This commit is contained in:
X1627315083
2025-09-01 14:03:30 +08:00
parent c387a71ba8
commit 89639aaec9
49 changed files with 819 additions and 232 deletions

View File

@@ -148,6 +148,7 @@ export default defineComponent({
.account_comment{
width: 100%;
.account_generalMessage_item{
font-size: var(--aida-fsize1-6);
.account_generalMessage_item_right{
display: flex;
align-items: center;

View File

@@ -140,6 +140,7 @@ export default defineComponent({
}
.account_generalMessage_center{
.account_generalMessage_item{
font-size: var(--aida-fsize1-6);
.account_generalMessage_item_right{
display: flex;
align-items: center;

View File

@@ -149,6 +149,7 @@ export default defineComponent({
width: 100%;
.account_generalMessage_center{
.account_generalMessage_item{
font-size: var(--aida-fsize1-6);
.account_generalMessage_item_right{
display: flex;
align-items: center;

View File

@@ -45,11 +45,11 @@
</div>
</div>
<div class="modal_title_text">
<div>{{ title }} User</div>
<div>{{ title.label }} User</div>
</div>
<div class="allUserPoeration_center admin_page">
<div class="admin_state_item">
<span>User Name: <span>*</span></span>
<span>{{ $t('adminSeAllUser.UserName') }}: <span>*</span></span>
<input
v-model="userName"
placeholder="Please enter user name"
@@ -58,7 +58,7 @@
/>
</div>
<div class="admin_state_item">
<span>User Email: <span>*</span></span>
<span>{{ $t('adminSeAllUser.UserEmail') }}: <span>*</span></span>
<input
v-model="userEmail"
placeholder="Please enter email"
@@ -67,7 +67,7 @@
/>
</div>
<div class="admin_state_item">
<span>Password: <span>*</span></span>
<span>{{ $t('adminSeAllUser.Password') }}: <span>*</span></span>
<input
@focus="focus"
@blur="blur"
@@ -78,7 +78,7 @@
/>
</div>
<div class="admin_state_item">
<span>Maximum Credits:</span>
<span>{{ $t('adminSeAllUser.MaximumCredits') }}:</span>
<input
v-model="credits"
placeholder="Please enter credits"
@@ -88,8 +88,8 @@
</div>
</div>
<div class="allUserPoeration_btn admin_page">
<div class="admin_search_item" @click="cancelDsign">Close</div>
<div class="admin_search_item" @click="setOk">OK</div>
<div class="admin_search_item" @click="cancelDsign">{{ $t('adminSeAllUser.Close') }}</div>
<div class="admin_search_item" @click="setOk">{{ $t('adminSeAllUser.OK') }}</div>
</div>
</a-modal>
<div class="mark_loading" v-show="loadingShow">
@@ -119,7 +119,7 @@ export default defineComponent({
operationsModal: false,
operationsEdit: false,
loadingShow: false,
title: "",
title: null,
});
let operationsData = reactive({
accountId: -1,
@@ -151,8 +151,8 @@ export default defineComponent({
operations.operationsModal = true;
operations.operationsEdit = true;
operations.title = funStr;
if (funStr == "Add") operations.operationsEdit = false;
if (funStr == "Edit") {
if (funStr.value == "Add") operations.operationsEdit = false;
if (funStr.value == "Edit") {
operationsData.accountId = data.id;
operationsData.userName = data.userName;
operationsData.userEmail = data.userEmail;
@@ -195,7 +195,7 @@ export default defineComponent({
userEmail: operationsData.userEmail,
userPassword:
operationsData.password == operationsData.oldPassword
? ""
? null
: md5(operationsData.password + "abc"),
};
};
@@ -209,19 +209,18 @@ export default defineComponent({
};
let setOk = () => {
let data;
if (operations.title == "Add") {
if (operations.title?.value == "Add") {
data = setAddData();
if (!isEmail(data.userEmail)) {
message.info("The email format is incorrect");
message.info(t('adminSeAllUser.jsContent1'));
return;
}
if (
!data.userName ||
!data.userEmail ||
!data.userPassword ||
!data.creditsUsageLimit
!data.userPassword
)
return message.warning("Please check the input box marked with *");
return message.warning(t('adminSeAllUser.jsContent2'));
Https.axiosPost(Https.httpUrls.addOrUpdateSubAccount, data).then(
(rv) => {
if (rv) {
@@ -236,7 +235,7 @@ export default defineComponent({
message.info("The email format is incorrect");
return;
}
if (!data.userName || !data.userEmail || !data.creditsUsageLimit)
if (!data.userName || !data.userEmail)
return message.warning("Please check the input box marked with *");
Https.axiosPost(Https.httpUrls.addOrUpdateSubAccount, data).then(
(rv) => {

View File

@@ -3,7 +3,7 @@
<div class="admin_table_search">
<div class="admin_state">
<div class="admin_state_item">
<span>Create Time:</span>
<span>{{ $t('adminSeAllUser.CreateTime') }}:</span>
<a-range-picker
style="width: 230px"
class="range_picker"
@@ -45,7 +45,7 @@
/>
</div> -->
<div class="admin_state_item">
<span>User Name:</span>
<span>{{ $t('adminSeAllUser.UserName') }}:</span>
<a-select
v-model:value="ids"
mode="multiple"
@@ -74,16 +74,22 @@
</div>
<div class="admin_search">
<div class="admin_search_item" @click="searchHistoryList">
Search
{{ $t('adminSeAllUser.search') }}
</div>
<div class="admin_search_item" @click="addhHistoryList">
Add
{{ $t('adminSeAllUser.add') }}
</div>
<div class="admin_search_item" style="width: auto;padding: 0 2rem;" @click="downloadTemplate">
Download template
{{ $t('adminSeAllUser.DownloadTemplate') }}
</div>
<div class="admin_search_item" style="width: auto;padding: 0 2rem;" @click="uploadTemplate">
Upload template
{{ $t('adminSeAllUser.UploadTemplate') }}
</div>
<div class="admin_search_item" style="width: auto;padding: 0 2rem;" @click="ExportAccountData">
{{ $t('adminSeAllUser.ExportAccountData') }}
</div>
<div class="admin_search_item" style="width: auto;padding: 0 2rem;" @click="deleteList">
{{ $t('adminSeAllUser.Delete') }}
</div>
</div>
<div class="admin_state_list">
@@ -91,19 +97,19 @@
class="admin_state_list_item"
@click="lastGeTrialList('year')"
>
Nearly a year
{{ $t('adminSeAllUser.NearlyAYear') }}
</div>
<div
class="admin_state_list_item"
@click="lastGeTrialList('month')"
>
Last month
{{ $t('adminSeAllUser.LastMonth') }}
</div>
<div
class="admin_state_list_item"
@click="lastGeTrialList('week')"
>
Last week
{{ $t('adminSeAllUser.LastWeek') }}
</div>
</div>
</div>
@@ -113,6 +119,8 @@
:loading="tableLoading"
:columns="columns"
:data-source="dataList"
:row-selection="rowSelection"
rowKey="id"
:scroll="{ y: historyTableHeight }"
@change="changePage"
:showSorterTooltip='false'
@@ -132,13 +140,13 @@
@click="setAagree(record)"
style="margin-right: 2rem;"
>
Edit
{{ $t('adminSeAllUser.Edit') }}
</div>
<div
class="operate_item"
@click="deleteAagree(record)"
>
Delete
{{ $t('adminSeAllUser.Delete') }}
</div>
<!-- <div
class="operate_item"
@@ -169,18 +177,31 @@ import { Https } from "@/tool/https";
import { Modal,message } from 'ant-design-vue';
import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
import allUserPoerationsVue from "./addAllUser.vue";
import { useI18n } from 'vue-i18n'
export default defineComponent({
components: {allUserPoerationsVue,},
setup() {
const store:any = useStore()
const selectedRowKeys = ref([]) as any;
const onSelectChange = (changableRowKeys: string[]) => {
selectedRowKeys.value = changableRowKeys;
};
let filter: any = reactive({
dataList: [],
tableLoading: false,
allUserList: computed(()=>{
return store.state.adminPage.allUserList
}),
allCountry:[]
allCountry:[],
rowSelection:computed(() => {
return {
selectedRowKeys: unref(selectedRowKeys),
onChange: onSelectChange,
}
})
});
const {t} = useI18n()
let filterData: any = reactive({
rangePickerValue: [],
currentPage: 1,
@@ -196,37 +217,12 @@ export default defineComponent({
orderBy:'',
userName: "",
});
let state: any = ref([
{
label: "all",
value: "",
},
{
label:'visitor',
value:'0',
},
{
label:'yearly',
value:'1',
},
{
label:'monthly',
value:'2',
},
{
label:'trial',
value:'3',
},
{
label: "userInEvent",
value: "4",
},
]);
let renameData: any = ref({}); //修改名字选中的数据
const columns: any = computed(() => {
return [
{
title: "User Id",
title: t("adminSeAllUser.UserId"),
align: "center",
dataIndex: "id",
key: "id",
@@ -235,7 +231,7 @@ export default defineComponent({
sorter: true,
},
{
title: "Email",
title: t("adminSeAllUser.Email"),
align: "center",
dataIndex: "userEmail",
key: "userEmail",
@@ -243,7 +239,7 @@ export default defineComponent({
ellipsis:true
},
{
title: "User Name",
title: t("adminSeAllUser.UserName"),
align: "center",
dataIndex: "userName",
key: "userName",
@@ -258,7 +254,7 @@ export default defineComponent({
// },
},
{
title: "language",
title: t("adminSeAllUser.language"),
align: "center",
dataIndex: "language",
key: "language",
@@ -266,7 +262,7 @@ export default defineComponent({
ellipsis:true,
},
{
title: "Create Date",
title: t("adminSeAllUser.CreateDate"),
align: "center",
dataIndex: "createDate",
key: "createDate",
@@ -274,19 +270,19 @@ export default defineComponent({
sorter: true,
},
{
title: "Credits",
title: t("adminSeAllUser.Credits"),
align: "center",
// width: 150,
// minWidth: 100,
// maxWidth: 200,
// resizable: true,
dataIndex: "creditsUsageLimit",
dataIndex: "credits",
key: "credits",
width:100,
sorter: true,
},
{
title: "Credits Usage",
title: t("adminSeAllUser.CreditsUsage"),
align: "center",
dataIndex: "creditsUsage",
key: "creditsUsage",
@@ -294,7 +290,7 @@ export default defineComponent({
sorter: true,
},
{
title: "Credits Usage Limit",
title: t("adminSeAllUser.CreditsUsageLimit"),
align: "center",
dataIndex: "creditsUsageLimit",
key: "creditsUsageLimit",
@@ -302,7 +298,7 @@ export default defineComponent({
sorter: true,
},
{
title: "Operations",
title: t("adminSeAllUser.Operations"),
key: "operation",
width:120,
align: "center",
@@ -418,11 +414,11 @@ export default defineComponent({
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0;
};
let addhHistoryList = () => {
allUserPoerationsVue.value.init('Add','')
allUserPoerationsVue.value.init({value:'Add',label:t('adminSeAllUser.add')},'')
};
let allUserPoerationsVue = ref()
let setAagree = (data:any) =>{
allUserPoerationsVue.value.init('Edit',data)
allUserPoerationsVue.value.init({value:'Edit',label:t('adminSeAllUser.Edit')},data)
}
const downloadTemplate = ()=>{
Https.axiosGet(Https.httpUrls.subAccountImportExcelDownload,{responseType: 'blob',env:{binary:true}}).then((rv:any)=>{
@@ -436,6 +432,18 @@ export default defineComponent({
URL.revokeObjectURL(link.href);
})
}
const ExportAccountData = ()=>{
Https.axiosGet(Https.httpUrls.exportAccountsToExcel,{headers:{responseType: 'blob',},env:{binary:true,binaryType:'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8'}}).then((rv:any)=>{
const link = document.createElement('a');
link.href = rv.url;
link.download = 'file.xlsx'; // 设置正确的文件扩展名
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
// 释放 URL 对象
URL.revokeObjectURL(link.href);
})
}
const uploadTemplate = ()=>{
const fileInput = document.createElement('input');
fileInput.type = 'file';
@@ -473,6 +481,18 @@ export default defineComponent({
});
})
}
const deleteList = async ()=>{
console.log(selectedRowKeys.value)
if(selectedRowKeys.value.length == 0)return
let boolean:any = await confirmDelete()
if(!boolean){
return
}
Https.axiosPost(Https.httpUrls.deleteSubAccount,{deleteIdList:selectedRowKeys.value})
.then((rv:any)=>{
gettrialList();
})
}
const deleteAagree = async (event:any)=>{
let boolean:any = await confirmDelete()
if(!boolean){
@@ -496,7 +516,6 @@ export default defineComponent({
return {
...toRefs(filter),
...toRefs(filterData),
state,
columns,
renameData,
changePage,
@@ -508,7 +527,9 @@ export default defineComponent({
allUserPoerationsVue,
setAagree,
downloadTemplate,
ExportAccountData,
uploadTemplate,
deleteList,
deleteAagree,
};
},
@@ -530,13 +551,17 @@ export default defineComponent({
<style lang="less" scoped>
.admin_page .admin_table_search .admin_state {
display: flex;
width: 75%;
width: 70%;
flex-wrap: wrap;
align-content: flex-start;
}
.admin_page .admin_table_search .admin_search {
display: flex;
flex-wrap: wrap;
width: 25%;
width: 30%;
> .admin_search_item{
height: 4rem;
font-size: 1.6rem;
}
}
</style>

View File

@@ -4,7 +4,7 @@
<div class="admin_state">
<div class="admin_state_item">
<span>Start Date:</span>
<span>{{ $t('adminSeDesignDetail.StartDate') }}:</span>
<a-range-picker
style="width:250px"
class="range_picker"
@@ -23,11 +23,11 @@
</a-range-picker>
</div>
<div class="admin_state_item">
<span>Start Time:</span>
<span>{{ $t('adminSeDesignDetail.StartTime') }}:</span>
<a-time-range-picker style="width:250px" class="range_picker" valueFormat="HH:mm:ss" v-model:value="rangeTimeValue" />
</div>
<div class="admin_state_item">
<span>Email:</span>
<span>{{ $t('adminSeDesignDetail.Email') }}:</span>
<input
v-model="email"
placeholder="Please enter email"
@@ -37,7 +37,7 @@
/>
</div>
<div class="admin_state_item">
<span>User Name:</span>
<span>{{ $t('adminSeDesignDetail.UserName') }}:</span>
<a-select
v-model:value="ids"
mode="multiple"
@@ -79,6 +79,7 @@
import { defineComponent, ref, createVNode, computed } from "vue";
import { useStore } from "vuex";
import { Https } from "@/tool/https";
import { useI18n } from 'vue-i18n'
export default defineComponent({
components: {
},
@@ -87,10 +88,11 @@ export default defineComponent({
let rangePickerValue: any = ref([]);
let rangeTimeValue: any = ref([]);
let renameData: any = ref({}); //修改名字选中的数据
const {t} = useI18n()
const columns: any = computed(() => {
return [
{
title: 'Email',
title: t('adminSeDesignDetail.Email'),
align: "center",
dataIndex: "userEmail",
key: "userEmail",
@@ -98,7 +100,7 @@ export default defineComponent({
fixed: "left",
},
{
title: 'User Id',
title: t('adminSeDesignDetail.UserId'),
align: "center",
ellipsis: true,
dataIndex: "accountId",
@@ -106,7 +108,7 @@ export default defineComponent({
width:100,
},
{
title: 'User Name',
title: t('adminSeDesignDetail.UserName'),
align: "center",
ellipsis: 200,
dataIndex: "userName",
@@ -121,7 +123,7 @@ export default defineComponent({
// },
},
{
title: 'Frequency',
title: t('adminSeDesignDetail.Frequency'),
align: "center",
ellipsis: true,
dataIndex: "designTimes",
@@ -129,7 +131,7 @@ export default defineComponent({
width:100,
},
{
title: 'Create Time',
title: t('adminSeDesignDetail.CreateTime'),
align: "center",
ellipsis: true,
// width: 150,
@@ -141,7 +143,7 @@ export default defineComponent({
width:200,
},
{
title: 'Credits',
title: t('adminSeDesignDetail.Credits'),
align: "center",
ellipsis: true,
// width: 150,

View File

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

View File

@@ -64,8 +64,9 @@
refuse
</div>
</div>
<div v-else-if="column?.Operations">
{{ record.status }}
<div v-else-if="column?.Operations" class="operate_list">
<div class="operate_item">{{ record.status }}</div>
<div class="operate_item" @click="editAffiliate(record)">Edit</div>
</div>
<div v-else-if="column?.openType" @click="openDetail(record,column?.openType)">
{{ text }} HDK
@@ -74,6 +75,7 @@
</a-table>
</div>
<itemAffiliateDetail ref="itemAffiliateDetail"></itemAffiliateDetail>
<editAudit ref="editAudit"></editAudit>
</div>
</template>
<script lang="ts">
@@ -81,9 +83,10 @@ import { defineComponent, ref, createVNode, computed } from "vue";
import { Https } from "@/tool/https";
import { Modal, message } from "ant-design-vue";
import itemAffiliateDetail from "./itemAffiliateDetail.vue";
import editAudit from "./editAudit.vue";
export default defineComponent({
components: {
itemAffiliateDetail,
itemAffiliateDetail,editAudit
},
setup() {
let renameData: any = ref({}); //修改名字选中的数据
@@ -199,6 +202,7 @@ export default defineComponent({
},
])
const itemAffiliateDetail = ref()
const editAudit = ref()
let collectionList: any = ref([]);
let status: any = ref(0);
const openDetail = (value:any,openType:string)=>{
@@ -208,6 +212,9 @@ export default defineComponent({
}
itemAffiliateDetail.value.init(data)
}
const editAffiliate = (item:any)=>[
editAudit.value.init(item)
]
return {
columns,
collectionList,
@@ -217,6 +224,8 @@ export default defineComponent({
itemAffiliateDetail,
state,
openDetail,
editAudit,
editAffiliate,
};
},
data() {

View File

@@ -0,0 +1,182 @@
<template>
<div class="editAudit" ref="editAudit"></div>
<a-modal
class="editAudit_modal generalModel"
v-model:visible="operationsModal"
:footer="null"
:get-container="() => $refs.editAudit"
width="50%"
height="55rem"
:maskClosable="false"
:centered="true"
:closable="false"
:mask="true"
wrapClassName="#app"
:keyboard="false"
>
<div class="generalModel_btn">
<div class="generalModel_closeIcon" @click.stop="cancelDsign">
<svg
width="100%" height="100%"
viewBox="0 0 46 46"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<circle cx="23" cy="23" r="23" fill="black" fill-opacity="0.3" />
<rect
x="32.5063"
y="12"
width="3"
height="29"
rx="1.5"
transform="rotate(45 32.5063 12)"
fill="white"
/>
<rect
x="34.6274"
y="32.5059"
width="3"
height="29"
rx="1.5"
transform="rotate(135 34.6274 32.5059)"
fill="white"
/>
</svg>
</div>
</div>
<div class="modal_title_text">
<div>{{ title }} </div>
</div>
<div class="allUserPoeration_center admin_page">
<div class="admin_state_item">
<span>Commission: <span>*</span></span>
<input
v-model="commission"
placeholder="Please enter Commission"
type="text"
style="width: 250px"
/>
</div>
</div>
<div class="allUserPoeration_btn admin_page">
<div class="admin_search_item" @click="cancelDsign">Close</div>
<div class="admin_search_item" @click="setOk">OK</div>
</div>
</a-modal>
<div class="mark_loading" v-show="loadingShow">
<a-spin size="large" />
</div>
</template>
<script>
import {
defineComponent,
ref,
reactive,
watch,
onMounted,
nextTick,
toRefs,
} from "vue";
import { Https } from "@/tool/https";
import { Modal, message } from "ant-design-vue";
import { ExclamationCircleOutlined } from "@ant-design/icons-vue";
import md5 from "md5";
export default defineComponent({
components: {},
emits: ["searchHistoryList"],
props:{
},
setup(props, { emit }) {
let operations = reactive({
operationsModal: false,
loadingShow: false,
title: "",
});
let operationsData = reactive({
id: "",
commission: "",
});
let init = (data) => {
let funStr = 'Edit'
console.log(data)
operations.operationsModal = true;
operations.title = funStr;
if (funStr == "Edit") {
operationsData.id = data.id;
operationsData.commission = data.commissionPercent;
}
};
let setEditData = () => {
return {
id: operationsData.id,
commission: operationsData.commission,
};
};
let cancelDsign = () => {
operationsData.id = "";
operationsData.commission = "";
operations.operationsModal = false;
};
let setOk = () => {
let data;
data = setEditData();
if (
!data.commission
)
return message.warning("Please check the input box marked with *");
Https.axiosGet(Https.httpUrls.updateCommission, {params:data}).then(
(rv) => {
if (rv) {
cancelDsign();
emit("searchHistoryList");
}
}
);
};
return {
...toRefs(operations),
...toRefs(operationsData),
cancelDsign,
init,
setOk,
};
},
data() {
return {};
},
mounted() {},
methods: {},
});
</script>
<style lang="less" scoped>
:deep(.editAudit_modal) {
.ant-modal-body {
display: flex;
flex-direction: column;
}
}
</style>
<style lang="less" scoped>
.editAudit_modal {
.closeIcon {
z-index: 2;
}
.allUserPoeration_btn {
display: flex;
flex-direction: row;
height: auto;
justify-content: flex-end;
padding: 1rem 0;
.admin_search_item {
margin-bottom: 0;
}
}
.allUserPoeration_center {
flex: 1;
overflow-y: auto;
flex-direction: row;
flex-wrap: wrap;
}
}
</style>

View File

@@ -50,15 +50,18 @@
<div class="allUserPoeration_center admin_page">
<div class="admin_state_item">
<span>Id: <span>*</span></span>
<!-- input不可编辑 -->
<input
v-model="id"
placeholder="Please enter user name"
placeholder="Please enter user Id"
disabled
type="text"
style="width: 250px"
/>
</div>
<div class="admin_state_item">
<span>Amount: <span>*</span></span>
<span>Amount: </span>
<input
v-model="amount"
placeholder="Please enter email"
@@ -67,7 +70,7 @@
/>
</div>
<div class="admin_state_item">
<span>Status: <span>*</span></span>
<span>Status: </span>
<a-select
v-model:value="selectStatus"
size="large"
@@ -159,11 +162,9 @@ export default defineComponent({
let data;
data = setEditData();
if (
!data.id ||
!data.amount
!data.id
)
return message.warning("Please check the input box marked with *");
console.log(123)
Https.axiosPost(Https.httpUrls.editReferral, data).then(
(rv) => {
if (rv) {

View File

@@ -109,7 +109,7 @@
</template>
</a-table>
</div>
<editReferral ref="editReferral" :stateList="[...state].splice(1,state.length-1)" @searchHistoryList="searchHistoryList"></editReferral>
<editReferral ref="editReferral" :stateList="[...state].filter((_, index) => ![0,3].includes(index))" @searchHistoryList="searchHistoryList"></editReferral>
</div>
</template>
<script lang="ts">
@@ -175,8 +175,8 @@ export default defineComponent({
value:'Pending',
},
{
label:'Access',
value:'Access',
label:'Accept',
value:'Accept',
},
{
label: "Rejected",
@@ -200,7 +200,12 @@ export default defineComponent({
dataIndex: "commission",
key: "commission",
width:200,
ellipsis:true
ellipsis:true,
customRender: (record: any) => {
return `${record.text}%`
},
},
{
title: "User Name",

View File

@@ -212,6 +212,10 @@ export default defineComponent({
{
label: "userInEvent",
value: "4",
},
{
label: "Edu Admin",
value: "7",
},
]);
let renameData: any = ref({}); //修改名字选中的数据

View File

@@ -91,7 +91,6 @@
style="width: 250px"
/>
</div>
<div class="admin_state_item">
<span>Country:</span>
<input
@@ -103,7 +102,28 @@
style="width: 250px"
/>
</div>
<div class="admin_state_item">
<span>Organization Name:</span>
<input
:readonly="title != 'Add'"
:class="{active:title != 'Add'}"
v-model="organizationName"
placeholder="Please enter Organization Name"
type="text"
style="width: 250px"
/>
</div>
<div class="admin_state_item">
<span>Sub Account Num:</span>
<input
:readonly="title != 'Add'"
:class="{active:title != 'Add'}"
v-model="subAccountNum"
placeholder="Please enter Sub Account Num"
type="number"
style="width: 250px"
/>
</div>
</div>
<div class="allUserPoeration_btn admin_page">
<div class="admin_search_item" @click="cancelDsign">
@@ -144,6 +164,8 @@ export default defineComponent({
systemUser:'',
credits:'',
country:'',
organizationName:'',
subAccountNum:0,
})
let state = ref([
{
@@ -169,6 +191,8 @@ export default defineComponent({
operations.title = funStr
if(funStr == 'Add') operations.operationsEdit = false
if(funStr == 'Edit'){
operationsData.organizationName = data.organizationName
operationsData.subAccountNum = data.subAccountNum?data.subAccountNum:0
let startTime = data.validStartTime?formatTime(data.validStartTime / 1000,"YYYY-MM-DDThh:mm:ss"):''
let endTime = data.validEndTime?formatTime(data.validEndTime / 1000,"YYYY-MM-DDThh:mm:ss"):''
operationsData.accountId=data.id
@@ -207,7 +231,9 @@ export default defineComponent({
"userEmail": operationsData.userEmail,
"userName": operationsData.userName,
"validEndTime": setTime(operationsData.validEndTime),
"validStartTime": setTime(operationsData.validStartTime)
"validStartTime": setTime(operationsData.validStartTime),
"organizationName": operationsData.organizationName?operationsData.organizationName:null,
"subAccountNum": operationsData.subAccountNum,
}
}
let setEditData = ()=>{
@@ -293,6 +319,11 @@ export default defineComponent({
.closeIcon {
z-index: 2;
}
> .admin_state_item{
> span{
width: 15rem;
}
}
.allUserPoeration_btn{
display: flex;
flex-direction: row;

View File

@@ -20,6 +20,8 @@ import { SelectionManager } from "./managers/selection/SelectionManager";
import { RedGreenModeManager } from "./managers/RedGreenModeManager";
import texturePresetManager from "./managers/brushes/TexturePresetManager";
import { BrushStore } from "./store/BrushStore";
import cuowuImg from '@/assets/images/homePage/cuowu.svg'
// import { MinimapManager } from "./managers/minimap/MinimapManager";
@@ -33,7 +35,7 @@ import LiquifyPanel from "./components/LiquifyPanel.vue"; // 引入液化编辑
import SelectionPanel from "./components/SelectionPanel.vue"; // 引入选区面板
import { LayerType, OperationType } from "./utils/layerHelper.js";
import { ToolManager } from "./managers/toolManager.js";
// import { fabric } from "fabric-with-all";
import { fabric } from "fabric-with-all";
import {
uploadImageAndCreateLayer,
loadImageUrlToLayer,
@@ -402,6 +404,11 @@ onMounted(async () => {
canvasManagerLoaded.value = true;
// 添加删除按钮
// if(!fabric.Object.prototype.controls.deleteControl)addRemoveBtn(removeLayer)
addRemoveBtn(removeLayer)
// 触发组件初始化事件
nextTick(() => {
// 确保所有依赖都已加载完成
@@ -490,6 +497,7 @@ onBeforeUnmount(() => {
liquifyManager = null;
selectionManager = null;
redGreenModeManager = null;
// fabric.Object.prototype.controls.deleteControl = undefined;
// 移除window resize事件监听
// window.removeEventListener("resize", handleWindowResize);
@@ -604,6 +612,37 @@ function moveLayerDown(layerId) {
layerManager.moveLayer(layerId, "down");
}
function addRemoveBtn(fun){//添加删除按钮
const deleteIcon = cuowuImg
// 创建删除图片元素
let deleteImg = document.createElement('img')
deleteImg.src = deleteIcon
function renderIcon(icon) {
return function (ctx, left, top, styleOverride, fabricObject) {
var size = this.cornerSize;
ctx.save();
ctx.translate(left, top);
ctx.rotate(fabric.util.degreesToRadians(fabricObject.angle));
ctx.drawImage(icon, -size/3, -size/3, size/1.5, size/1.5);
ctx.restore();
}
}
fabric.Object.prototype.controls.deleteControl = new fabric.Control({
x: 0.5,
y: -0.5,
offsetY: -16,
offsetX: 16,
cursorStyle: 'pointer',
mouseUpHandler:deleteFun,
render: renderIcon(deleteImg),
cornerSize: 24
})
}
function deleteFun(){
removeLayer(layerManager.activeLayerId.value)
}
function removeLayer(layerId) {
// Check if this is the last layer - prevent deletion
if (layers.value.length <= 2) {

View File

@@ -141,7 +141,7 @@ const allImages = computed(() => {
// 计算属性:根据选择的分类过滤图片
const filteredImages = computed(() => {
if (selectedCategory.value === "全部") {
if (selectedCategory.value === "All" || selectedCategory.value === "全部") {
return allImages.value;
}

View File

@@ -280,6 +280,14 @@ export default defineComponent({
if(detailDom.detailRight?.privewDetail)await (detailDom.detailRight as any).privewDetail()
let gradient = null
let newData = list[i]?.newDetail?.[detailData.currentDetailType]
// newData[0].location=[
// -233.13985,
// 406.90964
// ]
// newData[0].scale=[
// 0.5,
// 0.35822305
// ]
let isCurrent = list[i].id == detailData?.selectDetail?.id
let color = (detailData.currentDetailType == 'color' && isCurrent && newData?.rgba?.r)?(newData?.rgba?.r?`${newData.rgba.r} ${newData.rgba.g} ${newData.rgba.b}`:''):(list[i].color?.rgba?.r?`${list[i].color.rgba.r} ${list[i].color.rgba.g} ${list[i].color.rgba.b}`:'')
if(detailData.currentDetailType == 'sketch' && newData){
@@ -293,12 +301,20 @@ export default defineComponent({
maskMinioUrl:list[i]?.maskMinioUrl,
// maskUrl:'',
maskUrl:list[i].maskUrl,
// offset:[
// -233.13985,
// 406.90964
// ],
offset,
partialDesign:detailData.isEditPattern.value?list[i].partialDesign:{},
path:(newData && detailData.currentDetailType == 'sketch' && isCurrent)?newData.minIOPath:list[i].minIOPath,
printObject:(newData && detailData.currentDetailType == 'print' && isCurrent)?{prints:newData}:list[i].printObject?list[i].printObject:{prints:[]},
priority,
scale,
// scale:[
// 0.5,
// 0.35822305
// ],
scale:[scale[0]?scale[0]:1,scale[1]?scale[1]:1],
type:(newData && detailData.currentDetailType == 'sketch' && isCurrent)?newData.level2Type || newData.categoryValue:list[i].type,
sketchString:list[i].sketchString?list[i].sketchString:'',
trims:(newData && detailData.currentDetailType == 'element' && isCurrent)?{prints:newData}:list[i].trims?list[i].trims:{prints:[]},

View File

@@ -10,7 +10,7 @@
<editCanvas v-if="canvasLoad" :config="canvasConfig"
@canvasInit="canvasInit"
@changeCanvas="changeCanvas"
:clothingImageUrl="selectDetail.undividedLayer"
:clothingImageUrl="selectDetail.undividedLayer || selectDetail.path"
showFixedLayer
:canvasJSON="canvasJSON"
:clothing-image-opts="{
@@ -142,7 +142,7 @@ export default defineComponent({
}else{
if(detailData.currentView === 'redGreenExample'){
nextTick(()=>{
setCanvas(detailData.selectDetail.undividedLayer).then(()=>{
setCanvas(detailData.selectDetail.undividedLayer || detailData.selectDetail.path).then(()=>{
detailData.canvasLoad = true
})
})
@@ -158,7 +158,7 @@ export default defineComponent({
const privewDetail = async (oldSelectDetail = detailData.selectDetail)=>{
if(!detailDom.editCanvas)return
return new Promise((res,reject)=>{
detailDom.editCanvas.exportImage({isContainBg:false,isContainFixed:true}).then((rv)=>{
detailDom.editCanvas.exportImage({isContainBg:false,isContainFixed:false}).then((rv)=>{
if(oldSelectDetail?.partialDesign)oldSelectDetail.partialDesign.partialDesignBase64 = rv
res('')
})
@@ -271,9 +271,8 @@ export default defineComponent({
})
onMounted(()=>{
nextTick(async ()=>{
console.log(JSON.parse(JSON.stringify(detailData.selectDetail)))
detailData.isShowMark = true
if(detailData.selectDetail.canvasId){
detailData.isShowMark = true
await new Promise((resolve, reject) => {
let value = {
module:'designItemDetail',
@@ -289,8 +288,7 @@ export default defineComponent({
});
})
}
setCanvas(detailData.selectDetail.undividedLayer).then(()=>{
setCanvas(detailData.selectDetail.undividedLayer || detailData.selectDetail.path).then(()=>{
detailData.canvasLoad = true
})
})

View File

@@ -69,6 +69,7 @@
<img crossOrigin="anonymous" :src="item?.path" :style="{transform:`rotateZ(${item.pattern?.transform?.rotateZ}deg)`}" class="designOpenrtion_imgItme" draggable="false">
</div>
</div>
<!-- <img :src="selectDetail.path" alt="" class="designOpenrtion_sketch" ref="sketchImg"> -->
<img :src="selectDetail?.undividedLayer?selectDetail.undividedLayer:selectDetail.path" alt="" class="designOpenrtion_sketch" ref="sketchImg">
<div class="designOpenrtion_btn">
<ul v-if="overallSingle" v-for="item,index in printStyleList[type][stateOverallSingle]" :key="item" :class="{active:item?.pattern.designOpenrtionBtn?item?.pattern.designOpenrtionBtn:false}" class="designOpenrtion_Mousingle" :style="item?.pattern.style" @mousedown.stop="itemMoveMousedown(index,getMousePosition($event,false))" @touchstart.passive="itemMoveMousedown(index,getMousePosition($event,true))">
@@ -357,10 +358,26 @@ export default defineComponent({
editPrintElementData.overallSingle = state
}
}
img.src = editPrintElementData.selectDetail.undividedLayer
// undividedLayer
//计算宽高使用editPrintElementData.selectDetail.path
// img.src = editPrintElementData.selectDetail.path
img.src = editPrintElementData.selectDetail.undividedLayer?editPrintElementData.selectDetail.undividedLayer:editPrintElementData.selectDetail.path
})
}
watch(()=>editPrintElementData.selectDetail?.id,(newVal)=>{
// watch(()=>editPrintElementData.selectDetail?.id,(newVal)=>{
// if(!newVal)return
// editPrintElementData.printStyleList[props.type] = {
// single:[],
// overall:[],
// }
// setPosition()
// },{immediate: true,})
watch(()=>editPrintElementData.currentPrintElement,(newVal)=>{
if(newVal){
addPrintELement(newVal)
}
})
watch(()=>((editPrintElementData.selectDetail?.undividedLayer || editPrintElementData.selectDetail?.id)),(newVal)=>{
if(!newVal)return
editPrintElementData.printStyleList[props.type] = {
single:[],
@@ -368,11 +385,6 @@ export default defineComponent({
}
setPosition()
},{immediate: true,})
watch(()=>editPrintElementData.currentPrintElement,(newVal)=>{
if(newVal){
addPrintELement(newVal)
}
})
//设置移动
const itemMoveMousedown = (index:number,event:any)=>{
if (event.target.tagName === 'IMG' || event.target.nodeName === 'IMG')return

View File

@@ -375,6 +375,9 @@ export default defineComponent({
canvas.dispose();
showPayOrder.value = false
}
onBeforeUnmount(()=>{
fabric.Object.prototype.controls.deleteControl = null
})
return {
presentState,
showPayOrder,

View File

@@ -156,7 +156,7 @@
:placeholder="$t('Renew.promotionCode')"
v-model="item.promotionData.code"
/>
<div style="cursor: pointer" @click="examine(item)">
<div style="cursor: pointer; background-color: #000; font-size: 1.2rem; color: #fff; padding: 0 .5rem;" @click="examine(item)">
{{ $t("Renew.use") }}
</div>
</div>
@@ -268,7 +268,7 @@
</template>
<script lang="ts">
import { defineComponent, computed, reactive, toRefs, onMounted } from "vue";
import { defineComponent, computed, reactive, toRefs, onMounted, onBeforeUnmount } from "vue";
import { message } from "ant-design-vue";
import payMethod from "@/component/Pay/payMethod.vue";
import { useStore } from "vuex";
@@ -297,6 +297,22 @@ export default defineComponent({
let renewData = reactive({
personage: [
{
price: "100",
sellWell: true,
activity: false, //活动打折
type: {
value: "EcoMonth",
label: computed(()=>t("Renew.Monthly")),
},
PaymentType: "CreditCard",
promotionData: {
code: "",
error: "",
str: "",
price: "",
},
},
{
price: "500",
sellWell: true,
activity: false, //活动打折
@@ -388,10 +404,11 @@ export default defineComponent({
});
const init = () => {
renew.renewModel = true;
renewData.current = renewData.personage[0];
renewData.current = renewData.personage[1];
};
const cancelDsign = () => {
renew.renewModel = false;
store.dispatch('getLangType')
};
const setPaymentType = (str: any) => {
renewData.current.PaymentType = str;
@@ -570,6 +587,8 @@ export default defineComponent({
color: #fff;
padding: 4rem 3.2rem;
position: relative;
display: flex;
flex-direction: column;
> .video{
position: absolute;
width: 100%;
@@ -598,6 +617,10 @@ export default defineComponent({
> .content {
flex-wrap: wrap;
flex-direction: row;
flex: 1;
align-content: center;
align-items: center;
justify-content: center;
> .benefitsItem {
display: flex;
width: 50%;
@@ -655,7 +678,7 @@ export default defineComponent({
margin-bottom: 1rem;
border-radius: 1rem;
overflow: hidden;
border: 2px solid #eaecf0;
border: 1.5px solid #eaecf0;
> .popular {
background: #2d9f75;

View File

@@ -31,9 +31,9 @@
<span v-if="scaleImageList[scaleImageIndex]?.resultType == 'ToProductImage'">{{$t('ProductImg.MagicTools')}}</span>
<span v-if="scaleImageList[scaleImageIndex]?.resultType == 'Relight'">{{$t('ProductImg.relightingTool')}}</span>
</div>
<div v-show="scaleImageList[scaleImageIndex]?.resultType == 'Relight'" class="productImg_content_item_title productImg_content_item_title_similarity">
<!-- <div v-show="scaleImageList[scaleImageIndex]?.resultType == 'Relight'" class="productImg_content_item_title productImg_content_item_title_similarity">
<span>{{$t('ProductImg.SelectionFunction')}}</span>
</div>
</div> -->
<!-- 暂时去掉 -->
<!-- <div v-show="scaleImageList[scaleImageIndex]?.resultType == 'Relight'" class="productImg_content_item_Direction generalModel_state_item" style="margin-bottom: 1rem;">
<a-select size="large" style="width: 100%;" v-model:value="speedData.value" :options="speedList" :field-names="{ label: 'relightLabel', value: 'value' }"></a-select>

View File

@@ -69,6 +69,7 @@
/>
</svg>
</div>
<div class="info">{{ $t('brandDNA.LastCompletionTime') }}: {{finishTime}}</div>
</div>
</div>
<div class="content">
@@ -173,6 +174,7 @@ export default defineComponent({
},
isNoData:false,//如果数据为空就不加载
isNull:true,
finishTime:'',
})
const dataDom = reactive({
Cropper:null as any,
@@ -308,7 +310,7 @@ export default defineComponent({
data.logoUrl = value.minioUrl
data.minioUrl = value.brandLogo
clearInterval(data.getProgressTime)
getProgress()
getProgress(true)
// getLibraryList()
data.isNoData = false
data.currentPage = 0
@@ -344,25 +346,30 @@ export default defineComponent({
}
const compute = ()=>{
Https.axiosPost(Https.httpUrls.productImageInitialize,{brandId:data.detail.id}).then((res:any)=>{
getProgress()
getProgress(false)
}).catch((err:any)=>{
// console.log(err)
})
}
const getProgress = ()=>{
const getProgress = (boolean:boolean)=>{
console.log(boolean)
setTimeout
if(props.selectCode != 'MyBrand'){
clearTimeout(data.getProgressTime)
return
}
Https.axiosPost(Https.httpUrls.getInitializeProgress,{brandId:data.detail.id}).then((res:any)=>{
data.finishTime = res.computeTime
data.schedule.num = res.percent
data.schedule.state = res.analyzed
if(res.percent == 1 && !boolean){
message.success(t('brandDNA.Finish'))
}
if(res.percent == 1 || !res.analyzed){
return clearTimeout(data.getProgressTime)
}
data.getProgressTime = setTimeout(()=>{
getProgress()
getProgress(boolean)
},5000)
// analyzed
@@ -515,6 +522,11 @@ export default defineComponent({
position: relative;
padding-right: 2rem;
}
> .info{
color: #5f5f5f;
font-size: 1.2rem;
margin-top: .8rem;
}
.gallery_btn{
&.loading{
pointer-events: none;

View File

@@ -144,7 +144,8 @@
class="forget_password_content_block"
@click="forgetPasswordLastStepFun()"
>
<i class="fi fi-br-arrow-left"></i>
<!-- <i class="fi fi-br-arrow-left"></i> -->
<i class="fi fi-br-angle-left"></i>
<span class="forget_password_content_title">Retrieve password</span>
</div>
<div v-show="frogetPasswordStep === 1">
@@ -849,6 +850,24 @@ export default defineComponent({
.forget_password_content_block {
cursor: pointer;
font-size: 3.6rem;
font-weight: 500;
display: flex;
align-items: center;
margin-bottom: 1.2rem;
> i {
margin-right: 2.8rem;
font-size: 2rem;
display: flex;
cursor: pointer;
align-items: center;
width: 4.6rem;
height: 4.6rem;
border-radius: 1.2rem;
display: flex;
justify-content: center;
border: 1px solid #D8DADC;
}
}
.fi-br-arrow-left {

View File

@@ -137,7 +137,8 @@
>
<!-- <span class="icon iconfont fi-br-arrow-left"></span
> -->
<i class="fi fi-br-arrow-left"></i>
<!-- <i class="fi fi-br-arrow-left"></i> -->
<i class="fi fi-br-angle-left"></i>
<span class="forget_password_content_title">Retrieve password</span>
</div>
<div v-show="frogetPasswordStep === 1">
@@ -835,6 +836,24 @@ export default defineComponent({
.forget_password_content_block {
cursor: pointer;
text-align: left;
font-size: 3.6rem;
font-weight: 500;
display: flex;
align-items: center;
margin-bottom: 1.2rem;
> i {
margin-right: 2.8rem;
font-size: 2rem;
display: flex;
cursor: pointer;
align-items: center;
width: 4.6rem;
height: 4.6rem;
border-radius: 1.2rem;
display: flex;
justify-content: center;
border: 1px solid #D8DADC;
}
}
.fi-br-arrow-left {

View File

@@ -144,7 +144,8 @@
class="forget_password_content_block"
@click="forgetPasswordLastStepFun()"
>
<i class="fi fi-br-arrow-left"></i>
<!-- <i class="fi fi-br-arrow-left"></i> -->
<i class="fi fi-br-angle-left"></i>
<span class="forget_password_content_title">Retrieve password</span>
</div>
<div v-show="frogetPasswordStep === 1">
@@ -852,6 +853,24 @@ export default defineComponent({
.forget_password_content_block {
cursor: pointer;
font-size: 3.6rem;
font-weight: 500;
display: flex;
align-items: center;
margin-bottom: 1.2rem;
> i {
margin-right: 2.8rem;
font-size: 2rem;
display: flex;
cursor: pointer;
align-items: center;
width: 4.6rem;
height: 4.6rem;
border-radius: 1.2rem;
display: flex;
justify-content: center;
border: 1px solid #D8DADC;
}
}
.fi-br-arrow-left {

View File

@@ -154,7 +154,7 @@
</template>
<script lang="ts">
import { defineComponent, ref, reactive, toRefs, onMounted } from "vue";
import { defineComponent, ref, reactive, toRefs, onMounted, onBeforeUnmount } from "vue";
import { Https } from "@/tool/https";
import { isEmail } from "@/tool/util";
import { message } from "ant-design-vue";
@@ -195,6 +195,7 @@ export default defineComponent({
};
const cancelDsign = () => {
payMethod.payMethodModel = false;
store.dispatch('getLangType')
};
const payAffirm = () => {
if (!payMethodData.clause) {
@@ -286,6 +287,7 @@ export default defineComponent({
setPaidBack();
emit("completePayment");
};
return {
store,
...toRefs(payMethod),

View File

@@ -31,12 +31,12 @@
<span v-if="scaleImageList[scaleImageIndex]?.resultType == 'ToProductImage'">{{$t('ProductImg.MagicTools')}}</span>
<span v-if="scaleImageList[scaleImageIndex]?.resultType == 'Relight'">{{$t('ProductImg.relightingTool')}}</span>
</div>
<div v-show="scaleImageList[scaleImageIndex]?.resultType == 'Relight'" class="productImg_content_item_title productImg_content_item_title_similarity">
<!-- <div v-show="scaleImageList[scaleImageIndex]?.resultType == 'Relight'" class="productImg_content_item_title productImg_content_item_title_similarity">
<span>{{$t('ProductImg.SelectionFunction')}}</span>
</div>
<div v-show="scaleImageList[scaleImageIndex]?.resultType == 'Relight'" class="productImg_content_item_Direction generalModel_state_item" style="margin-bottom: 1rem;">
<a-select size="large" style="width: 100%;" v-model:value="speedData.value" :options="speedList" :field-names="{ label: 'relightLabel', value: 'value' }"></a-select>
</div>
</div> -->
<div v-show="scaleImageList[scaleImageIndex]?.resultType == 'ToProductImage' && speedData.value != 'flux'" class="productImg_content_item_title productImg_content_item_title_similarity">
<span>{{$t('ProductImg.Similarity')}}</span>
</div>

View File

@@ -650,6 +650,7 @@ export default defineComponent({
}
const setDesignItemStyle = ()=>{
posiitonData.value.generateElList = []
if(!collItemDom.value)return
let elArr = collItemDom.value.querySelectorAll('.content_img_GetWidth')
designCollectionList.value.forEach((item:any,index:any)=>{
posiitonData.value.generateElList.unshift({

View File

@@ -329,9 +329,23 @@ export default defineComponent({
});
})
}
const historyChooseData = (dataValue:any)=>{
const historyChooseData = async (dataValue:any)=>{
let ifMoodTemplateUrl = true
if(dataValue?.moodBoard?.moodTemplateUrl){
await new Promise<void>((resolve, reject) => {
let img = new Image()
img.src = dataValue.moodBoard?.moodTemplateUrl
img.onload = ()=>{
resolve()
}
img.onerror = ()=>{
ifMoodTemplateUrl = false
resolve()
}
})
}
let collectionData = {
disposeMoodboard: dataValue.moodBoard?.moodTemplateId?[{
disposeMoodboard: (dataValue.moodBoard?.moodTemplateId && ifMoodTemplateUrl)?[{
id:dataValue.moodBoard?.moodTemplateId,
imgUrl:dataValue.moodBoard?.moodTemplateUrl,
resData:{

View File

@@ -29,7 +29,6 @@ import {message} from 'ant-design-vue'
import { Https } from "@/tool/https";
import { useStore } from "vuex";
import { useI18n } from "vue-i18n";
import canvasGeneral from "@/tool/canvasGeneralCopy";
import editCanvas from "@/component/Canvas/CanvasEditor/index.vue";
import FemaleAdultModel from "@/assets/images/homePage/FemaleAdultModel.png"
import FemaleChildModel from "@/assets/images/homePage/FemaleChildModel.png"
@@ -156,7 +155,6 @@ export default defineComponent({
onBeforeUnmount(()=>{
data.canvasLoad = false
data.isHiddenModel = true
// canvasGeneral.canvasClear()
})
return {
...toRefs(data),

View File

@@ -75,9 +75,9 @@
</a-slider>
<input style="margin-left: 2rem;" type="number" readonly v-model="similarity">
</div>
<div v-show="productimgMenu.value == 'Relight'" class="productImg_content_item_title productImg_content_item_title_similarity">
<!-- <div v-show="productimgMenu.value == 'Relight'" class="productImg_content_item_title productImg_content_item_title_similarity">
<span>{{$t('ProductImg.SelectionFunction')}}</span>
</div>
</div> -->
<!-- 暂时去掉 -->
<!-- <div v-show="productimgMenu.value == 'Relight'" class="productImg_content_item_Direction generalModel_state_item">
<a-select size="large" style="width: 100%;" v-model:value="speedData.value" :options="speedList" :field-names="{ label: 'relightLabel', value: 'value' }"></a-select>
@@ -157,11 +157,11 @@
<img
class="guide"
v-if="locale == 'ENGLISH' && likeList[productimgMenu.value] == 0 && generateList[productimgMenu.value] == 0"
:src="'/src/assets/images/homePage/toolsGuide/' + (productimgMenu.value == 'ToProductImage'?'productEN':'relightEN') + '.png'" alt="">
:src="'/image/toolsGuide/' + (productimgMenu.value == 'ToProductImage'?'productEN':'relightEN') + '.png'" alt="">
<img
class="guide"
v-else-if="likeList[productimgMenu.value] == 0 && generateList[productimgMenu.value] == 0"
:src="'/src/assets/images/homePage/toolsGuide/' + (productimgMenu.value == 'ToProductImage'?'productCN':'relightCN') + '.png'" alt="">
:src="'/image/toolsGuide/' + (productimgMenu.value == 'ToProductImage'?'productCN':'relightCN') + '.png'" alt="">
<generalDrag ref="generalDragLeft" :type="productimgMenu.value" :isCopy="!isDesignPage" @setBtn="selectSetBtn" :isDelete="false" :isLike="true" :list="likeList[productimgMenu.value]"></generalDrag>
</div>
<!-- </div> -->

View File

@@ -21,7 +21,7 @@
<div>{{ item?.custom }}</div>
<span style="font-size: 1.4rem;">{{ item?.customInfo }}</span>
</div>
<ul class="product_detail" :class="{'academic':item.type == 'academic'}">
<ul class="product_detail" :class="{'academic':(item.type == 'academic' && !isSelectSuccessively)}">
<li v-for="detailItem in item?.detailList">{{ detailItem }}</li>
</ul>
<div class="gallery_btn gallery_btn_radius" v-if="item?.btn != 'Contact us'" @click="createAccount">{{ item?.btn }}</div>
@@ -64,8 +64,8 @@
img: '/image/homeIntroduct/personal.png',
type:'personal',
info: "您的AI时尚设计助手",
price: '¥100',
detail: "每月·50积分",
price: 'HK$100',
detail: "每月·500积分",
highlight: "免费试用5天",
discounts: '9折优惠',
detailList: [
@@ -82,7 +82,7 @@
img: '/image/homeIntroduct/personal.png',
type:'personal',
info: "您的AI时尚设计助手",
price: '¥500',
price: 'HK$500',
detail: "每月·3500积分",
highlight: "免费试用5天",
discounts: '9折优惠',
@@ -107,10 +107,12 @@
discounts: '',
detailList: [
'灵活的自定义程序以满足学校需求',
"项目期间每月信用额度自动续期",
'可在用户之间灵活共享和分配账户信用额度',
'AI辅助设计教学功能',
'支持草图创意和设计灵感教学',
'基础3D设计功能',
"从设计灵感、草图创作到完整时装系列的尖端教学工具",
"基本3D设计功能",
"客户与技术支援",
],
btn: '联系我们',
},
@@ -121,7 +123,7 @@
img: '/image/homeIntroduct/personal.png',
type:'personal',
info: "您的AI时尚设计助手",
price: '¥5,000',
price: 'HK$5,000',
detail: "每年·50000积分",
highlight: "免费试用5天",
discounts: '9折优惠',
@@ -145,10 +147,13 @@
highlight: "",
discounts: '',
detailList: [
'全校共享积分额度',
'灵活的自定义程序以满足学校需求',
"项目期间每月信用额度自动续期",
'可在用户之间灵活共享和分配账户信用额度',
'AI辅助设计教学功能',
'支持草图创意和设计灵感教学',
'基础3D设计功能',
"从设计灵感、草图创作到完整时装系列的尖端教学工具",
"基本3D设计功能",
"客户与技术支援",
],
btn: '联系我们',
},

View File

@@ -277,7 +277,8 @@
>
<!-- <span class="icon iconfont fi-br-arrow-left"></span
> -->
<i class="fi fi-br-arrow-left"></i>
<!-- <i class="fi fi-br-arrow-left"></i> -->
<i class="fi fi-br-angle-left"></i>
<span class="forget_password_content_title">Retrieve password</span>
</div>
<div v-show="frogetPasswordStep === 1">
@@ -1092,6 +1093,24 @@ export default defineComponent({
.forget_password_content_block {
cursor: pointer;
font-size: 3.6rem;
font-weight: 500;
display: flex;
align-items: center;
margin-bottom: 1.2rem;
> i {
margin-right: 2.8rem;
font-size: 2rem;
display: flex;
cursor: pointer;
align-items: center;
width: 4.6rem;
height: 4.6rem;
border-radius: 1.2rem;
display: flex;
justify-content: center;
border: 1px solid #D8DADC;
}
}
.fi-br-arrow-left {

View File

@@ -23,7 +23,6 @@ import {message} from 'ant-design-vue'
import { Https } from "@/tool/https";
import { useStore } from "vuex";
import { useI18n } from "vue-i18n";
import canvasGeneral from "@/tool/canvasGeneralCopy";
import editCanvas from "@/component/Canvas/CanvasEditor/index.vue";
@@ -154,7 +153,6 @@ export default defineComponent({
});
onBeforeUnmount(()=>{
data.canvasLoad = false
// canvasGeneral.canvasClear()
})
return {
...toRefs(data),