From 9af4ef3ff9a4a7b2d2c4f7cbe60061d6b7aeacb3 Mon Sep 17 00:00:00 2001 From: Mortar <3072785233@qq.com> Date: Thu, 16 Apr 2026 15:41:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .claude/settings.local.json | 15 +- .vscode/settings.json | 3 + __pycache__/_build_data.cpython-314.pyc | Bin 0 -> 4985 bytes _build_data.py | 117 +++++ _gen.py | 4 + generate_template.py | 217 ++++++++ index.html | 603 +++++++++++++--------- stories.html | 24 +- story-detail.html | 636 ++++++++++++++++++++++++ 产品网站内容填写模板.md | 430 ++++++++++++++++ 产品网站内容填写模板.xlsx | Bin 0 -> 39450 bytes 11 files changed, 1810 insertions(+), 239 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 __pycache__/_build_data.cpython-314.pyc create mode 100644 _build_data.py create mode 100644 _gen.py create mode 100644 generate_template.py create mode 100644 story-detail.html create mode 100644 产品网站内容填写模板.md create mode 100644 产品网站内容填写模板.xlsx diff --git a/.claude/settings.local.json b/.claude/settings.local.json index e955c0e..eff98d3 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -1,7 +1,20 @@ { "permissions": { "allow": [ - "Bash(git config:*)" + "Bash(git config:*)", + "Bash(node -c index.html)", + "Bash(node -c)", + "Bash(python3 -c ':*)", + "Bash(python -c ':*)", + "Bash(powershell -Command ':*)", + "Bash(python -c \"import openpyxl; print\\(openpyxl.__version__\\)\")", + "Bash(pip install:*)", + "Bash(python -c \"import openpyxl; print\\('ok'\\)\")", + "Bash(python generate_template.py)", + "Bash(python -c \"import sys; sys.stdout.reconfigure\\(encoding='utf-8'\\); print\\(sys.stdin.read\\(\\)\\)\")", + "Bash(python -u -c \"exec\\(open\\('_build_excel.py', encoding='utf-8'\\).read\\(\\) if __import__\\('os'\\).path.exists\\('_build_excel.py'\\) else print\\('need to write builder'\\)\\)\")", + "Bash(ls -la *.html *.py *.xlsx *.md)", + "Bash(ls -la *.png *.jpg *.jpeg)" ] } } diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..6f3a291 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "liveServer.settings.port": 5501 +} \ No newline at end of file diff --git a/__pycache__/_build_data.cpython-314.pyc b/__pycache__/_build_data.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..68b84604a380c4e389595ef765107db43d1c9d88 GIT binary patch literal 4985 zcmaJ_>2Djy6_+TPI&8^t;-nYaI4RnONO)6<9TWv*rw)v!iJ>CshZ-;#aV@iP+tLm|8o4t`QLXcDt;s{`9E#$%TEsY5~wg#wAO!F=_Ajx@T`RAIe2Q| z*#OU~R!wUad~f`+vbEY;-Fl`~3vcIhZ#Av8@b(70)mf_zRlaI?y8u#W;Q1yzwXK!E zuh6}vR)VT8gkQlZB`1Ci1o2d#ygsK#p$#;WkWzzkDw5S+zS?x{db98w;6kBQ{4kCp zb5c5@&IHin3OWek{xuW|Q4|!46`_oVrSyz+_((e3$!f1RUHPl&D$|wdKHd@$w#r(B^wp(`NS>yzX{gl}ZRa ziRP^Sz*a-1&%!`>Y70CKZT5Q{Z~wro1I_KaGrFp5rI{zp$LC?dkCIAvS{_QbN0qDQMl*7mBN*+jf7QlKu0cykBOBneZ~tFz1~8jIr# zfY)*ZiF0!Q8XoIG-6LpmN7tyU?rel0>U|!ki}UFru)$qp< zeR{TN{4WU;F@{>C1|FAK)R^P-2yUO<>E_8U=6?;tF@a>`pyf3;uUx`nNC?+g%7l<6X|~^4-<@ zcstm`3vUA>TQU?}Ldkt4lU5SXVHZ%V_)9#n}CC-GdQwm|YEC&wbEfci6q4i8-^_2MZ-n?Be98 z8t76(k%BWhp$pu1KF;mn9Qylqp0~Sw52$%4wWm&Iq|6g3BjT9|Bn7HUAPd9Zby{6r zXH5tA{y=YL$~H&v+C%wqj~eJz7GgNMq==g=a^z$R=U`xQ#lZ!%7-3)_F|^KTR30sd z;X`RsVgT>%ch*=;7MsCjJ<(^O`fxO<>@0vj09BIfIel~^kbz=K>2b9$B8&6#XfMT7 z`^Ip5n$mLe;e;GcP#PMFO3979KFf(dD_vfc=#~;e&UJ_Va~?UY?A6@ z@P(YA_c?u$k#wTv1a!MBj23Bwt00$*FF(hYKslCQ&Gb!=nP3l_xgQbW9%DVBusC zCyNGbYIi!X(oAbXmBnPHc@>4WrR4CnyB^Os9uGO$D`NuL_^kHIVgSl-S&6mko3OYG z867|@EJKCIq|^pjEu}MPEKSdcbQqKpkJ*GpZ!JhzsgaPX@!+%)9D)iikUS{Q%p&nA zn=mTNLA=#vL`NYt*vAyv1k$p!C}~l78c}w8SURCXkgU{bN?y${&L$Rx@u1v41a%tD zH9N0#0#AmdZ|}LQCpeiW45Wq8WL|Y(% zR@|F6jCge(9gY;Z3BL`ZK=!iwcvM~q<{UA=L~+0K37*`<5fM-9snfkiSX#)OMihI9 zy5JGol9KBT%0i)75@a2f@TYPpCatXWC_~*K98q?j8Kq>uB8m)y1?U=VODCtqckshu zffOluD}|m88dA`bl}TTOQm%;$F5Q4`QK*OG>0bLS1;sn?Zs%!O(d&cU~^Fc)fHw zFJh%4s6Wm`j!8)ITmogf@yLjh*`(saFJLy``LGm)4z|(Aromt+L1Sy4lP|M@uKw#l zN)VcO3o*K2xj?FYv9~zBE^lq)?FDsuUpYD|x1gD|SN#V#uwpI`11mA504xiZ*zj=) z1`ET9K_nIy8-l_X-NVs2+%wA{$}PEEgkm{m3F#N)B$Ui4C}%jahMxtX!zeN1N(n%@ z8Kkd~e>j4Z&0s(pV2X^;(rslb0i!4+rm*dP@<2?UZ`jn=L+8#3MwSnpqqOLTW(+tEE<0OF+u4pdk6yp7hmoUGjAA zDNAg^8(=QW2cJM1z~Oy(Ii`tpUR1-29t5euRgYSPl{UQDhvH2qaOV(d8n!w{;qtS&-NdT`?Z& zL-9j_boOSG*2$bsGL-;L5RDa;$|r+Rw9EbF76s-|JY(9m{O8`Tyy>?u0fP zx^_JI2r6b?E4kjAO-+8VS6)oY!MHrIN46+U?!ZLkX;uRtCgOM~h{m5w$!WF+i|H0W zI-CTTfdai5D6Q-kBWnyj|N<#cczS;jOC% e-ghrv&;%M@e)M*uCQ$#<@XiHIR|9_)l>ZMeR0|jY literal 0 HcmV?d00001 diff --git a/_build_data.py b/_build_data.py new file mode 100644 index 0000000..ce878d6 --- /dev/null +++ b/_build_data.py @@ -0,0 +1,117 @@ +# -*- coding: utf-8 -*- +# Data definitions for the Excel template generator +# Imported by generate_template.py + +slides = [ + (1, "product", "cat.png"), + (2, "product", "dog.jpeg"), + (3, "activity", None), + (4, "product", "feeder.png"), + (5, "notice", None), + (6, "product", "water.png"), + (7, "activity", None), + (8, "product", "camera(1).jpg"), +] + +hp = [ + ("1", "cat.png", "智能猫厕所"), + ("2", "dog.jpeg", "智能狗厕所"), + ("3", "feeder.png", "智能喂食器"), + ("4", "water.jpeg", "智能饮水机"), + ("5", "camera.jpeg", "AI宠物摄像头"), +] + +lp = [ + ("cat-toilet-pro", "智能猫厕所 Pro", "cat.png", "猫用,热销"), + ("cat-toilet-lite", "智能猫厕所 Lite", "cat.png", "猫用,新品"), + ("dog-toilet", "智能狗厕所", "dog.jpeg", "狗用"), + ("smart-feeder", "智能喂食器", "feeder.png", "通用,热销"), + ("smart-fountain", "智能饮水机", "water.jpeg", "通用"), + ("cat-food-bucket", "智能猫粮桶", "cat.png", "猫用"), + ("dog-food-bucket", "智能狗粮桶", "dog.jpeg", "狗用"), + ("ai-camera", "AI宠物摄像头", "camera.jpeg", "通用,新品"), + ("health-tracker", "宠物健康追踪器", "cat.png", "通用"), + ("environment-monitor", "环境监测仪", "dog.jpeg", "通用"), + ("filter-set", "替换滤网套装", "cat.png", "配件"), + ("cleaning-kit", "清洁耗材包", "dog.jpeg", "配件"), + ("power-adapter", "备用电源适配器", "cat.png", "配件"), + ("extended-warranty", "延长保修服务", "dog.jpeg", "服务"), +] + +sd = [ + ("story-1", "小橘的逆袭日记", "cat.png", "cat.png", "健康恢复", "橘猫", "小橘妈妈", "上海", "2024.03"), + ("story-2", "旺财的健身日记", "dog.jpeg", "dog.jpeg", "体重管理", "金毛", "旺财爸爸", "北京", "2024.02"), + ("story-3", "布丁的日常", "cat.png", "cat.png", "AI识别", "英短", "布丁姐姐", "深圳", "2024.01"), + ("story-4", "豆豆的饮水日记", "dog.jpeg", "dog.jpeg", "饮水健康", "柯基", "豆豆妈妈", "杭州", "2024.01"), + ("story-5", "咪咪的健康守护", "cat.png", "cat.png", "健康监测", "美短", "咪咪妈妈", "广州", "2023.12"), + ("story-6", "大黄的如厕训练", "dog.jpeg", "dog.jpeg", "训练养成", "田园犬", "大黄爸爸", "成都", "2023.11"), +] + +article_pages = [ + ("五、文章-公司介绍", "8B5CF6", [ + ("201", "关于Chookoo宠科", "公司简介需大幅扩充3-5段"), + ("202", "我们的使命", "企业使命2-3段"), + ("203", "热招职位", "真实职位/要求/待遇"), + ("204", "A轮融资", "真实新闻稿"), + ("205", "品牌起源", "品牌故事3-5段"), + ], "全是占位需大幅扩充"), + ("六、文章-合作伙伴", "F59E0B", [ + ("301", "经销商入驻", "入驻资格/流程/标准"), + ("302", "经销商政策", "区域保护/价格/返利"), + ("303", "推广联盟", "佣金/结算/素材"), + ("304", "企业采购", "折扣/定制/流程"), + ("305", "技术合作", "API/模式/流程"), + ], "全是占位需大幅扩充"), + ("七、文章-法律条款", "DC2626", [ + ("401", "隐私政策", "法务起草:数据收集/使用/存储/共享"), + ("402", "服务条款", "法务起草:使用规范/免责/争议"), + ("403", "Cookie说明", "类型/管理/第三方列表"), + ], "全是占位需法务起草"), +] + +app_fields = [ + ("APP-1", "Badge标签", "顶部标签", "是", "全球独家", ""), + ("APP-2", "主标题", "", "是", "Chookoo App", ""), + ("APP-3", "副标题", "核心描述", "是", "AI宠物健康平台...", ""), + ("APP-4", "核心标题", "", "是", "AI宠物健康平台", ""), + ("APP-5", "核心描述", "", "是", "全球独家毫米波雷达...", ""), + ("APP-6", "特性1标题", "", "是", "毫米波雷达监测", ""), + ("APP-7", "特性1描述", "", "是", "24小时无感监测...", ""), + ("APP-8", "特性2标题", "", "是", "红外体温检测", ""), + ("APP-9", "特性2描述", "", "是", "精准红外测温...", ""), + ("APP-10", "特性3标题", "", "是", "AI健康预警", ""), + ("APP-11", "特性3描述", "", "是", "基于AI算法...", ""), + ("APP-12", "特性4标题", "", "是", "多设备生态联动", ""), + ("APP-13", "特性4描述", "", "是", "喂食器猫砂盆...", ""), + ("APP-14", "数据:用户数", "确认真实性", "审核", "100万+", ""), + ("APP-15", "数据:数据点", "确认真实性", "审核", "10亿+", ""), + ("APP-16", "数据:国家数", "确认真实性", "审核", "30+", ""), + ("APP-17", "数据:评分", "确认真实性", "审核", "4.9", ""), + ("APP-18", "App Store", "实际URL", "是", "(空)", ""), + ("APP-19", "Google Play", "实际URL", "是", "(空)", ""), + ("APP-20", "APK链接", "安卓URL", "否", "(空)", ""), +] + +help_articles = [ + ("安装指导", "101|智能猫厕所安装指南"), + ("安装指导", "102|智能饮水机安装指南"), + ("安装指导", "103|智能喂食器安装指南"), + ("安装指导", "104|WiFi配网教程"), + ("安装指导", "105|指示灯状态说明"), + ("智能猫厕所", "1|支持哪些猫砂"), + ("智能猫厕所", "2|引导猫咪使用"), + ("智能猫厕所", "3|设备离线"), + ("智能猫厕所", "4|更换集便袋"), + ("智能饮水机", "5|更换滤芯"), + ("智能饮水机", "6|水泵噪音"), + ("智能饮水机", "7|清洗饮水机"), + ("智能喂食器", "8|出粮不准"), + ("智能喂食器", "9|断网工作"), + ("智能喂食器", "10|设置喂食计划"), + ("APP使用", "11|注册账号"), + ("APP使用", "12|添加设备"), + ("APP使用", "13|分享设备"), + ("其他问题", "14|保修政策"), + ("其他问题", "15|联系售后"), + ("其他问题", "16|购买渠道"), +] diff --git a/_gen.py b/_gen.py new file mode 100644 index 0000000..dfd59f1 --- /dev/null +++ b/_gen.py @@ -0,0 +1,4 @@ +import json, sys +sys.stdout.reconfigure(encoding="utf-8") +# This script reads generate_template.py and runs it +exec(open("generate_template.py", encoding="utf-8").read()) diff --git a/generate_template.py b/generate_template.py new file mode 100644 index 0000000..a03ce26 --- /dev/null +++ b/generate_template.py @@ -0,0 +1,217 @@ +# -*- coding: utf-8 -*- +""" +Chookoo 产品网站内容填写模板 - Excel 生成器 +运行: python generate_template.py +输出: 产品网站内容填写模板.xlsx +""" +import sys +sys.stdout.reconfigure(encoding="utf-8") +from openpyxl import Workbook +from openpyxl.styles import Font, PatternFill, Alignment, Border, Side +from openpyxl.utils import get_column_letter +from _build_data import slides, hp, lp, sd, article_pages, app_fields, help_articles + +wb = Workbook() +thin = Side(style="thin", color="CCCCCC") +bd = Border(left=thin, top=thin, right=thin, bottom=thin) +hf = Font(name="Microsoft YaHei", size=11, bold=True, color="FFFFFF") +hfl = PatternFill(start_color="2F6BFF", end_color="2F6BFF", fill_type="solid") +sf = Font(name="Microsoft YaHei", size=10, bold=True, color="FFFFFF") +sfl = PatternFill(start_color="4B5563", end_color="4B5563", fill_type="solid") +nf = Font(name="Microsoft YaHei", size=10) +bf = Font(name="Microsoft YaHei", size=10, bold=True) +xf = Font(name="Microsoft YaHei", size=10, color="888888") +rf = Font(name="Microsoft YaHei", size=10, color="DC2626", bold=True) +inp = PatternFill(start_color="FEF3C7", end_color="FEF3C7", fill_type="solid") +rev = PatternFill(start_color="DBEAFE", end_color="DBEAFE", fill_type="solid") +wa = Alignment(wrap_text=True, vertical="center", horizontal="left") +ca = Alignment(wrap_text=True, vertical="center", horizontal="center") + +def hdr(ws, row, cols): + for c in range(1, cols+1): + cl = ws.cell(row=row, column=c); cl.font = hf; cl.fill = hfl; cl.alignment = ca; cl.border = bd + +def sec(ws, row, cols, txt=""): + ws.merge_cells(start_row=row, start_column=1, end_row=row, end_column=cols) + cl = ws.cell(row=row, column=1, value=txt); cl.font = sf; cl.fill = sfl; cl.alignment = Alignment(vertical="center") + for c in range(1, cols+1): ws.cell(row=row, column=c).border = bd + +def rw(ws, r, vals, fill_cols=None, ft="inp"): + for c, v in enumerate(vals, 1): + cl = ws.cell(row=r, column=c, value=v); cl.font = nf; cl.alignment = wa; cl.border = bd + if fill_cols and c in fill_cols: cl.fill = inp if ft == "inp" else rev + +def sw(ws, widths): + for i, w in enumerate(widths, 1): ws.column_dimensions[get_column_letter(i)].width = w + +# ========== Sheet 0: 填写说明 ========== +ws0 = wb.active; ws0.title = "填写说明"; ws0.sheet_properties.tabColor = "EF4444" +sw(ws0, [90, 70]) +ws0.cell(row=1, column=1, value="Chookoo 产品网站 - 内容填写说明").font = Font(name="Microsoft YaHei", size=14, bold=True, color="2F6BFF") +info = [("", ""), ("颜色含义", ""), ("深黄底色", "必填 - 空着会导致网页显示异常"), ("浅蓝底色", "仅审核 - 已有内容需确认"), + ("", ""), ("工作表说明", ""), + ("一、轮播图", "首页8张轮播幻灯片(产品/活动/公告),中英文+图片"), + ("二、产品卡片", "首页5张+列表页14张卡片,中英文标题/描述+图片"), + ("三、产品详情", "14个产品详情页: 标签/亮点/特性/规格/图片"), + ("四、宠物故事", "6个故事: 卡片摘要+详情页5段正文+3亮点+图片"), + ("五、文章-公司介绍", "5篇(全是占位需大幅扩充)"), + ("六、文章-合作伙伴", "5篇(全是占位需大幅扩充)"), + ("七、文章-法律条款", "3篇(全是占位需法务起草)"), + ("八、文章-App页面", "基本完成需审核数据+补充下载链接"), + ("九、文章-帮助中心", "21篇已有详细文章仅审核确认"), + ("", ""), ("图片尺寸速查", "")] +r = 3 +for a, b in info: + ws0.cell(row=r, column=1, value=a).font = bf if a else nf + ws0.cell(row=r, column=2, value=b).font = nf; r += 1 +iref = [("图片类型","建议源图尺寸","比例","格式","透明背景"),("轮播图主图","800x800px","1:1","PNG","是"), + ("轮播图角标","200x200px","1:1","PNG","是"),("产品卡片图","400x400px","1:1","PNG","是"), + ("展示区大图","800x1000px","4:5","PNG","是"),("详情页主图","800x800px","1:1","PNG","是"), + ("故事封面","800x450px","16:9","JPG","否"),("故事头像","80x80px","1:1","JPG/PNG","否(圆形)"), + ("二维码","240x240px","1:1","PNG","否")] +for i, vals in enumerate(iref): + for c, v in enumerate(vals, 1): + cl = ws0.cell(row=r, column=c, value=v); cl.font = hf if i==0 else nf + if i==0: cl.fill = hfl + cl.border = bd; cl.alignment = wa + r += 1 + +# ========== Sheet 1: 轮播图 ========== +ws1 = wb.create_sheet("一、轮播图"); ws1.sheet_properties.tabColor = "06B6D4" +sw(ws1, [10, 22, 50, 8, 35, 35]) +for c, h in enumerate(["编号","字段名","填写说明","必填","中文","英文"], 1): ws1.cell(row=1, column=c, value=h) +hdr(ws1, 1, 6); r = 2 +for idx, stype, img in slides: + sec(ws1, r, 6, f"幻灯片{idx}(类型:{stype})"); r += 1 + fields = [(f"S{idx}-1","类型","product/activity/notice","是",stype,stype), + (f"S{idx}-2","中文主标题","产品名或活动标题","是","",""), + (f"S{idx}-3","中文副标题","一句话卖点","是","",""), + (f"S{idx}-4","英文主标题","English title","是","",""), + (f"S{idx}-5","英文副标题","English subtitle","是","","")] + if stype in ("activity","notice"): + fields += [(f"S{idx}-6","中文详情","活动/公告内容","是","",""),(f"S{idx}-7","英文详情","English details","是","","")] + for vals in fields: rw(ws1, r, vals, fill_cols={5,6}); r += 1 + rw(ws1, r, [f"S{idx}-IMG","主图","800x800px PNG透明","是","当前:",img or "(无)"]) + ws1.cell(row=r, column=5).font = xf; r += 1; r += 1 + +# ========== Sheet 2: 产品卡片 ========== +ws2 = wb.create_sheet("二、产品卡片"); ws2.sheet_properties.tabColor = "10B981" +sw(ws2, [10, 18, 48, 8, 35, 35]) +sec(ws2, 1, 6, "首页产品卡片(5张)"); r = 2 +for c, h in enumerate(["编号","字段名","填写说明","必填","中文","英文"], 1): ws2.cell(row=r, column=c, value=h) +hdr(ws2, r, 6); r += 1 +for pid, img, name in hp: + sec(ws2, r, 6, f"产品{pid}: {name}"); r += 1 + for vals in [(f"HP{pid}-1","名称","不超过8字","是",name,""),(f"HP{pid}-2","副标题","不超过20字","是","",""), + (f"HP{pid}-3","特性1","不超过15字","是","",""),(f"HP{pid}-4","特性2","不超过15字","是","",""), + (f"HP{pid}-5","特性3","不超过15字","是","",""),(f"HP{pid}-6","特性4","不超过15字","是","","")]: + rw(ws2, r, vals, fill_cols={5,6}); r += 1 + rw(ws2, r, [f"HP{pid}-IMG","图片","400x400px PNG","是","当前:",img]) + ws2.cell(row=r, column=5).font = xf; r += 2 +sec(ws2, r, 6, "列表页卡片(14张)"); r += 1 +for c, h in enumerate(["编号","字段名","填写说明","必填","中文","英文"], 1): ws2.cell(row=r, column=c, value=h) +hdr(ws2, r, 6); r += 1 +for pid, name, img, tags in lp: + rw(ws2, r, [f"PL-{pid}","名称",pid,"是",name,""], fill_cols={5,6}); r += 1 + rw(ws2, r, [f"PL-{pid}D","描述","一句话","是","",""], fill_cols={5,6}); r += 1 + rw(ws2, r, [f"PL-{pid}T","标签","逗号分隔","是",tags,""], fill_cols={5,6}); r += 1 + rw(ws2, r, [f"PL-{pid}I","图片","400x400px PNG","是","当前:",img]) + ws2.cell(row=r, column=5).font = xf; r += 2 + +# ========== Sheet 3: 产品详情 ========== +ws3 = wb.create_sheet("三、产品详情"); ws3.sheet_properties.tabColor = "7C3AED" +sw(ws3, [10, 16, 42, 14, 28, 28]) +for c, h in enumerate(["编号","字段名","填写说明","图标颜色","中文","英文"], 1): ws3.cell(row=1, column=c, value=h) +hdr(ws3, 1, 6); r = 2 +for pid, name, img, tags in lp: + sec(ws3, r, 6, f"产品:{name}(ID:{pid})"); r += 1 + rw(ws3, r, ["","标签","逗号分隔","","",tags,""], fill_cols={5,6}); r += 1 + rw(ws3, r, ["","副标题","不超过25字","","",""], fill_cols={5,6}); r += 1 + sec(ws3, r, 6, "亮点(4条)"); r += 1 + for i in range(1,5): rw(ws3, r, [f"H{i}",f"亮点{i}","不超过15字","","",""], fill_cols={5,6}); r += 1 + sec(ws3, r, 6, "特性(4组 blue=技术 green=环保 purple=智能 orange=安全)"); r += 1 + for i in range(1,5): + rw(ws3, r, [f"F{i}","标题","不超过8字","填颜色","",""], fill_cols={4,5,6}); r += 1 + rw(ws3, r, [f"F{i}d","描述","不超过25字","","",""], fill_cols={5,6}); r += 1 + sec(ws3, r, 6, "规格表(行数不限)"); r += 1 + for c, h in enumerate(["","参数名(中文)","参数名(英文)","","参数值",""], 1): + cl = ws3.cell(row=r, column=c, value=h); cl.font = bf + cl.fill = PatternFill(start_color="E5E7EB", end_color="E5E7EB", fill_type="solid"); cl.border = bd + r += 1 + for _ in range(8): rw(ws3, r, ["","","","","",""], fill_cols={2,3,5}); r += 1 + rw(ws3, r, ["","主图","800x800px PNG","","当前:",img]) + ws3.cell(row=r, column=5).font = xf; r += 2 + +# ========== Sheet 4: 宠物故事 ========== +ws4 = wb.create_sheet("四、宠物故事"); ws4.sheet_properties.tabColor = "EA580C" +sw(ws4, [10, 18, 48, 8, 40, 40]) +sec(ws4, 1, 6, "故事卡片(6个,首页随机3个)"); r = 2 +for c, h in enumerate(["编号","字段名","填写说明","必填","中文","英文"], 1): ws4.cell(row=r, column=c, value=h) +hdr(ws4, r, 6); r += 1 +for sid, title, img, av, cat, pet, auth, loc, date in sd: + sec(ws4, r, 6, f"故事:{title}"); r += 1 + for vals in [(f"{sid}-1","标题","不超过12字","是",title,""),(f"{sid}-2","摘要","2-3句不超过60字","是","",""), + (f"{sid}-3","标签1","分类","是",cat,""),(f"{sid}-4","标签2","可选","否","",""), + (f"{sid}-5","作者","如:小橘妈妈","是",auth,""),(f"{sid}-6","宠物","品种年龄","是",pet+" · ","")]: + rw(ws4, r, vals, fill_cols={5,6}); r += 1 + rw(ws4, r, [f"{sid}-IMG","封面图","800x450px JPG","是","当前:",img]) + ws4.cell(row=r, column=5).font = xf; r += 1 + rw(ws4, r, [f"{sid}-AV","头像","80x80px","是","当前:",av]) + ws4.cell(row=r, column=5).font = xf; r += 2 +sec(ws4, r, 6, "故事详情正文(每个5段+3亮点)"); r += 1 +for c, h in enumerate(["编号","字段名","填写说明","必填","中文","英文"], 1): ws4.cell(row=r, column=c, value=h) +hdr(ws4, r, 6); r += 1 +for sid, title, img, av, cat, pet, auth, loc, date in sd: + sec(ws4, r, 6, f"正文:{title}"); r += 1 + rw(ws4, r, [f"{sid}-CAT","分类","","是",cat,""], fill_cols={5,6}); r += 1 + rw(ws4, r, [f"{sid}-LOC","地点","城市","是",loc,""], fill_cols={5,6}); r += 1 + rw(ws4, r, [f"{sid}-DATE","日期","如2024.03","是",date,""], fill_cols={5,6}); r += 1 + for i in range(1,6): + rw(ws4, r, [f"{sid}-P{i}",f"第{i}段","3-5句话","是","",""], fill_cols={5,6}); r += 1 + sec(ws4, r, 6, "核心亮点(3条)"); r += 1 + for i in range(1,4): rw(ws4, r, [f"{sid}-HL{i}",f"亮点{i}","一句话","是","",""], fill_cols={5,6}); r += 1 + r += 1 + +# ========== Sheet 5-7: 文章系统 ========== +for st, color, articles, warn in article_pages: + ws = wb.create_sheet(st); ws.sheet_properties.tabColor = color; sw(ws, [10, 20, 48, 8, 55, 55]) + for c, h in enumerate(["编号","字段名","填写说明","必填","中文","英文"], 1): ws.cell(row=1, column=c, value=h) + hdr(ws, 1, 6) + ws.merge_cells(start_row=2, start_column=1, end_row=2, end_column=6) + ws.cell(row=2, column=1, value="注意: "+warn).font = rf; r = 3 + for aid, atitle, adesc in articles: + sec(ws, r, 6, f"文章{aid}:{atitle}"); r += 1 + rw(ws, r, [f"A{aid}-1","标题","","是",atitle,""], fill_cols={5,6}); r += 1 + for i in range(1,6): + rw(ws, r, [f"A{aid}-P{i}",f"第{i}段",adesc if i==1 else "3-5句话","是","",""], fill_cols={5,6}); r += 1 + r += 1 + +# ========== Sheet 8: App ========== +ws8 = wb.create_sheet("八、文章-App页面"); ws8.sheet_properties.tabColor = "3B82F6" +sw(ws8, [10, 22, 48, 8, 40, 40]) +for c, h in enumerate(["编号","字段名","填写说明","必填","当前内容","需确认"], 1): ws8.cell(row=1, column=c, value=h) +hdr(ws8, 1, 6); r = 2 +sec(ws8, r, 6, "App文案(基本完成请审核)"); r += 1 +for vals in app_fields: + ft = "rev" if "审核" in str(vals[3]) else "inp" + fc = {6} if "审核" in str(vals[3]) else {6} + rw(ws8, r, vals, fill_cols=fc, ft=ft); r += 1 + +# ========== Sheet 9: 帮助中心 ========== +ws9 = wb.create_sheet("九、文章-帮助中心"); ws9.sheet_properties.tabColor = "64748B" +sw(ws9, [10, 14, 42, 8, 55]) +for c, h in enumerate(["编号","分类","标题","状态","审核确认"], 1): ws9.cell(row=1, column=c, value=h) +hdr(ws9, 1, 5); r = 2 +sec(ws9, r, 5, "21篇已有详细文章仅需审核确认"); r += 1 +for cat, info in help_articles: + aid, atitle = info.split("|") + rw(ws9, r, [aid, cat, atitle, "已有详细内容", ""], fill_cols={5}, ft="rev"); r += 1 + +# ========== 保存 ========== +for ws in wb.worksheets: + ws.freeze_panes = "A2"; ws.row_dimensions[1].height = 28 +wb.move_sheet("填写说明", offset=-(len(wb.sheetnames)-1)) +output = "产品网站内容填写模板.xlsx" +wb.save(output) +print(f"OK - {output}") +print(f"Sheets ({len(wb.sheetnames)}): {', '.join(wb.sheetnames)}") diff --git a/index.html b/index.html index 4e7eb46..04ab1f2 100644 --- a/index.html +++ b/index.html @@ -1176,8 +1176,6 @@ padding: 0; } .snap-section { - min-height: 100vh; - min-height: 100svh; display: flex; align-items: center; justify-content: center; @@ -3114,10 +3112,10 @@ @@ -3132,8 +3130,8 @@
📢 -

