fix
This commit is contained in:
@@ -1323,13 +1323,34 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
|
||||
.admin_page .admin_search_item:last-child {
|
||||
margin: 0;
|
||||
}
|
||||
.admin_page .awayOrUnfold {
|
||||
bottom: 0;
|
||||
transition: all 0.3s;
|
||||
background: #fff;
|
||||
text-align: center;
|
||||
}
|
||||
.admin_page .awayOrUnfold.active span {
|
||||
transform: translateY(50%) rotate(0deg);
|
||||
}
|
||||
.admin_page .awayOrUnfold span {
|
||||
display: inline-block;
|
||||
transform: translateY(50%) rotate(180deg);
|
||||
cursor: pointer;
|
||||
border: 2px solid;
|
||||
border-radius: 50%;
|
||||
width: 3rem;
|
||||
height: 3rem;
|
||||
background-color: #fff;
|
||||
}
|
||||
.admin_page .admin_table_search {
|
||||
flex-wrap: wrap;
|
||||
overflow: hidden;
|
||||
margin-top: 2rem;
|
||||
padding: 2rem 3.5rem 5rem 2.8rem;
|
||||
padding: 2rem 3.5rem 2rem 2.8rem;
|
||||
background: #fff;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
position: relative;
|
||||
}
|
||||
.admin_page .admin_table_search .admin_search {
|
||||
width: 20%;
|
||||
@@ -1360,6 +1381,8 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
|
||||
position: relative;
|
||||
cursor: pointer;
|
||||
width: 80%;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.admin_page .admin_table_search .admin_state .admin_current {
|
||||
background: #fff;
|
||||
@@ -1392,17 +1415,40 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
|
||||
.admin_table_content {
|
||||
margin-top: 2.6rem;
|
||||
width: 100%;
|
||||
flex: 1;
|
||||
height: calc(100% - 13.7rem);
|
||||
padding-bottom: 3rem;
|
||||
background: #fff;
|
||||
border-radius: 2rem;
|
||||
overflow: hidden;
|
||||
}
|
||||
.admin_table_content .ant-table-wrapper,
|
||||
.admin_table_content .ant-spin-nested-loading,
|
||||
.admin_table_content .ant-spin-container {
|
||||
height: 100%;
|
||||
}
|
||||
.admin_table_content .ant-spin-container {
|
||||
display: flex;
|
||||
overflow: hidden;
|
||||
flex-direction: column;
|
||||
}
|
||||
.admin_table_content .ant-table {
|
||||
background: transparent;
|
||||
flex: 1;
|
||||
overflow: hidden;
|
||||
}
|
||||
.admin_table_content .ant-table .ant-table-container {
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
.admin_table_content .ant-table .ant-table-container .ant-table-content {
|
||||
height: 100%;
|
||||
}
|
||||
.admin_table_content .ant-table-body {
|
||||
flex: 1;
|
||||
overflow-y: auto !important;
|
||||
max-height: inherit !important;
|
||||
-ms-overflow-style: none;
|
||||
overflow: -moz-scrollbars-none;
|
||||
}
|
||||
|
||||
@@ -1084,7 +1084,9 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
|
||||
background: #fff;
|
||||
border-radius: 2rem;
|
||||
overflow: hidden;
|
||||
.ant-table-wrapper,.ant-spin-nested-loading,.ant-spin-container{
|
||||
.ant-table-wrapper,
|
||||
.ant-spin-nested-loading,
|
||||
.ant-spin-container{
|
||||
height: 100%;
|
||||
}
|
||||
.ant-spin-container{
|
||||
@@ -1441,7 +1443,6 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
|
||||
cursor: pointer;
|
||||
margin: 0 2rem 2rem 0;
|
||||
background-color: #000;
|
||||
|
||||
&:hover{
|
||||
color: #000;
|
||||
border: 2px solid #000;
|
||||
@@ -1451,14 +1452,42 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
|
||||
.admin_search_item:last-child{
|
||||
margin: 0;
|
||||
}
|
||||
.awayOrUnfold{
|
||||
bottom: 0;
|
||||
transition: all .3s;
|
||||
background: #fff;
|
||||
text-align: center;
|
||||
&.active{
|
||||
span{
|
||||
transform: translateY(50%) rotate(0deg);
|
||||
}
|
||||
}
|
||||
span{
|
||||
display: inline-block;
|
||||
transform: translateY(50%) rotate(180deg);
|
||||
cursor: pointer;
|
||||
border: 2px solid;
|
||||
border-radius: 50%;
|
||||
width: 3rem;
|
||||
height: 3rem;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
}
|
||||
.admin_table_search {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
overflow: hidden;
|
||||
margin-top: 2rem;
|
||||
padding: 2rem 3.5rem 5rem 2.8rem;
|
||||
padding: 2rem 3.5rem 2rem 2.8rem;
|
||||
background: #fff;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
position: relative;
|
||||
&.active{
|
||||
|
||||
}
|
||||
|
||||
.admin_search{
|
||||
width: 20%;
|
||||
|
||||
@@ -1489,7 +1518,8 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
|
||||
position: relative;
|
||||
cursor: pointer;
|
||||
width: 80%;
|
||||
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
|
||||
.admin_current{
|
||||
background: #fff;
|
||||
@@ -1525,17 +1555,40 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
|
||||
.admin_table_content {
|
||||
margin-top: 2.6rem;
|
||||
width: 100%;
|
||||
flex: 1;
|
||||
height: calc(100% - 13.7rem);
|
||||
padding-bottom: 3rem;
|
||||
background: #fff;
|
||||
border-radius: 2rem;
|
||||
overflow: hidden;
|
||||
.ant-table-wrapper,
|
||||
.ant-spin-nested-loading,
|
||||
.ant-spin-container{
|
||||
height: 100%;
|
||||
}
|
||||
.ant-spin-container{
|
||||
display: flex;
|
||||
overflow: hidden;
|
||||
flex-direction: column;
|
||||
}
|
||||
.ant-table {
|
||||
background: transparent;
|
||||
flex: 1;
|
||||
overflow: hidden;
|
||||
.ant-table-container{
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
.ant-table-content{
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.ant-table-body {
|
||||
flex: 1;
|
||||
overflow-y: auto !important;
|
||||
max-height: inherit !important;
|
||||
-ms-overflow-style: none;
|
||||
overflow: -moz-scrollbars-none;
|
||||
&::-webkit-scrollbar {
|
||||
|
||||
@@ -267,7 +267,7 @@ export default defineComponent({
|
||||
height: 100%;
|
||||
// overflow-y: auto;
|
||||
padding: 0 30rem;
|
||||
padding-top: 10rem;
|
||||
padding-top: 7rem;
|
||||
display: flex;
|
||||
overflow: hidden;
|
||||
.account_page_titleImg{
|
||||
|
||||
@@ -119,6 +119,7 @@ export default defineComponent({
|
||||
<style lang="less" scoped>
|
||||
.account_followFans{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
.account_followFans_title{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
@@ -131,6 +132,7 @@ export default defineComponent({
|
||||
}
|
||||
.account_followFans_body{
|
||||
padding-bottom: 3rem;
|
||||
height: 100%;
|
||||
:deep(.ant-badge){
|
||||
font-size: var(--aida-fsize2);
|
||||
}
|
||||
@@ -154,6 +156,10 @@ export default defineComponent({
|
||||
background: #000;
|
||||
}
|
||||
}
|
||||
:deep(.ant-tabs-content){
|
||||
height: 100%;
|
||||
overflow-y: auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -141,6 +141,7 @@ export default defineComponent({
|
||||
}
|
||||
:deep(.ant-tabs-nav){
|
||||
padding: 0rem 5rem;
|
||||
margin-bottom: 6rem;
|
||||
&::before{
|
||||
display: none;
|
||||
}
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
<template>
|
||||
<div class="accountEdit_page">
|
||||
<div class="accountEdit_page_body">
|
||||
<div class="accountEdit_page_body_item">
|
||||
<div class="accountEdit_page_body_item generalModel_state">
|
||||
<div class="accountEdit_page_body_item_name">{{$t('account.Name')}}:</div>
|
||||
<div class="accountEdit_page_body_item_inut" style="display: flex;justify-content: space-between;">
|
||||
<div class="generalModel_state_item" style="display: flex;justify-content: space-between;">
|
||||
<a-select
|
||||
class="gallerySelect"
|
||||
v-model:value="selectSex"
|
||||
size="large"
|
||||
optionFilterProp="label"
|
||||
@@ -15,16 +14,17 @@
|
||||
allowClear
|
||||
show-search
|
||||
></a-select>
|
||||
<input class="login_form_input" style="width: 30%;" :class="{active:!!userDetail.occupation}" type="text" :placeholder="$t('account.plaseFirst')" v-model="surname">
|
||||
<input class="login_form_input" style="width: 30%;" :class="{active:!!userDetail.occupation}" type="text" :placeholder="$t('account.plaseLast')" v-model="givenName">
|
||||
<input class="" style="width: 30%;" :class="{active:!!userDetail.occupation}" type="text" :placeholder="$t('account.plaseFirst')" v-model="surname">
|
||||
<input class="" style="width: 30%;" :class="{active:!!userDetail.occupation}" type="text" :placeholder="$t('account.plaseLast')" v-model="givenName">
|
||||
</div>
|
||||
</div>
|
||||
<div class="accountEdit_page_body_item">
|
||||
<div class="accountEdit_page_body_item generalModel_state">
|
||||
<div class="accountEdit_page_body_item_name">{{$t('account.Country')}}:</div>
|
||||
<div class="accountEdit_page_body_item_inut">
|
||||
<div class="generalModel_state_item">
|
||||
<a-select
|
||||
v-model:value="Country"
|
||||
size="large"
|
||||
style="width: 100%;"
|
||||
optionFilterProp="label"
|
||||
:options="countryList"
|
||||
placeholder="Please select"
|
||||
@@ -33,10 +33,10 @@
|
||||
></a-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="accountEdit_page_body_item">
|
||||
<div class="accountEdit_page_body_item generalModel_state">
|
||||
<div class="accountEdit_page_body_item_name">{{$t('account.CompanyName')}}:</div>
|
||||
<div class="accountEdit_page_body_item_inut">
|
||||
<input type="text" v-model="CompanyName">
|
||||
<div class="generalModel_state_item">
|
||||
<input type="text" style="width: 100%;" v-model="CompanyName">
|
||||
</div>
|
||||
</div>
|
||||
<div class="accountEdit_page_body_item">
|
||||
@@ -165,56 +165,27 @@ export default defineComponent({
|
||||
margin-bottom: 20px;
|
||||
flex-direction: column;
|
||||
width: 100%;
|
||||
align-items: flex-start;
|
||||
.generalModel_state_item{
|
||||
width: 100%;
|
||||
|
||||
}
|
||||
.gallery_btn{
|
||||
margin-left: auto;
|
||||
}
|
||||
.gallerySelect{
|
||||
box-sizing: border-box;
|
||||
height: 40px;
|
||||
:deep(.ant-select-selector){
|
||||
height: 40px;
|
||||
border: 2px solid #D0D0D0;
|
||||
border-radius: 1.6rem;
|
||||
align-items: center;
|
||||
}
|
||||
:deep(.ant-select-selector):hover{
|
||||
border: 2px solid #000;
|
||||
}
|
||||
}
|
||||
input,textarea{
|
||||
textarea{
|
||||
padding-left: 11px;
|
||||
border-radius: 1.6rem;
|
||||
border: 2px solid #D0D0D0;
|
||||
width: 100%;
|
||||
font-size: 2rem;
|
||||
}
|
||||
input{
|
||||
height: 40px;
|
||||
}
|
||||
.accountEdit_page_body_item_name{
|
||||
color: #000;
|
||||
text-align: left;
|
||||
font-size: 2rem;
|
||||
}
|
||||
.accountEdit_page_body_item_inut{
|
||||
margin-top: 1.5rem;
|
||||
flex: 1;
|
||||
.ant-select-lg{
|
||||
font-size: 2rem;
|
||||
}
|
||||
.ant-select{
|
||||
width: 100%;
|
||||
border-radius: 1.6rem;
|
||||
border: 2px solid #D0D0D0;
|
||||
overflow: hidden;
|
||||
.ant-select-selector{
|
||||
border-radius: 1.6rem;
|
||||
}
|
||||
:deep(.ant-select-selector ){
|
||||
border: none !important;
|
||||
}
|
||||
}
|
||||
|
||||
font-weight: 600;
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
}
|
||||
.accountEdit_page_body_item:last-child{
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div class="admin_page">
|
||||
<div class="admin_table_search">
|
||||
<div class="admin_table_search" :style="{height:isAwayOrUnfold?'7rem':''}">
|
||||
<div class="admin_state">
|
||||
<div class="admin_state_item">
|
||||
<span>Create Time:</span>
|
||||
@@ -98,7 +98,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="admin_search">
|
||||
<div class="admin_search_item" @click="searchHistoryList">
|
||||
<div class="admin_search_item" @click="searchHistoryList" :style="{height:isAwayOrUnfold?'4rem':''}">
|
||||
Search
|
||||
</div>
|
||||
<div class="admin_search_item" @click="downloadTransaction">
|
||||
@@ -126,7 +126,9 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="awayOrUnfold" :class="{active:isAwayOrUnfold}">
|
||||
<span class="icon iconfont menu_icon icon-xiala" @click="()=>isAwayOrUnfold = !isAwayOrUnfold"></span>
|
||||
</div>
|
||||
<div class="admin_table_content" ref="historyTable">
|
||||
<a-table
|
||||
@resizeColumn="handleResizeColumn"
|
||||
@@ -190,6 +192,7 @@ export default defineComponent({
|
||||
countryList: computed(()=>{
|
||||
return store.state.adminPage.country
|
||||
}),
|
||||
isAwayOrUnfold:false
|
||||
});
|
||||
let filterData: any = reactive({
|
||||
rangePickerValue: [],
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div class="admin_page">
|
||||
<div class="admin_table_search">
|
||||
<div class="admin_table_search" :style="{height:isAwayOrUnfold?'7rem':''}">
|
||||
<div class="admin_state">
|
||||
<div class="admin_state_item">
|
||||
<span>Create Time:</span>
|
||||
@@ -76,7 +76,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="admin_search">
|
||||
<div class="admin_search_item" @click="searchHistoryList">
|
||||
<div class="admin_search_item" @click="searchHistoryList" :style="{height:isAwayOrUnfold?'4rem':''}">
|
||||
Search
|
||||
</div>
|
||||
<div class="admin_search_item" @click="addhHistoryList">
|
||||
@@ -104,7 +104,9 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="awayOrUnfold" :class="{active:isAwayOrUnfold}">
|
||||
<span class="icon iconfont menu_icon icon-xiala" @click="()=>isAwayOrUnfold = !isAwayOrUnfold"></span>
|
||||
</div>
|
||||
<div class="admin_table_content" ref="historyTable">
|
||||
<a-table
|
||||
@resizeColumn="handleResizeColumn"
|
||||
@@ -168,7 +170,8 @@ export default defineComponent({
|
||||
allUserList: computed(()=>{
|
||||
return store.state.adminPage.allUserList
|
||||
}),
|
||||
allCountry:[]
|
||||
allCountry:[],
|
||||
isAwayOrUnfold:false
|
||||
});
|
||||
let filterData: any = reactive({
|
||||
rangePickerValue: [],
|
||||
@@ -523,5 +526,8 @@ export default defineComponent({
|
||||
.admin_page .admin_table_search .admin_state {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.admin_page{
|
||||
|
||||
}
|
||||
</style>
|
||||
@@ -29,7 +29,7 @@
|
||||
</div>
|
||||
<div class="allUserPoeration_center admin_page">
|
||||
<div class="admin_state_item">
|
||||
<span>Cooperator: <span>*</span></span>
|
||||
<span>Cooperator:</span>
|
||||
<input
|
||||
v-model="cooperator"
|
||||
placeholder="Please enter cooperator"
|
||||
@@ -65,7 +65,7 @@
|
||||
</a-space>
|
||||
</div>
|
||||
<div class="admin_state_item" >
|
||||
<span>Maximum: <span>*</span></span>
|
||||
<span>MaxRedemptions:</span>
|
||||
<input
|
||||
:class="{active:title != 'Add'}"
|
||||
v-model="maxRedemptions"
|
||||
@@ -75,7 +75,7 @@
|
||||
/>
|
||||
</div>
|
||||
<div class="admin_state_item" >
|
||||
<span>PaidCommission: <span>*</span></span>
|
||||
<span>PaidCommission:</span>
|
||||
<input
|
||||
v-model="paidCommission"
|
||||
placeholder="Please enter paidCommission"
|
||||
@@ -84,7 +84,7 @@
|
||||
/>
|
||||
</div>
|
||||
<div class="admin_state_item">
|
||||
<span>Remark: <span>*</span></span>
|
||||
<span>Remark:</span>
|
||||
<input
|
||||
v-model="remark"
|
||||
placeholder="Please enter remark"
|
||||
@@ -197,7 +197,7 @@ export default defineComponent({
|
||||
let data
|
||||
if(operations.title == 'Add'){
|
||||
data = setAddData()
|
||||
if(!data.commissionRate || !data.maxRedemptions || !data.timestamp || !data.percentOff)return message.warning('Please check the input box marked with *')
|
||||
if(!data.commissionRate || !data.timestamp || !data.percentOff)return message.warning('Please check the input box marked with *')
|
||||
Https.axiosPost(Https.httpUrls.createCoupon, data).then(
|
||||
(rv) => {
|
||||
if (rv) {
|
||||
@@ -208,7 +208,6 @@ export default defineComponent({
|
||||
);
|
||||
}else{
|
||||
data = setEditData()
|
||||
if(!data.cooperator || !data.paidCommission || !data.remark )return message.warning('Please check the input box marked with *')
|
||||
Https.axiosGet(Https.httpUrls.updatePromCodeInfo,{params:data}).then(
|
||||
(rv) => {
|
||||
if (rv) {
|
||||
|
||||
@@ -90,6 +90,13 @@
|
||||
style="margin-right: 2rem;"
|
||||
>
|
||||
Edit
|
||||
</div>
|
||||
<div
|
||||
class="operate_item"
|
||||
@click="deletePromCode(record)"
|
||||
style="margin-right: 2rem;"
|
||||
>
|
||||
Delete
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@@ -99,8 +106,10 @@
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts">
|
||||
import { defineComponent, ref, reactive, toRefs, computed, toRef } from "vue";
|
||||
import { defineComponent, ref, reactive, toRefs, computed, toRef, createVNode } from "vue";
|
||||
import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
|
||||
import { useStore } from "vuex";
|
||||
import { Modal,message,Upload,CascaderProps } from 'ant-design-vue';
|
||||
import { Https } from "@/tool/https";
|
||||
import allUserPoerationsVue from "./addAllUser.vue";
|
||||
export default defineComponent({
|
||||
@@ -267,6 +276,7 @@ export default defineComponent({
|
||||
let setAagree = (data:any) =>{
|
||||
dataDom.allUserPoerationsVue.init('Edit',data)
|
||||
}
|
||||
|
||||
return {
|
||||
...toRefs(dataDom),
|
||||
rangePickerValue,
|
||||
@@ -320,7 +330,22 @@ export default defineComponent({
|
||||
this.currentPage = 1;
|
||||
this.gettrialList();
|
||||
},
|
||||
|
||||
deletePromCode(value:any){
|
||||
let this_ = this
|
||||
Modal.confirm({
|
||||
title: 'Are you sure you want to delete this discount record',
|
||||
icon: createVNode(ExclamationCircleOutlined),
|
||||
okText: 'Yes',
|
||||
cancelText: 'No',
|
||||
mask:false,
|
||||
centered:true,
|
||||
onOk() {
|
||||
Https.axiosGet(Https.httpUrls.deletePromCode,{params:{id:value.id}}).then((res:any)=>{
|
||||
this_.gettrialList()
|
||||
})
|
||||
}
|
||||
});
|
||||
},
|
||||
//获取列表
|
||||
gettrialList() {
|
||||
// let startTime: any = this.rangeTimeValue[0]
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
{{ item.name }}
|
||||
</div>
|
||||
<div @click.stop="canvasGeneral.layerDelete(index,item.id)" :class="{noDelete:canvasGeneral.layer.list.length == 1}">
|
||||
<i class="fi fi-rr-trash icon_delete"></i>
|
||||
<i class="fi fi-rr-trash icon_delete" style="height: 100%;padding: 0;"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
<div style="display: flex; justify-content: center; margin-top: 2rem;">
|
||||
<div class="gallery_btn" style="margin: 0 2rem;" @click="setShare">{{ $t('exportModel.Share') }}</div>
|
||||
<div class="gallery_btn" style="margin: 0 2rem;" @click="setExport">{{ $t('exportModel.Export') }}</div>
|
||||
<div class="gallery_btn" style="margin: 0 2rem;" @click="setExport">{{ $t('exportModel.Export') }}</div>
|
||||
</div>
|
||||
<liquefaction ref="liquefaction" @submitLiquefaction="submitLiquefaction"></liquefaction>
|
||||
<publish ref="publish" @clearPublish="()=>{}"></publish>
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
|
||||
</template>
|
||||
<script lang="ts">
|
||||
import { defineComponent,computed,onBeforeUnmount,provide,nextTick,createVNode,toRefs, reactive} from 'vue'
|
||||
import { defineComponent,computed,onBeforeUnmount,provide,nextTick,createVNode,toRefs, reactive, onMounted} from 'vue'
|
||||
import detailLeft from './detailLeft/index.vue'
|
||||
import model from './model/index.vue'
|
||||
import detailRight from './detailRight/index.vue'
|
||||
@@ -363,11 +363,24 @@ export default defineComponent({
|
||||
const canvasReload = ()=>{
|
||||
detailData.childKey += 1
|
||||
}
|
||||
let time = null as any
|
||||
const handleResize = ()=>{
|
||||
clearTimeout(time)
|
||||
time = setTimeout(()=>{
|
||||
store.commit('DesignDetailCopy/setDesignDetail',detailData.designDetail)
|
||||
},1000)
|
||||
}
|
||||
onMounted(()=>{
|
||||
window.addEventListener('resize', handleResize);
|
||||
})
|
||||
onBeforeUnmount(()=>{
|
||||
sessionStorage.removeItem('oppositeRevocation')
|
||||
sessionStorage.removeItem('revocation')
|
||||
store.commit('DesignDetailCopy/clearDesignDetail')
|
||||
|
||||
window.removeEventListener('resize', handleResize);
|
||||
})
|
||||
|
||||
return{
|
||||
...toRefs(detailDom),
|
||||
...toRefs(detailData),
|
||||
@@ -434,8 +447,8 @@ export default defineComponent({
|
||||
.designDetailModal{
|
||||
position: absolute;
|
||||
// top: -100%;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
width: 100.5%;
|
||||
height: 100.5%;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
transform: translate(-50%,-50%);
|
||||
@@ -445,6 +458,7 @@ export default defineComponent({
|
||||
> .ant-modal-centered{
|
||||
> .fullScreen{
|
||||
> .ant-modal-content{
|
||||
box-shadow: none;
|
||||
> .ant-modal-body{
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts">
|
||||
import { defineComponent,computed,ref,inject,nextTick,createVNode,toRefs, reactive, onMounted} from 'vue'
|
||||
import { defineComponent,computed,ref,inject,onBeforeUnmount,createVNode,toRefs, reactive, onMounted} from 'vue'
|
||||
// import setDesignItem from '@/component/Detail/setDesignItem2.vue'
|
||||
import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
|
||||
import { Https } from "@/tool/https";
|
||||
@@ -102,6 +102,22 @@ export default defineComponent({
|
||||
const mousedownDesignImg = ()=>{
|
||||
getDetailListData.imgDesignImg = !getDetailListData.imgDesignImg
|
||||
}
|
||||
let time = null as any
|
||||
|
||||
const handleResize = ()=>{
|
||||
clearTimeout(time)
|
||||
time = setTimeout(()=>{
|
||||
store.commit('DesignDetailCopy/setDesignDetail',getDetailListData.designDetail)
|
||||
getDetailListDom.position.updataPosition()
|
||||
|
||||
},1000)
|
||||
}
|
||||
onMounted(()=>{
|
||||
window.addEventListener('resize', handleResize);
|
||||
})
|
||||
onBeforeUnmount(()=>{
|
||||
window.removeEventListener('resize', handleResize);
|
||||
})
|
||||
return{
|
||||
...toRefs(detailData),
|
||||
...toRefs(getDetailListData),
|
||||
@@ -148,9 +164,11 @@ export default defineComponent({
|
||||
border-radius: 1rem;
|
||||
padding: .7rem ;
|
||||
flex-shrink: 0;
|
||||
flex: 1;
|
||||
overflow: hidden;
|
||||
max-height: 4rem;
|
||||
> i{
|
||||
font-size: 2rem;
|
||||
line-height: 4rem;
|
||||
cursor: pointer;
|
||||
padding: 1.5rem;
|
||||
display: flex;
|
||||
|
||||
@@ -385,7 +385,6 @@ export default defineComponent({
|
||||
.molepositon{
|
||||
width: 30rem;
|
||||
height: 66rem;
|
||||
// height: 80rem;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
// margin: auto 0;
|
||||
@@ -401,10 +400,9 @@ export default defineComponent({
|
||||
height: auto;
|
||||
position: relative;
|
||||
height: 100%;
|
||||
// overflow: hidden;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
// display: flex;
|
||||
// align-items: center;
|
||||
// justify-content: center;
|
||||
>img{
|
||||
z-index: 2;
|
||||
position: relative;
|
||||
@@ -420,12 +418,12 @@ export default defineComponent({
|
||||
.detail_modal_item_front,.designOpenrtion_print{
|
||||
z-index: 2;
|
||||
height: 100%;
|
||||
|
||||
width: 100%;
|
||||
img{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
// width: 100%;
|
||||
// height: auto;
|
||||
// height: 100%;
|
||||
width: 100%;
|
||||
height: auto;
|
||||
float: left;
|
||||
user-select:none;
|
||||
-webkit-user-drag: none;
|
||||
|
||||
@@ -661,12 +661,11 @@ export default defineComponent({
|
||||
});
|
||||
},
|
||||
setGenerate(dataList:any){
|
||||
|
||||
let data = dataList
|
||||
let dataNum = dataList.length
|
||||
let state = true
|
||||
this.generateTime = setInterval(()=>{
|
||||
if(!this.isGenerate || !this.remGenerate)return
|
||||
if(!this.isGenerate)return
|
||||
if(!state)return
|
||||
state = false
|
||||
Https.axiosPost(Https.httpUrls.generateResult, data).then(
|
||||
|
||||
@@ -46,6 +46,9 @@
|
||||
<div class="modelBox">
|
||||
<div class="img">
|
||||
<img :src="selectModel.threeDPatternLayoutUrl" alt="">
|
||||
<div class="btn">
|
||||
<i class="fi fi-bs-expand-arrows-alt" @click.stop="openScaleImage()"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="gallery_btn" @click="openDown()">Download</div>
|
||||
@@ -53,6 +56,7 @@
|
||||
<div class="download">
|
||||
<download ref="download"></download>
|
||||
</div>
|
||||
<scaleImage ref="scaleImage"></scaleImage>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts">
|
||||
@@ -63,9 +67,10 @@ import { useStore } from "vuex";
|
||||
import { useI18n } from 'vue-i18n'
|
||||
import threeBox from "./three.vue"
|
||||
import download from "./download.vue"
|
||||
import scaleImage from "@/component/HomePage/scaleImage.vue";
|
||||
export default defineComponent({
|
||||
components:{
|
||||
threeBox,download
|
||||
threeBox,download,scaleImage
|
||||
},
|
||||
props:{
|
||||
},
|
||||
@@ -101,7 +106,7 @@ export default defineComponent({
|
||||
const setSelectModel = (item:any)=>{
|
||||
data.isShowMark = true
|
||||
const value = {
|
||||
threeDSimpleId:item.id,
|
||||
threeDSimpleId:item.threeDSimpleId,
|
||||
}
|
||||
Https.axiosPost(Https.httpUrls.getLayoutDetail,{},{params:value}).then((res:any)=>{
|
||||
data.selectModel = res
|
||||
@@ -122,11 +127,12 @@ export default defineComponent({
|
||||
const dataDom = reactive({
|
||||
threeBox:null as any,
|
||||
download:null as any,
|
||||
scaleImage:null as any,
|
||||
})
|
||||
const openSetData = ()=>{
|
||||
nextTick(()=>{
|
||||
let id = store.state.HomeStoreModule.patternMaking3D.threeDsimpleId
|
||||
if(id && data.selectModel.id == -1)setSelectModel({id})
|
||||
if(id && data.selectModel.id == -1)setSelectModel({threeDSimpleId:id})
|
||||
})
|
||||
setTimeout(()=>{
|
||||
data.maskShow = true
|
||||
@@ -177,6 +183,11 @@ export default defineComponent({
|
||||
const setMaterial = (item:any)=>{
|
||||
dataDom.threeBox.addMaterial(item)
|
||||
}
|
||||
const openScaleImage = ()=>{
|
||||
let scaleImage:any = dataDom.scaleImage
|
||||
scaleImage.isLike = false
|
||||
scaleImage.init([{imgUrl:data.selectModel.threeDPatternLayoutUrl}],0)
|
||||
}
|
||||
return{
|
||||
...toRefs(dataDom),
|
||||
...toRefs(data),
|
||||
@@ -187,6 +198,7 @@ export default defineComponent({
|
||||
openDown,
|
||||
setLibraryOrModel,
|
||||
setMaterial,
|
||||
openScaleImage
|
||||
}
|
||||
},
|
||||
directives:{
|
||||
@@ -322,6 +334,15 @@ export default defineComponent({
|
||||
>.img{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
> .btn{
|
||||
position: absolute;
|
||||
right: 2rem;
|
||||
top: 2rem;
|
||||
> i{
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
img{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
@@ -2,28 +2,30 @@
|
||||
<div class="three">
|
||||
<div class="parameter">
|
||||
<label>
|
||||
<span>X:</span>
|
||||
<span>scaleX:</span>
|
||||
<a-slider class="system_silder"
|
||||
v-model:value="repeat.x"
|
||||
:tooltipVisible="false"
|
||||
@change="changeRepeat"
|
||||
:max="2"
|
||||
:max="6"
|
||||
:step="0.001"
|
||||
:min="0.002"
|
||||
>
|
||||
</a-slider>
|
||||
</label>
|
||||
<label>
|
||||
<span>Y:</span>
|
||||
<span>scaleY:</span>
|
||||
<a-slider class="system_silder"
|
||||
v-model:value="repeat.y"
|
||||
:tooltipVisible="false"
|
||||
@change="changeRepeat"
|
||||
:max="2"
|
||||
:step="0.01"
|
||||
:max="6"
|
||||
:min="0.002"
|
||||
:step="0.001"
|
||||
>
|
||||
</a-slider>
|
||||
</label>
|
||||
<i class="fi fi-br-link" :class="{'fi-br-link':isLock,'fi-bs-link-slash':!isLock}" @click="setLock"></i>
|
||||
</div>
|
||||
<div class="model" ref="threeDom">
|
||||
|
||||
@@ -81,6 +83,7 @@ export default defineComponent({
|
||||
y:1,
|
||||
},
|
||||
animationId:null as any,
|
||||
isLock:false,
|
||||
})
|
||||
const dataDom = reactive({
|
||||
threeDom:null as any,
|
||||
@@ -255,11 +258,14 @@ export default defineComponent({
|
||||
// 3. 配置纹理参数
|
||||
texture.wrapS = THREE.RepeatWrapping;
|
||||
texture.wrapT = THREE.RepeatWrapping;
|
||||
// texture.wrapS = THREE.ClampToEdgeWrapping; // 水平方向不重复
|
||||
// texture.wrapT = THREE.ClampToEdgeWrapping; // 垂直方向不重复
|
||||
|
||||
// texture.repeat.set(1, 1); // 纹理重复次数
|
||||
texture.anisotropy = 32; // 提高纹理清晰度
|
||||
data.group?.traverse((child:any) => {
|
||||
if (child.isMesh) {
|
||||
console.log(child.name)
|
||||
// 5. 创建新材质(根据需求选择材质类型)
|
||||
const textureWidth = texture.image.width;
|
||||
const textureHeight = texture.image.height;
|
||||
@@ -281,13 +287,40 @@ export default defineComponent({
|
||||
metalness: .2, // 金属质感 (0-1)
|
||||
side: THREE.DoubleSide // 双面渲染
|
||||
});
|
||||
// 6. 替换原有材质
|
||||
child.material = newMaterial;
|
||||
// 7. 如果需要单独控制某些子模型的UV
|
||||
if (child.geometry.attributes.uv) {
|
||||
// 可以在这里修改UV坐标
|
||||
const uvs = child.geometry.attributes.uv.array;
|
||||
// ...UV操作逻辑...
|
||||
// 计算UV边界
|
||||
let minU = Infinity, maxU = -Infinity;
|
||||
let minV = Infinity, maxV = -Infinity;
|
||||
|
||||
for (let i = 0; i < uvs.length; i += 2) {
|
||||
minU = Math.min(minU, uvs[i]);
|
||||
maxU = Math.max(maxU, uvs[i]);
|
||||
minV = Math.min(minV, uvs[i+1]);
|
||||
maxV = Math.max(maxV, uvs[i+1]);
|
||||
}
|
||||
|
||||
const uvWidth = maxU - minU;
|
||||
const uvHeight = maxV - minV;
|
||||
// 仅对非小UV区域设置材质
|
||||
if (!(uvWidth < 1.2 || uvHeight < 1.2)) {
|
||||
const newMaterial = new THREE.MeshStandardMaterial({
|
||||
map: texture,
|
||||
roughness: 0.7,
|
||||
metalness: 0.2,
|
||||
side: THREE.DoubleSide
|
||||
});
|
||||
child.material = newMaterial;
|
||||
}else{
|
||||
// child.material = new THREE.MeshStandardMaterial({
|
||||
// transparent: true,
|
||||
// opacity: 0, // 完全透明
|
||||
// side: THREE.DoubleSide
|
||||
// });
|
||||
}
|
||||
|
||||
child.geometry.attributes.uv.needsUpdate = true;
|
||||
}
|
||||
}
|
||||
data.load.state = false
|
||||
@@ -391,9 +424,14 @@ export default defineComponent({
|
||||
data.load.state = false
|
||||
}
|
||||
const changeRepeat = (e:any)=>{
|
||||
if(data.isLock)data.repeat.x = e
|
||||
if(data.isLock)data.repeat.y = e
|
||||
clearTimeout(dataTime.updataRepeat)
|
||||
dataTime.updataRepeat = setTimeout(()=>{
|
||||
data.textureLoader.repeat.set(2 - data.repeat.x,2 - data.repeat.y); // 纹理重复次数
|
||||
data.repeat.x = data.repeat.x == 6 ? 5.999 : data.repeat.x
|
||||
data.repeat.y = data.repeat.y == 6 ? 5.999 : data.repeat.y
|
||||
|
||||
data.textureLoader.repeat.set(6 - data.repeat.x,6 - data.repeat.y); // 纹理重复次数
|
||||
let value = {
|
||||
x:data.repeat.x,
|
||||
y:data.repeat.y,
|
||||
@@ -401,6 +439,9 @@ export default defineComponent({
|
||||
store.commit('setPatternMaking3D',value)
|
||||
},1000)
|
||||
}
|
||||
const setLock = ()=>{
|
||||
data.isLock = !data.isLock
|
||||
}
|
||||
onMounted(()=>{
|
||||
})
|
||||
onBeforeUnmount(()=>{
|
||||
@@ -432,6 +473,7 @@ export default defineComponent({
|
||||
openSetData,
|
||||
addMaterial,
|
||||
changeRepeat,
|
||||
setLock,
|
||||
}
|
||||
},
|
||||
provide() {
|
||||
@@ -449,6 +491,7 @@ export default defineComponent({
|
||||
overflow: hidden;
|
||||
> .parameter{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
> label{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
@@ -462,6 +505,17 @@ export default defineComponent({
|
||||
margin-right: 1rem;
|
||||
}
|
||||
}
|
||||
> i{
|
||||
width: 3rem;
|
||||
height: 3rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
cursor: pointer;
|
||||
&.active{
|
||||
opacity: .7;
|
||||
}
|
||||
}
|
||||
}
|
||||
> .model{
|
||||
width: 100%;
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="gender marginBottom" v-if="show.age">
|
||||
<div class="text">Age</div>
|
||||
<div class="text">Role</div>
|
||||
<div class="radio">
|
||||
<label>
|
||||
<input type="radio" name="ageGroup" v-model="selectObject.ageGroup" value="Adult">
|
||||
|
||||
1027
src/component/LoginPage/login/enterprise.vue
Normal file
1027
src/component/LoginPage/login/enterprise.vue
Normal file
File diff suppressed because it is too large
Load Diff
995
src/component/LoginPage/login/personal.vue
Normal file
995
src/component/LoginPage/login/personal.vue
Normal file
@@ -0,0 +1,995 @@
|
||||
<template>
|
||||
<div class="login_page">
|
||||
<div class="page_content">
|
||||
<!-- 账号密码和邮箱登录 start-->
|
||||
<div class="login_content" v-if="isLogin === 1">
|
||||
<div class="login_content_left">
|
||||
|
||||
<!-- v-show="loginType == 'username'" -->
|
||||
<div>
|
||||
<div class="login_form_content" :state="emailStap">
|
||||
<!-- <div class="login_form_title">Name</div>
|
||||
<input
|
||||
class="login_form_input"
|
||||
placeholder="Enter your username"
|
||||
v-model="username"
|
||||
/> -->
|
||||
<div v-show="emailStap === 1">
|
||||
<div class="login_form_title marign_top30">
|
||||
Email
|
||||
</div>
|
||||
<input
|
||||
class="login_form_input"
|
||||
placeholder="Enter your email address"
|
||||
v-model="email"
|
||||
@keydown.enter="submitPerLogin()"
|
||||
/>
|
||||
<div class="login_form_title marign_top30">
|
||||
<div>Password</div>
|
||||
</div>
|
||||
<div class="password_input_block">
|
||||
<input
|
||||
class="login_form_input"
|
||||
:type="passwordType"
|
||||
placeholder="Enter your password"
|
||||
v-model="password"
|
||||
@keydown.enter="submitPerLogin()"
|
||||
/>
|
||||
<div
|
||||
class="icon iconfont icon-yanjing_yincang_o password_show_icon"
|
||||
@click="changePasswordType()"
|
||||
></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- 邮箱登录 start -->
|
||||
<div
|
||||
v-show="emailStap === 2"
|
||||
class="login_form_email"
|
||||
:class="{ active: emailStap === 2 }"
|
||||
>
|
||||
<div
|
||||
v-show="emailStap === 2"
|
||||
class="email_last_step"
|
||||
>
|
||||
<div class="email_last_step_block">
|
||||
<span class="email_last_step_content"
|
||||
>Verify with one-time verification
|
||||
code</span
|
||||
>
|
||||
<i
|
||||
class="fi fi-br-cross email_last_step_block_icon"
|
||||
@click="emailLastStepFun()"
|
||||
></i>
|
||||
</div>
|
||||
<div class="email_last_step_bottom">
|
||||
<div class="email_last_step_des">
|
||||
<div class="sent_email_content">
|
||||
Sent to {{ email }}
|
||||
</div>
|
||||
<div class="tip_content">
|
||||
<span v-show="time"
|
||||
>{{ time }}s</span
|
||||
>
|
||||
<span
|
||||
v-show="!time"
|
||||
@click="emailNextStepFun()"
|
||||
>Resend</span
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<VerificationCodeInput
|
||||
:ct="emailCode"
|
||||
@sendCaptcha="
|
||||
submitEmailLogin($event)
|
||||
"
|
||||
></VerificationCodeInput>
|
||||
|
||||
<div class="email_last_step_des">
|
||||
<div
|
||||
class="sent_email_content email_tip_content"
|
||||
>
|
||||
Please check the junk box if you
|
||||
haven't received verification
|
||||
code
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="login_form_title marign_top30">
|
||||
<label :class="{ active: emailStap == 2 }">
|
||||
<input
|
||||
:state="emailStap"
|
||||
type="checkbox"
|
||||
v-model="checked"
|
||||
/>
|
||||
<span
|
||||
>I agree to all Term, Privacy Policy and
|
||||
Fees</span
|
||||
>
|
||||
</label>
|
||||
</div>
|
||||
<div class="thirdPartyLogin marign_top30">
|
||||
<div class="label">
|
||||
<div class="mask" v-show="!checked" @click="isCheckAgreement"></div>
|
||||
<googleLogin @googelLogin="googelLogin"></googleLogin>
|
||||
</div>
|
||||
<div class="label">
|
||||
<div class="mask" v-show="!checked" @click="isCheckAgreement"></div>
|
||||
<weiXinLogin></weiXinLogin>
|
||||
</div>
|
||||
<!-- <phoneLogin></phoneLogin> -->
|
||||
</div>
|
||||
<div
|
||||
class="login_submit_button marign_top40"
|
||||
:state="emailStap"
|
||||
@click="submitPerLogin()"
|
||||
>
|
||||
Sign in
|
||||
</div>
|
||||
|
||||
<div class="login_text">
|
||||
<div
|
||||
class="forget_password_text"
|
||||
@click="changeIsLogin(2)"
|
||||
>
|
||||
Forgot your password
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 账号密码登录 end -->
|
||||
</div>
|
||||
|
||||
<!-- 邮箱登录 end -->
|
||||
</div>
|
||||
|
||||
<!-- 忘记密码 start -->
|
||||
<div class="forget_password_content" v-else>
|
||||
<div
|
||||
class="forget_password_content_block"
|
||||
@click="forgetPasswordLastStepFun()"
|
||||
>
|
||||
<!-- <span class="icon iconfont fi-br-arrow-left"></span
|
||||
> -->
|
||||
<i class="fi fi-br-arrow-left"></i>
|
||||
<span class="forget_password_content_title"
|
||||
>Retrieve password</span
|
||||
>
|
||||
</div>
|
||||
<div v-show="frogetPasswordStep === 1">
|
||||
<div class="forget_passored_form_content">
|
||||
<div class="forget_passored_form_title">Email</div>
|
||||
<input
|
||||
class="forget_passored_form_input"
|
||||
placeholder="Enter your email"
|
||||
v-model="forgetPasswordEmail"
|
||||
@keydown.enter="forgetPasswordNextStepFun()"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
class="forget_submit_button marign_top40"
|
||||
@click="forgetPasswordNextStepFun()"
|
||||
>
|
||||
Next step
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div v-show="frogetPasswordStep === 2">
|
||||
<div class="forget_verif_code_des">Verification Code</div>
|
||||
<div class="email_last_step_des">
|
||||
<div class="sent_email_content">
|
||||
Sent to {{ forgetPasswordEmail }}
|
||||
</div>
|
||||
<div class="tip_content">
|
||||
<span v-show="time">{{ time }}s</span>
|
||||
<span
|
||||
v-show="!time"
|
||||
@click="forgetPasswordNextStepFun()"
|
||||
>Resend</span
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<VerificationCodeInput
|
||||
:ct="emailCode"
|
||||
@sendCaptcha="submitPasswordCode($event)"
|
||||
></VerificationCodeInput>
|
||||
</div>
|
||||
|
||||
<div v-show="frogetPasswordStep === 3">
|
||||
<div class="forget_passored_form_content">
|
||||
<div class="forget_passored_form_title">Password</div>
|
||||
<input
|
||||
class="forget_passored_form_input"
|
||||
placeholder="Enter a new password"
|
||||
v-model="newPassword"
|
||||
@keydown.enter="submitResetPassword()"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
class="forget_submit_button marign_top40"
|
||||
@click="submitResetPassword()"
|
||||
>
|
||||
Submit
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 忘记密码 end -->
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<!-- <div class="login_footer">
|
||||
<div class="login_footer_item">
|
||||
<div class="login_footer_item_text">
|
||||
©2025 Code-Create Limited
|
||||
</div>
|
||||
</div>
|
||||
<div class="login_footer_item">
|
||||
<div
|
||||
class="login_footer_item_text footer_item_text_pointer"
|
||||
@click="
|
||||
turnToWindow(
|
||||
'https://code-create.com.hk/aida-terms-and-conditions/'
|
||||
)
|
||||
"
|
||||
>
|
||||
Terms&Conditions
|
||||
</div>
|
||||
<div class="login_footer_line"></div>
|
||||
<div
|
||||
class="login_footer_item_text footer_item_text_pointer"
|
||||
@click="
|
||||
turnToWindow(
|
||||
'https://code-create.com.hk/aida-subscription-agreement/'
|
||||
)
|
||||
"
|
||||
>
|
||||
Privacy Policy
|
||||
</div>
|
||||
</div>
|
||||
</div> -->
|
||||
<div class="mark_loading" v-show="loadingShow">
|
||||
<a-spin size="large" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { defineComponent, ref, onMounted } from "vue";
|
||||
import { Https } from "@/tool/https";
|
||||
import { isEmail } from "@/tool/util";
|
||||
import { setCookie, WriteCookie } from "@/tool/cookie";
|
||||
import { message } from "ant-design-vue";
|
||||
import VerificationCodeInput from "@/component/LoginPage/verificationCodeInput.vue";
|
||||
import googleLogin from "@/component/LoginPage/googleLogin.vue";
|
||||
import weiXinLogin from "@/component/LoginPage/weiXinLogin.vue";
|
||||
import phoneLogin from "@/component/LoginPage/phoneLogin.vue";
|
||||
import { useStore } from "vuex";
|
||||
import { useI18n } from "vue-i18n";
|
||||
import { setLang } from "@/tool/guide";
|
||||
const md5 = require("md5");
|
||||
export default defineComponent({
|
||||
components: {
|
||||
VerificationCodeInput,googleLogin,weiXinLogin,phoneLogin
|
||||
},
|
||||
setup() {
|
||||
let timer: any = 0;
|
||||
const { locale } = useI18n();
|
||||
const store = useStore();
|
||||
let loadingShow = ref(false)
|
||||
return {
|
||||
store,
|
||||
timer,
|
||||
locale,
|
||||
loadingShow,
|
||||
};
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
checked: false,
|
||||
isLogin: 1, //是否为登录 1-登录, 2-忘记密码
|
||||
loginType: "username",
|
||||
emailStap: 1, // 邮箱登录步骤
|
||||
emailCode: ["", "", "", "", "", ""], //邮箱验证码
|
||||
emailNextStep: true,
|
||||
username: "",
|
||||
password: localStorage.getItem("loginPassword") || '',
|
||||
email: localStorage.getItem("loginEmail") || '', //邮箱登录邮箱
|
||||
frogetPasswordStep: 1, //忘记密码的步骤
|
||||
forgetPasswordEmail: "",
|
||||
forgetEmailCode: ["", "", "", "", "", ""], //忘记密码的邮箱验证码
|
||||
forgetEmailValue: "", //忘记密码的邮箱验证码保存值
|
||||
newPassword: "", //新密码
|
||||
isCheckRobot: false,
|
||||
time: 60, //60秒倒计时
|
||||
passwordType: "password",
|
||||
userId: "",
|
||||
loginTime: true,
|
||||
};
|
||||
},
|
||||
|
||||
methods: {
|
||||
changeLoginType(type: string) {
|
||||
this.loginType = type;
|
||||
},
|
||||
|
||||
//是否忘记密码页面
|
||||
changeIsLogin(isLogin: number) {
|
||||
if (isLogin === 1) {
|
||||
//登录
|
||||
this.forgetPasswordEmail = "";
|
||||
this.frogetPasswordStep = 1;
|
||||
this.forgetEmailCode = ["", "", "", "", "", ""];
|
||||
this.emailStap = 1;
|
||||
this.clearTimer();
|
||||
} else {
|
||||
this.username = "";
|
||||
this.password = "";
|
||||
}
|
||||
this.isLogin = isLogin;
|
||||
},
|
||||
|
||||
//邮箱登录的下一步
|
||||
emailNextStepFun() {
|
||||
if (!isEmail(this.email)) {
|
||||
message.info("The email format is incorrect");
|
||||
return;
|
||||
}
|
||||
let data = {
|
||||
email: this.email,
|
||||
operationType: "LOGIN",
|
||||
};
|
||||
Https.axiosPost(Https.httpUrls.accountSendEmail, data).then(
|
||||
(rv: any) => {
|
||||
if (rv) {
|
||||
this.emailStap = 2;
|
||||
this.time = 60;
|
||||
this.emailCode = ["", "", "", "", "", ""];
|
||||
this.createTimer();
|
||||
}
|
||||
}
|
||||
);
|
||||
},
|
||||
|
||||
//邮箱登录的上一步
|
||||
emailLastStepFun() {
|
||||
this.emailStap = 1;
|
||||
(this.username = ""), (this.password = ""), (this.email = "");
|
||||
(this.checked = false),
|
||||
(this.loginType = "username"),
|
||||
(this.emailCode = ["", "", "", "", "", ""]),
|
||||
this.clearTimer();
|
||||
},
|
||||
|
||||
//忘记密码的下一步
|
||||
forgetPasswordNextStepFun() {
|
||||
if (!isEmail(this.forgetPasswordEmail)) {
|
||||
message.info("The email format is incorrect");
|
||||
return;
|
||||
}
|
||||
let data = {
|
||||
email: this.forgetPasswordEmail,
|
||||
operationType: "FORGET_PWD",
|
||||
};
|
||||
Https.axiosPost(Https.httpUrls.accountSendEmail, data).then(
|
||||
(rv: any) => {
|
||||
if (rv) {
|
||||
this.frogetPasswordStep = 2;
|
||||
(this.forgetEmailCode = ["", "", "", "", "", ""]),
|
||||
this.createTimer();
|
||||
}
|
||||
}
|
||||
);
|
||||
},
|
||||
//忘记密码的上一步
|
||||
forgetPasswordLastStepFun() {
|
||||
if (this.frogetPasswordStep === 1) {
|
||||
this.changeIsLogin(1);
|
||||
} else {
|
||||
this.frogetPasswordStep = this.frogetPasswordStep - 1;
|
||||
this.forgetPasswordEmail = "";
|
||||
(this.forgetEmailCode = ["", "", "", "", "", ""]),
|
||||
this.clearTimer();
|
||||
}
|
||||
},
|
||||
|
||||
//忘记密码填写完邮箱验证码进行下一步
|
||||
submitPasswordCode(emailVerifyCode: any) {
|
||||
// console.log(123123);
|
||||
let data = {
|
||||
email: this.forgetPasswordEmail,
|
||||
emailVerifyCode: emailVerifyCode,
|
||||
password: "",
|
||||
verifyEmail: true,
|
||||
};
|
||||
Https.axiosPost(Https.httpUrls.accountResetPwd, data).then(
|
||||
(rv: any) => {
|
||||
if (rv) {
|
||||
this.forgetEmailValue = emailVerifyCode;
|
||||
this.frogetPasswordStep = 3;
|
||||
this.clearTimer();
|
||||
}
|
||||
}
|
||||
);
|
||||
},
|
||||
|
||||
//改变勾选是否是机器人
|
||||
checkRobot() {
|
||||
this.isCheckRobot = !this.isCheckRobot;
|
||||
},
|
||||
|
||||
//提交账号密码预先登录
|
||||
submitPerLogin() {
|
||||
//输入账号密码
|
||||
if (this.emailStap >= 2) {
|
||||
return;
|
||||
} else {
|
||||
if (!this.password) {
|
||||
message.info(
|
||||
"Please enter your account number or password"
|
||||
);
|
||||
return;
|
||||
}
|
||||
//输入邮箱
|
||||
if (!this.email) {
|
||||
message.info("Please enter your email address");
|
||||
return;
|
||||
}
|
||||
//判断邮箱格式是否正确
|
||||
if (!isEmail(this.email)) {
|
||||
message.info("The email format is incorrect");
|
||||
return;
|
||||
}
|
||||
//判断是否同意隐私政策
|
||||
if (!this.checked) {
|
||||
message.info(
|
||||
"Agree to all terms, privacy fees and policies"
|
||||
);
|
||||
return;
|
||||
}
|
||||
let data = {
|
||||
password: md5(this.password + "abc"),
|
||||
userName: 'a',
|
||||
// userName: this.username,
|
||||
email: this.email,
|
||||
operationType: "LOGIN",
|
||||
ip: "",
|
||||
};
|
||||
// this.loginType = 'email'
|
||||
this.clearTimer()
|
||||
this.time = 60;
|
||||
this.emailStap = 2;
|
||||
this.emailCode = ["", "", "", "", "", ""];
|
||||
this.createTimer();
|
||||
if (this.loginTime) {
|
||||
this.loginTime = false;
|
||||
Https.axiosPost(Https.httpUrls.preLogin, data)
|
||||
.then((rv: any) => {
|
||||
// if (rv) {
|
||||
// this.loginType = 'email'
|
||||
// }
|
||||
if (rv) {
|
||||
this.userId = rv.userId;
|
||||
this.loginType = "email";
|
||||
|
||||
localStorage.setItem("loginEmail", this.email);
|
||||
localStorage.setItem("loginPassword", this.password);
|
||||
}
|
||||
})
|
||||
.catch((res) => {
|
||||
});
|
||||
setTimeout(() => {
|
||||
this.loginTime = true;
|
||||
}, 2000);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
changePasswordType() {
|
||||
this.passwordType =
|
||||
this.passwordType === "password" ? "text" : "password";
|
||||
},
|
||||
|
||||
//邮箱登录提交
|
||||
submitEmailLogin(emailVerifyCode: any) {
|
||||
let data = {
|
||||
email: this.email,
|
||||
emailVerifyCode: emailVerifyCode,
|
||||
loginType: "EMAIL",
|
||||
userId: this.userId,
|
||||
};
|
||||
Https.axiosPost(Https.httpUrls.accountLogin, data)
|
||||
.then((rv: any) => {
|
||||
this.setSuccessLogin(rv)
|
||||
})
|
||||
.catch((res) => {});
|
||||
},
|
||||
isCheckAgreement(){
|
||||
message.info(
|
||||
"Agree to all terms, privacy fees and policies"
|
||||
);
|
||||
},
|
||||
//微信登录
|
||||
wechatLogin(value:any) {
|
||||
let data = {
|
||||
code : value.code,
|
||||
type:2
|
||||
}
|
||||
this.loadingShow = true
|
||||
Https.axiosGet(Https.httpUrls.parseWeChatCode, {params:data})
|
||||
.then((rv: any) => {
|
||||
this.loadingShow = false
|
||||
this.setSuccessLogin(rv)
|
||||
})
|
||||
.catch((res) => {this.loadingShow = false});
|
||||
},
|
||||
//谷歌登录
|
||||
googelLogin(value:any) {
|
||||
let data = {credential : value,type:2}
|
||||
Https.axiosGet(Https.httpUrls.parseGoogleCredential, {params:data})
|
||||
.then((rv: any) => {
|
||||
this.setSuccessLogin(rv)
|
||||
})
|
||||
.catch((res) => {});
|
||||
},
|
||||
//登陆成功设置参数
|
||||
setSuccessLogin(rv:any){
|
||||
if (rv) {
|
||||
if (rv.systemUser == 4) {
|
||||
rv.systemUser = 1;
|
||||
}
|
||||
this.createTimer();
|
||||
let isTest = rv.systemUser == 3 ? true : false;
|
||||
let isBeginner = rv.isBeginner == 1 ? true : false;
|
||||
let token = rv.token;
|
||||
setCookie("isMurmur", false);
|
||||
setCookie("token", token);
|
||||
setCookie("isTest", isTest);
|
||||
setCookie("isBeginner", isBeginner);
|
||||
setCookie("isBeginnerNum", 0); //从第一步开始,机器人开始的话就是从第二部开始
|
||||
setCookie("userInfo", JSON.stringify(rv));
|
||||
let userid:any = {
|
||||
ueserId:rv.userId,
|
||||
systemUser:rv.systemUser,
|
||||
}
|
||||
if(rv.email)userid.email = rv.email
|
||||
this.store.commit("upUserDetail", userid);
|
||||
|
||||
if (window.innerWidth < 768) {
|
||||
message.info(
|
||||
"If you need to design, please log in using an iPad or computer."
|
||||
);
|
||||
this.turnToHomePage("/Square");
|
||||
} else {
|
||||
this.turnToHomePage("/home");
|
||||
}
|
||||
sessionStorage.setItem(
|
||||
"isTimeOne",
|
||||
JSON.stringify(false)
|
||||
); //是否需要公告 提示 弹窗
|
||||
let randomNum: any =
|
||||
Math.floor(Math.random() * 9000000000000000) +
|
||||
1000000000000000;
|
||||
sessionStorage.setItem("sessionId", randomNum);
|
||||
sessionStorage.setItem("record", JSON.stringify([]));
|
||||
}
|
||||
},
|
||||
//修改密码提交
|
||||
submitResetPassword() {
|
||||
let data = {
|
||||
email: this.forgetPasswordEmail,
|
||||
emailVerifyCode: this.forgetEmailValue,
|
||||
password: md5(this.newPassword + "abc"),
|
||||
verifyEmail: false,
|
||||
};
|
||||
Https.axiosPost(Https.httpUrls.accountResetPwd, data).then(
|
||||
(rv: any) => {
|
||||
if (rv) {
|
||||
message.success("Changing the password successfully");
|
||||
this.changeIsLogin(1);
|
||||
}
|
||||
}
|
||||
);
|
||||
},
|
||||
|
||||
//创建定时器
|
||||
createTimer() {
|
||||
this.timer = setInterval(() => {
|
||||
this.time--;
|
||||
if (!this.time) {
|
||||
clearInterval(this.timer);
|
||||
}
|
||||
}, 1000);
|
||||
},
|
||||
|
||||
//清除定时器
|
||||
clearTimer() {
|
||||
this.time = 60;
|
||||
if (this.timer) {
|
||||
clearInterval(this.timer);
|
||||
}
|
||||
},
|
||||
|
||||
//跳转到首页
|
||||
turnToHomePage(str: any) {
|
||||
// this.getLang();
|
||||
// this.$router.push("/home");
|
||||
// console.log(window.location.search.substring(1));
|
||||
this.store.commit("clearAllData");
|
||||
this.store.commit("clearAllCollection");
|
||||
this.store.commit("setAllBoardDataChoose", {});
|
||||
this.store.commit("clearShowSketchboard", {});
|
||||
this.$router.push(str);
|
||||
},
|
||||
//获取当前语言
|
||||
// getLang() {
|
||||
// let data = {};
|
||||
// Https.axiosPost(Https.httpUrls.getUserLanguage, data).then(
|
||||
// (rv: any) => {
|
||||
// if (rv) {
|
||||
// this.locale = rv;
|
||||
// setLang(rv);
|
||||
// }
|
||||
// }
|
||||
// );
|
||||
// },
|
||||
},
|
||||
mounted() {
|
||||
const data = this.$route.query
|
||||
if(data?.state == 'weiXin'){
|
||||
this.wechatLogin(data)
|
||||
}
|
||||
},
|
||||
});
|
||||
</script>
|
||||
<style lang="less" scoped>
|
||||
.login_page {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
.page_content {
|
||||
.login_content {
|
||||
margin: 0 auto;
|
||||
position: relative;
|
||||
width: 100%;
|
||||
// height: 100%;
|
||||
// width: 80%;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
@media (max-width: 768px) {
|
||||
width: 100%;
|
||||
}
|
||||
.login_content_left {
|
||||
width: 100%;
|
||||
@media (max-width: 768px) {
|
||||
width: 100%;
|
||||
}
|
||||
.login_form_email {
|
||||
margin-top: 3rem;
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: #fff;
|
||||
transform: scale(0);
|
||||
transition: 0.3s all;
|
||||
border: 2px solid;
|
||||
border-radius: 20px;
|
||||
.email_last_step {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
#app {
|
||||
height: auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
.active {
|
||||
transform: scale(1);
|
||||
}
|
||||
}
|
||||
.login_form_title {
|
||||
font-size: 1.6rem;
|
||||
// color: #666666;
|
||||
font-weight: 900;
|
||||
color: #000;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
box-sizing: border-box;
|
||||
label {
|
||||
display: flex;
|
||||
span {
|
||||
font-size: 1.6rem;
|
||||
margin-left: 10px;
|
||||
font-weight: normal;
|
||||
}
|
||||
&.active {
|
||||
pointer-events: none;
|
||||
input {
|
||||
pointer-events: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.login_form_content {
|
||||
position: relative;
|
||||
&[state="2"] {
|
||||
> * {
|
||||
opacity: 0;
|
||||
}
|
||||
.login_form_email {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
.password_input_block {
|
||||
position: relative;
|
||||
|
||||
.password_show_icon {
|
||||
position: absolute;
|
||||
font-size: 2.4rem;
|
||||
right: 2rem;
|
||||
top: 1.7rem;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
|
||||
.login_form_input {
|
||||
width: 100%;
|
||||
height: 5rem;
|
||||
margin-top: 1rem;
|
||||
border: 0.1rem solid #dfdfdf;
|
||||
border-radius: 2.5rem;
|
||||
padding-left: 2.1rem;
|
||||
line-height: 5rem;
|
||||
font-size: 1.4rem;
|
||||
box-sizing: border-box;
|
||||
outline: none;
|
||||
transition: all .3s;
|
||||
&:hover{
|
||||
border: 0.1rem solid #000;
|
||||
}
|
||||
&::placeholder {
|
||||
color: #a5b0c2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.email_last_step {
|
||||
// margin-top: 4rem;
|
||||
.email_last_step_bottom {
|
||||
padding: 0 40px;
|
||||
}
|
||||
.email_last_step_block {
|
||||
padding: 10px;
|
||||
border-bottom: 2px solid;
|
||||
box-sizing: border-box;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
.email_last_step_content {
|
||||
margin-left: 1rem;
|
||||
font-size: 2.2rem;
|
||||
font-weight: bold;
|
||||
color: #030303;
|
||||
}
|
||||
.email_last_step_block_icon {
|
||||
cursor: pointer;
|
||||
margin-right: 1rem;
|
||||
height: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
.fi-br-arrow-left {
|
||||
font-size: 2.5rem;
|
||||
font-weight: bold;
|
||||
color: #030303;
|
||||
transform: translateY(1rem);
|
||||
display: inline-block;
|
||||
}
|
||||
}
|
||||
|
||||
.login_submit_button {
|
||||
height: 5rem;
|
||||
background: #000;
|
||||
border-radius: 2.5rem;
|
||||
line-height: 5rem;
|
||||
text-align: center;
|
||||
font-size: 1.8rem;
|
||||
font-weight: 500;
|
||||
color: #ffffff;
|
||||
cursor: pointer;
|
||||
transition: all .3s;
|
||||
&:hover{
|
||||
background: #3C3C3C;
|
||||
}
|
||||
&[state="2"] {
|
||||
cursor: not-allowed;
|
||||
}
|
||||
}
|
||||
.login_text {
|
||||
font-size: 1.6rem;
|
||||
margin-top: 4rem;
|
||||
color: #151515;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
|
||||
.forget_password_text {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.forget_password_content {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
width: 60rem;
|
||||
background: #ffffff;
|
||||
box-shadow: -0.3rem 2rem 5.9rem 0px rgba(200, 200, 200, 0.3);
|
||||
border-radius: 1rem;
|
||||
padding: 3rem 6rem 6.5rem;
|
||||
box-sizing: border-box;
|
||||
|
||||
.forget_password_content_block {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.fi-br-arrow-left {
|
||||
font-size: 3.8rem;
|
||||
font-weight: bold;
|
||||
color: #030303;
|
||||
transform: translateY(1rem);
|
||||
display: inline-block;
|
||||
}
|
||||
.forget_password_content_title {
|
||||
font-size: 3.2rem;
|
||||
font-weight: bold;
|
||||
color: #030303;
|
||||
margin-left: 2rem;
|
||||
}
|
||||
|
||||
.forget_passored_form_content {
|
||||
margin-top: 3.5rem;
|
||||
|
||||
.forget_passored_form_title {
|
||||
font-size: 2.4rem;
|
||||
font-weight: bold;
|
||||
color: #030303;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.forget_passored_form_input {
|
||||
width: 100%;
|
||||
height: 5rem;
|
||||
margin-top: 1rem;
|
||||
border: 0.1rem solid #dfdfdf;
|
||||
border-radius: 2.5rem;
|
||||
padding-left: 2.1rem;
|
||||
line-height: 5rem;
|
||||
font-size: 1.4rem;
|
||||
box-sizing: border-box;
|
||||
outline: none;
|
||||
|
||||
&::placeholder {
|
||||
color: #a5b0c2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.forget_verif_code_des {
|
||||
font-size: 2.4rem;
|
||||
font-weight: bold;
|
||||
color: #030303;
|
||||
margin-top: 3.5rem;
|
||||
}
|
||||
|
||||
.forget_submit_button {
|
||||
height: 5rem;
|
||||
background: #000;
|
||||
border-radius: 2.5rem;
|
||||
line-height: 5rem;
|
||||
text-align: center;
|
||||
font-size: 1.8rem;
|
||||
font-weight: 500;
|
||||
color: #ffffff;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.login_footer {
|
||||
position: absolute;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
left: 0;
|
||||
bottom: 3.5rem;
|
||||
width: 100%;
|
||||
padding: 0 4rem;
|
||||
|
||||
.login_footer_item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.login_footer_item_text {
|
||||
font-size: 1.3rem;
|
||||
color: #151515;
|
||||
}
|
||||
|
||||
.footer_item_text_pointer {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.login_footer_line {
|
||||
width: 0.1rem;
|
||||
height: 2rem;
|
||||
margin: 0 2rem;
|
||||
background: #b9b9b9;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.marign_top20 {
|
||||
margin-top: 2rem;
|
||||
}
|
||||
|
||||
.marign_top22 {
|
||||
margin-top: 2.2rem;
|
||||
}
|
||||
|
||||
.marign_top30 {
|
||||
margin-top: 3rem;
|
||||
}
|
||||
.marign_top40 {
|
||||
margin-top: 4rem;
|
||||
}
|
||||
.thirdPartyLogin{
|
||||
display: flex;
|
||||
// justify-content: flex-start;
|
||||
> div{
|
||||
position: relative;
|
||||
margin-right: 1rem;
|
||||
> .mask{
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 2;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
}
|
||||
.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: 4rem;
|
||||
margin-bottom: 2rem;
|
||||
|
||||
.sent_email_content {
|
||||
font-size: 1.8rem;
|
||||
font-weight: bold;
|
||||
color: #a5b0c2;
|
||||
}
|
||||
|
||||
.email_tip_content {
|
||||
font-size: 1.4rem;
|
||||
color: #030303;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
1026
src/component/LoginPage/login/school.vue
Normal file
1026
src/component/LoginPage/login/school.vue
Normal file
File diff suppressed because it is too large
Load Diff
@@ -83,7 +83,7 @@ export default defineComponent({
|
||||
setup(){
|
||||
let list = ref([])
|
||||
let wait_list = ref([])
|
||||
let width = ref(300)
|
||||
let width = ref(250)
|
||||
let num_x = ref(1)
|
||||
let gap_x = ref(0)
|
||||
let gap_y = ref(0)
|
||||
|
||||
@@ -21,7 +21,8 @@ const routes: Array<RouteRecordRaw> = [
|
||||
path: '/login',
|
||||
name: 'login',
|
||||
meta:{enter:'all',},
|
||||
component: _import('LoginPage')
|
||||
component: _import('Login')
|
||||
// component: _import('LoginPage')
|
||||
},{
|
||||
path: '/schoolLogin',
|
||||
name: 'schoolLogin',
|
||||
@@ -45,22 +46,12 @@ const routes: Array<RouteRecordRaw> = [
|
||||
meta:{enter:'all',},
|
||||
component: _import('Register')
|
||||
},
|
||||
// {
|
||||
// path: '/register',
|
||||
// name: 'register',
|
||||
// component: _import('RegisterPage')
|
||||
// },
|
||||
{
|
||||
path: '/upgrade',
|
||||
name: 'upgrade',
|
||||
meta:{enter:'all',},
|
||||
component: _import('Upgrade'),
|
||||
},
|
||||
// {
|
||||
// path: '/home',
|
||||
// name: 'home',
|
||||
// component: _import('HomeView')
|
||||
// },
|
||||
{
|
||||
path: '/home',
|
||||
name: 'home',
|
||||
@@ -146,47 +137,7 @@ const routes: Array<RouteRecordRaw> = [
|
||||
name: "HomeRecommend",
|
||||
meta:{enter:'all',},
|
||||
component: _import('HomeRecommend'),
|
||||
children:[
|
||||
{
|
||||
path: "",
|
||||
name:'SquareChil',
|
||||
meta:{enter:'all',},
|
||||
redirect: "/Square/works"
|
||||
},
|
||||
{
|
||||
path:'works',
|
||||
name:'SquareWorks',
|
||||
meta:{enter:'all',},
|
||||
component: _import_custom('HomeView/Works.vue'),
|
||||
},{
|
||||
path:'events',
|
||||
name:'SquareEvents',
|
||||
meta:{enter:'all',},
|
||||
component: _import_custom('HomeView/Events.vue'),
|
||||
|
||||
},{
|
||||
path:'eventsDetail',
|
||||
name:'SquareEventsDetail',
|
||||
meta:{enter:'all',},
|
||||
component: _import_component('Events/eventsDetail.vue'),
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
path: '/demo',
|
||||
name: 'demo',
|
||||
component: _import('Demo')
|
||||
},
|
||||
// {
|
||||
// path: '/history',
|
||||
// name: 'history',
|
||||
// component: _import('history')
|
||||
// },
|
||||
// {
|
||||
// path: '/testClickData',
|
||||
// name: 'testClickData',
|
||||
// component: _import('TestClickData')
|
||||
// },
|
||||
{
|
||||
path: '/administrator',
|
||||
name: 'administrator',
|
||||
@@ -292,17 +243,6 @@ const routes: Array<RouteRecordRaw> = [
|
||||
meta:{enter:3,},
|
||||
component: _import_component('Administrator/SE/getGenerateFrequency/index.vue'),
|
||||
},
|
||||
// {
|
||||
// path:'allUserSE',
|
||||
// name:'allUserSE',
|
||||
// meta:{enter:3,},
|
||||
// component: _import_component('Administrator/SE/allUser.vue'),
|
||||
// },{
|
||||
// path:'allUserSE',
|
||||
// name:'allUserSE',
|
||||
// meta:{enter:3,},
|
||||
// component: _import_component('Administrator/SE/allUser.vue'),
|
||||
// },
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -338,16 +278,6 @@ const routes: Array<RouteRecordRaw> = [
|
||||
},
|
||||
component: _import('affiliate/affiliateRegister'),
|
||||
},
|
||||
// {
|
||||
// path: '/library',
|
||||
// name: 'library',
|
||||
// component: _import('library')
|
||||
// },
|
||||
// {
|
||||
// path: '/trialApproval',
|
||||
// name: 'trialApproval',
|
||||
// component: _import('trialApproval')
|
||||
// },
|
||||
{
|
||||
path: '/setIdentification',
|
||||
name: 'setIdentification',
|
||||
@@ -464,7 +394,6 @@ router.beforeEach((to:any, from, next) => {
|
||||
// }
|
||||
// }
|
||||
// return
|
||||
// 检查路由是否存在
|
||||
// 机房用户
|
||||
let herfData = window.location.search.substring(1)
|
||||
if(herfData.split('=')[0] == 'noLogin' && to.name != 'homePage'){
|
||||
|
||||
@@ -45,6 +45,7 @@ const DesignDetailCopy : Module<DesignDetailCopy,RootState> = {
|
||||
width:v.layersObject[i].imageSize?.[0],
|
||||
height:v.layersObject[i].imageSize?.[1],
|
||||
}
|
||||
console.log(JSON.parse(JSON.stringify(v.layersObject[i])))
|
||||
v.layersObject[i].centers={
|
||||
left:0,
|
||||
top:0,
|
||||
@@ -74,8 +75,6 @@ const DesignDetailCopy : Module<DesignDetailCopy,RootState> = {
|
||||
updataDetailItem(state,data){
|
||||
state.designDetail.clothes.forEach((item:any) => {
|
||||
if(item.id == state.selectDetail.id){
|
||||
console.log(data);
|
||||
|
||||
for (const key in data) {
|
||||
item[key] = data[key]
|
||||
}
|
||||
|
||||
@@ -255,6 +255,7 @@ const userHabit : Module<UserHabit,RootState> = {
|
||||
*/
|
||||
state.userDetail.affiliate = data.affiliate
|
||||
state.userDetail.systemUser = data.systemUser
|
||||
// state.userDetail.systemUser = 3
|
||||
// 身份列表1:可以使用aida系统,2:可以使用affiliate页面,3:系统管理员用户
|
||||
state.userDetail.systemList = []
|
||||
if(data.systemUser != 0)state.userDetail.systemList.push(1)
|
||||
|
||||
@@ -145,7 +145,7 @@ export const Https = {
|
||||
updateUserInfo:`/api/account/updateUserInfo`, //修改国家职业
|
||||
accountDetail:`/api/account/getAccountDetail`, //用户详细信息
|
||||
|
||||
trialUserLogout:`/account/trialUserLogout`, //试用用户退出登录接口
|
||||
trialUserLogout:`/api/account/trialUserLogout`, //试用用户退出登录接口
|
||||
completeGuidancet:`/api/account/completeGuidance`, //用户指引结束
|
||||
|
||||
getExpiredTime:`/api/account/getExpiredTime`, //获取用户到期时间
|
||||
@@ -312,6 +312,8 @@ export const Https = {
|
||||
updatePromCodeInfo:`/api/stripe/updatePromCodeInfo`,//修改优惠码
|
||||
getAllCoupons:`/api/stripe/getAllCoupons`,//查询优惠码列表
|
||||
checkCoupon:`/api/stripe/checkCoupon`,//根据优惠码获取结算后的金额
|
||||
deletePromCode:`api/stripe/deletePromCode`,//删除优惠券
|
||||
|
||||
|
||||
//云生成
|
||||
designCloud:`/api/design/designCloud`,//创建云生成
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
mode="inline"
|
||||
@click="handleClick"
|
||||
>
|
||||
|
||||
<div v-for="(menu) in rootSubmenuKeys" :key="menu.key" >
|
||||
<a-menu-item :key="menu.key" :name="menu.name" :route="menu.route" v-if="!menu.children">
|
||||
<template #icon>
|
||||
@@ -68,7 +67,7 @@
|
||||
<script lang="ts">
|
||||
import { LoadingOutlined } from "@ant-design/icons-vue";
|
||||
import { message, Upload } from "ant-design-vue";
|
||||
import { defineComponent, onMounted, h, ref, nextTick, computed,reactive, toRefs } from "vue";
|
||||
import { defineComponent, onMounted, h, ref, nextTick, computed,reactive, toRefs, onBeforeMount } from "vue";
|
||||
import { MailOutlined, AppstoreOutlined, SettingOutlined } from '@ant-design/icons-vue';
|
||||
import { Https } from "@/tool/https";
|
||||
import { useStore } from "vuex";
|
||||
@@ -135,20 +134,19 @@ export default defineComponent({
|
||||
}else{
|
||||
router.push('/administrator')
|
||||
}
|
||||
|
||||
state.rootSubmenuKeys.forEach((item:any) => {
|
||||
if(item.children){
|
||||
item.children.forEach((item:any) => {
|
||||
if(item.route == router.currentRoute.value.path){
|
||||
state.selectedKeys[0] = item.key
|
||||
}
|
||||
});
|
||||
}else{
|
||||
if(item.route == router.currentRoute.value.path){
|
||||
state.selectedKeys[0] = item.key
|
||||
}
|
||||
}
|
||||
});
|
||||
// state.rootSubmenuKeys.forEach((item:any) => {
|
||||
// if(item.children){
|
||||
// item.children.forEach((item:any) => {
|
||||
// if(item.route == router.currentRoute.value.path){
|
||||
// state.selectedKeys[0] = item.key
|
||||
// }
|
||||
// });
|
||||
// }else{
|
||||
// if(item.route == router.currentRoute.value.path){
|
||||
// state.selectedKeys[0] = item.key
|
||||
// }
|
||||
// }
|
||||
// });
|
||||
//储存所有用户id和name
|
||||
Https.axiosGet(Https.httpUrls.getAllUserId,).then((rv: any) => {
|
||||
if (rv) {
|
||||
@@ -171,6 +169,9 @@ export default defineComponent({
|
||||
// router.push(state.rootSubmenuKeys[0].route)
|
||||
|
||||
})
|
||||
onBeforeMount(()=>{
|
||||
state.selectedKeys = ['sub1']
|
||||
})
|
||||
return {
|
||||
...toRefs(state),
|
||||
onOpenChange,
|
||||
|
||||
@@ -1,154 +0,0 @@
|
||||
<template>
|
||||
<div class="move_page">
|
||||
<div class="move_click">
|
||||
<div class="move_click_dian" v-for="i in moveDian" :key="i" :style="{'background':i}" @mousedown="AddDian(i)"></div>
|
||||
</div>
|
||||
<div class="img_block" ref="imgbox" @mousemove="startMove($event)">
|
||||
<img ref="img" src="https://t7.baidu.com/it/u=1956604245,3662848045&fm=193&f=GIF" />
|
||||
<!-- <div class="img_mark"></div> -->
|
||||
<div class="img_click_dian" v-for="item in imgDian" :key="item" :style="{'background':item.color,left:item.left+'px', top:item.top+'px'}" @mousedown="getMouseDown($event,item)" @mousemove="startMove($event)"></div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { defineComponent,h,ref} from "vue";
|
||||
export default defineComponent({
|
||||
data(){
|
||||
return{
|
||||
moveDian:['red','yellow'],
|
||||
imgDian:[],
|
||||
intObj:null,
|
||||
startDian:false,
|
||||
currentSign:{},
|
||||
imgBox:{},
|
||||
moveOriginal:{posX: 0, posY: 0}
|
||||
}
|
||||
},
|
||||
mounted(){
|
||||
this.imgBox = {
|
||||
left : this.$refs.imgbox.offsetLeft,
|
||||
top:this.$refs.imgbox.offsetTop,
|
||||
scrollTop:this.$refs.scrollTop || 0,
|
||||
}
|
||||
},
|
||||
methods:{
|
||||
AddDian(color){
|
||||
this.startDian = true
|
||||
this.intObj = {
|
||||
color:color
|
||||
}
|
||||
},
|
||||
|
||||
startMove(event){
|
||||
let scrollTop = this.$refs.imgbox.scrollTop;
|
||||
if(this.intObj){
|
||||
this.currentSign.color = this.intObj.color
|
||||
this.currentSign.left = event.clientX - this.imgBox.left
|
||||
this.currentSign.top = event.clientY + scrollTop - this.imgBox.top
|
||||
this.imgDian.push(this.currentSign)
|
||||
this.intObj = null
|
||||
}else{
|
||||
if(this.startDian){
|
||||
this.currentSign.left = event.clientX - this.imgBox.left - this.moveOriginal.posX
|
||||
this.currentSign.top = event.clientY + scrollTop - this.imgBox.top -this.moveOriginal.posY
|
||||
document.addEventListener('mouseup', this.getMouseOver);
|
||||
this.$forceUpdate()
|
||||
this.setBoundarySign()
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
|
||||
// 在边界上的签名域处理
|
||||
setBoundarySign() {
|
||||
let height = this.$refs.imgbox.offsetHeight + this.$refs.imgbox.scrollTop;
|
||||
// 2 为签名域的边框
|
||||
let maxPosHeight = height - 30
|
||||
// console.log(height,maxPosHeight,this.currentSign.pos_params.height)
|
||||
let maxPosWidth = this.$refs.imgbox.clientWidth - 30 //+ this.signBox.paddLeft;
|
||||
if (this.currentSign.top <= 0) {
|
||||
this.currentSign.top = 0
|
||||
} else if (this.currentSign.top >= maxPosHeight ) {
|
||||
this.currentSign.top = maxPosHeight;
|
||||
}
|
||||
if (this.currentSign.left <= 0) {
|
||||
this.currentSign.left = 0
|
||||
} else if (this.currentSign.left >= maxPosWidth) {
|
||||
this.currentSign.left = maxPosWidth;
|
||||
}
|
||||
},
|
||||
|
||||
getMouseDown(event,item){
|
||||
this.currentSign = item
|
||||
// 计算出鼠标在签名域上的偏移
|
||||
this.moveOriginal.posX = event.offsetX
|
||||
// this.moveOriginal.posY = mousedownParam.event.clientY - this.currentSign.pos_params.top - this.signBox.boxTop;
|
||||
this.moveOriginal.posY = event.offsetY // 1为边框
|
||||
this.startDian = true
|
||||
},
|
||||
|
||||
getMouseOver(){
|
||||
this.startDian = false
|
||||
this.currentSign = {}
|
||||
document.removeEventListener('mouseup', this.getMouseOver);
|
||||
document.removeEventListener('touchend', this.getMouseOver);
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
</script>
|
||||
<style scoped>
|
||||
.move_page{
|
||||
display: flex;
|
||||
|
||||
}
|
||||
.move_click{
|
||||
width: 60px;
|
||||
}
|
||||
|
||||
.move_click_dian{
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
border-radius: 50%;
|
||||
margin-bottom: 60px;
|
||||
cursor: pointer;
|
||||
user-select:none; /* CSS3属性 */
|
||||
}
|
||||
.img_block{
|
||||
position: relative;
|
||||
user-select:none;
|
||||
-moz-user-select:none;
|
||||
overflow-y: auto;
|
||||
background: green;
|
||||
}
|
||||
.img_mark{
|
||||
width: 1200px;
|
||||
height: 600px;
|
||||
background: #ccc;
|
||||
/* width: 100%;
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0; */
|
||||
}
|
||||
img{
|
||||
user-select:none;
|
||||
-moz-user-select:none;
|
||||
width: 700px;
|
||||
}
|
||||
.img_click_dian{
|
||||
position: absolute;
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
border-radius: 50%;
|
||||
-moz-user-select:none; /* Firefox私有属性 */
|
||||
-webkit-user-select:none; /* WebKit内核私有属性 */
|
||||
-ms-user-select:none; /* IE私有属性(IE10及以后) */
|
||||
-khtml-user-select:none; /* KHTML内核私有属性 */
|
||||
-o-user-select:none; /* Opera私有属性 */
|
||||
user-select:none; /* CSS3属性 */
|
||||
cursor: pointer;
|
||||
}
|
||||
</style>
|
||||
@@ -482,8 +482,7 @@ export default defineComponent({
|
||||
userId: this.userDetail.userId,
|
||||
};
|
||||
// console.log(getCookie("token"));
|
||||
console.log(this.userDetail)
|
||||
if(this.userDetail.systemList.indexOf(3)>-1){
|
||||
if(this.userDetail.systemUser == 3){
|
||||
await Https.axiosGet(Https.httpUrls.trialUserLogout,).then((rv) => {
|
||||
Https.axiosPost(Https.httpUrls.accountLogout, data).then((rv) => {
|
||||
if(this.userDetail.systemUser == 7){
|
||||
@@ -870,7 +869,7 @@ export default defineComponent({
|
||||
color: #1a1a1a;
|
||||
font-weight: 900;
|
||||
width: auto;
|
||||
padding: 0 1rem;
|
||||
padding: 0 1.6rem;
|
||||
cursor: auto;
|
||||
display: flex;
|
||||
line-height: 6rem;
|
||||
@@ -900,8 +899,8 @@ export default defineComponent({
|
||||
height: 100%;
|
||||
display: inline-block;
|
||||
border-left: .1rem solid ;
|
||||
padding-left: .9rem;
|
||||
margin-left: .9rem;
|
||||
padding-left: 1.3rem;
|
||||
margin-left: 1.5rem;
|
||||
font-size: 1.8rem;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
@@ -1,61 +1,56 @@
|
||||
<template>
|
||||
<div class="homeRecommend_max">
|
||||
<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>
|
||||
</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 class="gallery_btn white" @click="setRegister">Sign up</div>
|
||||
</div>
|
||||
</header>
|
||||
<div class="homeRecommend_content_body">
|
||||
<!-- <div class="homeRecommend_content_body_recommend">
|
||||
<img src="@/assets/images/homePage/home-bg.png">
|
||||
<div class="content_body_recommend_center content_body_text">
|
||||
<div class="content_body_recommend_center_title">
|
||||
<h1>AiDA</h1>
|
||||
<h3>bloom your creativity</h3>
|
||||
</div>
|
||||
<div class="left">
|
||||
<div class="comment">
|
||||
<div class="item">
|
||||
123123123123123123123123123123123123
|
||||
<div>2312321</div>
|
||||
</div>
|
||||
</div> -->
|
||||
<div class="homeRecommend_content_body_recommend" id="aaaa">
|
||||
<div class="content_body_recommend_left mdhidden">
|
||||
<img class="content_body_img1 content_body_img" src="/image/mainImg/img1.png" alt="">
|
||||
<img class="content_body_img2 content_body_img" src="/image/mainImg/img2.png" alt="">
|
||||
<img class="content_body_img3 content_body_img" src="/image/mainImg/img3.png" alt="">
|
||||
<img class="content_body_img4 content_body_img" src="/image/mainImg/img4.png" alt="">
|
||||
<div class="item right">
|
||||
1231231231231231231231231231231231233123123123
|
||||
<div>2312321</div>
|
||||
</div>
|
||||
<div class="content_body_recommend_center content_body_text">
|
||||
<div class="content_body_recommend_center_title">
|
||||
<h1>AiDA</h1>
|
||||
<h3>bloom your creativity</h3>
|
||||
</div>
|
||||
<div class="item">
|
||||
1231231231231231231231231231231231233123123123
|
||||
<div>2312321</div>
|
||||
</div>
|
||||
<div class="content_body_recommend_right mdhidden">
|
||||
<img class="content_body_img1 content_body_img" src="/image/mainImg/img5.png" alt="">
|
||||
<img class="content_body_img2 content_body_img" src="/image/mainImg/img6.png" alt="">
|
||||
<img class="content_body_img3 content_body_img" src="/image/mainImg/img7.png" alt="">
|
||||
<img class="content_body_img4 content_body_img" src="/image/mainImg/img8.png" alt="">
|
||||
<div class="item right">
|
||||
123123123123123123123123123123123123
|
||||
<div>2312321</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
1231231231231231231231231231231231233123123123
|
||||
<div>2312321</div>
|
||||
</div>
|
||||
<div class="item right">
|
||||
123123123123123123123123123123123123
|
||||
<div>2312321</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
1231231231231231231231231231231231233123123123
|
||||
<div>2312321</div>
|
||||
</div>
|
||||
<div class="item right">
|
||||
123123123123123123123123123123123123
|
||||
<div>2312321</div>
|
||||
</div>
|
||||
</div>
|
||||
<Works :isScroll="false"></Works>
|
||||
</div>
|
||||
<div class="homeRecommend_content_adminTop" @click="setAdminUp">
|
||||
<i class="fi fi-rr-arrow-small-up"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="right">
|
||||
<div class="">
|
||||
<div class="title">
|
||||
Log in to AiDA
|
||||
</div>
|
||||
<div class="info">
|
||||
Join the conversation! Sign in to connect seamlessly on WhatsApp and unlock the full potential of the web application.
|
||||
</div>
|
||||
<div class="continue gallery_btn gallery_btn_radius" @click="setLogin" style="min-width: 33rem;">
|
||||
Continue
|
||||
<i class="fi fi-rr-arrow-right"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
<script >
|
||||
import { defineComponent, toRefs, reactive, ref , nextTick,computed, onMounted, onBeforeUnmount } from "vue";
|
||||
@@ -66,7 +61,6 @@ import Habit from "@/component/Detail/habit.vue";
|
||||
import { Https } from "@/tool/https";
|
||||
import { Modal, message } from "ant-design-vue";
|
||||
import { ExclamationCircleOutlined } from "@ant-design/icons-vue";
|
||||
import Works from "@/views/HomeView/Works.vue";
|
||||
import { useStore } from "vuex";
|
||||
import { setLang } from "@/tool/guide";
|
||||
import { useI18n } from "vue-i18n";
|
||||
@@ -77,7 +71,6 @@ export default defineComponent({
|
||||
components: {
|
||||
VerificationCodeInput,
|
||||
Habit,
|
||||
Works,
|
||||
},
|
||||
setup(){
|
||||
const store = useStore();
|
||||
@@ -85,20 +78,12 @@ export default defineComponent({
|
||||
let registerModel = ref()
|
||||
let data = reactive({
|
||||
})
|
||||
let isMoblie = ref(false)
|
||||
let userDetail = computed(()=>{
|
||||
return store.state.UserHabit.userDetail
|
||||
})
|
||||
let setLogin = ()=>{
|
||||
router.push("/login");
|
||||
}
|
||||
let setAdminUp = ()=>{
|
||||
let scrollDom = document.querySelector('.homeRecommend_content_body')
|
||||
scrollDom.scrollTo({
|
||||
top: 0,
|
||||
behavior: 'smooth' // 平滑滚动到顶部
|
||||
});
|
||||
}
|
||||
let logout = ()=>{
|
||||
let userInfo = store.state.UserHabit.userDetail;
|
||||
let data = {
|
||||
@@ -118,11 +103,7 @@ export default defineComponent({
|
||||
let updataIsMoblie = ()=>{
|
||||
clearTimeout(time)
|
||||
time = setTimeout(()=>{
|
||||
if(window.innerWidth < 768){
|
||||
isMoblie.value = true
|
||||
}else{
|
||||
isMoblie.value = false
|
||||
}
|
||||
|
||||
},500)
|
||||
|
||||
}
|
||||
@@ -130,11 +111,6 @@ export default defineComponent({
|
||||
router.push('/register');
|
||||
}
|
||||
onMounted(()=>{
|
||||
if(window.innerWidth < 768){
|
||||
isMoblie.value = true
|
||||
}else{
|
||||
isMoblie.value = false
|
||||
}
|
||||
window.addEventListener('resize',updataIsMoblie)
|
||||
})
|
||||
onBeforeUnmount(() => {
|
||||
@@ -145,10 +121,8 @@ export default defineComponent({
|
||||
userDetail,
|
||||
setLogin,
|
||||
registerModel,
|
||||
setAdminUp,
|
||||
logout,
|
||||
goHome,
|
||||
isMoblie,
|
||||
setRegister,
|
||||
}
|
||||
},
|
||||
@@ -220,304 +194,80 @@ export default defineComponent({
|
||||
|
||||
<style lang="less" scoped>
|
||||
.homeRecommend_max{
|
||||
position: relative;
|
||||
display: flex;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
flex-direction: column;
|
||||
|
||||
.homeRecommend_content_body{
|
||||
flex: 1;
|
||||
}
|
||||
}
|
||||
.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;
|
||||
}
|
||||
// background-color: #fff;
|
||||
.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%;
|
||||
display: flex;
|
||||
> .left,> .right{
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
.homeRecommend_content_body{
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
&.homeRecommend_content_body::-webkit-scrollbar {
|
||||
display: none;
|
||||
display: flex;
|
||||
}
|
||||
// .homeRecommend_content_body_recommend{
|
||||
// // display: flex;
|
||||
// // justify-content: center;
|
||||
// position: relative;
|
||||
// border-bottom: 1px solid #ececec;
|
||||
// width: 100%;
|
||||
// img{
|
||||
// width: 100%;
|
||||
// }
|
||||
// .content_body_recommend_center{
|
||||
// position: absolute;
|
||||
// top: 40%;
|
||||
// left: 36rem;
|
||||
// transform: translateY(-50%);
|
||||
// .content_body_recommend_center_title{
|
||||
// h1,h3{
|
||||
// color: #fff;
|
||||
// }
|
||||
// h1{
|
||||
// font-size: 15rem;
|
||||
// margin-bottom: 0;
|
||||
// line-height: 1;
|
||||
// }
|
||||
// h3{
|
||||
// font-size: 6rem;
|
||||
// }
|
||||
// }
|
||||
|
||||
// }
|
||||
// }
|
||||
.homeRecommend_content_body_recommend{
|
||||
// display: flex;
|
||||
// justify-content: center;
|
||||
position: relative;
|
||||
border-bottom: 1px solid #ececec;
|
||||
|
||||
.content_body_recommend_left,
|
||||
.content_body_recommend_right{
|
||||
position: absolute;
|
||||
top: 0;
|
||||
img{
|
||||
border-radius: 2rem;
|
||||
position: absolute;
|
||||
width: 20px;
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
}
|
||||
--margin:3rem;
|
||||
.content_body_recommend_right{
|
||||
right: 0;
|
||||
.content_body_img1{
|
||||
width: 25rem;
|
||||
height: 55rem;
|
||||
object-fit: cover;
|
||||
// top: 10rem;
|
||||
// right: calc(20rem + var(--margin));
|
||||
right: 0;
|
||||
top: 14rem;
|
||||
}
|
||||
.content_body_img2{
|
||||
top: calc(45rem + var(--margin));
|
||||
width: 15rem;
|
||||
height: 30rem;
|
||||
object-fit: cover;
|
||||
right: calc(41rem + var(--margin));
|
||||
}
|
||||
.content_body_img3{
|
||||
top: calc(40rem + var(--margin));
|
||||
width: 15rem;
|
||||
height: 30rem;
|
||||
object-fit: cover;
|
||||
right: calc(25rem + var(--margin));
|
||||
}
|
||||
.content_body_img4{
|
||||
width: 30rem;
|
||||
height: 25rem;
|
||||
object-fit: cover;
|
||||
top: calc(13rem);
|
||||
right: calc(25rem + var(--margin));
|
||||
}
|
||||
.content_body_img5{
|
||||
width: 20rem;
|
||||
height: 20rem;
|
||||
object-fit: cover;
|
||||
top: 15rem;
|
||||
right: 0;
|
||||
}
|
||||
}
|
||||
.content_body_recommend_left{
|
||||
left: 0;
|
||||
.content_body_img1{
|
||||
width: 25rem;
|
||||
height: 55rem;
|
||||
object-fit: cover;
|
||||
left: 0;
|
||||
top: 14rem;
|
||||
// top: 5rem;
|
||||
// left: calc(20rem + var(--margin));
|
||||
}
|
||||
.content_body_img2{
|
||||
width: 35rem;
|
||||
height: 27rem;
|
||||
object-fit: cover;
|
||||
top: calc(10rem + var(--margin));
|
||||
left: calc(25rem + var(--margin));
|
||||
}
|
||||
.content_body_img3{
|
||||
width: 22rem;
|
||||
height: 30rem;
|
||||
object-fit: cover;
|
||||
top: calc(40rem + var(--margin));
|
||||
left: calc(27rem + var(--margin));
|
||||
}
|
||||
.content_body_img4{
|
||||
width: 15rem;
|
||||
height: 18rem;
|
||||
object-fit: cover;
|
||||
top: calc(53rem + var(--margin));
|
||||
left: calc(45rem + var(--margin));
|
||||
}
|
||||
.content_body_img5{
|
||||
width: 20rem;
|
||||
height: 20rem;
|
||||
object-fit: cover;
|
||||
top: 51rem;
|
||||
left: calc(20rem + var(--margin));
|
||||
}
|
||||
.content_body_img6{
|
||||
width: 20rem;
|
||||
height: 20rem;
|
||||
object-fit: cover;
|
||||
top: 20rem;
|
||||
left: calc(0 + var(--margin));
|
||||
}
|
||||
}
|
||||
.content_body_recommend_center{
|
||||
padding: 20rem 0;
|
||||
text-align: center;
|
||||
width: 50%;
|
||||
position: relative;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
z-index: 2;
|
||||
opacity: 0;
|
||||
@media (max-width: 768px) {
|
||||
width: 80%;
|
||||
}
|
||||
.content_body_recommend_center_title{
|
||||
h1{
|
||||
line-height: 1;
|
||||
font-size: 13rem;
|
||||
font-weight: 900;
|
||||
margin: 7rem;
|
||||
div{
|
||||
color: #341e57;
|
||||
> .left{
|
||||
width: 60%;
|
||||
background: #232323;
|
||||
> .comment{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
> .item{
|
||||
padding: 2rem;
|
||||
border-radius: 4rem;
|
||||
font-size: 2rem;
|
||||
background: #fff;
|
||||
text-align: center;
|
||||
width: auto;
|
||||
position: relative;
|
||||
margin: 1rem 0;
|
||||
font-weight: 600;
|
||||
&:nth-child(1){left: -10rem;}
|
||||
&:nth-child(2){left: 15rem;}
|
||||
&:nth-child(3){left: -15rem;}
|
||||
&:nth-child(4){left: 10rem;}
|
||||
> div{
|
||||
position: absolute;
|
||||
padding: 1.5rem;
|
||||
border-radius: 4rem;
|
||||
left: 1rem;
|
||||
top: 0;
|
||||
transform: translateY(-60%);
|
||||
background: rgba(175, 175, 175,.6);
|
||||
backdrop-filter: blur(13px);
|
||||
-webkit-backdrop-filter: blur(13px);
|
||||
}
|
||||
&.right{
|
||||
> div{
|
||||
left: auto;
|
||||
right: 1rem;
|
||||
}
|
||||
}
|
||||
h3{
|
||||
line-height: 1;
|
||||
margin: 7rem;
|
||||
font-size: 5rem;
|
||||
font-weight: 900;
|
||||
}
|
||||
}
|
||||
.content_body_recommend_center_btn{
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
cursor: pointer;
|
||||
a{
|
||||
margin: 0 2rem;
|
||||
}
|
||||
}
|
||||
> .right{
|
||||
width: 40%;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
> div{
|
||||
width: 60rem;
|
||||
> .title{
|
||||
font-size: 4rem;
|
||||
font-weight: 900;
|
||||
line-height: 1.2;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
> .info{
|
||||
font-size: 2rem;
|
||||
margin-bottom: 4rem;
|
||||
line-height: 1.2;
|
||||
}
|
||||
> .continue{
|
||||
> i{
|
||||
margin-left: 1rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.homeRecommend_content_adminTop{
|
||||
position: fixed;
|
||||
bottom: 5rem;
|
||||
right: 5rem;
|
||||
width: 7rem;
|
||||
height: 7rem;
|
||||
cursor: pointer;
|
||||
border-radius: 50%;
|
||||
box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background: #fff;
|
||||
z-index: 999;
|
||||
i{
|
||||
display: flex;
|
||||
font-size: 3rem;
|
||||
transition: all .3s;
|
||||
}
|
||||
&.homeRecommend_content_adminTop:hover{
|
||||
i{
|
||||
transform: scale(1.2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<template>
|
||||
<div class="works_page" :class="{active:isScroll,'otherUsersActive':otherUsers}">
|
||||
<div class="works_page" :class="{active:isScroll,'otherUsersActive':otherUsers,'positionLogin':position=='login'}">
|
||||
<!-- <div class="modal_title_text">
|
||||
<div>Works</div>
|
||||
</div> -->
|
||||
<div class="modal_title_text modal_search" v-if="!otherUsers">
|
||||
<div class="modal_title_text modal_search" v-if="!otherUsers && position!='login'">
|
||||
<div v-show="isScroll" v-for="item in worksType" :key="item" class="gallery_btn white" @click="setWorksSelect(item)" :class="{active:item.value == worksSelect}">
|
||||
{{ item.name }}
|
||||
</div>
|
||||
@@ -58,6 +58,10 @@ export default defineComponent({
|
||||
type:Boolean,
|
||||
default:false,
|
||||
},
|
||||
position:{
|
||||
type:String,
|
||||
default:'',
|
||||
},
|
||||
userId:{
|
||||
type:String,
|
||||
default:'-1',
|
||||
@@ -283,7 +287,13 @@ export default defineComponent({
|
||||
// min-width: 1440px;
|
||||
position: relative;
|
||||
padding-top: 5rem;
|
||||
|
||||
&.positionLogin{
|
||||
padding: 0;
|
||||
border-radius: 0;
|
||||
.page_content{
|
||||
border-radius: 0;
|
||||
}
|
||||
}
|
||||
.modal_title_text{
|
||||
display: flex;
|
||||
margin: 0;
|
||||
|
||||
158
src/views/Login.vue
Normal file
158
src/views/Login.vue
Normal file
@@ -0,0 +1,158 @@
|
||||
<template>
|
||||
<div class="loginPage">
|
||||
<div class="left">
|
||||
<Works :isScroll="true" :position="'login'"></Works>
|
||||
</div>
|
||||
<div class="right">
|
||||
<div class="Text" v-show="!loginType">
|
||||
<div class="title">Join millions <br />using AI every day</div>
|
||||
<div class="info">Experience secure,spam-free support that empowers you to grow, create,and succeed with confidence</div>
|
||||
</div>
|
||||
<div class="loginBox">
|
||||
<div class="selectType" v-show="!loginType">
|
||||
<div class="text">
|
||||
Continue with one of these:
|
||||
</div>
|
||||
<div class="typeList">
|
||||
<div class="gallery_btn" @click="setLoginType('personal')">personal</div>
|
||||
<div class="gallery_btn" @click="setLoginType('school')">school</div>
|
||||
<div class="gallery_btn" @click="setLoginType('enterprise')">enterprise</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="login" v-show="loginType">
|
||||
<div class="title">
|
||||
<i class="fi fi-br-angle-small-left" @click="()=>loginType = ''"></i>
|
||||
<!-- <i class="fi fi-rr-arrow-left" @click="()=>loginType = ''"></i> -->
|
||||
<span>Log on to AiDA 3.0</span>
|
||||
</div>
|
||||
<personal v-show="loginType == 'personal'"></personal>
|
||||
<school v-show="loginType == 'school'"></school>
|
||||
<enterprise v-show="loginType == 'enterprise'"></enterprise>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts">
|
||||
import { defineComponent,computed,ref,provide,nextTick,createVNode,toRefs, reactive} from 'vue'
|
||||
import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
|
||||
import { Https } from "@/tool/https";
|
||||
import { useStore } from "vuex";
|
||||
import { useI18n } from 'vue-i18n'
|
||||
const md5 = require("md5");
|
||||
import Works from "@/views/HomeView/Works.vue";
|
||||
import { message } from "ant-design-vue";
|
||||
import { isEmail } from "@/tool/util";
|
||||
import personal from "@/component/LoginPage/login/personal.vue";
|
||||
import school from "@/component/LoginPage/login/school.vue";
|
||||
import enterprise from "@/component/LoginPage/login/enterprise.vue";
|
||||
export default defineComponent({
|
||||
components:{
|
||||
Works,personal,school,enterprise
|
||||
},
|
||||
props:{
|
||||
},
|
||||
emits:[],
|
||||
setup(props,{emit}) {
|
||||
const store = useStore();
|
||||
const loginData = reactive({
|
||||
loginType:'',
|
||||
})
|
||||
const dataDom = reactive({
|
||||
})
|
||||
const setLoginType = (str:any)=>{
|
||||
loginData.loginType = str
|
||||
}
|
||||
return{
|
||||
...toRefs(dataDom),
|
||||
...toRefs(loginData),
|
||||
setLoginType,
|
||||
}
|
||||
},
|
||||
provide() {
|
||||
return {
|
||||
}
|
||||
},
|
||||
})
|
||||
</script>
|
||||
<style lang="less" scoped>
|
||||
.loginPage{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
display: flex;
|
||||
> .left,>.right{
|
||||
height: 100%;
|
||||
}
|
||||
> .left{
|
||||
width: 60%;
|
||||
background: #f7f8fa;
|
||||
}
|
||||
> .right{
|
||||
display: flex;
|
||||
width: 40%;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
flex-direction: column;
|
||||
> .Text{
|
||||
width: 60rem;
|
||||
text-align: center;
|
||||
> .title{
|
||||
font-size: 4rem;
|
||||
font-weight: 900;
|
||||
line-height: 1.2;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
> .info{
|
||||
font-size: 1.8rem;
|
||||
margin-bottom: 2rem;
|
||||
line-height: 1.2;
|
||||
}
|
||||
> .continue{
|
||||
> i{
|
||||
margin-left: 1rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
> .loginBox{
|
||||
width: 60rem;
|
||||
> .selectType{
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
> .text{
|
||||
font-size: 2.5rem;
|
||||
font-weight: 600;
|
||||
}
|
||||
> .typeList{
|
||||
> div{
|
||||
margin: 0 auto;
|
||||
width: 33rem;
|
||||
margin-top: .8rem;
|
||||
border-radius: 1rem;
|
||||
border: 2px solid;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
}
|
||||
}
|
||||
> .login{
|
||||
position: relative;
|
||||
> .title{
|
||||
font-size: 4rem;
|
||||
font-weight: 900;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
> i{
|
||||
margin-right: 2rem;
|
||||
font-size: 3rem;
|
||||
display: flex;
|
||||
cursor: pointer;
|
||||
align-items: center;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
Reference in New Issue
Block a user