gaoluyang
2 天以前 8b1b73b297451d87e2ebf8c1bcb05c64f108127c
src/views/wls/returnsales/modules/form.vue
@@ -19,6 +19,9 @@
  submitReturnSales,
  updateReturnSales,
} from '#/api/mes/wm/returnsales';
import type { ErpSaleOrderApi } from '#/api/erp/sale/order';
import { getSaleOrder, getSaleOrderPage } from '#/api/erp/sale/order';
import { $t } from '#/locales';
import { useFormSchema } from '../data';
@@ -28,6 +31,7 @@
const formType = ref<FormType>('create');
const formData = ref<MesWmReturnSalesApi.ReturnSales>();
const originalSnapshot = ref(''); // 表单原始数据快照,用于提交时跳过未变更的保存请求
const saleOrderItems = ref<ErpSaleOrderApi.SaleOrderItem[]>([]); // 当前销售订单的物料行
const isEditable = computed(() =>
  // 是否为编辑模式(可保存)
  ['create', 'update'].includes(formType.value),
@@ -169,13 +173,38 @@
    // 加载数据
    const data = modalApi.getData<{ formType: FormType; id?: number }>();
    formType.value = data.formType;
    formApi.setState({ schema: useFormSchema(formType.value, formApi) });
    formApi.setState({
      schema: useFormSchema(formType.value, formApi, (item) => {
        if (item?.id) {
          getSaleOrder(item.id as number).then((order) => {
            saleOrderItems.value = (order as ErpSaleOrderApi.SaleOrder)?.items || [];
          });
        } else {
          saleOrderItems.value = [];
        }
      }),
    });
    formApi.setDisabled(!isEditable.value);
    modalApi.setState({ showConfirmButton: isEditable.value });
    if (data?.id) {
      modalApi.lock();
      try {
        formData.value = await getReturnSales(data.id);
        // 通过销售订单号反查订单ID,确保 ErpSaleOrderSelect 能正确回显
        if (formData.value?.salesOrderCode && !formData.value.saleOrderId) {
          const orderPage = await getSaleOrderPage({
            pageNo: 1,
            pageSize: 1,
            no: formData.value.salesOrderCode,
          } as Record<string, unknown> as never);
          const list = (orderPage as Record<string, unknown>)?.list as Array<Record<string, unknown>> | undefined;
          if (list?.length) {
            const orderId = list[0].id as number;
            (formData.value as Record<string, unknown>).saleOrderId = orderId;
            const order = await getSaleOrder(orderId);
            saleOrderItems.value = order?.items || [];
          }
        }
        // 设置到 values
        await formApi.setValues(formData.value);
      } finally {
@@ -198,6 +227,7 @@
          :client-id="formData.clientId"
          :form-type="formType"
          :return-id="formData.id"
          :sale-order-items="saleOrderItems"
          :sales-order-code="formData.salesOrderCode"
        />
      </div>