系统升级通知

-

App 2.0版本全新上线
新增健康报告、远程控制功能

+

系统升级通知

+

App 2.0版本全新上线
新增健康报告、远程控制功能

@@ -3148,9 +3146,9 @@
🔥 HOT -

新用户专享

-

首单立减100元

- 优惠码: NEW100 +

新用户专享

+

首单立减100元

+ 优惠码: NEW100
@@ -3187,9 +3185,9 @@
公司简介 Chookoo - 宠科智能科技 + 宠科智能科技
-

+

宠科(Chookoo)成立于中国苏州,是一家专注于宠物智能健康管理的科技企业。我们秉承"让每一个生命都能被真正理解与守护"的理念,致力于通过技术创新重新定义宠物健康管理方式。

@@ -3205,9 +3203,9 @@
60%+ - 研发人员占比 + 研发人员占比
-

核心团队来自知名科技企业与科研院所

+

核心团队来自知名科技企业与科研院所

@@ -3220,9 +3218,9 @@
ISO9001 - 质量认证 + 质量认证
-

通过国际质量管理体系认证

+

通过国际质量管理体系认证

@@ -3235,10 +3233,10 @@
- 自研 - AI实验室 + 自研 + AI实验室
-

独立AI算法实验室持续迭代优化

+

独立AI算法实验室持续迭代优化

