Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite

This commit is contained in:
2026-01-20 15:42:23 +08:00
12 changed files with 217 additions and 205 deletions

View File

@@ -32,8 +32,8 @@
is-input is-input
:tipFormatter="(v) => `${v}px`" :tipFormatter="(v) => `${v}px`"
:value="gapX" :value="gapX"
@input="(e) => emit('inputFill_Gap', e, gapY)" @input="(e) => emit('inputFillGap', e, gapY)"
@change="(e) => emit('changeFill_Gap', e, gapY)" @change="(e) => emit('changeFillGap', e, gapY)"
/> />
</div> </div>
<div class="repeat-setting-item"> <div class="repeat-setting-item">
@@ -45,8 +45,8 @@
is-input is-input
:tipFormatter="(v) => `${v}px`" :tipFormatter="(v) => `${v}px`"
:value="gapY" :value="gapY"
@input="(e) => emit('inputFill_Gap', gapX, e)" @input="(e) => emit('inputFillGap', gapX, e)"
@change="(e) => emit('changeFill_Gap', gapX, e)" @change="(e) => emit('changeFillGap', gapX, e)"
/> />
</div> </div>
<div class="repeat-setting-item"> <div class="repeat-setting-item">
@@ -109,8 +109,8 @@
"changeFillOffset", "changeFillOffset",
"inputFillScale", "inputFillScale",
"changeFillScale", "changeFillScale",
"inputFill_Gap", "inputFillGap",
"changeFill_Gap", "changeFillGap",
]); ]);
const inputFillScale = (e) => { const inputFillScale = (e) => {
const scale = e / 100; const scale = e / 100;

View File

@@ -155,11 +155,11 @@
@changeFillScale=" @changeFillScale="
(e) => changeFillScale(e, v) (e) => changeFillScale(e, v)
" "
@inputFill_Gap=" @inputFillGap="
(x, y) => inputFill_Gap(x, y, v) (x, y) => inputFillGap(x, y, v)
" "
@changeFill_Gap=" @changeFillGap="
(x, y) => changeFill_Gap(x, y, v) (x, y) => changeFillGap(x, y, v)
" "
/> />
</template> </template>
@@ -484,7 +484,7 @@
props.commandManager.execute(cmd); props.commandManager.execute(cmd);
}; };
// 改变填充间隙 // 改变填充间隙
const inputFill_Gap = (gapX, gapY, obj) => { const inputFillGap = (gapX, gapY, obj) => {
const cmd = new FillRepeatGapChangeCommand({ const cmd = new FillRepeatGapChangeCommand({
canvas: props.canvas, canvas: props.canvas,
layers: layers, layers: layers,
@@ -497,7 +497,7 @@
}); });
cmd.execute(); cmd.execute();
}; };
const changeFill_Gap = (gapX, gapY, obj) => { const changeFillGap = (gapX, gapY, obj) => {
if (obj.oldFill_) { if (obj.oldFill_) {
obj.fill_ = { ...obj.oldFill_ }; obj.fill_ = { ...obj.oldFill_ };
delete obj.oldFill_; delete obj.oldFill_;

View File

@@ -139,7 +139,7 @@ const props = defineProps({
default: false, // 是否隐藏画布-隐藏关闭部分功能 default: false, // 是否隐藏画布-隐藏关闭部分功能
}, },
}); });
console.log("config",props.config)
const loading = ref(false); const loading = ref(false);
// 引用和状态 // 引用和状态
const canvasRef = ref(null); const canvasRef = ref(null);

View File

