From 573c4975560e16b43651d07afdcd93732708e103 Mon Sep 17 00:00:00 2001
From: tuqin <tuqin@tuqin.cn>
Date: 星期六, 24 十月 2026 12:56:31 +0800
Subject: [PATCH] feat(hrm): 调岗申请表单新增「调岗人」选择,选中后自动带出原部门/原岗位
---
src/views/hrm/transfer/modules/form.vue | 67 +++++++++++++++++++++++++--------
1 files changed, 51 insertions(+), 16 deletions(-)
diff --git a/src/views/hrm/transfer/modules/form.vue b/src/views/hrm/transfer/modules/form.vue
index 6e76835..5527a15 100644
--- a/src/views/hrm/transfer/modules/form.vue
+++ b/src/views/hrm/transfer/modules/form.vue
@@ -17,7 +17,8 @@
const emit = defineEmits(['success']);
const formType = ref<FormType>('create');
-const currentEmployeeId = ref<number>();
+/** 鍛樺伐绮剧畝鍒楄〃缂撳瓨锛堥�変汉鏃剁敤浜庡甫鍑哄師閮ㄩ棬 / 鍘熷矖浣嶏級 */
+let employeeCache: any[] = [];
const isDetail = computed(() => formType.value === 'detail');
const getTitle = computed(() => {
@@ -26,6 +27,34 @@
}
return formType.value === 'update' ? '淇敼璋冨矖鐢宠' : '鏂板璋冨矖鐢宠';
});
+
+/**
+ * 鏍规嵁閫変腑鐨勫憳宸ワ紝鑷姩甯﹀嚭鍘熼儴闂� / 鍘熷矖浣嶏紙鍚� ID锛屼究浜庡悗绔惤搴擄級
+ */
+async function fillCurrentPosition(employeeId?: number) {
+ if (!employeeId) {
+ await formApi.setValues({
+ currentDeptId: undefined,
+ currentDeptName: undefined,
+ currentPostId: undefined,
+ currentPostName: undefined,
+ });
+ return;
+ }
+ if (employeeCache.length === 0) {
+ employeeCache = (await getEmployeeSimpleList()) || [];
+ }
+ const emp = employeeCache.find((item) => item.id === employeeId);
+ if (!emp) {
+ return;
+ }
+ await formApi.setValues({
+ currentDeptId: emp.deptId,
+ currentDeptName: emp.deptName,
+ currentPostId: emp.postIds?.[0],
+ currentPostName: emp.postName,
+ });
+}
const [Form, formApi] = useVbenForm({
commonConfig: {
@@ -39,6 +68,12 @@
layout: 'horizontal',
schema: [],
showDefaultActions: false,
+ // 閫夋嫨銆岃皟宀椾汉銆嶅悗锛岃嚜鍔ㄥ甫鍑哄叾褰撳墠閮ㄩ棬 / 宀椾綅
+ async handleValuesChange(values: any, changedFields: string[]) {
+ if (changedFields?.includes('userId')) {
+ await fillCurrentPosition(values?.userId);
+ }
+ },
});
const [Modal, modalApi] = useVbenModal({
@@ -53,7 +88,6 @@
}
modalApi.lock();
const data = (await formApi.getValues()) as HrmTransferApi.Transfer;
- data.employeeId = currentEmployeeId.value;
try {
if (data.id) {
await updateTransfer(data);
@@ -71,30 +105,31 @@
if (!isOpen) {
return;
}
+ employeeCache = [];
const data = modalApi.getData<{ formType: FormType; id?: number }>();
formType.value = data.formType;
formApi.setState({ schema: useFormSchema(data.formType) });
formApi.setDisabled(data.formType === 'detail');
modalApi.setState({ showConfirmButton: data.formType !== 'detail' });
if (!data?.id) {
- // 鏂板鏃讹紝鑷姩鑾峰彇褰撳墠鐧诲綍鍛樺伐鐨勯儴闂ㄥ拰宀椾綅淇℃伅
- const employees = await getEmployeeSimpleList();
- // TODO: 杩欓噷搴旇鏍规嵁鐧诲綍鐢ㄦ埛鑾峰彇瀵瑰簲鐨勫憳宸ヤ俊鎭紝鏆傛椂鍙栫涓�涓憳宸ヤ綔涓虹ず渚�
- const currentEmployee = employees[0];
- if (currentEmployee) {
- currentEmployeeId.value = currentEmployee.id;
- await formApi.setValues({
- currentDeptName: currentEmployee.deptName,
- currentPostName: currentEmployee.postName,
- });
- }
+ // 鏂板锛氭竻绌鸿〃鍗曪紝鐢辩敤鎴烽�夋嫨璋冨矖浜�
+ await formApi.setValues({
+ userId: undefined,
+ currentDeptId: undefined,
+ currentDeptName: undefined,
+ currentPostId: undefined,
+ currentPostName: undefined,
+ });
return;
}
modalApi.lock();
try {
const transfer = await getTransfer(data.id);
- currentEmployeeId.value = transfer.employeeId;
await formApi.setValues(transfer);
+ // 鍘嗗彶鏁版嵁鍙兘娌℃湁鍘熼儴闂�/宀椾綅锛屾寜璋冨矖浜鸿ˉ榻�
+ if (transfer.userId && !transfer.currentDeptId) {
+ await fillCurrentPosition(transfer.userId);
+ }
if (transfer.attachmentList?.length) {
await formApi.setFieldValue('blobIds', transfer.attachmentList.map(item => ({
uid: String(item.id),
@@ -112,7 +147,7 @@
</script>
<template>
- <Modal :title="getTitle" class="w-[600px]">
+ <Modal :title="getTitle" class="w-[700px]">
<Form class="mx-4" />
</Modal>
-</template>
\ No newline at end of file
+</template>
--
Gitblit v1.9.3