@@ -3248,7 +3246,7 @@ - 中国苏州 · 苏州工业园区 + 中国苏州 · 苏州工业园区
@@ -3300,7 +3298,7 @@
100万+
-
宠物健康档案
+
宠物健康档案
@@ -3312,7 +3310,7 @@
30+
-
国家和地区
+
国家和地区
@@ -3323,7 +3321,7 @@ - 中国苏州 · 智慧健康管理领域 + 中国苏州 · 智慧健康管理领域 @@ -3342,8 +3340,8 @@ 猫厕所
-

智能猫厕所

-

智能监测·自动清洁

+

智能猫厕所

+

智能监测·自动清洁

@@ -3351,8 +3349,8 @@ 狗厕所
-

智能狗厕所

-

科学训练·智能清洁

+

智能狗厕所

+

科学训练·智能清洁

@@ -3360,8 +3358,8 @@ 喂食器
-

智能喂食器

-

定时定量·科学喂养

+

智能喂食器

+

定时定量·科学喂养

@@ -3371,8 +3369,8 @@ 产品展示
-

产品名称

-

产品描述

+

产品名称

+

产品描述

@@ -3414,7 +3412,7 @@
- 了解更多 + 了解更多 @@ -3429,8 +3427,8 @@ 饮水机
-

智能饮水机

