| | |
| | | <view class="list"> |
| | | <z-paging ref="pagingRef" v-model="twistReportList" :fixed="false" @query="getTwistReportList"> |
| | | <template #top> |
| | | <CardTitle title="报工信息" :hideAction="true" :full="false" @action="addReport" /> |
| | | <CardTitle title="报工信息" :hideAction="false" :full="false"> |
| | | <template #action> |
| | | <wd-button |
| | | icon="chart" |
| | | :round="false" |
| | | size="small" |
| | | plain |
| | | style="margin-right: 10px" |
| | | @click="handleSelfCheck" |
| | | > |
| | | 自检 |
| | | </wd-button> |
| | | <wd-button |
| | | icon="file-add" |
| | | :round="false" |
| | | size="small" |
| | | custom-class="add_btn" |
| | | @click="addReport" |
| | | > |
| | | 新增 |
| | | </wd-button> |
| | | </template> |
| | | </CardTitle> |
| | | </template> |
| | | <wd-card v-for="(item, index) in twistReportList" type="rectangle" custom-class="round"> |
| | | <wd-card v-for="item in twistReportList" :key="item.id" type="rectangle" custom-class="round"> |
| | | <template #title> |
| | | <view class="flex justify-between"> |
| | | <view> |
| | |
| | | <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 @click="toCheck(item.id)">自检</wd-button> |
| | | <wd-button size="small" plain style="margin-right: 10px" @click="toAttachment(item)"> |
| | | 附件 |
| | | </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 |
| | | :single-regulation-info-array="drawData.singleRegulationInfoArray" |
| | | :steel-regulation-info="drawData.steelRegulationInfo" |
| | | :reel-tooling-info="drawData.reelToolingInfo" |
| | | :wire-id="drawData.wireId" |
| | | @close="handleDrawClose" |
| | | /> |
| | | </wd-popup> |
| | | <wd-toast /> |
| | | </view> |
| | |
| | | <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, 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, setPrepareId } from "@/utils/cache"; |
| | | |
| | | const drawFormRef = reactive({ |
| | | visible: false, |
| | | }); |
| | | |
| | | // 处理draw组件关闭事件 |
| | | const handleDrawClose = () => { |
| | | // 确保弹窗被正确关闭 |
| | | drawFormRef.visible = false; |
| | | }; |
| | | const pagingRef = ref(); |
| | | const paramsId = ref(); |
| | | const twistFormRef = ref(); |
| | |
| | | const dialog = reactive({ |
| | | visible: false, |
| | | }); |
| | | const drawData = ref({ |
| | | singleRegulationInfoArray: [], |
| | | steelRegulationInfo: { |
| | | model: "", |
| | | twistedDirection: "", |
| | | outerDiameter: "", |
| | | scratch: "", |
| | | oilStain: "", |
| | | }, |
| | | reelToolingInfo: { |
| | | nutFixed: "", |
| | | sidePlateFlat: "", |
| | | centerPlateFlat: "", |
| | | paintQuality: "", |
| | | burrCrack: "", |
| | | edgeBlunt: "", |
| | | woodMold: "", |
| | | weldQuality: "", |
| | | }, |
| | | wireId: "", |
| | | }); |
| | | |
| | | 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和生产准备ID |
| | | const initTeamId = async () => { |
| | | // 先尝试从缓存获取 |
| | | const cachedTeamId = getTeamId(); |
| | | if (cachedTeamId) { |
| | | teamId.value = cachedTeamId; |
| | | } |
| | | |
| | | // 调用接口获取最新数据 |
| | | try { |
| | | const { data } = await HomeApi.getIndex(); |
| | | if (data) { |
| | | // 存储班组ID |
| | | if (data.id) { |
| | | teamId.value = data.id; |
| | | setTeamId(data.id); |
| | | } |
| | | // 存储生产准备ID |
| | | if (data.prepareId) { |
| | | setPrepareId(data.prepareId); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | console.error("获取数据失败:", error); |
| | | } |
| | | }; |
| | | |
| | | const toEdit = () => { |
| | | uni.navigateTo({ |
| | |
| | | }); |
| | | }; |
| | | |
| | | const addReport = () => { |
| | | dialog.visible = true; |
| | | // 主表数据 |
| | | 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 submit = () => { |
| | | dialog.visible = twistFormRef.value.submit(); |
| | | const addReport = async () => { |
| | | // 检查是否所有数据都已保存(都有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(); |
| | | if (isSuccess) { |
| | | dialog.visible = false; |
| | | // 提交成功后刷新列表 |
| | | pagingRef.value?.reload(); |
| | | } |
| | | }; |
| | | |
| | | const cancel = () => { |
| | | toast.show("取消"); |
| | | dialog.visible = false; |
| | | }; |
| | | |
| | | const toCheck = (id: number) => { |
| | | const toAttachment = (item: any) => { |
| | | uni.navigateTo({ |
| | | url: `/pages/production/twist/selfInspect/index?id=${id}`, |
| | | url: "/pages/production/twist/attachment/index", |
| | | success: () => { |
| | | // 页面跳转成功后发送事件传递数据 |
| | | uni.$emit("detailData", item); |
| | | }, |
| | | }); |
| | | }; |
| | | |
| | | const showDrawPopup = async () => { |
| | | try { |
| | | const { data } = await TwistApi.querySingleDishInspection({ |
| | | id: paramsId.value, |
| | | }); |
| | | // 适配不同的数据结构返回格式 |
| | | const responseData = data.data || data; |
| | | if (responseData && responseData.singleWirePrePareInfoVo) { |
| | | const info = responseData.singleWirePrePareInfoVo; |
| | | drawData.value = { |
| | | singleRegulationInfoArray: info.singleRegulationInfoArray || [], |
| | | steelRegulationInfo: info.steelRegulationInfo || {}, |
| | | reelToolingInfo: info.reelToolingInfo || {}, |
| | | wireId: paramsId.value, |
| | | }; |
| | | // 显示Draw弹窗 |
| | | drawFormRef.visible = true; |
| | | toast.success("请填写领用信息!"); |
| | | } else { |
| | | // toast.error("已存在领用信息,无需填报!"); |
| | | } |
| | | } catch (error) { |
| | | console.error("获取领用信息失败:", error); |
| | | toast.error("获取信息失败,请重试"); |
| | | } |
| | | }; |
| | | |
| | | const handleSelfCheck = () => { |
| | | // 跳转到自检页面,传递 wireId |
| | | uni.navigateTo({ |
| | | url: `/pages/production/twist/selfInspect/index?id=${paramsId.value}`, |
| | | }); |
| | | }; |
| | | |
| | | // 删除报工记录 |
| | | 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(); |
| | | // }; |
| | | |
| | | // 获取拉丝报工列表 |
| | | const getTwistReportList = async () => { |
| | |
| | | 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> |
| | | |