feat(mdm): 添加物料同步到MES功能
- 新增syncMes开关字段用于控制物料同步状态
- 实现更新物料同步状态的API接口
- 在列表页面添加同步状态切换开关组件
- 添加同步状态变更确认提示防止误操作
- 修复表单数据映射字段名称不一致问题
- 调整同步状态列宽度适配新组件显示
- 更新开发环境代理地址配置
| | |
| | | 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 }); |
| | |
| | | }, |
| | | }, |
| | | { |
| | | component: 'Switch', |
| | | fieldName: 'syncMes', |
| | | label: '同步到MES', |
| | | defaultValue: true, |
| | | componentProps: { |
| | | checkedChildren: '是', |
| | | unCheckedChildren: '否', |
| | | }, |
| | | rules: z.boolean().default(true), |
| | | }, |
| | | { |
| | | component: "RadioGroup", |
| | | fieldName: "status", |
| | | label: "状态", |
| | |
| | | { |
| | | field: "syncedMes", |
| | | title: "同步状态", |
| | | width: 90, |
| | | width: 100, |
| | | fixed: "right", |
| | | slots: { default: "syncedMes" }, |
| | | }, |
| | |
| | | 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 { |
| | |
| | | // exportItem, |
| | | getItemPage, |
| | | updateItemStatus, |
| | | updateItemSync, |
| | | } from '#/api/mdm/item'; |
| | | import { getItemTypeSimpleList } from '#/api/mes/md/item/type'; |
| | | import { $t } from '#/locales'; |
| | |
| | | } |
| | | } |
| | | |
| | | 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, |
| | |
| | | <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 |
| | |
| | | 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(); |
| | |
| | | proxy: { |
| | | "/admin-api": { |
| | | changeOrigin: true, |
| | | target: "http://36.213.180.217:9501", |
| | | target: "http://192.168.0.10:48080", |
| | | ws: true, |
| | | }, |
| | | }, |