From 09f98ab6b6ac0779f12bd003443e1e6065cad256 Mon Sep 17 00:00:00 2001
From: spring <2396852758@qq.com>
Date: 星期二, 12 五月 2026 14:33:31 +0800
Subject: [PATCH] fix: 支持按照工单进行输入报工信息报工。也可以扫码报工

---
 src/pages/index.vue                                               |   24 -
 src/pages.json                                                    |    7 
 src/pages/works.vue                                               |   87 ------
 src/pages/productionManagement/productionReport/workOrderList.vue |  345 ++++++++++++++++++++++++++
 src/manifest.json                                                 |  276 ++++++++++----------
 5 files changed, 494 insertions(+), 245 deletions(-)

diff --git a/src/manifest.json b/src/manifest.json
index 3934c37..40c5cad 100644
--- a/src/manifest.json
+++ b/src/manifest.json
@@ -1,143 +1,143 @@
 {
-    "name" : "淇℃伅绠$悊",
-    "appid" : "__UNI__099A590",
-    "description" : "",
-    "versionName" : "1.1.5",
-    "versionCode" : 100,
-    "transformPx" : false,
-    /* 5+App鐗规湁鐩稿叧 */
-    "app-plus" : {
-        "compatible" : {
-            "usingComponents" : true,
-            "ignoreVersion" : true
-        },
-        "usingComponents" : true,
-        "nvueStyleCompiler" : "uni-app",
-        "compilerVersion" : 3,
-        "splashscreen" : {
-            "alwaysShowBeforeRender" : true,
-            "waiting" : true,
-            "autoclose" : true,
-            "delay" : 0
-        },
-        /* 妯″潡閰嶇疆 */
-        "modules" : {
-            "Camera" : {},
-            "Barcode" : {},
-            "Push" : {},
-            "Maps" : {}
-        },
-        /* 搴旂敤鍙戝竷淇℃伅 */
-        "distribute" : {
-            /* android鎵撳寘閰嶇疆 */
-            "android" : {
-                "permissions" : [
-                    "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
-                    "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
-                    "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
-                    "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
-                    "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
-                    "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
-                    "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
-                    "<uses-permission android:name=\"android.permission.CAMERA\"/>",
-                    "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
-                    "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
-                    "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
-                    "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
-                    "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
-                    "<uses-feature android:name=\"android.hardware.camera\"/>",
-                    "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>",
-                    "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
-                    "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
-                    "<uses-permission android:name=\"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\"/>",
-                    "<uses-feature android:name=\"android.hardware.location\"/>",
-                    "<uses-feature android:name=\"android.hardware.location.gps\"/>",
-                    "<uses-feature android:name=\"android.hardware.location.network\"/>"
-                ]
-            },
-            /* ios鎵撳寘閰嶇疆 */
-            "ios" : {
-                "dSYMs" : false,
-                "plist" : {
-                    "NSLocationWhenInUseUsageDescription" : "闇�瑕佽幏鍙栨偍鐨勪綅缃俊鎭潵璁板綍瀹㈡埛鎷滆鍦扮偣",
-                    "NSLocationAlwaysAndWhenInUseUsageDescription" : "闇�瑕佽幏鍙栨偍鐨勪綅缃俊鎭潵璁板綍瀹㈡埛鎷滆鍦扮偣"
-                }
-            },
-            /* SDK閰嶇疆 */
-            "sdkConfigs" : {
-                "push" : {
-                    "unipush" : {
-                        "icons" : {
-                            "small" : {
-                                "ldpi" : "D:/xindao/wenjian/img/logo/app.png"
-                            }
-                        },
-                        "offline" : false
-                    }
-                },
-                "maps" : {
-                    "amap" : {
-                        "name" : "amap_18330707920ae9zOwCD",
-                        "appkey_ios" : "c2b4e3889ab4cb9468e9c8ae4f3ab53f",
-                        "appkey_android" : "c2b4e3889ab4cb9468e9c8ae4f3ab53f"
-                    }
-                }
-            },
-            "icons" : {
-                "android" : {
-                    "hdpi" : "unpackage/res/icons/72x72.png",
-                    "xhdpi" : "unpackage/res/icons/96x96.png",
-                    "xxhdpi" : "unpackage/res/icons/144x144.png",
-                    "xxxhdpi" : "unpackage/res/icons/192x192.png"
-                },
-                "ios" : {
-                    "appstore" : "unpackage/res/icons/1024x1024.png",
-                    "ipad" : {
-                        "app" : "unpackage/res/icons/76x76.png",
-                        "app@2x" : "unpackage/res/icons/152x152.png",
-                        "notification" : "unpackage/res/icons/20x20.png",
-                        "notification@2x" : "unpackage/res/icons/40x40.png",
-                        "proapp@2x" : "unpackage/res/icons/167x167.png",
-                        "settings" : "unpackage/res/icons/29x29.png",
-                        "settings@2x" : "unpackage/res/icons/58x58.png",
-                        "spotlight" : "unpackage/res/icons/40x40.png",
-                        "spotlight@2x" : "unpackage/res/icons/80x80.png"
-                    },
-                    "iphone" : {
-                        "app@2x" : "unpackage/res/icons/120x120.png",
-                        "app@3x" : "unpackage/res/icons/180x180.png",
-                        "notification@2x" : "unpackage/res/icons/40x40.png",
-                        "notification@3x" : "unpackage/res/icons/60x60.png",
-                        "settings@2x" : "unpackage/res/icons/58x58.png",
-                        "settings@3x" : "unpackage/res/icons/87x87.png",
-                        "spotlight@2x" : "unpackage/res/icons/80x80.png",
-                        "spotlight@3x" : "unpackage/res/icons/120x120.png"
-                    }
-                }
-            }
+  "name": "闈掗摑缁胯",
+  "appid": "__UNI__099A590",
+  "description": "",
+  "versionName": "1.1.5",
+  "versionCode": 100,
+  "transformPx": false,
+  /* 5+App鐗规湁鐩稿叧 */
+  "app-plus": {
+    "compatible": {
+      "usingComponents": true,
+      "ignoreVersion": true
+    },
+    "usingComponents": true,
+    "nvueStyleCompiler": "uni-app",
+    "compilerVersion": 3,
+    "splashscreen": {
+      "alwaysShowBeforeRender": true,
+      "waiting": true,
+      "autoclose": true,
+      "delay": 0
+    },
+    /* 妯″潡閰嶇疆 */
+    "modules": {
+      "Camera": {},
+      "Barcode": {},
+      "Push": {},
+      "Maps": {}
+    },
+    /* 搴旂敤鍙戝竷淇℃伅 */
+    "distribute": {
+      /* android鎵撳寘閰嶇疆 */
+      "android": {
+        "permissions": [
+          "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
+          "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
+          "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
+          "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
+          "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
+          "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
+          "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
+          "<uses-permission android:name=\"android.permission.CAMERA\"/>",
+          "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
+          "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
+          "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
+          "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
+          "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
+          "<uses-feature android:name=\"android.hardware.camera\"/>",
+          "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>",
+          "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
+          "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
+          "<uses-permission android:name=\"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\"/>",
+          "<uses-feature android:name=\"android.hardware.location\"/>",
+          "<uses-feature android:name=\"android.hardware.location.gps\"/>",
+          "<uses-feature android:name=\"android.hardware.location.network\"/>"
+        ]
+      },
+      /* ios鎵撳寘閰嶇疆 */
+      "ios": {
+        "dSYMs": false,
+        "plist": {
+          "NSLocationWhenInUseUsageDescription": "闇�瑕佽幏鍙栨偍鐨勪綅缃俊鎭潵璁板綍瀹㈡埛鎷滆鍦扮偣",
+          "NSLocationAlwaysAndWhenInUseUsageDescription": "闇�瑕佽幏鍙栨偍鐨勪綅缃俊鎭潵璁板綍瀹㈡埛鎷滆鍦扮偣"
         }
-    },
-    /* 蹇簲鐢ㄧ壒鏈夌浉鍏� */
-    "quickapp" : {},
-    /* 灏忕▼搴忕壒鏈夌浉鍏� */
-    "mp-weixin" : {
-        "appid" : "",
-        "setting" : {
-            "urlCheck" : false
+      },
+      /* SDK閰嶇疆 */
+      "sdkConfigs": {
+        "push": {
+          "unipush": {
+            "icons": {
+              "small": {
+                "ldpi": "D:/xindao/wenjian/img/logo/app.png"
+              }
+            },
+            "offline": false
+          }
         },
-        "usingComponents" : true
+        "maps": {
+          "amap": {
+            "name": "amap_18330707920ae9zOwCD",
+            "appkey_ios": "c2b4e3889ab4cb9468e9c8ae4f3ab53f",
+            "appkey_android": "c2b4e3889ab4cb9468e9c8ae4f3ab53f"
+          }
+        }
+      },
+      "icons": {
+        "android": {
+          "hdpi": "unpackage/res/icons/72x72.png",
+          "xhdpi": "unpackage/res/icons/96x96.png",
+          "xxhdpi": "unpackage/res/icons/144x144.png",
+          "xxxhdpi": "unpackage/res/icons/192x192.png"
+        },
+        "ios": {
+          "appstore": "unpackage/res/icons/1024x1024.png",
+          "ipad": {
+            "app": "unpackage/res/icons/76x76.png",
+            "app@2x": "unpackage/res/icons/152x152.png",
+            "notification": "unpackage/res/icons/20x20.png",
+            "notification@2x": "unpackage/res/icons/40x40.png",
+            "proapp@2x": "unpackage/res/icons/167x167.png",
+            "settings": "unpackage/res/icons/29x29.png",
+            "settings@2x": "unpackage/res/icons/58x58.png",
+            "spotlight": "unpackage/res/icons/40x40.png",
+            "spotlight@2x": "unpackage/res/icons/80x80.png"
+          },
+          "iphone": {
+            "app@2x": "unpackage/res/icons/120x120.png",
+            "app@3x": "unpackage/res/icons/180x180.png",
+            "notification@2x": "unpackage/res/icons/40x40.png",
+            "notification@3x": "unpackage/res/icons/60x60.png",
+            "settings@2x": "unpackage/res/icons/58x58.png",
+            "settings@3x": "unpackage/res/icons/87x87.png",
+            "spotlight@2x": "unpackage/res/icons/80x80.png",
+            "spotlight@3x": "unpackage/res/icons/120x120.png"
+          }
+        }
+      }
+    }
+  },
+  /* 蹇簲鐢ㄧ壒鏈夌浉鍏� */
+  "quickapp": {},
+  /* 灏忕▼搴忕壒鏈夌浉鍏� */
+  "mp-weixin": {
+    "appid": "",
+    "setting": {
+      "urlCheck": false
     },
-    "mp-alipay" : {
-        "usingComponents" : true
-    },
-    "mp-baidu" : {
-        "usingComponents" : true
-    },
-    "mp-toutiao" : {
-        "usingComponents" : true
-    },
-    "uniStatistics" : {
-        "enable" : false
-    },
-    "vueVersion" : "3"
+    "usingComponents": true
+  },
+  "mp-alipay": {
+    "usingComponents": true
+  },
+  "mp-baidu": {
+    "usingComponents": true
+  },
+  "mp-toutiao": {
+    "usingComponents": true
+  },
+  "uniStatistics": {
+    "enable": false
+  },
+  "vueVersion": "3"
 }
diff --git a/src/pages.json b/src/pages.json
index f2353d0..b95eb32 100644
--- a/src/pages.json
+++ b/src/pages.json
@@ -824,6 +824,13 @@
       }
     },
     {
+      "path": "pages/productionManagement/productionReport/workOrderList",
+      "style": {
+        "navigationBarTitleText": "鐢熶骇鎶ュ伐",
+        "navigationStyle": "custom"
+      }
+    },
+    {
       "path": "pages/productionManagement/productionReporting/ledger",
       "style": {
         "navigationBarTitleText": "鎶ュ伐鍙拌处",
diff --git a/src/pages/index.vue b/src/pages/index.vue
index b7d3fa9..bf79acd 100644
--- a/src/pages/index.vue
+++ b/src/pages/index.vue
@@ -206,7 +206,7 @@
   {
     label: "鐢熶骇鎶ュ伐",
     icon: "/static/images/icon/shengchanbaogong.svg",
-    action: "scan",
+    route: "/pages/productionManagement/productionReport/workOrderList",
   },
   {
     label: "璁惧宸℃",
@@ -242,28 +242,6 @@
 }
 
 function handleQuickTool(item) {
-  if (item?.action === "scan") {
-    // 鐢熶骇鎶ュ伐 - 璋冪敤鎵爜
-    uni.scanCode({
-      success: (res) => {
-        console.log("鎵爜缁撴灉:", res);
-        // 瑙f瀽鎵爜缁撴灉骞惰烦杞埌鐢熶骇鎶ュ伐椤甸潰
-        try {
-          const scanResult = JSON.parse(res.result);
-          uni.navigateTo({
-            url: `/pages/productionManagement/productionReport/index?orderRow=${encodeURIComponent(JSON.stringify(scanResult))}`
-          });
-        } catch (e) {
-          console.error("鎵爜缁撴灉瑙f瀽澶辫触:", e);
-          uni.showToast({ title: "鏃犳晥鐨勪簩缁寸爜", icon: "none" });
-        }
-      },
-      fail: (err) => {
-        console.error("鎵爜澶辫触:", err);
-      }
-    });
-    return;
-  }
   if (!item?.route) return;
   uni.navigateTo({ url: item.route });
 }
diff --git a/src/pages/productionManagement/productionReport/workOrderList.vue b/src/pages/productionManagement/productionReport/workOrderList.vue
new file mode 100644
index 0000000..0c9e126
--- /dev/null
+++ b/src/pages/productionManagement/productionReport/workOrderList.vue
@@ -0,0 +1,345 @@
+<template>
+  <view class="report-entry-page">
+    <PageHeader title="鐢熶骇鎶ュ伐"
+                @back="goBack" />
+
+    <view class="scan-section">
+      <view class="scan-card"
+            @click="startScan">
+        <up-icon name="scan"
+                 size="28"
+                 color="#2979ff" />
+        <view class="scan-text-wrap">
+          <text class="scan-title">鎵爜鎶ュ伐</text>
+        </view>
+        <up-icon name="arrow-right"
+                 size="18"
+                 color="#c0c4cc" />
+      </view>
+    </view>
+
+    <scroll-view v-if="tableData.length > 0"
+                 scroll-y
+                 class="list-body"
+                 @scrolltolower="loadMore">
+      <view v-for="(item, index) in tableData"
+            :key="item.id || index"
+            class="ledger-item"
+            @click="onCardClick(item)">
+        <view class="item-header">
+          <view class="item-left">
+            <view class="document-icon">
+              <up-icon name="file-text"
+                       size="16"
+                       color="#ffffff" />
+            </view>
+            <text class="item-id">{{ item.workOrderNo || "-" }}</text>
+          </view>
+          <view class="item-right operation-header-right">
+            <view class="operation-pill">
+              <text class="operation-pill-text">{{ operationNameOf(item) }}</text>
+            </view>
+            <view v-if="item.endOrder"
+                  class="end-pill">
+              <text class="end-pill-text">宸茬粨鏉�</text>
+            </view>
+          </view>
+        </view>
+        <up-divider />
+        <view class="item-details">
+          <view class="detail-row">
+            <text class="detail-label">鐢熶骇璁㈠崟鍙�</text>
+            <text class="detail-value">{{ item.npsNo || "-" }}</text>
+          </view>
+          <view class="detail-row">
+            <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">{{ item.model || "-" }}</text>
+          </view>
+          <view class="detail-row">
+            <text class="detail-label">鍗曚綅</text>
+            <text class="detail-value">{{ item.unit || "-" }}</text>
+          </view>
+          <view class="detail-row">
+            <text class="detail-label">闇�姹傛暟閲�</text>
+            <text class="detail-value">{{ item.planQuantity ?? "-" }}</text>
+          </view>
+          <view class="detail-row">
+            <text class="detail-label">瀹屾垚鏁伴噺</text>
+            <text class="detail-value">{{ item.completeQuantity ?? "-" }}</text>
+          </view>
+        </view>
+      </view>
+      <up-loadmore :status="loadStatus" />
+    </scroll-view>
+
+    <view v-else-if="!loading"
+          class="no-data">
+      <up-empty mode="data"
+                text="鏆傛棤宸ュ崟鏁版嵁" />
+    </view>
+  </view>
+</template>
+
+<script setup>
+  import { ref, reactive } from "vue";
+  import { onShow } from "@dcloudio/uni-app";
+  import PageHeader from "@/components/PageHeader.vue";
+  import { productWorkOrderPage } from "@/api/productionManagement/workOrder.js";
+  import { getProductWorkOrderById } from "@/api/productionManagement/productionReporting";
+  import modal from "@/plugins/modal";
+  import useUserStore from "@/store/modules/user";
+
+  const userStore = useUserStore();
+
+  const loading = ref(false);
+  const tableData = ref([]);
+  const loadStatus = ref("loadmore");
+
+  const page = reactive({
+    current: 1,
+    size: 10,
+    total: 0,
+  });
+
+  const goBack = () => {
+    uni.navigateBack();
+  };
+
+  const operationNameOf = item =>
+    item?.operationName || item?.processName || "-";
+
+  const reportPermissionMessage = row => {
+    if (row.endOrder) return "璇ヨ鍗曞凡缁撴潫锛屾棤娉曟姤宸�";
+    const pq = Number(row.planQuantity);
+    if (Number.isFinite(pq) && pq <= 0) return "寰呯敓浜ф暟閲忎负0锛屾棤娉曟姤宸�";
+    // if (row.userIds) {
+    //   try {
+    //     const userIds =
+    //       typeof row.userIds === "string" ? JSON.parse(row.userIds) : row.userIds;
+    //     if (
+    //       Array.isArray(userIds) &&
+    //       userIds.length > 0 &&
+    //       !userIds.some(id => String(id) === String(userStore.id))
+    //     ) {
+    //       return "鎮ㄤ笉鍦ㄨ宸ュ崟鐨勬寚瀹氭姤宸ヤ汉鑼冨洿鍐�";
+    //     }
+    //   } catch {
+    //     return "宸ュ崟鎶ュ伐鏉冮檺鏍¢獙澶辫触";
+    //   }
+    // }
+    return "";
+  };
+
+  const navigateToReport = orderRowStr => {
+    uni.navigateTo({
+      url: `/pages/productionManagement/productionReport/index?orderRow=${encodeURIComponent(orderRowStr)}`,
+    });
+  };
+
+  const onCardClick = row => {
+    const msg = reportPermissionMessage(row);
+    if (msg) {
+      uni.showToast({ title: msg, icon: "none" });
+      return;
+    }
+    navigateToReport(JSON.stringify(row));
+  };
+
+  const handleQuery = () => {
+    page.current = 1;
+    tableData.value = [];
+    getList();
+  };
+
+  const getList = () => {
+    if (loading.value) return;
+    loading.value = true;
+    const params = { ...page };
+    productWorkOrderPage(params)
+      .then(res => {
+        loading.value = false;
+        const records = res.data?.records || [];
+        tableData.value =
+          page.current === 1 ? records : [...tableData.value, ...records];
+        page.total = res.data?.total ?? 0;
+        loadStatus.value =
+          tableData.value.length >= page.total ? "nomore" : "loadmore";
+      })
+      .catch(() => {
+        loading.value = false;
+        uni.showToast({ title: "鍔犺浇澶辫触", icon: "none" });
+      });
+  };
+
+  const loadMore = () => {
+    if (loadStatus.value === "nomore" || loading.value) return;
+    page.current++;
+    getList();
+  };
+
+  const startScan = () => {
+    uni.scanCode({
+      success: async res => {
+        const scanResult = res.result;
+        let orderRow = "";
+
+        const isNumericId = /^\d+$/.test(String(scanResult).trim());
+
+        if (isNumericId) {
+          const workOrderId = String(scanResult).trim();
+          modal.loading("姝e湪鑾峰彇宸ュ崟淇℃伅...");
+          try {
+            const workRes = await getProductWorkOrderById({ id: workOrderId });
+            modal.closeLoading();
+            if (workRes.code === 200 && workRes.data) {
+              const workData = workRes.data;
+              if (workData.endOrder === true) {
+                modal.msgError("璇ヨ鍗曞凡缁撴潫锛屾棤娉曟姤宸�");
+                return;
+              }
+              orderRow = JSON.stringify(workData);
+            } else {
+              modal.msgError("鏈壘鍒板搴旂殑宸ュ崟淇℃伅");
+              return;
+            }
+          } catch (error) {
+            modal.closeLoading();
+            modal.msgError(
+              "鑾峰彇宸ュ崟淇℃伅澶辫触: " + (error?.message || "鏈煡閿欒")
+            );
+            return;
+          }
+        } else {
+          try {
+            const orderRowStart = scanResult.indexOf("orderRow={");
+            if (orderRowStart !== -1) {
+              orderRow = scanResult.substring(orderRowStart + 9);
+            } else {
+              orderRow = scanResult;
+            }
+            JSON.parse(orderRow);
+          } catch {
+            try {
+              const parsed = JSON.parse(scanResult);
+              orderRow = JSON.stringify(parsed);
+            } catch {
+              modal.msgError("璁㈠崟瑙f瀽澶辫触锛岃妫�鏌ヤ簩缁寸爜鏍煎紡");
+              return;
+            }
+          }
+        }
+
+        navigateToReport(orderRow);
+      },
+      fail: () => {
+        uni.showToast({ title: "鎵爜澶辫触", icon: "none" });
+      },
+    });
+  };
+
+  onShow(() => {
+    handleQuery();
+  });
+</script>
+
+<style scoped lang="scss">
+  @import "@/styles/sales-common.scss";
+
+  .report-entry-page {
+    min-height: 100vh;
+    background: #f8f9fa;
+    display: flex;
+    flex-direction: column;
+  }
+
+  .scan-section {
+    padding: 12px 16px 8px;
+  }
+
+  .scan-card {
+    display: flex;
+    align-items: center;
+    gap: 12px;
+    background: #fff;
+    border-radius: 12px;
+    padding: 16px;
+    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
+  }
+
+  .scan-text-wrap {
+    flex: 1;
+    display: flex;
+    flex-direction: column;
+    gap: 4px;
+  }
+
+  .scan-title {
+    font-size: 16px;
+    font-weight: 600;
+    color: #303133;
+  }
+
+  .scan-desc {
+    font-size: 12px;
+    color: #909399;
+  }
+
+  .list-body {
+    flex: 1;
+    height: 0;
+    padding: 12px 16px 20px;
+    box-sizing: border-box;
+  }
+
+  .operation-header-right {
+    flex: 1;
+    min-width: 0;
+    justify-content: flex-end;
+    align-items: center;
+    flex-wrap: wrap;
+    gap: 8px;
+  }
+
+  .operation-pill {
+    max-width: 58%;
+    min-width: 0;
+    padding: 5px 12px;
+    border-radius: 20px;
+    background: #e8f1ff;
+    flex-shrink: 0;
+  }
+
+  .operation-pill-text {
+    font-size: 12px;
+    line-height: 1.35;
+    color: #2979ff;
+    font-weight: 500;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+    display: block;
+  }
+
+  .end-pill {
+    padding: 5px 10px;
+    border-radius: 20px;
+    background: #fef0f0;
+    flex-shrink: 0;
+  }
+
+  .end-pill-text {
+    font-size: 12px;
+    line-height: 1.35;
+    color: #f56c6c;
+    font-weight: 500;
+  }
+
+  .no-data {
+    flex: 1;
+    padding-top: 80px;
+  }
+</style>
diff --git a/src/pages/works.vue b/src/pages/works.vue
index 121a6e9..8d36ad9 100644
--- a/src/pages/works.vue
+++ b/src/pages/works.vue
@@ -306,7 +306,6 @@
 <script setup>
   import { ref, onMounted, nextTick, reactive, computed } from "vue";
   import { userLoginFacotryList } from "@/api/login";
-  import { getProductWorkOrderById } from "@/api/productionManagement/productionReporting";
   import DownloadProgressMask from "@/components/DownloadProgressMask.vue";
   import modal from "@/plugins/modal";
   import useUserStore from "@/store/modules/user";
@@ -868,7 +867,9 @@
         });
         break;
       case "鐢熶骇鎶ュ伐":
-        getcode();
+        uni.navigateTo({
+          url: "/pages/productionManagement/productionReport/workOrderList",
+        });
         break;
       case "鎶ュ伐鍙拌处":
         uni.navigateTo({
@@ -1076,88 +1077,6 @@
         factoryList.value = [];
       });
   }
