From 59837cf09c53c4b6581694bd9b3eb7d6555dcf1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=85=9C?= <1871263099@qq.com> Date: Sat, 3 Oct 2026 12:37:03 +0800 Subject: [PATCH] feat: add Douyin monthly pay and East Money catalog icons --- apps/api/assets/icons/35.png | Bin 0 -> 1134 bytes apps/api/assets/icons/36.png | Bin 0 -> 1632 bytes apps/api/assets/icons/sources.json | 12 ++++++++++++ apps/api/scripts/expand-icons.py | 7 ++++++- docs/acceptance.md | 4 ++++ docs/update-icons-2026-10-03.md | 19 +++++++++++++++++++ update.md | 4 +++- 7 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 apps/api/assets/icons/35.png create mode 100644 apps/api/assets/icons/36.png create mode 100644 docs/update-icons-2026-10-03.md diff --git a/apps/api/assets/icons/35.png b/apps/api/assets/icons/35.png new file mode 100644 index 0000000000000000000000000000000000000000..856c26c166a83b01cb85e9edd051efb33399acf1 GIT binary patch literal 1134 zcmV-!1d;oRP)p` zAl`^b=JO!_6rn6?i_e!<|Gj!nB=hPup?r4veZky73E~ZObRNaO{|8}i)q92UcX;oc z1T^bFp#Y)->m~rr>JZvdd5W1;A-SXWsyhG^_kv;rNPy_}iYyCIXi>*`O(b*wAQTqK z920h!kSe@)-oTrtLYfp(a~4`-X7zVA4>>b90VHewJBzX)-dF)7Lb>zaIWp59v@EFzSK;KlO8_S`*EPtJc8a(DQ1sD!3 zk4a!T0_b!)(SK$nb0a{$b*CHw1dTGxRC+W7sNf7}|NdbEP;aQQ%y&u!APBQ$v2>Cj zu@Por00`RQ@Pqtw`$jc(-Xk;tL4#r6wimI|9$^RwLXBFmuf6Cm99Y-&4MrFOvL@P{ zX~;i74i?yjB|y;NH4t(X;teb=0M+8`AB;c%x`uT;{zQde8)odnOAr7e3B4xF*oBv1 z0;mnMX7ut8MQ{VujAq{FUBVC$4DBue)h3@=t`?RffIxg-9iJM$*!HM z4#mbHHq4G1nKVEe>zoc8`trL0K%L`NBn6w9=1d+s*v`iQ7W@P-eycgIO%_(lUyd4H zglVq4XSDnU<3)*v7GatT?ddDSBQ3$pCN7$(nw^?NwfFP_!j|D}HP?n1!YQ1U0cWc< zdVd|l)m6@8Tn1c0LN0?On%l!;+sn@2m==;#R=g$+D3yT2ehM>+qXnky*C?hzsbly>eB@&Sq(j1@p>$6#I8)fHVZ zblbYm%o?Dy<5iTfz*B5PaSABCGVC>hE}(Sn4^*&*yS{THUH||907*qoM6N<$g0wXA AssI20 literal 0 HcmV?d00001 diff --git a/apps/api/assets/icons/36.png b/apps/api/assets/icons/36.png new file mode 100644 index 0000000000000000000000000000000000000000..02a812b3d3d4e84c57fbeba780bff7d35583e7ff GIT binary patch literal 1632 zcmV-m2A}zfP)Yn^k? zoI7*wz31K;XYPj0y>~x^wCO-k2w{Cwaj1x>p)s;Vm$_MI>yjoHysYp$F$yqwWy}U zUWGGQ%?!>6%RgbQ0v{1|(J~Kfw4K9t`naIyVGZt}#n1FXg)>;J<#iZLiyc}n+2HXI zcpfcU!?w$N4%EX%bXZHLIw}$qNgk#bY&8uo(}lFxZ6(o%)fh*MU&FFvr(K^}i%V(n z1TB71$psS!QgqnHIXF86cC`2}s+YxtDnNrBS}uJ=ZR#e z{$ey7c6Dfbf)4Yv-ePG~7c6Qc>u_c|xO((s2BXA`(%`0WyWdqk3nb8#~*2NSk?wiB?$KDoO^4Q?$`l1G<+DM6k9JwA!Gznz z$;r8O9LCV$!=ftZ<7CzZ(_%IajwAvbtds_)x+v8aRRM#MIj}yiR8#Dy8e=DCU_=PK zBCqkWSR*>TzbsIv*U(0}w{t)zqdyJqr@`+t3awzed)w*f?kKLS#T4DKf)W;kQEbrm+(aLD(PBsrXtf@!<#gDWN~$(TFQ1GY zB2kBY_8?fqY5{&BQNgp0bzsN0(PD1=UX9%V3u*CfL4U#)(A{i&cOyoraVWeSE5y-W zkmG0sD{P~~mo#{pKD?wi19gNPwv-HNqq!u$n;Wx&4MoN|rO`@gF2z?pssI*CBq|X1 zu_I)-b$w~DEc8=L2epxO-;{TX5Oy35_7njYfB6<^JcJhWc>^w%$TbNv2iU^{QP@*H z>`wX^tK&7GFD;%}=NSeJd5OAlOwiTW~AzHj_ud{R|~G?q44(2|m1bpnaw zEWR%Ju=xu6O8kt_gQt3#&cK{t4W^b1tP_blT3fOiUmrI%tiyO3e4h$75Y7)}zXGWN zae4)&)!W9banSxVF_tEezmSxJ7of(H^*5TZUJpuh(Ni5rwlPPt84RMu`>A2GuRj*^ z%Yuz2c6hj8SRd4_%D(bM{X8r!!`Il=qT5pV*0wPF3{|kL#iyx(vpbf-AoNzE#Z#$Gy7s#pAHKj0znzUlDk3rXZ{yEA zMyG`yrl8Ui<-y$HaKan#%CeoD)14^MdiGzW0Co>OT!>0e^zdjH(8}Km_w_bUszeWu e&|rPq0P}xCwYY6SZ|_k60000 1: brands = [item for item in brands if item[0] in sys.argv[1:]] @@ -14,7 +15,7 @@ def get(url): failed = [] for name, site in brands: if any(v['name'] == name for v in catalog): continue - urls = {'币安 Binance': ['https://bin.bnbstatic.com/static/images/common/favicon.ico', 'https://bin.bnbstatic.com/static/images/common/favicon.png'], '中银香港': ['https://www.bochk.com/dam/bochk/desktop/top/favicon.ico', 'https://www.bochk.com/favicon.ico'], '大象银行 EleBank': ['https://is1-ssl.mzstatic.com/image/thumb/Purple211/v4/d4/bc/60/d4bc6004-3898-c9c3-3571-f3ffe4b46b48/Bank-Airstar-0-0-1x_U007epad-0-1-sRGB-85-220.png/512x512bb.jpg']}.get(name, []) + urls = {'抖音月付': ['https://p26-infras.byteimg.com/static-assets/be18bb89d2ceeec6407aae38dc5e894c.png~tplv-49obo7mizy-png75.png'], '东方财富': ['https://g1.dfcfw.com/g4/202307/20230731180250.png'], '币安 Binance': ['https://bin.bnbstatic.com/static/images/common/favicon.ico', 'https://bin.bnbstatic.com/static/images/common/favicon.png'], '中银香港': ['https://www.bochk.com/dam/bochk/desktop/top/favicon.ico', 'https://www.bochk.com/favicon.ico'], '大象银行 EleBank': ['https://is1-ssl.mzstatic.com/image/thumb/Purple211/v4/d4/bc/60/d4bc6004-3898-c9c3-3571-f3ffe4b46b48/Bank-Airstar-0-0-1x_U007epad-0-1-sRGB-85-220.png/512x512bb.jpg']}.get(name, []) if name == '微众银行 WeBank': try: script = get('https://tctp.tctpwebankcdn.net/owb-res/owb-res/assets/mainGenerator.811f2078.js').decode('utf-8') @@ -32,6 +33,10 @@ for name, site in brands: try: raw = get(url) im = Image.open(io.BytesIO(raw)).convert('RGBA') + if name == '东方财富': + # Official horizontal logo: retain its standalone symbol for square account cards. + im = im.crop((int(im.width * 40 / 256), 0, int(im.width * 80 / 256), im.height)) + if im.getbbox(): im = im.crop(im.getbbox()) im.thumbnail((256,256)) out = io.BytesIO(); im.save(out, 'PNG'); png = out.getvalue() file = str(len(catalog) + 1).zfill(2) + '.png' diff --git a/docs/acceptance.md b/docs/acceptance.md index 74441ae..8face57 100644 --- a/docs/acceptance.md +++ b/docs/acceptance.md @@ -74,3 +74,7 @@ ## 2026-10-03 分组排序 32 项单元测试、13 项真实 MySQL 集成检查、前后端类型检查及生产构建通过。浏览器确认上下移动、保存与刷新持久化,以及账户选择弹窗同序显示。14 个迁移状态最新,9 张表与 89 个字段均有注释;ZIP 新旧排序字段兼容及用户隔离已验证。详见 [更新说明](update-group-order-2026-10-03.md)。 + +## 2026-10-03 图库补充 + +内置图库扩充为 36 项,新增“抖音月付”和“东方财富”。真实数据库与已认证接口验证名称搜索、共享范围、图片读取和透明 PNG 规范;已有财务数据保持不变。资源来源与验收见 [更新说明](update-icons-2026-10-03.md)。 diff --git a/docs/update-icons-2026-10-03.md b/docs/update-icons-2026-10-03.md new file mode 100644 index 0000000..77afda1 --- /dev/null +++ b/docs/update-icons-2026-10-03.md @@ -0,0 +1,19 @@ +# 2026-10-03 抖音月付与东方财富图标 + +内置图库新增独立命名的“抖音月付”和“东方财富”,现共 36 项。可在账户新增/编辑的图标选择器或设置页图库按名称搜索并选择,复用现有图标关联和完整备份逻辑。 + +“抖音月付”采用[抖音支付官网](https://www.douyinpay.com/)公开的抖音品牌标识,并非另行绘制的月付专属标识。“东方财富”采用[东方财富官方产品页](https://about.eastmoney.com/about/product)的品牌符号,从横向标识中保留适合账户卡片的独立图形。公开资源地址和原始内容 SHA-256 记录在 apps/api/assets/icons/sources.json,expand-icons.py 同步添加可复现来源。 + +图像均保存为静态 PNG,初始化时复用现有尺寸限制、透明处理和固定内置 ID。无需数据库结构变更;已运行 icons:seed,保留用户上传图标与财务记录。 + +## 验收 + +- 两个原图已目视检查;透明静态 PNG 均小于 256 × 256。 +- 专用临时用户通过已认证 /api/icons?q=名称 搜索到正确共享条目;两个 /api/icons/:id/image 均返回 200 和规范 PNG,透明通道保留。 +- 真实数据库核验 36 个固定内置 ID 均存在并处于共享状态。临时用户及脚本已清理。 +- 前一轮完整回归保持 32 项单元测试、13 项 MySQL 集成检查、类型检查和构建通过;本次仅增加图库资源,补充上述图库接口专项验收。 + +完成时间:2026-10-03 12:36。仅本地 Git 提交,不 push。 + +![抖音月付图标](../apps/api/assets/icons/35.png) +![东方财富图标](../apps/api/assets/icons/36.png) diff --git a/update.md b/update.md index 1bde619..69081c5 100644 --- a/update.md +++ b/update.md @@ -34,7 +34,7 @@ - ~~备份功能出现问题~~ — 已完成并验证:2026-10-03 11:22 - ~~负债(如信用卡)也可以显示为正数变成存款~~ — 已完成并验证:2026-10-03 12:05 - ~~分组可以排序~~ — 已完成并验证:2026-10-03 12:27 -- “抖音月付”“东方财富”添加图标 +- ~~“抖音月付”“东方财富”添加图标~~ — 已完成并验证:2026-10-03 12:36 验证与部署边界见 [更新说明](docs/update-2026-10-02.md)。 @@ -47,3 +47,5 @@ 负债账户溢缴验收完成:2026-10-03 12:05。30 项单元测试、12 项真实 MySQL 集成检查、类型检查和构建通过;支持信用卡等负债账户正数存款显示及总资产分类,已有数据符号保留。详见 [更新说明](docs/update-credit-balance-2026-10-03.md)。复查发现新增“分组可以排序”,继续处理。 分组排序验收完成:2026-10-03 12:27。32 项单元测试、13 项真实 MySQL 集成检查、类型检查与构建通过;14 个迁移已应用,9 张表与 89 个字段注释已核验。账户页、筛选与选择弹窗顺序同步并持久化,备份恢复包含分组顺序。详见 [更新说明](docs/update-group-order-2026-10-03.md)。 + +图库补充验收完成:2026-10-03 12:36。新增“抖音月付”和“东方财富”图标,36 项内置图库已初始化,两个图标的已认证搜索和图片读取通过。详见 [更新说明](docs/update-icons-2026-10-03.md)。