部分优化

This commit is contained in:
X1627315083
2025-09-08 14:50:59 +08:00
parent 4dc5e26d92
commit 360bfd01ac
51 changed files with 854 additions and 354 deletions

4
.env
View File

@@ -1,4 +1,4 @@
# VITE_USER_NODE_ENV = 'production' VITE_USER_NODE_ENV = 'production'
VITE_USER_NODE_ENV = 'development' # VITE_USER_NODE_ENV = 'development'
VITE_APP_BASE_URL = 'http://18.167.251.121:10086' VITE_APP_BASE_URL = 'http://18.167.251.121:10086'
VITE_APP_BASE_URL = 'https://www.api.aida.com.hk' VITE_APP_BASE_URL = 'https://www.api.aida.com.hk'

View File

@@ -4,4 +4,5 @@ VITE_USER_NODE_ENV = 'production'
# VITE_APP_BASE_URL = 'https://api.aida.com.hk' # VITE_APP_BASE_URL = 'https://api.aida.com.hk'
VITE_APP_BASE_URL = 'https://develop.api.aida.com.hk' VITE_APP_BASE_URL = 'https://develop.api.aida.com.hk'
VITE_APP_BASE_URL = 'http://localhost:22170'

BIN
dist.7z

Binary file not shown.

View File

