张诺
23 小时以前 754f4ccb397866d31bcfa71c3c8099539647a18b
src/pages/productionManagement/productionReport/index.vue
@@ -11,6 +11,31 @@
            error-message-align="right">
      <!-- 基本信息 -->
      <view class="form-section">
        <u-form-item label="机台"
                     prop="deviceName"
                     required>
          <u-input v-model="form.deviceName"
          disabled
                   placeholder="请输入机台" />
        </u-form-item>
        <u-form-item label="计划开始时间"
                     prop="planStartTime"
                     required>
          <u-input v-model="form.planStartTime"
                   placeholder="请选择计划开始时间"
                   readonly
                   @click="showStartTimePicker = true"
                   suffix-icon="calendar" />
        </u-form-item>
        <u-form-item label="计划结束时间"
                     prop="planEndTime"
                     required>
          <u-input v-model="form.planEndTime"
                   placeholder="请选择计划结束时间"
                   readonly
                   @click="showEndTimePicker = true"
                   suffix-icon="calendar" />
        </u-form-item>
        <u-form-item label="待生产数量"
                     prop="planQuantity"
                     required>
@@ -31,13 +56,16 @@
                   placeholder="请输入"
                   type="number" />
        </u-form-item>
        <u-form-item label="班组信息"
                     prop="schedulingUserId"
        <!-- 班组信息和审核人 -->
        <u-form-item v-for="(item, key) in pickerFields"
                     :key="key"
                     :label="item.label"
                     :prop="key + '.name'"
                     required>
          <u-input v-model="form.userName"
                   placeholder="请选择生产人"
          <u-input v-model="form[key].name"
                   :placeholder="form[key].name ? '已选择: ' + form[key].name : '请选择' + item.label"
                   readonly
                   @click="openProducerPicker"
                   @click="openProducerPicker(key)"
                   suffix-icon="arrow-down" />
        </u-form-item>
      </view>
@@ -54,6 +82,20 @@
                     title="选择生产人"
                     @select="onProducerConfirm"
                     @close="showProducerPicker = false" />
    <!-- 开始时间选择器 -->
    <up-datetime-picker :show="showStartTimePicker"
                        v-model="startTimeValue"
                        mode="datetime"
                        @confirm="onStartTimeConfirm"
                        @cancel="showStartTimePicker = false" />
    <!-- 结束时间选择器 -->
    <up-datetime-picker :show="showEndTimePicker"
                        v-model="endTimeValue"
                        mode="datetime"
                        @confirm="onEndTimeConfirm"
                        @cancel="showEndTimePicker = false" />
  </view>
