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"
>
-
-
-
- {{ scope.row }}
-
-
-
+
+
+
+
+
+
+
+
+
+ {{ scope.row }}
+
+
+
+
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 @@
+
+
+
+
+
+ {{ daterange.start || '请选择日期' }}
+
+
+ 至
+
+
+ {{ daterange.end || '请选择日期' }}
+
+
+
+
+
+
+ {{ tag.label }}
+
+
+
+
+
+
+
+
+
+
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 @@
+
+
+
+
+
+ {{ vr.label }}
+
+
+
+
+
+
+
+
+
+
+
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 @@
-
+
{{ title }}
@@ -8,11 +8,20 @@
-
+
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 @@
-
-
-
- {{ itemy.label }}
- {{ itemy.value }}
-
+
+
+
+
+
+
+
+
+ {{ itemy.label }}
+ {{ itemy.value }}
+
+
+
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 @@
-
-
- {{ item.label }}
- {{ item.value }}
+
+
+
-
+
+
+
+
+ {{ item.label }}
+ {{ item.value }}
+
+
+
@@ -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"
>
-
-
-
- {{ scope.row }}
-
-
-
-
- 查看更多
-
+
+
+
+
+
+
+
+
+
+ {{ scope.row }}
+
+
+
+
+ 查看更多
+
+
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 @@
-
-
-
-
+
+
+
+
+ handleReset('organization')"
+ @confirm="value => handleConfirm('organization', value)"
+ />
+
+
+
+
+ handleReset('date')"
+ @confirm="value => handleConfirm('date', value)"
+ />
+
+
+
+
+
+
+
+
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 @@
>