Jelajahi Sumber

```
feat(userManage): 添加用户退款功能并调整界面显示

- 在用户信息页面添加退款操作按钮,仅当用户余额大于0时显示
- 实现退款确认对话框,包含 loading 状态和错误处理
- 添加 UserInfoAPI.refund 接口方法用于执行退款操作
- 调整用户信息表格操作列宽度并重新渲染数据

config: 更新环境配置和项目标识

- 修改 .env.development 和 .env.production 中的 API 地址和标题配置
- 将 logo 图片从 logo.png 更换为 logo.svg 格式
- 调整 billing-strategy 页面中单位名称的默认显示值
```

zouzexu 2 hari lalu
induk
melakukan
eed63363ce

+ 101 - 89
src/api/userManage/user-info-api.ts

@@ -3,109 +3,121 @@ import request from "@/utils/request";
 const USERINFO_BASE_URL = "/api/v1/user-info";
 
 const UserInfoAPI = {
-    /** 获取个人用户信息分页数据 */
-    getPage(queryParams?: UserInfoPageQuery) {
-        return request<any, PageResult<UserInfoPageVO[]>>({
-            url: `${USERINFO_BASE_URL}/page`,
-            method: "get",
-            params: queryParams,
-        });
-    },
-    /**
-     * 获取个人用户信息表单数据
-     *
-     * @param id 个人用户信息ID
-     * @returns 个人用户信息表单数据
-     */
-    getFormData(id: number) {
-        return request<any, UserInfoForm>({
-            url: `${USERINFO_BASE_URL}/${id}/form`,
-            method: "get",
-        });
-    },
+  /** 获取个人用户信息分页数据 */
+  getPage(queryParams?: UserInfoPageQuery) {
+    return request<any, PageResult<UserInfoPageVO[]>>({
+      url: `${USERINFO_BASE_URL}/page`,
+      method: "get",
+      params: queryParams,
+    });
+  },
+  /**
+   * 获取个人用户信息表单数据
+   *
+   * @param id 个人用户信息ID
+   * @returns 个人用户信息表单数据
+   */
+  getFormData(id: number) {
+    return request<any, UserInfoForm>({
+      url: `${USERINFO_BASE_URL}/${id}/form`,
+      method: "get",
+    });
+  },
 
-    /**
-     *  添加个人用户信息
-     *
-     *  @param data 个人用户信息表单数据
-     */
-    create(data: UserInfoForm) {
-        return request({
-            url: `${USERINFO_BASE_URL}`,
-            method: "post",
-            data,
-        });
-    },
+  /**
+   *  添加个人用户信息
+   *
+   *  @param data 个人用户信息表单数据
+   */
+  create(data: UserInfoForm) {
+    return request({
+      url: `${USERINFO_BASE_URL}`,
+      method: "post",
+      data,
+    });
+  },
 
-    /**
-     * 更新个人用户信息
-     *
-     * @param id 个人用户信息ID
-     * @param data 个人用户信息表单数据
-     */
-     update(id: string, data: UserInfoForm) {
-        return request({
-            url: `${USERINFO_BASE_URL}/${id}`,
-            method: "put",
-            data,
-        });
-    },
+  /**
+   * 更新个人用户信息
+   *
+   * @param id 个人用户信息ID
+   * @param data 个人用户信息表单数据
+   */
+  update(id: string, data: UserInfoForm) {
+    return request({
+      url: `${USERINFO_BASE_URL}/${id}`,
+      method: "put",
+      data,
+    });
+  },
 
-    /**
-     * 批量删除个人用户信息,多个以英文逗号(,)分割
-     *
-     * @param ids 个人用户信息ID字符串,多个以英文逗号(,)分割
-     */
-     deleteByIds(ids: string) {
-        return request({
-            url: `${USERINFO_BASE_URL}/${ids}`,
-            method: "delete",
-        });
-    }
-}
+  /**
+   * 批量删除个人用户信息,多个以英文逗号(,)分割
+   *
+   * @param ids 个人用户信息ID字符串,多个以英文逗号(,)分割
+   */
+  deleteByIds(ids: string) {
+    return request({
+      url: `${USERINFO_BASE_URL}/${ids}`,
+      method: "delete",
+    });
+  },
+
+  /**
+   * 退款
+   *
+   * @param id 个人用户信息ID
+   */
+  refund(id: string) {
+    return request({
+      url: `${USERINFO_BASE_URL}/refundOrder/${id}`,
+      method: "put",
+    });
+  },
+};
 
 export default UserInfoAPI;
 
 /** 个人用户信息分页查询参数 */
 export interface UserInfoPageQuery extends PageQuery {
-    /** 手机号 */
-    phone?: string;
-    /** 所属企业ID */
-    firmId?: number;
-    /** 排序字段 */
-    sortField?: string;
-    /** 排序方式: ascending/descending */
-    sortOrder?: string;
+  /** 手机号 */
+  phone?: string;
+  /** 所属企业ID */
+  firmId?: number;
+  /** 排序字段 */
+  sortField?: string;
+  /** 排序方式: ascending/descending */
+  sortOrder?: string;
 }
 
 /** 个人用户信息表单对象 */
 export interface UserInfoForm {
-    /** 主键 */
-    id?: number;
-    /** 昵称 */
-    nickName?: string;
-    /** 手机号 */
-    phone?: string;
-    /** 微信openid */
-    openid?: string;
+  /** 主键 */
+  id?: number;
+  /** 昵称 */
+  nickName?: string;
+  /** 手机号 */
+  phone?: string;
+  /** 微信openid */
+  openid?: string;
 }
 
 /** 个人用户信息分页对象 */
 export interface UserInfoPageVO {
-    /** 主键ID */
-    id?: number;
-    /** 昵称 */
-    nickName?: string;
-    /** 所属企业 */
-    firmName?: string;
-    /** 手机号 */
-    phone?: string;
-    /** 微信openid */
-    openid?: string;
-    /** 当前余额 */
-    balance?: number;
-    /** 累计消费 */
-    totalConsumption?: number;
-    /** 创建时间 */
-    createTime?: Date;
+  /** 主键ID */
+  id?: number;
+  /** 昵称 */
+  nickName?: string;
+  /** 所属企业 */
+  firmName?: string;
+  /** 手机号 */
+  phone?: string;
+  /** 微信openid */
+  openid?: string;
+  /** 当前余额 */
+  balance?: number;
+  /** 累计消费 */
+  totalConsumption?: number;
+  /** 创建时间 */
+  createTime?: Date;
 }

