From 5a72942254d0a4cae77c2980b014a5cf55a52cf9 Mon Sep 17 00:00:00 2001
From: Your Name <123456>
Date: 星期五, 24 二月 2023 16:49:31 +0800
Subject: [PATCH] 更新

---
 src/api/systemManage/user/index.ts                       |    6 
 src/views/system/role/index.vue                          |   10 
 src/api/systemManage/role/index.ts                       |    6 
 src/views/experiment/project/index.ts                    |    2 
 src/api/analyse/identify/index.ts                        |   47 
 src/views/system/appVersion/index.vue                    | 1318 +++++++-------
 src/views/analyse/evaluate/components/evaluateDialog.vue |  332 +++
 src/views/basic/material/index.vue                       |    4 
 src/views/analyse/evaluate/index.ts                      |   58 
 src/views/analyse/riskUnit/index.ts                      |   59 
 src/views/basic/room/components/roomDialog.vue           |    9 
 src/views/basic/equipment/index.vue                      |    2 
 src/api/analyse/plan/index.ts                            |   53 
 src/views/analyse/plan/components/planDialog.vue         |  230 ++
 src/views/analyse/riskUnit/components/riskUnitDialog.vue |  209 ++
 src/views/analyse/plan/index.vue                         |  402 ++++
 src/views/system/role/component/roleDialog.vue           |   49 
 src/views/analyse/plan/index.ts                          |   63 
 src/views/basic/unit/index.ts                            |   34 
 src/views/loginPage/component/accountLogin.vue           |    2 
 src/views/basic/room/index.vue                           |    4 
 src/api/login/index.ts                                   |    4 
 src/views/experiment/project/index.vue                   |    4 
 src/views/basic/material/components/materialDialog.vue   |    2 
 src/layout/navBars/breadcrumb/user.vue                   |    2 
 src/views/analyse/identify/index.ts                      |  128 +
 src/api/analyse/riskUnit/index.ts                        |   52 
 src/views/basic/person/components/personDialog.vue       |    2 
 src/views/basic/equipment/components/equipmentDialog.vue |    2 
 src/views/basic/unit/components/unitDialog.vue           |  100 
 src/utils/methods.ts                                     |   19 
 src/views/analyse/identify/components/identifyDialog.vue |  366 ++++
 src/views/analyse/riskUnit/index.vue                     |  358 ++++
 src/api/analyse/evaluate/index.ts                        |   39 
 src/views/analyse/identify/index.vue                     |  395 ++++
 src/api/basic/unit/index.ts                              |    7 
 .env                                                     |    2 
 src/views/basic/unit/index.vue                           |   57 
 src/views/analyse/evaluate/index.vue                     |  424 ++++
 src/assets/index.ts                                      |    2 
 src/views/analyse/identify/components/identifyQuery.vue  |  157 +
 .env.development                                         |    4 
 src/views/basic/person/index.vue                         |    4 
 /dev/null                                                |  150 -
 src/views/system/user/index.vue                          |   31 
 .env.production                                          |    2 
 src/api/experiment/project/index.ts                      |    7 
 47 files changed, 4,262 insertions(+), 957 deletions(-)

diff --git a/.env b/.env
index 6119adb..6394eba 100644
--- a/.env
+++ b/.env
@@ -16,4 +16,4 @@
 #VITE_PUBLIC_PATH = 'http://121.239.169.27:6006'
 
 #国泰线上试用环境
-VITE_PUBLIC_PATH = 'http://121.239.169.27:6622'
+VITE_PUBLIC_PATH = 'http://121.239.169.27:7000'
diff --git a/.env.development b/.env.development
index 5285007..701c999 100644
--- a/.env.development
+++ b/.env.development
@@ -4,7 +4,7 @@
 #VITE_API_URL = 'http://192.168.0.35:8008'
 #李宇飞接口地址
 
-VITE_API_URL = 'http://192.168.0.22:8084'
+#VITE_API_URL = 'http://192.168.0.22:8084'
 #张凤接口地址
 
 #VITE_API_URL = 'http://192.168.0.29:8008'
@@ -13,7 +13,7 @@
 #VITE_API_URL = 'http://192.168.0.5:8084'
 #施正红接口地址
 
-#VITE_API_URL = 'http://192.168.0.18:8084'
+VITE_API_URL = 'http://192.168.0.18:8084'
 #戚会山接口地址
 
 #VITE_API_URL = 'http://121.239.169.27:16006/safeplatform'
diff --git a/.env.production b/.env.production
index c50fbea..e8de6b9 100644
--- a/.env.production
+++ b/.env.production
@@ -17,6 +17,6 @@
 #VITE_API_URL_SOCKET = 'http://121.239.169.27:16006/safeplatform'
 
 # 国泰线上试用环境接口地址
-VITE_API_URL = 'http://121.239.169.27:16016/safeplatform'
+VITE_API_URL = 'http://121.239.169.27:16070'
 VITE_API_URL_OUT = 'http://121.239.169.27:16016/safeplatform-out'
 VITE_API_URL_SOCKET = 'http://121.239.169.27:16016/safeplatform'
diff --git a/src/api/analyse/evaluate/index.ts b/src/api/analyse/evaluate/index.ts
new file mode 100644
index 0000000..66c5166
--- /dev/null
+++ b/src/api/analyse/evaluate/index.ts
@@ -0,0 +1,39 @@
+import request from '/@/utils/request';
+
+export function evaluateApi() {
+	return {
+		addEvaluate: (params: object) => {
+			return request({
+				url: import.meta.env.VITE_API_URL + '/risk/update/evaluate',
+				method: 'post',
+				data: params
+			});
+		},
+
+
+		modEvaluate: (params: object) => {
+			return request({
+				url: import.meta.env.VITE_API_URL + '/risk/update/updateEvaluate',
+				method: 'post',
+				data: params
+			});
+		},
+
+		deleteEvaluateById: (params: object) => {
+			return request({
+				url: import.meta.env.VITE_API_URL + '/risk/delete/deleteIdentification',
+				method: 'post',
+				data: params
+			});
+		},
+
+		submitEvaluate: (params: object) => {
+			return request({
+				url: import.meta.env.VITE_API_URL + '/risk/update/evaluateSubmit',
+				method: 'post',
+				data: params
+			});
+		},
+
+	};
+}
diff --git a/src/api/analyse/identify/index.ts b/src/api/analyse/identify/index.ts
new file mode 100644
index 0000000..1a19b1e
--- /dev/null
+++ b/src/api/analyse/identify/index.ts
@@ -0,0 +1,47 @@
+import request from '/@/utils/request';
+
+export function identifyApi() {
+	return {
+		getIdentifyByList: (params: object) => {
+			return request({
+				url: import.meta.env.VITE_API_URL + '/risk/select/selectAssessPage',
+				method: 'post',
+				data: params
+			});
+		},
+
+		addIdentify: (params: object) => {
+			return request({
+				url: import.meta.env.VITE_API_URL + '/risk/update/identification',
+				method: 'post',
+				data: params
+			});
+		},
+
+
+		modIdentify: (params: object) => {
+			return request({
+				url: import.meta.env.VITE_API_URL + '/risk/update/updateIdentification',
+				method: 'post',
+				data: params
+			});
+		},
+
+		deleteIdentifyById: (params: object) => {
+			return request({
+				url: import.meta.env.VITE_API_URL + '/risk/delete/deleteIdentification',
+				method: 'post',
+				data: params
+			});
+		},
+
+		submitIdentify: (params: object) => {
+			return request({
+				url: import.meta.env.VITE_API_URL + '/risk/update/identificationSubmit',
+				method: 'post',
+				data: params
+			});
+		},
+
+	};
+}
diff --git a/src/api/analyse/plan/index.ts b/src/api/analyse/plan/index.ts
new file mode 100644
index 0000000..8c1ef58
--- /dev/null
+++ b/src/api/analyse/plan/index.ts
@@ -0,0 +1,53 @@
+import request from '/@/utils/request';
+
+export function planApi() {
+	return {
+		getPlanByList: (params: object) => {
+			return request({
+				url: import.meta.env.VITE_API_URL + '/risk/select/selectAssessPlanPage',
+				method: 'post',
+				data: params
+			});
+		},
+
+		addPlan: (params: object) => {
+			return request({
+				url: import.meta.env.VITE_API_URL + '/risk/insert/insertAssessPlan',
+				method: 'post',
+				data: params
+			});
+		},
+
+
+		modPlan: (params: object) => {
+			return request({
+				url: import.meta.env.VITE_API_URL + '/risk/update/updateAssessPlan',
+				method: 'post',
+				data: params
+			});
+		},
+
+		deletePlanById: (params: object) => {
+			return request({
+				url: import.meta.env.VITE_API_URL + '/risk/delete/deleteAssessPlan',
+				method: 'post',
+				data: params
+			});
+		},
+
+		sellAssessPlan: (params: object) => {
+			return request({
+				url: import.meta.env.VITE_API_URL + '/risk/update/sellAssessPlan',
+				method: 'post',
+				data: params
+			});
+		},
+
+		getAllPlan: () => {
+			return request({
+				url: import.meta.env.VITE_API_URL + '/risk/select/listAssessPlan',
+				method: 'get',
+			});
+		},
+	};
+}
diff --git a/src/api/analyse/riskUnit/index.ts b/src/api/analyse/riskUnit/index.ts
new file mode 100644
index 0000000..d2c8e87
--- /dev/null
+++ b/src/api/analyse/riskUnit/index.ts
@@ -0,0 +1,52 @@
+import request from '/@/utils/request';
+
+export function riskUnitApi() {
+	return {
+		getRiskUnitByList: (params: object) => {
+			return request({
+				url: import.meta.env.VITE_API_URL + '/risk/select/selectRiskUnitPage',
+				method: 'post',
+				data: params
+			});
+		},
+
+		addRiskUnit: (params: object) => {
+			return request({
+				url: import.meta.env.VITE_API_URL + '/risk/insert/insertRiskUnit',
+				method: 'post',
+				data: params
+			});
+		},
+
+		addBasicRiskUnit: (params: object) => {
+			return request({
+				url: import.meta.env.VITE_API_URL + '/risk/insert/insertInherentRiskUnit',
+				method: 'post',
+				data: params
+			});
+		},
+
+		modRiskUnit: (params: object) => {
+			return request({
+				url: import.meta.env.VITE_API_URL + '/risk/update/updateRiskUnit',
+				method: 'post',
+				data: params
+			});
+		},
+
+		deleteRiskUnitById: (params: object) => {
+			return request({
+				url: import.meta.env.VITE_API_URL + '/risk/delete/deleteRiskUnit',
+				method: 'post',
+				data: params
+			});
+		},
+
+		getAllRiskUnit: () => {
+			return request({
+				url: import.meta.env.VITE_API_URL + '/risk/select/listRiskUnit',
+				method: 'get',
+			});
+		},
+	};
+}
diff --git a/src/api/basic/unit/index.ts b/src/api/basic/unit/index.ts
index 5953dd2..3ee1df3 100644
--- a/src/api/basic/unit/index.ts
+++ b/src/api/basic/unit/index.ts
@@ -34,5 +34,12 @@
 			});
 		},
 
+		getAllUnit: () => {
+			return request({
+				url: import.meta.env.VITE_API_URL + '/basic/select/listRiskUnit',
+				method: 'get',
+			});
+		},
+
 	};
 }
diff --git a/src/api/experiment/project/index.ts b/src/api/experiment/project/index.ts
index b512600..594e863 100644
--- a/src/api/experiment/project/index.ts
+++ b/src/api/experiment/project/index.ts
@@ -50,5 +50,12 @@
 			});
 		},
 
+		getAllExperiment: () => {
+			return request({
+				url: import.meta.env.VITE_API_URL + '/experimentInfo/list',
+				method: 'get',
+			});
+		},
+
 	};
 }
diff --git a/src/api/login/index.ts b/src/api/login/index.ts
index dceecdf..d0e6b48 100644
--- a/src/api/login/index.ts
+++ b/src/api/login/index.ts
@@ -18,8 +18,8 @@
         // v1
         signOut: () => {
             return request({
-                url: import.meta.env.VITE_API_URL + '/auth/logout',
-                method: 'post'
+                url: import.meta.env.VITE_API_URL + '/account/auth/logout',
+                method: 'get'
             });
         },
         // 更改密码
