From 14681dfe7052cb76eefcc0c17d0a0d708e1ac9dd Mon Sep 17 00:00:00 2001
From: zhuguifei <zhuguifei@zhuguifeideiMac.local>
Date: 星期二, 13 五月 2025 16:31:14 +0800
Subject: [PATCH] 完成移动端基本功能

---
 eims-ui-mobile/src/service/equ.d.ts                                                                  |   50 +-
 eims-ui-mobile/src/static/ico/ico5.png                                                               |    0 
 eims-ui-mobile/src/static/ico/ico14.png                                                              |    0 
 eims-ui-mobile/src/components/fg-tabbar/fg-tabbar.vue                                                |   22 
 eims-ui-mobile/src/pages/inspect/insp-st.vue                                                         |    5 
 eims-ui-mobile/src/static/ico/ico4.png                                                               |    0 
 eims-ui-mobile/src/static/ico/ico13.png                                                              |    0 
 eims-ui-mobile/src/pages/inspect/insp-record.vue                                                     |   64 ++
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsInspectStController.java    |    7 
 eims-ui-mobile/src/style/index.scss                                                                  |    2 
 eims-ui-mobile/src/pages/repair/repair-fb.vue                                                        |   72 ++
 eims-ui-mobile/src/service/repair.d.ts                                                               |    8 
 eims-ui-mobile/src/static/ico/ico17.png                                                              |    0 
 eims-ui-mobile/src/static/ico/ico3.png                                                               |    0 
 eims-ui-mobile/src/static/ico/ico20.png                                                              |    0 
 eims-ui-mobile/src/pages/spare/spare-list.vue                                                        |  156 ++++++
 eims-ui-mobile/src/service/equ.ts                                                                    |    8 
 eims-ui-mobile/src/static/ico/ico16.png                                                              |    0 
 eims-ui-mobile/src/pages/repair/res-list.vue                                                         |   52 +
 eims-ui-mobile/src/service/dict.ts                                                                   |    3 
 eims-ui-mobile/src/static/images/cgq.png                                                             |    0 
 eims-ui-mobile/src/pages/repair/repair-add.vue                                                       |   34 +
 eims-ui-mobile/src/pages/maint/maint-st.vue                                                          |   29 +
 eims-ui-mobile/src/pages/scan/index.vue                                                              |  215 +++++++++
 eims-ui-mobile/src/static/ico/ico15.png                                                              |    0 
 eims-ui-mobile/src/static/ico/ico2.png                                                               |    0 
 eims-ui-mobile/src/pages/equ/index.vue                                                               |   55 +
 eims-ui-mobile/src/service/repair.ts                                                                 |    9 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsEquController.java          |   12 
 eims-ui-mobile/src/static/ico/ico19.png                                                              |    0 
 eims-ui-mobile/src/service/inspect.ts                                                                |   18 
 eims-ui-mobile/src/static/ico/ico1.png                                                               |    0 
 eims-ui-mobile/src/pages/login/index.vue                                                             |    5 
 eims-ui-mobile/src/static/ico/ico10.png                                                              |    0 
 eims-ui-mobile/src/static/ico/ico18.png                                                              |    0 
 eims-ui-mobile/src/static/ico/ico9.png                                                               |    0 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsRepairResServiceImpl.java |    1 
 eims-ui-mobile/src/pages/spare/index.vue                                                             |   68 ++
 eims-ui-mobile/src/utils/RoleUtils.ts                                                                |   19 
 eims-ui-mobile/src/types/uni-pages.d.ts                                                              |    6 
 eims-ui-mobile/src/service/spare.ts                                                                  |    9 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsInspectStServiceImpl.java |   31 +
 eims-ui-mobile/src/static/ico/ico8.png                                                               |    0 
 eims-ui-mobile/src/pages/my/index.vue                                                                |   50 ++
 eims-ui-mobile/src/static/ico/ico12.png                                                              |    0 
 eims-ui-mobile/src/static/ico/ico6.png                                                               |    0 
 eims-ui-mobile/src/service/spare.d.ts                                                                |   90 +++
 eims-ui-mobile/src/pages.json                                                                        |   67 +-
 eims-ui-mobile/src/static/ico/ico7.png                                                               |    0 
 eims-ui-mobile/src/pages/equ/equ-list.vue                                                            |   86 ++
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsInspectStService.java         |    5 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsRepairResBo.java             |    1 
 eims-ui-mobile/src/pages/home/index.vue                                                              |   94 +++
 eims-ui-mobile/src/static/ico/ico11.png                                                              |    0 
 54 files changed, 1,172 insertions(+), 181 deletions(-)

