7 天以前 053025d1e3952826ec570072d62cf8ed845ce9c7
feat(mdm): 添加物料同步到MES功能

- 新增syncMes开关字段用于控制物料同步状态
- 实现更新物料同步状态的API接口
- 在列表页面添加同步状态切换开关组件
- 添加同步状态变更确认提示防止误操作
- 修复表单数据映射字段名称不一致问题
- 调整同步状态列宽度适配新组件显示
- 更新开发环境代理地址配置
已修改5个文件
51 ■■■■■ 文件已修改
src/api/mdm/item/index.ts 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/basicData/mdm/data.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/basicData/mdm/index.vue 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/basicData/mdm/modules/form.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
vite.config.ts 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mdm/item/index.ts
@@ -107,6 +107,11 @@
  return requestClient.put('/mdm/item/update-status', { id, status });
}
/** 更新物料同步状态 */
export function updateItemSync(id: number, sync: boolean) {
  return requestClient.put('/mdm/item/update-sync', { id, sync });
}
/** 导出物料 */
export function exportItem(params: Partial<MdmItemApi.Item>) {
  return requestClient.download('/mdm/item/export-excel', { params });
src/views/basicData/mdm/data.ts
@@ -333,6 +333,17 @@
      },
    },
    {
      component: 'Switch',
      fieldName: 'syncMes',
      label: '同步到MES',
      defaultValue: true,
      componentProps: {
        checkedChildren: '是',
        unCheckedChildren: '否',
      },
      rules: z.boolean().default(true),
    },
    {
      component: "RadioGroup",
      fieldName: "status",
      label: "状态",
@@ -597,7 +608,7 @@
    {
      field: "syncedMes",
      title: "同步状态",
      width: 90,
      width: 100,
      fixed: "right",
      slots: { default: "syncedMes" },
    },
src/views/basicData/mdm/index.vue
@@ -8,7 +8,7 @@
import { confirm, Page, useVbenModal } from '#/packages/effects/common-ui/src';
import { downloadFileFromBlobPart, isEmpty } from '#/packages/utils/src';
import { message, Tag } from 'ant-design-vue';
import { message, Switch, Tag } from 'ant-design-vue';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import {
@@ -17,6 +17,7 @@
  // exportItem,
  getItemPage,
  updateItemStatus,
  updateItemSync,
} from '#/api/mdm/item';
import { getItemTypeSimpleList } from '#/api/mes/md/item/type';
import { $t } from '#/locales';
@@ -138,6 +139,23 @@
  }
}
const syncingId = ref<number | null>(null);
/** 切换同步状态:关闭开关会从 MES 删除物料,需确认 */
async function handleSyncChange(row: MdmItemApi.Item, checked: boolean) {
  if (!checked) {
    await confirm('关闭同步将从 MES 删除该物料及关联配置(BOM/SOP/SIP/批次配置),确认继续?');
  }
  syncingId.value = row.id!;
  try {
    await updateItemSync(row.id!, checked);
    message.success(checked ? '已同步到 MES' : '已取消同步');
    handleRefresh();
  } finally {
    syncingId.value = null;
  }
}
const checkedIds = ref<number[]>([]);
function handleRowCheckboxChange({
  records,
@@ -232,8 +250,13 @@
        <Tag v-else>否</Tag>
      </template>
      <template #syncedMes="{ row }">
        <Tag v-if="row.syncedMes" color="success">已同步</Tag>
        <Tag v-else color="default">未同步</Tag>
        <Switch
          :checked="row.syncedMes"
          :loading="syncingId === row.id"
          checkedChildren="已同步"
          unCheckedChildren="未同步"
          @change="handleSyncChange(row, $event)"
        />
      </template>
      <template #actions="{ row }">
        <TableAction
src/views/basicData/mdm/modules/form.vue
@@ -67,6 +67,8 @@
      modalApi.lock();
      try {
        formData.value = await getItem(data.id);
        // 同步状态映射:详情接口返回 syncedMes,表单字段为 syncMes
        formData.value.syncMes = formData.value.syncedMes ?? true;
        await formApi.setValues(formData.value);
      } finally {
        modalApi.unlock();
vite.config.ts
@@ -76,7 +76,7 @@
        proxy: {
          "/admin-api": {
            changeOrigin: true,
            target: "http://36.213.180.217:9501",
            target: "http://192.168.0.10:48080",
            ws: true,
          },
        },