From 46d143d1d6fe8f286399f4d027c9a86adf7cd7fc Mon Sep 17 00:00:00 2001
From: baoshiwei <baoshiwei@shlanbao.cn>
Date: 星期三, 09 七月 2025 08:50:01 +0800
Subject: [PATCH] feat(inspection,maintenance): - 实现保养工单批量确认功能 - 在点检记录确认时增加时间限制,距离上次更新时间两小时内不允许确认

---
 eims-ui-mobile/src/pages/maint/maint-st.vue |  109 +++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 91 insertions(+), 18 deletions(-)

diff --git a/eims-ui-mobile/src/pages/maint/maint-st.vue b/eims-ui-mobile/src/pages/maint/maint-st.vue
index 4db3bdf..0adacf7 100644
--- a/eims-ui-mobile/src/pages/maint/maint-st.vue
+++ b/eims-ui-mobile/src/pages/maint/maint-st.vue
@@ -11,6 +11,12 @@
 <template>
   <z-paging ref="paging" v-model="dataList" @query="queryList" show-refresher-update-time>
     <template #top>
+      <!-- 澧炲姞涓�涓悳绱㈡爮 -->
+      <wd-search v-model="searchValue" @search="handleSearch">
+        <template #right-icon>
+          <wd-icon name="scan" size="34rpx"></wd-icon>
+        </template>
+      </wd-search>
       <wd-tabs v-model="activeTab" @change="handleTabChange">
         <wd-tab title="寰呬繚鍏�"></wd-tab>
         <wd-tab title="寰呯‘璁�"></wd-tab>
@@ -45,26 +51,28 @@
           <image class="slot-img text-center" src="/static/images/camera.png" />
           <view class="flex-1">
             <view class="text-color-gray text-sm mt-1 flex">
-              <text class="mr-3">宸ュ崟鎬绘暟: {{ item.orderCount }}</text>
+              <text class="mr-3">鎬绘暟: {{ item.orderCount }}</text>
               |
-              <text class="mx-3">宸插畬鎴�: {{ item.wcCount }}</text>
+              <text class="mx-3">宸插畬鎴�: {{ item.dyzCount }}</text>
+              |
+              <text class="mx-3">寰呬繚鍏�: {{ item.dbyCount }}</text>
             </view>
-            <view class="text-color-gray text-sm mt-2 flex">
-              <text class="mr-3">寰呬繚鍏�: {{ item.dbyCount }}</text>
-              |
-              <text class="mx-3">淇濆吇涓�: {{ item.byCount }}</text>
+<!--            <view class="text-color-gray text-sm mt-2 flex">-->
+<!--              <text class="mr-3">寰呬繚鍏�: {{ item.dbyCount }}</text>-->
 <!--              |-->
-<!--              <text class="ml-3">寰呴獙璇�: {{ item.dyzCount }}</text>-->
-            </view>
+<!--&lt;!&ndash;              <text class="mx-3">淇濆吇涓�: {{ item.byCount }}</text>&ndash;&gt;-->
+<!--&lt;!&ndash;              |&ndash;&gt;-->
+<!--&lt;!&ndash;              <text class="ml-3">寰呴獙璇�: {{ item.dyzCount }}</text>&ndash;&gt;-->
+<!--            </view>-->
             <view class="text-color-gray text-sm mt-2 flex">
               <text>鐘舵�侊細</text>
               <template v-if="item.status === '1'">
-                <wd-icon class="icon-color-success" name="check-outline" size="34rpx"></wd-icon>
-                <text class="ml-1">宸插畬鎴�</text>
+                <wd-icon class="icon-color-warning" name="check-outline" size="34rpx"></wd-icon>
+                <text class="ml-1">寰呯‘璁�</text>
               </template>
               <template v-else-if="item.status === '2'">
-                <wd-icon class="icon-color-warning" name="check-outline" size="34rpx"></wd-icon>
-                <text class="ml-1">宸茬‘璁�</text>
+                <wd-icon class="icon-color-success" name="check-outline" size="34rpx"></wd-icon>
+                <text class="ml-1">宸插畬鎴�</text>
               </template>
               <template v-else>
                 <wd-icon class="icon-color-base" name="detection" size="40rpx"></wd-icon>
@@ -77,6 +85,17 @@
         </view>
       </wd-card>
     </view>
+
+    <wd-fab
+      v-if="status === '1' && isLeader()"
+      :draggable="true"
+      type="success"
+      position="left-bottom"
+      :expandable="false"
+      inactiveIcon="check"
+      @click="handleBatchComplete"
+      direction="top"
+    />
   </z-paging>
 </template>
 
@@ -84,7 +103,12 @@
 import { ref, computed } from 'vue'
 import { getMaintStList } from '@/service/maint'
 import dayjs from 'dayjs'
+import { updateMaintSt } from '@/service/maint'
+import { useUserStore } from "@/store";
+import { isLeader } from '@/utils/RoleUtils'
+import { useToast } from 'wot-design-uni'
 
