From d66ab921c996c38da3aa373ffdc7c974c157df33 Mon Sep 17 00:00:00 2001
From: spring <2396852758@qq.com>
Date: 星期五, 07 三月 2025 09:37:53 +0800
Subject: [PATCH] Merge branch 'dev' of http://114.132.189.42:9002/r/lims-ruoyi-before into dev

---
 src/api/cnas/personal/personalList.js                                 |    2 
 src/views/CNAS/personnel/personnelInfo/tabs/personnelTraining.vue     |   12 
 src/views/CNAS/resourceDemand/device/component/files.vue              |    5 
 src/views/CNAS/resourceDemand/device/component/management.vue         |    8 
 public/index.html                                                     |    2 
 src/views/business/rawMaterialInspection/index.vue                    |    8 
 src/views/business/productOrder/components/add.vue                    |  249 ++++++++++++--------
 src/views/CNAS/personnel/personnelInfo/tabs/personnel-information.vue |    1 
 src/views/business/inspectionTask/components/viewManHourDia.vue       |  204 +++++++++++++++++
 src/views/business/inspectionTask/inspection.vue                      |   13 +
 src/views/business/productOrder/index.vue                             |   16 
 src/router/index.js                                                   |   28 --
 src/views/business/inspectionTask/components/EditInspectionItem.vue   |   11 
 src/views/business/inspectionTask/index.vue                           |   40 ++
 src/views/business/materialOrder/index.vue                            |   42 ++
 src/views/CNAS/externalService/supplierManage/index.vue               |    2 
 src/views/performance/manHour/workTimeManagement.vue                  |    3 
 /dev/null                                                             |   15 -
 src/api/business/inspectionTask.js                                    |   16 +
 src/views/structural/capabilityAndLaboratory/laboratory/index.vue     |    6 
 public/logo.ico                                                       |    0 
 21 files changed, 508 insertions(+), 175 deletions(-)

diff --git a/public/index.html b/public/index.html
index 22eff41..745aa41 100644
--- a/public/index.html
+++ b/public/index.html
@@ -8,7 +8,7 @@
       name="viewport"
       content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"
     />
-    <link rel="icon" href="<%= BASE_URL %>favicon.ico" />
+    <link rel="icon" href="<%= BASE_URL %>logo.ico" />
     <link
       href="<%= BASE_URL %>luckysheet/plugins/css/pluginsCss.css"
       rel="stylesheet"
diff --git a/public/logo.ico b/public/logo.ico
new file mode 100644
index 0000000..62ab8bb
--- /dev/null
+++ b/public/logo.ico
Binary files differ
diff --git a/src/api/business/inspectionTask.js b/src/api/business/inspectionTask.js
index 4187ad6..d4b8158 100644
--- a/src/api/business/inspectionTask.js
+++ b/src/api/business/inspectionTask.js
@@ -287,3 +287,19 @@
     params: query,
   });
 }
+// 鏌ヨ宸ユ椂
+export function getWorkingHoursByOrderId(query) {
+  return request({
+    url: "/insOrderPlan/getWorkingHoursByOrderId",
+    method: "get",
+    params: query,
+  });
+}
+// 淇敼宸ユ椂璇︽儏
+export function updateWorkingHours(query) {
+  return request({
+    url: "/insOrderPlan/updateWorkingHours",
+    method: "post",
+    data: query,
+  });
+}
diff --git a/src/api/cnas/personal/personalList.js b/src/api/cnas/personal/personalList.js
index 567c481..a96377e 100644
--- a/src/api/cnas/personal/personalList.js
+++ b/src/api/cnas/personal/personalList.js
@@ -30,7 +30,7 @@
   return request({
     url: "/personBasicInfo/exportPersonBasicInfoById",
     method: "get",
-    data: query,
+    params: query,
     responseType: "blob"
   });
 }
