123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- <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' })
- }
- const toInvite = () => {
- uni.navigateTo({ url: '/pages/mine/agent/invite/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 class="flex flex-col items-center" @click.stop="toInvite">
- <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>
|