Browse Source

feat(order): 添加充电订单修复功能并优化字典组件

- 添加充电订单修复API接口实现
- 新增刷新指定字典项功能
- 修改充电桩编号字段为终端编号
- 在订单列表添加修复操作按钮
- 实现订单修复确认弹窗和加载状态
- 修复字典标签组件显示逻辑
- 添加调试日志输出
- 优化金额显示格式
- 更新开发环境API地址配置
zouzexu 2 ngày trước cách đây
mục cha
commit
3493a3aa3e

+ 2 - 2
.env.development

@@ -7,8 +7,8 @@ VITE_APP_BASE_API=/dev-api
 
 # 接口地址
 #VITE_APP_API_URL=https://cd.admin.zswlgz.com # 线上
-VITE_APP_API_URL=http://192.168.0.11:8989    # 本地
-#VITE_APP_API_URL=http://192.168.0.217:8989    # 本地
+#VITE_APP_API_URL=http://192.168.0.11:8989    # 本地
+VITE_APP_API_URL=http://192.168.0.217:8989    # 本地
 
 # WebSocket 端点(不配置则关闭),线上 ws://api.youlai.tech/ws ,本地 ws://localhost:8989/ws
 VITE_APP_WS_ENDPOINT=

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

@@ -62,6 +62,16 @@ const ChargeOrderInfoAPI = {
       responseType: "blob",
     });
   },
+  /**
+   * 修复充电订单信息
+   */
+  orderFixes(data: ChargeOrderInfoForm) {
+    return request<any, Blob>({
+      url: `${CHARGEORDERINFO_BASE_URL}/repair-by-order-no/${data}`,
+      method: "post",
+      data,
+    });
+  },
 
   /**
    * 批量删除充电订单信息,多个以英文逗号(,)分割

+ 8 - 1
src/components/Dict/DictLabel.vue

@@ -33,10 +33,17 @@ const getLabelAndTagByValue = async (dictCode: string, value: any) => {
   await dictStore.loadDictItems(dictCode);
   // 从缓存中获取字典数据
   const dictItems = dictStore.getDictItems(dictCode);
+
+  // 调试日志
+  console.log(`${dictCode} 字典数据:`, dictItems);
+  console.log(`${dictCode} 查找值:`, value);
+
   // 查找对应的字典项
   const dictItem = dictItems.find((item) => item.value == value);
+  console.log(`${dictCode} 找到的字典项:`, dictItem);
+
   return {
-    label: dictItem?.label || "",
+    label: dictItem?.label || `无`,
     tagType: dictItem?.tagType,
   };
 };

+ 3 - 0
src/components/Dict/index.vue

@@ -119,5 +119,8 @@ function handleChange(val: any) {
 onMounted(async () => {
   await dictStore.loadDictItems(props.code);
   options.value = dictStore.getDictItems(props.code);
+  
+  // 调试日志
+  console.log(`${props.code} 字典选项:`, options.value);
 });
 </script>

+ 12 - 0
src/store/modules/dict-store.ts

@@ -66,11 +66,23 @@ export const useDictStore = defineStore("dict", () => {
     dictCache.value = {};
   };
 
+  /**
+   * 刷新指定字典项
+   * @param dictCode 字典编码
+   */
+  const refreshDictItems = async (dictCode: string) => {
+    // 先移除缓存
+    removeDictItem(dictCode);
+    // 重新加载
+    await loadDictItems(dictCode);
+  };
+
   return {
     loadDictItems,
     getDictItems,
     removeDictItem,
     clearDictCache,
+    refreshDictItems,
   };
 });
 

+ 49 - 6
src/views/orderManage/charge-order-info/index.vue

@@ -107,6 +107,7 @@
 
 <script setup lang="ts">
 import BillingStrategyAPI from "@/api/operationsManage/billing-strategy-api";
