feat: 添加pinia持久化插件并优化布局和API配置
- 添加pinia-plugin-persistedstate依赖实现状态持久化 - 将多处actions-summary布局从2列改为4列 - 调整secondTop页面高度和滚动区域高度 - 更新API基础路径为192.168.15.53 - 添加seniorManager页面的用户下拉组件 - 创建senorManger.js API接口文件
This commit is contained in:
@@ -18,6 +18,7 @@
|
|||||||
"markdown-it": "^14.1.0",
|
"markdown-it": "^14.1.0",
|
||||||
"marked": "^16.1.1",
|
"marked": "^16.1.1",
|
||||||
"pinia": "^3.0.2",
|
"pinia": "^3.0.2",
|
||||||
|
"pinia-plugin-persistedstate": "^3.2.3",
|
||||||
"vue": "^3.5.17",
|
"vue": "^3.5.17",
|
||||||
"vue-chartjs": "^5.3.2",
|
"vue-chartjs": "^5.3.2",
|
||||||
"vue-echarts": "^7.0.3",
|
"vue-echarts": "^7.0.3",
|
||||||
|
|||||||
12
my-vue-app/pnpm-lock.yaml
generated
12
my-vue-app/pnpm-lock.yaml
generated
@@ -35,6 +35,9 @@ importers:
|
|||||||
pinia:
|
pinia:
|
||||||
specifier: ^3.0.2
|
specifier: ^3.0.2
|
||||||
version: 3.0.3(typescript@5.8.3)(vue@3.5.17(typescript@5.8.3))
|
version: 3.0.3(typescript@5.8.3)(vue@3.5.17(typescript@5.8.3))
|
||||||
|
pinia-plugin-persistedstate:
|
||||||
|
specifier: ^3.2.3
|
||||||
|
version: 3.2.3(pinia@3.0.3(typescript@5.8.3)(vue@3.5.17(typescript@5.8.3)))
|
||||||
vue:
|
vue:
|
||||||
specifier: ^3.5.17
|
specifier: ^3.5.17
|
||||||
version: 3.5.17(typescript@5.8.3)
|
version: 3.5.17(typescript@5.8.3)
|
||||||
@@ -1651,6 +1654,11 @@ packages:
|
|||||||
engines: {node: '>=0.10'}
|
engines: {node: '>=0.10'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
|
pinia-plugin-persistedstate@3.2.3:
|
||||||
|
resolution: {integrity: sha512-Cm819WBj/s5K5DGw55EwbXDtx+EZzM0YR5AZbq9XE3u0xvXwvX2JnWoFpWIcdzISBHqy9H1UiSIUmXyXqWsQRQ==}
|
||||||
|
peerDependencies:
|
||||||
|
pinia: ^2.0.0
|
||||||
|
|
||||||
pinia@3.0.3:
|
pinia@3.0.3:
|
||||||
resolution: {integrity: sha512-ttXO/InUULUXkMHpTdp9Fj4hLpD/2AoJdmAbAeW2yu1iy1k+pkFekQXw5VpC0/5p51IOR/jDaDRfRWRnMMsGOA==}
|
resolution: {integrity: sha512-ttXO/InUULUXkMHpTdp9Fj4hLpD/2AoJdmAbAeW2yu1iy1k+pkFekQXw5VpC0/5p51IOR/jDaDRfRWRnMMsGOA==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
@@ -3545,6 +3553,10 @@ snapshots:
|
|||||||
|
|
||||||
pidtree@0.6.0: {}
|
pidtree@0.6.0: {}
|
||||||
|
|
||||||
|
pinia-plugin-persistedstate@3.2.3(pinia@3.0.3(typescript@5.8.3)(vue@3.5.17(typescript@5.8.3))):
|
||||||
|
dependencies:
|
||||||
|
pinia: 3.0.3(typescript@5.8.3)(vue@3.5.17(typescript@5.8.3))
|
||||||
|
|
||||||
pinia@3.0.3(typescript@5.8.3)(vue@3.5.17(typescript@5.8.3)):
|
pinia@3.0.3(typescript@5.8.3)(vue@3.5.17(typescript@5.8.3)):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@vue/devtools-api': 7.7.7
|
'@vue/devtools-api': 7.7.7
|
||||||
|
|||||||
50
my-vue-app/src/api/senorManger.js
Normal file
50
my-vue-app/src/api/senorManger.js
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
import https from '../utils/https'
|
||||||
|
|
||||||
|
// 团队总业绩 /api/v1/level_three/overview/overall_team_performance
|
||||||
|
export const getOverallTeamPerformance = (params) => {
|
||||||
|
return https.post('/api/v1/level_three/overview/overall_team_performance', params)
|
||||||
|
}
|
||||||
|
// 活跃组数 /api/v1/level_three/overview/total_group_count
|
||||||
|
export const getTotalGroupCount = (params) => {
|
||||||
|
return https.post('/api/v1/level_three/overview/total_group_count', params)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 中心转化率 /api/v1/level_three/overview/center_conversion_rate
|
||||||
|
export const getCenterConversionRate = (params) => {
|
||||||
|
return https.post('/api/v1/level_three/overview/center_conversion_rate', params)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 总通话次数 /api/v1/level_three/overview/total_call_count
|
||||||
|
export const getTotalCallCount = (params) => {
|
||||||
|
return https.post('/api/v1/level_three/overview/total_call_count', params)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取新增客户数量、已加微客户数量以及新增客户与昨日对比情况 /api/v1/level_three/overview/new_customer
|
||||||
|
export const getNewCustomer = (params) => {
|
||||||
|
return https.post('/api/v1/level_three/overview/new_customer', params)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取团队本期定金转化率、本月的定金转化率以及本期与上期的定金转化率对比情况 /api/v1/level_three/overview/deposit_conversion_rate
|
||||||
|
export const getDepositConversionRate = (params) => {
|
||||||
|
return https.post('/api/v1/level_three/overview/deposit_conversion_rate', params)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 活跃客户沟通率 /api/v1/level_three/overview/active_customer_communication_rate
|
||||||
|
export const getActiveCustomerCommunicationRate = (params) => {
|
||||||
|
return https.post('/api/v1/level_three/overview/active_customer_communication_rate', params)
|
||||||
|
}
|
||||||
|
// 平均应答时间 /api/v1/level_three/overview/average_answer_time
|
||||||
|
export const getAverageAnswerTime = (params) => {
|
||||||
|
return https.post('/api/v1/level_three/overview/average_answer_time', params)
|
||||||
|
}
|
||||||
|
// 超时应答率、严重超时应答率 /api/v1/level_three/overview/timeout_rate
|
||||||
|
export const getTimeoutRate = (params) => {
|
||||||
|
return https.post('/api/v1/level_three/overview/timeout_rate', params)
|
||||||
|
}
|
||||||
|
// 表格填写率 /api/v1/level_three/overview/table_filling_rate
|
||||||
|
export const getTableFillingRate = (params) => {
|
||||||
|
return https.post('/api/v1/level_three/overview/table_filling_rate', params)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -5,7 +5,7 @@ import { useUserStore } from '@/stores/user'
|
|||||||
|
|
||||||
// 创建axios实例
|
// 创建axios实例
|
||||||
const service = axios.create({
|
const service = axios.create({
|
||||||
baseURL: 'http://192.168.15.54:8890' || '', // API基础路径,支持完整URL
|
baseURL: 'http://192.168.15.53:8890' || '', // API基础路径,支持完整URL
|
||||||
timeout: 15000, // 请求超时时间
|
timeout: 15000, // 请求超时时间
|
||||||
headers: {
|
headers: {
|
||||||
'Content-Type': 'application/json;charset=UTF-8'
|
'Content-Type': 'application/json;charset=UTF-8'
|
||||||
|
|||||||
@@ -881,7 +881,7 @@ const addAction = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.actions-summary {
|
.actions-summary {
|
||||||
grid-template-columns: repeat(2, 1fr);
|
grid-template-columns: repeat(4, 1fr);
|
||||||
}
|
}
|
||||||
|
|
||||||
.action-item {
|
.action-item {
|
||||||
|
|||||||
@@ -712,7 +712,7 @@ const getStatusText = (status) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.actions-summary {
|
.actions-summary {
|
||||||
grid-template-columns: repeat(2, 1fr);
|
grid-template-columns: repeat(4, 1fr);
|
||||||
gap: 0.5rem;
|
gap: 0.5rem;
|
||||||
margin-bottom: 1rem;
|
margin-bottom: 1rem;
|
||||||
|
|
||||||
|
|||||||
@@ -809,7 +809,7 @@ const getStatusText = (status) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.action-items-compact {
|
.action-items-compact {
|
||||||
height: 400px;
|
height: 380px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
|
||||||
:deep(.action-items) {
|
:deep(.action-items) {
|
||||||
@@ -839,7 +839,7 @@ const getStatusText = (status) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.actions-summary {
|
.actions-summary {
|
||||||
grid-template-columns: repeat(2, 1fr);
|
grid-template-columns: repeat(4, 1fr);
|
||||||
gap: 0.5rem;
|
gap: 0.5rem;
|
||||||
margin-bottom: 1rem;
|
margin-bottom: 1rem;
|
||||||
|
|
||||||
@@ -857,7 +857,7 @@ const getStatusText = (status) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.actions-list {
|
.actions-list {
|
||||||
max-height: 200px;
|
max-height: 230px;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
|
|
||||||
.action-item {
|
.action-item {
|
||||||
|
|||||||
@@ -8,19 +8,7 @@
|
|||||||
<h1>高级经理指挥台</h1>
|
<h1>高级经理指挥台</h1>
|
||||||
<p>统筹多组运营,优化资源配置,驱动业绩增长,实现团队协同发展。</p>
|
<p>统筹多组运营,优化资源配置,驱动业绩增长,实现团队协同发展。</p>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<UserDropdown class="header-ringht" style="margin-left: auto;" />
|
||||||
class="header-ringht"
|
|
||||||
style="display: flex; align-items: center; gap: 10px;margin-left: auto;"
|
|
||||||
>
|
|
||||||
<img
|
|
||||||
src="https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png"
|
|
||||||
alt="用户头像"
|
|
||||||
class="avatar"
|
|
||||||
@error="handleAvatarError"
|
|
||||||
style="width: 35px; height: 35px"
|
|
||||||
/>
|
|
||||||
<span>你好,管理员</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
@@ -154,6 +142,7 @@ import CustomerDetail from './components/CustomerDetail.vue'
|
|||||||
import ProblemRanking from './components/ProblemRanking.vue'
|
import ProblemRanking from './components/ProblemRanking.vue'
|
||||||
import StatisticalIndicators from './components/StatisticalIndicators.vue'
|
import StatisticalIndicators from './components/StatisticalIndicators.vue'
|
||||||
import manager from './components/manager.vue'
|
import manager from './components/manager.vue'
|
||||||
|
import UserDropdown from '@/components/UserDropdown.vue'
|
||||||
|
|
||||||
const customerCommunicationRate = ref(85)
|
const customerCommunicationRate = ref(85)
|
||||||
const averageResponseTime = ref(15)
|
const averageResponseTime = ref(15)
|
||||||
@@ -726,6 +715,7 @@ const getStatusText = (status) => {
|
|||||||
.logo-section {
|
.logo-section {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
gap: 1rem;
|
gap: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -809,7 +799,7 @@ const getStatusText = (status) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.actions-summary {
|
.actions-summary {
|
||||||
grid-template-columns: repeat(2, 1fr);
|
grid-template-columns: repeat(4, 1fr);
|
||||||
gap: 0.5rem;
|
gap: 0.5rem;
|
||||||
margin-bottom: 1rem;
|
margin-bottom: 1rem;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user