| | |
| | | <text class="text-[#0D867F] ml-2 font-medium">生产人</text> |
| | | <text class="text-[#333333] ml-2">{{ item.productUser }}</text> |
| | | </view> |
| | | <view class="text-[#A8A8A8]" @click="toEdit">编辑</view> |
| | | <!-- <view class="text-[#A8A8A8]" @click="toEdit">编辑</view> --> |
| | | </view> |
| | | </template> |
| | | <ProductionCard :data="cardAttr" :value="item" /> |
| | | <TwistReportCard :data="cardAttr" :value="item" /> |
| | | <template #footer> |
| | | <wd-button size="small" plain style="margin-right: 10px" @click="toAttachment(item)"> |
| | | 附件 |
| | | </wd-button> |
| | | <wd-button size="small" plain @click="handleSelfCheck(item.id)">自检</wd-button> |
| | | <wd-button |
| | | size="small" |
| | | plain |
| | | style="margin-right: 10px" |
| | | @click="handleSelfCheck(item.id)" |
| | | > |
| | | 自检 |
| | | </wd-button> |
| | | <wd-button size="small" plain type="error" @click="handleDelete(item)">删除</wd-button> |
| | | </template> |
| | | </wd-card> |
| | | </z-paging> |
| | |
| | | <wd-button type="text" @click="cancel">取消</wd-button> |
| | | <wd-button type="text" @click="submit">确定</wd-button> |
| | | </view> |
| | | <TwistForm ref="twistFormRef" /> |
| | | <TwistForm |
| | | ref="twistFormRef" |
| | | :first-tare-value="twistReportList.length > 0 ? twistReportList[0].tare : undefined" |
| | | :team-id="teamId" |
| | | :is-first-report="twistReportList.length === 0" |
| | | /> |
| | | </wd-popup> |
| | | <wd-popup v-model="drawFormRef.visible" position="bottom" custom-class="yl-popup"> |
| | | <Draw |
| | |
| | | <script setup lang="ts"> |
| | | import CardTitle from "@/components/card-title/index.vue"; |
| | | import TwistForm from "./form.vue"; |
| | | import { useToast } from "wot-design-uni"; |
| | | import ProductionCard from "../../components/ProductionCard.vue"; |
| | | import { useToast, dayjs } from "wot-design-uni"; |
| | | import TwistReportCard from "../components/TwistReportCard.vue"; |
| | | import { onLoad } from "@dcloudio/uni-app"; |
| | | import { ref, reactive } from "vue"; |
| | | import { ref, reactive, nextTick } from "vue"; |
| | | import ManageApi from "@/api/product/manage"; |
| | | import TwistApi from "@/api/product/twist"; |
| | | import Draw from "./draw.vue"; |
| | | import HomeApi from "@/api/home"; |
| | | import { setTeamId, getTeamId } from "@/utils/cache"; |
| | | |
| | | const drawFormRef = reactive({ |
| | | visible: false, |
| | |
| | | |
| | | const cardAttr = ref<any[]>([ |
| | | { |
| | | label: "领用杆号", |
| | | prop: "poleNumber", |
| | | }, |
| | | { |
| | | label: "杆重(kg)", |
| | | prop: "poleWeight", |
| | | }, |
| | | { |
| | | label: "单丝盘号", |
| | | label: "批次号", |
| | | prop: "monofilamentNumber", |
| | | span: 24, |
| | | }, |
| | | { |
| | | label: "实际重量(kg)", |
| | | prop: "actuallyWeight", |
| | | label: "质量追溯号", |
| | | prop: "systemNo", |
| | | span: 24, |
| | | }, |
| | | { |
| | | label: "盘长(m)", |
| | | prop: "oneLength", |
| | | }, |
| | | { |
| | | label: "理论重量(kg)", |
| | | prop: "theoryWeight", |
| | | }, |
| | | { |
| | | label: "规格型号", |
| | | prop: "model", |
| | | }, |
| | | { |
| | | label: "生产长度(m)", |
| | | prop: "actuallyLength", |
| | | }, |
| | | { |
| | | label: "盘具皮重(kg)", |
| | | prop: "tare", |
| | | }, |
| | | { |
| | | label: "生产日期", |
| | | prop: "productTime", |
| | | span: 24, |
| | | }, |
| | | { |
| | | label: "加工时间(h)", |
| | | prop: "processHour", |
| | | }, |
| | | ]); |
| | | |
| | | const twistReportList = ref<any[]>([]); |
| | | const teamId = ref<string | number | null>(null); |
| | | |
| | | // 获取并缓存班组ID |
| | | const initTeamId = async () => { |
| | | // 先尝试从缓存获取 |
| | | const cachedTeamId = getTeamId(); |
| | | if (cachedTeamId) { |
| | | teamId.value = cachedTeamId; |
| | | return; |
| | | } |
| | | |
| | | // 如果缓存中没有,则调用接口获取 |
| | | try { |
| | | const { data } = await HomeApi.getIndex(); |
| | | if (data && data.team) { |
| | | teamId.value = data.team; |
| | | setTeamId(data.team); |
| | | } |
| | | } catch (error) { |
| | | console.error("获取班组ID失败:", error); |
| | | } |
| | | }; |
| | | |
| | | const toEdit = () => { |
| | | uni.navigateTo({ |
| | |
| | | }); |
| | | }; |
| | | |
| | | // 主表数据 |
| | | const mainTableData = ref<any>({}); |
| | | |
| | | // 获取主表数据 |
| | | const getMainTableData = async () => { |
| | | try { |
| | | const { data } = await TwistApi.getTwistDetailById({ |
| | | id: paramsId.value, |
| | | }); |
| | | mainTableData.value = { |
| | | model: data.model, |
| | | totalLength: data.totalLength, |
| | | systemNo: data.systemNo, |
| | | }; |
| | | // 设置主表数据到表单组件 |
| | | if (twistFormRef.value) { |
| | | twistFormRef.value.setMainTableData(mainTableData.value); |
| | | } |
| | | } catch (error) { |
| | | console.error("获取主表数据失败:", error); |
| | | } |
| | | }; |
| | | |
| | | const addReport = async () => { |
| | | dialog.visible = true; |
| | | // 打开新增弹窗时自动执行 |
| | | // await showDrawPopup(); |
| | | // 检查是否所有数据都已保存(都有id) |
| | | if (twistReportList.value.length > 0 && twistReportList.value.every((item) => item.id)) { |
| | | // 确保主表数据已获取 |
| | | if (!mainTableData.value.model) { |
| | | await getMainTableData(); |
| | | } |
| | | dialog.visible = true; |
| | | // 等待弹窗打开后设置数据 |
| | | await nextTick(); |
| | | if (twistFormRef.value) { |
| | | twistFormRef.value.setMainTableData(mainTableData.value); |
| | | } |
| | | } else if (twistReportList.value.length === 0) { |
| | | // 确保主表数据已获取 |
| | | if (!mainTableData.value.model) { |
| | | await getMainTableData(); |
| | | } |
| | | dialog.visible = true; |
| | | // 等待弹窗打开后设置数据 |
| | | await nextTick(); |
| | | if (twistFormRef.value) { |
| | | twistFormRef.value.setMainTableData(mainTableData.value); |
| | | } |
| | | } else { |
| | | toast.warning("请先保存本条数据,再新增"); |
| | | } |
| | | }; |
| | | |
| | | const submit = async () => { |
| | | // 验证必填字段 - 根据参考代码,需要检查生产长度和盘具皮重 |
| | | const formData = twistFormRef.value?.getFormData?.() || {}; |
| | | const firstTareValue = |
| | | twistReportList.value.length > 0 ? twistReportList.value[0].tare : undefined; |
| | | |
| | | if (!formData.actuallyLength) { |
| | | toast.warning("请输入生产长度后再提交"); |
| | | return; |
| | | } |
| | | |
| | | if (!formData.tare && !firstTareValue) { |
| | | toast.warning("请输入盘具皮重后再提交"); |
| | | return; |
| | | } |
| | | |
| | | const isSuccess = await twistFormRef.value.submit(); |
| | | dialog.visible = !isSuccess; // 如果提交成功,关闭弹窗 |
| | | if (isSuccess) { |
| | | // 提交成功后执行 |
| | | // showDrawPopup(); |
| | | dialog.visible = false; |
| | | // 提交成功后刷新列表 |
| | | pagingRef.value?.reload(); |
| | | } |
| | | }; |
| | | |
| | | const cancel = () => { |
| | | toast.show("取消"); |
| | | dialog.visible = false; |
| | | }; |
| | | |
| | |
| | | }); |
| | | }; |
| | | |
| | | // 删除报工记录 |
| | | const handleDelete = (item: any) => { |
| | | uni.showModal({ |
| | | title: "提示", |
| | | content: "确定删除吗?", |
| | | success: async (res) => { |
| | | if (res.confirm) { |
| | | try { |
| | | if (item.id) { |
| | | const { code } = await TwistApi.deleteWireOutput({ id: item.id }); |
| | | if (code == 200) { |
| | | toast.success("删除成功"); |
| | | // 刷新列表 |
| | | pagingRef.value?.reload(); |
| | | } else { |
| | | toast.error("删除失败"); |
| | | } |
| | | } else { |
| | | toast.warning("该记录尚未保存,无法删除"); |
| | | } |
| | | } catch (error) { |
| | | console.error("删除失败:", error); |
| | | toast.error("删除失败,请重试"); |
| | | } |
| | | } |
| | | }, |
| | | }); |
| | | }; |
| | | |
| | | // 保留原有的confirm函数,用于其他地方调用 |
| | | // const confirm = async () => { |
| | | // await showDrawPopup(); |
| | |
| | | wireId: paramsId.value, |
| | | type: "绞线", |
| | | }); |
| | | // 格式化生产日期 |
| | | if (Array.isArray(data)) { |
| | | data.forEach((item: any) => { |
| | | if (item.productTime) { |
| | | item.productTime = dayjs(item.productTime).format("YYYY-MM-DD HH:mm:ss"); |
| | | } |
| | | }); |
| | | } |
| | | pagingRef.value.complete(data); |
| | | }; |
| | | |
| | | onLoad((options: any) => { |
| | | onLoad(async (options: any) => { |
| | | paramsId.value = options.id; |
| | | // 获取并缓存班组ID |
| | | await initTeamId(); |
| | | // 获取主表数据 |
| | | await getMainTableData(); |
| | | showDrawPopup(); |
| | | }); |
| | | </script> |