diff --git a/src/api/applyregistration/diagnosisTemplate/index.ts b/src/api/applyregistration/diagnosisTemplate/index.ts index c296ad3c..86305456 100644 --- a/src/api/applyregistration/diagnosisTemplate/index.ts +++ b/src/api/applyregistration/diagnosisTemplate/index.ts @@ -6,17 +6,20 @@ import request from '@/config/axios' */ export const DiagnosisTemplateApi = { /* 测试方法 */ - getOrgList: async () => { + getOrgList: async () => { return await request.get({ url: `/org/org/getlist` }) }, - getDoctorList: async () => { + getDoctorList: async () => { return await request.get({ url: `/doctor/getlist` }) }, - getPage: async (params: any) => { + getPage: async (params: any) => { return await request.get({ url: `/system/reporttemplate/page`, params }) }, - getAllList: async () => { - return await request.get({ url: `/system/reporttemplate/getlist` }) + getRootTree: async () => { + return await request.get({ url: `/system/reporttemplate/getroot` }) + }, + hasChildren: async (id: any) => { + return await request.get({ url: `/system/reporttemplate/hasChildren?id=`+ id }) }, get: async (id: any) => { return await request.get({ url: `/system/reporttemplate/get?id=`+ id }) diff --git a/src/views/applyregistration/diagnosisTemplate/DiagnosisTemplateForm.vue b/src/views/applyregistration/diagnosisTemplate/DiagnosisTemplateForm.vue index 76a13be1..6cd0506b 100644 --- a/src/views/applyregistration/diagnosisTemplate/DiagnosisTemplateForm.vue +++ b/src/views/applyregistration/diagnosisTemplate/DiagnosisTemplateForm.vue @@ -13,13 +13,15 @@ > <el-row> <el-col :span="12"> - <el-form-item label="节点类型" prop="dataType" class="item-style"> + <el-form-item label="数据类型" prop="dataType" class="item-style"> <el-radio-group v-model="formData.dataType" :disabled="dataType_disabled" @change="dataType_change" > - <el-radio-button value="1">节点</el-radio-button> + <el-radio-button value="1"> + <div style="width: 40px; text-align: left">节点</div> + </el-radio-button> <el-radio-button value="0"> <div style="width: 60px; text-align: left">诊断模版</div> </el-radio-button> @@ -27,11 +29,31 @@ </el-form-item> </el-col> </el-row> + <el-row v-if="formData.dataType == '1'"> + <el-col :span="12"> + <el-form-item label="节点类型" class="item-style"> + <el-radio-group + v-model="rootType" + :disabled="dataType_disabled" + @change="root_change" + > + <el-radio-button value="1"> + <div style="width: 40px; text-align: left">根节点</div> + </el-radio-button> + <el-radio-button value="0"> + <div style="width: 60px; text-align: left">普通节点</div> + </el-radio-button> + </el-radio-group> + </el-form-item> + </el-col> + </el-row> <el-row v-if="formData.dataType == '0'"> <el-col :span="12"> <el-form-item label="模版类型" class="item-style"> <el-radio-group v-model="templateLimitsType"> - <el-radio-button value="1">公有</el-radio-button> + <el-radio-button value="1"> + <div style="width: 40px; text-align: left">公有</div> + </el-radio-button> <el-radio-button value="2"> <div style="width: 60px; text-align: left">私有</div> </el-radio-button> @@ -91,22 +113,57 @@ </el-row> <el-row> <el-col :span="24" v-if="formData.dataType == '0'"> - <el-form-item label="父节点" prop="pid" class="item-style"> - <el-select - v-model="parentTemplateInfo" - value-key="id" - placeholder="请选择父节点" + <el-form-item label="上级节点" prop="pid" class="item-style"> + <el-tree-select + ref="parentTreeRef" + :data="templateList" + v-model="formData.pid" + node-key="id" + :props="{ + label: 'templateName', + children: 'children', + disabled: (data) => { + if (data && true == data.isFirstRoot) return true + else return false + } + }" + :show-checkbox="true" + :check-strictly="true" + :default-expand-all="true" + :highlight-current="true" + empty-text="暂无数据" + placeholder="请选择上级节点" clearable class="item-width" - @change="pid_change" - > - <el-option - v-for="item in templateList" - :key="item.id" - :label="item.templateName" - :value="item" - /> - </el-select> + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="24" v-if="formData.dataType == '1' && rootType == '0'"> + <el-form-item label="上级节点" prop="pid" class="item-style"> + <el-tree-select + ref="parentTreeRef_root" + :data="templateList" + v-model="formData.pid" + node-key="id" + :props="{ + label: 'templateName', + children: 'children', + disabled: (data) => { + if (data && true == data.isFirstRoot) return false + else return true + } + }" + :show-checkbox="true" + :check-strictly="true" + :default-expand-all="false" + :highlight-current="true" + empty-text="暂无数据" + placeholder="请选择上级节点" + clearable + class="item-width" + /> </el-form-item> </el-col> </el-row> @@ -175,6 +232,8 @@ const emit = defineEmits(['success']) /** 组件引用 **/ const formRef = ref() +const parentTreeRef = ref() +const parentTreeRef_root = ref() /** 数据结构 **/ const message = useMessage() @@ -186,7 +245,7 @@ const formType = ref('') const orgList = ref<any[]>([]) const doctorList = ref<any[]>([]) const templateList = ref<any[]>([]) -const parentTemplateInfo = ref<any>() +const rootType = ref('') const templateLimitsType = ref<any>('2') const dataType_disabled = ref(false) //表单核心 @@ -221,50 +280,70 @@ const resetForm = () => { updateTime: undefined, orgId: '' } - parentTemplateInfo.value = undefined + rootType.value = '' templateLimitsType.value = '2' formRef.value?.clearValidate() } const open = async (type: string, id?: number) => { - dialogVisible.value = true - dialogTitle.value = t('action.' + type) - formType.value = type - resetForm() - orgList.value = await DiagnosisTemplateApi.getOrgList() - doctorList.value = await DiagnosisTemplateApi.getDoctorList() - templateList.value = await DiagnosisTemplateApi.getAllList() - if (id) { + try { formLoading.value = true - try { - const data = await DiagnosisTemplateApi.get(id) - formData.value = data - if (data && !data.privateDoctorId) templateLimitsType.value = '1' - parentTemplateInfo.value = templateList.value?.find((item) => { - return item?.id && formData.value?.pid && item.id == formData.value.pid + dialogVisible.value = true + dialogTitle.value = t('action.' + type) + formType.value = type + resetForm() + orgList.value = await DiagnosisTemplateApi.getOrgList() + doctorList.value = await DiagnosisTemplateApi.getDoctorList() + const rootTree = await DiagnosisTemplateApi.getRootTree() + if (rootTree && Array.isArray(rootTree) && rootTree.length > 0) { + rootTree.forEach((item) => { + if (item) item.isFirstRoot = true }) - } finally { - formLoading.value = false } + templateList.value = rootTree + if (id) { + try { + const data = await DiagnosisTemplateApi.get(id) + formData.value = data + if (data && !data.privateDoctorId) templateLimitsType.value = '1' + if (data && data.dataType && data.dataType.trim() == '1') { + if (data.pid && data.pid.trim() == '0') rootType.value = '1' + else rootType.value = '0' + } + //老代码 + //if (data && data.dataType && data.dataType.trim() == '0') + //parentTemplateInfo.value = templateList.value?.find((item) => { + // return item?.id && formData.value?.pid && item.id == formData.value.pid + //}) + } finally { + } + } + dataType_disabled.value = true && !!formData.value?.id + } finally { + formLoading.value = false } - dataType_disabled.value = true && !!formData.value?.id } /****** 可参考内容 ******/ /** 组件事件 **/ -const pid_change = async (value: any) => { - formData.value.pid = value ? value.id : '' -} - const dataType_change = () => { + formData.value.pid = '' if (formData.value?.dataType == '1') { + rootType.value = '0' templateLimitsType.value = '2' formData.value.privateDoctorId = '' - formData.value.pid = '0' formData.value.examDescription = '' formData.value.diagResults = '' } else if (formData.value?.dataType == '0') { + rootType.value = '' + } +} + +const root_change = () => { + if (rootType.value == '0') { formData.value.pid = '' + } else if (rootType.value == '1') { + formData.value.pid = '0' } } @@ -286,22 +365,40 @@ const submitForm = async () => { return } if (data.dataType && data.dataType == '0') { - if (templateLimitsType.value == '2' && !data.privateDoctorId) { - await message.alertWarning('请选择医生') + if (!data.pid) { + await message.alertWarning('请选择上级节点') return } - if (!data.pid || !parentTemplateInfo.value) { - await message.alertWarning('请选择父节点') + if (templateLimitsType.value == '2' && !data.privateDoctorId) { + await message.alertWarning('请选择医生') return } if (templateLimitsType.value == '1') { data.privateDoctorId = '' } - if (parentTemplateInfo.value) { - data.examPart = parentTemplateInfo.value.examPart + if ( + parentTreeRef.value && + Array.isArray(parentTreeRef.value.getCheckedNodes()) && + parentTreeRef.value.getCheckedNodes().length > 0 + ) { + data.examPart = parentTreeRef.value.getCheckedNodes()[0].examPart } } else if (data.dataType && data.dataType == '1') { - data.examPart = data.templateName + if (rootType.value == '0') { + if (!data.pid) { + await message.alertWarning('请选择上级节点') + return + } + if ( + parentTreeRef_root.value && + Array.isArray(parentTreeRef_root.value.getCheckedNodes()) && + parentTreeRef_root.value.getCheckedNodes().length > 0 + ) { + data.examPart = parentTreeRef_root.value.getCheckedNodes()[0].examPart + } + } else if (rootType.value == '1') { + data.examPart = data.templateName + } } //更新 if (formType.value === 'create') { diff --git a/src/views/applyregistration/diagnosisTemplate/index.vue b/src/views/applyregistration/diagnosisTemplate/index.vue index 225b63c0..db32c6fe 100644 --- a/src/views/applyregistration/diagnosisTemplate/index.vue +++ b/src/views/applyregistration/diagnosisTemplate/index.vue @@ -8,7 +8,7 @@ label-width="78px" label-position="right" label-suffix="" - class="-mb-15px" + class="-mb-8px" > <el-row> <el-col :span="9"> @@ -22,15 +22,34 @@ </el-form-item> </el-col> <el-col :span="8"> - <el-form-item label="模版类型" prop="templateLimitsType" class="item-style"> - <el-radio-group v-model="queryParams.templateLimitsType" class="radio-group"> - <el-radio value="0" style="margin-left: 15px; margin-right: 15px">全部</el-radio> - <el-radio value="1" style="margin-right: 15px">公共</el-radio> - <el-radio value="2" style="margin-right: 15px">私有</el-radio> + <el-form-item label="模版类别" prop="templateType" class="item-style"> + <el-select + v-model="queryParams.templateType" + placeholder="请选择模版类别" + clearable + class="item-width" + > + <el-option label="体检模版" value="体检模版" /> + <el-option label="门诊模版" value="门诊模版" /> + <el-option label="住院模版" value="住院模版" /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="7"> + <el-form-item label="模板类型" prop="templateLimitsType" class="item-style"> + <el-radio-group + v-model="queryParams.templateLimitsType" + class="item-width radio-group" + > + <el-radio value="0" style="margin-left: 15px; margin-right: 25px">全部</el-radio> + <el-radio value="1" style="margin-right: 25px">公共</el-radio> + <el-radio value="2">私有</el-radio> </el-radio-group> </el-form-item> </el-col> - <el-col :span="7" style="text-align: right"> + </el-row> + <el-row> + <el-col :offset="16" :span="8" style="text-align: right"> <el-button @click="handleQuery" style="background-color: rgba(56, 119, 246, 1); color: rgba(255, 255, 255, 1)" @@ -70,7 +89,7 @@ :header-cell-style="{ background: 'rgb(235, 241, 250)', height: '40px', color: '#333333' }" :row-style="{ height: '40px' }" class="list_templates" - height="max(calc(100vh - 422px),80px)" + height="max(calc(100vh - 464px),80px)" :tree-props="{ children: 'children' }" :row-key=" (row) => { @@ -87,13 +106,38 @@ align="left" header-align="center" prop="rowNumIndex" - width="140px" - resizable + min-width="190px" /> - <el-table-column label="节点" align="left" header-align="center" prop="templateName" /> - <el-table-column label="所见" align="center" prop="examDescription" /> - <el-table-column label="所得" align="center" prop="diagResults" /> - <el-table-column label="操作" align="center" fixed="right" width="180px"> + <el-table-column + label="节点" + align="left" + header-align="left" + prop="templateName" + min-width="250px" + /> + <el-table-column label="模板类别" align="center" prop="templateType" width="100px" /> + <el-table-column label="模板类型" align="center" prop="privateDoctorId" width="100px"> + <template #default="scope"> + <el-tag + v-if="scope.row.dataType == '0' && !scope.row.privateDoctorId" + effect="plain" + style="width: 74px" + > + 公共 + </el-tag> + <el-tag + v-else-if="scope.row.dataType == '0' && scope.row.privateDoctorId" + effect="plain" + type="warning" + style="width: 74px" + > + 私有 + </el-tag> + </template> + </el-table-column> + <el-table-column label="所见" align="left" prop="examDescription" min-width="230px" /> + <el-table-column label="所得" align="left" prop="diagResults" min-width="230px" /> + <el-table-column label="操作" align="center" fixed="right" width="150px"> <template #default="scope"> <el-button link @@ -154,6 +198,7 @@ const queryParams = ref({ pageNo: 1, pageSize: 10, templateName: '', + templateType: '', templateLimitsType: '0' }) //表格核心 @@ -196,6 +241,13 @@ const openForm = async (type: string, id?: any) => { const handleDelete = async (id: any) => { try { + //校验 + const hasChildren = await DiagnosisTemplateApi.hasChildren(id) + if (hasChildren) { + message.alertWarning('该节点存在子节点,所以不能删除') + return + } + //删除 await message.delConfirm() await DiagnosisTemplateApi.delete(id) message.success(t('common.delSuccess')) @@ -204,7 +256,7 @@ const handleDelete = async (id: any) => { } const getList = async () => { - expandRowKeys.value = [] + //expandRowKeys.value = [] //搜索数据闭合显示 loading.value = true try { const data = await DiagnosisTemplateApi.getPage(queryParams.value) @@ -226,6 +278,7 @@ const resetQuery = async () => { pageNo: 1, pageSize: 10, templateName: '', + templateType: '', templateLimitsType: '0' } queryFormRef.value?.clearValidate() @@ -255,7 +308,7 @@ console.log(download) } .item-style { - margin-bottom: 6px; + margin-bottom: 8px; } .item-width { @@ -274,7 +327,7 @@ console.log(download) --el-table-tr-bg-color: #f2f5f198; } -.list_templates :deep(tbody) tr:hover > td { - background-color: transparent !important; +.list_templates :deep(tbody) tr:not(.grey-row):hover > td { + background-color: #ffffff !important; } </style>