| | |
| | | @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> |
| | |
| | | <wd-button type="text" @click="cancelAdd">取消</wd-button> |
| | | <wd-button type="text" @click="submitAdd">确定</wd-button> |
| | | </view> |
| | | <SteelCore ref="addFormRef" mode="add" @refresh="reloadList" /> |
| | | <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"> |
| | |
| | | <SteelCore |
| | | ref="editFormRef" |
| | | mode="edit" |
| | | :wireId="paramsId" |
| | | :editData="editDialog.currentItem" |
| | | @refresh="reloadList" |
| | | /> |
| | | </wd-popup> |
| | | <Scan ref="scanRef" emitName="scanSteelCore" /> |
| | | <wd-toast /> |
| | | </view> |
| | | </template> |
| | |
| | | import ProductionCard from "../../../components/ProductionCard.vue"; |
| | | import { useToast } from "wot-design-uni"; |
| | | import SteelCore from "./form.vue"; |
| | | import { onLoad } 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 addFormRef = ref(); |
| | | const editFormRef = ref(); |
| | | const scanRef = ref(); |
| | | const toast = useToast(); |
| | | const isPageVisible = ref(false); // 标记页面是否可见 |
| | | const addDialog = reactive({ |
| | | visible: false, |
| | | }); |
| | |
| | | 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(() => { |
| | | // 页面显示时标记为可见 |
| | | 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> |