Files
aida_front/src/component/home/design/index.vue

2353 lines
69 KiB
Vue
Raw Normal View History

2025-05-20 16:47:27 +08:00
<template>
<div class="designPage">
<div class="page_content">
<div class="page_content_body">
<div class="designPage_body">
<div class="designPage_left" ref="hidden">
<div class="designPage_left_content" :class="{'active':(domHidden)}">
<!-- 有图状态 start-->
<div class="home_left_info">
<div class="left_info_content scroll_style">
<div class="left_info_content_body" ref="collection_canvas">
<div class="right_content_header">
<div class="content_header_left" style="padding-top: 2rem;">
<i class="fi fi-rs-comments"></i><span class="content_header_des">
{{ $t('HomeView.elementTitle') }}
</span>
</div>
</div>
2025-05-22 14:26:47 +08:00
<NewCollectionReview id="collectionReview" @openCollection="openCollection"></NewCollectionReview>
2025-05-20 16:47:27 +08:00
</div>
</div>
<div v-show="isMannequinShow" class="left_info_hint">
<span class="icon iconfont icon-zhuyi"></span>
<span>{{ $t('HomeView.masnnequinHint') }}</span>
</div>
</div>
<!-- 有图状态 end-->
</div>
<div class="designPage_left_bottom" @click="setShowHide('domHidden')" >
<span class="icon iconfont icon-xiala" :class="{'active':domHidden}"></span>
</div>
</div>
<div class="designPage_right">
<div class="right_top">
<!-- <div class="right_top" ref="hidden" :class="{'active':domHidden}"> -->
<div class="right_top_left">
<div class="gallery_btn white Guide_1_15" @click="designNewCollection()">
<!-- <div class="gallery_btn white Guide_1_15" @click="designNewCollection()"> -->
{{ $t('HomeView.Design') }}
</div>
<!-- <div class="gallery_btn white button_margin_14 Guide_1_30" v-show="designCollectionId"
@click="resDesignCollection()">
{{ $t('HomeView.Redesign') }}
</div> -->
<div class="silder button_margin_14" v-show="likeDesignCollectionList?.length > 0">
2025-06-03 14:57:18 +08:00
</div>
</div>
<div class="right_top_right">
2025-06-09 10:25:54 +08:00
2025-05-20 16:47:27 +08:00
</div>
</div>
<div class="right_content_block_box">
2025-06-09 10:25:54 +08:00
<div class="right_content_block" ref="rightContentBlockBox" @mouseenter="mouseenter($event,'like')">
2025-05-20 16:47:27 +08:00
<div class="right_content_body">
<div class="right_content_header">
<div class="content_header_left">
<i class="fi fi-rs-comments"></i><span class="content_header_des">
{{ $t('HomeView.SelectedDesign') }}
</span>
</div>
2025-06-18 11:05:23 +08:00
<div class="generalModel_state" v-show="domHidden || !recycleDomHidden">
<div v-show="isUnfold" class="generalModel_state_item smail" style="margin-right: 1rem;">
2025-06-09 10:25:54 +08:00
<span>Type :</span>
<a-select
2025-06-18 11:05:23 +08:00
v-model:value="resultType"
2025-06-09 10:25:54 +08:00
size="large"
style="width: 15rem"
placeholder="Please select"
2025-06-18 11:05:23 +08:00
:options="resultTypeList"
@change="changeResultType"
2025-06-09 10:25:54 +08:00
>
</a-select>
2025-06-18 11:05:23 +08:00
</div>
2025-06-19 09:21:32 +08:00
<div class="generalModel_state_item smail" style="margin-right: 1rem;">
2025-06-18 11:05:23 +08:00
<span>Unfold :</span>
<a-switch v-model:checked="isUnfold" @change="setUnfold" />
</div>
2025-06-09 10:25:54 +08:00
<div class="generalModel_state_item smail" style="margin-right: 0;">
<span>Size :</span>
<a-select
v-model:value="widthValue.value"
size="large"
style="width: 15rem"
placeholder="Please select"
:options="widthList"
@change="setSystemDesigner(500)"
>
</a-select>
</div>
</div>
2025-05-20 16:47:27 +08:00
</div>
<div class="right_content_img_block scroll_style active">
<div class="right_content_img_item" ref="likeItemDom" designType="like" :index="0">
2025-06-18 11:05:23 +08:00
<!-- likeDesignCollectionList -->
2025-05-20 16:47:27 +08:00
<div class="content_img_block content_img_GetWidth active" :style="likeStyle"
2025-06-18 11:05:23 +08:00
v-for="(design, index) in selectLikeDesign" :key="design.id || design.designItemId">
2025-06-09 10:25:54 +08:00
<div class="content_img_flex"
2025-06-18 11:05:23 +08:00
:class="[design.resultType]"
@mouseenter="startHover(getMousePosition($event,false),design)"
@mouseleave="endHover(getMousePosition($event,false),design)"
@mousedown.stop="designMousedown(getMousePosition($event,false),design,'like')"
@touchstart.passive="designMousedown(getMousePosition($event,true),design,'like')"
2025-05-20 16:47:27 +08:00
@click="designDetail(
design,
index,
2025-06-18 11:05:23 +08:00
selectLikeDesign,
2025-05-20 16:47:27 +08:00
'like'
)">
2025-06-11 15:08:17 +08:00
<img class="content_img"
v-if="design.resultType == 'PoseTransfer'"
:src="design.firstFrameUrl" alt=""
@mouseenter.stop="gifPlay($event,design)"
@mouseleave.stop="gifPause($event,design)" >
2025-06-09 10:25:54 +08:00
<img class="content_img" v-show="!design?.generateAwait" :src="design.designOutfitUrl||design.url"
2025-05-20 16:47:27 +08:00
:key="design.designOutfitUrl" designType="like" :index="index"/>
2025-06-09 10:25:54 +08:00
<a-spin v-show="design?.generateAwait" size="large"></a-spin>
2025-06-18 11:05:23 +08:00
<!-- <div class="content_img_block_child" @click.stop>
<div class="content_img_block content_img_GetWidth active childItem"
:style="likeStyle"
v-for="childItem,childIndex in design.childList"
>
<div class="content_img_flex">
<img class="content_img" v-show="!design?.generateAwait" :src="childItem.designOutfitUrl||childItem.url" alt="">
<a-spin v-show="design?.generateAwait" size="large"></a-spin>
</div>
<div class="btn" v-show="!childItem?.generateAwait">
<i @click.stop="openEditBtn(childItem,childIndex,$event)" class="fi fi-br-menu-dots-vertical"></i>
2025-06-03 14:57:18 +08:00
</div>
</div>
2025-06-18 11:05:23 +08:00
<div class="content_img_block content_img_GetWidth active childItem"
:style="likeStyle"
v-for="childItem,childIndex in design.childList"
>
<div class="content_img_flex">
<img class="content_img" v-show="!design?.generateAwait" :src="childItem.designOutfitUrl||childItem.url" alt="">
<a-spin v-show="design?.generateAwait" size="large"></a-spin>
</div>
<div class="btn" v-show="!childItem?.generateAwait">
<i @click.stop="openEditBtn(childItem,childIndex,$event)" class="fi fi-br-menu-dots-vertical"></i>
</div>
2025-06-03 14:57:18 +08:00
</div>
2025-06-18 11:05:23 +08:00
</div> -->
</div>
<div class="btn" v-show="!design?.generateAwait">
<i @click.stop="openEditBtn(design,index,$event)" class="fi fi-br-menu-dots-vertical"></i>
2025-06-03 14:57:18 +08:00
2025-05-20 16:47:27 +08:00
</div>
</div>
</div>
</div>
</div>
</div>
<div class="right_content_block recycleBin" @mouseenter="mouseenter($event,'recycle')" :class="{recycleBinShow:recycleDomHidden}">
<div class="right_content_body">
<div class="right_content_header">
<div class="content_header_left">
<i class="fi fi-rs-comments"></i><span class="content_header_des">
{{ $t('HomeView.GeneratedDesign') }}
</span>
</div>
</div>
<div class="right_content_img_block scroll_style Guide_1_17" :class="[driver__.driver?'showEvents':'']">
2025-06-09 10:25:54 +08:00
<div class="right_content_img_item" ref="collItemDom" designType="disLike" :index="0">
2025-05-20 16:47:27 +08:00
<div class="content_img_block" v-show="showDesignMark" :style="collStyle">
<a-spin size="large" class="content_img_flex"></a-spin>
</div>
<div class="content_img_block content_img_GetWidth" v-for="(
design, index
) in designCollectionList" :key="design?.designItemId" :style="collStyle">
<div class="content_img_flex"
:class="[(driver__.driver && driver__.index == 32)?'hideEvents':'']"
2025-06-09 10:25:54 +08:00
@mousedown.stop="designMousedown(getMousePosition($event,false),design.designItemId || design.id,'disLike')"
@touchstart.passive="designMousedown(getMousePosition($event,true),design.designItemId || design.id,'disLike')"
2025-05-20 16:47:27 +08:00
@click="
designDetail(
design,
index,
designCollectionList,
2025-06-09 10:25:54 +08:00
'disLike'
2025-05-20 16:47:27 +08:00
)">
2025-06-11 15:08:17 +08:00
<img class="content_img"
v-if="design.resultType == 'PoseTransfer'"
:src="design.firstFrameUrl" alt=""
@mouseenter.stop="gifPlay($event,design)"
@mouseleave.stop="gifPause($event,design)" >
2025-06-09 10:25:54 +08:00
<img class="content_img" v-show="!design?.generateAwait" :src="design.designOutfitUrl || design.url" designType="disLike" :index="index"/>
<a-spin v-show="design?.generateAwait" size="large"></a-spin>
2025-05-20 16:47:27 +08:00
</div>
2025-06-03 14:57:18 +08:00
<div class="btn">
2025-06-18 11:05:23 +08:00
<div class="icon iconfont icon-jushoucang icon_like" @click="likeDesignCollection(design,index,design.resultType)">
2025-06-03 14:57:18 +08:00
</div>
2025-06-18 11:05:23 +08:00
<i class="fi fi-rr-trash icon_delete" @click="setDeleteDesign(design,index)">
</i>
2025-05-20 16:47:27 +08:00
</div>
</div>
</div>
</div>
</div>
</div>
<div class="designPage_left_bottom" :class="{active:recycleDomHidden}" @click="setShowHide('recycleDomHidden')" v-show="designCollectionId">
<span class="icon iconfont icon-xiala" :class="{'active':recycleDomHidden}"></span>
</div>
</div>
</div>
</div>
</div>
</div>
2025-06-18 11:05:23 +08:00
<div ref="designBtn" class="btnOpen" @click.stop="()=>openEditBtnId=-1" :class="{active:openEditBtnId == selectEditBtn?.designItemId||openEditBtnId == selectEditBtn?.id}">
<div class="item" @click="dislikeDesignCollection(selectEditBtn,selectEditBtn?.resultType,selectEditBtnIndex)">
<div class="text">Delete</div>
<i class="fi fi-rr-trash icon_delete">
</i>
</div>
<div class="item" v-show="selectEditBtn?.resultType == 'ToProductImage'" @click="setEditDesignType(selectLikeDesign,selectEditBtnIndex,'PoseTransfer','add','like')">
<div class="text">Transfer Pose</div>
<i class="fi fi fi-rr-play-alt"></i>
</div>
<div class="item" v-show="selectEditBtn?.resultType == 'ToProductImage'" @click="setEditDesignType(selectLikeDesign,selectEditBtnIndex,'Relight','add','like')">
<div class="text">Relight</div>
<i class="fi fi fi-br-keyboard-brightness"></i>
</div>
<div class="item" v-show="selectEditBtn?.resultType == 'Design'" @click="setEditDesignType(selectLikeDesign,selectEditBtnIndex,'ToProductImage','add','like')">
<div class="text">To Product Image</div>
<i class="fi fi fi-ss-box-open"></i>
</div>
</div>
2025-05-22 14:26:47 +08:00
<collectionModal ref="collectionModal"></collectionModal>
2025-05-20 16:47:27 +08:00
<!-- <DesignDetail ref="designDetail" @finishRedesign="finishRedesign"></DesignDetail> -->
<!-- 导出缩略图的蒙层 start-->
<div class="mark_loading" v-show="isShowMark">
<a-spin size="large" />
</div>
<!-- 导出缩略图的蒙层 end-->
<!-- design collection的进度蒙层 start-->
<!-- design collection的进度蒙层 end-->
<affiche ref="affiche"></affiche>
<DesignDetailcopy v-if="detailDestroy" ref="designDetail" @destroy="setDetailDestroy" @finishRedesign="finishRedesign"></DesignDetailcopy>
2025-06-03 14:57:18 +08:00
<editDesignType ref="editDesignType"
@addGenerateImg="addGenerateImg"
:productData="{
upload:upload,
RelightDirection:RelightDirection,
RelightDirectionList:RelightDirectionList,
}"
2025-06-09 10:25:54 +08:00
@setGenerateAwait="setGenerateAwait"
2025-06-03 14:57:18 +08:00
:isProductimg="true"></editDesignType>
2025-05-20 16:47:27 +08:00
</div>
</template>
<script lang="ts">
2025-06-18 11:05:23 +08:00
import { defineComponent, h, ref, computed, toRefs, inject,provide,nextTick,reactive,onBeforeUnmount, toRef, watch} from "vue";
2025-05-20 16:47:27 +08:00
// import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
import NewCollectionReview from "@/component/HomePage/NewCollectionReview.vue";
import generalCanvas from "@/component/modules/generalCanvas.vue";
import affiche from "@/component/HomePage/affiche.vue";
import DesignDetailcopy from "@/component/DetailCopy/designDetail.vue";
import html2canvas from "html2canvas";
import { message,Modal } from "ant-design-vue";
import { useStore } from "vuex";
import { Https } from "@/tool/https";
import { openGuide,driverObj__ } from "@/tool/guide";
import { LoadingOutlined ,ExclamationCircleOutlined} from "@ant-design/icons-vue";
2025-06-03 14:57:18 +08:00
import editDesignType from './editDesignType/index.vue'
2025-05-20 16:47:27 +08:00
// import JSZip, { forEach } from "jszip";
import { setCookie, getCookie, WriteCookie } from "@/tool/cookie";
import i18n from "@/lang";
import { useI18n } from "vue-i18n";
import { getMousePosition } from "@/tool/mdEvent";
import { removeClass } from "element-plus/es/utils";
2025-05-22 14:26:47 +08:00
import collectionModal from './collection.vue'
2025-05-20 16:47:27 +08:00
const FileSaver = require("file-saver");
export default defineComponent({
name: "homePage",
components: {
2025-05-22 14:26:47 +08:00
collectionModal,
2025-05-20 16:47:27 +08:00
// HeaderComponent,
NewCollectionReview,
affiche,
generalCanvas,
2025-06-03 14:57:18 +08:00
DesignDetailcopy,
editDesignType,
2025-05-20 16:47:27 +08:00
},
emits:['setTask'],
activated() {
},
deactivated() {
},
props:['isState'],
setup(props,{emit}) {
const store = useStore();
2025-06-03 14:57:18 +08:00
const editDesignType = reactive({
upload:{id:store.state.Workspace.probjects.id},
RelightDirectionList:[
{
value:'Right Light',
label:useI18n().t('ProductImg.RightLight')
},{
value:'Left Light',
label:useI18n().t('ProductImg.LeftLight')
},{
value:'Top Light',
label:useI18n().t('ProductImg.TopLight')
},{
value:'Bottom Light',
label:useI18n().t('ProductImg.BottomLight')
}
],
RelightDirection:'Right Light'
})
2025-05-20 16:47:27 +08:00
let likeDesignCollectionList: any = computed(() => {
return store.state.HomeStoreModule.likeDesignCollectionList;
});
let deleteDesignCollectionList: any = computed(() => {
return store.state.HomeStoreModule.deleteDesignCollectionList;
});
let designCollectionList: any = computed(() => {
return store.state.HomeStoreModule.designCollectionList;
});
let userDetail= computed(()=>{
return store.state.UserHabit.userDetail
})
let bindEmail= computed(()=>{
return store.state.UserHabit.bindEmail
})
let userGroupId: any = computed(() => {
return store.state.HomeStoreModule.userGroupId;
}); //模特id //当likeDesignCollectionList长度为0时清空startdesign时清空
let setPortfolio = (data:any)=>{
portfolio.value = data
}
provide('setPortfolio',setPortfolio)
let designCollectionId: any = computed(() => {
return store.state.HomeStoreModule.designCollectionId;
});
let designId: any = computed(() => {
return store.state.HomeStoreModule.designId;
});
let contentImgMax = {
width:'',
height:'',
}
let contentImg = {
width:'',
height:'',
}
let exportNav = ref([
{
name:useI18n().t('HomeView.moodboard'),
change:true,
noChange:true,
value:'moodboardFiles',
},{
name:useI18n().t('HomeView.printboard'),
change:true,
noChange:false,
value:'printboardFiles',
},{
name:useI18n().t('HomeView.colorboard'),
change:true,
noChange:false,
value:'colorBoards',
},{
name:useI18n().t('HomeView.sketchboard'),
change:true,
noChange:false,
value:'sketchboardFiles',
},{
name:useI18n().t('HomeView.mannequins'),
change:true,
noChange:true,
value:'',
},
])
2025-05-22 14:26:47 +08:00
const dataDom = reactive({
collectionModal:null as any,
2025-06-03 14:57:18 +08:00
editDesignType:null as any,
2025-06-18 11:05:23 +08:00
designBtn:null as any,
2025-06-03 14:57:18 +08:00
})
const designData = reactive({
openEditBtnId:-1,
2025-06-18 11:05:23 +08:00
selectEditBtn:null as any,
selectEditBtnIndex:-1,
2025-06-03 14:57:18 +08:00
likeLoading: false, //喜欢防抖
widthList:[
{
label:'Medium',
value:170,
},{
label:'Large',
value:250,
},{
label:'Extra-large',
value:400,
}
],
2025-06-18 11:05:23 +08:00
selectDesign:null as any,//当前选择的design
isUnfold:false,
selectLikeDesign:[] as any,
//类型
resultTypeList:[
{
label:'All',
value:'All',
},{
label:'Design',
value:'Design',
},{
label:'Product',
value:'Product',
},
// ,{
// label:'To Product Image',
// value:'ToProductImage',
// },{
// label:'Relight',
// value:'Relight',
// },
{
label:'Pose Transfer',
value:'PoseTransfer',
},
],
resultType:'All',
oldSelectLikeDesign:null as any
})
watch(()=>likeDesignCollectionList.value.length,(val)=>{
if(val>0)uploadLikeDom()
2025-05-22 14:26:47 +08:00
})
2025-05-20 16:47:27 +08:00
provide('exportNav',exportNav)
let isShowOperate = ref(false)
let {t} = useI18n()
let driver__:any = computed(()=>{
return store.state.Guide.guide
})
let likeDesignItemIdList = ref([])
let workspacePosition:any = computed(()=>{
return store.state.Workspace.probjects.positionList
})
let allBoardData:any = computed(()=>{
return store.state.UploadFilesModule.allBoardData})
let isMannequinShow = ref(false)
let chooseIsDesign:any = computed(()=>{
return store.state.UploadFilesModule.chooseIsDesign})
let portfolio:any = ref({})
provide('portfolio',portfolio)
let showDesignMark = ref(false)
let sessionStorageCollValue = JSON.parse(sessionStorage.getItem('collValue') as any)
const collItemSize = reactive({
2025-06-09 10:25:54 +08:00
widthValue:{
label:'Medium',
value:170,
},
2025-05-20 16:47:27 +08:00
collValue:6,
padding:60,
likeStyle:{
width:'240px',
height:'370px',
position:'absolute',
},
collStyle:{
width:'0',
height:'0',
position:'absolute',
},
itemStyle:{
width:0,
height:0,
},
scale:[1,1.54],
collTime:null as any,
isMove:false,
})
const posiitonData = ref({
likeElList:[] as any,
likeSelectIndex:0,
generateElList:[] as any,
generateSelectIndex:0,
})
let likeItemDom = ref()
let collItemDom = ref()
let domHidden = ref(JSON.parse(sessionStorage.getItem('domHidden') as any) || false);
let recycleDomHidden = ref(false);
if(designCollectionList.value.length>0){
recycleDomHidden.value = JSON.parse(sessionStorage.getItem('recycleDomHidden') as any) || false
}
let getDesignTime = null as any;
const setSystemDesigner = (time:any)=>{
clearTimeout(collItemSize.collTime)
collItemSize.collTime = setTimeout(()=>{
nextTick(()=>{
let parentWidth = likeItemDom.value.parentElement.offsetWidth
2025-06-09 10:25:54 +08:00
collItemSize.widthValue.value = collItemSize.widthValue.value == -1?100:collItemSize.widthValue.value
collItemSize.widthValue.value = collItemSize.widthValue.value > parentWidth?parentWidth:collItemSize.widthValue.value
collItemSize.collValue = Math.floor(parentWidth / collItemSize.widthValue.value)
collItemSize.padding = Math.floor(parentWidth - (collItemSize.collValue * collItemSize.widthValue.value))
2025-05-20 16:47:27 +08:00
let value = collItemSize.collValue
collItemSize.itemStyle.width = (parentWidth - collItemSize.padding - (value * 10)) / value
collItemSize.itemStyle.height = collItemSize.itemStyle.width * 1.54
collItemSize.collStyle.width = (collItemDom.value.offsetWidth - 30) / 3 * collItemSize.scale[0] + 'px'
collItemSize.collStyle.height = (collItemDom.value.offsetWidth - 30) / 3 * collItemSize.scale[1] + 'px'
collItemSize.likeStyle.width = collItemSize.itemStyle.width + 'px'
collItemSize.likeStyle.height = collItemSize.itemStyle.height + 'px'
let elArr = likeItemDom.value.children
posiitonData.value.likeElList = []
for(let i = 0;i < elArr.length;i++){
posiitonData.value.likeElList.push({
el: elArr[i],
2025-06-18 11:05:23 +08:00
sort: designData.selectLikeDesign[i].sort - 1,
// sort: likeDesignCollectionList.value[i].sort - 1,
2025-05-20 16:47:27 +08:00
index: i,
2025-06-18 11:05:23 +08:00
userLikeSortId:designData.selectLikeDesign[i].userLikeSortId || designData.selectLikeDesign[i].id
// userLikeSortId:likeDesignCollectionList.value[i].userLikeSortId || likeDesignCollectionList.value[i].id
2025-05-20 16:47:27 +08:00
});
}
moveItem('like')
})
},time)
}
const setDesignItemStyle = ()=>{
posiitonData.value.generateElList = []
let elArr = collItemDom.value.querySelectorAll('.content_img_GetWidth')
designCollectionList.value.forEach((item:any,index:any)=>{
posiitonData.value.generateElList.unshift({
el: elArr[index],
sort: designCollectionList.value.length - index - 1,
index: designCollectionList.value.length - index - 1,
2025-06-09 10:25:54 +08:00
userLikeSortId:item.designItemId || item.id
2025-05-20 16:47:27 +08:00
});
})
}
const setDeleteDesign = (value:any,index:any)=>{
store.commit("setDeleteDesignCollectionList",index);
let collItem = posiitonData.value.generateElList.filter((item:any)=>item.userLikeSortId == value.designItemId)[0]
posiitonData.value.generateElList = posiitonData.value.generateElList.filter((item:any)=>item.userLikeSortId != value.designItemId)
posiitonData.value.generateElList.forEach((item:any)=>{
if(item.sort > collItem.sort){
item.sort-=1
}
})
moveItem('')
}
const cancelDeleteDesign = (index:any)=>{
store.commit("cancelDeleteDesignCollectionList",index);
}
2025-06-18 11:05:23 +08:00
const designMousedown = (e:any,design:any,str:string)=>{
if(design.resultType != 'Design' || designData.isUnfold)return
2025-05-20 16:47:27 +08:00
if(str != 'like' && showDesignMark.value) return
2025-06-18 11:05:23 +08:00
let Id = design.userLikeSortId || design.id
2025-05-20 16:47:27 +08:00
let arr = str == 'like'? posiitonData.value.likeElList:posiitonData.value.generateElList
let item:any = arr.filter((item:any)=>item.userLikeSortId == Id)[0]
item.el.style.zIndex = 2;
item.el.style.transition = 'all 0s';
let startX = e.clientX,
startY = e.clientY,
left = item.el.offsetLeft,
top = item.el.offsetTop;
collItemSize.isMove = false
let moveFun = (e:any) => {
collItemSize.isMove = true
let X = e.clientX - startX + left;
let Y = e.clientY - startY + top;
item.el.style.left = `${X}px`;
item.el.style.top = `${Y}px`;
reRange(item, X, Y,str);
};
let mouseUpFun = ()=>{
document.removeEventListener('mousemove',mouseMove)
document.removeEventListener('touchmove',touchmove)
document.removeEventListener('mouseup',mouseUpFun)
document.removeEventListener('touchend',mouseUpFun)
item.el.style.zIndex = 1;
item.el.style.transition = 'top,left .5s';
moveItem(str);
if(str == 'like')sortDesignCollection()
}
let mouseMove = function(event:any){
let e = getMousePosition(event,false)
moveFun(e)
}
let touchmove = function(event:any){
let e = getMousePosition(event,true)
moveFun(e)
}
document.addEventListener('mousemove',mouseMove)
document.addEventListener('touchmove',touchmove)
document.addEventListener('mouseup',mouseUpFun)
document.addEventListener('touchend',mouseUpFun)
}
//排序 从大到小
const sortDesignCollection = ()=> {
let arrData:any = []
if(!likeDesignCollectionList.value)return
likeDesignCollectionList.value.forEach((likeItem:any)=>{
2025-06-09 10:25:54 +08:00
let item = posiitonData.value.likeElList.filter((item:any)=>item.userLikeSortId == likeItem.userLikeSortId || item.userLikeSortId == likeItem.id)[0]
2025-05-20 16:47:27 +08:00
likeItem.sort = item.sort + 1
let obj = {
2025-06-09 10:25:54 +08:00
id:likeItem.userLikeSortId || likeItem.id,
2025-05-20 16:47:27 +08:00
"sort": item.sort + 1,
"userLikeGroupId": likeItem.userLikeGroupId,
"userLikeId": likeItem.id
}
arrData.push(obj)
})
let data = {
"userLikeGroupId": userGroupId.value,
"userLikeSortList": arrData
}
Https.axiosPost(Https.httpUrls.designSort, data).then((rv:any)=>{
})
}
const mouseenter = (e:any,str:string)=>{
}
const reRange = (item:any, x:number, y:number,str:string)=>{
let elList = str == 'like'? posiitonData.value.likeElList:posiitonData.value.generateElList
let index = str == 'like'?posiitonData.value.likeSelectIndex:posiitonData.value.generateSelectIndex
let value = collItemSize.collValue
let width,height,num
if(str == 'like'){
2025-06-09 10:25:54 +08:00
num = value
2025-05-20 16:47:27 +08:00
width = collItemSize.itemStyle.width
height = collItemSize.itemStyle.height
}else{
num = 3
width = (collItemDom.value.offsetWidth - 30) / 3 * collItemSize.scale[0]
height = (collItemDom.value.offsetWidth - 30) / 3 * collItemSize.scale[1]
}
2025-06-09 10:25:54 +08:00
let padding = str == 'like'?collItemSize.padding/2:0
let moveIndex = Math.round((x-padding) / (width + 10)) + Math.round(y / (height + 10)) * num;
2025-05-20 16:47:27 +08:00
moveIndex = elList.length - 1 - moveIndex
moveIndex = moveIndex < 0 ? 0 : moveIndex;
moveIndex = moveIndex > elList.length - 1 ? elList.length - 1 : moveIndex;
if(moveIndex != index){
if(str == 'like'){
posiitonData.value.likeSelectIndex = moveIndex;
}else{
posiitonData.value.generateSelectIndex = moveIndex;
}
let currentSort = item.sort;
for(let i = 0;i < elList.length;i++){
if(currentSort < moveIndex){
if(elList[i].sort > currentSort && elList[i].sort <= moveIndex){
elList[i].sort -= 1;
};
}else if(currentSort > moveIndex){
if(elList[i].sort < currentSort && elList[i].sort >= moveIndex){
elList[i].sort += 1;
};
}
};
elList[item.index].sort = moveIndex;
moveItem(str);
}
}
const setLikeDislLike = (str:string,value:any)=>{
2025-06-18 11:05:23 +08:00
designData.selectLikeDesign = []
2025-05-20 16:47:27 +08:00
posiitonData.value.likeSelectIndex = 0
nextTick(()=>{
if(str == 'like'){
let elArr = likeItemDom.value.children
posiitonData.value.likeElList.push({
el: elArr[0],
sort: value.sort - 1,
index: value.sort - 1,
userLikeSortId:value.userLikeSortId
});
2025-06-09 10:25:54 +08:00
let collItem = posiitonData.value.generateElList.filter((item:any)=>(item.userLikeSortId == value.designItemId || item.userLikeSortId == value.id))[0]
if(collItem){
posiitonData.value.generateElList = posiitonData.value.generateElList.filter((item:any)=>item.userLikeSortId != value.designItemId)
posiitonData.value.generateElList.forEach((item:any)=>{
if(item.sort > collItem.sort){
item.sort-=1
}
})
}
2025-05-20 16:47:27 +08:00
}else if(str == 'disLike'){
let elArr = collItemDom.value.querySelectorAll('.content_img_GetWidth')
posiitonData.value.likeElList = posiitonData.value.likeElList.filter((item:any)=>(item.sort + 1) != value.sort)
posiitonData.value.likeElList.forEach((item:any)=>{
if(item.sort > value.sort - 1){
item.sort-=1
}
})
posiitonData.value.generateElList.push({
el: elArr[elArr.length-1],
sort: posiitonData.value.generateElList.length,
index: posiitonData.value.generateElList.length,
2025-06-09 10:25:54 +08:00
userLikeSortId:value.designItemId||value.id
2025-05-20 16:47:27 +08:00
});
}
2025-06-11 15:08:17 +08:00
setDesignItemStyle()
2025-06-09 10:25:54 +08:00
setSystemDesigner(100)
2025-05-20 16:47:27 +08:00
// moveItem('disLike');
})
}
//排列
const moveItem = (str:any)=>{
let elLikeList = posiitonData.value.likeElList
let generateElList = posiitonData.value.generateElList
let value = collItemSize.collValue
2025-06-09 10:25:54 +08:00
let width:any,height:any
2025-05-20 16:47:27 +08:00
width = (collItemDom.value.offsetWidth - 30) / 3 * collItemSize.scale[0]
height = (collItemDom.value.offsetWidth - 30) / 3 * collItemSize.scale[1]
2025-06-09 10:25:54 +08:00
2025-05-20 16:47:27 +08:00
// let num = str == 'like'?value:3
2025-06-09 10:25:54 +08:00
nextTick(()=>{
for(let i = 0;i < elLikeList.length;i++){
elLikeList[i].el.style.left = (elLikeList.length - 1 - elLikeList[i].sort) % value * (collItemSize.itemStyle.width +10) + collItemSize.padding/2 + 'px';
elLikeList[i].el.style.top = parseInt(String((elLikeList.length - 1 - elLikeList[i].sort) / value)) * (collItemSize.itemStyle.height +10) + 'px';
}
for(let i = 0;i < generateElList.length;i++){
generateElList[i].el.style.left = (generateElList.length - 1 - generateElList[i].sort) % 3 * (width +10) + 'px';
generateElList[i].el.style.top = parseInt(String((generateElList.length - 1 - generateElList[i].sort) / 3)) * (height +10) + 'px';
}
})
2025-05-20 16:47:27 +08:00
}
2025-05-22 14:26:47 +08:00
const openCollection = (str:string)=>{
dataDom.collectionModal.init(str)
}
2025-06-18 11:05:23 +08:00
const openEditBtn = (design:any,index:number,event:any)=>{
if(designData.selectLikeDesign[index].resultType != 'Design'){
designData.selectDesign = designData.selectLikeDesign.filter((item:any)=>(item.resultType == 'Design' && item.userLikeSortId == designData.selectLikeDesign[index].parentId))[0]
}else{
designData.selectDesign = designData.selectLikeDesign[index]
}
designData.openEditBtnId = design.designItemId||design.id
designData.selectEditBtn = design
designData.selectEditBtnIndex = index
let width = event.target.offsetWidth
let height = event.target.offsetHeight
let parentRect = dataDom.designBtn.parentElement.getBoundingClientRect()
let x = event.clientX - parentRect.x - event.offsetX + width
let y = event.clientY - parentRect.y - event.offsetY + height
dataDom.designBtn.style.left = x+'px'
dataDom.designBtn.style.top = y+'px'
2025-06-03 14:57:18 +08:00
let removeEditBtnId = ()=>{
designData.openEditBtnId = -1
document.removeEventListener('click',removeEditBtnId)
}
document.addEventListener('click',removeEditBtnId)
}
let setEditDesignType = (arr:any,index:any,type:any,status:any,listType:string)=>{
arr = JSON.parse(JSON.stringify(arr))
let item = arr[index]
if(status == 'add'){
item.sourceUrl = item.designOutfitUrl || item.url
}else{
}
arr[index].resultType = type
// dataDom.editDesignType.isProductimg = isLike
dataDom.editDesignType.isProductimg = true
dataDom.editDesignType.init(arr,index,null,status,listType)
dataDom.editDesignType.isLike = false
dataDom.editDesignType.productimgRelightDirection = editDesignType.RelightDirection
dataDom.editDesignType.isComparison = true
}
const addGenerateImg = (data:any)=>{
if(!data.id)return
let obj = {
id:data.id,
designItemId:data.id,
// designItemId:data.elementId,
designOutfitId:'',
2025-06-09 10:25:54 +08:00
designOutfitUrl:data.designOutfitUrl,
2025-06-03 14:57:18 +08:00
sourceUrl:data.sourceUrl,
resultType:data.resultType,
elementId:data.elementId,
elementType:data.elementType,
2025-06-09 10:25:54 +08:00
userGroupId:data.userGroupId || data.id,
2025-06-11 15:08:17 +08:00
firstFrameUrl:data.firstFrameUrl,
gifUrl:data.gifUrl,
2025-06-18 11:05:23 +08:00
userLikeSortId:data.userLikeSortId,
2025-06-03 14:57:18 +08:00
}
let list = []
if(data.listType == 'disLike'){
list = designCollectionList.value
}else{
list = likeDesignCollectionList.value
}
2025-06-09 10:25:54 +08:00
if(list[data.isIndex]?.generateAwait)list[data.isIndex].generateAwait = false;
if(data.status == 'add'){
2025-06-03 14:57:18 +08:00
if(data.listType == 'like'){
likeDesignCollection(obj,-1,data.resultType)
}else{
list.unshift(obj)
}
2025-06-09 10:25:54 +08:00
}else if(data.status == 'cove'){
2025-06-03 14:57:18 +08:00
// collectionLikeUpdate
// Https
if(data.listType == 'like'){
let value = {
"oldRelationId": data.oldId,
"relationId": data.id,
"relationType": data.resultType,
}
Https.axiosPost(Https.httpUrls.collectionLikeUpdate,value).then((rv:any)=>{
if(rv){
}
})
}
list[data.isIndex].designOutfitUrl = obj.designOutfitUrl
list[data.isIndex].resultType = obj.resultType
list[data.isIndex].id = obj.id
list[data.isIndex].designItemId = obj.designItemId
list[data.isIndex].sourceUrl = obj.sourceUrl
}
2025-06-18 11:05:23 +08:00
// nextTick().then(()=>{
// // setDesignItemStyle()
// // setSystemDesigner(100)
// uploadLikeDom()
// })
2025-06-03 14:57:18 +08:00
}
const setNoDesignLike = (design:any,index:any,type:any,str:string) => {
let url
let data = {
toProductImageResultId:[(design.designItemId || design.id)],
projectId: store.state.Workspace.probjects.id,
2025-06-18 11:05:23 +08:00
collectionSortParentId:designData?.selectDesign?.userLikeSortId || design.parentId,
2025-06-11 15:08:17 +08:00
} as any
let params = {} as any
2025-06-03 14:57:18 +08:00
if(type == 'ToProductImage' || type == 'Relight'){
if(str == 'like'){
url = Https.httpUrls.productImageLike
}else{
url = Https.httpUrls.productImageUnLike
}
2025-06-11 15:08:17 +08:00
}else if(type == 'PoseTransfer'){
url = Https.httpUrls.poselikeOrDisike
if(str == 'like'){
params = {
likeOrDislike:'like',
transformedId:design.id,
projectId:store.state.Workspace.probjects.id,
2025-06-18 11:05:23 +08:00
collectionSortParentId:designData?.selectDesign?.userLikeSortId || design.parentId,
2025-06-11 15:08:17 +08:00
}
}else{
params = {
likeOrDislike:'dislike',
transformedId:design.id,
projectId:store.state.Workspace.probjects.id,
2025-06-18 11:05:23 +08:00
collectionSortParentId:designData?.selectDesign?.userLikeSortId || design.parentId,
2025-06-11 15:08:17 +08:00
}
}
2025-06-03 14:57:18 +08:00
}else{
if(str == 'like'){
url = Https.httpUrls.productImageLike
}else{
url = Https.httpUrls.productImageUnLike
}
}
designData.likeLoading = true;
2025-06-11 15:08:17 +08:00
Https.axiosPost(url, data,{params:params.likeOrDislike?params:''}).then(
2025-06-03 14:57:18 +08:00
(rv) => {
if(str == 'like'){
2025-06-18 11:05:23 +08:00
likeDesignCollectionList.value.forEach((item:any)=>{
if(item.resultType == 'Design' && item.userLikeSortId == designData.selectDesign.userLikeSortId){
2025-06-19 09:21:32 +08:00
if(!item?.childList)item.childList = []
2025-06-18 11:05:23 +08:00
item.childList.push(design)
}
})
2025-06-03 14:57:18 +08:00
}else{
likeDesignCollectionList.value.forEach((item:any)=>{
2025-06-18 11:05:23 +08:00
if(item.resultType == 'Design' && item.userLikeSortId == designData.selectDesign.userLikeSortId){
item.childList = item.childList.filter((item:any)=>{
return item.id != design.id
})
2025-06-03 14:57:18 +08:00
}
})
}
2025-06-18 11:05:23 +08:00
nextTick().then(()=>{
uploadLikeDom()
})
//一下代码是生成的design时候也可以toproduct
// if(str == 'like'){
// let value:any = {
// ...design,
// sort:likeDesignCollectionList.value.length + 1,
// userLikeGroupId:design.id,
// }
// design.groupDetailId = rv.groupDetailId;
// store.commit(
// "addLikeDesignCollectionList",
// value
// );
// setLikeDislLike('like',value)
// if(index != -1)store.commit("deleteDesignCollectionList", index);
// }else{
// if(index != -1)store.commit("deleteLikeDesignCollectionList", index);
// store.commit("addDesignCollectionList", [design]);
// likeDesignCollectionList.value.forEach((item:any)=>{
// if(item.sort > design.sort){
// item.sort-=1
// }
// })
// }
2025-06-03 14:57:18 +08:00
designData.likeLoading = false;
}
).catch(res=>{
designData.likeLoading = false;
});
}
let likeDesignCollection = (design:any,index:any,type:any) => {
if (designData.likeLoading) {
return;
}
if(type != 'Design'){
setNoDesignLike(design,index,type,'like')
return
}
let data = {
designItemId: design.designItemId,
userGroupId: store.state.HomeStoreModule.userGroupId,
projectId: store.state.Workspace.probjects.id,
timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,
designPythonOutfitId:design.designOutfitId?design.designOutfitId:design.designPythonOutfitId
};
designData.likeLoading = true;
Https.axiosPost(Https.httpUrls.designLike, data)
.then((rv: any) => {
if (rv) {
let value:any = {
...design,
id:rv.userLikeId,
groupDetailId:rv.userLikeId,
userLikeSortId:rv.userLikeSortId,
userLikeGroupId:rv.userGroupId,
sort:rv.sort,
}
store.commit("setUserGroupId", rv.userGroupId);
design.groupDetailId = rv.groupDetailId;
store.commit(
"addLikeDesignCollectionList",
value
);
setLikeDislLike('like',value)
if(index != -1)store.commit("deleteDesignCollectionList", index);
}
designData.likeLoading = false;
})
.catch((rv) => {
designData.likeLoading = false;
});
}
2025-06-09 10:25:54 +08:00
const upDataLikeListType = ()=>{
}
const setGenerateAwait = (data:any)=>{
let list = []
if(data.listType == 'disLike'){
list = designCollectionList.value
}else{
list = likeDesignCollectionList.value
}
list[data.index].generateAwait = true;
}
2025-06-11 15:08:17 +08:00
const gifPlay = (e:any,item:any)=>{
e.target.src = item.gif || item.gifUrl//使用gif图片
}
const gifPause = (e:any,item:any)=>{
e.target.src = item.firstFrame || item.firstFrameUrl//静态图片
}
2025-06-18 11:05:23 +08:00
const startHover = (e:any,item:any)=>{
}
const endHover = (e:any,item:any)=>{
}
const setUnfold = ()=>{
if(!designData.isUnfold){
designData.selectLikeDesign = designData.oldSelectLikeDesign || []
}
uploadLikeDom()
}
const uploadLikeDom = ()=>{
if(designData.isUnfold){
// const parents = designData.selectLikeDesign.filter((item:any) => item.type === 'design');
designData.selectLikeDesign = []
likeDesignCollectionList.value.sort((a:any,b:any)=>{return a.sort - b.sort})
let childLength = 0
likeDesignCollectionList.value.forEach((likeItem:any,index:any)=>{
let item = JSON.parse(JSON.stringify(likeItem))
item.oldSort = item.sort
if(item?.childList?.length > 0){
item.childList.forEach((childItem:any,childIndex:number)=>{
childItem.sort = childIndex + item.sort + childLength
designData.selectLikeDesign.push(childItem)
})
childLength = item.childList.length + childLength
}
item.sort = childLength + item.sort
designData.selectLikeDesign.push(item)
})
designData.oldSelectLikeDesign = []
designData.resultType = 'All'
}else{
if(designData.selectLikeDesign.length == 0){
designData.selectLikeDesign = likeDesignCollectionList.value
2025-06-19 09:21:32 +08:00
nextTick(()=>{
setSystemDesigner(0)
})
2025-06-18 11:05:23 +08:00
return
}
const parents = designData.selectLikeDesign.filter((item:any) => item.resultType === 'Design');
parents.map((parent:any) => {
parent.sort = parent.oldSort||parent.sort
return {
...parent,
childList: designData.selectLikeDesign.filter((item:any) =>
item.parentId === parent.userLikeSortId && item.resultType !== 'Design'
)
};
});
designData.selectLikeDesign = parents
}
nextTick(()=>{
setSystemDesigner(0)
})
}
const changeResultType = ()=>{
if(designData.resultType != 'All'){
if(designData.oldSelectLikeDesign.length == 0)designData.oldSelectLikeDesign = designData.selectLikeDesign
if(designData.resultType == 'Product'){
designData.selectLikeDesign = designData.oldSelectLikeDesign.filter((item:any) => (item.resultType === 'ToProductImage' || item.resultType === 'Relight'));
}else{
designData.selectLikeDesign = designData.oldSelectLikeDesign.filter((item:any) => item.resultType === designData.resultType);
}
designData.selectLikeDesign.forEach((item:any,index:number) => {
item.sort = index + 1
})
}else{
designData.selectLikeDesign = designData.oldSelectLikeDesign
designData.selectLikeDesign.forEach((item:any,index:number) => {
item.sort = index + 1
})
}
nextTick(()=>{
setSystemDesigner(0)
})
}
2025-05-20 16:47:27 +08:00
return {
store,
2025-06-03 14:57:18 +08:00
...toRefs(editDesignType),
2025-05-20 16:47:27 +08:00
likeDesignCollectionList,
deleteDesignCollectionList,
designCollectionList,
userGroupId,
userDetail,
bindEmail,
setPortfolio,
designCollectionId,
designId,
contentImgMax,
contentImg,
exportNav,
isShowOperate,
t,
driver__,
likeDesignItemIdList,
workspacePosition,
allBoardData,
isMannequinShow,
chooseIsDesign,
portfolio,
setSystemDesigner,
setDesignItemStyle,
showDesignMark,
...toRefs(collItemSize),
2025-06-03 14:57:18 +08:00
...toRefs(designData),
2025-05-22 14:26:47 +08:00
...toRefs(dataDom),
2025-05-20 16:47:27 +08:00
likeItemDom,
collItemDom,
domHidden,
recycleDomHidden,
getDesignTime,
setDeleteDesign,
cancelDeleteDesign,
designMousedown,
sortDesignCollection,
getMousePosition,
mouseenter,
setLikeDislLike,
posiitonData,
2025-05-22 14:26:47 +08:00
moveItem,
openCollection,
2025-06-03 14:57:18 +08:00
setEditDesignType,
openEditBtn,
addGenerateImg,
setNoDesignLike,
2025-06-09 10:25:54 +08:00
upDataLikeListType,
setGenerateAwait,
2025-06-11 15:08:17 +08:00
gifPlay,
gifPause,
2025-06-18 11:05:23 +08:00
startHover,
endHover,
setUnfold,
changeResultType,
2025-05-20 16:47:27 +08:00
};
},
data() {
return {
isFinishLoading: false,
isShowMark: false, //导出的loading蒙层
indicator: h(LoadingOutlined, {
style: {
fontSize: "4.8rem",
marginTop: "3rem",
color:"#341e57",
},
spin: true,
}),
designProgress: 0,
startDesignType: "design", //设计类型 design 和 resdesign
disLikeLoading: false, //不喜欢防抖
dragIdx:0,
designRandom:'',
detailDestroy:false,//销毁detail
designFailure:{
num:0,
currentNum:0,
},//获取20次都为空的话就停止获取
2025-06-09 10:25:54 +08:00
observerData:{
time:false as any,
observer:null as any,
},
2025-05-20 16:47:27 +08:00
};
},
watch: {
workspacePosition:{
handler(newVal:any,oldVal:any){
this.isMannequin()
},
},
allBoardData:{
handler(newVal:any,oldVal:any){
this.isMannequin()
},
},
},
beforeUnmount(){
clearTimeout(this.getDesignTime);
sessionStorage.setItem('domHidden',JSON.stringify(this.domHidden))
sessionStorage.setItem('recycleDomHidden',JSON.stringify(this.recycleDomHidden))
sessionStorage.setItem('collValue',JSON.stringify(this.collValue))
if(this.$props.isState)this.sortDesignCollection()
2025-06-09 10:25:54 +08:00
// window.removeEventListener('resize', this.setItemPosition)
this.observerData.observer.unobserve(this.$refs.rightContentBlockBox);
2025-05-20 16:47:27 +08:00
},
async mounted() {
2025-06-19 09:21:32 +08:00
if(window.innerWidth < 1200){
this.widthList = [
{
label:'Medium',
value:70,
},{
label:'Large',
value:150,
},{
label:'Extra-large',
value:200,
}
]
this.widthValue = {
label:'Medium',
value:70,
}
}
2025-05-20 16:47:27 +08:00
window.addEventListener('beforeunload', (event)=>{
this.store.commit("clearAllCollection");
});
2025-06-09 10:25:54 +08:00
// window.addEventListener('resize', this.setItemPosition)
this.$refs.rightContentBlockBox
this.observerData.observer = new ResizeObserver(entries => {
for (let entry of entries) {
clearTimeout(this.observerData.time)
this.observerData.time = setTimeout(()=>{
this.setSystemDesigner(0)
this.setDesignItemStyle()
},100)
// const { width } = entry.contentRect;
}
});
this.observerData.observer.observe(this.$refs.rightContentBlockBox);
2025-06-11 15:08:17 +08:00
if(this.designCollectionList?.length > 0){
nextTick(()=>{
this.setDesignItemStyle()
this.setShowHide('recycleDomHidden')
})
}
2025-05-20 16:47:27 +08:00
},
directives:{
mousewheel:{
mounted (el) {
let bodyDom:any = document.getElementsByClassName('right_content_block')[0]
let dom:any = document.getElementsByClassName('right_content_body')
let mouseover = ()=>{
bodyDom.classList.add('active')
}
let mouseleave = ()=>{
bodyDom.classList.remove('active')
}
dom.forEach((item:any) => {
item.addEventListener('mouseover',mouseover)
item.addEventListener('mouseleave',mouseleave)
});
el.addEventListener('wheel',(e:WheelEvent)=>{
let num = 0
if(e.deltaY > 0){
num = 25
}else{
num = -25
}
el.scrollBy(num, 0);
},{ passive: true })
}
}
},
methods: {
// addTeam (team:any) {
// this.likeDesignCollectionList.push(team)
// },
openSetData(){
this.setItemPosition()
},
setItemPosition(){
this.setSystemDesigner(0)
this.setDesignItemStyle()
},
affiche(text:any){
nextTick(()=>{
let affiche:any = this.$refs.affiche
affiche.init(text)
})
},
//判断模特和当前start的sketch是否匹配
isMannequin(){
this.isMannequinShow = false
let num = 0
this.allBoardData?.sketchboardFiles?.forEach((sketchItem:any) => {
this.workspacePosition.forEach((positionItem:any) => {
if(positionItem.value == sketchItem.categoryValue){
num ++
}
});
});
if(this.allBoardData?.sketchboardFiles?.length && this.allBoardData?.sketchboardFiles?.length>0){
if(num != this.allBoardData?.sketchboardFiles?.length){
this.isMannequinShow = true
}
}else{
this.isMannequinShow = false
}
},
//设计新的collection
designNewCollection() {
clearTimeout(this.getDesignTime);
let data = this.getDesignData("");
if(this.driver__.driver){
nextTick().then(()=>{
driverObj__.moveNext();
})
}
this.isShowMark = true
// this.store.commit("setLikeDesignCollectionList", []);
Https.axiosPost(Https.httpUrls.designCollection, data)
.then((rv: any) => {
if (rv) {
let value = {
objectSignList:data.requestIdList.join(),
requestId:rv
}
this.posiitonData.generateElList.forEach((item:any) => {
item.sort -= 1
})
this.moveItem('disLike')
this.getDesignResult(value,'newDesign')
this.startDesignType = "design";
// this.posiitonData.likeSelectIndex = 0
// this.posiitonData.likeElList = []
}
this.isShowMark = false;
})
.catch((res) => {
this.isShowMark = false;
})
},
getDesignResult(data:any,str:any){
this.showDesignMark = true
this.recycleDomHidden = true
this.setSystemDesigner(0)
Https.axiosGet(Https.httpUrls.getDesignResult,{params:data})
.then(async (rv)=>{
if(rv.designCollectionItems){
let arr:any = []
if(this.designCollectionList.length == 0){
arr.push(...rv.designCollectionItems)
}else{
arr = rv.designCollectionItems.filter((itemA:any) =>
!this.designCollectionList.some((itemB:any) => itemA.objectSign === itemB.objectSign)
);
}
for (let index = 0; index < arr.length; index++) {
const item = arr[index];
await new Promise((resolve, reject) => {
setTimeout(() => {
this.designCollectionList.unshift(item)
nextTick().then(()=>{
let dom:any = this.$refs.collItemDom
let elArr:any = dom.querySelectorAll(".content_img_GetWidth");
this.posiitonData.generateElList.push({
el: elArr[0],
sort: elArr.length - 2,
index: elArr.length - 1,
userLikeSortId:item.designItemId
});
this.moveItem('disLike')
})
resolve('')
}, 200);
})
}
}
if(rv.unfinishedList.length == 0){
this.showDesignMark = false
if(str == 'newDesign'){
if(rv.designCollectionItems){
// this.store.commit("deleteUserGroupId");
this.store.commit(
"setDesignCollectionId",
rv.collectionId
);
this.store.commit("setDesignId", rv.designId);
}
}else{
// this.designProgress = 0,
this.store.commit("setDesignId", rv.designId);
}
nextTick().then(()=>{
driverObj__.moveNext();
this.posiitonData.generateElList.forEach((item:any) => {
item.sort += 1
});
this.moveItem('disLike')
})
}else{
data.objectSignList = rv.unfinishedList.join()
this.getDesignTime = setTimeout(()=>{
if(this.designFailure.currentNum == rv.unfinishedList.length){
this.designFailure.num++
if(this.designFailure.num >= 10)data.objectSignList=''
}else{
this.designFailure.num = 0
}
this.getDesignResult(data,str)
},1000)
}
}).catch(()=>this.showDesignMark = false)
},
//重新设计collection
resDesignCollection() {
if(this.driver__.driver){
nextTick().then(()=>{
driverObj__.moveNext();
})
}
clearTimeout(this.getDesignTime);
this.isShowMark = true
let data = this.getDesignData(this.designCollectionId);
Https.axiosPost(Https.httpUrls.reDesignCollection, data)
.then((rv: any) => {
if (rv) {
let value = {
objectSignList:data.requestIdList.join(),
requestId:rv
}
this.posiitonData.generateElList.forEach((item:any) => {
item.sort -= 1
})
this.moveItem('disLike')
this.getDesignResult(value,'resDesign')
this.startDesignType = "resDesign";
this.isShowMark = false
}
})
.catch((res) => {
this.isShowMark = false;
});
},
getDesignData(designCollectionId: any) {
let {
moodboardFiles,
printboardFiles,
disposeMoodboard,
// generatePrintFiles,
colorBoards,
sketchboardFiles,
marketingSketchFiles,
moodboardPosition,
} = this.store.state.UploadFilesModule.allBoardData;
this.randomNum()
2025-05-28 10:28:07 +08:00
let modelList = [] as any;
let workspace:any = this.store.state.Workspace.probjects
workspace.model.forEach((item:any)=>{
let obj = {
id:item.id,
type:item.type,
collectionElementId:item.collectionElementId
}
modelList.push(obj)
})
2025-05-20 16:47:27 +08:00
let data: any = {
colorBoards: this.getColorBoard(colorBoards),
// marketingSketchs: this.getBoardId(marketingSketchFiles),
moodBoards: this.getBoardId(moodboardFiles),
printBoards: this.getPrintId(printboardFiles),
sketchBoards: this.getSkecthBoard(sketchboardFiles),
moodboardPosition: moodboardPosition?JSON.stringify(moodboardPosition):null,
switchCategory: workspace.type == "seriesDesign"?"": workspace.position.value,
singleOverall: workspace.type == "seriesDesign" ? "overall" : 'single',
systemScale: workspace.systemDesignerPercentage?workspace.systemDesignerPercentage*.01:.3,
2025-05-28 10:28:07 +08:00
templateId: '',
// templateId: workspace.model.id,
mannequins: modelList,
modelType:'',
2025-05-20 16:47:27 +08:00
modelSex:workspace?.sex,
moodTemplateId: disposeMoodboard?.[0] ? String(disposeMoodboard[0].id) : null,
timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,
processId:this.designRandom,
projectId:workspace.id
};
// data.moodboardPosition = JSON.stringify(this.store.state.UploadFilesModule.moodboardPosition)
this.setSystemDesigner(0)
this.designFailure = {
num:0,
currentNum:0,
}
if(designCollectionId) {
data.collectionId = designCollectionId;
}
let arr = []
for (let index = 0; index < 8; index++) {
let floor = Math.floor(Math.random() * 90000000) + 10000000
arr.push(floor)
}
data.requestIdList = arr
return data;
},
randomNum(){
this.designRandom = String(Math.floor(Math.random() * 9000000000000000) + 1000000000000000)
},
getBoardId(boardData: any) {
boardData = boardData || []
let dataList = boardData.map((v: any) => {
let data: any = {
id: v.resData.id,
designType: v.resData.designType,
};
return data;
});
return dataList;
},
getPrintId(boardData: any) {
boardData = boardData || []
let dataList = boardData.map((v: any) => {
let data: any = {
id: v.resData.id,
designType: v.resData.designType,
level2Type: v.categoryValue,
isPin: v.pin ? 1 : 0,
};
return data;
});
return dataList;
},
getSkecthBoard(boardData: any) {
boardData = boardData || []
let sketchBoards = boardData.map((v: any) => {
let data = {
designType: v.resData.designType,
isPin: v.pin ? 1 : 0,
level2Type: v.categoryValue,
sketchBoardId: v.resData.id,
};
return data;
});
return sketchBoards;
},
getColorBoard(boardData: any) {
boardData = boardData || []
let colorBoards = boardData.map((v: any) => {
let data = {
id: v.id,
name: v.name,
tcx: v.tcx,
gradient:v.gradient,
rgbValue: "",
};
data.rgbValue = `${v.rgbValue.r} ${v.rgbValue.g} ${v.rgbValue.b}`;
return data;
});
return colorBoards;
},
deleteDesignCollection(list:any,index:any){
list.splice(index,1)
},
2025-06-03 14:57:18 +08:00
likeDesignCollection(design: any, index: any,type:any) {
if (this.likeLoading) {
return;
}
if(type != 'Design'){
this.setNoDesignLike(design,index,type,'like')
return
}
2025-05-20 16:47:27 +08:00
let data = {
designItemId: design.designItemId,
userGroupId: this.store.state.HomeStoreModule.userGroupId,
projectId: this.store.state.Workspace.probjects.id,
timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,
designPythonOutfitId:design.designOutfitId?design.designOutfitId:design.designPythonOutfitId
};
2025-06-03 14:57:18 +08:00
2025-05-20 16:47:27 +08:00
this.likeLoading = true;
Https.axiosPost(Https.httpUrls.designLike, data)
.then((rv: any) => {
if (rv) {
let value:any = {
...design,
id:rv.userLikeId,
groupDetailId:rv.userLikeId,
userLikeSortId:rv.userLikeSortId,
userLikeGroupId:rv.userGroupId,
sort:rv.sort,
}
this.store.commit("setUserGroupId", rv.userGroupId);
design.groupDetailId = rv.groupDetailId;
this.store.commit(
"addLikeDesignCollectionList",
value
);
this.setLikeDislLike('like',value)
2025-06-03 14:57:18 +08:00
if(index != -1)this.store.commit("deleteDesignCollectionList", index);
2025-05-20 16:47:27 +08:00
if (this.startDesignType === "resDesign") {
this.getHistoryChoose(this.userGroupId, "like");
}
}
this.likeLoading = false;
})
.catch((rv) => {
this.likeLoading = false;
});
},
//不喜欢设计
2025-06-03 14:57:18 +08:00
dislikeDesignCollection(design:any,type:string, index: any) {
2025-05-20 16:47:27 +08:00
let data = {
designId: design.designId || this.designId,
designPythonOutfitId:design.designOutfitId,
groupDetailId: design.groupDetailId || design.id,
timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,
2025-06-19 09:21:32 +08:00
projectId:this.store.state.Workspace.probjects.id,
2025-05-20 16:47:27 +08:00
};
2025-06-03 14:57:18 +08:00
if(type != 'Design'){
this.setNoDesignLike(design,index,type,'disLike')
return
}
2025-05-20 16:47:27 +08:00
if (this.disLikeLoading) {
return;
}
this.disLikeLoading = true;
Https.axiosPost(Https.httpUrls.designDislike, data)
.then((rv: any) => {
if (rv) {
2025-06-18 11:05:23 +08:00
// this.store.commit("addDesignCollectionList", [design]);
2025-05-20 16:47:27 +08:00
this.likeDesignCollectionList.forEach((item:any)=>{
if(item.sort > design.sort){
item.sort-=1
}
})
2025-06-18 11:05:23 +08:00
this.store.commit(
"deleteLikeDesignCollectionList",
index
);
2025-05-20 16:47:27 +08:00
this.setLikeDislLike('disLike',design)
}
this.disLikeLoading = false;
})
.catch((rv) => {
this.disLikeLoading = false;
});
},
//获取选择的组
getHistoryChoose(userGroupId: any, type: any) {
this.isShowMark = true;
let url =
Https.httpUrls.historyChoose + `?userGroupId=${userGroupId}`;
Https.axiosGet(url)
.then((rv: any) => {
this.setPortfolio(rv.portfolioDTO)
this.store.commit("setUserGroupId", rv.userGroupId);
this.dealHistoryChooseData(rv, type);
this.isShowMark = false;
})
.catch((rv) => {
this.isShowMark = false;
});
},
getWorks(userGroupId: any, type: any) {
let data:any = {
"accountId": 0,
"collectionId": 0,
"coverId": 0,
"createDate": "",
"id": userGroupId,
"isDeleted": 0,
"portfolioDes": "",
"portfolioName": "",
"portfolioType": "",
"status": 0,
"updateDate": "",
"userLikeGroupId":''
}
this.isShowMark = true;
Https.axiosPost(Https.httpUrls.setPorfolioChoose, data).then(
(rv: any) => {
this.setPortfolio(rv.portfolioDTO)
this.store.commit("setUserGroupId", rv.userGroupId);
this.dealHistoryChooseData(rv, type);
this.isShowMark = false;
}
).catch((res)=>{
this.isShowMark = false;
});
},
//处理选择组的数据
dealHistoryChooseData(data: any, type: any) {
let collectionData = {
disposeMoodboard: data.collection.moodTemplateId?[{
id:data.collection.moodTemplateId,
imgUrl:data.collection.moodTemplateUrl,
resData:{
name:data.collection.moodTemplateName,
}
}]:[],
moodboardPosition:data.collection.moodboardPosition?JSON.parse(data.collection.moodboardPosition):{},
moodboardFiles: this.dealViewChooseData(
data.collection.moodBoards,"Moodboard"
),
printboardFiles: this.dealViewChooseData(
data.collection.printBoards,"Printboard"
),
generatePrintFiles: [],
colorBoards: this.dealViewChooseColor(
data.collection.colorBoards
),
sketchboardFiles: this.dealViewChooseData(
data.collection.sketchBoards,"Sketchboard"
),
marketingSketchFiles: this.dealViewChooseData(
data.collection.marketingSketchs,""
),
};
this.store.commit("setAllBoardDataChoose", collectionData);
// this.store.commit('clearShowSketchboard')
this.store.commit("setShowSketchboard", data.collection.sketchBoards);
this.store.commit(
"setDesignCollectionId",
data.collection.collectionId
);
if (type === "normal") {
let likeDesignCollectionList = data.userLikeDetails.map(
(v: any) => {
let data = {
...v,
groupDetailId: v.id,
designItemUrl: v.designOutfitUrl,
designItemId: v.designItemId,
};
return data;
}
);
this.store.commit(
"setLikeDesignCollectionList",
likeDesignCollectionList
);
}
this.setSystemDesigner(100)
},
//统一处理选择组的渲染数据
dealViewChooseData(data: any,str:string) {
if (!data) {
return [];
}
let filesList = data.map((v: any) => {
let newData: any = {
imgUrl: v.url?v.url:v.designOutfitUrl,
id: v.id,
status: "done",
resData: v,
type_:{
type1:'material',
type2:v.level1Type
}
};
if (v.level1Type === "Sketchboard") {
newData.pin = v.isPin;
newData.categoryValue = v.level2Type;
newData.level2Type = v.level2Type;
}
if (v.level1Type === "Printboard") {
newData.pin = v.isPin;
newData.level2Type = v.level2Type;
newData.categoryValue = v.level2Type;
}
return newData;
});
return filesList;
},
//统一处理选择组的渲染数据
dealViewChooseColor(data: any) {
let colorList = data.map((v: any) => {
let rgbValue = v.rgbValue.split(" ");
let newData: any = {
id: v.id,
name: v.name,
tcx: v.tcx || "",
rgbValue: {
r: rgbValue[0],
g: rgbValue[1],
b: rgbValue[2],
a: 1,
},
};
if(v.gradient){
newData.gradient = v.gradient;
}else{
delete newData.gradient;
}
return newData;
});
return colorList;
},
//销毁图片详情
setDetailDestroy() {
// let designDetail: any = this.$refs.designDetail;
// designDetail.destroy();
this.detailDestroy = false
},
//打开图片详情
designDetail(
design: any,
index: number,
collectionList: any,
type: string
) {
2025-06-03 14:57:18 +08:00
// if()
2025-05-20 16:47:27 +08:00
if(this.isMove)return
2025-06-03 14:57:18 +08:00
if(design.resultType != "Design"){
this.setEditDesignType(collectionList,index,design.resultType,'edit',type)
return
}
2025-05-20 16:47:27 +08:00
design.designOutfitId = design.designPythonOutfitId?design.designPythonOutfitId:design.designOutfitId
let data = {
design: design,
index: index,
collectionList: collectionList,
type: type,
};
this.detailDestroy = true
nextTick(()=>{
let designDetail: any = this.$refs.designDetail;
designDetail.showDesignDetailModal(data);
})
},
//完成单个图片设计
finishRedesign(event: any) {
let { design, index, type } = event;
2025-06-09 10:25:54 +08:00
if (type === "disLike") {
2025-05-20 16:47:27 +08:00
this.store.commit("setSingleDesignCollectionList", {
index: index,
design: design,
});
} else {
this.store.commit("setSingleLikeDesignCollectionList", {
index: index,
design: design,
});
}
this.setDetailDestroy()
},
setTask(data:any){
this.$emit('setTask',data)
// this.exportModel()
},
setShowHide(str:string){
if(str == 'recycleDomHidden')this.recycleDomHidden = !this.recycleDomHidden
if(str == 'domHidden')this.domHidden = !this.domHidden
2025-06-09 10:25:54 +08:00
// this.setSystemDesigner(0)
2025-05-20 16:47:27 +08:00
}
},
});
</script>
<style lang="less" scoped>
.designPage {
width: 100%;
height: 100%;
// padding-right:5rem;
overflow: initial !important;
position: relative;
.page_content {
position: relative;
.designPage_left_bottom{
position: absolute;
width: 4rem;
height: 7rem;
background: #fff;
border: 2px solid;
border-right: none;
border-radius: 2rem 0 0 2rem;
top: 50%;
transform: translate(-100%,-50%);
left: 100%;
display: flex;
align-items: center;
justify-content: center;
z-index: 2;
cursor: pointer;
>span{
transition: all .3s;
transform: rotate(90deg);
&.active{
transform: rotate(270deg);
}
}
}
.page_content_body {
position: absolute;
width: 100%;
height: 100%;
// padding-bottom: 4rem;
box-sizing: border-box;
z-index:1;
.right_content_header {
display: flex;
justify-content: space-between;
2025-06-09 10:25:54 +08:00
height: 6.5rem;
2025-05-20 16:47:27 +08:00
align-items: center;
padding: 0 3.2rem 0 1.9rem;
background: rgba(255, 255, 255, 0.2);
position: relative;
.right_content_export{
display: flex;
align-items: center;
position: relative;
.icon-xiala{
cursor: pointer;
transition: .3s all;
margin-left: 1rem;
}
.icon_rotate{
-moz-transform: rotate(180deg);
-webkit-transform: rotate(180deg);
transform: rotate(180deg);
animation-direction: 0.5s;
}
.export_nav{
display: flex;
flex-direction: column;
position: absolute;
top: 5.5rem;
width: 100%;
background: #fff;
padding: 1rem;
border: 2px solid;
z-index: 2;
label{
margin: 0;
}
}
}
.content_header_left {
display: flex;
justify-content: space-between;
align-items: center;
.icon-dangqianweizhi {
font-size: 1.6rem;
color: #000;
}
.content_header_des {
font-size: 1.6rem;
color: #000000;
margin-left: 1rem;
font-weight: 900;
}
}
}
2025-06-18 11:05:23 +08:00
2025-05-20 16:47:27 +08:00
.designPage_body {
width: 100%;
height: 100%;
display: flex;
// padding-left: 0.7rem;
box-sizing: border-box;
// overflow: hidden;
.designPage_left {
// width: 44.4rem;
height: 100%;
background: rgba(255, 255, 255, 0.2);
position: relative;
// overflow: hidden;
.designPage_left_content {
height: 100%;
2025-06-11 15:08:17 +08:00
width: 50rem;
// width: 55rem;
2025-05-20 16:47:27 +08:00
overflow: hidden;
// transition: all .3s;
padding-right: 1.2rem;
&.active{
padding-right: 0;
width: 0;
}
.home_left_info {
height: 100%;
display: flex;
background: #f6f6fa;
border-radius: 2rem;
flex-direction: column;
.left_info_content {
width: 100%;
height: calc(100% - 6.9rem);
overflow-y: auto;
&.left_info_content::-webkit-scrollbar {
display: none;
}
.left_info_content_body {
width: 100%;
}
}
.left_info_hint{
display: flex;
span{
font-size: 1.3rem;
display: inline-block;
}
}
}
}
}
.designPage_right {
// width: calc(100% - 44.4rem);
flex: 1;
height: 100%;
width: 100%;
// overflow: hidden;
display: flex;
flex-direction: column;
justify-content: space-between;
position: relative;
.designPage_left_bottom{
border-radius: 0 2rem 2rem 0rem;
left: 2rem;
top: 50%;
left: auto;
right: 0;
transform: translate(100%, -50%);
// top: calc(50% - 10.4rem / 2);
border: 2px solid;
border-left: none;
background: #000;
color: #fff;
flex-direction: column;
&.active{
2025-06-11 15:08:17 +08:00
right: 53rem;
2025-05-20 16:47:27 +08:00
transform: translate(0, -50%);
}
}
.right_top {
padding: 1rem 3.2rem 2rem 1.2rem;
display: flex;
justify-content: space-between;
box-shadow: 0rem 0.2rem 8rem 0rem rgba(238, 238, 244, 0.25);
background: rgba(255, 255, 255, 0.4);
transition: all .3s;
&.active{
overflow: hidden;
padding-top: 0;
padding-bottom: 0;
height: 0;
}
.right_top_left {
display: flex;
align-items: center;
width: 100%;
.button_margin_14 {
margin-left: 1.4rem;
}
.silder{
display: flex;
align-items: center;
.text{
font-weight: 600;
font-size: 1.8rem;
}
.system_silder{
margin: 0 3rem;
width: 12rem;
}
}
}
}
.right_content_block_box{
flex: 1;
display: flex;
overflow: hidden;
}
.right_content_block {
flex: 1;
display: flex;
width: 0;
flex-direction: column;
&.recycleBin{
flex: none;
margin-left: 0;
width: 0;
overflow: hidden;
&.recycleBinShow{
width: auto;
margin-left: 2rem;
}
.right_content_body {
2025-06-11 15:08:17 +08:00
width: 55rem;
2025-06-09 10:25:54 +08:00
// width: 55rem;
2025-05-20 16:47:27 +08:00
.right_content_img_block{
.content_img_block{
width: 16rem;
height: 23rem;
2025-06-18 11:05:23 +08:00
position: relative;
2025-05-20 16:47:27 +08:00
}
}
}
}
&.right_content_block::-webkit-scrollbar{display: none;}
&.active{
overflow: hidden;
}
.right_content_body {
// padding: 0 1.8rem 0 1.2rem;
// height: calc(50% - 4.5rem);
flex: 1;
overflow: auto;
background: #f6f6fa;
border-radius: 2rem;
display: flex;
flex-direction: column;
.right_content_img_block {
// overflow-y: auto;
height: 100%;
flex: 1;
display: flex;
width: auto;
// overflow: hidden;
align-items: center;
// padding-bottom: 1rem;
overflow-x: auto;
justify-content: center;
&.active::-webkit-scrollbar {
display: none;
}
// &.active::-webkit-scrollbar-button:single-button{
// display: none;
// }
// &.active::-webkit-scrollbar {
// /* 竖轴的宽度 */
// width: 1rem;
// /* 横轴的高度 */
// height: 1rem;
// transition: all .3s;
// }
// /* 进度 */
// &.active::-webkit-scrollbar-thumb {
// border-radius: 1rem;
// background: rgba(238, 238, 244, 0);
// }
// /* 轨道 */
// &.active::-webkit-scrollbar-track {
// border-radius: 1rem;
// background: rgba(238, 238, 244, 0);
// }
// &.active:hover {
// // overflow-x: scroll;
// &.active::-webkit-scrollbar-thumb {
// background: #543087;
// }
// /* 轨道 */
// &.active::-webkit-scrollbar-track {
// background: rgba(84, 48, 135,.2);
// }
// }
>div{
display: flex;
flex-wrap: wrap;
// padding: 0 2.8rem 0 0.9rem;
width: 100%;
height: 100%;
// align-content: flex-start;
overflow-x: hidden;
position: relative;
&::-webkit-scrollbar {
display: none;
}
}
.content_img_block {
// width: 24rem;
// height: 37rem;
width: calc(33.33% - 30px);
height: calc((33.33% - 30px) * 1.54);
box-sizing: border-box;
margin: 5px;
// min-height: 271px;
// max-height: 80%;
display: inline-block;
position: relative;
vertical-align: top;
flex-shrink: 0;
display: flex;
align-items: center;
justify-content: center;
position: absolute;
2025-06-18 11:05:23 +08:00
transition: top,left .5s;
// transition: top,left .3s;
2025-06-03 14:57:18 +08:00
&:hover .btn{
display: flex;
2025-05-20 16:47:27 +08:00
}
.content_img_flex {
display: flex;
justify-content: center;
align-items: center;
width: 100%;
height: 100%;
border-radius: 2rem;
border: 2px solid #E0E0E0;
2025-06-03 14:57:18 +08:00
overflow: hidden;
2025-05-20 16:47:27 +08:00
background: #fff;
2025-06-18 11:05:23 +08:00
.content_img_block_child{
position: absolute;
border-radius: 2rem;
border: 2px solid #00000070;
background: #fff;
display: flex;
left: -43%;
transform: translateX(69%);
top: 0rem;
> .childItem{
> .content_img_flex{
border: 2px solid #00000070;
}
position: relative !important;
>img{
}
}
}
2025-05-20 16:47:27 +08:00
}
&.active{
.icon_like,.icon_delete{
display: block;
}
.content_img_flex {
2025-06-18 11:05:23 +08:00
&.Design{
border: 2px solid #000;
}
&.PoseTransfer{
border: 2px solid #f0d9d0;
}
&.ToProductImage{
border: 2px solid #ccece5;
}
&.Relight{
border: 2px solid #ccece5;
}
2025-05-20 16:47:27 +08:00
}
}
.content_img {
height: 100%;
2025-06-11 15:08:17 +08:00
// object-fit: contain;
object-fit: cover;
2025-05-20 16:47:27 +08:00
}
2025-06-03 14:57:18 +08:00
.btn{
2025-05-20 16:47:27 +08:00
top: 1rem;
right: 1rem;
2025-06-03 14:57:18 +08:00
display: flex;
2025-05-20 16:47:27 +08:00
position: absolute;
2025-06-03 14:57:18 +08:00
flex-direction: column;
align-items: center;
> i{
cursor: pointer;
width: 3rem;
height: 3rem;
display: flex;
align-items: center;
justify-content: center;
}
2025-06-18 11:05:23 +08:00
2025-06-03 14:57:18 +08:00
.icon_like,.icon_delete {
font-size: 1.4rem;
cursor: pointer;
}
2025-05-20 16:47:27 +08:00
}
2025-06-03 14:57:18 +08:00
2025-05-20 16:47:27 +08:00
.icon_delete{
top: 5rem;
}
.icon-jushoucang {
color: #000;
}
.icon-jushoucanggift {
// color: rgba(52, 53, 121, 1);
color: #000;
}
}
}
}
}
}
}
}
2025-06-18 11:05:23 +08:00
2025-05-20 16:47:27 +08:00
.page_content_bg {
position: absolute;
width: 100%;
height: 100%;
}
}
.progress_mark {
background: #ffffff;
width: 100%;
height: 100%;
position: fixed;
left: 0;
top: 0;
z-index: 9999;
display: flex;
justify-content: center;
align-items: center;
.mark_content {
text-align: center;
}
}
2025-06-18 11:05:23 +08:00
.btnOpen{
position: absolute;
width: max-content;
left: 30px;
top: 30px;
transform: translateX(-100%);
background: #e4e4e7;
padding: 12px;
border-radius: 12px;
display: none;
z-index: 999;
&.active{
display: block;
}
> .item{
display: flex;
align-items: center;
margin-bottom: 8px;
padding: 8px;
border-radius: 8px;
cursor: pointer;
&:last-child{
margin: 0;
}
> .text{
font-size: 12px;
margin-right: 10px;
}
&:hover{
background: #efeff1;
}
}
}
2025-05-20 16:47:27 +08:00
}
</style>