From 1a3019796053d29592698e00cda9c447d1a94f26 Mon Sep 17 00:00:00 2001 From: dzq Date: Mon, 24 Nov 2025 17:57:28 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E7=94=A8=E6=88=B7=E4=BD=99=E9=A2=9D):=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=94=A8=E6=88=B7=E4=BD=99=E9=A2=9D=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增用户余额实体和API接口 - 在用户详情页添加余额修改按钮和弹窗 - 实现金额单位转换和表单验证 - 添加相关文档说明 --- {docs => doc}/商品图片压缩功能使用说明.md | 0 src/api/ab98/balance.ts | 130 ++++++++++++++++++++++ src/api/ab98/user.ts | 4 +- src/views/user/ab98/BalanceEditModal.vue | 87 +++++++++++++++ src/views/user/ab98/detail.vue | 14 ++- 5 files changed, 232 insertions(+), 3 deletions(-) rename {docs => doc}/商品图片压缩功能使用说明.md (100%) create mode 100644 src/api/ab98/balance.ts create mode 100644 src/views/user/ab98/BalanceEditModal.vue diff --git a/docs/商品图片压缩功能使用说明.md b/doc/商品图片压缩功能使用说明.md similarity index 100% rename from docs/商品图片压缩功能使用说明.md rename to doc/商品图片压缩功能使用说明.md diff --git a/src/api/ab98/balance.ts b/src/api/ab98/balance.ts new file mode 100644 index 0000000..4ccfe15 --- /dev/null +++ b/src/api/ab98/balance.ts @@ -0,0 +1,130 @@ +import { http } from "@/utils/http"; + +export interface UserBalance { + /** 主键ID */ + userBalanceId: number; + /** 企业微信id */ + corpid: string; + /** openid */ + openid: string; + /** 汇邦云用户ID */ + ab98UserId: number; + /** 企业用户id */ + qyUserId: number; + /** 用户余额(单位:分) */ + balance: number; + /** 用户余额(单位:分) */ + useBalance: number; + /** 用户余额(单位:分) */ + balanceLimit: number; + /** 创建者ID */ + creatorId: number; + /** 更新者ID */ + updaterId: number; +} + +export interface UserBalanceListParams { + pageNum?: number; + pageSize?: number; + corpid?: string; + openid?: string; + ab98UserId?: number; + qyUserId?: number; +} + +export interface UserBalanceListResponse { + rows: UserBalance[]; + total: number; +} + +// 新增用户余额请求参数 +export interface AddUserBalanceCommand { + /** 企业微信ID */ + corpid: string; + /** 微信openid */ + openid?: string; + /** 汇邦云用户ID */ + ab98UserId: number; + /** 企业用户ID */ + qyUserId?: number; + /** 用户余额(分) */ + balance?: number; + /** 可用余额(分) */ + useBalance?: number; + /** 余额限制(分) */ + balanceLimit?: number; +} + +// 修改用户余额请求参数 +export interface UpdateUserBalanceCommand extends AddUserBalanceCommand { } + +// 余额增减操作请求参数 +export interface ChangeBalanceCommand { + /** 企业微信ID */ + corpid: string; + /** 汇邦云用户ID */ + ab98UserId: number; + /** 金额(分) */ + amount: number; +} + +// 根据企业微信ID和汇邦云用户ID查询参数 +export interface QueryByCorpidAb98Params { + corpid: string; + ab98UserId: number; +} + +// 根据openid查询参数 +export interface QueryByOpenidParams { + openid: string; +} + +// 批量删除参数 +export interface BatchDeleteParams { + ids: number[]; +} + +// 用户余额相关API +export const getUserBalanceListApi = (params: UserBalanceListParams) => { + return http.request>>("get", "/ab98/balance", { params }); +}; + +export const getUserBalanceDetailApi = (id: number) => { + return http.request>("get", `/ab98/balance/${id}`); +}; + +export const getUserBalanceByCorpidAb98Api = (params: QueryByCorpidAb98Params) => { + return http.request>("get", "/ab98/balance/byCorpidAb98", { params }); +}; + +export const getUserBalanceByOpenidApi = (params: QueryByOpenidParams) => { + return http.request>("get", "/ab98/balance/byOpenid", { params }); +}; + +export const addUserBalanceApi = (data: AddUserBalanceCommand) => { + return http.request>("post", "/ab98/balance", { data }); +}; + +export const updateUserBalanceApi = (id: number, data: UpdateUserBalanceCommand) => { + return http.request>("put", `/ab98/balance/${id}`, { data }); +}; + +export const deleteUserBalanceApi = (id: number) => { + return http.request>("delete", `/ab98/balance/${id}`); +}; + +export const batchDeleteUserBalanceApi = (ids: number[]) => { + return http.request>("delete", `/ab98/balance/batch/${ids.join(',')}`); +}; + +export const addUserBalanceAmountApi = (data: ChangeBalanceCommand) => { + return http.request>("post", "/ab98/balance/addBalance", { data }); +}; + +export const subtractUserBalanceAmountApi = (data: ChangeBalanceCommand) => { + return http.request>("post", "/ab98/balance/subtractBalance", { data }); +}; + +export const insertOrUpdateUserBalanceApi = (data: AddUserBalanceCommand) => { + return http.request>("post", "/ab98/balance/insertOrUpdate", { data }); +}; \ No newline at end of file diff --git a/src/api/ab98/user.ts b/src/api/ab98/user.ts index 378b902..8327c2e 100644 --- a/src/api/ab98/user.ts +++ b/src/api/ab98/user.ts @@ -1,4 +1,5 @@ import { http } from "@/utils/http"; +import { UserBalance } from "./balance"; export interface Ab98UserDTO { /** 主键ID */ @@ -64,7 +65,8 @@ export interface Ab98UserDetailDTO { useBalance?: number; /** 借呗额度(单位:分) */ balanceLimit?: number; - + /** 用户余额实体 */ + userBalanceEntity?: UserBalance; } export interface Ab98UserQuery extends BasePageQuery { diff --git a/src/views/user/ab98/BalanceEditModal.vue b/src/views/user/ab98/BalanceEditModal.vue new file mode 100644 index 0000000..60f29bc --- /dev/null +++ b/src/views/user/ab98/BalanceEditModal.vue @@ -0,0 +1,87 @@ + + + \ No newline at end of file diff --git a/src/views/user/ab98/detail.vue b/src/views/user/ab98/detail.vue index b9e73f7..3038b31 100644 --- a/src/views/user/ab98/detail.vue +++ b/src/views/user/ab98/detail.vue @@ -8,6 +8,7 @@ import { ElMessage, ElMessageBox } from "element-plus"; import { PureTableBar } from "@/components/RePureTableBar"; import { useWxStore } from "@/store/modules/wx"; import { formatFenToYuan } from "@/utils/currency"; +import BalanceEditModal from "./BalanceEditModal.vue"; defineOptions({ name: "Ab98UserDetail" @@ -23,6 +24,7 @@ const showAddTagDialog = ref(false); const addTagForm = ref({ tagName: '' }); +const balanceVisible = ref(false); // 基础信息 const basicInfo = ref({ @@ -130,6 +132,10 @@ async function handleDeleteTag(tagId: number) { onMounted(() => { fetchUserDetail(); }); + +async function handleModifyBalance() { + balanceVisible.value = true; +} +