diff --git a/src/components/DndModal.jsx b/src/components/DnDModal.jsx
similarity index 100%
rename from src/components/DndModal.jsx
rename to src/components/DnDModal.jsx
diff --git a/src/components/LexicalEditor/Index.jsx b/src/components/LexicalEditor/index.jsx
similarity index 100%
rename from src/components/LexicalEditor/Index.jsx
rename to src/components/LexicalEditor/index.jsx
diff --git a/src/stores/AuthStore.js b/src/stores/AuthStore.js
index 62b35a7..9870ed2 100644
--- a/src/stores/AuthStore.js
+++ b/src/stores/AuthStore.js
@@ -158,7 +158,7 @@ const useAuthStore = create(devtools((set, get) => ({
loadUserSession: () => {
let sessionData = window.sessionStorage.getItem('GLOBAL_SALES_LOGIN_USER')
- // let sessionData ='{"userId":"155","userIdStr":"155","emailList":[],"whatsAppBusiness":"+8617607730395","whatsAppNo":null,"username":"尹诚诚","avatarUrl":"https://static-legacy.dingtalk.com/media/lADPBE1XYG_HAcDNAgDNAgA_512_512.jpg","mobile":"+86-18507832160","email":"ycc@hainatravel.com","openId":"K8BNXMf8ESSr1DzLVUrX7wiEiE","accountList":[{"OPI_SN":155,"OPI_Code":"YCC","OPI_NameCN":"尹诚诚","OPI_DEI_SN":1,"OPI_NameEN":"Yin Chengcheng"}]}'
+ if (import.meta.env.DEV) sessionData ='{"userId":"155","userIdStr":"155","emailList":[],"whatsAppBusiness":"+8617607730395","whatsAppNo":null,"username":"尹诚诚","avatarUrl":"https://static-legacy.dingtalk.com/media/lADPBE1XYG_HAcDNAgDNAgA_512_512.jpg","mobile":"+86-18507832160","email":"ycc@hainatravel.com","openId":"K8BNXMf8ESSr1DzLVUrX7wiEiE","accountList":[{"OPI_SN":155,"OPI_Code":"YCC","OPI_NameCN":"尹诚诚","OPI_DEI_SN":1,"OPI_NameEN":"Yin Chengcheng"}]}'
// if (window.location.hostname === '202.103.68.93' && window.location.port === '4173' && isEmpty(sessionData)) {
// sessionData = `{"userId":"383","userIdStr":"383,609","emailList":[{"opi_sn":383,"mat_sn":760,"email":"lyj@asiahighlights.com","default":false,"backup":false},{"opi_sn":383,"mat_sn":759,"email":"lyj@chinahighlights.com","default":true,"backup":false},{"opi_sn":383,"mat_sn":758,"email":"lyj@hainatravel.com","default":false,"backup":false}],"username":"廖一军","avatarUrl":"https://static-legacy.dingtalk.com/media/lALPBDDrhXr716HNAoDNAoA_640_640.png","mobile":"+86-18777396951","email":"lyj@hainatravel.com","whatsAppBusiness":"8617458471254","openId":"iioljiPmZ4RPoOYpkFiSn7IKAiEiE","accountList":[{"OPI_SN":383,"OPI_Code":"LYJ","OPI_NameCN":"廖一军","OPI_DEI_SN":7,"OPI_NameEN":"Jimmy Liow"},{"OPI_SN":609,"OPI_Code":"LYJAH","OPI_NameCN":"廖一军(ah)","OPI_DEI_SN":28,"OPI_NameEN":"Jimmy Liow"}]}`
diff --git a/src/views/Conversations/Online/Components/EmailDetail.jsx b/src/views/Conversations/Online/Components/EmailDetail.jsx
index 849b490..1203c47 100644
--- a/src/views/Conversations/Online/Components/EmailDetail.jsx
+++ b/src/views/Conversations/Online/Components/EmailDetail.jsx
@@ -4,7 +4,7 @@ import { LoadingOutlined, ApiOutlined } from '@ant-design/icons';
import { EditIcon, ReplyIcon, ResendIcon, ShareForwardIcon } from '@/components/Icons'
import { isEmpty, TagColorStyle } from '@/utils/commons'
import EmailEditorPopup from '../Input/EmailEditorPopup'
-import DnDModal from '@/components/DndModal'
+import DnDModal from '@/components/DnDModal'
import useStyleStore from '@/stores/StyleStore'
import { useEmailDetail, } from '@/hooks/useEmail';
import { EMAIL_ATTA_HOST } from '@/config';
diff --git a/src/views/Conversations/Online/Components/EmailDetailInline.jsx b/src/views/Conversations/Online/Components/EmailDetailInline.jsx
index 5262600..223964c 100644
--- a/src/views/Conversations/Online/Components/EmailDetailInline.jsx
+++ b/src/views/Conversations/Online/Components/EmailDetailInline.jsx
@@ -4,7 +4,7 @@ import { LoadingOutlined, ApiOutlined, LeftOutlined, RightOutlined } from '@ant-
import { EditIcon, ReplyIcon, ResendIcon, ShareForwardIcon } from '@/components/Icons'
import { isEmpty, TagColorStyle } from '@/utils/commons'
import EmailEditorPopup from '../Input/EmailEditorPopup'
-import DnDModal from '@/components/DndModal'
+import DnDModal from '@/components/DnDModal'
import useStyleStore from '@/stores/StyleStore'
import { useEmailDetail, } from '@/hooks/useEmail';
import { EMAIL_ATTA_HOST } from '@/config';
diff --git a/src/views/Conversations/Online/Input/EmailEditorPopup.jsx b/src/views/Conversations/Online/Input/EmailEditorPopup.jsx
index 2c7b171..9af4298 100644
--- a/src/views/Conversations/Online/Input/EmailEditorPopup.jsx
+++ b/src/views/Conversations/Online/Input/EmailEditorPopup.jsx
@@ -2,7 +2,7 @@ import { useEffect, useState } from 'react';
import { App, ConfigProvider, Button, Form, Input, Flex, Checkbox, Popconfirm, Select, Space, Upload, Divider, Modal } from 'antd';
import { UploadOutlined, LoadingOutlined } from '@ant-design/icons';
import '@dckj/react-better-modal/dist/index.css';
-import DnDModal from '@/components/DndModal';
+import DnDModal from '@/components/DnDModal';
import useStyleStore from '@/stores/StyleStore';
import useConversationStore from '@/stores/ConversationStore';
import useAuthStore from '@/stores/AuthStore';
diff --git a/src/views/customer_relation/index.jsx b/src/views/customer_relation/index.jsx
index ac7e97e..a802f0e 100644
--- a/src/views/customer_relation/index.jsx
+++ b/src/views/customer_relation/index.jsx
@@ -1,7 +1,8 @@
import { Link } from 'react-router-dom'
import { Form, Input, Button, DatePicker, Select, Table } from 'antd'
import dayjs from 'dayjs'
-import { ReadIcon, DeliverIcon, SentIcon, WaitingIcon, FailedIcon } from '@/components/Icons'
+import { ReadIcon, DeliverIcon, SentIcon, WaitingIcon, FailedIcon, ReplyIcon } from '@/components/Icons'
+import { MessageTwoTone } from '@ant-design/icons'
import useCustomerRelationStore from '@/stores/CustomerRelationStore'
const { RangePicker } = DatePicker
@@ -40,22 +41,28 @@ const Index = () => {
// 按 crt_template 分组并统计每个非空 msg_status 的数量
const templateStatusCount = {}
tasksList.forEach((item) => {
- const { crt_template, msg_status } = item
+ const { crt_template, msg_status, msg_reply } = item
if (msg_status !== null && msg_status !== undefined) {
if (!templateStatusCount[crt_template]) {
templateStatusCount[crt_template] = {}
+ templateStatusCount[crt_template]['msgreply'] = 0
}
if (!templateStatusCount[crt_template][msg_status]) {
templateStatusCount[crt_template][msg_status] = 0
}
templateStatusCount[crt_template][msg_status]++
+
+ if (msg_reply) {
+ templateStatusCount[crt_template]['msgreply']++
+ }
}
})
// 计算分组后的百分比并添加计数
const groupedResult = {}
for (const template in templateStatusCount) {
- const total = Object.values(templateStatusCount[template]).reduce((acc, val) => acc + val, 0)
+ //总数需要减去msgreply的数量,msgreply是状态之外的数据
+ const total = Object.values(templateStatusCount[template]).reduce((acc, val) => acc + val, 0) - templateStatusCount[template]['msgreply']
groupedResult[template] = {}
for (const status in templateStatusCount[template]) {
const count = templateStatusCount[template][status]
@@ -63,6 +70,7 @@ const Index = () => {
groupedResult[template][`${status}_count`] = count
groupedResult[template][`${status}_percentage`] = `${percentage}%`
}
+ console.log(groupedResult)
}
// 将 groupedResult 转换为表格可用的数据格式
@@ -82,14 +90,17 @@ const Index = () => {
key: 'crt_template',
})
- const allStatuses = new Set()
+ const allStatuses = new Set(['msgreply'])
tasksList.forEach((item) => {
if (item.msg_status !== null && item.msg_status !== undefined) {
allStatuses.add(item.msg_status)
}
})
- allStatuses.forEach((status) => {
+ // 将 Set 转换为数组并排序
+ const sortedStatuses = Array.from(allStatuses).sort()
+
+ sortedStatuses.forEach((status) => {
groupedColumns.push({
title: `${status} 计数`,
dataIndex: `${status}_count`,
@@ -160,7 +171,7 @@ const Index = () => {
const icon = statusIconMap[record.msg_status] || statusIconMap['default']
return (
- 查看会话 {icon}
+ 查看会话 {icon} {record.msg_reply ? : ''}
)
}