From 0e2d3f632e5286485321fc15a50b2531e53d6094 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期四, 04 六月 2026 13:53:32 +0800
Subject: [PATCH] 马铃薯app 1.客户往来、供应商往来查询展示修改

---
 src/api/salesManagement/indicatorStats.js                       |   38 ++
 src/pages.json                                                  |    9 
 src/pages/works.vue                                             |   61 +++
 src/pages/qualityManagement/finalInspection/index.vue           |    6 
 src/pages/procurementManagement/paymentLedger/index.vue         |   12 
 src/api/salesManagement/deliveryLedger.js                       |   11 
 src/pages/sales/receiptPaymentLedger/index.vue                  |   18 
 src/pages/procurementManagement/paymentLedger/detail.vue        |  190 ++++------
 src/pages/inventoryManagement/environmentalMonitoring/index.vue |  373 ++++++++++++++++++++
 src/api/procurementManagement/paymentLedger.js                  |   13 
 src/pages/qualityManagement/processInspection/index.vue         |    6 
 src/pages/sales/receiptPaymentLedger/detail.vue                 |  192 ++++------
 src/api/equipmentManagement/deviceArea.js                       |   55 +++
 src/config/oaWorkbench.js                                       |   65 ---
 src/api/inventoryManagement/environmentalMonitoring.js          |    8 
 src/pages/qualityManagement/materialInspection/index.vue        |    8 
 16 files changed, 729 insertions(+), 336 deletions(-)

diff --git a/src/api/equipmentManagement/deviceArea.js b/src/api/equipmentManagement/deviceArea.js
new file mode 100644
index 0000000..2671840
--- /dev/null
+++ b/src/api/equipmentManagement/deviceArea.js
@@ -0,0 +1,55 @@
+import request from "@/utils/request";
+
+export function getDeviceAreaTree(params) {
+  return request({
+    url: "/device/area/tree",
+    method: "get",
+    params,
+  });
+}
+
+export function getDeviceAreaTreeWithDevices(params) {
+  return request({
+    url: "/device/area/treeWithDevices",
+    method: "get",
+  });
+}
+
+export function getDeviceAreaPage(params) {
+  return request({
+    url: "/device/area/page",
+    method: "get",
+    params,
+  });
+}
+
+export function getDeviceAreaDetail(id) {
+  return request({
+    url: `/device/area/${id}`,
+    method: "get",
+  });
+}
+
+export function addDeviceArea(data) {
+  return request({
+    url: "/device/area",
+    method: "post",
+    data,
+  });
+}
+
+export function updateDeviceArea(data) {
+  return request({
+    url: "/device/area",
+    method: "put",
+    data,
+  });
+}
+
+export function deleteDeviceArea(ids) {
+  return request({
+    url: "/device/area",
+    method: "delete",
+    data: ids,
+  });
+}
diff --git a/src/api/inventoryManagement/environmentalMonitoring.js b/src/api/inventoryManagement/environmentalMonitoring.js
new file mode 100644
index 0000000..f0b7187
--- /dev/null
+++ b/src/api/inventoryManagement/environmentalMonitoring.js
@@ -0,0 +1,8 @@
+import request from "@/utils/request";
+
+export const getEnvironmentalRealData = () => {
+  return request({
+    url: "/iot/getRealData",
+    method: "get",
+  });
+};
diff --git a/src/api/procurementManagement/paymentLedger.js b/src/api/procurementManagement/paymentLedger.js
index 31aff29..6b988c3 100644
--- a/src/api/procurementManagement/paymentLedger.js
+++ b/src/api/procurementManagement/paymentLedger.js
@@ -1,20 +1,19 @@
 // 閲囪喘鍙拌处椤甸潰鎺ュ彛
 import request from "@/utils/request";
-
-// 鍒嗛〉鏌ヨ
+/** 浠樻鍙拌处 - 渚涘簲鍟嗗線鏉ユ眹鎬� */
 export function paymentLedgerList(query) {
   return request({
-    url: "/purchase/paymentRegistration/supplierNameListPage",
+    url: "/purchase/report/supplierTransactions",
     method: "get",
     params: query,
   });
 }
 
