diff --git a/src/assets/style/style.css b/src/assets/style/style.css index 4818ee3c..0ebbe619 100644 --- a/src/assets/style/style.css +++ b/src/assets/style/style.css @@ -1816,13 +1816,11 @@ textarea:focus { .accountEdit_page .input_border, .generalMenu_printModel_upload .input_border, .generate .input_border { - z-index: 2; display: flex; align-items: center; padding-bottom: calc(2rem*1.2); top: 0; flex-wrap: wrap; - z-index: 6; --width: 65%; } .collection_modal_body .input_border .input_box, @@ -1836,7 +1834,6 @@ textarea:focus { .generalMenu_printModel_upload .input_border .input_box, .generate .input_border .input_box { position: relative; - z-index: 6; flex: 1; display: flex; align-items: center; @@ -1992,7 +1989,7 @@ textarea:focus { display: flex; float: left; align-items: center; - padding: 1.5rem 2rem; + padding: 1rem 2rem; background-color: #fff; flex: 1; height: auto; @@ -2210,7 +2207,6 @@ textarea:focus { cursor: pointer; transition: all 0.3s; position: relative; - z-index: 4; width: 4rem; display: flex; min-height: 3rem; @@ -2318,6 +2314,8 @@ textarea:focus { top: 0rem; flex: 1; border: 1px solid #dcdfe6; + width: calc(var(--width) + 6rem); + padding: 1rem; } .generage_btn_box { position: relative; diff --git a/src/assets/style/style.less b/src/assets/style/style.less index 6df16490..db55a3e7 100644 --- a/src/assets/style/style.less +++ b/src/assets/style/style.less @@ -1974,17 +1974,17 @@ textarea:focus{ //设计input和上传按钮样式 .collection_modal_body,.design_detail_modal_component,.library_page,.productImg_content,.poseTransfer,.scaleImage_modal,.editDesignType_modal,.accountEdit_page,.generalMenu_printModel_upload,.generate{ .input_border{ - z-index: 2; + // z-index: 2; display: flex; align-items: center; padding-bottom: calc(2rem*1.2); top: 0; flex-wrap: wrap; - z-index: 6; + // z-index: 6; --width:65%; .input_box{ position: relative; - z-index: 6; + // z-index: 6; flex: 1; display: flex; align-items: center; @@ -2057,7 +2057,7 @@ textarea:focus{ display: flex; float: left; align-items: center; - padding: 1.5rem 2rem; + padding: 1rem 2rem; // padding-right: 0; background-color: #fff; flex: 1; @@ -2150,7 +2150,6 @@ textarea:focus{ cursor: pointer; transition: all .3s; position: relative; - z-index: 4; width: 4rem; align-items: center; justify-content: center; @@ -2201,6 +2200,8 @@ textarea:focus{ top: 0rem; flex: 1; border: 1px solid #dcdfe6; + width: calc(var(--width) + 6rem); + padding: 1rem; } // span{ diff --git a/src/component/Account/account.vue b/src/component/Account/account.vue index 57f7a42e..6a9280e5 100644 --- a/src/component/Account/account.vue +++ b/src/component/Account/account.vue @@ -50,10 +50,10 @@
{{ userDetail.email }}
-
+
diff --git a/src/component/Account/frontPage/bindPage.vue b/src/component/Account/frontPage/bindPage.vue index 0557f7e9..7ec33f51 100644 --- a/src/component/Account/frontPage/bindPage.vue +++ b/src/component/Account/frontPage/bindPage.vue @@ -27,10 +27,10 @@
--> -
- - - +
+ +
+
@@ -138,12 +138,13 @@ export default defineComponent({ bindPageDom.bindEmail.init('Modify') } - const toGmailLogin = ()=>{ - message.info(t('account.canNotUtilize')) - } onMounted(async ()=>{ - return - let GOOGLE_CLIENT_ID = '29310152396-nnsd3h533fld665oguu8ovrt1nukmt46.apps.googleusercontent.com' + let GOOGLE_CLIENT_ID + if(import.meta.env.VITE_USER_NODE_ENV == 'development'){ + GOOGLE_CLIENT_ID = '157095842121-kdd1fdf8m8nudvj9sprstb2k2prnf9e4.apps.googleusercontent.com' + }else{ + GOOGLE_CLIENT_ID = '29310152396-nnsd3h533fld665oguu8ovrt1nukmt46.apps.googleusercontent.com' + } var existingScript = document.querySelector(`script[src="${data.scriptSrc}"]`); if(!window.isAddGmail){ if(!existingScript){ @@ -206,7 +207,6 @@ export default defineComponent({ ungroupGoogleModel, ungroupWeiXinModel, modifyEmail, - toGmailLogin, } }, data(){ @@ -271,14 +271,21 @@ export default defineComponent({ } >.gmail_btn{ position: relative; + border-radius: 4rem; + overflow: hidden; + > .gallery_btn{ + position: relative; + z-index: 2; + + } #g_id_bind{ position: absolute; left: 0; top: 0; width: 100%; height: 100%; - opacity: 0; - z-index: 2; + // opacity: 0; + z-index: 1; :deep(.nsm7Bb-HzV7m-LgbsSe.Bz112c-LgbsSe){ width: 100%; } diff --git a/src/component/Account/frontPage/mylnformation.vue b/src/component/Account/frontPage/mylnformation.vue index e5df3e55..80175852 100644 --- a/src/component/Account/frontPage/mylnformation.vue +++ b/src/component/Account/frontPage/mylnformation.vue @@ -28,7 +28,7 @@ optionFilterProp="label" :options="countryList" :field-names="{ label: locale == 'CHINESE_SIMPLIFIED'?'labelCn':'label' }" - placeholder="Please select" + :placeholder="`${$t('account.plaseSelect')} ${$t('account.Country')}`" allowClear show-search > diff --git a/src/component/Administrator/SE/allUser/index.vue b/src/component/Administrator/SE/allUser/index.vue index 28309f70..521e80df 100644 --- a/src/component/Administrator/SE/allUser/index.vue +++ b/src/component/Administrator/SE/allUser/index.vue @@ -22,7 +22,7 @@
- Country: + Country or Region:
- Country: + Country or Region: -
- -
-
- - - - - -
-
- -
-
- Cooperator: - -
-
- percentOff(%): * - -
-
- Commission Rate: * - -
-
- - End Time: * - - - -
-
- MaxRedemptions: - -
-
- PaidCommission: - -
-
- Remark: - -
-
-
-
Close
-
OK
-
-
-
- -
- - - - + + + \ No newline at end of file diff --git a/src/component/Administrator/recentActiveUser.vue b/src/component/Administrator/recentActiveUser.vue index 421ef4af..9a8cd832 100644 --- a/src/component/Administrator/recentActiveUser.vue +++ b/src/component/Administrator/recentActiveUser.vue @@ -150,11 +150,11 @@ export default defineComponent({ }, }, { - title: "Country", + title: "Country or Region", align: "center", dataIndex: "country", key: "country", - width:100, + width:200, }, { title: "Create Date", diff --git a/src/component/Administrator/recentNewUser.vue b/src/component/Administrator/recentNewUser.vue index da8a628a..33bed9d4 100644 --- a/src/component/Administrator/recentNewUser.vue +++ b/src/component/Administrator/recentNewUser.vue @@ -177,11 +177,11 @@ export default defineComponent({ }, }, { - title: "Country", + title: "Country or Region", align: "center", dataIndex: "country", key: "country", - width:100, + width:200, }, { title: "Create Date", diff --git a/src/component/Administrator/trialAllUser.vue b/src/component/Administrator/trialAllUser.vue index 606887b1..696e815d 100644 --- a/src/component/Administrator/trialAllUser.vue +++ b/src/component/Administrator/trialAllUser.vue @@ -23,7 +23,7 @@
- Country: + Country or Region: { // 使用window的resize事件代替ResizeObserver // 只有当窗口大小变化时才更新画布尺寸 // window.addEventListener("resize", handleWindowResize); + if(props.config.initZoom) { + const width = canvasManager.width; + const height = canvasManager.height; + const cwidth = props.config.width; + const cheight = props.config.height; + let zoom = Math.min(1,width/cwidth,height/cheight); + if(zoom < 1) zoom -= 0.05; + setZoom(zoom); // 设置画布缩放 + } }); watchEffect(() => { @@ -521,6 +530,19 @@ function resetZoom() { canvasManager.resetZoom(); } +function setZoom(zoom) { + setTimeout(()=>{ + if (!canvasManager) return; + const newZoom = Math.max(zoom, 0.1); // 减少10%,最小0.1倍 + // 使用画布中心作为缩放点 + const centerPoint = { + x: canvasManager.canvas.width / 2, + y: canvasManager.canvas.height / 2, + }; + canvasManager.animateZoom(centerPoint, newZoom); + }) +} + function zoomIn() { if (!canvasManager) return; @@ -882,6 +904,7 @@ defineExpose({ layerId = "", // 导出具体图层ID layerIdArray = [], // 导出多个图层ID数组 expPicType = "png", // 导出图片类型 JPG 或 PNG ,SVG + isEnhanceImg, // 是否是增强图片 } = {}) => { return canvasManager.exportImage({ isContainBg, @@ -890,6 +913,7 @@ defineExpose({ layerId, layerIdArray, expPicType, + isEnhanceImg, }); }, /** diff --git a/src/component/Canvas/CanvasEditor/managers/CanvasManager.js b/src/component/Canvas/CanvasEditor/managers/CanvasManager.js index 6c4083da..a0abed05 100644 --- a/src/component/Canvas/CanvasEditor/managers/CanvasManager.js +++ b/src/component/Canvas/CanvasEditor/managers/CanvasManager.js @@ -811,6 +811,7 @@ export class CanvasManager { * @param {Array} options.layerIdArray 导出多个图层ID数组 * @param {String} options.expPicType 导出图片类型 (png/jpg/svg) * @param {Boolean} options.restoreOpacityInRedGreen 红绿图模式下是否恢复透明度为1 + * @param {Boolean} options.isEnhanceImg 是否是增强图片 * @returns {String} 导出的图片数据URL */ async exportImage(options = {}) { diff --git a/src/component/Canvas/CanvasEditor/managers/ExportManager.js b/src/component/Canvas/CanvasEditor/managers/ExportManager.js index 41d1007d..0b474d05 100644 --- a/src/component/Canvas/CanvasEditor/managers/ExportManager.js +++ b/src/component/Canvas/CanvasEditor/managers/ExportManager.js @@ -18,10 +18,12 @@ export class ExportManager { * @param {Object} options 导出选项 * @param {Boolean} options.isContainBg 是否包含背景图层 * @param {Boolean} options.isContainFixed 是否包含固定图层 + * @param {Boolean} options.isCropByBg 是否使用背景大小裁剪 * @param {String} options.layerId 导出具体图层ID * @param {Array} options.layerIdArray 导出多个图层ID数组 * @param {String} options.expPicType 导出图片类型 (png/jpg/svg) * @param {Boolean} options.restoreOpacityInRedGreen 红绿图模式下是否恢复透明度为1 + * @param {Boolean} options.isEnhanceImg 是否是增强图片 * @returns {String} 导出的图片数据URL */ exportImage(options = {}) { @@ -33,6 +35,7 @@ export class ExportManager { layerIdArray = [], expPicType = "png", restoreOpacityInRedGreen = true, + isEnhanceImg, // 是否是增强图片 } = options; try { // 检查是否为红绿图模式 @@ -44,7 +47,8 @@ export class ExportManager { expPicType, isRedGreenMode, restoreOpacityInRedGreen, - isCropByBg + isCropByBg, + isEnhanceImg, // 是否是增强图片 ); } @@ -57,7 +61,8 @@ export class ExportManager { isContainFixed, isRedGreenMode, restoreOpacityInRedGreen, - isCropByBg + isCropByBg, + isEnhanceImg, // 是否是增强图片 ); } @@ -68,7 +73,8 @@ export class ExportManager { isContainFixed, isRedGreenMode, restoreOpacityInRedGreen, - isCropByBg + isCropByBg, + isEnhanceImg, // 是否是增强图片 ); } catch (error) { console.error("导出图片失败:", error); @@ -82,6 +88,8 @@ export class ExportManager { * @param {String} expPicType 导出类型 * @param {Boolean} isRedGreenMode 是否为红绿图模式 * @param {Boolean} restoreOpacityInRedGreen 红绿图模式下是否恢复透明度为1 + * @param {Boolean} isCropByBg 是否使用背景大小裁剪 + * @param {Boolean} isEnhanceImg 是否是增强图片 * @returns {String} 图片数据URL * @private */ @@ -89,7 +97,9 @@ export class ExportManager { layerId, expPicType, isRedGreenMode, - restoreOpacityInRedGreen + restoreOpacityInRedGreen, + isCropByBg, // 是否使用背景大小裁剪 + isEnhanceImg, // 是否是增强图片 ) { if (!this.layerManager) { throw new Error("图层管理器未初始化"); @@ -117,7 +127,9 @@ export class ExportManager { return this._exportWithRedGreenMode( objectsToExport, expPicType, - restoreOpacityInRedGreen + restoreOpacityInRedGreen, + isCropByBg, // 是否使用背景大小裁剪 + isEnhanceImg, // 是否是增强图片 ); } @@ -137,6 +149,8 @@ export class ExportManager { * @param {Boolean} isContainFixed 是否包含固定图层 * @param {Boolean} isRedGreenMode 是否为红绿图模式 * @param {Boolean} restoreOpacityInRedGreen 红绿图模式下是否恢复透明度为1 + * @param {Boolean} isCropByBg 是否使用背景大小裁剪 + * @param {Boolean} isEnhanceImg 是否是增强图片 * @returns {String} 图片数据URL * @private */ @@ -147,7 +161,8 @@ export class ExportManager { isContainFixed, isRedGreenMode, restoreOpacityInRedGreen, - isCropByBg + isCropByBg, // 是否使用背景大小裁剪 + isEnhanceImg, // 是否是增强图片 ) { if (!this.layerManager) { throw new Error("图层管理器未初始化"); @@ -178,7 +193,9 @@ export class ExportManager { return await this._exportWithCanvasSize( objectsToExport, expPicType, - restoreOpacityInRedGreen + restoreOpacityInRedGreen, + isCropByBg, // 是否使用背景大小裁剪 + isEnhanceImg, // 是否是增强图片 ); } @@ -189,6 +206,8 @@ export class ExportManager { * @param {Boolean} isContainFixed 是否包含固定图层 * @param {Boolean} isRedGreenMode 是否为红绿图模式 * @param {Boolean} restoreOpacityInRedGreen 红绿图模式下是否恢复透明度为1 + * @param {Boolean} isCropByBg 是否使用背景大小裁剪 + * @param {Boolean} isEnhanceImg 是否是增强图片 * @returns {String} 图片数据URL * @private */ @@ -198,7 +217,8 @@ export class ExportManager { isContainFixed, isRedGreenMode, restoreOpacityInRedGreen, - isCropByBg + isCropByBg, // 是否使用背景大小裁剪 + isEnhanceImg, // 是否是增强图片 ) { // 按图层顺序收集对象(从底到顶) const objectsToExport = this._collectObjectsByLayerOrder( @@ -251,7 +271,9 @@ export class ExportManager { objectsToExport, expPicType, restoreOpacityInRedGreen, - canvasClipPath + canvasClipPath, + isCropByBg, // 是否使用背景大小裁剪 + isEnhanceImg, // 是否是增强图片 ); } @@ -603,6 +625,9 @@ export class ExportManager { * @param {Array} objectsToExport 要导出的对象数组 * @param {String} expPicType 导出类型 * @param {Boolean} restoreOpacityInRedGreen 是否恢复透明度为1 + * @param {Object} maskObject 裁剪对象 + * @param {Boolean} isCropByBg 是否使用背景大小裁剪 + * @param {Boolean} isEnhanceImg 是否是增强图片 * @returns {String} 图片数据URL * @private */ @@ -610,7 +635,9 @@ export class ExportManager { objectsToExport, expPicType, restoreOpacityInRedGreen, - maskObject + maskObject, // 裁剪对象 + isCropByBg, // 是否使用背景大小裁剪 + isEnhanceImg, // 是否是增强图片 ) { // 使用当前画布尺寸 // const canvasWidth = @@ -629,6 +656,8 @@ export class ExportManager { trimWhitespace: true, // 裁剪空白 trimPadding: 0, // 裁剪边距 restoreOpacityInRedGreen, + isCropByBg, // 是否使用背景大小裁剪 + isEnhanceImg, // 是否是增强图片 }); console.log("导出图片数据URL:", dataURL); diff --git a/src/component/Canvas/CanvasEditor/utils/selectionToImage.js b/src/component/Canvas/CanvasEditor/utils/selectionToImage.js index 848f6916..2f518624 100644 --- a/src/component/Canvas/CanvasEditor/utils/selectionToImage.js +++ b/src/component/Canvas/CanvasEditor/utils/selectionToImage.js @@ -21,6 +21,7 @@ export const createRasterizedImage = async ({ preserveOriginalQuality = true, // 是否保持原始质量(新增) selectionManager = null, // 选区管理器,用于获取羽化值等设置 restoreOpacityInRedGreen, // 是否在红绿图模式下恢复透明度 + isEnhanceImg, // 是否是增强图片 } = {}) => { try { console.log(`📊 开始栅格化 ${fabricObjects.length} 个对象`); @@ -41,6 +42,7 @@ export const createRasterizedImage = async ({ clippingObject, isReturenDataURL, selectionManager, // 传递选区管理器 + isEnhanceImg, // 是否是增强图片 }); } @@ -81,6 +83,7 @@ const createClippedObjects = async ({ clippingObject, isReturenDataURL, selectionManager = null, // 新增选区管理器参数 + isEnhanceImg, // 是否是增强图片 }) => { try { console.log("🎯 使用新的图像遮罩裁剪方法创建对象"); @@ -110,6 +113,7 @@ const createClippedObjects = async ({ clippingObject, selectionBounds: optimizedBounds, // 使用优化后的边界框 featherAmount, + isEnhanceImg, // 是否是增强图片 }); } @@ -120,6 +124,7 @@ const createClippedObjects = async ({ clippingObject, selectionBounds: optimizedBounds, // 使用优化后的边界框 featherAmount, + isEnhanceImg, // 是否是增强图片 }); // 将DataURL转换为fabric.Image对象 @@ -173,6 +178,7 @@ const createClippedDataURLByCanvas = async ({ clippingObject, selectionBounds, featherAmount = 0, + isEnhanceImg = false, // 是否是增强图片 }) => { try { console.log("🖼️ 使用图像遮罩裁剪方法生成DataURL"); @@ -185,7 +191,9 @@ const createClippedDataURLByCanvas = async ({ // 使用高分辨率以保证质量 const pixelRatio = window.devicePixelRatio || 1; - const qualityMultiplier = Math.max(2, pixelRatio); + const qualityMultiplier = !!isEnhanceImg ? Math.max(2, pixelRatio) : 1; + + console.log("使用高分辨率以保证质量:" + isEnhanceImg, optimizedBounds); const canvasWidth = Math.ceil(optimizedBounds.width * qualityMultiplier); const canvasHeight = Math.ceil(optimizedBounds.height * qualityMultiplier); @@ -455,6 +463,8 @@ const createLegacyRasterization = async ({ quality, format, isReturenDataURL, + isCropByBg, // 是否根据背景裁剪 + isEnhanceImg, // 是否是增强图片 }) => { console.log("⚠️ 使用兼容的离屏渲染方法"); @@ -481,6 +491,8 @@ const createLegacyRasterization = async ({ format, currentZoom, isReturenDataURL, + isCropByBg, // 是否根据背景裁剪 + isEnhanceImg, // 是否是增强图片 }); }; @@ -571,6 +583,8 @@ const createOffscreenRasterization = async ({ format, currentZoom, isReturenDataURL, + isCropByBg, // 是否根据背景裁剪 + isEnhanceImg, // 是否是增强图片 }) => { try { // 创建离屏画布,使用绝对尺寸以保证高质量 diff --git a/src/component/Canvas/ExistsImageList/index.vue b/src/component/Canvas/ExistsImageList/index.vue index 154fff27..5730cbfe 100644 --- a/src/component/Canvas/ExistsImageList/index.vue +++ b/src/component/Canvas/ExistsImageList/index.vue @@ -349,18 +349,18 @@ const handleImageError = (event) => { /* 图片网格 */ .image-grid { display: grid; - grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); + grid-template-columns: repeat(auto-fill, minmax(20rem, 1fr)); gap: 16px; - min-height: 200px; - max-height: 500px; + min-height: 20rem; + max-height: 50rem; @media screen and (max-width: 768px) { - grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); + grid-template-columns: repeat(auto-fill, minmax(15rem, 1fr)); gap: 12px; } - @media screen and (max-width: 480px) { - grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); + @media screen and (max-width: 48rem) { + grid-template-columns: repeat(auto-fill, minmax(12rem, 1fr)); gap: 10px; } } @@ -387,7 +387,7 @@ const handleImageError = (event) => { .image-wrapper { position: relative; width: 100%; - height: 220px; + height: 22rem; overflow: hidden; img { diff --git a/src/component/Detail/DesignDetail.vue b/src/component/Detail/DesignDetail.vue index 5f9bcc6e..cfea9c49 100644 --- a/src/component/Detail/DesignDetail.vue +++ b/src/component/Detail/DesignDetail.vue @@ -62,6 +62,7 @@ @addSketch="()=>isEditPattern.value=false" @revocation="revocation" @oppositeRevocation="oppositeRevocation" + @modelOnLoad="modelOnLoad" >
@@ -154,6 +155,7 @@ export default defineComponent({ fun:null, }, positionKey:0, + isUndividedLayerWithSinglePrint:false, }) provide('getCanvasIfEdit',detailData.getCanvasIfEdit) @@ -167,60 +169,73 @@ export default defineComponent({ } const showDesignDetailModal = (data:any,str:any)=>{ - // let url = Https.httpUrls.getDesignDetail + `?designItemId=${77770}&designPythonOutfitId=${77423}` - let url = Https.httpUrls.getDesignDetail + `?designItemId=${data.design.designItemId}&designPythonOutfitId=${data.design.designOutfitId}` - detailData.loadingShow = true - Https.axiosGet(url).then( - async (rv: any) => { - store.commit('DesignDetail/setDesignDetail',rv) - rv.clothes.forEach((item:any)=>{ - let a - item.designType='Library' - if(item.layersObject[0].imageCategory.indexOf("back") == -1){ - a = item.layersObject[0] - item.layersObject[0] = item.layersObject[1] - item.layersObject[1] = a - } - if(item.color){ - item.color.rgba = { - r:item.color.r, - g:item.color.g, - b:item.color.b, + return new Promise((resolve, reject) => { + store.commit('DesignDetail/clearDetailData') + // let url = Https.httpUrls.getDesignDetail + `?designItemId=${77770}&designPythonOutfitId=${77423}` + let url = Https.httpUrls.getDesignDetail + `?designItemId=${data.design.designItemId}&designPythonOutfitId=${data.design.designOutfitId}` + detailData.loadingShow = true + Https.axiosGet(url).then( + async (rv: any) => { + store.commit('DesignDetail/setDesignDetail',rv) + rv.clothes.forEach((item:any)=>{ + let a + item.designType='Library' + if(item.layersObject[0].imageCategory.indexOf("back") == -1){ + a = item.layersObject[0] + item.layersObject[0] = item.layersObject[1] + item.layersObject[1] = a } - }else{ - item.color = { - // rgba:{ - // r:undefined, - // g:undefined, - // b:undefined, - // } + if(item.color){ + item.color.rgba = { + r:item.color.r, + g:item.color.g, + b:item.color.b, + } + }else{ + item.color = { + // rgba:{ + // r:undefined, + // g:undefined, + // b:undefined, + // } + } } - } - if(item.gradient){ - item.color.gradient = item.gradient - } - if(item.printObject.prints == null)item.printObject.prints = [] - item.printObject.prints.forEach((element:any) => { - if(!element.designType){ - element.designType = 'Library' + if(item.gradient){ + item.color.gradient = item.gradient } - }); - }) - detailData.singleOveral.value = rv.singleOverall - detailData.designDetailShow = true - // this.deleteShow = false - initialize() - setRevocation() - detailData.loadingShow = false - if(rv.singleOverall == "single"){ - store.commit('DesignDetail/setDesignColthes',rv.clothes[0].id) - } + if(item.printObject.prints == null)item.printObject.prints = [] + item.printObject.prints.forEach((element:any) => { + if(!element.designType){ + element.designType = 'Library' + } + }); + if(!item.layersObject[0].undividedLayerWithSinglePrint){ + detailData.isUndividedLayerWithSinglePrint = true + } + }) + detailData.singleOveral.value = rv.singleOverall + detailData.designDetailShow = true + // this.deleteShow = false + initialize() + setRevocation() + if(rv.singleOverall == "single"){ + store.commit('DesignDetail/setDesignColthes',rv.clothes[0].id) + modelOnLoad() + } - } - - ).catch(rv=>{ - detailData.loadingShow = false - }) + + if(detailData.isUndividedLayerWithSinglePrint){ + }else{ + detailData.loadingShow = false + } + resolve(rv) + } + ).catch(rv=>{ + detailData.loadingShow = false + resolve(rv) + }) + }) + } const initialize = ()=>{//design后初始化 @@ -282,9 +297,10 @@ export default defineComponent({ } const setClothes = async (list:any)=>{ let clothesList:any = [] + await nextTick() for(let i = 0;i{ // return let workspace = store.state.Workspace.probjects - if(!detailData.selectDetail.path && !detailData.selectDetail.newDetail?.sketch?.minIOPath)return + if(!detailData?.selectDetail?.path && !detailData?.selectDetail?.newDetail?.sketch?.minIOPath)return let clothes:any - if(detailData.currentDetailType == 'models'){ + if(detailData.currentDetailType == 'models' || detailData.isUndividedLayerWithSinglePrint){ clothes = await setClothes(detailData.designDetail.clothes) }else{ clothes = await setClothes([detailData.selectDetail]) @@ -372,6 +394,8 @@ export default defineComponent({ delete detailData.designDetail.newModel store.commit('DesignDetail/setPraeview',value) detailData.loadingShow = false + detailData.isUndividedLayerWithSinglePrint = false + canvasReload() // setRevocation() }).catch(res=>{ detailData.loadingShow = false @@ -385,7 +409,7 @@ export default defineComponent({ designSingleItemDTOList:clothes, isPreview:false, // ifSubmit:designItemDetail.isPreview, - gender:workspace?.sex == 'Male'?1:0, + 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:'', @@ -420,6 +444,12 @@ export default defineComponent({ let data = getSubmitData('preview') store.dispatch('DesignDetail/setSubmit',data) } + const modelOnLoad = ()=>{ + if(!detailData.isUndividedLayerWithSinglePrint)return + setTimeout(()=>{ + previwe() + }) + } const detailEdit = async (str:any)=>{ if(str == 'edit'){ if(detailData.isEditPattern.value){ @@ -464,6 +494,7 @@ export default defineComponent({ oppositeRevocation, detailEdit, canvasReload, + modelOnLoad, } }, diff --git a/src/component/Detail/canvas/index.vue b/src/component/Detail/canvas/index.vue index 485fb8dd..f3743511 100644 --- a/src/component/Detail/canvas/index.vue +++ b/src/component/Detail/canvas/index.vue @@ -9,7 +9,7 @@
- +
  • @@ -148,6 +148,7 @@ export default defineComponent({ }, loadingShow:false, printElementList:null as any, + isSketchLoad:false, }) const collItemSize = reactive({ collValue:18, @@ -208,6 +209,7 @@ export default defineComponent({ }) } const addPrintELement = async (data:any)=>{ + if(!editPrintElementData.isSketchLoad)return let {scale,location} = await setScaleLocation(data) let item = { angle:0, @@ -379,6 +381,7 @@ export default defineComponent({ }) watch(()=>((editPrintElementData.selectDetail?.undividedLayer || editPrintElementData.selectDetail?.id)),(newVal)=>{ if(!newVal)return + editPrintElementData.isSketchLoad = false, editPrintElementData.printStyleList[props.type] = { single:[], overall:[], @@ -914,7 +917,7 @@ export default defineComponent({ > img{ width: 100%; height: 100%; - object-fit: cover; + object-fit: contain; } > i{ position: absolute; diff --git a/src/component/Detail/model/index.vue b/src/component/Detail/model/index.vue index 37921146..ae8c3e8a 100644 --- a/src/component/Detail/model/index.vue +++ b/src/component/Detail/model/index.vue @@ -23,7 +23,7 @@
- +
@@ -42,7 +42,7 @@ export default defineComponent({ components:{ position,modelNav }, - emits:['detailEdit','canvasReload','addSketch','revocation','oppositeRevocation'], + emits:['detailEdit','canvasReload','addSketch','revocation','oppositeRevocation','modelOnLoad'], setup(props,{emit}) { const {t} = useI18n() const store = useStore(); @@ -60,8 +60,8 @@ export default defineComponent({ libraryList:null as any, position:null as any, }) - const getSubmitData = (value:any)=>{ - return getDetailListDom.position.getSubmitData(value) + const getSubmitData = (value:any,boolean)=>{ + return getDetailListDom.position.getSubmitData(value,boolean) } const showDesignImgDetail = (str:any)=>{ new Promise((resolve, reject) => { diff --git a/src/component/Detail/model/modelNav.vue b/src/component/Detail/model/modelNav.vue index 00e6f753..a1076188 100644 --- a/src/component/Detail/model/modelNav.vue +++ b/src/component/Detail/model/modelNav.vue @@ -74,29 +74,31 @@ export default defineComponent({ },{immediate:true}) const selectDetailItem = (item:any,index:number)=>{ new Promise((resolve, reject) => { - // if(detailData.isEditPattern.value && - // detailData.selectDetail?.id && - // detailData?.getCanvasIfEdit?.fun&&detailData?.getCanvasIfEdit?.fun() > 0 - // ){ - // Modal.confirm({ - // title: t('collectionModal.jsContent2'), - // icon: createVNode(ExclamationCircleOutlined), - // okText: 'Yes', - // cancelText: 'No', - // mask:false, - // centered:true, - // onOk() { - // resolve(true) - // emit('canvasReload') - // }, - // onCancel(){ - // resolve(false) - // } - // }); - // }else{ + if(detailData.isEditPattern.value && + detailData.selectDetail?.id && + detailData?.getCanvasIfEdit?.fun&&detailData?.getCanvasIfEdit?.fun() > 0 + ){ + Modal.confirm({ + title: t('collectionModal.jsContent6'), + icon: createVNode(ExclamationCircleOutlined), + okText: 'Yes', + cancelText: 'No', + mask:false, + centered:true, + onOk() { + resolve(true) + emit('canvasReload') + }, + onCancel(){ + resolve(false) + } + }); + }else{ resolve(true) - emit('canvasReload') - // } + if(detailData.selectDetail.id !== item.id){ + emit('canvasReload') + } + } }).then((rv)=>{ if(rv)store.commit('DesignDetail/setDesignColthes',item.id) }) diff --git a/src/component/Detail/model/modelPosition.vue b/src/component/Detail/model/modelPosition.vue index deb47ba9..8242a2cb 100644 --- a/src/component/Detail/model/modelPosition.vue +++ b/src/component/Detail/model/modelPosition.vue @@ -4,7 +4,7 @@
- +
@@ -18,7 +18,7 @@
- +
@@ -49,7 +49,7 @@ export default defineComponent({ type:Boolean, } }, - emits:['canvasReload'], + emits:['canvasReload','addSketch','modelOnLoad'], setup(props,{emit}) { const {t} = useI18n() const store = useStore(); @@ -82,6 +82,11 @@ export default defineComponent({ let dom = document.querySelector('.molepositon .perview_img') as any if(!detailData.frontBack?.body?.path || !dom)return img.onload = () => { + if(detailData.designDetail.clothes.length == 0){ + store.commit('DesignDetail/addDesignColthes') + emit('addSketch') + return + } if(!detailData.selectDetail?.id){ store.commit('DesignDetail/setDesignColthes',detailData.designDetail.clothes[0].id) } @@ -111,6 +116,9 @@ export default defineComponent({ // detailData.frontBack.back[index].style[key] = value*sacle+'px' } }); + setTimeout(() => { + emit('modelOnLoad') + },500); }; img.src = detailData.frontBack?.body?.path; }) @@ -236,38 +244,41 @@ export default defineComponent({ // } } const itemMoveMousedown = async (index:any,e:any)=>{ + if(detailData.selectDetail.id != detailData.frontBack.front[index].id)return let isOpen = false let isModal = false await new Promise((resolve, reject) => { - if( - detailData.isEditPattern.value && - selectItem.selectDetail?.id && - (detailData.frontBack.front[index].id != selectItem.selectDetail.id) - ){ - isModal = true - Modal.confirm({ - title: t('collectionModal.jsContent2'), - icon: createVNode(ExclamationCircleOutlined), - okText: 'Yes', - cancelText: 'No', - mask:false, - centered:true, - onOk() { - resolve(true) - isOpen = true - }, - onCancel(){ - resolve(false) - isOpen = false - } - }); - }else{ - if(detailData.frontBack.front[index].id != selectItem.selectDetail.id){ - isOpen = true - } - resolve(true) - isModal = false - } + // if( + // detailData.isEditPattern.value && + // selectItem.selectDetail?.id && + // (detailData.frontBack.front[index].id != selectItem.selectDetail.id) + // ){ + // isModal = true + // Modal.confirm({ + // title: t('collectionModal.jsContent2'), + // icon: createVNode(ExclamationCircleOutlined), + // okText: 'Yes', + // cancelText: 'No', + // mask:false, + // centered:true, + // onOk() { + // resolve(true) + // isOpen = true + // }, + // onCancel(){ + // resolve(false) + // isOpen = false + // } + // }); + // }else{ + // if(detailData.frontBack.front[index].id != selectItem.selectDetail.id){ + // isOpen = true + // } + // resolve(true) + // isModal = false + // } + resolve(true) + isOpen = true }).then((rv)=>{ }) if(isOpen){ @@ -305,9 +316,9 @@ export default defineComponent({ }); return arr } - const getSubmitData = (value:any)=>{ + const getSubmitData = (value:any,isNoComputed)=>{ let parentNode = document.getElementsByClassName('molepositon')[0].getElementsByClassName("designOpenrtion_imgMask")[0].getBoundingClientRect() - if(!detailData.frontBack?.body?.layersObject?.[0]?.imageSize){ + if(!detailData.frontBack?.body?.layersObject?.[0]?.imageSize || isNoComputed){ return{ scale:value.layersObject[0].scale, offset:value.layersObject[0].offset, @@ -315,7 +326,6 @@ export default defineComponent({ } } let ratio = detailData.frontBack.body.layersObject[0].imageSize[0]/parentNode.width - // let arr:any = sort(detailData.frontBack.front) let arr:any = sort(JSON.parse(JSON.stringify(detailData.frontBack.front))) let num = 10 @@ -481,7 +491,7 @@ export default defineComponent({ align-items: center; justify-content: center; img{ - height: auto; + // height: auto; } } } diff --git a/src/component/HomePage/Generate.vue b/src/component/HomePage/Generate.vue index 0455d50c..b1e3e95e 100644 --- a/src/component/HomePage/Generate.vue +++ b/src/component/HomePage/Generate.vue @@ -338,7 +338,7 @@ export default defineComponent({ speed.speedData.value = '' speed.speedData.label = '' }else{ - if(newVal.value == "Pattern"){ + if(newVal.value == "Pattern" || props.msg == 'Sketchboard'){ speed.speedData = speed.speedList[1] }else{ speed.speedData = speed.speedList[0] @@ -350,6 +350,9 @@ export default defineComponent({ } onMounted(() => { instance.appContext.config.globalProperties.$dropdownEvents.onClose(removeOpenSpeed) + if(props.msg == 'Sketchboard'){ + speed.speedData = speed.speedList[1] + } }) onUnmounted(() => { @@ -742,7 +745,7 @@ export default defineComponent({ data = data.filter((item:any) => item !== element.taskId); console.log(data) this.fileList = this.fileList.filter((item:any) => item.taskId !== element.taskId); - message.info(this.t('Generate.everyTimeEffectPoor')); + // message.info(this.t('Generate.everyTimeEffectPoor')); } }); if((data.length == 0)){ @@ -1008,6 +1011,7 @@ export default defineComponent({ this.searchPictureName = ""; }, onPaste(e:any){ + if(this.sketchboardList.length != 0)return if(e.clipboardData.files[0] && !this.isTextarea && this.upload.level1Type !== 'Moodboard' && this.scene?.value != 'Slogan' && this.scene?.value != 'Logo'){ let param = new FormData(); param.append('inPin','0') diff --git a/src/component/HomePage/bindEmail.vue b/src/component/HomePage/bindEmail.vue index 872278b0..409e5fe6 100644 --- a/src/component/HomePage/bindEmail.vue +++ b/src/component/HomePage/bindEmail.vue @@ -365,6 +365,7 @@ export default defineComponent({ title:this.selectSex, surname:this.surname, givenName:this.givenName, + userId:this.userDetail?.userId, }; if(this.loginTime){ this.loginTime = false diff --git a/src/component/HomePage/generalMenu.vue b/src/component/HomePage/generalMenu.vue index 43d7525c..61c26a43 100644 --- a/src/component/HomePage/generalMenu.vue +++ b/src/component/HomePage/generalMenu.vue @@ -71,7 +71,7 @@ import { message, Upload, Modal } from "ant-design-vue"; }, isFontType:{ type:Boolean, - default:true, + default:false, }, selectSize:{ type:String, diff --git a/src/component/HomePage/scaleImage.vue b/src/component/HomePage/scaleImage.vue index fcaf89a2..e001e990 100644 --- a/src/component/HomePage/scaleImage.vue +++ b/src/component/HomePage/scaleImage.vue @@ -608,30 +608,31 @@ export default defineComponent({ setImageIndex(index:any){ if(this.isNext)return let this_ = this - if(this.imgType == 'Printboard' || this.imgType == 'Sketchboard'){ - 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 - } + // if(this.imgType == 'Printboard' || this.imgType == 'Sketchboard'){ + // 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 + // } + this.scaleImageIndex = index }, LikeFile(item:any,str:string){ let parent:any = this.$parent diff --git a/src/component/HomePage/scaleVideo.vue b/src/component/HomePage/scaleVideo.vue index 6370db03..27770df1 100644 --- a/src/component/HomePage/scaleVideo.vue +++ b/src/component/HomePage/scaleVideo.vue @@ -4,9 +4,9 @@
-