diff --git a/src/api/systemManage/role/index.ts b/src/api/systemManage/role/index.ts
index f099cac..6d86ecc 100644
--- a/src/api/systemManage/role/index.ts
+++ b/src/api/systemManage/role/index.ts
@@ -12,7 +12,7 @@
         // v2
         addRole: (data: object) => {
             return request({
-                url: import.meta.env.VITE_API_URL + `/role/add`,
+                url: import.meta.env.VITE_API_URL + `/account/role/new`,
                 method: 'post',
                 data: data
             });
@@ -20,7 +20,7 @@
         // v2
         modRole: (data: object) => {
             return request({
-                url: import.meta.env.VITE_API_URL + `/role/mod`,
+                url: import.meta.env.VITE_API_URL + `/account/role/mod/name`,
                 method: 'post',
                 data: data
             });
@@ -28,7 +28,7 @@
         // v2
         deleteRole: (value?: object) => {
             return request({
-                url: import.meta.env.VITE_API_URL + `/role/del`,
+                url: import.meta.env.VITE_API_URL + `/account/role/del`,
                 method: 'post',
                 data: value
             });
diff --git a/src/api/systemManage/user/index.ts b/src/api/systemManage/user/index.ts
index 52370a6..ff54d2b 100644
--- a/src/api/systemManage/user/index.ts
+++ b/src/api/systemManage/user/index.ts
@@ -5,7 +5,7 @@
         // v1
         getUserList: (data: any) => {
             return request({
-                url: import.meta.env.VITE_API_URL + `/account/page/list`,
+                url: import.meta.env.VITE_API_URL + `/account/user/find/list/roleId`,
                 method: 'post',
                 data: data
             });
@@ -13,7 +13,7 @@
         // v1
         addUser: (data: object) => {
             return request({
-                url: import.meta.env.VITE_API_URL + `/account/add`,
+                url: import.meta.env.VITE_API_URL + `/account/user/add`,
                 method: 'post',
                 data: data
             });
@@ -29,7 +29,7 @@
         // v1
         deleteUser: (data: object) => {
             return request({
-                url: import.meta.env.VITE_API_URL + `/account/del`,
+                url: import.meta.env.VITE_API_URL + `/account/user/deleteUser`,
                 method: 'post',
                 data: data
             });
diff --git a/src/assets/index.ts b/src/assets/index.ts
index de3e571..b7bf5b1 100644
--- a/src/assets/index.ts
+++ b/src/assets/index.ts
@@ -14,4 +14,4 @@
         // 拼接
         return year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds;
     }
-}
\ No newline at end of file
+}
diff --git a/src/layout/navBars/breadcrumb/user.vue b/src/layout/navBars/breadcrumb/user.vue
index b838098..f7f4b3d 100644
--- a/src/layout/navBars/breadcrumb/user.vue
+++ b/src/layout/navBars/breadcrumb/user.vue
@@ -176,7 +176,7 @@
                 })
                     .then(async () => {
                         let res = await useLoginApi().signOut();
-                        if (res.data.code === '200') {
+                        if (res.data.code === 100) {
                             Session.clear(); // 清除缓存/token等
                             // 使用 reload 时,不需要调用 resetRoute() 重置路由
                             window.location.reload();
diff --git a/src/utils/methods.ts b/src/utils/methods.ts
new file mode 100644
index 0000000..b4b77c8
--- /dev/null
+++ b/src/utils/methods.ts
@@ -0,0 +1,19 @@
+export const isValidKey = (key: string | number | symbol, object:object): key is keyof typeof object =>{
+	return key in object;
+};
+
+export function numFloat(...args: any){
+	let numTen = 1
+	let numTotal = 1
+	for(let i of args){
+		if( i === null){
+			numTotal = numTotal * 1
+		}else if(i.toString().indexOf('.') === -1){
+			numTotal = numTotal * Number(i)
+		}else{
+			numTotal = numTotal * Number(i.toString().split('.')[0] + i.toString().split('.')[1])
+			numTen = numTen * Math.pow(10,i.toString().split('.')[1].length)
+		}
+	}
+	return numTotal / numTen
+}
diff --git a/src/views/analyse/evaluate/components/evaluateDialog.vue b/src/views/analyse/evaluate/components/evaluateDialog.vue
new file mode 100644
index 0000000..2fb58e0
--- /dev/null
+++ b/src/views/analyse/evaluate/components/evaluateDialog.vue
@@ -0,0 +1,332 @@
+<template>
+    <div class="system-menu-dialog-container">
+        <el-dialog :title="evaluateDialogState.title" v-model="evaluateDialogState.evaluateDialogVisible" width="600px">
+            <el-form ref="evaluateFormRef" :rules="evaluateDialogState.evaluateFormRules" :model="evaluateDialogState.evaluateForm" size="default" label-width="140px">
+                <el-row :gutter="35">
+<!--                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">-->
+<!--                        <el-form-item label="评估计划" prop="id">-->
+<!--                            <el-select class="input-length" :disabled="true" v-model="evaluateDialogState.evaluateForm.id" style="width:100%" placeholder="评估计划" clearable>-->
+<!--                                <el-option v-for="item in evaluateDialogState.planList" :key="item.id" :label="item.assessPlanName" :value="item.id"></el-option>-->
+<!--                            </el-select>-->
+<!--                        </el-form-item>-->
+<!--                    </el-col>-->
+<!--                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">-->
+<!--                        <el-form-item label="风险数值" prop="riskValue">-->
+<!--                            <el-input type="number" class="input-length" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.riskValue" style="width:100%" placeholder="风险数值">-->
+<!--                            </el-input>-->
+<!--                        </el-form-item>-->
+<!--                    </el-col>-->
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                        <el-form-item label="风险等级" prop="riskLevelValue">
+                            <el-select class="input-length" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.riskLevelValue" style="width:100%" placeholder="风险等级" clearable>
+                                <el-option v-for="item in evaluateDialogState.riskLevelValueList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+                            </el-select>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                        <el-form-item label="风险级别" prop="riskLevel">
+                            <el-select class="input-length" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.riskLevel" style="width:100%" placeholder="风险级别" clearable>
+                                <el-option v-for="item in evaluateDialogState.riskLevelList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+                            </el-select>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                        <el-form-item label="风险色" prop="riskColor">
+                            <el-select class="input-length" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.riskColor" style="width:100%" placeholder="风险色" clearable>
+                                <el-option v-for="item in evaluateDialogState.riskColorList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+                            </el-select>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                        <el-form-item label="管理层级" prop="manageLevel">
+                            <el-select class="input-length" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.manageLevel" style="width:100%" placeholder="管理层级" clearable>
+                                <el-option v-for="item in evaluateDialogState.manageLevelList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+                            </el-select>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                        <el-form-item label="评价方法" prop="identificationMethod">
+                            <el-select class="input-length" :disabled="true" v-model="evaluateDialogState.evaluateMethod" style="width:100%" placeholder="评价方法" clearable>
+                                <el-option v-for="item in evaluateDialogState.evaluateMethodList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+                            </el-select>
+                        </el-form-item>
+                    </el-col>
+
+
+                    <div style="width: 100%" v-if="evaluateDialogState.evaluateMethod === 1">
+                        <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                            <el-form-item label="LEC_L" prop="lecL">
+                                <el-input type="number" class="input-length" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.lecL" placeholder="LEC_L" clearable></el-input>
+                            </el-form-item>
+                        </el-col>
+                        <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                            <el-form-item label="LEC_E" prop="lecE">
+                                <el-input type="number" class="input-length" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.lecE" placeholder="LEC_E" clearable></el-input>
+                            </el-form-item>
+                        </el-col>
+                        <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                            <el-form-item label="LEC_C" prop="lecC">
+                                <el-input type="number" class="input-length" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.lecC" placeholder="LEC_C" clearable></el-input>
+                            </el-form-item>
+                        </el-col>
+                    </div>
+
+                    <div style="width: 100%" v-if="evaluateDialogState.evaluateMethod === 2">
+                        <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                            <el-form-item label="LS_L" prop="lsL">
+                                <el-input type="number" class="input-length" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.lsL" placeholder="LS_L    " clearable></el-input>
+                            </el-form-item>
+                        </el-col>
+                        <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                            <el-form-item label="LS_S" prop="lsS">
+                                <el-input type="number" class="input-length" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.lsS" placeholder="LS_S" clearable></el-input>
+                            </el-form-item>
+                        </el-col>
+                    </div>
+
+                    <div style="width: 100%" v-if="evaluateDialogState.evaluateMethod === 3">
+                        <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                            <el-form-item label="MES_M" prop="mesM">
+                                <el-input type="number" class="input-length" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.mesM" placeholder="MES_M" clearable></el-input>
+                            </el-form-item>
+                        </el-col>
+                        <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                            <el-form-item label="MES_E" prop="mesE">
+                                <el-input type="number" class="input-length" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.mesE" placeholder="MES_E" clearable></el-input>
+                            </el-form-item>
+                        </el-col>
+                        <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                            <el-form-item label="MES_S" prop="mesS">
+                                <el-input type="number" class="input-length" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.mesS" placeholder="MES_S" clearable></el-input>
+                            </el-form-item>
+                        </el-col>
+                    </div>
+
+                    <div style="width: 100%" v-if="evaluateDialogState.evaluateMethod === 4">
+                        <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                            <el-form-item label="RS_R" prop="rsR">
+                                <el-input type="number" class="input-length" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.rsR" placeholder="RS_R" clearable></el-input>
+                            </el-form-item>
+                        </el-col>
+                        <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                            <el-form-item label="RS_S" prop="rsS">
+                                <el-input type="number" class="input-length" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.rsS" placeholder="RS_S" clearable></el-input>
+                            </el-form-item>
+                        </el-col>
+                    </div>
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                        <el-form-item label="风险数值" prop="rsS">
+                            <el-input type="number" class="input-length" :disabled="true" v-model="numValue" placeholder="风险数值" clearable></el-input>
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+            </el-form>
+            <template #footer>
+				<span class="dialog-footer">
+					<el-button @click="evaluateDialogState.evaluateDialogVisible = !evaluateDialogState.evaluateDialogVisible" size="default">取 消</el-button>
+					<el-button v-if="!evaluateDialogState.disabled" type="primary" @click="onSubmitEvaluate" size="default">确定</el-button>
+				</span>
+            </template>
+        </el-dialog>
+    </div>
+</template>
+
+<script setup lang="ts">
+import {computed, reactive, ref} from "vue";
+import {ElMessage} from "element-plus";
+import {evaluateApi} from "/@/api/analyse/evaluate";
+import {isValidKey, numFloat} from "/@/utils/methods";
+
+const evaluateFormRef = ref()
+
+const evaluateDialogState = reactive<EvaluateDialogType>({
+    title: '',
+    time:[],
+    disabled: false,
+    evaluateDialogVisible: false,
+    evaluateMethod: 1,
+    evaluateForm: {
+        id: null,
+        identificationId: null,
+        riskValue: null,
+        riskLevelValue: null,
+        riskLevel: null,
+        riskColor: null,
+        manageLevel: null,
+        lecL: null,
+        lecE: null,
+        lecC: null,
+        lsL: null,
+        lsS: null,
+        mesM: null,
+        mesE: null,
+        mesS: null,
+        rsR: null,
+        rsS: null,
+        lecId: null,
+        lsId: null,
+        mesId: null,
+        rsId: null,
+    },
+    evaluateFormRules: {
+
+    },
+    manageLevelList: [
+        {id:1, name: '院所级'},
+        {id:2, name: '部门级'},
+        {id:3, name: '项目组级'},
+    ],
+    riskColorList: [
+        {id:1, name: '蓝色'},
+        {id:2, name: '黄色'},
+        {id:3, name: '橙色'},
+        {id:4, name: '红色'},
+    ],
+    riskLevelList: [
+        {id:1, name: '低'},
+        {id:2, name: '一般'},
+        {id:3, name: '较大'},
+        {id:4, name: '重大'},
+    ],
+    riskLevelValueList: [
+        {id:1, name: '1级'},
+        {id:2, name: '2级'},
+        {id:3, name: '3级'},
+        {id:4, name: '4级'},
+        {id:5, name: '5级'},
+    ],
+    identificationMethodList: [
+        {id:1, name: 'PHA'},
+        {id:2, name: 'JHA'},
+        {id:3, name: 'SCL'},
+        {id:4, name: 'HAZOP'},
+        {id:5, name: '类比法'},
+    ],
+    evaluateMethodList: [
+        {id:1, name: 'LEC'},
+        {id:2, name: 'LS'},
+        {id:3, name: 'MES'},
+        {id:4, name: 'RS'},
+    ]
+})
+
+const numValue = computed( () => {
+    return numFloat(
+        evaluateDialogState.evaluateForm.lecE,
+        evaluateDialogState.evaluateForm.lecL,
+        evaluateDialogState.evaluateForm.lecC,
+        evaluateDialogState.evaluateForm.mesE,
+        evaluateDialogState.evaluateForm.mesM,
+        evaluateDialogState.evaluateForm.mesS,
+        evaluateDialogState.evaluateForm.rsS,
+        evaluateDialogState.evaluateForm.rsR,
+        evaluateDialogState.evaluateForm.lsS,
+        evaluateDialogState.evaluateForm.lsL)
+})
+
+const showEvaluateDialog = (title: string, value: EvaluateType ) => {
+    evaluateDialogState.evaluateDialogVisible = true;
+    evaluateDialogState.disabled = false
+    evaluateDialogState.evaluateMethod = value.evaluateMethod as number
+    setTimeout(() => {
+        evaluateFormRef.value.clearValidate();
+    });
+    if( value.lecId || value.lsId || value.mesId || value.rsId){
+        evaluateDialogState.title = '编辑评价';
+        for(let i in evaluateDialogState.evaluateForm){
+            if(isValidKey(i, evaluateDialogState.evaluateForm)){
+                evaluateDialogState.evaluateForm[i] = value[i]
+            }
+        }
+    }else if(title === '查看'){
+        evaluateDialogState.disabled = true
+        for(let i in evaluateDialogState.evaluateForm){
+            if(isValidKey(i, evaluateDialogState.evaluateForm)){
+                evaluateDialogState.evaluateForm[i] = value[i]
+            }
+        }
+    }else{
+        evaluateDialogState.title = '评价';
+        evaluateDialogState.evaluateForm = {
+            id: null,
+            identificationId: null,
+            riskValue: null,
+            riskLevelValue: null,
+            riskLevel: null,
+            riskColor: null,
+            manageLevel: null,
+            lecL: null,
+            lecE: null,
+            lecC: null,
+            lsL: null,
+            lsS: null,
+            mesM: null,
+            mesE: null,
+            mesS: null,
+            rsR: null,
+            rsS: null,
+            lecId: null,
+            lsId: null,
+            mesId: null,
+            rsId: null,
+        };
+    }
+    evaluateDialogState.evaluateForm.id = value.id as number
+    evaluateDialogState.evaluateForm.identificationId = (value.hazopId || value.jhaId || value.phaId || value.sclId || value.analogyId) as number
+};
+
+const onSubmitEvaluate = () => {
+    evaluateFormRef.value.validate(async(valid: boolean) => {
+        if(valid){
+            evaluateDialogState.evaluateForm.riskValue = Number(numValue.value)
+            if(evaluateDialogState.title === '评价'){
+                let { lecId, lsId, mesId, rsId, ...data} = evaluateDialogState.evaluateForm
+                let res = await evaluateApi().addEvaluate(data);
+                if(res.data.code === 100){
+                    emit('refresh')
+                    evaluateDialogState.evaluateDialogVisible = false;
+                    ElMessage({
+                        type: 'success',
+                        message: '新增成功'
+                    })
+                }else{
+                    ElMessage({
+                        type: 'warning',
+                        message: res.data.msg,
+                    });
+                }
+            }else{
+                let res = await evaluateApi().modEvaluate(evaluateDialogState.evaluateForm)
+                if(res.data.code === 100){
+                    emit('refresh')
+                    evaluateDialogState.evaluateDialogVisible = false;
+                    ElMessage({
+                        type: 'success',
+                        message: '编辑成功'
+                    })
+                }else{
+                    ElMessage({
+                        type: 'warning',
+                        message: res.data.msg,
+                    });
+                }
+            }
+        }else{
+            ElMessage({
+                type: 'warning',
+                message: '请完善基本信息',
+            });
+        }
+    })
+}
+
+const emit = defineEmits(['refresh']);
+
+defineExpose({
+    showEvaluateDialog
+});
+</script>
+
+<style scoped>
+
+</style>
diff --git a/src/views/analyse/evaluate/index.ts b/src/views/analyse/evaluate/index.ts
new file mode 100644
index 0000000..7fedbac
--- /dev/null
+++ b/src/views/analyse/evaluate/index.ts
@@ -0,0 +1,58 @@
+declare interface EvaluateStateType {
+	evaluateData: Array<EvaluateType>
+	searchQuery: {
+		pageIndex: number,
+		pageSize: number,
+		assessPlanName: string,
+		experimentName: string,
+		tag: number,
+	}
+	total: number
+	identificationMethodList: Array<Type>,
+	evaluateMethodList: Array<Type>
+	planList: Array<PlanType>
+	personList: Array<SystemPersonType>
+}
+declare interface EvaluateType {
+	id: null | number,
+	riskValue: null | number,
+	riskLevelValue: null | number,
+	riskLevel: null | number,
+	riskColor: null | number,
+	manageLevel: null | number,
+	identificationId: null | number,
+	lecL: null | number,
+	lecE: null | number,
+	lecC: null | number,
+	lsL: null | number,
+	lsS: null | number,
+	mesM: null | number,
+	mesE: null | number,
+	mesS: null | number,
+	rsR: null | number,
+	rsS: null | number,
+	lecId: null | number,
+	lsId: null | number,
+	mesId: null | number,
+	rsId: null | number,
+	evaluateMethod?: null | number,
+	evaluateStatus?: null | number,
+}
+
+declare interface EvaluateDialogType {
+	title: string,
+	time: string [],
+	disabled: boolean,
+	evaluateDialogVisible: boolean,
+	evaluateMethod: number,
+	evaluateForm: EvaluateType,
+	evaluateFormRules: {
+
+	},
+	identificationMethodList: Array<Type>,
+	evaluateMethodList: Array<Type>
+	riskLevelValueList: Array<Type>
+	riskLevelList: Array<Type>
+	riskColorList: Array<Type>
+	manageLevelList: Array<Type>
+}
diff --git a/src/views/analyse/evaluate/index.vue b/src/views/analyse/evaluate/index.vue
new file mode 100644
index 0000000..e2c0177
--- /dev/null
+++ b/src/views/analyse/evaluate/index.vue
@@ -0,0 +1,424 @@
+<template>
+    <div class="home-container">
+        <div style="height: 100%">
+            <el-row class="homeCard">
+                <div class="basic-line">
+                    <span>评估计划名称:</span>
+                    <el-input v-model="evaluateState.searchQuery.assessPlanName" clearable filterable class="input-box" placeholder="评估计划名称">
+                    </el-input>
+                </div>
+                <div class="basic-line">
+                    <span>实验名称:</span>
+                    <el-input v-model="evaluateState.searchQuery.experimentName" clearable filterable class="input-box" placeholder="实验名称">
+                    </el-input>
+                </div>
+                <div style="padding-bottom: 10px">
+                    <el-button type="primary" @click="getEvaluateData">查询</el-button>
+                    <el-button plain @click="reset">重置</el-button>
+                </div>
+            </el-row>
+            <div class="homeCard">
+                <div class="main-card">
+                    <el-row class="cardTop">
+<!--                        <el-col :span="12" class="mainCardBtn">-->
+<!--                            <el-button type="primary" :icon="Plus" size="default" @click="openevaluateDialog('新增', {})">新增</el-button>-->
+<!--                        </el-col>-->
+                    </el-row>
+                    <el-table ref="multipleTableRef" :data="evaluateState.evaluateData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }">
+                        <el-table-column type="expand">
+                            <template #default="scope">
+                                <el-table :data="scope.row.factorQueryDTOList" style="width: 100%">
+                                    <el-table-column type="index" label="序号" width="80" />
+                                    <el-table-column prop="technologyMeasure" label="技术措施" show-overflow-tooltip align="center"></el-table-column>
+                                    <el-table-column prop="manageMeasure" label="管理措施" show-overflow-tooltip align="center"></el-table-column>
+                                    <el-table-column prop="educationMeasure" label="教育措施" show-overflow-tooltip align="center"></el-table-column>
+                                    <el-table-column prop="personalProtectionMeasure" label="防护措施" show-overflow-tooltip align="center"></el-table-column>
+                                    <el-table-column prop="evaluateStatus" label="防护措施" show-overflow-tooltip align="center">
+                                        <template #default="scope">
+                                            <div>
+                                                <div v-if="scope.row.evaluateStatus === 0">
+                                                    <el-tag :type="'info'">
+                                                        {{ '未评价' }}
+                                                    </el-tag>
+                                                </div>
+                                                <div v-if="scope.row.evaluateStatus === 1">
+                                                    <el-tag :type="'success'">
+                                                        {{ '已评价' }}
+                                                    </el-tag>
+                                                </div>
+                                            </div>
+                                        </template>
+                                    </el-table-column>
+                                    <el-table-column label="操作" width="250">
+                                        <template #default="scope">
+                                            <el-button size="small" text type="primary" :icon="Plus" @click="openEvaluateDialog('评价', scope.row)">评价</el-button>
+                                        </template>
+                                    </el-table-column>
+                                </el-table>
+                            </template>
+                        </el-table-column>
+
+                        <el-table-column prop="assessPlanName" label="评估计划名称"/>
+                        <el-table-column prop="identificationMethod" label="辨识方法" show-overflow-tooltip>
+                            <template #default="scope">
+                                <span>{{`${evaluateState.identificationMethodList.find(item =>item.id === scope.row.identificationMethod)?.name}`}}</span>
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="identificationUser" label="计划负责人" />
+                        <el-table-column prop="evaluateUser" label="评价专家" />
+                        <el-table-column prop="createTime" label="创建时间" show-overflow-tooltip></el-table-column>
+                        <el-table-column prop="createByUserName" label="创建人" show-overflow-tooltip></el-table-column>
+                        <el-table-column prop="updateTime" label="最后修改时间" show-overflow-tooltip></el-table-column>
+                        <el-table-column prop="updateByUserName" label="最后修改人" show-overflow-tooltip></el-table-column>
+                        <el-table-column prop="planExecStatus" label="状态" show-overflow-tooltip>
+                            <template #default="scope">
+                                <div>
+                                    <div v-if="scope.row.planExecStatus === 3">
+                                        <el-tag :type="'info'">
+                                            {{ '未提交' }}
+                                        </el-tag>
+                                    </div>
+                                    <div v-if="scope.row.planExecStatus === 4">
+                                        <el-tag :type="'success'">
+                                            {{ '已提交' }}
+                                        </el-tag>
+                                    </div>
+                                </div>
+                            </template>
+                        </el-table-column>
+                        <el-table-column label="操作" width="250">
+                            <template #default="scope">
+                                <el-button size="small" text type="primary" @click="accessEvaluate(scope.row)">提交</el-button>
+                            </template>
+                        </el-table-column>
+                    </el-table>
+                    <div class="pageBtn">
+                        <el-pagination @size-change="onHandleSizeChange" @current-change="onHandleCurrentChange" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="evaluateState.searchQuery.pageIndex" background v-model:page-size="evaluateState.searchQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="evaluateState.total" class="page-position"> </el-pagination>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <evaluate-dialog ref="evaluateDialogRef" @refresh="getEvaluateData"></evaluate-dialog>
+    </div>
+</template>
+
+<script setup lang="ts">
+import {defineAsyncComponent, onMounted, reactive, ref} from "vue";
+import {evaluateApi} from "/@/api/analyse/evaluate";
+import {identifyApi} from "/@/api/analyse/identify";
+import {ElMessage, ElMessageBox} from "element-plus";
+import { Edit, View, Plus, Delete } from '@element-plus/icons-vue';
+import {planApi} from "/@/api/analyse/plan";
+import {userApi} from "/@/api/systemManage/user";
+
+const EvaluateDialog = defineAsyncComponent(() => import('./components/evaluateDialog.vue'));
+
+const evaluateDialogRef = ref();
+
+const evaluateState = reactive<EvaluateStateType>({
+    evaluateData: [],
+    searchQuery: {
+        pageIndex: 1,
+        pageSize: 10,
+        assessPlanName: '',
+        experimentName: '',
+        tag: 2,
+    },
+    total: 0,
+    planList: [
+    ],
+    personList: [],
+    identificationMethodList: [
+        {id:1, name: 'PHA'},
+        {id:2, name: 'JHA'},
+        {id:3, name: 'SCL'},
+        {id:4, name: 'HAZOP'},
+        {id:5, name: '类比法'},
+    ],
+    evaluateMethodList: [
+        {id:1, name: 'LEC'},
+        {id:2, name: 'LS'},
+        {id:3, name: 'MES'},
+        {id:4, name: 'RS'},
+    ]
+    // deviceUnitList: [
+    //     {id:1, name: '台'},
+    //     {id:2, name: '个'},
+    //     {id:3, name: '件'}
+    // ]
+});
+
+const getEvaluateData = async () => {
+    let res = await identifyApi().getIdentifyByList(evaluateState.searchQuery);
+    if(res.data.code === 100){
+        evaluateState.evaluateData = res.data.data;
+        evaluateState.total = res.data.total;
+    }else{
+        ElMessage({
+            type: 'warning',
+            message: res.data.msg
+        });
+    }
+};
+
+const getAllPlanList = async () => {
+    let res = await planApi().getAllPlan();
+    if(res.data.code === 100){
+        evaluateState.planList = JSON.parse(JSON.stringify(res.data.data));
+    }else{
+        ElMessage({
+            type: 'warning',
+            message: res.data.msg
+        });
+    }
+};
+
+const getPersonList = async () => {
+    let res = await userApi().getUserList({
+        roleId: 1,
+        usePage: false,
+        pageIndex: 1,
+        pageSize: 10
+    });
+    if(res.data.code === 100){
+        evaluateState.personList = JSON.parse(JSON.stringify(res.data.data));
+    }else{
+        ElMessage({
+            type: 'warning',
+            message: res.data.msg
+        })
+    }
+};
+
+const openEvaluateDialog = (title: string, value: IdentifyType) => {
+    evaluateDialogRef.value.showEvaluateDialog(title, value);
+};
+
+const onDelEvaluate = (val: IdentifyType) => {
+    ElMessageBox.confirm(`此操作将提交该计划:“${val.assessPlanName}”,是否继续?`, '提示', {
+        confirmButtonText: '确认',
+        cancelButtonText: '取消',
+        type: 'warning'
+    })
+        .then(async () => {
+            let res = await evaluateApi().submitEvaluate({ id: val.id });
+            if (res.data.code === 100) {
+                ElMessage({
+                    type: 'success',
+                    duration: 2000,
+                    message: '删除成功'
+                });
+                await getEvaluateData();
+            } else {
+                ElMessage({
+                    type: 'warning',
+                    message: res.data.msg
+                });
+            }
+        })
+        .catch((error) => {
+        });
+};
+
+const accessEvaluate = (val: IdentifyType) => {
+    ElMessageBox.confirm(`此操作将派发该计划:“${val.assessPlanName}”,是否继续?`, '提示', {
+        confirmButtonText: '确认',
+        cancelButtonText: '取消',
+        type: 'warning'
+    })
+        .then(async () => {
+            let res = await evaluateApi().submitEvaluate({ id: val.id });
+            if (res.data.code === 100) {
+                ElMessage({
+                    type: 'success',
+                    duration: 2000,
+                    message: '提交成功'
+                });
+                await getEvaluateData();
+            } else {
+                ElMessage({
+                    type: 'warning',
+                    message: res.data.msg
+                });
+            }
+        })
+        .catch((error) => {
+        });
+};
+
+const onHandleSizeChange = (val: number) => {
+    evaluateState.searchQuery.pageSize = val;
+    getEvaluateData();
+};
+
+const onHandleCurrentChange = (val: number) => {
+    evaluateState.searchQuery.pageIndex = val;
+    getEvaluateData();
+};
+
+const reset = () => {
+    evaluateState.searchQuery = {
+        pageIndex: 1,
+        pageSize: 10,
+        assessPlanName: '',
+        experimentName: '',
+        tag: 2,
+    }
+};
+
+onMounted(() => {
+    getEvaluateData();
+    getAllPlanList();
+    getPersonList();
+});
+
+</script>
+
+<style scoped lang="scss">
+$homeNavLengh: 8;
+.home-container {
+    height: calc(100vh - 144px);
+    box-sizing: border-box;
+    overflow: hidden;
+    .homeCard {
+        width: 100%;
+        padding: 20px;
+        box-sizing: border-box;
+        background: #fff;
+        border-radius: 4px;
+
+        .main-card {
+            width: 100%;
+            height: 100%;
+            .cardTop {
+                display: flex;
+                align-items: center;
+                justify-content: space-between;
+                margin-bottom: 20px;
+                .mainCardBtn {
+                    margin: 0;
+                }
+            }
+            .pageBtn {
+                height: 60px;
+                display: flex;
+                align-items: center;
+                justify-content: right;
+
+                .demo-pagination-block + .demo-pagination-block {
+                    margin-top: 10px;
+                }
+                .demo-pagination-block .demonstration {
+                    margin-bottom: 16px;
+                }
+            }
+        }
+        &:last-of-type {
+            height: calc(100% - 100px);
+        }
+    }
+    .el-row {
+        display: flex;
+        align-items: center;
+        margin-bottom: 20px;
+        &:last-child {
+            margin-bottom: 0;
+        }
+        .grid-content {
+            align-items: center;
+            min-height: 36px;
+        }
+
+        .topInfo {
+            display: flex;
+            align-items: center;
+            font-size: 16px;
+            font-weight: bold;
+
+            & > div {
+                white-space: nowrap;
+                margin-right: 20px;
+            }
+        }
+    }
+}
+.stepItem {
+    width: 100%;
+    display: flex;
+    align-items: flex-start;
+    margin-bottom: 30px;
+    margin-left: 30px;
+    padding-bottom: 30px;
+    border-left: 2px solid #ccc;
+    &:first-of-type {
+        margin-top: 30px;
+    }
+    &:last-of-type {
+        margin-bottom: 0;
+        border-left: none;
+    }
+    .stepNum {
+        width: 30px;
+        height: 30px;
+        border-radius: 15px;
+        box-sizing: border-box;
+        color: #333;
+        border: 1px solid #999;
+        line-height: 28px;
+        text-align: center;
+        margin-right: 10px;
+        margin-left: -16px;
+        margin-top: -30px;
+    }
+    .stepCard {
+        width: 100%;
+        margin-top: -30px;
+
+        .box-card {
+            width: 100%;
+            &:deep(.el-card__header) {
+                padding: 10px 15px;
+            }
+            .card-header {
+                width: 100%;
+                display: flex;
+                justify-content: space-between;
+                align-items: center;
+                & > div:first-of-type {
+                    margin-right: 80px;
+                    font-size: 18px;
+                    font-weight: bold;
+                }
+            }
+        }
+    }
+    &:hover .card-header {
+        color: #0098f5;
+    }
+    &:hover .stepNum {
+        border: 2px solid #0098f5;
+        color: #0098f5;
+    }
+}
+
+:deep(.el-date-editor) {
+    width: 100%;
+}
+.el-select {
+    width: 100%;
+}
+:deep(.el-textarea.is-disabled .el-textarea__inner) {
+    background-color: var(--el-card-bg-color);
+    color: var(--el-input-text-color, var(--el-text-color-regular));
+}
+:deep(.el-input.is-disabled .el-input__inner) {
+    color: var(--el-input-text-color, var(--el-text-color-regular));
+}
+:deep(.el-input.is-disabled .el-input__wrapper) {
+    background-color: var(--el-card-bg-color);
+}
+:deep(.el-range-editor.is-disabled input){
+    background-color: var(--el-card-bg-color);
+    color: var(--el-input-text-color, var(--el-text-color-regular));
+}
+</style>
diff --git a/src/views/analyse/identify/components/identifyDialog.vue b/src/views/analyse/identify/components/identifyDialog.vue
new file mode 100644
index 0000000..416ac32
--- /dev/null
+++ b/src/views/analyse/identify/components/identifyDialog.vue
@@ -0,0 +1,366 @@
+<template>
+    <div class="system-menu-dialog-container">
+        <el-dialog :title="identifyDialogState.title" v-model="identifyDialogState.identifyDialogVisible" width="600px">
+            <el-form ref="identifyFormRef" :rules="identifyDialogState.identifyFormRules" :model="identifyDialogState.identifyForm" size="default" label-width="140px">
+                <el-row :gutter="35">
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                        <el-form-item label="技术措施" prop="technologyMeasure">
+                            <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.technologyMeasure" placeholder="技术措施" clearable></el-input>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                        <el-form-item label="管理措施" prop="manageMeasure">
+                            <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.manageMeasure" placeholder="管理措施" clearable></el-input>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                        <el-form-item label="教育措施" prop="educationMeasure">
+                            <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.educationMeasure" placeholder="教育措施" clearable></el-input>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                        <el-form-item label="防护措施" prop="personalProtectionMeasure">
+                            <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.personalProtectionMeasure" placeholder="防护措施" clearable></el-input>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                        <el-form-item label="应急措施" prop="emergencyMeasure">
+                            <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.emergencyMeasure" placeholder="应急措施" clearable></el-input>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                        <el-form-item label="辨识方法" prop="identificationMethod">
+                            <el-select class="input-length" :disabled="true" v-model="identifyDialogState.identifyForm.identificationMethod" style="width:100%" placeholder="辨识方法" clearable>
+                                <el-option v-for="item in identifyDialogState.identificationMethodList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+                            </el-select>
+                        </el-form-item>
+                    </el-col>
+                    <div style="width: 100%" v-if="identifyDialogState.identifyForm.identificationMethod === 5">
+                        <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                            <el-form-item label="检查项目" prop="analogyCheckItem">
+                                <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.analogyCheckItem" placeholder="检查项目" clearable></el-input>
+                            </el-form-item>
+                        </el-col>
+                        <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                            <el-form-item label="存在风险因素" prop="analogyRiskFactor">
+                                <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.analogyRiskFactor" placeholder="存在风险因素" clearable></el-input>
+                            </el-form-item>
+                        </el-col>
+                        <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                            <el-form-item label="可能产生的后果" prop="analogyResult">
+                                <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.analogyResult" placeholder="可能产生的后果" clearable></el-input>
+                            </el-form-item>
+                        </el-col>
+                        <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                            <el-form-item label="类比参照" prop="analogyReference">
+                                <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.analogyReference" placeholder="类比参照" clearable></el-input>
+                            </el-form-item>
+                        </el-col>
+                    </div>
+
+                    <div style="width: 100%" v-if="identifyDialogState.identifyForm.identificationMethod === 4">
+                        <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                            <el-form-item label="节点" prop="hazopNode">
+                                <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.hazopNode" placeholder="节点" clearable></el-input>
+                            </el-form-item>
+                        </el-col>
+                        <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                            <el-form-item label="参数" prop="hazopParam">
+                                <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.hazopParam" placeholder="参数" clearable></el-input>
+                            </el-form-item>
+                        </el-col>
+                        <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                            <el-form-item label="参数描述" prop="hazopParamDesc">
+                                <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.hazopParamDesc" placeholder="参数描述" clearable></el-input>
+                            </el-form-item>
+                        </el-col>
+                        <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                            <el-form-item label="引导词" prop="hazopGuide">
+                                <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.hazopGuide" placeholder="引导词" clearable></el-input>
+                            </el-form-item>
+                        </el-col>
+                        <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                            <el-form-item label="偏差" prop="hazopDeviation">
+                                <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.hazopDeviation" placeholder="偏差" clearable></el-input>
+                            </el-form-item>
+                        </el-col>
+                        <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                            <el-form-item label="可能原因" prop="hazopPossibleCauses">
+                                <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.hazopPossibleCauses" placeholder="可能原因" clearable></el-input>
+                            </el-form-item>
+                        </el-col>
+                        <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                            <el-form-item label="主要后果" prop="hazopResult">
+                                <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.hazopResult" placeholder="主要后果" clearable></el-input>
+                            </el-form-item>
+                        </el-col>
+                    </div>
+
+                    <div style="width: 100%" v-if="identifyDialogState.identifyForm.identificationMethod === 2">
+                        <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                            <el-form-item label="作业步骤" prop="jhaCheckItem">
+                                <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.jhaCheckItem" placeholder="作业步骤" clearable></el-input>
+                            </el-form-item>
+                        </el-col>
+                        <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                            <el-form-item label="危险源或潜在事件" prop="jhaRiskFactor">
+                                <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.jhaRiskFactor" placeholder="危险源或潜在事件" clearable></el-input>
+                            </el-form-item>
+                        </el-col>
+                        <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                            <el-form-item label="可能发生的事故" prop="jhaResult">
+                                <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.jhaResult" placeholder="可能发生的事故" clearable></el-input>
+                            </el-form-item>
+                        </el-col>
+                    </div>
+
+                    <div style="width: 100%" v-if="identifyDialogState.identifyForm.identificationMethod === 1">
+                        <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                            <el-form-item label="检查项目" prop="phaCheckItem">
+                                <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.phaCheckItem" placeholder="检查项目" clearable></el-input>
+                            </el-form-item>
+                        </el-col>
+                        <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                            <el-form-item label="存在风险因素" prop="phaRiskFactor">
+                                <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.phaRiskFactor" placeholder="存在风险因素" clearable></el-input>
+                            </el-form-item>
+                        </el-col>
+                        <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                            <el-form-item label="可能产生的后果" prop="phaResult">
+                                <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.phaResult" placeholder="可能产生的后果" clearable></el-input>
+                            </el-form-item>
+                        </el-col>
+                    </div>
+
+                    <div style="width: 100%" v-if="identifyDialogState.identifyForm.identificationMethod === 3">
+                        <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                            <el-form-item label="检查项目" prop="sclCheckItem">
+                                <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.sclCheckItem" placeholder="检查项目" clearable></el-input>
+                            </el-form-item>
+                        </el-col>
+                        <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                            <el-form-item label="检查标准" prop="sclCheckStandard">
+                                <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.sclCheckStandard" placeholder="检查标准" clearable></el-input>
+                            </el-form-item>
+                        </el-col>
+                        <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                            <el-form-item label="不符合标准情况" prop="sclCheckUnstandard">
+                                <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.sclCheckUnstandard" placeholder="不符合标准情况" clearable></el-input>
+                            </el-form-item>
+                        </el-col>
+                        <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                            <el-form-item label="主要后果" prop="sclCheckResult">
+                                <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.sclCheckResult" placeholder="主要后果" clearable></el-input>
+                            </el-form-item>
+                        </el-col>
+                    </div>
+                </el-row>
+            </el-form>
+            <template #footer>
+				<span class="dialog-footer">
+					<el-button @click="identifyDialogState.identifyDialogVisible = !identifyDialogState.identifyDialogVisible" size="default">取 消</el-button>
+					<el-button v-if="!identifyDialogState.disabled" type="primary" @click="onSubmitIdentify" size="default">确定</el-button>
+				</span>
+            </template>
+        </el-dialog>
+    </div>
+</template>
+
+<script setup lang="ts">
+import { reactive, ref } from "vue";
+import {ElMessage} from "element-plus";
+import {identifyApi} from "/@/api/analyse/identify";
+import {isValidKey} from "/@/utils/methods";
+
+const identifyFormRef = ref()
+
+const identifyDialogState = reactive<IdentifyDialogType>({
+    title: '',
+    time:[],
+    disabled: false,
+    identifyDialogVisible: false,
+    identifyForm: {
+        id: null,
+        technologyMeasure: '',
+        manageMeasure: '',
+        educationMeasure: '',
+        personalProtectionMeasure: '',
+        emergencyMeasure: '',
+        identificationMethod: null,
+        analogyCheckItem: '',
+        analogyRiskFactor: '',
+        analogyResult: '',
+        analogyReference: '',
+        hazopNode: '',
+        hazopParam: '',
+        hazopParamDesc: '',
+        hazopGuide: '',
+        hazopDeviation: '',
+        hazopPossibleCauses: '',
+        hazopResult: '',
+        jhaCheckItem: '',
+        jhaRiskFactor: '',
+        jhaResult: '',
+        phaCheckItem: '',
+        phaRiskFactor: '',
+        phaResult: '',
+        sclCheckItem: '',
+        sclCheckStandard: '',
+        sclCheckUnstandard: '',
+        sclCheckResult: '',
+        hazopId: null,
+        jhaId: null,
+        phaId: null,
+        sclId: null,
+        analogyId: null,
+    },
+    identifyFormRules: {
+        deviceCode: [{ required: true, message: '请填写设备编号', trigger: 'blur' }],
+        deviceName: [{ required: true, message: '请填写设备名称', trigger: 'blur' }],
+        devicePower: [{ required: true, message: '请填写设备功率', trigger: 'blur' }],
+        riskUnitId: [{ required: true, message: '请选择风险分析单元', trigger: 'change' }],
+        identifyUserId: [{ required: true, message: '请选择计划制定人', trigger: 'change' }],
+        identificationMethod: [{ required: true, message: '请选择辨识方法', trigger: 'change' }],
+        identificationUserId: [{ required: true, message: '请选择负责人', trigger: 'change' }],
+        evaluateMethod: [{ required: true, message: '请选择推荐评价方法', trigger: 'change' }],
+        evaluateUserId: [{ required: true, message: '请选择评价专家', trigger: 'change' }],
+    },
+    planList: [],
+    personList: [],
+    identificationMethodList: [
+        {id:1, name: 'PHA'},
+        {id:2, name: 'JHA'},
+        {id:3, name: 'SCL'},
+        {id:4, name: 'HAZOP'},
+        {id:5, name: '类比法'},
+    ],
+    evaluateMethodList: [
+        {id:1, name: 'LEC'},
+        {id:2, name: 'LS'},
+        {id:3, name: 'MES'},
+        {id:4, name: 'RS'},
+    ]
+})
+
+const showIdentifyDialog = (title: string, value: IdentifyType, identifyQueryForm: IdentifyType) => {
+    identifyDialogState.identifyDialogVisible = true;
+    identifyDialogState.disabled = false
+    setTimeout(() => {
+        identifyFormRef.value.clearValidate();
+    });
+    if(title === '新增'){
+        identifyDialogState.title = '新增';
+        identifyDialogState.identifyForm = {
+            id: null,
+            technologyMeasure: '',
+            manageMeasure: '',
+            educationMeasure: '',
+            personalProtectionMeasure: '',
+            emergencyMeasure: '',
+            identificationMethod: null,
+            analogyCheckItem: '',
+            analogyRiskFactor: '',
+            analogyResult: '',
+            analogyReference: '',
+            hazopNode: '',
+            hazopParam: '',
+            hazopParamDesc: '',
+            hazopGuide: '',
+            hazopDeviation: '',
+            hazopPossibleCauses: '',
+            hazopResult: '',
+            jhaCheckItem: '',
+            jhaRiskFactor: '',
+            jhaResult: '',
+            phaCheckItem: '',
+            phaRiskFactor: '',
+            phaResult: '',
+            sclCheckItem: '',
+            sclCheckStandard: '',
+            sclCheckUnstandard: '',
+            sclCheckResult: '',
+            hazopId: null,
+            jhaId: null,
+            phaId: null,
+            sclId: null,
+            analogyId: null,
+        };
+    }else if(title === '查看'){
+        identifyDialogState.title = '查看';
+        identifyDialogState.disabled = true
+        for(let i in identifyDialogState.identifyForm){
+            if(isValidKey(i, identifyDialogState.identifyForm)){
+                identifyDialogState.identifyForm[i] = identifyQueryForm[i];
+            }
+        }
+    }else{
+        identifyDialogState.title = '编辑';
+        identifyDialogState.identifyForm.hazopId = identifyQueryForm.hazopId;
+        identifyDialogState.identifyForm.jhaId = identifyQueryForm.jhaId;
+        identifyDialogState.identifyForm.phaId = identifyQueryForm.phaId;
+        identifyDialogState.identifyForm.sclId = identifyQueryForm.sclId;
+        identifyDialogState.identifyForm.analogyId = identifyQueryForm.analogyId;
+        for(let i in identifyDialogState.identifyForm){
+            if(isValidKey(i, identifyDialogState.identifyForm)){
+                identifyDialogState.identifyForm[i] = identifyQueryForm[i];
+            }
+        }
+    }
+    identifyDialogState.identifyForm.id = value.id;
+    identifyDialogState.identifyForm.identificationMethod = value.identificationMethod;
+};
+
+const onSubmitIdentify = () => {
+    identifyFormRef.value.validate(async(valid: boolean) => {
+        if(valid){
+            if(identifyDialogState.title === '新增'){
+                let { hazopId, jhaId, phaId, sclId, analogyId, ...data } = identifyDialogState.identifyForm
+                let res = await identifyApi().addIdentify(data);
+                if(res.data.code === 100){
+                    emit('refresh',1,res.data.data)
+                    identifyDialogState.identifyDialogVisible = false;
+                    ElMessage({
+                        type: 'success',
+                        message: '新增成功'
+                    })
+                }else{
+                    ElMessage({
+                        type: 'warning',
+                        message: res.data.msg,
+                    });
+                }
+            }else{
+                let res = await identifyApi().modIdentify(identifyDialogState.identifyForm)
+                if(res.data.code === 100){
+                    emit('refresh',2,identifyDialogState.identifyForm)
+                    identifyDialogState.identifyDialogVisible = false;
+                    ElMessage({
+                        type: 'success',
+                        message: '编辑成功'
+                    })
+                }else{
+                    ElMessage({
+                        type: 'warning',
+                        message: res.data.msg,
+                    });
+                }
+            }
+        }else{
+            ElMessage({
+                type: 'warning',
+                message: '请完善基本信息',
+            });
+        }
+    })
+}
+
+const emit = defineEmits(['refresh'])
+
+defineExpose({
+    showIdentifyDialog
+})
+</script>
+
+<style scoped>
+
+</style>
diff --git a/src/views/analyse/identify/components/identifyQuery.vue b/src/views/analyse/identify/components/identifyQuery.vue
new file mode 100644
index 0000000..6bf8d78
--- /dev/null
+++ b/src/views/analyse/identify/components/identifyQuery.vue
@@ -0,0 +1,157 @@
+<template>
+    <div class="system-menu-dialog-container">
+        <el-dialog :title="identifyQueryState.title" v-model="identifyQueryState.identifyQueryVisible" :close-on-click-modal="false" width="800px">
+            <el-form ref="identifyFormRef" :rules="identifyQueryState.identifyFormRules" :model="identifyQueryState.identifyQueryForm" size="default" label-width="100px">
+                <el-row :gutter="35">
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                        <el-form-item label="评估计划" prop="id">
+                            <el-select class="input-length" :disabled="true" v-model="identifyQueryState.identifyQueryForm.id" style="width:100%" placeholder="评估计划" clearable>
+                                <el-option v-for="item in identifyQueryState.planList" :key="item.id" :label="item.assessPlanName" :value="item.id"></el-option>
+                            </el-select>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                        <el-form-item label="辨识方法" prop="identificationMethod">
+                            <el-select class="input-length" :disabled="identifyQueryState.disabled" v-model="identifyQueryState.identifyQueryForm.identificationMethod" style="width:100%" placeholder="辨识方法" clearable>
+                                <el-option v-for="item in identifyQueryState.identificationMethodList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+                            </el-select>
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+            </el-form>
+            <div class="checkUnit-point">
+                <el-tabs class="active" v-model="identifyQueryState.activeName">
+                    <el-tab-pane label="辨识信息" name="identify">
+                        <div style="padding-bottom: 10px" v-if="identifyQueryState.identifyForm.planExecStatus === 2">
+                            <el-button size="default"  type="primary"  @click="openIdentifyDialog('新增', '')">
+                                <el-icon>
+                                    <ele-FolderAdd />
+                                </el-icon>
+                                新增
+                            </el-button>
+                        </div>
+
+                        <el-table :data="identifyQueryState.list" border fit highlight-current-row style="width: 100%">
+                            <el-table-column type="index" label="序号" width="80" />
+                            <el-table-column prop="technologyMeasure" label="技术措施" show-overflow-tooltip align="center"></el-table-column>
+                            <el-table-column prop="manageMeasure" label="管理措施" show-overflow-tooltip align="center"></el-table-column>
+                            <el-table-column prop="educationMeasure" label="教育措施" show-overflow-tooltip align="center"></el-table-column>
+                            <el-table-column prop="personalProtectionMeasure" label="防护措施" show-overflow-tooltip align="center"></el-table-column>
+                            <el-table-column label="操作" width="150" align="center">
+                                <template #default="scope">
+                                    <el-button size="default" text  type="primary"  @click="openIdentifyDialog('查看', scope.row)">查看</el-button>
+                                    <el-button size="default" text  type="primary" v-if="identifyQueryState.identifyForm.planExecStatus === 2"  @click="openIdentifyDialog('编辑', scope.row)">编辑</el-button>
+                                    <el-button size="default" text type="danger" v-if="identifyQueryState.identifyForm.planExecStatus === 2" @click="onDelIdentifyQuery(scope.$index, scope.row)">删除</el-button>
+                                </template>
+                            </el-table-column>
+                        </el-table>
+                    </el-tab-pane>
+                </el-tabs>
+            </div>
+            <template #footer>
+				<span class="Query-footer">
+					<el-button @click="identifyQueryState.identifyQueryVisible = !identifyQueryState.identifyQueryVisible" size="default">取 消</el-button>
+					<el-button v-if="identifyQueryState.identifyForm.planExecStatus === 2" type="primary" @click="identifyQueryState.identifyQueryVisible = !identifyQueryState.identifyQueryVisible" size="default">确定</el-button>
+				</span>
+            </template>
+        </el-dialog>
+        <identify-dialog ref="identifyDialogRef" @refresh="refreshList"></identify-dialog>
+    </div>
+</template>
+
+<script setup lang="ts">
+import {defineAsyncComponent, reactive, ref} from "vue";
+import {ElMessage, ElMessageBox} from "element-plus";
+import {identifyApi} from "/@/api/analyse/identify";
+import {isValidKey} from "/@/utils/methods";
+
+const identifyDialogRef = ref()
+const IdentifyDialog = defineAsyncComponent(() => import('./identifyDialog.vue'))
+
+const identifyQueryState = reactive<IdentifyQueryType>({
+    title: '',
+    activeName: 'identify',
+    list: [],
+    identifyQueryVisible: false,
+    identifyQueryForm: {
+        id: null,
+        identificationMethod: null,
+    },
+    identifyForm: {},
+    identificationMethodList: [
+        {id:1, name: 'PHA'},
+        {id:2, name: 'JHA'},
+        {id:3, name: 'SCL'},
+        {id:4, name: 'HAZOP'},
+        {id:5, name: '类比法'},
+    ],
+    planList: [],
+})
+
+const showIdentifyQuery = (title: string, value: IdentifyType, planList: PlanType [], personList: SystemPersonType []) => {
+    identifyQueryState.identifyQueryVisible = true;
+    identifyQueryState.identifyForm = value;
+    identifyQueryState.planList = planList;
+    identifyQueryState.list = value.factorQueryDTOList;
+    for(let i in identifyQueryState.identifyQueryForm){
+        if(isValidKey(i, identifyQueryState.identifyQueryForm)){
+            identifyQueryState.identifyQueryForm[i] = value[i]
+        }
+    }
+    if(title === '编辑'){
+        identifyQueryState.title = '编辑';
+    }else {
+        identifyQueryState.title = '查看';
+    }
+};
+
+const openIdentifyDialog = (title: string, value: IdentifyType) => {
+    identifyDialogRef.value.showIdentifyDialog(title, identifyQueryState.identifyForm, value);
+};
+
+const refreshList = (type: number, data: IdentifyType) => {
+    if(type === 1){
+        identifyQueryState.list?.push(data)
+    }else{
+        (<Array<IdentifyType>>identifyQueryState.list)[identifyQueryState.list?.findIndex(item => item.id === data.id) as number] = data
+    }
+};
+
+const onDelIdentifyQuery = (index: number, val: IdentifyType) => {
+    ElMessageBox.confirm(`此操作将永久删除该辨识,是否继续?`, '提示', {
+        confirmButtonText: '确认',
+        cancelButtonText: '取消',
+        type: 'warning'
+    })
+        .then(async () => {
+            let data = { id: val.id, analogyId: val.analogyId, hazopId: val.hazopId, jhaId: val.jhaId, phaId: val.phaId, sclId: val.sclId, }
+            let res = await identifyApi().deleteIdentifyById(data);
+            if (res.data.code === 100) {
+                (<Array<IdentifyType>>identifyQueryState.list).splice(index, 1)
+                ElMessage({
+                    type: 'success',
+                    duration: 2000,
+                    message: '删除成功'
+                });
+            } else {
+                ElMessage({
+                    type: 'warning',
+                    message: res.data.msg
+                });
+            }
+        })
+        .catch((error) => {
+            console.log(error);
+        });
+};
+
+const emit = defineEmits(['refresh'])
+
+defineExpose({
+    showIdentifyQuery
+})
+</script>
+
+<style scoped>
+
+</style>
diff --git a/src/views/analyse/identify/index.ts b/src/views/analyse/identify/index.ts
new file mode 100644
index 0000000..c99a614
--- /dev/null
+++ b/src/views/analyse/identify/index.ts
@@ -0,0 +1,128 @@
+declare interface IdentifyStateType {
+	identifyData: Array<IdentifyType>
+	searchQuery: {
+		pageIndex: number,
+		pageSize: number,
+		assessPlanName: string,
+		experimentName: string,
+		tag: number,
+	}
+	total: number
+	identificationMethodList: Array<Type>,
+	evaluateMethodList: Array<Type>
+	planList: Array<PlanType>
+	personList: Array<SystemPersonType>
+}
+
+declare interface IdentifyQueryType {
+	title: string,
+	activeName: string,
+	list?: IdentifyType [],
+	identifyQueryVisible: boolean,
+	identifyQueryForm: {
+		id: null | number,
+		identificationMethod: null | number,
+	},
+	identifyForm: {},
+	identificationMethodList: Array<Type>,
+	planList: Array<PlanType>
+}
+
+declare  interface SystemPersonType {
+	id: number,
+	realName: string,
+}
+
+declare interface IdentifyType {
+	id: number | null,
+	technologyMeasure: string,
+	assessPlanName: string,
+	manageMeasure: string,
+	educationMeasure: string,
+	personalProtectionMeasure: string,
+	emergencyMeasure: string,
+	identificationMethod: number | null,
+	hazopId?: number | null,
+	jhaId?: number | null,
+	phaId?: number | null,
+	sclId?: number | null,
+	analogyId?: number | null,
+	analogyCheckItem: string,
+	analogyRiskFactor: string,
+	analogyResult: string,
+	analogyReference: string,
+	hazopNode: string,
+	hazopParam: string,
+	hazopParamDesc: string,
+	hazopGuide: string,
+	hazopDeviation: string,
+	hazopPossibleCauses: string,
+	hazopResult: string,
+	jhaCheckItem: string,
+	jhaRiskFactor: string,
+	jhaResult: string,
+	phaCheckItem: string,
+	phaRiskFactor: string,
+	phaResult: string,
+	sclCheckItem: string,
+	sclCheckStandard: string,
+	sclCheckUnstandard: string,
+	sclCheckResult: string,
+	planExecStatus: number,
+	evaluateMethod: number,
+	factorQueryDTOList?: IdentifyType [],
+}
+
+declare interface Type {
+	id: number,
+	name: string,
+}
+
+declare interface IdentifyDialogType {
+	title: string,
+	time: string [],
+	disabled: boolean,
+	identifyDialogVisible: boolean,
+	identifyForm: {
+		id: number | null,
+		technologyMeasure: string,
+		manageMeasure: string,
+		educationMeasure: string,
+		personalProtectionMeasure: string,
+		emergencyMeasure: string,
+		identificationMethod: number | null,
+		hazopId?: number | null,
+		jhaId?: number | null,
+		phaId?: number | null,
+		sclId?: number | null,
+		analogyId?: number | null,
+		analogyCheckItem: string,
+		analogyRiskFactor: string,
+		analogyResult: string,
+		analogyReference: string,
+		hazopNode: string,
+		hazopParam: string,
+		hazopParamDesc: string,
+		hazopGuide: string,
+		hazopDeviation: string,
+		hazopPossibleCauses: string,
+		hazopResult: string,
+		jhaCheckItem: string,
+		jhaRiskFactor: string,
+		jhaResult: string,
+		phaCheckItem: string,
+		phaRiskFactor: string,
+		phaResult: string,
+		sclCheckItem: string,
+		sclCheckStandard: string,
+		sclCheckUnstandard: string,
+		sclCheckResult: string,
+	},
+	identifyFormRules: {
+
+	},
+	identificationMethodList: Array<Type>,
+	evaluateMethodList: Array<Type>
+	planList: Array<PlanType>
+	personList: Array<SystemPersonType>
+}
diff --git a/src/views/analyse/identify/index.vue b/src/views/analyse/identify/index.vue
new file mode 100644
index 0000000..320da4a
--- /dev/null
+++ b/src/views/analyse/identify/index.vue
@@ -0,0 +1,395 @@
+<template>
+    <div class="home-container">
+        <div style="height: 100%">
+            <el-row class="homeCard">
+                <div class="basic-line">
+                    <span>评估计划名称:</span>
+                    <el-input v-model="identifyState.searchQuery.assessPlanName" clearable filterable class="input-box" placeholder="评估计划名称">
+                    </el-input>
+                </div>
+                <div class="basic-line">
+                    <span>实验名称:</span>
+                    <el-input v-model="identifyState.searchQuery.experimentName" clearable filterable class="input-box" placeholder="实验名称">
+                    </el-input>
+                </div>
+                <div style="padding-bottom: 10px">
+                    <el-button type="primary" @click="getIdentifyData">查询</el-button>
+                    <el-button plain @click="reset">重置</el-button>
+                </div>
+            </el-row>
+            <div class="homeCard">
+                <div class="main-card">
+                    <el-row class="cardTop">
+                        <el-col :span="12" class="mainCardBtn">
+<!--                            <el-button type="primary" :icon="Plus" size="default" @click="openIdentifyQuery('新增', {})">新增</el-button>-->
+                            <!--                            <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button>-->
+                        </el-col>
+                        <!--                        <el-button type="primary" :icon="Refresh" size="default" />-->
+                    </el-row>
+                    <el-table ref="multipleTableRef" :data="identifyState.identifyData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }">
+                        <el-table-column prop="assessPlanName" label="评估计划名称"/>
+                        <el-table-column prop="identificationMethod" label="辨识方法" show-overflow-tooltip>
+                            <template #default="scope">
+                                <span>{{`${identifyState.identificationMethodList.find(item =>item.id === scope.row.identificationMethod)?.name}`}}</span>
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="identificationUser" label="计划负责人" />
+                        <el-table-column prop="evaluateUser" label="评价专家" />
+                        <el-table-column prop="createTime" label="创建时间" show-overflow-tooltip></el-table-column>
+                        <el-table-column prop="createByUserName" label="创建人" show-overflow-tooltip></el-table-column>
+                        <el-table-column prop="updateTime" label="最后修改时间" show-overflow-tooltip></el-table-column>
+                        <el-table-column prop="updateByUserName" label="最后修改人" show-overflow-tooltip></el-table-column>
+                        <el-table-column prop="planExecStatus" label="状态" show-overflow-tooltip>
+                            <template #default="scope">
+                                <div>
+                                    <div v-if="scope.row.planExecStatus === 2">
+                                        <el-tag :type="'info'">
+                                            {{ '未辨识' }}
+                                        </el-tag>
+                                    </div>
+                                    <div v-if="scope.row.planExecStatus === 3">
+                                        <el-tag :type="'success'">
+                                            {{ '已辨识' }}
+                                        </el-tag>
+                                    </div>
+                                </div>
+                            </template>
+                        </el-table-column>
+                        <el-table-column label="操作" width="250">
+                            <template #default="scope">
+                                <el-button size="small" text type="primary" v-if="scope.row.planExecStatus === 2" @click="accessIdentify(scope.row)">提交</el-button>
+                                <el-button size="small" text type="primary" :icon="View" @click="openIdentifyQuery('查看', scope.row)">查看</el-button>
+                                <el-button size="small" text type="primary" v-if="scope.row.planExecStatus === 2" :icon="Edit" @click="openIdentifyQuery('编辑', scope.row)">编辑</el-button>
+                                <el-button size="small" text type="danger" :icon="Delete" @click="onDelIdentify(scope.row)">删除</el-button>
+                            </template>
+                        </el-table-column>
+                    </el-table>
+                    <div class="pageBtn">
+                        <el-pagination @size-change="onHandleSizeChange" @current-change="onHandleCurrentChange" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="identifyState.searchQuery.pageIndex" background v-model:page-size="identifyState.searchQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="identifyState.total" class="page-position"> </el-pagination>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <identify-query-dialog ref="identifyQueryDialogRef" @refresh="getIdentifyData"></identify-query-dialog>
+    </div>
+</template>
+
+<script setup lang="ts">
+import {defineAsyncComponent, onMounted, reactive, ref} from "vue";
+import {identifyApi} from "/@/api/analyse/identify";
+import {ElMessage, ElMessageBox} from "element-plus";
+import { Edit, View, Plus, Delete } from '@element-plus/icons-vue';
+import {planApi} from "/@/api/analyse/plan";
+import {userApi} from "/@/api/systemManage/user";
+
+const IdentifyQueryDialog = defineAsyncComponent(() => import('./components/identifyQuery.vue'));
+
+const identifyQueryDialogRef = ref();
+
+const identifyState = reactive<IdentifyStateType>({
+    identifyData: [],
+    searchQuery: {
+        pageIndex: 1,
+        pageSize: 10,
+        assessPlanName: '',
+        experimentName: '',
+        tag: 1,
+    },
+    total: 0,
+    planList: [
+    ],
+    personList: [],
+    identificationMethodList: [
+        {id:1, name: 'PHA'},
+        {id:2, name: 'JHA'},
+        {id:3, name: 'SCL'},
+        {id:4, name: 'HAZOP'},
+        {id:5, name: '类比法'},
+    ],
+    evaluateMethodList: [
+        {id:1, name: 'LEC'},
+        {id:2, name: 'LS'},
+        {id:3, name: 'MES'},
+        {id:4, name: 'RS'},
+    ]
+    // deviceUnitList: [
+    //     {id:1, name: '台'},
+    //     {id:2, name: '个'},
+    //     {id:3, name: '件'}
+    // ]
+});
+
+const getIdentifyData = async () => {
+    let res = await identifyApi().getIdentifyByList(identifyState.searchQuery);
+    if(res.data.code === 100){
+        identifyState.identifyData = res.data.data;
+        identifyState.total = res.data.total;
+    }else{
+        ElMessage({
+            type: 'warning',
+            message: res.data.msg
+        });
+    }
+};
+
+const getAllPlanList = async () => {
+    let res = await planApi().getAllPlan();
+    if(res.data.code === 100){
+        identifyState.planList = JSON.parse(JSON.stringify(res.data.data));
+    }else{
+        ElMessage({
+            type: 'warning',
+            message: res.data.msg
+        });
+    }
+};
+
+const getPersonList = async () => {
+    let res = await userApi().getUserList({
+        roleId: 1,
+        usePage: false,
+        pageIndex: 1,
+        pageSize: 10
+    });
+    if(res.data.code === 100){
+        identifyState.personList = JSON.parse(JSON.stringify(res.data.data));
+    }else{
+        ElMessage({
+            type: 'warning',
+            message: res.data.msg
+        })
+    }
+};
+
+const openIdentifyQuery = (title: string, value: IdentifyType) => {
+    identifyQueryDialogRef.value.showIdentifyQuery(title, value, identifyState.planList, identifyState.personList);
+};
+
+const onDelIdentify = (val: IdentifyType) => {
+    ElMessageBox.confirm(`此操作将永久删除该辨识,是否继续?`, '提示', {
+        confirmButtonText: '确认',
+        cancelButtonText: '取消',
+        type: 'warning'
+    })
+        .then(async () => {
+            let res = await identifyApi().deleteIdentifyById({ id: val.id });
+            if (res.data.code === 100) {
+                ElMessage({
+                    type: 'success',
+                    duration: 2000,
+                    message: '删除成功'
+                });
+                await getIdentifyData();
+            } else {
+                ElMessage({
+                    type: 'warning',
+                    message: res.data.msg
+                });
+            }
+        })
+        .catch((error) => {
+        });
+};
+
+const accessIdentify = (val: IdentifyType) => {
+    ElMessageBox.confirm(`此操作将派发该计划:“${val.assessPlanName}”,是否继续?`, '提示', {
+        confirmButtonText: '确认',
+        cancelButtonText: '取消',
+        type: 'warning'
+    })
+        .then(async () => {
+            let res = await identifyApi().submitIdentify({ id: val.id});
+            if (res.data.code === 100) {
+                ElMessage({
+                    type: 'success',
+                    duration: 2000,
+                    message: '提交成功'
+                });
+                await getIdentifyData();
+            } else {
+                ElMessage({
+                    type: 'warning',
+                    message: res.data.msg
+                });
+            }
+        })
+        .catch((error) => {
+        });
+};
+
+const onHandleSizeChange = (val: number) => {
+    identifyState.searchQuery.pageSize = val;
+    getIdentifyData();
+};
+
+const onHandleCurrentChange = (val: number) => {
+    identifyState.searchQuery.pageIndex = val;
+    getIdentifyData();
+};
+
+const reset = () => {
+    identifyState.searchQuery = {
+        pageIndex: 1,
+        pageSize: 10,
+        assessPlanName: '',
+        experimentName: '',
+        tag: 1,
+    }
+};
+
+onMounted(() => {
+    getIdentifyData();
+    getAllPlanList();
+    getPersonList();
+});
+
+</script>
+
+<style scoped lang="scss">
+$homeNavLengh: 8;
+.home-container {
+    height: calc(100vh - 144px);
+    box-sizing: border-box;
+    overflow: hidden;
+    .homeCard {
+        width: 100%;
+        padding: 20px;
+        box-sizing: border-box;
+        background: #fff;
+        border-radius: 4px;
+
+        .main-card {
+            width: 100%;
+            height: 100%;
+            .cardTop {
+                display: flex;
+                align-items: center;
+                justify-content: space-between;
+                margin-bottom: 20px;
+                .mainCardBtn {
+                    margin: 0;
+                }
+            }
+            .pageBtn {
+                height: 60px;
+                display: flex;
+                align-items: center;
+                justify-content: right;
+
+                .demo-pagination-block + .demo-pagination-block {
+                    margin-top: 10px;
+                }
+                .demo-pagination-block .demonstration {
+                    margin-bottom: 16px;
+                }
+            }
+        }
+        &:last-of-type {
+            height: calc(100% - 100px);
+        }
+    }
+    .el-row {
+        display: flex;
+        align-items: center;
+        margin-bottom: 20px;
+        &:last-child {
+            margin-bottom: 0;
+        }
+        .grid-content {
+            align-items: center;
+            min-height: 36px;
+        }
+
+        .topInfo {
+            display: flex;
+            align-items: center;
+            font-size: 16px;
+            font-weight: bold;
+
+            & > div {
+                white-space: nowrap;
+                margin-right: 20px;
+            }
+        }
+    }
+}
+.stepItem {
+    width: 100%;
+    display: flex;
+    align-items: flex-start;
+    margin-bottom: 30px;
+    margin-left: 30px;
+    padding-bottom: 30px;
+    border-left: 2px solid #ccc;
+    &:first-of-type {
+        margin-top: 30px;
+    }
+    &:last-of-type {
+        margin-bottom: 0;
+        border-left: none;
+    }
+    .stepNum {
+        width: 30px;
+        height: 30px;
+        border-radius: 15px;
+        box-sizing: border-box;
+        color: #333;
+        border: 1px solid #999;
+        line-height: 28px;
+        text-align: center;
+        margin-right: 10px;
+        margin-left: -16px;
+        margin-top: -30px;
+    }
+    .stepCard {
+        width: 100%;
+        margin-top: -30px;
+
+        .box-card {
+            width: 100%;
+            &:deep(.el-card__header) {
+                padding: 10px 15px;
+            }
+            .card-header {
+                width: 100%;
+                display: flex;
+                justify-content: space-between;
+                align-items: center;
+                & > div:first-of-type {
+                    margin-right: 80px;
+                    font-size: 18px;
+                    font-weight: bold;
+                }
+            }
+        }
+    }
+    &:hover .card-header {
+        color: #0098f5;
+    }
+    &:hover .stepNum {
+        border: 2px solid #0098f5;
+        color: #0098f5;
+    }
+}
+
+:deep(.el-date-editor) {
+    width: 100%;
+}
+.el-select {
+    width: 100%;
+}
+:deep(.el-textarea.is-disabled .el-textarea__inner) {
+    background-color: var(--el-card-bg-color);
+    color: var(--el-input-text-color, var(--el-text-color-regular));
+}
+:deep(.el-input.is-disabled .el-input__inner) {
+    color: var(--el-input-text-color, var(--el-text-color-regular));
+}
+:deep(.el-input.is-disabled .el-input__wrapper) {
+    background-color: var(--el-card-bg-color);
+}
+:deep(.el-range-editor.is-disabled input){
+    background-color: var(--el-card-bg-color);
+    color: var(--el-input-text-color, var(--el-text-color-regular));
+}
+</style>
diff --git a/src/views/analyse/plan/components/planDialog.vue b/src/views/analyse/plan/components/planDialog.vue
new file mode 100644
index 0000000..2ee4fe9
--- /dev/null
+++ b/src/views/analyse/plan/components/planDialog.vue
@@ -0,0 +1,230 @@
+<template>
+    <div class="system-menu-dialog-container">
+        <el-dialog :title="planDialogState.title" v-model="planDialogState.planDialogVisible" width="600px">
+            <el-form ref="planFormRef" :rules="planDialogState.planFormRules" :model="planDialogState.planForm" size="default" label-width="120px">
+                <el-row :gutter="35">
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                        <el-form-item label="风险分析单元" prop="riskUnitId">
+                            <el-select :disabled="planDialogState.disabled" v-model="planDialogState.planForm.riskUnitId" style="width:100%" placeholder="风险分析单元" clearable>
+                                <el-option v-for="item in planDialogState.riskUnitList" :key="item.id" :label="item.riskName" :value="item.id"></el-option>
+                            </el-select>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                        <el-form-item label="评估计划名称" prop="assessPlanName">
+                            <el-input :disabled="planDialogState.disabled" v-model="planDialogState.planForm.assessPlanName" placeholder="评估计划名称" clearable></el-input>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                        <el-form-item label="计划制定人" prop="planUserId">
+                            <el-select :disabled="planDialogState.disabled" v-model="planDialogState.planForm.planUserId" style="width:100%"  placeholder="计划制定人" clearable>
+                                <el-option v-for="item in planDialogState.personList" :key="item.id" :label="item.realName" :value="item.id"></el-option>
+                            </el-select>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                        <el-form-item label="评估时间" prop="assessPlanName">
+                            <el-date-picker
+                                :disabled="planDialogState.disabled"
+                                type="datetimerange"
+                                v-model="planDialogState.time"
+                                start-placeholder="开始时间"
+                                end-placeholder="结束时间"
+                                format="YYYY-MM-DD HH:mm:ss"
+                                value-format="YYYY-MM-DD HH:mm:ss"
+                                @change="formatTime">
+                            </el-date-picker>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                        <el-form-item label="辨识方法" prop="identificationMethod">
+                            <el-select :disabled="planDialogState.disabled" v-model="planDialogState.planForm.identificationMethod" style="width:100%" placeholder="辨识方法" clearable>
+                                <el-option v-for="item in planDialogState.identificationMethodList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+                            </el-select>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                        <el-form-item label="负责人" prop="identificationUserId">
+                            <el-select :disabled="planDialogState.disabled" v-model="planDialogState.planForm.identificationUserId" style="width:100%"  placeholder="负责人" clearable>
+                                <el-option v-for="item in planDialogState.personList" :key="item.id" :label="item.realName" :value="item.id"></el-option>
+                            </el-select>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                        <el-form-item label="推荐评价方法" prop="evaluateMethod">
+                            <el-select :disabled="planDialogState.disabled" v-model="planDialogState.planForm.evaluateMethod" style="width:100%"  placeholder="推荐评价方法" clearable>
+                                <el-option v-for="item in planDialogState.evaluateMethodList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+                            </el-select>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                        <el-form-item label="评价专家" prop="evaluateUserId">
+                            <el-select :disabled="planDialogState.disabled" v-model="planDialogState.planForm.evaluateUserId" style="width:100%"  placeholder="评价专家" clearable>
+                                <el-option v-for="item in planDialogState.personList" :key="item.id" :label="item.realName" :value="item.id"></el-option>
+                            </el-select>
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+            </el-form>
+            <template #footer>
+				<span class="dialog-footer">
+					<el-button @click="planDialogState.planDialogVisible = !planDialogState.planDialogVisible" size="default">取 消</el-button>
+					<el-button v-if="!planDialogState.disabled" type="primary" @click="onSubmitPlan" size="default">确定</el-button>
+				</span>
+            </template>
+        </el-dialog>
+    </div>
+</template>
+
+<script setup lang="ts">
+import { reactive, ref } from "vue";
+import {ElMessage} from "element-plus";
+import {planApi} from "/@/api/analyse/plan";
+import {isValidKey} from "/@/utils/methods";
+
+const planFormRef = ref()
+
+const planDialogState = reactive<PlanDialogType>({
+    title: '',
+    time:[],
+    disabled: false,
+    planDialogVisible: false,
+    planForm: {
+        riskUnitId: null,
+        planUserId: null,
+        assessPlanName: '',
+        assessStartTime: '',
+        assessEndTime: '',
+        identificationMethod: null,
+        identificationUserId: null,
+        evaluateMethod: null,
+        evaluateUserId: null,
+    },
+    planFormRules: {
+        deviceCode: [{ required: true, message: '请填写设备编号', trigger: 'blur' }],
+        deviceName: [{ required: true, message: '请填写设备名称', trigger: 'blur' }],
+        devicePower: [{ required: true, message: '请填写设备功率', trigger: 'blur' }],
+        riskUnitId: [{ required: true, message: '请选择风险分析单元', trigger: 'change' }],
+        planUserId: [{ required: true, message: '请选择计划制定人', trigger: 'change' }],
+        identificationMethod: [{ required: true, message: '请选择辨识方法', trigger: 'change' }],
+        identificationUserId: [{ required: true, message: '请选择负责人', trigger: 'change' }],
+        evaluateMethod: [{ required: true, message: '请选择推荐评价方法', trigger: 'change' }],
+        evaluateUserId: [{ required: true, message: '请选择评价专家', trigger: 'change' }],
+    },
+    riskUnitList: [],
+    personList: [],
+    identificationMethodList: [
+        {id:1, name: 'PHA'},
+        {id:2, name: 'JHA'},
+        {id:3, name: 'SCL'},
+        {id:4, name: 'HAZOP'},
+        {id:5, name: '类比法'},
+    ],
+    evaluateMethodList: [
+        {id:1, name: 'LEC'},
+        {id:2, name: 'LS'},
+        {id:3, name: 'MES'},
+        {id:4, name: 'RS'},
+    ]
+})
+
+const showPlanDialog = (title: string, value: PlanType, riskUnitList: RiskUnitType [], personList: SystemPersonType []) => {
+    planDialogState.planDialogVisible = true;
+    planDialogState.riskUnitList = riskUnitList;
+    planDialogState.personList = personList;
+    planDialogState.disabled = false
+    setTimeout(() => {
+        planFormRef.value.clearValidate();
+    });
+    if(title === '新增'){
+        planDialogState.title = '新增';
+        planDialogState.planForm = {
+            riskUnitId: null,
+            planUserId: null,
+            assessPlanName: '',
+            assessStartTime: '',
+            assessEndTime: '',
+            identificationMethod: null,
+            identificationUserId: null,
+            evaluateMethod: null,
+            evaluateUserId: null,
+        };
+    }else if(title === '查看'){
+        planDialogState.title = '查看';
+        planDialogState.disabled = true
+        planDialogState.time = [value.assessStartTime, value.assessEndTime]
+        for(let i in planDialogState.planForm){
+            if(isValidKey(i, planDialogState.planForm)){
+                planDialogState.planForm[i] = value[i]
+            }
+        }
+    }else{
+        planDialogState.title = '编辑';
+        planDialogState.planForm.id = value.id
+        planDialogState.time = [value.assessStartTime, value.assessEndTime]
+        for(let i in planDialogState.planForm){
+            if(isValidKey(i, planDialogState.planForm)){
+                planDialogState.planForm[i] = value[i]
+            }
+        }
+    }
+};
+
+const formatTime = () => {
+    planDialogState.planForm.assessStartTime = planDialogState.time === null ? '' : planDialogState.time[0]
+    planDialogState.planForm.assessEndTime = planDialogState.time === null ? '' : planDialogState.time[1]
+};
+
+const onSubmitPlan = () => {
+    planFormRef.value.validate(async(valid: boolean) => {
+        if(valid){
+            if(planDialogState.title === '新增'){
+                let res = await planApi().addPlan(planDialogState.planForm);
+                if(res.data.code === 100){
+                    emit('refresh')
+                    planDialogState.planDialogVisible = false;
+                    ElMessage({
+                        type: 'success',
+                        message: '新增成功'
+                    })
+                }else{
+                    ElMessage({
+                        type: 'warning',
+                        message: res.data.msg,
+                    });
+                }
+            }else{
+                let res = await planApi().modPlan(planDialogState.planForm)
+                if(res.data.code === 100){
+                    emit('refresh')
+                    planDialogState.planDialogVisible = false;
+                    ElMessage({
+                        type: 'success',
+                        message: '编辑成功'
+                    })
+                }else{
+                    ElMessage({
+                        type: 'warning',
+                        message: res.data.msg,
+                    });
+                }
+            }
+        }else{
+            ElMessage({
+                type: 'warning',
+                message: '请完善基本信息',
+            });
+        }
+    })
+}
+
+const emit = defineEmits(['refresh'])
+
+defineExpose({
+    showPlanDialog
+})
+</script>
+
+<style scoped>
+
+</style>
diff --git a/src/views/analyse/plan/index.ts b/src/views/analyse/plan/index.ts
new file mode 100644
index 0000000..2b6cddd
--- /dev/null
+++ b/src/views/analyse/plan/index.ts
@@ -0,0 +1,63 @@
+declare interface PlanStateType {
+	planData: Array<PlanType>
+	searchQuery: {
+		pageIndex: number,
+		pageSize: number,
+		assessPlanName: string,
+		riskUnitName: string,
+	}
+	total: number
+	identificationMethodList: Array<Type>,
+	evaluateMethodList: Array<Type>
+	riskUnitList: Array<RiskUnitType>
+	personList: Array<SystemPersonType>
+}
+
+declare  interface SystemPersonType {
+	id: number,
+	realName: string,
+}
+
+declare interface PlanType {
+	id: number | null,
+	riskUnitId: number | null,
+	planUserId: number | null,
+	assessPlanName: string,
+	assessStartTime: string,
+	assessEndTime: string,
+	identificationMethod: number | null,
+	identificationUserId: number | null,
+	evaluateMethod: number | null,
+	evaluateUserId: number | null,
+}
+
+declare interface Type {
+	id: number,
+	name: string,
+}
+
+declare interface PlanDialogType {
+	title: string,
+	time: string [],
+	disabled: boolean,
+	planDialogVisible: boolean,
+	planForm: {
+		id?: number | null,
+		riskUnitId: number | null,
+		planUserId: number | null,
+		assessPlanName: string,
+		assessStartTime: string,
+		assessEndTime: string,
+		identificationMethod: number | null,
+		identificationUserId: number | null,
+		evaluateMethod: number | null,
+		evaluateUserId: number | null,
+	},
+	planFormRules: {
+
+	},
+	identificationMethodList: Array<Type>,
+	evaluateMethodList: Array<Type>
+	riskUnitList: Array<RiskUnitType>
+	personList: Array<SystemPersonType>
+}
diff --git a/src/views/analyse/plan/index.vue b/src/views/analyse/plan/index.vue
new file mode 100644
index 0000000..c71f044
--- /dev/null
+++ b/src/views/analyse/plan/index.vue
@@ -0,0 +1,402 @@
+<template>
+    <div class="home-container">
+        <div style="height: 100%">
+            <el-row class="homeCard">
+                <div class="basic-line">
+                    <span>评估计划名称:</span>
+                    <el-input v-model="planState.searchQuery.assessPlanName" clearable filterable class="input-box" placeholder="评估计划名称">
+                    </el-input>
+                </div>
+                <div class="basic-line">
+                    <span>风险单元名称:</span>
+                    <el-input v-model="planState.searchQuery.riskUnitName" clearable filterable class="input-box" placeholder="风险单元名称">
+                    </el-input>
+                </div>
+                <div style="padding-bottom: 10px">
+                    <el-button type="primary" @click="getPlanData">查询</el-button>
+                    <el-button plain @click="reset">重置</el-button>
+                </div>
+            </el-row>
+            <div class="homeCard">
+                <div class="main-card">
+                    <el-row class="cardTop">
+                        <el-col :span="12" class="mainCardBtn">
+                            <el-button type="primary" :icon="Plus" size="default" @click="openPlanDialog('新增', {})">新增</el-button>
+                            <!--                            <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button>-->
+                        </el-col>
+<!--                        <el-button type="primary" :icon="Refresh" size="default" />-->
+                    </el-row>
+                    <el-table ref="multipleTableRef" :data="planState.planData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }">
+                        <el-table-column prop="assessPlanName" label="评估计划名称"/>
+                        <el-table-column prop="riskUnitName" label="风险单元名称" />
+                        <el-table-column prop="planUserName" label="计划制定人" />
+                        <el-table-column prop="identificationMethod" label="辨识方法" show-overflow-tooltip>
+                            <template #default="scope">
+                                <span>{{`${planState.identificationMethodList.find(item =>item.id === scope.row.identificationMethod)?.name}`}}</span>
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="identificationUser" label="计划负责人" />
+                        <el-table-column prop="evaluateMethod" label="推荐评价方法" show-overflow-tooltip>
+                            <template #default="scope">
+                                <span>{{`${planState.evaluateMethodList.find(item =>item.id === scope.row.evaluateMethod)?.name}`}}</span>
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="evaluateUser" label="评价专家" />
+                        <el-table-column prop="createTime" label="创建时间" show-overflow-tooltip></el-table-column>
+                        <el-table-column prop="createByUserName" label="创建人" show-overflow-tooltip></el-table-column>
+                        <el-table-column prop="updateTime" label="最后修改时间" show-overflow-tooltip></el-table-column>
+                        <el-table-column prop="updateByUserName" label="最后修改人" show-overflow-tooltip></el-table-column>
+                        <el-table-column prop="planSellStatus" label="是否派发" show-overflow-tooltip>
+                            <template #default="scope">
+                                <div>
+                                    <div v-if="scope.row.planSellStatus === 1">
+                                        <el-tag :type="'info'">
+                                            {{ '未派发' }}
+                                        </el-tag>
+                                    </div>
+                                    <div v-if="scope.row.planSellStatus === 2">
+                                        <el-tag :type="'success'">
+                                            {{ '已派发' }}
+                                        </el-tag>
+                                    </div>
+                                </div>
+                            </template>
+                        </el-table-column>
+                        <el-table-column label="操作" width="250">
+                            <template #default="scope">
+                                <el-button size="small" text type="primary" @click="accessPlan(scope.row)">派发</el-button>
+                                <el-button size="small" text type="primary" :icon="View" @click="openPlanDialog('查看', scope.row)">查看</el-button>
+                                <el-button v-if="scope.row.planSellStatus === 1" size="small" text type="primary" :icon="Edit" @click="openPlanDialog('修改', scope.row)">编辑</el-button>
+                                <el-button v-if="scope.row.planSellStatus === 1" size="small" text type="danger" :icon="Delete" @click="onDelPlan(scope.row)">删除</el-button>
+                            </template>
+                        </el-table-column>
+                    </el-table>
+                    <div class="pageBtn">
+                        <el-pagination @size-change="onHandleSizeChange" @current-change="onHandleCurrentChange" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="planState.searchQuery.pageIndex" background v-model:page-size="planState.searchQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="planState.total" class="page-position"> </el-pagination>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <plan-dialog ref="planDialogRef" @refresh="getPlanData"></plan-dialog>
+    </div>
+</template>
+
+<script setup lang="ts">
+import {defineAsyncComponent, onMounted, reactive, ref} from "vue";
+import {planApi} from "/@/api/analyse/plan";
+import {ElMessage, ElMessageBox} from "element-plus";
+import { Edit, View, Plus, Delete } from '@element-plus/icons-vue';
+import {riskUnitApi} from "/@/api/analyse/riskUnit";
+import {personApi} from "/@/api/basic/person";
+import {useUserInfo} from "/@/stores/userInfo";
+import {userApi} from "/@/api/systemManage/user";
+
+const PlanDialog = defineAsyncComponent(() => import('./components/planDialog.vue'));
+
+const planDialogRef = ref();
+
+const planState = reactive<PlanStateType>({
+    planData: [],
+    searchQuery: {
+        pageIndex: 1,
+        pageSize: 10,
+        assessPlanName: '',
+        riskUnitName: '',
+    },
+    total: 0,
+    riskUnitList: [
+    ],
+    personList: [],
+    identificationMethodList: [
+    {id:1, name: 'PHA'},
+    {id:2, name: 'JHA'},
+    {id:3, name: 'SCL'},
+    {id:4, name: 'HAZOP'},
+    {id:5, name: '类比法'},
+],
+    evaluateMethodList: [
+    {id:1, name: 'LEC'},
+    {id:2, name: 'LS'},
+    {id:3, name: 'MES'},
+    {id:4, name: 'RS'},
+]
+    // deviceUnitList: [
+    //     {id:1, name: '台'},
+    //     {id:2, name: '个'},
+    //     {id:3, name: '件'}
+    // ]
+})
+
+const getPlanData = async () => {
+    let res = await planApi().getPlanByList(planState.searchQuery);
+    if(res.data.code === 100){
+        planState.planData = res.data.data;
+        planState.total = res.data.total;
+    }else{
+        ElMessage({
+            type: 'warning',
+            message: res.data.msg
+        });
+    }
+};
+
+const getAllRiskUnitList = async () => {
+    let res = await riskUnitApi().getAllRiskUnit();
+    if(res.data.code === 100){
+        planState.riskUnitList = JSON.parse(JSON.stringify(res.data.data));
+    }else{
+        ElMessage({
+            type: 'warning',
+            message: res.data.msg
+        });
+    }
+};
+
+const getPersonList = async () => {
+    let res = await userApi().getUserList({
+        roleId: 1,
+        usePage: false,
+        pageIndex: 1,
+        pageSize: 10
+    });
+    if(res.data.code === 100){
+        planState.personList = JSON.parse(JSON.stringify(res.data.data));
+    }else{
+        ElMessage({
+            type: 'warning',
+            message: res.data.msg
+        })
+    }
+};
+
+const openPlanDialog = (title: string, value: PlanType) => {
+    planDialogRef.value.showPlanDialog(title, value, planState.riskUnitList, planState.personList);
+};
+
+const onDelPlan = (val: PlanType) => {
+    ElMessageBox.confirm(`此操作将永久删除该计划:“${val.assessPlanName}”,是否继续?`, '提示', {
+        confirmButtonText: '确认',
+        cancelButtonText: '取消',
+        type: 'warning'
+    })
+        .then(async () => {
+            let res = await planApi().deletePlanById({ id: val.id });
+            if (res.data.code === 100) {
+                ElMessage({
+                    type: 'success',
+                    duration: 2000,
+                    message: '删除成功'
+                });
+                await getPlanData();
+            } else {
+                ElMessage({
+                    type: 'warning',
+                    message: res.data.msg
+                });
+            }
+        })
+        .catch((error) => {
+        });
+};
+
+const accessPlan = (val: PlanType) => {
+    ElMessageBox.confirm(`此操作将派发该计划:“${val.assessPlanName}”,是否继续?`, '提示', {
+        confirmButtonText: '确认',
+        cancelButtonText: '取消',
+        type: 'warning'
+    })
+        .then(async () => {
+            let res = await planApi().sellAssessPlan({ id: val.id });
+            if (res.data.code === 100) {
+                ElMessage({
+                    type: 'success',
+                    duration: 2000,
+                    message: '派发成功'
+                });
+                await getPlanData();
+            } else {
+                ElMessage({
+                    type: 'warning',
+                    message: res.data.msg
+                });
+            }
+        })
+        .catch((error) => {
+        });
+};
+
+const onHandleSizeChange = (val: number) => {
+    planState.searchQuery.pageSize = val;
+    getPlanData();
+};
+
+const onHandleCurrentChange = (val: number) => {
+    planState.searchQuery.pageIndex = val;
+    getPlanData();
+};
+
+const reset = () => {
+    planState.searchQuery = {
+        pageIndex: 1,
+        pageSize: 10,
+        riskUnitName: '',
+        assessPlanName: '',
+    }
+};
+
+onMounted(() => {
+    getPlanData();
+    getAllRiskUnitList();
+    getPersonList();
+})
+
+</script>
+
+<style scoped lang="scss">
+$homeNavLengh: 8;
+.home-container {
+    height: calc(100vh - 144px);
+    box-sizing: border-box;
+    overflow: hidden;
+    .homeCard {
+        width: 100%;
+        padding: 20px;
+        box-sizing: border-box;
+        background: #fff;
+        border-radius: 4px;
+
+        .main-card {
+            width: 100%;
+            height: 100%;
+            .cardTop {
+                display: flex;
+                align-items: center;
+                justify-content: space-between;
+                margin-bottom: 20px;
+                .mainCardBtn {
+                    margin: 0;
+                }
+            }
+            .pageBtn {
+                height: 60px;
+                display: flex;
+                align-items: center;
+                justify-content: right;
+
+                .demo-pagination-block + .demo-pagination-block {
+                    margin-top: 10px;
+                }
+                .demo-pagination-block .demonstration {
+                    margin-bottom: 16px;
+                }
+            }
+        }
+        &:last-of-type {
+            height: calc(100% - 100px);
+        }
+    }
+    .el-row {
+        display: flex;
+        align-items: center;
+        margin-bottom: 20px;
+        &:last-child {
+            margin-bottom: 0;
+        }
+        .grid-content {
+            align-items: center;
+            min-height: 36px;
+        }
+
+        .topInfo {
+            display: flex;
+            align-items: center;
+            font-size: 16px;
+            font-weight: bold;
+
+            & > div {
+                white-space: nowrap;
+                margin-right: 20px;
+            }
+        }
+    }
+}
+.stepItem {
+    width: 100%;
+    display: flex;
+    align-items: flex-start;
+    margin-bottom: 30px;
+    margin-left: 30px;
+    padding-bottom: 30px;
+    border-left: 2px solid #ccc;
+    &:first-of-type {
+        margin-top: 30px;
+    }
+    &:last-of-type {
+        margin-bottom: 0;
+        border-left: none;
+    }
+    .stepNum {
+        width: 30px;
+        height: 30px;
+        border-radius: 15px;
+        box-sizing: border-box;
+        color: #333;
+        border: 1px solid #999;
+        line-height: 28px;
+        text-align: center;
+        margin-right: 10px;
+        margin-left: -16px;
+        margin-top: -30px;
+    }
+    .stepCard {
+        width: 100%;
+        margin-top: -30px;
+
+        .box-card {
+            width: 100%;
+            &:deep(.el-card__header) {
+                padding: 10px 15px;
+            }
+            .card-header {
+                width: 100%;
+                display: flex;
+                justify-content: space-between;
+                align-items: center;
+                & > div:first-of-type {
+                    margin-right: 80px;
+                    font-size: 18px;
+                    font-weight: bold;
+                }
+            }
+        }
+    }
+    &:hover .card-header {
+        color: #0098f5;
+    }
+    &:hover .stepNum {
+        border: 2px solid #0098f5;
+        color: #0098f5;
+    }
+}
+
+:deep(.el-date-editor) {
+    width: 100%;
+}
+.el-select {
+    width: 100%;
+}
+:deep(.el-textarea.is-disabled .el-textarea__inner) {
+    background-color: var(--el-card-bg-color);
+    color: var(--el-input-text-color, var(--el-text-color-regular));
+}
+:deep(.el-input.is-disabled .el-input__inner) {
+    color: var(--el-input-text-color, var(--el-text-color-regular));
+}
+:deep(.el-input.is-disabled .el-input__wrapper) {
+    background-color: var(--el-card-bg-color);
+}
+:deep(.el-range-editor.is-disabled input){
+    background-color: var(--el-card-bg-color);
+    color: var(--el-input-text-color, var(--el-text-color-regular));
+}
+</style>
diff --git a/src/views/analyse/riskUnit/components/riskUnitDialog.vue b/src/views/analyse/riskUnit/components/riskUnitDialog.vue
new file mode 100644
index 0000000..9ae8873
--- /dev/null
+++ b/src/views/analyse/riskUnit/components/riskUnitDialog.vue
@@ -0,0 +1,209 @@
+<template>
+    <div class="system-menu-dialog-container">
+        <el-dialog :title="riskUnitDialogState.title" v-model="riskUnitDialogState.riskUnitDialogVisible" width="600px">
+            <el-form ref="riskUnitFormRef" :rules="riskUnitDialogState.riskUnitFormRules" :model="riskUnitDialogState.riskUnitForm" size="default" label-width="120px">
+                <el-row :gutter="35">
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                        <el-form-item label="实验类型" prop="experimentType">
+                            <el-select :disabled="riskUnitDialogState.title === '编辑'" v-model="riskUnitDialogState.experimentType" placeholder="实验类型" clearable class="input-length">
+                                <el-option v-for="item in riskUnitDialogState.experimentTypeList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+                            </el-select>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                        <el-form-item label="实验名称" prop="experimentId">
+                            <el-select v-model="riskUnitDialogState.riskUnitForm.experimentId" placeholder="实验名称" clearable class="input-length">
+                                <el-option v-for="item in riskUnitDialogState.allExperimentList" :key="item.id" :label="item.experimentName" :value="item.id"></el-option>
+                            </el-select>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="riskUnitDialogState.experimentType === 2">
+                        <el-form-item label="风险单元编号" prop="riskCode">
+                            <el-input v-model="riskUnitDialogState.riskUnitForm.riskCode" placeholder="风险单元编号" clearable class="input-length"></el-input>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="riskUnitDialogState.experimentType === 2">
+                        <el-form-item label="风险单元名称" prop="riskName">
+                            <el-input v-model="riskUnitDialogState.riskUnitForm.riskName" placeholder="风险单元名称" clearable class="input-length"></el-input>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="riskUnitDialogState.experimentType === 2">
+                        <el-form-item label="负责人" prop="liabilityUserId">
+                            <el-select v-model="riskUnitDialogState.riskUnitForm.liabilityUserId" placeholder="负责人" clearable class="input-length">
+                                <el-option v-for="item in riskUnitDialogState.allPersonList" :key="item.id" :label="item.personName" :value="item.id"></el-option>
+                            </el-select>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="riskUnitDialogState.experimentType === 2">
+                        <el-form-item label="负责部门" prop="liabilityDep">
+                            <el-input v-model="riskUnitDialogState.riskUnitForm.liabilityDep" placeholder="负责部门" clearable class="input-length"></el-input>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="riskUnitDialogState.experimentType === 2">
+                        <el-form-item label="风险单元描述">
+                            <el-input type="textarea" :rows="3" v-model="riskUnitDialogState.riskUnitForm.description" placeholder="风险单元描述" clearable class="input-length"></el-input>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="riskUnitDialogState.experimentType === 1">
+                        <el-form-item label="基础风险单元" prop="basicRiskUnitId">
+                            <el-select v-model="riskUnitDialogState.riskUnitForm.basicRiskUnitId" placeholder="基础风险单元" clearable class="input-length">
+                                <el-option v-for="item in riskUnitDialogState.basicUnitList" :key="item.id" :label="item.riskName" :value="item.id"></el-option>
+                            </el-select>
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+            </el-form>
+            <template #footer>
+				<span class="dialog-footer">
+					<el-button @click="riskUnitDialogState.riskUnitDialogVisible = !riskUnitDialogState.riskUnitDialogVisible" size="default">取 消</el-button>
+					<el-button type="primary" @click="onSubmitRiskUnit" size="default">确定</el-button>
+				</span>
+            </template>
+        </el-dialog>
+    </div>
+</template>
+
+<script setup lang="ts">
+import { reactive, ref } from "vue";
+import { isValidKey } from "/@/utils/methods";
+import {ElMessage} from "element-plus";
+import {riskUnitApi} from "/@/api/analyse/riskUnit";
+
+const riskUnitFormRef = ref()
+
+const riskUnitDialogState = reactive<RiskUnitDialogType>({
+    title: '',
+    experimentType: null,
+    riskUnitDialogVisible: false,
+    riskUnitForm: {
+        experimentId: null,
+        riskCode: '',
+        riskName: '',
+        liabilityUserId: null,
+        liabilityDep: '',
+        description: '',
+        basicRiskUnitId: null,
+    },
+    riskUnitFormRules: {
+        experimentId: [{ required: true, message: '请选择实验', trigger: 'change' }],
+        riskCode: [{ required: true, message: '请填写风险单元编号', trigger: 'blur' }],
+        riskName: [{ required: true, message: '请填写风险单元名称', trigger: 'blur' }],
+        liabilityUserId: [{ required: true, message: '请选择负责人', trigger: 'change' }],
+        basicRiskUnitId: [{ required: true, message: '请选择基础风险单元', trigger: 'change' }]
+    },
+    specialDeviceList: [],
+    deviceUnitList: [
+        {id:1, name: '台'},
+        {id:2, name: '个'},
+        {id:3, name: '件'}
+    ],
+    basicUnitList: [],
+    allPersonList: [],
+    allExperimentList: [],
+    experimentTypeList: [
+        {id: 2, name: '实验风险'},
+        {id: 1, name: '固有风险'},
+    ],
+})
+
+const showRiskUnitDialog = (title: string, value: RiskUnitType, basicUnitList: UnitType [], allPersonList: AllPersonListType [], allExperimentList: ProjectType []) => {
+    riskUnitDialogState.riskUnitDialogVisible = true;
+    riskUnitDialogState.basicUnitList = basicUnitList
+    riskUnitDialogState.allPersonList = allPersonList
+    riskUnitDialogState.allExperimentList = allExperimentList
+    setTimeout(() => {
+        riskUnitFormRef.value.clearValidate();
+    });
+    if(title === '新增'){
+        riskUnitDialogState.title = '新增';
+        riskUnitDialogState.riskUnitForm = {
+            experimentId: null,
+            riskCode: '',
+            riskName: '',
+            liabilityUserId: null,
+            liabilityDep: '',
+            description: '',
+            basicRiskUnitId: null,
+        };
+    }else{
+        riskUnitDialogState.title = '编辑';
+        riskUnitDialogState.experimentType = value.riskType as number
+        for(let i in riskUnitDialogState.riskUnitForm) {
+            if(isValidKey(i, riskUnitDialogState.riskUnitForm)) {
+                riskUnitDialogState.riskUnitForm[i] = value[i];
+            }
+        }
+        riskUnitDialogState.riskUnitForm.id = value.id
+    }
+};
+
+const onSubmitRiskUnit = () => {
+    riskUnitFormRef.value.validate(async(valid: boolean) => {
+        if(valid){
+            if(riskUnitDialogState.title === '新增' && riskUnitDialogState.experimentType === 1){
+                let { basicRiskUnitId, ...query} = riskUnitDialogState.riskUnitForm
+                let res = await riskUnitApi().addRiskUnit(query);
+                if(res.data.code === 100){
+                    emit('refresh')
+                    riskUnitDialogState.riskUnitDialogVisible = false;
+                    ElMessage({
+                        type: 'success',
+                        message: '新增成功'
+                    })
+                }else{
+                    ElMessage({
+                        type: 'warning',
+                        message: res.data.msg,
+                    });
+                }
+            }else if(riskUnitDialogState.title === '新增' && riskUnitDialogState.experimentType === 2){
+                let { riskCode, riskName, liabilityUserId, liabilityDep, description, ...query} = riskUnitDialogState.riskUnitForm
+                let res = await riskUnitApi().addBasicRiskUnit(query);
+                if(res.data.code === 100){
+                    emit('refresh')
+                    riskUnitDialogState.riskUnitDialogVisible = false;
+                    ElMessage({
+                        type: 'success',
+                        message: '新增成功'
+                    })
+                }else{
+                    ElMessage({
+                        type: 'warning',
+                        message: res.data.msg,
+                    });
+                }
+            }else{
+                let res = await riskUnitApi().modRiskUnit(riskUnitDialogState.riskUnitForm)
+                if(res.data.code === 100){
+                    emit('refresh')
+                    riskUnitDialogState.riskUnitDialogVisible = false;
+                    ElMessage({
+                        type: 'success',
+                        message: '编辑成功'
+                    })
+                }else{
+                    ElMessage({
+                        type: 'warning',
+                        message: res.data.msg,
+                    });
+                }
+            }
+        }else{
+            ElMessage({
+                type: 'warning',
+                message: '请完善基本信息',
+            });
+        }
+    })
+}
+
+const emit = defineEmits(['refresh'])
+
+defineExpose({
+    showRiskUnitDialog
+})
+</script>
+
+<style scoped>
+
+</style>
diff --git a/src/views/analyse/riskUnit/index.ts b/src/views/analyse/riskUnit/index.ts
new file mode 100644
index 0000000..aecbf82
--- /dev/null
+++ b/src/views/analyse/riskUnit/index.ts
@@ -0,0 +1,59 @@
+declare interface RiskUnitStateType {
+	riskUnitData:  RiskUnitType [],
+	searchQuery: {
+		pageIndex: number,
+		pageSize: number,
+		riskCode: string,
+		riskName: string,
+	}
+	total: number
+	riskList: Array<Type>,
+	riskSourceList: Array<Type>
+	evaluateStatusList: Array<Type>
+	basicUnitList: Array<UnitType>
+	allPersonList: Array<AllPersonListType>
+	allExperimentList: Array<ProjectType>
+}
+
+declare interface RiskUnitType {
+	id?: number
+	experimentId: number | null,
+	riskCode: string,
+	riskName: string,
+	liabilityDep: string,
+	liabilityUserId: number | null,
+	description: string,
+	basicRiskUnitId: number | null,
+	riskType?: number,
+}
+
+declare interface Type {
+	id: number,
+	name: string,
+}
+
+declare interface RiskUnitDialogType {
+	title: string,
+	experimentType: number | null,
+	riskUnitDialogVisible: boolean,
+	riskUnitForm: {
+		id?: number
+		experimentId: number | null,
+		riskCode: string,
+		riskName: string,
+		liabilityDep: string,
+		liabilityUserId: number | null,
+		description: string,
+		basicRiskUnitId: number | null,
+		riskType?: number,
+	},
+	riskUnitFormRules: {
+
+	},
+	specialDeviceList: Array<Type>,
+	deviceUnitList: Array<Type>,
+	basicUnitList: Array<UnitType>,
+	allPersonList: Array<AllPersonListType>,
+	allExperimentList: Array<ProjectType>,
+	experimentTypeList: Array<Type>
+}
diff --git a/src/views/analyse/riskUnit/index.vue b/src/views/analyse/riskUnit/index.vue
new file mode 100644
index 0000000..c6d1221
--- /dev/null
+++ b/src/views/analyse/riskUnit/index.vue
@@ -0,0 +1,358 @@
+<template>
+    <div class="home-container">
+        <div style="height: 100%">
+            <el-row class="homeCard">
+                <div class="basic-line">
+                    <span>风险编码:</span>
+                    <el-input v-model="riskUnitState.searchQuery.riskCode" clearable filterable class="input-box" placeholder="风险编码">
+                    </el-input>
+                </div>
+                <div class="basic-line">
+                    <span>风险名称:</span>
+                    <el-input v-model="riskUnitState.searchQuery.riskName" clearable filterable class="input-box" placeholder="风险名称">
+                    </el-input>
+                </div>
+                <div style="padding-bottom: 10px">
+                    <el-button type="primary" @click="getRiskUnitData">查询</el-button>
+                    <el-button plain @click="reset">重置</el-button>
+                </div>
+            </el-row>
+            <div class="homeCard">
+                <div class="main-card">
+                    <el-row class="cardTop">
+                        <el-col :span="12" class="mainCardBtn">
+                            <el-button type="primary" :icon="Plus" size="default" @click="openRiskUnitDialog('新增', {})">新增</el-button>
+                            <!--                            <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button>-->
+                        </el-col>
+<!--                        <el-button type="primary" :icon="Refresh" size="default" />-->
+                    </el-row>
+                    <el-table ref="multipleTableRef" :data="riskUnitState.riskUnitData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }">
+                        <el-table-column prop="riskCode" label="风险编码"/>
+                        <el-table-column prop="riskName" label="风险名称" />
+                        <el-table-column prop="riskSourceType" label="风险源风险类型">
+                            <template #default="scope">
+                                <span>{{`${riskUnitState.riskSourceList.find(item =>item.id === scope.row.riskSourceType)?.name || ''}`}}</span>
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="riskType" label="风险类型">
+                            <template #default="scope">
+                                <span>{{`${riskUnitState.riskList.find(item =>item.id === scope.row.riskType)?.name || ''}`}}</span>
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="evaluateStatus" label="是否评价" show-overflow-tooltip>
+                            <template #default="scope">
+                                <span>{{`${riskUnitState.evaluateStatusList.find(item =>item.id === scope.row.evaluateStatus)?.name}`}}</span>
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="createTime" label="创建时间" show-overflow-tooltip></el-table-column>
+                        <el-table-column prop="createByUserName" label="创建人" show-overflow-tooltip></el-table-column>
+                        <el-table-column prop="updateTime" label="最后修改时间" show-overflow-tooltip></el-table-column>
+                        <el-table-column prop="updateByUserName" label="最后修改人" show-overflow-tooltip></el-table-column>
+                        <el-table-column label="操作" width="150">
+                            <template #default="scope">
+                                <el-button size="small" text type="primary" :icon="Edit" @click="openRiskUnitDialog('修改', scope.row)" v-if="scope.row.riskType === 2">编辑</el-button>
+                                <el-button size="small" text type="danger" :icon="Delete" @click="onDelRiskUnit(scope.row)">删除</el-button>
+                            </template>
+                        </el-table-column>
+                    </el-table>
+                    <div class="pageBtn">
+                        <el-pagination @size-change="onHandleSizeChange" @current-change="onHandleCurrentChange" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="riskUnitState.searchQuery.pageIndex" background v-model:page-size="riskUnitState.searchQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="riskUnitState.total" class="page-position"> </el-pagination>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <risk-unit-dialog ref="riskUnitDialogRef" @refresh="getRiskUnitData"></risk-unit-dialog>
+    </div>
+</template>
+
+<script setup lang="ts">
+import {defineAsyncComponent, onMounted, reactive, ref} from "vue";
+import {riskUnitApi} from "/@/api/analyse/riskUnit";
+import {ElMessage, ElMessageBox} from "element-plus";
+import { Edit, View, Plus, Delete } from '@element-plus/icons-vue';
+import { unitApi } from "/@/api/basic/unit";
+import {personApi} from "/@/api/basic/person";
+import { projectApi } from "/@/api/experiment/project";
+
+const RiskUnitDialog = defineAsyncComponent(() => import('./components/riskUnitDialog.vue'));
+
+const riskUnitDialogRef = ref();
+
+const riskUnitState = reactive<RiskUnitStateType>({
+    riskUnitData: [],
+    searchQuery: {
+        pageIndex: 1,
+        pageSize: 10,
+        riskCode: '',
+        riskName: '',
+    },
+    total: 0,
+    riskList: [
+        {id: 1, name: '固有风险'},
+        {id:2, name: '实验风险'}
+    ],
+    evaluateStatusList: [
+        {id: 1, name: '未评价'},
+        {id:2, name: '已评价'}
+    ],
+    riskSourceList: [
+        {id:1, name: '区域、实验场所'},
+        {id:2, name: '设施设备'},
+        {id:3, name: '固定工艺节点'}
+    ],
+    basicUnitList: [],
+    allPersonList: [],
+    allExperimentList: [],
+})
+
+const getRiskUnitData = async () => {
+    let res = await riskUnitApi().getRiskUnitByList(riskUnitState.searchQuery);
+    if(res.data.code === 100){
+        riskUnitState.riskUnitData = res.data.data;
+        riskUnitState.total = res.data.total;
+    }else{
+        ElMessage({
+            type: 'warning',
+            message: res.data.msg
+        });
+    }
+};
+
+const getAllBasicUnitList = async () => {
+    let res = await unitApi().getAllUnit();
+    if(res.data.code === 100){
+        riskUnitState.basicUnitList = JSON.parse(JSON.stringify(res.data.data));
+    }else{
+        ElMessage({
+            type: 'warning',
+            message: res.data.msg
+        })
+    }
+};
+
+const getAllPersonList = async () => {
+    let res = await personApi().getAllPerson();
+    if(res.data.code === 100){
+        riskUnitState.allPersonList = JSON.parse(JSON.stringify(res.data.data));
+    }else{
+        ElMessage({
+            type: 'warning',
+            message: res.data.msg
+        })
+    }
+};
+
+const getAllExperimentList = async () => {
+    let res = await projectApi().getAllExperiment()
+    if(res.data.code === 100){
+        riskUnitState.allExperimentList = JSON.parse(JSON.stringify(res.data.data));
+    }else{
+        ElMessage({
+            type: 'warning',
+            message: res.data.msg
+        })
+    }
+};
+
+const openRiskUnitDialog = (title: string, value: RiskUnitType) => {
+    riskUnitDialogRef.value.showRiskUnitDialog(title, value, riskUnitState.basicUnitList, riskUnitState.allPersonList, riskUnitState.allExperimentList);
+};
+
+const onDelRiskUnit = (val: RiskUnitType) => {
+    ElMessageBox.confirm(`此操作将永久删除该风险单元:“${val.riskName}”,是否继续?`, '提示', {
+        confirmButtonText: '确认',
+        cancelButtonText: '取消',
+        type: 'warning'
+    })
+        .then(async () => {
+            let res = await riskUnitApi().deleteRiskUnitById({ id: val.id });
+            if (res.data.code === 100) {
+                ElMessage({
+                    type: 'success',
+                    duration: 2000,
+                    message: '删除成功'
+                });
+                await getRiskUnitData();
+            } else {
+                ElMessage({
+                    type: 'warning',
+                    message: res.data.msg
+                });
+            }
+        })
+        .catch((error) => {
+        });
+}
+
+const onHandleSizeChange = (val: number) => {
+    riskUnitState.searchQuery.pageSize = val;
+    getRiskUnitData();
+};
+
+const onHandleCurrentChange = (val: number) => {
+    riskUnitState.searchQuery.pageIndex = val;
+    getRiskUnitData();
+};
+
+const reset = () => {
+    riskUnitState.searchQuery = {
+        pageIndex: 1,
+        pageSize: 10,
+        riskCode: '',
+        riskName: '',
+    }
+};
+
+onMounted(() => {
+    getRiskUnitData();
+    getAllBasicUnitList();
+    getAllPersonList();
+    getAllExperimentList();
+})
+
+</script>
+
+<style scoped lang="scss">
+$homeNavLengh: 8;
+.home-container {
+    height: calc(100vh - 144px);
+    box-sizing: border-box;
+    overflow: hidden;
+    .homeCard {
+        width: 100%;
+        padding: 20px;
+        box-sizing: border-box;
+        background: #fff;
+        border-radius: 4px;
+
+        .main-card {
+            width: 100%;
+            height: 100%;
+            .cardTop {
+                display: flex;
+                align-items: center;
+                justify-content: space-between;
+                margin-bottom: 20px;
+                .mainCardBtn {
+                    margin: 0;
+                }
+            }
+            .pageBtn {
+                height: 60px;
+                display: flex;
+                align-items: center;
+                justify-content: right;
+
+                .demo-pagination-block + .demo-pagination-block {
+                    margin-top: 10px;
+                }
+                .demo-pagination-block .demonstration {
+                    margin-bottom: 16px;
+                }
+            }
+        }
+        &:last-of-type {
+            height: calc(100% - 100px);
+        }
+    }
+    .el-row {
+        display: flex;
+        align-items: center;
+        margin-bottom: 20px;
+        &:last-child {
+            margin-bottom: 0;
+        }
+        .grid-content {
+            align-items: center;
+            min-height: 36px;
+        }
+
+        .topInfo {
+            display: flex;
+            align-items: center;
+            font-size: 16px;
+            font-weight: bold;
+
+            & > div {
+                white-space: nowrap;
+                margin-right: 20px;
+            }
+        }
+    }
+}
+.stepItem {
+    width: 100%;
+    display: flex;
+    align-items: flex-start;
+    margin-bottom: 30px;
+    margin-left: 30px;
+    padding-bottom: 30px;
+    border-left: 2px solid #ccc;
+    &:first-of-type {
+        margin-top: 30px;
+    }
+    &:last-of-type {
+        margin-bottom: 0;
+        border-left: none;
+    }
+    .stepNum {
+        width: 30px;
+        height: 30px;
+        border-radius: 15px;
+        box-sizing: border-box;
+        color: #333;
+        border: 1px solid #999;
+        line-height: 28px;
+        text-align: center;
+        margin-right: 10px;
+        margin-left: -16px;
+        margin-top: -30px;
+    }
+    .stepCard {
+        width: 100%;
+        margin-top: -30px;
+
+        .box-card {
+            width: 100%;
+            &:deep(.el-card__header) {
+                padding: 10px 15px;
+            }
+            .card-header {
+                width: 100%;
+                display: flex;
+                justify-content: space-between;
+                align-items: center;
+                & > div:first-of-type {
+                    margin-right: 80px;
+                    font-size: 18px;
+                    font-weight: bold;
+                }
+            }
+        }
+    }
+    &:hover .card-header {
+        color: #0098f5;
+    }
+    &:hover .stepNum {
+        border: 2px solid #0098f5;
+        color: #0098f5;
+    }
+}
+
+:deep(.el-date-editor) {
+    width: 100%;
+}
+.el-select {
+    width: 100%;
+}
+:deep(.el-textarea.is-disabled .el-textarea__inner) {
+    background-color: var(--el-card-bg-color);
+    color: var(--el-input-text-color, var(--el-text-color-regular));
+}
+:deep(.el-input.is-disabled .el-input__inner) {
+    color: var(--el-input-text-color, var(--el-text-color-regular));
+}
+:deep(.el-input.is-disabled .el-input__wrapper) {
+    background-color: var(--el-card-bg-color);
+}
+</style>
diff --git a/src/views/basic/equipment/components/equipmentDialog.vue b/src/views/basic/equipment/components/equipmentDialog.vue
index d52c0ef..632f0b9 100644
--- a/src/views/basic/equipment/components/equipmentDialog.vue
+++ b/src/views/basic/equipment/components/equipmentDialog.vue
@@ -1,6 +1,6 @@
 <template>
     <div class="system-menu-dialog-container">
-        <el-dialog :title="equipmentDialogState.title" v-model="equipmentDialogState.equipmentDialogVisible" width="600px">
+        <el-dialog :title="equipmentDialogState.title" v-model="equipmentDialogState.equipmentDialogVisible" :close-on-click-modal="false" width="600px">
             <el-form ref="EquipmentFormRef" :rules="equipmentDialogState.equipmentFormRules" :model="equipmentDialogState.equipmentForm" size="default" label-width="120px">
                 <el-row :gutter="35">
                     <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
diff --git a/src/views/basic/equipment/index.vue b/src/views/basic/equipment/index.vue
index 0eb0e7a..b71888d 100644
--- a/src/views/basic/equipment/index.vue
+++ b/src/views/basic/equipment/index.vue
@@ -56,7 +56,7 @@
                         <el-table-column prop="updateByUserName" label="最后修改人" show-overflow-tooltip></el-table-column>
                         <el-table-column label="操作" width="150">
                             <template #default="scope">
-                                <el-button size="small" text type="primary" :icon="Edit" @click="openEquipmentDialog('修改', scope.row)">修改</el-button>
+                                <el-button size="small" text type="primary" :icon="Edit" @click="openEquipmentDialog('修改', scope.row)">编辑</el-button>
                                 <el-button size="small" text type="danger" :icon="Delete" @click="onDelEquipment(scope.row)">删除</el-button>
                             </template>
                         </el-table-column>
diff --git a/src/views/basic/material/components/materialDialog.vue b/src/views/basic/material/components/materialDialog.vue
index 559b711..4410290 100644
--- a/src/views/basic/material/components/materialDialog.vue
+++ b/src/views/basic/material/components/materialDialog.vue
@@ -1,6 +1,6 @@
 <template>
     <div class="system-menu-dialog-container">
-        <el-dialog :title="materialDialogState.title" v-model="materialDialogState.materialDialogVisible" width="600px">
+        <el-dialog :title="materialDialogState.title" v-model="materialDialogState.materialDialogVisible"  :close-on-click-modal="false" width="600px">
             <el-form ref="MaterialFormRef" :rules="materialDialogState.materialFormRules" :model="materialDialogState.materialForm" size="default" label-width="120px">
                 <el-row :gutter="35">
                     <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
diff --git a/src/views/basic/material/index.vue b/src/views/basic/material/index.vue
index 1ac05d1..7bde878 100644
--- a/src/views/basic/material/index.vue
+++ b/src/views/basic/material/index.vue
@@ -56,7 +56,7 @@
                         <el-table-column prop="updateByUserName" label="最后修改人" show-overflow-tooltip></el-table-column>
                         <el-table-column label="操作" width="150">
                             <template #default="scope">
-                                <el-button size="small" text type="primary" :icon="Edit" @click="openMaterialDialog('修改', scope.row)">修改</el-button>
+                                <el-button size="small" text type="primary" :icon="Edit" @click="openMaterialDialog('修改', scope.row)">编辑</el-button>
                                 <el-button size="small" text type="danger" :icon="Delete" @click="onDelMaterial(scope.row)">删除</el-button>
                             </template>
                         </el-table-column>
@@ -125,7 +125,7 @@
 };
 
 const onDelMaterial = (val: MaterialType) => {
-    ElMessageBox.confirm(`此操作将永久删除该设备:“${val.stuffName}”,是否继续?`, '提示', {
+    ElMessageBox.confirm(`此操作将永久删除该耗材:“${val.stuffName}”,是否继续?`, '提示', {
         confirmButtonText: '确认',
         cancelButtonText: '取消',
         type: 'warning'
diff --git a/src/views/basic/person/components/personDialog.vue b/src/views/basic/person/components/personDialog.vue
index 65e7a44..6817302 100644
--- a/src/views/basic/person/components/personDialog.vue
+++ b/src/views/basic/person/components/personDialog.vue
@@ -1,6 +1,6 @@
 <template>
     <div class="system-menu-dialog-container">
-        <el-dialog :title="personDialogState.title" v-model="personDialogState.personDialogVisible" width="600px">
+        <el-dialog :title="personDialogState.title" v-model="personDialogState.personDialogVisible" :close-on-click-modal="false" width="600px">
             <el-form ref="PersonFormRef" :rules="personDialogState.personFormRules" :model="personDialogState.personForm" size="default" label-width="120px">
                 <el-row :gutter="35">
                     <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
diff --git a/src/views/basic/person/index.vue b/src/views/basic/person/index.vue
index 0492573..479ebb6 100644
--- a/src/views/basic/person/index.vue
+++ b/src/views/basic/person/index.vue
@@ -55,7 +55,7 @@
                         <el-table-column prop="updateByUserName" label="最后修改人" show-overflow-tooltip></el-table-column>
                         <el-table-column label="操作" width="150">
                             <template #default="scope">
-                                <el-button size="small" text type="primary" :icon="Edit" @click="openPersonDialog('修改', scope.row)">修改</el-button>
+                                <el-button size="small" text type="primary" :icon="Edit" @click="openPersonDialog('修改', scope.row)">编辑</el-button>
                                 <el-button size="small" text type="danger" :icon="Delete" @click="onDelPerson(scope.row)">删除</el-button>
                             </template>
                         </el-table-column>
@@ -118,7 +118,7 @@
 };
 
 const onDelPerson = (val: PersonType) => {
-    ElMessageBox.confirm(`此操作将永久删除该设备:“${val.personName}”,是否继续?`, '提示', {
+    ElMessageBox.confirm(`此操作将永久删除该用户:“${val.personName}”,是否继续?`, '提示', {
         confirmButtonText: '确认',
         cancelButtonText: '取消',
         type: 'warning'
diff --git a/src/views/basic/room/components/roomDialog.vue b/src/views/basic/room/components/roomDialog.vue
index 51ccec4..ee58e6c 100644
--- a/src/views/basic/room/components/roomDialog.vue
+++ b/src/views/basic/room/components/roomDialog.vue
@@ -1,6 +1,6 @@
 <template>
     <div class="system-menu-dialog-container">
-        <el-dialog :title="roomDialogState.title" v-model="roomDialogState.roomDialogVisible" width="600px">
+        <el-dialog :title="roomDialogState.title" v-model="roomDialogState.roomDialogVisible" :close-on-click-modal="false" width="600px">
             <el-form ref="roomFormRef" :rules="roomDialogState.roomFormRules" :model="roomDialogState.roomForm" size="default" label-width="120px">
                 <el-row :gutter="35">
                     <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
@@ -46,10 +46,9 @@
         room: '',
     },
     roomFormRules: {
-        deviceCode: [{ required: true, message: '请填写设备编号', trigger: 'blur' }],
-        deviceName: [{ required: true, message: '请填写设备名称', trigger: 'blur' }],
-        devicePower: [{ required: true, message: '请填写设备功率', trigger: 'blur' }],
-        deviceUnit: [{ required: true, message: '请选择计量单位', trigger: 'change' }]
+        siteName: [{ required: true, message: '请填写实验室名称', trigger: 'blur' }],
+        floor: [{ required: true, message: '请填写楼名称', trigger: 'blur' }],
+        room: [{ required: true, message: '请填写房间', trigger: 'blur' }],
     },
     specialDeviceList: [],
     deviceUnitList: [
diff --git a/src/views/basic/room/index.vue b/src/views/basic/room/index.vue
index 0af9501..70e8a4c 100644
--- a/src/views/basic/room/index.vue
+++ b/src/views/basic/room/index.vue
@@ -41,7 +41,7 @@
                         <el-table-column prop="updateByUserName" label="最后修改人" show-overflow-tooltip></el-table-column>
                         <el-table-column label="操作" width="150">
                             <template #default="scope">
-                                <el-button size="small" text type="primary" :icon="Edit" @click="openRoomDialog('修改', scope.row)">修改</el-button>
+                                <el-button size="small" text type="primary" :icon="Edit" @click="openRoomDialog('修改', scope.row)">编辑</el-button>
                                 <el-button size="small" text type="danger" :icon="Delete" @click="onDelRoom(scope.row)">删除</el-button>
                             </template>
                         </el-table-column>
@@ -105,7 +105,7 @@
 };
 
 const onDelRoom = (val: RoomType) => {
-    ElMessageBox.confirm(`此操作将永久删除该设备:“${val.siteName}”,是否继续?`, '提示', {
+    ElMessageBox.confirm(`此操作将永久删除该场所:“${val.siteName}”,是否继续?`, '提示', {
         confirmButtonText: '确认',
         cancelButtonText: '取消',
         type: 'warning'
diff --git a/src/views/basic/unit/components/unitDialog.vue b/src/views/basic/unit/components/unitDialog.vue
index 00341fe..93a4dcd 100644
--- a/src/views/basic/unit/components/unitDialog.vue
+++ b/src/views/basic/unit/components/unitDialog.vue
@@ -1,40 +1,48 @@
 <template>
     <div class="system-menu-dialog-container">
-        <el-dialog :title="unitDialogState.title" v-model="unitDialogState.unitDialogVisible" width="600px">
+        <el-dialog :title="unitDialogState.title" v-model="unitDialogState.unitDialogVisible" :close-on-click-modal="false" width="600px">
             <el-form ref="UnitFormRef" :rules="unitDialogState.unitFormRules" :model="unitDialogState.unitForm" size="default" label-width="120px">
                 <el-row :gutter="35">
                     <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
-                        <el-form-item label="设备编号" prop="deviceCode">
-                            <el-input v-model="unitDialogState.unitForm.deviceCode" placeholder="设备编号" clearable class="input-length"></el-input>
+                        <el-form-item label="风险单元编号" prop="riskCode">
+                            <el-input v-model="unitDialogState.unitForm.riskCode" placeholder="风险单元编号" clearable class="input-length"></el-input>
                         </el-form-item>
                     </el-col>
                     <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
-                        <el-form-item label="设备名称" prop="deviceName">
-                            <el-input v-model="unitDialogState.unitForm.deviceName" placeholder="设备名称" clearable class="input-length"></el-input>
+                        <el-form-item label="风险单元名称" prop="riskName">
+                            <el-input v-model="unitDialogState.unitForm.riskName" placeholder="风险单元名称" clearable class="input-length"></el-input>
                         </el-form-item>
                     </el-col>
                     <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
-                        <el-form-item label="设备功率" prop="devicePower">
-                            <el-input v-model="unitDialogState.unitForm.devicePower" placeholder="设备功率" clearable class="input-length"></el-input>
-                        </el-form-item>
-                    </el-col>
-                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
-                        <el-form-item label="计量单位" prop="deviceUnit">
-                            <el-select v-model="unitDialogState.unitForm.deviceUnit" placeholder="计量单位" clearable class="input-length">
-                                <el-option v-for="item in unitDialogState.deviceUnitList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+                        <el-form-item label="风险源风险类型" prop="riskSourceType">
+                            <el-select v-model="unitDialogState.unitForm.riskSourceType" @change="unitDialogState.unitForm.riskSourceId = null" placeholder="风险源风险类型" clearable class="input-length">
+                                <el-option v-for="item in unitDialogState.riskSourceTypeList" :key="item.id" :label="item.name" :value="item.id"></el-option>
                             </el-select>
                         </el-form-item>
                     </el-col>
                     <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
-                        <el-form-item label="是否特种设备">
-                            <el-select v-model="unitDialogState.unitForm.specialDevice" placeholder="是否特种设备" clearable class="input-length">
-                                <el-option v-for="item in unitDialogState.specialDeviceList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+                        <el-form-item label="风险源" prop="riskSourceId">
+                            <el-select v-model="unitDialogState.unitForm.riskSourceId" placeholder="风险源" clearable class="input-length">
+                                <el-option v-if="unitDialogState.unitForm.riskSourceType === 2"  v-for="item in unitDialogState.allEquipmentList" :key="item.id" :label="item.deviceName" :value="item.id"></el-option>
+                                <el-option v-if="unitDialogState.unitForm.riskSourceType === 1" v-for="item in unitDialogState.allRoomList" :key="item.id" :label="item.room" :value="item.id"></el-option>
                             </el-select>
                         </el-form-item>
                     </el-col>
                     <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
-                        <el-form-item label="安全防护">
-                            <el-input type="textarea" :rows="3" v-model="unitDialogState.unitForm.safeProtect" placeholder="安全防护" clearable class="input-length"></el-input>
+                        <el-form-item label="负责人" prop="liabilityUserId">
+                            <el-select v-model="unitDialogState.unitForm.liabilityUserId" placeholder="负责人" clearable class="input-length">
+                                <el-option v-for="item in unitDialogState.allPersonList" :key="item.id" :label="item.personName" :value="item.id"></el-option>
+                            </el-select>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                        <el-form-item label="负责部门" prop="liabilityDep">
+                            <el-input v-model="unitDialogState.unitForm.liabilityDep" placeholder="负责部门" clearable class="input-length"></el-input>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                        <el-form-item label="风险单元描述">
+                            <el-input type="textarea" :rows="3" v-model="unitDialogState.unitForm.description" placeholder="风险单元描述" clearable class="input-length"></el-input>
                         </el-form-item>
                     </el-col>
                 </el-row>
@@ -60,18 +68,19 @@
     title: '',
     unitDialogVisible: false,
     unitForm: {
-        id: null,
-        deviceCode: '',
-        deviceName: '',
-        devicePower: '',
-        deviceUnit: null,
-        safeProtect: '',
+        riskCode: '',
+        riskName: '',
+        riskSourceId: null,
+        riskSourceType: null,
+        liabilityUserId: null,
+        liabilityDep: '',
+        description: '',
     },
     unitFormRules: {
-        deviceCode: [{ required: true, message: '请填写设备编号', trigger: 'blur' }],
-        deviceName: [{ required: true, message: '请填写设备名称', trigger: 'blur' }],
-        devicePower: [{ required: true, message: '请填写设备功率', trigger: 'blur' }],
-        deviceUnit: [{ required: true, message: '请选择计量单位', trigger: 'change' }]
+        riskCode: [{ required: true, message: '请填写风险单元编号', trigger: 'blur' }],
+        riskName: [{ required: true, message: '请填写风险单元名称', trigger: 'blur' }],
+        riskSourceId: [{ required: true, message: '请选择风险源风险类型', trigger: 'change' }],
+        riskSourceType: [{ required: true, message: '请选择风险源', trigger: 'change' }],
     },
     riskSourceTypeList: [
         {id: 1, name: '区域、实验场所'},
@@ -81,33 +90,42 @@
     evaluateStatusList: [
         {id: 1, name: '未评价'},
         {id:2, name: '已评价'},
-    ]
+    ],
+    allRoomList: [],
+    allEquipmentList: [],
+    allPersonList: [],
 })
 
-const showUnitDialog = (title: string, value: UnitType) => {
+const showUnitDialog = (title: string, value: UnitType, allEquipmentList: AllEquipmentListType [], allRoomList: RoomType [], allPersonList: AllPersonListType []) => {
     unitDialogState.unitDialogVisible = true;
+    unitDialogState.allRoomList = allRoomList
+    unitDialogState.allEquipmentList = allEquipmentList
+    unitDialogState.allPersonList = allPersonList
     setTimeout(() => {
         UnitFormRef.value.clearValidate();
     });
     if(title === '新增'){
         unitDialogState.title = '新增';
         unitDialogState.unitForm = {
-            id: null,
-            deviceCode: '',
-            deviceName: '',
-            devicePower: '',
-            deviceUnit: null,
-            safeProtect: '',
+            riskCode: '',
+            riskName: '',
+            riskSourceId: null,
+            riskSourceType: null,
+            liabilityUserId: null,
+            liabilityDep: '',
+            description: '',
         };
     }else{
         unitDialogState.title = '编辑'
         unitDialogState.unitForm = {
             id: value.id,
-            deviceCode: value.deviceCode,
-            deviceName: value.deviceName,
-            devicePower: value.devicePower,
-            deviceUnit: value.deviceUnit,
-            safeProtect: value.safeProtect,
+            riskCode: value.riskCode,
+            riskName: value.riskName,
+            riskSourceId: value.riskSourceId,
+            riskSourceType: value.riskSourceType,
+            liabilityUserId: value.liabilityUserId,
+            liabilityDep: value.liabilityDep,
+            description: value.description,
         };
     }
 };
diff --git a/src/views/basic/unit/index.ts b/src/views/basic/unit/index.ts
index ae9436d..f2eead4 100644
--- a/src/views/basic/unit/index.ts
+++ b/src/views/basic/unit/index.ts
@@ -10,15 +10,20 @@
 	total: number
 	riskSourceTypeList: Array<Type>,
 	evaluateStatusList: Array<Type>,
+	allRoomList: Array<RoomType>,
+	allEquipmentList: Array<AllEquipmentListType>,
+	allPersonList: Array<AllPersonListType>,
 }
 
 declare interface UnitType {
-	id: number | null,
-	deviceCode: string,
-	deviceName: string,
-	devicePower: string,
-	deviceUnit: number | null,
-	safeProtect: string,
+	id?: number | null,
+	riskCode: string,
+	riskName: string,
+	riskSourceId: number | null,
+	riskSourceType: number | null,
+	liabilityUserId: number | null,
+	liabilityDep: string,
+	description: string,
 }
 
 declare interface Type {
@@ -30,16 +35,21 @@
 	title: string,
 	unitDialogVisible: boolean,
 	unitForm: {
-		id: number | null,
-		deviceCode: string,
-		deviceName: string,
-		devicePower: string,
-		deviceUnit: number | null,
-		safeProtect: string,
+		id?: number | null,
+		riskCode: string,
+		riskName: string,
+		riskSourceId: number | null,
+		riskSourceType: number | null,
+		liabilityUserId: number | null,
+		liabilityDep: string,
+		description: string,
 	},
 	unitFormRules: {
 
 	},
 	riskSourceTypeList: Array<Type>,
 	evaluateStatusList: Array<Type>,
+	allRoomList: Array<RoomType>,
+	allEquipmentList: Array<AllEquipmentListType>,
+	allPersonList: Array<AllPersonListType>,
 }
diff --git a/src/views/basic/unit/index.vue b/src/views/basic/unit/index.vue
index c7788af..3ae75ed 100644
--- a/src/views/basic/unit/index.vue
+++ b/src/views/basic/unit/index.vue
@@ -27,7 +27,7 @@
                 <div class="main-card">
                     <el-row class="cardTop">
                         <el-col :span="12" class="mainCardBtn">
-                            <el-button type="primary" :icon="Plus" size="default" @click="openunitDialog('新增', {})">新增</el-button>
+                            <el-button type="primary" :icon="Plus" size="default" @click="openUnitDialog('新增', {})">新增</el-button>
                             <!--                            <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button>-->
                         </el-col>
 <!--                        <el-button type="primary" :icon="Refresh" size="default" />-->
@@ -53,7 +53,7 @@
                         <el-table-column prop="updateByUserName" label="最后修改人" show-overflow-tooltip></el-table-column>
                         <el-table-column label="操作" width="150">
                             <template #default="scope">
-                                <el-button size="small" text type="primary" :icon="Edit" @click="openUnitDialog('修改', scope.row)">修改</el-button>
+                                <el-button size="small" text type="primary" :icon="Edit" @click="openUnitDialog('修改', scope.row)">编辑</el-button>
                                 <el-button size="small" text type="danger" :icon="Delete" @click="onDelUnit(scope.row)">删除</el-button>
                             </template>
                         </el-table-column>
@@ -73,6 +73,9 @@
 import {unitApi} from "/@/api/basic/unit";
 import {ElMessage, ElMessageBox} from "element-plus";
 import { Edit, View, Plus, Delete } from '@element-plus/icons-vue';
+import {roomApi} from "/@/api/basic/room";
+import {equipmentApi} from "/@/api/basic/equipement";
+import {personApi} from "/@/api/basic/person";
 
 const UnitDialog = defineAsyncComponent(() => import('./components/unitDialog.vue'));
 
@@ -96,7 +99,10 @@
     evaluateStatusList: [
         {id: 1, name: '未评价'},
         {id:2, name: '已评价'},
-    ]
+    ],
+    allRoomList: [],
+    allEquipmentList: [],
+    allPersonList: [],
 })
 
 const getUnitData = async () => {
@@ -111,12 +117,48 @@
     }
 };
 
+const getRoomData = async () => {
+    let res = await roomApi().getAllRoom();
+    if(res.data.code === 100){
+        unitState.allRoomList = JSON.parse(JSON.stringify(res.data.data));
+    }else{
+        ElMessage({
+            type: 'warning',
+            message: res.data.msg
+        });
+    }
+};
+
+const getAllEquipmentList = async () => {
+    let res = await equipmentApi().getAllEquipment();
+    if(res.data.code === 100){
+        unitState.allEquipmentList = JSON.parse(JSON.stringify(res.data.data));
+    }else{
+        ElMessage({
+            type: 'warning',
+            message: res.data.msg
+        })
+    }
+};
+
+const getAllPersonList = async () => {
+    let res = await personApi().getAllPerson();
+    if(res.data.code === 100){
+        unitState.allPersonList = JSON.parse(JSON.stringify(res.data.data));
+    }else{
+        ElMessage({
+            type: 'warning',
+            message: res.data.msg
+        })
+    }
+};
+
 const openUnitDialog = (title: string, value: UnitType) => {
-    unitDialogRef.value.showUnitDialog(title, value);
+    unitDialogRef.value.showUnitDialog(title, value, unitState.allEquipmentList, unitState.allRoomList, unitState.allPersonList);
 };
 
 const onDelUnit = (val: UnitType) => {
-    ElMessageBox.confirm(`此操作将永久删除该设备:“${val.deviceName}”,是否继续?`, '提示', {
+    ElMessageBox.confirm(`此操作将永久删除该单元:“${val.riskName}”,是否继续?`, '提示', {
         confirmButtonText: '确认',
         cancelButtonText: '取消',
         type: 'warning'
@@ -162,7 +204,10 @@
 };
 
 onMounted(() => {
-    getUnitData()
+    getUnitData();
+    getRoomData();
+    getAllEquipmentList();
+    getAllPersonList();
 })
 
 </script>
diff --git a/src/views/experiment/developing/index.ts b/src/views/experiment/developing/index.ts
deleted file mode 100644
index c06feb7..0000000
--- a/src/views/experiment/developing/index.ts
+++ /dev/null
@@ -1,150 +0,0 @@
-declare interface ProjectStateType {
-	projectData: Array<ProjectType>
-	searchQuery: {
-		pageIndex: number,
-		pageSize: number,
-		searchParams: {
-			experimentName: string,
-			experimentType: null | number,
-		}
-	},
-	total: 0,
-	experimentTypeList: Type []
-	allRoomList: RoomType []
-}
-
-declare interface ProjectType {
-	id?: number | null,
-	experimentCode: string,
-}
-
-declare interface Type {
-	id: number,
-	name: string,
-}
-
-declare interface ProjectDialogType {
-	title: string,
-	disabled: boolean,
-	projectDialogVisible: boolean,
-	projectForm: {
-		id: null | number,
-		experimentName: string,
-		experimentType: null | number,
-		liabilityUserId: null | number,
-		safeLiabilityUserId: null | number,
-		dep: string,
-		siteId: null | number,
-		experimentStep: string,
-		experimentMethod: string,
-		process: string,
-		keyProcess: string,
-		timeout: null | number,
-		timeoutManager: string,
-		closed: null | number,
-		unclosedManager: string,
-		explosionProof: string,
-		fireProof: string,
-		poisonProof: string,
-		hazardousWaste: null | number,
-		safeManagerMethod: string,
-		emergencyPlan: string,
-		emergencyDrill: string,
-		emergencyPlanName: string,
-		emergencyDrillStatus: string,
-		partitionCondition: string,
-		note: string,
-		expectStartTime: null | number,
-		persons: SelectPersonType [],
-		deviceList: SelectEquipmentType [],
-		stuffList: SelectMaterialType [],
-		hazardousWasteList: SelectDangerType []
-	},
-	projectFormRules: {
-
-	},
-	allPersonList: Array<AllPersonListType>
-	allRoomList: Array<RoomType>
-}
-
-declare interface SelectDangerType {
-	disabled: boolean
-	wasteList: Array<WasteType>
-	classifyList: Array<Type>
-	wasteStorageList: Array<Type>
-}
-
-declare interface WasteType {
-	classify: null | number,
-	wasteStorage: null | number,
-	handAmount: null | number,
-}
-
-
-declare interface SelectPersonType {
-	disabled: boolean
-	personList: Array<AllPersonListType>
-	allPersonList: Array<AllPersonListType>
-}
-
-declare interface AllPersonListType {
-	id: null | number,
-	personId?: null | number,
-	personName: null,
-	personAge: null,
-	personGender:'',
-	personMajor:'',
-	depName:'',
-	phone:'',
-	aptitude:'',
-	training:''
-}
-
-declare interface SelectEquipmentType {
-	disabled: boolean
-	equipmentList: Array<AllEquipmentListType>,
-	allEquipmentList: Array<AllEquipmentListType>,
-}
-
-declare interface AllEquipmentListType {
-	id?: null | number,
-	deviceId?: null | number,
-	deviceUseCount: null | number,
-	deviceCode: string,
-	deviceName: string,
-	devicePower: string,
-	specialDevice: string,
-}
-
-
-declare interface SelectMaterialType {
-	disabled: boolean
-	materialList: Array<AllMaterialListType>,
-	allMaterialList: Array<AllMaterialListType>,
-}
-
-declare interface AllMaterialListType {
-	id?: null | number,
-	stuffId?: null | number,
-	stuffUseCount: null | number,
-	stuffName: string,
-	stuffCode:string,
-	stuffType: string,
-	stuffStorage: string,
-	stuffUnit: string
-}
-
-
-declare interface ApplyStartDialogType {
-	title: string,
-	applyStartDialogVisible: boolean,
-	applyStartForm: {
-		id: number | null,
-		sisStatus: number | null,
-		safeInformationSystem: string,
-		startTime: string,
-	},
-	applyStartFormRules: {
-
-	},
-}
diff --git a/src/views/experiment/project/index.ts b/src/views/experiment/project/index.ts
index c06feb7..c27e2db 100644
--- a/src/views/experiment/project/index.ts
+++ b/src/views/experiment/project/index.ts
@@ -16,8 +16,10 @@
 declare interface ProjectType {
 	id?: number | null,
 	experimentCode: string,
+	experimentName: string,
 }
 
+
 declare interface Type {
 	id: number,
 	name: string,
diff --git a/src/views/experiment/project/index.vue b/src/views/experiment/project/index.vue
index 9c6c50c..b860688 100644
--- a/src/views/experiment/project/index.vue
+++ b/src/views/experiment/project/index.vue
@@ -29,6 +29,7 @@
                     </el-row>
                     <el-table ref="multipleTableRef" :data="projectState.projectData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }">
                         <el-table-column prop="experimentCode" label="实验编号"/>
+                        <el-table-column prop="experimentName" label="实验名称"/>
                         <el-table-column prop="expectStartTime" label="立项时间" />
                         <el-table-column prop="liabilityUser" label="负责人"/>
                         <el-table-column prop="createTime" label="创建时间" show-overflow-tooltip></el-table-column>
@@ -39,7 +40,8 @@
                             <template #default="scope">
                                 <el-button size="small" text type="primary" :icon="View" @click="openProjectDialog('查看', scope.row)">查看</el-button>
                                 <el-button size="small" text type="primary" :icon="Edit" @click="applyStart('申请开展', scope.row)">申请开展</el-button>
-                                <el-button size="small" text type="danger" :icon="Delete" @click="onDelProject(scope.row)">删除</el-button>                            </template>
+                                <el-button size="small" text type="danger" :icon="Delete" @click="onDelProject(scope.row)">删除</el-button>
+                            </template>
                         </el-table-column>
                     </el-table>
                     <div class="pageBtn">
diff --git a/src/views/loginPage/component/accountLogin.vue b/src/views/loginPage/component/accountLogin.vue
index 7726cac..d0ef617 100644
--- a/src/views/loginPage/component/accountLogin.vue
+++ b/src/views/loginPage/component/accountLogin.vue
@@ -84,7 +84,7 @@
 import { useLoginApi } from '/@/api/login';
 import { useUserInfo } from '/@/stores/userInfo';
 import type { FormInstance, FormRules } from 'element-plus'
-import {workApplyApi} from "/@/api/specialWorkSystem/workApply";
+
 import {verifyPhone,verifyIdCard} from "/@/utils/toolsValidate"
 import { Base64 } from 'js-base64'
 export default defineComponent({
diff --git a/src/views/system/appVersion/index.vue b/src/views/system/appVersion/index.vue
index 656c2d7..df09904 100644
--- a/src/views/system/appVersion/index.vue
+++ b/src/views/system/appVersion/index.vue
@@ -1,698 +1,698 @@
-<template>
-    <div class="home-container">
-        <div style="height: 100%">
-            <el-row class="homeCard">
-                <el-col :span="5" style="display:flex;align-items: center">
-                    <span style="white-space: nowrap">app类型:</span>
-                    <div class="grid-content topInfo">
-                        <el-select v-model="searchType">
-                            <el-option
-                                    v-for="item in appTypeList"
-                                    :key="item.id"
-                                    :label="item.name"
-                                    :value="item.id"
-                            />
-                        </el-select>
-                    </div>
-                </el-col>
-                <el-col :span="5" style="display:flex;align-items: center">
-                    <span style="white-space: nowrap">版本号:</span>
-                    <div class="grid-content topInfo">
-                        <el-input v-model="searchVersion"/>
-                    </div>
-                </el-col>
-                <el-col :span="5" style="display:flex;align-items: center">
-                    <span style="white-space: nowrap">APP名称:</span>
-                    <div class="grid-content topInfo">
-                        <el-input v-model="searchName"/>
-                    </div>
-                </el-col>
-                <el-button type="primary" @click="searchRecord">查询</el-button>
-                <el-button plain @click="clearSearch">重置</el-button>
-            </el-row>
-            <div class="homeCard">
-                <div class="main-card">
-                    <el-row class="cardTop">
-                        <el-col :span="12" class="mainCardBtn">
-                            <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord = true">新增</el-button>
-                        </el-col>
-                        <el-button type="primary" :icon="Refresh" size="default" @click="reLoadData()" />
-                    </el-row>
-                    <el-table ref="multipleTableRef" :data="tableData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }" @selection-change="handleSelectionChange">
-<!--                        <el-table-column type="selection" width="100" />-->
-                        <el-table-column type="index" label="排序" width="80" align="center"/>
-                        <el-table-column property="appTypeDesc" label="文件类型" align="center" :show-overflow-tooltip="true"/>
-                        <el-table-column property="name" label="app名称" align="center" :show-overflow-tooltip="true"/>
-                        <el-table-column property="objectUrl" label="文件链接" align="center" :show-overflow-tooltip="true"/>
-                        <el-table-column property="customVersion" label="版本号" align="center">
-                            <template #default="scope">
-                                <el-tag>{{ scope.row.customVersion }}</el-tag>
-                            </template>
-                        </el-table-column>
-                        <el-table-column property="info" label="备注" align="center" :show-overflow-tooltip="true"/>
-                        <el-table-column property="gmtCreate" label="创建时间" align="center"/>
-                        <el-table-column property="gmtModified" label="更新时间" align="center"/>
-                        <el-table-column fixed="right" label="操作" align="center" width="250">
-                            <template #default="scope">
-                                <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button>
-                                <el-button link type="primary" size="small" :icon="Edit" @click="editRecordBtn(scope.$index, scope.row)">修改</el-button>
-                                <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecordBtn(scope.row)">删除</el-button>
-                            </template>
-                        </el-table-column>
-                    </el-table>
-                    <div class="pageBtn">
-                        <el-pagination v-model:currentPage="pageIndex" v-model:page-size="pageSize" :page-sizes="[10, 15]" small="false" background layout="total, sizes, prev, pager, next, jumper" :total="totalSize" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
-                    </div>
-                </div>
-            </div>
-        </div>
-        <el-dialog v-model="dialogDetails" title="APP版本信息">
-            <el-form :model="details" label-width="120px">
-                <el-form-item label="类型">
-                    <el-input v-model="details.appTypeDesc" readonly />
-                </el-form-item>
-                <el-form-item label="app名称">
-                    <el-input v-model="details.name" readonly/>
-                </el-form-item>
-                <el-form-item label="文件链接">
-                    <el-input v-model="details.objectUrl" type="textarea" autosize readonly />
-                </el-form-item>
-                <el-form-item label="版本号">
-                    <el-input v-model="details.customVersion" type="textarea" readonly />
-                </el-form-item>
-                <el-form-item label="备注">
-                    <el-input v-model="details.info" type="textarea" readonly />
-                </el-form-item>
-                <el-form-item label="创建时间">
-                    <el-input v-model="details.gmtCreate" readonly />
-                </el-form-item>
-                <el-form-item label="更新时间">
-                    <el-input v-model="details.gmtModified" readonly />
-                </el-form-item>
-                <el-form-item>
-                    <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button>
-                </el-form-item>
-            </el-form>
-        </el-dialog>
-        <el-dialog v-model="dialogAddRecord" title="APP版本信息编辑" @close="closeAdd" @open="openAdd">
-            <el-form :model="addRecord" label-width="150px" ref="addRef" :rules="addRules">
-                <el-form-item label="类型" prop="appType">
-                    <el-select v-model="addRecord.appType">
-                        <el-option
-                                v-for="item in appTypeList"
-                                :key="item.id"
-                                :label="item.name"
-                                :value="item.id"
-                        />
-                    </el-select>
-                </el-form-item>
-                <el-form-item label="app名称" prop="name">
-                    <el-input v-model="addRecord.name"/>
-                </el-form-item>
-                <el-form-item v-if="chosenIndex == null" label="上传文件" prop="objectName">
-                    <el-upload :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='fileLimit' v-model:file-list="fileList" :http-request="upload" :action="uploadUrl" :on-remove="handleRemove" :before-remove="beforeRemove" :before-upload="getUploadUrl">
-                        <el-button type="primary" plain>选择文件</el-button>
-                        <template #tip>
-                            <div class="el-upload__tip">上传APP源文件</div>
-                        </template>
-                    </el-upload>
-                </el-form-item>
-                <el-form-item v-else label="上传文件">
-                    <el-upload :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='fileLimit' v-model:file-list="fileList" :http-request="upload" :action="uploadUrl" :on-remove="handleRemove" :before-remove="beforeRemove" :before-upload="getUploadUrl">
-                        <el-button type="primary" plain>选择文件</el-button>
-                        <template #tip>
-                            <div class="el-upload__tip">上传新版APP源文件(不上传则默认使用原版本)</div>
-                        </template>
-                    </el-upload>
-                </el-form-item>
-                <el-form-item label="自定义版本号" prop="customVersion">
-                    <el-input v-model="addRecord.customVersion"> </el-input>
-                </el-form-item>
-                <el-form-item label="备注" prop="info">
-                    <el-input v-model="addRecord.info" type="textarea" :rows="2" autosize> </el-input>
-                </el-form-item>
-                <el-form-item>
-                    <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button>
-                    <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button>
-                </el-form-item>
-            </el-form>
-        </el-dialog>
-        <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear">
-            <span>您确定要删除该条记录吗?</span>
-            <template #footer>
-                <span class="dialog-footer">
-                    <el-button @click="deleteDialog = false" size="default">取消</el-button>
-                    <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button>
-                </span>
-            </template>
-        </el-dialog>
-<!--        <el-dialog v-model="deleteSetDialog" title="提示" width="30%" center>-->
-<!--            <span>您确定要删除这些记录吗?</span>-->
+<!--<template>-->
+<!--    <div class="home-container">-->
+<!--        <div style="height: 100%">-->
+<!--            <el-row class="homeCard">-->
+<!--                <el-col :span="5" style="display:flex;align-items: center">-->
+<!--                    <span style="white-space: nowrap">app类型:</span>-->
+<!--                    <div class="grid-content topInfo">-->
+<!--                        <el-select v-model="searchType">-->
+<!--                            <el-option-->
+<!--                                    v-for="item in appTypeList"-->
+<!--                                    :key="item.id"-->
+<!--                                    :label="item.name"-->
+<!--                                    :value="item.id"-->
+<!--                            />-->
+<!--                        </el-select>-->
+<!--                    </div>-->
+<!--                </el-col>-->
+<!--                <el-col :span="5" style="display:flex;align-items: center">-->
+<!--                    <span style="white-space: nowrap">版本号:</span>-->
+<!--                    <div class="grid-content topInfo">-->
+<!--                        <el-input v-model="searchVersion"/>-->
+<!--                    </div>-->
+<!--                </el-col>-->
+<!--                <el-col :span="5" style="display:flex;align-items: center">-->
+<!--                    <span style="white-space: nowrap">APP名称:</span>-->
+<!--                    <div class="grid-content topInfo">-->
+<!--                        <el-input v-model="searchName"/>-->
+<!--                    </div>-->
+<!--                </el-col>-->
+<!--                <el-button type="primary" @click="searchRecord">查询</el-button>-->
+<!--                <el-button plain @click="clearSearch">重置</el-button>-->
+<!--            </el-row>-->
+<!--            <div class="homeCard">-->
+<!--                <div class="main-card">-->
+<!--                    <el-row class="cardTop">-->
+<!--                        <el-col :span="12" class="mainCardBtn">-->
+<!--                            <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord = true">新增</el-button>-->
+<!--                        </el-col>-->
+<!--                        <el-button type="primary" :icon="Refresh" size="default" @click="reLoadData()" />-->
+<!--                    </el-row>-->
+<!--                    <el-table ref="multipleTableRef" :data="tableData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }" @selection-change="handleSelectionChange">-->
+<!--&lt;!&ndash;                        <el-table-column type="selection" width="100" />&ndash;&gt;-->
+<!--                        <el-table-column type="index" label="排序" width="80" align="center"/>-->
+<!--                        <el-table-column property="appTypeDesc" label="文件类型" align="center" :show-overflow-tooltip="true"/>-->
+<!--                        <el-table-column property="name" label="app名称" align="center" :show-overflow-tooltip="true"/>-->
+<!--                        <el-table-column property="objectUrl" label="文件链接" align="center" :show-overflow-tooltip="true"/>-->
+<!--                        <el-table-column property="customVersion" label="版本号" align="center">-->
+<!--                            <template #default="scope">-->
+<!--                                <el-tag>{{ scope.row.customVersion }}</el-tag>-->
+<!--                            </template>-->
+<!--                        </el-table-column>-->
+<!--                        <el-table-column property="info" label="备注" align="center" :show-overflow-tooltip="true"/>-->
+<!--                        <el-table-column property="gmtCreate" label="创建时间" align="center"/>-->
+<!--                        <el-table-column property="gmtModified" label="更新时间" align="center"/>-->
+<!--                        <el-table-column fixed="right" label="操作" align="center" width="250">-->
+<!--                            <template #default="scope">-->
+<!--                                <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button>-->
+<!--                                <el-button link type="primary" size="small" :icon="Edit" @click="editRecordBtn(scope.$index, scope.row)">修改</el-button>-->
+<!--                                <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecordBtn(scope.row)">删除</el-button>-->
+<!--                            </template>-->
+<!--                        </el-table-column>-->
+<!--                    </el-table>-->
+<!--                    <div class="pageBtn">-->
+<!--                        <el-pagination v-model:currentPage="pageIndex" v-model:page-size="pageSize" :page-sizes="[10, 15]" small="false" background layout="total, sizes, prev, pager, next, jumper" :total="totalSize" @size-change="handleSizeChange" @current-change="handleCurrentChange" />-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--            </div>-->
+<!--        </div>-->
+<!--        <el-dialog v-model="dialogDetails" title="APP版本信息">-->
+<!--            <el-form :model="details" label-width="120px">-->
+<!--                <el-form-item label="类型">-->
+<!--                    <el-input v-model="details.appTypeDesc" readonly />-->
+<!--                </el-form-item>-->
+<!--                <el-form-item label="app名称">-->
+<!--                    <el-input v-model="details.name" readonly/>-->
+<!--                </el-form-item>-->
+<!--                <el-form-item label="文件链接">-->
+<!--                    <el-input v-model="details.objectUrl" type="textarea" autosize readonly />-->
+<!--                </el-form-item>-->
+<!--                <el-form-item label="版本号">-->
+<!--                    <el-input v-model="details.customVersion" type="textarea" readonly />-->
+<!--                </el-form-item>-->
+<!--                <el-form-item label="备注">-->
+<!--                    <el-input v-model="details.info" type="textarea" readonly />-->
+<!--                </el-form-item>-->
+<!--                <el-form-item label="创建时间">-->
+<!--                    <el-input v-model="details.gmtCreate" readonly />-->
+<!--                </el-form-item>-->
+<!--                <el-form-item label="更新时间">-->
+<!--                    <el-input v-model="details.gmtModified" readonly />-->
+<!--                </el-form-item>-->
+<!--                <el-form-item>-->
+<!--                    <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button>-->
+<!--                </el-form-item>-->
+<!--            </el-form>-->
+<!--        </el-dialog>-->
+<!--        <el-dialog v-model="dialogAddRecord" title="APP版本信息编辑" @close="closeAdd" @open="openAdd">-->
+<!--            <el-form :model="addRecord" label-width="150px" ref="addRef" :rules="addRules">-->
+<!--                <el-form-item label="类型" prop="appType">-->
+<!--                    <el-select v-model="addRecord.appType">-->
+<!--                        <el-option-->
+<!--                                v-for="item in appTypeList"-->
+<!--                                :key="item.id"-->
+<!--                                :label="item.name"-->
+<!--                                :value="item.id"-->
+<!--                        />-->
+<!--                    </el-select>-->
+<!--                </el-form-item>-->
+<!--                <el-form-item label="app名称" prop="name">-->
+<!--                    <el-input v-model="addRecord.name"/>-->
+<!--                </el-form-item>-->
+<!--                <el-form-item v-if="chosenIndex == null" label="上传文件" prop="objectName">-->
+<!--                    <el-upload :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='fileLimit' v-model:file-list="fileList" :http-request="upload" :action="uploadUrl" :on-remove="handleRemove" :before-remove="beforeRemove" :before-upload="getUploadUrl">-->
+<!--                        <el-button type="primary" plain>选择文件</el-button>-->
+<!--                        <template #tip>-->
+<!--                            <div class="el-upload__tip">上传APP源文件</div>-->
+<!--                        </template>-->
+<!--                    </el-upload>-->
+<!--                </el-form-item>-->
+<!--                <el-form-item v-else label="上传文件">-->
+<!--                    <el-upload :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='fileLimit' v-model:file-list="fileList" :http-request="upload" :action="uploadUrl" :on-remove="handleRemove" :before-remove="beforeRemove" :before-upload="getUploadUrl">-->
+<!--                        <el-button type="primary" plain>选择文件</el-button>-->
+<!--                        <template #tip>-->
+<!--                            <div class="el-upload__tip">上传新版APP源文件(不上传则默认使用原版本)</div>-->
+<!--                        </template>-->
+<!--                    </el-upload>-->
+<!--                </el-form-item>-->
+<!--                <el-form-item label="自定义版本号" prop="customVersion">-->
+<!--                    <el-input v-model="addRecord.customVersion"> </el-input>-->
+<!--                </el-form-item>-->
+<!--                <el-form-item label="备注" prop="info">-->
+<!--                    <el-input v-model="addRecord.info" type="textarea" :rows="2" autosize> </el-input>-->
+<!--                </el-form-item>-->
+<!--                <el-form-item>-->
+<!--                    <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button>-->
+<!--                    <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button>-->
+<!--                </el-form-item>-->
+<!--            </el-form>-->
+<!--        </el-dialog>-->
+<!--        <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear">-->
+<!--            <span>您确定要删除该条记录吗?</span>-->
 <!--            <template #footer>-->
 <!--                <span class="dialog-footer">-->
-<!--                    <el-button @click="deleteSetDialog = false" size="default">取消</el-button>-->
-<!--                    <el-button type="primary" @click="conFirmDeleteBatch" size="default">确认</el-button>-->
+<!--                    <el-button @click="deleteDialog = false" size="default">取消</el-button>-->
+<!--                    <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button>-->
 <!--                </span>-->
 <!--            </template>-->
 <!--        </el-dialog>-->
-    </div>
-</template>
+<!--&lt;!&ndash;        <el-dialog v-model="deleteSetDialog" title="提示" width="30%" center>&ndash;&gt;-->
+<!--&lt;!&ndash;            <span>您确定要删除这些记录吗?</span>&ndash;&gt;-->
+<!--&lt;!&ndash;            <template #footer>&ndash;&gt;-->
+<!--&lt;!&ndash;                <span class="dialog-footer">&ndash;&gt;-->
+<!--&lt;!&ndash;                    <el-button @click="deleteSetDialog = false" size="default">取消</el-button>&ndash;&gt;-->
+<!--&lt;!&ndash;                    <el-button type="primary" @click="conFirmDeleteBatch" size="default">确认</el-button>&ndash;&gt;-->
+<!--&lt;!&ndash;                </span>&ndash;&gt;-->
+<!--&lt;!&ndash;            </template>&ndash;&gt;-->
+<!--&lt;!&ndash;        </el-dialog>&ndash;&gt;-->
+<!--    </div>-->
+<!--</template>-->
 
-<script lang="ts">
-import { toRefs, reactive, ref, onMounted } from 'vue';
-import { storeToRefs } from 'pinia';
-import { initBackEndControlRoutes } from '/@/router/backEnd';
-import { useUserInfo } from '/@/stores/userInfo';
-import { Session } from '/@/utils/storage';
-import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue';
-import { ElMessage, ElMessageBox } from 'element-plus';
-import type { FormInstance, FormRules, UploadProps, UploadUserFile } from 'element-plus'
-import { appVersionApi } from '/@/api/systemManage/appVersion';
-import {workApplyApi} from "/@/api/specialWorkSystem/workApply";
-import axios from "axios";
+<!--<script lang="ts">-->
+<!--import { toRefs, reactive, ref, onMounted } from 'vue';-->
+<!--import { storeToRefs } from 'pinia';-->
+<!--import { initBackEndControlRoutes } from '/@/router/backEnd';-->
+<!--import { useUserInfo } from '/@/stores/userInfo';-->
+<!--import { Session } from '/@/utils/storage';-->
+<!--import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue';-->
+<!--import { ElMessage, ElMessageBox } from 'element-plus';-->
+<!--import type { FormInstance, FormRules, UploadProps, UploadUserFile } from 'element-plus'-->
+<!--import { appVersionApi } from '/@/api/systemManage/appVersion';-->
+<!--import {workApplyApi} from "/@/api/specialWorkSystem/workApply";-->
+<!--import axios from "axios";-->
 
-// 定义接口来定义对象的类型
-interface stateType {
-    tableData: Array<any>;
-    multipleSelection: Array<any>;
-    deleteArr: Array<any>;
-    dialogDetails: boolean;
-    dialogAddRecord: boolean;
-    deleteDialog: boolean;
-    deleteSetDialog: boolean;
-    pageIndex: number;
-    pageSize: number;
-    chosenIndex: null | number;
-    deleteId: null | number;
-    searchType: number;
-    appTypeList: Array<any>;
-    searchVersion: string;
-    searchName: string;
-    totalSize: number;
-    addRecord: {};
-    details: {};
-    fileLimit: number;
-    uploadUrl: string;
-    fileList: Array<file>
-}
-interface file {
-    url: string;
-}
-export default {
-    name: 'appVersion',
-    components: {},
-    setup() {
-        const userInfo = useUserInfo();
-        const { userInfos } = storeToRefs(userInfo);
-        const state = reactive<stateType>({
-            pageIndex: 1,
-            pageSize: 10,
-            totalSize: 0,
-            chosenIndex: null,
-            searchType: 1,
-            appTypeList: [
-                {
-                    name: '国泰app',
-                    id: 1
-                },
-                {
-                    name: '其他',
-                    id: 0
-                }
-            ],
-            searchVersion: '',
-            searchName: '',
-            tableData: [],
-            fileLimit: 1,
-            uploadUrl: '',
-            multipleSelection: [],
-            dialogDetails: false,
-            dialogAddRecord: false,
-            deleteDialog: false,
-            deleteSetDialog: false,
-            addRecord: {
-                appType: 1,
-                name: '',
-                objectName: '',
-                info: '',
-                customVersion: ''
-            },
-            details: {},
-            deleteId: null,
-            deleteArr: [],
-            fileList: []
-        });
-        interface User {
+<!--// 定义接口来定义对象的类型-->
+<!--interface stateType {-->
+<!--    tableData: Array<any>;-->
+<!--    multipleSelection: Array<any>;-->
+<!--    deleteArr: Array<any>;-->
+<!--    dialogDetails: boolean;-->
+<!--    dialogAddRecord: boolean;-->
+<!--    deleteDialog: boolean;-->
+<!--    deleteSetDialog: boolean;-->
+<!--    pageIndex: number;-->
+<!--    pageSize: number;-->
+<!--    chosenIndex: null | number;-->
+<!--    deleteId: null | number;-->
+<!--    searchType: number;-->
+<!--    appTypeList: Array<any>;-->
+<!--    searchVersion: string;-->
+<!--    searchName: string;-->
+<!--    totalSize: number;-->
+<!--    addRecord: {};-->
+<!--    details: {};-->
+<!--    fileLimit: number;-->
+<!--    uploadUrl: string;-->
+<!--    fileList: Array<file>-->
+<!--}-->
+<!--interface file {-->
+<!--    url: string;-->
+<!--}-->
+<!--export default {-->
+<!--    name: 'appVersion',-->
+<!--    components: {},-->
+<!--    setup() {-->
+<!--        const userInfo = useUserInfo();-->
+<!--        const { userInfos } = storeToRefs(userInfo);-->
+<!--        const state = reactive<stateType>({-->
+<!--            pageIndex: 1,-->
+<!--            pageSize: 10,-->
+<!--            totalSize: 0,-->
+<!--            chosenIndex: null,-->
+<!--            searchType: 1,-->
+<!--            appTypeList: [-->
+<!--                {-->
+<!--                    name: '国泰app',-->
+<!--                    id: 1-->
+<!--                },-->
+<!--                {-->
+<!--                    name: '其他',-->
+<!--                    id: 0-->
+<!--                }-->
+<!--            ],-->
+<!--            searchVersion: '',-->
+<!--            searchName: '',-->
+<!--            tableData: [],-->
+<!--            fileLimit: 1,-->
+<!--            uploadUrl: '',-->
+<!--            multipleSelection: [],-->
+<!--            dialogDetails: false,-->
+<!--            dialogAddRecord: false,-->
+<!--            deleteDialog: false,-->
+<!--            deleteSetDialog: false,-->
+<!--            addRecord: {-->
+<!--                appType: 1,-->
+<!--                name: '',-->
+<!--                objectName: '',-->
+<!--                info: '',-->
+<!--                customVersion: ''-->
+<!--            },-->
+<!--            details: {},-->
+<!--            deleteId: null,-->
+<!--            deleteArr: [],-->
+<!--            fileList: []-->
+<!--        });-->
+<!--        interface User {-->
 
-        }
-        // const multipleTableRef = ref<InstanceType<typeof ElTable>>();
-        // const toggleSelection = (rows?: User[]) => {
-        //     if (rows) {
-        //         rows.forEach((row) => {
-        //             // TODO: improvement typing when refactor table
-        //             // eslint-disable-next-line @typescript-eslint/ban-ts-comment
-        //             // @ts-expect-error
-        //             multipleTableRef.value!.toggleRowSelection(row, undefined);
-        //         });
-        //     } else {
-        //         multipleTableRef.value!.clearSelection();
-        //     }
-        // };
+<!--        }-->
+<!--        // const multipleTableRef = ref<InstanceType<typeof ElTable>>();-->
+<!--        // const toggleSelection = (rows?: User[]) => {-->
+<!--        //     if (rows) {-->
+<!--        //         rows.forEach((row) => {-->
+<!--        //             // TODO: improvement typing when refactor table-->
+<!--        //             // eslint-disable-next-line @typescript-eslint/ban-ts-comment-->
+<!--        //             // @ts-expect-error-->
+<!--        //             multipleTableRef.value!.toggleRowSelection(row, undefined);-->
+<!--        //         });-->
+<!--        //     } else {-->
+<!--        //         multipleTableRef.value!.clearSelection();-->
+<!--        //     }-->
+<!--        // };-->
 
-        // 多选
-        // const handleSelectionChange = (val: User[]) => {
-        //     state.multipleSelection = JSON.parse(JSON.stringify(val));
-        //     state.deleteArr = state.multipleSelection.map((item) => {
-        //         item = item.id;
-        //         return item;
-        //     });
-        // };
+<!--        // 多选-->
+<!--        // const handleSelectionChange = (val: User[]) => {-->
+<!--        //     state.multipleSelection = JSON.parse(JSON.stringify(val));-->
+<!--        //     state.deleteArr = state.multipleSelection.map((item) => {-->
+<!--        //         item = item.id;-->
+<!--        //         return item;-->
+<!--        //     });-->
+<!--        // };-->
 
-        const addRef = ref<FormInstance>();
-        const addRules = reactive<FormRules>({
-            appType: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-            name: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-            objectName: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-            customVersion: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-            info: [{ required: true, message: '该内容不能为空', trigger: 'blur' }]
-        });
+<!--        const addRef = ref<FormInstance>();-->
+<!--        const addRules = reactive<FormRules>({-->
+<!--            appType: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],-->
+<!--            name: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],-->
+<!--            objectName: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],-->
+<!--            customVersion: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],-->
+<!--            info: [{ required: true, message: '该内容不能为空', trigger: 'blur' }]-->
+<!--        });-->
 
-        // 页面载入时执行方法
-        onMounted(() => {
-            getListByPage();
-        });
+<!--        // 页面载入时执行方法-->
+<!--        onMounted(() => {-->
+<!--            getListByPage();-->
+<!--        });-->
 
-        // 分页获取物资标准列表
-        const getListByPage = async () => {
-            const data = { pageSize: state.pageSize, pageIndex: state.pageIndex, searchParams: { appType: state.searchType, customVersion: state.searchVersion, appName: state.searchName} };
-            let res = await appVersionApi().getRecordPage(data);
-            if (res.data.code === '200') {
-                state.tableData = JSON.parse(JSON.stringify(res.data.data))
-                state.totalSize = res.data.total;
-            } else {
-                ElMessage({
-                    type: 'warning',
-                    message: res.data.msg
-                });
-            }
-        };
+<!--        // 分页获取物资标准列表-->
+<!--        const getListByPage = async () => {-->
+<!--            const data = { pageSize: state.pageSize, pageIndex: state.pageIndex, searchParams: { appType: state.searchType, customVersion: state.searchVersion, appName: state.searchName} };-->
+<!--            let res = await appVersionApi().getRecordPage(data);-->
+<!--            if (res.data.code === '200') {-->
+<!--                state.tableData = JSON.parse(JSON.stringify(res.data.data))-->
+<!--                state.totalSize = res.data.total;-->
+<!--            } else {-->
+<!--                ElMessage({-->
+<!--                    type: 'warning',-->
+<!--                    message: res.data.msg-->
+<!--                });-->
+<!--            }-->
+<!--        };-->
 
-        // const handleChange = async (value) => {
-        //     state.addRecord.depId = value;
-        //     console.log(state.addRecord.department, 'de');
-        //     let res = await appVersionApi().getAllMember(value);
-        //     if (res.data.code === '200') {
-        //         state.workerList = res.data.data;
-        //     } else {
-        //         ElMessage({
-        //             type: 'warning',
-        //             message: res.data.msg
-        //         });
-        //     }
-        // };
+<!--        // const handleChange = async (value) => {-->
+<!--        //     state.addRecord.depId = value;-->
+<!--        //     console.log(state.addRecord.department, 'de');-->
+<!--        //     let res = await appVersionApi().getAllMember(value);-->
+<!--        //     if (res.data.code === '200') {-->
+<!--        //         state.workerList = res.data.data;-->
+<!--        //     } else {-->
+<!--        //         ElMessage({-->
+<!--        //             type: 'warning',-->
+<!--        //             message: res.data.msg-->
+<!--        //         });-->
+<!--        //     }-->
+<!--        // };-->
 
-        // 关键词查询记录
-        const searchRecord = async () => {
-            if (state.searchType == null && state.searchVersion == '' && state.searchName == '') {
-                ElMessage({
-                    type: 'warning',
-                    message: '请输入查询关键词'
-                });
-            } else {
-                getListByPage();
-            }
-        };
+<!--        // 关键词查询记录-->
+<!--        const searchRecord = async () => {-->
+<!--            if (state.searchType == null && state.searchVersion == '' && state.searchName == '') {-->
+<!--                ElMessage({-->
+<!--                    type: 'warning',-->
+<!--                    message: '请输入查询关键词'-->
+<!--                });-->
+<!--            } else {-->
+<!--                getListByPage();-->
+<!--            }-->
+<!--        };-->
 
-        const clearSearch = async () => {
-            state.searchType = 1
-            state.searchVersion = ''
-            state.searchName = ''
-            getListByPage();
-        };
+<!--        const clearSearch = async () => {-->
+<!--            state.searchType = 1-->
+<!--            state.searchVersion = ''-->
+<!--            state.searchName = ''-->
+<!--            getListByPage();-->
+<!--        };-->
 
-        const showTip =()=>{
-            ElMessage({
-                type: 'warning',
-                message: '超出文件上传数量'
-            });
-        }
+<!--        const showTip =()=>{-->
+<!--            ElMessage({-->
+<!--                type: 'warning',-->
+<!--                message: '超出文件上传数量'-->
+<!--            });-->
+<!--        }-->
 
-        const getUploadUrl = async (rawFile: any) => {
-            const res = await appVersionApi().getUploadUrl({ filename: rawFile.name });
-            state.addRecord.objectName = res.data.data.objectName
-            state.uploadUrl = res.data.data.presignedUrl;
-        };
+<!--        const getUploadUrl = async (rawFile: any) => {-->
+<!--            const res = await appVersionApi().getUploadUrl({ filename: rawFile.name });-->
+<!--            state.addRecord.objectName = res.data.data.objectName-->
+<!--            state.uploadUrl = res.data.data.presignedUrl;-->
+<!--        };-->
 
-        const upload = async (params: any) => {
-            // const formData = new FormData();
-            // formData.append('file', state.fileList[0].raw);
-            let reader = new FileReader();
-            reader.readAsArrayBuffer(params.file);
-            reader.onload = async () => {
-                axios
-                    .put(state.uploadUrl, reader.result, {
-                        header: { 'Content-Type': 'multipart/form-data' }
-                    })
-                    .then(() => {
-                        // if (state.fileList.length === 2) {
-                        // 	state.fileList.splice(0, 1);
-                        // }
-                        // console.log(state.form.workDetail.gbPath,'gbpath')
-                    });
-            };
-        };
+<!--        const upload = async (params: any) => {-->
+<!--            // const formData = new FormData();-->
+<!--            // formData.append('file', state.fileList[0].raw);-->
+<!--            let reader = new FileReader();-->
+<!--            reader.readAsArrayBuffer(params.file);-->
+<!--            reader.onload = async () => {-->
+<!--                axios-->
+<!--                    .put(state.uploadUrl, reader.result, {-->
+<!--                        header: { 'Content-Type': 'multipart/form-data' }-->
+<!--                    })-->
+<!--                    .then(() => {-->
+<!--                        // if (state.fileList.length === 2) {-->
+<!--                        // 	state.fileList.splice(0, 1);-->
+<!--                        // }-->
+<!--                        // console.log(state.form.workDetail.gbPath,'gbpath')-->
+<!--                    });-->
+<!--            };-->
+<!--        };-->
 
-        const beforeRemove = (file: {}, fileList: []) => {
-            const result = new Promise((resolve, reject) => {
-                ElMessageBox.confirm('此操作将删除该图片, 是否继续?', '提示', {
-                    confirmButtonText: '确定',
-                    cancelButtonText: '取消',
-                    type: 'warning'
-                })
-                    .then(() => {
-                        // console.log(state.workDetail.gbPath,'path')
-                        state.fileList = []
-                        // 请求删除接口
-                        deletePic(state.addRecord.objectName)
-                        state.addRecord.objectName = null
-                    })
-                    .catch(() => {
-                        reject(false);
-                    });
-            });
-            return result;
-        };
-        // 删除图片接口
-        const deletePic = async(fileName:string)=>{
-            const res = await workApplyApi().deleteFile({fileName: fileName})
-            if (res.data.code === '200') {
-                ElMessage({
-                    type: 'success',
-                    message: '删除成功!'
-                });
-            } else {
-                ElMessage({
-                    type: 'warning',
-                    message: res.data.msg
-                });
-            }
-        }
+<!--        const beforeRemove = (file: {}, fileList: []) => {-->
+<!--            const result = new Promise((resolve, reject) => {-->
+<!--                ElMessageBox.confirm('此操作将删除该图片, 是否继续?', '提示', {-->
+<!--                    confirmButtonText: '确定',-->
+<!--                    cancelButtonText: '取消',-->
+<!--                    type: 'warning'-->
+<!--                })-->
+<!--                    .then(() => {-->
+<!--                        // console.log(state.workDetail.gbPath,'path')-->
+<!--                        state.fileList = []-->
+<!--                        // 请求删除接口-->
+<!--                        deletePic(state.addRecord.objectName)-->
+<!--                        state.addRecord.objectName = null-->
+<!--                    })-->
+<!--                    .catch(() => {-->
+<!--                        reject(false);-->
+<!--                    });-->
+<!--            });-->
+<!--            return result;-->
+<!--        };-->
+<!--        // 删除图片接口-->
+<!--        const deletePic = async(fileName:string)=>{-->
+<!--            const res = await workApplyApi().deleteFile({fileName: fileName})-->
+<!--            if (res.data.code === '200') {-->
+<!--                ElMessage({-->
+<!--                    type: 'success',-->
+<!--                    message: '删除成功!'-->
+<!--                });-->
+<!--            } else {-->
+<!--                ElMessage({-->
+<!--                    type: 'warning',-->
+<!--                    message: res.data.msg-->
+<!--                });-->
+<!--            }-->
+<!--        }-->
 
-        // 添加班组管理方法
-        const addRecord = async (data: any) => {
-            let res = await appVersionApi().addRecord(data);
-            if (res.data.code === '200') {
-                ElMessage({
-                    type: 'success',
-                    message: '添加成功!'
-                });
-                state.fileList = []
-                getListByPage();
-            } else {
-                ElMessage({
-                    type: 'warning',
-                    message: res.data.msg
-                });
-            }
-        };
+<!--        // 添加班组管理方法-->
+<!--        const addRecord = async (data: any) => {-->
+<!--            let res = await appVersionApi().addRecord(data);-->
+<!--            if (res.data.code === '200') {-->
+<!--                ElMessage({-->
+<!--                    type: 'success',-->
+<!--                    message: '添加成功!'-->
+<!--                });-->
+<!--                state.fileList = []-->
+<!--                getListByPage();-->
+<!--            } else {-->
+<!--                ElMessage({-->
+<!--                    type: 'warning',-->
+<!--                    message: res.data.msg-->
+<!--                });-->
+<!--            }-->
+<!--        };-->
 
-        // 修改工作时段方法
-        const editRecordBtn = async (index, row) => {
-            console.log(row,'row')
-            state.addRecord = JSON.parse(JSON.stringify(row));
-            state.dialogAddRecord = true;
-            state.chosenIndex = index;
-        };
+<!--        // 修改工作时段方法-->
+<!--        const editRecordBtn = async (index, row) => {-->
+<!--            console.log(row,'row')-->
+<!--            state.addRecord = JSON.parse(JSON.stringify(row));-->
+<!--            state.dialogAddRecord = true;-->
+<!--            state.chosenIndex = index;-->
+<!--        };-->
 
-        const editRecord = async (data: any) => {
-            let res = await appVersionApi().updateRecord(data);
-            if (res.data.code === '200') {
-                ElMessage({
-                    type: 'success',
-                    message: '修改成功!'
-                });
-                getListByPage();
-            } else {
-                ElMessage({
-                    type: 'warning',
-                    message: res.data.msg
-                });
-            }
-        };
+<!--        const editRecord = async (data: any) => {-->
+<!--            let res = await appVersionApi().updateRecord(data);-->
+<!--            if (res.data.code === '200') {-->
+<!--                ElMessage({-->
+<!--                    type: 'success',-->
+<!--                    message: '修改成功!'-->
+<!--                });-->
+<!--                getListByPage();-->
+<!--            } else {-->
+<!--                ElMessage({-->
+<!--                    type: 'warning',-->
+<!--                    message: res.data.msg-->
+<!--                });-->
+<!--            }-->
+<!--        };-->
 
-        // 新增修改记录
-        const confirmAddRecord = async (formEl: FormInstance | undefined) => {
-            if (!formEl) return;
-            await formEl.validate(async (valid, fields) => {
-                if (valid) {
-                    const data = {
-                        appType: state.addRecord.appType,
-                        appName: state.addRecord.name,
-                        objectName: state.addRecord.objectName,
-                        info: state.addRecord.info,
-                        customVersion: state.addRecord.customVersion
-                    };
-                    if (state.chosenIndex == null) {
-                        await addRecord(data);
-                    } else {
-                        data.id = JSON.stringify(state.addRecord.id);
-                        await editRecord(data);
-                    }
-                    state.dialogAddRecord = false;
-                } else {
-                    console.log('error submit!', fields);
-                }
-            });
-        };
+<!--        // 新增修改记录-->
+<!--        const confirmAddRecord = async (formEl: FormInstance | undefined) => {-->
+<!--            if (!formEl) return;-->
+<!--            await formEl.validate(async (valid, fields) => {-->
+<!--                if (valid) {-->
+<!--                    const data = {-->
+<!--                        appType: state.addRecord.appType,-->
+<!--                        appName: state.addRecord.name,-->
+<!--                        objectName: state.addRecord.objectName,-->
+<!--                        info: state.addRecord.info,-->
+<!--                        customVersion: state.addRecord.customVersion-->
+<!--                    };-->
+<!--                    if (state.chosenIndex == null) {-->
+<!--                        await addRecord(data);-->
+<!--                    } else {-->
+<!--                        data.id = JSON.stringify(state.addRecord.id);-->
+<!--                        await editRecord(data);-->
+<!--                    }-->
+<!--                    state.dialogAddRecord = false;-->
+<!--                } else {-->
+<!--                    console.log('error submit!', fields);-->
+<!--                }-->
+<!--            });-->
+<!--        };-->
 
-        // 删除工作时间组方法
-        const deleteRecord = async (data: any) => {
-            let res = await appVersionApi().deleteRecord(data);
-            if (res.data.code === '200') {
-                ElMessage({
-                    type: 'success',
-                    message: '删除成功!'
-                });
-                getListByPage();
-            } else {
-                ElMessage({
-                    type: 'warning',
-                    message: res.data.msg
-                });
-            }
-        };
+<!--        // 删除工作时间组方法-->
+<!--        const deleteRecord = async (data: any) => {-->
+<!--            let res = await appVersionApi().deleteRecord(data);-->
+<!--            if (res.data.code === '200') {-->
+<!--                ElMessage({-->
+<!--                    type: 'success',-->
+<!--                    message: '删除成功!'-->
+<!--                });-->
+<!--                getListByPage();-->
+<!--            } else {-->
+<!--                ElMessage({-->
+<!--                    type: 'warning',-->
+<!--                    message: res.data.msg-->
+<!--                });-->
+<!--            }-->
+<!--        };-->
 
-        const deleteRecordBtn = (row) => {
-            console.log(row, 'row');
-            state.deleteId = row.id;
-            state.deleteDialog = true;
-        };
+<!--        const deleteRecordBtn = (row) => {-->
+<!--            console.log(row, 'row');-->
+<!--            state.deleteId = row.id;-->
+<!--            state.deleteDialog = true;-->
+<!--        };-->
 
-        const conFirmDelete = () => {
-            deleteRecord({ id: state.deleteId });
-            state.deleteDialog = false;
-        };
+<!--        const conFirmDelete = () => {-->
+<!--            deleteRecord({ id: state.deleteId });-->
+<!--            state.deleteDialog = false;-->
+<!--        };-->
 
-        // 批量删除
-        // const deleteBatchBtn = async () => {
-        //     ElMessage({
-        //         type: 'warning',
-        //         message: '抱歉,本页面暂不支持批量删除'
-        //     });
-            // if (state.deleteArr.length > 0) {
-            // 	state.deleteSetDialog = true
-            // } else {
-            // 	ElMessage({
-            // 		type: 'warning',
-            // 		message: '请先选择要删除的记录'
-            // 	});
-            // }
-        // };
+<!--        // 批量删除-->
+<!--        // const deleteBatchBtn = async () => {-->
+<!--        //     ElMessage({-->
+<!--        //         type: 'warning',-->
+<!--        //         message: '抱歉,本页面暂不支持批量删除'-->
+<!--        //     });-->
+<!--            // if (state.deleteArr.length > 0) {-->
+<!--            // 	state.deleteSetDialog = true-->
+<!--            // } else {-->
+<!--            // 	ElMessage({-->
+<!--            // 		type: 'warning',-->
+<!--            // 		message: '请先选择要删除的记录'-->
+<!--            // 	});-->
+<!--            // }-->
+<!--        // };-->
 
-        // const conFirmDeleteBatch = async () => {
-        // 	let res = await appVersionApi().deletBatchRecord({ids: state.deleteArr});
-        // 	if (res.data.code === '200') {
-        // 		state.deleteSetDialog = false
-        // 		ElMessage({
-        // 			type: 'success',
-        // 			message: res.data.msg
-        // 		});
-        // 		getListByPage()
-        // 	} else {
-        // 		ElMessage({
-        // 			type: 'warning',
-        // 			message: res.data.msg
-        // 		});
-        // 		state.deleteSetDialog = false
-        // 	}
-        // }
+<!--        // const conFirmDeleteBatch = async () => {-->
+<!--        // 	let res = await appVersionApi().deletBatchRecord({ids: state.deleteArr});-->
+<!--        // 	if (res.data.code === '200') {-->
+<!--        // 		state.deleteSetDialog = false-->
+<!--        // 		ElMessage({-->
+<!--        // 			type: 'success',-->
+<!--        // 			message: res.data.msg-->
+<!--        // 		});-->
+<!--        // 		getListByPage()-->
+<!--        // 	} else {-->
+<!--        // 		ElMessage({-->
+<!--        // 			type: 'warning',-->
+<!--        // 			message: res.data.msg-->
+<!--        // 		});-->
+<!--        // 		state.deleteSetDialog = false-->
+<!--        // 	}-->
+<!--        // }-->
 
-        const handleSizeChange = (val: number) => {
-            state.pageSize = val;
-            getListByPage();
-        };
-        const handleCurrentChange = (val: number) => {
-            state.pageIndex = val;
-            getListByPage();
-        };
+<!--        const handleSizeChange = (val: number) => {-->
+<!--            state.pageSize = val;-->
+<!--            getListByPage();-->
+<!--        };-->
+<!--        const handleCurrentChange = (val: number) => {-->
+<!--            state.pageIndex = val;-->
+<!--            getListByPage();-->
+<!--        };-->
 
-        // 查看记录
-        const viewRecord = (row) => {
-            state.details = JSON.parse(JSON.stringify(row));
-            state.dialogDetails = true;
-        };
+<!--        // 查看记录-->
+<!--        const viewRecord = (row) => {-->
+<!--            state.details = JSON.parse(JSON.stringify(row));-->
+<!--            state.dialogDetails = true;-->
+<!--        };-->
 
-        // 刷新
-        const reLoadData = async () => {
-            getListByPage();
-        };
+<!--        // 刷新-->
+<!--        const reLoadData = async () => {-->
+<!--            getListByPage();-->
+<!--        };-->
 
-        const closeAdd = () => {
-            state.addRecord = {
-                appType: 1,
-                name: '',
-                objectName: '',
-                info: '',
-                customVersion: ''
-            }
-            state.uploadUrl = ''
-            state.fileList = []
-            state.chosenIndex = null;
-        };
-        const openAdd = () => {
-            if (state.chosenIndex == null) {
-                state.addRecord.info = '';
-            }
-        };
-        const indexClear = () => {
-            state.deleteId = null;
-        };
+<!--        const closeAdd = () => {-->
+<!--            state.addRecord = {-->
+<!--                appType: 1,-->
+<!--                name: '',-->
+<!--                objectName: '',-->
+<!--                info: '',-->
+<!--                customVersion: ''-->
+<!--            }-->
+<!--            state.uploadUrl = ''-->
+<!--            state.fileList = []-->
+<!--            state.chosenIndex = null;-->
+<!--        };-->
+<!--        const openAdd = () => {-->
+<!--            if (state.chosenIndex == null) {-->
+<!--                state.addRecord.info = '';-->
+<!--            }-->
+<!--        };-->
+<!--        const indexClear = () => {-->
+<!--            state.deleteId = null;-->
+<!--        };-->
 
-        // 折线图
-        const renderMenu = async (value: string) => {
-            Session.set('projectId', value);
-            userInfos.value.projectId = value;
-            await initBackEndControlRoutes();
-        };
-        return {
-            addRef,
-            addRules,
-            View,
-            Edit,
-            Delete,
-            Refresh,
-            Plus,
-            searchRecord,
-            clearSearch,
-            viewRecord,
-            deleteRecordBtn,
-            conFirmDelete,
-            getListByPage,
-            reLoadData,
-            deleteRecord,
-            showTip,
-            getUploadUrl,
-            upload,
-            beforeRemove,
-            handleSizeChange,
-            handleCurrentChange,
-            confirmAddRecord,
-            closeAdd,
-            openAdd,
-            indexClear,
-            editRecordBtn,
-            ...toRefs(state)
-        };
-    }
-};
-</script>
+<!--        // 折线图-->
+<!--        const renderMenu = async (value: string) => {-->
+<!--            Session.set('projectId', value);-->
+<!--            userInfos.value.projectId = value;-->
+<!--            await initBackEndControlRoutes();-->
+<!--        };-->
+<!--        return {-->
+<!--            addRef,-->
+<!--            addRules,-->
+<!--            View,-->
+<!--            Edit,-->
+<!--            Delete,-->
+<!--            Refresh,-->
+<!--            Plus,-->
+<!--            searchRecord,-->
+<!--            clearSearch,-->
+<!--            viewRecord,-->
+<!--            deleteRecordBtn,-->
+<!--            conFirmDelete,-->
+<!--            getListByPage,-->
+<!--            reLoadData,-->
+<!--            deleteRecord,-->
+<!--            showTip,-->
+<!--            getUploadUrl,-->
+<!--            upload,-->
+<!--            beforeRemove,-->
+<!--            handleSizeChange,-->
+<!--            handleCurrentChange,-->
+<!--            confirmAddRecord,-->
+<!--            closeAdd,-->
+<!--            openAdd,-->
+<!--            indexClear,-->
+<!--            editRecordBtn,-->
+<!--            ...toRefs(state)-->
+<!--        };-->
+<!--    }-->
+<!--};-->
+<!--</script>-->
 
-<style scoped lang="scss">
-$homeNavLengh: 8;
-.home-container {
-    height: calc(100vh - 144px);
-    box-sizing: border-box;
-    overflow: hidden;
-    .homeCard {
-        width: 100%;
-        padding: 20px;
-        box-sizing: border-box;
-        background: #fff;
-        border-radius: 4px;
+<!--<style scoped lang="scss">-->
+<!--$homeNavLengh: 8;-->
+<!--.home-container {-->
+<!--    height: calc(100vh - 144px);-->
+<!--    box-sizing: border-box;-->
+<!--    overflow: hidden;-->
+<!--    .homeCard {-->
+<!--        width: 100%;-->
+<!--        padding: 20px;-->
+<!--        box-sizing: border-box;-->
+<!--        background: #fff;-->
+<!--        border-radius: 4px;-->
 
-        .main-card {
-            width: 100%;
-            height: 100%;
-            .cardTop {
-                display: flex;
-                align-items: center;
-                justify-content: space-between;
-                margin-bottom: 20px;
-                .mainCardBtn {
-                    margin: 0;
-                }
-            }
-            .pageBtn {
-                height: 60px;
-                display: flex;
-                align-items: center;
-                justify-content: right;
+<!--        .main-card {-->
+<!--            width: 100%;-->
+<!--            height: 100%;-->
+<!--            .cardTop {-->
+<!--                display: flex;-->
+<!--                align-items: center;-->
+<!--                justify-content: space-between;-->
+<!--                margin-bottom: 20px;-->
+<!--                .mainCardBtn {-->
+<!--                    margin: 0;-->
+<!--                }-->
+<!--            }-->
+<!--            .pageBtn {-->
+<!--                height: 60px;-->
+<!--                display: flex;-->
+<!--                align-items: center;-->
+<!--                justify-content: right;-->
 
-                .demo-pagination-block + .demo-pagination-block {
-                    margin-top: 10px;
-                }
-                .demo-pagination-block .demonstration {
-                    margin-bottom: 16px;
-                }
-            }
-        }
-        &:last-of-type {
-            height: calc(100% - 100px);
-        }
-    }
-    .el-row {
-        display: flex;
-        align-items: center;
-        margin-bottom: 20px;
-        &:last-child {
-            margin-bottom: 0;
-        }
-        .grid-content {
-            align-items: center;
-            min-height: 36px;
-        }
+<!--                .demo-pagination-block + .demo-pagination-block {-->
+<!--                    margin-top: 10px;-->
+<!--                }-->
+<!--                .demo-pagination-block .demonstration {-->
+<!--                    margin-bottom: 16px;-->
+<!--                }-->
+<!--            }-->
+<!--        }-->
+<!--        &:last-of-type {-->
+<!--            height: calc(100% - 100px);-->
+<!--        }-->
+<!--    }-->
+<!--    .el-row {-->
+<!--        display: flex;-->
+<!--        align-items: center;-->
+<!--        margin-bottom: 20px;-->
+<!--        &:last-child {-->
+<!--            margin-bottom: 0;-->
+<!--        }-->
+<!--        .grid-content {-->
+<!--            align-items: center;-->
+<!--            min-height: 36px;-->
+<!--        }-->
 
-        .topInfo {
-            width: 100%;
-            display: flex;
-            align-items: center;
-            font-size: 16px;
-            font-weight: bold;
+<!--        .topInfo {-->
+<!--            width: 100%;-->
+<!--            display: flex;-->
+<!--            align-items: center;-->
+<!--            font-size: 16px;-->
+<!--            font-weight: bold;-->
 
-            & > div {
-                white-space: nowrap;
-                margin-right: 20px;
-            }
-        }
-    }
-}
-.el-input {
-    width: 100% !important;
-}
-.el-date-editor::v-deep {
-    width: 100%;
-}
-.el-select {
-    width: 100% !important;
-}
-.el-tabs{
-    width: 100%;
-}
-::v-deep(.el-date-editor){
-    width: 100%;
-}
+<!--            & > div {-->
+<!--                white-space: nowrap;-->
+<!--                margin-right: 20px;-->
+<!--            }-->
+<!--        }-->
+<!--    }-->
+<!--}-->
+<!--.el-input {-->
+<!--    width: 100% !important;-->
+<!--}-->
+<!--.el-date-editor::v-deep {-->
+<!--    width: 100%;-->
+<!--}-->
+<!--.el-select {-->
+<!--    width: 100% !important;-->
+<!--}-->
+<!--.el-tabs{-->
+<!--    width: 100%;-->
+<!--}-->
+<!--::v-deep(.el-date-editor){-->
+<!--    width: 100%;-->
+<!--}-->
 
-:deep(.el-cascader){
-    width: 100% !important;
-}
-</style>
+<!--:deep(.el-cascader){-->
+<!--    width: 100% !important;-->
+<!--}-->
+<!--</style>-->
diff --git a/src/views/system/role/component/roleDialog.vue b/src/views/system/role/component/roleDialog.vue
index 9bdaac2..0d97381 100644
--- a/src/views/system/role/component/roleDialog.vue
+++ b/src/views/system/role/component/roleDialog.vue
@@ -1,23 +1,23 @@
 <template>
     <div class="system-add-role-container">
-        <el-dialog :title="title" v-model="isShowRoleDialog" width="769px">
+        <el-dialog :title="title" v-model="isShowRoleDialog" width="600px">
             <el-form :model="roleForm" size="default" label-width="90px">
                 <el-row :gutter="35">
-                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+                    <el-col :xs="24" :sm="12" :md="12" :lg="24" :xl="24" class="mb20">
                         <el-form-item label="角色名称">
-                            <el-input v-model="roleForm.roleName" placeholder="请输入角色名称" clearable></el-input>
+                            <el-input v-model="roleForm.name" placeholder="请输入角色名称" clearable></el-input>
                         </el-form-item>
                     </el-col>
-                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-                        <el-form-item label="角色标识">
-                            <el-input v-model="roleForm.roleCode" placeholder="请输入角色标识" clearable></el-input>
-                        </el-form-item>
-                    </el-col>
-                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
-                        <el-form-item label="角色描述">
-                            <el-input v-model="roleForm.roleInfo" type="textarea" placeholder="请输入角色描述" maxlength="150"></el-input>
-                        </el-form-item>
-                    </el-col>
+<!--                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">-->
+<!--                        <el-form-item label="角色标识">-->
+<!--                            <el-input v-model="roleForm.roleCode" placeholder="请输入角色标识" clearable></el-input>-->
+<!--                        </el-form-item>-->
+<!--                    </el-col>-->
+<!--                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">-->
+<!--                        <el-form-item label="角色描述">-->
+<!--                            <el-input v-model="roleForm.roleInfo" type="textarea" placeholder="请输入角色描述" maxlength="150"></el-input>-->
+<!--                        </el-form-item>-->
+<!--                    </el-col>-->
                 </el-row>
             </el-form>
             <template #footer>
@@ -46,9 +46,8 @@
     buttonName: string;
     isShowRoleDialog: boolean;
     roleForm: {
-        roleName: string;
-        roleCode: string;
-        roleInfo: string;
+        name: string;
+        roleId?:number;
     };
     menuData: Array<MenuDataTree>;
     menuProps: {
@@ -65,9 +64,7 @@
             title: '',
             buttonName: '',
             roleForm: {
-                roleName: '', // 角色名称
-                roleCode: '', // 角色标识
-                roleInfo: '' // 排序
+                name: '',
             },
             menuData: [],
             menuProps: {
@@ -82,21 +79,23 @@
                 state.title = '新增角色';
                 state.buttonName = '新增';
                 state.roleForm = {
-                    roleName: '',
-                    roleCode: '',
-                    roleInfo: ''
+                    name: '',
                 };
             } else {
                 state.title = '修改角色';
                 state.buttonName = '修改';
-                state.roleForm = JSON.parse(JSON.stringify(value));
+                let data = JSON.parse(JSON.stringify(value));
+                state.roleForm = {
+                    roleId: data.id,
+                    name: data.name
+                }
             }
         };
         // 新增
         const onSubmit = async () => {
             if (state.title === '新增角色') {
                 let res = await useRoleApi().addRole(state.roleForm);
-                if (res.data.code === '200') {
+                if (res.data.code === 100) {
                     ElMessage({
                         type: 'success',
                         message: '角色新增成功',
@@ -112,7 +111,7 @@
                 }
             } else {
                 let res = await useRoleApi().modRole(state.roleForm);
-                if (res.data.code === '200') {
+                if (res.data.code === 100) {
                     ElMessage({
                         type: 'success',
                         message: '角色修改成功',
diff --git a/src/views/system/role/index.vue b/src/views/system/role/index.vue
index ca6131f..7d8aba2 100644
--- a/src/views/system/role/index.vue
+++ b/src/views/system/role/index.vue
@@ -18,13 +18,9 @@
             </div>
             <el-table :data="tableData.data" style="width: 100%">
                 <el-table-column type="index" label="序号" width="60" />
-                <el-table-column prop="roleName" label="角色名称" show-overflow-tooltip></el-table-column>
-                <el-table-column prop="roleCode" label="角色标识" show-overflow-tooltip></el-table-column>
-                <el-table-column prop="roleInfo" label="角色描述" show-overflow-tooltip></el-table-column>
-                <el-table-column prop="createTime" label="创建时间" show-overflow-tooltip></el-table-column>
+                <el-table-column prop="name" label="角色名称" show-overflow-tooltip align="center"></el-table-column>
                 <el-table-column label="操作" width="150">
                     <template #default="scope">
-                        <el-button size="small" text type="primary" @click="onOpenDialogRef('新增', '')">新增</el-button>
                         <el-button size="small" text type="primary" @click="onOpenDialogRef('修改', scope.row)">修改</el-button>
                         <el-button size="small" style="color: red" text type="primary" @click="onRowDel(scope.row)">删除</el-button>
                     </template>
@@ -84,7 +80,7 @@
         // 初始化表格数据
         const initRoleTableData = async () => {
             let res = await useRoleApi().getRoleList();
-            if (res.data.code === '200') {
+            if (res.data.code === 100) {
                 state.tableData.data = res.data.data;
             } else {
                 ElMessage({
@@ -106,7 +102,7 @@
             })
                 .then(async () => {
                     let res = await useRoleApi().deleteRole({ roleId: row.roleId });
-                    if (res.data.code === '200') {
+                    if (res.data.code === 100) {
                         ElMessage({
                             type: 'success',
                             duration: 2000,
diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue
index a892e9c..358f807 100644
--- a/src/views/system/user/index.vue
+++ b/src/views/system/user/index.vue
@@ -2,8 +2,7 @@
     <div class="system-user-container">
         <el-card shadow="hover">
             <div class="system-user-search mb15">
-                <el-input size="default" v-model.trim="userTableData.listQuery.searchParams.username" placeholder="请输入用户名" style="max-width: 180px"> </el-input>
-                <el-input size="default" v-model.trim="userTableData.listQuery.searchParams.realName" placeholder="请输入真实姓名" style="max-width: 180px; margin-left: 10px"> </el-input>
+                <el-input size="default" v-model.trim="userTableData.listQuery.roleId" placeholder="请输入用户名" style="max-width: 180px"> </el-input>
                 <el-button size="default" type="primary" class="ml10" @click="initUserTableData">
                     <el-icon>
                         <ele-Search />
@@ -79,10 +78,8 @@
         total: number;
         loading: boolean;
         listQuery: {
-            searchParams: {
-                username: string | null;
-                realName: string | null;
-            };
+            roleId: number | null;
+            usePage: boolean;
             pageIndex: number;
             pageSize: number;
         };
@@ -102,10 +99,8 @@
                 total: 0,
                 loading: false,
                 listQuery: {
-                    searchParams: {
-                        username: null,
-                        realName: null
-                    },
+                    roleId: 1,
+                    usePage: false,
                     pageIndex: 1,
                     pageSize: 10
                 }
@@ -127,17 +122,6 @@
             }
         };
 
-        const getDepartmentData = async () => {
-            let res = await departmentApi().getDepartmentList();
-            if (res.data.code === '200') {
-                state.departmentList = res.data.data;
-            } else {
-                ElMessage({
-                    type: 'warning',
-                    message: res.data.msg
-                });
-            }
-        };
 
         const getRoleData = async () => {
             let res = await useRoleApi().getRoleList();
@@ -193,12 +177,7 @@
         };
         // 页面加载时
         onMounted(() => {
-            let a = { name: 1, c: { name: 1 } };
-            let b = Object.assign({}, a);
-            b.c.name = 2;
-            console.log(a.c.name);
             initUserTableData();
-            getDepartmentData();
             getRoleData();
         });
         return {

--
Gitblit v1.9.2