Преглед изворни кода

refactor(app): 更新会员相关组件和用户信息类型

EvilDragon пре 5 месеци
родитељ
комит
cbe4f5b50b

BIN
packages/app/src/assets/pngs/member-text-v1.png


+ 9 - 0
packages/app/src/assets/svgs/member-icon-v1.svg

@@ -0,0 +1,9 @@
+<svg width="20" height="19" viewBox="0 0 20 19" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M9.99989 0C10.2827 0 10.5505 0.124446 10.7316 0.338893L14.9455 5.34561L18.5194 2.9867C18.6776 2.88258 18.8631 2.82756 19.0525 2.82855C19.2419 2.82954 19.4268 2.88649 19.5839 2.99226C19.9044 3.20837 20.0606 3.5956 19.9783 3.97116L17.5972 14.8129C17.55 15.0243 17.432 15.2131 17.2627 15.3482C17.0935 15.4833 16.8832 15.5565 16.6666 15.5557H3.33315C3.11661 15.5565 2.9063 15.4833 2.73706 15.3482C2.56782 15.2131 2.44981 15.0243 2.40258 14.8129L0.0214436 3.97116C-0.0185619 3.78725 -0.00233997 3.59556 0.0680023 3.42099C0.138345 3.24643 0.259556 3.09705 0.415892 2.99226C0.573009 2.88649 0.757885 2.82954 0.947281 2.82855C1.13668 2.82756 1.32214 2.88258 1.48035 2.9867L5.05428 5.34561L9.26821 0.338893C9.44988 0.124446 9.71711 0 9.99989 0ZM2.22202 17.963C2.22202 17.4519 2.65758 17.0374 3.19426 17.0374H16.8055C17.1527 17.0374 17.4739 17.2135 17.6478 17.5002C17.733 17.6396 17.7781 17.7998 17.7781 17.9633C17.7781 18.1267 17.733 18.2869 17.6478 18.4263C17.4739 18.7124 17.1533 18.8891 16.8055 18.8891H3.19426C2.65758 18.8891 2.22202 18.4746 2.22202 17.963ZM8.54154 11.4818C8.54154 11.9929 8.9771 12.4074 9.51377 12.4074H10.486C11.0227 12.4074 11.4582 11.9929 11.4582 11.4818C11.4582 10.9707 11.0227 10.5557 10.486 10.5557H9.51377C8.9771 10.5557 8.54154 10.9701 8.54154 11.4818Z" fill="url(#paint0_linear_460_15303)"/>
+<defs>
+<linearGradient id="paint0_linear_460_15303" x1="7.5" y1="1.5" x2="18.5" y2="19" gradientUnits="userSpaceOnUse">
+<stop stop-color="#8FB8DB"/>
+<stop offset="0.745494" stop-color="#3D556B"/>
+</linearGradient>
+</defs>
+</svg>

+ 9 - 0
packages/app/src/assets/svgs/member-icon-v2.svg

@@ -0,0 +1,9 @@
+<svg width="20" height="19" viewBox="0 0 20 19" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M9.99989 0C10.2827 0 10.5505 0.124446 10.7316 0.338893L14.9455 5.34561L18.5194 2.9867C18.6776 2.88258 18.8631 2.82756 19.0525 2.82855C19.2419 2.82954 19.4268 2.88649 19.5839 2.99226C19.9044 3.20837 20.0606 3.5956 19.9783 3.97116L17.5972 14.8129C17.55 15.0243 17.432 15.2131 17.2627 15.3482C17.0935 15.4833 16.8832 15.5565 16.6666 15.5557H3.33315C3.11661 15.5565 2.9063 15.4833 2.73706 15.3482C2.56782 15.2131 2.44981 15.0243 2.40258 14.8129L0.0214436 3.97116C-0.0185619 3.78725 -0.00233997 3.59556 0.0680023 3.42099C0.138345 3.24643 0.259556 3.09705 0.415892 2.99226C0.573009 2.88649 0.757885 2.82954 0.947281 2.82855C1.13668 2.82756 1.32214 2.88258 1.48035 2.9867L5.05428 5.34561L9.26821 0.338893C9.44988 0.124446 9.71711 0 9.99989 0ZM2.22202 17.963C2.22202 17.4519 2.65758 17.0374 3.19426 17.0374H16.8055C17.1527 17.0374 17.4739 17.2135 17.6478 17.5002C17.733 17.6396 17.7781 17.7998 17.7781 17.9633C17.7781 18.1267 17.733 18.2869 17.6478 18.4263C17.4739 18.7124 17.1533 18.8891 16.8055 18.8891H3.19426C2.65758 18.8891 2.22202 18.4746 2.22202 17.963ZM8.54154 11.4818C8.54154 11.9929 8.9771 12.4074 9.51377 12.4074H10.486C11.0227 12.4074 11.4582 11.9929 11.4582 11.4818C11.4582 10.9707 11.0227 10.5557 10.486 10.5557H9.51377C8.9771 10.5557 8.54154 10.9701 8.54154 11.4818Z" fill="url(#paint0_linear_460_14619)"/>
+<defs>
+<linearGradient id="paint0_linear_460_14619" x1="7.5" y1="1.5" x2="18.5" y2="19" gradientUnits="userSpaceOnUse">
+<stop stop-color="#CCD0D5"/>
+<stop offset="0.745494" stop-color="#A5A6A8"/>
+</linearGradient>
+</defs>
+</svg>

+ 9 - 0
packages/app/src/assets/svgs/member-icon-v3.svg

@@ -0,0 +1,9 @@
+<svg width="20" height="19" viewBox="0 0 20 19" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M9.99989 0C10.2827 0 10.5505 0.124446 10.7316 0.338893L14.9455 5.34561L18.5194 2.9867C18.6776 2.88258 18.8631 2.82756 19.0525 2.82855C19.2419 2.82954 19.4268 2.88649 19.5839 2.99226C19.9044 3.20837 20.0606 3.5956 19.9783 3.97116L17.5972 14.8129C17.55 15.0243 17.432 15.2131 17.2627 15.3482C17.0935 15.4833 16.8832 15.5565 16.6666 15.5557H3.33315C3.11661 15.5565 2.9063 15.4833 2.73706 15.3482C2.56782 15.2131 2.44981 15.0243 2.40258 14.8129L0.0214436 3.97116C-0.0185619 3.78725 -0.00233997 3.59556 0.0680023 3.42099C0.138345 3.24643 0.259556 3.09705 0.415892 2.99226C0.573009 2.88649 0.757885 2.82954 0.947281 2.82855C1.13668 2.82756 1.32214 2.88258 1.48035 2.9867L5.05428 5.34561L9.26821 0.338893C9.44988 0.124446 9.71711 0 9.99989 0ZM2.22202 17.963C2.22202 17.4519 2.65758 17.0374 3.19426 17.0374H16.8055C17.1527 17.0374 17.4739 17.2135 17.6478 17.5002C17.733 17.6396 17.7781 17.7998 17.7781 17.9633C17.7781 18.1267 17.733 18.2869 17.6478 18.4263C17.4739 18.7124 17.1533 18.8891 16.8055 18.8891H3.19426C2.65758 18.8891 2.22202 18.4746 2.22202 17.963ZM8.54154 11.4818C8.54154 11.9929 8.9771 12.4074 9.51377 12.4074H10.486C11.0227 12.4074 11.4582 11.9929 11.4582 11.4818C11.4582 10.9707 11.0227 10.5557 10.486 10.5557H9.51377C8.9771 10.5557 8.54154 10.9701 8.54154 11.4818Z" fill="url(#paint0_linear_460_14943)"/>
+<defs>
+<linearGradient id="paint0_linear_460_14943" x1="7.5" y1="1.5" x2="18.5" y2="19" gradientUnits="userSpaceOnUse">
+<stop stop-color="#C18E52"/>
+<stop offset="0.745494" stop-color="#896232"/>
+</linearGradient>
+</defs>
+</svg>

+ 9 - 0
packages/app/src/assets/svgs/member-icon-v4.svg

@@ -0,0 +1,9 @@
+<svg width="20" height="19" viewBox="0 0 20 19" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M9.99989 0C10.2827 0 10.5505 0.124446 10.7316 0.338893L14.9455 5.34561L18.5194 2.9867C18.6776 2.88258 18.8631 2.82756 19.0525 2.82855C19.2419 2.82954 19.4268 2.88649 19.5839 2.99226C19.9044 3.20837 20.0606 3.5956 19.9783 3.97116L17.5972 14.8129C17.55 15.0243 17.432 15.2131 17.2627 15.3482C17.0935 15.4833 16.8832 15.5565 16.6666 15.5557H3.33315C3.11661 15.5565 2.9063 15.4833 2.73706 15.3482C2.56782 15.2131 2.44981 15.0243 2.40258 14.8129L0.0214436 3.97116C-0.0185619 3.78725 -0.00233997 3.59556 0.0680023 3.42099C0.138345 3.24643 0.259556 3.09705 0.415892 2.99226C0.573009 2.88649 0.757885 2.82954 0.947281 2.82855C1.13668 2.82756 1.32214 2.88258 1.48035 2.9867L5.05428 5.34561L9.26821 0.338893C9.44988 0.124446 9.71711 0 9.99989 0ZM2.22202 17.963C2.22202 17.4519 2.65758 17.0374 3.19426 17.0374H16.8055C17.1527 17.0374 17.4739 17.2135 17.6478 17.5002C17.733 17.6396 17.7781 17.7998 17.7781 17.9633C17.7781 18.1267 17.733 18.2869 17.6478 18.4263C17.4739 18.7124 17.1533 18.8891 16.8055 18.8891H3.19426C2.65758 18.8891 2.22202 18.4746 2.22202 17.963ZM8.54154 11.4818C8.54154 11.9929 8.9771 12.4074 9.51377 12.4074H10.486C11.0227 12.4074 11.4582 11.9929 11.4582 11.4818C11.4582 10.9707 11.0227 10.5557 10.486 10.5557H9.51377C8.9771 10.5557 8.54154 10.9701 8.54154 11.4818Z" fill="url(#paint0_linear_460_15169)"/>
+<defs>
+<linearGradient id="paint0_linear_460_15169" x1="7.5" y1="1.5" x2="18.5" y2="19" gradientUnits="userSpaceOnUse">
+<stop stop-color="#AF542F"/>
+<stop offset="0.745494" stop-color="#592E1A"/>
+</linearGradient>
+</defs>
+</svg>

+ 26 - 23
packages/app/src/components/card-menu.vue

@@ -18,6 +18,7 @@ defineProps({
         rowStart?: number
         rowEnd?: number
         iconSize?: number
+        gridItemClass?: string
       }[]
     >,
     default: () => [],
@@ -27,30 +28,32 @@ defineProps({
 <template>
   <view class="my-6 grid grid-gap-2.5" :class="customClass">
     <template v-for="it of items" :key="it.title">
-      <card
-        :custom-class="
-          [
-            it.class,
-            'flex flex-col justify-between items-center',
-            it.colStart ? `col-start-${it.colStart}` : '',
-            it.colEnd ? `col-end-${it.colEnd}` : '',
-            it.rowStart ? `row-start-${it.rowStart}` : '',
-            it.rowEnd ? `row-end-${it.rowEnd}` : '',
-          ].join(' ')
-        "
-      >
-        <div class="my-3.5 flex flex-col justify-start h-full">
-          <div class="text-black/80 text-base font-normal font-['PingFang SC'] leading-[10.18px]">
-            {{ it.title }}
+      <div :class="it.gridItemClass">
+        <card
+          :custom-class="
+            [
+              it.class,
+              'flex flex-col justify-between items-center',
+              it.colStart ? `col-start-${it.colStart}` : '',
+              it.colEnd ? `col-end-${it.colEnd}` : '',
+              it.rowStart ? `row-start-${it.rowStart}` : '',
+              it.rowEnd ? `row-end-${it.rowEnd}` : '',
+            ].join(' ')
+          "
+        >
+          <div class="my-3.5 flex flex-col justify-start h-full">
+            <div class="text-black/80 text-base font-normal font-['PingFang SC'] leading-[10.18px]">
+              {{ it.title }}
+            </div>
+            <div class="mt-1 text-black/40 text-xs font-normal font-['PingFang SC'] leading-normal">
+              {{ it.desc }}
+            </div>
           </div>
-          <div class="mt-1 text-black/40 text-xs font-normal font-['PingFang SC'] leading-normal">
-            {{ it.desc }}
-          </div>
-        </div>
-        <view class="flex-1 w-full flex items-end justify-end">
-          <wd-img :src="it.icon" :width="it.iconSize ?? 24" :height="it.iconSize ?? 24"></wd-img>
-        </view>
-      </card>
+          <view class="flex-1 w-full flex items-end justify-end">
+            <wd-img :src="it.icon" :width="it.iconSize ?? 24" :height="it.iconSize ?? 24"></wd-img>
+          </view>
+        </card>
+      </div>
     </template>
   </view>
 </template>

+ 2 - 0
packages/app/src/core/libs/pngs.ts

@@ -12,6 +12,7 @@ import abc from '@/assets/pngs/abc.png'
 import calculator from '@/assets/pngs/calculator.png'
 import calculatorBg from '@/assets/pngs/calculator-bg.png'
 import linkBuckle from '@/assets/pngs/link-buckle.png'
+import memberTextV1 from '@/assets/pngs/member-text-v1.png'
 
 export {
   scheduleCardBg,
@@ -28,4 +29,5 @@ export {
   calculator,
   calculatorBg,
   linkBuckle,
+  memberTextV1,
 }

+ 8 - 0
packages/app/src/core/libs/svgs.ts

@@ -27,6 +27,10 @@ import publish from '@/assets/svgs/publish.svg'
 import order from '@/assets/svgs/order.svg'
 import close from '@/assets/svgs/close.svg'
 import materialDealers from '@/assets/svgs/material-dealers.svg'
+import memberIconV1 from '@/assets/svgs/member-icon-v1.svg'
+import memberIconV2 from '@/assets/svgs/member-icon-v2.svg'
+import memberIconV3 from '@/assets/svgs/member-icon-v3.svg'
+import memberIconV4 from '@/assets/svgs/member-icon-v4.svg'
 import phone from '@/assets/svgs/phone.svg'
 import route from '@/assets/svgs/route.svg'
 import system from '@/assets/svgs/system.svg'
@@ -52,6 +56,10 @@ export {
   logo,
   vip,
   materialActive,
+  memberIconV1,
+  memberIconV2,
+  memberIconV3,
+  memberIconV4,
   material,
   homeActive,
   home,

+ 52 - 8
packages/app/src/pages/mine/index.vue

@@ -4,17 +4,25 @@
 
 <script setup lang="ts">
 import { onMounted, ref } from 'vue'
-
 import CardMenu from '@/components/card-menu.vue'
 import SectionHeading from '@/components/section-heading.vue'
-import StartMenuButton from '@/components/start-menu-button.vue'
-import { designer, settled, treaty, vipBg } from '../../core/libs/pngs'
-import { integral, coupon, order, agent, setting, vip, scan } from '../../core/libs/svgs'
+import { designer, settled, treaty, vipBg, memberTextV1 } from '../../core/libs/pngs'
+import {
+  integral,
+  coupon,
+  order,
+  agent,
+  setting,
+  vip,
+  scan,
+  memberIconV1,
+} from '../../core/libs/svgs'
 import { getMemberUserInfo, getTasks } from '../../core/libs/requests'
 import { useUserStore } from '../../store'
 import { storeToRefs } from 'pinia'
 import { isEmpty } from 'radash'
 import TasksCard from './components/tasks-card.vue'
+import Card from '@/components/card.vue'
 
 const userStore = useUserStore()
 const { isLogined, userInfo } = storeToRefs(userStore)
@@ -35,15 +43,17 @@ const pieces = ref([
     title: '设计师成长计划',
     desc: '赋能设计共同成长',
     icon: designer,
-    class: 'items-start! pb-0 pr-0 col-start-1 row-start-1 row-end-3',
+    class: 'items-start! pb-0 pr-0',
     iconSize: 102,
+    gridItemClass: 'col-start-1 row-start-1 row-end-3',
   },
   {
     title: '材料商入驻',
     desc: '提供优质材料商',
     icon: settled,
-    class: 'flex-row! pb-0 pr-0 col-start-2 row-start-1',
+    class: 'flex-row! pb-0 pr-0',
     iconSize: 68,
+    gridItemClass: 'col-start-2 row-start-1',
   },
   {
     title: '筑巢荟公约',
@@ -51,6 +61,7 @@ const pieces = ref([
     icon: treaty,
     class: 'col-start-2 row-start-2 flex-row! pb-0',
     iconSize: 44,
+    gridItemClass: 'col-start-2 row-start-2',
   },
 ])
 const avatar = computed(() =>
@@ -111,7 +122,8 @@ onPageScroll(({ scrollTop }: { scrollTop: number }) => {
       </div>
     </StartMenuButton> -->
     <div
-      class="bg-black/30 backdrop-blur-[60px] aspect-[1.15/1] flex flex-col justify-end pb-20 box-border"
+      class="bg-black/30 backdrop-blur-[60px] flex flex-col justify-end box-border"
+      :class="[userInfo.userStatusEnabled ? 'aspect-[0.94/1] pb-44' : 'aspect-[1.15/1] pb-20']"
     >
       <div class="my-6.5 px-3.5 flex">
         <img class="w-[72px] h-[72px] rounded-full border border-white" :src="avatar" />
@@ -185,7 +197,7 @@ onPageScroll(({ scrollTop }: { scrollTop: number }) => {
         </div>
       </div>
     </div>
-    <div class="relative top--18">
+    <div class="relative top--18" v-if="!userInfo.userStatusEnabled">
       <div class="mx-3.5 box-border absolute left-0 right-0 top-0">
         <wd-img :src="vipBg" width="100%" mode="widthFix"></wd-img>
       </div>
@@ -211,6 +223,38 @@ onPageScroll(({ scrollTop }: { scrollTop: number }) => {
         </div>
       </div>
     </div>
+    <template v-else>
+      <div class="relative top--36">
+        <div
+          class="mx-3.5 absolute left-0 right-0 top--4 w-[347px] h-[180px] bg-gradient-to-r from-[#141414] to-[#4b4b49] rounded-tl-[10px] rounded-tr-[10px] p-3.5 box-border"
+          :class="['text-[#8FB8DB]']"
+        >
+          <div class="flex items-center">
+            <wd-img class="" width="20" height="20" :src="memberIconV1"></wd-img>
+            <wd-img class="" width="108" height="27" :src="memberTextV1"></wd-img>
+            <div class="flex-1"></div>
+            <div
+              class="h-[22px] bg-gradient-to-r from-[#333333] to-[#20201e] rounded-tl-[20px] rounded-bl-[20px] mr--3.5 px-2"
+            >
+              <div class="text-xs font-normal font-['PingFang SC'] leading-relaxed">
+                更多等级权益
+              </div>
+            </div>
+          </div>
+          <div class="flex items-end mt-10">
+            <div>
+              <span class="text-4xl font-normal font-['D-DIN Exp']">{{ userInfo.point }}</span>
+              <span class="text-center text-xs font-normal font-['PingFang SC']">积分</span>
+            </div>
+            <div class="flex-1"></div>
+            <div class="text-sm font-normal font-['PingFang SC']">
+              会员号:{{ userInfo.userId }}
+            </div>
+          </div>
+        </div>
+      </div>
+      <!-- <div class="relative h-4 box-border bg-transparent rounded-b-[50%] z-1"></div> -->
+    </template>
     <view class="bg-neutral-100 relative bottom-4 rounded-t-2xl py-1 px-3.5">
       <div class="flex justify-around my-6">
         <template v-for="({ title, icon }, i) in menus" :key="i">

+ 1 - 0
packages/app/src/typings.ts

@@ -28,6 +28,7 @@ type IUserInfo = {
   refreshToken?: string
   expiresTime?: any
   userStatusEnabled?: boolean
+  point?: number
 }
 
 enum TestEnum {