diff --git a/src/api/monitor/job.js b/src/api/monitor/job.js
deleted file mode 100644
index 3815569..0000000
--- a/src/api/monitor/job.js
+++ /dev/null
@@ -1,71 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ瀹氭椂浠诲姟璋冨害鍒楄〃
-export function listJob(query) {
-  return request({
-    url: '/monitor/job/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ瀹氭椂浠诲姟璋冨害璇︾粏
-export function getJob(jobId) {
-  return request({
-    url: '/monitor/job/' + jobId,
-    method: 'get'
-  })
-}
-
-// 鏂板瀹氭椂浠诲姟璋冨害
-export function addJob(data) {
-  return request({
-    url: '/monitor/job',
-    method: 'post',
-    data: data
-  })
-}
-
-// 淇敼瀹氭椂浠诲姟璋冨害
-export function updateJob(data) {
-  return request({
-    url: '/monitor/job',
-    method: 'put',
-    data: data
-  })
-}
-
-// 鍒犻櫎瀹氭椂浠诲姟璋冨害
-export function delJob(jobId) {
-  return request({
-    url: '/monitor/job/' + jobId,
-    method: 'delete'
-  })
-}
-
-// 浠诲姟鐘舵�佷慨鏀�
-export function changeJobStatus(jobId, status) {
-  const data = {
-    jobId,
-    status
-  }
-  return request({
-    url: '/monitor/job/changeStatus',
-    method: 'put',
-    data: data
-  })
-}
-
-
-// 瀹氭椂浠诲姟绔嬪嵆鎵ц涓�娆�
-export function runJob(jobId, jobGroup) {
-  const data = {
-    jobId,
-    jobGroup
-  }
-  return request({
-    url: '/monitor/job/run',
-    method: 'put',
-    data: data
-  })
-}
\ No newline at end of file
diff --git a/src/api/tool/gen.js b/src/api/tool/gen.js
deleted file mode 100644
index 2075677..0000000
--- a/src/api/tool/gen.js
+++ /dev/null
@@ -1,85 +0,0 @@
-import request from '@/utils/request'
-
-// 鏌ヨ鐢熸垚琛ㄦ暟鎹�
-export function listTable(query) {
-  return request({
-    url: '/tool/gen/list',
-    method: 'get',
-    params: query
-  })
-}
-// 鏌ヨdb鏁版嵁搴撳垪琛�
-export function listDbTable(query) {
-  return request({
-    url: '/tool/gen/db/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 鏌ヨ琛ㄨ缁嗕俊鎭�
-export function getGenTable(tableId) {
-  return request({
-    url: '/tool/gen/' + tableId,
-    method: 'get'
-  })
-}
-
-// 淇敼浠g爜鐢熸垚淇℃伅
-export function updateGenTable(data) {
-  return request({
-    url: '/tool/gen',
-    method: 'put',
-    data: data
-  })
-}
-
-// 瀵煎叆琛�
-export function importTable(data) {
-  return request({
-    url: '/tool/gen/importTable',
-    method: 'post',
-    params: data
-  })
-}
-
-// 鍒涘缓琛�
-export function createTable(data) {
-  return request({
-    url: '/tool/gen/createTable',
-    method: 'post',
-    params: data
-  })
-}
-
-// 棰勮鐢熸垚浠g爜
-export function previewTable(tableId) {
-  return request({
-    url: '/tool/gen/preview/' + tableId,
-    method: 'get'
-  })
-}
-
-// 鍒犻櫎琛ㄦ暟鎹�
-export function delTable(tableId) {
-  return request({
-    url: '/tool/gen/' + tableId,
-    method: 'delete'
-  })
-}
-
-// 鐢熸垚浠g爜锛堣嚜瀹氫箟璺緞锛�
-export function genCode(tableName) {
-  return request({
-    url: '/tool/gen/genCode/' + tableName,
-    method: 'get'
-  })
-}
-
-// 鍚屾鏁版嵁搴�
-export function synchDb(tableName) {
-  return request({
-    url: '/tool/gen/synchDb/' + tableName,
-    method: 'get'
-  })
-}
diff --git a/src/router/index.js b/src/router/index.js
index 11b0dad..47f9884 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -205,34 +205,6 @@
     hidden: true,
     permissions: ["customer:edit"],
   },
-  {
-    path: "/monitor/job-log",
-    component: Layout,
-    hidden: true,
-    permissions: ["monitor:job:list"],
-    children: [
-      {
-        path: "index/:jobId(\\d+)",
-        component: () => import("@/views/monitor/job/log"),
-        name: "JobLog",
-        meta: { title: "璋冨害鏃ュ織", activeMenu: "/monitor/job" },
-      },
-    ],
-  },
-  {
-    path: "/tool/gen-edit",
-    component: Layout,
-    hidden: true,
-    permissions: ["tool:gen:edit"],
-    children: [
-      {
-        path: "index/:tableId(\\d+)",
-        component: () => import("@/views/tool/gen/editTable"),
-        name: "GenEdit",
-        meta: { title: "淇敼鐢熸垚閰嶇疆", activeMenu: "/tool/gen" },
-      },
-    ],
-  },
 ];
 
 // 闃叉杩炵画鐐瑰嚮澶氭璺敱鎶ラ敊
diff --git a/src/views/CNAS/externalService/supplierManage/index.vue b/src/views/CNAS/externalService/supplierManage/index.vue
index b16a2a7..ec7cba1 100644
--- a/src/views/CNAS/externalService/supplierManage/index.vue
+++ b/src/views/CNAS/externalService/supplierManage/index.vue
@@ -13,7 +13,7 @@
         </el-form>
       </div>
       <div>
-        <el-button size="medium" @click="exportExcel">瀵� 鍑�</el-button>
+<!--        <el-button size="medium" @click="exportExcel">瀵� 鍑�</el-button>-->
         <el-button size="medium" type="primary" @click="showDialog('add')">鏂� 澧�</el-button>
       </div>
     </div>
diff --git a/src/views/CNAS/personnel/personnelInfo/tabs/personnel-information.vue b/src/views/CNAS/personnel/personnelInfo/tabs/personnel-information.vue
index eac1bed..eab557f 100644
--- a/src/views/CNAS/personnel/personnelInfo/tabs/personnel-information.vue
+++ b/src/views/CNAS/personnel/personnelInfo/tabs/personnel-information.vue
@@ -688,6 +688,7 @@
   methods: {
     // 涓嬭浇妗f
     downPerson() {
+      console.log('this.clickNodeVal.userId',this.clickNodeVal.userId)
       exportPersonBasicInfoById({ id: this.clickNodeVal.userId }).then(res => {
         const blob = new Blob([res], { type: 'application/msword' });
         this.$download.saveAs(blob, '浜哄憳妗f.docx');
diff --git a/src/views/CNAS/personnel/personnelInfo/tabs/personnelTraining.vue b/src/views/CNAS/personnel/personnelInfo/tabs/personnelTraining.vue
index cb850e2..bb5600a 100644
--- a/src/views/CNAS/personnel/personnelInfo/tabs/personnelTraining.vue
+++ b/src/views/CNAS/personnel/personnelInfo/tabs/personnelTraining.vue
@@ -84,13 +84,13 @@
     </el-dialog>
     <el-dialog :visible.sync="uploadDia" title="鏁版嵁瀵煎叆" width="500px">
       <div style="display: flex;align-items: center;">
-        <div style="width: 70px">骞翠唤锛�</div>
+        <div style="width: 70px"><span class="required-span">* </span>骞翠唤锛�</div>
         <el-date-picker v-model="planYear" type="year" value-format="yyyy" clearable size="small" format="yyyy"
           placeholder="閫夋嫨骞�">
         </el-date-picker>
       </div>
       <div style="display: flex;align-items: center;margin: 10px 0">
-        <div style="width: 70px">瀹℃牳浜猴細</div>
+        <div style="width: 70px"><span class="required-span">* </span>瀹℃牳浜猴細</div>
         <el-select v-model="reviewerId" clearable filterable size="small" style="width: 50%;">
           <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.id">
           </el-option>
@@ -625,6 +625,14 @@
     },
     // 骞村害璁″垝-瀵煎叆
     submitUpload() {
+      if (!this.planYear) {
+        this.$message.error('璇烽�夋嫨骞翠唤')
+        return
+      }
+      if (!this.reviewerId) {
+        this.$message.error('璇烽�夋嫨瀹℃牳浜�')
+        return
+      }
       if (this.$refs.upload.uploadFiles.length == 0) {
         this.$message.error('鏈�夋嫨鏂囦欢')
         return
diff --git a/src/views/CNAS/resourceDemand/device/component/files.vue b/src/views/CNAS/resourceDemand/device/component/files.vue
index 2ec826d..bb72b97 100644
--- a/src/views/CNAS/resourceDemand/device/component/files.vue
+++ b/src/views/CNAS/resourceDemand/device/component/files.vue
@@ -264,7 +264,7 @@
         <el-col :span="7">
           <el-form :model="editData" label-width="140px" ref="ruleForm" :rules="rules1">
             <!-- 瀹為獙瀹ゅ垪琛� -->
-            <el-form-item label="鎵�灞為儴闂�:">
+            <el-form-item label="鎵�灞為儴闂�:" prop="subordinateDepartmentsId">
               <el-select v-model="editData.subordinateDepartmentsId" placeholder="璇烽�夋嫨" size="small" style="width:100%">
                 <el-option v-for="item in subordinateDepartmentsList" :key="item.value" :label="item.label"
                   :value="item.value">
@@ -512,6 +512,9 @@
         calibrationDate: [
           { required: true, message: '璇疯緭鍏ユ牎鍑嗗懆鏈�(鏈�)', trigger: 'blur' },
         ],
+        subordinateDepartmentsId: [
+          { required: true, message: '璇烽�夋嫨鎵�灞為儴闂�', trigger: 'change' },
+        ]
       },
       // dateForm: {
 
diff --git a/src/views/CNAS/resourceDemand/device/component/management.vue b/src/views/CNAS/resourceDemand/device/component/management.vue
index 77e4671..d090b6e 100644
--- a/src/views/CNAS/resourceDemand/device/component/management.vue
+++ b/src/views/CNAS/resourceDemand/device/component/management.vue
@@ -119,7 +119,7 @@
 				<el-col :span="7">
 					<el-form :label-position="labelPosition" :model="formData" label-width="140px" ref="ruleForm">
 						<!-- 瀹為獙瀹ゅ垪琛� -->
-						<el-form-item label="鎵�灞為儴闂�:">
+						<el-form-item label="鎵�灞為儴闂�:" required>
 							<el-select :disabled="isUp" v-model="formData.subordinateDepartmentsId" placeholder="璇烽�夋嫨" size="small"
 								style="width:100%">
 								<el-option v-for="item in subordinateDepartmentsList" :key="item.value" :label="item.label"
@@ -277,7 +277,7 @@
 				<el-col :span="7">
 					<el-form :label-position="labelPosition" :model="formData2" label-width="120px" ref="ruleForm">
 						<!-- 瀹為獙瀹ゅ垪琛� -->
-						<el-form-item label="鎵�灞為儴闂�:">
+						<el-form-item label="鎵�灞為儴闂�:" required>
 							<el-select v-model="formData2.subordinateDepartmentsId" placeholder="璇烽�夋嫨" size="small" style="width:100%">
 								<el-option v-for="item in subordinateDepartmentsList" :key="item.value" :label="item.label"
 									:value="item.value">
@@ -813,6 +813,10 @@
 				this.$message.error('鏈緭鍏ユ牎鍑嗘湁鏁堟湡')
 				return
 			}
+			if (!this.formData.subordinateDepartmentsId) {
+				this.$message.error('鏈�夋嫨鎵�灞為儴闂�')
+				return
+			}
 			if (this.formData.deviceStatus === '' || this.formData.deviceStatus === null) {
 				this.$message.error('鏈�夋嫨褰撳墠鐘舵��')
 				return
diff --git a/src/views/business/inspectionTask/components/EditInspectionItem.vue b/src/views/business/inspectionTask/components/EditInspectionItem.vue
index b38e59c..3b711e9 100644
--- a/src/views/business/inspectionTask/components/EditInspectionItem.vue
+++ b/src/views/business/inspectionTask/components/EditInspectionItem.vue
@@ -6,6 +6,16 @@
       width="80%"
       @close="editInspectionDia = false"
     >
+      <div>
+        <el-form :model="entity" :inline="true">
+          <el-form-item label="妫�楠岄」" prop="outputWorkTime">
+            <el-input v-model="entity.inspectionItem" clearable size="small"></el-input>
+          </el-form-item>
+          <el-form-item>
+            <el-button size="small" type="primary" @click="getTableData">鏌ヨ</el-button>
+          </el-form-item>
+        </el-form>
+      </div>
       <lims-table
         :column="editColumn"
         :table-data="editTableData"
@@ -70,6 +80,7 @@
       editInspectionDia: false,
       entity: {
         id: 0,
+        inspectionItem: ''
       },
       editColumn: [
         {
diff --git a/src/views/business/inspectionTask/components/viewManHourDia.vue b/src/views/business/inspectionTask/components/viewManHourDia.vue
new file mode 100644
index 0000000..54268fd
--- /dev/null
+++ b/src/views/business/inspectionTask/components/viewManHourDia.vue
@@ -0,0 +1,204 @@
+<template>
+  <div>
+    <el-dialog
+      :visible.sync="editInspectionDia"
+      title="鏌ョ湅宸ユ椂"
+      width="80%"
+      @close="editInspectionDia = false"
+    >
+      <div>
+        <el-form :model="entity" :inline="true">
+          <el-form-item label="妫�楠岄」" prop="outputWorkTime">
+            <el-input v-model="entity.inspectionItem" clearable size="small"></el-input>
+          </el-form-item>
+          <el-form-item>
+            <el-button size="small" type="primary" @click="getList0">鏌ヨ</el-button>
+          </el-form-item>
+        </el-form>
+      </div>
+      <lims-table :tableData="tableData0" :column="column0"
+                  :page="page0" :tableLoading="tableLoading"
+                  height="500" @pagination="pagination0"></lims-table>
+      <span slot="footer" class="dialog-footer" v-if="insState == 99">
+        <el-button @click="editInspectionDia = false">鍙� 娑�</el-button>
+        <el-button type="primary" @click="handleSubmit">纭� 瀹�</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog :visible.sync="editAskDia" title="淇敼" width="50%">
+      <el-form ref="form" :model="editForm" label-width="100px">
+        <el-form-item label="妫�娴嬩汉" prop="name">
+          <el-select v-model="editForm.name" clearable size="small">
+            <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.id">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="浜ч噺宸ユ椂" prop="outputWorkTime">
+          <el-input v-model="editForm.outputWorkTime" clearable size="small"></el-input>
+        </el-form-item>
+        <el-form-item label="鏃ユ湡" prop="dateTime">
+          <el-date-picker
+            v-model="editForm.dateTime"
+            placeholder="閫夋嫨鏃ユ湡"
+            size="small"
+            style="width: 100%;"
+            type="date"
+            format="yyyy-MM-dd"
+            value-format="yyyy-MM-dd">
+          </el-date-picker>
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="editAskDia = false">鍙� 娑�</el-button>
+        <el-button
+          :loading="handleEditLoading"
+          type="primary"
+          @click="handleEdit"
+        >纭� 瀹�</el-button
+        >
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import limsTable from "@/components/Table/lims-table.vue";
+import {
+  getWorkingHoursByOrderId, updateWorkingHours,
+} from "@/api/business/inspectionTask.js";
+import {selectUserCondition} from "@/api/system/user";
+export default {
+  name: "EditInspectionItem",
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: { limsTable },
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      editInspectionDia: false,
+      entity: {
+        orderId: 0,
+        inspectionItem: ''
+      },
+      insState: 0,
+      tableData0: [],
+      tableLoading: false,
+      column0: [
+        { label: "妫�娴嬩汉", prop: "name" },
+        { label: "妫�娴嬮」鍒嗙被", prop: "inspectionItemClass" },
+        { label: "妫�娴嬮」", prop: "inspectionItem", width: 110 },
+        { label: "妫�娴嬪瓙椤�", prop: "inspectionItemSubclass", width: 110  },
+        { label: "鏍峰搧缂栧彿", prop: "sample", width: 160 },
+        { label: "濮旀墭鍗曞彿", prop: "orderNo", width: 160 },
+        { label: "鐢电紗鏍囪瘑", prop: "cableTag" },
+        { label: "浜ч噺宸ユ椂", prop: "outputWorkTime" },
+        { label: "宸ユ椂鍒嗙粍", prop: "manHourGroup" },
+        { label: "鍗曚环", prop: "price" },
+        { label: "鏃ユ湡", prop: "dateTime" },
+        { label: "鍛ㄦ", prop: "week" },
+        { label: "鏄熸湡", prop: "weekDay" },
+        {
+          dataType: "action",
+          width: "80px",
+          label: "鎿嶄綔",
+          fixed: "right",
+          operation: [
+            {
+              name: "缂栬緫",
+              type: "text",
+              clickFun: (row) => {
+                this.editIns(row);
+              },
+              disabled: (row) => {
+                return this.insState == 3 || this.insState == 5 || this.insState == 99
+              },
+            },
+          ],
+        },
+      ],
+      page0: {
+        total: 0,
+        size: 10,
+        current: 1,
+      },
+      editAskDia: false,
+      editForm: {
+        id: "",
+        name: "",
+        outputWorkTime: "",
+        inspectionValueType: "",
+      },
+      handleEditLoading: false,
+      inspectionValueType: [],
+      responsibleOptions: []
+    };
+  },
+  mounted() {
+
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    showDialog(id, insState) {
+      this.insState = insState
+      this.editInspectionDia = true;
+      this.entity.orderId = id;
+      this.getList0();
+    },
+    getList0() {
+      this.tableLoading = true;
+      getWorkingHoursByOrderId({ ...this.entity, ...this.page0 })
+        .then((res) => {
+          this.tableLoading = false;
+          if (res.code === 200) {
+            this.tableData0 = res.data.records;
+            this.page0.total = res.data.total;
+          }
+        })
+        .catch((err) => {
+          this.tableLoading = false;
+        });
+    },
+    // 淇敼寮规
+    editIns(row) {
+      this.editAskDia = true;
+      this.editForm = { ...row };
+      this.getUserList()
+    },
+    // 鎻愪氦淇敼
+    handleEdit() {
+      this.handleEditLoading = true;
+      updateWorkingHours({...this.editForm})
+        .then((res) => {
+          this.handleEditLoading = false;
+          this.$message.success("淇敼鎴愬姛");
+          this.editAskDia = false;
+          this.getList0();
+        })
+        .catch(() => {
+          this.handleEditLoading = false;
+        });
+    },
+    // 纭宸ユ椂
+    handleSubmit () {
+      this.editInspectionDia = false;
+      this.$emit("submit");
+    },
+    pagination0({ page, limit }) {
+      this.page0.current = page;
+      this.page0.size = limit;
+      this.getList0();
+    },
+    // 鑾峰彇璐熻矗浜轰俊鎭帴鍙�
+    getUserList() {
+      selectUserCondition({ type: 1 }).then((res) => {
+        this.responsibleOptions = res.data;
+      })
+    }
+  },
+};
+</script>
+
+<style scoped>
+.pagination {
+  display: flex;
+  justify-content: space-between;
+}
+</style>
diff --git a/src/views/business/inspectionTask/index.vue b/src/views/business/inspectionTask/index.vue
index d7df57a..e03b541 100644
--- a/src/views/business/inspectionTask/index.vue
+++ b/src/views/business/inspectionTask/index.vue
@@ -181,6 +181,16 @@
     </el-dialog>
     <el-dialog :visible.sync="dataDialogVisible" title="鏁版嵁鏌ョ湅" width="80%">
       <div v-if="dataDialogVisible" style="height: 70vh; overflow-y: auto">
+        <div>
+          <el-form :model="entity" :inline="true">
+            <el-form-item label="妫�楠岄」" prop="outputWorkTime">
+              <el-input v-model="entity.inspectionItem" clearable size="small"></el-input>
+            </el-form-item>
+            <el-form-item>
+              <el-button size="small" type="primary" @click="getLookList">鏌ヨ</el-button>
+            </el-form-item>
+          </el-form>
+        </div>
         <lims-table :tableData="lookTableData" :column="lookColumn" :page="lookPage" :tableLoading="lookTableLoading"
           :height="'60vh'" @pagination="lookPagination" key="tableData1"></lims-table>
       </div>
@@ -232,7 +242,10 @@
       ref="showInfoDialog"
       :showInfoDialog="showInfoDialog"
     ></ShowInfo> -->
+    <!--淇敼妫�楠屽�煎脊妗�-->
     <edit-inspection-item ref="editInspectionItem"></edit-inspection-item>
+    <!--鏌ョ湅宸ユ椂寮规-->
+    <viewManHourDia ref="viewManHourDia"></viewManHourDia>
   </div>
 </template>
 
@@ -240,6 +253,7 @@
 import { getYearAndMonthAndDays } from "@/utils/date";
 import EditInspectionItem from "./components/EditInspectionItem.vue";
 import limsTable from "@/components/Table/lims-table.vue";
+import viewManHourDia from "./components/viewManHourDia.vue"
 import {
   claimInsOrderPlan,
   upPlanUser2,
@@ -258,6 +272,7 @@
   components: {
     EditInspectionItem,
     limsTable,
+    viewManHourDia
   },
   dicts: ["urgency_level", "inspection_task_state"],
   computed: {
@@ -428,9 +443,17 @@
                 this.editInspection(row);
               },
               disabled: (row) => {
-                return (
-                  row.userName == null || row.insState == 3 || row.insState == 5
-                );
+                return (row.userName == null || row.insState == 3 || row.insState == 5) && this.checkPermi(['update:product:onPlan'])
+              },
+            },
+            {
+              name: "鏌ョ湅宸ユ椂",
+              type: "text",
+              clickFun: (row) => {
+                this.viewManHour(row);
+              },
+              showHide: (row) => {
+                return this.checkPermi(['get:working:hours:byOrder'])
               },
             },
             {
@@ -498,6 +521,9 @@
         },
       ],
       // 鏁版嵁鏌ョ湅鐩稿叧瀛楁---寮�濮�
+      entity: {
+        inspectionItem: "",
+      },
       lookTableData: [],
       lookColumn: [
         {
@@ -607,7 +633,7 @@
     },
     getLookList() {
       this.lookTableLoading = true;
-      let param = { id: this.lookInfo.id, ...this.lookPage };
+      let param = { id: this.lookInfo.id, ...this.lookPage, inspectionItem: this.entity.inspectionItem };
       delete param.total;
       selectSampleAndProductByOrderId({ ...param })
         .then((res) => {
@@ -631,9 +657,9 @@
     editInspection(row) {
       this.$refs.editInspectionItem.showDialog(row.id);
     },
-    // 鍒锋柊椤甸潰
-    refreshView() {
-      this.getList();
+    // 鏌ョ湅宸ユ椂
+    viewManHour(row) {
+      this.$refs.viewManHourDia.showDialog(row.id, row.insState);
     },
     // 鏁版嵁鏌ョ湅
     handleDataLook(row) {
diff --git a/src/views/business/inspectionTask/inspection.vue b/src/views/business/inspectionTask/inspection.vue
index 182cff4..55af32e 100644
--- a/src/views/business/inspectionTask/inspection.vue
+++ b/src/views/business/inspectionTask/inspection.vue
@@ -23,7 +23,7 @@
           @click="openUnPassDialog('add')">涓嶅悎鏍煎鐞�</el-button>
         <el-button size="small" type="primary" @click="sampleVisible = true; uploadSample();">鏍峰搧鍒囨崲</el-button>
         <!--        <el-button v-if="state == 1" size="small" type="primary" @click="taskVisible = true">浠诲姟鍒囨崲</el-button>-->
-        <el-button v-if="state == 1" size="small" type="primary" @click="addVerifyDia = true">鎻愪氦</el-button>
+        <el-button v-if="state == 1" size="small" type="primary" @click="viewManHour">鎻愪氦</el-button>
         <!-- 澶嶆牳 -->
         <el-button v-if="state == 2" size="medium" type="primary" @click="openAddCheck">閫氳繃</el-button>
         <el-button v-if="state == 2" size="medium" @click="upInsReview(0)">涓嶉�氳繃</el-button>
@@ -509,6 +509,8 @@
       :unPassCheck="unPassCheck" @closeUnPassCheckDialog="closeUnPassCheckDialog" @refreshView="refreshView" />
     <purchase-verification v-if="purchaseDialog" ref="purchaseDialog" :orderId="orderId"
       :purchaseDialog="purchaseDialog" @resetPurchaseDialog="resetPurchaseDialog"></purchase-verification>
+    <!--鏌ョ湅宸ユ椂寮规-->
+    <viewManHourDia ref="viewManHourDia" @submit="openAddVerifyDia"></viewManHourDia>
   </div>
 </template>
 
@@ -542,9 +544,11 @@
 import DataWorker from '../../../DataWorker.worker';
 import html2canvas from "html2canvas";
 import { mapGetters } from "vuex";
+import viewManHourDia from "@/views/business/inspectionTask/components/viewManHourDia.vue";
 export default {
   name: 'Inspection',
   components: {
+    viewManHourDia,
     PurchaseVerification,
     AddUnPass,
     limsTable,
@@ -2582,6 +2586,13 @@
         this.$message.error("鏈緭鍏ヤ笉閫氳繃鍘熷洜");
       }
     },
+    // 鏌ョ湅宸ユ椂
+    viewManHour() {
+      this.$refs.viewManHourDia.showDialog(this.id, 99);
+    },
+    openAddVerifyDia () {
+      this.addVerifyDia = true;
+    },
     submit() {
       if (this.verifyUser === null || this.verifyUser === "") {
         this.$message.error("璇锋寚瀹氬鏍镐汉鍛�");
diff --git a/src/views/business/materialOrder/index.vue b/src/views/business/materialOrder/index.vue
index 4b4bbc4..51b698e 100644
--- a/src/views/business/materialOrder/index.vue
+++ b/src/views/business/materialOrder/index.vue
@@ -59,9 +59,11 @@
         <div class="table-tab">
           <div>
             <ul class="tab">
-              <li v-for="(m, i) in tabList" :key="m.value" :class="{ active: m.value === tabIndex }"
-                @click="handleTab(m)">
-                {{ m.label }}</li>
+              <li :class="{ active: tabIndex === 0 }" @click="handleTab(0)">寰呬笅鍗�</li>
+              <li :class="{ active: tabIndex === 1 }" @click="handleTab(1)">妫�楠屼腑</li>
+              <li :class="{ active: tabIndex === 2 }" @click="handleTab(2)">宸叉楠�</li>
+              <li :class="{ active: tabIndex === 4 }" @click="handleTab(4)">瀛e害妫�楠�</li>
+              <li :class="{ active: tabIndex === 3 }" v-if="checkPermi(['get:Ifs:ByAll'])" @click="handleTab(3)">鍏ㄩ儴</li>
             </ul>
           </div>
           <div>
@@ -359,7 +361,13 @@
       tableData2: [],
       tableLoading2: false,
       column2: [
-        { label: '濮旀墭缂栧彿', prop: 'entrustCode',width: "160px", },
+        {
+          label: '濮旀墭缂栧彿',
+          prop: 'entrustCode',
+          width: "160px",
+          dataType: "link",
+          linkMethod: "changeEntrustCode",
+        },
         {
           dataType: 'tag',
           label: '妫�楠岀姸鎬�',
@@ -404,7 +412,13 @@
         { label: '渚涘簲鍟嗗悕绉�', prop: 'supplierName' },
         { label: '涓嶅悎鏍兼弿杩�', prop: 'unqualifiedDesc' },
         { label: '鍏嶆', prop: 'isExemption' },
-        { label: '鏍峰搧鍚嶇О', prop: 'sampleName' },
+        {
+          label: '鏍峰搧鍚嶇О',
+          prop: 'sampleName',
+          width: "160px",
+          dataType: "link",
+          linkMethod: "selectAllByOne",
+        },
         { label: '鏍峰搧鍨嬪彿', prop: 'sampleModel' },
         { label: '妫�楠屼汉', prop: 'userName' },
         {
@@ -551,7 +565,13 @@
         { label: '渚涘簲鍟嗗悕绉�', prop: 'supplierName' },
         { label: '涓嶅悎鏍兼弿杩�', prop: 'unqualifiedDesc' },
         { label: '鍏嶆', prop: 'isExemption' },
-        { label: '鏍峰搧鍚嶇О', prop: 'sampleName' },
+        {
+          label: '鏍峰搧鍚嶇О',
+          prop: 'sampleName',
+          width: "160px",
+          dataType: "link",
+          linkMethod: "selectAllByOne",
+        },
         { label: '鏍峰搧鍨嬪彿', prop: 'sampleModel' },
         { label: '妫�楠屼汉', prop: 'userName' },
         {
@@ -651,7 +671,13 @@
         { label: '渚涘簲鍟嗗悕绉�', prop: 'supplierName' },
         { label: '涓嶅悎鏍兼弿杩�', prop: 'unqualifiedDesc' },
         { label: '鍏嶆', prop: 'isExemption' },
-        { label: '鏍峰搧鍚嶇О', prop: 'sampleName' },
+        {
+          label: '鏍峰搧鍚嶇О',
+          prop: 'sampleName',
+          width: "160px",
+          dataType: "link",
+          linkMethod: "selectAllByOne",
+        },
         { label: '鏍峰搧鍨嬪彿', prop: 'sampleModel' },
         { label: '妫�楠屼汉', prop: 'userName' },
         {
@@ -1204,7 +1230,7 @@
     },
     // 鍒囨崲涓嬪崟tab琛ㄦ牸
     handleTab(m) {
-      this.tabIndex = m.value;
+      this.tabIndex = m;
       this.refreshTable()
     },
     // 琛ㄦ牸閫夋嫨鏂规硶
diff --git a/src/views/business/productOrder/components/add.vue b/src/views/business/productOrder/components/add.vue
index 6681783..5f151a6 100644
--- a/src/views/business/productOrder/components/add.vue
+++ b/src/views/business/productOrder/components/add.vue
@@ -2,9 +2,7 @@
   <div class="app-container">
     <div v-show="!cableConfigShow&&!auxiliaryShow">
       <div style="display: flex;justify-content: space-between;align-items:center;">
-        <div>
-          濮旀墭鍗曚俊鎭�
-        </div>
+        <div>濮旀墭鍗曚俊鎭�</div>
         <div>
           <el-cascader
             v-model="addObj.quarterItemId"
@@ -41,96 +39,146 @@
     <div v-show="!cableConfigShow&&!auxiliaryShow" style="margin-top: 10px">
       <div class="search">
         <el-form ref="addObj" :inline="true" :model="addObj" :rules="addObjRules" label-width="108px" label-position="right">
-          <el-form-item label="濮旀墭缂栧彿:">
-            <el-input v-model="addObj.entrustCode" clearable disabled placeholder="绯荤粺鐢熸垚" size="small"></el-input>
-          </el-form-item>
-          <el-form-item label="妫�楠岀被鍒�:" prop="orderType">
-            <el-select v-model="addObj.orderType" :disabled="active>1&&tabIndex!=4" clearable size="small" style="width: 100%;">
-              <el-option v-for="(a, ai) in dict.type.check_type1" :key="ai" :label="a.label" :value="a.value"></el-option>
-            </el-select>
-          </el-form-item>
-          <el-form-item label="鍒跺崟浜�:">
-            <el-input v-model="addObj.custom" disabled size="small" clearable></el-input>
-          </el-form-item>
-          <el-form-item label="濮旀墭鍗曚綅:" prop="company">
-            <el-input v-model="addObj.company" disabled placeholder="閫夋嫨濮旀墭鍗曚綅" size="small" style="width: 208px">
-              <template slot="append">
-                <el-button slot="append" :disabled="active>1&&tabIndex!=4" icon="el-icon-search"
-                           @click="openCompanyList"></el-button>
-              </template>
-            </el-input>
-          </el-form-item>
-          <el-form-item label="鑱旂郴鏂瑰紡:" prop="phone">
-            <el-input v-model="addObj.phone" :disabled="active>1&&tabIndex!=4" clearable placeholder="閫夋嫨濮旀墭瀹㈡埛" size="small"></el-input>
-          </el-form-item>
-          <el-form-item label="绱ф�ョ▼搴�:" prop="type">
-            <el-select v-model="addObj.type" :disabled="active>1&&tabIndex!=4" clearable size="small">
-              <el-option v-for="(a, ai) in dict.type.urgency_level" :key="ai" :label="a.label" :value="a.value"></el-option>
-            </el-select>
-          </el-form-item>
-          <el-form-item label="鏍峰搧鍚嶇О:" prop="sample">
-            <el-input v-model="addObj.sample" disabled size="small" style="width: 208px">
-              <template slot="append"><el-button slot="append" :disabled="active>1&&tabIndex!=4" icon="el-icon-search"
-                                                 @click="selectStandardTree = true"></el-button></template>
-            </el-input>
-          </el-form-item>
-          <el-form-item label="鏍峰搧鏁伴噺:" prop="sampleNum" style="margin-right: 0">
-            <el-input-number v-model="addObj.sampleNum" :disabled="active>1" :max="100" :min="1" :precision="0"
-                             size="small" @change="addStandardTree"></el-input-number>
-          </el-form-item>
-          <el-form-item label="鏍峰搧鐘舵��:" prop="sampleStatus">
-            <el-select v-model="addObj.sampleStatus" :disabled="active>1&&tabIndex!=4" size="small">
-              <el-option v-for="(a,ai) in dict.type.sample_status_list" :key="ai" :label="a.label" :value="a.value"></el-option>
-            </el-select>
-          </el-form-item>
-          <el-form-item label="鎶芥鏁伴噺:" prop="testQuantity">
-            <el-input v-model="addObj.testQuantity" :disabled="active>1&&tabIndex!=4" clearable size="small"></el-input>
-          </el-form-item>
-          <el-form-item label="鏉ユ牱鏂瑰紡:" prop="formType">
-            <el-select v-model="addObj.formType" :disabled="active>1&&tabIndex!=4" size="small" clearable>
-              <el-option v-for="(a,ai) in dict.type.form_type" :key="ai" :label="a.label" :value="a.value"></el-option>
-            </el-select>
-          </el-form-item>
-          <el-form-item label="鐢熶骇鍗曚綅:" prop="production">
-            <el-input v-model="addObj.production" :disabled="active>1&&tabIndex!=4" clearable placeholder="璇疯緭鍏�"
-                      size="small"></el-input>
-          </el-form-item>
-          <el-form-item label="鐢熶骇鍗曚綅EN:" prop="productionEn">
-            <el-input v-model="addObj.productionEn" :disabled="active>1&&tabIndex!=4" clearable placeholder="璇疯緭鍏�"
-                      size="small"></el-input>
-          </el-form-item>
-          <el-form-item label="鏍峰搧澶勭悊鏂瑰紡:">
-            <el-radio-group v-model="addObj.processing" :disabled="active>1&&tabIndex!=4" size="mini">
-              <el-radio :label="0" border style="margin-right: 0">濮旀墭鍗曚綅鍙栧洖</el-radio>
-              <el-radio :label="1" border>瀹為獙瀹ゅ鐞�</el-radio>
-            </el-radio-group>
-          </el-form-item>
-          <el-form-item label="鏄惁鐣欐牱:">
-            <el-radio-group v-model="addObj.isLeave" border :disabled="active>1&&tabIndex!=4" size="mini">
-              <el-radio :label="0" border style="margin-right: 0">涓嶇暀鏍�</el-radio>
-              <el-radio :label="1" border>鐣欐牱</el-radio>
-            </el-radio-group>
-          </el-form-item>
-          <el-form-item label="鎶ュ憡鍙戦�佹柟寮�:">
-            <el-radio-group v-model="addObj.send" :disabled="active>1&&tabIndex!=4" size="mini">
-              <el-radio :label="1" border style="margin-right: 0">鑷彇</el-radio>
-              <el-radio :label="0" border>鍏朵粬</el-radio>
-            </el-radio-group>
-          </el-form-item>
-          <el-form-item label="濮旀墭浜�:">
-            <el-input v-model="addObj.prepareUser" :disabled="active>1&&tabIndex!=4" :placeholder="active>1 ? '' : '璇疯緭鍏�'" clearable size="small"></el-input>
-          </el-form-item>
-          <el-form-item label="濮旀墭浜鸿嫳鏂�:">
-            <el-input v-model="addObj.prepareUserEn" :disabled="active>1&&tabIndex!=4" :placeholder="active>1 ? '' : '璇疯緭鍏�'" clearable size="small"></el-input>
-          </el-form-item>
-          <el-form-item label="澶囨敞:">
-            <el-input v-model="addObj.remark" :autosize="{ minRows: 2, maxRows: 2}" :disabled="active>1&&tabIndex!=4" :placeholder="active>1 ? '' : '璇疯緭鍏�'" clearable
-                      size="small" style="width: 100%" type="textarea"></el-input>
-          </el-form-item>
-          <el-form-item label="澶囨敞鑻辨枃:">
-            <el-input v-model="addObj.remarkEn" :autosize="{ minRows: 2, maxRows: 2}" :disabled="active>1&&tabIndex!=4" :placeholder="active>1 ? '' : '璇疯緭鍏�'" clearable
-                      size="small" type="textarea"></el-input>
-          </el-form-item>
+          <el-row>
+            <el-col :span="6">
+              <el-form-item label="濮旀墭缂栧彿:">
+                <el-input v-model="addObj.entrustCode" clearable disabled placeholder="绯荤粺鐢熸垚" size="small"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="妫�楠岀被鍒�:" prop="orderType">
+                <el-select v-model="addObj.orderType" :disabled="active>1&&tabIndex!=4" clearable size="small" style="width: 100%;">
+                  <el-option v-for="(a, ai) in dict.type.check_type1" :key="ai" :label="a.label" :value="a.value"></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="鍒跺崟浜�:">
+                <el-input v-model="addObj.custom" disabled size="small" clearable></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="濮旀墭鍗曚綅:" prop="company">
+                <el-input v-model="addObj.company" disabled placeholder="閫夋嫨濮旀墭鍗曚綅" size="small" style="width: 208px">
+                  <template slot="append">
+                    <el-button slot="append" :disabled="active>1&&tabIndex!=4" icon="el-icon-search"
+                               @click="openCompanyList"></el-button>
+                  </template>
+                </el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :span="6">
+              <el-form-item label="鑱旂郴鏂瑰紡:" prop="phone">
+                <el-input v-model="addObj.phone" :disabled="active>1&&tabIndex!=4" clearable placeholder="閫夋嫨濮旀墭瀹㈡埛" size="small"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="绱ф�ョ▼搴�:" prop="type">
+                <el-select v-model="addObj.type" :disabled="active>1&&tabIndex!=4" clearable size="small">
+                  <el-option v-for="(a, ai) in dict.type.urgency_level" :key="ai" :label="a.label" :value="a.value"></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="鏍峰搧鍚嶇О:" prop="sample">
+                <el-input v-model="addObj.sample" disabled size="small" style="width: 208px">
+                  <template slot="append"><el-button slot="append" :disabled="active>1&&tabIndex!=4" icon="el-icon-search"
+                                                     @click="selectStandardTree = true"></el-button></template>
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="鏍峰搧鏁伴噺:" prop="sampleNum" style="margin-right: 0">
+                <el-input-number v-model="addObj.sampleNum" :disabled="active>1" :max="100" :min="1" :precision="0"
+                                 size="small" @change="addStandardTree"></el-input-number>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :span="6">
+              <el-form-item label="鏍峰搧鐘舵��:" prop="sampleStatus">
+                <el-select v-model="addObj.sampleStatus" :disabled="active>1&&tabIndex!=4" size="small">
+                  <el-option v-for="(a,ai) in dict.type.sample_status_list" :key="ai" :label="a.label" :value="a.value"></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="鎶芥鏁伴噺:" prop="testQuantity">
+                <el-input v-model="addObj.testQuantity" :disabled="active>1&&tabIndex!=4" clearable size="small"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="鏉ユ牱鏂瑰紡:" prop="formType">
+                <el-select v-model="addObj.formType" :disabled="active>1&&tabIndex!=4" size="small" clearable>
+                  <el-option v-for="(a,ai) in dict.type.form_type" :key="ai" :label="a.label" :value="a.value"></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="鐢熶骇鍗曚綅:" prop="production">
+                <el-input v-model="addObj.production" :disabled="active>1&&tabIndex!=4" clearable placeholder="璇疯緭鍏�"
+                          size="small"></el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :span="6">
+              <el-form-item label="鐢熶骇鍗曚綅EN:" prop="productionEn">
+                <el-input v-model="addObj.productionEn" :disabled="active>1&&tabIndex!=4" clearable placeholder="璇疯緭鍏�"
+                          size="small"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="鏍峰搧澶勭悊鏂瑰紡:">
+                <el-radio-group v-model="addObj.processing" :disabled="active>1&&tabIndex!=4" size="mini">
+                  <el-radio :label="0" border style="margin-right: 0">濮旀墭鍗曚綅鍙栧洖</el-radio>
+                  <el-radio :label="1" border>瀹為獙瀹ゅ鐞�</el-radio>
+                </el-radio-group>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="鏄惁鐣欐牱:">
+                <el-radio-group v-model="addObj.isLeave" border :disabled="active>1&&tabIndex!=4" size="mini">
+                  <el-radio :label="0" border style="margin-right: 0">涓嶇暀鏍�</el-radio>
+                  <el-radio :label="1" border>鐣欐牱</el-radio>
+                </el-radio-group>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="鎶ュ憡鍙戦�佹柟寮�:">
+                <el-radio-group v-model="addObj.send" :disabled="active>1&&tabIndex!=4" size="mini">
+                  <el-radio :label="1" border style="margin-right: 0">鑷彇</el-radio>
+                  <el-radio :label="0" border>鍏朵粬</el-radio>
+                </el-radio-group>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :span="6">
+              <el-form-item label="濮旀墭浜�:">
+                <el-input v-model="addObj.prepareUser" :disabled="active>1&&tabIndex!=4" :placeholder="active>1 ? '' : '璇疯緭鍏�'" clearable size="small"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="濮旀墭浜鸿嫳鏂�:">
+                <el-input v-model="addObj.prepareUserEn" :disabled="active>1&&tabIndex!=4" :placeholder="active>1 ? '' : '璇疯緭鍏�'" clearable size="small"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="澶囨敞:">
+                <el-input v-model="addObj.remark" :autosize="{ minRows: 2, maxRows: 2}" :disabled="active>1&&tabIndex!=4" :placeholder="active>1 ? '' : '璇疯緭鍏�'" clearable
+                          size="small" style="width: 100%" type="textarea"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="澶囨敞鑻辨枃:">
+                <el-input v-model="addObj.remarkEn" :autosize="{ minRows: 2, maxRows: 2}" :disabled="active>1&&tabIndex!=4" :placeholder="active>1 ? '' : '璇疯緭鍏�'" clearable
+                          size="small" type="textarea"></el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
           <el-row>
             <el-col :span="6">
               <el-form-item label="鏍峰搧鍚嶇О:">
@@ -154,10 +202,10 @@
         </el-form>
       </div>
       <div>
-        <div style="display: flex;justify-content: space-between;">
+        <div style="display: flex;justify-content: space-between;background-color: #F5F7FB;margin-bottom: 6px">
           <div v-if="active==1">
             <el-form :inline="true" :model="addObj1" label-width="90px">
-              <el-form-item label="鏍峰搧鍨嬪彿:" style="margin-bottom: 6px">
+              <el-form-item label="鏍峰搧鍨嬪彿:" style="margin-bottom: 6px;margin-top: 6px">
                 <el-select v-model="model" :placeholder="active>1 ? '' : '璇疯緭鍏�'"
                            allow-create clearable default-first-option filterable
                            size="small"
@@ -166,7 +214,7 @@
                   </el-option>
                 </el-select>
               </el-form-item>
-              <el-form-item label="妫�楠屾爣鍑�:">
+              <el-form-item label="妫�楠屾爣鍑�:" style="margin-bottom: 6px;margin-top: 6px">
                 <el-select v-model="standardMethodListId" :loading="methodLoad"
                            :placeholder="active>1 ? '' : '璇疯緭鍏�'" clearable size="small"
                            @change="changeStandardMethodListId" @focus="methodFocus">
@@ -176,7 +224,7 @@
               </el-form-item>
             </el-form>
           </div>
-          <div style="display: flex;align-items: center;margin-bottom: 10px">
+          <div style="display: flex;align-items: center;margin-bottom: 6px;margin-top: 6px">
             <span style="width: 150px;font-size: 14px;text-align: right;">鐗规畩鏍囧噯锛�</span>
             <el-input v-model="specialStandardMethod" :disabled="!isSpecial" clearable size="small"></el-input>
             <el-button v-show="active==1" size="small" style="margin-left: 10px"
@@ -248,6 +296,7 @@
           </el-table-column>
         </el-table>
         <el-table ref="productTable" v-loading="getProductLoad" :data="productList" :row-class-name="tableRowClassName" border class="el-table"
+                  :key="upIndex"
           max-height="400px" style="margin-bottom: 10px;" tooltip-effect="dark"
           @select="selectOne" @selection-change="selectProduct" @select-all="handleAll">
           <el-table-column v-if="active==1" :selectable="selectable0" type="selection" width="65"></el-table-column>
@@ -686,6 +735,7 @@
       sampleViewEn: null,
       expandedKeys: [],
       sampleList: [],
+      upIndex: 0,
       sampleIds: [],
       methodList: [],
       addSampleDia: false,
@@ -847,6 +897,10 @@
       // 缂栬緫瑕佹眰鍊艰〃鏍�
       editSpecial () {
         this.isSpecial = true
+        this.$nextTick(() => {
+          this.$refs.productTable.doLayout();
+          this.upIndex++
+        });
       },
       getQuarterOnOrderList () {
         getQuarterOnOrder().then(res => {
@@ -1709,6 +1763,7 @@
           this.$refs.sampleTable.setCurrentRow(row)
           this.$nextTick(() => {
             this.$refs.productTable.doLayout();
+            this.upIndex++
           });
           setTimeout(() => {
             this.productList.forEach(a => {
diff --git a/src/views/business/productOrder/index.vue b/src/views/business/productOrder/index.vue
index 61af313..a7a22f7 100644
--- a/src/views/business/productOrder/index.vue
+++ b/src/views/business/productOrder/index.vue
@@ -46,8 +46,13 @@
     <div class="table-tab">
       <div>
         <ul class="tab">
-          <li v-for="(m, i) in tabList" :key="i + 'afgh'" :class="{ active: i == tabIndex }" @click="handleTab(m, i)">{{ m.label }}
-          </li>
+          <li :class="{ active: tabIndex === 0 }" v-if="checkPermi(['get:insOrder:reviewed'])" @click="handleTab(0)">寰呭鏍�</li>
+          <li :class="{ active: tabIndex === 1 }" v-if="checkPermi(['get:insOrder:checkout'])" @click="handleTab(1)">妫�楠屼腑</li>
+          <li :class="{ active: tabIndex === 2 }" v-if="checkPermi(['get:insOrder:customerOrdered'])" @click="handleTab(2)">濮旀墭宸叉</li>
+          <li :class="{ active: tabIndex === 3 }" v-if="checkPermi(['get:insOrder:spotCheck'])" @click="handleTab(3)">鎶芥牱宸叉</li>
+          <li :class="{ active: tabIndex === 4 }" v-if="checkPermi(['get:insOrder:sendBack'])" @click="handleTab(4)">閫�鍥�</li>
+          <li :class="{ active: tabIndex === 5 }" v-if="checkPermi(['get:insOrder:revocation'])" @click="handleTab(5)">鎾ら攢</li>
+          <li :class="{ active: tabIndex === 6 }" v-if="checkPermi(['get:insOrder:all'])" @click="handleTab(6)">鍏ㄩ儴</li>
         </ul>
       </div>
       <div>
@@ -55,7 +60,7 @@
           @click="downLoad">瀵煎嚭</el-button>
         <el-button v-if="tabIndex === 1" size="small" type="primary" @click="openAddIns">娣诲姞妫�楠岄」</el-button>
         <el-button size="small" type="primary" @click="openPrint">鏍囩鎵撳嵃</el-button>
-        <el-button size="small" type="primary" @click="playOrder(1)">涓嬪崟</el-button>
+        <el-button v-if="checkPermi(['add:insOrder'])" size="small" type="primary" @click="playOrder(1)">涓嬪崟</el-button>
       </div>
     </div>
     <div class="table">
@@ -168,8 +173,7 @@
         <span slot="footer" class="dialog-footer">
           <el-row>
             <el-button @click="handleNo">{{ deleteTilte == '鎾ら攢' ? '鍙� 娑�' : '涓嶉�氳繃' }}</el-button>
-            <el-button :loading="printLoading" type="primary" @click="submitDelete">{{ deleteTilte == '鎾ら攢' ? '纭� 瀹�' : '閫�
-              杩�'}}</el-button>
+            <el-button :loading="printLoading" type="primary" @click="submitDelete">{{ deleteTilte == '鎾ら攢' ? '纭� 瀹�' : '閫氳繃'}}</el-button>
           </el-row>
         </span>
       </el-dialog>
@@ -1176,7 +1180,7 @@
     handleVerify(row) {
       this.$router.push({ path: "/productOrder/add", query: { examine: 1, active: 3, currentId: row.id } });
     },
-    handleTab(m, i) {
+    handleTab(i) {
       this.tabIndex = i;
       this.refreshTable()
     },
diff --git a/src/views/business/rawMaterialInspection/index.vue b/src/views/business/rawMaterialInspection/index.vue
index 0a6bcdf..c1bf5c8 100644
--- a/src/views/business/rawMaterialInspection/index.vue
+++ b/src/views/business/rawMaterialInspection/index.vue
@@ -54,8 +54,10 @@
       <div class="table-tab">
         <div>
           <ul class="tab">
-            <li v-for="m in tabList" :key="m.value" :class="{ active: m.value === tabIndex }" @click="handleTab(m)">
-              {{ m.label }}</li>
+            <li :class="{ active: tabIndex === 0 }" @click="handleTab(0)">寰呮姤妫�</li>
+            <li :class="{ active: tabIndex === 1 }" @click="handleTab(1)">寰呬笅鍗�</li>
+            <li :class="{ active: tabIndex === 3 }" @click="handleTab(3)">宸插畬鎴�</li>
+            <li :class="{ active: tabIndex === 4 }" v-if="checkPermi(['get:Ifs:ByAll'])" @click="handleTab(4)">鍏ㄩ儴</li>
           </ul>
         </div>
         <div>
@@ -525,7 +527,7 @@
   methods: {
     // 鍒囨崲tab琛ㄦ牸
     handleTab(m) {
-      this.tabIndex = m.value;
+      this.tabIndex = m;
       this.refreshTable()
     },
     // 鏌ヨ鍥炶皟
diff --git a/src/views/monitor/job/index.vue b/src/views/monitor/job/index.vue
deleted file mode 100644
index d13394c..0000000
--- a/src/views/monitor/job/index.vue
+++ /dev/null
@@ -1,513 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
-      <el-form-item label="浠诲姟鍚嶇О" prop="jobName">
-        <el-input
-          v-model="queryParams.jobName"
-          placeholder="璇疯緭鍏ヤ换鍔″悕绉�"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="浠诲姟缁勫悕" prop="jobGroup">
-        <el-select v-model="queryParams.jobGroup" placeholder="璇烽�夋嫨浠诲姟缁勫悕" clearable>
-          <el-option
-            v-for="dict in dict.type.sys_job_group"
-            :key="dict.value"
-            :label="dict.label"
-            :value="dict.value"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="浠诲姟鐘舵��" prop="status">
-        <el-select v-model="queryParams.status" placeholder="璇烽�夋嫨浠诲姟鐘舵��" clearable>
-          <el-option
-            v-for="dict in dict.type.sys_job_status"
-            :key="dict.value"
-            :label="dict.label"
-            :value="dict.value"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鏌� 璇�</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲� 缃�</el-button>
-      </el-form-item>
-    </el-form>
-
-    <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button
-          type="primary"
-          plain
-          icon="el-icon-plus"
-          size="mini"
-          @click="handleAdd"
-          v-hasPermi="['monitor:job:add']"
-        >鏂板</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="success"
-          plain
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['monitor:job:edit']"
-        >淇敼</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="danger"
-          plain
-          icon="el-icon-delete"
-          size="mini"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['monitor:job:remove']"
-        >鍒犻櫎</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="warning"
-          plain
-          icon="el-icon-download"
-          size="mini"
-          @click="handleExport"
-          v-hasPermi="['monitor:job:export']"
-        >瀵煎嚭</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="info"
-          plain
-          icon="el-icon-s-operation"
-          size="mini"
-          @click="handleJobLog"
-          v-hasPermi="['monitor:job:query']"
-        >鏃ュ織</el-button>
-      </el-col>
-      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
-    </el-row>
-
-    <el-table v-loading="loading" :data="jobList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="浠诲姟缂栧彿" width="100" align="center" prop="jobId" />
-      <el-table-column label="浠诲姟鍚嶇О" align="center" prop="jobName" :show-overflow-tooltip="true" />
-      <el-table-column label="浠诲姟缁勫悕" align="center" prop="jobGroup">
-        <template slot-scope="scope">
-          <dict-tag :options="dict.type.sys_job_group" :value="scope.row.jobGroup"/>
-        </template>
-      </el-table-column>
-      <el-table-column label="璋冪敤鐩爣瀛楃涓�" align="center" prop="invokeTarget" :show-overflow-tooltip="true" />
-      <el-table-column label="cron鎵ц琛ㄨ揪寮�" align="center" prop="cronExpression" :show-overflow-tooltip="true" />
-      <el-table-column label="鐘舵��" align="center">
-        <template slot-scope="scope">
-          <el-switch
-            v-model="scope.row.status"
-            active-value="0"
-            inactive-value="1"
-            @change="handleStatusChange(scope.row)"
-          ></el-switch>
-        </template>
-      </el-table-column>
-      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            @click="handleUpdate(scope.row)"
-            v-hasPermi="['monitor:job:edit']"
-          >淇敼</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['monitor:job:remove']"
-          >鍒犻櫎</el-button>
-          <el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['monitor:job:changeStatus', 'monitor:job:query']">
-            <el-button size="mini" type="text" icon="el-icon-d-arrow-right">鏇村</el-button>
-            <el-dropdown-menu slot="dropdown">
-              <el-dropdown-item command="handleRun" icon="el-icon-caret-right"
-                v-hasPermi="['monitor:job:changeStatus']">鎵ц涓�娆�</el-dropdown-item>
-              <el-dropdown-item command="handleView" icon="el-icon-view"
-                v-hasPermi="['monitor:job:query']">浠诲姟璇︾粏</el-dropdown-item>
-              <el-dropdown-item command="handleJobLog" icon="el-icon-s-operation"
-                v-hasPermi="['monitor:job:query']">璋冨害鏃ュ織</el-dropdown-item>
-            </el-dropdown-menu>
-          </el-dropdown>
-        </template>
-      </el-table-column>
-    </el-table>
-
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
-
-    <!-- 娣诲姞鎴栦慨鏀瑰畾鏃朵换鍔″璇濇 -->
-    <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
-      <el-form ref="form" :model="form" :rules="rules" label-width="120px">
-        <el-row>
-          <el-col :span="12">
-            <el-form-item label="浠诲姟鍚嶇О" prop="jobName">
-              <el-input v-model="form.jobName" placeholder="璇疯緭鍏ヤ换鍔″悕绉�" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="浠诲姟鍒嗙粍" prop="jobGroup">
-              <el-select v-model="form.jobGroup" placeholder="璇烽�夋嫨浠诲姟鍒嗙粍">
-                <el-option
-                  v-for="dict in dict.type.sys_job_group"
-                  :key="dict.value"
-                  :label="dict.label"
-                  :value="dict.value"
-                ></el-option>
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="24">
-            <el-form-item prop="invokeTarget">
-              <span slot="label">
-                璋冪敤鏂规硶
-                <el-tooltip placement="top">
-                  <div slot="content">
-                    Bean璋冪敤绀轰緥锛歳yTask.ryParams('ry')
-                    <br />Class绫昏皟鐢ㄧず渚嬶細com.ruoyi.quartz.task.RyTask.ryParams('ry')
-                    <br />鍙傛暟璇存槑锛氭敮鎸佸瓧绗︿覆锛屽竷灏旂被鍨嬶紝闀挎暣鍨嬶紝娴偣鍨嬶紝鏁村瀷
-                  </div>
-                  <i class="el-icon-question"></i>
-                </el-tooltip>
-              </span>
-              <el-input v-model="form.invokeTarget" placeholder="璇疯緭鍏ヨ皟鐢ㄧ洰鏍囧瓧绗︿覆" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="24">
-            <el-form-item label="cron琛ㄨ揪寮�" prop="cronExpression">
-              <el-input v-model="form.cronExpression" placeholder="璇疯緭鍏ron鎵ц琛ㄨ揪寮�">
-                <template slot="append">
-                  <el-button type="primary" @click="handleShowCron">
-                    鐢熸垚琛ㄨ揪寮�
-                    <i class="el-icon-time el-icon--right"></i>
-                  </el-button>
-                </template>
-              </el-input>
-            </el-form-item>
-          </el-col>
-          <el-col :span="24" v-if="form.jobId !== undefined">
-            <el-form-item label="鐘舵��">
-              <el-radio-group v-model="form.status">
-                <el-radio
-                  v-for="dict in dict.type.sys_job_status"
-                  :key="dict.value"
-                  :label="dict.value"
-                >{{dict.label}}</el-radio>
-              </el-radio-group>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="鎵ц绛栫暐" prop="misfirePolicy">
-              <el-radio-group v-model="form.misfirePolicy" size="small">
-                <el-radio-button label="1">绔嬪嵆鎵ц</el-radio-button>
-                <el-radio-button label="2">鎵ц涓�娆�</el-radio-button>
-                <el-radio-button label="3">鏀惧純鎵ц</el-radio-button>
-              </el-radio-group>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="鏄惁骞跺彂" prop="concurrent">
-              <el-radio-group v-model="form.concurrent" size="small">
-                <el-radio-button label="0">鍏佽</el-radio-button>
-                <el-radio-button label="1">绂佹</el-radio-button>
-              </el-radio-group>
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-
-    <el-dialog title="Cron琛ㄨ揪寮忕敓鎴愬櫒" :visible.sync="openCron" append-to-body destroy-on-close class="scrollbar">
-      <crontab @hide="openCron=false" @fill="crontabFill" :expression="expression"></crontab>
-    </el-dialog>
-
-    <!-- 浠诲姟鏃ュ織璇︾粏 -->
-    <el-dialog title="浠诲姟璇︾粏" :visible.sync="openView" width="700px" append-to-body>
-      <el-form ref="form" :model="form" label-width="120px" size="mini">
-        <el-row>
-          <el-col :span="12">
-            <el-form-item label="浠诲姟缂栧彿锛�">{{ form.jobId }}</el-form-item>
-            <el-form-item label="浠诲姟鍚嶇О锛�">{{ form.jobName }}</el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="浠诲姟鍒嗙粍锛�">{{ jobGroupFormat(form) }}</el-form-item>
-            <el-form-item label="鍒涘缓鏃堕棿锛�">{{ form.createTime }}</el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="cron琛ㄨ揪寮忥細">{{ form.cronExpression }}</el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="涓嬫鎵ц鏃堕棿锛�">{{ parseTime(form.nextValidTime) }}</el-form-item>
-          </el-col>
-          <el-col :span="24">
-            <el-form-item label="璋冪敤鐩爣鏂规硶锛�">{{ form.invokeTarget }}</el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="浠诲姟鐘舵�侊細">
-              <div v-if="form.status == 0">姝e父</div>
-              <div v-else-if="form.status == 1">鏆傚仠</div>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="鏄惁骞跺彂锛�">
-              <div v-if="form.concurrent == 0">鍏佽</div>
-              <div v-else-if="form.concurrent == 1">绂佹</div>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="鎵ц绛栫暐锛�">
-              <div v-if="form.misfirePolicy == 0">榛樿绛栫暐</div>
-              <div v-else-if="form.misfirePolicy == 1">绔嬪嵆鎵ц</div>
-              <div v-else-if="form.misfirePolicy == 2">鎵ц涓�娆�</div>
-              <div v-else-if="form.misfirePolicy == 3">鏀惧純鎵ц</div>
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button @click="openView = false">鍏� 闂�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import { listJob, getJob, delJob, addJob, updateJob, runJob, changeJobStatus } from "@/api/monitor/job";
-import Crontab from '@/components/Crontab'
-
-export default {
-  components: { Crontab },
-  name: "Job",
-  dicts: ['sys_job_group', 'sys_job_status'],
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鏄剧ず鎼滅储鏉′欢
-      showSearch: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 瀹氭椂浠诲姟琛ㄦ牸鏁版嵁
-      jobList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 鏄惁鏄剧ず璇︾粏寮瑰嚭灞�
-      openView: false,
-      // 鏄惁鏄剧ずCron琛ㄨ揪寮忓脊鍑哄眰
-      openCron: false,
-      // 浼犲叆鐨勮〃杈惧紡
-      expression: "",
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        jobName: undefined,
-        jobGroup: undefined,
-        status: undefined
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        jobName: [
-          { required: true, message: "浠诲姟鍚嶇О涓嶈兘涓虹┖", trigger: "blur" }
-        ],
-        invokeTarget: [
-          { required: true, message: "璋冪敤鐩爣瀛楃涓蹭笉鑳戒负绌�", trigger: "blur" }
-        ],
-        cronExpression: [
-          { required: true, message: "cron鎵ц琛ㄨ揪寮忎笉鑳戒负绌�", trigger: "blur" }
-        ]
-      }
-    };
-  },
-  created() {
-    this.getList();
-  },
-  methods: {
-    /** 鏌ヨ瀹氭椂浠诲姟鍒楄〃 */
-    getList() {
-      this.loading = true;
-      listJob(this.queryParams).then(response => {
-        this.jobList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    // 浠诲姟缁勫悕瀛楀吀缈昏瘧
-    jobGroupFormat(row, column) {
-      return this.selectDictLabel(this.dict.type.sys_job_group, row.jobGroup);
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        jobId: undefined,
-        jobName: undefined,
-        jobGroup: undefined,
-        invokeTarget: undefined,
-        cronExpression: undefined,
-        misfirePolicy: 1,
-        concurrent: 1,
-        status: "0"
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.jobId);
-      this.single = selection.length != 1;
-      this.multiple = !selection.length;
-    },
-    // 鏇村鎿嶄綔瑙﹀彂
-    handleCommand(command, row) {
-      switch (command) {
-        case "handleRun":
-          this.handleRun(row);
-          break;
-        case "handleView":
-          this.handleView(row);
-          break;
-        case "handleJobLog":
-          this.handleJobLog(row);
-          break;
-        default:
-          break;
-      }
-    },
-    // 浠诲姟鐘舵�佷慨鏀�
-    handleStatusChange(row) {
-      let text = row.status === "0" ? "鍚敤" : "鍋滅敤";
-      this.$modal.confirm('纭瑕�"' + text + '""' + row.jobName + '"浠诲姟鍚楋紵').then(function() {
-        return changeJobStatus(row.jobId, row.status);
-      }).then(() => {
-        this.$modal.msgSuccess(text + "鎴愬姛");
-      }).catch(function() {
-        row.status = row.status === "0" ? "1" : "0";
-      });
-    },
-    /* 绔嬪嵆鎵ц涓�娆� */
-    handleRun(row) {
-      this.$modal.confirm('纭瑕佺珛鍗虫墽琛屼竴娆�"' + row.jobName + '"浠诲姟鍚楋紵').then(function() {
-        return runJob(row.jobId, row.jobGroup);
-      }).then(() => {
-        this.$modal.msgSuccess("鎵ц鎴愬姛");
-      }).catch(() => {});
-    },
-    /** 浠诲姟璇︾粏淇℃伅 */
-    handleView(row) {
-      getJob(row.jobId).then(response => {
-        this.form = response.data;
-        this.openView = true;
-      });
-    },
-    /** cron琛ㄨ揪寮忔寜閽搷浣� */
-    handleShowCron() {
-      this.expression = this.form.cronExpression;
-      this.openCron = true;
-    },
-    /** 纭畾鍚庡洖浼犲�� */
-    crontabFill(value) {
-      this.form.cronExpression = value;
-    },
-    /** 浠诲姟鏃ュ織鍒楄〃鏌ヨ */
-    handleJobLog(row) {
-      const jobId = row.jobId || 0;
-      this.$router.push('/monitor/job-log/index/' + jobId)
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "娣诲姞浠诲姟";
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      const jobId = row.jobId || this.ids;
-      getJob(jobId).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "淇敼浠诲姟";
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function() {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.jobId != undefined) {
-            updateJob(this.form).then(response => {
-              this.$modal.msgSuccess("淇敼鎴愬姛");
-              this.open = false;
-              this.getList();
-            });
-          } else {
-            addJob(this.form).then(response => {
-              this.$modal.msgSuccess("鏂板鎴愬姛");
-              this.open = false;
-              this.getList();
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const jobIds = row.jobId || this.ids;
-      this.$modal.confirm('鏄惁纭鍒犻櫎瀹氭椂浠诲姟缂栧彿涓�"' + jobIds + '"鐨勬暟鎹」锛�').then(function() {
-        return delJob(jobIds);
-      }).then(() => {
-        this.getList();
-        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
-      }).catch(() => {});
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      this.download('monitor/job/export', {
-        ...this.queryParams
-      }, `job_${new Date().getTime()}.xlsx`)
-    }
-  }
-};
-</script>
diff --git a/src/views/monitor/job/log.vue b/src/views/monitor/job/log.vue
deleted file mode 100644
index 8f044b3..0000000
--- a/src/views/monitor/job/log.vue
+++ /dev/null
@@ -1,295 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
-      <el-form-item label="浠诲姟鍚嶇О" prop="jobName">
-        <el-input
-          v-model="queryParams.jobName"
-          placeholder="璇疯緭鍏ヤ换鍔″悕绉�"
-          clearable
-          style="width: 240px"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="浠诲姟缁勫悕" prop="jobGroup">
-        <el-select
-          v-model="queryParams.jobGroup"
-          placeholder="璇烽�夋嫨浠诲姟缁勫悕"
-          clearable
-          style="width: 240px"
-        >
-          <el-option
-            v-for="dict in dict.type.sys_job_group"
-            :key="dict.value"
-            :label="dict.label"
-            :value="dict.value"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="鎵ц鐘舵��" prop="status">
-        <el-select
-          v-model="queryParams.status"
-          placeholder="璇烽�夋嫨鎵ц鐘舵��"
-          clearable
-          style="width: 240px"
-        >
-          <el-option
-            v-for="dict in dict.type.sys_common_status"
-            :key="dict.value"
-            :label="dict.label"
-            :value="dict.value"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="鎵ц鏃堕棿">
-        <el-date-picker
-          v-model="dateRange"
-          style="width: 240px"
-          value-format="yyyy-MM-dd"
-          type="daterange"
-          range-separator="-"
-          start-placeholder="寮�濮嬫棩鏈�"
-          end-placeholder="缁撴潫鏃ユ湡"
-        ></el-date-picker>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鏌� 璇�</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲� 缃�</el-button>
-      </el-form-item>
-    </el-form>
-
-    <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button
-          type="danger"
-          plain
-          icon="el-icon-delete"
-          size="mini"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['monitor:job:remove']"
-        >鍒犻櫎</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="danger"
-          plain
-          icon="el-icon-delete"
-          size="mini"
-          @click="handleClean"
-          v-hasPermi="['monitor:job:remove']"
-        >娓呯┖</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="warning"
-          plain
-          icon="el-icon-download"
-          size="mini"
-          @click="handleExport"
-          v-hasPermi="['monitor:job:export']"
-        >瀵煎嚭</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="warning"
-          plain
-          icon="el-icon-close"
-          size="mini"
-          @click="handleClose"
-        >鍏抽棴</el-button>
-      </el-col>
-      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
-    </el-row>
-
-    <el-table v-loading="loading" :data="jobLogList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="鏃ュ織缂栧彿" width="80" align="center" prop="jobLogId" />
-      <el-table-column label="浠诲姟鍚嶇О" align="center" prop="jobName" :show-overflow-tooltip="true" />
-      <el-table-column label="浠诲姟缁勫悕" align="center" prop="jobGroup" :show-overflow-tooltip="true">
-        <template slot-scope="scope">
-          <dict-tag :options="dict.type.sys_job_group" :value="scope.row.jobGroup"/>
-        </template>
-      </el-table-column>
-      <el-table-column label="璋冪敤鐩爣瀛楃涓�" align="center" prop="invokeTarget" :show-overflow-tooltip="true" />
-      <el-table-column label="鏃ュ織淇℃伅" align="center" prop="jobMessage" :show-overflow-tooltip="true" />
-      <el-table-column label="鎵ц鐘舵��" align="center" prop="status">
-        <template slot-scope="scope">
-          <dict-tag :options="dict.type.sys_common_status" :value="scope.row.status"/>
-        </template>
-      </el-table-column>
-      <el-table-column label="鎵ц鏃堕棿" align="center" prop="createTime" width="180">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.createTime) }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-view"
-            @click="handleView(scope.row)"
-            v-hasPermi="['monitor:job:query']"
-          >璇︾粏</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
-
-    <!-- 璋冨害鏃ュ織璇︾粏 -->
-    <el-dialog title="璋冨害鏃ュ織璇︾粏" :visible.sync="open" width="700px" append-to-body>
-      <el-form ref="form" :model="form" label-width="100px" size="mini">
-        <el-row>
-          <el-col :span="12">
-            <el-form-item label="鏃ュ織搴忓彿锛�">{{ form.jobLogId }}</el-form-item>
-            <el-form-item label="浠诲姟鍚嶇О锛�">{{ form.jobName }}</el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="浠诲姟鍒嗙粍锛�">{{ form.jobGroup }}</el-form-item>
-            <el-form-item label="鎵ц鏃堕棿锛�">{{ form.createTime }}</el-form-item>
-          </el-col>
-          <el-col :span="24">
-            <el-form-item label="璋冪敤鏂规硶锛�">{{ form.invokeTarget }}</el-form-item>
-          </el-col>
-          <el-col :span="24">
-            <el-form-item label="鏃ュ織淇℃伅锛�">{{ form.jobMessage }}</el-form-item>
-          </el-col>
-          <el-col :span="24">
-            <el-form-item label="鎵ц鐘舵�侊細">
-              <div v-if="form.status == 0">姝e父</div>
-              <div v-else-if="form.status == 1">澶辫触</div>
-            </el-form-item>
-          </el-col>
-          <el-col :span="24">
-            <el-form-item label="寮傚父淇℃伅锛�" v-if="form.status == 1">{{ form.exceptionInfo }}</el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button @click="open = false">鍏� 闂�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import { getJob} from "@/api/monitor/job";
-import { listJobLog, delJobLog, cleanJobLog } from "@/api/monitor/jobLog";
-
-export default {
-  name: "JobLog",
-  dicts: ['sys_common_status', 'sys_job_group'],
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鏄剧ず鎼滅储鏉′欢
-      showSearch: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 璋冨害鏃ュ織琛ㄦ牸鏁版嵁
-      jobLogList: [],
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 鏃ユ湡鑼冨洿
-      dateRange: [],
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        jobName: undefined,
-        jobGroup: undefined,
-        status: undefined
-      }
-    };
-  },
-  created() {
-    const jobId = this.$route.params && this.$route.params.jobId;
-    if (jobId !== undefined && jobId != 0) {
-      getJob(jobId).then(response => {
-        this.queryParams.jobName = response.data.jobName;
-        this.queryParams.jobGroup = response.data.jobGroup;
-        this.getList();
-      });
-    } else {
-      this.getList();
-    }
-  },
-  methods: {
-    /** 鏌ヨ璋冨害鏃ュ織鍒楄〃 */
-    getList() {
-      this.loading = true;
-      listJobLog(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
-          this.jobLogList = response.rows;
-          this.total = response.total;
-          this.loading = false;
-        }
-      );
-    },
-    // 杩斿洖鎸夐挳
-    handleClose() {
-      const obj = { path: "/monitor/job" };
-      this.$tab.closeOpenPage(obj);
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.dateRange = [];
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.jobLogId);
-      this.multiple = !selection.length;
-    },
-    /** 璇︾粏鎸夐挳鎿嶄綔 */
-    handleView(row) {
-      this.open = true;
-      this.form = row;
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const jobLogIds = this.ids;
-      this.$modal.confirm('鏄惁纭鍒犻櫎璋冨害鏃ュ織缂栧彿涓�"' + jobLogIds + '"鐨勬暟鎹」锛�').then(function() {
-        return delJobLog(jobLogIds);
-      }).then(() => {
-        this.getList();
-        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
-      }).catch(() => {});
-    },
-    /** 娓呯┖鎸夐挳鎿嶄綔 */
-    handleClean() {
-      this.$modal.confirm('鏄惁纭娓呯┖鎵�鏈夎皟搴︽棩蹇楁暟鎹」锛�').then(function() {
-        return cleanJobLog();
-      }).then(() => {
-        this.getList();
-        this.$modal.msgSuccess("娓呯┖鎴愬姛");
-      }).catch(() => {});
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      this.download('/monitor/jobLog/export', {
-        ...this.queryParams
-      }, `log_${new Date().getTime()}.xlsx`)
-    }
-  }
-};
-</script>
diff --git a/src/views/performance/manHour/workTimeManagement.vue b/src/views/performance/manHour/workTimeManagement.vue
index 9e7a9c0..7fb4049 100644
--- a/src/views/performance/manHour/workTimeManagement.vue
+++ b/src/views/performance/manHour/workTimeManagement.vue
@@ -518,9 +518,10 @@
         param = { ...entity, ...this.page };
       } else {
         param = { ...this.entity, ...this.page };
-        param.dateTime = JSON.stringify(param.dateTime);
+        param.dateTime = param.dateTime?.length > 0 ? JSON.stringify(param.dateTime) : null;
       }
       delete param.total;
+      console.log('11111111111111111')
       selectAuxiliaryWorkingHoursDay({ ...param })
         .then((res) => {
           this.tableLoading = false;
diff --git a/src/views/structural/capabilityAndLaboratory/laboratory/index.vue b/src/views/structural/capabilityAndLaboratory/laboratory/index.vue
index 8ab749f..16a9d49 100644
--- a/src/views/structural/capabilityAndLaboratory/laboratory/index.vue
+++ b/src/views/structural/capabilityAndLaboratory/laboratory/index.vue
@@ -328,7 +328,11 @@
     },
     // 璧勮川鏄庣粏闄勪欢涓嬭浇
     handleDownLoad(row) {
-      const url = process.env.VUE_APP_BASE_API + "/img/" + row.fileUrl;
+      if (!row.fileUrl) {
+        this.$message.warning('鏆傛棤闄勪欢')
+        return;
+      }
+      const url = this.javaApi + "/img/" + row.fileUrl;
       this.$download.saveAs(url, row.fileUrl);
     },
     openAdd() {
diff --git a/src/views/tool/gen/basicInfoForm.vue b/src/views/tool/gen/basicInfoForm.vue
deleted file mode 100644
index 7029529..0000000
--- a/src/views/tool/gen/basicInfoForm.vue
+++ /dev/null
@@ -1,60 +0,0 @@
-<template>
-  <el-form ref="basicInfoForm" :model="info" :rules="rules" label-width="150px">
-    <el-row>
-      <el-col :span="12">
-        <el-form-item label="琛ㄥ悕绉�" prop="tableName">
-          <el-input placeholder="璇疯緭鍏ヤ粨搴撳悕绉�" v-model="info.tableName" />
-        </el-form-item>
-      </el-col>
-      <el-col :span="12">
-        <el-form-item label="琛ㄦ弿杩�" prop="tableComment">
-          <el-input placeholder="璇疯緭鍏�" v-model="info.tableComment" />
-        </el-form-item>
-      </el-col>
-      <el-col :span="12">
-        <el-form-item label="瀹炰綋绫诲悕绉�" prop="className">
-          <el-input placeholder="璇疯緭鍏�" v-model="info.className" />
-        </el-form-item>
-      </el-col>
-      <el-col :span="12">
-        <el-form-item label="浣滆��" prop="functionAuthor">
-          <el-input placeholder="璇疯緭鍏�" v-model="info.functionAuthor" />
-        </el-form-item>
-      </el-col>
-      <el-col :span="24">
-        <el-form-item label="澶囨敞" prop="remark">
-          <el-input type="textarea" :rows="3" v-model="info.remark"></el-input>
-        </el-form-item>
-      </el-col>
-    </el-row>
-  </el-form>
-</template>
-
-<script>
-export default {
-  props: {
-    info: {
-      type: Object,
-      default: null
-    }
-  },
-  data() {
-    return {
-      rules: {
-        tableName: [
-          { required: true, message: "璇疯緭鍏ヨ〃鍚嶇О", trigger: "blur" }
-        ],
-        tableComment: [
-          { required: true, message: "璇疯緭鍏ヨ〃鎻忚堪", trigger: "blur" }
-        ],
-        className: [
-          { required: true, message: "璇疯緭鍏ュ疄浣撶被鍚嶇О", trigger: "blur" }
-        ],
-        functionAuthor: [
-          { required: true, message: "璇疯緭鍏ヤ綔鑰�", trigger: "blur" }
-        ]
-      }
-    };
-  }
-};
-</script>
diff --git a/src/views/tool/gen/createTable.vue b/src/views/tool/gen/createTable.vue
deleted file mode 100644
index f914b5d..0000000
--- a/src/views/tool/gen/createTable.vue
+++ /dev/null
@@ -1,45 +0,0 @@
-<template>
-  <!-- 鍒涘缓琛� -->
-  <el-dialog title="鍒涘缓琛�" :visible.sync="visible" width="800px" top="5vh" append-to-body>
-    <span>鍒涘缓琛ㄨ鍙�(鏀寔澶氫釜寤鸿〃璇彞)锛�</span>
-    <el-input type="textarea" :rows="10" placeholder="璇疯緭鍏ユ枃鏈�" v-model="content"></el-input>
-    <div slot="footer" class="dialog-footer">
-      <el-button type="primary" @click="handleCreateTable">纭� 瀹�</el-button>
-      <el-button @click="visible = false">鍙� 娑�</el-button>
-    </div>
-  </el-dialog>
-</template>
-
-<script>
-import { createTable } from "@/api/tool/gen";
-export default {
-  data() {
-    return {
-      // 閬僵灞�
-      visible: false,
-      // 鏂囨湰鍐呭
-      content: ""
-    };
-  },
-  methods: {
-    // 鏄剧ず寮规
-    show() {
-      this.visible = true;
-    },
-    /** 鍒涘缓鎸夐挳鎿嶄綔 */
-    handleCreateTable() {
-      if (this.content === "") {
-        this.$modal.msgError("璇疯緭鍏ュ缓琛ㄨ鍙�");
-        return;
-      }
-      createTable({ sql: this.content }).then(res => {
-        this.$modal.msgSuccess(res.msg);
-        if (res.code === 200) {
-          this.visible = false;
-          this.$emit("ok");
-        }
-      });
-    }
-  }
-};
-</script>
diff --git a/src/views/tool/gen/editTable.vue b/src/views/tool/gen/editTable.vue
deleted file mode 100644
index 951497a..0000000
--- a/src/views/tool/gen/editTable.vue
+++ /dev/null
@@ -1,234 +0,0 @@
-<template>
-  <el-card>
-    <el-tabs v-model="activeName">
-      <el-tab-pane label="鍩烘湰淇℃伅" name="basic">
-        <basic-info-form ref="basicInfo" :info="info" />
-      </el-tab-pane>
-      <el-tab-pane label="瀛楁淇℃伅" name="columnInfo">
-        <el-table ref="dragTable" :data="columns" row-key="columnId" :max-height="tableHeight">
-          <el-table-column label="搴忓彿" type="index" min-width="5%" class-name="allowDrag" />
-          <el-table-column
-            label="瀛楁鍒楀悕"
-            prop="columnName"
-            min-width="10%"
-            :show-overflow-tooltip="true"
-          />
-          <el-table-column label="瀛楁鎻忚堪" min-width="10%">
-            <template slot-scope="scope">
-              <el-input v-model="scope.row.columnComment"></el-input>
-            </template>
-          </el-table-column>
-          <el-table-column
-            label="鐗╃悊绫诲瀷"
-            prop="columnType"
-            min-width="10%"
-            :show-overflow-tooltip="true"
-          />
-          <el-table-column label="Java绫诲瀷" min-width="11%">
-            <template slot-scope="scope">
-              <el-select v-model="scope.row.javaType">
-                <el-option label="Long" value="Long" />
-                <el-option label="String" value="String" />
-                <el-option label="Integer" value="Integer" />
-                <el-option label="Double" value="Double" />
-                <el-option label="BigDecimal" value="BigDecimal" />
-                <el-option label="Date" value="Date" />
-                <el-option label="Boolean" value="Boolean" />
-              </el-select>
-            </template>
-          </el-table-column>
-          <el-table-column label="java灞炴��" min-width="10%">
-            <template slot-scope="scope">
-              <el-input v-model="scope.row.javaField"></el-input>
-            </template>
-          </el-table-column>
-
-          <el-table-column label="鎻掑叆" min-width="5%">
-            <template slot-scope="scope">
-              <el-checkbox true-label="1" false-label="0" v-model="scope.row.isInsert"></el-checkbox>
-            </template>
-          </el-table-column>
-          <el-table-column label="缂栬緫" min-width="5%">
-            <template slot-scope="scope">
-              <el-checkbox true-label="1" false-label="0" v-model="scope.row.isEdit"></el-checkbox>
-            </template>
-          </el-table-column>
-          <el-table-column label="鍒楄〃" min-width="5%">
-            <template slot-scope="scope">
-              <el-checkbox true-label="1" false-label="0" v-model="scope.row.isList"></el-checkbox>
-            </template>
-          </el-table-column>
-          <el-table-column label="鏌ヨ" min-width="5%">
-            <template slot-scope="scope">
-              <el-checkbox true-label="1" false-label="0" v-model="scope.row.isQuery"></el-checkbox>
-            </template>
-          </el-table-column>
-          <el-table-column label="鏌ヨ鏂瑰紡" min-width="10%">
-            <template slot-scope="scope">
-              <el-select v-model="scope.row.queryType">
-                <el-option label="=" value="EQ" />
-                <el-option label="!=" value="NE" />
-                <el-option label=">" value="GT" />
-                <el-option label=">=" value="GTE" />
-                <el-option label="<" value="LT" />
-                <el-option label="<=" value="LTE" />
-                <el-option label="LIKE" value="LIKE" />
-                <el-option label="BETWEEN" value="BETWEEN" />
-              </el-select>
-            </template>
-          </el-table-column>
-          <el-table-column label="蹇呭~" min-width="5%">
-            <template slot-scope="scope">
-              <el-checkbox true-label="1" false-label="0" v-model="scope.row.isRequired"></el-checkbox>
-            </template>
-          </el-table-column>
-          <el-table-column label="鏄剧ず绫诲瀷" min-width="12%">
-            <template slot-scope="scope">
-              <el-select v-model="scope.row.htmlType">
-                <el-option label="鏂囨湰妗�" value="input" />
-                <el-option label="鏂囨湰鍩�" value="textarea" />
-                <el-option label="涓嬫媺妗�" value="select" />
-                <el-option label="鍗曢�夋" value="radio" />
-                <el-option label="澶嶉�夋" value="checkbox" />
-                <el-option label="鏃ユ湡鎺т欢" value="datetime" />
-                <el-option label="鍥剧墖涓婁紶" value="imageUpload" />
-                <el-option label="鏂囦欢涓婁紶" value="fileUpload" />
-                <el-option label="瀵屾枃鏈帶浠�" value="editor" />
-              </el-select>
-            </template>
-          </el-table-column>
-          <el-table-column label="瀛楀吀绫诲瀷" min-width="12%">
-            <template slot-scope="scope">
-              <el-select v-model="scope.row.dictType" clearable filterable placeholder="璇烽�夋嫨">
-                <el-option
-                  v-for="dict in dictOptions"
-                  :key="dict.dictType"
-                  :label="dict.dictName"
-                  :value="dict.dictType">
-                  <span style="float: left">{{ dict.dictName }}</span>
-                  <span style="float: right; color: #8492a6; font-size: 13px">{{ dict.dictType }}</span>
-              </el-option>
-              </el-select>
-            </template>
-          </el-table-column>
-        </el-table>
-      </el-tab-pane>
-      <el-tab-pane label="鐢熸垚淇℃伅" name="genInfo">
-        <gen-info-form ref="genInfo" :info="info" :tables="tables" :menus="menus"/>
-      </el-tab-pane>
-    </el-tabs>
-    <el-form label-width="100px">
-      <el-form-item style="text-align: center;margin-left:-100px;margin-top:10px;">
-        <el-button type="primary" @click="submitForm()">鎻愪氦</el-button>
-        <el-button @click="close()">杩斿洖</el-button>
-      </el-form-item>
-    </el-form>
-  </el-card>
-</template>
-
-<script>
-import { getGenTable, updateGenTable } from "@/api/tool/gen";
-import { optionselect as getDictOptionselect } from "@/api/system/dict/type";
-import { listMenu as getMenuTreeselect } from "@/api/system/menu";
-import basicInfoForm from "./basicInfoForm";
-import genInfoForm from "./genInfoForm";
-import Sortable from 'sortablejs'
-
-export default {
-  name: "GenEdit",
-  components: {
-    basicInfoForm,
-    genInfoForm
-  },
-  data() {
-    return {
-      // 閫変腑閫夐」鍗$殑 name
-      activeName: "columnInfo",
-      // 琛ㄦ牸鐨勯珮搴�
-      tableHeight: document.documentElement.scrollHeight - 245 + "px",
-      // 琛ㄤ俊鎭�
-      tables: [],
-      // 琛ㄥ垪淇℃伅
-      columns: [],
-      // 瀛楀吀淇℃伅
-      dictOptions: [],
-      // 鑿滃崟淇℃伅
-      menus: [],
-      // 琛ㄨ缁嗕俊鎭�
-      info: {}
-    };
-  },
-  created() {
-    const tableId = this.$route.params && this.$route.params.tableId;
-    if (tableId) {
-      // 鑾峰彇琛ㄨ缁嗕俊鎭�
-      getGenTable(tableId).then(res => {
-        this.columns = res.data.rows;
-        this.info = res.data.info;
-        this.tables = res.data.tables;
-      });
-      /** 鏌ヨ瀛楀吀涓嬫媺鍒楄〃 */
-      getDictOptionselect().then(response => {
-        this.dictOptions = response.data;
-      });
-      /** 鏌ヨ鑿滃崟涓嬫媺鍒楄〃 */
-      getMenuTreeselect().then(response => {
-        this.menus = this.handleTree(response.data, "menuId");
-      });
-    }
-  },
-  methods: {
-    /** 鎻愪氦鎸夐挳 */
-    submitForm() {
-      const basicForm = this.$refs.basicInfo.$refs.basicInfoForm;
-      const genForm = this.$refs.genInfo.$refs.genInfoForm;
-      Promise.all([basicForm, genForm].map(this.getFormPromise)).then(res => {
-        const validateResult = res.every(item => !!item);
-        if (validateResult) {
-          const genTable = Object.assign({}, basicForm.model, genForm.model);
-          genTable.columns = this.columns;
-          genTable.params = {
-            treeCode: genTable.treeCode,
-            treeName: genTable.treeName,
-            treeParentCode: genTable.treeParentCode,
-            parentMenuId: genTable.parentMenuId
-          };
-          updateGenTable(genTable).then(res => {
-            this.$modal.msgSuccess(res.msg);
-            if (res.code === 200) {
-              this.close();
-            }
-          });
-        } else {
-          this.$modal.msgError("琛ㄥ崟鏍¢獙鏈�氳繃锛岃閲嶆柊妫�鏌ユ彁浜ゅ唴瀹�");
-        }
-      });
-    },
-    getFormPromise(form) {
-      return new Promise(resolve => {
-        form.validate(res => {
-          resolve(res);
-        });
-      });
-    },
-    /** 鍏抽棴鎸夐挳 */
-    close() {
-      const obj = { path: "/tool/gen", query: { t: Date.now(), pageNum: this.$route.query.pageNum } };
-      this.$tab.closeOpenPage(obj);
-    }
-  },
-  mounted() {
-    const el = this.$refs.dragTable.$el.querySelectorAll(".el-table__body-wrapper > table > tbody")[0];
-    const sortable = Sortable.create(el, {
-      handle: ".allowDrag",
-      onEnd: evt => {
-        const targetRow = this.columns.splice(evt.oldIndex, 1)[0];
-        this.columns.splice(evt.newIndex, 0, targetRow);
-        for (let index in this.columns) {
-          this.columns[index].sort = parseInt(index) + 1;
-        }
-      }
-    });
-  }
-};
-</script>
diff --git a/src/views/tool/gen/genInfoForm.vue b/src/views/tool/gen/genInfoForm.vue
deleted file mode 100644
index 98daf6d..0000000
--- a/src/views/tool/gen/genInfoForm.vue
+++ /dev/null
@@ -1,312 +0,0 @@
-<template>
-  <el-form ref="genInfoForm" :model="info" :rules="rules" label-width="150px">
-    <el-row>
-      <el-col :span="12">
-        <el-form-item prop="tplCategory">
-          <span slot="label">鐢熸垚妯℃澘</span>
-          <el-select v-model="info.tplCategory" @change="tplSelectChange">
-            <el-option label="鍗曡〃锛堝鍒犳敼鏌ワ級" value="crud" />
-            <el-option label="鏍戣〃锛堝鍒犳敼鏌ワ級" value="tree" />
-            <el-option label="涓诲瓙琛紙澧炲垹鏀规煡锛�" value="sub" />
-          </el-select>
-        </el-form-item>
-      </el-col>
-      <el-col :span="12">
-        <el-form-item prop="tplWebType">
-          <span slot="label">鍓嶇绫诲瀷</span>
-          <el-select v-model="info.tplWebType">
-            <el-option label="Vue2 Element UI 妯$増" value="element-ui" />
-            <el-option label="Vue3 Element Plus 妯$増" value="element-plus" />
-          </el-select>
-        </el-form-item>
-      </el-col>
-      <el-col :span="12">
-        <el-form-item prop="packageName">
-          <span slot="label">
-            鐢熸垚鍖呰矾寰�
-            <el-tooltip content="鐢熸垚鍦ㄥ摢涓猨ava鍖呬笅锛屼緥濡� com.ruoyi.system" placement="top">
-              <i class="el-icon-question"></i>
-            </el-tooltip>
-          </span>
-          <el-input v-model="info.packageName" />
-        </el-form-item>
-      </el-col>
-
-      <el-col :span="12">
-        <el-form-item prop="moduleName">
-          <span slot="label">
-            鐢熸垚妯″潡鍚�
-            <el-tooltip content="鍙悊瑙d负瀛愮郴缁熷悕锛屼緥濡� system" placement="top">
-              <i class="el-icon-question"></i>
-            </el-tooltip>
-          </span>
-          <el-input v-model="info.moduleName" />
-        </el-form-item>
-      </el-col>
-
-      <el-col :span="12">
-        <el-form-item prop="businessName">
-          <span slot="label">
-            鐢熸垚涓氬姟鍚�
-            <el-tooltip content="鍙悊瑙d负鍔熻兘鑻辨枃鍚嶏紝渚嬪 user" placement="top">
-              <i class="el-icon-question"></i>
-            </el-tooltip>
-          </span>
-          <el-input v-model="info.businessName" />
-        </el-form-item>
-      </el-col>
-
-      <el-col :span="12">
-        <el-form-item prop="functionName">
-          <span slot="label">
-            鐢熸垚鍔熻兘鍚�
-            <el-tooltip content="鐢ㄤ綔绫绘弿杩帮紝渚嬪 鐢ㄦ埛" placement="top">
-              <i class="el-icon-question"></i>
-            </el-tooltip>
-          </span>
-          <el-input v-model="info.functionName" />
-        </el-form-item>
-      </el-col>
-
-      <el-col :span="12">
-        <el-form-item prop="genType">
-          <span slot="label">
-            鐢熸垚浠g爜鏂瑰紡
-            <el-tooltip content="榛樿涓簔ip鍘嬬缉鍖呬笅杞斤紝涔熷彲浠ヨ嚜瀹氫箟鐢熸垚璺緞" placement="top">
-              <i class="el-icon-question"></i>
-            </el-tooltip>
-          </span>
-          <el-radio v-model="info.genType" label="0">zip鍘嬬缉鍖�</el-radio>
-          <el-radio v-model="info.genType" label="1">鑷畾涔夎矾寰�</el-radio>
-        </el-form-item>
-      </el-col>
-
-      <el-col :span="12">
-        <el-form-item>
-          <span slot="label">
-            涓婄骇鑿滃崟
-            <el-tooltip content="鍒嗛厤鍒版寚瀹氳彍鍗曚笅锛屼緥濡� 绯荤粺绠$悊" placement="top">
-              <i class="el-icon-question"></i>
-            </el-tooltip>
-          </span>
-          <treeselect
-            :append-to-body="true"
-            v-model="info.parentMenuId"
-            :options="menus"
-            :normalizer="normalizer"
-            :show-count="true"
-            placeholder="璇烽�夋嫨绯荤粺鑿滃崟"
-          />
-        </el-form-item>
-      </el-col>
-
-      <el-col :span="24" v-if="info.genType == '1'">
-        <el-form-item prop="genPath">
-          <span slot="label">
-            鑷畾涔夎矾寰�
-            <el-tooltip content="濉啓纾佺洏缁濆璺緞锛岃嫢涓嶅~鍐欙紝鍒欑敓鎴愬埌褰撳墠Web椤圭洰涓�" placement="top">
-              <i class="el-icon-question"></i>
-            </el-tooltip>
-          </span>
-          <el-input v-model="info.genPath">
-            <el-dropdown slot="append">
-              <el-button type="primary">
-                鏈�杩戣矾寰勫揩閫熼�夋嫨
-                <i class="el-icon-arrow-down el-icon--right"></i>
-              </el-button>
-              <el-dropdown-menu slot="dropdown">
-                <el-dropdown-item @click.native="info.genPath = '/'">鎭㈠榛樿鐨勭敓鎴愬熀纭�璺緞</el-dropdown-item>
-              </el-dropdown-menu>
-            </el-dropdown>
-          </el-input>
-        </el-form-item>
-      </el-col>
-    </el-row>
-
-    <el-row v-show="info.tplCategory == 'tree'">
-      <h4 class="form-header">鍏朵粬淇℃伅</h4>
-      <el-col :span="12">
-        <el-form-item>
-          <span slot="label">
-            鏍戠紪鐮佸瓧娈�
-            <el-tooltip content="鏍戞樉绀虹殑缂栫爜瀛楁鍚嶏紝 濡傦細dept_id" placement="top">
-              <i class="el-icon-question"></i>
-            </el-tooltip>
-          </span>
-          <el-select v-model="info.treeCode" placeholder="璇烽�夋嫨">
-            <el-option
-              v-for="(column, index) in info.columns"
-              :key="index"
-              :label="column.columnName + '锛�' + column.columnComment"
-              :value="column.columnName"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-      </el-col>
-      <el-col :span="12">
-        <el-form-item>
-          <span slot="label">
-            鏍戠埗缂栫爜瀛楁
-            <el-tooltip content="鏍戞樉绀虹殑鐖剁紪鐮佸瓧娈靛悕锛� 濡傦細parent_Id" placement="top">
-              <i class="el-icon-question"></i>
-            </el-tooltip>
-          </span>
-          <el-select v-model="info.treeParentCode" placeholder="璇烽�夋嫨">
-            <el-option
-              v-for="(column, index) in info.columns"
-              :key="index"
-              :label="column.columnName + '锛�' + column.columnComment"
-              :value="column.columnName"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-      </el-col>
-      <el-col :span="12">
-        <el-form-item>
-          <span slot="label">
-            鏍戝悕绉板瓧娈�
-            <el-tooltip content="鏍戣妭鐐圭殑鏄剧ず鍚嶇О瀛楁鍚嶏紝 濡傦細dept_name" placement="top">
-              <i class="el-icon-question"></i>
-            </el-tooltip>
-          </span>
-          <el-select v-model="info.treeName" placeholder="璇烽�夋嫨">
-            <el-option
-              v-for="(column, index) in info.columns"
-              :key="index"
-              :label="column.columnName + '锛�' + column.columnComment"
-              :value="column.columnName"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-      </el-col>
-    </el-row>
-    <el-row v-show="info.tplCategory == 'sub'">
-      <h4 class="form-header">鍏宠仈淇℃伅</h4>
-      <el-col :span="12">
-        <el-form-item>
-          <span slot="label">
-            鍏宠仈瀛愯〃鐨勮〃鍚�
-            <el-tooltip content="鍏宠仈瀛愯〃鐨勮〃鍚嶏紝 濡傦細sys_user" placement="top">
-              <i class="el-icon-question"></i>
-            </el-tooltip>
-          </span>
-          <el-select v-model="info.subTableName" placeholder="璇烽�夋嫨" @change="subSelectChange">
-            <el-option
-              v-for="(table, index) in tables"
-              :key="index"
-              :label="table.tableName + '锛�' + table.tableComment"
-              :value="table.tableName"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-      </el-col>
-      <el-col :span="12">
-        <el-form-item>
-          <span slot="label">
-            瀛愯〃鍏宠仈鐨勫閿悕
-            <el-tooltip content="瀛愯〃鍏宠仈鐨勫閿悕锛� 濡傦細user_id" placement="top">
-              <i class="el-icon-question"></i>
-            </el-tooltip>
-          </span>
-          <el-select v-model="info.subTableFkName" placeholder="璇烽�夋嫨">
-            <el-option
-              v-for="(column, index) in subColumns"
-              :key="index"
-              :label="column.columnName + '锛�' + column.columnComment"
-              :value="column.columnName"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-      </el-col>
-    </el-row>
-  </el-form>
-</template>
-
-<script>
-import Treeselect from "@riophae/vue-treeselect";
-import "@riophae/vue-treeselect/dist/vue-treeselect.css";
-
-export default {
-  components: { Treeselect },
-  props: {
-    info: {
-      type: Object,
-      default: null
-    },
-    tables: {
-      type: Array,
-      default: null
-    },
-    menus: {
-      type: Array,
-      default: []
-    },
-  },
-  data() {
-    return {
-      subColumns: [],
-      rules: {
-        tplCategory: [
-          { required: true, message: "璇烽�夋嫨鐢熸垚妯℃澘", trigger: "blur" }
-        ],
-        packageName: [
-          { required: true, message: "璇疯緭鍏ョ敓鎴愬寘璺緞", trigger: "blur" }
-        ],
-        moduleName: [
-          { required: true, message: "璇疯緭鍏ョ敓鎴愭ā鍧楀悕", trigger: "blur" }
-        ],
-        businessName: [
-          { required: true, message: "璇疯緭鍏ョ敓鎴愪笟鍔″悕", trigger: "blur" }
-        ],
-        functionName: [
-          { required: true, message: "璇疯緭鍏ョ敓鎴愬姛鑳藉悕", trigger: "blur" }
-        ],
-      }
-    };
-  },
-  watch: {
-    'info.subTableName': function(val) {
-      this.setSubTableColumns(val);
-    },
-    'info.tplWebType': function(val) {
-      if (val === '') {
-        this.info.tplWebType = "element-ui";
-      }
-    }
-  },
-  methods: {
-    /** 杞崲鑿滃崟鏁版嵁缁撴瀯 */
-    normalizer(node) {
-      if (node.children && !node.children.length) {
-        delete node.children;
-      }
-      return {
-        id: node.menuId,
-        label: node.menuName,
-        children: node.children
-      };
-    },
-    /** 閫夋嫨瀛愯〃鍚嶈Е鍙� */
-    subSelectChange(value) {
-      this.info.subTableFkName = '';
-    },
-    /** 閫夋嫨鐢熸垚妯℃澘瑙﹀彂 */
-    tplSelectChange(value) {
-      if(value !== 'sub') {
-        this.info.subTableName = '';
-        this.info.subTableFkName = '';
-      }
-    },
-    /** 璁剧疆鍏宠仈澶栭敭 */
-    setSubTableColumns(value) {
-      for (var item in this.tables) {
-        const name = this.tables[item].tableName;
-        if (value === name) {
-          this.subColumns = this.tables[item].columns;
-          break;
-        }
-      }
-    }
-  }
-};
-</script>
diff --git a/src/views/tool/gen/importTable.vue b/src/views/tool/gen/importTable.vue
deleted file mode 100644
index 6fe2b5a..0000000
--- a/src/views/tool/gen/importTable.vue
+++ /dev/null
@@ -1,120 +0,0 @@
-<template>
-  <!-- 瀵煎叆琛� -->
-  <el-dialog title="瀵煎叆琛�" :visible.sync="visible" width="800px" top="5vh" append-to-body>
-    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true">
-      <el-form-item label="琛ㄥ悕绉�" prop="tableName">
-        <el-input
-          v-model="queryParams.tableName"
-          placeholder="璇疯緭鍏ヨ〃鍚嶇О"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="琛ㄦ弿杩�" prop="tableComment">
-        <el-input
-          v-model="queryParams.tableComment"
-          placeholder="璇疯緭鍏ヨ〃鎻忚堪"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鏌� 璇�</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲� 缃�</el-button>
-      </el-form-item>
-    </el-form>
-    <el-row>
-      <el-table @row-click="clickRow" ref="table" :data="dbTableList" @selection-change="handleSelectionChange" height="260px">
-        <el-table-column type="selection" width="55"></el-table-column>
-        <el-table-column prop="tableName" label="琛ㄥ悕绉�" :show-overflow-tooltip="true"></el-table-column>
-        <el-table-column prop="tableComment" label="琛ㄦ弿杩�" :show-overflow-tooltip="true"></el-table-column>
-        <el-table-column prop="createTime" label="鍒涘缓鏃堕棿"></el-table-column>
-        <el-table-column prop="updateTime" label="鏇存柊鏃堕棿"></el-table-column>
-      </el-table>
-      <pagination
-        v-show="total>0"
-        :total="total"
-        :page.sync="queryParams.pageNum"
-        :limit.sync="queryParams.pageSize"
-        @pagination="getList"
-      />
-    </el-row>
-    <div slot="footer" class="dialog-footer">
-      <el-button type="primary" @click="handleImportTable">纭� 瀹�</el-button>
-      <el-button @click="visible = false">鍙� 娑�</el-button>
-    </div>
-  </el-dialog>
-</template>
-
-<script>
-import { listDbTable, importTable } from "@/api/tool/gen";
-export default {
-  data() {
-    return {
-      // 閬僵灞�
-      visible: false,
-      // 閫変腑鏁扮粍鍊�
-      tables: [],
-      // 鎬绘潯鏁�
-      total: 0,
-      // 琛ㄦ暟鎹�
-      dbTableList: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        tableName: undefined,
-        tableComment: undefined
-      }
-    };
-  },
-  methods: {
-    // 鏄剧ず寮规
-    show() {
-      this.getList();
-      this.visible = true;
-    },
-    clickRow(row) {
-      this.$refs.table.toggleRowSelection(row);
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.tables = selection.map(item => item.tableName);
-    },
-    // 鏌ヨ琛ㄦ暟鎹�
-    getList() {
-      listDbTable(this.queryParams).then(res => {
-        if (res.code === 200) {
-          this.dbTableList = res.rows;
-          this.total = res.total;
-        }
-      });
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    /** 瀵煎叆鎸夐挳鎿嶄綔 */
-    handleImportTable() {
-      const tableNames = this.tables.join(",");
-      if (tableNames == "") {
-        this.$modal.msgError("璇烽�夋嫨瑕佸鍏ョ殑琛�");
-        return;
-      }
-      importTable({ tables: tableNames }).then(res => {
-        this.$modal.msgSuccess(res.msg);
-        if (res.code === 200) {
-          this.visible = false;
-          this.$emit("ok");
-        }
-      });
-    }
-  }
-};
-</script>
diff --git a/src/views/tool/gen/index.vue b/src/views/tool/gen/index.vue
deleted file mode 100644
index b52fbe9..0000000
--- a/src/views/tool/gen/index.vue
+++ /dev/null
@@ -1,354 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
-      <el-form-item label="琛ㄥ悕绉�" prop="tableName">
-        <el-input
-          v-model="queryParams.tableName"
-          placeholder="璇疯緭鍏ヨ〃鍚嶇О"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="琛ㄦ弿杩�" prop="tableComment">
-        <el-input
-          v-model="queryParams.tableComment"
-          placeholder="璇疯緭鍏ヨ〃鎻忚堪"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="鍒涘缓鏃堕棿">
-        <el-date-picker
-          v-model="dateRange"
-          style="width: 240px"
-          value-format="yyyy-MM-dd"
-          type="daterange"
-          range-separator="-"
-          start-placeholder="寮�濮嬫棩鏈�"
-          end-placeholder="缁撴潫鏃ユ湡"
-        ></el-date-picker>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鏌� 璇�</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲� 缃�</el-button>
-      </el-form-item>
-    </el-form>
-
-    <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button
-          type="primary"
-          plain
-          icon="el-icon-download"
-          size="mini"
-          :disabled="multiple"
-          @click="handleGenTable"
-          v-hasPermi="['tool:gen:code']"
-        >鐢熸垚</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="primary"
-          plain
-          icon="el-icon-plus"
-          size="mini"
-          @click="openCreateTable"
-          v-hasRole="['admin']"
-        >鍒涘缓</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="info"
-          plain
-          icon="el-icon-upload"
-          size="mini"
-          @click="openImportTable"
-          v-hasPermi="['tool:gen:import']"
-        >瀵煎叆</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="success"
-          plain
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="single"
-          @click="handleEditTable"
-          v-hasPermi="['tool:gen:edit']"
-        >淇敼</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="danger"
-          plain
-          icon="el-icon-delete"
-          size="mini"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['tool:gen:remove']"
-        >鍒犻櫎</el-button>
-      </el-col>
-      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
-    </el-row>
-
-    <el-table v-loading="loading" :data="tableList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" align="center" width="55"></el-table-column>
-      <el-table-column label="搴忓彿" type="index" width="50" align="center">
-        <template slot-scope="scope">
-          <span>{{(queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1}}</span>
-        </template>
-      </el-table-column>
-      <el-table-column
-        label="琛ㄥ悕绉�"
-        align="center"
-        prop="tableName"
-        :show-overflow-tooltip="true"
-        width="120"
-      />
-      <el-table-column
-        label="琛ㄦ弿杩�"
-        align="center"
-        prop="tableComment"
-        :show-overflow-tooltip="true"
-        width="120"
-      />
-      <el-table-column
-        label="瀹炰綋"
-        align="center"
-        prop="className"
-        :show-overflow-tooltip="true"
-        width="120"
-      />
-      <el-table-column label="鍒涘缓鏃堕棿" align="center" prop="createTime" width="160" />
-      <el-table-column label="鏇存柊鏃堕棿" align="center" prop="updateTime" width="160" />
-      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <el-button
-            type="text"
-            size="small"
-            icon="el-icon-view"
-            @click="handlePreview(scope.row)"
-            v-hasPermi="['tool:gen:preview']"
-          >棰勮</el-button>
-          <el-button
-            type="text"
-            size="small"
-            icon="el-icon-edit"
-            @click="handleEditTable(scope.row)"
-            v-hasPermi="['tool:gen:edit']"
-          >缂栬緫</el-button>
-          <el-button
-            type="text"
-            size="small"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['tool:gen:remove']"
-          >鍒犻櫎</el-button>
-          <el-button
-            type="text"
-            size="small"
-            icon="el-icon-refresh"
-            @click="handleSynchDb(scope.row)"
-            v-hasPermi="['tool:gen:edit']"
-          >鍚屾</el-button>
-          <el-button
-            type="text"
-            size="small"
-            icon="el-icon-download"
-            @click="handleGenTable(scope.row)"
-            v-hasPermi="['tool:gen:code']"
-          >鐢熸垚浠g爜</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
-    <!-- 棰勮鐣岄潰 -->
-    <el-dialog :title="preview.title" :visible.sync="preview.open" width="80%" top="5vh" append-to-body class="scrollbar">
-      <el-tabs v-model="preview.activeName">
-        <el-tab-pane
-          v-for="(value, key) in preview.data"
-          :label="key.substring(key.lastIndexOf('/')+1,key.indexOf('.vm'))"
-          :name="key.substring(key.lastIndexOf('/')+1,key.indexOf('.vm'))"
-          :key="key"
-        >
-          <el-link :underline="false" icon="el-icon-document-copy" v-clipboard:copy="value" v-clipboard:success="clipboardSuccess" style="float:right">澶嶅埗</el-link>
-          <pre><code class="hljs" v-html="highlightedCode(value, key)"></code></pre>
-        </el-tab-pane>
-      </el-tabs>
-    </el-dialog>
-    <import-table ref="import" @ok="handleQuery" />
-    <create-table ref="create" @ok="handleQuery" />
-  </div>
-</template>
-
-<script>
-import { listTable, previewTable, delTable, genCode, synchDb } from "@/api/tool/gen";
-import importTable from "./importTable";
-import createTable from "./createTable";
-import hljs from "highlight.js/lib/highlight";
-import "highlight.js/styles/github-gist.css";
-hljs.registerLanguage("java", require("highlight.js/lib/languages/java"));
-hljs.registerLanguage("xml", require("highlight.js/lib/languages/xml"));
-hljs.registerLanguage("html", require("highlight.js/lib/languages/xml"));
-hljs.registerLanguage("vue", require("highlight.js/lib/languages/xml"));
-hljs.registerLanguage("javascript", require("highlight.js/lib/languages/javascript"));
-hljs.registerLanguage("sql", require("highlight.js/lib/languages/sql"));
-
-export default {
-  name: "Gen",
-  components: { importTable, createTable },
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 鍞竴鏍囪瘑绗�
-      uniqueId: "",
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 閫変腑琛ㄦ暟缁�
-      tableNames: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鏄剧ず鎼滅储鏉′欢
-      showSearch: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 琛ㄦ暟鎹�
-      tableList: [],
-      // 鏃ユ湡鑼冨洿
-      dateRange: "",
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        tableName: undefined,
-        tableComment: undefined
-      },
-      // 棰勮鍙傛暟
-      preview: {
-        open: false,
-        title: "浠g爜棰勮",
-        data: {},
-        activeName: "domain.java"
-      }
-    };
-  },
-  created() {
-    this.getList();
-  },
-  activated() {
-    const time = this.$route.query.t;
-    if (time != null && time != this.uniqueId) {
-      this.uniqueId = time;
-      this.queryParams.pageNum = Number(this.$route.query.pageNum);
-      this.getList();
-    }
-  },
-  methods: {
-    /** 鏌ヨ琛ㄩ泦鍚� */
-    getList() {
-      this.loading = true;
-      listTable(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
-          this.tableList = response.rows;
-          this.total = response.total;
-          this.loading = false;
-        }
-      );
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 鐢熸垚浠g爜鎿嶄綔 */
-    handleGenTable(row) {
-      const tableNames = row.tableName || this.tableNames;
-      if (tableNames == "") {
-        this.$modal.msgError("璇烽�夋嫨瑕佺敓鎴愮殑鏁版嵁");
-        return;
-      }
-      if(row.genType === "1") {
-        genCode(row.tableName).then(response => {
-          this.$modal.msgSuccess("鎴愬姛鐢熸垚鍒拌嚜瀹氫箟璺緞锛�" + row.genPath);
-        });
-      } else {
-        this.$download.zip("/tool/gen/batchGenCode?tables=" + tableNames, "ruoyi.zip");
-      }
-    },
-    /** 鍚屾鏁版嵁搴撴搷浣� */
-    handleSynchDb(row) {
-      const tableName = row.tableName;
-      this.$modal.confirm('纭瑕佸己鍒跺悓姝�"' + tableName + '"琛ㄧ粨鏋勫悧锛�').then(function() {
-        return synchDb(tableName);
-      }).then(() => {
-        this.$modal.msgSuccess("鍚屾鎴愬姛");
-      }).catch(() => {});
-    },
-    /** 鎵撳紑瀵煎叆琛ㄥ脊绐� */
-    openImportTable() {
-      this.$refs.import.show();
-    },
-    /** 鎵撳紑鍒涘缓琛ㄥ脊绐� */
-    openCreateTable() {
-      this.$refs.create.show();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.dateRange = [];
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    /** 棰勮鎸夐挳 */
-    handlePreview(row) {
-      previewTable(row.tableId).then(response => {
-        this.preview.data = response.data;
-        this.preview.open = true;
-        this.preview.activeName = "domain.java";
-      });
-    },
-    /** 楂樹寒鏄剧ず */
-    highlightedCode(code, key) {
-      const vmName = key.substring(key.lastIndexOf("/") + 1, key.indexOf(".vm"));
-      var language = vmName.substring(vmName.indexOf(".") + 1, vmName.length);
-      const result = hljs.highlight(language, code || "", true);
-      return result.value || '&nbsp;';
-    },
-    /** 澶嶅埗浠g爜鎴愬姛 */
-    clipboardSuccess() {
-      this.$modal.msgSuccess("澶嶅埗鎴愬姛");
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.tableId);
-      this.tableNames = selection.map(item => item.tableName);
-      this.single = selection.length != 1;
-      this.multiple = !selection.length;
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleEditTable(row) {
-      const tableId = row.tableId || this.ids[0];
-      const tableName = row.tableName || this.tableNames[0];
-      const params = { pageNum: this.queryParams.pageNum };
-      this.$tab.openPage("淇敼[" + tableName + "]鐢熸垚閰嶇疆", '/tool/gen-edit/index/' + tableId, params);
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const tableIds = row.tableId || this.ids;
-      this.$modal.confirm('鏄惁纭鍒犻櫎琛ㄧ紪鍙蜂负"' + tableIds + '"鐨勬暟鎹」锛�').then(function() {
-        return delTable(tableIds);
-      }).then(() => {
-        this.getList();
-        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
-      }).catch(() => {});
-    }
-  }
-};
-</script>
diff --git a/src/views/tool/swagger/index.vue b/src/views/tool/swagger/index.vue
deleted file mode 100644
index b8becc6..0000000
--- a/src/views/tool/swagger/index.vue
+++ /dev/null
@@ -1,15 +0,0 @@
-<template>
-  <i-frame :src="url" />
-</template>
-<script>
-import iFrame from "@/components/iFrame/index";
-export default {
-  name: "Swagger",
-  components: { iFrame },
-  data() {
-    return {
-      url: process.env.VUE_APP_BASE_API + "/swagger-ui/index.html"
-    };
-  },
-};
-</script>

--
Gitblit v1.9.3