2025-06-20 11:36:44 +08:00
|
|
|
<template>
|
|
|
|
|
<div class="designToolsModel" ref="designToolsModel" v-show="designTools"></div>
|
|
|
|
|
<a-modal
|
|
|
|
|
class="collection generalModel fullScreen"
|
|
|
|
|
v-model:visible="designTools"
|
|
|
|
|
:footer="null"
|
|
|
|
|
width="100%"
|
|
|
|
|
height="100%"
|
|
|
|
|
:get-container="() => $refs.designToolsModel"
|
|
|
|
|
:maskClosable="false"
|
|
|
|
|
:centered="true"
|
|
|
|
|
:closable="false"
|
|
|
|
|
:mask="false"
|
|
|
|
|
:keyboard="false"
|
2025-06-26 15:41:08 +08:00
|
|
|
:destroyOnClose="true"
|
2025-06-20 11:36:44 +08:00
|
|
|
:zIndex="1000"
|
|
|
|
|
>
|
|
|
|
|
<div class="generalModel_btn">
|
|
|
|
|
<div class="generalModel_closeIcon" @click.stop="cleardata()">
|
|
|
|
|
<svg width="46" height="46" viewBox="0 0 46 46" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
|
|
|
<circle cx="23" cy="23" r="23" fill="#000" fill-opacity="0.3"/>
|
|
|
|
|
<rect x="32.5063" y="12" width="3" height="29" rx="1.5" transform="rotate(45 32.5063 12)" fill="white"/>
|
|
|
|
|
<rect x="34.6274" y="32.5059" width="3" height="29" rx="1.5" transform="rotate(135 34.6274 32.5059)" fill="white"/>
|
|
|
|
|
</svg>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="designOpenrtion_content">
|
|
|
|
|
<!-- <div class="modal_title_text">
|
|
|
|
|
<div>Setting</div>
|
|
|
|
|
</div> -->
|
2025-06-26 15:41:08 +08:00
|
|
|
<div class="collectionBox">
|
2025-06-20 11:36:44 +08:00
|
|
|
<toProductRelight ref="toProduct"
|
|
|
|
|
:productimgMenu="{value:'ToProductImage',label:$t('ProductImg.ProductImage')}"
|
|
|
|
|
:isDesignPage="true"
|
|
|
|
|
@setLike="designLike"
|
|
|
|
|
class="toProduct"
|
2025-07-19 14:04:48 +08:00
|
|
|
:source="source"
|
2025-07-24 20:15:39 +08:00
|
|
|
@unLike="unLike"
|
2025-06-20 11:36:44 +08:00
|
|
|
:isState="openType =='toProduct'"
|
|
|
|
|
v-if="openType == 'toProduct'"
|
|
|
|
|
></toProductRelight>
|
|
|
|
|
<toProductRelight ref="relight"
|
|
|
|
|
:productimgMenu="{value:'Relight',label:$t('ProductImg.Relight')}"
|
|
|
|
|
:isDesignPage="true"
|
|
|
|
|
@setLike="designLike"
|
|
|
|
|
class="relight"
|
2025-07-19 14:04:48 +08:00
|
|
|
:source="source"
|
2025-07-24 20:15:39 +08:00
|
|
|
@unLike="unLike"
|
2025-06-20 11:36:44 +08:00
|
|
|
:isState="openType =='relight'"
|
|
|
|
|
v-if="openType == 'relight'"
|
|
|
|
|
></toProductRelight>
|
2025-07-19 14:04:48 +08:00
|
|
|
<poseTransfer v-if="openType == 'poseTransfer'" :source="source" :isDesignPage="true" @setLike="designLike" ref="poseTransfer"></poseTransfer>
|
2025-06-26 15:41:08 +08:00
|
|
|
<div v-if="openType == 'editCanvas'" class="canvasBox" :class="{editCanvas:openType == 'editCanvas'}">
|
|
|
|
|
<div class="canvas" ref="canvasBox">
|
2025-07-22 18:16:33 +08:00
|
|
|
<editCanvas
|
|
|
|
|
@changeCanvas="changeCanvas"
|
|
|
|
|
:canvasJSON="canvasJSON"
|
|
|
|
|
ref="editCanvas">
|
2025-06-26 15:41:08 +08:00
|
|
|
<template #existsImageList>
|
|
|
|
|
<ExistsImageList :list="canvasSelectList" @select="handleImageSelect" />
|
|
|
|
|
</template>
|
|
|
|
|
</editCanvas>
|
2025-07-24 09:26:27 +08:00
|
|
|
<!-- <canvasAA ></canvasAA> -->
|
|
|
|
|
|
2025-06-26 15:41:08 +08:00
|
|
|
</div>
|
|
|
|
|
<div class="btn">
|
|
|
|
|
<div class="gallery_btn" @click="saveCanvas">Save</div>
|
2025-07-19 14:04:48 +08:00
|
|
|
<div class="gallery_btn" @click="share">Share</div>
|
2025-06-26 15:41:08 +08:00
|
|
|
<div class="gallery_btn" @click="exportElement">Export</div>
|
|
|
|
|
</div>
|
2025-06-23 09:27:29 +08:00
|
|
|
</div>
|
2025-06-20 11:36:44 +08:00
|
|
|
</div>
|
|
|
|
|
</div>
|
2025-07-19 14:04:48 +08:00
|
|
|
<publish ref="publish" @clearPublish="clearPublish"></publish>
|
2025-06-20 11:36:44 +08:00
|
|
|
<div class="mark_loading" v-show="isShowMark">
|
|
|
|
|
<a-spin size="large" />
|
|
|
|
|
</div>
|
|
|
|
|
</a-modal>
|
|
|
|
|
</template>
|
|
|
|
|
<script lang="ts">
|
|
|
|
|
import { defineComponent,computed,ref,provide,nextTick,inject,toRefs, reactive, onBeforeMount} from 'vue'
|
|
|
|
|
import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
|
|
|
|
|
import { Https } from "@/tool/https";
|
|
|
|
|
import { useStore } from "vuex";
|
2025-07-22 18:16:33 +08:00
|
|
|
import { downloadIamge,getMinioUrl } from "@/tool/util";
|
2025-06-20 11:36:44 +08:00
|
|
|
import { useI18n } from 'vue-i18n'
|
|
|
|
|
import toProductRelight from '../tools/toProduct/index.vue'
|
|
|
|
|
import poseTransfer from '../tools/poseTransfer/index.vue'
|
2025-06-23 09:27:29 +08:00
|
|
|
import editCanvas from "@/component/Canvas/CanvasEditor/index.vue";
|
2025-06-26 15:41:08 +08:00
|
|
|
import ExistsImageList from "@/component/Canvas/ExistsImageList/index.vue";
|
|
|
|
|
import JSZip, { forEach } from "jszip";
|
2025-07-19 14:04:48 +08:00
|
|
|
import publish from "@/component/WorksPage/publish.vue";
|
2025-07-24 09:26:27 +08:00
|
|
|
import canvasAA from '@/component/Canvas/canvasExample.vue'
|
|
|
|
|
|
2025-06-20 11:36:44 +08:00
|
|
|
|
|
|
|
|
export default defineComponent({
|
|
|
|
|
components:{
|
2025-07-24 09:26:27 +08:00
|
|
|
toProductRelight,poseTransfer,editCanvas,ExistsImageList,publish,canvasAA
|
2025-06-20 11:36:44 +08:00
|
|
|
},
|
|
|
|
|
props:{
|
2025-07-19 14:04:48 +08:00
|
|
|
source:{
|
|
|
|
|
type:String,
|
|
|
|
|
default:'',
|
|
|
|
|
},
|
2025-06-20 11:36:44 +08:00
|
|
|
},
|
|
|
|
|
emits:['editToolsSuccess'],
|
|
|
|
|
setup(props,{emit}) {
|
|
|
|
|
const store = useStore();
|
|
|
|
|
const data = reactive({
|
|
|
|
|
designTools:false,
|
|
|
|
|
isShowMark:false,
|
|
|
|
|
openType:'',
|
|
|
|
|
selectObject:computed(()=>store.state.Workspace.probjects),//选择的项目
|
2025-07-22 18:16:33 +08:00
|
|
|
canvasJSON:computed(()=>store.state.HomeStoreModule.canvasData.canvas),
|
2025-06-20 11:36:44 +08:00
|
|
|
createProbject:inject('createProbject',()=>{}) as any,
|
|
|
|
|
likeDesignList:[],
|
2025-06-26 15:41:08 +08:00
|
|
|
canvasSelectList:[] as any,
|
|
|
|
|
canvasDetailData:null as any,
|
2025-07-24 20:15:39 +08:00
|
|
|
unLikeList:[],
|
2025-06-20 11:36:44 +08:00
|
|
|
})
|
|
|
|
|
const dataDom = reactive({
|
|
|
|
|
toProduct:null as any,
|
|
|
|
|
relight:null as any,
|
|
|
|
|
poseTransfer:null as any,
|
2025-06-23 09:27:29 +08:00
|
|
|
editCanvas:null as any,
|
2025-07-19 14:04:48 +08:00
|
|
|
publish:null as any,
|
2025-06-20 11:36:44 +08:00
|
|
|
}) as any
|
|
|
|
|
const init = (value:any,list:any)=>{
|
2025-07-19 14:04:48 +08:00
|
|
|
store.commit('toolsClear')
|
2025-06-20 11:36:44 +08:00
|
|
|
data.designTools = true
|
|
|
|
|
data.openType = value
|
2025-06-26 15:41:08 +08:00
|
|
|
if(value == 'editCanvas'){
|
|
|
|
|
getSelectCanvasImg()
|
|
|
|
|
return
|
|
|
|
|
}
|
2025-06-20 11:36:44 +08:00
|
|
|
data.likeDesignList = list
|
|
|
|
|
nextTick(()=>{
|
|
|
|
|
let fileList = [] as any
|
2025-07-19 14:04:48 +08:00
|
|
|
let likeList = [] as any
|
2025-06-20 11:36:44 +08:00
|
|
|
if(value == 'toProduct'){
|
|
|
|
|
list.forEach((item:any) => {
|
|
|
|
|
item.type = 'DesignOutfit'
|
|
|
|
|
fileList.push(item)
|
2025-07-19 14:04:48 +08:00
|
|
|
item.childList.forEach((child:any) => {
|
|
|
|
|
if(child.resultType == 'ToProductImage'){
|
|
|
|
|
likeList.push(child)
|
|
|
|
|
}
|
|
|
|
|
});
|
2025-06-20 11:36:44 +08:00
|
|
|
});
|
|
|
|
|
}else if(value == 'relight' || value == 'poseTransfer'){
|
2025-07-19 14:04:48 +08:00
|
|
|
console.log(list)
|
2025-06-20 11:36:44 +08:00
|
|
|
list.forEach((item:any) => {
|
|
|
|
|
if(item.childList){
|
|
|
|
|
item.childList.forEach((child:any) => {
|
|
|
|
|
if(child.resultType == 'ToProductImage' || child.resultType == 'Relight'){
|
|
|
|
|
fileList.push(child)
|
|
|
|
|
}
|
2025-07-19 14:04:48 +08:00
|
|
|
console.log(fileList)
|
|
|
|
|
if(child.resultType == 'Relight' && value == 'relight'){
|
|
|
|
|
likeList.push(child)
|
|
|
|
|
}else if(child.resultType == 'PoseTransfer' && value == 'poseTransfer'){
|
|
|
|
|
likeList.push(child)
|
|
|
|
|
}
|
|
|
|
|
console.log(likeList)
|
2025-06-20 11:36:44 +08:00
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
2025-07-19 14:04:48 +08:00
|
|
|
let likeData = {
|
|
|
|
|
likedList: likeList,
|
|
|
|
|
str:'add',
|
|
|
|
|
index:-1,
|
|
|
|
|
}
|
|
|
|
|
if(data.openType == 'toProduct'){
|
|
|
|
|
store.commit("setToProductImage", likeData);
|
|
|
|
|
}else if(data.openType == 'relight'){
|
|
|
|
|
store.commit("setRelightList", likeData);
|
|
|
|
|
}else if(data.openType == 'poseTransfer'){
|
|
|
|
|
console.log(likeData)
|
|
|
|
|
store.commit("setPoseTransfer", likeData);
|
|
|
|
|
}
|
2025-06-20 11:36:44 +08:00
|
|
|
dataDom[value].openSetData(fileList)
|
|
|
|
|
})
|
|
|
|
|
}
|
2025-07-24 20:15:39 +08:00
|
|
|
const unLike = (item)=>{
|
|
|
|
|
data.unLikeList.push(item)
|
|
|
|
|
}
|
2025-06-20 11:36:44 +08:00
|
|
|
let cleardata = async ()=>{
|
2025-07-19 14:04:48 +08:00
|
|
|
let list = []
|
|
|
|
|
if(data.openType == 'toProduct'){
|
|
|
|
|
list = store.state.HomeStoreModule.toProductImageList.likedList
|
|
|
|
|
}else if(data.openType == 'relight'){
|
|
|
|
|
list = store.state.HomeStoreModule.relightList.likedList
|
|
|
|
|
}else if(data.openType == 'poseTransfer'){
|
|
|
|
|
list = store.state.HomeStoreModule.poseTransfer.likedList
|
|
|
|
|
}
|
|
|
|
|
let generateCourse = list.filter((item)=>item.oldSort)
|
|
|
|
|
generateCourse = generateCourse.map(item => {
|
|
|
|
|
return item.oldSort ? { ...item, sort: item.oldSort } : item;
|
|
|
|
|
});
|
|
|
|
|
let emitData = {
|
|
|
|
|
status:'add',
|
2025-07-24 20:15:39 +08:00
|
|
|
addList:generateCourse,
|
|
|
|
|
deleteList:data.unLikeList,
|
2025-07-19 14:04:48 +08:00
|
|
|
}
|
|
|
|
|
emit('editToolsSuccess',emitData)
|
2025-06-20 11:36:44 +08:00
|
|
|
data.openType = ''
|
|
|
|
|
data.designTools = false
|
2025-07-24 20:15:39 +08:00
|
|
|
data.unLikeList = []
|
2025-07-19 14:04:48 +08:00
|
|
|
store.commit('toolsClear')
|
2025-06-20 11:36:44 +08:00
|
|
|
}
|
|
|
|
|
const designLike = ()=>{
|
2025-06-26 15:41:08 +08:00
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2025-06-20 11:36:44 +08:00
|
|
|
|
2025-06-26 15:41:08 +08:00
|
|
|
//画布相关
|
|
|
|
|
const getSelectCanvasImg = ()=>{
|
2025-07-19 14:04:48 +08:00
|
|
|
data.canvasSelectList = []
|
2025-06-26 15:41:08 +08:00
|
|
|
let allCollection = store.state.UploadFilesModule.allBoardData
|
2025-07-19 14:04:48 +08:00
|
|
|
console.log(allCollection)
|
2025-06-26 15:41:08 +08:00
|
|
|
let allCollectionStr = [
|
|
|
|
|
{value:'disposeMoodboard',name:'Entirety Moodboard'},
|
|
|
|
|
{value:'moodboardFiles',name:'Moodboard'},
|
|
|
|
|
{value:'printboardFiles',name:'Printboard'},
|
|
|
|
|
{value:'sketchboardFiles',name:'Sketchboard'},
|
|
|
|
|
]
|
|
|
|
|
allCollectionStr.forEach((itemStr:any)=>{
|
|
|
|
|
let list = [] as any
|
|
|
|
|
allCollection[itemStr.value].forEach((imgItem)=>{
|
|
|
|
|
list.push({url:imgItem.url || imgItem.imgUrl})
|
|
|
|
|
})
|
|
|
|
|
let obj = {
|
|
|
|
|
value:itemStr.value,
|
|
|
|
|
type:itemStr.name,
|
|
|
|
|
imgList:list,
|
|
|
|
|
}
|
|
|
|
|
if(list.length > 0){
|
|
|
|
|
data.canvasSelectList.push(obj)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
let designData = store.state.HomeStoreModule.likeDesignCollectionList
|
|
|
|
|
if(designData.length > 0){
|
|
|
|
|
let list = [] as any
|
|
|
|
|
designData.forEach((item:any)=>{
|
|
|
|
|
list.push({url:item.designOutfitUrl || item.url})
|
|
|
|
|
if(item.childList.length > 0){
|
|
|
|
|
item.childList.forEach((childItem)=>{
|
|
|
|
|
list.push({url:childItem.designOutfitUrl || childItem.url})
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
let obj = {
|
|
|
|
|
value:'design',
|
|
|
|
|
type:'Design',
|
|
|
|
|
imgList:list
|
|
|
|
|
}
|
|
|
|
|
if(list.length > 0){
|
|
|
|
|
data.canvasSelectList.push(obj)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
let mannquinList = data.selectObject.model
|
|
|
|
|
let list = [] as any
|
|
|
|
|
mannquinList.forEach((item:any)=>{
|
|
|
|
|
list.push({url:item.url})
|
|
|
|
|
})
|
|
|
|
|
let obj = {
|
|
|
|
|
value:'mannquin',
|
|
|
|
|
type:'Mannquin',
|
|
|
|
|
imgList:list
|
|
|
|
|
}
|
|
|
|
|
if(list.length > 0){
|
|
|
|
|
data.canvasSelectList.push(obj)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
const handleImageSelect = (value:any)=>{
|
|
|
|
|
dataDom.editCanvas.addImageToLayer(value.url)
|
|
|
|
|
}
|
|
|
|
|
const saveCanvas = ()=>{
|
|
|
|
|
let canvasJSON = dataDom.editCanvas.getJSON()
|
2025-07-22 18:16:33 +08:00
|
|
|
let canvasData = JSON.parse(canvasJSON)
|
2025-07-24 09:26:27 +08:00
|
|
|
|
2025-07-22 18:16:33 +08:00
|
|
|
if(!canvasData)return
|
|
|
|
|
canvasData.canvas.objects.forEach((objectsItem:any) => {
|
|
|
|
|
if(objectsItem.type == 'image')objectsItem.minioUrl = getMinioUrl(objectsItem.src)
|
|
|
|
|
});
|
|
|
|
|
console.log(canvasData)
|
|
|
|
|
let blob = new Blob([JSON.stringify(canvasData)], { type: "application/json" });
|
2025-06-26 15:41:08 +08:00
|
|
|
let formData = new FormData();
|
|
|
|
|
formData.append("file", blob, "data.json");
|
|
|
|
|
formData.append("module", "canvas");
|
|
|
|
|
formData.append("projectId", store.state.Workspace.probjects.id)
|
|
|
|
|
let config = {
|
|
|
|
|
headers: { "Content-Type": "multipart/form-data", Accept: "*/*" },
|
|
|
|
|
};
|
|
|
|
|
Https.axiosPost(Https.httpUrls.exportSave, formData, config).then(
|
|
|
|
|
(rv) => {
|
|
|
|
|
console.log(rv)
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
const exportElement = async ()=>{
|
|
|
|
|
//设置导出
|
|
|
|
|
console.log(data.canvasDetailData)
|
|
|
|
|
let img = [] as any;
|
|
|
|
|
if(data.canvasDetailData.commandManager.undoStack.length > 0){
|
2025-07-19 14:04:48 +08:00
|
|
|
await dataDom.editCanvas.exportImage({isContainBg:true,isContainFixed:false}).then((rv:any)=>{
|
2025-06-26 15:41:08 +08:00
|
|
|
var imageDataURL = rv
|
|
|
|
|
img.push({
|
|
|
|
|
imgUrl: imageDataURL,
|
|
|
|
|
name: "collection.png",
|
|
|
|
|
});
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
for(let i = 0; i < data.canvasSelectList.length;i++){
|
|
|
|
|
let item = data.canvasSelectList[i]
|
|
|
|
|
item.imgList.forEach((imgItem:any,index:any)=>{
|
|
|
|
|
let nameTail = imgItem.url?.split(".").pop().split("?").shift();
|
|
|
|
|
img.push({
|
|
|
|
|
imgUrl:imgItem.url,
|
2025-07-24 09:26:27 +08:00
|
|
|
name:`${item.type}${index}.${nameTail?nameTail:'png'}`
|
2025-06-26 15:41:08 +08:00
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
console.log(img)
|
|
|
|
|
if(img.length>0)downImg(img);
|
|
|
|
|
}
|
|
|
|
|
let getImgArrayBuffer = (url) => {
|
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
|
//通过请求获取文件blob格式
|
|
|
|
|
let xmlhttp = new XMLHttpRequest();
|
|
|
|
|
xmlhttp.open("GET", url, true);
|
|
|
|
|
xmlhttp.responseType = "blob";
|
|
|
|
|
xmlhttp.withCredentials = false;
|
|
|
|
|
xmlhttp.onload = function () {
|
|
|
|
|
if (this.status == 200) {
|
|
|
|
|
resolve(this.response);
|
|
|
|
|
} else {
|
|
|
|
|
reject(this.status);
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
xmlhttp.send();
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
let downImg = (imagesParams:any) => {
|
|
|
|
|
let zip = new JSZip();
|
|
|
|
|
let cache = {};
|
|
|
|
|
let promises = [];
|
|
|
|
|
for (let item of imagesParams) {
|
|
|
|
|
const promise = getImgArrayBuffer(item.imgUrl).then((value) => {
|
|
|
|
|
// 下载文件, 并存成ArrayBuffer对象(blob)
|
|
|
|
|
zip.file(item.name, value, { binary: true }); // 逐个添加文件
|
|
|
|
|
cache[item.title] = value;
|
|
|
|
|
})
|
|
|
|
|
promises.push(promise);
|
|
|
|
|
}
|
|
|
|
|
Promise.all(promises)
|
|
|
|
|
.then(() => {
|
|
|
|
|
function downloadBlob(blob, filename) {
|
|
|
|
|
const link = document.createElement('a');
|
|
|
|
|
const url = URL.createObjectURL(blob);
|
|
|
|
|
link.href = url;
|
|
|
|
|
link.download = filename;
|
|
|
|
|
document.body.appendChild(link);
|
|
|
|
|
link.click();
|
|
|
|
|
URL.revokeObjectURL(url);
|
|
|
|
|
document.body.removeChild(link);
|
|
|
|
|
}
|
|
|
|
|
zip.generateAsync({ type: "blob" }).then((content) => {
|
|
|
|
|
// 生成二进制流
|
|
|
|
|
downloadBlob(content,'DesignFiles')
|
|
|
|
|
// FileSaver.saveAs(content, "DesignFiles"); // 利用file-saver保存文件 自定义文件名
|
|
|
|
|
data.isShowMark = false;
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
})
|
|
|
|
|
.catch((res) => {
|
|
|
|
|
// message.warning(t('HomeView.jsContent3'));
|
|
|
|
|
data.isShowMark = false;
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
const changeCanvas = (value:any)=>{
|
|
|
|
|
data.canvasDetailData = value
|
2025-07-19 14:04:48 +08:00
|
|
|
}
|
|
|
|
|
const share = async ()=>{
|
|
|
|
|
var imageDataURL = '';
|
2025-07-24 09:26:27 +08:00
|
|
|
imageDataURL = await dataDom.editCanvas.exportImage({isContainBg:true,isContainFixed:false})
|
2025-07-22 23:22:41 +08:00
|
|
|
console.log(imageDataURL)
|
2025-07-19 14:04:48 +08:00
|
|
|
let value = {
|
|
|
|
|
imgUrl:imageDataURL,
|
2025-07-22 23:22:41 +08:00
|
|
|
userlikeGroupId:'',
|
2025-07-19 14:04:48 +08:00
|
|
|
}
|
|
|
|
|
dataDom.publish.init(value)
|
|
|
|
|
}
|
|
|
|
|
const clearPublish = ()=>{
|
|
|
|
|
|
2025-06-20 11:36:44 +08:00
|
|
|
}
|
|
|
|
|
return{
|
|
|
|
|
...toRefs(dataDom),
|
|
|
|
|
...toRefs(data),
|
|
|
|
|
cleardata,
|
|
|
|
|
init,
|
|
|
|
|
designLike,
|
2025-06-26 15:41:08 +08:00
|
|
|
handleImageSelect,
|
|
|
|
|
saveCanvas,
|
|
|
|
|
exportElement,
|
|
|
|
|
changeCanvas,
|
2025-07-19 14:04:48 +08:00
|
|
|
share,
|
|
|
|
|
clearPublish,
|
2025-07-24 20:15:39 +08:00
|
|
|
unLike,
|
2025-06-20 11:36:44 +08:00
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
provide() {
|
|
|
|
|
return {
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
</script>
|
|
|
|
|
<style lang="less" scoped>
|
|
|
|
|
.designToolsModel{
|
|
|
|
|
position: relative;
|
|
|
|
|
position: absolute;
|
|
|
|
|
left: 50%;
|
|
|
|
|
top: 50%;
|
|
|
|
|
transform: translate(-50%, -50%);
|
|
|
|
|
width: 100%;
|
|
|
|
|
height: 100%;
|
|
|
|
|
z-index: 1000;
|
|
|
|
|
:deep(>div){
|
|
|
|
|
|
|
|
|
|
// position: absolute;
|
|
|
|
|
// .ant-modal-mask{
|
|
|
|
|
// position: absolute;
|
|
|
|
|
// }
|
|
|
|
|
.ant-modal-wrap,.ant-modal-mask{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
> .ant-modal-root{
|
|
|
|
|
> .ant-modal-centered{
|
|
|
|
|
> .fullScreen{
|
|
|
|
|
> .ant-modal-content{
|
|
|
|
|
box-shadow: none;
|
|
|
|
|
> .ant-modal-body{
|
|
|
|
|
padding: 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.designOpenrtion_content{
|
|
|
|
|
height: 100%;
|
|
|
|
|
> .collectionBox{
|
|
|
|
|
height: 100%;
|
2025-07-24 20:15:39 +08:00
|
|
|
display: flex;
|
2025-06-23 09:27:29 +08:00
|
|
|
> .canvasBox{
|
|
|
|
|
height: 100%;
|
2025-07-24 20:15:39 +08:00
|
|
|
width: 100%;
|
|
|
|
|
// flex:1;
|
|
|
|
|
// width: 99rem;
|
|
|
|
|
// height: 80rem;
|
2025-06-26 15:41:08 +08:00
|
|
|
display: flex;
|
2025-07-24 20:15:39 +08:00
|
|
|
overflow: hidden;
|
|
|
|
|
position: relative;
|
2025-06-26 15:41:08 +08:00
|
|
|
&.editCanvas{
|
|
|
|
|
padding-top: 5rem;
|
|
|
|
|
display: flex;
|
|
|
|
|
}
|
|
|
|
|
> .canvas{
|
|
|
|
|
position: relative;
|
|
|
|
|
flex: 1;
|
|
|
|
|
}
|
|
|
|
|
> .btn{
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
justify-content: flex-end;
|
|
|
|
|
> div{
|
|
|
|
|
margin: 1rem;
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-06-23 09:27:29 +08:00
|
|
|
}
|
2025-06-20 11:36:44 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.fullScreen{
|
|
|
|
|
.generalModel_btn {
|
|
|
|
|
.generalModel_closeIcon{
|
|
|
|
|
transform: translate(-10%, 10%);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
</style>
|