From 8e2a27ce2eeb6c18c7f9ecb0e5cfd2a177353881 Mon Sep 17 00:00:00 2001 From: wikiboss Date: Fri, 9 Oct 2026 17:09:10 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=86=E8=A7=89=E4=B8=8EUX=E4=BD=93=E9=AA=8C?= =?UTF-8?q?=E5=8D=87=E7=BA=A7=EF=BC=9A=E5=85=A8=E7=AB=99=E9=85=8D=E5=9B=BE?= =?UTF-8?q?=E5=85=A8=E9=9D=A2=E9=87=87=E7=94=A8=E7=8E=B0=E4=BB=A3=E4=B8=AD?= =?UTF-8?q?=E5=BC=8F=E7=A7=91=E6=8A=80=E9=AB=98=E7=BA=A7=E6=8A=BD=E8=B1=A1?= =?UTF-8?q?=E7=9F=A2=E9=87=8F=E4=BD=93=E7=B3=BB=E5=B9=B6=E8=A1=A5=E5=85=85?= =?UTF-8?q?=E6=8A=80=E6=9C=AF=E6=96=87=E7=AB=A0=E6=99=BA=E8=83=BD=E5=B0=81?= =?UTF-8?q?=E9=9D=A2Fallback?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../view/web/official_home/index.html | 11 +- .../images/articles/article_ai_agent.svg | 26 +- .../images/articles/article_cache.svg | 63 ++ .../images/articles/article_cross_app.svg | 17 +- .../images/articles/article_erp_bom.svg | 35 +- .../images/articles/article_microservice.svg | 6 +- .../images/articles/article_mysql_page.svg | 71 +++ .../images/articles/article_pos_offline.svg | 26 +- .../images/articles/article_redis_split.svg | 71 +++ .../articles/article_security_whitepaper.svg | 23 +- .../articles/article_southwest_digital.svg | 31 +- .../images/articles/article_tdd_standards.svg | 28 +- .../images/articles/article_xxl_job.svg | 69 ++ .../images/showcases/case_catering.svg | 59 +- .../images/showcases/case_distrib.svg | 69 +- .../images/showcases/case_gov_agent.svg | 49 +- .../images/showcases/case_manufacture.svg | 53 +- .../official/images/showcases/product_erp.svg | 65 +- .../images/showcases/product_mall.svg | 78 ++- .../official/images/showcases/product_pos.svg | 55 +- .../images/showcases/product_saas.svg | 66 +- .../images/showcases/service_agent.svg | 78 +-- .../official/images/showcases/service_app.svg | 73 ++- .../images/showcases/service_middle.svg | 104 +-- tests/generate_article_covers.py | 266 ++++---- tests/generate_showcases.py | 595 ++++++++++-------- tests/test_advanced_abstract_visuals.py | 135 ++++ 27 files changed, 1400 insertions(+), 822 deletions(-) create mode 100644 public/assets/addons/official/images/articles/article_cache.svg create mode 100644 public/assets/addons/official/images/articles/article_mysql_page.svg create mode 100644 public/assets/addons/official/images/articles/article_redis_split.svg create mode 100644 public/assets/addons/official/images/articles/article_xxl_job.svg create mode 100644 tests/test_advanced_abstract_visuals.py diff --git a/addons/official/view/web/official_home/index.html b/addons/official/view/web/official_home/index.html index abe6a66..ffcd6be 100644 --- a/addons/official/view/web/official_home/index.html +++ b/addons/official/view/web/official_home/index.html @@ -852,7 +852,16 @@ {if !empty($art['image'])} {$art['title']} {else/} -
纳海川技术洞察
+ {php} + $cover_fallbacks = [ + 0 => '/assets/addons/official/images/articles/article_cache.svg', + 1 => '/assets/addons/official/images/articles/article_mysql_page.svg', + 2 => '/assets/addons/official/images/articles/article_xxl_job.svg', + 3 => '/assets/addons/official/images/articles/article_redis_split.svg', + ]; + $cover_src = isset($cover_fallbacks[$idx]) ? $cover_fallbacks[$idx] : '/assets/addons/official/images/articles/article_microservice.svg'; + {/php} + {$art['title']} {/if}
diff --git a/public/assets/addons/official/images/articles/article_ai_agent.svg b/public/assets/addons/official/images/articles/article_ai_agent.svg index e087b6e..7d977da 100644 --- a/public/assets/addons/official/images/articles/article_ai_agent.svg +++ b/public/assets/addons/official/images/articles/article_ai_agent.svg @@ -18,8 +18,8 @@ - - + + @@ -28,7 +28,7 @@ - + @@ -48,15 +48,17 @@ - - - - - - - - - + + + + + + + + + + + \ No newline at end of file diff --git a/public/assets/addons/official/images/articles/article_cache.svg b/public/assets/addons/official/images/articles/article_cache.svg new file mode 100644 index 0000000..50c7f9a --- /dev/null +++ b/public/assets/addons/official/images/articles/article_cache.svg @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 盾 + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/assets/addons/official/images/articles/article_cross_app.svg b/public/assets/addons/official/images/articles/article_cross_app.svg index 496d118..90ab9c5 100644 --- a/public/assets/addons/official/images/articles/article_cross_app.svg +++ b/public/assets/addons/official/images/articles/article_cross_app.svg @@ -18,8 +18,8 @@ - - + + @@ -28,7 +28,7 @@ - + @@ -54,13 +54,12 @@ - - - - + + + - - + + \ No newline at end of file diff --git a/public/assets/addons/official/images/articles/article_erp_bom.svg b/public/assets/addons/official/images/articles/article_erp_bom.svg index d572647..b214136 100644 --- a/public/assets/addons/official/images/articles/article_erp_bom.svg +++ b/public/assets/addons/official/images/articles/article_erp_bom.svg @@ -18,8 +18,8 @@ - - + + @@ -28,7 +28,7 @@ - + @@ -42,29 +42,24 @@ - 准 + 构 - - - - - + + + + + + + - - - - - - - - - - - + + + + \ No newline at end of file diff --git a/public/assets/addons/official/images/articles/article_microservice.svg b/public/assets/addons/official/images/articles/article_microservice.svg index d0b6f48..facd4de 100644 --- a/public/assets/addons/official/images/articles/article_microservice.svg +++ b/public/assets/addons/official/images/articles/article_microservice.svg @@ -18,8 +18,8 @@ - - + + @@ -28,7 +28,7 @@ - + diff --git a/public/assets/addons/official/images/articles/article_mysql_page.svg b/public/assets/addons/official/images/articles/article_mysql_page.svg new file mode 100644 index 0000000..8013ec7 --- /dev/null +++ b/public/assets/addons/official/images/articles/article_mysql_page.svg @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 跃 + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/assets/addons/official/images/articles/article_pos_offline.svg b/public/assets/addons/official/images/articles/article_pos_offline.svg index 9654322..9f43dae 100644 --- a/public/assets/addons/official/images/articles/article_pos_offline.svg +++ b/public/assets/addons/official/images/articles/article_pos_offline.svg @@ -18,8 +18,8 @@ - - + + @@ -28,7 +28,7 @@ - + @@ -42,21 +42,21 @@ - 笃 + 核 - - - - - - - - - + + + + + + + + + \ No newline at end of file diff --git a/public/assets/addons/official/images/articles/article_redis_split.svg b/public/assets/addons/official/images/articles/article_redis_split.svg new file mode 100644 index 0000000..7779d3e --- /dev/null +++ b/public/assets/addons/official/images/articles/article_redis_split.svg @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 防 + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/assets/addons/official/images/articles/article_security_whitepaper.svg b/public/assets/addons/official/images/articles/article_security_whitepaper.svg index a410898..e4d7d76 100644 --- a/public/assets/addons/official/images/articles/article_security_whitepaper.svg +++ b/public/assets/addons/official/images/articles/article_security_whitepaper.svg @@ -18,8 +18,8 @@ - - + + @@ -28,7 +28,7 @@ - + @@ -42,23 +42,16 @@ - 安 + 固 - - - - - - - - - - - + + + + \ No newline at end of file diff --git a/public/assets/addons/official/images/articles/article_southwest_digital.svg b/public/assets/addons/official/images/articles/article_southwest_digital.svg index 7e9fa35..5dc1ef9 100644 --- a/public/assets/addons/official/images/articles/article_southwest_digital.svg +++ b/public/assets/addons/official/images/articles/article_southwest_digital.svg @@ -18,8 +18,8 @@ - - + + @@ -28,7 +28,7 @@ - + @@ -48,26 +48,11 @@ - - - - - - - - - - - - - - - - - - - - + + + + + \ No newline at end of file diff --git a/public/assets/addons/official/images/articles/article_tdd_standards.svg b/public/assets/addons/official/images/articles/article_tdd_standards.svg index fc018d2..dc3b49d 100644 --- a/public/assets/addons/official/images/articles/article_tdd_standards.svg +++ b/public/assets/addons/official/images/articles/article_tdd_standards.svg @@ -18,8 +18,8 @@ - - + + @@ -28,7 +28,7 @@ - + @@ -42,27 +42,17 @@ - 律 + 规 - - - - - - - - - - - - - - - + + + + + \ No newline at end of file diff --git a/public/assets/addons/official/images/articles/article_xxl_job.svg b/public/assets/addons/official/images/articles/article_xxl_job.svg new file mode 100644 index 0000000..4a9cf47 --- /dev/null +++ b/public/assets/addons/official/images/articles/article_xxl_job.svg @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 播 + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/assets/addons/official/images/showcases/case_catering.svg b/public/assets/addons/official/images/showcases/case_catering.svg index 9d29f62..56eba9f 100644 --- a/public/assets/addons/official/images/showcases/case_catering.svg +++ b/public/assets/addons/official/images/showcases/case_catering.svg @@ -18,18 +18,23 @@ - - + + + + + + + - + - - + + - - + + @@ -47,30 +52,34 @@ - - + + + - - - - + + + + + - - - - + + + + + - - + + + - - + + - - - - + + + + \ No newline at end of file diff --git a/public/assets/addons/official/images/showcases/case_distrib.svg b/public/assets/addons/official/images/showcases/case_distrib.svg index 424dd0e..05c8d6b 100644 --- a/public/assets/addons/official/images/showcases/case_distrib.svg +++ b/public/assets/addons/official/images/showcases/case_distrib.svg @@ -18,18 +18,23 @@ - - + + + + + + + - + - - + + - - + + @@ -47,37 +52,43 @@ - + + - - - - + + + + + - - - - + + + + + - - - - + + + + + - - - - + + + + + - - - - + + + + - + + \ No newline at end of file diff --git a/public/assets/addons/official/images/showcases/case_gov_agent.svg b/public/assets/addons/official/images/showcases/case_gov_agent.svg index 31e8648..c557e8e 100644 --- a/public/assets/addons/official/images/showcases/case_gov_agent.svg +++ b/public/assets/addons/official/images/showcases/case_gov_agent.svg @@ -18,18 +18,23 @@ - - + + + + + + + - + - - + + - - + + @@ -47,23 +52,27 @@ - - + + + - - + + + + - - - + + + - - - - - - + + + + + + + \ No newline at end of file diff --git a/public/assets/addons/official/images/showcases/case_manufacture.svg b/public/assets/addons/official/images/showcases/case_manufacture.svg index 2ba6453..411b3e7 100644 --- a/public/assets/addons/official/images/showcases/case_manufacture.svg +++ b/public/assets/addons/official/images/showcases/case_manufacture.svg @@ -18,18 +18,23 @@ - - + + + + + + + - + - - + + - - + + @@ -47,25 +52,29 @@ - - - + + + + - - - - + + + + + + - - - - + + + + - - - - + + + + + \ No newline at end of file diff --git a/public/assets/addons/official/images/showcases/product_erp.svg b/public/assets/addons/official/images/showcases/product_erp.svg index ea8e29a..23ac037 100644 --- a/public/assets/addons/official/images/showcases/product_erp.svg +++ b/public/assets/addons/official/images/showcases/product_erp.svg @@ -18,18 +18,23 @@ - - + + + + + + + - + - - + + - - + + @@ -47,34 +52,38 @@ - + + - - - - - - + + + + + + + - - - - - + + + + + - - - - - + + + + + + - - + + + - - + + \ No newline at end of file diff --git a/public/assets/addons/official/images/showcases/product_mall.svg b/public/assets/addons/official/images/showcases/product_mall.svg index 64958d6..5223fc7 100644 --- a/public/assets/addons/official/images/showcases/product_mall.svg +++ b/public/assets/addons/official/images/showcases/product_mall.svg @@ -18,18 +18,23 @@ - - + + + + + + + - + - - + + - - + + @@ -47,42 +52,49 @@ - + + - - - + + + + - - - - + + + + + - - - - + + + + + - - - - + + + + - - - - - + + + + + + - - - + + + + - - + + + \ No newline at end of file diff --git a/public/assets/addons/official/images/showcases/product_pos.svg b/public/assets/addons/official/images/showcases/product_pos.svg index 8096d4b..753d388 100644 --- a/public/assets/addons/official/images/showcases/product_pos.svg +++ b/public/assets/addons/official/images/showcases/product_pos.svg @@ -18,18 +18,23 @@ - - + + + + + + + - + - - + + - - + + @@ -47,26 +52,30 @@ - - - + + + + - - + + + - - - + + + + - - - + + + + - - - + + + - - + + \ No newline at end of file diff --git a/public/assets/addons/official/images/showcases/product_saas.svg b/public/assets/addons/official/images/showcases/product_saas.svg index 2093590..a73200b 100644 --- a/public/assets/addons/official/images/showcases/product_saas.svg +++ b/public/assets/addons/official/images/showcases/product_saas.svg @@ -18,18 +18,23 @@ - - + + + + + + + - + - - + + - - + + @@ -47,35 +52,40 @@ - + + - - - - - - + + + + + + + + - - - - + + + + - - - - - + + + + + + - - - + + + + - - + + \ No newline at end of file diff --git a/public/assets/addons/official/images/showcases/service_agent.svg b/public/assets/addons/official/images/showcases/service_agent.svg index c4670ed..ea01d9a 100644 --- a/public/assets/addons/official/images/showcases/service_agent.svg +++ b/public/assets/addons/official/images/showcases/service_agent.svg @@ -18,18 +18,23 @@ - - + + + + + + + - + - - + + - - + + @@ -47,37 +52,36 @@ - - + + + + - - - - - - - - - - - - - - - - - - - - - - + + + - - - - - - + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/assets/addons/official/images/showcases/service_app.svg b/public/assets/addons/official/images/showcases/service_app.svg index e9617af..3402613 100644 --- a/public/assets/addons/official/images/showcases/service_app.svg +++ b/public/assets/addons/official/images/showcases/service_app.svg @@ -18,18 +18,23 @@ - - + + + + + + + - + - - + + - - + + @@ -47,35 +52,37 @@ - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - + + + + + + - - - - - - - + + + + + + + + \ No newline at end of file diff --git a/public/assets/addons/official/images/showcases/service_middle.svg b/public/assets/addons/official/images/showcases/service_middle.svg index 7eede68..67b4c43 100644 --- a/public/assets/addons/official/images/showcases/service_middle.svg +++ b/public/assets/addons/official/images/showcases/service_middle.svg @@ -18,18 +18,23 @@ - - + + + + + + + - + - - + + - - + + @@ -47,49 +52,60 @@ - - + + + - - - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - + + + + + + - - - - - - - - + + + + + + + + + + + + + + - - - - + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/generate_article_covers.py b/tests/generate_article_covers.py index ae5379c..0ca1e98 100644 --- a/tests/generate_article_covers.py +++ b/tests/generate_article_covers.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- """ -生成文章资讯专属现代中式极简矢量封面图 (Concise Article Covers Generator) +生成文章资讯专属现代中式极简矢量封面图 (Concise & Advanced Article Covers Generator) 彻底杜绝文字介绍类图片,纯粹以现代中式浅色专业风空间几何、流光、细线窗棂与单字印章呈现。 尺寸 600x380,浅色专业底色 #FFFFFF / #F8FAFC,主色 #2563EB,辅色 #06B6D4 / #7C3AED。 """ @@ -28,8 +28,8 @@ COMMON_DEFS = ''' - - + + @@ -38,7 +38,7 @@ COMMON_DEFS = ''' - + ''' @@ -70,7 +70,86 @@ def create_base_svg(seal_char, visual_elements): ''' articles = { - # 1. 微服务分布式事务 + # 首页 4 篇技术深度文章专属抽象封面 + # 1. 缓存穿透、击穿与雪崩《三阶重滤与抗压漏斗》 + 'article_cache.svg': ('盾', ''' + + + + + + + + + + + '''), + + # 2. MySQL LIMIT 深度分页《B+Tree 跳跃指针与延迟关联》 + 'article_mysql_page.svg': ('跃', ''' + + + + + + + + + + + + + + + + + + + '''), + + # 3. XXL-JOB 分布式分片广播《全域广播与等距波纹》 + 'article_xxl_job.svg': ('播', ''' + + + + + + + + + + + + + + + + + '''), + + # 4. Redis 集群脑裂防御《双子星隔离与法定仲裁》 + 'article_redis_split.svg': ('防', ''' + + + + + + + + + + + + + + + + + + + '''), + + # 既有文章 8 篇 'article_microservice.svg': ('枢', ''' @@ -91,7 +170,6 @@ articles = { '''), - # 2. 跨端APP与小程序 'article_cross_app.svg': ('端', ''' @@ -99,128 +177,86 @@ articles = { - - - - + + + - - + + '''), - # 3. 私域AI智能体落地 'article_ai_agent.svg': ('智', ''' - - - - - - - - - + + + + + + + + + + + '''), - # 4. 断网离线收银 - 'article_pos_offline.svg': ('笃', ''' - - - - - - - - - + 'article_pos_offline.svg': ('核', ''' + + + + + + + + + '''), - # 5. 进销存BOM物料匹配 - 'article_erp_bom.svg': ('准', ''' - - - - - - - - - - - - - - - - - - '''), - - # 6. 安全合规白皮书 - 'article_security_whitepaper.svg': ('安', ''' - - - - - - - - - - - - '''), - - # 7. 数字化转型路径 - 'article_southwest_digital.svg': ('融', ''' - + 'article_erp_bom.svg': ('构', ''' + + + - - - - - - - - - - - - - - - - - + + + + + + + '''), - # 8. TDD 工程规范 - 'article_tdd_standards.svg': ('律', ''' - - - - - - - - - - - - - - - - ''') + 'article_security_whitepaper.svg': ('固', ''' + + + + + '''), + + 'article_southwest_digital.svg': ('融', ''' + + + + + + '''), + + 'article_tdd_standards.svg': ('规', ''' + + + + + + '''), } -def generate_all_articles(): - for fname, (seal, vis) in articles.items(): - content = create_base_svg(seal, vis) - path = os.path.join(TARGET_DIR, fname) - with open(path, 'w', encoding='utf-8') as f: - f.write(content.strip()) - print(f"Generated concise article cover: {fname} ({len(content)} bytes)") +def generate_all(): + for filename, (seal_char, elements) in articles.items(): + svg_content = create_base_svg(seal_char, elements) + filepath = os.path.join(TARGET_DIR, filename) + with open(filepath, 'w', encoding='utf-8') as f: + f.write(svg_content.strip()) + print(f"Generated concise article cover: {filename} ({len(svg_content)} bytes)") if __name__ == '__main__': - generate_all_articles() + generate_all() diff --git a/tests/generate_showcases.py b/tests/generate_showcases.py index 7912c3b..3e780f2 100644 --- a/tests/generate_showcases.py +++ b/tests/generate_showcases.py @@ -1,14 +1,14 @@ # -*- coding: utf-8 -*- """ -企业级现代中式浅色专业风矢量配图生成引擎 (Concise Visual Showcases Generator) +企业级现代中式浅色专业风矢量配图生成引擎 (Advanced Modern Sino-Tech Abstract Visuals Generator) 设计准则: -1. 视觉简洁纯粹:彻底摒弃“文字介绍类图片”模式,不包含任何长篇功能描述、业务参数、假数据表格或架构长文。 +1. 纯粹高级抽象设计:彻底摒弃生成的虚假后台/假大屏界面,杜绝纯文字介绍类图片,纯粹以现代中式工程美学几何、拓扑、流光与留白呈现。 2. 现代中式浅色专业风: - - 背景:#FFFFFF 至 #F8FAFC 极净浅色底,点缀 0.75px 雅致东方窗棂微网格 - - 主色:#2563EB 科技蓝 + - 背景:#FFFFFF 至 #F8FAFC 浅色专业底基,融入 0.75px 雅致东方窗棂微网格 + - 主色:#2563EB 科技蓝(含 #1D4ED8, #3B82F6 渐变) - 辅色:#06B6D4 沉静青、#7C3AED 优雅紫 - - 东方意境:大留白、细线构图、多维空间微几何体、纯粹光影层次 - - 印章点缀:仅在右上角保留一枚精致小巧的朱砂印章微标(仅 1 个单字),作为东方文化印记,无任何冗余文字。 + - 材质与光影:半透明磨砂亚克力几何切片、微透视等轴测空间(Isometric)、柔和阴影与高亮流光节点 + - 东方印记:右上角保留一枚极简精致小巧的朱砂印章微标(仅 1 个单字),作为东方文化印记,无任何冗余文字。 """ import os @@ -34,18 +34,23 @@ COMMON_DEFS = ''' - - + + + + + + + - + - - + + - - + + ''' @@ -58,7 +63,7 @@ def make_seal(x, y, char): ''' -# 1. 软件开发 +# 1. 服务:软件开发《榫卯解耦 · 微服务立方拓扑》 def build_service_middle(): return f''' @@ -72,54 +77,65 @@ def build_service_middle(): {make_seal(554, 20, "研")} - - + + + - - - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - + + + + + + - - - - - - - - + + + + + + + + + + + + + + - - - - + + + + + + + + + + + + + + + + ''' -# 2. APP与小程序 +# 2. 服务:APP与小程序定制《多轨天体 · 动量同频》 def build_service_app(): return f''' @@ -133,40 +149,42 @@ def build_service_app(): {make_seal(554, 20, "端")} - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - + + + + + + - - - - - - - + + + + + + + + ''' -# 3. 智能体开发 +# 3. 服务:智能体开发《方圆之镜 · 多维向量星云》 def build_service_agent(): return f''' @@ -180,42 +198,41 @@ def build_service_agent(): {make_seal(554, 20, "智")} - - + + + + - - - - - - - - - - - - - - - - - - - - - - + + + - - - - - - + + + + + + + + + + + + + + + + + + + + + + ''' -# 4. 商城系统 +# 4. 产品:全场景商城《脉络分发 · 裂变星芒》 def build_product_mall(): return f''' @@ -229,47 +246,54 @@ def build_product_mall(): {make_seal(554, 20, "商")} - + + - - - + + + + - - - - + + + + + - - - - + + + + + - - - - + + + + - - - - - + + + + + + - - - + + + + - - + + + ''' -# 5. 收银系统 +# 5. 产品:智能商业收银《双核咬合 · 确定性时钟》 def build_product_pos(): return f''' @@ -283,31 +307,35 @@ def build_product_pos(): {make_seal(554, 20, "笃")} - - - + + + + - - + + + - - - + + + + - - - + + + + - - - + + + - - + + ''' -# 6. 进销存系统 +# 6. 产品:全链路进销存《晶格仓位 · 动态流向轴》 def build_product_erp(): return f''' @@ -321,39 +349,43 @@ def build_product_erp(): {make_seal(554, 20, "准")} - + + - - - - - - + + + + + + + - - - - - + + + + + - - - - - + + + + + + - - + + + - - + + ''' -# 7. SaaS版本 +# 7. 产品:云原生 SaaS《多层平行切片 · 悬浮架构》 def build_product_saas(): return f''' @@ -367,40 +399,45 @@ def build_product_saas(): {make_seal(554, 20, "云")} - + + - - - - - - + + + + + + + + - - - - + + + + - - - - - + + + + + + - - - + + + + - - + + ''' -# 8. 案例 1 +# 8. 案例:大型快消供应链《经纬枢纽 · 吞吐波峰》 def build_case_distrib(): return f''' @@ -414,42 +451,48 @@ def build_case_distrib(): {make_seal(554, 20, "通")} - + + - - - - + + + + + - - - - + + + + + - - - - + + + + + - - - - + + + + + - - - - + + + + - + + ''' -# 9. 案例 2 +# 9. 案例:知名连锁餐饮《双态对称 · 永续无阻》 def build_case_catering(): return f''' @@ -463,35 +506,39 @@ def build_case_catering(): {make_seal(554, 20, "敏")} - - + + + - - - - + + + + + - - - - + + + + + - - + + + - - + + - - - - + + + + ''' -# 10. 案例 3 +# 10. 案例:高端装备制造《分形树状晶体 · 精密咬合》 def build_case_manufacture(): return f''' @@ -505,30 +552,34 @@ def build_case_manufacture(): {make_seal(554, 20, "精")} - - - + + + + - - - - + + + + + + - - - - + + + + - - - - + + + + + ''' -# 11. 案例 4 +# 11. 案例:政务智能体《密闭结界 · 智慧光芒》 def build_case_gov_agent(): return f''' @@ -542,24 +593,28 @@ def build_case_gov_agent(): {make_seal(554, 20, "安")} - - + + + - - + + + + - - - + + + - - - - - - + + + + + + + ''' @@ -582,7 +637,7 @@ def generate_all(): filepath = os.path.join(TARGET_DIR, filename) with open(filepath, 'w', encoding='utf-8') as f: f.write(content.strip()) - print(f"Generated concise showcase: {filename} ({len(content)} bytes)") + print(f"Generated advanced abstract showcase: {filename} ({len(content)} bytes)") if __name__ == '__main__': generate_all() diff --git a/tests/test_advanced_abstract_visuals.py b/tests/test_advanced_abstract_visuals.py new file mode 100644 index 0000000..26babfb --- /dev/null +++ b/tests/test_advanced_abstract_visuals.py @@ -0,0 +1,135 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +现代中式科技高级抽象配图自动化测试 (TDD - Test-Driven Development) +测试验证重点: +1. 纯粹高级抽象设计:杜绝伪造的假界面截图,杜绝纯文字介绍类图片,必须为严谨抽象的工程美学图形。 +2. 艺术质感与层次:具备空间结构(渐变、阴影、微透视、细线窗棂纹理等),杜绝单薄空洞的简陋圆圈。 +3. 现代中式浅色规范:背景为 #FFFFFF / #F8FAFC / #EFF6FF 浅色基调,主色 #2563EB 科技蓝,辅以 #06B6D4 青、#7C3AED 紫,克制朱砂印章。 +4. 全站展示图集与技术文章封面完整性与 SVG 语法闭合。 +5. 首页模板技术文章包含抽象封面的优雅 Fallback 机制。 +""" + +import os +import re +import unittest + +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + +class AdvancedAbstractVisualsTest(unittest.TestCase): + def setUp(self): + self.showcases_dir = os.path.join(BASE_DIR, 'public', 'assets', 'addons', 'official', 'images', 'showcases') + self.articles_dir = os.path.join(BASE_DIR, 'public', 'assets', 'addons', 'official', 'images', 'articles') + self.home_tpl_path = os.path.join(BASE_DIR, 'addons', 'official', 'view', 'web', 'official_home', 'index.html') + + # 4大产品抽象图 + self.product_files = [ + 'product_mall.svg', + 'product_pos.svg', + 'product_erp.svg', + 'product_saas.svg' + ] + + # 4大标杆案例抽象图 + self.case_files = [ + 'case_distrib.svg', + 'case_catering.svg', + 'case_manufacture.svg', + 'case_gov_agent.svg' + ] + + # 3大核心服务抽象图 + self.service_files = [ + 'service_middle.svg', + 'service_app.svg', + 'service_agent.svg' + ] + + # 4篇核心技术文章抽象封面 + self.article_files = [ + 'article_microservice.svg', + 'article_tdd_standards.svg', + 'article_cross_app.svg', + 'article_security_whitepaper.svg' + ] + + def test_01_all_files_exist_and_valid_svg(self): + """所有抽象视觉文件必须完整存在且具备合法的 SVG 闭合标签与 viewBox""" + all_files = self.product_files + self.case_files + self.service_files + for fname in all_files: + fpath = os.path.join(self.showcases_dir, fname) + self.assertTrue(os.path.isfile(fpath), f"抽象视觉图必须存在: {fname}") + with open(fpath, 'r', encoding='utf-8') as f: + content = f.read().strip() + self.assertTrue(content.startswith(''), f"{fname} 必须以 闭合") + self.assertIn('viewBox', content, f"{fname} 必须指定 viewBox 属性") + + def test_02_abstract_visual_richness_and_depth(self): + """抽象图必须具有空间深度与现代科技美感,不应是单薄粗糙的几个圆圈""" + all_files = self.product_files + self.case_files + self.service_files + for fname in all_files: + fpath = os.path.join(self.showcases_dir, fname) + with open(fpath, 'r', encoding='utf-8') as f: + content = f.read() + + # 必须具有渐变或滤镜定义以实现高质感光影与空间层次 + has_depth = ('linearGradient' in content or 'radialGradient' in content) and \ + ('feDropShadow' in content or 'feGaussianBlur' in content or 'filter' in content) + self.assertTrue(has_depth, f"{fname} 必须具备光影渐变或阴影滤镜,体现空间深度与高级感") + + # 必须具有现代中式窗棂细线背景图案 + self.assertIn('lattice', content, f"{fname} 必须融入现代中式窗棂几何微网格底纹") + + # 代码大小合理(高质量矢量图通常在 3KB ~ 15KB,兼顾精细度与加载性能) + size_kb = len(content) / 1024 + self.assertTrue(2.0 <= size_kb <= 25.0, f"{fname} 大小需适中 ({size_kb:.2f}KB),兼顾丰富度与性能") + + def test_03_color_and_seal_constraints(self): + """抽象图形必须遵循配色规范(科技蓝主色,浅色底,克制印章)""" + all_files = self.product_files + self.case_files + self.service_files + text_regex = re.compile(r']*>(.*?)', re.DOTALL | re.IGNORECASE) + for fname in all_files: + fpath = os.path.join(self.showcases_dir, fname) + with open(fpath, 'r', encoding='utf-8') as f: + content = f.read() + + # 主色必须包含品牌科技蓝 #2563EB / #1D4ED8 + self.assertTrue( + '#2563EB' in content or '#1D4ED8' in content, + f"{fname} 必须包含科技蓝规范主色" + ) + + # 浅色底基 + self.assertTrue( + '#FFFFFF' in content or '#F8FAFC' in content or '#EFF6FF' in content, + f"{fname} 必须使用浅色专业风底基" + ) + + # 文字数量约束:≤ 1 个字符(仅允许一个单字印章或完全无字纯抽象图形) + matches = text_regex.findall(content) + clean_texts = [re.sub(r'<[^>]+>', '', m).strip() for m in matches if m.strip()] + self.assertLessEqual(len(clean_texts), 1, f"{fname} 文字不可超过1个字符(杜绝伪造假界面,保持纯粹抽象): {clean_texts}") + + def test_04_articles_abstract_covers_exist(self): + """核心技术文章必须具备专属抽象科技线稿封面""" + self.assertTrue(os.path.isdir(self.articles_dir), "articles 目录必须存在") + for fname in self.article_files: + fpath = os.path.join(self.articles_dir, fname) + self.assertTrue(os.path.isfile(fpath), f"文章封面抽象图必须存在: {fname}") + with open(fpath, 'r', encoding='utf-8') as f: + content = f.read().strip() + self.assertTrue(content.startswith(''), f"{fname} 必须为合法的 SVG") + + def test_05_home_template_has_intelligent_article_fallback(self): + """首页模板在文章图片为空时,必须使用对应的高级抽象技术封面 fallback,消除纯灰空白占位""" + self.assertTrue(os.path.isfile(self.home_tpl_path), "首页模板文件必须存在") + with open(self.home_tpl_path, 'r', encoding='utf-8') as f: + content = f.read() + + # 检查是否包含 fallback 到 articles 目录下的 SVG 封面 + self.assertIn('assets/addons/official/images/articles/', content, "首页模板必须包含针对技术文章抽象封面的智能备用逻辑") + self.assertNotIn('纳海川技术洞察
', content, "首页模板不应直接显示带有灰色背景的纯文字方块,应替换为优雅抽象封面") + +if __name__ == '__main__': + unittest.main()