From b3abd460d8f68b9f501b48aeecaa344ff18c033a Mon Sep 17 00:00:00 2001
From: hsy <1029150275@qq.com>
Date: 星期三, 26 八月 2026 17:05:29 +0800
Subject: [PATCH] feat(mes): 生产任务报工人下拉源调整为工作站人力配置
---
src/views/mes/pro/task/data.ts | 27 +++++++++++--
src/views/mes/pd/archive/modules/detail.vue | 32 ++++++++++-----
src/views/mes/pro/workorder/data.ts | 28 +++++++-------
src/api/mes/md/workstation/worker/index.ts | 12 ++++++
src/views/mes/pro/task/modules/task-form.vue | 15 +------
5 files changed, 72 insertions(+), 42 deletions(-)
diff --git a/src/api/mes/md/workstation/worker/index.ts b/src/api/mes/md/workstation/worker/index.ts
index 3bd4ab9..ce60cb5 100644
--- a/src/api/mes/md/workstation/worker/index.ts
+++ b/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,
diff --git a/src/views/mes/pd/archive/modules/detail.vue b/src/views/mes/pd/archive/modules/detail.vue
index e13a306..d11f471 100644
--- a/src/views/mes/pd/archive/modules/detail.vue
+++ b/src/views/mes/pd/archive/modules/detail.vue
@@ -54,23 +54,33 @@
watch(() => props.visible, async (newVal) => {
if (newVal && props.productCode) {
- open.value = true;
- loading.value = true;
- detailList.value = [];
- activeProject.value = '0';
- try {
- detailList.value = await getPdArchiveDetailByProduct(props.productCode);
- } catch {
- message.error('鑾峰彇褰掓。璇︽儏澶辫触');
- } finally {
- loading.value = false;
- }
+ loadData(props.productCode);
} else if (!newVal) {
open.value = false;
detailList.value = [];
}
});
+async function loadData(code: string) {
+ open.value = true;
+ loading.value = true;
+ detailList.value = [];
+ activeProject.value = '0';
+ try {
+ detailList.value = await getPdArchiveDetailByProduct(code);
+ } catch {
+ message.error('鑾峰彇褰掓。璇︽儏澶辫触');
+ } finally {
+ loading.value = false;
+ }
+}
+
+function openModal(code: string) {
+ loadData(code);
+}
+
+defineExpose({ open: openModal });
+
function handleClose() {
emit('update:visible', false);
}
diff --git a/src/views/mes/pro/task/data.ts b/src/views/mes/pro/task/data.ts
index 12cfcb1..0098d65 100644
--- a/src/views/mes/pro/task/data.ts
+++ b/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';
@@ -393,7 +393,7 @@
}
/** 鐢熶骇浠诲姟鏂板/淇敼鐨勮〃鍗� */
-export function useTaskFormSchema(formApi?: VbenFormApi, workOrderQuantity?: Ref<number | undefined>, feedbackRole?: Ref<string | undefined>): VbenFormSchema[] {
+export function useTaskFormSchema(formApi?: VbenFormApi, workOrderQuantity?: Ref<number | undefined>): VbenFormSchema[] {
return [
{
fieldName: 'workstationId',
@@ -475,11 +475,18 @@
component: 'ApiSelect',
componentProps: {
placeholder: '璇烽�夋嫨鎶ュ伐浜�',
- api: getSimpleUserListByRoleCode,
- params: { code: feedbackRole?.value || '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([]),
},
@@ -500,6 +507,18 @@
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);
diff --git a/src/views/mes/pro/task/modules/task-form.vue b/src/views/mes/pro/task/modules/task-form.vue
index 5b64e26..d1c5802 100644
--- a/src/views/mes/pro/task/modules/task-form.vue
+++ b/src/views/mes/pro/task/modules/task-form.vue
@@ -1,4 +1,4 @@
-锘�<script lang="ts" setup>
+<script lang="ts" setup>
import type { MesProTaskApi } from '#/api/mes/pro/task';
import { computed, ref } from 'vue';
@@ -9,7 +9,6 @@
import { useVbenForm } from '#/adapter/form';
import { createTask, getTask, updateTask } from '#/api/mes/pro/task';
-import { getWorkOrder } from '#/api/mes/pro/workorder';
import { $t } from '#/locales';
import { useTaskFormSchema } from '../data';
@@ -24,7 +23,6 @@
routeId?: number;
workOrderId?: number;
}>({}); // 鏂板浠诲姟鏃剁殑璁㈠崟 / 宸ュ簭涓婁笅鏂�
-const feedbackRole = ref<string>();
const getTitle = computed(() => {
return formData.value?.id
@@ -113,16 +111,7 @@
});
}
- if (wid) {
- try {
- const wo = await getWorkOrder(wid);
- feedbackRole.value = wo.feedbackRole;
- } catch {
- // ignore
- }
- }
-
- formApi.setState({ schema: useTaskFormSchema(formApi, workOrderQuantity, feedbackRole) });
+ formApi.setState({ schema: useTaskFormSchema(formApi, workOrderQuantity) });
},
});
</script>
diff --git a/src/views/mes/pro/workorder/data.ts b/src/views/mes/pro/workorder/data.ts
index 85e98cf..cf8cdd4 100644
--- a/src/views/mes/pro/workorder/data.ts
+++ b/src/views/mes/pro/workorder/data.ts
@@ -237,20 +237,20 @@
},
rules: 'required',
},
- {
- fieldName: 'feedbackRole',
- label: '鎶ュ伐瑙掕壊',
- component: 'ApiSelect',
- componentProps: {
- api: getSimpleRoleList,
- disabled: headerReadonly,
- labelField: 'name',
- valueField: 'code',
- mode: 'multiple',
- placeholder: '璇烽�夋嫨鎶ュ伐瑙掕壊',
- },
- rules: 'selectRequired',
- },
+ // {
+ // fieldName: 'feedbackRole',
+ // label: '鎶ュ伐瑙掕壊',
+ // component: 'ApiSelect',
+ // componentProps: {
+ // api: getSimpleRoleList,
+ // disabled: headerReadonly,
+ // labelField: 'name',
+ // valueField: 'code',
+ // mode: 'multiple',
+ // placeholder: '璇烽�夋嫨鎶ュ伐瑙掕壊',
+ // },
+ // rules: 'selectRequired',
+ // },
{
fieldName: 'feedbackApprove',
label: '鏄惁鎶ュ伐瀹℃壒',
--
Gitblit v1.9.3