Zimo преди 1 седмица
родител
ревизия
b39c972222

+ 1 - 1
.env.local

@@ -4,7 +4,7 @@ NODE_ENV=development
 VITE_DEV=true
 
 # 请求路径  http://192.168.188.200:48080  https://iot.deepoil.cc  http://172.26.0.56:48080
-VITE_BASE_URL='https://iot.deepoil.cc'
+VITE_BASE_URL='http://192.168.188.200:48080'
 
 # 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持 S3 服务
 VITE_UPLOAD_TYPE=server

+ 4 - 98
src/router/modules/remaining.ts

@@ -875,111 +875,17 @@ const remainingRouter: AppRouteRecordRaw[] = [
     },
     children: [
       {
-        path: 'mainworkorder',
-        component: () => import('@/views/pms/iotmainworkorder/index.vue'),
-        name: 'IotMainWorkOrder',
+        path: 'maintenance-work-order',
+        component: () => import('@/views/pms/iotmainworkorder/maintenance-work-order.vue'),
+        name: 'MaintenanceWorkOrder',
         meta: {
-          keepAlive: true,
           noCache: false,
           hidden: true,
           canTo: true,
-          icon: 'ep:menu',
+          icon: 'ep:add',
           title: t('rem.MaintenanceOrder'),
           activeMenu: '/mainworkorder/index'
         }
-      },
-      {
-        path: 'workorderalarm',
-        component: () => import('@/views/pms/iotmainworkorder/IotDeviceMainAlarm.vue'),
-        name: 'IotDeviceMainAlarm',
-        meta: {
-          keepAlive: true,
-          noCache: false,
-          hidden: true,
-          canTo: true,
-          icon: 'ep:menu',
-          title: t('mainPlan.maintenanceQuery'),
-          activeMenu: '/mainworkorder/alarm'
-        }
-      },
-      {
-        path: 'maintenancesearch',
-        component: () => import('@/views/pms/iotmainworkorder/IotMaintenanceSearch.vue'),
-        name: 'IotMaintenanceSearch',
-        meta: {
-          keepAlive: true,
-          noCache: false,
-          hidden: true,
-          canTo: true,
-          icon: 'ep:menu',
-          title: t('mainPlan.maintenanceQuery'),
-          activeMenu: '/mainworkorder/search'
-        }
-      },
-      {
-        path: 'mainworkorder/bom/:id(\\d+)',
-        component: () => import('@/views/pms/iotmainworkorder/IotMainWorkOrderOptimize.vue'),
-        name: 'IotMainWorkOrderOptimize',
-        meta: {
-          noCache: false,
-          hidden: true,
-          canTo: true,
-          icon: 'ep:add',
-          title: t('rem.FillMaintenanceOrder'),
-          activeMenu: '/mainworkorder/bom'
-        }
-      },
-      {
-        path: 'mainworkorder/modify/:id(\\d+)',
-        component: () => import('@/views/pms/iotmainworkorder/IotMainWorkOrderModify.vue'),
-        name: 'IotMainWorkOrderModify',
-        meta: {
-          noCache: false,
-          hidden: true,
-          canTo: true,
-          icon: 'ep:add',
-          title: t('rem.modifyOrder'),
-          activeMenu: '/mainworkorder/modify'
-        }
-      },
-      {
-        path: 'mainworkorder/add',
-        component: () => import('@/views/pms/iotmainworkorder/IotMainWorkOrderAdd.vue'),
-        name: 'IotMainWorkOrderAdd',
-        meta: {
-          noCache: false,
-          hidden: true,
-          canTo: true,
-          icon: 'ep:add',
-          title: t('rem.AddMaintenanceOrder'),
-          activeMenu: '/mainworkorder/add'
-        }
-      },
-      {
-        path: 'mainworkorder/detail/:id(\\d+)',
-        component: () => import('@/views/pms/iotmainworkorder/IotMainWorkOrderDetail.vue'),
-        name: 'IotMainWorkOrderDetail',
-        meta: {
-          noCache: false,
-          hidden: true,
-          canTo: true,
-          icon: 'ep:add',
-          title: t('rem.MaintenanceOrderDetail'),
-          activeMenu: '/mainworkorder/detail'
-        }
-      },
-      {
-        path: 'mainworkorder/device/detail/:orderId/:deviceId(\\d+)',
-        component: () => import('@/views/pms/device/maintenance/MaintenanceDetail.vue'),
-        name: 'IotDeviceMainWorkOrderDetail',
-        meta: {
-          noCache: false,
-          hidden: true,
-          canTo: true,
-          icon: 'ep:add',
-          title: t('rem.MaintenanceOrderDetail'),
-          activeMenu: '/mainworkorder/detail'
-        }
       }
     ]
   },

