Browse Source

feat(api): 新增运营管理和用户管理相关API接口

- 新增计费策略API,包括分页查询、表单获取、创建、更新和删除功能
- 新增优惠券模板API,支持分页查询、表单操作及CRUD功能
- 新增充值档位API,提供分页查询、表单处理及基础数据维护
- 新增用户积分兑换规则API,包含状态控制和完整生命周期管理
- 新增企业用户关系API,支持企业和用户关联信息管理
- 新增个人用户信息API,提供用户基础信息和积分管理功能
zouzexu 21 hours ago
parent
commit
11a63d6919

+ 117 - 0
src/api/operationsManage/billing-strategy-api.ts

@@ -0,0 +1,117 @@
+import request from "@/utils/request";
+
+const THIRDPARTYSTATIONINFO_BASE_URL = "/api/v1/price-policy";
+
+const BillingStrategyApi = {
+  /** 获取第三方充电站信息分页数据 */
+  getPage(data: ThirdPartyStationInfoForm) {
+    return request<any, PageResult<ThirdPartyStationInfoPageVO[]>>({
+      url: `${THIRDPARTYSTATIONINFO_BASE_URL}/page`,
+      method: "post",
+      data,
+    });
+  },
+  /**
+   * 获取第三方充电站信息表单数据
+   *
+   * @param id 第三方充电站信息ID
+   * @returns 第三方充电站信息表单数据
+   */
+  getFormData(id: number) {
+    return request<any, ThirdPartyStationInfoForm>({
+      url: `${THIRDPARTYSTATIONINFO_BASE_URL}/${id}/form`,
+      method: "get",
+    });
+  },
+
+  /**
+   *  添加第三方充电站信息
+   *
+   *  @param data 第三方充电站信息表单数据
+   */
+  create(data: ThirdPartyStationInfoForm) {
+    return request({
+      url: `${THIRDPARTYSTATIONINFO_BASE_URL}`,
+      method: "post",
+      data,
+    });
+  },
+
+  /**
+   * 更新第三方充电站信息
+   *
+   * @param id 第三方充电站信息ID
+   * @param data 第三方充电站信息表单数据
+   */
+  update(id: string, data: ThirdPartyStationInfoForm) {
+    return request({
+      url: `${THIRDPARTYSTATIONINFO_BASE_URL}/${id}`,
+      method: "put",
+      data,
+    });
+  },
+
+  /**
+   * 批量删除第三方充电站信息,多个以英文逗号(,)分割
+   *
+   * @param ids 第三方充电站信息ID字符串,多个以英文逗号(,)分割
+   */
+  deleteByIds(ids: string) {
+    return request({
+      url: `${THIRDPARTYSTATIONINFO_BASE_URL}/${ids}`,
+      method: "delete",
+    });
+  },
+};
+
+export default BillingStrategyApi;
+
+/** 第三方充电站信息分页查询参数 */
+export interface ThirdPartyStationInfoPageQuery extends PageQuery {
+  /** 充电站ID */
+  stationId?: string;
+  /** 充电站名称 */
+  stationName?: string;
+  /** 站点状态 */
+  stationStatus?: number;
+}
+
+/** 第三方充电站信息表单对象 */
+export interface ThirdPartyStationInfoForm {
+  /** 充电站ID */
+  stationId?: string;
+  /** 充电站名称 */
+  stationName?: string;
+  /** 建设场所 */
+  construction?: number;
+  /** 营业时间 */
+  busineHours?: string;
+  /** 更新时间 */
+  updateTime?: Date;
+}
+
+/** 第三方充电站信息分页对象 */
+export interface ThirdPartyStationInfoPageVO {
+  /** 充电站ID */
+  stationId?: string;
+  /** 充电站名称 */
+  stationName?: string;
+  /** 省市辖区编码 */
+  areaCode?: string;
+  /** 详细地址 */
+  address?: string;
+  /** 服务电话 */
+  serviceTel?: string;
+  /** 站点类型 */
+  stationType?: number;
+  /** 站点状态 */
+  stationStatus?: number;
+  /** 车位数量 */
+  parkNums?: number;
+  /** 建设场所 */
+  construction?: number;
+  /** 营业时间 */
+  busineHours?: string;
+  /** 更新时间 */
+  updateTime?: Date;
+}

+ 117 - 0
src/api/operationsManage/promotion-coupon-template-api.ts

