修复detail添加两件相同的sketch会有问题,优化教育版管理员页面

This commit is contained in:
X1627315083
2025-09-10 16:33:40 +08:00
parent 1d524eeef9
commit 7e6a3b1144
14 changed files with 62 additions and 53 deletions

View File

@@ -111,10 +111,12 @@ import { Modal, message } from "ant-design-vue";
import { ExclamationCircleOutlined } from "@ant-design/icons-vue";
import { formatTime, isEmail } from "@/tool/util";
import md5 from "md5";
import { useI18n } from 'vue-i18n'
export default defineComponent({
components: {},
emits: ["searchHistoryList"],
setup(props, { emit }) {
const {t} = useI18n()
let operations = reactive({
operationsModal: false,
operationsEdit: false,
@@ -183,7 +185,7 @@ export default defineComponent({
return {
creditsUsageLimit: operationsData.credits,
userEmail: operationsData.userEmail,
userPassword: md5(operationsData.password + "abc"),
userPassword: operationsData.password?md5(operationsData.password + "abc"):'',
userName: operationsData.userName,
};
};

View File

@@ -30,7 +30,7 @@
<div class="admin_state_item">
<span>User Name: <span>*</span></span>
<input
:readonly="title != 'Add'"
:disabled="title != 'Add'"
:class="{active:title != 'Add'}"
v-model="userName"
placeholder="Please enter user name"
@@ -41,7 +41,7 @@
<div class="admin_state_item">
<span>User Email: <span>*</span></span>
<input
:readonly="title != 'Add'"
:disabled="title != 'Add'"
:class="{active:title != 'Add'}"
v-model="userEmail"
placeholder="Please enter email"
@@ -94,7 +94,7 @@
<div class="admin_state_item">
<span>Country:</span>
<input
:readonly="title != 'Add'"
:disabled="title != 'Add'"
:class="{active:title != 'Add'}"
v-model="country"
placeholder="Please enter country"
@@ -105,7 +105,7 @@
<div class="admin_state_item">
<span>Organization Name:</span>
<input
:readonly="title != 'Add'"
:disabled="title != 'Add'"
:class="{active:title != 'Add'}"
v-model="organizationName"
placeholder="Please enter Organization Name"
@@ -116,7 +116,7 @@
<div class="admin_state_item">
<span>Sub Account Num:</span>
<input
:readonly="title != 'Add'"
:disabled="title != 'Add'"
:class="{active:title != 'Add'}"
v-model="subAccountNum"
placeholder="Please enter Sub Account Num"

View File

@@ -107,7 +107,7 @@ export default defineComponent({
canvasLoad:false,
canvasConfig:{
} as any,
currentView:'canvasEditor',
currentView:'',
getCanvasIfEdit:inject('getCanvasIfEdit')as any,
canvasInstance:null as any,
canvasJSON:'',
@@ -271,6 +271,7 @@ export default defineComponent({
})
onMounted(()=>{
nextTick(async ()=>{
detailData.currentView = 'canvasEditor'
if(detailData.selectDetail.canvasId){
detailData.isShowMark = true
await new Promise((resolve, reject) => {

View File

@@ -138,11 +138,6 @@ export default defineComponent({
default:'' as any,
required:true
},
isSegmentation:{
type:Boolean,
default:false as any,
required:true
},
},
emits:['selectImgItem'],
setup(props,{emit}) {
@@ -154,7 +149,6 @@ export default defineComponent({
designTypeList:computed(()=>props.catecoryList) as any,
designType:'',
searchPictureName:'',
designDetail:computed(()=>store.state.DesignDetail.designDetail),
mannequinData:{
sex:'Female',
style:'',
@@ -188,36 +182,10 @@ export default defineComponent({
detailData.designType = detailData.designTypeList[0]?.value?detailData.designTypeList[0]?.value:''
getLibraryList()
}
const hasDuplicateId = (id:any)=>{
let arr = detailData.designDetail.clothes
for (let i = 0; i < arr.length; i++) {
if (arr[i].id === id) {
return true;
}
}
return false;
}
const selectImgItem = (file:any)=>{
let randomNum = Math.floor(100 + Math.random() * 900);
let type = props.type
// let type = store.state.DesignDetail.currentDetailType
let id = file.id
if(type == 'sketch'){
id = Number(file.id + (randomNum + ''))
if(props.randomId){
if(hasDuplicateId(id)){
selectImgItem(file)
return
}
}
}
let data = JSON.parse(JSON.stringify(file))
data.type = detailData.mannequinData.system == 'system'?'System':'Library'
if(!props.isSegmentation){
data.id = id
}
emit('selectImgItem',data)
// store.commit('DesignDetail/setNewDetail',data)
}
const getLibraryList = ()=>{
if(props.type == 'models'){
@@ -260,7 +228,6 @@ export default defineComponent({
detailData.isShowLoading = true
let level2Type = ''
let workspace = store.state.Workspace.probjects
// let type = store.state.DesignDetail.currentDetailType
let data = {
level1Type:props.level1Type,
// level2Type:'Pattern',

View File

@@ -37,7 +37,7 @@
<uploadSegmentation v-if="isSegmentation" :segmentationType="segmentationType" :deReconstructionList=deReconstructionList @selectImgItem="selectImgItem" :level1Type="level1Type" :catecoryList="catecoryList"></uploadSegmentation>
</div>
<div class="content_item" v-show="selectTitle == 'library'">
<libraryList :isSegmentation="isSegmentation" @selectImgItem="selectImgItem" :randomId="randomId" :level1Type="level1Type" :type="type" ref="libraryList" :catecoryList="catecoryList"></libraryList>
<libraryList @selectImgItem="selectImgItem" :randomId="randomId" :level1Type="level1Type" :type="type" ref="libraryList" :catecoryList="catecoryList"></libraryList>
</div>
</div>
</div>
@@ -121,7 +121,9 @@ export default defineComponent({
detailData.selectTitle = 'library'
getDetailListDom.libraryList.init()
}
const selectImgItem = (data:any)=>{
emit('selectImgItem',data)
}
onMounted(()=>{

View File

@@ -35,6 +35,7 @@ export default defineComponent({
const detailData = reactive({
selectTitle:'current',
selectDetail:computed(()=>store.state.DesignDetail.selectDetail),
designDetail:computed(()=>store.state.DesignDetail.designDetail),
sketchCatecoryList:computed(()=>{
return store.state.Workspace.probjects.positionList
}),
@@ -58,8 +59,24 @@ export default defineComponent({
detailData.selectTitle = 'library'
getDetailListDom.libraryList.init()
}
const hasDuplicateId = (id:any)=>{
let arr = detailData.designDetail.clothes
for (let i = 0; i < arr.length; i++) {
if (arr[i].id === id) {
return true;
}
}
return false;
}
const selectImgItem = (data:any)=>{
console.log(data)
let randomNum = Math.floor(100 + Math.random() * 900);
let id = data.id
id = Number(data.id + (randomNum + ''))
if(hasDuplicateId(id)){
selectImgItem(data)
return
}
data.id = id
if(data?.imgUrl)data.url = data.imgUrl
let value = {
data,

View File

@@ -14,7 +14,7 @@
<i v-show="true" class="icon iconfont icon-chehui" @click="revocation"></i>
<i v-show="true" class="icon iconfont icon-fanchehui" @click="oppositeRevocation"></i>
<!-- 编辑 -->
<i class="fi fi-rr-edit" :title="$t('DesignDetail.editTitle')" :class="{active:isEditPattern.value}" @click="showDesignImgDetail('edit')"></i>
<i class="fi fi-rr-edit" :title="$t('DesignDetail.editTitle')" :class="{active:isEditPattern.value,'pointerEventsNone':!selectDetail?.id}" @click="showDesignImgDetail('edit')"></i>
<!-- <i class="fi fi-rr-copy" :title="$t('DesignDetail.compareTitle')" :class="{active:imgDesignImg}" @click="mousedownDesignImg"></i> -->
<!-- <i v-show="!body && !deleteShow" :title="$t('DesignDetail.DetailTitle')" class="fi fi-rr-trash" @click="deleteNav(0)"></i>
<i v-show="!body && deleteShow" class="fi fi-br-check" @click="deleteNav(1)"></i> -->
@@ -48,6 +48,7 @@ export default defineComponent({
const store = useStore();
const detailData = reactive({
getCanvasIfEdit:inject('getCanvasIfEdit')as any,
selectDetail:computed(()=>store.state.DesignDetail.selectDetail),
})
const setRevocation:any = inject('setRevocation')
const getDetailListData = reactive({
@@ -187,6 +188,11 @@ export default defineComponent({
width: 4rem;
height: 4rem;
justify-content: center;
&.pointerEventsNone{
cursor: not-allowed;
pointer-events: none;
opacity: 0.6;
}
@media (min-width: 1024px) {
font-size: 2.4rem;
}

View File

@@ -485,11 +485,14 @@ export default defineComponent({
userId: this.userId,
organizationName: this.selectEnterprise,
};
this.$emit('update:isMask',true)
Https.axiosPost(Https.httpUrls.accountLogin, data)
.then((rv: any) => {
this.setSuccessLogin(rv);
})
.catch((res) => {});
.catch((res) => {
this.$emit('update:isMask',false)
});
},
isCheckAgreement() {
message.info("Agree to all terms, privacy fees and policies");

View File

@@ -486,11 +486,14 @@ export default defineComponent({
loginType: "EMAIL",
userId: this.userId,
};
this.$emit('update:isMask',true)
Https.axiosPost(Https.httpUrls.accountLogin, data)
.then((rv: any) => {
this.setSuccessLogin(rv);
})
.catch((res) => {});
.catch((res) => {
this.$emit('update:isMask',false)
});
},
isCheckAgreement() {
message.info("Agree to all terms, privacy fees and policies");

View File

@@ -488,11 +488,14 @@ export default defineComponent({
userId: this.userId,
organizationName: this.selectSchool,
};
this.$emit('update:isMask',true)
Https.axiosPost(Https.httpUrls.accountLogin, data)
.then((rv: any) => {
this.setSuccessLogin(rv);
})
.catch((res) => {});
.catch((res) => {
this.$emit('update:isMask',false)
});
},
isCheckAgreement() {
message.info("Agree to all terms, privacy fees and policies");

View File

@@ -499,7 +499,7 @@ router.beforeEach((to: any, from, next) => {
if (to.meta.enter == "all") {
next();
} else if (
(state.UserHabit.userDetail.systemList.indexOf(to.meta.enter) > -1) || (vuex_systemList.indexOf(to.meta.enter))
(state.UserHabit?.userDetail?.systemList?.indexOf(to.meta.enter) > -1) || (vuex_systemList?.indexOf(to.meta.enter))
) {
next();
} else {

View File

@@ -265,7 +265,7 @@ const userHabit : Module<UserHabit,RootState> = {
*/
state.userDetail.affiliate = data.affiliate
state.userDetail.systemUser = data.systemUser
// state.userDetail.systemUser = 7
// state.userDetail.systemUser = 3
// 身份列表1可以使用aida系统2:可以使用affiliate页面3系统管理员用户
state.userDetail.systemList = []
if(data.systemUser != 0)state.userDetail.systemList.push(1)

View File

@@ -266,7 +266,7 @@
</div>
</template>
<script >
import { defineComponent, createVNode, ref,toRefs, reactive, computed, onMounted, nextTick, watch, provide } from "vue";
import { defineComponent, createVNode, ref,toRefs, reactive, computed, onMounted, nextTick, watch, provide, defineAsyncComponent } from "vue";
import { isEmail } from "@/tool/util";
import { setCookie, getCookie, WriteCookie,clonAllCookie } from "@/tool/cookie";
import payOrder from "@/component/Pay/payOrder.vue";
@@ -290,10 +290,12 @@ import MyWs from "@/tool/webSocket";
import MyEvent from "@/tool/myEvents";
import { useRouter,useRoute } from 'vue-router'
import {openTypeList} from "@/tool/listData.js";
import home from "@/component/home/index.vue";
// import home from "@/component/home/index.vue";
import projectSetting from '@/component/home/newProject/setting.vue'
import bindEmail from "@/component/HomePage/bindEmail.vue";
const home = defineAsyncComponent(() =>
import('@/component/home/index.vue')
)
export default defineComponent({
components: {
renew,

View File

@@ -43,12 +43,15 @@
<span>Log on to AiDA</span>
</div>
<div class="info" v-show="!loginType">Please fill your information below</div>
<personal ref="personal" v-if="loginType == 'personal'"></personal>
<personal ref="personal" v-if="loginType == 'personal'" v-model:isMask="isMask"></personal>
<school ref="school" v-if="loginType == 'school'"></school>
<enterprise ref="enterprise" v-if="loginType == 'enterprise'"></enterprise>
</div>
</div>
<div class="mark_loading" v-show="isMask">
<a-spin size="large" />
</div>
</div>
</div>
</template>
@@ -92,7 +95,7 @@ export default defineComponent({
const route = useRoute()
const loginData = reactive({
loginType: "",
isMask: true,
isMask: false,
});
const dataDom = reactive({
personal: null as any,