+ 26 - 29
src/views/pms/device/maintenance/MaintenanceList.vue

@@ -6,30 +6,26 @@
       :model="queryParams"
       ref="queryFormRef"
       :inline="true"
-      label-width="68px"
-    >
+      label-width="68px">
       <el-form-item :label="t('bomList.name')" prop="name">
         <el-input
           v-model="queryParams.name"
           :placeholder="t('bomList.nHolder')"
           clearable
           @keyup.enter="handleQuery"
-          class="!w-240px"
-        />
+          class="!w-240px" />
       </el-form-item>
       <el-form-item :label="t('maintain.status')" prop="result">
         <el-select
           v-model="queryParams.result"
           :placeholder="t('maintain.status')"
           clearable
-          class="!w-240px"
-        >
+          class="!w-240px">
           <el-option
             v-for="dict in getStrDictOptions(DICT_TYPE.PMS_MAIN_WORK_ORDER_RESULT)"
             :key="dict.value"
             :label="dict.label"
-            :value="dict.value"
-          />
+            :value="dict.value" />
         </el-select>
       </el-form-item>
       <el-form-item :label="t('dict.createTime')" prop="createTime">
@@ -40,12 +36,15 @@
           :start-placeholder="t('info.start')"
           :end-placeholder="t('info.end')"
           :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
-          class="!w-220px"
-        />
+          class="!w-220px" />
       </el-form-item>
       <el-form-item>
-        <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> {{ t('file.search') }}</el-button>
-        <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> {{ t('file.reset') }}</el-button>
+        <el-button @click="handleQuery"
+          ><Icon icon="ep:search" class="mr-5px" /> {{ t('file.search') }}</el-button
+        >
+        <el-button @click="resetQuery"
+          ><Icon icon="ep:refresh" class="mr-5px" /> {{ t('file.reset') }}</el-button
+        >
       </el-form-item>
     </el-form>
   </ContentWrap>
@@ -59,47 +58,46 @@
         </template>
       </el-table-column>
       <el-table-column :label="t('bomList.name')" align="center" prop="name" />
-      <el-table-column :label="t('maintain.status')" align="center" prop="result" >
+      <el-table-column :label="t('maintain.status')" align="center" prop="result">
         <template #default="scope">
           <dict-tag :type="DICT_TYPE.PMS_MAIN_WORK_ORDER_RESULT" :value="scope.row.result" />
         </template>
       </el-table-column>
       <el-table-column :label="t('bomList.serviceDue')" align="center" prop="maintenanceInterval" />
-      <el-table-column :label="t('fileInfo.fileType')" align="center" prop="type" >
+      <el-table-column :label="t('fileInfo.fileType')" align="center" prop="type">
         <template #default="scope">
           <dict-tag :type="DICT_TYPE.PMS_MAIN_WORK_ORDER_TYPE" :value="scope.row.type" />
         </template>
       </el-table-column>
-      <el-table-column :label="t('iotMaintain.PersonInCharge')" align="center" prop="responsiblePersonName" />
+      <el-table-column
+        :label="t('iotMaintain.PersonInCharge')"
+        align="center"
+        prop="responsiblePersonName" />
       <el-table-column
         :label="t('info.start')"
         align="center"
         prop="actualStartTime"
         :formatter="dateFormatter"
-        width="180px"
-      />
+        width="180px" />
       <el-table-column
         :label="t('info.end')"
         align="center"
         prop="actualEndTime"
         :formatter="dateFormatter"
-        width="180px"
-      />
+        width="180px" />
       <el-table-column
         :label="t('dict.createTime')"
         align="center"
         prop="createTime"
         :formatter="dateFormatter"
-        width="180px"
-      />
+        width="180px" />
       <el-table-column :label="t('iotMaintain.operation')" align="center" min-width="120px">
         <template #default="scope">
           <el-button
             link
             type="primary"
             @click="detail(scope.row.id, props.deviceId)"