@@ -44,6 +44,11 @@ select {
border-radius: 4px; border-radius: 4px;
/* 设置圆角半径 */ /* 设置圆角半径 */
} }
select > option {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
}
select:focus-visible { select:focus-visible {
border: 0.2rem solid #c4c4c4 !important; border: 0.2rem solid #c4c4c4 !important;
} }
@@ -270,6 +275,20 @@ li {
color: #fff; color: #fff;
background-color: #000; background-color: #000;
} }
.gallery_btn.forbidden {
opacity: 0.7;
}
.gallery_btn.forbidden:hover {
background-color: #000;
color: #fff;
}
.gallery_btn.forbiddenWhite {
opacity: 0.7;
}
.gallery_btn.forbiddenWhite:hover {
background-color: #fff;
color: #000;
}
.gallery_btn.active { .gallery_btn.active {
background-color: #fff; background-color: #fff;
color: #000; color: #000;
@@ -2297,6 +2316,7 @@ textarea:focus {
border-radius: 4px; border-radius: 4px;
height: 20rem; height: 20rem;
top: 0rem; top: 0rem;
flex: 1;
border: 1px solid #dcdfe6; border: 1px solid #dcdfe6;
} }
.generage_btn_box { .generage_btn_box {

View File

@@ -42,6 +42,11 @@ select{
height: 2.5rem; height: 2.5rem;
border: 0.2rem solid #c4c4c4 !important; border: 0.2rem solid #c4c4c4 !important;
border-radius: 4px; /* 设置圆角半径 */ border-radius: 4px; /* 设置圆角半径 */
> option {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
}
} }
select:focus-visible{ select:focus-visible{
border: 0.2rem solid #c4c4c4 !important; border: 0.2rem solid #c4c4c4 !important;
@@ -247,6 +252,7 @@ input:focus{
border-radius: 1.6rem; border-radius: 1.6rem;
padding: 0 1.7rem; padding: 0 1.7rem;
} }
&.btnSamil{ &.btnSamil{
padding: 0rem 2rem; padding: 0rem 2rem;
line-height: 4rem; line-height: 4rem;
@@ -271,6 +277,20 @@ input:focus{
background-color: #000; background-color: #000;
} }
} }
&.forbidden{
opacity: .7;
}
&.forbidden:hover{
background-color: #000;
color: #fff;
}
&.forbiddenWhite{
opacity: .7;
}
&.forbiddenWhite:hover{
background-color: #fff;
color: #000;
}
&.active{ &.active{
background-color: #fff; background-color: #fff;
color: #000; color: #000;
@@ -2179,6 +2199,7 @@ textarea:focus{
border-radius: 4px; border-radius: 4px;
height: 20rem; height: 20rem;
top: 0rem; top: 0rem;
flex: 1;
border: 1px solid #dcdfe6; border: 1px solid #dcdfe6;
} }

View File

@@ -73,9 +73,9 @@ export default defineComponent({
accountFollofFans.getListData.isShowMark = false accountFollofFans.getListData.isShowMark = false
if(rv.length == 0) { if(rv.length == 0) {
accountFollofFans.getListData.isNoData = true accountFollofFans.getListData.isNoData = true
return }else{
accountFollofFans.dataList.push(...rv)
} }
accountFollofFans.dataList = rv
} }
}).catch(() => { }).catch(() => {
accountFollofFans.getListData.isShowMark = false accountFollofFans.getListData.isShowMark = false
@@ -96,13 +96,13 @@ export default defineComponent({
}) })
} }
let openOtherUsers = (item:any)=>{ let openOtherUsers = (item:any)=>{
const routeUrl = router.resolve({ // const routeUrl = router.resolve({
path:'/home/otherUsers', // path:'/home/otherUsers',
query:{ // query:{
userId:item.senderId // userId:item.senderId
} // }
}) // })
window.open(routeUrl.href,'_blank') // window.open(routeUrl.href,'_blank')
} }
onMounted (()=>{ onMounted (()=>{
accountFollofFans.getListData.isNoData = false accountFollofFans.getListData.isNoData = false

View File

@@ -69,6 +69,7 @@ export default defineComponent({
}) })
let loadingDom:any = ref(null) let loadingDom:any = ref(null)
let searchFollowFansList = ()=>{ let searchFollowFansList = ()=>{
accountFollofFans.dataList = []
accountFollofFans.getListData.page = 1 accountFollofFans.getListData.page = 1
getFollowFansList() getFollowFansList()
} }
@@ -80,9 +81,9 @@ export default defineComponent({
accountFollofFans.getListData.isShowMark = false accountFollofFans.getListData.isShowMark = false
if(rv.length == 0) { if(rv.length == 0) {
accountFollofFans.getListData.isNoData = true accountFollofFans.getListData.isNoData = true
return }else{
accountFollofFans.dataList.push(...rv)
} }
accountFollofFans.dataList = rv
} }
}).catch(() => { }).catch(() => {
accountFollofFans.getListData.isShowMark = false accountFollofFans.getListData.isShowMark = false
@@ -104,13 +105,13 @@ export default defineComponent({
}) })
} }
let openOtherUsers = (item:any)=>{ let openOtherUsers = (item:any)=>{
const routeUrl = router.resolve({ // const routeUrl = router.resolve({
path:'/home/otherUsers', // path:'/home/otherUsers',
query:{ // query:{
userId:item.senderId // userId:item.senderId
} // }
}) // })
window.open(routeUrl.href,'_blank') // window.open(routeUrl.href,'_blank')
} }
onMounted (()=>{ onMounted (()=>{
accountFollofFans.getListData.isNoData = false accountFollofFans.getListData.isNoData = false

View File

@@ -27,10 +27,10 @@
<div v-show="!userDetail.accountExtendList?.Google" id="g_id_bind"></div> <div v-show="!userDetail.accountExtendList?.Google" id="g_id_bind"></div>
<div v-if="userDetail.accountExtendList?.Google" class="gallery_btn" @click="ungroupGoogleModel">{{ $t('frontPage.Unbind') }}</div> <div v-if="userDetail.accountExtendList?.Google" class="gallery_btn" @click="ungroupGoogleModel">{{ $t('frontPage.Unbind') }}</div>
</div> --> </div> -->
<div class="gmail_btn"> <div class="gmail_btn" @click="toGmailLogin">
<div v-if="!userDetail.accountExtendList?.Google" class="gallery_btn">{{ $t('frontPage.BindNow') }}</div> <div v-if="!userDetail.accountExtendList?.Google" class="gallery_btn forbidden">{{ $t('frontPage.BindNow') }}</div>
<div v-show="!userDetail.accountExtendList?.Google" id="g_id_bind"></div> <!-- <div v-show="!userDetail.accountExtendList?.Google" id="g_id_bind"></div> -->
<div v-if="userDetail.accountExtendList?.Google" class="gallery_btn" @click="ungroupGoogleModel">{{ $t('frontPage.Unbind') }}</div> <div v-if="userDetail.accountExtendList?.Google" class="gallery_btn forbidden" @click="ungroupGoogleModel">{{ $t('frontPage.Unbind') }}</div>
<!-- <div v-if="userDetail.accountExtendList?.Google" class="gallery_btn" @click="ungroupGoogleModel">{{ $t('frontPage.Unbind') }}</div> --> <!-- <div v-if="userDetail.accountExtendList?.Google" class="gallery_btn" @click="ungroupGoogleModel">{{ $t('frontPage.Unbind') }}</div> -->
</div> </div>
</div> </div>
@@ -138,7 +138,11 @@ export default defineComponent({
bindPageDom.bindEmail.init('Modify') bindPageDom.bindEmail.init('Modify')
} }
const toGmailLogin = ()=>{
message.info(t('account.canNotUtilize'))
}
onMounted(async ()=>{ onMounted(async ()=>{
return
let GOOGLE_CLIENT_ID = '29310152396-nnsd3h533fld665oguu8ovrt1nukmt46.apps.googleusercontent.com' let GOOGLE_CLIENT_ID = '29310152396-nnsd3h533fld665oguu8ovrt1nukmt46.apps.googleusercontent.com'
var existingScript = document.querySelector(`script[src="${data.scriptSrc}"]`); var existingScript = document.querySelector(`script[src="${data.scriptSrc}"]`);
if(!window.isAddGmail){ if(!window.isAddGmail){
@@ -202,6 +206,7 @@ export default defineComponent({
ungroupGoogleModel, ungroupGoogleModel,
ungroupWeiXinModel, ungroupWeiXinModel,
modifyEmail, modifyEmail,
toGmailLogin,
} }
}, },
data(){ data(){

View File

@@ -71,9 +71,9 @@ export default defineComponent({
accountMessage.isShowMark = false accountMessage.isShowMark = false
if(rv.content.length == 0) { if(rv.content.length == 0) {
accountMessage.isNoData = true accountMessage.isNoData = true
return }else{
accountMessage.dataList.push(...rv.content)
} }
accountMessage.dataList = rv.content
}).catch(() => { }).catch(() => {
accountMessage.isShowMark = false accountMessage.isShowMark = false
accountMessage.isNoData = true accountMessage.isNoData = true
@@ -95,13 +95,13 @@ export default defineComponent({
}) })
} }
let openOtherUsers = (item:any)=>{ let openOtherUsers = (item:any)=>{
const routeUrl = router.resolve({ // const routeUrl = router.resolve({
path:'/home/otherUsers', // path:'/home/otherUsers',
query:{ // query:{
userId:item.senderId // userId:item.senderId
} // }
}) // })
window.open(routeUrl.href,'_blank') // window.open(routeUrl.href,'_blank')
} }
let openOtherWork = (item:any)=>{ let openOtherWork = (item:any)=>{
const routeUrl = router.resolve({ const routeUrl = router.resolve({

View File

@@ -69,9 +69,9 @@ export default defineComponent({
accountMessage.isShowMark = false accountMessage.isShowMark = false
if(rv.content.length == 0) { if(rv.content.length == 0) {
accountMessage.isNoData = true accountMessage.isNoData = true
return }else{
accountMessage.dataList.push(...rv.content)
} }
accountMessage.dataList = rv.content
}).catch(() => { }).catch(() => {
accountMessage.isShowMark = false accountMessage.isShowMark = false
accountMessage.isNoData = true accountMessage.isNoData = true
@@ -93,13 +93,13 @@ export default defineComponent({
}) })
} }
let openOtherUsers = (item:any)=>{ let openOtherUsers = (item:any)=>{
const routeUrl = router.resolve({ // const routeUrl = router.resolve({
path:'/home/otherUsers', // path:'/home/otherUsers',
query:{ // query:{
userId:item.senderId // userId:item.senderId
} // }
}) // })
window.open(routeUrl.href,'_blank') // window.open(routeUrl.href,'_blank')
} }
onMounted (()=>{ onMounted (()=>{

View File

@@ -68,9 +68,9 @@ export default defineComponent({
accountMessage.isShowMark = false accountMessage.isShowMark = false
if(rv.content.length == 0) { if(rv.content.length == 0) {
accountMessage.isNoData = true accountMessage.isNoData = true
return }else{
accountMessage.dataList.push(...rv.content)
} }
accountMessage.dataList = rv.content
}).catch(() => { }).catch(() => {
accountMessage.isShowMark = false accountMessage.isShowMark = false
accountMessage.isNoData = true accountMessage.isNoData = true
@@ -104,13 +104,13 @@ export default defineComponent({
}) })
} }
let openOtherUsers = (item:any)=>{ let openOtherUsers = (item:any)=>{
const routeUrl = router.resolve({ // const routeUrl = router.resolve({
path:'/home/otherUsers', // path:'/home/otherUsers',
query:{ // query:{
userId:item.senderId // userId:item.senderId
} // }
}) // })
window.open(routeUrl.href,'_blank') // window.open(routeUrl.href,'_blank')
} }
onMounted (()=>{ onMounted (()=>{
accountMessage.isNoData = false accountMessage.isNoData = false

View File

@@ -56,14 +56,15 @@ export default defineComponent({
} }
prop.getHistory(data).then((rv:any)=>{ prop.getHistory(data).then((rv:any)=>{
accountMessage.isShowMark = false accountMessage.isShowMark = false
if(rv.content.length == 0) { if(rv.content.length == 0) {
accountMessage.isNoData = true accountMessage.isNoData = true
return }else{
rv.content.forEach((item:any) => {
item.content = JSON.parse(item.content)
});
accountMessage.dataList.push(...rv.content)
} }
rv.content.forEach((item:any) => {
item.content = JSON.parse(item.content)
});
accountMessage.dataList = rv.content
}).catch(() => { }).catch(() => {
accountMessage.isShowMark = false accountMessage.isShowMark = false
accountMessage.isNoData = true accountMessage.isNoData = true

View File

@@ -45,51 +45,51 @@
</div> </div>
</div> </div>
<div class="modal_title_text"> <div class="modal_title_text">
<div>{{ title.label }} User</div> <div>{{ title.label }} {{ $t('admin.User') }}</div>
</div> </div>
<div class="allUserPoeration_center admin_page"> <div class="allUserPoeration_center admin_page">
<div class="admin_state_item"> <div class="admin_state_item">
<span>{{ $t('adminSeAllUser.UserName') }}: <span>*</span></span> <span>{{ $t('admin.UserName') }}: <span>*</span></span>
<input <input
v-model="userName" v-model="userName"
placeholder="Please enter user name" :placeholder="$t('admin.enterUserName')"
type="text" type="text"
style="width: 250px" style="width: 250px"
/> />
</div> </div>
<div class="admin_state_item"> <div class="admin_state_item">
<span>{{ $t('adminSeAllUser.UserEmail') }}: <span>*</span></span> <span>{{ $t('admin.UserEmail') }}: <span>*</span></span>
<input <input
v-model="userEmail" v-model="userEmail"
placeholder="Please enter email" :placeholder="$t('admin.enterEmail')"
type="text" type="text"
style="width: 250px" style="width: 250px"
/> />
</div> </div>
<div class="admin_state_item"> <div class="admin_state_item">
<span>{{ $t('adminSeAllUser.Password') }}: <span>*</span></span> <span>{{ $t('admin.Password') }}: <span>*</span></span>
<input <input
@focus="focus" @focus="focus"
@blur="blur" @blur="blur"
v-model="password" v-model="password"
placeholder="Please enter password" :placeholder="$t('admin.enterPassword')"
type="password" type="password"
style="width: 250px" style="width: 250px"
/> />
</div> </div>
<div class="admin_state_item"> <div class="admin_state_item">
<span>{{ $t('adminSeAllUser.MaximumCredits') }}:</span> <span>{{ $t('admin.MaximumCredits') }}:</span>
<input <input
v-model="credits" v-model="credits"
placeholder="Please enter credits" :placeholder="$t('admin.enterCredits')"
type="text" type="text"
style="width: 250px" style="width: 250px"
/> />
</div> </div>
</div> </div>
<div class="allUserPoeration_btn admin_page"> <div class="allUserPoeration_btn admin_page">
<div class="admin_search_item" @click="cancelDsign">{{ $t('adminSeAllUser.Close') }}</div> <div class="admin_search_item" @click="cancelDsign">{{ $t('admin.Close') }}</div>
<div class="admin_search_item" @click="setOk">{{ $t('adminSeAllUser.OK') }}</div> <div class="admin_search_item" @click="setOk">{{ $t('admin.OK') }}</div>
</div> </div>
</a-modal> </a-modal>
<div class="mark_loading" v-show="loadingShow"> <div class="mark_loading" v-show="loadingShow">
@@ -212,7 +212,7 @@ export default defineComponent({
if (operations.title?.value == "Add") { if (operations.title?.value == "Add") {
data = setAddData(); data = setAddData();
if (!isEmail(data.userEmail)) { if (!isEmail(data.userEmail)) {
message.info(t('adminSeAllUser.jsContent1')); message.info(t('admin.jsContent1'));
return; return;
} }
if ( if (
@@ -220,7 +220,7 @@ export default defineComponent({
!data.userEmail || !data.userEmail ||
!data.userPassword !data.userPassword
) )
return message.warning(t('adminSeAllUser.jsContent2')); return message.warning(t('admin.jsContent2'));
Https.axiosPost(Https.httpUrls.addOrUpdateSubAccount, data).then( Https.axiosPost(Https.httpUrls.addOrUpdateSubAccount, data).then(
(rv) => { (rv) => {
if (rv) { if (rv) {

View File

@@ -3,7 +3,7 @@
<div class="admin_table_search"> <div class="admin_table_search">
<div class="admin_state"> <div class="admin_state">
<div class="admin_state_item"> <div class="admin_state_item">
<span>{{ $t('adminSeAllUser.CreateTime') }}:</span> <span>{{ $t('admin.CreateTime') }}:</span>
<a-range-picker <a-range-picker
style="width: 230px" style="width: 230px"
class="range_picker" class="range_picker"
@@ -45,14 +45,14 @@
/> />
</div> --> </div> -->
<div class="admin_state_item"> <div class="admin_state_item">
<span>{{ $t('adminSeAllUser.UserName') }}:</span> <span>{{ $t('admin.UserName') }}:</span>
<a-select <a-select
v-model:value="ids" v-model:value="ids"
mode="multiple" mode="multiple"
style="width: 230px" style="width: 230px"
:field-names="{ label: 'label', value: 'label' }" :field-names="{ label: 'label', value: 'label' }"
:filter-option="filterOption" :filter-option="filterOption"
placeholder="Select Item..." :placeholder="$t('admin.selectUserName')"
max-tag-count="responsive" max-tag-count="responsive"
:options="allUserList" :options="allUserList"
@keydown.enter="gettrialList" @keydown.enter="gettrialList"
@@ -74,22 +74,22 @@
</div> </div>
<div class="admin_search"> <div class="admin_search">
<div class="admin_search_item" @click="searchHistoryList"> <div class="admin_search_item" @click="searchHistoryList">
{{ $t('adminSeAllUser.search') }} {{ $t('admin.search') }}
</div> </div>
<div class="admin_search_item" @click="addhHistoryList"> <div class="admin_search_item" @click="addhHistoryList">
{{ $t('adminSeAllUser.add') }} {{ $t('admin.add') }}
</div> </div>
<div class="admin_search_item" style="width: auto;padding: 0 2rem;" @click="downloadTemplate"> <div class="admin_search_item" style="width: auto;padding: 0 2rem;" @click="downloadTemplate">
{{ $t('adminSeAllUser.DownloadTemplate') }} {{ $t('admin.DownloadTemplate') }}
</div> </div>
<div class="admin_search_item" style="width: auto;padding: 0 2rem;" @click="uploadTemplate"> <div class="admin_search_item" style="width: auto;padding: 0 2rem;" @click="uploadTemplate">
{{ $t('adminSeAllUser.UploadTemplate') }} {{ $t('admin.UploadTemplate') }}
</div> </div>
<div class="admin_search_item" style="width: auto;padding: 0 2rem;" @click="ExportAccountData"> <div class="admin_search_item" style="width: auto;padding: 0 2rem;" @click="ExportAccountData">
{{ $t('adminSeAllUser.ExportAccountData') }} {{ $t('admin.ExportAccountData') }}
</div> </div>
<div class="admin_search_item" style="width: auto;padding: 0 2rem;" @click="deleteList"> <div class="admin_search_item" style="width: auto;padding: 0 2rem;" @click="deleteList">
{{ $t('adminSeAllUser.Delete') }} {{ $t('admin.Delete') }}
</div> </div>
</div> </div>
<div class="admin_state_list"> <div class="admin_state_list">
@@ -97,19 +97,19 @@
class="admin_state_list_item" class="admin_state_list_item"
@click="lastGeTrialList('year')" @click="lastGeTrialList('year')"
> >
{{ $t('adminSeAllUser.NearlyAYear') }} {{ $t('admin.NearlyAYear') }}
</div> </div>
<div <div
class="admin_state_list_item" class="admin_state_list_item"
@click="lastGeTrialList('month')" @click="lastGeTrialList('month')"
> >
{{ $t('adminSeAllUser.LastMonth') }} {{ $t('admin.LastMonth') }}
</div> </div>
<div <div
class="admin_state_list_item" class="admin_state_list_item"
@click="lastGeTrialList('week')" @click="lastGeTrialList('week')"
> >
{{ $t('adminSeAllUser.LastWeek') }} {{ $t('admin.LastWeek') }}
</div> </div>
</div> </div>
</div> </div>
@@ -140,13 +140,13 @@
@click="setAagree(record)" @click="setAagree(record)"
style="margin-right: 2rem;" style="margin-right: 2rem;"
> >
{{ $t('adminSeAllUser.Edit') }} {{ $t('admin.Edit') }}
</div> </div>
<div <div
class="operate_item" class="operate_item"
@click="deleteAagree(record)" @click="deleteAagree(record)"
> >
{{ $t('adminSeAllUser.Delete') }} {{ $t('admin.Delete') }}
</div> </div>
<!-- <div <!-- <div
class="operate_item" class="operate_item"
@@ -222,7 +222,7 @@ export default defineComponent({
const columns: any = computed(() => { const columns: any = computed(() => {
return [ return [
{ {
title: t("adminSeAllUser.UserId"), title: t("admin.UserId"),
align: "center", align: "center",
dataIndex: "id", dataIndex: "id",
key: "id", key: "id",
@@ -231,7 +231,7 @@ export default defineComponent({
sorter: true, sorter: true,
}, },
{ {
title: t("adminSeAllUser.Email"), title: t("admin.Email"),
align: "center", align: "center",
dataIndex: "userEmail", dataIndex: "userEmail",
key: "userEmail", key: "userEmail",
@@ -239,7 +239,7 @@ export default defineComponent({
ellipsis:true ellipsis:true
}, },
{ {
title: t("adminSeAllUser.UserName"), title: t("admin.UserName"),
align: "center", align: "center",
dataIndex: "userName", dataIndex: "userName",
key: "userName", key: "userName",
@@ -254,15 +254,18 @@ export default defineComponent({
// }, // },
}, },
{ {
title: t("adminSeAllUser.language"), title: t("admin.language"),
align: "center", align: "center",
dataIndex: "language", dataIndex: "language",
key: "language", key: "language",
width:100, width:100,
ellipsis:true, ellipsis:true,
customRender: (record: any) => {
return t(`admin.${record.text}`);
},
}, },
{ {
title: t("adminSeAllUser.CreateDate"), title: t("admin.CreateDate"),
align: "center", align: "center",
dataIndex: "createDate", dataIndex: "createDate",
key: "createDate", key: "createDate",
@@ -270,7 +273,7 @@ export default defineComponent({
sorter: true, sorter: true,
}, },
{ {
title: t("adminSeAllUser.Credits"), title: t("admin.Credits"),
align: "center", align: "center",
// width: 150, // width: 150,
// minWidth: 100, // minWidth: 100,
@@ -282,7 +285,7 @@ export default defineComponent({
sorter: true, sorter: true,
}, },
{ {
title: t("adminSeAllUser.CreditsUsage"), title: t("admin.CreditsUsage"),
align: "center", align: "center",
dataIndex: "creditsUsage", dataIndex: "creditsUsage",
key: "creditsUsage", key: "creditsUsage",
@@ -290,7 +293,7 @@ export default defineComponent({
sorter: true, sorter: true,
}, },
{ {
title: t("adminSeAllUser.CreditsUsageLimit"), title: t("admin.CreditsUsageLimit"),
align: "center", align: "center",
dataIndex: "creditsUsageLimit", dataIndex: "creditsUsageLimit",
key: "creditsUsageLimit", key: "creditsUsageLimit",
@@ -298,7 +301,7 @@ export default defineComponent({
sorter: true, sorter: true,
}, },
{ {
title: t("adminSeAllUser.Operations"), title: t("admin.Operations"),
key: "operation", key: "operation",
width:120, width:120,
align: "center", align: "center",
@@ -414,11 +417,11 @@ export default defineComponent({
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0; return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0;
}; };
let addhHistoryList = () => { let addhHistoryList = () => {
allUserPoerationsVue.value.init({value:'Add',label:t('adminSeAllUser.add')},'') allUserPoerationsVue.value.init({value:'Add',label:t('admin.add')},'')
}; };
let allUserPoerationsVue = ref() let allUserPoerationsVue = ref()
let setAagree = (data:any) =>{ let setAagree = (data:any) =>{
allUserPoerationsVue.value.init({value:'Edit',label:t('adminSeAllUser.Edit')},data) allUserPoerationsVue.value.init({value:'Edit',label:t('admin.Edit')},data)
} }
const downloadTemplate = ()=>{ const downloadTemplate = ()=>{
Https.axiosGet(Https.httpUrls.subAccountImportExcelDownload,{responseType: 'blob',env:{binary:true}}).then((rv:any)=>{ Https.axiosGet(Https.httpUrls.subAccountImportExcelDownload,{responseType: 'blob',env:{binary:true}}).then((rv:any)=>{
@@ -451,7 +454,6 @@ export default defineComponent({
fileInput.onchange = (event:any) => { fileInput.onchange = (event:any) => {
const file = event.target.files[0]; // 获取选择的文件 const file = event.target.files[0]; // 获取选择的文件
if (file) { if (file) {
console.log('Selected file:', file);
let param = new FormData(); let param = new FormData();
param.append('file',file); param.append('file',file);
let config:any = {headers:{'Content-Type':'multipart/form-data','Accept':'*/*' }} let config:any = {headers:{'Content-Type':'multipart/form-data','Accept':'*/*' }}
@@ -467,7 +469,7 @@ export default defineComponent({
const confirmDelete = ()=>{ const confirmDelete = ()=>{
return new Promise<void>((resolve, reject) => { return new Promise<void>((resolve, reject) => {
Modal.confirm({ Modal.confirm({
title: 'Are you sure you want to delete this item?', title: t('admin.jsDelete'),
icon: createVNode(ExclamationCircleOutlined), icon: createVNode(ExclamationCircleOutlined),
okText: 'Yes', okText: 'Yes',
cancelText: 'No', cancelText: 'No',

View File

@@ -4,7 +4,7 @@
<div class="admin_state"> <div class="admin_state">
<div class="admin_state_item"> <div class="admin_state_item">
<span>{{ $t('adminSeDesignDetail.StartDate') }}:</span> <span>{{ $t('admin.StartDate') }}:</span>
<a-range-picker <a-range-picker
style="width:250px" style="width:250px"
class="range_picker" class="range_picker"
@@ -23,27 +23,27 @@
</a-range-picker> </a-range-picker>
</div> </div>
<div class="admin_state_item"> <div class="admin_state_item">
<span>{{ $t('adminSeDesignDetail.StartTime') }}:</span> <span>{{ $t('admin.StartTime') }}:</span>
<a-time-range-picker style="width:250px" class="range_picker" valueFormat="HH:mm:ss" v-model:value="rangeTimeValue" /> <a-time-range-picker style="width:250px" :placeholder="[$t('admin.startTime'), $t('admin.endTime'),]" class="range_picker" valueFormat="HH:mm:ss" v-model:value="rangeTimeValue" />
</div> </div>
<div class="admin_state_item"> <div class="admin_state_item">
<span>{{ $t('adminSeDesignDetail.Email') }}:</span> <span>{{ $t('admin.Email') }}:</span>
<input <input
v-model="email" v-model="email"
placeholder="Please enter email" :placeholder="$t('admin.enterEmail')"
@keydown.enter="gettrialList" @keydown.enter="gettrialList"
type="text" type="text"
style="width: 250px" style="width: 250px"
/> />
</div> </div>
<div class="admin_state_item"> <div class="admin_state_item">
<span>{{ $t('adminSeDesignDetail.UserName') }}:</span> <span>{{ $t('admin.UserName') }}:</span>
<a-select <a-select
v-model:value="ids" v-model:value="ids"
mode="multiple" mode="multiple"
style="width: 250px" style="width: 250px"
:filter-option="filterOption" :filter-option="filterOption"
placeholder="Select Item..." :placeholder="$t('admin.selectUserName')"
max-tag-count="responsive" max-tag-count="responsive"
:options="allUserList" :options="allUserList"
@keydown.enter="gettrialList" @keydown.enter="gettrialList"
@@ -51,7 +51,7 @@
</div> </div>
</div> </div>
<div class="admin_search"> <div class="admin_search">
<div class="admin_search_item" @click="searchHistoryList">Search</div> <div class="admin_search_item" @click="searchHistoryList">{{ $t('adminSeAllUser.search') }}</div>
</div> </div>
</div> </div>
@@ -92,7 +92,7 @@ export default defineComponent({
const columns: any = computed(() => { const columns: any = computed(() => {
return [ return [
{ {
title: t('adminSeDesignDetail.Email'), title: t('admin.Email'),
align: "center", align: "center",
dataIndex: "userEmail", dataIndex: "userEmail",
key: "userEmail", key: "userEmail",
@@ -100,7 +100,7 @@ export default defineComponent({
fixed: "left", fixed: "left",
}, },
{ {
title: t('adminSeDesignDetail.UserId'), title: t('admin.UserId'),
align: "center", align: "center",
ellipsis: true, ellipsis: true,
dataIndex: "accountId", dataIndex: "accountId",
@@ -108,7 +108,7 @@ export default defineComponent({
width:100, width:100,
}, },
{ {
title: t('adminSeDesignDetail.UserName'), title: t('admin.UserName'),
align: "center", align: "center",
ellipsis: 200, ellipsis: 200,
dataIndex: "userName", dataIndex: "userName",
@@ -123,7 +123,7 @@ export default defineComponent({
// }, // },
}, },
{ {
title: t('adminSeDesignDetail.Frequency'), title: t('admin.Frequency'),
align: "center", align: "center",
ellipsis: true, ellipsis: true,
dataIndex: "designTimes", dataIndex: "designTimes",
@@ -131,7 +131,7 @@ export default defineComponent({
width:100, width:100,
}, },
{ {
title: t('adminSeDesignDetail.CreateTime'), title: t('admin.CreateTime'),
align: "center", align: "center",
ellipsis: true, ellipsis: true,
// width: 150, // width: 150,
@@ -143,7 +143,7 @@ export default defineComponent({
width:200, width:200,
}, },
{ {
title: t('adminSeDesignDetail.Credits'), title: t('admin.Credits'),
align: "center", align: "center",
ellipsis: true, ellipsis: true,
// width: 150, // width: 150,

View File

@@ -0,0 +1,232 @@
<template>
<div class="recentActiveChart admin_page">
<div class="admin_table_search">
<div class="admin_state">
<div class="admin_state_item">
<span>{{ $t('admin.StartTime') }}:</span>
<a-range-picker
style="width:280px"
class="range_picker"
v-model:value="rangePickerValue"
:allowClear="false"
:placeholder="[
$t('HistoryPage.StartDate'),
$t('HistoryPage.EndDate'),
]"
valueFormat="YYYY-MM-DD"
>
<template #suffixIcon>
<span
class="icon iconfont range_picker_icon icon-rili"
></span>
</template>
</a-range-picker>
</div>
<div class="admin_state_item">
<span>{{ $t('admin.UserName') }}:</span>
<a-select
v-model:value="userIdList"
mode="multiple"
style="width: 280px"
:filter-option="filterOption"
:placeholder="$t('admin.selectUserName')"
max-tag-count="responsive"
:options="dataList"
></a-select>
</div>
</div>
<div class="admin_search">
<div class="admin_search_item" @click="searchHistoryList">Search</div>
</div>
<div class="admin_state_list">
<div
class="admin_state_list_item"
@click="lastGeTrialList('year')"
>
{{ $t('admin.NearlyAYear') }}
</div>
<div
class="admin_state_list_item"
@click="lastGeTrialList('month')"
>
{{ $t('admin.LastMonth') }}
</div>
<div
class="admin_state_list_item"
@click="lastGeTrialList('week')"
>
{{ $t('admin.LastWeek') }}
</div>
</div>
</div>
<div class="admin_table_content" ref="pageChartDom">
</div>
</div>
</template>
<script lang="ts">
import { defineComponent, ref, createVNode, computed, reactive, toRefs, onMounted } from "vue";
import { Https } from "@/tool/https";
import { formatTime } from "@/tool/util";
import * as echarts from 'echarts/core';
import { TooltipComponent, LegendComponent } from 'echarts/components';
import { PieChart } from 'echarts/charts';
import { LabelLayout } from 'echarts/features';
import { useStore } from "vuex";
import { CanvasRenderer } from 'echarts/renderers';
export default defineComponent({
components: {
},
setup() {
const store:any = useStore()
let filter:any = reactive({
dataList:computed(()=>{
return store.state.adminPage.allUserList
}),
})
let filterData:any = reactive({
rangePickerValue:[],
userIdList:[]
})
//查询列表
let searchHistoryList = ()=> {
gettrialList();
}
//获取列表
let gettrialList = async () =>{
filter.tableLoading = true
let startDate: any = filterData.rangePickerValue?.[0]
? filterData.rangePickerValue[0]+' '+'00:00:00'
: "";
let endDate: any = filterData.rangePickerValue?.[1]
? filterData.rangePickerValue[1]+' '+'23:59:59'
: "";
let data = {
endTime:endDate,
startTime:startDate,
userIdList:filterData.userIdList.join(','),
}
Https.axiosGet(Https.httpUrls.getActiveUserFunc,{params:data}).then((rv: any) => {
if (rv) {
let data:any = []
rv.names.forEach((item:any,index:number) => {
let obj = {
name : item,
value:rv.values[index],
}
data.push(obj)
});
setEcharts(data)
// this.workspaceItem.position = this.singleTypeList[0].label
}
})
}
let myChart:any
let setEcharts = (data:any) =>{
if (myChart) {
myChart.setOption({
series: [{
data: data
}]
});
}else{
echarts.use([
TooltipComponent,
LegendComponent,
PieChart,
CanvasRenderer,
LabelLayout
]);
var chartDom = pageChartDom.value;
myChart = echarts.init(chartDom);
var option;
option = {
tooltip: {
trigger: 'item'
},
legend: {
top: '5%',
left: 'center'
},
series: [
{
type: 'pie',
radius: ['40%', '70%'],
avoidLabelOverlap: false,
itemStyle: {
borderRadius: 10
},
label: {
show: false,
position: 'center'
},
emphasis: {
label: {
show: true,
fontSize: 30,
fontWeight: 'bold'
},
},
labelLine: {
show: false
},
stillShowZeroSum:true,
data: data
}
]
};
option && myChart.setOption(option);
}
}
let lastGeTrialList = (str:string)=>{
let currentDate = new Date();
let currentTimestamp = Math.floor(currentDate.getTime() / 1000);
// 计算30天前的时间戳
let thirtyDaysAgoTimestamp
if(str == 'year'){
thirtyDaysAgoTimestamp = currentTimestamp - (360 * 24 * 60 * 60);
}else if(str == 'month'){
thirtyDaysAgoTimestamp = currentTimestamp - (30 * 24 * 60 * 60);
}else if(str == 'week'){
thirtyDaysAgoTimestamp = currentTimestamp - (7 * 24 * 60 * 60);
}
filterData.rangePickerValue = [formatTime(thirtyDaysAgoTimestamp,'YYYY-MM-DD'),formatTime(currentTimestamp,'YYYY-MM-DD')]
gettrialList();
}
let pageChartDom:any = ref()
let filterOption = (input:any, option:any)=>{
// 使用 option.label 进行搜索
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0;
}
onMounted(()=>{
lastGeTrialList('month')
})
return {
...toRefs(filter),
...toRefs(filterData),
searchHistoryList,
gettrialList,
pageChartDom,
lastGeTrialList,
filterOption,
};
},
data() {
return {
};
},
methods: {
},
});
</script>

View File

@@ -137,14 +137,14 @@ export default defineComponent({
return str; return str;
}, },
}, },
// { {
// title: 'Frequency', title: 'Frequency',
// align: "center", align: "center",
// ellipsis: true, ellipsis: true,
// dataIndex: "designTimes", dataIndex: "designTimes",
// key: "designTimes", key: "designTimes",
// width:100, width:100,
// }, },
{ {
title: 'Country', title: 'Country',
align: "center", align: "center",
@@ -177,14 +177,14 @@ export default defineComponent({
key: "givenName", key: "givenName",
width:100, width:100,
}, },
// { {
// title: 'Create Time', title: 'Create Time',
// align: "center", align: "center",
// ellipsis: true, ellipsis: true,
// dataIndex: "createTime", dataIndex: "createTime",
// key: "createTime", key: "createTime",
// width:200, width:200,
// }, },
{ {
title: 'Credits', title: 'Credits',
align: "center", align: "center",

View File

@@ -48,7 +48,6 @@ const fillColorRef = ref(null);
commandManager.setChangeCallback((info) => { commandManager.setChangeCallback((info) => {
canUndo.value = info.canUndo; canUndo.value = info.canUndo;
canRedo.value = info.canRedo; canRedo.value = info.canRedo;
emit("undo-redo-status-changed", { emit("undo-redo-status-changed", {
canUndo: canUndo.value, canUndo: canUndo.value,
canRedo: canRedo.value, canRedo: canRedo.value,

View File

@@ -796,12 +796,20 @@ function handleChildLayersReorder(reorderData) {
} }
// 处理画布变更事件 // 处理画布变更事件
const changeCanvas = (command) => { const changeCanvas = async (command) => {
const commandData = { const commandData = {
isChange: command.canUndo || command.canRedo, // 是否有可撤销或可重做的操作 isChange: command.canUndo || command.canRedo, // 是否有可撤销或可重做的操作
...command, // 传递完整的命令数据 ...command, // 传递完整的命令数据
}; };
emit("changeCanvas", commandData); emit("changeCanvas", commandData);
if(command.canUndo || command.canRedo){
setTimeout(async ()=>{
const imageData = await canvasManager.exportImage({
restoreOpacityInRedGreen: true, // 恢复红绿图模式下的透明度
});
emit("trigger-red-green-mouseup", imageData);
},100)
}
}; };
// 提供外部ref实例方法 // 提供外部ref实例方法

View File

@@ -210,8 +210,10 @@ export default defineComponent({
setRevocation() setRevocation()
detailData.loadingShow = false detailData.loadingShow = false
if(rv.singleOverall == "single"){
store.commit('DesignDetail/setDesignColthes',rv.clothes[0].id)
}
store.commit('DesignDetail/setDesignColthes',rv.clothes[0].id)
} }
).catch(rv=>{ ).catch(rv=>{
@@ -455,6 +457,7 @@ export default defineComponent({
canvasReload, canvasReload,
} }
}, },
provide() { provide() {
return { return {
} }

View File

@@ -165,8 +165,12 @@ export default defineComponent({
item.gradient = colorData.selectDetail.color.gradient item.gradient = colorData.selectDetail.color.gradient
} }
colorData.selectColor = item colorData.selectColor = item
colorData.colorList.index = pushIndex + 1 let num = pushIndex
colorData.colorList.list[newVal][pushIndex + 1] = item if(colorData.allBoardData.colorBoards.length > 0){
num += 1
}
colorData.colorList.index = num
colorData.colorList.list[newVal][num] = item
} }
// for (let index = 0; index < 9; index++) { // for (let index = 0; index < 9; index++) {

View File

@@ -4,7 +4,7 @@
<div class="back" v-show="isEditPattern.value"> <div class="back" v-show="isEditPattern.value">
<i class="fi fi-br-angle-left" @click="setBack"></i> <i class="fi fi-br-angle-left" @click="setBack"></i>
</div> </div>
<modelNav @canvasReload="()=>$emit('canvasReload')" @addSketch="()=>$emit('addSketch')" @deleteItem="deleteItem"></modelNav> <modelNav @canvasReload="()=>$emit('canvasReload')" @addSketch="()=>$emit('addSketch')" @deleteItem="deleteItem" :isEditPattern="isEditPattern.value"></modelNav>
</div> </div>
<div class="modelindex_right"> <div class="modelindex_right">
<div class="detail_btn"> <div class="detail_btn">

View File

@@ -11,7 +11,7 @@
<img :src="item.path" alt=""> <img :src="item.path" alt="">
</div> </div>
</div> </div>
<div v-show="singleOveral.value == 'overall'" v-if="(currentDetailType == 'sketch' || currentDetailType == '') && designDetail.clothes.length < 5 " :class="{active:!selectDetail?.id && currentDetailType == 'sketch'}" class="modelNav_item add" @click="addSketch"> <div v-show="singleOveral.value == 'overall'" v-if="(currentDetailType == 'sketch' || currentDetailType == '') && designDetail.clothes.length < 5 && !isEditPattern.value" :class="{active:!selectDetail?.id && currentDetailType == 'sketch'}" class="modelNav_item add" @click="addSketch">
+ +
</div> </div>
</div> </div>
@@ -31,6 +31,12 @@ export default defineComponent({
position, position,
}, },
emits:['canvasReload','addSketch','deleteItem'], emits:['canvasReload','addSketch','deleteItem'],
props:{
isEditPattern:{
type:Boolean,
default:false,
},
},
setup(props,{emit}) { setup(props,{emit}) {
const store = useStore(); const store = useStore();
const {t} = useI18n() const {t} = useI18n()

View File

@@ -18,11 +18,12 @@
</div> </div>
</div> </div>
<div class="designOpenrtion_imgMask" v-if="!frontBack?.body?.path"> <div class="designOpenrtion_imgMask" v-if="!frontBack?.body?.path">
<img :src="designDetail.currentFullBodyView || selectDetail.undividedLayer" style="object-fit: cover;" alt=""> <img :src="designDetail?.undividedLayer || selectDetail?.path" style="object-fit: cover;" alt="">
<!-- <img @load="setSelectSketch()" :src="designDetail?.currentFullBodyView || selectDetail?.undividedLayer" style="object-fit: cover;" alt=""> -->
</div> </div>
</div> </div>
<div class="molepositon" :class="{active:imgDesignImg}"> <div class="molepositon imgDesignImg" :class="{active:imgDesignImg}">
<div class="designOpenrtion_imgMask"> <div class="designOpenrtion_imgMask" style="width: 100%;height: 100%;">
<div class="detail_modal_item_front"> <div class="detail_modal_item_front">
<img :src="designDetail.designItemUrl" alt="" style="object-fit: cover;"> <img :src="designDetail.designItemUrl" alt="" style="object-fit: cover;">
</div> </div>
@@ -55,6 +56,7 @@ export default defineComponent({
const detailData = reactive({ const detailData = reactive({
frontBack:computed(()=>store.state.DesignDetail.frontBack), frontBack:computed(()=>store.state.DesignDetail.frontBack),
designDetail:computed(()=>store.state.DesignDetail.designDetail), designDetail:computed(()=>store.state.DesignDetail.designDetail),
selectDetail:computed(()=>store.state.DesignDetail.selectDetail),
isEditPattern:inject('isEditPattern') as any, isEditPattern:inject('isEditPattern') as any,
singleOveral:inject('singleOveral') as any, singleOveral:inject('singleOveral') as any,
detailBody:null as any, detailBody:null as any,
@@ -67,7 +69,7 @@ export default defineComponent({
direction:'', direction:'',
}) })
watch(()=>selectItem.selectDetail,(newValue,oldValue)=>{ watch(()=>selectItem.selectDetail,(newValue,oldValue)=>{
if(newValue.id == oldValue?.id)return if(!newValue && newValue?.id == oldValue?.id)return
selectItem.imgDomIndex = detailData.frontBack.front.findIndex((item:any)=>item.id == newValue.id) selectItem.imgDomIndex = detailData.frontBack.front.findIndex((item:any)=>item.id == newValue.id)
},{immediate: true,}) },{immediate: true,})
watch(()=>detailData.frontBack?.body?.path,(newVal)=>{ watch(()=>detailData.frontBack?.body?.path,(newVal)=>{
@@ -80,6 +82,9 @@ export default defineComponent({
let dom = document.querySelector('.molepositon .perview_img') as any let dom = document.querySelector('.molepositon .perview_img') as any
if(!detailData.frontBack?.body?.path || !dom)return if(!detailData.frontBack?.body?.path || !dom)return
img.onload = () => { img.onload = () => {
if(!detailData.selectDetail?.id){
store.commit('DesignDetail/setDesignColthes',detailData.designDetail.clothes[0].id)
}
// resolve(img) // resolve(img)
sacle = dom.parentNode.offsetWidth / img.width sacle = dom.parentNode.offsetWidth / img.width
detailData.frontBack.front.forEach((item:any,index:number) => { detailData.frontBack.front.forEach((item:any,index:number) => {
@@ -462,14 +467,28 @@ export default defineComponent({
position: relative; position: relative;
display: none; display: none;
&.active{ &.active{
display: block; display: flex;
z-index: 2; z-index: 2;
align-items: center;
justify-content: center;
}
&.imgDesignImg{
> .designOpenrtion_imgMask{
.detail_modal_item_front{
display: flex;
align-items: center;
justify-content: center;
img{
height: auto;
}
}
}
} }
> .designOpenrtion_imgMask{ > .designOpenrtion_imgMask{
width: auto; width: auto;
height: auto; height: auto;
position: relative; position: relative;
height: 100%; // height: 100%;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
@@ -491,9 +510,8 @@ export default defineComponent({
width: 100%; width: 100%;
img{ img{
width: 100%; width: 100%;
// height: ;
height: 100%; height: 100%;
// width: 100%;
// height: auto;
float: left; float: left;
user-select:none; user-select:none;
-webkit-user-drag: none; -webkit-user-drag: none;

View File

@@ -59,12 +59,12 @@
</div> </div>
</div> </div>
</div> </div>
<div class="img_block_item mannquin" v-show="probjects.type != 'singleProductDesign'"> <div class="img_block_item mannquin" v-show="selectProbject.type != 'singleProductDesign'">
<div class="title"> <div class="title">
<div>{{$t('collectionModal.Mannequin')}}</div> <div>{{$t('collectionModal.Mannequin')}}</div>
<i class="fi fi-rr-edit" @click="openCollection('mannequin')"></i> <i class="fi fi-rr-edit" @click="openCollection('mannequin')"></i>
</div> </div>
<div class="mannquin_img_item" v-for="(model) in probjects?.model" :key="model"> <div class="mannquin_img_item" v-for="(model) in selectProbject?.model" :key="model">
<div class="all_img_item_block"> <div class="all_img_item_block">
<img class="all_img_content cover_img" :src="model?.url"> <img class="all_img_content cover_img" :src="model?.url">
</div> </div>
@@ -89,7 +89,6 @@
</div> </div>
</div> </div>
</div> </div>
<div class="img_block_item"> <div class="img_block_item">
<div class="lager_img_item" v-for="(marketing) in allBoardData.marketingSketchFiles" :key="marketing"> <div class="lager_img_item" v-for="(marketing) in allBoardData.marketingSketchFiles" :key="marketing">
<div class="all_img_item_block"> <div class="all_img_item_block">
@@ -107,6 +106,9 @@ import { useStore } from "vuex";
export default defineComponent({ export default defineComponent({
components:{MoodTemplate}, components:{MoodTemplate},
emits:['openCollection'], emits:['openCollection'],
props:{
},
setup(props, { emit }) { setup(props, { emit }) {
const store:any = useStore(); const store:any = useStore();
let sketch:any = ref([[],[],[]]) let sketch:any = ref([[],[],[]])
@@ -114,15 +116,18 @@ export default defineComponent({
return store.state.UploadFilesModule.showSketchboard}) return store.state.UploadFilesModule.showSketchboard})
let allBoardData:any = computed(()=>{ let allBoardData:any = computed(()=>{
return store.state.UploadFilesModule.allBoardData}) return store.state.UploadFilesModule.allBoardData})
let probjects:any = computed(()=>{ // let probjects:any = computed(()=>{
return store.state.Workspace.probjects}) // return store.state.Workspace.probjects})
const selectProbject = computed(()=>{
return store.state.Workspace.probjects
})
const openCollection = (str:any)=>{ const openCollection = (str:any)=>{
emit('openCollection',str) emit('openCollection',str)
} }
return { return {
store, store,
allBoardData, allBoardData,
probjects, selectProbject,
sketch, sketch,
sketchList, sketchList,
openCollection, openCollection,

View File

@@ -203,7 +203,7 @@ export default defineComponent({
registerModel:computed(()=>{ registerModel:computed(()=>{
return store.state.UserHabit.bindEmail.isBindEmail return store.state.UserHabit.bindEmail.isBindEmail
}), }),
// registerModel:false, // registerModel:true,
bindType:computed(()=>{ bindType:computed(()=>{
return store.state.UserHabit.bindEmail.type return store.state.UserHabit.bindEmail.type
}), }),

View File

@@ -57,9 +57,23 @@
</div> </div>
<div class="clearSlogan_center_btn_item"> <div class="clearSlogan_center_btn_item">
<div>{{ $t('createSlogan.FontFamily') }}</div> <div>{{ $t('createSlogan.FontFamily') }}</div>
<select v-model="fontFamily" :style="{'font-family':fontFamily}"> <generalMenu :dataList="textFontFamilyList"
<option v-for="item in textFontFamilyList" :style="{'font-family':item.value}" :value="item.value">{{item.name}}</option> :style="{
</select> 'font-weight': '600',
'padding': '0 1rem',
'height': '4rem',
}"
selectWidth="12rem"
selectSize="1.2rem"
:isFontType="true"
@setprintModel="(item)=>{fontFamily = item.value;}" :item="textFontFamilyList.filter((item)=>item.value === fontFamily)[0]"></generalMenu>
<!-- <select v-model="fontFamily" :style="{'font-family':fontFamily}">
<option v-for="item in textFontFamilyList" :value="item.value">
<div :style="{'font-family':item.value}">{{item.name}}</div>
{{item.name}}
</option>
</select> -->
</div> </div>
</div> </div>
<div class="clearSlogan_center_btn clearSlogan_center_item"> <div class="clearSlogan_center_btn clearSlogan_center_item">
@@ -93,11 +107,13 @@ import allOrder from "@/component/Pay/allOrder.vue";
import creditsDetail from "@/component/Pay/creditsDetail.vue"; import creditsDetail from "@/component/Pay/creditsDetail.vue";
import { JSSetRemoveImage } from "@/tool/canvasDrawing"; import { JSSetRemoveImage } from "@/tool/canvasDrawing";
import { useI18n } from "vue-i18n"; import { useI18n } from "vue-i18n";
import generalMenu from "@/component/HomePage/generalMenu.vue";
export default defineComponent({ export default defineComponent({
components: { components: {
creditsDetail, creditsDetail,
allOrder, allOrder,
generalMenu,
}, },
emits: ['setSloganData'], emits: ['setSloganData'],
setup(props,{emit}) { setup(props,{emit}) {

View File

@@ -1,5 +1,5 @@
<template> <template>
<div class="generalMenu_printModel"> <div class="generalMenu_printModel" ref="containerRef">
<div @click.stop="openPrintModel" :class="driverClass.class1" :style="{...$props.style_,'width':selectWidth}"> <div @click.stop="openPrintModel" :class="driverClass.class1" :style="{...$props.style_,'width':selectWidth}">
<a-popover v-if="isCanvas"> <a-popover v-if="isCanvas">
<template #content> <template #content>
@@ -10,46 +10,34 @@
<span v-else>{{ item?.name }}</span> <span v-else>{{ item?.name }}</span>
</a-popover> </a-popover>
<div v-else> <div v-else>
<span v-if="item?.label">{{ item?.label }}</span> <span v-if="item?.label" :style="{'font-family': isFontType?item?.value:'',fontSize:selectSize}">{{ item?.label }}</span>
<span v-else>{{ item?.name }}</span> <span v-else :style="{'font-family': isFontType?item?.value:'',fontSize:selectSize}">{{ item?.name }}</span>
</div> </div>
<div class="icon iconfont icon-xiala" :class="{active:openClick}"></div> <div class="icon iconfont icon-xiala" :class="{active:openClick}"></div>
</div> </div>
<ul :class="driverClass.class2" v-show="openClick" :style="{'width':selectWidth,...ulStyle}"> <ul
:class="driverClass.class2"
v-show="openClick"
:style="{
'width': selectWidth,
...ulStyle,
...dropdownPositionStyle
}"
ref="dropdownRef"
>
<div> <div>
<li v-for="listItem,index in dataList" :class="{active:deleteItem == index,hover:((item?.label && item?.label == listItem?.label) || (item?.name && item?.name == listItem?.name))}" class="printModel_item" @click="setprintModel(listItem,index)"> <li v-for="listItem,index in dataList" :class="{active:deleteItem == index,hover:((item?.label && item?.label == listItem?.label) || (item?.name && item?.name == listItem?.name))}" class="printModel_item" @click="setprintModel(listItem,index)">
<a-popover placement="right" v-if="isCanvas"> <a-popover placement="right" v-if="isCanvas">
<template #content> <template #content>
<!-- <span v-if="item.img != -1 && index == dataList?.length -1 " class="icon iconfont icon-shanchu" style="cursor: pointer; position: absolute; right: 10px; top: 10px;" @click.stop="deleteFile(item)"></span> -->
<img v-if="listItem.img != -1" style="width: 10rem;height: 10rem;object-fit: contain;" :src="item.img" alt=""> <img v-if="listItem.img != -1" style="width: 10rem;height: 10rem;object-fit: contain;" :src="item.img" alt="">
<!-- <div v-else-if="item.img == -1" class="generalMenu_printModel_upload ">
<i class="fi fi-br-upload input_border" style="width: 8rem; height: 8rem;padding: 0;" :title="$t('Generate.uploadTitle')">
<a-upload
style="height: 100%;"
class="search_upImg"
:capture="null"
:action="uploadUrl + '/api/element/upload'"
list-type="picture-card"
:data="{
...upload,
}"
:maxCount='1'
:headers="{ Authorization: token }"
accept=".jpg,.png,.jpeg,.bmp"
@change="(file) => fileUploadChange(file)"
>
</a-upload>
</i>
</div> -->
<span style="text-align: center;">{{ $t('Generate.referenceImage') }}</span> <span style="text-align: center;">{{ $t('Generate.referenceImage') }}</span>
</template> </template>
<span v-if="listItem?.label">{{ listItem?.label }}</span> <span v-if="listItem?.label">{{ listItem?.label }}</span>
<span v-else>{{ listItem?.name }}</span> <span v-else>{{ listItem?.name }}</span>
</a-popover> </a-popover>
<div v-else> <div v-else>
<span v-if="listItem?.label">{{ listItem?.label }}</span> <span v-if="listItem?.label" :style="{'font-family': isFontType?listItem?.value:''}">{{ listItem?.label }}</span>
<span v-else>{{ listItem?.name }}</span> <span v-else :style="{'font-family': isFontType?listItem?.value:''}">{{ listItem?.name }}</span>
</div> </div>
</li> </li>
</div> </div>
@@ -58,7 +46,7 @@
</template> </template>
<script lang="ts"> <script lang="ts">
import { defineComponent,ref ,nextTick} from "vue"; import { defineComponent, ref, nextTick, onMounted, onUnmounted, computed } from "vue";
import { useStore } from "vuex"; import { useStore } from "vuex";
import { Https } from "@/tool/https"; import { Https } from "@/tool/https";
import { openGuide,driverObj__ } from "@/tool/guide"; import { openGuide,driverObj__ } from "@/tool/guide";
@@ -81,6 +69,14 @@ import { message, Upload, Modal } from "ant-design-vue";
type:Boolean, type:Boolean,
default:false, default:false,
}, },
isFontType:{
type:Boolean,
default:true,
},
selectSize:{
type:String,
default:'1.8rem'
},
deleteItem:{ deleteItem:{
type:Number, type:Number,
default:-1 default:-1
@@ -106,16 +102,81 @@ import { message, Upload, Modal } from "ant-design-vue";
setup(props:any,{emit}){ setup(props:any,{emit}){
let selectIndex = ref(0) let selectIndex = ref(0)
let openClick = ref(false) let openClick = ref(false)
let containerRef = ref<HTMLElement | null>(null)
let dropdownRef = ref<HTMLElement | null>(null)
let dropdownPositionStyle = ref({})
let store = useStore(); let store = useStore();
// 计算元素到屏幕底部的距离
const getDistanceToBottom = (element: HTMLElement) => {
const rect = element.getBoundingClientRect()
return window.innerHeight - rect.bottom
}
// 计算元素到屏幕顶部的距离
const getDistanceToTop = (element: HTMLElement) => {
const rect = element.getBoundingClientRect()
return rect.top
}
// 智能计算下拉菜单位置
const calculateDropdownPosition = () => {
if (!containerRef.value || !dropdownRef.value) return {}
const trigger = containerRef.value
const dropdown = dropdownRef.value
const distanceToBottom = getDistanceToBottom(trigger)
const distanceToTop = getDistanceToTop(trigger)
const dropdownHeight = dropdown.offsetHeight || 200 // 默认高度
// 如果下方空间足够,正常向下展开
if (distanceToBottom >= dropdownHeight) {
return {
top: '100%',
bottom: 'auto',
maxHeight: 'none',
transformOrigin: 'top center'
}
}
// 如果下方空间不足但上方空间足够,向上展开
else if (distanceToTop >= dropdownHeight) {
return {
top: 'auto',
bottom: '100%',
maxHeight: 'none',
transformOrigin: 'bottom center'
}
}
// 如果上下空间都不足,向上展开并限制高度
else {
return {
top: 'auto',
bottom: '100%',
maxHeight: `${distanceToTop - 20}px`, // 留出一些边距
overflowY: 'auto',
transformOrigin: 'bottom center'
}
}
}
// 调整下拉菜单位置
const adjustDropdownPosition = () => {
dropdownPositionStyle.value = calculateDropdownPosition()
}
let openPrintModel = ()=>{ let openPrintModel = ()=>{
document.addEventListener('click',removePrintModel) document.addEventListener('click', removePrintModel)
window.addEventListener('resize', handleResize)
openClick.value = true openClick.value = true
nextTick().then(()=>{ nextTick().then(()=>{
adjustDropdownPosition() // 打开时计算位置
if(props.driver__.driver){ if(props.driver__.driver){
driverObj__.moveNext() driverObj__.moveNext()
} }
}) })
} }
let setprintModel = (item:any,index:any)=>{ let setprintModel = (item:any,index:any)=>{
if(props.deleteItem == index) return if(props.deleteItem == index) return
if(item.img == -1) return if(item.img == -1) return
@@ -128,10 +189,37 @@ import { message, Upload, Modal } from "ant-design-vue";
}) })
emit('setprintModel',item) emit('setprintModel',item)
} }
let removePrintModel = ()=>{ let removePrintModel = ()=>{
openClick.value = false openClick.value = false
document.removeEventListener('click',removePrintModel) document.removeEventListener('click', removePrintModel)
window.removeEventListener('resize', handleResize)
} }
// 窗口 resize 处理
const handleResize = () => {
if (openClick.value) {
adjustDropdownPosition()
}
}
// 滚动处理
const handleScroll = () => {
if (openClick.value) {
adjustDropdownPosition()
}
}
onMounted(() => {
window.addEventListener('scroll', handleScroll, true)
})
onUnmounted(() => {
window.removeEventListener('scroll', handleScroll, true)
document.removeEventListener('click', removePrintModel)
window.removeEventListener('resize', handleResize)
})
let fileUploadChange = (data: any)=>{ let fileUploadChange = (data: any)=>{
let file = data.file; let file = data.file;
let bor = true let bor = true
@@ -148,23 +236,19 @@ import { message, Upload, Modal } from "ant-design-vue";
}else{ }else{
bor = false bor = false
} }
} else if (file.status === "error") { } else if (file.status === "error") {
bor = false bor = false
} }
if(!bor){ if(!bor){
// let res:any = JSON.parse(file.xhr.response); // 错误处理
// props.dataList.forEach((item:any)=>{
// if(item.img == -1){
// }
// })
// message.warning(res.errMsg);
} }
} }
let deleteFile = (item:any)=>{ let deleteFile = (item:any)=>{
item.img = -1 item.img = -1
emit('setprintModel',props.dataList[0]) emit('setprintModel',props.dataList[0])
} }
return { return {
selectIndex, selectIndex,
openClick, openClick,
@@ -173,8 +257,10 @@ import { message, Upload, Modal } from "ant-design-vue";
openPrintModel, openPrintModel,
fileUploadChange, fileUploadChange,
deleteFile, deleteFile,
containerRef,
dropdownRef,
dropdownPositionStyle
} }
}, },
data(prop) { data(prop) {
return { return {
@@ -199,6 +285,7 @@ import { message, Upload, Modal } from "ant-design-vue";
} }
}); });
</script> </script>
<style lang="less"> <style lang="less">
.ant-popover-inner-content{ .ant-popover-inner-content{
display: flex; display: flex;
@@ -206,11 +293,14 @@ import { message, Upload, Modal } from "ant-design-vue";
align-items: center; align-items: center;
} }
</style> </style>
<style lang="less"> <style lang="less">
//衣服类型下拉菜单 //衣服类型下拉菜单
.generalMenu_printModel{ .generalMenu_printModel{
position: relative;
margin-right: 2rem; margin-right: 2rem;
height: 5rem; height: 5rem;
.icon-xiala{ .icon-xiala{
margin-left: auto; margin-left: auto;
transition: all .3s; transition: all .3s;
@@ -218,8 +308,8 @@ import { message, Upload, Modal } from "ant-design-vue";
transform: rotate(180deg); transform: rotate(180deg);
} }
} }
>div{ >div{
// display: flex;
display: block; display: block;
width: 20rem; width: 20rem;
border-radius: 1rem; border-radius: 1rem;
@@ -235,49 +325,62 @@ import { message, Upload, Modal } from "ant-design-vue";
box-sizing: border-box; box-sizing: border-box;
align-items: center; align-items: center;
background: #fff; background: #fff;
> div{
display: flex;
align-items: center;
}
> span{ > span{
white-space: nowrap; white-space: nowrap;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
} }
>i{ >i{
justify-content: center; justify-content: center;
position: relative; position: relative;
} }
} }
ul{ ul{
position: absolute; position: absolute;
left: 0;
width: 20rem; width: 20rem;
margin-top: calc(.3rem*1.2); margin-top: 0.36rem;
z-index: 10; z-index: 1000;
overflow: hidden; overflow: hidden;
border-radius: calc(1rem*1.2); border-radius: 1.2rem;
background: #fff;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
transition: all 0.3s ease;
> div{ > div{
overflow-y: auto; overflow-y: auto;
max-height: 300px;
height: 100%;
} }
li{ li{
// background: rgba(0,0,0,.2);
background: #fff; background: #fff;
line-height: 2; line-height: 2;
cursor: pointer; cursor: pointer;
white-space: nowrap; white-space: nowrap;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
padding: 0 calc(1rem*1.2); padding: 0 1.2rem;
transition: all 0.2s ease;
position: relative;
span{ span{
display: block; display: block;
width: 100%; width: 100%;
} }
&.active{ &.active{
// opacity: .4;
pointer-events: none; pointer-events: none;
color: #a4a4a4 !important; color: #a4a4a4 !important;
background: #ebebeb !important; background: #ebebeb !important;
cursor: not-allowed; cursor: not-allowed;
} }
&.hover{ &.hover{
background: #f3f3f6; background: #f3f3f6;
color: #000; color: #000;
@@ -287,14 +390,13 @@ import { message, Upload, Modal } from "ant-design-vue";
position: absolute; position: absolute;
right: 10px; right: 10px;
top: 10px; top: 10px;
z-index: 2;
} }
} }
.printModel_item:hover{ .printModel_item:hover{
// background: rgba(0,0,0,.4);
background: #f3f3f6; background: #f3f3f6;
color: #000; color: #000;
} }
} }
} }
</style> </style>

View File

@@ -89,22 +89,25 @@ export default defineComponent({
newPostedMessage.isShowMark = false newPostedMessage.isShowMark = false
if(rv.content.length == 0) { if(rv.content.length == 0) {
newPostedMessage.isNoData = true newPostedMessage.isNoData = true
return }else{
rv.content.forEach((item:any) => {
item.content = JSON.parse(item.content)
});
newPostedMessage.dataList.push(...rv.content)
} }
newPostedMessage.dataList = rv.content
}).catch(() => { }).catch(() => {
newPostedMessage.isShowMark = false newPostedMessage.isShowMark = false
newPostedMessage.isNoData = true newPostedMessage.isNoData = true
}) })
} }
let openOtherUsers = (item:any)=>{ let openOtherUsers = (item:any)=>{
const routeUrl = router.resolve({ // const routeUrl = router.resolve({
path:'/home/otherUsers', // path:'/home/otherUsers',
query:{ // query:{
userId:item.senderId // userId:item.senderId
} // }
}) // })
window.open(routeUrl.href,'_blank') // window.open(routeUrl.href,'_blank')
} }
let openOtherWork = (item:any)=>{ let openOtherWork = (item:any)=>{
const routeUrl = router.resolve({ const routeUrl = router.resolve({

View File

@@ -1,9 +1,9 @@
<template> <template>
<div class="Container"> <div class="Container">
<!-- 谷歌登录 --> <!-- 谷歌登录 -->
<div class="g_id_signin" id="g_id_signin"> <!-- <div class="g_id_signin" id="g_id_signin">
</div> </div> -->
<div class="icon"> <div class="icon" @click="toGmailLogin" style="opacity: .7;">
<img src="@/assets/images/loginPage/gmailIcon.svg" alt=""> <img src="@/assets/images/loginPage/gmailIcon.svg" alt="">
<span>{{ $props.text }}</span> <span>{{ $props.text }}</span>
</div> </div>
@@ -70,6 +70,9 @@
}); });
} }
} }
const toGmailLogin = ()=>{
message.info(t('account.canNotUtilize'))
}
onBeforeUnmount(()=>{ onBeforeUnmount(()=>{
var existingScript = document.querySelector(`script[src="${data.scriptSrc}"]`); var existingScript = document.querySelector(`script[src="${data.scriptSrc}"]`);
if(existingScript){ if(existingScript){
@@ -78,9 +81,10 @@
} }
}) })
onMounted(()=>{ onMounted(()=>{
createGmailLogin() // createGmailLogin()
}) })
return { return {
toGmailLogin,
} }
}, },
}) })

View File

@@ -102,7 +102,12 @@
<div class="login_form_title marign_top30"> <div class="login_form_title marign_top30">
<label :class="{ active: emailStap == 2 }"> <label :class="{ active: emailStap == 2 }">
<input :state="emailStap" type="checkbox" v-model="checked" /> <input :state="emailStap" type="checkbox" v-model="checked" />
<span>I agree to the Terms, Privacy Policy, and Fees.</span> <span>
I agree to the
<a href="https://code-create.com.hk/aida-terms-and-conditions/" style="text-decoration: underline;color: #000;">Terms</a>,
<a href="https://code-create.com.hk/privacy-policy/" style="text-decoration: underline;color: #000;">Privacy Policy</a>,
and Fees.
</span>
</label> </label>
</div> </div>
<!-- <div class="thirdPartyLogin marign_top30"> <!-- <div class="thirdPartyLogin marign_top30">
@@ -489,22 +494,7 @@ export default defineComponent({
isCheckAgreement() { isCheckAgreement() {
message.info("Agree to all terms, privacy fees and policies"); 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) { googelLogin(value: any) {
let data = { credential: value, type: 2 }; let data = { credential: value, type: 2 };
@@ -611,10 +601,6 @@ export default defineComponent({
// }, // },
}, },
mounted() { mounted() {
const data = this.$route.query;
if (data?.state == "weiXin") {
this.wechatLogin(data);
}
}, },
}); });
</script> </script>

View File

@@ -85,7 +85,12 @@
<div class="login_form_title marign_top40"> <div class="login_form_title marign_top40">
<label :class="{ active: emailStap == 2 }"> <label :class="{ active: emailStap == 2 }">
<input :state="emailStap" type="checkbox" v-model="checked" /> <input :state="emailStap" type="checkbox" v-model="checked" />
<span>I agree to the Terms, Privacy Policy, and Fees.</span> <span>
I agree to the
<a href="https://code-create.com.hk/aida-terms-and-conditions/" style="text-decoration: underline;color: #000;">Terms</a>,
<a href="https://code-create.com.hk/privacy-policy/" style="text-decoration: underline;color: #000;">Privacy Policy</a>,
and Fees.
</span>
</label> </label>
</div> </div>
@@ -490,22 +495,6 @@ export default defineComponent({
isCheckAgreement() { isCheckAgreement() {
message.info("Agree to all terms, privacy fees and policies"); 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) { googelLogin(value: any) {
let data = { credential: value, type: 2 }; let data = { credential: value, type: 2 };
@@ -612,10 +601,6 @@ export default defineComponent({
// }, // },
}, },
mounted() { mounted() {
const data = this.$route.query;
if (data?.state == "weiXin") {
this.wechatLogin(data);
}
}, },
}); });
</script> </script>

View File

@@ -102,7 +102,12 @@
<div class="login_form_title marign_top30"> <div class="login_form_title marign_top30">
<label :class="{ active: emailStap == 2 }"> <label :class="{ active: emailStap == 2 }">
<input :state="emailStap" type="checkbox" v-model="checked" /> <input :state="emailStap" type="checkbox" v-model="checked" />
<span>I agree to the Terms, Privacy Policy, and Fees.</span> <span>
I agree to the
<a href="https://code-create.com.hk/aida-terms-and-conditions/" style="text-decoration: underline;color: #000;">Terms</a>,
<a href="https://code-create.com.hk/privacy-policy/" style="text-decoration: underline;color: #000;">Privacy Policy</a>,
and Fees.
</span>
</label> </label>
</div> </div>
<!-- <div class="thirdPartyLogin marign_top30"> <!-- <div class="thirdPartyLogin marign_top30">
@@ -492,22 +497,6 @@ export default defineComponent({
isCheckAgreement() { isCheckAgreement() {
message.info("Agree to all terms, privacy fees and policies"); 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) { googelLogin(value: any) {
let data = { credential: value, type: 2 }; let data = { credential: value, type: 2 };
@@ -614,10 +603,6 @@ export default defineComponent({
// }, // },
}, },
mounted() { mounted() {
const data = this.$route.query;
if (data?.state == "weiXin") {
this.wechatLogin(data);
}
}, },
}); });
</script> </script>

View File

@@ -68,7 +68,7 @@ export default defineComponent({
} }
const setWeiXin = ()=>{ const setWeiXin = ()=>{
let http = window.location.href.replace(/^https?:\/\//, '') let http = window.location.href.replace(/^https?:\/\//, '')
http = 'https://www.aida.com.hk' http = import.meta.env.VITE_USER_NODE_ENV == 'development'?'https://develop.aida.com.hk':'https://www.aida.com.hk'
new WxLogin({ new WxLogin({
self_redirect: false, //默认为false(保留当前二维码) true(当前二维码所在的地方通过iframe 内跳转到 redirect_uri) self_redirect: false, //默认为false(保留当前二维码) true(当前二维码所在的地方通过iframe 内跳转到 redirect_uri)
id: "wx_id_signin", //容器的id id: "wx_id_signin", //容器的id

View File

@@ -608,13 +608,13 @@ export default defineComponent({
}) })
} }
let openOtherUsers = ()=>{ let openOtherUsers = ()=>{
const routeUrl = router.resolve({ // const routeUrl = router.resolve({
path:'/home/otherUsers', // path:'/home/otherUsers',
query:{ // query:{
userId:imgData.scaleImageData.accountId // userId:imgData.scaleImageData.accountId
} // }
}) // })
window.open(routeUrl.href,'_blank') // window.open(routeUrl.href,'_blank')
} }
watch(()=>imgData.scaleImageIndex, watch(()=>imgData.scaleImageIndex,
(newVal,oldVal)=>{ (newVal,oldVal)=>{

View File

@@ -18,7 +18,7 @@
</span> </span>
</div> </div>
</div> </div>
<NewCollectionReview id="collectionReview" @openCollection="openCollection"></NewCollectionReview> <NewCollectionReview id="collectionReview" :probjects="selectProbject" @openCollection="openCollection"></NewCollectionReview>
</div> </div>
</div> </div>
<div v-show="isMannequinShow" class="left_info_hint"> <div v-show="isMannequinShow" class="left_info_hint">

View File

@@ -135,7 +135,6 @@
:centerBox="option.centerBox" :centerBox="option.centerBox"
:height="option.height" :height="option.height"
:infoTrue="option.infoTrue" :infoTrue="option.infoTrue"
:limitMinSize="option.limitMinSize"
:enlarge="option.enlarge" :enlarge="option.enlarge"
@real-time="realTime" @real-time="realTime"
:autoCropArea="1" :autoCropArea="1"
@@ -831,7 +830,6 @@ export default defineComponent({
this.locationList = JSON.parse(JSON.stringify(this.oldLocationList)) this.locationList = JSON.parse(JSON.stringify(this.oldLocationList))
// this.locationList = JSON.parse(JSON.stringify(this.locationList)) // this.locationList = JSON.parse(JSON.stringify(this.locationList))
}, },
submitPlacement(){ submitPlacement(){
// let cropper:any = this.$refs.cropper, // let cropper:any = this.$refs.cropper,
// that = this // that = this
@@ -937,7 +935,6 @@ export default defineComponent({
cropper.changeScale(num); cropper.changeScale(num);
}, },
async confrimSubmit(){ async confrimSubmit(){
console.log(this.printObject)
let isCovered = true let isCovered = true
if(this.editOrUpload == 'edit'){ if(this.editOrUpload == 'edit'){
await new Promise((resolve, reject) => { await new Promise((resolve, reject) => {
@@ -1125,12 +1122,15 @@ export default defineComponent({
if(boolean){ if(boolean){
this.slider = 50 this.slider = 50
let url let url
if(this.printObject.url){ if(this.printObject.url && !this.printObject.url.startsWith('blob:')){
url = this.printObject.url url = this.printObject.url
}else{ }else{
let cropper:any = this.$refs.cropper let cropper:any = this.$refs.cropper
await cropper.getCropData(async (value:any) => { url = await new Promise<void>((resolve, reject) => {
url = value cropper.getCropData((value:any) => {
this.option.img = value
resolve(value)
})
}) })
} }
this.getImgDetail(url) this.getImgDetail(url)

View File

@@ -118,6 +118,7 @@ export default defineComponent({
createProbject:inject('createProbject',()=>{}) as any, createProbject:inject('createProbject',()=>{}) as any,
likeDesignList:[], likeDesignList:[],
canvasSelectList:[] as any, canvasSelectList:[] as any,
videoList:[] as any,
canvasDetailData:null as any, canvasDetailData:null as any,
unLikeList:[], unLikeList:[],
locale:null as any, locale:null as any,
@@ -159,20 +160,17 @@ export default defineComponent({
}); });
}); });
}else if(value == 'relight' || value == 'poseTransfer'){ }else if(value == 'relight' || value == 'poseTransfer'){
console.log(list)
list.forEach((item:any) => { list.forEach((item:any) => {
if(item.childList){ if(item.childList){
item.childList.forEach((child:any) => { item.childList.forEach((child:any) => {
if(child.resultType == 'ToProductImage' || child.resultType == 'Relight'){ if(child.resultType == 'ToProductImage' || child.resultType == 'Relight'){
fileList.push(child) fileList.push(child)
} }
console.log(fileList)
if(child.resultType == 'Relight' && value == 'relight'){ if(child.resultType == 'Relight' && value == 'relight'){
likeList.push(child) likeList.push(child)
}else if(child.resultType == 'PoseTransfer' && value == 'poseTransfer'){ }else if(child.resultType == 'PoseTransfer' && value == 'poseTransfer'){
likeList.push(child) likeList.push(child)
} }
console.log(likeList)
}); });
} }
}); });
@@ -187,7 +185,6 @@ export default defineComponent({
}else if(data.openType == 'relight'){ }else if(data.openType == 'relight'){
store.commit("setRelightList", likeData); store.commit("setRelightList", likeData);
}else if(data.openType == 'poseTransfer'){ }else if(data.openType == 'poseTransfer'){
console.log(likeData)
store.commit("setPoseTransfer", likeData); store.commit("setPoseTransfer", likeData);
} }
if(dataDom[value]?.openSetData)dataDom[value]?.openSetData(fileList) if(dataDom[value]?.openSetData)dataDom[value]?.openSetData(fileList)
@@ -261,7 +258,7 @@ export default defineComponent({
let obj = { let obj = {
value:itemStr.value, value:itemStr.value,
type:data.locale == "ENGLISH"?itemStr.name:itemStr.nameCn, type:data.locale == "ENGLISH"?itemStr.name:itemStr.nameCn,
imgList:list, imgList:list,
} }
if(list.length > 0){ if(list.length > 0){
data.canvasSelectList.push(obj) data.canvasSelectList.push(obj)
@@ -274,7 +271,11 @@ export default defineComponent({
list.push({url:item.designOutfitUrl || item.url}) list.push({url:item.designOutfitUrl || item.url})
if(item.childList.length > 0){ if(item.childList.length > 0){
item.childList.forEach((childItem)=>{ item.childList.forEach((childItem)=>{
list.push({url:childItem.designOutfitUrl || childItem.url}) if(childItem.relationType == "PoseTransfer"){
data.videoList.push({url:childItem.videoUrl})
}else{
list.push({url:(childItem?.designOutfitUrl || childItem?.url)})
}
}) })
} }
}) })
@@ -348,7 +349,14 @@ export default defineComponent({
}) })
}) })
} }
console.log(img) data.videoList.forEach((imgItem:any,index:any)=>{
let nameTail = imgItem.url?.split(".").pop().split("?").shift();
img.push({
imgUrl:imgItem.url,
name:`video${index}.${nameTail?nameTail:'mp4'}`
})
})
if(img.length>0)downImg(img); if(img.length>0)downImg(img);
} }
let getImgArrayBuffer = (url) => { let getImgArrayBuffer = (url) => {
@@ -412,7 +420,6 @@ export default defineComponent({
const share = async ()=>{ const share = async ()=>{
var imageDataURL = ''; var imageDataURL = '';
imageDataURL = await dataDom.editCanvas.exportImage({isContainBg:true,isContainFixed:false}) imageDataURL = await dataDom.editCanvas.exportImage({isContainBg:true,isContainFixed:false})
console.log(imageDataURL)
let value = { let value = {
imgUrl:imageDataURL, imgUrl:imageDataURL,
userlikeGroupId:'', userlikeGroupId:'',

View File

@@ -166,7 +166,7 @@ export default defineComponent({
portfolioName:rv.portfolioDTO?.portfolioName?rv.portfolioDTO?.portfolioName:'', portfolioName:rv.portfolioDTO?.portfolioName?rv.portfolioDTO?.portfolioName:'',
tagsDTO:rv.portfolioDTO?.tagsDTO?rv.portfolioDTO?.tagsDTO:[], tagsDTO:rv.portfolioDTO?.tagsDTO?rv.portfolioDTO?.tagsDTO:[],
}, },
model:[] // model:[]
} }
let position = [] let position = []
if(storeData.sex == "Female"){ if(storeData.sex == "Female"){
@@ -516,7 +516,6 @@ export default defineComponent({
} }
} }
const newProject = (value:any)=>{ const newProject = (value:any)=>{
settingGetHistory()
emit('setNewProject') emit('setNewProject')
let chatModel = false let chatModel = false
if(value.newMode == 'chat'){ if(value.newMode == 'chat'){
@@ -524,7 +523,8 @@ export default defineComponent({
}else{ }else{
chatModel = false chatModel = false
} }
router.push(`home?history=${value.id}&create=true&chatMode=${chatModel}`) router.push(`home?history=${value.id}&chatMode=${chatModel}`)
settingGetHistory()
data.chatData = value data.chatData = value
} }

View File

@@ -113,7 +113,7 @@ export default defineComponent({
portfolioName:rv.portfolioDTO.portfolioName?rv.portfolioDTO.portfolioName:'', portfolioName:rv.portfolioDTO.portfolioName?rv.portfolioDTO.portfolioName:'',
tagsDTO:rv.portfolioDTO.tagsDTO?rv.portfolioDTO.tagsDTO:[], tagsDTO:rv.portfolioDTO.tagsDTO?rv.portfolioDTO.tagsDTO:[],
}, },
model:[] // model:[]
} }
let position = [] let position = []
if(storeData.sex == "Female"){ if(storeData.sex == "Female"){

View File

@@ -227,8 +227,8 @@ export default defineComponent({
let storeData = { let storeData = {
name:rv.name, name:rv.name,
id:rv.id, id:rv.id,
type:rv.process == 'SERIES_DESIGN'?'seriesDesign':'singleProductDesign', // type:rv.process == 'SERIES_DESIGN'?'seriesDesign':'singleProductDesign',
httpType:rv.process,//项目类型 // httpType:rv.process,//项目类型
ageGroup:rv.workspaceVO?.ageGroup, ageGroup:rv.workspaceVO?.ageGroup,
style:rv.workspaceVO?.style, style:rv.workspaceVO?.style,
styleId:rv.workspaceVO?.styleId, styleId:rv.workspaceVO?.styleId,
@@ -251,7 +251,11 @@ export default defineComponent({
portfolioName:rv.portfolioDTO?.portfolioName?rv.portfolioDTO?.portfolioName:'', portfolioName:rv.portfolioDTO?.portfolioName?rv.portfolioDTO?.portfolioName:'',
tagsDTO:rv.portfolioDTO?.tagsDTO?rv.portfolioDTO?.tagsDTO:[], tagsDTO:rv.portfolioDTO?.tagsDTO?rv.portfolioDTO?.tagsDTO:[],
}, },
model:[] // model:[]
}
if(rv.process){
storeData.type = rv.process == 'SERIES_DESIGN'?'seriesDesign':'singleProductDesign'
storeData.httpType = rv.process
} }
let position = [] let position = []
if(storeData.sex == "Female"){ if(storeData.sex == "Female"){

View File

@@ -793,6 +793,7 @@ export default {
Interact: "互动", Interact: "互动",
hisWorks: "他的作品", hisWorks: "他的作品",
works: "作品", works: "作品",
canNotUtilize: "此登录功能暂时不可用",
//取消 //取消
jsContent1: "太贵了", jsContent1: "太贵了",
jsContent2: "系统不友好", jsContent2: "系统不友好",
@@ -1304,8 +1305,8 @@ export default {
allUser:'所有用户', allUser:'所有用户',
UserData:'用户数据', UserData:'用户数据',
FunctionUseCHART:'功能使用图表', FunctionUseCHART:'功能使用图表',
}, ENGLISH:'英文',
adminSeAllUser:{ CHINESE_SIMPLIFIED:'简体中文',
CreateTime:'创建时间', CreateTime:'创建时间',
UserName:'用户名', UserName:'用户名',
search:'搜索', search:'搜索',
@@ -1331,17 +1332,19 @@ export default {
MaximumCredits:'最大积分', MaximumCredits:'最大积分',
Close:'关闭', Close:'关闭',
OK:'确定', OK:'确定',
jsContent1:'邮箱格式有误', User:'用户',
jsContent2:'请检查所有带 * 号的内容', startTime:'开始时间',
}, endTime:'结束时间',
adminSeDesignDetail:{ enterEmail:'请输入邮箱',
selectUserName:'请选择用户',
StartDate:'开始日期', StartDate:'开始日期',
StartTime:'开始时间', StartTime:'开始时间',
Email:'邮箱',
UserName:'用户名',
UserId:'用户ID',
Frequency:'设计频率', Frequency:'设计频率',
CreateTime:'创建时间', enterUserName:'请输入用户名',
Credits:'积分', enterPassword:'请输入密码',
enterCredits:'请输入积分',
jsContent1:'邮箱格式有误',
jsContent2:'请检查所有带 * 号的内容',
jsDelete:'确定删除这一项吗',
}, },
}; };

View File

@@ -1,3 +1,5 @@
import { en } from "element-plus/es/locales.mjs";
export default { export default {
Header: { Header: {
hello: "hello", hello: "hello",
@@ -793,6 +795,7 @@ export default {
Interact: "interact", Interact: "interact",
hisWorks: "His works", hisWorks: "His works",
works: "Works", works: "Works",
canNotUtilize: "This login function is temporarily out of service.",
//取消 //取消
jsContent1: "Too expensive", jsContent1: "Too expensive",
jsContent2: "Sytem not user friendly", jsContent2: "Sytem not user friendly",
@@ -1302,10 +1305,10 @@ export default {
}, },
admin:{ admin:{
allUser:'All User', allUser:'All User',
UserData:'User Data', UserData:'Design Frequency',
FunctionUseCHART:'Function Use CHART', FunctionUseCHART:'Function Use CHART',
}, ENGLISH:'English',
adminSeAllUser:{ CHINESE_SIMPLIFIED:'Chinese Simplified',
CreateTime:'Create Time', CreateTime:'Create Time',
UserName:'User Name', UserName:'User Name',
search:'Search', search:'Search',
@@ -1320,7 +1323,7 @@ export default {
Delete:'Delete', Delete:'Delete',
UserId:'User ID', UserId:'User ID',
Email:'Email', Email:'Email',
UserEmail:'Ucser Email', UserEmail:'User Email',
language:'Language', language:'Language',
CreateDate:'Create Date', CreateDate:'Create Date',
Credits:'Credits', Credits:'Credits',
@@ -1331,17 +1334,19 @@ export default {
MaximumCredits:'Maximum Credits', MaximumCredits:'Maximum Credits',
Close:'Close', Close:'Close',
OK:'OK', OK:'OK',
jsContent1:'The email format is incorrect', User:'User',
jsContent2:'Please check the input box marked with *', startTime:'Start Time',
}, endTime:'End Time',
adminSeDesignDetail:{ enterEmail:'Please enter email',
selectUserName:'Please select the user.',
StartDate:'Start Date', StartDate:'Start Date',
StartTime:'Start Time', StartTime:'Start Time',
Email:'Email',
UserName:'User Name',
UserId:'User ID',
Frequency:'Frequency', Frequency:'Frequency',
CreateTime:'Create Time', enterUserName:'Please enter user name',
Credits:'Credits', enterPassword:'Please enter password',
enterCredits:'Please enter credits',
jsContent1:'The email format is incorrect',
jsContent2:'Please check the input box marked with *',
jsDelete:'Are you sure you want to delete this item?',
}, },
}; };

View File

@@ -292,6 +292,13 @@ const routes: Array<RouteRecordRaw> = [
meta: { enter: 3 }, meta: { enter: 3 },
component: () => component: () =>
import("@/component/Administrator/SE/designDetailList/index.vue"), import("@/component/Administrator/SE/designDetailList/index.vue"),
},
{
path: "recentActiveChartSE",
name: "recentActiveChartSE",
meta: { enter: 3 },
component: () =>
import("@/component/Administrator/SE/recentActiveChart.vue"),
}, },
{ {
path: "generateFrequencySE", path: "generateFrequencySE",

View File

@@ -70,10 +70,12 @@ const Workspace : Module<DesignDetail,RootState> = {
state.projectList = list state.projectList = list
}, },
setProbject(state,data){ setProbject(state,data){
console.log(123123,data)
for (const key in data) { for (const key in data) {
if(data[key] == undefined)continue if(data[key] == undefined)continue
state.probjects[key] = data[key] state.probjects[key] = data[key]
} }
console.log(state.probjects)
}, },
createProbject(state){ createProbject(state){
state.probjects = { state.probjects = {

View File

@@ -24,7 +24,7 @@ const all = (t)=>{
// }, // },
// ], // ],
},{ },{
name:'User data', name:'Design Frequency',
route:'/administrator/testClickData', route:'/administrator/testClickData',
icon:'shenpi', icon:'shenpi',
expandIcon:'icon-xiala', expandIcon:'icon-xiala',
@@ -177,13 +177,7 @@ const all = (t)=>{
route:'/administrator/organization', route:'/administrator/organization',
key:'sub13', key:'sub13',
isShow:true, isShow:true,
},{ }]
name:'Design Frequency',
icon:'usetime',
route:'/administrator/testClickDataSE',
key:'sub14',
isShow:true,
},]
} }
const schoolOrEnterprise = (t) =>{ const schoolOrEnterprise = (t) =>{
return[ return[
@@ -202,7 +196,7 @@ const schoolOrEnterprise = (t) =>{
isShow:true, isShow:true,
},{ },{
name:t('admin.FunctionUseCHART'), name:t('admin.FunctionUseCHART'),
route:'/administrator/recentActiveChart', route:'/administrator/recentActiveChartSE',
icon:'usetime', icon:'usetime',
key:'sub3', key:'sub3',
isShow:true, isShow:true,

View File

@@ -49,6 +49,7 @@ const filterHttpsUrl = [
'/api/account/login', '/api/account/login',
'/api/account/organizationNameSearch', '/api/account/organizationNameSearch',
'/api/account/designWorksRegisterCode', '/api/account/designWorksRegisterCode',
'/api/third/party/parseWeChatCode',
'/api/account/sendEmail'] '/api/account/sendEmail']
//POST传参序列化(添加请求拦截器) //POST传参序列化(添加请求拦截器)
axios.interceptors.request.use((config) => { axios.interceptors.request.use((config) => {

View File

@@ -118,6 +118,7 @@ export default defineComponent({
}; };
let handleClick = (event:any) => { let handleClick = (event:any) => {
// state.selectedKeys = [Number(event.key)] // state.selectedKeys = [Number(event.key)]
console.log(event.item)
state.nowPageName = event.item.name state.nowPageName = event.item.name
router.push({path:event.item.route}) router.push({path:event.item.route})
} }

View File

@@ -346,9 +346,9 @@ export default defineComponent({
for (const key in opTypeList) { for (const key in opTypeList) {
const element = opTypeList[key]; const element = opTypeList[key];
homeMainData.openTypeList[key].label = element.label homeMainData.openTypeList[key].label = element.label
if(element?.length > 0){ if(element.list?.length > 0){
element.forEach((item,index)=>{ element.list.forEach((item,index)=>{
homeMainData.openTypeList[key][index].label = item.label homeMainData.openTypeList[key].list[index].label = item.label
}) })
} }
} }
@@ -534,7 +534,8 @@ export default defineComponent({
}) })
}) })
onBeforeUnmount(()=>{ onBeforeUnmount(()=>{
MyWs.close() let imgParent = document.querySelector('.homeMain_max .detail .material_content_list_loding .historyPage_loading')
if(Observer?.unobserve)Observer.unobserve(imgParent);
}) })
const setOpenType = (type,list)=>{ const setOpenType = (type,list)=>{
if(homeMainData.openType == type){ if(homeMainData.openType == type){
@@ -594,6 +595,9 @@ export default defineComponent({
// router.push(`/home?history=${childItem.id}`) // router.push(`/home?history=${childItem.id}`)
} }
const settingGetHistory = ()=>{ const settingGetHistory = ()=>{
if(homeMainData.historyData.page == 1){
return
}
homeMainData.historyData.page = 1 homeMainData.historyData.page = 1
// homeMainData.openTypeList.history = { // homeMainData.openTypeList.history = {
// icon:"fi-br-time-past", // icon:"fi-br-time-past",
@@ -947,17 +951,18 @@ export default defineComponent({
let url = 'https://aida-user-manual-chinese.super.site/' let url = 'https://aida-user-manual-chinese.super.site/'
if(this.locale == 'ENGLISH'){ if(this.locale == 'ENGLISH'){
url = 'https://code-create.com.hk/wp-content/uploads/2025/02/aida_3.0-Manual-2_5-EN.pdf' 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'}) showViewVideo({url:'https://aida.com.hk/video/user_manual_3_1_0.mp4'})
}else{ }else{
showViewVideo({url:'https://code-create.com.hk/wp-content/uploads/2025/02/AiDA-demo-video_2_5_CN.mp4'}) showViewVideo({url:'https://aida.com.hk/video/user_manual_3_1_0.mp4'})
} }
//打开视频 this.toUserManual()
const a = document.createElement('a'); // //打开视频
a.href = url; // const a = document.createElement('a');
a.target = '_blank'; // a.href = url;
// a.download = 'aida_3.0-Manual.pptx'; // 下载的文件名 // a.target = '_blank';
document.body.appendChild(a); // // a.download = 'aida_3.0-Manual.pptx'; // 下载的文件名
a.click(); // document.body.appendChild(a);
// a.click();
}, },
//登出 //登出
async logout() { async logout() {

View File

@@ -62,6 +62,7 @@ import {
createVNode, createVNode,
toRefs, toRefs,
reactive, reactive,
onMounted
} from "vue"; } from "vue";
import { ExclamationCircleOutlined } from "@ant-design/icons-vue"; import { ExclamationCircleOutlined } from "@ant-design/icons-vue";
import { Https } from "@/tool/https"; import { Https } from "@/tool/https";
@@ -75,6 +76,7 @@ import personal from "@/component/LoginPage/login/personal.vue";
import { useRoute,useRouter } from 'vue-router'; import { useRoute,useRouter } from 'vue-router';
import school from "@/component/LoginPage/login/school.vue"; import school from "@/component/LoginPage/login/school.vue";
import enterprise from "@/component/LoginPage/login/enterprise.vue"; import enterprise from "@/component/LoginPage/login/enterprise.vue";
import { setCookie, WriteCookie } from "@/tool/cookie";
export default defineComponent({ export default defineComponent({
components: { components: {
Works, Works,
@@ -87,6 +89,7 @@ export default defineComponent({
setup(props, { emit }) { setup(props, { emit }) {
const store = useStore(); const store = useStore();
const router = useRouter() const router = useRouter()
const route = useRoute()
const loginData = reactive({ const loginData = reactive({
loginType: "", loginType: "",
isMask: true, isMask: true,
@@ -109,6 +112,67 @@ export default defineComponent({
const toBack = ()=>{ const toBack = ()=>{
router.push('/Square') router.push('/Square')
} }
const setSuccessLogin = (rv: any)=>{
if (rv) {
if (rv.systemUser == 4) {
rv.systemUser = 1;
}
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;
store.commit("upUserDetail", userid);
if (window.innerWidth < 768) {
message.info(
"If you need to design, please log in using an iPad or computer."
);
turnToHomePage("/Square");
} else {
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([]));
}
}
const turnToHomePage = (str: any)=>{
store.commit("clearAllData");
store.commit("clearAllCollection");
store.commit("setAllBoardDataChoose", {});
store.commit("clearShowSketchboard", {});
router.push(str);
}
const wechatLogin =(value: any)=>{
let data = {
code: value.code,
type: 2,
};
Https.axiosGet(Https.httpUrls.parseWeChatCode, { params: data })
.then((rv: any) => {
setSuccessLogin(rv);
})
.catch((res) => {
});
}
onMounted(()=>{
const data = route.query;
console.log(data)
if (data?.state == "weiXin") {
wechatLogin(data);
}
})
return { return {
...toRefs(dataDom), ...toRefs(dataDom),
...toRefs(loginData), ...toRefs(loginData),

View File

@@ -11,7 +11,7 @@ import { ElementPlusResolver } from "unplugin-vue-components/resolvers";
export default defineConfig(({ mode }) => { export default defineConfig(({ mode }) => {
// 加载环境变量 // 加载环境变量
const env = loadEnv(mode, process.cwd(), ""); const env = loadEnv(mode, process.cwd(), "");
console.log(mode)
return { return {
resolve: { resolve: {
alias: { alias: {