From 329ad167a530416299027beb80d5b209b58a81bc Mon Sep 17 00:00:00 2001 From: kaeery <3491123437@qq.com> Date: Tue, 4 Mar 2025 21:08:37 +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=E4=B8=BB=E8=B4=A6?= =?UTF-8?q?=E5=8F=B7=EF=BC=9A=E5=9B=A2=E9=98=9F=E4=B8=9A=E5=8A=A1=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/bundle/pages/rank-list/index.vue | 85 +++---- src/components/da-dropdown/utils.ts | 4 +- src/components/date-dropdown/daterange.vue | 215 +++++++++++++++++ src/components/date-dropdown/picker.vue | 222 ++++++++++++++++++ src/components/widgets/admin/card.vue | 15 +- .../widgets/admin/dropdown-footer.vue | 77 ++++++ .../components => }/orga-picker.vue | 30 ++- .../components/recruitsale-card.vue | 2 +- .../personally/components/telesale-card.vue | 2 +- .../widgets/admin/personally/index.vue | 2 +- .../admin/team/components/clue-status.vue | 65 +++-- .../team/components/converted-overview.vue | 78 +++--- .../admin/team/components/data-overview.vue | 58 +++-- .../widgets/admin/team/components/rank.vue | 104 +++----- src/components/widgets/admin/team/index.vue | 100 +++++++- src/hooks/useCommon.ts | 97 +++++++- src/pages/admin/home/index.vue | 4 +- src/pages/admin/my/index.vue | 5 +- .../uview-plus/components/u-dropdown/props.js | 4 + .../components/u-dropdown/u-dropdown.vue | 9 +- 20 files changed, 967 insertions(+), 211 deletions(-) create mode 100644 src/components/date-dropdown/daterange.vue create mode 100644 src/components/date-dropdown/picker.vue create mode 100644 src/components/widgets/admin/dropdown-footer.vue rename src/components/widgets/admin/{personally/components => }/orga-picker.vue (86%) diff --git a/src/bundle/pages/rank-list/index.vue b/src/bundle/pages/rank-list/index.vue index 7f26e59..dd1ace7 100644 --- a/src/bundle/pages/rank-list/index.vue +++ b/src/bundle/pages/rank-list/index.vue @@ -17,71 +17,40 @@ lineColor="#0E66FB" @change="handleChangeTab" > - - - + + diff --git a/src/components/da-dropdown/utils.ts b/src/components/da-dropdown/utils.ts index a5ce8d8..75927d7 100644 --- a/src/components/da-dropdown/utils.ts +++ b/src/components/da-dropdown/utils.ts @@ -149,7 +149,7 @@ export function getRangeDate(v) { // 本周 } else if (v === '-7') { const weekStart = new Date(nowYear, nowMonth, nowDay - nowWeekDay + 1) - const weekEnd = new Date(nowTime + oneDay) // 今日 + const weekEnd = new Date(nowYear, nowMonth, nowDay - nowWeekDay + 7) // 本周日 dateRange.start = formatTime(weekStart, 'y-m-d') dateRange.end = formatTime(weekEnd, 'y-m-d') // 上周 @@ -161,7 +161,7 @@ export function getRangeDate(v) { // 本月 } else if (v === '-30') { const monthStart = new Date(nowYear, nowMonth, 1) - const monthEnd = new Date(nowTime + oneDay) + const monthEnd = new Date(nowYear, nowMonth + 1, 0) //本月 dateRange.start = formatTime(monthStart, 'y-m-d') dateRange.end = formatTime(monthEnd, 'y-m-d') // 上月 diff --git a/src/components/date-dropdown/daterange.vue b/src/components/date-dropdown/daterange.vue new file mode 100644 index 0000000..6e28e95 --- /dev/null +++ b/src/components/date-dropdown/daterange.vue @@ -0,0 +1,215 @@ + + + + + diff --git a/src/components/date-dropdown/picker.vue b/src/components/date-dropdown/picker.vue new file mode 100644 index 0000000..e90b7ad --- /dev/null +++ b/src/components/date-dropdown/picker.vue @@ -0,0 +1,222 @@ + + + + + diff --git a/src/components/widgets/admin/card.vue b/src/components/widgets/admin/card.vue index 8b50ded..26604b1 100644 --- a/src/components/widgets/admin/card.vue +++ b/src/components/widgets/admin/card.vue @@ -1,5 +1,5 @@ - + diff --git a/src/components/widgets/admin/dropdown-footer.vue b/src/components/widgets/admin/dropdown-footer.vue new file mode 100644 index 0000000..c3be798 --- /dev/null +++ b/src/components/widgets/admin/dropdown-footer.vue @@ -0,0 +1,77 @@ + + + + + diff --git a/src/components/widgets/admin/personally/components/orga-picker.vue b/src/components/widgets/admin/orga-picker.vue similarity index 86% rename from src/components/widgets/admin/personally/components/orga-picker.vue rename to src/components/widgets/admin/orga-picker.vue index 089446d..3eb17c5 100644 --- a/src/components/widgets/admin/personally/components/orga-picker.vue +++ b/src/components/widgets/admin/orga-picker.vue @@ -22,13 +22,16 @@ + diff --git a/src/components/widgets/admin/team/components/converted-overview.vue b/src/components/widgets/admin/team/components/converted-overview.vue index 79b9ded..9cf565f 100644 --- a/src/components/widgets/admin/team/components/converted-overview.vue +++ b/src/components/widgets/admin/team/components/converted-overview.vue @@ -1,39 +1,63 @@ diff --git a/src/components/widgets/admin/team/components/data-overview.vue b/src/components/widgets/admin/team/components/data-overview.vue index ca50451..888b99d 100644 --- a/src/components/widgets/admin/team/components/data-overview.vue +++ b/src/components/widgets/admin/team/components/data-overview.vue @@ -1,16 +1,23 @@ @@ -19,13 +26,28 @@ import { ref } from 'vue' import card from '../../card.vue' -const data = ref([ - { label: '新增跟进', value: 368 }, - { label: '新增客户', value: 368 }, - { label: '成交客户', value: 368 }, - { label: '转化中客户', value: 368 }, - { label: '异常待处理', value: 368 }, - { label: '战败客户', value: 368 } -]) +interface DataItem { + label: string + value: number +} +const loading = ref(false) +const data = ref([]) +const fetchData = () => { + loading.value = true + setTimeout(() => { + data.value = [ + { label: '新增跟进', value: 368 }, + { label: '新增客户', value: 368 }, + { label: '成交客户', value: 368 }, + { label: '转化中客户', value: 368 }, + { label: '异常待处理', value: 368 }, + { label: '战败客户', value: 368 } + ] + loading.value = false + }, 500) +} +defineExpose({ + fetchData +}) - + diff --git a/src/components/widgets/admin/team/components/rank.vue b/src/components/widgets/admin/team/components/rank.vue index b30551d..10f1353 100644 --- a/src/components/widgets/admin/team/components/rank.vue +++ b/src/components/widgets/admin/team/components/rank.vue @@ -18,84 +18,56 @@ lineColor="#0E66FB" @change="handleChangeTab" > - - - - - 查看更多 - + + diff --git a/src/components/widgets/admin/team/index.vue b/src/components/widgets/admin/team/index.vue index a12805f..f2e6cb4 100644 --- a/src/components/widgets/admin/team/index.vue +++ b/src/components/widgets/admin/team/index.vue @@ -1,16 +1,108 @@ diff --git a/src/hooks/useCommon.ts b/src/hooks/useCommon.ts index 0b84540..ff5fc48 100644 --- a/src/hooks/useCommon.ts +++ b/src/hooks/useCommon.ts @@ -1,5 +1,5 @@ import { apiCluseDetail } from '@/api/clue' -import { ref } from 'vue' +import { computed, ref, shallowRef } from 'vue' // 获取线索详情 export function useClueDetail() { @@ -19,3 +19,98 @@ export function useClueDetail() { fetchClueDetail } } + +interface IRank { + index: number + name: string + total: number +} +interface IRankTab { + name: string + value: number + id: number +} +// 主账号排行榜 +export function useRank({ width }: { width: number }) { + const tabs = ref([]) + const activeTab = ref() + const loading = ref(false) + const data = ref([]) + const totalLabel = computed(() => (activeTab.value == 5 ? '意向' : '成交')) + const rankStyle = computed(() => row => { + const styleMap: Record = { + '1': '#FCAE3C', + '2': '#BCC1D8', + '3': '#EEB286' + } + return { + color: row >= 4 ? '#3d3d3d' : '#fff', + background: styleMap[row] + } + }) + + const handleChangeTab = item => { + activeTab.value = item.id + generateColumns() + } + const generateColumns = () => { + return [ + { name: 'index', label: '排名', slot: true }, + { name: 'name', label: '姓名' }, + { name: 'total', label: totalLabel.value + '客户数', width, align: 'right' } + ] + } + + const columns = ref(generateColumns()) + const fetchTabs = () => { + return new Promise(resolve => { + tabs.value = [ + { name: '电销业绩排行榜', value: 1, id: 5 }, + { name: '招生业绩排行榜', value: 2, id: 6 } + ] + if (tabs.value.length > 0) activeTab.value = tabs.value[0] + resolve(tabs.value) + }) + } + const fetchData = async () => { + await fetchTabs() + console.log(activeTab.value) + loading.value = true + setTimeout(() => { + data.value = [ + { + index: 1, + name: '王小虎1789789789789789', + total: 100 + }, + { + index: 2, + name: '王小虎2', + total: 20 + }, + { + index: 3, + name: '王小虎2', + total: 20 + }, + { + index: 4, + name: '王小虎2', + total: 20 + } + ] + loading.value = false + }, 500) + } + + return { + fetchData, + rankStyle, + activeTab, + columns, + tabs, + data, + loading, + handleChangeTab + } +} diff --git a/src/pages/admin/home/index.vue b/src/pages/admin/home/index.vue index a115aa0..a6259a6 100644 --- a/src/pages/admin/home/index.vue +++ b/src/pages/admin/home/index.vue @@ -9,7 +9,7 @@ lineColor="#0E66FB" @change="handleChangeTab" > - + @@ -22,7 +22,7 @@ import { AdminTabEnum } from '@/enums' import adminTeam from '@/components/widgets/admin/team/index.vue' import personally from '@/components/widgets/admin/personally/index.vue' -const activeTab = ref(AdminTabEnum.PERSONALLY) +const activeTab = ref(AdminTabEnum.TEAM) const tabs = shallowRef([ { name: '团队', value: AdminTabEnum.TEAM }, { name: '个人', value: AdminTabEnum.PERSONALLY } diff --git a/src/pages/admin/my/index.vue b/src/pages/admin/my/index.vue index 6fafcd4..e57819e 100644 --- a/src/pages/admin/my/index.vue +++ b/src/pages/admin/my/index.vue @@ -1,6 +1,7 @@ - + + diff --git a/src/uni_modules/uview-plus/components/u-dropdown/props.js b/src/uni_modules/uview-plus/components/u-dropdown/props.js index 4614b96..537a675 100644 --- a/src/uni_modules/uview-plus/components/u-dropdown/props.js +++ b/src/uni_modules/uview-plus/components/u-dropdown/props.js @@ -56,6 +56,10 @@ export const props = defineMixin({ menuIconSize: { type: [Number, String], default: 14 + }, + isFlex: { + type: Boolean, + default: true } } }) diff --git a/src/uni_modules/uview-plus/components/u-dropdown/u-dropdown.vue b/src/uni_modules/uview-plus/components/u-dropdown/u-dropdown.vue index 0518eb7..5f40141 100644 --- a/src/uni_modules/uview-plus/components/u-dropdown/u-dropdown.vue +++ b/src/uni_modules/uview-plus/components/u-dropdown/u-dropdown.vue @@ -11,6 +11,7 @@ >