Merge branches 'master' and 'master' of https://gitee.com/lvYeJu/lane-crawford-3
2
components.d.ts
vendored
@@ -9,8 +9,10 @@ export {}
|
|||||||
|
|
||||||
declare module '@vue/runtime-core' {
|
declare module '@vue/runtime-core' {
|
||||||
export interface GlobalComponents {
|
export interface GlobalComponents {
|
||||||
|
HeaderTitle: typeof import('./src/components/HeaderTitle.vue')['default']
|
||||||
RouterLink: typeof import('vue-router')['RouterLink']
|
RouterLink: typeof import('vue-router')['RouterLink']
|
||||||
RouterView: typeof import('vue-router')['RouterView']
|
RouterView: typeof import('vue-router')['RouterView']
|
||||||
|
SelectItem: typeof import('./src/components/selectStyle/selectItem.vue')['default']
|
||||||
SvgIcon: typeof import('./src/components/SvgIcon/index.vue')['default']
|
SvgIcon: typeof import('./src/components/SvgIcon/index.vue')['default']
|
||||||
VanSwipe: typeof import('vant/es')['Swipe']
|
VanSwipe: typeof import('vant/es')['Swipe']
|
||||||
VanSwipeItem: typeof import('vant/es')['SwipeItem']
|
VanSwipeItem: typeof import('vant/es')['SwipeItem']
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
<!-- <meta name="viewport" content="width=device-width, initial-scale=1.0"> -->
|
<!-- <meta name="viewport" content="width=device-width, initial-scale=1.0"> -->
|
||||||
<!-- <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"> -->
|
<!-- <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"> -->
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0" />
|
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0" />
|
||||||
|
<link rel="stylesheet" href="/css/woff/fontFamily.css">
|
||||||
<title>Activities</title>
|
<title>Activities</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|||||||
BIN
public/css/woff/Boska/Boska-Regular.ttf
Normal file
BIN
public/css/woff/Boska/Boska-Regular.woff
Normal file
BIN
public/css/woff/Mazzard/MazzardH-Regular.otf
Normal file
BIN
public/css/woff/Roboto/Roboto-Bold.ttf
Normal file
BIN
public/css/woff/Roboto/Roboto-Regular.ttf
Normal file
BIN
public/css/woff/Satoshi/Satoshi-Bold.ttf
Normal file
BIN
public/css/woff/Satoshi/Satoshi-Bold.woff
Normal file
BIN
public/css/woff/Satoshi/Satoshi-Regular.ttf
Normal file
BIN
public/css/woff/Satoshi/Satoshi-Regular.woff
Normal file
36
public/css/woff/fontFamily.css
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
/* cyrillic-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'satoshiRegular';
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: 700;
|
||||||
|
src: url("./Satoshi/Satoshi-Regular.ttf") format('woff2'), url("./Satoshi/Satoshi-Regular.woff") format('woff2');
|
||||||
|
/* unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; */
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'satoshiBold';
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: 700;
|
||||||
|
src: url("./Satoshi/Satoshi-Bold.ttf") format('woff2'), url("./Satoshi/Satoshi-Bold.woff") format('woff2');
|
||||||
|
/* unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; */
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'mazzardHRegular';
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: 700;
|
||||||
|
src: url("./Mazzard/MazzardH-Regular.otf") format('opentype');
|
||||||
|
/* unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; */
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'robotoBold';
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: 700;
|
||||||
|
src: url("./Roboto/Roboto-Bold.ttf") format('woff2');
|
||||||
|
/* unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; */
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'boskaRegular';
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: 700;
|
||||||
|
src: url("./Boska/Boska-Regular.ttf") format('woff2'), url("./Boska/Boska-Regular.woff") format('woff2');
|
||||||
|
/* unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; */
|
||||||
|
}
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
/* cyrillic-ext */
|
|
||||||
@font-face {
|
|
||||||
font-family: 'poppinsRegular';
|
|
||||||
font-style: italic;
|
|
||||||
font-weight: 700;
|
|
||||||
src: url(./Poppins/Poppins-Regular.ttf) format('woff2');
|
|
||||||
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
|
||||||
}
|
|
||||||
@font-face {
|
|
||||||
font-family: 'poppinsSemiBold';
|
|
||||||
font-style: italic;
|
|
||||||
font-weight: 700;
|
|
||||||
src: url(./Poppins/Poppins-SemiBold.ttf) format('woff2');
|
|
||||||
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
|
||||||
}
|
|
||||||
@font-face {
|
|
||||||
font-family: 'poppinsBold';
|
|
||||||
font-style: italic;
|
|
||||||
font-weight: 700;
|
|
||||||
src: url(./Poppins/Poppins-Bold.ttf) format('woff2');
|
|
||||||
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
|
||||||
}
|
|
||||||
@font-face {
|
|
||||||
font-family: 'poppinsMedium';
|
|
||||||
font-style: italic;
|
|
||||||
font-weight: 700;
|
|
||||||
src: url(./Poppins/Poppins-Medium.ttf) format('woff2');
|
|
||||||
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
|
||||||
}
|
|
||||||
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;
|
width: 1em;
|
||||||
height: 1em;
|
height: 1em;
|
||||||
fill: currentColor;
|
fill: currentColor;
|
||||||
|
color: var(--svg-icon-color);
|
||||||
}
|
}
|
||||||
.c-svg {
|
.c-svg {
|
||||||
width: 100%;
|
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: '/',
|
path: '/',
|
||||||
redirect: '/workshop'
|
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',
|
path: '/workshop',
|
||||||
name: 'Workshop',
|
name: 'Workshop',
|
||||||
@@ -22,21 +35,29 @@ const router = createRouter({
|
|||||||
path: '/workshop/selectStyle',
|
path: '/workshop/selectStyle',
|
||||||
name: 'SelectStyle',
|
name: 'SelectStyle',
|
||||||
component: () => import('../views/Workshop/selectStyle.vue')
|
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'
|
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;
|
var doc = document, win = window, docEl = doc.documentElement, remStyle = document.createElement("style"), tid;
|
||||||
designWidth = designWidth || 1080;
|
designWidth = designWidth || 1080;
|
||||||
// maxWidth = maxWidth || 1920;
|
// maxWidth = maxWidth || 1920;
|
||||||
@@ -19,7 +19,7 @@ let flexible = (designWidth, maxWidth,minWidth) =>{
|
|||||||
// }else{
|
// }else{
|
||||||
// designWidth = 375
|
// designWidth = 375
|
||||||
// }
|
// }
|
||||||
var rem = Math.round(width * 10 / designWidth);
|
var rem = (width * 10 / designWidth).toFixed(2);
|
||||||
docEl.style.fontSize = rem+'px'
|
docEl.style.fontSize = rem+'px'
|
||||||
remStyle.innerHTML = 'html{font-size:' + 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%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
font-family: 'satoshiRegular';
|
||||||
}
|
}
|
||||||
</style>
|
</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">
|
<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 props = defineProps({
|
||||||
//})
|
//})
|
||||||
//const emit = defineEmits([
|
//const emit = defineEmits([
|
||||||
//])
|
//])
|
||||||
let data = reactive({
|
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(()=>{
|
onMounted(()=>{
|
||||||
})
|
})
|
||||||
onUnmounted(()=>{
|
onUnmounted(()=>{
|
||||||
})
|
})
|
||||||
defineExpose({})
|
defineExpose({})
|
||||||
const {} = toRefs(data);
|
const { selectList } = toRefs(data);
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<div class="selectStyle">
|
<div class="selectStyle">
|
||||||
<div class="title">
|
<div class="text">
|
||||||
<SvgIcon name="Vector" color="red" size="30" />
|
<div class="title">
|
||||||
12312
|
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>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@@ -26,5 +81,26 @@ const {} = toRefs(data);
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
position: relative;
|
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>
|
</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>
|
||||||