From 422641177576eb9a8b70fa7fa01666545ac11e02 Mon Sep 17 00:00:00 2001 From: kaeery <3491123437@qq.com> Date: Wed, 5 Mar 2025 23:10:53 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E6=8B=9B=E7=94=9F=E5=B0=8F=E7=A8=8B?= =?UTF-8?q?=E5=BA=8F=E3=80=91=20=E4=BC=98=E5=8C=96#=20=E5=9B=A2=E9=98=9F?= =?UTF-8?q?=EF=BC=9A=E7=BA=BF=E7=B4=A2=E8=BD=AC=E5=8C=96=E6=83=85=E5=86=B5?= =?UTF-8?q?=E5=88=86=E6=9E=90=E5=B8=83=E5=B1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/admin.ts | 12 ++ src/bundle/pages/rank-list/index.vue | 2 +- src/components/date-dropdown/daterange.vue | 4 +- src/components/select-dropdown/index.vue | 2 +- src/components/widgets/admin/filter-value.vue | 70 ++++++++++++ src/components/widgets/admin/orga-picker.vue | 2 +- .../personally/components/position-tabs.vue | 3 +- .../widgets/admin/personally/index.vue | 10 +- .../admin/team/components/clue-status.vue | 18 ++- .../team/components/converted-overview.vue | 34 +++--- .../widgets/admin/team/components/rank.vue | 25 +++-- src/components/widgets/admin/team/index.vue | 17 ++- src/components/widgets/empty/empty.vue | 2 +- src/enums/index.ts | 4 + src/hooks/useCommon.ts | 104 ++++++++---------- src/pages.json | 3 +- src/pages/admin/home/index.vue | 4 +- .../u-line-progress/lineProgress.js | 3 +- .../components/u-line-progress/props.js | 4 + .../u-line-progress/u-line-progress.vue | 24 +++- 20 files changed, 232 insertions(+), 115 deletions(-) create mode 100644 src/components/widgets/admin/filter-value.vue diff --git a/src/api/admin.ts b/src/api/admin.ts index e2ed477..e5ce475 100644 --- a/src/api/admin.ts +++ b/src/api/admin.ts @@ -16,6 +16,10 @@ export function apiOrganizationByIdList() { export function apiOrganizationAllList() { return request.get({ url: '/organization/getAllChildOrgInfo' }) } +// 岗位列表 +export function postLists(params?: any) { + return request.get({ url: '/system/post/list', data: params }) +} // 数据简报 export function apiDataOverview(params: any) { @@ -29,3 +33,11 @@ export function convertProcessApi(params?: any) { export function clueStatusApi(params?: any) { return request.get({ url: '/control/clueStatistics', data: params }) } +// 成交客户转化统计 +export function convertedSuccessApi(params?: any) { + return request.get({ url: '/control/clueTransactionCustomerStatistics', data: params }) +} +// Top5 +export function rankListApi(params?: any) { + return request.get({ url: '/control/top', data: params }) +} diff --git a/src/bundle/pages/rank-list/index.vue b/src/bundle/pages/rank-list/index.vue index dd1ace7..e9bb8fb 100644 --- a/src/bundle/pages/rank-list/index.vue +++ b/src/bundle/pages/rank-list/index.vue @@ -25,7 +25,7 @@ - + --> @@ -90,6 +90,7 @@ const handleCardClick = (type: string, item: any) => { break } } +// 查询条件 const handleConfirm = (type: string, item) => { switch (type) { case 'organization': @@ -100,11 +101,14 @@ const handleConfirm = (type: string, item) => { break case 'position': + console.log(item) + break default: break } } +// 重置条件 const handleReset = (type: string) => { switch (type) { case 'organization': diff --git a/src/components/widgets/admin/team/components/clue-status.vue b/src/components/widgets/admin/team/components/clue-status.vue index 5a95547..f457222 100644 --- a/src/components/widgets/admin/team/components/clue-status.vue +++ b/src/components/widgets/admin/team/components/clue-status.vue @@ -14,11 +14,17 @@ :key="`unique_${index}`" > {{ item.label }} - + + + + + {{ item.value + '%' }} + @@ -56,6 +62,8 @@ const fetchData = async (payload: IForm) => { value: result[item] || 0 } }) + console.log(data.value) + loading.value = false } catch (error) {} } diff --git a/src/components/widgets/admin/team/components/converted-overview.vue b/src/components/widgets/admin/team/components/converted-overview.vue index efc4ba3..7d8e2d7 100644 --- a/src/components/widgets/admin/team/components/converted-overview.vue +++ b/src/components/widgets/admin/team/components/converted-overview.vue @@ -26,6 +26,7 @@ import { ref } from 'vue' import card from '../../card.vue' import { IForm } from '../index.vue' +import { convertedSuccessApi } from '@/api/admin' interface IConvertedData { name: string @@ -33,29 +34,24 @@ interface IConvertedData { } const data = ref([]) const loading = ref(false) -const fetchData = (payload: IForm) => { +const fetchData = async (payload: IForm) => { loading.value = true - setTimeout(() => { - data.value = [ - { - name: '湛江团队', + try { + const result = await convertedSuccessApi(payload) + console.log(result) + data.value = result.map(item => { + const { clientCount, clueCount, percentConversion } = item.leadToCustomerStatisticsVo + return { + name: item.organizationName, children: [ - { label: '线索', value: '52个' }, - { label: '成交客户', value: '52个' }, - { label: '转化率', value: '15%' } - ] - }, - { - name: '广州团队', - children: [ - { label: '线索', value: '52个' }, - { label: '成交客户', value: '52个' }, - { label: '转化率', value: '15%' } + { label: '线索', value: clueCount ?? 0 + '个' }, + { label: '成交客户', value: clientCount ?? 0 + '个' }, + { label: '转化率', value: percentConversion } ] } - ] - loading.value = false - }, 300) + }) + } catch (error) {} + loading.value = false } defineExpose({ fetchData diff --git a/src/components/widgets/admin/team/components/rank.vue b/src/components/widgets/admin/team/components/rank.vue index 10f1353..2f84568 100644 --- a/src/components/widgets/admin/team/components/rank.vue +++ b/src/components/widgets/admin/team/components/rank.vue @@ -1,6 +1,6 @@ -