From df64c34d92cbe8501bbbfe837bc491a47452c0b6 Mon Sep 17 00:00:00 2001
From: baoshiwei <baoshiwei@shlanbao.cn>
Date: 星期一, 09 六月 2025 10:58:19 +0800
Subject: [PATCH] feat(eims): 新增保养工单批量修改功能并优化相关领域对象

---
 eims-ui-mobile/env/.env.production                                                                    |    2 
 eims-ui-mobile/env/.env                                                                               |    3 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/MaintOrderBo.java                 |   10 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintOrderServiceImpl.java |   66 +++
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsSpareInoutServiceImpl.java |   81 ++--
 eims-ui-mobile/src/pages/inspect/insp-st.vue                                                          |   12 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsMaintOrder.java                  |    9 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsMaintOrderController.java    |   19 +
 eims-ui-mobile/src/pages/maint/maint-order.vue                                                        |  467 ++++++++++++++++++++--------
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsMaintOrderBo.java             |   15 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsMaintOrderService.java         |   13 
 eims-ui-mobile/src/pages/inspect/insp-record.vue                                                      |  151 +++++++--
 eims-ui-mobile/package.json                                                                           |    2 
 eims-ui-mobile/src/pages/repair/repair-fb.vue                                                         |   10 
 eims-ui-mobile/src/pages/fixture/fixture-list.vue                                                     |    4 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsSpareBo.java                  |    2 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsSpareInoutdtBo.java           |   15 
 eims-ui-mobile/src/pages/spare/spare-list.vue                                                         |    6 
 eims-ui-mobile/src/service/maint.ts                                                                   |    7 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsSpareInoutdtVo.java           |    2 
 eims-ui-mobile/env/.env.development                                                                   |    2 
 eims-ui-mobile/src/pages/repair/res-list.vue                                                          |    2 
 eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/DictConstants.java |   10 
 eims-ui-mobile/src/pages/maint/maint-st.vue                                                           |   10 
 eims-ui-mobile/src/pages/scan/index.vue                                                               |    4 
 eims-ui-mobile/src/pages/equ/equ-list.vue                                                             |    4 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsMaintOrderVo.java             |   15 
 eims-ui-mobile/src/pages/home/index.vue                                                               |    8 
 eims-ui-mobile/src/pages/repair/req-list.vue                                                          |    4 
 29 files changed, 695 insertions(+), 260 deletions(-)

diff --git a/eims-ui-mobile/env/.env b/eims-ui-mobile/env/.env
index c2a782d..e417350 100644
--- a/eims-ui-mobile/env/.env
+++ b/eims-ui-mobile/env/.env
@@ -7,8 +7,7 @@
 # h5閮ㄧ讲缃戠珯鐨刡ase锛岄厤缃埌 manifest.config.ts 閲岀殑 h5.router.base
 VITE_APP_PUBLIC_BASE=/
 
-VITE_SERVER_BASEURL = 'http://lanpucloud.cn:8091'
-VITE_UPLOAD_BASEURL = 'http://lanpucloud.cn:8091/resource/oss/upload'
+
 
 # 鏈変簺鍚屽鍙兘闇�瑕佸湪寰俊灏忕▼搴忛噷闈㈡牴鎹� develop銆乼rial銆乺elease 鍒嗗埆璁剧疆涓婁紶鍦板潃锛屽弬鑰冧唬鐮佸涓嬨��
 # 涓嬮潰鐨勫彉閲忓鏋滄病鏈夎缃紝浼氶粯璁や娇鐢� VITE_SERVER_BASEURL or VITE_UPLOAD_BASEURL
diff --git a/eims-ui-mobile/env/.env.development b/eims-ui-mobile/env/.env.development
index 04fa273..28d8b10 100644
--- a/eims-ui-mobile/env/.env.development
+++ b/eims-ui-mobile/env/.env.development
@@ -4,3 +4,5 @@
 VITE_DELETE_CONSOLE = false
 # 鏄惁寮�鍚痵ourcemap
 VITE_SHOW_SOURCEMAP = true
+VITE_SERVER_BASEURL = 'http://192.168.21.236:8080'
+VITE_UPLOAD_BASEURL = 'http://192.168.21.236:8080/resource/oss/upload'
diff --git a/eims-ui-mobile/env/.env.production b/eims-ui-mobile/env/.env.production
index 8a1b50c..b6ac6b3 100644
--- a/eims-ui-mobile/env/.env.production
+++ b/eims-ui-mobile/env/.env.production
@@ -4,3 +4,5 @@
 VITE_DELETE_CONSOLE = true
 # 鏄惁寮�鍚痵ourcemap
 VITE_SHOW_SOURCEMAP = false
+VITE_SERVER_BASEURL = 'http://lanpucloud.cn:8091'
+VITE_UPLOAD_BASEURL = 'http://lanpucloud.cn:8091/resource/oss/upload'
diff --git a/eims-ui-mobile/package.json b/eims-ui-mobile/package.json
index 06ef415..d581eb7 100644
--- a/eims-ui-mobile/package.json
+++ b/eims-ui-mobile/package.json
@@ -110,7 +110,7 @@
     "qs": "6.5.3",
     "vue": "3.4.21",
     "vue-i18n": "^9.1.9",
-    "wot-design-uni": "^1.4.0",
+    "wot-design-uni": "^1.9.1",
     "z-paging": "^2.8.4"
   },
   "devDependencies": {
diff --git a/eims-ui-mobile/src/pages/equ/equ-list.vue b/eims-ui-mobile/src/pages/equ/equ-list.vue
index e185716..3223131 100644
--- a/eims-ui-mobile/src/pages/equ/equ-list.vue
+++ b/eims-ui-mobile/src/pages/equ/equ-list.vue
@@ -39,7 +39,7 @@
           <view class="flex justify-between items-baseline">
             <view class="flex items-center menu-title-box">
               <view class="menu-indicator"></view>
-              <text class="ml-1 text-xs">{{ item.assetNo }}</text>
+              <text class="ml-1 text-sm">{{ item.assetNo }}</text>
               <wd-tag v-if="item.status === '0'" class="ml-2" bg-color="cyan">璇曠敤</wd-tag>
               <wd-tag v-else-if="item.status === '1'" class="ml-2" type="success">浣跨敤</wd-tag>
               <wd-tag v-else-if="item.status === '2'" class="ml-2" type="danger">鍋滅敤</wd-tag>
@@ -61,7 +61,7 @@
               {{ item.equName }}
               <text class="text-color-gray ml-2 text-mini">{{ item.modelNo }}</text>
             </view>
-            <view class="text-color-gray text-xs mt-1">
+            <view class="text-color-gray text-sm mt-1">
               {{ item.location }} | {{ item.madeIn }}
             </view>
           </view>
diff --git a/eims-ui-mobile/src/pages/fixture/fixture-list.vue b/eims-ui-mobile/src/pages/fixture/fixture-list.vue
index e245676..5d1dabc 100644
--- a/eims-ui-mobile/src/pages/fixture/fixture-list.vue
+++ b/eims-ui-mobile/src/pages/fixture/fixture-list.vue
@@ -22,7 +22,7 @@
           <view class="flex justify-between items-center">
             <view class="flex items-center menu-title-box">
               <view class="menu-indicator"></view>
-              <text class="ml-1 text-xs">{{ item.fixtureName }}</text>
+              <text class="ml-1 text-sm">{{ item.fixtureName }}</text>
               <text class="ml-1 text-mini text-color-gray">{{ item.assetNo }}</text>
             </view>
 
@@ -40,7 +40,7 @@
               <text class="text-color-gray ml-2 text-mini">瑙勬牸: {{ item.specNo }}</text>
               <text class="text-color-gray ml-2 text-mini">鍨嬪彿: {{ item.modelNo }}</text>
             </view>
-            <view class="text-color-gray text-xs mt-1 flex">
+            <view class="text-color-gray text-sm mt-1 flex">
               <template
                 v-if="!item.borrowStatus || item.borrowStatus === '0'"
               >
diff --git a/eims-ui-mobile/src/pages/home/index.vue b/eims-ui-mobile/src/pages/home/index.vue
index 5bac502..52dcd4e 100644
--- a/eims-ui-mobile/src/pages/home/index.vue
+++ b/eims-ui-mobile/src/pages/home/index.vue
@@ -61,7 +61,7 @@
           <template #title>
             <view class="flex items-center menu-title-box">
               <view class="menu-indicator"></view>
-              <view class="ml-1 text-xs">鏁版嵁鎬昏</view>
+              <view class="ml-1 text-sm">鏁版嵁鎬昏</view>
             </view>
           </template>
           <view class="flex flex-row justify-around">
@@ -85,7 +85,7 @@
           <template #title>
             <view class="flex items-center menu-title-box">
               <view class="menu-indicator"></view>
-              <view class="ml-1 text-xs">蹇嵎鎿嶄綔</view>
+              <view class="ml-1 text-sm">蹇嵎鎿嶄綔</view>
             </view>
           </template>
           <wd-grid :column="4">
@@ -108,7 +108,7 @@
           <template #title>
             <view class="flex items-center menu-title-box">
               <view class="menu-indicator"></view>
-              <view class="ml-1 text-xs">璁惧绠$悊</view>
+              <view class="ml-1 text-sm">璁惧绠$悊</view>
             </view>
           </template>
           <wd-grid :column="4">
@@ -130,7 +130,7 @@
           <template #title>
             <view class="flex items-center menu-title-box">
               <view class="menu-indicator"></view>
-              <view class="ml-1 text-xs">鍙拌处鐩稿叧</view>
+              <view class="ml-1 text-sm">鍙拌处鐩稿叧</view>
             </view>
           </template>
           <wd-grid :column="4">
diff --git a/eims-ui-mobile/src/pages/inspect/insp-record.vue b/eims-ui-mobile/src/pages/inspect/insp-record.vue
index a276635..42d7841 100644
--- a/eims-ui-mobile/src/pages/inspect/insp-record.vue
+++ b/eims-ui-mobile/src/pages/inspect/insp-record.vue
@@ -6,7 +6,13 @@
 }
 </route>
 <template>
