|
|
@@ -70,28 +70,28 @@
|
|
|
<div class="stat-card">
|
|
|
<div class="stat-icon"><i class="fas fa-paper-plane"></i></div>
|
|
|
<div class="stat-info">
|
|
|
- <div class="stat-value">{{ emailAccounts.reduce((sum, a) => sum + a.sendToday, 0) }}</div>
|
|
|
+ <div class="stat-value">{{ todayData.todaySendCount }}</div>
|
|
|
<div class="stat-label">今日发送</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="stat-card">
|
|
|
<div class="stat-icon"><i class="fas fa-envelope-open"></i></div>
|
|
|
<div class="stat-info">
|
|
|
- <div class="stat-value">{{ emailAccounts.reduce((sum, a) => sum + a.sendToday * 0.45, 0).toFixed(0) }}</div>
|
|
|
+ <div class="stat-value">{{ todayData.todayOpenCount }}</div>
|
|
|
<div class="stat-label">今日打开</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="stat-card">
|
|
|
<div class="stat-icon"><i class="fas fa-reply"></i></div>
|
|
|
<div class="stat-info">
|
|
|
- <div class="stat-value">{{ emailAccounts.reduce((sum, a) => sum + a.sendToday * a.replyRate / 100, 0).toFixed(0) }}</div>
|
|
|
+ <div class="stat-value">{{ todayData.todayReplyCount }}</div>
|
|
|
<div class="stat-label">今日回复</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="stat-card">
|
|
|
<div class="stat-icon"><i class="fas fa-mouse-pointer"></i></div>
|
|
|
<div class="stat-info">
|
|
|
- <div class="stat-value">{{ emailAccounts.reduce((sum, a) => sum + a.sendToday * 0.15, 0).toFixed(0) }}</div>
|
|
|
+ <div class="stat-value">{{ todayData.todayRefuseCount }}</div>
|
|
|
<div class="stat-label">今日拒收</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
@@ -99,29 +99,17 @@
|
|
|
<div class="chart-section">
|
|
|
<h5><i class="fas fa-chart-line"></i> 最近7天发送趋势</h5>
|
|
|
<div class="simple-chart">
|
|
|
- <div class="chart-bar" style="height: 45%"><span>周一</span></div>
|
|
|
- <div class="chart-bar" style="height: 62%"><span>周二</span></div>
|
|
|
- <div class="chart-bar" style="height: 58%"><span>周三</span></div>
|
|
|
- <div class="chart-bar" style="height: 75%"><span>周四</span></div>
|
|
|
- <div class="chart-bar" style="height: 82%"><span>周五</span></div>
|
|
|
- <div class="chart-bar" style="height: 40%"><span>周六</span></div>
|
|
|
- <div class="chart-bar" style="height: 35%"><span>周日</span></div>
|
|
|
+ <div class="chart-bar" :style="{ height: (item.sendCount / sendTrendTotal) * 100 + '%' }" v-for="item in sendTrendData">
|
|
|
+ <span>{{ item.date }}</span>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="top-performers">
|
|
|
<h5><i class="fas fa-trophy"></i> 热门模板</h5>
|
|
|
<div class="template-list">
|
|
|
- <div class="template-item">
|
|
|
- <span class="template-name">产品介绍邮件</span>
|
|
|
- <span class="template-stats">发送 1,234 · 打开率 52%</span>
|
|
|
- </div>
|
|
|
- <div class="template-item">
|
|
|
- <span class="template-name">节日祝福</span>
|
|
|
- <span class="template-stats">发送 856 · 打开率 68%</span>
|
|
|
- </div>
|
|
|
- <div class="template-item">
|
|
|
- <span class="template-name">跟进邮件</span>
|
|
|
- <span class="template-stats">发送 654 · 打开率 45%</span>
|
|
|
+ <div class="template-item" v-for="item in templatesData">
|
|
|
+ <span class="template-name">{{ item.name }}</span>
|
|
|
+ <span class="template-stats">发送 {{ item.sendCount }} · 打开率 {{ item.openRate * 100 }}%</span>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
@@ -255,7 +243,7 @@
|
|
|
<script setup>
|
|
|
import { ref } from 'vue'
|
|
|
import AddEmailModal from './addEmail.vue'
|
|
|
- import { getMailsPort, getAccountTotal } from '@/api/emails'
|
|
|
+ import { getMailsPort, getAccountTotal, getTodayStats, getSendTrend, getHotTemplates } from '@/api/emails'
|
|
|
|
|
|
const showEmailModal = ref(false)
|
|
|
// 企业邮箱列表
|
|
|
@@ -284,6 +272,24 @@
|
|
|
total.value.replyRate = emailList.value.reduce((sum, a) => sum + (a.accountTotal.replyRate * 100 || 0), 0) / emailList.value.length
|
|
|
})
|
|
|
}
|
|
|
+ getOther()
|
|
|
+ }
|
|
|
+
|
|
|
+ const todayData = ref({})
|
|
|
+ const sendTrendData = ref([])
|
|
|
+ const sendTrendTotal = ref(0)
|
|
|
+ const templatesData = ref([])
|
|
|
+ const getOther = () => {
|
|
|
+ getTodayStats().then(res => {
|
|
|
+ todayData.value = res.result
|
|
|
+ })
|
|
|
+ getSendTrend().then(res => {
|
|
|
+ sendTrendData.value = res.result
|
|
|
+ sendTrendTotal.value = sendTrendData.value.reduce((sum, a) => sum + a.sendCount, 0)
|
|
|
+ })
|
|
|
+ getHotTemplates().then(res => {
|
|
|
+ templatesData.value = res.result
|
|
|
+ })
|
|
|
}
|
|
|
|
|
|
const tabTyps = ref('email')
|