gaoluyang
2026-08-03 75242bbba28ae8902ddf86d33febb497d79e5fc3
src/views/mes/pro/workorder/modules/form.vue
@@ -27,6 +27,10 @@
  import { BarcodeDetail } from "#/views/wls/barcode/components";
  import { useFormSchema } from "../data";
  import PredictDelivery from "./ai/predict-delivery.vue";
  import PredictDuration from "./ai/predict-duration.vue";
  import PredictMaterial from "./ai/predict-material.vue";
  import PredictRisk from "./ai/predict-risk.vue";
  import ItemList from "./item-list.vue";
  import ProcessList from "./process-list.vue";
@@ -50,6 +54,12 @@
    () =>
      formType.value === "update" &&
      formData.value?.status === MesProWorkOrderStatusEnum.PREPARE
  );
  const canUseAi = computed(
    () =>
      formData.value?.id &&
      (formData.value?.status === MesProWorkOrderStatusEnum.PREPARE ||
        formData.value?.status === MesProWorkOrderStatusEnum.CONFIRMED)
  );
  const getTitle = computed(() => {
    const isChild = !!formData.value?.parentId;
@@ -99,19 +109,17 @@
  });
  /** 重新挂载 schema 并按表单态控制底部按钮 */
  const mainActionText = computed(() => {
    if (isConfirm.value) return '确认';
    if (isFinish.value) return '完成';
    return '提交';
  });
  const showMainBtn = computed(() => isEditable.value || isConfirm.value || isFinish.value);
  function applySchema() {
    formApi.setState({ schema: useFormSchema(formType.value, formApi) });
    const showBtn = isEditable.value || isConfirm.value || isFinish.value;
    modalApi.setState({
      showConfirmButton: showBtn,
      confirmText: isConfirm.value || canConfirm.value
        ? '确认'
        : isFinish.value
          ? '完成'
          : isCreateMode.value
            ? '新增'
            : '保存',
    });
    modalApi.setState({ showCancelButton: false, showConfirmButton: false });
  }
  /** 仅保存(不改变状态) */
@@ -353,14 +361,35 @@
      </Tabs>
    </template>
    <template #prepend-footer>
      <Button v-if="canConfirm"
              @click="handleSave">
        保存
      </Button>
      <Button v-if="formType === 'detail' && formData?.id"
              @click="handleBarcode">
        查看条码
      </Button>
      <div class="flex flex-auto flex-col gap-2">
        <div v-if="canUseAi" class="flex items-center gap-2">
          <PredictMaterial :work-order-id="formData!.id" />
          <PredictDuration :work-order-id="formData!.id" />
          <PredictRisk :work-order-id="formData!.id" />
          <PredictDelivery :work-order-id="formData!.id" />
        </div>
        <div v-if="canUseAi && showMainBtn" class="border-t border-gray-200" />
        <div class="flex items-center">
          <Button v-if="showMainBtn"
                  type="primary"
                  @click="modalApi.onConfirm()">
            {{ mainActionText }}
          </Button>
        </div>
      </div>
    </template>
    <template #append-footer>
      <div class="flex gap-2">
        <Button v-if="canConfirm"
                @click="handleSave">
          保存修改
        </Button>
        <Button v-if="formType === 'detail' && formData?.id"
                @click="handleBarcode">
          查看条码
        </Button>
        <Button @click="modalApi.close()">取消</Button>
      </div>
    </template>
  </Modal>
  <BarcodeDetail ref="barcodeDetailRef" />