Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite

This commit is contained in:
李志鹏
2026-01-16 15:16:36 +08:00
50 changed files with 1705 additions and 146 deletions

View File

@@ -85,7 +85,7 @@
" alt="">
</div>
<div class="contentRight" v-else-if="currentDetailType && !isEditPattern.value">
<detailRight ref="detailRight"></detailRight>
<detailRight ref="detailRight" :sketchSize="sketchSize"></detailRight>
<div class="btn"
v-show="
currentDetailType !== 'color' &&
@@ -101,7 +101,7 @@
</div>
</div>
<div class="contentRight canvas" v-if="selectDetail && selectDetail.id && currentDetailType" :class="{'active': isEditPattern.value}">
<canvasBox ref="canvasBox" :key="canvasKey" @setSloganData="setSloganData" :isEditPattern="isEditPattern.value" :updateOtherLayers="updateOtherLayers"></canvasBox>
<canvasBox ref="canvasBox" :key="canvasKey" :sketchSize="sketchSize" @setSloganData="setSloganData" :isEditPattern="isEditPattern.value" :updateOtherLayers="updateOtherLayers"></canvasBox>
</div>
<!-- 画布 -->
<!-- <div class="content" v-else-if="selectDetail && selectDetail.id">
@@ -170,13 +170,29 @@ export default defineComponent({
},
positionKey:0,
detailLeftColorKey:0,
sketchSize:{
width:0,
height:0,
}
})
watch(()=>detailData.selectDetail,(newValue,oldValue)=>{
const getSketchSize:any = async ()=>{
let img = new Image();
img.src = detailData.selectDetail.path;
await new Promise((resolve, reject) => {
img.onload = () => {
detailData.sketchSize.width = img.width
detailData.sketchSize.height = img.height
resolve([img.width, img.height]);
}
img.onerror = reject;
});
}
watch(()=>detailData.selectDetail,async (newValue,oldValue)=>{
detailData.imgDomIndex = detailData.frontBack.front.findIndex((item:any)=>item.id == newValue.id)
if(newValue)await getSketchSize()
detailData.canvasKey += 1
// privewDetail(oldValue)
},{immediate: true})
provide('getCanvasIfEdit',detailData.getCanvasIfEdit)
provide('singleOveral',detailData.singleOveral)
provide('isEditPattern',detailData.isEditPattern)
@@ -342,25 +358,6 @@ export default defineComponent({
detailData.selectDetail.maskUrl = ''
detailData.selectDetail.maskMinioUrl = ''
}
function isNetworkPath(str) {
if (typeof str !== 'string' || str.trim() === '') {
return false;
}
const urlPatterns = [
/^https?:\/\//i, // http:// 或 https://
/^ftp:\/\//i, // ftp://
/^ws:\/\//i, // ws://
/^wss:\/\//i, // wss://
/^\/\//, // 协议相对路径 //example.com
/^data:/i, // data:image/png;base64,...这是Base64不是网络路径
];
// 排除data:URL这实际上是Base64
if (str.startsWith('data:')) {
return false;
}
return urlPatterns.some(pattern => pattern.test(str));
}
const printObjectToJSON = (list:any)=>{
if(list?.length > 0){
list.forEach((item:any)=>{
@@ -398,8 +395,11 @@ export default defineComponent({
trims:(newData && detailData.currentDetailType == 'element' && isCurrent && !detailData.isEditPattern.value)?{prints:newData}:list[i].trims?.prints?list[i].trims:{prints:[]},
accessory:(newData && detailData.currentDetailType == 'accessory' && isCurrent && !detailData.isEditPattern.value)?{prints:newData}:list[i].trims?.prints?list[i].trims:{prints:[]},
}
data.printObject.prints = printObjectToJSON(data.printObject.prints)
data.trims.prints = printObjectToJSON(data.trims.prints)
if(!data.partialDesign.partialDesignMinioPath){
data.partialDesign.partialDesignMinioPath = data.path
}
printObjectToJSON(data.printObject.prints)
printObjectToJSON(data.trims.prints)
if((detailData.isEditPattern.value && list[i].color?.gradient) || (!detailData.isEditPattern.value && (list[i].newDetail?.color?.gradient || list[i].color?.gradient))){
gradient = list[i].newDetail?.color?.gradient || list[i].color.gradient
gradient.colorImg = await setGradual(gradient,320,700)
@@ -428,7 +428,7 @@ export default defineComponent({
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?'merage':'default',
designType:detailData.selectDetail.id?'merge':'default',
timeZone:Intl.DateTimeFormat().resolvedOptions().timeZone,
processId:userDetail.value.userId,
probjectId:store.state.Workspace.probjects.id,
@@ -463,7 +463,7 @@ export default defineComponent({
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?'merage':'default',
designType:detailData.selectDetail.id?'merge':'default',
timeZone:Intl.DateTimeFormat().resolvedOptions().timeZone,
processId:userDetail.value.userId,
probjectId:store.state.Workspace.probjects.id,
@@ -596,7 +596,7 @@ export default defineComponent({
if(detailDom.detailRight?.privewDetail)await (detailDom.detailRight as any).privewDetail()
if(str == 'all'){
otherData = {
color: detailData.selectDetail.newDetail?.color.r?detailData.selectDetail.newDetail?.color:detailData.selectDetail.color,
color: detailData.selectDetail.newDetail?.color?.r?detailData.selectDetail.newDetail?.color:detailData.selectDetail.color,
printObject: detailData.selectDetail.newDetail?.print?.length>0?{prints:detailData.selectDetail.newDetail?.print}:detailData.selectDetail.printObject || null,
trims: detailData.selectDetail.newDetail?.element?.length>0?detailData.selectDetail.newDetail?.element:detailData.selectDetail.trims || null,
}
@@ -619,7 +619,7 @@ export default defineComponent({
}
}
if(detailData.currentDetailType == 'print'){
otherData.printObject = {prints:detailData.selectDetail.newDetail?.print}
otherData.printObject = detailData.selectDetail.newDetail?.print?.length>0?{prints:detailData.selectDetail.newDetail?.print}:detailData.selectDetail.printObject || null
}
if(detailData.currentDetailType == 'element'){
otherData.trims = detailData.selectDetail.newDetail?.element

View File

@@ -13,8 +13,6 @@
:clothingImageUrl="selectDetail.path"
:clothingImageUrl2="selectDetail.layersObject[0].maskUrl"
showFixedLayer
:width="sketchWidth"
:height="sketchHeight"
:canvasJSON="canvasJSON"
@canvasLoadJsonSuccess="canvasLoadJsonSuccess"
:clothing-image-opts="{
@@ -81,7 +79,11 @@ export default defineComponent({
updateOtherLayers:{
type:Function,
default:()=>{}
}
},
sketchSize:{
type:Object,
default:()=>{}
},
},
setup(props,{emit}) {
const store = useStore();
@@ -121,8 +123,6 @@ export default defineComponent({
printObject: store.state.DesignDetail.selectDetail.printObject,
trims: store.state.DesignDetail.selectDetail.trims,
})),
sketchWidth:0,
sketchHeight:0,
})
watch(()=>detailData.selectDetail,(newValue,oldValue)=>{
detailData.imgDomIndex = detailData.frontBack.front.findIndex((item:any)=>item.id == newValue.id)
@@ -177,7 +177,11 @@ export default defineComponent({
const privewDetail = async (oldSelectDetail = detailData.selectDetail)=>{
// if(!detailDom.editCanvas)return
return new Promise(async (res,reject)=>{
await detailDom.editCanvas.exportImage({isContainFixed:true}).then((rv)=>{
await detailDom.editCanvas.exportImage({
isContainFixed:true,
width:props.sketchSize.width,
height:props.sketchSize.height,
}).then((rv)=>{
if(oldSelectDetail?.partialDesign)oldSelectDetail.partialDesign.partialDesignBase64 = rv
})
//包含平铺图层 single+overall模式的图
@@ -188,6 +192,7 @@ export default defineComponent({
// await detailDom.editCanvas.exportImage({isContainFixed:true,isPrintTrimsNoRepeat:false,isPrintTrimsRepeat:true,isContainNormalLayer:false}).then((rv)=>{
// oldSelectDetail.undividedLayer = rv
// })
await setUndivideLayer()
res('')
})
}
@@ -203,11 +208,14 @@ export default defineComponent({
let img = new Image()
img.onload = ()=>{
let wH = [1,1]
let domHeight = detailDom.canvasContent.offsetHeight - 200
let domHeight = detailDom.canvasContent?.offsetHeight - 200
let imgHeight = img.height
wH = [1,domHeight/imgHeight]
detailData.canvasConfig.width = img.width * wH[1]
detailData.canvasConfig.height = domHeight
// detailData.canvasConfig.width = img.width * wH[1]
// detailData.canvasConfig.height = domHeight
console.log(detailData.canvasConfig,'===============')
detailData.canvasConfig.width = img.width
detailData.canvasConfig.height = img.height
res('')
}
@@ -335,34 +343,45 @@ export default defineComponent({
// }
const canvasLoadJsonSuccess = async ()=>{
let otherData = await props.updateOtherLayers()
updateOtherLayers(otherData)
if(!detailData.selectDetail.undividedLayerColor){
await detailDom.editCanvas.exportImage({isContainFixed:true,isPrintTrimsRepeat:false,isPrintTrimsNoRepeat:false,isContainNormalLayer:false}).then((rv)=>{
detailData.selectDetail.undividedLayerColor = rv
})
}
if(!detailData.selectDetail.undividedLayer){
await detailDom.editCanvas.exportImage({isContainFixed:true,isPrintTrimsNoRepeat:false,isPrintTrimsRepeat:true,isContainNormalLayer:false}).then((rv)=>{
detailData.selectDetail.undividedLayer = rv
})
}
await updateOtherLayers(otherData)
await setUndivideLayer()
}
const setUndivideLayer = async ()=>{
await new Promise<void>(async (resolve, reject) => {
// if(!detailData.selectDetail.undividedLayerColor){
await detailDom.editCanvas.exportImage({
isContainFixed:true,
isPrintTrimsRepeat:false,
isPrintTrimsNoRepeat:false,
isContainNormalLayer:false,
width:props.sketchSize.width,
height:props.sketchSize.height}).then((rv)=>{
detailData.selectDetail.undividedLayerColor = rv
})
// }
// if(!detailData.selectDetail.undividedLayer){
await detailDom.editCanvas.exportImage({
isContainFixed:true,
isPrintTrimsNoRepeat:false,
isPrintTrimsRepeat:true,
isContainNormalLayer:false,
width:props.sketchSize.width,
height:props.sketchSize.height,
}).then((rv)=>{
console.log(rv,'======')
detailData.selectDetail.undividedLayer = rv
})
// }
resolve()
})
}
const submitBase64Data = ()=>{
return detailDom.generalMiniCanvas.submitBase64Data()
}
const sketchSize:any = async ()=>{
let img = new Image();
img.src = detailData.selectDetail.path;
await new Promise((resolve, reject) => {
img.onload = () => {
detailData.sketchWidth = img.width
detailData.sketchHeight = img.height
resolve([img.width, img.height]);
}
img.onerror = reject;
});
}
onBeforeUnmount(()=>{
let front = detailData.frontBack.front[detailData.imgDomIndex]
let back = detailData.frontBack.back[detailData.imgDomIndex]
@@ -403,7 +422,6 @@ export default defineComponent({
});
})
}
await sketchSize()
setCanvas(detailData.selectDetail.path).then(()=>{
detailData.canvasLoad = true
})

View File

@@ -110,7 +110,7 @@
</ul> -->
</div>
<div class="designOpenrtion_pingpu" v-else>
<pingpu :list="printStyleList[type].overall" ref="pingpuRef" @change-canvas="updateCanvas"></pingpu>
<pingpu :list="printStyleList[type].overall" :width="sketchSize.width" :height="sketchSize.height" ref="pingpuRef" @change-canvas="updateCanvas"></pingpu>
</div>
</div>
</div>
@@ -141,7 +141,11 @@ export default defineComponent({
type: {
type: String,
default: 'print',
}
},
sketchSize:{
type:Object,
default:()=>{}
},
},
setup(props,{emit}) {
const { t } = useI18n()
@@ -273,7 +277,7 @@ export default defineComponent({
let x = Number(style.left.replace(/px/g,''))
let y = Number(style.top.replace(/px/g,''))
location = [(x*sketchWH[0]) ,(y*sketchWH[1])]
scale =[ editPrintElementData.systemDesignerPercentage/100, editPrintElementData.systemDesignerPercentage/100]
scale = item.scale
// scale = [item.pattern.style.width/item.pattern.style.height,item.pattern.style.height/item.pattern.style.width]
// location = [item.pattern.style.left,item.pattern.style.top]
}
@@ -352,18 +356,9 @@ export default defineComponent({
}
editPrintElementData.printZIndex++
item.pattern = pattern
function isJSONString(str) {
try {
JSON.parse(str);
return true; // 解析成功是有效的JSON字符串
} catch (e) {
return false; // 解析失败不是有效的JSON字符串
}
}
if(item.object){
if(isJSONString(item.object)){
item.object = JSON.parse(item.object)
}
}else{
item.object = {
top: 0,
@@ -916,6 +911,7 @@ export default defineComponent({
}
const inputFillScale = (scale:any)=>{
let arr = editPrintElementData.printStyleList[props.type].overall
console.log(arr,scale,editPrintElementData.imgDomIndex)
arr[editPrintElementData.imgDomIndex].scale = [scale,scale]
editPrintElementDom.pingpuRef.updataList([
{
@@ -1104,7 +1100,10 @@ export default defineComponent({
.habit_System_Designer {
align-items: center;
display: flex;
justify-content: center;
justify-content: flex-end;
margin-top: 1.8rem;
margin-right: .8rem;
.ant-slider-track,
.ant-slider-rail {
background-color: #e1e1e1;

View File

@@ -6,8 +6,8 @@
</div> -->
<sketchType v-if="currentDetailType === 'sketch'"></sketchType>
<!-- <printType v-if="currentDetailType === 'print'"></printType> -->
<editPrintElement ref="editPrintElement" v-if="currentDetailType === 'print'" type="print"></editPrintElement>
<editPrintElement ref="editPrintElement" v-if="currentDetailType === 'element'" type="element"></editPrintElement>
<editPrintElement ref="editPrintElement" v-if="currentDetailType === 'print'" type="print" :sketchSize="sketchSize"></editPrintElement>
<editPrintElement ref="editPrintElement" v-if="currentDetailType === 'element'" type="element" :sketchSize="sketchSize"></editPrintElement>
<modelsType ref="modelsType" v-if="currentDetailType === 'models'"></modelsType>
</div>
@@ -24,6 +24,12 @@ export default defineComponent({
components:{
sketchType,printType,editPrintElement,modelsType
},
props:{
sketchSize:{
type:Object,
default:()=>{}
},
},
setup(props,{emit}) {
const store = useStore();
const detailData = reactive({