-            v-hasPermi="['pms:iot-main-work-order:query']"
-          >
+            v-hasPermi="['pms:iot-main-work-order:query']">
             {{ t('maintain.view') }}
           </el-button>
         </template>
@@ -110,8 +108,7 @@
       :total="total"
       v-model:page="queryParams.pageNo"
       v-model:limit="queryParams.pageSize"
-      @pagination="getList"
-    />
+      @pagination="getList" />
   </ContentWrap>
 
   <!-- 表单弹窗:添加/修改 -->
@@ -121,7 +118,7 @@
 import { dateFormatter } from '@/utils/formatTime'
 import download from '@/utils/download'
 import { IotMainWorkOrderApi, IotMainWorkOrderVO } from '@/api/pms/iotmainworkorder'
-import {DICT_TYPE, getStrDictOptions} from "@/utils/dict";
+import { DICT_TYPE, getStrDictOptions } from '@/utils/dict'
 const { push } = useRouter() // 路由跳转
 
 /** 保养工单 列表 */
@@ -192,10 +189,10 @@ const formRef = ref()
 const openForm = (type: string, id?: number) => {
   // 修改
   if (typeof id === 'number') {
-    push({ name: 'IotMainWorkOrderBom', params: {id } })
+    push({ name: 'MaintenanceWorkOrder', query: { status: 'fill', id } })
     return
   } else {
-    push({ name: 'IotMainWorkOrderAdd', params:{} })
+    push({ name: 'MaintenanceWorkOrder', query: { status: 'create' } })
   }
 }
 
@@ -213,7 +210,7 @@ const handleDelete = async (id: number) => {
 }
 
 const detail = (orderId?: number, deviceId?: number) => {
-  push({ name: 'IotDeviceMainWorkOrderDetail', params:{deviceId, orderId } })
+  push({ name: 'MaintenanceWorkOrder', query: { status: 'detail', id: orderId, deviceId } })
 }
 
 /** 导出按钮操作 */

Файловите разлики са ограничени, защото са твърде много
+ 311 - 237
src/views/pms/iotmainworkorder/IotMainWorkOrder.vue


+ 26 - 48
src/views/pms/iotmainworkorder/index.vue

