Bladeren bron

feat(mine): 优化会员等级相关功能

- 新增会员等级规则页面,介绍等级划分和升降级规则
- 优化会员等级页面布局和交互
- 修复设计师档案页面的婚姻状态显示问题
- 优化消息卡片的优惠券显示逻辑
- 调整首页轮播图和活动列表的样式
EvilDragon 1 maand geleden
bovenliggende
commit
0fd965d442

+ 8 - 0
packages/app/src/pages.json

@@ -530,6 +530,14 @@
       }
     },
     {
+      "path": "pages/mine/levels/rules/index",
+      "type": "page",
+      "style": {
+        "navigationBarTitleText": "等级规则",
+        "navigationBarBackgroundColor": "#fff"
+      }
+    },
+    {
       "path": "pages/mine/orders/code/index",
       "type": "page",
       "style": {

+ 5 - 1
packages/app/src/pages/common/components/coupons-selector.vue

@@ -51,7 +51,11 @@ const handleSelect = (coupon: Coupon) => {
   // } else {
   //   modelValue.value = [...modelValue.value, coupon]
   // }
-  modelValue.value = [coupon]
+  if (modelValue.value.length) {
+    modelValue.value.splice(0, 1, coupon)
+  } else {
+    modelValue.value.push(coupon)
+  }
   emits('close')
 }
 const handleTabsChange = async ({ index, name }) => {

+ 4 - 1
packages/app/src/pages/home/activity/detail/index.vue

@@ -234,7 +234,10 @@ onShareTimeline(() => ({ title: data.value.name, imageUrl: data.value.thumbnailU
         id="firstCanvas"
       ></canvas>
       <!--      <ImageEvo :src="data?.bannerUrl" mode="aspectFill"></ImageEvo>-->
-      <div class="w-full h-full bg-[length:100%_auto]" :style="{ backgroundImage: `url(${data?.bannerUrl})` }"></div>
+      <div
+        class="w-full h-full bg-[length:100%_auto]"
+        :style="{ backgroundImage: `url(${data?.bannerUrl})` }"
+      ></div>
       <!-- <wd-img width="100%" height="100%" :src="data?.backgroundUrl"></wd-img> -->
       <div class="absolute left-3.5 bottom-3" @click="isActivity && (listShow = true)">
         <!--        <div-->

+ 3 - 1
packages/app/src/pages/home/moment/index.vue

@@ -242,7 +242,9 @@ onShareAppMessage(shareAppMessage)
     </template>
     <template v-if="data.circleType === '2'">
       <div>
-        <wd-img width="100%" mode="widthFix" :src="data.bannerUrls[0]"></wd-img>
+        <div class="aspect-[1.02/1]">
+          <wd-img width="100%" height="100%" mode="aspectFill" :src="data.bannerUrls[0]"></wd-img>
+        </div>
         <div class="relative">
           <div
             class="absolute top-0 left-3.5 right-3.5 box-border h-full flex items-center justify-center"

+ 1 - 3
packages/app/src/pages/home/offline-activity/index.vue

@@ -90,9 +90,7 @@ onMounted(async () => {
       <div
         class="text-justify text-black/40 text-base font-normal font-['PingFang_SC'] leading-relaxed"
       >
-        我们为您精心打造了一个独特且极具价值的活动营。这个项目的核心旨在全方位提升您作为设计师的能力。
-        在这里,您将拥有无比优质的游学资源。我们与全球知名的设计学府、顶尖设计工作室以及具有代表性的经典建筑和室内空间建立了紧密合作。您将有机会深入这些卓越的场所,亲身体验最前沿的设计理念和实践。
-        参与专业的研讨会和工作坊,与同行们分享见解、碰撞思维火花,进一步深化对设计的理解。
+        以师为核心策划线下活动体系,通过深入的交流、创新的体验、贴心的关爱,打造丰富多彩的活动。这一体系旨在创建一个充满互动的平台,促进设计师之间的思想碰撞与灵感交流,同时会为设计师打造专业的线下课程,通过专业的培训和讲座不断成长,提升自身技能和职业素养。
       </div>
     </card>
     <wd-tabs

+ 7 - 5
packages/app/src/pages/messages/components/message-card.vue

@@ -32,12 +32,14 @@ const { data: coupons, run: setCoupons } = useRequest(
   { initialData: [] },
 )
 const couponSelectText = computed(() => {
-  // `${coupons.value.length > 0 ? `${coupons.value.length}张可用` : '无可用'}`
-  if (props.options.selectedCoupons?.length) {
-    return `${props.options.selectedCoupons.at(0)?.brandPoints ?? 0}积分`
+  const selectedCoupons = props.options.selectedCoupons || []
+  const availableCoupons = coupons.value || []
+
+  if (selectedCoupons.length > 0) {
+    return `${selectedCoupons[0].brandPoints ?? 0}积分`
   }
-  if (coupons.value.length) {
-    return `${coupons.value.length}张可用`
+  if (availableCoupons.length > 0) {
+    return `${availableCoupons.length}张可用`
   }
   return '无可用'
 })

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

@@ -29,7 +29,7 @@ import { requestToast } from '../../../core/utils/common'
 import { ComponentExposed } from 'vue-component-type-helpers'
 import dayjs from 'dayjs'
 import wechatChannels from '@designer-hub/assets/src/libs/assets/wechatChannels'
-import { handleUpvoteClick, handleShareClick } from '../../../core/libs/actions'
+import { handleUpvoteClick } from '../../../core/libs/actions'
 import { usePermissions } from '../../../composables/permissions'
 import ImageEvo from '@/components/image-evo.vue'
 import more from '@designer-hub/assets/src/libs/assets/more'
@@ -101,7 +101,7 @@ const handleLike = async (options) => {
     userId: userInfo.value.userId,
     userName: userInfo.value.nickname,
   })
-  pageHelperRef.value?.refresh()
+  await pageHelperRef.value?.refresh()
 }
 const handle2Video = () => {
   try {
@@ -188,7 +188,7 @@ defineExpose({
                 :src="memberInfo?.avatar || NetImages.DefaultAvatar"
               ></wd-img>
             </div>
-            <div class="pb-8 flex-1">
+            <div class="pb-8 flex-1 overflow-hidden">
               <div class="flex items-center justify-between">
                 <div class="text-white text-2xl font-normal font-['PingFang_SC'] leading-normal">
                   {{ designerInfo.homePageName || memberInfo.nickname }}
@@ -203,10 +203,13 @@ defineExpose({
                 </div>
               </div>
 
-              <div class="flex flex-wrap gap-4" v-if="designerInfo?.personalIdentity != ''">
+              <div
+                class="mt-2.5 flex gap-4 overflow-x-auto whitespace-nowrap"
+                v-if="designerInfo?.personalIdentity != ''"
+              >
                 <template v-for="(it, i) in designerInfo?.personalIdentity?.split('、')" :key="i">
                   <div
-                    class="h-6 px-2 bg-black/10 rounded-[30px] border border-solid border-white/60 justify-center items-center box-border inline-flex"
+                    class="inline-block h-6 px-2 bg-black/10 rounded-[30px] border border-solid border-white/60 justify-center items-center box-border inline-flex"
                   >
                     <div
                       class="text-center text-white text-[10px] font-normal font-['PingFang_SC']"

+ 4 - 1
packages/app/src/pages/mine/levels/index.vue

@@ -35,7 +35,10 @@ onMounted(async () => {
     <NavbarEvo transparent title="会员等级" dark placeholder></NavbarEvo>
     <div class="flex gap-2 bg-gradient-to-r from-[#292331] to-[#35303b] rounded-md px-5 py-1">
       <wd-img width="22" height="22" :src="notify"></wd-img>
-      <div class="text-[#f1d2c5] text-sm font-normal font-['PingFang_SC'] leading-normal">
+      <div
+        @click="router.push('/pages/mine/levels/rules/index')"
+        class="text-[#f1d2c5] text-sm font-normal font-['PingFang_SC'] leading-normal"
+      >
         会员成长等级保级规则通知
       </div>
     </div>

+ 134 - 0
packages/app/src/pages/mine/levels/rules/index.vue

@@ -0,0 +1,134 @@
+<route lang="json">
+{
+  "style": {
+    "navigationBarTitleText": "等级规则",
+    "navigationBarBackgroundColor": "#fff"
+  }
+}
+</route>
+<script lang="ts" setup>
+import { useMemberLevelsStore, useUserStore } from '@/store'
+import { storeToRefs } from 'pinia'
+import star from '@designer-hub/assets/src/libs/assets/star'
+import Card from '@/components/card.vue'
+import up from '@designer-hub/assets/src/libs/assets/up'
+import down from '@designer-hub/assets/src/libs/assets/down'
+
+const userStore = useUserStore()
+const { userInfo } = storeToRefs(userStore)
+const memberLevelsStore = useMemberLevelsStore()
+const { memberLevels } = storeToRefs(memberLevelsStore)
+const tab = ref(0)
+</script>
+<template>
+  <div class="flex-grow flex flex-col">
+    <!-- Header -->
+
+    <!-- Tabs -->
+    <wd-tabs v-model="tab">
+      <template v-for="item in ['等级介绍', '等级变更规则']" :key="item">
+        <wd-tab :title="item"></wd-tab>
+      </template>
+    </wd-tabs>
+    <template v-if="tab === 0">
+      <div class="flex-grow bg-white px-4">
+        <div class="mt-10 text-black/60 text-sm font-normal font-['PingFang SC'] leading-normal">
+          筑巢荟会员等级由用户当前积分数量决定,共分为以下4个等级
+        </div>
+        <!--    {{ memberLevels }}-->
+        <!--    {{ userInfo }}-->
+        <div class="mt-5 rounded-[10px] border border-solid border-[#b18957] overflow-hidden">
+          <div class="grid grid-cols-2 auto-rows-10 center">
+            <div
+              class="text-center text-[#bc8547] text-sm font-normal font-['PingFang SC'] leading-normal"
+            >
+              会员等级
+            </div>
+            <div
+              class="text-center text-[#bc8547] text-sm font-normal font-['PingFang SC'] leading-normal"
+            >
+              积分值区间
+            </div>
+
+            <template v-for="(it, i) in memberLevels" :key="i">
+              <div
+                class="h-full flex center relative"
+                :class="['bg-[#fffcf6]', 'bg-[#fff8eb]', 'bg-[#fff6e3]', 'bg-[#fff3d9]'][i]"
+              >
+                <wd-img
+                  v-if="it.id === userInfo.level.level"
+                  custom-class="absolute! left-10vw "
+                  width="14"
+                  height="14"
+                  :src="star"
+                ></wd-img>
+                <div
+                  class="text-center text-[#bc8547] text-sm font-normal font-['PingFang SC'] leading-normal"
+                >
+                  {{ it.memberLevelName }}
+                </div>
+              </div>
+              <div
+                class="h-full flex center"
+                :class="['bg-[#fffcf6]', 'bg-[#fff8eb]', 'bg-[#fff6e3]', 'bg-[#fff3d9]'][i]"
+              >
+                <div
+                  class="text-center text-[#bc8547] text-sm font-normal font-['PingFang SC'] leading-normal"
+                >
+                  {{
+                    memberLevels[i + 1]?.points
+                      ? `${it.points}(含)-${memberLevels[i + 1]?.points}`
+                      : `${it.points}及以上`
+                  }}
+                </div>
+              </div>
+            </template>
+          </div>
+        </div>
+        <div
+          class="flex items-center mt-4 text-black/40 text-sm font-normal font-['PingFang SC'] leading-normal"
+        >
+          注:
+          <wd-img width="14" height="14" :src="star"></wd-img>
+          表示您当前所在等级
+        </div>
+      </div>
+    </template>
+    <template v-if="tab === 1">
+      <div class="p-3.5 flex flex-col gap-6">
+        <Card>
+          <div class="flex items-center gap-1">
+            <wd-img width="14" height="15" :src="up"></wd-img>
+            <div
+              class="text-center text-black/40 text-base font-normal font-['PingFang SC'] leading-normal"
+            >
+              升级
+            </div>
+          </div>
+          <div class="my-4 h-.25 bg-[#f1f1f1]"></div>
+          <div
+            class="w-[309px] h-[47px] text-black/40 text-sm font-normal font-['PingFang SC'] leading-normal"
+          >
+            更新积分值后,如最新积分值达到更高等级门槛将立即提升至相应会员等级。
+          </div>
+        </Card>
+        <Card>
+          <div class="flex items-center gap-1">
+            <wd-img width="14" height="15" :src="down"></wd-img>
+            <div
+              class="text-center text-black/40 text-base font-normal font-['PingFang SC'] leading-normal"
+            >
+              降级
+            </div>
+          </div>
+          <div class="my-4 h-.25 bg-[#f1f1f1]"></div>
+          <div
+            class="w-[309px] h-[47px] text-black/40 text-sm font-normal font-['PingFang SC'] leading-normal"
+          >
+            当前积分不满足当前会员等级,您将面临降级。
+          </div>
+        </Card>
+      </div>
+    </template>
+  </div>
+</template>

+ 1 - 1
packages/app/src/store/member-levles.ts

@@ -10,7 +10,7 @@ export const useMemberLevelsStore = defineStore('', () => {
   )
   const memberLevelsById = (id: number) => memberLevels.value.find((item) => item.id === id)
   const getMemberLevelLogo = (id: number) => memberLevelsById(id)?.logo
-  fetchMemberLevels()
+  fetchMemberLevels().then()
   return {
     memberLevels,
     fetchMemberLevels,

+ 1 - 0
packages/app/src/types/uni-pages.d.ts

@@ -60,6 +60,7 @@ interface NavigateToOptions {
        "/pages/mine/homepage/qr-code/index" |
        "/pages/mine/homepage/statistics/index" |
        "/pages/mine/honors/detail/index" |
+       "/pages/mine/levels/rules/index" |
        "/pages/mine/orders/code/index" |
        "/pages/mine/orders/detail/index" |
        "/pages/mine/scan/result/index" |

+ 5 - 0
packages/assets/src/assets/down.svg

@@ -0,0 +1,5 @@
+<svg width="14" height="15" viewBox="0 0 14 15" fill="none" xmlns="http://www.w3.org/2000/svg">
+    <path d="M0.637534 8.82215L5.92712 14.6797C6.11277 14.8859 6.36257 15 6.63012 15H6.63149C6.89631 14.9985 7.15294 14.8815 7.33586 14.6768L12.5708 8.81923C12.7647 8.60423 12.8193 8.28832 12.7101 8.01482C12.6022 7.73986 12.3511 7.56289 12.0726 7.56289H10.2339V2.95144C10.2339 2.37081 9.79296 1.89548 9.25103 1.89255L4.04062 1.875C3.49869 1.875 3.05505 2.34741 3.05232 2.93097L3.03594 7.56435H1.13578C0.857308 7.56435 0.607503 7.74132 0.498299 8.01628C0.389094 8.29124 0.443697 8.60716 0.637534 8.82215ZM3.90684 8.49893L3.92595 2.93243C3.92595 2.86661 3.97782 2.81104 4.04062 2.81104L9.2483 2.82859C9.30973 2.82859 9.36023 2.88416 9.36023 2.95144V8.49893H11.6481L6.70384 14.0303C6.67927 14.0581 6.6506 14.064 6.63012 14.064C6.61101 14.064 6.58235 14.0581 6.55641 14.0289L1.56168 8.49893H3.90684ZM2.24011 0.936037H10.9683C11.2099 0.936037 11.4051 0.726892 11.4051 0.468019C11.4051 0.209146 11.2099 0 10.9683 0H2.24011C1.99849 0 1.80329 0.209146 1.80329 0.468019C1.80329 0.726892 1.99849 0.936037 2.24011 0.936037Z" fill="black" fill-opacity="0.85"/>
+    <path d="M0.637534 8.82215L5.92712 14.6797C6.11277 14.8859 6.36257 15 6.63012 15H6.63149C6.89631 14.9985 7.15294 14.8815 7.33586 14.6768L12.5708 8.81923C12.7647 8.60423 12.8193 8.28832 12.7101 8.01482C12.6022 7.73986 12.3511 7.56289 12.0726 7.56289H10.2339V2.95144C10.2339 2.37081 9.79296 1.89548 9.25103 1.89255L4.04062 1.875C3.49869 1.875 3.05505 2.34741 3.05232 2.93097L3.03594 7.56435H1.13578C0.857308 7.56435 0.607503 7.74132 0.498299 8.01628C0.389094 8.29124 0.443697 8.60716 0.637534 8.82215ZM3.90684 8.49893L3.92595 2.93243C3.92595 2.86661 3.97782 2.81104 4.04062 2.81104L9.2483 2.82859C9.30973 2.82859 9.36023 2.88416 9.36023 2.95144V8.49893H11.6481L6.70384 14.0303C6.67927 14.0581 6.6506 14.064 6.63012 14.064C6.61101 14.064 6.58235 14.0581 6.55641 14.0289L1.56168 8.49893H3.90684ZM2.24011 0.936037H10.9683C11.2099 0.936037 11.4051 0.726892 11.4051 0.468019C11.4051 0.209146 11.2099 0 10.9683 0H2.24011C1.99849 0 1.80329 0.209146 1.80329 0.468019C1.80329 0.726892 1.99849 0.936037 2.24011 0.936037Z" fill="black" fill-opacity="0.65"/>
+    <path d="M0.637534 8.82215L5.92712 14.6797C6.11277 14.8859 6.36257 15 6.63012 15H6.63149C6.89631 14.9985 7.15294 14.8815 7.33586 14.6768L12.5708 8.81923C12.7647 8.60423 12.8193 8.28832 12.7101 8.01482C12.6022 7.73986 12.3511 7.56289 12.0726 7.56289H10.2339V2.95144C10.2339 2.37081 9.79296 1.89548 9.25103 1.89255L4.04062 1.875C3.49869 1.875 3.05505 2.34741 3.05232 2.93097L3.03594 7.56435H1.13578C0.857308 7.56435 0.607503 7.74132 0.498299 8.01628C0.389094 8.29124 0.443697 8.60716 0.637534 8.82215ZM3.90684 8.49893L3.92595 2.93243C3.92595 2.86661 3.97782 2.81104 4.04062 2.81104L9.2483 2.82859C9.30973 2.82859 9.36023 2.88416 9.36023 2.95144V8.49893H11.6481L6.70384 14.0303C6.67927 14.0581 6.6506 14.064 6.63012 14.064C6.61101 14.064 6.58235 14.0581 6.55641 14.0289L1.56168 8.49893H3.90684ZM2.24011 0.936037H10.9683C11.2099 0.936037 11.4051 0.726892 11.4051 0.468019C11.4051 0.209146 11.2099 0 10.9683 0H2.24011C1.99849 0 1.80329 0.209146 1.80329 0.468019C1.80329 0.726892 1.99849 0.936037 2.24011 0.936037Z" fill="black" fill-opacity="0.45"/>
+</svg>

+ 3 - 0
packages/assets/src/assets/star.svg

@@ -0,0 +1,3 @@
+<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
+    <path d="M10.1183 12C9.9744 12 9.83047 11.9656 9.67455 11.8853L7.25172 10.6695C7.19175 10.635 7.1078 10.6121 7.01185 10.6121C6.9279 10.6121 6.83194 10.635 6.77197 10.658L4.36115 11.8853C4.21722 11.9656 4.07329 12 3.90538 12C3.61752 12 3.34165 11.8738 3.14973 11.6674C2.95783 11.4609 2.88588 11.1856 2.93384 10.9103L3.40162 8.341C3.42561 8.18041 3.36564 8.01983 3.24569 7.90513L1.30265 6.10428C1.02679 5.85195 0.930834 5.48489 1.05077 5.14078C1.1707 4.79666 1.47057 4.55578 1.84239 4.49843L4.52907 4.11991C4.69699 4.09697 4.8529 3.99374 4.92487 3.8561L6.12428 1.51616C6.29219 1.19499 6.62803 1 6.99985 1C7.37167 1 7.7075 1.19499 7.87542 1.51616L9.07483 3.8561C9.15879 4.00522 9.30272 4.09697 9.47064 4.11991L12.1573 4.49844C12.5292 4.55579 12.829 4.79667 12.9489 5.12931C13.0689 5.47342 12.9729 5.84047 12.7091 6.09282L10.778 7.90511C10.6461 8.01982 10.5981 8.1804 10.6221 8.34098L11.0779 10.8989C11.1258 11.1741 11.0539 11.4494 10.862 11.6559C10.6821 11.8738 10.4062 12 10.1183 12Z" fill="#BC8647"/>
+</svg>

+ 5 - 0
packages/assets/src/assets/up.svg

@@ -0,0 +1,5 @@
+<svg width="14" height="15" viewBox="0 0 14 15" fill="none" xmlns="http://www.w3.org/2000/svg">
+    <path d="M0.637534 6.17785L5.92712 0.3203C6.11277 0.11408 6.36257 0 6.63012 0H6.63149C6.89631 0.00146256 7.15294 0.118467 7.33586 0.323225L12.5708 6.18077C12.7647 6.39577 12.8193 6.71168 12.7101 6.98518C12.6022 7.26014 12.3511 7.43711 12.0726 7.43711H10.2339V12.0486C10.2339 12.6292 9.79296 13.1045 9.25103 13.1074L4.04062 13.125C3.49869 13.125 3.05505 12.6526 3.05232 12.069L3.03594 7.43565H1.13578C0.857308 7.43565 0.607503 7.25868 0.498299 6.98372C0.389094 6.70876 0.443697 6.39284 0.637534 6.17785ZM3.90684 6.50107L3.92595 12.0676C3.92595 12.1334 3.97782 12.189 4.04062 12.189L9.2483 12.1714C9.30973 12.1714 9.36023 12.1158 9.36023 12.0486V6.50107H11.6481L6.70384 0.969676C6.67927 0.941888 6.6506 0.936037 6.63012 0.936037C6.61101 0.936037 6.58235 0.941888 6.55641 0.971139L1.56168 6.50107H3.90684ZM2.24011 14.064H10.9683C11.2099 14.064 11.4051 14.2731 11.4051 14.532C11.4051 14.7909 11.2099 15 10.9683 15H2.24011C1.99849 15 1.80329 14.7909 1.80329 14.532C1.80329 14.2731 1.99849 14.064 2.24011 14.064Z" fill="black" fill-opacity="0.85"/>
+    <path d="M0.637534 6.17785L5.92712 0.3203C6.11277 0.11408 6.36257 0 6.63012 0H6.63149C6.89631 0.00146256 7.15294 0.118467 7.33586 0.323225L12.5708 6.18077C12.7647 6.39577 12.8193 6.71168 12.7101 6.98518C12.6022 7.26014 12.3511 7.43711 12.0726 7.43711H10.2339V12.0486C10.2339 12.6292 9.79296 13.1045 9.25103 13.1074L4.04062 13.125C3.49869 13.125 3.05505 12.6526 3.05232 12.069L3.03594 7.43565H1.13578C0.857308 7.43565 0.607503 7.25868 0.498299 6.98372C0.389094 6.70876 0.443697 6.39284 0.637534 6.17785ZM3.90684 6.50107L3.92595 12.0676C3.92595 12.1334 3.97782 12.189 4.04062 12.189L9.2483 12.1714C9.30973 12.1714 9.36023 12.1158 9.36023 12.0486V6.50107H11.6481L6.70384 0.969676C6.67927 0.941888 6.6506 0.936037 6.63012 0.936037C6.61101 0.936037 6.58235 0.941888 6.55641 0.971139L1.56168 6.50107H3.90684ZM2.24011 14.064H10.9683C11.2099 14.064 11.4051 14.2731 11.4051 14.532C11.4051 14.7909 11.2099 15 10.9683 15H2.24011C1.99849 15 1.80329 14.7909 1.80329 14.532C1.80329 14.2731 1.99849 14.064 2.24011 14.064Z" fill="black" fill-opacity="0.65"/>
+    <path d="M0.637534 6.17785L5.92712 0.3203C6.11277 0.11408 6.36257 0 6.63012 0H6.63149C6.89631 0.00146256 7.15294 0.118467 7.33586 0.323225L12.5708 6.18077C12.7647 6.39577 12.8193 6.71168 12.7101 6.98518C12.6022 7.26014 12.3511 7.43711 12.0726 7.43711H10.2339V12.0486C10.2339 12.6292 9.79296 13.1045 9.25103 13.1074L4.04062 13.125C3.49869 13.125 3.05505 12.6526 3.05232 12.069L3.03594 7.43565H1.13578C0.857308 7.43565 0.607503 7.25868 0.498299 6.98372C0.389094 6.70876 0.443697 6.39284 0.637534 6.17785ZM3.90684 6.50107L3.92595 12.0676C3.92595 12.1334 3.97782 12.189 4.04062 12.189L9.2483 12.1714C9.30973 12.1714 9.36023 12.1158 9.36023 12.0486V6.50107H11.6481L6.70384 0.969676C6.67927 0.941888 6.6506 0.936037 6.63012 0.936037C6.61101 0.936037 6.58235 0.941888 6.55641 0.971139L1.56168 6.50107H3.90684ZM2.24011 14.064H10.9683C11.2099 14.064 11.4051 14.2731 11.4051 14.532C11.4051 14.7909 11.2099 15 10.9683 15H2.24011C1.99849 15 1.80329 14.7909 1.80329 14.532C1.80329 14.2731 1.99849 14.064 2.24011 14.064Z" fill="black" fill-opacity="0.45"/>
+</svg>

+ 2 - 0
packages/assets/src/libs/assets/down.ts

@@ -0,0 +1,2 @@
+import down from '../../assets/down.svg' 
+ export default down

+ 2 - 0
packages/assets/src/libs/assets/star.ts

@@ -0,0 +1,2 @@
+import star from '../../assets/star.svg' 
+ export default star

+ 2 - 0
packages/assets/src/libs/assets/up.ts

@@ -0,0 +1,2 @@
+import up from '../../assets/up.svg' 
+ export default up

+ 7 - 7
packages/merchant/src/core/libs/messages.ts

@@ -36,15 +36,15 @@ export const messages = {
       passportNumber: '护照号',
       householdAddress: '家庭地址',
       cooperationTime: '合作时间',
-      joinTime: '加入时间',
-      circle: '圈子',
-      hobbies: '爱好',
-      sharingIntent: '分享意图',
+      joinTime: '加入筑巢荟时间',
+      circle: '最要好的圈层',
+      hobbies: '兴趣爱好',
+      sharingIntent: '个人传播意愿度',
       createTime: '创建时间',
-      imageNumber: '图片数量',
+      imageNumber: '个人照片',
       imageUrl: '图片URL',
-      maritalStatus: '婚姻状',
-      maritalStatusStr: '婚姻状况描述',
+      maritalStatus: '婚姻状',
+      maritalStatusStr: '婚姻状',
     },
     designerFamilyInfo: {
       id: 'ID',

+ 37 - 18
packages/merchant/src/pages/agent/designer/archives/basic-info/index.vue

@@ -45,72 +45,91 @@ const schema = ref<
       | 'hobbies'
       | 'sharingIntent'
       // | 'imageUrl'
-      | 'maritalStatus'
+      // | 'maritalStatus'
+      | 'maritalStatusStr'
     >
   >
 >({
   companyAddress: {
     type: 'TextField',
     label: messages.objects.designerBasiceInfo.companyAddress,
-    labelWidth: 0,
+    labelWidth: 120,
     props: undefined,
   },
   idCardNumber: {
     type: 'TextField',
     label: messages.objects.designerBasiceInfo.idCardNumber,
+    labelWidth: 120,
   },
   passportNumber: {
     type: 'TextField',
     label: messages.objects.designerBasiceInfo.passportNumber,
+    labelWidth: 120,
   },
   householdAddress: {
     type: 'TextField',
     label: messages.objects.designerBasiceInfo.householdAddress,
+    labelWidth: 120,
   },
   cooperationTime: {
     type: 'TimePick',
     label: messages.objects.designerBasiceInfo.cooperationTime,
+    labelWidth: 120,
+    props: {
+      type: 'date',
+    },
   },
   circle: {
     type: 'TextField',
     label: messages.objects.designerBasiceInfo.circle,
+    labelWidth: 120,
   },
   hobbies: {
     type: 'TextField',
     label: messages.objects.designerBasiceInfo.hobbies,
+    labelWidth: 120,
   },
   sharingIntent: {
     type: 'TextField',
     label: messages.objects.designerBasiceInfo.sharingIntent,
+    labelWidth: 120,
   },
   // imageUrl: {
   //   type: 'ImageUploader',
   //   label: messages.objects.designerBasiceInfo.imageUrl,
   // },
-  maritalStatus: {
-    type: 'Radio',
-    label: messages.objects.designerBasiceInfo.maritalStatus,
+  maritalStatusStr: {
+    type: 'TextField',
+    label: messages.objects.designerBasiceInfo.maritalStatusStr,
+    labelWidth: 120,
     props: {
-
-      columns: [
-        { label: '未婚', value: 1 },
-        { label: '已婚', value: 2 },
-        { label: '离婚', value: 3 },
-        { label: '丧偶', value: 4 },
-      ],
+      // columns: [
+      //   { label: '未婚', value: 1 },
+      //   { label: '已婚', value: 2 },
+      //   { label: '离婚', value: 3 },
+      //   { label: '丧偶', value: 4 },
+      // ],
     },
   },
 })
 const eventsQuery = computed(() => ({ type: '3' }))
-// const {} = useRequest()
 const handleSubmit = async () => {
-  const { code } = await requestToast(() => updateDesignerBasicInfo(formData.value), {
-    success: true,
-    successTitle: '保存成功',
-  })
+  console.log(formData.value)
+  const { code } = await requestToast(
+    () =>
+      updateDesignerBasicInfo({
+        ...formData.value,
+        userId: id.value,
+        id: basicData.value.id,
+      }),
+    {
+      success: true,
+      successTitle: '保存成功',
+    },
+  )
   if (code === 0) {
     await setBasicData()
-    uni.navigateBack()
+    await uni.navigateBack()
   }
 }
 onLoad(async (query: { id: string }) => {

+ 14 - 4
packages/merchant/src/pages/agent/designer/archives/index.vue

@@ -65,14 +65,14 @@ const handleAddFamilyInfo = async () => {
       type: 'TextField',
       label: messages.objects.designerFamilyInfo.familyRelation,
       props: {
-        placeholder: `请选择${messages.objects.designerFamilyInfo.familyRelation}`,
+        placeholder: `请输入${messages.objects.designerFamilyInfo.familyRelation}`,
       },
     },
     familyName: {
       type: 'TextField',
       label: messages.objects.designerFamilyInfo.familyName,
       props: {
-        placeholder: `请选择${messages.objects.designerFamilyInfo.familyName}`,
+        placeholder: `请输入${messages.objects.designerFamilyInfo.familyName}`,
       },
     },
     familySex: {
@@ -91,6 +91,8 @@ const handleAddFamilyInfo = async () => {
       props: {
         type: 'date',
         placeholder: `请选择${messages.objects.designerFamilyInfo.familyBirthday}`,
+        minDate: new Date('1925-01-01').getTime(),
+        defaultVale: new Date('1990-01-01').getTime(),
       },
     },
     familyInterset: {
@@ -108,6 +110,9 @@ const handleAddFamilyInfo = async () => {
       },
     },
   }
+  formData.value = {
+    familyBirthday: '',
+  }
   schema.value = familySchema
   actionSheetStatus.value = true
 }
@@ -195,6 +200,9 @@ const handleDeleteFamilyInfo = async (item: DesignerFamilyInfo) => {
 }
 onLoad(async (query?: Record<string | 'id', any>) => {
   id.value = query?.id
+})
+onShow(async () => {
+  console.log(id.value)
   await setBasicData()
 })
 </script>
@@ -209,7 +217,9 @@ onLoad(async (query?: Record<string | 'id', any>) => {
       <template v-if="tab === 'basic'">
         <div class="bg-white mt-4 flex flex-col gap-5 p-4">
           <template
-            v-for="([key, value], index) in Object.entries(omit(basicData, ['id', 'userId']))"
+            v-for="([key, value], index) in Object.entries(
+              omit(basicData, ['id', 'userId', 'maritalStatus', 'imageUrl']),
+            )"
             :key="index"
           >
             <div class="flex items-center justify-between">
@@ -258,7 +268,7 @@ onLoad(async (query?: Record<string | 'id', any>) => {
                 <SectionHeading
                   title="生日"
                   size="base"
-                  :end-text="item.familyBirthday"
+                  :end-text="item.familyBirthday && dayjs(item.familyBirthday).format('YYYY-MM-DD')"
                 ></SectionHeading>
                 <SectionHeading
                   title="爱好"

+ 27 - 10
packages/merchant/src/pages/mine/components/agent-mine.vue

@@ -44,6 +44,14 @@ const bgClass = [
   'bg-gradient-to-r from-[#eef4fe] to-[#f0f4f9]',
   'bg-gradient-to-r from-[#faf2ff] to-[#f0f4f9]',
 ]
+const units = [
+  // { },
+  // 单位、 换算率
+  { unit: '万', rate: 10000 },
+  { unit: '万', rate: 10000 },
+  { unit: '次', rate: 1 },
+  { unit: '次', rate: 1 },
+]
 const toSettings = () => {
   uni.navigateTo({ url: '/pages/mine/agent/settings/index' })
 }
@@ -144,18 +152,23 @@ onMounted(async () => {
                 <div class="flex items-center gap-1">
                   <div class="text-black/90 text-lg font-medium font-['D-DIN-PRO'] leading-normal">
                     <!-- 6000 -->
-                    {{ it.target / 10000 }}
+                    <!--                    {{ it.target / 10000 }}-->
+                    {{ it.target / units[i].rate }}
+                  </div>
+                  <div class="text-black text-xs font-normal font-['PingFang_SC']">
+                    {{ units[i].unit }}
                   </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-['D-DIN-PRO'] leading-normal">
                     <!-- 3000 -->
-                    {{ (it.target - (it.thisYearComplete ?? 0)) / 10000 }}
+                    {{ (it.target - (it.thisYearComplete ?? 0)) / units[i].rate }}
                   </div>
-                  <div class="text-[#ff2d2d] text-[10px] font-medium font-['D-DIN-PRO'] leading-normal">
-                    万
+                  <div
+                    class="text-[#ff2d2d] text-[10px] font-medium font-['D-DIN-PRO'] leading-normal"
+                  >
+                    {{ units[i].unit }}
                   </div>
                 </div>
               </div>
@@ -164,18 +177,22 @@ onMounted(async () => {
                 <div class="flex items-center gap-1">
                   <div class="text-black/90 text-lg font-medium font-['D-DIN-PRO'] leading-normal">
                     <!-- 6000 -->
-                    {{ (it.thisYearComplete ?? 0) / 10000 }}
+                    {{ (it.thisYearComplete ?? 0) / units[i].rate }}
+                  </div>
+                  <div class="text-black text-xs font-normal font-['PingFang_SC']">
+                    {{ units[i].unit }}
                   </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-['D-DIN-PRO'] leading-normal">
                     <!-- 3000 -->
-                    {{ (it.thisMonthComplete ?? 0) / 10000 }}
+                    {{ (it.thisMonthComplete ?? 0) / units[i].rate }}
                   </div>
-                  <div class="text-[#0FC187] text-[10px] font-medium font-['D-DIN-PRO'] leading-normal">
-                    万
+                  <div
+                    class="text-[#0FC187] text-[10px] font-medium font-['D-DIN-PRO'] leading-normal"
+                  >
+                    {{ units[i].unit }}
                   </div>
                 </div>
               </div>

+ 29 - 19
packages/merchant/src/pages/mine/merchant/orders/detail/index.vue

@@ -9,9 +9,17 @@
 <script lang="ts" setup>
 import { getPointsOrder } from '../../../../../core/libs/requests'
 import dayjs from 'dayjs'
+import { ref } from 'vue'
 const collapseValue = ref<string[]>(['item1'])
 const id = ref()
 const { data, run: setData } = useRequest(() => getPointsOrder(id.value), { initialData: {} })
+const status = ref<any>({
+  '0': '已报名',
+  '1': '已完成',
+  '2': '未核销',
+  '3': '已取消',
+  '4': '待交付',
+})
 onLoad(async (query: { id: string }) => {
   id.value = query.id
   await setData()
@@ -105,27 +113,29 @@ onLoad(async (query: { id: string }) => {
         </div>
       </div>
       <div style="height: 1px; background-color: #f2f2f2" class="mt-[16px]"></div>
-      <div
-        class="text-left text-black text-base font-normal font-['PingFang_SC'] leading-normal mt-[24px]"
-      >
-        完成记录
-      </div>
-      <div class="flex mt-[20px] items-center justify-between">
-        <div class="text-black/60 text-sm font-normal font-['PingFang_SC'] leading-normal">
-          核销时间
-        </div>
-        <div class="text-black/90 text-sm font-normal font-['PingFang_SC'] leading-normal">
-          {{ dayjs(data?.completeTime).format('YYYY-MM-DD HH:mm') }}
-        </div>
-      </div>
-      <div class="flex mt-[20px] items-center justify-between">
-        <div class="text-black/60 text-sm font-normal font-['PingFang_SC'] leading-normal">
-          核销人
+      <template v-if="['1'].includes(String(data?.orderStatus))">
+        <div
+          class="text-left text-black text-base font-normal font-['PingFang_SC'] leading-normal mt-[24px]"
+        >
+          完成记录
+        </div>
+        <div class="flex mt-[20px] items-center justify-between">
+          <div class="text-black/60 text-sm font-normal font-['PingFang_SC'] leading-normal">
+            核销时间
+          </div>
+          <div class="text-black/90 text-sm font-normal font-['PingFang_SC'] leading-normal">
+            {{ dayjs(data?.verificationTime).format('YYYY-MM-DD HH:mm') }}
+          </div>
         </div>
-        <div class="text-black/90 text-sm font-normal font-['PingFang_SC'] leading-normal">
-          李书福
+        <div class="flex mt-[20px] items-center justify-between">
+          <div class="text-black/60 text-sm font-normal font-['PingFang_SC'] leading-normal">
+            核销人
+          </div>
+          <div class="text-black/90 text-sm font-normal font-['PingFang_SC'] leading-normal">
+            {{ data?.verificationUserName }}
+          </div>
         </div>
-      </div>
+      </template>
     </div>
   </view>
 </template>