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

529 lines
14 KiB
Vue
Raw Normal View History

2025-05-20 16:47:27 +08:00
<template>
<div class="homeBox">
2025-06-09 10:25:54 +08:00
<div class="mark_loading" v-show="isShowMark || dataLoad">
2025-05-20 16:47:27 +08:00
<a-spin size="large" />
</div>
<div class="show">
<router-view v-if="(openType && openType != 'history' && !routeQuery.id) || $route.path != '/home'" @setTask="setTask">
</router-view>
<div v-else-if="routeQuery.id || openType == 'history'" class="function">
2025-06-11 15:08:17 +08:00
<design :key="componentKey" ref="design"></design>
2025-05-20 16:47:27 +08:00
</div>
<div v-else class="function">
2025-05-21 20:05:08 +08:00
<newPorject ref="newPorject" @newProject=newProject></newPorject>
2025-05-20 16:47:27 +08:00
</div>
</div>
</div>
2025-05-22 14:26:47 +08:00
<chat ref="chatDom" @chatChange="chatChange" v-show="openType == 'history'"></chat>
2025-05-20 16:47:27 +08:00
</template>
<script lang="ts">
2025-06-03 14:57:18 +08:00
import { defineComponent,computed,inject,watch,nextTick,provide,toRefs, reactive, onMounted} from 'vue'
2025-05-20 16:47:27 +08:00
import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
import { Https } from "@/tool/https";
import { useStore } from "vuex";
import { useI18n } from 'vue-i18n'
import { useRouter,useRoute } from 'vue-router'
import design from "./design/index.vue"
import newPorject from "./newProject/index.vue"
2025-05-21 20:05:08 +08:00
import router from '@/router';
2025-06-09 10:25:54 +08:00
import {getMinioUrl} from '@/tool/util'
2025-05-20 16:47:27 +08:00
import chat from "./chat/index.vue"
export default defineComponent({
components:{
design,newPorject,chat
},
2025-06-18 11:05:23 +08:00
emits:['setTask','setNewProject'],
2025-05-20 16:47:27 +08:00
setup(props,{emit}) {
const store = useStore();
const route = useRoute()
const data = reactive({
openType:'',
2025-06-11 15:08:17 +08:00
componentKey:null,
2025-05-20 16:47:27 +08:00
isShowMark:false,
routeQuery:{} as any,
selectObject:computed(()=>store.state.Workspace.probjects) as any,//选择的项目
2025-05-22 14:26:47 +08:00
chatData:null as any,
2025-06-09 10:25:54 +08:00
dataLoad:true as any,
2025-05-20 16:47:27 +08:00
})
2025-06-03 14:57:18 +08:00
let settingGetHistory:any = inject('settingGetHistory')
2025-05-20 16:47:27 +08:00
const setIsShowMark = (boolean:boolean)=>{
data.isShowMark = boolean
}
provide('setIsShowMark',setIsShowMark)
const dataDom = reactive({
design:null as any,
newPorject:null as any,
2025-05-22 14:26:47 +08:00
chatDom:null as any,
2025-05-20 16:47:27 +08:00
})
watch(() => route.query,
2025-06-03 14:57:18 +08:00
(query:any, oldQuery:any) => {
2025-05-20 16:47:27 +08:00
data.routeQuery = query
2025-06-11 15:08:17 +08:00
if(query.history)data.componentKey = query.history
2025-05-20 16:47:27 +08:00
const key = Object.keys(query)?.[0]
if(key){
data.openType = Object.keys(query)[0]
}else{
data.openType = ''
2025-06-09 10:25:54 +08:00
data.dataLoad = false
2025-06-19 09:21:32 +08:00
return
2025-05-20 16:47:27 +08:00
}
2025-06-03 14:57:18 +08:00
// if((query.history || query.id) != (oldQuery.history || oldQuery.id)){
// }
2025-06-11 15:08:17 +08:00
if(query.history && query.history != query.history){
}
2025-05-20 16:47:27 +08:00
nextTick(()=>{
2025-06-03 14:57:18 +08:00
if(query.history || query.id){
2025-06-09 10:25:54 +08:00
if(data.openType == 'tools')data.isShowMark = true
data.dataLoad = true
2025-06-11 15:08:17 +08:00
if(query?.source != 'batch')createData()
2025-05-20 16:47:27 +08:00
if(query.type == 'Works'){
getWorks(query.id || query.history)
}else{
2025-06-03 14:57:18 +08:00
// setProjectData({id:query.id,process:'toProduct'})
2025-05-20 16:47:27 +08:00
getHistory(query.id || query.history)
}
2025-06-03 14:57:18 +08:00
}else{
2025-06-09 10:25:54 +08:00
data.dataLoad = false
2025-06-03 14:57:18 +08:00
createData()
2025-05-20 16:47:27 +08:00
}
})
},
{ immediate: true } // 立即触发一次以处理初始参数
);
const createData = ()=>{
2025-06-03 14:57:18 +08:00
store.commit("createProbject");
2025-05-20 16:47:27 +08:00
store.commit("clearAllData");
store.commit("clearAllCollection");
store.commit("setAllBoardDataChoose",{});
store.commit("clearShowSketchboard",{});
store.commit("clearAllCollection");
2025-06-18 11:05:23 +08:00
store.commit("clearAllCloudList");
let arr = ['moodBoard','printBoard','sketchBoard','colorBoard']
arr.forEach((item:any)=>{
store.commit("clearAllBoardData",item);
})
2025-05-20 16:47:27 +08:00
}
const getWorks = (id:any)=>{
let value:any = {
"accountId": 0,
"collectionId": 0,
"coverId": 0,
"createDate": "",
id,
"isDeleted": 0,
"portfolioDes": "",
"portfolioName": "",
"portfolioType": "",
"status": 0,
"updateDate": "",
"userLikeGroupId":''
}
Https.axiosPost(Https.httpUrls.setPorfolioChoose, value).then(
(rv: any) => {
setProjectData(rv)
}
).catch((res)=>{
data.isShowMark = false
});
}
const getHistory = (id:any)=>{
let value = {
id,
}
if(!id)return
2025-06-03 14:57:18 +08:00
data.isShowMark = false
2025-05-20 16:47:27 +08:00
Https.axiosPost(Https.httpUrls.selectHistoryProject,value).then((rv: any) => {
setProjectData(rv)
}).catch((res)=>{
data.isShowMark = false
})
}
const setTask = (item:any)=>{
emit('setTask',item)
}
const setProjectData = (rv:any)=>{
let storeData = {
name:rv.name,
id:rv.id,
2025-05-21 20:05:08 +08:00
type:rv.process == 'SERIES_DESIGN'?'seriesDesign':'singleProductDesign',
2025-05-20 16:47:27 +08:00
httpType:rv.process,//项目类型
2025-06-03 14:57:18 +08:00
ageGroup:rv.workspaceVO?.ageGroup,
style:rv.workspaceVO?.style,
styleId:rv.workspaceVO?.styleId,
styleName:rv.workspaceVO?.styleName,
sex:rv.workspaceVO?.sex,
userBrandDnaImg:rv.workspaceVO?.userBrandDnaImg,
userBrandDnaName:rv.workspaceVO?.userBrandDnaName,
brandPercentage:rv.workspaceVO?.brandPercentage,
userBrandDna:rv.workspaceVO?.userBrandDna,
systemDesignerPercentage:rv.workspaceVO?.systemDesignerPercentage,
2025-05-20 16:47:27 +08:00
position:{
2025-06-03 14:57:18 +08:00
label:rv.workspaceVO?.positionEnum?.value,
value:rv.workspaceVO?.positionEnum?.name
2025-05-20 16:47:27 +08:00
},
positionList:[],
publishData:{
2025-06-03 14:57:18 +08:00
id:rv.portfolioDTO?.id?rv.portfolioDTO?.id:'',
portfolioDes:rv.portfolioDTO?.portfolioDes?rv.portfolioDTO?.portfolioDes:'',
portfolioName:rv.portfolioDTO?.portfolioName?rv.portfolioDTO?.portfolioName:'',
tagsDTO:rv.portfolioDTO?.tagsDTO?rv.portfolioDTO?.tagsDTO:[],
2025-05-20 16:47:27 +08:00
},
2025-05-28 10:28:07 +08:00
model:[]
2025-05-20 16:47:27 +08:00
}
let position = []
if(storeData.sex == "Female"){
position = store.state.UserHabit.FemalePosition
}else{
position = store.state.UserHabit.MalePosition
}
2025-05-28 10:28:07 +08:00
// storeData.model = model
2025-05-20 16:47:27 +08:00
data.selectObject.positionList = position
storeData.positionList = position
store.commit('setProbject',storeData)
// let list:any = projectList
// store.commit('setProjectList',list[type.value])
// nextTick(()=>{
// dataDom.workflow.isUpdataPorject = true
// })
2025-05-22 14:26:47 +08:00
setChatData()
2025-06-03 14:57:18 +08:00
if(route.name == 'tools'){
2025-06-09 10:25:54 +08:00
getCollection('tools',null)
2025-06-03 14:57:18 +08:00
}else{
2025-06-09 10:25:54 +08:00
getCollection('design',null)
2025-06-03 14:57:18 +08:00
}
2025-05-20 16:47:27 +08:00
}
2025-05-22 14:26:47 +08:00
const setChatData = ()=>{
if(!data.chatData)return
nextTick(()=>{
dataDom.chatDom.enableThinking = data.chatData.enableThinking
dataDom.chatDom.filList = data.chatData.filList
dataDom.chatDom.chatContent = data.chatData.chatContent
dataDom.chatDom.isFinish = true
dataDom.chatDom.isChattingRecords = true
dataDom.chatDom.sendChat()
data.chatData = null
})
}
2025-05-20 16:47:27 +08:00
// const setitemData = (arr:any)=>{
// return new Promise((resolve,reject)=>{
// nextTick(()=>{
// arr.forEach((rv:any)=>{
// if(arr.indexOf(rv) > -1 || !dataDom[rv])return
// dataDom[rv].openSetData()
// })
// resolve('')
// })
// })
// }
2025-06-09 10:25:54 +08:00
const getCollection = (type:string,module:any)=>{
2025-06-18 11:05:23 +08:00
return new Promise((resolve, reject) => {
let moduleList = [] as any
if(type == 'design'){
moduleList = ["moodBoard", "printBoard", "colorBoard", "sketchBoard",'design','mannequin']
}else{
moduleList = ["printBoard", "colorBoard", "sketchBoard",'design','toProduct','relight','poseTransfer','mannequin',"patternMaking3D",'deReconstruction','uploadElement']
2025-05-28 10:28:07 +08:00
}
2025-06-18 11:05:23 +08:00
if(module)moduleList = [module]
let value:any = {
"id":data.selectObject.id,
"moduleList":moduleList,
2025-05-20 16:47:27 +08:00
}
2025-06-18 11:05:23 +08:00
Https.axiosPost(Https.httpUrls.getModuleContent,value).then(async (rv)=>{
if(rv.uploadElement){//toproduct、relight、poseTransfer
let uploadElementData = {
str:'add',
list:rv.uploadElement,
}
store.commit('setUploadElement',uploadElementData)
2025-05-20 16:47:27 +08:00
}
2025-06-18 11:05:23 +08:00
historyChooseData(rv)//设置历史数据
if(rv.mannequin.length>0){
let arr = [] as any
rv.mannequin.forEach((item:any)=>{
arr.push({
url:item.url,
id:item.mannequinRelationId,
type:item.mannequinRelationType,
collectionElementId:item.collectionId
})
})
store.commit('setProbject',{model:arr})
2025-05-20 16:47:27 +08:00
}
2025-06-18 11:05:23 +08:00
let allBoardData = ['sketchBoard','moodBoard','printBoard','colorBoard']
// let allBoardData = ['sketchBoard','moodBoard','printBoard','colorBoard','toProduct','relight','poseTransfer','mannequin']
if(module){
let canvasData = ['canvas','deReconstruction']
for (let index = 0; index < canvasData.length; index++) {
const item = canvasData[index];
await getCanvasData(item)
}
}
// await setitemData(allBoardData)
//还有一个canvas
if(rv.boundingBox)store.commit('setShowSketchboard',rv.boundingBox)
allBoardData.forEach((item)=>{
let value = {
type:item,
objectName:data.selectObject.type,
}
let arr = ['sketchBoard','moodBoard','printBoard','colorBoard']
if(arr.indexOf(item) != -1){
// store.dispatch('setAllBoardData',value)
}else{
store.dispatch('setModularData',value)
}
2025-06-09 10:25:54 +08:00
})
2025-06-18 11:05:23 +08:00
data.isShowMark = false
data.dataLoad = false
if(type == 'design'){
nextTick(()=>{
dataDom.design.openSetData()
})
}
resolve('')
}).catch(()=>{
data.isShowMark = false
data.dataLoad = false
resolve('')
})
2025-05-20 16:47:27 +08:00
})
2025-06-18 11:05:23 +08:00
2025-05-20 16:47:27 +08:00
}
const getCanvasData = (str:any)=>{
return new Promise((resolve, reject) => {
let value = {
module:str,
projectId:data.selectObject.id,
}
Https.axiosPost(Https.httpUrls.exportSearch, value)
.then((rv) => {
store.commit("setCanvasData", {type:str,file:rv});
resolve('')
})
.catch((rv) => {
resolve(null)
});
})
}
const historyChooseData = (dataValue:any)=>{
let collectionData = {
disposeMoodboard: dataValue.moodBoard?.moodTemplateId?[{
2025-06-18 13:36:11 +08:00
id:dataValue.moodBoard?.moodTemplateId,
imgUrl:dataValue.moodBoard?.moodTemplateUrl,
2025-05-20 16:47:27 +08:00
resData:{
2025-06-18 13:36:11 +08:00
name:dataValue.moodBoard?.moodTemplateName,
2025-05-20 16:47:27 +08:00
}
}]:[],
2025-06-18 13:36:11 +08:00
moodboardPosition:dataValue.moodBoard?.moodboardPosition?JSON.parse(dataValue.moodBoard?.moodboardPosition):{},
2025-05-20 16:47:27 +08:00
moodboardFiles: dealViewChooseData(
dataValue.moodBoard?.moodBoards,"Moodboard"
),
printboardFiles: dealViewChooseData(
dataValue.printBoard,"Printboard"
),
generatePrintFiles: [],
colorBoards: dealViewChooseColor(
2025-06-18 11:05:23 +08:00
dataValue.colorBoard
2025-05-20 16:47:27 +08:00
),
sketchboardFiles: dealViewChooseData(
dataValue.sketchBoard,"Sketchboard"
),
};
if(dataValue.moodBoard?.moodTemplateId)store.commit("setMoodTemplateId", dataValue.moodBoard.moodTemplateId);
store.commit("setAllBoardDataChoose", collectionData);
2025-06-18 11:05:23 +08:00
if(dataValue.sketchBoards)store.commit("setShowSketchboard", dataValue.sketchBoards);
2025-05-20 16:47:27 +08:00
let likeDesignCollectionList:any = []
if(dataValue.design?.userLikeDetails){
dataValue.design?.userLikeDetails.map(
(v: any) => {
let dataValue = {
...v,
groupDetailId: v.id,
designItemUrl: v.designOutfitUrl,
designItemId: v.designItemId,
};
return dataValue;
}
);
}
2025-06-18 13:36:11 +08:00
if(dataValue.design?.userLikeDetails)store.commit("setLikeDesignCollectionList",dataValue.design?.userLikeDetails);
store.commit("setUserGroupId", dataValue.design?.userGroupId);
2025-05-20 16:47:27 +08:00
if(dataValue.toProduct){
let value = {
list: dataValue.toProduct,
str:'add',
index:-1,
}
store.commit("setToProductImage", value);
}
if(dataValue.relight){
let value = {
list: dataValue.relight,
str:'add',
index:-1,
}
store.commit("setRelightList", value);
}
if(dataValue.poseTransfer){
let value = {
2025-06-22 13:52:28 +08:00
list:dataValue.poseTransfer.list.filter((rv)=>rv.status != 'Invalid' && rv.status != 'Fail'),
2025-06-18 11:05:23 +08:00
likedList:dataValue.poseTransfer.likedList,
2025-05-20 16:47:27 +08:00
str:'add',
index:-1,
}
store.commit("setPoseTransfer", value);
}
2025-06-09 10:25:54 +08:00
if(dataValue.patternMaking3D){
let patternMaking3DData = {
2025-06-18 11:05:23 +08:00
collectionElementId:dataValue.patternMaking3D.collectionElementId,
2025-06-09 10:25:54 +08:00
threeDSimpleId:dataValue.patternMaking3D.threeDSimpleId,
url:dataValue.patternMaking3D.printMinioUrl,
printMinioUrl:getMinioUrl(dataValue.patternMaking3D.printMinioUrl),
x:dataValue.patternMaking3D.x,
y:dataValue.patternMaking3D.y,
};
store.commit('setPatternMaking3D',patternMaking3DData)
}
2025-05-20 16:47:27 +08:00
}
//统一处理选择组的渲染数据
const dealViewChooseData = (dataValue: any,str:string)=> {
if (!dataValue) {
return [];
}
let filesList = dataValue.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;
}
//统一处理选择组的渲染数据
const dealViewChooseColor = (dataValue: any)=>{
2025-06-09 10:25:54 +08:00
if(!dataValue)return [];
2025-05-20 16:47:27 +08:00
let colorList = dataValue.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;
}
2025-06-18 11:05:23 +08:00
let queue = [] as any
let start = false
2025-05-20 16:47:27 +08:00
const chatChange = (value:any)=>{
2025-06-09 10:25:54 +08:00
if(value.type == 'design_control_signal' && dataDom.design){
2025-06-18 11:05:23 +08:00
queue.push(
{
type:'design',
fun:dataDom.design.designNewCollection,
}
)
// dataDom.design.designNewCollection()
}else{
queue.push(
{
type:'promise',
fun:getCollection,
module:value.module,
str:'design'
}
)
// getCollection('design',value.module)
}
if(!start){
startQueue()
}
}
const startQueue = async ()=>{
start = true
if(queue[0].type){
if(queue[0].type == 'promise'){
await queue[0].fun(queue[0].str,queue[0].module)
}else{
await queue[0].fun()
}
queue.splice(0,1)
}
if(queue.length>0){
startQueue()
2025-05-20 16:47:27 +08:00
}else{
2025-06-18 11:05:23 +08:00
start = false
2025-05-20 16:47:27 +08:00
}
}
2025-05-22 14:26:47 +08:00
const newProject = (value:any)=>{
2025-06-03 14:57:18 +08:00
settingGetHistory()
2025-06-18 11:05:23 +08:00
emit('setNewProject')
router.push(`home?history=${value.id}&create=true`)
2025-05-22 14:26:47 +08:00
data.chatData = value
2025-05-21 20:05:08 +08:00
}
2025-05-20 16:47:27 +08:00
return{
...toRefs(dataDom),
...toRefs(data),
setTask,
chatChange,
2025-05-21 20:05:08 +08:00
newProject,
2025-05-20 16:47:27 +08:00
}
},
provide() {
return {
}
},
})
</script>
<style lang="less" scoped>
.homeBox{
width: 100%;
height: 100%;
position: relative;
> .show{
width: 100%;
height: 100%;
> .function{
width: 100%;
height: 100%;
}
}
}
</style>