Browse Source

feat(mine): 添加预约咨询功能并优化个人主页

EvilDragon 4 months ago
parent
commit
bcd8ed94b4

+ 1 - 0
packages/app/src/core/libs/net-images.ts

@@ -3,4 +3,5 @@ export enum NetImages {
   'avatar' = 'https://cdn.jsdelivr.net/gh/yangyang-yangyang/yangyang-yangyang.github.io@master/images/avatar.png',
   'NotContent' = 'https://image.zhuchaohui.com/zhucaohui/3819d411440c23cc9e4f4bd3a520325386d7f038ed6dfa7c2ba076bd5110d2d2.png',
   'DesigerHomepageDefaultBg' = 'https://image.zhuchaohui.com/zhucaohui/58dcb982d2957c5578478abbf000936efe9d11c96c5af4d457177cf5d90a9d39.png',
+  ConsultDefaultBg = 'https://image.zhuchaohui.com/zhucaohui/f1942e62d1b1adc23f37de705570e22d098da319e10c8a448dc49e594d4bee3a.png',
 }

+ 6 - 0
packages/app/src/core/libs/requests.ts

@@ -11,6 +11,7 @@ import {
   Moment,
   Comment,
   Activity,
+  BannerMode,
 } from '../models/moment'
 import dayjs from 'dayjs'
 
@@ -356,6 +357,11 @@ export const activitySignup = (data: { id: number }) =>
   httpPost('/app-api/member/activity/signup', data)
 export const getActivitySignups = (query: { activityId: string }) =>
   httpGet('/app-api/member/activity/signup/page', query)
+/**
+ * 获取Banner列表
+ */
+export const getBanners = (query: { mode: BannerMode }) =>
+  httpGet('/app-api/member/banner/get-by-mode', query)
 export const refreshToken = (refreshToken: string) =>
   httpPost<any>('/app-api/member/auth/refresh-token', {}, { refreshToken })
 export const httpGetMock = <T>(data: T) =>

+ 22 - 0
packages/app/src/core/models/moment.ts

@@ -293,3 +293,25 @@ export enum CircleType {
   moment = '1',
   case = '2',
 }
+export enum BannerMode {
+  /**
+   * 材料商
+   */
+  Material = 1,
+  /**
+   * 设计传播
+   */
+  Spread = 2,
+  /**
+   * 品质商城
+   */
+  Mall = 3,
+  /**
+   * 设计奖项
+   */
+  DesignAwards = 4,
+  /**
+   * 设计游学
+   */
+  StudyTour = 5,
+}

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

