Kaynağa Gözat

refactor(mine): 重构设计师数据展示逻辑

- 引入 ListHelperEvo 组件用于渲染设计师数据列表
- 优化设计师数据处理逻辑,添加占比计算- 调整消息页面相关组件,提高系统消息展示优先级
EvilDragon 4 ay önce
ebeveyn
işleme
d5b3fdc6cf

+ 1 - 2
packages/app/src/pages/messages/components/message-card.vue

@@ -72,10 +72,9 @@ onMounted(async () => {
         <div class="my-3 text-black/40 text-sm font-normal font-['PingFang_SC'] leading-[25px]">
           <!-- {{ options.detailBody }} -->
           <div
-            v-if="options.messageType === MessageType.Integral"
+            v-if="[MessageType.Integral, MessageType.System].includes(options.messageType)"
             v-html="options.detailBody"
           ></div>
-          <div v-html="options.detailBody"></div>
           <div class="grid grid-cols-[auto_1fr] gap-x-5 gap-y-4.5">
             <template v-if="options.messageSubType === 31 && options.isRead !== '1'">
               <div

+ 1 - 1
packages/app/src/pages/messages/index.vue

@@ -97,7 +97,7 @@ const handleQ = async (msg, res) => {
   show.value = true
 }
 onShow(async () => {
-  nextTick(() => {
+  await nextTick(() => {
     pageHelperRef.value?.reload()
   })
 })

+ 39 - 18
packages/merchant/src/pages/mine/components/agent-mine.vue

@@ -15,6 +15,7 @@ import { getFollowUpPage } from '@/core/libs/agent-requests'
 import { locationIcon } from '@designer-hub/assets/src/svgs'
 import { dayjs } from 'wot-design-uni'
 import PageHelperEvo from '@/components/page-helper-evo.vue'
+import ListHelperEvo from '@/components/list-helper-evo.vue'
 
 const userStore = useUserStore()
 const { userInfo } = storeToRefs(userStore)
@@ -22,8 +23,21 @@ const { data: agent, run: setAgent } = useRequest(() =>
   getBroker({ brokerId: String(userInfo.value.userId) }),
 )
 const { data: yearTarget, run: setYearTarget } = useRequest(() => getYearTarget())
-const { data: designerData, run: setdesignerData } = useRequest(() => getDesignerStatistics())
+const { data: designerData, run: setDesignerData } = useRequest(() => getDesignerStatistics())
 const { data: followData, run: setFollowData } = useRequest(() => getFollowStatistics())
+const designerDataList = computed(() =>
+  designerData.value
+    ?.filter((it: any) => it.type !== 2)
+    .map((it: any, index: number) => ({
+      title: it.typeName,
+      value: it.quantity ?? 0,
+      subTitle: index === 0 ? designerData.value[1].typeName : '占比',
+      subValue:
+        index === designerData.value[1].quantity
+          ? 0
+          : `${((it.quantity / designerData.value[0].quantity) * 100).toFixed(0)}%`,
+    })),
+)
 const bgClass = [
   'bg-gradient-to-r from-[#fef3ee] to-[#f0f4f9]',
   'bg-gradient-to-r from-[#fef8ee] to-[#f0f4f9]',
@@ -38,7 +52,7 @@ const toInvite = () => {
 }
 onMounted(async () => {
   await setAgent()
-  await Promise.all([setYearTarget(), setdesignerData(), setFollowData()])
+  await Promise.all([setYearTarget(), setDesignerData(), setFollowData()])
 })
 </script>
 <template>
@@ -171,25 +185,32 @@ onMounted(async () => {
       </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 class="mt-3">
+          <ListHelperEvo
+            v-if="designerDataList.length"
+            :items="designerDataList"
+            content-class="grid grid-cols-3 gap-2.5"
+          >
+            <template #default="{ item }">
+              <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">
+                  {{ item.title }}
                 </div>
-                <div class="text-[#ff2d2d] text-xs font-normal font-['D-DIN Exp'] leading-normal">
-                  20
+                <div class="text-black/90 text-lg font-bold font-['D-DIN Exp'] leading-normal">
+                  {{ item.value }}
+                </div>
+                <div class="flex items-center gap-1">
+                  <div class="text-black/40 text-xs font-normal font-['PingFang_SC'] leading-none">
+                    {{ item.subTitle }}
+                  </div>
+                  <div class="text-[#ff2d2d] text-xs font-normal font-['D-DIN Exp'] leading-normal">
+                    {{ item.subValue }}
+                  </div>
                 </div>
               </div>
-            </div>
-          </template>
+            </template>
+          </ListHelperEvo>
+          <!--          <template v-for="(it, i) in designerData" :key="i"></template>-->
         </div>
       </Card>
       <Card>