Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite
2
src/assets/icons/CCopy.svg
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" id="Layer_1" data-name="Layer 1" viewBox="0 0 24 24" width="512" height="512"><path d="m16,18.5v1c0,2.481-2.019,4.5-4.5,4.5h-7c-2.481,0-4.5-2.019-4.5-4.5v-7c0-2.481,2.019-4.5,4.5-4.5h1c.276,0,.5.224.5.5s-.224.5-.5.5h-1c-1.93,0-3.5,1.57-3.5,3.5v7c0,1.93,1.57,3.5,3.5,3.5h7c1.93,0,3.5-1.57,3.5-3.5v-1c0-.276.224-.5.5-.5s.5.224.5.5Zm8-14v7c0,2.481-2.019,4.5-4.5,4.5h-7c-2.481,0-4.5-2.019-4.5-4.5v-7c0-2.481,2.019-4.5,4.5-4.5h7c2.481,0,4.5,2.019,4.5,4.5Zm-1,0c0-1.93-1.57-3.5-3.5-3.5h-7c-1.93,0-3.5,1.57-3.5,3.5v7c0,1.93,1.57,3.5,3.5,3.5h7c1.93,0,3.5-1.57,3.5-3.5v-7Z"/></svg>
|
||||||
|
After Width: | Height: | Size: 652 B |
2
src/assets/icons/CDownload.svg
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" id="Layer_1" data-name="Layer 1" viewBox="0 0 24 24" width="512" height="512"><path d="M23.5,24H.5c-.28,0-.5-.22-.5-.5s.22-.5,.5-.5H23.5c.28,0,.5,.22,.5,.5s-.22,.5-.5,.5Zm-8.83-4.09l6.56-7.35c.77-.77,.98-1.88,.57-2.88-.42-1.01-1.36-1.65-2.45-1.65h-2.34V3.47c0-1.92-1.57-3.47-3.51-3.47h-2.99c-1.93,0-3.51,1.56-3.51,3.47v4.55s-2.33,0-2.33,0c-1.1,0-2.04,.64-2.45,1.65s-.19,2.12,.56,2.88l6.59,7.38c.73,.73,1.68,1.09,2.64,1.09s1.93-.37,2.67-1.11ZM7.5,9.03c.13,0,.26-.05,.35-.15s.15-.22,.15-.35V3.47c0-1.36,1.12-2.47,2.5-2.47h2.99c1.38,0,2.51,1.11,2.51,2.47v5.05c0,.28,.22,.5,.5,.5h2.84c.82,0,1.33,.54,1.53,1.03,.2,.5,.21,1.23-.36,1.81,0,0-.01,.01-.02,.02l-6.55,7.34c-1.07,1.07-2.81,1.07-3.86,.02L3.49,11.86c-.58-.58-.57-1.31-.36-1.81,.2-.5,.71-1.03,1.53-1.03h2.84Z"/></svg>
|
||||||
|
After Width: | Height: | Size: 848 B |
BIN
src/assets/images/product/geneated_dress.png
Normal file
|
After Width: | Height: | Size: 58 KiB |
BIN
src/assets/images/product/generated_model.png
Normal file
|
After Width: | Height: | Size: 101 KiB |
BIN
src/assets/images/product/generated_sketch.png
Normal file
|
After Width: | Height: | Size: 101 KiB |
BIN
src/assets/images/product/original_dress.png
Normal file
|
After Width: | Height: | Size: 52 KiB |
BIN
src/assets/images/product/original_model.png
Normal file
|
After Width: | Height: | Size: 49 KiB |
@@ -682,7 +682,7 @@ export default defineComponent({
|
|||||||
this.colorList[index].gradient = ele.gradient
|
this.colorList[index].gradient = ele.gradient
|
||||||
this.colorList[index].name = ele.name
|
this.colorList[index].name = ele.name
|
||||||
});
|
});
|
||||||
this.selectIndex = colorList.length - 1
|
this.selectIndex = !colorList.length? 0 : colorList.length - 1
|
||||||
if(this.colorList[colorList.length - 1]?.gradient && this.colorList[colorList.length - 1]?.gradient?.selectIndex>-1 && this.colorList[colorList.length - 1]?.gradient?.gradientShow){
|
if(this.colorList[colorList.length - 1]?.gradient && this.colorList[colorList.length - 1]?.gradient?.selectIndex>-1 && this.colorList[colorList.length - 1]?.gradient?.gradientShow){
|
||||||
this.selectColor = {rgba:this.colorList[colorList.length - 1].gradient.gradientList[colorList.length - 1].rgba,hex:hex} //顔色选择器默认颜色
|
this.selectColor = {rgba:this.colorList[colorList.length - 1].gradient.gradientList[colorList.length - 1].rgba,hex:hex} //顔色选择器默认颜色
|
||||||
}else{
|
}else{
|
||||||
|
|||||||
@@ -358,7 +358,7 @@ import selectMenu from '@/component/modules/selectMenu.vue'
|
|||||||
import { forEach } from "jszip";
|
import { forEach } from "jszip";
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: "homePage",
|
name: "designPage",
|
||||||
components: {
|
components: {
|
||||||
collectionModal,
|
collectionModal,
|
||||||
// HeaderComponent,
|
// HeaderComponent,
|
||||||
@@ -629,8 +629,6 @@ export default defineComponent({
|
|||||||
collItemSize.collValue = Math.floor(parentWidth / collItemSize.widthValue.value)
|
collItemSize.collValue = Math.floor(parentWidth / collItemSize.widthValue.value)
|
||||||
collItemSize.padding = Math.floor(parentWidth - (collItemSize.collValue * collItemSize.widthValue.value))
|
collItemSize.padding = Math.floor(parentWidth - (collItemSize.collValue * collItemSize.widthValue.value))
|
||||||
let value = collItemSize.collValue
|
let value = collItemSize.collValue
|
||||||
console.log(parentWidth,collItemSize,value)
|
|
||||||
|
|
||||||
collItemSize.itemStyle.width = (parentWidth - collItemSize.padding - (value * 10)) / value
|
collItemSize.itemStyle.width = (parentWidth - collItemSize.padding - (value * 10)) / value
|
||||||
collItemSize.itemStyle.height = collItemSize.itemStyle.width * 1.54
|
collItemSize.itemStyle.height = collItemSize.itemStyle.width * 1.54
|
||||||
|
|
||||||
@@ -1504,14 +1502,6 @@ export default defineComponent({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
// addTeam (team:any) {
|
|
||||||
// this.likeDesignCollectionList.push(team)
|
|
||||||
// },
|
|
||||||
openSetData(){
|
|
||||||
nextTick(()=>{
|
|
||||||
this.setItemPosition()
|
|
||||||
})
|
|
||||||
},
|
|
||||||
setItemPosition(){
|
setItemPosition(){
|
||||||
this.setSystemDesigner(0)
|
this.setSystemDesigner(0)
|
||||||
this.setDesignItemStyle()
|
this.setDesignItemStyle()
|
||||||
|
|||||||
@@ -4,18 +4,25 @@
|
|||||||
<a-spin size="large" />
|
<a-spin size="large" />
|
||||||
</div>
|
</div>
|
||||||
<div class="show">
|
<div class="show">
|
||||||
<div v-show="openType === 'history'" class="function">
|
<!-- <div v-show="openType === 'history'" class="function">
|
||||||
<design :key="componentKey" ref="design"></design>
|
<design :key="componentKey" ref="design"></design>
|
||||||
</div>
|
</div> -->
|
||||||
<router-view v-if="
|
<router-view v-if="
|
||||||
(openType && openType != 'history' && !routeQuery.id) ||
|
(openType && openType != 'history' && !routeQuery.id) ||
|
||||||
$route.path != '/home'"
|
$route.path != '/home'"
|
||||||
@setTask="setTask"
|
@setTask="setTask"
|
||||||
|
v-slot="{ Component, route }"
|
||||||
>
|
>
|
||||||
|
<keep-alive :include="cachedRoutes">
|
||||||
|
<component
|
||||||
|
:is="Component"
|
||||||
|
:key="route.name"
|
||||||
|
/>
|
||||||
|
</keep-alive>
|
||||||
</router-view>
|
</router-view>
|
||||||
<div v-else-if="routeQuery.id" class="function">
|
<!-- <div v-else-if="routeQuery.id" class="function">
|
||||||
<design :key="componentKey" ref="design"></design>
|
<design :key="componentKey" ref="design"></design>
|
||||||
</div>
|
</div> -->
|
||||||
<div v-else-if="!routeQuery.history" class="function">
|
<div v-else-if="!routeQuery.history" class="function">
|
||||||
<newPorject ref="newPorject" @newProject=newProject></newPorject>
|
<newPorject ref="newPorject" @newProject=newProject></newPorject>
|
||||||
</div>
|
</div>
|
||||||
@@ -33,14 +40,13 @@ import { Https } from "@/tool/https";
|
|||||||
import { useStore } from "vuex";
|
import { useStore } from "vuex";
|
||||||
import { useI18n } from 'vue-i18n'
|
import { useI18n } from 'vue-i18n'
|
||||||
import { useRouter,useRoute } from 'vue-router'
|
import { useRouter,useRoute } from 'vue-router'
|
||||||
import design from "./design/index.vue"
|
|
||||||
import newPorject from "./newProject/index.vue"
|
import newPorject from "./newProject/index.vue"
|
||||||
import router from '@/router';
|
import router from '@/router';
|
||||||
import {getMinioUrl, getUniversalZoomLevel} from '@/tool/util'
|
import {getMinioUrl, getUniversalZoomLevel} from '@/tool/util'
|
||||||
import chat from "./chat/index.vue"
|
import chat from "./chat/index.vue"
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
components:{
|
components:{
|
||||||
design,newPorject,chat
|
newPorject,chat
|
||||||
},
|
},
|
||||||
emits:['setTask','setNewProject'],
|
emits:['setTask','setNewProject'],
|
||||||
setup(props,{emit}) {
|
setup(props,{emit}) {
|
||||||
@@ -54,6 +60,7 @@ export default defineComponent({
|
|||||||
selectObject:computed(()=>store.state.Workspace.probjects) as any,//选择的项目
|
selectObject:computed(()=>store.state.Workspace.probjects) as any,//选择的项目
|
||||||
chatData:null as any,
|
chatData:null as any,
|
||||||
dataLoad:true as any,
|
dataLoad:true as any,
|
||||||
|
cachedRoutes:computed(()=>store.state.Workspace.cachedRoutes),//
|
||||||
})
|
})
|
||||||
let settingGetHistory:any = inject('settingGetHistory')
|
let settingGetHistory:any = inject('settingGetHistory')
|
||||||
const setIsShowMark = (boolean:boolean)=>{
|
const setIsShowMark = (boolean:boolean)=>{
|
||||||
@@ -72,15 +79,33 @@ export default defineComponent({
|
|||||||
// getHistory(route.query.history)
|
// getHistory(route.query.history)
|
||||||
// }
|
// }
|
||||||
// })
|
// })
|
||||||
|
watch(
|
||||||
|
() => route,
|
||||||
|
(newRoute) => {
|
||||||
|
const routeName = newRoute.name as string
|
||||||
|
const shouldCache = newRoute.meta?.cache === true
|
||||||
|
if (shouldCache && routeName && !data.cachedRoutes.includes(routeName)) {
|
||||||
|
if(routeName == 'toolsPage' && !route.query?.id)return
|
||||||
|
data.cachedRoutes.push(routeName)// 保证缓存只有一个项目
|
||||||
|
} else if ((!route.query?.id && shouldCache) || (!shouldCache && routeName && data.cachedRoutes.includes(routeName))) {
|
||||||
|
// } else if (!shouldCache && routeName && data.cachedRoutes.includes(routeName)) {
|
||||||
|
for (let i = data.cachedRoutes.length - 1; i >= 0; i--) {
|
||||||
|
if (data.cachedRoutes[i] !== routeName) {
|
||||||
|
data.cachedRoutes.splice(i, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ immediate: true, deep: true }
|
||||||
|
)
|
||||||
watch(() => route.query,
|
watch(() => route.query,
|
||||||
(query:any, oldQuery:any) => {
|
(query:any, oldQuery:any) => {
|
||||||
data.routeQuery = query
|
data.routeQuery = query
|
||||||
if(query.history)data.componentKey = query.history
|
if(query.history)data.componentKey = query.history
|
||||||
const key = Object.keys(query)?.[0]
|
let key = Object.keys(query)?.[0]
|
||||||
console.log(key)
|
if(route.params?.id)key = 'history'
|
||||||
if(key){
|
if(key){
|
||||||
data.openType = Object.keys(query)[0]
|
data.openType = key
|
||||||
}else{
|
}else{
|
||||||
data.openType = ''
|
data.openType = ''
|
||||||
data.dataLoad = false
|
data.dataLoad = false
|
||||||
@@ -90,26 +115,26 @@ export default defineComponent({
|
|||||||
// 检查是否需要重新初始化
|
// 检查是否需要重新初始化
|
||||||
const currentPath = route.fullPath
|
const currentPath = route.fullPath
|
||||||
const storedPath = store.state.Workspace.projectPath
|
const storedPath = store.state.Workspace.projectPath
|
||||||
const isSameProject = currentPath === storedPath && data.openType === 'history'
|
const isSameProject = currentPath === storedPath
|
||||||
|
|
||||||
if(data.openType == 'history'){
|
if((data.openType == 'history' && route.params?.id) || (data.openType == 'tools' && query.id)){
|
||||||
store.commit('setProjectPath',route.fullPath)
|
store.commit('setProjectPath',route.fullPath)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 如果是同一个项目且openType为history,跳过重新初始化
|
// 如果是同一个项目且openType为history,跳过重新初始化
|
||||||
console.log(isSameProject,data.openType)
|
// if(oldQuery?.id && !query?.id)return createData()
|
||||||
if(isSameProject || (!query.history && !query.id)){
|
const tempUrl = new URL(storedPath, window.location.origin);
|
||||||
|
const params2 = {
|
||||||
|
tools: tempUrl.searchParams.get('tools'),
|
||||||
|
id: tempUrl.searchParams.get('id')
|
||||||
|
};
|
||||||
|
if(isSameProject || (!route.params?.id && !query.id) || params2.id){
|
||||||
data.dataLoad = false
|
data.dataLoad = false
|
||||||
console.log(dataDom.design)
|
|
||||||
// dataDom.design?.init()
|
// dataDom.design?.init()
|
||||||
if(query.history){
|
|
||||||
dataDom.design.openSetData()
|
|
||||||
}
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
nextTick(()=>{
|
nextTick(()=>{
|
||||||
if(query.history || query.id){
|
if(route.params?.id || query?.id){
|
||||||
//切换新项目需要清除首次design提示
|
//切换新项目需要清除首次design提示
|
||||||
sessionStorage.removeItem('firstDesign');
|
sessionStorage.removeItem('firstDesign');
|
||||||
|
|
||||||
@@ -125,7 +150,7 @@ export default defineComponent({
|
|||||||
store.commit("createProbject");
|
store.commit("createProbject");
|
||||||
store.commit("clearAllData");
|
store.commit("clearAllData");
|
||||||
}
|
}
|
||||||
getHistory(query.id || query.history)
|
getHistory(query.id || route.params?.id)
|
||||||
}else{
|
}else{
|
||||||
data.dataLoad = false
|
data.dataLoad = false
|
||||||
createData()
|
createData()
|
||||||
@@ -201,7 +226,7 @@ export default defineComponent({
|
|||||||
storeData.positionList = position
|
storeData.positionList = position
|
||||||
store.commit('setProbject',storeData)
|
store.commit('setProbject',storeData)
|
||||||
// setChatData()
|
// setChatData()
|
||||||
if(route.name == 'tools'){
|
if(route.name == 'toolsPage'){
|
||||||
getCollection('tools',null)
|
getCollection('tools',null)
|
||||||
}else{
|
}else{
|
||||||
getCollection('design',null)
|
getCollection('design',null)
|
||||||
@@ -548,7 +573,8 @@ export default defineComponent({
|
|||||||
}else{
|
}else{
|
||||||
chatModel = false
|
chatModel = false
|
||||||
}
|
}
|
||||||
router.push(`home?history=${value.id}&chatMode=${chatModel}`)
|
router.push(`/home/history/${value?.id}`)
|
||||||
|
// router.push(`home?history=${value.id}&chatMode=${chatModel}`)
|
||||||
settingGetHistory()
|
settingGetHistory()
|
||||||
data.chatData = value
|
data.chatData = value
|
||||||
|
|
||||||
|
|||||||
@@ -171,8 +171,20 @@ export default defineComponent({
|
|||||||
CollectionType:'PoseTransfer',
|
CollectionType:'PoseTransfer',
|
||||||
},
|
},
|
||||||
waitList:[],
|
waitList:[],
|
||||||
likeList:computed(()=>store.state.HomeStoreModule.poseTransfer.likedList),
|
likeList:computed(()=>{
|
||||||
noLikeList:computed(()=>store.state.HomeStoreModule.poseTransfer.list),
|
if(!route.query?.id && route.query.tools == 'poseTransfer'){
|
||||||
|
return []
|
||||||
|
}else{
|
||||||
|
return store.state.HomeStoreModule.poseTransfer.likedList
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
noLikeList:computed(()=>{
|
||||||
|
if(!route.query?.id && route.query.tools == 'poseTransfer'){
|
||||||
|
return []
|
||||||
|
}else{
|
||||||
|
return store.state.HomeStoreModule.poseTransfer.list
|
||||||
|
}
|
||||||
|
}),
|
||||||
isGenerate:false,//判断是否正在进行generate
|
isGenerate:false,//判断是否正在进行generate
|
||||||
remGenerate:false,
|
remGenerate:false,
|
||||||
removeGenerate:false,
|
removeGenerate:false,
|
||||||
|
|||||||
261
src/component/home/tools/toProduct/Prompt.vue
Normal file
@@ -0,0 +1,261 @@
|
|||||||
|
<template>
|
||||||
|
<div ref="modalContainer"></div>
|
||||||
|
<a-modal
|
||||||
|
class="prompt-modal generalModel"
|
||||||
|
v-model:visible="showModal"
|
||||||
|
:footer="null"
|
||||||
|
:get-container="() => $refs.modalContainer"
|
||||||
|
width="78%"
|
||||||
|
:maskClosable="false"
|
||||||
|
:centered="true"
|
||||||
|
:closable="false"
|
||||||
|
wrapClassName="#app"
|
||||||
|
:keyboard="false"
|
||||||
|
>
|
||||||
|
<div class="generalModel_btn">
|
||||||
|
<div class="generalModel_closeIcon" @click.stop="handleClose()">
|
||||||
|
<svg
|
||||||
|
width="100%"
|
||||||
|
height="100%"
|
||||||
|
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="title-container">
|
||||||
|
<div class="title">{{ $t('ProductImg.PromptAssit') }}</div>
|
||||||
|
<div class="sub-title">{{ $t('ProductImg.AssitSubTitle') }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="example-content">
|
||||||
|
<div
|
||||||
|
class="example-wrapper"
|
||||||
|
v-for="item in Object.keys(exampleList)"
|
||||||
|
:key="item"
|
||||||
|
:class="item"
|
||||||
|
>
|
||||||
|
<div class="example-item" v-for="value in exampleList[item]" :key="value.title">
|
||||||
|
<img :src="value.src" />
|
||||||
|
<SvgIcon
|
||||||
|
v-if="value.isOriginal"
|
||||||
|
class="download-icon"
|
||||||
|
name="CDownload"
|
||||||
|
size="20"
|
||||||
|
color="#8E8E8E"
|
||||||
|
@click.stop="handleDownload(value)"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="prompt-list">
|
||||||
|
<div v-for="item in promptList" :key="item" class="prompt-item">
|
||||||
|
<SvgIcon
|
||||||
|
name="CCopy"
|
||||||
|
size="25"
|
||||||
|
color="#BCBCBC"
|
||||||
|
class="copy-icon"
|
||||||
|
@click.stop="handleCopy(item)"
|
||||||
|
/>
|
||||||
|
{{ item }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</a-modal>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { ref, useTemplateRef } from 'vue'
|
||||||
|
import { message } from 'ant-design-vue'
|
||||||
|
import originalDress from '@/assets/images/product/original_dress.png'
|
||||||
|
import generatedDress from '@/assets/images/product/geneated_dress.png'
|
||||||
|
import originalModel from '@/assets/images/product/original_model.png'
|
||||||
|
import generatedModel from '@/assets/images/product/generated_model.png'
|
||||||
|
import generatedSketch from '@/assets/images/product/generated_sketch.png'
|
||||||
|
import { downloadIamge } from '@/tool/util'
|
||||||
|
import { useI18n } from 'vue-i18n'
|
||||||
|
const { t, locale } = useI18n()
|
||||||
|
|
||||||
|
defineProps<{
|
||||||
|
promptList: string[]
|
||||||
|
}>()
|
||||||
|
|
||||||
|
const modalContainer = useTemplateRef('modalContainer')
|
||||||
|
const showModal = defineModel<boolean>('showModal', { required: true })
|
||||||
|
|
||||||
|
const garmentExample = [
|
||||||
|
{
|
||||||
|
title: 'originalDress',
|
||||||
|
src: originalDress,
|
||||||
|
isOriginal: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'generatedDress',
|
||||||
|
src: generatedDress
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
const sketchExample = [
|
||||||
|
{
|
||||||
|
title: 'origianlDress',
|
||||||
|
src: originalDress,
|
||||||
|
isOriginal: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'generatedSketch',
|
||||||
|
src: generatedSketch
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
const modelExample = [
|
||||||
|
{
|
||||||
|
title: 'originalModel',
|
||||||
|
src: originalModel,
|
||||||
|
isOriginal: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'generatedModel',
|
||||||
|
src: generatedModel
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
const exampleList = {
|
||||||
|
garmentExample,
|
||||||
|
sketchExample,
|
||||||
|
modelExample
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleClose = () => {
|
||||||
|
showModal.value = false
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleDownload = value => {
|
||||||
|
const { title, src } = value
|
||||||
|
downloadIamge(src, title)
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleCopy = async (value: string) => {
|
||||||
|
try {
|
||||||
|
if (navigator.clipboard && navigator.clipboard.writeText) {
|
||||||
|
await navigator.clipboard.writeText(value)
|
||||||
|
message.success(t('ProductImg.CopySuccess'))
|
||||||
|
} else {
|
||||||
|
// 降级方案:使用传统的 document.execCommand 方法
|
||||||
|
const textArea = document.createElement('textarea')
|
||||||
|
textArea.value = value
|
||||||
|
textArea.style.position = 'fixed'
|
||||||
|
textArea.style.left = '-999999px'
|
||||||
|
textArea.style.top = '-999999px'
|
||||||
|
document.body.appendChild(textArea)
|
||||||
|
textArea.focus()
|
||||||
|
textArea.select()
|
||||||
|
try {
|
||||||
|
document.execCommand('copy')
|
||||||
|
message.success(t('ProductImg.CopySuccess'))
|
||||||
|
} catch (err) {
|
||||||
|
message.error(t('ProductImg.CopyFailed'))
|
||||||
|
}
|
||||||
|
document.body.removeChild(textArea)
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
message.error(t('ProductImg.CopyFailed'))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.prompt-modal {
|
||||||
|
.title-container {
|
||||||
|
.title {
|
||||||
|
font-size: 3.5rem;
|
||||||
|
color: #181818;
|
||||||
|
}
|
||||||
|
.sub-title {
|
||||||
|
font-size: 2rem;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.example-content {
|
||||||
|
margin-top: 4.3rem;
|
||||||
|
padding-left: 7.4rem;
|
||||||
|
display: flex;
|
||||||
|
.example-wrapper {
|
||||||
|
display: flex;
|
||||||
|
gap: 0;
|
||||||
|
&.garmentExample {
|
||||||
|
margin-right: 9.6rem;
|
||||||
|
}
|
||||||
|
&.sketchExample {
|
||||||
|
margin-right: 1.6rem;
|
||||||
|
}
|
||||||
|
.example-item {
|
||||||
|
width: 20.3rem;
|
||||||
|
height: 38.4rem;
|
||||||
|
margin-left: -2px;
|
||||||
|
position: relative;
|
||||||
|
img {
|
||||||
|
width: 100%;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
.download-icon {
|
||||||
|
position: absolute;
|
||||||
|
top: 0.77rem;
|
||||||
|
right: 0.84rem;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.prompt-list {
|
||||||
|
margin-top: 3.5rem;
|
||||||
|
display: flex;
|
||||||
|
column-gap: 6.3rem;
|
||||||
|
.prompt-item {
|
||||||
|
height: 12.8rem;
|
||||||
|
line-height: 2.3rem;
|
||||||
|
padding: 1.8rem 3.5rem 1.8rem 2rem;
|
||||||
|
color: #969696;
|
||||||
|
font-size: 1.9rem;
|
||||||
|
border: 1px solid #000;
|
||||||
|
border-radius: 0.8rem;
|
||||||
|
overflow-y: auto;
|
||||||
|
position: relative;
|
||||||
|
// &:first-child{
|
||||||
|
// width: 53.6rem;
|
||||||
|
// }
|
||||||
|
.copy-icon {
|
||||||
|
position: absolute;
|
||||||
|
top: 1.1rem;
|
||||||
|
right: 1rem;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
:deep(.generalModel .ant-modal-body) {
|
||||||
|
padding: 5rem 4.4rem 8rem 4.6rem;
|
||||||
|
}
|
||||||
|
.c-svg {
|
||||||
|
width: initial;
|
||||||
|
height: initial;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -1,16 +1,9 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="toProduct">
|
<div class="toProduct">
|
||||||
<div class="productImg_content">
|
<div class="productImg_content">
|
||||||
<!-- <div class="modal_title_text">
|
|
||||||
<div>{{$t('ProductImg.Finalize')}}</div>
|
|
||||||
<div class="modal_title_text_intro"></div>
|
|
||||||
</div> -->
|
|
||||||
<div class="productImg_content_bottom">
|
<div class="productImg_content_bottom">
|
||||||
<div class="productImg_left generalModel_state" :class="{ active: button.left }">
|
<div class="productImg_left generalModel_state" :class="{ active: button.left }">
|
||||||
<!-- <div class="productImg_content_item_title productImg_content_item_title_menu">
|
<div class="selectImg">
|
||||||
<generalMenu class="productImg_content_item_title_menubtn" :class="{hideEvents:driver__.driver}" :dataList="productimgMenuList" @setprintModel="setproduct" :item="productimgMenu"></generalMenu>
|
|
||||||
</div> -->
|
|
||||||
<div class="selectImg" style="margin-bottom: 2rem">
|
|
||||||
<div class="head">
|
<div class="head">
|
||||||
<div class="text">
|
<div class="text">
|
||||||
{{
|
{{
|
||||||
@@ -23,10 +16,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="imgBox" v-mousewheel>
|
<div class="imgBox" v-mousewheel>
|
||||||
<!-- <div class="item" :class="[item?.isChecked?'active':'']" v-for="item in selectList[productimgMenu.value]" @click="setGenerate(item)">
|
|
||||||
<img :src="item.imgUrl || item.url" alt="">
|
|
||||||
<a-checkbox v-model:checked="item.isChecked"></a-checkbox>
|
|
||||||
</div> -->
|
|
||||||
<div
|
<div
|
||||||
class="item"
|
class="item"
|
||||||
:class="[item?.isChecked ? 'active' : '']"
|
:class="[item?.isChecked ? 'active' : '']"
|
||||||
@@ -57,7 +46,6 @@
|
|||||||
<i class="fi fi-rr-trash icon_delete"></i>
|
<i class="fi fi-rr-trash icon_delete"></i>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- <a-checkbox v-model:checked="item.isChecked"></a-checkbox> -->
|
|
||||||
</div>
|
</div>
|
||||||
<div class="upload_item item" v-show="!isDesignPage">
|
<div class="upload_item item" v-show="!isDesignPage">
|
||||||
<div class="upload_file_item">
|
<div class="upload_file_item">
|
||||||
@@ -76,7 +64,6 @@
|
|||||||
>
|
>
|
||||||
<div class="upload_tip_block">
|
<div class="upload_tip_block">
|
||||||
<i class="fi fi-br-upload"></i>
|
<i class="fi fi-br-upload"></i>
|
||||||
<!-- <img class="upload_img_icon" src="@/assets/images/homePage/add_file.png"> -->
|
|
||||||
</div>
|
</div>
|
||||||
</a-upload>
|
</a-upload>
|
||||||
</div>
|
</div>
|
||||||
@@ -108,13 +95,6 @@
|
|||||||
v-model="similarity"
|
v-model="similarity"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<!-- <div v-show="productimgMenu.value == 'Relight'" class="productImg_content_item_title productImg_content_item_title_similarity">
|
|
||||||
<span>{{$t('ProductImg.SelectionFunction')}}</span>
|
|
||||||
</div> -->
|
|
||||||
<!-- 暂时去掉 -->
|
|
||||||
<!-- <div v-show="productimgMenu.value == 'Relight'" class="productImg_content_item_Direction generalModel_state_item">
|
|
||||||
<a-select size="large" style="width: 100%;" v-model:value="speedData.value" :options="speedList" :field-names="{ label: 'relightLabel', value: 'value' }"></a-select>
|
|
||||||
</div> -->
|
|
||||||
<div
|
<div
|
||||||
v-show="
|
v-show="
|
||||||
productimgMenu.value == 'Relight' &&
|
productimgMenu.value == 'Relight' &&
|
||||||
@@ -169,15 +149,11 @@
|
|||||||
v-model="brightenValue"
|
v-model="brightenValue"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="prompt-container">
|
||||||
|
<div class="prompt-title">{{ $t('ProductImg.Prompt') }}</div>
|
||||||
<div class="input_border productImg_content_item_generate">
|
<div class="input_border productImg_content_item_generate">
|
||||||
<div class="input_box">
|
<div class="input_box">
|
||||||
<div class="input_box_btnBox">
|
<div class="input_box_btnBox">
|
||||||
<!-- <input
|
|
||||||
class="search_input"
|
|
||||||
:placeholder="productimgMenu.value == 'Relight'?$t('ProductImg.relightInput'):$t('ProductImg.productInput')"
|
|
||||||
v-model="searchName[productimgMenu.value]"
|
|
||||||
@keydown.enter="getPrductimg()"
|
|
||||||
/> -->
|
|
||||||
<textarea
|
<textarea
|
||||||
class="textarea"
|
class="textarea"
|
||||||
ref="textarea"
|
ref="textarea"
|
||||||
@@ -193,27 +169,10 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div class="asistant-btn" @click="handleClickAssistBtn">
|
||||||
class="selectText"
|
<i class="fi fi-bs-magic-wand asistant-icon"></i>
|
||||||
v-show="productimgMenu.value == 'ToProductImage' && speedData.value"
|
<span>{{ $t('ProductImg.PromptAssit') }}</span>
|
||||||
>
|
|
||||||
<a-tooltip
|
|
||||||
v-for="(promptText, index) in promptTextList"
|
|
||||||
:key="index"
|
|
||||||
placement="bottom"
|
|
||||||
>
|
|
||||||
<template #title>{{ promptText }}</template>
|
|
||||||
<div
|
|
||||||
@click="
|
|
||||||
() => {
|
|
||||||
searchName[productimgMenu.value] = promptText
|
|
||||||
ifMaximumLength()
|
|
||||||
}
|
|
||||||
"
|
|
||||||
>
|
|
||||||
{{ promptText }}
|
|
||||||
</div>
|
</div>
|
||||||
</a-tooltip>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="productImg_content_item_generate_btn input_border">
|
<div class="productImg_content_item_generate_btn input_border">
|
||||||
<div class="generage_btn_box">
|
<div class="generage_btn_box">
|
||||||
@@ -361,6 +320,7 @@
|
|||||||
}"
|
}"
|
||||||
:isProductimg="true"
|
:isProductimg="true"
|
||||||
></scaleImage>
|
></scaleImage>
|
||||||
|
<Prompt v-model:showModal="showPromptAssist" :promptList="promptTextList" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -392,6 +352,7 @@ import { useStore } from 'vuex'
|
|||||||
import scaleImage from '@/component/HomePage/scaleImage.vue'
|
import scaleImage from '@/component/HomePage/scaleImage.vue'
|
||||||
import generalMenu from '@/component/HomePage/generalMenu.vue'
|
import generalMenu from '@/component/HomePage/generalMenu.vue'
|
||||||
import generalDrag from '@/component/modules/generalDrag.vue'
|
import generalDrag from '@/component/modules/generalDrag.vue'
|
||||||
|
import Prompt from './Prompt.vue'
|
||||||
import { List } from 'echarts'
|
import { List } from 'echarts'
|
||||||
import { useRouter, useRoute } from 'vue-router'
|
import { useRouter, useRoute } from 'vue-router'
|
||||||
|
|
||||||
@@ -399,7 +360,8 @@ export default defineComponent({
|
|||||||
components: {
|
components: {
|
||||||
scaleImage,
|
scaleImage,
|
||||||
generalMenu,
|
generalMenu,
|
||||||
generalDrag
|
generalDrag,
|
||||||
|
Prompt
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
setTask: {
|
setTask: {
|
||||||
@@ -421,7 +383,11 @@ export default defineComponent({
|
|||||||
isDesignPage: {
|
isDesignPage: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false
|
default: false
|
||||||
}
|
},
|
||||||
|
isState:{
|
||||||
|
type:Boolean,
|
||||||
|
default:false,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
emit: ['unLike'],
|
emit: ['unLike'],
|
||||||
setup(props, { emit }) {
|
setup(props, { emit }) {
|
||||||
@@ -440,7 +406,30 @@ export default defineComponent({
|
|||||||
const createProbject: any = inject('createProbject', () => {})
|
const createProbject: any = inject('createProbject', () => {})
|
||||||
let productImgData: any = reactive({
|
let productImgData: any = reactive({
|
||||||
isShowMark: false,
|
isShowMark: false,
|
||||||
fileList: {},
|
fileList:{
|
||||||
|
ToProductImage:computed(()=>{
|
||||||
|
if(!route.query?.id && route.query.tools == 'toProduct'){
|
||||||
|
return []
|
||||||
|
}else{
|
||||||
|
if(props.isDesignPage)return []
|
||||||
|
if(store.state.HomeStoreModule.uploadElement?.[0]){
|
||||||
|
store.state.HomeStoreModule.uploadElement[0].isChecked = true
|
||||||
|
}
|
||||||
|
return store.state.HomeStoreModule.uploadElement
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
Relight:computed(()=>{
|
||||||
|
if(!route.query?.id && route.query.tools == 'relight'){
|
||||||
|
return []
|
||||||
|
}else{
|
||||||
|
if(props.isDesignPage)return []
|
||||||
|
if(store.state.HomeStoreModule.uploadElement?.[0]){
|
||||||
|
store.state.HomeStoreModule.uploadElement[0].isChecked = true
|
||||||
|
}
|
||||||
|
return store.state.HomeStoreModule.uploadElement
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
},
|
||||||
searchName: {
|
searchName: {
|
||||||
ToProductImage: '',
|
ToProductImage: '',
|
||||||
Relight: ''
|
Relight: ''
|
||||||
@@ -449,17 +438,37 @@ export default defineComponent({
|
|||||||
isProductimg: false, //开始生成
|
isProductimg: false, //开始生成
|
||||||
selectProductimgList: [],
|
selectProductimgList: [],
|
||||||
generateList: {
|
generateList: {
|
||||||
ToProductImage: computed(
|
ToProductImage:computed(()=>{
|
||||||
() => store.state.HomeStoreModule.toProductImageList.list
|
if(!route.query?.id && route.query.tools == 'toProduct'){
|
||||||
),
|
return []
|
||||||
Relight: computed(() => store.state.HomeStoreModule.relightList.list)
|
}else{
|
||||||
|
return store.state.HomeStoreModule.toProductImageList.list
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
Relight:computed(()=>{
|
||||||
|
if(!route.query?.id && route.query.tools == 'relight'){
|
||||||
|
return []
|
||||||
|
}else{
|
||||||
|
return store.state.HomeStoreModule.relightList.list
|
||||||
|
}
|
||||||
|
}),
|
||||||
},
|
},
|
||||||
selectObject: computed(() => store.state.Workspace.probjects), //选择的项目
|
selectObject: computed(() => store.state.Workspace.probjects), //选择的项目
|
||||||
likeList: {
|
likeList: {
|
||||||
ToProductImage: computed(
|
ToProductImage:computed(()=>{
|
||||||
() => store.state.HomeStoreModule.toProductImageList.likedList
|
if(!route.query?.id && route.query.tools == 'toProduct'){
|
||||||
),
|
return []
|
||||||
Relight: computed(() => store.state.HomeStoreModule.relightList.likedList)
|
}else{
|
||||||
|
return store.state.HomeStoreModule.toProductImageList.likedList
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
Relight:computed(()=>{
|
||||||
|
if(!route.query?.id && route.query.tools == 'relight'){
|
||||||
|
return []
|
||||||
|
}else{
|
||||||
|
return store.state.HomeStoreModule.relightList.likedList
|
||||||
|
}
|
||||||
|
}),
|
||||||
} as any,
|
} as any,
|
||||||
similarity: 30,
|
similarity: 30,
|
||||||
brightenValue: 1,
|
brightenValue: 1,
|
||||||
@@ -492,25 +501,6 @@ export default defineComponent({
|
|||||||
value: 'advanced'
|
value: 'advanced'
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
// watch(() => route.query.id,
|
|
||||||
// (query:any, oldQuery:any) => {
|
|
||||||
// if(oldQuery && query != oldQuery){
|
|
||||||
// productImgData.generateList = []
|
|
||||||
// }
|
|
||||||
// },
|
|
||||||
// );
|
|
||||||
watch(
|
|
||||||
() => store.state.HomeStoreModule.uploadElement.length,
|
|
||||||
(newVal, oldVal) => {
|
|
||||||
if (props.isDesignPage) return
|
|
||||||
productImgData.fileList[props.productimgMenu.value] =
|
|
||||||
store.state.HomeStoreModule.uploadElement
|
|
||||||
if (productImgData.fileList[props.productimgMenu.value][0]) {
|
|
||||||
productImgData.fileList[props.productimgMenu.value][0].isChecked = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
const productImgDom = reactive({
|
const productImgDom = reactive({
|
||||||
generalDragLeft: null as any,
|
generalDragLeft: null as any,
|
||||||
generalDragRight: null as any
|
generalDragRight: null as any
|
||||||
@@ -612,7 +602,6 @@ export default defineComponent({
|
|||||||
}
|
}
|
||||||
|
|
||||||
let fileUploadChange = (data: any) => {
|
let fileUploadChange = (data: any) => {
|
||||||
console.log(data)
|
|
||||||
let file = data.file
|
let file = data.file
|
||||||
let bor = true
|
let bor = true
|
||||||
if (file.status === 'done') {
|
if (file.status === 'done') {
|
||||||
@@ -659,9 +648,6 @@ export default defineComponent({
|
|||||||
CollectionType: props.productimgMenu.value
|
CollectionType: props.productimgMenu.value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
console.log(
|
|
||||||
!!((isJpgOrPng && isLt2M && productImgData.selectObject.id) || Upload.LIST_IGNORE)
|
|
||||||
)
|
|
||||||
return !!(
|
return !!(
|
||||||
(isJpgOrPng && isLt2M && productImgData.selectObject.id) ||
|
(isJpgOrPng && isLt2M && productImgData.selectObject.id) ||
|
||||||
Upload.LIST_IGNORE
|
Upload.LIST_IGNORE
|
||||||
@@ -705,7 +691,6 @@ export default defineComponent({
|
|||||||
.then(rv => {
|
.then(rv => {
|
||||||
if (str == 'like') {
|
if (str == 'like') {
|
||||||
// if(rv?.sort)item.sort = rv.sort
|
// if(rv?.sort)item.sort = rv.sort
|
||||||
console.log(rv)
|
|
||||||
if (rv?.sort) item.oldSort = rv.sort
|
if (rv?.sort) item.oldSort = rv.sort
|
||||||
if (rv?.id) item.userLikeSortId = rv.id
|
if (rv?.id) item.userLikeSortId = rv.id
|
||||||
item.newLike = true
|
item.newLike = true
|
||||||
@@ -714,7 +699,6 @@ export default defineComponent({
|
|||||||
str: 'add',
|
str: 'add',
|
||||||
index: -1
|
index: -1
|
||||||
}
|
}
|
||||||
console.log(value)
|
|
||||||
if (props.productimgMenu.value == 'ToProductImage') {
|
if (props.productimgMenu.value == 'ToProductImage') {
|
||||||
store.commit('setToProductImage', value)
|
store.commit('setToProductImage', value)
|
||||||
} else {
|
} else {
|
||||||
@@ -756,7 +740,6 @@ 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) => {
|
||||||
console.log(item)
|
|
||||||
if (item.isChecked) {
|
if (item.isChecked) {
|
||||||
if (item.resultType == 'Design') {
|
if (item.resultType == 'Design') {
|
||||||
obj.elementId = item.designOutfitId
|
obj.elementId = item.designOutfitId
|
||||||
@@ -872,10 +855,6 @@ export default defineComponent({
|
|||||||
let index = productImgData.generateList[
|
let index = productImgData.generateList[
|
||||||
props.productimgMenu.value
|
props.productimgMenu.value
|
||||||
].findIndex((obj: any) => obj.taskId === element.taskId)
|
].findIndex((obj: any) => obj.taskId === element.taskId)
|
||||||
console.log(
|
|
||||||
productImgData.generateList[props.productimgMenu.value][index]
|
|
||||||
)
|
|
||||||
console.log(element)
|
|
||||||
for (const key in element) {
|
for (const key in element) {
|
||||||
if (element[key]) {
|
if (element[key]) {
|
||||||
productImgData.generateList[props.productimgMenu.value][index][
|
productImgData.generateList[props.productimgMenu.value][index][
|
||||||
@@ -940,7 +919,6 @@ export default defineComponent({
|
|||||||
timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,
|
timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,
|
||||||
type: props.productimgMenu.value
|
type: props.productimgMenu.value
|
||||||
}
|
}
|
||||||
console.log(productImgData.generateList[props.productimgMenu.value].value)
|
|
||||||
Https.axiosGet(Https.httpUrls.generateStopWaiting, { params: data })
|
Https.axiosGet(Https.httpUrls.generateStopWaiting, { params: data })
|
||||||
.then(rv => {
|
.then(rv => {
|
||||||
generateProceedList = []
|
generateProceedList = []
|
||||||
@@ -974,31 +952,6 @@ export default defineComponent({
|
|||||||
scaleImage.value.init(arr, index)
|
scaleImage.value.init(arr, index)
|
||||||
scaleImage.value.isComparison = true
|
scaleImage.value.isComparison = true
|
||||||
}
|
}
|
||||||
let generalIsMenuShow: any = {}
|
|
||||||
let setMenuShow = (item: any) => {
|
|
||||||
item.menuShow = true
|
|
||||||
generalIsMenuShow = item
|
|
||||||
document.addEventListener('click', removeMenuShow)
|
|
||||||
}
|
|
||||||
let setMenu = (menuItem: any, item: any) => {
|
|
||||||
// props.productimgMenu = menuItem
|
|
||||||
// if(!selectList.value[props.productimgMenu.value]){
|
|
||||||
// selectList.value[props.productimgMenu.value] = []
|
|
||||||
// }
|
|
||||||
// selectList.value[props.productimgMenu.value].forEach((item:any) => {
|
|
||||||
// item.isChecked = false
|
|
||||||
// });
|
|
||||||
// if(selectList.value[menuItem.value].indexOf(item) == -1){
|
|
||||||
// item.isChecked = true
|
|
||||||
// selectList.value[menuItem.value].push(item)
|
|
||||||
// }
|
|
||||||
// generalIsMenuShow.menuShow = false
|
|
||||||
}
|
|
||||||
let removeMenuShow = () => {
|
|
||||||
generalIsMenuShow.menuShow = false
|
|
||||||
generalIsMenuShow = {}
|
|
||||||
document.removeEventListener('click', removeMenuShow)
|
|
||||||
}
|
|
||||||
let setSimilarity = (num: any) => {}
|
let setSimilarity = (num: any) => {}
|
||||||
|
|
||||||
//超分
|
//超分
|
||||||
@@ -1132,7 +1085,6 @@ export default defineComponent({
|
|||||||
productImgData.isProductimg = true
|
productImgData.isProductimg = true
|
||||||
productImgData.remProductimg = true
|
productImgData.remProductimg = true
|
||||||
productImgData.isShowMark = false
|
productImgData.isShowMark = false
|
||||||
console.log(taskIdList)
|
|
||||||
setPrductimg(arr)
|
setPrductimg(arr)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1140,7 +1092,6 @@ export default defineComponent({
|
|||||||
)
|
)
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
ifMaximumLength()
|
ifMaximumLength()
|
||||||
console.log('来源:---', props.source, props.isDesignPage)
|
|
||||||
})
|
})
|
||||||
|
|
||||||
// 计算属性:根据条件生成提示词列表
|
// 计算属性:根据条件生成提示词列表
|
||||||
@@ -1152,10 +1103,7 @@ export default defineComponent({
|
|||||||
|
|
||||||
if (!isFromDesignPage) {
|
if (!isFromDesignPage) {
|
||||||
// 如果不是从design来的,返回两个提示词
|
// 如果不是从design来的,返回两个提示词
|
||||||
return [
|
return [t('poseTransfer.UploadWithModel'), t('poseTransfer.UploadWithoutModel')]
|
||||||
t('poseTransfer.UploadWithModel'),
|
|
||||||
t('poseTransfer.UploadWithoutModel')
|
|
||||||
]
|
|
||||||
} else {
|
} else {
|
||||||
// 如果是从design来的
|
// 如果是从design来的
|
||||||
if (isSingleDesign) {
|
if (isSingleDesign) {
|
||||||
@@ -1163,10 +1111,7 @@ export default defineComponent({
|
|||||||
const secondPrompt = isAdult
|
const secondPrompt = isAdult
|
||||||
? t('poseTransfer.SingleAdultTryOn')
|
? t('poseTransfer.SingleAdultTryOn')
|
||||||
: t('poseTransfer.SingleChildTryOn')
|
: t('poseTransfer.SingleChildTryOn')
|
||||||
return [
|
return [t('poseTransfer.SingleGarment'), secondPrompt]
|
||||||
t('poseTransfer.SingleGarment'),
|
|
||||||
secondPrompt
|
|
||||||
]
|
|
||||||
} else {
|
} else {
|
||||||
// SERIES_DESIGN: 一个提示词
|
// SERIES_DESIGN: 一个提示词
|
||||||
return [
|
return [
|
||||||
@@ -1178,6 +1123,11 @@ export default defineComponent({
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const showPromptAssist = ref(false)
|
||||||
|
const handleClickAssistBtn = () => {
|
||||||
|
showPromptAssist.value = true
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
upload,
|
upload,
|
||||||
driver__,
|
driver__,
|
||||||
@@ -1189,6 +1139,7 @@ export default defineComponent({
|
|||||||
RelightDirectionList,
|
RelightDirectionList,
|
||||||
RelightDirection,
|
RelightDirection,
|
||||||
promptTextList,
|
promptTextList,
|
||||||
|
showPromptAssist,
|
||||||
|
|
||||||
setproduct,
|
setproduct,
|
||||||
fileUploadChange,
|
fileUploadChange,
|
||||||
@@ -1200,8 +1151,6 @@ export default defineComponent({
|
|||||||
removeProductimg,
|
removeProductimg,
|
||||||
scaleImage,
|
scaleImage,
|
||||||
setScaleImage,
|
setScaleImage,
|
||||||
setMenu,
|
|
||||||
setMenuShow,
|
|
||||||
setSimilarity,
|
setSimilarity,
|
||||||
setTask,
|
setTask,
|
||||||
selectSetBtn,
|
selectSetBtn,
|
||||||
@@ -1211,7 +1160,8 @@ export default defineComponent({
|
|||||||
ifMaximumLength,
|
ifMaximumLength,
|
||||||
openSpeed,
|
openSpeed,
|
||||||
setSpeed,
|
setSpeed,
|
||||||
locale
|
locale,
|
||||||
|
handleClickAssistBtn
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
directives: {
|
directives: {
|
||||||
@@ -1249,26 +1199,6 @@ export default defineComponent({
|
|||||||
mounted() {
|
mounted() {
|
||||||
this.token = getCookie('token') || ''
|
this.token = getCookie('token') || ''
|
||||||
this.uploadUrl = getUploadUrl()
|
this.uploadUrl = getUploadUrl()
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
// init(list:any,index:any,dialogueIndex:any){
|
|
||||||
// },
|
|
||||||
// cancelDsign(){
|
|
||||||
// this.productImg = false
|
|
||||||
// // this.productImgList = []
|
|
||||||
// // this.productImgIndex = 0
|
|
||||||
// },
|
|
||||||
// download(){
|
|
||||||
// // downloadIamge(this.productImgList[this.productImgIndex].imgUrl)
|
|
||||||
// },
|
|
||||||
// setScaleImageIndex(index:any){
|
|
||||||
// // this.productImgIndex = index
|
|
||||||
// // console.log(this.productImgIndex);
|
|
||||||
// },
|
|
||||||
// LikeFile(item:any,str:string){
|
|
||||||
// let parent:any = this.$parent
|
|
||||||
// parent.likeFile(item,str)
|
|
||||||
// },
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
@@ -1319,68 +1249,13 @@ export default defineComponent({
|
|||||||
.productImg_content_item_intro {
|
.productImg_content_item_intro {
|
||||||
font-size: 1.4rem;
|
font-size: 1.4rem;
|
||||||
}
|
}
|
||||||
// .productImg_content_item_imgBox{
|
|
||||||
// display: flex;
|
|
||||||
// overflow-x: auto;
|
|
||||||
// width: auto;
|
|
||||||
// margin-bottom: 2rem;
|
|
||||||
// align-items: center;
|
|
||||||
// flex-wrap: nowrap;
|
|
||||||
// .content_item_imgBox_itemImg{
|
|
||||||
// display: flex;
|
|
||||||
// margin-right: 1rem;
|
|
||||||
// position: relative;
|
|
||||||
// height: 36rem;
|
|
||||||
// max-height: 100%;
|
|
||||||
// position: relative;
|
|
||||||
// img{
|
|
||||||
// height: 100%;
|
|
||||||
// width: 100%;
|
|
||||||
// cursor: pointer;
|
|
||||||
// object-fit: contain;
|
|
||||||
// opacity: .5;
|
|
||||||
// &.active{
|
|
||||||
// opacity: 1;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// .ant-checkbox-wrapper{
|
|
||||||
// position: absolute;
|
|
||||||
// right: 0;
|
|
||||||
// top: 0;
|
|
||||||
// }
|
|
||||||
// &.content_item_imgBox_itemImg:hover{
|
|
||||||
// .content_item_imgBox_itemImg_delete{
|
|
||||||
// display: block;
|
|
||||||
// cursor: pointer;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// .content_item_imgBox_itemImg_delete{
|
|
||||||
// display: none;
|
|
||||||
// width: 100%;
|
|
||||||
// height: 100%;
|
|
||||||
// background: rgba(0,0,0,.2);
|
|
||||||
// position: absolute;
|
|
||||||
// i{
|
|
||||||
// position: absolute;
|
|
||||||
// left: 50%;
|
|
||||||
// top: 50%;
|
|
||||||
// transform: translate(-50%,-50%);
|
|
||||||
// color: #fff;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// }
|
|
||||||
// .content_item_imgBox_itemImg:last-child{
|
|
||||||
// margin-right: 0;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
.selectImg {
|
.selectImg {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
> .imgBox {
|
> .imgBox {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
max-height: 45rem;
|
max-height: 45rem;
|
||||||
margin-top: 2rem;
|
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
flex-wrap: nowrap;
|
flex-wrap: nowrap;
|
||||||
@@ -1388,17 +1263,19 @@ export default defineComponent({
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
overflow-x: auto;
|
overflow-x: auto;
|
||||||
|
column-gap: 1rem;
|
||||||
// &.active
|
// &.active
|
||||||
|
|
||||||
> .item {
|
> .item {
|
||||||
margin-right: 1rem;
|
// margin-right: 1rem;
|
||||||
width: calc(100% / 2 - 0.5rem);
|
// width: calc(100% / 2 - 0.5rem);
|
||||||
|
width: 9.6rem;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
height: 25rem;
|
height: 13.4rem;
|
||||||
position: relative;
|
position: relative;
|
||||||
// &.active{
|
// &.active{
|
||||||
// border: 2px solid;
|
// border: 2px solid;
|
||||||
@@ -1453,7 +1330,8 @@ export default defineComponent({
|
|||||||
}
|
}
|
||||||
> .head {
|
> .head {
|
||||||
color: #000;
|
color: #000;
|
||||||
font-weight: 600;
|
// font-weight: 600;
|
||||||
|
margin-bottom: 2rem;
|
||||||
> .text {
|
> .text {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
font-size: 1.6rem;
|
font-size: 1.6rem;
|
||||||
@@ -1500,6 +1378,7 @@ export default defineComponent({
|
|||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
height: 25rem;
|
height: 25rem;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
||||||
> .imgBox {
|
> .imgBox {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
@@ -1665,4 +1544,45 @@ export default defineComponent({
|
|||||||
.designPage {
|
.designPage {
|
||||||
margin-right: 4rem;
|
margin-right: 4rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.prompt-container {
|
||||||
|
margin-top: 4rem;
|
||||||
|
margin-bottom: 3rem;
|
||||||
|
position: relative;
|
||||||
|
.prompt-title {
|
||||||
|
margin-bottom: 1.4rem;
|
||||||
|
font-size: 1.6rem;
|
||||||
|
// margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
.input_border {
|
||||||
|
padding-bottom: 0;
|
||||||
|
.input_box {
|
||||||
|
.input_box_btnBox .textarea {
|
||||||
|
min-height: 12.7rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.asistant-btn {
|
||||||
|
// width: 9rem;
|
||||||
|
padding: 0.45rem 0.6rem;
|
||||||
|
font-size: 1rem;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #313131;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 1.3rem;
|
||||||
|
left: 1.3rem;
|
||||||
|
display: flex;
|
||||||
|
column-gap: 0.3rem;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
background-color: #f2f2f2;
|
||||||
|
border: 1px solid #dfdfdf;
|
||||||
|
border-radius: 0.5rem;
|
||||||
|
cursor: pointer;
|
||||||
|
.asistant-icon {
|
||||||
|
font-size: 1rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -92,9 +92,10 @@ export default defineComponent({
|
|||||||
(query:any, oldQuery:any) => {
|
(query:any, oldQuery:any) => {
|
||||||
if(oldQuery && query?.tools == oldQuery?.tools)return
|
if(oldQuery && query?.tools == oldQuery?.tools)return
|
||||||
const key = Object.keys(query)?.[0]
|
const key = Object.keys(query)?.[0]
|
||||||
if(route.name == 'tools' && key){
|
if(route.name == 'toolsPage' && key){
|
||||||
data.openType = query[key]
|
data.openType = query[key]
|
||||||
nextTick(()=>{
|
nextTick(()=>{
|
||||||
|
if(route.fullPath === store.state.Workspace.projectPath)return
|
||||||
open(query[key])
|
open(query[key])
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -279,7 +279,12 @@ export default {
|
|||||||
Clear: '清空',
|
Clear: '清空',
|
||||||
jsContent1: '如果您离开此页,您的更改将会丢失。您确定要离开这一页吗?',
|
jsContent1: '如果您离开此页,您的更改将会丢失。您确定要离开这一页吗?',
|
||||||
jsContent2: '请至少选择一张图片',
|
jsContent2: '请至少选择一张图片',
|
||||||
jsContent3: '您有一张图生成失败,请重试。'
|
jsContent3: '您有一张图生成失败,请重试。',
|
||||||
|
Prompt: '提示词',
|
||||||
|
PromptAssit: '提示词助手',
|
||||||
|
AssitSubTitle: '您可以复制并使用以下提示词:',
|
||||||
|
CopySuccess: '已复制到剪贴板',
|
||||||
|
CopyFiled: '复制失败'
|
||||||
},
|
},
|
||||||
poseTransfer: {
|
poseTransfer: {
|
||||||
SelectDesign: '产品图',
|
SelectDesign: '产品图',
|
||||||
|
|||||||
@@ -289,7 +289,12 @@ export default {
|
|||||||
jsContent1:
|
jsContent1:
|
||||||
'Your changes will be lost if you navigate away from this page. Are you sure you want to leave this page?',
|
'Your changes will be lost if you navigate away from this page. Are you sure you want to leave this page?',
|
||||||
jsContent2: 'Please select at least one picture',
|
jsContent2: 'Please select at least one picture',
|
||||||
jsContent3: 'One of your images failed to generate. Please try again.'
|
jsContent3: 'One of your images failed to generate. Please try again.',
|
||||||
|
Prompt: 'Prompt',
|
||||||
|
PromptAssit: 'Prompt Assit',
|
||||||
|
AssitSubTitle: 'You can copy following prompt and try:',
|
||||||
|
CopySuccess: 'Copied to clipboard',
|
||||||
|
CopyFiled: 'Failed to copy'
|
||||||
},
|
},
|
||||||
poseTransfer: {
|
poseTransfer: {
|
||||||
SelectDesign: 'Product image',
|
SelectDesign: 'Product image',
|
||||||
@@ -312,7 +317,7 @@ export default {
|
|||||||
UploadWithModel:
|
UploadWithModel:
|
||||||
'Create realistic studio photo with model wearing this garment. Keep original model if present, or generate appropriate model. Standing pose, facing camera. Preserve exact garment details - patterns, colors, textures, embellishments.', // 上传线稿,带模特
|
'Create realistic studio photo with model wearing this garment. Keep original model if present, or generate appropriate model. Standing pose, facing camera. Preserve exact garment details - patterns, colors, textures, embellishments.', // 上传线稿,带模特
|
||||||
UploadWithoutModel:
|
UploadWithoutModel:
|
||||||
'Professional product photo: garment displayed with natural shape, no model. Studio lighting. Preserve exact details - patterns, colors, textures, embellishments.', // 上传线稿,不带模特
|
'Professional product photo: garment displayed with natural shape, no model. Studio lighting. Preserve exact details - patterns, colors, textures, embellishments.' // 上传线稿,不带模特
|
||||||
},
|
},
|
||||||
LibraryPage: {
|
LibraryPage: {
|
||||||
library: 'Library',
|
library: 'Library',
|
||||||
|
|||||||
@@ -67,8 +67,8 @@ const routes: Array<RouteRecordRaw> = [
|
|||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: "tools",
|
path: "tools",
|
||||||
name: "tools",
|
name: "toolsPage",
|
||||||
meta: { enter: "all" },
|
meta: { enter: "all",cache:true },
|
||||||
component: () => import("@/views/HomeView/Tools.vue"),
|
component: () => import("@/views/HomeView/Tools.vue"),
|
||||||
},
|
},
|
||||||
// {
|
// {
|
||||||
@@ -88,6 +88,18 @@ const routes: Array<RouteRecordRaw> = [
|
|||||||
name: "history",
|
name: "history",
|
||||||
meta: { enter: "all" },
|
meta: { enter: "all" },
|
||||||
component: () => import("@/views/HomeView/history.vue"),
|
component: () => import("@/views/HomeView/history.vue"),
|
||||||
|
},
|
||||||
|
// {
|
||||||
|
// path: "history/:type/:id",
|
||||||
|
// name: "toolsPage",
|
||||||
|
// meta: { enter: "all",cache:true },
|
||||||
|
// component: () => import("@/views/HomeView/Tools.vue"),
|
||||||
|
// },
|
||||||
|
{
|
||||||
|
path: "history/:id",
|
||||||
|
name: "designPage",
|
||||||
|
meta: { enter: "all",cache:true },
|
||||||
|
component: () => import("@/component/home/design/index.vue"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "works",
|
path: "works",
|
||||||
|
|||||||
@@ -127,6 +127,7 @@ const HomeStoreModule : Module<DesignDetail,RootState> = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
toolsClear(state){
|
toolsClear(state){
|
||||||
|
console.log('toolsClear')
|
||||||
state.relightList.likedList = []
|
state.relightList.likedList = []
|
||||||
state.uploadElement = []
|
state.uploadElement = []
|
||||||
state.toProductImageList.likedList = []
|
state.toProductImageList.likedList = []
|
||||||
@@ -225,6 +226,7 @@ const HomeStoreModule : Module<DesignDetail,RootState> = {
|
|||||||
state.designId = ''
|
state.designId = ''
|
||||||
},
|
},
|
||||||
clearAllCollection(state){
|
clearAllCollection(state){
|
||||||
|
console.log('clearAll')
|
||||||
state.designCollectionList=[]
|
state.designCollectionList=[]
|
||||||
state.likeDesignCollectionList = []
|
state.likeDesignCollectionList = []
|
||||||
state.designCollectionId = ''
|
state.designCollectionId = ''
|
||||||
|
|||||||
@@ -45,7 +45,8 @@ const Workspace: Module<DesignDetail, RootState> = {
|
|||||||
model: [] //模特
|
model: [] //模特
|
||||||
},
|
},
|
||||||
projectList: [], //项目列表参数
|
projectList: [], //项目列表参数
|
||||||
projectPath:''
|
projectPath:'',
|
||||||
|
cachedRoutes: [],
|
||||||
},
|
},
|
||||||
mutations: {
|
mutations: {
|
||||||
setWorkspace(state, files) {
|
setWorkspace(state, files) {
|
||||||
|
|||||||
@@ -59,8 +59,8 @@
|
|||||||
class="current-projct"
|
class="current-projct"
|
||||||
@click="handleNavigateToCurrentProject"
|
@click="handleNavigateToCurrentProject"
|
||||||
:class="{
|
:class="{
|
||||||
disabled: disabledCurrentProject,
|
disabled: cachedRoutes.length == 0,
|
||||||
filled: !disabledCurrentProject,
|
filled: cachedRoutes.length > 0,
|
||||||
active: currentProjectActive
|
active: currentProjectActive
|
||||||
}"
|
}"
|
||||||
>
|
>
|
||||||
@@ -522,7 +522,8 @@ export default defineComponent({
|
|||||||
},
|
},
|
||||||
bathGenerationList: ['poseTransfer', 'SERIES_DESIGN', 'toProduct', 'relight'],
|
bathGenerationList: ['poseTransfer', 'SERIES_DESIGN', 'toProduct', 'relight'],
|
||||||
showHistory: false,
|
showHistory: false,
|
||||||
isNewProject: false
|
isNewProject: false,
|
||||||
|
cachedRoutes:computed(()=>store.state.Workspace.cachedRoutes),//
|
||||||
})
|
})
|
||||||
let userDetail = computed(() => {
|
let userDetail = computed(() => {
|
||||||
return store.state.UserHabit.userDetail
|
return store.state.UserHabit.userDetail
|
||||||
@@ -1029,6 +1030,7 @@ export default defineComponent({
|
|||||||
if (currentProjectActive.value) return
|
if (currentProjectActive.value) return
|
||||||
if (currentProjectPath.value) {
|
if (currentProjectPath.value) {
|
||||||
router.push(currentProjectPath.value)
|
router.push(currentProjectPath.value)
|
||||||
|
// router.back()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import { useStore } from "vuex";
|
|||||||
import { useI18n } from 'vue-i18n'
|
import { useI18n } from 'vue-i18n'
|
||||||
import tools from '@/component/toolsPage/index.vue'
|
import tools from '@/component/toolsPage/index.vue'
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
|
name: "toolsPage",
|
||||||
components:{
|
components:{
|
||||||
tools,
|
tools,
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -163,7 +163,7 @@ export default defineComponent({
|
|||||||
if (record.text == 1) {
|
if (record.text == 1) {
|
||||||
str = useI18n().t('newScaleImage.Original')
|
str = useI18n().t('newScaleImage.Original')
|
||||||
} else {
|
} else {
|
||||||
str = `@${record.record.originalAccountName}/${record.record.originalPortfolioName}`
|
str = `@${record.record.userLikeGroupVO.originalAccountName}/${record.record.userLikeGroupVO.originalPortfolioName}`
|
||||||
}
|
}
|
||||||
// let time = formatTime(record.text / 1000, 'YYYY-MM-DD hh:mm:ss')
|
// let time = formatTime(record.text / 1000, 'YYYY-MM-DD hh:mm:ss')
|
||||||
return str
|
return str
|
||||||
@@ -464,7 +464,8 @@ export default defineComponent({
|
|||||||
// router.push(`/home/tools?tools=toProduct&id=${childItem.id}`)
|
// router.push(`/home/tools?tools=toProduct&id=${childItem.id}`)
|
||||||
|
|
||||||
if (record.process == 'SERIES_DESIGN' || record.process == 'SINGLE_DESIGN') {
|
if (record.process == 'SERIES_DESIGN' || record.process == 'SINGLE_DESIGN') {
|
||||||
this.$router.push(`/home?history=${record?.id}`)
|
this.$router.push(`/home/history/${record?.id}`)
|
||||||
|
// this.$router.push(`/home?history=${record?.id}`)
|
||||||
} else {
|
} else {
|
||||||
let processList = {
|
let processList = {
|
||||||
toProduct: 'TO_PRODUCT_IMAGE',
|
toProduct: 'TO_PRODUCT_IMAGE',
|
||||||
|
|||||||