小橘的逆袭日记
-第一次发现Chookoo的智能猫厕所后,小橘终于康复了健康...
- -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 0000000..68b8460 Binary files /dev/null and b/__pycache__/_build_data.cpython-314.pyc differ 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 @@ @@ -3148,9 +3146,9 @@ @@ -3187,9 +3185,9 @@
- 宠科智能科技
+ 宠科智能科技
+
宠科(Chookoo)成立于中国苏州,是一家专注于宠物智能健康管理的科技企业。我们秉承"让每一个生命都能被真正理解与守护"的理念,致力于通过技术创新重新定义宠物健康管理方式。
@@ -3205,9 +3203,9 @@核心团队来自知名科技企业与科研院所
+核心团队来自知名科技企业与科研院所
通过国际质量管理体系认证
+通过国际质量管理体系认证
独立AI算法实验室持续迭代优化
+独立AI算法实验室持续迭代优化
@@ -3248,7 +3246,7 @@
智能监测·自动清洁
+智能监测·自动清洁
科学训练·智能清洁
+科学训练·智能清洁
定时定量·科学喂养
+定时定量·科学喂养
循环净化·饮水提醒
+循环净化·饮水提醒
远程守护·行为识别
+远程守护·行为识别
探索全系列
+探索全系列
成为全球宠物家庭最信赖的智能健康伙伴,定义主动健康管理新范式
+成为全球宠物家庭最信赖的智能健康伙伴,定义主动健康管理新范式
让健康可见,让需求可解,让宠爱无间
+让健康可见,让需求可解,让宠爱无间
每一份陪伴,都值得被温柔以待
+每一份陪伴,都值得被温柔以待
- 微信公众号 + 微信公众号