spring
2025-11-19 c13c2bb15b501c74fe4270b0ae763e5c9422ee39
src/pages/production/twist/receive/steelCore/index.vue
@@ -8,105 +8,219 @@
      @query="getList"
    >
      <template #top>
        <CardTitle title="钢芯领用" :hideAction="true" @action="addReport" />
        <CardTitle title="芯线领用" :hideAction="false" :full="false">
          <template #action>
            <wd-button type="icon" icon="scan" color="#0D867F" @click="openScan"></wd-button>
            <wd-button type="icon" icon="add-circle" color="#0D867F" @click="addReport"></wd-button>
          </template>
        </CardTitle>
      </template>
      <wd-card v-for="(item, index) in cardList" :key="index" type="rectangle" custom-class="round">
        <template #title>
          <view class="flex justify-between">
            <view>
              <wd-icon name="a-rootlist" color="#0D867F"></wd-icon>
              <text class="text-[#252525] ml-2 font-medium">JX28201021-1</text>
              <text class="text-[#252525] ml-2 font-medium">{{ item.model }}</text>
            </view>
            <view class="text-[#A8A8A8]" @click="toEdit">编辑</view>
            <view class="text-[#A8A8A8]" @click="toEdit(item.id)">编辑</view>
          </view>
        </template>
        <ProductionCard :data="cardAttr" color="#0D867F" />
        <ProductionCard :data="cardAttr" :value="item" color="#0D867F" />
      </wd-card>
    </z-paging>
    <wd-popup v-model="addDialog.visible" position="bottom" custom-class="yl-popup">
      <view class="action px-3">
        <wd-button type="text" @click="cancelAdd">取消</wd-button>
        <wd-button type="text" @click="submitAdd">确定</wd-button>
      </view>
      <SteelCore ref="addFormRef" mode="add" :wireId="paramsId" @refresh="reloadList" />
    </wd-popup>
    <wd-popup v-model="editDialog.visible" position="bottom" custom-class="yl-popup">
      <view class="action px-3">
        <wd-button type="text" @click="cancelEdit">取消</wd-button>
        <wd-button type="text" @click="submitEdit">确定</wd-button>
      </view>
      <SteelCore
        ref="editFormRef"
        mode="edit"
        :wireId="paramsId"
        :editData="editDialog.currentItem"
        @refresh="reloadList"
      />
    </wd-popup>
    <Scan ref="scanRef" emitName="scanSteelCore" />
    <wd-toast />
  </view>
  <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>
    <PlateForm />
  </wd-popup>
  <wd-toast />
</template>
<script setup lang="ts">
import CardTitle from "@/components/card-title/index.vue";
import ProductionCard from "../../../components/ProductionCard.vue";
import { useToast } from "wot-design-uni";
import PlateForm from "./form.vue";
import { onLoad } from "@dcloudio/uni-app";
import SteelCore from "./form.vue";
import { onLoad, onUnload, onShow, onHide } from "@dcloudio/uni-app";
import ManageApi from "@/api/product/manage";
import TwistApi from "@/api/product/twist";
import zPaging from "@/components/z-paging/z-paging.vue";
import Scan from "@/components/scan/index.vue";
const paramsId = ref();
const pagingRef = ref();
const addFormRef = ref();
const editFormRef = ref();
const scanRef = ref();
const toast = useToast();
const dialog = reactive({
const isPageVisible = ref(false); // 标记页面是否可见
const addDialog = reactive({
  visible: false,
});
const editDialog = reactive({
  visible: false,
  currentItem: null as any,
  editId: undefined as number | undefined,
});
const cardList = ref<any[]>([]);
const cardAttr = ref<any[]>([
  {
    label: "盘号",
    value: "1902101",
    label: "样品编号",
    prop: "monofilamentNumber",
  },
  {
    label: "长度",
    value: "46kg",
    label: "数量",
    prop: "amount",
    unitProp: "unit",
  },
  {
    label: "重量",
    value: "10kg",
  },
  {
    label: undefined,
    value: undefined,
    prop: "weight",
    unitProp: "weightUnit",
  },
  {
    label: "厂家",
    value: "江苏省南通市芯导数字厂",
    prop: "supplier",
    span: 16,
  },
]);
const toEdit = () => {
  uni.navigateTo({
    url: "/pages/production/twist/receive/steelCore/edit",
  });
const toEdit = (id: number) => {
  const itemToEdit = cardList.value.find((item) => item.id === id);
  if (itemToEdit) {
    editDialog.currentItem = itemToEdit;
    editDialog.editId = id;
    editDialog.visible = true;
  }
};
const addReport = () => {
  dialog.visible = true;
  if (addFormRef.value) {
    addFormRef.value.resetFormData();
  }
  addDialog.visible = true;
};
const submit = () => {
  toast.show("提交");
  dialog.visible = false;
const submitAdd = async () => {
  const success = await addFormRef.value.submit();
  if (success) {
    addDialog.visible = false;
  }
};
const cancel = () => {
const cancelAdd = () => {
  toast.show("取消");
  dialog.visible = false;
  addDialog.visible = false;
};
const submitEdit = async () => {
  const success = await editFormRef.value.submitEdit(cardList.value, editDialog.editId);
  if (success) {
    editDialog.visible = false;
    reloadList();
  }
};
const cancelEdit = () => {
  toast.show("取消");
  editDialog.visible = false;
};
const getList = async () => {
  const { code, data } = await ManageApi.getStrandedWireDish({
    wireId: paramsId.value,
    type: "盘具",
    type: "钢芯",
  });
  if (code == 200) {
    pagingRef.value.complete(data);
  }
};
const reloadList = () => {
  pagingRef.value.refresh();
};
// 扫码相关方法
const openScan = () => {
  scanRef.value.triggerScan();
};
const getScanCode = async (code: any) => {
  // 检查页面是否可见,如果不可见则不处理扫码数据
  if (!isPageVisible.value) {
    return;
  }
  try {
    const parseData = JSON.parse(code.code);
    // 检查必需字段:model、supplier、diskMaterial
    const requiredFields = ["model", "supplier", "diskMaterial"];
    const missingFields = requiredFields.filter((field) => !parseData[field]);
    if (missingFields.length > 0) {
      toast.error(`二维码错误,请更换二维码!`);
      return;
    }
    // 打开新增弹框并填充扫码获取的信息
    addDialog.visible = true;
    // 等待弹框打开后填充表单数据
    // 使用双重等待:nextTick + setTimeout 确保组件已完全挂载
    nextTick(() => {
      setTimeout(() => {
        if (addFormRef.value) {
          addFormRef.value.fillFormData(parseData);
          toast.success("扫码成功,请确认信息");
        } else {
          toast.error("表单加载失败,请重试");
        }
      }, 200); // 延迟200ms确保弹框和组件已完全渲染
    });
  } catch (error) {
    toast.error("二维码异常,请更换二维码!");
  }
};
onLoad((options: any) => {
  // 开启广播监听事件
  uni.$on("scanSteelCore", getScanCode);
  paramsId.value = options.id;
});
onShow(() => {
  // 页面显示时标记为可见
  isPageVisible.value = true;
});
onHide(() => {
  // 页面隐藏时标记为不可见
  isPageVisible.value = false;
});
onUnload(() => {
  // 取消广播监听事件
  uni.$off("scanSteelCore", getScanCode);
  isPageVisible.value = false;
});
</script>
@@ -127,4 +241,8 @@
  display: flex;
  justify-content: space-between;
}
:deep(.wd-button__content) {
  color: #0d867f;
}
</style>