diff --git a/.vscode/settings.json b/.vscode/settings.json index d51511a2c..dc371b9b0 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -100,7 +100,7 @@ "**/.stylelintcache": true, "**/.DS_Store": true, "**/vite.config.mts.*": true, - "**/tea.yaml": true, + "**/tea.yaml": true }, "files.watcherExclude": { "**/.git/objects/**": true, @@ -110,7 +110,7 @@ "**/tmp/**": true, "**/bower_components/**": true, "**/dist/**": true, - "**/yarn.lock": true, + "**/yarn.lock": true }, "typescript.tsserver.exclude": ["**/node_modules", "**/dist", "**/.turbo"], diff --git a/apps/web-antd/src/api/member/address/index.ts b/apps/web-antd/src/api/member/address/index.ts new file mode 100644 index 000000000..16b456eaa --- /dev/null +++ b/apps/web-antd/src/api/member/address/index.ts @@ -0,0 +1,20 @@ +import { requestClient } from '#/api/request'; + +export namespace MemberAddressApi { + /** 收件地址信息 */ + export interface Address { + id?: number; + name: string; + mobile: string; + areaId: number; + detailAddress: string; + defaultStatus: boolean; + } +} + +/** 查询用户收件地址列表 */ +export function getAddressList(params: any) { + return requestClient.get('/member/address/list', { + params, + }); +} diff --git a/apps/web-antd/src/api/member/config/index.ts b/apps/web-antd/src/api/member/config/index.ts new file mode 100644 index 000000000..073110d66 --- /dev/null +++ b/apps/web-antd/src/api/member/config/index.ts @@ -0,0 +1,22 @@ +import { requestClient } from '#/api/request'; + +export namespace MemberConfigApi { + /** 积分设置信息 */ + export interface Config { + id?: number; + pointTradeDeductEnable: number; + pointTradeDeductUnitPrice: number; + pointTradeDeductMaxPrice: number; + pointTradeGivePoint: number; + } +} + +/** 查询积分设置详情 */ +export function getConfig() { + return requestClient.get('/member/config/get'); +} + +/** 新增修改积分设置 */ +export function saveConfig(data: MemberConfigApi.Config) { + return requestClient.put('/member/config/save', data); +} diff --git a/apps/web-antd/src/api/member/experience-record/index.ts b/apps/web-antd/src/api/member/experience-record/index.ts new file mode 100644 index 000000000..f36297f1e --- /dev/null +++ b/apps/web-antd/src/api/member/experience-record/index.ts @@ -0,0 +1,33 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MemberExperienceRecordApi { + /** 会员经验记录信息 */ + export interface ExperienceRecord { + id?: number; + userId: number; + bizId: string; + bizType: number; + title: string; + description: string; + experience: number; + totalExperience: number; + } +} + +/** 查询会员经验记录列表 */ +export function getExperienceRecordPage(params: PageParam) { + return requestClient.get< + PageResult + >('/member/experience-record/page', { + params, + }); +} + +/** 查询会员经验记录详情 */ +export function getExperienceRecord(id: number) { + return requestClient.get( + `/member/experience-record/get?id=${id}`, + ); +} diff --git a/apps/web-antd/src/api/member/group/index.ts b/apps/web-antd/src/api/member/group/index.ts new file mode 100644 index 000000000..93c2ca3e9 --- /dev/null +++ b/apps/web-antd/src/api/member/group/index.ts @@ -0,0 +1,50 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MemberGroupApi { + /** 用户分组信息 */ + export interface Group { + id?: number; + name: string; + remark: string; + status: number; + } +} + +/** 查询用户分组列表 */ +export function getGroupPage(params: PageParam) { + return requestClient.get>( + '/member/group/page', + { + params, + }, + ); +} + +/** 查询用户分组详情 */ +export function getGroup(id: number) { + return requestClient.get(`/member/group/get?id=${id}`); +} + +/** 新增用户分组 */ +export function createGroup(data: MemberGroupApi.Group) { + return requestClient.post('/member/group/create', data); +} + +/** 查询用户分组 - 精简信息列表 */ +export function getSimpleGroupList() { + return requestClient.get( + '/member/group/list-all-simple', + ); +} + +/** 修改用户分组 */ +export function updateGroup(data: MemberGroupApi.Group) { + return requestClient.put('/member/group/update', data); +} + +/** 删除用户分组 */ +export function deleteGroup(id: number) { + return requestClient.delete(`/member/group/delete?id=${id}`); +} diff --git a/apps/web-antd/src/api/member/level/index.ts b/apps/web-antd/src/api/member/level/index.ts new file mode 100644 index 000000000..850d9b820 --- /dev/null +++ b/apps/web-antd/src/api/member/level/index.ts @@ -0,0 +1,49 @@ +import { requestClient } from '#/api/request'; + +export namespace MemberLevelApi { + /** 会员等级信息 */ + export interface Level { + id?: number; + name: string; + experience: number; + value: number; + discountPercent: number; + icon: string; + bgUrl: string; + status: number; + } +} + +/** 查询会员等级列表 */ +export function getLevelList(params: MemberLevelApi.Level) { + return requestClient.get('/member/level/list', { + params, + }); +} + +/** 查询会员等级详情 */ +export function getLevel(id: number) { + return requestClient.get(`/member/level/get?id=${id}`); +} + +/** 查询会员等级 - 精简信息列表 */ +export function getSimpleLevelList() { + return requestClient.get( + '/member/level/list-all-simple', + ); +} + +/** 新增会员等级 */ +export function createLevel(data: MemberLevelApi.Level) { + return requestClient.post('/member/level/create', data); +} + +/** 修改会员等级 */ +export function updateLevel(data: MemberLevelApi.Level) { + return requestClient.put('/member/level/update', data); +} + +/** 删除会员等级 */ +export function deleteLevel(id: number) { + return requestClient.delete(`/member/level/delete?id=${id}`); +} diff --git a/apps/web-antd/src/api/member/point/record/index.ts b/apps/web-antd/src/api/member/point/record/index.ts new file mode 100644 index 000000000..7f6797e8a --- /dev/null +++ b/apps/web-antd/src/api/member/point/record/index.ts @@ -0,0 +1,28 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MemberPointRecordApi { + /** 用户积分记录信息 */ + export interface Record { + id?: number; + bizId: string; + bizType: string; + title: string; + description: string; + point: number; + totalPoint: number; + userId: number; + createDate: Date; + } +} + +/** 查询用户积分记录列表 */ +export function getRecordPage(params: PageParam) { + return requestClient.get>( + '/member/point/record/page', + { + params, + }, + ); +} diff --git a/apps/web-antd/src/api/member/signin/config/index.ts b/apps/web-antd/src/api/member/signin/config/index.ts new file mode 100644 index 000000000..cf113b781 --- /dev/null +++ b/apps/web-antd/src/api/member/signin/config/index.ts @@ -0,0 +1,41 @@ +import { requestClient } from '#/api/request'; + +export namespace MemberSignInConfigApi { + /** 积分签到规则信息 */ + export interface SignInConfig { + id?: number; + day?: number; + point?: number; + experience?: number; + status?: number; + } +} + +/** 查询积分签到规则列表 */ +export function getSignInConfigList() { + return requestClient.get( + '/member/sign-in/config/list', + ); +} + +/** 查询积分签到规则详情 */ +export function getSignInConfig(id: number) { + return requestClient.get( + `/member/sign-in/config/get?id=${id}`, + ); +} + +/** 新增积分签到规则 */ +export function createSignInConfig(data: MemberSignInConfigApi.SignInConfig) { + return requestClient.post('/member/sign-in/config/create', data); +} + +/** 修改积分签到规则 */ +export function updateSignInConfig(data: MemberSignInConfigApi.SignInConfig) { + return requestClient.put('/member/sign-in/config/update', data); +} + +/** 删除积分签到规则 */ +export function deleteSignInConfig(id: number) { + return requestClient.delete(`/member/sign-in/config/delete?id=${id}`); +} diff --git a/apps/web-antd/src/api/member/signin/record/index.ts b/apps/web-antd/src/api/member/signin/record/index.ts new file mode 100644 index 000000000..7d5766d66 --- /dev/null +++ b/apps/web-antd/src/api/member/signin/record/index.ts @@ -0,0 +1,23 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MemberSignInRecordApi { + /** 用户签到积分信息 */ + export interface SignInRecord { + id?: number; + userId: number; + day: number; + point: number; + } +} + +/** 查询用户签到积分列表 */ +export function getSignInRecordPage(params: PageParam) { + return requestClient.get>( + '/member/sign-in/record/page', + { + params, + }, + ); +} diff --git a/apps/web-antd/src/api/member/tag/index.ts b/apps/web-antd/src/api/member/tag/index.ts new file mode 100644 index 000000000..d5c2ef44e --- /dev/null +++ b/apps/web-antd/src/api/member/tag/index.ts @@ -0,0 +1,43 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MemberTagApi { + /** 会员标签信息 */ + export interface Tag { + id?: number; + name: string; + } +} + +/** 查询会员标签列表 */ +export function getMemberTagPage(params: PageParam) { + return requestClient.get>('/member/tag/page', { + params, + }); +} + +/** 查询会员标签详情 */ +export function getMemberTag(id: number) { + return requestClient.get(`/member/tag/get?id=${id}`); +} + +/** 查询会员标签 - 精简信息列表 */ +export function getSimpleTagList() { + return requestClient.get('/member/tag/list-all-simple'); +} + +/** 新增会员标签 */ +export function createMemberTag(data: MemberTagApi.Tag) { + return requestClient.post('/member/tag/create', data); +} + +/** 修改会员标签 */ +export function updateMemberTag(data: MemberTagApi.Tag) { + return requestClient.put('/member/tag/update', data); +} + +/** 删除会员标签 */ +export function deleteMemberTag(id: number) { + return requestClient.delete(`/member/tag/delete?id=${id}`); +} diff --git a/apps/web-antd/src/api/member/user/index.ts b/apps/web-antd/src/api/member/user/index.ts new file mode 100644 index 000000000..e8a5a35b7 --- /dev/null +++ b/apps/web-antd/src/api/member/user/index.ts @@ -0,0 +1,70 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MemberUserApi { + /** 会员用户信息 */ + export interface User { + id?: number; + avatar?: string; + birthday?: number; + createTime?: number; + loginDate?: number; + loginIp: string; + mark: string; + mobile: string; + name?: string; + nickname?: string; + registerIp: string; + sex: number; + status: number; + areaId?: number; + areaName?: string; + levelName: null | string; + point?: null | number; + totalPoint?: null | number; + experience?: null | number; + } + + /** 会员用户等级更新信息 */ + export interface UserLevelUpdate { + id: number; + levelId: number; + } + + /** 会员用户积分更新信息 */ + export interface UserPointUpdate { + id: number; + point: number; + } +} + +/** 查询会员用户列表 */ +export function getUserPage(params: PageParam) { + return requestClient.get>( + '/member/user/page', + { + params, + }, + ); +} + +/** 查询会员用户详情 */ +export function getUser(id: number) { + return requestClient.get(`/member/user/get?id=${id}`); +} + +/** 修改会员用户 */ +export function updateUser(data: MemberUserApi.User) { + return requestClient.put('/member/user/update', data); +} + +/** 修改会员用户等级 */ +export function updateUserLevel(data: MemberUserApi.UserLevelUpdate) { + return requestClient.put('/member/user/update-level', data); +} + +/** 修改会员用户积分 */ +export function updateUserPoint(data: MemberUserApi.UserPointUpdate) { + return requestClient.put('/member/user/update-point', data); +} diff --git a/apps/web-antd/src/components/upload/input-upload.vue b/apps/web-antd/src/components/upload/input-upload.vue index 11ee4cf03..0b2df8540 100644 --- a/apps/web-antd/src/components/upload/input-upload.vue +++ b/apps/web-antd/src/components/upload/input-upload.vue @@ -3,40 +3,51 @@ import type { InputProps, TextAreaProps } from 'ant-design-vue'; import type { FileUploadProps } from './typing'; -import { computed, ref } from 'vue'; +import { computed } from 'vue'; +import { useVModel } from '@vueuse/core'; import { Col, Input, Row, Textarea } from 'ant-design-vue'; import FileUpload from './file-upload.vue'; const props = defineProps<{ + defaultValue?: number | string; fileUploadProps?: FileUploadProps; inputProps?: InputProps; inputType?: 'input' | 'textarea'; + modelValue?: number | string; textareaProps?: TextAreaProps; }>(); -const emit = defineEmits(['change', 'update:value']); +const emits = defineEmits<{ + (e: 'change', payload: number | string): void; + (e: 'update:value', payload: number | string): void; + (e: 'update:modelValue', payload: number | string): void; +}>(); -const value = ref(''); +const modelValue = useVModel(props, 'modelValue', emits, { + defaultValue: props.defaultValue, + passive: true, +}); function handleReturnText(text: string) { - value.value = text; - emit('change', value.value); - emit('update:value', value.value); + modelValue.value = text; + emits('change', modelValue.value); + emits('update:value', modelValue.value); + emits('update:modelValue', modelValue.value); } const inputProps = computed(() => { return { ...props.inputProps, - value: value.value, + value: modelValue.value, }; }); const textareaProps = computed(() => { return { ...props.textareaProps, - value: value.value, + value: modelValue.value, }; }); diff --git a/apps/web-antd/src/router/routes/modules/member.ts b/apps/web-antd/src/router/routes/modules/member.ts new file mode 100644 index 000000000..4f4e81723 --- /dev/null +++ b/apps/web-antd/src/router/routes/modules/member.ts @@ -0,0 +1,16 @@ +import type { RouteRecordRaw } from 'vue-router'; + +const routes: RouteRecordRaw[] = [ + { + path: '/member/user/detail', + component: () => import('#/views/member/user/modules/detail.vue'), + name: 'MemberUserDetail', + meta: { + title: '会员详情', + icon: 'lucide:user', + hideInMenu: true, + }, + }, +]; + +export default routes; diff --git a/apps/web-antd/src/utils/download.ts b/apps/web-antd/src/utils/download.ts index acb0129c8..f7cf56596 100644 --- a/apps/web-antd/src/utils/download.ts +++ b/apps/web-antd/src/utils/download.ts @@ -2,6 +2,7 @@ * 下载工具模块 * 提供多种文件格式的下载功能 */ +// 请使用 @vben/utils/download 代替 packages/@core/base/shared/src/utils/download.ts /** * 图片下载配置接口 diff --git a/apps/web-antd/src/utils/index.ts b/apps/web-antd/src/utils/index.ts index 479a35472..b33984b78 100644 --- a/apps/web-antd/src/utils/index.ts +++ b/apps/web-antd/src/utils/index.ts @@ -6,4 +6,3 @@ export * from './formatTime'; export * from './formCreate'; export * from './rangePickerProps'; export * from './routerHelper'; -export * from './validator'; diff --git a/apps/web-antd/src/utils/validator.ts b/apps/web-antd/src/utils/validator.ts deleted file mode 100644 index 3ae62f787..000000000 --- a/apps/web-antd/src/utils/validator.ts +++ /dev/null @@ -1,17 +0,0 @@ -// 参数校验,对标 Hutool 的 Validator 工具类 - -/** 手机号正则表达式(中国) */ -const MOBILE_REGEX = /(?:0|86|\+86)?1[3-9]\d{9}/; - -/** - * 验证是否为手机号码(中国) - * - * @param value 值 - * @returns 是否为手机号码(中国) - */ -export function isMobile(value?: null | string): boolean { - if (!value) { - return false; - } - return MOBILE_REGEX.test(value); -} diff --git a/apps/web-antd/src/views/bpm/processInstance/detail/modules/task-list.vue b/apps/web-antd/src/views/bpm/processInstance/detail/modules/task-list.vue index 7a1e44ada..145b04f44 100644 --- a/apps/web-antd/src/views/bpm/processInstance/detail/modules/task-list.vue +++ b/apps/web-antd/src/views/bpm/processInstance/detail/modules/task-list.vue @@ -199,7 +199,7 @@ defineExpose({