liu
20 小时以前 ea9d117374e44d9eac0309ea2687b439f89b07b4
feat(mes): 生产排产新增任务报工人下拉源调整为工作站人力配置

- 报工人下拉由按角色编码(production_submit_work)取人改为按所选工作站关联岗位取人,与工作站字段联动
- 未选工作站时禁用下拉并提示,工作站未配置人力资源时弹出预警
- API 层新增 getUserListByWorkstationId,含参数守卫避免打开弹窗即报参数缺失
- 参考标品提交 b3abd460 移植

Co-Authored-By Claude <noreply@anthropic.com>
已修改2个文件
40 ■■■■■ 文件已修改
src/api/mes/md/workstation/worker/index.ts 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/pro/task/data.ts 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/md/workstation/worker/index.ts
@@ -1,4 +1,5 @@
import { requestClient } from '#/api/request';
import type { SystemUserApi } from '#/api/system/user';
export namespace MesMdWorkstationWorkerApi {
  /** MES 工作站人力资源 */
@@ -21,6 +22,17 @@
  );
}
/** 获得工作站对应岗位的员工列表 */
export function getUserListByWorkstationId(params: { workstationId: number }) {
  if (!params || !params.workstationId) {
    return Promise.resolve([]);
  }
  return requestClient.get<SystemUserApi.UserSimple[]>(
    '/mes/md-workstation-worker/list-user-by-workstation',
    { params },
  );
}
/** 新增工作站人力资源 */
export function createWorkstationWorker(
  data: MesMdWorkstationWorkerApi.WorkstationWorker,
src/views/mes/pro/task/data.ts
@@ -1,7 +1,7 @@
import type { VbenFormApi, VbenFormSchema } from '#/adapter/form';
import type { VxeTableGridOptions } from '#/adapter/vxe-table';
import { z } from '#/adapter/form';
import { getSimpleUserListByRoleCode } from '#/api/system/user';
import { getUserListByWorkstationId } from '#/api/mes/md/workstation/worker';
import type { MesProTaskApi } from '#/api/mes/pro/task';
import type { MesProWorkOrderApi } from '#/api/mes/pro/workorder';
@@ -489,11 +489,18 @@
      component: 'ApiSelect',
      componentProps: {
        placeholder: '请选择报工人',
        api: getSimpleUserListByRoleCode,
        params: { code: 'production_submit_work' },
        api: getUserListByWorkstationId,
        labelField: 'nickname',
        valueField: 'id',
        mode: 'multiple',
      },
      dependencies: {
        triggerFields: ['workstationId'],
        componentProps: (values) => ({
          params: { workstationId: values.workstationId },
          disabled: !values.workstationId,
          placeholder: values.workstationId ? '请选择报工人' : '请先选择工作站',
        }),
      },
      rules: z.array(z.number()).min(1, '请选择报工人').default([]),
    },
@@ -514,6 +521,21 @@
async function recalcDuration(formApi?: VbenFormApi) {
  if (!formApi) return;
  const values = await formApi.getValues();
  // 工作站切换后检查人力配置,缺失时预警
  if (values.workstationId) {
    try {
      const users = await getUserListByWorkstationId({
        workstationId: values.workstationId,
      });
      if (!users || users.length === 0) {
        message.warning('当前工作站没有配置人力资源');
      }
    } catch {
      // ignore
    }
  }
  if (!values.workstationId || !values.quantity) return;
  try {
    const res = await calculateTaskDuration(values.workstationId, values.quantity);