Просмотр исходного кода

feat: 应急预案添加字段和启停按钮

wyf 5 месяцев назад
Родитель
Сommit
8ad427a3ff

+ 11 - 0
src/api/emergency-plan/index.ts

@@ -43,6 +43,17 @@ export const deleteEmergencyPlan = (emergencyPlanId: number) => {
   });
 };
 
+/**
+ * 更新应急预案启停状态
+ */
+export const updateEmergencyPlanDisabled = (data: { planId: number; isDisabled: number }) => {
+  return http.request({
+    url: '/emergencyPlan/updateEmergencyPlanStatus',
+    method: 'post',
+    data,
+  });
+};
+
 /**
  * 查询应急预案详情
  */

+ 5 - 1
src/types/emergency-plan/index.ts

@@ -4,6 +4,7 @@ export interface PlanEmergencyListQuery {
   planName?: string;
   planType?: string;
   eventType?: string;
+  professionalTestSite?: string;
   status?: number;
 }
 
@@ -21,6 +22,8 @@ interface BasicListResponse {
 }
 
 export interface PlanEmergencyListResponse extends BasicListResponse {
+  professionalTestSite: string | null;
+  isDisabled: number;
   status: number;
   approvalTemplateId: number;
 }
@@ -34,7 +37,8 @@ export interface PlanApprovalListResponse extends BasicListResponse {
   approvalOrder: number;
 }
 
-export interface AddEmergencyPlanForm extends Omit<PlanEmergencyListResponse, 'id' | 'status' | 'approvalTemplateId'> {
+export interface AddEmergencyPlanForm
+  extends Omit<PlanEmergencyListResponse, 'id' | 'status' | 'approvalTemplateId' | 'isDisabled'> {
   uploadFile: FileItem[];
   appendix: string;
   approvalTemplateId: number | null;

+ 49 - 10
src/views/emergency/emergency-plan/PageManagement.vue

@@ -65,6 +65,19 @@
               >{{ getEmergencyPlanStatusLabel(scope.row.status) }}</span
             >
           </template>
+          <template #isDisabled="scope">
+            <div
+              style="cursor: pointer; width: 50px; margin: auto"
+              @click="handleChangeDisable(scope.row.id, scope.row.isDisabled)"
+            >
+              <el-switch
+                v-model="scope.row.isDisabled"
+                :active-value="0"
+                :inactive-value="1"
+                style="pointer-events: none"
+              />
+            </div>
+          </template>
           <template #action="scope">
             <div class="action-container--div">
               <ActionButton text="查看" @click="handleView(scope.row.id)" />
@@ -106,7 +119,7 @@
   import { useRouter } from 'vue-router';
   import { ref, reactive, onMounted } from 'vue';
   import { Plus } from '@element-plus/icons-vue';
-  import { ElMessage } from 'element-plus';
+  import { ElMessage, ElSwitch } from 'element-plus';
   import BasicSearch from '@/components/BasicSearch.vue';
   import BasicTable from '@/components/BasicTable.vue';
   import BasicDialog from '@/components/BasicDialog.vue';
@@ -123,7 +136,12 @@
     ApprovalProcessResponse,
     ProcessInfoListType,
   } from '@/types/emergency-plan';
-  import { getEmergencyPlanList, deleteEmergencyPlan, queryApprovalProcess } from '@/api/emergency-plan';
+  import {
+    getEmergencyPlanList,
+    deleteEmergencyPlan,
+    updateEmergencyPlanDisabled,
+    queryApprovalProcess,
+  } from '@/api/emergency-plan';
   import {
     EMERGENCY_PLAN_MANAGEMENT_SEARCH_CONFIG,
     EMERGENCY_PLAN_MANAGEMENT_TABLE_OPTIONS,
@@ -134,7 +152,13 @@
     APPROVAL_PROCESS_TABLE_OPTIONS,
   } from './src/config';
   import { EMERGENCY_PERMISSIONS } from '@/views/emergency/src/constant';
-  import { EMERGENCY_PLAN_STATUS, APPROVAL_TYPE_MAP, APPROVAL_STATUS_MAP, APPROVAL_STATUS, APPROVAL_TYPE } from './src/constant';
+  import {
+    EMERGENCY_PLAN_STATUS,
+    APPROVAL_TYPE_MAP,
+    APPROVAL_STATUS_MAP,
+    APPROVAL_STATUS,
+    APPROVAL_TYPE,
+  } from './src/constant';
 
   const router = useRouter();
   const planManagementPremissions = ref<boolean>(false);
@@ -183,30 +207,30 @@
       // 遍历所有行,寻找符合条件的行
       for (let i = 0; i < approvalProcessData.value.length; i++) {
         const row = approvalProcessData.value[i];
-        
+
         // 如果没有审批时间,返回该行索引
         if (!row.approvalTime) {
           return i;
         }
-        
+
         // 如果有审批时间且状态为退回,返回该行索引
         if (row.approvalTime && row.approvalStatus === APPROVAL_STATUS.REJECTED) {
           return i;
         }
       }
-      
+
       // 如果没有找到符合条件的行,返回最后一行索引
       return approvalProcessData.value.length - 1;
     };