@@ -397,6 +397,13 @@
       }
     },
     {
+      "path": "pages/mine/homepage/consult/index",
+      "type": "page",
+      "style": {
+        "navigationStyle": "custom"
+      }
+    },
+    {
       "path": "pages/mine/homepage/edit/index",
       "type": "page",
       "style": {

+ 109 - 0
packages/app/src/pages/mine/homepage/consult/index.vue

@@ -0,0 +1,109 @@
+<route lang="json">
+{
+  "style": {
+    "navigationStyle": "custom"
+  }
+}
+</route>
+<script setup lang="ts">
+import MomentItem from '@/components/moment-item.vue'
+import { getByDictType, getCircles } from '../../../../core/libs/requests'
+import { useUserStore } from '../../../../store'
+import { storeToRefs } from 'pinia'
+import { NetImages } from '../../../../core/libs/net-images'
+import PageHelper from '@/components/page-helper.vue'
+import BottomAppBar from '@/components/bottom-app-bar.vue'
+import { useRouter } from '../../../../core/utils/router'
+import NavbarEvo from '@/components/navbar-evo.vue'
+
+const router = useRouter()
+const userStore = useUserStore()
+const { userInfo } = storeToRefs(userStore)
+const id = ref()
+const tab = ref('2')
+const { data: circleTypes, run: getCircleType } = useRequest(() =>
+  getByDictType('member_circle_type'),
+)
+const circlesData = ref({ list: [] })
+const setCirclesData = async (circleType) => {
+  const { data } = await getCircles({
+    circleType,
+    stylistId: id.value,
+  })
+  circlesData.value = data
+}
+const tabs = ref([
+  { label: '案例', value: '2' },
+  { label: '动态', value: '1' },
+  { label: '视频', value: '0' },
+])
+const handleTabsChange = async ({ name }: any) => {
+  if (['1', '2'].includes(name)) {
+    await setCirclesData(name)
+  }
+}
+onMounted(async () => {})
+onLoad(async (query: { id: string }) => {
+  if (query.id) {
+    id.value = query.id
+  } else {
+    id.value = userInfo.value.userId
+  }
+  await setCirclesData(tab.value)
+  console.log(circleTypes.value)
+})
+onShareAppMessage(() => ({ title: `${userInfo.value.nickname}` }))
+defineExpose({
+  navBarFixed: false,
+})
+</script>
+<template>
+  <div class="flex-grow flex flex-col px-3.5">
+    <NavbarEvo transparent dark></NavbarEvo>
+    <div class="relative aspect-[0.79/1] mx--3.5">
+      <div class="absolute top-0 left-0 w-full h-full">
+        <wd-img
+          width="100%"
+          height="100%"
+          :src="NetImages.ConsultDefaultBg"
+          mode="widthFix"
+          custom-class="aspect-[0.71/1]"
+        />
+      </div>
+    </div>
+    <div class="flex-grow flex flex-col bg-white rounded-t-2xl relative px-4">
+      <div class="mt-13 flex gap-3 border-b-1 border-b-solid border-b-[#e1e1e1] pb-3">
+        <div class="px-4 py-0.5 bg-[#2b2725] rounded justify-center items-center gap-2.5 flex">
+          <div
+            class="text-center text-white text-base font-normal font-['PingFang SC'] tracking-wide"
+          >
+            姓名
+          </div>
+        </div>
+        <div class="flex-1 flex items-center">
+          <wd-input placeholder="请填写您的真实姓名" no-border></wd-input>
+        </div>
+      </div>
+
+      <div class="mt-13 flex gap-3 border-b-1 border-b-solid border-b-[#e1e1e1] pb-3">
+        <div class="px-4 py-0.5 bg-[#2b2725] rounded justify-center items-center gap-2.5 flex">
+          <div
+            class="text-center text-white text-base font-normal font-['PingFang SC'] tracking-wide"
+          >
+            电话
+          </div>
+        </div>
+        <div class="flex-1 flex items-center">
+          <wd-input placeholder="请输入您的手机号" no-border></wd-input>
+        </div>
+      </div>
+    </div>
+    <BottomAppBar fixed placeholder>
+      <div class="flex gap-7.5">
+        <div class="flex-1">
+          <wd-button block :round="false">提交预约</wd-button>
+        </div>
+      </div>
+    </BottomAppBar>
+  </div>
+</template>

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

@@ -59,7 +59,7 @@ defineExpose({
 </script>
 <template>
   <div class="flex-grow flex flex-col">
-    <NavbarEvo transparent></NavbarEvo>
+    <NavbarEvo transparent dark></NavbarEvo>
     <div class="relative">
       <wd-img
         width="100%"
@@ -129,7 +129,13 @@ defineExpose({
           <wd-button block :round="false" open-type="share">分享</wd-button>
         </div>
         <div class="flex-1" v-if="userInfo.userId !== Number(id)">
-          <wd-button block :round="false">预约咨询</wd-button>
+          <wd-button
+            block
+            :round="false"
+            @click="router.push(`/pages/mine/homepage/consult/index`)"
+          >
+            预约咨询
+          </wd-button>
         </div>
       </div>
     </BottomAppBar>

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

@@ -46,6 +46,7 @@ interface NavigateToOptions {
        "/pages/home/spread/case-shooting/index" |
        "/pages/home/spread/design-awards/index" |
        "/pages/home/spread/wx-agent-operation/index" |
+       "/pages/mine/homepage/consult/index" |
        "/pages/mine/homepage/edit/index" |
        "/pages/mine/orders/detail/index" |
        "/pages/home/spread/case-shooting/photographer/index" |