Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite

This commit is contained in:
zhangyh
2025-11-14 15:20:49 +08:00
17 changed files with 406 additions and 32 deletions

View File

@@ -50,7 +50,7 @@
</div> </div>
</div> </div>
<div class="item detailLeft" :class="{isEditPattern:isEditPattern.value}"> <div class="item detailLeft" :class="{isEditPattern:isEditPattern.value}">
<detailLeft v-if="currentDetailType"></detailLeft> <detailLeft v-if="currentDetailType" ref="detailLeft"></detailLeft>
<!-- <detailLeft v-if="selectDetail && selectDetail.id && currentDetailType"></detailLeft> --> <!-- <detailLeft v-if="selectDetail && selectDetail.id && currentDetailType"></detailLeft> -->
<div class="btn" style="margin: 0;" v-show="currentDetailType == 'color'"> <div class="btn" style="margin: 0;" v-show="currentDetailType == 'color'">
<div class="gallery_btn" @click="previwe">{{$t('DesignPrintOperation.Preview')}}</div> <div class="gallery_btn" @click="previwe">{{$t('DesignPrintOperation.Preview')}}</div>
@@ -67,6 +67,7 @@
@revocation="revocation" @revocation="revocation"
@oppositeRevocation="oppositeRevocation" @oppositeRevocation="oppositeRevocation"
@modelOnLoad="modelOnLoad" @modelOnLoad="modelOnLoad"
@sketchSysToLibrary="sketchSysToLibrary"
></model> ></model>
<div class="btn"> <div class="btn">
<div class="gallery_btn" style="margin-right: 0;" @click="submit">{{$t('DesignPrintOperation.Submit')}}</div> <div class="gallery_btn" style="margin-right: 0;" @click="submit">{{$t('DesignPrintOperation.Submit')}}</div>
@@ -136,6 +137,7 @@ export default defineComponent({
model:null, model:null,
canvasBox, canvasBox,
detailRight, detailRight,
detailLeft:null as any,
}) })
const userDetail = computed(()=>{ const userDetail = computed(()=>{
return store.state.UserHabit.userDetail return store.state.UserHabit.userDetail
@@ -491,6 +493,9 @@ export default defineComponent({
store.commit('DesignDetail/setDesignDetail',detailData.designDetail) store.commit('DesignDetail/setDesignDetail',detailData.designDetail)
},1000) },1000)
} }
const sketchSysToLibrary = ()=>{//系统sketch添加到library更新library
detailDom.detailLeft.sketchSysToLibrary()
}
onMounted(()=>{ onMounted(()=>{
window.addEventListener('resize', handleResize); window.addEventListener('resize', handleResize);
}) })
@@ -515,6 +520,7 @@ export default defineComponent({
detailEdit, detailEdit,
canvasReload, canvasReload,
modelOnLoad, modelOnLoad,
sketchSysToLibrary,
} }
}, },

View File

