| | |
| | | @query="getList" |
| | | > |
| | | <template #top> |
| | | <CardTitle title="钢芯领用" :hideAction="true" :full="false" @action="addReport" /> |
| | | <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> |
| | |
| | | <ProductionCard :data="cardAttr" :value="item" color="#0D867F" /> |
| | | </wd-card> |
| | | </z-paging> |
| | | <wd-popup v-model="addDialog.visible" position="bottom" custom-class="yl-popup"> |
| | | <view class="action px-3"> |
| | | <wd-button type="text" @click="cancelAdd">取消</wd-button> |
| | | <wd-button type="text" @click="submitAdd">确定</wd-button> |
| | | </view> |
| | | <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> |
| | | <wd-popup v-model="dialog.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> |
| | | </view> |
| | | <SteelCore ref="steelCoreRef" @refresh="reloadList" /> |
| | | </wd-popup> |
| | | <wd-toast /> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | |
| | | import ProductionCard from "../../../components/ProductionCard.vue"; |
| | | import { useToast } from "wot-design-uni"; |
| | | import SteelCore from "./form.vue"; |
| | | import { onLoad, onShow } from "@dcloudio/uni-app"; |
| | | 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 steelCoreRef = 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 needRefresh = ref(false); // 标记是否需要刷新 |
| | | |
| | | const cardAttr = ref<any[]>([ |
| | | { |
| | |
| | | ]); |
| | | |
| | | const toEdit = (id: number) => { |
| | | needRefresh.value = true; // 标记需要刷新 |
| | | |
| | | // 确保 cardList 是数组 |
| | | const listData = Array.isArray(cardList.value) ? cardList.value : []; |
| | | console.log("toEdit - 传递的列表数据:", listData, "编辑ID:", id); |
| | | |
| | | uni.navigateTo({ |
| | | url: `/pages/production/twist/receive/steelCore/edit?id=${id}`, |
| | | success: () => { |
| | | // 页面跳转成功后发送事件传递完整列表数据和当前编辑ID |
| | | uni.$emit("steelCoreEditData", { |
| | | list: listData, |
| | | editId: id, |
| | | }); |
| | | }, |
| | | }); |
| | | }; |
| | | |
| | | const addReport = () => { |
| | | dialog.visible = true; |
| | | }; |
| | | |
| | | const submit = async () => { |
| | | const success = await steelCoreRef.value.submit(); |
| | | if (success) { |
| | | dialog.visible = false; |
| | | const itemToEdit = cardList.value.find((item) => item.id === id); |
| | | if (itemToEdit) { |
| | | editDialog.currentItem = itemToEdit; |
| | | editDialog.editId = id; |
| | | editDialog.visible = true; |
| | | } |
| | | }; |
| | | |
| | | const cancel = () => { |
| | | const addReport = () => { |
| | | if (addFormRef.value) { |
| | | addFormRef.value.resetFormData(); |
| | | } |
| | | addDialog.visible = true; |
| | | }; |
| | | |
| | | const submitAdd = async () => { |
| | | const success = await addFormRef.value.submit(); |
| | | if (success) { |
| | | addDialog.visible = false; |
| | | } |
| | | }; |
| | | |
| | | 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 () => { |
| | |
| | | pagingRef.value.refresh(); |
| | | }; |
| | | |
| | | // 扫码相关方法 |
| | | const openScan = () => { |
| | | scanRef.value.triggerScan(); |
| | | }; |
| | | |
| | | const getScanCode = async (code: any) => { |
| | | // 检查页面是否可见,如果不可见则不处理扫码数据 |
| | | if (!isPageVisible.value) { |
| | | return; |
| | | } |
| | | |
| | | try { |
| | | const parseData = JSON.parse(code.code); |
| | | |
| | | // 检查必需字段:model、supplier、diskMaterial |
| | | const requiredFields = ["model", "supplier", "diskMaterial"]; |
| | | const missingFields = requiredFields.filter((field) => !parseData[field]); |
| | | |
| | | if (missingFields.length > 0) { |
| | | toast.error(`二维码错误,请更换二维码!`); |
| | | return; |
| | | } |
| | | |
| | | // 打开新增弹框并填充扫码获取的信息 |
| | | addDialog.visible = true; |
| | | |
| | | // 等待弹框打开后填充表单数据 |
| | | // 使用双重等待:nextTick + 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(() => { |
| | | // 从编辑页返回时刷新列表 |
| | | if (needRefresh.value) { |
| | | reloadList(); |
| | | needRefresh.value = false; |
| | | } |
| | | // 页面显示时标记为可见 |
| | | isPageVisible.value = true; |
| | | }); |
| | | |
| | | onHide(() => { |
| | | // 页面隐藏时标记为不可见 |
| | | isPageVisible.value = false; |
| | | }); |
| | | |
| | | onUnload(() => { |
| | | // 取消广播监听事件 |
| | | uni.$off("scanSteelCore", getScanCode); |
| | | isPageVisible.value = false; |
| | | }); |
| | | </script> |
| | | |
| | |
| | | display: flex; |
| | | justify-content: space-between; |
| | | } |
| | | |
| | | :deep(.wd-button__content) { |
| | | color: #0d867f; |
| | | } |
| | | </style> |