Redefine the styling experience with AI.
-Use Styling Angel to speed up your fashion journey.
+Unlock personalized styling insights.
+Enter a client profile to begin curating their next look with Styling Angel.
diff --git a/src/assets/images/female_thumb.png b/src/assets/images/female_thumb.png new file mode 100644 index 0000000..7e8f324 Binary files /dev/null and b/src/assets/images/female_thumb.png differ diff --git a/src/assets/images/male_thumb.png b/src/assets/images/male_thumb.png new file mode 100644 index 0000000..7c6092a Binary files /dev/null and b/src/assets/images/male_thumb.png differ diff --git a/src/router/index.ts b/src/router/index.ts index f5ecdf9..307d257 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -1,16 +1,16 @@ import { createRouter, createWebHistory } from 'vue-router' import { useGenerateStore } from '@/stores/modules/generate' const VerifyIDs = (num: number) => { - return true + return true const ids = [ - !!useGenerateStore().customerId, - !!useGenerateStore().visitRecordId, - !!useGenerateStore().styleId, - // !!useGenerateStore().modelPhotoId, - true, - !!useGenerateStore().originalTryOnId, - ]; - return ids.splice(0, num).every(id => id) ? true : "/stylist/customer"; + !!useGenerateStore().customerId, + !!useGenerateStore().visitRecordId, + !!useGenerateStore().styleId, + // !!useGenerateStore().modelPhotoId, + true, + !!useGenerateStore().originalTryOnId + ] + return ids.splice(0, num).every((id) => id) ? true : '/stylist/customer' } /** @@ -18,7 +18,7 @@ const VerifyIDs = (num: number) => { * 1. 设置路由的meta属性为{ cache: true },表示需要缓存 * 2. App.vue中使用RouteCache组件,通过路由的name来进行匹配 * 3. 路由的name默认是文件名,如果文件名与name不一致,通过defineOptions({ name: 'componentName' })来设置 - * + * * 自定义验证规则: * meta:{ verify: ()=> boolean || string } * 1. boolean true 跳转 false 不跳转 @@ -48,8 +48,8 @@ const router = createRouter({ component: () => import('@/views/login/LoginPage.vue') }, { - path:'/reset', - name:'ResetPage', + path: '/reset', + name: 'ResetPage', component: () => import('@/views/login/ResetPage.vue') }, { @@ -62,16 +62,16 @@ const router = createRouter({ name: 'WelcomePage', component: () => import('@/views/login/WelcomePage.vue') }, - { - path: '/customer', - name: 'customer', - component: () => import('@/views/login/customer.vue'), - }, + { + path: '/customer', + name: 'customer', + component: () => import('@/views/login/customer.vue') + }, { path: '/asistant', name: 'asistant', component: () => import('../views/asistant/index.vue'), - meta: { cache: true, verify: ()=> VerifyIDs(2) } + meta: { cache: true, verify: () => VerifyIDs(2) } }, { path: '/workshop', @@ -82,115 +82,114 @@ const router = createRouter({ // path: '/workshop', // redirect: '/workshop/selectStyle' // }, - { - path: '/workshop/home', - name: 'Home', - component: () => import('@/views/Workshop/home.vue') - }, - { - path: '/workshop/homeNav', - name: 'HomeNav', - component: () => import('@/views/Workshop/homeNav.vue') - }, - { - path: '/workshop/stylist', - name: 'StylistPage', - redirect: '/workshop/stylist/index', - component: () => import('@/views/stylist/container.vue'), - children: [ - { - path: 'index', - name: 'index', - component: () => import('@/views/stylist/index.vue'), - meta: { verify: ()=> VerifyIDs(2) } - }, - { - path: 'sex', - name: 'sex', - component: () => import('@/views/stylist/sex.vue'), - meta: { verify: ()=> VerifyIDs(2) } - }, - { - path: 'dressfor', - name: 'dressfor', - component: () => import('@/views/stylist/dressfor.vue'), - meta: { verify: ()=> VerifyIDs(2) } - }, - - ] - }, + { + path: '/workshop/home', + name: 'Home', + component: () => import('@/views/Workshop/home.vue') + }, + { + path: '/workshop/homeNav', + name: 'HomeNav', + component: () => import('@/views/Workshop/homeNav.vue') + }, + { + path: '/workshop/stylist', + name: 'StylistPage', + redirect: '/workshop/stylist/index', + component: () => import('@/views/stylist/container.vue'), + children: [ + { + path: 'index', + name: 'index', + component: () => import('@/views/stylist/index.vue'), + meta: { verify: () => VerifyIDs(2) } + }, + { + path: 'sex', + name: 'sex', + component: () => import('@/views/stylist/sex.vue'), + meta: { verify: () => VerifyIDs(2) } + }, + { + path: 'dressfor', + name: 'dressfor', + component: () => import('@/views/stylist/dressfor.vue'), + meta: { verify: () => VerifyIDs(2) } + } + ] + }, { path: '/workshop/selectStyle', name: 'selectStyle', component: () => import('../views/Workshop/selectStyle.vue'), - meta: { verify: ()=> VerifyIDs(2) } + meta: { verify: () => VerifyIDs(2) } }, { path: '/workshop/selectModel', name: 'SelectModel', component: () => import('../views/Workshop/selectModel.vue'), - meta: { verify: ()=> VerifyIDs(3) } + meta: { verify: () => VerifyIDs(3) } }, { path: '/workshop/product', name: 'product', component: () => import('../views/Workshop/product.vue'), - meta: { verify: ()=> VerifyIDs(4) } + meta: { verify: () => VerifyIDs(4) } }, { // 推荐try on path: '/workshop/recommended', name: 'recommended', component: () => import('../views/Workshop/recommended.vue'), - meta: { verify: ()=> VerifyIDs(5) } + meta: { verify: () => VerifyIDs(5) } }, { // 上传照片1 path: '/workshop/uploadFace', name: 'uploadFace', component: () => import('../views/Workshop/uploadFace1.vue'), - meta: { verify: ()=> VerifyIDs(5) } + meta: { verify: () => VerifyIDs(5) } }, { // 上传照片2 path: '/workshop/uploadFace2', name: 'uploadFace2', component: () => import('../views/Workshop/uploadFace2.vue'), - meta: { verify: ()=> VerifyIDs(5) } + meta: { verify: () => VerifyIDs(5) } }, { // 自定义创作 path: '/workshop/customize', name: 'customize', component: () => import('../views/Workshop/customize.vue'), - meta: { verify: ()=> VerifyIDs(5) } + meta: { verify: () => VerifyIDs(5) } }, { // library path: '/workshop/library', name: 'library', component: () => import('../views/Workshop/library.vue'), - meta: { verify: ()=> VerifyIDs(2) } + meta: { verify: () => VerifyIDs(2) } }, { path: '/workshop/profile', name: 'profile', component: () => import('../views/Workshop/profile.vue'), - meta: { verify: ()=> VerifyIDs(1) } + meta: { verify: () => VerifyIDs(1) } }, { // creation path: '/workshop/creation', name: 'creation', component: () => import('../views/Workshop/creation/index.vue'), - meta: { verify: ()=> VerifyIDs(2) } + meta: { verify: () => VerifyIDs(2) } }, { // 完成创建 path: '/workshop/end', name: 'end', component: () => import('../views/Workshop/end.vue'), - meta: { verify: ()=> VerifyIDs(2) } + meta: { verify: () => VerifyIDs(2) } } ] } diff --git a/src/stores/modules/userInfo.ts b/src/stores/modules/userInfo.ts index 6e2d8bf..3ce85a0 100644 --- a/src/stores/modules/userInfo.ts +++ b/src/stores/modules/userInfo.ts @@ -9,7 +9,8 @@ export const useUserInfoStore = defineStore('userInfo', () => { token: '', generateParams: { stylist: '', - sex: '' + sex: '', + stylistImage: '' } }) @@ -37,7 +38,8 @@ export const useUserInfoStore = defineStore('userInfo', () => { const resetGenerateParams = () => { state.value.generateParams = { stylist: '', - sex: '' + sex: '', + stylistImage: '' } } diff --git a/src/views/Workshop/creation/creation-list.vue b/src/views/Workshop/creation/creation-list.vue index 0292fec..b5cc31d 100644 --- a/src/views/Workshop/creation/creation-list.vue +++ b/src/views/Workshop/creation/creation-list.vue @@ -26,6 +26,8 @@ emit('view-type', 1) }) const list = reactive([]) + const size = ref(10) + const page = computed(() => Math.ceil(list.length / size.value) + 1) const loading = ref(false) const finish = ref(false) const selectCount = computed(() => list.filter((v) => v.selected).length) @@ -44,20 +46,25 @@ navLst.forEach((v) => { if (v.flowType === query.value.active) navActive.value = v.value }) - + const clickNav = (v) => { if (v.value === navActive.value || loading.value) return navActive.value = v.value - onLoad() + onBackChooseSave() + onLoad('reload') } - const onLoad = () => { + const onLoad = (type?: 'reload') => { + if (type === 'reload') { + finish.value = false + list.splice(0, list.length) + } loading.value = true - finish.value = false - list.splice(0, list.length) const params = { customerId: generateStore.customerId, type: navActive.value, - isLibrary: false + isLibrary: false, + pageNum: page.value, + pageSize: size.value } if (props.isChooseOne) { params['visitRecordId'] = '' @@ -68,8 +75,8 @@ params['visitRecordId'] = generateStore.visitRecordId } getGenerateHistoricals(params) - .then((data) => { - data?.forEach((v) => { + .then((data: any) => { + data.records?.forEach((v) => { const obj = { // tryOnId: v.tryOnId, tryOnUrl: v.tryOnUrl, @@ -86,7 +93,7 @@ list.push(obj) }) loading.value = false - finish.value = true + finish.value = !data.hasNext }) .catch((err) => { console.error(err) @@ -229,11 +236,11 @@ hGenerateStore.originalTryOn.id = selectedItem.id hGenerateStore.originalTryOn.tryOnUrl = selectedItem.tryOnUrl hGenerateStore.originalTryOn.isLike = selectedItem.isFavorite - hGenerateStore.style.id = ''; + hGenerateStore.style.id = '' hGenerateStore.style.url = selectedItem.styleUrl } else { // style - hGenerateStore.style.id = selectedItem.id; + hGenerateStore.style.id = selectedItem.id hGenerateStore.style.url = selectedItem.url // selectedItem.isFavorite } @@ -262,7 +269,14 @@
+ Redefine the styling experience with AI.
-Use Styling Angel to speed up your fashion journey.
+
+ Experience our personalised styling journey with
+
+ Lane Crawford.
+
Redefine the styling experience with AI.
-Use Styling Angel to speed up your fashion journey.
+
+ Experience our personalised styling journey with
+
+ Lane Crawford.
+
Redefine the styling experience with AI.
-Use Styling Angel to speed up your fashion journey.
+Start my personalised styling journey with Lane Crawford.
Redefine the styling experience with AI.
+
+ Experience our personalised styling journey with
+
+ Lane Crawford.
+
Redefine the styling experience with AI.
-Use Styling Angel to speed up your fashion journey.
+Unlock personalized styling insights.
+Enter a client profile to begin curating their next look with Styling Angel.