From 0f5bd3db43a7ea07d3373b38bd24126544de5e2f Mon Sep 17 00:00:00 2001
From: zhuguifei <zhuguifei@zhuguifeideiMac.local>
Date: 星期一, 21 四月 2025 18:32:39 +0800
Subject: [PATCH] 完成设备点检

---
 eims-ui-mobile/src/service/equ.d.ts              |  124 +++++
 eims-ui-mobile/env/.env                          |    2 
 eims-ui-mobile/src/static/menu/menu4.png         |    0 
 eims-ui-mobile/src/static/menu/menu5.png         |    0 
 eims-ui-mobile/src/pages/inspect/insp-add.vue    |  222 +++++++++
 eims-ui-mobile/src/service/inspect.ts            |   29 +
 eims-ui-mobile/src/pages/login/index.vue         |   29 +
 eims-ui-mobile/src/pages/inspect/insp-st.vue     |  149 ++++++
 eims-ui-mobile/src/static/menu/menu3.png         |    0 
 eims-ui-mobile/src/service/inspect.d.ts          |  150 ++++++
 eims-ui-mobile/src/utils/http.ts                 |   33 +
 eims-ui-mobile/.eslintrc-auto-import.json        |   17 
 eims-ui-mobile/src/pages/inspect/insp-record.vue |  298 ++++++++++++
 eims-ui-mobile/src/types/uni-pages.d.ts          |    4 
 eims-ui-mobile/src/style/index.scss              |   10 
 eims-ui-mobile/src/static/menu/menu2.png         |    0 
 eims-ui-mobile/src/types/auto-import.d.ts        |    2 
 eims-ui-mobile/src/service/equ.ts                |    9 
 eims-ui-mobile/src/static/menu/menu1.png         |    0 
 eims-ui-mobile/src/static/images/camera.png      |    0 
 eims-ui-mobile/src/static/ico/ico-ok.png         |    0 
 eims-ui-mobile/src/pages.json                    |   33 +
 eims-ui-mobile/src/static/menu/menu0.png         |    0 
 eims-ui-mobile/src/pages/equ/equ-list.vue        |  149 ++++++
 eims-ui-mobile/src/pages/home/index.vue          |   90 ++-
 25 files changed, 1,299 insertions(+), 51 deletions(-)

diff --git a/eims-ui-mobile/.eslintrc-auto-import.json b/eims-ui-mobile/.eslintrc-auto-import.json
index 27df73d..ca20d5b 100644
--- a/eims-ui-mobile/.eslintrc-auto-import.json
+++ b/eims-ui-mobile/.eslintrc-auto-import.json
@@ -3,11 +3,14 @@
     "Component": true,
     "ComponentPublicInstance": true,
     "ComputedRef": true,
+    "DirectiveBinding": true,
     "EffectScope": true,
     "ExtractDefaultPropTypes": true,
     "ExtractPropTypes": true,
     "ExtractPublicPropTypes": true,
     "InjectionKey": true,
+    "MaybeRef": true,
+    "MaybeRefOrGetter": true,
     "PropType": true,
     "Ref": true,
     "VNode": true,
@@ -65,6 +68,7 @@
     "onUnload": true,
     "onUnmounted": true,
     "onUpdated": true,
+    "onWatcherCleanup": true,
     "provide": true,
     "reactive": true,
     "readonly": true,
@@ -82,20 +86,15 @@
     "useAttrs": true,
     "useCssModule": true,
     "useCssVars": true,
+    "useId": true,
+    "useModel": true,
     "useRequest": true,
     "useSlots": true,
+    "useTemplateRef": true,
     "useUpload": true,
-    "useUpload2": true,
     "watch": true,
     "watchEffect": true,
     "watchPostEffect": true,
-    "watchSyncEffect": true,
-    "DirectiveBinding": true,
-    "MaybeRef": true,
-    "MaybeRefOrGetter": true,
-    "onWatcherCleanup": true,
-    "useId": true,
-    "useModel": true,
-    "useTemplateRef": true
+    "watchSyncEffect": true
   }
 }
diff --git a/eims-ui-mobile/env/.env b/eims-ui-mobile/env/.env
index e404113..ba2fa4c 100644
--- a/eims-ui-mobile/env/.env
+++ b/eims-ui-mobile/env/.env
@@ -8,7 +8,7 @@
 VITE_APP_PUBLIC_BASE=/
 
 VITE_SERVER_BASEURL = 'http://192.168.12.33:8080'
-VITE_UPLOAD_BASEURL = 'https://ukw0y1.laf.run/upload'
+VITE_UPLOAD_BASEURL = 'http://192.168.12.33:8080/resource/oss/upload'
 
 # 鏈変簺鍚屽鍙兘闇�瑕佸湪寰俊灏忕▼搴忛噷闈㈡牴鎹� develop銆乼rial銆乺elease 鍒嗗埆璁剧疆涓婁紶鍦板潃锛屽弬鑰冧唬鐮佸涓嬨��
 # 涓嬮潰鐨勫彉閲忓鏋滄病鏈夎缃紝浼氶粯璁や娇鐢� VITE_SERVER_BASEURL or VITE_UPLOAD_BASEURL
