Browse Source

添加演示dev

qinhb 4 months ago
parent
commit
d9890d37bc

+ 1 - 1
.env.development

@@ -11,6 +11,6 @@ VITE_APP_BASE_API = '/dev-api'
 VITE_APP_UPLOAD_URL = 'http://192.168.101.4:9000'
 # 开发接口地址
 #VITE_APP_API_URL = 'http://192.168.101.4:8078'
-VITE_APP_API_URL = 'http://10.88.11.200:8078'
+VITE_APP_API_URL = 'http://127.0.0.1:8058'
 # 是否启用 Mock 服务
 VITE_MOCK_DEV_SERVER = false

+ 18 - 0
src/api/device/index.ts

@@ -1,4 +1,5 @@
 import request from "@/utils/request";
+import {OrderInfoQuery} from "@/api/order/types";
 
 /**
  * 设备维护
@@ -107,6 +108,14 @@ export function deviceUpdateCollect(params: any) {
   });
 }
 
+export function deviceRestart(params: any) {
+  return request({
+    url: "/api/v1/device/restart",
+    method: "post",
+    data: params,
+  });
+}
+
 export function updateProtocol(params: any) {
   return request({
     url: "/api/v1/device/updateProtocol",
@@ -123,4 +132,13 @@ export function meteringUpdate(params: any) {
   });
 }
 
+export function exportDataList(queryParams: any) {
+  return request({
+    url: "/api/v1/device/data/export",
+    method: "post",
+    data: queryParams,
+    responseType: "arraybuffer",
+  });
+}
+
 

+ 112 - 175
src/views/device/allocate/index.vue

@@ -1,20 +1,20 @@
 <template>
   <div class="mainContentBox">
     <avue-crud
-      ref="crudRef"
-      v-model:search="search"
-      v-model="form"
-      :data="data"
-      :option="option"
-      v-model:page="page"
-      @row-save="createRow"
-      @row-update="updateRow"
-      @row-del="deleteRow"
-      @search-change="searchChange"
-      @search-reset="resetChange"
-      @size-change="dataList"
-      @current-change="dataList"
-      @selection-change="selectionChange"
+        ref="crudRef"
+        v-model:search="search"
+        v-model="form"
+        :data="data"
+        :option="option"
+        v-model:page="page"
+        @row-save="createRow"
+        @row-update="updateRow"
+        @row-del="deleteRow"
+        @search-change="searchChange"
+        @search-reset="resetChange"
+        @size-change="dataList"
+        @current-change="dataList"
+        @selection-change="selectionChange"
     >
       <template #menu-left="{ size }">
         <el-button
@@ -27,138 +27,76 @@
           >删除</el-button
         >
       </template>
-      <template #menu="{ size, row, index }">
-        <el-button
-          @click="maintenance(row, 0)"
-          text
-          v-hasPerm="[ButtonPermKeys.DEVICE.BTNS.allocate_audit]"
-          type="primary"
-          :size="size"
-          >流程
-          <template #icon>
-            <svg-icon icon-class="liucheng"></svg-icon>
-          </template>
-        </el-button>
-        <el-button
-          @click="maintenance(row, 1)"
-          icon="el-icon-fold"
-          text
-          type="primary"
-          :size="size"
-          >记录</el-button
-        >
-        <el-button
-          @click="handleExport(row)"
-          icon="el-icon-download"
-          text
-          v-hasPerm="[ButtonPermKeys.DEVICE.BTNS.allocate_export]"
-          type="primary"
-          :size="size"
-          >导出履历</el-button
-        >
+      <template #menu="{size,row,index}">
+        <el-button @click="maintenance(row,0)"
+                   icon="el-icon-check"
+                   text
+                   v-hasPerm="[ButtonPermKeys.DEVICE.BTNS.allocate_audit]"
+                   type="primary"
+                   :size="size">流程</el-button>
+        <el-button @click="maintenance(row,1)"
+                   icon="el-icon-fold"
+                   text
+                   type="primary"
+                   :size="size">记录</el-button>
+        <el-button @click="handleExport(row)"
+                   icon="el-icon-download"
+                   text
+                   v-hasPerm="[ButtonPermKeys.DEVICE.BTNS.allocate_export]"
+                   type="primary"
+                   :size="size">导出履历</el-button>
       </template>
     </avue-crud>
     <el-dialog
-      v-model="dialog.visible"
-      :title="dialog.title"
-      width="850px"
-      @close="dialog.visible = false"
+        v-model="dialog.visible"
+        :title="dialog.title"
+        width="850px"
+        @close="dialog.visible = false"
     >
-      <device-page @deviceInfo="deviceInfo" />
+      <device-page  @deviceInfo="deviceInfo"/>
     </el-dialog>
 
     <el-dialog
-      v-model="dialog1.visible"
-      :title="dialog1.title"
-      width="750px"
-      height="80%"
-      @close="dialog1.visible = false"
-    >
-      <el-timeline style="max-width: 500px; margin-left: 100px">
+        v-model="dialog1.visible"
+        :title="dialog1.title"
+        width="750px"
+        height="80%"
+        @close="dialog1.visible = false">
+      <el-timeline style="max-width: 500px;margin-left: 100px">
         <el-timeline-item center type="success" placement="top">
           <el-card>
             <h4>调拨申请</h4>
-            <p>设备编号: {{ maintenanceInfo.deviceNo }}</p>
-            <p>设备名称: {{ maintenanceInfo.deviceName }}</p>
-            <p>申请部门: {{ maintenanceInfo.creator }}</p>
-            <p>申请人员: {{ maintenanceInfo.creator }}</p>
-            <p>调拨周期: {{ maintenanceInfo.allocateCycle }}天</p>
-            <p>调拨目标位置: {{ maintenanceInfo.deviceToPosition }}</p>
-            <p>申请时间: {{ maintenanceInfo.created }}</p>
+            <p>设备编号: {{maintenanceInfo.deviceNo}}</p>
+            <p>设备名称: {{maintenanceInfo.deviceName}}</p>
+            <p>申请部门: {{maintenanceInfo.creator}}</p>
+            <p>申请人员: {{maintenanceInfo.creator}}</p>
+            <p>调拨周期: {{maintenanceInfo.allocateCycle}}天</p>
+            <p>调拨目标位置: {{maintenanceInfo.deviceToPosition}}</p>
+            <p>申请时间: {{maintenanceInfo.created}}</p>
           </el-card>
         </el-timeline-item>
 
-        <el-timeline-item
-          center
-          placement="top"
-          :type="
-            maintenanceInfo.state === 0
-              ? 'primary'
-              : maintenanceInfo.state === 0
-                ? 'info'
-                : 'success'
-          "
-        >
+        <el-timeline-item center placement="top"  :type="maintenanceInfo.state === 0 ? 'primary' : maintenanceInfo.state === 0 ? 'info' : 'success'">
           <el-card v-if="viewPage">
             <h4>调拨审批</h4>
-            <p>审批人员: {{ maintenanceInfo.auditUser }}</p>
-            <p>
-              审批结果:
-              {{
-                maintenanceInfo.auditUser
-                  ? maintenanceInfo.auditResult === 1
-                    ? "通过"
-                    : "不通过"
-                  : ""
-              }}
-            </p>
-            <p>审批时间: {{ maintenanceInfo.auditTime }}</p>
+            <p>审批人员: {{maintenanceInfo.auditUser}}</p>
+            <p>审批结果: {{maintenanceInfo.auditUser ? (maintenanceInfo.auditResult === 1 ? '通过' : '不通过') : ''}}</p>
+            <p>审批时间: {{maintenanceInfo.auditTime}}</p>
           </el-card>
           <el-card v-if="!viewPage">
             <h4>调拨审批</h4>
-            <el-form
-              ref="maintenanceInfoForm"
-              :model="maintenanceInfo"
-              label-width="auto"
-              style="max-width: 400px"
-              :rules="rules"
-            >
+            <el-form ref="maintenanceInfoForm"  :model="maintenanceInfo" label-width="auto" style="max-width: 400px" :rules="rules">
               <el-form-item label="审批人员" prop="auditUser">
-<!--                <el-input
-                  :disabled="maintenanceInfo.state !== 0"
-                  v-model="maintenanceInfo.auditUser"
-                />-->
-                <el-select
-                    v-model="maintenanceInfo.auditUser"
-                    placeholder="审批人员"
-                    size="large"
-                    filterable
-                    style="width: 240px">
-                  <el-option
-                      v-for="item in userList"
-                      :key="item.userName"
-                      :label="item.userName"
-                      :value="item.userName"
-                  />
-                </el-select>
+                <el-input :disabled="maintenanceInfo.state !== 0" v-model="maintenanceInfo.auditUser" />
               </el-form-item>
               <el-form-item label="审批结果">
-                <el-radio-group
-                  :disabled="maintenanceInfo.state !== 0"
-                  v-model="maintenanceInfo.auditResult"
-                  class="ml-4"
-                >
-                  <el-radio :value="1">通过</el-radio>
-                  <el-radio :value="2">驳回</el-radio>
+                <el-radio-group :disabled="maintenanceInfo.state !== 0" v-model="maintenanceInfo.auditResult" class="ml-4">
+                  <el-radio :value=1>通过</el-radio>
+                  <el-radio :value=2>驳回</el-radio>
                 </el-radio-group>
               </el-form-item>
               <el-form-item style="margin-left: 45%">
-                <el-button
-                  type="primary"
-                  v-if="maintenanceInfo.state === 0"
-                  @click="maintenanceSubmit"
-                  >保存</el-button
-                >
+                <el-button type="primary" v-if="maintenanceInfo.state === 0" @click="maintenanceSubmit">保存</el-button>
               </el-form-item>
             </el-form>
           </el-card>
@@ -172,8 +110,8 @@ import { ref, getCurrentInstance } from "vue";
 import { useCrud } from "@/hooks/userCrud";
 import ButtonPermKeys from "@/common/configs/buttonPermission";
 import { checkPerm } from "@/directive/permission";
-import { getUserList } from "@/api/system/user";
-import { allocateAudit, allocateExport } from "@/api/device/index";
+import {getUserList} from "@/api/system/user"
+import {allocateAudit,allocateExport} from "@/api/device/index";
 import { useCommonStoreHook } from "@/store";
 import dictDataUtil from "@/common/configs/dictDataUtil";
 const { isShowTable, tableType } = toRefs(useCommonStoreHook());
@@ -187,7 +125,7 @@ const permission = reactive({
   editBtn: checkPerm(ButtonPermKeys.DEVICE.BTNS.allocate_edit),
   menu: true,
 });
-const viewPage = ref(true);
+const viewPage = ref(true)
 
 const dialog = reactive({
   title: "设备选择",
@@ -197,52 +135,51 @@ const dialog1 = reactive({
   title: "调拨详情",
   visible: false,
 });
-const userList = ref([]);
+const userList = ref([])
 // 传入一个url,后面不带/
 const { form, data, option, search, page, toDeleteIds, Methords, Utils } =
   useCrud({
     src: "/api/v1/device/allocate",
   });
-const { dataList, createRow, updateRow, deleteRow, searchChange, resetChange } =
-  Methords; //增删改查
+const { dataList, createRow, updateRow, deleteRow, searchChange, resetChange } = Methords; //增删改查
 const { selectionChange, multipleDelete } = Methords; //选中和批量删除事件
 const { checkBtnPerm, downloadTemplate, exportData } = Utils; //按钮权限等工具
 const crudRef = ref(null); //crudRef.value 获取avue-crud对象
 const deviceInfo = (value) => {
-  form.value.deviceNo = value.deviceNo;
-  form.value.deviceName = value.deviceName;
-  form.value.deviceType = value.deviceType;
-  form.value.devicePosition = value.devicePosition;
-  form.value.oldHead = value.head;
-  form.value.devicePosition = value.devicePosition;
-  form.value.oldDept = value.deptId;
-  dialog.visible = false;
-};
-const maintenanceInfo = ref(null);
-const maintenance = (row, type) => {
-  viewPage.value = type === 0 ? false : true;
-  maintenanceInfo.value = row;
-  maintenanceInfo.value.auditResult = 1;
-  dialog1.visible = true;
-};
-const queryUserList = () => {
-  getUserList({}).then((data) => {
-    userList.value = data.data;
-  });
-};
+  form.value.deviceNo = value.deviceNo
+  form.value.deviceName =value.deviceName
+  form.value.deviceType = value.deviceType
+  form.value.devicePosition = value.devicePosition
+  form.value.oldHead = value.head
+  form.value.devicePosition = value.devicePosition
+  form.value.oldDept = value.deptId
+  dialog.visible = false
+}
+const maintenanceInfo = ref(null)
+const maintenance = (row,type)=>{
+  viewPage.value = type === 0 ? false : true
+  maintenanceInfo.value = row
+  maintenanceInfo.value.auditResult = 1
+  dialog1.visible = true
+}
+const queryUserList = ()=>{
+  getUserList({}).then((data)=>{
+    userList.value = data.data
+  })
+}
 const handleExport = (row) => {
   allocateExport(row.deviceNo).then((response) => {
     downFile(response);
   });
-};
+}
 /** 文件下载 */
 const downFile = (response) => {
   const fileData = response.data;
   const fileName = decodeURI(
-    response.headers["content-disposition"].split(";")[1].split("=")[1]
+      response.headers["content-disposition"].split(";")[1].split("=")[1]
   );
   const fileType =
-    "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8";
+      "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8";
   const blob = new Blob([fileData], { type: fileType });
   const downloadUrl = window.URL.createObjectURL(blob);
   const downloadLink = document.createElement("a");
@@ -252,29 +189,31 @@ const downFile = (response) => {
   downloadLink.click();
   document.body.removeChild(downloadLink);
   window.URL.revokeObjectURL(downloadUrl);
-};
-const maintenanceInfoForm = ref("maintenanceInfoForm");
-const maintenanceSubmit = () => {
+}
+const maintenanceInfoForm = ref('maintenanceInfoForm')
+const maintenanceSubmit =()=>{
   //alert(JSON.stringify(maintenanceInfo.value))
   maintenanceInfoForm.value.validate((isValid, invalidFields) => {
     if (isValid) {
-      allocateAudit(maintenanceInfo.value).then((data) => {
+      allocateAudit(maintenanceInfo.value).then((data)=>{
         ElMessage({
           message: data.msg,
           type: "success",
         });
-        dialog1.visible = false;
-        dataList();
-      });
+        dialog1.visible = false
+        dataList()
+      })
     }
-  });
-};
+  })
+}
 const rules = reactive({
-  auditUser: [{ required: true, message: "审核人员不能为空", trigger: "blur" }],
-  handleContent: [
-    { required: true, message: "维修内容不能为空", trigger: "blur" },
+  auditUser: [
+    { required: true, message: '审核人员不能为空', trigger: 'blur' }
   ],
-});
+  handleContent: [
+    { required: true, message: '维修内容不能为空', trigger: 'blur' }
+  ]
+})
 // 设置表格列或者其他自定义的option
 option.value = Object.assign(option.value, {
   delBtn: false,
@@ -304,8 +243,8 @@ option.value = Object.assign(option.value, {
         },
       ],
       click: ({ value, column }) => {
-        if (column.boxType) {
-          dialog.visible = true;
+        if(column.boxType){
+          dialog.visible = true
         }
       },
     },
@@ -325,7 +264,9 @@ option.value = Object.assign(option.value, {
       overHidden: true,
       addDisabled: true,
       search: true,
-      dicUrl: dictDataUtil.request_url + dictDataUtil.TYPE_CODE.device_type,
+      dicUrl:
+        dictDataUtil.request_url +
+        dictDataUtil.TYPE_CODE.device_type,
       props: {
         label: "dictLabel",
         value: "dictValue",
@@ -349,7 +290,7 @@ option.value = Object.assign(option.value, {
       props: {
         label: "deptName",
         value: "id",
-      },
+      }
     },
     {
       label: "新部门",
@@ -430,11 +371,7 @@ option.value = Object.assign(option.value, {
       prop: "state",
       display: false,
       type: "select",
-      dicData: [
-        { label: "待审核", value: 0 },
-        { label: "通过", value: 1 },
-        { label: "驳回", value: 2 },
-      ],
+      dicData: [{label: '待审核',value:0},{label: '通过',value:1},{label: '驳回',value:2}],
     },
     {
       label: "申请人",
@@ -455,6 +392,6 @@ option.value = Object.assign(option.value, {
 
 onMounted(() => {
   dataList();
-  queryUserList();
+  queryUserList()
 });
 </script>

+ 35 - 2
src/views/device/data/index.vue

@@ -17,14 +17,21 @@
         @current-change="dataList"
         @selection-change="selectionChange"
     >
+      <template #menu-right="{}">
+        <el-button
+            class="ml-3"
+            @click="handleExport"
+        >
+          <template #icon> <i-ep-download /> </template>导出
+        </el-button>
+      </template>
     </avue-crud>
   </div>
 </template>
 <script setup>
 import { ref, getCurrentInstance } from "vue";
 import { useCrud } from "@/hooks/userCrud";
-import buttonPermission from "@/common/configs/buttonPermission";
-import {queryDeviceList,queryTypeAliasList} from "@/api/device";
+import {queryDeviceList,queryTypeAliasList,exportDataList} from "@/api/device";
 import { useCommonStoreHook } from "@/store";
 const { isShowTable, tableType } = toRefs(useCommonStoreHook());
 const loading = ref(false);
@@ -42,6 +49,32 @@ const { selectionChange, multipleDelete } = Methords; //选中和批量删除事
 const { checkBtnPerm, downloadTemplate, exportData } = Utils; //按钮权限等工具
 const crudRef = ref(null); //crudRef.value 获取avue-crud对象
 const deviceList = ref([])
+const handleExport = () => {
+  exportDataList(search.value).then((response) => {
+    downFile(response);
+  });
+};
+
+/** 文件下载 */
+const downFile = (response) => {
+  const fileData = response.data;
+  const fileName = decodeURI(
+      response.headers["content-disposition"].split(";")[1].split("=")[1]
+  );
+  const fileType =
+      "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8";
+  const blob = new Blob([fileData], { type: fileType });
+  const downloadUrl = window.URL.createObjectURL(blob);
+  const downloadLink = document.createElement("a");
+  downloadLink.href = downloadUrl;
+  downloadLink.download = fileName;
+  document.body.appendChild(downloadLink);
+  downloadLink.click();
+  document.body.removeChild(downloadLink);
+  window.URL.revokeObjectURL(downloadUrl);
+};
+
+
 const searchPage = (params, done) =>{
   if(!search.value.deviceNo){
     ElMessage.warning("请先选择设备进行查询");

+ 116 - 221
src/views/device/instance/index.vue

@@ -1,23 +1,22 @@
 <template>
   <div class="mainContentBox">
     <avue-crud
-      ref="crudRef"
-      v-model:search="search"
-      v-model="form"
-      :data="data"
-      :option="option"
-      v-model:page="page"
-      @row-save="createRow"
-      @row-update="updateRow"
-      @row-del="deleteRow"
-      :permission="permission"
-      @search-change="searchChange"
-      @search-reset="resetChange"
-      @size-change="dataList"
-      @current-change="dataList"
-      @selection-change="selectionChange"
+        ref="crudRef"
+        v-model:search="search"
+        v-model="form"
+        :data="data"
+        :option="option"
+        v-model:page="page"
+        @row-save="createRow"
+        @row-update="updateRow"
+        @row-del="deleteRow"
+        @search-change="searchChange"
+        @search-reset="resetChange"
+        @size-change="dataList"
+        @current-change="dataList"
+        @selection-change="selectionChange"
     >
-      <!--      <template #collect="scope">
+<!--      <template #collect="scope">
         <el-switch
             active-value="1"
             inactive-value="0"
@@ -30,17 +29,14 @@
             style="&#45;&#45;el-switch-on-color: #13ce66; &#45;&#45;el-switch-off-color: #ff4949"
         />
       </template>-->
-      <template #menu="{ size, row, index }">
+      <template #menu="{size,row,index}">
         <el-button
-          v-hasPerm="[buttonPermission.DEVICE.BTNS.instance_edit]"
-          type="primary"
-          link
-          size="small"
-          @click="showParamsPage(row)"
-          >模型
-          <template #icon>
-            <svg-icon icon-class="moxing" />
-          </template>
+            v-hasPerm="[buttonPermission.DEVICE.BTNS.maintenance_edit]"
+            type="primary"
+            link
+            size="small"
+            @click="showParamsPage(row)"
+        ><i-ep-edit />模型
         </el-button>
       </template>
       <template #menu-left="{ size }">
@@ -49,27 +45,17 @@
           type="danger"
           icon="el-icon-delete"
           :size="size"
-          v-hasPerm="[buttonPermission.DEVICE.BTNS.instance_del]"
           @click="multipleDelete"
           >删除</el-button
         >
-
-        <!--        <el-button
-            :disabled="toDeleteIds.length < 1"
-            type="refresh"
-            icon="el-icon-refresh"
-            :size="size"
-            @click="apsSync"
-        >APS同步</el-button
-        >-->
       </template>
       <template #menu-right="{}">
         <el-dropdown split-button
-          >导入
+        >导入
           <template #dropdown>
             <el-dropdown-menu>
               <el-dropdown-item
-                @click="downloadTemplate('/api/v1/device/template')"
+                  @click="downloadTemplate('/api/v1/device/template')"
               >
                 <i-ep-download />下载模板
               </el-dropdown-item>
@@ -79,99 +65,75 @@
             </el-dropdown-menu>
           </template>
         </el-dropdown>
-        <el-button class="ml-3" @click="exportData('/api/v1/device/export')">
+        <el-button
+            class="ml-3"
+            @click="exportData('/api/v1/device/export')"
+        >
           <template #icon> <i-ep-download /> </template>导出
         </el-button>
       </template>
     </avue-crud>
     <el-dialog
-      v-model="dialog.visible"
-      :title="dialog.title"
-      width="30%"
-      @close="dialog.visible = false"
+        v-model="dialog.visible"
+        :title="dialog.title"
+        width="30%"
+        @close="dialog.visible = false"
     >
-      <el-button
-        type="primary"
-        @click="addItem"
-        icon="el-icon-plus"
-        style="margin-left: 15px; width: 25px; height: 25px"
-        circle
-      />
+      <el-button type="primary" @click="addItem" icon="el-icon-plus" style="margin-left:15px;width:25px;height:25px;" circle />
       <el-table
-        v-loading="loading"
-        ref="ruleListRef"
-        :data="pageData"
-        style="height: 280px"
+          v-loading="loading"
+          ref="ruleListRef"
+          :data="pageData"
+          style="height: 280px"
       >
-        <el-table-column label="参数" prop="fieldCode">
-          <template #default="{ row }">
-            <el-input v-model="row.fieldCode" />
+        <el-table-column
+            label="参数"
+            prop="fieldCode"
+        >
+          <template v-slot="{ row}">
+            <el-input v-model="row.fieldCode"/>
           </template>
         </el-table-column>
-        <el-table-column label="参数名称" prop="fieldLabel">
-          <template #default="{ row }">
-            <el-input v-model="row.fieldLabel" />
+        <el-table-column
+            label="参数名称"
+            prop="fieldLabel"
+        >
+          <template v-slot="{ row}">
+            <el-input v-model="row.fieldLabel"/>
           </template>
         </el-table-column>
-        <el-table-column label="参数值" prop="fieldValue">
-          <template #default="{ row }">
-            <el-input v-model="row.fieldValue" />
+        <el-table-column
+            label="参数值"
+            prop="fieldValue"
+        >
+          <template v-slot="{ row}">
+            <el-input v-model="row.fieldValue"/>
           </template>
         </el-table-column>
-        <el-table-column label="操作" align="center">
-          <template #default="{ row }">
-            <el-button
-              type="danger"
-              @click="minusItem(row)"
-              icon="el-icon-minus"
-              style="margin-left: 15px; width: 25px; height: 25px"
-              circle
-            />
+        <el-table-column
+            label="操作"
+            align="center"
+        >
+          <template v-slot="{ row}">
+            <el-button type="danger" @click="minusItem(row)" icon="el-icon-minus" style="margin-left:15px;width:25px;height:25px;" circle />
           </template>
         </el-table-column>
       </el-table>
-      <div class="dialog-footer" style="margin-top: 20px" align="center">
-        <el-button type="primary" @click="handleSubmit">保 存</el-button>
+      <div class="dialog-footer" style="margin-top:20px"  align="center">
+        <el-button type="primary" v-if="pageData.length>0" @click="handleSubmit">保 存</el-button>
         <el-button @click="dialog.visible = false">取消</el-button>
       </div>
     </el-dialog>
-    <el-dialog
-      v-model="dialog2.visible"
-      :title="dialog2.title"
-      width="70%"
-      @close="dialog2.visible = false"
-    >
-      <choice-workshop-page @work-shop-info="workShopInfo" />
-    </el-dialog>
-    <el-dialog
-      v-model="dialog3.visible"
-      :title="dialog3.title"
-      width="70%"
-      @close="dialog3.visible = false"
-    >
-      <choice-station-page @station-info="stationInfo" />
-    </el-dialog>
     <ExcelUpload ref="uploadRef" @finished="uploadFinished" />
   </div>
-  <CommonTable
-    ref="ctableRef"
-    tableTitle="负责人选择"
-    tableType="USERS"
-    @selected-sure="onSelectedFinish"
-  />
 </template>
 <script setup>
 import { ref, getCurrentInstance } from "vue";
 import { useCrud } from "@/hooks/userCrud";
 import buttonPermission from "@/common/configs/buttonPermission";
-import { configSave, configList, deviceUpdateCollect } from "@/api/device";
-import { syncAps } from "@/api/aps";
+import {configSave,configList,deviceUpdateCollect} from "@/api/device";
 import { useCommonStoreHook } from "@/store";
-import ChoiceWorkshopPage from "../../plan/workOrder/components/choice-workshop-page.vue";
-import ChoiceStationPage from "./components/choice-station-page.vue";
 import dictDataUtil from "@/common/configs/dictDataUtil";
-import { checkPerm } from "@/directive/permission";
-import { ElMessage, ElMessageBox } from "element-plus";
 const { isShowTable, tableType } = toRefs(useCommonStoreHook());
 const test = () => {
   isShowTable.value = true;
@@ -179,120 +141,68 @@ const test = () => {
 };
 const pageData = ref([]);
 const loading = ref(false); //  加载状态
-const addItem = () => {
-  pageData.value.push({
-    deviceType: clickRow.value.deviceType,
-    deviceNo: clickRow.value.deviceNo,
-    type: 1,
-  });
-};
-const permission = reactive({
-  delBtn: checkPerm(buttonPermission.DEVICE.BTNS.instance_del),
-  addBtn: checkPerm(buttonPermission.DEVICE.BTNS.instance_add),
-  editBtn: checkPerm(buttonPermission.DEVICE.BTNS.instance_edit),
-  menu: true,
-});
-const minusItem = (row) => {
-  pageData.value = pageData.value.filter(
-    (item) => item.fieldCode !== row.fieldCode
-  );
-};
-const changeItem = (obj, row) => {
-  deviceUpdateCollect({
-    id: row.id,
-    collect: row.collect,
-    deviceNo: row.deviceNo,
-  }).then((data) => {
-    if (data.code === "200") {
-      ElMessage.success(data.msg);
-    } else {
-      ElMessage.error(data.msg);
-    }
-  });
-};
-const apsSync = () => {
-  ElMessageBox.confirm("是否同步所选中数据?", "提示", {
-    confirmButtonText: "确定",
-    cancelButtonText: "取消",
-    type: "warning",
-  }).then(async () => {
-    let param = { type: 1, codes: toDeleteIds.value };
-    syncAps(param).then((data) => {
-      if (data.code === "200") {
+const addItem = () =>{
+  pageData.value.push({deviceType: clickRow.value.deviceType,deviceNo: clickRow.value.deviceNo,type: 1})
+}
+const minusItem = (row) =>{
+  pageData.value = pageData.value.filter(item=>item.fieldCode !== row.fieldCode)
+}
+const changeItem =(obj,row) => {
+    deviceUpdateCollect({id: row.id,collect: row.collect,deviceNo: row.deviceNo}).then((data)=>{
+      if(data.code === '200'){
         ElMessage.success(data.msg);
-      } else {
+      }else{
         ElMessage.error(data.msg);
       }
-    });
-  });
-};
-const clickRow = ref(null);
-const showParamsPage = (row) => {
-  clickRow.value = row;
-  configList({ deviceNo: row.deviceNo }).then((data) => {
-    pageData.value = data.data;
-    dialog.visible = true;
-  });
-};
+    })
+}
+const clickRow = ref(null)
+const showParamsPage = (row)=>{
+  clickRow.value = row
+  configList({deviceNo: row.deviceNo}).then((data)=>{
+    pageData.value = data.data
+    dialog.visible = true
+  })
+}
 const dialog = reactive({
   title: "模型设置",
   visible: false,
 });
 const handleSubmit = () => {
   //判断参数
-  let errorData = pageData.value.filter((item) => !item.fieldCode);
-  if (errorData.length > 0) {
+  let errorData = pageData.value.filter(item=>!item.fieldCode)
+  if(errorData.length > 0){
     ElMessage.warning("请填写参数");
-    return;
+    return
   }
-  errorData = pageData.value.filter((item) => !item.fieldLabel);
-  if (errorData.length > 0) {
+  errorData = pageData.value.filter(item=>!item.fieldLabel)
+  if(errorData.length > 0){
     ElMessage.warning("请填写参数名");
-    return;
+    return
   }
-  errorData = pageData.value.filter((item) => !item.fieldValue);
-  if (errorData.length > 0) {
+  errorData = pageData.value.filter(item=>!item.fieldValue)
+  if(errorData.length > 0){
     ElMessage.warning("请填写参数值");
-    return;
+    return
   }
-  configSave(pageData.value).then((data) => {
-    if (data.code === "200") {
+  configSave(pageData.value).then((data)=>{
+    if(data.code === '200'){
       ElMessage.success(data.msg);
-    } else {
+    }else{
       ElMessage.error(data.msg);
     }
-  });
+  })
 };
 // 传入一个url,后面不带/
 const { form, data, option, search, page, toDeleteIds, Methords, Utils } =
   useCrud({
     src: "/api/v1/device",
   });
-const { dataList, createRow, updateRow, deleteRow, searchChange, resetChange } =
-  Methords; //增删改查
+const { dataList, createRow, updateRow, deleteRow, searchChange, resetChange } = Methords; //增删改查
 const { selectionChange, multipleDelete } = Methords; //选中和批量删除事件
 const { checkBtnPerm, downloadTemplate, exportData } = Utils; //按钮权限等工具
 const crudRef = ref(null); //crudRef.value 获取avue-crud对象
-const workShopInfo = (value) => {
-  form.value.workshop = value.name;
-  dialog2.visible = false;
-};
-const ctableRef = ref(null);
-const onSelectedFinish = (selectedValue) => {
-  form.value.head = selectedValue.userName;
-};
-const stationInfo = (value) => {
-  form.value.station = value.name;
-  dialog3.visible = false;
-};
-const dialog2 = reactive({
-  title: "车间选择",
-  visible: false,
-});
-const dialog3 = reactive({
-  title: "工位选择",
-  visible: false,
-});
+
 // 设置表格列或者其他自定义的option
 option.value = Object.assign(option.value, {
   delBtn: false,
@@ -335,7 +245,9 @@ option.value = Object.assign(option.value, {
       width: 130,
       overHidden: true,
       search: true,
-      dicUrl: dictDataUtil.request_url + dictDataUtil.TYPE_CODE.device_type,
+      dicUrl:
+        dictDataUtil.request_url +
+        dictDataUtil.TYPE_CODE.device_type,
       props: {
         label: "dictLabel",
         value: "dictValue",
@@ -355,7 +267,9 @@ option.value = Object.assign(option.value, {
       width: 120,
       overHidden: true,
       search: true,
-      dicUrl: dictDataUtil.request_url + dictDataUtil.TYPE_CODE.device_status,
+      dicUrl:
+          dictDataUtil.request_url +
+          dictDataUtil.TYPE_CODE.device_status,
       props: {
         label: "dictLabel",
         value: "dictValue",
@@ -382,20 +296,20 @@ option.value = Object.assign(option.value, {
         }
       },
     },
-    /*{
+    {
       label: "连接状态",
       prop: "collectState",
       width: 100,
       display: false,
       html: true,
       formatter: (val) => {
-        if (val.onlineState === "1") {
+        if (val.collectState === "1") {
           return '<b class="el-tag el-tag--success el-tag--light">已连接</b>';
         } else {
           return '<b class="el-tag el-tag--warning el-tag--light">未连接</b>';
         }
       },
-    },*/
+    },
     {
       label: "负责人",
       prop: "head",
@@ -408,17 +322,14 @@ option.value = Object.assign(option.value, {
           trigger: "trigger",
         },
       ],
-      click: ({ value, column }) => {
-        ctableRef.value.startSelect();
-      },
     },
     {
       label: "计量有效期",
       prop: "meteringDate",
       type: "date",
       width: 160,
-      format: "YYYY-MM-DD",
-      valueFormat: "YYYY-MM-DD",
+      format: 'YYYY-MM-DD',
+      valueFormat: 'YYYY-MM-DD',
       overHidden: true,
       rules: [
         {
@@ -435,11 +346,11 @@ option.value = Object.assign(option.value, {
       width: 120,
       overHidden: true,
       search: true,
-      dicUrl: import.meta.env.VITE_APP_BASE_API + "/api/v1/device/pacList",
+      dicUrl:import.meta.env.VITE_APP_BASE_API + "/api/v1/device/pacList",
       props: {
         label: "deviceName",
         value: "deviceNo",
-      },
+      }
     },
     /*{
       label: "是否采集",
@@ -465,37 +376,20 @@ option.value = Object.assign(option.value, {
       props: {
         label: "deptName",
         value: "id",
-      },
+      }
     },
-    /*{
+    {
       label: "所在车间",
       prop: "workshop",
       width: 160,
       overHidden: true,
-      click: ({ value, column }) => {
-        if (column.boxType) {
-          dialog2.visible = true;
-        }
-      },
     },
     {
       label: "所在工位",
       prop: "station",
       width: 160,
       overHidden: true,
-      click: ({ value, column }) => {
-        if (column.boxType) {
-          /!*if(!form.value.workshop){
-            ElMessage({
-              message: "请先选择车间",
-              type: "warning",
-            });
-            return;
-          }*!/
-          dialog3.visible = true;
-        }
-      },
-    },*/
+    },
     {
       label: "设备位置",
       prop: "devicePosition",
@@ -518,6 +412,7 @@ option.value = Object.assign(option.value, {
 });
 
 onMounted(() => {
+  // console.log("crudRef", crudRef)
   dataList();
 });
 /**

+ 0 - 1
src/views/device/maintenance/index.vue

@@ -84,7 +84,6 @@
                     v-model="maintenanceInfo.userName"
                     placeholder="维护人员"
                     size="large"
-                    filterable
                     style="width: 240px">
                   <el-option
                       v-for="item in userList"

+ 0 - 1
src/views/device/metering/index.vue

@@ -76,7 +76,6 @@
                     v-model="maintenanceInfo.userName"
                     placeholder="计量人员"
                     size="large"
-                    filterable
                     style="width: 240px">
                   <el-option
                       v-for="item in userList"

+ 19 - 1
src/views/device/pac/index.vue

@@ -29,6 +29,15 @@
             style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949"
         />
       </template>
+      <template #menu="{size,row,index}">
+        <el-button
+            type="primary"
+            link
+            size="small"
+            @click="restart(row)"
+        ><i-ep-edit />重启
+        </el-button>
+      </template>
       <template #menu-left="{ size }">
         <el-button
           :disabled="toDeleteIds.length < 1"
@@ -45,7 +54,7 @@
 <script setup>
 import { ref, getCurrentInstance } from "vue";
 import { useCrud } from "@/hooks/userCrud";
-import {configSave,configList,deviceUpdateCollect} from "@/api/device";
+import {configSave,deviceRestart,deviceUpdateCollect} from "@/api/device";
 import { useCommonStoreHook } from "@/store";
 import dictDataUtil from "@/common/configs/dictDataUtil";
 const { isShowTable, tableType } = toRefs(useCommonStoreHook());
@@ -81,6 +90,15 @@ const changeItem =(obj,row) => {
     }
   })
 }
+const restart =(row) => {
+  deviceRestart({id: row.id,collect: row.collect,deviceNo: row.deviceNo}).then((data)=>{
+    if(data.code === '200'){
+      ElMessage.success(data.msg);
+    }else{
+      ElMessage.error(data.msg);
+    }
+  })
+}
 // 设置表格列或者其他自定义的option
 option.value = Object.assign(option.value, {
   delBtn: false,

+ 56 - 60
src/views/device/protocol/index.vue

@@ -1,53 +1,49 @@
 <template>
   <div class="mainContentBox">
     <avue-crud
-      ref="crudRef"
-      v-model:search="search"
-      v-model="form"
-      :data="data"
-      :option="option"
-      v-model:page="page"
-      @row-save="createRow"
-      @row-update="updateRow"
-      @row-del="deleteRow"
-      @search-change="searchChange"
-      @search-reset="resetChange"
-      @size-change="dataList"
-      @current-change="dataList"
-      @selection-change="selectionChange"
+        ref="crudRef"
+        v-model:search="search"
+        v-model="form"
+        :data="data"
+        :option="option"
+        v-model:page="page"
+        @row-save="createRow"
+        @row-update="updateRow"
+        @row-del="deleteRow"
+        @search-change="searchChange"
+        @search-reset="resetChange"
+        @size-change="dataList"
+        @current-change="dataList"
+        @selection-change="selectionChange"
     >
-      <template #menu="{ row }">
+      <template #menu="{row}">
         <el-button
-          text
-          @click="openDialog(row.deviceType)"
-          type="primary"
-          size="small"
-          >模型
-          <template #icon>
-            <svg-icon icon-class="moxing"></svg-icon>
-          </template>
-        </el-button>
+            icon="el-icon-setting"
+            text
+            @click="openDialog(row.deviceType)"
+            type="primary"
+            size="small">模型</el-button>
       </template>
-      <template #protocolState="{ row }">
+      <template #protocolState="{row}">
         <el-switch
-          active-value="1"
-          inactive-value="0"
-          width="60"
-          inline-prompt
-          active-text="启用"
-          inactive-text="禁用"
-          v-model="row.protocolState"
-          @click="changeItem(row)"
-          class="ml-2"
-          style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949"
+            active-value= '1'
+            inactive-value= '0'
+            width="60"
+            inline-prompt
+            active-text="启用"
+            inactive-text="禁用"
+            v-model="row.protocolState"
+            @click="changeItem(row)"
+            class="ml-2"
+            style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949"
         />
       </template>
     </avue-crud>
     <el-dialog
-      v-model="dialog.visible"
-      :title="dialog.title"
-      width="60%"
-      @close="dialog.visible = false"
+        v-model="dialog.visible"
+        :title="dialog.title"
+        width="60%"
+        @close="dialog.visible = false"
     >
       <model-page :deviceType="choiceDeviceType"></model-page>
     </el-dialog>
@@ -56,7 +52,7 @@
 <script setup>
 import { ref, getCurrentInstance } from "vue";
 import { useCrud } from "@/hooks/userCrud";
-import { updateProtocol } from "@/api/device";
+import {updateProtocol} from "@/api/device";
 import { useCommonStoreHook } from "@/store";
 import dictDataUtil from "@/common/configs/dictDataUtil";
 import ModelPage from "./components/model-page.vue";
@@ -71,32 +67,29 @@ const { form, data, option, search, page, toDeleteIds, Methords, Utils } =
   useCrud({
     dataListUrl: "/api/v1/device/protocolPage",
   });
-const { dataList, createRow, updateRow, deleteRow, searchChange, resetChange } =
-  Methords; //增删改查
+const { dataList, createRow, updateRow, deleteRow, searchChange, resetChange } = Methords; //增删改查
 const { selectionChange, multipleDelete } = Methords; //选中和批量删除事件
 const { checkBtnPerm, downloadTemplate, exportData } = Utils; //按钮权限等工具
 const crudRef = ref(null); //crudRef.value 获取avue-crud对象
-const changeItem = (row) => {
-  updateProtocol({ state: row.protocolState, deviceType: row.deviceType }).then(
-    (data) => {
-      if (data.code === "200") {
-        ElMessage.success(data.msg);
-        dataList();
-      } else {
-        ElMessage.error(data.msg);
-      }
+const changeItem =(row) => {
+  updateProtocol({state: row.protocolState,deviceType: row.deviceType}).then((data)=>{
+    if(data.code === '200'){
+      ElMessage.success(data.msg);
+      dataList()
+    }else{
+      ElMessage.error(data.msg);
     }
-  );
-};
-const choiceDeviceType = ref(null);
+  })
+}
+const choiceDeviceType = ref(null)
 const dialog = reactive({
   title: "模型",
   visible: false,
 });
-const openDialog = (type) => {
-  dialog.visible = true;
-  choiceDeviceType.value = type;
-};
+const openDialog = (type) =>{
+  dialog.visible = true
+  choiceDeviceType.value = type
+}
 // 设置表格列或者其他自定义的option
 option.value = Object.assign(option.value, {
   delBtn: false,
@@ -112,7 +105,9 @@ option.value = Object.assign(option.value, {
       prop: "deviceType",
       type: "select",
       overHidden: true,
-      dicUrl: dictDataUtil.request_url + dictDataUtil.TYPE_CODE.device_type,
+      dicUrl:
+        dictDataUtil.request_url +
+        dictDataUtil.TYPE_CODE.device_type,
       props: {
         label: "dictLabel",
         value: "dictValue",
@@ -144,8 +139,9 @@ option.value = Object.assign(option.value, {
 });
 
 onMounted(() => {
-  search.value.protocol = "1";
+  search.value.protocol = "1"
   // console.log("crudRef", crudRef)
   dataList();
+
 });
 </script>

+ 141 - 227
src/views/device/repair/index.vue

@@ -1,41 +1,39 @@
 <template>
   <div class="mainContentBox">
     <avue-crud
-      ref="crudRef"
-      v-model="form"
-      v-model:page="page"
-      v-model:search="search"
-      :data="data"
-      :option="option"
-      @row-save="createRow"
-      @row-update="updateRow"
-      @row-del="deleteRow"
-      @search-change="searchChange"
-      @search-reset="resetChange"
-      @size-change="dataList"
-      @current-change="dataList"
-      @selection-change="selectionChange"
+        ref="crudRef"
+        v-model:search="search"
+        v-model="form"
+        :data="data"
+        :option="option"
+        v-model:page="page"
+        @row-save="createRow"
+        @row-update="updateRow"
+        @row-del="deleteRow"
+        @search-change="searchChange"
+        @search-reset="resetChange"
+        @size-change="dataList"
+        @current-change="dataList"
+        @selection-change="selectionChange"
     >
       <template #menu-left="{ size }">
         <el-button
-          v-hasPerm="[ButtonPermKeys.DEVICE.BTNS.repair_del]"
           :disabled="toDeleteIds.length < 1"
-          :size="size"
-          icon="el-icon-delete"
           type="danger"
+          icon="el-icon-delete"
+          :size="size"
+          v-hasPerm="[ButtonPermKeys.DEVICE.BTNS.repair_del]"
           @click="multipleDelete"
-        >删除
-        </el-button
+          >删除</el-button
         >
       </template>
-      <template #menu="{ size, row, index }">
-        <el-button :size="size" text type="primary" @click="maintenance(row, 0)"
-        >流程
-          <template #icon>
-            <svg-icon icon-class="liucheng"></svg-icon>
-          </template>
-        </el-button>
-        <!--        <el-button @click="maintenance(row,1)"
+      <template #menu="{size,row,index}">
+        <el-button @click="maintenance(row,0)"
+                   icon="el-icon-check"
+                   text
+                   type="primary"
+                   :size="size">流程</el-button>
+<!--        <el-button @click="maintenance(row,1)"
                    icon="el-icon-fold"
                    text
                    type="primary"
@@ -43,182 +41,105 @@
       </template>
     </avue-crud>
     <el-dialog
-      v-model="dialog.visible"
-      :title="dialog.title"
-      width="850px"
-      @close="dialog.visible = false"
+        v-model="dialog.visible"
+        :title="dialog.title"
+        width="850px"
+        @close="dialog.visible = false"
     >
-      <device-page @deviceInfo="deviceInfo"/>
+      <device-page  @deviceInfo="deviceInfo"/>
     </el-dialog>
 
     <el-dialog
-      v-model="dialog1.visible"
-      :title="dialog1.title"
-      height="80%"
-      width="750px"
-      @close="dialog1.visible = false"
-    >
-      <el-timeline style="max-width: 500px; margin-left: 100px">
-        <el-timeline-item center placement="top" type="success">
+        v-model="dialog1.visible"
+        :title="dialog1.title"
+        width="750px"
+        height="80%"
+        @close="dialog1.visible = false">
+      <el-timeline style="max-width: 500px;margin-left: 100px">
+        <el-timeline-item center type="success" placement="top">
           <el-card>
             <h4>设备报故</h4>
-            <p>设备编号: {{ maintenanceInfo.deviceNo }}</p>
-            <p>设备名称: {{ maintenanceInfo.deviceName }}</p>
-            <p>报故人员: {{ maintenanceInfo.creator }}</p>
-            <p>故障描述: {{ maintenanceInfo.bugRemark }}</p>
-            <p>报故时间: {{ maintenanceInfo.created }}</p>
+            <p>设备编号: {{maintenanceInfo.deviceNo}}</p>
+            <p>设备名称: {{maintenanceInfo.deviceName}}</p>
+            <p>报故人员: {{maintenanceInfo.creator}}</p>
+            <p>故障描述: {{maintenanceInfo.bugRemark}}</p>
+            <p>报故时间: {{maintenanceInfo.created}}</p>
           </el-card>
         </el-timeline-item>
-        <el-timeline-item
-          :type="maintenanceInfo.state === 0 ? 'primary' : 'success'"
-          center
-          placement="top"
-        >
+        <el-timeline-item center placement="top"  :type="maintenanceInfo.state === 0 ? 'primary' : 'success'">
           <el-card v-if="viewPage">
             <h4>设备维修</h4>
-            <p>维修人员: {{ maintenanceInfo.handleUser }}</p>
-            <p>维修内容: {{ maintenanceInfo.handleContent }}</p>
-            <p>
-              处理结果:
-              {{
-                maintenanceInfo.handleUser
-                  ? maintenanceInfo.handleResult === 0
-                    ? "可正常运行"
-                    : "报废"
-                  : ""
-              }}
-            </p>
+            <p>维修人员: {{maintenanceInfo.handleUser}}</p>
+            <p>维修内容: {{maintenanceInfo.handleContent}}</p>
+            <p>处理结果: {{maintenanceInfo.handleUser ? (maintenanceInfo.handleResult === 0 ? '可正常运行' : '报废') : ''}}</p>
           </el-card>
           <el-card v-if="!viewPage">
             <h4>设备维修</h4>
-            <el-form
-              ref="maintenanceInfoForm1"
-              :model="maintenanceInfo"
-              :rules="rules1"
-              label-width="auto"
-              style="max-width: 400px"
-            >
+            <el-form ref="maintenanceInfoForm1" :model="maintenanceInfo" label-width="auto" style="max-width: 400px" :rules="rules1">
               <el-form-item label="维修人员" prop="handleUser">
-                <!--                <el-input :disabled="maintenanceInfo.state !== 0" v-model="maintenanceInfo.handleUser" />-->
+<!--                <el-input :disabled="maintenanceInfo.state !== 0" v-model="maintenanceInfo.handleUser" />-->
                 <el-select
-                  v-model="maintenanceInfo.handleUser"
-                  :disabled="maintenanceInfo.state !== 0"
-                  filterable
-                  placeholder="维修人员"
-                  size="large"
-                >
+                    v-model="maintenanceInfo.handleUser"
+                    placeholder="维修人员"
+                    :disabled="maintenanceInfo.state !== 0"
+                    size="large"
+                    filterable>
                   <el-option
-                    v-for="item in userList"
-                    :key="item.userName"
-                    :label="item.userName"
-                    :value="item.userName"
+                      v-for="item in userList"
+                      :key="item.userName"
+                      :label="item.userName"
+                      :value="item.userName"
                   />
                 </el-select>
               </el-form-item>
               <el-form-item label="维修内容" prop="handleContent">
-                <el-input
-                  v-model="maintenanceInfo.handleContent"
-                  :disabled="maintenanceInfo.state !== 0"
-                  :rows="2"
-                  type="textarea"
-                />
+                <el-input :disabled="maintenanceInfo.state !== 0" type="textarea" :rows="2" v-model="maintenanceInfo.handleContent" />
               </el-form-item>
               <el-form-item label="处理结果">
-                <el-radio-group
-                  v-model="maintenanceInfo.handleResult"
-                  :disabled="maintenanceInfo.state !== 0"
-                  class="ml-4"
-                >
+                <el-radio-group :disabled="maintenanceInfo.state !== 0" v-model="maintenanceInfo.handleResult" class="ml-4">
                   <el-radio :value="0">可正常运行</el-radio>
                   <el-radio :value="1">报废</el-radio>
                 </el-radio-group>
               </el-form-item>
               <el-form-item style="margin-left: 45%">
-                <el-button
-                  v-if="maintenanceInfo.state === 0"
-                  v-hasPerm="[ButtonPermKeys.DEVICE.BTNS.repair_repair]"
-                  :disabled="maintenanceInfo.state !== 0"
-                  type="primary"
-                  @click="maintenanceSubmit1"
-                >维修
-                </el-button
-                >
+                <el-button type="primary" v-if="maintenanceInfo.state === 0" v-hasPerm="[ButtonPermKeys.DEVICE.BTNS.repair_repair]" :disabled="maintenanceInfo.state !== 0" @click="maintenanceSubmit1">维修</el-button>
               </el-form-item>
             </el-form>
           </el-card>
         </el-timeline-item>
-        <el-timeline-item
-          :type="
-            maintenanceInfo.state === 1
-              ? 'primary'
-              : maintenanceInfo.state === 0
-                ? 'info'
-                : 'success'
-          "
-          center
-          placement="top"
-        >
+        <el-timeline-item center placement="top"  :type="maintenanceInfo.state === 1 ? 'primary' : maintenanceInfo.state === 0 ? 'info' : 'success'">
           <el-card v-if="viewPage">
             <h4>设备审批</h4>
-            <p>审批人员: {{ maintenanceInfo.auditUser }}</p>
-            <p>
-              审批结果:
-              {{
-                maintenanceInfo.auditUser
-                  ? maintenanceInfo.auditResult === 0
-                    ? "通过"
-                    : "不通过"
-                  : ""
-              }}
-            </p>
+            <p>审批人员: {{maintenanceInfo.auditUser}}</p>
+            <p>审批结果: {{maintenanceInfo.auditUser ? (maintenanceInfo.auditResult === 0 ? '通过' : '不通过') : ''}}</p>
           </el-card>
           <el-card v-if="!viewPage">
             <h4>设备审批</h4>
-            <el-form
-              v-if="maintenanceInfo.state >= 1"
-              ref="maintenanceInfoForm2"
-              :model="maintenanceInfo"
-              :rules="rules2"
-              label-width="auto"
-              style="max-width: 400px"
-            >
+            <el-form ref="maintenanceInfoForm2" v-if="maintenanceInfo.state >= 1" :model="maintenanceInfo" label-width="auto" style="max-width: 400px" :rules="rules2">
               <el-form-item label="审批人员" prop="auditUser">
-                <!--                <el-input :disabled="maintenanceInfo.state !== 1 && readonly"  v-model="maintenanceInfo.auditUser" />-->
+<!--                <el-input :disabled="maintenanceInfo.state !== 1 && readonly"  v-model="maintenanceInfo.auditUser" />-->
                 <el-select
-                  v-model="maintenanceInfo.auditUser"
-                  :disabled="maintenanceInfo.state !== 1 && readonly"
-                  filterable
-                  placeholder="审批人员"
-                  size="large"
-                >
+                    v-model="maintenanceInfo.auditUser"
+                    placeholder="审批人员"
+                    :disabled="maintenanceInfo.state !== 1 && readonly"
+                    size="large"
+                    filterable>
                   <el-option
-                    v-for="item in userList"
-                    :key="item.userName"
-                    :label="item.userName"
-                    :value="item.userName"
+                      v-for="item in userList"
+                      :key="item.userName"
+                      :label="item.userName"
+                      :value="item.userName"
                   />
                 </el-select>
               </el-form-item>
               <el-form-item label="审批结果">
-                <el-radio-group
-                  v-model="maintenanceInfo.auditResult"
-                  :disabled="maintenanceInfo.state !== 1 && readonly"
-                  class="ml-4"
-                >
+                <el-radio-group :disabled="maintenanceInfo.state !== 1 && readonly" v-model="maintenanceInfo.auditResult" class="ml-4">
                   <el-radio :value="0">通过</el-radio>
                   <el-radio :value="1">不通过</el-radio>
                 </el-radio-group>
               </el-form-item>
               <el-form-item style="margin-left: 45%">
-                <el-button
-                  v-if="maintenanceInfo.state === 1"
-                  v-hasPerm="[ButtonPermKeys.DEVICE.BTNS.repair_audit]"
-                  :disabled="maintenanceInfo.state !== 1"
-                  type="primary"
-                  @click="maintenanceSubmit2"
-                >审批
-                </el-button
-                >
+                <el-button type="primary" v-if="maintenanceInfo.state ===1" v-hasPerm="[ButtonPermKeys.DEVICE.BTNS.repair_audit]" :disabled="maintenanceInfo.state !== 1" @click="maintenanceSubmit2">审批</el-button>
               </el-form-item>
             </el-form>
           </el-card>
@@ -228,16 +149,15 @@
   </div>
 </template>
 <script setup>
-import {ref, getCurrentInstance} from "vue";
-import {useCrud} from "@/hooks/userCrud";
+import { ref, getCurrentInstance } from "vue";
+import { useCrud } from "@/hooks/userCrud";
 import ButtonPermKeys from "@/common/configs/buttonPermission";
-import {checkPerm} from "@/directive/permission";
-import {getUserList} from "@/api/system/user";
-import {repair, audit} from "@/api/device/index";
-import {useCommonStoreHook} from "@/store";
+import { checkPerm } from "@/directive/permission";
+import {getUserList} from "@/api/system/user"
+import {repair,audit} from "@/api/device/index";
+import { useCommonStoreHook } from "@/store";
 import dictDataUtil from "@/common/configs/dictDataUtil";
-
-const {isShowTable, tableType} = toRefs(useCommonStoreHook());
+const { isShowTable, tableType } = toRefs(useCommonStoreHook());
 const test = () => {
   isShowTable.value = true;
   tableType.value = tableType.value == 1 ? 2 : 1;
@@ -248,7 +168,7 @@ const permission = reactive({
   editBtn: checkPerm(ButtonPermKeys.DEVICE.BTNS.repair_edit),
   menu: true,
 });
-const viewPage = ref(true);
+const viewPage = ref(true)
 
 const dialog = reactive({
   title: "设备选择",
@@ -258,79 +178,80 @@ const dialog1 = reactive({
   title: "设备维修",
   visible: false,
 });
-const userList = ref([]);
+const userList = ref([])
 // 传入一个url,后面不带/
-const {form, data, option, search, page, toDeleteIds, Methords, Utils} =
+const { form, data, option, search, page, toDeleteIds, Methords, Utils } =
   useCrud({
     src: "/api/v1/device/repair",
   });
-const {dataList, createRow, updateRow, deleteRow, searchChange, resetChange} =
-  Methords; //增删改查
-const {selectionChange, multipleDelete} = Methords; //选中和批量删除事件
-const {checkBtnPerm, downloadTemplate, exportData} = Utils; //按钮权限等工具
+const { dataList, createRow, updateRow, deleteRow, searchChange, resetChange } = Methords; //增删改查
+const { selectionChange, multipleDelete } = Methords; //选中和批量删除事件
+const { checkBtnPerm, downloadTemplate, exportData } = Utils; //按钮权限等工具
 const crudRef = ref(null); //crudRef.value 获取avue-crud对象
 const deviceInfo = (value) => {
-  form.value.deviceNo = value.deviceNo;
-  form.value.deviceName = value.deviceName;
-  form.value.deviceType = value.deviceType;
-  form.value.devicePosition = value.devicePosition;
-  dialog.visible = false;
-};
-const maintenanceInfo = ref(null);
-const maintenance = (row, type) => {
-  viewPage.value = type === 0 ? false : true;
-  maintenanceInfo.value = row;
-  maintenanceInfo.value.handResult = 0;
-  dialog1.visible = true;
-};
-const queryUserList = () => {
-  getUserList({}).then((data) => {
-    userList.value = data.data;
-  });
-};
-const maintenanceInfoForm1 = ref("maintenanceInfoForm1");
-const maintenanceInfoForm2 = ref("maintenanceInfoForm2");
-const maintenanceSubmit1 = () => {
+  form.value.deviceNo = value.deviceNo
+  form.value.deviceName =value.deviceName
+  form.value.deviceType = value.deviceType
+  form.value.devicePosition = value.devicePosition
+  dialog.visible = false
+}
+const maintenanceInfo = ref(null)
+const maintenance = (row,type)=>{
+  viewPage.value = type === 0 ? false : true
+  maintenanceInfo.value = row
+  maintenanceInfo.value.handResult = 0
+  dialog1.visible = true
+}
+const queryUserList = ()=>{
+  getUserList({}).then((data)=>{
+    userList.value = data.data
+  })
+}
+const maintenanceInfoForm1 = ref('maintenanceInfoForm1')
+const maintenanceInfoForm2 = ref('maintenanceInfoForm2')
+const maintenanceSubmit1 =()=>{
   //alert(JSON.stringify(maintenanceInfo.value))
   maintenanceInfoForm1.value.validate((isValid, invalidFields) => {
     if (isValid) {
-      repair(maintenanceInfo.value).then((data) => {
+      repair(maintenanceInfo.value).then((data)=>{
         ElMessage({
           message: data.msg,
           type: "success",
         });
-        dialog1.visible = false;
-        dataList();
-      });
+        dialog1.visible = false
+        dataList()
+      })
     }
-  });
-};
-const maintenanceSubmit2 = () => {
+  })
+}
+const maintenanceSubmit2 =()=>{
   //alert(JSON.stringify(maintenanceInfo.value))
   maintenanceInfoForm2.value.validate((isValid, invalidFields) => {
     if (isValid) {
-      audit(maintenanceInfo.value).then((data) => {
+      audit(maintenanceInfo.value).then((data)=>{
         ElMessage({
           message: data.msg,
           type: "success",
         });
-        dialog1.visible = false;
-        dataList();
-      });
+        dialog1.visible = false
+        dataList()
+      })
     }
-  });
-};
+  })
+}
 const rules1 = reactive({
   handleUser: [
-    {required: true, message: "维修人员不能为空", trigger: "blur"},
+    { required: true, message: '维修人员不能为空', trigger: 'blur' }
   ],
   handleContent: [
-    {required: true, message: "维修内容不能为空", trigger: "blur"},
-  ],
-});
+    { required: true, message: '维修内容不能为空', trigger: 'blur' }
+  ]
+})
 const rules2 = reactive({
-  auditUser: [{required: true, message: "审批人员不能为空", trigger: "blur"}],
-});
+  auditUser: [
+    { required: true, message: '审批人员不能为空', trigger: 'blur' }
+  ]
+})
 // 设置表格列或者其他自定义的option
 option.value = Object.assign(option.value, {
   delBtn: false,
@@ -338,9 +259,6 @@ option.value = Object.assign(option.value, {
   labelWidth: 150,
   viewBtn: false,
   editBtn: false,
-  selectable: (row, index) => {
-    return row.state === 0;
-  },
   column: [
     {
       label: "设备编号",
@@ -353,9 +271,9 @@ option.value = Object.assign(option.value, {
           trigger: "trigger",
         },
       ],
-      click: ({value, column}) => {
-        if (column.boxType) {
-          dialog.visible = true;
+      click: ({ value, column }) => {
+        if(column.boxType){
+          dialog.visible = true
         }
       },
     },
@@ -370,9 +288,10 @@ option.value = Object.assign(option.value, {
       prop: "deviceType",
       type: "select",
       addDisabled: true,
-      overHidden: true,
       search: true,
-      dicUrl: dictDataUtil.request_url + dictDataUtil.TYPE_CODE.device_type,
+      dicUrl:
+        dictDataUtil.request_url +
+        dictDataUtil.TYPE_CODE.device_type,
       props: {
         label: "dictLabel",
         value: "dictValue",
@@ -396,25 +315,20 @@ option.value = Object.assign(option.value, {
       minRows: 2, //最小行/最小值
       type: "textarea", //类型为多行文本域框
       maxlength: 512, //最大输入长度,
-      overHidden: true,
       rules: [
         {
           required: true,
           message: "故障描述不能为空",
           trigger: "trigger",
-        },
-      ],
+        }
+       ]
     },
     {
       label: "维修状态",
       prop: "state",
       type: "select",
       display: false,
-      dicData: [
-        {label: "待维修", value: 0},
-        {label: "待审批 ", value: 1},
-        {label: "已完成", value: 2},
-      ],
+      dicData:[{label: '待维修',value: 0},{label: '待审批 ',value: 1},{label: '已完成',value: 2}],
     },
     {
       label: "报故人",
@@ -432,6 +346,6 @@ option.value = Object.assign(option.value, {
 
 onMounted(() => {
   dataList();
-  queryUserList();
+  queryUserList()
 });
 </script>