@@ -0,0 +1,117 @@
+import request from "@/utils/request";
+
+const PROMOTIONCOUPONTEMPLATE_BASE_URL = "/api/v1/promotion-coupon-template";
+
+const PromotionCouponTemplateAPI = {
+    /** 获取优惠劵模板分页数据 */
+    getPage(queryParams?: PromotionCouponTemplatePageQuery) {
+        return request<any, PageResult<PromotionCouponTemplatePageVO[]>>({
+            url: `${PROMOTIONCOUPONTEMPLATE_BASE_URL}/page`,
+            method: "get",
+            params: queryParams,
+        });
+    },
+    /**
+     * 获取优惠劵模板表单数据
+     *
+     * @param id 优惠劵模板ID
+     * @returns 优惠劵模板表单数据
+     */
+    getFormData(id: number) {
+        return request<any, PromotionCouponTemplateForm>({
+            url: `${PROMOTIONCOUPONTEMPLATE_BASE_URL}/${id}/form`,
+            method: "get",
+        });
+    },
+
+    /**
+     *  添加优惠劵模板
+     *
+     *  @param data 优惠劵模板表单数据
+     */
+    create(data: PromotionCouponTemplateForm) {
+        return request({
+            url: `${PROMOTIONCOUPONTEMPLATE_BASE_URL}`,
+            method: "post",
+            data,
+        });
+    },
+
+    /**
+     * 更新优惠劵模板
+     *
+     * @param id 优惠劵模板ID
+     * @param data 优惠劵模板表单数据
+     */
+     update(id: string, data: PromotionCouponTemplateForm) {
+        return request({
+            url: `${PROMOTIONCOUPONTEMPLATE_BASE_URL}/${id}`,
+            method: "put",
+            data,
+        });
+    },
+
+    /**
+     * 批量删除优惠劵模板,多个以英文逗号(,)分割
+     *
+     * @param ids 优惠劵模板ID字符串,多个以英文逗号(,)分割
+     */
+     deleteByIds(ids: string) {
+        return request({
+            url: `${PROMOTIONCOUPONTEMPLATE_BASE_URL}/${ids}`,
+            method: "delete",
+        });
+    }
+}
+
+export default PromotionCouponTemplateAPI;
+
+/** 优惠劵模板分页查询参数 */
+export interface PromotionCouponTemplatePageQuery extends PageQuery {
+    /** 优惠劵名称 */
+    name?: string;
+    /** 上线状态 ( 0-下线 1-上线) */
+    status?: number;
+    /** 创建时间 */
+    createTime?: [string, string];
+}
+
+/** 优惠劵模板表单对象 */
+export interface PromotionCouponTemplateForm {
+    /** 优惠劵名称 */
+    name?:  string;
+    /** 描述 */
+    description?:  string;
+    /** 上线状态 ( 0-下线 1-上线) */
+    status?:  number;
+    /** 发放数量, -1 - 则表示不限制 */
+    totalCount?:  number;
+    /** 每人限领个数, -1 - 则表示不限制 */
+    takeLimitCount?:  number;
+    /** 设置满多少金额可用,单位:分 */
+    usePrice?:  number;
+    /** 优惠金额,单位:分 */
+    discountPrice?:  number;
+    /** 创建时间 */
+    createTime?:  Date;
+}
+
+/** 优惠劵模板分页对象 */
+export interface PromotionCouponTemplatePageVO {
+    /** 优惠劵名称 */
+    name?: string;
+    /** 描述 */
+    description?: string;
+    /** 上线状态 ( 0-下线 1-上线) */
+    status?: number;
+    /** 发放数量, -1 - 则表示不限制 */
+    totalCount?: number;
+    /** 每人限领个数, -1 - 则表示不限制 */
+    takeLimitCount?: number;
+    /** 设置满多少金额可用,单位:分 */
+    usePrice?: number;
+    /** 优惠金额,单位:分 */
+    discountPrice?: number;
+    /** 创建时间 */
+    createTime?: Date;
+}

+ 121 - 0
src/api/operationsManage/recharge-level-api.ts

