فهرست منبع

feat(order): 新增充电订单与用户支付订单管理功能

- 新增充电订单信息接口,包括分页查询、表单获取、创建、更新和批量删除功能
- 新增用户支付订单信息接口,支持订单的完整生命周期管理
- 完善权限指令逻辑,增加对角色和权限缺失情况的处理
- 优化多图上传组件,增强文件列表同步机制
- 更新第三方充电站信息接口,调整参数命名并新增站点详情修改功能
zouzexu 1 روز پیش
والد
کامیت
c06bf8dd3b

+ 14 - 3
src/api/equipmentManage/third-party-station-info-api.ts

@@ -14,16 +14,27 @@ const ThirdPartyStationInfoAPI = {
   /**
    * 获取第三方充电站信息表单数据
    *
-   * @param id 第三方充电站信息ID
+   * @param stationId 第三方充电站信息ID
    * @returns 第三方充电站信息表单数据
    */
-  getFormData(id: number) {
+  getFormData(stationId: number) {
     return request<any, ThirdPartyStationInfoForm>({
-      url: `${THIRDPARTYSTATIONINFO_BASE_URL}/${id}/form`,
+      url: `${THIRDPARTYSTATIONINFO_BASE_URL}/detail/${stationId}`,
       method: "get",
     });
   },
 
+  /**
+   * 修改站点详情信息
+   */
+  stationUpdate(data: any){
+    return request({
+      url: `${THIRDPARTYSTATIONINFO_BASE_URL}/detail/update`,
+      method: "post",
+      data,
+    })
+  },
+
   /**
    *  添加第三方充电站信息
    *

+ 237 - 0
src/api/orderManage/charge-order-info-api.ts

@@ -0,0 +1,237 @@
+import request from "@/utils/request";
+
+const CHARGEORDERINFO_BASE_URL = "/api/v1/charge-order-info";
+
+const ChargeOrderInfoAPI = {
+  /** 获取充电订单信息分页数据 */
+  getPage(queryParams?: ChargeOrderInfoPageQuery) {
+    return request<any, PageResult<ChargeOrderInfoPageVO[]>>({
+      url: `${CHARGEORDERINFO_BASE_URL}/page`,
+      method: "get",
+      params: queryParams,
+    });
+  },
+  /**
+   * 获取充电订单信息表单数据
+   *
+   * @param id 充电订单信息ID
+   * @returns 充电订单信息表单数据
+   */
+  getFormData(id: number) {
+    return request<any, ChargeOrderInfoForm>({
+      url: `${CHARGEORDERINFO_BASE_URL}/${id}/form`,
+      method: "get",
+    });
+  },
+
+  /**
+   *  添加充电订单信息
+   *
+   *  @param data 充电订单信息表单数据
+   */
+  create(data: ChargeOrderInfoForm) {
+    return request({
+      url: `${CHARGEORDERINFO_BASE_URL}`,
+      method: "post",
+      data,
+    });
+  },
+
+  /**
+   * 更新充电订单信息
+   *
+   * @param id 充电订单信息ID
+   * @param data 充电订单信息表单数据
+   */
+  update(id: string, data: ChargeOrderInfoForm) {
+    return request({
+      url: `${CHARGEORDERINFO_BASE_URL}/${id}`,
+      method: "put",
+      data,
+    });
+  },
+
+  /**
+   * 批量删除充电订单信息,多个以英文逗号(,)分割
+   *
+   * @param ids 充电订单信息ID字符串,多个以英文逗号(,)分割
+   */
+  deleteByIds(ids: string) {
+    return request({
+      url: `${CHARGEORDERINFO_BASE_URL}/${ids}`,
+      method: "delete",
+    });
+  },
+};
+
+export default ChargeOrderInfoAPI;
+
+/** 充电订单信息分页查询参数 */
+export interface ChargeOrderInfoPageQuery extends PageQuery {
+  /** 订单类型 1 个人订单 2 集团订单 */
+  orderType?: number;
+  /** 充电桩编号 */
+  equipmentId?: string;
+  /** 第三方充电订单号 */
+  chargeOrderNo?: string;
+  /** 状态0待启动 1 充电中 2 结算中 3 已完成, 5未成功充电 */
+  status?: number;
+  /** 1 主动停止 2 充满停止 3 余额不足停止, 4电桩按钮停止 */
+  stopType?: number;
+  /** 请求启动充电的手机号 */
+  phoneNum?: string;
+  /** 补缴状态  0.无需补缴  1.待补缴  2.已补缴 */
+  maspStatus?: number;
+}
+
+/** 充电订单信息表单对象 */
+export interface ChargeOrderInfoForm {
+  /** 订单类型 1 个人订单 2 集团订单 */
+  orderType?: number;
+  /** 充电桩编号 */
+  equipmentId?: string;
+  /** 第三方充电订单号 */
+  chargeOrderNo?: string;
+  /** 充电开始时间 */
+  startTime?: string;
+  /** 充电结束时间 */
+  endTime?: string;
+  /** 充电时间:秒 */
+  chargeTime?: number;
+  /** 状态0待启动 1 充电中 2 结算中 3 已完成, 5未成功充电 */
+  status?: number;
+  /** 第三方充电消费总额 */
+  thirdPartyTotalCost?: number;
+  /** 第三方充电服务费 */
+  thirdPartyServerfee?: number;
+  /** 第三方充电金额 */
+  thirdPartyElecfee?: number;
+  /** 实际充电度数(单位:0.001 kw/h) */
+  totalCharge?: number;
+  /** 平台实际收取金额 */
+  realCost?: number;
+  /** 平台总服务费 */
+  realServiceCost?: number;
+  /** 1 主动停止 2 充满停止 3 余额不足停止, 4电桩按钮停止 */
+  stopType?: number;
+  /** 请求启动充电的手机号 */
+  phoneNum?: string;
+  /** 车牌号( 停车减免必传,格式确保正确) */
+  plateNum?: string;
+  /** 充电结束原因 */
+  stopReason?: string;
+  /** 推送:充电明细信息 */
+  chargeDetails?: string;
+  /** 第三方充电站id */
+  thirdPartyStationId?: string;
+  /** 预充值金额 */
+  preAmt?: number;
+  /** 平台预扣服务费 */
+  realPredictServiceCost?: number;
+  /** 补缴金额(智停) */
+  maspAmount?: number;
+  /** 平台补缴金额 */
+  maspRealAmount?: number;
+  /** 需要补缴的总金额 */
+  totalMaspMoney?: number;
+  /** 补缴状态  0.无需补缴  1.待补缴  2.已补缴 */
+  maspStatus?: number;
+  /** 补缴时间 */
+  maspTime?: string;
+  /** 补缴描述(默认:系统扣除) */
+  maspDesc?: string;
+  /** 优惠金额 */
+  discountMoney?: number;
+  /** 优惠描述(前端展示为优惠描述+优惠金额) */
+  discountDesc?: string;
+  /** 优惠活动ID */
+  discountInfoId?: number;
+  /** 按平台计费规则,实际第三方收取的服务费 */
+  realThirdCost?: number;
+  /** 企业id */
+  firmId?: number;
+  /** 企业专享优惠价 */
+  firmPrice?: number;
+  /** 优惠券金额 */
+  couponPrice?: number;
+  /** 备注 */
+  remark?: string;
+  /** 创建时间 */
+  createTime?: Date;
+}
+
+/** 充电订单信息分页对象 */
+export interface ChargeOrderInfoPageVO {
+  /** 订单类型 1 个人订单 2 集团订单 */
+  orderType?: number;
+  /** 充电桩编号 */
+  equipmentId?: string;
+  /** 第三方充电订单号 */
+  chargeOrderNo?: string;
+  /** 充电开始时间 */
+  startTime?: string;
+  /** 充电结束时间 */
+  endTime?: string;
+  /** 充电时间:秒 */
+  chargeTime?: number;
+  /** 状态0待启动 1 充电中 2 结算中 3 已完成, 5未成功充电 */
+  status?: number;
+  /** 第三方充电消费总额 */
+  thirdPartyTotalCost?: number;
+  /** 第三方充电服务费 */
+  thirdPartyServerfee?: number;
+  /** 第三方充电金额 */
+  thirdPartyElecfee?: number;
+  /** 实际充电度数(单位:0.001 kw/h) */
+  totalCharge?: number;
+  /** 平台实际收取金额 */
+  realCost?: number;
+  /** 平台总服务费 */
+  realServiceCost?: number;
+  /** 1 主动停止 2 充满停止 3 余额不足停止, 4电桩按钮停止 */
+  stopType?: number;
+  /** 请求启动充电的手机号 */
+  phoneNum?: string;
+  /** 车牌号( 停车减免必传,格式确保正确) */
+  plateNum?: string;
+  /** 充电结束原因 */
+  stopReason?: string;
+  /** 推送:充电明细信息 */
+  chargeDetails?: string;
+  /** 第三方充电站id */
+  thirdPartyStationId?: string;
+  /** 预充值金额 */
+  preAmt?: number;
+  /** 平台预扣服务费 */
+  realPredictServiceCost?: number;
+  /** 补缴金额(智停) */
+  maspAmount?: number;
+  /** 平台补缴金额 */
+  maspRealAmount?: number;
+  /** 需要补缴的总金额 */
+  totalMaspMoney?: number;
+  /** 补缴状态  0.无需补缴  1.待补缴  2.已补缴 */
+  maspStatus?: number;
+  /** 补缴时间 */
+  maspTime?: string;
+  /** 补缴描述(默认:系统扣除) */
+  maspDesc?: string;
+  /** 优惠金额 */
+  discountMoney?: number;
+  /** 优惠描述(前端展示为优惠描述+优惠金额) */
+  discountDesc?: string;
+  /** 优惠活动ID */
+  discountInfoId?: number;
+  /** 按平台计费规则,实际第三方收取的服务费 */
+  realThirdCost?: number;
+  /** 企业id */
+  firmId?: number;
+  /** 企业专享优惠价 */
+  firmPrice?: number;
+  /** 优惠券金额 */
+  couponPrice?: number;
+  /** 备注 */
+  remark?: string;
+  /** 创建时间 */
+  createTime?: Date;
+}

+ 125 - 0
src/api/orderManage/user-order-info-api.ts

@@ -0,0 +1,125 @@
+import request from "@/utils/request";
+
+const USERORDERINFO_BASE_URL = "/api/v1/user-order-info";
+
+const UserOrderInfoAPI = {
+    /** 获取用户支付订单信息分页数据 */
+    getPage(queryParams?: UserOrderInfoPageQuery) {
+        return request<any, PageResult<UserOrderInfoPageVO[]>>({
+            url: `${USERORDERINFO_BASE_URL}/page`,
+            method: "get",
+            params: queryParams,
+        });
+    },
+    /**
+     * 获取用户支付订单信息表单数据
+     *
+     * @param id 用户支付订单信息ID
+     * @returns 用户支付订单信息表单数据
+     */
+    getFormData(id: number) {
+        return request<any, UserOrderInfoForm>({
+            url: `${USERORDERINFO_BASE_URL}/${id}/form`,
+            method: "get",
+        });
+    },
+
+    /**
+     *  添加用户支付订单信息
+     *
+     *  @param data 用户支付订单信息表单数据
+     */
+    create(data: UserOrderInfoForm) {
+        return request({
+            url: `${USERORDERINFO_BASE_URL}`,
+            method: "post",
+            data,
+        });
+    },
+
+    /**
+     * 更新用户支付订单信息
+     *
+     * @param id 用户支付订单信息ID
+     * @param data 用户支付订单信息表单数据
+     */
+     update(id: string, data: UserOrderInfoForm) {
+        return request({
+            url: `${USERORDERINFO_BASE_URL}/${id}`,
+            method: "put",
+            data,
+        });
+    },
+
+    /**
+     * 批量删除用户支付订单信息,多个以英文逗号(,)分割
+     *
+     * @param ids 用户支付订单信息ID字符串,多个以英文逗号(,)分割
+     */
+     deleteByIds(ids: string) {
+        return request({
+            url: `${USERORDERINFO_BASE_URL}/${ids}`,
+            method: "delete",
+        });
+    }
+}
+
+export default UserOrderInfoAPI;
+
+/** 用户支付订单信息分页查询参数 */
+export interface UserOrderInfoPageQuery extends PageQuery {
+    /** 订单状态 1 待支付  2 已支付 3 已取消 4 已退款 */
+    orderStatus?: number;
+}
+
+/** 用户支付订单信息表单对象 */
+export interface UserOrderInfoForm {
+    /** 订单编号 */
+    orderNo?:  string;
+    /** 订单金额 */
+    orderMoney?:  number;
+    /** 订单剩余金额 */
+    lastMoney?:  number;
+    /** 支付时间 */
+    payTime?:  string;
+    /** 第三方支付单号 */
+    outTradeNo?:  string;
+    /** 订单状态 1 待支付  2 已支付 3 已取消 4 已退款 */
+    orderStatus?:  number;
+    /** 订单类型 1 微信 2 第三方 */
+    orderType?:  number;
+    /** 退款金额 */
+    refundMoney?:  number;
+    /** 退款时间 */
+    refundTime?:  string;
+    /** 备注 */
+    remark?:  string;
+    /** 创建时间 */
+    createTime?:  number;
+}
+
+/** 用户支付订单信息分页对象 */
+export interface UserOrderInfoPageVO {
+    /** 订单编号 */
+    orderNo?: string;
+    /** 订单金额 */
+    orderMoney?: number;
+    /** 订单剩余金额 */
+    lastMoney?: number;
+    /** 支付时间 */
+    payTime?: string;
+    /** 第三方支付单号 */
+    outTradeNo?: string;
+    /** 订单状态 1 待支付  2 已支付 3 已取消 4 已退款 */
+    orderStatus?: number;
+    /** 订单类型 1 微信 2 第三方 */
+    orderType?: number;
+    /** 退款金额 */
+    refundMoney?: number;
+    /** 退款时间 */
+    refundTime?: string;
+    /** 备注 */
+    remark?: string;
+    /** 创建时间 */
+    createTime?: number;
+}

+ 30 - 0
src/components/Upload/MultiImageUpload.vue

@@ -93,6 +93,36 @@ const modelValue = defineModel("modelValue", {
 
 const fileList = ref<UploadUserFile[]>([]);
 
+// 监听 modelValue 的变化,同步更新 fileList
+watch(
+  () => modelValue.value,
+  (newVal) => {
+    if (newVal && Array.isArray(newVal)) {
+      // 只有当新的值与当前 fileList 不一致时才更新
+      const newFileList = newVal.map((url) => ({ url: getFullImageUrl(url) })) as UploadUserFile[];
+      // 比较数组内容而不是引用
+      const currentUrls = fileList.value.map(file => file.url || '');
+      const newUrls = newFileList.map(file => file.url || '');
+      
+      // 比较两个数组是否相等
+      const arraysEqual = (a: string[], b: string[]) => {
+        if (a.length !== b.length) return false;
+        for (let i = 0; i < a.length; i++) {
+          if (a[i] !== b[i]) return false;
+        }
+        return true;
+      };
+      
+      if (!arraysEqual(currentUrls, newUrls)) {
+        fileList.value = newFileList;
+      }
+    } else {
+      fileList.value = [];
+    }
+  },
+  { immediate: true }
+);
+
 /**
  * 删除图片
  */

+ 17 - 1
src/directives/permission/index.ts

@@ -19,6 +19,14 @@ export const hasPerm: Directive = {
 
     const { roles, perms } = useUserStore().userInfo;
 
+    // 检查 roles 和 perms 是否存在,如果不存在则认为没有权限
+    if (!roles || !perms) {
+      if (el.parentNode) {
+        el.parentNode.removeChild(el);
+      }
+      return;
+    }
+
     // 超级管理员拥有所有权限,如果是"*:*:*"权限标识,则不需要进行权限校验
     if (roles.includes(ROLE_ROOT) || requiredPerms.includes("*:*:*")) {
       return;
@@ -52,6 +60,14 @@ export const hasRole: Directive = {
 
     const { roles } = useUserStore().userInfo;
 
+    // 检查 roles 是否存在,如果不存在则认为没有权限
+    if (!roles) {
+      if (el.parentNode) {
+        el.parentNode.removeChild(el);
+      }
+      return;
+    }
+
     // 检查是否有对应角色权限
     const hasAuth = Array.isArray(requiredRoles)
       ? requiredRoles.some((role) => roles.includes(role))
@@ -62,4 +78,4 @@ export const hasRole: Directive = {
       el.parentNode.removeChild(el);
     }
   },
-};
+};