-  <z-paging ref="paging" v-model="dataList" :auto="false" @query="queryList" show-refresher-update-time>
+  <z-paging
+    ref="paging"
+    v-model="dataList"
+    :auto="false"
+    @query="queryList"
+    show-refresher-update-time
+  >
     <template #top>
       <wd-navbar
         title="鐐规璁板綍"
@@ -24,10 +30,13 @@
       <wd-card type="rectangle">
         <template #title>
           <view class="flex justify-between">
-            <view class="flex items-center menu-title-box">
+            <view
+              class="flex items-center menu-title-box center"
+              style="align-content: center; flex-wrap: wrap"
+            >
               <view class="menu-indicator"></view>
-              <view class="ml-1 text-sm align-center">{{ inspSt.equName }}</view>
-              <view class="text-color-gray ml-2 text-mini">{{ inspSt.assetNo }}</view>
+              <view class="ml-1 text-lg align-center">{{ inspSt.equName }}</view>
+              <view class="text-color-gray ml-2 text-sm">{{ inspSt.assetNo }}</view>
             </view>
 
             <view class="flex items-center">
@@ -38,19 +47,19 @@
         <view class="flex h-[140rpx]" items-center>
           <image class="slot-img text-center" src="/static/images/camera.png" />
           <view class="flex-1">
-            <view class="text-color-gray text-xs mt-1 flex">
+            <view class="text-color-gray text-sm mt-1 flex">
               <text class="mr-3">鐐规鎬绘暟: {{ dataCount }}</text>
               |
               <text class="mx-3">宸茬偣妫�: {{ checkCount }}</text>
               |
               <text class="ml-3">鏈偣妫�: {{ dataCount - checkCount }}</text>
             </view>
-            <view class="text-color-gray text-xs mt-2 flex">
+            <view class="text-color-gray text-sm mt-2 flex">
               <text class="mr-3">姝e父: {{ normalNum }}</text>
               |
               <text class="mx-3">寮傚父: {{ abNormalNum }}</text>
             </view>
-            <view class="text-color-gray text-xs mt-2 flex">
+            <view class="text-color-gray text-sm mt-2 flex">
               <text>鐘舵�侊細</text>
               <template v-if="dataCount > 0 && dataCount === checkCount">
                 <wd-icon class="icon-color-success" name="check-outline" size="34rpx"></wd-icon>
@@ -61,7 +70,7 @@
                 <text class="ml-1">杩涜涓�</text>
               </template>
             </view>
-            <view class="text-color-gray text-xs mt-2 flex">鍒涘缓鏃堕棿: {{ inspSt.createTime }}</view>
+            <view class="text-color-gray text-sm mt-2 flex">鍒涘缓鏃堕棿: {{ inspSt.createTime }}</view>
           </view>
         </view>
       </wd-card>
@@ -71,18 +80,23 @@
       <view class="w-full h-[24rpx]"></view>
       <wd-cell>
         <template #title>
-          <text class="text-color-gray">鐐规椤�</text>
+          <text class="text-color-gray text-sm">鐐规椤�</text>
         </template>
-        <wd-button size="small" type="text" @click.stop="toggleCollapse">
-          {{ isAllExpanded ? '鍏ㄩ儴鎶樺彔' : '鍏ㄩ儴灞曞紑' }}
-        </wd-button>
+        <!--        <wd-button size="small" type="text" @click.stop="toggleCollapse">-->
+        <!--          {{ isAllExpanded ? '鍏ㄩ儴鎶樺彔' : '鍏ㄩ儴灞曞紑' }}-->
+        <!--        </wd-button>-->
       </wd-cell>
-      <wd-collapse v-model="collSelects" title="鐐规椤�" ref="collapseRef">
-        <wd-collapse-item :name="item.id" v-for="(item, index) in dataList" disabled>
+      <wd-collapse v-model="collSelects" title="鐐规椤�" ref="collapseRef" accordion>
+        <wd-collapse-item
+          :name="item.id"
+          v-for="(item, index) in dataList"
+          :key="item.id"
+          :class="getItemClass(item)"
+        >
           <template #title="{ expanded, disabled, isFirst }">
             <view class="flex justify-between">
-              <view class="flex justify-center items-center" style="max-width: 60%;">
-                <text class="text-sm" >{{ item.inspName }}</text>
+              <view class="flex justify-center items-center" style="max-width: 60%">
+                <text class="text-sm">{{ item.inspName }}</text>
               </view>
 
               <view class="flex items-center">
@@ -105,18 +119,27 @@
               </view>
             </view>
           </template>
-          <view class="text-color-gray text-xs flex justify-between">
+
+          <view v-if="item.showDesc" class="mt-2">
+            <wd-input
+              v-model="item.inspDesc"
+              placeholder="璇疯緭鍏ュ紓甯告弿杩�"
+              clearable
+              :maxlength="200"
+            />
+          </view>
+          <view class="text-color-gray text-sm flex justify-between">
             <text class="mr-3">鐐规浜�: {{ item.inspUserName }}</text>
             <text class="mx-3">鐐规鏃堕棿: {{ item.inspTime }}</text>
           </view>
         </wd-collapse-item>
       </wd-collapse>
-      <view class="w-full h-[24rpx]"></view>
-      <wd-cell>
-        <template #title>
-          <text class="text-color-gray">鍏朵粬</text>
-        </template>
-      </wd-cell>
+      <!--      <view class="w-full h-[24rpx]"></view>-->
+      <!--      <wd-cell>-->
+      <!--&lt;!&ndash;        <template #title>&ndash;&gt;-->
+      <!--&lt;!&ndash;          <text class="text-color-gray">鍏朵粬</text>&ndash;&gt;-->
+      <!--&lt;!&ndash;        </template>&ndash;&gt;-->
+      <!--      </wd-cell>-->
       <view class="w-full h-[1px] bg-base"></view>
       <wd-input
         label="杩愯鏃堕棿"
@@ -125,6 +148,7 @@
         v-model="inspSt.runTimes"
         placeholder="璇疯緭鍏ヨ繍琛屾椂闂�(h)"
         inputmode="numeric"
+        size="large"
       />
       <wd-input
         label="鏁呴殰鏃堕棿"
@@ -133,6 +157,7 @@
         v-model="inspSt.faultTimes"
         placeholder="璇疯緭鍏ユ晠闅滄椂闂�(h)"
         inputmode="numeric"
+        size="large"
       />
       <wd-textarea
         label="鐗硅浜嬮」"
@@ -144,13 +169,17 @@
         show-word-limit
         placeholder="璇疯緭鍏ョ壒璁颁簨椤�"
         clearable
+        size="large"
       />
+      <!-- 鏂板鎻愪氦鎸夐挳 -->
+      <view class="flex justify-center mt-4">
+        <wd-button type="primary" block size="large" @click="handleClickRight">鎻愪氦</wd-button>
+      </view>
     </view>
   </z-paging>
 </template>
 
 <script setup lang="ts">
