西格玛许 1 vecka sedan
förälder
incheckning
593131ac94
2 ändrade filer med 59 tillägg och 26 borttagningar
  1. 35 15
      src/views/system/customer/chat/index.vue
  2. 24 11
      src/views/system/custservice/index.vue

+ 35 - 15
src/views/system/customer/chat/index.vue

@@ -325,6 +325,7 @@
       :title="activeTab === 'mini' ? '会员档案详情' : '商家入驻全量档案'" 
       size="1100px" 
       custom-class="archive-drawer-modern"
+      append-to-body
     >
       <div class="archive-content">
         <!-- 头部综合信息区 (动态识别用户/商家) -->
@@ -464,7 +465,7 @@
     </el-drawer>
 
     <!-- 全部记录抽屉 -->
-    <el-drawer v-model="showAllOrders" title="历史深度交易看板" size="1000px">
+    <el-drawer v-model="showAllOrders" title="历史深度交易看板" size="1000px" append-to-body>
       <div class="drawer-p20">
         <el-table :data="currentDisplayOrders" stripe style="width: 100%">
           <el-table-column prop="orderNo" label="订单号" width="200" />
@@ -488,6 +489,8 @@
       :title="currentSelectionType === 'job' ? '选择发送岗位' : '选择岗位发送结算单'" 
       width="600px" 
       class="job-selector-dialog"
+      append-to-body
+      destroy-on-close
     >
       <div class="job-selector-body">
         <div class="filter-tabs-wrapper">
@@ -588,6 +591,14 @@ const isResizing = ref(false);
 
 // 视图控制
 const showFullArchive = ref(false);
+const showAllOrders = ref(false);
+const jobSelectVisible = ref(false);
+const currentSelectionType = ref('job'); // job or order
+const selectedJobCategory = ref('全职岗位');
+const jobSearchKeyword = ref('');
+const jobCurrentPage = ref(1);
+const jobPageSize = ref(3);
+
 const sessionList = ref([]);
 const messageList = ref([]);
 
