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