-// 鍒嗛〉鏌ヨ
-export function paymentRecordList(supplierId) {
+/** 浠樻鍙拌处 - 渚涘簲鍟嗗線鏉ユ槑缁� */
+export function paymentRecordList(params) {
   return request({
-    url: "/purchase/paymentRegistration/supplierNameListPageDetails",
+    url: "/purchase/report/supplierTransactionsDetails",
     method: "get",
-    params: supplierId,
+    params,
   });
 }
diff --git a/src/api/salesManagement/deliveryLedger.js b/src/api/salesManagement/deliveryLedger.js
new file mode 100644
index 0000000..861f95d
--- /dev/null
+++ b/src/api/salesManagement/deliveryLedger.js
@@ -0,0 +1,11 @@
+// 鍙戣揣鍙拌处椤甸潰鎺ュ彛
+import request from "@/utils/request";
+
+// 鍒嗛〉鏌ヨ鍙戣揣鍙拌处锛堟牴鎹鎴稩D锛�
+export function deliveryLedgerListPage(query) {
+  return request({
+    url: "/shippingInfo/listPage",
+    method: "get",
+    params: query,
+  });
+}
diff --git a/src/api/salesManagement/indicatorStats.js b/src/api/salesManagement/indicatorStats.js
new file mode 100644
index 0000000..c29eac3
--- /dev/null
+++ b/src/api/salesManagement/indicatorStats.js
@@ -0,0 +1,38 @@
+// 鎸囨爣缁熻椤甸潰鎺ュ彛
+import request from "@/utils/request";
+
+// 澶撮儴缁熻鎺ュ彛
+export function getTotalStatistics(query) {
+  return request({
+    url: "/metricStatistics/total",
+    method: "get",
+    params: query,
+  });
+}
+
+// 鏌辩姸鍥炬暟鎹帴鍙�
+export function getStatisticsTable(query) {
+  return request({
+    url: "/metricStatistics/statisticsTable",
+    method: "get",
+    params: query,
+  });
+}
+
+// 瀹㈡埛寰�鏉ュ垪琛�
+export function customewTransactions(query) {
+  return request({
+    url: "/metricStatistics/customewTransactions",
+    method: "get",
+    params: query,
+  });
+}
+
+// 瀹㈡埛寰�鏉ユ槑缁�
+export function customewTransactionsDetails(query) {
+  return request({
+    url: "/metricStatistics/customewTransactionsDetails",
+    method: "get",
+    params: query,
+  });
+}
diff --git a/src/config/oaWorkbench.js b/src/config/oaWorkbench.js
index e4f6d7a..29428ff 100644
--- a/src/config/oaWorkbench.js
+++ b/src/config/oaWorkbench.js
@@ -1,69 +1,8 @@
-import { OA_NAV } from "./oaPaths.js";
-
 /**
  * OA 妯″潡鍒嗙粍锛堝伐浣滃彴灞曠ず / 鏂囨。瀵圭収锛�
+ * 娉細浜轰簨绠$悊/鍋囧嫟绠$悊/鎶ラ攢绠$悊/瀹℃壒绠$悊 宸茶縼绉昏嚦瀵瑰簲涓氬姟妯″潡
  */
-export const OA_MODULES = [
-  {
-    key: "HrManage",
-    name: "浜轰簨绠$悊",
-    children: [
-      // { label: "鍛樺伐妗f", icon: "/static/images/icon/renyuanxinzi.svg", path: OA_NAV.staffArchive },
-      // { label: "鍛樺伐鍚堝悓", icon: "/static/images/icon/hetongguanli.svg", path: OA_NAV.staffContract },
-      { label: "杞鐢宠", icon: "/static/images/icon/hetongguanli.svg", path: OA_NAV.regularApply },
-      { label: "璋冨矖鐢宠", icon: "/static/images/icon/renyuanxinzi.svg", path: OA_NAV.transferApply },
-      // { label: "绂昏亴鐢宠", icon: "/static/images/icon/qingjiaguanli.svg", path: OA_NAV.resignApply },
-      { label: "宸ヤ綔浜ゆ帴", icon: "/static/images/icon/gongchuguanli.svg", path: OA_NAV.workHandover },
-      // { label: "宀椾綅绠$悊", icon: "/static/images/icon/gongxuguanli.svg", path: OA_NAV.postManage },
-    ],
-  },
-  {
-    key: "AttendManage",
-    name: "鍋囧嫟绠$悊",
-    children: [
-      { label: "璇峰亣鐢宠", icon: "/static/images/icon/qingjiaguanli.svg", path: OA_NAV.leaveApply },
-      { label: "鍔犵彮鐢宠", icon: "/static/images/icon/dakaqiandao.svg", path: OA_NAV.overtimeApply },
-    ],
-  },
-  {
-    key: "ReimburseManage",
-    name: "鎶ラ攢绠$悊",
-    children: [
-      { label: "宸梾鎶ラ攢", icon: "/static/images/icon/chuchaiguanli.svg", path: OA_NAV.travelReimburse },
-      { label: "璐圭敤鎶ラ攢", icon: "/static/images/icon/baoxiaoguanli.svg", path: OA_NAV.costReimburse },
-    ],
-  },
-  // {
-  //   key: "ContractManage",
-  //   name: "鍚堝悓绠$悊",
-  //   children: [
-  //     { label: "閲囪喘鍚堝悓", icon: "/static/images/icon/caigoutaizhang.svg", path: OA_NAV.purchaseContract },
-  //     { label: "閿�鍞悎鍚�", icon: "/static/images/icon/xiaoshoutaizhang.svg", path: OA_NAV.saleContract },
-  //   ],
-  // },
-  {
-    key: "ApproveManage",
-    name: "瀹℃壒绠$悊",
-    children: [
-      { label: "瀹℃壒鍒楄〃", icon: "/static/images/icon/xietongshenpi.svg", path: OA_NAV.approveList },
-      { label: "瀹℃壒妯℃澘", icon: "/static/images/icon/guizhangzhidu.svg", path: OA_NAV.approveTemplate },
-    ],
-  },
-  // {
-  //   key: "EnterpriseNews",
-  //   name: "浼佷笟鏂伴椈",
-  //   children: [
-  //     { label: "浼佷笟鏂伴椈", icon: "/static/images/icon/zhishiku.svg", path: OA_NAV.enterpriseNews },
-  //   ],
-  // },
-  // {
-  //   key: "NoticeAnnouncement",
-  //   name: "鍏憡閫氱煡",
-  //   children: [
-  //     { label: "鍏憡閫氱煡", icon: "/static/images/icon/tongzhigonggao.svg", path: OA_NAV.noticeAnnouncement },
-  //   ],
-  // },
-];
+export const OA_MODULES = [];
 
 /** 宸ヤ綔鍙版墎骞宠彍鍗曪紙绾墠绔厤缃級 */
 export const OA_WORKBENCH_ITEMS = OA_MODULES.flatMap(module =>
diff --git a/src/pages.json b/src/pages.json
index 1aa49ad..3e0941a 100644
--- a/src/pages.json
+++ b/src/pages.json
@@ -922,6 +922,13 @@
       }
     },
     {
+      "path": "pages/inventoryManagement/environmentalMonitoring/index",
+      "style": {
+        "navigationBarTitleText": "鐜妫�娴�",
+        "navigationStyle": "custom"
+      }
+    },
+    {
       "path": "pages/safeProduction/safeQualifications/index",
       "style": {
         "navigationBarTitleText": "瑙勭▼涓庤祫璐�",
@@ -1148,7 +1155,7 @@
     {
       "path": "pages/qualityManagement/materialInspection/index",
       "style": {
-        "navigationBarTitleText": "鍘熸潗鏂欐楠�",
+        "navigationBarTitleText": "鍘熸枡妫�楠�",
         "navigationStyle": "custom"
       }
     },
diff --git a/src/pages/inventoryManagement/environmentalMonitoring/index.vue b/src/pages/inventoryManagement/environmentalMonitoring/index.vue
new file mode 100644
index 0000000..a5bc8d9
--- /dev/null
+++ b/src/pages/inventoryManagement/environmentalMonitoring/index.vue
@@ -0,0 +1,373 @@
+<template>
+  <view class="environment-page">
+    <PageHeader title="鐜鐩戞祴" @back="goBack" />
+
+    <scroll-view scroll-y class="page-scroll">
+      <view class="summary-card">
+        <view class="summary-header">
+          <text class="summary-title">瀹炴椂鐜姒傝</text>
+          <text class="summary-desc">姣�15绉掕嚜鍔ㄥ埛鏂颁竴娆¤澶囩幆澧冩暟鎹�</text>
+        </view>
+
+        <view v-if="deviceCards.length" class="summary-grid">
+          <view class="summary-item">
+            <text class="summary-label">璁惧鏁伴噺</text>
+            <text class="summary-value">{{ deviceCards.length }}</text>
+          </view>
+          <view class="summary-item">
+            <text class="summary-label">骞冲潎娓╁害</text>
+            <text class="summary-value">{{ averageMetrics.temperature }}</text>
+          </view>
+          <view class="summary-item">
+            <text class="summary-label">骞冲潎婀垮害</text>
+            <text class="summary-value">{{ averageMetrics.humidity }}</text>
+          </view>
+          <view class="summary-item">
+            <text class="summary-label">骞冲潎鍏夌収</text>
+            <text class="summary-value">{{ averageMetrics.light }}</text>
+          </view>
+        </view>
+
+        <view v-else class="empty-block">
+          <text class="empty-text">鏆傛棤鐜鏁版嵁</text>
+        </view>
+      </view>
+
+      <view class="section-block">
+        <view class="section-header">
+          <text class="section-title">璁惧鐩戞祴鍒楄〃</text>
+        </view>
+
+        <view v-if="deviceCards.length" class="device-list">
+          <view
+            v-for="item in deviceCards"
+            :key="item.name"
+            class="device-card"
+          >
+            <view class="device-card__header">
+              <view class="device-base">
+                <text class="device-name">{{ item.name }}</text>
+                <text class="device-meta">璁惧缂栫爜锛歿{ item.guid || "--" }}</text>
+              </view>
+              <text class="device-tag">鍦ㄧ嚎鐩戞祴</text>
+            </view>
+
+            <view class="metrics-grid">
+              <view
+                v-for="metric in metricConfig"
+                :key="metric.key"
+                class="metric-item"
+              >
+                <text class="metric-label">{{ metric.label }}</text>
+                <text class="metric-value" :style="{ color: metric.color }">
+                  {{ item[metric.key] }}
+                </text>
+              </view>
+            </view>
+          </view>
+        </view>
+
+        <view v-else class="empty-block">
+          <text class="empty-text">鏆傛棤璁惧鐩戞祴淇℃伅</text>
+        </view>
+      </view>
+    </scroll-view>
+  </view>
+</template>
+
+<script setup>
+import { computed, ref } from "vue";
+import { onHide, onShow, onUnload } from "@dcloudio/uni-app";
+import PageHeader from "@/components/PageHeader.vue";
+import { getEnvironmentalRealData } from "@/api/inventoryManagement/environmentalMonitoring";
+
+const POLL_INTERVAL = 17000;
+const TEMP_MARK_1 = "\u2103";
+const TEMP_MARK_2 = "\u00B0C";
+const TEMP_UNIT = TEMP_MARK_2;
+
+const latestDevices = ref([]);
+let pollTimer = null;
+
+const metricConfig = [
+  { key: "temperature", label: "娓╁害", color: "#ff7a59", unit: TEMP_UNIT },
+  { key: "humidity", label: "婀垮害", color: "#1ea7fd", unit: "%RH" },
+  { key: "co2", label: "CO2", color: "#12c48b", unit: "ppm" },
+  { key: "light", label: "鍏夌収", color: "#8b5cf6", unit: "Lux" },
+];
+
+const extractNumericValue = (rawValue) => {
+  const matched = String(rawValue ?? "").match(/-?\d+(\.\d+)?/);
+  return matched ? Number(matched[0]) : 0;
+};
+
+const normalizeMetricObject = (source, index) => {
+  const normalized = {
+    name: source?.deviceName || source?.name || source?.deviceNo || `璁惧${index + 1}`,
+    guid: source?.guid || source?.deviceGuid || source?.id || "",
+    deviceCode: source?.deviceCode || source?.deviceNo || source?.code || "",
+    temperature: 0,
+    humidity: 0,
+    co2: 0,
+    light: 0,
+  };
+
+  Object.entries(source || {}).forEach(([key, value]) => {
+    const rawText = String(value ?? "");
+
+    if (rawText.includes(TEMP_MARK_1) || rawText.includes(TEMP_MARK_2)) {
+      normalized.temperature = extractNumericValue(rawText);
+      return;
+    }
+    if (rawText.includes("%RH")) {
+      normalized.humidity = extractNumericValue(rawText);
+      return;
+    }
+    if (rawText.includes("ppm")) {
+      normalized.co2 = extractNumericValue(rawText);
+      return;
+    }
+    if (rawText.includes("Lux")) {
+      normalized.light = extractNumericValue(rawText);
+      return;
+    }
+
+    if (key === "temperature") {
+      normalized.temperature = extractNumericValue(rawText);
+    } else if (key === "humidity") {
+      normalized.humidity = extractNumericValue(rawText);
+    } else if (key === "co2") {
+      normalized.co2 = extractNumericValue(rawText);
+    } else if (key === "light") {
+      normalized.light = extractNumericValue(rawText);
+    }
+  });
+
+  return normalized;
+};
+
+const formatMetric = (value, unit) => `${Number(value || 0).toFixed(2)}${unit}`;
+
+const deviceCards = computed(() =>
+  latestDevices.value.map((item) => ({
+    name: item.name,
+    guid: item.guid,
+    deviceCode: item.deviceCode,
+    temperature: formatMetric(item.temperature, TEMP_UNIT),
+    humidity: formatMetric(item.humidity, "%RH"),
+    co2: formatMetric(item.co2, "ppm"),
+    light: formatMetric(item.light, "Lux"),
+  }))
+);
+
+const averageMetrics = computed(() => {
+  if (!latestDevices.value.length) {
+    return {
+      temperature: `0.00${TEMP_UNIT}`,
+      humidity: "0.00%RH",
+      light: "0.00Lux",
+    };
+  }
+
+  const total = latestDevices.value.reduce(
+    (result, item) => {
+      result.temperature += Number(item.temperature || 0);
+      result.humidity += Number(item.humidity || 0);
+      result.light += Number(item.light || 0);
+      return result;
+    },
+    { temperature: 0, humidity: 0, light: 0 }
+  );
+
+  const count = latestDevices.value.length;
+
+  return {
+    temperature: formatMetric(total.temperature / count, TEMP_UNIT),
+    humidity: formatMetric(total.humidity / count, "%RH"),
+    light: formatMetric(total.light / count, "Lux"),
+  };
+});
+
+const fetchRealData = async () => {
+  try {
+    const res = await getEnvironmentalRealData();
+    const dataList = Array.isArray(res?.data) ? res.data : [];
+    latestDevices.value = dataList.map((item, index) => normalizeMetricObject(item, index));
+  } catch (error) {
+    latestDevices.value = [];
+  }
+};
+
+const clearPolling = () => {
+  if (pollTimer) {
+    clearInterval(pollTimer);
+    pollTimer = null;
+  }
+};
+
+const startPolling = () => {
+  clearPolling();
+  fetchRealData();
+  pollTimer = setInterval(fetchRealData, POLL_INTERVAL);
+};
+
+const goBack = () => {
+  uni.navigateBack();
+};
+
+onShow(() => {
+  startPolling();
+});
+
+onHide(() => {
+  clearPolling();
+});
+
+onUnload(() => {
+  clearPolling();
+});
+
+</script>
+
+<style scoped lang="scss">
+.environment-page {
+  min-height: 100vh;
+  background: #f4f7fb;
+}
+
+.page-scroll {
+  height: calc(100vh - 88rpx);
+  padding: 24rpx;
+  box-sizing: border-box;
+}
+
+.summary-card,
+.section-block {
+  background: #ffffff;
+  border-radius: 24rpx;
+  padding: 28rpx;
+  box-shadow: 0 8rpx 24rpx rgba(31, 54, 88, 0.06);
+}
+
+.section-block {
+  margin-top: 24rpx;
+}
+
+.summary-header,
+.section-header {
+  margin-bottom: 24rpx;
+}
+
+.summary-title,
+.section-title {
+  display: block;
+  font-size: 32rpx;
+  font-weight: 600;
+  color: #1d344f;
+}
+
+.summary-desc {
+  display: block;
+  margin-top: 12rpx;
+  font-size: 24rpx;
+  color: #7b8aa0;
+}
+
+.summary-grid,
+.metrics-grid {
+  display: flex;
+  flex-wrap: wrap;
+  gap: 20rpx;
+}
+
+.summary-item {
+  width: calc(50% - 10rpx);
+  padding: 24rpx;
+  border-radius: 20rpx;
+  background: linear-gradient(135deg, #f8fbff 0%, #eef5ff 100%);
+  box-sizing: border-box;
+}
+
+.summary-label,
+.metric-label {
+  display: block;
+  font-size: 24rpx;
+  color: #7b8aa0;
+}
+
+.summary-value,
+.metric-value {
+  display: block;
+  margin-top: 14rpx;
+  font-size: 30rpx;
+  font-weight: 600;
+  color: #1d344f;
+}
+
+.device-list {
+  display: flex;
+  flex-direction: column;
+  gap: 20rpx;
+}
+
+.device-card {
+  padding: 24rpx;
+  border-radius: 20rpx;
+  background: #f8fbff;
+}
+
+.device-card__header {
+  display: flex;
+  align-items: flex-start;
+  justify-content: space-between;
+  margin-bottom: 20rpx;
+  gap: 20rpx;
+}
+
+.device-base {
+  min-width: 0;
+  flex: 1;
+}
+
+.device-name {
+  display: block;
+  font-size: 30rpx;
+  font-weight: 600;
+  color: #1d344f;
+}
+
+.device-meta {
+  display: block;
+  margin-top: 8rpx;
+  font-size: 22rpx;
+  color: #7b8aa0;
+  word-break: break-all;
+}
+
+.device-tag {
+  flex-shrink: 0;
+  padding: 8rpx 16rpx;
+  border-radius: 999rpx;
+  background: rgba(18, 196, 139, 0.12);
+  font-size: 22rpx;
+  color: #12c48b;
+}
+
+.metric-item {
+  width: calc(50% - 10rpx);
+  padding: 20rpx;
+  border-radius: 16rpx;
+  background: #ffffff;
+  box-sizing: border-box;
+}
+
+.empty-block {
+  padding: 60rpx 0;
+  text-align: center;
+}
+
+.empty-text {
+  font-size: 26rpx;
+  color: #98a6b9;
+}
+</style>
diff --git a/src/pages/procurementManagement/paymentLedger/detail.vue b/src/pages/procurementManagement/paymentLedger/detail.vue
index 26f5cf5..a6d787b 100644
--- a/src/pages/procurementManagement/paymentLedger/detail.vue
+++ b/src/pages/procurementManagement/paymentLedger/detail.vue
@@ -3,27 +3,7 @@
     <!-- 浣跨敤閫氱敤椤甸潰澶撮儴缁勪欢 -->
     <PageHeader title="渚涘簲鍟嗗線鏉ヨ鎯�"
                 @back="goBack" />
-    <!-- 缁熻淇℃伅 -->
-    <view class="summary-info"
-          v-if="tableData.length > 0">
-      <view class="summary-item">
-        <text class="summary-label">鎬昏褰曟暟</text>
-        <text class="summary-value">{{ tableData.length }}</text>
-      </view>
-      <view class="summary-item">
-        <text class="summary-label">寮�绁ㄦ�婚噾棰�</text>
-        <text class="summary-value">{{ formatAmount(invoiceTotal) }}</text>
-      </view>
-      <view class="summary-item">
-        <text class="summary-label">鍥炴鎬婚噾棰�</text>
-        <text class="summary-value highlight">{{ formatAmount(receiptTotal) }}</text>
-      </view>
-      <view class="summary-item">
-        <text class="summary-label">搴旀敹鎬婚噾棰�</text>
-        <text class="summary-value danger">{{ formatAmount(unReceiptTotal) }}</text>
-      </view>
-    </view>
-    <!-- 鍥炴璁板綍鏄庣粏鍒楄〃 -->
+    <!-- 閲囪喘鍙拌处鏄庣粏 -->
     <view class="detail-list"
           v-if="tableData.length > 0">
       <view v-for="(item, index) in tableData"
@@ -36,98 +16,98 @@
                        size="16"
                        color="#ffffff"></up-icon>
             </view>
-            <text class="item-index">{{ index + 1 }}</text>
+            <text class="item-index">{{ item.purchaseContractNumber }}</text>
           </view>
-          <view class="item-date">{{ item.happenTime }}</view>
+          <view class="item-status">
+            <text class="status-tag"
+                  :class="getReceiptStatusClass(item.status)">{{ receiptStatusText[item.status] || '鏈煡鐘舵��' }}</text>
+          </view>
         </view>
         <up-divider></up-divider>
         <view class="item-details">
           <view class="detail-row">
-            <text class="detail-label">鍙戠エ閲戦(鍏�)</text>
-            <text class="detail-value">{{ formatAmount(item.invoiceAmount) }}</text>
+            <text class="detail-label">鍚堝悓绛捐鏃ユ湡</text>
+            <text class="detail-value">{{ item.executionDate }}</text>
           </view>
           <view class="detail-row">
-            <text class="detail-label">浠樻閲戦(鍏�)</text>
-            <text class="detail-value highlight">{{ formatAmount(item.currentPaymentAmount) }}</text>
+            <text class="detail-label">椤圭洰鍚嶇О</text>
+            <text class="detail-value">{{ item.projectName }}</text>
           </view>
           <view class="detail-row">
-            <text class="detail-label">搴斾粯閲戦(鍏�)</text>
-            <text class="detail-value danger">{{ formatAmount(item.payableAmount) }}</text>
-          </view>
-          <view class="detail-row">
-            <text class="detail-label">鍙戠敓鏃ユ湡</text>
-            <text class="detail-value">{{ item.paymentDate }}</text>
+            <text class="detail-label">鍚堝悓閲戦(鍏�)</text>
+            <text class="detail-value">{{ formatAmount(item.contractAmount) }}</text>
           </view>
         </view>
       </view>
     </view>
     <view v-else
           class="no-data">
-      <text>鏆傛棤鍥炴璁板綍</text>
+      <text>鏆傛棤閲囪喘鍙拌处璁板綍</text>
     </view>
   </view>
 </template>
 
 <script setup>
-  import { ref, computed, onMounted } from "vue";
-  import { onShow } from "@dcloudio/uni-app";
-  import {
-    paymentLedgerList,
-    paymentRecordList,
-  } from "@/api/procurementManagement/paymentLedger";
+  import { ref, onMounted } from "vue";
+  import { gePurchaseListPage } from "@/api/procurementManagement/invoiceEntry.js";
 
-  // 瀹㈡埛淇℃伅
-  const supplierId = ref("");
+  const supplierName = ref("");
 
   // 琛ㄦ牸鏁版嵁
   const tableData = ref([]);
 
-  const invoiceTotal = computed(() => {
-    return tableData.value.reduce((sum, item) => {
-      return sum + (parseFloat(item.invoiceAmount) || 0);
-    }, 0);
-  });
+  // 鏀惰揣鐘舵�佹枃鏈槧灏�
+  const receiptStatusText = {
+    1: '寰呮敹璐�',
+    2: '鏀惰揣涓�',
+    3: '宸叉敹璐�'
+  };
 
-  const receiptTotal = computed(() => {
-    return tableData.value.reduce((sum, item) => {
-      return sum + (parseFloat(item.receiptAmount) || 0);
-    }, 0);
-  });
-
-  const unReceiptTotal = computed(() => {
-    return tableData.value.reduce((sum, item) => {
-      return sum + (parseFloat(item.unReceiptAmount) || 0);
-    }, 0);
-  });
+  // 鏀惰揣鐘舵�佹爣绛炬牱寮�
+  const getReceiptStatusClass = (status) => {
+    const classMap = {
+      1: 'status-info',
+      2: 'status-warning',
+      3: 'status-success'
+    };
+    return classMap[status] || 'status-info';
+  };
 
   // 杩斿洖涓婁竴椤�
   const goBack = () => {
-    uni.removeStorageSync("supplierId");
+    uni.removeStorageSync("supplierName");
     uni.navigateBack();
   };
 
   // 鑾峰彇椤甸潰鍙傛暟
   const getPageParams = () => {
-    // 浠庢湰鍦板瓨鍌ㄨ幏鍙栦緵搴斿晢ID
-    const storedSupplierId = uni.getStorageSync("supplierId");
-    if (storedSupplierId) {
-      supplierId.value = storedSupplierId;
+    const storedSupplierName = uni.getStorageSync("supplierName");
+    if (storedSupplierName) {
+      supplierName.value = storedSupplierName;
     }
   };
 
   // 鏌ヨ鍒楄〃
   const getList = () => {
-    if (!supplierId.value) {
+    if (!supplierName.value) {
       uni.showToast({
-        title: "瀹㈡埛淇℃伅缂哄け",
+        title: "渚涘簲鍟嗕俊鎭己澶�",
         icon: "error",
       });
       return;
     }
     showLoadingToast("鍔犺浇涓�...");
-    paymentRecordList({ supplierId: supplierId.value })
+    gePurchaseListPage({ supplierName: supplierName.value, current: 1, size: 1000 })
       .then(res => {
-        tableData.value = res.data;
+        let orders = [];
+        if (res.data) {
+          if (Array.isArray(res.data)) {
+            orders = res.data;
+          } else if (res.data.records && Array.isArray(res.data.records)) {
+            orders = res.data.records;
+          }
+        }
+        tableData.value = orders;
         closeToast();
       })
       .catch(() => {
@@ -173,46 +153,6 @@
 
   .u-divider {
     margin: 0 !important;
-  }
-
-  .summary-info {
-    background: #ffffff;
-    margin: 20px 20px 0 20px;
-    border-radius: 12px;
-    padding: 16px;
-    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
-  }
-
-  .summary-item {
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-    margin-bottom: 8px;
-
-    &:last-child {
-      margin-bottom: 0;
-    }
-  }
-
-  .summary-label {
-    font-size: 14px;
-    color: #666;
-  }
-
-  .summary-value {
-    font-size: 14px;
-    color: #333;
-    font-weight: 500;
-  }
-
-  .summary-value.highlight {
-    color: #2979ff;
-    font-weight: 600;
-  }
-
-  .summary-value.danger {
-    color: #ff4757;
-    font-weight: 600;
   }
 
   .detail-list {
@@ -262,6 +202,32 @@
     color: #666;
   }
 
+  .item-status {
+    display: flex;
+    align-items: center;
+  }
+
+  .status-tag {
+    font-size: 12px;
+    padding: 2px 8px;
+    border-radius: 4px;
+  }
+
+  .status-success {
+    color: #67c23a;
+    background: rgba(103, 194, 58, 0.1);
+  }
+
+  .status-warning {
+    color: #e6a23c;
+    background: rgba(230, 162, 60, 0.1);
+  }
+
+  .status-info {
+    color: #909399;
+    background: rgba(144, 147, 153, 0.1);
+  }
+
   .item-details {
     padding: 16px 0;
   }
@@ -289,16 +255,6 @@
     text-align: right;
     flex: 1;
     margin-left: 16px;
-  }
-
-  .detail-value.highlight {
-    color: #2979ff;
-    font-weight: 500;
-  }
-
-  .detail-value.danger {
-    color: #ff4757;
-    font-weight: 500;
   }
 
   .no-data {
diff --git a/src/pages/procurementManagement/paymentLedger/index.vue b/src/pages/procurementManagement/paymentLedger/index.vue
index 8bd7c6e..ba48744 100644
--- a/src/pages/procurementManagement/paymentLedger/index.vue
+++ b/src/pages/procurementManagement/paymentLedger/index.vue
@@ -45,15 +45,7 @@
           <view class="item-details">
             <view class="detail-row">
               <text class="detail-label">鍚堝悓閲戦(鍏�)</text>
-              <text class="detail-value">{{ formattedNumber(item.invoiceAmount) }}</text>
-            </view>
-            <view class="detail-row">
-              <text class="detail-label">浠樻閲戦(鍏�)</text>
-              <text class="detail-value">{{ formattedNumber(item.paymentAmount) }}</text>
-            </view>
-            <view class="detail-row">
-              <text class="detail-label">搴斾粯閲戦(鍏�)</text>
-              <text class="detail-value highlight danger">{{ formattedNumber(item.payableAmount) }}</text>
+              <text class="detail-value">{{ formattedNumber(item.contractAmounts) }}</text>
             </view>
           </view>
         </view>
@@ -132,7 +124,7 @@
 
 const rowClickMethod = (row) => {
   // 浣跨敤 uni.setStorageSync 瀛樺偍渚涘簲鍟嗕俊鎭�
-  uni.setStorageSync('supplierId', row.supplierId);
+  uni.setStorageSync('supplierName', row.supplierName);
   // 璺宠浆鍒板洖娆捐褰曟槑缁嗛〉闈�
   uni.navigateTo({
     url: '/pages/procurementManagement/paymentLedger/detail'
diff --git a/src/pages/qualityManagement/finalInspection/index.vue b/src/pages/qualityManagement/finalInspection/index.vue
index 0e860ff..3c42877 100644
--- a/src/pages/qualityManagement/finalInspection/index.vue
+++ b/src/pages/qualityManagement/finalInspection/index.vue
@@ -121,7 +121,7 @@
             <u-button type="primary"
                       size="small"
                       class="action-btn"
-                      :disabled="item.inspectState"
+                      :disabled="!!item.inspectState"
                       @click.stop="startInspection(item)">
               缂栬緫
             </u-button>
@@ -134,7 +134,7 @@
             <u-button type="success"
                       size="small"
                       class="action-btn"
-                      :disabled="item.inspectState"
+                      :disabled="!!item.inspectState"
                       @click.stop="submitInspection(item)">
               鎻愪氦
             </u-button>
@@ -149,7 +149,7 @@
             <u-button type="warning"
                       size="small"
                       class="action-btn"
-                      :disabled="item.inspectState || item.checkName !== ''"
+                      :disabled="!!item.inspectState || item.checkName !== ''"
                       @click.stop="assignInspector(item)">
               鍒嗛厤妫�楠屽憳
             </u-button>
diff --git a/src/pages/qualityManagement/materialInspection/index.vue b/src/pages/qualityManagement/materialInspection/index.vue
index eb4a140..48bdbd0 100644
--- a/src/pages/qualityManagement/materialInspection/index.vue
+++ b/src/pages/qualityManagement/materialInspection/index.vue
@@ -1,7 +1,7 @@
 <template>
   <view class="material-inspection-page">
     <!-- 浣跨敤閫氱敤椤甸潰澶撮儴缁勪欢 -->
-    <PageHeader title="鍘熸潗鏂欐楠�"
+    <PageHeader title="鍘熸枡妫�楠�"
                 @back="goBack" />
     <!-- 鎼滅储鍖哄煙 -->
     <view class="search-section">
@@ -121,7 +121,7 @@
             <u-button type="primary"
                       size="small"
                       class="action-btn"
-                      :disabled="item.inspectState"
+                      :disabled="!!item.inspectState"
                       @click.stop="startInspection(item)">
               缂栬緫
             </u-button>
@@ -134,7 +134,7 @@
             <u-button type="success"
                       size="small"
                       class="action-btn"
-                      :disabled="item.inspectState"
+                      :disabled="!!item.inspectState"
                       @click.stop="submitInspection(item)">
               鎻愪氦
             </u-button>
@@ -149,7 +149,7 @@
             <u-button type="warning"
                       size="small"
                       class="action-btn"
-                      :disabled="item.inspectState || item.checkName !== ''"
+                      :disabled="!!item.inspectState || item.checkName !== ''"
                       @click.stop="assignInspector(item)">
               鍒嗛厤妫�楠屽憳
             </u-button>
diff --git a/src/pages/qualityManagement/processInspection/index.vue b/src/pages/qualityManagement/processInspection/index.vue
index 40358ef..e2503d9 100644
--- a/src/pages/qualityManagement/processInspection/index.vue
+++ b/src/pages/qualityManagement/processInspection/index.vue
@@ -121,7 +121,7 @@
             <u-button type="primary"
                       size="small"
                       class="action-btn"
-                      :disabled="item.inspectState"
+                      :disabled="!!item.inspectState"
                       @click.stop="startInspection(item)">
               缂栬緫
             </u-button>
@@ -134,7 +134,7 @@
             <u-button type="success"
                       size="small"
                       class="action-btn"
-                      :disabled="item.inspectState"
+                      :disabled="!!item.inspectState"
                       @click.stop="submitInspection(item)">
               鎻愪氦
             </u-button>
@@ -149,7 +149,7 @@
             <u-button type="warning"
                       size="small"
                       class="action-btn"
-                      :disabled="item.inspectState || item.checkName !== ''"
+                      :disabled="!!item.inspectState || item.checkName !== ''"
                       @click.stop="assignInspector(item)">
               鍒嗛厤妫�楠屽憳
             </u-button>
diff --git a/src/pages/sales/receiptPaymentLedger/detail.vue b/src/pages/sales/receiptPaymentLedger/detail.vue
index b494332..f435998 100644
--- a/src/pages/sales/receiptPaymentLedger/detail.vue
+++ b/src/pages/sales/receiptPaymentLedger/detail.vue
@@ -3,27 +3,7 @@
     <!-- 浣跨敤閫氱敤椤甸潰澶撮儴缁勪欢 -->
     <PageHeader title="瀹㈡埛寰�鏉ヨ鎯�"
                 @back="goBack" />
-    <!-- 缁熻淇℃伅 -->
-    <view class="summary-info"
-          v-if="tableData.length > 0">
-      <view class="summary-item">
-        <text class="summary-label">鎬昏褰曟暟</text>
-        <text class="summary-value">{{ tableData.length }}</text>
-      </view>
-      <view class="summary-item">
-        <text class="summary-label">寮�绁ㄦ�婚噾棰�</text>
-        <text class="summary-value">{{ formatAmount(invoiceTotal) }}</text>
-      </view>
-      <view class="summary-item">
-        <text class="summary-label">鍥炴鎬婚噾棰�</text>
-        <text class="summary-value highlight">{{ formatAmount(receiptTotal) }}</text>
-      </view>
-      <view class="summary-item">
-        <text class="summary-label">搴旀敹鎬婚噾棰�</text>
-        <text class="summary-value danger">{{ formatAmount(unReceiptTotal) }}</text>
-      </view>
-    </view>
-    <!-- 鍥炴璁板綍鏄庣粏鍒楄〃 -->
+    <!-- 鍙戣揣鍙拌处鏄庣粏 -->
     <view class="detail-list"
           v-if="tableData.length > 0">
       <view v-for="(item, index) in tableData"
@@ -36,66 +16,59 @@
                        size="16"
                        color="#ffffff"></up-icon>
             </view>
-            <text class="item-index">{{ index + 1 }}</text>
+            <text class="item-index">{{ item.salesContractNo }}</text>
           </view>
-          <view class="item-date">{{ item.happenTime }}</view>
+          <view class="item-status">
+            <text class="status-tag"
+                  :class="getStatusClass(item.status)">{{ item.status || '--' }}</text>
+          </view>
         </view>
         <up-divider></up-divider>
         <view class="item-details">
           <view class="detail-row">
-            <text class="detail-label">寮�绁ㄩ噾棰�(鍏�)</text>
-            <text class="detail-value">{{ formatAmount(item.invoiceTotal) }}</text>
+            <text class="detail-label">瀹㈡埛鍚嶇О</text>
+            <text class="detail-value">{{ item.customerName }}</text>
           </view>
           <view class="detail-row">
-            <text class="detail-label">鍥炴閲戦(鍏�)</text>
-            <text class="detail-value highlight">{{ formatAmount(item.receiptPaymentAmount) }}</text>
+            <text class="detail-label">浜у搧鍚嶇О</text>
+            <text class="detail-value">{{ item.productName }}</text>
           </view>
           <view class="detail-row">
-            <text class="detail-label">搴旀敹閲戦(鍏�)</text>
-            <text class="detail-value danger">{{ formatAmount(item.unReceiptPaymentAmount) }}</text>
+            <text class="detail-label">瑙勬牸鍨嬪彿</text>
+            <text class="detail-value">{{ item.specificationModel }}</text>
           </view>
           <view class="detail-row">
-            <text class="detail-label">鍙戠敓鏃ユ湡</text>
-            <text class="detail-value">{{ item.receiptPaymentDate }}</text>
+            <text class="detail-label">鍙戣揣鏃堕棿</text>
+            <text class="detail-value">{{ item.shippingDate }}</text>
+          </view>
+          <view class="detail-row">
+            <text class="detail-label">鍙戣揣鏁伴噺</text>
+            <text class="detail-value">{{ item.totalQuantity }}</text>
+          </view>
+          <view class="detail-row">
+            <text class="detail-label">鍑哄簱鍗曞彿</text>
+            <text class="detail-value">{{ item.outboundBatches }}</text>
           </view>
         </view>
       </view>
     </view>
     <view v-else
           class="no-data">
-      <text>鏆傛棤鍥炴璁板綍</text>
+      <text>鏆傛棤鍙戣揣璁板綍</text>
     </view>
   </view>
 </template>
 
 <script setup>
-  import { ref, computed, onMounted } from "vue";
+  import { ref, onMounted } from "vue";
   import { onShow } from "@dcloudio/uni-app";
-  import { customerInteractions } from "@/api/salesManagement/receiptPayment.js";
+  import { deliveryLedgerListPage } from "@/api/salesManagement/deliveryLedger.js";
 
   // 瀹㈡埛淇℃伅
   const customerId = ref("");
 
   // 琛ㄦ牸鏁版嵁
   const tableData = ref([]);
-
-  const invoiceTotal = computed(() => {
-    return tableData.value.reduce((sum, item) => {
-      return sum + (parseFloat(item.invoiceTotal) || 0);
-    }, 0);
-  });
-
-  const receiptTotal = computed(() => {
-    return tableData.value.reduce((sum, item) => {
-      return sum + (parseFloat(item.receiptPaymentAmount) || 0);
-    }, 0);
-  });
-
-  const unReceiptTotal = computed(() => {
-    return tableData.value.reduce((sum, item) => {
-      return sum + (parseFloat(item.unReceiptPaymentAmount) || 0);
-    }, 0);
-  });
 
   // 杩斿洖涓婁竴椤�
   const goBack = () => {
@@ -105,7 +78,6 @@
 
   // 鑾峰彇椤甸潰鍙傛暟
   const getPageParams = () => {
-    // 浠庢湰鍦板瓨鍌ㄨ幏鍙栧鎴稩D
     const storedCustomerId = uni.getStorageSync("customerId");
     if (storedCustomerId) {
       customerId.value = storedCustomerId;
@@ -123,15 +95,21 @@
     }
 
     showLoadingToast("鍔犺浇涓�...");
-    const param = {
+    deliveryLedgerListPage({
       customerId: customerId.value,
-      current: -1,
-      size: -1,
-    };
-
-    customerInteractions(param)
+      current: 1,
+      size: 1000,
+    })
       .then(res => {
-        tableData.value = res.data;
+        let orders = [];
+        if (res.data) {
+          if (Array.isArray(res.data)) {
+            orders = res.data;
+          } else if (res.data.records && Array.isArray(res.data.records)) {
+            orders = res.data.records;
+          }
+        }
+        tableData.value = orders;
         closeToast();
       })
       .catch(() => {
@@ -143,9 +121,15 @@
       });
   };
 
-  // 鏍煎紡鍖栭噾棰�
-  const formatAmount = amount => {
-    return amount ? parseFloat(amount).toFixed(2) : "0.00";
+  // 鍙戣揣鐘舵�佹牱寮�
+  const getStatusClass = (status) => {
+    const statusMap = {
+      '宸插彂璐�': 'status-success',
+      '瀹℃牳閫氳繃': 'status-success',
+      '瀹℃牳涓�': 'status-warning',
+      '瀹℃牳涓嶉�氳繃': 'status-danger',
+    };
+    return statusMap[status] || 'status-info';
   };
 
   // 鏄剧ず鍔犺浇鎻愮ず
@@ -183,46 +167,6 @@
 
   .u-divider {
     margin: 0 !important;
-  }
-
-  .summary-info {
-    background: #ffffff;
-    margin: 20px 20px 0 20px;
-    border-radius: 12px;
-    padding: 16px;
-    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
-  }
-
-  .summary-item {
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-    margin-bottom: 8px;
-
-    &:last-child {
-      margin-bottom: 0;
-    }
-  }
-
-  .summary-label {
-    font-size: 14px;
-    color: #666;
-  }
-
-  .summary-value {
-    font-size: 14px;
-    color: #333;
-    font-weight: 500;
-  }
-
-  .summary-value.highlight {
-    color: #2979ff;
-    font-weight: 600;
-  }
-
-  .summary-value.danger {
-    color: #ff4757;
-    font-weight: 600;
   }
 
   .detail-list {
@@ -272,6 +216,37 @@
     color: #666;
   }
 
+  .item-status {
+    display: flex;
+    align-items: center;
+  }
+
+  .status-tag {
+    font-size: 12px;
+    padding: 2px 8px;
+    border-radius: 4px;
+  }
+
+  .status-success {
+    color: #67c23a;
+    background: rgba(103, 194, 58, 0.1);
+  }
+
+  .status-warning {
+    color: #e6a23c;
+    background: rgba(230, 162, 60, 0.1);
+  }
+
+  .status-danger {
+    color: #f56c6c;
+    background: rgba(245, 108, 108, 0.1);
+  }
+
+  .status-info {
+    color: #909399;
+    background: rgba(144, 147, 153, 0.1);
+  }
+
   .item-details {
     padding: 16px 0;
   }
@@ -301,19 +276,10 @@
     margin-left: 16px;
   }
 
-  .detail-value.highlight {
-    color: #2979ff;
-    font-weight: 500;
-  }
-
-  .detail-value.danger {
-    color: #ff4757;
-    font-weight: 500;
-  }
-
   .no-data {
     padding: 40px 0;
     text-align: center;
     color: #999;
   }
+
 </style>
diff --git a/src/pages/sales/receiptPaymentLedger/index.vue b/src/pages/sales/receiptPaymentLedger/index.vue
index 7daa076..864e690 100644
--- a/src/pages/sales/receiptPaymentLedger/index.vue
+++ b/src/pages/sales/receiptPaymentLedger/index.vue
@@ -47,16 +47,8 @@
           <up-divider></up-divider>
           <view class="item-details">
             <view class="detail-row">
-              <text class="detail-label">寮�绁ㄩ噾棰�(鍏�)</text>
-              <text class="detail-value">{{ formattedNumber(item.invoiceTotal) }}</text>
-            </view>
-            <view class="detail-row">
-              <text class="detail-label">鍥炴閲戦(鍏�)</text>
-              <text class="detail-value">{{ formattedNumber(item.receiptPaymentAmount) }}</text>
-            </view>
-            <view class="detail-row">
-              <text class="detail-label">搴旀敹閲戦(鍏�)</text>
-              <text class="detail-value highlight danger">{{ formattedNumber(item.unReceiptPaymentAmount) }}</text>
+              <text class="detail-label">鍚堝悓閲戦(鍏�)</text>
+              <text class="detail-value">{{ formattedNumber(item.contractAmounts) }}</text>
             </view>
           </view>
         </view>
@@ -72,7 +64,7 @@
 <script setup>
   import { onMounted, ref, reactive, toRefs } from "vue";
   import { onShow } from "@dcloudio/uni-app";
-  import { invoiceLedgerSalesAccount } from "@/api/salesManagement/invoiceLedger";
+  import { customewTransactions } from "@/api/salesManagement/indicatorStats.js";
 
   const tableData = ref([]);
 
@@ -106,7 +98,7 @@
 
   const getList = () => {
     showLoadingToast("鍔犺浇涓�...");
-    invoiceLedgerSalesAccount({ ...searchForm.value, ...page })
+    customewTransactions({ ...searchForm.value, ...page })
       .then(res => {
         tableData.value = res.data.records;
         closeToast();
@@ -139,7 +131,7 @@
 
   const rowClickMethod = row => {
     // 浣跨敤 uni.setStorageSync 瀛樺偍瀹㈡埛淇℃伅
-    uni.setStorageSync("customerId", row.id);
+    uni.setStorageSync("customerId", row.customerId);
     // 璺宠浆鍒板洖娆捐褰曟槑缁嗛〉闈�
     uni.navigateTo({
       url: "/pages/sales/receiptPaymentLedger/detail",
diff --git a/src/pages/works.vue b/src/pages/works.vue
index 65fd28a..a5988df 100644
--- a/src/pages/works.vue
+++ b/src/pages/works.vue
@@ -328,14 +328,17 @@
 
 <script setup>
   import { ref, onMounted, nextTick, reactive, computed } from "vue";
+  import { onShow } from "@dcloudio/uni-app";
   import { userLoginFacotryList } from "@/api/login";
   import { getProductWorkOrderById } from "@/api/productionManagement/productionReporting";
+  import { createVersionUpgradeChecker } from "@/utils/versionUpgrade";
   import DownloadProgressMask from "@/components/DownloadProgressMask.vue";
   import { OA_WORKBENCH_ITEMS } from "@/config/oaWorkbench.js";
   import modal from "@/plugins/modal";
   import useUserStore from "@/store/modules/user";
 
   const userStore = useUserStore();
+  const { triggerVersionCheck } = createVersionUpgradeChecker({ logPrefix: "[version-works]" });
   const show = ref(false);
   const factoryList = ref([]);
   const factoryListTem = ref([]);
@@ -495,6 +498,10 @@
       icon: "/static/images/icon/kucunguanli.svg",
       label: "搴撳瓨绠$悊",
     },
+    {
+      icon: "/static/images/icon/weixianzuoye.svg",
+      label: "鐜妫�娴�",
+    },
   ]);
 
   const humanResourcesItems = reactive([
@@ -510,11 +517,26 @@
       icon: "/static/images/icon/hetongguanli.svg",
       label: "鍚堝悓绠$悊",
     },
+    {
+      icon: "/static/images/icon/hetongguanli.svg",
+      label: "杞鐢宠",
+      path: "/pages/oa/HrManage/regular-apply/index",
+    },
+    {
+      icon: "/static/images/icon/renyuanxinzi.svg",
+      label: "璋冨矖鐢宠",
+      path: "/pages/oa/HrManage/transfer-apply/index",
+    },
+    {
+      icon: "/static/images/icon/gongchuguanli.svg",
+      label: "宸ヤ綔浜ゆ帴",
+      path: "/pages/oa/HrManage/work-handover/index",
+    },
   ]);
   const qualityItems = reactive([
     {
       icon: "/static/images/icon/yuancailiaojianyan.svg",
-      label: "鍘熸潗鏂欐楠�",
+      label: "鍘熸枡妫�楠�",
     },
     {
       icon: "/static/images/icon/guochengjianyan.svg",
@@ -593,6 +615,36 @@
     {
       icon: "/static/images/icon/kehubaifang.svg",
       label: "瀹㈡埛鎷滆",
+    },
+    {
+      icon: "/static/images/icon/qingjiaguanli.svg",
+      label: "璇峰亣鐢宠",
+      path: "/pages/oa/AttendManage/leave-apply/index",
+    },
+    {
+      icon: "/static/images/icon/dakaqiandao.svg",
+      label: "鍔犵彮鐢宠",
+      path: "/pages/oa/AttendManage/overtime-apply/index",
+    },
+    {
+      icon: "/static/images/icon/chuchaiguanli.svg",
+      label: "宸梾鎶ラ攢",
+      path: "/pages/oa/ReimburseManage/travel-reimburse/index",
+    },
+    {
+      icon: "/static/images/icon/baoxiaoguanli.svg",
+      label: "璐圭敤鎶ラ攢",
+      path: "/pages/oa/ReimburseManage/cost-reimburse/index",
+    },
+    {
+      icon: "/static/images/icon/xietongshenpi.svg",
+      label: "瀹℃壒鍒楄〃",
+      path: "/pages/oa/ApproveManage/approve-list/index",
+    },
+    {
+      icon: "/static/images/icon/guizhangzhidu.svg",
+      label: "瀹℃壒妯℃澘",
+      path: "/pages/oa/ApproveManage/approve-template/index",
     },
   ]);
 
@@ -1018,7 +1070,7 @@
           url: "/pages/humanResources/contractManagement/index",
         });
         break;
-      case "鍘熸潗鏂欐楠�":
+      case "鍘熸枡妫�楠�":
         uni.navigateTo({
           url: "/pages/qualityManagement/materialInspection/index",
         });
@@ -1038,6 +1090,11 @@
           url: "/pages/inventoryManagement/stockManagement/index",
         });
         break;
+      case "鐜妫�娴�":
+        uni.navigateTo({
+          url: "/pages/inventoryManagement/environmentalMonitoring/index",
+        });
+        break;
       case "鍙嶉鐧昏":
         uni.navigateTo({
           url: "/pages/customerService/feedbackRegistration/index",

--
Gitblit v1.9.3