kevin.T 2 months ago
parent
commit
d2fb61d773

+ 1 - 0
packages/app/src/components/data-form.ts

@@ -16,5 +16,6 @@ export interface DataFormSchema {
     existing?: boolean
     required?: boolean
     props?: DataFormProps
+    callback?: Function
   }
 }

+ 3 - 1
packages/app/src/components/data-form.vue

@@ -99,7 +99,8 @@ defineExpose({
       <!-- <wd-cell-group border> -->
       <template
         v-for="(
-          [prop, { type, label, labelWidth, hiddenLabel, existing, required, props }], index
+          [prop, { type, label, labelWidth, hiddenLabel, existing, required, props, callback }],
+          index
         ) in Object.entries(schema)"
         :key="index"
       >
@@ -176,6 +177,7 @@ defineExpose({
               cell: false,
               ...props,
             }"
+            @confirm="callback"
             v-model="modelValue[prop]"
           ></wd-picker>
 

+ 16 - 16
packages/app/src/components/moment-item.vue

@@ -20,7 +20,7 @@ const props = withDefaults(
     options: CircleRes
     isOwn?: boolean
     isShared?: boolean
-	dict?:Object
+    dict?: Object
   }>(),
   {},
 )
@@ -49,12 +49,12 @@ const handleDelete = async () => {
   emits('delete', props.options.id)
 }
 
-const dictLabelChange = (dictArr:any, value:any) => {
-	for(let i in dictArr){
-		if(dictArr[i].value === value){
-			return dictArr[i].label
-		}
-	}
+const dictLabelChange = (dictArr: any, value: any) => {
+  for (let i in dictArr) {
+    if (dictArr[i].value === value) {
+      return dictArr[i].label
+    }
+  }
 }
 
 onMounted(async () => {
@@ -88,7 +88,7 @@ onMounted(async () => {
         <view
           class="relative"
           @click.stop="
-            features.toDesignerHomePage &&
+            options?.levelId >= 2 &&
             ['1', '2'].includes(options?.circleType) &&
             currRoute().path !== '/pages-sub/mine/homepage/index' &&
             router.push(`/pages-sub/mine/homepage/index?id=${options.stylistId}`)
@@ -179,13 +179,13 @@ onMounted(async () => {
             <div class="text-black/40 text-sm font-normal font-['PingFang_SC']">
               风格:{{ getOptionLabel(DictType.memberDesignStyle, options.designStyle) }}
             </div> -->
-			<div class="font-normal font-['PingFang_SC']">
-			  类别:{{ dictLabelChange(dict?.spaceType, options?.spaceType) }}
-			</div>
-			|
-			<div class="text-black/40 text-sm font-normal font-['PingFang_SC']">
-			  风格:{{ dictLabelChange(dict?.designStyle, options.designStyle) }}
-			</div>
+            <div class="font-normal font-['PingFang_SC']">
+              类别:{{ dictLabelChange(dict?.spaceType, options?.spaceType) }}
+            </div>
+            |
+            <div class="text-black/40 text-sm font-normal font-['PingFang_SC']">
+              风格:{{ dictLabelChange(dict?.designStyle, options.designStyle) }}
+            </div>
             |
             <div class="text-black/40 text-sm font-normal font-['PingFang_SC']">
               面积:{{ options.spaceExtent }}
@@ -261,4 +261,4 @@ onMounted(async () => {
       </view>
     </Card>
   </div>
-</template>
+</template>

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

@@ -167,7 +167,7 @@ const toDesignerHomepage = () => {
   console.log(
     `/pages-sub/mine/homepage/index?id=${data.value?.stylistId}${isShared.value ? '&isShared=true' : ''}`,
   )
-  if (['1', '2'].includes(String(data.value?.circleType))) {
+  if (['1', '2'].includes(String(data.value?.circleType)) && data.value?.levelId >= 2) {
     router.push(
       `/pages-sub/mine/homepage/index?id=${data.value?.stylistId}${isShared.value ? '&isShared=true' : ''}`,
     )

+ 9 - 15
packages/app/src/pages-sub/home/schedule/index.vue

@@ -42,7 +42,7 @@ onMounted(async () => {
   <view class="flex-grow flex flex-col">
     <NavbarEvo transparent dark></NavbarEvo>
     <view class="bg-black w-full aspect-[1.26/1]">
-<!--      <ImageEvo :src="currentStudyTour?.bannerUrl"></ImageEvo>-->
+      <!--      <ImageEvo :src="currentStudyTour?.bannerUrl"></ImageEvo>-->
       <div
         class="w-full h-full bg-[length:100%_auto]"
         :style="{ backgroundImage: `url(${currentStudyTour?.bannerUrl})` }"
@@ -87,7 +87,9 @@ onMounted(async () => {
           <view class="flex flex-col mt-8">
             <!-- 左侧图标 -->
             <view class="flex items-center">
-              <view class="w-[30px] h-[30px] bg-[#f6f6f6] rounded-full flex justify-center items-center">
+              <view
+                class="w-[30px] h-[30px] bg-[#f6f6f6] rounded-full flex justify-center items-center"
+              >
                 <wd-img width="16" height="16" :src="map"></wd-img>
               </view>
               <div class="ml-3 text-black/90 text-base font-normal">
@@ -100,24 +102,19 @@ onMounted(async () => {
 
             <!-- 标题 -->
 
-
             <!-- 描述 -->
             <view class="ml-10 mt-2 border-b border-black/10 pb-5">
-      <span class="text-black/60 text-sm font-normal">
-        行程介绍:
-      </span>
+              <span class="text-black/60 text-sm font-normal">行程介绍:</span>
               <span class="text-black/40 text-sm font-normal">
-        {{ item.travelDesc }}
-      </span>
+                {{ item.travelDesc }}
+              </span>
             </view>
 
             <!-- 打卡示例 -->
             <template v-if="item.clockExplainUrl">
               <view class="flex items-center mt-4 ml-10">
                 <wd-img width="16" height="16" :src="camera"></wd-img>
-                <div class="ml-1 text-black/90 text-xs font-normal">
-                  打卡示例
-                </div>
+                <div class="ml-1 text-black/90 text-xs font-normal">打卡示例</div>
               </view>
               <wd-img
                 v-if="(item.clockExplainUrl ?? '') !== ''"
@@ -127,15 +124,12 @@ onMounted(async () => {
                 mode="widthFix"
                 enable-preview
               ></wd-img>
-              <div
-                class="mt-2.5 ml-10 text-black/40 text-xs font-normal"
-              >
+              <div class="mt-2.5 ml-10 text-xs font-normal">
                 {{ item.clockExplainDesc }}
               </div>
             </template>
           </view>
         </template>
-
       </view>
     </div>
     <BottomAppBar fixed placeholder>

+ 58 - 34
packages/app/src/pages-sub/home/study-tour/index.vue

@@ -11,6 +11,8 @@ import Card from '@/components/card.vue'
 import MomentItem from '@/components/moment-item.vue'
 import SectionHeading from '@/components/section-heading.vue'
 import ClassItem from '../components/class-item.vue'
+import { storeToRefs } from 'pinia'
+import { useUserStore } from '@/store'
 import {
   getAppMemberLevelConfigs,
   getBanners,
@@ -18,15 +20,21 @@ import {
   getContents,
   getStudyTours,
 } from '../../../core/libs/requests'
+import { handleUpvoteClick } from '@/core/libs/actions'
 import { NetImages } from '../../../core/libs/net-images'
 import { BannerMode } from '../../../core/libs/models'
 import { useRouter } from '../../../core/utils/router'
 import PageHelper from '@/components/page-helper.vue'
 import RegisterCard from './components/register-card.vue'
+import { ComponentExposed } from 'vue-component-type-helpers'
+const pageHelperRef = ref<ComponentExposed<typeof PageHelper>>()
 const currentBanner = ref(0)
 const handleSwiperChange = ({ detail: { current } }) => {
-  currentBanner.value = current 
+  currentBanner.value = current
 }
+const userStore = useUserStore()
+const { userInfo } = storeToRefs(userStore)
+const shareOptions = ref()
 const router = useRouter()
 const { data: studyTours, run: setStudyTours } = useRequest(() =>
   getStudyTours({ headRecommend: 1 }),
@@ -42,6 +50,14 @@ const { data: banners, run: setBanners } = useRequest(
 const { data: levels, run: setLevels } = useRequest(() => getAppMemberLevelConfigs(), {
   initialData: [],
 })
+const handleLike = async (options) => {
+  await handleUpvoteClick({
+    ...options,
+    userId: userInfo.value.userId,
+    userName: userInfo.value.nickname,
+  })
+  await pageHelperRef.value?.refresh()
+}
 const levelsByMemberLevel = computed(() =>
   levels.value.reduce((acc, item) => {
     acc[item.memberLevel] = item
@@ -51,6 +67,9 @@ const levelsByMemberLevel = computed(() =>
 onMounted(async () => {
   await Promise.all([setLevels(), setStudyTours(), setClassmates(), setBanners()])
 })
+onShow(async () => {
+  await pageHelperRef.value?.reload()
+})
 </script>
 <template>
   <view class="flex-grow flex flex-col gap-6 p-3.5">
@@ -74,24 +93,24 @@ onMounted(async () => {
     </div>
 
     <div class="relative">
-		<template v-if="studyTours?.list.length">
-		  <swiper class="aspect-[0.75/1] rounded-[20px] overflow-hidden" @change="handleSwiperChange">
-		    <template v-for="(it, i) in studyTours?.list" :key="i">
-		      <swiper-item>
-		        <RegisterCard :options="{ ...it, levelsByMemberLevel }"></RegisterCard>
-		      </swiper-item>
-		    </template>
-		  </swiper>
-		</template>
-		<div class="absolute flex gap-1 dots">
-		  <template v-for="(it, i) in studyTours?.list" :key="i">
-		    <div
-		      class="w-1 h-1 rounded-full"
-		      :class="`${currentBanner === i ? 'bg-white bg-active' : 'bg-white/40'}`"
-		    ></div>
-		  </template>
-		</div>
-	</div>
+      <template v-if="studyTours?.list.length">
+        <swiper class="aspect-[0.75/1] rounded-[20px] overflow-hidden" @change="handleSwiperChange">
+          <template v-for="(it, i) in studyTours?.list" :key="i">
+            <swiper-item>
+              <RegisterCard :options="{ ...it, levelsByMemberLevel }"></RegisterCard>
+            </swiper-item>
+          </template>
+        </swiper>
+      </template>
+      <div class="absolute flex gap-1 dots">
+        <template v-for="(it, i) in studyTours?.list" :key="i">
+          <div
+            class="w-1 h-1 rounded-full"
+            :class="`${currentBanner === i ? 'bg-white bg-active' : 'bg-white/40'}`"
+          ></div>
+        </template>
+      </div>
+    </div>
     <!-- </template>
     </PageHelper> -->
     <!-- <card custom-class="p-0!">
@@ -179,11 +198,16 @@ onMounted(async () => {
       tip="暂无内容"
     ></wd-status-tip>
     <section-heading custom-class="" title="设计圈"></section-heading>
-    <PageHelper :request="getCircles" :query="{tagName: '设计游学'}" class="flex-grow flex flex-col">
+    <PageHelper
+      ref="pageHelperRef"
+      :request="getCircles"
+      :query="{ tagName: '设计游学' }"
+      class="flex-grow flex flex-col"
+    >
       <template #default="{ source }">
         <div class="flex-grow flex flex-col gap-6">
           <template v-for="(it, i) in source.list" :key="i">
-            <MomentItem :options="it"></MomentItem>
+            <MomentItem :options="it" @like="handleLike"></MomentItem>
           </template>
         </div>
       </template>
@@ -191,16 +215,16 @@ onMounted(async () => {
   </view>
 </template>
 <style scoped>
-	.dots{
-		bottom: 20rpx;
-		left: 50%;
-		transform: translateX(-50%);
-	}
-	.bg-active{
-		width:40rpx;
-	}
-	:deep(.level-circle){
-		top: -10rpx;
-		left:-5rpx;
-	}
-</style>
+.dots {
+  bottom: 20rpx;
+  left: 50%;
+  transform: translateX(-50%);
+}
+.bg-active {
+  width: 40rpx;
+}
+:deep(.level-circle) {
+  top: -10rpx;
+  left: -5rpx;
+}
+</style>

+ 23 - 14
packages/app/src/pages-sub/mine/authentication/index.vue

@@ -40,6 +40,9 @@ const attachment = ref()
 const formInited = ref(false)
 const uploadDisabled = ref(false)
 const { data: userAuthInfo, run: setUserAuthInfo } = useRequest(() => getUserAuthInfo())
+const confirmReferrer = async (val: string) => {
+  formData.value.referrer = ''
+}
 const schema = ref<DataFormSchema>({
   channelSource: {
     type: 'Select',
@@ -51,6 +54,7 @@ const schema = ref<DataFormSchema>({
       disabled: userAuthInfo.value != null,
       'onUpdate:modelValue': (value) => setReferrerExisting(value),
     },
+    callback: confirmReferrer,
   },
   referrer: {
     type: 'TextField',
@@ -111,7 +115,12 @@ const setReferrerExisting = (value: string) => {
 }
 const handleSubmit = async () => {
   console.log(formData.value)
-  if (formData.value.channelSource && formData.value.channelSource !== '4' && formData.value.channelSource !== '3' && !userAuthInfo.value) {
+  if (
+    formData.value.channelSource &&
+    formData.value.channelSource !== '4' &&
+    formData.value.channelSource !== '3' &&
+    !userAuthInfo.value
+  ) {
     if ((formData.value.referrer ?? '') === '') {
       await uni.showToast({ title: messages.mine.authentication.referrerErrorText, icon: 'none' })
       return
@@ -187,7 +196,7 @@ onLoad(async (query?: Record<string | 'scene', string>) => {
     console.log(query.scene)
     try {
       const [referrer, channelSource] = decodeURIComponent(query.scene).split('&')
-      console.log(referrer, channelSource)
+      console.log('===================', referrer, channelSource)
       formData.value = {
         ...formData.value,
         referrer,
@@ -241,20 +250,20 @@ onLoad(async (query?: Record<string | 'scene', string>) => {
       msg: userAuthInfo.value?.remark || '由于系统原因,您提交的认证暂时无法通过,请修改后重新提交',
     })
   }
-  if(userInfo.value.userAuthStatus === 0){
-	await uni.showToast({ title: "您当前已是筑巢荟会员", icon: 'none' })
-	setTimeout(()=>{
-		uni.switchTab({
-			url:"/pages/mine/index"
-		})
-	},2000)
+  if (userInfo.value.userAuthStatus === 0) {
+    await uni.showToast({ title: '您当前已是筑巢荟会员', icon: 'none' })
+    setTimeout(() => {
+      uni.switchTab({
+        url: '/pages/mine/index',
+      })
+    }, 2000)
   }
 })
-onShow(()=>{
-	// console.log(!userInfo.value.nickname)
-	if(!userInfo.value.nickname){
-		router.push('/pages-sub/login/index')
-	}
+onShow(() => {
+  // console.log(!userInfo.value.nickname)
+  if (!userInfo.value.nickname) {
+    router.push('/pages-sub/login/index')
+  }
 })
 defineExpose({})
 </script>

+ 11 - 2
packages/app/src/pages-sub/mine/homepage/index.vue

@@ -36,9 +36,13 @@ import more from '@designer-hub/assets/src/libs/assets/more'
 import qrCode from '@designer-hub/assets/src/libs/assets/qrCode'
 import { useShare } from '@/composables/share'
 import { useMemberLevelsStore } from '../../../store/member-levles'
+import { getByDictType } from '@/core/libs/requests'
+import { DictType } from '@/core/libs/models'
+
 const memberLevelsStore = useMemberLevelsStore()
 const { getMemberAvatarFrame } = memberLevelsStore
-
+const dictMemberDesignStyle = ref<any[]>()
+const dictCircleSpaceType = ref<any[]>()
 const { features, clickByPermission } = usePermissions()
 const { shareAppMessage } = useShare()
 const { alert, confirm } = useMessage()
@@ -149,6 +153,10 @@ onLoad(async (query: { id: string; isShared?: string }) => {
     viewStartAt.value = new Date()
   }
   await Promise.all([setMemberInfo(), setBadges()])
+  let value1 = await getByDictType(DictType.circleSpaceType)
+  dictCircleSpaceType.value = value1.data
+  let value2 = await getByDictType(DictType.memberDesignStyle)
+  dictMemberDesignStyle.value = value2.data
 })
 onShow(async () => {
   await setDesignerInfo()
@@ -192,7 +200,7 @@ onShareTimeline(() => ({
     ? designerInfo.value?.homePageName
     : userInfo.value?.nickname + ' “${designerInfo.value?.designDesc}”',
   imageUrl: designerInfo.value.sharePageUrl,
-  query: "id=" + id.value+"&isShared=true",
+  query: 'id=' + id.value + '&isShared=true',
 }))
 defineExpose({
   navBarFixed: false,
@@ -393,6 +401,7 @@ defineExpose({
               <template v-for="it of source.list" :key="it.id">
                 <view class="">
                   <MomentItem
+                    :dict="{ spaceType: dictCircleSpaceType, designStyle: dictMemberDesignStyle }"
                     :options="it"
                     :is-own="userInfo.userId === it.stylistId"
                     :is-shared="isShared"

+ 2 - 2
packages/app/src/pages.json

@@ -1,7 +1,7 @@
 {
   "globalStyle": {
     "navigationStyle": "default",
-    "navigationBarTitleText": "unibest",
+    "navigationBarTitleText": "筑巢荟",
     "navigationBarBackgroundColor": "#f8f8f8",
     "navigationBarTextStyle": "black",
     "backgroundColor": "#FFFFFF"
@@ -637,4 +637,4 @@
       }
     }
   ]
-}
+}

+ 2 - 2
packages/app/src/pages/home/index.vue

@@ -117,8 +117,8 @@ const handleShare = (options: any) => {
   shareOptions.value = options
   shareActionState.value = true
 }
-const dictMemberDesignStyle = ref<[]>()
-const dictCircleSpaceType = ref<[]>()
+const dictMemberDesignStyle = ref<any[]>()
+const dictCircleSpaceType = ref<any[]>()
 const offLoad = (e) => {
   console.log(e)
 }