-    
+
     // 获取应该高亮的行索引
     const highlightRowIndex = findHighlightRowIndex();
-    
+
     // 如果当前行是应该高亮的行,则高亮
     if (rowIndex === highlightRowIndex) {
       return 'row--highlight';
     }
-    
+
     // 特殊处理:如果高亮行是或签,且当前行与高亮行属于同一流程步骤,也高亮
     const highlightRow = approvalProcessData.value[highlightRowIndex];
     if (highlightRow) {
@@ -216,7 +240,7 @@
         return 'row--highlight';
       }
     }
-    
+
     return '';
   };
   const { tableConfig: approvalProcessConfig } = useTableConfig(
@@ -242,6 +266,7 @@
     planName: null,
     planType: null,
     eventType: null,
+    professionalTestSite: null,
     status: null,
   });
   const handleSearch = () => {
@@ -255,6 +280,9 @@
     if (searchData.eventType) {
       planManagementListQuery.queryParam.eventType = searchData.eventType;
     }
+    if (searchData.professionalTestSite) {
+      planManagementListQuery.queryParam.professionalTestSite = searchData.professionalTestSite;
+    }
     if (searchData.status !== null) {
       planManagementListQuery.queryParam.status = searchData.status;
     }
@@ -277,6 +305,17 @@
     planManagementListQuery.pageNumber = value;
     getTableData();
   };
