Jelajahi Sumber

完成检测录入提交校核

yangguanjin 2 minggu lalu
induk
melakukan
7786a9da82

+ 42 - 1
src/api/ApiRouter/taskOrder.ts

@@ -6,6 +6,8 @@ import {
   confirmTaskOrder,
   confirmTaskClaim,
   cancelClaim,
+  getUserGroupUserList,
+  recheckApi,
 } from '@/api/task'
 import {
   getPipeTaskConfirmPage,
@@ -14,6 +16,8 @@ import {
   confirmPipeTaskOrder,
   confirmPipeEquipmentClaim,
   cancelPipeEquipmentClaim,
+  getPipeRecheckUserPage,
+  submitPipeRecheck,
 } from '@/api/pipe/pipeTaskOrder'
 import {
   getBoilerTaskConfirmPage,
@@ -23,6 +27,8 @@ import {
   confirmBoilerEquipmentClaim,
   cancelBoilerEquipmentClaim,
   getBoilerTaskItemListByOrderId,
+  getBoilerRecheckUserPage,
+  submitBoilerRecheck,
 } from '@/api/boiler/boilerTaskOrder'
 
 type Adapter = {
@@ -39,6 +45,8 @@ export enum TaskOrderFuncName {
   TaskOrderzTaskItemList,
   EquipmentConfirmClaim,
   EquipmentCancelClaim,
+  RecheckUserList,
+  SubmitRecheck,
 }
 
 // 接口注册表(按接口、设备类型调用对应接口)
@@ -162,12 +170,45 @@ const map = {
       outputAdapter: null,
     },
   },
+  [TaskOrderFuncName.RecheckUserList]: {
+    [EquipmentType.BOILER]: {
+      inputAdapter: null,
+      reqFunction: getBoilerRecheckUserPage,
+      outputAdapter: null,
+    },
+    [EquipmentType.PIPE]: {
+      inputAdapter: null,
+      reqFunction: getPipeRecheckUserPage,
+      outputAdapter: null,
+    },
+    [EquipmentType.CONTAINER]: {
+      inputAdapter: null,
+      reqFunction: getUserGroupUserList,
+      outputAdapter: null,
+    },
+  },
+  [TaskOrderFuncName.SubmitRecheck]: {
+    [EquipmentType.BOILER]: {
+      inputAdapter: null,
+      reqFunction: submitBoilerRecheck,
+      outputAdapter: null,
+    },
+    [EquipmentType.PIPE]: {
+      inputAdapter: null,
+      reqFunction: submitPipeRecheck,
+      outputAdapter: null,
+    },
+    [EquipmentType.CONTAINER]: {
+      inputAdapter: null,
+      reqFunction: recheckApi,
+      outputAdapter: null,
+    },
+  },
 }
 
 export const requestFunc = (funcName: TaskOrderFuncName, equipType: EquipmentType, params: any) => {
   const funMap = map[funcName]
   const adapter = funMap[equipType]
-  console.log('adapter.....', adapter)
   // 1. input adapter
   let reqParams = params
   if (adapter.inputAdapter != null) {

+ 10 - 0
src/api/boiler/boilerTaskOrder.ts

@@ -49,3 +49,13 @@ export const addInspectProject = (data: any) => {
 export const cancelBoilerInSpectProject = (data: any) => {
   return httpDelete('/pressure2/boiler-task-order/boiler-order-item/report/batchCancel', data)
 }
+
+// 获取校核人
+export const getBoilerRecheckUserPage = (params: any) => {
+  return httpGet('/pressure2/boiler-task-order/recheckUser/page', params)
+}
+
+// 提交校核
+export const submitBoilerRecheck = (data: any) => {
+  return httpPUT('/pressure2/boiler-task-order/order-item/choice/recheck', data)
+}

+ 10 - 0
src/api/pipe/pipeTaskOrder.ts

@@ -44,3 +44,13 @@ export const addInspectProject = (data: any) => {
 export const cancelPipeInSpectProject = (data: any) => {
   return httpDelete('/pressure2/pipe-task-order/pipe-order-item/report/batchCancel', data)
 }
+
+// 获取校核人
+export const getPipeRecheckUserPage = (params: any) => {
+  return httpGet('/pressure2/pipe-task-order/recheckUser/page', params)
+}
+
+// 提交校核
+export const submitPipeRecheck = (data: any) => {
+  return httpPUT('/pressure2/pipe-task-order/order-item/choice/recheck', data)
+}

+ 1 - 1
src/pages/deviceExam/deviceExam.vue

@@ -105,7 +105,7 @@ defineOptions({
   name: 'deviceExam',
 })
 
-const equipType = useConfigStore().equipType
+const equipType = useConfigStore().getEquipType()
 
 const listData = ref<any[]>([])
 const loading = ref(false)

+ 1 - 1
src/pages/deviceExam/deviceExamDetail.vue

@@ -79,7 +79,7 @@ interface TabItem {
   id: string
 }
 
-const storedEquipType = useConfigStore().equipType
+const storedEquipType = useConfigStore().getEquipType()
 
 let equipType: EquipmentType = storedEquipType
 

+ 10 - 7
src/pages/equipment/detail/equipmentDetail.vue

@@ -205,7 +205,7 @@ let canEdit = ''
 const userStore = useUserStore()
 const userInfo = computed(() => userStore.userInfo)
 
-const equipType = useConfigStore().equipType
+const equipType = useConfigStore().getEquipType()
 
 const BaseInfoComponent = computed(() => {
   switch (equipType) {
@@ -437,11 +437,15 @@ const showSelectUserPopupFn = async (checkItem: any) => {
   currentCheckItem.value = checkItem
 
   try {
-    const groupRes: any = await getApprovalDetail({})
-    const { recheckId } = groupRes?.data || {}
+    const recheckId = dataSource.value?.equipment.mainChecker
 
-    const userRes: any = await getUserGroupUserList({ category: 200, status: 0 })
-    const list = (userRes?.data || []).map((item: any) => ({
+    const userRes: any = await requestFunc(TaskOrderFuncName.RecheckUserList, equipType, {
+      nickName: '',
+      pageNo: 1,
+      pageSize: 200,
+      orderId: dataSource.value?.taskOrder?.id,
+    })
+    const list = (userRes?.data?.list || []).map((item: any) => ({
       ...item,
       label: item.nickname,
       value: item.id,
@@ -481,8 +485,7 @@ const confirmSelectUser = async () => {
       recheckId: currentReckUser.value?.id,
     }
 
-    const result: any = await recheckApi(params)
-
+    const result: any = await requestFunc(TaskOrderFuncName.SubmitRecheck, equipType, params)
     if (result?.code === 0) {
       uni.showToast({ title: '提交校核成功', icon: 'success' })
       closeSelectUserPopup()

+ 61 - 5
src/pages/home/index.vue

@@ -34,6 +34,17 @@
       <!-- 待办事项标题 -->
       <view class="todo-title-box">
         <text class="todo-title">我的待办事项</text>
+        <picker
+          class="equip-picker"
+          :range="equipmentOptions"
+          range-key="label"
+          @change="onEquipTypeChange"
+        >
+          <view class="picker-value">
+            <text>{{ currentEquipLabel }}</text>
+            <text class="picker-arrow">▼</text>
+          </view>
+        </picker>
       </view>
 
       <!-- 待办卡片列表 -->
@@ -83,6 +94,7 @@
 import { ref, reactive, computed, onMounted, onUnmounted } from 'vue'
 import { useUserStore } from '@/store/user'
 import { useConfigStore } from '@/store/config'
+import { EquipmentType } from '@/utils/dictMap'
 import { getMajorIssuesAuditList, getTaskEquipmentList, getTaskOrder } from '@/api/task'
 import { getPendingVerificationListApi } from '@/api/pendingVerification'
 import { getPendingPreparationListApi } from '@/api/pendingPreparation'
@@ -113,7 +125,26 @@ const userStore = useUserStore()
 const userInfo = computed(() => userStore.userInfo)
 
 const configStore = useConfigStore()
-const equipType = computed(() => configStore.equipType)
+const equipType = computed(() => configStore.getEquipType())
+
+const equipmentOptions = [
+  { label: '锅炉', value: EquipmentType.BOILER },
+  { label: '管道', value: EquipmentType.PIPE },
+  // { label: '压力容器', value: EquipmentType.CONTAINER },
+]
+
+const currentEquipLabel = computed(() => {
+  return equipmentOptions.find((item) => item.value === equipType.value)?.label || '请选择'
+})
+
+const onEquipTypeChange = (e: any) => {
+  const index = e.detail.value
+  const selected = equipmentOptions[index]
+  if (selected && selected.value !== equipType.value) {
+    configStore.switchEquipType(selected.value)
+    uni.reLaunch({ url: '/pages/home/index' })
+  }
+}
 
 // 获取屏幕宽度
 const getWindowWidth = () => {
@@ -421,15 +452,15 @@ const capabilityList = [
     backgroundColor: '#F6FAFE',
   },
   {
-    title: '单位信息查询',
-    desc: '查看全部单位信息',
+    title: '单位信息',
+    desc: '查看单位信息',
     iconUrl: iconMap.unitQuery,
     path: '/pages/unitQuery/unitQuery',
     backgroundColor: '#FEF7F6',
   },
   {
     title: '体系文件',
-    desc: '查看全部体系文件',
+    desc: '查看体系文件',
     iconUrl: iconMap.systemFile,
     path: '/pages/systemFile/systemFile',
     backgroundColor: '#F6FBF6',
@@ -520,10 +551,35 @@ const onRefresh = () => {
 }
 
 .todo-title-box {
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+  justify-content: space-between;
   padding: 20px;
   background-color: #fff;
 }
 
+.equip-picker {
+  flex-shrink: 0;
+}
+
+.picker-value {
+  display: flex;
+  flex-direction: row;
+  gap: 4px;
+  align-items: center;
+  padding: 4px 8px;
+  font-size: 14px;
+  color: #333;
+  background-color: #f5f5f5;
+  border-radius: 4px;
+}
+
+.picker-arrow {
+  font-size: 10px;
+  color: #999;
+}
+
 .todo-title {
   font-size: 18px;
   color: rgb(51, 51, 51);
@@ -541,7 +597,7 @@ const onRefresh = () => {
 }
 
 .home-section {
-  padding: 0 12px;
+  padding: 0 12px 20px 12px;
   margin: 10px;
   background-color: #ffffff;
   border-radius: 6px;

+ 1 - 1
src/pages/securityCheck/securityCheckList.vue

@@ -55,7 +55,7 @@ const unitContact = ref('')
 const unitPhone = ref('')
 const receiverEmail = ref('')
 const configStore = useConfigStore()
-const equipType = configStore.equipType
+const equipType = configStore.getEquipType()
 
 onLoad((options: any) => {
   orderId.value = options.orderId || ''

+ 1 - 1
src/pages/taskOnline/TaskOnlineEquipmentList.vue

@@ -345,7 +345,7 @@ const showSpaceTemplatePopup = ref(false)
 const spaceTemplateList = ref<any[]>([])
 const selectedSpaceTemplateId = ref('')
 
-const equipType = useConfigStore().equipType
+const equipType = useConfigStore().getEquipType()
 
 onLoad((options: any) => {
   orderId.value = options?.orderId || ''

+ 1 - 1
src/pages/taskOnlinePage/taskOnline.vue

@@ -91,7 +91,7 @@ const userStore = useUserStore()
 const userInfo = computed(() => userStore.userInfo)
 const userId = computed(() => userInfo.value?.id || '')
 
-const equipType = useConfigStore().equipType
+const equipType = useConfigStore().getEquipType()
 
 // 默认查询参数
 const defaultTypeValue = computed(() => ({

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

@@ -152,7 +152,7 @@ const tipsPopupData = ref<any>({})
 
 const userStore = useUserStore()
 const configStore = useConfigStore()
-const equipType = configStore.equipType
+const equipType = configStore.getEquipType()
 
 // 设置组件引用
 const setItemRef = (itemId: string) => (ref: any) => {

+ 41 - 2
src/store/config.ts

@@ -2,12 +2,51 @@ import { EquipmentType } from '@/utils/dictMap'
 import { defineStore } from 'pinia'
 import { ref } from 'vue'
 
+const EQUIP_TYPE_KEY = 'EQUIP_TYPE'
+
+function getStoredEquipType(): EquipmentType | null {
+  try {
+    const stored = uni.getStorageSync(EQUIP_TYPE_KEY)
+    if (stored && Object.values(EquipmentType).includes(stored)) {
+      return stored as EquipmentType
+    }
+  } catch (e) {
+    console.error('读取设备类型失败', e)
+  }
+  return null
+}
+
+function setStoredEquipType(val: EquipmentType) {
+  try {
+    uni.setStorageSync(EQUIP_TYPE_KEY, val)
+  } catch (e) {
+    console.error('保存设备类型失败', e)
+  }
+}
+
 export const useConfigStore = defineStore('config', () => {
-  const equipType = ref<EquipmentType>(EquipmentType.BOILER)
+  const stored = getStoredEquipType()
+  const equipType = ref<EquipmentType>(stored || EquipmentType.BOILER)
+
+  function getEquipType(): EquipmentType {
+    const current = equipType.value
+    if (current) {
+      return current
+    }
+    const fromStorage = getStoredEquipType()
+    if (fromStorage) {
+      equipType.value = fromStorage
+      return fromStorage
+    }
+    equipType.value = EquipmentType.BOILER
+    setStoredEquipType(EquipmentType.BOILER)
+    return EquipmentType.BOILER
+  }
 
   function switchEquipType(equipTypeVal: EquipmentType) {
     equipType.value = equipTypeVal
+    setStoredEquipType(equipTypeVal)
   }
 
-  return { equipType, switchEquipType }
+  return { getEquipType, switchEquipType }
 })

+ 6 - 2
src/utils/http.ts

@@ -129,7 +129,6 @@ export const httpPUT = <T>(url: string, data?: Record<string, any>) => {
     url,
     data,
     method: 'PUT',
-    responseType: 'blob',
   })
 }
 /**
@@ -138,7 +137,12 @@ export const httpPUT = <T>(url: string, data?: Record<string, any>) => {
  * @param query 请求 query 参数
  * @returns
  */
-export const httpDelete = <T>(url: string, query?: Record<string, any>, data?: Record<string, any>, header?: any) => {
+export const httpDelete = <T>(
+  url: string,
+  query?: Record<string, any>,
+  data?: Record<string, any>,
+  header?: any,
+) => {
   return http<T>({
     url,
     query,