From 418702295b205d51c5133973b970876759da58a4 Mon Sep 17 00:00:00 2001 From: lhmin0604 Date: Sat, 12 Sep 2026 19:44:16 +0800 Subject: [PATCH] =?UTF-8?q?fix(diy):=20=E4=BB=8E=E8=B4=B4=E7=BA=B8?= =?UTF-8?q?=E7=BC=96=E8=BE=91=E9=A1=B5=E8=BF=94=E5=9B=9E=E6=97=B6=20onShow?= =?UTF-8?q?=20=E5=90=8C=E6=AD=A5=E7=BC=93=E5=AD=98=E6=9C=80=E6=96=B0?= =?UTF-8?q?=E8=B4=B4=E7=BA=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit navigateBack 不触发工作台重新挂载,stickers state 停留在进入前的旧值, 编辑保存虽已写入缓存/服务端但工作台渲染的是旧 state。 useDidShow 从缓存同步当前设计贴纸(含 src/edits 变化), 首次 onShow 跳过(mount 读取端已做旧数据归一化)。 Co-Authored-By: Claude --- dist/pages/diy/index.js | 2 +- src/pages/diy/index.tsx | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/dist/pages/diy/index.js b/dist/pages/diy/index.js index c547927..126f68b 100644 --- a/dist/pages/diy/index.js +++ b/dist/pages/diy/index.js @@ -1 +1 @@ -"use strict";(wx["webpackJsonp"]=wx["webpackJsonp"]||[]).push([[95],{8955:function(e,a,t){var s=t(7842),n=t(1212),i=t(467),c=t(9379),r=t(436),o=t(5544),d=t(118),l=t(758),u=t.n(l),h=t(6540),m=t(5234),p=t(1457),g=t(6845),f=t(9703),x=t(9201),v=t(5414),j=t(9674),N=t(3053),y=t(9513),w=t(4848);function S(){var e=(0,f.wR)(),a=(e.theme,e.resolvedTheme),t=(0,x.c)();(0,v.l)(a);var s=(0,h.useState)(null),l=(0,o.A)(s,2),S=l[0],k=l[1],A=(0,h.useState)(1),b=(0,o.A)(A,2),M=(b[0],b[1],(0,h.useState)("")),T=(0,o.A)(M,2),E=T[0],Y=T[1],I=(0,h.useState)(1),D=(0,o.A)(I,2),P=D[0],O=D[1],_=(0,h.useState)([]),F=(0,o.A)(_,2),R=F[0],B=F[1],q=(0,h.useState)(null),z=(0,o.A)(q,2),V=z[0],C=z[1],H=(0,h.useState)(!1),J=(0,o.A)(H,2),X=J[0],G=J[1],L=(0,h.useState)({x:0,y:0}),K=(0,o.A)(L,2),Q=K[0],U=K[1],W=(0,h.useState)(!1),Z=(0,o.A)(W,2),$=Z[0],ee=Z[1],ae=(0,h.useState)(!1),te=(0,o.A)(ae,2),se=te[0],ne=te[1],ie=function(e,a){(0,g.x9)({productId:e.id,productName:e.name,unitPrice:e.price,count:a}).then(function(e){return(0,p.Fu)([e].concat((0,r.A)((0,p.p_)()))),Y(e.id),(0,g.i5)(e.id,{status:"designing"}).then(function(a){(0,p.Fu)((0,p.p_)().map(function(t){return t.id===e.id?(0,c.A)((0,c.A)({},t),{},{status:a.status}):t}))}).catch(function(){(0,p.Fu)((0,p.p_)().map(function(a){return a.id===e.id?(0,c.A)((0,c.A)({},a),{},{status:"designing"}):a}))})}).catch(function(){var t={id:"DSG"+Date.now(),productId:e.id,productName:e.name,productIcon:e.icon,unitPrice:e.price,count:a,status:"designing",createdAt:(new Date).toISOString().slice(0,10)};(0,p.Fu)([].concat((0,r.A)((0,p.p_)()),[t])),Y(t.id)})};(0,h.useEffect)(function(){var e=u().getCurrentInstance().router,a=e?e.params:void 0,t=a?a.source:void 0,s=a&&a.productId||a&&a.category;if("product"===t&&s){var n=(0,m.y9)(s);if(n){k(n);var i=Number(a?a.quantity:void 0)||1;O(i),ie(n,i)}}else if("designList"===t&&a&&a.designId){var r=a.designId,o=(0,p.p_)(),d=o.find(function(e){return e.id===r});if(d){Y(r),O(d.count);var l=(0,m.y9)(d.productId);l&&k(l);var h=d.designData,f=h?h.stickers:void 0;if(f){var x=h&&h.category&&h.category.mask||(l?l.mask:void 0),v=x?f.map(function(e){if(e.width>x.width||e.height>x.height){var a=.6*Math.min(x.width,x.height)/Math.max(e.width,e.height);return(0,c.A)((0,c.A)({},e),{},{width:Math.round(e.width*a),height:Math.round(e.height*a)})}return e}):f;B(v)}else if(h?h.imageSrc:void 0){var j={id:"legacy_"+Date.now(),src:h.imageSrc,x:h.imagePos&&h.imagePos.x||0,y:h.imagePos&&h.imagePos.y||0,scale:h.imagePos&&h.imagePos.scale||1,width:200,height:200,isOverlapping:!1};B([j])}"undesigned"===d.status&&((0,p.i5)(r,{status:"designing"}),(0,g.i5)(r,{status:"designing"}).catch(function(){}))}}else if(s){var N=(0,m.y9)(s);N&&(k(N),ie(N,1))}},[]);var ce=(0,h.useRef)(null),re=(0,h.useRef)({designId:"",quantity:1,category:null,stickers:[]});re.current={designId:E,quantity:P,category:S,stickers:R};var oe=function(){var e=re.current,a=e.designId,t=e.quantity,s=e.category,n=e.stickers;if(a&&s){var i=(0,p.p_)().find(function(e){return e.id===a}),r=(0,c.A)((0,c.A)({},i&&i.designData?i.designData:{}),{},{version:1,category:(0,c.A)({id:s.id,mask:s.mask},s.tone?{tone:s.tone}:{}),stickers:n});(0,p.i5)(a,{designData:r}),(0,g.i5)(a,{item:{productId:s.id,productName:s.name,unitPrice:s.price,count:t,designData:r}}).catch(function(){})}},de=function(){ce.current&&(clearTimeout(ce.current),ce.current=null),oe()};u().useDidHide(de),(0,h.useEffect)(function(){return de},[]);var le=(0,h.useRef)(!0);(0,h.useEffect)(function(){le.current?le.current=!1:(ce.current&&clearTimeout(ce.current),ce.current=setTimeout(oe,800))},[R]);var ue=function(e){for(var a=e.map(function(e){return(0,c.A)((0,c.A)({},e),{},{isOverlapping:!1})}),t=0;ti.x&&n.yi.y&&(a[t].isOverlapping=!0,a[s].isOverlapping=!0)}var u=a.some(function(e){return e.isOverlapping});return ne(u),a},he=function(){u().chooseImage({count:1,sizeType:["compressed"],sourceType:["album","camera"],success:function(e){var a=e.tempFilePaths[0];u().getImageInfo({src:a,success:function(e){var t=Math.min(S.mask.width,S.mask.height),s=.6*t/Math.max(e.width,e.height),n={id:"stk_"+Date.now(),src:a,x:0,y:0,scale:1,width:Math.round(e.width*s),height:Math.round(e.height*s),isOverlapping:!1},i=[].concat((0,r.A)(R),[n]),c=ue(i);B(c),C(n.id)},fail:function(){var e=Math.min(S.mask.width,S.mask.height),t=.6*e/200,s={id:"stk_"+Date.now(),src:a,x:0,y:0,scale:1,width:Math.round(200*t),height:Math.round(200*t),isOverlapping:!1},n=[].concat((0,r.A)(R),[s]),i=ue(n);B(i),C(s.id)}})}})},me=function(e){var a=R.filter(function(a){return a.id!==e}),t=ue(a);B(t),V===e&&C(null)},pe=function(e,a){var t=e.touches[0],s=R.find(function(e){return e.id===a});s&&(C(a),G(!0),U({x:t.clientX-s.x,y:t.clientY-s.y}))},ge=function(e){if(X&&V){var a=e.touches[0],t=R.map(function(e){if(e.id!==V)return e;var t=Math.max(0,S.mask.width-e.width*e.scale),s=Math.max(0,S.mask.height-e.height*e.scale);return(0,c.A)((0,c.A)({},e),{},{x:Math.min(Math.max(a.clientX-Q.x,0),t),y:Math.min(Math.max(a.clientY-Q.y,0),s)})}),s=ue(t);B(s)}},fe=function(){return G(!1)},xe=function(){V&&E&&(de(),u().navigateTo({url:"/pages/diy/stickerEdit/index?designId=".concat(E,"&stickerId=").concat(V)}))},ve=function(e,a){var t=R.map(function(t){if(t.id!==e)return t;var s=Math.max(.3,Math.min(3,t.scale+a)),n=Math.max(0,S.mask.width-t.width*s),i=Math.max(0,S.mask.height-t.height*s);return(0,c.A)((0,c.A)({},t),{},{scale:s,x:Math.min(Math.max(t.x,0),n),y:Math.min(Math.max(t.y,0),i)})}),s=ue(t);B(s)},je=function(e){var a=e.edits;if(a){var t=a.brightness||0,s=a.hue||0,n=a.contrast||0;if(0!==t||0!==s||0!==n)return"brightness(".concat(100+t,"%) hue-rotate(").concat(s,"deg) contrast(").concat(100+n,"%)")}},Ne=function(){u().navigateBack()},ye=function(){if(!S)return{width:300,height:420};var e={width:S.mask.width,height:S.mask.height};return"rect"===S.mask.shape&&(e.borderRadius=S.mask.borderRadius||0),"circle"===S.mask.shape&&(e.borderRadius="50%"),e},we=function(){var e=(0,i.A)((0,n.A)().m(function e(){var a,t,s,i;return(0,n.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!se){e.n=1;break}return u().showToast({title:"\u8d34\u7eb8\u4e0d\u80fd\u91cd\u53e0",icon:"none"}),e.a(2);case 1:if(!E||!S){e.n=6;break}return e.n=2,(0,g.x5)({stickers:R,category:S,version:1});case 2:return a=e.v,t=(0,c.A)({id:S.id,mask:S.mask},S.tone?{tone:S.tone}:{}),s=(0,p.p_)().find(function(e){return e.id===E}),i=(0,c.A)((0,c.A)({},s&&s.designData?s.designData:{}),{},{version:1,category:t,stickers:a.stickers||R}),(0,p.i5)(E,{status:"designing",designData:i}),e.p=3,e.n=4,(0,g.i5)(E,{status:"designing",item:{productId:S.id,productName:S.name,unitPrice:S.price,count:P,designData:i}});case 4:e.n=6;break;case 5:e.p=5,e.v,u().showToast({title:"\u7f51\u7edc\u4e0d\u53ef\u7528\uff0c\u5df2\u6682\u5b58\u5230\u672c\u5730",icon:"none"});case 6:ee(!1),u().navigateTo({url:"/pages/checkout/index?designId=".concat(E)});case 7:return e.a(2)}},e,null,[[3,5]])}));return function(){return e.apply(this,arguments)}}(),Se=V?R.find(function(e){return e.id===V}):void 0,ke=Se?Se.scale:1;return S?(0,w.jsxs)(d.Ss,{className:"theme-".concat(a),children:[(0,w.jsx)(j.A,{}),(0,w.jsx)(N.A,{title:"\u8bbe\u8ba1\u5de5\u4f5c\u53f0",targetSelector:".page-header.surface-card",showBack:!0}),(0,w.jsxs)(d.Ss,{className:"diy-page",children:[(0,w.jsx)(d.Ss,{className:"page-header surface-card",style:{paddingTop:"".concat(t.statusBarHeight+12,"px")},children:(0,w.jsxs)(d.Ss,{className:"flex-between",style:{width:"100%"},children:[(0,w.jsx)(d.EY,{className:"back-btn",onTap:Ne,children:"\u2190"}),(0,w.jsx)(d.EY,{className:"page-title",children:"\u8bbe\u8ba1\u5de5\u4f5c\u53f0"}),(0,w.jsx)(d.Ss,{className:"header-spacer"})]})}),(0,w.jsx)(d.Ss,{className:"canvas-wrapper surface-card mt-20",catchMove:!0,children:(0,w.jsxs)(d.Ss,{className:"canvas-area",style:ye(),children:[R.map(function(e){return(0,w.jsx)(d._V,{className:"canvas-image ".concat(e.isOverlapping?"overlap":""," ").concat(V===e.id?"active":""),src:e.src,style:{transform:"translate(".concat(e.x,"px, ").concat(e.y,"px) scale(").concat(e.scale,")"),opacity:X&&V===e.id?.8:1,zIndex:V===e.id?10:5,filter:je(e),width:e.width||200,height:e.height||200},onTouchStart:function(a){return pe(a,e.id)},onTouchMove:ge,onTouchEnd:fe,onTap:function(){return C(e.id)},mode:"aspectFit"},e.id)}),(0,w.jsx)(d.Ss,{className:"mask-border",style:ye()})]})}),(0,w.jsxs)(d.Ss,{className:"sticker-panel surface-card mt-20",children:[(0,w.jsx)(d.EY,{className:"section-title",children:"\u8d34\u7eb8"}),(0,w.jsxs)(d.Ss,{className:"sticker-list",children:[R.map(function(e){return(0,w.jsxs)(d.Ss,{className:"sticker-thumb ".concat(e.isOverlapping?"overlap":""," ").concat(V===e.id?"active":""),children:[(0,w.jsx)(d._V,{src:e.src,className:"sticker-thumb-img",mode:"aspectFit",onTap:function(){return C(e.id)}}),(0,w.jsx)(d.Ss,{className:"sticker-del",onTap:function(){return me(e.id)},children:(0,w.jsx)(d.EY,{className:"del-icon",children:"\xd7"})})]},e.id)}),(0,w.jsxs)(d.Ss,{className:"sticker-add-btn",onTap:he,children:[(0,w.jsx)(d.EY,{className:"add-icon",children:"+"}),(0,w.jsx)(d.EY,{className:"add-label",children:"\u6dfb\u52a0"})]})]}),se&&(0,w.jsx)(d.EY,{className:"overlap-hint",children:"\u6709\u8d34\u7eb8\u91cd\u53e0\uff0c\u8bf7\u8c03\u6574\u4f4d\u7f6e"})]}),V&&(0,w.jsxs)(d.Ss,{className:"toolbar surface-card mt-20",children:[(0,w.jsxs)(d.Ss,{className:"tool-row",children:[(0,w.jsx)(d.EY,{className:"tool-label",children:"\u7f29\u653e"}),(0,w.jsxs)(d.Ss,{className:"flex-center",style:{gap:"20px"},children:[(0,w.jsx)(d.Ss,{className:"tool-btn",onTap:function(){return ve(V,-.1)},children:"\uff0d"}),(0,w.jsxs)(d.EY,{className:"tool-value",children:[Math.round(100*ke),"%"]}),(0,w.jsx)(d.Ss,{className:"tool-btn",onTap:function(){return ve(V,.1)},children:"\uff0b"})]})]}),(0,w.jsxs)(d.Ss,{className:"tool-row",children:[(0,w.jsx)(d.EY,{className:"tool-label",children:"\u63d0\u793a"}),(0,w.jsx)(d.EY,{className:"tool-hint",children:"\u62d6\u52a8\u8c03\u6574\u4f4d\u7f6e\uff0c\u8d34\u7eb8\u4e0d\u53ef\u91cd\u53e0"})]})]}),(0,w.jsx)(d.Ss,{className:"edit-btn-bar mt-20",children:(0,w.jsx)(d.Ss,{className:"edit-btn ".concat(V?"active":"disabled"),onTap:xe,children:(0,w.jsx)(d.EY,{children:"\u7f16\u8f91"})})}),(0,w.jsxs)(y.A,{children:[(0,w.jsx)(d.Ss,{className:"btn-primary",onTap:function(){return ee(!0)},children:(0,w.jsx)(d.EY,{children:"\u9884\u89c8\u6548\u679c"})}),(0,w.jsx)(d.Ss,{className:"btn-secondary",onTap:he,children:(0,w.jsx)(d.EY,{children:"\u6dfb\u52a0\u8d34\u7eb8"})})]}),$&&(0,w.jsx)(d.Ss,{className:"preview-overlay",children:(0,w.jsxs)(d.Ss,{className:"preview-card surface-card",children:[(0,w.jsx)(d.EY,{className:"preview-title",children:"\u786e\u8ba4\u6548\u679c"}),(0,w.jsx)(d.Ss,{className:"preview-canvas",style:ye(),children:R.map(function(e){return(0,w.jsx)(d._V,{className:"preview-image ".concat(e.isOverlapping?"overlap":""),src:e.src,style:{transform:"translate(".concat(e.x,"px, ").concat(e.y,"px) scale(").concat(e.scale,")"),filter:je(e),width:e.width||200,height:e.height||200},mode:"aspectFit"},e.id)})}),(0,w.jsxs)(d.Ss,{className:"product-info",children:[(0,w.jsx)(d.EY,{className:"product-name",children:S.name}),(0,w.jsxs)(d.EY,{className:"product-size",children:["\u753b\u5e03\u5c3a\u5bf8: ",S.mask.width," \xd7 ",S.mask.height," px"]}),se&&(0,w.jsx)(d.EY,{className:"overlap-hint",children:"\u8d34\u7eb8\u6709\u91cd\u53e0\uff0c\u4e0d\u53ef\u63d0\u4ea4"})]}),(0,w.jsxs)(d.Ss,{className:"preview-actions",children:[(0,w.jsx)(d.Ss,{className:"btn-secondary",onTap:function(){return ee(!1)},children:(0,w.jsx)(d.EY,{children:"\u8fd4\u56de\u4fee\u6539"})}),(0,w.jsx)(d.Ss,{className:"btn-primary ".concat(se?"disabled":""),onTap:we,children:(0,w.jsx)(d.EY,{children:"\u786e\u8ba4\u5b8c\u6210"})})]})]})}),(0,w.jsx)(d.Ss,{className:"safe-bottom-placeholder"})]})]}):(0,w.jsxs)(d.Ss,{className:"theme-".concat(a),children:[(0,w.jsx)(j.A,{}),(0,w.jsx)(N.A,{title:"\u8bbe\u8ba1\u5de5\u4f5c\u53f0",targetSelector:".page-header.surface-card",showBack:!0}),(0,w.jsx)(d.Ss,{className:"diy-page",children:(0,w.jsx)(d.EY,{className:"page-title",children:"\u52a0\u8f7d\u4e2d..."})})]})}var k={navigationStyle:"custom",enablePageMeta:!0,navigationBarTitleText:"DIY\u5de5\u4f5c\u53f0"};Page((0,s.createPageConfig)(S,"pages/diy/index",{root:{cn:[]}},k||{}))}},function(e){var a=function(a){return e(e.s=a)};e.O(0,[907,96,76],function(){return a(8955)});e.O()}]); \ No newline at end of file +"use strict";(wx["webpackJsonp"]=wx["webpackJsonp"]||[]).push([[95],{8955:function(e,a,t){var s=t(7842),n=t(1212),i=t(467),c=t(9379),r=t(436),o=t(5544),d=t(118),u=t(758),l=t.n(u),h=t(6540),m=t(5234),g=t(1457),p=t(6845),f=t(9703),x=t(9201),v=t(5414),j=t(9674),N=t(3053),w=t(9513),y=t(4848);function S(){var e=(0,f.wR)(),a=(e.theme,e.resolvedTheme),t=(0,x.c)();(0,v.l)(a);var s=(0,h.useState)(null),u=(0,o.A)(s,2),S=u[0],k=u[1],A=(0,h.useState)(1),b=(0,o.A)(A,2),M=(b[0],b[1],(0,h.useState)("")),T=(0,o.A)(M,2),E=T[0],Y=T[1],I=(0,h.useState)(1),D=(0,o.A)(I,2),P=D[0],_=D[1],O=(0,h.useState)([]),F=(0,o.A)(O,2),R=F[0],B=F[1],q=(0,h.useState)(null),z=(0,o.A)(q,2),V=z[0],C=z[1],H=(0,h.useState)(!1),J=(0,o.A)(H,2),X=J[0],G=J[1],L=(0,h.useState)({x:0,y:0}),K=(0,o.A)(L,2),Q=K[0],U=K[1],W=(0,h.useState)(!1),Z=(0,o.A)(W,2),$=Z[0],ee=Z[1],ae=(0,h.useState)(!1),te=(0,o.A)(ae,2),se=te[0],ne=te[1],ie=function(e,a){(0,p.x9)({productId:e.id,productName:e.name,unitPrice:e.price,count:a}).then(function(e){return(0,g.Fu)([e].concat((0,r.A)((0,g.p_)()))),Y(e.id),(0,p.i5)(e.id,{status:"designing"}).then(function(a){(0,g.Fu)((0,g.p_)().map(function(t){return t.id===e.id?(0,c.A)((0,c.A)({},t),{},{status:a.status}):t}))}).catch(function(){(0,g.Fu)((0,g.p_)().map(function(a){return a.id===e.id?(0,c.A)((0,c.A)({},a),{},{status:"designing"}):a}))})}).catch(function(){var t={id:"DSG"+Date.now(),productId:e.id,productName:e.name,productIcon:e.icon,unitPrice:e.price,count:a,status:"designing",createdAt:(new Date).toISOString().slice(0,10)};(0,g.Fu)([].concat((0,r.A)((0,g.p_)()),[t])),Y(t.id)})};(0,h.useEffect)(function(){var e=l().getCurrentInstance().router,a=e?e.params:void 0,t=a?a.source:void 0,s=a&&a.productId||a&&a.category;if("product"===t&&s){var n=(0,m.y9)(s);if(n){k(n);var i=Number(a?a.quantity:void 0)||1;_(i),ie(n,i)}}else if("designList"===t&&a&&a.designId){var r=a.designId,o=(0,g.p_)(),d=o.find(function(e){return e.id===r});if(d){Y(r),_(d.count);var u=(0,m.y9)(d.productId);u&&k(u);var h=d.designData,f=h?h.stickers:void 0;if(f){var x=h&&h.category&&h.category.mask||(u?u.mask:void 0),v=x?f.map(function(e){if(e.width>x.width||e.height>x.height){var a=.6*Math.min(x.width,x.height)/Math.max(e.width,e.height);return(0,c.A)((0,c.A)({},e),{},{width:Math.round(e.width*a),height:Math.round(e.height*a)})}return e}):f;B(v)}else if(h?h.imageSrc:void 0){var j={id:"legacy_"+Date.now(),src:h.imageSrc,x:h.imagePos&&h.imagePos.x||0,y:h.imagePos&&h.imagePos.y||0,scale:h.imagePos&&h.imagePos.scale||1,width:200,height:200,isOverlapping:!1};B([j])}"undesigned"===d.status&&((0,g.i5)(r,{status:"designing"}),(0,p.i5)(r,{status:"designing"}).catch(function(){}))}}else if(s){var N=(0,m.y9)(s);N&&(k(N),ie(N,1))}},[]);var ce=(0,h.useRef)(null),re=(0,h.useRef)({designId:"",quantity:1,category:null,stickers:[]});re.current={designId:E,quantity:P,category:S,stickers:R};var oe=function(){var e=re.current,a=e.designId,t=e.quantity,s=e.category,n=e.stickers;if(a&&s){var i=(0,g.p_)().find(function(e){return e.id===a}),r=(0,c.A)((0,c.A)({},i&&i.designData?i.designData:{}),{},{version:1,category:(0,c.A)({id:s.id,mask:s.mask},s.tone?{tone:s.tone}:{}),stickers:n});(0,g.i5)(a,{designData:r}),(0,p.i5)(a,{item:{productId:s.id,productName:s.name,unitPrice:s.price,count:t,designData:r}}).catch(function(){})}},de=function(){ce.current&&(clearTimeout(ce.current),ce.current=null),oe()};l().useDidHide(de),(0,h.useEffect)(function(){return de},[]);var ue=(0,h.useRef)(!0);(0,h.useEffect)(function(){ue.current?ue.current=!1:(ce.current&&clearTimeout(ce.current),ce.current=setTimeout(oe,800))},[R]);var le=(0,h.useRef)(!0);l().useDidShow(function(){if(le.current)le.current=!1;else{var e=re.current.designId;if(e){var a=(0,g.p_)().find(function(a){return a.id===e}),t=a&&a.designData?a.designData.stickers:void 0;t&&t.length&&B(he(t))}}});var he=function(e){for(var a=e.map(function(e){return(0,c.A)((0,c.A)({},e),{},{isOverlapping:!1})}),t=0;ti.x&&n.yi.y&&(a[t].isOverlapping=!0,a[s].isOverlapping=!0)}var l=a.some(function(e){return e.isOverlapping});return ne(l),a},me=function(){l().chooseImage({count:1,sizeType:["compressed"],sourceType:["album","camera"],success:function(e){var a=e.tempFilePaths[0];l().getImageInfo({src:a,success:function(e){var t=Math.min(S.mask.width,S.mask.height),s=.6*t/Math.max(e.width,e.height),n={id:"stk_"+Date.now(),src:a,x:0,y:0,scale:1,width:Math.round(e.width*s),height:Math.round(e.height*s),isOverlapping:!1},i=[].concat((0,r.A)(R),[n]),c=he(i);B(c),C(n.id)},fail:function(){var e=Math.min(S.mask.width,S.mask.height),t=.6*e/200,s={id:"stk_"+Date.now(),src:a,x:0,y:0,scale:1,width:Math.round(200*t),height:Math.round(200*t),isOverlapping:!1},n=[].concat((0,r.A)(R),[s]),i=he(n);B(i),C(s.id)}})}})},ge=function(e){var a=R.filter(function(a){return a.id!==e}),t=he(a);B(t),V===e&&C(null)},pe=function(e,a){var t=e.touches[0],s=R.find(function(e){return e.id===a});s&&(C(a),G(!0),U({x:t.clientX-s.x,y:t.clientY-s.y}))},fe=function(e){if(X&&V){var a=e.touches[0],t=R.map(function(e){if(e.id!==V)return e;var t=Math.max(0,S.mask.width-e.width*e.scale),s=Math.max(0,S.mask.height-e.height*e.scale);return(0,c.A)((0,c.A)({},e),{},{x:Math.min(Math.max(a.clientX-Q.x,0),t),y:Math.min(Math.max(a.clientY-Q.y,0),s)})}),s=he(t);B(s)}},xe=function(){return G(!1)},ve=function(){V&&E&&(de(),l().navigateTo({url:"/pages/diy/stickerEdit/index?designId=".concat(E,"&stickerId=").concat(V)}))},je=function(e,a){var t=R.map(function(t){if(t.id!==e)return t;var s=Math.max(.3,Math.min(3,t.scale+a)),n=Math.max(0,S.mask.width-t.width*s),i=Math.max(0,S.mask.height-t.height*s);return(0,c.A)((0,c.A)({},t),{},{scale:s,x:Math.min(Math.max(t.x,0),n),y:Math.min(Math.max(t.y,0),i)})}),s=he(t);B(s)},Ne=function(e){var a=e.edits;if(a){var t=a.brightness||0,s=a.hue||0,n=a.contrast||0;if(0!==t||0!==s||0!==n)return"brightness(".concat(100+t,"%) hue-rotate(").concat(s,"deg) contrast(").concat(100+n,"%)")}},we=function(){l().navigateBack()},ye=function(){if(!S)return{width:300,height:420};var e={width:S.mask.width,height:S.mask.height};return"rect"===S.mask.shape&&(e.borderRadius=S.mask.borderRadius||0),"circle"===S.mask.shape&&(e.borderRadius="50%"),e},Se=function(){var e=(0,i.A)((0,n.A)().m(function e(){var a,t,s,i;return(0,n.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!se){e.n=1;break}return l().showToast({title:"\u8d34\u7eb8\u4e0d\u80fd\u91cd\u53e0",icon:"none"}),e.a(2);case 1:if(!E||!S){e.n=6;break}return e.n=2,(0,p.x5)({stickers:R,category:S,version:1});case 2:return a=e.v,t=(0,c.A)({id:S.id,mask:S.mask},S.tone?{tone:S.tone}:{}),s=(0,g.p_)().find(function(e){return e.id===E}),i=(0,c.A)((0,c.A)({},s&&s.designData?s.designData:{}),{},{version:1,category:t,stickers:a.stickers||R}),(0,g.i5)(E,{status:"designing",designData:i}),e.p=3,e.n=4,(0,p.i5)(E,{status:"designing",item:{productId:S.id,productName:S.name,unitPrice:S.price,count:P,designData:i}});case 4:e.n=6;break;case 5:e.p=5,e.v,l().showToast({title:"\u7f51\u7edc\u4e0d\u53ef\u7528\uff0c\u5df2\u6682\u5b58\u5230\u672c\u5730",icon:"none"});case 6:ee(!1),l().navigateTo({url:"/pages/checkout/index?designId=".concat(E)});case 7:return e.a(2)}},e,null,[[3,5]])}));return function(){return e.apply(this,arguments)}}(),ke=V?R.find(function(e){return e.id===V}):void 0,Ae=ke?ke.scale:1;return S?(0,y.jsxs)(d.Ss,{className:"theme-".concat(a),children:[(0,y.jsx)(j.A,{}),(0,y.jsx)(N.A,{title:"\u8bbe\u8ba1\u5de5\u4f5c\u53f0",targetSelector:".page-header.surface-card",showBack:!0}),(0,y.jsxs)(d.Ss,{className:"diy-page",children:[(0,y.jsx)(d.Ss,{className:"page-header surface-card",style:{paddingTop:"".concat(t.statusBarHeight+12,"px")},children:(0,y.jsxs)(d.Ss,{className:"flex-between",style:{width:"100%"},children:[(0,y.jsx)(d.EY,{className:"back-btn",onTap:we,children:"\u2190"}),(0,y.jsx)(d.EY,{className:"page-title",children:"\u8bbe\u8ba1\u5de5\u4f5c\u53f0"}),(0,y.jsx)(d.Ss,{className:"header-spacer"})]})}),(0,y.jsx)(d.Ss,{className:"canvas-wrapper surface-card mt-20",catchMove:!0,children:(0,y.jsxs)(d.Ss,{className:"canvas-area",style:ye(),children:[R.map(function(e){return(0,y.jsx)(d._V,{className:"canvas-image ".concat(e.isOverlapping?"overlap":""," ").concat(V===e.id?"active":""),src:e.src,style:{transform:"translate(".concat(e.x,"px, ").concat(e.y,"px) scale(").concat(e.scale,")"),opacity:X&&V===e.id?.8:1,zIndex:V===e.id?10:5,filter:Ne(e),width:e.width||200,height:e.height||200},onTouchStart:function(a){return pe(a,e.id)},onTouchMove:fe,onTouchEnd:xe,onTap:function(){return C(e.id)},mode:"aspectFit"},e.id)}),(0,y.jsx)(d.Ss,{className:"mask-border",style:ye()})]})}),(0,y.jsxs)(d.Ss,{className:"sticker-panel surface-card mt-20",children:[(0,y.jsx)(d.EY,{className:"section-title",children:"\u8d34\u7eb8"}),(0,y.jsxs)(d.Ss,{className:"sticker-list",children:[R.map(function(e){return(0,y.jsxs)(d.Ss,{className:"sticker-thumb ".concat(e.isOverlapping?"overlap":""," ").concat(V===e.id?"active":""),children:[(0,y.jsx)(d._V,{src:e.src,className:"sticker-thumb-img",mode:"aspectFit",onTap:function(){return C(e.id)}}),(0,y.jsx)(d.Ss,{className:"sticker-del",onTap:function(){return ge(e.id)},children:(0,y.jsx)(d.EY,{className:"del-icon",children:"\xd7"})})]},e.id)}),(0,y.jsxs)(d.Ss,{className:"sticker-add-btn",onTap:me,children:[(0,y.jsx)(d.EY,{className:"add-icon",children:"+"}),(0,y.jsx)(d.EY,{className:"add-label",children:"\u6dfb\u52a0"})]})]}),se&&(0,y.jsx)(d.EY,{className:"overlap-hint",children:"\u6709\u8d34\u7eb8\u91cd\u53e0\uff0c\u8bf7\u8c03\u6574\u4f4d\u7f6e"})]}),V&&(0,y.jsxs)(d.Ss,{className:"toolbar surface-card mt-20",children:[(0,y.jsxs)(d.Ss,{className:"tool-row",children:[(0,y.jsx)(d.EY,{className:"tool-label",children:"\u7f29\u653e"}),(0,y.jsxs)(d.Ss,{className:"flex-center",style:{gap:"20px"},children:[(0,y.jsx)(d.Ss,{className:"tool-btn",onTap:function(){return je(V,-.1)},children:"\uff0d"}),(0,y.jsxs)(d.EY,{className:"tool-value",children:[Math.round(100*Ae),"%"]}),(0,y.jsx)(d.Ss,{className:"tool-btn",onTap:function(){return je(V,.1)},children:"\uff0b"})]})]}),(0,y.jsxs)(d.Ss,{className:"tool-row",children:[(0,y.jsx)(d.EY,{className:"tool-label",children:"\u63d0\u793a"}),(0,y.jsx)(d.EY,{className:"tool-hint",children:"\u62d6\u52a8\u8c03\u6574\u4f4d\u7f6e\uff0c\u8d34\u7eb8\u4e0d\u53ef\u91cd\u53e0"})]})]}),(0,y.jsx)(d.Ss,{className:"edit-btn-bar mt-20",children:(0,y.jsx)(d.Ss,{className:"edit-btn ".concat(V?"active":"disabled"),onTap:ve,children:(0,y.jsx)(d.EY,{children:"\u7f16\u8f91"})})}),(0,y.jsxs)(w.A,{children:[(0,y.jsx)(d.Ss,{className:"btn-primary",onTap:function(){return ee(!0)},children:(0,y.jsx)(d.EY,{children:"\u9884\u89c8\u6548\u679c"})}),(0,y.jsx)(d.Ss,{className:"btn-secondary",onTap:me,children:(0,y.jsx)(d.EY,{children:"\u6dfb\u52a0\u8d34\u7eb8"})})]}),$&&(0,y.jsx)(d.Ss,{className:"preview-overlay",children:(0,y.jsxs)(d.Ss,{className:"preview-card surface-card",children:[(0,y.jsx)(d.EY,{className:"preview-title",children:"\u786e\u8ba4\u6548\u679c"}),(0,y.jsx)(d.Ss,{className:"preview-canvas",style:ye(),children:R.map(function(e){return(0,y.jsx)(d._V,{className:"preview-image ".concat(e.isOverlapping?"overlap":""),src:e.src,style:{transform:"translate(".concat(e.x,"px, ").concat(e.y,"px) scale(").concat(e.scale,")"),filter:Ne(e),width:e.width||200,height:e.height||200},mode:"aspectFit"},e.id)})}),(0,y.jsxs)(d.Ss,{className:"product-info",children:[(0,y.jsx)(d.EY,{className:"product-name",children:S.name}),(0,y.jsxs)(d.EY,{className:"product-size",children:["\u753b\u5e03\u5c3a\u5bf8: ",S.mask.width," \xd7 ",S.mask.height," px"]}),se&&(0,y.jsx)(d.EY,{className:"overlap-hint",children:"\u8d34\u7eb8\u6709\u91cd\u53e0\uff0c\u4e0d\u53ef\u63d0\u4ea4"})]}),(0,y.jsxs)(d.Ss,{className:"preview-actions",children:[(0,y.jsx)(d.Ss,{className:"btn-secondary",onTap:function(){return ee(!1)},children:(0,y.jsx)(d.EY,{children:"\u8fd4\u56de\u4fee\u6539"})}),(0,y.jsx)(d.Ss,{className:"btn-primary ".concat(se?"disabled":""),onTap:Se,children:(0,y.jsx)(d.EY,{children:"\u786e\u8ba4\u5b8c\u6210"})})]})]})}),(0,y.jsx)(d.Ss,{className:"safe-bottom-placeholder"})]})]}):(0,y.jsxs)(d.Ss,{className:"theme-".concat(a),children:[(0,y.jsx)(j.A,{}),(0,y.jsx)(N.A,{title:"\u8bbe\u8ba1\u5de5\u4f5c\u53f0",targetSelector:".page-header.surface-card",showBack:!0}),(0,y.jsx)(d.Ss,{className:"diy-page",children:(0,y.jsx)(d.EY,{className:"page-title",children:"\u52a0\u8f7d\u4e2d..."})})]})}var k={navigationStyle:"custom",enablePageMeta:!0,navigationBarTitleText:"DIY\u5de5\u4f5c\u53f0"};Page((0,s.createPageConfig)(S,"pages/diy/index",{root:{cn:[]}},k||{}))}},function(e){var a=function(a){return e(e.s=a)};e.O(0,[907,96,76],function(){return a(8955)});e.O()}]); \ No newline at end of file diff --git a/src/pages/diy/index.tsx b/src/pages/diy/index.tsx index 6e8fd59..f9f0308 100644 --- a/src/pages/diy/index.tsx +++ b/src/pages/diy/index.tsx @@ -183,6 +183,21 @@ export default function DIYPage() { // eslint-disable-next-line react-hooks/exhaustive-deps }, [stickers]) + // 问题5 留意点:页面栈返回(贴纸编辑页保存后 navigateBack)不触发重新挂载, + // 需在 onShow 从缓存同步最新贴纸(src/edits),否则工作台仍渲染旧 state。 + // 首次 onShow 跳过——mount 读取端已做过旧数据归一化,避免被未归一化的缓存覆盖。 + const skipShowRef = useRef(true) + Taro.useDidShow(() => { + if (skipShowRef.current) { skipShowRef.current = false; return } + const dId = latestRef.current.designId + if (!dId) return + const cached = getDesignList().find(d => d.id === dId) + const list = cached && cached.designData ? cached.designData.stickers : undefined + if (list && list.length) { + setStickers(checkOverlap(list)) + } + }) + // 矩形碰撞检测 const checkOverlap = (list: StickerItem[]) => { const newList = list.map(s => ({ ...s, isOverlapping: false }))