Merge branch 'StableVersion' of ssh://18.167.251.121:10002/aidlab/aida_front into StableVersion
BIN
public/image/toolsGuide/detailCN.png
Normal file
|
After Width: | Height: | Size: 243 KiB |
BIN
public/image/toolsGuide/detailEN.png
Normal file
|
After Width: | Height: | Size: 240 KiB |
23
src/App.vue
@@ -1,7 +1,16 @@
|
|||||||
<template>
|
<template>
|
||||||
<router-view/>
|
<router-view/>
|
||||||
|
<div class="loading" v-show="loading"><a-spin :delay="0.5" /></div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { computed } from 'vue';
|
||||||
|
import { useStore } from 'vuex';
|
||||||
|
const store = useStore();
|
||||||
|
const loading = computed(() => store.state.loading || store.state.view_loading);
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
<style lang="less">
|
<style lang="less">
|
||||||
#app {
|
#app {
|
||||||
font-family: Avenir, Helvetica, Arial, sans-serif;
|
font-family: Avenir, Helvetica, Arial, sans-serif;
|
||||||
@@ -9,7 +18,19 @@
|
|||||||
-moz-osx-font-smoothing: grayscale;
|
-moz-osx-font-smoothing: grayscale;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
.loading{
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background-color: rgba(0,0,0,0.4);
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
z-index: 999999999999;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
.ipad{
|
.ipad{
|
||||||
*{
|
*{
|
||||||
-webkit-touch-callout:none;
|
-webkit-touch-callout:none;
|
||||||
|
|||||||
9
src/assets/images/socialMediaLogo/biliBliIcon.svg
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
10
src/assets/images/socialMediaLogo/faceBookIcon.svg
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g clip-path="url(#clip0_2427_2565)">
|
||||||
|
<path d="M12 0C5.37264 0 0 5.37264 0 12C0 17.6275 3.87456 22.3498 9.10128 23.6467V15.6672H6.62688V12H9.10128V10.4198C9.10128 6.33552 10.9498 4.4424 14.9597 4.4424C15.72 4.4424 17.0318 4.59168 17.5685 4.74048V8.06448C17.2853 8.03472 16.7933 8.01984 16.1822 8.01984C14.2147 8.01984 13.4544 8.76528 13.4544 10.703V12H17.3741L16.7006 15.6672H13.4544V23.9122C19.3963 23.1946 24.0005 18.1354 24.0005 12C24 5.37264 18.6274 0 12 0Z" fill="#2C2C2C"/>
|
||||||
|
</g>
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip0_2427_2565">
|
||||||
|
<rect width="24" height="24" fill="white"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 691 B |
10
src/assets/images/socialMediaLogo/linkedinIcon.svg
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g clip-path="url(#clip0_2427_2564)">
|
||||||
|
<path d="M22.2234 0H1.77187C0.792187 0 0 0.773438 0 1.72969V22.2656C0 23.2219 0.792187 24 1.77187 24H22.2234C23.2031 24 24 23.2219 24 22.2703V1.72969C24 0.773438 23.2031 0 22.2234 0ZM7.12031 20.4516H3.55781V8.99531H7.12031V20.4516ZM5.33906 7.43438C4.19531 7.43438 3.27188 6.51094 3.27188 5.37187C3.27188 4.23281 4.19531 3.30937 5.33906 3.30937C6.47813 3.30937 7.40156 4.23281 7.40156 5.37187C7.40156 6.50625 6.47813 7.43438 5.33906 7.43438ZM20.4516 20.4516H16.8937V14.8828C16.8937 13.5563 16.8703 11.8453 15.0422 11.8453C13.1906 11.8453 12.9094 13.2938 12.9094 14.7891V20.4516H9.35625V8.99531H12.7687V10.5609H12.8156C13.2891 9.66094 14.4516 8.70938 16.1813 8.70938C19.7859 8.70938 20.4516 11.0813 20.4516 14.1656V20.4516V20.4516Z" fill="#2C2C2C"/>
|
||||||
|
</g>
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip0_2427_2564">
|
||||||
|
<rect width="24" height="24" fill="white"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 997 B |
10
src/assets/images/socialMediaLogo/socialIcons.svg
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g clip-path="url(#clip0_2426_2350)">
|
||||||
|
<path d="M23.5233 7.12823C23.5233 7.12823 23.2913 5.49009 22.5766 4.77079C21.6717 3.8241 20.6601 3.81946 20.196 3.76377C16.8733 3.52246 11.8846 3.52246 11.8846 3.52246H11.8754C11.8754 3.52246 6.88669 3.52246 3.564 3.76377C3.09994 3.81946 2.08828 3.8241 1.18336 4.77079C0.468703 5.49009 0.241312 7.12823 0.241312 7.12823C0.241312 7.12823 0 9.05409 0 10.9753V12.7759C0 14.6971 0.236672 16.6229 0.236672 16.6229C0.236672 16.6229 0.468703 18.2611 1.17872 18.9804C2.08364 19.9271 3.27164 19.8946 3.80067 19.9967C5.70333 20.1777 11.88 20.2334 11.88 20.2334C11.88 20.2334 16.8733 20.2241 20.196 19.9874C20.6601 19.9317 21.6717 19.9271 22.5766 18.9804C23.2913 18.2611 23.5233 16.6229 23.5233 16.6229C23.5233 16.6229 23.76 14.7017 23.76 12.7759V10.9753C23.76 9.05409 23.5233 7.12823 23.5233 7.12823ZM9.42511 14.9616V8.28374L15.8431 11.6343L9.42511 14.9616Z" fill="#2C2C2C"/>
|
||||||
|
</g>
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip0_2426_2350">
|
||||||
|
<rect width="23.76" height="23.76" fill="white"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.1 KiB |
3
src/assets/images/socialMediaLogo/tikTokIcon.svg
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="21" height="24" viewBox="0 0 21 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M14.9218 0H10.9175V16.1843C10.9175 18.1127 9.37747 19.6967 7.4609 19.6967C5.54433 19.6967 4.00424 18.1127 4.00424 16.1843C4.00424 14.2905 5.51011 12.7408 7.35825 12.672V8.60871C3.28553 8.67755 0 12.0177 0 16.1843C0 20.3854 3.35398 23.76 7.49514 23.76C11.6362 23.76 14.9902 20.351 14.9902 16.1843V7.88555C16.4961 8.98748 18.3442 9.64174 20.295 9.67619V5.61287C17.2833 5.50957 14.9218 3.03026 14.9218 0Z" fill="#2C2C2C"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 532 B |
9
src/assets/images/socialMediaLogo/xiaoHongShuIcon.svg
Normal file
|
After Width: | Height: | Size: 8.7 KiB |
@@ -168,6 +168,7 @@ li {
|
|||||||
}
|
}
|
||||||
.ant-modal-mask {
|
.ant-modal-mask {
|
||||||
background-color: #666666;
|
background-color: #666666;
|
||||||
|
opacity: 0.5;
|
||||||
}
|
}
|
||||||
.select_block {
|
.select_block {
|
||||||
height: 4rem;
|
height: 4rem;
|
||||||
@@ -1249,10 +1250,14 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
|
|||||||
background: #000 !important;
|
background: #000 !important;
|
||||||
border-color: #000 !important;
|
border-color: #000 !important;
|
||||||
}
|
}
|
||||||
|
.ant-spin .ant-spin-dot {
|
||||||
|
width: 1.5em;
|
||||||
|
height: 1.5em;
|
||||||
|
}
|
||||||
.ant-spin-dot-item {
|
.ant-spin-dot-item {
|
||||||
background-color: #000000 !important;
|
background-color: #000000 !important;
|
||||||
width: 9px !important;
|
width: 0.9em !important;
|
||||||
height: 9px !important;
|
height: 0.9em !important;
|
||||||
}
|
}
|
||||||
.ant-spin {
|
.ant-spin {
|
||||||
color: #000;
|
color: #000;
|
||||||
@@ -1357,7 +1362,7 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
|
|||||||
}
|
}
|
||||||
.admin_page .admin_state_item > span {
|
.admin_page .admin_state_item > span {
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
width: 13rem;
|
min-width: 13rem;
|
||||||
}
|
}
|
||||||
.admin_page .admin_state_item > span > span {
|
.admin_page .admin_state_item > span > span {
|
||||||
color: red;
|
color: red;
|
||||||
|
|||||||
@@ -173,6 +173,7 @@ input:focus{
|
|||||||
}
|
}
|
||||||
.ant-modal-mask{
|
.ant-modal-mask{
|
||||||
background-color: #666666;
|
background-color: #666666;
|
||||||
|
opacity: .5;
|
||||||
}
|
}
|
||||||
.select_block{
|
.select_block{
|
||||||
height: 4rem;
|
height: 4rem;
|
||||||
@@ -1377,10 +1378,14 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
//loding样式
|
//loding样式
|
||||||
|
.ant-spin .ant-spin-dot{
|
||||||
|
width: 1.5em;
|
||||||
|
height: 1.5em;
|
||||||
|
}
|
||||||
.ant-spin-dot-item{
|
.ant-spin-dot-item{
|
||||||
background-color: #000000 !important;
|
background-color: #000000 !important;
|
||||||
width: 9px !important;
|
width: .9em !important;
|
||||||
height: 9px !important;
|
height: .9em !important;
|
||||||
}
|
}
|
||||||
.ant-spin{
|
.ant-spin{
|
||||||
color: #000;
|
color: #000;
|
||||||
@@ -1489,7 +1494,7 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
>span{
|
>span{
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
width: 13rem;
|
min-width: 13rem;
|
||||||
>span{
|
>span{
|
||||||
color: red;
|
color: red;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,8 @@
|
|||||||
<div class="generalModel_btn">
|
<div class="generalModel_btn">
|
||||||
<div class="generalModel_closeIcon" @click.stop="cancelDsign()">
|
<div class="generalModel_closeIcon" @click.stop="cancelDsign()">
|
||||||
<svg
|
<svg
|
||||||
width="100%" height="100%"
|
width="100%"
|
||||||
|
height="100%"
|
||||||
viewBox="0 0 46 46"
|
viewBox="0 0 46 46"
|
||||||
fill="none"
|
fill="none"
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
@@ -49,7 +50,10 @@
|
|||||||
</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('admin.UserName') }}: <span>*</span></span>
|
<span>
|
||||||
|
{{ $t('admin.UserName') }}:
|
||||||
|
<span>*</span>
|
||||||
|
</span>
|
||||||
<input
|
<input
|
||||||
v-model="userName"
|
v-model="userName"
|
||||||
:placeholder="$t('admin.enterUserName')"
|
:placeholder="$t('admin.enterUserName')"
|
||||||
@@ -58,7 +62,10 @@
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div class="admin_state_item">
|
<div class="admin_state_item">
|
||||||
<span>{{ $t('admin.UserEmail') }}: <span>*</span></span>
|
<span>
|
||||||
|
{{ $t('admin.UserEmail') }}:
|
||||||
|
<span>*</span>
|
||||||
|
</span>
|
||||||
<input
|
<input
|
||||||
v-model="userEmail"
|
v-model="userEmail"
|
||||||
:placeholder="$t('admin.enterEmail')"
|
:placeholder="$t('admin.enterEmail')"
|
||||||
@@ -67,7 +74,10 @@
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div class="admin_state_item">
|
<div class="admin_state_item">
|
||||||
<span>{{ $t('admin.Password') }}: <span>*</span></span>
|
<span>
|
||||||
|
{{ $t('admin.Password') }}:
|
||||||
|
<span>*</span>
|
||||||
|
</span>
|
||||||
<input
|
<input
|
||||||
@focus="focus"
|
@focus="focus"
|
||||||
@blur="blur"
|
@blur="blur"
|
||||||
@@ -86,6 +96,19 @@
|
|||||||
style="width: 250px"
|
style="width: 250px"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="admin_state_item" v-if="title?.value == 'Edit'">
|
||||||
|
<span>
|
||||||
|
{{ $t('admin.SubscribePlan') }}:
|
||||||
|
<span>*</span>
|
||||||
|
</span>
|
||||||
|
<a-select
|
||||||
|
v-model:value="subscriptionPlanId"
|
||||||
|
style="width: 250px"
|
||||||
|
:options="activePlanOptions"
|
||||||
|
:field-names="{ label: 'name', value: 'id' }"
|
||||||
|
:placeholder="$t('admin.SelectPlan')"
|
||||||
|
></a-select>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="allUserPoeration_btn admin_page">
|
<div class="allUserPoeration_btn admin_page">
|
||||||
<div class="admin_search_item" @click="cancelDsign">{{ $t('admin.Close') }}</div>
|
<div class="admin_search_item" @click="cancelDsign">{{ $t('admin.Close') }}</div>
|
||||||
@@ -96,7 +119,7 @@
|
|||||||
<a-spin size="large" />
|
<a-spin size="large" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script lang="ts">
|
||||||
import {
|
import {
|
||||||
defineComponent,
|
defineComponent,
|
||||||
ref,
|
ref,
|
||||||
@@ -105,90 +128,114 @@ import {
|
|||||||
onMounted,
|
onMounted,
|
||||||
nextTick,
|
nextTick,
|
||||||
toRefs,
|
toRefs,
|
||||||
} from "vue";
|
computed
|
||||||
import { Https } from "@/tool/https";
|
} from 'vue'
|
||||||
import { Modal, message } from "ant-design-vue";
|
import { Https } from '@/tool/https'
|
||||||
import { ExclamationCircleOutlined } from "@ant-design/icons-vue";
|
import { Modal, message } from 'ant-design-vue'
|
||||||
import { formatTime, isEmail } from "@/tool/util";
|
import { ExclamationCircleOutlined } from '@ant-design/icons-vue'
|
||||||
import md5 from "md5";
|
import { formatTime, isEmail } from '@/tool/util'
|
||||||
|
import md5 from 'md5'
|
||||||
import { useI18n } from 'vue-i18n'
|
import { useI18n } from 'vue-i18n'
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
components: {},
|
components: {},
|
||||||
emits: ["searchHistoryList"],
|
props: {
|
||||||
|
planOptions: {
|
||||||
|
type: Array,
|
||||||
|
default: () => []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
emits: ['searchHistoryList'],
|
||||||
setup(props, { emit }) {
|
setup(props, { emit }) {
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
|
const { planOptions } = toRefs(props)
|
||||||
|
// 筛选出状态为 ACTIVE 的订阅计划
|
||||||
|
const activePlanOptions = computed(() => {
|
||||||
|
if (!planOptions.value || !Array.isArray(planOptions.value)) {
|
||||||
|
return []
|
||||||
|
}
|
||||||
|
return planOptions.value.filter((plan: any) => plan.status === 'ACTIVE')
|
||||||
|
})
|
||||||
let operations = reactive({
|
let operations = reactive({
|
||||||
operationsModal: false,
|
operationsModal: false,
|
||||||
operationsEdit: false,
|
operationsEdit: false,
|
||||||
loadingShow: false,
|
loadingShow: false,
|
||||||
title: null,
|
title: null
|
||||||
});
|
})
|
||||||
let operationsData = reactive({
|
let operationsData = reactive({
|
||||||
accountId: -1,
|
accountId: -1,
|
||||||
userName: "",
|
userName: '',
|
||||||
userEmail: "",
|
userEmail: '',
|
||||||
password: "",
|
password: '',
|
||||||
oldPassword: "",
|
oldPassword: '',
|
||||||
credits: "",
|
credits: '',
|
||||||
});
|
subscriptionPlanId: '',
|
||||||
|
oldSubscriptionPlanId: ''
|
||||||
|
})
|
||||||
let state = ref([
|
let state = ref([
|
||||||
{
|
{
|
||||||
label: "visitor",
|
label: 'visitor',
|
||||||
value: "0",
|
value: '0'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "yearly",
|
label: 'yearly',
|
||||||
value: "1",
|
value: '1'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "monthly",
|
label: 'monthly',
|
||||||
value: "2",
|
value: '2'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "trial",
|
label: 'trial',
|
||||||
value: "3",
|
value: '3'
|
||||||
},
|
}
|
||||||
]);
|
])
|
||||||
let init = (funStr, data) => {
|
let init = (funStr, data) => {
|
||||||
operations.operationsModal = true;
|
operations.operationsModal = true
|
||||||
operations.operationsEdit = true;
|
operations.operationsEdit = true
|
||||||
operations.title = funStr;
|
operations.title = funStr
|
||||||
if (funStr.value == "Add") operations.operationsEdit = false;
|
if (funStr.value == 'Add') operations.operationsEdit = false
|
||||||
if (funStr.value == "Edit") {
|
if (funStr.value == 'Edit') {
|
||||||
operationsData.accountId = data.id;
|
operationsData.accountId = data.id
|
||||||
operationsData.userName = data.userName;
|
operationsData.userName = data.userName
|
||||||
operationsData.userEmail = data.userEmail;
|
operationsData.userEmail = data.userEmail
|
||||||
operationsData.password = data.userPassword?data.userPassword:null;
|
operationsData.password = data.userPassword ? data.userPassword : null
|
||||||
operationsData.oldPassword = data.userPassword;
|
operationsData.oldPassword = data.userPassword
|
||||||
// operationsData.validStartTime='2024-08-05T00:00:06'
|
// operationsData.validStartTime='2024-08-05T00:00:06'
|
||||||
// operationsData.validEndTime='2024-08-05T00:00:06'
|
// operationsData.validEndTime='2024-08-05T00:00:06'
|
||||||
operationsData.credits = data.creditsUsageLimit;
|
operationsData.credits = data.creditsUsageLimit
|
||||||
|
operationsData.subscriptionPlanId = data.subscriptionPlanId || ''
|
||||||
|
operationsData.oldSubscriptionPlanId = data.subscriptionPlanId || ''
|
||||||
// operationsData.accountId = data.accountId
|
// operationsData.accountId = data.accountId
|
||||||
// operationsData.userName = data.userName
|
// operationsData.userName = data.userName
|
||||||
// operationsData.userEmail = data.userEmail
|
// operationsData.userEmail = data.userEmail
|
||||||
// operationsData.validStartTime = formatTime(data.validStartTime)
|
// operationsData.validStartTime = formatTime(data.validStartTime)
|
||||||
// operationsData.validEndTime = formatTime(data.validEndTime)
|
// operationsData.validEndTime = formatTime(data.validEndTime)
|
||||||
}
|
}
|
||||||
};
|
if (funStr.value == 'Add') {
|
||||||
let focus = (event) => {
|
operationsData.subscriptionPlanId = ''
|
||||||
|
operationsData.oldSubscriptionPlanId = ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let focus = event => {
|
||||||
if (operationsData.password == operationsData.oldPassword) {
|
if (operationsData.password == operationsData.oldPassword) {
|
||||||
operationsData.password = "";
|
operationsData.password = ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let blur = event => {
|
||||||
|
console.log(operationsData.password == '' && operationsData.oldPassword)
|
||||||
|
if (operationsData.password == '' && operationsData.oldPassword) {
|
||||||
|
operationsData.password = operationsData.oldPassword
|
||||||
}
|
}
|
||||||
};
|
|
||||||
let blur = (event) => {
|
|
||||||
console.log(operationsData.password == "" && operationsData.oldPassword);
|
|
||||||
if (operationsData.password == "" && operationsData.oldPassword) {
|
|
||||||
operationsData.password = operationsData.oldPassword;
|
|
||||||
}
|
}
|
||||||
};
|
|
||||||
let setAddData = () => {
|
let setAddData = () => {
|
||||||
return {
|
return {
|
||||||
creditsUsageLimit: operationsData.credits,
|
creditsUsageLimit: operationsData.credits,
|
||||||
userEmail: operationsData.userEmail,
|
userEmail: operationsData.userEmail,
|
||||||
userPassword: operationsData.password?md5(operationsData.password + "abc"):'',
|
userPassword: operationsData.password ? md5(operationsData.password + 'abc') : '',
|
||||||
userName: operationsData.userName,
|
userName: operationsData.userName,
|
||||||
};
|
subscriptionPlanId: operationsData.subscriptionPlanId
|
||||||
};
|
}
|
||||||
|
}
|
||||||
let setEditData = () => {
|
let setEditData = () => {
|
||||||
return {
|
return {
|
||||||
id: operationsData.accountId,
|
id: operationsData.accountId,
|
||||||
@@ -198,57 +245,63 @@ export default defineComponent({
|
|||||||
userPassword:
|
userPassword:
|
||||||
operationsData.password == operationsData.oldPassword
|
operationsData.password == operationsData.oldPassword
|
||||||
? null
|
? null
|
||||||
: md5(operationsData.password + "abc"),
|
: md5(operationsData.password + 'abc'),
|
||||||
};
|
subscriptionPlanId: operationsData.subscriptionPlanId
|
||||||
};
|
}
|
||||||
|
}
|
||||||
let cancelDsign = () => {
|
let cancelDsign = () => {
|
||||||
operationsData.accountId = -1;
|
operationsData.accountId = -1
|
||||||
operationsData.userName = "";
|
operationsData.userName = ''
|
||||||
operationsData.userEmail = "";
|
operationsData.userEmail = ''
|
||||||
operationsData.password = "";
|
operationsData.password = ''
|
||||||
operationsData.credits = "";
|
operationsData.credits = ''
|
||||||
operations.operationsModal = false;
|
operationsData.subscriptionPlanId = ''
|
||||||
};
|
operationsData.oldSubscriptionPlanId = ''
|
||||||
|
operations.operationsModal = false
|
||||||
|
}
|
||||||
let setOk = () => {
|
let setOk = () => {
|
||||||
let data;
|
let data
|
||||||
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('admin.jsContent1'));
|
message.info(t('admin.jsContent1'))
|
||||||
return;
|
return
|
||||||
}
|
}
|
||||||
if (
|
if (!data.userName || !data.userEmail || !data.userPassword)
|
||||||
!data.userName ||
|
return message.warning(t('admin.jsContent2'))
|
||||||
!data.userEmail ||
|
Https.axiosPost(Https.httpUrls.addOrUpdateSubAccount, data).then(rv => {
|
||||||
!data.userPassword
|
|
||||||
)
|
|
||||||
return message.warning(t('admin.jsContent2'));
|
|
||||||
Https.axiosPost(Https.httpUrls.addOrUpdateSubAccount, data).then(
|
|
||||||
(rv) => {
|
|
||||||
if (rv) {
|
if (rv) {
|
||||||
cancelDsign();
|
cancelDsign()
|
||||||
emit("searchHistoryList");
|
emit('searchHistoryList')
|
||||||
}
|
}
|
||||||
}
|
})
|
||||||
);
|
|
||||||
} else {
|
} else {
|
||||||
data = setEditData();
|
data = setEditData()
|
||||||
if (!isEmail(data.userEmail)) {
|
if (!isEmail(data.userEmail)) {
|
||||||
message.info("The email format is incorrect");
|
message.info('The email format is incorrect')
|
||||||
return;
|
return
|
||||||
}
|
}
|
||||||
if (!data.userName || !data.userEmail)
|
if (!data.userName || !data.userEmail || !data.subscriptionPlanId)
|
||||||
return message.warning("Please check the input box marked with *");
|
return message.warning('Please check the input box marked with *')
|
||||||
Https.axiosPost(Https.httpUrls.addOrUpdateSubAccount, data).then(
|
const needSwitchPlan =
|
||||||
(rv) => {
|
operationsData.subscriptionPlanId &&
|
||||||
|
operationsData.subscriptionPlanId !== operationsData.oldSubscriptionPlanId
|
||||||
|
Https.axiosPost(Https.httpUrls.addOrUpdateSubAccount, data).then(async rv => {
|
||||||
if (rv) {
|
if (rv) {
|
||||||
cancelDsign();
|
if (needSwitchPlan) {
|
||||||
emit("searchHistoryList");
|
await Https.axiosGet(Https.httpUrls.switchSubAccountSubscribePlan, {
|
||||||
|
params: {
|
||||||
|
targetSubscriptionPlanId: operationsData.subscriptionPlanId,
|
||||||
|
subAccId: operationsData.accountId
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
cancelDsign()
|
||||||
|
emit('searchHistoryList')
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
return {
|
return {
|
||||||
...toRefs(operations),
|
...toRefs(operations),
|
||||||
...toRefs(operationsData),
|
...toRefs(operationsData),
|
||||||
@@ -258,14 +311,16 @@ export default defineComponent({
|
|||||||
focus,
|
focus,
|
||||||
blur,
|
blur,
|
||||||
setOk,
|
setOk,
|
||||||
};
|
planOptions,
|
||||||
|
activePlanOptions
|
||||||
|
}
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {};
|
return {}
|
||||||
},
|
},
|
||||||
mounted() {},
|
mounted() {},
|
||||||
methods: {},
|
methods: {}
|
||||||
});
|
})
|
||||||
</script>
|
</script>
|
||||||
<style lang="less" scoped>
|
<style lang="less" scoped>
|
||||||
:deep(.allUserPoeration_modal) {
|
:deep(.allUserPoeration_modal) {
|
||||||
|
|||||||
@@ -16,29 +16,6 @@
|
|||||||
</template>
|
</template>
|
||||||
</a-range-picker>
|
</a-range-picker>
|
||||||
</div>
|
</div>
|
||||||
<!-- <div class="admin_state_item">
|
|
||||||
<span>Country or Region:</span>
|
|
||||||
<a-select
|
|
||||||
v-model:value="country"
|
|
||||||
:allowClear="true"
|
|
||||||
show-search
|
|
||||||
style="width: 230px"
|
|
||||||
:filter-option="filterOption"
|
|
||||||
placeholder="Select Item..."
|
|
||||||
max-tag-count="responsive"
|
|
||||||
:options="allCountry"
|
|
||||||
></a-select>
|
|
||||||
</div> -->
|
|
||||||
<!-- <div class="admin_state_item">
|
|
||||||
<span>Email:</span>
|
|
||||||
<input
|
|
||||||
v-model="email"
|
|
||||||
placeholder="Please enter email"
|
|
||||||
@keydown.enter="gettrialList"
|
|
||||||
type="text"
|
|
||||||
style="width: 230px"
|
|
||||||
/>
|
|
||||||
</div> -->
|
|
||||||
<div class="admin_state_item">
|
<div class="admin_state_item">
|
||||||
<span>{{ $t('admin.UserName') }}:</span>
|
<span>{{ $t('admin.UserName') }}:</span>
|
||||||
<a-select
|
<a-select
|
||||||
@@ -53,19 +30,6 @@
|
|||||||
@keydown.enter="gettrialList"
|
@keydown.enter="gettrialList"
|
||||||
></a-select>
|
></a-select>
|
||||||
</div>
|
</div>
|
||||||
<!-- <div class="admin_state_item">
|
|
||||||
<span>User Type:</span>
|
|
||||||
<a-select
|
|
||||||
v-model:value="systemUser"
|
|
||||||
size="large"
|
|
||||||
style="width: 230px"
|
|
||||||
optionFilterProp="label"
|
|
||||||
:options="state"
|
|
||||||
placeholder="Please select"
|
|
||||||
allowClear
|
|
||||||
show-search
|
|
||||||
></a-select>
|
|
||||||
</div> -->
|
|
||||||
</div>
|
</div>
|
||||||
<div class="admin_search">
|
<div class="admin_search">
|
||||||
<div class="admin_search_item" @click="searchHistoryList">
|
<div class="admin_search_item" @click="searchHistoryList">
|
||||||
@@ -116,6 +80,24 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="admin_table_content" ref="historyTable">
|
<div class="admin_table_content" ref="historyTable">
|
||||||
|
<div class="admin_state_list plan_list">
|
||||||
|
<div
|
||||||
|
v-for="plan in planFilterOptions"
|
||||||
|
:key="plan.id"
|
||||||
|
class="plan_item"
|
||||||
|
:class="{
|
||||||
|
active: subscriptionPlanId === plan.id,
|
||||||
|
disabled: plan.status === 'PENDING'
|
||||||
|
}"
|
||||||
|
@click="plan.status !== 'PENDING' && selectPlanFilter(plan.id)"
|
||||||
|
>
|
||||||
|
<span class="plan_name">{{ plan.name }}</span>
|
||||||
|
<MoreOutlined
|
||||||
|
class="plan_more_icon"
|
||||||
|
@click.stop="plan.status !== 'PENDING' && openPlanRenameModal(plan)"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<a-table
|
<a-table
|
||||||
@resizeColumn="handleResizeColumn"
|
@resizeColumn="handleResizeColumn"
|
||||||
:loading="tableLoading"
|
:loading="tableLoading"
|
||||||
@@ -147,12 +129,6 @@
|
|||||||
<div class="operate_item" @click="deleteAagree(record)">
|
<div class="operate_item" @click="deleteAagree(record)">
|
||||||
{{ $t('admin.Delete') }}
|
{{ $t('admin.Delete') }}
|
||||||
</div>
|
</div>
|
||||||
<!-- <div
|
|
||||||
class="operate_item"
|
|
||||||
@click="deleteGroup(record, index)"
|
|
||||||
>
|
|
||||||
Delete
|
|
||||||
</div> -->
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</a-table>
|
</a-table>
|
||||||
@@ -160,7 +136,31 @@
|
|||||||
<allUserPoerationsVue
|
<allUserPoerationsVue
|
||||||
ref="allUserPoerationsVue"
|
ref="allUserPoerationsVue"
|
||||||
@searchHistoryList="searchHistoryList"
|
@searchHistoryList="searchHistoryList"
|
||||||
|
:plan-options="planFilterOptions"
|
||||||
></allUserPoerationsVue>
|
></allUserPoerationsVue>
|
||||||
|
<div class="renamePlanModal" ref="renamePlanModal"></div>
|
||||||
|
<!-- 重命名订阅计划弹窗 -->
|
||||||
|
<a-modal
|
||||||
|
v-model:visible="renamePlanModalVisible"
|
||||||
|
:title="$t('admin.RenamePlan')"
|
||||||
|
@ok="confirmRenamePlan"
|
||||||
|
@cancel="cancelRenamePlan"
|
||||||
|
:ok-text="$t('admin.OK')"
|
||||||
|
:cancel-text="$t('admin.Cancel')"
|
||||||
|
:get-container="() => $refs.renamePlanModal"
|
||||||
|
>
|
||||||
|
<div class="rename-plan-form">
|
||||||
|
<div class="admin_state_item">
|
||||||
|
<span>{{ $t('admin.PlanName') }}:</span>
|
||||||
|
<a-input
|
||||||
|
v-model:value="renamePlanForm.planName"
|
||||||
|
:placeholder="$t('admin.InputPlanName')"
|
||||||
|
style="width: 250px"
|
||||||
|
@pressEnter="confirmRenamePlan"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</a-modal>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
@@ -171,19 +171,23 @@ import {
|
|||||||
computed,
|
computed,
|
||||||
reactive,
|
reactive,
|
||||||
toRefs,
|
toRefs,
|
||||||
onMounted
|
unref,
|
||||||
|
watch
|
||||||
} from 'vue'
|
} from 'vue'
|
||||||
import { formatTime } from '@/tool/util'
|
import { formatTime } from '@/tool/util'
|
||||||
import { useStore } from 'vuex'
|
import { useStore } from 'vuex'
|
||||||
import { Https } from '@/tool/https'
|
import { Https } from '@/tool/https'
|
||||||
import { Modal, message } from 'ant-design-vue'
|
import { Modal, message, Input } from 'ant-design-vue'
|
||||||
import { ExclamationCircleOutlined } from '@ant-design/icons-vue'
|
import { ExclamationCircleOutlined, MoreOutlined } from '@ant-design/icons-vue'
|
||||||
import allUserPoerationsVue from './addAllUser.vue'
|
import allUserPoerationsVue from './addAllUser.vue'
|
||||||
import { useI18n } from 'vue-i18n'
|
import { useI18n } from 'vue-i18n'
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
components: { allUserPoerationsVue },
|
components: { allUserPoerationsVue, MoreOutlined },
|
||||||
setup() {
|
setup() {
|
||||||
const store: any = useStore()
|
const store: any = useStore()
|
||||||
|
const currentOrganizationId = computed(
|
||||||
|
() => store.state.UserHabit.userDetail.organizationId
|
||||||
|
)
|
||||||
const selectedRowKeys = ref([]) as any
|
const selectedRowKeys = ref([]) as any
|
||||||
const onSelectChange = (changableRowKeys: string[]) => {
|
const onSelectChange = (changableRowKeys: string[]) => {
|
||||||
selectedRowKeys.value = changableRowKeys
|
selectedRowKeys.value = changableRowKeys
|
||||||
@@ -202,6 +206,7 @@ export default defineComponent({
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
|
|
||||||
let filterData: any = reactive({
|
let filterData: any = reactive({
|
||||||
@@ -217,10 +222,16 @@ export default defineComponent({
|
|||||||
systemUser: '',
|
systemUser: '',
|
||||||
order: '', //'Ascending 升序 Descending 降序'
|
order: '', //'Ascending 升序 Descending 降序'
|
||||||
orderBy: '',
|
orderBy: '',
|
||||||
userName: ''
|
userName: '',
|
||||||
|
subscriptionPlanId: ''
|
||||||
})
|
})
|
||||||
|
|
||||||
let renameData: any = ref({}) //修改名字选中的数据
|
let renameData: any = ref({}) //修改名字选中的数据
|
||||||
|
const renamePlanModalVisible = ref(false)
|
||||||
|
const renamePlanForm = reactive({
|
||||||
|
planId: null as number | null,
|
||||||
|
planName: ''
|
||||||
|
})
|
||||||
const columns: any = computed(() => {
|
const columns: any = computed(() => {
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
@@ -247,13 +258,6 @@ export default defineComponent({
|
|||||||
key: 'userName',
|
key: 'userName',
|
||||||
width: 150,
|
width: 150,
|
||||||
ellipsis: true
|
ellipsis: true
|
||||||
// customRender: (record: any) => {
|
|
||||||
// let time = formatTime(
|
|
||||||
// record.text / 1000,
|
|
||||||
// "YYYY-MM-DD hh:mm:ss"
|
|
||||||
// );
|
|
||||||
// return time;
|
|
||||||
// },
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: t('admin.language'),
|
title: t('admin.language'),
|
||||||
@@ -277,10 +281,6 @@ export default defineComponent({
|
|||||||
{
|
{
|
||||||
title: t('admin.Credits'),
|
title: t('admin.Credits'),
|
||||||
align: 'center',
|
align: 'center',
|
||||||
// width: 150,
|
|
||||||
// minWidth: 100,
|
|
||||||
// maxWidth: 200,
|
|
||||||
// resizable: true,
|
|
||||||
dataIndex: 'credits',
|
dataIndex: 'credits',
|
||||||
key: 'credits',
|
key: 'credits',
|
||||||
width: 100,
|
width: 100,
|
||||||
@@ -308,7 +308,6 @@ export default defineComponent({
|
|||||||
width: 120,
|
width: 120,
|
||||||
align: 'center',
|
align: 'center',
|
||||||
fixed: 'right',
|
fixed: 'right',
|
||||||
// slots:{customRender:'action'}
|
|
||||||
Operations: true
|
Operations: true
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -353,7 +352,8 @@ export default defineComponent({
|
|||||||
(filterData.order = ''), //'Ascending 升序 Descending 降序'
|
(filterData.order = ''), //'Ascending 升序 Descending 降序'
|
||||||
(filterData.orderBy = ''), //'Ascending 升序 Descending 降序'
|
(filterData.orderBy = ''), //'Ascending 升序 Descending 降序'
|
||||||
(filterData.systemUser = ''),
|
(filterData.systemUser = ''),
|
||||||
(filterData.userName = '')
|
(filterData.userName = ''),
|
||||||
|
(filterData.subscriptionPlanId = '')
|
||||||
}
|
}
|
||||||
let setHistoryListData = () => {
|
let setHistoryListData = () => {
|
||||||
let startDate: any = filterData.rangePickerValue?.[0]
|
let startDate: any = filterData.rangePickerValue?.[0]
|
||||||
@@ -376,18 +376,17 @@ export default defineComponent({
|
|||||||
order: filterData.order,
|
order: filterData.order,
|
||||||
orderBy: filterData.orderBy,
|
orderBy: filterData.orderBy,
|
||||||
// userName: filterData.userName,
|
// userName: filterData.userName,
|
||||||
userName: filterData.ids
|
userName: filterData.ids,
|
||||||
|
subscriptionPlanId: filterData.subscriptionPlanId
|
||||||
}
|
}
|
||||||
return data
|
return data
|
||||||
}
|
}
|
||||||
//获取列表
|
//获取列表
|
||||||
let gettrialList = () => {
|
const gettrialList = () => {
|
||||||
filter.tableLoading = true
|
filter.tableLoading = true
|
||||||
let data = setHistoryListData()
|
let data = setHistoryListData()
|
||||||
Https.axiosPost(Https.httpUrls.subAccountList, data).then((rv: any) => {
|
Https.axiosPost(Https.httpUrls.subAccountList, data).then((rv: any) => {
|
||||||
if (rv) {
|
if (rv) {
|
||||||
console.log(rv)
|
|
||||||
// this.dataList = rv
|
|
||||||
filter.dataList = rv.content
|
filter.dataList = rv.content
|
||||||
filterData.total = rv.total
|
filterData.total = rv.total
|
||||||
filter.tableLoading = false
|
filter.tableLoading = false
|
||||||
@@ -416,6 +415,66 @@ export default defineComponent({
|
|||||||
// 使用 option.label 进行搜索
|
// 使用 option.label 进行搜索
|
||||||
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
|
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
|
||||||
}
|
}
|
||||||
|
// 订阅计划筛选(按钮点击)
|
||||||
|
const selectPlanFilter = async (planId: string) => {
|
||||||
|
filterData.subscriptionPlanId = planId
|
||||||
|
// 切换管理员订阅计划
|
||||||
|
Https.axiosGet(Https.httpUrls.switchSubscribePlan, {
|
||||||
|
params: {
|
||||||
|
targetSubscriptionPlanId: planId,
|
||||||
|
adminAccId: store.state.UserHabit.userDetail.id
|
||||||
|
}
|
||||||
|
}).then((res: any) => {
|
||||||
|
console.log(res)
|
||||||
|
})
|
||||||
|
searchHistoryList()
|
||||||
|
}
|
||||||
|
const planFilterOptions = ref([])
|
||||||
|
const fetchSubscribePlanList = () => {
|
||||||
|
const orgId = currentOrganizationId.value
|
||||||
|
if (!orgId) return
|
||||||
|
Https.axiosPost(Https.httpUrls.searchSubscribeByOrg, {
|
||||||
|
organizationId: orgId,
|
||||||
|
status: ['ACTIVE', 'PENDING']
|
||||||
|
}).then(res => {
|
||||||
|
// 将与当前用户 subscriptionPlanId 相同的订阅计划放到第一个
|
||||||
|
const userSubscriptionPlanId = store.state.UserHabit.userDetail.subscriptionPlanId
|
||||||
|
if (userSubscriptionPlanId && Array.isArray(res)) {
|
||||||
|
const sortedList = [...res].sort((a: any, b: any) => {
|
||||||
|
const isAUserPlan = a.id == userSubscriptionPlanId
|
||||||
|
const isBUserPlan = b.id == userSubscriptionPlanId
|
||||||
|
if (isAUserPlan && !isBUserPlan) return -1
|
||||||
|
if (!isAUserPlan && isBUserPlan) return 1
|
||||||
|
return 0
|
||||||
|
})
|
||||||
|
planFilterOptions.value = sortedList
|
||||||
|
} else {
|
||||||
|
planFilterOptions.value = res
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 监听组织ID,获取到值后再拉取订阅计划
|
||||||
|
watch(
|
||||||
|
() => currentOrganizationId.value,
|
||||||
|
orgId => {
|
||||||
|
if (orgId) {
|
||||||
|
fetchSubscribePlanList()
|
||||||
|
const userSubscriptionPlanId =
|
||||||
|
store.state.UserHabit.userDetail.subscriptionPlanId
|
||||||
|
if (userSubscriptionPlanId) {
|
||||||
|
selectPlanFilter(userSubscriptionPlanId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ immediate: true }
|
||||||
|
)
|
||||||
|
// 打开重命名弹窗(基于当前点击的计划)
|
||||||
|
const openPlanRenameModal = plan => {
|
||||||
|
renamePlanForm.planId = plan.id
|
||||||
|
renamePlanForm.planName = plan?.name || ''
|
||||||
|
renamePlanModalVisible.value = true
|
||||||
|
console.log(renamePlanForm)
|
||||||
|
}
|
||||||
let addhHistoryList = () => {
|
let addhHistoryList = () => {
|
||||||
allUserPoerationsVue.value.init({ value: 'Add', label: t('admin.add') }, '')
|
allUserPoerationsVue.value.init({ value: 'Add', label: t('admin.add') }, '')
|
||||||
}
|
}
|
||||||
@@ -520,6 +579,33 @@ export default defineComponent({
|
|||||||
gettrialList()
|
gettrialList()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 确认重命名
|
||||||
|
const confirmRenamePlan = () => {
|
||||||
|
if (!renamePlanForm.planName || !renamePlanForm.planName.trim()) {
|
||||||
|
message.warning(t('admin.PlanNameRequired'))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
Https.axiosPost(Https.httpUrls.updateSubscribePlan, {
|
||||||
|
id: renamePlanForm.planId,
|
||||||
|
name: renamePlanForm.planName.trim()
|
||||||
|
})
|
||||||
|
.then((rv: any) => {
|
||||||
|
message.success(t('admin.RenamePlanSuccess'))
|
||||||
|
renamePlanModalVisible.value = false
|
||||||
|
fetchSubscribePlanList()
|
||||||
|
})
|
||||||
|
.catch((error: any) => {
|
||||||
|
message.error(error.message || t('admin.RenamePlanFailed'))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 取消重命名
|
||||||
|
const cancelRenamePlan = () => {
|
||||||
|
renamePlanModalVisible.value = false
|
||||||
|
renamePlanForm.planId = null
|
||||||
|
renamePlanForm.planName = ''
|
||||||
|
}
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
let allCountry: any = sessionStorage.getItem('allCountry')
|
let allCountry: any = sessionStorage.getItem('allCountry')
|
||||||
if (allCountry) {
|
if (allCountry) {
|
||||||
@@ -544,7 +630,15 @@ export default defineComponent({
|
|||||||
ExportAccountData,
|
ExportAccountData,
|
||||||
uploadTemplate,
|
uploadTemplate,
|
||||||
deleteList,
|
deleteList,
|
||||||
deleteAagree
|
deleteAagree,
|
||||||
|
planFilterOptions,
|
||||||
|
selectPlanFilter,
|
||||||
|
openPlanRenameModal,
|
||||||
|
renamePlanModalVisible,
|
||||||
|
renamePlanForm,
|
||||||
|
confirmRenamePlan,
|
||||||
|
cancelRenamePlan,
|
||||||
|
fetchSubscribePlanList
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
@@ -556,13 +650,35 @@ export default defineComponent({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
let historyTable: any = this.$refs.historyTable
|
this.updateTableHeight()
|
||||||
this.historyTableHeight = historyTable.clientHeight - 200
|
window.addEventListener('resize', this.updateTableHeight)
|
||||||
},
|
},
|
||||||
methods: {}
|
beforeUnmount() {
|
||||||
|
window.removeEventListener('resize', this.updateTableHeight)
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
updateTableHeight() {
|
||||||
|
const historyTable: any = this.$refs.historyTable
|
||||||
|
if (historyTable) {
|
||||||
|
// 为底部分页器预留固定空间,使表格部分高度固定且分页器始终可见
|
||||||
|
this.historyTableHeight = historyTable.clientHeight - 200
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
<style lang="less" scoped>
|
<style lang="less" scoped>
|
||||||
|
.admin_page {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
.admin_table_content {
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
.admin_page .admin_table_search .admin_state {
|
.admin_page .admin_table_search .admin_state {
|
||||||
display: flex;
|
display: flex;
|
||||||
width: 70%;
|
width: 70%;
|
||||||
@@ -578,6 +694,79 @@ export default defineComponent({
|
|||||||
font-size: 1.6rem;
|
font-size: 1.6rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.plan_list {
|
||||||
|
margin-top: 1rem;
|
||||||
|
display: flex;
|
||||||
|
// flex-wrap: wrap;
|
||||||
|
padding-left: 2.8rem;
|
||||||
|
column-gap: 0.6rem;
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
.plan_item {
|
||||||
|
height: 4rem;
|
||||||
|
width: auto;
|
||||||
|
min-width: 10rem;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
// font-size: 1.8rem;
|
||||||
|
|
||||||
|
font-weight: 600;
|
||||||
|
border-radius: 1.3rem;
|
||||||
|
color: #fff;
|
||||||
|
cursor: pointer;
|
||||||
|
border: 1.8px solid #000;
|
||||||
|
background-color: #000;
|
||||||
|
padding: 0 1rem 0 2rem;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: #000;
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.active {
|
||||||
|
background: #ffffff;
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.disabled {
|
||||||
|
opacity: 0.5;
|
||||||
|
cursor: not-allowed;
|
||||||
|
background-color: #d9d9d9;
|
||||||
|
border-color: #d9d9d9;
|
||||||
|
color: #999;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background-color: #d9d9d9;
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.plan_item {
|
||||||
|
column-gap: 0.6rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plan_more_icon {
|
||||||
|
font-size: 1.6rem;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.subscription-plan-cell {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
.rename-plan-form {
|
||||||
|
padding: 2rem 0;
|
||||||
|
.admin_state_item {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
> span {
|
||||||
|
width: 10rem;
|
||||||
|
margin-right: 1rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
.all-user {
|
.all-user {
|
||||||
.admin_table_content {
|
.admin_table_content {
|
||||||
:deep(.ant-table-wrapper) {
|
:deep(.ant-table-wrapper) {
|
||||||
|
|||||||
1037
src/component/Administrator/subscriptionPlan.vue
Normal file
@@ -902,7 +902,7 @@ const changeCanvas = async (command) => {
|
|||||||
...command, // 传递完整的命令数据
|
...command, // 传递完整的命令数据
|
||||||
};
|
};
|
||||||
emit("changeCanvas", commandData);
|
emit("changeCanvas", commandData);
|
||||||
if (command.canUndo || command.canRedo) {
|
if ((command.canUndo || command.canRedo) && props.enabledRedGreenMode) {
|
||||||
setTimeout(async () => {
|
setTimeout(async () => {
|
||||||
const imageData = await canvasManager.exportImage({
|
const imageData = await canvasManager.exportImage({
|
||||||
restoreOpacityInRedGreen: true, // 恢复红绿图模式下的透明度
|
restoreOpacityInRedGreen: true, // 恢复红绿图模式下的透明度
|
||||||
|
|||||||
@@ -555,23 +555,17 @@ export class ExportManager {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取固定图层对象的边界矩形(包含位置、尺寸、缩放等信息)
|
|
||||||
const fixedBounds = fixedLayerObject?.getBoundingRect?.();
|
|
||||||
|
|
||||||
// 使用固定图层的实际显示尺寸作为导出画布尺寸
|
// 使用固定图层的实际显示尺寸作为导出画布尺寸
|
||||||
const canvasWidth = Math.round(fixedBounds.width);
|
const canvasWidth = Math.round(fixedLayerObject.width * fixedLayerObject.scaleX);
|
||||||
const canvasHeight = Math.round(fixedBounds.height);
|
const canvasHeight = Math.round(fixedLayerObject.height * fixedLayerObject.scaleY);
|
||||||
|
|
||||||
console.log(`红绿图模式导出,画布尺寸: ${canvasWidth}x${canvasHeight}`);
|
console.log(`红绿图模式导出,画布尺寸: ${canvasWidth}x${canvasHeight}`);
|
||||||
console.log("固定图层边界:", fixedBounds);
|
|
||||||
|
|
||||||
// 创建固定尺寸的临时画布
|
// 创建固定尺寸的临时画布
|
||||||
const scaleFactor = 2; // 高清导出
|
const scaleFactor = 2; // 高清导出
|
||||||
const tempCanvas = document.createElement("canvas");
|
const tempCanvas = document.createElement("canvas");
|
||||||
tempCanvas.width = canvasWidth * scaleFactor;
|
tempCanvas.width = canvasWidth * scaleFactor;
|
||||||
tempCanvas.height = canvasHeight * scaleFactor;
|
tempCanvas.height = canvasHeight * scaleFactor;
|
||||||
tempCanvas.style.width = canvasWidth + "px";
|
|
||||||
tempCanvas.style.height = canvasHeight + "px";
|
|
||||||
|
|
||||||
const tempFabricCanvas = new fabric.StaticCanvas(tempCanvas, {
|
const tempFabricCanvas = new fabric.StaticCanvas(tempCanvas, {
|
||||||
width: canvasWidth,
|
width: canvasWidth,
|
||||||
@@ -584,8 +578,7 @@ export class ExportManager {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
// 获取裁剪路径对象(如果存在)
|
// 获取裁剪路径对象(如果存在)
|
||||||
const clipPathObject = await this._getClipPathObject(fixedBounds);
|
const clipPathObject = await this._getClipPathObject(fixedLayerObject);
|
||||||
|
|
||||||
// 克隆并添加所有对象到临时画布,需要调整位置相对于固定图层
|
// 克隆并添加所有对象到临时画布,需要调整位置相对于固定图层
|
||||||
for (let i = 0; i < objectsToExport.length; i++) {
|
for (let i = 0; i < objectsToExport.length; i++) {
|
||||||
const obj = objectsToExport[i];
|
const obj = objectsToExport[i];
|
||||||
@@ -594,19 +587,20 @@ export class ExportManager {
|
|||||||
restoreOpacityInRedGreen && true
|
restoreOpacityInRedGreen && true
|
||||||
);
|
);
|
||||||
if (cloned) {
|
if (cloned) {
|
||||||
// 调整对象位置:将原画布坐标转换为以固定图层为原点的相对坐标
|
|
||||||
cloned.set({
|
cloned.set({
|
||||||
left: cloned.left - fixedBounds.left,
|
left: 0,
|
||||||
top: cloned.top - fixedBounds.top,
|
top: 0,
|
||||||
|
originX: "left",
|
||||||
|
originY: "top",
|
||||||
});
|
});
|
||||||
|
|
||||||
// 更新对象坐标
|
// 更新对象坐标
|
||||||
cloned.setCoords();
|
cloned.setCoords();
|
||||||
|
|
||||||
// 设置裁剪路径到对象
|
// 设置裁剪路径到对象
|
||||||
if (clipPathObject) {
|
// if (clipPathObject) {
|
||||||
cloned.clipPath = clipPathObject;
|
// cloned.clipPath = clipPathObject;
|
||||||
}
|
// }
|
||||||
|
|
||||||
tempFabricCanvas.add(cloned);
|
tempFabricCanvas.add(cloned);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -61,7 +61,7 @@
|
|||||||
<model
|
<model
|
||||||
ref="model"
|
ref="model"
|
||||||
:key="positionKey"
|
:key="positionKey"
|
||||||
|
@addDetail="addDetail"
|
||||||
@canvasReload="canvasReload"
|
@canvasReload="canvasReload"
|
||||||
@detailEdit="detailEdit"
|
@detailEdit="detailEdit"
|
||||||
@addSketch="()=>isEditPattern.value = ''"
|
@addSketch="()=>isEditPattern.value = ''"
|
||||||
@@ -78,7 +78,16 @@
|
|||||||
<div class="item detailRight" :class="{canvas:isEditPattern.value}">
|
<div class="item detailRight" :class="{canvas:isEditPattern.value}">
|
||||||
<div class="submit">
|
<div class="submit">
|
||||||
</div>
|
</div>
|
||||||
<div class="contentRight" v-if="currentDetailType && !isEditPattern.value">
|
<div class="contentRight" v-if="currentDetailType === 'sketch' && !selectDetail?.newDetail?.[currentDetailType] && !selectDetail.sketchString && !isEditPattern.value">
|
||||||
|
<img
|
||||||
|
style="width: 100%; height: 100%;object-fit: contain;"
|
||||||
|
:src="
|
||||||
|
'/image/toolsGuide/' +
|
||||||
|
(locale == 'ENGLISH' ? 'detailEN' : 'detailCN') +
|
||||||
|
'.png'
|
||||||
|
" alt="">
|
||||||
|
</div>
|
||||||
|
<div class="contentRight" v-else-if="currentDetailType && !isEditPattern.value">
|
||||||
<detailRight ref="detailRight"></detailRight>
|
<detailRight ref="detailRight"></detailRight>
|
||||||
<div class="btn"
|
<div class="btn"
|
||||||
v-show="
|
v-show="
|
||||||
@@ -102,7 +111,7 @@
|
|||||||
</div> -->
|
</div> -->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<addDetails ref="addDetails" @setSloganData="setSloganData"></addDetails>
|
||||||
</a-modal>
|
</a-modal>
|
||||||
<div class="mark_loading" v-show="loadingShow">
|
<div class="mark_loading" v-show="loadingShow">
|
||||||
<a-spin size="large" />
|
<a-spin size="large" />
|
||||||
@@ -128,17 +137,18 @@ import { useI18n } from 'vue-i18n'
|
|||||||
import addDetails from '@/component/Detail/addDetails.vue'
|
import addDetails from '@/component/Detail/addDetails.vue'
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
components:{
|
components:{
|
||||||
detailLeft,model,detailRight,canvasBox
|
detailLeft,model,detailRight,canvasBox,addDetails
|
||||||
},
|
},
|
||||||
emits:['destroy'],
|
emits:['destroy'],
|
||||||
setup(props,{emit}) {
|
setup(props,{emit}) {
|
||||||
const store = useStore();
|
const store = useStore();
|
||||||
|
const {locale} = useI18n()
|
||||||
const detailDom = reactive({
|
const detailDom = reactive({
|
||||||
model:null,
|
model:null,
|
||||||
canvasBox,
|
canvasBox,
|
||||||
detailRight,
|
detailRight,
|
||||||
detailLeft:null as any,
|
detailLeft:null as any,
|
||||||
|
addDetails:null as any,
|
||||||
})
|
})
|
||||||
const userDetail = computed(()=>{
|
const userDetail = computed(()=>{
|
||||||
return store.state.UserHabit.userDetail
|
return store.state.UserHabit.userDetail
|
||||||
@@ -506,6 +516,17 @@ export default defineComponent({
|
|||||||
sessionStorage.setItem('revocation', JSON.stringify(revocation));
|
sessionStorage.setItem('revocation', JSON.stringify(revocation));
|
||||||
sessionStorage.setItem('oppositeRevocation',JSON.stringify([]));
|
sessionStorage.setItem('oppositeRevocation',JSON.stringify([]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const addDetail = () =>{
|
||||||
|
let addDetails:any = detailDom.addDetails
|
||||||
|
addDetails.init(detailData.selectDetail,'')
|
||||||
|
}
|
||||||
|
const setSloganData = (data:any)=>{
|
||||||
|
detailData.selectDetail.sketchString = data
|
||||||
|
if(detailData.currentDetailType == 'sketch' && detailData.selectDetail?.newDetail?.sketch){
|
||||||
|
detailData.selectDetail.newDetail.sketch = null
|
||||||
|
}
|
||||||
|
}
|
||||||
onMounted(()=>{
|
onMounted(()=>{
|
||||||
window.addEventListener('resize', handleResize);
|
window.addEventListener('resize', handleResize);
|
||||||
})
|
})
|
||||||
@@ -518,6 +539,7 @@ export default defineComponent({
|
|||||||
})
|
})
|
||||||
|
|
||||||
return{
|
return{
|
||||||
|
locale,
|
||||||
...toRefs(detailDom),
|
...toRefs(detailDom),
|
||||||
...toRefs(detailData),
|
...toRefs(detailData),
|
||||||
closeModal,
|
closeModal,
|
||||||
@@ -531,6 +553,8 @@ export default defineComponent({
|
|||||||
canvasReload,
|
canvasReload,
|
||||||
modelOnLoad,
|
modelOnLoad,
|
||||||
sketchSysToLibrary,
|
sketchSysToLibrary,
|
||||||
|
addDetail,
|
||||||
|
setSloganData,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
<element v-show="currentDetailType == 'element'"></element>
|
<element v-show="currentDetailType == 'element'"></element>
|
||||||
<accessory v-show="currentDetailType == 'accessory'"></accessory>
|
<accessory v-show="currentDetailType == 'accessory'"></accessory>
|
||||||
<models v-show="currentDetailType == 'models'"></models>
|
<models v-show="currentDetailType == 'models'"></models>
|
||||||
<addDetails ref="addDetails" @setSloganData="setSloganData"></addDetails>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
@@ -22,12 +21,12 @@ import color from './colorBox/index.vue'
|
|||||||
import element from './element.vue'
|
import element from './element.vue'
|
||||||
import accessory from './accessory.vue'
|
import accessory from './accessory.vue'
|
||||||
import models from './models.vue'
|
import models from './models.vue'
|
||||||
import addDetails from '@/component/Detail/addDetails.vue'
|
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
components:{
|
components:{
|
||||||
sketch,print,color,addDetails,element,models,accessory
|
sketch,print,color,element,models,accessory
|
||||||
},
|
},
|
||||||
|
emit:['addDetail'],
|
||||||
setup(props,{emit}) {
|
setup(props,{emit}) {
|
||||||
const store = useStore();
|
const store = useStore();
|
||||||
const detailData = reactive({
|
const detailData = reactive({
|
||||||
@@ -45,14 +44,7 @@ export default defineComponent({
|
|||||||
sketch:null as any,
|
sketch:null as any,
|
||||||
})
|
})
|
||||||
const addDetail = () =>{
|
const addDetail = () =>{
|
||||||
let addDetails:any = getDetailListDom.addDetails
|
emit('addDetail')
|
||||||
addDetails.init(detailData.selectDetail,'')
|
|
||||||
}
|
|
||||||
const setSloganData = (data:any)=>{
|
|
||||||
detailData.selectDetail.sketchString = data
|
|
||||||
if(detailData.currentDetailType == 'sketch' && detailData.selectDetail?.newDetail?.sketch){
|
|
||||||
detailData.selectDetail.newDetail.sketch = null
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
const sketchSysToLibrary = ()=>{//系统sketch添加到library更新library
|
const sketchSysToLibrary = ()=>{//系统sketch添加到library更新library
|
||||||
getDetailListDom.sketch.sketchSysToLibrary()
|
getDetailListDom.sketch.sketchSysToLibrary()
|
||||||
@@ -63,7 +55,6 @@ export default defineComponent({
|
|||||||
...toRefs(getDetailListData),
|
...toRefs(getDetailListData),
|
||||||
...toRefs(getDetailListDom),
|
...toRefs(getDetailListDom),
|
||||||
addDetail,
|
addDetail,
|
||||||
setSloganData,
|
|
||||||
sketchSysToLibrary,
|
sketchSysToLibrary,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -350,6 +350,7 @@ export default defineComponent({
|
|||||||
margin-top: 1rem;
|
margin-top: 1rem;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
align-content: flex-start;
|
align-content: flex-start;
|
||||||
|
padding-bottom: 2rem;
|
||||||
// &::-webkit-scrollbar{display: none;}
|
// &::-webkit-scrollbar{display: none;}
|
||||||
> .content_img_item{
|
> .content_img_item{
|
||||||
width: calc((50% - 1rem));
|
width: calc((50% - 1rem));
|
||||||
@@ -368,9 +369,12 @@ export default defineComponent({
|
|||||||
> .material_content_list_loding{
|
> .material_content_list_loding{
|
||||||
width: 100%;
|
width: 100%;
|
||||||
aspect-ratio: 1/1;
|
aspect-ratio: 1/1;
|
||||||
|
height: 4rem;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
> img{
|
> img{
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
object-fit: contain;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<!-- <img :src="selectDetail?.sketchString?selectDetail?.sketchString:selectDetail.path" alt=""> -->
|
<!-- <img :src="selectDetail?.sketchString?selectDetail?.sketchString:selectDetail.path" alt=""> -->
|
||||||
<img :src="selectDetail.path" alt="">
|
<img :src="selectDetail.path" alt="">
|
||||||
<!-- <img :src="selectDetail.sketchString || selectDetail.path" alt=""> -->
|
<!-- <img :src="selectDetail.sketchString || selectDetail.path" alt=""> -->
|
||||||
<i :title="$t('DesignDetail.editSketchTitle')" class="fi fi-rs-pencil-paintbrush" @click.stop="openAddDetail"></i>
|
<!-- <i :title="$t('DesignDetail.editSketchTitle')" class="fi fi-rs-pencil-paintbrush" @click.stop="openAddDetail"></i> -->
|
||||||
</div>
|
</div>
|
||||||
<div class="select_sketch" v-else>
|
<div class="select_sketch" v-else>
|
||||||
<div>
|
<div>
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
<i class="icon iconfont icon-chehui" @click="revocation"></i>
|
<i class="icon iconfont icon-chehui" @click="revocation"></i>
|
||||||
<i class="icon iconfont icon-fanchehui" @click="oppositeRevocation"></i>
|
<i class="icon iconfont icon-fanchehui" @click="oppositeRevocation"></i>
|
||||||
<!-- 编辑 -->
|
<!-- 编辑 -->
|
||||||
|
<i class="fi fi-rs-pencil-paintbrush" :title="$t('DesignDetail.editSketchTitle')" :class="{'pointerEventsNone':!selectDetail?.id}" @click="()=>$emit('addDetail')"></i>
|
||||||
<i class="fi fi-rr-edit" :title="$t('DesignDetail.editTitle')" :class="{active:isEditPattern.value == 'canvasEditor','pointerEventsNone':!selectDetail?.id}" @click="showDesignImgDetail('canvasEditor')"></i>
|
<i class="fi fi-rr-edit" :title="$t('DesignDetail.editTitle')" :class="{active:isEditPattern.value == 'canvasEditor','pointerEventsNone':!selectDetail?.id}" @click="showDesignImgDetail('canvasEditor')"></i>
|
||||||
|
|
||||||
<i class="icon iconfont icon-clothes" :title="$t('Canvas.editFrontBack')" style="font-size: 3.2rem;" @click="showDesignImgDetail('redGreenExample')" :class="{active:isEditPattern.value == 'redGreenExample','pointerEventsNone':!selectDetail?.id}"></i>
|
<i class="icon iconfont icon-clothes" :title="$t('Canvas.editFrontBack')" style="font-size: 3.2rem;" @click="showDesignImgDetail('redGreenExample')" :class="{active:isEditPattern.value == 'redGreenExample','pointerEventsNone':!selectDetail?.id}"></i>
|
||||||
@@ -50,7 +51,7 @@ export default defineComponent({
|
|||||||
components:{
|
components:{
|
||||||
position,modelNav
|
position,modelNav
|
||||||
},
|
},
|
||||||
emits:['detailEdit','canvasReload','addSketch','revocation','oppositeRevocation','modelOnLoad','sketchSysToLibrary'],
|
emits:['detailEdit','canvasReload','addSketch','revocation','oppositeRevocation','modelOnLoad','sketchSysToLibrary','addDetail'],
|
||||||
setup(props,{emit}) {
|
setup(props,{emit}) {
|
||||||
const {t} = useI18n()
|
const {t} = useI18n()
|
||||||
const store = useStore();
|
const store = useStore();
|
||||||
|
|||||||
@@ -1379,6 +1379,7 @@ export default defineComponent({
|
|||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
|
position: absolute;
|
||||||
}
|
}
|
||||||
img {
|
img {
|
||||||
// width: calc(10rem*1.2);
|
// width: calc(10rem*1.2);
|
||||||
|
|||||||
@@ -486,7 +486,7 @@ export default defineComponent({
|
|||||||
.my_material_header_left{
|
.my_material_header_left{
|
||||||
margin-right: auto;
|
margin-right: auto;
|
||||||
.select_block{
|
.select_block{
|
||||||
border: calc(0.1rem* 1.2) solid #F1F1F1;
|
// border: calc(0.1rem* 1.2) solid #F1F1F1;
|
||||||
margin-right: calc(2.3rem*1.2);
|
margin-right: calc(2.3rem*1.2);
|
||||||
height: auto;
|
height: auto;
|
||||||
.ant-select-selector{
|
.ant-select-selector{
|
||||||
|
|||||||
@@ -34,8 +34,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="layout_centent" :class="{active:flex_direction}" id="layoutCentent">
|
<div class="layout_centent" :class="{active:flex_direction}" id="layoutCentent">
|
||||||
<div v-for="item,index in layoutList" :key="item" :class="moodbClassName[index]" class="modal_imgItem" v-layout="item" @mousedown="setpitch(item,index)" @touchstart="setpitch(item,index)" ref="content" >
|
<div v-for="item,index in layoutList" :key="item" :class="moodbClassName[index]" class="modal_imgItem" v-layout="item" @mousedown="setpitch(item,index)" @touchstart="setpitch(item,index)" ref="content" :style="{'background-image':`url(${item.imgUrl})`,'transform':`scale(${item.zoom?item.zoom:1}) rotateZ(${item.angle?item.angle:0}deg)`}">
|
||||||
<img crossOrigin="anonymous" :src="item.imgUrl" :style="{'transform':`translate(-50%, -50%) scale(${item.zoom?item.zoom:1}) rotateZ(${item.angle?item.angle:0}deg)`}" draggable="false" :class="moodbClassName[index]" v-modelImg>
|
<!-- <img crossOrigin="anonymous" :src="item.imgUrl" :style="{'transform':`translate(-50%, -50%) scale(${item.zoom?item.zoom:1}) rotateZ(${item.angle?item.angle:0}deg)`}" draggable="false" :class="moodbClassName[index]" v-modelImg> -->
|
||||||
<ul v-show="item.setPitch" class="layout_btn" >
|
<ul v-show="item.setPitch" class="layout_btn" >
|
||||||
<li class="layout_btn_top" v-compile.stop="'top'"></li>
|
<li class="layout_btn_top" v-compile.stop="'top'"></li>
|
||||||
<li class="layout_btn_bottom" v-compile.stop="'bottom'"></li>
|
<li class="layout_btn_bottom" v-compile.stop="'bottom'"></li>
|
||||||
@@ -736,6 +736,7 @@ export default defineComponent({
|
|||||||
setmoodb(item:any){
|
setmoodb(item:any){
|
||||||
this.moodbClassName = item
|
this.moodbClassName = item
|
||||||
this.$emit('setmoodbClass',this.moodbClassName)
|
this.$emit('setmoodbClass',this.moodbClassName)
|
||||||
|
this.styleObj.class = this.moodbClassName
|
||||||
if(this.content){
|
if(this.content){
|
||||||
for (item of (this.content as any)) {
|
for (item of (this.content as any)) {
|
||||||
item.classList.remove('active')
|
item.classList.remove('active')
|
||||||
@@ -772,7 +773,7 @@ export default defineComponent({
|
|||||||
initDomStyle(){
|
initDomStyle(){
|
||||||
nextTick(()=>{
|
nextTick(()=>{
|
||||||
this.content.forEach((item:any,index:any) => {
|
this.content.forEach((item:any,index:any) => {
|
||||||
if(this.styleObj.domStyle[index]){
|
if(this.styleObj.domStyle[index]?.left){
|
||||||
item.classList.add('active')
|
item.classList.add('active')
|
||||||
this.initStyle(item,this.styleObj.domStyle[index])
|
this.initStyle(item,this.styleObj.domStyle[index])
|
||||||
}
|
}
|
||||||
@@ -794,7 +795,7 @@ export default defineComponent({
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
initStyle(dom:any,style:any){
|
initStyle(dom:any,style:any){
|
||||||
if(!style)return
|
if(!style || !dom)return
|
||||||
for (const [property, value] of Object.entries(style)) {
|
for (const [property, value] of Object.entries(style)) {
|
||||||
|
|
||||||
dom.style.setProperty(property, value);
|
dom.style.setProperty(property, value);
|
||||||
@@ -806,7 +807,7 @@ export default defineComponent({
|
|||||||
this.styleObj.domStyle.push(this.setStyle(item.style))
|
this.styleObj.domStyle.push(this.setStyle(item.style))
|
||||||
this.domObj.dom.forEach((domName:any,index:any) => {
|
this.domObj.dom.forEach((domName:any,index:any) => {
|
||||||
let style = this.domObj.domStyle[index]
|
let style = this.domObj.domStyle[index]
|
||||||
let dom = item.querySelector(domName)
|
let dom = item.querySelector(domName) || item
|
||||||
this.styleObj[style].push(this.setStyle(dom.style))
|
this.styleObj[style].push(this.setStyle(dom.style))
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
@@ -840,7 +841,6 @@ export default defineComponent({
|
|||||||
let config:any = {headers:{'Content-Type':'multipart/form-data','Accept':'*/*' }}
|
let config:any = {headers:{'Content-Type':'multipart/form-data','Accept':'*/*' }}
|
||||||
Https.axiosPost(Https.httpUrls.elementUpload,param,config)
|
Https.axiosPost(Https.httpUrls.elementUpload,param,config)
|
||||||
.then((rv: any) => {
|
.then((rv: any) => {
|
||||||
// console.log(rv);
|
|
||||||
rv.imgUrl = rv.url
|
rv.imgUrl = rv.url
|
||||||
this.layout = false
|
this.layout = false
|
||||||
this.loadingShow = false
|
this.loadingShow = false
|
||||||
@@ -1062,27 +1062,12 @@ export default defineComponent({
|
|||||||
// height: 100%;
|
// height: 100%;
|
||||||
// }
|
// }
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: center;
|
||||||
|
background-size: cover;
|
||||||
&.active{
|
&.active{
|
||||||
position: absolute;
|
position: absolute;
|
||||||
}
|
}
|
||||||
img{
|
|
||||||
// object-fit: cover;
|
|
||||||
// width: 100%;
|
|
||||||
// height: 100%;
|
|
||||||
pointer-events: none;
|
|
||||||
float: left;
|
|
||||||
user-select:none;
|
|
||||||
-webkit-user-drag: none;
|
|
||||||
position: absolute;
|
|
||||||
top: 50%;
|
|
||||||
left: 50%;
|
|
||||||
transform: translate(-50%,-50%) scale(1);
|
|
||||||
}
|
|
||||||
::selection {
|
|
||||||
// background: rgba(0,0,0,0);
|
|
||||||
// background: yellow;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.wh1{
|
.wh1{
|
||||||
|
|||||||
@@ -19,7 +19,8 @@
|
|||||||
<div class="generalModel_closeIcon" @click.stop="cancelDsign()">
|
<div class="generalModel_closeIcon" @click.stop="cancelDsign()">
|
||||||
<!-- <i class="fi fi-rr-cross-small"></i> -->
|
<!-- <i class="fi fi-rr-cross-small"></i> -->
|
||||||
<svg
|
<svg
|
||||||
width="100%" height="100%"
|
width="100%"
|
||||||
|
height="100%"
|
||||||
viewBox="0 0 46 46"
|
viewBox="0 0 46 46"
|
||||||
fill="none"
|
fill="none"
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
@@ -49,20 +50,32 @@
|
|||||||
<div class="renewContent">
|
<div class="renewContent">
|
||||||
<div class="left">
|
<div class="left">
|
||||||
<div class="video">
|
<div class="video">
|
||||||
<video autoplay loop muted playsinline src="@/assets/images/icon/paymentVideo.mp4"></video>
|
<video
|
||||||
|
autoplay
|
||||||
|
loop
|
||||||
|
muted
|
||||||
|
playsinline
|
||||||
|
src="@/assets/images/icon/paymentVideo.mp4"
|
||||||
|
></video>
|
||||||
<div class="mask"></div>
|
<div class="mask"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="title">{{ $t("Renew.Strengths") }}</div>
|
<div class="title">{{ $t('Renew.Strengths') }}</div>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<div class="benefitsItem">
|
<div class="benefitsItem">
|
||||||
<div class="describe">
|
<div class="describe">
|
||||||
<div class="icon">
|
<div class="icon">
|
||||||
<img src="@/assets/images/icon/paymentIntroduce1.png" alt="">
|
<img src="@/assets/images/icon/paymentIntroduce1.png" alt="" />
|
||||||
</div>
|
</div>
|
||||||
<div class="text">
|
<div class="text">
|
||||||
<p class="title">{{ $t("Renew.StrengthsTitle1") }}<br>{{ $t("Renew.StrengthsTitle1_1") }}</p>
|
<p class="title">
|
||||||
|
{{ $t('Renew.StrengthsTitle1') }}
|
||||||
|
<br />
|
||||||
|
{{ $t('Renew.StrengthsTitle1_1') }}
|
||||||
|
</p>
|
||||||
<p class="info">
|
<p class="info">
|
||||||
{{ $t("Renew.StrengthsInfo1") }}<br>{{ $t("Renew.StrengthsInfo1_1") }}
|
{{ $t('Renew.StrengthsInfo1') }}
|
||||||
|
<br />
|
||||||
|
{{ $t('Renew.StrengthsInfo1_1') }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -70,12 +83,18 @@
|
|||||||
<div class="benefitsItem">
|
<div class="benefitsItem">
|
||||||
<div class="describe">
|
<div class="describe">
|
||||||
<div class="icon">
|
<div class="icon">
|
||||||
<img src="@/assets/images/icon/paymentIntroduce2.png" alt="">
|
<img src="@/assets/images/icon/paymentIntroduce2.png" alt="" />
|
||||||
</div>
|
</div>
|
||||||
<div class="text">
|
<div class="text">
|
||||||
<p class="title">{{ $t("Renew.StrengthsTitle2") }}<br>{{ $t("Renew.StrengthsTitle2_1") }}</p>
|
<p class="title">
|
||||||
|
{{ $t('Renew.StrengthsTitle2') }}
|
||||||
|
<br />
|
||||||
|
{{ $t('Renew.StrengthsTitle2_1') }}
|
||||||
|
</p>
|
||||||
<p class="info">
|
<p class="info">
|
||||||
{{ $t("Renew.StrengthsInfo2") }}<br>{{ $t("Renew.StrengthsInfo2_1") }}
|
{{ $t('Renew.StrengthsInfo2') }}
|
||||||
|
<br />
|
||||||
|
{{ $t('Renew.StrengthsInfo2_1') }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -83,13 +102,21 @@
|
|||||||
<div class="benefitsItem">
|
<div class="benefitsItem">
|
||||||
<div class="describe">
|
<div class="describe">
|
||||||
<div class="icon">
|
<div class="icon">
|
||||||
<img src="@/assets/images/icon/paymentIntroduce3.png" alt="">
|
<img src="@/assets/images/icon/paymentIntroduce3.png" alt="" />
|
||||||
</div>
|
</div>
|
||||||
<div class="text">
|
<div class="text">
|
||||||
<p class="title"></p>
|
<p class="title"></p>
|
||||||
<p class="title">{{ $t("Renew.StrengthsTitle3") }}<br>{{ $t("Renew.StrengthsTitle3_1") }}</p>
|
<p class="title">
|
||||||
|
{{ $t('Renew.StrengthsTitle3') }}
|
||||||
|
<br />
|
||||||
|
{{ $t('Renew.StrengthsTitle3_1') }}
|
||||||
|
</p>
|
||||||
<p class="info">
|
<p class="info">
|
||||||
{{ $t("Renew.StrengthsInfo3") }}<br>{{ $t("Renew.StrengthsInfo3_1") }}<br>{{ $t("Renew.StrengthsInfo3_2") }}
|
{{ $t('Renew.StrengthsInfo3') }}
|
||||||
|
<br />
|
||||||
|
{{ $t('Renew.StrengthsInfo3_1') }}
|
||||||
|
<br />
|
||||||
|
{{ $t('Renew.StrengthsInfo3_2') }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -97,12 +124,18 @@
|
|||||||
<div class="benefitsItem">
|
<div class="benefitsItem">
|
||||||
<div class="describe">
|
<div class="describe">
|
||||||
<div class="icon">
|
<div class="icon">
|
||||||
<img src="@/assets/images/icon/paymentIntroduce4.png" alt="">
|
<img src="@/assets/images/icon/paymentIntroduce4.png" alt="" />
|
||||||
</div>
|
</div>
|
||||||
<div class="text">
|
<div class="text">
|
||||||
<p class="title">{{ $t("Renew.StrengthsTitle4") }}<br>{{ $t("Renew.StrengthsTitle4_1") }}</p>
|
<p class="title">
|
||||||
|
{{ $t('Renew.StrengthsTitle4') }}
|
||||||
|
<br />
|
||||||
|
{{ $t('Renew.StrengthsTitle4_1') }}
|
||||||
|
</p>
|
||||||
<p class="info">
|
<p class="info">
|
||||||
{{ $t("Renew.StrengthsInfo4") }}<br>{{ $t("Renew.StrengthsInfo4_1") }}
|
{{ $t('Renew.StrengthsInfo4') }}
|
||||||
|
<br />
|
||||||
|
{{ $t('Renew.StrengthsInfo4_1') }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -111,7 +144,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="right">
|
<div class="right">
|
||||||
<div class="title">
|
<div class="title">
|
||||||
{{ $t("Renew.title") }}
|
{{ $t('Renew.title') }}
|
||||||
</div>
|
</div>
|
||||||
<!-- <div class="info">{{ $t("Renew.unlimited") }}</div> -->
|
<!-- <div class="info">{{ $t("Renew.unlimited") }}</div> -->
|
||||||
<div class="content">
|
<div class="content">
|
||||||
@@ -119,36 +152,31 @@
|
|||||||
class="productItem"
|
class="productItem"
|
||||||
:class="{
|
:class="{
|
||||||
active: item.price == current.price,
|
active: item.price == current.price,
|
||||||
sellWell: item.sellWell,
|
sellWell: item.sellWell
|
||||||
}"
|
}"
|
||||||
v-for="item in personage"
|
v-for="item in personage"
|
||||||
:key="item.price"
|
:key="item.price"
|
||||||
@click="setPromotionData(item)"
|
@click="setPromotionData(item)"
|
||||||
>
|
>
|
||||||
<div class="popular" v-show="item.sellWell">{{ $t("Renew.MOSTPOPULAR") }}</div>
|
<div class="popular" v-show="item.sellWell">
|
||||||
|
{{ $t('Renew.MOSTPOPULAR') }}
|
||||||
|
</div>
|
||||||
<div class="priceBox">
|
<div class="priceBox">
|
||||||
<div class="left">
|
<div class="left">
|
||||||
<p class="productType">1 {{ item.type.label }}</p>
|
<p class="productType">1 {{ item.type.label }}</p>
|
||||||
<p class="price">${{ item.price }}</p>
|
<p class="price">HK $ {{ item.price }}</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="right">
|
<div class="right">
|
||||||
<div class="promotion">
|
<div class="promotion">
|
||||||
<div
|
<div class="succeed" v-show="item.promotionData.error == 'true'">
|
||||||
class="succeed"
|
|
||||||
v-show="item.promotionData.error == 'true'"
|
|
||||||
>
|
|
||||||
{{ item.promotionData.code }}
|
{{ item.promotionData.code }}
|
||||||
<i
|
<i class="fi fi-sr-times-hexagon" @click="clearPromotionCode"></i>
|
||||||
class="fi fi-sr-times-hexagon"
|
|
||||||
@click="clearPromotionCode"
|
|
||||||
></i>
|
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="input"
|
class="input"
|
||||||
@click.stop
|
@click.stop
|
||||||
v-show="
|
v-show="
|
||||||
!item.promotionData.error ||
|
!item.promotionData.error || item.promotionData.error == 'false'
|
||||||
item.promotionData.error == 'false'
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<input
|
<input
|
||||||
@@ -156,14 +184,11 @@
|
|||||||
:placeholder="$t('Renew.promotionCode')"
|
:placeholder="$t('Renew.promotionCode')"
|
||||||
v-model="item.promotionData.code"
|
v-model="item.promotionData.code"
|
||||||
/>
|
/>
|
||||||
<div style="cursor: pointer; background-color: #000; font-size: 1.2rem; color: #fff; padding: 0 .5rem;" @click="examine(item)">
|
<div class="apply-btn" @click="examine(item)">
|
||||||
{{ $t("Renew.use") }}
|
{{ $t('Renew.use') }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div class="error" v-show="item.promotionData.error == 'false'">
|
||||||
class="error"
|
|
||||||
v-show="item.promotionData.error == 'false'"
|
|
||||||
>
|
|
||||||
{{ item.promotionData.str }}
|
{{ item.promotionData.str }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -181,7 +206,7 @@
|
|||||||
<div class="payment">
|
<div class="payment">
|
||||||
<div class="allocation">
|
<div class="allocation">
|
||||||
<div class="selectType">
|
<div class="selectType">
|
||||||
<div class="text">{{ $t("Renew.Payment") }}:</div>
|
<div class="text">{{ $t('Renew.Payment') }}:</div>
|
||||||
<label>
|
<label>
|
||||||
<input
|
<input
|
||||||
name="payment"
|
name="payment"
|
||||||
@@ -190,7 +215,7 @@
|
|||||||
v-model="PaymentType"
|
v-model="PaymentType"
|
||||||
@change="setPaymentType('CreditCard')"
|
@change="setPaymentType('CreditCard')"
|
||||||
/>
|
/>
|
||||||
{{ $t("Renew.CreditCard") }}
|
{{ $t('Renew.CreditCard') }}
|
||||||
</label>
|
</label>
|
||||||
<label>
|
<label>
|
||||||
<input
|
<input
|
||||||
@@ -200,43 +225,47 @@
|
|||||||
v-model="PaymentType"
|
v-model="PaymentType"
|
||||||
@change="setPaymentType('Alipay')"
|
@change="setPaymentType('Alipay')"
|
||||||
/>
|
/>
|
||||||
{{ $t("Renew.Alipay") }}
|
{{ $t('Renew.Alipay') }}
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="gallery_btn gallery_btn_radius" @click="payment">
|
<div class="gallery_btn gallery_btn_radius" @click="payment">
|
||||||
{{ $t("upgradePlan.Continue") }}
|
{{ $t('upgradePlan.Continue') }}
|
||||||
</div>
|
</div>
|
||||||
<div class="payMethod_payAffirm_clause" ref="labelDisclaimer">
|
<div class="payMethod_payAffirm_clause" ref="labelDisclaimer">
|
||||||
<label>
|
<label>
|
||||||
<!-- <input type="checkbox" v-model="clause" /> -->
|
<!-- <input type="checkbox" v-model="clause" /> -->
|
||||||
<span class="generalModelDescription"
|
<span class="generalModelDescription">
|
||||||
>{{ $t("upgradePlan.policy")}}
|
{{ $t('upgradePlan.policy') }}
|
||||||
<a
|
<a
|
||||||
href="https://code-create.com.hk/aida-terms-and-conditions/"
|
href="https://code-create.com.hk/aida-terms-and-conditions/"
|
||||||
target="_blank">
|
target="_blank"
|
||||||
{{ $t("upgradePlan.policy1") }}
|
>
|
||||||
|
{{ $t('upgradePlan.policy1') }}
|
||||||
</a>
|
</a>
|
||||||
&
|
&
|
||||||
<a
|
<a
|
||||||
href="https://code-create.com.hk/aida-subscription-agreement/"
|
href="https://code-create.com.hk/aida-subscription-agreement/"
|
||||||
target="_blank">
|
target="_blank"
|
||||||
{{ $t("upgradePlan.policy2") }}
|
>
|
||||||
|
{{ $t('upgradePlan.policy2') }}
|
||||||
</a>
|
</a>
|
||||||
<!-- . * -->
|
<!-- . * -->
|
||||||
</span
|
</span>
|
||||||
>
|
|
||||||
</label>
|
</label>
|
||||||
<label class="secure">
|
<label class="secure">
|
||||||
<span><i class="fi fi-rr-shield-check"></i>Pay safe & secure</span>
|
<span>
|
||||||
|
<i class="fi fi-rr-shield-check"></i>
|
||||||
|
Pay safe & secure
|
||||||
|
</span>
|
||||||
</label>
|
</label>
|
||||||
<label class="payIcon">
|
<label class="payIcon">
|
||||||
<img class="stripe" src="@/assets/images/icon/stripe.svg" alt="">
|
<img class="stripe" src="@/assets/images/icon/stripe.svg" alt="" />
|
||||||
<img class="alipay" src="@/assets/images/icon/alipay.svg" alt="">
|
<img class="alipay" src="@/assets/images/icon/alipay.svg" alt="" />
|
||||||
<img class="alipay" src="@/assets/images/icon/jcbPay.svg" alt="">
|
<img class="alipay" src="@/assets/images/icon/jcbPay.svg" alt="" />
|
||||||
<img class="alipay" src="@/assets/images/icon/mastercardPay.svg" alt="">
|
<img class="alipay" src="@/assets/images/icon/mastercardPay.svg" alt="" />
|
||||||
<img class="alipay" src="@/assets/images/icon/yinlianPay.svg" alt="">
|
<img class="alipay" src="@/assets/images/icon/yinlianPay.svg" alt="" />
|
||||||
<img class="alipay" src="@/assets/images/icon/visaPay.svg" alt="">
|
<img class="alipay" src="@/assets/images/icon/visaPay.svg" alt="" />
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<!-- <div class="paySecure">
|
<!-- <div class="paySecure">
|
||||||
@@ -250,101 +279,104 @@
|
|||||||
<a-spin size="large" />
|
<a-spin size="large" />
|
||||||
</div>
|
</div>
|
||||||
<div class="mark_loading" v-show="isShowMark" state="true">
|
<div class="mark_loading" v-show="isShowMark" state="true">
|
||||||
<div class="mark_loading_title">{{ $t("upgradePlan.completed") }}</div>
|
<div class="mark_loading_title">{{ $t('upgradePlan.completed') }}</div>
|
||||||
<div class="mark_loading_intro">{{ $t("upgradePlan.hint") }}</div>
|
<div class="mark_loading_intro">{{ $t('upgradePlan.hint') }}</div>
|
||||||
<div class="mark_loading_title_box">
|
<div class="mark_loading_title_box">
|
||||||
<div class="mark_loading_btn mark_loading_btn2" @click="setPaidBack">
|
<div class="mark_loading_btn mark_loading_btn2" @click="setPaidBack">
|
||||||
{{ $t("upgradePlan.Back") }}
|
{{ $t('upgradePlan.Back') }}
|
||||||
</div>
|
</div>
|
||||||
<div class="mark_loading_btn" @click="completePayment">OK</div>
|
<div class="mark_loading_btn" @click="completePayment">OK</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</a-modal>
|
</a-modal>
|
||||||
<payMethod
|
<payMethod ref="payMethod" @completePayment="cancelDsign" type="renew"></payMethod>
|
||||||
ref="payMethod"
|
|
||||||
@completePayment="cancelDsign"
|
|
||||||
type="renew"
|
|
||||||
></payMethod>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { defineComponent, computed, reactive, toRefs, onMounted, onBeforeUnmount } from "vue";
|
import {
|
||||||
import { message } from "ant-design-vue";
|
defineComponent,
|
||||||
import payMethod from "@/component/Pay/payMethod.vue";
|
computed,
|
||||||
import { useStore } from "vuex";
|
reactive,
|
||||||
import { useI18n } from "vue-i18n";
|
toRefs,
|
||||||
import { Https } from "@/tool/https";
|
onMounted,
|
||||||
import md5 from "md5";
|
onBeforeUnmount
|
||||||
|
} from 'vue'
|
||||||
|
import { message } from 'ant-design-vue'
|
||||||
|
import payMethod from '@/component/Pay/payMethod.vue'
|
||||||
|
import { useStore } from 'vuex'
|
||||||
|
import { useI18n } from 'vue-i18n'
|
||||||
|
import { Https } from '@/tool/https'
|
||||||
|
import md5 from 'md5'
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
components: {
|
components: {
|
||||||
payMethod,
|
payMethod
|
||||||
},
|
},
|
||||||
setup() {
|
setup() {
|
||||||
const store = useStore();
|
const store = useStore()
|
||||||
const { t } = useI18n();
|
const { t } = useI18n()
|
||||||
let renew = reactive({
|
let renew = reactive({
|
||||||
renewModel: false,
|
renewModel: false,
|
||||||
renewModelMask: true,
|
renewModelMask: true,
|
||||||
pageWidth: "50%",
|
pageWidth: '50%'
|
||||||
});
|
})
|
||||||
let payMethodData = reactive({
|
let payMethodData = reactive({
|
||||||
clause: false,
|
clause: false,
|
||||||
labelDisclaimer: null as any,
|
labelDisclaimer: null as any,
|
||||||
newWindow: null as any,
|
newWindow: null as any,
|
||||||
isShowMark: false,
|
isShowMark: false,
|
||||||
isShowMark_: false,
|
isShowMark_: false
|
||||||
});
|
})
|
||||||
let renewData = reactive({
|
let renewData = reactive({
|
||||||
personage: [
|
personage: [
|
||||||
{
|
{
|
||||||
price: "100",
|
price: '100',
|
||||||
sellWell: true,
|
sellWell: true,
|
||||||
activity: false, //活动打折
|
activity: false, //活动打折
|
||||||
type: {
|
type: {
|
||||||
value: "EcoMonth",
|
value: 'EcoMonth',
|
||||||
label: computed(()=>t("Renew.Monthly")),
|
label: computed(() => t('Renew.Monthly'))
|
||||||
},
|
},
|
||||||
// PaymentType: "CreditCard",
|
// PaymentType: "CreditCard",
|
||||||
promotionData: {
|
promotionData: {
|
||||||
code: "",
|
code: '',
|
||||||
error: "",
|
error: '',
|
||||||
str: "",
|
str: '',
|
||||||
price: "",
|
price: ''
|
||||||
},
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
price: "500",
|
price: '500',
|
||||||
sellWell: false,
|
sellWell: false,
|
||||||
activity: false, //活动打折
|
activity: false, //活动打折
|
||||||
type: {
|
type: {
|
||||||
value: "Month",
|
value: 'Month',
|
||||||
label: computed(()=>t("Renew.Monthly")),
|
label: computed(() => t('Renew.Monthly'))
|
||||||
},
|
},
|
||||||
// PaymentType: "CreditCard",
|
// PaymentType: "CreditCard",
|
||||||
promotionData: {
|
promotionData: {
|
||||||
code: "",
|
code: '',
|
||||||
error: "",
|
error: '',
|
||||||
str: "",
|
str: '',
|
||||||
price: "",
|
price: ''
|
||||||
},
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
price: "5,000",
|
price: '5,000',
|
||||||
sellWell: false,
|
sellWell: false,
|
||||||
activity: false, //活动打折
|
activity: false, //活动打折
|
||||||
typeValue: "year",
|
typeValue: 'year',
|
||||||
type: {
|
type: {
|
||||||
value: "Year",
|
value: 'Year',
|
||||||
label: computed(()=>t("Renew.Yearly")),
|
label: computed(() => t('Renew.Yearly'))
|
||||||
},
|
},
|
||||||
// PaymentType: "CreditCard",
|
// PaymentType: "CreditCard",
|
||||||
promotionData: {
|
promotionData: {
|
||||||
code: "",
|
code: '',
|
||||||
error: "",
|
error: '',
|
||||||
str: "",
|
str: '',
|
||||||
price: "",
|
price: ''
|
||||||
},
|
}
|
||||||
},
|
}
|
||||||
],
|
],
|
||||||
// personage:computed(()=>{
|
// personage:computed(()=>{
|
||||||
// return {
|
// return {
|
||||||
@@ -365,55 +397,55 @@
|
|||||||
// }),
|
// }),
|
||||||
firm: computed(() => {
|
firm: computed(() => {
|
||||||
return {
|
return {
|
||||||
title: "Education Edition",
|
title: 'Education Edition',
|
||||||
price: {
|
price: {
|
||||||
year: "500",
|
year: '500'
|
||||||
},
|
},
|
||||||
unit: {
|
unit: {
|
||||||
year: "HKD / Year",
|
year: 'HKD / Year'
|
||||||
},
|
},
|
||||||
type: "year",
|
type: 'year',
|
||||||
autoRenewal: {
|
autoRenewal: {
|
||||||
text: t("Renew.automatically"),
|
text: t('Renew.automatically'),
|
||||||
value: true,
|
value: true
|
||||||
},
|
},
|
||||||
typeList: ["year"],
|
typeList: ['year'],
|
||||||
info: "Customised plan",
|
info: 'Customised plan'
|
||||||
};
|
}
|
||||||
}),
|
}),
|
||||||
education: computed(() => {
|
education: computed(() => {
|
||||||
return {
|
return {
|
||||||
title: "Enterprise Edition",
|
title: 'Enterprise Edition',
|
||||||
price: {
|
price: {
|
||||||
year: "500",
|
year: '500'
|
||||||
},
|
},
|
||||||
unit: {
|
unit: {
|
||||||
year: "HKD / Year",
|
year: 'HKD / Year'
|
||||||
},
|
},
|
||||||
type: "year",
|
type: 'year',
|
||||||
autoRenewal: {
|
autoRenewal: {
|
||||||
text: t("Renew.automatically"),
|
text: t('Renew.automatically'),
|
||||||
value: true,
|
value: true
|
||||||
},
|
},
|
||||||
typeList: ["year"],
|
typeList: ['year'],
|
||||||
info: "Customised plan",
|
info: 'Customised plan'
|
||||||
};
|
}
|
||||||
}),
|
}),
|
||||||
current: {} as any,
|
current: {} as any,
|
||||||
payMethod: null as any,
|
payMethod: null as any,
|
||||||
PaymentType: "CreditCard",
|
PaymentType: 'CreditCard'
|
||||||
});
|
})
|
||||||
const init = () => {
|
const init = () => {
|
||||||
renew.renewModel = true;
|
renew.renewModel = true
|
||||||
renewData.current = renewData.personage[1];
|
renewData.current = renewData.personage[1]
|
||||||
};
|
}
|
||||||
const cancelDsign = () => {
|
const cancelDsign = () => {
|
||||||
renew.renewModel = false;
|
renew.renewModel = false
|
||||||
store.dispatch('getUserDetail')
|
store.dispatch('getUserDetail')
|
||||||
};
|
}
|
||||||
const setPaymentType = (str: any) => {
|
const setPaymentType = (str: any) => {
|
||||||
renewData.PaymentType = str;
|
renewData.PaymentType = str
|
||||||
};
|
}
|
||||||
const payment = () => {
|
const payment = () => {
|
||||||
// if (!payMethodData.clause) {
|
// if (!payMethodData.clause) {
|
||||||
// let labelDisclaimer: any = payMethodData.labelDisclaimer;
|
// let labelDisclaimer: any = payMethodData.labelDisclaimer;
|
||||||
@@ -425,104 +457,92 @@
|
|||||||
// }
|
// }
|
||||||
// return;
|
// return;
|
||||||
// }
|
// }
|
||||||
if (!renewData.PaymentType)
|
if (!renewData.PaymentType) return message.info(t('Renew.PleaseSelectPayment'))
|
||||||
return message.info(t("Renew.PleaseSelectPayment"));
|
let url = window.location.origin + '/paySucceed'
|
||||||
let url = window.location.origin + "/paySucceed";
|
|
||||||
let data = {
|
let data = {
|
||||||
autoRenewal: renewData.PaymentType != "Alipay", //false为不自动续费
|
autoRenewal: renewData.PaymentType != 'Alipay', //false为不自动续费
|
||||||
productName: "Subscription",
|
productName: 'Subscription',
|
||||||
quantity: 1,
|
quantity: 1,
|
||||||
returnUrl: url,
|
returnUrl: url,
|
||||||
subscribeType: renewData.current.type.value, //yearly为年费,monthly为月费
|
subscribeType: renewData.current.type.value, //yearly为年费,monthly为月费
|
||||||
wallet: "ALIPAYHK",
|
wallet: 'ALIPAYHK',
|
||||||
promotionCode: renewData.current.promotionData.code,
|
promotionCode: renewData.current.promotionData.code
|
||||||
};
|
}
|
||||||
let httpsUrl = Https.httpUrls.payStripe;
|
let httpsUrl = Https.httpUrls.payStripe
|
||||||
payMethodData.isShowMark_ = true;
|
payMethodData.isShowMark_ = true
|
||||||
Https.axiosPost(httpsUrl, data)
|
Https.axiosPost(httpsUrl, data)
|
||||||
.then((rv: any) => {
|
.then((rv: any) => {
|
||||||
var width = 800;
|
var width = 800
|
||||||
var height = 600;
|
var height = 600
|
||||||
var left = (screen.width - width) / 2;
|
var left = (screen.width - width) / 2
|
||||||
var top = (screen.height - height) / 2;
|
var top = (screen.height - height) / 2
|
||||||
payMethodData.newWindow = window.open(
|
payMethodData.newWindow = window.open(
|
||||||
"",
|
'',
|
||||||
"_blank",
|
'_blank',
|
||||||
"width=" +
|
'width=' + width + ', height=' + height + ', left=' + left + ', top=' + top
|
||||||
width +
|
)
|
||||||
", height=" +
|
let herf = rv
|
||||||
height +
|
|
||||||
", left=" +
|
|
||||||
left +
|
|
||||||
", top=" +
|
|
||||||
top
|
|
||||||
);
|
|
||||||
let herf = rv;
|
|
||||||
if (payMethodData.newWindow) {
|
if (payMethodData.newWindow) {
|
||||||
payMethodData.newWindow.location.href = herf;
|
payMethodData.newWindow.location.href = herf
|
||||||
} else {
|
} else {
|
||||||
// window.open(herf, '_blank');
|
// window.open(herf, '_blank');
|
||||||
window.location.href = herf;
|
window.location.href = herf
|
||||||
}
|
}
|
||||||
payMethodData.newWindow = null;
|
payMethodData.newWindow = null
|
||||||
payMethodData.isShowMark = true;
|
payMethodData.isShowMark = true
|
||||||
payMethodData.isShowMark_ = false;
|
payMethodData.isShowMark_ = false
|
||||||
|
})
|
||||||
|
.catch(res => {
|
||||||
|
payMethodData.isShowMark_ = false
|
||||||
})
|
})
|
||||||
.catch((res) => {
|
|
||||||
payMethodData.isShowMark_ = false;
|
|
||||||
});
|
|
||||||
|
|
||||||
// renewData.payMethod.init(data)
|
// renewData.payMethod.init(data)
|
||||||
};
|
}
|
||||||
const setPaidBack = () => {
|
const setPaidBack = () => {
|
||||||
payMethod.payMethodModel = false;
|
payMethod.payMethodModel = false
|
||||||
payMethodData.isShowMark = false;
|
payMethodData.isShowMark = false
|
||||||
payMethodData.clause = false;
|
payMethodData.clause = false
|
||||||
};
|
}
|
||||||
const completePayment = () => {
|
const completePayment = () => {
|
||||||
renew.renewModel = false;
|
renew.renewModel = false
|
||||||
setPaidBack();
|
setPaidBack()
|
||||||
};
|
}
|
||||||
const examine = (item: any) => {
|
const examine = (item: any) => {
|
||||||
// renewData.promotionData.error
|
// renewData.promotionData.error
|
||||||
let price = item?.price;
|
let price = item?.price
|
||||||
const normalNumber = Number(price.replace(/,/g, ""));
|
const normalNumber = Number(price.replace(/,/g, ''))
|
||||||
if (!item.promotionData.code) {
|
if (!item.promotionData.code) {
|
||||||
return;
|
return
|
||||||
}
|
}
|
||||||
let data = {
|
let data = {
|
||||||
promotionCode: item.promotionData.code,
|
promotionCode: item.promotionData.code,
|
||||||
price: normalNumber,
|
price: normalNumber
|
||||||
};
|
}
|
||||||
Https.axiosGet(Https.httpUrls.checkCoupon, { params: data }).then(
|
Https.axiosGet(Https.httpUrls.checkCoupon, { params: data }).then((rv: any) => {
|
||||||
(rv: any) => {
|
|
||||||
if (rv) {
|
if (rv) {
|
||||||
renewData.personage.forEach((personageItem: any) => {
|
renewData.personage.forEach((personageItem: any) => {
|
||||||
if (personageItem.price == item.price) {
|
if (personageItem.price == item.price) {
|
||||||
if (rv.status == "valid") {
|
if (rv.status == 'valid') {
|
||||||
item.promotionData.error = "true";
|
item.promotionData.error = 'true'
|
||||||
item.promotionData.price = Number(
|
item.promotionData.price = Number(rv.discountedPrice).toLocaleString()
|
||||||
rv.discountedPrice
|
|
||||||
).toLocaleString();
|
|
||||||
} else {
|
} else {
|
||||||
item.promotionData.error = "false";
|
item.promotionData.error = 'false'
|
||||||
item.promotionData.str = rv.message;
|
item.promotionData.str = rv.message
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
})
|
||||||
} else {
|
} else {
|
||||||
}
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
);
|
|
||||||
};
|
|
||||||
const clearPromotionCode = () => {
|
const clearPromotionCode = () => {
|
||||||
renewData.current.promotionData.error = "";
|
renewData.current.promotionData.error = ''
|
||||||
renewData.current.promotionData.code = "";
|
renewData.current.promotionData.code = ''
|
||||||
renewData.current.promotionData.price = "";
|
renewData.current.promotionData.price = ''
|
||||||
};
|
}
|
||||||
const setPromotionData = (item: any) => {
|
const setPromotionData = (item: any) => {
|
||||||
renewData.current = item;
|
renewData.current = item
|
||||||
};
|
}
|
||||||
return {
|
return {
|
||||||
store,
|
store,
|
||||||
...toRefs(renew),
|
...toRefs(renew),
|
||||||
@@ -536,18 +556,18 @@
|
|||||||
completePayment,
|
completePayment,
|
||||||
examine,
|
examine,
|
||||||
clearPromotionCode,
|
clearPromotionCode,
|
||||||
setPromotionData,
|
setPromotionData
|
||||||
};
|
}
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {};
|
return {}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
turnToWindow(url: any) {
|
turnToWindow(url: any) {
|
||||||
window.open(url);
|
window.open(url)
|
||||||
},
|
}
|
||||||
},
|
}
|
||||||
});
|
})
|
||||||
</script>
|
</script>
|
||||||
<style lang="less" scoped>
|
<style lang="less" scoped>
|
||||||
.renew {
|
.renew {
|
||||||
@@ -607,7 +627,7 @@
|
|||||||
height: 100%;
|
height: 100%;
|
||||||
left: 0;
|
left: 0;
|
||||||
top: 0;
|
top: 0;
|
||||||
background: rgba(0,0,0,.5);
|
background: rgba(0, 0, 0, 0.5);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -679,11 +699,11 @@
|
|||||||
margin-bottom: 1rem;
|
margin-bottom: 1rem;
|
||||||
border-radius: 1rem;
|
border-radius: 1rem;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
border: 1.5px solid #E7EBFF;
|
border: 1.5px solid #e7ebff;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|
||||||
> .popular {
|
> .popular {
|
||||||
background: #1B223C;
|
background: #1b223c;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
@@ -745,15 +765,31 @@
|
|||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
border-radius: 2rem;
|
border-radius: 2rem;
|
||||||
border: 2px solid #000;
|
border: 1.5px solid rgb(216, 218, 220);
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
padding: 0 1rem;
|
padding: 0 1rem;
|
||||||
|
background-color: #fff;
|
||||||
input {
|
input {
|
||||||
border: none;
|
border: none;
|
||||||
height: 3rem;
|
height: 3rem;
|
||||||
width: 10rem;
|
width: 10rem;
|
||||||
font-size: 1.2rem;
|
font-size: 1.2rem;
|
||||||
background: rgba(0, 0, 0, 0);
|
background: rgba(0, 0, 0, 0);
|
||||||
|
&::placeholder {
|
||||||
|
color: #c4c4c4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.apply-btn {
|
||||||
|
cursor: pointer;
|
||||||
|
background-color: rgb(27, 34, 60);
|
||||||
|
font-size: 0.8rem;
|
||||||
|
color: #fff;
|
||||||
|
width: 3.3rem;
|
||||||
|
height: 1.4rem;
|
||||||
|
line-height: 1.4rem;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
> .error {
|
> .error {
|
||||||
@@ -768,11 +804,11 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
&.active,&:hover {
|
&.active,
|
||||||
|
&:hover {
|
||||||
// 40% opacity
|
// 40% opacity
|
||||||
background: rgba(231, 235, 255, 0.4);
|
background: rgba(231, 235, 255, 0.4);
|
||||||
// border: 2px solid #0ea982;
|
// border: 2px solid #0ea982;
|
||||||
|
|
||||||
}
|
}
|
||||||
&.sellWell {
|
&.sellWell {
|
||||||
// border: 2px solid #0ea982;
|
// border: 2px solid #0ea982;
|
||||||
@@ -810,10 +846,15 @@
|
|||||||
> .gallery_btn {
|
> .gallery_btn {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
margin: 2rem 0;
|
margin: 2rem 0;
|
||||||
margin-bottom: .5rem;
|
margin-bottom: 0.5rem;
|
||||||
margin-top: 1rem;
|
margin-top: 1rem;
|
||||||
background: #1B223C;
|
background: #1b223c;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
|
// width: 41.8rem;
|
||||||
|
height: 4rem;
|
||||||
|
box-sizing: border-box;
|
||||||
|
line-height: 4rem;
|
||||||
|
border-radius: 0.6rem;
|
||||||
}
|
}
|
||||||
> .payMethod_payAffirm_clause {
|
> .payMethod_payAffirm_clause {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
@@ -839,8 +880,8 @@
|
|||||||
border: 1px solid #ededed;
|
border: 1px solid #ededed;
|
||||||
background: #f1fbf9;
|
background: #f1fbf9;
|
||||||
color: #1cb36c;
|
color: #1cb36c;
|
||||||
padding: .4rem .8rem;
|
padding: 0.4rem 0.8rem;
|
||||||
border-radius: .5rem;
|
border-radius: 0.5rem;
|
||||||
margin-top: 4rem;
|
margin-top: 4rem;
|
||||||
> span {
|
> span {
|
||||||
display: flex;
|
display: flex;
|
||||||
@@ -848,14 +889,14 @@
|
|||||||
}
|
}
|
||||||
i {
|
i {
|
||||||
display: flex;
|
display: flex;
|
||||||
margin-right: .5rem;
|
margin-right: 0.5rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
> .payIcon {
|
> .payIcon {
|
||||||
height: 2rem;
|
height: 2rem;
|
||||||
margin-top: 1rem;
|
margin-top: 1rem;
|
||||||
img {
|
img {
|
||||||
margin: 0 .3rem;
|
margin: 0 0.3rem;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -953,4 +994,3 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
@@ -41,7 +41,7 @@
|
|||||||
<i v-else class="fi fi-br-check" @click="editChek('brandSlogan')"></i>
|
<i v-else class="fi fi-br-check" @click="editChek('brandSlogan')"></i>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="compute" style="flex:1;text-align: right;" v-show="fall?.list?.length > 0">
|
<div class="compute" style="margin-left: auto;text-align: right;" v-show="fall?.list?.length > 0">
|
||||||
<!-- <div @click="setProgress(50)">123123123</div> -->
|
<!-- <div @click="setProgress(50)">123123123</div> -->
|
||||||
<div class="gallery_btn" @click="compute" :class="{'loading':!(schedule.num == 1||(schedule.num == 0 && !schedule.state))}">
|
<div class="gallery_btn" @click="compute" :class="{'loading':!(schedule.num == 1||(schedule.num == 0 && !schedule.state))}">
|
||||||
{{$t('brandDNA.Compute')}}
|
{{$t('brandDNA.Compute')}}
|
||||||
@@ -546,6 +546,7 @@ export default defineComponent({
|
|||||||
}
|
}
|
||||||
.gallery_btn{
|
.gallery_btn{
|
||||||
&.loading{
|
&.loading{
|
||||||
|
width: min-content;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
color: #5F5F5F;
|
color: #5F5F5F;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<!-- <div class="icon" @click="toGmailLogin"> -->
|
<!-- <div class="icon" @click="toGmailLogin"> -->
|
||||||
<div class="icon">
|
<div class="icon">
|
||||||
<img src="@/assets/images/loginPage/gmailIcon.svg" alt="">
|
<img src="@/assets/images/loginPage/gmailIcon.svg" alt="">
|
||||||
<span>{{ $props.text }}</span>
|
<span>{{ displayText }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
props: {
|
props: {
|
||||||
text: {
|
text: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'Sign in with Google'
|
default: ''
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
setup(props, { emit }) {
|
setup(props, { emit }) {
|
||||||
@@ -108,6 +108,9 @@
|
|||||||
const toGmailLogin = ()=>{
|
const toGmailLogin = ()=>{
|
||||||
message.info(t('account.canNotUtilize'))
|
message.info(t('account.canNotUtilize'))
|
||||||
}
|
}
|
||||||
|
const displayText = computed(() => {
|
||||||
|
return props.text || t('Login.LoginWithGoogle')
|
||||||
|
})
|
||||||
onBeforeUnmount(()=>{
|
onBeforeUnmount(()=>{
|
||||||
var existingScript = document.querySelector(`script[src="${data.scriptSrc}"]`);
|
var existingScript = document.querySelector(`script[src="${data.scriptSrc}"]`);
|
||||||
if(existingScript){
|
if(existingScript){
|
||||||
@@ -120,6 +123,7 @@
|
|||||||
})
|
})
|
||||||
return {
|
return {
|
||||||
toGmailLogin,
|
toGmailLogin,
|
||||||
|
displayText,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -553,13 +553,14 @@ export default defineComponent({
|
|||||||
loginType: "EMAIL",
|
loginType: "EMAIL",
|
||||||
userId: this.userId,
|
userId: this.userId,
|
||||||
};
|
};
|
||||||
this.$emit('update:isMask',true)
|
this.store.commit('set_loading', true)
|
||||||
Https.axiosPost(Https.httpUrls.accountLogin, data)
|
Https.axiosPost(Https.httpUrls.accountLogin, data)
|
||||||
.then((rv: any) => {
|
.then((rv: any) => {
|
||||||
this.setSuccessLogin(rv);
|
this.setSuccessLogin(rv);
|
||||||
|
this.store.commit('set_loading', false)
|
||||||
})
|
})
|
||||||
.catch((res) => {
|
.catch((res) => {
|
||||||
this.$emit('update:isMask',false)
|
this.store.commit('set_loading', false)
|
||||||
});
|
});
|
||||||
},1000)
|
},1000)
|
||||||
},
|
},
|
||||||
@@ -853,6 +854,10 @@ export default defineComponent({
|
|||||||
font-size: 2.2rem;
|
font-size: 2.2rem;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: #030303;
|
color: #030303;
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
font-size: 1.2rem;
|
||||||
|
margin-left: .5rem;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.email_last_step_block_icon {
|
.email_last_step_block_icon {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|||||||
@@ -161,6 +161,13 @@
|
|||||||
font-size: 2.4rem;
|
font-size: 2.4rem;
|
||||||
line-height: 8.7rem;
|
line-height: 8.7rem;
|
||||||
outline: none;
|
outline: none;
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
border-radius: .7rem;
|
||||||
|
width: 3.5rem;
|
||||||
|
height: 3.5rem;
|
||||||
|
font-size: 1.8rem;
|
||||||
|
line-height: 3.5rem;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
input:last-of-type {
|
input:last-of-type {
|
||||||
margin-right: 0;
|
margin-right: 0;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<div class="Container">
|
<div class="Container">
|
||||||
<div class="icon" @click="openWeiXinModel">
|
<div class="icon" @click="openWeiXinModel">
|
||||||
<img src="@/assets/images/loginPage/weiXinIcon.svg" alt="" />
|
<img src="@/assets/images/loginPage/weiXinIcon.svg" alt="" />
|
||||||
<span>{{ $props.text }}</span>
|
<span>{{ displayText }}</span>
|
||||||
</div>
|
</div>
|
||||||
<weiXinModel ref="weiXinModel"></weiXinModel>
|
<weiXinModel ref="weiXinModel"></weiXinModel>
|
||||||
</div>
|
</div>
|
||||||
@@ -18,6 +18,7 @@ import {
|
|||||||
toRefs,
|
toRefs,
|
||||||
} from "vue";
|
} from "vue";
|
||||||
import weiXinModel from "./weiXinModel.vue";
|
import weiXinModel from "./weiXinModel.vue";
|
||||||
|
import { useI18n } from 'vue-i18n'
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: "login",
|
name: "login",
|
||||||
components: {
|
components: {
|
||||||
@@ -26,20 +27,25 @@ export default defineComponent({
|
|||||||
props: {
|
props: {
|
||||||
text: {
|
text: {
|
||||||
type: String,
|
type: String,
|
||||||
default: "Sign in with Wechat",
|
default: ''
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
setup() {
|
setup(props) {
|
||||||
let weiXinDom = reactive({
|
let weiXinDom = reactive({
|
||||||
weiXinModel: null,
|
weiXinModel: null,
|
||||||
});
|
});
|
||||||
|
const { t } = useI18n()
|
||||||
const openWeiXinModel = () => {
|
const openWeiXinModel = () => {
|
||||||
weiXinDom.weiXinModel.init();
|
weiXinDom.weiXinModel.init();
|
||||||
};
|
};
|
||||||
|
const displayText = computed(() => {
|
||||||
|
return props.text || t('Login.LoginWithWechat')
|
||||||
|
})
|
||||||
onMounted(() => {});
|
onMounted(() => {});
|
||||||
return {
|
return {
|
||||||
...toRefs(weiXinDom),
|
...toRefs(weiXinDom),
|
||||||
openWeiXinModel,
|
openWeiXinModel,
|
||||||
|
displayText,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -113,8 +113,8 @@
|
|||||||
<img v-for="item in scaleImageData?.designPythonOutfitList" v-lazy="item.designUrl">
|
<img v-for="item in scaleImageData?.designPythonOutfitList" v-lazy="item.designUrl">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="userDetail.systemList.indexOf(1) > -1 && scaleImageData.isMine != 1 && scaleImageData.selected != 1 && scaleImageData.openSource != 0" class="started_btn" @click="setChoose" >{{$t('newScaleImage.SecondaryCreation')}}</div>
|
<!-- <div v-if="userDetail.systemList.indexOf(1) > -1 && scaleImageData.isMine != 1 && scaleImageData.selected != 1 && scaleImageData.openSource != 0" class="started_btn" @click="setChoose" >{{$t('newScaleImage.SecondaryCreation')}}</div> -->
|
||||||
<!-- <div v-if="systemUser.value == 1 && scaleImageData.isMine != 1 && scaleImageData.selected != 1" class="started_btn" @click="setChoose" :title="systemUser.value != 1?$t('newScaleImage.jsContent1'): scaleImageData.openSource == 0?$t('newScaleImage.jsContent2'):''" :class="{active:systemUser.value != 1?true:scaleImageData.openSource == 0}">{{$t('newScaleImage.SecondaryCreation')}}</div> -->
|
<div v-if="userDetail.systemList.indexOf(1) > -1 && scaleImageData.openSource != 0" class="started_btn" @click="setChoose" >{{$t('newScaleImage.SecondaryCreation')}}</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-else class="newScaleImage_right_content_generate">
|
<div v-else class="newScaleImage_right_content_generate">
|
||||||
<div class="scaleImage_chunk_item content_left_generate_item">
|
<div class="scaleImage_chunk_item content_left_generate_item">
|
||||||
@@ -276,7 +276,6 @@ import { Modal,message } from "ant-design-vue";
|
|||||||
import { useI18n } from 'vue-i18n';
|
import { useI18n } from 'vue-i18n';
|
||||||
import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
|
import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
|
||||||
import fullScreenImg from '@/component/HomePage/fullScreenImg.vue'
|
import fullScreenImg from '@/component/HomePage/fullScreenImg.vue'
|
||||||
import { debounce } from 'lodash-es'
|
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
components:{fullScreenImg},
|
components:{fullScreenImg},
|
||||||
@@ -438,25 +437,36 @@ export default defineComponent({
|
|||||||
})
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
let setChoose = debounce(async()=>{
|
let flag = true
|
||||||
|
let setChoose = async()=>{
|
||||||
|
if(!flag) return
|
||||||
|
flag = false
|
||||||
|
try {
|
||||||
if(userDetail.value.systemList.indexOf(1) == -1){
|
if(userDetail.value.systemList.indexOf(1) == -1){
|
||||||
return message.info(t('newScaleImage.jsContent1'))
|
message.info(t('newScaleImage.jsContent1'))
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
const targetDate = new Date('2025-09-01T00:00:00');
|
const targetDate = new Date('2025-09-01T00:00:00');
|
||||||
// 解析输入日期字符串
|
// 解析输入日期字符串
|
||||||
const inputDate = new Date(imgData.scaleImageData.createDate);
|
const inputDate = new Date(imgData.scaleImageData.createDate);
|
||||||
if(inputDate < targetDate){
|
if(inputDate < targetDate){
|
||||||
return message.info(t('newScaleImage.jsContent2'))
|
message.info(t('newScaleImage.jsContent2'))
|
||||||
|
return
|
||||||
}
|
}
|
||||||
if(imgData.scaleImageData.openSource == 0){
|
if(imgData.scaleImageData.openSource == 0){
|
||||||
return message.info(t('newScaleImage.jsContent2'))
|
message.info(t('newScaleImage.jsContent2'))
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
store.state.Workspace.cachedRoutes = [];
|
||||||
let id = await getWorks(imgData.scaleImageData.id)
|
let id = await getWorks(imgData.scaleImageData.id)
|
||||||
router.push(`/home/history/${id}`)
|
await router.push(`/home/history/${id}`)
|
||||||
// router.push({name:'home',params: {id:imgData.scaleImageData.id,type:'Works'}})
|
|
||||||
store.commit('setChooseIsDesign',false)
|
store.commit('setChooseIsDesign',false)
|
||||||
},300)
|
} finally {
|
||||||
|
// 函数执行完成后恢复为 true,确保无论成功还是失败都能再次点击
|
||||||
|
flag = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let setCommentReply = (value:any,str:any)=>{
|
let setCommentReply = (value:any,str:any)=>{
|
||||||
imgData.commentReply.leve1Id = value.id
|
imgData.commentReply.leve1Id = value.id
|
||||||
|
|||||||
@@ -132,8 +132,8 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="modal_img_max">
|
<div class="modal_img_max">
|
||||||
<div v-if="!modalImg[0]?.id" class="modal_img" id="modal_img" :class="{active:flex_direction}">
|
<div v-if="!modalImg[0]?.id" class="modal_img" id="modal_img" :class="{active:flex_direction}">
|
||||||
<div v-for="item,index in layoutList" :class="[moodb_className[index]]" class="modal_imgItem">
|
<!-- <div class="modal_img" id="modal_img" :class="{active:flex_direction}"> -->
|
||||||
<img :src="item.imgUrl" v-modelImg>
|
<div v-for="item,index in layoutList" :class="[moodb_className[index]]" :style="{'background-image':`url(${item.imgUrl})`}" class="modal_imgItem">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-else class="modal_img">
|
<div v-else class="modal_img">
|
||||||
@@ -244,30 +244,6 @@ export default defineComponent({
|
|||||||
this.token = getCookie("token") || "";
|
this.token = getCookie("token") || "";
|
||||||
this.uploadUrl = getUploadUrl();
|
this.uploadUrl = getUploadUrl();
|
||||||
},
|
},
|
||||||
directives:{
|
|
||||||
modelImg:{
|
|
||||||
mounted(el) {
|
|
||||||
let parentNode = el.parentNode
|
|
||||||
if(parentNode.offsetHeight >= parentNode.offsetWidth){
|
|
||||||
el.style.height = 100+'%'
|
|
||||||
el.style.width = 'auto'
|
|
||||||
}else{
|
|
||||||
el.style.width = 100+'%'
|
|
||||||
el.style.height = 'auto'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
updated (el) {
|
|
||||||
let parentNode = el.parentNode
|
|
||||||
if(parentNode.offsetHeight >= parentNode.offsetWidth){
|
|
||||||
el.style.height = 100+'%'
|
|
||||||
el.style.width = 'auto'
|
|
||||||
}else{
|
|
||||||
el.style.width = 100+'%'
|
|
||||||
el.style.height = 'auto'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
methods: {
|
||||||
open(num: Number) {
|
open(num: Number) {
|
||||||
this.openClick = num;
|
this.openClick = num;
|
||||||
@@ -445,7 +421,7 @@ export default defineComponent({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.edieShow = true
|
this.edieShow = true
|
||||||
if(this.moodb_[arr.length-1].length == 2){
|
if(this.moodb_[arr.length-1].length == 1){
|
||||||
this.moodb_className = this.moodb_[arr.length-1][0]
|
this.moodb_className = this.moodb_[arr.length-1][0]
|
||||||
}else{
|
}else{
|
||||||
this.moodb_className = this.moodb_[arr.length-1][random]
|
this.moodb_className = this.moodb_[arr.length-1][random]
|
||||||
@@ -628,6 +604,7 @@ export default defineComponent({
|
|||||||
height: calc(5rem*1.2);
|
height: calc(5rem*1.2);
|
||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|
||||||
&.modal_img::-webkit-scrollbar {
|
&.modal_img::-webkit-scrollbar {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
@@ -706,16 +683,9 @@ export default defineComponent({
|
|||||||
position: relative;
|
position: relative;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
img{
|
background-repeat: no-repeat;
|
||||||
position: absolute;
|
background-position: center;
|
||||||
top: 50%;
|
background-size: cover;
|
||||||
left: 50%;
|
|
||||||
transform: translate(-50%,-50%);
|
|
||||||
float: left;
|
|
||||||
object-fit: contain;
|
|
||||||
user-select:none;
|
|
||||||
-webkit-user-drag: none;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
.wh1{
|
.wh1{
|
||||||
width: 23%;
|
width: 23%;
|
||||||
|
|||||||
@@ -242,7 +242,16 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="prompt-input-container" v-show="!showMotion">
|
<div class="prompt-input-container" v-show="!showMotion">
|
||||||
<div class="title">{{ $t('ProductImg.Prompt') }}</div>
|
<div class="title">
|
||||||
|
<span>{{ $t('ProductImg.Prompt') }}</span>
|
||||||
|
<SvgIcon
|
||||||
|
class="cursor-icon"
|
||||||
|
@click="handleNavigateHelp"
|
||||||
|
name="CHelpFlip"
|
||||||
|
size="18"
|
||||||
|
color="#000"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
<promptInput :content="prompt" ref="promptInputRef" />
|
<promptInput :content="prompt" ref="promptInputRef" />
|
||||||
</div>
|
</div>
|
||||||
<div class="transferPose" v-show="showMotion">
|
<div class="transferPose" v-show="showMotion">
|
||||||
@@ -380,7 +389,7 @@
|
|||||||
<a-spin size="large" />
|
<a-spin size="large" />
|
||||||
</div>
|
</div>
|
||||||
<template>
|
<template>
|
||||||
<Prompt v-if="scaleImageList[scaleImageIndex]?.resultType === 'ToProductImage'" v-model:showModal="showPromptAssist" isDesignPage />
|
<Prompt v-if="scaleImageList[scaleImageIndex]?.resultType === 'ToProductImage'" v-model:showModal="showPromptAssist" />
|
||||||
<PromptEditProduct v-if="scaleImageList[scaleImageIndex]?.resultType === 'Relight'" v-model:showModal="showPromptAssist" />
|
<PromptEditProduct v-if="scaleImageList[scaleImageIndex]?.resultType === 'Relight'" v-model:showModal="showPromptAssist" />
|
||||||
</template>
|
</template>
|
||||||
<Product
|
<Product
|
||||||
@@ -450,7 +459,7 @@ export default defineComponent({
|
|||||||
let userDetail: any = computed(() => {
|
let userDetail: any = computed(() => {
|
||||||
return store.state.UserHabit.userDetail
|
return store.state.UserHabit.userDetail
|
||||||
})
|
})
|
||||||
let { t } = useI18n()
|
let { t, locale } = useI18n()
|
||||||
const textareaRef = useTemplateRef<HTMLTextAreaElement>('textareaRef')
|
const textareaRef = useTemplateRef<HTMLTextAreaElement>('textareaRef')
|
||||||
const videoType = ref(2)
|
const videoType = ref(2)
|
||||||
const showMotion = computed(() => videoType.value === 1)
|
const showMotion = computed(() => videoType.value === 1)
|
||||||
@@ -599,13 +608,13 @@ export default defineComponent({
|
|||||||
})
|
})
|
||||||
const showPromptAssist = ref(false)
|
const showPromptAssist = ref(false)
|
||||||
const handleClickAssistBtn = () => {
|
const handleClickAssistBtn = () => {
|
||||||
const { httpType } = store.state.Workspace.probjects
|
// const { httpType } = store.state.Workspace.probjects
|
||||||
const isSingleDesign = httpType === 'SINGLE_DESIGN'
|
// const isSingleDesign = httpType === 'SINGLE_DESIGN'
|
||||||
if (!isSingleDesign) {
|
// if (!isSingleDesign) {
|
||||||
const promptText = t('ProductImg.Series')
|
// const promptText = t('ProductImg.Series')
|
||||||
productimg.productimgSearchName = promptText
|
// productimg.productimgSearchName = promptText
|
||||||
return
|
// return
|
||||||
}
|
// }
|
||||||
showPromptAssist.value = true
|
showPromptAssist.value = true
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1310,7 +1319,13 @@ export default defineComponent({
|
|||||||
return videoType.value === 3 ? false : true
|
return videoType.value === 3 ? false : true
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
const handleNavigateHelp = () => {
|
||||||
|
const url =
|
||||||
|
locale === 'CHINESE_SIMPLIFIED'
|
||||||
|
? 'https://aida-user-manual-chinese.super.site/2b08f755cedd80a985cffdf2af80c538'
|
||||||
|
: 'https://aida-user-manual.super.site/advanced-tool/animated-product-image/to-product-video-prompt-assist '
|
||||||
|
window.open(url,'_blank')
|
||||||
|
}
|
||||||
onBeforeUnmount(() => {
|
onBeforeUnmount(() => {
|
||||||
clearInterval(prductimgTime)
|
clearInterval(prductimgTime)
|
||||||
clearInterval(remPrductimgTime)
|
clearInterval(remPrductimgTime)
|
||||||
@@ -1374,7 +1389,8 @@ export default defineComponent({
|
|||||||
handlePlayNewVideo,
|
handlePlayNewVideo,
|
||||||
isNewVideoPlaying,
|
isNewVideoPlaying,
|
||||||
showDropdown,
|
showDropdown,
|
||||||
inputPlaceholder
|
inputPlaceholder,
|
||||||
|
handleNavigateHelp
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
@@ -1787,10 +1803,14 @@ export default defineComponent({
|
|||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
.title {
|
.title {
|
||||||
font-weight: 500;
|
display: flex;
|
||||||
color: #000;
|
align-items: center;
|
||||||
font-size: 1.7rem;
|
column-gap: 1rem;
|
||||||
margin-bottom: 1.4rem;
|
.cursor-icon {
|
||||||
|
display: flex;
|
||||||
|
width: auto;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.prompt-container {
|
.prompt-container {
|
||||||
|
|||||||
@@ -1200,6 +1200,11 @@ export default defineComponent({
|
|||||||
likeDesignCollectionList.value.forEach((likeItem:any,index:any)=>{
|
likeDesignCollectionList.value.forEach((likeItem:any,index:any)=>{
|
||||||
if(likeItem?.childList?.length > 0){
|
if(likeItem?.childList?.length > 0){
|
||||||
let index = likeItem.childList.findIndex((item:any)=>{return item.taskId == listItem})
|
let index = likeItem.childList.findIndex((item:any)=>{return item.taskId == listItem})
|
||||||
|
likeItem.childList.forEach((item)=>{
|
||||||
|
if(item.sort > likeItem.childList[index].sort){
|
||||||
|
item.sort -= 1
|
||||||
|
}
|
||||||
|
})
|
||||||
likeItem.childList.splice(index,1)
|
likeItem.childList.splice(index,1)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
<!-- <div v-show="openType === 'history'" class="function">
|
<!-- <div v-show="openType === 'history'" class="function">
|
||||||
<design :key="componentKey" ref="design"></design>
|
<design :key="componentKey" ref="design"></design>
|
||||||
</div> -->
|
</div> -->
|
||||||
<router-view v-if="
|
<router-view v-show="
|
||||||
(openType && openType != 'history' && !routeQuery.id) ||
|
(openType && openType != 'history' && !routeQuery.id) ||
|
||||||
$route.path != '/home'"
|
$route.path != '/home'"
|
||||||
@setTask="setTask"
|
@setTask="setTask"
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
<!-- <div v-else-if="routeQuery.id" class="function">
|
<!-- <div v-else-if="routeQuery.id" class="function">
|
||||||
<design :key="componentKey" ref="design"></design>
|
<design :key="componentKey" ref="design"></design>
|
||||||
</div> -->
|
</div> -->
|
||||||
<div v-else-if="!routeQuery.history" class="function">
|
<div v-if="!$route.params.id && !routeQuery.id" class="function">
|
||||||
<newPorject ref="newPorject" @newProject=newProject></newPorject>
|
<newPorject ref="newPorject" @newProject=newProject></newPorject>
|
||||||
</div>
|
</div>
|
||||||
<!-- <iframe src="https://kaput-relative-4bb.notion.site/ebd/22a8f755cedd809e98a2c8c6366ee701" width="100%" height="100%" frameborder="0" allowfullscreen /> -->
|
<!-- <iframe src="https://kaput-relative-4bb.notion.site/ebd/22a8f755cedd809e98a2c8c6366ee701" width="100%" height="100%" frameborder="0" allowfullscreen /> -->
|
||||||
@@ -55,13 +55,16 @@ export default defineComponent({
|
|||||||
const data = reactive({
|
const data = reactive({
|
||||||
openType:'',
|
openType:'',
|
||||||
componentKey:null,
|
componentKey:null,
|
||||||
isShowMark:false,
|
isShowMark:true,
|
||||||
routeQuery:{} as any,
|
routeQuery:{} as any,
|
||||||
selectObject:computed(()=>store.state.Workspace.probjects) as any,//选择的项目
|
selectObject:computed(()=>store.state.Workspace.probjects) as any,//选择的项目
|
||||||
chatData:null as any,
|
chatData:null as any,
|
||||||
dataLoad:true as any,
|
dataLoad:true as any,
|
||||||
cachedRoutes:computed(()=>store.state.Workspace.cachedRoutes),//
|
cachedRoutes:computed(()=>store.state.Workspace.cachedRoutes),//
|
||||||
})
|
})
|
||||||
|
onMounted(()=>{
|
||||||
|
data.isShowMark = false
|
||||||
|
})
|
||||||
let settingGetHistory:any = inject('settingGetHistory')
|
let settingGetHistory:any = inject('settingGetHistory')
|
||||||
const setIsShowMark = (boolean:boolean)=>{
|
const setIsShowMark = (boolean:boolean)=>{
|
||||||
data.isShowMark = boolean
|
data.isShowMark = boolean
|
||||||
|
|||||||
@@ -38,7 +38,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="style marginBottom" v-if="show.style">
|
<div class="style marginBottom" v-if="show.style">
|
||||||
<div class="text">{{$t('Habit.Style')}}:</div>
|
<div class="text">{{$t('Habit.Style')}}:</div>
|
||||||
<div class="center">{{ selectObject?.styleName?selectObject?.styleName:'All' }}</div>
|
<div class="center">{{ selectObject?.styleName?selectObject?.styleName:$t('Header.All') }}</div>
|
||||||
<div class="gallery_btn" @click="setStyle">{{ $t('Habit.Select') }}</div>
|
<div class="gallery_btn" @click="setStyle">{{ $t('Habit.Select') }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="style brand marginBottom">
|
<div class="style brand marginBottom">
|
||||||
|
|||||||
@@ -777,6 +777,7 @@ export default defineComponent({
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
const likeSetBtn = (id: any, str: string) => {
|
const likeSetBtn = (id: any, str: string) => {
|
||||||
|
console.log(1111)
|
||||||
data.likeList.forEach((item: any, index: any) => {
|
data.likeList.forEach((item: any, index: any) => {
|
||||||
if (item.id == id && id) {
|
if (item.id == id && id) {
|
||||||
if (str == 'zoom') {
|
if (str == 'zoom') {
|
||||||
@@ -814,6 +815,7 @@ export default defineComponent({
|
|||||||
let likeFile = (item: any, str: any, index: any) => {
|
let likeFile = (item: any, str: any, index: any) => {
|
||||||
let url
|
let url
|
||||||
let value = {}
|
let value = {}
|
||||||
|
console.log(props.isDesignPage)
|
||||||
if (str == 'like') {
|
if (str == 'like') {
|
||||||
value = {
|
value = {
|
||||||
likeOrDislike: 'like',
|
likeOrDislike: 'like',
|
||||||
@@ -1669,7 +1671,7 @@ export default defineComponent({
|
|||||||
.ant-upload-select-picture-card {
|
.ant-upload-select-picture-card {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
border: 1px solid #000;
|
border: 0.1rem solid #000;
|
||||||
background: #fff;
|
background: #fff;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ defineExpose({
|
|||||||
<style lang="less" scoped>
|
<style lang="less" scoped>
|
||||||
.promptInput {
|
.promptInput {
|
||||||
--promptInputBorderRadius: 10px;
|
--promptInputBorderRadius: 10px;
|
||||||
--promptInputBorder: 2px solid #dcdfe6;
|
--promptInputBorder: 1px solid #000;
|
||||||
--promptInputPadding: 1.5rem;
|
--promptInputPadding: 1.5rem;
|
||||||
|
|
||||||
width: 100%;
|
width: 100%;
|
||||||
@@ -86,7 +86,7 @@ defineExpose({
|
|||||||
.sender-container {
|
.sender-container {
|
||||||
position: relative;
|
position: relative;
|
||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
border: 2px solid #dcdfe6;
|
border: 1px solid #000;
|
||||||
padding: 1.5rem;
|
padding: 1.5rem;
|
||||||
font-size: 1.8rem;
|
font-size: 1.8rem;
|
||||||
.sender-wrapper {
|
.sender-wrapper {
|
||||||
@@ -100,7 +100,7 @@ defineExpose({
|
|||||||
.textarea-container {
|
.textarea-container {
|
||||||
position: relative;
|
position: relative;
|
||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
border: 2px solid #dcdfe6;
|
border: 1px solid #000;
|
||||||
padding: 1.5rem;
|
padding: 1.5rem;
|
||||||
height: auto;
|
height: auto;
|
||||||
font-size: 1.8rem;
|
font-size: 1.8rem;
|
||||||
|
|||||||
@@ -121,7 +121,7 @@ const promptList = computed(() => {
|
|||||||
return [t('ProductImg.UploadWithoutModel'), t('ProductImg.UploadWithModel')]
|
return [t('ProductImg.UploadWithoutModel'), t('ProductImg.UploadWithModel')]
|
||||||
} else {
|
} else {
|
||||||
// 如果是从design来的
|
// 如果是从design来的
|
||||||
if (isSingleDesign) {
|
if (props.isDesignPage) {
|
||||||
// SINGLE_DESIGN: 两个提示词
|
// SINGLE_DESIGN: 两个提示词
|
||||||
// 根据年龄和性别选择对应的提示词
|
// 根据年龄和性别选择对应的提示词
|
||||||
let firstPrompt: string // 不带模特的提示词
|
let firstPrompt: string // 不带模特的提示词
|
||||||
@@ -255,8 +255,8 @@ const exampleList = computed(() => {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
const { ageGroup, httpType, sex } = store.state.Workspace.probjects
|
const { ageGroup, httpType, sex } = store.state.Workspace.probjects
|
||||||
const isSingleDesign = httpType === 'SINGLE_DESIGN'
|
// const isSingleDesign = httpType === 'SINGLE_DESIGN'
|
||||||
if (!isSingleDesign) return {}
|
// if (!isSingleDesign) return {}
|
||||||
const isAdult = ageGroup === 'Adult'
|
const isAdult = ageGroup === 'Adult'
|
||||||
const isFemale = sex === 'Female'
|
const isFemale = sex === 'Female'
|
||||||
if (isAdult) {
|
if (isAdult) {
|
||||||
|
|||||||
@@ -1101,13 +1101,13 @@ export default defineComponent({
|
|||||||
|
|
||||||
const showPromptAssist = ref(false)
|
const showPromptAssist = ref(false)
|
||||||
const handleClickAssistBtn = () => {
|
const handleClickAssistBtn = () => {
|
||||||
const { httpType } = store.state.Workspace.probjects
|
// const { httpType } = store.state.Workspace.probjects
|
||||||
const isSingleDesign = httpType === 'SINGLE_DESIGN'
|
// const isSingleDesign = httpType === 'SINGLE_DESIGN'
|
||||||
if (props.isDesignPage && !isSingleDesign) {
|
// if (props.isDesignPage && !isSingleDesign) {
|
||||||
const promptText = t('ProductImg.Series')
|
// const promptText = t('ProductImg.Series')
|
||||||
productImgData.searchName[props.productimgMenu.value] = promptText
|
// productImgData.searchName[props.productimgMenu.value] = promptText
|
||||||
return
|
// return
|
||||||
}
|
// }
|
||||||
showPromptAssist.value = true
|
showPromptAssist.value = true
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1250,13 +1250,15 @@ export default defineComponent({
|
|||||||
|
|
||||||
> .item {
|
> .item {
|
||||||
margin-right: 1rem;
|
margin-right: 1rem;
|
||||||
width: calc(100% / 2 - 0.5rem);
|
// width: calc(100% / 2 - 0.5rem);
|
||||||
|
// height: 25rem;
|
||||||
|
width: 12.7rem;
|
||||||
|
height: 17.8rem;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
height: 25rem;
|
|
||||||
position: relative;
|
position: relative;
|
||||||
// &.active{
|
// &.active{
|
||||||
// border: 2px solid;
|
// border: 2px solid;
|
||||||
@@ -1532,6 +1534,9 @@ export default defineComponent({
|
|||||||
.ant-upload-select-picture-card {
|
.ant-upload-select-picture-card {
|
||||||
width: 12.7rem;
|
width: 12.7rem;
|
||||||
height: 17.8rem;
|
height: 17.8rem;
|
||||||
|
border-width: 1px;
|
||||||
|
background: #fff;
|
||||||
|
border: 0.1rem solid #000;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -106,12 +106,12 @@ export default defineComponent({
|
|||||||
Yearly: '年度',
|
Yearly: '年度',
|
||||||
monthly: [
|
monthly: [
|
||||||
{
|
{
|
||||||
title: '免费版',
|
title: '试用版',
|
||||||
img: CChargeIcon,
|
img: CChargeIcon,
|
||||||
type: 'personal',
|
type: 'personal',
|
||||||
info: '您的AI时尚设计助手',
|
info: '您的AI时尚设计助手',
|
||||||
price: 'HK$0',
|
price: 'HK$0',
|
||||||
detail: '5天·50积分',
|
detail: '自注册之日起 5 天内 · 50 个积分',
|
||||||
highlight: '',
|
highlight: '',
|
||||||
discounts: '9折优惠',
|
discounts: '9折优惠',
|
||||||
detailList: [
|
detailList: [
|
||||||
@@ -185,12 +185,12 @@ export default defineComponent({
|
|||||||
],
|
],
|
||||||
yearl: [
|
yearl: [
|
||||||
{
|
{
|
||||||
title: '免费版',
|
title: '试用版',
|
||||||
img: CChargeIcon,
|
img: CChargeIcon,
|
||||||
type: 'personal',
|
type: 'personal',
|
||||||
info: '您的AI时尚设计助手',
|
info: '您的AI时尚设计助手',
|
||||||
price: 'HK$0',
|
price: 'HK$0',
|
||||||
detail: '5天·50积分',
|
detail: '自注册之日起 5 天内 · 50 个积分',
|
||||||
highlight: '',
|
highlight: '',
|
||||||
discounts: '9折优惠',
|
discounts: '9折优惠',
|
||||||
detailList: [
|
detailList: [
|
||||||
@@ -250,12 +250,12 @@ export default defineComponent({
|
|||||||
Yearly: 'Yearly',
|
Yearly: 'Yearly',
|
||||||
monthly: [
|
monthly: [
|
||||||
{
|
{
|
||||||
title: 'Free',
|
title: 'Trial',
|
||||||
img: CChargeIcon,
|
img: CChargeIcon,
|
||||||
type: 'personal',
|
type: 'personal',
|
||||||
info: 'Your AI Fashion Design Assistant',
|
info: 'Your AI Fashion Design Assistant',
|
||||||
price: 'HK$0',
|
price: 'HK$0',
|
||||||
detail: '5 days · 50 credits',
|
detail: '5 days from sign-up · 50 credits',
|
||||||
highlight: '',
|
highlight: '',
|
||||||
discounts: '10% off',
|
discounts: '10% off',
|
||||||
detailList: [
|
detailList: [
|
||||||
@@ -329,12 +329,12 @@ export default defineComponent({
|
|||||||
],
|
],
|
||||||
yearl: [
|
yearl: [
|
||||||
{
|
{
|
||||||
title: 'Free',
|
title: 'Trial',
|
||||||
img: CChargeIcon,
|
img: CChargeIcon,
|
||||||
type: 'free',
|
type: 'personal',
|
||||||
info: 'Your AI Fashion Design Assistant',
|
info: 'Your AI Fashion Design Assistant',
|
||||||
price: 'HK$0',
|
price: 'HK$0',
|
||||||
detail: '5 days · 50 credits',
|
detail: '5 days from sign-up · 50 credits',
|
||||||
highlight: '',
|
highlight: '',
|
||||||
discounts: '10% off',
|
discounts: '10% off',
|
||||||
detailList: [
|
detailList: [
|
||||||
|
|||||||
@@ -79,7 +79,7 @@
|
|||||||
Forgot password?
|
Forgot password?
|
||||||
</div> -->
|
</div> -->
|
||||||
</div>
|
</div>
|
||||||
<div class="password_input_block">
|
<div class="password_input_block" v-show="emailStap !== 2">
|
||||||
<div v-show="passwordConditionShow" class="conditionShow">
|
<div v-show="passwordConditionShow" class="conditionShow">
|
||||||
<div class="item">
|
<div class="item">
|
||||||
<div class="icon">
|
<div class="icon">
|
||||||
@@ -144,12 +144,13 @@
|
|||||||
@click="changePasswordType()"
|
@click="changePasswordType()"
|
||||||
></div>
|
></div>
|
||||||
</div>
|
</div>
|
||||||
<span style="font-weight: 400; opacity: 0.7"
|
<span style="font-weight: 400; opacity: 0.7" v-show="emailStap !== 2"
|
||||||
>{{ userI18n[selectUserI18n].inputPasswordTip }}</span
|
>{{ userI18n[selectUserI18n].inputPasswordTip }}</span
|
||||||
>
|
>
|
||||||
<div class="login_form_title marign_top30">{{ userI18n[selectUserI18n].Email }}</div>
|
<div class="login_form_title marign_top30" v-show="emailStap !== 2">{{ userI18n[selectUserI18n].Email }}</div>
|
||||||
<input
|
<input
|
||||||
class="login_form_input"
|
class="login_form_input"
|
||||||
|
v-show="emailStap !== 2"
|
||||||
:placeholder="userI18n[selectUserI18n].inputEmail"
|
:placeholder="userI18n[selectUserI18n].inputEmail"
|
||||||
v-model="email"
|
v-model="email"
|
||||||
@keydown.enter="submitPerLogin()"
|
@keydown.enter="submitPerLogin()"
|
||||||
@@ -917,6 +918,7 @@ export default defineComponent({
|
|||||||
position: relative;
|
position: relative;
|
||||||
@media (max-width: 768px) {
|
@media (max-width: 768px) {
|
||||||
margin-top: 2.4rem;
|
margin-top: 2.4rem;
|
||||||
|
height: 20rem;
|
||||||
}
|
}
|
||||||
&[state="2"] {
|
&[state="2"] {
|
||||||
> * {
|
> * {
|
||||||
@@ -1015,6 +1017,9 @@ export default defineComponent({
|
|||||||
// margin-top: 4rem;
|
// margin-top: 4rem;
|
||||||
.email_last_step_bottom {
|
.email_last_step_bottom {
|
||||||
padding: 0 40px;
|
padding: 0 40px;
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
padding: 0 2rem;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.email_last_step_block {
|
.email_last_step_block {
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
@@ -1028,6 +1033,10 @@ export default defineComponent({
|
|||||||
font-size: 2.2rem;
|
font-size: 2.2rem;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: #030303;
|
color: #030303;
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
font-size: 1.2rem;
|
||||||
|
margin-left: .5rem;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.email_last_step_block_icon {
|
.email_last_step_block_icon {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
@@ -1229,6 +1238,9 @@ export default defineComponent({
|
|||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: #000;
|
color: #000;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
font-size: 1rem;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.email_last_step_des {
|
.email_last_step_des {
|
||||||
@@ -1237,16 +1249,25 @@ export default defineComponent({
|
|||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
margin-top: 4rem;
|
margin-top: 4rem;
|
||||||
margin-bottom: 2rem;
|
margin-bottom: 2rem;
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
margin-top: 2rem;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
.sent_email_content {
|
.sent_email_content {
|
||||||
font-size: 1.8rem;
|
font-size: 1.8rem;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: #a5b0c2;
|
color: #a5b0c2;
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
font-size: 1.2rem;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.email_tip_content {
|
.email_tip_content {
|
||||||
font-size: 1.4rem;
|
font-size: 1.4rem;
|
||||||
color: #030303;
|
color: #030303;
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
font-size: 1.2rem;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -453,7 +453,8 @@ export default {
|
|||||||
jsContent4: '图片必须小于5MB',
|
jsContent4: '图片必须小于5MB',
|
||||||
jsContent5: '图片已经上传是否继续上传',
|
jsContent5: '图片已经上传是否继续上传',
|
||||||
jsContent6: '输入的内容超过允许输入的最大长度',
|
jsContent6: '输入的内容超过允许输入的最大长度',
|
||||||
jsContent7: '请输入内容~'
|
jsContent7: '请输入内容~',
|
||||||
|
jsContent8: '请输入项目名字~'
|
||||||
},
|
},
|
||||||
ModelPlacement: {
|
ModelPlacement: {
|
||||||
Registration: '新增模特',
|
Registration: '新增模特',
|
||||||
@@ -1529,7 +1530,21 @@ export default {
|
|||||||
Relight: '打光',
|
Relight: '打光',
|
||||||
ChatRobot: '对话生成',
|
ChatRobot: '对话生成',
|
||||||
Yes: '是',
|
Yes: '是',
|
||||||
No: '否'
|
No: '否',
|
||||||
|
SubscribePlan: '订阅计划',
|
||||||
|
SwitchPlanSuccess: '切换订阅计划成功',
|
||||||
|
SwitchPlanFailed: '切换订阅计划失败',
|
||||||
|
NoPlanSelected: '请先选择订阅计划',
|
||||||
|
PlanNameRequired: '请输入计划名称',
|
||||||
|
PlanNotFound: '计划不存在',
|
||||||
|
RenamePlanSuccess: '重命名成功',
|
||||||
|
RenamePlanFailed: '重命名失败',
|
||||||
|
RenamePlan: '重命名订阅计划',
|
||||||
|
PlanName: '计划名称',
|
||||||
|
InputPlanName: '请输入计划名称',
|
||||||
|
Cancel: '取消',
|
||||||
|
SelectPlan: '选择计划',
|
||||||
|
AllPlan: '全部'
|
||||||
},
|
},
|
||||||
Login: {
|
Login: {
|
||||||
Login: '登录',
|
Login: '登录',
|
||||||
@@ -1542,11 +1557,13 @@ export default {
|
|||||||
LoginMethod: '使用以下方式登录:',
|
LoginMethod: '使用以下方式登录:',
|
||||||
Individual: '个人账号',
|
Individual: '个人账号',
|
||||||
Academic: '学术账号',
|
Academic: '学术账号',
|
||||||
LogoOnToAiDA: '登录到AiDA 3.1',
|
LogonToAiDA: '登录到AiDA 3.1',
|
||||||
Infomation: '请填写以下信息',
|
Infomation: '请填写以下信息',
|
||||||
Device: '请使用iPad或电脑登录',
|
Device: '请使用iPad或电脑登录',
|
||||||
AgreePolicies: '请勾选条款、隐私政策和费用',
|
AgreePolicies: '请勾选条款、隐私政策和费用',
|
||||||
PasswordConditions: '您必须满足所有密码条件才能注册'
|
PasswordConditions: '您必须满足所有密码条件才能注册',
|
||||||
|
LoginWithGoogle: '使用谷歌账号登录',
|
||||||
|
LoginWithWechat: '使用微信登录',
|
||||||
},
|
},
|
||||||
LoginPersonal: {
|
LoginPersonal: {
|
||||||
Email: '邮箱',
|
Email: '邮箱',
|
||||||
|
|||||||
@@ -466,7 +466,8 @@ export default {
|
|||||||
jsContent4: 'Image must smaller than 5MB!',
|
jsContent4: 'Image must smaller than 5MB!',
|
||||||
jsContent5: 'This picture has been uploaded whether to continue uploading?',
|
jsContent5: 'This picture has been uploaded whether to continue uploading?',
|
||||||
jsContent6: 'The entered content exceeds the maximum length.',
|
jsContent6: 'The entered content exceeds the maximum length.',
|
||||||
jsContent7: 'Please enter content'
|
jsContent7: 'Please enter content',
|
||||||
|
jsContent8: 'Please enter the project name.'
|
||||||
},
|
},
|
||||||
ModelPlacement: {
|
ModelPlacement: {
|
||||||
Registration: 'Registration',
|
Registration: 'Registration',
|
||||||
@@ -958,7 +959,7 @@ export default {
|
|||||||
MOSTPOPULAR: 'MOST POPULAR',
|
MOSTPOPULAR: 'MOST POPULAR',
|
||||||
Monthly: 'Monthly',
|
Monthly: 'Monthly',
|
||||||
Yearly: 'Yearly',
|
Yearly: 'Yearly',
|
||||||
promotionCode: 'Coupon',
|
promotionCode: 'Coupon Code',
|
||||||
use: 'Apply',
|
use: 'Apply',
|
||||||
PromoCodeError:
|
PromoCodeError:
|
||||||
'Please check if the promo code is correct or if the date has expired',
|
'Please check if the promo code is correct or if the date has expired',
|
||||||
@@ -1573,7 +1574,21 @@ export default {
|
|||||||
Relight: 'Relight',
|
Relight: 'Relight',
|
||||||
ChatRobot: 'ChatRobot',
|
ChatRobot: 'ChatRobot',
|
||||||
Yes: 'Yes',
|
Yes: 'Yes',
|
||||||
No: 'No'
|
No: 'No',
|
||||||
|
SubscribePlan:'Subscribe Plan',
|
||||||
|
SwitchPlanSuccess: 'Switch subscription plan successfully',
|
||||||
|
SwitchPlanFailed: 'Failed to switch subscription plan',
|
||||||
|
NoPlanSelected: 'Please select a subscription plan first',
|
||||||
|
PlanNameRequired: 'Please enter plan name',
|
||||||
|
PlanNotFound: 'Plan not found',
|
||||||
|
RenamePlanSuccess: 'Rename successfully',
|
||||||
|
RenamePlanFailed: 'Failed to rename',
|
||||||
|
RenamePlan: 'Rename Subscription Plan',
|
||||||
|
PlanName: 'Plan Name',
|
||||||
|
InputPlanName: 'Please enter plan name',
|
||||||
|
Cancel: 'Cancel',
|
||||||
|
SelectPlan: 'Select Plan',
|
||||||
|
AllPlan:'All'
|
||||||
},
|
},
|
||||||
Login: {
|
Login: {
|
||||||
Login: 'Login',
|
Login: 'Login',
|
||||||
@@ -1590,7 +1605,9 @@ export default {
|
|||||||
Infomation: 'Please fill your information below',
|
Infomation: 'Please fill your information below',
|
||||||
Device: 'If you need to design, please log in using an iPad or computer.',
|
Device: 'If you need to design, please log in using an iPad or computer.',
|
||||||
AgreePolicies: 'Please agree to all terms, privacy policy, and fees.',
|
AgreePolicies: 'Please agree to all terms, privacy policy, and fees.',
|
||||||
PasswordConditions: 'You must satisfy ALL password conditions to register.'
|
PasswordConditions: 'You must satisfy ALL password conditions to register.',
|
||||||
|
LoginWithGoogle: 'Sign in with Google',
|
||||||
|
LoginWithWechat: 'Sign in with Wechat',
|
||||||
},
|
},
|
||||||
LoginPersonal: {
|
LoginPersonal: {
|
||||||
Email: 'Email',
|
Email: 'Email',
|
||||||
|
|||||||
@@ -290,6 +290,13 @@ const routes: Array<RouteRecordRaw> = [
|
|||||||
component: () =>
|
component: () =>
|
||||||
import("@/component/Administrator/organization/organization.vue"),
|
import("@/component/Administrator/organization/organization.vue"),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: "subscriptionPlan",
|
||||||
|
name: "subscriptionPlan",
|
||||||
|
meta: { enter: 3 },
|
||||||
|
component: () =>
|
||||||
|
import("@/component/Administrator/subscriptionPlan.vue"),
|
||||||
|
},
|
||||||
//企业版教育管理员页面
|
//企业版教育管理员页面
|
||||||
{
|
{
|
||||||
path: "allUserSE",
|
path: "allUserSE",
|
||||||
@@ -498,12 +505,17 @@ function isTimeRangePassed(timeRange) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
router.beforeEach((to: any, from, next) => {
|
router.beforeEach((to: any, from, next) => {
|
||||||
|
store.commit("set_view_loading", true);
|
||||||
//系统维护时间
|
//系统维护时间
|
||||||
const time = '2025-11-21T23:00:00 - 2025-11-22T00:00:00';
|
const time = '2025-12-19T21:00:00 - 2025-12-19T22:00:00';
|
||||||
if (isTimeRangePassed(time) == 'in_progress') {
|
if (isTimeRangePassed(time) == 'in_progress') {
|
||||||
// 系统维护
|
// 系统维护
|
||||||
const toName = to.name === 'upgrade';
|
const toName = to.name === 'upgrade';
|
||||||
if(upgradeList.indexOf(to.path) > -1){
|
if(to.query.status == 'admin'){
|
||||||
|
localStorage.setItem('isAdminVisit', 'true')
|
||||||
|
}
|
||||||
|
const isAdminVisit = localStorage.getItem('isAdminVisit') == 'true'
|
||||||
|
if(upgradeList.indexOf(to.path) > -1 || isAdminVisit){
|
||||||
next();
|
next();
|
||||||
}else{
|
}else{
|
||||||
if (toName) {
|
if (toName) {
|
||||||
@@ -513,6 +525,7 @@ router.beforeEach((to: any, from, next) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
localStorage.setItem('isAdminVisit', 'false')
|
||||||
|
|
||||||
// 机房用户
|
// 机房用户
|
||||||
let herfData = window.location.search.substring(1);
|
let herfData = window.location.search.substring(1);
|
||||||
@@ -540,5 +553,7 @@ router.beforeEach((to: any, from, next) => {
|
|||||||
|
|
||||||
// if(systemUser == 0){//游客用户只能进入这两个页面
|
// if(systemUser == 0){//游客用户只能进入这两个页面
|
||||||
});
|
});
|
||||||
|
router.afterEach((to, from) => {
|
||||||
|
store.commit("set_view_loading", false);
|
||||||
|
});
|
||||||
export default router;
|
export default router;
|
||||||
|
|||||||
@@ -13,10 +13,22 @@ export interface RootState{
|
|||||||
|
|
||||||
export default createStore<RootState>({
|
export default createStore<RootState>({
|
||||||
state: {
|
state: {
|
||||||
|
loading: false,
|
||||||
|
dataLoading: true,
|
||||||
|
view_loading: false,
|
||||||
},
|
},
|
||||||
getters: {
|
getters: {
|
||||||
},
|
},
|
||||||
mutations: {
|
mutations: {
|
||||||
|
set_loading(state, v){
|
||||||
|
state.loading = v;
|
||||||
|
},
|
||||||
|
set_view_loading(state, v){
|
||||||
|
state.view_loading = v;
|
||||||
|
},
|
||||||
|
set_dataLoading(state, v){
|
||||||
|
state.dataLoading = v;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
actions: {
|
actions: {
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -80,12 +80,14 @@ const userHabit : Module<UserHabit,RootState> = {
|
|||||||
systemList:[],
|
systemList:[],
|
||||||
expireTime:null,
|
expireTime:null,
|
||||||
language:'',
|
language:'',
|
||||||
|
organizationId: null,
|
||||||
timeData:{
|
timeData:{
|
||||||
isExpiration:false,
|
isExpiration:false,
|
||||||
text:''
|
text:''
|
||||||
},
|
},
|
||||||
subscriptionType:null,
|
subscriptionType:null,
|
||||||
subscriptionId:null,
|
subscriptionId:null,
|
||||||
|
subscriptionPlanId:null,
|
||||||
usernameModify:0,
|
usernameModify:0,
|
||||||
occupation:'',//职业
|
occupation:'',//职业
|
||||||
country:'',//国家
|
country:'',//国家
|
||||||
@@ -195,12 +197,14 @@ const userHabit : Module<UserHabit,RootState> = {
|
|||||||
systemList:[],
|
systemList:[],
|
||||||
expireTime:null,
|
expireTime:null,
|
||||||
language:'',
|
language:'',
|
||||||
|
organizationId: null,
|
||||||
timeData:{
|
timeData:{
|
||||||
isExpiration:false,
|
isExpiration:false,
|
||||||
text:''
|
text:''
|
||||||
},
|
},
|
||||||
subscriptionType:null,
|
subscriptionType:null,
|
||||||
subscriptionId:null,
|
subscriptionId:null,
|
||||||
|
subscriptionPlanId:null,
|
||||||
//是否是affiliate用户
|
//是否是affiliate用户
|
||||||
affiliate:false,
|
affiliate:false,
|
||||||
usernameModify:0,
|
usernameModify:0,
|
||||||
@@ -230,6 +234,7 @@ const userHabit : Module<UserHabit,RootState> = {
|
|||||||
state.userDetail.avatar = data.avatar//头像
|
state.userDetail.avatar = data.avatar//头像
|
||||||
state.userDetail.country = data.country//头像
|
state.userDetail.country = data.country//头像
|
||||||
state.userDetail.occupation = data.occupation//头像
|
state.userDetail.occupation = data.occupation//头像
|
||||||
|
state.userDetail.organizationId = data.organizationId //所属组织
|
||||||
state.userDetail.usernameModify = data.usernameModify//当月剩余修改次数
|
state.userDetail.usernameModify = data.usernameModify//当月剩余修改次数
|
||||||
state.userDetail.isBeginner = data.isBeginner == 1 ? true : false;//是否完成新手指引
|
state.userDetail.isBeginner = data.isBeginner == 1 ? true : false;//是否完成新手指引
|
||||||
state.userDetail.title = data.title//当月剩余修改次数
|
state.userDetail.title = data.title//当月剩余修改次数
|
||||||
@@ -315,6 +320,7 @@ const userHabit : Module<UserHabit,RootState> = {
|
|||||||
state.userDetail.status = data.status//当前订阅类型
|
state.userDetail.status = data.status//当前订阅类型
|
||||||
// state.userDetail.status = data.status || 'active'//当前订阅类型
|
// state.userDetail.status = data.status || 'active'//当前订阅类型
|
||||||
state.userDetail.subscriptionId = data.subscriptionId//最新订阅id
|
state.userDetail.subscriptionId = data.subscriptionId//最新订阅id
|
||||||
|
state.userDetail.subscriptionPlanId = data.subscriptionPlanId//最新订阅计划id
|
||||||
},
|
},
|
||||||
setUpgradePlan(state,data){
|
setUpgradePlan(state,data){
|
||||||
state.upgradePlan.value = data
|
state.upgradePlan.value = data
|
||||||
|
|||||||
@@ -177,6 +177,12 @@ const all = (t)=>{
|
|||||||
route:'/administrator/organization',
|
route:'/administrator/organization',
|
||||||
key:'sub13',
|
key:'sub13',
|
||||||
isShow:true,
|
isShow:true,
|
||||||
|
},{
|
||||||
|
name:'Subscription Plan',
|
||||||
|
icon:'usetime',
|
||||||
|
route:'/administrator/subscriptionPlan',
|
||||||
|
key:'sub14',
|
||||||
|
isShow:true,
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
const schoolOrEnterprise = (t) =>{
|
const schoolOrEnterprise = (t) =>{
|
||||||
|
|||||||
@@ -160,11 +160,9 @@ export const Https = {
|
|||||||
|
|
||||||
endpoint: `api/third/party/your-secured-endpoint`, //获取唯一标识是否存在
|
endpoint: `api/third/party/your-secured-endpoint`, //获取唯一标识是否存在
|
||||||
|
|
||||||
|
|
||||||
designWorksRegister: '/api/account/designWorksRegister', //注册
|
designWorksRegister: '/api/account/designWorksRegister', //注册
|
||||||
designWorksRegisterCode: '/api/account/designWorksRegisterCode', //注册
|
designWorksRegisterCode: '/api/account/designWorksRegisterCode', //注册
|
||||||
|
|
||||||
|
|
||||||
preLogin: '/api/account/preLogin', //预先登入
|
preLogin: '/api/account/preLogin', //预先登入
|
||||||
schoolLogin: '/api/account/schoolLogin', //学校管理员登录
|
schoolLogin: '/api/account/schoolLogin', //学校管理员登录
|
||||||
enterpriseLogin: '/api/account/enterpriseLogin', //企业管理员登录
|
enterpriseLogin: '/api/account/enterpriseLogin', //企业管理员登录
|
||||||
@@ -260,8 +258,6 @@ export const Https = {
|
|||||||
poselikeOrDisike: `/api/generate/likeOrDislike`, //postTransform like
|
poselikeOrDisike: `/api/generate/likeOrDislike`, //postTransform like
|
||||||
getAllPose: `/api/generate/getAllPose`, //获取动作
|
getAllPose: `/api/generate/getAllPose`, //获取动作
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//拼贴
|
//拼贴
|
||||||
genSketchRecon: `/api/generate/genSketchRecon`,
|
genSketchRecon: `/api/generate/genSketchRecon`,
|
||||||
saveReconCanvas: `/api/generate/saveReconCanvas`,
|
saveReconCanvas: `/api/generate/saveReconCanvas`,
|
||||||
@@ -325,7 +321,13 @@ export const Https = {
|
|||||||
deletePromCode: `/api/stripe/deletePromCode`, //删除优惠券
|
deletePromCode: `/api/stripe/deletePromCode`, //删除优惠券
|
||||||
addOrganization: `/api/inquiry/addOrganization`, //添加企业版或者教育版
|
addOrganization: `/api/inquiry/addOrganization`, //添加企业版或者教育版
|
||||||
queryOrganization: `/api/inquiry/queryOrganization`, //查询企业版或者教育版
|
queryOrganization: `/api/inquiry/queryOrganization`, //查询企业版或者教育版
|
||||||
|
createSubscribePlan: '/api/subscription_plan/createPlan', // 创建订阅计划
|
||||||
|
deleteSubscribePlan: '/api/subscription_plan/deletePlan', // 删除订阅计划
|
||||||
|
updateSubscribePlan: '/api/subscription_plan/updatePlan', // 修改订阅计划
|
||||||
|
searchAllSubscribePlan: '/api/subscription_plan/searchByPage', // 分页查询所有订阅计划
|
||||||
|
searchSubscribeByOrg: '/api/subscription_plan/searchByOrganizationIdAndStatus', // 不分页查询
|
||||||
|
switchSubscribePlan: '/api/subscription_plan/switchSubscriptionPlan', // 切换管理员订阅计划
|
||||||
|
switchSubAccountSubscribePlan: '/api/subscription_plan/switchSubAccSubscriptionPlan', // 切换子账号订阅计划
|
||||||
|
|
||||||
//云生成
|
//云生成
|
||||||
designCloud: `/api/design/designCloud`, //创建云生成
|
designCloud: `/api/design/designCloud`, //创建云生成
|
||||||
@@ -379,7 +381,6 @@ export const Https = {
|
|||||||
getTasksHistory: `/api/tasks/getAllTask`, //获取所有任务列表
|
getTasksHistory: `/api/tasks/getAllTask`, //获取所有任务列表
|
||||||
prepareForSR: `/api/python/prepareForSR`, //超分
|
prepareForSR: `/api/python/prepareForSR`, //超分
|
||||||
|
|
||||||
|
|
||||||
//作品广场
|
//作品广场
|
||||||
publish: `/api/portfolio/publish`, //发布作品到作品广场
|
publish: `/api/portfolio/publish`, //发布作品到作品广场
|
||||||
getPorfolio: `/api/portfolio/page`, //查询作品广场
|
getPorfolio: `/api/portfolio/page`, //查询作品广场
|
||||||
@@ -439,8 +440,7 @@ export const Https = {
|
|||||||
getHistoryNotification: `/api/message/getHistoryNotification`, //获取历史消息
|
getHistoryNotification: `/api/message/getHistoryNotification`, //获取历史消息
|
||||||
oneClickRead: `/api/message/oneClickRead`, //全部设为已读
|
oneClickRead: `/api/message/oneClickRead`, //全部设为已读
|
||||||
personalHomepage: `/api/account/personalHomepage`, //获取个人主页信息
|
personalHomepage: `/api/account/personalHomepage`, //获取个人主页信息
|
||||||
refreshMinioUrl:`/api/third/party/refreshMinioUrl`,//获取可以使用的minio地址
|
refreshMinioUrl: `/api/third/party/refreshMinioUrl` //获取可以使用的minio地址
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
axiosGet(url, config) {
|
axiosGet(url, config) {
|
||||||
@@ -449,12 +449,15 @@ export const Https = {
|
|||||||
resolve('')
|
resolve('')
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
axios.get(url,config).then(response => {
|
axios
|
||||||
|
.get(url, config)
|
||||||
|
.then(response => {
|
||||||
resolve(response)
|
resolve(response)
|
||||||
}).catch((error) => {
|
})
|
||||||
|
.catch(error => {
|
||||||
reject(error)
|
reject(error)
|
||||||
})
|
})
|
||||||
});
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
axiosPut(url, data) {
|
axiosPut(url, data) {
|
||||||
@@ -463,12 +466,15 @@ export const Https = {
|
|||||||
resolve('')
|
resolve('')
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
axios.put(url, data).then(response => {
|
axios
|
||||||
|
.put(url, data)
|
||||||
|
.then(response => {
|
||||||
resolve(response)
|
resolve(response)
|
||||||
}).catch((error) => {
|
})
|
||||||
|
.catch(error => {
|
||||||
reject(error)
|
reject(error)
|
||||||
})
|
})
|
||||||
});
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
axiosPost(url, data, config) {
|
axiosPost(url, data, config) {
|
||||||
@@ -477,12 +483,15 @@ export const Https = {
|
|||||||
resolve('')
|
resolve('')
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
axios.post(url, data,config).then(response => {
|
axios
|
||||||
|
.post(url, data, config)
|
||||||
|
.then(response => {
|
||||||
resolve(response)
|
resolve(response)
|
||||||
}).catch((error) => {
|
})
|
||||||
|
.catch(error => {
|
||||||
reject(error)
|
reject(error)
|
||||||
})
|
})
|
||||||
});
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
axiosDelete(url, newData) {
|
axiosDelete(url, newData) {
|
||||||
@@ -491,16 +500,14 @@ export const Https = {
|
|||||||
resolve('')
|
resolve('')
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
axios.delete(url,{data:newData}).then(response => {
|
axios
|
||||||
|
.delete(url, { data: newData })
|
||||||
|
.then(response => {
|
||||||
resolve(response)
|
resolve(response)
|
||||||
}).catch((error) => {
|
})
|
||||||
|
.catch(error => {
|
||||||
reject(error)
|
reject(error)
|
||||||
})
|
})
|
||||||
});
|
})
|
||||||
},
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,14 +17,14 @@
|
|||||||
mode="inline"
|
mode="inline"
|
||||||
@click="handleClick"
|
@click="handleClick"
|
||||||
>
|
>
|
||||||
<div v-for="(menu) in rootSubmenuKeys" :key="menu.key" >
|
<div v-for="(menu) in rootSubmenuKeys" :key="`menu-${menu.key}`" >
|
||||||
<a-menu-item :key="menu.key" :name="menu.name" :route="menu.route" v-if="!menu.children">
|
<a-menu-item :key="`item-${menu.key}`" :name="menu.name" :route="menu.route" v-if="!menu.children">
|
||||||
<template #icon>
|
<template #icon>
|
||||||
<span :class="['icon','iconfont', 'menu_icon', menu.icon]"></span>
|
<span :class="['icon','iconfont', 'menu_icon', menu.icon]"></span>
|
||||||
</template>
|
</template>
|
||||||
<span class="menu_title" :title="menu.name">{{menu.name}}</span>
|
<span class="menu_title" :title="menu.name">{{menu.name}}</span>
|
||||||
</a-menu-item>
|
</a-menu-item>
|
||||||
<a-sub-menu :key="menu.key" v-else>
|
<a-sub-menu :key="`sub-${menu.key}`" v-else>
|
||||||
<template #icon>
|
<template #icon>
|
||||||
<span :class="['icon','iconfont', 'menu_icon', menu.icon]"></span>
|
<span :class="['icon','iconfont', 'menu_icon', menu.icon]"></span>
|
||||||
</template>
|
</template>
|
||||||
@@ -67,7 +67,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { LoadingOutlined } from "@ant-design/icons-vue";
|
import { LoadingOutlined } from "@ant-design/icons-vue";
|
||||||
import { message, Upload } from "ant-design-vue";
|
import { message, Upload } from "ant-design-vue";
|
||||||
import { defineComponent, onMounted, h, ref, nextTick, computed,reactive, toRefs, onBeforeMount } from "vue";
|
import { defineComponent, onMounted, h, ref, nextTick, computed,reactive, toRefs, onBeforeMount, watch } from "vue";
|
||||||
import { MailOutlined, AppstoreOutlined, SettingOutlined } from '@ant-design/icons-vue';
|
import { MailOutlined, AppstoreOutlined, SettingOutlined } from '@ant-design/icons-vue';
|
||||||
import { Https } from "@/tool/https";
|
import { Https } from "@/tool/https";
|
||||||
import { useStore } from "vuex";
|
import { useStore } from "vuex";
|
||||||
@@ -102,11 +102,38 @@ export default defineComponent({
|
|||||||
// 5,7
|
// 5,7
|
||||||
rootSubmenuKeys: [],
|
rootSubmenuKeys: [],
|
||||||
openKeys: [],
|
openKeys: [],
|
||||||
selectedKeys: ['sub1'],
|
selectedKeys: [],
|
||||||
nowPageName:'All User',//当前页面名称
|
nowPageName:'All User',//当前页面名称
|
||||||
});
|
});
|
||||||
let routers:any = ref([])
|
let routers:any = ref([])
|
||||||
|
|
||||||
|
const syncMenuStatus = (path:string)=>{
|
||||||
|
if(!state.rootSubmenuKeys.length)return
|
||||||
|
let matched = false
|
||||||
|
state.rootSubmenuKeys.some((item:any)=>{
|
||||||
|
if(item.children){
|
||||||
|
const target = item.children.find((child:any)=>child.route === path)
|
||||||
|
if(target){
|
||||||
|
state.selectedKeys = [target.key]
|
||||||
|
state.openKeys = [`sub-${item.key}`]
|
||||||
|
state.nowPageName = target.name
|
||||||
|
matched = true
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}else if(item.route === path){
|
||||||
|
state.selectedKeys = [`item-${item.key}`]
|
||||||
|
state.openKeys = []
|
||||||
|
state.nowPageName = item.name
|
||||||
|
matched = true
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
})
|
||||||
|
if(!matched){
|
||||||
|
state.selectedKeys = []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
const onOpenChange = (openKeys: string[]) => {
|
const onOpenChange = (openKeys: string[]) => {
|
||||||
const latestOpenKey:any = openKeys.find(key => state.openKeys.indexOf(key) === -1);
|
const latestOpenKey:any = openKeys.find(key => state.openKeys.indexOf(key) === -1);
|
||||||
@@ -150,24 +177,12 @@ export default defineComponent({
|
|||||||
state.rootSubmenuKeys = adminRouter.all(t);
|
state.rootSubmenuKeys = adminRouter.all(t);
|
||||||
}
|
}
|
||||||
const route = router.currentRoute.value
|
const route = router.currentRoute.value
|
||||||
if(state.rootSubmenuKeys.some((item:any) => item.route === route.path) || route.path == "/administrator"){
|
const isMenuRoute = state.rootSubmenuKeys.some((item:any) => item.route === route.path || item.children?.some((child:any)=>child.route === route.path))
|
||||||
|
// 如果是管理员首页或未匹配菜单,才重定向到首个菜单;否则保持当前路由,避免刷新回到 allUser
|
||||||
|
if (route.path === "/administrator" || !isMenuRoute) {
|
||||||
router.push(state.rootSubmenuKeys[0].route)
|
router.push(state.rootSubmenuKeys[0].route)
|
||||||
}else{
|
|
||||||
router.push('/administrator')
|
|
||||||
}
|
}
|
||||||
// state.rootSubmenuKeys.forEach((item:any) => {
|
syncMenuStatus(router.currentRoute.value.path)
|
||||||
// if(item.children){
|
|
||||||
// item.children.forEach((item:any) => {
|
|
||||||
// if(item.route == router.currentRoute.value.path){
|
|
||||||
// state.selectedKeys[0] = item.key
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
// }else{
|
|
||||||
// if(item.route == router.currentRoute.value.path){
|
|
||||||
// state.selectedKeys[0] = item.key
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
//储存所有用户id和name
|
//储存所有用户id和name
|
||||||
Https.axiosGet(Https.httpUrls.getAllUserId,).then((rv: any) => {
|
Https.axiosGet(Https.httpUrls.getAllUserId,).then((rv: any) => {
|
||||||
if (rv) {
|
if (rv) {
|
||||||
@@ -192,8 +207,11 @@ export default defineComponent({
|
|||||||
// router.push(state.rootSubmenuKeys[0].route)
|
// router.push(state.rootSubmenuKeys[0].route)
|
||||||
|
|
||||||
})
|
})
|
||||||
|
watch(()=>router.currentRoute.value.path,(path)=>{
|
||||||
|
syncMenuStatus(path)
|
||||||
|
},{immediate:true})
|
||||||
onBeforeMount(()=>{
|
onBeforeMount(()=>{
|
||||||
state.selectedKeys = ['sub1']
|
state.selectedKeys = []
|
||||||
})
|
})
|
||||||
return {
|
return {
|
||||||
...toRefs(state),
|
...toRefs(state),
|
||||||
|
|||||||
@@ -393,6 +393,27 @@
|
|||||||
<span class="fi fi-rr-book-user"></span>
|
<span class="fi fi-rr-book-user"></span>
|
||||||
<span class="select_item_des">{{ $t('Header.Tutorial') }}</span>
|
<span class="select_item_des">{{ $t('Header.Tutorial') }}</span>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="select_item logo">
|
||||||
|
<a href="https://www.tiktok.com/@aida_codecreate" target="_blank" >
|
||||||
|
<img src="@/assets/images/socialMediaLogo/tikTokIcon.svg" alt="">
|
||||||
|
</a>
|
||||||
|
<a href="https://www.facebook.com/CodeCreateAI" target="_blank" >
|
||||||
|
<img src="@/assets/images/socialMediaLogo/faceBookIcon.svg" alt="">
|
||||||
|
</a>
|
||||||
|
<a href="https://www.youtube.com/@AiDA-3.1" target="_blank" >
|
||||||
|
<img src="@/assets/images/socialMediaLogo/socialIcons.svg" alt="">
|
||||||
|
</a>
|
||||||
|
<a href="https://www.linkedin.com/company/code-create-limited" target="_blank" >
|
||||||
|
<img src="@/assets/images/socialMediaLogo/linkedinIcon.svg" alt="">
|
||||||
|
</a>
|
||||||
|
<a href="https://xhslink.com/m/5Ony2FapizV" target="_blank" >
|
||||||
|
<img src="@/assets/images/socialMediaLogo/xiaoHongShuIcon.svg" alt="">
|
||||||
|
</a>
|
||||||
|
<a href="https://space.bilibili.com/3546717609789876?spm_id_from=333.788.upinfo.head.click" target="_blank" >
|
||||||
|
<img src="@/assets/images/socialMediaLogo/biliBliIcon.svg" alt="">
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="select_item_long"></div>
|
<div class="select_item_long"></div>
|
||||||
<div class="select_item" @click="logout()">
|
<div class="select_item" @click="logout()">
|
||||||
<span class="icon iconfont icon-tuichu"></span>
|
<span class="icon iconfont icon-tuichu"></span>
|
||||||
@@ -406,11 +427,12 @@
|
|||||||
<div class="userSystem" v-show="pastDuePage">
|
<div class="userSystem" v-show="pastDuePage">
|
||||||
{{ $t('Header.pastDue') }}
|
{{ $t('Header.pastDue') }}
|
||||||
</div>
|
</div>
|
||||||
<div class="router" v-if="!getLangIsShowMark">
|
<div class="router" v-if="!dataLoading">
|
||||||
<home
|
<home
|
||||||
ref="home"
|
ref="home"
|
||||||
@setNewProject="() => (leftShow = true)"
|
@setNewProject="() => (leftShow = true)"
|
||||||
@setTask="setTask"
|
@setTask="setTask"
|
||||||
|
:key="userDetail.language"
|
||||||
></home>
|
></home>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -421,10 +443,10 @@
|
|||||||
<UpgradePlan ref="UpgradePlan"></UpgradePlan>
|
<UpgradePlan ref="UpgradePlan"></UpgradePlan>
|
||||||
<TaskPage ref="TaskPage"></TaskPage>
|
<TaskPage ref="TaskPage"></TaskPage>
|
||||||
|
|
||||||
<div class="mark_loading" v-show="getLangIsShowMark">
|
<div class="mark_loading" v-show="dataLoading">
|
||||||
<a-spin size="large" />
|
<a-spin size="large" />
|
||||||
</div>
|
</div>
|
||||||
<!-- <RobotAssist v-if="!getLangIsShowMark"></RobotAssist> -->
|
<!-- <RobotAssist v-if="!loading"></RobotAssist> -->
|
||||||
<scaleVideo ref="scaleVideo"></scaleVideo>
|
<scaleVideo ref="scaleVideo"></scaleVideo>
|
||||||
<!-- 进行续订 -->
|
<!-- 进行续订 -->
|
||||||
<renew ref="renew"></renew>
|
<renew ref="renew"></renew>
|
||||||
@@ -639,7 +661,7 @@ export default defineComponent({
|
|||||||
})
|
})
|
||||||
|
|
||||||
let activeCredits = ref(false)
|
let activeCredits = ref(false)
|
||||||
let getLangIsShowMark = ref(true)
|
let dataLoading = computed(() => (store.state.dataLoading))
|
||||||
let messageNum = computed(() => {
|
let messageNum = computed(() => {
|
||||||
return store.state.UserHabit.messageSystem.messageNum
|
return store.state.UserHabit.messageSystem.messageNum
|
||||||
})
|
})
|
||||||
@@ -1053,7 +1075,7 @@ export default defineComponent({
|
|||||||
isMurmur,
|
isMurmur,
|
||||||
credits,
|
credits,
|
||||||
activeCredits,
|
activeCredits,
|
||||||
getLangIsShowMark,
|
dataLoading,
|
||||||
messageNum,
|
messageNum,
|
||||||
messageType,
|
messageType,
|
||||||
...toRefs(stateList),
|
...toRefs(stateList),
|
||||||
@@ -1111,11 +1133,11 @@ export default defineComponent({
|
|||||||
this.store
|
this.store
|
||||||
.dispatch('getLangType')
|
.dispatch('getLangType')
|
||||||
.then(() => {
|
.then(() => {
|
||||||
this.getLangIsShowMark = false
|
this.store.commit('set_dataLoading', false)
|
||||||
resolve()
|
resolve()
|
||||||
})
|
})
|
||||||
.catch(() => {
|
.catch(() => {
|
||||||
this.getLangIsShowMark = false
|
this.store.commit('set_dataLoading', false)
|
||||||
reject()
|
reject()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@@ -1317,7 +1339,7 @@ export default defineComponent({
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
setLang(v) {
|
setLang(v) {
|
||||||
this.getLangIsShowMark = true
|
this.store.commit('set_dataLoading', true)
|
||||||
Https.axiosGet(Https.httpUrls.changeUserLanguage, { params: { language: v } })
|
Https.axiosGet(Https.httpUrls.changeUserLanguage, { params: { language: v } })
|
||||||
.then(rv => {
|
.then(rv => {
|
||||||
if (rv) {
|
if (rv) {
|
||||||
@@ -1334,11 +1356,11 @@ export default defineComponent({
|
|||||||
window.location.reload()
|
window.location.reload()
|
||||||
// window.location.href = '/home';
|
// window.location.href = '/home';
|
||||||
}
|
}
|
||||||
this.getLangIsShowMark = false
|
this.store.commit('set_dataLoading', false)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(() => {
|
.catch(() => {
|
||||||
this.getLangIsShowMark = false
|
this.store.commit('set_dataLoading', false)
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -2017,6 +2039,24 @@ export default defineComponent({
|
|||||||
font-size: 1.6rem;
|
font-size: 1.6rem;
|
||||||
margin-left: 1rem;
|
margin-left: 1rem;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.logo{
|
||||||
|
padding: 1rem 0.5rem;
|
||||||
|
gap: 1.8rem;
|
||||||
|
cursor: auto;
|
||||||
|
justify-content: center;
|
||||||
|
> a{
|
||||||
|
width: auto;
|
||||||
|
height: 2.4rem;
|
||||||
|
overflow: hidden;
|
||||||
|
display: flex;
|
||||||
|
> img{
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&:hover {
|
||||||
|
background: #fff;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.select_item_long {
|
.select_item_long {
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
:placeholder="t('batchGeneration.Search')"
|
:placeholder="t('batchGeneration.Search')"
|
||||||
@search="searchHistoryList"
|
@search="searchHistoryList"
|
||||||
/>
|
/>
|
||||||
<div class="history_table_content" ref="historyTable">
|
<div class="history_table_content" ref="historyTable" @click.stop>
|
||||||
<a-config-provider :locale="tableLocale">
|
<a-config-provider :locale="tableLocale">
|
||||||
<a-table
|
<a-table
|
||||||
row-class-name="history_table_row"
|
row-class-name="history_table_row"
|
||||||
@@ -28,6 +28,14 @@
|
|||||||
}"
|
}"
|
||||||
>
|
>
|
||||||
<template #bodyCell="{ column, text, record, index }">
|
<template #bodyCell="{ column, text, record, index }">
|
||||||
|
<div class="update_name" v-if="column?.key === 'collectionName'">
|
||||||
|
<div v-if="updateName.selectIndex === index">
|
||||||
|
<input type="text" v-model="updateName.currentName">
|
||||||
|
</div>
|
||||||
|
<div v-show="updateName.selectIndex !== index">{{ record.name }}</div>
|
||||||
|
<i @click="setUpdateName(record.name,index)" v-show="updateName.selectIndex !== index" class="fi fi-rr-edit"></i>
|
||||||
|
<i @click="submitUpdateName" v-show="updateName.selectIndex === index" class="fi fi-sr-check-circle"></i>
|
||||||
|
</div>
|
||||||
<div class="operate_list" v-if="column?.Operations">
|
<div class="operate_list" v-if="column?.Operations">
|
||||||
<div
|
<div
|
||||||
class="operate_item"
|
class="operate_item"
|
||||||
@@ -167,7 +175,7 @@ export default defineComponent({
|
|||||||
if (record.text == 1) {
|
if (record.text == 1) {
|
||||||
str = useI18n().t('newScaleImage.Original')
|
str = useI18n().t('newScaleImage.Original')
|
||||||
} else {
|
} else {
|
||||||
str = `@${record.record.userLikeGroupVO.originalAccountName}/${record.record.userLikeGroupVO.originalPortfolioName}`
|
str = `@${record.record.originalAccountName}/${record.record.originalPortfolioName}`
|
||||||
}
|
}
|
||||||
// let time = formatTime(record.text / 1000, 'YYYY-MM-DD hh:mm:ss')
|
// let time = formatTime(record.text / 1000, 'YYYY-MM-DD hh:mm:ss')
|
||||||
return str
|
return str
|
||||||
@@ -213,6 +221,39 @@ export default defineComponent({
|
|||||||
selectCode: selectCode,
|
selectCode: selectCode,
|
||||||
designType: ''
|
designType: ''
|
||||||
}
|
}
|
||||||
|
const updateName = ref({
|
||||||
|
currentName:'',
|
||||||
|
selectIndex:-1,
|
||||||
|
})
|
||||||
|
const clearUpdateName = () => {
|
||||||
|
updateName.value.currentName = ''
|
||||||
|
updateName.value.selectIndex = -1
|
||||||
|
document.removeEventListener('click',clearUpdateName)
|
||||||
|
}
|
||||||
|
const setUpdateName = (name,index) => {
|
||||||
|
updateName.value.currentName = name
|
||||||
|
updateName.value.selectIndex = index
|
||||||
|
document.addEventListener('click',clearUpdateName)
|
||||||
|
}
|
||||||
|
const submitUpdateName = ()=>{
|
||||||
|
if(updateName.value.currentName === collectionList.value[updateName.value.selectIndex].name){
|
||||||
|
clearUpdateName()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if(updateName.value.selectIndex != -1){
|
||||||
|
if(!updateName.value.currentName)return message.info(t('HistoryPage.jsContent8'))
|
||||||
|
let data = {
|
||||||
|
id: collectionList.value[updateName.value.selectIndex].id, //library名字
|
||||||
|
name: updateName.value.currentName //history id
|
||||||
|
}
|
||||||
|
Https.axiosPost(Https.httpUrls.projectSaveOrUpdate, data)
|
||||||
|
.then(rv => {
|
||||||
|
collectionList.value[updateName.value.selectIndex].name = updateName.value.currentName
|
||||||
|
clearUpdateName()
|
||||||
|
})
|
||||||
|
.catch(res => {})
|
||||||
|
}
|
||||||
|
}
|
||||||
provide('type', type)
|
provide('type', type)
|
||||||
return {
|
return {
|
||||||
store,
|
store,
|
||||||
@@ -232,7 +273,10 @@ export default defineComponent({
|
|||||||
tableLocale,
|
tableLocale,
|
||||||
projectSetting,
|
projectSetting,
|
||||||
tableSearchBar,
|
tableSearchBar,
|
||||||
currentProjectPath
|
currentProjectPath,
|
||||||
|
updateName,
|
||||||
|
setUpdateName,
|
||||||
|
submitUpdateName,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
@@ -608,6 +652,7 @@ export default defineComponent({
|
|||||||
customTableRow(record: any) {
|
customTableRow(record: any) {
|
||||||
return {
|
return {
|
||||||
onDblclick: () => {
|
onDblclick: () => {
|
||||||
|
if(this.updateName.selectIndex !== -1)return
|
||||||
this.retrieveHome(record)
|
this.retrieveHome(record)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -726,6 +771,11 @@ export default defineComponent({
|
|||||||
}
|
}
|
||||||
:deep(.ant-table-tbody > tr:hover) {
|
:deep(.ant-table-tbody > tr:hover) {
|
||||||
background: #ededed;
|
background: #ededed;
|
||||||
|
.update_name{
|
||||||
|
> .fi-rr-edit{
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
:deep(.ant-table-tbody > tr > td) {
|
:deep(.ant-table-tbody > tr > td) {
|
||||||
border: none;
|
border: none;
|
||||||
@@ -780,7 +830,26 @@ export default defineComponent({
|
|||||||
color: #000;
|
color: #000;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.update_name{
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
> div{
|
||||||
|
> input{
|
||||||
|
width: 12rem;
|
||||||
|
border-radius: .8rem;
|
||||||
|
padding-left: 1.5rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
> i{
|
||||||
|
margin-left: 1.5rem;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 2rem;
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
> .fi-rr-edit{
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
.operate_list {
|
.operate_list {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|||||||
@@ -43,15 +43,12 @@
|
|||||||
<span>{{ t('Login.LogonToAiDA') }}</span>
|
<span>{{ t('Login.LogonToAiDA') }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="info" v-show="!loginType">{{ t('Login.Infomation') }}</div>
|
<div class="info" v-show="!loginType">{{ t('Login.Infomation') }}</div>
|
||||||
<personal ref="personal" v-if="loginType == 'personal'" v-model:isMask="isMask"></personal>
|
<personal ref="personal" v-if="loginType == 'personal'"></personal>
|
||||||
<school ref="school" v-if="loginType == 'school'"></school>
|
<school ref="school" v-if="loginType == 'school'"></school>
|
||||||
<enterprise ref="enterprise" v-if="loginType == 'enterprise'"></enterprise>
|
<enterprise ref="enterprise" v-if="loginType == 'enterprise'"></enterprise>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="mark_loading" v-show="isMask">
|
|
||||||
<a-spin size="large" />
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@@ -103,7 +100,6 @@ export default defineComponent({
|
|||||||
|
|
||||||
const loginData = reactive({
|
const loginData = reactive({
|
||||||
loginType: "",
|
loginType: "",
|
||||||
isMask: false,
|
|
||||||
});
|
});
|
||||||
const dataDom = reactive({
|
const dataDom = reactive({
|
||||||
personal: null as any,
|
personal: null as any,
|
||||||
|
|||||||
@@ -8,15 +8,15 @@
|
|||||||
<!-- <div class="upgrade-content-text">System upgrading</div> -->
|
<!-- <div class="upgrade-content-text">System upgrading</div> -->
|
||||||
<div class="upgrade-content-text">System maintenance</div>
|
<div class="upgrade-content-text">System maintenance</div>
|
||||||
<!-- 没有截至时间 -->
|
<!-- 没有截至时间 -->
|
||||||
<div class="upgrade-content-textab">The AiDA system cannot be accessed temporarily due to system server maintenance. We apologize for any inconvenience this may cause and thank you for your understanding.</div>
|
<!-- <div class="upgrade-content-textab">The AiDA system cannot be accessed temporarily due to system server maintenance. We apologize for any inconvenience this may cause and thank you for your understanding.</div> -->
|
||||||
<!-- <div class="upgrade-content-textab">Due to the system server upgrade, we will start the upgrade from 9:30 am Hong Kong time on the weekend of October 20th until October 21st. During this time,<br> the AiDA system will be temporarily inaccessible. We apologize for any inconvenience this may cause and thank you for your understanding.</div> -->
|
<!-- <div class="upgrade-content-textab">Due to the system server upgrade, we will start the upgrade from 9:30 am Hong Kong time on the weekend of October 20th until October 21st. During this time,<br> the AiDA system will be temporarily inaccessible. We apologize for any inconvenience this may cause and thank you for your understanding.</div> -->
|
||||||
<!-- 有截至时间 -->
|
<!-- 有截至时间 -->
|
||||||
<!-- <div class="upgrade-content-textab">Due to system server upgrades, we will be upgrading from Tuesday, September 2 at 00:00 (HKT) to Wednesday, September 3 at 00:00. During this period, the AiDA system will be temporarily inaccessible. <br>We sincerely apologize for the inconvenience caused and thank you for your understanding</div> -->
|
<div class="upgrade-content-textab">Due to system server upgrades, maintenance will be carried out from 21:00 to 22:00 on December 19.<br>The AiDA system will be temporarily unavailable during this period. We sincerely apologize for any inconvenience caused and thank you for your understanding.</div>
|
||||||
<br>
|
<br>
|
||||||
<br>
|
<br>
|
||||||
<br>
|
<br>
|
||||||
<div class="upgrade-content-textab">由于系统服务器维护,AiDA系统暂时无法访问。对于由此造成的任何不便,我们深表歉意,并感谢您的理解</div>
|
<!-- <div class="upgrade-content-textab">由于系统服务器维护,AiDA系统暂时无法访问。对于由此造成的任何不便,我们深表歉意,并感谢您的理解</div> -->
|
||||||
<!-- <div class="upgrade-content-textab">由于系统服务器升级,我们将于9月2日(星期二)凌晨00:00(香港时间)至9月3日(星期三)凌晨00:00进行升级。<br>在此期间,AiDA系统将暂时无法访问。给您带来的不便,我们深表歉意,并感谢您的理解</div> -->
|
<div class="upgrade-content-textab">由于系统服务器升级,我们将于12月19日21:00 至12月19日22:00进行升级。<br>在此期间,AiDA系统将暂时无法访问。给您带来的不便,我们深表歉意,并感谢您的理解</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -147,11 +147,11 @@ export default defineComponent({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
//储存所有用户id和name
|
//储存所有用户id和name
|
||||||
Https.axiosGet(Https.httpUrls.getAllUserId,).then((rv: any) => {
|
// Https.axiosGet(Https.httpUrls.getAllUserId,).then((rv: any) => {
|
||||||
if (rv) {
|
// if (rv) {
|
||||||
store.commit('setAllUserList',rv);
|
// store.commit('setAllUserList',rv);
|
||||||
}
|
// }
|
||||||
})
|
// })
|
||||||
let allCountry = country
|
let allCountry = country
|
||||||
sessionStorage.setItem('allCountry',JSON.stringify(allCountry));
|
sessionStorage.setItem('allCountry',JSON.stringify(allCountry));
|
||||||
// state.nowPageName = state.rootSubmenuKeys[0].name
|
// state.nowPageName = state.rootSubmenuKeys[0].name
|
||||||
|
|||||||