部分bug修复和对话中的图片过期处理

This commit is contained in:
X1627315083
2025-06-20 11:36:44 +08:00
parent c054dca2e8
commit 318fcc634f
21 changed files with 477 additions and 133 deletions

View File

@@ -1943,7 +1943,7 @@ textarea:focus {
.accountEdit_page .input_border .input_box_btnBox.sketch .upload_item, .accountEdit_page .input_border .input_box_btnBox.sketch .upload_item,
.generalMenu_printModel_upload .input_border .input_box_btnBox.sketch .upload_item, .generalMenu_printModel_upload .input_border .input_box_btnBox.sketch .upload_item,
.generate .input_border .input_box_btnBox.sketch .upload_item { .generate .input_border .input_box_btnBox.sketch .upload_item {
width: 6rem; width: 8rem;
} }
.collection_modal_body .input_border .input_box_btnBox.sketch .upload_item .upload_file_item, .collection_modal_body .input_border .input_box_btnBox.sketch .upload_item .upload_file_item,
.design_detail_modal_component .input_border .input_box_btnBox.sketch .upload_item .upload_file_item, .design_detail_modal_component .input_border .input_box_btnBox.sketch .upload_item .upload_file_item,
@@ -1954,8 +1954,8 @@ textarea:focus {
.accountEdit_page .input_border .input_box_btnBox.sketch .upload_item .upload_file_item, .accountEdit_page .input_border .input_box_btnBox.sketch .upload_item .upload_file_item,
.generalMenu_printModel_upload .input_border .input_box_btnBox.sketch .upload_item .upload_file_item, .generalMenu_printModel_upload .input_border .input_box_btnBox.sketch .upload_item .upload_file_item,
.generate .input_border .input_box_btnBox.sketch .upload_item .upload_file_item { .generate .input_border .input_box_btnBox.sketch .upload_item .upload_file_item {
height: 6rem; height: 8rem;
width: 6rem; width: 8rem;
} }
.collection_modal_body .input_border .input_box_btnBox > .textarea, .collection_modal_body .input_border .input_box_btnBox > .textarea,
.design_detail_modal_component .input_border .input_box_btnBox > .textarea, .design_detail_modal_component .input_border .input_box_btnBox > .textarea,
@@ -2248,9 +2248,11 @@ textarea:focus {
margin-left: 2rem; margin-left: 2rem;
display: flex; display: flex;
font-size: 1.6rem; font-size: 1.6rem;
padding: 1rem 2rem;
box-sizing: content-box; box-sizing: content-box;
justify-content: center; justify-content: center;
padding: 0 2rem;
line-height: 5.4rem;
height: 5.4rem;
} }
.generage_btn_box .generage_btn { .generage_btn_box .generage_btn {
width: 10rem; width: 10rem;

View File

@@ -2004,10 +2004,10 @@ textarea:focus{
border: none; border: none;
background-color: rgba(0, 0, 0, 0); background-color: rgba(0, 0, 0, 0);
.upload_item{ .upload_item{
width: 6rem; width: 8rem;
.upload_file_item{ .upload_file_item{
height: 6rem; height: 8rem;
width: 6rem; width: 8rem;
} }
} }
} }
@@ -2171,9 +2171,11 @@ textarea:focus{
margin-left: 2rem; margin-left: 2rem;
display: flex; display: flex;
font-size: 1.6rem; font-size: 1.6rem;
padding: 1rem 2rem;
box-sizing: content-box; box-sizing: content-box;
justify-content: center; justify-content: center;
padding: 0 2rem;
line-height: 5.4rem;
height: 5.4rem;
} }
.generage_btn{ .generage_btn{
width: 10rem; width: 10rem;

View File

@@ -273,6 +273,8 @@ export default defineComponent({
border: 2px solid #000; border: 2px solid #000;
} }
>.box{ >.box{
width: 100%;
height: 100%;
> .background{ > .background{
flex: 1; flex: 1;
height: 7rem; height: 7rem;

View File

@@ -131,13 +131,18 @@
<div class="generage_btn_box"> <div class="generage_btn_box">
<div class="generage_btn started_btn" v-show="!isGenerate"> <div class="generage_btn started_btn" v-show="!isGenerate">
<i class="fi fi-bs-magic-wand" style="background-color: #000; font-size: 2.3rem; flex: 1;margin: 0;" @click="getgenerate()"></i> <i class="fi fi-bs-magic-wand" style="background-color: #000; font-size: 2.3rem; flex: 1;margin: 0;" @click="getgenerate()"></i>
<div class="icon iconfont icon-xiala" :class="{active:speedState}" @click.stop="openSpeed"></div> <div class="icon iconfont icon-xiala"
v-show="(type_.type2 == 'Sketchboard') ||
(type_.type2 == 'Printboard' && scene.value == 'Pattern') || type_.type2 == 'Moodboard'" :class="{active:speedState}" @click.stop="openSpeed"></div>
<div class="content" v-show="speedState && scene?.value != 'extract'"> <div class="content" v-show="speedState && scene?.value != 'extract'">
<div v-for="item in speedList" v-show="(type_.type2 == 'Moodboard' && item?.value != 'flux') || (type_.type2 == 'Sketchboard' && item?.value != 'flux') || type_.type2 == 'Printboard'" :key="item.value" :class="{active:item.value == speedData.value}" @click="setSpeed(item)" :title="item.title">{{ item.label }}</div> <div v-for="item in speedList"
v-show="(type_.type2 == 'Moodboard' && item?.value != 'flux') ||
(type_.type2 == 'Sketchboard' && item?.value != 'flux') ||
(type_.type2 == 'Printboard')"
:key="item.value" :class="{active:item.value == speedData.value}" @click.stop="setSpeed(item)" :title="item.title">{{ item.label }}</div>
</div> </div>
<div class="content" v-show="speedState && scene?.value == 'extract'"> <div class="content" v-show="speedState && scene?.value == 'extract'">
<div v-for="item in extractList" :key="item.value" :class="{active:item.value == speedData.value}" @click="setSpeed(item)" :title="item.title">{{ item.label }}</div> <div v-for="item in extractList" :key="item.value" :class="{active:item.value == speedData.value}" @click.stop="setSpeed(item)" :title="item.title">{{ item.label }}</div>
</div> </div>
</div> </div>
<div class="generage_btn started_btn" v-show="isGenerate && !remGenerate"> <div class="generage_btn started_btn" v-show="isGenerate && !remGenerate">
@@ -296,10 +301,6 @@ export default defineComponent({
], ],
extractList:[ extractList:[
{ {
title:'This method may produce slight discrepancies between the extracted line art and the original image.',
label:'High',
value:'',
},{
title:'Note: The extracted line art might have minor variations from the original.', title:'Note: The extracted line art might have minor variations from the original.',
label:'FLUX', label:'FLUX',
value:'flux', value:'flux',
@@ -323,13 +324,17 @@ export default defineComponent({
watch(()=>props.scene,(newVal,oldVal)=>{ watch(()=>props.scene,(newVal,oldVal)=>{
if(newVal.value == 'extract'){ if(newVal.value == 'extract'){
speed.speedData = speed.extractList[0] speed.speedData = speed.extractList[0]
}else if(newVal.value == 'Logo' || newVal.value == 'Slogan'){
speed.speedData.value = ''
speed.speedData.label = ''
}else{ }else{
speed.speedData = speed.speedList[0] speed.speedData = speed.speedList[0]
} }
speed.speedState = false
}) })
const setSpeed = (item:any)=>{ const setSpeed = (item:any)=>{
speed.speedData = item
speed.speedState = false speed.speedState = false
speed.speedData = item
} }
return { return {
userDetail, userDetail,

View File

@@ -31,7 +31,7 @@
</div> </div>
<div class="selectImgList_content_bottom"> <div class="selectImgList_content_bottom">
<div class="content_bottom_item" v-for="item in imgList" @click="setItemSelect(item)"> <div class="content_bottom_item" v-for="item in imgList" @click="setItemSelect(item)">
<img :src="item.imgUrl" alt="" :class="{active:item.isChecked}"> <img :src="item?.imgUrl || item?.url" alt="" :class="{active:item.isChecked}">
</div> </div>
</div> </div>
<div class="selectImgList_ok"> <div class="selectImgList_ok">

View File

@@ -55,7 +55,7 @@
<input type="text" v-model="renameText"> <input type="text" v-model="renameText">
<i class="fi fi-br-check" @click="submitRename(row)"></i> <i class="fi fi-br-check" @click="submitRename(row)"></i>
</div> </div>
<div v-else> <div v-else style="white-space: nowrap;text-overflow: ellipsis;overflow: hidden;">
{{header?.fun?header.fun(row[header.value]) : row[header.value]}} {{header?.fun?header.fun(row[header.value]) : row[header.value]}}
</div> </div>
</div> </div>
@@ -193,23 +193,25 @@ export default defineComponent({
},{ },{
name:'Quantity generated', name:'Quantity generated',
value:'nums', value:'nums',
},{ },
{
name:'Creation time', name:'Creation time',
value:'updateTime', value:'createTime',
fun:(value:any)=>{ fun:(value:any)=>{
if(!value)return if(!value)return
return value.split('T')[0] + ' ' + value.split('T')[1].split('.')[0] return value.split('T')[0] + ' ' + value.split('T')[1].split('.')[0]
} }
},{ },
{
name:'Start time', name:'Start time',
value:'updateTime', value:'startTime',
fun:(value:any)=>{ fun:(value:any)=>{
//没开始内容为 - //没开始内容为 -
if(!value)return if(!value)return
return value.split('T')[0] + ' ' + value.split('T')[1].split('.')[0] return value.split('T')[0] + ' ' + value.split('T')[1].split('.')[0]
} }
},{ },{
name:'End time', name:'Update time',
value:'updateTime', value:'updateTime',
fun:(value:any)=>{ fun:(value:any)=>{
if(!value)return if(!value)return
@@ -360,14 +362,14 @@ export default defineComponent({
},1000) },1000)
} }
const submitGetContentList = (project:any)=>{ const submitGetContentList = (project:any)=>{
data.isGetContentList = true // data.isGetContentList = true
if(project){ // if(project){
data.projectData = project // data.projectData = project
}else{ // }else{
data.projectData = null // data.projectData = null
} // }
data.currentPage = 1 // data.currentPage = 1
getContentList() // getContentList()
if(data.settingGetHistory)data.settingGetHistory() if(data.settingGetHistory)data.settingGetHistory()
} }
const handleChange = (event:any,value:any)=>{ const handleChange = (event:any,value:any)=>{

View File

@@ -9,7 +9,7 @@
<div class="chatBox"> <div class="chatBox">
<div class="chattingRecords" v-show="chatList.length > 0 && isChattingRecords"> <div class="chattingRecords" v-show="chatList.length > 0 && isChattingRecords">
<div class="itemBox" ref="chatBox"> <div class="itemBox" ref="chatBox">
<div class="item" v-for="item in chatList" :class="{user:item.role == 'user'}"> <div class="item" v-for="item,index in chatList" :class="{user:item.role == 'user'}">
<div class="textBox"> <div class="textBox">
<div class="icon"> <div class="icon">
<img src="@/assets/images/icon/favicon.png" alt=""> <img src="@/assets/images/icon/favicon.png" alt="">
@@ -29,7 +29,11 @@
</div> </div>
</div> </div>
<div class="imgBox"> <div class="imgBox">
<img v-if="item.content?.img?.length > 0" v-for="imgItem in item.content?.img" :src="imgItem.minioUrl" alt=""> <!-- <span v-show="item.content?.img?.length > 0">
{{ item.content?.img }}
</span> -->
<img v-if="item.content?.img?.length > 0" v-for="imgItem,imgIndex in item.content?.img" :src="imgItem.minioUrl" alt="" @error="imgError(imgItem,index,imgIndex,$event)">
</div> </div>
<div class="colorBox"> <div class="colorBox">
<div v-if="item.content?.color?.length > 0" class="item" v-for="colorItem in item.content?.color"> <div v-if="item.content?.color?.length > 0" class="item" v-for="colorItem in item.content?.color">
@@ -76,6 +80,7 @@
import { defineComponent,computed,ref,inject,nextTick,createVNode,toRefs, reactive, watch} from 'vue' import { defineComponent,computed,ref,inject,nextTick,createVNode,toRefs, reactive, watch} from 'vue'
import { ExclamationCircleOutlined } from '@ant-design/icons-vue'; import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
import { Https } from "@/tool/https"; import { Https } from "@/tool/https";
import {getMinioUrl} from '@/tool/util'
import { useStore } from "vuex"; import { useStore } from "vuex";
import { Modal,message,Upload,CascaderProps } from 'ant-design-vue'; import { Modal,message,Upload,CascaderProps } from 'ant-design-vue';
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
@@ -157,7 +162,7 @@ export default defineComponent({
}else if(eventData.type == 'think'){ }else if(eventData.type == 'think'){
data.chatList[data.chatList.length-1].content.think+=eventData.content data.chatList[data.chatList.length-1].content.think+=eventData.content
}else if(eventData.type == "tools_response"){ }else if(eventData.type == "tools_response"){
let nameList = ['moodboard','printboard','sketchboard','generate_color_code'] let nameList = ['moodboard','printboard','sketchboard','generate_color_code','search_sketch_img']
let nameData = { let nameData = {
moodboard:'moodBoard', moodboard:'moodBoard',
printboard:'printBoard', printboard:'printBoard',
@@ -171,14 +176,17 @@ export default defineComponent({
getData = 'colorBoard' getData = 'colorBoard'
}else{ }else{
data.chatList[data.chatList.length-1].content.img = JSON.parse(JSON.parse(event.data).content).receiveCollectionElementList data.chatList[data.chatList.length-1].content.img = JSON.parse(JSON.parse(event.data).content).receiveCollectionElementList
getData = nameData[eventData.tools_name] if(eventData.tools_name == 'search_sketch_img'){
getData = 'sketchBoard'
}else{
getData = nameData[eventData.tools_name]
}
} }
data.chatList.push({content:{message:''},role:'system'}) data.chatList.push({content:{message:''},role:'system'})
}else if(eventData.tools_name == 'design_control_signal'){ }else if(eventData.tools_name == 'design_control_signal'){
emit('chatChange',{type:eventData.tools_name,design:true}) emit('chatChange',{type:eventData.tools_name,design:true})
} }
emit('chatChange',{type:eventData.type,module:getData}) emit('chatChange',{type:eventData.type,module:getData})
} }
//emit('chatChange',{type:JSON.parse(event.data).status}) //emit('chatChange',{type:JSON.parse(event.data).status})
}; };
@@ -306,6 +314,19 @@ export default defineComponent({
const deleteFile = (item:any,index:number)=>{ const deleteFile = (item:any,index:number)=>{
data.filList.splice(index,1) data.filList.splice(index,1)
} }
const imgError = (item:any,index:number,imgIndex:number,event:any)=>{
if(!item?.loadNum) item.loadNum = 0
if(item?.loadNum >= 1)return
let value = {
path:getMinioUrl(item.minioUrl)
}
Https.axiosGet(Https.httpUrls.refreshMinioUrl,{params:value}).then((rv:any)=>{
event.target.src = rv
item.loadNum += 1
data.chatList[index].content.img[imgIndex].monioUrl = rv
})
}
return{ return{
...toRefs(dataDom), ...toRefs(dataDom),
...toRefs(data), ...toRefs(data),
@@ -314,6 +335,7 @@ export default defineComponent({
openChattingRecords, openChattingRecords,
handleFileUpload, handleFileUpload,
deleteFile, deleteFile,
imgError,
} }
}, },
provide() { provide() {

View File

@@ -94,7 +94,7 @@ export default defineComponent({
openType:'', openType:'',
collectionStep:1, collectionStep:1,
selectObject:computed(()=>store.state.Workspace.probjects),//选择的项目 selectObject:computed(()=>store.state.Workspace.probjects),//选择的项目
createProbject:inject('createProbject') as any createProbject:inject('createProbject',()=>{}) as any
}) })
let driver__:any = computed(()=>{ let driver__:any = computed(()=>{

View File

@@ -806,8 +806,18 @@ export default defineComponent({
this.setColorboardList(colorList) this.setColorboardList(colorList)
}, },
setPrintImg(){ setPrintImg(){
let printImgListData = JSON.parse(JSON.stringify(this.store?.state?.UploadFilesModule.printboard)) let printImgListData = []
let moodImgListData = JSON.parse(JSON.stringify(this.store?.state?.UploadFilesModule.moodboard)) if(this.store?.state?.UploadFilesModule.printboard == 0){
printImgListData = JSON.parse(JSON.stringify(this.store?.state?.UploadFilesModule.allBoardData.printboardFiles))
}else{
printImgListData = JSON.parse(JSON.stringify(this.store?.state?.UploadFilesModule.printboard))
}
let moodImgListData = []
if(this.store?.state?.UploadFilesModule.printboard == 0){
moodImgListData = JSON.parse(JSON.stringify(this.store?.state?.UploadFilesModule.allBoardData.moodboardFiles))
}else{
moodImgListData = JSON.parse(JSON.stringify(this.store?.state?.UploadFilesModule.moodboard))
}
let imgListData = [...moodImgListData,...printImgListData] let imgListData = [...moodImgListData,...printImgListData]
if(imgListData?.length==0){ if(imgListData?.length==0){
message.info(this.t('ColorboardUpload.jsContent6')) message.info(this.t('ColorboardUpload.jsContent6'))
@@ -821,7 +831,7 @@ export default defineComponent({
setImgGetColor(data){ setImgGetColor(data){
data.status = 'await' data.status = 'await'
this.fileList[0] = data this.fileList[0] = data
fetch(data.imgUrl) fetch(data.imgUrl || data.url)
.then(response => response.blob()) .then(response => response.blob())
.then(blob => { .then(blob => {
const reader = new FileReader(); const reader = new FileReader();

View File

@@ -506,7 +506,8 @@ setup(props:any,{emit}) {
status:productimg.generateSuccess.status, status:productimg.generateSuccess.status,
listType:productimg.generateSuccess.listType, listType:productimg.generateSuccess.listType,
isIndex:productimg.generateSuccess.isIndex, isIndex:productimg.generateSuccess.isIndex,
userLikeSortId:productimg.generateSuccess.userLikeSortId userLikeSortId:productimg.generateSuccess.userLikeSortId,
parentId:productimg.generateSuccess.parentId
} }
emit('addGenerateImg',data) emit('addGenerateImg',data)
@@ -588,14 +589,16 @@ methods: {
} }
// this. // this.
console.log(list[index])
this.generateSuccess.userLikeSortId = list[index].userLikeSortId this.generateSuccess.userLikeSortId = list[index].userLikeSortId
this.generateSuccess.parentId = list[index].parentId
this.generateSuccess.productimgIsProductimg = !!this.generateSuccess.productimgIsProductimg this.generateSuccess.productimgIsProductimg = !!this.generateSuccess.productimgIsProductimg
this.generateSuccess.productimgRemProductimg = !!this.generateSuccess.productimgRemProductimg this.generateSuccess.productimgRemProductimg = !!this.generateSuccess.productimgRemProductimg
this.generateSuccess.isShowMark = !!this.generateSuccess.isShowMark this.generateSuccess.isShowMark = !!this.generateSuccess.isShowMark
this.generateSuccess.remPrductimgTime = this.generateSuccess.remPrductimgTime?this.generateSuccess.remPrductimgTime:null this.generateSuccess.remPrductimgTime = this.generateSuccess.remPrductimgTime?this.generateSuccess.remPrductimgTime:null
this.generateSuccess.prductimgTime = this.generateSuccess.prductimgTime?this.generateSuccess.prductimgTime:null this.generateSuccess.prductimgTime = this.generateSuccess.prductimgTime?this.generateSuccess.prductimgTime:null
this.scaleImage = true this.scaleImage = true
if(this.poseList.length == 0){ if(this.poseList.length == 0 && list[index].type == 'PoseTransfer'){
this.getPoseList() this.getPoseList()
} }
// if(status == 'edit'){ // if(status == 'edit'){
@@ -623,7 +626,11 @@ methods: {
}else{ }else{
this.speedList = this.speedTypeList.toPorductImg this.speedList = this.speedTypeList.toPorductImg
} }
this.speedData = JSON.parse(JSON.stringify(this.speedList[0])) if(this.scaleImageList[index].resultType == "Relight"){
this.speedData = JSON.parse(JSON.stringify(this.speedList[1]))
}else{
this.speedData = JSON.parse(JSON.stringify(this.speedList[0]))
}
// if(this.scaleImageList[index]?.resultType == 'ToProductImage')this.scaleImageList[index].sourceUrl = this.scaleImageList[index].imgUrl // if(this.scaleImageList[index]?.resultType == 'ToProductImage')this.scaleImageList[index].sourceUrl = this.scaleImageList[index].imgUrl
this.scaleImageIndex = index this.scaleImageIndex = index
if(dialogueIndex)this.robotAssits = dialogueIndex if(dialogueIndex)this.robotAssits = dialogueIndex

View File

@@ -37,9 +37,20 @@
<!-- <div class="right_top" ref="hidden" :class="{'active':domHidden}"> --> <!-- <div class="right_top" ref="hidden" :class="{'active':domHidden}"> -->
<div class="right_top_left"> <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()">
<!-- <div class="gallery_btn white Guide_1_15" @click="designNewCollection()"> -->
{{ $t('HomeView.Design') }} {{ $t('HomeView.Design') }}
</div> </div>
<div class="generage_btn_box">
<div class="generage_btn started_btn" style="margin-left: 2rem;">
<div class="" @click="openEditTools()" style="margin-left: 1rem;">
Tools
</div>
<div class="icon iconfont icon-xiala" :class="{active:speedState}" @click.stop="openSpeed"></div>
<div class="content" v-show="speedState">
<div v-for="item in speedList" :key="item.value" style="font-size: 1.6rem;" :class="{active:item.value == speedData.value}" @click.stop="setSpeed(item)" :title="item.title">{{ item.label }}</div>
</div>
</div>
</div>
<!-- <div class="gallery_btn white button_margin_14 Guide_1_30" v-show="designCollectionId" <!-- <div class="gallery_btn white button_margin_14 Guide_1_30" v-show="designCollectionId"
@click="resDesignCollection()"> @click="resDesignCollection()">
{{ $t('HomeView.Redesign') }} {{ $t('HomeView.Redesign') }}
@@ -212,23 +223,24 @@
</div> </div>
</div> </div>
<div ref="designBtn" class="btnOpen" @click.stop="()=>openEditBtnId=-1" :class="{active:openEditBtnId == selectEditBtn?.designItemId||openEditBtnId == selectEditBtn?.id}"> <div ref="designBtn" class="btnOpen" @click.stop="()=>openEditBtnId=-1" :class="{active:openEditBtnId == selectEditBtn?.designItemId||openEditBtnId == selectEditBtn?.id}">
<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 class="item" v-show="selectEditBtn?.resultType == 'ToProductImage' || selectEditBtn?.resultType == 'Relight'" @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 == 'ToProductImage' || selectEditBtn?.resultType == 'Relight'" @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" @click="dislikeDesignCollection(selectEditBtn,selectEditBtn?.resultType,selectEditBtnIndex)"> <div class="item" @click="dislikeDesignCollection(selectEditBtn,selectEditBtn?.resultType,selectEditBtnIndex)">
<div class="text">Delete</div> <div class="text">Delete</div>
<i class="fi fi-rr-trash icon_delete"> <i class="fi fi-rr-trash icon_delete">
</i> </i>
</div> </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> </div>
<collectionModal ref="collectionModal"></collectionModal> <collectionModal ref="collectionModal"></collectionModal>
<!-- <DesignDetail ref="designDetail" @finishRedesign="finishRedesign"></DesignDetail> --> <!-- <DesignDetail ref="designDetail" @finishRedesign="finishRedesign"></DesignDetail> -->
@@ -250,6 +262,7 @@
}" }"
@setGenerateAwait="setGenerateAwait" @setGenerateAwait="setGenerateAwait"
:isProductimg="true"></editDesignType> :isProductimg="true"></editDesignType>
<designTools ref="designTools" @editToolsSuccess="editToolsSuccess"></designTools>
</div> </div>
</template> </template>
@@ -275,6 +288,7 @@ import { useI18n } from "vue-i18n";
import { getMousePosition } from "@/tool/mdEvent"; import { getMousePosition } from "@/tool/mdEvent";
import { removeClass } from "element-plus/es/utils"; import { removeClass } from "element-plus/es/utils";
import collectionModal from './collection.vue' import collectionModal from './collection.vue'
import designTools from './tools.vue'
const FileSaver = require("file-saver"); const FileSaver = require("file-saver");
export default defineComponent({ export default defineComponent({
@@ -287,6 +301,7 @@ export default defineComponent({
generalCanvas, generalCanvas,
DesignDetailcopy, DesignDetailcopy,
editDesignType, editDesignType,
designTools,
}, },
emits:['setTask'], emits:['setTask'],
activated() { activated() {
@@ -383,7 +398,50 @@ export default defineComponent({
collectionModal:null as any, collectionModal:null as any,
editDesignType:null as any, editDesignType:null as any,
designBtn:null as any, designBtn:null as any,
designTools:null as any,
}) })
//可使用的tools类型
let speed = reactive({
speedList:[
{
label:'To Product Image',
value:'toProduct',
},{
label:'Transfer Pose',
value:'poseTransfer',
},{
label:'Relight',
value:'relight',
},
],
speedState:false,
speedData:{
label:'To Product Image',
value:'toProduct',
},
})
const openSpeed = ()=>{
speed.speedState = !speed.speedState
if(speed.speedState){
document.addEventListener('click',openSpeed)
}else{
document.removeEventListener('click',openSpeed)
}
}
const setSpeed = (item:any)=>{
speed.speedState = false
speed.speedData = item
}
const openEditTools = ()=>{
dataDom.designTools.init(speed.speedData.value,likeDesignCollectionList.value)
}
const editToolsSuccess = ()=>{
nextTick().then(()=>{
designData.isUnfold = true
uploadLikeDom()
})
}
const designData = reactive({ const designData = reactive({
openEditBtnId:-1, openEditBtnId:-1,
selectEditBtn:null as any, selectEditBtn:null as any,
@@ -404,7 +462,6 @@ export default defineComponent({
selectDesign:null as any,//当前选择的design selectDesign:null as any,//当前选择的design
isUnfold:false, isUnfold:false,
selectLikeDesign:[] as any, selectLikeDesign:[] as any,
//类型 //类型
resultTypeList:[ resultTypeList:[
{ {
@@ -791,7 +848,7 @@ export default defineComponent({
userGroupId:data.userGroupId || data.id, userGroupId:data.userGroupId || data.id,
firstFrameUrl:data.firstFrameUrl, firstFrameUrl:data.firstFrameUrl,
gifUrl:data.gifUrl, gifUrl:data.gifUrl,
userLikeSortId:data.userLikeSortId, parentId:data.parentId || data.userLikeSortId,
} }
let list = [] let list = []
if(data.listType == 'disLike'){ if(data.listType == 'disLike'){
@@ -837,7 +894,7 @@ export default defineComponent({
let data = { let data = {
toProductImageResultId:[(design.designItemId || design.id)], toProductImageResultId:[(design.designItemId || design.id)],
projectId: store.state.Workspace.probjects.id, projectId: store.state.Workspace.probjects.id,
collectionSortParentId:designData?.selectDesign?.userLikeSortId || design.parentId, collectionSortParentId:designData?.selectDesign?.parentId || design.parentId,
} as any } as any
let params = {} as any let params = {} as any
if(type == 'ToProductImage' || type == 'Relight'){ if(type == 'ToProductImage' || type == 'Relight'){
@@ -853,14 +910,14 @@ export default defineComponent({
likeOrDislike:'like', likeOrDislike:'like',
transformedId:design.id, transformedId:design.id,
projectId:store.state.Workspace.probjects.id, projectId:store.state.Workspace.probjects.id,
collectionSortParentId:designData?.selectDesign?.userLikeSortId || design.parentId, collectionSortParentId:design.parentId || designData?.selectDesign?.userLikeSortId,
} }
}else{ }else{
params = { params = {
likeOrDislike:'dislike', likeOrDislike:'dislike',
transformedId:design.id, transformedId:design.id,
projectId:store.state.Workspace.probjects.id, projectId:store.state.Workspace.probjects.id,
collectionSortParentId:designData?.selectDesign?.userLikeSortId || design.parentId, collectionSortParentId:design.parentId || designData?.selectDesign?.userLikeSortId,
} }
} }
}else{ }else{
@@ -883,13 +940,14 @@ export default defineComponent({
}else{ }else{
likeDesignCollectionList.value.forEach((item:any)=>{ likeDesignCollectionList.value.forEach((item:any)=>{
if(item.resultType == 'Design' && item.userLikeSortId == designData.selectDesign.userLikeSortId){ if(item.resultType == 'Design' && item.userLikeSortId == designData.selectDesign.userLikeSortId){
item.childList = item.childList.filter((item:any)=>{ item.childList = item.childList.filter((childItem:any)=>{
return item.id != design.id return childItem.id != design.id
}) })
} }
}) })
} }
nextTick().then(()=>{ nextTick().then(()=>{
designData.isUnfold = true
uploadLikeDom() uploadLikeDom()
}) })
@@ -1093,6 +1151,13 @@ export default defineComponent({
...toRefs(collItemSize), ...toRefs(collItemSize),
...toRefs(designData), ...toRefs(designData),
...toRefs(dataDom), ...toRefs(dataDom),
//编辑tools相关
...toRefs(speed),
openSpeed,
setSpeed,
openEditTools,
editToolsSuccess,
likeItemDom, likeItemDom,
collItemDom, collItemDom,
domHidden, domHidden,
@@ -1215,6 +1280,8 @@ export default defineComponent({
this.setShowHide('recycleDomHidden') this.setShowHide('recycleDomHidden')
}) })
} }
this.isUnfold = true
this.setUnfold()
}, },
directives:{ directives:{
mousewheel:{ mousewheel:{

View File

@@ -0,0 +1,181 @@
<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"
:destroyOnClose="false"
: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> -->
<div class="collectionBox">
<toProductRelight ref="toProduct"
:productimgMenu="{value:'ToProductImage',label:$t('ProductImg.ProductImage')}"
:isDesignPage="true"
@setLike="designLike"
class="toProduct"
:isState="openType =='toProduct'"
v-if="openType == 'toProduct'"
></toProductRelight>
<toProductRelight ref="relight"
:productimgMenu="{value:'Relight',label:$t('ProductImg.Relight')}"
:isDesignPage="true"
@setLike="designLike"
class="relight"
:isState="openType =='relight'"
v-if="openType == 'relight'"
></toProductRelight>
<poseTransfer v-if="openType == 'poseTransfer'" :isDesignPage="true" @setLike="designLike" ref="poseTransfer"></poseTransfer>
</div>
</div>
<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";
import { useI18n } from 'vue-i18n'
import toProductRelight from '../tools/toProduct/index.vue'
import poseTransfer from '../tools/poseTransfer/index.vue'
export default defineComponent({
components:{
toProductRelight,poseTransfer
},
props:{
},
emits:['editToolsSuccess'],
setup(props,{emit}) {
const store = useStore();
const data = reactive({
designTools:false,
isShowMark:false,
openType:'',
selectObject:computed(()=>store.state.Workspace.probjects),//选择的项目
createProbject:inject('createProbject',()=>{}) as any,
likeDesignList:[],
})
const dataDom = reactive({
toProduct:null as any,
relight:null as any,
poseTransfer:null as any,
}) as any
const init = (value:any,list:any)=>{
data.designTools = true
data.openType = value
data.likeDesignList = list
console.log(list)
nextTick(()=>{
let fileList = [] as any
if(value == 'toProduct'){
list.forEach((item:any) => {
item.type = 'DesignOutfit'
fileList.push(item)
});
}else if(value == 'relight' || value == 'poseTransfer'){
list.forEach((item:any) => {
if(item.childList){
item.childList.forEach((child:any) => {
if(child.resultType == 'ToProductImage' || child.resultType == 'Relight'){
fileList.push(child)
}
});
}
});
}
dataDom[value].openSetData(fileList)
})
}
let cleardata = async ()=>{
data.openType = ''
data.likeDesignList = []
data.designTools = false
}
const designLike = ()=>{
}
return{
...toRefs(dataDom),
...toRefs(data),
cleardata,
init,
designLike,
}
},
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%;
}
}
.fullScreen{
.generalModel_btn {
.generalModel_closeIcon{
transform: translate(-10%, 10%);
}
}
}
}
</style>

View File

@@ -450,6 +450,7 @@ export default defineComponent({
let queue = [] as any let queue = [] as any
let start = false let start = false
const chatChange = (value:any)=>{ const chatChange = (value:any)=>{
if(value.type == 'design_control_signal' && dataDom.design){ if(value.type == 'design_control_signal' && dataDom.design){
queue.push( queue.push(
{ {

View File

@@ -126,8 +126,10 @@ export default defineComponent({
} }
const addChatContent = (item:any)=>{ const addChatContent = (item:any)=>{
if((data.textarea.value?.length + item.length) > 10000)return if((data.textarea.value?.length + item.length) > 10000)return
data.chatContent += item // data.chatContent += item
data.textarea.value += item // data.textarea.value += item
data.chatContent = item
data.textarea.value = item
} }
const sendChat = ()=>{ const sendChat = ()=>{
if(!data.chatContent)return if(!data.chatContent)return
@@ -215,7 +217,8 @@ export default defineComponent({
data.chatOrSetting = str data.chatOrSetting = str
} }
const setProject = (item:any)=>{ const setProject = (item:any)=>{
router.push(`home?history=${item.id}`) emit('newProject',item)
// router.push(`home?history=${item.id}`)
} }
onMounted(()=>{ onMounted(()=>{
store.commit('createProbject') store.commit('createProbject')

View File

@@ -67,7 +67,7 @@
<div class="gallery_btn" v-show="!imgOrThree" @click="setImgOrThree(true)">3D view</div> <div class="gallery_btn" v-show="!imgOrThree" @click="setImgOrThree(true)">3D view</div>
<div class="gallery_btn" v-show="imgOrThree" @click="setImgOrThree(false)">Img view</div> <div class="gallery_btn" v-show="imgOrThree" @click="setImgOrThree(false)">Img view</div>
</div> </div>
<div class="flatPatterm" v-show="selectModel.id != -1"> <div class="flatPatterm" v-if="userDetail.systemUser == 6 || userDetail.systemUser == 5" v-show="selectModel.id != -1">
<div class="heard">Flat pattern</div> <div class="heard">Flat pattern</div>
<div class="modelBox"> <div class="modelBox">
<div class="img"> <div class="img">
@@ -112,6 +112,7 @@ export default defineComponent({
// printCatecoryList:computed(()=>{ // printCatecoryList:computed(()=>{
// return store.state.UserHabit.printType // return store.state.UserHabit.printType
// }), // }),
userDetail:computed(()=>store.state.UserHabit.userDetail),//选择的项目
selectObject:computed(()=>store.state.Workspace.probjects),//选择的项目 selectObject:computed(()=>store.state.Workspace.probjects),//选择的项目
patternMaking3D:computed(()=>store.state.HomeStoreModule.patternMaking3D),//选择的项目 patternMaking3D:computed(()=>store.state.HomeStoreModule.patternMaking3D),//选择的项目
modelList:[] as any, modelList:[] as any,
@@ -137,7 +138,7 @@ export default defineComponent({
data.isNoData = false data.isNoData = false
data.isShowMark = false data.isShowMark = false
} }
const createProbject:any = inject('createProbject') as any const createProbject:any = inject('createProbject',()=>{}) as any
const setSelectModel = async (item:any)=>{ const setSelectModel = async (item:any)=>{
if(!data.selectObject.id)await createProbject() if(!data.selectObject.id)await createProbject()
data.isShowMark = true data.isShowMark = true

View File

@@ -28,7 +28,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="upload_item item"> <div class="upload_item item" v-show="!isDesignPage">
<div class="upload_file_item"> <div class="upload_file_item">
<a-upload <a-upload
:action="getUploadUrl() + '/api/history/toProductImageElementUpload'" :action="getUploadUrl() + '/api/history/toProductImageElementUpload'"
@@ -134,7 +134,10 @@ export default defineComponent({
// selectList, // selectList,
}, },
props:{ props:{
isDesignPage:{
type:Boolean,
default:false,
},
}, },
emits:[], emits:[],
setup(props,{emit}) { setup(props,{emit}) {
@@ -150,7 +153,8 @@ export default defineComponent({
selectImg:{}, selectImg:{},
token:getCookie('token'), token:getCookie('token'),
upload:{ upload:{
projectId:computed(()=>store.state.Workspace.probjects.id) projectId:computed(()=>store.state.Workspace.probjects.id),
CollectionType:'PoseTransfer',
}, },
waitList:[], waitList:[],
likeList:computed(()=>store.state.HomeStoreModule.poseTransfer.likedList), likeList:computed(()=>store.state.HomeStoreModule.poseTransfer.likedList),
@@ -164,6 +168,8 @@ export default defineComponent({
}) })
watch(()=>store.state.HomeStoreModule.uploadElement.length,(newVal,oldVal)=>{ watch(()=>store.state.HomeStoreModule.uploadElement.length,(newVal,oldVal)=>{
data.fileList = store.state.HomeStoreModule.uploadElement data.fileList = store.state.HomeStoreModule.uploadElement
data.fileList[0].isChecked = true
data.selectImg = data.fileList[0]
}) })
watch(()=>store.state.HomeStoreModule.poseTransfer.list.length,(newVal,oldVal)=>{ watch(()=>store.state.HomeStoreModule.poseTransfer.list.length,(newVal,oldVal)=>{
let list = store.state.HomeStoreModule.poseTransfer.list let list = store.state.HomeStoreModule.poseTransfer.list
@@ -192,7 +198,7 @@ export default defineComponent({
}, },
}) })
const setIsShowMark:any = inject('setIsShowMark') const setIsShowMark:any = inject('setIsShowMark')
const createProbject:any = inject('createProbject') const createProbject:any = inject('createProbject',()=>{})
const dataDom = reactive({ const dataDom = reactive({
generalDragLeft:null as any, generalDragLeft:null as any,
generalDragRight:null as any, generalDragRight:null as any,
@@ -209,7 +215,11 @@ export default defineComponent({
item.isChecked = true item.isChecked = true
if(item.url || item.imgUrl)data.selectImg.minioUrl = getMinioUrl(item.url || item.imgUrl) if(item.url || item.imgUrl)data.selectImg.minioUrl = getMinioUrl(item.url || item.imgUrl)
} }
const openSetData = ()=>{ const openSetData = (designList:any)=>{
if(props.isDesignPage){
data.fileList = designList
return
}
// dataDom.generalDrag.openSetData() // dataDom.generalDrag.openSetData()
data.currentList = store.state.UploadFilesModule.modularData.toProduct data.currentList = store.state.UploadFilesModule.modularData.toProduct
data.currentList = data.currentList?data.currentList:[] data.currentList = data.currentList?data.currentList:[]
@@ -341,6 +351,7 @@ export default defineComponent({
}); });
} }
} }
let isSelectObject = false
let beforeUpload = async (file: any)=>{ let beforeUpload = async (file: any)=>{
const isJpgOrPng = const isJpgOrPng =
file.type === "image/jpeg" || file.type === "image/jpeg" ||
@@ -354,7 +365,8 @@ export default defineComponent({
if (!isLt2M) { if (!isLt2M) {
message.info(useI18n().t('MoodboardUpload.jsContent4')); message.info(useI18n().t('MoodboardUpload.jsContent4'));
} }
if(!data.upload.projectId){ if(!data.upload.projectId && !isSelectObject){
isSelectObject = true
await createProbject() await createProbject()
} }
return (isJpgOrPng && isLt2M && data.upload.projectId) || Upload.LIST_IGNORE; return (isJpgOrPng && isLt2M && data.upload.projectId) || Upload.LIST_IGNORE;
@@ -422,12 +434,14 @@ export default defineComponent({
likeOrDislike:'like', likeOrDislike:'like',
transformedId:item.id, transformedId:item.id,
projectId:store.state.Workspace.probjects.id, projectId:store.state.Workspace.probjects.id,
collectionSortParentId:props.isDesignPage?item.parentId:'',
} }
}else{ }else{
value = { value = {
likeOrDislike:'dislike', likeOrDislike:'dislike',
transformedId:item.id, transformedId:item.id,
projectId:store.state.Workspace.probjects.id, projectId:store.state.Workspace.probjects.id,
collectionSortParentId:props.isDesignPage?item.parentId:'',
} }
} }
Https.axiosPost(Https.httpUrls.poselikeOrDisike, {},{params:value}).then( Https.axiosPost(Https.httpUrls.poselikeOrDisike, {},{params:value}).then(
@@ -455,9 +469,9 @@ export default defineComponent({
}); });
} }
const selectPose = (item:any)=>{ const selectPose = (item:any)=>{
data.poseList.forEach((listItem:any)=>listItem.isChecked = false)
item.isChecked = true item.isChecked = true
data.selectPose = item?.id || 1 data.selectPose = item?.id || 1
data.poseList.forEach((listItem:any)=>listItem.isChecked = false)
} }
onMounted(()=>{ onMounted(()=>{
// showViewVideo({url:'https://www.minio.aida.com.hk:12025/api/v1/download-shared-object/aHR0cHM6Ly93d3cubWluaW8uYWlkYS5jb20uaGs6MTIwMjQvYWlkYS11c2Vycy84OS9wb3NlX3RyYW5zZm9ybV92aWRlby8xMjMtODkubXA0P1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9N0tOVDdNWlNLWkRXM1RVOEJZVlklMkYyMDI1MDQwOCUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTA0MDhUMDUxOTM1WiZYLUFtei1FeHBpcmVzPTQzMTk5JlgtQW16LVNlY3VyaXR5LVRva2VuPWV5SmhiR2NpT2lKSVV6VXhNaUlzSW5SNWNDSTZJa3BYVkNKOS5leUpoWTJObGMzTkxaWGtpT2lJM1MwNVVOMDFhVTB0YVJGY3pWRlU0UWxsV1dTSXNJbVY0Y0NJNk1UYzBOREV4T0RneE9Td2ljR0Z5Wlc1MElqb2lZV1J0YVc0aWZRLmY0Z3RoTU1BeC1GUnM3eGhWNFdjTUFCUW5lU19BVkIxUDlYbnJQbEFNWUFsVnJwY3RpYXgtU2cyY2FkZHZ0a0VCOU1NbWxGeUlIbU90aGhUWDlqN2lnJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZ2ZXJzaW9uSWQ9bnVsbCZYLUFtei1TaWduYXR1cmU9Yjg5YmQ4ZDg5M2I4ZjBjYmYxZDI3NDFjZmY0NGRiZGNmYWM2NmU0ZGM2OGIwYzQzZDA2OGI4YjYzZjE5YjhhOA'}) // showViewVideo({url:'https://www.minio.aida.com.hk:12025/api/v1/download-shared-object/aHR0cHM6Ly93d3cubWluaW8uYWlkYS5jb20uaGs6MTIwMjQvYWlkYS11c2Vycy84OS9wb3NlX3RyYW5zZm9ybV92aWRlby8xMjMtODkubXA0P1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9N0tOVDdNWlNLWkRXM1RVOEJZVlklMkYyMDI1MDQwOCUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTA0MDhUMDUxOTM1WiZYLUFtei1FeHBpcmVzPTQzMTk5JlgtQW16LVNlY3VyaXR5LVRva2VuPWV5SmhiR2NpT2lKSVV6VXhNaUlzSW5SNWNDSTZJa3BYVkNKOS5leUpoWTJObGMzTkxaWGtpT2lJM1MwNVVOMDFhVTB0YVJGY3pWRlU0UWxsV1dTSXNJbVY0Y0NJNk1UYzBOREV4T0RneE9Td2ljR0Z5Wlc1MElqb2lZV1J0YVc0aWZRLmY0Z3RoTU1BeC1GUnM3eGhWNFdjTUFCUW5lU19BVkIxUDlYbnJQbEFNWUFsVnJwY3RpYXgtU2cyY2FkZHZ0a0VCOU1NbWxGeUlIbU90aGhUWDlqN2lnJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZ2ZXJzaW9uSWQ9bnVsbCZYLUFtei1TaWduYXR1cmU9Yjg5YmQ4ZDg5M2I4ZjBjYmYxZDI3NDFjZmY0NGRiZGNmYWM2NmU0ZGM2OGIwYzQzZDA2OGI4YjYzZjE5YjhhOA'})

View File

@@ -23,7 +23,7 @@
<div class="" v-if="item.status == 'uploading'" style="display: flex;align-items: center;"> <div class="" v-if="item.status == 'uploading'" style="display: flex;align-items: center;">
<a-spin size="large" /> <a-spin size="large" />
</div> </div>
<img v-show="item.status != 'uploading'" :src="item.imgUrl || item.url" alt=""> <img v-show="item.status != 'uploading'" :src="item.designOutfitUrl || item.imgUrl || item.url" alt="">
<div v-show="item.status != 'uploading'" class="btnBox"> <div v-show="item.status != 'uploading'" class="btnBox">
<div :class="{active:item.isChecked}"> <div :class="{active:item.isChecked}">
<i class="fi fi-br-check"></i> <i class="fi fi-br-check"></i>
@@ -34,7 +34,7 @@
</div> </div>
<!-- <a-checkbox v-model:checked="item.isChecked"></a-checkbox> --> <!-- <a-checkbox v-model:checked="item.isChecked"></a-checkbox> -->
</div> </div>
<div class="upload_item item"> <div class="upload_item item" v-show="!isDesignPage">
<div class="upload_file_item"> <div class="upload_file_item">
<a-upload <a-upload
:action="uploadUrl + '/api/history/toProductImageElementUpload'" :action="uploadUrl + '/api/history/toProductImageElementUpload'"
@@ -147,7 +147,7 @@
</span> </span>
</div> </div>
<div class="content"> <div class="content">
<generalDrag ref="generalDragLeft" :type="productimgMenu.value" @setBtn="selectSetBtn" :isDelete="false" :isLike="true" :list="likeList[productimgMenu.value]"></generalDrag> <generalDrag ref="generalDragLeft" :type="productimgMenu.value" :isCopy="!isDesignPage" @setBtn="selectSetBtn" :isDelete="false" :isLike="true" :list="likeList[productimgMenu.value]"></generalDrag>
</div> </div>
<!-- </div> --> <!-- </div> -->
@@ -167,7 +167,7 @@
</span> </span>
</div> </div>
<div class="content"> <div class="content">
<generalDrag ref="generalDragRight" :type="productimgMenu.value" @setBtn="generateSetBtn" :list="generateList" :showMark="isShowMark"></generalDrag> <generalDrag ref="generalDragRight" :type="productimgMenu.value" :isCopy="!isDesignPage" @setBtn="generateSetBtn" :list="generateList" :showMark="isShowMark"></generalDrag>
</div> </div>
</div> </div>
</div> </div>
@@ -210,7 +210,24 @@ export default defineComponent({
scaleImage, scaleImage,
generalMenu,UpgradePlan,generalDrag generalMenu,UpgradePlan,generalDrag
}, },
props: ['setTask','productimgMenu'], props:{
setTask:{
type:Object,
default:()=>{
return {}
}
},
productimgMenu:{
type:Object,
default:()=>{
return {}
}
},
isDesignPage:{
type:Boolean,
default:false,
},
},
setup(props,{emit}) { setup(props,{emit}) {
const store = useStore(); const store = useStore();
let userDetail:any= computed(()=>{ let userDetail:any= computed(()=>{
@@ -224,7 +241,7 @@ export default defineComponent({
return store.state.Guide.guide return store.state.Guide.guide
}) })
const route = useRoute() const route = useRoute()
const createProbject:any = inject('createProbject') const createProbject:any = inject('createProbject',()=>{})
let productImgData:any = reactive({ let productImgData:any = reactive({
isShowMark:false, isShowMark:false,
fileList:{}, fileList:{},
@@ -283,6 +300,7 @@ export default defineComponent({
}, },
); );
watch(()=>store.state.HomeStoreModule.uploadElement.length,(newVal,oldVal)=>{ watch(()=>store.state.HomeStoreModule.uploadElement.length,(newVal,oldVal)=>{
if(props.isDesignPage)return
productImgData.fileList[props.productimgMenu.value] = store.state.HomeStoreModule.uploadElement productImgData.fileList[props.productimgMenu.value] = store.state.HomeStoreModule.uploadElement
}) })
const productImgDom = reactive({ const productImgDom = reactive({
@@ -315,7 +333,6 @@ export default defineComponent({
} }
]) ])
let RelightDirection:any = ref(RelightDirectionList.value[0].value) let RelightDirection:any = ref(RelightDirectionList.value[0].value)
let selectList:any = ref({})
// let likeDesignCollectionList: any = computed(() => { // let likeDesignCollectionList: any = computed(() => {
// return store.state.HomeStoreModule.likeDesignCollectionList; // return store.state.HomeStoreModule.likeDesignCollectionList;
// }); // });
@@ -323,14 +340,17 @@ export default defineComponent({
return store.state.UploadFilesModule.modularData; return store.state.UploadFilesModule.modularData;
}); });
let userlikeGroupId = 0 let userlikeGroupId = 0
const openSetData = ()=>{ const openSetData = (designList:any)=>{
// cleardata() // cleardata()
if(props.productimgMenu.value == 'ToProductImage'){ // if(props.productimgMenu.value == 'ToProductImage'){
selectList.value['ToProductImage'] = JSON.parse(JSON.stringify(selectDesignList.value.design.likeData)) // selectList.value['ToProductImage'] = JSON.parse(JSON.stringify(selectDesignList.value.design.likeData))
}else if(props.productimgMenu.value == 'Relight'){ // }else if(props.productimgMenu.value == 'Relight'){
selectList.value['Relight'] = JSON.parse(JSON.stringify(selectDesignList.value.toProduct)) // selectList.value['Relight'] = JSON.parse(JSON.stringify(selectDesignList.value.toProduct))
// }
if(props.isDesignPage){
productImgData.fileList[props.productimgMenu.value] = designList
return
} }
userlikeGroupId = selectDesignList.value.userlikeGroupId userlikeGroupId = selectDesignList.value.userlikeGroupId
// getLikeProductImage(selectDesignList.value.userlikeGroupId) // getLikeProductImage(selectDesignList.value.userlikeGroupId)
productImgDom.generalDragLeft.setItemPosition() productImgDom.generalDragLeft.setItemPosition()
@@ -378,7 +398,6 @@ export default defineComponent({
} }
let cleardata = ()=>{ let cleardata = ()=>{
productImgData.generateList = [] productImgData.generateList = []
selectList.value = {}
// props.productimgMenu = productimgMenuList.value[0] // props.productimgMenu = productimgMenuList.value[0]
} }
@@ -404,6 +423,7 @@ export default defineComponent({
bor = false bor = false
} }
} }
let isSelectObject = false
let beforeUpload = async (file: any)=>{ let beforeUpload = async (file: any)=>{
const isJpgOrPng = const isJpgOrPng =
file.type === "image/jpeg" || file.type === "image/jpeg" ||
@@ -417,10 +437,12 @@ export default defineComponent({
if (!isLt2M) { if (!isLt2M) {
message.info(useI18n().t('MoodboardUpload.jsContent4')); message.info(useI18n().t('MoodboardUpload.jsContent4'));
} }
if(!productImgData.selectObject.id){ if(!productImgData.selectObject.id && !isSelectObject){
isSelectObject = true
productImgData.selectObject.id = await createProbject() productImgData.selectObject.id = await createProbject()
upload.value = { upload.value = {
projectId:productImgData.selectObject.id projectId:productImgData.selectObject.id,
CollectionType:props.productimgMenu.value,
} }
} }
return (isJpgOrPng && isLt2M) || Upload.LIST_IGNORE; return (isJpgOrPng && isLt2M) || Upload.LIST_IGNORE;
@@ -446,7 +468,9 @@ export default defineComponent({
let likeFile = (item:any,str:any,index:any) =>{ let likeFile = (item:any,str:any,index:any) =>{
let url let url
let data = { let data = {
toProductImageResultId:[item.id] toProductImageResultId:[item.id],
projectId: store.state.Workspace.probjects.id,
collectionSortParentId:props.isDesignPage?item.parentId:'',
} }
if(str == 'like'){ if(str == 'like'){
url = Https.httpUrls.productImageLike url = Https.httpUrls.productImageLike
@@ -504,26 +528,17 @@ export default defineComponent({
if(productImgData.fileList[props.productimgMenu.value]){ if(productImgData.fileList[props.productimgMenu.value]){
productImgData.fileList[props.productimgMenu.value].forEach((item:any)=>{ productImgData.fileList[props.productimgMenu.value].forEach((item:any)=>{
if(item.isChecked){ if(item.isChecked){
obj.elementId = item.id if(item.resultType == 'Design'){
obj.elementType = item.type || 'ProductElement' obj.elementId = item.designOutfitId
selectArr.push(JSON.parse(JSON.stringify(obj))) obj.elementType = 'DesignOutfit'
} }else{
})
}
if(selectList.value[props.productimgMenu.value]){
selectList.value[props.productimgMenu.value].forEach((item:any)=>{
if(item.isChecked){
obj.elementId = item.designOutfitId
obj.elementType = 'DesignOutfit'
if(props.productimgMenu.value == 'Relight'){
obj.elementId = item.id obj.elementId = item.id
obj.elementType = 'ToProductImage' obj.elementType = item.type || 'ProductElement'
} }
selectArr.push(JSON.parse(JSON.stringify(obj))) selectArr.push(JSON.parse(JSON.stringify(obj)))
} }
}) })
} }
if(selectArr.length == 0) { if(selectArr.length == 0) {
message.info(t('ProductImg.jsContent2')) message.info(t('ProductImg.jsContent2'))
return return
@@ -612,11 +627,12 @@ export default defineComponent({
let index = productImgData.generateList.findIndex((obj:any) => obj.taskId === element.taskId); let index = productImgData.generateList.findIndex((obj:any) => obj.taskId === element.taskId);
productImgData.generateList[index] = element productImgData.generateList[index] = element
// productImgData.generateList[props.productimgMenu.value].unshift(element) // productImgData.generateList[props.productimgMenu.value].unshift(element)
data = data.filter((item:any) => item !== element.taskId);
}else if(element.status == 'Fail'){ }else if(element.status == 'Fail'){
let index = productImgData.generateList.findIndex((obj:any) => obj.taskId === element.taskId); let index = productImgData.generateList.findIndex((obj:any) => obj.taskId === element.taskId);
productImgData.generateList.splice(index,1) productImgData.generateList.splice(index,1)
data = data.filter((item:any) => item !== element.taskId);
} }
data = data.filter((item:any) => item !== element.taskId);
}); });
generateProceedList = data generateProceedList = data
if((data.length == 0)|| (rv.filter((item:any)=>item.status == 'Invalid').length ==data.length)){ if((data.length == 0)|| (rv.filter((item:any)=>item.status == 'Invalid').length ==data.length)){
@@ -796,7 +812,6 @@ export default defineComponent({
RelightDirectionList, RelightDirectionList,
RelightDirection, RelightDirection,
selectList,
setproduct, setproduct,
fileUploadChange, fileUploadChange,
beforeUpload, beforeUpload,

View File

@@ -27,7 +27,7 @@
<div class="zoom" v-if="item.url" @click.stop="()=>$emit('setBtn',item.id,'zoom')"> <div class="zoom" v-if="item.url" @click.stop="()=>$emit('setBtn',item.id,'zoom')">
<i class="fi fi-bs-expand-arrows-alt"></i> <i class="fi fi-bs-expand-arrows-alt"></i>
</div> </div>
<div class="copy" v-if="type == 'Relight' || type == 'ToProductImage' || type == 'PoseTransfer'" @click.stop="()=>$emit('setBtn',item.id,'copy')"> <div class="copy" v-if="(type == 'Relight' || type == 'ToProductImage' || type == 'PoseTransfer') && isCopy" @click.stop="()=>$emit('setBtn',item.id,'copy')">
<i class="fi fi-sr-copy-alt"></i> <i class="fi fi-sr-copy-alt"></i>
</div> </div>
<div class="delete" v-if="item.url && isDelete" @click.stop="()=>$emit('setBtn',item.id,'delete')"> <div class="delete" v-if="item.url && isDelete" @click.stop="()=>$emit('setBtn',item.id,'delete')">
@@ -54,6 +54,7 @@ export default defineComponent({
showMark:{type:Boolean,default:false}, showMark:{type:Boolean,default:false},
isLike:{type:Boolean,default:false}, isLike:{type:Boolean,default:false},
isDelete:{type:Boolean,default:true}, isDelete:{type:Boolean,default:true},
isCopy:{type:Boolean,default:true},
type:{type:String,default:''}, type:{type:String,default:''},
}, },
emits:['setBtn','setSort'], emits:['setBtn','setSort'],

View File

@@ -426,6 +426,7 @@ export const Https = {
getHistoryNotification:`/api/message/getHistoryNotification`,//获取历史消息 getHistoryNotification:`/api/message/getHistoryNotification`,//获取历史消息
oneClickRead:`/api/message/oneClickRead`,//全部设为已读 oneClickRead:`/api/message/oneClickRead`,//全部设为已读
personalHomepage:`/api/account/personalHomepage`,//获取个人主页信息 personalHomepage:`/api/account/personalHomepage`,//获取个人主页信息
refreshMinioUrl:`/api/third/party/refreshMinioUrl`,//获取可以使用的minio地址
}, },

View File

@@ -47,7 +47,7 @@
<div class="btn"> <div class="btn">
<i class="fi fi-br-menu-dots-vertical" v-show="!childItem.editName" @click.stop="editHistory(childItem,index,$event,item[historyTypeItem])"></i> <i class="fi fi-br-menu-dots-vertical" v-show="!childItem.editName" @click.stop="editHistory(childItem,index,$event,item[historyTypeItem])"></i>
<i class="fi fi-br-check" v-show="childItem.editName" @click.stop="accomplishHistory(childItem,index,$event)"></i> <i class="fi fi-br-check" v-show="childItem.editName" @click.stop="accomplishHistory(childItem,index,$event)"></i>
<div class="operation" v-show="historyData.selectHistoryIndex == index"> <div class="operation" v-show="historyData.selectHistoryId == childItem.id">
<div class="item" @click.stop="editName(childItem)"> <div class="item" @click.stop="editName(childItem)">
<i class="fi fi-rr-edit"></i> <i class="fi fi-rr-edit"></i>
<span>Rename</span> <span>Rename</span>
@@ -306,7 +306,7 @@ export default defineComponent({
searchCollectionName:'', searchCollectionName:'',
historyTextarea:'', historyTextarea:'',
updateTimeType:['Todaylist','Yesterdaylist','WithinAWeeklist','EarlierTodaylist'], updateTimeType:['Todaylist','Yesterdaylist','WithinAWeeklist','EarlierTodaylist'],
selectHistoryIndex:-1, selectHistoryId:-1,
page:1, page:1,
size:10, size:10,
isToday:false, isToday:false,
@@ -581,33 +581,33 @@ export default defineComponent({
}); });
} }
const editHistory = (item,index,el,list)=>{ const editHistory = (item,index,el,list)=>{
if(homeMainData.historyData.selectHistoryIndex == -1){ if(homeMainData.historyData.selectHistoryId == -1){
let top = el.target.parentNode.parentNode.getBoundingClientRect().top let top = el.target.parentNode.parentNode.getBoundingClientRect().y
let parentTop = el.target.parentNode.parentNode.parentNode.offsetTop let parentTop = el.target.parentNode.parentNode.parentNode.parentNode.parentNode.getBoundingClientRect().y
let parentHeight = el.target.parentNode.parentNode.parentNode.offsetHeight let parentHeight = el.target.parentNode.parentNode.parentNode.parentNode.parentNode.offsetHeight
let operation = el.target.parentNode.querySelector('.operation') let operation = el.target.parentNode.querySelector('.operation')
homeMainData.historyData.selectHistoryIndex = index homeMainData.historyData.selectHistoryId = item.id
//判断弹窗是加载按钮上面还是下面 //判断弹窗是加载按钮上面还是下面
if(list.length == 1){ if(list.length == 1){
operation.classList.add('activeLeft') operation.classList.add('activeLeft')
return return
} }
if((parentTop+parentHeight)/2 < top){//加在按钮上面 if(top > parentHeight/2 + parentTop){//加在按钮上面
operation.classList.add('active') operation.classList.add('active')
}else{ }else{
operation.classList.remove('active') operation.classList.remove('active')
} }
}else{ }else{
homeMainData.historyData.selectHistoryIndex = -1 homeMainData.historyData.selectHistoryId = -1
} }
let operationCli = ()=>{ let operationCli = ()=>{
homeMainData.historyData.selectHistoryIndex = -1 homeMainData.historyData.selectHistoryId = -1
document.removeEventListener("click", operationCli); document.removeEventListener("click", operationCli);
} }
document.addEventListener("click",operationCli,); document.addEventListener("click",operationCli,);
} }
const editName = (item)=>{ const editName = (item)=>{
homeMainData.historyData.selectHistoryIndex = -1 homeMainData.historyData.selectHistoryId = -1
for (const key in homeMainData.openTypeList.history) { for (const key in homeMainData.openTypeList.history) {
let list = ['EarlierTodaylist','Todaylist','WithinAWeeklist','Yesterdaylist'] let list = ['EarlierTodaylist','Todaylist','WithinAWeeklist','Yesterdaylist']
if(list.indexOf(key) == -1)continue if(list.indexOf(key) == -1)continue
@@ -622,7 +622,7 @@ export default defineComponent({
const deleteItem = (item)=>{ const deleteItem = (item)=>{
Https.axiosPost(Https.httpUrls.projectDetail,{},{params:{projectId:item.id}}).then( Https.axiosPost(Https.httpUrls.projectDetail,{},{params:{projectId:item.id}}).then(
(rv) => { (rv) => {
homeMainData.historyData.selectHistoryIndex = -1 homeMainData.historyData.selectHistoryId = -1
settingGetHistory() settingGetHistory()
if(homeMainData.openTypeChild == item.id){ if(homeMainData.openTypeChild == item.id){
router.push('/home') router.push('/home')
@@ -653,7 +653,7 @@ export default defineComponent({
} }
const bathGeneration = (item)=>{ const bathGeneration = (item)=>{
homeMainData.openType = '' homeMainData.openType = ''
homeMainData.historyData.selectHistoryIndex = -1 homeMainData.historyData.selectHistoryId = -1
router.push(`/home/cloud?type=creation&id=${item.id}&name=${item.name}`) router.push(`/home/cloud?type=creation&id=${item.id}&name=${item.name}`)
} }
return { return {

View File

@@ -423,13 +423,17 @@
(selectCode == 'Sketchboard')" class="fi fi-bs-magic-wand" style="background-color: #000; font-size: 2.3rem; flex: 1;margin: 0;"></i> (selectCode == 'Sketchboard')" class="fi fi-bs-magic-wand" style="background-color: #000; font-size: 2.3rem; flex: 1;margin: 0;"></i>
<span v-else>{{ $t('LibraryPage.Generate') }}</span> <span v-else>{{ $t('LibraryPage.Generate') }}</span>
</div> </div>
<div class="icon iconfont icon-xiala" v-show=" <div class="icon iconfont icon-xiala"
selectCode == 'Moodboard' || v-show="(selectCode == 'Sketchboard') ||
(selectCode == 'Printboard' && scene?.value == 'Pattern') || (selectCode == 'Printboard' && scene.value == 'Pattern') || selectCode == 'Moodboard'"
(selectCode == 'Sketchboard')" :class="{active:speedState}" @click.stop="openSpeed"></div> :class="{active:speedState}" @click.stop="openSpeed"></div>
</div> </div>
<div class="content" v-if="scene?.value != 'extract'" v-show="speedState"> <div class="content" v-if="scene?.value != 'extract'" v-show="speedState">
<div v-for="item in speedList" :class="{active:item.value == speedData.value}" v-show="(selectCode == 'Moodboard' && item?.value != 'flux') || (selectCode == 'Sketchboard' && item?.value != 'flux') || selectCode == 'Printboard'" :key="item.value" @click.stop="setSpeed(item)" :title="item.title">{{ item.label }}</div> <div v-for="item in speedList" :class="{active:item.value == speedData.value}"
v-show="(selectCode == 'Moodboard' && item?.value != 'flux') ||
(selectCode == 'Sketchboard' && item?.value != 'flux') ||
(selectCode == 'Printboard')"
:key="item.value" @click.stop="setSpeed(item)" :title="item.title">{{ item.label }}</div>
</div> </div>
<div class="content" v-else v-show="speedState"> <div class="content" v-else v-show="speedState">
<div v-for="item in extractList" :class="{active:item.value == speedData.value}" :key="item.value" @click.stop="setSpeed(item)" :title="item.title">{{ item.label }}</div> <div v-for="item in extractList" :class="{active:item.value == speedData.value}" :key="item.value" @click.stop="setSpeed(item)" :title="item.title">{{ item.label }}</div>
@@ -716,14 +720,14 @@ export default defineComponent({
title:'Generate using Wanxiang', title:'Generate using Wanxiang',
label:'WX', label:'WX',
value:'wx', value:'wx',
},{
title:'',
label:'FLUX',
value:'flux',
}, },
], ],
extractList:[ extractList:[
{ {
title:'This method may produce slight discrepancies between the extracted line art and the original image.',
label:'High',
value:'',
},{
title:'Note: The extracted line art might have minor variations from the original.', title:'Note: The extracted line art might have minor variations from the original.',
label:'FLUX', label:'FLUX',
value:'flux', value:'flux',
@@ -774,7 +778,7 @@ export default defineComponent({
level1Type:selectCode.value, level1Type:selectCode.value,
level2Type:design, level2Type:design,
page:1, page:1,
ageGroup:selectCode.value == 'Sketchboard'?pageData.ageGroup:'', ageGroup:selectCode.value == 'Models'?pageData.ageGroup:'',
modelSex:sex.value?sex.value:'', modelSex:sex.value?sex.value:'',
pictureName:searchPictureName.value, pictureName:searchPictureName.value,
size:pageSize.value, size:pageSize.value,
@@ -933,9 +937,13 @@ export default defineComponent({
} }
if(newVal.value == 'extract'){ if(newVal.value == 'extract'){
this.speedData = this.extractList[0] this.speedData = this.extractList[0]
}else if(newVal.value == 'Logo' || newVal.value == 'Slogan'){
this.speedData.value = ''
this.speedData.label = ''
}else{ }else{
this.speedData = this.speedList[0] this.speedData = this.speedList[0]
} }
this.speedState = false
} }
}, },
'$route.query':{ '$route.query':{