فهرست منبع

Merge branch 'cc-dev' into 'dev'

添加定制部门

See merge request product-group-fe/sfy-safety-group/sfy-safety!157
陈昶 9 ماه پیش
والد
کامیت
b7b0db28da

+ 1 - 0
src/constant/dict.ts

@@ -11,4 +11,5 @@ export const DICT_CODE = {
   LOCATION_DC: 'dachang_park',
   DRILL_SIGN_TYPE: 'emergency_drill_scope',
   PLAN_TYPE: 'emergency_response',
+  DISASTER_DEPARTMENT: 'department:disaster',
 };

+ 8 - 3
src/views/disaster/disaster-control/PageDisposalManagement.vue

@@ -32,7 +32,12 @@
                 @change="handleChangeReportDeptIds"
                 class="custom-select"
               >
-                <el-option v-for="item in firstLevelDepts" :key="item.id" :label="item.deptName" :value="item.id" />
+                <el-option
+                  v-for="item in originalDisasterLevelDepts"
+                  :key="item.itemCode"
+                  :label="item.itemValue"
+                  :value="item.itemCode"
+                />
               </el-select>
             </template>
           </BasicSearch>
@@ -250,7 +255,7 @@
   const collapseList = ref<DisposalManagementCollapseListResponse<DisposalManagementTableResponse>[]>([]);
   const disposalManagementPermissions = ref(false);
 
-  const { firstLevelDepts, getFirstLevelDepts } = useDeptInfoHook();
+  const { getDisasterLevelDepts, originalDisasterLevelDepts } = useDeptInfoHook();
   const { tableConfig } = useTableConfig(DISPOSAL_MANAGEMENT_TABLE_COLUMNS, DISPOSAL_MANAGEMENT_TABLE_OPTIONS, false);
 
   const activeId = ref<number | null>(null);