@@ -737,7 +748,7 @@ async function handleSend() {
     // 调用REST API发送消息
     const response = await sendTextMessage(messageData);
     
-    if (response.code === 0) {
+    if (response.code === 200 || response.code === 0) {
       // 添加到本地消息列表
       messageList.value.push({
         sender: 'waiter', 
@@ -805,18 +816,27 @@ async function selectSession(session) {
       pageNum: 1,
       pageSize: 50
     });
-    
-    if (response.code === 0 && response.data) {
+    if ((response.code === 200 || response.code === 0) && response.rows) {
       // 将后端返回的消息转换为前端格式
-      messageList.value = response.data.rows.map(msg => ({
-        sender: msg.senderType === 2 ? 'waiter' : 'customer',
-        type: msg.msgType || 'text',
-        content: msg.content,
-        time: msg.sendTime,
-        payload: msg.msgType === 'job_card' || msg.msgType === 'order_card' ? JSON.parse(msg.payload) : null,
-        fileUrl: msg.fileUrl,
-        fileName: msg.fileName
-      }));
+      messageList.value = response.rows.map(msg => {
+        let parsedPayload = null;
+        if ((msg.msgType === 'job_card' || msg.msgType === 'order_card') && msg.payload) {
+          parsedPayload = typeof msg.payload === 'string' ? JSON.parse(msg.payload) : msg.payload;
+        } else if (msg.msgType === 'file') {
+          parsedPayload = { name: msg.fileName || '未知文件', url: msg.fileUrl, size: '未知大小' };
+        } else if (msg.msgType === 'image') {
+          parsedPayload = { url: msg.fileUrl || msg.content };
+        }
+        return {
+          sender: msg.senderType === 2 ? 'waiter' : 'customer',
+          type: msg.msgType || 'text',
+          content: msg.content,
+          time: msg.sendTime,
+          payload: parsedPayload,
+          fileUrl: msg.fileUrl,
+          fileName: msg.fileName
+        };
+      });
     }
   } catch (error) {
     console.error('加载历史消息失败:', error);
@@ -848,7 +868,7 @@ async function handleFileChange(e) {
     if (file.type.startsWith('image/')) {
       // 上传图片
       const response = await sendImageMessage(activeSessionId.value, msgNo, file);
-      if (response.code === 0) {
+      if (response.code === 200 || response.code === 0) {
         messageList.value.push({ 
           sender: 'waiter', 
           type: 'image', 
@@ -861,7 +881,7 @@ async function handleFileChange(e) {
     } else {
       // 上传文件
       const response = await sendFileMessage(activeSessionId.value, msgNo, file);
-      if (response.code === 0) {
+      if (response.code === 200 || response.code === 0) {
         messageList.value.push({ 
           sender: 'waiter', 
           type: 'file', 

+ 24 - 11
src/views/system/custservice/index.vue

@@ -338,6 +338,7 @@
       :title="activeTab === 'mini' ? '会员档案详情' : '商家入驻全量档案'" 
       size="1100px" 
       custom-class="archive-drawer-modern"
+      append-to-body
     >
       <div class="archive-content">
         <!-- 头部综合信息区 (动态识别用户/商家) -->
@@ -476,7 +477,7 @@
     </el-drawer>
 
     <!-- 全部记录抽屉 -->
-    <el-drawer v-model="showAllOrders" title="历史深度交易看板" size="1000px">
+    <el-drawer v-model="showAllOrders" title="历史深度交易看板" size="1000px" append-to-body>
       <div class="drawer-p20">
         <el-table :data="allOrdersList" stripe style="width: 100%">
           <el-table-column prop="id" label="商户号" width="160" />
@@ -501,6 +502,8 @@
       :title="currentSelectionType === 'job' ? '选择发送岗位' : '选择岗位发送结算单'" 
       width="600px" 
       class="job-selector-dialog"
+      append-to-body
+      destroy-on-close
     >
       <div class="job-selector-body">
         <div class="filter-tabs-wrapper">
@@ -972,16 +975,26 @@ async function selectSession(session) {
     if (response.code === 200 || response.rows) {
       // 将后端返回的消息转换为前端格式
       const rows = response.rows || response.data.rows || [];
-      messageList.value = rows.map(msg => ({
-        msgId: msg.msgId, // 这里对应后端 VO 的 @JsonProperty("msgId")
-        sender: msg.senderType === 2 ? 'waiter' : 'customer',
-        type: msg.msgType || 'text',
-        content: msg.content,
-        time: msg.sendTime,
-        payload: (msg.msgType === 'job_card' || msg.msgType === 'order_card') && msg.payload ? (typeof msg.payload === 'string' ? JSON.parse(msg.payload) : msg.payload) : null,
-        fileUrl: msg.fileUrl,
-        fileName: msg.fileName
-      })).reverse(); // 数据库按时间倒序查询的,前端展示需要反转
+      messageList.value = rows.map(msg => {
+        let parsedPayload = null;
+        if ((msg.msgType === 'job_card' || msg.msgType === 'order_card') && msg.payload) {
+          parsedPayload = typeof msg.payload === 'string' ? JSON.parse(msg.payload) : msg.payload;
+        } else if (msg.msgType === 'file') {
+          parsedPayload = { name: msg.fileName || '未知文件', url: msg.fileUrl, size: '未知大小' };
+        } else if (msg.msgType === 'image') {
+          parsedPayload = { url: msg.fileUrl || msg.content };
+        }
+        return {
+          msgId: msg.msgId,
+          sender: msg.senderType === 2 ? 'waiter' : 'customer',
+          type: msg.msgType || 'text',
+          content: msg.content,
+          time: msg.sendTime,
+          payload: parsedPayload,
+          fileUrl: msg.fileUrl,
+          fileName: msg.fileName
+        };
+      }).reverse(); // 数据库按时间倒序查询的,前端展示需要反转
     }
   } catch (error) {
     console.error('加载历史消息失败:', error);