feat: 添加企业微信用户余额修改功能

在用户详情页面中增加余额修改功能,允许管理员直接修改用户余额。同时,更新订单查询接口以支持通过企业微信用户ID查询订单记录,并优化用户详情页面的信息展示。
This commit is contained in:
dzq 2025-05-19 08:21:44 +08:00
parent 56904be993
commit 1aa7cee0c0
3 changed files with 20 additions and 7 deletions

View File

@ -1,9 +1,11 @@
import { http } from "@/utils/http"; import { http } from "@/utils/http";
import { UserDTO } from "../system/user";
/** /**
* *
*/ */
export interface QyUserDTO { export interface QyUserDTO {
sysUser?: UserDTO;
/** 用户ID导出列用户ID */ /** 用户ID导出列用户ID */
id?: number; id?: number;
/** 全局唯一ID导出列全局唯一ID */ /** 全局唯一ID导出列全局唯一ID */

View File

@ -7,6 +7,10 @@ export interface OrderQuery extends BasePageQuery {
* openid * openid
*/ */
openid?: string; openid?: string;
/**
* ID或汇邦云用户ID
*/
userid?: string;
/** 柜机id */ /** 柜机id */
cabinetId?: number; cabinetId?: number;
/** 格口id */ /** 格口id */

View File

@ -3,7 +3,7 @@ import { ref, onMounted, watch } from "vue";
import { useRoute, useRouter } from "vue-router"; import { useRoute, useRouter } from "vue-router";
import { type QyUserDTO, getQyUserDetailApi } from "@/api/qy/qyUser"; import { type QyUserDTO, getQyUserDetailApi } from "@/api/qy/qyUser";
import { getOrderListApi, type OrderDTO } from "@/api/shop/order"; import { getOrderListApi, type OrderDTO } from "@/api/shop/order";
import { useMultiTagsStoreHook } from "@/store/modules/multiTags"; import BalanceEditModal from "./BalanceEditModal.vue";
defineOptions({ defineOptions({
name: "QyUserDetail" name: "QyUserDetail"
@ -13,6 +13,8 @@ const route = useRoute();
const router = useRouter(); const router = useRouter();
const userInfo = ref<QyUserDTO>({}); const userInfo = ref<QyUserDTO>({});
const loading = ref(false); const loading = ref(false);
const balanceVisible = ref(false);
const currentBalance = ref(0);
// //
const basicInfo = ref({ const basicInfo = ref({
@ -37,6 +39,7 @@ async function fetchOrders() {
orderLoading.value = true; orderLoading.value = true;
const { data } = await getOrderListApi({ const { data } = await getOrderListApi({
openid: userInfo.value.openid, openid: userInfo.value.openid,
userid: userInfo.value.userid,
pageSize: pagination.value.pageSize, pageSize: pagination.value.pageSize,
pageNum: pagination.value.currentPage pageNum: pagination.value.currentPage
}); });
@ -68,6 +71,11 @@ async function fetchUserDetail() {
onMounted(() => { onMounted(() => {
fetchUserDetail(); fetchUserDetail();
}); });
async function handleModifyBalance(row: QyUserDTO) {
currentBalance.value = row.balance || 0;
balanceVisible.value = true;
}
</script> </script>
<template> <template>
@ -90,24 +98,22 @@ onMounted(() => {
<el-descriptions class="user-details" :column="1" border> <el-descriptions class="user-details" :column="1" border>
<el-descriptions-item label="姓名">{{ userInfo.name }}</el-descriptions-item> <el-descriptions-item label="姓名">{{ userInfo.name }}</el-descriptions-item>
<el-descriptions-item label="手机号">{{ userInfo.mobile }}</el-descriptions-item> <el-descriptions-item label="手机号">{{ userInfo.mobile }}</el-descriptions-item>
<el-descriptions-item label="余额">¥{{ userInfo.balance?.toFixed(2) }}</el-descriptions-item> <el-descriptions-item label="余额">¥{{ userInfo.balance?.toFixed(2) }} <el-button type="primary" size="small"
@click="handleModifyBalance(userInfo)">修改</el-button></el-descriptions-item>
</el-descriptions> </el-descriptions>
</el-card> </el-card>
<el-card class="info-card"> <el-card class="info-card">
<div class="tab-header"> <div class="tab-header">
<el-tabs type="card" v-model="activeTab"> <el-tabs type="card" v-model="activeTab">
<el-tab-pane label="基础信息" name="basic"></el-tab-pane> <el-tab-pane label="基础信息" name="basic"></el-tab-pane>
<!-- <el-tab-pane label="订单记录" name="orders"></el-tab-pane> --> <el-tab-pane label="订单记录" name="orders"></el-tab-pane>
</el-tabs> </el-tabs>
</div> </div>
<el-descriptions class="info-details" v-if="activeTab === 'basic'" :column="2" border> <el-descriptions class="info-details" v-if="activeTab === 'basic'" :column="2" border>
<el-descriptions-item label="用户ID">{{ userInfo.userid }}</el-descriptions-item> <el-descriptions-item label="用户ID">{{ userInfo.userid }}</el-descriptions-item>
<el-descriptions-item label="企业ID">{{ userInfo.corpid }}</el-descriptions-item> <el-descriptions-item label="企业ID">{{ userInfo.corpid }}</el-descriptions-item>
<el-descriptions-item label="注册时间">{{ basicInfo.registerTime }}</el-descriptions-item> <el-descriptions-item label="职务信息">{{ userInfo.position }}</el-descriptions-item>
<el-descriptions-item label="最后登录">{{ basicInfo.lastLogin }}</el-descriptions-item>
<el-descriptions-item label="登录次数">{{ basicInfo.loginCount }}</el-descriptions-item>
<el-descriptions-item label="常用设备">{{ basicInfo.device }}</el-descriptions-item>
</el-descriptions> </el-descriptions>
<div class="info-details" v-if="activeTab === 'orders'"> <div class="info-details" v-if="activeTab === 'orders'">
@ -136,6 +142,7 @@ onMounted(() => {
</div> </div>
</el-card> </el-card>
</div> </div>
<BalanceEditModal v-model:visible="balanceVisible" :row="userInfo" @refresh="fetchUserDetail" />
</div> </div>
</template> </template>