diff --git a/auto-imports.d.ts b/auto-imports.d.ts index 7274c7d..918aad8 100644 --- a/auto-imports.d.ts +++ b/auto-imports.d.ts @@ -4,85 +4,5 @@ // Generated by unplugin-auto-import export {} declare global { - const EffectScope: typeof import('vue')['EffectScope'] - const acceptHMRUpdate: typeof import('pinia')['acceptHMRUpdate'] - const computed: typeof import('vue')['computed'] - const createApp: typeof import('vue')['createApp'] - const createPinia: typeof import('pinia')['createPinia'] - const customRef: typeof import('vue')['customRef'] - const defineAsyncComponent: typeof import('vue')['defineAsyncComponent'] - const defineComponent: typeof import('vue')['defineComponent'] - const defineStore: typeof import('pinia')['defineStore'] - const effectScope: typeof import('vue')['effectScope'] - const flexible: typeof import('./src/utils/flexible.js')['default'] - const getActivePinia: typeof import('pinia')['getActivePinia'] - const getCurrentInstance: typeof import('vue')['getCurrentInstance'] - const getCurrentScope: typeof import('vue')['getCurrentScope'] - const getLocal: typeof import('./src/utils/local')['getLocal'] - const getMousePosition: typeof import('./src/utils/tools')['getMousePosition'] - const getUniversalZoomLevel: typeof import('./src/utils/tools')['getUniversalZoomLevel'] - const h: typeof import('vue')['h'] - const inject: typeof import('vue')['inject'] - const isProxy: typeof import('vue')['isProxy'] - const isReactive: typeof import('vue')['isReactive'] - const isReadonly: typeof import('vue')['isReadonly'] - const isRef: typeof import('vue')['isRef'] - const mapActions: typeof import('pinia')['mapActions'] - const mapGetters: typeof import('pinia')['mapGetters'] - const mapState: typeof import('pinia')['mapState'] - const mapStores: typeof import('pinia')['mapStores'] - const mapWritableState: typeof import('pinia')['mapWritableState'] - const markRaw: typeof import('vue')['markRaw'] - const nextTick: typeof import('vue')['nextTick'] - const onActivated: typeof import('vue')['onActivated'] - const onBeforeMount: typeof import('vue')['onBeforeMount'] - const onBeforeRouteLeave: typeof import('vue-router')['onBeforeRouteLeave'] - const onBeforeRouteUpdate: typeof import('vue-router')['onBeforeRouteUpdate'] - const onBeforeUnmount: typeof import('vue')['onBeforeUnmount'] - const onBeforeUpdate: typeof import('vue')['onBeforeUpdate'] - const onDeactivated: typeof import('vue')['onDeactivated'] - const onErrorCaptured: typeof import('vue')['onErrorCaptured'] - const onMounted: typeof import('vue')['onMounted'] - const onRenderTracked: typeof import('vue')['onRenderTracked'] - const onRenderTriggered: typeof import('vue')['onRenderTriggered'] - const onScopeDispose: typeof import('vue')['onScopeDispose'] - const onServerPrefetch: typeof import('vue')['onServerPrefetch'] - const onUnmounted: typeof import('vue')['onUnmounted'] - const onUpdated: typeof import('vue')['onUpdated'] - const provide: typeof import('vue')['provide'] - const reactive: typeof import('vue')['reactive'] - const readonly: typeof import('vue')['readonly'] - const ref: typeof import('vue')['ref'] - const removeLocal: typeof import('./src/utils/local')['removeLocal'] - const request: typeof import('./src/utils/request')['default'] - const resolveComponent: typeof import('vue')['resolveComponent'] - const setActivePinia: typeof import('pinia')['setActivePinia'] - const setLocal: typeof import('./src/utils/local')['setLocal'] - const setMapStoreSuffix: typeof import('pinia')['setMapStoreSuffix'] - const shallowReactive: typeof import('vue')['shallowReactive'] - const shallowReadonly: typeof import('vue')['shallowReadonly'] - const shallowRef: typeof import('vue')['shallowRef'] - const storeToRefs: typeof import('pinia')['storeToRefs'] - const stores: typeof import('./src/stores/index')['default'] - const toRaw: typeof import('vue')['toRaw'] - const toRef: typeof import('vue')['toRef'] - const toRefs: typeof import('vue')['toRefs'] - const triggerRef: typeof import('vue')['triggerRef'] - const unref: typeof import('vue')['unref'] - const useAttrs: typeof import('vue')['useAttrs'] - const useCssModule: typeof import('vue')['useCssModule'] - const useCssVars: typeof import('vue')['useCssVars'] - const useLink: typeof import('vue-router')['useLink'] - const useRoute: typeof import('vue-router')['useRoute'] - const useRouter: typeof import('vue-router')['useRouter'] - const useSlots: typeof import('vue')['useSlots'] - const watch: typeof import('vue')['watch'] - const watchEffect: typeof import('vue')['watchEffect'] - const watchPostEffect: typeof import('vue')['watchPostEffect'] - const watchSyncEffect: typeof import('vue')['watchSyncEffect'] -} -// for type re-export -declare global { - // @ts-ignore - export type { Component, ComponentPublicInstance, ComputedRef, InjectionKey, PropType, Ref, VNode } from 'vue' + } diff --git a/components.d.ts b/components.d.ts index 5690aee..dcb10ec 100644 --- a/components.d.ts +++ b/components.d.ts @@ -9,17 +9,12 @@ export {} declare module '@vue/runtime-core' { export interface GlobalComponents { - HelloWorld: typeof import('./src/components/HelloWorld.vue')['default'] - IconCommunity: typeof import('./src/components/icons/IconCommunity.vue')['default'] - IconDocumentation: typeof import('./src/components/icons/IconDocumentation.vue')['default'] - IconEcosystem: typeof import('./src/components/icons/IconEcosystem.vue')['default'] - IconSupport: typeof import('./src/components/icons/IconSupport.vue')['default'] - IconTooling: typeof import('./src/components/icons/IconTooling.vue')['default'] + HeaderTitle: typeof import('./src/components/HeaderTitle.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SelectItem: typeof import('./src/components/selectStyle/selectItem.vue')['default'] SvgIcon: typeof import('./src/components/SvgIcon/index.vue')['default'] - TheWelcome: typeof import('./src/components/TheWelcome.vue')['default'] - WelcomeItem: typeof import('./src/components/WelcomeItem.vue')['default'] + VanSwipe: typeof import('vant/es')['Swipe'] + VanSwipeItem: typeof import('vant/es')['SwipeItem'] } } diff --git a/src/assets/images/entry_bg.png b/src/assets/images/entry_bg.png new file mode 100644 index 0000000..944e929 Binary files /dev/null and b/src/assets/images/entry_bg.png differ diff --git a/src/assets/images/female.png b/src/assets/images/female.png new file mode 100644 index 0000000..0fec1dc Binary files /dev/null and b/src/assets/images/female.png differ diff --git a/src/assets/images/login_bg.png b/src/assets/images/login_bg.png new file mode 100644 index 0000000..d28ae7d Binary files /dev/null and b/src/assets/images/login_bg.png differ diff --git a/src/assets/images/male.png b/src/assets/images/male.png new file mode 100644 index 0000000..4e9873d Binary files /dev/null and b/src/assets/images/male.png differ diff --git a/src/assets/images/sginup_bg.png b/src/assets/images/sginup_bg.png new file mode 100644 index 0000000..5713550 Binary files /dev/null and b/src/assets/images/sginup_bg.png differ diff --git a/src/assets/images/stylist_bg.png b/src/assets/images/stylist_bg.png new file mode 100644 index 0000000..fecffd2 Binary files /dev/null and b/src/assets/images/stylist_bg.png differ diff --git a/src/assets/images/workshop/posture/posture_1.png b/src/assets/images/workshop/posture/posture_1.png new file mode 100644 index 0000000..dc0cf81 Binary files /dev/null and b/src/assets/images/workshop/posture/posture_1.png differ diff --git a/src/assets/images/workshop/posture/posture_2.png b/src/assets/images/workshop/posture/posture_2.png new file mode 100644 index 0000000..f94e3c4 Binary files /dev/null and b/src/assets/images/workshop/posture/posture_2.png differ diff --git a/src/assets/images/workshop/posture/posture_3.png b/src/assets/images/workshop/posture/posture_3.png new file mode 100644 index 0000000..70cbe54 Binary files /dev/null and b/src/assets/images/workshop/posture/posture_3.png differ diff --git a/src/assets/images/workshop/posture/posture_4.png b/src/assets/images/workshop/posture/posture_4.png new file mode 100644 index 0000000..acfd7d9 Binary files /dev/null and b/src/assets/images/workshop/posture/posture_4.png differ diff --git a/src/assets/main.css b/src/assets/main.css index 14121af..78bb472 100644 --- a/src/assets/main.css +++ b/src/assets/main.css @@ -17,6 +17,14 @@ a, } } +.safe-area-top { + padding-top: constant(safe-area-inset-top); + padding-top: env(safe-area-inset-top); +} +.safe-area-bottom{ + padding-bottom: constant(safe-area-inset-bottom); + padding-bottom: env(safe-area-inset-bottom); +} /* @media (min-width: 1024px) { body { display: flex; diff --git a/src/main.ts b/src/main.ts index 0901b59..ed8dfe2 100644 --- a/src/main.ts +++ b/src/main.ts @@ -7,6 +7,7 @@ import 'normalize.css/normalize.css' import './assets/css/style.css' import SvgIcon from "@/components/SvgIcon/index.vue"; import "virtual:svg-icons-register"; +import 'vant/lib/index.css' import flexible from "./utils/flexible.js"; diff --git a/src/router/index.ts b/src/router/index.ts index 89d96ed..98d15b3 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -1,51 +1,85 @@ import { createRouter, createWebHistory } from 'vue-router' const router = createRouter({ history: createWebHistory('/'), -// history: createWebHistory(import.meta.env.VITE_APP_URL), + // history: createWebHistory(import.meta.env.VITE_APP_URL), routes: [ { - path: '/', - redirect: "/workshop", - }, - { - path: '/workshop', - name: 'Workshop', - component: () => import('../views/Workshop/index.vue'), - children: [ - // { - // path: '', - // name: 'activitiesWorkshop', - // redirect: "/activities/workshop", - // }, + path: '/', + redirect: '/workshop' + }, + { + path: '/login', + component: () => import('@/views/login/LoginPage.vue') + }, + { + path: '/signup', + component: () => import('@/views/login/SignupPage.vue') + }, + { path: '/welcome', component: () => import('@/views/login/WelcomePage.vue') }, + { + path: '/stylist', + component: () => import('@/views/stylist/index.vue') + }, + { + path: '/workshop', + name: 'Workshop', + component: () => import('../views/Workshop/index.vue'), + children: [ + // { + // path: '', + // name: 'activitiesWorkshop', + // redirect: "/activities/workshop", + // }, - { - path: '/workshop/selectStyle', - name: 'SelectStyle', - component: () => import('../views/Workshop/selectStyle.vue'), - }, - { - path: '/workshop/selectModel', - name: 'SelectModel', - component: () => import('../views/Workshop/selectModel.vue'), - }, - { - path: '/workshop/selectModelContinue', - name: 'SelectModelContinue', - component: () => import('../views/Workshop/selectModelContinue.vue'), - }, - - { - path: '/workshop/uploadFace', - name: 'uploadFace', - component: () => import('../views/Workshop/uploadFace/index.vue'), - }, - { - path: '/workshop/customize', - name: 'customize', - component: () => import('../views/Workshop/customize/index.vue'), - }, - ] - }, + { + path: '/workshop/selectStyle', + name: 'SelectStyle', + component: () => import('../views/Workshop/selectStyle.vue') + }, + { + path: '/workshop/selectModel', + name: 'SelectModel', + component: () => import('../views/Workshop/selectModel.vue') + }, + { + path: '/workshop/selectModelContinue', + name: 'SelectModelContinue', + component: () => import('../views/Workshop/selectModelContinue.vue') + }, + {// 上传照片 + path: '/workshop/uploadFace', + name: 'uploadFace', + component: () => import('../views/Workshop/uploadFace/index.vue'), + }, + {// 自定义创作 + path: '/workshop/customize', + name: 'customize', + component: () => import('../views/Workshop/customize/index.vue'), + children: [ + { + path: '/workshop/customize/home', + name: 'customizeHome', + component: () => import('../views/Workshop/customize/home.vue'), + }, + { + path: '/workshop/customize/library', + name: 'customizeLibrary', + component: () => import('../views/Workshop/customize/library.vue'), + }, + { + path: '/workshop/customize/creation', + name: 'customizeCreation', + component: () => import('../views/Workshop/customize/creation.vue'), + }, + ], + }, + {// 完成创建 + path: '/workshop/end', + name: 'end', + component: () => import('../views/Workshop/end/index.vue'), + }, + ] + } ] }) diff --git a/src/views/Workshop/customize/creation.vue b/src/views/Workshop/customize/creation.vue new file mode 100644 index 0000000..6bdd2d0 --- /dev/null +++ b/src/views/Workshop/customize/creation.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/views/Workshop/customize/home.vue b/src/views/Workshop/customize/home.vue index 14983fb..25dcd1b 100644 --- a/src/views/Workshop/customize/home.vue +++ b/src/views/Workshop/customize/home.vue @@ -1,58 +1,23 @@ diff --git a/src/views/Workshop/customize/index.vue b/src/views/Workshop/customize/index.vue index 12e9e09..7969760 100644 --- a/src/views/Workshop/customize/index.vue +++ b/src/views/Workshop/customize/index.vue @@ -1,20 +1,30 @@ @@ -23,61 +33,25 @@ --header-title-color: #fff; --header-title-background: #000; } - .session { + .link { width: 100%; - position: relative; - color: #000; - display: flex; - flex-direction: column; - align-items: center; - > .link { - padding: 2rem 5.4rem 0; - width: 100%; - > span { - font-family: satoshiRegular; - font-size: 3rem; - vertical-align: middle; - text-decoration: underline; - text-underline-offset: 0.8rem; - margin-right: 4.4rem; - } - } - > .title { - margin-top: 5.4rem; - font-family: satoshiBold; - font-size: 8.4rem; - text-align: center; - line-height: 124%; - } - > .tip { - margin-top: 0.56rem; + padding: 2rem 5.4rem 0; + > span { font-family: satoshiRegular; - font-size: 3.74rem; - line-height: 124%; - } - > .picture { - margin: 7.8rem 0; - width: 65.3rem; - height: 86.5rem; - border-radius: 1rem; - backdrop-filter: blur(5.27rem); - box-shadow: 1.9rem 2.3rem 1.66rem 0.23rem -0.3rem 0.23rem #36180c40; - border: 0.439rem solid #fff; - // border-image: linear-gradient(90deg,#BF926E94, #ffffff) 1; - display: flex; - align-items: center; - justify-content: center; - > img { - width: 58.9rem; - height: 79.2rem; - border-radius: 1rem; - border: 0.2rem solid #d9d9d9; - object-fit: contain; - } - } - > .btns { + font-size: 3rem; + vertical-align: middle; + text-decoration: underline; + text-underline-offset: 0.8rem; + margin-right: 4.4rem; } } + .session { + margin-top: 5.6rem; + width: 100%; + height: 155rem; + overflow: hidden; + padding: 0 2.5rem; + } .footer { position: fixed; width: 100%; diff --git a/src/views/Workshop/customize/library.vue b/src/views/Workshop/customize/library.vue new file mode 100644 index 0000000..f43280b --- /dev/null +++ b/src/views/Workshop/customize/library.vue @@ -0,0 +1,134 @@ + + + + + diff --git a/src/views/Workshop/end/index.vue b/src/views/Workshop/end/index.vue new file mode 100644 index 0000000..3cee985 --- /dev/null +++ b/src/views/Workshop/end/index.vue @@ -0,0 +1,97 @@ + + + + + diff --git a/src/views/Workshop/uploadFace/index.vue b/src/views/Workshop/uploadFace/index.vue index 78881aa..bd16636 100644 --- a/src/views/Workshop/uploadFace/index.vue +++ b/src/views/Workshop/uploadFace/index.vue @@ -1,8 +1,8 @@ diff --git a/src/views/login/LoginPage.vue b/src/views/login/LoginPage.vue new file mode 100644 index 0000000..678c013 --- /dev/null +++ b/src/views/login/LoginPage.vue @@ -0,0 +1,445 @@ + + + + + diff --git a/src/views/login/SignupPage.vue b/src/views/login/SignupPage.vue new file mode 100644 index 0000000..10899af --- /dev/null +++ b/src/views/login/SignupPage.vue @@ -0,0 +1,397 @@ + + + + + diff --git a/src/views/login/WelcomePage.vue b/src/views/login/WelcomePage.vue new file mode 100644 index 0000000..59534a0 --- /dev/null +++ b/src/views/login/WelcomePage.vue @@ -0,0 +1,63 @@ + + + + + diff --git a/src/views/stylist/index.vue b/src/views/stylist/index.vue new file mode 100644 index 0000000..413a163 --- /dev/null +++ b/src/views/stylist/index.vue @@ -0,0 +1,256 @@ + + + + + diff --git a/vite.config.ts b/vite.config.ts index 4a8153e..128a084 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -19,13 +19,9 @@ export default defineConfig({ // ... AutoImport({ resolvers: [VantResolver()], - imports: ['vue', 'vue-router', 'pinia'], - dts: true, - dirs: ['src/stores', 'src/utils'] }), Components({ resolvers: [VantResolver()], - dts: false }), createSvgIconsPlugin({ // 指定需要缓存的图标文件夹