|  |  | 
 |  |  |   <view class="list_box"> | 
 |  |  |     <z-paging | 
 |  |  |       ref="pagingRef" | 
 |  |  |       v-model="cardList" | 
 |  |  |       :fixed="false" | 
 |  |  |       :auto-show-back-to-top="true" | 
 |  |  |       :loading-more-enabled="false" | 
 |  |  | 
 |  |  |           </template> | 
 |  |  |         </CardTitle> | 
 |  |  |       </template> | 
 |  |  |       <MonofilCard v-for="(item, index) in cardList" :key="index" :data="item" /> | 
 |  |  |       <!-- <MonofilCard v-for="(item, index) in cardList" :key="index" :data="item" /> --> | 
 |  |  |       <wd-tabs v-model="tab" slidable="always"> | 
 |  |  |         <block v-for="item in nodeList" :key="item"> | 
 |  |  |           <wd-tab :title="item.twistedLayer" :name="item.twistedLayer"> | 
 |  |  |             <view class="content"> | 
 |  |  |               <MonofilCard v-for="(m, i) in item.strandedWireDish" :key="i" :data="m" /> | 
 |  |  |             </view> | 
 |  |  |           </wd-tab> | 
 |  |  |         </block> | 
 |  |  |       </wd-tabs> | 
 |  |  |       <template #bottom> | 
 |  |  |         <view class="flex justify-center items-center"> | 
 |  |  |           <wd-button block @click="save"> | 
 |  |  | 
 |  |  |       </template> | 
 |  |  |     </z-paging> | 
 |  |  |     <Scan ref="scanRef" emitName="scanMono" /> | 
 |  |  |     <StatisticsModal | 
 |  |  |       v-model:visible="showStatisticsModal" | 
 |  |  |       :nodeList="nodeList" | 
 |  |  |       @confirm="handleConfirmSave" | 
 |  |  |     /> | 
 |  |  |     <wd-toast /> | 
 |  |  |   </view> | 
 |  |  | </template> | 
 |  |  | 
 |  |  | <script setup lang="ts"> | 
 |  |  | import CardTitle from "@/components/card-title/index.vue"; | 
 |  |  | import MonofilCard from "../components/MonofilCard.vue"; | 
 |  |  | import StatisticsModal from "../components/StatisticsModal.vue"; | 
 |  |  | import { useToast } from "wot-design-uni"; | 
 |  |  | import { onLoad, onUnload } from "@dcloudio/uni-app"; | 
 |  |  | import Scan from "@/components/scan/index.vue"; | 
 |  |  | 
 |  |  | const paramsId = ref(); | 
 |  |  | const pagingRef = ref(); | 
 |  |  | const scanRef = ref(); | 
 |  |  | const cardList = ref<any[]>([]); | 
 |  |  | const toast = useToast(); | 
 |  |  | const tab = ref(""); | 
 |  |  | const showStatisticsModal = ref(false); | 
 |  |  |  | 
 |  |  | // ç嬿 ç¾åæ¢ | 
 |  |  | watch(tab, () => { | 
 |  |  |   if (tab.value) { | 
 |  |  |     console.log("tab.value:===========1", tab.value); | 
 |  |  |     getList(); | 
 |  |  |   } | 
 |  |  | }); | 
 |  |  |  | 
 |  |  | const getScanCode = async (code: any) => { | 
 |  |  |   console.log("èªå®ä¹æ«æçç»æåè°å½æ°:", code); | 
 |  |  | 
 |  |  |   const { data } = await TwistApi.getScarn({ | 
 |  |  |     outPutId: JSON.parse(code.code).id, | 
 |  |  |   }); | 
 |  |  |   const exists = cardList.value.some((item) => item.monofilamentNumber === data.monofilamentNumber); | 
 |  |  |  | 
 |  |  |   // æ£æ¥æ¯å¦å·²éæ©æ ç¾ | 
 |  |  |   if (!tab.value) { | 
 |  |  |     toast.error("请å
éæ©ä¸ä¸ªå±"); | 
 |  |  |     return; | 
 |  |  |   } | 
 |  |  |  | 
 |  |  |   // æ¾å°å½åéä¸çå± | 
 |  |  |   console.log("tab.value:===========2", tab.value); | 
 |  |  |   const currentLayer = nodeList.value.find((node) => node.twistedLayer === tab.value); | 
 |  |  |   if (!currentLayer) { | 
 |  |  |     toast.error("æªæ¾å°å½åéä¸çå±"); | 
 |  |  |     return; | 
 |  |  |   } | 
 |  |  |  | 
 |  |  |   // æ£æ¥å½å屿¯å¦å·²åå¨è¯¥åä¸ | 
 |  |  |   const exists = currentLayer.strandedWireDish?.some( | 
 |  |  |     (item: any) => item.monofilamentNumber === data.monofilamentNumber | 
 |  |  |   ); | 
 |  |  |   if (!exists) { | 
 |  |  |     const { id, outPutId, wireId, oneLength, ...rest } = data; | 
 |  |  |     console.log("sb", { | 
 |  |  |     const newItem = { | 
 |  |  |       wireId: paramsId.value, | 
 |  |  |       outputId: id, | 
 |  |  |       amount: oneLength, | 
 |  |  |       ongLength: oneLength, | 
 |  |  |       ...rest, | 
 |  |  |     }); | 
 |  |  |     cardList.value.push({ | 
 |  |  |       wireId: paramsId.value, | 
 |  |  |       outputId: id, | 
 |  |  |       amount: oneLength, | 
 |  |  |       ongLength: oneLength, | 
 |  |  |       ...rest, | 
 |  |  |     }); | 
 |  |  |     pagingRef.value.complete(cardList.value); | 
 |  |  |     }; | 
 |  |  |  | 
 |  |  |     // æ·»å å°å½åå±ç strandedWireDish ä¸ | 
 |  |  |     if (!currentLayer.strandedWireDish) { | 
 |  |  |       currentLayer.strandedWireDish = []; | 
 |  |  |     } | 
 |  |  |     currentLayer.strandedWireDish.push(newItem); | 
 |  |  |  | 
 |  |  |     // å·æ°å½åå±çæ°æ®æ¾ç¤º | 
 |  |  |     getList(); | 
 |  |  |   } else { | 
 |  |  |     toast.error("该åä¸å·²é¢ç¨ï¼è¯·å¿é夿«ç "); | 
 |  |  |   } | 
 |  |  | 
 |  |  | }; | 
 |  |  |  | 
 |  |  | const getList = async () => { | 
 |  |  |   const { code, data } = await ManageApi.getStrandedWireDish({ | 
 |  |  |     wireId: paramsId.value, | 
 |  |  |     type: "åä¸", | 
 |  |  |   }); | 
 |  |  |   if (code == 200) { | 
 |  |  |     pagingRef.value.complete(data); | 
 |  |  |   // ä»å½åéä¸å±ç strandedWireDish ä¸è·åæ°æ® | 
 |  |  |   const currentLayer = nodeList.value.find((node) => node.twistedLayer === tab.value); | 
 |  |  |   if (currentLayer && currentLayer.strandedWireDish) { | 
 |  |  |     pagingRef.value.complete(currentLayer.strandedWireDish); | 
 |  |  |   } else { | 
 |  |  |     pagingRef.value.complete([]); | 
 |  |  |   } | 
 |  |  | }; | 
 |  |  |  | 
 |  |  | const save = async () => { | 
 |  |  |   const value = cardList.value.filter((item: { id?: number }) => item.id === undefined || item.id === null); | 
 |  |  | let nodeList = ref<any[]>([]); | 
 |  |  | // è·åæ ¹å· | 
 |  |  | const getRootNumber = async (wireId: number) => { | 
 |  |  |   const { code, data, msg } = await TwistApi.getRootNumber({ wireId }); | 
 |  |  |   if (code === 200) { | 
 |  |  |     nodeList.value = data.nodeList; | 
 |  |  |     if (data.otherStrandedWireDish && data.otherStrandedWireDish.length > 0) { | 
 |  |  |       nodeList.value.push({ | 
 |  |  |         strandedWireDish: data.otherStrandedWireDish, | 
 |  |  |         twistedLayer: "å
¶ä»", | 
 |  |  |         twistId: null, | 
 |  |  |       }); | 
 |  |  |     } | 
 |  |  |     // è®¾ç½®é»è®¤ç¬¬ä¸å± | 
 |  |  |     if (nodeList.value && nodeList.value.length > 0 && !tab.value) { | 
 |  |  |       tab.value = nodeList.value[0].twistedLayer; | 
 |  |  |       console.log("设置é»è®¤ç¬¬ä¸å±:", tab.value); | 
 |  |  |       // è®¾ç½®é»è®¤æ ç¾åï¼å è½½ç¬¬ä¸å±çæ°æ® | 
 |  |  |       getList(); | 
 |  |  |     } | 
 |  |  |   } else { | 
 |  |  |     toast.error(msg || "è·åæ ¹å·å¤±è´¥"); | 
 |  |  |   } | 
 |  |  | }; | 
 |  |  |  | 
 |  |  |   const { code,msg } = await TwistApi.addStrandedWireDish(value); | 
 |  |  | const save = () => { | 
 |  |  |   // æ£æ¥ nodeList ä¸æ¯å¦ææ°çå䏿°æ®éè¦ä¿å | 
 |  |  |   let hasNewData = false; | 
 |  |  |  | 
 |  |  |   nodeList.value.forEach((node) => { | 
 |  |  |     if (node.strandedWireDish && Array.isArray(node.strandedWireDish)) { | 
 |  |  |       const hasNewInLayer = node.strandedWireDish.some( | 
 |  |  |         (item: { id?: number }) => item.id === undefined || item.id === null | 
 |  |  |       ); | 
 |  |  |       if (hasNewInLayer) { | 
 |  |  |         hasNewData = true; | 
 |  |  |       } | 
 |  |  |     } | 
 |  |  |   }); | 
 |  |  |  | 
 |  |  |   if (!hasNewData) { | 
 |  |  |     toast.error("æ²¡ææ°çå䏿°æ®éè¦ä¿å"); | 
 |  |  |     return; | 
 |  |  |   } | 
 |  |  |  | 
 |  |  |   // æ¾ç¤ºç»è®¡å¼¹æ¡ | 
 |  |  |   showStatisticsModal.value = true; | 
 |  |  | }; | 
 |  |  |  | 
 |  |  | const handleConfirmSave = async () => { | 
 |  |  |   // ä» nodeList ä¸æ¶éææéè¦ä¿åçæ°å䏿°æ® | 
 |  |  |   const newData: any[] = []; | 
 |  |  |  | 
 |  |  |   nodeList.value.forEach((node) => { | 
 |  |  |     node.strandedWireDish.forEach((item: any) => { | 
 |  |  |       item.twistId = node.twistId; | 
 |  |  |     }); | 
 |  |  |     if (node.strandedWireDish && Array.isArray(node.strandedWireDish)) { | 
 |  |  |       const layerNewData = node.strandedWireDish.filter( | 
 |  |  |         (item: { id?: number }) => item.id === undefined || item.id === null | 
 |  |  |       ); | 
 |  |  |       newData.push(...layerNewData); | 
 |  |  |     } | 
 |  |  |   }); | 
 |  |  |  | 
 |  |  |   if (newData.length === 0) { | 
 |  |  |     toast.error("æ²¡ææ°çå䏿°æ®éè¦ä¿å"); | 
 |  |  |     return; | 
 |  |  |   } | 
 |  |  |  | 
 |  |  |   const { code, msg } = await TwistApi.addStrandedWireDish(newData); | 
 |  |  |   if (code == 200) { | 
 |  |  |     toast.success(msg); | 
 |  |  |     cardList.value = []; | 
 |  |  |  | 
 |  |  |     // æ¸
空ææå±ä¸å·²ä¿åçæ°æ®ï¼ç»å·²ä¿åçæ°æ®æ·»å  idï¼ | 
 |  |  |     nodeList.value.forEach((node) => { | 
 |  |  |       if (node.strandedWireDish && Array.isArray(node.strandedWireDish)) { | 
 |  |  |         node.strandedWireDish.forEach((item: any) => { | 
 |  |  |           if (item.id === undefined || item.id === null) { | 
 |  |  |             item.id = Date.now(); // ä¸´æ¶æ è®°ä¸ºå·²ä¿å | 
 |  |  |           } | 
 |  |  |         }); | 
 |  |  |       } | 
 |  |  |     }); | 
 |  |  |  | 
 |  |  |     pagingRef.value.refresh(); | 
 |  |  |     getList(); | 
 |  |  |   } else { | 
 |  |  | 
 |  |  |   } | 
 |  |  | }; | 
 |  |  |  | 
 |  |  | onLoad((options: any) => { | 
 |  |  | onLoad(async (options: any) => { | 
 |  |  |   // å¼å¯å¹¿æçå¬äºä»¶ | 
 |  |  |   uni.$on("scanMono", getScanCode); | 
 |  |  |   paramsId.value = options.id; | 
 |  |  |  | 
 |  |  |   // è°ç¨è·åæ ¹å·æ¥å£ | 
 |  |  |   getRootNumber(options.id); | 
 |  |  |   // getRootNumber(118); | 
 |  |  | }); | 
 |  |  | onUnload(() => { | 
 |  |  |   // å¼å¯å¹¿æçå¬äºä»¶ | 
 |  |  | 
 |  |  | :deep(.wd-button__content) { | 
 |  |  |   color: #0d867f; | 
 |  |  | } | 
 |  |  | :deep(.zp-paging-container) { | 
 |  |  |   background: transparent !important; | 
 |  |  | } | 
 |  |  | :deep(.zp-paging-container-content) { | 
 |  |  |   background: transparent !important; | 
 |  |  | } | 
 |  |  | :deep(.wd-tabs) { | 
 |  |  |   background: transparent !important; | 
 |  |  | } | 
 |  |  | :deep(.wd-tabs__nav) { | 
 |  |  |   margin-bottom: 10px; | 
 |  |  | } | 
 |  |  | </style> |