From 27c416bf9742574411401fb67203ee9669e57c8a Mon Sep 17 00:00:00 2001
From: spring <2396852758@qq.com>
Date: 星期三, 26 十一月 2025 14:20:02 +0800
Subject: [PATCH] fix: 绞线报工的盘具领用和芯线领用的厂家字段使用字典维护做下拉框

---
 src/pages/production/twist/receive/steelCore/index.vue |  231 ++++++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 187 insertions(+), 44 deletions(-)

diff --git a/src/pages/production/twist/receive/steelCore/index.vue b/src/pages/production/twist/receive/steelCore/index.vue
index 7195115..1e6b91c 100644
--- a/src/pages/production/twist/receive/steelCore/index.vue
+++ b/src/pages/production/twist/receive/steelCore/index.vue
@@ -1,27 +1,54 @@
 <template>
-  <view class="page pt-2">
-    <CardTitle title="閽㈣姱棰嗙敤" :hideAction="true" @action="addReport" />
-    <view class="list">
-      <wd-card v-for="(item, index) in 2" :key="index" type="rectangle" custom-class="round">
+  <view class="list">
+    <z-paging
+      ref="pagingRef"
+      v-model="cardList"
+      :fixed="false"
+      :auto-show-back-to-top="true"
+      @query="getList"
+    >
+      <template #top>
+        <CardTitle title="鑺嚎棰嗙敤" :hideAction="false" :full="false">
+          <template #action>
+            <wd-button type="icon" icon="scan" color="#0D867F" @click="openScan"></wd-button>
+            <wd-button type="icon" icon="add-circle" color="#0D867F" @click="addReport"></wd-button>
+          </template>
+        </CardTitle>
+      </template>
+      <wd-card v-for="(item, index) in cardList" :key="index" type="rectangle" custom-class="round">
         <template #title>
           <view class="flex justify-between">
             <view>
               <wd-icon name="a-rootlist" color="#0D867F"></wd-icon>
-              <text class="text-[#252525] ml-2 font-medium">JX28201021-1</text>
+              <text class="text-[#252525] ml-2 font-medium">{{ item.model }}</text>
             </view>
-            <view class="text-[#A8A8A8]" @click="toEdit">缂栬緫</view>
+            <view class="text-[#A8A8A8]" @click="toEdit(item.id)">缂栬緫</view>
           </view>
         </template>
-        <ProductionCard :data="cardAttr" color="#0D867F" />
+        <ProductionCard :data="cardAttr" :value="item" color="#0D867F" />
       </wd-card>
-    </view>
-    <wd-popup v-model="dialog.visible" position="bottom" custom-class="yl-popup">
+    </z-paging>
+    <wd-popup v-model="addDialog.visible" position="bottom" custom-class="yl-popup">
       <view class="action px-3">
-        <wd-button type="text" @click="cancel">鍙栨秷</wd-button>
-        <wd-button type="text" @click="submit">纭畾</wd-button>
+        <wd-button type="text" @click="cancelAdd">鍙栨秷</wd-button>
+        <wd-button type="text" @click="submitAdd">纭畾</wd-button>
       </view>
-      <PlateForm />
+      <SteelCore ref="addFormRef" mode="add" :wireId="paramsId" @refresh="reloadList" />
     </wd-popup>
+    <wd-popup v-model="editDialog.visible" position="bottom" custom-class="yl-popup">
+      <view class="action px-3">
+        <wd-button type="text" @click="cancelEdit">鍙栨秷</wd-button>
+        <wd-button type="text" @click="submitEdit">纭畾</wd-button>
+      </view>
+      <SteelCore
+        ref="editFormRef"
+        mode="edit"
+        :wireId="paramsId"
+        :editData="editDialog.currentItem"
+        @refresh="reloadList"
+      />
+    </wd-popup>
+    <Scan ref="scanRef" emitName="scanSteelCore" />
     <wd-toast />
   </view>
 </template>
@@ -30,70 +57,182 @@
 import CardTitle from "@/components/card-title/index.vue";
 import ProductionCard from "../../../components/ProductionCard.vue";
 import { useToast } from "wot-design-uni";
-import PlateForm from "./form.vue";
+import SteelCore from "./form.vue";
+import { onLoad, onUnload, onShow, onHide } from "@dcloudio/uni-app";
+import ManageApi from "@/api/product/manage";
+import TwistApi from "@/api/product/twist";
+import zPaging from "@/components/z-paging/z-paging.vue";
+import Scan from "@/components/scan/index.vue";
 
+const paramsId = ref();
+const pagingRef = ref();
+const addFormRef = ref();
+const editFormRef = ref();
+const scanRef = ref();
 const toast = useToast();
