2023-11-28-用户指引功能

This commit is contained in:
X1627315083
2023-11-28 16:21:00 +08:00
parent d206509d93
commit 1987ed7f15
26 changed files with 658 additions and 212 deletions

View File

@@ -162,7 +162,10 @@ li {
.hideEvents * { .hideEvents * {
pointer-events: none !important; pointer-events: none !important;
} }
.hideEvents .Guide_ { .Guide_ {
pointer-events: auto !important;
}
.Guide_.showEvents * {
pointer-events: auto !important; pointer-events: auto !important;
} }
.delete_like_file_block { .delete_like_file_block {
@@ -389,6 +392,13 @@ li {
.operate_file_block .select_img_type .category_list .category_item:hover { .operate_file_block .select_img_type .category_list .category_item:hover {
background: linear-gradient(-137deg, #eeefdb, #e7dbed); background: linear-gradient(-137deg, #eeefdb, #e7dbed);
} }
.driver-overlay,
.driver-active * {
pointer-events: none;
}
.showEvents * {
pointer-events: auto;
}
.habit :deep(.ant-btn:hover), .habit :deep(.ant-btn:hover),
:deep(.ant-btn:focus), :deep(.ant-btn:focus),
:deep(.ant-btn:active), :deep(.ant-btn:active),
@@ -502,12 +512,6 @@ li {
.libraryPageCascader .ant-cascader-menu { .libraryPageCascader .ant-cascader-menu {
margin-top: 4rem; margin-top: 4rem;
} }
.collection_modal .ant-modal-content,
.design_detail_modal_component .ant-modal-content,
.designOpenrtion_modal .ant-modal-content {
transform: scale(1.2);
transform-origin: center !important;
}
.collection_modal .ant-modal-body, .collection_modal .ant-modal-body,
.design_detail_modal_component .ant-modal-body, .design_detail_modal_component .ant-modal-body,
.designOpenrtion_modal .ant-modal-body, .designOpenrtion_modal .ant-modal-body,

View File

@@ -177,8 +177,14 @@ ul,li{
*{ *{
pointer-events:none !important; pointer-events:none !important;
} }
.Guide_{
pointer-events:auto !important; }
.Guide_{
pointer-events:auto !important;
&.showEvents{
*{
pointer-events:auto !important;
}
} }
} }
@@ -453,6 +459,14 @@ ul,li{
} }
} }
} }
.driver-overlay, .driver-active * {
pointer-events: none;
}
.showEvents{
*{
pointer-events: auto;
}
}
// .ant-modal-wrap{ // .ant-modal-wrap{
// z-index: 10001 ; // z-index: 10001 ;
// } // }
@@ -597,8 +611,8 @@ ul,li{
} }
.collection_modal,.design_detail_modal_component,.designOpenrtion_modal{ .collection_modal,.design_detail_modal_component,.designOpenrtion_modal{
.ant-modal-content{ .ant-modal-content{
transform: scale(1.2); // transform: scale(1.2);
transform-origin: center !important; // transform-origin: center !important;
} }
} }
//collection 弹窗 //collection 弹窗

View File