+ 1 - 1
src/views/operationsManage/billing-strategy/index.vue

@@ -333,7 +333,7 @@ const contentConfig: IContentConfig<ThirdPartyStationInfoPageQuery> = reactive({
       label: "单位名称",
       prop: "unitName",
       formatter: (row: any) => {
-        return row.unitName || "--";
+        return row.unitName || "平台";
       },
     },
     { label: "省市辖区编码", prop: "areaCode" },

+ 32 - 1
src/views/userManage/user-info/index.vue

@@ -164,7 +164,6 @@ const contentConfig: IContentConfig<UserInfoPageQuery> = reactive({
     {
       label: "操作",
       prop: "operation",
-      width: 100,
       templet: "tool",
       operat: [
         {
@@ -177,6 +176,15 @@ const contentConfig: IContentConfig<UserInfoPageQuery> = reactive({
             size: "small",
           },
         },
+        {
+          name: "refund",
+          text: "退款",
+          attrs: {
+            type: "danger",
+            size: "small",
+          },
+          render: (row: any) => row.balance>0,
+        },
       ],
     },
   ],
@@ -237,6 +245,29 @@ const handleOperateClick = (data: IObject) => {
     handleEditClick(data.row, async () => {
       return await UserInfoAPI.getFormData(data.row.id);
     });
+  } else if (data.name === "refund") {
+    ElMessageBox.confirm("确认要为该用户执行退款操作吗?", "退款确认", {
+      confirmButtonText: "确认",
+      cancelButtonText: "取消",
+      type: "warning",
+      beforeClose: async (action, instance, done) => {
+        if (action === "confirm") {
+          instance.confirmButtonLoading = true;
+          instance.confirmButtonText = "退款中...";
+          try {
+            await UserInfoAPI.refund(data.row.id);
+            ElMessage.success("退款成功");
+            done();
+            contentRef.value?.fetchPageData();
+          } catch (error) {
+            instance.confirmButtonLoading = false;
+            instance.confirmButtonText = "确认";
+          }
+        } else {
+          done();
+        }
+      },
+    });
   }
 };