9 Commits fa5d61b9fd ... 342a26dc89

Tác giả SHA1 Thông báo Ngày
  wangxy 342a26dc89 需求 10 giờ trước cách đây
  wangxy 4b3520aa9f Merge remote-tracking branch 'origin/红德堂' into 红德堂-test 3 ngày trước cách đây
  wangxy 2ed246b2de 直播调试 3 ngày trước cách đây
  Long 4dc1f49941 红德堂-项目会员删除修改 4 ngày trước cách đây
  wangxy 473c7ec857 直播调试 6 ngày trước cách đây
  wangxy c997863fdf Revert "直播设置" 1 tuần trước cách đây
  wangxy 51507cd1fb Reapply "直播设置" 1 tuần trước cách đây
  wangxy 169578da34 Revert "直播设置" 1 tuần trước cách đây
  wangxy 1d27b46c05 直播设置 1 tuần trước cách đây

+ 1 - 1
.env.prod-hdt

@@ -31,7 +31,7 @@ VUE_APP_VIDEO_URL = https://bdhdtvolcengine.ylrztop.com
 #火山云视频点播空间名
 VUE_APP_HSY_SPACE = bdhdt-2114522511
 #直播解码路径
-LIVE_PATH = /live
+VUE_APP_LIVE_PATH = /live
 
 # 开发环境配置
 ENV = 'development'

+ 8 - 8
src/api/course/userCourseComplaintRecord.js