@@ -0,0 +1,121 @@
+import request from "@/utils/request";
+
+const RECHARGELEVEL_BASE_URL = "/api/v1/recharge-level";
+
+const RechargeLevelAPI = {
+    /** 获取充值档位信息分页数据 */
+    getPage(queryParams?: RechargeLevelPageQuery) {
+        return request<any, PageResult<RechargeLevelPageVO[]>>({
+            url: `${RECHARGELEVEL_BASE_URL}/page`,
+            method: "get",
+            params: queryParams,
+        });
+    },
+    /**
+     * 获取充值档位信息表单数据
+     *
+     * @param id 充值档位信息ID
+     * @returns 充值档位信息表单数据
+     */
+    getFormData(id: number) {
+        return request<any, RechargeLevelForm>({
+            url: `${RECHARGELEVEL_BASE_URL}/${id}/form`,
+            method: "get",
+        });
+    },
+
+    /**
+     *  添加充值档位信息
+     *
+     *  @param data 充值档位信息表单数据
+     */
+    create(data: RechargeLevelForm) {
+        return request({
+            url: `${RECHARGELEVEL_BASE_URL}`,
+            method: "post",
+            data,
+        });
+    },
+
+    /**
+     * 更新充值档位信息
+     *
+     * @param id 充值档位信息ID
+     * @param data 充值档位信息表单数据
+     */
+     update(id: string, data: RechargeLevelForm) {
+        return request({
+            url: `${RECHARGELEVEL_BASE_URL}/${id}`,
+            method: "put",
+            data,
+        });
+    },
+
+    /**
+     * 批量删除充值档位信息,多个以英文逗号(,)分割
+     *
+     * @param ids 充值档位信息ID字符串,多个以英文逗号(,)分割
+     */
+     deleteByIds(ids: string) {
+        return request({
+            url: `${RECHARGELEVEL_BASE_URL}/${ids}`,
+            method: "delete",
+        });
+    }
+}
+
+export default RechargeLevelAPI;
+
+/** 充值档位信息分页查询参数 */
+export interface RechargeLevelPageQuery extends PageQuery {
+    /** 充值档位名称 */
+    name?: string;
+    /** 充值金额 */
+    money?: number;
+    /** 状态 (0-不可用 1-可用) */
+    status?: number;
+}
+
+/** 充值档位信息表单对象 */
+export interface RechargeLevelForm {
+    /** 充值档位名称 */
+    levelName?:  string;
+    /** 充值金额 */
+    levelMoney?:  number;
+    /** 状态 (0-不可用 1-可用) */
+    levelStatus?:  number;
+    /** 充值提示 */
+    levelTips?:  string;
+    /** 创建时间 */
+    createTime?:  Date;
+    /** 充值档位名称 */
+    name?:  string;
+    /** 充值金额 */
+    money?:  number;
+    /** 状态 (0-不可用 1-可用) */
+    status?:  number;
+    /** 充值提示 */
+    tips?:  string;
+}
+
+/** 充值档位信息分页对象 */
+export interface RechargeLevelPageVO {
+    /** 充值档位名称 */
+    levelName?: string;
+    /** 充值金额 */
+    levelMoney?: number;
+    /** 状态 (0-不可用 1-可用) */
+    levelStatus?: number;
+    /** 充值提示 */
+    levelTips?: string;
+    /** 创建时间 */
+    createTime?: Date;
+    /** 充值档位名称 */
+    name?: string;
+    /** 充值金额 */
+    money?: number;
+    /** 状态 (0-不可用 1-可用) */
+    status?: number;
+    /** 充值提示 */
+    tips?: string;
+}

+ 111 - 0
src/api/operationsManage/user-exchange-integral-rule-api.ts

