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> +<!--<!– <text class="mx-3">淇濆吇涓�: {{ item.byCount }}</text>–>--> +<!--<!– |–>--> +<!--<!– <text class="ml-3">寰呴獙璇�: {{ item.dyzCount }}</text>–>--> +<!-- </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