@@ -449,7 +449,28 @@ export class CanvasManager {
// // 重新渲染画布使变更生效 // // 重新渲染画布使变更生效
// this.canvas.renderAll(); // this.canvas.renderAll();
} }
// 重置画布大小参照固定图层
async resetCanvasSizeByFixedLayer(){
// 重置画布大小为固定图层的大小
const fixedLayerObj = this.getFixedLayerObject();
const backgroundObject = this.getBackgroundLayerObject();
if (!fixedLayerObj || !backgroundObject) return
const fwidth = fixedLayerObj.width * fixedLayerObj.scaleX
const fheight = fixedLayerObj.height * fixedLayerObj.scaleY
const bwidth = backgroundObject.width * backgroundObject.scaleX
const bheight = backgroundObject.height * backgroundObject.scaleY
if(Math.abs(fwidth/bwidth - fheight/bheight) < 0.1) return;
this.canvasWidth.value = fwidth
this.canvasHeight.value = fheight
backgroundObject.set({
width: this.canvasWidth.value,
height: this.canvasHeight.value,
})
this.canvas?.clipPath?.set?.({
width: this.canvasWidth.value,
height: this.canvasHeight.value,
})
}
/** /**
* 重置视图变换,使元素回到原始位置 * 重置视图变换,使元素回到原始位置
* @private * @private
@@ -1369,6 +1390,7 @@ export class CanvasManager {
// 重置画布数据 // 重置画布数据
await this.setCanvasSize(this.canvas.width, this.canvas.height); await this.setCanvasSize(this.canvas.width, this.canvas.height);
await this.centerBackgroundLayer(this.canvas.width, this.canvas.height); await this.centerBackgroundLayer(this.canvas.width, this.canvas.height);
await this.resetCanvasSizeByFixedLayer();
// 重新构建对象关系 // 重新构建对象关系
// restoreObjectLayerAssociations(this.layers.value, this.canvas.getObjects()); // restoreObjectLayerAssociations(this.layers.value, this.canvas.getObjects());
// 验证图层关联关系 - 稳定后可以注释 // 验证图层关联关系 - 稳定后可以注释

View File

@@ -101,7 +101,7 @@
</div> </div>
</div> </div>
<div class="contentRight canvas" v-if="selectDetail && selectDetail.id && currentDetailType" :class="{'active': isEditPattern.value}"> <div class="contentRight canvas" v-if="selectDetail && selectDetail.id && currentDetailType" :class="{'active': isEditPattern.value}">
<canvasBox ref="canvasBox" :key="canvasKey" :sketchSize="sketchSize" @setSloganData="setSloganData" :isEditPattern="isEditPattern.value" :updateOtherLayers="updateOtherLayers"></canvasBox> <canvasBox ref="canvasBox" v-model:loadingShow="loadingShow" :key="canvasKey" :sketchSize="sketchSize" @setSloganData="setSloganData" :isEditPattern="isEditPattern.value" :updateOtherLayers="updateOtherLayers"></canvasBox>
</div> </div>
<!-- 画布 --> <!-- 画布 -->
<!-- <div class="content" v-else-if="selectDetail && selectDetail.id"> <!-- <div class="content" v-else-if="selectDetail && selectDetail.id">
@@ -161,7 +161,7 @@ export default defineComponent({
isEditPattern:{ isEditPattern:{
value:'' as any, value:'' as any,
},// 是否编辑图案 },// 是否编辑图案
canvasKey:0, canvasKey:computed(()=>store.state.DesignDetail.canvasKey),
singleOveral:{ singleOveral:{
value:'overall' value:'overall'
}, },
@@ -191,7 +191,7 @@ export default defineComponent({
detailData.imgDomIndex = detailData.frontBack.front.findIndex((item:any)=>item.id == newValue.id) detailData.imgDomIndex = detailData.frontBack.front.findIndex((item:any)=>item.id == newValue.id)
if(newValue?.path)await getSketchSize() if(newValue?.path)await getSketchSize()
if(newValue?.id && oldValue?.id && (newValue.id != oldValue.id)){ if(newValue?.id && oldValue?.id && (newValue.id != oldValue.id)){
detailData.canvasKey += 1 store.commit('DesignDetail/changeCanvasKey')
} }
// privewDetail(oldValue) // privewDetail(oldValue)
},{immediate: true}) },{immediate: true})
@@ -261,7 +261,7 @@ export default defineComponent({
} }
detailData.loadingShow = false // detailData.loadingShow = false
resolve(rv) resolve(rv)
} }
).catch(rv=>{ ).catch(rv=>{
@@ -336,9 +336,11 @@ export default defineComponent({
detailData.selectDetail.sketchString = rv detailData.selectDetail.sketchString = rv
}) })
if(detailDom.detailRight?.privewDetail)await (detailDom.detailRight as any).privewDetail() if(detailDom.detailRight?.privewDetail)await (detailDom.detailRight as any).privewDetail()
let otherData = await updateOtherLayers('single') if(detailDom.canvasBox && (detailData.currentDetailType != 'sketch' || detailData.isEditPattern.value == 'canvasEditor')){
await detailDom.canvasBox.updateOtherLayers(otherData) let otherData = await updateOtherLayers('single')
await detailDom.canvasBox.privewDetail() await detailDom.canvasBox.updateOtherLayers(otherData)
await detailDom.canvasBox.privewDetail()
}
for(let i = 0;i<list.length;i++){ for(let i = 0;i<list.length;i++){
detailData.selectDetail detailData.selectDetail
let {scale,offset,priority,transpose,rotate,maskUrl,maskMinioUrl} = await (detailDom.model as any).getSubmitData(list[i]) let {scale,offset,priority,transpose,rotate,maskUrl,maskMinioUrl} = await (detailDom.model as any).getSubmitData(list[i])
@@ -358,7 +360,6 @@ export default defineComponent({
(list[i].color?.rgba?.r? (list[i].color?.rgba?.r?
`${list[i].color.rgba.r} ${list[i].color.rgba.g} ${list[i].color.rgba.b}`: `${list[i].color.rgba.r} ${list[i].color.rgba.g} ${list[i].color.rgba.b}`:
'') '')
console.log(color,'==============================')
if(detailData.currentDetailType == 'sketch' && newData){ if(detailData.currentDetailType == 'sketch' && newData){
color = detailData.designDetail.clothes?.[0]?.color?.rgba?.r?`${detailData.designDetail.clothes?.[0].color.rgba.r} ${detailData.designDetail.clothes[0].color.rgba.g} ${detailData.designDetail.clothes[0].color.rgba.b}`:'' color = detailData.designDetail.clothes?.[0]?.color?.rgba?.r?`${detailData.designDetail.clothes?.[0].color.rgba.r} ${detailData.designDetail.clothes[0].color.rgba.g} ${detailData.designDetail.clothes[0].color.rgba.b}`:''
detailData.selectDetail.maskUrl = '' detailData.selectDetail.maskUrl = ''
@@ -417,45 +418,65 @@ export default defineComponent({
} }
const getSubmitData = async (str:string)=>{ const getSubmitData = async (str:string)=>{
// return // return
let workspace = store.state.Workspace.probjects await new Promise<void>(async (resolve, reject) => {
if(!detailData?.selectDetail?.path && !detailData?.selectDetail?.newDetail?.sketch?.minIOPath)return let workspace = store.state.Workspace.probjects
let clothes:any if(!detailData?.selectDetail?.path && !detailData?.selectDetail?.newDetail?.sketch?.minIOPath)return
if(detailData.currentDetailType == 'models'){ let clothes:any
clothes = await setClothes(detailData.designDetail.clothes,str) if(detailData.currentDetailType == 'models'){
}else{ clothes = await setClothes(detailData.designDetail.clothes,str)
clothes = await setClothes([detailData.selectDetail],str) }else{
} clothes = await setClothes([detailData.selectDetail],str)
let data = {
designItemId:detailData.designDetail.designItemId,
designSingleItemDTOList:clothes,
isPreview:str == 'sub'?false:true,
// ifSubmit:designItemDetail.isPreview,
gender:workspace?.sex,
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:'',
designType:detailData.selectDetail.id?'merge':'default',
timeZone:Intl.DateTimeFormat().resolvedOptions().timeZone,
processId:userDetail.value.userId,
probjectId:store.state.Workspace.probjects.id,
}
detailData.loadingShow = true
Https.axiosPost(Https.httpUrls.designSingle, data).then((rv)=>{
let value = {
currentType : JSON.parse(JSON.stringify(detailData.currentDetailType)),
rv:rv,
fun:setRevocation
} }
if(detailData?.designDetail?.newModel)detailData.designDetail.oldModel = JSON.parse(JSON.stringify(detailData.designDetail.newModel)) let isDefault = detailData.selectDetail.sketchString || (!detailData.selectDetail.id || (detailData.selectDetail?.newDetail?.sketch && detailData.currentDetailType == 'sketch'))
// delete detailData.designDetail.newModel let data = {
detailData.selectDetail.sketchString = null designItemId:detailData.designDetail.designItemId,
store.commit('DesignDetail/setPraeview',value) designSingleItemDTOList:clothes,
detailData.loadingShow = false isPreview:str == 'sub'?false:true,
canvasReload() // ifSubmit:designItemDetail.isPreview,
// setRevocation() gender:workspace?.sex,
}).catch(res=>{ sketchString:'',
detailData.loadingShow = false 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:'',
designType:isDefault?'default':'merge',
timeZone:Intl.DateTimeFormat().resolvedOptions().timeZone,
processId:userDetail.value.userId,
probjectId:store.state.Workspace.probjects.id,
}
await Https.axiosPost(Https.httpUrls.designSingle, data).then(async (rv)=>{
let value = {
currentType : JSON.parse(JSON.stringify(detailData.currentDetailType)),
rv:rv,
fun:setRevocation
}
if(detailData?.designDetail?.newModel)detailData.designDetail.oldModel = JSON.parse(JSON.stringify(detailData.designDetail.newModel))
// delete detailData.designDetail.newModel
let el:any = document.querySelector('.molepositon .perview_img')
let scale = 0
await new Promise<void>(async (resolve, reject) => {
const img = new Image();
img.src = detailData.frontBack.body.path;
img.onload = () => {
scale = el.parentNode.offsetWidth / img.width;
resolve(true)
};
})
value.scale = scale
store.commit('DesignDetail/setPraeview',value)
store.commit('DesignDetail/changeCanvasKey')
// console.log(detailData.selectDetail)
// if(detailData.selectDetail.sketchString || (detailData.selectDetail?.newDetail?.sketch && detailData.currentDetailType == 'sketch')){
// detailData.canvasKey += 1
// }
detailData.selectDetail.sketchString = null
resolve(true)
canvasReload()
// setRevocation()
}).catch(res=>{
resolve(true)
});
})
} }
const submit = async ()=>{ const submit = async ()=>{
let workspace = store.state.Workspace.probjects let workspace = store.state.Workspace.probjects
@@ -505,9 +526,16 @@ export default defineComponent({
}); });
} }
const previwe = async ()=>{ const previwe = async ()=>{
detailData.loadingShow = true
if((detailData.currentDetailType == 'sketch' && !detailData.isEditPattern.value) || detailData.isEditPattern.value == 'editSketch'){ if((detailData.currentDetailType == 'sketch' && !detailData.isEditPattern.value) || detailData.isEditPattern.value == 'editSketch'){
let data = getSubmitData('preview') await getSubmitData('preview')
store.dispatch('DesignDetail/setSubmit',data) await getSketchSize()
detailDom.canvasBox.changeSketchUpdateFrontBack = async ()=>{
await detailDom.canvasBox.privewDetail()
detailDom?.model?.updateRect()
await upDateFrontBackSketch()
detailData.loadingShow = false
}
}else{ }else{
//走画布合成图片并且直接分割 //走画布合成图片并且直接分割
if(detailData.isEditPattern.value !== 'canvasEditor'){ if(detailData.isEditPattern.value !== 'canvasEditor'){
@@ -516,6 +544,13 @@ export default defineComponent({
await detailDom.canvasBox.updateOtherLayers(otherData) await detailDom.canvasBox.updateOtherLayers(otherData)
} }
await detailDom.canvasBox.privewDetail() await detailDom.canvasBox.privewDetail()
await upDateFrontBackSketch()
saveCanvasJSONToSession()
detailData.loadingShow = false
}
}
const upDateFrontBackSketch = async ()=>{//更新模特身上的分割图
await new Promise<void>(async(resolve, reject) => {
let img = new Image() let img = new Image()
img.onload = ()=>{ img.onload = ()=>{
let partialDesign = detailData.selectDetail.partialDesign.partialDesignBase64 || detailData.selectDetail.partialDesign.partialDesignPath let partialDesign = detailData.selectDetail.partialDesign.partialDesignBase64 || detailData.selectDetail.partialDesign.partialDesignPath
@@ -534,11 +569,11 @@ export default defineComponent({
front.imageUrl = rv.targetFrontUrl front.imageUrl = rv.targetFrontUrl
back.imageUrl = rv.targetBackUrl back.imageUrl = rv.targetBackUrl
store.commit('DesignDetail/canvasPreviewUpdata',{type:detailData.isEditPattern.value?'all':detailData.currentDetailType,callBack:setRevocation}) store.commit('DesignDetail/canvasPreviewUpdata',{type:detailData.isEditPattern.value?'all':detailData.currentDetailType,callBack:setRevocation})
resolve()
}) })
} }
img.src = detailData.selectDetail.path img.src = detailData.selectDetail.path
saveCanvasJSONToSession() })
}
} }
const saveCanvasJSONToSession = ()=>{ const saveCanvasJSONToSession = ()=>{
let canvasJSON = detailDom.canvasBox.getCanvasJSON() let canvasJSON = detailDom.canvasBox.getCanvasJSON()
@@ -631,7 +666,6 @@ export default defineComponent({
otherData.trims = detailData.selectDetail.newDetail?.element?.length>0?{prints:detailData.selectDetail.newDetail?.element}:detailData.selectDetail.trims || null otherData.trims = detailData.selectDetail.newDetail?.element?.length>0?{prints:detailData.selectDetail.newDetail?.element}:detailData.selectDetail.trims || null
} }
} }
console.log(JSON.parse(JSON.stringify(otherData)),'=======',JSON.parse(JSON.stringify(detailData.selectDetail)))
return otherData return otherData
} }
const uploadElement = async ()=>{//取出画布数据更新到detail const uploadElement = async ()=>{//取出画布数据更新到detail
@@ -674,7 +708,6 @@ export default defineComponent({
if(canvasColor.gradient){ if(canvasColor.gradient){
value.data.gradient = canvasColor.gradient value.data.gradient = canvasColor.gradient
} }
console.log(value,'=======')
store.commit('DesignDetail/setNewDetail',value) store.commit('DesignDetail/setNewDetail',value)
if(allInfo.color.color.gradient)detailData.selectDetail.color.gradient = allInfo.color.color.gradient if(allInfo.color.color.gradient)detailData.selectDetail.color.gradient = allInfo.color.color.gradient
if(detailData.currentDetailType == 'color'){ if(detailData.currentDetailType == 'color'){
@@ -687,7 +720,6 @@ export default defineComponent({
if(detailData.isEditPattern.value){ if(detailData.isEditPattern.value){
await detailDom.canvasBox.saveCanvas() await detailDom.canvasBox.saveCanvas()
} }
detailData.canvasKey += 1
} }
const sketchSysToLibrary = ()=>{//系统sketch添加到library更新library const sketchSysToLibrary = ()=>{//系统sketch添加到library更新library
coverRevocation() coverRevocation()
@@ -711,7 +743,7 @@ export default defineComponent({
onBeforeUnmount(()=>{ onBeforeUnmount(()=>{
sessionStorage.removeItem('oppositeRevocation') sessionStorage.removeItem('oppositeRevocation')
sessionStorage.removeItem('revocation') sessionStorage.removeItem('revocation')
store.commit('DesignDetail/clearDesignDetail') store.commit('DesignDetail/clearDetailData')
}) })

View File

@@ -85,6 +85,7 @@ export default defineComponent({
default:()=>{} default:()=>{}
}, },
}, },
emits:['update:loadingShow'],
setup(props,{emit}) { setup(props,{emit}) {
const store = useStore(); const store = useStore();
const {t} = useI18n(); const {t} = useI18n();
@@ -123,6 +124,7 @@ export default defineComponent({
printObject: store.state.DesignDetail.selectDetail.printObject, printObject: store.state.DesignDetail.selectDetail.printObject,
trims: store.state.DesignDetail.selectDetail.trims, trims: store.state.DesignDetail.selectDetail.trims,
})), })),
changeSketchUpdateFrontBack:null as any,//切换sketch后是否需要合成图片进行风格
}) })
watch(()=>detailData.selectDetail,(newValue,oldValue)=>{ watch(()=>detailData.selectDetail,(newValue,oldValue)=>{
detailData.imgDomIndex = detailData.frontBack.front.findIndex((item:any)=>item.id == newValue.id) detailData.imgDomIndex = detailData.frontBack.front.findIndex((item:any)=>item.id == newValue.id)
@@ -177,22 +179,16 @@ export default defineComponent({
const privewDetail = async (oldSelectDetail = detailData.selectDetail)=>{ const privewDetail = async (oldSelectDetail = detailData.selectDetail)=>{
// if(!detailDom.editCanvas)return // if(!detailDom.editCanvas)return
return new Promise(async (res,reject)=>{ return new Promise(async (res,reject)=>{
console.log(detailDom.editCanvas)
await detailDom.editCanvas.exportImage({ await detailDom.editCanvas.exportImage({
isContainFixed:true, isContainFixed:true,
width:props.sketchSize.width, width:props.sketchSize.width,
height:props.sketchSize.height, height:props.sketchSize.height,
}).then((rv)=>{ }).then((rv)=>{
console.log(rv,'================') console.log(rv,'================',props.sketchSize)
if(oldSelectDetail?.partialDesign)oldSelectDetail.partialDesign.partialDesignBase64 = rv if(oldSelectDetail?.partialDesign)oldSelectDetail.partialDesign.partialDesignBase64 = rv
}) })
//包含平铺图层 single+overall模式的图
// await detailDom.editCanvas.exportImage({isContainFixed:true,isPrintTrimsNoRepeat:true,isPrintTrimsRepeat:true,isContainNormalLayer:false}).then((rv)=>{
// oldSelectDetail.undividedLayerWithSinglePrint = rv
// })
//不包含平铺图层overall模式的图
// await detailDom.editCanvas.exportImage({isContainFixed:true,isPrintTrimsNoRepeat:false,isPrintTrimsRepeat:true,isContainNormalLayer:false}).then((rv)=>{
// oldSelectDetail.undividedLayer = rv
// })
await setUndivideLayer() await setUndivideLayer()
res('') res('')
}) })
@@ -344,7 +340,13 @@ export default defineComponent({
const canvasLoadJsonSuccess = async ()=>{ const canvasLoadJsonSuccess = async ()=>{
let otherData = await props.updateOtherLayers() let otherData = await props.updateOtherLayers()
await updateOtherLayers(otherData) await updateOtherLayers(otherData)
if(detailData.changeSketchUpdateFrontBack){
await detailData.changeSketchUpdateFrontBack()
detailData.changeSketchUpdateFrontBack = null
}
setUndivideLayer() setUndivideLayer()
emit('update:loadingShow',false)
} }
const setUndivideLayer = async ()=>{ const setUndivideLayer = async ()=>{
await new Promise<void>(async (resolve, reject) => { await new Promise<void>(async (resolve, reject) => {
@@ -421,7 +423,6 @@ export default defineComponent({
}) })
} }
} }
setCanvas(detailData.selectDetail.path).then(()=>{ setCanvas(detailData.selectDetail.path).then(()=>{
detailData.canvasLoad = true detailData.canvasLoad = true
}) })

View File

@@ -53,6 +53,7 @@
</a-slider> --> </a-slider> -->
<a-popover <a-popover
trigger="click" trigger="click"
placement="topRight"
destroyTooltipOnHide destroyTooltipOnHide
:title="t('Canvas.repeatSetting')" :title="t('Canvas.repeatSetting')"
> >
@@ -63,8 +64,8 @@
@inputFillOffset="inputFillOffset" @inputFillOffset="inputFillOffset"
@inputFillScale="inputFillScale" @inputFillScale="inputFillScale"
:sketchPath="selectDetail.path" :sketchPath="selectDetail.path"
@inputFill_Gap=" @inputFillGap="
(x, y) => inputFill_Gap(x, y)" (x, y) => inputFillGap(x, y)"
/> />
</template> </template>
<div class="btn"> <div class="btn">
@@ -110,7 +111,7 @@
</ul> --> </ul> -->
</div> </div>
<div class="designOpenrtion_pingpu" v-else> <div class="designOpenrtion_pingpu" v-else>
<pingpu :width="sketchSize.width" :height="sketchSize.height" ref="pingpuRef" @change-canvas="updateCanvas"></pingpu> <pingpu :key="selectDetail?.id" :width="sketchSize.width" :height="sketchSize.height" ref="pingpuRef" @change-canvas="updateCanvas"></pingpu>
</div> </div>
</div> </div>
</div> </div>
@@ -207,7 +208,6 @@ export default defineComponent({
elList:[] as any, elList:[] as any,
selectIndex:0, selectIndex:0,
}) })
watch
const setOveralSingle = async ()=>{ const setOveralSingle = async ()=>{
await setItemPosition() await setItemPosition()
@@ -263,7 +263,7 @@ export default defineComponent({
setItemPosition() setItemPosition()
store.commit('DesignDetail/setCurrentPrintElement',null) store.commit('DesignDetail/setCurrentPrintElement',null)
} }
const previewDetailPrintData = ()=>{ const previewDetailPrintData = (id:any = editPrintElementData.selectDetail?.id)=>{
let data:any = [] let data:any = []
let index = 1 let index = 1
let setData = (item:any,index:number)=>{ let setData = (item:any,index:number)=>{
@@ -310,7 +310,8 @@ export default defineComponent({
}) })
let value = { let value = {
data, data,
str:props.type str:props.type,
id:id,
} }
store.commit('DesignDetail/setNewDetail',value) store.commit('DesignDetail/setNewDetail',value)
} }
@@ -453,9 +454,10 @@ export default defineComponent({
addPrintELement(newVal) addPrintELement(newVal)
} }
}) })
watch(()=>((editPrintElementData.selectDetail?.id)),(newVal)=>{ watch(()=>((editPrintElementData.selectDetail?.id)),(newVal,oldVal)=>{
if(!newVal)return if(!newVal)return
editPrintElementData.isSketchLoad = false, if(oldVal)previewDetailPrintData(oldVal)
editPrintElementData.isSketchLoad = false
editPrintElementData.printStyleList[props.type] = { editPrintElementData.printStyleList[props.type] = {
single:[], single:[],
overall:[], overall:[],
@@ -920,7 +922,6 @@ export default defineComponent({
} }
const inputFillScale = (scale:any)=>{ const inputFillScale = (scale:any)=>{
let arr = editPrintElementData.printStyleList[props.type].overall let arr = editPrintElementData.printStyleList[props.type].overall
console.log(arr,scale,editPrintElementData.imgDomIndex)
arr[editPrintElementData.imgDomIndex].scale = [scale,scale] arr[editPrintElementData.imgDomIndex].scale = [scale,scale]
editPrintElementDom.pingpuRef.updataList([ editPrintElementDom.pingpuRef.updataList([
{ {
@@ -931,7 +932,7 @@ export default defineComponent({
}, },
]); ]);
} }
const inputFill_Gap = (x:any,y:any)=>{ const inputFillGap = (x:any,y:any)=>{
let arr = editPrintElementData.printStyleList[props.type].overall let arr = editPrintElementData.printStyleList[props.type].overall
arr[editPrintElementData.imgDomIndex].object.gapX = x arr[editPrintElementData.imgDomIndex].object.gapX = x
arr[editPrintElementData.imgDomIndex].object.gapY = y arr[editPrintElementData.imgDomIndex].object.gapY = y
@@ -991,7 +992,7 @@ export default defineComponent({
inputFillAngle, inputFillAngle,
inputFillOffset, inputFillOffset,
inputFillScale, inputFillScale,
inputFill_Gap, inputFillGap,
overallSetIndex, overallSetIndex,
} }
}, },

View File

@@ -32,8 +32,8 @@
is-input is-input
:tipFormatter="(v) => `${v}px`" :tipFormatter="(v) => `${v}px`"
:value="gapX" :value="gapX"
@input="(e) => emit('inputFill_Gap', e, gapY)" @input="(e) => emit('inputFillGap', e, gapY)"
@change="(e) => emit('changeFill_Gap', e, gapY)" @change="(e) => emit('changeFillGap', e, gapY)"
/> />
</div> </div>
<p></p> <p></p>
@@ -46,8 +46,8 @@
is-input is-input
:tipFormatter="(v) => `${v}px`" :tipFormatter="(v) => `${v}px`"
:value="gapY" :value="gapY"
@input="(e) => emit('inputFill_Gap', gapX, e)" @input="(e) => emit('inputFillGap', gapX, e)"
@change="(e) => emit('changeFill_Gap', gapX, e)" @change="(e) => emit('changeFillGap', gapX, e)"
/> />
</div> </div>
<p></p> <p></p>
@@ -115,8 +115,8 @@
"changeFillOffset", "changeFillOffset",
"inputFillScale", "inputFillScale",
"changeFillScale", "changeFillScale",
"inputFill_Gap", "inputFillGap",
"changeFill_Gap", "changeFillGap",
]); ]);
const inputFillScale = (e) => { const inputFillScale = (e) => {
const scale = e / 100; const scale = e / 100;

View File

@@ -128,7 +128,10 @@ export default defineComponent({
getDetailListDom.position?.updataPosition?.() getDetailListDom.position?.updataPosition?.()
getDetailListDom.modelNav?.setItemPosition?.() getDetailListDom.modelNav?.setItemPosition?.()
getDetailListDom.position?.updateRect?.() getDetailListDom.position?.updateRect?.()
},500) },200)
}
const updateRect = ()=>{
getDetailListDom.position?.updateRect?.()
} }
const setBack = ()=>{ const setBack = ()=>{
showDesignImgDetail(getDetailListData.isEditPattern.value) showDesignImgDetail(getDetailListData.isEditPattern.value)
@@ -156,6 +159,7 @@ export default defineComponent({
oppositeRevocation, oppositeRevocation,
mousedownDesignImg, mousedownDesignImg,
setBack, setBack,
updateRect,
} }
}, },

View File

@@ -155,8 +155,8 @@ export default defineComponent({
}; };
const updateRect = ()=>{ const updateRect = ()=>{
setTimeout(() => { setTimeout(() => {
moveableInstance.value.updateRect() if(moveableInstance.value)moveableInstance.value.updateRect()
}, 500); }, 200);
} }
const initMoveableForSelected = () => { const initMoveableForSelected = () => {
// 销毁旧的实例 // 销毁旧的实例

View File

@@ -12,6 +12,7 @@ interface DesignDetail{
//值都有 sketchcolor,print,element //值都有 sketchcolor,print,element
currentDetailType:any, currentDetailType:any,
currentPrintElement:any, currentPrintElement:any,
canvasKey:any,
} }
const DesignDetail : Module<DesignDetail,RootState> = { const DesignDetail : Module<DesignDetail,RootState> = {
@@ -28,6 +29,7 @@ const DesignDetail : Module<DesignDetail,RootState> = {
printZIndex:-1, printZIndex:-1,
currentDetailType:'', currentDetailType:'',
currentPrintElement:null, currentPrintElement:null,
canvasKey:0,
}, },
mutations:{ mutations:{
clearDetailData(state){ clearDetailData(state){
@@ -42,6 +44,7 @@ const DesignDetail : Module<DesignDetail,RootState> = {
state.printZIndex = -1 state.printZIndex = -1
state.currentDetailType = '' state.currentDetailType = ''
state.currentPrintElement = null state.currentPrintElement = null
state.canvasKey = 0
}, },
setDesignDetail(state,data){ setDesignDetail(state,data){
if(data.others.length > 0 && data.others[0].type == "Body"){ if(data.others.length > 0 && data.others[0].type == "Body"){
@@ -63,7 +66,6 @@ const DesignDetail : Module<DesignDetail,RootState> = {
} }
} }
v?.printObject?.prints?.forEach((item:any) => { v?.printObject?.prints?.forEach((item:any) => {
console.log(item.object)
if(isJSONString(item.object)){ if(isJSONString(item.object)){
item.object = JSON.parse(item.object) item.object = JSON.parse(item.object)
} }
@@ -115,18 +117,6 @@ const DesignDetail : Module<DesignDetail,RootState> = {
} }
}); });
}, },
clearDesignDetail(state){
state.designDetail = null
state.designPreviewData = {}
state.frontBack = {
front:[],
back:[],
body:{},
}
state.selectDetail = null
state.currentDetailType = ''
state.printZIndex = -1
},
addDesign(state,data){ addDesign(state,data){
}, },
@@ -135,28 +125,32 @@ const DesignDetail : Module<DesignDetail,RootState> = {
// if(item.id == state.selectDetail.id){ // if(item.id == state.selectDetail.id){
// } // }
// }); // });
let select = state.selectDetail
if(value.id){
select = state.designDetail.clothes.find((item:any) => item.id == value.id)
}
let {data} = value let {data} = value
let str = value.str || state.currentDetailType let str = value.str || state.currentDetailType
if(!state.selectDetail)return if(!select)return
if(!state.selectDetail.newDetail){ if(!select.newDetail){
state.selectDetail.newDetail = {} select.newDetail = {}
} }
if(str == 'sketch'){ if(str == 'sketch'){
state.selectDetail.newDetail[str] = data select.newDetail[str] = data
}else if(str == 'color'){ }else if(str == 'color'){
state.selectDetail.newDetail[str] = data select.newDetail[str] = data
}else if(str == 'print'){ }else if(str == 'print'){
state.selectDetail.newDetail[str] = data select.newDetail[str] = data
}else if(str == 'element'){ }else if(str == 'element'){
state.selectDetail.newDetail[str] = data select.newDetail[str] = data
}else if(str == 'models'){ }else if(str == 'models'){
// if(!state.designDetail.newModel)state.designDetail.newModel={} // if(!state.designDetail.newModel)state.designDetail.newModel={}
state.designDetail.newModel = JSON.parse(JSON.stringify(data)) state.designDetail.newModel = JSON.parse(JSON.stringify(data))
}else{ }else{
if(!state.selectDetail.newDetail[str])state.selectDetail.newDetail[str] = [] if(!select.newDetail[str])select.newDetail[str] = []
const foundObjects = state.selectDetail.newDetail[str].filter((item:any) => item.id === data.id); const foundObjects = select.newDetail[str].filter((item:any) => item.id === data.id);
if(foundObjects.length == 0){ if(foundObjects.length == 0){
state.selectDetail.newDetail[str].push(data) select.newDetail[str].push(data)
} }
} }
}, },
@@ -226,21 +220,22 @@ const DesignDetail : Module<DesignDetail,RootState> = {
}); });
state.selectDetail = data state.selectDetail = data
}, },
changeCanvasKey(state){
state.canvasKey+=1
},
canvasPreviewUpdata(state,{type,callBack}){ canvasPreviewUpdata(state,{type,callBack}){
console.log(state.selectDetail,type)
// state.selectDetail.newDetail?.print?.forEach((item:any) => { // state.selectDetail.newDetail?.print?.forEach((item:any) => {
// state.selectDetail.printObject.prints = [] // state.selectDetail.printObject.prints = []
// state.selectDetail.printObject.push({ // state.selectDetail.printObject.push({
// }) // })
// }); // });
if(type == 'print' || type == 'all')state.selectDetail.printObject.prints = state.selectDetail.newDetail?.print if((type == 'print' || type == 'all') && state.selectDetail.newDetail?.print)state.selectDetail.printObject.prints = state.selectDetail.newDetail?.print
if(type == 'color' || type == 'all')state.selectDetail.color = { if((type == 'color' || type == 'all') && state.selectDetail.newDetail?.color?.rgba)state.selectDetail.color = {
...state.selectDetail.newDetail?.color, ...state.selectDetail.newDetail?.color,
...state.selectDetail.newDetail?.color?.rgba, ...state.selectDetail.newDetail?.color?.rgba,
...state.selectDetail.newDetail?.color?.hsv, ...state.selectDetail.newDetail?.color?.hsv,
} }
console.log(state.selectDetail,type,state.selectDetail.newDetail) if((type == 'element' || type == 'all') && state.selectDetail.newDetail?.element)state.selectDetail.trims.prints = state.selectDetail.newDetail?.element
if(type == 'element' || type == 'all')state.selectDetail.trims.prints = state.selectDetail.newDetail?.element
if(type == 'all'){ if(type == 'all'){
state.selectDetail.newDetail = {} state.selectDetail.newDetail = {}
}else{ }else{
@@ -248,7 +243,7 @@ const DesignDetail : Module<DesignDetail,RootState> = {
} }
callBack() callBack()
}, },
async setPraeview(state,value){//preview setPraeview(state,value){//preview
let data = value?.rv || value let data = value?.rv || value
let currentType = value?.currentType let currentType = value?.currentType
if(state.designDetail.oldModel?.url)state.frontBack.body.path = state.designDetail.oldModel.url if(state.designDetail.oldModel?.url)state.frontBack.body.path = state.designDetail.oldModel.url
@@ -267,50 +262,41 @@ const DesignDetail : Module<DesignDetail,RootState> = {
}else{ }else{
id_ = item.id id_ = item.id
} }
let el:any = document.querySelector('.molepositon .perview_img') if(state.frontBack?.body?.path){
await new Promise((resolve, reject) => { let scale:any = value.scale
if(!state.frontBack?.body?.path){ if(state.selectDetail?.newDetail?.sketch?.id && !state.selectDetail.id){
resolve('') state.frontBack.front.push({id:state.selectDetail.newDetail?.sketch?.id})
state.frontBack.back.push({id:state.selectDetail.newDetail?.sketch?.id})
} }
const img = new Image(); state.frontBack.front.forEach((v:any,index:any)=>{
img.src = state.frontBack.body.path; if(v.id == id_){
img.onload = () => { for (let i = item.layersObject.length-1; i >= 0; i--) {
let scale:any = el.parentNode.offsetWidth / img.width; item.layersObject[i].style = {
if(state.selectDetail?.newDetail?.sketch?.id && !state.selectDetail.id){ top:item.layersObject[i].position?.[0] * scale + 'px',
state.frontBack.front.push({id:state.selectDetail.newDetail?.sketch?.id}) left:item.layersObject[i].position?.[1] * scale + 'px',
state.frontBack.back.push({id:state.selectDetail.newDetail?.sketch?.id}) width:item.layersObject[i].imageSize?.[0] * scale + 'px',
} height:item.layersObject[i].imageSize?.[1] * scale + 'px',
state.frontBack.front.forEach((v:any,index:any)=>{ zIndex:v?.style?.zIndex?v.style.zIndex:v.priority?v.priority:state.frontBack.front.length,
if(v.id == id_){ transform:`rotate(${item.layersObject?.[i]?.rotate || 0}deg) scaleX(${item.layersObject[i].transpose?.[0] || 1}) scaleY(${item.layersObject[i].transpose?.[1] || 1})`,
for (let i = item.layersObject.length-1; i >= 0; i--) { }
item.layersObject[i].style = { item.layersObject[i].centers={
top:item.layersObject[i].position?.[0] * scale + 'px', left:0,
left:item.layersObject[i].position?.[1] * scale + 'px', top:0,
width:item.layersObject[i].imageSize?.[0] * scale + 'px', }
height:item.layersObject[i].imageSize?.[1] * scale + 'px', item.layersObject[i].designOpenrtionBtn = false
zIndex:v?.style?.zIndex?v.style.zIndex:v.priority?v.priority:state.frontBack.front.length, if(item.layersObject[i].imageCategory.indexOf("back") == -1){
transform:`rotate(${item.layersObject?.[i]?.rotate || 0}deg) scaleX(${item.layersObject[i].transpose?.[0] || 1}) scaleY(${item.layersObject[i].transpose?.[1] || 1})`, state.frontBack.front[index] = item.layersObject[i]
} // state.frontBack.front[index].style.zIndex = v.priority
item.layersObject[i].centers={ state.frontBack.front[index].id = item.id
left:0, }else{
top:0, state.frontBack.back[index] = item.layersObject[i]
} // state.frontBack.back[index].style.zIndex = v.priority
item.layersObject[i].designOpenrtionBtn = false state.frontBack.back[index].id = item.id
if(item.layersObject[i].imageCategory.indexOf("back") == -1){
state.frontBack.front[index] = item.layersObject[i]
// state.frontBack.front[index].style.zIndex = v.priority
state.frontBack.front[index].id = item.id
}else{
state.frontBack.back[index] = item.layersObject[i]
// state.frontBack.back[index].style.zIndex = v.priority
state.frontBack.back[index].id = item.id
}
} }
} }
}) }
resolve('') })
}; }
})
let uploadDetail = (detailItem)=>{ let uploadDetail = (detailItem)=>{
detailItem.change = item.change detailItem.change = item.change
if(detailItem?.newDetail?.color && currentType != 'color'){ if(detailItem?.newDetail?.color && currentType != 'color'){
@@ -321,6 +307,7 @@ const DesignDetail : Module<DesignDetail,RootState> = {
detailItem.partialDesign = item.partialDesign detailItem.partialDesign = item.partialDesign
} }
detailItem.designType = item.designType detailItem.designType = item.designType
detailItem.canvasId = item.canvasId
detailItem.layersObject = item.layersObject detailItem.layersObject = item.layersObject
detailItem.path = item.path detailItem.path = item.path
detailItem.minIOPath = item.minIOPath detailItem.minIOPath = item.minIOPath
@@ -357,44 +344,9 @@ const DesignDetail : Module<DesignDetail,RootState> = {
}else{ }else{
uploadDetail(state.selectDetail) uploadDetail(state.selectDetail)
} }
if(state.currentDetailType != 'models'){
// state.selectDetail.change = item.change
// if(state.selectDetail?.newDetail?.color && currentType != '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.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.maskMinioUrl = item.layersObject?.[0]?.maskMinioUrl
// state.selectDetail.maskUrl = item.layersObject?.[0]?.maskUrl
// state.selectDetail.color = {
// ...item.color,
// rgba:{
// r:item.color?.r,
// g:item.color?.g,
// b:item.color?.b,
// },
// gradient:item.gradient,
// }
// if(state.selectDetail.newDetail?.sketch?.id && !state.selectDetail.id){
// state.designDetail.clothes.push(state.selectDetail)
// }
// state.selectDetail.id = item.id
// if(currentType)if(state.selectDetail.newDetail?.[currentType] && currentType != 'color')delete state.selectDetail.newDetail[currentType]
}
} }
if(value.fun)value.fun() if(value.fun)value.fun()
}, },
// setDesignItemOthers(state,data){ // setDesignItemOthers(state,data){

View File

@@ -312,7 +312,7 @@
import type { Rule } from 'ant-design-vue/es/form' import type { Rule } from 'ant-design-vue/es/form'
import { message } from 'ant-design-vue' import { message } from 'ant-design-vue'
import type { UploadChangeParam } from 'ant-design-vue' import type { UploadChangeParam } from 'ant-design-vue'
import VerifycationCodeInput from './components/verificationCodeInput.vue' import VerifycationCodeInput from './components/VerificationCodeInput.vue'
import { Https } from '@/tool/https' import { Https } from '@/tool/https'
import UploadStatus from './components/UploadStatus.vue' import UploadStatus from './components/UploadStatus.vue'