@@ -0,0 +1,111 @@
+import request from "@/utils/request";
+
+const USEREXCHANGEINTEGRALRULE_BASE_URL = "/api/v1/user-exchange-integral-rule";
+
+const UserExchangeIntegralRuleAPI = {
+  /** 获取积分兑换规则分页数据 */
+  getPage(queryParams?: UserExchangeIntegralRulePageQuery) {
+    return request<any, PageResult<UserExchangeIntegralRulePageVO[]>>({
+      url: `${USEREXCHANGEINTEGRALRULE_BASE_URL}/page`,
+      method: "get",
+      params: queryParams,
+    });
+  },
+  /**
+   * 获取积分兑换规则表单数据
+   *
+   * @param id 积分兑换规则ID
+   * @returns 积分兑换规则表单数据
+   */
+  getFormData(id: number) {
+    return request<any, UserExchangeIntegralRuleForm>({
+      url: `${USEREXCHANGEINTEGRALRULE_BASE_URL}/${id}/form`,
+      method: "get",
+    });
+  },
+
+  /**
+   *  添加积分兑换规则
+   *
+   *  @param data 积分兑换规则表单数据
+   */
+  create(data: UserExchangeIntegralRuleForm) {
+    return request({
+      url: `${USEREXCHANGEINTEGRALRULE_BASE_URL}`,
+      method: "post",
+      data,
+    });
+  },
+
+  /**
+   * 是否启用积分规则
+   */
+  enable(id: string, data: UserExchangeIntegralRuleForm) {
+    return request({
+      url: `${USEREXCHANGEINTEGRALRULE_BASE_URL}//editStatus/${id}`,
+      method: "put",
+      data,
+    });
+  },
+  /**
+   * 更新积分兑换规则
+   *
+   * @param id 积分兑换规则ID
+   * @param data 积分兑换规则表单数据
+   */
+  update(id: string, data: UserExchangeIntegralRuleForm) {
+    return request({
+      url: `${USEREXCHANGEINTEGRALRULE_BASE_URL}/${id}`,
+      method: "put",
+      data,
+    });
+  },
+
+  /**
+   * 批量删除积分兑换规则,多个以英文逗号(,)分割
+   *
+   * @param ids 积分兑换规则ID字符串,多个以英文逗号(,)分割
+   */
+  deleteByIds(ids: string) {
+    return request({
+      url: `${USEREXCHANGEINTEGRALRULE_BASE_URL}/${ids}`,
+      method: "delete",
+    });
+  },
+};
+
+export default UserExchangeIntegralRuleAPI;
+
+/** 积分兑换规则分页查询参数 */
+export interface UserExchangeIntegralRulePageQuery extends PageQuery {
+  /** 是否启用(0-停用 1-启用) */
+  status?: number;
+}
+
+/** 积分兑换规则表单对象 */
+export interface UserExchangeIntegralRuleForm {
+  /** 兑换度数基数(按照多少度进行兑换) */
+  degree?: number;
+  /** 1度电获得的积分(如1度1积分) */
+  gainIntegral?: number;
+  /** 是否启用(0-停用 1-启用) */
+  status?: number;
+  /** 创建时间 */
+  createTime?: Date;
+  /** 更新时间 */
+  updateTime?: Date;
+}
+
+/** 积分兑换规则分页对象 */
+export interface UserExchangeIntegralRulePageVO {
+  /** 兑换度数基数(按照多少度进行兑换) */
+  degree?: number;
+  /** 1度电获得的积分(如1度1积分) */
+  gainIntegral?: number;
+  /** 是否启用(0-停用 1-启用) */
+  status?: number;
+  /** 创建时间 */
+  createTime?: Date;
+  /** 更新时间 */
+  updateTime?: Date;
+}

+ 95 - 0
src/api/toBManage/user-firm-api.ts

@@ -0,0 +1,95 @@
+import request from "@/utils/request";
+
+const USERFIRM_BASE_URL = "/api/v1/user-firm";
+
+const UserFirmAPI = {
+    /** 获取企业与用户关系分页数据 */
+    getPage(queryParams?: UserFirmPageQuery) {
+        return request<any, PageResult<UserFirmPageVO[]>>({
+            url: `${USERFIRM_BASE_URL}/page`,
+            method: "get",
+            params: queryParams,
+        });
+    },
+    /**
+     * 获取企业与用户关系表单数据
+     *
+     * @param id 企业与用户关系ID
+     * @returns 企业与用户关系表单数据
+     */
+    getFormData(id: number) {
+        return request<any, UserFirmForm>({
+            url: `${USERFIRM_BASE_URL}/${id}/form`,
+            method: "get",
+        });
+    },
+
+    /**
+     *  添加企业与用户关系
+     *
+     *  @param data 企业与用户关系表单数据
+     */
+    create(data: UserFirmForm) {
+        return request({
+            url: `${USERFIRM_BASE_URL}`,
+            method: "post",
+            data,
+        });
+    },
+
+    /**
+     * 更新企业与用户关系
+     *
+     * @param id 企业与用户关系ID
+     * @param data 企业与用户关系表单数据
+     */
+     update(id: string, data: UserFirmForm) {
+        return request({
+            url: `${USERFIRM_BASE_URL}/${id}`,
+            method: "put",
+            data,
+        });
+    },
+
+    /**
+     * 批量删除企业与用户关系,多个以英文逗号(,)分割
+     *
+     * @param ids 企业与用户关系ID字符串,多个以英文逗号(,)分割
+     */
+     deleteByIds(ids: string) {
+        return request({
+            url: `${USERFIRM_BASE_URL}/${ids}`,
+            method: "delete",
+        });
+    }
+}
+
+export default UserFirmAPI;
+
+/** 企业与用户关系分页查询参数 */
+export interface UserFirmPageQuery extends PageQuery {
+    /** 手机号 */
+    phone?: string;
+    /** 身份 1 管理员 2普通员工 */
+    type?: number;
+}
+
+/** 企业与用户关系表单对象 */
+export interface UserFirmForm {
+    /** 用户id */
+    userId?:  number;
+    /** 手机号 */
+    phone?:  string;
+    /** 身份 1 管理员 2普通员工 */
+    type?:  number;
+}
+
+/** 企业与用户关系分页对象 */
+export interface UserFirmPageVO {
+    /** 用户id */
+    userId?: number;
+    /** 手机号 */
+    phone?: string;
+    /** 身份 1 管理员 2普通员工 */
+    type?: number;
+}