-

循环净化·饮水提醒

+

智能饮水机

+

循环净化·饮水提醒

@@ -3438,8 +3436,8 @@ AI摄像头
-

AI宠物摄像头

-

远程守护·行为识别

+

AI宠物摄像头

+

远程守护·行为识别

@@ -3450,8 +3448,8 @@
-

更多产品

-

探索全系列

+

更多产品

+

探索全系列

@@ -3464,61 +3462,8 @@ 宠物故事

每一个毛孩子背后的温馨故事

- @@ -3530,7 +3475,7 @@
核心理念 -

让每一个生命
都能被真正理解与守护

+

让每一个生命
都能被真正理解与守护

@@ -3545,8 +3490,8 @@
Vision -

愿景

-

成为全球宠物家庭最信赖的智能健康伙伴,定义主动健康管理新范式

+

愿景

+

成为全球宠物家庭最信赖的智能健康伙伴,定义主动健康管理新范式

@@ -3562,12 +3507,12 @@
Values -

价值观

+

价值观

- 科技向善 - 关爱为本 - 极致创新 - 长久相伴 + 科技向善 + 关爱为本 + 极致创新 + 长久相伴
@@ -3586,8 +3531,8 @@
Mission -

使命

-

让健康可见,让需求可解,让宠爱无间

