From 2ab727eb8a56077d9ad52112a9c8e97010b84b6d Mon Sep 17 00:00:00 2001
From: baoshiwei <baoshiwei@shlanbao.cn>
Date: 星期一, 09 六月 2025 19:50:49 +0800
Subject: [PATCH] feat(eims): 优化保养计划和点检记录功能
---
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsMaintStVo.java | 2
eims-ui-mobile/src/pages/maint/maint-order.vue | 60 ++++++++++-
eims-ui-mobile/src/pages/maint/maint-st.vue | 89 ++++++++++++++---
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsMaintPlanBo.java | 4
eims-ui-mobile/src/utils/RoleUtils.ts | 5
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/job/MaintPlanToOrderJob.java | 2
eims-ui-mobile/src/pages/inspect/insp-record.vue | 53 +++++++++-
eims-ui-mobile/src/pages/inspect/insp-st.vue | 48 +++++++--
8 files changed, 216 insertions(+), 47 deletions(-)
diff --git a/eims-ui-mobile/src/pages/inspect/insp-record.vue b/eims-ui-mobile/src/pages/inspect/insp-record.vue
index 42d7841..c039bad 100644
--- a/eims-ui-mobile/src/pages/inspect/insp-record.vue
+++ b/eims-ui-mobile/src/pages/inspect/insp-record.vue
@@ -24,7 +24,7 @@
safeAreaInsetTop
>
<template #right>
- <text v-if="isOperatorOrRepair()" class="text-white">鎻愪氦</text>
+ <text v-if="inspSt.status === '0'" class="text-white">鎻愪氦</text>
</template>
</wd-navbar>
<wd-card type="rectangle">
@@ -61,9 +61,13 @@
</view>
<view class="text-color-gray text-sm mt-2 flex">
<text>鐘舵�侊細</text>
- <template v-if="dataCount > 0 && dataCount === checkCount">
+ <template v-if="inspSt.status === '1'">
<wd-icon class="icon-color-success" name="check-outline" size="34rpx"></wd-icon>
<text class="ml-1">宸插畬鎴�</text>
+ </template>
+ <template v-else-if="inspSt.status === '2'">
+ <wd-icon class="icon-color-warning" 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>
@@ -172,8 +176,9 @@
size="large"
/>
<!-- 鏂板鎻愪氦鎸夐挳 -->
- <view class="flex justify-center mt-4">
- <wd-button type="primary" block size="large" @click="handleClickRight">鎻愪氦</wd-button>
+ <view class="flex justify-around mt-4">
+ <wd-button type="primary" block size="large" v-if="inspSt.status === '0'" @click="handleClickRight">鎻愪氦</wd-button>
+ <wd-button type="success" block size="large" v-if="isLeader() && inspSt.status === '1'" @click="handleComplete">纭瀹屾垚</wd-button>
</view>
</view>
</z-paging>
@@ -217,6 +222,8 @@
specialNote: string
runTimes: number
faultTimes: number
+ verifyUser?: number | string
+ verifyTime?: string
}
const dataChange = ref(false)
@@ -356,7 +363,11 @@
}
function updateInspSt(resolve: any) {
// 鏇存柊鐐规姹囨��
- inspSt.status = '1'
+ if (dataCount.value === selectedItems.value.length) {
+ inspSt.status = '1'
+ } else {
+ inspSt.status = '0'
+ }
updateInspectSt(inspSt)
.then((res: any) => {
toast.success('鎿嶄綔鎴愬姛')
@@ -371,6 +382,38 @@
}
/**
+ * 纭瀹屾垚鎸夐挳鐐瑰嚮浜嬩欢
+ */
+function handleComplete() {
+ if (!isLeader()) {
+ toast.info('鏃犳潈闄愭搷浣�');
+ return;
+ }
+ const now = new Date();
+ const data: any = Object.assign(
+ {},
+ {
+ id: inspSt.id,
+ status: '2',
+ verifyUser: userStore?.userInfo?.userId,
+ 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')}`
+ },
+ )
+ updateInspectSt(data)
+ .then((res: any) => {
+ if (res?.code === 200) {
+ uni.$emit('insp-st-refresh')
+ goBack()
+ toast.success('鎿嶄綔鎴愬姛')
+ }
+ })
+ .catch((res) => {
+ console.error(res)
+ toast.error('鎿嶄綔澶辫触')
+ })
+}
+
+/**
* 鐐规璁板綍鏉$洰鐐瑰嚮浜嬩欢
* @param item
*/
diff --git a/eims-ui-mobile/src/pages/inspect/insp-st.vue b/eims-ui-mobile/src/pages/inspect/insp-st.vue
index 0eb3a03..0ca9158 100644
--- a/eims-ui-mobile/src/pages/inspect/insp-st.vue
+++ b/eims-ui-mobile/src/pages/inspect/insp-st.vue
@@ -11,15 +11,11 @@
<template>
<z-paging ref="paging" v-model="dataList" @query="queryList" show-refresher-update-time>
<template #top>
- <wd-drop-menu>
- <wd-drop-menu-item v-model="viewMode" :options="viewModeList" @change="handleViewMode" />
- <wd-drop-menu-item
- v-model="filterDate"
- :options="filterDateList"
- @change="handleFilterDate"
- />
- <wd-drop-menu-item v-model="equName" :options="equList" @change="handleEquName" />
- </wd-drop-menu>
+ <wd-tabs v-model="activeTab" @change="handleTabChange">
+ <wd-tab title="寰呯偣妫�"></wd-tab>
+ <wd-tab title="寰呯‘璁�"></wd-tab>
+ <wd-tab title="宸插畬鎴�"></wd-tab>
+ </wd-tabs>
</template>
<view class="bg-base">
<wd-card type="rectangle" v-for="(item, index) in dataList" :key="item.id">
@@ -40,7 +36,7 @@
</view>
</view>
</template>
- <view class="flex h-[140rpx]" items-center>
+ <view class="flex h-[200rpx]" items-center>
<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">
@@ -57,9 +53,13 @@
</view>
<view class="text-color-gray text-sm mt-2 flex">
<text>鐘舵�侊細</text>
- <template v-if="item.recordCount === item.checkCount">
+ <template v-if="item.status === '1'">
<wd-icon class="icon-color-success" 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>
</template>
<template v-else>
<wd-icon class="icon-color-base" name="detection" size="40rpx"></wd-icon>
@@ -76,13 +76,17 @@
</template>
<script setup lang="ts">
-import { ref } from 'vue'
import { getInspStList } from '@/service/inspect'
import dayjs from 'dayjs'
+// 鏍囩椤电浉鍏�
+const activeTab = ref(0) // 榛樿閫変腑绗竴涓爣绛鹃〉锛堝緟鐐规锛�
+
+// 鍘熸湁鍙橀噺
const viewMode = ref<string>('Day')
const equName = ref<string>('鎵�鏈夎澶�')
const filterDate = ref<string>('1')
+const status = ref<string>('0') // 榛樿涓哄緟鐐规鐘舵��
const viewModeList = ref<Record<string, any>[]>([
{ label: '鏃ヨ鍥�', value: 'Day' },
@@ -94,6 +98,25 @@
])
const equList = ref<Record<string, any>[]>([{ label: '鎵�鏈夎澶�', value: '鎵�鏈夎澶�' }])
+
+// 鏍囩椤靛垏鎹㈠鐞嗗嚱鏁�
+function handleTabChange({ index }) {
+ // 鏍规嵁鏍囩椤电储寮曡缃搴旂殑鐘舵�佸��
+ if (index === 0) {
+ // 寰呯偣妫�
+ status.value = '0'
+ } else if (index === 1) {
+ // 寰呯‘璁�
+ status.value = '1'
+ } else if (index === 2) {
+ // 宸插畬鎴�
+ status.value = '2'
+ }
+ // 閲嶆柊鍔犺浇鏁版嵁
+ reloadData()
+}
+
+// 鍘熸湁鍑芥暟
function handleViewMode({ value }) {
reloadData()
}
@@ -112,6 +135,7 @@
pageNum,
pageSize,
viewMode: viewMode.value,
+ status: status.value, // 娣诲姞鐘舵�佺瓫閫�
}
if (filterDate.value === '1') {
params.planTime = dayjs().format('YYYY-MM-DD')
diff --git a/eims-ui-mobile/src/pages/maint/maint-order.vue b/eims-ui-mobile/src/pages/maint/maint-order.vue
index 88398ec..fe14b49 100644
--- a/eims-ui-mobile/src/pages/maint/maint-order.vue
+++ b/eims-ui-mobile/src/pages/maint/maint-order.vue
@@ -25,7 +25,7 @@
safeAreaInsetTop
>
<template #right>
- <text v-if="isOperatorOrRepair()" class="text-white">鎻愪氦</text>
+ <text v-if="maintSt.status === '0'" class="text-white">鎻愪氦</text>
</template>
</wd-navbar>
<wd-cell>
@@ -48,7 +48,7 @@
</view>
</view>
</template>
- <view class="flex h-[140rpx]" items-center>
+ <view class="flex" items-center>
<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">
@@ -60,14 +60,18 @@
<text class="mr-3">寰呬繚鍏�: {{ maintSt.dbyCount }}</text>
|
<text class="mx-3">淇濆吇涓�: {{ maintSt.byCount }}</text>
- |
- <text class="ml-3">寰呴獙璇�: {{ maintSt.dyzCount }}</text>
+<!-- |-->
+<!-- <text class="ml-3">寰呴獙璇�: {{ maintSt.dyzCount }}</text>-->
</view>
<view class="text-color-gray text-sm mt-2 flex">
<text>鐘舵�侊細</text>
<template v-if="maintSt.status === '1'">
<wd-icon class="icon-color-success" name="check-outline" size="34rpx"></wd-icon>
<text class="ml-1">宸插畬鎴�</text>
+ </template>
+ <template v-else-if="maintSt.status === '2'">
+ <wd-icon class="icon-color-warning" 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>
@@ -205,11 +209,16 @@
placeholder="璇疯緭鍏ョ壒璁颁簨椤�"
clearable
/>
+ <!-- 鏂板纭瀹屾垚鎸夐挳 -->
+ <view class="flex justify-around mt-4">
+ <wd-button type="primary" block size="large" v-if="maintSt.status === '0'" @click="handleClickRight">鎻愪氦</wd-button>
+ <wd-button type="success" block size="large" v-if="isLeader() && maintSt.status === '1'" @click="handleComplete">纭瀹屾垚</wd-button>
+ </view>
</view>
<!-- 鏂板鎻愪氦鎸夐挳 -->
- <view class="flex justify-center mt-4">
- <wd-button type="primary" block size="large" @click="handleClickRight">鎻愪氦</wd-button>
- </view>
+<!-- <view class="flex justify-center mt-4">-->
+<!-- <wd-button type="primary" block size="large" @click="handleClickRight">鎻愪氦</wd-button>-->
+<!-- </view>-->
</z-paging>
<!-- 澶囦欢閫夋嫨寮瑰嚭灞� -->
@@ -340,7 +349,7 @@
}
function loadSpareParts(value?: string) {
- getSpareList({ name: value }).then((res: any) => {
+ getSpareList({ name: value, pageNum: 1, pageSize: 10 }).then((res: any) => {
sparePartsList.value = res.rows
})
@@ -498,7 +507,8 @@
.then((res: any) => {
resolve(true)
if (res?.code === 200) {
- reloadData()
+ uni.$emit('maint-st-refresh')
+ goBack()
toastSucces()
}
})
@@ -604,6 +614,38 @@
});
}
+/**
+ * 纭瀹屾垚鎸夐挳鐐瑰嚮浜嬩欢
+ */
+function handleComplete() {
+ if (!isLeader()) {
+ toast.info('鏃犳潈闄愭搷浣�');
+ return;
+ }
+ const now = new Date();
+ const data: any = Object.assign(
+ {},
+ {
+ id: maintSt.id,
+ status: '2',
+ verifyUser: userStore?.userInfo?.userId ,
+ 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')}`
+ },
+ )
+ updateMaintSt(data)
+ .then((res: any) => {
+ if (res?.code === 200) {
+ uni.$emit('maint-st-refresh')
+ goBack()
+ toastSucces()
+ }
+ })
+ .catch((res) => {
+ console.error(res)
+ })
+
+}
+
// 鏂板鏂规硶锛氳幏鍙栫姸鎬佹枃鏈�
function getStatusText(maintFun: string): string {
switch (maintFun) {
diff --git a/eims-ui-mobile/src/pages/maint/maint-st.vue b/eims-ui-mobile/src/pages/maint/maint-st.vue
index 6704e0b..4db3bdf 100644
--- a/eims-ui-mobile/src/pages/maint/maint-st.vue
+++ b/eims-ui-mobile/src/pages/maint/maint-st.vue
@@ -11,18 +11,19 @@
<template>
<z-paging ref="paging" v-model="dataList" @query="queryList" show-refresher-update-time>
<template #top>
- <wd-drop-menu>
- <wd-drop-menu-item v-model="equName" :options="equList" @change="handleEquName" />
- <wd-drop-menu-item
- v-model="filterDate"
- :options="filterDateList"
- @change="handleFilterDate"
- />
- <wd-drop-menu-item v-model="status" :options="statusList" @change="handleStatus" />
- </wd-drop-menu>
+ <wd-tabs v-model="activeTab" @change="handleTabChange">
+ <wd-tab title="寰呬繚鍏�"></wd-tab>
+ <wd-tab title="寰呯‘璁�"></wd-tab>
+ <wd-tab title="宸插畬鎴�"></wd-tab>
+ </wd-tabs>
</template>
<view class="bg-base">
- <wd-card type="rectangle" v-for="(item, index) in dataList" :key="item.id">
+ <wd-card
+ type="rectangle"
+ v-for="(item, index) in dataList"
+ :key="item.id"
+ :class="[getCardColorClass(item.planTime)]"
+ >
<template #title>
<view class="flex justify-between">
<view class="flex items-center menu-title-box">
@@ -40,7 +41,7 @@
</view>
</view>
</template>
- <view class="flex h-[140rpx]" items-center>
+ <view class="flex" items-center>
<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">
@@ -52,14 +53,18 @@
<text class="mr-3">寰呬繚鍏�: {{ item.dbyCount }}</text>
|
<text class="mx-3">淇濆吇涓�: {{ item.byCount }}</text>
- |
- <text class="ml-3">寰呴獙璇�: {{ item.dyzCount }}</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>
+ </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>
</template>
<template v-else>
<wd-icon class="icon-color-base" name="detection" size="40rpx"></wd-icon>
@@ -76,7 +81,7 @@
</template>
<script setup lang="ts">
-import { ref } from 'vue'
+import { ref, computed } from 'vue'
import { getMaintStList } from '@/service/maint'
import dayjs from 'dayjs'
@@ -99,12 +104,37 @@
params?: NonNullable<unknown>
}
+// 璁$畻宸ュ崟鍗$墖鐨勮儗鏅鑹茬被
+function getCardColorClass(planTime) {
+ if (!planTime) return ''
+
+ const now = dayjs()
+ const planDate = dayjs(planTime)
+ const diffDays = planDate.diff(now, 'day')
+
+ if (diffDays < 0) {
+ // 瓒呰繃璁″垝鏃堕棿锛岀孩鑹茶儗鏅�
+ return 'card-overdue'
+ } else if (diffDays <= 3) {
+ // 璺濈璁″垝鏃堕棿涓夊ぉ浠ュ唴锛岄粍鑹茶儗鏅�
+ return 'card-urgent'
+ } else {
+ // 姝e父鐘舵�侊紝鑳屾櫙棰滆壊涓嶅彉
+ return ''
+ }
+}
+
// 椤甸潰鍙傛暟锛屼笂涓〉闈紶閫掕繃鏉ョ殑鍙傛暟
const option = reactive<PageParams>({
assetNo: '',
from: '',
})
-const status = ref<string>('-1')
+
+// 鏍囩椤电浉鍏�
+const activeTab = ref(0) // 榛樿閫変腑绗竴涓爣绛鹃〉锛堝緟淇濆吇锛�
+
+// 鍘熸湁鐘舵��
+const status = ref<string>('0') // 榛樿涓哄緟淇濆吇鐘舵��
const equName = ref<string>('-1')
const filterDate = ref<string>('1')
@@ -121,6 +151,25 @@
{ label: '宸插畬鎴�', value: '3' },
])
const equList = ref<Record<string, any>[]>([{ label: '鎵�鏈夎澶�', value: '-1' }])
+
+// 鏍囩椤靛垏鎹㈠鐞嗗嚱鏁�
+function handleTabChange({ index }) {
+ // 鏍规嵁鏍囩椤电储寮曡缃搴旂殑鐘舵�佸��
+ if (index === 0) {
+ // 寰呬繚鍏�
+ status.value = '0'
+ } else if (index === 1) {
+ // 寰呯‘璁�
+ status.value = '1'
+ } else if (index === 2) {
+ // 宸插畬鎴�
+ status.value = '2'
+ }
+ // 閲嶆柊鍔犺浇鏁版嵁
+ reloadData()
+}
+
+// 鍘熸湁鍑芥暟
function handleStatus({ value }) {}
function handleEquName({ value }) {
console.log(value)
@@ -185,6 +234,8 @@
function reloadData() {
paging.value.reload()
}
+
+
onLoad((options) => {
Object.assign(option, options)
uni.$on('maint-st-refresh', reloadData)
@@ -223,4 +274,12 @@
:deep(.wd-card__title-content) {
padding: 24rpx 0 !important;
}
+
+/* 宸ュ崟鍗$墖鑳屾櫙棰滆壊 */
+.card-urgent {
+ background-color: rgba(255, 204, 0, 0.1); /* 榛勮壊鑳屾櫙 */
+}
+.card-overdue {
+ background-color: rgba(255, 0, 0, 0.1); /* 绾㈣壊鑳屾櫙 */
+}
</style>
diff --git a/eims-ui-mobile/src/utils/RoleUtils.ts b/eims-ui-mobile/src/utils/RoleUtils.ts
index 3eac386..027a6fb 100644
--- a/eims-ui-mobile/src/utils/RoleUtils.ts
+++ b/eims-ui-mobile/src/utils/RoleUtils.ts
@@ -26,8 +26,9 @@
* 鐧诲綍瑙掕壊鏄搷浣滃伐鎴栫淮淇伐
*/
export const isOperatorOrRepair = () => {
- const roles = useUserStore()?.userInfo?.roles || []
- return roles.includes(ROLE_OPERATOR) || roles.includes(ROLE_REPAIR)
+ // const roles = useUserStore()?.userInfo?.roles || []
+ // return roles.includes(ROLE_OPERATOR) || roles.includes(ROLE_REPAIR)
+ return true
}
/**
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsMaintPlanBo.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsMaintPlanBo.java
index cf189bb..287ef5c 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsMaintPlanBo.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsMaintPlanBo.java
@@ -79,13 +79,13 @@
/**
* 淇濆吇浜�
*/
- @NotNull(message = "淇濆吇浜轰笉鑳戒负绌�", groups = { AddGroup.class, EditGroup.class })
+// @NotNull(message = "淇濆吇浜轰笉鑳戒负绌�", groups = { AddGroup.class, EditGroup.class })
private Long maintUser;
/**
* 淇濆吇閮ㄩ棬
*/
- @NotNull(message = "淇濆吇閮ㄩ棬涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+// @NotNull(message = "淇濆吇閮ㄩ棬涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
private Long maintDept;
/**
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsMaintStVo.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsMaintStVo.java
index 130b421..01b0efe 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsMaintStVo.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsMaintStVo.java
@@ -57,7 +57,7 @@
*
*/
@ExcelProperty(value = "")
- @JsonFormat(pattern = "yyyy-MM")
+ @JsonFormat(pattern = "yyyy-MM-dd")
private Date planTime;
/**
*绋芥煡鏃ユ湡
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/job/MaintPlanToOrderJob.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/job/MaintPlanToOrderJob.java
index 2e2b6af..ca5e691 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/job/MaintPlanToOrderJob.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/job/MaintPlanToOrderJob.java
@@ -57,7 +57,7 @@
Date oldNext = planVo.getMaintNextTime();
int day = DateUtils.differentDays(today, oldNext);
// 濡傛灉璁″垝鐢熸垚宸ュ崟鏃ユ湡澶т簬浠婂ぉ鍒欎笉鐢熸垚宸ュ崟
- if (day >= 1) {
+ if (day >= 10) {
continue;
}
--
Gitblit v1.9.3