</template>
@@ -76,23 +118,38 @@
  const formRef = ref();
  // 表单数据
  let form = ref({
  const form = ref({
    deviceName: "",
    planStartTime: "",
    planEndTime: "",
    planQuantity: "",
    quantity: "",
    scrapQty: "",
    userName: "",
    workOrderId: "",
    productProcessRouteItemId: "",
    userId: "",
    schedulingUserId: "",
    userId: { value: "", name: "" }, // 班组信息
    auditUserId: { value: "", name: "" }, // 审核人
  });
  // 这里的字段配置用于模版循环
  const pickerFields = {
    userId: { label: "班组信息" },
    auditUserId: { label: "审核人" },
  };
  // 生产人选择器状态
  const showProducerPicker = ref(false);
  // 时间选择器状态
  const showStartTimePicker = ref(false);
  const showEndTimePicker = ref(false);
  const startTimeValue = ref(Number(new Date()));
  const endTimeValue = ref(Number(new Date()));
  const producerList = ref([]);
  const currentField = ref(""); // 当前选择的字段
  // 打开生产人选择器
  const openProducerPicker = async () => {
  const openProducerPicker = async (field) => {
    if (producerList.value.length === 0) {
      // 如果列表为空,先加载用户列表
      try {
@@ -100,7 +157,7 @@
        const users = res.data || [];
        // 转换为 action-sheet 需要的格式
        producerList.value = users.map(user => ({
          name: user.nickName || user.userName,
          name: user.nickName || "",
          value: user.userId,
        }));
      } catch (error) {
@@ -110,14 +167,40 @@
      }
    }
    showProducerPicker.value = true;
    currentField.value = field; // 保存当前字段
  };
  // 生产人选择确认
  const onProducerConfirm = e => {
    form.value.schedulingUserId = e.value;
    form.value.userName = e.name;
    form.value.userId = e.value; // 同时更新 userId
    if (currentField.value && form.value[currentField.value]) {
      form.value[currentField.value].value = e.value;
      form.value[currentField.value].name = e.name ;
    }
    showProducerPicker.value = false;
  };
  // 格式化日期
  const formatDateTime = (timestamp) => {
    const date = new Date(timestamp);
    const y = date.getFullYear();
    const m = (date.getMonth() + 1).toString().padStart(2, '0');
    const d = date.getDate().toString().padStart(2, '0');
    const h = date.getHours().toString().padStart(2, '0');
    const min = date.getMinutes().toString().padStart(2, '0');
    const s = date.getSeconds().toString().padStart(2, '0');
    return `${y}-${m}-${d} ${h}:${min}:${s}`;
  };
  // 开始时间确认
  const onStartTimeConfirm = (e) => {
    form.value.planStartTime = formatDateTime(e.value);
    showStartTimePicker.value = false;
  };
  // 结束时间确认
  const onEndTimeConfirm = (e) => {
    form.value.planEndTime = formatDateTime(e.value);
    showEndTimePicker.value = false;
  };
  // 提交状态
@@ -131,14 +214,34 @@
  const submitForm = async () => {
    submitting.value = true;
    // 校验表单
    if (!form.value.deviceName) {
      submitting.value = false;
      showToast("请输入机台");
      return;
    }
    if (!form.value.planStartTime) {
      submitting.value = false;
      showToast("请选择计划开始时间");
      return;
    }
    if (!form.value.planEndTime) {
      submitting.value = false;
      showToast("请选择计划结束时间");
      return;
    }
    if (!form.value.quantity) {
      submitting.value = false;
      showToast("请输入本次生产数量");
      return;
    }
    if (!form.value.schedulingUserId) {
    if (!form.value.userId.value) {
      submitting.value = false;
      showToast("请选择生产人");
      showToast("请选择班组信息");
      return;
    }
    if (!form.value.auditUserId.value) {
      submitting.value = false;
      showToast("请选择审核人");
      return;
    }
    // 转换为数字进行比较
@@ -162,6 +265,10 @@
      quantity: Number(form.value.quantity),
      scrapQty: Number(form.value.scrapQty) || 0,
      planQuantity: Number(form.value.planQuantity) || 0,
      userId: form.value.userId.value,
      auditUserId: form.value.auditUserId.value,
      auditUserName: form.value.auditUserId.name,
      schedulingUserId: form.value.userId.value, // 兼容旧字段
    };
    console.log(submitData, "submitData");
@@ -176,36 +283,28 @@
        showToast(res.msg || "报工失败");
        submitting.value = false;
      }
    });
    }).catch(err => {
      submitting.value = false;
    })
    ;
  };
  // 页面加载时初始化数据
  onLoad(options => {
    console.log(options, "options");
    // 如果没有 orderRow 参数,说明是从首页直接跳转,需要用户手动选择订单
    if (!options.orderRow) {
      console.log("从首页跳转,无订单数据");
      getInfo().then(res => {
        // 默认使用当前登录用户
        form.value.userId = res.user.userId;
        form.value.userName = res.user.userName;
        form.value.schedulingUserId = res.user.userId;
      });
      return;
    }
    try {
      const orderRow = JSON.parse(options.orderRow);
      console.log("构造的orderRow:", orderRow);
      console.log(orderRow, "orderRow======########");
      console.log(orderRow, "orderRow");
      // 确保 planQuantity 转换为字符串,以便在 u-input 中正确显示
      form.value.planQuantity = orderRow.planQuantity != null ? String(orderRow.planQuantity) : "";
      form.value.productProcessRouteItemId = orderRow.productProcessRouteItemId || "";
      form.value.workOrderId = orderRow.id || "";
      form.value.deviceName = orderRow.deviceName || "";
      form.value.planStartTime = orderRow.planStartTime || "";
      form.value.planEndTime = orderRow.planEndTime || "";
      getInfo().then(res => {
        // 默认使用当前登录用户,但允许用户修改
        form.value.userId = res.user.userId;
        form.value.userName = res.user.userName;
        form.value.schedulingUserId = res.user.userId;
        form.value.userId.value = res.user.userId;
        form.value.userId.name = res.user.nickName;
      });
      // 使用 nextTick 确保 DOM 更新
      nextTick(() => {