提交修改

This commit is contained in:
X1627315083
2025-06-03 14:57:18 +08:00
parent 9fc2bcaedf
commit 87a08f5f8f
54 changed files with 1669 additions and 378 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 367 B

View File

@@ -133,7 +133,7 @@ li {
z-index: 1049 !important;
}
.ant-tooltip .ant-tooltip-inner {
background: #343579;
background: #000;
border-radius: 5px;
padding: 0.6rem 0.5rem;
}
@@ -686,8 +686,8 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
width: auto;
}
.generalModel_page .generalModel_table_search .generalModel_search .generalModel_search_item {
background: #343579;
border-color: #343579;
background: #000;
border-color: #000;
height: 4rem;
padding: 0.64rem 1.5rem;
font-size: 1.6rem;
@@ -1057,7 +1057,7 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
font-size: 1.4rem;
font-family: Roboto;
font-weight: 400;
color: #343579;
color: #000;
cursor: pointer;
}
.operate_file_block {
@@ -1098,7 +1098,7 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
margin-top: 0.2rem;
left: 0;
background-color: #b1b1b1;
border: 1px solid #343579;
border: 1px solid #000;
border-radius: 0.8rem;
z-index: 3;
height: 9rem;
@@ -1489,7 +1489,7 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
font-size: 1.4rem;
font-family: Roboto;
font-weight: 400;
color: #343579;
color: #000;
cursor: pointer;
}
.admin_table_content .ant-table-tbody > tr:hover > td {
@@ -1509,7 +1509,7 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
font-size: 1.4rem;
font-family: Roboto;
font-weight: 400;
color: #343579;
color: #000;
cursor: pointer;
}
.homeMain_heade .ant-badge,

View File

@@ -48,7 +48,7 @@ input:focus{
.button_second{
width: 14rem;
text-align: center;
// background: #343579;
// background: #000;
height: 4rem;
line-height: 4rem;
font-size: 1.4rem;
@@ -138,7 +138,7 @@ input:focus{
// top: 74px !important;
z-index: 1049 !important;
.ant-tooltip-inner{
background: #343579;
background: #000;
border-radius: 5px;
padding: 0.6rem 0.5rem;
}
@@ -756,8 +756,8 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
.generalModel_search{
width: auto;
.generalModel_search_item{
background: #343579;
border-color: #343579;
background: #000;
border-color: #000;
height: 4rem;
padding: .64rem 1.5rem;
font-size: 1.6rem;
@@ -1151,7 +1151,7 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
font-size: 1.4rem;
font-family: Roboto;
font-weight: 400;
color: #343579;
color: #000;
cursor: pointer;
}
}
@@ -1201,7 +1201,7 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
left: 0;
// background: rgba(0,0,0,0.4);
background-color: rgb(177 177 177);
border: 1px solid #343579;
border: 1px solid #000;
border-radius: 0.8rem;
// overflow: hidden;
z-index: 3;
@@ -1635,7 +1635,7 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
font-size: 1.4rem;
font-family: Roboto;
font-weight: 400;
color: #343579;
color: #000;
cursor: pointer;
}
}
@@ -1657,7 +1657,7 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
font-size: 1.4rem;
font-family: Roboto;
font-weight: 400;
color: #343579;
color: #000;
cursor: pointer;
}
}

View File