-import { ref } from 'vue'
 import { useUserStore, useAccessStore, useSystemConfigStore } from '@/store'
 import { isLeader, isOperatorOrRepair } from '@/utils/RoleUtils'
 import {
@@ -194,7 +223,8 @@
 
 const userStore = useUserStore()
 
-const collSelects = ref<string[]>([])
+const collSelects = ref('')
+const selectedItems = ref([])
 
 // 鐐规姹囨�绘暟鎹�(涓婁釜椤甸潰浼犲��)
 const inspSt = reactive<InspSt>({
@@ -237,7 +267,19 @@
 }
 
 function inspResultClick(item: any) {
-  // userStore?.userInfo?.userId
+  console.log('inspResultClick', userStore.userInfo)
+  // 鑷姩濉厖鐐规浜哄拰鏃堕棿
+  item.inspUserName = userStore?.userInfo?.realName || ''
+  // 淇敼鏃堕棿鏍煎紡涓� YYYY-MM-DD HH:mm:ss
+  const now = new Date()
+  item.inspTime = `${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')}`
+
+  if (item.inspResult === '2') {
+    item.showDesc = true
+  } else {
+    item.showDesc = false
+    item.inspDesc = ''
+  }
 }
 
 const goBack = () => {
@@ -245,10 +287,9 @@
 }
 
 function handleClickRight() {
-  if(isOperatorOrRepair()){
+  if (isOperatorOrRepair()) {
     handleConfirm()
   }
-
 }
 
 const toggleCollapse = () => {
@@ -257,10 +298,31 @@
 }
 
 function handleConfirm() {
+  console.log('handleConfirm')
   if (!dataChange.value) {
     message.alert('璇锋搷浣滃悗鎻愪氦!')
     return false
   }
+
+  // 妫�鏌ユ槸鍚︽湁寮傚父椤规湭濉啓鎻忚堪
+  const invalidItems = dataList.value.filter(
+    (item) => item.inspResult === '2' && !item.inspDesc?.trim(),
+  )
+  if (invalidItems.length > 0) {
+    message.alert('璇峰~鍐欐墍鏈夊紓甯搁」鐨勫紓甯告弿杩�!')
+    return false
+  }
+
+  // 杩囨护鍑哄凡閫夋嫨鐨勯」鐩�
+  selectedItems.value = dataList.value.filter(
+    (item) => item.inspResult === '1' || item.inspResult === '2',
+  )
+
+  if (selectedItems.value.length === 0) {
+    message.alert('璇疯嚦灏戦�夋嫨涓�涓偣妫�椤�!')
+    return false
+  }
+
   message
     .confirm({
       msg: '纭畾鎻愪氦锛�',
@@ -278,8 +340,9 @@
 }
 
 function updateData(resolve: any) {
+  console.log('updateData', selectedItems.value)
   const params = {
-    inspRecordList: dataList.value,
+    inspRecordList: selectedItems.value,
   }
   // 鏇存柊鐐规璁板綍
   updateInspRecordBatch(params)
@@ -313,8 +376,17 @@
  */
 function itemClick(item: any) {}
 
+function getItemClass(item: any) {
+  if (item.inspResult === '1') {
+    return 'status-normal'
+  } else if (item.inspResult === '2') {
+    return 'status-abnormal'
+  }
+  return ''
+}
+
 watch(
-  () => [...dataList.value], // 浣跨敤鎵╁睍杩愮畻绗﹀垱寤烘柊鏁扮粍浠ヨЕ鍙戠洃鍚�
+  () => [...dataList.value, inspSt], // 浣跨敤鎵╁睍杩愮畻绗﹀垱寤烘柊鏁扮粍浠ヨЕ鍙戠洃鍚�
   (newVal, oldVal) => {
     if (oldVal.length > 0) {
       dataChange.value = true
@@ -375,7 +447,7 @@
   margin-right: 24rpx;
 }
 .text-mini {
-  font-size: 22rpx;
+  font-size: 24rpx;
 }
 
 .menu-indicator {
@@ -394,13 +466,26 @@
   background: $uni-color-primary;
 }
 :deep(.wd-navbar__text) {
-  font-size: 26rpx;
+  font-size: 28rpx;
   color: white;
 }
 :deep(.wd-icon-arrow-left:before),
 :deep(.wd-navbar__title) {
   color: white;
   font-weight: 0;
-  font-size: 32rpx;
+  font-size: 34rpx;
+}
+
+// 鏂板鏍峰紡锛氱偣妫�椤硅儗鏅壊
+.status-normal {
+  background-color: #e6f7ff; // 姝e父鐘舵�佽儗鏅壊锛堢豢鑹诧級
+}
+
+.status-abnormal {
+  background-color: #fffbe6; // 寮傚父鐘舵�佽儗鏅壊锛堥粍鑹诧級
+}
+:deep(.wd-radio-group) {
+  // 鏀逛负鏃犺儗鏅壊
+  background-color: transparent;
 }
 </style>
diff --git a/eims-ui-mobile/src/pages/inspect/insp-st.vue b/eims-ui-mobile/src/pages/inspect/insp-st.vue
index 9e495be..0eb3a03 100644
--- a/eims-ui-mobile/src/pages/inspect/insp-st.vue
+++ b/eims-ui-mobile/src/pages/inspect/insp-st.vue
@@ -43,19 +43,19 @@
         <view class="flex h-[140rpx]" items-center>
           <image class="slot-img text-center" src="/static/images/camera.png" />
           <view class="flex-1">
-            <view class="text-color-gray text-xs mt-1 flex">
-              <text class="mr-3">鐐规鎬绘暟: {{ item.recordCount }}</text>
+            <view class="text-color-gray text-sm mt-1 flex">
+              <text class="mr-3">鎬绘暟: {{ item.recordCount }}</text>
               |
               <text class="mx-3">宸茬偣妫�: {{ item.checkCount }}</text>
               |
               <text class="ml-3">鏈偣妫�: {{ item.unCheckCount }}</text>
             </view>
-            <view class="text-color-gray text-xs mt-2 flex">
+            <view class="text-color-gray text-sm mt-2 flex">
               <text class="mr-3">姝e父: {{ item.normalNum }}</text>
               |
               <text class="mx-3">寮傚父: {{ item.abNormalNum }}</text>
             </view>
-            <view class="text-color-gray text-xs mt-2 flex">
+            <view class="text-color-gray text-sm mt-2 flex">
               <text>鐘舵�侊細</text>
               <template v-if="item.recordCount === item.checkCount">
                 <wd-icon class="icon-color-success" name="check-outline" size="34rpx"></wd-icon>
@@ -66,7 +66,7 @@
                 <text class="ml-1">杩涜涓�</text>
               </template>
             </view>
-            <view class="text-color-gray text-xs mt-2 flex">鍒涘缓鏃堕棿: {{ item.createTime }}</view>
+            <view class="text-color-gray text-sm mt-2 flex">鍒涘缓鏃堕棿: {{ item.createTime }}</view>
           </view>
           <wd-button size="small" icon="edit-outline" @click.stop="itemClick(item)">鏄庣粏</wd-button>
         </view>
@@ -164,7 +164,7 @@
   height: 40rpx;
 }
 .text-mini {
-  font-size: 22rpx;
+  font-size: 24rpx;
 }
 
 .menu-indicator {
diff --git a/eims-ui-mobile/src/pages/maint/maint-order.vue b/eims-ui-mobile/src/pages/maint/maint-order.vue
index 7f2da57..88398ec 100644
--- a/eims-ui-mobile/src/pages/maint/maint-order.vue
+++ b/eims-ui-mobile/src/pages/maint/maint-order.vue
@@ -39,31 +39,31 @@
           <view class="flex justify-between">
             <view class="flex items-center menu-title-box">
               <view class="menu-indicator"></view>
-              <view class="ml-1 text-sm align-center">{{ maintSt.equName }}</view>
-              <view class="text-color-gray ml-2 text-mini">{{ maintSt.assetNo }}</view>
+              <view class="ml-1 text-lg align-center">{{ maintSt.equName }}</view>
+              <view class="text-color-gray ml-2 text-sm">{{ maintSt.assetNo }}</view>
             </view>
 
             <view class="flex items-center">
-              <text class="text-color-gray text-mini">{{ maintSt.planTime }}</text>
+              <text class="text-color-gray text-sm">{{ maintSt.planTime }}</text>
             </view>
           </view>
         </template>
         <view class="flex h-[140rpx]" items-center>
           <image class="slot-img text-center" src="/static/images/camera.png" />
           <view class="flex-1">
-            <view class="text-color-gray text-xs mt-1 flex">
+            <view class="text-color-gray text-sm mt-1 flex">
               <text class="mr-3">宸ュ崟鎬绘暟: {{ maintSt.orderCount }}</text>
               |
               <text class="mx-3">宸插畬鎴�: {{ maintSt.wcCount }}</text>
             </view>
-            <view class="text-color-gray text-xs mt-2 flex">
+            <view class="text-color-gray text-sm mt-2 flex">
               <text class="mr-3">寰呬繚鍏�: {{ maintSt.dbyCount }}</text>
               |
               <text class="mx-3">淇濆吇涓�: {{ maintSt.byCount }}</text>
               |
               <text class="ml-3">寰呴獙璇�: {{ maintSt.dyzCount }}</text>
             </view>
-            <view class="text-color-gray text-xs mt-2 flex">
+            <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>
@@ -75,7 +75,7 @@
               </template>
             </view>
 
-            <view class="text-color-gray text-xs mt-2 flex">
+            <view class="text-color-gray text-sm mt-2 flex">
               鍒涘缓鏃堕棿: {{ maintSt.createTime }}
             </view>
           </view>
@@ -87,145 +87,118 @@
       <view class="w-full h-[24rpx]"></view>
       <wd-cell class="mb-[2px]">
         <template #title>
-          <text class="text-color-gray">淇濆吇椤�</text>
+          <text class="text-color-gray text-sm">淇濆吇椤�</text>
         </template>
       </wd-cell>
 
-      <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="['status-' + item.maintFun]">
         <template #title>
-          <view class="flex justify-between">
-            <view class="flex items-center menu-title-box">
-              <view class="menu-indicator"></view>
-              <view class="ml-1 text-sm align-center">
-                <wd-text :text="item.maintName" :lines="1"></wd-text>
-              </view>
+          <view class="flex items-center">
+            <view class="menu-indicator"></view>
+            <view class="ml-1 text-sm align-center">
+              <wd-text color="black" :text="item.maintName"></wd-text>
             </view>
-
-            <view class="flex items-center w-[20%] justify-end">
-              <text class="text-color-gray text-mini">
-                {{ item?.planTime }}
-              </text>
+            <!-- 鏂板鐘舵�佹樉绀猴紝缁戝畾鐐瑰嚮浜嬩欢 -->
+            <view
+              v-if="item.status === '2'"
+              class="ml-auto text-sm"
+              style="width: 60px; text-align: end"
+              :style="{ color: getStatusColor(item.maintFun) }"
+              @click.stop="handleUndoAction(item)"
+            >
+              {{ getStatusText(item.maintFun) }}
             </view>
           </view>
         </template>
-        <view class="flex h-[200rpx]" items-center>
-          <image class="slot-img text-center" src="/static/ico/ico-platform.png" />
-          <view class="flex-1 text-color-gray text-xs flex-row">
-            <view class="mr-3 mt-2">淇濆吇鍗曞彿: {{ item.maintCode }}</view>
-            <view class="mr-3 mt-2">璁″垝淇濆吇鏃ユ湡: {{ item.planTime }}</view>
-            <view class="mr-3 mt-2">淇濆吇寮�濮嬫椂闂�: {{ item.startTime }}</view>
-            <view class="mr-3 mt-2">淇濆吇缁撴潫鏃堕棿: {{ item.endTime }}</view>
-            <view class="text-color-gray text-xs mt-2 flex">
-              <text>鐘舵�侊細</text>
-              <template v-if="item.status === '0'">
-                <wd-icon class="icon-color-warning" name="books" size="34rpx"></wd-icon>
-                <text class="ml-1">寰呬繚鍏�</text>
-              </template>
-              <template v-else-if="item.status === '1'">
-                <wd-icon class="icon-color-base" name="books" size="34rpx"></wd-icon>
-                <text class="ml-1">淇濆吇涓�</text>
-              </template>
-              <template v-else-if="item.status === '2'">
-                <wd-icon class="icon-color-purple" name="books" size="34rpx"></wd-icon>
-                <text class="ml-1">寰呴獙璇�</text>
-              </template>
-              <template v-else-if="item.status === '3'">
-                <wd-icon class="icon-color-success" name="check-outline" size="34rpx"></wd-icon>
-                <text class="ml-1">宸插畬鎴�</text>
-              </template>
-              <text class="mx-3">|</text>
-              <wd-icon class="icon-color-base" name="camera" size="30rpx"></wd-icon>
-              <text class="ml-1">{{ item.maintUserName }}</text>
+
+        <!-- 鎸夐挳鍖哄煙 -->
+        <view v-if="item.maintFun == null" class="flex justify-around mt-2">
+          <wd-button
+            type="primary"
+            size="small"
+            class="mr-2"
+            @click.stop="handleAction(item, '0')"
+          >
+            妫�鏌�
+          </wd-button>
+          <wd-button
+            type="success"
+            size="small"
+            class="mr-2"
+            @click.stop="handleAction(item, '1')"
+          >
+            淇濆吇
+          </wd-button>
+          <wd-button type="warning" size="small" @click.stop="handleAction(item, '2')">
+            缁翠慨
+          </wd-button>
+        </view>
+
+        <!-- 姝f枃鍖哄煙 -->
+        <view v-else class="mt-2">
+          <!-- 淇濆吇璇存槑鍖哄煙 -->
+          <view v-if="item.maintFun === '1'" class="mt-2">
+            <wd-input
+              v-model="item.maintDesc"
+              placeholder="璇疯緭鍏ヤ繚鍏昏鏄�"
+              clearable
+              :maxlength="200"
+            />
+          </view>
+
+          <!-- 缁翠慨璇存槑鍖哄煙 -->
+          <view v-if="item.maintFun === '2'" class="mt-2">
+            <wd-input
+              v-model="item.repairDesc"
+              placeholder="璇疯緭鍏ョ淮淇鏄�"
+              clearable
+              :maxlength="200"
+            />
+          </view>
+
+
+          <!-- 澶囦欢淇℃伅褰曞叆鍖哄煙 -->
+          <view v-if="item.spareParts && item.spareParts.length > 0" class="mt-2">
+            <view
+              v-for="(part, partIndex) in item.spareParts"
+              :key="partIndex"
+              class="flex justify-between mt-1"
+            >
+              <wd-input
+                v-model="part.name"
+                label="鍚嶇О"
+                label-width="100rpx"
+                placeholder="澶囦欢鍚嶇О"
+
+
+              />
+              <wd-input
+                v-model="part.quantity"
+                label="鏁伴噺" label-width="100rpx"
+                placeholder="鏁伴噺" type="number" :maxlength="5" />
             </view>
           </view>
-          <!--鎿嶄綔宸ユ垨缁翠慨宸ヨ鑹�-->
-          <template v-if="isOperatorOrRepair()">
-            <view class="flex flex-col justify-between"  v-if="item.status === '0'">
-              <wd-button
-                size="small"
-                icon="edit-outline"
-                @click.stop="handleStartMaint(item)"
-              >
-                寮�濮嬩繚鍏�
-              </wd-button>
+          <!-- 缁翠慨璇存槑鍖哄煙 -->
+          <view v-if="item.maintFun === '2'" class="mt-2">
+            <wd-button type="info" size="small" @click.stop="addSparePart(item, index)">
+              娣诲姞澶囦欢
+            </wd-button>
+          </view>
 
-              <wd-button
-                class="mt-3"
-                size="small"
-                icon="edit-outline"
-                @click.stop="handleMaintFinish(item)"
-              >
-                涓�閿繚鍏�
-              </wd-button>
-            </view>
-            <wd-button
-              v-if="item.status === '1'"
-              size="small"
-              icon="edit-outline"
-              @click.stop="itemClick(item)"
-            >
-              淇濆吇涓�
-            </wd-button>
 
-            <wd-button
-              v-if="item.status === '2'"
-              size="small"
-              icon="edit-outline"
-              @click.stop="itemClick(item)"
-            >
-              寰呴獙璇�
-            </wd-button>
-
-            <wd-button
-              v-if="item.status === '3'"
-              size="small"
-              icon="check-outline"
-              @click.stop="itemClick(item)"
-            >
-              宸插畬鎴�
-            </wd-button>
-          </template>
-
-          <!--绠$悊鍛樿鑹�-->
-          <template v-else-if="isLeader()">
-            <wd-button v-if="item.status === '0'" size="small" icon="warn-bold" disabled>
-              寰呬繚鍏�
-            </wd-button>
-            <wd-button v-if="item.status === '1'" size="small" icon="warn-bold" disabled>
-              淇濆吇涓�
-            </wd-button>
-
-            <wd-button
-              v-if="item.status === '2'"
-              size="small"
-              icon="edit-outline"
-              @click.stop="itemClick(item)"
-            >
-              寰呴獙璇�
-            </wd-button>
-
-            <wd-button
-              v-if="item.status === '3'"
-              size="small"
-              icon="check-outline"
-              @click.stop="itemClick(item)"
-            >
-              宸插畬鎴�
-            </wd-button>
-          </template>
+          <!-- 淇濆吇浜哄拰淇濆吇鏃堕棿鍖哄煙 -->
+          <view class="flex justify-between mt-2">
+            <text>淇濆吇浜�: {{ item.maintUserName }}</text>
+            <text>淇濆吇鏃堕棿: {{ item.endTime }}</text>
+          </view>
         </view>
       </wd-card>
-      <wd-cell>
-        <template #title>
-          <text class="text-color-gray">鍏朵粬淇℃伅</text>
-        </template>
-      </wd-cell>
-      <view class="h-[2px] w-full bg-base"></view>
+
       <wd-textarea
         label="鐗硅浜嬮」"
         label-width="200rpx"
         type="textarea"
-        v-model="maintSt.specialNote"
+        v-model="specialNote"
         auto-height
         :maxlength="200"
         show-word-limit
@@ -233,22 +206,63 @@
         clearable
       />
     </view>
+    <!-- 鏂板鎻愪氦鎸夐挳 -->
+    <view class="flex justify-center mt-4">
+      <wd-button type="primary" block size="large" @click="handleClickRight">鎻愪氦</wd-button>
+    </view>
   </z-paging>
+
+  <!-- 澶囦欢閫夋嫨寮瑰嚭灞� -->
+  <wd-popup v-model="showSparePopup" position="bottom" height="33.33vh">
+    <view class="flex justify-between p-2 bg-white">
+      <wd-button type="text" @click="closeSparePopup">鍙栨秷</wd-button>
+      <wd-button type="text" @click="addOtherSparePart">鍏朵粬</wd-button>
+
+    </view>
+    <wd-input
+      v-model="searchKeyword"
+      placeholder="璇疯緭鍏ュ浠跺悕绉版垨鍨嬪彿"
+      clearable
+      @input="filterSpareParts"
+    />
+    <view class="p-2">
+      <view
+        v-for="(part, index) in sparePartsList"
+        :key="index"
+        class="flex justify-between items-center p-2 border-b"
+        @click="selectFilteredSparePart(part)"
+      >
+        <text>{{ part.name }} ({{ part.code }})</text>
+        <text>鍓╀綑: {{ part.actualStock }}</text>
+      </view>
+    </view>
+  </wd-popup>
+
+
 </template>
+
 <script setup lang="ts">
 import type { MaintStVO } from '@/service/maint.d'
-import { getMaintSt, getMaintStOrderList, updateMaintOrder, updateMaintSt } from '@/service/maint'
+import { getMaintSt, getMaintStOrderList, updateMaintOrder, updateMaintSt, updateMaintOrderBatch } from '@/service/maint'
 import { ref, reactive } from 'vue'
 import { useToast, useMessage } from 'wot-design-uni'
 import { isLeader, isOperatorOrRepair } from '@/utils/RoleUtils'
 import { formatDate } from '@/utils/DateUtils'
+import { useUserStore } from "@/store";
+import { getSpareList } from '@/service/spare'
+
 const message = useMessage()
 const toast = useToast()
-
+const userStore = useUserStore()
 const paging = ref(null)
 const dataList = ref([])
 const maintStId = ref('')
-
+const showSparePopup = ref(false)
+const selectedPartIndex = ref(-1)
+const sparePartsList = ref([])
+const searchKeyword = ref('')
+const dataChange = ref(false)
+const specialNote = ref('')
 interface QueryParams {
   pageNum: number
   pageSize: number
@@ -272,7 +286,7 @@
 const queryList = (pageNum?: number, pageSize?: number) => {
   const params: QueryParams = {
     pageNum,
-    pageSize,
+    pageSize: 30,
     maintCode: maintCode.value,
   }
   getMaintStOrderList(params)
@@ -307,6 +321,65 @@
   uni.navigateTo({
     url: `/pages/maint/order-detail?id=${item.id}`,
   })
+}
+
+// 澶囦欢閫夋嫨鐩稿叧閫昏緫
+function addSparePart(item: any, index: number) {
+  if (!item.spareParts) {
+    item.spareParts = []
+  }
+  selectedPartIndex.value = index
+  // item.spareParts.push({ name: '', quantity: '' })
+  selectSparePart(item)
+}
+
+function selectSparePart(item: any) {
+  showSparePopup.value = true
+
+  loadSpareParts()
+}
+
+function loadSpareParts(value?: string) {
+  getSpareList({ name: value }).then((res: any) => {
+    sparePartsList.value = res.rows
+
+  })
+}
+
+function filterSpareParts() {
+  if (!searchKeyword.value) {
+    loadSpareParts()
+  } else {
+    loadSpareParts(searchKeyword.value)
+  }
+}
+
+function selectFilteredSparePart(part: any) {
+  dataList.value[selectedPartIndex.value].spareParts.push({
+    id: part.id,
+    name: part.name,
+    quantity: '',
+  })
+  closeSparePopup()
+}
+
+function closeSparePopup() {
+  showSparePopup.value = false
+  selectedPartIndex.value = -1
+  searchKeyword.value = ''
+}
+
+function confirmSpareSelection() {
+  closeSparePopup()
+}
+
+function addOtherSparePart() {
+  dataList.value[selectedPartIndex.value].spareParts.push({
+    id:  '',
+    name: '',
+    quantity: '',
+  })
+  closeSparePopup();
 }
 
 /**
@@ -380,19 +453,36 @@
 }
 
 function handleUpdateMaintSt() {
-  if (maintSt.orderCount !== maintSt.wcCount) {
-    toast.info('璇峰厛瀹屾垚鎵�鏈変繚鍏婚」锛�')
+  // if (maintSt.orderCount !== maintSt.wcCount) {
+  //   toast.info('璇峰厛瀹屾垚鎵�鏈変繚鍏婚」锛�')
+  //   return false
+  // }
+  // 鍏堝垽鏂繚鍏婚」鏄惁鏈夋洿鏀�
+  console.log('handleUPdateMaintst', dataChange.value)
+  if (!dataChange.value) {
+    message.alert('璇锋搷浣滃悗鎻愪氦!')
     return false
   }
+  // 杩囨护鎺� maintFun涓虹┖鐨勪繚鍏婚」
+  const submitList = dataList.value.filter((item) => item.maintFun != null)
+  // 濡傛灉maintFun涓�1鐨勫垯鍒ゆ柇淇濆吇璇存槑涓嶈兘涓虹┖锛屽鏋滀负2鍒欏垽鏂淮淇鏄庝笉鑳戒负绌�
+  if (submitList.some((item) => item.maintFun === '1' && !item.maintDesc)) {
+    toast.info('璇峰~鍐欎繚鍏昏鏄庯紒')
+    return false
+  } else if (submitList.some((item) => item.maintFun === '2' && !item.repairDesc)) {
+    toast.info('璇峰~鍐欑淮淇鏄庯紒')
+    return false
+  }
+
 
   const data: any = Object.assign(
     {},
     {
       id: maintSt.id,
       orderCount: maintSt.orderCount,
-      wcCount: maintSt.wcCount,
+      wcCount: submitList.length,
       status: maintSt.status,
-      specialNote: maintSt.specialNote,
+      specialNote: specialNote.value,
     },
   )
   if (data.orderCount === data.wcCount) {
@@ -403,6 +493,7 @@
       msg: '纭畾鏇存柊宸ュ崟姹囨�绘暟鎹紵',
       title: '鎻愮ず',
       beforeConfirm: ({ resolve }) => {
+        updateMaintOrderBatch({maintOrderList:submitList})
         updateMaintSt(data)
           .then((res: any) => {
             resolve(true)
@@ -457,6 +548,90 @@
   maintStId.value = options.id
   reloadData()
 })
+watch(
+  () => [...dataList.value, specialNote.value ], // 浣跨敤鎵╁睍杩愮畻绗﹀垱寤烘柊鏁扮粍浠ヨЕ鍙戠洃鍚�
+  (newVal, oldVal) => {
+    if (oldVal.length > 0) {
+      console.log('dataChange',oldVal,  newVal)
+      dataChange.value = true
+    }
+  },
+  { deep: true },
+)
+/**
+ * 澶勭悊鎸夐挳鐐瑰嚮浜嬩欢
+ * @param item 淇濆吇椤�
+ * @param action 鎿嶄綔绫诲瀷锛坈heck/check/maintain/repair锛�
+ */
+function handleAction(item: any, action: number) {
+  // 璁剧疆褰撳墠閫変腑鐨勬搷浣滅被鍨�
+  item.maintFun = action
+  item.status = '2'
+  // 鑷姩濉厖淇濆吇浜哄拰鏃堕棿
+  item.maintUserName = userStore?.userInfo?.realName || ''
+  const now = new Date()
+  item.endTime = `${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')}`;
+  console.log('handleAction', item)
+}
+
+/**
+ * 鎾ら攢淇濆吇鎿嶄綔
+ * @param item 淇濆吇椤�
+ */
+function handleUndoAction(item: any) {
+  message
+    .confirm({
+      msg: '纭畾鎾ら攢褰撳墠鎿嶄綔锛�',
+      title: '鎻愮ず',
+      beforeConfirm: ({ resolve }) => {
+        // 閲嶇疆鐘舵�佸拰鐩稿叧瀛楁
+        item.maintFun = null;
+        item.status = '0';
+        item.maintDesc = '';
+        item.repairDesc = '';
+        item.spareParts = [];
+        item.maintUserName = '';
+        item.endTime = '';
+        resolve(true);
+      },
+    })
+    .then(() => {
+      toast.success('鎿嶄綔宸叉挙閿�');
+      dataChange.value = true;
+    })
+    .catch((error) => {
+      console.log(error);
+    });
+}
+
+// 鏂板鏂规硶锛氳幏鍙栫姸鎬佹枃鏈�
+function getStatusText(maintFun: string): string {
+  switch (maintFun) {
+    case '0':
+      return '宸叉鏌�';
+    case '1':
+      return '宸蹭繚鍏�';
+    case '2':
+      return '宸茬淮淇�';
+    default:
+      return '';
+  }
+}
+
+// 鏂板鏂规硶锛氳幏鍙栫姸鎬侀鑹�
+function getStatusColor(maintFun: string): string {
+  switch (maintFun) {
+    case '0':
+      return '#007bff'; // 妫�鏌ユ寜閽鑹�
+    case '1':
+      return '#28a745'; // 淇濆吇鎸夐挳棰滆壊
+    case '2':
+      return '#ffc107'; // 缁翠慨鎸夐挳棰滆壊
+    default:
+      return '#000';
+  }
+}
+
 </script>
 
 <style scoped lang="scss">
@@ -472,7 +647,7 @@
 }
 
 .text-mini {
-  font-size: 22rpx;
+  font-size: 24rpx;
 }
 
 .menu-indicator {
@@ -494,7 +669,7 @@
 }
 
 :deep(.wd-navbar__text) {
-  font-size: 26rpx;
+  font-size: 28rpx;
   color: white;
 }
 
@@ -502,6 +677,20 @@
 :deep(.wd-navbar__title) {
   color: white;
   font-weight: 0;
-  font-size: 32rpx;
+  font-size: 34rpx;
+}
+
+// 鏂板鏍峰紡锛氬姩鎬佽缃崱鐗囪儗鏅壊
+:deep(.wd-card) {
+  transition: background-color 0.3s ease;
+  &.status-0 {
+    background-color: #e6f7ff; // 妫�鏌ョ姸鎬佽儗鏅壊
+  }
+  &.status-1 {
+    background-color: #f6ffed; // 淇濆吇鐘舵�佽儗鏅壊
+  }
+  &.status-2 {
+    background-color: #fffbe6; // 缁翠慨鐘舵�佽儗鏅壊
+  }
 }
 </style>
diff --git a/eims-ui-mobile/src/pages/maint/maint-st.vue b/eims-ui-mobile/src/pages/maint/maint-st.vue
index c535f0b..6704e0b 100644
--- a/eims-ui-mobile/src/pages/maint/maint-st.vue
+++ b/eims-ui-mobile/src/pages/maint/maint-st.vue
@@ -43,19 +43,19 @@
         <view class="flex h-[140rpx]" items-center>
           <image class="slot-img text-center" src="/static/images/camera.png" />
           <view class="flex-1">
-            <view class="text-color-gray text-xs mt-1 flex">
+            <view class="text-color-gray text-sm mt-1 flex">
               <text class="mr-3">宸ュ崟鎬绘暟: {{ item.orderCount }}</text>
               |
               <text class="mx-3">宸插畬鎴�: {{ item.wcCount }}</text>
             </view>
-            <view class="text-color-gray text-xs mt-2 flex">
+            <view class="text-color-gray text-sm mt-2 flex">
               <text class="mr-3">寰呬繚鍏�: {{ item.dbyCount }}</text>
               |
               <text class="mx-3">淇濆吇涓�: {{ item.byCount }}</text>
               |
               <text class="ml-3">寰呴獙璇�: {{ item.dyzCount }}</text>
             </view>
-            <view class="text-color-gray text-xs mt-2 flex">
+            <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>
@@ -66,7 +66,7 @@
                 <text class="ml-1">杩涜涓�</text>
               </template>
             </view>
-            <view class="text-color-gray text-xs mt-2 flex">鍒涘缓鏃堕棿: {{ item.createTime }}</view>
+            <view class="text-color-gray text-sm mt-2 flex">鍒涘缓鏃堕棿: {{ item.createTime }}</view>
           </view>
           <wd-button size="small" icon="edit-outline" @click.stop="itemClick(item)">鏄庣粏</wd-button>
         </view>
@@ -208,7 +208,7 @@
   height: 40rpx;
 }
 .text-mini {
-  font-size: 22rpx;
+  font-size: 24rpx;
 }
 
 .menu-indicator {
diff --git a/eims-ui-mobile/src/pages/repair/repair-fb.vue b/eims-ui-mobile/src/pages/repair/repair-fb.vue
index ae8aaea..125226f 100644
--- a/eims-ui-mobile/src/pages/repair/repair-fb.vue
+++ b/eims-ui-mobile/src/pages/repair/repair-fb.vue
@@ -29,20 +29,20 @@
       <template #title>
         <view class="flex items-center menu-title-box">
           <view class="menu-indicator"></view>
-          <view class="ml-1 text-xs">缁翠慨姒傝</view>
+          <view class="ml-1 text-sm">缁翠慨姒傝</view>
         </view>
       </template>
       <wd-steps :active="repairRecordList.length" vertical class="px-4">
         <wd-step v-for="(item, index) in repairRecordList">
           <template #title>
             <view class="flex items-center menu-title-box">
-              <view class="ml-1 text-xs">{{ item?.operaResult }}</view>
+              <view class="ml-1 text-sm">{{ item?.operaResult }}</view>
             </view>
           </template>
           <template #description>
             <view class="flex items-center menu-title-box">
-              <view class="ml-1 text-xs">{{ item?.operaUserName }}</view>
-              <view class="ml-1 text-xs">{{ item?.handleTime }}</view>
+              <view class="ml-1 text-sm">{{ item?.operaUserName }}</view>
+              <view class="ml-1 text-sm">{{ item?.handleTime }}</view>
             </view>
           </template>
         </wd-step>
@@ -53,7 +53,7 @@
       <template #title>
         <view class="flex items-center menu-title-box">
           <view class="menu-indicator"></view>
-          <view class="ml-1 text-xs">缁翠慨璇勪环</view>
+          <view class="ml-1 text-sm">缁翠慨璇勪环</view>
         </view>
       </template>
       <wd-cell title="缁翠慨婊℃剰搴�">
diff --git a/eims-ui-mobile/src/pages/repair/req-list.vue b/eims-ui-mobile/src/pages/repair/req-list.vue
index 5759003..c93a9ea 100644
--- a/eims-ui-mobile/src/pages/repair/req-list.vue
+++ b/eims-ui-mobile/src/pages/repair/req-list.vue
@@ -52,7 +52,7 @@
           <view class="flex justify-between items-center">
             <view class="flex items-center menu-title-box">
               <view class="menu-indicator"></view>
-              <text class="ml-1 text-xs">{{ item.code }}</text>
+              <text class="ml-1 text-sm">{{ item.code }}</text>
             </view>
 
             <view>
@@ -114,7 +114,7 @@
                   <text>鎶ヤ慨浜�: {{ item.reqUserName }}</text>
                 </view>
               </view>
-              <view class="text-color-gray text-xs mt-1">
+              <view class="text-color-gray text-sm mt-1">
                 {{ item.location }} {{ item.madeIn }}
               </view>
             </view>
diff --git a/eims-ui-mobile/src/pages/repair/res-list.vue b/eims-ui-mobile/src/pages/repair/res-list.vue
index 087fb22..914a751 100644
--- a/eims-ui-mobile/src/pages/repair/res-list.vue
+++ b/eims-ui-mobile/src/pages/repair/res-list.vue
@@ -50,7 +50,7 @@
           <view class="flex justify-between items-center">
             <view class="flex items-center menu-title-box">
               <view class="menu-indicator"></view>
-              <text class="ml-1 text-xs">{{ item.resCode }}</text>
+              <text class="ml-1 text-sm">{{ item.resCode }}</text>
               <text class="text-color-gray ml-2 text-mini">鎺ュ崟:{{ item.createTime }}</text>
             </view>
 
diff --git a/eims-ui-mobile/src/pages/scan/index.vue b/eims-ui-mobile/src/pages/scan/index.vue
index 0d2ee20..b9ccad5 100644
--- a/eims-ui-mobile/src/pages/scan/index.vue
+++ b/eims-ui-mobile/src/pages/scan/index.vue
@@ -19,7 +19,7 @@
           <view class="flex justify-between items-baseline">
             <view class="flex items-center menu-title-box">
               <view class="menu-indicator"></view>
-              <text class="ml-1 text-xs">{{ model.assetNo }}</text>
+              <text class="ml-1 text-sm">{{ model.assetNo }}</text>
               <wd-tag v-if="model.status === '0'" class="ml-2" bg-color="cyan">璇曠敤</wd-tag>
               <wd-tag v-else-if="model.status === '1'" class="ml-2" type="success">浣跨敤</wd-tag>
               <wd-tag v-else-if="model.status === '2'" class="ml-2" type="danger">鍋滅敤</wd-tag>
@@ -41,7 +41,7 @@
               {{ model.equName }}
               <text class="text-color-gray ml-2 text-mini">{{ model.modelNo }}</text>
             </view>
-            <view class="text-color-gray text-xs mt-1">
+            <view class="text-color-gray text-sm mt-1">
               {{ model.location }} | {{ model.madeIn }}
             </view>
           </view>
diff --git a/eims-ui-mobile/src/pages/spare/spare-list.vue b/eims-ui-mobile/src/pages/spare/spare-list.vue
index 6d2fd19..56d23f4 100644
--- a/eims-ui-mobile/src/pages/spare/spare-list.vue
+++ b/eims-ui-mobile/src/pages/spare/spare-list.vue
@@ -22,7 +22,7 @@
           <view class="flex justify-between items-baseline">
             <view class="flex items-center menu-title-box">
               <view class="menu-indicator"></view>
-              <text class="ml-1 text-xs">{{ item.code }}</text>
+              <text class="ml-1 text-sm">{{ item.code }}</text>
             </view>
 
             <view>
@@ -38,10 +38,10 @@
               {{ item.name }}
               <text class="text-color-gray ml-2 text-mini">{{ item.modelNo }}</text>
             </view>
-            <view class="text-color-gray text-xs mt-1">
+            <view class="text-color-gray text-sm mt-1">
               搴撳瓨: {{ item.actualStock }} | 鍗曚环: {{ item.referPrice }}
             </view>
-            <view class="text-color-gray text-xs mt-1">
+            <view class="text-color-gray text-sm mt-1">
               渚涘簲鍟�: {{ item.supplier }}
             </view>
           </view>
diff --git a/eims-ui-mobile/src/service/maint.ts b/eims-ui-mobile/src/service/maint.ts
index 4ffeaa9..efa2c6d 100644
--- a/eims-ui-mobile/src/service/maint.ts
+++ b/eims-ui-mobile/src/service/maint.ts
@@ -48,3 +48,10 @@
 export const updateMaintOrder = (data: any) => {
   return http.put<void>('/eims/maintOrder', data)
 }
+
+/**
+ * 鎵归噺鏇存柊淇濆吇宸ュ崟
+ */
+export const updateMaintOrderBatch = (data: any) => {
+  return http.put<void>('/eims/maintOrder/editBatch', data)
+}
diff --git a/eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/DictConstants.java b/eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/DictConstants.java
index b659746..e1f3e62 100644
--- a/eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/DictConstants.java
+++ b/eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/DictConstants.java
@@ -219,6 +219,16 @@
         String CK = "2"; // 棰嗙敤鍑哄簱
     }
 
+    /**
+     * 淇濆吇鏂规硶
+     */
+    String MAINT_METHOD = "maint_method";
+    interface MAINT_METHOD_DETAIL {
+        String CHECK = "0";
+        String MAINT = "1";
+        String REPAIR = "2";
+    }
+
 
 
 
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsMaintOrderController.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsMaintOrderController.java
index b633ce4..fe4f775 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsMaintOrderController.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsMaintOrderController.java
@@ -11,8 +11,10 @@
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.constraints.*;
 import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.dromara.common.core.constant.DictConstants;
 import org.dromara.common.core.utils.DateUtils;
 import org.dromara.common.core.utils.StringUtils;
+import org.dromara.eims.domain.bo.MaintOrderBo;
 import org.dromara.eims.domain.vo.MaintOrdeGroupVo;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.validation.annotation.Validated;
@@ -79,7 +81,14 @@
         params.put("beginPlanTime",startOfMonth);
         params.put("endPlanTime",endOfMonth);
 
-        return eimsMaintOrderService.queryPageListCustom(bo, pageQuery);
+        TableDataInfo<EimsMaintOrderVo> tableDataInfo = eimsMaintOrderService.queryPageListCustom(bo, pageQuery);
+        tableDataInfo.getRows().forEach(e -> {
+            // 濡傛灉淇濆吇鏂规硶鏄淮淇紝鏌ヨ鍏宠仈鐨勫浠�
+            if (DictConstants.MAINT_METHOD_DETAIL.REPAIR.equals(e.getMaintFun())) {
+                e.setSpareParts(eimsMaintOrderService.querySpareParts(e.getMaintCode()));
+            }
+        });
+        return tableDataInfo;
     }
 
     /**
@@ -127,6 +136,14 @@
         return toAjax(eimsMaintOrderService.updateByBo(bo));
     }
 
+    @SaCheckPermission("eims:maintOrder:edit")
+    @Log(title = "淇濆吇宸ュ崟-鎵归噺淇敼", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping("editBatch")
+    public R<Void> editBatch(@Validated(EditGroup.class) @RequestBody MaintOrderBo bo) {
+        return toAjax(eimsMaintOrderService.updateBatchByBo(bo));
+    }
+
     /**
      * 鍒犻櫎淇濆吇宸ュ崟
      *
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsMaintOrder.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsMaintOrder.java
index af7cf77..8aae23b 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsMaintOrder.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsMaintOrder.java
@@ -113,5 +113,14 @@
      */
     private String remark;
 
+    /**
+     * 淇濆吇鏂瑰紡锛�0-妫�鏌ワ紝1-淇濆吇锛�2-缁翠慨锛�
+     */
+    private String maintFun;
+
+    /**
+     * 缁翠慨璇存槑
+     */
+    private String repairDesc;
 
 }
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsMaintOrderBo.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsMaintOrderBo.java
index 0ff70f0..625c6ee 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsMaintOrderBo.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsMaintOrderBo.java
@@ -9,7 +9,10 @@
 import lombok.EqualsAndHashCode;
 import jakarta.validation.constraints.*;
 import java.util.Date;
+import java.util.List;
+
 import com.fasterxml.jackson.annotation.JsonFormat;
+import org.dromara.eims.domain.EimsSpareInout;
 
 /**
  * 淇濆吇宸ュ崟涓氬姟瀵硅薄 eims_maint_order
@@ -114,9 +117,21 @@
      */
     private String remark;
 
+    /**
+     * 淇濆吇鏂瑰紡锛�0-妫�鏌ワ紝1-淇濆吇锛�2-缁翠慨锛�
+     */
+    private String maintFun;
+
+    /**
+     * 缁翠慨璇存槑
+     */
+    private String repairDesc;
 
     // 鍏宠仈琛ㄥ瓧娈�
     private String equName;
 
+    private String maintUserName;
+
+    private List<EimsSpareBo> spareParts;
 
 }
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsSpareBo.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsSpareBo.java
index f46d491..a996c44 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsSpareBo.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsSpareBo.java
@@ -33,7 +33,6 @@
     /**
      * 绫诲瀷
      */
-    @NotNull(message = "绫诲瀷涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
     private Long type;
 
     /**
@@ -45,7 +44,6 @@
     /**
      * 澶囦欢缂栫爜
      */
-    @NotBlank(message = "澶囦欢缂栫爜涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
     private String code;
 
     /**
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsSpareInoutdtBo.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsSpareInoutdtBo.java
index 5f62b5a..f68725b 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsSpareInoutdtBo.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsSpareInoutdtBo.java
@@ -21,7 +21,7 @@
 public class EimsSpareInoutdtBo extends BaseEntity {
 
     /**
-     * 
+     *
      */
     @NotNull(message = "涓嶈兘涓虹┖", groups = { EditGroup.class })
     private Long id;
@@ -29,7 +29,7 @@
     /**
      * 鍑哄簱鍗曟垨鍏ュ簱鍗昳d
      */
-    @NotNull(message = "鍑哄簱鍗曟垨鍏ュ簱鍗昳d涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+
     private Long inoutId;
 
     /**
@@ -41,13 +41,13 @@
     /**
      * 涔嬪墠搴撳瓨
      */
-    @NotNull(message = "涔嬪墠搴撳瓨涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+
     private Long beforeStock;
 
     /**
      * 瀹為檯搴撳瓨
      */
-    @NotNull(message = "瀹為檯搴撳瓨涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+
     private Long actualStock;
 
     /**
@@ -59,13 +59,13 @@
     /**
      * 鍗曚环
      */
-    @NotNull(message = "鍗曚环涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+
     private Long unitPrice;
 
     /**
      * 閲戦
      */
-    @NotNull(message = "閲戦涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+
     private Long amount;
 
     /**
@@ -74,4 +74,7 @@
     private String remark;
 
 
+    private String spareName;
+
+
 }
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/MaintOrderBo.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/MaintOrderBo.java
new file mode 100644
index 0000000..24e3fe9
--- /dev/null
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/MaintOrderBo.java
@@ -0,0 +1,10 @@
+package org.dromara.eims.domain.bo;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class MaintOrderBo {
+    private List<EimsMaintOrderBo> maintOrderList;
+}
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsMaintOrderVo.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsMaintOrderVo.java
index 4ba8284..1a43656 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsMaintOrderVo.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsMaintOrderVo.java
@@ -12,11 +12,12 @@
 import org.dromara.common.excel.convert.ExcelDictConvert;
 import io.github.linpeilie.annotations.AutoMapper;
 import lombok.Data;
+import org.dromara.eims.domain.bo.EimsSpareBo;
 
 import java.io.Serial;
 import java.io.Serializable;
 import java.util.Date;
-
+import java.util.List;
 
 
 /**
@@ -155,5 +156,17 @@
     @ExcelProperty(value = "澶囨敞")
     private String remark;
 
+    /**
+     * 淇濆吇鏂瑰紡锛�0-妫�鏌ワ紝1-淇濆吇锛�2-缁翠慨锛�
+     */
+    private String maintFun;
+
+    /**
+     * 缁翠慨璇存槑
+     */
+    private String repairDesc;
+
+    private List<EimsSpareVo> spareParts;
+
 
 }
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsSpareInoutdtVo.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsSpareInoutdtVo.java
index a4203cf..90d66ee 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsSpareInoutdtVo.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsSpareInoutdtVo.java
@@ -94,4 +94,6 @@
     private String unit;
 
 
+
+
 }
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsMaintOrderService.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsMaintOrderService.java
index 0496614..61b350c 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsMaintOrderService.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsMaintOrderService.java
@@ -1,9 +1,12 @@
 package org.dromara.eims.service;
 
+import org.dromara.eims.domain.bo.EimsSpareBo;
+import org.dromara.eims.domain.bo.MaintOrderBo;
 import org.dromara.eims.domain.vo.EimsMaintOrderVo;
 import org.dromara.eims.domain.bo.EimsMaintOrderBo;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.eims.domain.vo.EimsSpareVo;
 import org.dromara.eims.domain.vo.MaintOrdeGroupVo;
 
 import java.util.Collection;
@@ -59,6 +62,14 @@
     Boolean updateByBo(EimsMaintOrderBo bo);
 
     /**
+     * 鎵归噺淇敼淇濆吇宸ュ崟
+     *
+     * @param bo 淇濆吇宸ュ崟涓氬姟瀵硅薄
+     * @return 鎿嶄綔缁撴灉
+     */
+    boolean updateBatchByBo(MaintOrderBo bo);
+
+    /**
      * 鏍¢獙骞舵壒閲忓垹闄や繚鍏诲伐鍗曚俊鎭�
      *
      * @param ids     寰呭垹闄ょ殑涓婚敭闆嗗悎
@@ -83,4 +94,6 @@
      * @return
      */
     TableDataInfo<MaintOrdeGroupVo> queryPageGroupList(EimsMaintOrderBo bo, PageQuery pageQuery);
+
+    List<EimsSpareVo> querySpareParts(String id);
 }
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintOrderServiceImpl.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintOrderServiceImpl.java
index b01acb4..c85145d 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintOrderServiceImpl.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintOrderServiceImpl.java
@@ -20,17 +20,19 @@
 
 import org.dromara.common.satoken.utils.LoginHelper;
 import org.dromara.eims.domain.EimsMaintPlan;
-import org.dromara.eims.domain.bo.EimsMaintPlanBo;
-import org.dromara.eims.domain.vo.EimsEquVo;
-import org.dromara.eims.domain.vo.MaintOrdeGroupVo;
+import org.dromara.eims.domain.EimsSpareInout;
+import org.dromara.eims.domain.bo.EimsSpareBo;
+import org.dromara.eims.domain.bo.EimsSpareInoutBo;
+import org.dromara.eims.domain.bo.MaintOrderBo;
+import org.dromara.eims.domain.vo.*;
 import org.dromara.eims.mapper.EimsEquMapper;
 import org.dromara.eims.mapper.EimsMaintPlanMapper;
+import org.dromara.eims.service.IEimsSpareInoutService;
 import org.dromara.system.domain.SysDept;
 import org.dromara.system.domain.vo.SysDeptVo;
 import org.dromara.system.mapper.SysDeptMapper;
 import org.springframework.stereotype.Service;
 import org.dromara.eims.domain.bo.EimsMaintOrderBo;
-import org.dromara.eims.domain.vo.EimsMaintOrderVo;
 import org.dromara.eims.domain.EimsMaintOrder;
 import org.dromara.eims.mapper.EimsMaintOrderMapper;
 import org.dromara.eims.service.IEimsMaintOrderService;
@@ -52,6 +54,7 @@
     private final EimsMaintPlanMapper planMapper;
     private final SysDeptMapper sysDeptMapper;
     private final EimsEquMapper equMapper;
+    private final IEimsSpareInoutService spareInoutService;
 
     /**
      * 鏌ヨ淇濆吇宸ュ崟
@@ -293,6 +296,45 @@
     }
 
     /**
+     * 鎵归噺淇敼淇濆吇宸ュ崟
+     *
+     * @param bo 淇濆吇宸ュ崟
+     * @return 鏄惁淇敼鎴愬姛
+     */
+    @Override
+    public boolean updateBatchByBo(MaintOrderBo bo) {
+        LoginUser loginUser = LoginHelper.getLoginUser();
+        List<EimsMaintOrder> list = MapstructUtils.convert(bo.getMaintOrderList(),  EimsMaintOrder.class);
+        list.forEach(e -> {
+            e.setStatus(DictConstants.MAINT_ORDER_STATUS_DETAIL.DAIYANZHENG);
+            e.setEndTime(new Date());
+            e.setMaintUser(loginUser.getUserId());
+            e.setUpdateTime(new Date());
+        });
+        bo.getMaintOrderList().forEach(item -> {
+            // 鍒ゆ柇澶囦欢鍒楄〃鏄惁涓虹┖锛屼笉涓虹┖鍒欐柊澧炰竴涓浠跺嚭搴撳崟锛屽悓鏃跺鍔犲嚭搴撴槑缁�
+            if (item.getSpareParts() != null && item.getSpareParts().size() > 0) {
+                EimsSpareInoutBo spareInoutBo = new EimsSpareInoutBo();
+                // 鏍规嵁鏃ユ湡鐢熸垚鍗曞彿锛屾牸寮忎负CK+鏃ユ湡+娴佹按鍙�
+                spareInoutBo.setOrderCode("CK"+DateUtils.dateTimeNow("yyyyMMddHHmmss"));
+                spareInoutBo.setOrderTime(new Date());
+                spareInoutBo.setType(DictConstants.SPARE_INOUT_TYPE_DETAIL.CK);
+                spareInoutBo.setPartnerName(loginUser.getNickname());
+                spareInoutBo.setSpareList(item.getSpareParts());
+                spareInoutBo.setChargeUser(loginUser.getUserId());
+                spareInoutBo.setChargeDept(loginUser.getDeptId());
+                spareInoutBo.setAssociatedOrder(item.getMaintCode());
+                // 淇濆瓨杩涙暟鎹簱
+                Boolean b = spareInoutService.insertByBo(spareInoutBo);
+
+
+            }
+        });
+
+        return baseMapper.updateBatchById(list);
+    }
+
+    /**
      * 淇濆瓨鍓嶇殑鏁版嵁鏍¢獙
      */
     private void validEntityBeforeSave(EimsMaintOrder entity){
@@ -326,4 +368,20 @@
         }
         return String.join(StringUtils.SEPARATOR, list);
     }
+
+
+    @Override
+    public List<EimsSpareVo> querySpareParts(String code) {
+        // 鏌ヨ鍏宠仈鐨勫浠讹紝鍏崇郴濡備笅锛氬浠跺嚭鍏ュ簱鍗曠殑associatedOrder 鍏宠仈浼犲叆鐨刢ode,澶囦欢鍑哄叆搴撴槑缁嗛�氳繃鍑哄叆搴撳崟鐨刬d鍏宠仈锛屽浠跺悕绉伴�氳繃鍑哄叆搴撴槑缁嗕腑鐨剆pareId鍏宠仈
+
+        EimsSpareInoutBo bo = new EimsSpareInoutBo();
+        bo.setAssociatedOrder(code);
+        List<EimsSpareInoutVo> list = spareInoutService.queryList(bo);
+        if (!list.isEmpty()) {
+            // 鏌ヨ澶囦欢鏄庣粏鍜屽悕绉�
+            EimsSpareInoutVo eimsSpareInoutVo = spareInoutService.queryById(list.get(0).getId());
+            return eimsSpareInoutVo.getSpareList();
+        }
+        return List.of();
+    }
 }
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsSpareInoutServiceImpl.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsSpareInoutServiceImpl.java
index 334eb44..28f0446 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsSpareInoutServiceImpl.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsSpareInoutServiceImpl.java
@@ -136,58 +136,61 @@
         if (flag) {
             bo.setId(add.getId());
         }
-        //鍏ュ簱锛嬪簱瀛�  鍑哄簱-搴撳瓨  锛堥粯璁ゅ叆搴擄級
-        int  OperationType;
-
-         //鍑哄簱
-         if(bo.getType().equals(DictConstants.SPARE_INOUT_TYPE_DETAIL.CK)){
-            OperationType =  -1;
-        } else {
-             OperationType = 1;
-         }
+        // 鍏ュ簱锛嬪簱瀛�  鍑哄簱-搴撳瓨  锛堥粯璁ゅ叆搴擄級
+        int OperationType = bo.getType().equals(DictConstants.SPARE_INOUT_TYPE_DETAIL.CK) ? -1 : 1;
 
         List<EimsSpareBo> spareList = Optional.ofNullable(bo.getSpareList()).orElse(new ArrayList<>());
-        // 鎻掑叆鍑哄簱鏄庣粏
-        List<EimsSpareInoutdt> dtList = spareList.stream()
-            .map(eimsSpareBo -> {
-                EimsSpareInoutdt dt = new EimsSpareInoutdt();
-                dt.setInoutId(add.getId());
-                dt.setSpareId(eimsSpareBo.getId());
-                dt.setBeforeStock(eimsSpareBo.getActualStock());
-                // 娉ㄦ剰鍏ュ簱鍑哄簱
-                dt.setActualStock(eimsSpareBo.getActualStock() + (eimsSpareBo.getQuantity() * OperationType));
-                dt.setQuantity(eimsSpareBo.getQuantity());
 
-                // 璁剧疆鍗曚环鍜岄噾棰�
-                Optional.ofNullable(eimsSpareBo.getReferPrice()).ifPresent(referPrice -> {
-                    dt.setUnitPrice(referPrice);
-                    dt.setAmount(referPrice.multiply(BigDecimal.valueOf(eimsSpareBo.getQuantity())));
-                });
+        // 鍚堝苟涓ゆ寰幆涓轰竴娆″惊鐜�
+        List<EimsSpareInoutdt> dtList = new ArrayList<>();
+        List<EimsSpare> updateSpareList = new ArrayList<>();
 
-                return dt;
-            })
-            .toList();
+        for (EimsSpareBo eimsSpareBo : spareList) {
+            EimsSpare spare = spareMapper.selectById(eimsSpareBo.getId());
+            if (spare == null) {
+                spare = new EimsSpare();
+                spare.setName(eimsSpareBo.getName());
+                spare.setCode(eimsSpareBo.getCode());
+                spare.setActualStock(100L);
+                spareMapper.insert(spare);
+                eimsSpareBo.setId(spare.getId());
+            }
+
+            // 鎻掑叆鍑哄簱鏄庣粏
+            EimsSpareInoutdt dt = new EimsSpareInoutdt();
+            dt.setInoutId(add.getId());
+            dt.setSpareId(spare.getId());
+            dt.setBeforeStock(spare.getActualStock());
+            dt.setActualStock(spare.getActualStock() + (eimsSpareBo.getQuantity() * OperationType));
+            dt.setQuantity(eimsSpareBo.getQuantity());
+
+            // 璁剧疆鍗曚环鍜岄噾棰�
+            Optional.ofNullable(spare.getReferPrice()).ifPresent(referPrice -> {
+                dt.setUnitPrice(referPrice);
+                dt.setAmount(referPrice.multiply(BigDecimal.valueOf(eimsSpareBo.getQuantity())));
+            });
+            dtList.add(dt);
+
+            // 鏇存柊澶囦欢搴撳瓨
+            EimsSpare updatedSpare = new EimsSpare();
+            updatedSpare.setId(spare.getId());
+            updatedSpare.setActualStock(spare.getActualStock() + (eimsSpareBo.getQuantity() * OperationType));
+            Optional.ofNullable(spare.getReferPrice()).ifPresent(referPrice -> {
+                updatedSpare.setStockAmount(referPrice.multiply(BigDecimal.valueOf(updatedSpare.getActualStock())));
+            });
+            updateSpareList.add(updatedSpare);
+        }
 
         // 鎵归噺鎻掑叆鏁版嵁
         if (!dtList.isEmpty()) {
             inoutdtMapper.insertBatch(dtList);
         }
 
-        // 鏇存柊澶囦欢鐨勫簱瀛�
-        List<EimsSpare> updateSpareList = spareList.stream().map(spareBo -> {
-            EimsSpare spare = new EimsSpare();
-            spare.setId(spareBo.getId());
-            spare.setActualStock(spareBo.getActualStock() + (spareBo.getQuantity() * OperationType));
-            // 璁剧疆鍗曚环鍜岄噾棰�
-            Optional.ofNullable(spareBo.getReferPrice()).ifPresent(referPrice -> {
-                spare.setStockAmount(referPrice.multiply(BigDecimal.valueOf(spare.getActualStock())));
-            });
-            return spare;
-        }).toList();
-
+        // 鎵归噺鏇存柊澶囦欢搴撳瓨
         if (!updateSpareList.isEmpty()) {
             spareMapper.updateBatchById(updateSpareList);
         }
+
         return flag;
     }
 

--
Gitblit v1.9.3