diff --git a/eims-ui-mobile/src/components/fg-tabbar/fg-tabbar.vue b/eims-ui-mobile/src/components/fg-tabbar/fg-tabbar.vue
index 72675c5..c3370a9 100644
--- a/eims-ui-mobile/src/components/fg-tabbar/fg-tabbar.vue
+++ b/eims-ui-mobile/src/components/fg-tabbar/fg-tabbar.vue
@@ -62,13 +62,35 @@
   // scan鐗规畩澶勭悊
   if (index === 2) {
     tabbarStore.setCurIdx(tabbarStore.lastIdx)
+
+    // 妯℃嫙鎴愬姛
+    // uni.navigateTo({
+    //   url: `/pages/scan/index?result=GPA2024NL025`,
+    // })
+    // return false
+    // 妯℃嫙鎴愬姛
+
     // 鍙厑璁搁�氳繃鐩告満鎵爜
     uni.scanCode({
       onlyFromCamera: true,
       success: function (res) {
         console.log('鏉$爜绫诲瀷锛�' + res.scanType)
         console.log('鏉$爜鍐呭锛�' + res.result)
+        if (res?.scanType !== 'QR_CODE') {
+          uni.showToast({
+            title: '璇蜂娇鐢ㄤ簩缁寸爜杩涜鎵爜',
+            icon: 'none',
+          })
+          return false
+        }
+
+        // 浣跨敤split鏂规硶鎴彇璧勪骇缂栧彿
+        // const assetCode = res.result.split('璧勪骇缂栧彿锛�')[1].split(' ')[0]
+        uni.navigateTo({
+          url: `/pages/scan/index?result=${res.result}`,
+        })
       },
+      fail: function (res) {},
     })
   } else {
     tabbarStore.setCurIdx(index)
diff --git a/eims-ui-mobile/src/pages.json b/eims-ui-mobile/src/pages.json
index 6fb3e3e..6bc5e7e 100644
--- a/eims-ui-mobile/src/pages.json
+++ b/eims-ui-mobile/src/pages.json
@@ -78,7 +78,7 @@
       "layout": "tabbar",
       "needLogin": true,
       "style": {
-        "navigationBarTitleText": "鍏充簬"
+        "navigationBarTitleText": "璁惧"
       }
     },
     {
@@ -209,31 +209,6 @@
       }
     },
     {
-      "path": "pages/repair/feedback",
-      "type": "page",
-      "layout": "default",
-      "needLogin": true,
-      "style": {
-        "navigationBarTitleText": "缁翠慨璇勪环",
-        "app-plus": {
-          "titleNView": {
-            "buttons": [
-              {
-                "text": "鎻愪氦",
-                "fontSize": "14px",
-                "color": "#FFFFFF"
-              },
-              {
-                "text": "",
-                "fontSize": "14px",
-                "color": "#FFFFFF"
-              }
-            ]
-          }
-        }
-      }
-    },
-    {
       "path": "pages/repair/repair-add",
       "type": "page",
       "layout": "default",
@@ -250,6 +225,31 @@
               {
                 "text": "",
                 "fontSize": "24px",
+                "color": "#FFFFFF"
+              }
+            ]
+          }
+        }
+      }
+    },
+    {
+      "path": "pages/repair/repair-fb",
+      "type": "page",
+      "layout": "default",
+      "needLogin": true,
+      "style": {
+        "navigationBarTitleText": "缁翠慨璇勪环",
+        "app-plus": {
+          "titleNView": {
+            "buttons": [
+              {
+                "text": "鎻愪氦",
+                "fontSize": "14px",
+                "color": "#FFFFFF"
+              },
+              {
+                "text": "",
+                "fontSize": "14px",
                 "color": "#FFFFFF"
               }
             ]
@@ -333,12 +333,25 @@
       }
     },
     {
+      "path": "pages/scan/index",
+      "type": "page"
+    },
+    {
       "path": "pages/spare/index",
       "type": "page",
       "layout": "tabbar",
       "needLogin": true,
       "style": {
-        "navigationBarTitleText": "spare"
+        "navigationBarTitleText": "澶囦欢"
+      }
+    },
+    {
+      "path": "pages/spare/spare-list",
+      "type": "page",
+      "layout": "default",
+      "needLogin": true,
+      "style": {
+        "navigationBarTitleText": "澶囦欢鍒楄〃"
       }
     }
   ],
diff --git a/eims-ui-mobile/src/pages/equ/equ-list.vue b/eims-ui-mobile/src/pages/equ/equ-list.vue
index 693e6c2..ecd0923 100644
--- a/eims-ui-mobile/src/pages/equ/equ-list.vue
+++ b/eims-ui-mobile/src/pages/equ/equ-list.vue
@@ -11,8 +11,20 @@
   <z-paging ref="paging" v-model="dataList" @query="queryList" show-refresher-update-time>
     <template #top>
       <wd-drop-menu>
-        <wd-drop-menu-item v-model="equTypeId" :options="typeList" @change="handleEquType" />
-        <wd-drop-menu-item v-model="status" :options="statusList" @change="handleEquStatu" />
+        <wd-drop-menu-item
+          v-model="equTypeId"
+          label-key="dictLabel"
+          value-key="dictValue"
+          :options="typeList"
+          @change="handleEquType"
+        />
+        <wd-drop-menu-item
+          v-model="status"
+          label-key="dictLabel"
+          value-key="dictValue"
+          :options="statusList"
+          @change="handleEquStatu"
+        />
       </wd-drop-menu>
     </template>
 
@@ -23,15 +35,21 @@
             <view class="flex items-center menu-title-box">
               <view class="menu-indicator"></view>
               <text class="ml-1 text-xs">{{ 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>
+              <wd-tag v-else-if="item.status === '3'" class="ml-2" bg-color="pink">鎶ュ簾</wd-tag>
+              <wd-tag v-else-if="item.status === '4'" class="ml-2" type="warning">闂茬疆</wd-tag>
+              <wd-tag v-else-if="item.status === '5'" class="ml-2">鏂板</wd-tag>
             </view>
 
-            <view>
+            <view @click.stop="handleInfo">
               <text class="icon-color-base">璇︽儏</text>
               <wd-icon name="arrow-right" custom-class="icon-color-base"></wd-icon>
             </view>
           </view>
         </template>
-        <view class="flex h-[80rpx] items-center" @click.stop="itemClick(item)">
+        <view class="flex h-[90rpx] items-center" @click.stop="itemClick(item)">
           <image class="slot-img text-center" src="/static/images/camera.png" />
           <view class="flex-1">
             <view class="text-color-base">
@@ -43,11 +61,7 @@
             </view>
           </view>
           <view v-if="isSelectEqu">
-            <wd-button
-              size="small"
-              icon="edit-outline"
-              @click.stop="handleSelectEqu(item)"
-            >
+            <wd-button size="small" icon="edit-outline" @click.stop="handleSelectEqu(item)">
               閫変腑
             </wd-button>
           </view>
@@ -59,22 +73,24 @@
 
 <script setup lang="ts">
 import { onMounted, getCurrentInstance, ref } from 'vue'
-
 import { getEquList } from '@/service/equ'
+import { DICT_SYS_EQU_STATUS, getDictInfo } from '@/service/dict'
 
 // 璁惧绫诲瀷
-const equTypeId = ref<number>(0)
+const equTypeId = ref<number>(-1)
 // 璁惧鐘舵��
-const status = ref<number>(0)
+const status = ref<number>(-1)
 
 const isSelectEqu = ref(false)
 
-const typeList = ref<Record<string, any>[]>([{ label: '鎵�鏈夎澶�', value: 0 }])
-const statusList = ref<Record<string, any>[]>([{ label: '鎵�鏈夌姸鎬�', value: 0 }])
+const typeList = ref<Record<string, any>[]>([{ dictLabel: '璁惧绫诲瀷', dictValue: -1 }])
+const statusList = ref<Record<string, any>[]>([{ dictLabel: '鎵�鏈夌姸鎬�', dictValue: -1 }])
 function handleEquType({ value }) {
+  reloadData()
   console.log(value)
 }
 function handleEquStatu({ value }) {
+  reloadData()
   console.log(value)
 }
 
@@ -82,9 +98,19 @@
 const dataList = ref([])
 
 const queryList = (pageNum?: number, pageSize?: number) => {
-  // 杩欓噷鐨刾ageNo鍜宲ageSize浼氳嚜鍔ㄨ绠楀ソ锛岀洿鎺ヤ紶缁欐湇鍔″櫒鍗冲彲
-  // 杩欓噷鐨勮姹傚彧鏄紨绀猴紝璇锋浛鎹㈡垚鑷繁鐨勯」鐩殑缃戠粶璇锋眰锛屽苟鍦ㄧ綉缁滆姹傚洖璋冧腑閫氳繃paging.value.complete(璇锋眰鍥炴潵鐨勬暟缁�)灏嗚姹傜粨鏋滀紶缁檢-paging
-  getEquList({ pageNum, pageSize })
+  const parmams = {
+    pageNum,
+    pageSize,
+    equTypeId: equTypeId.value,
+    status: status.value,
+  }
+  if (equTypeId.value === -1) {
+    delete parmams.equTypeId
+  }
+  if (status.value === -1) {
+    delete parmams.status
+  }
+  getEquList(parmams)
     .then((res: any) => {
       // 璇峰嬁鍦ㄧ綉缁滆姹傚洖璋冧腑缁檇ataList璧嬪�硷紒锛佸彧闇�瑕佽皟鐢╟omplete灏卞彲浠ヤ簡
       paging.value.completeByTotal(res.rows, res.total)
@@ -101,10 +127,13 @@
  * 璁惧鏉$洰鐐瑰嚮浜嬩欢
  * @param item
  */
-function itemClick(item: any) {
-
+function itemClick(item: any) {}
+function handleInfo() {
+  uni.showToast({
+    title: '鍔熻兘寮�鍙戜腑',
+    icon: 'none',
+  })
 }
-
 /**
  * 鍏跺畠椤甸潰閫夋嫨璁惧
  * @param item
@@ -126,7 +155,6 @@
   })
 }
 
-
 const eventChannel = ref<any>()
 onMounted(() => {
   const instance: any = getCurrentInstance().proxy
@@ -136,6 +164,19 @@
     isSelectEqu.value = true
     console.log('OnSelectEqu', data)
   })
+})
+
+function reloadData() {
+  paging.value.reload()
+}
+
+async function initData() {
+  const sList: any = await getDictInfo(DICT_SYS_EQU_STATUS)
+  statusList.value.push(...sList)
+}
+
+onLoad(() => {
+  initData()
 })
 </script>
 
@@ -163,4 +204,7 @@
 :deep(.wd-card__footer) {
   padding: 10rpx !important;
 }
+:deep(.wd-card__title-content) {
+  padding: 16rpx !important;
+}
 </style>
diff --git a/eims-ui-mobile/src/pages/equ/index.vue b/eims-ui-mobile/src/pages/equ/index.vue
index bda1221..5377967 100644
--- a/eims-ui-mobile/src/pages/equ/index.vue
+++ b/eims-ui-mobile/src/pages/equ/index.vue
@@ -3,31 +3,58 @@
   layout: 'tabbar',
   needLogin: true,
   style: {
-    navigationBarTitleText: '鍏充簬',
+    navigationBarTitleText: '璁惧',
   },
 }
 </route>
 
 <template>
-  <view
-    class="bg-white overflow-hidden pt-2 px-4"
-    :style="{ marginTop: safeAreaInsets?.top + 'px' }"
-  >
-    <view class="text-center text-3xl mt-8">
-      楦藉弸浠ソ锛屾垜鏄�
-      <text class="text-red-500">鑿查附</text>
-    </view>
-    <RequestComp />
-    <UploadComp />
+  <view class="bg-base" :style="{ marginTop: safeAreaInsets?.top + 'px' }">
+    <wd-cell-group border>
+      <wd-cell
+        title="璁惧鍒楄〃"
+        is-link
+        to="/pages/equ/equ-list"
+        icon="list"
+        custom-icon-class="icon-color-base"
+      />
+      <wd-cell
+        title="閲嶇偣璁惧"
+        is-link
+        icon="keywords"
+        custom-icon-class="icon-color-base"
+        @click="handleInfo"
+      />
+      <wd-cell
+        title="娣诲姞璁惧"
+        is-link
+        icon="add"
+        custom-icon-class="icon-color-base"
+        @click="handleInfo"
+      />
+    </wd-cell-group>
+    <wd-cell-group border class="mt-2">
+      <wd-cell
+        title="璁惧鐩樼偣"
+        is-link
+        icon="filter"
+        custom-icon-class="icon-color-base"
+        @click="handleInfo"
+      />
+    </wd-cell-group>
   </view>
 </template>
 
 <script lang="ts" setup>
-import RequestComp from './components/request.vue'
-import UploadComp from './components/upload.vue'
-
 // 鑾峰彇灞忓箷杈圭晫鍒板畨鍏ㄥ尯鍩熻窛绂�
 const { safeAreaInsets } = uni.getSystemInfoSync()
+
+function handleInfo() {
+  uni.showToast({
+    title: '鍔熻兘寮�鍙戜腑',
+    icon: 'none',
+  })
+}
 </script>
 
 <style lang="scss" scoped>
diff --git a/eims-ui-mobile/src/pages/home/index.vue b/eims-ui-mobile/src/pages/home/index.vue
index 0d22564..b04275b 100644
--- a/eims-ui-mobile/src/pages/home/index.vue
+++ b/eims-ui-mobile/src/pages/home/index.vue
@@ -17,13 +17,13 @@
     <view class="bg-white h-[80rpx] px-2 flex items-center justify-between">
       <view class="flex items-center" @click="handleUserInfo">
         <wd-icon name="user" size="40rpx" class="icon-color-base"></wd-icon>
-        <text class="ml-1 text-color-base">寮犱笁</text>
+        <text class="ml-1 text-color-base">{{ realName }}</text>
       </view>
 
       <view class="flex items-center">
-        <wd-icon name="notification" size="40rpx" class="icon-color-base mr-3"></wd-icon>
-        <wd-icon name="tips" size="40rpx" class="icon-color-base mr-3"></wd-icon>
-        <wd-icon name="app" size="40rpx" class="icon-color-base"></wd-icon>
+        <wd-icon name="notification" size="40rpx" class="icon-color-base mr-3" @click="handleInfo"></wd-icon>
+        <wd-icon name="tips" size="40rpx" class="icon-color-base mr-3" @click="handleInfo"></wd-icon>
+        <wd-icon name="app" size="40rpx" class="icon-color-base" @click="handleInfo"></wd-icon>
       </view>
     </view>
 
@@ -65,20 +65,20 @@
         </view>
       </wd-card>
     </view>
-
     <view class="bg-white mt-2">
       <wd-card type="rectangle">
         <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-xs">蹇嵎鎿嶄綔</view>
           </view>
         </template>
         <wd-grid :column="4">
           <wd-grid-item
             use-slot
             class="flex justify-center items-center"
-            v-for="(item, index) in equMenu"
+            v-for="(item, index) in commonMenu"
+            :key="item.id"
             @click.stop="goItemPage(item.path)"
           >
             <image class="slot-img text-center" :src="item.icon" />
@@ -87,13 +87,12 @@
         </wd-grid>
       </wd-card>
     </view>
-
     <view class="bg-white mt-2">
       <wd-card type="rectangle">
         <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-xs">璁惧绠$悊</view>
           </view>
         </template>
         <wd-grid :column="4">
@@ -110,15 +109,41 @@
         </wd-grid>
       </wd-card>
     </view>
+    <view class="bg-white mt-2">
+      <wd-card type="rectangle">
+        <template #title>
+          <view class="flex items-center menu-title-box">
+            <view class="menu-indicator"></view>
+            <view class="ml-1 text-xs">鍙拌处鐩稿叧</view>
+          </view>
+        </template>
+        <wd-grid :column="4">
+          <wd-grid-item
+            use-slot
+            class="flex justify-center items-center"
+            v-for="(item, index) in equMenu"
+            @click.stop="goItemPage(item.path)"
+          >
+            <image class="slot-img text-center" :src="item.icon" />
+            <text>{{ item.name }}</text>
+          </wd-grid-item>
+        </wd-grid>
+      </wd-card>
+    </view>
+
+
   </view>
 </template>
 
 <script lang="ts" setup>
 import { getAllMenusApi } from '@/service/menu'
-
+import { useUserStore } from '@/store'
+import { tabbarStore } from '@/components/fg-tabbar/tabbar'
 defineOptions({
   name: 'Home',
 })
+
+const userStore = useUserStore()
 
 // 鑾峰彇灞忓箷杈圭晫鍒板畨鍏ㄥ尯鍩熻窛绂�
 const { safeAreaInsets } = uni.getSystemInfoSync()
@@ -126,6 +151,12 @@
 const getAllMenus = async () => {
   const menuList = await getAllMenusApi()
   console.error(menuList)
+}
+function handleInfo() {
+  uni.showToast({
+    title: '鍔熻兘寮�鍙戜腑',
+    icon: 'none',
+  })
 }
 
 const goItemPage = (path: string) => {
@@ -139,17 +170,27 @@
   // getAllMenus()
 })
 
+
+const commonMenu = reactive([
+  {
+    id: 1,
+    name: '鏁呴殰鎶ヤ慨',
+    icon: '/static/ico/ico20.png',
+    path: 'pages/repair/repair-add',
+  }
+])
+
 const equMenu = reactive([
   {
     id: 1,
-    name: '璁惧绠$悊',
-    icon: '/static/menu/menu1.png',
+    name: '璁惧鍒楄〃',
+    icon: '/static/ico/ico15.png',
     path: 'pages/equ/equ-list',
   },
   {
     id: 2,
-    name: '宸ュ叿绠$悊',
-    icon: '/static/menu/menu1.png',
+    name: '宸ュ叿鍒楄〃',
+    icon: '/static/ico/ico16.png',
     path: 'pages/fixture/fixture-list',
   },
 ])
@@ -164,32 +205,41 @@
   {
     id: 1,
     name: '鐐规姹囨��',
-    icon: '/static/menu/menu4.png',
+    icon: '/static/ico/ico17.png',
     path: 'pages/inspect/insp-st',
   },
   {
     id: 2,
     name: '淇濆吇姹囨��',
-    icon: '/static/menu/menu3.png',
+    icon: '/static/ico/ico11.png',
     path: 'pages/maint/maint-st',
   },
   {
     id: 3,
-    name: '璁惧鎶ヤ慨',
-    icon: '/static/menu/menu1.png',
+    name: '鎶ヤ慨鍒楄〃',
+    icon: '/static/ico/ico18.png',
     path: 'pages/repair/req-list',
   },
   {
     id: 4,
-    name: '璁惧缁翠慨',
-    icon: '/static/menu/menu2.png',
+    name: '缁翠慨鍒楄〃',
+    icon: '/static/ico/ico19.png',
     path: 'pages/repair/res-list',
   },
 ])
 
 function handleUserInfo() {
-  getAllMenus()
+  goToMy()
 }
+
+function goToMy() {
+  tabbarStore.setCurIdx(4)
+  uni.switchTab({
+    url: '/pages/my/index',
+  })
+}
+
+const realName = computed(() => userStore?.userInfo?.realName)
 </script>
 
 <style lang="scss" scoped>
@@ -229,7 +279,7 @@
   height: 72rpx;
   margin-left: 4rpx;
 }
-:deep(.wd-grid-item__content){
+:deep(.wd-grid-item__content) {
   align-items: center;
 }
 </style>
diff --git a/eims-ui-mobile/src/pages/inspect/insp-record.vue b/eims-ui-mobile/src/pages/inspect/insp-record.vue
index 7b64703..e17e7bf 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 @@
 }
 </route>
 <template>
-  <z-paging ref="paging" v-model="dataList" @query="queryList" show-refresher-update-time>
+  <z-paging ref="paging" v-model="dataList" :auto="false" @query="queryList" show-refresher-update-time>
     <template #top>
       <wd-card type="rectangle">
         <template #title>
@@ -66,9 +66,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-xs mt-2 flex">鍒涘缓鏃堕棿: {{ inspSt.createTime }}</view>
           </view>
         </view>
       </wd-card>
@@ -118,7 +116,13 @@
           </view>
         </wd-collapse-item>
       </wd-collapse>
-      <view class="w-full h-[1rpx] bg-base"></view>
+      <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-[1px] bg-base"></view>
       <wd-textarea
         label="鐗硅浜嬮」"
         label-width="200rpx"
@@ -137,7 +141,12 @@
 <script setup lang="ts">
 import { ref } from 'vue'
 import { useUserStore, useAccessStore, useSystemConfigStore } from '@/store'
-import { getInspStRecordList, updateInspectSt, updateInspRecordBatch } from '@/service/inspect'
+import {
+  getInspStRecordList,
+  getInspSt,
+  updateInspectSt,
+  updateInspRecordBatch,
+} from '@/service/inspect'
 import { useToast, useMessage } from 'wot-design-uni'
 import type { CollapseInstance } from 'wot-design-uni/components/wd-collapse/types'
 const message = useMessage()
@@ -145,6 +154,7 @@
 
 const collapseRef = ref<CollapseInstance>()
 const isAllExpanded = ref(false)
+const viewMode = ref<string>('Day')
 
 // 瀹氫箟鎺ュ彛
 interface QueryParams {
@@ -255,7 +265,7 @@
   updateInspRecordBatch(params)
     .then((res: any) => {
       updateInspSt(resolve)
-      toast.success("鎿嶄綔鎴愬姛")
+      toast.success('鎿嶄綔鎴愬姛')
     })
     .catch((res) => {
       console.error(res)
@@ -291,16 +301,40 @@
   { deep: true },
 )
 onLoad((options) => {
-  inspSt.id = options.id
-  inspSt.inspCode = options.inspCode
-  inspSt.equName = options.equName
-  inspSt.assetNo = options.assetNo
-  inspSt.planTimeStr = options.planTimeStr
-  inspSt.createTime = options.createTime
-  inspSt.specialNote = options?.specialNote
-  inspSt.inspUser = userStore?.userInfo?.userId
+  // inspSt.id = options.id
+  // inspSt.inspCode = options.inspCode
+  // inspSt.equName = options.equName
+  // inspSt.assetNo = options.assetNo
+  // inspSt.planTimeStr = options.planTimeStr
+  // inspSt.createTime = options.createTime
+  // inspSt.specialNote = options?.specialNote
+  // inspSt.inspUser = userStore?.userInfo?.userId
+  viewMode.value = options.viewMode
+  initData(options.id)
 })
 
+function initData(id: any) {
+  getInspSt(id)
+    .then((res: any) => {
+      if (res?.id) {
+        const inspCode = `${res?.equId}_${res?.planTime}_${viewMode.value}`
+        inspSt.inspCode = inspCode
+        Object.assign(inspSt, res)
+        reloadData()
+      } else {
+        uni.showToast({
+          title: '鏁版嵁鏌ヨ澶辫触锛岃鑱旂郴绠$悊鍛�',
+          icon: 'none',
+        })
+      }
+    })
+    .catch((res) => {
+      console.error(res)
+    })
+}
+function reloadData() {
+  paging.value.reload()
+}
 const dataCount = computed(() => dataList.value.length)
 const checkCount = computed(() => dataList.value.filter((item) => item.status === '1').length)
 const normalNum = computed(() => dataList.value.filter((item) => item.inspResult === '1').length)
diff --git a/eims-ui-mobile/src/pages/inspect/insp-st.vue b/eims-ui-mobile/src/pages/inspect/insp-st.vue
index 44d5ef2..ee381b4 100644
--- a/eims-ui-mobile/src/pages/inspect/insp-st.vue
+++ b/eims-ui-mobile/src/pages/inspect/insp-st.vue
@@ -112,9 +112,10 @@
 }
 
 function itemClick(item) {
-  const inspCode = `${item.equId}_${item.planTime}_${viewMode.value}`
+  // const inspCode = `${item.equId}_${item.planTime}_${viewMode.value}`
   uni.navigateTo({
-    url: `/pages/inspect/insp-record?id=${item.id}&createTime=${item.createTime}&inspCode=${inspCode}&specialNote=${item.specialNote ?? ''}&equName=${item.equName ?? ''}&assetNo=${item.assetNo ?? ''}&planTimeStr=${item.planTimeStr ?? ''}`,
+    // url: `/pages/inspect/insp-record?id=${item.id}&createTime=${item.createTime}&inspCode=${inspCode}&specialNote=${item.specialNote ?? ''}&equName=${item.equName ?? ''}&assetNo=${item.assetNo ?? ''}&planTimeStr=${item.planTimeStr ?? ''}`,
+    url: `/pages/inspect/insp-record?id=${item.id}&viewMode=${viewMode.value}`,
   })
 }
 
diff --git a/eims-ui-mobile/src/pages/login/index.vue b/eims-ui-mobile/src/pages/login/index.vue
index c02558c..5c56190 100644
--- a/eims-ui-mobile/src/pages/login/index.vue
+++ b/eims-ui-mobile/src/pages/login/index.vue
@@ -54,11 +54,10 @@
 import { useToast } from 'wot-design-uni'
 import { login, getUserInfo } from '@/service/login'
 import type { UserInfo } from '@/service/login.d'
-import { TestEnum } from '@/typings'
+import { tabbarStore } from '@/components/fg-tabbar/tabbar'
 const userStore = useUserStore()
 const accessStore = useAccessStore()
 const configStore = useSystemConfigStore()
-const { success: showSuccess } = useToast()
 
 const model = reactive<{
   username: string
@@ -127,6 +126,8 @@
   userStore.setUserInfo(userInfo)
   const { query } = currRoute()
   uni.switchTab({ url: '/pages/home/index' })
+  tabbarStore?.setCurIdx(0)
+  tabbarStore?.setLastIdx(0)
 }
 </script>
 
diff --git a/eims-ui-mobile/src/pages/maint/maint-st.vue b/eims-ui-mobile/src/pages/maint/maint-st.vue
index f7ce57c..5abc99f 100644
--- a/eims-ui-mobile/src/pages/maint/maint-st.vue
+++ b/eims-ui-mobile/src/pages/maint/maint-st.vue
@@ -52,7 +52,7 @@
             </view>
             <view class="text-color-gray text-xs mt-2 flex">
               <text>鐘舵�侊細</text>
-              <template v-if="item.status=== '1'">
+              <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>
@@ -61,9 +61,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-xs mt-2 flex">鍒涘缓鏃堕棿: {{ item.createTime }}</view>
           </view>
           <wd-button size="small" icon="edit-outline" @click.stop="itemClick(item)">鏄庣粏</wd-button>
         </view>
@@ -76,13 +74,29 @@
 import { ref } from 'vue'
 import { getMaintStList } from '@/service/maint'
 
+/**
+ * 鍏朵粬椤甸潰浼犺繃鏉ョ殑鏁版嵁
+ * assetNo: 璧勪骇缂栧彿
+ * from: 鏄惁鏄壂鐮佽繘鏉ョ殑锛屽鏋滄槸鎵爜杩涙潵锛屽彧鑳芥煡璇㈠浐瀹氳澶囩殑鏁版嵁
+ */
+interface PageParams {
+  assetNo?: string
+  from?: string
+}
+
 interface QueryParams {
   pageNum: number
   pageSize: number
+  assetNo?: string
   equName?: string
   status?: string
 }
 
+// 椤甸潰鍙傛暟锛屼笂涓〉闈紶閫掕繃鏉ョ殑鍙傛暟
+const option = reactive<PageParams>({
+  assetNo: '',
+  from: '',
+})
 const status = ref<string>('-1')
 const equName = ref<string>('-1')
 
@@ -117,6 +131,10 @@
   if (status.value === '-1') {
     delete params.status
   }
+  // 濡傛灉鏄粠鎵爜椤甸潰杩囨潵锛屽彧鑳芥煡璇㈠浐瀹氳澶囩殑鏁版嵁
+  if (option?.from === 'scan') {
+    params.assetNo = option.assetNo
+  }
 
   getMaintStList(params)
     .then((res: any) => {
@@ -140,7 +158,8 @@
 function reloadData() {
   paging.value.reload()
 }
-onLoad(() => {
+onLoad((options) => {
+  Object.assign(option, options)
   uni.$on('maint-st-refresh', reloadData)
 })
 onUnload(() => {
diff --git a/eims-ui-mobile/src/pages/my/index.vue b/eims-ui-mobile/src/pages/my/index.vue
index 2c2a4ca..8a5bd92 100644
--- a/eims-ui-mobile/src/pages/my/index.vue
+++ b/eims-ui-mobile/src/pages/my/index.vue
@@ -9,11 +9,57 @@
 </route>
 
 <template>
-  <view class="pt-40 text-xl text-center text-green-500">鎴戠殑椤甸潰</view>
+  <view class="bg-base">
+    <wd-cell-group border>
+      <wd-cell title="鐧诲綍鐢ㄦ埛" :value="realName" icon="user" is-link />
+      <wd-cell title="瑙掕壊" :value="loginRoleName()" icon="bags" is-link />
+      <wd-cell title="浜哄憳绠$悊" icon="usergroup" is-link @click="handleInfo" />
+    </wd-cell-group>
+    <wd-cell-group border class="mt-2">
+      <wd-cell title="閫�鍑虹櫥褰�" icon="login" is-link @click="handleLogout" />
+    </wd-cell-group>
+  </view>
 </template>
 
 <script lang="ts" setup>
-//
+import { useUserStore, useAccessStore, useSystemConfigStore } from '@/store'
+import { loginRoleName } from '@/utils/RoleUtils'
+import { useMessage } from 'wot-design-uni'
+const message = useMessage()
+const userStore = useUserStore()
+const accessStore = useAccessStore()
+const configStore = useSystemConfigStore()
+const realName = computed(() => userStore?.userInfo?.realName)
+
+function handleLogout() {
+  if (!isLogined()) {
+    uni.navigateTo({ url: '/pages/login/index' })
+    return false
+  }
+  message
+    .confirm({
+      msg: '鎻愮ず',
+      title: '纭畾閫�鍑虹櫥褰曞悧锛�',
+    })
+    .then(() => {
+      userStore.clearUserInfo()
+      accessStore.clearAccessInfo()
+      configStore.clearConfigInfo()
+      uni.navigateTo({ url: '/pages/login/index' })
+    })
+    .catch(() => {})
+}
+
+const isLogined = () => {
+  return accessStore.isLogined
+}
+
+function handleInfo() {
+  uni.showToast({
+    title: '鍔熻兘寮�鍙戜腑',
+    icon: 'none',
+  })
+}
 </script>
 
 <style lang="scss" scoped>
diff --git a/eims-ui-mobile/src/pages/repair/repair-add.vue b/eims-ui-mobile/src/pages/repair/repair-add.vue
index 12a7620..05718e4 100644
--- a/eims-ui-mobile/src/pages/repair/repair-add.vue
+++ b/eims-ui-mobile/src/pages/repair/repair-add.vue
@@ -35,6 +35,7 @@
           label="鏁呴殰绫诲瀷"
           v-model="model.reqType"
           @confirm="handleConfirmReqType"
+          :disabled="reqTypeDis"
         />
       </wd-cell-group>
 
@@ -181,6 +182,25 @@
 const toast = useToast()
 const userStore = useUserStore()
 
+/**
+ * 鍏朵粬椤甸潰浼犺繃鏉ョ殑鏁版嵁
+ * assetNo: 璧勪骇缂栧彿
+ * from: 鏄惁鏄壂鐮佽繘鏉ョ殑锛屽鏋滄槸鎵爜杩涙潵锛屽彧鑳芥煡璇㈠浐瀹氳澶囩殑鏁版嵁
+ */
+interface PageParams {
+  equId?: string
+  equName?: string
+  from?: string
+}
+
+// 椤甸潰鍙傛暟锛屼笂涓〉闈紶閫掕繃鏉ョ殑鍙傛暟
+const option = reactive<PageParams>({
+  equId: '',
+  equName: '',
+  from: '',
+})
+
+const reqTypeDis = ref(false)
 // 鎶ヤ慨绫诲瀷
 const reqList = ref<any>([])
 // 鏁呴殰绫诲埆
@@ -228,6 +248,9 @@
  * 閫夋嫨璁惧
  */
 function handleSelectEqu() {
+  if(reqTypeDis.value){
+    return false
+  }
   uni.navigateTo({
     url: '/pages/equ/equ-list',
     events: {
@@ -294,7 +317,7 @@
 
 function handleAddRepairReq() {
   // 琛ュ厖蹇呰瀛楁
-  model.status = '0'
+  model.status = '0' // 鎶ヤ慨鍚庨粯璁ょ姸鎬佷负寰呮帴鍗�
   model.reqTime = formatDate(new Date())
   model.reqDept = userStore?.userInfo?.deptId
   model.reqUser = userStore?.userInfo?.userId
@@ -397,6 +420,15 @@
 })
 
 onLoad((options) => {
+  Object.assign(option, options)
+  // 鎵爜椤甸潰杩涘叆鐨勪竴浜涘垵濮嬪寲
+  if (option.from === 'scan') {
+    model.equId = option?.equId
+    model.equName = option?.equName
+    // 璁剧疆绫诲瀷涓鸿澶囩被鍨�
+    model.reqType = '1'
+    reqTypeDis.value = true
+  }
   initData()
 })
 </script>
diff --git a/eims-ui-mobile/src/pages/repair/feedback.vue b/eims-ui-mobile/src/pages/repair/repair-fb.vue
similarity index 75%
rename from eims-ui-mobile/src/pages/repair/feedback.vue
rename to eims-ui-mobile/src/pages/repair/repair-fb.vue
index 497247c..ae8aaea 100644
--- a/eims-ui-mobile/src/pages/repair/feedback.vue
+++ b/eims-ui-mobile/src/pages/repair/repair-fb.vue
@@ -33,7 +33,7 @@
         </view>
       </template>
       <wd-steps :active="repairRecordList.length" vertical class="px-4">
-        <wd-step v-for="(item,index) in repairRecordList"   >
+        <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>
@@ -46,7 +46,6 @@
             </view>
           </template>
         </wd-step>
-
       </wd-steps>
     </wd-card>
 
@@ -96,10 +95,18 @@
   </view>
 </template>
 <script setup lang="ts">
-import { getRepairRes, getRepairFb, getRepairRecordList } from '@/service/repair'
+import {
+  getRepairRes,
+  getRepairFb,
+  getRepairRecordList,
+  addRepairFb,
+  updateRepairFb,
+} from '@/service/repair'
 import { reactive } from 'vue'
+import { isLeader, isOperatorOrRepair } from '@/utils/RoleUtils'
 import { RepairResVO, RepairFbVO, RepairRecordVO } from '@/service/repair.d'
 
+const isUpdate = ref(false)
 const repairRes = reactive<RepairResVO>({
   id: '',
   resCode: '',
@@ -118,6 +125,7 @@
 
 const repairFb = reactive<RepairFbVO>({
   id: '',
+  resId: '',
   resCode: '',
   fbResult: '',
   suggestions: '',
@@ -134,8 +142,8 @@
 }
 
 function getRepairRecord() {
-  if(!repairRes.id){
-     return false
+  if (!repairRes.id) {
+    return false
   }
   const params = {
     resId: repairRes.id,
@@ -143,7 +151,7 @@
   getRepairRecordList(params)
     .then((res: any) => {
       console.error(res)
-      if(res?.code === 200){
+      if (res?.code === 200) {
         repairRecordList.value = res?.rows?.sort((a, b) => {
           if (a.handleTime < b.handleTime) {
             return -1
@@ -157,7 +165,6 @@
     })
     .catch((res) => {})
 }
-
 
 function initRepairRes(id: any) {
   getRepairRes(id)
@@ -174,15 +181,62 @@
 function getFeedBack(id: any) {
   getRepairFb(id)
     .then((res: any) => {
+      // 鍦ㄨ繖閲岃繘琛屾暟鎹被鍨嬭浆鎹�
+      res.repairSatisfaction = Number(res?.repairSatisfaction)
+      res.repairTimeliness = Number(res?.repairTimeliness)
+      res.serviceAttitude = Number(res?.serviceAttitude)
+      res.repairSs = Number(res?.repairSs)
       Object.assign(repairFb, res)
     })
     .catch((res) => {})
 }
-async function initData(options: any) {
-  initRepairRes(options.id)
 
+function handleRepairFb() {
+  if(isOperatorOrRepair()){
+    uni.showToast({
+      title: '鏃犳潈闄�,璇风櫥褰曠鐞嗗憳璐﹀彿鎿嶄綔',
+      icon: 'none',
+    })
+    return false
+  }
+  const id = repairFb.id
+  isUpdate.value = !!id
+  if (isUpdate.value) {
+    updateRepairFb(repairFb)
+      .then((res: any) => {
+        if (res?.code === 200) {
+          uni.showToast({
+            title: '淇敼鎴愬姛',
+            icon: 'none',
+          })
+        }
+      })
+      .catch((res) => {})
+  } else {
+    addRepairFb(repairFb)
+      .then((res: any) => {
+        if (res?.code === 200) {
+          uni.showToast({
+            title: '璇勪环鎴愬姛',
+            icon: 'none',
+          })
+        }
+      })
+      .catch((res) => {})
+  }
 }
 
+async function initData(options: any) {
+  repairFb.resId = options.id
+  initRepairRes(options.id)
+}
+
+onNavigationBarButtonTap((e) => {
+  if (e.index === 0) {
+    handleRepairFb()
+  }
+})
+
 onLoad((options) => {
   initData(options)
 })
diff --git a/eims-ui-mobile/src/pages/repair/res-list.vue b/eims-ui-mobile/src/pages/repair/res-list.vue
index 096aedd..02b2570 100644
--- a/eims-ui-mobile/src/pages/repair/res-list.vue
+++ b/eims-ui-mobile/src/pages/repair/res-list.vue
@@ -140,9 +140,8 @@
                   size="small"
                   icon="edit-outline"
                   @click.stop="goToFeedBack(item)"
-                  v-if="item.fbId === null"
                 >
-                  鍐欒瘎浠�
+                  鏌ョ湅璇勪环
                 </wd-button>
               </view>
             </template>
@@ -176,9 +175,8 @@
                   size="small"
                   icon="edit-outline"
                   @click.stop="goToFeedBack(item)"
-                  v-if="item.fbId === null"
                 >
-                  鍐欒瘎浠�
+                  {{ item.fbId == null ? '鍐欒瘎浠�' : '鏌ョ湅璇勪环' }}
                 </wd-button>
               </view>
             </template>
@@ -201,15 +199,32 @@
 
 const message = useMessage()
 const toast = useToast()
+
+/**
+ * 鍏朵粬椤甸潰浼犺繃鏉ョ殑鏁版嵁
+ * assetNo: 璧勪骇缂栧彿
+ * from: 鏄惁鏄壂鐮佽繘鏉ョ殑锛屽鏋滄槸鎵爜杩涙潵锛屽彧鑳芥煡璇㈠浐瀹氳澶囩殑鏁版嵁
+ */
+interface PageParams {
+  assetNo?: string
+  from?: string
+}
+
+// 椤甸潰鍙傛暟锛屼笂涓〉闈紶閫掕繃鏉ョ殑鍙傛暟
+const option = reactive<PageParams>({
+  assetNo: '',
+  from: '',
+})
+
 // 缁翠慨鍗曠被鍨�
-const resTypeId = ref<number>(0)
+const resTypeId = ref<number>(-1)
 // 缁翠慨鍗曞鐞嗙姸鎬�
-const status = ref<number>(0)
+const status = ref<number>(-1)
 
 const isSelectRes = ref(false)
 
-const resTypeList = ref<any>([{ dictLabel: '鎵�鏈夌被鍨�', dictValue: 0 }])
-const statusList = ref<any>([{ dictLabel: '鎵�鏈夌姸鎬�', dictValue: 0 }])
+const resTypeList = ref<any>([{ dictLabel: '鎵�鏈夌被鍨�', dictValue: -1 }])
+const statusList = ref<any>([{ dictLabel: '鎵�鏈夌姸鎬�', dictValue: -1 }])
 function handleResType({ value }) {
   reloadData()
 }
@@ -221,19 +236,23 @@
 const dataList = ref([])
 
 const queryList = (pageNum?: number, pageSize?: number) => {
-  const parmams = {
+  const params: any = {
     pageNum,
     pageSize,
     reqType: resTypeId.value,
     status: status.value,
   }
-  if (resTypeId.value === 0) {
-    delete parmams.reqType
+  if (resTypeId.value === -1) {
+    delete params.reqType
   }
-  if (status.value === 0) {
-    delete parmams.status
+  if (status.value === -1) {
+    delete params.status
   }
-  getRepairResList(parmams)
+  // 濡傛灉鏄粠鎵爜椤甸潰杩囨潵锛屽彧鑳芥煡璇㈠浐瀹氳澶囩殑鏁版嵁
+  if (option?.from === 'scan') {
+    params.assetNo = option.assetNo
+  }
+  getRepairResList(params)
     .then((res: any) => {
       paging.value.completeByTotal(res.rows, res.total)
     })
@@ -308,7 +327,7 @@
 
 function goToFeedBack(item) {
   uni.navigateTo({
-    url: `/pages/repair/feedback?id=${item.id}`,
+    url: `/pages/repair/repair-fb?id=${item.id}`,
   })
 }
 
@@ -373,7 +392,8 @@
   const sList: any = await getDictInfo(DICT_REPAIR_RES_STATUS)
   statusList.value.push(...sList)
 }
-onLoad(() => {
+onLoad((options) => {
+  Object.assign(option, options)
   initData()
   uni.$on('res-list-refresh', reloadData)
 })
diff --git a/eims-ui-mobile/src/pages/scan/index.vue b/eims-ui-mobile/src/pages/scan/index.vue
new file mode 100644
index 0000000..82d4d73
--- /dev/null
+++ b/eims-ui-mobile/src/pages/scan/index.vue
@@ -0,0 +1,215 @@
+<template>
+  <view class="bg-base">
+    <view v-if="exist">
+      <wd-cell>
+        <template #title>
+          <text class="text-color-gray">璁惧鍥剧墖</text>
+        </template>
+      </wd-cell>
+      <view class="h-[1px] bg-base"></view>
+      <image class="equ-img" src="/static/images/cgq.png" />
+
+      <wd-cell class="mt-2">
+        <template #title>
+          <text class="text-color-gray">璁惧淇℃伅</text>
+        </template>
+      </wd-cell>
+      <wd-card type="rectangle">
+        <template #title>
+          <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>
+              <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>
+              <wd-tag v-else-if="model.status === '3'" class="ml-2" bg-color="pink">鎶ュ簾</wd-tag>
+              <wd-tag v-else-if="model.status === '4'" class="ml-2" type="warning">闂茬疆</wd-tag>
+              <wd-tag v-else-if="model.status === '5'" class="ml-2">鏂板</wd-tag>
+            </view>
+
+            <view @click="handleInfo">
+              <text class="icon-color-base">璇︽儏</text>
+              <wd-icon name="arrow-right" custom-class="icon-color-base"></wd-icon>
+            </view>
+          </view>
+        </template>
+        <view class="flex h-[90rpx] items-center">
+          <image class="slot-img text-center" src="/static/images/camera.png" />
+          <view class="flex-1">
+            <view class="text-color-base">
+              {{ model.equName }}
+              <text class="text-color-gray ml-2 text-mini">{{ model.modelNo }}</text>
+            </view>
+            <view class="text-color-gray text-xs mt-1">
+              {{ model.location }} | {{ model.madeIn }}
+            </view>
+          </view>
+        </view>
+      </wd-card>
+
+      <view class="mt-2">
+        <wd-cell class="mt-2">
+          <template #title>
+            <text class="text-color-gray">鎿嶄綔</text>
+          </template>
+        </wd-cell>
+        <view class="h-[1px] bg-base"></view>
+        <view class="bg-white flex justify-around py-4">
+          <wd-button icon="edit-outline" @click.stop="handleInsp">鐐规</wd-button>
+          <wd-button icon="laptop" @click.stop="handMaint">淇濆吇</wd-button>
+          <wd-button icon="tools" @click.stop="showActions">缁翠慨</wd-button>
+        </view>
+      </view>
+
+      <wd-action-sheet
+        v-model="show"
+        :actions="actions"
+        @close="close"
+        @select="select"
+        cancel-text="鍙栨秷"
+      />
+    </view>
+    <view v-else>
+      <wd-status-tip image="search" tip="褰撳墠鎼滅储鏃犵粨鏋�" />
+      <view class="w-full flex justify-center">{{ scanResult }}</view>
+    </view>
+  </view>
+</template>
+<script setup lang="ts">
+import dayjs from 'dayjs'
+import type { EquVO } from '@/service/equ.d'
+import { useToast, useMessage } from 'wot-design-uni'
+import { getEquByAssetNo } from '@/service/equ'
+import { getInspStByStId } from '@/service/inspect'
+const message = useMessage()
+const toast = useToast()
+const model = reactive<EquVO>({})
+
+const scanResult = ref<string>('')
+const show = ref<boolean>(false)
+const exist = ref<boolean>(false)
+const actions = ref([
+  {
+    name: '鏂板鎶ヤ慨',
+  },
+  {
+    name: '鍘荤淮淇�',
+  },
+])
+
+function initData(assetNo: any) {
+  getEquByAssetNo(assetNo)
+    .then((res: any) => {
+      if (res.data) {
+        Object.assign(model, res)
+      } else {
+        toast.error('鏈煡璇㈠埌璇ヨ祫浜х紪鍙风浉鍏虫暟鎹紒')
+      }
+    })
+    .catch((res) => {
+      console.error(res)
+      toast.error(res?.data?.msg || '璇锋眰澶辫触')
+    })
+}
+function handleInfo() {
+  uni.showToast({
+    title: '鍔熻兘寮�鍙戜腑',
+    icon: 'none',
+  })
+}
+
+function handleInsp() {
+  // 鎷兼帴鍑簊t_id (鐢辨棩鏈�+璁惧id缁勬垚)
+  const today = dayjs().format('YYYYMMDD')
+  const stId = `${today}_${model.equId}`
+
+  getInspStByStId(stId).then((res: any) => {
+    if (res?.id) {
+      uni.navigateTo({
+        url: `/pages/inspect/insp-record?id=${res?.id}&viewMode=Day`,
+      })
+    } else {
+      uni.showToast({
+        title: '璁惧浠婂ぉ娌℃湁鐐规璁板綍锛岃鑱旂郴绠$悊鍛橈紒',
+        icon: 'none',
+      })
+    }
+  })
+}
+function handMaint() {
+  if (!model?.assetNo) {
+    uni.showToast({
+      title: '鏈煡璇㈠埌璁惧锛岃鑱旂郴绠$悊鍛橈紒',
+      icon: 'none',
+    })
+    return false
+  }
+  uni.navigateTo({
+    url: `/pages/maint/maint-st?assetNo=${model?.assetNo}&from=scan`,
+  })
+}
+
+function showActions() {
+  show.value = true
+}
+
+function close() {
+  show.value = false
+}
+function select({ item, index }) {
+  console.error(model?.equId)
+  console.error(!model?.equId)
+  if (!model?.equId) {
+    uni.showToast({
+      title: '鏈煡璇㈠埌璁惧锛岃鑱旂郴绠$悊鍛橈紒',
+      icon: 'none',
+    })
+    return false
+  }
+  switch (index) {
+    case 0:
+      uni.navigateTo({
+        url: `/pages/repair/repair-add?equId=${model?.equId}&equName=${model?.equName}&from=scan`,
+      })
+      break
+    case 1:
+      uni.navigateTo({
+        url: `/pages/repair/res-list?assetNo=${model?.assetNo}&from=scan`,
+      })
+      break
+  }
+}
+onLoad((options) => {
+  scanResult.value = options?.result
+  initData(options?.result)
+})
+</script>
+
+<style scoped lang="scss">
+.equ-img {
+  width: 100%;
+  height: 300rpx;
+}
+.slot-img {
+  width: 72rpx;
+  height: 72rpx;
+  margin-right: 24rpx;
+}
+.text-mini {
+  font-size: 22rpx;
+}
+
+.menu-indicator {
+  width: 6rpx;
+  height: 22rpx;
+  border-radius: 10rpx;
+  background-color: $uni-color-primary;
+}
+:deep(.wd-card__footer) {
+  padding: 10rpx !important;
+}
+:deep(.wd-card__title-content) {
+  padding: 16rpx 0 !important;
+}
+</style>
diff --git a/eims-ui-mobile/src/pages/spare/index.vue b/eims-ui-mobile/src/pages/spare/index.vue
index c1f8574..0dcec78 100644
--- a/eims-ui-mobile/src/pages/spare/index.vue
+++ b/eims-ui-mobile/src/pages/spare/index.vue
@@ -3,19 +3,79 @@
   layout: 'tabbar',
   needLogin: true,
   style: {
-    navigationBarTitleText: 'spare',
+    navigationBarTitleText: '澶囦欢',
   },
 }
 </route>
 
 <template>
-  <view class="pt-40 text-xl text-center text-green-500">澶囦欢</view>
+  <view class="bg-base">
+    <view class="flex px-4 py-3 bg-white">
+      <div class="box-border h-[150rpx] flex-1 bg-tag rounded-sm mr-2 px-2 py-2">
+        <wd-count-to
+          :startVal="0"
+          :endVal="0"
+          :fontSize="24"
+          color="text-color-base"
+        ></wd-count-to>
+        <view class="text-color-gray mt-1">搴撳瓨涓嶈冻</view>
+      </div>
+      <div class="box-border h-[150rpx] flex-1 bg-tag rounded-sm mr-2 px-2 py-2">
+        <wd-count-to
+          :startVal="0"
+          :endVal="0"
+          :fontSize="24"
+          color="text-color-base"
+        ></wd-count-to>
+        <view class="text-color-gray mt-1">搴撳瓨杩囬噺</view>
+      </div>
+    </view>
+    <wd-cell-group border>
+      <wd-cell
+        title="澶囦欢鍒楄〃"
+        is-link
+        to="/pages/spare/spare-list"
+        icon="list"
+        custom-icon-class="icon-color-base"
+      />
+      <wd-cell
+        title="娣诲姞澶囦欢"
+        is-link
+        icon="add"
+        custom-icon-class="icon-color-base"
+        @click="handleInfo"
+      />
+    </wd-cell-group>
+    <wd-cell-group border class="mt-2">
+      <wd-cell
+        title="娣诲姞鍑哄簱"
+        is-link
+        icon="add-circle"
+        custom-icon-class="icon-color-base"
+        @click="handleInfo"
+      />
+      <wd-cell
+        title="娣诲姞鍏ュ簱"
+        is-link
+        icon="add-circle"
+        custom-icon-class="icon-color-base"
+        @click="handleInfo"
+      />
+    </wd-cell-group>
+  </view>
 </template>
 
 <script lang="ts" setup>
-//
+function handleInfo() {
+  uni.showToast({
+    title: '鍔熻兘寮�鍙戜腑',
+    icon: 'none',
+  })
+}
 </script>
 
 <style lang="scss" scoped>
-//
+.bg-tag {
+  background: #f5f8ff;
+}
 </style>
diff --git a/eims-ui-mobile/src/pages/spare/spare-list.vue b/eims-ui-mobile/src/pages/spare/spare-list.vue
new file mode 100644
index 0000000..6d2fd19
--- /dev/null
+++ b/eims-ui-mobile/src/pages/spare/spare-list.vue
@@ -0,0 +1,156 @@
+<route lang="json5" type="page">
+{
+  layout: 'default',
+  needLogin: true,
+  style: {
+    navigationBarTitleText: '澶囦欢鍒楄〃',
+  },
+}
+</route>
+<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="typeId" :options="typeList" @change="handleSpareType" />
+        <wd-drop-menu-item v-model="status" :options="statusList" @change="handleSpareStatu" />
+      </wd-drop-menu>
+    </template>
+
+    <view class="bg-base">
+      <wd-card type="rectangle" v-for="(item, index) in dataList" :key="item.id">
+        <template #title>
+          <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>
+            </view>
+
+            <view>
+              <text class="icon-color-base">璇︽儏</text>
+              <wd-icon name="arrow-right" custom-class="icon-color-base"></wd-icon>
+            </view>
+          </view>
+        </template>
+        <view class="flex h-[80rpx] items-center" @click.stop="itemClick(item)">
+          <image class="slot-img text-center" src="/static/images/camera.png" />
+          <view class="flex-1">
+            <view class="text-color-base">
+              {{ item.name }}
+              <text class="text-color-gray ml-2 text-mini">{{ item.modelNo }}</text>
+            </view>
+            <view class="text-color-gray text-xs mt-1">
+              搴撳瓨: {{ item.actualStock }} | 鍗曚环: {{ item.referPrice }}
+            </view>
+            <view class="text-color-gray text-xs mt-1">
+              渚涘簲鍟�: {{ item.supplier }}
+            </view>
+          </view>
+          <view v-if="isSelectSpare">
+            <wd-button size="small" icon="edit-outline" @click.stop="handleSelectSpare(item)">
+              閫変腑
+            </wd-button>
+          </view>
+        </view>
+      </wd-card>
+    </view>
+  </z-paging>
+</template>
+
+<script setup lang="ts">
+import { onMounted, getCurrentInstance, ref } from 'vue'
+
+import { getSpareList } from '@/service/spare'
+
+// 澶囦欢绫诲瀷
+const typeId = ref<number>(-1)
+// 澶囦欢鐘舵��
+const status = ref<number>(-1)
+
+const isSelectSpare = ref(false)
+
+const typeList = ref<Record<string, any>[]>([{ label: '澶囦欢绫诲瀷', value: -1 }])
+const statusList = ref<Record<string, any>[]>([{ label: '鎵�鏈夌姸鎬�', value: -1 }])
+function handleSpareType({ value }) {
+  console.log(value)
+}
+function handleSpareStatu({ value }) {
+  console.log(value)
+}
+
+const paging = ref(null)
+const dataList = ref([])
+
+const queryList = (pageNum?: number, pageSize?: number) => {
+  getSpareList({ pageNum, pageSize })
+    .then((res: any) => {
+      paging.value.completeByTotal(res.rows, res.total)
+    })
+    .catch((res) => {
+      paging.value.complete(false)
+    })
+}
+
+/**
+ * 澶囦欢鏉$洰鐐瑰嚮浜嬩欢
+ * @param item
+ */
+function itemClick(item: any) {}
+
+/**
+ * 鍏跺畠椤甸潰閫夋嫨澶囦欢
+ * @param item
+ */
+function handleSelectSpare(item: any) {
+  if (isSelectSpare.value) {
+    emitSelectSpare(item)
+    uni.navigateBack()
+  }
+}
+
+/**
+ * 閫夋嫨澶囦欢鍥炶皟
+ * @param spare
+ */
+function emitSelectSpare(spare: any) {
+  eventChannel.value.emit('selectSpare', {
+    data: spare,
+  })
+}
+
+const eventChannel = ref<any>()
+onMounted(() => {
+  const instance: any = getCurrentInstance().proxy
+  const event = instance.getOpenerEventChannel()
+  eventChannel.value = event
+  event.on('OnSelectSpare', function (data) {
+    isSelectSpare.value = true
+    console.log('OnSelectSpare', data)
+  })
+})
+</script>
+
+<style scoped lang="scss">
+.menu-title-box {
+  height: 30rpx;
+  line-height: 30rpx;
+}
+
+.slot-img {
+  width: 72rpx;
+  height: 72rpx;
+  margin-right: 24rpx;
+}
+.text-mini {
+  font-size: 22rpx;
+}
+
+.menu-indicator {
+  width: 6rpx;
+  height: 22rpx;
+  border-radius: 10rpx;
+  background-color: $uni-color-primary;
+}
+:deep(.wd-card__footer) {
+  padding: 10rpx !important;
+}
+</style>
diff --git a/eims-ui-mobile/src/service/dict.ts b/eims-ui-mobile/src/service/dict.ts
index d59eecf..067da1b 100644
--- a/eims-ui-mobile/src/service/dict.ts
+++ b/eims-ui-mobile/src/service/dict.ts
@@ -8,6 +8,9 @@
 export const DICT_REPAIR_REQ_STATUS = 'repair_req_status'
 export const DICT_REPAIR_RES_STATUS = 'repair_res_status'
 
+export const DICT_SYS_EQU_STATUS = 'sys_equ_status'
+
 export const getDictInfo = (dictType: string) => {
   return http.get<DictData[]>(`/system/dict/data/type/${dictType}`)
 }
+
diff --git a/eims-ui-mobile/src/service/equ.d.ts b/eims-ui-mobile/src/service/equ.d.ts
index 7807f19..632cbf2 100644
--- a/eims-ui-mobile/src/service/equ.d.ts
+++ b/eims-ui-mobile/src/service/equ.d.ts
@@ -2,123 +2,123 @@
   /**
    *
    */
-  equId: number | string;
+  equId?: number | string;
 
   /**
    * 璧勪骇缂栧彿
    */
-  assetNo: string;
+  assetNo?: string;
   /**
    * 璁惧缂栫爜
    */
-  equCode: string;
+  equCode?: string;
 
   /**
    * 璁惧鍚嶇О
 
    */
-  equName: string;
+  equName?: string;
   /**
    * 璁惧绫诲瀷
 
    */
-  equTypeName: string;
+  equTypeName?: string;
 
   /**
    * 鍨嬪彿
    */
-  modelNo: string;
+  modelNo?: string;
 
   /**
    * 鍒堕�犲晢
    */
-  madeIn: string;
+  madeIn?: string;
 
   /**
    * 棰濆害鍔熺巼
    */
-  ratedPower: number;
+  ratedPower?: number;
 
   /**
    * 閾墝淇℃伅
    */
-  plateInfo: string;
+  plateInfo?: string;
 
   /**
    * 閲囪喘鏃ユ湡
    */
-  purchaseDate: string;
+  purchaseDate?: string;
 
   /**
    * 鐘舵��
    */
-  status: string;
+  status?: string;
 
   /**
    * 鎵�鍦ㄥ満鎵�
    */
-  location: string;
+  location?: string;
 
   /**
    * 浣跨敤閮ㄩ棬锛堝叧鑱攊d锛�
    */
-  deptUsed: number;
+  deptUsed?: number;
   /**
    * 浣跨敤閮ㄩ棬鍚嶇О
    */
-  deptName: number;
+  deptName?: number;
 
   /**
    * 璐d换浜�(鍏宠仈id)
    */
-  respPerson: number;
+  respPerson?: number;
   /**
    * 璐d换浜�
    */
-  respPersonName: string;
+  respPersonName?: string;
 
   /**
    * 鑱旂郴鐢佃瘽
    */
-  contactPhone: string;
+  contactPhone?: string;
 
   /**
    * 姝e紡浣跨敤鏃ユ湡
    */
-  deployDate: string;
+  deployDate?: string;
 
   /**
    * 寮�濮嬭瘯鐢ㄦ棩鏈�
    */
-  trialDate: string;
+  trialDate?: string;
 
   /**
    * 璁″垝楠屾敹鏃ユ湡
    */
-  planAcceptDate: string;
+  planAcceptDate?: string;
 
   /**
    * 瀹為檯楠屾敹鏃ユ湡
    */
-  actualAcceptDate: string;
+  actualAcceptDate?: string;
 
   /**
    * 瀵煎叆鐘舵�侊紙瀛楀吀锛�
    */
-  importStatus: number;
+  importStatus?: number;
 
   /**
    * 鐩樼偣鏍囧織
    */
-  inventoryFlag: number;
+  inventoryFlag?: number;
 
   /**
    * 涓婃鐩樼偣鏃ユ湡
    */
-  inventoryDate: string;
+  inventoryDate?: string;
 
   /**
    * 浣跨敤骞撮檺
    */
-  serviceLife: number;
+  serviceLife?: number;
 }
diff --git a/eims-ui-mobile/src/service/equ.ts b/eims-ui-mobile/src/service/equ.ts
index 429e521..e510589 100644
--- a/eims-ui-mobile/src/service/equ.ts
+++ b/eims-ui-mobile/src/service/equ.ts
@@ -7,3 +7,11 @@
 export const getEquList = (params: any) => {
   return http.get<EquVO[]>('/eims/equ/list', params)
 }
+
+/**
+ * 鏍规嵁璧勪骇缂栧彿鏌ヨ璁惧
+ * @param id
+ */
+export const getEquByAssetNo = (assetNo: string) => {
+  return http.get<EquVO>(`/eims/equ/info/${assetNo}`)
+}
diff --git a/eims-ui-mobile/src/service/inspect.ts b/eims-ui-mobile/src/service/inspect.ts
index adf4fa6..3aad82e 100644
--- a/eims-ui-mobile/src/service/inspect.ts
+++ b/eims-ui-mobile/src/service/inspect.ts
@@ -1,6 +1,6 @@
 import { http } from '@/utils/http'
 import type { InspectStVO, InspectRecordVO } from './inspect.d'
-
+type ID = number | string
 /**
  * 鐐规姹囨�诲垪琛�
  */
@@ -9,6 +9,22 @@
 }
 
 /**
+ * 鏍规嵁id鏌ヨ姹囨��
+ * @param id
+ */
+export const getInspSt = (id: ID) => {
+  return http.get<InspectStVO>(`/eims/inspectSt/${id}`)
+}
+
+/**
+ * 鏍规嵁id鏌ヨ姹囨��
+ * @param stId
+ */
+export const getInspStByStId = (stId: string) => {
+  return http.get<InspectStVO>(`/eims/inspectSt/info/${stId}`)
+}
+
+/**
  * 鐐规姹囨�诲垪琛ㄤ笅鐐规璁板綍鍒楄〃
  */
 export const getInspStRecordList = (params: any) => {
diff --git a/eims-ui-mobile/src/service/repair.d.ts b/eims-ui-mobile/src/service/repair.d.ts
index cf677cc..5fca882 100644
--- a/eims-ui-mobile/src/service/repair.d.ts
+++ b/eims-ui-mobile/src/service/repair.d.ts
@@ -206,22 +206,22 @@
   /**
    * 缁翠慨鍙婃椂鎬�(瀛楀吀)
    */
-  repairTimeliness?: number | string;
+  repairTimeliness?: number ;
 
   /**
    * 鏈嶅姟鎬佸害
    */
-  serviceAttitude?: number | string;
+  serviceAttitude?: number ;
 
   /**
    * 缁翠慨鐜板満6s
    */
-  repairSs?: number | string;
+  repairSs?: number ;
 
   /**
    * 缁翠慨婊℃剰搴�
    */
-  repairSatisfaction?: number | string;
+  repairSatisfaction?: number ;
 
   /**
    * 鎰忚鎴栧缓璁�
diff --git a/eims-ui-mobile/src/service/repair.ts b/eims-ui-mobile/src/service/repair.ts
index 1d2e7c3..4b5e2b6 100644
--- a/eims-ui-mobile/src/service/repair.ts
+++ b/eims-ui-mobile/src/service/repair.ts
@@ -72,8 +72,13 @@
   return http.post<void>('/eims/repairFb', data)
 }
 
-
-
+/**
+ * 缂栬緫缁翠慨璇勪环
+ * @param data
+ */
+export const updateRepairFb = (data: any) => {
+  return http.put<void>('/eims/repairFb', data)
+}
 
 /**
  * 缁翠慨璁板綍鍒楄〃
diff --git a/eims-ui-mobile/src/service/spare.d.ts b/eims-ui-mobile/src/service/spare.d.ts
new file mode 100644
index 0000000..8a6071b
--- /dev/null
+++ b/eims-ui-mobile/src/service/spare.d.ts
@@ -0,0 +1,90 @@
+export interface SpareVO {
+  /**
+   *
+   */
+  id: number | string;
+
+  /**
+   * 绫诲瀷
+   */
+  type: number;
+
+  /**
+   * 澶囦欢鍚嶇О
+   */
+  name: string;
+
+  /**
+   * 澶囦欢缂栫爜
+   */
+  code: string;
+
+  /**
+   * 澶囦欢鍥剧墖
+   */
+  img: number;
+
+  /**
+   * 澶囦欢鍥剧墖Url
+   */
+  imgUrl: string;
+  /**
+   * 鍨嬪彿
+   */
+  modelNo: string;
+
+  /**
+   * 鍒堕�犲晢
+   */
+  madeIn: string;
+
+  /**
+   * 渚涘簲鍟�
+   */
+  supplier: string;
+
+  /**
+   * 璁¢噺鍗曚綅锛堝瓧鍏革級
+   */
+  unit: string;
+
+  /**
+   * 鍙傝�冧环鏍�
+   */
+  referPrice: number;
+
+  /**
+   * 搴撳瓨涓婇檺
+   */
+  upperStock: number;
+
+  /**
+   * 搴撳瓨涓嬮檺
+   */
+  lowerStock: number;
+
+  /**
+   * 瀹為檯搴撳瓨
+   */
+  actualStock: number;
+
+  /**
+   * 搴撳瓨閲戦
+   */
+  stockAmount: number;
+
+  /**
+   * 鏇存崲鍛ㄦ湡
+   */
+  replaceCycle: number;
+
+  /**
+   * 鏇存崲鍛ㄦ湡鍗曚綅锛堝瓧鍏革級
+   */
+  cycleUnit: string;
+
+  /**
+   * 澶囨敞
+   */
+  remark: string;
+}
diff --git a/eims-ui-mobile/src/service/spare.ts b/eims-ui-mobile/src/service/spare.ts
new file mode 100644
index 0000000..2f6fbc0
--- /dev/null
+++ b/eims-ui-mobile/src/service/spare.ts
@@ -0,0 +1,9 @@
+import { http } from '@/utils/http'
+import type { SpareVO } from './spare.d'
+
+/**
+ * 澶囦欢鍒楄〃
+ */
+export const getSpareList = (params: any) => {
+  return http.get<SpareVO[]>('/eims/spare/list', params)
+}
diff --git a/eims-ui-mobile/src/static/ico/ico1.png b/eims-ui-mobile/src/static/ico/ico1.png
new file mode 100644
index 0000000..fb59de7
--- /dev/null
+++ b/eims-ui-mobile/src/static/ico/ico1.png
Binary files differ
diff --git a/eims-ui-mobile/src/static/ico/ico10.png b/eims-ui-mobile/src/static/ico/ico10.png
new file mode 100644
index 0000000..b596a11
--- /dev/null
+++ b/eims-ui-mobile/src/static/ico/ico10.png
Binary files differ
diff --git a/eims-ui-mobile/src/static/ico/ico11.png b/eims-ui-mobile/src/static/ico/ico11.png
new file mode 100644
index 0000000..af42e14
--- /dev/null
+++ b/eims-ui-mobile/src/static/ico/ico11.png
Binary files differ
diff --git a/eims-ui-mobile/src/static/ico/ico12.png b/eims-ui-mobile/src/static/ico/ico12.png
new file mode 100644
index 0000000..6bc7efc
--- /dev/null
+++ b/eims-ui-mobile/src/static/ico/ico12.png
Binary files differ
diff --git a/eims-ui-mobile/src/static/ico/ico13.png b/eims-ui-mobile/src/static/ico/ico13.png
new file mode 100644
index 0000000..6f3ea82
--- /dev/null
+++ b/eims-ui-mobile/src/static/ico/ico13.png
Binary files differ
diff --git a/eims-ui-mobile/src/static/ico/ico14.png b/eims-ui-mobile/src/static/ico/ico14.png
new file mode 100644
index 0000000..0aa451c
--- /dev/null
+++ b/eims-ui-mobile/src/static/ico/ico14.png
Binary files differ
diff --git a/eims-ui-mobile/src/static/ico/ico15.png b/eims-ui-mobile/src/static/ico/ico15.png
new file mode 100644
index 0000000..acaad0b
--- /dev/null
+++ b/eims-ui-mobile/src/static/ico/ico15.png
Binary files differ
diff --git a/eims-ui-mobile/src/static/ico/ico16.png b/eims-ui-mobile/src/static/ico/ico16.png
new file mode 100644
index 0000000..e6e2833
--- /dev/null
+++ b/eims-ui-mobile/src/static/ico/ico16.png
Binary files differ
diff --git a/eims-ui-mobile/src/static/ico/ico17.png b/eims-ui-mobile/src/static/ico/ico17.png
new file mode 100644
index 0000000..52181c9
--- /dev/null
+++ b/eims-ui-mobile/src/static/ico/ico17.png
Binary files differ
diff --git a/eims-ui-mobile/src/static/ico/ico18.png b/eims-ui-mobile/src/static/ico/ico18.png
new file mode 100644
index 0000000..3d95287
--- /dev/null
+++ b/eims-ui-mobile/src/static/ico/ico18.png
Binary files differ
diff --git a/eims-ui-mobile/src/static/ico/ico19.png b/eims-ui-mobile/src/static/ico/ico19.png
new file mode 100644
index 0000000..e56749f
--- /dev/null
+++ b/eims-ui-mobile/src/static/ico/ico19.png
Binary files differ
diff --git a/eims-ui-mobile/src/static/ico/ico2.png b/eims-ui-mobile/src/static/ico/ico2.png
new file mode 100644
index 0000000..2e5bab5
--- /dev/null
+++ b/eims-ui-mobile/src/static/ico/ico2.png
Binary files differ
diff --git a/eims-ui-mobile/src/static/ico/ico20.png b/eims-ui-mobile/src/static/ico/ico20.png
new file mode 100644
index 0000000..6e869ba
--- /dev/null
+++ b/eims-ui-mobile/src/static/ico/ico20.png
Binary files differ
diff --git a/eims-ui-mobile/src/static/ico/ico3.png b/eims-ui-mobile/src/static/ico/ico3.png
new file mode 100644
index 0000000..debd368
--- /dev/null
+++ b/eims-ui-mobile/src/static/ico/ico3.png
Binary files differ
diff --git a/eims-ui-mobile/src/static/ico/ico4.png b/eims-ui-mobile/src/static/ico/ico4.png
new file mode 100644
index 0000000..72b1188
--- /dev/null
+++ b/eims-ui-mobile/src/static/ico/ico4.png
Binary files differ
diff --git a/eims-ui-mobile/src/static/ico/ico5.png b/eims-ui-mobile/src/static/ico/ico5.png
new file mode 100644
index 0000000..6bc7efc
--- /dev/null
+++ b/eims-ui-mobile/src/static/ico/ico5.png
Binary files differ
diff --git a/eims-ui-mobile/src/static/ico/ico6.png b/eims-ui-mobile/src/static/ico/ico6.png
new file mode 100644
index 0000000..e949123
--- /dev/null
+++ b/eims-ui-mobile/src/static/ico/ico6.png
Binary files differ
diff --git a/eims-ui-mobile/src/static/ico/ico7.png b/eims-ui-mobile/src/static/ico/ico7.png
new file mode 100644
index 0000000..629ab6a
--- /dev/null
+++ b/eims-ui-mobile/src/static/ico/ico7.png
Binary files differ
diff --git a/eims-ui-mobile/src/static/ico/ico8.png b/eims-ui-mobile/src/static/ico/ico8.png
new file mode 100644
index 0000000..12cef2a
--- /dev/null
+++ b/eims-ui-mobile/src/static/ico/ico8.png
Binary files differ
diff --git a/eims-ui-mobile/src/static/ico/ico9.png b/eims-ui-mobile/src/static/ico/ico9.png
new file mode 100644
index 0000000..1974eb3
--- /dev/null
+++ b/eims-ui-mobile/src/static/ico/ico9.png
Binary files differ
diff --git a/eims-ui-mobile/src/static/images/cgq.png b/eims-ui-mobile/src/static/images/cgq.png
new file mode 100644
index 0000000..30d1dc9
--- /dev/null
+++ b/eims-ui-mobile/src/static/images/cgq.png
Binary files differ
diff --git a/eims-ui-mobile/src/style/index.scss b/eims-ui-mobile/src/style/index.scss
index a35dd3f..b582dd3 100644
--- a/eims-ui-mobile/src/style/index.scss
+++ b/eims-ui-mobile/src/style/index.scss
@@ -57,5 +57,3 @@
   background: $uni-color-primary;
 }
 
-
-
diff --git a/eims-ui-mobile/src/types/uni-pages.d.ts b/eims-ui-mobile/src/types/uni-pages.d.ts
index 3792d6f..d3446bb 100644
--- a/eims-ui-mobile/src/types/uni-pages.d.ts
+++ b/eims-ui-mobile/src/types/uni-pages.d.ts
@@ -16,12 +16,14 @@
        "/pages/maint/maint-st" |
        "/pages/maint/order-detail" |
        "/pages/my/index" |
-       "/pages/repair/feedback" |
        "/pages/repair/repair-add" |
+       "/pages/repair/repair-fb" |
        "/pages/repair/req-list" |
        "/pages/repair/res-detail" |
        "/pages/repair/res-list" |
-       "/pages/spare/index";
+       "/pages/scan/index" |
+       "/pages/spare/index" |
+       "/pages/spare/spare-list";
 }
 interface RedirectToOptions extends NavigateToOptions {}
 
diff --git a/eims-ui-mobile/src/utils/RoleUtils.ts b/eims-ui-mobile/src/utils/RoleUtils.ts
index c1e77d4..3eac386 100644
--- a/eims-ui-mobile/src/utils/RoleUtils.ts
+++ b/eims-ui-mobile/src/utils/RoleUtils.ts
@@ -39,3 +39,22 @@
     roles.includes(ROLE_LINE) || roles.includes(ROLE_SUPER_ADMIN) || roles.includes(ROLE_LEADER)
   )
 }
+
+export const loginRoleName = () => {
+  const roles = useUserStore()?.userInfo?.roles || []
+  if (roles.includes(ROLE_SUPER_ADMIN)) {
+    return '瓒呯骇绠$悊鍛�'
+  }
+  if (roles.includes(ROLE_LEADER)) {
+    return '绠$悊鍛�'
+  }
+  if (roles.includes(ROLE_OPERATOR)) {
+    return '鎿嶄綔鍛�'
+  }
+  if (roles.includes(ROLE_LINE)) {
+    return '绾块暱'
+  }
+  if (roles.includes(ROLE_REPAIR)) {
+    return '缁翠慨宸�'
+  }
+}
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsEquController.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsEquController.java
index 0c81ee7..35b8009 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsEquController.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsEquController.java
@@ -77,6 +77,18 @@
     }
 
     /**
+     * 鑾峰彇銆愯澶囧彴璐︺�戣缁嗕俊鎭�
+     *
+     * @param assetNo
+     */
+    @SaCheckPermission("eims:equ:query")
+    @GetMapping("/info/{assetNo}")
+    public R<EimsEquVo> getInfoByAssetNo(@NotNull(message = "璧勪骇缂栧彿涓嶈兘涓虹┖")
+                                @PathVariable String assetNo) {
+        return R.ok(eimsEquipmentService.queryByAssetNo(assetNo));
+    }
+
+    /**
      * 鏂板銆愯澶囧彴璐︺��
      */
     @SaCheckPermission("eims:equ:add")
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsInspectStController.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsInspectStController.java
index 166d4d4..4f199bc 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsInspectStController.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsInspectStController.java
@@ -68,6 +68,13 @@
         return R.ok(eimsInspectStService.queryById(id));
     }
 
+    @SaCheckPermission("eims:inspectSt:query")
+    @GetMapping("/info/{stId}")
+    public R<EimsInspectStVo> getInfoByStid(@NotNull(message = "涓婚敭涓嶈兘涓虹┖")
+                                      @PathVariable String stId) {
+        return R.ok(eimsInspectStService.queryByStId(stId));
+    }
+
     /**
      * 鏂板鐐规姹囨��
      */
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsRepairResBo.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsRepairResBo.java
index 3b7f3c2..23d9ed1 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsRepairResBo.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsRepairResBo.java
@@ -116,6 +116,7 @@
     // 鍏宠仈琛ㄥ瓧娈�
     private  String reqCode;//鎶ヤ慨鍗曠紪鐮�
     private  String reqType;//鎶ヤ慨鍗曠被鍨�
+    private  String assetNo;//璁惧璧勪骇缂栧彿
 
 
 
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsInspectStService.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsInspectStService.java
index 3136c47..b15208a 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsInspectStService.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsInspectStService.java
@@ -1,5 +1,6 @@
 package org.dromara.eims.service;
 
+import jakarta.validation.constraints.NotNull;
 import org.dromara.eims.domain.vo.EimsInspectStVo;
 import org.dromara.eims.domain.bo.EimsInspectStBo;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -23,7 +24,7 @@
      * @return 鐐规姹囨��
      */
     EimsInspectStVo queryById(Long id);
-
+    EimsInspectStVo queryByStId(String stId);
     /**
      * 鍒嗛〉鏌ヨ鐐规姹囨�诲垪琛�
      *
@@ -65,4 +66,6 @@
      * @return 鏄惁鍒犻櫎鎴愬姛
      */
     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+
+
 }
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsInspectStServiceImpl.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsInspectStServiceImpl.java
index c81fd16..199219d 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsInspectStServiceImpl.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsInspectStServiceImpl.java
@@ -10,8 +10,10 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.RequiredArgsConstructor;
+import org.dromara.eims.domain.EimsEqu;
 import org.dromara.eims.domain.EimsInspectRecord;
 import org.dromara.eims.domain.vo.EimsInspectRecordVo;
+import org.dromara.eims.mapper.EimsEquMapper;
 import org.dromara.eims.mapper.EimsInspectRecordMapper;
 import org.springframework.stereotype.Service;
 import org.dromara.eims.domain.bo.EimsInspectStBo;
@@ -39,6 +41,7 @@
 public class EimsInspectStServiceImpl implements IEimsInspectStService {
 
     private final EimsInspectStMapper baseMapper;
+    private final EimsEquMapper equMapper;
     private final EimsInspectRecordMapper recordMapper;
 
     /**
@@ -50,16 +53,36 @@
     @Override
     public EimsInspectStVo queryById(Long id){
         EimsInspectStVo stVo = baseMapper.selectVoById(id);
+        if(stVo!=null&&stVo.getEquId()!=null){
+            EimsEqu eimsEqu = equMapper.selectById(stVo.getEquId());
+            stVo.setEquName(eimsEqu.getEquName());
+            stVo.setAssetNo(eimsEqu.getAssetNo());
+        }
+        // fillStDataSingle(stVo);
+        return stVo;
+    }
+
+    @Override
+    public EimsInspectStVo queryByStId(String stId) {
+        QueryWrapper<EimsInspectSt> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("st_id", stId);
+        EimsInspectStVo stVo = baseMapper.selectVoOne(queryWrapper);
+        if(stVo!=null&&stVo.getEquId()!=null){
+            EimsEqu eimsEqu = equMapper.selectById(stVo.getEquId());
+            stVo.setEquName(eimsEqu.getEquName());
+            stVo.setAssetNo(eimsEqu.getAssetNo());
+        }
+        // fillStDataSingle(stVo);
         return stVo;
     }
 
 
     /**
      *
-     * @param stVo
-     * @param type Day-鏃ヨ鍥� Month-鏈堣鍥�
+     * @param stVo type Day-鏃ヨ鍥� Month-鏈堣鍥�
+     * @param
      */
-    private void fillStDataSingle(EimsInspectStVo stVo,String type) {
+    private void fillStDataSingle(EimsInspectStVo stVo) {
 
             LambdaQueryWrapper<EimsInspectRecord> recordLqw = Wrappers.lambdaQuery();
             recordLqw.eq(EimsInspectRecord::getEquId, stVo.getEquId());
@@ -69,7 +92,7 @@
             LocalDate endOfMonth = planTime.with(TemporalAdjusters.lastDayOfMonth());
 
             // 鏃ヨ鍥炬煡璇㈣寖鍥�
-            if(type.equals("Day")){
+            if(stVo.getType().equals("Day")){
                 recordLqw.between(EimsInspectRecord::getPlanTime, planTime, planTime);
             }else {
                 //  鏈堣鍥炬煡璇㈣寖鍥�
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsRepairResServiceImpl.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsRepairResServiceImpl.java
index 781ab33..c697818 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsRepairResServiceImpl.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsRepairResServiceImpl.java
@@ -296,6 +296,7 @@
         qw.eq(bo.getResUser() != null, "res.res_user", bo.getResUser());
         qw.eq(bo.getReqType() != null, "req.req_type", bo.getReqType());
         qw.eq(bo.getReqUser() != null, "res.req_user", bo.getReqUser());
+        qw.eq(bo.getAssetNo() != null, "equ.asset_no", bo.getAssetNo());
 
         List<Long> resDeptIds = getAllDescendantIds(bo.getResDept());
         qw.in(bo.getResDept() != null, "res.res_dept", resDeptIds);

--
Gitblit v1.9.3