detail preview可以设置空颜色

This commit is contained in:
X1627315083
2025-05-08 14:09:12 +08:00
parent a4e040d0ff
commit 610e715ca7
30 changed files with 1323 additions and 6496 deletions

View File

@@ -41,6 +41,7 @@
<span>percentOff(%): <span>*</span></span>
<input
:class="{active:title != 'Add'}"
:disabled="title != 'Add'"
v-model="percentOff"
placeholder="Please enter percentOff"
type="text"
@@ -51,6 +52,7 @@
<span>Commission Rate: <span>*</span></span>
<input
:class="{active:title != 'Add'}"
:disabled="title != 'Add'"
v-model="commissionRate"
placeholder="Please enter commission rate"
type="text"
@@ -68,6 +70,7 @@
<span>MaxRedemptions:</span>
<input
:class="{active:title != 'Add'}"
:disabled="title != 'Add'"
v-model="maxRedemptions"
placeholder="Please enter maximum"
type="text"

File diff suppressed because it is too large Load Diff

View File

@@ -264,7 +264,7 @@ export default defineComponent({
let isCurrent = list[i].id == detailData?.selectDetail?.id
let data:any = {
changed:false,
color:(newData && detailData.currentDetailType == 'color' && isCurrent)?`${newData.rgba.r} ${newData.rgba.g} ${newData.rgba.b}`:`${list[i].color.rgba.r} ${list[i].color.rgba.g} ${list[i].color.rgba.b}`,
color:(detailData.currentDetailType == 'color' && isCurrent)?(newData?.rgba?`${newData.rgba.r} ${newData.rgba.g} ${newData.rgba.b}`:''):`${list[i].color.rgba.r} ${list[i].color.rgba.g} ${list[i].color.rgba.b}`,
designType:(newData && detailData.currentDetailType == 'sketch' && isCurrent)?newData.designType:list[i].designType,
id:(newData && detailData.currentDetailType == 'sketch' && isCurrent)?newData.id:list[i].id,
// maskMinioUrl:'',

View File

@@ -260,8 +260,8 @@ export default defineComponent({
const getSubmitData = (value:any)=>{
let parentNode = document.getElementsByClassName('molepositon')[0].getElementsByClassName("designOpenrtion_imgMask")[0].getBoundingClientRect()
let ratio = detailData.frontBack.body.layersObject[0].imageSize[0]/parentNode.width
let arr:any = sort(detailData.frontBack.front)
// let arr:any = sort(JSON.parse(JSON.stringify(detailData.frontBack.front)))
// let arr:any = sort(detailData.frontBack.front)
let arr:any = sort(JSON.parse(JSON.stringify(detailData.frontBack.front)))
let num = 10
arr.forEach((item:any)=>{
item.priority = num++

View File

@@ -32,7 +32,6 @@
<script lang="ts">
import { LoadingOutlined } from "@ant-design/icons-vue";
import { defineComponent,h ,toRefs,ref,reactive,onMounted,nextTick,provide,computed} from 'vue'
// import HeaderComponent from "@/component/HomePage/Header.vue";
// import RobotAssist from "@/component/HomePage/RobotAssist.vue";
import { Https } from "@/tool/https";
import { message, Upload, Modal } from "ant-design-vue";

View File

@@ -1,838 +0,0 @@
<template>
<div class="header_max">
<header class="header_component">
<div class="header_right_content">
<div class="header_user_icon"></div>
<!-- <div class="header_icon icon iconfont icon-touxiang3"></div> -->
<div class="header_user_content">
<div v-if="isTest" class="username"><span>/</span> {{$t('Header.hello')}}@{{ $t('isTest.userName') }}</div>
<div v-else class="username"><span>/</span> {{$t('Header.hello')}}@{{ userInfo?.userName }}</div>
<div
v-if="!isMurmur"
:class="[
'icon',
'iconfont',
'icon-xiala',
isShowOperate ? 'icon_rotate' : '',
]"
@click.stop="changeShowOperateContent()"
></div>
</div>
<div @click="openTask">abc</div>
<!-- <div class="header_user_content marLeft2">
<span class="username">{{$t('Header.language')}}</span>
<div
:class="[
'icon',
'iconfont',
'icon-xiala',
isLanguage ? 'icon_rotate' : '',
]"
@click.stop="changeLanguage()"
></div>
</div> -->
<div
class="trialApproval button_second credits hideChecked"
>
Credits:&nbsp;
<span :title="credits">
<!-- <div>{{ String(credits.value[credits.value.legnth-1]) }}</div> -->
<div class="credits_item" v-for="item in String(credits)" :style="{'transform': 'translateY('+item*-100+'%)'}">
<div v-for="numItem in 10">{{ numItem-1 }}</div>
</div>
</span>
<i @click="getCredits" class="fi fi-br-refresh" :class="[activeCredits?'active':'']"></i>
<i @click="Assignment" class="fi fi-rr-gift" title="Assignment"></i>
<i @click="UpgradePlan" title="Purchase" class="fi fi-rr-shop"></i>
</div>
</div>
<nav class="header_nav_content">
<div :class="['nav_item',$route.name === 'home' ? 'select_nav' : '',
]"
@click="turnToPage('home')"
>
{{$t('Header.HOME')}}
</div>
<div
:class="['nav_item', $route.name === 'library' ? 'select_nav' : '',]"
@click="turnToPage('library')"
>
{{$t('Header.LIBRARY')}}
</div>
<div
:class="['nav_item',$route.name === 'history' ? 'select_nav' : '',]"
@click="turnToPage('history')"
>
{{$t('Header.HISTORY')}}
</div>
</nav>
<div class="header_right">
<img
class="header_logo"
@click="turnToNewPage('https://www.aidlab.hk/en/')"
src="@/assets/images/loginPage/aida_logo.png"
/>
<Habit></Habit>
</div>
</header>
<nav class="select_block" v-show="isShowOperate">
<!-- <div class="select_item" @click="showBindEmailModal()">
<span class="icon iconfont icon-youxiang"></span><span class="select_item_des">{{$t('Header.bindEmail')}}</span>
</div> -->
<div class="select_item" @click.stop="isLanguage = !isLanguage">
<span class="icon iconfont icon-yuyan"></span>
<span class="select_item_des">{{$t('Header.language')}}</span>
</div>
<div class="select_item" @click="orderForm()">
<i class="fi fi-rs-notebook"></i>
<span class="select_item_des">View Orders</span>
</div>
<div class="select_item" @click="logout()">
<span class="icon iconfont icon-tuichu"></span
><span class="select_item_des">{{$t('Header.logOff')}}</span>
</div>
</nav>
<ul class="select_block select_list" v-show="isLanguage">
<li class="select_item" v-for="item in language" @click="setLocale(item.value)">
<span class="select_item_des">{{ item.name }}</span>
</li>
</ul>
<a-modal
class="modal_component"
v-model:visible="bindEmailVisible"
:footer="null"
title="Mailbox binding"
width="56rem"
:maskClosable="false"
:keyboard="false"
:centered="true"
>
<template #closeIcon v-if="!isHaveBindEmail && bindEmailStep === 1">
<div class="skip_content">{{$t('Header.skip')}}</div>
</template>
<div class="bind_email_content" v-if="isHaveBindEmail">
<div class="bind_email_tip">{{$t('Header.emailContent')}}</div>
<div class="bind_email">{{ userInfo.email }}</div>
</div>
<div class="bind_email_content" v-else>
<!-- 绑定邮箱第一步 start -->
<div v-show="bindEmailStep === 1">
<div class="bind_email_form_content">
<div class="bind_email_form_title">{{$t('Header.Email')}}</div>
<input
class="bind_email_form_input"
placeholder="Enter a new email"
v-model="email"
@keydown.enter="emailNextStepFun()"
/>
</div>
<div
class="bind_email_submit_button"
@click="emailNextStepFun()"
>
{{$t('Header.NextStep')}}
</div>
</div>
<!-- 绑定邮箱第一步 end -->
<!-- 绑定邮箱第二步 start -->
<div v-show="bindEmailStep === 2">
<div @click="emailLastStepFun()">
<span class="icon iconfont icon--shangyibu"></span
><span class="email_last_step_content"
>{{$t('Header.verification')}}</span
>
</div>
<div class="email_last_step_des">
<div class="sent_email_content">
{{$t('Header.SentTo')}} {{ email }}
</div>
<div class="tip_content">
<span v-show="time">{{ time }}s</span>
<span v-show="!time" @click="emailNextStepFun()"
>{{$t('Header.Resend')}}Resend</span
>
</div>
</div>
<VerificationCodeInput
:ct="emailCode"
@sendCaptcha="submitBindEmail($event)"
></VerificationCodeInput>
</div>
<!-- 绑定邮箱第一步 end -->
</div>
</a-modal>
<payOrder ref="payOrder"></payOrder>
<UpgradePlan ref="UpgradePlan"></UpgradePlan>
<TaskPage ref="TaskPage"></TaskPage>
</div>
</template>
<script >
import { defineComponent, createVNode, ref, computed } from "vue";
import { isEmail } from "@/tool/util";
import { setCookie, getCookie, WriteCookie } from "@/tool/cookie";
import payOrder from "@/component/Pay/payOrder.vue";
import VerificationCodeInput from "@/component/LoginPage/verificationCodeInput.vue";
import Habit from "@/component/Detail/habit.vue";
import TaskPage from "@/component/HomePage/TaskPage.vue";
import UpgradePlan from "@/component/HomePage/UpgradePlan.vue";
import { Https } from "@/tool/https";
import { Modal, message } from "ant-design-vue";
import { ExclamationCircleOutlined } from "@ant-design/icons-vue";
import { useStore } from "vuex";
import { setLang } from "@/tool/guide";
import { useI18n } from "vue-i18n";
export default defineComponent({
components: {
VerificationCodeInput,
Habit,
UpgradePlan,
payOrder,
TaskPage,
},
setup(){
const store = useStore();
const {t} = useI18n()
const {locale} = useI18n()
let isTest = ref()
let isMurmur = ref()
let credits = computed(()=>{
return store.state.UserHabit.credits.value
})
let activeCredits = ref(false)
return {
store,
t,
locale,
isTest,
isMurmur,
credits,
activeCredits,
}
},
data() {
return {
isShowOperate: false,
bindEmailVisible: false,
isHaveBindEmail: false,
bindEmailStep: 1,
email: "",
emailCode: ["", "", "", "", "", ""], //邮箱验证码
time: 60, //60秒倒计时
timer: 0,
userInfo: {},
timerOperate: null,
numTime: 30,
timerSec: null,
modalWarning: null,
isLanguage: false,
language:[
{name:'English',value:'ENGLISH'},
{name:'中文',value:'CHINESE_SIMPLIFIED'},
// {name:'한국인',value:'KOREAN'},
// {name:'にほんご',value:'JAPANESE'},
// {name:'Русский',value:'RUSSIAN'},
// {name:'Français',value:'FRENCH'},
// {name:'แบบไทย',value:'THAI'},
// {name:'Tiếng Việt',value:'VIETNAMESE'},
// {name:'Italiano',value:'ITALIAN'},
],
};
},
watch: {
// credits.value(newVal,oldVal){
// console.log(String(newVal).length);
// }
},
mounted() {
let isTest = getCookie('isTest')//获取是否是试用用户
this.isTest =JSON.parse(isTest)
let isMurmur = getCookie('isMurmur')//获取是否是试用用户
this.isMurmur =JSON.parse(isMurmur)
this.userInfo = JSON.parse(getCookie("userInfo"));
if (!this.userInfo) {
this.$router.replace("/");
} else {
this.accountIsLogin(this.userInfo);
}
this.isHaveBindEmail = this.userInfo?.email ? true : false;
if(!this.isMurmur){
this.operateClick();
document.addEventListener("click", this.operateClick);
}
this.getCredits()
this.getLang('')
},
methods: {
turnToNewPage(url) {
window.open(url);
},
turnToPage(name) {
let noRefresh = name === "home" ? true : false;
this.$router.push({ name: name, params: { noRefresh: noRefresh } });
},
UpgradePlan(){//购买积分
let UpgradePlan = this.$refs.UpgradePlan
UpgradePlan.init()
},
Assignment(){//任务
// let num = 123+this.credits
// this.store.commit('setCredits',num)
},
getCredits(){//刷新当前积分
if(!this.activeCredits){
this.activeCredits = true
this.store.dispatch('getCredits').then((rv)=>{
setTimeout(()=>{
this.activeCredits = false
},300)
})
}else{
this.activeCredits = false
}
},
//点击下拉图标出现操作
changeShowOperateContent() {
this.isShowOperate = !this.isShowOperate;
document.addEventListener(
"click",
this.closeShowOperateContent,
false
);
},
changeLanguage(){
this.isLanguage = !this.isLanguage;
document.addEventListener(
"click",
this.closeShowOperateContent,
false
);
},
//关闭下拉图标
closeShowOperateContent() {
this.isShowOperate = false;
this.isLanguage = false
document.removeEventListener("click", this.closeShowOperateContent);
},
//打开绑定邮箱弹窗
showBindEmailModal() {
this.bindEmailVisible = true;
},
emailNextStepFun() {
if (!isEmail(this.email)) {
message.info(this.t('Header.jsContent1'));
return;
}
let data = {
email: this.email,
operationType: "BIND_MAILBOX",
};
const hide = message.loading("loading", 0);
Https.axiosPost(Https.httpUrls.accountSendEmail, data)
.then((rv) => {
if (rv) {
this.bindEmailStep = 2;
(this.emailCode = ["", "", "", "", "", ""]),
this.createTimer();
hide();
message.success(this.t('Header.jsContent2'));
}
})
.catch((res) => {
hide();
});
},
//绑定邮箱的上一步
emailLastStepFun() {
this.bindEmailStep = 1;
this.email = "";
(this.emailCode = ["", "", "", "", "", ""]), this.clearTimer();
},
//创建定时器
createTimer() {
this.timer = setInterval(() => {
this.time--;
if (!this.time) {
clearInterval(this.timer);
}
}, 1000);
},
//清除定时器
clearTimer() {
this.time = 60;
if (this.timer) {
clearInterval(this.timer);
}
},
//查看订单
orderForm(){
let payOrder = this.$refs.payOrder
payOrder.init()
},
//登出
async logout() {
let data = {
userId: this.userInfo.userId,
};
let isTest = getCookie('isTest')
// console.log(getCookie("token"));
if(JSON.parse(isTest)){
await Https.axiosGet(Https.httpUrls.trialUserLogout,).then((rv) => {
Https.axiosPost(Https.httpUrls.accountLogout, data).then((rv) => {
this.$router.replace("/login");
WriteCookie("token");
});
})
}else{
await Https.axiosPost(Https.httpUrls.accountLogout, data).then((rv) => {
WriteCookie("token");
});
this.$router.replace("/login");
}
// window.location.reload()
},
//绑定邮箱
submitBindEmail(emailVerifyCode) {
let data = {
userEmail: this.email,
userId: this.userInfo.userId,
emailVerifyCode: emailVerifyCode,
};
Https.axiosPost(Https.httpUrls.accountBindEmail, data).then(
(rv) => {
if (rv) {
this.userInfo.email = this.email;
(this.bindEmailVisible = false),
(this.bindEmailStep = 1);
this.clearTimer();
this.emailCode = ["", "", "", "", "", ""];
}
}
);
},
//判断是否登录
accountIsLogin(userInfo) {
let data = {
userId: userInfo.userId,
};
Https.axiosPost(Https.httpUrls.accountIsLogin, data).then((rv) => {
if (!rv) {
this.$router.replace("/");
}
});
},
//点击重置判断是否长时间五操作
operateClick() {
if (this.timer) {
clearTimeout(this.timer);
}
let _this = this;
let timeNum = 1000 * 60 * 120;
this.timer = setTimeout(() => {
this.modalWarning = Modal.warning({
title: () =>
this.t('Header.jsContent3',{numTime:_this.numTime}),
icon: createVNode(ExclamationCircleOutlined),
okText: "Ok",
centered:true,
onOk() {
_this.numTime = 30;
clearInterval(_this.timerSec);
},
});
_this.numCounter();
}, timeNum);
},
numCounter() {
this.timerSec = setInterval(() => {
if (this.numTime > 0) {
this.numTime = this.numTime - 1;
} else {
clearTimeout(this.timer);
clearInterval(this.timerSec);
this.logout();
this.modalWarning.destroy();
}
}, 1000);
},
//获取当前语言
getLang(v){
let data
Https.axiosPost(Https.httpUrls.getUserLanguage, data).then(
(rv) => {
if (rv) {
this.locale = rv
setLang(rv)
}
}
);
},
setLang(v){
Https.axiosGet(Https.httpUrls.changeUserLanguage,{params:{language:v}}).then((rv) => {
if (rv) {
if (rv) {
let token = rv;
setCookie("token", token);
this.getLang('')
// if(this.$router.currentRoute._value.path == '/home'){
// this.$router.push("/home")
// }else{
// this.$router.push("/home")
// }
this.store.commit('clearAllData')
window.location.reload()
}
}
})
},
setLocale(v){
this.setLang(v)
},
openTask(){
let taskPage = this.$refs.TaskPage
taskPage.init()
},
},
});
</script>
<style lang="less" scoped>
.header_max{
position: relative;
}
.header_component {
display: flex;
justify-content: space-between;
// padding: 0 30px;
padding-left: 0;
width: 100%;
height: 7rem;
background: rgba(255, 255, 255, 0.2);
// border-bottom: 0.1rem solid rgba(3, 3, 3, 0.1);
position: relative;
align-items: center;
z-index: 1049;
background-color: #fff;
.header_right{
width: 33%;
display: flex;
justify-content: flex-end;
align-items: center;
}
.header_logo {
width: 14.4rem;
height: 3.2rem;
margin: 2.1rem 2.8rem 0 ;
// position: absolute;
margin-top: 0;
}
.header_nav_content {
display: flex;
// margin-left: 28.9rem;
// margin-left: 46.2rem;
align-items: center;
.nav_item {
padding: 1.1rem 1rem;
border-bottom: 0.1rem solid transparent;
margin-right: 3.4rem;
font-size: 1.6rem;
line-height: 1.3rem;
// color: #333333;
color: #000;
cursor: pointer;
font-weight: 900;
&.nav_item:nth-child(3){
margin: 0;
}
&.nav_item::before {
position: absolute;
content: "";
display: block;
background: #000;
height: .3rem;
left: 50%;
transform: translateX(-50%);
bottom: .3rem;
width: 0px;
transition: 0.3s all;
}
&.select_nav {
color: #000;
transform: scale(1.15);
}
&.select_nav::before {
width: 80%;
}
}
}
.header_right_content {
// position: absolute;
top: 0;
// right: 3.2rem;
left: 0;
display: flex;
width: 33%;
height: 100%;
align-items: center;
overflow: hidden;
.header_icon {
font-size: 3.6rem;
position: relative;
top: 0.3rem;
}
.header_user_icon{
height: 4rem;
width: 4rem;
background-color: #000;
border-radius: 50%;
transform: translateX(-40%)scale(1.3);
}
.header_user_content {
// margin-left: 2rem;
display: flex;
align-items: center;
position: relative;
// top: 1.2rem;
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;
}
}
.credits{
font-size: 1.8rem;
color: #1a1a1a;
font-weight: 900;
width: auto;
padding: 0 1rem;
cursor: auto;
display: flex;
span{
width: 5rem;
display: inline-block;
overflow: hidden;
display: flex;
margin-right: .9rem;
.credits_item{
transition: .3s all;
div{
height: 100%;
}
}
}
i{
height: 100%;
display: inline-block;
border-left: .1rem solid ;
padding-left: .9rem;
margin-left: .9rem;
font-size: 1.8rem;
cursor: pointer;
}
.fi-br-refresh{
margin-left: 0;
border-left: none;
padding-left: 0;
&.active{
transition: all .3s;
transform: rotate(360deg);
}
}
}
.trialApproval{
margin-left: 2rem;
}
}
}
.select_block {
z-index: 1050;
position: absolute;
left: 6.5rem;
top: 4.7rem;
width: 11.4rem;
background: #ffffff;
box-shadow: 0px 0.4rem 0.4rem 0px rgba(0, 0, 0, 0.1);
overflow: hidden;
border: 1px solid #000000;
&.select_list{
// display: none;
transform: translateX(105%);
// transform: translateX(120%);
}
.select_item {
padding-left: 1.5rem;
height: 4.1rem;
color: #4d4d4d;
display: flex;
align-items: center;
cursor: pointer;
user-select: none;
&:hover {
background: #f7f7f7;
}
.iconfont {
font-size: 1.4rem;
}
.select_item_des {
font-size: 1.3rem;
margin-left: 0.8rem;
}
}
}
.modal_component {
.skip_content {
width: 6rem;
height: 3rem;
line-height: 2.8rem;
border: 0.1rem solid #343579;
font-size: 1.4rem;
color: #343579;
position: absolute;
top: 1.8rem;
right: 1.8rem;
cursor: pointer;
}
.bind_email_content {
padding: 4.8rem 9.2rem 6rem;
.bind_email_tip {
font-size: 1.8rem;
color: #a5b0c2;
line-height: 1.9rem;
text-align: center;
}
.bind_email {
margin-top: 2rem;
font-size: 2.2rem;
font-weight: 400;
color: #030303;
text-align: center;
}
.bind_email_form_content {
.bind_email_form_title {
font-size: 2.2rem;
font-weight: bold;
color: #030303;
line-height: 2.4rem;
}
.bind_email_form_input {
width: 100%;
height: 4.6rem;
margin-top: 1rem;
border: 0.1rem solid #b4bed7;
padding-left: 2.1rem;
line-height: 4.6rem;
font-size: 1.8rem;
box-sizing: border-box;
&::placeholder {
color: #a5b0c2;
}
}
}
.bind_email_submit_button {
height: 4.6rem;
line-height: 4.6rem;
background: #343579;
font-size: 1.6rem;
font-weight: 500;
color: #ffffff;
width: 12.8rem;
text-align: center;
cursor: pointer;
margin: 3rem auto 0;
}
.icon--shangyibu {
font-size: 2.5rem;
font-weight: bold;
color: #030303;
}
.email_last_step_content {
margin-left: 1rem;
font-size: 2.2rem;
font-family: PingFang SC;
font-weight: bold;
color: #030303;
}
.tip_content {
font-size: 1.3rem;
font-weight: bold;
color: #343579;
cursor: pointer;
}
.email_last_step_des {
display: flex;
align-items: center;
justify-content: space-between;
margin-top: 2.5rem;
margin-bottom: 1.5rem;
.sent_email_content {
font-size: 1.8rem;
font-weight: bold;
color: #a5b0c2;
}
}
}
}
</style>

View File

@@ -211,7 +211,6 @@
<script lang="ts">
import { defineComponent, h, ref, computed, reactive, toRefs, inject,provide,nextTick,createVNode,onBeforeUnmount, toRef} from "vue";
// import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
// import HeaderComponent from "@/component/HomePage/Header.vue";
import CollectionModal from "@/component/HomePage/collectionModal.vue";
import NewCollectionReview from "@/component/HomePage/NewCollectionReview.vue";
import productImg from "@/component/HomePage/productImg.vue";

View File

@@ -5,7 +5,7 @@
:get-container="() => $refs.renew"
v-model:visible="renewModel"
:footer="null"
:width="pageWidth"
width="130rem"
height="auto"
:maskClosable="false"
:centered="true"
@@ -27,80 +27,136 @@
</div>
</div>
<div class="renewContent">
<div class="generalModelTitle">
{{ $t('Renew.title') }}
<div class="left">
<div class="title">Unlock the Pro Advantage</div>
<div class="content">
<div class="benefits">
<div>Benefits</div>
<div class="contrast">
<div>Free</div>
<div>PRO</div>
</div>
</div>
<div class="benefitsItem">
<div class="describe">
<div class="icon">
<img src="https://storage.googleapis.com/chatapp-website-assets/stars.webp" >
</div>
<div class="text">
<p class="title">GPT-4o - DeepSeek-R1 - Gemini Pro and more</p>
<p class="info">More accurate answers with multiple latest AI models</p>
</div>
</div>
<div class="contrast">
<div></div>
<div>×</div>
</div>
</div>
<div class="benefitsItem">
<div class="describe">
<div class="icon">
<img src="https://storage.googleapis.com/chatapp-website-assets/stars.webp" >
</div>
<div class="text">
<p class="title">GPT-4o - DeepSeek-R1 - Gemini Pro and more</p>
<p class="info">More accurate answers with multiple latest AI models</p>
</div>
</div>
<div class="contrast">
<div></div>
<div>×</div>
</div>
</div>
<div class="benefitsItem">
<div class="describe">
<div class="icon">
<img src="https://storage.googleapis.com/chatapp-website-assets/stars.webp" >
</div>
<div class="text">
<p class="title">GPT-4o - DeepSeek-R1 - Gemini Pro and more</p>
<p class="info">More accurate answers with multiple latest AI models</p>
</div>
</div>
<div class="contrast">
<div></div>
<div>×</div>
</div>
</div>
<div class="benefitsItem">
<div class="describe">
<div class="icon">
<img src="https://storage.googleapis.com/chatapp-website-assets/stars.webp" >
</div>
<div class="text">
<p class="title">GPT-4o - DeepSeek-R1 - Gemini Pro and more</p>
<p class="info">More accurate answers with multiple latest AI models</p>
</div>
</div>
<div class="contrast">
<div></div>
<div>×</div>
</div>
</div>
</div>
</div>
<div class="renew_detail">
<div class="name generalModelTitle">{{ current?.title }}</div>
<div class="price_box">
<div class="price">
<sub>$</sub>
{{ current?.price[current?.type] }} <span>{{ current?.unit[current?.type] }}</span>
</div>
<div class="type" v-if="current.typeList.length > 1">
<label>
<input name="pric" type="radio" value="monthly" v-model="current.type" @change="setPricType('monthly')">
{{ $t('Renew.Monthly') }}
</label>
<label>
<input name="pric" type="radio" value="year" v-model="current.type" @change="setPricType('year')">
{{ $t('Renew.Yearly') }}
</label>
</div>
<div class="type promotion">
<div class="text">{{ $t('Renew.promotionCode') }}:</div>
<div class="succeed" v-show="promotionData.error == 'true'">
{{promotionData.code}}
<i class="fi fi-sr-times-hexagon" @click="clearPromotionCode"></i>
<div class="right">
<div class="title">
{{ $t('Renew.title') }}
</div>
<div class="info">Get started today for unlimited access!</div>
<div class="content">
<div class="productItem" :class="{active:item.price == current.price,sellWell:item.sellWell}" v-for="item in personage" :key="item.price" @click="setPromotionData(item)">
<div class="popular" v-show="item.sellWell">MOST POPULAR</div>
<div class="priceBox">
<div class="left">
<p class="productType">1 {{ item.type.label }}</p>
<p class="price">${{ item.price }}</p>
</div>
<div class="right">
<div class="promotion">
<div class="succeed" v-show="item.promotionData.error == 'true'">
{{item.promotionData.code}}
<i class="fi fi-sr-times-hexagon" @click="clearPromotionCode"></i>
</div>
<div class="input" @click.stop v-show="!item.promotionData.error || item.promotionData.error == 'false'">
<input type="text" :placeholder="$t('Renew.promotionCode')" v-model="item.promotionData.code">
<div style="cursor: pointer;" @click="examine(item)">{{ $t('Renew.use') }}</div>
</div>
<div class="error" v-show="item.promotionData.error == 'false'">{{item.promotionData.str}}</div>
</div>
<p class="discountsPrice" v-show="item.promotionData.price" style="text-align: center;">${{ item.promotionData.price }}</p>
</div>
</div>
<div class="input" v-show="!promotionData.error || promotionData.error == 'false'">
<input type="text" v-model="promotionData.code">
<div style="cursor: pointer;" @click="examine">{{ $t('Renew.use') }}</div>
</div>
</div>
<div class="payment">
<div class="allocation">
<div class="selectType">
<div class="text">{{ $t('Renew.Payment') }}:</div>
<label>
<input name="payment" type="radio" value="CreditCard" v-model="current.PaymentType" @change="setPaymentType('CreditCard')">
{{ $t('Renew.CreditCard') }}
</label>
<label>
<input name="payment" type="radio" value="Alipay" v-model="current.PaymentType" @change="setPaymentType('Alipay')">
{{ $t('Renew.Alipay') }}
</label>
</div>
<div class="error" v-show="promotionData.error == 'false'">{{promotionData.str}}</div>
</div>
<div class="type payment">
<div class="text">{{ $t('Renew.Payment') }}:</div>
<label>
<input name="payment" type="radio" value="CreditCard" v-model="current.PaymentType" @change="setPaymentType('CreditCard')">
{{ $t('Renew.CreditCard') }}
</label>
<label>
<input name="payment" type="radio" value="Alipay" v-model="current.PaymentType" @change="setPaymentType('Alipay')">
{{ $t('Renew.Alipay') }}
</label>
<div class="gallery_btn gallery_btn_radius" @click="payment">
Continue
</div>
<!-- <div class="autoRenewal">
<label>
{{ current.autoRenewal.text }} :
<a-switch v-model:checked="current.autoRenewal.value" />
</label>
</div> -->
<div class="info">{{ current?.info }}</div>
<div class="payMethod_payAffirm_clause" ref="labelDisclaimer">
<label>
<input type="checkbox" v-model="clause">
<span class="generalModelDescription">{{ $t('upgradePlan.policy1') }}<a href="https://code-create.com.hk/aida-terms-and-conditions/" target="_blank">{{ $t('upgradePlan.policy2') }}</a>{{ $t('upgradePlan.policy3') }}<a href="https://code-create.com.hk/aida-subscription-agreement/" target="_blank">{{ $t('upgradePlan.policy4') }}</a>. *</span>
</label>
</div>
<!-- <div class="paySecure">
<svg data-v-4715f595="" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 16 17" class="shield-icon"><path fill="#4AA181" stroke="#4AA181" stroke-width=".395" d="M7.44.957 1.914 3.398a1.38 1.38 0 0 0-.822 1.256v3.69c0 1.648.443 3.257 1.218 4.667 1.577 2.154 3.835 3.222 5.986 3.222 2.152 0 4.206-1.069 5.387-3.21a9.7 9.7 0 0 0 1.225-4.679v-3.69a1.38 1.38 0 0 0-.822-1.256L8.56.957zm0 0h.001m-.001 0h.001m0 0c.351-.158.758-.159 1.119 0z"></path><g clip-path="url(#a)"><path stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.184" d="M10.634 6.563 7.016 10.18 5.37 8.536"></path></g><defs><clipPath id="a"><path fill="#fff" d="M4.055 4.586h7.895v7.895H4.055z"></path></clipPath></defs></svg>
<span>Pay safe & secure </span>
</div> -->
</div>
<div class="gallery_btn gallery_btn_radius" @click="payment">{{ $t('Renew.SubscribeNow') }}</div>
</div>
<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 class="mark_loading" v-show="isShowMark_">
@@ -140,35 +196,65 @@ export default defineComponent({
})
let payMethodData = reactive({
clause:false,
labelDisclaimer:null,
labelDisclaimer:null as any,
newWindow:null as any,
isShowMark:false,
isShowMark_:false,
})
let renewData = reactive({
promotionData:{
code:'',
error:'',
str:'',
oldPrice:'',
},
personage:computed(()=>{
return {
title:t('Renew.PersonalVersion'),
price:{
monthly:'500',
year:'5,000',
personage:[
{
price:'500',
sellWell:true,
activity:false,//活动打折
type:{
value:'Month',
label:'Month',
},
PaymentType:'',
promotionData:{
code:'',
error:'',
str:'',
price:'',
},
},
unit:{
monthly:t('Renew.HKDMonth'),
year:t('Renew.HKDYear'),
{
price:'5,000',
sellWell:false,
activity:false,//活动打折
typeValue:'year',
type:{
value:'Year',
label:'Year',
},
PaymentType:'',
promotionData:{
code:'',
error:'',
str:'',
price:'',
},
},
type:'monthly',
PaymentType:'',
typeList:['monthly','year'],
info:'Tax, VAT not included.',
}
}),
],
// personage:computed(()=>{
// return {
// title:t('Renew.PersonalVersion'),
// price:{
// monthly:'500',
// year:'5,000',
// },
// unit:{
// monthly:t('Renew.HKDMonth'),
// year:t('Renew.HKDYear'),
// },
// type:'monthly',
// PaymentType:'',
// typeList:['monthly','year'],
// info:'Tax, VAT not included.',
// }
// }),
firm:computed(()=>{
return {
title:'Education Edition',
@@ -185,6 +271,7 @@ export default defineComponent({
},
typeList:['year'],
info:'Customised plan',
}
}),
education:computed(()=>{
@@ -212,14 +299,11 @@ export default defineComponent({
})
const init = ()=>{
renew.renewModel = true
renewData.current = renewData.personage
renewData.current = renewData.personage[0]
}
const cancelDsign = () => {
renew.renewModel = false
}
const setPricType=(str:any)=>{
renewData.current.type = str
}
const setPaymentType = (str:any)=>{
renewData.current.PaymentType = str
}
@@ -234,10 +318,7 @@ export default defineComponent({
}
return
}
let subscribeType = 'Year'
if(!renewData.current.PaymentType)return message.info(t('Renew.PleaseSelectPayment'))
if(renewData.current.type == 'monthly')subscribeType= 'Month'
// let data = {
// autoRenewal:renewData.current.PaymentType != 'Alipay',//one_time为不自动续费
// productName:'Subscription',
@@ -249,9 +330,9 @@ export default defineComponent({
productName:'Subscription',
quantity:1,
returnUrl:url,
subscribeType:subscribeType,//yearly为年费monthly为月费
subscribeType:renewData.current.type.value,//yearly为年费monthly为月费
wallet:'ALIPAYHK',
promotionCode:renewData.promotionData.code,
promotionCode:renewData.current.promotionData.code,
}
let httpsUrl = Https.httpUrls.payStripe
payMethodData.isShowMark_ = true
@@ -288,37 +369,41 @@ export default defineComponent({
renew.renewModel = false
setPaidBack()
}
const examine = ()=>{
const examine = (item:any)=>{
// renewData.promotionData.error
let price = renewData.current?.price[renewData.current?.type]
let price = item?.price
const normalNumber = Number(price.replace(/,/g, ''));
if(!renewData.promotionData.code){
if(!item.promotionData.code){
return
}
let data = {
promotionCode:renewData.promotionData.code,
promotionCode:item.promotionData.code,
price:normalNumber,
}
Https.axiosGet(Https.httpUrls.checkCoupon,{params:data}).then((rv:any)=>{
if(rv){
if(rv.status == "valid"){
renewData.promotionData.error = 'true'
renewData.promotionData.oldPrice = renewData.current?.price[renewData.current?.type]
renewData.current.price[renewData.current.type] = (Number(rv.discountedPrice)).toLocaleString()
}else{
renewData.promotionData.error = 'false'
renewData.promotionData.str = rv.message
}
renewData.personage.forEach((personageItem:any)=>{
if(personageItem.price == item.price){
if(rv.status == "valid"){
item.promotionData.error = 'true'
item.promotionData.price = (Number(rv.discountedPrice)).toLocaleString()
}else{
item.promotionData.error = 'false'
item.promotionData.str = rv.message
}
}
})
}else{
}
})
}
const clearPromotionCode = ()=>{
renewData.promotionData.error = '';
renewData.promotionData.code = ''
renewData.current.price[renewData.current.type] = renewData.promotionData.oldPrice
renewData.promotionData.oldPrice = ''
renewData.current.promotionData.error = '';
renewData.current.promotionData.code = ''
renewData.current.promotionData.price = ''
}
const setPromotionData = (item:any)=>{
renewData.current = item
}
return{
store,
@@ -327,13 +412,13 @@ export default defineComponent({
...toRefs(payMethodData),
init,
cancelDsign,
setPricType,
setPaymentType,
payment,
setPaidBack,
completePayment,
examine,
clearPromotionCode,
setPromotionData
}
},
data() {
@@ -350,159 +435,332 @@ export default defineComponent({
</script>
<style lang="less" scoped>
.renew {
:deep(.ant-modal-body){
padding: 0;
}
.renewContent{
display: flex;
flex-direction: column;
align-items: center;
.generalModelTitle{
text-align: center;
}
.renew_detail{
width: 58rem;
height: 60rem;
// height: 53rem;
border-radius: 3rem;
margin-bottom: 5rem;
border: 2px solid #000;
padding: 6rem 3rem 5rem;
display: flex;
flex-direction: column;
.price_box{
display: flex;
border-radius: 3rem;
overflow: hidden;
> .left,> .right{
> .title{
text-align: center;
font-size: 3.2rem;
font-weight: 600;
line-height: 4rem;
}
> .info{
text-align: center;
opacity: .6;
font-weight: 400;
margin-top: .8rem;
font-size: 1.6rem;
}
> .content{
margin-top: 2rem;
display: flex;
flex-direction: column;
align-items: center;
flex: 1;
justify-content: space-between;
margin-bottom: 3rem;
}
.price{
font-size: 6rem;
sub{
font-size: 2rem;
top: -3rem;
}
span{
font-size: 2rem;
}
}
> .left{
width: 60%;
background: #0f0f0f;
color: #fff;
padding: 4rem 3.2rem;
> .title{
opacity: .6;
}
.type{
display: flex;
&.promotion{
flex-wrap: wrap;
justify-content: center;
align-items: center;
> .succeed{
padding: 1rem;
> .content{
> .benefits,> .benefitsItem{
display: flex;
> .contrast{
margin-left: auto;
display: flex;
align-items: center;
border-radius: 1rem;
background: #eee;
> i{
> div{
width: 8rem;
text-align: center;
}
> div:nth-child(1){
margin-right: 2.4rem;
opacity: .5;
}
> div:nth-child(2){
opacity: 1;
color: #38c793;
text-shadow: 0 4px 27.1px #38c793b3;
}
}
}
> .benefits{
> div:nth-child(1){
opacity: .5;
}
font-weight: 600;
font-size: 2rem;
margin: 1rem 0;
padding: 0 1.6rem;
}
> .benefitsItem{
border: 1px solid #27272a;
border-radius: 2.4rem;
margin-bottom: 1.6rem;
padding: 1.6rem;
> .describe{
display: flex;
align-items: center;
> .icon{
border: 1px solid #27272a;
background: linear-gradient(#1d1d1d,#000);
border-radius: 1.4rem;
margin-right: 1.6rem;
padding: 1.4rem;
> img{
width: 3.5rem;
height: 3.5rem;
}
}
> .text{
> p{
margin: 0;
}
> .title{
font-size: 1.8rem;
font-weight: 600;
}
> .info{
font-weight: 400;
margin-top: .4rem;
font-size: 1.6rem;
opacity: .5;
}
}
}
}
}
}
> .right{
width: 40%;
flex-direction: column;
align-items: center;
padding: 4rem 3.2rem;
> .content{
margin-top: 2rem;
> .productItem{
margin-bottom: 1rem;
border-radius: 1rem;
overflow: hidden;
border: 2px solid #eaecf0;
> .popular{
background: #2d9f75;
font-weight: 600;
display: flex;
justify-content: center;
align-items: center;
color: #fff;
padding: .8rem 1.2rem;
}
> .priceBox{
height: 11rem;
padding: 1rem 1.2rem;
display: flex;
justify-content: space-between;
align-items: center;
> .left,> .right{
p{
margin: 0;
}
> .discountsPrice ,> .price{
font-size: 1.8rem;
margin-top: .4rem;
opacity: .4;
font-weight: 500;
}
}
> .left{
> p:nth-child(1){
font-size: 2rem;
opacity: .7;
font-weight: 700;
}
}
> .right{
> .promotion{
display: flex;
align-items: center;
flex-direction: column;
> .text{
font-size: 1.4rem;
font-weight: 600;
margin-right: 2rem;
}
> .succeed{
padding: 1rem;
display: flex;
align-items: center;
border-radius: 1rem;
background: #eee;
// color: #fff;
// font-weight: 600;
> i{
display: flex;
margin-left: 1rem;
cursor: pointer;
}
}
> .input{
display: flex;
align-items: center;
border-radius: 2rem;
border: 2px solid #000;
overflow: hidden;
padding: 0 1rem;
input{
border: none;
height: 3rem;
width: 10rem;
font-size: 1.2rem;
background: rgba(0, 0, 0, 0);
}
}
> .error{
color: red;
text-align: center;
font-size: 1.2rem;
}
}
> .discountsPrice{
font-weight: 600;
color: red;
}
}
}
&.active{
background: #0ea98233;
border: 2px solid #0ea982;
> .priceBox{
> .left{
> p:nth-child(1){
opacity: 1;
}
}
> .right{
> .discountsPrice{
opacity: 1;
}
}
}
}
&.sellWell{
border: 2px solid #0ea982;
}
}
> .productItem:last-child{
margin-bottom: 2rem;
}
}
> .payment{
margin-top: auto;
> .allocation{
// border-radius: 1rem;
// border: 2px solid #eaecf0;
// padding: 1rem 1.2rem;
> .selectType{
display: flex;
> .text{
font-size: 1.4rem;
font-weight: 600;
margin-right: 2rem;
}
label{
margin-right: 1rem;
display: flex;
margin-left: 1rem;
cursor: pointer;
input{
margin-right: .5rem;
}
}
}
> .input{
display: flex;
align-items: center;
border-radius: 2rem;
border: 2px solid #000;
overflow: hidden;
padding: 0 1rem;
input{
border: none;
height: 3rem;
}
}
> .error{
color: red;
width: 100%;
text-align: center;
font-size: 1.2rem;
}
}
> .text{
margin-right: 2rem;
// font-weight: 600;
}
label{
display: flex;
align-items: center;
margin-right: 3rem;
input{
margin-right: 1rem;
}
> .gallery_btn{
width: 100%;
margin: 2rem 0;
margin-top: 1rem;
}
&.payment{
> .payMethod_payAffirm_clause{
label{
margin-right: 1rem;
input{
margin-right: .5rem;
margin-right: 1rem;
cursor: pointer;
vertical-align: middle;
}
span{
vertical-align: top;
font-size: 1.4rem;
a{
color: #000;
text-decoration: underline;
}
}
}
&.animation{
animation: shake .3s linear;
@keyframes shake {
0%{
transform: translateX(0px);
}
25%{
transform: translateX(-10px);
}
50%{
transform: translateX(10px);
}
75%{
transform: translateX(-10px);
}
100%{
transform: translateX(0px);
}
}
}
}
label:last-child{
margin-right: 0rem;
}
}
}
.login_footer_item_text{
text-align: center;
margin-bottom: 1.5rem;
text-decoration: underline;
}
.login_footer_item_text:last-child{
margin-bottom: 0rem;
}
.payMethod_payAffirm_clause{
label{
cursor: pointer;
input{
margin-right: 1rem;
cursor: pointer;
vertical-align: middle;
}
span{
vertical-align: top;
a{
color: #000;
text-decoration: underline;
}
}
}
&.animation{
animation: shake .3s linear;
@keyframes shake {
0%{
transform: translateX(0px);
}
25%{
transform: translateX(-10px);
}
50%{
transform: translateX(10px);
}
75%{
transform: translateX(-10px);
}
100%{
transform: translateX(0px);
}
}
// > .paySecure{
// display: flex;
// margin-top: 1rem;
// > svg{
// width: 1.6rem;
// height: 1.6rem;
// }
// > span{
// font-weight: 600;
// font-size: 1.4rem;
// }
// }
}
}
// .login_footer_item_text{
// text-align: center;
// margin-bottom: 1.5rem;
// text-decoration: underline;
// }
// .login_footer_item_text:last-child{
// margin-bottom: 0rem;
// }
}
.mark_loading{
position: absolute;
z-index: 2;
background: #fff;
border-radius: 3rem;
.mark_loading_title{
font-size: 3rem;
// text-decoration: underline;
font-weight: 600;
margin-bottom: 2rem;
overflow: hidden;
// color: #fff;
}
.mark_loading_intro{

View File

@@ -41,7 +41,7 @@
<i v-else class="fi fi-br-check" @click="editChek('brandSlogan')"></i>
</div>
</div>
<div style="flex:1;text-align: right;" v-show="imgList.length > 0">
<div style="flex:1;text-align: right;" v-show="fall?.list?.length > 0">
<div class="gallery_btn" v-show="schedule.num == 1||(schedule.num == 0 && !schedule.state)" @click="compute">Compute</div>
<div v-show="schedule.num != 1">
<a-progress style="width:20rem;" :percent="schedule.num * 100" size="small" :showInfo="false" />
@@ -139,7 +139,6 @@ export default defineComponent({
upload:{},
token:getCookie("token"),
isShowMark:false,
imgList:[],
total:0,
pageSize:10,
currentPage:1,

View File

@@ -83,7 +83,7 @@ export default defineComponent({
setup(){
let list = ref([])
let wait_list = ref([])
let width = ref(250)
let width = ref(300)
let num_x = ref(1)
let gap_x = ref(0)
let gap_y = ref(0)