@@ -34,14 +34,14 @@ export function getUserCourseComplaintRecordByUserId(userId) {
 //   })
 // }
 //
-// // 修改看课投诉记录
-// export function updateUserCourseComplaintRecord(data) {
-//   return request({
-//     url: '/course/userCourseComplaintRecord',
-//     method: 'put',
-//     data: data
-//   })
-// }
+// 修改看课投诉记录
+export function updateUserCourseComplaintRecord(data) {
+  return request({
+    url: '/course/userCourseComplaintRecord',
+    method: 'put',
+    data: data
+  })
+}
 
 // 删除看课投诉记录
 export function delUserCourseComplaintRecord(recordId) {

+ 2 - 1
src/api/his/user.js

@@ -75,7 +75,8 @@ export function exportUser(query) {
 export function exportOpenId() {
   return request({
     url: '/his/user/exportOpenId',
-    method: 'get'
+    method: 'post',
+    responseType: 'blob'
   })
 }
 

+ 2 - 2
src/api/live/liveData.js

@@ -28,9 +28,9 @@ export function getLiveDataDetailBySql(liveId) {
   })
 }
 
-export function getLiveUserDetailListBySql(liveId) {
+export function getLiveUserDetailListBySql(liveId, pageNum, pageSize) {
   return request({
-    url: '/liveData/liveData/getLiveUserDetailListBySql?liveId=' + liveId,
+    url: '/liveData/liveData/getLiveUserDetailListBySql?liveId=' + liveId + '&pageNum=' + (pageNum || 1) + '&pageSize=' + (pageSize || 100),
     method: 'get'
   })
 }

+ 1 - 1
src/components/LiveVideoUpload/index.vue

@@ -209,7 +209,7 @@ export default {
     async uploadVideoToTxPcdn() {
       try {
         const file = this.fileList[0].raw;
-        const data = await uploadObject(file, this.updateTxProgress, this.type);
+        const data = await uploadObject(file, this.updateTxProgress, 3);
         console.log("腾讯COS返回========>", data);
         console.log("isPrivate=======>", this.isPrivate)
         let line_1 = '';

+ 174 - 1
src/views/course/userCourseComplaintRecord/index.vue

@@ -19,6 +19,21 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
+      <el-form-item label="投诉状态" prop="recordStatus">
+        <el-select
+          v-model="queryParams.recordStatus"
+          placeholder="请选择投诉状态"
+          clearable
+          size="small"          style="width: 140px"
+        >
+          <el-option
+            v-for="dict in statusOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </el-select>
+      </el-form-item>
       <el-form-item label="创建时间" prop="dateRange">
         <el-date-picker
           v-model="dateRange"
@@ -93,6 +108,11 @@
       <el-table-column label="所属小节" align="center" prop="title" />
       <el-table-column label="创建时间" align="center" prop="createTime" width="160px" />
       <el-table-column label="看课状态" align="center" prop="status" />
+      <el-table-column label="投诉状态" align="center" prop="recordStatus">
+        <template slot-scope="scope">
+          {{ statusFormat(scope.row.recordStatus) }}
+        </template>
+      </el-table-column>
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
 <!--          <el-button-->
@@ -130,6 +150,14 @@
             @click="handleAddBlack(scope.row)"
             v-if="scope.row.status !== '已拉黑' "
           >拉黑</el-button>
+          <!-- 新增修改状态按钮 -->
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdateStatus(scope.row)"
+            v-hasPermi="['course:userCourseComplaintRecord:edit']"
+          >修改状态</el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -191,6 +219,7 @@
       <el-table border :data="formQwList">
         <el-table-column label="员工账号" align="center" prop="userId" />
         <el-table-column label="员工名称" align="center" prop="qwUserName" />
+        <el-table-column label="销售公司" align="center" prop="company" />
         <el-table-column label="销售账号" align="center" prop="userName" />
         <el-table-column label="销售昵称" align="center" prop="nickName" />
         <el-table-column label="客户名称" align="center" prop="name" />
@@ -210,6 +239,38 @@
         <el-table-column label="描述信息" align="center" prop="description" />
       </el-table>
     </el-dialog>
+
+    <el-dialog :title="title" :visible.sync="openUpdateStatus" width="500px" append-to-body>
+      <el-form ref="updateStatusForm" :model="updateStatusForm" :rules="updateStatusRules" label-width="100px">
+        <el-form-item label="投诉状态" prop="recordStatus">
+          <el-select
+            v-model="updateStatusForm.recordStatus"
+            placeholder="请选择投诉状态"
+            @change="handleStatusChange"
+          >
+            <el-option
+              v-for="dict in statusOptions"
+              :key="dict.dictValue"
+              :label="dict.dictLabel"
+              :value="dict.dictValue"
+            />
+          </el-select>
+        </el-form-item>
+        <!-- 处理结果字段,仅在状态为"已处理"时显示 -->
+        <el-form-item label="处理结果" prop="handleResult" v-if="isHandleResultVisible">
+          <el-input
+            v-model="updateStatusForm.handleResult"
+            type="textarea"
+            :rows="4"
+            placeholder="请输入处理结果"
+          />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="cancelUpdateStatus">取 消</el-button>
+        <el-button type="primary" @click="submitUpdateStatus">确 定</el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
@@ -219,7 +280,8 @@ import {
   delUserCourseComplaintRecord,
   exportUserCourseComplaintRecord,
   getUserCourseComplaintRecord,
-  getUserCourseComplaintRecordByUserId
+  getUserCourseComplaintRecordByUserId,
+  updateUserCourseComplaintRecord
 } from '@/api/course/userCourseComplaintRecord'
 import { addBlack } from "@/api/course/courseWatchComment";
 export default {
@@ -247,10 +309,22 @@ export default {
       // 是否显示弹出层
       open: false,
       openQw: false,
+      // 修改状态对话框
+      openUpdateStatus: false,
       // 图片列表
       imageList: [],
       // 日期范围
       dateRange: [],
+      // 状态选项(字典)
+      statusOptions: [],
+      // 更新状态表单
+      updateStatusForm: {
+        recordId: null,
+        recordStatus: null,
+        handleResult: null
+      },
+      // 是否显示处理结果字段
+      isHandleResultVisible: false,
       // 查询参数
       queryParams: {
         pageNum: 1,
@@ -260,6 +334,7 @@ export default {
         complaintTypeName: null,
         startCreateTime: null,
         endCreateTime: null,
+        recordStatus: null,
         // complaintTypeId: null,
         // complaintContent: null,
         // courseId: null,
@@ -270,10 +345,19 @@ export default {
       formQwList:[],
       // 表单校验
       rules: {
+      },
+      // 更新状态表单校验规则
+      updateStatusRules: {
+        recordStatus: [
+          { required: true, message: "投诉状态不能为空", trigger: "change" }
+        ]
       }
     };
   },
   created() {
+    this.getDicts("sys_complaint_status").then(response => {
+      this.statusOptions = response.data;
+    });
     this.getList();
   },
   methods: {
@@ -330,6 +414,7 @@ export default {
       this.dateRange = [];
       this.queryParams.startCreateTime = null;
       this.queryParams.endCreateTime = null;
+      this.queryParams.status = null;
       this.handleQuery();
     },
     // 多选框选中数据
@@ -448,6 +533,94 @@ export default {
         // 用户取消操作
       });
     },
+    /** 修改状态按钮操作 */
+    handleUpdateStatus(row) {
+      this.resetUpdateStatusForm();
+      this.updateStatusForm.recordId = row.recordId;
+
+      // 确保传递给下拉框的值与字典选项匹配,这将确保显示正确的中文标签
+      // 将值转换为与字典选项匹配的类型
+      this.updateStatusForm.recordStatus = String(row.recordStatus);
+      this.updateStatusForm.handleResult = row.handleResult || null;
+
+      // 根据当前状态判断是否显示处理结果字段
+      this.isHandleResultVisible = this.getDictLabelByValue(this.updateStatusForm.recordStatus) === '已处理';
+
+      this.openUpdateStatus = true;
+      this.title = "修改投诉状态";
+    },
+
+    /** 处理状态改变事件 */
+    handleStatusChange(value) {
+      // 如果选择"已处理"状态,则显示处理结果字段,否则隐藏
+      this.isHandleResultVisible = this.getDictLabelByValue(String(value)) === '已处理';
+    },
+
+    /** 获取字典标签 */
+    getDictLabelByValue(value) {
+      const dict = this.statusOptions.find(item => item.dictValue === value);
+      return dict ? dict.dictLabel : '';
+    },
+    /** 投诉状态格式化 */
+    statusFormat(status) {
+      switch (status) {
+        case 0:
+          return '待处理';
+        case 1:
+          return '已分配';
+        case 2:
+          return '已处理';
+        default:
+          return status;
+      }
+    },
+
+    /** 提交修改状态 */
+    submitUpdateStatus() {
+      this.$refs["updateStatusForm"].validate(valid => {
+        if (valid) {
+          // 验证是否选择了"已处理"状态但未填写处理结果
+          if (this.isHandleResultVisible && !this.updateStatusForm.handleResult) {
+            this.msgError("请选择已处理状态时,请填写处理结果");
+            return;
+          }
+
+          // 确保传递给后端的值是正确的类型
+          const submitData = {
+            ...this.updateStatusForm,
+            recordStatus: Number(this.updateStatusForm.recordStatus) // 确保传递数字类型给后端
+          };
+
+          // 调用API更新状态
+          updateUserCourseComplaintRecord(submitData).then(response => {
+            this.msgSuccess("状态修改成功");
+            this.openUpdateStatus = false;
+            this.getList(); // 重新加载列表
+          }).catch(error => {
+            this.msgError("状态修改失败");
+          });
+        }
+      });
+    },
+
+    /** 取消修改状态 */
+    cancelUpdateStatus() {
+      this.openUpdateStatus = false;
+      this.resetUpdateStatusForm();
+    },
+
+    /** 重置修改状态表单 */
+    resetUpdateStatusForm() {
+      this.updateStatusForm = {
+        recordId: null,
+        recordStatus: null,
+        handleResult: null
+      };
+      this.isHandleResultVisible = false;
+      if (this.$refs.updateStatusForm) {
+        this.$refs.updateStatusForm.resetFields();
+      }
+    },
   }
 };
 </script>

+ 41 - 7
src/views/his/user/index.vue

@@ -104,7 +104,7 @@
           plain
           icon="el-icon-download"
           size="mini"
-          :loading="exportLoading"
+          :loading="exportOpenIdLoading"
           @click="handleExportOpenId"
           v-hasPermi="['his:user:exportOpenId']"
         >服务号用户OPENID导出</el-button>
@@ -286,7 +286,9 @@
 </template>
 
 <script>
+import axios from 'axios'
 import { listUser, getUser, delUser, addUser, updateUser, exportUser, addPoint,exportOpenId } from "@/api/his/user";
+import { getToken } from '@/utils/auth';
 import { getCompanyUserList, changeCompanyUser, getCompanyList } from '@/api/company/companyUser';
 import userDetails from '../../components/his/userDetails.vue';
 import userDetailsByNew from './userDetails.vue';
@@ -312,6 +314,7 @@ export default {
       loading: true,
       // 导出遮罩层
       exportLoading: false,
+      exportOpenIdLoading: false,
       // 选中数组
       ids: [],
       orOptions:[],
@@ -600,13 +603,44 @@ export default {
         cancelButtonText: "取消",
         type: "warning"
       }).then(() => {
-        this.exportLoading = true;
-        return exportOpenId();
+        this.exportOpenIdLoading = true;
+
+        // 直接使用axios发起请求,绕过响应拦截器
+        return axios({
+          url: process.env.VUE_APP_BASE_API + '/his/user/exportOpenId',
+          method: 'post',
+          responseType: 'blob', // 重要:设置响应类型为blob
+          headers: {
+            'Authorization': 'Bearer ' + getToken(),
+            'X-Frontend-Type': 'admin'
+          }
+        });
       }).then(response => {
-        this.download(response.msg);
-        this.exportLoading = false;
-      }).catch(() => {
-        this.exportLoading = false;
+        // 处理文件流下载
+        const blob = new Blob([response.data], { type: 'application/vnd.ms-excel' });
+
+        // 直接使用默认文件名,因为后端没有返回
+        const fileName = '用户openId数据.xlsx';
+
+        // 创建下载链接
+        const url = window.URL.createObjectURL(blob);
+        const link = document.createElement('a');
+        link.href = url;
+        link.setAttribute('download', fileName);
+
+        // 触发下载
+        document.body.appendChild(link);
+        link.click();
+
+        // 清理
+        document.body.removeChild(link);
+        window.URL.revokeObjectURL(url);
+
+        this.exportOpenIdLoading = false;
+      }).catch(error => {
+        this.exportOpenIdLoading = false;
+        console.error('导出失败:', error);
+        this.$message.error('导出失败,请稍后重试');
       });
     }
   }

+ 3 - 3
src/views/his/user/indexProject.vue

@@ -707,13 +707,13 @@ export default {
     },
     /** 删除按钮操作 */
     handleDelete(row) {
-      const companyUserId = row.companyUserId;
-      this.$confirm('是否确认删除用户编号为"' + companyUserId + '"的数据项?', "警告", {
+      const userCompanyUserId = row.userCompanyUserId;
+      this.$confirm('是否确认删除用户编号为"' + userCompanyUserId + '"的数据项?', "警告", {
         confirmButtonText: "确定",
         cancelButtonText: "取消",
         type: "warning"
       }).then(function() {
-        return delUserCompanyUser(companyUserId);
+        return delUserCompanyUser(userCompanyUserId);
       }).then(() => {
         this.getList();
         this.msgSuccess("删除成功");

+ 31 - 10
src/views/live/liveData/index.vue

@@ -363,25 +363,25 @@
             </el-col>
             <el-col :span="12">
               <div class="detail-item">
-                <span class="detail-label">>20分钟人数(直播):</span>
+                <span class="detail-label">>=20分钟人数(直播):</span>
                 <span class="detail-value">{{ detailData.liveOver20Minutes || 0 }}</span>
               </div>
             </el-col>
             <el-col :span="12">
               <div class="detail-item">
-                <span class="detail-label">>30分钟人数(直播):</span>
+                <span class="detail-label">>=30分钟人数(直播):</span>
                 <span class="detail-value">{{ detailData.liveOver30Minutes || 0 }}</span>
               </div>
             </el-col>
             <el-col :span="12">
               <div class="detail-item">
-                <span class="detail-label">到课完课率直播(>20分钟):</span>
+                <span class="detail-label">到课完课率直播(>=20分钟):</span>
                 <span class="detail-value">{{ formatPercent(detailData.liveCompletionRate20) }}</span>
               </div>
             </el-col>
             <el-col :span="12">
               <div class="detail-item">
-                <span class="detail-label">到课完课率直播(>30分钟):</span>
+                <span class="detail-label">到课完课率直播(>=30分钟):</span>
                 <span class="detail-value">{{ formatPercent(detailData.liveCompletionRate30) }}</span>
               </div>
             </el-col>
@@ -399,25 +399,25 @@
             </el-col>
             <el-col :span="12">
               <div class="detail-item">
-                <span class="detail-label">>20分钟人数(回放):</span>
+                <span class="detail-label">>=20分钟人数(回放):</span>
                 <span class="detail-value">{{ detailData.playbackOver20Minutes || 0 }}</span>
               </div>
             </el-col>
             <el-col :span="12">
               <div class="detail-item">
-                <span class="detail-label">>30分钟人数(回放):</span>
+                <span class="detail-label">>=30分钟人数(回放):</span>
                 <span class="detail-value">{{ detailData.playbackOver30Minutes || 0 }}</span>
               </div>
             </el-col>
             <el-col :span="12">
               <div class="detail-item">
-                <span class="detail-label">到课完课率回放(>20分钟):</span>
+                <span class="detail-label">到课完课率回放(>=20分钟):</span>
                 <span class="detail-value">{{ formatPercent(detailData.playbackCompletionRate20) }}</span>
               </div>
             </el-col>
             <el-col :span="12">
               <div class="detail-item">
-                <span class="detail-label">到课完课率回放(>30分钟):</span>
+                <span class="detail-label">到课完课率回放(>=30分钟):</span>
                 <span class="detail-value">{{ formatPercent(detailData.playbackCompletionRate30) }}</span>
               </div>
             </el-col>
@@ -555,6 +555,16 @@
           <el-table-column prop="companyName" label="分公司" min-width="150"></el-table-column>
           <el-table-column prop="salesName" label="销售" min-width="120"></el-table-column>
         </el-table>
+        <!-- 用户详情分页组件 -->
+        <pagination
+          v-show="userDetailTotal > 0"
+          :total="userDetailTotal"
+          :page.sync="userDetailQueryParams.pageNum"
+          :limit.sync="userDetailQueryParams.pageSize"
+          :page-sizes="[10, 100, 1000]"
+          @pagination="handleViewUserDetail"
+          style="margin-top: 20px;"
+        />
       </div>
     </el-drawer>
   </div>
@@ -633,7 +643,12 @@ export default {
       userDetailList: [],
       userDetailLoading: false,
       showUserDetail: false,
-      userDetailExportLoading: false
+      userDetailExportLoading: false,
+      userDetailTotal: 0,
+      userDetailQueryParams: {
+        pageNum: 1,
+        pageSize: 10
+      }
     };
   },
   created() {
@@ -882,9 +897,10 @@ export default {
       if (!this.currentLiveId) return;
       this.showUserDetail = true;
       this.userDetailLoading = true;
-      getLiveUserDetailListBySql(this.currentLiveId).then(response => {
+      getLiveUserDetailListBySql(this.currentLiveId, this.userDetailQueryParams.pageNum, this.userDetailQueryParams.pageSize).then(response => {
         if (response.code === 200) {
           this.userDetailList = response.data || [];
+          this.userDetailTotal = response.total || 0;
         }
         this.userDetailLoading = false;
       }).catch(() => {
@@ -898,6 +914,11 @@ export default {
       this.detailData = {};
       this.userDetailList = [];
       this.currentLiveId = null;
+      this.userDetailTotal = 0;
+      this.userDetailQueryParams = {
+        pageNum: 1,
+        pageSize: 100
+      };
     },
     /** 格式化百分比 */
     formatPercent(value) {

+ 83 - 41
src/views/live/order/index.vue

@@ -161,37 +161,37 @@
 <!--        </el-select>-->
 <!--      </el-form-item>-->
 
-      <el-form-item label="结算状态" prop="deliveryPayStatus">
-        <el-select v-model="queryParams.deliveryPayStatus" placeholder="请选择物流结算状态" clearable size="small">
-          <el-option
-            v-for="item in deliveryPayStatusOptions"
-            :key="item.dictValue"
-            :label="item.dictLabel"
-            :value="item.dictValue"
-          />
-        </el-select>
-      </el-form-item>
+<!--      <el-form-item label="结算状态" prop="deliveryPayStatus">-->
+<!--        <el-select v-model="queryParams.deliveryPayStatus" placeholder="请选择物流结算状态" clearable size="small">-->
+<!--          <el-option-->
+<!--            v-for="item in deliveryPayStatusOptions"-->
+<!--            :key="item.dictValue"-->
+<!--            :label="item.dictLabel"-->
+<!--            :value="item.dictValue"-->
+<!--          />-->
+<!--        </el-select>-->
+<!--      </el-form-item>-->
 
-      <el-form-item label="小程序" prop="appId">
-        <el-select v-model="queryParams.appId" placeholder="请选择所属小程序" clearable size="small">
-          <el-option
-            v-for="dict in appMallOptions"
-            :key="dict.appid"
-            :label="dict.name + '(' + dict.appid + ')'"
-            :value="dict.appid"
-          />
-        </el-select>
-      </el-form-item>
+<!--      <el-form-item label="小程序" prop="appId">-->
+<!--        <el-select v-model="queryParams.appId" placeholder="请选择所属小程序" clearable size="small">-->
+<!--          <el-option-->
+<!--            v-for="dict in appMallOptions"-->
+<!--            :key="dict.appid"-->
+<!--            :label="dict.name + '(' + dict.appid + ')'"-->
+<!--            :value="dict.appid"-->
+<!--          />-->
+<!--        </el-select>-->
+<!--      </el-form-item>-->
 
-      <el-form-item label="商品规格" prop="productSpec">
-        <el-input
-          v-model="queryParams.productSpec"
-          placeholder="请输入商品规格"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
+<!--      <el-form-item label="商品规格" prop="productSpec">-->
+<!--        <el-input-->
+<!--          v-model="queryParams.productSpec"-->
+<!--          placeholder="请输入商品规格"-->
+<!--          clearable-->
+<!--          size="small"-->
+<!--          @keyup.enter.native="handleQuery"-->
+<!--        />-->
+<!--      </el-form-item>-->
 
 <!--      <el-form-item label="商品数量" prop="totalNum">-->
 <!--        <el-input-->
@@ -232,6 +232,15 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
+      <el-form-item label="汇付商户订单号" prop="hfshh">
+        <el-input
+          v-model="queryParams.hfshh"
+          placeholder="请输入汇付商户订单号"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
 
 <!--      <el-form-item label="成本价格" prop="cost">-->
 <!--        <el-input-->
@@ -253,16 +262,16 @@
 <!--        />-->
 <!--      </el-form-item>-->
 
-      <el-form-item label="档期归属" prop="scheduleId">
-        <el-select filterable style="width: 215px" v-model="queryParams.scheduleId" placeholder="请选择档期" clearable size="small">
-          <el-option
-            v-for="item in scheduleOptions"
-            :key="item.id"
-            :label="item.name"
-            :value="item.id"
-          />
-        </el-select>
-      </el-form-item>
+<!--      <el-form-item label="档期归属" prop="scheduleId">-->
+<!--        <el-select filterable style="width: 215px" v-model="queryParams.scheduleId" placeholder="请选择档期" clearable size="small">-->
+<!--          <el-option-->
+<!--            v-for="item in scheduleOptions"-->
+<!--            :key="item.id"-->
+<!--            :label="item.name"-->
+<!--            :value="item.id"-->
+<!--          />-->
+<!--        </el-select>-->
+<!--      </el-form-item>-->
 
       <el-form-item label="代服账户" prop="erpAccount" v-if="SFDFopen">
         <el-select v-model="queryParams.erpAccount" style="width: 215px" placeholder="ERP账户" clearable size="small">
@@ -293,6 +302,7 @@
           v-model="createTimeRange"
           type="datetimerange"
           value-format="yyyy-MM-dd HH:mm:ss"
+          format="yyyy-MM-dd HH:mm:ss"
           range-separator="至"
           start-placeholder="开始日期"
           end-placeholder="结束日期"
@@ -308,8 +318,10 @@
           v-model="payTimeRange"
           type="datetimerange"
           value-format="yyyy-MM-dd HH:mm:ss"
+          format="yyyy-MM-dd HH:mm:ss"
           start-placeholder="开始日期"
           end-placeholder="结束日期"
+          @change="handlePayTimeChange"
         />
       </el-form-item>
 
@@ -447,6 +459,7 @@
       <el-table-column label="手机号" align="center" prop="userPhone" width="120px" />
       <el-table-column label="商品规格" align="center" prop="productSpec" width="120px" />
       <el-table-column label="商品数量" align="center" prop="totalNum" width="100px" />
+      <el-table-column label="汇付商户订单号" align="center" prop="hfshh" width="100px" />
       <el-table-column label="订单金额" align="center" prop="totalPrice" width="100px">
         <template slot-scope="scope">
           <span v-if="scope.row.totalPrice != null">{{ scope.row.totalPrice.toFixed(2) }}</span>
@@ -717,6 +730,7 @@ export default {
         pageSize: 10,
         companyId: null,
         deptId: null,
+        hfshh: null,
         orderTypeFilter: null,
         salesName: null,
         orderCodes: [],
@@ -916,13 +930,41 @@ export default {
     },
     handleOrderTimeChange(value) {
       if (value && value.length === 2) {
-        this.queryParams.createTimeStart = value[0]
-        this.queryParams.createTimeEnd = value[1]
+        // 如果结束时间不是当天的23:59:59,则自动设置为当天的23:59:59
+        const endDate = new Date(value[1])
+        const endDateStr = value[1]
+        const datePart = endDateStr.split(' ')[0] // 获取日期部分
+        const timePart = endDateStr.split(' ')[1] // 获取时间部分
+        
+        // 如果时间部分不是23:59:59,则设置为23:59:59
+        if (timePart !== '23:59:59') {
+          const newEndTime = datePart + ' 23:59:59'
+          this.createTimeRange = [value[0], newEndTime]
+          this.queryParams.createTimeStart = value[0]
+          this.queryParams.createTimeEnd = newEndTime
+        } else {
+          this.queryParams.createTimeStart = value[0]
+          this.queryParams.createTimeEnd = value[1]
+        }
       } else {
         this.queryParams.createTimeStart = null
         this.queryParams.createTimeEnd = null
       }
     },
+    handlePayTimeChange(value) {
+      if (value && value.length === 2) {
+        // 如果结束时间不是当天的23:59:59,则自动设置为当天的23:59:59
+        const endDateStr = value[1]
+        const datePart = endDateStr.split(' ')[0] // 获取日期部分
+        const timePart = endDateStr.split(' ')[1] // 获取时间部分
+        
+        // 如果时间部分不是23:59:59,则设置为23:59:59
+        if (timePart !== '23:59:59') {
+          const newEndTime = datePart + ' 23:59:59'
+          this.payTimeRange = [value[0], newEndTime]
+        }
+      }
+    },
     /** 导出订单 */
     handleExport() {
       this.prepareExportParams()