+

使命

+

让健康可见,让需求可解,让宠爱无间

@@ -3612,7 +3557,7 @@ -

每一份陪伴,都值得被温柔以待

+

每一份陪伴,都值得被温柔以待

@@ -3704,35 +3649,35 @@ 微信二维码
二维码
- 微信公众号 + 微信公众号
微博二维码
二维码
- 微博 + 微博
小红书二维码
二维码
- 小红书 + 小红书
抖音二维码
二维码
- 抖音 + 抖音
商城二维码
二维码
- 线上商城 + 线上商城
@@ -3760,6 +3705,7 @@ + + diff --git a/产品网站内容填写模板.md b/产品网站内容填写模板.md new file mode 100644 index 0000000..1ef6649 --- /dev/null +++ b/产品网站内容填写模板.md @@ -0,0 +1,430 @@ +# Chookoo 产品网站 — 内容填写模板 + +> **使用说明** +> 1. 本文档列出网站上所有需要填写的内容字段,请逐项填写。 +> 2. 所有文字内容需要 **中文** 和 **英文** 两个版本。 +> 3. 图片请提供源文件,并按要求的尺寸和命名规范提交。 +> 4. 填写完成后,将本文档和所有图片一起交给开发人员,我们会直接替换到网站上。 +> 5. 标有 **必填** 的字段为空则网页会显示异常,请务必填写。 + +--- + +## 一、品牌基础信息 + +| 编号 | 字段名 | 填写说明 | 必填 | 填写内容(中文) | 填写内容(英文) | +|------|--------|----------|------|------------------|------------------| +| B1 | 品牌Slogan | 首页顶部标语,不超过15个字 | 是 | | | +| B2 | 品牌介绍第1段 | "关于我们"区域的品牌故事第1段,3-5句话 | 是 | | | +| B3 | 品牌介绍第2段 | 品牌故事第2段,3-5句话 | 否 | | | +| B4 | 品牌介绍第3段 | 品牌故事第3段,1-2句总结性语句 | 否 | | | +| B5 | 品牌理念关键词 | 3-4个关键词,用逗号分隔,如:科技,关爱,智能,守护 | 是 | | | +| B6 | 联系电话 | 客服电话号码 | 是 | | | +| B7 | 联系邮箱 | 客服邮箱地址 | 是 | | | +| B8 | 公司地址 | 公司详细地址 | 是 | | | +| B9 | 公司名称 | 用于页脚版权声明 | 是 | | | + +### 品牌相关图片 + +| 编号 | 图片用途 | 尺寸要求 | 格式 | 说明 | 文件名(请使用此命名) | +|------|----------|----------|------|------|------------------------| +| BI1 | 网站Logo(导航栏) | **高度不低于 100px**,宽度自适应,背景透明 | PNG | 用于顶部导航栏和关于我们区域,深色背景上要清晰可见 | `logo.png` | +| BI2 | 网站Logo(白色版) | **高度不低于 100px**,宽度自适应,背景透明 | PNG | 白色文字版本,用于深色页脚区域 | `白字logo.png` | +| BI3 | 首页Hero背景图 | **3640 × 2048 px** 或同比例(16:9 横向) | JPG | 首页顶部全屏背景图,图片会铺满整个屏幕,重要内容请放在中间区域 | `hero.jpeg` | + +--- + +## 二、轮播图(首页主展示区) + +> 网站首页主展示区有 **5张** 轮播幻灯片,每张展示一个产品或活动。 +> 请为每张幻灯片填写以下信息。 + +### 幻灯片 1 + +| 编号 | 字段名 | 填写说明 | 必填 | 填写内容(中文) | 填写内容(英文) | +|------|--------|----------|------|------------------|------------------| +| S1-1 | 幻灯片类型 | 填 `product`(产品展示)或 `activity`(活动)或 `notice`(公告) | 是 | | | +| S1-2 | 产品主标题 | 如果类型是product,填产品名称;如果是activity/notice,填活动/公告标题 | 是 | | | +| S1-3 | 产品副标题 | 一句话描述产品核心卖点,不超过20字 | 是 | | | +| S1-4 | 活动公告内容 | 仅当类型为activity/notice时填写,1-2句详情 | 否 | | | + +**幻灯片1图片:** + +| 图片用途 | 尺寸要求 | 格式 | 说明 | 文件名 | +|----------|----------|------|------|--------| +| 产品主图 | **800 × 800 px**(正方形)或 **800 × 1000 px**(竖版),背景透明 | PNG | 产品主体图片,会居中显示在卡片中 | `slide-1-product.png` | +| 角标小图(可选) | **200 × 200 px**(正方形),背景透明 | PNG | 右上角圆形小图标,如关联产品缩略图 | `slide-1-badge.png` | + +--- + +### 幻灯片 2 + +| 编号 | 字段名 | 填写说明 | 必填 | 填写内容(中文) | 填写内容(英文) | +|------|--------|----------|------|------------------|------------------| +| S2-1 | 幻灯片类型 | 同上 | 是 | | | +| S2-2 | 产品主标题 | 同上 | 是 | | | +| S2-3 | 产品副标题 | 同上 | 是 | | | +| S2-4 | 活动公告内容 | 同上 | 否 | | | + +**幻灯片2图片:** + +| 图片用途 | 尺寸要求 | 格式 | 说明 | 文件名 | +|----------|----------|------|------|--------| +| 产品主图 | 同上 | PNG | | `slide-2-product.png` | +| 角标小图(可选) | 同上 | PNG | | `slide-2-badge.png` | + +--- + +### 幻灯片 3 + +| 编号 | 字段名 | 填写说明 | 必填 | 填写内容(中文) | 填写内容(英文) | +|------|--------|----------|------|------------------|------------------| +| S3-1 | 幻灯片类型 | 同上 | 是 | | | +| S3-2 | 产品主标题 | 同上 | 是 | | | +| S3-3 | 产品副标题 | 同上 | 是 | | | +| S3-4 | 活动公告内容 | 同上 | 否 | | | + +**幻灯片3图片:** + +| 图片用途 | 尺寸要求 | 格式 | 说明 | 文件名 | +|----------|----------|------|------|--------| +| 产品主图 | 同上 | PNG | | `slide-3-product.png` | +| 角标小图(可选) | 同上 | PNG | | `slide-3-badge.png` | + +--- + +### 幻灯片 4 + +| 编号 | 字段名 | 填写说明 | 必填 | 填写内容(中文) | 填写内容(英文) | +|------|--------|----------|------|------------------|------------------| +| S4-1 | 幻灯片类型 | 同上 | 是 | | | +| S4-2 | 产品主标题 | 同上 | 是 | | | +| S4-3 | 产品副标题 | 同上 | 是 | | | +| S4-4 | 活动公告内容 | 同上 | 否 | | | + +**幻灯片4图片:** + +| 图片用途 | 尺寸要求 | 格式 | 说明 | 文件名 | +|----------|----------|------|------|--------| +| 产品主图 | 同上 | PNG | | `slide-4-product.png` | +| 角标小图(可选) | 同上 | PNG | | `slide-4-badge.png` | + +--- + +### 幻灯片 5 + +| 编号 | 字段名 | 填写说明 | 必填 | 填写内容(中文) | 填写内容(英文) | +|------|--------|----------|------|------------------|------------------| +| S5-1 | 幻灯片类型 | 同上 | 是 | | | +| S5-2 | 产品主标题 | 同上 | 是 | | | +| S5-3 | 产品副标题 | 同上 | 是 | | | +| S5-4 | 活动公告内容 | 同上 | 否 | | | + +**幻灯片5图片:** + +| 图片用途 | 尺寸要求 | 格式 | 说明 | 文件名 | +|----------|----------|------|------|--------| +| 产品主图 | 同上 | PNG | | `slide-5-product.png` | +| 角标小图(可选) | 同上 | PNG | | `slide-5-badge.png` | + +--- + +## 三、产品卡片(首页底部产品列表) + +> 首页底部展示 **5张** 产品卡片,横向排列,可滚动。点击卡片后上方展示区会显示该产品的详细信息。 + +### 产品卡片公共图片要求 + +| 图片用途 | 尺寸要求 | 格式 | 说明 | +|----------|----------|------|------| +| 产品卡片缩略图 | **400 × 400 px**(正方形),背景透明 | PNG | 用于卡片上的小缩略图,会被裁剪显示在 **175 × 90 px** 的区域内 | +| 产品展示区大图 | **800 × 1000 px**(竖版)或 **800 × 800 px**(正方形),背景透明 | PNG | 用于点击卡片后在上方展示区显示的大图,会被显示在 **400 × 220 px** 的区域内 | + +--- + +### 产品卡片 1 + +| 编号 | 字段名 | 填写说明 | 必填 | 填写内容(中文) | 填写内容(英文) | +|------|--------|----------|------|------------------|------------------| +| C1-1 | 产品ID | 英文唯一标识符,只能用小写字母、数字和连字符,如 `cat-toilet-pro` | 是 | | — | +| C1-2 | 适用宠物 | 填 `cat`(猫)、`dog`(狗)或 `both`(通用) | 是 | | — | +| C1-3 | 产品名称 | 卡片上显示的产品名称,不超过8个字 | 是 | | | +| C1-4 | 产品副标题 | 卡片上一句话描述,不超过15个字 | 是 | | | +| C1-5 | 展示区副标题 | 点击后上方展示区的详细描述,2-3句话 | 是 | | | +| C1-6 | 特性1 | 展示区产品特性,每条不超过15字 | 是 | | | +| C1-7 | 特性2 | 同上 | 是 | | | +| C1-8 | 特性3 | 同上 | 是 | | | +| C1-9 | 特性4 | 同上 | 是 | | | + +| 图片 | 文件名 | +|------|--------| +| 卡片缩略图 | `product-1-thumb.png` | +| 展示区大图 | `product-1-display.png` | + +--- + +### 产品卡片 2 + +| 编号 | 字段名 | 填写说明 | 必填 | 填写内容(中文) | 填写内容(英文) | +|------|--------|----------|------|------------------|------------------| +| C2-1 | 产品ID | 同上 | 是 | | — | +| C2-2 | 适用宠物 | 同上 | 是 | | — | +| C2-3 | 产品名称 | 同上 | 是 | | | +| C2-4 | 产品副标题 | 同上 | 是 | | | +| C2-5 | 展示区副标题 | 同上 | 是 | | | +| C2-6 | 特性1 | 同上 | 是 | | | +| C2-7 | 特性2 | 同上 | 是 | | | +| C2-8 | 特性3 | 同上 | 是 | | | +| C2-9 | 特性4 | 同上 | 是 | | | + +| 图片 | 文件名 | +|------|--------| +| 卡片缩略图 | `product-2-thumb.png` | +| 展示区大图 | `product-2-display.png` | + +--- + +### 产品卡片 3 + +| 编号 | 字段名 | 填写说明 | 必填 | 填写内容(中文) | 填写内容(英文) | +|------|--------|----------|------|------------------|------------------| +| C3-1 | 产品ID | 同上 | 是 | | — | +| C3-2 | 适用宠物 | 同上 | 是 | | — | +| C3-3 | 产品名称 | 同上 | 是 | | | +| C3-4 | 产品副标题 | 同上 | 是 | | | +| C3-5 | 展示区副标题 | 同上 | 是 | | | +| C3-6 | 特性1 | 同上 | 是 | | | +| C3-7 | 特性2 | 同上 | 是 | | | +| C3-8 | 特性3 | 同上 | 是 | | | +| C3-9 | 特性4 | 同上 | 是 | | | + +| 图片 | 文件名 | +|------|--------| +| 卡片缩略图 | `product-3-thumb.png` | +| 展示区大图 | `product-3-display.png` | + +--- + +### 产品卡片 4 + +| 编号 | 字段名 | 填写说明 | 必填 | 填写内容(中文) | 填写内容(英文) | +|------|--------|----------|------|------------------|------------------| +| C4-1 | 产品ID | 同上 | 是 | | — | +| C4-2 | 适用宠物 | 同上 | 是 | | — | +| C4-3 | 产品名称 | 同上 | 是 | | | +| C4-4 | 产品副标题 | 同上 | 是 | | | +| C4-5 | 展示区副标题 | 同上 | 是 | | | +| C4-6 | 特性1 | 同上 | 是 | | | +| C4-7 | 特性2 | 同上 | 是 | | | +| C4-8 | 特性3 | 同上 | 是 | | | +| C4-9 | 特性4 | 同上 | 是 | | | + +| 图片 | 文件名 | +|------|--------| +| 卡片缩略图 | `product-4-thumb.png` | +| 展示区大图 | `product-4-display.png` | + +--- + +### 产品卡片 5 + +| 编号 | 字段名 | 填写说明 | 必填 | 填写内容(中文) | 填写内容(英文) | +|------|--------|----------|------|------------------|------------------| +| C5-1 | 产品ID | 同上 | 是 | | — | +| C5-2 | 适用宠物 | 同上 | 是 | | — | +| C5-3 | 产品名称 | 同上 | 是 | | | +| C5-4 | 产品副标题 | 同上 | 是 | | | +| C5-5 | 展示区副标题 | 同上 | 是 | | | +| C5-6 | 特性1 | 同上 | 是 | | | +| C5-7 | 特性2 | 同上 | 是 | | | +| C5-8 | 特性3 | 同上 | 是 | | | +| C5-9 | 特性4 | 同上 | 是 | | | + +| 图片 | 文件名 | +|------|--------| +| 卡片缩略图 | `product-5-thumb.png` | +| 展示区大图 | `product-5-display.png` | + +--- + +## 四、产品详情页 + +> 以下信息会显示在点击"了解更多"后跳转的产品详情页。 +> 产品ID必须与上面"产品卡片"中的ID一致。 +> 目前网站支持最多 **14个** 产品详情页。 + +### 每个产品需要填写的内容模板 + +> 请复制以下模板,每个产品填一份。 + +#### 产品:___________(产品ID:___________) + +**基本信息:** + +| 编号 | 字段名 | 填写说明 | 必填 | 填写内容(中文) | 填写内容(英文) | +|------|--------|----------|------|------------------|------------------| +| D-1 | 产品标签 | 1-3个标签,用逗号分隔。可选标签类型:猫用/狗用/通用/热销/新品/配件/服务。英文对应:For Cats / For Dogs / Universal / Bestseller / New / Accessory / Service | 是 | | | +| D-2 | 产品副标题 | 详情页顶部的一句产品描述,不超过25字 | 是 | | | + +**产品亮点(4条):** + +| 编号 | 填写说明 | 必填 | 中文内容 | 英文内容 | +|------|----------|------|----------|----------| +| D-H1 | 第1个亮点,如"毫米波雷达监测心率呼吸",不超过15字 | 是 | | | +| D-H2 | 第2个亮点 | 是 | | | +| D-H3 | 第3个亮点 | 是 | | | +| D-H4 | 第4个亮点 | 是 | | | + +**产品特性(4组):** + +> 每组特性包含:图标颜色、标题、描述文字。图标颜色只能从以下4种中选择一种: +> - `blue`(蓝色 — 适合技术/监测类特性) +> - `green`(绿色 — 适合环保/清洁类特性) +> - `purple`(紫色 — 适合智能/APP类特性) +> - `orange`(橙色 — 适合安全/保障类特性) + +| 编号 | 图标颜色 | 标题(中文) | 标题(英文) | 描述(中文,不超过25字) | 描述(英文) | +|------|----------|-------------|-------------|-------------------------|-------------| +| D-F1 | blue/green/purple/orange | | | | | +| D-F2 | blue/green/purple/orange | | | | | +| D-F3 | blue/green/purple/orange | | | | | +| D-F4 | blue/green/purple/orange | | | | | + +**产品规格表:** + +> 规格行数不限,按实际产品参数填写。每行包含:参数名称(中英文)、参数值。 + +| 参数名称(中文) | 参数名称(英文) | 参数值 | +|-----------------|-----------------|--------| +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | + +**产品图片:** + +| 图片用途 | 尺寸要求 | 格式 | 说明 | 文件名 | +|----------|----------|------|------|--------| +| 产品主图 | **800 × 800 px**(正方形),背景透明 | PNG | 详情页左侧大图展示,区域为正方形 | `detail-{产品ID}-main.png` | +| 缩略图(可选) | **160 × 160 px**(正方形),背景透明 | PNG | 主图下方的小缩略图,如有多角度视图可提供多张 | `detail-{产品ID}-thumb-1.png` | + +--- + +## 五、宠物故事(首页故事卡片) + +> 首页底部展示 **3条** 宠物故事卡片。 + +### 故事卡片图片要求 + +| 图片用途 | 尺寸要求 | 格式 | 说明 | +|----------|----------|------|------| +| 故事封面图 | **600 × 400 px**(3:2 横向),或 **800 × 450 px**(16:9 横向) | JPG | 故事卡片的封面图片,显示在 **宽度自适应 × 220px** 高的区域内 | +| 作者头像 | **80 × 80 px**(正方形) | JPG/PNG | 圆形头像,显示为 **36 × 36 px** 的圆形 | + +--- + +### 故事 1 + +| 编号 | 字段名 | 填写说明 | 必填 | 填写内容(中文) | 填写内容(英文) | +|------|--------|----------|------|------------------|------------------| +| ST1-1 | 故事标题 | 不超过12个字 | 是 | | | +| ST1-2 | 故事摘要 | 2-3句话的简介,不超过50字 | 是 | | | +| ST1-3 | 标签1 | 故事分类标签,如:健康恢复、AI识别、暖心故事 | 是 | | | +| ST1-4 | 标签2 | 同上 | 否 | | | +| ST1-5 | 作者昵称 | 如"小橘妈妈" | 是 | | | +| ST1-6 | 宠物信息 | 品种和年龄,如"橘猫 · 3岁" | 是 | | | + +| 图片 | 文件名 | +|------|--------| +| 故事封面图 | `story-1-cover.jpg` | +| 作者头像 | `story-1-avatar.jpg` | + +--- + +### 故事 2 + +| 编号 | 字段名 | 填写说明 | 必填 | 填写内容(中文) | 填写内容(英文) | +|------|--------|----------|------|------------------|------------------| +| ST2-1 | 故事标题 | 不超过12个字 | 是 | | | +| ST2-2 | 故事摘要 | 2-3句话,不超过50字 | 是 | | | +| ST2-3 | 标签1 | 同上 | 是 | | | +| ST2-4 | 标签2 | 同上 | 否 | | | +| ST2-5 | 作者昵称 | 同上 | 是 | | | +| ST2-6 | 宠物信息 | 同上 | 是 | | | + +| 图片 | 文件名 | +|------|--------| +| 故事封面图 | `story-2-cover.jpg` | +| 作者头像 | `story-2-avatar.jpg` | + +--- + +### 故事 3 + +| 编号 | 字段名 | 填写说明 | 必填 | 填写内容(中文) | 填写内容(英文) | +|------|--------|----------|------|------------------|------------------| +| ST3-1 | 故事标题 | 不超过12个字 | 是 | | | +| ST3-2 | 故事摘要 | 2-3句话,不超过50字 | 是 | | | +| ST3-3 | 标签1 | 同上 | 是 | | | +| ST3-4 | 标签2 | 同上 | 否 | | | +| ST3-5 | 作者昵称 | 同上 | 是 | | | +| ST3-6 | 宠物信息 | 同上 | 是 | | | + +| 图片 | 文件名 | +|------|--------| +| 故事封面图 | `story-3-cover.jpg` | +| 作者头像 | `story-3-avatar.jpg` | + +--- + +## 六、二维码图片 + +> 以下二维码图片用于页脚和弹窗中展示。 + +| 编号 | 二维码用途 | 显示尺寸 | 建议源图尺寸 | 格式 | 说明 | 文件名 | +|------|-----------|----------|-------------|------|------|--------| +| QR1 | 微信公众号 | 80×80px(页脚)/ 120×120px(弹窗) | **240 × 240 px** | PNG | 微信公众号二维码 | `qr-wechat.png` | +| QR2 | 微博 | 同上 | **240 × 240 px** | PNG | 微博二维码 | `qr-weibo.png` | +| QR3 | 小红书 | 同上 | **240 × 240 px** | PNG | 小红书二维码 | `qr-xiaohongshu.png` | +| QR4 | 抖音/TikTok | 同上 | **240 × 240 px** | PNG | 抖音二维码 | `qr-tiktok.png` | +| QR5 | 在线商城 | 160×160px(弹窗) | **320 × 320 px** | PNG | 在线商城/店铺二维码 | `qr-shop.png` | +| QR6 | 联系咨询 | 160×160px(弹窗) | **320 × 320 px** | PNG | 客服/咨询二维码 | `qr-contact.png` | +| QR7 | 视频号 | 120×120px(弹窗) | **240 × 240 px** | PNG | 视频号二维码 | `qr-video.png` | +| QR8 | 抖音(故事页) | 120×120px(弹窗) | **240 × 240 px** | PNG | 抖音二维码(故事页专用) | `qr-douyin.png` | + +--- + +## 七、图片尺寸汇总速查表 + +| 图片类型 | 建议源图尺寸 | 比例 | 格式 | 是否需要透明背景 | +|----------|-------------|------|------|----------------| +| 导航栏Logo | 高度 ≥ 100px,宽度自适应 | 自由 | PNG | **是** | +| 白色版Logo | 高度 ≥ 100px,宽度自适应 | 自由 | PNG | **是**(白色文字) | +| Hero背景图 | **3640 × 2048 px** | 16:9 | JPG | 否 | +| 轮播图产品主图 | **800 × 800 px** | 1:1 | PNG | **是** | +| 轮播图角标小图 | **200 × 200 px** | 1:1 | PNG | **是** | +| 产品卡片缩略图 | **400 × 400 px** | 1:1 | PNG | **是** | +| 产品展示区大图 | **800 × 1000 px** | 4:5 | PNG | **是** | +| 详情页产品主图 | **800 × 800 px** | 1:1 | PNG | **是** | +| 详情页缩略图 | **160 × 160 px** | 1:1 | PNG | **是** | +| 故事封面图 | **800 × 450 px** | 16:9 | JPG | 否 | +| 故事作者头像 | **80 × 80 px** | 1:1 | JPG/PNG | 否(圆形裁剪) | +| 二维码(页脚) | **240 × 240 px** | 1:1 | PNG | 否 | +| 二维码(弹窗大图) | **320 × 320 px** | 1:1 | PNG | 否 | + +--- + +## 八、填写检查清单 + +填写完成后,请对照以下清单自查: + +- [ ] 品牌基础信息(B1-B9)全部已填写 +- [ ] 5张轮播幻灯片(S1-S5)内容已填写 +- [ ] 5张产品卡片(C1-C5)内容已填写 +- [ ] 每个产品的详情页信息(D系列)已填写 +- [ ] 3条宠物故事(ST1-ST3)内容已填写 +- [ ] 所有需要的中英文双语内容都已填写 +- [ ] 所有图片已按要求的尺寸和格式准备好 +- [ ] 图片文件名与模板中指定的文件名一致 +- [ ] 二维码图片(QR1-QR8)已准备(如暂无可后续补充) diff --git a/产品网站内容填写模板.xlsx b/产品网站内容填写模板.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..e6100cef7222be0c370fc98495d0d6ee0e760329 GIT binary patch literal 39450 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
  • NAHuK8~ zyA?t21JVuoDXYq|SuMUba_+9hZv(q_+t#R+8kf2l%)2=z$mxs%U;OF?W@L{9V}y05 z=l!D9Kgy9x3(SQS#Vz!1J&?6!jf;pP%ycc)TTFYg1CRDL;a(JPps6+ApFW)QF)7*K zjvl<68(GazmB_eBHVbePZLu{!TbRVSq9!j=m0(ydPn2;Revi9&@pEotZ9J`O4r#Vz zntv7HXbXdj1K>OL06(ypal_4``>0hec+?MWSa93^MS=GK0M1g+I0jJzgEhPY12>Bv zsy-@SK>jTdg-IjuB6s+@~>NC_J3NLxSTcLsgI6z&fvURh!2~n^K5E$mC5#men zr)=%DcmeziQI9Tz04My`2=_LiIa&&=KOkV!sDgbdl#pNzPQsJ&l_~YwMi2n5lc5xb zFi#4RS6-k?s&n&V1rB@g$O~tIb!dq~*KFfb2>WnJ0xafeocVXGFLZLL^TLXMO}q zfsSZ#DUIy13$}nH=%|d5}Rl&^DgSc|+sb;yc>%fkqAhV&MNi=%P7fZyx;(P+Cz8 literal 0 HcmV?d00001