@@ -2,11 +2,13 @@
<div> <div>
<!-- designDetailShow --> <!-- designDetailShow -->
<a-modal class="design_detail_modal_component Guide_1_18" <a-modal class="design_detail_modal_component Guide_1_18"
:class="[driver__.driver?'hideEvents':'']"
v-model:visible="designDetailShow" v-model:visible="designDetailShow"
:footer="null" :footer="null"
width="65%" width="65%"
:maskClosable="false" :maskClosable="false"
:centered="true" :centered="true"
:keyboard="false"
:closable="false" :closable="false"
> >
<div class="design_title_text"> <div class="design_title_text">
@@ -58,11 +60,11 @@
<i v-show="revocationShow>1" class="icon iconfont icon-chehui" @click="revocation"></i> <i v-show="revocationShow>1" class="icon iconfont icon-chehui" @click="revocation"></i>
<i v-show="oppositeRevocationShow>=1" class="icon iconfont icon-fanchehui" @click="oppositeRevocation"></i> <i v-show="oppositeRevocationShow>=1" class="icon iconfont icon-fanchehui" @click="oppositeRevocation"></i>
</div> </div>
<div v-show="ifSubmit" class="subitOkPreviewBtn" @click="submit"> <div v-show="ifSubmit" class="subitOkPreviewBtn Guide_1_26" @click="submit">
{{ $t('DesignDetail.Submit') }} {{ $t('DesignDetail.Submit') }}
</div> </div>
</div> </div>
<div class="detail_modal_body_category Guide_1_20" :class="[driver__.driver?'hideEvents':'']"> <div class="detail_modal_body_category">
<div v-show="designOrder" class="detail_modal_right_top scroll_style"> <div v-show="designOrder" class="detail_modal_right_top scroll_style">
<div class="clothes_detail_item clothes_detail_item_apparel"> <div class="clothes_detail_item clothes_detail_item_apparel">
<div class="clothes_item_header"> <div class="clothes_item_header">
@@ -72,7 +74,7 @@
</div> </div>
<img :src="designItemDetail?.clothes?.[currentIndex]?.path" alt="" class="centent" @click="openCurrent(1)"> <img :src="designItemDetail?.clothes?.[currentIndex]?.path" alt="" class="centent" @click="openCurrent(1)">
</div> </div>
<div class="clothes_detail_item clothes_detail_item_print"> <div class="clothes_detail_item clothes_detail_item_print Guide_1_20" :class="[driver__.driver?'showEvents':'']">
<div class="clothes_item_header"> <div class="clothes_item_header">
<i class="fi fi-rs-comments"></i> <i class="fi fi-rs-comments"></i>
<div>{{ $t('DesignDetail.CurrentPrint') }}</div> <div>{{ $t('DesignDetail.CurrentPrint') }}</div>
@@ -294,6 +296,11 @@ export default defineComponent({
let DesignDetailAlter:any = this.$refs.DesignDetailAlter let DesignDetailAlter:any = this.$refs.DesignDetailAlter
DesignDetailAlter.init(num) DesignDetailAlter.init(num)
if(num ==2 ){ if(num ==2 ){
if(this.driver__.driver){
nextTick().then(()=>{
driverObj__.moveNext();
})
}
} }
}, },
@@ -569,7 +576,11 @@ export default defineComponent({
this.closeModal() this.closeModal()
this.store.commit('setDesignCollectionList',designCollectionList) this.store.commit('setDesignCollectionList',designCollectionList)
this.store.commit('setLikeDesignCollectionList',likeDesignCollectionList) this.store.commit('setLikeDesignCollectionList',likeDesignCollectionList)
if(this.driver__.driver){
nextTick().then(()=>{
driverObj__.moveNext();
})
}
} }
).catch(res=>{ ).catch(res=>{
this.loadingShow = false this.loadingShow = false
@@ -651,6 +662,7 @@ export default defineComponent({
}, },
clothesOpen(index:any){ clothesOpen(index:any){
this.clothesDetail('',index) this.clothesDetail('',index)
}, },
clothesOpenActive(index:any){ clothesOpenActive(index:any){
this.designItemDetail.clothes.forEach((item:any)=>{ this.designItemDetail.clothes.forEach((item:any)=>{
@@ -688,6 +700,11 @@ export default defineComponent({
this.store.commit('setDesignPreviewData',data) this.store.commit('setDesignPreviewData',data)
let DesignDetailAlter:any = this.$refs.DesignDetailAlter let DesignDetailAlter:any = this.$refs.DesignDetailAlter
DesignDetailAlter.changePlace() DesignDetailAlter.changePlace()
if(this.driver__.driver){
nextTick().then(()=>{
driverObj__.moveNext();
})
}
}, },
//重新设计 //重新设计
redesignItem(){ redesignItem(){
@@ -852,6 +869,7 @@ export default defineComponent({
position: relative; position: relative;
height: 80%; height: 80%;
display: inline-block; display: inline-block;
width: 100%;
.detail_modal_model{ .detail_modal_model{
z-index: 1; z-index: 1;
position: relative; position: relative;

View File

@@ -12,8 +12,8 @@
</div> </div>
<div <div
@click.stop="open(2)" @click.stop="open(2)"
class="switch_type_item" class="switch_type_item Guide_1_21"
:class="[openClick == 2 ? 'select_swtich' : '']" :class="[openClick == 2 ? 'select_swtich' : '',driver__.driver?'showEvents':'']"
> >
<span>{{ $t('DesignDetailAlter.Library') }}</span> <span>{{ $t('DesignDetailAlter.Library') }}</span>
</div> </div>
@@ -96,7 +96,7 @@
</div> </div>
</div> </div>
</div> </div>
<div v-show="openClick == 2" class="detail_Library_item"> <div v-show="openClick == 2" class="detail_Library_item Guide_1_22" :class="[driver__.driver?'showEvents':'']">
<div class="material_content_body scroll_style"> <div class="material_content_body scroll_style">
<div class="content_img_item" v-for="(file) in clothesList" :key="file.id" :class="{active:selectCode !== 'Moodboard'}"> <div class="content_img_item" v-for="(file) in clothesList" :key="file.id" :class="{active:selectCode !== 'Moodboard'}">
<div class="content_img_item_block" :class="{active:file?.checked}"> <div class="content_img_item_block" :class="{active:file?.checked}">
@@ -267,6 +267,7 @@ import { Sketch, Chrome} from '@ans1998/vue3-color'
import {getUploadUrl,rgbToHsv} from '@/tool/util' import {getUploadUrl,rgbToHsv} from '@/tool/util'
import DesignDetailEnd from './DesignDetailEnd.vue'; import DesignDetailEnd from './DesignDetailEnd.vue';
import { getCookie } from "@/tool/cookie"; import { getCookie } from "@/tool/cookie";
import { openGuide,driverObj__ } from "@/tool/guide";
import { useI18n } from 'vue-i18n'; import { useI18n } from 'vue-i18n';
export default defineComponent({ export default defineComponent({
props: ["msg"], props: ["msg"],
@@ -278,6 +279,7 @@ export default defineComponent({
let type_ = ref(1); let type_ = ref(1);
let select = ref(false); let select = ref(false);
let current = inject('current')//父组件传过来的数据 let current = inject('current')//父组件传过来的数据
let driver__ = inject('driver__')//父组件传过来的数据
let openClick = ref(1); let openClick = ref(1);
let searchPictureName = ref('') let searchPictureName = ref('')
//模型印花 //模型印花
@@ -324,6 +326,7 @@ export default defineComponent({
selectColor, selectColor,
selectColorList, selectColorList,
workspace, workspace,
driver__,
t, t,
} }
}, },
@@ -638,6 +641,11 @@ export default defineComponent({
minIOPath:imgData.minIOPath, minIOPath:imgData.minIOPath,
path:imgData?.url path:imgData?.url
}] }]
if(this.driver__.driver){
nextTick().then(()=>{
driverObj__.moveNext();
})
}
// console.log(this.current.printObject,imgData); // console.log(this.current.printObject,imgData);
} }
@@ -672,6 +680,11 @@ export default defineComponent({
this.openClick = num; this.openClick = num;
if(num ==2 ){ if(num ==2 ){
this.getLibraryList() this.getLibraryList()
if(this.driver__.driver){
nextTick().then(()=>{
driverObj__.moveNext();
})
}
} }
}, },
@@ -1417,7 +1430,11 @@ export default defineComponent({
flex-direction: row-reverse; flex-direction: row-reverse;
.vc-chrome-color-wrap{ .vc-chrome-color-wrap{
// width: 3.6rem; // width: 3.6rem;
margin-left: 2rem;
width: auto; width: auto;
.vc-chrome-active-color{
border-radius: 50%;
}
.vc-chrome-active-color,.vc-checkerboard{ .vc-chrome-active-color,.vc-checkerboard{
width: 3rem; width: 3rem;
height: 3rem; height: 3rem;

View File

@@ -85,7 +85,7 @@
</div> </div>
</div> </div>
<div v-show="type_ == 1 || type_ == 3" @click.stop="setPreview" class="subitOkPreviewBtn">{{ $t('DesignDetailEnd.preview') }}</div> <div v-show="type_ == 1 || type_ == 3" @click.stop="setPreview" class="subitOkPreviewBtn">{{ $t('DesignDetailEnd.preview') }}</div>
<div v-if="type_ == 2 && current?.printObject?.prints?.[0]?.path != null" @click.stop="setPrint" class="subitOkPreviewBtn">{{ $t('DesignDetailEnd.Layout') }}</div> <div v-if="type_ == 2 && current?.printObject?.prints?.[0]?.path != null" @click.stop="setPrint" class="subitOkPreviewBtn Guide_1_23">{{ $t('DesignDetailEnd.Layout') }}</div>
<div v-else-if="type_ == 2 && current?.printObject?.prints?.[0]?.path == null" @click.stop="setPreview" class="subitOkPreviewBtn">{{ $t('DesignDetailEnd.preview') }}</div> <div v-else-if="type_ == 2 && current?.printObject?.prints?.[0]?.path == null" @click.stop="setPreview" class="subitOkPreviewBtn">{{ $t('DesignDetailEnd.preview') }}</div>
<DesignPrintOperation ref="DesignPrintOperation"></DesignPrintOperation> <DesignPrintOperation ref="DesignPrintOperation"></DesignPrintOperation>
@@ -96,7 +96,7 @@
</div> </div>
</template> </template>
<script> <script>
import { defineComponent,computed,ref, h ,inject} from 'vue' import { defineComponent,computed,ref, nextTick,h ,inject} from 'vue'
import Draggable from 'vuedraggable' import Draggable from 'vuedraggable'
import { Https } from "@/tool/https"; import { Https } from "@/tool/https";
import { useStore } from "vuex"; import { useStore } from "vuex";
@@ -104,6 +104,7 @@ import { Sketch} from '@ans1998/vue3-color'
import DesignPrintOperation from './DesignPrintOperation.vue'; import DesignPrintOperation from './DesignPrintOperation.vue';
import DesignPrintOperationMobile from './DesignPrintOperationMobile.vue'; import DesignPrintOperationMobile from './DesignPrintOperationMobile.vue';
import { message,Upload} from 'ant-design-vue'; import { message,Upload} from 'ant-design-vue';
import { openGuide,driverObj__ } from "@/tool/guide";
import {isMoible} from '@/tool/util' import {isMoible} from '@/tool/util'
import { useI18n } from 'vue-i18n'; import { useI18n } from 'vue-i18n';
@@ -118,6 +119,8 @@ export default defineComponent({
let current = inject('current')//父组件传过来的数据 let current = inject('current')//父组件传过来的数据
let setRevocation = inject('setRevocation')//父组件传过来的数据 let setRevocation = inject('setRevocation')//父组件传过来的数据
let sketchImg = ref({}) let sketchImg = ref({})
let driver__ = inject('driver__')//父组件传过来的数据
//印花 //印花
let overallSingle = ref(false) let overallSingle = ref(false)
let systemDesignerPercentage = ref(30) let systemDesignerPercentage = ref(30)
@@ -134,6 +137,7 @@ export default defineComponent({
current, current,
setRevocation, setRevocation,
sketchImg, sketchImg,
driver__,
type_, type_,
overallSingle, overallSingle,
systemDesignerPercentage, systemDesignerPercentage,
@@ -180,6 +184,11 @@ export default defineComponent({
if(this.current?.printObject?.prints?.[0]?.path){ if(this.current?.printObject?.prints?.[0]?.path){
let DesignPrintOperation = isMoible() ? this.$refs.DesignPrintOperationMobile : this.$refs.DesignPrintOperation let DesignPrintOperation = isMoible() ? this.$refs.DesignPrintOperationMobile : this.$refs.DesignPrintOperation
DesignPrintOperation.init() DesignPrintOperation.init()
if(this.driver__.driver){
nextTick().then(()=>{
driverObj__.moveNext();
})
}
}else{ }else{
message.info(this.t('DesignDetailEnd.jsContent1')); message.info(this.t('DesignDetailEnd.jsContent1'));
} }

View File

@@ -1,13 +1,15 @@
<template> <template>
<div> <div>
<a-modal <a-modal
class="designOpenrtion_modal" class="designOpenrtion_modal Guide_1_24"
:class="[driver__.driver?'hideEvents':'']"
v-model:visible="designOpenrtion" v-model:visible="designOpenrtion"
:footer="null" :footer="null"
width="65%" width="65%"
:maskClosable="false" :maskClosable="false"
:centered="true" :centered="true"
:closable="false" :closable="false"
:keyboard="false"
:mask="true" :mask="true"
> >
<div class="designOpenrtion_content"> <div class="designOpenrtion_content">
@@ -56,7 +58,7 @@
<img :src="designOpenrtionList[0].path"> <img :src="designOpenrtionList[0].path">
</div> </div>
</div> </div>
<div class="subitOkPreviewBtn" @click.stop="setPreview">{{ $t('DesignPrintOperation.preview') }}</div> <div class="subitOkPreviewBtn Guide_1_25" @click.stop="setPreview">{{ $t('DesignPrintOperation.preview') }}</div>
</div> </div>
</div> </div>
<div class="designOpenrtion_centent" id="designOpenrtionCentent"> <div class="designOpenrtion_centent" id="designOpenrtionCentent">
@@ -104,6 +106,7 @@
import { defineComponent, h,createVNode, ref ,computed, inject,nextTick} from "vue"; import { defineComponent, h,createVNode, ref ,computed, inject,nextTick} from "vue";
import { LoadingOutlined } from "@ant-design/icons-vue"; import { LoadingOutlined } from "@ant-design/icons-vue";
import { useStore } from "vuex"; import { useStore } from "vuex";
import { openGuide,driverObj__ } from "@/tool/guide";
import { Https } from "@/tool/https"; import { Https } from "@/tool/https";
import { Modal,message } from 'ant-design-vue'; import { Modal,message } from 'ant-design-vue';
import { ExclamationCircleOutlined } from '@ant-design/icons-vue'; import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
@@ -114,6 +117,7 @@ export default defineComponent({
let designOpenrtion = ref(false); let designOpenrtion = ref(false);
let designOpenrtionList = ref([]) let designOpenrtionList = ref([])
let current = inject('current')//父组件传过来的数据 let current = inject('current')//父组件传过来的数据
let driver__ = inject('driver__')
let setRevocation = inject('setRevocation')//父组件传过来的数据 let setRevocation = inject('setRevocation')//父组件传过来的数据
let overallSingle = ref(false) let overallSingle = ref(false)
let systemDesignerPercentage = ref(0) let systemDesignerPercentage = ref(0)
@@ -160,6 +164,7 @@ export default defineComponent({
overallSingle, overallSingle,
systemDesignerPercentage, systemDesignerPercentage,
current, current,
driver__,
printAmount, printAmount,
printZIndex, printZIndex,
printStyleList, printStyleList,
@@ -652,6 +657,11 @@ export default defineComponent({
this.loadingShow = false this.loadingShow = false
this.designOpenrtion = false this.designOpenrtion = false
// this.closeModal() // this.closeModal()
if(this.driver__.driver){
nextTick().then(()=>{
driverObj__.moveNext();
})
}
} }
).catch(res=>{ ).catch(res=>{
this.loadingShow = false this.loadingShow = false

View File

@@ -8,6 +8,7 @@
:maskClosable="false" :maskClosable="false"
:centered="true" :centered="true"
:closable="false" :closable="false"
:keyboard="false"
:mask="true" :mask="true"
> >
<div class="designOpenrtion_content"> <div class="designOpenrtion_content">

View File

@@ -5,6 +5,7 @@
:title="collectionName" :title="collectionName"
width="80%" width="80%"
:maskClosable="false" :maskClosable="false"
:keyboard="false"
:centered="true" :centered="true"
> >
<template #closeIcon> <template #closeIcon>

View File

@@ -1,7 +1,7 @@
<template> <template>
<div class="habit"> <div class="habit">
<div v-show="openType.habit" class="habit_mask"></div> <div v-show="openType.habit" class="habit_mask"></div>
<div class="habit_button" @click.stop="setOpenType('habit')" > <div class="habit_button Guide_1_27" @click.stop="setOpenType('habit')" >
{{ $t('Habit.Workspace') }} {{ $t('Habit.Workspace') }}
<i class="fi fi-bs-angle-down"></i> <i class="fi fi-bs-angle-down"></i>
</div> </div>
@@ -95,7 +95,7 @@
<div class="habit_System_Designer_text">{{ $t('Habit.Designer') }}</div> <div class="habit_System_Designer_text">{{ $t('Habit.Designer') }}</div>
</div> </div>
</div> </div>
<div class="habit_model"> <div class="habit_model Guide_1_28">
<a-dropdown placement="bottomRight" <a-dropdown placement="bottomRight"
trigger="['click']" trigger="['click']"
@click.stop="setOpenType('model')" @click.stop="setOpenType('model')"
@@ -107,7 +107,7 @@
</a-button> </a-button>
</a-dropdown> </a-dropdown>
</div> </div>
<div id="modelShow" class="habit_model_show" v-fade="openType.model"> <div id="modelShow" class="habit_model_show Guide_1_29" :class="[driver__.driver?'showEvents':'']" v-fade="openType.model">
<div class="habit_btn"> <div class="habit_btn">
<div class="model_current"> <div class="model_current">
<div class="model_text">{{ $t('Habit.Current') }}</div> <div class="model_text">{{ $t('Habit.Current') }}</div>
@@ -153,12 +153,13 @@
</template> </template>
<script lang="ts"> <script lang="ts">
import { useStore } from "vuex"; import { useStore } from "vuex";
import { defineComponent, createVNode, ref,Ref} from "vue"; import { defineComponent, createVNode,nextTick, computed,ref,Ref} from "vue";
import { UserOutlined, DownOutlined } from "@ant-design/icons-vue"; import { UserOutlined, DownOutlined } from "@ant-design/icons-vue";
import { Https } from "@/tool/https"; import { Https } from "@/tool/https";
import type { MenuProps } from "ant-design-vue"; import type { MenuProps } from "ant-design-vue";
import { Modal,message,Upload} from 'ant-design-vue'; import { Modal,message,Upload} from 'ant-design-vue';
import { ExclamationCircleOutlined } from '@ant-design/icons-vue'; import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
import { openGuide,driverObj__ } from "@/tool/guide";
import { useI18n } from "vue-i18n"; import { useI18n } from "vue-i18n";
export default defineComponent({ export default defineComponent({
components: { components: {
@@ -166,8 +167,9 @@ export default defineComponent({
UserOutlined, UserOutlined,
}, },
setup(){ setup(){
const store = useStore();
let workspaceItem:any = ref({ let workspaceItem:any = ref({
id:1, id:'',
id_:1, id_:1,
workSpaceName:"工作台1", workSpaceName:"工作台1",
putName:false, putName:false,
@@ -189,6 +191,9 @@ export default defineComponent({
addWorkspace:false, addWorkspace:false,
sex:false sex:false
}) })
let driver__:any = computed(()=>{
return store.state.Guide.guide
})
let workspace:any = ref({ let workspace:any = ref({
}); });
@@ -200,11 +205,11 @@ export default defineComponent({
]) ])
const {t} = useI18n() const {t} = useI18n()
return{ return{
systemSeleves, systemSeleves,
mannequins, mannequins,
openType, openType,
driver__,
workspace, workspace,
workspaceItem, workspaceItem,
workspaceItemName, workspaceItemName,
@@ -224,13 +229,13 @@ export default defineComponent({
let data = this.workspaceItem let data = this.workspaceItem
delete data.isLastIndex delete data.isLastIndex
this.putWorkspace(data,'') this.putWorkspace(data,'')
// this.getDetail(this.workspaceItem.id)
this.store.commit("setWorkspace", this.workspaceItem); this.store.commit("setWorkspace", this.workspaceItem);
} }
} }
}, },
'workspaceItem.id_':{ 'workspaceItem.id_':{
handler(newVal:any,oldVal:any){ handler(newVal:any,oldVal:any){
this.workspace.workspaceList.forEach((v:any)=>{ this.workspace.workspaceList.forEach((v:any)=>{
if(v.id == this.workspaceItem.id_){ if(v.id == this.workspaceItem.id_){
this.workspaceItem = v this.workspaceItem = v
@@ -239,7 +244,7 @@ export default defineComponent({
if(v.id == oldVal){ if(v.id == oldVal){
delete v.isLastIndex delete v.isLastIndex
this.putWorkspace(v,newVal) this.putWorkspace(v,newVal)
// this.getDetail(newVal) this.getDetail(newVal)
} }
}) })
this.getMannequins() this.getMannequins()
@@ -264,21 +269,12 @@ export default defineComponent({
// }) // })
} }
}, },
// 'workspa,ceItem.sex':{ 'workspaceItem.sex':{
// handler(newVal:any,oldVal:any){ handler(newVal:any,oldVal:any){
// console.log(oldVal); // console.log(this.workspaceItem);
// if(oldVal){ }
// console.log(oldVal); },
// if(newVal != oldVal){
// console.log(this.workspaceItem.position);
// this.workspaceItem.position = this.singleTypeList[0].label
// }
// }
// }
// },
workspaceItem:{ workspaceItem:{
handler(newVal:any,oldVal:any){ handler(newVal:any,oldVal:any){
this.store.commit("setWorkspace", this.workspaceItem); this.store.commit("setWorkspace", this.workspaceItem);
@@ -292,6 +288,7 @@ export default defineComponent({
}, },
mounted() { mounted() {
this.getworkspace() this.getworkspace()
this.getSex()
}, },
directives:{ directives:{
fade:{ fade:{
@@ -336,7 +333,6 @@ export default defineComponent({
this.sex = rv this.sex = rv
} }
}) })
this.getPosition('')
}, },
async getPosition(str:any){ async getPosition(str:any){
let params let params
@@ -379,23 +375,21 @@ export default defineComponent({
v.overallSingle = true v.overallSingle = true
} }
v.putName = false v.putName = false
if(v.id == rv.id){ if(v.id == (this.workspaceItem.id?this.workspaceItem.id:rv.id)){
this.workspaceItem = v this.workspaceItem = v
console.log(this.workspaceItem);
this.setMannequinsSex() this.setMannequinsSex()
this.getPosition('')
} }
}); });
this.workspace.id = rv.id this.workspace.id = rv.id
this.workspace.workspaceList = rv.page.content this.workspace.workspaceList = rv.page.content
this.getSex()
} }
}) })
}, },
getDetail(id:any){// getDetail(id:any){//
Https.axiosGet(Https.httpUrls.workspaceDetail,{params:{id:id}}).then((rv: any) => { Https.axiosGet(Https.httpUrls.workspaceDetail,{params:{id:id}}).then((rv: any) => {
if (rv) { if (rv) {
this.getworkspace() // this.getworkspace()
} }
}) })
}, },
@@ -422,7 +416,7 @@ export default defineComponent({
Https.axiosPost(Https.httpUrls.workspacesaveOrUpdate,data).then((rv: any) => { Https.axiosPost(Https.httpUrls.workspacesaveOrUpdate,data).then((rv: any) => {
if (rv) { if (rv) {
if(index){ if(index){
this.getDetail(index) // this.getDetail(index)
}else{ }else{
this.getworkspace() this.getworkspace()
} }
@@ -558,15 +552,28 @@ export default defineComponent({
// this.workspaceItem.mannequinId = item.id // this.workspaceItem.mannequinId = item.id
// this.workspaceItem.mannequinType = str // this.workspaceItem.mannequinType = str
// this.workspaceItem.mannequinUrl = item.presignedUrl // this.workspaceItem.mannequinUrl = item.presignedUrl
let id
console.log(id , item.id);
if(this.workspaceItem.sexEnum.name == 'Female'){ if(this.workspaceItem.sexEnum.name == 'Female'){
id = this.workspaceItem.mannequinFemaleId
this.workspaceItem.femalePresignedUrl = item.presignedUrl this.workspaceItem.femalePresignedUrl = item.presignedUrl
this.workspaceItem.mannequinFemaleType = str this.workspaceItem.mannequinFemaleType = str
this.workspaceItem.mannequinFemaleId = item.id this.workspaceItem.mannequinFemaleId = item.id
}else if(this.workspaceItem.sexEnum.name == 'Male'){ }else if(this.workspaceItem.sexEnum.name == 'Male'){
id = this.workspaceItem.mannequinMaleId
this.workspaceItem.malePresignedUrl = item.presignedUrl this.workspaceItem.malePresignedUrl = item.presignedUrl
this.workspaceItem.mannequinMaleType = str this.workspaceItem.mannequinMaleType = str
this.workspaceItem.mannequinMaleId = item.id this.workspaceItem.mannequinMaleId = item.id
} }
if(id != item.id){
if(this.driver__.driver){
this.openType.habit = false
nextTick().then(()=>{
driverObj__.moveNext();
})
}
}
this.workspaceItem.mannequinUrl = item.presignedUrl this.workspaceItem.mannequinUrl = item.presignedUrl
this.workspaceItem.mannequinType = str this.workspaceItem.mannequinType = str
this.workspaceItem.mannequinId = item.id this.workspaceItem.mannequinId = item.id
@@ -586,6 +593,13 @@ export default defineComponent({
setOpenType(v:string){ setOpenType(v:string){
if(v == 'habit'){ if(v == 'habit'){
this.openType.habit = !this.openType.habit this.openType.habit = !this.openType.habit
if(this.driver__.driver){
nextTick().then(()=>{
// driverObj__.moveNext();
driverObj__.moveTo(28);
})
}
}else if(v == 'workspace'){ }else if(v == 'workspace'){
this.openType.singleton = false this.openType.singleton = false
this.openType.sex = false this.openType.sex = false
@@ -599,6 +613,11 @@ export default defineComponent({
this.openType.sex = false this.openType.sex = false
this.openType.model = !this.openType.model this.openType.model = !this.openType.model
this.getMannequins() this.getMannequins()
if(this.driver__.driver){
nextTick().then(()=>{
driverObj__.moveNext();
})
}
}else if(v == 'singleton'){ }else if(v == 'singleton'){
this.openType.singleton = !this.openType.singleton this.openType.singleton = !this.openType.singleton
this.openType.workspace = false this.openType.workspace = false
@@ -607,6 +626,7 @@ export default defineComponent({
this.openType.sex = !this.openType.sex this.openType.sex = !this.openType.sex
this.openType.workspace = false this.openType.workspace = false
this.openType.singleton = false this.openType.singleton = false
} }
let mask = document.getElementsByClassName("habit_mask")[0] let mask = document.getElementsByClassName("habit_mask")[0]
mask.addEventListener("click", this.documentClick,true); mask.addEventListener("click", this.documentClick,true);
@@ -682,6 +702,7 @@ export default defineComponent({
transition: all .3s; transition: all .3s;
transform: scale(0.75)translateY(10%); transform: scale(0.75)translateY(10%);
display: none; display: none;
overflow: inherit !important;
&.active{ &.active{
opacity: 1; opacity: 1;
transform: scale(0.75)translateY(0%); transform: scale(0.75)translateY(0%);

View File

@@ -767,10 +767,12 @@ export default defineComponent({
flex-direction: row-reverse; flex-direction: row-reverse;
.vc-chrome-color-wrap{ .vc-chrome-color-wrap{
// width: 3.6rem; // width: 3.6rem;
margin-left: 2rem;
width: auto; width: auto;
.vc-chrome-active-color,.vc-checkerboard{ .vc-chrome-active-color,.vc-checkerboard{
width: 3rem; width: 3rem;
height: 3rem; height: 3rem;
border-radius: 50%;
} }
} }
.vc-chrome-hue-wrap,.vc-chrome-alpha-wrap{ .vc-chrome-hue-wrap,.vc-chrome-alpha-wrap{

View File

@@ -6,6 +6,7 @@
:maskClosable="false" :maskClosable="false"
:centered="true" :centered="true"
:closable="false" :closable="false"
:keyboard="false"
:zIndex="999999" :zIndex="999999"
:mask="false" :mask="false"
> >
@@ -163,8 +164,8 @@ export default defineComponent({
} }
.cut_pricture_modal{ .cut_pricture_modal{
.ant-modal-content{ .ant-modal-content{
transform: scale(1.2); // transform: scale(1.2);
transform-origin: center !important; // transform-origin: center !important;
} }
*{ *{
pointer-events: auto; pointer-events: auto;

View File

@@ -87,6 +87,7 @@
title="Mailbox binding" title="Mailbox binding"
width="56rem" width="56rem"
:maskClosable="false" :maskClosable="false"
:keyboard="false"
:centered="true" :centered="true"
> >
<template #closeIcon v-if="!isHaveBindEmail && bindEmailStep === 1"> <template #closeIcon v-if="!isHaveBindEmail && bindEmailStep === 1">

View File

@@ -109,7 +109,7 @@
></Generate> ></Generate>
</div> </div>
<div v-show="moodboarList.length" class="modal_right"> <div v-show="moodboarList.length" class="modal_right">
<div class="modal_layout Guide_1_7"> <div class="modal_layout Guide_1_7" :class="[driver__.driver?'showEvents':'']">
<div class="modal_text"> <div class="modal_text">
<div> <div>
{{ $t('MoodboardUpload.Thumbnail') }} {{ $t('MoodboardUpload.Thumbnail') }}
@@ -268,6 +268,8 @@ export default defineComponent({
}, },
driver__:{ driver__:{
handler(newVal,oldVal){ handler(newVal,oldVal){
console.log(newVal,'======');
if(newVal.index >= 1 && newVal.index <= 2){ if(newVal.index >= 1 && newVal.index <= 2){
this.open(newVal.index) this.open(newVal.index)
}else{ }else{

View File

@@ -1,5 +1,5 @@
<template> <template>
<div class="printboard_upload_modal"> <div class="printboard_upload_modal" :class="[driver__.driver?'showEvents':'']">
<div class="printboard_left_upload"> <div class="printboard_left_upload">
<div class="left_upload_header"> <div class="left_upload_header">

View File

@@ -1,7 +1,7 @@
<template> <template>
<div class="sketchboard_upload_modal"> <div class="sketchboard_upload_modal">
<div class="modal_left"> <div class="modal_left">
<div class="switch_type_list"> <div class="switch_type_list" :class="[driver__.driver?'showEvents':'']">
<div <div
@click.stop="open(1)" @click.stop="open(1)"
class="switch_type_item" class="switch_type_item"

View File

@@ -8,6 +8,7 @@
:centered="true" :centered="true"
:closable="false" :closable="false"
wrapClassName="#app" wrapClassName="#app"
:keyboard="false"
> >
<div class="collection_title"> <div class="collection_title">
<div class="collection_title_text"> <div class="collection_title_text">
@@ -85,6 +86,8 @@ export default defineComponent({
const store = useStore() const store = useStore()
let {t} = useI18n() let {t} = useI18n()
let driver__:any = computed(()=>{ let driver__:any = computed(()=>{
console.log(123);
return store.state.Guide.guide return store.state.Guide.guide
}) })
provide('driver__',driver__) provide('driver__',driver__)

View File

@@ -8,6 +8,7 @@
:maskClosable="false" :maskClosable="false"
:centered="true" :centered="true"
:closable="false" :closable="false"
:keyboard="false"
:mask="false" :mask="false"
:destroyOnClose="true" :destroyOnClose="true"
> >
@@ -627,8 +628,8 @@ export default defineComponent({
-khtml-user-select: none; -khtml-user-select: none;
user-select: none; user-select: none;
.ant-modal-content{ .ant-modal-content{
transform: scale(1.2); // transform: scale(1.2);
transform-origin: center !important; // transform-origin: center !important;
} }
// max-width: 1150px; // max-width: 1150px;
.ant-modal-body { .ant-modal-body {

View File

@@ -9,6 +9,7 @@
:centered="true" :centered="true"
:closable="false" :closable="false"
:mask="false" :mask="false"
:keyboard="false"
:destroyOnClose="true" :destroyOnClose="true"
> >
<div class="layout_content"> <div class="layout_content">
@@ -659,8 +660,8 @@ export default defineComponent({
-khtml-user-select: none; -khtml-user-select: none;
user-select: none; user-select: none;
.ant-modal-content{ .ant-modal-content{
transform: scale(1.2); // transform: scale(1.2);
transform-origin: center !important; // transform-origin: center !important;
} }
// max-width: 1150px; // max-width: 1150px;
.ant-modal-body { .ant-modal-body {

View File

@@ -8,6 +8,7 @@
:centered="true" :centered="true"
:closable="false" :closable="false"
:mask="false" :mask="false"
:keyboard="false"
:destroyOnClose="true" :destroyOnClose="true"
> >
<div class="scaleImage_btn"> <div class="scaleImage_btn">

View File

@@ -1,10 +1,11 @@
<template> <template>
<div v-show="placementShow"> <div v-if="placementShow">
<a-modal class="models_placement_component" <a-modal class="models_placement_component"
v-model:visible="placementShow" v-model:visible="placementShow"
:footer="null" :footer="null"
width="111.5rem" width="111.5rem"
:maskClosable="false" :maskClosable="false"
:keyboard="false"
:centered="true" :centered="true"
> >
<template #closeIcon> <template #closeIcon>
@@ -93,6 +94,7 @@
</div> </div>
</div> </div>
<vue-cropper <vue-cropper
v-show="!perviewUrl"
ref="cropper" ref="cropper"
:img="option.img" :img="option.img"
:outputSize="option.outputSize" :outputSize="option.outputSize"
@@ -118,7 +120,7 @@
:autoCropWidth="option.autoCropWidth" :autoCropWidth="option.autoCropWidth"
:mode="option.mode"> :mode="option.mode">
</vue-cropper> </vue-cropper>
<!-- <img class="placement_img" :src="perviewUrl || printObject?.url"> --> <img class="placement_img" v-show="perviewUrl" :src="perviewUrl || printObject?.url">
</div> </div>

View File

@@ -1,10 +1,11 @@
<template> <template>
<div v-show="placementShow"> <div v-if="placementShow">
<a-modal class="models_placement_mobile_component" <a-modal class="models_placement_component"
v-model:visible="placementShow" v-model:visible="placementShow"
:footer="null" :footer="null"
width="111.5rem" width="111.5rem"
:maskClosable="false" :maskClosable="false"
:keyboard="false"
:centered="true" :centered="true"
> >
<template #closeIcon> <template #closeIcon>
@@ -12,55 +13,115 @@
</template> </template>
<div class="models_placement_body" > <div class="models_placement_body" >
<div class="palcement_modal_header"> <div class="palcement_modal_header">
<div class="models_placement_title">{{ $t('ModelPlacementMobile.Registration') }}</div> <div class="models_placement_title">{{ $t('ModelPlacement.Registration') }}</div>
<div class="placement_operate_list"> <div class="placement_operate_list">
<div class="operate_item" v-show="locationList.length == 6" @click="submitPlacement"> <div class="operate_item" v-show="locationList.length == 6" @click="submitPlacement">
<div class="icon iconfont icon-baocun1 operate_icon"></div> <div class="icon iconfont icon-baocun1 operate_icon"></div>
<div class="operate_item_des">{{ $t('ModelPlacementMobile.Submit') }}</div> <div class="operate_item_des">{{ $t('ModelPlacement.Submit') }}</div>
</div> </div>
<div class="operate_item" v-show="locationList.length == 6" @click="printPreview"> <div class="operate_item" v-show="locationList.length == 6" @click="printPreview">
<div class="icon iconfont icon-shengchengyulan operate_icon"></div> <div class="icon iconfont icon-shengchengyulan operate_icon"></div>
<div class="operate_item_des">{{ $t('ModelPlacementMobile.Preview') }}</div> <div class="operate_item_des">{{ $t('ModelPlacement.Preview') }}</div>
</div> </div>
<div class="operate_item" v-show="perviewUrl" @click="backPreview"> <div class="operate_item" v-show="perviewUrl" @click="backPreview">
<div class="icon iconfont icon-fanhui1 operate_icon"></div> <div class="icon iconfont icon-fanhui1 operate_icon"></div>
<div class="operate_item_des">{{ $t('ModelPlacementMobile.Back') }}</div> <div class="operate_item_des">{{ $t('ModelPlacement.Back') }}</div>
</div> </div>
<div class="operate_item" @click="restoreLocationList"> <div class="operate_item" @click="restoreLocationList">
<div class="icon iconfont icon-huifu operate_icon"></div> <div class="icon iconfont icon-huifu operate_icon"></div>
<div class="operate_item_des">{{ $t('ModelPlacementMobile.Restore') }}</div> <div class="operate_item_des">{{ $t('ModelPlacement.Restore') }}</div>
</div> </div>
</div> </div>
</div> </div>
<div class="models_placement_content" @touchmove="startMove($event)"> <div class="plcaement_point_content" v-if="userInfo.userId == 88 || userInfo.userId == 83">
<div class="plcaement_point_content" v-if="userInfo.userId == 88 || userInfo.userId == 83"> <div style="display: flex; align-items: center;">
<div class="placement_point_item" v-for="(point,index) in pointList" :key="index" > <div style="display: flex; align-items: center;">
<input type="checkbox" model="false" @click="()=>{modelType = 'System'}">
{{ $t('ModelPlacement.System') }}
</div>
<div style="display: flex; align-items: center;">
<input type="checkbox" model="false" @click="()=>{modelType = 'Library'}">
{{ $t('ModelPlacement.Library') }}
</div>
</div>
</div>
<div class="models_placement_content">
<div class="plcaement_point_content">
<div class="select_block">
<a-select
ref="select"
v-model:value="sex"
:options="sexList"
>
<template #suffixIcon
><span
class="icon iconfont icon-xiala"
style="color: #343579"
></span
></template>
</a-select>
</div>
<div class="placement_point_item" v-for="(point,index) in pointList" :key="index" @touchmove="startMove($event)">
<div class="ponit_title">{{point.title}}</div> <div class="ponit_title">{{point.title}}</div>
<div class="point_list"> <div class="point_list">
<div class="point_item" v-for="item in point.pointList" :key="item.color" :style="{borderColor:item.color,visibility:item.show?'inherit':'hidden'}" @touchstart="AddDian(item)"><div class="point_block" :style="{background:item.color}"></div></div> <div class="point_item" v-for="item in point.pointList" :key="item.color" :style="{borderColor:item.color,visibility:item.show?'inherit':'hidden'}" @touchstart="AddDian(item)"><div class="point_block" :style="{background:item.color}"></div></div>
</div> </div>
</div> </div>
<div class="placement_point_item placement_point_item_btn">
<span class="started_btn" @click="setPoint">{{ $t('ModelPlacement.Point') }}</span>
</div>
</div> </div>
<div class="placement_content_operate_list"> <div class="placement_content_operate_list">
<div class="placement_content_operate_item" @click="changeRemoveStatus"> <div class="placement_content_operate_item" @click="changeRemoveStatus">
<div class="placement_remove_point_block"></div> <div class="placement_remove_point_block"></div>
<div class="placement_content_operate_des">Remove Point</div> <div class="placement_content_operate_des">{{ $t('ModelPlacement.RemovePoint') }}</div>
</div> </div>
</div> </div>
<div class="placement_tip_content">Please change the pure white inside the mannequin for another color to enhance your experience</div> <div class="placement_tip_content">{{ $t('ModelPlacement.mannequinHint') }}</div>
<div class="img_preview_block" > <div class="img_preview_block" >
<div class="perview_mark_loading" v-show="isShowMark"> <div class="perview_mark_loading" v-show="isShowMark">
<a-spin size="large" /> <a-spin size="large" />
</div> </div>
<div class="img_content_block" ref="imgbox"> <div class="img_content_block" ref="imgbox">
<img class="placement_img" :src="perviewUrl || printObject?.url">
<div :class="['ponit_click',isRemoveStatus?'remove_point_click':'']" v-for="(item,index) in locationList" :key="item" :style="{left:item.left+'px', top:item.top+'px',borderColor:item.color}" @touchstart="getMouseDown($event,item,index)" @touchmove="startMove($event)"> <div :style="{width: imgBox.width+'px', height:imgBox.height +'px',top:imgBox.y+'px',left:imgBox.x+'px',position:'absolute'}">
<div class="placement_add_point_content" :style="{background:item.color}" v-show="!isRemoveStatus"></div> <div :class="['ponit_click',isRemoveStatus?'remove_point_click':'']" v-show="!perviewUrl" v-for="(item,index) in locationList" :key="item" :style="{left:item.left+'px', top:item.top+'px',borderColor:item.color}" @touchstart="getMouseDown($event,item,index)" @touchmove="startMove($event)">
<div class="icon iconfont icon-guanbi" v-show="isRemoveStatus"></div> <div class="placement_add_point_content" :style="{background:item.color}" v-show="!isRemoveStatus"></div>
</div> <div class="icon iconfont icon-guanbi" v-show="isRemoveStatus"></div>
</div>
</div>
<vue-cropper
v-show="!perviewUrl"
ref="cropper"
:img="option.img"
:outputSize="option.outputSize"
:outputType="option.outputType"
:info="option.info"
:canScale="option.canScale"
:autoCrop="option.autoCrop"
:fixed="option.fixed"
:fixedNumber="option.fixedNumber"
:full="option.full"
:fixedBox="option.fixedBox"
:canMove="option.canMove"
:canMoveBox="option.canMoveBox"
:original="option.original"
:centerBox="option.centerBox"
:height="option.height"
:infoTrue="option.infoTrue"
:limitMinSize="option.limitMinSize"
:enlarge="option.enlarge"
@real-time="realTime"
:autoCropArea="1"
:autoCropHeight="option.autoCropHeight"
:autoCropWidth="option.autoCropWidth"
:mode="option.mode">
</vue-cropper>
<img class="placement_img" v-show="perviewUrl" :src="perviewUrl || printObject?.url">
</div> </div>
</div> </div>
@@ -71,13 +132,20 @@
</template> </template>
<script lang="ts"> <script lang="ts">
import { defineComponent,ref,createVNode} from 'vue' import { defineComponent,ref,createVNode,nextTick} from 'vue'
import { Https } from "@/tool/https"; import { Https } from "@/tool/https";
import { useStore } from "vuex"; import {dataURLtoFile,base64toFile} from "@/tool/util"
import { getCookie } from "@/tool/cookie"; import { getCookie } from "@/tool/cookie";
import 'vue-cropper/dist/index.css'
import { VueCropper } from "vue-cropper";
import { useStore } from "vuex";
import { Modal,message } from 'ant-design-vue'; import { Modal,message } from 'ant-design-vue';
import { ExclamationCircleOutlined } from '@ant-design/icons-vue'; import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
import { useI18n } from 'vue-i18n';
export default defineComponent({ export default defineComponent({
components:{
VueCropper,
},
setup() { setup() {
const store = useStore() const store = useStore()
let oldLocationList:any = ref([]) let oldLocationList:any = ref([])
@@ -91,6 +159,33 @@ export default defineComponent({
let isSubmit:any = ref(false) //判断历史是否有提交过 let isSubmit:any = ref(false) //判断历史是否有提交过
let manager:any = ref(false) let manager:any = ref(false)
let userInfo:any = ref() let userInfo:any = ref()
let cropperTime:any = ref()
let option:any = ref({
img: '', //裁剪图片的地址
outputSize: 1, //裁剪生成图片的质量(可选0.1 - 1)
outputType: 'png', //裁剪生成图片的格式jpeg || png || webp
info: false, //图片大小信息
canScale: true, //图片是否允许滚轮缩放
autoCrop: true, //是否默认生成截图框
autoCropWidth: '0', //默认生成截图框宽度
autoCropHeight: '0', //默认生成截图框高度
fixed: true, //是否开启截图框宽高固定比例
fixedBox: true, //固定截图框大小,不允许改变
fixedNumber: [1, 2.125], //截图框的宽高比例
full: false, //false按原比例裁切图片不失真
canMove: true, //上传图片是否可以移动
canMoveBox: false, //截图框能否拖动
original: false, //上传图片按照原始比例渲染
centerBox: false, //截图框是否被限制在图片里面
height: true, //是否按照设备的dpr 输出等比例图片
infoTrue: true, //true为展示真实输出图片宽高false展示看到的截图框宽高
maxImgSize:'2000', //限制图片最大宽度和高度
enlarge: 7, //图片根据截图框输出比例倍数
mode: 'auto 90%', //图片默认渲染方式
limitMinSize:'100%'
})
let {t} = useI18n()
return { return {
store, store,
oldLocationList, oldLocationList,
@@ -103,7 +198,11 @@ export default defineComponent({
pointList, pointList,
isSubmit, isSubmit,
manager, manager,
userInfo userInfo,
cropperTime,
option,
t
} }
}, },
data(){ data(){
@@ -120,7 +219,7 @@ export default defineComponent({
sex:'Male', sex:'Male',
sexList: [ sexList: [
] ],
} }
}, },
mounted(){ mounted(){
@@ -128,94 +227,202 @@ export default defineComponent({
this.userInfo = JSON.parse(userInfo); this.userInfo = JSON.parse(userInfo);
this.getSex() this.getSex()
}, },
watch: {
sex:{
handler(newVal:any,oldVal:any){
// let imgbox:any = this.$refs.imgbox
// let imgBoxSizeBG = imgbox?.getElementsByClassName('cropper-view-box-BG')?.[0]
// if(imgBoxSizeBG){
// if(newVal == 'Male'){
// imgBoxSizeBG.style.background = `url(./image/maleBG.png) no-repeat 0 0 / 100% 100%`
// }else{
// imgBoxSizeBG.style.background = `url(./image/femaleBG.png) no-repeat 0 0 / 100% 100%`
// }
// }
},
},
},
methods:{ methods:{
formatter(value:number){ formatter(value:number){
return `${value}%`; return `${value}%`;
}, },
showPlacementModal(data:any){ showPlacementModal(data:any){
this.placementShow = true this.placementShow = true
this.printObject = { this.printObject = {
...data ...data
} }
this.option.img = this.printObject.url
setTimeout(()=>{ setTimeout(()=>{
let imgbox:any = this.$refs.imgbox nextTick().then(()=>{
let position = imgbox.getBoundingClientRect() let image:any = new Image()
this.imgBox = { image.src = this.option.img
width:imgbox.clientWidth, let imgbox:any = this.$refs.imgbox
height:imgbox.scrollHeight, let imgBoxSize = imgbox.getElementsByClassName('cropper-crop-box')[0]
left : position.left, let imgBoxSizeBG = imgbox.getElementsByClassName('cropper-view-box')[0]
top:position.top, let divTop:any = document.createElement('div');
scrollTop:imgbox.scrollTop || 0, let divBottom:any = document.createElement('div');
} let divCenter:any = document.createElement('div');
this.getDefaultPointList(this.imgBox) if(imgbox.getElementsByClassName('cropper-view-box-Bg').length >= 1){
},400) }else{
divTop.classList.add('cropper-view-box-Bg')
divBottom.classList.add('cropper-view-box-Bg')
divCenter.classList.add('cropper-view-box-Bg')
divTop.classList.add('cropper-view-box-Top')
divBottom.classList.add('cropper-view-box-Bottom')
divCenter.classList.add('cropper-view-box-Center')
imgBoxSizeBG.appendChild(divTop)
imgBoxSizeBG.appendChild(divBottom)
imgBoxSizeBG.appendChild(divCenter)
// imgBoxSizeBG.appendChild(div)
}
// imgBoxSize.style.backgroundImage = 'url('+require('@assets/images/library/lemaleBG.png')')'
let cropper:any = this.$refs.cropper
cropper.cropH = cropper.scale*cropper.trueHeight
cropper.cropW = cropper.cropH/2.125
cropper.cropOffsertX = cropper.getImgAxis().x1+(cropper.scale*cropper.trueWidth/2-cropper.cropW/2)
cropper.cropOffsertY = cropper.getImgAxis().y1
imgBoxSize.addEventListener('touchmove',this.startMove)
this.setImageSize()
this.getDefaultPointList(this.imgBox,' ')
})
},800)
}, },
realTime(data:any) {
clearTimeout(this.cropperTime)
this.cropperTime = setTimeout(()=>{
this.setImageSize()
},1000)
},
setImageSize(){
let imgbox:any = this.$refs.imgbox
let imgBoxSize = imgbox.getElementsByClassName('cropper-crop-box')[0]
let position = imgBoxSize.getBoundingClientRect()
let position1 = imgbox.getBoundingClientRect()
let cropper:any = this.$refs.cropper
this.imgBox = {
width:cropper.cropW,
height:cropper.cropH,
left : position.left,
top:position.top,
scrollTop:imgBoxSize.scrollTop || 0,
x:cropper.getCropAxis().x1,
y:cropper.getCropAxis().y1,
}
},
getSex(){ getSex(){
Https.axiosGet(Https.httpUrls.workspaceenumValues,{params:{enumName:'Sex'}}).then((rv: any) => { Https.axiosGet(Https.httpUrls.workspaceenumValues,{params:{enumName:'Sex'}}).then((rv: any) => {
if (rv) { if (rv) {
let arr:any = [] let arr:any = []
rv.forEach((item:any) => { rv.forEach((item:any) => {
let obj = { arr.push({
value:item.name, value:item.name,
label:item.value, label:item.value,
} })
arr.push(obj)
}); });
this.sex = arr[0].value this.sex = arr[0].value
this.sexList = arr this.sexList = arr
console.log(this.sexList);
} }
}) })
}, },
//截屏框移动
setMove(){
},
//初始化可以使用的点位 //初始化可以使用的点位
getDefaultPointList(imgBox:any){ getDefaultPointList(imgBox:any,str:any){
this.isSubmit = false this.isSubmit = false
this.locationList=[]
this.pointList = [ this.pointList = [
{ {
title:'SHOULDER', title:this.t('ModelPlacement.SHOULDER'),
pointList:[{type:'shoulderLeft',color:'#6E70FF',show:true,field:'shoulder'},{type:'shoulderRight',color:'#6E70FF',show:true,field:'shoulder'}] pointList:[{type:'shoulderLeft',color:'#6E70FF',show:true,field:'shoulder'},{type:'shoulderRight',color:'#6E70FF',show:true,field:'shoulder'}]
}, },
{ {
title:'WAISTBAND', title:this.t('ModelPlacement.WAISTBAND'),
pointList:[{type:'waistbandLeft',color:'#6FCEFF',show:true,field:'waistband'},{type:'waistbandRight',color:'#6FCEFF',show:true,field:'waistband'}] pointList:[{type:'waistbandLeft',color:'#6FCEFF',show:true,field:'waistband'},{type:'waistbandRight',color:'#6FCEFF',show:true,field:'waistband'}]
}, },
{ {
title:'HAND', title:this.t('ModelPlacement.HAND'),
pointList:[{type:'handLeft',color:'#CCFF7B',show:true,field:'hand'},{type:'handRight',color:'#CCFF7B',show:true,field:'hand'}] pointList:[{type:'handLeft',color:'#d88e8e',show:true,field:'hand'},{type:'handRight',color:'#d88e8e',show:true,field:'hand'}]
}, },
] ]
if(this.printObject.templateId){//编辑 for(let ponit of this.pointList){
for(let pointItem of ponit.pointList){
if(this.printObject[pointItem.type]?.length){
pointItem.show = false
let data = {
left:this.printObject[pointItem.type][0] * imgBox.width - 12,
top:this.printObject[pointItem.type][1] * imgBox.height - 12,
color:pointItem.color,
type:pointItem.type,
field:pointItem.field,
}
this.locationList.push(data)
}
}
}
if(str != 'setPoint'){//编辑
this.isSubmit = true this.isSubmit = true
for(let ponit of this.pointList){ // this.option.canScale = false
for(let pointItem of ponit.pointList){ // this.option.canMove = false
if(this.printObject[pointItem.type]?.length){
pointItem.show = false
let data = {
left:this.printObject[pointItem.type][0] * imgBox.width - 12,
top:this.printObject[pointItem.type][1] * imgBox.height - 12,
color:pointItem.color,
type:pointItem.type,
field:pointItem.field,
}
this.locationList.push(data)
}
}
}
this.oldLocationList = JSON.parse(JSON.stringify(this.locationList))
}
this.oldPointList = JSON.parse(JSON.stringify(this.pointList)) this.oldLocationList = JSON.parse(JSON.stringify(this.locationList))
this.oldPointList = JSON.parse(JSON.stringify(this.pointList))
}else{
this.option.canScale = true
// this.option.fixedBox = false
this.option.canMove = true
// this.option.canMoveBox = true
}
}, },
setPoint(){
let file = this.printObject.file
let url = this.printObject.url
this.printObject = {
"shoulderLeft": [
0.3338,
0.1858
],
"shoulderRight": [
0.6644,
0.1858
],
"waistbandLeft": [
0.3758,
0.364
],
"waistbandRight": [
0.6103,
0.364
],
"handLeft": [
0.3277,
0.4687
],
"handRight": [
0.6764,
0.4715
],
file:file,
url:url
}
this.getDefaultPointList(this.imgBox,'setPoint')
},
AddDian(point:any){ AddDian(point:any){
if(!point.show){ if(!point.show){
return return
} }
this.startDian = true this.startDian = true
this.isRemoveStatus = false this.isRemoveStatus = false
this.intObj = point this.intObj = point
}, },
@@ -225,14 +432,14 @@ export default defineComponent({
}, },
startMove(event:any){ startMove(event:any){
if(this.isRemoveStatus){ if(this.isRemoveStatus){
return return
} }
let imgbox:any = this.$refs.imgbox let imgbox:any = this.$refs.imgbox
let scrollTop = imgbox.scrollTop; let scrollTop = imgbox.scrollTop;
if(event.targetTouches[0].pageX > this.imgBox.left){ if(event.targetTouches[0].pageX > this.imgBox.left){
if(this.intObj){ if(this.intObj){
this.currentSign.left = event.targetTouches[0].pageX - this.imgBox.left this.currentSign.left = event.targetTouches[0].pageX - this.imgBox.left
this.currentSign.top = event.targetTouches[0].pageY + scrollTop - this.imgBox.top this.currentSign.top = event.targetTouches[0].pageY + scrollTop - this.imgBox.top
this.currentSign.color = this.intObj.color this.currentSign.color = this.intObj.color
this.currentSign.type= this.intObj.type this.currentSign.type= this.intObj.type
@@ -242,8 +449,8 @@ export default defineComponent({
this.intObj = null this.intObj = null
}else{ }else{
if(this.startDian){ if(this.startDian){
this.currentSign.left = event.targetTouches[0].pageX - this.imgBox.left - this.moveOriginal.posX this.currentSign.left = event.targetTouches[0].pageX - this.imgBox.left -12
this.currentSign.top = event.targetTouches[0].pageY + scrollTop - this.imgBox.top -this.moveOriginal.posY this.currentSign.top = event.targetTouches[0].pageY + scrollTop - this.imgBox.top -12
document.addEventListener('touchend', this.getMouseOver); document.addEventListener('touchend', this.getMouseOver);
this.$forceUpdate() this.$forceUpdate()
this.setBoundarySign() this.setBoundarySign()
@@ -257,27 +464,32 @@ export default defineComponent({
// 在边界上的签名域处理 // 在边界上的签名域处理
setBoundarySign() { setBoundarySign() {
let imgbox:any = this.$refs.imgbox let imgbox:any = this.$refs.imgbox
let height = imgbox.offsetHeight + imgbox.scrollTop; let imgBoxSize = imgbox.getElementsByClassName('cropper-crop-box')[0]
let top = (this.$refs.cropper as any).getCropAxis().y1
let left = (this.$refs.cropper as any).getCropAxis().x1
let height = imgBoxSize.offsetHeight;
// let height = imgBoxSize.offsetHeight + imgBoxSize.scrollTop;
// 2 为签名域的边框 // 2 为签名域的边框
let maxPosHeight = height - 24 let maxPosHeight = height - 24
let maxPosWidth = imgbox.clientWidth - 24 //+ this.signBox.paddLeft; let maxPosWidth = imgBoxSize.clientWidth - 24 //+ this.signBox.paddLeft;
if (this.currentSign.top <= 0) { if (this.currentSign.top+top <= 0) {
this.currentSign.top = 0 this.currentSign.top = 0
} else if (this.currentSign.top >= maxPosHeight ) { } else if (this.currentSign.top >= maxPosHeight+top ) {
this.currentSign.top = maxPosHeight; this.currentSign.top = maxPosHeight+top;
} }
if (this.currentSign.left <= 0) { if (this.currentSign.left+left <= 0) {
this.currentSign.left = 0 this.currentSign.left = 0
} else if (this.currentSign.left >= maxPosWidth) { } else if (this.currentSign.left >= maxPosWidth+left) {
this.currentSign.left = maxPosWidth; this.currentSign.left = maxPosWidth+left;
} }
}, },
getMouseDown(event:any,item:any,index:number){ getMouseDown(event:any,item:any,index:number){
if(this.isRemoveStatus){ if(this.isRemoveStatus){
//删除
for(let itemPoint of this.pointList){ for(let itemPoint of this.pointList){
for(let point of itemPoint.pointList){ for(let point of itemPoint.pointList){
if(item.id == point.id){ if(item.type == point.type){
point.show = true point.show = true
break break
} }
@@ -287,14 +499,16 @@ export default defineComponent({
}else{ }else{
this.currentSign = item this.currentSign = item
// 计算出鼠标在签名域上的偏移 // 计算出鼠标在签名域上的偏移
this.moveOriginal.posX = event.targetTouches[0].pageX - this.imgBox.left - this.currentSign.left // this.moveOriginal.posX = event.offsetX
// this.moveOriginal.posY = event.offsetY // 1为边框
this.moveOriginal.posX = event.targetTouches[0].pageX - this.imgBox.left - this.currentSign.left
this.moveOriginal.posY = event.targetTouches[0].pageY - this.imgBox.top- this.currentSign.top // 1为边框 this.moveOriginal.posY = event.targetTouches[0].pageY - this.imgBox.top- this.currentSign.top // 1为边框
this.startDian = true this.startDian = true
} }
}, },
getMouseOver(){ getMouseOver(){//鼠标抬起
this.startDian = false this.startDian = false
this.currentSign = {} this.currentSign = {}
document.removeEventListener('touchend', this.getMouseOver); document.removeEventListener('touchend', this.getMouseOver);
@@ -304,7 +518,7 @@ export default defineComponent({
let _this = this let _this = this
if(!this.isSubmit){ if(!this.isSubmit){
Modal.confirm({ Modal.confirm({
title: "You haven't marked the image yet, and the model will not be uploaded. Are you sure you want to close it?", title: this.t('ModelPlacement.jsContent1'),
icon: createVNode(ExclamationCircleOutlined), icon: createVNode(ExclamationCircleOutlined),
okText: 'Yes', okText: 'Yes',
cancelText: 'No', cancelText: 'No',
@@ -318,6 +532,7 @@ export default defineComponent({
_this.currentSign = {} _this.currentSign = {}
_this.isRemoveStatus = false _this.isRemoveStatus = false
_this.placementShow = false _this.placementShow = false
_this.perviewUrl = ''
} }
}); });
}else{ }else{
@@ -328,31 +543,65 @@ export default defineComponent({
_this.currentSign = {} _this.currentSign = {}
_this.isRemoveStatus = false _this.isRemoveStatus = false
_this.placementShow = false _this.placementShow = false
_this.perviewUrl = ''
} }
}, },
restoreLocationList(){ restoreLocationList(){
this.locationList = []
this.pointList = JSON.parse(JSON.stringify(this.oldPointList)) this.pointList = JSON.parse(JSON.stringify(this.oldPointList))
this.locationList = JSON.parse(JSON.stringify(this.oldLocationList)) this.locationList = JSON.parse(JSON.stringify(this.oldLocationList))
}, },
submitPlacement(){ submitPlacement(){
if(this.printObject.templateId){ // let cropper:any = this.$refs.cropper,
this.printObject.id = this.printObject.libraryId // that = this
this.confrimSubmit()
}else{ // cropper.getCropData((data:any) => {
this.customRequest().then((rv:any)=>{ // // 转换为File对象
this.isShowMark = false // let file = base64toFile(data,this.cropperFileData.name);
this.printObject.id = rv.id // this.$emit('handleCropperSuccess',{file:file, fileData:this.cropperFileData})
this.confrimSubmit() // })
}).catch((res:any)=>{ let cropper:any = this.$refs.cropper,
this.isShowMark = false that = this
}) if(this.modelType == 'System' && this.userInfo.userId == 88 || this.userInfo.userId == 83){
} if(this.printObject.templateId){
this.printObject.id = this.printObject.relationId
this.confrimSubmit()
}else{
this.customRequest().then((rv:any)=>{
this.isShowMark = false
this.printObject.id = rv.id
this.confrimSubmit()
}).catch((res:any)=>{
this.isShowMark = false
})
}
}else{
cropper.getCropData(async (value:any) => {
// 转换为File对象
if(this.printObject.templateId){
this.printObject.id = this.printObject.relationId
this.confrimSubmit()
}else{
let file:any = base64toFile(value,this.printObject.file.name);
file.uid = this.printObject.file.uid
this.printObject.file = file
this.customRequest().then((rv:any)=>{
this.isShowMark = false
this.printObject.id = rv.id
this.confrimSubmit()
}).catch((res:any)=>{
this.isShowMark = false
})
}
})
}
}, },
confrimSubmit(){ confrimSubmit(){
let param = { let param = {
libraryId:this.printObject.id, libraryId:this.printObject.id,
templateId:this.printObject.templateId || null, templateId:this.printObject.templateId || null,
@@ -364,6 +613,7 @@ export default defineComponent({
if(this.userInfo.userId == 88 || this.userInfo.userId == 83){ if(this.userInfo.userId == 88 || this.userInfo.userId == 83){
param.modelType = this.modelType param.modelType = this.modelType
} }
this.isShowMark = true this.isShowMark = true
Https.axiosPost(Https.httpUrls.saveOrEditTemplatePoint, param).then( Https.axiosPost(Https.httpUrls.saveOrEditTemplatePoint, param).then(
(rv: any) => { (rv: any) => {
@@ -380,22 +630,21 @@ export default defineComponent({
customRequest(){ customRequest(){
let new_data = { let new_data = {
file:this.printObject.file, file:this.printObject.file,
checkMd5:1,
level1Type:'Models', level1Type:'Models',
sex:this.sex,
modelType:'',
level2Type:'', level2Type:'',
checkMd5:1,
sex:this.sex,
modelType:'Library',
timeZone:Intl.DateTimeFormat().resolvedOptions().timeZone, timeZone:Intl.DateTimeFormat().resolvedOptions().timeZone,
} }
this.isShowMark = true
if(this.userInfo.userId == 88 || this.userInfo.userId == 83){ if(this.userInfo.userId == 88 || this.userInfo.userId == 83){
new_data.modelType = this.modelType new_data.modelType = this.modelType
new_data.sex = this.sex new_data.sex = this.sex
} }
this.isShowMark = true
return new Promise((resolve,reject)=>{ return new Promise((resolve,reject)=>{
Https.axiosPost(Https.httpUrls.libraryUpload, new_data,{headers:{'Content-Type': 'multipart/form-data'}}).then( Https.axiosPost(Https.httpUrls.libraryUpload, new_data,{headers:{'Content-Type': 'multipart/form-data'}}).then(
(rv: any) => { (rv: any) => {
// resolve(rv)
if(!rv.checkMd5){ if(!rv.checkMd5){
resolve(this.affirmCstomRequest(new_data)) resolve(this.affirmCstomRequest(new_data))
}else{ }else{
@@ -406,12 +655,13 @@ export default defineComponent({
reject(res) reject(res)
}); });
}) })
}, },
affirmCstomRequest(data:any){ affirmCstomRequest(data:any){
let _this = this let _this = this
return new Promise((resolve,reject)=>{ return new Promise((resolve,reject)=>{
Modal.confirm({ Modal.confirm({
title: 'This picture has been uploaded whether to continue uploading ', title: this.t('ModelPlacement.jsContent2'),
icon: createVNode(ExclamationCircleOutlined), icon: createVNode(ExclamationCircleOutlined),
okText: 'Yes', okText: 'Yes',
cancelText: 'No', cancelText: 'No',
@@ -434,7 +684,6 @@ export default defineComponent({
}); });
}) })
}, },
getPrintLocation(){ getPrintLocation(){
let {width , height} = this.imgBox let {width , height} = this.imgBox
let locationData:any = {} let locationData:any = {}
@@ -464,31 +713,28 @@ export default defineComponent({
}, },
printPreview(){ printPreview(){
// this.printObject.scale = this.placement_sacle / 100 let file = this.printObject.templateId ? null :this.printObject.file,
// this.printObject.location = this.printObject.ifSingle ? this.getPrintLocation() : [] models = {
// let designItemDetail = JSON.parse(JSON.stringify(this.store.state.DesignDetailModule.designItemDetail)) libraryId:this.printObject.libraryId || null,
// designItemDetail.clothes[this.collectionIndex] = this.clothesData templateId:this.printObject.templateId || null,
// delete designItemDetail.designItemUrl timeZone:Intl.DateTimeFormat().resolvedOptions().timeZone,
// let priority = designItemDetail.clothes.map((v:any)=>{ ...this.getPrintLocation()
// return v.type }
// }) let formData = new FormData();
// let data = { formData.append('file', file);
// ...designItemDetail, formData.append("models", new Blob([JSON.stringify(models)], {type: "application/json"}));
// priority:priority, if(this.isShowMark){
// timeZone:Intl.DateTimeFormat().resolvedOptions().timeZone, return
// } }
// if(this.isShowMark){ this.isShowMark = true
// return Https.axiosPost(Https.httpUrls.libraryModelsDot, formData,{headers:{'Content-Type': 'multipart/form-data'}}).then(
// } (rv: any) => {
// this.isShowMark = true this.perviewUrl = rv
// Https.axiosPost(Https.httpUrls.detailPrintDot, data).then( this.isShowMark = false
// (rv: any) => { }
// this.perviewUrl = rv ).catch(res=>{
// this.isShowMark = false this.isShowMark = false
// } });
// ).catch(res=>{
// this.isShowMark = false
// });
}, },
backPreview(){ backPreview(){
@@ -498,7 +744,7 @@ export default defineComponent({
}) })
</script> </script>
<style lang="less"> <style lang="less">
.models_placement_mobile_component{ .models_placement_component{
.ant-modal-close{ .ant-modal-close{
width: 3.6rem; width: 3.6rem;
@@ -596,7 +842,39 @@ export default defineComponent({
left: 0; left: 0;
top:18.4rem; top:18.4rem;
padding: 3rem 2.7rem 0 1.4rem; padding: 3rem 2.7rem 0 1.4rem;
.select_block{
// background: #FFFFFF;
overflow: hidden;
margin-bottom: 3rem;
color: #1A1A1A !important;
.ant-select{
width: 100%;
.ant-select-selector{
padding: 0;
width: 100%;
margin: 0;
background: rgba(0, 0, 0, 0);
font-size: 1.3rem;
color: #64686D;
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
height: 3rem;
.ant-select-selection-item, .select_block .ant-select-single .ant-select-selector .ant-select-selection-placeholder{
font-weight: 300 !important;
line-height: 1.5715 !important;
width: 100%;
display: block;
position: relative;
padding: 0;
}
}
}
.icon-xiala{
color: #1A1A1A !important;
}
}
.placement_point_item{ .placement_point_item{
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
@@ -639,6 +917,13 @@ export default defineComponent({
} }
} }
} }
&.placement_point_item_btn{
display: flex;
justify-content: center;
.started_btn{
}
}
} }
} }
@@ -709,7 +994,7 @@ export default defineComponent({
user-select:none; user-select:none;
-moz-user-select:none; -moz-user-select:none;
position: relative; position: relative;
height: 57.6rem;
.img_content_block{ .img_content_block{
width: 40.8rem; width: 40.8rem;
height: 100%; height: 100%;
@@ -720,6 +1005,34 @@ export default defineComponent({
position: relative; position: relative;
&::-webkit-scrollbar { width: 0 !important } &::-webkit-scrollbar { width: 0 !important }
.cropper-view-box-Bg{
width: 100%;
position: absolute;
}
.cropper-view-box-Top{
// border-top: 1px dashed;
/*虚线2 css*/
background: linear-gradient(to left,transparent 0%,transparent 50%,#646464 50%,#646464 100%);background-size: 10px 1px;background-repeat: repeat-x;
height: 1rem;
opacity: .4;
top: 6%;
}
.cropper-view-box-Bottom{
bottom: 6%;
// border-top: 1px dashed;
height: 1rem;
opacity: .4;
background: linear-gradient(to left,transparent 0%,transparent 50%,#646464 50%,#646464 100%);background-size: 10px 1px;background-repeat: repeat-x;
}
.cropper-view-box-Center{
// border-left: 1px dashed;
left: 50%;
opacity: .4;
background: linear-gradient(to bottom,transparent 0%,transparent 50%,#646464 50%,#646464 100%);background-size: 1px 10px;background-repeat: repeat-y;
top: 0;
width: 1rem;
height: 100%;
}
} }
.perview_mark_loading{ .perview_mark_loading{
@@ -755,7 +1068,7 @@ export default defineComponent({
-o-user-select:none; /* Opera私有属性 */ -o-user-select:none; /* Opera私有属性 */
user-select:none; /* CSS3属性 */ user-select:none; /* CSS3属性 */
cursor: pointer; cursor: pointer;
z-index: 22;
&.remove_point_click{ &.remove_point_click{
border-color: transparent; border-color: transparent;
background: #EF3C3C; background: #EF3C3C;

View File

@@ -5,6 +5,7 @@
title="Edit tag" title="Edit tag"
width="65%" width="65%"
:maskClosable="false" :maskClosable="false"
:keyboard="false"
:centered="true" :centered="true"
@cancel="clearSetLabel" @cancel="clearSetLabel"
> >

View File

@@ -11,7 +11,7 @@ let data = {
} }
const driverObj__ = driver({ const driverObj__ = driver({
steps: [ steps: [
{ element: '#Guide_1_1', popover: { title: 'Title', description: 'Description' } }, { element: '.Guide_1_1', popover: { title: 'Title', description: 'Description' } },
{ element: '.Guide_1_2', popover: { title: 'Title', description: 'Description' } }, { element: '.Guide_1_2', popover: { title: 'Title', description: 'Description' } },
{ element: '.Guide_1_2', popover: { title: 'Title', description: 'Description' } }, { element: '.Guide_1_2', popover: { title: 'Title', description: 'Description' } },
{ element: '.Guide_1_4', popover: { title: 'Title', description: 'Description' } }, { element: '.Guide_1_4', popover: { title: 'Title', description: 'Description' } },
@@ -31,8 +31,18 @@ const driverObj__ = driver({
{ element: '.Guide_1_17', popover: { title: 'Title', description: 'Description' } }, { element: '.Guide_1_17', popover: { title: 'Title', description: 'Description' } },
{ element: '.Guide_1_18', popover: { title: 'Title', description: 'Description' } }, { element: '.Guide_1_18', popover: { title: 'Title', description: 'Description' } },
{ element: '.Guide_1_19', popover: { title: 'Title', description: 'Description' } }, { element: '.Guide_1_19', popover: { title: 'Title', description: 'Description' } },
// { element: '.Guide_1_20', popover: { title: 'Title', description: 'Description' } }, { element: '.Guide_1_20', popover: { title: 'Title', description: 'Description' } },
{ element: '.Guide_1_21', popover: { title: 'Title', description: 'Description' } },
{ element: '.Guide_1_22', popover: { title: 'Title', description: 'Description' } },
{ element: '.Guide_1_23', popover: { title: 'Title', description: 'Description' } },
{ element: '.Guide_1_24', popover: { title: 'Title', description: 'Description' } },
{ element: '.Guide_1_25', popover: { title: 'Title', description: 'Description' } },
{ element: '.Guide_1_26', popover: { title: 'Title', description: 'Description' } },
{ element: '.Guide_1_27', popover: { title: 'Title', description: 'Description' } },
{ element: '.Guide_1_28', popover: { title: 'Title', description: 'Description' } },
{ element: '.Guide_1_29', popover: { title: 'Title', description: 'Description' } },
{ element: '.Guide_1_30', popover: { title: 'Title', description: 'Description' } },
{ element: '.Guide_1_16', popover: { title: 'Title', description: 'Description' } },
], ],
// showProgress: true,//控制总页数和当前页数是否显示 // showProgress: true,//控制总页数和当前页数是否显示
allowClose:false, allowClose:false,
@@ -42,26 +52,34 @@ const driverObj__ = driver({
allowKeyboardControl:true,//控制是否可以键盘控制下一步 allowKeyboardControl:true,//控制是否可以键盘控制下一步
disableActiveInteraction:false,//是否禁用显示元素的交互 disableActiveInteraction:false,//是否禁用显示元素的交互
overlayOpacity:.4, overlayOpacity:.4,
allowKeyboardControl:false,
overlay: true, overlay: true,
onPopoverRender: (popover, options) => {//每个步骤的元素和所有信息 onPopoverRender: (popover, options) => {//每个步骤的元素和所有信息
console.log(popover,options); // console.log(popover,options);
if(element){ if(element){
element.classList.remove('Guide_') element.classList.remove('Guide_')
} }
popover.previousButton.style.display = 'none' popover.previousButton.style.display = 'none'
let driver = document.getElementsByClassName('driver-active')[0]
if( if(
options.state.activeIndex >= 1 && options.state.activeIndex <= 2 || options.state.activeIndex >= 1 && options.state.activeIndex <= 2 ||
options.state.activeIndex >= 18 && options.state.activeIndex <= 19 options.state.activeIndex >= 18 && options.state.activeIndex < 19 ||
options.state.activeIndex >= 24 && options.state.activeIndex < 25
){ ){
popover.footer.style.display = 'block' popover.footer.style.display = 'block'
driver.classList.add('showEvents')
addDiv(options.state.activeElement) addDiv(options.state.activeElement)
}else{ }else{
popover.footer.style.display = 'none' popover.footer.style.display = 'none'
removeDiv(options.state.activeElement) removeDiv(options.state.activeElement)
driver.classList.remove('showEvents')
} }
// console.log(options.state.activeIndex); // console.log(options.state.activeIndex);
driverIndex__ = driverObj__.getState().activeIndex driverIndex__ = driverObj__.getState().activeIndex
data.index = driverIndex__ data = {
index : driverIndex__,
driver : true,
}
store?.commit("setGuide", data); store?.commit("setGuide", data);
element = options.state.activeElement element = options.state.activeElement
element.classList.add('Guide_') element.classList.add('Guide_')
@@ -69,7 +87,7 @@ const driverObj__ = driver({
}, },
//销毁前 //销毁前
onDestroyStarted:()=>{ onDestroyStarted:()=>{
// data.driver = false data.driver = false
store?.commit("setGuide", data); store?.commit("setGuide", data);
driverObj__.destroy();//销毁方法 driverObj__.destroy();//销毁方法
}, },
@@ -119,12 +137,12 @@ function removeDiv(element){
} }
} }
const openGuide = () =>{ const openGuide = () =>{
// driverObj__.drive(); driverObj__.drive();
store = useStore() store = useStore()
// driverObj__.moveTo(18); // driverObj__.moveTo(18);
let data = { let data = {
index:driverIndex__, index:driverIndex__,
// driver:true, driver:true,
} }
store?.commit("setGuide", data); store?.commit("setGuide", data);
// driverObj__.moveNext(); // driverObj__.moveNext();

View File

@@ -50,6 +50,7 @@
v-model:visible="renameVisivle" v-model:visible="renameVisivle"
:footer="null" :footer="null"
:title="renameData?.name" :title="renameData?.name"
:keyboard="false"
width="56rem" width="56rem"
:maskClosable="false" :maskClosable="false"
:centered="true" :centered="true"

View File

@@ -1,5 +1,5 @@
<template> <template>
<div class="home_page .Guide_1_16"> <div class="home_page Guide_1_16">
<HeaderComponent></HeaderComponent> <HeaderComponent></HeaderComponent>
<div class="page_content"> <div class="page_content">
<!-- <img class="page_content_bg" src="@/assets/images/homePage/bg.png" /> --> <!-- <img class="page_content_bg" src="@/assets/images/homePage/bg.png" /> -->
@@ -14,7 +14,7 @@
class="home_null_icon" class="home_null_icon"
src="@/assets/images/homePage/null_img.png" src="@/assets/images/homePage/null_img.png"
/> --> /> -->
<div id="Guide_1_1" class="new_collection_button" @click="startNewCollection()"> <div id="Guide_1_1" class="new_collection_button Guide_1_1" @click="startNewCollection()">
{{ $t('HomeView.GetStarted') }} {{ $t('HomeView.GetStarted') }}
</div> </div>
</div> </div>
@@ -52,7 +52,7 @@
<div class="button_second Guide_1_15" @click="designNewCollection()"> <div class="button_second Guide_1_15" @click="designNewCollection()">
{{ $t('HomeView.Design') }} {{ $t('HomeView.Design') }}
</div> </div>
<div class="button_first button_margin_14" v-show="designCollectionId" <div class="button_first button_margin_14 Guide_1_30" v-show="designCollectionId"
@click="resDesignCollection()"> @click="resDesignCollection()">
{{ $t('HomeView.Redesign') }} {{ $t('HomeView.Redesign') }}
</div> </div>
@@ -69,7 +69,7 @@
</div> </div>
<div class="right_content_body"> <div class="right_content_body">
<div class="right_content_img_block scroll_style Guide_1_17" v-mousewheel :class="{active:designCollectionList.length != 0}"> <div class="right_content_img_block scroll_style Guide_1_17" v-mousewheel :class="[designCollectionList.length != 0?'active':'',driver__.driver?'showEvents':'']">
<div class="right_content_img_item"> <div class="right_content_img_item">
<!-- <draggable <!-- <draggable
group="people" > --> group="people" > -->

View File

@@ -315,6 +315,7 @@
:footer="null" :footer="null"
title="Rename Pic" title="Rename Pic"
width="65%" width="65%"
:keyboard="false"
:maskClosable="false" :maskClosable="false"
:centered="true" :centered="true"
@onCancel="closeRenameModal" @onCancel="closeRenameModal"
@@ -350,7 +351,7 @@
</a-modal> </a-modal>
<ModelPlacement ref="ModelPlacement" @submitModelPlacement="getLibraryList"></ModelPlacement> <ModelPlacement ref="ModelPlacement" @submitModelPlacement="getLibraryList"></ModelPlacement>
<ModelPlacementMobile ref="ModelPlacementMobile"></ModelPlacementMobile> <ModelPlacementMobile ref="ModelPlacementMobile" @submitModelPlacement="getLibraryList"></ModelPlacementMobile>
<setLabel ref="setLabel"></setLabel> <setLabel ref="setLabel"></setLabel>
<!-- 蒙层 start--> <!-- 蒙层 start-->
<div class="mark_loading" v-show="isShowMark"> <div class="mark_loading" v-show="isShowMark">
@@ -1021,6 +1022,8 @@ export default defineComponent({
//给模特打点编辑 //给模特打点编辑
placementClick(data:any){ placementClick(data:any){
let placementModal:any = isMoible() ? this.$refs.ModelPlacementMobile : this.$refs.ModelPlacement let placementModal:any = isMoible() ? this.$refs.ModelPlacementMobile : this.$refs.ModelPlacement
console.log(isMoible());
placementModal.showPlacementModal(data) placementModal.showPlacementModal(data)
}, },
//generate //generate
@@ -1297,10 +1300,10 @@ export default defineComponent({
display: flex; display: flex;
padding-top: 2rem; padding-top: 2rem;
.library_body_left{ .library_body_left{
width: 23.5rem; width: 26.5rem;
height: 100%; height: 100%;
background: rgba(255,255,255,0.4); background: rgba(255,255,255,0.4);
margin-right: 8rem; margin-right: 5rem;
>div{ >div{
background: #f7f8fa; background: #f7f8fa;
border-radius: 2rem; border-radius: 2rem;
@@ -1318,7 +1321,8 @@ export default defineComponent({
justify-content: space-between; justify-content: space-between;
padding: 0 1rem 0 2.5rem; padding: 0 1rem 0 2.5rem;
border-left: 0.5rem solid transparent; border-left: 0.5rem solid transparent;
font-size: 1.6rem; // font-size: 1.6rem;
font-size: var(--aida-fsize2);
color: #030303; color: #030303;
cursor: pointer; cursor: pointer;
transition: all .3s; transition: all .3s;
@@ -1365,7 +1369,7 @@ export default defineComponent({
.header_operate_item{ .header_operate_item{
margin-right: 5rem; margin-right: 5rem;
color: #C2C2C2; color: #C2C2C2;
font-size: 1.6rem; font-size: var(--aida-fsize1-8);
.ant-upload{ .ant-upload{
// font-size: 1.6rem; // font-size: 1.6rem;
// font-weight: 900; // font-weight: 900;