|
@@ -0,0 +1,208 @@
|
|
|
+<script setup lang="ts">
|
|
|
+import {
|
|
|
+ getBroker,
|
|
|
+ getDesignerStatistics,
|
|
|
+ getFollowStatistics,
|
|
|
+ getYearTarget,
|
|
|
+} from '../../../core/libs/requests'
|
|
|
+import { NetImages } from '../../../core/libs/net-images'
|
|
|
+import store, { useUserStore } from '../../../store'
|
|
|
+import { storeToRefs } from 'pinia'
|
|
|
+import qrCode from '@designer-hub/assets/src/libs/assets/qrCode'
|
|
|
+import Card from '@designer-hub/app/src/components/card.vue'
|
|
|
+
|
|
|
+const userStore = useUserStore()
|
|
|
+const { userInfo } = storeToRefs(userStore)
|
|
|
+const { data: agent, run: setAgent } = useRequest(() =>
|
|
|
+ getBroker({ brokerId: userInfo.value.userId.toString() }),
|
|
|
+)
|
|
|
+const { data: yearTarget, run: setYearTarget } = useRequest(() => getYearTarget())
|
|
|
+const { data: designerData, run: setdesignerData } = useRequest(() => getDesignerStatistics())
|
|
|
+const { data: followData, run: setFollowData } = useRequest(() => getFollowStatistics())
|
|
|
+const toSettings = () => {
|
|
|
+ uni.navigateTo({ url: '/pages/mine/agent/settings/index' })
|
|
|
+}
|
|
|
+onMounted(async () => {
|
|
|
+ await setAgent()
|
|
|
+ await Promise.all([setYearTarget(), setdesignerData(), setFollowData()])
|
|
|
+})
|
|
|
+</script>
|
|
|
+<template>
|
|
|
+ <div>
|
|
|
+ <div class="aspect-[0.96/1] absolute left-0 right-0 top--1">
|
|
|
+ <wd-img
|
|
|
+ width="100%"
|
|
|
+ height="100%"
|
|
|
+ :src="NetImages.AgentMineHeaderBg"
|
|
|
+ custom-class="vertical-bottom"
|
|
|
+ ></wd-img>
|
|
|
+ </div>
|
|
|
+ <!-- <wd-navbar
|
|
|
+ fixed
|
|
|
+ safeAreaInsetTop
|
|
|
+ custom-class="bg-transparent!"
|
|
|
+ :bordered="false"
|
|
|
+ placeholder
|
|
|
+ v-bind="navBarProps"
|
|
|
+ ></wd-navbar> -->
|
|
|
+ <div class="p-4 flex flex-col gap-4 relative">
|
|
|
+ <div class="flex items-center px-4 mb-4" @click="toSettings">
|
|
|
+ <wd-img
|
|
|
+ round
|
|
|
+ width="56"
|
|
|
+ height="56"
|
|
|
+ custom-class="border border-solid border-white"
|
|
|
+ :src="agent.headImgUrl"
|
|
|
+ />
|
|
|
+ <div class="mx-4 flex-1">
|
|
|
+ <div class="text-white text-lg font-normal font-['PingFang_SC'] leading-normal">
|
|
|
+ {{ agent.brokerName }}
|
|
|
+ </div>
|
|
|
+ <div class="text-white text-xs font-normal font-['PingFang_SC'] leading-relaxed">
|
|
|
+ ID:{{ agent.inviteCode }}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <div class="w-[29px] h-[29px] relative">
|
|
|
+ <wd-img width="28" height="28" :src="qrCode"></wd-img>
|
|
|
+ </div>
|
|
|
+ <div class="text-white text-[10px] font-normal font-['PingFang_SC'] leading-relaxed">
|
|
|
+ 邀请码
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <Card>
|
|
|
+ <SectionHeading title="本年目标" size="base"></SectionHeading>
|
|
|
+ <div class="flex flex-col gap-2.5 mt-3">
|
|
|
+ <template v-for="(it, i) in yearTarget" :key="i">
|
|
|
+ <div
|
|
|
+ class="bg-gradient-to-r from-[#fef3ee] to-[#f0f4f9] rounded-lg flex items-center p-4 gap-6"
|
|
|
+ >
|
|
|
+ <div>
|
|
|
+ <div class="w-[45px] h-[45px] rounded-full border-4 border-[#ffe2d0]">
|
|
|
+ <div style="width: 50px; height: 50px">
|
|
|
+ <wd-circle
|
|
|
+ :model-value="
|
|
|
+ it.thisYearComplete && it.target
|
|
|
+ ? (Number(it.thisYearComplete) / Number(it.target)) * 100
|
|
|
+ : 0
|
|
|
+ "
|
|
|
+ :size="50"
|
|
|
+ :color="['#FF7742', '#FFAA42', '#4271FF', '#C131FF'][i]"
|
|
|
+ :clockwise="false"
|
|
|
+ >
|
|
|
+ <div class="flex flex-col items-center">
|
|
|
+ <div
|
|
|
+ class="w-[29.20px] h-[18.39px] text-black text-sm font-medium font-['DIN']"
|
|
|
+ >
|
|
|
+ {{
|
|
|
+ it.thisYearComplete && it.target
|
|
|
+ ? (Number(it.thisYearComplete) / Number(it.target)) * 100
|
|
|
+ : 0
|
|
|
+ }}%
|
|
|
+ </div>
|
|
|
+ <div
|
|
|
+ class="w-[22.71px] h-[10.82px] text-black/60 text-[7px] font-normal font-['PingFang_SC']"
|
|
|
+ >
|
|
|
+ 达成率
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </wd-circle>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="flex-1">
|
|
|
+ <div class="text-black/60 text-xs font-normal font-['PingFang_SC']">
|
|
|
+ {{ it.typeName }}
|
|
|
+ </div>
|
|
|
+ <div class="flex items-center gap-1">
|
|
|
+ <div class="text-black/90 text-lg font-medium font-['DIN'] leading-normal">
|
|
|
+ <!-- 6000 -->
|
|
|
+ {{ it.target / 10000 }}
|
|
|
+ </div>
|
|
|
+ <div class="text-black text-xs font-normal font-['PingFang_SC']">万</div>
|
|
|
+ </div>
|
|
|
+ <div class="flex items-center gap-1">
|
|
|
+ <div class="text-black/60 text-xs font-normal font-['PingFang_SC']">差值</div>
|
|
|
+ <div class="text-[#ff2d2d] text-xs font-medium font-['DIN'] leading-normal">
|
|
|
+ <!-- 3000 -->
|
|
|
+ {{ (it.target - it.thisYearComplete) / 10000 }}
|
|
|
+ </div>
|
|
|
+ <div class="text-[#ff2d2d] text-[10px] font-medium font-['DIN'] leading-normal">
|
|
|
+ 万
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="">
|
|
|
+ <div class="text-black/60 text-xs font-normal font-['PingFang_SC']">当年完成</div>
|
|
|
+ <div class="flex items-center gap-1">
|
|
|
+ <div class="text-black/90 text-lg font-medium font-['DIN'] leading-normal">
|
|
|
+ <!-- 6000 -->
|
|
|
+ {{ it.thisYearComplete / 10000 }}
|
|
|
+ </div>
|
|
|
+ <div class="text-black text-xs font-normal font-['PingFang_SC']">万</div>
|
|
|
+ </div>
|
|
|
+ <div class="flex items-center gap-1">
|
|
|
+ <div class="text-black/60 text-xs font-normal font-['PingFang_SC']">本月</div>
|
|
|
+ <div class="text-[#0FC187] text-xs font-medium font-['DIN'] leading-normal">
|
|
|
+ <!-- 3000 -->
|
|
|
+ {{ it.thisMonthComplete / 10000 }}
|
|
|
+ </div>
|
|
|
+ <div class="text-[#0FC187] text-[10px] font-medium font-['DIN'] leading-normal">
|
|
|
+ 万
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </div>
|
|
|
+ </Card>
|
|
|
+ <Card>
|
|
|
+ <SectionHeading title="设计师数据" size="base"></SectionHeading>
|
|
|
+ <div class="mt-3 grid grid-cols-3 gap-2.5">
|
|
|
+ <template v-for="(it, i) in designerData" :key="i">
|
|
|
+ <div class="bg-[#f6f7ff] rounded-lg aspect-[1/1] flex flex-col justify-around p-2.5">
|
|
|
+ <div class="text-black/60 text-xs font-normal font-['PingFang_SC'] leading-none">
|
|
|
+ {{ it.typeName }}
|
|
|
+ </div>
|
|
|
+ <div class="text-black/90 text-lg font-bold font-['D-DIN Exp'] leading-normal">
|
|
|
+ {{ it.quantity }}
|
|
|
+ </div>
|
|
|
+ <div class="flex items-center gap-1">
|
|
|
+ <div class="text-black/40 text-xs font-normal font-['PingFang_SC'] leading-none">
|
|
|
+ 年新增
|
|
|
+ </div>
|
|
|
+ <div class="text-[#ff2d2d] text-xs font-normal font-['D-DIN Exp'] leading-normal">
|
|
|
+ 20
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </div>
|
|
|
+ </Card>
|
|
|
+ <Card>
|
|
|
+ <SectionHeading title="跟进数据" size="base"></SectionHeading>
|
|
|
+ <div class="mt-3 grid grid-cols-3 gap-2.5">
|
|
|
+ <template v-for="(it, i) in followData" :key="i">
|
|
|
+ <div class="bg-[#f6f7ff] rounded-lg aspect-[1/1] flex flex-col justify-around p-2.5">
|
|
|
+ <div class="text-black/60 text-xs font-normal font-['PingFang_SC'] leading-none">
|
|
|
+ {{ it.typeName }}
|
|
|
+ </div>
|
|
|
+ <div class="text-black/90 text-lg font-bold font-['D-DIN Exp'] leading-normal">
|
|
|
+ {{ it.quantity }}
|
|
|
+ </div>
|
|
|
+ <div class="flex items-center gap-1">
|
|
|
+ <div class="text-black/40 text-xs font-normal font-['PingFang_SC'] leading-none">
|
|
|
+ 年新增
|
|
|
+ </div>
|
|
|
+ <div class="text-[#ff2d2d] text-xs font-normal font-['D-DIN Exp'] leading-normal">
|
|
|
+ 20
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </div>
|
|
|
+ </Card>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+</template>
|