Files
aida_front/src/component/mainPage/signUp/index.vue

901 lines
27 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<div class="signUp">
<div class="selectSignUp" v-show="!isSelectSignUp">
<div class="titleTitle">{{ productList.Advantages }}</div>
<div
class="selectMonthlyYearly"
:class="[monthlyOrYearly == 'monthly' ? 'left' : 'right']"
>
<div class="bg"></div>
<div class="leftText" @click="setMonthlyOrYearly('monthly')">
{{ productList.Monthly }}
</div>
<div class="rightText" @click="setMonthlyOrYearly('yearl')">
{{ productList.Yearly }}
</div>
</div>
<div class="gallery_list product_list">
<div
class="gallery_item"
v-for="item in productList[monthlyOrYearly]"
:key="item"
:class="[
{ recommended: item.recommended },
{ monthly: monthlyOrYearly === 'monthly' },
{ yearly: monthlyOrYearly === 'yearl' },
{ academic: item.type === 'academic' }
]"
>
<div class="product_signUp_box">
<img class="img" :src="item?.img" alt="" />
<div class="title">{{ item?.title }}</div>
<div class="info" :class="{ academic: item.type == 'academic' }">
{{ item?.info }}
</div>
<div class="price" v-if="item.type != 'academic'">
<div>{{ item?.price }}</div>
<span
:class="[
{ yearl: monthlyOrYearly == 'yearl' },
{ personal: item.type === 'personal' }
]"
style="white-space: nowrap"
>
{{ item?.detail }}
</span>
</div>
<div class="price academic" v-if="item.type == 'academic'">
<div>{{ item?.custom }}</div>
<span style="font-size: 1.4rem">{{ item?.customInfo }}</span>
</div>
<ul
class="product_detail"
:class="[
{ academic: item.type == 'academic' },
{ chinese: isSelectSuccessively }
]"
>
<li v-for="detailItem in item?.detailList">{{ detailItem }}</li>
</ul>
<div
class="gallery_btn gallery_btn_radius submit"
v-if="item?.btn != 'Contact us' && item?.btn != '联系我们'"
@click="createAccount"
>
{{ item?.btn }}
</div>
<div
class="gallery_btn gallery_btn_radius submit"
v-else
@click="handleContactUs"
>
{{ item?.btn }}
</div>
</div>
<div class="highlight" v-if="item?.highlight">{{ item?.highlight }}</div>
</div>
</div>
</div>
<registerModel ref="registerModel"></registerModel>
</div>
</template>
<script>
import { defineComponent, ref, reactive, watch, onMounted, nextTick, toRefs } from 'vue'
import registerModel from './registerModel.vue'
import { message } from 'ant-design-vue'
import CChargeIcon from '@/assets/icons/CCharge.svg'
export default defineComponent({
components: {
registerModel
},
name: 'login',
props: ['isSelectSuccessively'],
// emits: ['close'],
setup(props, { emit }) {
let dom = reactive({
registerModel: null
})
let data = reactive({
isSelectSignUp: false,
monthlyOrYearly: 'monthly',
productList: [],
productListCn: {
Advantages: '我们的价格方案',
Monthly: '月度',
Yearly: '年度',
monthly: [
{
title: '试用版',
img: CChargeIcon,
type: 'personal',
info: '您的AI时尚设计助手',
price: 'HK$0',
detail: '自注册之日起 7 天内 · 50 个积分',
highlight: '',
discounts: '9折优惠',
detailList: [
'轻松充值积分',
'可在公共化画廊分享设计并与设计师互动',
'支持月付/年付选项',
'适合个人创作者、独立设计师以及所有时尚爱好者',
'客户支持'
],
btn: '立即开始'
},
{
title: '个人版',
img: '/image/homeIntroduct/personal.png',
type: 'personal',
info: '您的AI时尚设计助手',
price: 'HK$100',
detail: '每月·500积分',
highlight: '',
discounts: '9折优惠',
detailList: [
'轻松充值积分',
'可在公共化画廊分享设计并与设计师互动',
'支持月付/年付选项',
'适合个人创作者、独立设计师以及所有时尚爱好者',
'客户支持'
],
btn: '订阅'
},
{
title: '个人专业版',
img: '/image/homeIntroduct/personal.png',
type: 'personal',
info: '您的AI时尚设计助手',
price: 'HK$500',
detail: '每月·3500积分',
highlight: '推荐',
recommended: true,
discounts: '9折优惠',
detailList: [
'轻松充值积分',
'可在公共画廊中分享设计并与设计师互动',
'支持月付/年付选项',
'适合个人创作者、独立设计师以及所有时尚爱好者',
'客户支持'
],
btn: '订阅'
},
{
title: '教育版',
img: '/image/homeIntroduct/academic.png',
type: 'academic',
info: '高校多用户管理系统',
price: '',
detail: '',
custom: '定制方案',
customInfo: '可提供专属教育优惠,详情请联系我们',
highlight: '',
discounts: '',
detailList: [
'灵活的自定义程序以满足学校需求',
'项目期间每月信用额度自动续期',
'可在用户之间灵活共享和分配账户信用额度',
'AI辅助设计教学功能',
'从设计灵感、草图创作到完整时装系列的尖端教学工具',
'基本3D设计功能',
'客户与技术支援'
],
btn: '联系我们'
}
],
yearl: [
{
title: '试用版',
img: CChargeIcon,
type: 'personal',
info: '您的AI时尚设计助手',
price: 'HK$0',
detail: '自注册之日起 7 天内 · 50 个积分',
highlight: '',
discounts: '9折优惠',
detailList: [
'轻松充值积分',
'可在公共化画廊分享设计并与设计师互动',
'支持月付/年付选项',
'适合个人创作者、独立设计师以及所有时尚爱好者',
'客户支持'
],
btn: '立即开始'
},
{
title: '个人版',
img: '/image/homeIntroduct/personal.png',
type: 'personal',
info: '您的AI时尚设计助手',
price: 'HK$5,000',
detail: '每年·50000积分',
highlight: '',
discounts: '9折优惠',
detailList: [
'灵活的自定义程序以满足学校需求',
'可在用户之间灵活共享和分配账户信用额度',
'AI辅助设计教学功能',
'支持草图创意和设计灵感教学',
'基础3D设计功能'
],
btn: '订阅'
},
{
title: '教育版',
img: '/image/homeIntroduct/academic.png',
type: 'academic',
info: '高校多用户管理系统',
price: '',
detail: '',
custom: '定制方案',
customInfo: '可提供专属教育优惠,详情请联系我们',
highlight: '',
discounts: '',
detailList: [
'灵活的自定义程序以满足学校需求',
'项目期间每月信用额度自动续期',
'可在用户之间灵活共享和分配账户信用额度',
'AI辅助设计教学功能',
'从设计灵感、草图创作到完整时装系列的尖端教学工具',
'基本3D设计功能',
'客户与技术支援'
],
btn: '联系我们'
}
]
},
productListEn: {
Advantages: 'Our Pricing Plan',
Monthly: 'Monthly',
Yearly: 'Yearly',
monthly: [
{
title: 'Trial',
img: CChargeIcon,
type: 'personal',
info: 'Your AI Fashion Design Assistant',
price: 'HK$0',
detail: '7 days from sign-up · 50 credits',
highlight: '',
discounts: '10% off',
detailList: [
'Easy to Top up Credits',
'Option to Share Design and Interact with Designers in Public Gallery',
'Support Monthly/Annual Payment Options',
'Suitable for Individual Creator, Independent Designers and Fun for all Fashion Lovers',
'Customer and Technical Support'
],
btn: 'Get Started'
},
{
title: 'Personal',
img: '/image/homeIntroduct/personal.png',
type: 'personal',
info: 'Your AI Fashion Design Assistant',
price: 'HK$100',
detail: 'per month · 500 credits',
highlight: '',
discounts: '10% off',
detailList: [
'Easy to Top up Credits',
'Option to Share Design and Interact with Designers in Public Gallery',
'Support Monthly/Annual Payment Options',
'Suitable for Individual Creator, Independent Designers and Fun for all Fashion Lovers',
'Customer and Technical Support'
],
btn: 'Subscribe'
},
{
title: 'Personal',
img: '/image/homeIntroduct/personal.png',
type: 'personal',
info: 'Your AI Fashion Design Assistant',
price: 'HK$500',
detail: 'per month · 3500 credits',
highlight: 'Recommended',
recommended: true,
discounts: '10% off',
detailList: [
'Easy to Top up Credits',
'Option to Share Design and Interact with Designers in Public Gallery',
'Support Monthly/Annual Payment Options',
'Suitable for Individual Creator, Independent Designers and Fun for all Fashion Lovers',
'Customer and Technical Support'
],
btn: 'Subscribe'
},
{
title: 'Academic',
img: '/image/homeIntroduct/academic.png',
type: 'academic',
info: 'Multi User Management System for Universities',
price: '',
detail: '',
custom: 'Customize',
customInfo: 'Special Academic rate aviable, please contact us for details.',
highlight: '',
discounts: '',
detailList: [
'Flexible Customize Program to Support School Needs',
'Monthly Credit Renewal throughout Program Duration',
'Flexible to Share and Allocate Account Credits among Users',
'Al Assisted Design Teaching Function',
'Cutting-edge Teaching Tool from Design Inspiration, Sketch Creation to Complete Fashion Collection',
'Basic 3D Design Functions',
'Customer and Technical Support'
],
btn: 'Contact us'
}
],
yearl: [
{
title: 'Trial',
img: CChargeIcon,
type: 'personal',
info: 'Your AI Fashion Design Assistant',
price: 'HK$0',
detail: '7 days from sign-up · 50 credits',
highlight: '',
discounts: '10% off',
detailList: [
'Easy to Top up Credits',
'Option to Share Design and Interact with Designers in Public Gallery',
'Support Monthly/Annual Payment Options',
'Suitable for Individual Creator, Independent Designers and Fun for all Fashion Lovers',
'Customer and Technical Support'
],
btn: 'Get Started'
},
{
title: 'Personal',
img: '/image/homeIntroduct/personal.png',
type: 'personal',
info: 'Your AI Fashion Design Assistant',
price: 'HK$5,000',
detail: 'per month · 50000 credits',
highlight: '',
discounts: '10% off',
detailList: [
'Easy to Top up Credits',
'Option to Share Design and Interact with Designers in Public Gallery',
'Support Monthly/Annual Payment Options',
'Suitable for Individual Creator, Independent Designers and Fun for all Fashion Lovers',
'Customer and Technical Support'
],
btn: 'Subscribe'
},
{
title: 'Academic',
img: '/image/homeIntroduct/academic.png',
type: 'academic',
info: 'Multi User Management System for Universities',
price: '',
detail: '',
custom: 'Customize',
customInfo: 'Special Academic rate aviable, please contact us for details.',
highlight: '',
discounts: '',
detailList: [
'Flexible Customize Program to Support School Needs',
'Monthly Credit Renewal throughout Program Duration',
'Flexible to Share and Allocate Account Credits among Users',
'Al Assisted Design Teaching Function',
'Cutting-edge Teaching Tool from Design Inspiration, Sketch Creation to Complete Fashion Collection',
'Basic 3D Design Functions',
'Customer and Technical Support'
],
btn: 'Contact us'
}
]
}
})
watch(
() => props.isSelectSuccessively,
newVal => {
if (newVal) {
data.productList = data.productListCn
} else {
data.productList = data.productListEn
}
},
{ immediate: true }
)
const close = () => {}
const setMonthlyOrYearly = val => {
data.monthlyOrYearly = val
}
const createAccount = () => {
if (window.innerWidth < 768) {
dom.registerModel.pageWidth = '100%'
}
dom.registerModel.init(props.isSelectSuccessively)
}
const handleContactUs = () => {
const email = 'info@code-create.com.hk'
const mailtoLink = `mailto:${email}`
// 检测是否有邮件客户端
let hasEmailClient = false
let blurTimer = null
// 监听窗口失去焦点事件(如果打开了邮件客户端,窗口会失去焦点)
const handleBlur = () => {
hasEmailClient = true
if (blurTimer) {
clearTimeout(blurTimer)
}
window.removeEventListener('blur', handleBlur)
}
window.addEventListener('blur', handleBlur)
// 尝试打开邮件客户端(使用临时链接元素,避免页面跳转)
try {
const tempLink = document.createElement('a')
tempLink.href = mailtoLink
tempLink.style.display = 'none'
document.body.appendChild(tempLink)
tempLink.click()
document.body.removeChild(tempLink)
} catch (e) {
// 如果打开失败,直接复制邮箱
hasEmailClient = false
}
// 设置超时检测如果500ms内窗口没有失去焦点说明没有邮件客户端
blurTimer = setTimeout(() => {
window.removeEventListener('blur', handleBlur)
if (!hasEmailClient) {
// 没有邮件客户端,复制邮箱到剪贴板
copyToClipboard(email)
const isChinese = props.isSelectSuccessively
if (isChinese) {
message.info(`没有检测到邮件客户端,已为您复制邮箱地址:${email}`)
} else {
message.info(`No email client detected, email address copied: ${email}`)
}
}
}, 2000)
}
const copyToClipboard = text => {
if (navigator.clipboard && window.isSecureContext) {
// 使用现代 Clipboard API
navigator.clipboard.writeText(text).catch(() => {
// 如果失败,使用传统方法
fallbackCopyToClipboard(text)
})
} else {
// 使用传统方法
fallbackCopyToClipboard(text)
}
}
const fallbackCopyToClipboard = text => {
const textArea = document.createElement('textarea')
textArea.value = text
textArea.style.position = 'fixed'
textArea.style.left = '-999999px'
textArea.style.top = '-999999px'
document.body.appendChild(textArea)
textArea.focus()
textArea.select()
try {
document.execCommand('copy')
} catch (err) {
console.error('复制失败:', err)
}
document.body.removeChild(textArea)
}
onMounted(() => {})
return {
...toRefs(dom),
...toRefs(data),
close,
setMonthlyOrYearly,
createAccount,
handleContactUs
}
}
})
</script>
<style scoped lang="less">
.signUp {
flex: 1;
padding: 0rem 4rem;
margin-top: 5.6rem;
@media (max-width: 767px) {
margin-top: 1.5rem;
padding: 0rem 3.7rem;
// flex: 1;
// height: 100%;
// overflow-y: auto;
}
.back {
font-size: 1.6rem;
margin-bottom: 3rem;
}
.back,
.introduce > span {
cursor: pointer;
}
.titleTitle {
font-size: 4.6rem;
font-weight: 500;
text-align: center;
margin-bottom: 2rem;
@media (max-width: 767px) {
font-size: 2.68rem;
margin-bottom: 1.1rem;
}
}
.selectMonthlyYearly {
border: 0.7px solid #e7ebff;
background: #fbfbfb;
border-radius: 1rem;
width: 18.5rem;
box-shadow: 0px 0.72px 3.62px 0px #566ee81a inset;
margin: 0 auto;
display: flex;
position: relative;
--selectPadding: 0.58rem;
padding: var(--selectPadding);
transform: scale(1.05);
@media (max-width: 767px) {
--selectPadding: 0.36rem;
border-radius: 0.58rem;
width: 10.8rem;
}
&.left {
> .bg {
left: var(--selectPadding);
}
> .leftText {
color: #fff;
}
}
&.right {
> .bg {
left: calc(50% + var(--selectPadding));
}
> .rightText {
color: #fff;
}
}
> .bg {
border: 0.7px solid #e7ebff;
border-radius: 0.5rem;
box-shadow: 0px 4.35px 26.08px 0px #b5c2fb1a;
background: #ffffff;
width: calc(50% - var(--selectPadding) * 2);
height: calc(100% - var(--selectPadding) * 2);
position: absolute;
transition: all 0.3s;
}
&.left,
&.right {
.bg {
background-color: #000;
}
}
> .leftText,
> .rightText {
cursor: pointer;
font-weight: 400;
font-size: 1.7rem;
width: 50%;
text-align: center;
color: #797878;
position: relative;
font-family: 'pingfang_regular';
@media (max-width: 767px) {
font-size: 1rem;
}
}
}
.introduce {
font-size: 2.4rem;
text-decoration: underline;
}
.selectSignUp {
height: 100%;
display: flex;
flex-direction: column;
@media (max-width: 768px) {
display: flex;
flex-direction: column;
justify-content: center;
}
}
.gallery_list {
display: flex;
// justify-content: center;
flex-wrap: wrap;
justify-content: center;
margin-top: 6rem;
@media (max-width: 767px) {
margin-top: 2.4rem;
}
.gallery_item {
width: 36.2rem;
height: 46.8rem;
padding: 2.38rem;
border-radius: 1.55rem;
border: 0.2rem solid #e7ebff;
margin-right: 8rem;
position: relative;
box-shadow: 0px 15.5px 23.84px 0px #bccaff21;
&.recommended {
border-radius: 1.8rem;
border: 2px solid transparent;
background: linear-gradient(#fff, #fff) padding-box,
linear-gradient(88.13deg, #fbd2ff 0.91%, #e6d3ff 52.5%, #b694ff 101.09%)
border-box;
background-origin: border-box;
background-clip: padding-box, border-box;
}
@media (max-width: 767px) {
width: 100%;
height: auto;
border-radius: 1.3rem;
margin: 0;
margin-bottom: 2.8rem;
padding: 2rem;
padding-bottom: 1.3rem;
}
.product_signUp_box {
display: flex;
flex-direction: column;
height: 100%;
}
&:last-child {
margin-right: 0rem;
margin-bottom: 0rem;
}
.img {
margin-bottom: 1.2rem;
width: 4rem;
height: 4rem;
@media (max-width: 767px) {
width: 2.9rem;
height: 2.9rem;
margin-bottom: 1rem;
}
}
.title {
font-size: 2.6rem;
margin-bottom: 0.8rem;
text-align: left;
font-weight: 500;
@media (max-width: 767px) {
font-size: 2.3rem;
margin-bottom: 0.73rem;
}
}
.info {
font-weight: 400;
font-size: 1.4rem;
color: #797878;
font-family: 'pingfang_regular';
&.academic {
margin-bottom: 0.4rem;
}
@media (max-width: 767px) {
font-size: 1.25rem;
// margin-bottom: 1.25rem;
}
}
.price {
// margin-bottom: 5.2rem;
border-bottom: 0.72px solid #e7ebff;
width: 100%;
display: flex;
column-gap: 0.7rem;
align-items: center;
@media (max-width: 767px) {
margin-bottom: 2.3rem;
}
&.academic {
align-items: flex-start;
flex-direction: column;
> div {
margin-bottom: 0.9rem;
font-size: 3.6rem;
line-height: 1;
@media (max-width: 767px) {
font-size: 3.1rem;
margin-bottom: 0.5rem;
}
}
> span {
margin: 0;
}
}
> div {
font-weight: 500;
font-size: 3.6rem;
letter-spacing: -0.06rem;
color: #1b223c;
margin: 0.3rem 0;
@media (max-width: 767px) {
font-size: 3rem;
}
}
> span {
font-weight: 500;
font-size: 1.3rem;
color: #797878;
// margin-bottom: 1.5rem;
// margin-left: 1rem;
&.yearl {
font-size: 1.3rem;
}
@media (max-width: 767px) {
font-size: 1.2rem;
margin-top: 1rem;
// margin-left: 0.7rem;
// margin-bottom: 1rem;
}
}
}
.detail,
.gallery_btn {
font-size: 1.6rem;
}
.highlight {
font-size: 1.4rem;
position: absolute;
width: 12.41rem;
line-height: 3.4rem;
text-align: center;
top: 0;
right: 0;
background: linear-gradient(
88.13deg,
#fbd2ff 0.91%,
#e6d3ff 52.5%,
#b694ff 101.09%
);
// border-radius: .5rem 1.5rem 0px 1.5rem;
border-top-right-radius: 1.5rem;
border-bottom-left-radius: 0.5rem;
@media (max-width: 767px) {
// border-radius: .46rem .36rem 0px .9rem;
border-top-right-radius: 1.1rem;
border-bottom-left-radius: 0.4rem;
font-size: 1rem;
line-height: 2.5rem;
font-weight: 500;
width: 9rem;
}
}
.product_detail {
padding-left: 3.1rem;
flex: 1;
display: flex;
flex-direction: column;
justify-content: flex-end;
overflow-y: auto;
&.academic {
justify-content: flex-start;
}
li {
list-style: disc;
// margin-bottom: 0.3rem;
font-size: 1.3rem;
font-weight: 500;
}
// li:last-child {
// margin-bottom: 0;
// }
}
.gallery_btn {
line-height: 4.6rem;
width: 100%;
padding: 0;
margin-top: auto;
font-size: 1.7rem;
font-weight: 500;
background-color: #1b223c;
&:hover {
background-color: #fff;
}
@media (max-width: 767px) {
margin-top: 2.5rem;
font-size: 1.25rem;
line-height: 3.4rem;
border-radius: 0.62rem;
}
}
}
.yearly {
width: 44.1rem;
height: 56.9rem;
padding: 2.89rem 2.89rem 3.31rem;
box-sizing: border-box;
.product_signUp_box {
.title {
font-size: 3.1rem;
margin-bottom: 1rem;
}
.info {
font-size: 1.7rem;
}
.price {
> div {
font-size: 4.34rem;
letter-spacing: -1px;
}
span {
font-size: 1.4rem;
}
}
.product_detail {
padding-top: 3.1rem;
justify-content: space-evenly;
li {
font-size: 1.6rem;
}
}
}
@media (max-width: 767px) {
width: 31.9rem;
height: 41.1rem;
padding: 2.09rem 2.09rem 2.11rem;
&.academic {
height: 52rem;
}
.product_signUp_box {
.img {
width: 3.4rem;
height: 3.4rem;
}
.title {
font-size: 2.3rem;
margin-bottom: 0;
letter-spacing: 0.05rem;
}
.info {
font-size: 1.2rem;
}
.price {
margin-bottom: 0;
div {
font-size: 3.1rem;
}
span {
font-size: 1.26rem;
&.personal {
font-size: 0.95rem;
}
}
}
.product_detail {
padding-top: 2rem;
justify-content: flex-end;
margin-bottom: 0;
&.chinese {
justify-content: space-evenly;
}
li {
font-size: 1.15rem;
}
}
.submit {
margin-top: 2rem;
}
}
}
}
.submit {
@media (max-width: 767px) {
margin-top: 2rem;
}
}
}
}
</style>