+
+  const handleChangeDisable = async (id: number, value: number) => {
+    try {
+      await updateEmergencyPlanDisabled({ planId: id, isDisabled: value === 1 ? 0 : 1 });
+      ElMessage.success('操作成功');
+    } catch (error) {
+      ElMessage.error('操作失败');
+    }
+    getTableData();
+    return false;
+  };
   const defaultName = 'plan-management-detail';
   const handleAdd = () => {
     router.push({

+ 18 - 1
src/views/emergency/emergency-plan/src/config/form.ts

@@ -34,6 +34,14 @@ export const PLAN_MANAGEMENT_FORM_CONFIG: FormConfig[] = [
     prop: 'deptId',
     slot: 'deptId',
   },
+  {
+    label: '试验专业场所:',
+    prop: 'professionalTestSite',
+    component: 'ElInput',
+    componentProps: {
+      placeholder: '请输入试验专业场所',
+    },
+  },
   {
     label: '审批流程:',
     prop: 'approvalTemplateId',
@@ -79,6 +87,14 @@ export const PLAN_MANAGEMENT_FORM_CONFIG_EDIT: FormConfig[] = [
       disabled: true,
     },
   },
+  {
+    label: '试验专业场所:',
+    prop: 'professionalTestSite',
+    component: 'ElInput',
+    componentProps: {
+      disabled: true,
+    },
+  },
   {
     label: '审批流程:',
     prop: 'approvalTemplateName',
@@ -98,6 +114,7 @@ const BASE_FORM_DATA = {
   eventType: '',
   deptId: null,
   deptName: '',
+  professionalTestSite: null,
   approvalTemplateId: null,
   appendix: '',
   uploadFile: [],
@@ -123,7 +140,7 @@ export const PLAN_MANAGEMENT_FORM_RULES = {
   eventType: [{ required: true, message: '请选择事件类型', trigger: 'change' }],
   deptId: [{ required: true, message: '请选择制定部门', trigger: 'change' }],
   approvalTemplateId: [{ required: true, message: '请选择审批流程', trigger: 'change' }],
-  ...BASIC_FORM_RULES
+  ...BASIC_FORM_RULES,
 };
 
 export const PLAN_MANAGEMENT_FORM_RULES_EDIT = {

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

@@ -20,6 +20,14 @@ export const EMERGENCY_PLAN_MANAGEMENT_SEARCH_CONFIG: SearchConfig[] = [
     prop: 'eventType',
     slot: 'eventType',
   },
+  {
+    label: '试验专业场所:',
+    prop: 'professionalTestSite',
+    component: 'ElInput',
+    componentProps: {
+      placeholder: '请输入试验专业场所',
+    },
+  },
   {
     label: '状态:',
     prop: 'status',
@@ -42,4 +50,4 @@ export const EMERGENCY_PLAN_APPROVAL_SEARCH_CONFIG: SearchConfig[] = [
       placeholder: '请选择审批状态',
     },
   },
-];
+];

+ 15 - 4
src/views/emergency/emergency-plan/src/config/table.ts

@@ -64,11 +64,22 @@ export const EMERGENCY_PLAN_MANAGEMENT_TABLE_COLUMNS: TableColumnProps[] = [
   BASIC_TABLE_COLUMNS.PLAN_TYPE,
   BASIC_TABLE_COLUMNS.ENENT_TYPE,
   BASIC_TABLE_COLUMNS.DEPT_NAME,
+  {
+    label: '试验专业场所',
+    prop: 'professionalTestSite',
+    minWidth: '160px',
+  },
   {
     label: '状态',
     slot: 'status',
     minWidth: '120px',
   },
+  {
+    label: '启停',
+    slot: 'isDisabled',
+    minWidth: '60px',
+    align: 'center',
+  },
   BASIC_TABLE_COLUMNS.ACTION,
 ];
 
@@ -112,7 +123,7 @@ export const APPROVAL_PROCESS_TABLE_COLUMNS: TableColumnProps[] = [
     label: '流程步骤',
     prop: 'approvalOrder',
     align: 'center',
-    width: '120px'
+    width: '120px',
   },
   {
     label: '节点描述',
@@ -126,19 +137,19 @@ export const APPROVAL_PROCESS_TABLE_COLUMNS: TableColumnProps[] = [
     label: '审批方式',
     slot: 'approvalType',
     align: 'center',
-    width: '120px'
+    width: '120px',
   },
   {
     label: '状态',
     slot: 'approvalStatus',
     align: 'center',
-    width: '100px'
+    width: '100px',
   },
   {
     label: '审批时间',
     prop: 'approvalTime',
     width: '200px',
-    slot: 'approvalTime'
+    slot: 'approvalTime',
   },
   {
     label: '审批内容',

+ 2 - 2
src/views/security-confidentiality/access-control/AccessControl.vue

@@ -83,7 +83,7 @@
     deleteAccessRecord,
   } from '@/api/security-confidentiality-access';
   import { ACCESS_MANAGEMENT_PERMISSION, ACCESS_TABLE_SEARCH_OPTIONS } from './constants';
-  import { TABLE_OPTIONS, ACCESS_TABEL_COLUMNS, ACCESS_TABEL_COLUMNS_CHECKONLY } from './configs/tables';
+  import { TABLE_OPTIONS, ACCESS_TABLE_COLUMNS, ACCESS_TABLE_COLUMNS_CHECKONLY } from './configs/tables';
   import type { AccessDetailResponse, AccessTableQuery } from './types';
   import type { QueryPageRequest } from '@/types/basic-query';
   import dayjs from 'dayjs';
@@ -155,7 +155,7 @@
 
   // 表格
   const { tableConfig, pagination } = useTableConfig(
-    managementPermission.value ? ACCESS_TABEL_COLUMNS : ACCESS_TABEL_COLUMNS_CHECKONLY,
+    managementPermission.value ? ACCESS_TABLE_COLUMNS : ACCESS_TABLE_COLUMNS_CHECKONLY,
     TABLE_OPTIONS,
   );
   const tableData = ref<AccessDetailResponse[]>([]);

+ 2 - 2
src/views/security-confidentiality/access-control/configs/tables.ts

@@ -4,7 +4,7 @@ export const TABLE_OPTIONS = {
   maxHeight: 'calc(70vh - 150px)',
 };
 
-export const ACCESS_TABEL_COLUMNS = [
+export const ACCESS_TABLE_COLUMNS = [
   {
     label: '序号',
     align: 'center',
@@ -45,7 +45,7 @@ export const ACCESS_TABEL_COLUMNS = [
   },
 ];
 
-export const ACCESS_TABEL_COLUMNS_CHECKONLY = [
+export const ACCESS_TABLE_COLUMNS_CHECKONLY = [
   {
     label: '序号',
     align: 'center',

+ 2 - 2
src/views/security-confidentiality/person-management/inner-person/InnerPerson.vue

@@ -99,7 +99,7 @@
   import BasicTable from '@/components/BasicTable.vue';
   import useTableConfig from '@/hooks/useTableConfigHook';
   import SelectableInput from '@/components/formItems/selectableInput/SelectableInput.vue';
-  import { TABLE_OPTIONS, INNER_PERSON_TABEL_COLUMNS } from './configs/table';
+  import { TABLE_OPTIONS, INNER_PERSON_TABLE_COLUMNS } from './configs/table';
   import { onMounted, reactive, ref } from 'vue';
   import { QueryPageRequest, QueryPageResponse } from '@/types/basic-query';
   import type { InnerPersonTableData, InnerPersonTableQuery } from './types';
@@ -146,7 +146,7 @@
     tableConfig.loading = false;
   }
 
-  const { tableConfig, pagination } = useTableConfig(INNER_PERSON_TABEL_COLUMNS, TABLE_OPTIONS);
+  const { tableConfig, pagination } = useTableConfig(INNER_PERSON_TABLE_COLUMNS, TABLE_OPTIONS);
 
   const tableData = ref<InnerPersonTableData[]>([]);
 

+ 1 - 1
src/views/security-confidentiality/person-management/inner-person/configs/table.ts

@@ -4,7 +4,7 @@ export const TABLE_OPTIONS = {
   maxHeight: 'calc(70vh - 150px)',
 };
 
-export const INNER_PERSON_TABEL_COLUMNS = [
+export const INNER_PERSON_TABLE_COLUMNS = [
   {
     prop: 'employeeName',
     slot: 'employeeName',

+ 2 - 2
src/views/security-confidentiality/person-management/outer-person/components/BreakInto.vue

@@ -62,7 +62,7 @@
   import { QueryPageRequest, QueryPageResponse } from '@/types/basic-query';
   import { BreakTableData, BreakTableQuery } from '../types';
   import { ALARM_PUSH_PROMISSION_CODE, BREAK_EVENT_TYPE_LABEL, DATA_SOURCE_TYPE_LABEL } from '../constants';
-  import { OUTER_PERSON_BREAK_TABEL_COLUMNS, TABLE_OPTIONS } from '../configs/table';
+  import { OUTER_PERSON_BREAK_TABLE_COLUMNS, TABLE_OPTIONS } from '../configs/table';
   import { exportBreakTableList, getBreakTableList } from '@/api/security-confidentiality-person/outer-person';
   import { ElMessage } from 'element-plus';
   import { downloadFile } from '@/views/disaster/utils';
@@ -80,7 +80,7 @@
   const searchData = reactive<BreakTableQuery>({});
   const searchTime = ref<string[]>();
 
-  const { tableConfig, pagination } = useTableConfig(OUTER_PERSON_BREAK_TABEL_COLUMNS, TABLE_OPTIONS);
+  const { tableConfig, pagination } = useTableConfig(OUTER_PERSON_BREAK_TABLE_COLUMNS, TABLE_OPTIONS);
 
   const tableData = ref<BreakTableData[]>([]);
 

+ 2 - 2
src/views/security-confidentiality/person-management/outer-person/components/Visitor.vue

@@ -124,7 +124,7 @@
   import { onMounted, reactive, ref } from 'vue';
   import { QueryPageRequest, QueryPageResponse } from '@/types/basic-query';
   import { VisitorTableData, VisitorTableQuery } from '../types';
-  import { OUTER_PERSON_VISITOR_TABEL_COLUMNS, TABLE_OPTIONS } from '../configs/table';
+  import { OUTER_PERSON_VISITOR_TABLE_COLUMNS, TABLE_OPTIONS } from '../configs/table';
   import {
     VISITOR_TABLE_SEARCH_OPTIONS,
     IS_FOREIGNER_TYPE_OPTIONS,
@@ -152,7 +152,7 @@
   ]);
   const leaveTime = ref<string[]>();
 
-  const { tableConfig, pagination } = useTableConfig(OUTER_PERSON_VISITOR_TABEL_COLUMNS, TABLE_OPTIONS);
+  const { tableConfig, pagination } = useTableConfig(OUTER_PERSON_VISITOR_TABLE_COLUMNS, TABLE_OPTIONS);
 
   const tableData = ref<VisitorTableData[]>([]);
 

+ 2 - 2
src/views/security-confidentiality/person-management/outer-person/configs/table.ts

@@ -7,7 +7,7 @@ export const TABLE_OPTIONS = {
   maxHeight: 'calc(70vh - 150px)',
 };
 
-export const OUTER_PERSON_BREAK_TABEL_COLUMNS: TableColumnProps[] = [
+export const OUTER_PERSON_BREAK_TABLE_COLUMNS: TableColumnProps[] = [
   {
     label: '序号',
     align: 'center',
@@ -51,7 +51,7 @@ export const OUTER_PERSON_BREAK_TABEL_COLUMNS: TableColumnProps[] = [
   },
 ];
 
-export const OUTER_PERSON_VISITOR_TABEL_COLUMNS: TableColumnProps[] = [
+export const OUTER_PERSON_VISITOR_TABLE_COLUMNS: TableColumnProps[] = [
   {
     label: '来访者',
     align: 'left',

+ 2 - 2
src/views/security-confidentiality/vehicle-management/VehicleManagement.vue

@@ -72,7 +72,7 @@
   import { ElMessage } from 'element-plus';
   import { ref, reactive, onMounted } from 'vue';
   import { VEHICLE_TABLE_SEARCH_OPTIONS } from './constants';
-  import { TABLE_OPTIONS, VEHICLE_TABEL_COLUMNS } from './configs/tables';
+  import { TABLE_OPTIONS, VEHICLE_TABLE_COLUMNS } from './configs/tables';
   import { getVehicleRecordList, exportVehicleRecordList } from '@/api/security-confidentiality-vehicle';
   import type { VehicleTableData, VehicleTableQuery } from './types';
   import type { QueryPageRequest } from '@/types/basic-query';
@@ -134,7 +134,7 @@
   }
 
   // 表格
-  const { tableConfig, pagination } = useTableConfig(VEHICLE_TABEL_COLUMNS, TABLE_OPTIONS);
+  const { tableConfig, pagination } = useTableConfig(VEHICLE_TABLE_COLUMNS, TABLE_OPTIONS);
   const tableData = ref<VehicleTableData[]>([]);
 
   const tableQuery = reactive<QueryPageRequest<VehicleTableQuery>>({

+ 1 - 1
src/views/security-confidentiality/vehicle-management/configs/tables.ts

@@ -4,7 +4,7 @@ export const TABLE_OPTIONS = {
   maxHeight: 'calc(70vh - 150px)',
 };
 
-export const VEHICLE_TABEL_COLUMNS = [
+export const VEHICLE_TABLE_COLUMNS = [
   {
     prop: 'carNum',
     slot: 'carNum',