gaoluyang
9 天以前 c1b698e7cb6be3d065b57d30d112db273534ac6a
Merge remote-tracking branch 'origin/dev_南通_苏珩' into dev_南通_苏珩
已修改10个文件
99 ■■■■■ 文件已修改
src/api/mes/wm/materialstock/index.ts 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/wls/batch/components/select-dialog.vue 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/wls/batch/components/select.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/wls/batch/data.ts 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/wls/materialstock/components/select-dialog.vue 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/wls/materialstock/components/stock-adjust-modal.vue 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/wls/productsales/data.ts 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/wls/productsales/modules/line-form.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/wls/returnsales/data.ts 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/wls/returnsales/modules/line-form.vue 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/wm/materialstock/index.ts
@@ -96,6 +96,7 @@
  areaId: number; // 库位ID
  batchId?: number; // 批次ID(选择已有批次时传入)
  batchCode?: string; // 批次号(新建批次时传入)
  reelNo?: string; // 新批次盘号
  produceDate?: string; // 生产日期(新建批次时传入)
  expireDate?: string; // 有效期(新建批次时传入)
  receiptDate?: string; // 入库日期
src/views/wls/batch/components/select-dialog.vue
@@ -29,13 +29,16 @@
const filterTip = computed(() => {
  const parts: string[] = [];
  if (externalClientId.value !== null) {
  if (externalItemId.value != null) {
    parts.push('物料');
  }
  if (externalClientId.value != null) {
    parts.push('客户');
  }
  if (externalVendorId.value !== null) {
  if (externalVendorId.value != null) {
    parts.push('供应商');
  }
  if (externalSalesOrderCode.value !== null) {
  if (externalSalesOrderCode.value != null) {
    parts.push('销售订单');
  }
  return parts.length > 0 ? `已按${parts.join('/')}预过滤` : '';
@@ -130,12 +133,17 @@
      trigger: 'row',
    },
    proxyConfig: {
      // 等外部物料条件写入表单后再查询,避免初始空条件请求覆盖结果。
      autoLoad: false,
      ajax: {
        query: async ({ page }, formValues) => {
          const values = await gridApi.formApi.getValues();
          return await getBatchPage({
            pageNo: page.currentPage,
            pageSize: page.pageSize,
            ...formValues,
            ...values,
            itemId: externalItemId.value ?? values.itemId,
          });
        },
      },
src/views/wls/batch/components/select.vue
@@ -53,7 +53,7 @@
    props.allowClear &&
    !props.disabled &&
    hovering.value &&
    props.modelValue !== null,
    props.modelValue != null,
);
/** 根据编号单条查询批次信息(用于编辑回显) */
@@ -88,9 +88,7 @@
    clearSelected();
    return;
  }
  const selectedIds = (
    props.modelValue === null ? [] : [props.modelValue]
  ) as number[];
  const selectedIds = props.modelValue == null ? [] : [props.modelValue];
  dialogRef.value?.open(selectedIds, {
    clientId: props.clientId,
    itemId: props.itemId,
src/views/wls/batch/data.ts
@@ -11,9 +11,9 @@
import { DictTag } from '#/components/dict-tag';
import { getRangePickerDefaultProps } from '#/utils';
import { MdClientSelect } from '#/views/mes/md/client/components';
import { MdItemSelect } from '#/views/mes/md/item/components';
import { MdVendorSelect } from '#/views/mes/md/vendor/components';
import CrmCustomerSelect from '#/components/crm-customer-select.vue';
import { MdmItemSelect } from '#/views/basicData/mdm/components';
import { SrmSupplierSelect } from '#/views/srm/supplier/components';
import { MdWorkstationSelect } from '#/views/mes/md/workstation/components';
import { ProTaskSelect } from '#/views/mes/pro/task/components';
import { ProWorkOrderSelect } from '#/views/mes/pro/workorder/components';
@@ -34,7 +34,7 @@
    {
      fieldName: 'itemId',
      label: '产品物料',
      component: markRaw(MdItemSelect),
      component: markRaw(MdmItemSelect),
      componentProps: {
        placeholder: '请选择产品物料',
      },
@@ -42,7 +42,7 @@
    {
      fieldName: 'vendorId',
      label: '供应商',
      component: markRaw(MdVendorSelect),
      component: markRaw(SrmSupplierSelect),
      componentProps: {
        placeholder: '请选择供应商',
      },
@@ -50,7 +50,7 @@
    {
      fieldName: 'clientId',
      label: '客户',
      component: markRaw(MdClientSelect),
      component: markRaw(CrmCustomerSelect),
      componentProps: {
        placeholder: '请选择客户',
      },
src/views/wls/materialstock/components/select-dialog.vue
@@ -45,18 +45,18 @@
/** 当前 props 是否带预过滤 */
const showAlert = computed(
  () =>
    props.batchId !== null ||
    props.warehouseId !== null ||
    props.batchId != null ||
    props.warehouseId != null ||
    props.virtualFilter === 'only',
);
/** 预过滤提示文字 */
const alertTitle = computed(() => {
  const parts: string[] = [];
  if (props.batchId !== null) {
  if (props.batchId != null) {
    parts.push('批次');
  }
  if (props.warehouseId !== null) {
  if (props.warehouseId != null) {
    parts.push('仓库');
  }
  if (props.virtualFilter === 'only') {
@@ -161,7 +161,8 @@
            // 默认查未冻结
            frozen: false,
            itemTypeId: searchItemTypeId.value,
            itemId: props.mdmItemId,
            itemId: props.itemId,
            mdmItemId: props.mdmItemId,
            warehouseId: formValues.warehouseId ?? props.warehouseId,
            virtualFilter:
              props.virtualFilter === 'all' ? undefined : props.virtualFilter,
src/views/wls/materialstock/components/stock-adjust-modal.vue
@@ -100,6 +100,7 @@
  }
  // 清空批次相关值
  await formApi.setFieldValue('batchCode', undefined);
  await formApi.setFieldValue('reelNo', undefined);
  await formApi.setFieldValue('batchId', undefined);
  await formApi.setFieldValue('produceDate', undefined);
  await formApi.setFieldValue('expireDate', undefined);
@@ -269,6 +270,16 @@
      },
      // 根据配置决定是否必填
      rules: z.string().optional(),
    },
    {
      fieldName: 'reelNo',
      label: '盘号',
      component: 'Input',
      componentProps: { placeholder: '手工填写新批次盘号,留空表示无盘号', maxlength: 128 },
      dependencies: {
        triggerFields: ['operateType', 'batchId'],
        show: () => operateType.value === 1 && !hasExistingBatch.value,
      },
    },
    // 生产日期(根据批次配置显示,仅入库)
    {
@@ -519,6 +530,7 @@
        areaId: values.areaId,
        batchId: values.batchId,
        batchCode: values.batchCode,
        reelNo: values.batchId ? undefined : values.reelNo?.trim() || undefined,
        produceDate: values.produceDate,
        expireDate: values.expireDate,
        receiptDate: values.receiptDate,
src/views/wls/productsales/data.ts
@@ -473,8 +473,27 @@
export function useLineFormSchema(
  hasNotice: boolean,
  formApi?: VbenFormApi,
  orderItems: import('#/api/erp/sale/order').ErpSaleOrderApi.SaleOrderItem[] = [],
): VbenFormSchema[] {
  return [
    {
      fieldName: 'saleOrderItemId',
      label: '销售订单明细',
      component: 'Select',
      componentProps: {
        placeholder: '请选择销售订单明细及盘号',
        options: orderItems.map((item) => ({
          label: `${item.productName || ''}(盘号:${item.reelNo || '未填写'})`,
          value: item.id,
        })),
        onChange: async (id?: number) => {
          const item = orderItems.find((entry) => entry.id === id);
          await formApi?.setFieldValue('itemId', item?.productId);
        },
      },
      dependencies: { triggerFields: ['noticeId'], if: () => !hasNotice },
      rules: 'selectRequired',
    },
    {
      fieldName: 'noticeId',
      component: 'Input',
@@ -515,9 +534,9 @@
      },
      rules: 'selectRequired',
      dependencies: {
        triggerFields: ['noticeLineId'],
        triggerFields: ['noticeLineId', 'saleOrderItemId'],
        componentProps: (values) => ({
          disabled: !!values.noticeLineId,
          disabled: !!values.noticeLineId || !!values.saleOrderItemId,
          placeholder: '请选择产品',
        }),
      },
@@ -659,7 +678,7 @@
        triggerFields: ['itemId', 'batchId'],
        componentProps: (values) => ({
          batchId: values.batchId,
          itemId: values.itemId,
          mdmItemId: values.itemId,
        }),
      },
    },
src/views/wls/productsales/modules/line-form.vue
@@ -8,6 +8,8 @@
import { message } from 'ant-design-vue';
import { useVbenForm } from '#/adapter/form';
import { getProductSales } from '#/api/mes/wm/productsales';
import { getSaleOrder } from '#/api/erp/sale/order';
import {
  createProductSalesLine,
  getProductSalesLine,
@@ -78,7 +80,9 @@
    }>();
    salesId.value = data.salesId;
    noticeId.value = data.noticeId;
    formApi.setState({ schema: useLineFormSchema(!!data.noticeId, formApi) });
    const sales = await getProductSales(data.salesId);
    const order = sales.saleOrderId ? await getSaleOrder(sales.saleOrderId) : undefined;
    formApi.setState({ schema: useLineFormSchema(!!data.noticeId, formApi, order?.items || []) });
    if (data.noticeId) {
      await formApi.setFieldValue('noticeId', data.noticeId);
    }
src/views/wls/returnsales/data.ts
@@ -342,8 +342,6 @@
/** 退货单行新增/修改的表单 */
export function useLineFormSchema(
  clientId?: number,
  salesOrderCode?: string,
  items?: ErpSaleOrderApi.SaleOrderItem[],
  onItemChange?: (item: ErpSaleOrderApi.SaleOrderItem | undefined) => void,
): VbenFormSchema[] {
@@ -404,7 +402,7 @@
            return z
              .number({ message: '请输入退货数量' })
              .min(0)
              .max(max, `可退货数量不能超过 ${max}`);
              .max(max, `退货数量不能超过订单数量 ${max}`);
          }
          return z.number({ message: '请输入退货数量' }).min(0);
        },
@@ -416,19 +414,15 @@
      label: '批次',
      component: markRaw(WmBatchSelect),
      componentProps: {
        clientId,
        disabled: false,
        placeholder: '请选择批次',
        salesOrderCode,
      },
      dependencies: {
        triggerFields: ['itemId'],
        componentProps: (values) => ({
          clientId,
          disabled: !values.itemId,
          itemId: values.itemId,
          placeholder: '请选择批次',
          salesOrderCode,
        }),
      },
    },
src/views/wls/returnsales/modules/line-form.vue
@@ -83,8 +83,6 @@
    maxQuantity.value = undefined;
    formApi.setState({
      schema: useLineFormSchema(
        data.clientId,
        data.salesOrderCode,
        data.items || [],
        async (item) => {
          maxQuantity.value = item?.count;
@@ -115,7 +113,7 @@
      v-if="maxQuantity !== undefined"
      class="mx-4 mt-2 text-sm text-blue-600"
    >
      当前物料可退货数量:<span class="font-bold">{{ maxQuantity }}</span>
      当前物料订单数量:<span class="font-bold">{{ maxQuantity }}</span>
    </div>
  </Modal>
</template>