From 34981d90c06b0cdf5231d669d29a8a7b6822b711 Mon Sep 17 00:00:00 2001 From: chen Date: Sat, 19 Sep 2026 16:05:08 +0800 Subject: [PATCH] =?UTF-8?q?feat(decorate):=20=E9=A6=96=E9=A1=B5=E9=87=91?= =?UTF-8?q?=E5=88=9A=E5=8C=BA=E6=9B=BF=E6=8D=A2=E4=B8=BA=E5=90=84=E7=BA=A7?= =?UTF-8?q?=E8=BF=90=E8=90=A5=E4=B8=8E=E5=90=88=E4=BC=99=E4=B8=AD=E5=BF=83?= =?UTF-8?q?=E5=B9=B6=E6=94=AF=E6=8C=81=E5=BE=85=E5=BC=80=E5=8F=91=E5=86=85?= =?UTF-8?q?=E5=AE=B9=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../menu_city_center.png | Bin 0 -> 6278 bytes .../menu_city_partner.png | Bin 0 -> 6454 bytes docs/archive_static_backup/menu_coupon.png | Bin 0 -> 7283 bytes docs/archive_static_backup/menu_gift.png | Bin 0 -> 5750 bytes docs/archive_static_backup/menu_partner.png | Bin 0 -> 5675 bytes .../menu_province_center.png | Bin 0 -> 7222 bytes .../menu_province_partner.png | Bin 0 -> 6959 bytes .../menu_region_branch.png | Bin 0 -> 5909 bytes docs/archive_static_backup/menu_skincare.png | Bin 0 -> 6466 bytes docs/archive_static_backup/menu_wine.png | Bin 0 -> 5505 bytes .../decorate-update-partner-centers-2026.sql | 33 ++++ scripts/generate_banners.py | 45 ++++++ tests/verify_decorate_partner_centers_spec.js | 146 ++++++++++++++++++ uniapp/pages/public/richtext.vue | 34 +++- .../s-menu-button/s-menu-button.vue | 5 +- 15 files changed, 254 insertions(+), 9 deletions(-) create mode 100644 docs/archive_static_backup/menu_city_center.png create mode 100644 docs/archive_static_backup/menu_city_partner.png create mode 100755 docs/archive_static_backup/menu_coupon.png create mode 100755 docs/archive_static_backup/menu_gift.png create mode 100755 docs/archive_static_backup/menu_partner.png create mode 100644 docs/archive_static_backup/menu_province_center.png create mode 100644 docs/archive_static_backup/menu_province_partner.png create mode 100644 docs/archive_static_backup/menu_region_branch.png create mode 100755 docs/archive_static_backup/menu_skincare.png create mode 100755 docs/archive_static_backup/menu_wine.png create mode 100644 docs/sql/decorate-update-partner-centers-2026.sql create mode 100644 tests/verify_decorate_partner_centers_spec.js diff --git a/docs/archive_static_backup/menu_city_center.png b/docs/archive_static_backup/menu_city_center.png new file mode 100644 index 0000000000000000000000000000000000000000..d000ac71429cb921de748f005f1da7e0635cd783 GIT binary patch literal 6278 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%0AJ+BgQftj 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 N002ovPDHLkV1k_rAqxNi literal 0 HcmV?d00001 diff --git a/docs/archive_static_backup/menu_gift.png b/docs/archive_static_backup/menu_gift.png new file mode 100755 index 0000000000000000000000000000000000000000..bcb72a712eb9ae7cfc7d30ad0465f85c6ed4daeb GIT binary patch literal 5750 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 literal 0 HcmV?d00001 diff --git a/docs/archive_static_backup/menu_partner.png b/docs/archive_static_backup/menu_partner.png new file mode 100755 index 0000000000000000000000000000000000000000..ab60b04e6cfdc8d173afcb1410fe2f8cfa5ca73e GIT binary patch literal 5675 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 RCA$Cs002ovPDHLkV1ne+&?5i< literal 0 HcmV?d00001 diff --git a/docs/archive_static_backup/menu_province_center.png b/docs/archive_static_backup/menu_province_center.png new file mode 100644 index 0000000000000000000000000000000000000000..28bcc0fe94a156f550df2348deac335e3db41d6d GIT binary patch literal 7222 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 Eg3(0005u}1^@s6i_d2*000{HNkl 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 BtR4UW literal 0 HcmV?d00001 diff --git a/docs/archive_static_backup/menu_region_branch.png b/docs/archive_static_backup/menu_region_branch.png new file mode 100644 index 0000000000000000000000000000000000000000..967362452731aa96475d8e3ccebc564169489279 GIT binary patch literal 5909 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 literal 0 HcmV?d00001 diff --git a/docs/archive_static_backup/menu_skincare.png b/docs/archive_static_backup/menu_skincare.png new file mode 100755 index 0000000000000000000000000000000000000000..8f1b7b820c09a9bc44d8dd6590fafce34d977434 GIT binary patch literal 6466 zcmV-I8NKF-P)005u}1^@s6i_d2*000>YNkl z33wCby2mq<$=Yh=72A zfU*b_5GYGoODWLOh3Xxz5JgzBe+6OoI>!6ss4=;CcF9nQRRa zw!;@p;Cb@inF=AoR+k&h;L!=9zad1}3Lgia`=1MwAVk>YayhH#TvR_JrnqFk0LWQA z?@P`SYl!lEEDk>3D1E{54OAK_$X>_S(-jaV!^gQ?|G8veSwe)#@NtO-eWLPt`U66r zxL^)GcDUqpKe%I`$AFyWV;6+12atFdaqzJZ!j)dOf?frXgO8a?XAp#51JIR=<`NF( zmT9~VA?oj>gM*K`5c(o1@p=r%!53H%G9EyxaUW;-m?Kvpq}vM83Lw>sQpAE%vt~YRNgnk8(iuL2* z3*2~crH57!4b-)kIr&bWa6p?2=B!_EXT?4TkP7vj>kXcGaHX48kQNKbm0f~U=`>hD zw*cgf&;8wbaR?uYtIqMgkO81f#^vD8o){m2?9AG?}#m3CH&qKq7 zVwn`JE-J;#ZxnFS(ItEX}=RG@EI?R7zHm&hHoV)*KIisPDKDqW)9IiVQlv zxuK%kR9jMx7hk(+EW1_E>bKl|o4FCQHgawW7&4`Lr$`&VU+bP~>7LabCf#QCNYO1Yo@g?b08Z#L_P=eLPn$5hcf1c9q{O~I! z5k7%Ph>VysT`UQeA)}vtOfq@#vrmpt50p)r^Su79=G4bQKFEDu;$OHQ%VoPtalg7 zBIDZnd|4Avd0wH7--h>=x${7CEGdf$MW5S&oZ|LLXhW zP`2yS^~(CPDvzv>BvgjXd~2cX_Swt&tbIpy0MDdFPfPR8T`|CQ8}$Yo^I32y$8h|| zUo}Ys`v}0Wg4Kp{4m=l=7|(y~pNnL5B^CII&3iPJcZxmE;JsavVO;^5woXCAQ2k$$ird)=x1Yl{QoRojzngMPmVpsrisJ&Pe;#7!p+a$#CAAS2J+2sSrb?0^;*4hg_m?Dgg zO{e?U{Gftjv0kI299)T{Vr2fB_rl2AcYnHG1;uANu1gXoLn30^@U=>{$%MCVd{92h z>zvwC@W7CM0_!$_ZtAP^5KEkgqL%ox`-lNTctA*DB83O!a#Cn?Wb;jlAP5g?g|SJA z`~zS8s3w+gd?{x&L6AKPihonfuLy=*#CQHE0!6=EdbD2$M-t^aB z2(eezAq(QlNsFG5lDEetceZn@l{*)QE1zhI6OYKUD2^%b1mbx3>p&`Diu87;)6N51<-4IpY7l{P!hd~0C{xv+fb z>z~zjUw7eL2{G{jT|V@e4n}8MyIzq*EFl93Wu=@G=Ugrw`6>=%T@2_eJuo;$0Pw-T zQ9hqHY}RCPY?qGwKmW5$-P-sq#B5Z~4~6J*2SaEEtXV)W(3~w=N17(&O zZ!WNuW}v)sX#LOX+PmeJ6QQKBT!Y?V_GRa@FU1-Q2ySWGYxAX1aj~?v9@&cvsS3tp zs|xRmE+0Ipvlgx++Qsl;m@q1?Ek7#09U2`U%NK=6?RE#$l~&@XxBsps*Y^N$q69(# z^86R?IK57Rq($P+cp>g)!2U=;pgS3cx-4;@iw2=%?_^6snYc~Uq%s#=&M{Qxxfjnt zqbbbIfMf{%e)#XRrNp7N)}(4^G;Mn8lO}ud-t6~Zl|{whztQ0Q*~c=SjyZSg*F(^@ zQwN(H^w3aG z1r=YvWuOWmG^v^$WbS+cW@8u{Dr@kp{YRYwD2oh3$p9J|UcO-!fSyPo61A}Q&@_5+=*kUCi3Y_yixT((+pk5ZQd5FRL8whOR@a%bGcxu0 zS=2^m{H34)5Ud?}TV?)ToJvOx4Dt`0K2BsE+=qk#rbLqWgL-07_Dw_Qemw<55RU(} zTQmK&`8H$0tw|^rBjgq|D#t-AntSS^9ugL+(E3|`>FV`|BHFcSVV0;gY=Si!_0;_d zO=4LHGVRs*A<08i?Yi3Bzb@RfIA$|1`{)_{w)a;nOLA^g4jT{z;R(e;8vq?yTzi5s zW46G@N(%?@t^~mxDAH>#?60RYBrhFx6fU%adAc0 zZWhzuYk z7W-EJpmO)L(lA+z8>Nv0kU6@1@Pxknb|GGwUyPe@YF2R2jPc_BQ*66iU>=B~y3RCU z${5ivE7mI2iYAw=47{*6I$~te5jN%zirlp&6#;7jSr-GsBpsN90~svLb#V3oOVwlK zK--B$Fa`6-Y0G3DaCu|r&62==RL*C8c&i;NJSN)aJE^%_j>CK91*ljDpsVWp@Nf~# z)gW#w&c0=YbyaGL%W%k2q042$!Y8FvTIs#5sJON^$&#}!Xtpb$0fbel22OuiM7E%R zZQa*g`?D6IVS*4$X@tfDo*xz4CBX*3+h?zMeH6o=3RnPPM%m000ML{xjULP zK?f3#>|>cW76rzY&+j?hJj?}d7?yc^_S3h+CM=vQP3Y4N!vq44V06@sKvwe5R3X#> zK@ex2+3^SE)w9?t{|7xZ3)-9}FL_Q%Ua}0PR>IO7_KvxB^t3LaPcjB09@cFzoR&1O zuK*q}AEW$sk+G_v7_Tjsstfuu$t7V^T{M4?cwY5A(QhXVM- zve4OI4`|`Fcmb|}0x)@4s$k@t=@R1NLD2DXYU^GNxn4&U3|$>szeNpe36iHZ-d{r| z34;f5I{=t}G23u#!%mI0F%|X!Xgj5J7qphtK<6`$pnj7^iNFQJzi*ztsJFIw1-b$P zz;;~|`9o$-5L>5Ff}kk?5{$FE4r-~4rNY{KzkU9VYRZ!5L*RVQ_JVFgz5 zv`lyaOp_Kp9YRhjtZJ&MZ@wnzh8{TWAxm*R_f(cX!-tc|{Vmo42u+)?HcOv}h6y|L zd;lX3TiwdMq`z_Uya9UdTsbE+6YTloTjhw^(sn4jBy!~g-rdr($^2|`d* zF1nIygp~m3cpX^ccl0xlN@P(HEfTf8Uw)^8MpP>2fznQF=Z?)*5GJ*s-+M%R>5mK@ zwCclB9xy-T$oJdT6>c`h`djWcqq4>VVnP8jVCq;=e77VFTA}O8s_={ZkLfB4OK_M+ z;f*;WP^{jX_Aez2;iZg!P-L}Y06JCpEa$m)(-0LGYgvK6=;{sQt<1}Mu#RmzcjQB+ zUU2ccG4t00T5?PnEMf(KVC7(K7GJ+EKmo6NJ>#rCb;=mg1B3bsEbGI#pbLAC=-@%z z28&xlL&d>=|DhxNr{Gf7+;Vy7yjsO?fc= zr}~uSo~&y;_4&^-Lpvzs-3sum#Hv}(0t+o65pFMeDf5)m41>eIEGF(Nd~ z923>X6yG)$Pi!BLCw1tA%cN2p&{xP`S3a>!9C8r+f2 zaIY0`;-Y6Fi_1$b!(-!yjMT4tdu5{mcWi+4`g_OKD->v__>TA+&n!?q_dl&!_S!p5pKn|rQs1aRgO#)X4RK$XEYzgZ zs1dM$I)fe||6~@5AUqW1^DsW&EEEbYt{E&Vn=K>N`XB8sn64kM^ObZu9bz;ZX|YO= zJ~T*$z+|K3z@Z+l*GA%FTS^CNi-7M|%5l10FbiT=d#!D?)ieWc@(2-)&5`f&%RRQh)*hW@C|r0s&8_ zzXzUG3GL$X8Dl2s490t-Yw>N{wK~aZaIX}@=8x7YUYI$%xpB2odCz@2lS-{(e3`}@ zNv5Yi)x|0+7#SMg3{XsDw5e86k7{*V1l*oTXzO-Cf1W)lgd_yYBdZoKQ+Bgs$%yKk z+{03^&d$Ht{J9$cJHj$x?$l@)(z9nZcYXOy1JoMXDoJi*uv0^X@}K7JyUJP=~^Zh@*V~yrF&j8=&Twm6J_rrF=Gt zs`Ycl{nFxs+0>}2)#)I{L&pppY8l+EuB$~M78{;2z-b4|je8tR z>X3*->l6&B!LfsSr5N~jejax6$gvivvvRI-*3SjeQgmWdEco)1^HdKcbjDv?`F0pI zBgj|16SjKkdrj7{TCqsP``ft5+6Y;w>5(xLbTh|J)V=cQ`=LkAofa;A?j_ae0Ymg* zAu@ApR2$QGySG_};-G9ZZPYl+v{7OPOjOpE{k6ORlbi2#dwi)pVo0A*myU@zWYJbvZS$fI8d%9fDDD?1v7c46mE9d#L8gom!x!8x zI>uC4TZ6v4?lT$rc|}trQeIt!9ypyLI(GhyFz3!~jQk6gU;g+_$d*sOvUEMen6GvF zjXSrosY~WXzBNy-f>tf!F=FApUO;DAu!vOrW`bJ#-sp<`JpzzT&8h&?SKBs9H}2go zffjr6^M^A}il7+W+BvS}-NZipW{nIi>4rVqn>%4Z6*X0;y+U%MN{K>)0l5>#DxF@3 z*_TXfT+_ionTHds?MT|g9u!5ZEw|<_$2lCmtBh%tRPLAbEV?hgmR41@=5V9XW zIgQrOYZj1A#c59d{a$GUkbE~dx>(K%GFNgJvR*o@AMF;9>P2x7vODfeqX|B*xL__G zWS`_dj{AI?1#?MB;K1h%c?CeK@gRtE$LxWRZtLe&3+T$lau71V*5?iQyzYWsS>Td` zkXi6~Gw$-ip(6{-^UHB}R1RrAnbk`*ZJBV@*z+(b@i~`UT z2!jnoxr^_WsqirlKu=t9Fn}m`<+1`mPpu({I0KK(Fv{J0A56A-tN;+?Xwti@ z>(H>#D$3owW=C~ZCc?*f0KEkw;dsUXDfjT&*ajY}0Hhm4CICs-Ys*;*9xDL^wYC^ta>z2427bXqB^N z;@AkI+)1Ypo52e>0EwcqW+4-Slv8L;3k2u_9zd&HSv=DpK+0X1e-UWl1qFaaxx11p z9bmdU(I+iHp$kd?iDL4y!f8PO9WU4cWD1mNK?a*WaRB-NOb#?ooH%jf#EBCpPMkP# c;xR-24=(@B_{G005u}1^@s6i_d2*000$8Nkl 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 D^_^wz literal 0 HcmV?d00001 diff --git a/docs/sql/decorate-update-partner-centers-2026.sql b/docs/sql/decorate-update-partner-centers-2026.sql new file mode 100644 index 0000000..0115642 --- /dev/null +++ b/docs/sql/decorate-update-partner-centers-2026.sql @@ -0,0 +1,33 @@ +-- ============================================================================== +-- 恒链数通商城 - 首页金刚区装修调整与服务中心待开发页面配置 +-- 归档时间: 2026-09-19 +-- 适用平台: WechatOfficialAccount, WechatMiniProgram, H5, App +-- 说明: +-- 1. 在 hla_shopro_data_richtext 插入/更新待开发富文本记录(ID: 5) +-- 2. 更新装修模板(template_id: 5 / page_id: 8 以及备用模板 template_id: 2 / page_id: 2) +-- 将金刚区 menuButton 调整为:市级运营中心、市级合伙人、省级服务中心、省级合伙人、大区分公司 +-- ============================================================================== + +-- 1. 插入待开发富文本记录 (ID: 5) +INSERT INTO `hla_shopro_data_richtext` (`id`, `title`, `content`, `createtime`, `updatetime`) +VALUES ( + 5, + '待开发,敬请期待', + '
⏳
待开发,敬请期待
该业务板块正在加速筹备建设中
更多专属权益即将上线
', + UNIX_TIMESTAMP(), + UNIX_TIMESTAMP() +) +ON DUPLICATE KEY UPDATE + `title` = VALUES(`title`), + `content` = VALUES(`content`), + `updatetime` = VALUES(`updatetime`); + +-- 2. 装修模板更新说明: +-- 装修模板数据以 JSON 存储在 `hla_shopro_decorate_page`.`page` 字段中。 +-- 已通过运维安全执行脚本完成原子更新,备份文件存放于服务器: +-- /www/wwwroot/henglian.gynhc.com/backups/decorate_page_backup_20260919.json + +-- 回滚说明: +-- 若需回滚原金刚区配置,可执行: +-- python3 scripts/generate_banners.py 重新生成原图标 +-- 或读取 backups/decorate_page_backup_20260919.json 恢复 page 字段。 diff --git a/scripts/generate_banners.py b/scripts/generate_banners.py index f8f91ab..1180a18 100644 --- a/scripts/generate_banners.py +++ b/scripts/generate_banners.py @@ -289,6 +289,51 @@ def build_menu_icons(): build_menu_icons() +def build_partner_centers_menu_icons(): + import os + font_menu = ImageFont.truetype(font_title, 42) + font_sub = ImageFont.truetype(font_text, 22) + font_sub_3 = ImageFont.truetype(font_text, 19) + + menus = [ + ("menu_city_center.png", "市级", "运营", (25, 45, 80), (230, 200, 130), False), + ("menu_city_partner.png", "市级", "合伙", (85, 25, 30), (225, 185, 120), False), + ("menu_province_center.png", "省级", "服务", (20, 55, 45), (145, 215, 180), False), + ("menu_province_partner.png", "省级", "合伙", (65, 28, 68), (240, 195, 150), False), + ("menu_region_branch.png", "大区", "分公司", (32, 30, 26), (245, 210, 135), True), + ] + + out_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), '../public/uploads/decorate')) + os.makedirs(out_dir, exist_ok=True) + + for filename, t1, t2, bg_c, fg_c, is_3 in menus: + size = (160, 160) + img = Image.new('RGBA', size, (0, 0, 0, 0)) + d = ImageDraw.Draw(img) + + # Soft background circle with border + d.ellipse([6, 6, 154, 154], fill=(*bg_c, 245), outline=(*fg_c, 210), width=3) + d.ellipse([14, 14, 146, 146], outline=(*fg_c, 85), width=1) + + # Text 1 + bbox1 = d.textbbox((0, 0), t1, font=font_menu) + w1 = bbox1[2] - bbox1[0] + x1 = (160 - w1) / 2 + d.text((x1, 40), t1, font=font_menu, fill=(*fg_c, 255)) + + # Text 2 + cur_sub_font = font_sub_3 if is_3 else font_sub + bbox2 = d.textbbox((0, 0), t2, font=cur_sub_font) + w2 = bbox2[2] - bbox2[0] + x2 = (160 - w2) / 2 + y2 = 98 if is_3 else 96 + d.text((x2, y2), t2, font=cur_sub_font, fill=(245, 245, 245, 230)) + + img.save(os.path.join(out_dir, filename)) + print(filename, "generated at", out_dir) + +build_partner_centers_menu_icons() + def build_trust_bar(): size = (1420, 110) img = Image.new('RGBA', size, (0, 0, 0, 0)) diff --git a/tests/verify_decorate_partner_centers_spec.js b/tests/verify_decorate_partner_centers_spec.js new file mode 100644 index 0000000..14c4861 --- /dev/null +++ b/tests/verify_decorate_partner_centers_spec.js @@ -0,0 +1,146 @@ +const fs = require('fs'); +const path = require('path'); +const { execSync } = require('child_process'); + +let passed = 0; +let failed = 0; + +function assert(condition, testName, detail = '') { + if (condition) { + console.log(` [PASS] ${testName}`); + passed++; + } else { + console.error(` [FAIL] ${testName} - ${detail}`); + failed++; + } +} + +console.log("========================================================"); +console.log(" 首页金刚区装修调整与服务中心待开发页面规范化测试"); +console.log("========================================================\n"); + +// 1. 静态资源完整性验证 +console.log("一、静态资源完整性验证:"); +const expectedIcons = [ + 'menu_city_center.png', + 'menu_city_partner.png', + 'menu_province_center.png', + 'menu_province_partner.png', + 'menu_region_branch.png' +]; + +expectedIcons.forEach(iconName => { + const iconPath = path.resolve(__dirname, '../public/uploads/decorate', iconName); + assert(fs.existsSync(iconPath), `图标文件存在: ${iconName}`); + if (fs.existsSync(iconPath)) { + const stats = fs.statSync(iconPath); + assert(stats.size > 1000, `图标大小正常 (${stats.size} 字节): ${iconName}`); + } +}); + +// 2. 生成脚本与前端代码验证 +console.log("\n二、生成脚本与前端代码优化验证:"); +const bannerScript = path.resolve(__dirname, '../scripts/generate_banners.py'); +const bannerContent = fs.readFileSync(bannerScript, 'utf-8'); +assert(bannerContent.includes('build_partner_centers_menu_icons'), 'generate_banners.py 包含新业务中心徽标生成函数'); +assert(bannerContent.includes('menu_city_center.png') && bannerContent.includes('menu_region_branch.png'), + 'generate_banners.py 包含5个新徽标配置定义'); + +const menuButtonVue = path.resolve(__dirname, '../uniapp/sheep/components/s-menu-button/s-menu-button.vue'); +const menuButtonContent = fs.readFileSync(menuButtonVue, 'utf-8'); +assert(menuButtonContent.includes('font-size: 24rpx;'), 's-menu-button.vue 优化了文字大小为 24rpx,完美适配 5 列 6 字符单行排版'); + +const richtextVue = path.resolve(__dirname, '../uniapp/pages/public/richtext.vue'); +const richtextContent = fs.readFileSync(richtextVue, 'utf-8'); +assert(richtextContent.includes('defaultPendingContent') && richtextContent.includes('待开发,敬请期待'), + 'richtext.vue 增加了待开发默认降级与优雅展示兜底'); + +const sqlFile = path.resolve(__dirname, '../docs/sql/decorate-update-partner-centers-2026.sql'); +assert(fs.existsSync(sqlFile), '已归档 SQL 迁移脚本 docs/sql/decorate-update-partner-centers-2026.sql'); + +// 3. 业务逻辑与参数模拟测试 +console.log("\n三、前端业务跳转与标题回显逻辑模拟测试:"); +const expectedItems = [ + { name: '市级运营中心', sub: '运营', file: 'menu_city_center.png' }, + { name: '市级合伙人', sub: '合伙', file: 'menu_city_partner.png' }, + { name: '省级服务中心', sub: '服务', file: 'menu_province_center.png' }, + { name: '省级合伙人', sub: '合伙', file: 'menu_province_partner.png' }, + { name: '大区分公司', sub: '分公司', file: 'menu_region_branch.png' }, +]; + +expectedItems.forEach(item => { + const targetUrl = `/pages/public/richtext?id=5&title=${item.name}`; + const [page, query] = targetUrl.split('?'); + const params = new URLSearchParams(query); + assert(page === '/pages/public/richtext', `路由路径正确: ${item.name}`); + assert(params.get('id') === '5', `指向待开发富文本记录 ID 5: ${item.name}`); + assert(params.get('title') === item.name, `导航栏标题参数正确回显: ${item.name}`); +}); + +// 4. API 模拟测试(正常场景、业务失败场景、参数错误场景) +console.log("\n四、线上 API 模拟测试(正常/业务失败/边界条件):"); + +try { + const remoteScript = `#!/bin/bash +curl -s -k --resolve henglian.gynhc.com:443:127.0.0.1 -H 'platform: WechatMiniProgram' 'https://henglian.gynhc.com/addons/shopro/index/init' > /tmp/api_test_init.json +curl -s -k --resolve henglian.gynhc.com:443:127.0.0.1 'https://henglian.gynhc.com/addons/shopro/data.richtext?id=5' > /tmp/api_test_rich5.json +curl -s -k --resolve henglian.gynhc.com:443:127.0.0.1 'https://henglian.gynhc.com/addons/shopro/data.richtext?id=999999' > /tmp/api_test_notfound.json +curl -s -k --resolve henglian.gynhc.com:443:127.0.0.1 'https://henglian.gynhc.com/addons/shopro/data.richtext' > /tmp/api_test_empty.json +`; + + fs.writeFileSync('/tmp/local_test_api.sh', remoteScript); + execSync(`sshpass -p 'Bjsslxz1' scp -o StrictHostKeyChecking=no /tmp/local_test_api.sh root@118.184.172.94:/tmp/test_api.sh`); + execSync(`sshpass -p 'Bjsslxz1' ssh -o StrictHostKeyChecking=no root@118.184.172.94 "bash /tmp/test_api.sh"`); + + + const fetchCmd = `sshpass -p 'Bjsslxz1' ssh -o StrictHostKeyChecking=no root@118.184.172.94 "cat /tmp/api_test_init.json && echo '===SEP===' && cat /tmp/api_test_rich5.json && echo '===SEP===' && cat /tmp/api_test_notfound.json && echo '===SEP===' && cat /tmp/api_test_empty.json"`; + const fetched = execSync(fetchCmd, { timeout: 20000 }).toString(); + const parts = fetched.split('===SEP===').map(p => p.trim()); + + const initRes = JSON.parse(parts[0]); + const richtextRes = JSON.parse(parts[1]); + const notFoundRes = JSON.parse(parts[2]); + const emptyIdRes = JSON.parse(parts[3]); + + assert(initRes.code === 1, '正常场景: index/init 接口返回 code=1 成功'); + + const homeComp = initRes.data?.template?.home?.data || []; + const menuBtn = homeComp.find(c => c.type === 'menuButton'); + assert(!!menuBtn, '正常场景: 首页装修模板中包含 menuButton 组件'); + + const list = menuBtn?.data?.list || []; + assert(list.length === 5, `正常场景: menuButton 包含 5 个金刚区项目(实际 ${list.length} 个)`); + + const titles = list.map(item => item.title?.text); + const expectedTitles = ['市级运营中心', '市级合伙人', '省级服务中心', '省级合伙人', '大区分公司']; + assert(JSON.stringify(titles) === JSON.stringify(expectedTitles), + `正常场景: 金刚区 5 个项目标题完全匹配需求: ${titles.join(' | ')}`); + + const allUrlsCorrect = list.every((item, idx) => item.url === `/pages/public/richtext?id=5&title=${expectedTitles[idx]}`); + assert(allUrlsCorrect, '正常场景: 5 个项目的跳转链接均正确绑定富文本待开发页及对应标题'); + + // 场景 2:正常场景 - 富文本待开发数据接口 + assert(richtextRes.code === 1, '正常场景: data.richtext?id=5 接口返回 code=1 成功'); + assert(richtextRes.data?.title === '待开发,敬请期待', '正常场景: 富文本标题为“待开发,敬请期待”'); + assert(richtextRes.data?.content.includes('待开发,敬请期待'), '正常场景: 富文本内容包含“待开发,敬请期待”卡片'); + + // 场景 3:业务失败场景 - 请求不存在的富文本 ID + assert(notFoundRes.code === 0, '业务失败场景: 请求不存在的 id=999999 返回 code=0 业务失败拦截'); + assert(!!notFoundRes.msg, `业务失败场景: 返回友好提示信息 (${notFoundRes.msg})`); + + // 场景 4:参数边界场景 - 不传任何 ID + assert(emptyIdRes.code === 0, '参数边界场景: 缺失 id 参数返回 code=0 并受全局异常/参数校验保护'); + + +} catch (err) { + console.error("API 测试执行异常:", err.message); + failed++; +} + +console.log("\n========================================================"); +console.log(`测试完成: 通过 ${passed} 项, 失败 ${failed} 项`); +console.log("========================================================"); + +if (failed > 0) { + process.exit(1); +} diff --git a/uniapp/pages/public/richtext.vue b/uniapp/pages/public/richtext.vue index c44a0fc..961fb26 100644 --- a/uniapp/pages/public/richtext.vue +++ b/uniapp/pages/public/richtext.vue @@ -14,16 +14,34 @@ content: '', }); + const defaultPendingContent = `
+
+ ⏳ +
+
待开发,敬请期待
+
该业务板块正在加速筹备建设中
更多专属权益即将上线
+
`; + async function getRichTextContent(id) { - const { code, data } = await sheep.$api.data.richtext(id); - if (code === 1) { - state.content = data.content; - if (state.title === '') { - state.title = data.title; - uni.setNavigationBarTitle({ - title: state.title, - }); + if (!id) { + state.content = defaultPendingContent; + return; + } + try { + const { code, data } = await sheep.$api.data.richtext(id); + if (code === 1 && data?.content) { + state.content = data.content; + if (state.title === '') { + state.title = data.title; + uni.setNavigationBarTitle({ + title: state.title, + }); + } + } else { + state.content = defaultPendingContent; } + } catch (e) { + state.content = defaultPendingContent; } } onLoad((options) => { diff --git a/uniapp/sheep/components/s-menu-button/s-menu-button.vue b/uniapp/sheep/components/s-menu-button/s-menu-button.vue index db5c4d4..4f4fcc7 100644 --- a/uniapp/sheep/components/s-menu-button/s-menu-button.vue +++ b/uniapp/sheep/components/s-menu-button/s-menu-button.vue @@ -276,8 +276,11 @@ } .menu-title { - font-size: 30rpx; + font-size: 24rpx; color: #333; + text-align: center; + white-space: nowrap; + line-height: 1.2; } }