Sfoglia il codice sorgente

feat(user): 添加用户退款导出功能

- 在用户管理页面添加导出日期区间弹窗
- 集成用户订单信息API模块
- 实现带日期筛选的退款数据导出功能
- 配置表格工具栏显示导出按钮
- 添加用户退款订单信息导出接口
- 优化导出流程支持时间范围筛选
zouzexu 1 settimana fa
parent
commit
97fb467038

+ 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=

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

@@ -1,4 +1,5 @@
 import request from "@/utils/request";
+import { ChargeOrderInfoForm } from "@/api/orderManage/charge-order-info-api";
 
 const USERINFO_BASE_URL = "/api/v1/user-info";
 
@@ -85,6 +86,18 @@ const UserInfoAPI = {
       params: queryParams,
     });
   },
+  /**
+   * 导出充电订单信息
+   * @param data
+   */
+  exportExcel(data: UserInfoForm) {
+    return request<any, Blob>({
+      url: `/api/v1/user-refunds-order-info/export`,
+      method: "post",
+      data,
+      responseType: "blob",
+    });
+  },
 };
 
 export default UserInfoAPI;

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

@@ -113,6 +113,35 @@
       </div>
     </el-dialog>
 
+    <!-- 导出日期区间弹窗 -->
+    <el-dialog
+      v-model="exportDateDialogVisible"
+      title="退款导出"
+      width="420px"
+      :close-on-click-modal="false"
+      :align-center="true"
+    >
+      <el-form label-width="90px" style="padding: 8px 16px 0">
+        <el-form-item label="区间选择:">
+          <el-date-picker
+            v-model="exportDateRange"
+            type="daterange"
+            range-separator="至"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期"
+            value-format="YYYY-MM-DD"
+            style="width: 100%"
+          />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <el-button @click="exportDateDialogVisible = false">取 消</el-button>
+        <el-button type="primary" :loading="exportBtnLoading" @click="handleExportConfirm">
+          确 定
+        </el-button>
+      </template>
+    </el-dialog>
+
     <!-- 退款日志抽屉 -->
     <el-dialog
       v-model="refundLogDrawerVisible"
@@ -136,6 +165,8 @@
 </template>
 
 <script setup lang="ts">
+import UserOrderInfoAPI from "@/api/orderManage/user-order-info-api";
+
 defineOptions({ name: "UserInfo" });
 
 import UserInfoAPI, {
@@ -158,7 +189,6 @@ const {
   handleAddClick,
   handleEditClick,
   handleSubmitClick,
-  handleExportClick,
   handleSearchClick,
   handleFilterChange,
 } = usePage();
@@ -226,6 +256,8 @@ const contentConfig: IContentConfig<UserInfoPageQuery> = reactive({
   pk: "id",
   // 列表查询接口
   indexAction: UserInfoAPI.getPage,
+  //退款导出
+  exportAction: UserInfoAPI.exportExcel,
   // 数据解析函数
   parseData(res: any) {
     return {
@@ -241,6 +273,7 @@ const contentConfig: IContentConfig<UserInfoPageQuery> = reactive({
     pageSizes: [10, 20, 30, 50],
   },
   // 工具栏配置
+  toolbar: ["export"],
   defaultToolbar: ["refresh", "filter"],
   // 表格列配置
   cols: [
@@ -386,6 +419,40 @@ const handleOperateClick = (data: IObject) => {
   }
 };
 
+// ==================== 导出日期区间弹窗相关 ====================
+const exportDateDialogVisible = ref(false);
+const exportDateRange = ref<[string, string] | null>(null);
+const exportBtnLoading = ref(false);
+
+// 覆盖 usePage 默认的 handleExportClick,先弹窗选择日期
+const handleExportClick = () => {
+  exportDateRange.value = null;
+  exportDateDialogVisible.value = true;
+};
+
+// 确认导出
+const handleExportConfirm = () => {
+  const queryParams = searchRef.value?.getQueryParams() ?? {};
+  const filteredQuery: Record<string, any> = {};
+  for (const key in queryParams) {
+    const value = queryParams[key];
+    if (value !== "" && value !== null && value !== undefined) {
+      filteredQuery[key] = value;
+    }
+  }
+  if (exportDateRange.value && exportDateRange.value.length === 2) {
+    filteredQuery.startTime = `${exportDateRange.value[0]} 00:00:00`;
+    filteredQuery.endTime = `${exportDateRange.value[1]} 23:59:59`;
+  }
+  exportBtnLoading.value = true;
+  contentRef.value?.exportPageData(filteredQuery);
+  // exportPageData 内部异步处理,此处延迟关闭弹窗
+  setTimeout(() => {
+    exportBtnLoading.value = false;
+    exportDateDialogVisible.value = false;
+  }, 1500);
+};
+
 // 处理工具栏按钮点击
 const handleToolbarClick = (name: string) => {
   console.log(name);