+const searchValue = ref<string>('')
 /**
  * 鍏朵粬椤甸潰浼犺繃鏉ョ殑鏁版嵁
  * assetNo: 璧勪骇缂栧彿
@@ -110,13 +134,21 @@
 
   const now = dayjs()
   const planDate = dayjs(planTime)
-  const diffDays = planDate.diff(now, 'day')
+
+  // 鑾峰彇璁″垝鏃ユ湡鎵�鍦ㄦ湀浠界殑鏈�鍚庝竴澶�
+  const planMonthEnd = planDate.endOf('month')
+
+  // 璁$畻褰撳墠鏃ユ湡涓庤鍒掓湀鏈堝簳鐨勫樊鍊硷紙澶╂暟锛�
+  const diffDays = planMonthEnd.diff(now, 'day')
 
   if (diffDays < 0) {
-    // 瓒呰繃璁″垝鏃堕棿锛岀孩鑹茶儗鏅�
+    // 宸茬粡杩囦簡璁″垝鏈堢殑鏈堝簳锛岀孩鑹茶儗鏅�
     return 'card-overdue'
   } else if (diffDays <= 3) {
-    // 璺濈璁″垝鏃堕棿涓夊ぉ浠ュ唴锛岄粍鑹茶儗鏅�
+    // 璺濈璁″垝鏈堟湀搴�3澶╀互鍐咃紝绾㈣壊鑳屾櫙
+    return 'card-overdue'
+  } else if (diffDays <= 10) {
+    // 璺濈璁″垝鏈堟湀搴�10澶╀互鍐咃紝榛勮壊鑳屾櫙
     return 'card-urgent'
   } else {
     // 姝e父鐘舵�侊紝鑳屾櫙棰滆壊涓嶅彉
@@ -136,7 +168,7 @@
 // 鍘熸湁鐘舵��
 const status = ref<string>('0') // 榛樿涓哄緟淇濆吇鐘舵��
 const equName = ref<string>('-1')
-const filterDate = ref<string>('1')
+const filterDate = ref<string>('0')
 
 const filterDateList = ref<Record<string, any>[]>([
   { label: '鎵�鏈夋暟鎹�', value: '0' },
@@ -189,6 +221,7 @@
     pageSize,
     equName: equName.value,
     status: status.value,
+    params: {},
   }
   if (filterDate.value === '1') {
     // 鑾峰彇褰撳墠鏃ユ湡
@@ -198,7 +231,7 @@
       endPlanTime: now.endOf('month').format('YYYY-MM-DD 23:59:59'),
     }
   } else {
-    delete queryParams.params
+    queryParams.params = {}
   }
 
   if (equName.value === '-1') {
@@ -211,7 +244,7 @@
   if (option?.from === 'scan') {
     queryParams.assetNo = option.assetNo
   }
-
+  queryParams.params.searchValue = searchValue.value
   getMaintStList(queryParams)
     .then((res: any) => {
       // 璇峰嬁鍦ㄧ綉缁滆姹傚洖璋冧腑缁檇ataList璧嬪�硷紒锛佸彧闇�瑕佽皟鐢╟omplete灏卞彲浠ヤ簡
@@ -231,10 +264,50 @@
   })
 }
 
+function handleSearch () {
+  console.log('handleSearch')
+  paging.value.reload()
+}
+
 function reloadData() {
   paging.value.reload()
 }
 
+const userStore = useUserStore()
+const toast = useToast()
+
+async function handleBatchComplete() {
+  console.log('handleBatchComplete', dataList.value.length)
+  if (!isLeader()) {
+    toast.info('鏃犳潈闄愭搷浣�')
+    return
+  }
+  // 濡傛灉寰呯‘璁ゅ伐鍗曞垪琛ㄤ负绌猴紝鍒欐彁绀虹敤鎴锋棤寰呯‘璁ゅ伐鍗�
+  if (dataList.value.length < 1) {
+    toast.info('鏃犲緟纭宸ュ崟')
+    return
+  }
+  const now = new Date()
+  const verifyTime = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}-${String(now.getDate()).padStart(2, '0')} ${String(now.getHours()).padStart(2, '0')}:${String(now.getMinutes()).padStart(2, '0')}:${String(now.getSeconds()).padStart(2, '0')}`
+
+  // 鍋囪 dataList 鏄綋鍓嶅緟纭鐨勫伐鍗曞垪琛�
+  const promises = dataList.value.map(item => {
+    return updateMaintSt({
+      id: item.id,
+      status: '2',
+      verifyUser: userStore?.userInfo?.userId,
+      verifyTime
+    })
+  })
+
+  try {
+    await Promise.all(promises)
+    toast.success('涓�閿‘璁ゅ畬鎴�')
+    reloadData() // 鍒锋柊鍒楄〃
+  } catch (e) {
+    toast.error('閮ㄥ垎宸ュ崟纭澶辫触锛岃閲嶈瘯')
+  }
+}
 
 onLoad((options) => {
   Object.assign(option, options)

--
Gitblit v1.9.3