src/views/mes/pro/workorder-center/modules/quick-feedback.vue
@@ -9,10 +9,13 @@
import { message } from 'ant-design-vue';
import { quickCreateFeedback } from '#/api/mes/pro/feedback';
import { getRouteProcessByRouteAndProcess } from '#/api/mes/pro/route/process';
import { getTask } from '#/api/mes/pro/task';
import {
  loadParamDetails,
  paramDetails,
} from '#/views/mes/pro/feedback/param-state';
import WaitCountdown from '#/views/mes/pro/feedback/modules/wait-countdown.vue';
import ProTaskSelect from '#/views/mes/pro/task/components/select.vue';
defineOptions({ name: 'QuickFeedbackForm' });
@@ -41,9 +44,15 @@
        feedbackQuantity: undefined,
        remark: '',
      };
      // 预设任务时加载其工艺参数;否则等待选择任务后再加载
      waitDuration.value = undefined;
      needReportQuantity.value = true;
      waitStartTime.value = undefined;
      // 预设任务时加载其工艺参数与等待配置;否则等待选择任务后再加载
      if (props.taskId) {
        loadParamDetails(props.taskId);
        getTask(props.taskId)
          .then(applyTaskWaitConfig)
          .catch(() => {});
      } else {
        paramDetails.value = [];
      }
@@ -59,6 +68,9 @@
  remark: '',
});
const submitting = ref(false);
const waitDuration = ref<number>();
const needReportQuantity = ref<boolean>(true);
const waitStartTime = ref<string>();
const hasPredefinedTask = computed(() => !!props.taskId);
@@ -77,6 +89,27 @@
  selectedTask.value = task;
  selectedTaskId.value = task?.id;
  loadParamDetails(task?.id);
  applyTaskWaitConfig(task);
}
/** 按任务工序加载等待时长与报工数量规则 */
async function applyTaskWaitConfig(task?: MesProTaskApi.Task) {
  waitDuration.value = undefined;
  needReportQuantity.value = true;
  waitStartTime.value = task?.waitStartTime;
  if (!task?.routeId || !task?.processId) {
    return;
  }
  try {
    const routeProcess = await getRouteProcessByRouteAndProcess(
      task.routeId,
      task.processId,
    );
    waitDuration.value = routeProcess?.waitDuration;
    needReportQuantity.value = routeProcess?.needReportQuantity ?? true;
  } catch {
    // 加载失败按默认处理(无需倒计时、数量必填)
  }
}
async function handleSubmit() {
@@ -85,7 +118,7 @@
    message.warning('请选择任务');
    return;
  }
  if (!formData.value.feedbackQuantity) {
  if (needReportQuantity.value && !formData.value.feedbackQuantity) {
    message.warning('请输入报工数量');
    return;
  }
@@ -93,7 +126,9 @@
  try {
    await quickCreateFeedback({
      taskId,
      feedbackQuantity: formData.value.feedbackQuantity,
      feedbackQuantity: needReportQuantity.value
        ? (formData.value.feedbackQuantity ?? 0)
        : 0,
      paramValues: paramDetails.value.map((detail) => ({
        detailId: detail.id,
        value: detail.paramValue,
@@ -127,7 +162,14 @@
          class="!w-full"
        />
      </a-form-item>
      <a-form-item label="本次报工数量" required>
      <a-form-item v-if="waitDuration" label="报工倒计时">
        <WaitCountdown
          :task-id="selectedTaskId"
          :wait-duration="waitDuration"
          :wait-start-time="waitStartTime"
        />
      </a-form-item>
      <a-form-item v-if="needReportQuantity" label="本次报工数量" required>
        <a-input-number
          v-model:value="formData.feedbackQuantity"
          :min="0.01"