Merge branches 'master' and 'master' of https://gitee.com/lvYeJu/lane-crawford-3
3
src/assets/icons/Return.svg
Normal file
@@ -0,0 +1,3 @@
|
||||
<svg width="22" height="34" viewBox="0 0 22 34" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M22 31.2213L18.728 34L0.906497 18.856C0.619223 18.6133 0.391239 18.3248 0.235665 18.0069C0.0800915 17.6891 -2.93095e-08 17.3482 -2.87279e-08 17.0039C-2.81463e-08 16.6597 0.0800915 16.3188 0.235665 16.001C0.391239 15.6831 0.619223 15.3946 0.906497 15.1519L18.728 0L21.9969 2.77872L5.27014 17L22 31.2213Z" fill="black"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 431 B |
4
src/assets/icons/add.svg
Normal file
@@ -0,0 +1,4 @@
|
||||
<svg width="39" height="38" viewBox="0 0 39 38" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M8.125 19H30.875" stroke="#989898" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M19.5 7.91699V30.0837" stroke="#989898" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 328 B |
3
src/assets/icons/confirmation.svg
Normal file
@@ -0,0 +1,3 @@
|
||||
<svg width="31" height="22" viewBox="0 0 31 22" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M2 11L11 20L29 2" stroke="#989898" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 213 B |
5
src/assets/icons/delete.svg
Normal file
@@ -0,0 +1,5 @@
|
||||
<svg width="39" height="38" viewBox="0 0 39 38" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M30.875 9.5V31.6667C30.875 32.5065 30.5326 33.312 29.9231 33.9058C29.3136 34.4997 28.487 34.8333 27.625 34.8333H11.375C10.513 34.8333 9.6864 34.4997 9.0769 33.9058C8.46741 33.312 8.125 32.5065 8.125 31.6667V9.5" stroke="#989898" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M4.875 9.5H34.125" stroke="#989898" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M13 9.50033V6.33366C13 5.49381 13.3424 4.68835 13.9519 4.09449C14.5614 3.50062 15.388 3.16699 16.25 3.16699H22.75C23.612 3.16699 24.4386 3.50062 25.0481 4.09449C25.6576 4.68835 26 5.49381 26 6.33366V9.50033" stroke="#989898" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 818 B |
3
src/assets/icons/like.svg
Normal file
@@ -0,0 +1,3 @@
|
||||
<svg width="32" height="28" viewBox="0 0 32 28" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M0.166748 9.04153C0.16678 7.2796 0.701271 5.55912 1.69963 4.10733C2.69798 2.65554 4.11323 1.54074 5.75846 0.910159C7.40369 0.279582 9.2015 0.162897 10.9144 0.575513C12.6274 0.98813 14.1749 1.91064 15.3525 3.22119C15.4354 3.30988 15.5357 3.38059 15.6471 3.42893C15.7585 3.47727 15.8787 3.50221 16.0001 3.50221C16.1215 3.50221 16.2416 3.47727 16.353 3.42893C16.4644 3.38059 16.5647 3.30988 16.6477 3.22119C17.8216 1.90212 19.3694 0.971859 21.0852 0.554229C22.8009 0.1366 24.6031 0.251409 26.252 0.883376C27.9008 1.51534 29.3181 2.63449 30.3152 4.09187C31.3123 5.54925 31.8418 7.27573 31.8334 9.04153C31.8334 12.6674 29.4584 15.3749 27.0834 17.7499L18.3877 26.1621C18.0927 26.501 17.729 26.7731 17.3207 26.9606C16.9123 27.148 16.4688 27.2465 16.0195 27.2493C15.5703 27.2521 15.1255 27.1594 14.7149 26.9771C14.3042 26.7948 13.937 26.5273 13.6377 26.1922L4.91675 17.7499C2.54175 15.3749 0.166748 12.6832 0.166748 9.04153Z" fill="#FF4949"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
9
src/assets/icons/modelSelected.svg
Normal file
@@ -0,0 +1,9 @@
|
||||
<svg width="60" height="60" viewBox="0 0 60 60" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<rect width="60" height="60" fill="url(#pattern0_1_2934)"/>
|
||||
<defs>
|
||||
<pattern id="pattern0_1_2934" patternContentUnits="objectBoundingBox" width="1" height="1">
|
||||
<use xlink:href="#image0_1_2934" transform="scale(0.0111111)"/>
|
||||
</pattern>
|
||||
<image id="image0_1_2934" width="90" height="90" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAABaCAYAAAA4qEECAAAACXBIWXMAAAsTAAALEwEAmpwYAAAETUlEQVR4nO2dS2jVRxSHv9a0SbGtm4JGhVpS10KtqypKSCsBS+3CFtIH9UnBglYRdSG4M2YlAbsSuuo2TZuFortuFGtJE+HSLrRdtBbNy66aQuKRgRMIITfexzzO/3/ng98m3DuZ+THMzDnzuJDJZDKZTCaTyWQymZpZBWwDDgIDwDAwDtwDpoH/VdP6t3H9zEX9zttaRmYZNgLHgRHgX0Ca1GPgR+AYsIEW5yXgM+AGMO/B3GqaA64DnwIdtBAva0/7O6C51fQIOA+socS8AJwCphIYvFSuDie1TqViB3DXgMFL9RvQQwlwY+Jl4IkBU6vJ1W0QaKegbAJuGTBSatQvwJsUjB5PyzSJLLcs7KYgfAj8Z8A0aVAuGPoY4xwJvCaWSHJtOIxR9mpwkNok8Wj2RxjDjWuzBsyRAMPIexhhc0EnPqljguxKbXK7Louk5LqTep192YAJEkkuqEkWVluO+MSzXFt3xja5DRgz0HiJrLuxE1GnDDRaEunrmPnkSQMNlkSaVA+Cc9pAYyWxXC47eNrzgYGGSmL9o1txwfjcQCPFiPpCGn3DQAPFiK6GPBJQhszcrM4z61SnNadRbzkugdYZwujjJTG5d5m2nWmwvK9CGD1iwChpQq7Xvl+lbWsbLHPIt8nuiNVMSU12rG+w3Bnfx8+2GTBLPA8XiznbRPlbfRp9sMQm9za5abHfp9EDBkwTz8OFY7eHjeQLPo3+wYBxYtBk7xNikVKisxGGi8Ua9Wn0nwYMFGM9eUH3fRpt4QSoGDTZacKn0Y2EqK1gsugQZNLon4AvNXz9uYBjclCjfe2ofAc8t2Tv8UqBTfY+dPzhqVKblin7+QbNtmCy98nQx/JuHnixSvn1mm3FZO/Lu2FPlepe4X/UarYlk70HLL5C8N+B15ow25rJTv1Wk0oV3dmohpssvzG2hFtJX1hOk47V2bMt9uQFvWU98V+psWdb7clBEv/o3WpJ0LO3GO3JQbay0GvFksBsqyY7HSUA6wPeUak8YxixNFwsaK6BOtfM9YAVr9RR8dQmBz1Agz77IInN3m3A5OBHwjoiPP9QWcFsKyYHP+QY6xD6mB5qWcweQ1fsThCBVyLtuDwEzmnk9a2hc38uLbqaSJw00GBJJLfMjYZL2P9qoNFS9stCju35+ls8Bg0YIJF0iYS06/VdKblur7A7FI0uvZguJdUM8AZG2GUkkBDPcinadzHGByV8GGUfRjlsKLCQJuQ6zCGMs7fgw8isxSd+qtFd0AlyRuebQvE6cNOAeVKj7lh40qeZdfag8QjyiQYjydfJvsL1MQOmLpWr0zuUjDZ9VGTCgMETmoVzdSotq7WRfyUw+KE+1P0qLUQH8AlwLXCgM6cbqX2t9vT8cnTqDYDv9dcomjV3Wss6GvJIQNFZpefZDuhJzSE9g3xPt9AWfh5kSv82qp/p11us7rv550EymUwmk8lkMplMhhp5CqaIor9P1Mi+AAAAAElFTkSuQmCC"/>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
23
src/assets/icons/update.svg
Normal file
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Capa_1" x="0px" y="0px" viewBox="0 0 512.016 512.016" style="enable-background:new 0 0 512.016 512.016;" xml:space="preserve" width="512" height="512">
|
||||
<g>
|
||||
<path d="M256.008,42.675c57.16,0.188,111.87,23.233,151.936,64h-66.603c-11.782,0-21.333,9.551-21.333,21.333 s9.551,21.333,21.333,21.333h88.384c21.874-0.012,39.604-17.742,39.616-39.616V21.341c0-11.782-9.551-21.333-21.333-21.333 s-21.333,9.551-21.333,21.333v44.331C321.782-28.795,160.169-20.343,65.702,84.55C28.733,125.6,6.058,177.523,1.075,232.541 c-1.096,11.814,7.593,22.279,19.407,23.375c0.64,0.059,1.283,0.09,1.927,0.092c10.813,0.138,19.954-7.977,21.099-18.731 C53.35,127.213,145.505,42.82,256.008,42.675z"/>
|
||||
<path d="M489.629,256.008c-10.813-0.138-19.954,7.977-21.099,18.731C458.35,391.953,355.076,478.721,237.861,468.54 c-50.715-4.405-98.176-26.825-133.789-63.199h66.603c11.782,0,21.333-9.551,21.333-21.333c0-11.782-9.551-21.333-21.333-21.333 H82.291c-21.868-0.012-39.604,17.706-39.616,39.573c0,0.014,0,0.028,0,0.043v88.384c0,11.782,9.551,21.333,21.333,21.333 s21.333-9.551,21.333-21.333v-44.331c104.893,94.467,266.505,86.015,360.972-18.878c36.97-41.05,59.645-92.973,64.628-147.992 c1.096-11.814-7.593-22.279-19.407-23.375C490.901,256.041,490.265,256.01,489.629,256.008z"/>
|
||||
</g>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
BIN
src/assets/images/workshop/bg/end_bg.png
Normal file
|
After Width: | Height: | Size: 2.4 MiB |
BIN
src/assets/images/workshop/bg/picture_bg.png
Normal file
|
After Width: | Height: | Size: 1.2 MiB |
BIN
src/assets/images/workshop/bg/upload_bg.png
Normal file
|
After Width: | Height: | Size: 2.1 MiB |
46
src/components/HeaderTitle.vue
Normal file
@@ -0,0 +1,46 @@
|
||||
<script setup lang="ts">
|
||||
import BackIcon from '@/assets/icons/back.svg'
|
||||
import { useRouter } from 'vue-router'
|
||||
const router = useRouter()
|
||||
|
||||
defineProps({
|
||||
title: { type: String, default: 'STYLING ANGEL' }
|
||||
})
|
||||
|
||||
defineEmits(['clickReturn'])
|
||||
|
||||
const handleClickReturn = () => {
|
||||
router.back()
|
||||
// emit('clickReturn')
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="header-title">
|
||||
<div class="return" @click="handleClickReturn"><SvgIcon name="Return" size="34" /></div>
|
||||
<span class="title">{{ title }}</span>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped lang="less">
|
||||
.header-title {
|
||||
width: 100%;
|
||||
height: var(--header-title-height, 9.9rem);
|
||||
background-color: var(--header-title-background, #000000);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
position: relative;
|
||||
> .return {
|
||||
position: absolute;
|
||||
left: 3.2rem;
|
||||
display: inline-block;
|
||||
--svg-icon-color: var(--header-title-color, #ffffff);
|
||||
}
|
||||
> .title {
|
||||
font-size: 4.8rem;
|
||||
color: var(--header-title-color, #ffffff);
|
||||
font-family: 'boskaRegular';
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -38,6 +38,7 @@ const svgClass = computed(() => {
|
||||
width: 1em;
|
||||
height: 1em;
|
||||
fill: currentColor;
|
||||
color: var(--svg-icon-color);
|
||||
}
|
||||
.c-svg {
|
||||
width: 100%;
|
||||
|
||||
121
src/components/selectStyle/selectItem.vue
Normal file
@@ -0,0 +1,121 @@
|
||||
<script setup lang="ts">
|
||||
import { onMounted, onUnmounted, reactive, toRefs } from "vue";
|
||||
const props = defineProps({
|
||||
selectList: {
|
||||
type: Array,
|
||||
default: () => [],
|
||||
} as any,
|
||||
})
|
||||
//const emit = defineEmits([
|
||||
//])
|
||||
let data = reactive({
|
||||
})
|
||||
|
||||
const setLike = (item,str)=>{
|
||||
if(str === 'like'){
|
||||
item.isLike = true
|
||||
}else{
|
||||
item.isLike = false
|
||||
}
|
||||
}
|
||||
|
||||
const addLibrary = (item,str)=>{
|
||||
if(str === 'add'){
|
||||
item.isAdd = true
|
||||
}else{
|
||||
item.isAdd = false
|
||||
}
|
||||
}
|
||||
|
||||
const deleteStyle = (index)=>{
|
||||
props.selectList.splice(index,1)
|
||||
}
|
||||
|
||||
const updateStyle = (item,index)=>{
|
||||
props.selectList[index] = {
|
||||
id:item.id,
|
||||
imgList:[
|
||||
'https://www.minio-api.aida.com.hk/aida-collection-element/83/Printboard/2cbd8c93-c759-4565-92ab-d066bc5f70a4.png?response-content-type=image%2Fpng&response-content-disposition=inline&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=admin%2F20251009%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20251009T025033Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=806fef8c43183a528cd2033226523abc4f7b4f69040cd8952294534a98f67c6a',
|
||||
'https://www.minio-api.aida.com.hk/aida-collection-element/83/Printboard/2cbd8c93-c759-4565-92ab-d066bc5f70a4.png?response-content-type=image%2Fpng&response-content-disposition=inline&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=admin%2F20251009%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20251009T025033Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=806fef8c43183a528cd2033226523abc4f7b4f69040cd8952294534a98f67c6a',
|
||||
'https://www.minio-api.aida.com.hk/aida-collection-element/83/Printboard/2cbd8c93-c759-4565-92ab-d066bc5f70a4.png?response-content-type=image%2Fpng&response-content-disposition=inline&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=admin%2F20251009%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20251009T025033Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=806fef8c43183a528cd2033226523abc4f7b4f69040cd8952294534a98f67c6a',
|
||||
'https://www.minio-api.aida.com.hk/aida-collection-element/83/Printboard/2cbd8c93-c759-4565-92ab-d066bc5f70a4.png?response-content-type=image%2Fpng&response-content-disposition=inline&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=admin%2F20251009%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20251009T025033Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=806fef8c43183a528cd2033226523abc4f7b4f69040cd8952294534a98f67c6a',
|
||||
],
|
||||
isLike: false,
|
||||
isAdd: false,
|
||||
}
|
||||
}
|
||||
|
||||
onMounted(()=>{
|
||||
})
|
||||
onUnmounted(()=>{
|
||||
})
|
||||
defineExpose({})
|
||||
const {} = toRefs(data);
|
||||
</script>
|
||||
<template>
|
||||
<div class="list">
|
||||
<div class="item" v-for="(item,index) in selectList" :key="item.id">
|
||||
<div class="imgBox">
|
||||
<img v-for="(img,index) in item?.imgList" :key="index" :src="img" alt="">
|
||||
</div>
|
||||
<div class="btn">
|
||||
<div>
|
||||
<SvgIcon v-if="!item.isLike" @click.stop="setLike(item,'like')" name="noLike" size="40" />
|
||||
<SvgIcon v-else name="like" @click.stop="setLike(item,'noLike')" color="#FF4949" size="40" />
|
||||
</div>
|
||||
<div>
|
||||
<SvgIcon @click.stop="updateStyle(item,index)" name="update" size="40" />
|
||||
</div>
|
||||
<div>
|
||||
<SvgIcon v-if="!item.isAdd" @click.stop="addLibrary(item,'add')" name="add" size="40" />
|
||||
<SvgIcon v-else @click.stop="addLibrary(item,'delete')" name="confirmation" size="40" />
|
||||
</div>
|
||||
<div>
|
||||
<SvgIcon @click.stop="deleteStyle(index)" name="delete" size="40" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
<style lang="less" scoped>
|
||||
.list{
|
||||
> .item{
|
||||
width: 100%;
|
||||
position: relative;
|
||||
margin-bottom: 5.8rem;
|
||||
height: 29rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
&:last-child{
|
||||
margin-bottom: 0;
|
||||
}
|
||||
> .imgBox{
|
||||
flex: 1;
|
||||
display: flex;
|
||||
height: 100%;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
> img{
|
||||
height: 26rem;
|
||||
object-fit: cover;
|
||||
// object-fit: contain;
|
||||
width: calc((100% - 1.4rem * 3) / 4);
|
||||
}
|
||||
}
|
||||
> .btn{
|
||||
margin-left: 7rem;
|
||||
> div{
|
||||
color: #989898;
|
||||
margin-bottom: 2.6rem;
|
||||
&:last-child{
|
||||
margin-bottom: 0;
|
||||
}
|
||||
&:hover{
|
||||
color: #000;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -7,6 +7,19 @@ const router = createRouter({
|
||||
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',
|
||||
@@ -22,21 +35,29 @@ const router = createRouter({
|
||||
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: '/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')
|
||||
}
|
||||
]
|
||||
})
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { getUniversalZoomLevel } from '@/utils/tools'
|
||||
|
||||
let flexible = (designWidth, maxWidth,minWidth) =>{
|
||||
let flexible = (designWidth) =>{
|
||||
var doc = document, win = window, docEl = doc.documentElement, remStyle = document.createElement("style"), tid;
|
||||
designWidth = designWidth || 1080;
|
||||
// maxWidth = maxWidth || 1920;
|
||||
@@ -19,7 +19,7 @@ let flexible = (designWidth, maxWidth,minWidth) =>{
|
||||
// }else{
|
||||
// designWidth = 375
|
||||
// }
|
||||
var rem = Math.round(width * 10 / designWidth);
|
||||
var rem = (width * 10 / designWidth).toFixed(2);
|
||||
docEl.style.fontSize = rem+'px'
|
||||
remStyle.innerHTML = 'html{font-size:' + rem + 'px;}';
|
||||
}
|
||||
|
||||
117
src/views/Workshop/customize/home.vue
Normal file
@@ -0,0 +1,117 @@
|
||||
<script setup lang="ts">
|
||||
import HeaderTitle from '@/components/HeaderTitle.vue'
|
||||
import { ref } from 'vue'
|
||||
const faceUrl = ref('')
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<header-title />
|
||||
<div class="session">
|
||||
<div class="link">
|
||||
<span>Home</span>
|
||||
<span>Library</span>
|
||||
</div>
|
||||
<div class="title">Customize your Look!</div>
|
||||
<p class="tip">Refine your Look</p>
|
||||
<!-- 照片 -->
|
||||
<div class="picture">
|
||||
<img :src="faceUrl" />
|
||||
</div>
|
||||
<div class="btns">
|
||||
<button @click="handleUploadFace">Re-try</button>
|
||||
<button @click="handleGenerate">Generate</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<button>Continue</button>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped lang="less">
|
||||
.header-title {
|
||||
--header-title-color: #fff;
|
||||
--header-title-background: #000;
|
||||
}
|
||||
.session {
|
||||
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;
|
||||
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 {
|
||||
}
|
||||
}
|
||||
.footer {
|
||||
position: fixed;
|
||||
width: 100%;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
height: 11.2rem;
|
||||
background-color: #000;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: flex-end;
|
||||
> button {
|
||||
width: 24.6rem;
|
||||
height: 5.9rem;
|
||||
border-radius: 0.7rem;
|
||||
box-sizing: content-box;
|
||||
border: 0.3rem solid #fff;
|
||||
background: transparent;
|
||||
font-family: satoshiRegular;
|
||||
font-weight: 400;
|
||||
font-size: 4rem;
|
||||
color: #fff;
|
||||
margin-right: 5rem;
|
||||
&:active {
|
||||
opacity: 0.7;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
108
src/views/Workshop/customize/index.vue
Normal file
@@ -0,0 +1,108 @@
|
||||
<script setup lang="ts">
|
||||
import HeaderTitle from '@/components/HeaderTitle.vue'
|
||||
import { ref } from 'vue'
|
||||
const faceUrl = ref('')
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<header-title />
|
||||
<div class="session">
|
||||
<div class="link">
|
||||
<span>Home</span>
|
||||
<span>Library</span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="footer">
|
||||
<button>Continue</button>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped lang="less">
|
||||
.header-title {
|
||||
--header-title-color: #fff;
|
||||
--header-title-background: #000;
|
||||
}
|
||||
.session {
|
||||
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;
|
||||
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 {
|
||||
}
|
||||
}
|
||||
.footer {
|
||||
position: fixed;
|
||||
width: 100%;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
height: 11.2rem;
|
||||
background-color: #000;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: flex-end;
|
||||
> button {
|
||||
width: 24.6rem;
|
||||
height: 5.9rem;
|
||||
border-radius: 0.7rem;
|
||||
box-sizing: content-box;
|
||||
border: 0.3rem solid #fff;
|
||||
background: transparent;
|
||||
font-family: satoshiRegular;
|
||||
font-weight: 400;
|
||||
font-size: 4rem;
|
||||
color: #fff;
|
||||
margin-right: 5rem;
|
||||
&:active {
|
||||
opacity: 0.7;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -23,5 +23,6 @@ const {} = toRefs(data);
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
font-family: 'satoshiRegular';
|
||||
}
|
||||
</style>
|
||||
129
src/views/Workshop/selectModel.vue
Normal file
@@ -0,0 +1,129 @@
|
||||
<script setup lang="ts">
|
||||
import { onMounted, onUnmounted, reactive, toRefs } from "vue";
|
||||
//const props = defineProps({
|
||||
//})
|
||||
//const emit = defineEmits([
|
||||
//])
|
||||
let data = reactive({
|
||||
modelList:
|
||||
[
|
||||
{
|
||||
id:1,
|
||||
imgUrl:'https://www.minio-api.aida.com.hk/aida-sys-image/models/female/2e4815b9-1191-419d-94ed-5771239ca4a5.png?response-content-type=image%2Fpng&response-content-disposition=inline&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=admin%2F20251009%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20251009T012922Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=e5bfc4ad3a9dbad5ea3bbe82a4ba9e081bcc14520269e7a1534bca30871774a4',
|
||||
},
|
||||
{
|
||||
id:2,
|
||||
imgUrl:'https://www.minio-api.aida.com.hk/aida-sys-image/models/female/2e4815b9-1191-419d-94ed-5771239ca4a5.png?response-content-type=image%2Fpng&response-content-disposition=inline&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=admin%2F20251009%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20251009T012922Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=e5bfc4ad3a9dbad5ea3bbe82a4ba9e081bcc14520269e7a1534bca30871774a4',
|
||||
},
|
||||
{
|
||||
id:3,
|
||||
imgUrl:'https://www.minio-api.aida.com.hk/aida-sys-image/models/female/2e4815b9-1191-419d-94ed-5771239ca4a5.png?response-content-type=image%2Fpng&response-content-disposition=inline&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=admin%2F20251009%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20251009T012922Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=e5bfc4ad3a9dbad5ea3bbe82a4ba9e081bcc14520269e7a1534bca30871774a4',
|
||||
},
|
||||
{
|
||||
id:4,
|
||||
imgUrl:'https://www.minio-api.aida.com.hk/aida-sys-image/models/female/2e4815b9-1191-419d-94ed-5771239ca4a5.png?response-content-type=image%2Fpng&response-content-disposition=inline&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=admin%2F20251009%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20251009T012922Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=e5bfc4ad3a9dbad5ea3bbe82a4ba9e081bcc14520269e7a1534bca30871774a4',
|
||||
},
|
||||
{
|
||||
id:5,
|
||||
imgUrl:'https://www.minio-api.aida.com.hk/aida-sys-image/models/female/2e4815b9-1191-419d-94ed-5771239ca4a5.png?response-content-type=image%2Fpng&response-content-disposition=inline&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=admin%2F20251009%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20251009T012922Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=e5bfc4ad3a9dbad5ea3bbe82a4ba9e081bcc14520269e7a1534bca30871774a4',
|
||||
},
|
||||
{
|
||||
id:6,
|
||||
imgUrl:'https://www.minio-api.aida.com.hk/aida-sys-image/models/female/2e4815b9-1191-419d-94ed-5771239ca4a5.png?response-content-type=image%2Fpng&response-content-disposition=inline&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=admin%2F20251009%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20251009T012922Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=e5bfc4ad3a9dbad5ea3bbe82a4ba9e081bcc14520269e7a1534bca30871774a4',
|
||||
},
|
||||
|
||||
],
|
||||
selectedModelId: null,
|
||||
})
|
||||
|
||||
const setSelectedModelId = (item)=>{
|
||||
data.selectedModelId = item.id;
|
||||
}
|
||||
|
||||
onMounted(()=>{
|
||||
})
|
||||
onUnmounted(()=>{
|
||||
})
|
||||
defineExpose({})
|
||||
const { modelList, selectedModelId } = toRefs(data);
|
||||
</script>
|
||||
<template>
|
||||
<div class="selectModel">
|
||||
<div class="text">
|
||||
<div class="title">
|
||||
Pick a Model Photo!
|
||||
</div>
|
||||
<div class="info">
|
||||
Try one of our sample images
|
||||
</div>
|
||||
</div>
|
||||
<div class="selectContent">
|
||||
<div class="modelList">
|
||||
<div v-for="item in modelList" :key="item.id" class="item" @click.stop="setSelectedModelId(item)">
|
||||
<img :src="item.imgUrl" alt="">
|
||||
<div class="icon" v-if="item.id == selectedModelId">
|
||||
<SvgIcon name="modelSelected" size="60" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<style lang="less" scoped>
|
||||
.selectModel{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
> .text{
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
margin-top: 7rem;
|
||||
margin-bottom: 4rem;
|
||||
> .title{
|
||||
font-family: satoshiBold;
|
||||
font-weight: 700;
|
||||
font-size: 9.6rem;
|
||||
line-height: 124%;
|
||||
}
|
||||
> .info{
|
||||
font-size: 4rem;
|
||||
font-weight: 400;
|
||||
line-height: 124%;
|
||||
margin-top: 1.3rem;
|
||||
}
|
||||
}
|
||||
> .selectContent{
|
||||
flex: 1;
|
||||
overflow-y: auto;
|
||||
padding: 0 11.8rem;
|
||||
> .modelList{
|
||||
padding: .6rem 2rem;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
> .item{
|
||||
width: calc((100% - 2.5rem * 2) / 3);
|
||||
border: 2px solid #D9D9D9;
|
||||
border-radius: 1rem;
|
||||
margin-bottom: 5.4rem;
|
||||
height: 75rem;
|
||||
> img{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
object-fit: cover;
|
||||
}
|
||||
> .icon{
|
||||
position: absolute;
|
||||
width: 6rem;
|
||||
height: 6rem;
|
||||
bottom: -1.8rem;
|
||||
right: -2.1rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
118
src/views/Workshop/selectModelContinue.vue
Normal file
@@ -0,0 +1,118 @@
|
||||
<script setup lang="ts">
|
||||
import { onMounted, onUnmounted, reactive, toRefs } from "vue";
|
||||
//const props = defineProps({
|
||||
//})
|
||||
//const emit = defineEmits([
|
||||
//])
|
||||
// let data = reactive({
|
||||
// modelList:
|
||||
// [
|
||||
|
||||
// ],
|
||||
// selectedModelId: null,
|
||||
// })
|
||||
|
||||
// const setSelectedModelId = (item)=>{
|
||||
// data.selectedModelId = item.id;
|
||||
// }
|
||||
|
||||
onMounted(()=>{
|
||||
})
|
||||
onUnmounted(()=>{
|
||||
})
|
||||
defineExpose({})
|
||||
// const { modelList, selectedModelId } = toRefs(data);
|
||||
</script>
|
||||
<template>
|
||||
<div class="selectModelContinue">
|
||||
<div class="router">
|
||||
<div>Home</div>
|
||||
<div>Liberay</div>
|
||||
</div>
|
||||
<div class="text">
|
||||
<div class="title">
|
||||
Go with this Look?
|
||||
</div>
|
||||
</div>
|
||||
<div class="selectContent">
|
||||
<div class="history"></div>
|
||||
<div class="modelBox">
|
||||
<div></div>
|
||||
<div class="model">
|
||||
<img src="" alt="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="again">
|
||||
Re-try with a new model?
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<style lang="less" scoped>
|
||||
.selectModelContinue{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
> .router{
|
||||
margin-top: 3rem;
|
||||
margin-left: 5.4rem;
|
||||
display: flex;
|
||||
> div{
|
||||
margin-right: 4.4rem;
|
||||
font-size: 3rem;
|
||||
font-family: satoshiRegular;
|
||||
font-weight: 400;
|
||||
&:last-child{
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
> .text{
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
margin-top: 6rem;
|
||||
> .title{
|
||||
font-family: satoshiBold;
|
||||
font-weight: 700;
|
||||
font-size: 9.6rem;
|
||||
line-height: 124%;
|
||||
}
|
||||
}
|
||||
> .selectContent{
|
||||
flex: 1;
|
||||
overflow-y: auto;
|
||||
padding: 0 14.1rem;
|
||||
margin-top: 1.5rem;
|
||||
> .history{
|
||||
|
||||
}
|
||||
> .model{
|
||||
margin-top: 2.5rem;
|
||||
> .model{
|
||||
border: 2px solid #D9D9D9;
|
||||
height: 79.8rem;
|
||||
position: relative;
|
||||
> img{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
object-fit: contain;
|
||||
}
|
||||
}
|
||||
}
|
||||
> .again{
|
||||
margin-top: 5.6rem;
|
||||
font-family: satoshiMedium;
|
||||
padding: 0 10.5rem;
|
||||
line-height: 10.4rem;
|
||||
background-color: #000;
|
||||
color: #fff;
|
||||
border-radius: 10rem;
|
||||
font-size: 4.8rem;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,23 +1,78 @@
|
||||
<script setup lang="ts">
|
||||
import { ref, onMounted, onUnmounted, reactive, toRefs } from "vue";
|
||||
import { onMounted, onUnmounted, reactive, toRefs } from "vue";
|
||||
import SelectItem from "@/components/selectStyle/selectItem.vue";
|
||||
//const props = defineProps({
|
||||
//})
|
||||
//const emit = defineEmits([
|
||||
//])
|
||||
let data = reactive({
|
||||
selectList:
|
||||
[
|
||||
{
|
||||
id:1,
|
||||
imgList:[
|
||||
'https://www.minio-api.aida.com.hk/aida-users/83/print/4690d6b7-5cc4-47da-bef6-f4585c9c2fdf-3-83.png?response-content-type=image%2Fpng&response-content-disposition=inline&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=admin%2F20251009%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20251009T024954Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=b57237c2cd7f5b2eb4216de2a99d0bd8827a1289613b5f0813acf1e414a6c334',
|
||||
'https://www.minio-api.aida.com.hk/aida-users/83/print/4690d6b7-5cc4-47da-bef6-f4585c9c2fdf-3-83.png?response-content-type=image%2Fpng&response-content-disposition=inline&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=admin%2F20251009%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20251009T024954Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=b57237c2cd7f5b2eb4216de2a99d0bd8827a1289613b5f0813acf1e414a6c334',
|
||||
'https://www.minio-api.aida.com.hk/aida-users/83/print/4690d6b7-5cc4-47da-bef6-f4585c9c2fdf-3-83.png?response-content-type=image%2Fpng&response-content-disposition=inline&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=admin%2F20251009%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20251009T024954Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=b57237c2cd7f5b2eb4216de2a99d0bd8827a1289613b5f0813acf1e414a6c334',
|
||||
'https://www.minio-api.aida.com.hk/aida-users/83/print/4690d6b7-5cc4-47da-bef6-f4585c9c2fdf-3-83.png?response-content-type=image%2Fpng&response-content-disposition=inline&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=admin%2F20251009%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20251009T024954Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=b57237c2cd7f5b2eb4216de2a99d0bd8827a1289613b5f0813acf1e414a6c334',
|
||||
],
|
||||
isLike: false,
|
||||
isAdd: false,
|
||||
},
|
||||
{
|
||||
id:2,
|
||||
imgList:[
|
||||
'https://www.minio-api.aida.com.hk/aida-users/83/print/4690d6b7-5cc4-47da-bef6-f4585c9c2fdf-3-83.png?response-content-type=image%2Fpng&response-content-disposition=inline&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=admin%2F20251009%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20251009T024954Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=b57237c2cd7f5b2eb4216de2a99d0bd8827a1289613b5f0813acf1e414a6c334',
|
||||
'https://www.minio-api.aida.com.hk/aida-users/83/print/4690d6b7-5cc4-47da-bef6-f4585c9c2fdf-3-83.png?response-content-type=image%2Fpng&response-content-disposition=inline&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=admin%2F20251009%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20251009T024954Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=b57237c2cd7f5b2eb4216de2a99d0bd8827a1289613b5f0813acf1e414a6c334',
|
||||
'https://www.minio-api.aida.com.hk/aida-users/83/print/4690d6b7-5cc4-47da-bef6-f4585c9c2fdf-3-83.png?response-content-type=image%2Fpng&response-content-disposition=inline&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=admin%2F20251009%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20251009T024954Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=b57237c2cd7f5b2eb4216de2a99d0bd8827a1289613b5f0813acf1e414a6c334',
|
||||
'https://www.minio-api.aida.com.hk/aida-users/83/print/4690d6b7-5cc4-47da-bef6-f4585c9c2fdf-3-83.png?response-content-type=image%2Fpng&response-content-disposition=inline&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=admin%2F20251009%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20251009T024954Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=b57237c2cd7f5b2eb4216de2a99d0bd8827a1289613b5f0813acf1e414a6c334',
|
||||
],
|
||||
isLike: false,
|
||||
isAdd: false,
|
||||
},
|
||||
{
|
||||
id:2,
|
||||
imgList:[
|
||||
'https://www.minio-api.aida.com.hk/aida-users/83/print/4690d6b7-5cc4-47da-bef6-f4585c9c2fdf-3-83.png?response-content-type=image%2Fpng&response-content-disposition=inline&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=admin%2F20251009%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20251009T024954Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=b57237c2cd7f5b2eb4216de2a99d0bd8827a1289613b5f0813acf1e414a6c334',
|
||||
'https://www.minio-api.aida.com.hk/aida-users/83/print/4690d6b7-5cc4-47da-bef6-f4585c9c2fdf-3-83.png?response-content-type=image%2Fpng&response-content-disposition=inline&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=admin%2F20251009%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20251009T024954Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=b57237c2cd7f5b2eb4216de2a99d0bd8827a1289613b5f0813acf1e414a6c334',
|
||||
'https://www.minio-api.aida.com.hk/aida-users/83/print/4690d6b7-5cc4-47da-bef6-f4585c9c2fdf-3-83.png?response-content-type=image%2Fpng&response-content-disposition=inline&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=admin%2F20251009%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20251009T024954Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=b57237c2cd7f5b2eb4216de2a99d0bd8827a1289613b5f0813acf1e414a6c334',
|
||||
'https://www.minio-api.aida.com.hk/aida-users/83/print/4690d6b7-5cc4-47da-bef6-f4585c9c2fdf-3-83.png?response-content-type=image%2Fpng&response-content-disposition=inline&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=admin%2F20251009%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20251009T024954Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=b57237c2cd7f5b2eb4216de2a99d0bd8827a1289613b5f0813acf1e414a6c334',
|
||||
],
|
||||
isLike: false,
|
||||
isAdd: false,
|
||||
},
|
||||
{
|
||||
id:2,
|
||||
imgList:[
|
||||
'https://www.minio-api.aida.com.hk/aida-users/83/print/4690d6b7-5cc4-47da-bef6-f4585c9c2fdf-3-83.png?response-content-type=image%2Fpng&response-content-disposition=inline&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=admin%2F20251009%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20251009T024954Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=b57237c2cd7f5b2eb4216de2a99d0bd8827a1289613b5f0813acf1e414a6c334',
|
||||
'https://www.minio-api.aida.com.hk/aida-users/83/print/4690d6b7-5cc4-47da-bef6-f4585c9c2fdf-3-83.png?response-content-type=image%2Fpng&response-content-disposition=inline&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=admin%2F20251009%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20251009T024954Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=b57237c2cd7f5b2eb4216de2a99d0bd8827a1289613b5f0813acf1e414a6c334',
|
||||
'https://www.minio-api.aida.com.hk/aida-users/83/print/4690d6b7-5cc4-47da-bef6-f4585c9c2fdf-3-83.png?response-content-type=image%2Fpng&response-content-disposition=inline&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=admin%2F20251009%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20251009T024954Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=b57237c2cd7f5b2eb4216de2a99d0bd8827a1289613b5f0813acf1e414a6c334',
|
||||
'https://www.minio-api.aida.com.hk/aida-users/83/print/4690d6b7-5cc4-47da-bef6-f4585c9c2fdf-3-83.png?response-content-type=image%2Fpng&response-content-disposition=inline&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=admin%2F20251009%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20251009T024954Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=b57237c2cd7f5b2eb4216de2a99d0bd8827a1289613b5f0813acf1e414a6c334',
|
||||
],
|
||||
isLike: false,
|
||||
isAdd: false,
|
||||
},
|
||||
]
|
||||
})
|
||||
onMounted(()=>{
|
||||
})
|
||||
onUnmounted(()=>{
|
||||
})
|
||||
defineExpose({})
|
||||
const {} = toRefs(data);
|
||||
const { selectList } = toRefs(data);
|
||||
</script>
|
||||
<template>
|
||||
<div class="selectStyle">
|
||||
<div class="title">
|
||||
<SvgIcon name="Vector" color="red" size="30" />
|
||||
12312
|
||||
<div class="text">
|
||||
<div class="title">
|
||||
What’s your Style?
|
||||
</div>
|
||||
<div class="info">
|
||||
Select the outfit that matches you the most.
|
||||
</div>
|
||||
</div>
|
||||
<div class="selectContent">
|
||||
<SelectItem :selectList="selectList" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@@ -26,5 +81,26 @@ const {} = toRefs(data);
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
> .text{
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
margin-top: 7rem;
|
||||
margin-bottom: 4.8rem;
|
||||
> .title{
|
||||
font-family: satoshiBold;
|
||||
font-weight: 700;
|
||||
font-size: 9.6rem;
|
||||
line-height: 124%;
|
||||
}
|
||||
> .info{
|
||||
font-size: 4rem;
|
||||
font-weight: 400;
|
||||
line-height: 124%;
|
||||
margin-top: 1.3rem;
|
||||
}
|
||||
}
|
||||
.selectContent{
|
||||
padding: 0 4rem;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
195
src/views/Workshop/uploadFace/index.vue
Normal file
@@ -0,0 +1,195 @@
|
||||
<script setup lang="ts">
|
||||
import HeaderTitle from '@/components/HeaderTitle.vue'
|
||||
import { ref } from 'vue'
|
||||
import {useRouter} from 'vue-router'
|
||||
const router = useRouter()
|
||||
const faceUrl = ref('')
|
||||
// 上传照片
|
||||
const handleUploadFace = () => {
|
||||
const input = document.createElement('input')
|
||||
input.type = 'file'
|
||||
input.accept = 'image/*'
|
||||
input.capture = 'camera'
|
||||
input.click()
|
||||
input.onchange = (e: any) => {
|
||||
const file = e.target.files[0]
|
||||
if (!file) return
|
||||
const reader = new FileReader()
|
||||
reader.readAsDataURL(file)
|
||||
reader.onload = () => {
|
||||
faceUrl.value = reader.result as string
|
||||
}
|
||||
}
|
||||
}
|
||||
// 完成上传
|
||||
const handleFinish = () => {
|
||||
console.log('完成上传')
|
||||
router.push({name:'customize'})
|
||||
}
|
||||
// 生成照片
|
||||
const handleGenerate = () => {
|
||||
console.log('生成照片')
|
||||
router.push({name:'customize'})
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<header-title />
|
||||
<!-- 上传照片 -->
|
||||
<div class="session session_1" v-show="!faceUrl">
|
||||
<img src="@/assets/images/workshop/bg/upload_bg.png" class="bg" />
|
||||
<div class="texts">
|
||||
<p class="title">Keep Styling with AI?</p>
|
||||
<p class="desc">
|
||||
Would you like to keep playing with<br />
|
||||
our personalized AI tools?
|
||||
</p>
|
||||
</div>
|
||||
<div class="btns">
|
||||
<button @click="handleUploadFace">Upload Face</button>
|
||||
<button @click="handleFinish">Finish</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 展示照片 -->
|
||||
<div class="session session_2" v-show="faceUrl">
|
||||
<img src="@/assets/images/workshop/bg/picture_bg.png" class="bg" />
|
||||
<div class="link">
|
||||
<span>Home</span>
|
||||
<span>Library</span>
|
||||
</div>
|
||||
<div class="content">
|
||||
<div class="title">
|
||||
Upload your Face<br />
|
||||
to Try-on
|
||||
</div>
|
||||
<!-- 照片 -->
|
||||
<div class="picture">
|
||||
<img :src="faceUrl" />
|
||||
</div>
|
||||
<div class="btns">
|
||||
<button @click="handleUploadFace">Re-try</button>
|
||||
<button @click="handleGenerate">Generate</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped lang="less">
|
||||
.header-title {
|
||||
--header-title-color: #000;
|
||||
--header-title-background: #fff;
|
||||
}
|
||||
.session {
|
||||
width: 100%;
|
||||
position: relative;
|
||||
color: #fff;
|
||||
> * {
|
||||
position: absolute;
|
||||
}
|
||||
> .bg {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
.btns {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
|
||||
> button {
|
||||
box-sizing: content-box;
|
||||
width: 40rem;
|
||||
height: 8.3rem;
|
||||
border-radius: 0.7rem;
|
||||
border: 0.4rem solid #fff;
|
||||
background: transparent;
|
||||
font-family: satoshiRegular;
|
||||
font-weight: 500;
|
||||
font-size: 5.5rem;
|
||||
margin: 0 1.8rem;
|
||||
color: #fff;
|
||||
&:active {
|
||||
opacity: 0.7;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.session.session_1 {
|
||||
> .texts {
|
||||
top: 0;
|
||||
left: 0;
|
||||
padding: 9.9rem 0 0 7.2rem;
|
||||
font-family: 'robotoBold';
|
||||
> .title {
|
||||
font-weight: 700;
|
||||
font-size: 8.6rem;
|
||||
}
|
||||
> .desc {
|
||||
font-weight: 500;
|
||||
font-size: 4rem;
|
||||
margin-top: 3rem;
|
||||
}
|
||||
}
|
||||
> .btns {
|
||||
bottom: 23.3rem;
|
||||
}
|
||||
}
|
||||
|
||||
.session.session_2 {
|
||||
> .link {
|
||||
top: 2rem;
|
||||
left: 5.4rem;
|
||||
> span {
|
||||
font-family: satoshiRegular;
|
||||
font-size: 3rem;
|
||||
vertical-align: middle;
|
||||
text-decoration: underline;
|
||||
text-underline-offset: 0.8rem;
|
||||
margin-right: 4.4rem;
|
||||
}
|
||||
}
|
||||
> .content {
|
||||
top: 18.5rem;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
> .title {
|
||||
font-family: satoshiBold;
|
||||
font-size: 11rem;
|
||||
text-align: center;
|
||||
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 {
|
||||
> button {
|
||||
width: 34.5rem;
|
||||
height: 8.6rem;
|
||||
border-radius: 4.3rem;
|
||||
margin: 0 5rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||