语言适配加部分布局修改

This commit is contained in:
X1627315083
2024-12-23 16:23:18 +08:00
parent fd69caff94
commit 570b5f97e9
16 changed files with 505 additions and 188 deletions

View File

@@ -126,11 +126,16 @@ export default defineComponent({
<style lang="less" scoped> <style lang="less" scoped>
.account_frontPage{ .account_frontPage{
width: 100%; width: 100%;
height: 100%;
.account_frontPage_body{ .account_frontPage_body{
padding-bottom: 3rem; padding-bottom: 3rem;
height: 100%;
:deep(.ant-badge){ :deep(.ant-badge){
font-size: var(--aida-fsize2); font-size: var(--aida-fsize2);
} }
:deep(.ant-tabs-content){
height: 100%;
}
:deep(.ant-tabs-tabpane){ :deep(.ant-tabs-tabpane){
padding: 0 5rem; padding: 0 5rem;
} }

View File

@@ -2,42 +2,55 @@
<div class="bindPage_page"> <div class="bindPage_page">
<div class="bindPage_page_body"> <div class="bindPage_page_body">
<div class="bind_item"> <div class="bind_item">
<div class="title">Bind Wechat</div> <div class="title">{{ $t('frontPage.BindWechat') }}</div>
<div class="box"> <div class="box">
<div class="type"> <div class="type">
<img v-if="!userDetail.accountExtendList?.WeChat" src="@/assets/images/loginPage/weiXinIcon.svg" alt=""> <img v-if="!userDetail.accountExtendList?.WeChat" src="@/assets/images/loginPage/weiXinIcon.svg" alt="">
<img v-else :src="userDetail.accountExtendList?.WeChat.headImgUrl" alt=""> <img v-else :src="userDetail.accountExtendList?.WeChat.headImgUrl" alt="">
<div class="text">{{ userDetail.accountExtendList?.WeChat?userDetail.accountExtendList?.WeChat.name:'Unbound' }}</div> <div class="text">{{ userDetail.accountExtendList?.WeChat?userDetail.accountExtendList?.WeChat.name:$t('frontPage.Unbound') }}</div>
</div> </div>
<div v-if="!userDetail.accountExtendList?.WeChat" class="gallery_btn" @click="openWeiXinModel">Bind Now</div> <div v-if="!userDetail.accountExtendList?.WeChat" class="gallery_btn" @click="openWeiXinModel">{{ $t('frontPage.BindNow') }}</div>
<div v-else class="gallery_btn" @click="ungroupWeiXinModel">Unbind</div> <div v-if="userDetail.accountExtendList?.WeChat" class="gallery_btn" @click="ungroupWeiXinModel">{{ $t('frontPage.Unbind') }}</div>
</div> </div>
</div> </div>
<div class="bind_item"> <div class="bind_item">
<div class="title">Bind Gmail</div> <div class="title">{{ $t('frontPage.BindGmail') }}</div>
<div class="box"> <div class="box">
<div class="type"> <div class="type">
<img v-if="!userDetail.accountExtendList?.Google" src="@/assets/images/loginPage/gmailIcon.svg" alt=""> <img v-if="!userDetail.accountExtendList?.Google" src="@/assets/images/loginPage/gmailIcon.svg" alt="">
<img v-else :src="userDetail.accountExtendList?.Google?.headImgUrl" alt=""> <img v-else :src="userDetail.accountExtendList?.Google?.headImgUrl" alt="">
<div class="text">{{ userDetail.accountExtendList?.Google?userDetail.accountExtendList?.Google.name:'Unbound' }}</div> <div class="text">{{ userDetail.accountExtendList?.Google?userDetail.accountExtendList?.Google.name:$t('frontPage.Unbound') }}</div>
</div> </div>
<div class="gmail_btn"> <div class="gmail_btn">
<div v-if="!userDetail.accountExtendList?.Google" class="gallery_btn">Bind Now</div> <div v-if="!userDetail.accountExtendList?.Google && googleLoad" class="gallery_btn">{{ $t('frontPage.BindNow') }}</div>
<div v-else class="gallery_btn" @click="ungroupGoogleModel">Unbind</div> <div v-else class="gallery_btn loading"><i class="fi fi-br-loading"></i></div>
<div v-show="!userDetail.accountExtendList?.Google" id="g_id_bind"></div> <div v-show="!userDetail.accountExtendList?.Google" id="g_id_bind"></div>
<div v-if="userDetail.accountExtendList?.Google" class="gallery_btn" @click="ungroupGoogleModel">{{ $t('frontPage.Unbind') }}</div>
</div>
</div>
</div>
<div class="bind_item">
<div class="title">{{ $t('frontPage.ModifyEmail') }}</div>
<div class="box">
<div class="type">
<img :src="userDetail.avatar" alt="">
<div class="text">{{ userDetail.email }}</div>
</div>
<div class="gmail_btn">
<div class="gallery_btn" @click="modifyEmail">{{ $t('frontPage.Modify') }}</div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="mark_loading" v-show="loadingShow"> <div class="mark_loading" v-show="loadingShow">
<a-spin size="large" /> <a-spin size="large" />
</div> </div>
<weiXinModel ref="weiXinModel"></weiXinModel> <weiXinModel ref="weiXinModel"></weiXinModel>
<bindEmail ref="bindEmail" type="Modify"></bindEmail>
</div> </div>
</template> </template>
<script> <script>
import { defineComponent,computed,ref,reactive,nextTick,toRefs,onBeforeUnmount, onMounted} from 'vue' import { defineComponent,computed,createVNode,reactive,nextTick,toRefs,onBeforeUnmount, onMounted} from 'vue'
import { Https } from "@/tool/https"; import { Https } from "@/tool/https";
import { Modal,message } from 'ant-design-vue'; import { Modal,message } from 'ant-design-vue';
import { useStore } from "vuex"; import { useStore } from "vuex";
@@ -45,23 +58,28 @@ import weiXinModel from "@/component/LoginPage/weiXinModel.vue";
import { useRoute } from 'vue-router'; import { useRoute } from 'vue-router';
import { useRouter } from 'vue-router'; import { useRouter } from 'vue-router';
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
import bindEmail from "@/component/HomePage/bindEmail.vue";
export default defineComponent({ export default defineComponent({
components:{ components:{
weiXinModel weiXinModel,bindEmail
}, },
setup() { setup() {
const route = useRoute(); const route = useRoute();
const router = useRouter(); const router = useRouter();
const t = useI18n().t;
const store = useStore(); const store = useStore();
let accountHomeData = reactive({ let accountHomeData = reactive({
router:null, router:null,
loadingShow:false, loadingShow:false,
googleLoad:false,
userDetail:computed(()=>{ userDetail:computed(()=>{
return store.state.UserHabit.userDetail return store.state.UserHabit.userDetail
}) })
}) })
let bindPageDom = reactive({ let bindPageDom = reactive({
weiXinModel:null weiXinModel:null,
bindEmail:null,
}) })
let data = reactive({ let data = reactive({
scriptSrc:'https://accounts.google.com/gsi/client', scriptSrc:'https://accounts.google.com/gsi/client',
@@ -88,7 +106,7 @@ export default defineComponent({
} }
const ungroupWeiXinModel = ()=>{ const ungroupWeiXinModel = ()=>{
Https.axiosGet(Https.httpUrls.unbindWeChat,).then((rv)=>{ Https.axiosGet(Https.httpUrls.unbindWeChat,).then((rv)=>{
message.success('Successful discharge'); message.success(t('frontPage.jsContent1'));
let value = { let value = {
accountExtendList:{ accountExtendList:{
WeChat:undefined, WeChat:undefined,
@@ -107,11 +125,14 @@ export default defineComponent({
} }
} }
store.commit("upUserDetail", value) store.commit("upUserDetail", value)
message.success('Successful discharge'); message.success(t('frontPage.jsContent1'));
}) })
} }
onMounted(async ()=>{ const modifyEmail = ()=>{
bindPageDom.bindEmail.init()
}
onMounted(async ()=>{
let GOOGLE_CLIENT_ID = '194770296147-njd68pm7tnapgonkj2h48mhf63n15n3f.apps.googleusercontent.com' let GOOGLE_CLIENT_ID = '194770296147-njd68pm7tnapgonkj2h48mhf63n15n3f.apps.googleusercontent.com'
var existingScript = document.querySelector(`script[src="${data.scriptSrc}"]`); var existingScript = document.querySelector(`script[src="${data.scriptSrc}"]`);
if(!existingScript){ if(!existingScript){
@@ -119,8 +140,22 @@ export default defineComponent({
const script = document.createElement("script"); const script = document.createElement("script");
script.src = data.scriptSrc script.src = data.scriptSrc
script.onload=()=>{ script.onload=()=>{
accountHomeData.googleLoad = true
resolve() resolve()
} }
script.onerror = ()=>{
Modal.confirm({
title: t('frontPage.jsContent2'),
icon: createVNode(ExclamationCircleOutlined),
okText: 'Yes',
cancelText: 'No',
mask:false,
centered:true,
onOk() {
}
});
accountHomeData.googleLoad = true
}
document.body.appendChild(script); document.body.appendChild(script);
}) })
} }
@@ -154,6 +189,7 @@ export default defineComponent({
openWeiXinModel, openWeiXinModel,
ungroupGoogleModel, ungroupGoogleModel,
ungroupWeiXinModel, ungroupWeiXinModel,
modifyEmail,
} }
}, },
data(){ data(){
@@ -165,6 +201,8 @@ export default defineComponent({
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
.bindPage_page{ .bindPage_page{
height: 100%;
overflow-y: auto;
.bindPage_page_body{ .bindPage_page_body{
.bind_item{ .bind_item{
margin-bottom: 4rem; margin-bottom: 4rem;
@@ -194,6 +232,25 @@ export default defineComponent({
font-size: 1.8rem; font-size: 1.8rem;
} }
} }
.gallery_btn{
&.loading{
width: 10rem;
i{
&::before{
display: inline-block;
animation: loading 1s linear infinite;
@keyframes loading {
from{
transform: rotate(0deg);
}
to{
transform: rotate(360deg);
}
}
}
}
}
}
>.gmail_btn{ >.gmail_btn{
position: relative; position: relative;
#g_id_bind{ #g_id_bind{

View File

@@ -3,35 +3,34 @@
<div v-if="userDetail.status != 'canceled'"> <div v-if="userDetail.status != 'canceled'">
<div class="cancel_box_item"> <div class="cancel_box_item">
<div class="modal_title_text"> <div class="modal_title_text">
<div>What is your reason for cancelling AiDA?</div> <div>{{ $t('cancelRenewal.cancelling') }}</div>
</div> </div>
<textarea v-model="textareaValue" placeholder="Share your feedback here..."></textarea> <textarea v-model="textareaValue" placeholder="Share your feedback here..."></textarea>
</div> </div>
<div class="cancel_box_item cancel_box_item2"> <div class="cancel_box_item cancel_box_item2">
<div class="modal_title_text"> <div class="modal_title_text">
<div>Youre about to cancel your subscription</div> <div>{{ $t('cancelRenewal.subscription') }}</div>
<div> <div>
<i class="fi fi-sr-circle-xmark"></i> <i class="fi fi-sr-circle-xmark"></i>
<div class="modal_title_text_assistant">You will loose all your date</div> <div class="modal_title_text_assistant">{{ $t('cancelRenewal.looseDate') }}</div>
</div> </div>
<div> <div>
<i class="fi fi-sr-circle-xmark"></i> <i class="fi fi-sr-circle-xmark"></i>
<div class="modal_title_text_assistant">You will loose your settings and customizations</div> <div class="modal_title_text_assistant">{{ $t('cancelRenewal.looseCustomizations') }}</div>
</div> </div>
</div> </div>
<div class="tips"> <div class="tips">
<i class="fi fi-sr-triangle-warning"></i> <i class="fi fi-sr-triangle-warning"></i>
<div>Dont worry! The data you have in AiDA will be <div>{{ $t('cancelRenewal.DonWorry') }}</div>
safe.</div>
</div> </div>
<div class="button_box"> <div class="button_box">
<div class="gallery_btn white" @click="subscribe">Continue to renew</div> <div class="gallery_btn white" @click="subscribe">{{ $t('cancelRenewal.Continue') }}</div>
<div class="gallery_btn" @click="cancelSubscription">Yescancel it</div> <div class="gallery_btn" @click="cancelSubscription">{{ $t('cancelRenewal.cancel') }}</div>
</div> </div>
</div> </div>
</div> </div>
<div v-else class="no_renewal"> <div v-else class="no_renewal">
There are no subscription plans with automatic renewal. {{ $t('cancelRenewal.subscriptionRenewal') }}
</div> </div>
<div class="mark_loading" v-show="isShowMark"> <div class="mark_loading" v-show="isShowMark">
<a-spin size="large" /> <a-spin size="large" />

View File

@@ -96,6 +96,13 @@ export default defineComponent({
dataIndex: "id", dataIndex: "id",
key: "id", key: "id",
fixed: "left", fixed: "left",
},
{
title: 'User Name',
align: "center",
width: 100,
dataIndex: "username",
key: "username",
}, },
{ {
title: 'Create Time', title: 'Create Time',
@@ -112,13 +119,6 @@ export default defineComponent({
dataIndex: "status", dataIndex: "status",
key: "status", key: "status",
},{
title: 'Updata Time',
align: "center",
width: 200,
dataIndex: "updateTime",
key: "updateTime",
},{ },{
title: 'Total income', title: 'Total income',
align: "center", align: "center",
@@ -135,6 +135,13 @@ export default defineComponent({
dataIndex: "monthlyEarnings", dataIndex: "monthlyEarnings",
key: "monthlyEarnings", key: "monthlyEarnings",
openType:'all', openType:'all',
},{
title: 'Unpaid amount',
align: "center",
ellipsis: true,
width: 100,
dataIndex: "unpaidEarnings",
key: "unpaidEarnings",
},{ },{
title: 'Invitation Link', title: 'Invitation Link',
align: "center", align: "center",
@@ -143,12 +150,12 @@ export default defineComponent({
dataIndex: "link", dataIndex: "link",
key: "link", key: "link",
},{ },{
title: 'Unpaid amount', title: 'Updata Time',
align: "center", align: "center",
ellipsis: true, width: 200,
width: 100, dataIndex: "updateTime",
dataIndex: "unpaidEarnings", key: "updateTime",
key: "unpaidEarnings",
}, },
{ {
title: 'Operations', title: 'Operations',
@@ -263,7 +270,7 @@ export default defineComponent({
}; };
Https.axiosPost(Https.httpUrls.affiliateList, data).then( Https.axiosPost(Https.httpUrls.affiliateList, data).then(
(rv: any) => { (rv: any) => {
this.collectionList = rv.records; this.collectionList = rv.content;
this.total=rv.total this.total=rv.total
} }
); );

View File

@@ -15,6 +15,16 @@
:destroyOnClose="true" :destroyOnClose="true"
:zIndex="9999" :zIndex="9999"
> >
<div class="generalModel_btn" v-if="type == 'Modify'">
<div class="generalModel_closeIcon" @click.stop="cancelDsign()">
<!-- <i class="fi fi-rr-cross-small"></i> -->
<svg width="46" height="46" viewBox="0 0 46 46" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="23" cy="23" r="23" fill="white" fill-opacity="0.3"/>
<rect x="32.5063" y="12" width="3" height="29" rx="1.5" transform="rotate(45 32.5063 12)" fill="white"/>
<rect x="34.6274" y="32.5059" width="3" height="29" rx="1.5" transform="rotate(135 34.6274 32.5059)" fill="white"/>
</svg>
</div>
</div>
<div class="login_page"> <div class="login_page">
<div class="page_content"> <div class="page_content">
<!-- 账号密码和邮箱登录 start--> <!-- 账号密码和邮箱登录 start-->
@@ -27,7 +37,8 @@
'login_active', 'login_active',
]" ]"
> >
Bind Email <span v-if="type == 'Modify'">Modify Email</span>
<span v-else>Bind Email</span>
</div> </div>
</div> </div>
<!-- 账号密码登录 start --> <!-- 账号密码登录 start -->
@@ -84,7 +95,8 @@
:state="emailStap" :state="emailStap"
@click="submitPerLogin()" @click="submitPerLogin()"
> >
Bind Email <span v-if="type == 'Modify'">Modify Email</span>
<span v-else>Bind Email</span>
</div> </div>
</div> </div>
<!-- 账号密码登录 end --> <!-- 账号密码登录 end -->
@@ -114,6 +126,7 @@ export default defineComponent({
components: { components: {
VerificationCodeInput, VerificationCodeInput,
}, },
props:['type'],
setup(){ setup(){
let timer:any = 0; let timer:any = 0;
const {locale} = useI18n() const {locale} = useI18n()

View File

@@ -27,7 +27,7 @@
</div> </div>
<div class="renewContent"> <div class="renewContent">
<div class="generalModelTitle"> <div class="generalModelTitle">
Select The Best Plan For Your Needs {{ $t('Renew.title') }}
</div> </div>
<div class="renew_detail"> <div class="renew_detail">
<div class="name generalModelTitle">{{ current.title }}</div> <div class="name generalModelTitle">{{ current.title }}</div>
@@ -39,16 +39,16 @@
<div class="type" v-if="current.typeList.length > 1"> <div class="type" v-if="current.typeList.length > 1">
<label> <label>
<input name="pric" type="radio" value="monthly" v-model="current.type" @change="setPricType('monthly')"> <input name="pric" type="radio" value="monthly" v-model="current.type" @change="setPricType('monthly')">
Monthly {{ $t('Renew.Monthly') }}
</label> </label>
<label> <label>
<input name="pric" type="radio" value="year" v-model="current.type" @change="setPricType('year')"> <input name="pric" type="radio" value="year" v-model="current.type" @change="setPricType('year')">
Yearly {{ $t('Renew.Yearly') }}
</label> </label>
</div> </div>
<div class="info">{{ current.info }}</div> <div class="info">{{ current.info }}</div>
</div> </div>
<div class="gallery_btn gallery_btn_radius" @click="payment">Subscribe Now</div> <div class="gallery_btn gallery_btn_radius" @click="payment">{{ $t('Renew.SubscribeNow') }}</div>
</div> </div>
<div <div
class="login_footer_item_text" class="login_footer_item_text"
@@ -76,6 +76,7 @@ import { defineComponent,ref,reactive,toRefs ,onMounted} from "vue";
import { message } from "ant-design-vue"; import { message } from "ant-design-vue";
import payMethod from "@/component/Pay/payMethod.vue"; import payMethod from "@/component/Pay/payMethod.vue";
import { useStore } from "vuex"; import { useStore } from "vuex";
import { useI18n } from "vue-i18n";
const md5 = require("md5"); const md5 = require("md5");
export default defineComponent({ export default defineComponent({
components: { components: {
@@ -83,6 +84,7 @@ export default defineComponent({
}, },
setup(){ setup(){
const store = useStore(); const store = useStore();
const {t} = useI18n()
let renew = reactive({ let renew = reactive({
renewModel:false, renewModel:false,
renewModelMask:true, renewModelMask:true,
@@ -90,14 +92,14 @@ export default defineComponent({
}) })
let renewData = reactive({ let renewData = reactive({
personage:{ personage:{
title:'Personal version', title:t('Renew.PersonalVersion'),
price:{ price:{
monthly:'500', monthly:'500',
year:'5,000', year:'5,000',
}, },
unit:{ unit:{
monthly:'HKD / Month', monthly:t('Renew.HKDMonth'),
year:'HKD / Year', year:t('Renew.HKDYear'),
}, },
type:'monthly', type:'monthly',
typeList:['monthly','year'], typeList:['monthly','year'],

View File

@@ -27,10 +27,10 @@
</div> </div>
<div class="payMethodContent"> <div class="payMethodContent">
<div class="generalModelTitle"> <div class="generalModelTitle">
Purchase points {{ $t('upgradePlan.PurchasePoints') }}
</div> </div>
<div class="generalModelInfo"> <div class="generalModelInfo">
select a payment method {{ $t('upgradePlan.paymentmethod') }}
</div> </div>
<div class="payMethod_list"> <div class="payMethod_list">
<label class="payMethod_item"> <label class="payMethod_item">
@@ -66,8 +66,8 @@
</label> </label>
</div> </div>
<div class="payMethod_payAffirm_btn"> <div class="payMethod_payAffirm_btn">
<div class="gallery_btn white" @click="cancelDsign">Cancel</div> <div class="gallery_btn white" @click="cancelDsign">{{ $t('upgradePlan.Cancel') }}</div>
<div class="gallery_btn" @click="payAffirm">Payment</div> <div class="gallery_btn" @click="payAffirm">{{ $t('upgradePlan.Payment') }}</div>
</div> </div>
</div> </div>

View File

@@ -1,21 +1,17 @@
<template> <template>
<div class="signUp" v-if="signUp"> <div class="signUp">
<div class="selectSignUp" v-show="!isSelectSignUp"> <div class="selectSignUp" v-show="!isSelectSignUp">
<div class="back" @click="close">
&lt; BACK
</div>
<div class="title">Our Advantages</div> <div class="title">Our Advantages</div>
<div class="introduce"><span @click="()=>isSelectSignUp=true">LEARN MORE ALL OUR PRODUCT FEATURES</span></div> <div class="introduce"><span @click="()=>isSelectSignUp=true">LEARN MORE ALL OUR PRODUCT FEATURES</span></div>
<div class="gallery_list product_list"> <div class="gallery_list product_list">
<div class="gallery_item" v-for="item in productList" :key="item"> <div class="gallery_item" v-for="item in productList" :key="item">
<div class="product_signUp_box"> <div class="product_signUp_box">
<div class="title">{{ item.title }}</div> <div class="title">{{ item.title }}</div>
<div class="info" v-if="item.title != '------------------'">{{ item.info }}</div> <div class="info">{{ item.info }}</div>
<div class="info" v-else>-----</div>
<div class="detail">{{ item.detail }}</div> <div class="detail">{{ item.detail }}</div>
<div class="highlight" v-if="item.highlight">{{ item.highlight }}</div> <div class="highlight" v-if="item.highlight">{{ item.highlight }}</div>
<div class="gallery_btn gallery_btn_radius" v-if="item.title != '------------------'" :class="{active:item.title == '------------------'}" @click="createAccount">Create account</div> <div class="gallery_btn gallery_btn_radius" v-if="item.info != '/'" @click="createAccount">Create account</div>
<div class="gallery_btn gallery_btn_radius" v-else :class="{active:item.title == '------------------'}" @click="createAccount">Contact us</div> <a class="gallery_btn gallery_btn_radius" v-else href="mailto:info@code-create.com.hk">Contact us</a>
</div> </div>
<ul class="product_detail"> <ul class="product_detail">
<li v-for="detailItem in item.detailList">{{ detailItem }}</li> <li v-for="detailItem in item.detailList">{{ detailItem }}</li>
@@ -35,6 +31,7 @@
</div> </div>
</div> </div>
<div class="gallery_btn" style="width: 20rem;" @click="()=>isSelectSignUp=false">Create account</div> <div class="gallery_btn" style="width: 20rem;" @click="()=>isSelectSignUp=false">Create account</div>
<!-- <div class="gallery_btn" v-else style="width: 20rem;" @click="()=>isSelectSignUp=false">Contact us</div> -->
</div> </div>
<registerModel ref="registerModel"></registerModel> <registerModel ref="registerModel"></registerModel>
</div> </div>
@@ -54,7 +51,6 @@
registerModel:null registerModel:null
}) })
let data = reactive({ let data = reactive({
signUp:false,
isSelectSignUp:false, isSelectSignUp:false,
productList:[ productList:[
{ {
@@ -70,59 +66,33 @@
'Support monthly/annual payment options', 'Support monthly/annual payment options',
'Suitable for individual creators and freelance designers to use' 'Suitable for individual creators and freelance designers to use'
] ]
}, },{
{ title:"Education Edition",
title:"------------------", info:"/",
info:"--- / Year", detail:"Multi user management system for universities",
detail:"---------------------------------------------", highlight:"",
// highlight:"---------------",
detailList:[ detailList:[
'---------------------------------------', 'Multi user management system for universities',
'---------------------------------------', 'Credit limits are shared across the entire school',
'---------------------------------------', 'AI assisted design teaching function',
'---------------------------------------', 'Support sketch creativity and design inspiration teaching',
'---------------------------------------', 'Basic 3D design functions',
] ]
},{ },{
title:"------------------", title:"Enterprise Edition",
info:"--- / Year", info:"/",
detail:"---------------------------------------------", detail:"Enterprise level multi person collaboration system",
// highlight:"---------------", highlight:"",
detailList:[ detailList:[
'---------------------------------------', 'Enterprise level multi person collaboration system',
'---------------------------------------', 'Internal Credit Sharing within Enterprises',
'---------------------------------------', 'Brand DNA management system, customizable brand Exclusive design preferences',
'---------------------------------------', 'Cloud based design generation and management',
'---------------------------------------', 'Complete 3D design function, supporting high-definition printing output, professional plate making, and 3D rendering of renderings',
'Enterprise level data security assurance',
'Suitable for fashion design teams and brands to use',
] ]
}, },
// {
// title:"Education Edition",
// info:"XXX / Year",
// detail:"Multi user management system for universities",
// highlight:"Free 5-day trial",
// detailList:[
// 'Multi user management system for universities',
// 'Credit limits are shared across the entire school',
// 'AI assisted design teaching function',
// 'Support sketch creativity and design inspiration teaching',
// 'Basic 3D design functions',
// ]
// },{
// title:"Enterprise Edition",
// info:"XXX / Year",
// detail:"Enterprise level multi person collaboration system",
// highlight:"Free 5-day trial",
// detailList:[
// 'Enterprise level multi person collaboration system',
// 'Internal Credit Sharing within Enterprises',
// 'Brand DNA management system, customizable brand Exclusive design preferences',
// 'Cloud based design generation and management',
// 'Complete 3D design function, supporting high-definition printing output, professional plate making, and 3D rendering of renderings',
// 'Enterprise level data security assurance',
// 'Suitable for fashion design teams and brands to use',
// ]
// },
], ],
introductList:[ introductList:[
{ {
@@ -152,12 +122,7 @@
}, },
] ]
}) })
const init = ()=>{
data.signUp = true
}
const close = ()=>{ const close = ()=>{
data.signUp = false
emit('close')
} }
const createAccount = ()=>{ const createAccount = ()=>{
if(window.innerWidth < 768){ if(window.innerWidth < 768){
@@ -171,7 +136,6 @@
return { return {
...toRefs(dom), ...toRefs(dom),
...toRefs(data), ...toRefs(data),
init,
close, close,
createAccount, createAccount,
} }

View File

@@ -19,6 +19,7 @@ export default {
SentTo:'发送', SentTo:'发送',
Resend:'重发', Resend:'重发',
Credits:'积分', Credits:'积分',
SubscribeNow:'立即订阅',
TaskList:'任务列表', TaskList:'任务列表',
ViewOrders:'查询订单', ViewOrders:'查询订单',
jsContent1:'邮箱格式不正确', jsContent1:'邮箱格式不正确',
@@ -105,6 +106,8 @@ export default {
payment:'选择付款方式', payment:'选择付款方式',
Cancel:'取消', Cancel:'取消',
Payment:'付款', Payment:'付款',
PurchasePoints:'购买',
paymentmethod:'请选择付款方式',
policy1:'我承认我已阅读并同意', policy1:'我承认我已阅读并同意',
policy2:'条款和条件', policy2:'条款和条件',
policy3:'(包括服务范围)及', policy3:'(包括服务范围)及',
@@ -598,7 +601,7 @@ export default {
//account首页 //account首页
myInfor:'我的信息', myInfor:'我的信息',
bindWeChat:'绑定', bindWeChat:'绑定',
cancel:'订阅', cancel:'取消订阅',
//编辑个人信息页 //编辑个人信息页
userName:'用户名', userName:'用户名',
@@ -619,6 +622,36 @@ export default {
hisWorks:'他的作品', hisWorks:'他的作品',
works:'作品', works:'作品',
}, },
frontPage:{
BindWechat:'绑定微信',
Unbound:'未绑定',
BindNow:'绑定',
Unbind:'取消绑定',
BindGmail:'绑定谷歌',
ModifyEmail:'修改邮箱',
Modify:'修改',
jsContent1:'取消绑定成功',
jsContent2:'当前网络无法加载谷歌',
},
Renew:{
title:'根据您的需求选择最佳计划',
Monthly:'月',
Yearly:'年',
SubscribeNow:'立即订阅',
PersonalVersion:'个人版',
HKDMonth:'HKD / 月',
HKDYear:'HKD / 年',
},
cancelRenewal:{
cancelling:'您取消AiDA的原因是什么',
subscription:'您即将取消订阅',
looseDate:'你将失去所有功能',
looseCustomizations:'你将丢失你的设置和自定义',
DonWorry:'别担心!您在 AiDA 中的数据是安全的.',
Continue:'继续续订',
cancel:'是的,取消',
subscriptionRenewal:'没有自动续订的订阅计划.',
},
guide:{ guide:{
guide1:"在<strong>工作空间</strong>中,您可以个性化您的设计设置,包括选择适用于男装或女装的设计,以及选择用于创作的人体模型。", guide1:"在<strong>工作空间</strong>中,您可以个性化您的设计设置,包括选择适用于男装或女装的设计,以及选择用于创作的人体模型。",
guide2:"选择您要设计的服装性别。", guide2:"选择您要设计的服装性别。",

View File

@@ -19,6 +19,7 @@ export default {
SentTo:'Sent to', SentTo:'Sent to',
Resend:'Resend', Resend:'Resend',
Credits:'Credits', Credits:'Credits',
SubscribeNow:'Subscribe now',
TaskList:'Task List', TaskList:'Task List',
ViewOrders:'View Orders', ViewOrders:'View Orders',
jsContent1:'The email format is incorrect', jsContent1:'The email format is incorrect',
@@ -105,6 +106,8 @@ export default {
payment:'Select payment method', payment:'Select payment method',
Cancel:'Cancel', Cancel:'Cancel',
Payment:'Payment', Payment:'Payment',
PurchasePoints:'Purchase points',
paymentmethod:'select a payment method',
policy1:'I acknowledge that I have read, understand, and agree with the ', policy1:'I acknowledge that I have read, understand, and agree with the ',
policy2:'Terms and Conditions', policy2:'Terms and Conditions',
policy3:' (including the Scope of service) and the ', policy3:' (including the Scope of service) and the ',
@@ -618,6 +621,36 @@ export default {
hisWorks:'His works', hisWorks:'His works',
works:'Works', works:'Works',
}, },
frontPage:{
BindWechat:'Bind Wechat',
Unbound:'Unbound',
BindNow:'Bind Now',
Unbind:'Unbind',
BindGmail:'Bind Gmail',
ModifyEmail:'Modify Email',
Modify:'Modify',
jsContent1:'Successful discharge',
jsContent2:'The current network cannot load Google',
},
Renew:{
title:'Select The Best Plan For Your Needs',
Monthly:'Monthly',
Yearly:'Yearly',
SubscribeNow:'Subscribe Now',
PersonalVersion:'Personal version',
HKDMonth:'HKD / Month',
HKDYear:'HKD / Year',
},
cancelRenewal:{
cancelling:'What is your reason for cancelling AiDA?',
subscription:'Youre about to cancel your subscription',
looseDate:'You will loose all your date',
looseCustomizations:'You will loose your settings and customizations',
DonWorry:'Dont worry! The data you have in AiDA will be safe.',
Continue:'Continue to renew',
cancel:'Yescancel it',
subscriptionRenewal:'There are no subscription plans with automatic renewal.',
},
createSlogan:{ createSlogan:{
title:'Create Slogan', title:'Create Slogan',
Color:'Color', Color:'Color',

View File

@@ -23,6 +23,12 @@ const routes: Array<RouteRecordRaw> = [
meta:{enter:'all',}, meta:{enter:'all',},
component: _import('LoginPage') component: _import('LoginPage')
}, },
{
path: '/register',
name: 'register',
meta:{enter:'all',},
component: _import('Register')
},
// { // {
// path: '/register', // path: '/register',
// name: 'register', // name: 'register',

View File

@@ -92,7 +92,7 @@
<!-- <i @click="Assignment" class="fi fi-rr-gift" title="Assignment"></i> --> <!-- <i @click="Assignment" class="fi fi-rr-gift" title="Assignment"></i> -->
<i @click="UpgradePlan" title="Purchase" class="fi fi-rr-shop"></i> <i @click="UpgradePlan" title="Purchase" class="fi fi-rr-shop"></i>
</div> </div>
<div v-if="userDetail.systemUser == 0 || userDetail.systemUser == 3" class="gallery_btn" style="margin-left: 3rem;" @click="subscribe">Subscribe now</div> <div v-if="userDetail.systemUser == 0 || userDetail.systemUser != 3" class="gallery_btn" style="margin-left: 3rem;" @click="subscribe">{{$t('Header.SubscribeNow')}}</div>
<div v-else style="width: 30rem;"></div> <div v-else style="width: 30rem;"></div>
</div> </div>
<navRouter :routerList="navRouterList"></navRouter> <navRouter :routerList="navRouterList"></navRouter>

View File

@@ -1,5 +1,5 @@
<template> <template>
<div class="homeRecommend_max" ref="homeRecommendMax"> <div class="homeRecommend_max">
<header class="homeRecommend_heade"> <header class="homeRecommend_heade">
<div class="homeRecommend_right_content"> <div class="homeRecommend_right_content">
<div class="homeRecommend_user_content"> <div class="homeRecommend_user_content">
@@ -8,26 +8,9 @@
@click="turnToNewPage('https://www.aidlab.hk/en/')" @click="turnToNewPage('https://www.aidlab.hk/en/')"
src="@/assets/images/loginPage/aida_logo.png" src="@/assets/images/loginPage/aida_logo.png"
/> />
<div
class="login_footer_item_text"
@click="turnToWindow(
'https://code-create.com.hk/aida-terms-and-conditions/'
)"
>
Terms&Conditions
</div>
<div
class="login_footer_item_text"
@click="turnToWindow(
'https://code-create.com.hk/aida-subscription-agreement/'
)"
>
Privacy Policy
</div>
</div> </div>
</div> </div>
<div class="homeRecommend_right"> <div class="homeRecommend_right">
<a class="gallery_btn" v-if="userDetail.systemUser == 0" href="https://code-create.com.hk/aida/" target="_blank">Upgrade to an official user</a>
<div class="gallery_btn" v-if="userDetail.systemUser == 1 && !isMoblie" @click="goHome">Home</div> <div class="gallery_btn" v-if="userDetail.systemUser == 1 && !isMoblie" @click="goHome">Home</div>
<div class="gallery_btn white" v-if="userDetail.systemUser != -1" @click="logout">log off</div> <div class="gallery_btn white" v-if="userDetail.systemUser != -1" @click="logout">log off</div>
</div> </div>
@@ -36,7 +19,6 @@
<div class="gallery_btn white" @click="setRegister">Sign up</div> <div class="gallery_btn white" @click="setRegister">Sign up</div>
</div> </div>
</header> </header>
<signUp ref="signUp" @close="signUpClose"></signUp>
<div class="homeRecommend_content_body"> <div class="homeRecommend_content_body">
<div class="homeRecommend_content_body_recommend"> <div class="homeRecommend_content_body_recommend">
<img src="@/assets/images/homePage/home-bg.png"> <img src="@/assets/images/homePage/home-bg.png">
@@ -45,12 +27,6 @@
<h1>AiDA</h1> <h1>AiDA</h1>
<h3>bloom your creativity</h3> <h3>bloom your creativity</h3>
</div> </div>
<div class="content_body_recommend_center_btn">
<div @click="setRegister" class="gallery_btn white" style="border: none; margin-right: 2rem;" >SUBSCRIBE NOW</div>
<div @click="setRegister" class="gallery_btn white" style="border: none;" >START TRIAL</div>
<!-- <a class="gallery_btn white" style="border: none;" href="https://code-create.com.hk/aida/" target="_blank">SUBSCRIBE NOW</a>
<a class="gallery_btn white" style="border: none;" href="https://code-create.com.hk/aida-trial/" target="_blank">START TRIAL</a> -->
</div>
</div> </div>
</div> </div>
<Works :isScroll="false"></Works> <Works :isScroll="false"></Works>
@@ -77,21 +53,17 @@ import { useI18n } from "vue-i18n";
import { useRouter } from 'vue-router'; import { useRouter } from 'vue-router';
import { gsap, TweenMax } from "gsap"; import { gsap, TweenMax } from "gsap";
import { ScrollTrigger } from "gsap/ScrollTrigger"; import { ScrollTrigger } from "gsap/ScrollTrigger";
import signUp from '@/component/mainPage/signUp/index.vue'
export default defineComponent({ export default defineComponent({
components: { components: {
VerificationCodeInput, VerificationCodeInput,
Habit, Habit,
Works, Works,
signUp,
}, },
setup(){ setup(){
const store = useStore(); const store = useStore();
const router = useRouter(); const router = useRouter();
let registerModel = ref() let registerModel = ref()
let data = reactive({ let data = reactive({
homeRecommendMax:null,
signUp:null
}) })
let isMoblie = ref(false) let isMoblie = ref(false)
let userDetail = computed(()=>{ let userDetail = computed(()=>{
@@ -100,13 +72,6 @@ export default defineComponent({
let setLogin = ()=>{ let setLogin = ()=>{
router.push("/login"); router.push("/login");
} }
let setRegister = () =>{
data.signUp.init()
data.homeRecommendMax.classList.add('openSignUp')
}
let signUpClose = ()=>{
data.homeRecommendMax.classList.remove('openSignUp')
}
let setAdminUp = ()=>{ let setAdminUp = ()=>{
let scrollDom = document.querySelector('.homeRecommend_content_body') let scrollDom = document.querySelector('.homeRecommend_content_body')
scrollDom.scrollTo({ scrollDom.scrollTo({
@@ -140,6 +105,9 @@ export default defineComponent({
},500) },500)
} }
const setRegister = ()=>{
router.push('/register');
}
onMounted(()=>{ onMounted(()=>{
window.addEventListener('resize',updataIsMoblie) window.addEventListener('resize',updataIsMoblie)
}) })
@@ -151,12 +119,11 @@ export default defineComponent({
userDetail, userDetail,
setLogin, setLogin,
registerModel, registerModel,
setRegister,
signUpClose,
setAdminUp, setAdminUp,
logout, logout,
goHome, goHome,
isMoblie, isMoblie,
setRegister,
} }
}, },
data() { data() {
@@ -222,21 +189,6 @@ export default defineComponent({
.homeRecommend_content_body{ .homeRecommend_content_body{
flex: 1; flex: 1;
} }
&.openSignUp{
.homeRecommend_heade{
position: relative;
background: #fff !important;
.login_footer_item_text{
display: block;
}
}
.homeRecommend_content_body{
display: none;
}
.homeRecommend_content_adminTop{
display: none;
}
}
} }
.homeRecommend_heade { .homeRecommend_heade {
display: flex; display: flex;
@@ -354,11 +306,7 @@ export default defineComponent({
font-size: 6rem; font-size: 6rem;
} }
} }
.content_body_recommend_center_btn{
a:nth-child(1){
margin-right: 3rem;
}
}
} }
} }
} }

View File

@@ -115,7 +115,7 @@
)" )"
@dragstart="dragstart($event, index)" @dragstart="dragstart($event, index)"
@dragover.prevent @dragover.prevent
@drop="dragDrop($event, index)"> @drop="dragDrop($event, index,likeDesignCollectionList)">
<div class="content_img_flex"> <div class="content_img_flex">
<img class="content_img" :src="design.designOutfitUrl" <img class="content_img" :src="design.designOutfitUrl"
:key="design.designOutfitUrl" /> :key="design.designOutfitUrl" />
@@ -133,7 +133,7 @@
</div> </div>
</div> </div>
<!-- </draggable> --> <!-- </draggable> -->
<div class="content_img_block" :style="collStyle" v-for="( <div class="content_img_block" :style="collStyle" draggable v-for="(
design, index design, index
) in designCollectionList" :key="design?.designItemId"> ) in designCollectionList" :key="design?.designItemId">
<div class="content_img_flex" <div class="content_img_flex"
@@ -144,8 +144,10 @@
index, index,
designCollectionList, designCollectionList,
'dislike' 'dislike'
) )"
"> @dragstart="dragstart($event, index)"
@dragover.prevent
@drop="dragDrop($event, index,designCollectionList)">
<img class="content_img" :src="design.designOutfitUrl" /> <img class="content_img" :src="design.designOutfitUrl" />
</div> </div>
<div class="icon iconfont icon-jushoucang icon_like" :class="[driver__.driver?index == 0?driver__.index == 32?'Guide_img showEvents':'':'':'']" @click.stop=" <div class="icon iconfont icon-jushoucang icon_like" :class="[driver__.driver?index == 0?driver__.index == 32?'Guide_img showEvents':'':'':'']" @click.stop="
@@ -155,6 +157,13 @@
) )
"> ">
</div> </div>
<i class="fi fi-rr-trash icon_delete" @click.stop="
deleteDesignCollection(
designCollectionList,
index
)
">
</i>
</div> </div>
</div> </div>
@@ -278,10 +287,8 @@ export default defineComponent({
} }
}, },
activated() { activated() {
console.log('Home component activated');
}, },
deactivated() { deactivated() {
console.log('Home component deactivated');
}, },
setup(props,{emit}) { setup(props,{emit}) {
const store = useStore(); const store = useStore();
@@ -597,9 +604,10 @@ export default defineComponent({
this.dragIdx = index this.dragIdx = index
}, },
dragDrop (e:any, index:any) { dragDrop (e:any, index:any,list:any) {
let _teams = this.likeDesignCollectionList //将hotteams存起来 let _teams = list //将hotteams存起来
let _dragitem = _teams[this.dragIdx] //将被拖拽的那条数据存起来 let _dragitem = _teams[this.dragIdx] //将被拖拽的那条数据存起来
if(!_dragitem)return
_teams.splice(this.dragIdx, 1) //删除被拖拽的那条数据 _teams.splice(this.dragIdx, 1) //删除被拖拽的那条数据
_teams.splice(index, 0, _dragitem) //将被拖拽的那条数据放到数组中指定的位置 _teams.splice(index, 0, _dragitem) //将被拖拽的那条数据放到数组中指定的位置
}, },
@@ -953,7 +961,9 @@ export default defineComponent({
}); });
return colorBoards; return colorBoards;
}, },
deleteDesignCollection(list:any,index:any){
list.splice(index,1)
},
likeDesignCollection(design: any, index: any) { likeDesignCollection(design: any, index: any) {
let data = { let data = {
designItemId: design.designItemId, designItemId: design.designItemId,
@@ -1586,7 +1596,7 @@ export default defineComponent({
vertical-align: top; vertical-align: top;
flex-shrink: 0; flex-shrink: 0;
max-height: 100%; max-height: 100%;
&:hover .icon_like { &:hover .icon_like,&:hover .icon_delete {
display: block; display: block;
} }
@@ -1604,7 +1614,7 @@ export default defineComponent({
} }
&.active{ &.active{
.icon_like{ .icon_like,.icon_delete{
display: block; display: block;
} }
.content_img_flex { .content_img_flex {
@@ -1612,12 +1622,14 @@ export default defineComponent({
} }
} }
.content_img { .content_img {
max-width: 100%; // max-width: 100%;
max-height: 100%; width: 100%;
height: 100%;
// max-height: 100%;
object-fit: contain; object-fit: contain;
} }
.icon_like { .icon_like,.icon_delete {
font-size: 2.4rem; font-size: 2.4rem;
top: 1rem; top: 1rem;
right: 1rem; right: 1rem;
@@ -1625,7 +1637,9 @@ export default defineComponent({
cursor: pointer; cursor: pointer;
display: none; display: none;
} }
.icon_delete{
top: 5rem;
}
.icon-jushoucang { .icon-jushoucang {
color: #000; color: #000;
} }

View File

@@ -16,7 +16,7 @@
'login_active', 'login_active',
]" ]"
> >
Log on to AiDA 3.1 Log on to AiDA 3.0
</div> </div>
</div> </div>
<!-- 账号密码登录 start --> <!-- 账号密码登录 start -->

236
src/views/Register.vue Normal file
View File

@@ -0,0 +1,236 @@
<template>
<div class="homeRecommend_max openSignUp">
<header class="homeRecommend_heade">
<div class="homeRecommend_right_content">
<div class="homeRecommend_user_content">
<img
class="homeRecommend_logo"
@click="turnToNewPage('https://www.aidlab.hk/en/')"
src="@/assets/images/loginPage/aida_logo.png"
/>
<div
class="login_footer_item_text"
@click="turnToWindow(
'https://code-create.com.hk/aida-terms-and-conditions/'
)"
>
Terms&Conditions
</div>
<div
class="login_footer_item_text"
@click="turnToWindow(
'https://code-create.com.hk/aida-subscription-agreement/'
)"
>
Privacy Policy
</div>
</div>
</div>
<div class="homeRecommend_right">
<div class="gallery_btn" v-if="userDetail.systemUser == 1 && !isMoblie" @click="goHome">Home</div>
<div class="gallery_btn white" v-if="userDetail.systemUser != -1" @click="logout">log off</div>
</div>
<div class="homeRecommend_right" v-if="userDetail.systemUser == -1">
<div class="gallery_btn" @click="setLogin">Login</div>
</div>
</header>
<signUp ref="signUp" @close="signUpClose"></signUp>
</div>
</template>
<script >
import { defineComponent, toRefs, reactive, ref , nextTick,computed, onMounted, onBeforeUnmount } from "vue";
import { setCookie, getCookie, WriteCookie,clonAllCookie } from "@/tool/cookie";
import { Https } from "@/tool/https";
import { useStore } from "vuex";
import { useRouter } from 'vue-router';
import signUp from '@/component/mainPage/signUp/index.vue'
export default defineComponent({
components: {
signUp,
},
setup(){
const store = useStore();
const router = useRouter();
let registerModel = ref()
let data = reactive({
homeRecommendMax:null,
signUp:null
})
let isMoblie = ref(false)
let userDetail = computed(()=>{
return store.state.UserHabit.userDetail
})
let setLogin = ()=>{
router.push("/login");
}
let logout = ()=>{
let userInfo = store.state.UserHabit.userDetail;
let data = {
userId: userInfo?.userId,
};
store.commit('createDetail')
if(!data.userId) return
Https.axiosPost(Https.httpUrls.accountLogout, data).then((rv) => {
clonAllCookie();
});
}
let goHome = ()=>{
router.push('/home');
}
let time
let updataIsMoblie = ()=>{
clearTimeout(time)
time = setTimeout(()=>{
if(window.innerWidth < 768){
isMoblie.value = true
}else{
isMoblie.value = false
}
},500)
}
onMounted(()=>{
window.addEventListener('resize',updataIsMoblie)
})
onBeforeUnmount(() => {
window.removeEventListener('resize', updataIsMoblie);
});
return {
...toRefs(data),
userDetail,
setLogin,
registerModel,
logout,
goHome,
isMoblie,
}
},
data() {
return {
};
},
watch: {
// credits.value(newVal,oldVal){
// console.log(String(newVal).length);
// }
},
mounted() {
},
methods: {
turnToNewPage(url) {
window.open(url);
},
turnToWindow(url) {
window.open(url);
},
},
});
</script>
<style lang="less" scoped>
.homeRecommend_max{
position: relative;
display: flex;
height: 100%;
flex-direction: column;
&.openSignUp{
.homeRecommend_heade{
position: relative;
background: #fff !important;
.login_footer_item_text{
display: block;
}
}
.homeRecommend_content_adminTop{
display: none;
}
}
}
.homeRecommend_heade {
display: flex;
justify-content: space-between;
// padding: 0 30px;
padding: 1rem 4rem;
width: 100%;
// height: 7rem;
flex-shrink: 0;
// background: rgba(255, 255, 255, 0.2);
// border-bottom: 0.1rem solid rgba(3, 3, 3, 0.1);
position: absolute;
align-items: center;
z-index: 2;
@media (max-width: 768px) {
z-index: 1000;
}
.homeRecommend_right{
width: 33%;
display: flex;
justify-content: flex-end;
align-items: center;
.gallery_btn{
// color: #000;
// background: #fff;
// border: 2px solid #39215b;
// margin-left: 2rem;
width: 13rem;
text-align: center;
&.gallery_btn:nth-child(1){
margin-right: 3rem;
}
}
}
.homeRecommend_logo {
width: 14.4rem;
height: 3.2rem;
margin-top: 0;
}
.login_footer_item_text{
margin-left: 5rem;
display: none;
}
.homeRecommend_right_content {
top: 0;
left: 0;
display: flex;
width: 40%;
height: 100%;
align-items: center;
overflow: hidden;
.homeRecommend_user_content {
display: flex;
align-items: center;
position: relative;
height: 3.7rem;
&.marLeft2{
margin-left: 2rem;
}
.username {
font-size: 1.8rem;
color: #1a1a1a;
margin: 0 0.8rem;
font-weight: 900;
span{
margin: .7rem;
}
}
.icon-xiala {
font-size: 1.4rem;
cursor: pointer;
transition: .3s all;
}
.icon_rotate {
-moz-transform: rotate(180deg);
-webkit-transform: rotate(180deg);
transform: rotate(180deg);
animation-direction: 0.5s;
}
}
}
}
</style>