@@ -16,6 +16,7 @@
:clothing-image-opts="{ :clothing-image-opts="{
imageMode:'contains', imageMode:'contains',
}" }"
:hideCanvas="hideCanvas"
ref="editCanvas"> ref="editCanvas">
</editCanvas> </editCanvas>
<!-- <canvasContent ref="canvasContent"></canvasContent> --> <!-- <canvasContent ref="canvasContent"></canvasContent> -->
@@ -37,6 +38,7 @@
:clothing-image-opts="{ :clothing-image-opts="{
imageMode:'contains', imageMode:'contains',
}" }"
:hideCanvas="hideCanvas"
ref="editCanvasBackFront"> ref="editCanvasBackFront">
</editCanvas> </editCanvas>
</div> </div>
@@ -63,6 +65,7 @@ import { useStore } from "vuex";
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
import editCanvas from "@/component/Canvas/CanvasEditor/index.vue"; import editCanvas from "@/component/Canvas/CanvasEditor/index.vue";
import { formatTime,segmentImage,getMinioUrl } from "@/tool/util"; import { formatTime,segmentImage,getMinioUrl } from "@/tool/util";
import { useRouter, useRoute } from 'vue-router'
export default defineComponent({ export default defineComponent({
components:{ components:{
@@ -77,7 +80,7 @@ export default defineComponent({
setup(props,{emit}) { setup(props,{emit}) {
const store = useStore(); const store = useStore();
const {t} = useI18n(); const {t} = useI18n();
const route = useRoute()
const detailDom = reactive({ const detailDom = reactive({
editFrontBack:null as any, editFrontBack:null as any,
model:null, model:null,
@@ -104,6 +107,7 @@ export default defineComponent({
getCanvasIfEdit:inject('getCanvasIfEdit')as any, getCanvasIfEdit:inject('getCanvasIfEdit')as any,
canvasInstance:null as any, canvasInstance:null as any,
canvasJSON:'', canvasJSON:'',
hideCanvas: computed(()=>store.state.Workspace.projectPath !== route.fullPath),
}) })
watch(()=>detailData.selectDetail,(newValue,oldValue)=>{ watch(()=>detailData.selectDetail,(newValue,oldValue)=>{
detailData.imgDomIndex = detailData.frontBack.front.findIndex((item:any)=>item.id == newValue.id) detailData.imgDomIndex = detailData.frontBack.front.findIndex((item:any)=>item.id == newValue.id)

View File

@@ -1,6 +1,6 @@
<template> <template>
<div class="detailLeft"> <div class="detailLeft">
<sketch v-show="currentDetailType == 'sketch'" @addDetail="addDetail"></sketch> <sketch v-show="currentDetailType == 'sketch'" ref="sketch" @addDetail="addDetail"></sketch>
<print v-show="currentDetailType == 'print'"></print> <print v-show="currentDetailType == 'print'"></print>
<color v-if="currentDetailType == 'color'"></color> <color v-if="currentDetailType == 'color'"></color>
<element v-show="currentDetailType == 'element'"></element> <element v-show="currentDetailType == 'element'"></element>
@@ -42,6 +42,7 @@ export default defineComponent({
}) })
const getDetailListDom = reactive({ const getDetailListDom = reactive({
addDetails:null as any, addDetails:null as any,
sketch:null as any,
}) })
const addDetail = () =>{ const addDetail = () =>{
let addDetails:any = getDetailListDom.addDetails let addDetails:any = getDetailListDom.addDetails
@@ -53,6 +54,9 @@ export default defineComponent({
detailData.selectDetail.newDetail.sketch = null detailData.selectDetail.newDetail.sketch = null
} }
} }
const sketchSysToLibrary = ()=>{//系统sketch添加到library更新library
getDetailListDom.sketch.sketchSysToLibrary()
}
return{ return{
...toRefs(detailData), ...toRefs(detailData),
@@ -60,6 +64,7 @@ export default defineComponent({
...toRefs(getDetailListDom), ...toRefs(getDetailListDom),
addDetail, addDetail,
setSloganData, setSloganData,
sketchSysToLibrary,
} }
}, },

View File

@@ -12,7 +12,7 @@
<i class="fi fi-rr-picture centent"></i> <i class="fi fi-rr-picture centent"></i>
</div> </div>
</div> </div>
<selectList @selectImgItem="selectImgItem" source="detail" level1Type="Sketchboard" type="sketch" :catecoryList="sketchCatecoryList"></selectList> <selectList @selectImgItem="selectImgItem" source="detail" ref="selectList" level1Type="Sketchboard" type="sketch" :catecoryList="sketchCatecoryList"></selectList>
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts">
@@ -47,7 +47,7 @@ export default defineComponent({
currentPage:1, currentPage:1,
}) })
const getDetailListDom = reactive({ const getDetailListDom = reactive({
libraryList:null as any, selectList:null as any,
}) })
const openCurrent = ()=>{ const openCurrent = ()=>{
detailData.selectTitle = 'current' detailData.selectTitle = 'current'
@@ -55,9 +55,8 @@ export default defineComponent({
const openUpload = ()=>{ const openUpload = ()=>{
detailData.selectTitle = 'upload' detailData.selectTitle = 'upload'
} }
const openLibrary = ()=>{ const sketchSysToLibrary = ()=>{
detailData.selectTitle = 'library' getDetailListDom.selectList.openLibrary()
getDetailListDom.libraryList.init()
} }
const hasDuplicateId = (id:any)=>{ const hasDuplicateId = (id:any)=>{
let arr = detailData.designDetail.clothes let arr = detailData.designDetail.clothes
@@ -96,7 +95,7 @@ export default defineComponent({
openCurrent, openCurrent,
openUpload, openUpload,
openLibrary, sketchSysToLibrary,
selectImgItem, selectImgItem,
openAddDetail, openAddDetail,
} }

View File

@@ -4,7 +4,7 @@
<div class="back" v-show="isEditPattern.value"> <div class="back" v-show="isEditPattern.value">
<i class="fi fi-br-angle-left" @click="setBack"></i> <i class="fi fi-br-angle-left" @click="setBack"></i>
</div> </div>
<modelNav @canvasReload="()=>$emit('canvasReload')" @addSketch="()=>$emit('addSketch')" @deleteItem="deleteItem"></modelNav> <modelNav @canvasReload="()=>$emit('canvasReload')" @addSketch="()=>$emit('addSketch')" @sketchSysToLibrary="()=>$emit('sketchSysToLibrary')" @deleteItem="deleteItem"></modelNav>
</div> </div>
<div class="modelindex_right"> <div class="modelindex_right">
<div class="detail_btn"> <div class="detail_btn">
@@ -26,7 +26,7 @@
<i v-show="!body && deleteShow" class="fi fi-br-check" @click="deleteNav(1)"></i> --> <i v-show="!body && deleteShow" class="fi fi-br-check" @click="deleteNav(1)"></i> -->
<!-- --> <!-- -->
<i :title="$t('DesignDetail.compareTitle')" @mousedown="mousedownDesignImg" @mouseup="mousedownDesignImg" @touchstart="mousedownDesignImg" @touchend="mousedownDesignImg"> <i :title="$t('DesignDetail.compareTitle')" @mousedown="mousedownDesignImg" @mouseup="mousedownDesignImg" @touchstart.passive="mousedownDesignImg" @touchend.passive="mousedownDesignImg">
<SvgIcon name="DetailCompare" size="30" /> <SvgIcon name="DetailCompare" size="30" />
</i> </i>
@@ -50,7 +50,7 @@ export default defineComponent({
components:{ components:{
position,modelNav position,modelNav
}, },
emits:['detailEdit','canvasReload','addSketch','revocation','oppositeRevocation','modelOnLoad'], emits:['detailEdit','canvasReload','addSketch','revocation','oppositeRevocation','modelOnLoad','sketchSysToLibrary'],
setup(props,{emit}) { setup(props,{emit}) {
const {t} = useI18n() const {t} = useI18n()
const store = useStore(); const store = useStore();

View File

@@ -7,7 +7,10 @@
@mousedown.stop="designMousedown(getMousePosition($event,false),item.uniqueId,'disLike')" @mousedown.stop="designMousedown(getMousePosition($event,false),item.uniqueId,'disLike')"
@touchstart.passive="designMousedown(getMousePosition($event,true),item.uniqueId,'disLike')" @touchstart.passive="designMousedown(getMousePosition($event,true),item.uniqueId,'disLike')"
@click="selectDetailItem(item,index)"> @click="selectDetailItem(item,index)">
<div class="iconList">
<i class="fi fi-rr-add" :class="{ active:item.scope == 'sys'}" @click.stop="sketchSystemToLibrary(item)"></i>
<i class="fi fi-rr-trash" @click.stop="deleteDetailItem(item?.id)"></i> <i class="fi fi-rr-trash" @click.stop="deleteDetailItem(item?.id)"></i>
</div>
<img :src="item.path" alt=""> <img :src="item.path" alt="">
</div> </div>
</div> </div>
@@ -30,7 +33,7 @@ export default defineComponent({
components:{ components:{
position, position,
}, },
emits:['canvasReload','addSketch','deleteItem'], emits:['canvasReload','addSketch','deleteItem','sketchSysToLibrary'],
props:{ props:{
}, },
setup(props,{emit}) { setup(props,{emit}) {
@@ -249,6 +252,17 @@ export default defineComponent({
collItemSize.prentHeight = (collItemSize.padding + remValue) * elArr.length + 'px' collItemSize.prentHeight = (collItemSize.padding + remValue) * elArr.length + 'px'
moveItem() moveItem()
} }
const sketchSystemToLibrary = (item)=>{
let value = {
clothId:item.id,
path:item.minIOPath
}
Https.axiosGet(Https.httpUrls.addSysSketchToLibrary,{params:value})
.then((rv:any)=>{
item.scope = 'user'
emit('sketchSysToLibrary')
})
}
let observers = null as any let observers = null as any
onMounted(()=>{ onMounted(()=>{
observers = new ResizeObserver(entries => { observers = new ResizeObserver(entries => {
@@ -269,6 +283,7 @@ export default defineComponent({
designMousedown, designMousedown,
addSketch, addSketch,
getMousePosition, getMousePosition,
sketchSystemToLibrary,
} }
}, },
@@ -295,17 +310,35 @@ export default defineComponent({
position: absolute; position: absolute;
background: #fff; background: #fff;
transition: top .3s; transition: top .3s;
> i:not(.fi-bs-plus){ > .iconList{
display: none;
position: absolute; position: absolute;
right: 1rem;
top: 1rem; top: 1rem;
cursor: pointer; right: 1rem;
display: none;
flex-direction: column;
align-items: center;
> i{
margin-bottom: .2rem;
font-size: 1.8rem;
}
> .fi-rr-add{
pointer-events: none;
color: #acacac;
&.active{
pointer-events: auto;
color: #000;
}
}
>i:not(.fi-rr-add){
font-size: 2rem; font-size: 2rem;
} }
}
i:not(.fi-bs-plus){
}
&:hover{ &:hover{
> i{ > .iconList{
display: block; display: flex;
} }
} }
&:last-child{ &:last-child{

View File

@@ -724,8 +724,9 @@ export default defineComponent({
} }
}, },
methods: { methods: {
generageAdd(data: any) { generageAdd(value: any) {
if (!data?.imgUrl) return if (!value?.imgUrl) return
const data = JSON.parse(JSON.stringify(value))
data.type_ = this.type_ data.type_ = this.type_
data.type_.type1 = data.designType ? data.designType : this.type_.type1 data.type_.type1 = data.designType ? data.designType : this.type_.type1
data.resData = JSON.parse(JSON.stringify(data)) data.resData = JSON.parse(JSON.stringify(data))
@@ -1204,13 +1205,14 @@ export default defineComponent({
Https.axiosPost(Https.httpUrls.generateLike, data) Https.axiosPost(Https.httpUrls.generateLike, data)
.then(rv => { .then(rv => {
item.like = true item.like = true
item.libraryId = rv.libraryId
}) })
.catch(res => {}) .catch(res => {})
this.fileList[index].state = '' this.fileList[index].state = ''
this.generageAdd(item) this.generageAdd(item)
} else { } else {
this.fileList[index].state = 'delete' this.fileList[index].state = 'delete'
this.generageAdd(item) // this.generageAdd(item)
let data = { let data = {
generateDetailId: item.id, generateDetailId: item.id,
timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone
@@ -1218,6 +1220,7 @@ export default defineComponent({
Https.axiosGet(Https.httpUrls.generateDislike, { params: data }) Https.axiosGet(Https.httpUrls.generateDislike, { params: data })
.then(rv => { .then(rv => {
item.like = false item.like = false
item.libraryId = null
}) })
.catch(res => {}) .catch(res => {})
} }

View File

@@ -422,6 +422,8 @@ export default defineComponent({
}, },
//创建定时器 //创建定时器
createTimer() { createTimer() {
clearInterval(this.timer);
this.time = 60;
this.timer = setInterval(() => { this.timer = setInterval(() => {
this.time--; this.time--;
if (!this.time) { if (!this.time) {

View File

@@ -119,10 +119,22 @@ export default defineComponent({
file.level2Type = cate.value; file.level2Type = cate.value;
file.categoryValue = cate.value; file.categoryValue = cate.value;
file.category = cate.name; file.category = cate.name;
if(props.isSetSketchCategory){
console.log("libraryId:" + file.libraryId)
if(file.libraryId){
let data = {
libraryId:[file.libraryId],
level2Type:props.item.categoryValue,
}
Https.axiosPost(Https.httpUrls.setSketchLibrary,data).then(
(rv: any) => {
emit('upTypeSucced')
}
).catch((res)=>{
});
}else if(props.isSetSketchCategory){
setSketchLibrary(props.item) setSketchLibrary(props.item)
} }
// this.store.commit("sketchGenerateFiles", this.fileList);
} }
let setSketchLibrary = (item:any)=>{ let setSketchLibrary = (item:any)=>{

View File

@@ -193,10 +193,56 @@
<div v-show="frogetPasswordStep === 3"> <div v-show="frogetPasswordStep === 3">
<div class="forget_passored_form_content"> <div class="forget_passored_form_content">
<div class="forget_passored_form_title">Password</div> <div class="forget_passored_form_title">Password</div>
<div v-show="passwordConditionShow" class="conditionShow">
<div class="item">
<div class="icon">
<i
v-show="!passwordCondition.length"
class="fi fi-br-cross-small"
></i>
<i
v-show="passwordCondition.length"
class="fi fi-br-check"
></i>
</div>
<div class="text">At least 8 characters long</div>
</div>
<div class="item">
<div class="icon">
<i
v-show="!passwordCondition.special"
class="fi fi-br-cross-small"
></i>
<i
v-show="passwordCondition.special"
class="fi fi-br-check"
></i>
</div>
<div class="text">Must contain special characters</div>
</div>
<div class="item">
<div class="icon">
<i
v-show="!passwordCondition.group"
class="fi fi-br-cross-small"
></i>
<i
v-show="passwordCondition.group"
class="fi fi-br-check"
></i>
</div>
<div class="text">
Mix of uppercase, lowercase and numbers
</div>
</div>
</div>
<input <input
class="forget_passored_form_input" class="forget_passored_form_input"
placeholder="Enter a new password" placeholder="Enter a new password"
v-model="newPassword" v-model="newPassword"
@focus="() => (passwordConditionShow = true)"
@blur="() => (passwordConditionShow = false)"
@input="passwordInput"
@keydown.enter="submitResetPassword()" @keydown.enter="submitResetPassword()"
/> />
</div> </div>
@@ -302,6 +348,12 @@ export default defineComponent({
passwordType: "password", passwordType: "password",
userId: "", userId: "",
loginTime: true, loginTime: true,
passwordConditionShow:false,
passwordCondition: {
length: false,
special: false,
group: false,
},
}; };
}, },
onBeforeUnmount() { onBeforeUnmount() {
@@ -544,9 +596,26 @@ export default defineComponent({
sessionStorage.setItem("sessionId", randomNum); sessionStorage.setItem("sessionId", randomNum);
sessionStorage.setItem("record", JSON.stringify([])); sessionStorage.setItem("record", JSON.stringify([]));
} }
},
passwordInput(e) {
this.isPassword(this.newPassword);
},
isPassword(password: any) {
this.passwordCondition.length = /.{8,}/.test(password);
this.passwordCondition.special =
/[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]/.test(password);
this.passwordCondition.group =
/[a-z]/.test(password) && /[A-Z]/.test(password) && /\d/.test(password);
return Object.values(this.passwordCondition).filter(
(value) => value === true
).length;
}, },
//修改密码提交 //修改密码提交
submitResetPassword() { submitResetPassword() {
if (this.isPassword(this.newPassword) < 3) {
message.info("You must satisfy ALL password conditions to register.");
return;
}
let data = { let data = {
email: this.forgetPasswordEmail, email: this.forgetPasswordEmail,
emailVerifyCode: this.forgetEmailValue, emailVerifyCode: this.forgetEmailValue,
@@ -563,6 +632,8 @@ export default defineComponent({
//创建定时器 //创建定时器
createTimer() { createTimer() {
clearInterval(this.timer);
this.time = 60;
this.timer = setInterval(() => { this.timer = setInterval(() => {
this.time--; this.time--;
if (this.time <= 0) this.clearTimer(0); if (this.time <= 0) this.clearTimer(0);
@@ -607,6 +678,36 @@ export default defineComponent({
.login_page { .login_page {
width: 100%; width: 100%;
height: 100%; height: 100%;
.conditionShow {
bottom: 0;
position: absolute;
right: 0;
left: auto;
transform: translateY(-5rem);
background: #404040;
color: #fff;
font-size: 1.4rem;
padding: 2rem;
border-radius: 2rem;
z-index: 2;
> .item {
display: flex;
align-items: center;
margin-bottom: 0.5rem;
&:last-child {
margin-bottom: 0;
}
> .icon {
margin-right: 1rem;
i {
display: flex;
// &.fi-br-cross-small{
// color: red;
// }
}
}
}
}
.page_content { .page_content {
.login_content { .login_content {
margin: 0 auto; margin: 0 auto;

View File

@@ -189,10 +189,56 @@
<div v-show="frogetPasswordStep === 3"> <div v-show="frogetPasswordStep === 3">
<div class="forget_passored_form_content"> <div class="forget_passored_form_content">
<div class="forget_passored_form_title">Password</div> <div class="forget_passored_form_title">Password</div>
<div v-show="passwordConditionShow" class="conditionShow">
<div class="item">
<div class="icon">
<i
v-show="!passwordCondition.length"
class="fi fi-br-cross-small"
></i>
<i
v-show="passwordCondition.length"
class="fi fi-br-check"
></i>
</div>
<div class="text">At least 8 characters long</div>
</div>
<div class="item">
<div class="icon">
<i
v-show="!passwordCondition.special"
class="fi fi-br-cross-small"
></i>
<i
v-show="passwordCondition.special"
class="fi fi-br-check"
></i>
</div>
<div class="text">Must contain special characters</div>
</div>
<div class="item">
<div class="icon">
<i
v-show="!passwordCondition.group"
class="fi fi-br-cross-small"
></i>
<i
v-show="passwordCondition.group"
class="fi fi-br-check"
></i>
</div>
<div class="text">
Mix of uppercase, lowercase and numbers
</div>
</div>
</div>
<input <input
class="forget_passored_form_input" class="forget_passored_form_input"
placeholder="Enter a new password" placeholder="Enter a new password"
v-model="newPassword" v-model="newPassword"
@focus="() => (passwordConditionShow = true)"
@blur="() => (passwordConditionShow = false)"
@input="passwordInput"
@keydown.enter="submitResetPassword()" @keydown.enter="submitResetPassword()"
/> />
</div> </div>
@@ -258,6 +304,7 @@ import { useI18n } from "vue-i18n";
import { setLang } from "@/tool/guide"; import { setLang } from "@/tool/guide";
import md5 from "md5"; import md5 from "md5";
import router from "@/router"; import router from "@/router";
import { pass } from "three/tsl";
export default defineComponent({ export default defineComponent({
components: { components: {
VerificationCodeInput, VerificationCodeInput,
@@ -307,6 +354,12 @@ export default defineComponent({
loginTime: true, loginTime: true,
animation: false, animation: false,
inputCodeTime: null as any, inputCodeTime: null as any,
passwordConditionShow:false,
passwordCondition: {
length: false,
special: false,
group: false,
},
}; };
}, },
onBeforeUnmount() { onBeforeUnmount() {
@@ -413,14 +466,12 @@ export default defineComponent({
checkRobot() { checkRobot() {
this.isCheckRobot = !this.isCheckRobot; this.isCheckRobot = !this.isCheckRobot;
}, },
//提交账号密码预先登录 //提交账号密码预先登录
submitPerLogin() { submitPerLogin() {
//输入账号密码 //输入账号密码
if (this.emailStap >= 2) { if (this.emailStap >= 2) {
let verificationCodeInputDom:any = this.$refs.verificationCodeInputDom let verificationCodeInputDom:any = this.$refs.verificationCodeInputDom
let code = verificationCodeInputDom.getCtData.map(item => item).join(''); let code = verificationCodeInputDom.getCtData.map(item => item).join('');
console.log(code)
if(code.length !== this.emailCode.length){ if(code.length !== this.emailCode.length){
message.info("Please enter the complete verification code."); message.info("Please enter the complete verification code.");
}else{ }else{
@@ -562,9 +613,26 @@ export default defineComponent({
sessionStorage.setItem("sessionId", randomNum); sessionStorage.setItem("sessionId", randomNum);
sessionStorage.setItem("record", JSON.stringify([])); sessionStorage.setItem("record", JSON.stringify([]));
} }
},
passwordInput(e) {
this.isPassword(this.newPassword);
},
isPassword(password: any) {
this.passwordCondition.length = /.{8,}/.test(password);
this.passwordCondition.special =
/[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]/.test(password);
this.passwordCondition.group =
/[a-z]/.test(password) && /[A-Z]/.test(password) && /\d/.test(password);
return Object.values(this.passwordCondition).filter(
(value) => value === true
).length;
}, },
//修改密码提交 //修改密码提交
submitResetPassword() { submitResetPassword() {
if (this.isPassword(this.newPassword) < 3) {
message.info("You must satisfy ALL password conditions to register.");
return;
}
let data = { let data = {
email: this.forgetPasswordEmail, email: this.forgetPasswordEmail,
emailVerifyCode: this.forgetEmailValue, emailVerifyCode: this.forgetEmailValue,
@@ -581,6 +649,8 @@ export default defineComponent({
//创建定时器 //创建定时器
createTimer() { createTimer() {
clearInterval(this.timer);
this.time = 60;
this.timer = setInterval(() => { this.timer = setInterval(() => {
this.time--; this.time--;
if (this.time <= 0) this.clearTimer(0); if (this.time <= 0) this.clearTimer(0);
@@ -633,6 +703,36 @@ export default defineComponent({
.login_page { .login_page {
width: 100%; width: 100%;
height: 100%; height: 100%;
.conditionShow {
bottom: 0;
position: absolute;
right: 0;
left: auto;
transform: translateY(-5rem);
background: #404040;
color: #fff;
font-size: 1.4rem;
padding: 2rem;
border-radius: 2rem;
z-index: 2;
> .item {
display: flex;
align-items: center;
margin-bottom: 0.5rem;
&:last-child {
margin-bottom: 0;
}
> .icon {
margin-right: 1rem;
i {
display: flex;
// &.fi-br-cross-small{
// color: red;
// }
}
}
}
}
.page_content { .page_content {
.login_content { .login_content {
margin: 0 auto; margin: 0 auto;
@@ -718,7 +818,6 @@ export default defineComponent({
cursor: pointer; cursor: pointer;
} }
} }
.login_form_input { .login_form_input {
width: 100%; width: 100%;
height: 6.75rem; height: 6.75rem;
@@ -885,7 +984,7 @@ export default defineComponent({
.forget_passored_form_content { .forget_passored_form_content {
margin-top: 3.5rem; margin-top: 3.5rem;
position: relative;
.forget_passored_form_title { .forget_passored_form_title {
font-size: 2.4rem; font-size: 2.4rem;
font-weight: bold; font-weight: bold;

View File

@@ -200,10 +200,56 @@
<div v-show="frogetPasswordStep === 3"> <div v-show="frogetPasswordStep === 3">
<div class="forget_passored_form_content"> <div class="forget_passored_form_content">
<div class="forget_passored_form_title">Password</div> <div class="forget_passored_form_title">Password</div>
<div v-show="passwordConditionShow" class="conditionShow">
<div class="item">
<div class="icon">
<i
v-show="!passwordCondition.length"
class="fi fi-br-cross-small"
></i>
<i
v-show="passwordCondition.length"
class="fi fi-br-check"
></i>
</div>
<div class="text">At least 8 characters long</div>
</div>
<div class="item">
<div class="icon">
<i
v-show="!passwordCondition.special"
class="fi fi-br-cross-small"
></i>
<i
v-show="passwordCondition.special"
class="fi fi-br-check"
></i>
</div>
<div class="text">Must contain special characters</div>
</div>
<div class="item">
<div class="icon">
<i
v-show="!passwordCondition.group"
class="fi fi-br-cross-small"
></i>
<i
v-show="passwordCondition.group"
class="fi fi-br-check"
></i>
</div>
<div class="text">
Mix of uppercase, lowercase and numbers
</div>
</div>
</div>
<input <input
class="forget_passored_form_input" class="forget_passored_form_input"
placeholder="Enter a new password" placeholder="Enter a new password"
v-model="newPassword" v-model="newPassword"
@focus="() => (passwordConditionShow = true)"
@blur="() => (passwordConditionShow = false)"
@input="passwordInput"
@keydown.enter="submitResetPassword()" @keydown.enter="submitResetPassword()"
/> />
</div> </div>
@@ -315,6 +361,12 @@ export default defineComponent({
loginTime: true, loginTime: true,
animation: false, animation: false,
inputCodeTime: null as any, inputCodeTime: null as any,
passwordConditionShow:false,
passwordCondition: {
length: false,
special: false,
group: false,
},
}; };
}, },
onBeforeUnmount() { onBeforeUnmount() {
@@ -572,9 +624,26 @@ export default defineComponent({
sessionStorage.setItem("sessionId", randomNum); sessionStorage.setItem("sessionId", randomNum);
sessionStorage.setItem("record", JSON.stringify([])); sessionStorage.setItem("record", JSON.stringify([]));
} }
},
passwordInput(e) {
this.isPassword(this.newPassword);
},
isPassword(password: any) {
this.passwordCondition.length = /.{8,}/.test(password);
this.passwordCondition.special =
/[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]/.test(password);
this.passwordCondition.group =
/[a-z]/.test(password) && /[A-Z]/.test(password) && /\d/.test(password);
return Object.values(this.passwordCondition).filter(
(value) => value === true
).length;
}, },
//修改密码提交 //修改密码提交
submitResetPassword() { submitResetPassword() {
if (this.isPassword(this.newPassword) < 3) {
message.info("You must satisfy ALL password conditions to register.");
return;
}
let data = { let data = {
email: this.forgetPasswordEmail, email: this.forgetPasswordEmail,
emailVerifyCode: this.forgetEmailValue, emailVerifyCode: this.forgetEmailValue,
@@ -591,6 +660,8 @@ export default defineComponent({
//创建定时器 //创建定时器
createTimer() { createTimer() {
clearInterval(this.timer);
this.time = 60;
this.timer = setInterval(() => { this.timer = setInterval(() => {
this.time--; this.time--;
if (this.time <= 0) this.clearTimer(0); if (this.time <= 0) this.clearTimer(0);
@@ -643,6 +714,36 @@ export default defineComponent({
.login_page { .login_page {
width: 100%; width: 100%;
height: 100%; height: 100%;
.conditionShow {
bottom: 0;
position: absolute;
right: 0;
left: auto;
transform: translateY(-5rem);
background: #404040;
color: #fff;
font-size: 1.4rem;
padding: 2rem;
border-radius: 2rem;
z-index: 2;
> .item {
display: flex;
align-items: center;
margin-bottom: 0.5rem;
&:last-child {
margin-bottom: 0;
}
> .icon {
margin-right: 1rem;
i {
display: flex;
// &.fi-br-cross-small{
// color: red;
// }
}
}
}
}
.page_content { .page_content {
.login_content { .login_content {
margin: 0 auto; margin: 0 auto;

View File

@@ -686,7 +686,7 @@ export default defineComponent({
if(this.colorList[colorList.length - 1]?.gradient && this.colorList[colorList.length - 1]?.gradient?.selectIndex>-1 && this.colorList[colorList.length - 1]?.gradient?.gradientShow){ if(this.colorList[colorList.length - 1]?.gradient && this.colorList[colorList.length - 1]?.gradient?.selectIndex>-1 && this.colorList[colorList.length - 1]?.gradient?.gradientShow){
this.selectColor = {rgba:this.colorList[colorList.length - 1].gradient.gradientList[colorList.length - 1].rgba,hex:hex} //顔色选择器默认颜色 this.selectColor = {rgba:this.colorList[colorList.length - 1].gradient.gradientList[colorList.length - 1].rgba,hex:hex} //顔色选择器默认颜色
}else{ }else{
this.selectColor = {rgba:this.colorList[colorList.length - 1].rgba,hex:hex} //顔色选择器默认颜色 this.selectColor = {rgba:this.colorList[colorList.length - 1]?.rgba,hex:hex} //顔色选择器默认颜色
} }
this.store.commit('setColorboardList',colorList) this.store.commit('setColorboardList',colorList)
}, },

View File

@@ -742,6 +742,8 @@ export default defineComponent({
//创建定时器 //创建定时器
createTimer() { createTimer() {
clearInterval(this.timer);
this.time = 60;
this.timer = setInterval(() => { this.timer = setInterval(() => {
this.time--; this.time--;
if (!this.time) { if (!this.time) {

View File

@@ -5,6 +5,7 @@
@canvasInit="canvasInit" @canvasInit="canvasInit"
@changeCanvas="changeCanvas" @changeCanvas="changeCanvas"
is-general is-general
:hideCanvas="hideCanvas"
:isBackgroundChangeable="false" :isBackgroundChangeable="false"
ref="editCanvas"></editCanvas> ref="editCanvas"></editCanvas>
</div> </div>
@@ -26,6 +27,7 @@ import { Https } from "@/tool/https";
import { useStore } from "vuex"; import { useStore } from "vuex";
import { useI18n } from "vue-i18n"; import { useI18n } from "vue-i18n";
import editCanvas from "@/component/Canvas/CanvasEditor/index.vue"; import editCanvas from "@/component/Canvas/CanvasEditor/index.vue";
import { useRouter, useRoute } from 'vue-router'
export default defineComponent({ export default defineComponent({
@@ -53,12 +55,14 @@ export default defineComponent({
const isShowMark = ref(false) const isShowMark = ref(false)
const component = reactive({ const component = reactive({
}) })
const route = useRoute()
const data = reactive({ const data = reactive({
canvasLoad:false, canvasLoad:false,
canvasJSON:computed(()=>store.state.HomeStoreModule.canvasData.canvas), canvasJSON:computed(()=>store.state.HomeStoreModule.canvasData.canvas),
canvasConfig:{ canvasConfig:{
}, },
hideCanvas: computed(()=>store.state.Workspace.projectPath !== route.fullPath),
}) })
watch(()=>data.canvasJSON,(newVal)=>{ watch(()=>data.canvasJSON,(newVal)=>{
dataDom.editCanvas.loadJSON(newVal) dataDom.editCanvas.loadJSON(newVal)

View File

@@ -217,6 +217,7 @@ export const Https = {
projectSaveOrUpdate:`/api/project/saveOrUpdate`, //History修改用户分组名 projectSaveOrUpdate:`/api/project/saveOrUpdate`, //History修改用户分组名
historyChoose:`/api/history/choose`, //History choose historyChoose:`/api/history/choose`, //History choose
getDesignDetail:`/api/design/detail/getDetail`,//查询design详情 getDesignDetail:`/api/design/detail/getDetail`,//查询design详情
addSysSketchToLibrary:`/api/library/addSysSketchToLibrary`,//把系统衣服添加的library
designSingleWithGradient:`/api/design/detail/designSingleWithGradient`,//查询需要更新mask列表 designSingleWithGradient:`/api/design/detail/designSingleWithGradient`,//查询需要更新mask列表
getNextSysElement:'/api/design/detail/getNextSysElement',//切换系统的element getNextSysElement:'/api/design/detail/getNextSysElement',//切换系统的element
detailPrintDot:'/api/design/detail/printDot',//print打点预览 detailPrintDot:'/api/design/detail/printDot',//print打点预览

View File

@@ -1067,6 +1067,7 @@ export default defineComponent({
Https.axiosPost(Https.httpUrls.generateLike, data).then( Https.axiosPost(Https.httpUrls.generateLike, data).then(
(rv) => { (rv) => {
item.like = true item.like = true
item.libraryId = rv.libraryId
} }
).catch(res=>{ ).catch(res=>{
}); });
@@ -1078,6 +1079,7 @@ export default defineComponent({
Https.axiosGet(Https.httpUrls.generateDislike, {params:data}).then( Https.axiosGet(Https.httpUrls.generateDislike, {params:data}).then(
(rv) => { (rv) => {
item.like = false item.like = false
item.libraryId = null
} }
).catch(res=>{ ).catch(res=>{
}); });