diff --git a/eims-ui-mobile/src/pages.json b/eims-ui-mobile/src/pages.json
index fc6eadb..5cfa519 100644
--- a/eims-ui-mobile/src/pages.json
+++ b/eims-ui-mobile/src/pages.json
@@ -64,6 +64,14 @@
       }
     },
     {
+      "path": "pages/equ/equ-list",
+      "type": "page",
+      "layout": "default",
+      "style": {
+        "navigationBarTitleText": "璁惧鍒楄〃"
+      }
+    },
+    {
       "path": "pages/equ/index",
       "type": "page",
       "layout": "tabbar",
@@ -73,6 +81,31 @@
       }
     },
     {
+      "path": "pages/inspect/insp-add",
+      "type": "page",
+      "layout": "default",
+      "style": {
+        "navigationBarTitleText": "璁惧鐐规"
+      }
+    },
+    {
+      "path": "pages/inspect/insp-record",
+      "type": "page",
+      "style": {
+        "navigationBarTitleText": "鐐规璁板綍",
+        "navigationStyle": "custom",
+        "navigationBarBackgroundColor": "#4D80F0"
+      }
+    },
+    {
+      "path": "pages/inspect/insp-st",
+      "type": "page",
+      "layout": "default",
+      "style": {
+        "navigationBarTitleText": "鐐规姹囨��"
+      }
+    },
+    {
       "path": "pages/login/index",
       "type": "page",
       "layout": "default",
diff --git a/eims-ui-mobile/src/pages/equ/equ-list.vue b/eims-ui-mobile/src/pages/equ/equ-list.vue
new file mode 100644
index 0000000..4a72014
--- /dev/null
+++ b/eims-ui-mobile/src/pages/equ/equ-list.vue
@@ -0,0 +1,149 @@
+<route lang="json5" type="page">
+{
+  layout: 'default',
+  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="equTypeId" :options="typeList" @change="handleEquType" />
+        <wd-drop-menu-item v-model="status" :options="statusList" @change="handleEquStatu" />
+      </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.assetNo }}</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]" @click.stop="itemClick(item)">
+          <image class="slot-img text-center" src="/static/images/camera.png" />
+          <view>
+            <view class="text-color-base">
+              {{ item.equName }}
+              <text class="text-color-gray ml-2 text-mini">{{ item.modelNo }}</text>
+            </view>
+            <view class="text-color-gray text-xs mt-1">
+              {{ item.location }} | {{ item.madeIn }}
+            </view>
+          </view>
+        </view>
+      </wd-card>
+    </view>
+  </z-paging>
+</template>
+
+<script setup lang="ts">
+import { onMounted, getCurrentInstance, ref } from 'vue'
+
+import { getEquList } from '@/service/equ'
+
+// 璁惧绫诲瀷
+const equTypeId = ref<number>(0)
+// 璁惧鐘舵��
+const status = ref<number>(0)
+
+const isSelectEqu = ref(false)
+
+const typeList = ref<Record<string, any>[]>([{ label: '鎵�鏈夎澶�', value: 0 }])
+const statusList = ref<Record<string, any>[]>([{ label: '鎵�鏈夌姸鎬�', value: 0 }])
+function handleEquType({ value }) {
+  console.log(value)
+}
+function handleEquStatu({ value }) {
+  console.log(value)
+}
+
+const paging = ref(null)
+const dataList = ref([])
+
+const queryList = (pageNum?: number, pageSize?: number) => {
+  // 杩欓噷鐨刾ageNo鍜宲ageSize浼氳嚜鍔ㄨ绠楀ソ锛岀洿鎺ヤ紶缁欐湇鍔″櫒鍗冲彲
+  // 杩欓噷鐨勮姹傚彧鏄紨绀猴紝璇锋浛鎹㈡垚鑷繁鐨勯」鐩殑缃戠粶璇锋眰锛屽苟鍦ㄧ綉缁滆姹傚洖璋冧腑閫氳繃paging.value.complete(璇锋眰鍥炴潵鐨勬暟缁�)灏嗚姹傜粨鏋滀紶缁檢-paging
+  getEquList({ pageNum, pageSize })
+    .then((res: any) => {
+      // 璇峰嬁鍦ㄧ綉缁滆姹傚洖璋冧腑缁檇ataList璧嬪�硷紒锛佸彧闇�瑕佽皟鐢╟omplete灏卞彲浠ヤ簡
+      console.log(res)
+      paging.value.complete(res.rows)
+    })
+    .catch((res) => {
+      // 濡傛灉璇锋眰澶辫触鍐檖aging.value.complete(false)锛屼細鑷姩灞曠ず閿欒椤甸潰
+      // 娉ㄦ剰锛屾瘡娆¢兘闇�瑕佸湪catch涓啓杩欏彞璇濆緢楹荤儲锛寊-paging鎻愪緵浜嗘柟妗堝彲浠ュ叏灞�缁熶竴澶勭悊
+      // 鍦ㄥ簳灞傜殑缃戠粶璇锋眰鎶涘嚭寮傚父鏃讹紝鍐檜ni.$emit('z-paging-error-emit');鍗冲彲
+      paging.value.complete(false)
+    })
+}
+
+/**
+ * 璁惧鏉$洰鐐瑰嚮浜嬩欢
+ * @param item
+ */
+function itemClick(item: any) {
+  if (isSelectEqu.value) {
+    emitSelectEqu(item)
+    uni.navigateBack()
+  }
+}
+
+/**
+ * 閫夋嫨璁惧鍥炶皟
+ * @param equ
+ */
+function emitSelectEqu(equ: any) {
+  eventChannel.value.emit('selectEqu', {
+    data: equ,
+  })
+}
+
+
+const eventChannel = ref<any>()
+onMounted(() => {
+  const instance: any = getCurrentInstance().proxy
+  const event = instance.getOpenerEventChannel()
+  eventChannel.value = event
+  event.on('handleSelectEqu', function (data) {
+    isSelectEqu.value = true
+    console.log('handleSelectEqu', 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/pages/home/index.vue b/eims-ui-mobile/src/pages/home/index.vue
index cb1e18e..bd131e7 100644
--- a/eims-ui-mobile/src/pages/home/index.vue
+++ b/eims-ui-mobile/src/pages/home/index.vue
@@ -71,33 +71,18 @@
         <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">
-            <image class="slot-img text-center" src="/static/menu/menu2.png" />
-            <text>12</text>
-          </wd-grid-item>
-          <wd-grid-item use-slot class="flex justify-center items-center">
-            <image class="slot-img text-center" src="/static/menu/menu2.png" />
-            <text>12</text>
-          </wd-grid-item>
-          <wd-grid-item use-slot class="flex justify-center items-center">
-            <image class="slot-img text-center" src="/static/menu/menu2.png" />
-            <text>12</text>
-          </wd-grid-item>
-          <wd-grid-item use-slot is-dot class="flex justify-center items-center">
-            <image class="slot-img text-center" src="/static/menu/menu2.png" />
-            <text>12</text>
-          </wd-grid-item>
-          <wd-grid-item use-slot class="flex justify-center items-center">
-            <image class="slot-img text-center" src="/static/menu/menu2.png" />
-            <text>12</text>
-          </wd-grid-item>
-          <wd-grid-item use-slot class="flex justify-center items-center">
-            <image class="slot-img text-center" src="/static/menu/menu2.png" />
-            <text>12</text>
+          <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>
@@ -108,17 +93,18 @@
         <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 menuList"
+            v-for="(item, index) in inspectMenu"
             :key="item.id"
+            @click.stop="goItemPage(item.path)"
           >
-            <image class="slot-img text-center" :src="item.url" />
+            <image class="slot-img text-center" :src="item.icon" />
             <text>{{ item.name }}</text>
           </wd-grid-item>
         </wd-grid>
@@ -142,28 +128,62 @@
   console.error(menuList)
 }
 
+const goItemPage = (path: string) => {
+  const url = `/${path}`
+  uni.navigateTo({
+    url,
+  })
+}
+
 onLoad(() => {
   // getAllMenus()
 })
 
-const menuList = reactive([
+const equMenu = reactive([
   {
     id: 1,
-    name: '娴嬭瘯',
-    url: '/static/menu/menu1.png',
+    name: '璁惧绠$悊',
+    icon: '/static/menu/menu1.png',
+    path: 'pages/equ/equ-list',
+  }
+])
+
+const inspectMenu = reactive([
+  /*  {
+    id: 0,
+    name: '璁惧鐐规',
+    icon: '/static/menu/menu0.png',
+    path: 'pages/inspect/insp-add',
+  }, */
+  {
+    id: 1,
+    name: '鐐规姒傝',
+    icon: '/static/menu/menu1.png',
+    path: 'pages/inspect/insp-st',
   },
   {
     id: 2,
-    name: '娴嬭瘯',
-    url: '/static/menu/menu1.png',
+    name: '鐐规姹囨��',
+    icon: '/static/menu/menu2.png',
+    path: 'pages/inspect/insp-st',
+  },
+  {
+    id: 3,
+    name: '鐐规璁板綍',
+    icon: '/static/menu/menu3.png',
+    path: 'pages/inspect/insp-record',
+  },
+  {
+    id: 4,
+    name: '鐐规璁″垝',
+    icon: '/static/menu/menu4.png',
+    path: 'pages/inspect/insp-add',
   },
 ])
 
 function handleUserInfo() {
   getAllMenus()
 }
-
-
 </script>
 
 <style lang="scss" scoped>
@@ -201,6 +221,6 @@
 .slot-img {
   width: 72rpx;
   height: 72rpx;
-  border-radius: 8rpx;
+  margin-left: 4rpx;
 }
 </style>
diff --git a/eims-ui-mobile/src/pages/inspect/insp-add.vue b/eims-ui-mobile/src/pages/inspect/insp-add.vue
new file mode 100644
index 0000000..7d513b3
--- /dev/null
+++ b/eims-ui-mobile/src/pages/inspect/insp-add.vue
@@ -0,0 +1,222 @@
+<route lang="json5" type="page">
+{
+  layout: 'default',
+  style: {
+    navigationBarTitleText: '璁惧鐐规',
+  },
+}
+</route>
+
+<template>
+  <view class="bg-base">
+    <wd-form ref="form" :model="model" :rules="rules">
+      <wd-cell-group custom-class="group" title="璁惧淇℃伅" border>
+        <wd-input
+          @click.stop="handleSelectEqu"
+          label="璁惧鍚嶇О"
+          label-width="200rpx"
+          prop="equId"
+          readonly
+          required
+          suffix-icon="arrow-right"
+          clearable
+          v-model="model.equId"
+          placeholder="璇烽�夋嫨璁惧"
+          @clicksuffixicon="handleSelectEqu"
+        />
+        <!--        <wd-picker
+          label="璁惧鍚嶇О"
+          placeholder="璇烽�夎澶�"
+          label-width="200rpx"
+          prop="equId"
+          v-model="model.equId"
+          :columns="equList"
+        />-->
+      </wd-cell-group>
+
+      <wd-cell-group custom-class="mt-2" title="鐐规淇℃伅" border>
+        <wd-picker
+          label="鐐规椤�"
+          placeholder="璇烽�夌偣妫�椤�"
+          label-width="200rpx"
+          prop="equId"
+          v-model="model.inspName"
+          :columns="equList"
+        />
+
+        <wd-input
+          label="鐐规缂栧彿"
+          placeholder="璇风敓鎴愮偣妫�缂栧彿"
+          label-width="200rpx"
+          v-model="model.inspCode"
+          prop="inspCode"
+        >
+          <template #suffix>
+            <wd-button size="small" @click.stop="handleInspCode">鐢熸垚</wd-button>
+          </template>
+        </wd-input>
+
+        <wd-textarea
+          label="鐐规鎻忚堪"
+          label-width="200rpx"
+          type="textarea"
+          v-model="model.inspDesc"
+          auto-height
+          :maxlength="200"
+          show-word-limit
+          placeholder="璇疯緭鍏ョ偣妫�鎻忚堪"
+          clearable
+          prop="inspDesc"
+        />
+        <wd-cell title="鐐规鍥剧墖" title-width="200rpx" prop="fileList">
+          <wd-upload
+            :auto-upload="false"
+            :file-list="model.fileList"
+            :action="VITE_UPLOAD_BASEURL"
+            @change="handleFileChange"
+          ></wd-upload>
+        </wd-cell>
+
+        <wd-calendar
+          label="璁″垝鏃ユ湡"
+          label-width="200rpx"
+          placeholder="璇烽�夋嫨鏃ユ湡"
+          prop="planTime"
+          v-model="model.planTime"
+        />
+        <wd-datetime-picker
+          label="鐐规鏃堕棿"
+          label-width="200rpx"
+          placeholder="璇烽�夋嫨鏃堕棿"
+          prop="inspTime"
+          v-model="model.inspTime"
+        />
+      </wd-cell-group>
+
+      <view class="footer">
+        <wd-button type="primary" size="large" @click="handleSubmit" block>鎻愪氦</wd-button>
+      </view>
+    </wd-form>
+  </view>
+</template>
+<script setup lang="ts">
+import { reactive, ref } from 'vue'
+import { FormRules } from 'wot-design-uni/components/wd-form/types'
+import { getEnvBaseUploadUrl } from '@/utils'
+
+const VITE_UPLOAD_BASEURL = `${getEnvBaseUploadUrl()}`
+
+const form = ref()
+const model = reactive<{
+  equId: string
+  inspName: string
+  inspCode: string
+  inspDesc: string
+  planTime: null | number
+  inspTime: number | string
+  fileList: []
+}>({
+  equId: '',
+  inspName: '',
+  inspCode: '',
+  inspDesc: '',
+  planTime: null,
+  inspTime: '',
+  fileList: [],
+})
+const rules: FormRules = {
+  equId: [
+    {
+      required: true,
+      message: '璇烽�夋嫨璁惧',
+    },
+  ],
+  inspName: [
+    {
+      required: true,
+      message: '璇烽�夋嫨鐐规椤�',
+    },
+  ],
+  inspCode: [
+    {
+      required: true,
+      message: '璇疯緭鍏ョ偣妫�缂栫爜',
+    },
+  ],
+  inspDesc: [
+    {
+      required: true,
+      message: '璇疯緭鍏ョ偣妫�鎻忚堪',
+    },
+  ],
+  fileList: [
+    {
+      required: false,
+      message: '',
+    },
+  ],
+}
+
+const equList = ref<any[]>([
+  {
+    value: '1',
+    label: '1#骞茬嚗鏈�',
+  },
+  {
+    value: '2',
+    label: '1#骞茬嚗鏈�',
+  },
+])
+
+/**
+ * 閫夋嫨璁惧
+ */
+function handleSelectEqu() {
+  uni.navigateTo({
+    url: '/pages/equ/equ-list',
+    events: {
+      // 涓烘寚瀹氫簨浠舵坊鍔犱竴涓洃鍚櫒锛岃幏鍙栬鎵撳紑椤甸潰浼犻�佸埌褰撳墠椤甸潰鐨勬暟鎹�
+      selectEqu: function (data) {
+        console.log(data)
+      },
+    },
+    success: function (res) {
+      // 閫氳繃eventChannel鍚戣鎵撳紑椤甸潰浼犻�佹暟鎹�
+      res.eventChannel.emit('handleSelectEqu', { data: '鐐规椤甸潰閫夋嫨璁惧' })
+    },
+  })
+}
+
+/**
+ * 鐢熸垚鐐规缂栧彿
+ */
+function handleInspCode() {
+  console.error('鐢熸垚鐐规缂栫爜')
+}
+
+/**
+ * 涓婁紶鐐规鍥剧墖
+ * @param fileList
+ */
+function handleFileChange({ fileList }) {
+  model.fileList = fileList
+}
+
+function handleSubmit() {
+  form.value
+    .validate()
+    .then(({ valid, errors }) => {
+      console.log(valid)
+      console.log(errors)
+    })
+    .catch((error) => {
+      console.log(error, 'error')
+    })
+}
+</script>
+<style scoped lang="scss">
+.footer {
+  background: white;
+  padding: 60rpx 42rpx;
+}
+</style>
diff --git a/eims-ui-mobile/src/pages/inspect/insp-record.vue b/eims-ui-mobile/src/pages/inspect/insp-record.vue
new file mode 100644
index 0000000..f176fda
--- /dev/null
+++ b/eims-ui-mobile/src/pages/inspect/insp-record.vue
@@ -0,0 +1,298 @@
+<route lang="json5">
+{
+  style: {
+    navigationBarTitleText: '鐐规璁板綍',
+    navigationStyle: 'custom',
+    navigationBarBackgroundColor: '#4D80F0',
+  },
+}
+</route>
+<template>
+  <z-paging ref="paging" v-model="dataList" @query="queryList" show-refresher-update-time>
+    <template #top>
+      <wd-navbar
+        title="鐐规璁板綍"
+        left-arrow
+        @click-left="goBack"
+        right-text="鎻愪氦"
+        @click-right="handleClickRight"
+        custom-style="background: #4D80F0;"
+        safeAreaInsetTop
+      ></wd-navbar>
+
+      <wd-card type="rectangle">
+        <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">{{ inspSt.equName }}</view>
+              <view class="text-color-gray ml-2 text-mini">{{ inspSt.assetNo }}</view>
+            </view>
+
+            <view class="flex items-center">
+              <text class="text-color-gray text-mini">{{ inspSt.planTimeStr }}</text>
+            </view>
+          </view>
+        </template>
+        <view class="flex h-[100rpx]" 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">鐐规鎬绘暟: {{ 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">
+              <text class="mr-3">姝e父: {{ normalNum }}</text>
+              |
+              <text class="mx-3">寮傚父: {{ abNormalNum }}</text>
+            </view>
+            <view class="text-color-gray text-xs mt-2 flex">
+              <text>鐘舵�侊細</text>
+              <template v-if="dataCount > 0 && dataCount === checkCount">
+                <wd-icon class="icon-color-success" name="check-outline" size="40rpx"></wd-icon>
+                <text class="ml-1">宸插畬鎴�</text>
+              </template>
+              <template v-else>
+                <wd-icon class="icon-color-base" name="detection" size="40rpx"></wd-icon>
+                <text class="ml-1">杩涜涓�</text>
+              </template>
+            </view>
+          </view>
+        </view>
+      </wd-card>
+    </template>
+
+    <view class="bg-base">
+      <view class="w-full h-[24rpx]"></view>
+      <wd-cell>
+        <template #title>
+          <text class="text-color-gray">鐐规椤�</text>
+        </template>
+        <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">
+          <template #title="{ expanded, disabled, isFirst }">
+            <view class="flex justify-between">
+              <view class="flex justify-center items-center">
+                <text class="text-sm">{{ item.inspName }}</text>
+              </view>
+
+              <view class="flex items-center">
+                <wd-radio-group
+                  v-model="item.inspResult"
+                  inline
+                  shape="dot"
+                  @change="inspResultClick(item)"
+                >
+                  <wd-radio value="1">姝e父</wd-radio>
+                  <wd-radio value="2">寮傚父</wd-radio>
+                </wd-radio-group>
+                <wd-icon
+                  v-if="expanded"
+                  name="arrow-up"
+                  size="30rpx"
+                  class="icon-color-gray"
+                ></wd-icon>
+                <wd-icon v-else name="arrow-down" size="30rpx" class="icon-color-gray"></wd-icon>
+              </view>
+            </view>
+          </template>
+          <view class="text-color-gray text-xs flex justify-between">
+            <text class="mr-3">鐐规浜�: {{ item.inspUserName }}</text>
+            <text class="mx-3">鐐规鏃堕棿: {{ item.inspTime }}</text>
+          </view>
+        </wd-collapse-item>
+      </wd-collapse>
+    </view>
+  </z-paging>
+</template>
+
+<script setup lang="ts">
+import { ref } from 'vue'
+import { useUserStore, useAccessStore, useSystemConfigStore } from '@/store'
+import { getInspStRecordList, updateInspRecord, 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()
+const toast = useToast()
+
+const collapseRef = ref<CollapseInstance>()
+const isAllExpanded = ref(false)
+
+// 瀹氫箟鎺ュ彛
+interface QueryParams {
+  pageNum: number
+  pageSize: number
+  inspCode: string
+  status?: string
+}
+
+interface InspSt {
+  inspCode: string
+  equName: string
+  assetNo: string
+  planTimeStr?: string
+}
+
+const dataChange = ref(false)
+
+const userStore = useUserStore()
+
+const collSelects = ref<string[]>([])
+
+// 鐐规姹囨�绘暟鎹�(涓婁釜椤甸潰浼犲��)
+const inspSt = reactive<InspSt>({
+  inspCode: '',
+  equName: '',
+  assetNo: '',
+  planTimeStr: '',
+})
+
+const paging = ref(null)
+const dataList = ref([])
+
+const queryList = (pageNum?: number, pageSize?: number) => {
+  // 杩欓噷鐨刾ageNo鍜宲ageSize浼氳嚜鍔ㄨ绠楀ソ锛岀洿鎺ヤ紶缁欐湇鍔″櫒鍗冲彲
+  // 杩欓噷鐨勮姹傚彧鏄紨绀猴紝璇锋浛鎹㈡垚鑷繁鐨勯」鐩殑缃戠粶璇锋眰锛屽苟鍦ㄧ綉缁滆姹傚洖璋冧腑閫氳繃paging.value.complete(璇锋眰鍥炴潵鐨勬暟缁�)灏嗚姹傜粨鏋滀紶缁檢-paging
+  const params: QueryParams = {
+    pageNum,
+    pageSize,
+    inspCode: inspSt.inspCode,
+  }
+
+  getInspStRecordList(params)
+    .then((res: any) => {
+      // 璇峰嬁鍦ㄧ綉缁滆姹傚洖璋冧腑缁檇ataList璧嬪�硷紒锛佸彧闇�瑕佽皟鐢╟omplete灏卞彲浠ヤ簡
+      paging.value.complete(res.rows)
+    })
+    .catch((res) => {
+      // 濡傛灉璇锋眰澶辫触鍐檖aging.value.complete(false)锛屼細鑷姩灞曠ず閿欒椤甸潰
+      // 娉ㄦ剰锛屾瘡娆¢兘闇�瑕佸湪catch涓啓杩欏彞璇濆緢楹荤儲锛寊-paging鎻愪緵浜嗘柟妗堝彲浠ュ叏灞�缁熶竴澶勭悊
+      // 鍦ㄥ簳灞傜殑缃戠粶璇锋眰鎶涘嚭寮傚父鏃讹紝鍐檜ni.$emit('z-paging-error-emit');鍗冲彲
+      paging.value.complete(false)
+    })
+}
+
+function inspResultClick(item: any) {
+  // userStore?.userInfo?.realName
+}
+
+const goBack = () => {
+  uni.navigateBack()
+}
+function handleClickRight() {
+  handleConfirm()
+}
+
+const toggleCollapse = () => {
+  isAllExpanded.value = !isAllExpanded.value  
+  collapseRef.value.toggleAll(isAllExpanded.value)
+}
+
+function handleConfirm() {
+  if (!dataChange.value) {
+    message.alert('璇锋搷浣滃悗鎻愪氦!')
+    return false
+  }
+  message
+    .confirm({
+      msg: '纭畾鎻愪氦锛�',
+      title: '鎻愮ず',
+      beforeConfirm: ({ resolve }) => {
+        updateData(resolve)
+      },
+    })
+    .then(() => {})
+    .catch((error) => {
+      console.log(error)
+    })
+}
+
+function updateData(resolve: any) {
+  const params = {
+    inspRecordList: dataList.value,
+  }
+  updateInspRecordBatch(params)
+    .then((res: any) => {
+      paging.value.reload()
+      resolve(true)
+    })
+    .catch((res) => {
+      console.error(res)
+    })
+}
+
+/**
+ * 鐐规璁板綍鏉$洰鐐瑰嚮浜嬩欢
+ * @param item
+ */
+function itemClick(item: any) {}
+
+watch(
+  () => [...dataList.value], // 浣跨敤鎵╁睍杩愮畻绗﹀垱寤烘柊鏁扮粍浠ヨЕ鍙戠洃鍚�
+  (newVal, oldVal) => {
+    if (oldVal.length > 0) {
+      dataChange.value = true
+    }
+  },
+  { deep: true },
+)
+onLoad((options) => {
+  inspSt.inspCode = options.inspCode
+  inspSt.equName = options.equName
+  inspSt.assetNo = options.assetNo
+  inspSt.planTimeStr = options.planTimeStr
+})
+
+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)
+const abNormalNum = computed(() => dataList.value.filter((item) => item.inspResult === '2').length)
+</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;
+}
+
+.col-title-box {
+}
+.bg-primary {
+  background: $uni-color-primary;
+}
+:deep(.wd-navbar__text) {
+  font-size: 26rpx;
+  color: white;
+}
+:deep(.wd-icon-arrow-left:before),
+:deep(.wd-navbar__title) {
+  color: white;
+  font-weight: 0;
+}
+</style>
diff --git a/eims-ui-mobile/src/pages/inspect/insp-st.vue b/eims-ui-mobile/src/pages/inspect/insp-st.vue
new file mode 100644
index 0000000..d380724
--- /dev/null
+++ b/eims-ui-mobile/src/pages/inspect/insp-st.vue
@@ -0,0 +1,149 @@
+<route lang="json5" type="page">
+{
+  layout: 'default',
+  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="viewMode" :options="viewModeList" @change="handleViewMode" />
+        <wd-drop-menu-item v-model="equName" :options="equList" @change="handleEquName" />
+      </wd-drop-menu>
+      <wd-divider></wd-divider>
+    </template>
+    <view class="bg-base">
+      <view class="w-full h-[24rpx]"></view>
+      <wd-card type="rectangle" v-for="(item, index) in dataList" :key="item.id">
+        <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">{{ item.equName }}</view>
+              <view class="text-color-gray ml-2 text-mini">{{ item.assetNo }}</view>
+            </view>
+
+            <view class="flex items-center">
+              <text class="text-color-gray text-mini">{{ item.planTimeStr }}</text>
+            </view>
+          </view>
+        </template>
+        <view class="flex h-[100rpx]" 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>
+              |
+              <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">
+              <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">
+              <text>鐘舵�侊細</text>
+              <template v-if="item.recordCount === item.checkCount">
+                <wd-icon class="icon-color-success" name="check-outline" size="40rpx"></wd-icon>
+                <text class="ml-1">宸插畬鎴�</text>
+              </template>
+              <template v-else>
+                <wd-icon class="icon-color-base" name="detection" size="40rpx"></wd-icon>
+                <text class="ml-1">杩涜涓�</text>
+              </template>
+            </view>
+          </view>
+          <wd-button size="small" icon="edit-outline" @click.stop="itemClick(item)">鏄庣粏</wd-button>
+        </view>
+      </wd-card>
+    </view>
+  </z-paging>
+</template>
+
+<script setup lang="ts">
+import { ref } from 'vue'
+import { getInspStList } from '@/service/inspect'
+
+const viewMode = ref<string>('Day')
+const equName = ref<string>('鎵�鏈夎澶�')
+
+const viewModeList = ref<Record<string, any>[]>([
+  { label: '鏃ヨ鍥�', value: 'Day' },
+  { label: '鏈堣鍥�', value: 'Month' },
+])
+const equList = ref<Record<string, any>[]>([{ label: '鎵�鏈夎澶�', value: '鎵�鏈夎澶�' }])
+function handleViewMode({ value }) {
+  console.log(value)
+}
+function handleEquName({ value }) {
+  console.log(value)
+}
+
+const paging = ref(null)
+const dataList = ref([])
+
+const queryList = (pageNum?: number, pageSize?: number) => {
+  // 杩欓噷鐨刾ageNo鍜宲ageSize浼氳嚜鍔ㄨ绠楀ソ锛岀洿鎺ヤ紶缁欐湇鍔″櫒鍗冲彲
+  // 杩欓噷鐨勮姹傚彧鏄紨绀猴紝璇锋浛鎹㈡垚鑷繁鐨勯」鐩殑缃戠粶璇锋眰锛屽苟鍦ㄧ綉缁滆姹傚洖璋冧腑閫氳繃paging.value.complete(璇锋眰鍥炴潵鐨勬暟缁�)灏嗚姹傜粨鏋滀紶缁檢-paging
+  getInspStList({ pageNum, pageSize })
+    .then((res: any) => {
+      // 璇峰嬁鍦ㄧ綉缁滆姹傚洖璋冧腑缁檇ataList璧嬪�硷紒锛佸彧闇�瑕佽皟鐢╟omplete灏卞彲浠ヤ簡
+      console.log(res)
+      paging.value.complete(res.rows)
+    })
+    .catch((res) => {
+      // 濡傛灉璇锋眰澶辫触鍐檖aging.value.complete(false)锛屼細鑷姩灞曠ず閿欒椤甸潰
+      // 娉ㄦ剰锛屾瘡娆¢兘闇�瑕佸湪catch涓啓杩欏彞璇濆緢楹荤儲锛寊-paging鎻愪緵浜嗘柟妗堝彲浠ュ叏灞�缁熶竴澶勭悊
+      // 鍦ㄥ簳灞傜殑缃戠粶璇锋眰鎶涘嚭寮傚父鏃讹紝鍐檜ni.$emit('z-paging-error-emit');鍗冲彲
+      paging.value.complete(false)
+    })
+}
+
+function itemClick(item) {
+  const inspCode = `${item.equId}_${item.planTime}_${viewMode.value}`
+  uni.navigateTo({
+    url: `/pages/inspect/insp-record?inspCode=${inspCode}&equName=${item.equName}&assetNo=${item.assetNo}&planTimeStr=${item.planTimeStr}`,
+  })
+}
+
+onLoad(() => {
+  queryList()
+})
+</script>
+
+<style scoped lang="scss">
+.menu-title-box {
+}
+
+.slot-img {
+  width: 72rpx;
+  height: 72rpx;
+  margin-right: 24rpx;
+}
+.statu-img {
+  width: 60rpx;
+  height: 40rpx;
+}
+.text-mini {
+  font-size: 22rpx;
+}
+
+.menu-indicator {
+  width: 6rpx;
+  height: 26rpx;
+  border-radius: 10rpx;
+  background-color: $uni-color-primary;
+}
+:deep(.wd-card__footer) {
+  padding: 10rpx !important;
+}
+:deep(.wd-card__title-content) {
+  padding: 24rpx 0 !important;
+}
+</style>
diff --git a/eims-ui-mobile/src/pages/login/index.vue b/eims-ui-mobile/src/pages/login/index.vue
index 46626e7..bc68841 100644
--- a/eims-ui-mobile/src/pages/login/index.vue
+++ b/eims-ui-mobile/src/pages/login/index.vue
@@ -32,14 +32,21 @@
       />
     </wd-cell-group>
     <view class="footer">
-      <view class="w-full text-end">
-        <wd-checkbox v-model="rember" shape="square" @change="handleChange">
-          璁颁綇瀵嗙爜
+      <view>
+        <wd-checkbox v-model="rember" @change="handleChange">
+          <text class="rember-text">璁颁綇瀵嗙爜</text>
         </wd-checkbox>
       </view>
       <wd-button class="mt-6" type="primary" size="large" @click="handleSubmit" block>
         鎻愪氦
       </wd-button>
+
+      <view class="copyright-info">
+        <text>
+          涓婃捣鍏板疂浼犳劅绉戞妧鑲′唤鏈夐檺鍏徃
+        </text>
+
+      </view>
     </view>
   </wd-form>
 </template>
@@ -128,6 +135,20 @@
 
 <style scoped lang="scss">
 .footer {
-  padding: 12px;
+  padding: 24rpx;
+}
+.rember-text {
+  font-size: 24rpx;
+  color: $uni-text-color-grey;
+}
+
+.copyright-info {
+  position: absolute;
+  bottom: 20rpx;
+  width: 100%;
+  display: flex;
+  justify-content: center;
+  color: $uni-text-color-disable;
+  font-size: 24rpx;
 }
 </style>
diff --git a/eims-ui-mobile/src/service/equ.d.ts b/eims-ui-mobile/src/service/equ.d.ts
new file mode 100644
index 0000000..7807f19
--- /dev/null
+++ b/eims-ui-mobile/src/service/equ.d.ts
@@ -0,0 +1,124 @@
+export interface EquVO {
+  /**
+   *
+   */
+  equId: number | string;
+
+  /**
+   * 璧勪骇缂栧彿
+   */
+  assetNo: string;
+  /**
+   * 璁惧缂栫爜
+   */
+  equCode: string;
+
+  /**
+   * 璁惧鍚嶇О
+
+   */
+  equName: string;
+  /**
+   * 璁惧绫诲瀷
+
+   */
+  equTypeName: string;
+
+  /**
+   * 鍨嬪彿
+   */
+  modelNo: string;
+
+  /**
+   * 鍒堕�犲晢
+   */
+  madeIn: string;
+
+  /**
+   * 棰濆害鍔熺巼
+   */
+  ratedPower: number;
+
+  /**
+   * 閾墝淇℃伅
+   */
+  plateInfo: string;
+
+  /**
+   * 閲囪喘鏃ユ湡
+   */
+  purchaseDate: string;
+
+  /**
+   * 鐘舵��
+   */
+  status: string;
+
+  /**
+   * 鎵�鍦ㄥ満鎵�
+   */
+  location: string;
+
+  /**
+   * 浣跨敤閮ㄩ棬锛堝叧鑱攊d锛�
+   */
+  deptUsed: number;
+  /**
+   * 浣跨敤閮ㄩ棬鍚嶇О
+   */
+  deptName: number;
+
+  /**
+   * 璐d换浜�(鍏宠仈id)
+   */
+  respPerson: number;
+  /**
+   * 璐d换浜�
+   */
+  respPersonName: string;
+
+  /**
+   * 鑱旂郴鐢佃瘽
+   */
+  contactPhone: string;
+
+  /**
+   * 姝e紡浣跨敤鏃ユ湡
+   */
+  deployDate: string;
+
+  /**
+   * 寮�濮嬭瘯鐢ㄦ棩鏈�
+   */
+  trialDate: string;
+
+  /**
+   * 璁″垝楠屾敹鏃ユ湡
+   */
+  planAcceptDate: string;
+
+  /**
+   * 瀹為檯楠屾敹鏃ユ湡
+   */
+  actualAcceptDate: string;
+
+  /**
+   * 瀵煎叆鐘舵�侊紙瀛楀吀锛�
+   */
+  importStatus: number;
+
+  /**
+   * 鐩樼偣鏍囧織
+   */
+  inventoryFlag: number;
+
+  /**
+   * 涓婃鐩樼偣鏃ユ湡
+   */
+  inventoryDate: string;
+
+  /**
+   * 浣跨敤骞撮檺
+   */
+  serviceLife: number;
+}
diff --git a/eims-ui-mobile/src/service/equ.ts b/eims-ui-mobile/src/service/equ.ts
new file mode 100644
index 0000000..429e521
--- /dev/null
+++ b/eims-ui-mobile/src/service/equ.ts
@@ -0,0 +1,9 @@
+import { http } from '@/utils/http'
+import type { EquVO } from './equ.d'
+
+/**
+ * 璁惧鍒楄〃
+ */
+export const getEquList = (params: any) => {
+  return http.get<EquVO[]>('/eims/equ/list', params)
+}
diff --git a/eims-ui-mobile/src/service/inspect.d.ts b/eims-ui-mobile/src/service/inspect.d.ts
new file mode 100644
index 0000000..69b0430
--- /dev/null
+++ b/eims-ui-mobile/src/service/inspect.d.ts
@@ -0,0 +1,150 @@
+/**
+ * 鐐规姹囨��
+ */
+export interface InspectStVO {
+  /**
+   *
+   */
+  id: number | string;
+
+  /**
+   *
+   */
+  title: string;
+
+  /**
+   *
+   */
+  equId: number | string;
+  status: string;
+
+  /**
+   *
+   */
+  planTime: string;
+
+  /**
+   * 淇濆吇浜�
+   */
+  maintUser: number;
+
+  /**
+   * 楠岃瘉浜�
+   */
+  verifyUser: number;
+  verifyTime: string;
+
+  /**
+   * 鐗硅浜嬮」
+   */
+  specialNote: string;
+
+  /**
+   * 澶囨敞
+   */
+  remark: string;
+}
+
+
+/**
+ * 鐐规璁板綍
+ */
+export interface InspectRecordVO {
+  /**
+   * id
+   */
+  id: string | number;
+
+  /**
+   * 璁惧di
+   */
+  equId: string | number;
+  /**
+   * 璁惧鍚嶇О
+
+   */
+  equName: string;
+  /**
+   * 璧勪骇缂栧彿
+
+   */
+  assteNo: string;
+
+  /**
+   * 鐐规鍚嶇О
+   */
+  inspName: string;
+
+  /**
+   * 鐐规鎻忚堪
+   */
+  inspDesc: string;
+
+  /**
+   * 鐘舵��
+   */
+  status: string;
+
+  /**
+   * 鐐规缂栫爜
+   */
+  inspCode: string;
+
+  /**
+   * 鍊艰褰曟柟寮忥紙瀛楀吀锛�
+   */
+  recordMode: string;
+
+  /**
+   * 鍙傝�冨��
+   */
+  referenceValue: string;
+
+  /**
+   * 涓婇檺
+   */
+  upperLimit: string;
+
+  /**
+   * 涓嬮檺
+   */
+  lowLimit: string;
+
+  /**
+   * 妫�鏌ュ��
+   */
+  checkValue: string;
+
+  /**
+   * 鐐规缁撴灉锛堝瓧鍏革級
+   */
+  inspResult: string;
+
+  /**
+   * 鐐规鏃堕棿
+   */
+  inspTime: string;
+
+  /**
+   * 璁″垝鐐规鏃ユ湡
+   */
+  planTime: string;
+
+  /**
+   * 楠岃瘉浜�
+   */
+  verifyUser: number;
+
+  /**
+   * 璁″垝id
+   */
+  planId: string | number;
+
+  /**
+   * 澶囨敞
+   */
+  remark: string;
+
+}
+
+
diff --git a/eims-ui-mobile/src/service/inspect.ts b/eims-ui-mobile/src/service/inspect.ts
new file mode 100644
index 0000000..55da5d3
--- /dev/null
+++ b/eims-ui-mobile/src/service/inspect.ts
@@ -0,0 +1,29 @@
+import { http } from '@/utils/http'
+import type { InspectStVO, InspectRecordVO } from './inspect.d'
+
+/**
+ * 鐐规姹囨�诲垪琛�
+ */
+export const getInspStList = (params: any) => {
+  params.viewMode = 'Day'
+  return http.get<InspectStVO[]>('/eims/inspectSt/list', params)
+}
+
+/**
+ * 鐐规姹囨�诲垪琛ㄤ笅鐐规璁板綍鍒楄〃
+ */
+export const getInspStRecordList = (params: any) => {
+  return http.get<InspectRecordVO[]>('/eims/inspRecord/stList', params)
+}
+
+/**
+ * 鏇存柊鐐规璁板綍
+ * @param data
+ */
+export const updateInspRecord = (data: any) => {
+  return http.post<void>('/eims/inspRecord', data)
+}
+
+export const updateInspRecordBatch = (data: any) => {
+  return http.put<void>('/eims/inspRecord/editBatch', data)
+}
diff --git a/eims-ui-mobile/src/static/ico/ico-ok.png b/eims-ui-mobile/src/static/ico/ico-ok.png
new file mode 100644
index 0000000..8e4eddb
--- /dev/null
+++ b/eims-ui-mobile/src/static/ico/ico-ok.png
Binary files differ
diff --git a/eims-ui-mobile/src/static/images/camera.png b/eims-ui-mobile/src/static/images/camera.png
new file mode 100644
index 0000000..cbe7fa2
--- /dev/null
+++ b/eims-ui-mobile/src/static/images/camera.png
Binary files differ
diff --git a/eims-ui-mobile/src/static/menu/menu0.png b/eims-ui-mobile/src/static/menu/menu0.png
new file mode 100644
index 0000000..9e978e4
--- /dev/null
+++ b/eims-ui-mobile/src/static/menu/menu0.png
Binary files differ
diff --git a/eims-ui-mobile/src/static/menu/menu1.png b/eims-ui-mobile/src/static/menu/menu1.png
index 6f2fa77..733c5b6 100644
--- a/eims-ui-mobile/src/static/menu/menu1.png
+++ b/eims-ui-mobile/src/static/menu/menu1.png
Binary files differ
diff --git a/eims-ui-mobile/src/static/menu/menu2.png b/eims-ui-mobile/src/static/menu/menu2.png
index 5720ac0..c9948fe 100644
--- a/eims-ui-mobile/src/static/menu/menu2.png
+++ b/eims-ui-mobile/src/static/menu/menu2.png
Binary files differ
diff --git a/eims-ui-mobile/src/static/menu/menu3.png b/eims-ui-mobile/src/static/menu/menu3.png
new file mode 100644
index 0000000..b9eb77d
--- /dev/null
+++ b/eims-ui-mobile/src/static/menu/menu3.png
Binary files differ
diff --git a/eims-ui-mobile/src/static/menu/menu4.png b/eims-ui-mobile/src/static/menu/menu4.png
new file mode 100644
index 0000000..9cf1e31
--- /dev/null
+++ b/eims-ui-mobile/src/static/menu/menu4.png
Binary files differ
diff --git a/eims-ui-mobile/src/static/menu/menu5.png b/eims-ui-mobile/src/static/menu/menu5.png
new file mode 100644
index 0000000..9dbf0f6
--- /dev/null
+++ b/eims-ui-mobile/src/static/menu/menu5.png
Binary files differ
diff --git a/eims-ui-mobile/src/style/index.scss b/eims-ui-mobile/src/style/index.scss
index feed87c..ad6d70e 100644
--- a/eims-ui-mobile/src/style/index.scss
+++ b/eims-ui-mobile/src/style/index.scss
@@ -29,10 +29,20 @@
 .icon-color-base {
   color: $uni-color-primary;
 }
+.icon-color-gray {
+  color: $uni-text-color-grey;
+}
+.icon-color-success {
+  color: $uni-color-success;
+}
 
 .bg-base {
   background: $uni-bg-color-grey;
 }
 
+.bg-primary {
+  background: $uni-color-primary;
+}
+
 
 
diff --git a/eims-ui-mobile/src/types/auto-import.d.ts b/eims-ui-mobile/src/types/auto-import.d.ts
index 117a03d..5dedc7d 100644
--- a/eims-ui-mobile/src/types/auto-import.d.ts
+++ b/eims-ui-mobile/src/types/auto-import.d.ts
@@ -79,12 +79,10 @@
   const useCssVars: typeof import('vue')['useCssVars']
   const useId: typeof import('vue')['useId']
   const useModel: typeof import('vue')['useModel']
-  const useNavbarWeixin: (typeof import('../hooks/useNavbarWeixin'))['default']
   const useRequest: typeof import('../hooks/useRequest')['default']
   const useSlots: typeof import('vue')['useSlots']
   const useTemplateRef: typeof import('vue')['useTemplateRef']
   const useUpload: typeof import('../hooks/useUpload')['default']
-  const useUpload2: typeof import('../hooks/useUpload2')['default']
   const watch: typeof import('vue')['watch']
   const watchEffect: typeof import('vue')['watchEffect']
   const watchPostEffect: typeof import('vue')['watchPostEffect']
diff --git a/eims-ui-mobile/src/types/uni-pages.d.ts b/eims-ui-mobile/src/types/uni-pages.d.ts
index 4e88f42..7b066d0 100644
--- a/eims-ui-mobile/src/types/uni-pages.d.ts
+++ b/eims-ui-mobile/src/types/uni-pages.d.ts
@@ -5,7 +5,11 @@
 
 interface NavigateToOptions {
   url: "/pages/home/index" |
+       "/pages/equ/equ-list" |
        "/pages/equ/index" |
+       "/pages/inspect/insp-add" |
+       "/pages/inspect/insp-record" |
+       "/pages/inspect/insp-st" |
        "/pages/login/index" |
        "/pages/my/index" |
        "/pages/spare/index";
diff --git a/eims-ui-mobile/src/utils/http.ts b/eims-ui-mobile/src/utils/http.ts
index 4106b0b..f1d74ce 100644
--- a/eims-ui-mobile/src/utils/http.ts
+++ b/eims-ui-mobile/src/utils/http.ts
@@ -2,6 +2,9 @@
 import { useUserStore, useAccessStore } from '@/store'
 
 export const http = <T>(options: CustomRequestOptions) => {
+  uni.showLoading({
+    title: '鍔犺浇涓�',
+  })
   // 1. 杩斿洖 Promise 瀵硅薄
   return new Promise<IResData<T>>((resolve, reject) => {
     uni.request({
@@ -12,11 +15,26 @@
       // #endif
       // 鍝嶅簲鎴愬姛
       success(res) {
+        uni.hideLoading()
         // 鐘舵�佺爜 2xx锛屽弬鑰� axios 鐨勮璁�
         if (res.statusCode >= 200 && res.statusCode < 300) {
           // 2.1 鎻愬彇鏍稿績鏁版嵁 res.data
           if ((res.data as IResData<T>).code === 200) {
             resolve(((res.data as IResData<T>).data || res.data) as IResData<T>)
+          } else if ((res.data as IResData<T>).code === 401) {
+            uni.showToast({
+              icon: 'none',
+              title: '鐧诲綍瓒呮椂锛岃閲嶆柊鐧诲綍锛�',
+            })
+            // 401閿欒  -> 娓呯悊鐢ㄦ埛淇℃伅锛岃烦杞埌鐧诲綍椤�
+            useAccessStore().clearAccessInfo()
+            useUserStore().clearUserInfo()
+            const loginRoute = '/pages/login/index'
+            // 閲嶆柊鐧诲綍鍚庤繑鍥為〉闈�
+            const url = '/pages/home/index'
+            const redirectRoute = `${loginRoute}?redirect=${encodeURIComponent(url)}`
+            uni.navigateTo({ url: redirectRoute })
+            reject(res)
           } else {
             uni.showToast({
               icon: 'none',
@@ -46,6 +64,7 @@
           title: '缃戠粶閿欒锛屾崲涓綉缁滆瘯璇�',
         })
         reject(err)
+        uni.hideLoading()
       },
     })
   })
@@ -85,5 +104,19 @@
   })
 }
 
+export const httpPut = <T>(
+  url: string,
+  data?: Record<string, any>,
+  query?: Record<string, any>,
+) => {
+  return http<T>({
+    url,
+    query,
+    data,
+    method: 'PUT',
+  })
+}
+
 http.get = httpGet
 http.post = httpPost
+http.put = httpPut

--
Gitblit v1.9.3