@@ -458,7 +463,7 @@
   };
 
   onMounted(async () => {
-    getFirstLevelDepts();
+    getDisasterLevelDepts();
     await getDisposalData();
     await getDisposalTableData();
     disposalManagementPermissions.value = Boolean(

+ 14 - 7
src/views/disaster/disaster-control/src/components/CreateDisposalManagementItem.vue

@@ -10,14 +10,20 @@
           :max-collapse-tags="2"
           placeholder="请选择上报部门"
           filterable
+          :filter-method="handleFilterMethod"
           class="custom-select"
         >
-          <template #header>
+          <template #header v-if="isFilterData">
             <el-checkbox v-model="checkAll" :indeterminate="indeterminate" @change="handleCheckAllChange">
               全部部门
             </el-checkbox>
           </template>
-          <el-option v-for="item in firstLevelDepts" :key="item.id" :label="item.deptName" :value="item.id" />
+          <el-option
+            v-for="item in disasterLevelDepts"
+            :key="item.itemCode"
+            :label="item.itemValue"
+            :value="Number(item.itemCode)"
+          />
         </el-select>
       </template>
       <template #userGroupList>
@@ -48,7 +54,8 @@
   } from '../config';
 
   const { realname } = useUserInfoHook();
-  const { getFirstLevelDepts, firstLevelDepts } = useDeptInfoHook();
+  const { disasterLevelDepts, originalDisasterLevelDepts, getDisasterLevelDepts, isFilterData, handleFilterMethod } =
+    useDeptInfoHook();
   const { groupOptions, getUserGroupList } = useGroupInfoHook();
   const route = useRoute();
   const taskName = route.query.taskName as string;
@@ -74,7 +81,7 @@
   const indeterminate = ref(false);
   const handleCheckAllChange = () => {
     if (checkAll.value) {
-      ruleFormData.deptIds = firstLevelDepts.value.filter((item) => item.id !== null).map((item) => item.id as number);
+      ruleFormData.deptIds = originalDisasterLevelDepts.value.map((item) => Number(item.itemCode));
     } else {
       ruleFormData.deptIds = [];
     }
@@ -86,7 +93,7 @@
   onMounted(() => {
     ruleFormData.createdByName = realname;
     ruleFormData.taskName = taskName;
-    getFirstLevelDepts();
+    getDisasterLevelDepts();
     getUserGroupList();
     cloneRuleFormData();
     beforeRouteLeave();
@@ -94,8 +101,8 @@
   watch(
     () => ruleFormData.deptIds,
     (newVal) => {
-      checkAll.value = newVal.length === firstLevelDepts.value.length;
-      indeterminate.value = newVal.length > 0 && newVal.length < firstLevelDepts.value.length;
+      checkAll.value = newVal.length === originalDisasterLevelDepts.value.length;
+      indeterminate.value = newVal.length > 0 && newVal.length < originalDisasterLevelDepts.value.length;
     },
   );
 </script>

+ 19 - 7
src/views/disaster/disaster-control/src/components/CreateDisposalManagementTaskItem.vue

@@ -10,13 +10,19 @@
           :max-collapse-tags="2"
           placeholder="请选择上报部门"
           filterable
+          :filter-method="handleFilterMethod"
         >
-          <template #header>
+          <template #header v-if="isFilterData">
             <el-checkbox v-model="checkAll" :indeterminate="indeterminate" @change="handleCheckAllChange">
               全部部门
             </el-checkbox>
           </template>
-          <el-option v-for="item in firstLevelDepts" :key="item.id" :label="item.deptName" :value="item.id" />
+          <el-option
+            v-for="item in disasterLevelDepts"
+            :key="item.itemCode"
+            :label="item.itemValue"
+            :value="Number(item.itemCode)"
+          />
         </el-select>
       </template>
       <template #userGroupList>
@@ -46,7 +52,13 @@
   import type { DisposalManagementRuleForm } from '@/types/disaster-control';
 
   const { realname } = useUserInfoHook();
-  const { getFirstLevelDepts, firstLevelDepts } = useDeptInfoHook();
+  const {
+    originalDisasterLevelDepts,
+    disasterLevelDepts,
+    getDisasterLevelDepts,
+    handleFilterMethod,
+    isFilterData,
+  } = useDeptInfoHook();
   const { getUserGroupList, groupOptions } = useGroupInfoHook();
 
   const basicFormRef = ref<InstanceType<typeof BasicForm>>();
@@ -71,7 +83,7 @@
   const indeterminate = ref(false);
   const handleCheckAllChange = () => {
     if (checkAll.value) {
-      ruleFormData.deptIds = firstLevelDepts.value.filter((item) => item.id !== null).map((item) => item.id as number);
+      ruleFormData.deptIds = originalDisasterLevelDepts.value.map((item) => Number(item.itemCode));
     } else {
       ruleFormData.deptIds = [];
     }
@@ -82,7 +94,7 @@
   });
   onMounted(() => {
     ruleFormData.createdByName = realname;
-    getFirstLevelDepts();
+    getDisasterLevelDepts();
     getUserGroupList();
     cloneRuleFormData();
     beforeRouteLeave();
@@ -90,8 +102,8 @@
   watch(
     () => ruleFormData.deptIds,
     (newVal) => {
-      checkAll.value = newVal.length === firstLevelDepts.value.length;
-      indeterminate.value = newVal.length > 0 && newVal.length < firstLevelDepts.value.length;
+      checkAll.value = newVal.length === originalDisasterLevelDepts.value.length;
+      indeterminate.value = newVal.length > 0 && newVal.length < originalDisasterLevelDepts.value.length;
     },
   );
 </script>

+ 14 - 8
src/views/disaster/disaster-precaution/src/components/CreateTaskItem.vue

@@ -10,13 +10,19 @@
           :max-collapse-tags="3"
           placeholder="请选择被检查(自查)所/部/中心"
           filterable
+          :filter-method="handleFilterMethod"
         >
-          <template #header>
+          <template #header v-if="isFilterData">
             <el-checkbox v-model="checkAll" :indeterminate="indeterminate" @change="handleCheckAllChange">
               全部单位
             </el-checkbox>
           </template>
-          <el-option v-for="item in firstLevelDepts" :key="item.id" :label="item.deptName" :value="String(item.id)" />
+          <el-option
+            v-for="item in disasterLevelDepts"
+            :key="item.itemCode"
+            :label="item.itemValue"
+            :value="String(item.itemCode)"
+          />
         </el-select>
       </template>
       <template #inspectType>
@@ -55,7 +61,8 @@
   import { IS_PUSH } from '@/views/disaster/constant';
 
   const { realname } = useUserInfoHook();
-  const { getFirstLevelDepts, firstLevelDepts } = useDeptInfoHook();
+  const { getDisasterLevelDepts, originalDisasterLevelDepts, disasterLevelDepts, isFilterData, handleFilterMethod } =
+    useDeptInfoHook();
   const { getUserGroupList, groupOptions } = useGroupInfoHook();
 
   const basicFormRef = ref<InstanceType<typeof BasicForm>>();
@@ -84,8 +91,7 @@
   const indeterminate = ref(false);
   const handleCheckAllChange = () => {
     if (checkAll.value) {
-      ruleFormData.deptIdList = firstLevelDepts.value.map((item) => String(item.id));
-      console.log(ruleFormData.deptIdList);
+      ruleFormData.deptIdList = originalDisasterLevelDepts.value.map((item) => String(item.itemCode));
     } else {
       ruleFormData.deptIdList = [];
     }
@@ -96,7 +102,7 @@
   });
 
   onMounted(() => {
-    getFirstLevelDepts();
+    getDisasterLevelDepts();
     getUserGroupList();
     ruleFormData.realname = realname;
     cloneRuleFormData();
@@ -105,8 +111,8 @@
   watch(
     () => ruleFormData.deptIdList,
     (newVal) => {
-      checkAll.value = newVal.length === firstLevelDepts.value.length;
-      indeterminate.value = newVal.length > 0 && newVal.length < firstLevelDepts.value.length;
+      checkAll.value = newVal.length === originalDisasterLevelDepts.value.length;
+      indeterminate.value = newVal.length > 0 && newVal.length < originalDisasterLevelDepts.value.length;
     },
   );
 </script>

+ 23 - 0
src/views/disaster/hooks/deptInfo.ts

@@ -4,15 +4,38 @@
 import { ref } from 'vue';
 import { formatDeptTree } from '@/views/disaster/utils/formatDeptTree';
 import type { DeptTreeItem } from '@/types/dept/type';
+import type { SysDictDataDetail } from '@/api/dict';
 import { getAllDepartments } from '@/api/auth/dept';
+import { queryDictTypeDetail } from '@/api/dict';
+import { DICT_CODE } from '@/constant/dict';
+
 export const useDeptInfoHook = () => {
   const firstLevelDepts = ref<DeptTreeItem[]>([]); // 第一部门的列表
+  const disasterLevelDepts = ref<SysDictDataDetail[]>([]); // 获取灾害防范定制的一级部门
+  const originalDisasterLevelDepts = ref<SysDictDataDetail[]>([]); // 获取灾害防范定制的一级部门
+  const isFilterData = ref<boolean>(false);
   const getFirstLevelDepts = async () => {
     const res = await getAllDepartments();
     firstLevelDepts.value = formatDeptTree(res);
   };
+  const getDisasterLevelDepts = async () => {
+    const res = await queryDictTypeDetail(DICT_CODE.DISASTER_DEPARTMENT);
+    originalDisasterLevelDepts.value = res.sysDictDataList;
+  };
+  const handleFilterMethod = (query: string) => {
+    const filtered = originalDisasterLevelDepts.value.filter((item) =>
+      item.itemValue.toLowerCase().includes(query.toLowerCase()),
+    );
+    disasterLevelDepts.value = filtered;
+    isFilterData.value = filtered.length > 0;
+  };
   return {
     getFirstLevelDepts,
     firstLevelDepts,
+    disasterLevelDepts,
+    originalDisasterLevelDepts,
+    getDisasterLevelDepts,
+    handleFilterMethod,
+    isFilterData
   };
 };

+ 1 - 1
src/views/emergency/emergency-plan/PageManagement.vue

@@ -20,7 +20,7 @@
             @update:searchData="handleSearch"
           >
             <template #planType>
-              <el-select v-model="searchData.planType" placeholder="请输入预案层级" filterable>
+              <el-select v-model="searchData.planType" placeholder="请输入预案类型" filterable>
                 <el-option
                   v-for="item in planTypeDice"
                   :key="item.itemCode"

+ 1 - 1
src/views/emergency/emergency-plan/src/components/AddManagementDetail.vue

@@ -2,7 +2,7 @@
   <div class="emergency-plan-container">
     <BasicForm ref="formRef" :formData="ruleFormData" :formRules="formRules" :formConfig="ruleFormConfig">
       <template #planType>
-        <el-select v-model="ruleFormData.planType" placeholder="请选择预案层级" filterable>
+        <el-select v-model="ruleFormData.planType" placeholder="请选择预案类型" filterable>
           <el-option v-for="item in planTypeDice" :key="item.itemCode" :label="item.itemValue" :value="item.itemCode" />
         </el-select>
       </template>

+ 4 - 4
src/views/emergency/emergency-plan/src/config/form.ts

@@ -20,7 +20,7 @@ export const PLAN_MANAGEMENT_FORM_CONFIG: FormConfig[] = [
     },
   },
   {
-    label: '预案层级:',
+    label: '预案类型:',
     prop: 'planType',
     slot: 'planType',
   },
@@ -53,11 +53,11 @@ export const PLAN_MANAGEMENT_FORM_CONFIG_EDIT: FormConfig[] = [
     },
   },
   {
-    label: '预案层级:',
+    label: '预案类型:',
     prop: 'planType',
     component: 'ElInput',
     componentProps: {
-      placeholder: '请输入预案层级',
+      placeholder: '请输入预案类型',
       disabled: true,
     },
   },
@@ -106,7 +106,7 @@ export const PLAN_MANAGEMENT_FORM_DATA = {
 // 盘点任务表单规则
 export const PLAN_MANAGEMENT_FORM_RULES = {
   planName: [{ required: true, message: '请输入预案名称', trigger: 'blur' }],
-  planType: [{ required: true, message: '请选择预案层级', trigger: 'change' }],
+  planType: [{ required: true, message: '请选择预案类型', trigger: 'change' }],
   eventType: [{ required: true, message: '请选择事件类型', trigger: 'change' }],
   deptId: [{ required: true, message: '请选择制定部门', trigger: 'blur' }],
   approvalTemplateId: [{ required: true, message: '请选择审批流程', trigger: 'change' }],

+ 1 - 1
src/views/emergency/emergency-plan/src/config/search.ts

@@ -11,7 +11,7 @@ export const EMERGENCY_PLAN_MANAGEMENT_SEARCH_CONFIG: SearchConfig[] = [
     },
   },
   {
-    label: '预案层级:',
+    label: '预案类型:',
     prop: 'planType',
     slot: 'planType',
   },

+ 2 - 2
src/views/emergency/emergency-plan/src/config/table.ts

@@ -20,12 +20,12 @@ const BASIC_TABLE_COLUMNS = {
     minWidth: '120px',
   },
   PLAN_TYPE: {
-    label: '预案层级',
+    label: '预案类型',
     slot: 'planType',
     minWidth: '120px',
   },
   ENENT_TYPE: {
-    label: '预案类型',
+    label: '事件类型',
     slot: 'eventType',
     minWidth: '120px',
   },

+ 1 - 1
src/views/emergency/emergency-plan/src/hook.ts

@@ -7,7 +7,7 @@ import { queryDictTypeDetail } from '@/api/dict';
 import { DICT_CODE } from '@/constant/dict';
 import { EMERGENCY_PLAN_STATUS_OPTIONS } from './constant';
 export const useEmergencyPlanHook = () => {
-  // 预案层级
+  // 预案类型
   const planTypeDice = ref<SysDictDataDetail[]>([]);
   const getPlanTypeDict = async () => {
     const planTypeRes = await queryDictTypeDetail(DICT_CODE.PLAN_TYPE);