<template>
|
<view class="list">
|
<z-paging ref="pagingRef" v-model="twistReportList" :fixed="false" @query="getTwistReportList">
|
<template #top>
|
<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 in twistReportList" :key="item.id" type="rectangle" custom-class="round">
|
<template #title>
|
<view class="flex justify-between">
|
<view>
|
<wd-icon name="user" color="#0D867F"></wd-icon>
|
<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>
|
</template>
|
<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 type="error" @click="handleDelete(item)">删除</wd-button>
|
</template>
|
</wd-card>
|
</z-paging>
|
|
<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>
|
<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>
|
</template>
|
<script setup lang="ts">
|
import CardTitle from "@/components/card-title/index.vue";
|
import TwistForm from "./form.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 toast = useToast();
|
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: "monofilamentNumber",
|
span: 24,
|
},
|
{
|
label: "质量追溯号",
|
prop: "systemNo",
|
span: 24,
|
},
|
{
|
label: "盘长(m)",
|
prop: "oneLength",
|
},
|
{
|
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.team) {
|
teamId.value = data.team;
|
setTeamId(data.team);
|
}
|
// 存储生产准备ID
|
if (data.prepareId) {
|
setPrepareId(data.prepareId);
|
}
|
}
|
} catch (error) {
|
console.error("获取数据失败:", error);
|
}
|
};
|
|
const toEdit = () => {
|
uni.navigateTo({
|
url: "/pages/production/twist/report/edit",
|
});
|
};
|
|
// 主表数据
|
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 () => {
|
// 检查是否所有数据都已保存(都有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 = () => {
|
dialog.visible = false;
|
};
|
|
const toAttachment = (item: any) => {
|
uni.navigateTo({
|
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 () => {
|
const { data } = await ManageApi.getReportList({
|
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(async (options: any) => {
|
paramsId.value = options.id;
|
// 获取并缓存班组ID
|
await initTeamId();
|
// 获取主表数据
|
await getMainTableData();
|
showDrawPopup();
|
});
|
</script>
|
|
<style lang="scss" scoped>
|
.list {
|
height: calc(100vh - 80px);
|
padding: 12px;
|
background: #f3f9f8;
|
|
:deep() {
|
.round {
|
border-radius: 4px;
|
}
|
}
|
}
|
|
.action {
|
display: flex;
|
justify-content: space-between;
|
}
|
</style>
|