Bläddra i källkod

解决安全检查记录相关问题

yangguanjin 1 vecka sedan
förälder
incheckning
286fff73e1

+ 20 - 0
src/api/ApiRouter/taskOrderSecurityCheck.ts

@@ -9,12 +9,14 @@ import {
   getBoilerSecurityCheckTemplate,
   delBoilerSecurityCheck,
   createBoilerSecurityCheck,
+  updateBoilerSecurityCheck,
 } from '@/api/boiler/boilerTaskOrderSecurityCheck'
 import {
   getPipeSecurityCheckPage,
   getPipeSecurityCheckTemplate,
   delPipeSecurityCheck,
   createPipeSecurityCheck,
+  updatePipeSecurityCheck,
 } from '@/api/pipe/pipeTaskOrderSecurityCheck'
 
 type Adapter = {
@@ -28,6 +30,7 @@ export enum SecurityCheckFuncName {
   getTemplate,
   delSecurityCheckItem,
   createSecurityCheckItem,
+  updateSecurityCheckItem,
 }
 
 const map = {
@@ -99,6 +102,23 @@ const map = {
       outputAdapter: null,
     },
   },
+  [SecurityCheckFuncName.updateSecurityCheckItem]: {
+    [EquipmentType.BOILER]: {
+      inputAdapter: null,
+      reqFunction: updateBoilerSecurityCheck,
+      outputAdapter: null,
+    },
+    [EquipmentType.PIPE]: {
+      inputAdapter: null,
+      reqFunction: updatePipeSecurityCheck,
+      outputAdapter: null,
+    },
+    [EquipmentType.CONTAINER]: {
+      inputAdapter: null,
+      reqFunction: updateBoilerSecurityCheck,
+      outputAdapter: null,
+    },
+  },
 }
 
 export const requestFunc = (funcName: SecurityCheckFuncName, equipType: EquipmentType, params: any) => {

+ 4 - 0
src/api/boiler/boilerTaskOrderSecurityCheck.ts

@@ -19,3 +19,7 @@ export const createBoilerSecurityCheck = (data: any) => {
 export const delBoilerSecurityCheck = (params: any) => {
   return httpDelete('/pressure2/boiler-task-order-security-check/delete', params)
 }
+
+export const updateBoilerSecurityCheck = (data: any) => {
+  return httpPost('/pressure2/boiler-task-order-security-check/update', data)
+}

+ 4 - 0
src/api/pipe/pipeTaskOrderSecurityCheck.ts

@@ -19,3 +19,7 @@ export const createPipeSecurityCheck = (data: any) => {
 export const delPipeSecurityCheck = (params: any) => {
   return httpDelete('/pressure2/pipe-task-order-security-check/delete', params)
 }
+
+export const updatePipeSecurityCheck = (data: any) => {
+  return httpPost('/pressure2/pipe-task-order-security-check/update', data)
+}

+ 0 - 1
src/pages/loading/index.vue

@@ -100,7 +100,6 @@ const handleWebSubmit = () => {
   }
   let userInfo: any
   try {
-    console.log('inputUserInfo.value.trim()', inputUserInfo.value.trim())
     userInfo = JSON.parse(inputUserInfo.value.trim())
   } catch {
     statusText.value = '用户信息JSON格式错误'

+ 13 - 1
src/pages/securityCheck/components/Item.vue

@@ -35,6 +35,9 @@
         <button class="task-btn-box sign-btn" @click="handleSign">
           <text class="task-btn-text">签名</text>
         </button>
+        <button class="task-btn-box edit-btn" @click="handleEdit">
+          <text class="task-btn-text">修改</text>
+        </button>
         <button class="task-btn-box delete-btn" @click="handleDelete">
           <text class="task-btn-text">删除</text>
         </button>
@@ -58,6 +61,7 @@ const props = withDefaults(defineProps<Props>(), {
 
 const emit = defineEmits<{
   viewDetail: []
+  edit: []
   delete: []
   sign: []
 }>()
@@ -71,7 +75,7 @@ const validityDate = computed(() => {
 })
 
 const isSign = computed(() => {
-  return props.item.signFilePdf ? '是' : '否'
+  return props.item.isSign ? '是' : '否'
 })
 
 const handleViewDetail = () => {
@@ -82,6 +86,10 @@ const handleDelete = () => {
   emit('delete')
 }
 
+const handleEdit = () => {
+  emit('edit')
+}
+
 const handleSign = () => {
   emit('sign')
 }
@@ -176,6 +184,10 @@ const handleSign = () => {
   border: none;
 }
 
+.edit-btn {
+  background-color: #25b3ff;
+}
+
 .delete-btn {
   background-color: rgb(255, 79, 79);
 }

+ 32 - 14
src/pages/securityCheck/securityCheckEditor.vue

@@ -55,37 +55,47 @@ const templateData = ref<any>({})
 
 let templateId: string = ''
 let orderId: string = ''
+let mode: 'edit' | 'create' = 'edit'
+let securityCheckId: string = ''
 
 onLoad((options: any) => {
   templateId = options.templateId
   orderId = options.orderId
+  mode = options.mode || 'edit'
+  securityCheckId = options.securityCheckId || ''
   init()
 })
 
 const instId = ref<string>('')
+const refId = ref<string>('')
 const init = async () => {
   if (!templateId) {
     return
   }
-  const createResp = await securityCheckRequestFunc(
-    SecurityCheckFuncName.createSecurityCheckItem,
-    equipType,
-    {
-      businessType: 300,
-      conclusion: '',
-      date: null,
-      name: '进入现场(设备)前安全检查记录',
-      orderId,
-      templateId,
-    },
-  )
-  const refId = createResp.data
+  refId.value = null
+  if (mode === 'create') {
+    const createResp = await securityCheckRequestFunc(
+      SecurityCheckFuncName.createSecurityCheckItem,
+      equipType,
+      {
+        businessType: 300,
+        conclusion: '',
+        date: null,
+        name: '进入现场(设备)前安全检查记录',
+        orderId,
+        templateId,
+      },
+    )
+    refId.value = createResp.data
+  } else {
+    refId.value = securityCheckId
+  }
 
   const res = await getStandardTemplate({ id: templateId })
   const resData = (res as any).data
   const dataMap: any = {}
 
-  const dynamicTbValResp = await getDynamicTbVal({ refId })
+  const dynamicTbValResp = await getDynamicTbVal({ refId: refId.value })
   const dynamicTb: any = dynamicTbValResp.data
   instId.value = dynamicTb?.dynamicTbInsRespVO?.id || ''
   for (let i = 0; i < dynamicTb.dynamicTbValRespVOList.length; i++) {
@@ -145,6 +155,14 @@ const handleSave = async (data: any) => {
     const msg = result?.msg || '保存失败'
     uni.showToast({ title: msg, icon: 'error' })
   }
+  const updateResp = await securityCheckRequestFunc(
+    SecurityCheckFuncName.updateSecurityCheckItem,
+    equipType,
+    {
+      id: refId.value,
+      jsonData: JSON.stringify(data.dataJSON),
+    },
+  )
 }
 
 const handleCancel = () => {

+ 11 - 0
src/pages/securityCheck/securityCheckList.vue

@@ -24,6 +24,7 @@
           :item="item"
           operate-text="审核"
           @view-detail="handleModifySavetyRecord(item)"
+          @edit="handleEditSavetyRecord(item)"
           @delete="handleDeleteSavetyRecord(item)"
           @sign="handleSign(item)"
         />
@@ -155,6 +156,16 @@ const refreshList = () => {
   fetchList(true)
 }
 
+// 修改记录
+const handleEditSavetyRecord = async (item: any) => {
+  const res = await requestFunc(SecurityCheckFuncName.getTemplate, equipType, {
+      orderId: item.orderId,
+  })
+  uni.navigateTo({
+    url: `/pages/securityCheck/securityCheckEditor?templateId=${res?.data?.templateId}&orderId=${item.orderId}&securityCheckId=${item.id}&mode=edit`,
+  })
+}
+
 // 查看/编辑详情
 const handleModifySavetyRecord = (item: any) => {
   const detail = encodeURIComponent(JSON.stringify(item))

+ 20 - 11
src/pages/sign/index.vue

@@ -277,23 +277,16 @@ onLoad((options) => {
 })
 
 const orderReportId = ref('')
-const isSigned = ref('0')
 const getPreviewData = async () => {
   if (!routeType.value) {
     uni.showToast({ title: '必须选择签字文件类型', icon: 'error' })
     return
   }
-  const orderDetail = await taskOrderRequestFunc(TaskOrderFuncName.TaskOrderDetail, equipType, {
+  const orderDetailResp = await taskOrderRequestFunc(TaskOrderFuncName.TaskOrderDetail, equipType, {
     id: orderId.value,
   })
-  const signFileList = orderDetail.data.signFileList || []
-  const targetBusinessType = businessTypeMap[routeType.value]
-  const signFile = signFileList.find((row: any) => row.businessType === targetBusinessType)
-  if (signFile == null || signFile.isSignature == '0') {
-    isSigned.value = '0'
-  } else {
-    isSigned.value = '1'
-  }
+  const orderDetail = orderDetailResp.data
+  checkSignStatus(orderDetail)
   switch (routeType.value) {
     case 'FWD':
       const orderReportResp = await getTaskOrderReport({ taskOrderId: orderId.value })
@@ -307,7 +300,7 @@ const getPreviewData = async () => {
       orderReportId.value = orderReport?.id || ''
       break
     case 'JYRS':
-      const notificationformReport = orderDetail.data?.notificationformReport
+      const notificationformReport = orderDetail?.notificationformReport
       if (!notificationformReport) {
         const orderFormRes = await taskOrderRequestFunc(TaskOrderFuncName.GetOrderForm, equipType, {
           orderId: orderId.value,
@@ -346,6 +339,22 @@ const getPreviewData = async () => {
   }
 }
 
+const isSigned = ref('0')
+const checkSignStatus = (orderDetail: any) => {
+  const signFileList = orderDetail.signFileList || []
+  const targetBusinessType = businessTypeMap[routeType.value]
+  let signFile = null
+  if (targetBusinessType == businessTypeMap.AQJC) {
+    signFile = signFileList.find(
+      (row: any) =>
+        row.businessType === targetBusinessType && row.securityCheckId === securityCheckId.value,
+    )
+  } else {
+    signFile = signFileList.find((row: any) => row.businessType === targetBusinessType)
+  }
+  isSigned.value = signFile == null || signFile.isSignature == '0' ? '0' : '1'
+}
+
 const handleToSign = () => {
   signStatus.value = 'signing'
   // 重新计算画布宽度

+ 1 - 1
src/pages/unClaim/unClaimList.vue

@@ -276,7 +276,7 @@ const handleSafetyCheck = async (taskOrder: any) => {
     })
     // 跳转到 WebView 编辑器
     uni.navigateTo({
-      url: `/pages/securityCheck/securityCheckEditor?businessType=AQJC&orderId=${taskOrder.id}&templateId=${res.data.templateId}&useOnline=1`,
+      url: `/pages/securityCheck/securityCheckEditor?businessType=AQJC&orderId=${taskOrder.id}&templateId=${res.data.templateId}&useOnline=1&mode=create`,
     })
   } catch (configError) {
     console.error('获取葡萄城配置信息失败:', configError)