-  const getcode = async () => {
-    uni.scanCode({
-      success: async res => {
-        // 瑙f瀽浜岀淮鐮佸唴瀹�
-        const scanResult = res.result;
-        let orderRow = "";
-
-        // 鍒ゆ柇鎵弿缁撴灉鏄惁涓虹函鏁板瓧锛坕d锛�
-        const isNumericId = /^\d+$/.test(scanResult.trim());
-
-        if (isNumericId) {
-          // 濡傛灉鏄函鏁板瓧锛屾牴鎹� id 鑾峰彇宸ュ崟鏁版嵁
-          const workOrderId = scanResult.trim();
-          modal.loading("姝e湪鑾峰彇宸ュ崟淇℃伅...");
-          try {
-            const workRes = await getProductWorkOrderById({ id: workOrderId });
-            modal.closeLoading();
-
-            console.log("宸ュ崟鏌ヨ缁撴灉:", workRes);
-
-            if (workRes.code === 200 && workRes.data) {
-              // 鏂版帴鍙h繑鍥炵殑鏄崟涓璞★紝涓嶆槸鏁扮粍
-              const workData = workRes.data;
-              console.log("宸ュ崟鏁版嵁:", workData);
-
-              if (workData.endOrder === true) {
-                modal.msgError("璇ヨ鍗曞凡缁撴潫锛屾棤娉曟姤宸�");
-                return;
-              }
-
-              orderRow = JSON.stringify(workData);
-
-              console.log("鏋勯�犵殑orderRow:", orderRow);
-            } else {
-              modal.msgError("鏈壘鍒板搴旂殑宸ュ崟淇℃伅");
-              return;
-            }
-          } catch (error) {
-            modal.closeLoading();
-            console.error("鑾峰彇宸ュ崟淇℃伅澶辫触:", error);
-            modal.msgError("鑾峰彇宸ュ崟淇℃伅澶辫触: " + (error.message || "鏈煡閿欒"));
-            return;
-          }
-        } else {
-          // 濡傛灉涓嶆槸绾暟瀛楋紝灏濊瘯浠庢壂鐮佺粨鏋滀腑鎻愬彇orderRow鍙傛暟
-          try {
-            // 澶勭悊娣峰悎鏍煎紡: http://...?orderRow={...}
-            const orderRowStart = scanResult.indexOf("orderRow={");
-            if (orderRowStart !== -1) {
-              // 鎻愬彇浠巓rderRow={寮�濮嬬殑JSON鍐呭
-              const jsonPart = scanResult.substring(orderRowStart + 9); // 9鏄�"orderRow=".length
-              orderRow = jsonPart;
-            } else {
-              // 濡傛灉鐩存帴鏄疛SON瀛楃涓诧紝灏濊瘯瑙f瀽
-              orderRow = scanResult;
-            }
-          } catch (e) {
-            console.error(e, "瑙f瀽澶辫触====????=====");
-            orderRow = "";
-          }
-
-          // 楠岃瘉鏄惁涓烘湁鏁堢殑JSON
-          try {
-            JSON.parse(orderRow);
-          } catch (error) {
-            modal.msgError("璁㈠崟瑙f瀽澶辫触锛岃妫�鏌ヤ簩缁寸爜鏍煎紡");
-            return;
-          }
-        }
-        // 鎵爜鎴愬姛鍚庤烦杞埌鐢熶骇鎶ュ伐椤甸潰锛屽苟浼犻�抩rderRow鍙傛暟
-        uni.navigateTo({
-          url: `/pages/productionManagement/productionReport/index?orderRow=${orderRow}`,
-        });
-      },
-      fail: err => {
-        uni.showToast({
-          title: "鎵爜澶辫触",
-          icon: "none",
-        });
-      },
-    });
-  };
   const changeFactory = async arr => {
     show.value = false;
     const factoryId = factoryListTem.value[arr.indexs[0]].deptId;

--
Gitblit v1.9.3