Files
aida_front/src/views/HomeMain.vue
X1627315083 89639aaec9 fix
2025-09-01 14:03:30 +08:00

1925 lines
54 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="homeMain_max">
<div class="leftBox" :class="{leftHide:leftShow}">
<div class="left">
<div class="title">
<!-- <span>AiDA</span> -->
<img src="@/assets/images/homePage/aidaIcon.png" alt="">
<svg @click="()=>leftShow=!leftShow" class="leftShowOrHide" xmlns="http://www.w3.org/2000/svg" width="2rem" height="2rem" fill="currentColor" viewBox="0 0 24 24" data-v-1c7326d6=""><path fill-rule="evenodd" d="M6 5a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h2V5H6Zm4 0v14h8a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1h-8ZM3 6a3 3 0 0 1 3-3h12a3 3 0 0 1 3 3v12a3 3 0 0 1-3 3H6a3 3 0 0 1-3-3V6Z" clip-rule="evenodd" data-v-1c7326d6=""></path></svg>
</div>
<div class="newObj" @click="newProject">
<!-- <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 25 24"><path stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12.5 5v14m-7-7h14"></path></svg> -->
<svg width="19" height="16" viewBox="0 0 19 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<line x1="9.83398" y1="1" x2="9.83398" y2="15" stroke="black" stroke-width="4" stroke-linecap="round"/>
<path d="M1.5 8H17.5" stroke="black" stroke-width="4" stroke-linecap="round"/>
</svg>
<p>{{$t('Header.NewProject')}}</p>
</div>
<div class="navList ">
<div class="tools list" v-for="item in openTypeList" :class="{active:openType == item.value,history:item.value == 'history'}">
<div class="titleBox" @click="setOpenType(item.value,item.list)">
<div class="left">
<i :class="['fi',item.icon]"></i>
<span>{{item.label}}</span>
</div>
<div class="right">
<i class="fi fi-br-angle-small-down"></i>
</div>
</div>
<div class="detailBox" v-show="openType">
<div class="detail" v-if="item.value != 'history' && item.value != 'cloud'" v-show="openType == item.value">
<div class="detailItem" v-for="childItem in item.list" @click="setRouter(item,childItem)" :class="{active:openTypeChild == childItem.value}">
<i v-show="childItem.icon" :class="['fi',childItem.icon]"></i>
<div class="text">
<span>{{ childItem.label }}</span>
</div>
</div>
</div>
<div class="detail" v-else-if="item.value == 'history'" style="height: auto;">
<div v-for="historyTypeItem in historyData.updateTimeType" :key="historyTypeItem">
<div class="timeType" v-if="historyTypeItem == 'Todaylist' && item.Todaylist.length>0">{{$t('Header.Today')}}</div>
<div class="timeType" v-if="historyTypeItem == 'Yesterdaylist' && item.Yesterdaylist.length>0">{{$t('Header.Yesterday')}}</div>
<div class="timeType" v-if="historyTypeItem == 'WithinAWeeklist' && item.WithinAWeeklist.length>0">{{$t('Header.WithinAWeek')}}</div>
<div class="timeType" v-if="historyTypeItem == 'Earlierlist' && item.Earlierlist.length>0">{{$t('Header.Earlier')}}</div>
<div v-for="childItem,index in item[historyTypeItem]" :key="childItem.name" class="detailItem history" @click="setHistory(item,childItem)" :class="{active:openTypeChild == childItem.id}">
<div class="text" style="width: 100%;">
<span :title="childItem.name" v-show="!childItem.editName">{{ childItem.name }}</span>
<textarea v-model="historyData.historyTextarea" v-show="childItem.editName" @click.stop></textarea>
</div>
<!-- <div class="type" v-if="childItem.process == 'THREE_D_PLATE_MAKING'">3D Pattern Making</div>
<div class="type" v-else>{{ childItem.process.replace(/_/g, ' ').toLowerCase().replace(/\b\w/g, char => char.toUpperCase()) }}</div> -->
<div class="type">{{ $t(`Header.${childItem.process}`) }}</div>
<div class="time">{{ childItem?.updateTime?.replace('T', ' ') }}</div>
<div class="btn">
<i class="fi fi-br-menu-dots-vertical" v-show="!childItem.editName" @click.stop="editHistory(childItem,index,$event,item[historyTypeItem])"></i>
<i class="fi fi-br-check" v-show="childItem.editName" @click.stop="accomplishHistory(childItem,index,$event)"></i>
<div class="operation" v-show="historyData.selectHistoryId == childItem.id">
<div class="item" @click.stop="editName(childItem)">
<i class="fi fi-rr-edit"></i>
<span>{{$t('Header.Rename')}}</span>
</div>
<div class="item" v-if="childItem.process == 'SINGLE_DESIGN' || childItem.process == 'SERIES_DESIGN'" @click.stop="setting(childItem)">
<i class="fi fi-rr-settings-sliders"></i>
<span>{{$t('Header.Setting')}}</span>
</div>
<!-- <div class="item" v-if="bathGenerationList.indexOf(childItem.process)>-1" @click.stop="bathGeneration(childItem)">
<i class="fi fi-rr-cloud-upload-alt"></i>
<span>{{$t('Header.BatchGeneration')}}</span>
</div> -->
<div class="item" @click.stop="deleteItem(childItem)">
<i class="icon iconfont icon-shanchu operate_icon"></i>
<span>{{$t('Header.Delete')}}</span>
</div>
</div>
</div>
</div>
</div>
<div v-show="!historyData.isNoData" class="material_content_list_loding">
<span class="historyPage_loading" v-show="!historyData.isShowLoading"></span>
<span v-show="historyData.isShowLoading">
<a-spin size="large" />
</span>
</div>
<img v-show="historyData.isNoData && historyData.isNull" src="@/assets/images/homePage/null_img.png">
</div>
</div>
</div>
</div>
<div class="navListBottom">
<!-- <div class="tools marginT2 marginB2 list" :class="{active:$route.name == 'cloud'}" @click="()=>$router.push('/home/cloud')">
<div class="titleBox" style="margin-bottom: 0;">
<div class="left">
<i class="fi fi-rr-cloud-upload-alt"></i>
<span>{{$t('Header.BatchGeneration')}}</span>
</div>
</div>
</div> -->
<div class="tools list" :class="{active:isLanguage}">
<div class="titleBox" @click="()=>isLanguage = !isLanguage">
<div class="left">
<i class="fi fi-br-globe"></i>
<span>{{$t('Header.Language')}}</span>
</div>
<div class="right">
<i class="fi fi-br-angle-small-down"></i>
</div>
</div>
<div class="detailBox">
<div class="detail" v-show="isLanguage">
<div class="detailItem" v-for="item in language" :class="{active:locale == item.value}" @click="setLocale(item.value)">
<svg v-show="locale == item.value" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 14 14" class="dark-icon sidebar-lang-icon" width="20" height="20"><path stroke="#52525b" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.167" d="M11.667 3.5 5.25 9.917 2.334 7"></path></svg>
<span>{{ item.name }}</span>
</div>
</div>
</div>
</div>
</div>
<div class="segmentation"></div>
<div v-if="userDetail.systemUser != 0 || userDetail.systemUser == 3" @click="openUpgradeToPro" class="gallery_btn gallery_btn_radius" style="width: 100%;display: flex;justify-content: center;align-items: center;">
<i class="fi fi-br-dollar" style="margin-right: .6rem;display: flex;"></i>
{{$t('Header.openUpgrade')}}
</div>
</div>
</div>
<div class="rightBox">
<div class="right">
<div class="user">
<div class="left" v-show="leftShow">
<svg @click="()=>leftShow=!leftShow" class="leftShowOrHide" xmlns="http://www.w3.org/2000/svg" width="3rem" height="3rem" fill="currentColor" viewBox="0 0 24 24" data-v-1c7326d6=""><path fill-rule="evenodd" d="M6 5a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h2V5H6Zm4 0v14h8a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1h-8ZM3 6a3 3 0 0 1 3-3h12a3 3 0 0 1 3 3v12a3 3 0 0 1-3 3H6a3 3 0 0 1-3-3V6Z" clip-rule="evenodd" data-v-1c7326d6=""></path></svg>
<div class="newObj marginT2" @click="newProject" >
<svg width="19" height="16" viewBox="0 0 19 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<line x1="9.83398" y1="1" x2="9.83398" y2="15" stroke="black" stroke-width="4" stroke-linecap="round"/>
<path d="M1.5 8H17.5" stroke="black" stroke-width="4" stroke-linecap="round"/>
</svg>
<p style="white-space: nowrap;">{{$t('Header.NewProject')}}</p>
</div>
</div>
<div class="trialApproval">
<div class="message_iconItem" style="display: flex;">
<i class="fi fi-rs-interrogation" style="font-size: 2.4rem" @click="toUserManual"></i>
</div>
<div class="message_iconItem" style="display: flex;">
<a-badge :count="messageNum">
<i class="fi fi-rr-envelope" style="font-size: 2.4rem" @click="openMessage"></i>
</a-badge>
</div>
<div class="message_iconItem" style="display: flex;">
<a-badge :count="messageType?.newPosted">
<!-- <i class="fi fi-rr-envelope" @click="openMessage"></i> -->
<i class="fi fi-rr-bell" style="font-size: 2.4rem" @click.stop="openNewPosted"></i>
</a-badge>
<div class="message_iconItem_value select_block" v-show="isNewPosted" style="width: 40rem">
<newPosted ref="newPosted"></newPosted>
</div>
</div>
</div>
<div class="homeMain_right_content">
<div
class="button_second credits hideChecked"
>
{{$t('Header.Credits')}}:&nbsp;
<span :title="credits">
<div class="credits_item" v-for="item in String(credits)" :style="{'transform': 'translateY('+item*-100+'%)'}">
<div v-if="item != '.'" v-for="numItem in 10">{{ numItem-1 }}</div>
<div v-else>{{item}}</div>
</div>
</span>
<i @click="getCredits" class="fi fi-br-refresh" :class="[activeCredits?'active':'']"></i>
<i @click="UpgradePlan" title="Purchase" class="fi fi-rr-shop"></i>
</div>
</div>
<div class="homeMain_user">
<div class="homeMain_user_icon" @click="openAccount">
<img :src="userDetail.avatar" alt="">
</div>
<div class="homeMain_user_detail">
<div class="homeMain_user_icon" @click="openAccount">
<img :src="userDetail.avatar" alt="">
</div>
<div v-if="userDetail.systemUser == 3" class="username">{{$t('Header.hello')}}@{{ $t('isTest.userName') }}</div>
<div v-else class="username">{{$t('Header.hello')}}@{{ userDetail.userName }}</div>
<div class="homeMain_user_detail_attention">
<div class="attention_item">
<!-- 点击事件就用下面的div -->
<div>{{ userDetail?.followeeCount }}</div>
<span>{{$t('account.Follow')}}</span>
</div>
<div class="attention_item">
<div>{{ userDetail?.followerCount }}</div>
<span>{{$t('account.Fans')}}</span>
</div>
</div>
<div class="homeMain_subscribe">
<div>
<span class="font">{{$t('account.Status')}}</span>
<span v-if="userDetail.timeData.isExpiration" class="stateSucsess font">{{$t('account.Valid')}} <i class="fi fi-ss-check-circle"></i></span>
<span v-else class="stateError font">{{$t('account.Expire')}} <i class="fi fi-ss-check-circle"></i></span>
<span class="time">{{ userDetail.timeData.text }}</span>
</div>
</div>
<div class="homeMain_select">
<!-- <div class="select_item_box" @click.stop="isLanguage = !isLanguage">
<div class="select_item">
<span class="icon iconfont icon-yuyan"></span>
<span class="select_item_des">{{$t('Header.language')}}</span>
<span class="icon iconfont icon-xiala" :class="{'active': isLanguage}"></span>
</div>
<ul class="select_list" :class="{'active': isLanguage}" @click.stop="">
<li class="select_item" v-for="item in language" @click="setLocale(item.value)">
<span class="select_item_des">{{ item.name }}</span>
</li>
</ul>
</div> -->
<div class="select_item" @click="orderForm()">
<i class="fi fi-rs-notebook"></i>
<span class="select_item_des">{{$t('Header.ViewOrders')}}</span>
</div>
<router-link class="select_item" v-if="userDetail.systemList.indexOf(3) >= 0" :to="`/administrator`">
<span class="icon iconfont icon-yonghu"></span>
<span class="select_item_des">{{$t('Header.Administrator')}}</span>
</router-link>
<router-link class="select_item" :to="`/Affiliate`" v-if="userDetail.systemList.indexOf(2) >= 0">
<span class="icon iconfont icon-yonghu"></span>
<span class="select_item_des">{{$t('Header.Affiliate')}}</span>
</router-link>
<div class="select_item" @click="getTutorial()">
<span class="fi fi-rr-book-user"></span>
<span class="select_item_des">{{$t('Header.Tutorial')}}</span>
</div>
<div class="select_item_long"></div>
<div class="select_item" @click="logout()">
<span class="icon iconfont icon-tuichu"></span>
<span class="select_item_des">{{$t('Header.logOff')}}</span>
</div>
</div>
</div>
</div>
</div>
<div class="userSystem" v-if="userDetail.systemList.indexOf(1) == -1">
{{$t('Header.pastDue')}}
</div>
<div class="router" v-else-if="!getLangIsShowMark">
<home ref="home" @setNewProject="()=>leftShow=true" @setTask="setTask"></home>
</div>
</div>
</div>
<payOrder ref="payOrder"></payOrder>
<UpgradePlan ref="UpgradePlan"></UpgradePlan>
<TaskPage ref="TaskPage"></TaskPage>
<div class="mark_loading" v-show="getLangIsShowMark">
<a-spin size="large" />
</div>
<!-- <RobotAssist v-if="!getLangIsShowMark"></RobotAssist> -->
<scaleVideo ref="scaleVideo"></scaleVideo>
<!-- 进行续订 -->
<renew ref="renew"></renew>
<projectSetting ref="projectSetting" @getHistory="settingGetHistory"></projectSetting>
<!-- 未绑定邮箱弹窗 -->
<bindEmail ref="bindEmail"></bindEmail>
</div>
</template>
<script >
import { defineComponent, createVNode, ref,toRefs, reactive, computed, onMounted, nextTick, watch, provide } from "vue";
import { isEmail } from "@/tool/util";
import { setCookie, getCookie, WriteCookie,clonAllCookie } from "@/tool/cookie";
import payOrder from "@/component/Pay/payOrder.vue";
import renew from "@/component/HomePage/renew.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 RobotAssist from "@/component/HomePage/RobotAssist.vue";
import scaleVideo from "@/component/HomePage/scaleVideo.vue";
import newPosted from "@/component/HomePage/newPosted.vue";
import { useStore } from "vuex";
import { setLang } from "@/tool/guide";
import showViewVideo from "@/tool/mount";
import { useI18n } from "vue-i18n";
import { gsap, TweenMax,TweenLite } from "gsap";
import { ScrollTrigger } from "gsap/ScrollTrigger";
import MyWs from "@/tool/webSocket";
import MyEvent from "@/tool/myEvents";
import { useRouter,useRoute } from 'vue-router'
import {openTypeList} from "@/tool/listData.js";
import home from "@/component/home/index.vue";
import projectSetting from '@/component/home/newProject/setting.vue'
import bindEmail from "@/component/HomePage/bindEmail.vue";
export default defineComponent({
components: {
renew,
// Habit,
RobotAssist,
scaleVideo,
newPosted,
UpgradePlan,
payOrder,
TaskPage,
home,
projectSetting,
bindEmail,
},
setup(){
const store = useStore();
const {t} = useI18n()
const {locale} = useI18n()
const route = useRoute()
const router = useRouter()
const homeMainData = reactive({
leftShow:false,
openType:'',
openTypeChild:'',
isLanguage:false,
userDetailLanguage:computed(()=>store.state.UserHabit.userDetail.language),
openTypeList:[],
projectSetting:null,
historyData:{
isNoData:false,
isShowLoading:false,
isNull:false,
searchCollectionName:'',
historyTextarea:'',
updateTimeType:['Todaylist','Yesterdaylist','WithinAWeeklist','Earlierlist'],
selectHistoryId:-1,
page:1,
size:10,
isToday:false,
isYesterday:false,
isWithinAWeek:false,
isEarlier:false,
},
bathGenerationList:["poseTransfer","SERIES_DESIGN","toProduct","relight"]
})
watch(()=>locale.value,(newVal)=>{
homeMainData.openTypeList = openTypeList(t)
}, { immediate: true })
const historyData = reactive({
})
const getIdExistToHistory = async ()=>{
return await new Promise((resolve, reject) => {
let value = {
id:Number(route.query?.id || route.query?.history),
}
Https.axiosPost( Https.httpUrls.historyProject, value)
.then((rv)=>{
resolve(rv.content.length > 0)
}).catch(()=>{resolve(false)})
})
}
watch(() => route.query,
(query, oldQuery) => {
nextTick(async ()=>{
const key = Object.keys(query)?.[0]
if(key){
if(query.id){
homeMainData.openType = 'history'
homeMainData.openTypeChild = query.id
}else{
homeMainData.openType = Object.keys(query)[0]
homeMainData.openTypeChild = query[Object.keys(query)[0]]
}
if((query?.id || query?.history) && !await getIdExistToHistory()){
router.push('/home')
return
}
}else{
homeMainData.openType = ''
homeMainData.openTypeChild = ''
}
if(
query.create == 'true' ||
query?.source == 'batch' ||
(query.history && query.type == 'Works')
){
settingGetHistory()
}
})
},
{ immediate: true } // 立即触发一次以处理初始参数
);
// watch(()=>homeMainData.openTypeList,()=>{
// homeMainData.historyData.page = 1
// })
watch(()=>homeMainData.userDetailLanguage,(newVal)=>{
locale.value = newVal
})
let userDetail= computed(()=>{
return store.state.UserHabit.userDetail
})
let isMurmur = ref()
let credits = computed(()=>{
return store.state.UserHabit.credits.value
})
let activeCredits = ref(false)
let getLangIsShowMark = ref(true)
let messageNum = computed(()=>{
return store.state.UserHabit.messageSystem.messageNum
})
let messageType = computed(()=>{
return store.state.UserHabit.messageSystem.messageType
})
let stateList = reactive({
isNewPosted:false,
isLanguage:false,
})
let newPosted = ref(null)
let getUnreadCount = ()=>{
Https.axiosGet(Https.httpUrls.getUnreadCount).then((rv)=>{
if(rv){
store.commit('setMessageSystem',[rv])
}
})
}
MyWs.close()
// MyWs.linkWs("wss://"+MyWs.messageUrl,'message')
MyWs.linkWs("wss://"+MyWs.messageUrl,'message')
let getWsMessage = (data)=>{
let userInfo = ['followeeCount','followerCount']
let obj = {}
let isObj = false
data.forEach(element => {
const keys = Object.keys(element)[0]
if(userInfo.indexOf(keys) > 0){
obj[keys] = element[keys]
isObj = true
}
});
if(isObj)store.commit('upUserDetail',obj)
store.commit('setMessageSystem',data)
}
MyEvent.add('getMessage',getWsMessage)
let openNewPosted = ()=>{
stateList.isNewPosted = !stateList.isNewPosted
newPosted.value.init()
document.addEventListener(
"click",
closeShowOperateContent,
false
);
}
//点击下拉图标出现操作
let changeLanguage=() =>{
stateList.isLanguage = !stateList.isLanguage;
document.addEventListener(
"click",
closeShowOperateContent,
false
);
}
//关闭下拉图标
let closeShowOperateContent=() =>{
stateList.isLanguage = false
stateList.isNewPosted = false
document.removeEventListener("click", closeShowOperateContent);
}
let renew = ref(null)
const openUpgradeToPro = ()=>{
renew.value.init()
}
const toUserManual = ()=>{
const route = router.resolve({ name: 'userManual' });
window.open(route.href + '?lang=' + locale.value, '_blank');
}
onMounted(async ()=>{
let test = getCookie('isTest')
let isTest =JSON.parse(test)
//判断账号剩余时间是否太短
let isModalOne = JSON.parse(sessionStorage.getItem("isTimeOne"))
if(!isModalOne){//判断是否是试用用户
await new Promise(async (resolve) => {
if(isTest){
resolve('')
}else{
await Https.axiosPost(Https.httpUrls.getExpiredTime,{}).then((rv) => {
if (rv) {
let dateNow = Date.now()
let date = new Date(dateNow)
let rvDate = new Date(rv);
let diffInMilliseconds = Math.abs(date - rvDate); // 获取时间差的毫秒数
let days = Math.floor(diffInMilliseconds / (24 * 60 * 60 * 1000)); // 计算天数
let hours = Math.floor((diffInMilliseconds % (24 * 60 * 60 * 1000)) / (60 * 60 * 1000)); // 计算小时数
let minutes = Math.floor((diffInMilliseconds % (60 * 60 * 1000)) / (60 * 1000)); // 计算分钟数
if(days < 5){
setTimeout(() => {
let text = {
str:`${t('HomeView.jsContent4',{days:days,hours:hours})}<a href="https://code-create.com.hk/aida" target="_blank">${t('HomeView.jsContent8')}</a>`,
title:`${t('HomeView.jsContent7')}`,
}
dataDom.affiche.init(text)
}, 500);
}
resolve('')
}else{
resolve('')
}
})
}
})
}
getUnreadCount()
nextTick(()=>{
setPorfolioDom()
})
})
const setOpenType = (type,list)=>{
if(homeMainData.openType == type){
homeMainData.openType = ''
}else {
homeMainData.openType = type
// if(type == 'history'){
// if(list.length == 0){
// }
// }
}
}
let setPorfolioDom = ()=>{
homeMainData.historyData.isShowLoading = false
homeMainData.historyData.isNoData = false
homeMainData.historyData.page = 1
let imgParent = document.querySelector('.homeMain_max .detail .material_content_list_loding .historyPage_loading')
new IntersectionObserver(
(entries, observer) => {
// 如果不是相交,则直接返回
if (!entries[0].intersectionRatio) return;
getHistory()
homeMainData.historyData.page += 1
},
).observe(imgParent);
}
const setRouter = (item,childItem)=>{
let itemRouter = item.router
if(childItem.router)itemRouter = itemRouter + '?' + childItem.router
router.push(itemRouter)
}
const setHistory = (item,childItem)=>{
// router.push(`/home/tools?tools=toProduct&id=${childItem.id}`)
if(childItem.process == 'SERIES_DESIGN' || childItem.process == "SINGLE_DESIGN"){
router.push(`/home?history=${childItem?.id}`)
}else{
let processList = {
toProduct:'TO_PRODUCT_IMAGE',
relight:'RELIGHT',
poseTransfer:'POSE_TRANSFER',
deReconstruction:'DE_RECONSTRUCTION',
patternMaking3D:'THREE_D_PLATE_MAKING',
canvasUpload:'CANVAS',
}
let process = ''
for (const key in processList) {
if(processList[key] == childItem.process){
process = key
break
}
}
router.push(`/home/tools?tools=${process}&id=${childItem.id}`)
}
// router.push(`/home?history=${childItem.id}`)
}
const settingGetHistory = ()=>{
homeMainData.historyData.page = 1
homeMainData.openTypeList.history = {
icon:"fi-br-time-past",
label:"History",
value:"history",
Todaylist:[],
Yesterdaylist:[],
WithinAWeeklist:[],
Earlierlist:[],
}
homeMainData.historyData.isShowLoading = false
homeMainData.historyData.isNoData = false
isFound = 0//表示是否找到当前id的记录
existToHistoryIndex = -1
}
provide('settingGetHistory',settingGetHistory)
const categorizeDate = (inputDate) => {
const now = new Date();
const date = new Date(inputDate);
// 计算时间差(毫秒)
const diffTime = now - date;
const diffDays = Math.floor(diffTime / (1000 * 60 * 60 * 24));
// 判断逻辑
if ((diffDays === -1 || diffDays === 0) && date.getDate() === now.getDate()) {
return "Today";
} else if (diffDays === 1 || (diffDays === 0 && date.getDate() !== now.getDate())) {
return "Yesterday";
} else if (diffDays <= 7) {
return "WithinAWeek";
} else {
return "Earlier";
}
}
let isFound = 0
let existToHistoryIndex = -1
const setScrollTop = ()=>{
setTimeout(()=>{
let historyDateList = ['Todaylist','Yesterdaylist','WithinAWeeklist','Earlierlist']
let num = 0
let dateIndex = -1 //表示某个时间段
let parent = document.querySelectorAll('.homeMain_max .navList .history .detail')
let imgParent = document.querySelectorAll('.homeMain_max .navList .history .detail>div')
if(existToHistoryIndex == -1){
parent[0].parentNode.scrollTop = parent[0].offsetHeight
}else{
isFound++
historyDateList.forEach((item,dateItemIndex)=>{
let length = homeMainData.openTypeList.history[item].length
if(existToHistoryIndex > length + num){
num += length
}else{
if(dateIndex == -1)dateIndex = dateItemIndex
}
})
let dateEl = imgParent[dateIndex].querySelectorAll('.history')
parent[0].parentNode.scrollTop = dateEl[existToHistoryIndex - num-1].offsetTop
}
},0)
}
const getHistory = ()=>{
if(homeMainData.historyData.isShowLoading && !homeMainData.historyData.isNoData)return
homeMainData.historyData.isShowLoading = true
let data = {
page:homeMainData.historyData.page,
size:homeMainData.historyData.size,
projectName:homeMainData.historyData.searchCollectionName,
asc:0,
process:'',
// startDate:startDate,
// endDate:endDate,
// intersection:1,
}
Https.axiosPost( Https.httpUrls.historyProject, data).then(
// Https.axiosPost( Https.httpUrls.queryUserGroup, data).then(
(rv) => {
if(data.page == 1 && rv.content.length == 0){
homeMainData.historyData.isNull = true
}else{
homeMainData.historyData.isNull = false
}
if (rv.content.length > 0) {
rv.content.forEach((item,index)=>{
let str = categorizeDate(item.updateTime) + 'list'
homeMainData.openTypeList.history[str].push(item)
if(item.id == (route.query?.id || route.query?.history)){
existToHistoryIndex = rv.page * rv.size + index + 1 - rv.size
}
})
homeMainData.historyData.isNull = false
if((route.query?.id || route.query?.history) && isFound < 1)setScrollTop()
} else {
homeMainData.historyData.isNoData = true
}
homeMainData.historyData.isShowLoading = false
}
).catch(res=>{
homeMainData.historyData.isShowMark = false
if(data.page == 1){
homeMainData.historyData.isNull = true
}
homeMainData.historyData.isNoData = true
});
}
const editHistory = (item,index,el,list)=>{
if(homeMainData.historyData.selectHistoryId == -1){
let top = el.target.parentNode.parentNode.getBoundingClientRect().y
let parentTop = el.target.parentNode.parentNode.parentNode.parentNode.parentNode.getBoundingClientRect().y
let parentHeight = el.target.parentNode.parentNode.parentNode.parentNode.parentNode.offsetHeight
let operation = el.target.parentNode.querySelector('.operation')
homeMainData.historyData.selectHistoryId = item.id
//判断弹窗是加载按钮上面还是下面
if(list.length == 1){
operation.classList.add('activeLeft')
return
}
if(top > parentHeight/2 + parentTop){//加在按钮上面
operation.classList.add('active')
}else{
operation.classList.remove('active')
}
}else{
homeMainData.historyData.selectHistoryId = -1
}
let operationCli = ()=>{
homeMainData.historyData.selectHistoryId = -1
document.removeEventListener("click", operationCli);
}
document.addEventListener("click",operationCli,);
}
const editName = (item)=>{
homeMainData.historyData.selectHistoryId = -1
for (const key in homeMainData.openTypeList.history) {
let list = ['Earlierlist','Todaylist','WithinAWeeklist','Yesterdaylist']
if(list.indexOf(key) == -1)continue
homeMainData.openTypeList.history[key].forEach((item)=>{
item.editName = false
})
}
item.editName = true
homeMainData.historyData.historyTextarea = item.name
}
const deleteItem = (item)=>{
Https.axiosPost(Https.httpUrls.projectDetail,{},{params:{projectId:item.id}}).then(
(rv) => {
homeMainData.historyData.selectHistoryId = -1
settingGetHistory()
if(homeMainData.openTypeChild == item.id){
router.push('/home')
}
}
);
}
const setting = (item)=>{
homeMainData.projectSetting.init(item)
homeMainData.historyData.selectHistoryId = -1
}
const accomplishHistory = (item)=>{
let data = {
name:homeMainData.historyData.historyTextarea,//library名字
id :item.id,//history id
}
Https.axiosPost(Https.httpUrls.projectSaveOrUpdate, data).then(
(rv) => {
item.name = homeMainData.historyData.historyTextarea
item.editName = false
homeMainData.historyData.historyTextarea = ''
}
).catch((res)=>{
});
}
const newProject = ()=>{
router.push('/home')
}
const bathGeneration = (item)=>{
homeMainData.openType = ''
homeMainData.historyData.selectHistoryId = -1
router.push(`/home/cloud?type=creation&id=${item.id}&name=${item.name}&process=${item.process}`)
}
return {
store,
userDetail,
t,
...toRefs(homeMainData),
...toRefs(historyData),
locale,
isMurmur,
credits,
activeCredits,
getLangIsShowMark,
messageNum,
messageType,
...toRefs(stateList),
newPosted,
openNewPosted,
changeLanguage,
closeShowOperateContent,
renew,
openUpgradeToPro,
setOpenType,
setRouter,
setHistory,
editHistory,
settingGetHistory,
editName,
deleteItem,
setting,
accomplishHistory,
newProject,
bathGeneration,
toUserManual,
}
},
data() {
return {
email: "",
emailCode: ["", "", "", "", "", ""], //邮箱验证码
time: 60, //60秒倒计时
timer: 0,
timerOperate: null,
numTime: 30,
timerSec: null,
modalWarning: null,
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'},
],
};
},
directives:{
},
async mounted() {
await new Promise((resolve, reject) => {
this.store.dispatch('getLangType').then(()=>{
this.getLangIsShowMark = false
resolve()
}).catch(()=>{
this.getLangIsShowMark = false
reject()
})
})
let isMurmur = getCookie('isMurmur')//获取是否是试用用户
this.isMurmur =JSON.parse(isMurmur)
if (this.userDetail.userId && this.userDetail.userId > -1) {
this.accountIsLogin();
} else {
this.$router.replace("/");
}
if(!this.isMurmur){
this.operateClick();
document.addEventListener("click", this.operateClick);
}
this.getCredits()
this.getLang('')
//语言适配
let tl1 = gsap.timeline({ paused: true });
let userDetailMax = document.querySelector('.homeMain_max .homeMain_user')
let userDetail = document.querySelector('.homeMain_max .homeMain_user_detail')
// let anmiation = TweenMax.to(userDetailMax,1, {'margin-top':'30px',opacity:1})
// anmiation.stop()
let state
tl1
.to(userDetail,.3, {opacity:1,display:'flex'})
// .to(userDetailIcon,.3, {'left':'16rem',y:'25%',x:'-50%',scale:1.5,opacity:1},'-=.3')
let overTime
let outTime
userDetailMax.addEventListener('mouseenter',(event)=>{
if(state && !outTime)return
clearTimeout(overTime)
clearTimeout(outTime)
overTime = setTimeout(() => {
state = true
this.isLanguage = false
tl1.play()
}, 500);
})
userDetailMax.addEventListener('mouseleave',(event)=>{
if(overTime){
clearTimeout(overTime)
}
if(!state)return
clearTimeout(outTime)
outTime = setTimeout(() => {
state = false
tl1.reverse()
}, 500);
})
let orderId = sessionStorage.getItem('orderId');//进入首页后是否打开订单列表查询到订单
if(orderId){
let payOrder = this.$refs.payOrder
payOrder.init(orderId)
}
},
methods: {
setTask(data){
this.openTask(data)
},
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
}
},
//查看订单
orderForm(){
let payOrder = this.$refs.payOrder
payOrder.init()
},
//教程
getTutorial(){
let url = 'https://aida-user-manual-chinese.super.site/'
if(this.locale == 'ENGLISH'){
url = 'https://code-create.com.hk/wp-content/uploads/2025/02/aida_3.0-Manual-2_5-EN.pdf'
showViewVideo({url:'https://code-create.com.hk/wp-content/uploads/2025/02/AiDA-demo-video_2_5_EN.mp4'})
}else{
showViewVideo({url:'https://code-create.com.hk/wp-content/uploads/2025/02/AiDA-demo-video_2_5_CN.mp4'})
}
//打开视频
const a = document.createElement('a');
a.href = url;
a.target = '_blank';
// a.download = 'aida_3.0-Manual.pptx'; // 下载的文件名
document.body.appendChild(a);
a.click();
},
//登出
async logout() {
let data = {
userId: this.userDetail.userId,
};
await Https.axiosPost(Https.httpUrls.accountLogout, data).then((rv) => {
// WriteCookie("token");
clonAllCookie()
});
this.$router.replace("/");
this.store.commit('createDetail')
this.store.commit('createProbject')
// WriteCookie("token");
// window.location.reload()
},
//判断是否登录
accountIsLogin() {
let data = {
userId: this.userDetail.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){
this.getLangIsShowMark = true
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()
// window.location.href = '/home';
}
this.getLangIsShowMark = false
}
}).catch(()=>{
this.getLangIsShowMark = false
})
},
setLocale(v){
this.setLang(v)
},
openTask(data){
let taskPage = this.$refs.TaskPage
taskPage.init(data)
},
openAccount(){
this.$router.push("/home/account")
},
openMessage(){
this.$router.push("/home/account/accountMessage")
},
},
});
</script>
<style lang="less" scoped>
.homeMain_max{
position: relative;
display: flex;
height: 100%;
box-sizing: border-box;
> .leftBox{
height: 100%;
background: #f5f5f5;
overflow: hidden;
width: 29.5rem;
transition: width .3s;
&.leftHide{
width: 0;
}
> .left{
// width: 26rem;
width: 29.5rem;
height: 100%;
padding: 2.4rem 2.2rem;
display: flex;
flex-direction: column;
.marginT2{
margin-top: 2rem;
}
.marginB2{
// margin-bottom: 1rem;
&.active{
margin-bottom: 1rem;
}
}
.list{
display: flex;
flex-direction: column;
// padding: 1.2rem;
max-height: 5rem;
border-radius: 2rem;
&.active{
> .detailBox{
flex: 1;
}
}
&.history{
flex: 1;
> .detailBox{
>.detail{
min-height: 10rem;
}
}
}
> .titleBox{
padding: 1.2rem;
display: flex;
font-size: 1.8rem;
cursor: pointer;
justify-content: space-between;
align-items: center;
font-weight: 500;
i{
display: flex;
font-size: 1.8rem;
}
> .left{
display: flex;
align-items: center;
> i{
margin-right: 1rem;
}
> span{
line-height: 2.4rem;
// color: #52525b;
transition: all .3s;
color: #000000BF;
}
}
> .right{
> i{
transition: all .3s;
}
}
&:hover{
> .left{
> span{
color: #000;
}
}
}
}
> .detailBox{
overflow: auto;
scrollbar-width: none;
flex: 0;
> .detail{
position: relative;
height: 100%;
padding: 0 .5rem;
> img{
width: 100%;
}
.timeType{
font-size: 1.6rem;
color: #52525b;
font-weight: 400;
margin-top: 1.2rem;
margin-bottom: .8rem;
}
.detailItem{
cursor: pointer;
padding: .8rem;
// padding: 1.2rem 1.1rem 1.2rem 2.2rem;
font-size: 1.8rem;
// font-size: 1.4rem;
font-weight: 400;
margin-bottom: .4rem;
border-radius: .8rem;
display: flex;
align-items: center;
flex-wrap: wrap;
// flex-wrap: nowrap;
&.history{
padding: 1.2rem 1.1rem 1.2rem 2.2rem;
margin-bottom: 1rem;
> .text{
flex-basis: 100%;
}
}
> .time{
font-size: 1.2rem;
opacity: .5;
}
> i{
font-size: 1.8rem;
margin-right: 1rem;
display: flex;
}
> .text{
flex: 1;
overflow: hidden;
> span{
//只在一行显示
width: 100%;
display: block;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
}
&.active{
// background: #f5f5f5;
background-color: #ffffff;
}
&:hover{
// background: #f5f5f5;
background-color: #ffffff;
}
&.history{
background: #f5f5f5;
// background-color: #ffffff;
&:hover{
background: #fdfdfd;
// background-color: #ffffff;
}
&.active{
background: #fdfdfd;
// background-color: #ffffff;
}
> .text{
> span{
width: 100%;
font-weight: 600;
line-height: 2rem;
font-size: 1.8rem;
display: inline-block;
}
> textarea{
resize: none;
border: none;
background: rgba(0, 0, 0, 0);
font-weight: 600;
line-height: 2rem;
height: 4rem;
width: 100%;
font-size: 1.8rem;
}
}
> .type{
border: 1px solid #0000000d;
padding: .4rem .8rem;
border-radius: .8rem;
color: #71717a;
font-size: 1.4rem;
max-width: 70%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
min-width: 40%;
text-align: center;
}
> .btn{
border: 1px solid #0000000d;
border-radius: .8rem;
margin-left: auto;
position: relative;
> i{
width: 3rem;
height: 3rem;
display: flex;
align-items: center;
justify-content: center;
}
> .fi-br-check{
border-radius: 50%;
background: #38c793;
color: #fff;
width: 2rem;
height: 2rem;
}
> .operation{
position: absolute;
right: 0;
top: 3rem;
background: #e4e4e7;
border: 1px solid #d4d4d8;
border-radius: 1rem;
z-index: 7;
padding: .8rem;
box-shadow: 0 0 3.2rem -.8rem #1a1b1e33;
position: absolute;
height: min-content;
&.active{
top: auto;
bottom: 3rem;
}
&.activeLeft{
bottom: 0;
}
> .item{
padding: .8rem;
color: #52525b;
display: flex;
border-radius: .8rem;
cursor: pointer;
align-items: center;
> i{
font-size: 1.6rem;
display: flex;
}
> span{
margin-left: .5rem;
white-space: nowrap;
}
&:hover{
background: #efeff1;
}
}
}
}
}
}
.detailItem:last-child{
margin-bottom: 0;
}
> .material_content_list_loding{
text-align: center;
height: 50px;
.page_loading{
display: block;
width: 50px;
height: 50px;
margin: 0 auto;
}
img{
height: calc(10rem*1.2);
}
}
}
}
&.active{
padding: 1.2rem 0;
overflow: hidden;
max-height: 100%;
background: #00000008;
> .titleBox{
padding: 0;
margin-bottom: 1.6rem;
padding: 0 1.2rem;
> .right{
> i{
transform: rotate(180deg);
}
}
}
}
&.language{
> .titleBox{
padding: .8rem;
background: #00000000;
height: 5rem;
> .left{
> i{
margin-right: 2rem;
}
}
}
> .detailBox{
> .detail{
.detailItem{
padding: .8rem;
> svg{
margin-right: 2.5rem;
width: 2rem;
height: 2rem;
}
> span{
color: #111a18;
opacity: .5;
margin-left: 4.5rem;
font-weight: 600;
}
&.active{
> span{
color: #52525b;
opacity: 1;
margin-left: 0px;
}
}
}
}
}
}
}
> .title{
display: flex;
padding: .4rem;
align-items: center;
justify-content: space-between;
> span{
font-size: 2rem;
font-weight: 600;
}
> img{
width: 2.7rem;
}
> svg{
cursor: pointer;
}
}
> .navList{
height: 100%;
overflow: hidden;
display: flex;
flex-direction: column;
margin-top: 2.8rem;
}
> .segmentation{
height: 2px;
background: #0000000d;
margin-top: 2rem;
width: 100%;
}
> .navListBottom{
display: flex;
flex-direction: column;
}
> .gallery_btn{
margin-top: 2rem;
}
}
}
.newObj{
border-radius: 2rem;
border: 2px solid #000;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
margin-top: 4.2rem;
width: 25.1rem;
// height: 6.8rem;
padding: calc(2rem - 2px) 0;
> svg{
margin-right: 1.3rem;
width: 1.6rem;
height: 1.6rem;
}
> p{
font-size: 2rem;
font-weight: 500;
margin: 0;
}
}
> .rightBox{
flex: 1;
overflow: hidden;
> .right{
display: flex;
width: 100%;
height: 100%;
flex-direction: column;
position: relative;
> .user{
margin-bottom: 1rem;
display: flex;
justify-content: flex-end;
padding: 3.2rem 2.1rem 1.2rem;
align-items: center;
> .left{
display: flex;
align-items: center;
margin-right: auto;
> .newObj{
background: #fff;
padding: 1.2rem 2.5rem;
margin: 0;
width: 17.7rem;
border-radius: 3rem;
p{
font-size: 1.6rem;
font-weight: 600;
}
}
> svg{
margin-right: 2rem;
cursor: pointer;
}
}
> .homeMain_right_content {
top: 0;
left: 0;
display: flex;
align-items: center;
margin-right: 1.2rem;
.homeMain_icon {
font-size: 3.6rem;
position: relative;
top: 0.3rem;
}
.username {
font-size: 1.6rem;
color: #1a1a1a;
margin: 0 0.8rem;
font-weight: 900;
span{
margin: .7rem;
}
}
.credits{
font-size: 1.6rem;
color: #1a1a1a;
font-weight: 500;
cursor: auto;
display: flex;
line-height: calc(5rem - 4px);
height: 5rem;
border-radius: 3.4rem;
justify-content: center;
width: auto;
// width: calc(25.3rem - 4px);
padding: 0 1.2rem;
border: 1.72px solid #000;
span{
// width: 5rem;
max-width: 10rem;
display: inline-block;
overflow: hidden;
display: flex;
margin-right: 1.2rem;
.credits_item{
transition: .3s all;
// height: 4rem;
height: 100%;
// height: 3.2rem;
div{
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}
}
}
i{
height: 100%;
border-left: 1.72px solid ;
padding-left: 1.3rem;
margin-left: 1.5rem;
font-size: 2.2rem;
cursor: pointer;
display: flex;
align-items: center;
}
.fi-rr-shop{
font-size: 2.4rem;
}
.fi-br-refresh{
margin-left: 0;
border-left: none;
padding-left: 0;
&.active{
transition: all .3s;
transform: rotate(360deg);
}
}
}
}
> .trialApproval{
display: flex;
align-items: center;
> .message_iconItem{
position: relative;
cursor: pointer;
margin: 0;
margin-right: 1.4rem;
i{
width: 2.4rem;
height: 2.4rem;
display: flex;
align-items: center;
justify-content: center;
}
}
}
.homeMain_user{
height: 5.6rem;
width: 5.6rem;
// margin-left: auto;
display: flex;
position: relative;
align-items: center;
position: relative;
.homeMain_user_icon{
height: 5.6rem;
width: 5.6rem;
position: relative;
// transform-origin: top;
overflow: hidden;
z-index: 2;
left: 0;
border-radius: 50%;
cursor: pointer;
background: #fff;
img{
background: #000;
width: 100%;
height: 100%;
object-fit: cover;
}
// transition: all .3s;
}
.homeMain_user_detail{
z-index: 1050;
position: absolute;
top: calc(100% + .5rem);
background: #fff;
width: 34rem;
height: auto;
opacity: 0;
right: 0px;
display: none;
// box-shadow: 0 0px 10px 1px rgba(0, 0, 0, 0.12);
text-align: center;
flex-direction: column;
align-items: center;
padding: 1.2rem 2rem;
border: 2px solid #000;
border-radius: 2rem;
.username,.homeMain_user_detail_attention,.homeMain_subscribe{
margin-bottom: 2rem;
}
.homeMain_user_icon{
position: relative;
}
.homeMain_subscribe{
padding: 2rem;
background: #f3f3f6;
border-radius: 1.4rem;
cursor: pointer;
width: 100%;
> div{
display: flex;
margin-bottom: 2rem;
}
> div:last-child{
margin-bottom: 0;
}
.font{
font-size: 1.6rem;
font-weight: 600;
margin-right: 1rem;
}
.stateSucsess{
color: #3ab45c;
}
.stateError{
color: #b43a3a;
}
.time{
font-size: 1.4rem;
font-weight: 400;
margin-left: auto;
}
}
.homeMain_select{
width: 100%;
.select_item {
padding: 0 1rem;
border-radius: .8rem;
line-height: 4rem;
color: #4d4d4d;
display: flex;
align-items: center;
cursor: pointer;
user-select: none;
width: 100%;
flex-wrap: wrap;
&:hover {
background: #f3f3f6;
}
.fi{
font-size: 1.8rem;
}
.iconfont ,.fi-rr-book-user {
// font-size: 1.4rem;
}
.select_item_des {
font-size: 1.6rem;
margin-left: 1rem;
font-weight: 500;
}
}
.select_item_long{
border-bottom: 1px solid #eceaea;
margin: 2rem 0;
}
.icon-xiala{
margin-left: auto;
&.active{
transform: rotate(180deg);
}
}
.select_list{
height: 0;
overflow: hidden;
transition: all .3s;
width: 100%;
margin: 0;
> li{
padding-left: 2.5rem;
}
&.active{
height: auto;
}
}
}
.homeMain_user_detail_attention{
width: 100%;
display: flex;
justify-content: space-between;
padding-left: 3.5rem;
padding-right: 3.5rem;
.attention_item{
display: flex;
flex-direction: column;
align-items: center;
}
.attention_item_active{
cursor: pointer;
}
.attention_item_active:hover{
color: #000;
span{
color: #000;
}
}
div{
font-size: 1.6rem;
font-weight: 600;
}
span{
font-size: 1.4rem;
color: #949eae;
}
}
}
}
}
> .router{
flex: 1;
overflow: hidden;
padding: 0 6rem;
padding-bottom: 2rem;
}
> .userSystem{
top: 0;
left: 0;
position: absolute;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.4);
z-index:2;
display: flex;
justify-content: center;
align-items: center;
color: #fff;
font-weight: 600;
font-size: 4rem;
}
}
}
}
.select_block {
z-index: 1050;
position: absolute;
right: 0rem;
top: 4rem;
width: 13.5rem;
background: #ffffff;
box-shadow: 0px 0.4rem 0.4rem 0px rgba(0, 0, 0, 0.1);
overflow: hidden;
border: 1px solid #000000;
height: auto;
padding: 2rem;
border-radius: 2rem;
// &.select_list{
// top: 56%;
// left: 100%;
// // transform: translateX(5%);
// }
.homeMain_select{
width: 100%;
.select_item {
height: 4.1rem;
color: #4d4d4d;
display: flex;
align-items: center;
cursor: pointer;
user-select: none;
width: 100%;
&:hover {
background: #f7f7f7;
}
.iconfont ,.fi-rr-book-user {
// font-size: 1.4rem;
}
.select_item_des {
font-size: 1.6rem;
margin-left: 1rem;
font-weight: 500;
}
}
}
}
.modal_component {
.skip_content {
width: 6rem;
height: 3rem;
line-height: 2.8rem;
border: 0.1rem solid #000;
font-size: 1.4rem;
color: #000;
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: #000;
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-weight: bold;
color: #030303;
}
.tip_content {
font-size: 1.3rem;
font-weight: bold;
color: #000;
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>