From 536c6fbd1f42ea335abdce561451a6ee87d71465 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期一, 10 八月 2026 14:01:16 +0800
Subject: [PATCH] feat(hrm): 添加员工个人信息字段及导入导出功能
---
src/views/basicData/mdm/data.ts | 107 ++++++++++++++++++++++++++++++++++++-----------------
1 files changed, 72 insertions(+), 35 deletions(-)
diff --git a/src/views/basicData/mdm/data.ts b/src/views/basicData/mdm/data.ts
index c77d66f..a9d6ca9 100644
--- a/src/views/basicData/mdm/data.ts
+++ b/src/views/basicData/mdm/data.ts
@@ -11,6 +11,7 @@
import { MesAutoCodeRuleCode } from '@vben/constants';
import { getItemTypeSimpleList } from '#/api/mes/md/item/type';
import { getUnitPage } from '#/api/mdm/unit';
+import { getWarehouseSimpleList } from '#/api/mes/wm/warehouse';
import { Button } from 'ant-design-vue';
@@ -18,8 +19,12 @@
let unitListCache: any[] | null = null;
let unitListPromise: Promise<any[]> | null = null;
+// 缂撳瓨浠撳簱鍒楄〃
+let warehouseListCache: any[] | null = null;
+let warehouseListPromise: Promise<any[]> | null = null;
+
/** 灏嗘墎骞冲垎绫诲垪琛ㄨ浆涓� TreeSelect 鎵�闇�鐨勬爲褰㈢粨鏋� */
-function buildCategoryTree(list: any[]): any[] {
+export function buildCategoryTree(list: any[]): any[] {
const map = new Map<number, any>();
const roots: any[] = [];
for (const item of list) {
@@ -53,13 +58,31 @@
return unitListPromise;
}
+/** 鑾峰彇浠撳簱鍒楄〃锛堝甫缂撳瓨锛� */
+async function getWarehouseListCached() {
+ if (warehouseListCache) {
+ return warehouseListCache;
+ }
+ if (warehouseListPromise) {
+ return warehouseListPromise;
+ }
+ warehouseListPromise = getWarehouseSimpleList().then((res) => {
+ warehouseListCache = res || [];
+ return warehouseListCache;
+ }).finally(() => {
+ warehouseListPromise = null;
+ });
+ return warehouseListPromise;
+}
+
/** 娓呴櫎鍗曚綅鍒楄〃缂撳瓨 */
export function clearUnitListCache() {
unitListCache = null;
+ warehouseListCache = null;
}
/** 鏂板/淇敼鐨勮〃鍗� */
-export function useFormSchema(formApi?: VbenFormApi): VbenFormSchema[] {
+export function useFormSchema(formApi?: VbenFormApi, categoryTreeData: any[] = []): VbenFormSchema[] {
return [
{
component: "Input",
@@ -103,7 +126,7 @@
rules: "required",
},
{
- component: "ApiTreeSelect",
+ component: "TreeSelect",
fieldName: "categoryId",
label: "鐗╂枡鍒嗙被",
rules: "selectRequired",
@@ -111,10 +134,8 @@
placeholder: "璇烽�夋嫨鐗╂枡鍒嗙被",
allowClear: true,
treeDefaultExpandAll: true,
- api: async () => {
- const res = await getItemTypeSimpleList();
- return buildCategoryTree(res || []);
- },
+ treeData: categoryTreeData,
+ fieldNames: { label: 'label', value: 'value', children: 'children' },
},
},
{
@@ -190,11 +211,29 @@
},
},
{
- component: 'Input',
+ component: 'ApiSelect',
fieldName: 'warehouseId',
label: '榛樿浠撳簱',
componentProps: {
- placeholder: '璇疯緭鍏ラ粯璁や粨搴揑D',
+ placeholder: '璇烽�夋嫨榛樿浠撳簱',
+ allowClear: true,
+ api: getWarehouseListCached,
+ labelField: 'name',
+ valueField: 'id',
+ onChange: async (value: number | undefined) => {
+ const code = value
+ ? ((await getWarehouseListCached()).find((w: any) => w.id === value)?.code || '')
+ : '';
+ formApi?.setFieldValue('warehouseCode', code);
+ },
+ },
+ },
+ {
+ component: 'Input',
+ fieldName: 'warehouseCode',
+ dependencies: {
+ triggerFields: [''],
+ show: () => false,
},
},
{
@@ -276,17 +315,6 @@
fieldName: 'isBatchManaged',
label: '鎵规绠$悊',
defaultValue: false,
- componentProps: {
- class: "w-auto",
- checkedChildren: "鏄�",
- unCheckedChildren: "鍚�",
- },
- rules: z.boolean().default(false),
- },
- {
- component: "Switch",
- fieldName: "syncMes",
- label: "鍚屾鍒� MES",
componentProps: {
class: "w-auto",
checkedChildren: "鏄�",
@@ -554,27 +582,36 @@
},
},
{
- field: "isBatchManaged",
- title: "鎵规绠$悊",
- minWidth: 80,
- slots: { default: "isBatchManaged" },
- },
- {
- field: "status",
- title: "鐘舵��",
- minWidth: 80,
- cellRender: {
- name: "CellDict",
- props: { type: DICT_TYPE.COMMON_STATUS },
- },
- },
- {
field: "createTime",
title: "鍒涘缓鏃堕棿",
minWidth: 180,
formatter: "formatDateTime",
},
{
+ field: "isBatchManaged",
+ title: "鎵规绠$悊",
+ width: 80,
+ fixed: "right",
+ slots: { default: "isBatchManaged" },
+ },
+ {
+ field: "syncedMes",
+ title: "鍚屾鐘舵��",
+ width: 90,
+ fixed: "right",
+ slots: { default: "syncedMes" },
+ },
+ {
+ field: "status",
+ title: "鐘舵��",
+ width: 80,
+ fixed: "right",
+ cellRender: {
+ name: "CellDict",
+ props: { type: DICT_TYPE.COMMON_STATUS },
+ },
+ },
+ {
title: "鎿嶄綔",
width: 180,
fixed: "right",
--
Gitblit v1.9.3