From 1a9b0509d5f5a926a8d939b3b59d64f164bee42b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C2=A0panda7?= < csq6266@gmail.com> Date: Fri, 18 Jul 2025 00:15:40 +0800 Subject: [PATCH 01/41] feat: add animation effects to VbenModal component --- docs/src/components/common-ui/vben-modal.md | 10 ++++++ .../demos/vben-modal/animation-type/index.vue | 36 +++++++++++++++++++ .../ui-kit/popup-ui/src/modal/modal-api.ts | 1 + .../@core/ui-kit/popup-ui/src/modal/modal.ts | 5 +++ .../@core/ui-kit/popup-ui/src/modal/modal.vue | 2 ++ .../shadcn-ui/src/ui/dialog/DialogContent.vue | 15 ++++++-- 6 files changed, 67 insertions(+), 2 deletions(-) create mode 100644 docs/src/demos/vben-modal/animation-type/index.vue diff --git a/docs/src/components/common-ui/vben-modal.md b/docs/src/components/common-ui/vben-modal.md index 3c8200f90..fc714e279 100644 --- a/docs/src/components/common-ui/vben-modal.md +++ b/docs/src/components/common-ui/vben-modal.md @@ -56,6 +56,15 @@ Modal 内的内容一般业务中,会比较复杂,所以我们可以将 moda +## 动画类型 + +通过 `animationType` 属性可以控制弹窗的动画效果: + +- `slide`(默认):从顶部向下滑动进入/退出 +- `scale`:缩放淡入/淡出效果 + + + ::: info 注意 - `VbenModal` 组件对与参数的处理优先级是 `slot` > `props` > `state`(通过api更新的状态以及useVbenModal参数)。如果你已经传入了 `slot` 或者 `props`,那么 `setState` 将不会生效,这种情况下你可以通过 `slot` 或者 `props` 来更新状态。 @@ -112,6 +121,7 @@ const [Modal, modalApi] = useVbenModal({ | bordered | 是否显示border | `boolean` | `false` | | zIndex | 弹窗的ZIndex层级 | `number` | `1000` | | overlayBlur | 遮罩模糊度 | `number` | - | +| animationType | 动画类型 | `'slide' \| 'scale'` | `'slide'` | | submitting | 标记为提交中,锁定弹窗当前状态 | `boolean` | `false` | ::: info appendToMain diff --git a/docs/src/demos/vben-modal/animation-type/index.vue b/docs/src/demos/vben-modal/animation-type/index.vue new file mode 100644 index 000000000..79ba9d33a --- /dev/null +++ b/docs/src/demos/vben-modal/animation-type/index.vue @@ -0,0 +1,36 @@ + + + diff --git a/packages/@core/ui-kit/popup-ui/src/modal/modal-api.ts b/packages/@core/ui-kit/popup-ui/src/modal/modal-api.ts index 27aa82162..18dc90c4a 100644 --- a/packages/@core/ui-kit/popup-ui/src/modal/modal-api.ts +++ b/packages/@core/ui-kit/popup-ui/src/modal/modal-api.ts @@ -59,6 +59,7 @@ export class ModalApi { showCancelButton: true, showConfirmButton: true, title: '', + animationType: 'slide', }; this.store = new Store( diff --git a/packages/@core/ui-kit/popup-ui/src/modal/modal.ts b/packages/@core/ui-kit/popup-ui/src/modal/modal.ts index 2dbab9e42..fa41344ee 100644 --- a/packages/@core/ui-kit/popup-ui/src/modal/modal.ts +++ b/packages/@core/ui-kit/popup-ui/src/modal/modal.ts @@ -5,6 +5,11 @@ import type { MaybePromise } from '@vben-core/typings'; import type { ModalApi } from './modal-api'; export interface ModalProps { + /** + * 动画类型 + * @default 'slide' + */ + animationType?: 'scale' | 'slide'; /** * 是否要挂载到内容区域 * @default false diff --git a/packages/@core/ui-kit/popup-ui/src/modal/modal.vue b/packages/@core/ui-kit/popup-ui/src/modal/modal.vue index b3fdf3fb4..c8a845552 100644 --- a/packages/@core/ui-kit/popup-ui/src/modal/modal.vue +++ b/packages/@core/ui-kit/popup-ui/src/modal/modal.vue @@ -94,6 +94,7 @@ const { submitting, title, titleTooltip, + animationType, zIndex, } = usePriorityValues(props, state); @@ -244,6 +245,7 @@ function handleClosed() { :modal="modal" :open="state?.isOpen" :show-close="closable" + :animation-type="animationType" :z-index="zIndex" :overlay-blur="overlayBlur" close-class="top-3" diff --git a/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogContent.vue b/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogContent.vue index 9f0789878..22ed845af 100644 --- a/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogContent.vue +++ b/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogContent.vue @@ -20,6 +20,7 @@ import DialogOverlay from './DialogOverlay.vue'; const props = withDefaults( defineProps< DialogContentProps & { + animationType?: 'scale' | 'slide'; appendTo?: HTMLElement | string; class?: ClassType; closeClass?: ClassType; @@ -31,7 +32,12 @@ const props = withDefaults( zIndex?: number; } >(), - { appendTo: 'body', closeDisabled: false, showClose: true }, + { + appendTo: 'body', + animationType: 'slide', + closeDisabled: false, + showClose: true, + }, ); const emits = defineEmits< DialogContentEmits & { close: []; closed: []; opened: [] } @@ -43,6 +49,7 @@ const delegatedProps = computed(() => { modal: _modal, open: _open, showClose: __, + animationType: ___, ...delegated } = props; @@ -100,7 +107,11 @@ defineExpose({ v-bind="forwarded" :class=" cn( - 'z-popup bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-top-[48%] w-full p-6 shadow-lg outline-none sm:rounded-xl', + 'z-popup bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 w-full p-6 shadow-lg outline-none sm:rounded-xl', + { + 'data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-top-[48%]': + animationType === 'slide', + }, props.class, ) " -- Gitee From 1575619d53f94b0fed98728da40538f75f7c8acb Mon Sep 17 00:00:00 2001 From: vben Date: Sat, 19 Jul 2025 22:19:50 +0800 Subject: [PATCH 02/41] chore: release v5.5.8 --- apps/web-antd/package.json | 2 +- apps/web-ele/package.json | 2 +- apps/web-naive/package.json | 2 +- docs/package.json | 2 +- .../commitlint-config/package.json | 2 +- .../stylelint-config/package.json | 2 +- internal/node-utils/package.json | 2 +- internal/tailwind-config/package.json | 2 +- internal/tsconfig/package.json | 2 +- internal/vite-config/package.json | 2 +- package.json | 2 +- packages/@core/base/design/package.json | 2 +- packages/@core/base/icons/package.json | 2 +- packages/@core/base/shared/package.json | 2 +- packages/@core/base/typings/package.json | 2 +- packages/@core/composables/package.json | 2 +- packages/@core/preferences/package.json | 2 +- packages/@core/ui-kit/form-ui/package.json | 2 +- packages/@core/ui-kit/layout-ui/package.json | 2 +- packages/@core/ui-kit/menu-ui/package.json | 2 +- packages/@core/ui-kit/shadcn-ui/package.json | 2 +- packages/@core/ui-kit/tabs-ui/package.json | 2 +- packages/constants/package.json | 2 +- packages/effects/access/package.json | 2 +- packages/effects/common-ui/package.json | 2 +- packages/effects/hooks/package.json | 2 +- packages/effects/layouts/package.json | 2 +- packages/effects/plugins/package.json | 2 +- packages/effects/request/package.json | 2 +- packages/icons/package.json | 2 +- packages/locales/package.json | 2 +- packages/preferences/package.json | 2 +- packages/stores/package.json | 2 +- packages/styles/package.json | 2 +- packages/types/package.json | 2 +- packages/utils/package.json | 2 +- playground/package.json | 2 +- pnpm-lock.yaml | 105 ++++++++++++++---- scripts/turbo-run/package.json | 2 +- scripts/vsh/package.json | 2 +- 40 files changed, 123 insertions(+), 60 deletions(-) diff --git a/apps/web-antd/package.json b/apps/web-antd/package.json index 6dcb91848..5b6cbeb3a 100644 --- a/apps/web-antd/package.json +++ b/apps/web-antd/package.json @@ -1,6 +1,6 @@ { "name": "@vben/web-antd", - "version": "5.5.7", + "version": "5.5.8", "homepage": "https://vben.pro", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "repository": { diff --git a/apps/web-ele/package.json b/apps/web-ele/package.json index 386c36840..0e5aa1aae 100644 --- a/apps/web-ele/package.json +++ b/apps/web-ele/package.json @@ -1,6 +1,6 @@ { "name": "@vben/web-ele", - "version": "5.5.7", + "version": "5.5.8", "homepage": "https://vben.pro", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "repository": { diff --git a/apps/web-naive/package.json b/apps/web-naive/package.json index b97ab64f7..515763b0e 100644 --- a/apps/web-naive/package.json +++ b/apps/web-naive/package.json @@ -1,6 +1,6 @@ { "name": "@vben/web-naive", - "version": "5.5.7", + "version": "5.5.8", "homepage": "https://vben.pro", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "repository": { diff --git a/docs/package.json b/docs/package.json index f57dfc854..639ca07a4 100644 --- a/docs/package.json +++ b/docs/package.json @@ -1,6 +1,6 @@ { "name": "@vben/docs", - "version": "5.5.7", + "version": "5.5.8", "private": true, "scripts": { "build": "vitepress build", diff --git a/internal/lint-configs/commitlint-config/package.json b/internal/lint-configs/commitlint-config/package.json index a137f947b..16984c2f9 100644 --- a/internal/lint-configs/commitlint-config/package.json +++ b/internal/lint-configs/commitlint-config/package.json @@ -1,6 +1,6 @@ { "name": "@vben/commitlint-config", - "version": "5.5.7", + "version": "5.5.8", "private": true, "homepage": "https://github.com/vbenjs/vue-vben-admin", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues", diff --git a/internal/lint-configs/stylelint-config/package.json b/internal/lint-configs/stylelint-config/package.json index 8e2a97c2c..00f9b1d18 100644 --- a/internal/lint-configs/stylelint-config/package.json +++ b/internal/lint-configs/stylelint-config/package.json @@ -1,6 +1,6 @@ { "name": "@vben/stylelint-config", - "version": "5.5.7", + "version": "5.5.8", "private": true, "homepage": "https://github.com/vbenjs/vue-vben-admin", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues", diff --git a/internal/node-utils/package.json b/internal/node-utils/package.json index 8b8db7454..490df9e92 100644 --- a/internal/node-utils/package.json +++ b/internal/node-utils/package.json @@ -1,6 +1,6 @@ { "name": "@vben/node-utils", - "version": "5.5.7", + "version": "5.5.8", "private": true, "homepage": "https://github.com/vbenjs/vue-vben-admin", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues", diff --git a/internal/tailwind-config/package.json b/internal/tailwind-config/package.json index 8506891b5..72c63819c 100644 --- a/internal/tailwind-config/package.json +++ b/internal/tailwind-config/package.json @@ -1,6 +1,6 @@ { "name": "@vben/tailwind-config", - "version": "5.5.7", + "version": "5.5.8", "private": true, "homepage": "https://github.com/vbenjs/vue-vben-admin", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues", diff --git a/internal/tsconfig/package.json b/internal/tsconfig/package.json index 44ee3f1b0..74cfb915f 100644 --- a/internal/tsconfig/package.json +++ b/internal/tsconfig/package.json @@ -1,6 +1,6 @@ { "name": "@vben/tsconfig", - "version": "5.5.7", + "version": "5.5.8", "private": true, "homepage": "https://github.com/vbenjs/vue-vben-admin", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues", diff --git a/internal/vite-config/package.json b/internal/vite-config/package.json index d7ba6a655..c37777f24 100644 --- a/internal/vite-config/package.json +++ b/internal/vite-config/package.json @@ -1,6 +1,6 @@ { "name": "@vben/vite-config", - "version": "5.5.6", + "version": "5.5.8", "private": true, "homepage": "https://github.com/vbenjs/vue-vben-admin", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues", diff --git a/package.json b/package.json index 8b87dc385..487cff525 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "vben-admin-monorepo", - "version": "5.5.7", + "version": "5.5.8", "private": true, "keywords": [ "monorepo", diff --git a/packages/@core/base/design/package.json b/packages/@core/base/design/package.json index 33e924749..13d2fefcf 100644 --- a/packages/@core/base/design/package.json +++ b/packages/@core/base/design/package.json @@ -1,6 +1,6 @@ { "name": "@vben-core/design", - "version": "5.5.7", + "version": "5.5.8", "homepage": "https://github.com/vbenjs/vue-vben-admin", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "repository": { diff --git a/packages/@core/base/icons/package.json b/packages/@core/base/icons/package.json index 9a349883c..1e6e5250c 100644 --- a/packages/@core/base/icons/package.json +++ b/packages/@core/base/icons/package.json @@ -1,6 +1,6 @@ { "name": "@vben-core/icons", - "version": "5.5.7", + "version": "5.5.8", "homepage": "https://github.com/vbenjs/vue-vben-admin", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "repository": { diff --git a/packages/@core/base/shared/package.json b/packages/@core/base/shared/package.json index b02cc6e47..6599c54c5 100644 --- a/packages/@core/base/shared/package.json +++ b/packages/@core/base/shared/package.json @@ -1,6 +1,6 @@ { "name": "@vben-core/shared", - "version": "5.5.7", + "version": "5.5.8", "homepage": "https://github.com/vbenjs/vue-vben-admin", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "repository": { diff --git a/packages/@core/base/typings/package.json b/packages/@core/base/typings/package.json index e2ab18701..e0e2c3727 100644 --- a/packages/@core/base/typings/package.json +++ b/packages/@core/base/typings/package.json @@ -1,6 +1,6 @@ { "name": "@vben-core/typings", - "version": "5.5.7", + "version": "5.5.8", "homepage": "https://github.com/vbenjs/vue-vben-admin", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "repository": { diff --git a/packages/@core/composables/package.json b/packages/@core/composables/package.json index 08db5106f..39ca108f4 100644 --- a/packages/@core/composables/package.json +++ b/packages/@core/composables/package.json @@ -1,6 +1,6 @@ { "name": "@vben-core/composables", - "version": "5.5.7", + "version": "5.5.8", "homepage": "https://github.com/vbenjs/vue-vben-admin", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "repository": { diff --git a/packages/@core/preferences/package.json b/packages/@core/preferences/package.json index 726b473db..786e6c2ce 100644 --- a/packages/@core/preferences/package.json +++ b/packages/@core/preferences/package.json @@ -1,6 +1,6 @@ { "name": "@vben-core/preferences", - "version": "5.5.7", + "version": "5.5.8", "homepage": "https://github.com/vbenjs/vue-vben-admin", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "repository": { diff --git a/packages/@core/ui-kit/form-ui/package.json b/packages/@core/ui-kit/form-ui/package.json index 36ae1678f..497da77a9 100644 --- a/packages/@core/ui-kit/form-ui/package.json +++ b/packages/@core/ui-kit/form-ui/package.json @@ -1,6 +1,6 @@ { "name": "@vben-core/form-ui", - "version": "5.5.7", + "version": "5.5.8", "homepage": "https://github.com/vbenjs/vue-vben-admin", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "repository": { diff --git a/packages/@core/ui-kit/layout-ui/package.json b/packages/@core/ui-kit/layout-ui/package.json index 57a462fe1..0cf9ff87a 100644 --- a/packages/@core/ui-kit/layout-ui/package.json +++ b/packages/@core/ui-kit/layout-ui/package.json @@ -1,6 +1,6 @@ { "name": "@vben-core/layout-ui", - "version": "5.5.7", + "version": "5.5.8", "homepage": "https://github.com/vbenjs/vue-vben-admin", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "repository": { diff --git a/packages/@core/ui-kit/menu-ui/package.json b/packages/@core/ui-kit/menu-ui/package.json index 760d7646e..3f893168e 100644 --- a/packages/@core/ui-kit/menu-ui/package.json +++ b/packages/@core/ui-kit/menu-ui/package.json @@ -1,6 +1,6 @@ { "name": "@vben-core/menu-ui", - "version": "5.5.7", + "version": "5.5.8", "homepage": "https://github.com/vbenjs/vue-vben-admin", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "repository": { diff --git a/packages/@core/ui-kit/shadcn-ui/package.json b/packages/@core/ui-kit/shadcn-ui/package.json index 11d2918f1..0525a303f 100644 --- a/packages/@core/ui-kit/shadcn-ui/package.json +++ b/packages/@core/ui-kit/shadcn-ui/package.json @@ -1,6 +1,6 @@ { "name": "@vben-core/shadcn-ui", - "version": "5.5.7", + "version": "5.5.8", "#main": "./dist/index.mjs", "#module": "./dist/index.mjs", "homepage": "https://github.com/vbenjs/vue-vben-admin", diff --git a/packages/@core/ui-kit/tabs-ui/package.json b/packages/@core/ui-kit/tabs-ui/package.json index bc84b4d6a..93c16e1e2 100644 --- a/packages/@core/ui-kit/tabs-ui/package.json +++ b/packages/@core/ui-kit/tabs-ui/package.json @@ -1,6 +1,6 @@ { "name": "@vben-core/tabs-ui", - "version": "5.5.7", + "version": "5.5.8", "homepage": "https://github.com/vbenjs/vue-vben-admin", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "repository": { diff --git a/packages/constants/package.json b/packages/constants/package.json index c71e11847..2b098a2ae 100644 --- a/packages/constants/package.json +++ b/packages/constants/package.json @@ -1,6 +1,6 @@ { "name": "@vben/constants", - "version": "5.5.7", + "version": "5.5.8", "homepage": "https://github.com/vbenjs/vue-vben-admin", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "repository": { diff --git a/packages/effects/access/package.json b/packages/effects/access/package.json index e4c39eb2a..f620d6dc2 100644 --- a/packages/effects/access/package.json +++ b/packages/effects/access/package.json @@ -1,6 +1,6 @@ { "name": "@vben/access", - "version": "5.5.7", + "version": "5.5.8", "homepage": "https://github.com/vbenjs/vue-vben-admin", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "repository": { diff --git a/packages/effects/common-ui/package.json b/packages/effects/common-ui/package.json index fdd9e793f..2c32421b7 100644 --- a/packages/effects/common-ui/package.json +++ b/packages/effects/common-ui/package.json @@ -1,6 +1,6 @@ { "name": "@vben/common-ui", - "version": "5.5.7", + "version": "5.5.8", "homepage": "https://github.com/vbenjs/vue-vben-admin", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "repository": { diff --git a/packages/effects/hooks/package.json b/packages/effects/hooks/package.json index 004f3c50e..b5bcc0a02 100644 --- a/packages/effects/hooks/package.json +++ b/packages/effects/hooks/package.json @@ -1,6 +1,6 @@ { "name": "@vben/hooks", - "version": "5.5.7", + "version": "5.5.8", "homepage": "https://github.com/vbenjs/vue-vben-admin", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "repository": { diff --git a/packages/effects/layouts/package.json b/packages/effects/layouts/package.json index a8439a021..76c99faf4 100644 --- a/packages/effects/layouts/package.json +++ b/packages/effects/layouts/package.json @@ -1,6 +1,6 @@ { "name": "@vben/layouts", - "version": "5.5.7", + "version": "5.5.8", "homepage": "https://github.com/vbenjs/vue-vben-admin", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "repository": { diff --git a/packages/effects/plugins/package.json b/packages/effects/plugins/package.json index 40c16c7d7..edbb72844 100644 --- a/packages/effects/plugins/package.json +++ b/packages/effects/plugins/package.json @@ -1,6 +1,6 @@ { "name": "@vben/plugins", - "version": "5.5.6", + "version": "5.5.8", "homepage": "https://github.com/vbenjs/vue-vben-admin", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "repository": { diff --git a/packages/effects/request/package.json b/packages/effects/request/package.json index 527f6d904..5e6bb141f 100644 --- a/packages/effects/request/package.json +++ b/packages/effects/request/package.json @@ -1,6 +1,6 @@ { "name": "@vben/request", - "version": "5.5.7", + "version": "5.5.8", "homepage": "https://github.com/vbenjs/vue-vben-admin", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "repository": { diff --git a/packages/icons/package.json b/packages/icons/package.json index 858383947..8ac80940e 100644 --- a/packages/icons/package.json +++ b/packages/icons/package.json @@ -1,6 +1,6 @@ { "name": "@vben/icons", - "version": "5.5.7", + "version": "5.5.8", "homepage": "https://github.com/vbenjs/vue-vben-admin", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "repository": { diff --git a/packages/locales/package.json b/packages/locales/package.json index 5e92de548..281df25ab 100644 --- a/packages/locales/package.json +++ b/packages/locales/package.json @@ -1,6 +1,6 @@ { "name": "@vben/locales", - "version": "5.5.7", + "version": "5.5.8", "homepage": "https://github.com/vbenjs/vue-vben-admin", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "repository": { diff --git a/packages/preferences/package.json b/packages/preferences/package.json index de276c726..e3334f332 100644 --- a/packages/preferences/package.json +++ b/packages/preferences/package.json @@ -1,6 +1,6 @@ { "name": "@vben/preferences", - "version": "5.5.7", + "version": "5.5.8", "homepage": "https://github.com/vbenjs/vue-vben-admin", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "repository": { diff --git a/packages/stores/package.json b/packages/stores/package.json index c9860b59c..bb5796f49 100644 --- a/packages/stores/package.json +++ b/packages/stores/package.json @@ -1,6 +1,6 @@ { "name": "@vben/stores", - "version": "5.5.7", + "version": "5.5.8", "homepage": "https://github.com/vbenjs/vue-vben-admin", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "repository": { diff --git a/packages/styles/package.json b/packages/styles/package.json index 127bd4d58..960842da8 100644 --- a/packages/styles/package.json +++ b/packages/styles/package.json @@ -1,6 +1,6 @@ { "name": "@vben/styles", - "version": "5.5.7", + "version": "5.5.8", "homepage": "https://github.com/vbenjs/vue-vben-admin", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "repository": { diff --git a/packages/types/package.json b/packages/types/package.json index 2fa047d84..74a4b5475 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@vben/types", - "version": "5.5.7", + "version": "5.5.8", "homepage": "https://github.com/vbenjs/vue-vben-admin", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "repository": { diff --git a/packages/utils/package.json b/packages/utils/package.json index 38a6ca199..447f3b6cf 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@vben/utils", - "version": "5.5.7", + "version": "5.5.8", "homepage": "https://github.com/vbenjs/vue-vben-admin", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "repository": { diff --git a/playground/package.json b/playground/package.json index 8bfd17d51..c918f2de1 100644 --- a/playground/package.json +++ b/playground/package.json @@ -1,6 +1,6 @@ { "name": "@vben/playground", - "version": "5.5.7", + "version": "5.5.8", "homepage": "https://vben.pro", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "repository": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4d9080759..fd21c952c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -508,11 +508,11 @@ catalogs: specifier: 2.2.10 version: 2.2.10 vxe-pc-ui: - specifier: ^4.6.42 - version: 4.6.42 + specifier: ^4.7.12 + version: 4.7.16 vxe-table: - specifier: ^4.13.51 - version: 4.13.51 + specifier: ^4.14.4 + version: 4.14.4 watermark-js-plus: specifier: ^1.6.2 version: 1.6.2 @@ -1713,10 +1713,10 @@ importers: version: 3.5.17(typescript@5.8.3) vxe-pc-ui: specifier: 'catalog:' - version: 4.6.42(vue@3.5.17(typescript@5.8.3)) + version: 4.7.16(vue@3.5.17(typescript@5.8.3)) vxe-table: specifier: 'catalog:' - version: 4.13.51(vue@3.5.17(typescript@5.8.3)) + version: 4.14.4(vue@3.5.17(typescript@5.8.3)) packages/effects/request: dependencies: @@ -5330,8 +5330,8 @@ packages: '@vueuse/shared@9.13.0': resolution: {integrity: sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==} - '@vxe-ui/core@4.1.5': - resolution: {integrity: sha512-IgRwVueejOGC5t+bVmBAUkoUplvp1R77pfYX6bb4fcLEPUdBGOdm4I0LCKTDWQ24Mj3Bki7wNpt3sdtEZEzdoA==} + '@vxe-ui/core@4.2.5': + resolution: {integrity: sha512-K/0ae1VoCaVHZTnV3rUFsQdkwCU6dKjbFVtf0bvVRCYG5v+KrKbvFBSkqdnGT7sDoeotPVjL/WjBbl64RpHs3w==} peerDependencies: vue: ^3.5.17 @@ -8136,6 +8136,41 @@ packages: cpu: [x64] os: [darwin] + lefthook-freebsd-arm64@1.11.14: + resolution: {integrity: sha512-oSdJKGGMohktFXC6faZCUt5afyHpDwWGIWAkHGgOXUVD/LiZDEn6U/8cQmKm1UAfBySuPTtfir0VeM04y6188g==} + cpu: [arm64] + os: [freebsd] + + lefthook-freebsd-x64@1.11.14: + resolution: {integrity: sha512-gZdMWZwOtIhIPK3GPYac7JhXrxF188gkw65i6O7CedS/meDlK2vjBv5BUVLeD/satv4+jibEdV0h4Qqu/xIh2A==} + cpu: [x64] + os: [freebsd] + + lefthook-linux-arm64@1.11.14: + resolution: {integrity: sha512-sZmqbTsGQFQw7gbfi9eIHFOxfcs66QfZYLRMh1DktODhyhRXB8RtI6KMeKCtPEGLhbK55/I4TprC8Qvj86UBgw==} + cpu: [arm64] + os: [linux] + + lefthook-linux-x64@1.11.14: + resolution: {integrity: sha512-c+to1BRzFe419SNXAR6YpCBP8EVWxvUxlON3Z+efzmrHhdlhm7LvEoJcN4RQE4Gc2rJQJNe87OjsEZQkc4uQLg==} + cpu: [x64] + os: [linux] + + lefthook-openbsd-arm64@1.11.14: + resolution: {integrity: sha512-fivG3D9G4ASRCTf3ecfz1WdnrHCW9pezaI8v1NVve8t6B2q0d0yeaje5dfhoAsAvwiFPRaMzka1Qaoyu8O8G9Q==} + cpu: [arm64] + os: [openbsd] + + lefthook-openbsd-x64@1.11.14: + resolution: {integrity: sha512-vikmG0jf7JVKR3be6Wk3l1jtEdedEqk1BTdsaHFX1bj0qk0azcqlZ819Wt/IoyIYDzQCHKowZ6DuXsRjT+RXWA==} + cpu: [x64] + os: [openbsd] + + lefthook-windows-arm64@1.11.14: + resolution: {integrity: sha512-5PoAJ9QKaqxJn1NWrhrhXpAROpl/dT7bGTo7VMj2ATO1cpRatbn6p+ssvc3tgeriFThowFb1D11Fg6OlFLi6UQ==} + cpu: [arm64] + os: [win32] + lefthook-windows-x64@1.11.14: resolution: {integrity: sha512-kBeOPR0Aj5hQGxoBBntgz5/e/xaH5Vnzlq9lJjHW8sf23qu/JVUGg6ceCoicyVWJi+ZOBliTa8KzwCu+mgyJjw==} cpu: [x64] @@ -11285,11 +11320,11 @@ packages: peerDependencies: vue: ^3.5.17 - vxe-pc-ui@4.6.42: - resolution: {integrity: sha512-grBaVbagoc5rbTq2jj1P/cWYP+sBo+VSXFRpNGYOe9Ka4EG9JP+LIa7h0lKfojDE5fGlPUYTkkYNe0fsQVDQ0g==} + vxe-pc-ui@4.7.16: + resolution: {integrity: sha512-t+E+x25FvRIax9HQJygO2wQA+2lxmNCkW4RY3m01c+bem4rs1FqM7UmxtUMBMM8OVH15mD42qwU4BtX7Ylf+EA==} - vxe-table@4.13.51: - resolution: {integrity: sha512-g7y/67EC43KfiSGmZU6xh9kzGIsNQlFzvX1Yl/qz8U3dcQ8oOcnnvymhkHY54teaqyTr6m6RyWkcMKe3RMP64g==} + vxe-table@4.14.4: + resolution: {integrity: sha512-h4KDw8DHZz037kNULSJD2lEiNifAtHNw5XvXSH0Ropk60WK5My1zj9Kb2rX+uU1oGfh75dmv71JzR6V2iWoSUw==} warning@4.0.3: resolution: {integrity: sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==} @@ -11467,8 +11502,8 @@ packages: xe-utils@3.7.4: resolution: {integrity: sha512-9yuCHLOU+og4OEkPWWtzrYk1Zt1hgN66U/NCJ0+vYJSx1MplBtoQRz8aEA+2RmCr3leLru98vQxNpw/vJsu/sg==} - xe-utils@3.7.5: - resolution: {integrity: sha512-wDjqnXw02EQxf2jqlE1nhvT9HP3PDVcyrol5whDJN/NOvnMyXIzcwEiPB/H2T3aq07f2QQXsSs4Z8g5L3BVH5A==} + xe-utils@3.7.8: + resolution: {integrity: sha512-V/k6B/ASYir6yLYhp62DnM17po9u1N9mou/rn4if5WoFCsAO49JpCiVpkDpwCv4zxGfWmhWgzmz4FytWF+pDVw==} xml-name-validator@4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} @@ -15500,11 +15535,11 @@ snapshots: - '@vue/composition-api' - vue - '@vxe-ui/core@4.1.5(vue@3.5.17(typescript@5.8.3))': + '@vxe-ui/core@4.2.5(vue@3.5.17(typescript@5.8.3))': dependencies: dom-zindex: 1.0.6 vue: 3.5.17(typescript@5.8.3) - xe-utils: 3.7.5 + xe-utils: 3.7.8 '@whatwg-node/disposablestack@0.0.6': dependencies: @@ -18583,6 +18618,27 @@ snapshots: lefthook-darwin-x64@1.11.14: optional: true + lefthook-freebsd-arm64@1.11.14: + optional: true + + lefthook-freebsd-x64@1.11.14: + optional: true + + lefthook-linux-arm64@1.11.14: + optional: true + + lefthook-linux-x64@1.11.14: + optional: true + + lefthook-openbsd-arm64@1.11.14: + optional: true + + lefthook-openbsd-x64@1.11.14: + optional: true + + lefthook-windows-arm64@1.11.14: + optional: true + lefthook-windows-x64@1.11.14: optional: true @@ -18590,6 +18646,13 @@ snapshots: optionalDependencies: lefthook-darwin-arm64: 1.11.14 lefthook-darwin-x64: 1.11.14 + lefthook-freebsd-arm64: 1.11.14 + lefthook-freebsd-x64: 1.11.14 + lefthook-linux-arm64: 1.11.14 + lefthook-linux-x64: 1.11.14 + lefthook-openbsd-arm64: 1.11.14 + lefthook-openbsd-x64: 1.11.14 + lefthook-windows-arm64: 1.11.14 lefthook-windows-x64: 1.11.14 less@4.3.0: @@ -22099,15 +22162,15 @@ snapshots: vooks: 0.2.12(vue@3.5.17(typescript@5.8.3)) vue: 3.5.17(typescript@5.8.3) - vxe-pc-ui@4.6.42(vue@3.5.17(typescript@5.8.3)): + vxe-pc-ui@4.7.16(vue@3.5.17(typescript@5.8.3)): dependencies: - '@vxe-ui/core': 4.1.5(vue@3.5.17(typescript@5.8.3)) + '@vxe-ui/core': 4.2.5(vue@3.5.17(typescript@5.8.3)) transitivePeerDependencies: - vue - vxe-table@4.13.51(vue@3.5.17(typescript@5.8.3)): + vxe-table@4.14.4(vue@3.5.17(typescript@5.8.3)): dependencies: - vxe-pc-ui: 4.6.42(vue@3.5.17(typescript@5.8.3)) + vxe-pc-ui: 4.7.16(vue@3.5.17(typescript@5.8.3)) transitivePeerDependencies: - vue @@ -22383,7 +22446,7 @@ snapshots: xe-utils@3.7.4: {} - xe-utils@3.7.5: {} + xe-utils@3.7.8: {} xml-name-validator@4.0.0: {} diff --git a/scripts/turbo-run/package.json b/scripts/turbo-run/package.json index 4639c873e..0a8841578 100644 --- a/scripts/turbo-run/package.json +++ b/scripts/turbo-run/package.json @@ -1,6 +1,6 @@ { "name": "@vben/turbo-run", - "version": "5.5.7", + "version": "5.5.8", "private": true, "license": "MIT", "type": "module", diff --git a/scripts/vsh/package.json b/scripts/vsh/package.json index a901e3c74..db4c55f6b 100644 --- a/scripts/vsh/package.json +++ b/scripts/vsh/package.json @@ -1,6 +1,6 @@ { "name": "@vben/vsh", - "version": "5.5.6", + "version": "5.5.8", "private": true, "license": "MIT", "type": "module", -- Gitee From e6f4cf5660f3f4ac2b9765139ef8fa6431889615 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sat, 19 Jul 2025 17:40:27 +0800 Subject: [PATCH 03/41] =?UTF-8?q?review=EF=BC=9A=E3=80=90ANTD=E3=80=91?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E7=9A=84=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web-antd/src/components/table-action/table-action.vue | 2 +- apps/web-ele/src/api/ai/chat/message/index.ts | 3 +++ apps/web-ele/src/api/ai/knowledge/document/index.ts | 3 +++ apps/web-ele/src/api/ai/knowledge/segment/index.ts | 1 + apps/web-ele/src/api/basic/productunit/index.ts | 2 ++ apps/web-ele/src/api/basic/productunitgroup/index.ts | 2 ++ 6 files changed, 12 insertions(+), 1 deletion(-) diff --git a/apps/web-antd/src/components/table-action/table-action.vue b/apps/web-antd/src/components/table-action/table-action.vue index 3c29d7d93..c8a48a73b 100644 --- a/apps/web-antd/src/components/table-action/table-action.vue +++ b/apps/web-antd/src/components/table-action/table-action.vue @@ -137,7 +137,7 @@ function handleButtonClick(action: ActionItem) { } } -// 监听props变化,强制重新计算 +/** 监听props变化,强制重新计算 */ watch( () => [props.actions, props.dropDownActions], () => { diff --git a/apps/web-ele/src/api/ai/chat/message/index.ts b/apps/web-ele/src/api/ai/chat/message/index.ts index 9de927023..131d95408 100644 --- a/apps/web-ele/src/api/ai/chat/message/index.ts +++ b/apps/web-ele/src/api/ai/chat/message/index.ts @@ -8,6 +8,7 @@ import { requestClient } from '#/api/request'; const { apiURL } = useAppConfig(import.meta.env, import.meta.env.PROD); const accessStore = useAccessStore(); + export namespace AiChatMessageApi { export interface ChatMessage { id: number; // 编号 @@ -82,6 +83,7 @@ export function deleteByConversationId(conversationId: number) { `/ai/chat/message/delete-by-conversation-id?conversationId=${conversationId}`, ); } + // 获得消息分页 export function getChatMessagePage(params: any) { return requestClient.get>( @@ -89,6 +91,7 @@ export function getChatMessagePage(params: any) { { params }, ); } + // 管理员删除消息 export function deleteChatMessageByAdmin(id: number) { return requestClient.delete(`/ai/chat/message/delete-by-admin?id=${id}`); diff --git a/apps/web-ele/src/api/ai/knowledge/document/index.ts b/apps/web-ele/src/api/ai/knowledge/document/index.ts index a26e80e76..6c754d53e 100644 --- a/apps/web-ele/src/api/ai/knowledge/document/index.ts +++ b/apps/web-ele/src/api/ai/knowledge/document/index.ts @@ -26,10 +26,12 @@ export function getKnowledgeDocumentPage(params: PageParam) { export function getKnowledgeDocument(id: number) { return requestClient.get(`/ai/knowledge/document/get?id=${id}`); } + // 新增知识库文档(单个) export function createKnowledge(data: any) { return requestClient.post('/ai/knowledge/document/create', data); } + // 新增知识库文档(多个) export function createKnowledgeDocumentList(data: any) { return requestClient.post('/ai/knowledge/document/create-list', data); @@ -44,6 +46,7 @@ export function updateKnowledgeDocument(data: any) { export function updateKnowledgeDocumentStatus(data: any) { return requestClient.put('/ai/knowledge/document/update-status', data); } + // 删除知识库文档 export function deleteKnowledgeDocument(id: number) { return requestClient.delete(`/ai/knowledge/document/delete?id=${id}`); diff --git a/apps/web-ele/src/api/ai/knowledge/segment/index.ts b/apps/web-ele/src/api/ai/knowledge/segment/index.ts index 63ea4e752..2635c772f 100644 --- a/apps/web-ele/src/api/ai/knowledge/segment/index.ts +++ b/apps/web-ele/src/api/ai/knowledge/segment/index.ts @@ -32,6 +32,7 @@ export function getKnowledgeSegment(id: number) { `/ai/knowledge/segment/get?id=${id}`, ); } + // 新增知识库分段 export function createKnowledgeSegment( data: AiKnowledgeSegmentApi.KnowledgeSegment, diff --git a/apps/web-ele/src/api/basic/productunit/index.ts b/apps/web-ele/src/api/basic/productunit/index.ts index 75641793f..e319f72f8 100644 --- a/apps/web-ele/src/api/basic/productunit/index.ts +++ b/apps/web-ele/src/api/basic/productunit/index.ts @@ -2,6 +2,8 @@ import type { PageParam, PageResult } from '@vben/request'; import { requestClient } from '#/api/request'; +// TODO @xingyu:貌似模块不对 + export namespace ProductUnitApi { /** 产品单位信息 */ export interface ProductUnit { diff --git a/apps/web-ele/src/api/basic/productunitgroup/index.ts b/apps/web-ele/src/api/basic/productunitgroup/index.ts index 92b978bf7..aa0334108 100644 --- a/apps/web-ele/src/api/basic/productunitgroup/index.ts +++ b/apps/web-ele/src/api/basic/productunitgroup/index.ts @@ -2,6 +2,8 @@ import type { PageParam, PageResult } from '@vben/request'; import { requestClient } from '#/api/request'; +// TODO @xingyu:貌似模块不对 + export namespace ProductUnitGroupApi { /** 产品单位组信息 */ export interface ProductUnitGroup { -- Gitee From 7b06bd27b38907ac0fd93df5f39399472c7b680c Mon Sep 17 00:00:00 2001 From: YunaiV Date: Mon, 21 Jul 2025 08:52:44 +0800 Subject: [PATCH 04/41] =?UTF-8?q?fix=EF=BC=9A=E3=80=90BPM=20=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E6=B5=81=E3=80=91=E5=B7=A5=E4=BD=9C=E6=B5=81=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B=E7=BB=B4=E6=8A=A4=E6=97=B6=EF=BC=8Ckey=20=E7=BC=BA?= =?UTF-8?q?=E5=B0=91=E5=8F=82=E6=95=B0=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bpm/model/form/modules/basic-info.vue | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/apps/web-antd/src/views/bpm/model/form/modules/basic-info.vue b/apps/web-antd/src/views/bpm/model/form/modules/basic-info.vue index 87f0a545a..3ef3b29a7 100644 --- a/apps/web-antd/src/views/bpm/model/form/modules/basic-info.vue +++ b/apps/web-antd/src/views/bpm/model/form/modules/basic-info.vue @@ -69,7 +69,27 @@ const selectedUsers = ref(); const rules: Record = { name: [{ required: true, message: '流程名称不能为空', trigger: 'blur' }], - key: [{ required: true, message: '流程标识不能为空', trigger: 'blur' }], + key: [ + { required: true, message: '流程标识不能为空', trigger: 'blur' }, + { + validator: (_rule: any, value: string, callback: any) => { + if (!value) { + callback(); + return; + } + if (!/^[a-z_][\-\w.$]*$/i.test(value)) { + callback( + new Error( + '只能包含字母、数字、下划线、连字符和点号,且必须以字母或下划线开头', + ), + ); + return; + } + callback(); + }, + trigger: 'blur', + }, + ], category: [{ required: true, message: '流程分类不能为空', trigger: 'blur' }], type: [{ required: true, message: '流程类型不能为空', trigger: 'blur' }], visible: [{ required: true, message: '是否可见不能为空', trigger: 'blur' }], -- Gitee From 7b7402b986803c999a22e723253e15d29786407b Mon Sep 17 00:00:00 2001 From: YunaiV Date: Mon, 21 Jul 2025 16:25:03 +0800 Subject: [PATCH 05/41] =?UTF-8?q?review=EF=BC=9A=E3=80=90BPM=20=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E6=B5=81=E3=80=91=E6=A8=A1=E5=9E=8B=E5=88=86=E7=B1=BB?= =?UTF-8?q?=E5=86=85=EF=BC=8C=E6=8E=92=E5=BA=8F=E4=B8=8D=E6=AD=A3=E7=A1=AE?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web-antd/src/views/bpm/model/form/index.vue | 10 ++++++++++ .../bpm/model/modules/category-draggable-model.vue | 1 + 2 files changed, 11 insertions(+) diff --git a/apps/web-antd/src/views/bpm/model/form/index.vue b/apps/web-antd/src/views/bpm/model/form/index.vue index 82dd908c8..0446ed44d 100644 --- a/apps/web-antd/src/views/bpm/model/form/index.vue +++ b/apps/web-antd/src/views/bpm/model/form/index.vue @@ -178,6 +178,16 @@ async function initData() { // 特殊:复制场景 if (route.params.type === 'copy') { delete formData.value.id; + if (formData.value.bpmnXml) { + formData.value.bpmnXml = formData.value.bpmnXml.replaceAll( + formData.value.name, + `${formData.value.name}副本`, + ); + formData.value.bpmnXml = formData.value.bpmnXml.replaceAll( + formData.value.key, + `${formData.value.key}_copy`, + ); + } formData.value.name += '副本'; formData.value.key += '_copy'; } diff --git a/apps/web-antd/src/views/bpm/model/modules/category-draggable-model.vue b/apps/web-antd/src/views/bpm/model/modules/category-draggable-model.vue index f1ace0aeb..ad67b16ee 100644 --- a/apps/web-antd/src/views/bpm/model/modules/category-draggable-model.vue +++ b/apps/web-antd/src/views/bpm/model/modules/category-draggable-model.vue @@ -415,6 +415,7 @@ const handleRenameSuccess = () => { >
+
Date: Mon, 21 Jul 2025 19:07:47 +0800 Subject: [PATCH 06/41] =?UTF-8?q?feat(@vben/web-antd):=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=20ERP=20API=20=E6=8E=A5=E5=8F=A3=E5=B9=B6=E7=AC=A6?= =?UTF-8?q?=E5=90=88=20Vben=20=E9=A1=B9=E7=9B=AE=E6=A0=87=E5=87=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将所有 ERP API 文件从旧的 axios 配置迁移到新的 requestClient - 使用 namespace 组织接口类型定义,提高代码可维护性 - 将对象方法改为独立的导出函数,符合现代 JavaScript 最佳实践 - 为所有 API 函数添加完整的 TypeScript 类型定义 - 统一分页查询参数和状态更新参数的接口定义 - 涵盖财务、采购、销售、库存等所有 ERP 业务模块 --- .../src/api/erp/finance/account/index.ts | 68 ++++++++++ .../src/api/erp/finance/payment/index.ts | 103 +++++++++++++++ .../src/api/erp/finance/receipt/index.ts | 103 +++++++++++++++ .../src/api/erp/product/category/index.ts | 60 +++++++++ .../src/api/erp/product/product/index.ts | 61 +++++++++ .../src/api/erp/product/unit/index.ts | 62 +++++++++ .../web-antd/src/api/erp/purchase/in/index.ts | 102 +++++++++++++++ .../src/api/erp/purchase/order/index.ts | 72 +++++++++++ .../src/api/erp/purchase/return/index.ts | 104 +++++++++++++++ .../src/api/erp/purchase/supplier/index.ts | 73 +++++++++++ .../src/api/erp/sale/customer/index.ts | 73 +++++++++++ apps/web-antd/src/api/erp/sale/order/index.ts | 70 ++++++++++ apps/web-antd/src/api/erp/sale/out/index.ts | 92 +++++++++++++ .../web-antd/src/api/erp/sale/return/index.ts | 100 ++++++++++++++ .../src/api/erp/statistics/purchase/index.ts | 31 +++++ .../src/api/erp/statistics/sale/index.ts | 31 +++++ .../web-antd/src/api/erp/stock/check/index.ts | 98 ++++++++++++++ apps/web-antd/src/api/erp/stock/in/index.ts | 92 +++++++++++++ apps/web-antd/src/api/erp/stock/move/index.ts | 94 ++++++++++++++ apps/web-antd/src/api/erp/stock/out/index.ts | 96 ++++++++++++++ .../src/api/erp/stock/record/index.ts | 47 +++++++ .../web-antd/src/api/erp/stock/stock/index.ts | 70 ++++++++++ .../src/api/erp/stock/warehouse/index.ts | 77 +++++++++++ .../views/erp/home/components/SummaryCard.vue | 29 +++++ .../erp/home/components/TimeSummaryChart.vue | 120 +++++++++++++++++ apps/web-antd/src/views/erp/home/index.vue | 122 +++++++++++++++--- 26 files changed, 2031 insertions(+), 19 deletions(-) create mode 100644 apps/web-antd/src/api/erp/finance/account/index.ts create mode 100644 apps/web-antd/src/api/erp/finance/payment/index.ts create mode 100644 apps/web-antd/src/api/erp/finance/receipt/index.ts create mode 100644 apps/web-antd/src/api/erp/product/category/index.ts create mode 100644 apps/web-antd/src/api/erp/product/product/index.ts create mode 100644 apps/web-antd/src/api/erp/product/unit/index.ts create mode 100644 apps/web-antd/src/api/erp/purchase/in/index.ts create mode 100644 apps/web-antd/src/api/erp/purchase/order/index.ts create mode 100644 apps/web-antd/src/api/erp/purchase/return/index.ts create mode 100644 apps/web-antd/src/api/erp/purchase/supplier/index.ts create mode 100644 apps/web-antd/src/api/erp/sale/customer/index.ts create mode 100644 apps/web-antd/src/api/erp/sale/order/index.ts create mode 100644 apps/web-antd/src/api/erp/sale/out/index.ts create mode 100644 apps/web-antd/src/api/erp/sale/return/index.ts create mode 100644 apps/web-antd/src/api/erp/statistics/purchase/index.ts create mode 100644 apps/web-antd/src/api/erp/statistics/sale/index.ts create mode 100644 apps/web-antd/src/api/erp/stock/check/index.ts create mode 100644 apps/web-antd/src/api/erp/stock/in/index.ts create mode 100644 apps/web-antd/src/api/erp/stock/move/index.ts create mode 100644 apps/web-antd/src/api/erp/stock/out/index.ts create mode 100644 apps/web-antd/src/api/erp/stock/record/index.ts create mode 100644 apps/web-antd/src/api/erp/stock/stock/index.ts create mode 100644 apps/web-antd/src/api/erp/stock/warehouse/index.ts create mode 100644 apps/web-antd/src/views/erp/home/components/SummaryCard.vue create mode 100644 apps/web-antd/src/views/erp/home/components/TimeSummaryChart.vue diff --git a/apps/web-antd/src/api/erp/finance/account/index.ts b/apps/web-antd/src/api/erp/finance/account/index.ts new file mode 100644 index 000000000..e180af65f --- /dev/null +++ b/apps/web-antd/src/api/erp/finance/account/index.ts @@ -0,0 +1,68 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace ErpAccountApi { + /** ERP 结算账户信息 */ + export interface Account { + id?: number; // 结算账户编号 + no: string; // 账户编码 + remark: string; // 备注 + status: number; // 开启状态 + sort: number; // 排序 + defaultStatus: boolean; // 是否默认 + name: string; // 账户名称 + } + + /** 结算账户分页查询参数 */ + export interface AccountPageParam extends PageParam { + name?: string; + no?: string; + status?: number; + } +} + +/** 查询结算账户分页 */ +export function getAccountPage(params: ErpAccountApi.AccountPageParam) { + return requestClient.get>( + '/erp/account/page', + { params }, + ); +} + +/** 查询结算账户精简列表 */ +export function getAccountSimpleList() { + return requestClient.get('/erp/account/simple-list'); +} + +/** 查询结算账户详情 */ +export function getAccount(id: number) { + return requestClient.get(`/erp/account/get?id=${id}`); +} + +/** 新增结算账户 */ +export function createAccount(data: ErpAccountApi.Account) { + return requestClient.post('/erp/account/create', data); +} + +/** 修改结算账户 */ +export function updateAccount(data: ErpAccountApi.Account) { + return requestClient.put('/erp/account/update', data); +} + +/** 修改结算账户默认状态 */ +export function updateAccountDefaultStatus(id: number, defaultStatus: boolean) { + return requestClient.put('/erp/account/update-default-status', null, { + params: { id, defaultStatus }, + }); +} + +/** 删除结算账户 */ +export function deleteAccount(id: number) { + return requestClient.delete(`/erp/account/delete?id=${id}`); +} + +/** 导出结算账户 Excel */ +export function exportAccount(params: any) { + return requestClient.download('/erp/account/export-excel', { params }); +} diff --git a/apps/web-antd/src/api/erp/finance/payment/index.ts b/apps/web-antd/src/api/erp/finance/payment/index.ts new file mode 100644 index 000000000..e9dc1847a --- /dev/null +++ b/apps/web-antd/src/api/erp/finance/payment/index.ts @@ -0,0 +1,103 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +namespace ErpFinancePaymentApi { + /** 付款单信息 */ + export interface FinancePayment { + id?: number; // 付款单编号 + no: string; // 付款单号 + supplierId: number; // 供应商编号 + paymentTime: Date; // 付款时间 + totalPrice: number; // 合计金额,单位:元 + status: number; // 状态 + remark: string; // 备注 + } + + /** 付款单分页查询参数 */ + export interface FinancePaymentPageParams extends PageParam { + no?: string; + supplierId?: number; + status?: number; + } + + /** 付款单状态更新参数 */ + export interface FinancePaymentStatusParams { + id: number; + status: number; + } +} + +/** + * 查询付款单分页 + */ +export function getFinancePaymentPage( + params: ErpFinancePaymentApi.FinancePaymentPageParams, +) { + return requestClient.get>( + '/erp/finance-payment/page', + { + params, + }, + ); +} + +/** + * 查询付款单详情 + */ +export function getFinancePayment(id: number) { + return requestClient.get( + `/erp/finance-payment/get?id=${id}`, + ); +} + +/** + * 新增付款单 + */ +export function createFinancePayment( + data: ErpFinancePaymentApi.FinancePayment, +) { + return requestClient.post('/erp/finance-payment/create', data); +} + +/** + * 修改付款单 + */ +export function updateFinancePayment( + data: ErpFinancePaymentApi.FinancePayment, +) { + return requestClient.put('/erp/finance-payment/update', data); +} + +/** + * 更新付款单的状态 + */ +export function updateFinancePaymentStatus( + params: ErpFinancePaymentApi.FinancePaymentStatusParams, +) { + return requestClient.put('/erp/finance-payment/update-status', null, { + params, + }); +} + +/** + * 删除付款单 + */ +export function deleteFinancePayment(ids: number[]) { + return requestClient.delete('/erp/finance-payment/delete', { + params: { + ids: ids.join(','), + }, + }); +} + +/** + * 导出付款单 Excel + */ +export function exportFinancePayment( + params: ErpFinancePaymentApi.FinancePaymentPageParams, +) { + return requestClient.download('/erp/finance-payment/export-excel', { + params, + }); +} diff --git a/apps/web-antd/src/api/erp/finance/receipt/index.ts b/apps/web-antd/src/api/erp/finance/receipt/index.ts new file mode 100644 index 000000000..37b70e764 --- /dev/null +++ b/apps/web-antd/src/api/erp/finance/receipt/index.ts @@ -0,0 +1,103 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +namespace ErpFinanceReceiptApi { + /** 收款单信息 */ + export interface FinanceReceipt { + id?: number; // 收款单编号 + no: string; // 收款单号 + customerId: number; // 客户编号 + receiptTime: Date; // 收款时间 + totalPrice: number; // 合计金额,单位:元 + status: number; // 状态 + remark: string; // 备注 + } + + /** 收款单分页查询参数 */ + export interface FinanceReceiptPageParams extends PageParam { + no?: string; + customerId?: number; + status?: number; + } + + /** 收款单状态更新参数 */ + export interface FinanceReceiptStatusParams { + id: number; + status: number; + } +} + +/** + * 查询收款单分页 + */ +export function getFinanceReceiptPage( + params: ErpFinanceReceiptApi.FinanceReceiptPageParams, +) { + return requestClient.get>( + '/erp/finance-receipt/page', + { + params, + }, + ); +} + +/** + * 查询收款单详情 + */ +export function getFinanceReceipt(id: number) { + return requestClient.get( + `/erp/finance-receipt/get?id=${id}`, + ); +} + +/** + * 新增收款单 + */ +export function createFinanceReceipt( + data: ErpFinanceReceiptApi.FinanceReceipt, +) { + return requestClient.post('/erp/finance-receipt/create', data); +} + +/** + * 修改收款单 + */ +export function updateFinanceReceipt( + data: ErpFinanceReceiptApi.FinanceReceipt, +) { + return requestClient.put('/erp/finance-receipt/update', data); +} + +/** + * 更新收款单的状态 + */ +export function updateFinanceReceiptStatus( + params: ErpFinanceReceiptApi.FinanceReceiptStatusParams, +) { + return requestClient.put('/erp/finance-receipt/update-status', null, { + params, + }); +} + +/** + * 删除收款单 + */ +export function deleteFinanceReceipt(ids: number[]) { + return requestClient.delete('/erp/finance-receipt/delete', { + params: { + ids: ids.join(','), + }, + }); +} + +/** + * 导出收款单 Excel + */ +export function exportFinanceReceipt( + params: ErpFinanceReceiptApi.FinanceReceiptPageParams, +) { + return requestClient.download('/erp/finance-receipt/export-excel', { + params, + }); +} diff --git a/apps/web-antd/src/api/erp/product/category/index.ts b/apps/web-antd/src/api/erp/product/category/index.ts new file mode 100644 index 000000000..b16a91e3a --- /dev/null +++ b/apps/web-antd/src/api/erp/product/category/index.ts @@ -0,0 +1,60 @@ +import { requestClient } from '#/api/request'; + +export namespace ErpProductCategoryApi { + /** ERP 产品分类信息 */ + export interface ProductCategory { + id?: number; // 分类编号 + parentId: number; // 父分类编号 + name: string; // 分类名称 + code: string; // 分类编码 + sort: number; // 分类排序 + status: number; // 开启状态 + } +} + +/** 查询产品分类列表 */ +export function getProductCategoryList() { + return requestClient.get( + '/erp/product-category/list', + ); +} + +/** 查询产品分类精简列表 */ +export function getProductCategorySimpleList() { + return requestClient.get( + '/erp/product-category/simple-list', + ); +} + +/** 查询产品分类详情 */ +export function getProductCategory(id: number) { + return requestClient.get( + `/erp/product-category/get?id=${id}`, + ); +} + +/** 新增产品分类 */ +export function createProductCategory( + data: ErpProductCategoryApi.ProductCategory, +) { + return requestClient.post('/erp/product-category/create', data); +} + +/** 修改产品分类 */ +export function updateProductCategory( + data: ErpProductCategoryApi.ProductCategory, +) { + return requestClient.put('/erp/product-category/update', data); +} + +/** 删除产品分类 */ +export function deleteProductCategory(id: number) { + return requestClient.delete(`/erp/product-category/delete?id=${id}`); +} + +/** 导出产品分类 Excel */ +export function exportProductCategory(params: any) { + return requestClient.download('/erp/product-category/export-excel', { + params, + }); +} diff --git a/apps/web-antd/src/api/erp/product/product/index.ts b/apps/web-antd/src/api/erp/product/product/index.ts new file mode 100644 index 000000000..157827fff --- /dev/null +++ b/apps/web-antd/src/api/erp/product/product/index.ts @@ -0,0 +1,61 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace ErpProductApi { + /** ERP 产品信息 */ + export interface Product { + id?: number; // 产品编号 + name: string; // 产品名称 + barCode: string; // 产品条码 + categoryId: number; // 产品类型编号 + unitId: number; // 单位编号 + unitName?: string; // 单位名字 + status: number; // 产品状态 + standard: string; // 产品规格 + remark: string; // 产品备注 + expiryDay: number; // 保质期天数 + weight: number; // 重量(kg) + purchasePrice: number; // 采购价格,单位:元 + salePrice: number; // 销售价格,单位:元 + minPrice: number; // 最低价格,单位:元 + } +} + +/** 查询产品分页 */ +export function getProductPage(params: PageParam) { + return requestClient.get>( + '/erp/product/page', + { params }, + ); +} + +/** 查询产品精简列表 */ +export function getProductSimpleList() { + return requestClient.get('/erp/product/simple-list'); +} + +/** 查询产品详情 */ +export function getProduct(id: number) { + return requestClient.get(`/erp/product/get?id=${id}`); +} + +/** 新增产品 */ +export function createProduct(data: ErpProductApi.Product) { + return requestClient.post('/erp/product/create', data); +} + +/** 修改产品 */ +export function updateProduct(data: ErpProductApi.Product) { + return requestClient.put('/erp/product/update', data); +} + +/** 删除产品 */ +export function deleteProduct(id: number) { + return requestClient.delete(`/erp/product/delete?id=${id}`); +} + +/** 导出产品 Excel */ +export function exportProduct(params: any) { + return requestClient.download('/erp/product/export-excel', { params }); +} diff --git a/apps/web-antd/src/api/erp/product/unit/index.ts b/apps/web-antd/src/api/erp/product/unit/index.ts new file mode 100644 index 000000000..317c09c85 --- /dev/null +++ b/apps/web-antd/src/api/erp/product/unit/index.ts @@ -0,0 +1,62 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace ErpProductUnitApi { + /** ERP 产品单位信息 */ + export interface ProductUnit { + id?: number; // 单位编号 + name: string; // 单位名字 + status: number; // 单位状态 + } + + /** 产品单位分页查询参数 */ + export interface ProductUnitPageParam extends PageParam { + name?: string; + status?: number; + } +} + +/** 查询产品单位分页 */ +export function getProductUnitPage( + params: ErpProductUnitApi.ProductUnitPageParam, +) { + return requestClient.get>( + '/erp/product-unit/page', + { params }, + ); +} + +/** 查询产品单位精简列表 */ +export function getProductUnitSimpleList() { + return requestClient.get( + '/erp/product-unit/simple-list', + ); +} + +/** 查询产品单位详情 */ +export function getProductUnit(id: number) { + return requestClient.get( + `/erp/product-unit/get?id=${id}`, + ); +} + +/** 新增产品单位 */ +export function createProductUnit(data: ErpProductUnitApi.ProductUnit) { + return requestClient.post('/erp/product-unit/create', data); +} + +/** 修改产品单位 */ +export function updateProductUnit(data: ErpProductUnitApi.ProductUnit) { + return requestClient.put('/erp/product-unit/update', data); +} + +/** 删除产品单位 */ +export function deleteProductUnit(id: number) { + return requestClient.delete(`/erp/product-unit/delete?id=${id}`); +} + +/** 导出产品单位 Excel */ +export function exportProductUnit(params: any) { + return requestClient.download('/erp/product-unit/export-excel', { params }); +} diff --git a/apps/web-antd/src/api/erp/purchase/in/index.ts b/apps/web-antd/src/api/erp/purchase/in/index.ts new file mode 100644 index 000000000..fde2c0fbd --- /dev/null +++ b/apps/web-antd/src/api/erp/purchase/in/index.ts @@ -0,0 +1,102 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +namespace ErpPurchaseInApi { + /** 采购入库信息 */ + export interface PurchaseIn { + id?: number; // 入库工单编号 + no: string; // 采购入库号 + supplierId: number; // 供应商编号 + inTime: Date; // 入库时间 + totalCount: number; // 合计数量 + totalPrice: number; // 合计金额,单位:元 + status: number; // 状态 + remark: string; // 备注 + outCount: number; // 采购出库数量 + returnCount: number; // 采购退货数量 + } + + /** 采购入库分页查询参数 */ + export interface PurchaseInPageParams extends PageParam { + no?: string; + supplierId?: number; + status?: number; + } + + /** 采购入库状态更新参数 */ + export interface PurchaseInStatusParams { + id: number; + status: number; + } +} + +/** + * 查询采购入库分页 + */ +export function getPurchaseInPage( + params: ErpPurchaseInApi.PurchaseInPageParams, +) { + return requestClient.get>( + '/erp/purchase-in/page', + { + params, + }, + ); +} + +/** + * 查询采购入库详情 + */ +export function getPurchaseIn(id: number) { + return requestClient.get( + `/erp/purchase-in/get?id=${id}`, + ); +} + +/** + * 新增采购入库 + */ +export function createPurchaseIn(data: ErpPurchaseInApi.PurchaseIn) { + return requestClient.post('/erp/purchase-in/create', data); +} + +/** + * 修改采购入库 + */ +export function updatePurchaseIn(data: ErpPurchaseInApi.PurchaseIn) { + return requestClient.put('/erp/purchase-in/update', data); +} + +/** + * 更新采购入库的状态 + */ +export function updatePurchaseInStatus( + params: ErpPurchaseInApi.PurchaseInStatusParams, +) { + return requestClient.put('/erp/purchase-in/update-status', null, { + params, + }); +} + +/** + * 删除采购入库 + */ +export function deletePurchaseIn(ids: number[]) { + return requestClient.delete('/erp/purchase-in/delete', { + params: { + ids: ids.join(','), + }, + }); +} + +/** + * 导出采购入库 Excel + */ +export function exportPurchaseIn( + params: ErpPurchaseInApi.PurchaseInPageParams, +) { + return requestClient.download('/erp/purchase-in/export-excel', { + params, + }); +} diff --git a/apps/web-antd/src/api/erp/purchase/order/index.ts b/apps/web-antd/src/api/erp/purchase/order/index.ts new file mode 100644 index 000000000..69c9a551f --- /dev/null +++ b/apps/web-antd/src/api/erp/purchase/order/index.ts @@ -0,0 +1,72 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace ErpPurchaseOrderApi { + /** ERP 采购订单信息 */ + export interface PurchaseOrder { + id?: number; // 订单工单编号 + no: string; // 采购订单号 + supplierId: number; // 供应商编号 + orderTime: Date; // 订单时间 + totalCount: number; // 合计数量 + totalPrice: number; // 合计金额,单位:元 + status: number; // 状态 + remark: string; // 备注 + inCount: number; // 采购入库数量 + returnCount: number; // 采购退货数量 + } + + /** 采购订单分页查询参数 */ + export interface PurchaseOrderPageParam extends PageParam { + no?: string; + supplierId?: number; + status?: number; + } +} + +/** 查询采购订单分页 */ +export function getPurchaseOrderPage( + params: ErpPurchaseOrderApi.PurchaseOrderPageParam, +) { + return requestClient.get>( + '/erp/purchase-order/page', + { params }, + ); +} + +/** 查询采购订单详情 */ +export function getPurchaseOrder(id: number) { + return requestClient.get( + `/erp/purchase-order/get?id=${id}`, + ); +} + +/** 新增采购订单 */ +export function createPurchaseOrder(data: ErpPurchaseOrderApi.PurchaseOrder) { + return requestClient.post('/erp/purchase-order/create', data); +} + +/** 修改采购订单 */ +export function updatePurchaseOrder(data: ErpPurchaseOrderApi.PurchaseOrder) { + return requestClient.put('/erp/purchase-order/update', data); +} + +/** 更新采购订单的状态 */ +export function updatePurchaseOrderStatus(id: number, status: number) { + return requestClient.put('/erp/purchase-order/update-status', null, { + params: { id, status }, + }); +} + +/** 删除采购订单 */ +export function deletePurchaseOrder(ids: number[]) { + return requestClient.delete('/erp/purchase-order/delete', { + params: { ids: ids.join(',') }, + }); +} + +/** 导出采购订单 Excel */ +export function exportPurchaseOrder(params: any) { + return requestClient.download('/erp/purchase-order/export-excel', { params }); +} diff --git a/apps/web-antd/src/api/erp/purchase/return/index.ts b/apps/web-antd/src/api/erp/purchase/return/index.ts new file mode 100644 index 000000000..461a76f77 --- /dev/null +++ b/apps/web-antd/src/api/erp/purchase/return/index.ts @@ -0,0 +1,104 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +namespace ErpPurchaseReturnApi { + /** 采购退货信息 */ + export interface PurchaseReturn { + id?: number; // 采购退货编号 + no: string; // 采购退货号 + supplierId: number; // 供应商编号 + returnTime: Date; // 退货时间 + totalCount: number; // 合计数量 + totalPrice: number; // 合计金额,单位:元 + status: number; // 状态 + remark: string; // 备注 + } + + /** 采购退货分页查询参数 */ + export interface PurchaseReturnPageParams extends PageParam { + no?: string; + supplierId?: number; + status?: number; + } + + /** 采购退货状态更新参数 */ + export interface PurchaseReturnStatusParams { + id: number; + status: number; + } +} + +/** + * 查询采购退货分页 + */ +export function getPurchaseReturnPage( + params: ErpPurchaseReturnApi.PurchaseReturnPageParams, +) { + return requestClient.get>( + '/erp/purchase-return/page', + { + params, + }, + ); +} + +/** + * 查询采购退货详情 + */ +export function getPurchaseReturn(id: number) { + return requestClient.get( + `/erp/purchase-return/get?id=${id}`, + ); +} + +/** + * 新增采购退货 + */ +export function createPurchaseReturn( + data: ErpPurchaseReturnApi.PurchaseReturn, +) { + return requestClient.post('/erp/purchase-return/create', data); +} + +/** + * 修改采购退货 + */ +export function updatePurchaseReturn( + data: ErpPurchaseReturnApi.PurchaseReturn, +) { + return requestClient.put('/erp/purchase-return/update', data); +} + +/** + * 更新采购退货的状态 + */ +export function updatePurchaseReturnStatus( + params: ErpPurchaseReturnApi.PurchaseReturnStatusParams, +) { + return requestClient.put('/erp/purchase-return/update-status', null, { + params, + }); +} + +/** + * 删除采购退货 + */ +export function deletePurchaseReturn(ids: number[]) { + return requestClient.delete('/erp/purchase-return/delete', { + params: { + ids: ids.join(','), + }, + }); +} + +/** + * 导出采购退货 Excel + */ +export function exportPurchaseReturn( + params: ErpPurchaseReturnApi.PurchaseReturnPageParams, +) { + return requestClient.download('/erp/purchase-return/export-excel', { + params, + }); +} diff --git a/apps/web-antd/src/api/erp/purchase/supplier/index.ts b/apps/web-antd/src/api/erp/purchase/supplier/index.ts new file mode 100644 index 000000000..fb74b9f37 --- /dev/null +++ b/apps/web-antd/src/api/erp/purchase/supplier/index.ts @@ -0,0 +1,73 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace ErpSupplierApi { + /** ERP 供应商信息 */ + export interface Supplier { + id?: number; // 供应商编号 + name: string; // 供应商名称 + contact: string; // 联系人 + mobile: string; // 手机号码 + telephone: string; // 联系电话 + email: string; // 电子邮箱 + fax: string; // 传真 + remark: string; // 备注 + status: number; // 开启状态 + sort: number; // 排序 + taxNo: string; // 纳税人识别号 + taxPercent: number; // 税率 + bankName: string; // 开户行 + bankAccount: string; // 开户账号 + bankAddress: string; // 开户地址 + } + + /** 供应商分页查询参数 */ + export interface SupplierPageParam extends PageParam { + name?: string; + mobile?: string; + status?: number; + } +} + +/** 查询供应商分页 */ +export function getSupplierPage(params: ErpSupplierApi.SupplierPageParam) { + return requestClient.get>( + '/erp/supplier/page', + { params }, + ); +} + +/** 获得供应商精简列表 */ +export function getSupplierSimpleList() { + return requestClient.get( + '/erp/supplier/simple-list', + ); +} + +/** 查询供应商详情 */ +export function getSupplier(id: number) { + return requestClient.get( + `/erp/supplier/get?id=${id}`, + ); +} + +/** 新增供应商 */ +export function createSupplier(data: ErpSupplierApi.Supplier) { + return requestClient.post('/erp/supplier/create', data); +} + +/** 修改供应商 */ +export function updateSupplier(data: ErpSupplierApi.Supplier) { + return requestClient.put('/erp/supplier/update', data); +} + +/** 删除供应商 */ +export function deleteSupplier(id: number) { + return requestClient.delete(`/erp/supplier/delete?id=${id}`); +} + +/** 导出供应商 Excel */ +export function exportSupplier(params: any) { + return requestClient.download('/erp/supplier/export-excel', { params }); +} diff --git a/apps/web-antd/src/api/erp/sale/customer/index.ts b/apps/web-antd/src/api/erp/sale/customer/index.ts new file mode 100644 index 000000000..6cebd018c --- /dev/null +++ b/apps/web-antd/src/api/erp/sale/customer/index.ts @@ -0,0 +1,73 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace ErpCustomerApi { + /** ERP 客户信息 */ + export interface Customer { + id?: number; // 客户编号 + name: string; // 客户名称 + contact: string; // 联系人 + mobile: string; // 手机号码 + telephone: string; // 联系电话 + email: string; // 电子邮箱 + fax: string; // 传真 + remark: string; // 备注 + status: number; // 开启状态 + sort: number; // 排序 + taxNo: string; // 纳税人识别号 + taxPercent: number; // 税率 + bankName: string; // 开户行 + bankAccount: string; // 开户账号 + bankAddress: string; // 开户地址 + } + + /** 客户分页查询参数 */ + export interface CustomerPageParam extends PageParam { + name?: string; + mobile?: string; + status?: number; + } +} + +/** 查询客户分页 */ +export function getCustomerPage(params: ErpCustomerApi.CustomerPageParam) { + return requestClient.get>( + '/erp/customer/page', + { params }, + ); +} + +/** 查询客户精简列表 */ +export function getCustomerSimpleList() { + return requestClient.get( + '/erp/customer/simple-list', + ); +} + +/** 查询客户详情 */ +export function getCustomer(id: number) { + return requestClient.get( + `/erp/customer/get?id=${id}`, + ); +} + +/** 新增客户 */ +export function createCustomer(data: ErpCustomerApi.Customer) { + return requestClient.post('/erp/customer/create', data); +} + +/** 修改客户 */ +export function updateCustomer(data: ErpCustomerApi.Customer) { + return requestClient.put('/erp/customer/update', data); +} + +/** 删除客户 */ +export function deleteCustomer(id: number) { + return requestClient.delete(`/erp/customer/delete?id=${id}`); +} + +/** 导出客户 Excel */ +export function exportCustomer(params: any) { + return requestClient.download('/erp/customer/export-excel', { params }); +} diff --git a/apps/web-antd/src/api/erp/sale/order/index.ts b/apps/web-antd/src/api/erp/sale/order/index.ts new file mode 100644 index 000000000..211a28e26 --- /dev/null +++ b/apps/web-antd/src/api/erp/sale/order/index.ts @@ -0,0 +1,70 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace ErpSaleOrderApi { + /** ERP 销售订单信息 */ + export interface SaleOrder { + id?: number; // 订单工单编号 + no: string; // 销售订单号 + customerId: number; // 客户编号 + orderTime: Date; // 订单时间 + totalCount: number; // 合计数量 + totalPrice: number; // 合计金额,单位:元 + status: number; // 状态 + remark: string; // 备注 + outCount: number; // 销售出库数量 + returnCount: number; // 销售退货数量 + } + + /** 销售订单分页查询参数 */ + export interface SaleOrderPageParam extends PageParam { + no?: string; + customerId?: number; + status?: number; + } +} + +/** 查询销售订单分页 */ +export function getSaleOrderPage(params: ErpSaleOrderApi.SaleOrderPageParam) { + return requestClient.get>( + '/erp/sale-order/page', + { params }, + ); +} + +/** 查询销售订单详情 */ +export function getSaleOrder(id: number) { + return requestClient.get( + `/erp/sale-order/get?id=${id}`, + ); +} + +/** 新增销售订单 */ +export function createSaleOrder(data: ErpSaleOrderApi.SaleOrder) { + return requestClient.post('/erp/sale-order/create', data); +} + +/** 修改销售订单 */ +export function updateSaleOrder(data: ErpSaleOrderApi.SaleOrder) { + return requestClient.put('/erp/sale-order/update', data); +} + +/** 更新销售订单的状态 */ +export function updateSaleOrderStatus(id: number, status: number) { + return requestClient.put('/erp/sale-order/update-status', null, { + params: { id, status }, + }); +} + +/** 删除销售订单 */ +export function deleteSaleOrder(ids: number[]) { + return requestClient.delete('/erp/sale-order/delete', { + params: { ids: ids.join(',') }, + }); +} + +/** 导出销售订单 Excel */ +export function exportSaleOrder(params: any) { + return requestClient.download('/erp/sale-order/export-excel', { params }); +} diff --git a/apps/web-antd/src/api/erp/sale/out/index.ts b/apps/web-antd/src/api/erp/sale/out/index.ts new file mode 100644 index 000000000..62045216a --- /dev/null +++ b/apps/web-antd/src/api/erp/sale/out/index.ts @@ -0,0 +1,92 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +namespace ErpSaleOutApi { + /** 销售出库信息 */ + export interface SaleOut { + id?: number; // 销售出库编号 + no: string; // 销售出库号 + customerId: number; // 客户编号 + outTime: Date; // 出库时间 + totalCount: number; // 合计数量 + totalPrice: number; // 合计金额,单位:元 + status: number; // 状态 + remark: string; // 备注 + } + + /** 销售出库分页查询参数 */ + export interface SaleOutPageParams extends PageParam { + no?: string; + customerId?: number; + status?: number; + } + + /** 销售出库状态更新参数 */ + export interface SaleOutStatusParams { + id: number; + status: number; + } +} + +/** + * 查询销售出库分页 + */ +export function getSaleOutPage(params: ErpSaleOutApi.SaleOutPageParams) { + return requestClient.get>( + '/erp/sale-out/page', + { + params, + }, + ); +} + +/** + * 查询销售出库详情 + */ +export function getSaleOut(id: number) { + return requestClient.get(`/erp/sale-out/get?id=${id}`); +} + +/** + * 新增销售出库 + */ +export function createSaleOut(data: ErpSaleOutApi.SaleOut) { + return requestClient.post('/erp/sale-out/create', data); +} + +/** + * 修改销售出库 + */ +export function updateSaleOut(data: ErpSaleOutApi.SaleOut) { + return requestClient.put('/erp/sale-out/update', data); +} + +/** + * 更新销售出库的状态 + */ +export function updateSaleOutStatus(params: ErpSaleOutApi.SaleOutStatusParams) { + return requestClient.put('/erp/sale-out/update-status', null, { + params, + }); +} + +/** + * 删除销售出库 + */ +export function deleteSaleOut(ids: number[]) { + return requestClient.delete('/erp/sale-out/delete', { + params: { + ids: ids.join(','), + }, + }); +} + +/** + * 导出销售出库 Excel + */ +export function exportSaleOut(params: ErpSaleOutApi.SaleOutPageParams) { + return requestClient.download('/erp/sale-out/export-excel', { + params, + }); +} diff --git a/apps/web-antd/src/api/erp/sale/return/index.ts b/apps/web-antd/src/api/erp/sale/return/index.ts new file mode 100644 index 000000000..0ebcfc752 --- /dev/null +++ b/apps/web-antd/src/api/erp/sale/return/index.ts @@ -0,0 +1,100 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +namespace ErpSaleReturnApi { + /** 销售退货信息 */ + export interface SaleReturn { + id?: number; // 销售退货编号 + no: string; // 销售退货号 + customerId: number; // 客户编号 + returnTime: Date; // 退货时间 + totalCount: number; // 合计数量 + totalPrice: number; // 合计金额,单位:元 + status: number; // 状态 + remark: string; // 备注 + } + + /** 销售退货分页查询参数 */ + export interface SaleReturnPageParams extends PageParam { + no?: string; + customerId?: number; + status?: number; + } + + /** 销售退货状态更新参数 */ + export interface SaleReturnStatusParams { + id: number; + status: number; + } +} + +/** + * 查询销售退货分页 + */ +export function getSaleReturnPage( + params: ErpSaleReturnApi.SaleReturnPageParams, +) { + return requestClient.get>( + '/erp/sale-return/page', + { + params, + }, + ); +} + +/** + * 查询销售退货详情 + */ +export function getSaleReturn(id: number) { + return requestClient.get( + `/erp/sale-return/get?id=${id}`, + ); +} + +/** + * 新增销售退货 + */ +export function createSaleReturn(data: ErpSaleReturnApi.SaleReturn) { + return requestClient.post('/erp/sale-return/create', data); +} + +/** + * 修改销售退货 + */ +export function updateSaleReturn(data: ErpSaleReturnApi.SaleReturn) { + return requestClient.put('/erp/sale-return/update', data); +} + +/** + * 更新销售退货的状态 + */ +export function updateSaleReturnStatus( + params: ErpSaleReturnApi.SaleReturnStatusParams, +) { + return requestClient.put('/erp/sale-return/update-status', null, { + params, + }); +} + +/** + * 删除销售退货 + */ +export function deleteSaleReturn(ids: number[]) { + return requestClient.delete('/erp/sale-return/delete', { + params: { + ids: ids.join(','), + }, + }); +} + +/** + * 导出销售退货 Excel + */ +export function exportSaleReturn( + params: ErpSaleReturnApi.SaleReturnPageParams, +) { + return requestClient.download('/erp/sale-return/export-excel', { + params, + }); +} diff --git a/apps/web-antd/src/api/erp/statistics/purchase/index.ts b/apps/web-antd/src/api/erp/statistics/purchase/index.ts new file mode 100644 index 000000000..170b9c117 --- /dev/null +++ b/apps/web-antd/src/api/erp/statistics/purchase/index.ts @@ -0,0 +1,31 @@ +import { requestClient } from '#/api/request'; + +export namespace ErpPurchaseStatisticsApi { + /** ERP 采购全局统计 */ + export interface PurchaseSummary { + todayPrice: number; // 今日采购金额 + yesterdayPrice: number; // 昨日采购金额 + monthPrice: number; // 本月采购金额 + yearPrice: number; // 今年采购金额 + } + + /** ERP 采购时间段统计 */ + export interface PurchaseTimeSummary { + time: string; // 时间 + price: number; // 采购金额 + } +} + +/** 获得采购统计 */ +export function getPurchaseSummary() { + return requestClient.get( + '/erp/purchase-statistics/summary', + ); +} + +/** 获得采购时间段统计 */ +export function getPurchaseTimeSummary() { + return requestClient.get( + '/erp/purchase-statistics/time-summary', + ); +} diff --git a/apps/web-antd/src/api/erp/statistics/sale/index.ts b/apps/web-antd/src/api/erp/statistics/sale/index.ts new file mode 100644 index 000000000..c4c7986a8 --- /dev/null +++ b/apps/web-antd/src/api/erp/statistics/sale/index.ts @@ -0,0 +1,31 @@ +import { requestClient } from '#/api/request'; + +export namespace ErpSaleStatisticsApi { + /** ERP 销售全局统计 */ + export interface SaleSummary { + todayPrice: number; // 今日销售金额 + yesterdayPrice: number; // 昨日销售金额 + monthPrice: number; // 本月销售金额 + yearPrice: number; // 今年销售金额 + } + + /** ERP 销售时间段统计 */ + export interface SaleTimeSummary { + time: string; // 时间 + price: number; // 销售金额 + } +} + +/** 获得销售统计 */ +export function getSaleSummary() { + return requestClient.get( + '/erp/sale-statistics/summary', + ); +} + +/** 获得销售时间段统计 */ +export function getSaleTimeSummary() { + return requestClient.get( + '/erp/sale-statistics/time-summary', + ); +} diff --git a/apps/web-antd/src/api/erp/stock/check/index.ts b/apps/web-antd/src/api/erp/stock/check/index.ts new file mode 100644 index 000000000..090d87867 --- /dev/null +++ b/apps/web-antd/src/api/erp/stock/check/index.ts @@ -0,0 +1,98 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +namespace ErpStockCheckApi { + /** 库存盘点单信息 */ + export interface StockCheck { + id?: number; // 盘点编号 + no: string; // 盘点单号 + checkTime: Date; // 盘点时间 + totalCount: number; // 合计数量 + totalPrice: number; // 合计金额,单位:元 + status: number; // 状态 + remark: string; // 备注 + } + + /** 库存盘点单分页查询参数 */ + export interface StockCheckPageParams extends PageParam { + no?: string; + status?: number; + } + + /** 库存盘点单状态更新参数 */ + export interface StockCheckStatusParams { + id: number; + status: number; + } +} + +/** + * 查询库存盘点单分页 + */ +export function getStockCheckPage( + params: ErpStockCheckApi.StockCheckPageParams, +) { + return requestClient.get>( + '/erp/stock-check/page', + { + params, + }, + ); +} + +/** + * 查询库存盘点单详情 + */ +export function getStockCheck(id: number) { + return requestClient.get( + `/erp/stock-check/get?id=${id}`, + ); +} + +/** + * 新增库存盘点单 + */ +export function createStockCheck(data: ErpStockCheckApi.StockCheck) { + return requestClient.post('/erp/stock-check/create', data); +} + +/** + * 修改库存盘点单 + */ +export function updateStockCheck(data: ErpStockCheckApi.StockCheck) { + return requestClient.put('/erp/stock-check/update', data); +} + +/** + * 更新库存盘点单的状态 + */ +export function updateStockCheckStatus( + params: ErpStockCheckApi.StockCheckStatusParams, +) { + return requestClient.put('/erp/stock-check/update-status', null, { + params, + }); +} + +/** + * 删除库存盘点单 + */ +export function deleteStockCheck(ids: number[]) { + return requestClient.delete('/erp/stock-check/delete', { + params: { + ids: ids.join(','), + }, + }); +} + +/** + * 导出库存盘点单 Excel + */ +export function exportStockCheck( + params: ErpStockCheckApi.StockCheckPageParams, +) { + return requestClient.download('/erp/stock-check/export-excel', { + params, + }); +} diff --git a/apps/web-antd/src/api/erp/stock/in/index.ts b/apps/web-antd/src/api/erp/stock/in/index.ts new file mode 100644 index 000000000..119398bc3 --- /dev/null +++ b/apps/web-antd/src/api/erp/stock/in/index.ts @@ -0,0 +1,92 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +namespace ErpStockInApi { + /** 其它入库单信息 */ + export interface StockIn { + id?: number; // 入库编号 + no: string; // 入库单号 + supplierId: number; // 供应商编号 + inTime: Date; // 入库时间 + totalCount: number; // 合计数量 + totalPrice: number; // 合计金额,单位:元 + status: number; // 状态 + remark: string; // 备注 + } + + /** 其它入库单分页查询参数 */ + export interface StockInPageParams extends PageParam { + no?: string; + supplierId?: number; + status?: number; + } + + /** 其它入库单状态更新参数 */ + export interface StockInStatusParams { + id: number; + status: number; + } +} + +/** + * 查询其它入库单分页 + */ +export function getStockInPage(params: ErpStockInApi.StockInPageParams) { + return requestClient.get>( + '/erp/stock-in/page', + { + params, + }, + ); +} + +/** + * 查询其它入库单详情 + */ +export function getStockIn(id: number) { + return requestClient.get(`/erp/stock-in/get?id=${id}`); +} + +/** + * 新增其它入库单 + */ +export function createStockIn(data: ErpStockInApi.StockIn) { + return requestClient.post('/erp/stock-in/create', data); +} + +/** + * 修改其它入库单 + */ +export function updateStockIn(data: ErpStockInApi.StockIn) { + return requestClient.put('/erp/stock-in/update', data); +} + +/** + * 更新其它入库单的状态 + */ +export function updateStockInStatus(params: ErpStockInApi.StockInStatusParams) { + return requestClient.put('/erp/stock-in/update-status', null, { + params, + }); +} + +/** + * 删除其它入库单 + */ +export function deleteStockIn(ids: number[]) { + return requestClient.delete('/erp/stock-in/delete', { + params: { + ids: ids.join(','), + }, + }); +} + +/** + * 导出其它入库单 Excel + */ +export function exportStockIn(params: ErpStockInApi.StockInPageParams) { + return requestClient.download('/erp/stock-in/export-excel', { + params, + }); +} diff --git a/apps/web-antd/src/api/erp/stock/move/index.ts b/apps/web-antd/src/api/erp/stock/move/index.ts new file mode 100644 index 000000000..765d27eba --- /dev/null +++ b/apps/web-antd/src/api/erp/stock/move/index.ts @@ -0,0 +1,94 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +namespace ErpStockMoveApi { + /** 库存调拨单信息 */ + export interface StockMove { + id?: number; // 调拨编号 + no: string; // 调拨单号 + outTime: Date; // 调拨时间 + totalCount: number; // 合计数量 + totalPrice: number; // 合计金额,单位:元 + status: number; // 状态 + remark: string; // 备注 + } + + /** 库存调拨单分页查询参数 */ + export interface StockMovePageParams extends PageParam { + no?: string; + status?: number; + } + + /** 库存调拨单状态更新参数 */ + export interface StockMoveStatusParams { + id: number; + status: number; + } +} + +/** + * 查询库存调拨单分页 + */ +export function getStockMovePage(params: ErpStockMoveApi.StockMovePageParams) { + return requestClient.get>( + '/erp/stock-move/page', + { + params, + }, + ); +} + +/** + * 查询库存调拨单详情 + */ +export function getStockMove(id: number) { + return requestClient.get( + `/erp/stock-move/get?id=${id}`, + ); +} + +/** + * 新增库存调拨单 + */ +export function createStockMove(data: ErpStockMoveApi.StockMove) { + return requestClient.post('/erp/stock-move/create', data); +} + +/** + * 修改库存调拨单 + */ +export function updateStockMove(data: ErpStockMoveApi.StockMove) { + return requestClient.put('/erp/stock-move/update', data); +} + +/** + * 更新库存调拨单的状态 + */ +export function updateStockMoveStatus( + params: ErpStockMoveApi.StockMoveStatusParams, +) { + return requestClient.put('/erp/stock-move/update-status', null, { + params, + }); +} + +/** + * 删除库存调拨单 + */ +export function deleteStockMove(ids: number[]) { + return requestClient.delete('/erp/stock-move/delete', { + params: { + ids: ids.join(','), + }, + }); +} + +/** + * 导出库存调拨单 Excel + */ +export function exportStockMove(params: ErpStockMoveApi.StockMovePageParams) { + return requestClient.download('/erp/stock-move/export-excel', { + params, + }); +} diff --git a/apps/web-antd/src/api/erp/stock/out/index.ts b/apps/web-antd/src/api/erp/stock/out/index.ts new file mode 100644 index 000000000..2224e2ddb --- /dev/null +++ b/apps/web-antd/src/api/erp/stock/out/index.ts @@ -0,0 +1,96 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +namespace ErpStockOutApi { + /** 其它出库单信息 */ + export interface StockOut { + id?: number; // 出库编号 + no: string; // 出库单号 + customerId: number; // 客户编号 + outTime: Date; // 出库时间 + totalCount: number; // 合计数量 + totalPrice: number; // 合计金额,单位:元 + status: number; // 状态 + remark: string; // 备注 + } + + /** 其它出库单分页查询参数 */ + export interface StockOutPageParams extends PageParam { + no?: string; + customerId?: number; + status?: number; + } + + /** 其它出库单状态更新参数 */ + export interface StockOutStatusParams { + id: number; + status: number; + } +} + +/** + * 查询其它出库单分页 + */ +export function getStockOutPage(params: ErpStockOutApi.StockOutPageParams) { + return requestClient.get>( + '/erp/stock-out/page', + { + params, + }, + ); +} + +/** + * 查询其它出库单详情 + */ +export function getStockOut(id: number) { + return requestClient.get( + `/erp/stock-out/get?id=${id}`, + ); +} + +/** + * 新增其它出库单 + */ +export function createStockOut(data: ErpStockOutApi.StockOut) { + return requestClient.post('/erp/stock-out/create', data); +} + +/** + * 修改其它出库单 + */ +export function updateStockOut(data: ErpStockOutApi.StockOut) { + return requestClient.put('/erp/stock-out/update', data); +} + +/** + * 更新其它出库单的状态 + */ +export function updateStockOutStatus( + params: ErpStockOutApi.StockOutStatusParams, +) { + return requestClient.put('/erp/stock-out/update-status', null, { + params, + }); +} + +/** + * 删除其它出库单 + */ +export function deleteStockOut(ids: number[]) { + return requestClient.delete('/erp/stock-out/delete', { + params: { + ids: ids.join(','), + }, + }); +} + +/** + * 导出其它出库单 Excel + */ +export function exportStockOut(params: ErpStockOutApi.StockOutPageParams) { + return requestClient.download('/erp/stock-out/export-excel', { + params, + }); +} diff --git a/apps/web-antd/src/api/erp/stock/record/index.ts b/apps/web-antd/src/api/erp/stock/record/index.ts new file mode 100644 index 000000000..364091bfb --- /dev/null +++ b/apps/web-antd/src/api/erp/stock/record/index.ts @@ -0,0 +1,47 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace ErpStockRecordApi { + /** ERP 产品库存明细 */ + export interface StockRecord { + id?: number; // 编号 + productId: number; // 产品编号 + warehouseId: number; // 仓库编号 + count: number; // 出入库数量 + totalCount: number; // 总库存量 + bizType: number; // 业务类型 + bizId: number; // 业务编号 + bizItemId: number; // 业务项编号 + bizNo: string; // 业务单号 + } + + /** 库存记录分页查询参数 */ + export interface StockRecordPageParam extends PageParam { + productId?: number; + warehouseId?: number; + bizType?: number; + } +} + +/** 查询产品库存明细分页 */ +export function getStockRecordPage( + params: ErpStockRecordApi.StockRecordPageParam, +) { + return requestClient.get>( + '/erp/stock-record/page', + { params }, + ); +} + +/** 查询产品库存明细详情 */ +export function getStockRecord(id: number) { + return requestClient.get( + `/erp/stock-record/get?id=${id}`, + ); +} + +/** 导出产品库存明细 Excel */ +export function exportStockRecord(params: any) { + return requestClient.download('/erp/stock-record/export-excel', { params }); +} diff --git a/apps/web-antd/src/api/erp/stock/stock/index.ts b/apps/web-antd/src/api/erp/stock/stock/index.ts new file mode 100644 index 000000000..57d4ec229 --- /dev/null +++ b/apps/web-antd/src/api/erp/stock/stock/index.ts @@ -0,0 +1,70 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +namespace ErpStockApi { + /** 产品库存信息 */ + export interface Stock { + id?: number; // 编号 + productId: number; // 产品编号 + warehouseId: number; // 仓库编号 + count: number; // 库存数量 + } + + /** 产品库存分页查询参数 */ + export interface StockPageParams extends PageParam { + productId?: number; + warehouseId?: number; + } + + /** 产品库存查询参数 */ + export interface StockQueryParams { + productId: number; + warehouseId: number; + } +} + +/** + * 查询产品库存分页 + */ +export function getStockPage(params: ErpStockApi.StockPageParams) { + return requestClient.get>('/erp/stock/page', { + params, + }); +} + +/** + * 查询产品库存详情 + */ +export function getStock(id: number) { + return requestClient.get(`/erp/stock/get?id=${id}`); +} + +/** + * 根据产品和仓库查询库存详情 + */ +export function getStockByProductAndWarehouse( + params: ErpStockApi.StockQueryParams, +) { + return requestClient.get('/erp/stock/get', { + params, + }); +} + +/** + * 获得产品库存数量 + */ +export function getStockCount(productId: number) { + return requestClient.get('/erp/stock/get-count', { + params: { productId }, + }); +} + +/** + * 导出产品库存 Excel + */ +export function exportStock(params: ErpStockApi.StockPageParams) { + return requestClient.download('/erp/stock/export-excel', { + params, + }); +} diff --git a/apps/web-antd/src/api/erp/stock/warehouse/index.ts b/apps/web-antd/src/api/erp/stock/warehouse/index.ts new file mode 100644 index 000000000..a1cac8ead --- /dev/null +++ b/apps/web-antd/src/api/erp/stock/warehouse/index.ts @@ -0,0 +1,77 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace ErpWarehouseApi { + /** ERP 仓库信息 */ + export interface Warehouse { + id?: number; // 仓库编号 + name: string; // 仓库名称 + address: string; // 仓库地址 + sort: number; // 排序 + remark: string; // 备注 + principal: string; // 负责人 + warehousePrice: number; // 仓储费,单位:元 + truckagePrice: number; // 搬运费,单位:元 + status: number; // 开启状态 + defaultStatus: boolean; // 是否默认 + } + + /** 仓库分页查询参数 */ + export interface WarehousePageParam extends PageParam { + name?: string; + status?: number; + } +} + +/** 查询仓库分页 */ +export function getWarehousePage(params: ErpWarehouseApi.WarehousePageParam) { + return requestClient.get>( + '/erp/warehouse/page', + { params }, + ); +} + +/** 查询仓库精简列表 */ +export function getWarehouseSimpleList() { + return requestClient.get( + '/erp/warehouse/simple-list', + ); +} + +/** 查询仓库详情 */ +export function getWarehouse(id: number) { + return requestClient.get( + `/erp/warehouse/get?id=${id}`, + ); +} + +/** 新增仓库 */ +export function createWarehouse(data: ErpWarehouseApi.Warehouse) { + return requestClient.post('/erp/warehouse/create', data); +} + +/** 修改仓库 */ +export function updateWarehouse(data: ErpWarehouseApi.Warehouse) { + return requestClient.put('/erp/warehouse/update', data); +} + +/** 修改仓库默认状态 */ +export function updateWarehouseDefaultStatus( + id: number, + defaultStatus: boolean, +) { + return requestClient.put('/erp/warehouse/update-default-status', null, { + params: { id, defaultStatus }, + }); +} + +/** 删除仓库 */ +export function deleteWarehouse(id: number) { + return requestClient.delete(`/erp/warehouse/delete?id=${id}`); +} + +/** 导出仓库 Excel */ +export function exportWarehouse(params: any) { + return requestClient.download('/erp/warehouse/export-excel', { params }); +} diff --git a/apps/web-antd/src/views/erp/home/components/SummaryCard.vue b/apps/web-antd/src/views/erp/home/components/SummaryCard.vue new file mode 100644 index 000000000..467155d14 --- /dev/null +++ b/apps/web-antd/src/views/erp/home/components/SummaryCard.vue @@ -0,0 +1,29 @@ + + + diff --git a/apps/web-antd/src/views/erp/home/components/TimeSummaryChart.vue b/apps/web-antd/src/views/erp/home/components/TimeSummaryChart.vue new file mode 100644 index 000000000..c981d11c9 --- /dev/null +++ b/apps/web-antd/src/views/erp/home/components/TimeSummaryChart.vue @@ -0,0 +1,120 @@ + + + diff --git a/apps/web-antd/src/views/erp/home/index.vue b/apps/web-antd/src/views/erp/home/index.vue index ed90b24c3..3f3507be2 100644 --- a/apps/web-antd/src/views/erp/home/index.vue +++ b/apps/web-antd/src/views/erp/home/index.vue @@ -1,7 +1,50 @@ - -
- + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
-- Gitee From dcffb9bbe352d8951b044a1dd1115bde869e3b37 Mon Sep 17 00:00:00 2001 From: nehc <934298133@qq.com> Date: Mon, 21 Jul 2025 20:47:09 +0800 Subject: [PATCH 07/41] =?UTF-8?q?feat(@vben/web-antd):=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=20CardTitle=E7=BB=84=E4=BB=B6=E5=B9=B6=E4=BC=98?= =?UTF-8?q?=E5=8C=96=20TimeSummaryChart?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 CardTitle 组件用于统一卡片标题样式 - 在 TimeSummaryChart 中使用 CardTitle 组件替代原生标题 - 调整 EchartsUI 组件的 height 属性单位 --- .../src/components/card/card-title.vue | 33 +++++++++++++++++++ apps/web-antd/src/components/card/index.ts | 1 + .../erp/home/components/TimeSummaryChart.vue | 6 ++-- 3 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 apps/web-antd/src/components/card/card-title.vue create mode 100644 apps/web-antd/src/components/card/index.ts diff --git a/apps/web-antd/src/components/card/card-title.vue b/apps/web-antd/src/components/card/card-title.vue new file mode 100644 index 000000000..96b1ca07d --- /dev/null +++ b/apps/web-antd/src/components/card/card-title.vue @@ -0,0 +1,33 @@ + + + + + diff --git a/apps/web-antd/src/components/card/index.ts b/apps/web-antd/src/components/card/index.ts new file mode 100644 index 000000000..d2f875a5a --- /dev/null +++ b/apps/web-antd/src/components/card/index.ts @@ -0,0 +1 @@ +export { default as CardTitle } from './card-title.vue'; diff --git a/apps/web-antd/src/views/erp/home/components/TimeSummaryChart.vue b/apps/web-antd/src/views/erp/home/components/TimeSummaryChart.vue index c981d11c9..831e33f80 100644 --- a/apps/web-antd/src/views/erp/home/components/TimeSummaryChart.vue +++ b/apps/web-antd/src/views/erp/home/components/TimeSummaryChart.vue @@ -9,6 +9,8 @@ import { EchartsUI, useEcharts } from '@vben/plugins/echarts'; import { Card } from 'ant-design-vue'; +import { CardTitle } from '#/components/card'; + interface Props { title: string; value?: Array<{ price: number; time: string }>; @@ -112,9 +114,9 @@ watch( -- Gitee From b41ac68e06f77d09a03dc61e5419296d48cce48f Mon Sep 17 00:00:00 2001 From: nehc <934298133@qq.com> Date: Mon, 21 Jul 2025 21:36:40 +0800 Subject: [PATCH 08/41] =?UTF-8?q?refactor(@vben/web-antd):=20ERP=20?= =?UTF-8?q?=E9=A6=96=E9=A1=B5=E9=80=82=E9=85=8D=E5=B7=B2=E6=9C=89=E7=BB=84?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除不必要的 API 调用和数据处理逻辑 - 使用 AnalysisOverview 组件替换自定义统计卡片 - 优化 TimeSummaryChart组件,支持不同类型的数据展示 - 简化页面结构,提高组件的可复用性和可维护性 --- .../views/erp/home/components/SummaryCard.vue | 78 +++++++++++++---- .../erp/home/components/TimeSummaryChart.vue | 61 ++++++++++++- apps/web-antd/src/views/erp/home/index.vue | 86 +++---------------- 3 files changed, 128 insertions(+), 97 deletions(-) diff --git a/apps/web-antd/src/views/erp/home/components/SummaryCard.vue b/apps/web-antd/src/views/erp/home/components/SummaryCard.vue index 467155d14..ff98e556a 100644 --- a/apps/web-antd/src/views/erp/home/components/SummaryCard.vue +++ b/apps/web-antd/src/views/erp/home/components/SummaryCard.vue @@ -1,29 +1,69 @@ diff --git a/apps/web-antd/src/views/erp/home/components/TimeSummaryChart.vue b/apps/web-antd/src/views/erp/home/components/TimeSummaryChart.vue index 831e33f80..40d9f1398 100644 --- a/apps/web-antd/src/views/erp/home/components/TimeSummaryChart.vue +++ b/apps/web-antd/src/views/erp/home/components/TimeSummaryChart.vue @@ -3,23 +3,51 @@ import type { EChartsOption } from 'echarts'; import type { EchartsUIType } from '@vben/plugins/echarts'; -import { ref, watch } from 'vue'; +import type { ErpPurchaseStatisticsApi } from '#/api/erp/statistics/purchase'; +import type { ErpSaleStatisticsApi } from '#/api/erp/statistics/sale'; + +import { onMounted, ref, watch } from 'vue'; import { EchartsUI, useEcharts } from '@vben/plugins/echarts'; import { Card } from 'ant-design-vue'; +import { + getPurchaseSummary, + getPurchaseTimeSummary, +} from '#/api/erp/statistics/purchase'; +import { getSaleSummary, getSaleTimeSummary } from '#/api/erp/statistics/sale'; import { CardTitle } from '#/components/card'; interface Props { title: string; - value?: Array<{ price: number; time: string }>; + type?: 'purchase' | 'sale'; } const props = withDefaults(defineProps(), { - value: () => [], + type: 'sale', }); +/** 销售统计数据 */ +const saleSummary = ref(); // 销售概况统计 +const saleTimeSummaryList = ref(); // 销售时段统计 +const getSaleStatistics = async () => { + saleSummary.value = await getSaleSummary(); + saleTimeSummaryList.value = await getSaleTimeSummary(); +}; + +/** 采购统计数据 */ +const purchaseSummary = ref(); // 采购概况统计 +const purchaseTimeSummaryList = + ref(); // 采购时段统计 +const getPurchaseStatistics = async () => { + purchaseSummary.value = await getPurchaseSummary(); + purchaseTimeSummaryList.value = await getPurchaseTimeSummary(); +}; + +/** 获取当前类型的时段数据 */ +const currentTimeSummaryList = ref>(); + const chartRef = ref(); const { renderEcharts } = useEcharts(chartRef); @@ -80,8 +108,20 @@ const lineChartOptions: EChartsOption = { }, }; +/** 初始化数据 */ +const initData = async () => { + if (props.type === 'sale') { + await getSaleStatistics(); + currentTimeSummaryList.value = saleTimeSummaryList.value; + } else { + await getPurchaseStatistics(); + currentTimeSummaryList.value = purchaseTimeSummaryList.value; + } +}; + +/** 监听数据变化并更新图表 */ watch( - () => props.value, + () => currentTimeSummaryList.value, (val) => { if (!val || val.length === 0) { return; @@ -109,6 +149,19 @@ watch( }, { immediate: true }, ); + +/** 组件挂载时初始化数据 */ +onMounted(() => { + initData(); +}); + +/** 暴露数据给父组件使用 */ +defineExpose({ + saleSummary, + purchaseSummary, + saleTimeSummaryList, + purchaseTimeSummaryList, +});