Эх сурвалжийг харах

巡检工单调整,数据结构变更

lipenghui 3 сар өмнө
parent
commit
68e7b3a704

+ 5 - 2
src/api/pms/inspect/order/index.ts

@@ -9,6 +9,7 @@ export interface IotInspectOrderVO {
   remark: string // 备注
   deptId: number // 部门id
   deviceIds: string // 设备id
+  details:[]
 }
 
 // 巡检工单 API
@@ -19,10 +20,12 @@ export const IotInspectOrderApi = {
   },
 
   // 查询巡检工单详情
-  getIotInspectOrder: async (id: number) => {
+  getIotInspectOrder: async (id: number):Promise<IotInspectOrderVO> => {
     return await request.get({ url: `/rq/iot-inspect-order/get?id=` + id })
   },
-
+  getIotInspectOrderDetail: async (id: number) => {
+    return await request.get({ url: `/rq/iot-inspect-order/get/details?id=` + id })
+  },
   // 新增巡检工单
   createIotInspectOrder: async (data: IotInspectOrderVO) => {
     return await request.post({ url: `/rq/iot-inspect-order/create`, data })

+ 1 - 0
src/api/pms/maintain/material/index.ts

@@ -13,6 +13,7 @@ export interface IotMaintainMaterialVO {
   sapCode: string // SAP系统中的物料唯一编号
   status: number // 状态 0启用  1停用
   remark: string // 备注
+  materials:[]
 }
 
 // 工单物料 API

+ 1 - 0
src/config/axios/service.ts

@@ -184,6 +184,7 @@ service.interceptors.response.use(
         const localeStore = useLocaleStore()
         const lang = localeStore.getCurrentLocale.lang
         // const lang = 'en'
+        debugger
         if (data&& data.data) {
           if (data.data.list) {
             if (Array.isArray(data.data.list)) {

+ 3 - 1
src/utils/langHelper.ts

@@ -22,7 +22,9 @@ export const langHelper = {
   transformObject<T extends Record<string, any>>(obj: T, currentLang: string): T {
     const result = { ...obj }
     for (const key in result) {
-      if (typeof result[key] === 'string') {
+      if(Array.isArray(result[key])) {
+        result[key] = this.transformArray(result[key], currentLang)
+      } else if (typeof result[key] === 'string') {
         result[key] = this.getDisplayText(result[key], currentLang)
       } else if (typeof result[key] === 'object' && result[key] !== null) {
         result[key] = this.transformObject(result[key], currentLang)

+ 10 - 10
src/views/pms/inspect/order/InspectOrderDetail.vue

@@ -25,15 +25,15 @@
               <el-input v-model="formData.inspectOrderCode" disabled />
             </el-form-item>
           </el-col>
-          <el-col :span="12">
-            <el-form-item label="周期" prop="planCycle">
-              <el-input
-                type="number"
-                v-model="formData.planCycle"
-                disabled
-              />
-            </el-form-item>
-          </el-col>
+<!--          <el-col :span="12">-->
+<!--            <el-form-item label="周期" prop="planCycle">-->
+<!--              <el-input-->
+<!--                type="number"-->
+<!--                v-model="formData.planCycle"-->
+<!--                disabled-->
+<!--              />-->
+<!--            </el-form-item>-->
+<!--          </el-col>-->
           <el-col :span="12">
             <el-form-item label="负责人" prop="chargeName">
               <el-select v-model="formData.chargeName" style="width: 100%" disabled />
@@ -173,7 +173,7 @@ const formData = ref({
 const formRules = reactive({
   planTitle: [{ required: true, message: '巡检计划标题不能为空', trigger: 'blur' }],
   planCode: [{ required: true, message: '巡检计划编号不能为空', trigger: 'blur' }],
-  planCycle: [{ required: true, message: '周期不能为空', trigger: 'blur' }],
+  // planCycle: [{ required: true, message: '周期不能为空', trigger: 'blur' }],
   planUnit: [{ required: true, message: '单位不能为空', trigger: 'blur' }],
   charges: [{ required: true, message: '负责人不能为空', trigger: 'blur' }]
 })

+ 11 - 11
src/views/pms/inspect/order/WriteOrder.vue

@@ -9,7 +9,7 @@
       >
         <template #label>
           <span class="custom-label">
-            {{ tab.deviceName }} ({{ completedSteps(tabIndex) }}/{{ JSON.parse(tab.itemJson).length }})
+            {{ tab.deviceName }} ({{ completedSteps(tabIndex) }}/{{ tab.orderDetails.length }})
           </span>
         </template>
 
@@ -20,7 +20,7 @@
             class="steps-nav"
           >
             <el-step
-              v-for="(step, stepIndex) in JSON.parse(tab.itemJson)"
+              v-for="(step, stepIndex) in tab.orderDetails"
               :key="stepIndex"
               :title="`${step.item}`"
               :status="getStepStatus(tabIndex, stepIndex)"
@@ -103,10 +103,10 @@
             </ContentWrap>
             <ContentWrap style="margin-top: 50px">
               <el-card>
-                <span style="font-weight: bold">巡检标准:</span>{{JSON.parse(tab.itemJson)[currentStep[tabIndex]].standard}}<br />
+                <span style="font-weight: bold">巡检标准:</span>{{tab.orderDetails[currentStep[tabIndex]].standard}}<br />
                 <el-divider />
                 <span style="font-weight: bold">附件:</span>
-                <el-button v-if="JSON.parse(tab.itemJson)[currentStep[tabIndex]].urls" link type="primary" @click="openWeb(JSON.parse(tab.itemJson)[currentStep[tabIndex]].urls)">
+                <el-button v-if="tab.orderDetails[currentStep[tabIndex]].urls" link type="primary" @click="openWeb(tab.orderDetails[currentStep[tabIndex]].urls)">
                   <Icon size="19" icon="ep:view" />预览
                 </el-button>
               </el-card>
@@ -127,18 +127,18 @@ import { ref, reactive, onMounted } from 'vue'
 import { ElMessage } from 'element-plus'
 import {IotInspectOrderApi} from "@/api/pms/inspect/order";
 import {DICT_TYPE, getBoolDictOptions} from "@/utils/dict";
+
 const { delView } = useTagsViewStore() // 视图操作
 const { currentRoute, push } = useRouter()
 const message = useMessage() // 消息弹窗
-
 const tabs = ref([])
 const { params, name } = useRoute() // 查询参数
 const id = params.id
 onMounted(async () => {
   if (id) {
-    const iotInspectOrder = await IotInspectOrderApi.getIotInspectOrder(id)
-    tabs.value = JSON.parse(iotInspectOrder.deviceIds)
-    initFormData(JSON.parse(iotInspectOrder.deviceIds))
+    const iotInspectOrderDetail = await IotInspectOrderApi.getIotInspectOrderDetail(id)
+    tabs.value = iotInspectOrderDetail
+    initFormData(iotInspectOrderDetail)
     loading.value = false
   }
 })
@@ -167,7 +167,7 @@ const formRules = reactive({
 // 初始化表单数据
 const initFormData = (tabsData) => {
   tabsData.forEach((tab, tabIndex) => {
-    formData[tabIndex] = JSON.parse(tab.itemJson).map((item) => ({
+    formData[tabIndex] = tab.orderDetails.map((item) => ({
       deviceId: item.deviceId,
       indexId: item.indexId,
       ifNormal: item.ifNormal,
@@ -216,7 +216,7 @@ const handleNext =  (tabIndex, deviceId) => {
     return ElMessage.warning('请先完成当前步骤的必填项')
   }
   const current = currentStep.value[tabIndex]
-  const totalSteps = JSON.parse(tabs.value[tabIndex].itemJson).length
+  const totalSteps = tabs.value[tabIndex].length
   if (currentStep.value[tabIndex] < totalSteps - 1) {
     formData[tabIndex][current].indexId = current+1
     formData[tabIndex][current].deviceId = deviceId
@@ -230,7 +230,7 @@ const handleNext =  (tabIndex, deviceId) => {
 }
 
 const isLastStep = (tabIndex) => {
-  return currentStep.value[tabIndex] === JSON.parse(tabs.value[tabIndex].itemJson).length - 1
+  return currentStep.value[tabIndex] === tabs.value[tabIndex].length - 1
 }
 
 // 提交表单

+ 1 - 0
src/views/pms/inspect/order/index.vue

@@ -99,6 +99,7 @@
             <dict-tag :type="DICT_TYPE.PMS_INSPECT_ORDER_STATUS" :value="scope.row.status" />
           </template>
         </el-table-column>
+        <el-table-column label="负责人" align="center" prop="chargeName" />
         <el-table-column label="备注" align="center" prop="remark" />
         <el-table-column
           label="创建时间"

+ 19 - 20
src/views/pms/inspect/plan/IotInspectPlan.vue

@@ -41,24 +41,24 @@
                 />
               </el-form-item>
             </el-col>
-            <el-col :span="12">
-              <el-form-item label="负责人" prop="charges">
-                <el-select
-                  clearable
-                  filterable
-                  v-model="formData.charges"
-                  multiple
-                  style="width: 100%"
-                >
-                  <el-option
-                    v-for="item in deptUsers"
-                    :key="item.id"
-                    :label="item.nickname"
-                    :value="item.id"
-                  />
-                </el-select>
-              </el-form-item>
-            </el-col>
+<!--            <el-col :span="12">-->
+<!--              <el-form-item label="负责人" prop="charges">-->
+<!--                <el-select-->
+<!--                  clearable-->
+<!--                  filterable-->
+<!--                  v-model="formData.charges"-->
+<!--                  multiple-->
+<!--                  style="width: 100%"-->
+<!--                >-->
+<!--                  <el-option-->
+<!--                    v-for="item in deptUsers"-->
+<!--                    :key="item.id"-->
+<!--                    :label="item.nickname"-->
+<!--                    :value="item.id"-->
+<!--                  />-->
+<!--                </el-select>-->
+<!--              </el-form-item>-->
+<!--            </el-col>-->
             <el-col :span="24">
               <el-form-item label="备注" prop="remark">
                 <el-input type="textarea" v-model="formData.remark" />
@@ -194,7 +194,7 @@ const formRules = reactive({
   planCode: [{ required: true, message: '巡检计划编号不能为空', trigger: 'blur' }],
   planCycle: [{ required: true, message: '周期不能为空', trigger: 'blur' }],
   planUnit: [{ required: true, message: '单位不能为空', trigger: 'blur' }],
-  charges: [{ required: true, message: '负责人不能为空', trigger: 'blur' }]
+  // charges: [{ required: true, message: '负责人不能为空', trigger: 'blur' }]
 })
 // 拖动状态管理
 const items = ref([])
@@ -273,7 +273,6 @@ const submitForm = async () => {
       close()
     } else {
       debugger
-      console.log(JSON.stringify(data.charges))
       await IotInspectPlanApi.updateIotInspectPlan(data)
       message.success(t('common.updateSuccess'))
       close()

+ 32 - 33
src/views/pms/maintain/IotMaintain.vue

@@ -18,7 +18,7 @@
                   clearable
                   @clear="deviceClear"
                   placeholder="请选择设备"
-                  @click="openForm"
+                  @click="formType==='update'?undefined:openForm()"
                 />
               </el-form-item>
             </el-col>
@@ -69,23 +69,23 @@
                 />
               </el-form-item>
             </el-col>
-            <el-col :span="8">
-              <el-form-item label="维修负责人" prop="maintainPerson">
-                <el-select
-                  v-model="formData.maintainPerson"
-                  filterable
-                  clearable
-                  style="width: 100%"
-                >
-                  <el-option
-                    v-for="item in deptUsers"
-                    :key="item.id"
-                    :label="item.nickname"
-                    :value="item.id"
-                  />
-                </el-select>
-              </el-form-item>
-            </el-col>
+<!--            <el-col :span="8">-->
+<!--              <el-form-item label="维修负责人" prop="maintainPerson">-->
+<!--                <el-select-->
+<!--                  v-model="formData.maintainPerson"-->
+<!--                  filterable-->
+<!--                  clearable-->
+<!--                  style="width: 100%"-->
+<!--                >-->
+<!--                  <el-option-->
+<!--                    v-for="item in deptUsers"-->
+<!--                    :key="item.id"-->
+<!--                    :label="item.nickname"-->
+<!--                    :value="item.id"-->
+<!--                  />-->
+<!--                </el-select>-->
+<!--              </el-form-item>-->
+<!--            </el-col>-->
             <el-col :span="8">
               <el-form-item label="故障时间" prop="failureTime">
                 <el-date-picker
@@ -139,7 +139,7 @@
 <!--                <UploadFile v-model="formData.outFile" class="min-w-80px" />-->
 <!--              </el-form-item>-->
 <!--            </el-col>-->
-            <el-col :span="12">
+            <el-col :span="16">
               <el-form-item label="故障描述" prop="description">
                 <el-input type="textarea" v-model="formData.description" />
               </el-form-item>
@@ -154,7 +154,7 @@
                 <el-input type="textarea" v-model="formData.solution" />
               </el-form-item>
             </el-col>
-            <el-col :span="12">
+            <el-col :span="24">
               <el-form-item label="备注" prop="remark">
                 <el-input v-model="formData.remark" type="textarea" placeholder="请输入备注" />
               </el-form-item>
@@ -353,7 +353,7 @@ const formRules = reactive({
   // maintainStartTime: [{ required: true, message: '维修开始时间不能为空', trigger: 'blur' }],
   // maintainEndTime: [{ required: true, message: '维修结束时间不能为空', trigger: 'blur' }],
   maintainDescription: [{ required: true, message: '维修描述不能为空', trigger: 'blur' }],
-  maintainPerson: [{ required: true, message: '维修负责人不能为空', trigger: 'blur' }],
+  // maintainPerson: [{ required: true, message: '维修负责人不能为空', trigger: 'blur' }],
   deviceId: [{ required: true, message: '设备id不能为空', trigger: 'blur' }]
   // status: [{ required: true, message: '状态不能为空', trigger: 'blur' }]
 })
@@ -370,7 +370,7 @@ const outFormRules = reactive({
   maintainStartTime: [{ required: true, message: '维修开始时间不能为空', trigger: 'blur' }],
   maintainEndTime: [{ required: true, message: '维修结束时间不能为空', trigger: 'blur' }],
   maintainDescription: [{ required: true, message: '维修描述不能为空', trigger: 'blur' }],
-  maintainPerson: [{ required: true, message: '维修负责人不能为空', trigger: 'blur' }],
+  // maintainPerson: [{ required: true, message: '维修负责人不能为空', trigger: 'blur' }],
   deviceId: [{ required: true, message: '设备id不能为空', trigger: 'blur' }],
   // maintainFee: [{ required: true, message: '维修费用不能为空', trigger: 'blur' }],
   supplier: [{ required: true, message: '供应商不能为空', trigger: 'blur' }]
@@ -411,13 +411,12 @@ const deviceFormRef = ref()
 const openForm = () => {
   deviceFormRef.value.open()
 }
-
 const materialFormRef = ref()
 const currentBomNodeId = ref() // 当前选中的bom节点
 const openMaterialForm = (row: any) => {
   bomNodeId.value = row.bomNodeId
   console.log('这是一个对象:', row.bomNodeId)
-  materialFormRef.value.open(formData.value.deptId, bomNodeId.value)
+  materialFormRef.value.open(formData.value.deptId, bomNodeId.value, formData.value.deviceId)
 }
 
 const maintainFormRef = ref()
@@ -484,9 +483,11 @@ const selectChoose = (selectedMaterial) => {
     if (item.bomNodeId === bomNodeId.value) {
       item.materials = processedMaterials
     }
-    item.materials.forEach((it) => {
-      totalFee.value = it.unitPrice * it.quantity+totalFee.value
-    })
+    if (item.materials) {
+      item.materials.forEach((it) => {
+        totalFee.value = it.unitPrice * it.quantity+totalFee.value
+      })
+    }
   })
   formData.value.maintainFee = totalFee.value;
   console.log('选择完成的数据:', JSON.stringify(selectedMaterial))
@@ -533,12 +534,10 @@ const submitForm = async () => {
         })
         .join(',')
     }
-    debugger
     const data = {
       maintain: formData.value,
       maintainMaterials: list.value
     }
-    debugger
     if (formType.value === 'create') {
       await IotMaintainApi.createIotMaintain(data)
       message.success(t('common.createSuccess'))
@@ -582,7 +581,7 @@ const resetForm = () => {
 }
 onMounted(async () => {
   const deptId = useUserStore().getUser.deptId
-  deptUsers.value = await UserApi.getDeptUsersByDeptId(deptId)
+  //deptUsers.value = await UserApi.getDeptUsersByDeptId(deptId)
   if (id) {
     formType.value = 'update'
     const iotMaintain = await IotMaintainApi.getIotMaintain(id)
@@ -592,9 +591,9 @@ onMounted(async () => {
   } else {
     formData.value.type = 'in'
     formType.value = 'create'
-    const { wsCache } = useCache()
-    const userInfo = wsCache.get(CACHE_KEY.USER)
-    formData.value.maintainPerson = userInfo.user.id
+    // const { wsCache } = useCache()
+    // const userInfo = wsCache.get(CACHE_KEY.USER)
+    // formData.value.maintainPerson = userInfo.user.id
   }
 })
 const handleDelete = async (id: number) => {