+ 105 - 0
src/api/userManage/user-info-api.ts

@@ -0,0 +1,105 @@
+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",
+        });
+    },
+
+    /**
+     *  添加个人用户信息
+     *
+     *  @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 ids 个人用户信息ID字符串,多个以英文逗号(,)分割
+     */
+     deleteByIds(ids: string) {
+        return request({
+            url: `${USERINFO_BASE_URL}/${ids}`,
+            method: "delete",
+        });
+    }
+}
+
+export default UserInfoAPI;
+
+/** 个人用户信息分页查询参数 */
+export interface UserInfoPageQuery extends PageQuery {
+    /** 所属集团编号 */
+    ecId?: number;
+    /** 手机号 */
+    phone?: string;
+    /** 所属第三方(无则为自营) */
+    groupId?: number;
+}
+
+/** 个人用户信息表单对象 */
+export interface UserInfoForm {
+    /** 所属集团编号 */
+    ecId?:  number;
+    /** 手机号 */
+    phone?:  string;
+    /** 积分 */
+    integralNum?:  number;
+    /** 所属第三方(无则为自营) */
+    groupId?:  number;
+    /** 创建时间 */
+    createTime?:  Date;
+}
+
+/** 个人用户信息分页对象 */
+export interface UserInfoPageVO {
+    /** 所属集团编号 */
+    ecId?: number;
+    /** 手机号 */
+    phone?: string;
+    /** 积分 */
+    integralNum?: number;
+    /** 所属第三方(无则为自营) */
+    groupId?: number;
+    /** 创建时间 */
+    createTime?: Date;
+}

+ 16 - 10
src/components/CURD/PageContent.vue

@@ -162,7 +162,7 @@
                 <el-button
                   v-if="btn.render === undefined || btn.render(scope.row)"
                   v-hasPerm="btn.perm ?? '*:*:*'"
-                  v-bind="btn.attrs"
+                  v-bind="typeof btn.attrs === 'function' ? btn.attrs(scope.row) : btn.attrs"
                   @click="
                     handleOperate({
                       name: btn.name,
@@ -172,7 +172,7 @@
                     })
                   "
                 >
-                  {{ btn.text }}
+                  {{ typeof btn.text === 'function' ? btn.text(scope.row) : btn.text }}
                 </el-button>
               </template>
             </template>
@@ -395,18 +395,24 @@ function hasButtonPerm(action: string): boolean {
 function createToolbar(toolbar: Array<string | IToolsButton>, attr = {}) {
   return toolbar.map((item) => {
     const isString = typeof item === "string";
+    const baseItem = isString ? buttonConfig[item] : item;
+    // 如果 item 是函数形式的 attrs,我们不应该将 attr 合并进去,因为这会覆盖函数
+    const mergedAttrs = typeof item !== "string" && typeof item?.attrs === 'function' 
+      ? item.attrs 
+      : {
+          ...attr,
+          ...(isString ? baseItem.attrs : (item?.attrs || baseItem?.attrs || {})),
+        };
+        
     return {
       name: isString ? item : item?.name || "",
-      text: isString ? buttonConfig[item].text : item?.text,
-      attrs: {
-        ...attr,
-        ...(isString ? buttonConfig[item].attrs : item?.attrs),
-      },
+      text: isString ? baseItem.text : (item?.text || baseItem?.text || ""),
+      attrs: mergedAttrs,
       render: isString ? undefined : (item?.render ?? undefined),
       perm: isString
-        ? getButtonPerm(buttonConfig[item].perm)
-        : item?.perm
-          ? getButtonPerm(item.perm as string)
+        ? getButtonPerm(baseItem.perm)
+        : baseItem?.perm
+          ? getButtonPerm(baseItem.perm as string)
           : "*:*:*",
     };
   });