Sfoglia il codice sorgente

fix(app): 设计师认证页面和相关API调用

EvilDragon 6 mesi fa
parent
commit
4949201f81

+ 1 - 0
packages/app/pages.config.ts

@@ -50,6 +50,7 @@ export default defineUniPages({
       { name: '设计游学', path: 'pages/index/study-tour/index' },
       { name: '登录', path: 'pages/login/index' },
       { name: '我的', path: 'pages/mine/index' },
+      { name: '设计师认证', path: 'pages/mine/authentication/index' },
       { name: '设计师认证提交成功', path: 'pages/mine/authentication/submit/success/index' },
       { name: '设计师个人主页', path: 'pages/mine/homepage/index' },
     ],

+ 10 - 0
packages/app/src/components/data-form.vue

@@ -24,6 +24,7 @@ const types = {
   TextField: WdInput,
   Submit: WdButton,
   Select: WdPicker,
+  // Radio: WdRadioGroup,
 }
 const defaultProps = {
   TextField: {
@@ -70,6 +71,15 @@ const defaultProps = {
             v-bind="{ label, ...props }"
             v-model="modelValue[prop]"
           ></wd-picker>
+          <wd-radio-group
+            v-if="type === 'Radio'"
+            v-bind="{ label, ...props, cell: true, shape: 'button' }"
+            v-model="modelValue[prop]"
+          >
+            <template v-for="{ label, value } of props.columns" :key="value">
+              <wd-radio :value="value">{{ label }}</wd-radio>
+            </template>
+          </wd-radio-group>
           <!-- #endif -->
         </div>
       </template>

+ 17 - 0
packages/app/src/components/nav-bar-evo.vue

@@ -0,0 +1,17 @@
+<script setup lang="ts">
+defineProps<{
+  title: string
+}>()
+const navBarProps = ref({
+  fixed: true,
+  safeAreaInsetTop: true,
+  bordered: false,
+  leftArrow: true,
+  customClass: 'bg-transparent! text-white!',
+})
+</script>
+<template>
+  <wd-config-provider :themeVars="{}">
+    <wd-navbar fixed safeAreaInsetTop v-bind="{ ...navBarProps, title }"></wd-navbar>
+  </wd-config-provider>
+</template>

+ 0 - 4
packages/app/src/components/nav-bar.vue

@@ -1,4 +0,0 @@
-<script setup lang="ts"></script>
-<template>
-  <div></div>
-</template>

+ 4 - 2
packages/app/src/core/libs/requests.ts

@@ -1,6 +1,6 @@
 import { http, httpGet, httpPost } from '../../utils/http'
 import { Schedule } from '../models/schedule'
-import { Moment } from '../models/moment'
+import { DictType, Moment } from '../models/moment'
 import dayjs from 'dayjs'
 
 export const getUserInfo = () =>
@@ -149,7 +149,9 @@ export const weixinMiniAppLogin = (phoneCode: string, loginCode: string, state:
     state,
   })
 export const getMemberUserInfo = () => httpGet<any>('/app-api/member/user/get')
-export const getByDictType = (type: string | 'member_channel_source') =>
+export const getByDictType = (
+  type: string | 'member_channel_source' | 'member_spatial_expertise_type' | DictType,
+) =>
   httpGet<
     {
       label: string

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

@@ -51,3 +51,9 @@ export interface Task {
   sort: number
   status: number
 }
+export enum DictType {
+  /**
+   *  擅长空间类型
+   */
+  memberSpatialExpertiseType = 'member_spatial_expertise_type',
+}

+ 1 - 0
packages/app/src/core/themes/default.ts

@@ -13,4 +13,5 @@ export const defaultThemeVars: ConfigProviderThemeVars = {
   tagInfoBg: '#efefef',
   tagRoundRadius: '8rpx',
   colorTheme: 'red',
+  // navbarTitleColor: '#fff',
 }

+ 5 - 1
packages/app/src/layouts/back.vue

@@ -4,6 +4,7 @@ import { ref } from 'vue'
 
 const slots = useSlots()
 const childRef = ref()
+const reference = ref()
 const menuBtnClientRect = ref<UniNamespace.GetMenuButtonBoundingClientRectRes>({
   width: 0,
   height: 0,
@@ -57,7 +58,10 @@ const handleBack = () => {
       </div>
       <!-- {{ slots }} -->
       <!-- <div ref="childRef"> -->
-      <slot></slot>
+      {{ reference?.title }}
+      <div ref="reference">
+        <slot></slot>
+      </div>
       <!-- </div> -->
     </view>
     <wd-toast />

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

@@ -54,6 +54,10 @@
         "path": "pages/mine/index"
       },
       {
+        "name": "设计师认证",
+        "path": "pages/mine/authentication/index"
+      },
+      {
         "name": "设计师认证提交成功",
         "path": "pages/mine/authentication/submit/success/index"
       },

+ 38 - 22
packages/app/src/pages/mine/authentication/index.vue

@@ -6,11 +6,13 @@ style:
 <script lang="ts" setup>
 import Card from '@/components/card.vue'
 import DataForm from '@/components/data-form.vue'
+import NavBarEvo from '@/components/nav-bar-evo.vue'
 import SectionHeading from '@/components/section-heading.vue'
 import StartMenuButton from '@/components/start-menu-button.vue'
 import { createUserAuthInfo, getByDictType } from '@/core/libs/requests'
-import { scan } from '@/core/libs/svgs'
+import { DictType } from '@/core/models/moment'
 import { useUserStore } from '@/store'
+import { pageHeaderBg, pageHeaderFilter } from '@designer-hub/assets/src/svgs'
 import { storeToRefs } from 'pinia'
 import { useMessage, useToast } from 'wot-design-uni'
 
@@ -19,6 +21,7 @@ const { userInfo } = storeToRefs(userStore)
 const { alert } = useMessage()
 const { error } = useToast()
 const formData = ref({})
+const formInited = ref(false)
 const schema = ref({
   channelSource: {
     type: 'Select',
@@ -62,14 +65,17 @@ const schema = ref({
     },
   },
   spatialExpertiseType: {
-    type: 'TextField',
+    type: 'Radio',
     label: '擅长空间类型',
     props: {
       placeholder: ' ',
+      columns: [],
     },
   },
 })
 const handleSubmit = async () => {
+  console.log(formData.value)
+
   const { code, msg } = await createUserAuthInfo({
     gender: userInfo.value.sex,
     attachment: 'https://via.placeholder.com/319x204',
@@ -84,30 +90,40 @@ const handleSubmit = async () => {
 }
 onMounted(async () => {
   const { data } = await getByDictType('member_channel_source')
-  console.log()
+  const { data: res } = await getByDictType(DictType.memberSpatialExpertiseType)
+  console.log(res)
   schema.value.channelSource.props.columns = data
-  alert({ title: '提示', msg: '您的认证申请已提交,请耐心等待审核,审核通过后您将获得通知' })
+  schema.value.spatialExpertiseType.props.columns = res
+  formInited.value = true
+  // alert({ title: '提示', msg: '您的认证申请已提交,请耐心等待审核,审核通过后您将获得通知' })
 })
+defineExpose({})
 </script>
 <template>
-  <div class="flex-grow flex flex-col p-3.5 gap-3.5">
-    <StartMenuButton>
-      1
-      <!-- <wd-button type="icon">
-        <wd-img wdith="25" height="25" :src="scan"></wd-img>
-      </wd-button> -->
-    </StartMenuButton>
-    <Card>
-      <SectionHeading size="base" title="基本信息"></SectionHeading>
-      <DataForm v-model="formData" :schema="schema" direction="horizontal"></DataForm>
-    </Card>
-    <Card>
-      <SectionHeading size="base" title="上传附件"></SectionHeading>
-      <wd-upload></wd-upload>
-    </Card>
-    <div class="flex-1"></div>
-    <div>
-      <wd-button block :round="false" @click="handleSubmit">提交</wd-button>
+  <div class="flex-grow">
+    <div class="relative aspect-[3.6/1]">
+      <div class="absolute top-0 left-0 right-0 bottom--18.5">
+        <wd-img width="100%" height="100%" :src="pageHeaderBg"></wd-img>
+      </div>
+      <div class="absolute top-0 left-0 right-0 bottom--18.5">
+        <wd-img width="100%" height="100%" :src="pageHeaderFilter"></wd-img>
+      </div>
+    </div>
+    <NavBarEvo title="设计师认证"></NavBarEvo>
+    <div class="flex-grow flex flex-col p-3.5 gap-3.5 relative">
+      <Card>
+        <SectionHeading size="base" title="基本信息"></SectionHeading>
+        <template v-if="formInited"></template>
+        <DataForm v-model="formData" :schema="schema" direction="horizontal"></DataForm>
+      </Card>
+      <Card>
+        <SectionHeading size="base" title="上传附件"></SectionHeading>
+        <wd-upload></wd-upload>
+      </Card>
+      <div class="flex-1"></div>
+      <div>
+        <wd-button block :round="false" @click="handleSubmit">提交</wd-button>
+      </div>
     </div>
   </div>
 </template>

File diff suppressed because it is too large
+ 13 - 0
packages/assets/src/assets/svgs/page-header-bg.svg


+ 3 - 0
packages/assets/src/assets/svgs/page-header-filter.svg

@@ -0,0 +1,3 @@
+<svg width="375" height="178" viewBox="0 0 375 178" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M0 0H375V163L187.5 178L0 163V0Z" fill="black" fill-opacity="0.66"/>
+</svg>

+ 3 - 1
packages/assets/src/svgs.ts

@@ -1,2 +1,4 @@
 import ts from "./typescript.svg";
-export { ts };
+import pageHeaderBg from "./assets/svgs/page-header-bg.svg";
+import pageHeaderFilter from "./assets/svgs/page-header-filter.svg";
+export { ts, pageHeaderBg, pageHeaderFilter };

Some files were not shown because too many files changed in this diff