-const dialog = reactive({
+const isPageVisible = ref(false); // 鏍囪椤甸潰鏄惁鍙
+const addDialog = reactive({
   visible: false,
 });
+const editDialog = reactive({
+  visible: false,
+  currentItem: null as any,
+  editId: undefined as number | undefined,
+});
+const cardList = ref<any[]>([]);
 
 const cardAttr = ref<any[]>([
   {
-    label: "鐩樺彿",
-    value: "1902101",
+    label: "鏍峰搧缂栧彿",
+    prop: "monofilamentNumber",
   },
   {
-    label: "闀垮害",
-    value: "46kg",
+    label: "鏁伴噺",
+    prop: "amount",
+    unitProp: "unit",
   },
   {
     label: "閲嶉噺",
-    value: "10kg",
-  },
-  {
-    label: undefined,
-    value: undefined,
+    prop: "weight",
+    unitProp: "weightUnit",
   },
   {
     label: "鍘傚",
-    value: "姹熻嫃鐪佸崡閫氬競鑺鏁板瓧鍘�",
-    span: 14,
+    prop: "supplier",
+    span: 16,
   },
 ]);
 
-const toEdit = () => {
-  uni.navigateTo({
-    url: "/pages/production/twist/receive/steelCore/edit",
-  });
+const toEdit = (id: number) => {
+  const itemToEdit = cardList.value.find((item) => item.id === id);
+  if (itemToEdit) {
+    editDialog.currentItem = itemToEdit;
+    editDialog.editId = id;
+    editDialog.visible = true;
+  }
 };
 
 const addReport = () => {
-  dialog.visible = true;
+  if (addFormRef.value) {
+    addFormRef.value.resetFormData();
+  }
+  addDialog.visible = true;
 };
 
-const submit = () => {
-  toast.show("鎻愪氦");
-  dialog.visible = false;
+const submitAdd = async () => {
+  const success = await addFormRef.value.submit();
+  if (success) {
+    addDialog.visible = false;
+  }
 };
 
-const cancel = () => {
+const cancelAdd = () => {
   toast.show("鍙栨秷");
-  dialog.visible = false;
+  addDialog.visible = false;
 };
+
+const submitEdit = async () => {
+  const success = await editFormRef.value.submitEdit(cardList.value, editDialog.editId);
+  if (success) {
+    editDialog.visible = false;
+    reloadList();
+  }
+};
+
+const cancelEdit = () => {
+  toast.show("鍙栨秷");
+  editDialog.visible = false;
+};
+
+const getList = async () => {
+  const { code, data } = await ManageApi.getStrandedWireDish({
+    wireId: paramsId.value,
+    type: "閽㈣姱",
+  });
+  if (code == 200) {
+    pagingRef.value.complete(data);
+  }
+};
+
+const reloadList = () => {
+  pagingRef.value.refresh();
+};
+
+// 鎵爜鐩稿叧鏂规硶
+const openScan = () => {
+  scanRef.value.triggerScan();
+};
+
+const getScanCode = async (code: any) => {
+  // 妫�鏌ラ〉闈㈡槸鍚﹀彲瑙侊紝濡傛灉涓嶅彲瑙佸垯涓嶅鐞嗘壂鐮佹暟鎹�
+  if (!isPageVisible.value) {
+    return;
+  }
+
+  try {
+    const parseData = JSON.parse(code.code);
+
+    // 妫�鏌ュ繀闇�瀛楁锛歮odel銆乻upplier銆乨iskMaterial
+    const requiredFields = ["model", "supplier", "diskMaterial"];
+    const missingFields = requiredFields.filter((field) => !parseData[field]);
+
+    if (missingFields.length > 0) {
+      toast.error(`浜岀淮鐮侀敊璇紝璇锋洿鎹簩缁寸爜锛乣);
+      return;
+    }
+
+    // 鎵撳紑鏂板寮规骞跺~鍏呮壂鐮佽幏鍙栫殑淇℃伅
+    addDialog.visible = true;
+
+    // 绛夊緟寮规鎵撳紑鍚庡~鍏呰〃鍗曟暟鎹�
+    // 浣跨敤鍙岄噸绛夊緟锛歯extTick + setTimeout 纭繚缁勪欢宸插畬鍏ㄦ寕杞�
+    nextTick(() => {
+      setTimeout(() => {
+        if (addFormRef.value) {
+          addFormRef.value.fillFormData(parseData);
+          toast.success("鎵爜鎴愬姛锛岃纭淇℃伅");
+        } else {
+          toast.error("琛ㄥ崟鍔犺浇澶辫触锛岃閲嶈瘯");
+        }
+      }, 200); // 寤惰繜200ms纭繚寮规鍜岀粍浠跺凡瀹屽叏娓叉煋
+    });
+  } catch (error) {
+    toast.error("浜岀淮鐮佸紓甯革紝璇锋洿鎹簩缁寸爜锛�");
+  }
+};
+
+onLoad((options: any) => {
+  // 寮�鍚箍鎾洃鍚簨浠�
+  uni.$on("scanSteelCore", getScanCode);
+  paramsId.value = options.id;
+});
+
+onShow(() => {
+  // 椤甸潰鏄剧ず鏃舵爣璁颁负鍙
+  isPageVisible.value = true;
+});
+
+onHide(() => {
+  // 椤甸潰闅愯棌鏃舵爣璁颁负涓嶅彲瑙�
+  isPageVisible.value = false;
+});
+
+onUnload(() => {
+  // 鍙栨秷骞挎挱鐩戝惉浜嬩欢
+  uni.$off("scanSteelCore", getScanCode);
+  isPageVisible.value = false;
+});
 </script>
 
 <style lang="scss" scoped>
-.page {
+.list {
+  height: calc(100vh - 120px);
+  padding: 12px;
   background: #f3f9f8;
-  .list {
-    height: calc(100vh - 120px);
-    margin: 12px;
-    overflow: scroll;
 
-    :deep() {
-      .round {
-        border-radius: 4px;
-      }
+  :deep() {
+    .round {
+      border-radius: 4px;
     }
   }
 }
@@ -102,4 +241,8 @@
   display: flex;
   justify-content: space-between;
 }
+
+:deep(.wd-button__content) {
+  color: #0d867f;
+}
 </style>

--
Gitblit v1.9.3