@@ -239,21 +239,21 @@ const handleBack = async (id: number) => {
 
 const openForm = (type: 'create' | 'update', id?: number) => {
   if (type === 'update' && typeof id === 'number') {
-    push({ name: 'IotMainWorkOrderOptimize', params: { id } })
+    push({ name: 'MaintenanceWorkOrder', query: { status: 'fill', id } })
     return
   }
 
-  push({ name: 'IotMainWorkOrderAdd', params: {} })
+  push({ name: 'MaintenanceWorkOrder', query: { status: 'create' } })
 }
 
 const openModifyForm = (type: 'modify', id?: number) => {
   if (type === 'modify' && typeof id === 'number') {
-    push({ name: 'IotMainWorkOrderModify', params: { id } })
+    push({ name: 'MaintenanceWorkOrder', query: { status: 'modify', id } })
   }
 }
 
 const detail = (id?: number) => {
-  push({ name: 'IotMainWorkOrderDetail', params: { id } })
+  push({ name: 'MaintenanceWorkOrder', query: { status: 'detail', id } })
 }
 
 const handleExport = async () => {
@@ -273,8 +273,7 @@ onMounted(() => {
 
 <template>
   <div
-    class="main-work-order-page grid grid-cols-[auto_1fr] grid-rows-[auto_1fr] gap-4 h-[calc(100vh-20px-var(--top-tool-height)-var(--tags-view-height)-var(--app-footer-height))]"
-  >
+    class="main-work-order-page grid grid-cols-[auto_1fr] grid-rows-[auto_1fr] gap-4 h-[calc(100vh-20px-var(--top-tool-height)-var(--tags-view-height)-var(--app-footer-height))]">
     <DeptTreeSelect
       :top-id="rootDeptId"
       :deptId="deptId"
@@ -283,16 +282,14 @@ onMounted(() => {
       :show-title="false"
       request-api="getSimpleDeptList"
       class="main-work-order-tree row-span-2"
-      @node-click="handleDeptNodeClick"
-    />
+      @node-click="handleDeptNodeClick" />
 
     <el-form
       ref="queryFormRef"
       :model="queryParams"
       size="default"
       label-width="68px"
-      class="main-work-order-query bg-white dark:bg-[#1d1e1f] rounded-lg shadow px-6 py-3 min-w-0"
-    >
+      class="main-work-order-query bg-white dark:bg-[#1d1e1f] rounded-lg shadow px-6 py-3 min-w-0">
       <div class="query-row">
         <el-form-item :label="t('bomList.name')" prop="name">
           <el-input
@@ -300,22 +297,19 @@ onMounted(() => {
             :placeholder="t('bomList.nHolder')"
             clearable
             class="query-control"
-            @keyup.enter="handleQuery"
-          />
+            @keyup.enter="handleQuery" />
         </el-form-item>
         <el-form-item :label="t('bomList.status')" prop="result">
           <el-select
             v-model="queryParams.result"
             :placeholder="t('bomList.status')"
             clearable
-            class="query-control query-control--small"
-          >
+            class="query-control query-control--small">
             <el-option
               v-for="dict in resultOptions"
               :key="dict.value"
               :label="dict.label"
-              :value="dict.value"
-            />
+              :value="dict.value" />
           </el-select>
         </el-form-item>
         <el-form-item :label="t('common.createTime')" prop="createTime" label-width="100px">
@@ -326,8 +320,7 @@ onMounted(() => {
             :start-placeholder="t('operationFill.start')"
             :end-placeholder="t('operationFill.end')"
             :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
-            class="query-control query-control--date"
-          />
+            class="query-control query-control--date" />
         </el-form-item>
       </div>
 
@@ -342,8 +335,7 @@ onMounted(() => {
           type="primary"
           plain
           @click="openForm('create')"
-          v-hasPermi="['pms:iot-main-work-order:create']"
-        >
+          v-hasPermi="['pms:iot-main-work-order:create']">
           <Icon icon="ep:plus" class="mr-5px" />{{ t('operationFill.add') }}
         </el-button>
         <el-button
@@ -351,8 +343,7 @@ onMounted(() => {
           plain
           :loading="exportLoading"
           @click="handleExport"
-          v-hasPermi="['pms:iot-main-work-order:export']"
-        >
+          v-hasPermi="['pms:iot-main-work-order:export']">
           <Icon icon="ep:download" class="mr-5px" />导出
         </el-button>
       </el-form-item>
@@ -368,15 +359,13 @@ onMounted(() => {
               :width="width"
               :height="height"
               :max-height="height"
-              show-border
-            >
+              show-border>
               <ZmTableColumn
                 type="index"
                 :label="t('iotDevice.serial')"
                 :width="70"
                 fixed="left"
-                hide-in-column-settings
-              />
+                hide-in-column-settings />
               <ZmTableColumn prop="name" :label="t('bomList.name')" fixed="left" min-width="300" />
               <ZmTableColumn prop="deptName" :label="t('iotDevice.dept')" min-width="150" />
               <ZmTableColumn prop="result" :label="t('bomList.status')" width="120">
@@ -399,14 +388,12 @@ onMounted(() => {
               <ZmTableColumn
                 prop="responsiblePersonName"
                 :label="t('iotMaintain.PersonInCharge')"
-                min-width="150"
-              />
+                min-width="150" />
               <ZmTableColumn
                 prop="createTime"
                 :label="t('dict.createTime')"
                 :formatter="dateFormatter2"
-                width="180"
-              />
+                width="180" />
               <ZmTableColumn prop="updateTime" :label="t('dict.fillTime')" width="180">
                 <template #default="{ row }">
                   <span v-if="row.result == 2">{{ formatCellDate(row.updateTime) }}</span>
@@ -419,8 +406,7 @@ onMounted(() => {
                     link
                     :type="getDelayReasonButtonType(row.delayReason)"
                     @click="openDelayReasonDialog(row)"
-                    v-hasPermi="['pms:iot-main-work-order:update']"
-                  >
+                    v-hasPermi="['pms:iot-main-work-order:update']">
                     {{ t('mainPlan.delayed') || '延时' }}
                   </el-button>
                   <el-button
@@ -428,16 +414,14 @@ onMounted(() => {
                     link
                     type="primary"
                     @click="openForm('update', row.id)"
-                    v-hasPermi="['pms:iot-main-work-order:update']"
-                  >
+                    v-hasPermi="['pms:iot-main-work-order:update']">
                     {{ t('operationFill.fill') }}
                   </el-button>
                   <el-button
                     link
                     type="primary"
                     @click="detail(row.id)"
-                    v-hasPermi="['pms:iot-main-work-order:query']"
-                  >
+                    v-hasPermi="['pms:iot-main-work-order:query']">
                     {{ t('operationFill.view') }}
                   </el-button>
                   <el-button
@@ -445,8 +429,7 @@ onMounted(() => {
                     link
                     type="danger"
                     @click="handleBack(row.id)"
-                    v-hasPermi="['pms:iot-main-work-order:back']"
-                  >
+                    v-hasPermi="['pms:iot-main-work-order:back']">
                     {{ t('workOrderMaterial.back') }}
                   </el-button>
                   <el-button
@@ -459,8 +442,7 @@ onMounted(() => {
                     type="warning"
                     class="warning-btn"
                     @click="openModifyForm('modify', row.id)"
-                    v-hasPermi="['pms:iot-main-work-order:update']"
-                  >
+                    v-hasPermi="['pms:iot-main-work-order:update']">
                     {{ t('modelTemplate.update') }}
                   </el-button>
                 </template>
@@ -481,8 +463,7 @@ onMounted(() => {
           :total="total"
           layout="total, sizes, prev, pager, next, jumper"
           @size-change="handleSizeChange"
-          @current-change="handleCurrentChange"
-        />
+          @current-change="handleCurrentChange" />
       </div>
     </div>
   </div>
@@ -491,14 +472,12 @@ onMounted(() => {
     v-model="delayReasonDialogVisible"
     :title="t('workOrderMaterial.delayReason') || '延时原因'"
     width="500px"
-    :close-on-click-modal="false"
-  >
+    :close-on-click-modal="false">
     <el-form
       ref="delayReasonFormRef"
       :model="delayReasonForm"
       :rules="delayReasonRules"
-      label-width="0px"
-    >
+      label-width="0px">
       <el-form-item label=" " prop="delayReason" class="required-item" label-width="16px">
         <el-input
           v-model="delayReasonForm.delayReason"
@@ -506,8 +485,7 @@ onMounted(() => {
           :rows="4"
           :placeholder="t('workOrderMaterial.inputDelayReason') || '请输入延时原因'"
           maxlength="500"
-          show-word-limit
-        />
+          show-word-limit />
       </el-form-item>
     </el-form>
     <template #footer>

+ 55 - 0
src/views/pms/iotmainworkorder/maintenance-work-order.vue

@@ -0,0 +1,55 @@
+<script setup lang="ts">
+type WorkOrderStatus = 'fill' | 'modify' | 'detail' | 'create'
+
+const route = useRoute()
+
+const workOrderStatus = computed<WorkOrderStatus>(() => {
+  const status = route.query.status
+  return typeof status === 'string' ? (status as WorkOrderStatus) : 'create'
+})
+const isReadonly = computed(() => workOrderStatus.value === 'detail')
+</script>
+
+<template>
+  <div class="page">
+    <section class="panel">
+      <div class="plan-info-accent"></div>
+    </section>
+  </div>
+</template>
+
+<style scoped lang="scss">
+.page {
+  display: flex;
+  flex-direction: column;
+  gap: 16px;
+  height: calc(
+    100vh - 20px - var(--top-tool-height) - var(--tags-view-height) - var(--app-footer-height)
+  );
+}
+
+.panel {
+  position: relative;
+  flex: 0 0 auto;
+  padding: 18px 20px 8px;
+  overflow: hidden;
+  background: var(--el-bg-color);
+  border: 1px solid var(--el-border-color-lighter);
+  border-radius: 8px;
+  box-shadow: 0 1px 3px rgb(0 0 0 / 4%);
+}
+
+.plan-info-accent {
+  position: absolute;
+  top: 0;
+  right: 0;
+  left: 0;
+  height: 3px;
+  background: linear-gradient(
+    90deg,
+    var(--el-color-primary),
+    var(--el-color-success),
+    var(--el-color-warning)
+  );
+}
+</style>

Някои файлове не бяха показани, защото твърде много файлове са промени