@@ -1680,7 +1680,7 @@ export default defineComponent({
text-align: center;
height: calc(3.6rem*1.2);
line-height: calc(3.6rem*1.2);
background: #343579;
background: #000;
font-size: calc(1.4rem*1.2);
font-family: Roboto;
color: #FFFFFF;

View File

@@ -31,7 +31,7 @@
<template #suffixIcon
><span
class="icon iconfont icon-xiala"
style="color: #343579"
style="color: #000"
></span
></template>
</a-select>
@@ -1231,7 +1231,7 @@ export default defineComponent({
height: calc(3rem*1.2);
line-height: calc(3rem*1.2);
text-align: center;
background: #343579;
background: #000;
cursor: pointer;
.icon-sousuo{
@@ -1320,7 +1320,7 @@ export default defineComponent({
}
&.select_item_img{
// border-color: #343579;
// border-color: #000;
}
.print_content_img{
@@ -1465,7 +1465,7 @@ export default defineComponent({
background: #EFEEFF;
font-size: calc(1.2rem*1.2);
font-family: Roboto;
color: #343579;
color: #000;
display: inline-block;
margin-top: calc(1rem*1.2);
cursor: pointer;
@@ -1913,7 +1913,7 @@ export default defineComponent({
display: inline-block;
line-height: calc(3rem*1.2);
font-size: calc(1.2rem*1.2);
color: #343579;
color: #000;
vertical-align: middle;
cursor: pointer;
display: flex;
@@ -1922,7 +1922,7 @@ export default defineComponent({
flex: 1;
.fi-br-fill{
margin-right: calc(0.5rem*1.2);
color:#343579;
color:#000;
vertical-align: middle;
}

View File

@@ -652,7 +652,7 @@ export default defineComponent({
}
}
.select_upload_color{
border: calc(0.1rem*1.2) solid #343579;
border: calc(0.1rem*1.2) solid #000;
}
.upload_color{
width: 100%;

View File

@@ -95,7 +95,7 @@ export default defineComponent({
.history_img_block{
width: 16.5rem;
height: 16.5rem;
border: 0.1rem solid #343579;
border: 0.1rem solid #000;
margin: 0 1.7rem 1.7rem 0;
display: inline-block;

View File

@@ -22,7 +22,7 @@
<template #suffixIcon
><span
class="icon iconfont icon-xiala"
style="color: #343579"
style="color: #000"
></span
></template>
</a-select>

View File

@@ -89,7 +89,7 @@
</template>
<script lang="ts">
import { defineComponent,computed,onBeforeUnmount,provide,nextTick,createVNode,toRefs, reactive, onMounted} from 'vue'
import { defineComponent,computed,onBeforeUnmount,provide,nextTick,createVNode,toRefs, reactive, onMounted, watch} from 'vue'
import detailLeft from './detailLeft/index.vue'
import model from './model/index.vue'
import detailRight from './detailRight/index.vue'
@@ -139,6 +139,7 @@ export default defineComponent({
fun:null,
},
})
provide('getCanvasIfEdit',detailData.getCanvasIfEdit)
provide('singleOveral',detailData.singleOveral)
provide('isEditPattern',detailData.isEditPattern)
@@ -294,10 +295,15 @@ export default defineComponent({
return clothesList
}
const getSubmitData = async (str:string)=>{
// return
let workspace = store.state.Workspace.probjects
if(!detailData.selectDetail.path && !detailData.selectDetail.newDetail?.sketch?.minIOPath)return
let clothes:any = await setClothes([detailData.selectDetail])
console.log(detailData.designDetail)
let clothes:any
if(detailData.currentDetailType == 'models'){
clothes = await setClothes(detailData.designDetail.clothes)
}else{
clothes = await setClothes([detailData.selectDetail])
}
let data = {
designItemId:detailData.designDetail.designItemId,
designSingleItemDTOList:clothes,
@@ -305,6 +311,8 @@ export default defineComponent({
// ifSubmit:designItemDetail.isPreview,
gender:workspace?.sex == 'Male'?1:0,
sketchString:'',
modelId:(detailData.currentDetailType == 'models' && detailData.designDetail.newModel)?detailData.designDetail.newModel.id:detailData.designDetail.oldModel?detailData.designDetail.oldModel.id:'',
modelType:(detailData.currentDetailType == 'models' && detailData.designDetail.newModel)?detailData.designDetail.newModel.type:detailData.designDetail.oldModel?detailData.designDetail.oldModel.type:'',
timeZone:Intl.DateTimeFormat().resolvedOptions().timeZone,
processId:userDetail.value.userId,
}
@@ -312,8 +320,10 @@ export default defineComponent({
Https.axiosPost(Https.httpUrls.designSingle, data).then((rv)=>{
let value = {
currentType : JSON.parse(JSON.stringify(detailData.currentDetailType)),
rv:rv
rv:rv,
}
detailData.designDetail.oldModel = detailData.designDetail.newModel
delete detailData.designDetail.newModel
store.commit('DesignDetailCopy/setPraeview',value)
detailData.loadingShow = false
}).catch(res=>{

View File

@@ -54,7 +54,7 @@ export default defineComponent({
getDetailListDom.libraryList.init()
}
const selectImgItem = (data:any)=>{
data.url = data.presignedUrl
if(data.presignedUrl)data.url = data.presignedUrl
let value = {
data,
}

View File

@@ -4,8 +4,8 @@
<div class="uploadList_box">
<div class="content_img_item" v-for="(file) in currentList[type]" :key="file.id">
<div class="content_img_item_block" :class="{active:file?.checked}">
<img v-lazy="file.imgUrl" :key="file.imgUrl" :alt="file.name" @click.stop="selectImgItem(file)"/>
<sketchCategory v-model:disignTypeList="catecoryList" :generateList="allBoardData.sketchboardFiles" :item="file" :isSpread="true"></sketchCategory>
<img :src="file.imgUrl?file.imgUrl:file.url" :key="file.imgUrl || file.url" :alt="file.name" @click.stop="selectImgItem(file)"/>
<sketchCategory v-if="type != 'models'" v-model:disignTypeList="catecoryList" :generateList="allBoardData.sketchboardFiles" :item="file" :isSpread="true"></sketchCategory>
</div>
</div>
</div>
@@ -46,6 +46,7 @@ export default defineComponent({
sketch:computed(()=>store.state.UploadFilesModule.allBoardData.sketchboardFiles),
print:computed(()=>store.state.UploadFilesModule.allBoardData.printboardFiles),
color:computed(()=>store.state.UploadFilesModule.allBoardData.colorBoards),
models:computed(()=>store.state.Workspace.probjects.model),
},
currentDetailType:computed(()=>store.state.DesignDetailCopy.currentDetailType),
@@ -55,7 +56,14 @@ export default defineComponent({
})
const selectImgItem = (file:any)=>{
if(!file.resData.minIOPath)file.resData.minIOPath = getMinioUrl(file.resData.url)
if(props.type != 'models'){
if(!file.resData.minIOPath){
file.minIOPath = getMinioUrl(file.resData.url)
}
if(!file.designType){
file.designType = file.resData.designType
}
}
// store.commit('DesignDetailCopy/setNewDetail',file.resData)
emit('selectImgItem',file)
}

View File

@@ -1,7 +1,7 @@
<template>
<div class="libraryList">
<div class="generalModel_state" v-if="type != 'element'">
<div class="generalModel_state_item" v-if="level1Type != 'Models'" style="width: 40%;">
<div class="generalModel_state_item" v-if="level1Type != 'Models' && catecoryList.length > 0" style="width: 40%;">
<a-select
v-model:value="designType"
:options="designTypeList"
@@ -13,7 +13,7 @@
<template #suffixIcon
><span
class="icon iconfont icon-xiala"
style="color: #343579"
style="color: #000"
></span
></template>
</a-select>
@@ -30,7 +30,7 @@
<template #suffixIcon
><span
class="icon iconfont icon-xiala"
style="color: #343579"
style="color: #000"
></span
></template>
</a-select>
@@ -48,7 +48,7 @@
<template #suffixIcon
><span
class="icon iconfont icon-xiala"
style="color: #343579"
style="color: #000"
></span
></template>
</a-select>
@@ -65,7 +65,7 @@
<template #suffixIcon
><span
class="icon iconfont icon-xiala"
style="color: #343579"
style="color: #000"
></span
></template>
</a-select>
@@ -82,12 +82,12 @@
<template #suffixIcon
><span
class="icon iconfont icon-xiala"
style="color: #343579"
style="color: #000"
></span
></template>
</a-select>
</div>
<div class="generalModel_state_item" style="width: 35%;" v-if="level1Type != 'Models'">
<div class="generalModel_state_item" style="width: 35%; flex: 1;margin-right: 2%;" v-if="level1Type != 'Models'">
<input class="search_input" style="width: 100%;" :placeholder="$t('DesignDetailAlter.inputContent1')" v-model="searchPictureName" @keydown.enter="getLibraryList()">
</div>
<div class="generalModel_state_item" style="width: auto;">
@@ -99,7 +99,7 @@
<div class="content_img_item" v-for="(file) in libraryList" :key="file.id">
<div class="content_img_item_block" :class="{active:file?.checked}">
<img v-lazy="level1Type != 'Models'?file.url:file.presignedUrl" :key="level1Type != 'Models'?file.url:file.presignedUrl" :alt="file?.name" @click.stop="selectImgItem(file)"/>
<sketchCategory v-if="level1Type != 'Models'" :disignTypeList="designTypeList" :generateList="libraryList" :item="file" :isSetSketchCategory="true"></sketchCategory>
<sketchCategory v-if="level1Type != 'Models'" :isSpread="catecoryList.length == 0" :disignTypeList="designTypeList" :generateList="libraryList" :item="file" :isSetSketchCategory="true"></sketchCategory>
</div>
</div>
<div v-show="total > libraryList.length" class="material_content_list_loding" v-observe>
@@ -174,7 +174,7 @@ export default defineComponent({
})
const init = ()=>{
detailData.designTypeList = props.catecoryList
detailData.designType = detailData.designTypeList[0].value
detailData.designType = detailData.designTypeList[0]?.value?detailData.designTypeList[0]?.value:''
getLibraryList()
}
const hasDuplicateId = (id:any)=>{
@@ -201,6 +201,7 @@ export default defineComponent({
}
}
let data = JSON.parse(JSON.stringify(file))
data.type = detailData.mannequinData.system == 'system'?'System':'Library'
if(!props.isSegmentation){
data.id = id
}

View File

@@ -58,6 +58,7 @@ export default defineComponent({
getDetailListDom.libraryList.init()
}
const selectImgItem = (data:any)=>{
if(data?.imgUrl)data.url = data.imgUrl
let value = {
data,
}

View File

@@ -1,8 +1,8 @@
<template>
<div class="sketchType" v-show="selectDetail?.newDetail?.[currentDetailType]">
<div class="sketchType" v-show="designDetail?.newModel">
<div class="detailText">New Model</div>
<div class="sketchContent">
<img :src="selectDetail.newDetail?.[currentDetailType].url" alt="">
<img :src="designDetail.newModel?.url" alt="">
</div>
</div>
</template>
@@ -19,7 +19,7 @@ export default defineComponent({
setup(props,{emit}) {
const store = useStore();
const detailData = reactive({
selectDetail:computed(()=>store.state.DesignDetailCopy.selectDetail),
designDetail:computed(()=>store.state.DesignDetailCopy.designDetail),
currentDetailType:computed(()=>store.state.DesignDetailCopy.currentDetailType),
})
const getDetailListData = reactive({

View File

@@ -4,7 +4,7 @@
<div class="designOpenrtion_print" v-for="item,index in frontBack.back" @mousedown.stop="itemMoveMousedown(index,getMousePosition($event,false))" @touchstart.passive="itemMoveMousedown(index,getMousePosition($event,true))" @click="setpitch(item,index)" :style="frontBack.front[index].style">
<img :style="item.imageUrl?'':'display:none;'" :src="item.imageUrl" alt="">
</div>
<img class="perview_img" v-detailBody="frontBack?.body?.path" :style="'width:'+ frontBack?.body?.layersObject?.[0].imageSize?.[0] +';height:' + frontBack?.body?.layersObject?.[0].imageSize?.[0] +';'" v-lazy="frontBack?.body?.layersObject?.[0].imageUrl || ''">
<img class="perview_img" ref="detailBody" :src="frontBack?.body?.path" :style="'width:'+ frontBack?.body?.layersObject?.[0].imageSize?.[0] +';height:' + frontBack?.body?.layersObject?.[0].imageSize?.[0] +';'" v-lazy="frontBack?.body?.layersObject?.[0].imageUrl || ''">
<div class="detail_modal_item_front" v-for="item,index in frontBack.front" @mousedown.stop="itemMoveMousedown(index,getMousePosition($event,false))" @touchstart.passive="itemMoveMousedown(index,getMousePosition($event,true))" @click="setpitch(item,index)" :style="item.style">
<img :src="item.imageUrl" alt="">
</div>
@@ -56,7 +56,8 @@ export default defineComponent({
frontBack:computed(()=>store.state.DesignDetailCopy.frontBack),
designDetail:computed(()=>store.state.DesignDetailCopy.designDetail),
isEditPattern:inject('isEditPattern') as any,
singleOveral:inject('singleOveral') as any
singleOveral:inject('singleOveral') as any,
detailBody:null as any,
})
const selectItem = reactive({
selectDetail:computed(()=>store.state.DesignDetailCopy.selectDetail),
@@ -69,6 +70,33 @@ export default defineComponent({
if(newValue.id == oldValue?.id)return
selectItem.imgDomIndex = detailData.frontBack.front.findIndex((item:any)=>item.id == newValue.id)
},{immediate: true,})
watch(()=>detailData.frontBack?.body?.path,(newVal)=>{
let sacle = 0
const img = new Image();
img.onload = () => {
// resolve(img)
sacle = detailData.detailBody.parentNode.offsetWidth / img.width
detailData.frontBack.front.forEach((item:any,index:number) => {
for (const key in item.style) {
if(key == 'zIndex')return
let value = item.style[key]
if(typeof value !== 'number'){
value = value.replace('px','')
}
item.style[key] = value*sacle+'px'
}
for (const key in detailData.frontBack.back[index].style) {
if(key == 'zIndex')return
let value = detailData.frontBack.back[index].style[key]
if(typeof value !== 'number'){
value = value.replace('px','')
}
detailData.frontBack.back[index].style[key] = value*sacle+'px'
}
});
};
img.src = newVal;
},{immediate: true,})
const getDetailListDom = reactive({
libraryList:null as any,
})
@@ -281,7 +309,6 @@ export default defineComponent({
let x = ((arr[index]?.style?.left.replace(/px/g,'')*ratio).toFixed(0) as any - arr[index]?.position[1])
let scaleWidth = arr[index]?.imageSize?Number(((arr[index]?.style?.width.replace(/px/g,'')*ratio)/(arr[index]?.imageSize[0]/arr[index].scale[0])).toFixed(2)):1
let scaleHeight = arr[index]?.imageSize?Number(((arr[index]?.style?.height.replace(/px/g,'')*ratio)/(arr[index]?.imageSize[1]/arr[index].scale[1])).toFixed(2)):1
// let widthScale = (arr[index].style.width.replace(/px/g,'')/arr[index].style.height.replace(/px/g,'')).toFixed(2)
data.scale = [scaleWidth,scaleHeight]
let top = y == 0 ? value.layersObject[0].offset[1]:y+value.layersObject[0].offset[1]
@@ -371,6 +398,29 @@ export default defineComponent({
});
};
img.src = data.value;
},
updated (el,data:any) {
let sacle = 0
const img = new Image();
img.onload = () => {
// resolve(img)
sacle = el.parentNode.offsetWidth / img.width
console.log(sacle,123)
data.instance.frontBack.front.forEach((item:any,index:number) => {
for (const key in item.style) {
if(key == 'zIndex')return
console.log(item.style[key].replace(/px/g,''))
item.style[key] = item.style[key].replace(/px/g,'')*sacle+'px'
// console.log(item.style[key])
}
for (const key in data.instance.frontBack.back[index].style) {
if(key == 'zIndex')return
console.log(data.instance.frontBack.back[index].style[key].replace(/px/g,''))
data.instance.frontBack.back[index].style[key] = data.instance.frontBack.back[index].style[key].replace(/px/g,'')*sacle+'px'
}
});
};
img.src = data.value;
}
}
},

View File

@@ -868,7 +868,7 @@ export default defineComponent({
cursor: pointer;
border: 0.1rem solid #DCDCEC;
.select_upload_color{
border: 0.1rem solid #343579;
border: 0.1rem solid #000;
}
.upload_color{
width: 100%;
@@ -1391,13 +1391,13 @@ export default defineComponent({
display: inline-block;
line-height: calc(3rem*1.2);
font-size: calc(1.2rem*1.2);
color: #343579;
color: #000;
vertical-align: middle;
cursor: pointer;
.fi-br-fill{
margin-right: calc(0.5rem*1.2);
color:#343579;
color:#000;
vertical-align: middle;
}

View File

@@ -2865,7 +2865,7 @@ export default defineComponent({
width: 100%;
opacity: 0;
height: 100%;
background: #343579;
background: #000;
}
}
}

View File

@@ -188,7 +188,7 @@ export default defineComponent({
cursor: pointer;
&.select_swtich{
color: #343579;
color: #000;
}
.switch_icon{

View File

@@ -21,7 +21,7 @@
<template #suffixIcon
><span
class="icon iconfont icon-xiala"
style="color: #343579"
style="color: #000"
></span
></template>
</a-select> -->
@@ -572,7 +572,7 @@ export default defineComponent({
.check_block_body{
width: 100%;
height: 100%;
background: #343579;
background: #000;
}
}
}
@@ -695,7 +695,7 @@ export default defineComponent({
text-align: center;
margin: 0 auto;
color: #FFFFFF;
background: #343579;
background: #000;
cursor: pointer;
margin-top: calc(2rem*1.2);
}

View File

@@ -253,6 +253,7 @@ export default defineComponent({
}
.img_block_item{
margin-bottom: 1em;
// &.color_block_item{
// padding: 0 0.5rem 0 0.3rem;
// }
@@ -284,7 +285,9 @@ export default defineComponent({
}
}
&.mannquin{
> .mannquin_img_item{
}
}
.sketch_img_item{
@@ -301,8 +304,8 @@ export default defineComponent({
vertical-align: top;
}
.mannquin_img_item{
width: 6.8rem;
height: 15rem;
width: 6.8rem * 2;
height: 15rem * 2;
display: inline-block;
vertical-align: top;
}
@@ -371,7 +374,7 @@ export default defineComponent({
align-items: flex-start;
> .lager_img_item{
width: 30%;
margin-left: 2rem;
margin-left: 1rem;
height: auto;
>div{
margin-bottom: 2rem;

View File

@@ -202,7 +202,7 @@ export default defineComponent({
height: 4rem;
line-height: 4rem;
text-align: center;
background: #343579;
background: #000;
cursor: pointer;
.icon-sousuo{
@@ -276,7 +276,7 @@ export default defineComponent({
.check_block_body{
width: 100%;
height: 100%;
background: #343579;
background: #000;
}
}
}
@@ -307,7 +307,7 @@ export default defineComponent({
cursor: pointer;
&.select_item_img{
border-color: #343579;
border-color: #000;
}
.print_content_img{
@@ -361,7 +361,7 @@ export default defineComponent({
text-align: center;
margin: 0 auto;
color: #FFFFFF;
background: #343579;
background: #000;
cursor: pointer;
margin-top: 2rem;
}

View File

@@ -739,7 +739,7 @@ export default defineComponent({
.tip_content {
font-size: 1.3rem;
font-weight: bold;
color: #343579;
color: #000;
cursor: pointer;
}

View File

@@ -496,7 +496,7 @@ export default defineComponent({
.next_step_button{
padding: 0 calc(1.2rem*1.2);
height: calc(3.2rem*1.2);
background: #343579;
background: #000;
font-size: calc(1.4rem*1.2);
color: #FFFFFF;
line-height: calc(3.2rem*1.2);

View File

@@ -176,7 +176,7 @@
left: 0;
// background: rgba(0,0,0,0.4);
background-color: rgb(177 177 177);
border: 1px solid #343579;
border: 1px solid #000;
border-radius: 0.8rem;
// overflow: hidden;
z-index: 3;

View File

@@ -561,6 +561,7 @@ export default defineComponent({
.productImg_content_item_similarity{
padding-bottom: 2.4rem;
display: flex;
align-items: center;
input{
width: 5rem;
height: 5rem;

View File

@@ -6,7 +6,7 @@
:class="driverClass.class1"
@click.stop="showFileCategory(item)"
>
{{ item.category }}
{{ item.category || item?.level2TypeEnum?.value }}
<div
v-show="!isSpread"
:class="[
@@ -199,7 +199,7 @@ export default defineComponent({
left: 0;
// background: rgba(0,0,0,0.4);
background-color: rgb(177 177 177);
border: 1px solid #343579;
border: 1px solid #000;
border-radius: 0.8rem;
// overflow: hidden;
z-index: 3;

View File

@@ -65,7 +65,7 @@
<template #suffixIcon
><span
class="icon iconfont icon-xiala"
style="color: #343579"
style="color: #000"
></span
></template>
</a-select>
@@ -738,10 +738,10 @@ export default defineComponent({
}
.ant-slider-track{
background: #343579;
background: #000;
}
.ant-slider-handle{
border-color: #343579;
border-color: #000;
}
.placement_remove_point_block{

View File

@@ -49,7 +49,7 @@
<template #suffixIcon>
<!-- <span
class="icon iconfont icon-xiala"
style="color: #343579"
style="color: #000"
></span> -->
<i class="el-icon el-input__icon icon-arrow-down"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024"><path fill="currentColor" d="M831.872 340.864 512 652.672 192.128 340.864a30.592 30.592 0 0 0-42.752 0 29.12 29.12 0 0 0 0 41.6L489.664 714.24a32 32 0 0 0 44.672 0l340.288-331.712a29.12 29.12 0 0 0 0-41.728 30.592 30.592 0 0 0-42.752 0z"></path></svg></i>
</template>
@@ -63,7 +63,7 @@
<template #suffixIcon>
<!-- <span
class="icon iconfont icon-xiala"
style="color: #343579"
style="color: #000"
></span> -->
<i class="el-icon el-input__icon icon-arrow-down"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024"><path fill="currentColor" d="M831.872 340.864 512 652.672 192.128 340.864a30.592 30.592 0 0 0-42.752 0 29.12 29.12 0 0 0 0 41.6L489.664 714.24a32 32 0 0 0 44.672 0l340.288-331.712a29.12 29.12 0 0 0 0-41.728 30.592 30.592 0 0 0-42.752 0z"></path></svg></i>
</template>
@@ -417,7 +417,7 @@ export default defineComponent({
}
.rename_submit_button{
background: #343579;
background: #000;
color: #FFFFFF;
}
}

View File

@@ -30,7 +30,7 @@
<template #suffixIcon
><span
class="icon iconfont icon-xiala"
style="color: #343579"
style="color: #000"
></span
></template>
</a-select>
@@ -1000,7 +1000,7 @@ export default defineComponent({
.tip_content {
font-size: 1.3rem;
font-weight: bold;
color: #343579;
color: #000;
cursor: pointer;
}

View File

@@ -971,7 +971,7 @@ export default defineComponent({
.tip_content {
font-size: 1.3rem;
font-weight: bold;
color: #343579;
color: #000;
cursor: pointer;
}

View File

@@ -30,7 +30,7 @@
<template #suffixIcon
><span
class="icon iconfont icon-xiala"
style="color: #343579"
style="color: #000"
></span
></template>
</a-select>
@@ -1001,7 +1001,7 @@ export default defineComponent({
.tip_content {
font-size: 1.3rem;
font-weight: bold;
color: #343579;
color: #000;
cursor: pointer;
}

View File

@@ -8,7 +8,6 @@
<span class="detailText">All</span>
</div>
</div>
{{ selectObject.id }}123
<div class="searchObject generalModel_state">
<div class="generalModel_state_item smail">
<span>Project :</span>

View File

@@ -11,7 +11,9 @@
<div class="itemBox" ref="chatBox">
<div class="item" v-for="item in chatList" :class="{user:item.role == 'user'}">
<div class="textBox">
<div class="icon">ICON</div>
<div class="icon">
<img src="@/assets/images/icon/favicon.png" alt="">
</div>
<div class="text" v-show="item.content.think || item.content.message || item.content.img || item.content.color">
<span class="content">
<div class="showThink" :class="{active:item.content?.isThink}" v-show="item.content.think" @click="()=>item.content?.isThink?(item.content.isThink = false):(item.content.isThink = true)">
@@ -103,7 +105,7 @@ export default defineComponent({
chatBox:null as any,
})
watch(()=>data.selectObject.id,(newValue,oldValue)=>{
if(newValue){
if(newValue && (data.selectObject.httpType == 'SERIES_DESIGN' || data.selectObject.httpType == 'SINGLE_DESIGN')){
getChatHistory(newValue)
}
})
@@ -385,7 +387,12 @@ export default defineComponent({
padding: 1.2rem 2rem;
border-radius: 2.4rem;
-webkit-user-select: none;
> .icon{
> img{
width: 2.5rem;
height: 2.5rem;
}
}
> .text{
// display: inline-block;
// width: min-content;

View File

@@ -0,0 +1,788 @@
<template>
<a-modal
class="scaleImage_modal generalModel"
v-model:visible="scaleImage"
:footer="null"
width="78%"
:maskClosable="false"
:centered="true"
:closable="false"
:mask="true"
:keyboard="false"
:destroyOnClose="true"
>
<div class="generalModel_btn">
<div class="generalModel_closeIcon" @click.stop="cancelDsign()">
<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="white" 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 class="generalModel_closeIcon download" @click.stop="download()">
<i class="fi fi-rr-down-to-line"></i>
</div>
</div>
<div class="scaleImage_content">
<div v-if="isProductimg" class="productImg_modal">
<div class="productImg_left">
<div class="productImg_content_item_title productImg_content_item_title_menu">
<span v-if="scaleImageList[scaleImageIndex]?.resultType == 'ToProductImage'">{{$t('ProductImg.MagicTools')}}</span>
<span v-if="scaleImageList[scaleImageIndex]?.resultType == 'Relight'">{{$t('ProductImg.relightingTool')}}</span>
</div>
<div v-show="scaleImageList[scaleImageIndex]?.resultType == 'ToProductImage'" class="productImg_content_item_title productImg_content_item_title_similarity">
<span>{{$t('ProductImg.Similarity')}}</span>
</div>
<div v-show="scaleImageList[scaleImageIndex]?.resultType == 'ToProductImage'" class="productImg_content_item_similarity ">
<a-slider class="system_silder"
v-model:value="productimgSimilarity"
:tooltipVisible="false"
:step="5"
@afterChange="()=>{}"
>
</a-slider>
<input type="number" readonly v-model="productimgSimilarity">
</div>
<div v-show="scaleImageList[scaleImageIndex]?.resultType == 'Relight'" class="productImg_content_item_title productImg_content_item_title_similarity">
<span>{{$t('ProductImg.RelightDirection')}}</span>
</div>
<div v-show="scaleImageList[scaleImageIndex]?.resultType == 'Relight'" class="productImg_content_item_Direction">
<!-- <a-slider class="system_silder"
v-model:value="similarity"
@afterChange="setSimilarity"
:tooltipVisible="false"
:step="5"
>
</a-slider> -->
<a-select style="width: 100%;" v-model:value="productimgRelightDirection" :options="productimgRelightDirectionList"></a-select>
</div>
<div v-show="scaleImageList[scaleImageIndex]?.resultType == 'Relight'" class="productImg_content_item_title productImg_content_item_title_similarity">
<span>{{$t('ProductImg.Highlight')}}</span>
</div>
<div v-show="scaleImageList[scaleImageIndex]?.resultType == 'Relight'" class="productImg_content_item_similarity">
<a-slider class="system_silder"
v-model:value="productimgBrightenValue"
:tooltipVisible="false"
:max="3"
:min="1"
:step="0.1"
>
</a-slider>
<input type="number" readonly v-model="productimgBrightenValue">
</div>
<div class="input_border productImg_content_item_generate">
<div class="input_box">
<div class="input_box_btnBox">
<input
class="search_input"
:placeholder="$t('Generate.inputContent1')"
v-model="productimgSearchName"
@keydown.enter="getPrductimg()"
/>
<i v-show="!productimgIsTextarea" class="fi fi-br-expand" @click.stop="()=>productimgIsTextarea = !productimgIsTextarea"></i>
<i v-show="productimgIsTextarea" class="fi fi-bs-compress" @click.stop="()=>productimgIsTextarea = !productimgIsTextarea"></i>
</div>
<textarea
v-show="productimgIsTextarea"
class="search_textarea "
@keydown.enter="getPrductimg()"
v-model="productimgSearchName"
></textarea>
</div>
</div>
<div class="productImg_content_item_generate_btn input_border">
<div class="input_box">
<div v-show="!productimgIsProductimg" class="generage_btn started_btn" @click.stop="getPrductimg">
{{ $t('Generate.Generate') }}
</div>
<div v-show="productimgIsProductimg && !productimgRemProductimg" class="generage_btn started_btn" @click="getPrductimg">
<i class="fi fi-br-loading"></i>
</div>
<div v-show="productimgRemProductimg" @click="removeProductimg" class="generage_btn started_btn">
{{$t('Generate.Close')}}
</div>
</div>
</div>
</div>
</div>
<div class="scaleImage_content_imgBox" :class="{active:isComparison}">
<img v-if="isComparison" :src="scaleImageList[scaleImageIndex]?.sourceUrl">
<div class="loadBox" v-show="generateSuccess">
<div class="load" v-show="productimgIsProductimg">
<a-spin size="large" class="content_img_flex"></a-spin>
</div>
<img v-show="!productimgIsProductimg" :src="generateSuccess?.url">
</div>
<div class="img_operate_block" v-if="isLike">
<i v-if="!scaleImageList[scaleImageIndex]?.like" class="fi fi-rr-heart operate_icon" @click.stop="LikeFile(scaleImageList[scaleImageIndex],'like')"></i>
<i v-else class="fi fi-sr-heart operate_icon" :adminLike="!!scaleImageList[scaleImageIndex]?.like" @click.stop="LikeFile(scaleImageList[scaleImageIndex],'noLike')"></i>
</div>
</div>
</div>
<!-- <div class="scaleImage_nav">
<div class="nav_left">
<i class="fi fi-rr-arrow-small-left" @click="lastStep()"></i>
</div>
<div class="nav_list" v-mousewheel>
<div class="nav_centent">
<img v-for="item,index in scaleImageList" @click="setScaleImageIndex(index)" :class="{active:index == scaleImageIndex}" :src="item?.imgUrl || item?.url" :key="item.id">
</div>
</div>
<div class="nav_right">
<i class="fi fi-rr-arrow-small-right" @click.stop="nextStep()"></i>
</div>
</div> -->
<div class="mark_loading" v-show="loadingShow">
<a-spin size="large" />
</div>
<UpgradePlan ref="UpgradePlan"></UpgradePlan>
</a-modal>
</template>
<script lang="ts">
import { defineComponent, h, ref ,toRefs,createVNode,reactive, computed} from "vue";
import { Https } from "@/tool/https";
import { Modal } from "ant-design-vue";
import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
import { downloadIamge } from "@/tool/util";
import { useI18n } from "vue-i18n";
import { useStore } from "vuex";
import UpgradePlan from "@/component/HomePage/UpgradePlan.vue";
export default defineComponent({
components:{UpgradePlan},
props:{
productData:{
type:Object,
default:{
similarity:30,
brightenValue:1,
upload:'',
},
},
isCanvas:{
type:Boolean,
default:false,
},
sex:{
type:String,
default:''
},
},
emits:['addGenerateImg'],
setup(props:any,{emit}) {
const store = useStore();
let userDetail:any= computed(()=>{
return store.state.UserHabit.userDetail
})
let {t} = useI18n()
let productimg = reactive({
UpgradePlan:null,
isProductimg:false,
productimgSearchName:'',
productimgIsTextarea:false,
productimgRemProductimg:false,
productimgIsProductimg:false,
productimgSimilarity:30,
productimgBrightenValue:1,
productimgUpload:props.productData.upload,
productimgRelightDirection:props.productData.RelightDirection,
productimgRelightDirectionList:props.productData.RelightDirectionList,
selectObject:computed(()=>store.state.Workspace.probjects),//选择的项目
generateSuccess:null as any,//生成成功后返回的数据
})
let scaleImage: any = ref(false);
let isShowMark = ref(false)
let loadingShow = ref(false)
let isComparison = ref(false)
const visible = ref<boolean>(false);
const setVisible = (value:any): void => {
visible.value = value;
};
let scaleImageList:any = ref([
])
let scaleImageMask:any = ref(false)
let scaleImageIndex:any = ref(0)
let isLike:any = ref(true)
let robotAssits:any = ref(0)
//procuctimg
let remPrductimgTime:any = null
let prductimgTime:any = null
const getData = ()=>{
let obj = null as any
if(scaleImageList.value[scaleImageIndex.value]?.resultType == 'ToProductImage'){
obj = {
elementId:scaleImageList.value[scaleImageIndex.value].designOutfitId||scaleImageList.value[scaleImageIndex.value].elementId,
elementType:'DesignOutfit',
}
}else if(scaleImageList.value[scaleImageIndex.value]?.resultType == 'Relight'){
obj = {
elementId:scaleImageList.value[scaleImageIndex.value].designItemId || scaleImageList.value[scaleImageIndex.value].id,
elementType:'ToProductImage',
}
}else if(scaleImageList.value[scaleImageIndex.value]?.resultType == 'TransferPose'){
}
return obj
}
let getPrductimg = ()=>{
let obj = getData()
let imageStrength = productimg.productimgSimilarity == 100? 95 :productimg.productimgSimilarity
let data:any ={
direction:productimg.productimgRelightDirection,
prompt:productimg.productimgSearchName,
toProductImageVOList:[obj],
brightenValue:productimg.productimgBrightenValue,
projectId:productimg.selectObject.id,
imageStrength:(100 - imageStrength)/100,
}
// console.log(data)
// return
productimg.productimgIsProductimg = true
remPrductimgTime = setTimeout(()=>{
productimg.productimgRemProductimg = true
},10000)
let url = Https.httpUrls.relight
if(scaleImageList.value[scaleImageIndex.value]?.resultType == 'ToProductImage'){
url = Https.httpUrls.toProduct
}
isShowMark.value = true
Https.axiosPost(url, data).then(
(rv) => {
isShowMark.value = false
scaleImageList.value[scaleImageIndex.value].imgUrl = '/image/loading.gif'
let arr:any = []
rv.forEach((item:any)=>{
arr.push(item.taskId)
})
// productimg.generateList.unshift(...rv)
setPrductimg(arr)
}
).catch(res=>{
isShowMark.value = false
productimg.productimgIsProductimg = false
clearInterval(remPrductimgTime)
productimg.productimgRemProductimg = false
if(res.errCode === 2){
Modal.confirm({
title: res.errMsg,
icon: createVNode(ExclamationCircleOutlined),
okText: 'Yes',
cancelText: 'No',
mask:false,
zIndex:99999,
centered:true,
onOk() {
let UpgradePlan:any = productimg.UpgradePlan
UpgradePlan.init()
},
onCancel(){
}
});
}
});
}
let generateProceedList:any = []
let setPrductimg = (dataList:any)=>{
let data = dataList
let dataNum = dataList.length
let state = true
let url = Https.httpUrls.relightResult
if(scaleImageList.value[scaleImageIndex.value]?.resultType == 'ToProductImage'){
url = Https.httpUrls.toProductImageResult
}
prductimgTime = setInterval(()=>{
if(!state)return
state = false
Https.axiosPost(url, data).then(
(rv) => {
state = true
if(productimg.productimgIsProductimg){//防止取消后有正在执行的获取状态
// generateProceedList = rv.filter((item:any)=>item.status != 'Success' && item.status != 'Fail' && item.status != 'Invalid')
let isEnd = false
if(rv[0].status == 'Success'){
// let id = productimg.generateSuccess?.designItemId || rv[0].id
// rv[0].id = id
// let listType = productimg.generateSuccess.listType
productimg.generateSuccess = Object.assign(productimg.generateSuccess,rv[0])
// productimg.generateSuccess.listType = listType
isEnd = true
clearInterval(remPrductimgTime)
}else if(rv[0].status == 'Fail'){
isEnd = true
}
generateProceedList = data
if(isEnd){
store.state.store.dispatch('getCredits')
clearInterval(prductimgTime)
clearInterval(remPrductimgTime)
productimg.productimgRemProductimg = false
productimg.productimgIsProductimg = false
}
}
}
).catch(res=>{
clearInterval(prductimgTime)
clearInterval(remPrductimgTime)
productimg.productimgIsProductimg = false
productimg.productimgRemProductimg= false
});
},1000)
}
let removeProductimg = ()=>{
productimg.productimgIsProductimg = false
productimg.productimgRemProductimg= false
clearInterval(prductimgTime)
if(generateProceedList){
// let str = generateProceedList.map((obj:any) => obj.taskId).join(',');
let str = generateProceedList.join(',')
let data = {
uniqueId:str,
userId:userDetail.value.userId,
type:scaleImageList.value[scaleImageIndex.value]?.resultType
}
Https.axiosGet(Https.httpUrls.generateStopWaiting, {params:data}).then(
(rv) => {
generateProceedList = []
}
).catch(res=>{
});
}
}
let submitBase64Data = async (rv:any)=>{
loadingShow.value = true
let isOverlay = false
await new Promise<void>((resolve, reject) => {
Modal.confirm({
title: t('scaleImage.overlayOrNot'),
icon: createVNode(ExclamationCircleOutlined),
okText: 'Yes',
cancelText: 'No',
mask:false,
centered:true,
onOk() {
resolve()
isOverlay = true
},
onCancel(){
isOverlay = false
resolve()
}
});
})
let data = {
"base64": rv,
"category": scaleImageList.value[scaleImageIndex.value]?.categoryValue || scaleImageList.value[scaleImageIndex.value]?.level2Type,
"gender": props.sex,
"originalId":scaleImageList.value[scaleImageIndex.value]?.id,
"isOverride":isOverlay,
}
Https.axiosPost(Https.httpUrls.modifySketch, data).then(
(rv) => {
rv.imgUrl = rv.url
rv.status = 'Success'
rv.category = scaleImageList.value[scaleImageIndex.value]?.category
rv.categoryValue = scaleImageList.value[scaleImageIndex.value]?.categoryValue
isOverlay?(scaleImageList.value[scaleImageIndex.value] = rv):(scaleImageList.value.unshift(rv))
loadingShow.value = false
scaleImage.value = false
}
).catch(res=>{
loadingShow.value = false
});
}
return {
t,
...toRefs(productimg),
scaleImage,
isShowMark,
loadingShow,
isComparison,
visible,
setVisible,
scaleImageList,
scaleImageMask,
scaleImageIndex,
isLike,
robotAssits,
getPrductimg,
removeProductimg,
submitBase64Data,
};
},
data() {
return {
// moodTemplateId: "", //模板id
isNext:false
};
},
directives:{
mousewheel:{
mounted (el) {
el.addEventListener('wheel',(e:WheelEvent)=>{
let num = 0
if(e.deltaY > 0){
num = 25
}else{
num = -25
}
el.scrollBy(num, 0);
})
}
},
},
mounted() {
},
methods: {
init(list:any,index:any,dialogueIndex:any,status:any,listType:string){
if(status == 'edit'){
this.generateSuccess = {
...list[index],
id:list[index].designItemId || list[index].id,
oldId:list[index].designItemId || list[index].id,
url:list[index].designOutfitUrl || list[index].url,
designItemId:list[index].designOutfitId,
listType,
}
if(list[index].imageStrength)this.productimgSimilarity = 100 - list[index].imageStrength * 100
if(list[index].imageStrength)list[index].brightenValue
if(list[index].imageStrength)list[index].direction
}else{
this.generateSuccess = {
listType,
}
}
this.scaleImage = true
this.scaleImageList = list
// if(this.scaleImageList[index]?.resultType == 'ToProductImage')this.scaleImageList[index].sourceUrl = this.scaleImageList[index].imgUrl
this.scaleImageIndex = index
if(dialogueIndex)this.robotAssits = dialogueIndex
// let scaleImageList = this.store.state.UploadFilesModule.moodboard
document.addEventListener('keydown',this.setKeydown)
},
async cancelDsign(){
document.removeEventListener('keydown',this.setKeydown)
let data = {
...JSON.parse(JSON.stringify(this.generateSuccess)),
}
let isIndex = -1
if(data?.oldId){
this.scaleImageList.forEach((rv:any,index:number)=>{
if(rv.designItemId == data?.oldId || rv.id == data?.oldId){
isIndex = index
}
})
}
data.isIndex = isIndex
if(isIndex != -1 && data.oldId){
await new Promise((resolve,reject)=>{
let this_ = this
Modal.confirm({
title: this.t('scaleImage.cover'),
icon: createVNode(ExclamationCircleOutlined),
okText: 'Yes',
cancelText: 'No',
mask:false,
centered:true,
onOk() {
this_.$emit('addGenerateImg',data)
resolve('')
},
onCancel(){
resolve('')
}
});
})
}else{
this.$emit('addGenerateImg',data)
}
this.scaleImage = false
this.scaleImageIndex = 0
this.isNext = false
this.generateSuccess = null
this.scaleImageList = []
},
lastStep(){
if(this.productimgIsProductimg) return
if(this.isNext)return
let num = this.scaleImageIndex
if(this.scaleImageIndex <= 0){
}else{
num -=1
this.setImageIndex(num)
}
},
nextStep(){
if(this.productimgIsProductimg) return
if(this.isNext)return
let num = this.scaleImageIndex
if(this.scaleImageIndex >= this.scaleImageList.length-1){
}else{
num += 1
this.setImageIndex(num)
}
},
download(){
let url = this.scaleImageList[this.scaleImageIndex].imgUrl || this.scaleImageList[this.scaleImageIndex]?.url
downloadIamge(url)
},
setScaleImageIndex(index:any){
// this.scaleImageIndex = index
this.setImageIndex(index)
},
setImageIndex(index:any){
if(this.isNext)return
let this_ = this
if(this.isCanvas){
this.isNext = true
new Promise((resolve,reject)=>{
Modal.confirm({
title: this.t('scaleImage.submitCanvas'),
icon: createVNode(ExclamationCircleOutlined),
okText: 'Yes',
cancelText: 'No',
mask:false,
centered:true,
onOk() {
this_.scaleImageIndex = index
this_.isNext = false
resolve('')
},
onCancel(){
this_.isNext = false
resolve('')
}
});
})
}else{
this.scaleImageIndex = index
}
},
LikeFile(item:any,str:string){
let parent:any = this.$parent
if(this.robotAssits){
parent.likeFile(item,this.scaleImageIndex,this.robotAssits)
}else{
parent.likeFile(item,str)
}
},
setKeydown(event:any){
if(event.keyCode == 37){
this.lastStep()
}else if(event.keyCode == 39){
this.nextStep()
}
},
},
});
</script>
<style>
.scaleImage_modal{
overflow: visible !important;
}
</style>
<style lang="less">
.scaleImage_modal {
.ant-modal-body {
display: flex;
flex-direction: column;
}
.productImg_content_item_title{
font-weight: 600;
font-size: 1.6rem;
&.productImg_content_item_title_menu{
margin-bottom: 6rem;
}
}
.scaleImage_content{
display: flex;
justify-content: center;
// margin-top: calc(5rem*1.2);
// height: 75%;
height: 100%;
position: relative;
.productImg_modal{
position: relative;
left: 0;
z-index: 9;
.productImg_left{
width: 100%;
display: flex;
height: 100%;
flex-direction: column;
.input_box_btnBox{
width: 100%;
}
.input_box{
justify-content: flex-end;
}
.productImg_content_item_generate_btn{
// transform: translateY(100%);
// position: absolute;
// bottom: 0;
width: 100%;
justify-content: space-around;
margin-top: 0;
}
.productImg_content_item_similarity{
padding-bottom: 2.4rem;
display: flex;
align-items: center;
input{
width: 5rem;
height: 5rem;
text-align: center;
font-size: 1.8rem;
}
}
}
}
.scaleImage_content_imgBox{
position: relative;
// max-width: 70rem;
width: 100%;
text-align: center;
justify-content: center;
> .loadBox{
display: flex;
width: auto;
height: 100%;
max-width: 50rem;
min-width: 40rem;
align-items: center;
justify-content: center;
}
img{
width: auto;
height: 100%;
max-width: 50rem;
min-width: 40rem;
object-fit: contain;
}
&.active{
display: flex;
img{
// width: 50%;
height: 100%;
object-fit: contain;
margin: 0 1rem;
}
}
.img_operate_block{
width: 3.6rem;
height: 3.6rem;
background: rgba(0,0,0,0.6);
border-radius: 50%;
text-align: center;
line-height: 3.6rem;
cursor: pointer;
margin-bottom: 0.4rem;
position: absolute;
right: 2rem;
top: 2rem;
opacity: 0;
display: flex;
align-items: center;
justify-content: center;
z-index: 2;
.operate_icon{
font-size: 1.8rem;
color: #fff;
&.fi-sr-heart{
color: red;
}
}
i{
display: flex;
font-size: 1.8rem;
color: #fff;
}
}
}
}
.scaleImage_content_imgBox:hover{
.img_operate_block{
opacity: 1;
}
}
.scaleImage_nav{
flex: 1;
margin: calc(2.5rem*1.2) calc(0rem*1.2);
display: flex;
justify-content: center;
align-items: center;
width: 100%;
top: 100%;
left: 0;
position: absolute;
.nav_left,.nav_right{
cursor: pointer;
top: 50%;
i{
display: flex;
font-size: 4rem;
transition: .3s all;
color: rgba(0, 0, 0, .5);
}
}
// .nav_left{
// left: 0;
// transform: translate(-200%,-50%);
// }
// .nav_right{
// right: 0;
// transform: translate(200%,-50%);
// }
.nav_left:hover,.nav_right:hover{
i{
color: rgba(0, 0, 0, 1);
}
}
.nav_list{
margin: 0 calc(2rem*1.2);
max-width: calc(60rem*1.2);
overflow-y: hidden;
&.nav_list::-webkit-scrollbar {
display: none;
}
.nav_centent{
width: auto;
display: flex;
}
img{
max-width: calc(5rem*1.2);
max-height: calc(5rem*1.2);
object-fit: cover;
object-position: 50%,50%;
margin-left: calc(1rem*1.2);
border-radius: calc(1rem*1.2);
overflow: hidden;
cursor: pointer;
padding: calc(.1rem*1.2);
flex-shrink: 0;
&.active{
border: 2px solid #aaaaaa;
}
}
img:nth-child(1){
margin-left: calc(0rem*1.2);
}
}
}
}
</style>

View File

@@ -45,17 +45,29 @@
{{ $t('HomeView.Redesign') }}
</div> -->
<div class="silder button_margin_14" v-show="likeDesignCollectionList?.length > 0">
<div class="text">Small</div>
<a-slider
class="system_silder"
v-model:value="elementWidth"
:min="minCollValue"
:max="maxCollValue-1"
@afterChange="setSystemDesigner(500)"
:tooltipVisible="false"
</div>
</div>
<div class="right_top_right">
<div class="generalModel_state">
<div class="generalModel_state_item smail">
<span>Size :</span>
<a-select
v-model:value="widthValue"
show-search
size="large"
allowClear
style="width: 150px"
placeholder="Please select"
:options="widthList"
@change="setSystemDesigner(500)"
>
</a-slider>
<div class="text">Big</div>
<!-- <template #option="{ value: val, label, icon }">
<span role="img" :aria-label="val">{{ icon }}</span>
{{ label }}
</template> -->
</a-select>
</div>
</div>
</div>
</div>
@@ -84,14 +96,36 @@
'like'
)">
<div class="content_img_flex">
<img class="content_img" :src="design.designOutfitUrl"
<img class="content_img" :src="design.designOutfitUrl||design.url"
:key="design.designOutfitUrl" designType="like" :index="index"/>
</div>
<div class="icon iconfont icon-jushoucanggift icon_like" @click.stop="
dislikeDesignCollection(
design,
index
)">
<div class="btn">
<i @click.stop="openEditBtn(design.designItemId||design.id)" class="fi fi-br-menu-dots-vertical"></i>
<div class="btnOpen" @click.stop="()=>openEditBtnId=-1" :class="{active:openEditBtnId == design.designItemId||openEditBtnId == design.id}">
<div class="item" @click="dislikeDesignCollection(design,design.resultType,index)">
<div class="text">On Like</div>
<div class="icon iconfont icon-jushoucanggift icon_like">
</div>
</div>
<!-- <div class="item" v-show="design.resultType == 'ToProductImage'" @click="setEditDesignType(likeDesignCollectionList,index,'TransferPose','add','like')">
<div class="text">Transfer Pose</div>
<div class="icon iconfont icon-jushoucanggift icon_like"></div>
</div> -->
<div class="item" v-show="design.resultType == 'ToProductImage'" @click="setEditDesignType(likeDesignCollectionList,index,'Relight','add','like')">
<div class="text">Relight</div>
<i class="fi fi fi-br-keyboard-brightness"></i>
</div>
<div class="item" v-show="design.resultType == 'Design'" @click="setEditDesignType(likeDesignCollectionList,index,'ToProductImage','add','like')">
<div class="text">To Product Image</div>
<i class="fi fi fi-ss-box-open"></i>
</div>
<!-- <div class="item" @click="setDeleteDesign(design,index)">
<div class="text">Delete</div>
<i class="fi fi-rr-trash icon_delete">
</i>
</div> -->
</div>
</div>
</div>
</div>
@@ -128,16 +162,33 @@
)">
<img class="content_img" :src="design.designOutfitUrl" designType="dislike" :index="index"/>
</div>
<div class="icon iconfont icon-jushoucang icon_like" :class="[driver__.driver?index == 0?driver__.index == 32?'Guide_img showEvents':'':'':'']" @click.stop="
likeDesignCollection(
design,
index
)
">
<div class="btn">
<i @click.stop="openEditBtn(design.designItemId||design.id)" class="fi fi-br-menu-dots-vertical"></i>
<div class="btnOpen" @click.stop="()=>openEditBtnId=-1" :class="{active:openEditBtnId == design.designItemId||openEditBtnId == design.id}">
<div class="item" @click="likeDesignCollection(design,index,design.resultType)">
<div class="text">Like</div>
<div class="icon iconfont icon-jushoucang icon_like">
</div>
</div>
<!-- <div class="item" v-show="design.resultType == 'ToProductImage'" @click="setEditDesignType(designCollectionList,index,'TransferPose','add','disLike')">
<div class="text">Transfer Pose</div>
<div class="icon iconfont icon-jushoucanggift icon_like"></div>
</div> -->
<div class="item" v-show="design.resultType == 'ToProductImage'" @click="setEditDesignType(designCollectionList,index,'Relight','add','disLike')">
<div class="text">Relight</div>
<i class="fi fi fi-br-keyboard-brightness"></i>
</div>
<div class="item" v-show="design.resultType == 'Design'" @click="setEditDesignType(designCollectionList,index,'ToProductImage','add','disLike')">
<div class="text">To Product Image</div>
<i class="fi fi fi-ss-box-open"></i>
</div>
<div class="item" @click="setDeleteDesign(design,index)">
<div class="text">Delete</div>
<i class="fi fi-rr-trash icon_delete">
</i>
</div>
</div>
</div>
<i class="fi fi-rr-trash icon_delete" @click.stop="
setDeleteDesign(design,index)">
</i>
</div>
</div>
@@ -165,13 +216,20 @@
<!-- design collection的进度蒙层 end-->
<affiche ref="affiche"></affiche>
<DesignDetailcopy v-if="detailDestroy" ref="designDetail" @destroy="setDetailDestroy" @finishRedesign="finishRedesign"></DesignDetailcopy>
<editDesignType ref="editDesignType"
@addGenerateImg="addGenerateImg"
:productData="{
upload:upload,
RelightDirection:RelightDirection,
RelightDirectionList:RelightDirectionList,
}"
:isProductimg="true"></editDesignType>
</div>
</template>
<script lang="ts">
import { defineComponent, h, ref, computed, reactive, toRefs, inject,provide,nextTick,createVNode,onBeforeUnmount, toRef} from "vue";
import { defineComponent, h, ref, computed, toRefs, inject,provide,nextTick,reactive,onBeforeUnmount, toRef} from "vue";
// import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
import NewCollectionReview from "@/component/HomePage/NewCollectionReview.vue";
import generalCanvas from "@/component/modules/generalCanvas.vue";
@@ -183,6 +241,7 @@ import { useStore } from "vuex";
import { Https } from "@/tool/https";
import { openGuide,driverObj__ } from "@/tool/guide";
import { LoadingOutlined ,ExclamationCircleOutlined} from "@ant-design/icons-vue";
import editDesignType from './editDesignType/index.vue'
// import JSZip, { forEach } from "jszip";
import { setCookie, getCookie, WriteCookie } from "@/tool/cookie";
import i18n from "@/lang";
@@ -200,7 +259,8 @@ export default defineComponent({
NewCollectionReview,
affiche,
generalCanvas,
DesignDetailcopy
DesignDetailcopy,
editDesignType,
},
emits:['setTask'],
activated() {
@@ -210,6 +270,25 @@ export default defineComponent({
props:['isState'],
setup(props,{emit}) {
const store = useStore();
const editDesignType = reactive({
upload:{id:store.state.Workspace.probjects.id},
RelightDirectionList:[
{
value:'Right Light',
label:useI18n().t('ProductImg.RightLight')
},{
value:'Left Light',
label:useI18n().t('ProductImg.LeftLight')
},{
value:'Top Light',
label:useI18n().t('ProductImg.TopLight')
},{
value:'Bottom Light',
label:useI18n().t('ProductImg.BottomLight')
}
],
RelightDirection:'Right Light'
})
let likeDesignCollectionList: any = computed(() => {
return store.state.HomeStoreModule.likeDesignCollectionList;
});
@@ -276,6 +355,23 @@ export default defineComponent({
])
const dataDom = reactive({
collectionModal:null as any,
editDesignType:null as any,
})
const designData = reactive({
openEditBtnId:-1,
likeLoading: false, //喜欢防抖
widthList:[
{
label:'Medium',
value:170,
},{
label:'Large',
value:250,
},{
label:'Extra-large',
value:400,
}
],
})
provide('exportNav',exportNav)
let isShowOperate = ref(false)
@@ -298,10 +394,8 @@ export default defineComponent({
let sessionStorageCollValue = JSON.parse(sessionStorage.getItem('collValue') as any)
const collItemSize = reactive({
widthValue:150,
collValue:6,
elementWidth:100,
minCollValue:100,
maxCollValue:999,
padding:60,
likeStyle:{
width:'240px',
@@ -340,10 +434,10 @@ export default defineComponent({
collItemSize.collTime = setTimeout(()=>{
nextTick(()=>{
let parentWidth = likeItemDom.value.parentElement.offsetWidth
collItemSize.elementWidth = collItemSize.elementWidth == -1?100:collItemSize.elementWidth
collItemSize.maxCollValue = parentWidth / 2
collItemSize.collValue = Math.floor(parentWidth / collItemSize.elementWidth)
collItemSize.padding = Math.floor(parentWidth - (collItemSize.collValue * collItemSize.elementWidth))
collItemSize.widthValue = collItemSize.widthValue == -1?100:collItemSize.widthValue
collItemSize.widthValue = collItemSize.widthValue > parentWidth?parentWidth:collItemSize.widthValue
collItemSize.collValue = Math.floor(parentWidth / collItemSize.widthValue)
collItemSize.padding = Math.floor(parentWidth - (collItemSize.collValue * collItemSize.widthValue))
let value = collItemSize.collValue
collItemSize.itemStyle.width = (parentWidth - collItemSize.padding - (value * 10)) / value
@@ -508,6 +602,7 @@ export default defineComponent({
const setLikeDislLike = (str:string,value:any)=>{
posiitonData.value.likeSelectIndex = 0
nextTick(()=>{
console.log(posiitonData.value.likeElList)
if(str == 'like'){
let elArr = likeItemDom.value.children
posiitonData.value.likeElList.push({
@@ -517,8 +612,8 @@ export default defineComponent({
userLikeSortId:value.userLikeSortId
});
let collItem = posiitonData.value.generateElList.filter((item:any)=>item.userLikeSortId == value.designItemId)[0]
console.log(collItem)
posiitonData.value.generateElList = posiitonData.value.generateElList.filter((item:any)=>item.userLikeSortId != value.designItemId)
posiitonData.value.generateElList.forEach((item:any)=>{
if(item.sort > collItem.sort){
item.sort-=1
@@ -565,8 +660,178 @@ export default defineComponent({
const openCollection = (str:string)=>{
dataDom.collectionModal.init(str)
}
const openEditBtn = (id:number)=>{
designData.openEditBtnId = id
let removeEditBtnId = ()=>{
designData.openEditBtnId = -1
document.removeEventListener('click',removeEditBtnId)
}
document.addEventListener('click',removeEditBtnId)
}
let setEditDesignType = (arr:any,index:any,type:any,status:any,listType:string)=>{
arr = JSON.parse(JSON.stringify(arr))
let item = arr[index]
if(status == 'add'){
item.sourceUrl = item.designOutfitUrl || item.url
}else{
}
arr[index].resultType = type
// dataDom.editDesignType.isProductimg = isLike
dataDom.editDesignType.isProductimg = true
dataDom.editDesignType.init(arr,index,null,status,listType)
dataDom.editDesignType.isLike = false
dataDom.editDesignType.productimgRelightDirection = editDesignType.RelightDirection
dataDom.editDesignType.isComparison = true
}
const addGenerateImg = (data:any)=>{
if(!data.id)return
let obj = {
id:data.id,
designItemId:data.id,
// designItemId:data.elementId,
designOutfitId:'',
designOutfitUrl:data.url,
sourceUrl:data.sourceUrl,
resultType:data.resultType,
elementId:data.elementId,
elementType:data.elementType,
sort:data.sort,
}
let list = []
if(data.listType == 'disLike'){
list = designCollectionList.value
}else{
list = likeDesignCollectionList.value
}
if(data.isIndex == -1){
if(data.listType == 'like'){
likeDesignCollection(obj,-1,data.resultType)
}else{
list.unshift(obj)
nextTick().then(()=>{
setDesignItemStyle()
moveItem('disLike')
})
}
}else{
// collectionLikeUpdate
// Https
if(data.listType == 'like'){
let value = {
"oldRelationId": data.oldId,
"relationId": data.id,
"relationType": data.resultType,
}
Https.axiosPost(Https.httpUrls.collectionLikeUpdate,value).then((rv:any)=>{
if(rv){
}
})
}
list[data.isIndex].designOutfitUrl = obj.designOutfitUrl
list[data.isIndex].resultType = obj.resultType
list[data.isIndex].id = obj.id
list[data.isIndex].designItemId = obj.designItemId
list[data.isIndex].sourceUrl = obj.sourceUrl
}
}
const setNoDesignLike = (design:any,index:any,type:any,str:string) => {
let url
let data = {
toProductImageResultId:[(design.designItemId || design.id)],
projectId: store.state.Workspace.probjects.id,
}
if(type == 'ToProductImage' || type == 'Relight'){
if(str == 'like'){
url = Https.httpUrls.productImageLike
}else{
url = Https.httpUrls.productImageUnLike
}
}else{
if(str == 'like'){
url = Https.httpUrls.productImageLike
}else{
url = Https.httpUrls.productImageUnLike
}
}
designData.likeLoading = true;
Https.axiosPost(url, data).then(
(rv) => {
if(str == 'like'){
let value:any = {
...design,
sort:likeDesignCollectionList.value.length + 1,
}
design.groupDetailId = rv.groupDetailId;
store.commit(
"addLikeDesignCollectionList",
value
);
setLikeDislLike('like',value)
if(index != -1)store.commit("deleteDesignCollectionList", index);
}else{
if(index != -1)store.commit("deleteLikeDesignCollectionList", index);
store.commit("addDesignCollectionList", [design]);
likeDesignCollectionList.value.forEach((item:any)=>{
if(item.sort > design.sort){
item.sort-=1
}
})
}
designData.likeLoading = false;
}
).catch(res=>{
designData.likeLoading = false;
});
}
let likeDesignCollection = (design:any,index:any,type:any) => {
if (designData.likeLoading) {
return;
}
if(type != 'Design'){
setNoDesignLike(design,index,type,'like')
return
}
let data = {
designItemId: design.designItemId,
userGroupId: store.state.HomeStoreModule.userGroupId,
projectId: store.state.Workspace.probjects.id,
timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,
designPythonOutfitId:design.designOutfitId?design.designOutfitId:design.designPythonOutfitId
};
designData.likeLoading = true;
Https.axiosPost(Https.httpUrls.designLike, data)
.then((rv: any) => {
if (rv) {
let value:any = {
...design,
id:rv.userLikeId,
groupDetailId:rv.userLikeId,
userLikeSortId:rv.userLikeSortId,
userLikeGroupId:rv.userGroupId,
sort:rv.sort,
}
store.commit("setUserGroupId", rv.userGroupId);
design.groupDetailId = rv.groupDetailId;
store.commit(
"addLikeDesignCollectionList",
value
);
setLikeDislLike('like',value)
if(index != -1)store.commit("deleteDesignCollectionList", index);
}
designData.likeLoading = false;
})
.catch((rv) => {
designData.likeLoading = false;
});
}
return {
store,
...toRefs(editDesignType),
likeDesignCollectionList,
deleteDesignCollectionList,
designCollectionList,
@@ -592,6 +857,7 @@ export default defineComponent({
setDesignItemStyle,
showDesignMark,
...toRefs(collItemSize),
...toRefs(designData),
...toRefs(dataDom),
likeItemDom,
collItemDom,
@@ -609,6 +875,10 @@ export default defineComponent({
posiitonData,
moveItem,
openCollection,
setEditDesignType,
openEditBtn,
addGenerateImg,
setNoDesignLike,
};
},
data() {
@@ -626,7 +896,6 @@ export default defineComponent({
designProgress: 0,
startDesignType: "design", //设计类型 design 和 resdesign
disLikeLoading: false, //不喜欢防抖
likeLoading: false, //喜欢防抖
dragIdx:0,
designRandom:'',
detailDestroy:false,//销毁detail
@@ -996,7 +1265,15 @@ export default defineComponent({
deleteDesignCollection(list:any,index:any){
list.splice(index,1)
},
likeDesignCollection(design: any, index: any) {
likeDesignCollection(design: any, index: any,type:any) {
if (this.likeLoading) {
return;
}
if(type != 'Design'){
this.setNoDesignLike(design,index,type,'like')
return
}
let data = {
designItemId: design.designItemId,
userGroupId: this.store.state.HomeStoreModule.userGroupId,
@@ -1004,9 +1281,7 @@ export default defineComponent({
timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,
designPythonOutfitId:design.designOutfitId?design.designOutfitId:design.designPythonOutfitId
};
if (this.likeLoading) {
return;
}
this.likeLoading = true;
Https.axiosPost(Https.httpUrls.designLike, data)
@@ -1027,15 +1302,12 @@ export default defineComponent({
value
);
this.setLikeDislLike('like',value)
this.store.commit("deleteDesignCollectionList", index);
if(index != -1)this.store.commit("deleteDesignCollectionList", index);
if (this.startDesignType === "resDesign") {
this.getHistoryChoose(this.userGroupId, "like");
}
}
this.likeLoading = false;
if(this.driver__.driver){
driverObj__.moveNext();
}
})
.catch((rv) => {
this.likeLoading = false;
@@ -1043,13 +1315,18 @@ export default defineComponent({
},
//不喜欢设计
dislikeDesignCollection(design: any, index: any) {
dislikeDesignCollection(design:any,type:string, index: any) {
let data = {
designId: design.designId || this.designId,
designPythonOutfitId:design.designOutfitId,
groupDetailId: design.groupDetailId || design.id,
timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,
};
console.log(type)
if(type != 'Design'){
this.setNoDesignLike(design,index,type,'disLike')
return
}
if (this.disLikeLoading) {
return;
}
@@ -1237,20 +1514,6 @@ export default defineComponent({
});
return colorList;
},
//点击下拉图标出现操作
changeShowOperateContent() {
this.isShowOperate = !this.isShowOperate;
document.addEventListener(
"click",
this.closeShowOperateContent,
false
);
},
//关闭下拉图标
closeShowOperateContent() {
this.isShowOperate = false;
document.removeEventListener("click", this.closeShowOperateContent);
},
//销毁图片详情
setDetailDestroy() {
@@ -1265,7 +1528,12 @@ export default defineComponent({
collectionList: any,
type: string
) {
// if()
if(this.isMove)return
if(design.resultType != "Design"){
this.setEditDesignType(collectionList,index,design.resultType,'edit',type)
return
}
design.designOutfitId = design.designPythonOutfitId?design.designPythonOutfitId:design.designOutfitId
let data = {
design: design,
@@ -1644,14 +1912,9 @@ export default defineComponent({
justify-content: center;
position: absolute;
transition: top,left .3s;
&:hover .icon_like,&:hover .icon_delete,&:hover .Dustbin {
display: block;
&:hover .btn{
display: flex;
}
// &:nth-child(4n) {
// margin-right: 0;
// }
.content_img_flex {
display: flex;
justify-content: center;
@@ -1660,6 +1923,7 @@ export default defineComponent({
height: 100%;
border-radius: 2rem;
border: 2px solid #E0E0E0;
overflow: hidden;
background: #fff;
}
&.active{
@@ -1677,27 +1941,61 @@ export default defineComponent({
// max-height: 100%;
object-fit: contain;
}
.Dustbin{
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
cursor: pointer;
color: #fff;
border-radius: 4rem;
font-size: 1.8rem;
padding: 1rem 1.5rem;
background: rgba(0, 0, 0, 0.7);
display: none;
}
.icon_like,.icon_delete {
font-size: 2.4rem;
.btn{
top: 1rem;
right: 1rem;
display: flex;
position: absolute;
cursor: pointer;
display: none;
flex-direction: column;
align-items: center;
> i{
cursor: pointer;
width: 3rem;
height: 3rem;
display: flex;
align-items: center;
justify-content: center;
}
> .btnOpen{
position: absolute;
width: max-content;
left: 3rem;
top: 3rem;
transform: translateX(-100%);
background: #e4e4e7;
padding: 1.2rem;
border-radius: 1.2rem;
display: none;
z-index: 99;
&.active{
display: block;
}
> .item{
display: flex;
align-items: center;
margin-bottom: .8rem;
padding: .8rem;
border-radius: .8rem;
cursor: pointer;
&:last-child{
margin: 0;
}
> .text{
font-size: 1.2rem;
margin-right: 1rem;
}
&:hover{
background: #efeff1;
}
}
}
.icon_like,.icon_delete {
font-size: 1.4rem;
cursor: pointer;
}
}
.icon_delete{
top: 5rem;
}

View File

@@ -76,7 +76,7 @@
<template #suffixIcon
><span
class="icon iconfont icon-xiala"
style="color: #343579"
style="color: #000"
></span
></template>
</a-select> -->
@@ -1356,10 +1356,10 @@ export default defineComponent({
}
.ant-slider-track{
background: #343579;
background: #000;
}
.ant-slider-handle{
border-color: #343579;
border-color: #000;
}
.placement_remove_point_block{

View File

@@ -19,7 +19,7 @@
<template #suffixIcon
><span
class="icon iconfont icon-xiala"
style="color: #343579"
style="color: #000"
></span
></template>
</a-select>

View File

@@ -17,7 +17,7 @@
<chat ref="chatDom" @chatChange="chatChange" v-show="openType == 'history'"></chat>
</template>
<script lang="ts">
import { defineComponent,computed,ref,watch,nextTick,provide,toRefs, reactive, onMounted} from 'vue'
import { defineComponent,computed,inject,watch,nextTick,provide,toRefs, reactive, onMounted} from 'vue'
import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
import { Https } from "@/tool/https";
import { useStore } from "vuex";
@@ -31,9 +31,6 @@ export default defineComponent({
components:{
design,newPorject,chat
},
props:{
settingGetHistory:{type:Function,default:()=>{}},
},
emits:['setTask','newProject'],
setup(props,{emit}) {
const store = useStore();
@@ -45,6 +42,7 @@ export default defineComponent({
selectObject:computed(()=>store.state.Workspace.probjects) as any,//选择的项目
chatData:null as any,
})
let settingGetHistory:any = inject('settingGetHistory')
const setIsShowMark = (boolean:boolean)=>{
data.isShowMark = boolean
}
@@ -55,7 +53,7 @@ export default defineComponent({
chatDom:null as any,
})
watch(() => route.query,
(query, oldQuery) => {
(query:any, oldQuery:any) => {
data.routeQuery = query
const key = Object.keys(query)?.[0]
if(key){
@@ -63,14 +61,20 @@ export default defineComponent({
}else{
data.openType = ''
}
// if((query.history || query.id) != (oldQuery.history || oldQuery.id)){
// }
nextTick(()=>{
if(query.id || query.history){
if(query.history || query.id){
data.isShowMark = true
createData()
if(query.type == 'Works'){
getWorks(query.id || query.history)
}else{
// setProjectData({id:query.id,process:'toProduct'})
getHistory(query.id || query.history)
}
}else{
createData()
}
})
@@ -78,6 +82,7 @@ export default defineComponent({
{ immediate: true } // 立即触发一次以处理初始参数
);
const createData = ()=>{
store.commit("createProbject");
store.commit("clearAllData");
store.commit("clearAllCollection");
store.commit("setAllBoardDataChoose",{});
@@ -112,7 +117,8 @@ export default defineComponent({
id,
}
if(!id)return
createData()
data.isShowMark = false
Https.axiosPost(Https.httpUrls.selectHistoryProject,value).then((rv: any) => {
setProjectData(rv)
}).catch((res)=>{
@@ -128,26 +134,26 @@ export default defineComponent({
id:rv.id,
type:rv.process == 'SERIES_DESIGN'?'seriesDesign':'singleProductDesign',
httpType:rv.process,//项目类型
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,
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,
position:{
label:rv.workspaceVO.positionEnum.value,
value:rv.workspaceVO.positionEnum.name
label:rv.workspaceVO?.positionEnum?.value,
value:rv.workspaceVO?.positionEnum?.name
},
positionList:[],
publishData:{
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:[],
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:[],
},
model:[]
}
@@ -167,7 +173,11 @@ export default defineComponent({
// dataDom.workflow.isUpdataPorject = true
// })
setChatData()
getCollection()
if(route.name == 'tools'){
getCollection('tools')
}else{
getCollection('design')
}
}
const setChatData = ()=>{
if(!data.chatData)return
@@ -193,10 +203,16 @@ export default defineComponent({
// })
// })
// }
const getCollection = ()=>{
const getCollection = (type:string)=>{
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']
}
let value:any = {
"id":data.selectObject.id,
"moduleList":["moodBoard", "printBoard", "colorBoard", "sketchBoard",'design','toProduct','relight','poseTransfer','mannequin']
"moduleList":moduleList,
}
Https.axiosPost(Https.httpUrls.getModuleContent,value).then(async (rv)=>{
historyChooseData(rv)//设置历史数据
@@ -214,7 +230,7 @@ export default defineComponent({
}
let allBoardData = ['sketchBoard','moodBoard','printBoard','colorBoard']
// let allBoardData = ['sketchBoard','moodBoard','printBoard','colorBoard','toProduct','relight','poseTransfer','mannequin']
let canvasData = ['canvas']
let canvasData = ['canvas','deReconstruction']
for (let index = 0; index < canvasData.length; index++) {
const item = canvasData[index];
await getCanvasData(item)
@@ -235,7 +251,9 @@ export default defineComponent({
}
})
data.isShowMark = false
dataDom.design.openSetData()
if(type == 'design'){
dataDom.design.openSetData()
}
})
}
const getCanvasData = (str:any)=>{
@@ -380,11 +398,11 @@ export default defineComponent({
if(value.type == '[DESIGN_SIGNAL]' && dataDom.design){
dataDom.design.designNewCollection()
}else{
getCollection()
getCollection('design')
}
}
const newProject = (value:any)=>{
props.settingGetHistory()
settingGetHistory()
router.push(`home?history=${value.id}`)
data.chatData = value

View File

@@ -98,9 +98,9 @@ export default defineComponent({
},
chatContent:'',
hintList:[
'描述1',
'描述3',
'描述2',
'设计一套田园风衣服',
'设计一套夏日风衣服',
'设计一套未来风格的衣服',
],
enableThinking:false,//深度思考
uploadFile:null as any,
@@ -125,7 +125,7 @@ export default defineComponent({
e.target.style.height = `${e.target.scrollHeight}px`;
}
const addChatContent = (item:any)=>{
if((data.textarea.value += item.length) > 10000)return
if((data.textarea.value?.length + item.length) > 10000)return
data.chatContent += item
data.textarea.value += item
}

View File

@@ -39,26 +39,20 @@
<div class="gallery_btn" style="line-height: 5rem;" @click="setStyle">{{ $t('Habit.Select') }}</div>
</div>
<div class="style marginBottom brand">
<div class="text">Bran DNA</div>
<div class="text">Brand DNA</div>
<div class="text"><img v-show="selectObject.userBrandDna" :src="selectObject.userBrandDnaImg"></div>
<!-- <div class="text"><img v-show="selectObject.userBrandDna" :src="selectObject.userBrandDnaImg">{{ selectObject.userBrandDnaName }}</div> -->
<div class="gallery_btn" style="line-height: 5rem;" @click="setBrandDNA">{{ $t('Habit.Select') }}</div>
</div>
<div class="systemDesigner marginBottom" v-if="selectObject.userBrandDna">
<div class="brandDNAStrenght marginBottom" v-if="selectObject.userBrandDna">
<div class="text">
Brand DNA Strength
</div>
<a-slider class="system_silder"
v-model:value="selectObject.brandPercentage"
:tip-formatter="formatterBrandDNA"
:tooltipVisible="false"
>
</a-slider>
<div class="text">
<div class="left">
Bran DNA<span>({{systemBrandDNA.system}}%)</span>
</div>
<div class="right">
System<span>({{systemBrandDNA.brandDNA}}%)</span>
</div>
</div>
</div>
<div class="systemDesigner marginBottom" v-if="show.systemDesigner">
<a-slider class="system_silder"
@@ -150,10 +144,6 @@ export default defineComponent({
system:0,
designer:0,
},
systemBrandDNA:{
system:0,
brandDNA:0,
},
setIsShowMark:inject('setIsShowMark') as any,
})
// watch(()=>data.selectObject_,(newVal)=>{
@@ -193,10 +183,7 @@ export default defineComponent({
return `${num}%`;
}
const formatterBrandDNA = (value: number)=>{
data.systemBrandDNA.system = 100 - value
data.systemBrandDNA.brandDNA = value
let num = Math.abs((value-50)*2)
return `${num}%`;
return `${value}%`;
}
const complete = ()=>{
if(!data.selectObject.name){
@@ -223,28 +210,13 @@ export default defineComponent({
Https.axiosPost(Https.httpUrls.projectSaveOrUpdate,value).then((rv)=>{
if(rv){
data.selectObject.id = rv.id
let model:any = {}
let position = []
if(data.selectObject.sex == "Female"){
// if(rv.workspaceVO.sex == "Female"){
model = {
id:rv.workspaceVO.mannequinFemaleId,
type:rv.workspaceVO.mannequinFemaleType,
url:rv.workspaceVO.femalePresignedUrl,
}
position = store.state.UserHabit.FemalePosition
}else{
model = {
id:rv.workspaceVO.mannequinMaleId,
type:rv.workspaceVO.mannequinMaleType,
url:rv.workspaceVO.malePresignedUrl,
}
position = store.state.UserHabit.MalePosition
}
// model.url = rv.workspaceVO.malePresignedUrl
data.selectObject.model = model
data.selectObject.positionList = position
// store.commit('setProbject',data.selectObject)
// let position = []
// if(data.selectObject.sex == "Female"){
// position = store.state.UserHabit.FemalePosition
// }else{
// position = store.state.UserHabit.MalePosition
// }
// data.selectObject.positionList = position
emit('setProject',data.selectObject)
}
})
@@ -392,6 +364,18 @@ export default defineComponent({
justify-content: space-between;
}
}
> .brandDNAStrenght{
display: flex;
align-items: center;
> .text{
margin-right: 3rem;
display: flex;
justify-content: space-between;
}
> .system_silder{
flex: 1;
}
}
> .position{
> .text{
margin-right: 1rem;

View File

@@ -2,8 +2,29 @@
<div class="patternMaking3D">
<div class="selectModel">
<div class="heard selectList">
<div :class="{active:libraryOrModel == 'model'}" @click="setLibraryOrModel('model')">Clothing</div>
<div :class="{active:libraryOrModel == 'print'}" @click="setLibraryOrModel('print')">Print</div>
<div class="title" :class="{active:libraryOrModel == 'model'}" @click="setLibraryOrModel('model')">Clothing</div>
<div class="title" :class="{active:libraryOrModel == 'print'}" @click="setLibraryOrModel('print')">Print</div>
<div class="generalModel_state">
<div class="generalModel_state_item smail">
<a-select
ref="select"
v-model:value="sex"
:options="sexList"
size="large"
:fieldNames="{ label: 'name', value: 'value' }"
style="width:20rem"
@change="sexChange"
>
<template #suffixIcon
><span
class="icon iconfont icon-xiala"
style="color: #000"
></span
></template>
</a-select>
</div>
</div>
</div>
<div class="list" v-show="libraryOrModel == 'model'" v-if="maskShow">
<div v-for="item in modelList" class="modelItem" :class="{active:item.id == selectModel.id}" @click="setSelectModel(item)">
@@ -86,6 +107,8 @@ export default defineComponent({
// }),
selectObject:computed(()=>store.state.Workspace.probjects),//选择的项目
modelList:[] as any,
sex:'Female',
sexList:computed(()=>store.state.UserHabit.sex.value),
printList:computed(()=>store.state.UploadFilesModule.allBoardData.printboardFiles),
isShowMark:false,
isNoData:false,
@@ -97,12 +120,12 @@ export default defineComponent({
maskShow:false,
libraryOrModel:'model'
})
watch(()=>data.selectObject.sex,(newVal)=>{
const sexChange = ()=>{
data.modelList = []
data.currentPage = 0,
data.isNoData = false
data.isShowMark = false
})
}
const setSelectModel = (item:any)=>{
data.isShowMark = true
const value = {
@@ -143,7 +166,7 @@ export default defineComponent({
let value = {
page: data.currentPage,
size:data.pageSize,
sex:data.selectObject.sex,
sex:data.sex,
}
data.isShowLoading = true
Https.axiosPost(Https.httpUrls.threeDPage,value).then(
@@ -177,7 +200,7 @@ export default defineComponent({
dataDom.download.openDown(data.selectModel.id)
}
const setLibraryOrModel = (str:any)=>{
if(str == 'print' && data.selectModel.id == -1)return
// if(str == 'print' && data.selectModel.id == -1)return
data.libraryOrModel = str
}
const setMaterial = (item:any)=>{
@@ -191,6 +214,7 @@ export default defineComponent({
return{
...toRefs(dataDom),
...toRefs(data),
sexChange,
setSelectModel,
openSetData,
getModelList,
@@ -246,14 +270,19 @@ export default defineComponent({
display: flex;
justify-content: space-between;
width: 100%;
align-items: center;
&.selectList{
justify-content: flex-start;
> div{
> .title{
position: relative;
margin-right: 2rem;
margin-bottom: 2rem;
cursor: pointer;
// margin-bottom: 2rem;
}
> div::before{
> .generalModel_state{
margin-left: auto;
}
> .title::before{
position: absolute;
content: "";
display: block;

View File

@@ -79,7 +79,7 @@
<div class="element">
<div class="title"><i class="fi fi-rs-comments"></i><span>Selected Video</span></div>
<div class="content">
<generalDrag ref="generalDragLeft" v-if="isState" :list="likeList" :isLike="true" :isVideo="true" @setBtn="likeSetBtn"></generalDrag>
<generalDrag ref="generalDragLeft" :list="likeList" :isLike="true" :isVideo="true" @setBtn="likeSetBtn"></generalDrag>
</div>
<!-- <div class="btnLeft" @click="setSize('left')" :class="{'active':button.left}">
<span class="icon iconfont icon-xiala"></span>
@@ -93,7 +93,7 @@
<div class="element">
<div class="title"><i class="fi fi-rs-comments"></i><span>Generated Video</span></div>
<div class="content">
<generalDrag ref="generalDragRight" v-if="isState" :list="noLikeList" :isVideo="true" @setBtn="noLikeSetBtn"></generalDrag>
<generalDrag ref="generalDragRight" :list="noLikeList" :isVideo="true" @setBtn="noLikeSetBtn"></generalDrag>
</div>
</div>
</div>
@@ -118,10 +118,7 @@ export default defineComponent({
// selectList,
},
props:{
isState:{
type:Boolean,
default:false,
}
},
emits:[],
setup(props,{emit}) {
@@ -141,7 +138,7 @@ export default defineComponent({
},
waitList:[],
likeList:computed(()=>store.state.HomeStoreModule.poseTransfer),
noLikeList:[],
noLikeList:[ { "id": 128, "taskId": "df9cd154-6cf9-488a-8e64-426ef4a27e13-83", "productImage": null, "gifUrl": "https://www.minio-api.aida.com.hk/aida-users/83/pose_transform_gif/df9cd154-6cf9-488a-8e64-426ef4a27e13-83.gif?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=admin%2F20250530%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250530T015548Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=2a43ad4a389e8366207b6500506c17140e0387924a2adcb35188f2e59777e422", "videoUrl": "None", "firstFrameUrl": "https://www.minio-api.aida.com.hk/aida-users/83/pose_transform_first_img/df9cd154-6cf9-488a-8e64-426ef4a27e13-83.png?response-content-type=image%2Fpng&response-content-disposition=inline&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=admin%2F20250530%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250530T015548Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=e202d13874f0a28105602a268c802d4c99d2fbecd06a9460cc07e7c7ecbd0559", "isLiked": 0, "status": "Success", "collectionType": null, "url": "https://www.minio-api.aida.com.hk/aida-users/83/pose_transform_first_img/df9cd154-6cf9-488a-8e64-426ef4a27e13-83.png?response-content-type=image%2Fpng&response-content-disposition=inline&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=admin%2F20250530%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250530T015548Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=e202d13874f0a28105602a268c802d4c99d2fbecd06a9460cc07e7c7ecbd0559" } ],
isGenerate:false,//判断是否正在进行generate
remGenerate:false,
removeGenerate:false,
@@ -150,6 +147,7 @@ export default defineComponent({
selectPose:null as any,
})
const setIsShowMark:any = inject('setIsShowMark')
const createProbject:any = inject('createProbject')
const dataDom = reactive({
generalDragLeft:null as any,
generalDragRight:null as any,
@@ -158,7 +156,6 @@ export default defineComponent({
const selectImgItem = (item:any,)=>{
data.selectImg = item
data.fileList.forEach((listItem:any)=>listItem.isChecked = false)
console.log(data.currentList)
data.currentList.forEach((listItem:any)=>listItem.isChecked = false)
item.isChecked = true
if(item.url || item.imgUrl)data.selectImg.minioUrl = getMinioUrl(item.url || item.imgUrl)
@@ -166,6 +163,7 @@ export default defineComponent({
const openSetData = ()=>{
// dataDom.generalDrag.openSetData()
data.currentList = store.state.UploadFilesModule.modularData.toProduct
data.currentList = data.currentList?data.currentList:[]
setIsShowMark(false)
if(data.poseList.length == 0){
getPoseList()
@@ -175,7 +173,6 @@ export default defineComponent({
const setCloudImg = ()=>{
let arr = store.state.UploadFilesModule.cloudList
let list = JSON.parse(JSON.stringify(arr.poseTransfer)) || []
console.log(list)
list.forEach((item:any)=>{
item.url = item.firstFrameUrl
data.noLikeList.unshift(item)
@@ -300,7 +297,7 @@ export default defineComponent({
});
}
}
let beforeUpload = (file: any)=>{
let beforeUpload = async (file: any)=>{
const isJpgOrPng =
file.type === "image/jpeg" ||
file.type === "image/png" ||
@@ -313,7 +310,10 @@ export default defineComponent({
if (!isLt2M) {
message.info(useI18n().t('MoodboardUpload.jsContent4'));
}
return (isJpgOrPng && isLt2M) || Upload.LIST_IGNORE;
if(!data.upload.projectId){
await createProbject()
}
return (isJpgOrPng && isLt2M && data.upload.projectId) || Upload.LIST_IGNORE;
}
const fileUploadChange = (value: any)=> {
let file = value.file;

View File

@@ -24,16 +24,12 @@
/>
</div>
<div
class="content_item_imgBox_itemImg"
class="imgBox"
v-show="file?.status === 'done'"
>
<img @click="setGenerate(file)" :class="[file?.isChecked?'active':'']" :src="file?.imgUrl" class="upload_img"/>
<a-checkbox v-model:checked="file.isChecked"></a-checkbox>
<!-- <div class="content_item_imgBox_itemImg_delete" @click="deleteFile(index)">
<i class="fi fi-rr-trash"></i>
</div> -->
</div>
</div>
<div class="upload_file_item upload_component">
@@ -116,11 +112,6 @@
</div>
</div>
</div>
<!-- <div class="productImg_content_item_title">{{$t('ProductImg.Upload')}}</div>
<div class="productImg_content_item_imgBox generalScroll upload_item">
</div> -->
<div class="productImg_content_item_generate_btn input_border">
<div class="input_box">
<div v-show="!isProductimg" class="generage_btn started_btn" @click.stop="getPrductimg">
@@ -232,7 +223,7 @@
<script lang="ts">
import { LoadingOutlined } from "@ant-design/icons-vue";
import { defineComponent,watch,createVNode, h, ref ,toRefs,computed,reactive,triggerRef, nextTick} from "vue";
import { defineComponent,watch,createVNode, h, ref ,toRefs,computed,reactive,triggerRef, nextTick, inject} from "vue";
import { Https } from "@/tool/https";
import { getCookie,setCookie } from "@/tool/cookie";
// import domTurnImg from '@/tool/domTurnImg'
@@ -265,6 +256,7 @@ export default defineComponent({
let driver__:any = computed(()=>{
return store.state.Guide.guide
})
const createProbject:any = inject('createProbject')
let productImgData:any = reactive({
isShowMark:false,
fileList:{},
@@ -411,7 +403,7 @@ export default defineComponent({
bor = false
}
}
let beforeUpload = (file: any)=>{
let beforeUpload = async (file: any)=>{
const isJpgOrPng =
file.type === "image/jpeg" ||
file.type === "image/png" ||
@@ -424,6 +416,12 @@ export default defineComponent({
if (!isLt2M) {
message.info(useI18n().t('MoodboardUpload.jsContent4'));
}
if(!productImgData.selectObject.id){
productImgData.selectObject.id = await createProbject()
upload.value = {
projectId:productImgData.selectObject.id
}
}
return (isJpgOrPng && isLt2M) || Upload.LIST_IGNORE;
}
let deleteFile = (index:any)=>{
@@ -968,33 +966,28 @@ methods: {
padding: 0;
overflow: hidden;
}
.upload_file_item{
display: flex;
margin-right: 1rem;
height: 14rem !important;
width: 9rem;
border: none !important;
&.upload_file_item:last-child{
width: 9rem;
margin-right: 0rem;
}
}
// width: 45%;
.productImg_content_item_imgBox{
flex-shrink: 0;
margin-bottom: 3rem;
.content_item_imgBox_itemImg{
width: auto;
max-width: 20rem;
width: 100%;
height: 25rem;
.content_item_imgBox_itemImg ,.upload_file_item{
margin-right: 1rem;
width: calc(100% / 2 - .5rem);
cursor: pointer;
overflow: hidden;
display: flex;
justify-content: center;
flex-shrink: 0;
height: 25rem;
position: relative;
> .imgBox{
width: 100%;
}
img{
object-fit: contain;
}
}
.upload_file_item{
flex-shrink: 0;
width: 36rem;
}
}
.productImg_content_item_generate{
--width:100%;

View File

@@ -1054,7 +1054,7 @@ export default defineComponent({
.tip_content {
font-size: 1.3rem;
font-weight: bold;
color: #343579;
color: #000;
cursor: pointer;
}

View File

@@ -1502,7 +1502,7 @@ export default defineComponent({
width: 100%;
opacity: 0;
height: 100%;
background: #343579;
background: #000;
}
}
}

View File

@@ -21,17 +21,18 @@
</div>
</template>
<script lang="ts">
import { defineComponent,computed,ref,provide,nextTick,watch,toRefs, reactive} from 'vue'
import { defineComponent,computed,inject,provide,nextTick,watch,toRefs, reactive} from 'vue'
import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
import { Https } from "@/tool/https";
import { useStore } from "vuex";
import { useI18n } from 'vue-i18n'
import { useRoute } from 'vue-router';
import { useRoute,useRouter } from 'vue-router';
import toProduct from '@/component/home/tools/toProduct/index.vue';
import poseTransfer from '@/component/home/tools/poseTransfer/index.vue';
import deReconstruction from '@/component/home/tools/deReconstruction/index.vue';
import patternMaking3D from '@/component/home/tools/patternMaking3D/index.vue';
import canvasUpload from "@/component/Canvas/index.vue";
import {openTypeList} from "@/tool/listData.js";
export default defineComponent({
components:{
@@ -39,10 +40,12 @@ export default defineComponent({
},
props:{
},
emits:[],
emits:['toolsCreateProject'],
setup(props,{emit}) {
const store = useStore();
const route = useRoute();
const router = useRouter()
const {t} = useI18n()
const data = reactive({
openType:'' as any,
isShowMark:false,
@@ -62,29 +65,80 @@ export default defineComponent({
const setIsShowMark = (boolean:boolean)=>{
data.isShowMark = boolean
}
let settingGetHistory:any = inject('settingGetHistory')
const open = (str:any)=>{
nextTick(()=>{
console.log(dataDom[str],str,123123)
if(dataDom[str]?.openSetData){
dataDom[str].openSetData()
}
})
}
provide('setIsShowMark',setIsShowMark)
watch(() => route.query,
(query, oldQuery) => {
(query:any, oldQuery:any) => {
if(oldQuery && query?.tools == oldQuery?.tools)return
let str = query.tools
nextTick(()=>{
console.log(str)
data.openType = str
open(str)
})
const key = Object.keys(query)?.[0]
if(route.name == 'tools' && key){
data.openType = query[key]
nextTick(()=>{
open(query[key])
})
}
},
{ immediate: true } // 立即触发一次以处理初始参数
);
);
const createProbject = async ()=>{
return await new Promise((resolve, reject) => {
if(!route.query.tools)return
let toolsData:any = openTypeList(t).tools.list.find((item:any)=>item.value == route.query.tools)
let value = {
name:toolsData.label,
process:route.query.tools,
}
Https.axiosPost(Https.httpUrls.projectSaveOrUpdate,value).then((rv)=>{
if(rv){
let value = {
id:rv.id
}
store.commit('setProbject',value)
// let model:any = {}
// let position = []
// if(data.selectObject.sex == "Female"){
// // if(rv.workspaceVO.sex == "Female"){
// model = {
// id:rv.workspaceVO.mannequinFemaleId,
// type:rv.workspaceVO.mannequinFemaleType,
// url:rv.workspaceVO.femalePresignedUrl,
// }
// position = store.state.UserHabit.FemalePosition
// }else{
// model = {
// id:rv.workspaceVO.mannequinMaleId,
// type:rv.workspaceVO.mannequinMaleType,
// url:rv.workspaceVO.malePresignedUrl,
// }
// position = store.state.UserHabit.MalePosition
// }
// // model.url = rv.workspaceVO.malePresignedUrl
// data.selectObject.model = model
// data.selectObject.positionList = position
let routeName:any = route.name
router.push(`${routeName}?${routeName}=${route.query[routeName]}&id=${rv.id}`)
settingGetHistory()
resolve(rv.id);
}
})
})
}
provide('setIsShowMark',setIsShowMark)
provide('createProbject',createProbject)
return{
...toRefs(dataDom),
...toRefs(data),
createProbject,
}
},
provide() {

View File

@@ -615,6 +615,7 @@ export default {
scaleImage:{
overlayOrNot:'是否覆盖当前图片',
submitCanvas:'画布内容没有储存,是否继续',
cover:'是否覆盖编辑的内容',
},
account:{
personCentered:'个人中心',

View File

@@ -615,6 +615,7 @@ export default {
scaleImage:{
overlayOrNot:'Whether to overwrite the current picture',
submitCanvas:'Canvas content is not saved, whether to continue',
cover:'Do you want to overwrite the edited content?',
},
account:{
personCentered:'Account',

View File

@@ -115,7 +115,8 @@ const DesignDetailCopy : Module<DesignDetailCopy,RootState> = {
}else if(str == 'element'){
state.selectDetail.newDetail[str] = data
}else if(str == 'models'){
state.selectDetail.newDetail[str] = data
// if(!state.designDetail.newModel)state.designDetail.newModel={}
state.designDetail.newModel = JSON.parse(JSON.stringify(data))
}else{
if(!state.selectDetail.newDetail[str])state.selectDetail.newDetail[str] = []
const foundObjects = state.selectDetail.newDetail[str].filter((item:any) => item.id === data.id);
@@ -190,13 +191,19 @@ const DesignDetailCopy : Module<DesignDetailCopy,RootState> = {
async setPraeview(state,value){//preview
let data = value.rv
let currentType = value.currentType
if(state.designDetail.oldModel?.url)state.frontBack.body.path = state.designDetail.oldModel.url
for (let j = 0; j < data.clothes.length; j++) {
const item = data.clothes[j];
if(!item.id)continue
if(item.id == state.selectDetail.id || state.selectDetail.newDetail?.sketch?.id == item.id){
}
let id_ = state.selectDetail.id || state.selectDetail.newDetail?.sketch?.id
let id_:any
if(state.currentDetailType != 'models'){
id_ = state.selectDetail.id || state.selectDetail.newDetail?.sketch?.id
}else{
id_ = item.id
}
let el:any = document.querySelector('.molepositon .perview_img')
await new Promise((resolve, reject) => {
const img = new Image();
@@ -239,30 +246,32 @@ const DesignDetailCopy : Module<DesignDetailCopy,RootState> = {
resolve('')
};
})
state.selectDetail.change = item.change
if(state.selectDetail?.newDetail?.color){
state.selectDetail.color = state.selectDetail?.newDetail?.color
state.selectDetail.newDetail.color = null
if(state.currentDetailType != 'models'){
state.selectDetail.change = item.change
if(state.selectDetail?.newDetail?.color){
state.selectDetail.color = state.selectDetail?.newDetail?.color
state.selectDetail.newDetail.color = null
}
if(item.partialDesign){
state.selectDetail.partialDesign = item.partialDesign
}
state.selectDetail.designType = item.designType
state.selectDetail.gradient = item.gradient
state.selectDetail.layersObject = item.layersObject
state.selectDetail.path = item.path
state.selectDetail.minIOPath = item.minIOPath
state.selectDetail.scale = [1,1]
state.selectDetail.offset = [0,0]
state.selectDetail.printObject = item.printObject
state.selectDetail.trims = item.trims
state.selectDetail.type = item.type
state.selectDetail.undividedLayer = item.undividedLayer
if(state.selectDetail.newDetail?.sketch?.id && !state.selectDetail.id){
state.designDetail.clothes.push(state.selectDetail)
}
state.selectDetail.id = item.id
if(state.selectDetail.newDetail?.[currentType])delete state.selectDetail.newDetail[currentType]
}
if(item.partialDesign){
state.selectDetail.partialDesign = item.partialDesign
}
state.selectDetail.designType = item.designType
state.selectDetail.gradient = item.gradient
state.selectDetail.layersObject = item.layersObject
state.selectDetail.path = item.path
state.selectDetail.minIOPath = item.minIOPath
state.selectDetail.scale = [1,1]
state.selectDetail.offset = [0,0]
state.selectDetail.printObject = item.printObject
state.selectDetail.trims = item.trims
state.selectDetail.type = item.type
state.selectDetail.undividedLayer = item.undividedLayer
if(state.selectDetail.newDetail?.sketch?.id && !state.selectDetail.id){
state.designDetail.clothes.push(state.selectDetail)
}
state.selectDetail.id = item.id
if(state.selectDetail.newDetail?.[currentType])delete state.selectDetail.newDetail[currentType]
}
},

View File

@@ -186,6 +186,7 @@ export const Https = {
countDesignProcess:'/api/design/countDesignProcess', //统计design进度
getDesignResult:'/api/design/getDesignResult', //查询design结果
designSort:`/api/design/sort`, //design排序
collectionLikeUpdate:`/api/history/collectionLikeUpdate`, //赋值排序
designProcess:`/api/design/designProcess`, //统计design进度
designGetModel:`/api/design/getModel`, //导出获取模特链接

View File

@@ -293,7 +293,7 @@ export default defineComponent({
background: #F3F4F8;
.menu_title{
color: #343579;
color: #000;
}
.menu_icon{

View File

@@ -1,10 +1,10 @@
<template>
<div class="homeMain_max">
<div class="leftBox">
<div class="leftBox" :class="{leftHide:leftShow}">
<div class="left">
<div class="title">
<span>AiDA</span>
<svg xmlns="http://www.w3.org/2000/svg" width="2rem" height="2rem" fill="currentColor" viewBox="0 0 24 24" data-v-1c7326d6=""><path fill-rule="evenodd" d="M6 5a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h2V5H6Zm4 0v14h8a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1h-8ZM3 6a3 3 0 0 1 3-3h12a3 3 0 0 1 3 3v12a3 3 0 0 1-3 3H6a3 3 0 0 1-3-3V6Z" clip-rule="evenodd" data-v-1c7326d6=""></path></svg>
<svg @click="()=>leftShow=!leftShow" class="leftShowOrHide" xmlns="http://www.w3.org/2000/svg" width="2rem" height="2rem" fill="currentColor" viewBox="0 0 24 24" data-v-1c7326d6=""><path fill-rule="evenodd" d="M6 5a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h2V5H6Zm4 0v14h8a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1h-8ZM3 6a3 3 0 0 1 3-3h12a3 3 0 0 1 3 3v12a3 3 0 0 1-3 3H6a3 3 0 0 1-3-3V6Z" clip-rule="evenodd" data-v-1c7326d6=""></path></svg>
</div>
<div class="newObj marginT2" @click="newProject">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 25 24"><path stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12.5 5v14m-7-7h14"></path></svg>
@@ -12,6 +12,7 @@
</div>
<div class="navList marginT2">
<div class="tools list" v-for="item in openTypeList" :class="{active:openType == item.value}">
<div class="titleBox" @click="setOpenType(item.value,item.list)">
<div class="left">
<i :class="['fi',item.icon]"></i>
@@ -46,7 +47,7 @@
<i class="fi fi-rr-edit"></i>
<span>Rename</span>
</div>
<div class="item" @click.stop="setting(childItem)">
<div class="item" v-if="childItem.process == 'SINGLE_DESIGN' || childItem.process == 'SERIES_DESIGN'" @click.stop="setting(childItem)">
<i class="fi fi-rr-settings-sliders"></i>
<span>Setting</span>
</div>
@@ -117,6 +118,13 @@
<div class="rightBox">
<div class="right">
<div class="user">
<div class="left" v-show="leftShow">
<svg @click="()=>leftShow=!leftShow" class="leftShowOrHide" xmlns="http://www.w3.org/2000/svg" width="2rem" height="2rem" fill="currentColor" viewBox="0 0 24 24" data-v-1c7326d6=""><path fill-rule="evenodd" d="M6 5a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h2V5H6Zm4 0v14h8a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1h-8ZM3 6a3 3 0 0 1 3-3h12a3 3 0 0 1 3 3v12a3 3 0 0 1-3 3H6a3 3 0 0 1-3-3V6Z" clip-rule="evenodd" data-v-1c7326d6=""></path></svg>
<div class="newObj marginT2" @click="newProject">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 25 24"><path stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12.5 5v14m-7-7h14"></path></svg>
<p>New Project</p>
</div>
</div>
<div class="trialApproval">
<div class="message_iconItem">
<a-badge :count="messageNum">
@@ -205,7 +213,7 @@
You can use these features only after becoming a regular user~
</div>
<div class="router" v-else-if="!getLangIsShowMark">
<home ref="home" @setTask="setTask" :settingGetHistory="settingGetHistory"></home>
<home ref="home" @setTask="setTask"></home>
</div>
</div>
</div>
@@ -225,7 +233,7 @@
</div>
</template>
<script >
import { defineComponent, createVNode, ref,toRefs, reactive, computed, onMounted, nextTick, watch } from "vue";
import { defineComponent, createVNode, ref,toRefs, reactive, computed, onMounted, nextTick, watch, provide } from "vue";
import { isEmail } from "@/tool/util";
import { setCookie, getCookie, WriteCookie,clonAllCookie } from "@/tool/cookie";
import payOrder from "@/component/Pay/payOrder.vue";
@@ -273,6 +281,7 @@ export default defineComponent({
const route = useRoute()
const router = useRouter()
const homeMainData = reactive({
leftShow:false,
openType:'',
openTypeChild:'',
isLanguage:false,
@@ -447,7 +456,6 @@ export default defineComponent({
homeMainData.historyData.isShowLoading = false
homeMainData.historyData.isNoData = false
let imgParent = document.querySelector('.homeMain_max .detail .material_content_list_loding .historyPage_loading')
console.log(imgParent)
new IntersectionObserver(
(entries, observer) => {
// 如果不是相交,则直接返回
@@ -463,7 +471,12 @@ export default defineComponent({
router.push(itemRouter)
}
const setHistory = (item,childItem)=>{
router.push(`/home?history=${childItem.id}`)
// router.push(`/home/tools?tools=toProduct&id=${childItem.id}`)
if(childItem.process == 'SERIES_DESIGN' || childItem.process == "SINGLE_DESIGN"){
router.push(`/home?history=${childItem.id}`)
}else{
router.push(`/home/tools?tools=${childItem.process}&id=${childItem.id}`)
}
// router.push(`/home?history=${childItem.id}`)
}
const settingGetHistory = ()=>{
@@ -472,6 +485,7 @@ export default defineComponent({
homeMainData.historyData.isShowLoading = false
homeMainData.historyData.isNoData = false
}
provide('settingGetHistory',settingGetHistory)
const getHistory = ()=>{
if(homeMainData.historyData.isShowLoading && !homeMainData.historyData.isNoData)return
homeMainData.historyData.isShowLoading = true
@@ -873,6 +887,12 @@ export default defineComponent({
> .leftBox{
height: 100%;
background: #f5f5f5;
overflow: hidden;
width: 26rem;
transition: width .3s;
&.leftHide{
width: 0;
}
> .left{
width: 26rem;
height: 100%;
@@ -1147,25 +1167,7 @@ export default defineComponent({
cursor: pointer;
}
}
> .newObj{
border-radius: 1.2rem;
padding: 1.6rem 1.2rem;
border: 1px solid #0003;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
> svg{
margin-right: .4rem;
width: 2.4rem;
height: 2.4rem;
}
> p{
font-size: 1.6rem;
font-weight: 600;
margin: 0;
}
}
> .navList{
height: 100%;
overflow: hidden;
@@ -1257,6 +1259,25 @@ export default defineComponent({
}
}
.newObj{
border-radius: 1.2rem;
padding: 1.6rem 1.2rem;
border: 1px solid #0003;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
> svg{
margin-right: .4rem;
width: 2.4rem;
height: 2.4rem;
}
> p{
font-size: 1.6rem;
font-weight: 600;
margin: 0;
}
}
> .rightBox{
flex: 1;
overflow: hidden;
@@ -1270,7 +1291,21 @@ export default defineComponent({
margin-bottom: 1rem;
display: flex;
justify-content: flex-end;
padding: 2rem 2rem 0 0;
padding: 2rem 2rem 1.2rem;
align-items: center;
> .left{
display: flex;
align-items: center;
margin-right: auto;
> .newObj{
background: #f5f5f5;
padding: 1.2rem;
}
> svg{
margin-right: 2rem;
cursor: pointer;
}
}
> .trialApproval{
display: flex;
margin-right: 1rem;
@@ -1522,9 +1557,9 @@ export default defineComponent({
width: 6rem;
height: 3rem;
line-height: 2.8rem;
border: 0.1rem solid #343579;
border: 0.1rem solid #000;
font-size: 1.4rem;
color: #343579;
color: #000;
position: absolute;
top: 1.8rem;
right: 1.8rem;
@@ -1575,7 +1610,7 @@ export default defineComponent({
.bind_email_submit_button {
height: 4.6rem;
line-height: 4.6rem;
background: #343579;
background: #000;
font-size: 1.6rem;
font-weight: 500;
color: #ffffff;
@@ -1602,7 +1637,7 @@ export default defineComponent({
.tip_content {
font-size: 1.3rem;
font-weight: bold;
color: #343579;
color: #000;
cursor: pointer;
}

View File

@@ -51,7 +51,7 @@
<template #suffixIcon
><span
class="icon iconfont icon-xiala"
style="color: #343579"
style="color: #000"
></span
></template>
</a-select>
@@ -69,7 +69,7 @@
<template #suffixIcon
><span
class="icon iconfont icon-xiala"
style="color: #343579"
style="color: #000"
></span
></template>
</a-select>
@@ -87,7 +87,7 @@
<template #suffixIcon
><span
class="icon iconfont icon-xiala"
style="color: #343579"
style="color: #000"
></span
></template>
</a-select>
@@ -105,7 +105,7 @@
<template #suffixIcon
><span
class="icon iconfont icon-xiala"
style="color: #343579"
style="color: #000"
></span
></template>
</a-select>
@@ -123,7 +123,7 @@
<template #suffixIcon
><span
class="icon iconfont icon-xiala"
style="color: #343579"
style="color: #000"
></span
></template>
</a-select>
@@ -2119,7 +2119,7 @@ export default defineComponent({
.check_block_body{
width: 100%;
height: 100%;
background: #343579;
background: #000;
}
}
}
@@ -2238,7 +2238,7 @@ export default defineComponent({
cursor: pointer;
background: #fff;
&.select_item_img{
// border-color: #343579;
// border-color: #000;
opacity: 0.5;
border-radius: 1rem;
transform: scale(0.9);
@@ -2410,7 +2410,7 @@ export default defineComponent({
}
.rename_submit_button{
background: #343579;
background: #000;
color: #FFFFFF;
}
}

View File

@@ -277,7 +277,7 @@ export default defineComponent({
background: #F3F4F8;
.menu_title{
color: #343579;
color: #000;
}
.menu_icon{