From 8780a94f8241d2f6b4d3012e739c670a1e7c818e Mon Sep 17 00:00:00 2001 From: lbw_9527443 <780139497@qq.com> Date: Thu, 21 Aug 2025 11:43:59 +0800 Subject: [PATCH] =?UTF-8?q?feat(topone):=20=E5=AE=9E=E7=8E=B0=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E4=B8=8B=E5=8F=91=E5=8A=9F=E8=83=BD=E5=B9=B6=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E7=95=8C=E9=9D=A2=E5=B8=83=E5=B1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加任务下发API接口并在任务列表组件中引入 - 修改任务创建逻辑,对接后端API - 获取下属人员列表用于任务分配 - 优化表格布局,移除总业绩列 - 删除不必要的指导建议模块 --- my-vue-app/src/api/top.js | 5 + .../maneger/components/MemberDetails.vue | 8 +- .../maneger/components/PerformanceRanking.vue | 14 +- my-vue-app/src/views/maneger/manager.vue | 8 +- .../secondTop/components/ActionItems.vue | 177 +----------------- .../views/senorManger/components/manager.vue | 6 +- .../src/views/senorManger/seniorManager.vue | 53 ------ .../src/views/topOne/components/TaskList.vue | 1 + my-vue-app/src/views/topOne/topone.vue | 118 +++++++++--- 9 files changed, 112 insertions(+), 278 deletions(-) diff --git a/my-vue-app/src/api/top.js b/my-vue-app/src/api/top.js index 0879fbf..6b51f69 100644 --- a/my-vue-app/src/api/top.js +++ b/my-vue-app/src/api/top.js @@ -65,4 +65,9 @@ export const getDetailedDataTable = (params) => { return https.post('/api/v1/level_five/overview/detailed_data_table', params) } +// 下发任务 /api/v1/level_five/overview/assign_tasks +export const assignTasks = (params) => { + return https.post('/api/v1/level_five/overview/assign_tasks', params) +} + diff --git a/my-vue-app/src/views/maneger/components/MemberDetails.vue b/my-vue-app/src/views/maneger/components/MemberDetails.vue index 095aa3f..69f45ca 100644 --- a/my-vue-app/src/views/maneger/components/MemberDetails.vue +++ b/my-vue-app/src/views/maneger/components/MemberDetails.vue @@ -26,10 +26,6 @@
成交单数
{{ selectedMember.deals || 0 }} 单
-
-
总业绩
-
¥{{ formatAmount(selectedMember.week_amount || selectedMember.performance) }}
-
转化率
{{ selectedMember.conversion_rate || selectedMember.conversion || '0%' }}
@@ -38,7 +34,7 @@
-
+
diff --git a/my-vue-app/src/views/maneger/components/PerformanceRanking.vue b/my-vue-app/src/views/maneger/components/PerformanceRanking.vue index 8a41cd8..a3a41d4 100644 --- a/my-vue-app/src/views/maneger/components/PerformanceRanking.vue +++ b/my-vue-app/src/views/maneger/components/PerformanceRanking.vue @@ -6,7 +6,6 @@
排名 姓名 - 总业绩 转化率 加微率 入群率 @@ -21,7 +20,6 @@ > {{ index + 1 }} {{ member.user_name || member.name }} - ¥{{ formatAmount(member.week_amount || member.performance) }} {{ member.conversion_rate || member.conversion || '0%' }} {{ member.plus_v_rate || member.wechatRate || '0%' }} {{ member.group_rate || member.groupRate || '0%' }} @@ -164,7 +162,7 @@ const handleDoubleClick = (member) => { .table-header { display: grid; - grid-template-columns: 60px 1fr 120px 80px 90px 90px; + grid-template-columns: 60px 1fr 80px 90px 90px; gap: 0.8rem; padding: 0.75rem 0; border-bottom: 1px solid #e2e8f0; @@ -176,7 +174,7 @@ const handleDoubleClick = (member) => { .table-row { display: grid; - grid-template-columns: 60px 1fr 120px 80px 90px 90px; + grid-template-columns: 60px 1fr 80px 90px 90px; gap: 0.8rem; padding: 0.75rem 0; border-bottom: 1px solid #f1f5f9; @@ -243,7 +241,7 @@ const handleDoubleClick = (member) => { .ranking-table { .table-header { - grid-template-columns: 40px 1fr 70px 55px 55px 55px; + grid-template-columns: 40px 1fr 70px 55px 55px; gap: 0.3rem; font-size: 0.75rem; padding: 0.5rem 0; @@ -251,7 +249,7 @@ const handleDoubleClick = (member) => { } .table-row { - grid-template-columns: 40px 1fr 70px 55px 55px 55px; + grid-template-columns: 40px 1fr 70px 55px 55px; gap: 0.3rem; font-size: 0.8rem; padding: 0.5rem 0; @@ -292,14 +290,14 @@ const handleDoubleClick = (member) => { .ranking-table { .table-header { - grid-template-columns: 30px 1fr 55px 45px 45px 45px; + grid-template-columns: 30px 1fr 55px 45px 45px; gap: 0.2rem; font-size: 0.7rem; white-space: nowrap; } .table-row { - grid-template-columns: 30px 1fr 55px 45px 45px 45px; + grid-template-columns: 30px 1fr 55px 45px 45px; gap: 0.2rem; font-size: 0.75rem; white-space: nowrap; diff --git a/my-vue-app/src/views/maneger/manager.vue b/my-vue-app/src/views/maneger/manager.vue index 7112a8d..591e095 100644 --- a/my-vue-app/src/views/maneger/manager.vue +++ b/my-vue-app/src/views/maneger/manager.vue @@ -1288,7 +1288,7 @@ onMounted(async () => { // PC端保持一致布局 @media (min-width: 1024px) { - grid-template-columns: 50px 1fr 100px 80px 90px 90px; + grid-template-columns: 50px 1fr 80px 90px 90px; gap: 1rem; font-size: 0.875rem; padding: 1rem 0; @@ -1296,7 +1296,7 @@ onMounted(async () => { // 平板端适配 @media (max-width: 1023px) and (min-width: 769px) { - grid-template-columns: 45px 1fr 90px 70px 90px 90px; + grid-template-columns: 45px 1fr 70px 90px 90px; gap: 0.75rem; font-size: 0.8125rem; @@ -1305,7 +1305,7 @@ onMounted(async () => { // 移动端适配 @media (max-width: 768px) { - grid-template-columns: 40px 1fr 80px 60px 90px 90px; + grid-template-columns: 40px 1fr 60px 90px 90px; gap: 0.5rem; font-size: 0.75rem; @@ -1343,7 +1343,7 @@ onMounted(async () => { // PC端保持一致布局 @media (min-width: 1024px) { - grid-template-columns: 50px 1fr 100px 80px 90px 90px; + grid-template-columns: 50px 1fr 80px 90px 90px; gap: 1rem; font-size: 0.875rem; diff --git a/my-vue-app/src/views/secondTop/components/ActionItems.vue b/my-vue-app/src/views/secondTop/components/ActionItems.vue index 7c817dd..ace8905 100644 --- a/my-vue-app/src/views/secondTop/components/ActionItems.vue +++ b/my-vue-app/src/views/secondTop/components/ActionItems.vue @@ -5,154 +5,10 @@
- -
-
- - -
-
-
{{ getCountByPriority('urgent') }}
-
紧急事项
-
-
-
{{ getCountByPriority('high') }}
-
高优先级
-
-
-
{{ getCountByPriority('medium') }}
-
中优先级
-
-
-
{{ completedCount }}
-
已完成
-
-
- - -
-
-
- -
- -
-
-

{{ action.title }}

-
- {{ getPriorityText(action.priority) }} - - {{ formatDueDate(action.dueDate) }} - -
-
- -

{{ action.description }}

- -
-
- 关联组别: - {{ action.relatedGroup || '全部' }} -
-
- 负责人: - {{ action.assignee }} -
-
- 进度: -
-
-
-
- {{ action.progress }}% -
-
-
- - -
-
-
- - -
-
-
-

暂无待处理事项

-

{{ filterPriority === 'all' ? '所有事项都已处理完成' : '该优先级下暂无事项' }}

-
-
- - -
@@ -292,34 +148,7 @@ const completedCount = computed(() => { return actions.value.filter(action => action.completed).length }) -// 按优先级获取数量 -const getCountByPriority = (priority) => { - return actions.value.filter(action => action.priority === priority && !action.completed).length -} -// 切换完成状态 -const toggleComplete = (id) => { - const action = actions.value.find(a => a.id === id) - if (action) { - action.completed = !action.completed - } -} - -// 判断是否过期 -const isOverdue = (dueDate) => { - return new Date(dueDate) < new Date() -} - -// 获取优先级文本 -const getPriorityText = (priority) => { - const priorityMap = { - urgent: '紧急', - high: '高', - medium: '中', - low: '低' - } - return priorityMap[priority] || priority -} // 格式化截止日期 const formatDueDate = (dueDate) => { diff --git a/my-vue-app/src/views/senorManger/components/manager.vue b/my-vue-app/src/views/senorManger/components/manager.vue index 43b64a3..c46bf61 100644 --- a/my-vue-app/src/views/senorManger/components/manager.vue +++ b/my-vue-app/src/views/senorManger/components/manager.vue @@ -1122,7 +1122,7 @@ const selectMember = (member) => { // PC端保持一致布局 @media (min-width: 1024px) { - grid-template-columns: 50px 1fr 100px 80px 90px 90px; + grid-template-columns: 50px 1fr 80px 90px 90px; gap: 1rem; font-size: 0.875rem; @@ -1131,7 +1131,7 @@ const selectMember = (member) => { // 平板端适配 @media (max-width: 1023px) and (min-width: 769px) { - grid-template-columns: 45px 1fr 90px 70px 90px 90px; + grid-template-columns: 45px 1fr 70px 90px 90px; gap: 0.75rem; font-size: 0.8125rem; @@ -1140,7 +1140,7 @@ const selectMember = (member) => { // 移动端适配 @media (max-width: 768px) { - grid-template-columns: 40px 1fr 80px 60px 90px 90px; + grid-template-columns: 40px 1fr 60px 90px 90px; gap: 0.5rem; font-size: 0.8rem; diff --git a/my-vue-app/src/views/senorManger/seniorManager.vue b/my-vue-app/src/views/senorManger/seniorManager.vue index fde5cb3..6f90b43 100644 --- a/my-vue-app/src/views/senorManger/seniorManager.vue +++ b/my-vue-app/src/views/senorManger/seniorManager.vue @@ -346,8 +346,6 @@ async function fetchAbnormalResponseRate() { console.error('获取异常预警失败:', error) } } - - // 统计指标--活跃客户沟通率 async function fetchCustomerCommunicationRate() { const params = getRequestParams() @@ -401,57 +399,6 @@ async function fetchUrgentNeedToAddress() { try { const response = await getUrgentNeedToAddress(hasParams ? params : undefined) problemRanking.value = response.data - /** - * "data": { - "user_name": "陈盼良", - "user_level": 3, - "calculate_urgent_issue_ratio": { - "成绩提升": "0.00%", - "少玩手机": "0.00%", - "回归学校": "0.00%", - "心理健康": "0.00%" - } - } - } - } -} - -// 团队详情加载样式 -.team-loading { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - padding: 3rem; - - .loading-spinner { - width: 40px; - height: 40px; - border: 4px solid #f3f3f3; - border-top: 4px solid #3498db; - border-radius: 50%; - animation: spin 1s linear infinite; - margin-bottom: 1rem; - } - - .loading-text { - color: #666; - font-size: 0.9rem; - } -} - -@keyframes spin { - 0% { transform: rotate(0deg); } - 100% { transform: rotate(360deg); }, - "urgent_issue_consultations": { - "成绩提升": 0, - "少玩手机": 0, - "回归学校": 0, - "心理健康": 0 - } - } - */ - // console.log('客户迫切解决的问题:', response.data) } catch (error) { console.error('获取客户迫切解决的问题失败:', error) } diff --git a/my-vue-app/src/views/topOne/components/TaskList.vue b/my-vue-app/src/views/topOne/components/TaskList.vue index 05afefa..56a8fcb 100644 --- a/my-vue-app/src/views/topOne/components/TaskList.vue +++ b/my-vue-app/src/views/topOne/components/TaskList.vue @@ -25,6 +25,7 @@