From b176162c23294d8d1bfb9f09cf6bb759efb0124a Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期三, 15 七月 2026 14:10:26 +0800
Subject: [PATCH] 银川 1.库存现有量添加自定义出库入库功能 2.整理重复文件
---
src/views/basicData/mdm/data.ts | 578 +++++++++++++++++++++++++++++++++++++++------------------
1 files changed, 396 insertions(+), 182 deletions(-)
diff --git a/src/views/basicData/mdm/data.ts b/src/views/basicData/mdm/data.ts
index 1808f14..bbde65a 100644
--- a/src/views/basicData/mdm/data.ts
+++ b/src/views/basicData/mdm/data.ts
@@ -1,206 +1,405 @@
-import type { VbenFormSchema } from '#/adapter/form';
-import type { VxeTableGridOptions } from '#/adapter/vxe-table';
+import type { VbenFormSchema } from "#/adapter/form";
+import type { VxeTableGridOptions } from "#/adapter/vxe-table";
-import { CommonStatusEnum, DICT_TYPE } from '#/packages/constants/src';
-import { getDictOptions } from '#/packages/effects/hooks/src';
+import { CommonStatusEnum, DICT_TYPE } from "#/packages/constants/src";
+import { getDictOptions } from "#/packages/effects/hooks/src";
import { z } from '#/adapter/form';
+import { getItemTypeSimpleList } from '#/api/mes/md/item/type';
import { getUnitPage } from '#/api/mdm/unit';
-/** 鐗╂枡绫诲瀷閫夐」 */
-export const ITEM_TYPE_OPTIONS = [
- { label: '鍘熸枡', value: 1 },
- { label: '鍗婃垚鍝�', value: 2 },
- { label: '鎴愬搧', value: 3 },
- { label: '杈呮枡', value: 4 },
-];
+// 缂撳瓨鍗曚綅鍒楄〃
+let unitListCache: any[] | null = null;
+let unitListPromise: Promise<any[]> | null = null;
-/** 鐗╂枡绫诲瀷鏄犲皠 */
-export const ITEM_TYPE_MAP: Record<number, string> = {
- 1: '鍘熸枡',
- 2: '鍗婃垚鍝�',
- 3: '鎴愬搧',
- 4: '杈呮枡',
-};
-
-/** 鐗╂枡绫诲瀷棰滆壊鏄犲皠 */
-export const ITEM_TYPE_COLOR_MAP: Record<number, string> = {
- 1: 'green',
- 2: 'orange',
- 3: 'blue',
- 4: 'purple',
-};
+/** 鑾峰彇鍗曚綅鍒楄〃锛堝甫缂撳瓨锛� */
+async function getUnitListCached() {
+ if (unitListCache) {
+ return unitListCache;
+ }
+ if (unitListPromise) {
+ return unitListPromise;
+ }
+ unitListPromise = getUnitPage({ pageNo: 1, pageSize: 100, status: 0 }).then((res) => {
+ unitListCache = res.list || [];
+ return unitListCache;
+ }).finally(() => {
+ unitListPromise = null;
+ });
+ return unitListPromise;
+}
/** 鏂板/淇敼鐨勮〃鍗� */
export function useFormSchema(): VbenFormSchema[] {
return [
{
- component: 'Input',
- fieldName: 'id',
+ component: "Input",
+ fieldName: "id",
dependencies: {
- triggerFields: [''],
+ triggerFields: [""],
show: () => false,
},
},
{
- component: 'Input',
- fieldName: 'code',
- label: '鐗╂枡缂栫爜',
+ component: "Input",
+ fieldName: "code",
+ label: "鐗╂枡缂栫爜",
componentProps: {
- placeholder: '璇疯緭鍏ョ墿鏂欑紪鐮�',
+ placeholder: "璇疯緭鍏ョ墿鏂欑紪鐮�",
},
- rules: 'required',
+ rules: "required",
},
{
- component: 'Input',
- fieldName: 'name',
- label: '鐗╂枡鍚嶇О',
+ component: "Input",
+ fieldName: "name",
+ label: "鐗╂枡鍚嶇О",
componentProps: {
- placeholder: '璇疯緭鍏ョ墿鏂欏悕绉�',
+ placeholder: "璇疯緭鍏ョ墿鏂欏悕绉�",
},
- rules: 'required',
+ rules: "required",
},
{
- component: 'RadioGroup',
- fieldName: 'itemType',
- label: '鐗╂枡绫诲瀷',
+ component: "ApiSelect",
+ fieldName: "categoryId",
+ label: "鐗╂枡鍒嗙被",
+ rules: "selectRequired",
componentProps: {
- options: ITEM_TYPE_OPTIONS,
- buttonStyle: 'solid',
- optionType: 'button',
- },
- rules: 'required',
- },
- {
- component: 'ApiSelect',
- fieldName: 'unitMeasureId',
- label: '璁¢噺鍗曚綅',
- rules: 'required',
- componentProps: {
- placeholder: '璇烽�夋嫨璁¢噺鍗曚綅',
+ placeholder: "璇烽�夋嫨鐗╂枡鍒嗙被",
allowClear: true,
api: async () => {
- const res = await getUnitPage({ pageNo: 1, pageSize: 100, status: 0 });
- return res.list || [];
+ const res = await getItemTypeSimpleList();
+ return res || [];
},
- labelField: 'name',
- valueField: 'id',
+ labelField: "name",
+ valueField: "id",
+ },
+ },
+ {
+ component: "Input",
+ fieldName: "specification",
+ label: "瑙勬牸鍨嬪彿",
+ componentProps: {
+ placeholder: "璇疯緭鍏ヨ鏍煎瀷鍙�",
+ },
+ },
+ {
+ component: "ApiSelect",
+ fieldName: "unitMeasureId",
+ label: "璁¢噺鍗曚綅",
+ rules: "required",
+ formItemClass: "col-span-1",
+ componentProps: {
+ placeholder: "璇烽�夋嫨璁¢噺鍗曚綅",
+ allowClear: true,
+ api: getUnitListCached,
+ labelField: "name",
+ valueField: "id",
+ },
+ },
+ {
+ component: "ApiSelect",
+ fieldName: "unitMeasureId2",
+ label: "杈呭崟浣�1",
+ formItemClass: "col-span-1",
+ componentProps: {
+ placeholder: "璇烽�夋嫨杈呭崟浣�1",
+ allowClear: true,
+ api: getUnitListCached,
+ labelField: "name",
+ valueField: "id",
+ },
+ },
+ {
+ component: "InputNumber",
+ fieldName: "unitMeasureRate1",
+ label: "杈呭崟浣�1鎹㈢畻姣旂巼",
+ formItemClass: "col-span-1",
+ componentProps: {
+ class: "!w-full",
+ min: 0,
+ precision: 6,
+ placeholder: "璇疯緭鍏ユ崲绠楁瘮鐜�",
+ },
+ },
+ {
+ component: "ApiSelect",
+ fieldName: "unitMeasureId3",
+ label: "杈呭崟浣�2",
+ formItemClass: "col-span-1",
+ componentProps: {
+ placeholder: "璇烽�夋嫨杈呭崟浣�2",
+ allowClear: true,
+ api: getUnitListCached,
+ labelField: "name",
+ valueField: "id",
+ },
+ },
+ {
+ component: "InputNumber",
+ fieldName: "unitMeasureRate2",
+ label: "杈呭崟浣�2鎹㈢畻姣旂巼",
+ formItemClass: "col-span-1",
+ componentProps: {
+ class: "!w-full",
+ min: 0,
+ precision: 6,
+ placeholder: "璇疯緭鍏ユ崲绠楁瘮鐜�",
},
},
{
component: 'Input',
- fieldName: 'barCode',
- label: '鏉$爜',
+ fieldName: 'warehouseId',
+ label: '榛樿浠撳簱',
componentProps: {
- placeholder: '璇疯緭鍏ユ潯鐮�',
+ placeholder: '璇疯緭鍏ラ粯璁や粨搴揑D',
},
},
{
- component: 'InputNumber',
- fieldName: 'purchasePrice',
- label: '閲囪喘浠�',
+ component: "Input",
+ fieldName: "barCode",
+ label: "鏉$爜",
componentProps: {
- class: '!w-full',
- min: 0,
- precision: 2,
- placeholder: '璇疯緭鍏ラ噰璐环',
+ placeholder: "璇疯緭鍏ユ潯鐮�",
},
},
{
- component: 'InputNumber',
- fieldName: 'salesPrice',
- label: '閿�鍞环',
+ component: "InputNumber",
+ fieldName: "purchasePrice",
+ label: "閲囪喘浠�",
componentProps: {
- class: '!w-full',
+ class: "!w-full",
min: 0,
precision: 2,
- placeholder: '璇疯緭鍏ラ攢鍞环',
+ placeholder: "璇疯緭鍏ラ噰璐环",
},
},
{
- component: 'InputNumber',
- fieldName: 'costPrice',
- label: '鎴愭湰浠�',
+ component: "InputNumber",
+ fieldName: "salesPrice",
+ label: "閿�鍞环",
componentProps: {
- class: '!w-full',
+ class: "!w-full",
min: 0,
precision: 2,
- placeholder: '璇疯緭鍏ユ垚鏈环',
+ placeholder: "璇疯緭鍏ラ攢鍞环",
},
},
{
- component: 'InputNumber',
- fieldName: 'safetyStock',
- label: '瀹夊叏搴撳瓨',
+ component: "InputNumber",
+ fieldName: "costPrice",
+ label: "鎴愭湰浠�",
componentProps: {
- class: '!w-full',
+ class: "!w-full",
min: 0,
precision: 2,
- placeholder: '璇疯緭鍏ュ畨鍏ㄥ簱瀛�',
+ placeholder: "璇疯緭鍏ユ垚鏈环",
},
},
{
- component: 'InputNumber',
- fieldName: 'minStock',
- label: '鏈�浣庡簱瀛�',
+ component: "InputNumber",
+ fieldName: "safetyStock",
+ label: "瀹夊叏搴撳瓨",
componentProps: {
- class: '!w-full',
+ class: "!w-full",
min: 0,
precision: 2,
- placeholder: '璇疯緭鍏ユ渶浣庡簱瀛�',
+ placeholder: "璇疯緭鍏ュ畨鍏ㄥ簱瀛�",
},
},
{
- component: 'InputNumber',
- fieldName: 'maxStock',
- label: '鏈�楂樺簱瀛�',
+ component: "InputNumber",
+ fieldName: "minStock",
+ label: "鏈�浣庡簱瀛�",
componentProps: {
- class: '!w-full',
+ class: "!w-full",
min: 0,
precision: 2,
- placeholder: '璇疯緭鍏ユ渶楂樺簱瀛�',
+ placeholder: "璇疯緭鍏ユ渶浣庡簱瀛�",
+ },
+ },
+ {
+ component: "InputNumber",
+ fieldName: "maxStock",
+ label: "鏈�楂樺簱瀛�",
+ componentProps: {
+ class: "!w-full",
+ min: 0,
+ precision: 2,
+ placeholder: "璇疯緭鍏ユ渶楂樺簱瀛�",
},
},
{
component: 'Switch',
fieldName: 'isBatchManaged',
label: '鎵规绠$悊',
+ defaultValue: false,
componentProps: {
- class: 'w-auto',
- checkedChildren: '鏄�',
- unCheckedChildren: '鍚�',
+ class: "w-auto",
+ checkedChildren: "鏄�",
+ unCheckedChildren: "鍚�",
},
- rules: z.boolean().default(true),
+ rules: z.boolean().default(false),
},
{
- component: 'InputNumber',
- fieldName: 'expiryDay',
- label: '鏈夋晥鏈�(澶�)',
+ component: "Switch",
+ fieldName: "syncMes",
+ label: "鍚屾鍒� MES",
componentProps: {
- class: '!w-full',
+ class: "w-auto",
+ checkedChildren: "鏄�",
+ unCheckedChildren: "鍚�",
+ },
+ rules: z.boolean().default(false),
+ },
+ {
+ component: "InputNumber",
+ fieldName: "expiryDay",
+ label: "鏈夋晥鏈�(澶�)",
+ componentProps: {
+ class: "!w-full",
min: 0,
- placeholder: '璇疯緭鍏ユ湁鏁堟湡',
+ placeholder: "璇疯緭鍏ユ湁鏁堟湡",
},
},
{
- component: 'RadioGroup',
- fieldName: 'status',
- label: '鐘舵��',
+ component: "RadioGroup",
+ fieldName: "status",
+ label: "鐘舵��",
componentProps: {
- options: getDictOptions(DICT_TYPE.COMMON_STATUS, 'number'),
- buttonStyle: 'solid',
- optionType: 'button',
+ options: getDictOptions(DICT_TYPE.COMMON_STATUS, "number"),
+ buttonStyle: "solid",
+ optionType: "button",
},
rules: z.number().default(CommonStatusEnum.ENABLE),
},
{
- component: 'Textarea',
- fieldName: 'remark',
- label: '澶囨敞',
- formItemClass: 'col-span-2',
+ component: "Textarea",
+ fieldName: "remark",
+ label: "澶囨敞",
+ formItemClass: "col-span-2",
componentProps: {
- placeholder: '璇疯緭鍏ュ娉�',
+ placeholder: "璇疯緭鍏ュ娉�",
rows: 3,
+ },
+ },
+ // ===== 鎵规灞炴�ч厤缃紙isBatchManaged = true 鏃舵樉绀猴級 =====
+ {
+ component: "Divider",
+ fieldName: "batchConfigDivider",
+ label: "鎵规灞炴�ч厤缃�",
+ formItemClass: "col-span-2",
+ componentProps: {
+ orientation: "left",
+ plain: true,
+ },
+ dependencies: {
+ triggerFields: ["isBatchManaged"],
+ show: (values) => values.isBatchManaged === true,
+ },
+ },
+ {
+ component: "Switch",
+ fieldName: "produceDateFlag",
+ label: "鐢熶骇鏃ユ湡蹇呭~",
+ defaultValue: false,
+ componentProps: {
+ class: "w-auto",
+ checkedChildren: "鏄�",
+ unCheckedChildren: "鍚�",
+ },
+ dependencies: {
+ triggerFields: ["isBatchManaged"],
+ show: (values) => values.isBatchManaged === true,
+ },
+ },
+ {
+ component: "Switch",
+ fieldName: "expireDateFlag",
+ label: "鏈夋晥鏈熷繀濉�",
+ defaultValue: false,
+ componentProps: {
+ class: "w-auto",
+ checkedChildren: "鏄�",
+ unCheckedChildren: "鍚�",
+ },
+ dependencies: {
+ triggerFields: ["isBatchManaged"],
+ show: (values) => values.isBatchManaged === true,
+ },
+ },
+ {
+ component: "Switch",
+ fieldName: "receiptDateFlag",
+ label: "鍏ュ簱鏃ユ湡蹇呭~",
+ defaultValue: false,
+ componentProps: {
+ class: "w-auto",
+ checkedChildren: "鏄�",
+ unCheckedChildren: "鍚�",
+ },
+ dependencies: {
+ triggerFields: ["isBatchManaged"],
+ show: (values) => values.isBatchManaged === true,
+ },
+ },
+ {
+ component: "Switch",
+ fieldName: "vendorFlag",
+ label: "渚涘簲鍟嗗繀濉�",
+ defaultValue: false,
+ componentProps: {
+ class: "w-auto",
+ checkedChildren: "鏄�",
+ unCheckedChildren: "鍚�",
+ },
+ dependencies: {
+ triggerFields: ["isBatchManaged"],
+ show: (values) => values.isBatchManaged === true,
+ },
+ },
+ {
+ component: "Switch",
+ fieldName: "purchaseOrderCodeFlag",
+ label: "閲囪喘璁㈠崟鍙峰繀濉�",
+ defaultValue: false,
+ componentProps: {
+ class: "w-auto",
+ checkedChildren: "鏄�",
+ unCheckedChildren: "鍚�",
+ },
+ dependencies: {
+ triggerFields: ["isBatchManaged"],
+ show: (values) => values.isBatchManaged === true,
+ },
+ },
+ {
+ component: "Switch",
+ fieldName: "lotNumberFlag",
+ label: "鐢熶骇鎵瑰彿蹇呭~",
+ defaultValue: false,
+ componentProps: {
+ class: "w-auto",
+ checkedChildren: "鏄�",
+ unCheckedChildren: "鍚�",
+ },
+ dependencies: {
+ triggerFields: ["isBatchManaged"],
+ show: (values) => values.isBatchManaged === true,
+ },
+ },
+ {
+ component: "Switch",
+ fieldName: "qualityStatusFlag",
+ label: "璐ㄩ噺鐘舵�佸繀濉�",
+ defaultValue: false,
+ componentProps: {
+ class: "w-auto",
+ checkedChildren: "鏄�",
+ unCheckedChildren: "鍚�",
+ },
+ dependencies: {
+ triggerFields: ["isBatchManaged"],
+ show: (values) => values.isBatchManaged === true,
},
},
];
@@ -210,118 +409,133 @@
export function useGridFormSchema(): VbenFormSchema[] {
return [
{
- fieldName: 'code',
- label: '鐗╂枡缂栫爜',
- component: 'Input',
+ fieldName: "code",
+ label: "鐗╂枡缂栫爜",
+ component: "Input",
componentProps: {
- placeholder: '璇疯緭鍏ョ墿鏂欑紪鐮�',
+ placeholder: "璇疯緭鍏ョ墿鏂欑紪鐮�",
allowClear: true,
},
},
{
- fieldName: 'name',
- label: '鐗╂枡鍚嶇О',
- component: 'Input',
+ fieldName: "name",
+ label: "鐗╂枡鍚嶇О",
+ component: "Input",
componentProps: {
- placeholder: '璇疯緭鍏ョ墿鏂欏悕绉�',
+ placeholder: "璇疯緭鍏ョ墿鏂欏悕绉�",
allowClear: true,
},
},
{
- fieldName: 'itemType',
- label: '鐗╂枡绫诲瀷',
- component: 'Select',
+ fieldName: "status",
+ label: "鐘舵��",
+ component: "Select",
componentProps: {
- placeholder: '璇烽�夋嫨鐗╂枡绫诲瀷',
+ placeholder: "璇烽�夋嫨鐘舵��",
allowClear: true,
- options: ITEM_TYPE_OPTIONS,
- },
- },
- {
- fieldName: 'status',
- label: '鐘舵��',
- component: 'Select',
- componentProps: {
- placeholder: '璇烽�夋嫨鐘舵��',
- allowClear: true,
- options: getDictOptions(DICT_TYPE.COMMON_STATUS, 'number'),
+ options: getDictOptions(DICT_TYPE.COMMON_STATUS, "number"),
},
},
];
}
/** 鍒楄〃鐨勫瓧娈� */
-export function useGridColumns(): VxeTableGridOptions['columns'] {
+export function useGridColumns(): VxeTableGridOptions["columns"] {
return [
- { type: 'checkbox', width: 40 },
+ { type: "checkbox", width: 40 },
{
- field: 'code',
- title: '鐗╂枡缂栫爜',
+ field: "code",
+ title: "鐗╂枡缂栫爜",
minWidth: 120,
},
{
- field: 'name',
- title: '鐗╂枡鍚嶇О',
+ field: "name",
+ title: "鐗╂枡鍚嶇О",
minWidth: 180,
},
{
- field: 'specification',
- title: '瑙勬牸鍨嬪彿',
+ field: "specification",
+ title: "瑙勬牸鍨嬪彿",
minWidth: 150,
},
{
- field: 'unitMeasureName',
- title: '鍗曚綅',
+ field: "categoryName",
+ title: "鐗╂枡鍒嗙被",
+ minWidth: 120,
+ slots: { default: "categoryName" },
+ },
+ {
+ field: "unitMeasureName",
+ title: "鍗曚綅",
minWidth: 80,
},
{
- field: 'itemType',
- title: '鐗╂枡绫诲瀷',
- minWidth: 100,
- slots: { default: 'itemType' },
- },
- {
- field: 'purchasePrice',
- title: '閲囪喘浠�',
- minWidth: 100,
- formatter: ({ cellValue }) => {
- return cellValue != null ? `楼${Number(cellValue).toFixed(2)}` : '';
- },
- },
- {
- field: 'salesPrice',
- title: '閿�鍞环',
- minWidth: 100,
- formatter: ({ cellValue }) => {
- return cellValue != null ? `楼${Number(cellValue).toFixed(2)}` : '';
- },
- },
- {
- field: 'isBatchManaged',
- title: '鎵规绠$悊',
+ field: "unitMeasureName2",
+ title: "杈呭崟浣�1",
minWidth: 80,
- slots: { default: 'isBatchManaged' },
},
{
- field: 'status',
- title: '鐘舵��',
+ field: "unitMeasureRate1",
+ title: "杈呭崟浣�1鎹㈢畻姣旂巼",
+ minWidth: 130,
+ },
+ {
+ field: "unitMeasureName3",
+ title: "杈呭崟浣�2",
+ minWidth: 80,
+ },
+ {
+ field: "unitMeasureRate2",
+ title: "杈呭崟浣�2鎹㈢畻姣旂巼",
+ minWidth: 130,
+ },
+ {
+ field: "warehouseName",
+ title: "榛樿浠撳簱",
+ minWidth: 100,
+ },
+ {
+ field: "purchasePrice",
+ title: "閲囪喘浠�",
+ minWidth: 100,
+ formatter: ({ cellValue }) => {
+ return cellValue != null ? `楼${Number(cellValue).toFixed(2)}` : "";
+ },
+ },
+ {
+ field: "salesPrice",
+ title: "閿�鍞环",
+ minWidth: 100,
+ formatter: ({ cellValue }) => {
+ return cellValue != null ? `楼${Number(cellValue).toFixed(2)}` : "";
+ },
+ },
+ {
+ field: "isBatchManaged",
+ title: "鎵规绠$悊",
+ minWidth: 80,
+ slots: { default: "isBatchManaged" },
+ },
+ {
+ field: "status",
+ title: "鐘舵��",
minWidth: 80,
cellRender: {
- name: 'CellDict',
+ name: "CellDict",
props: { type: DICT_TYPE.COMMON_STATUS },
},
},
{
- field: 'createTime',
- title: '鍒涘缓鏃堕棿',
+ field: "createTime",
+ title: "鍒涘缓鏃堕棿",
minWidth: 180,
- formatter: 'formatDateTime',
+ formatter: "formatDateTime",
},
{
- title: '鎿嶄綔',
+ title: "鎿嶄綔",
width: 180,
- fixed: 'right',
- slots: { default: 'actions' },
+ fixed: "right",
+ slots: { default: "actions" },
},
];
-}
\ No newline at end of file
+}
--
Gitblit v1.9.3