YLouie
2025-10-23 8460eac918d8c8e825a0f78ac0af1c03cad8fd49
src/pages/production/twist/report/index.vue
@@ -1,26 +1,28 @@
<template>
  <view class="page pt-2">
    <z-paging ref="paging" refresher-only class="list">
  <view class="list">
    <z-paging ref="pagingRef" v-model="twistReportList" :fixed="false" @query="getTwistReportList">
      <template #top>
        <CardTitle title="报工信息" :hideAction="true" :full="false" @action="addReport" />
      </template>
      <wd-card v-for="(item, index) in 6" 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>
              <wd-icon name="user" color="#0D867F"></wd-icon>
              <text class="text-[#0D867F] ml-2 font-medium">生产人</text>
              <text class="text-[#333333] ml-2">方兆玉</text>
              <text class="text-[#333333] ml-2">{{ item.productUser }}</text>
            </view>
            <view class="text-[#A8A8A8]" @click="toEdit">编辑</view>
          </view>
        </template>
        <ProductionCard :data="cardAttr" />
        <ProductionCard :data="cardAttr" :value="item" />
        <template #footer>
          <wd-button size="small" plain @click="toCheck">自检</wd-button>
          <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>
        </template>
      </wd-card>
      <wd-loadmore custom-class="loadmore" state="loading" />
    </z-paging>
    <wd-popup v-model="dialog.visible" position="bottom" custom-class="yl-popup">
@@ -28,7 +30,16 @@
        <wd-button type="text" @click="cancel">取消</wd-button>
        <wd-button type="text" @click="submit">确定</wd-button>
      </view>
      <TwistForm />
      <TwistForm ref="twistFormRef" />
    </wd-popup>
    <wd-popup v-model="drawFormRef.visible" position="bottom" custom-class="yl-popup">
      <Draw
        :single-regulation-info-array="drawData.singleRegulationInfoArray"
        :steel-regulation-info-array="drawData.steelRegulationInfoArray"
        :reel-tooling-info="drawData.reelToolingInfo"
        :wire-id="drawData.wireId"
        @close="handleDrawClose"
      />
    </wd-popup>
    <wd-toast />
  </view>
@@ -38,50 +49,67 @@
import TwistForm from "./form.vue";
import { useToast } from "wot-design-uni";
import ProductionCard from "../../components/ProductionCard.vue";
import { onLoad } from "@dcloudio/uni-app";
import { ref, reactive } from "vue";
import ManageApi from "@/api/product/manage";
import TwistApi from "@/api/product/twist";
import Draw from "./draw.vue";
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: [],
  steelRegulationInfoArray: [],
  reelToolingInfo: {},
  wireId: "",
});
const cardAttr = ref<any[]>([
  {
    label: "合同号",
    value: "ht2921246",
    label: "领用杆号",
    prop: "poleNumber",
  },
  {
    label: "状态",
    value: "-----",
    label: "杆重(kg)",
    prop: "poleWeight",
  },
  {
    label: "客户名称",
    value: "夏志豪",
    label: "单丝盘号",
    prop: "monofilamentNumber",
  },
  {
    label: "机台",
    value: "-----",
  },
  {
    label: "规格型号",
    value: "2921246",
  },
  {
    label: "已生产数量",
    value: "0",
    label: "实际重量(kg)",
    prop: "actuallyWeight",
  },
  {
    label: "盘长(m)",
    value: "292",
    prop: "oneLength",
  },
  {
    label: "计划数量",
    value: "100",
    label: "理论重量(kg)",
    prop: "theoryWeight",
  },
  {
    label: "质量追溯号",
    value: "JX-1838",
    label: "规格型号",
    prop: "model",
  },
]);
const twistReportList = ref<any[]>([]);
const toEdit = () => {
  uni.navigateTo({
@@ -93,9 +121,13 @@
  dialog.visible = true;
};
const submit = () => {
  toast.show("提交");
  dialog.visible = false;
const submit = async () => {
  const isSuccess = await twistFormRef.value.submit();
  dialog.visible = !isSuccess; // 如果提交成功,关闭弹窗
  if (isSuccess) {
    // 提交成功后执行
    showDrawPopup();
  }
};
const cancel = () => {
@@ -103,24 +135,80 @@
  dialog.visible = false;
};
const toCheck = () => {
const toAttachment = (item: any) => {
  uni.navigateTo({
    url: "/pages/production/twist/selfInspect/index",
    url: "/pages/production/twist/attachment/index",
    success: () => {
      // 页面跳转成功后发送事件传递数据
      uni.$emit("detailData", item);
    },
  });
};
const showDrawPopup = async () => {
  try {
    const { data } = await TwistApi.querySingleDishInspection({
      id: paramsId.value,
    });
    console.log("领用信息数据:", data);
    // 适配不同的数据结构返回格式
    const responseData = data.data || data;
    if (responseData && responseData.singleWirePrePareInfoVo) {
      const info = responseData.singleWirePrePareInfoVo;
      drawData.value = {
        singleRegulationInfoArray: info.singleRegulationInfoArray || [],
        steelRegulationInfoArray: info.steelRegulationInfoArray || [],
        reelToolingInfo: info.reelToolingInfo || {},
        wireId: paramsId.value,
      };
      // 显示Draw弹窗
      drawFormRef.visible = true;
      toast.success("请填写领用信息!");
    } else {
      toast.error("已存在领用信息,无需填报!");
    }
  } catch (error) {
    console.error("获取领用信息失败:", error);
    toast.error("获取信息失败,请重试");
  }
};
const handleSelfCheck = (id: string) => {
  console.log("执行自检操作,ID:", id);
  uni.showToast({
    title: "自检功能开发中",
    icon: "none",
  });
};
// 保留原有的confirm函数,用于其他地方调用
// const confirm = async () => {
//   await showDrawPopup();
// };
// 获取拉丝报工列表
const getTwistReportList = async () => {
  const { data } = await ManageApi.getReportList({
    wireId: paramsId.value,
    type: "绞线",
  });
  pagingRef.value.complete(data);
};
onLoad((options: any) => {
  paramsId.value = options.id;
});
</script>
<style lang="scss" scoped>
.page {
.list {
  height: calc(100vh - 80px);
  padding: 12px;
  background: #f3f9f8;
  .list {
    margin: 12px;
    :deep() {
      .round {
        border-radius: 4px;
      }
  :deep() {
    .round {
      border-radius: 4px;
    }
  }
}