spring
2025-11-19 c13c2bb15b501c74fe4270b0ae763e5c9422ee39
src/pages/production/twist/report/index.vue
@@ -12,15 +12,23 @@
              <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>
@@ -30,7 +38,12 @@
        <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
@@ -47,13 +60,15 @@
<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,
@@ -95,36 +110,65 @@
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({
@@ -132,23 +176,83 @@
  });
};
// 主表数据
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;
};
@@ -197,6 +301,35 @@
  });
};
// 删除报工记录
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();
@@ -208,11 +341,23 @@
    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>