From 4adce844d3e2172e77b0e88fb3eda6ac9e91f645 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sun, 17 May 2026 10:50:34 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=88wms=EF=BC=89=EF=BC=9A=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=20merchant=20=E6=A8=A1=E5=9D=97=E7=9A=84=E8=BF=81?= =?UTF-8?q?=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web-antd/src/api/wms/md/merchant/index.ts | 73 ++++++ .../views/wms/md/merchant/components/index.ts | 1 + .../merchant/components/merchant-select.vue | 108 ++++++++ .../src/views/wms/md/merchant/data.ts | 232 ++++++++++++++++++ .../src/views/wms/md/merchant/index.vue | 152 ++++++++++++ .../views/wms/md/merchant/modules/form.vue | 94 +++++++ apps/web-ele/src/api/wms/md/merchant/index.ts | 73 ++++++ .../views/wms/md/merchant/components/index.ts | 1 + .../merchant/components/merchant-select.vue | 111 +++++++++ .../web-ele/src/views/wms/md/merchant/data.ts | 232 ++++++++++++++++++ .../src/views/wms/md/merchant/index.vue | 152 ++++++++++++ .../views/wms/md/merchant/modules/form.vue | 94 +++++++ 12 files changed, 1323 insertions(+) create mode 100644 apps/web-antd/src/api/wms/md/merchant/index.ts create mode 100644 apps/web-antd/src/views/wms/md/merchant/components/index.ts create mode 100644 apps/web-antd/src/views/wms/md/merchant/components/merchant-select.vue create mode 100644 apps/web-antd/src/views/wms/md/merchant/data.ts create mode 100644 apps/web-antd/src/views/wms/md/merchant/index.vue create mode 100644 apps/web-antd/src/views/wms/md/merchant/modules/form.vue create mode 100644 apps/web-ele/src/api/wms/md/merchant/index.ts create mode 100644 apps/web-ele/src/views/wms/md/merchant/components/index.ts create mode 100644 apps/web-ele/src/views/wms/md/merchant/components/merchant-select.vue create mode 100644 apps/web-ele/src/views/wms/md/merchant/data.ts create mode 100644 apps/web-ele/src/views/wms/md/merchant/index.vue create mode 100644 apps/web-ele/src/views/wms/md/merchant/modules/form.vue diff --git a/apps/web-antd/src/api/wms/md/merchant/index.ts b/apps/web-antd/src/api/wms/md/merchant/index.ts new file mode 100644 index 000000000..93539f098 --- /dev/null +++ b/apps/web-antd/src/api/wms/md/merchant/index.ts @@ -0,0 +1,73 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace WmsMerchantApi { + /** WMS 往来企业 */ + export interface Merchant { + id?: number; + code?: string; + name?: string; + type?: number; + level?: string; + bankName?: string; + bankAccount?: string; + address?: string; + mobile?: string; + telephone?: string; + contact?: string; + email?: string; + remark?: string; + createTime?: Date; + } + + /** WMS 往来企业精简列表请求 */ + export interface MerchantSimpleListReq { + types?: number[]; + } +} + +/** 查询往来企业分页 */ +export function getMerchantPage(params: PageParam) { + return requestClient.get>( + '/wms/merchant/page', + { params }, + ); +} + +/** 查询往来企业精简列表 */ +export function getMerchantSimpleList( + params?: WmsMerchantApi.MerchantSimpleListReq, +) { + return requestClient.get( + '/wms/merchant/simple-list', + { params }, + ); +} + +/** 查询往来企业详情 */ +export function getMerchant(id: number) { + return requestClient.get( + `/wms/merchant/get?id=${id}`, + ); +} + +/** 新增往来企业 */ +export function createMerchant(data: WmsMerchantApi.Merchant) { + return requestClient.post('/wms/merchant/create', data); +} + +/** 修改往来企业 */ +export function updateMerchant(data: WmsMerchantApi.Merchant) { + return requestClient.put('/wms/merchant/update', data); +} + +/** 删除往来企业 */ +export function deleteMerchant(id: number) { + return requestClient.delete(`/wms/merchant/delete?id=${id}`); +} + +/** 导出往来企业 */ +export function exportMerchant(params: any) { + return requestClient.download('/wms/merchant/export-excel', { params }); +} diff --git a/apps/web-antd/src/views/wms/md/merchant/components/index.ts b/apps/web-antd/src/views/wms/md/merchant/components/index.ts new file mode 100644 index 000000000..c6a83bd0e --- /dev/null +++ b/apps/web-antd/src/views/wms/md/merchant/components/index.ts @@ -0,0 +1 @@ +export { default as WmsMerchantSelect } from './merchant-select.vue'; diff --git a/apps/web-antd/src/views/wms/md/merchant/components/merchant-select.vue b/apps/web-antd/src/views/wms/md/merchant/components/merchant-select.vue new file mode 100644 index 000000000..be64fddcc --- /dev/null +++ b/apps/web-antd/src/views/wms/md/merchant/components/merchant-select.vue @@ -0,0 +1,108 @@ + + + diff --git a/apps/web-antd/src/views/wms/md/merchant/data.ts b/apps/web-antd/src/views/wms/md/merchant/data.ts new file mode 100644 index 000000000..5f76f7387 --- /dev/null +++ b/apps/web-antd/src/views/wms/md/merchant/data.ts @@ -0,0 +1,232 @@ +import type { VbenFormSchema } from '#/adapter/form'; +import type { VxeTableGridOptions } from '#/adapter/vxe-table'; + +import { h } from 'vue'; + +import { DICT_TYPE } from '@vben/constants'; +import { getDictOptions } from '@vben/hooks'; + +import { Button } from 'ant-design-vue'; + +import { z } from '#/adapter/form'; +import { generateWmsCode } from '#/views/wms/utils/constants'; + +/** 新增/修改往来企业的表单 */ +export function useFormSchema(formApi?: any): VbenFormSchema[] { + return [ + { + component: 'Input', + fieldName: 'id', + dependencies: { + triggerFields: [''], + show: () => false, + }, + }, + { + fieldName: 'code', + label: '往来企业编号', + component: 'Input', + componentProps: { + maxLength: 20, + placeholder: '请输入往来企业编号', + }, + rules: z.string().min(1, '往来企业编号不能为空').max(20), + suffix: () => { + return h( + Button, + { + type: 'default', + onClick: () => { + formApi?.setFieldValue('code', generateWmsCode('M')); + }, + }, + { default: () => '生成' }, + ); + }, + }, + { + fieldName: 'name', + label: '往来企业名称', + component: 'Input', + componentProps: { + maxLength: 60, + placeholder: '请输入往来企业名称', + }, + rules: z.string().min(1, '往来企业名称不能为空').max(60), + }, + { + fieldName: 'type', + label: '往来企业类型', + component: 'Select', + componentProps: { + allowClear: true, + options: getDictOptions(DICT_TYPE.WMS_MERCHANT_TYPE, 'number'), + placeholder: '请选择往来企业类型', + }, + rules: 'required', + }, + { + fieldName: 'level', + label: '级别', + component: 'Input', + componentProps: { + maxLength: 10, + placeholder: '请输入级别', + }, + }, + { + fieldName: 'bankName', + label: '开户行', + component: 'Input', + componentProps: { + maxLength: 255, + placeholder: '请输入开户行', + }, + }, + { + fieldName: 'bankAccount', + label: '银行账户', + component: 'Input', + componentProps: { + maxLength: 40, + placeholder: '请输入银行账户', + }, + }, + { + fieldName: 'address', + label: '地址', + component: 'Input', + componentProps: { + maxLength: 200, + placeholder: '请输入地址', + }, + }, + { + fieldName: 'contact', + label: '联系人', + component: 'Input', + componentProps: { + maxLength: 30, + placeholder: '请输入联系人', + }, + }, + { + fieldName: 'mobile', + label: '手机号', + component: 'Input', + componentProps: { + maxLength: 13, + placeholder: '请输入手机号', + }, + }, + { + fieldName: 'telephone', + label: '座机号', + component: 'Input', + componentProps: { + maxLength: 13, + placeholder: '请输入座机号', + }, + }, + { + fieldName: 'email', + label: 'Email', + component: 'Input', + componentProps: { + maxLength: 50, + placeholder: '请输入 Email', + }, + }, + { + fieldName: 'remark', + label: '备注', + component: 'Input', + componentProps: { + maxLength: 255, + placeholder: '请输入备注', + }, + }, + ]; +} + +/** 列表的搜索表单 */ +export function useGridFormSchema(): VbenFormSchema[] { + return [ + { + fieldName: 'code', + label: '往来企业编号', + component: 'Input', + componentProps: { + allowClear: true, + placeholder: '请输入往来企业编号', + }, + }, + { + fieldName: 'name', + label: '往来企业名称', + component: 'Input', + componentProps: { + allowClear: true, + placeholder: '请输入往来企业名称', + }, + }, + { + fieldName: 'type', + label: '往来企业类型', + component: 'Select', + componentProps: { + allowClear: true, + options: getDictOptions(DICT_TYPE.WMS_MERCHANT_TYPE, 'number'), + placeholder: '请选择往来企业类型', + }, + }, + ]; +} + +/** 列表的字段 */ +export function useGridColumns(): VxeTableGridOptions['columns'] { + return [ + { + field: 'code', + title: '往来企业编号', + width: 160, + }, + { + field: 'name', + title: '往来企业名称', + minWidth: 160, + }, + { + field: 'type', + title: '往来企业类型', + width: 120, + align: 'center', + cellRender: { + name: 'CellDict', + props: { type: DICT_TYPE.WMS_MERCHANT_TYPE }, + }, + }, + { + field: 'level', + title: '级别', + width: 100, + align: 'center', + }, + { + field: 'contact', + title: '联系人', + width: 120, + }, + { + field: 'remark', + title: '备注', + minWidth: 160, + }, + { + title: '操作', + width: 160, + fixed: 'right', + slots: { default: 'actions' }, + }, + ]; +} diff --git a/apps/web-antd/src/views/wms/md/merchant/index.vue b/apps/web-antd/src/views/wms/md/merchant/index.vue new file mode 100644 index 000000000..1e98f3e93 --- /dev/null +++ b/apps/web-antd/src/views/wms/md/merchant/index.vue @@ -0,0 +1,152 @@ + + + diff --git a/apps/web-antd/src/views/wms/md/merchant/modules/form.vue b/apps/web-antd/src/views/wms/md/merchant/modules/form.vue new file mode 100644 index 000000000..99038a69e --- /dev/null +++ b/apps/web-antd/src/views/wms/md/merchant/modules/form.vue @@ -0,0 +1,94 @@ + + + diff --git a/apps/web-ele/src/api/wms/md/merchant/index.ts b/apps/web-ele/src/api/wms/md/merchant/index.ts new file mode 100644 index 000000000..93539f098 --- /dev/null +++ b/apps/web-ele/src/api/wms/md/merchant/index.ts @@ -0,0 +1,73 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace WmsMerchantApi { + /** WMS 往来企业 */ + export interface Merchant { + id?: number; + code?: string; + name?: string; + type?: number; + level?: string; + bankName?: string; + bankAccount?: string; + address?: string; + mobile?: string; + telephone?: string; + contact?: string; + email?: string; + remark?: string; + createTime?: Date; + } + + /** WMS 往来企业精简列表请求 */ + export interface MerchantSimpleListReq { + types?: number[]; + } +} + +/** 查询往来企业分页 */ +export function getMerchantPage(params: PageParam) { + return requestClient.get>( + '/wms/merchant/page', + { params }, + ); +} + +/** 查询往来企业精简列表 */ +export function getMerchantSimpleList( + params?: WmsMerchantApi.MerchantSimpleListReq, +) { + return requestClient.get( + '/wms/merchant/simple-list', + { params }, + ); +} + +/** 查询往来企业详情 */ +export function getMerchant(id: number) { + return requestClient.get( + `/wms/merchant/get?id=${id}`, + ); +} + +/** 新增往来企业 */ +export function createMerchant(data: WmsMerchantApi.Merchant) { + return requestClient.post('/wms/merchant/create', data); +} + +/** 修改往来企业 */ +export function updateMerchant(data: WmsMerchantApi.Merchant) { + return requestClient.put('/wms/merchant/update', data); +} + +/** 删除往来企业 */ +export function deleteMerchant(id: number) { + return requestClient.delete(`/wms/merchant/delete?id=${id}`); +} + +/** 导出往来企业 */ +export function exportMerchant(params: any) { + return requestClient.download('/wms/merchant/export-excel', { params }); +} diff --git a/apps/web-ele/src/views/wms/md/merchant/components/index.ts b/apps/web-ele/src/views/wms/md/merchant/components/index.ts new file mode 100644 index 000000000..c6a83bd0e --- /dev/null +++ b/apps/web-ele/src/views/wms/md/merchant/components/index.ts @@ -0,0 +1 @@ +export { default as WmsMerchantSelect } from './merchant-select.vue'; diff --git a/apps/web-ele/src/views/wms/md/merchant/components/merchant-select.vue b/apps/web-ele/src/views/wms/md/merchant/components/merchant-select.vue new file mode 100644 index 000000000..587aee847 --- /dev/null +++ b/apps/web-ele/src/views/wms/md/merchant/components/merchant-select.vue @@ -0,0 +1,111 @@ + + + diff --git a/apps/web-ele/src/views/wms/md/merchant/data.ts b/apps/web-ele/src/views/wms/md/merchant/data.ts new file mode 100644 index 000000000..95903f7b1 --- /dev/null +++ b/apps/web-ele/src/views/wms/md/merchant/data.ts @@ -0,0 +1,232 @@ +import type { VbenFormSchema } from '#/adapter/form'; +import type { VxeTableGridOptions } from '#/adapter/vxe-table'; + +import { h } from 'vue'; + +import { DICT_TYPE } from '@vben/constants'; +import { getDictOptions } from '@vben/hooks'; + +import { ElButton } from 'element-plus'; + +import { z } from '#/adapter/form'; +import { generateWmsCode } from '#/views/wms/utils/constants'; + +/** 新增/修改往来企业的表单 */ +export function useFormSchema(formApi?: any): VbenFormSchema[] { + return [ + { + component: 'Input', + fieldName: 'id', + dependencies: { + triggerFields: [''], + show: () => false, + }, + }, + { + fieldName: 'code', + label: '往来企业编号', + component: 'Input', + componentProps: { + maxLength: 20, + placeholder: '请输入往来企业编号', + }, + rules: z.string().min(1, '往来企业编号不能为空').max(20), + suffix: () => { + return h( + ElButton, + { + type: 'default', + onClick: () => { + formApi?.setFieldValue('code', generateWmsCode('M')); + }, + }, + { default: () => '生成' }, + ); + }, + }, + { + fieldName: 'name', + label: '往来企业名称', + component: 'Input', + componentProps: { + maxLength: 60, + placeholder: '请输入往来企业名称', + }, + rules: z.string().min(1, '往来企业名称不能为空').max(60), + }, + { + fieldName: 'type', + label: '往来企业类型', + component: 'Select', + componentProps: { + clearable: true, + options: getDictOptions(DICT_TYPE.WMS_MERCHANT_TYPE, 'number'), + placeholder: '请选择往来企业类型', + }, + rules: 'required', + }, + { + fieldName: 'level', + label: '级别', + component: 'Input', + componentProps: { + maxLength: 10, + placeholder: '请输入级别', + }, + }, + { + fieldName: 'bankName', + label: '开户行', + component: 'Input', + componentProps: { + maxLength: 255, + placeholder: '请输入开户行', + }, + }, + { + fieldName: 'bankAccount', + label: '银行账户', + component: 'Input', + componentProps: { + maxLength: 40, + placeholder: '请输入银行账户', + }, + }, + { + fieldName: 'address', + label: '地址', + component: 'Input', + componentProps: { + maxLength: 200, + placeholder: '请输入地址', + }, + }, + { + fieldName: 'contact', + label: '联系人', + component: 'Input', + componentProps: { + maxLength: 30, + placeholder: '请输入联系人', + }, + }, + { + fieldName: 'mobile', + label: '手机号', + component: 'Input', + componentProps: { + maxLength: 13, + placeholder: '请输入手机号', + }, + }, + { + fieldName: 'telephone', + label: '座机号', + component: 'Input', + componentProps: { + maxLength: 13, + placeholder: '请输入座机号', + }, + }, + { + fieldName: 'email', + label: 'Email', + component: 'Input', + componentProps: { + maxLength: 50, + placeholder: '请输入 Email', + }, + }, + { + fieldName: 'remark', + label: '备注', + component: 'Input', + componentProps: { + maxLength: 255, + placeholder: '请输入备注', + }, + }, + ]; +} + +/** 列表的搜索表单 */ +export function useGridFormSchema(): VbenFormSchema[] { + return [ + { + fieldName: 'code', + label: '往来企业编号', + component: 'Input', + componentProps: { + clearable: true, + placeholder: '请输入往来企业编号', + }, + }, + { + fieldName: 'name', + label: '往来企业名称', + component: 'Input', + componentProps: { + clearable: true, + placeholder: '请输入往来企业名称', + }, + }, + { + fieldName: 'type', + label: '往来企业类型', + component: 'Select', + componentProps: { + clearable: true, + options: getDictOptions(DICT_TYPE.WMS_MERCHANT_TYPE, 'number'), + placeholder: '请选择往来企业类型', + }, + }, + ]; +} + +/** 列表的字段 */ +export function useGridColumns(): VxeTableGridOptions['columns'] { + return [ + { + field: 'code', + title: '往来企业编号', + width: 160, + }, + { + field: 'name', + title: '往来企业名称', + minWidth: 160, + }, + { + field: 'type', + title: '往来企业类型', + width: 120, + align: 'center', + cellRender: { + name: 'CellDict', + props: { type: DICT_TYPE.WMS_MERCHANT_TYPE }, + }, + }, + { + field: 'level', + title: '级别', + width: 100, + align: 'center', + }, + { + field: 'contact', + title: '联系人', + width: 120, + }, + { + field: 'remark', + title: '备注', + minWidth: 160, + }, + { + title: '操作', + width: 160, + fixed: 'right', + slots: { default: 'actions' }, + }, + ]; +} diff --git a/apps/web-ele/src/views/wms/md/merchant/index.vue b/apps/web-ele/src/views/wms/md/merchant/index.vue new file mode 100644 index 000000000..cf00b435a --- /dev/null +++ b/apps/web-ele/src/views/wms/md/merchant/index.vue @@ -0,0 +1,152 @@ + + + diff --git a/apps/web-ele/src/views/wms/md/merchant/modules/form.vue b/apps/web-ele/src/views/wms/md/merchant/modules/form.vue new file mode 100644 index 000000000..83ddba950 --- /dev/null +++ b/apps/web-ele/src/views/wms/md/merchant/modules/form.vue @@ -0,0 +1,94 @@ + + +