+import { ElLoading } from "element-plus";
 defineOptions({ name: "ChargeOrderInfo" });
 import ChargeOrderInfoAPI, {
   ChargeOrderInfoForm,
@@ -185,10 +186,10 @@ const searchConfig: ISearchConfig = reactive({
     },
     {
       type: "input",
-      label: "充电桩编号",
-      prop: "equipmentId",
+      label: "终端编号",
+      prop: "connectorId",
       attrs: {
-        placeholder: "充电桩编号",
+        placeholder: "终端编号",
         clearable: true,
         style: { width: "200px" },
       },
@@ -320,6 +321,7 @@ const contentConfig: IContentConfig<ChargeOrderInfoPageQuery> = reactive({
     { label: "充电站名称", prop: "stationName" },
     { label: "设备名称", prop: "connectorName" },
     { label: "充电桩编号", prop: "equipmentId" },
+    { label: "终端编号", prop: "connectorId" },
     { label: "充电开始时间", prop: "startTime" },
     { label: "充电结束时间", prop: "endTime" },
     {
@@ -328,6 +330,7 @@ const contentConfig: IContentConfig<ChargeOrderInfoPageQuery> = reactive({
       templet: "custom",
       slotName: "chargeTime",
     },
+    { label: "车辆实时充电电量", prop: "soc" },
     {
       label: "订单状态", //0待启动 1 充电中 2 结算中 3 已完成, 5未成功充电
       prop: "status",
@@ -361,7 +364,18 @@ const contentConfig: IContentConfig<ChargeOrderInfoPageQuery> = reactive({
       label: "操作",
       prop: "operation",
       templet: "tool",
-      operat: ["edit"],
+      operat: [
+        "edit",
+        {
+          name: "fixes",
+          text: "修复",
+          attrs: {
+            type: "danger",
+            link: true,
+            size: "small",
+          },
+        },
+      ],
     },
   ],
 });
@@ -434,6 +448,35 @@ const handleOperateClick = (data: IObject) => {
       return await ChargeOrderInfoAPI.getFormData(data.row.id);
     });
   }
+  if (data.name === "fixes") {
+    ElMessageBox.confirm(`确认要修复充电订单 ${data.row.chargeOrderNo} 吗?`, "修复订单确认", {
+      confirmButtonText: "确定",
+      cancelButtonText: "取消",
+      type: "warning",
+    })
+      .then(() => {
+        const loading = ElLoading.service({
+          lock: true,
+          text: "正在修复订单...",
+          background: "rgba(0, 0, 0, 0.7)",
+        });
+        ChargeOrderInfoAPI.orderFixes(data.row.chargeOrderNo)
+          .then((res: any) => {
+            ElMessage.success(res);
+            // 刷新列表,保持在当前分页
+            contentRef.value?.handleRefresh(false);
+          })
+          .catch((error) => {
+            ElMessage.error(error?.message || "订单修复失败");
+          })
+          .finally(() => {
+            loading.close();
+          });
+      })
+      .catch(() => {
+        // 用户取消操作,不做任何提示
+      });
+  }
 };
 
 // 处理工具栏按钮点击(删除等)
@@ -443,10 +486,10 @@ const handleToolbarClick = (name: string) => {
 
 // 格式化秒数为时分秒
 const formatSeconds = (seconds: number) => {
-  if (!seconds && seconds !== 0) return '-';
+  if (!seconds && seconds !== 0) return "-";
   const hours = Math.floor(seconds / 3600);
   const minutes = Math.floor((seconds % 3600) / 60);
   const secs = seconds % 60;
-  return `${String(hours).padStart(2, '0')}:${String(minutes).padStart(2, '0')}:${String(secs).padStart(2, '0')}`;
+  return `${String(hours).padStart(2, "0")}:${String(minutes).padStart(2, "0")}:${String(secs).padStart(2, "0")}`;
 };
 </script>

+ 2 - 2
src/views/userManage/user-info/index.vue

@@ -21,7 +21,7 @@
       @sort-change="handleSortChange"
     >
       <template #balance="scope">
-        <span class="money-text primary">¥ {{ formatMoney(scope.row.balance) }}</span>
+        <span class="money-text primary">¥ {{ scope.row.balance }}</span>
       </template>
       <template #totalConsumption="scope">
         <span class="money-text warning">¥ {{ formatMoney(scope.row.totalConsumption) }}</span>
@@ -75,7 +75,7 @@
           <el-table-column prop="type" label="退款类型" width="120">
             <template #default="{ row }">
               <el-tag :type="row.type === 1 ? 'warning' : 'info'">
-                {{ row.type === 1 ? '主动退款' : '用户申请退款' }}
+                {{ row.type === 1 ? "主动退款" : "用户申请退款" }}
               </el-tag>
             </template>
           </el-table-column>