diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..9cf9dac --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,43 @@ +name: Deploy to GitHub Pages + +on: + push: + branches: [main] + workflow_dispatch: + +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Generate README + run: node scripts/generate-readme.js + env: + ONLINE_URL: ${{ vars.PAGES_URL || 'https://longcoderx.github.io/coding-plan-page/' }} + + - name: Setup Pages + uses: actions/configure-pages@v4 + + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: '.' + + deploy: + runs-on: ubuntu-latest + needs: build + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 \ No newline at end of file diff --git a/README.md b/README.md index a934dd1..1de2bbd 100644 --- a/README.md +++ b/README.md @@ -1,54 +1,29 @@ # AI Coding Plan 对比工具 -> 更新日期2026.4.4 | 新增小米·MiMo & 腾讯云TokenPlan(非CodingPlan) - ## 📖 简介 -九大平台 智谱AI、Kimi、MiniMax、小米·MiMo、字节·方舟、阿里·百炼、百度·千帆、腾讯云、京东云,全面对比 +十二大平台 智谱AI、Kimi、MiniMax、小米·MiMo、字节·方舟、阿里·百炼、百度·千帆、腾讯云、京东云、摩尔线程、快手·KwaiKAT、无问芯穹,全面对比 -支持Qwen-3.5,Doubao-Seed-2.0,MiniMax-M2.7,MiniMax-M2.5,GLM-5.1,GLM-5,MiMo-V2-Pro,Kimi-K2.5等模型 +支持Qwen-3.5,Doubao-Seed-2.0,MiniMax-M2.7、MiniMax-M2.5,GLM-5.1、GLM-5、GLM-4.7,MiMo-V2-Pro,Kimi-K2.5,KAT-Coder-Pro V1,DeepSeek-V3.2等模型 ### 在线访问 直接访问:[https://longcoderx.github.io/coding-plan-page/](https://longcoderx.github.io/coding-plan-page/) - -## 平台推荐 - -1. 智谱AI ⭐️⭐️⭐️⭐️⭐️ - - 独占GLM5.1模型。+1 - - 提供免费MCP次数。+1 -2. MiniMax ⭐️⭐️⭐️⭐️⭐️ - - 价格最便宜,且无需抢购。+1 - - 独占MiniMax-M2.7模型。+1 -3. 字节·方舟 ⭐️⭐️⭐️⭐️ - - 独占Doubao-Seed-2.0系列模型。+1 - - 不支持GLM-5,只支持GLM-4.7。-1 - - 赠送真OpenClaw。+1 -4. 阿里·百炼 ⭐️⭐️⭐️ - - 独占Qwen3.5系列模型。+1 - - 只有pro套餐,轻量使用性价比不高。-1 -5. 小米·MiMo ⭐️⭐️⭐️ - - 独占Mimo模型。+1 - - 按Token计费,性价比略低。-1 - -**评分标准**: 基准3颗星,价格优势劣势1分,模型优势或独占模型1分,其他优势1分 - - ## 📋 套餐对比表 | 平台 | 套餐 | 链接 | 首月价格 | 连续包月 | 连续包季 | 连续包年 | 支持模型 | 5小时请求数 | 每周请求数 | 每月总请求数 | 其他权益 | 备注 | |------|------|---------|---------|---------|---------|---------|---------|-----------|-----------|-----------|---------|------| -| 智谱AI | Lite | [跳转](https://www.bigmodel.cn/glm-coding?ic=QHIO7TWK3Z) | - | ¥49 | ¥132 ~~147~~ / 季 | ¥470 ~~588~~ / 年 | GLM-5.1 | 1,200 | 6,000 | 24,000 | 免费MCP次数 | • 3倍Claude Pro用量。官方以prompt计数,这里按1 prompt≈15次请求换算 • 官方只有周限量无月限量,这里按照1月=4周计算 | -| 智谱AI | Pro | [跳转](https://www.bigmodel.cn/glm-coding?ic=QHIO7TWK3Z) | - | ¥149 | ¥402 ~~447~~ / 季 | ¥1430 ~~1788~~ / 年 | GLM-5.1, GLM-5 | 6,000 | 30,000 | 120,000 | 免费MCP次数 | • 5倍Lite用量。官方以prompt计数,这里按1 prompt≈15次请求换算 • 官方只有周限量无月限量,这里按照1月=4周计算 | -| 智谱AI | Max | [跳转](https://www.bigmodel.cn/glm-coding?ic=QHIO7TWK3Z) | - | ¥469 | ¥1266 ~~1407~~ / 季 | ¥4502 ~~5628~~ / 年 | GLM-5.1, GLM-5 | 24,000 | 120,000 | 480,000 | 免费MCP次数 | • 20倍Lite用量。官方以prompt计数,这里按1 prompt≈15次请求换算 • 官方只有周限量无月限量,这里按照1月=4周计算 | -| MiniMax | Starter | [跳转](https://platform.minimaxi.com/subscribe/token-plan?code=EJWGvHzjSk&source=link) | - | ¥29 | - / 季 | ¥290 ~~348~~ / 年 | MiniMax-M2.7, MiniMax-M2.5 | 600 | 6,000 | 24,000 | - | 约50TPS • 官方只有周限量无月限量,这里按照1月=4周计算 | -| MiniMax | Plus | [跳转](https://platform.minimaxi.com/subscribe/token-plan?code=EJWGvHzjSk&source=link) | - | ¥49 | - / 季 | ¥490 ~~588~~ / 年 | MiniMax-M2.7, MiniMax-M2.5 | 1,500 | 15,000 | 60,000 | - | 约50TPS • 官方只有周限量无月限量,这里按照1月=4周计算 | -| MiniMax | Max | [跳转](https://platform.minimaxi.com/subscribe/token-plan?code=EJWGvHzjSk&source=link) | - | ¥119 | - / 季 | ¥1190 ~~1428~~ / 年 | MiniMax-M2.7, MiniMax-M2.5 | 4,500 | 45,000 | 180,000 | - | 约50TPS • 官方只有周限量无月限量,这里按照1月=4周计算 | -| MiniMax | Plus-极速 | [跳转](https://platform.minimaxi.com/subscribe/token-plan?code=EJWGvHzjSk&source=link) | - | ¥98 | - / 季 | ¥980 ~~1176~~ / 年 | MiniMax-M2.7, MiniMax-M2.5 | 1,500 | 15,000 | 60,000 | - | 约100TPS • 官方只有周限量无月限量,这里按照1月=4周计算 | -| MiniMax | Max-极速 | [跳转](https://platform.minimaxi.com/subscribe/token-plan?code=EJWGvHzjSk&source=link) | - | ¥199 | - / 季 | ¥1990 ~~2388~~ / 年 | MiniMax-M2.7, MiniMax-M2.5 | 4,500 | 45,000 | 180,000 | - | 约100TPS • 官方只有周限量无月限量,这里按照1月=4周计算 | -| 字节·方舟 | Lite | [跳转](https://volcengine.com/L/uCoen5sFGaY/) | - | ¥40 | - / 季 | - / 年 | Doubao-Seed-2.0, MiniMax-M2.5, Kimi-K2.5, GLM-4.7, DeepSeek-V3.2 | 1,200 | 9,000 | 18,000 | ArkClaw 7天体验 | - | -| 字节·方舟 | Pro | [跳转](https://volcengine.com/L/uCoen5sFGaY/) | - | ¥200 | - / 季 | - / 年 | Doubao-Seed-2.0, MiniMax-M2.5, Kimi-K2.5, GLM-4.7, DeepSeek-V3.2 | 6,000 | 45,000 | 90,000 | 免费ArkClaw | - | +| 智谱AI | Lite | [跳转](https://www.bigmodel.cn/glm-coding?ic=FNRBWMNAOM) | - | ¥49 | ¥132 ~~147~~ / 季 | ¥470 ~~588~~ / 年 | GLM-5.1 | 1,200 | 6,000 | 24,000 | 免费MCP次数 | • 3倍Claude Pro用量。官方以prompt计数,这里按1 prompt≈15次请求换算 • 官方只有周限量无月限量,这里按照1月=4周计算 | +| 智谱AI | Pro | [跳转](https://www.bigmodel.cn/glm-coding?ic=FNRBWMNAOM) | - | ¥149 | ¥402 ~~447~~ / 季 | ¥1430 ~~1788~~ / 年 | GLM-5.1, GLM-5 | 6,000 | 30,000 | 120,000 | 免费MCP次数 | • 5倍Lite用量。官方以prompt计数,这里按1 prompt≈15次请求换算 • 官方只有周限量无月限量,这里按照1月=4周计算 | +| 智谱AI | Max | [跳转](https://www.bigmodel.cn/glm-coding?ic=FNRBWMNAOM) | - | ¥469 | ¥1266 ~~1407~~ / 季 | ¥4502 ~~5628~~ / 年 | GLM-5.1, GLM-5 | 24,000 | 120,000 | 480,000 | 免费MCP次数 | • 20倍Lite用量。官方以prompt计数,这里按1 prompt≈15次请求换算 • 官方只有周限量无月限量,这里按照1月=4周计算 | +| MiniMax | Starter | [跳转](https://platform.minimaxi.com/subscribe/token-plan?code=3mfXUyqNGv&source=link) | - | ¥29 | - / 季 | ¥290 ~~348~~ / 年 | MiniMax-M2.7, MiniMax-M2.5 | 600 | 6,000 | 24,000 | - | 约50TPS • 官方只有周限量无月限量,这里按照1月=4周计算 | +| MiniMax | Plus | [跳转](https://platform.minimaxi.com/subscribe/token-plan?code=3mfXUyqNGv&source=link) | - | ¥49 | - / 季 | ¥490 ~~588~~ / 年 | MiniMax-M2.7, MiniMax-M2.5 | 1,500 | 15,000 | 60,000 | - | 约50TPS • 官方只有周限量无月限量,这里按照1月=4周计算 | +| MiniMax | Max | [跳转](https://platform.minimaxi.com/subscribe/token-plan?code=3mfXUyqNGv&source=link) | - | ¥119 | - / 季 | ¥1190 ~~1428~~ / 年 | MiniMax-M2.7, MiniMax-M2.5 | 4,500 | 45,000 | 180,000 | - | 约50TPS • 官方只有周限量无月限量,这里按照1月=4周计算 | +| MiniMax | Plus-极速 | [跳转](https://platform.minimaxi.com/subscribe/token-plan?code=3mfXUyqNGv&source=link) | - | ¥98 | - / 季 | ¥980 ~~1176~~ / 年 | MiniMax-M2.7, MiniMax-M2.5 | 1,500 | 15,000 | 60,000 | - | 约100TPS • 官方只有周限量无月限量,这里按照1月=4周计算 | +| MiniMax | Max-极速 | [跳转](https://platform.minimaxi.com/subscribe/token-plan?code=3mfXUyqNGv&source=link) | - | ¥199 | - / 季 | ¥1990 ~~2388~~ / 年 | MiniMax-M2.7, MiniMax-M2.5 | 4,500 | 45,000 | 180,000 | - | 约100TPS • 官方只有周限量无月限量,这里按照1月=4周计算 | +| 字节·方舟 | Lite | [跳转](https://volcengine.com/L/DfEH3_AUHEI/) | - | ¥40 | - / 季 | - / 年 | Doubao-Seed-2.0, MiniMax-M2.5, Kimi-K2.5, GLM-4.7, DeepSeek-V3.2 | 1,200 | 9,000 | 18,000 | ArkClaw 7天体验 | - | +| 字节·方舟 | Pro | [跳转](https://volcengine.com/L/DfEH3_AUHEI/) | - | ¥200 | - / 季 | - / 年 | Doubao-Seed-2.0, MiniMax-M2.5, Kimi-K2.5, GLM-4.7, DeepSeek-V3.2 | 6,000 | 45,000 | 90,000 | 免费ArkClaw | - | | 阿里·百炼 | Pro | [跳转](https://www.aliyun.com/benefit/scene/codingplan) | - | ¥200 | - / 季 | - / 年 | Qwen-3.5, MiniMax-M2.5, GLM-5, Kimi-K2.5 | 6,000 | 45,000 | 90,000 | - | - | | 小米·MiMo | Lite | [跳转](https://mimo.mi.com/) | ¥34.32 | ¥39 | - / 季 | - / 年 | MiMo-V2-Pro, MiMo-V2-Omni, MiMo-V2-TTS | 无限制 | 无限制 | 无限制 | TTS限时免费 | • 60M(6000万) Credits,无5小时限额,支持集中消耗 • 倍率 MiMo-V2-Omni:1x, Pro 256k:2x, Pro 1M:4x | | 小米·MiMo | Standard | [跳转](https://mimo.mi.com/) | ¥87.12 | ¥99 | - / 季 | - / 年 | MiMo-V2-Pro, MiMo-V2-Omni, MiMo-V2-TTS | 无限制 | 无限制 | 无限制 | TTS限时免费 | • 200M(2亿) Credits,无5小时限额,支持集中消耗 • 倍率 MiMo-V2-Omni:1x, Pro 256k:2x, Pro 1M:4x | @@ -68,14 +43,30 @@ | Kimi | Moderato | [跳转](https://www.kimi.com/code) | - | ¥99 | - / 季 | ¥948 ~~1188~~ / 年 | Kimi-K2.5, Kimi-K2 | 未公开 | 未公开 | 未公开 | - | 4 倍额度, Agent 多任务并行 | | Kimi | Allegretto | [跳转](https://www.kimi.com/code) | - | ¥199 | - / 季 | ¥1908 ~~2388~~ / 年 | Kimi-K2.5, Kimi-K2 | 未公开 | 未公开 | 未公开 | 免费Kimi-Claw | 20 倍额度 | | Kimi | Allegro | [跳转](https://www.kimi.com/code) | - | ¥699 | - / 季 | ¥6708 ~~8388~~ / 年 | Kimi-K2.5, Kimi-K2 | 未公开 | 未公开 | 未公开 | 免费Kimi-Claw | 60 倍额度 | +| 摩尔线程 | Lite | [跳转](https://code.mthreads.com/) | - | ¥40 | ¥120 / 季 | - / 年 | GLM-4.7 | 1,200 | 9,000 | 18,000 | 国产GPU算力 | • 仅支持季度付费,¥120/季 • 基于MTT S5000国产GPU,硅基流动推理加速 | +| 摩尔线程 | Pro | [跳转](https://code.mthreads.com/) | - | ¥200 | ¥600 / 季 | - / 年 | GLM-4.7 | 6,000 | 45,000 | 90,000 | 国产GPU算力 | • 仅支持季度付费,¥600/季 • Lite用量的5倍 | +| 摩尔线程 | Max | [跳转](https://code.mthreads.com/) | - | ¥400 | ¥1200 / 季 | - / 年 | GLM-4.7 | 24,000 | 180,000 | 360,000 | 国产GPU算力, 优先保障 | • 仅支持季度付费,¥1200/季 • Pro用量的4倍,优先保障资源 | +| 快手·KwaiKAT | Mini | [跳转](https://www.streamlake.com/marketing/coding-plan) | ¥8.8 | ¥29 | - / 季 | - / 年 | KAT-Coder-Pro V1 | 40 | - | - | - | • 以Prompts计量,1 Prompt≈15次模型调用 • 自研KAT-Coder-Pro V1模型 | +| 快手·KwaiKAT | Starter | [跳转](https://www.streamlake.com/marketing/coding-plan) | ¥48 | ¥70 | - / 季 | - / 年 | KAT-Coder-Pro V1 | 100 | - | - | - | • 以Prompts计量 • 自研KAT-Coder-Pro V1模型 | +| 快手·KwaiKAT | Pro | [跳转](https://www.streamlake.com/marketing/coding-plan) | ¥96 | ¥140 | - / 季 | - / 年 | KAT-Coder-Pro V1 | 300 | - | - | - | • 以Prompts计量 • 自研KAT-Coder-Pro V1模型 | +| 快手·KwaiKAT | Max | [跳转](https://www.streamlake.com/marketing/coding-plan) | ¥240 | ¥350 | - / 季 | - / 年 | KAT-Coder-Pro V1 | 1,000 | - | - | - | • 以Prompts计量 • 自研KAT-Coder-Pro V1模型 | +| 无问芯穹 | Lite | [跳转](https://cloud.infini-ai.com/login?redirect=/genstudio/invitation&invite_code=BqXMhzFY) | ¥19.9 | ¥40 | - / 季 | - / 年 | Kimi-K2.5, MiniMax-M2.7, MiniMax-M2.5, DeepSeek-V3.2-Thinking, GLM-5 | 1,000 | 6,000 | 12,000 | - | • 聚合型平台,一份订阅多厂商模型 • 5小时1000次,7天6000次,30天12000次 • 暂时售罄 | +| 无问芯穹 | Pro | [跳转](https://cloud.infini-ai.com/login?redirect=/genstudio/invitation&invite_code=BqXMhzFY) | - | ¥200 | - / 季 | - / 年 | Kimi-K2.5, MiniMax-M2.7, MiniMax-M2.5, DeepSeek-V3.2-Thinking, GLM-5 | 5,000 | 30,000 | 60,000 | - | • 聚合型平台,一份订阅多厂商模型 • 5倍Lite用量 • 暂时售罄 | 💡 **说明** - 包季/包年价格中的划线数字表示原始价格(包月×3 或 包月×12),未划线的为实际优惠价格。 -- 使用表格邀请链接,部分平台可享优惠 +- 本页面的跳转链接包含各平台官方邀请码,这是平台官方公开的推广返利活动,任何人注册账号后均可获取自己的邀请码。使用邀请码订阅可享平台专属优惠(如折扣、赠金等),同时也支持本站继续运营。 +- 主要平台返利:智谱AI邀请好友首单享5%优惠;MiniMax邀请好友享9折+10%代金券;无问芯穹邀请购买可享首月优惠。 - 本页面数据仅供参考,价格及权益最终以平台官方公布为准,建议在选择套餐前仔细阅读各平台的官方条款和服务协议 +- 各平台计量单位不同(Prompts vs 次请求),直接比较数字无意义。1次用户提问通常触发5-30次模型调用 +- 5小时/周/月限额可能存在陷阱,例如5小时100次不等于一天500次,请以官方最新公告为准 ## 🤝 贡献 欢迎提交 Issue 或 Pull Request 来完善本项目的数据和功能。 + +--- + +> 由 LongCoderX 维护 diff --git a/config.json b/config.json index 8fd3697..9a543bc 100644 --- a/config.json +++ b/config.json @@ -2,75 +2,16 @@ "header": { "title": "AI Coding Plan 对比", "subtitle": "十二大平台 智谱AI、Kimi、MiniMax、小米·MiMo、字节·方舟、阿里·百炼、百度·千帆、腾讯云、京东云、摩尔线程、快手·KwaiKAT、无问芯穹,全面对比", - "models": "支持Qwen-3.5,Doubao-Seed-2.0,MiniMax-M2.7,MiniMax-M2.5,GLM-5.1,GLM-5,GLM-4.7,MiMo-V2-Pro,Kimi-K2.5,KAT-Coder-Pro V1,DeepSeek-V3.2等模型", + "models": "支持Qwen-3.5,Doubao-Seed-2.0,MiniMax-M2.7、MiniMax-M2.5,GLM-5.1、GLM-5、GLM-4.7,MiMo-V2-Pro,Kimi-K2.5,KAT-Coder-Pro V1,DeepSeek-V3.2等模型", "github": { "url": "https://github.com/LongCoderX/coding-plan-page", "text": "GitHub" } }, - "recommendations": [ - { - "name": "智谱AI", - "rating": 5, - "reasons": [ - "独占GLM5.1模型。+1", - "提供免费MCP次数。+1" - ] - }, - { - "name": "MiniMax", - "rating": 5, - "reasons": [ - "价格最便宜,且无需抢购。+1", - "独占MiniMax-M2.7模型。+1" - ] - }, - { - "name": "字节·方舟", - "rating": 4, - "reasons": [ - "独占Doubao-Seed-2.0系列模型。+1", - "不支持GLM-5,只支持GLM-4.7。-1", - "赠送真OpenClaw。+1" - ] - }, - { - "name": "阿里·百炼", - "rating": 3, - "reasons": [ - "独占Qwen3.5系列模型。+1", - "只有pro套餐,轻量使用性价比不高。-1" - ] - }, - { - "name": "小米·MiMo", - "rating": 3, - "reasons": [ - "独占Mimo模型。+1", - "按Token计费,性价比略低。-1" - ] - }, - { - "name": "无问芯穹", - "rating": 4, - "reasons": [ - "聚合多厂商模型,一份订阅多模型。+1", - "首月仅¥19.9,性价比高。+1" - ] - }, - { - "name": "摩尔线程", - "rating": 3, - "reasons": [ - "国产GPU算力底座,全栈国产化。+1", - "仅支持季度付费,资金占用高。-1" - ] - } - ], - "ratingGuide": "基准3颗星,价格优势劣势1分,模型优势或独占模型1分,其他优势1分", "notes": [ "包季/包年价格中的划线数字表示原始价格(包月×3 或 包月×12),未划线的为实际优惠价格。", - "使用表格邀请链接,部分平台可享优惠", + "本页面的跳转链接包含各平台官方邀请码,这是平台官方公开的推广返利活动,任何人注册账号后均可获取自己的邀请码。使用邀请码订阅可享平台专属优惠(如折扣、赠金等),同时也支持本站继续运营。", + "主要平台返利:智谱AI邀请好友首单享5%优惠;MiniMax邀请好友享9折+10%代金券;无问芯穹邀请购买可享首月优惠。", "本页面数据仅供参考,价格及权益最终以平台官方公布为准,建议在选择套餐前仔细阅读各平台的官方条款和服务协议", "各平台计量单位不同(Prompts vs 次请求),直接比较数字无意义。1次用户提问通常触发5-30次模型调用", "5小时/周/月限额可能存在陷阱,例如5小时100次不等于一天500次,请以官方最新公告为准" @@ -107,4 +48,4 @@ "reset": "重置", "apply": "确定" } -} +} \ No newline at end of file diff --git a/index.html b/index.html index 27ec74b..9ad5d55 100644 --- a/index.html +++ b/index.html @@ -3,28 +3,29 @@ - Coding Plan 对比工具 - 国内主流AI平台套餐对比 - - + Coding Plan 对比 - 国内AI平台套餐横评 + + - - + + - + - - - + + + + - - -
- -
- - - - - GitHub - -

AI Coding Plan 对比

-
火山引擎方舟、阿里云百炼、Kimi、智谱、MiniMax Coding Plan,全面对比
-
支持Doubao Seed 2.0,Qwen 3.5,MiniMax M2.5、GLM-5、Kimi-k2.5等模型
-
- - -
- -
- - -
- -
- -
- - -
- -
- -
- - -
- - -
- - -
+ *,*::before,*::after{box-sizing:border-box;margin:0;padding:0} + :root{ + --bg-deep:#06080d; + --bg-card:#0c1017; + --bg-card-hover:#111822; + --bg-surface:#151c28; + --border:#1a2332; + --border-bright:#2a3a52; + --text-primary:#e8edf5; + --text-secondary:#8899b0; + --text-muted:#556677; + --accent-cyan:#00d4ff; + --accent-green:#00ff88; + --accent-orange:#ff8a00; + --accent-pink:#ff3d8e; + --accent-purple:#a855f7; + --glow-cyan:0 0 30px rgba(0,212,255,.15); + --glow-green:0 0 30px rgba(0,255,136,.12); + --radius:12px; + --radius-lg:20px; + --font-sans:'Noto Sans SC',system-ui,sans-serif; + --font-mono:'JetBrains Mono',monospace; + } + html{scroll-behavior:smooth;font-size:16px} + body{ + font-family:var(--font-sans); + background:var(--bg-deep); + color:var(--text-primary); + line-height:1.7; + overflow-x:hidden; + -webkit-font-smoothing:antialiased; + } + a{color:inherit;text-decoration:none} + img{max-width:100%;display:block} + .container{max-width:1280px;margin:0 auto;padding:0 24px} + section{padding:80px 0} + + /* HEADER */ + .site-header{ + position:fixed;top:0;left:0;right:0;z-index:100; + background:rgba(6,8,13,.85);backdrop-filter:blur(20px); + border-bottom:1px solid var(--border); + } + .nav-inner{ + display:flex;align-items:center;justify-content:space-between; + height:64px; + } + .logo{ + font-family:var(--font-mono);font-weight:700;font-size:1.1rem; + color:var(--accent-cyan);letter-spacing:-.02em; + } + .nav-right{display:flex;gap:24px;align-items:center} + .nav-links{display:flex;gap:24px;align-items:center} + .nav-links a{ + font-size:.875rem;color:var(--text-secondary); + transition:color .2s;font-weight:400; + } + .nav-links a:hover{color:var(--text-primary)} + .github-link{ + display:inline-flex;align-items:center;gap:6px; + background:transparent;color:var(--text-secondary); + padding:8px 16px;border-radius:8px;font-weight:500;font-size:.8rem; + border:1px solid var(--border);transition:all .2s; + } + .github-link:hover{color:var(--text-primary);border-color:var(--border-bright);transform:translateY(-1px)} - -
- - -
+ /* HERO */ + .hero{ + padding-top:140px;padding-bottom:80px; + text-align:center;position:relative; + } + .hero::before{ + content:'';position:absolute;top:0;left:50%;transform:translateX(-50%); + width:800px;height:500px; + background:radial-gradient(ellipse,rgba(0,212,255,.06) 0%,transparent 70%); + pointer-events:none; + } + .hero-badge{ + display:inline-flex;align-items:center;gap:8px; + background:rgba(0,212,255,.08);border:1px solid rgba(0,212,255,.2); + padding:6px 16px;border-radius:100px;font-size:.8rem; + color:var(--accent-cyan);margin-bottom:28px; + font-family:var(--font-mono); + } + .hero-badge::before{content:'>';opacity:.5} + .hero h1{ + font-weight:900; + font-size:clamp(2.2rem,5vw,3.8rem); + line-height:1.15;letter-spacing:-.03em; + margin-bottom:16px; + } + .hero h1 .gradient{ + background:linear-gradient(135deg,var(--accent-cyan),var(--accent-green)); + -webkit-background-clip:text;-webkit-text-fill-color:transparent; + background-clip:text; + } + .hero-sub{ + font-size:1.1rem;color:var(--text-secondary); + max-width:600px;margin:0 auto 40px;line-height:1.8;font-weight:300; + } + .hero-stats{ + display:flex;justify-content:center;gap:48px;flex-wrap:wrap; + } + .hero-stat{text-align:center} + .hero-stat .num{ + font-family:var(--font-mono);font-size:2rem;font-weight:700; + color:var(--accent-cyan); + } + .hero-stat .label{font-size:.8rem;color:var(--text-muted);margin-top:4px} + + /* QUICK COMPARE */ + .compare-section{background:var(--bg-card);border-top:1px solid var(--border);border-bottom:1px solid var(--border)} + .section-header{text-align:center;margin-bottom:40px} + .section-header h2{ + font-size:clamp(1.6rem,3vw,2.2rem);font-weight:900; + letter-spacing:-.02em;margin-bottom:10px; + } + .section-header p{color:var(--text-secondary);font-size:.95rem;font-weight:300} + .table-wrap{ + overflow-x:auto;border-radius:var(--radius-lg); + border:1px solid var(--border); + scrollbar-width:thin;scrollbar-color:var(--border-bright) transparent; + } + .table-wrap::-webkit-scrollbar{height:6px} + .table-wrap::-webkit-scrollbar-track{background:transparent} + .table-wrap::-webkit-scrollbar-thumb{background:var(--border-bright);border-radius:3px} + .compare-table{ + width:100%;min-width:900px;border-collapse:collapse; + font-size:.875rem; + } + .compare-table th,.compare-table td{ + padding:14px 18px;text-align:left; + border-bottom:1px solid var(--border); + white-space:nowrap; + } + .compare-table thead th{ + background:var(--bg-surface);color:var(--text-muted); + font-weight:500;font-size:.72rem;letter-spacing:.06em; + text-transform:uppercase; + } + .compare-table tbody tr{transition:background .2s} + .compare-table tbody tr:hover{background:rgba(0,212,255,.03)} + .compare-table tbody tr:last-child td{border-bottom:none} + .compare-table .platform-name{ + font-weight:700;color:var(--text-primary); + display:flex;align-items:center;gap:10px; + } + .compare-table .dot{ + width:8px;height:8px;border-radius:50%;flex-shrink:0; + } + .price-highlight{ + font-family:var(--font-mono);font-weight:700; + color:var(--accent-green);font-size:1rem; + } + .tag{ + display:inline-block;padding:2px 8px;border-radius:4px; + font-size:.7rem;font-weight:700;letter-spacing:.03em; + } + .tag-new{background:rgba(0,212,255,.12);color:var(--accent-cyan)} + .tag-hot{background:rgba(255,61,142,.15);color:var(--accent-pink)} + .tag-deal{background:rgba(255,138,0,.12);color:var(--accent-orange)} + .model-list{ + font-family:var(--font-mono);font-size:.75rem; + color:var(--text-secondary);max-width:200px; + white-space:normal;line-height:1.6;word-break:break-word; + } - -
- - -
+ /* FILTER BAR */ + .filter-section{ + padding:40px 0; + } + .filter-bar{ + display:flex;flex-wrap:wrap;gap:12px;align-items:center; + } + .filter-dropdown{position:relative} + .filter-btn{ + background:var(--bg-card);border:1px solid var(--border); + color:var(--text-secondary);padding:10px 16px; + border-radius:var(--radius);font-size:.85rem;cursor:pointer; + display:flex;align-items:center;gap:8px;transition:all .2s; + font-weight:500;min-height:44px; + } + .filter-btn:hover{background:var(--bg-card-hover);border-color:var(--border-bright);color:var(--text-primary)} + .filter-btn.active{background:rgba(0,212,255,.1);border-color:var(--accent-cyan);color:var(--accent-cyan)} + .filter-btn .arrow{opacity:.5;transition:transform .3s} + .filter-btn.active .arrow{transform:rotate(180deg);opacity:1} + .filter-btn .count{ + background:var(--accent-cyan);color:var(--bg-deep); + font-size:.7rem;padding:2px 8px;border-radius:10px;font-weight:700; + } + .dropdown-menu{ + position:absolute;top:calc(100%+8px);left:0; + background:var(--bg-card);border:1px solid var(--border); + border-radius:var(--radius-lg);padding:16px;min-width:240px; + box-shadow:0 20px 40px rgba(0,0,0,.4);z-index:1000; + display:none; + } + .dropdown-menu.show{display:block} + .dropdown-section{margin-bottom:12px} + .dropdown-section:last-child{margin-bottom:0} + .dropdown-title{ + font-size:.7rem;color:var(--text-muted);margin-bottom:10px; + font-weight:600;text-transform:uppercase;letter-spacing:.05em; + } + .checkbox-group{display:flex;flex-direction:column;gap:4px;max-height:200px;overflow-y:auto} + .checkbox-item{ + display:flex;align-items:center;gap:10px;cursor:pointer; + padding:8px 10px;border-radius:6px;transition:background .15s; + } + .checkbox-item:hover{background:var(--bg-surface)} + .checkbox-item input{width:16px;height:16px;accent-color:var(--accent-cyan)} + .checkbox-item label{font-size:.85rem;color:var(--text-primary);cursor:pointer;flex:1} + .price-inputs{display:flex;gap:10px;align-items:center} + .price-input{ + width:100%;background:var(--bg-surface);border:1px solid var(--border); + color:var(--text-primary);padding:8px 12px;border-radius:6px;font-size:.85rem; + } + .price-input:focus{outline:none;border-color:var(--accent-cyan)} + .price-separator{color:var(--text-muted);font-size:.85rem} + .price-slider-container{padding:8px 0} + .price-slider{position:relative;height:24px;margin:10px 0} + .slider-track{position:absolute;top:50%;left:0;right:0;height:6px;background:var(--border);border-radius:3px;transform:translateY(-50%)} + .slider-range{position:absolute;top:50%;height:6px;background:var(--accent-cyan);border-radius:3px;transform:translateY(-50%)} + .slider-thumb{ + position:absolute;top:50%;width:18px;height:18px; + background:white;border:2px solid var(--accent-cyan);border-radius:50%; + transform:translate(-50%,-50%);cursor:grab;transition:transform .2s; + } + .slider-thumb:hover{transform:translate(-50%,-50%) scale(1.15)} + .slider-values{display:flex;justify-content:space-between;margin-top:4px} + .slider-value{font-size:.8rem;color:var(--text-secondary)} + .dropdown-actions{display:flex;gap:10px;margin-top:16px;padding-top:12px;border-top:1px solid var(--border)} + .dropdown-btn{ + flex:1;padding:8px 14px;border:none;border-radius:6px; + font-size:.8rem;cursor:pointer;transition:all .2s;font-weight:600; + } + .dropdown-btn.primary{background:var(--accent-cyan);color:var(--bg-deep)} + .dropdown-btn.primary:hover{filter:brightness(1.1)} + .dropdown-btn.secondary{background:var(--bg-surface);color:var(--text-secondary);border:1px solid var(--border)} + .dropdown-btn.secondary:hover{background:var(--border)} + .reset-btn{ + background:transparent;border:1px solid var(--border);color:var(--text-secondary); + padding:10px 16px;border-radius:var(--radius);font-size:.85rem;cursor:pointer; + transition:all .2s;font-weight:500;min-height:44px; + } + .reset-btn:hover{background:var(--bg-card-hover);color:var(--text-primary);border-color:var(--border-bright)} + .stats-bar{ + color:var(--text-muted);font-size:.8rem; + margin-left:auto; + } + .stats-bar strong{color:var(--text-secondary)} - -
- - -
+ /* TABLE */ + .table-wrapper{ + background:var(--bg-card);border-radius:var(--radius-lg); + overflow:hidden;border:1px solid var(--border); + } + .table-scroll{ + overflow-x:auto; + scrollbar-width:thin;scrollbar-color:var(--border-bright) transparent; + } + .table-scroll::-webkit-scrollbar{height:8px} + .table-scroll::-webkit-scrollbar-track{background:var(--bg-surface)} + .table-scroll::-webkit-scrollbar-thumb{background:var(--border-bright);border-radius:4px} + table{width:100%;border-collapse:collapse;min-width:1100px} + th,td{ + padding:14px 18px;text-align:left;font-size:.85rem; + border-bottom:1px solid var(--border);white-space:nowrap; + } + thead{background:var(--bg-surface)} + th{ + font-weight:600;color:var(--text-muted);font-size:.75rem; + text-transform:uppercase;letter-spacing:.05em;cursor:pointer; + user-select:none;transition:background .2s; + } + th:hover{background:var(--bg-card-hover)} + th.sort-asc::after{content:' ↑';color:var(--accent-cyan)} + th.sort-desc::after{content:' ↓';color:var(--accent-cyan)} + tbody tr{transition:background .15s} + tbody tr:hover{background:rgba(0,212,255,.02)} + tbody tr:last-child td{border-bottom:none} + .table-scroll{position:relative} + thead th{position:sticky;top:0;z-index:20} + td.sticky-first,th.sticky-first{ + position:sticky;z-index:10;background:var(--bg-card); + } + td.sticky-second,th.sticky-second{ + position:sticky;z-index:10;background:var(--bg-card); + } + td.sticky-third,th.sticky-third{ + position:sticky;z-index:10;background:var(--bg-card); + } + td.sticky-first,th.sticky-first{left:0;border-right:2px solid var(--border)} + td.sticky-second,th.sticky-second{border-right:2px solid var(--border)} + td.sticky-third,th.sticky-third{border-right:2px solid var(--border)} + .action-btn{position:relative;z-index:5}} + .vendor-name{font-weight:600;font-size:.9rem} + .plan-name{font-weight:600;font-size:.9rem} + .price{color:var(--accent-green);font-weight:500} + .price-monthly{color:var(--accent-cyan);font-weight:500} + .price-normal{color:var(--text-primary)} + .price-original{text-decoration:line-through;font-size:.75rem;color:var(--text-muted);margin-left:4px} + .action-btn{ + display:inline-flex;align-items:center;gap:6px; + background:linear-gradient(135deg,var(--accent-cyan),#0099cc); + color:var(--bg-deep);padding:8px 16px;border-radius:8px; + font-weight:600;font-size:.8rem;transition:all .2s; + } + .action-btn:hover{transform:translateY(-1px);box-shadow:var(--glow-cyan);filter:brightness(1.1)} + .model-tag{ + display:inline-block;background:var(--bg-surface);color:var(--text-secondary); + padding:3px 8px;border-radius:4px;font-size:.7rem;margin-right:4px;margin-bottom:4px; + border:1px solid var(--border); + } + .benefit{ + display:inline-block;background:rgba(255,138,0,.1);color:var(--accent-orange); + padding:3px 8px;border-radius:4px;font-size:.7rem;margin-right:4px;margin-bottom:4px; + } + .note{color:var(--text-secondary);font-size:.8rem;white-space:pre-line} + .empty-state{text-align:center;padding:60px 24px} + .empty-state-icon{font-size:40px;margin-bottom:12px;opacity:.4} + .empty-state-text{color:var(--text-secondary);font-size:1rem;font-weight:500;margin-bottom:6px} + .empty-state-hint{font-size:.85rem;color:var(--text-muted)} + .loading{text-align:center;padding:60px 24px;color:var(--text-secondary);font-size:.9rem} + .loading::after{content:'...';animation:dots 1.5s steps(4,end) infinite} + @keyframes dots{0%,20%{content:'.'}40%{content:'..'}60%,100%{content:'...'}} + + /* NOTES */ + .notes-section{margin-top:40px;padding:24px 0} + .notes-section h3{ + font-size:1rem;font-weight:600;color:var(--text-primary);margin-bottom:12px; + display:flex;align-items:center;gap:8px; + } + .notes-section ul{list-style:none} + .notes-section li{ + font-size:.85rem;color:var(--text-muted);padding:6px 0; + padding-left:16px;position:relative; + } + .notes-section li::before{content:'•';position:absolute;left:0;color:var(--text-muted)} - -
- - -
+ /* FOOTER */ + .site-footer{ + border-top:1px solid var(--border); + padding:40px 0;text-align:center; + } + .footer-disclaimer{ + font-size:.75rem;color:var(--text-muted); + max-width:600px;margin:0 auto 12px;line-height:1.8; + } + .footer-links{display:flex;justify-content:center;gap:20px;margin-bottom:12px} + .footer-links a{font-size:.8rem;color:var(--text-secondary);transition:color .2s} + .footer-links a:hover{color:var(--accent-cyan)} + .footer-copy{font-size:.7rem;color:var(--text-muted)} + + /* RESPONSIVE */ + @media(max-width:900px){ + .hero-stats{gap:24px} + .nav-links{display:none} + section{padding:56px 0} + th,td{padding:12px 14px;font-size:.8rem} + } + @media(max-width:640px){ + .container{padding:0 16px} + .hero h1{font-size:1.8rem} + .hero-sub{font-size:.95rem} + .filter-bar{gap:8px} + .dropdown-menu{ + position:fixed;left:50%!important;top:50%!important; + transform:translate(-50%,-50%);min-width:280px;max-width:calc(100vw-48px); + } + } + + + - - + + + +
+ + +
+
+
2026 · 持续更新中
+

国内 Coding Plan 对比

+

智谱GLM · MiniMax · Kimi · 火山引擎方舟 · 阿里云百炼 · 腾讯云
价格、模型、用量限制全面横评

+
+
12
平台对比
+
¥29
最低月付
+
10+
支持模型
+
20+
编程工具
+
+
+
+ + +
+
+
+

快速对比

+

各平台入门套餐一览,找到最适合你的起点

+
+
+ + + + + + + + + + + + + + +
平台入门价连续包月核心模型用量参考亮点
+
+
+
+ + +
+
+
+
+ + +
- -
- 显示 0 / 0 个套餐 -
+
+ + +
- -
-
- - - - - - - - - - - - - - - - - - - - - -
平台套餐跳转链接首月价格连续包月连续包季连续包年支持模型5小时请求数每周请求数每月总请求数其他权益备注
+
+ +
+
- + sortData(column, direction); + }); +}); + +window.addEventListener('resize', updateStickyColumns); +tableScroll.addEventListener('scroll', () => { + requestAnimationFrame(updateStickyColumns); +}); + +async function loadConfig() { + try { + const response = await fetch(CONFIG_FILE_PATH, { cache: 'no-store' }); + if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`); + appConfig = await response.json(); + applyConfig(); + } catch (error) { + console.error('加载配置失败:', error); + appConfig = { + header: { + title: "AI Coding Plan 对比", + subtitle: "国内主流AI平台套餐全面对比", + models: "支持GLM、MiniMax、Kimi等多模型" + }, + notes: [] + }; + applyConfig(); + } +} + +function applyConfig() { + if (appConfig.header) { + const h = appConfig.header; + document.title = `${h.title} - Coding Plan 对比`; + document.getElementById('heroSub').innerHTML = h.subtitle.replace(/·/g, '
'); + + if (h.github) { + document.getElementById('githubLink').href = h.github.url; + } + } + + if (appConfig.notes && appConfig.notes.length > 0) { + const notesList = document.getElementById('notesList'); + notesList.innerHTML = appConfig.notes.map(note => `
  • ${note}
  • `).join(''); + } +} + +function processPrices(item, index) { + let firstMonthPrice = parseFloat(item.firstMonthPrice); + let monthlyPrice = parseFloat(item.monthlyPrice); + let quarterlyPrice = parseFloat(item.quarterlyPrice); + let yearlyPrice = parseFloat(item.yearlyPrice); + + if (isNaN(firstMonthPrice) || item.firstMonthPrice === '-') { + firstMonthPrice = monthlyPrice; + } + + if (isNaN(quarterlyPrice) || item.quarterlyPrice === '-') { + quarterlyPrice = monthlyPrice * 3; + } + + if (isNaN(yearlyPrice) || item.yearlyPrice === '-') { + yearlyPrice = quarterlyPrice * 3; + } + + const preserveString = (value) => { + if (value === '未公开' || value === '无限制') return value; + const num = parseInt(value); + return isNaN(num) ? 0 : num; + }; + + item.fiveHoursRequests = preserveString(item.fiveHoursRequests); + item.weeklyRequests = preserveString(item.weeklyRequests); + item.monthlyRequests = preserveString(item.monthlyRequests); + + return { + ...item, + firstMonthPrice, + monthlyPrice, + quarterlyPrice, + yearlyPrice, + originalIndex: index + }; +} + +async function loadData() { + try { + tableBody.innerHTML = ` + + +
    加载数据中
    + + + `; + + const response = await fetch(PLANS_FILE_PATH, { cache: 'no-store' }); + if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`); + const plansData = await response.json(); + allPlans = plansData.map((item, index) => processPrices(item, index)); + filteredPlans = [...allPlans]; + + const vendorSet = new Set(allPlans.map(p => p['vendor'])); + document.getElementById('platformCount').textContent = vendorSet.size; + + initFilters(); + initPriceSliders(); + renderCompareTable(); + applyFilters(); + + } catch (error) { + console.error('加载数据失败:', error); + tableBody.innerHTML = ` + + +
    +
    +
    数据加载失败
    +
    请检查 JSON 文件路径: ${PLANS_FILE_PATH}
    +
    + + + `; + } +} + +document.addEventListener('DOMContentLoaded', async () => { + await loadConfig(); + await loadData(); +}); + - + \ No newline at end of file diff --git a/robots.txt b/robots.txt new file mode 100644 index 0000000..603b123 --- /dev/null +++ b/robots.txt @@ -0,0 +1,4 @@ +User-agent: * +Allow: / + +Sitemap: https://longcoderx.github.io/coding-plan-page/sitemap.xml \ No newline at end of file diff --git a/scripts/generate-readme.js b/scripts/generate-readme.js index 77edf4c..d4477c2 100644 --- a/scripts/generate-readme.js +++ b/scripts/generate-readme.js @@ -1,6 +1,9 @@ const fs = require('fs'); const path = require('path'); +const ONLINE_URL = process.env.ONLINE_URL || 'https://longcoderx.github.io/coding-plan-page/'; +const FOOTER = process.env.FOOTER || '由 LongCoderX 维护'; + // 读取数据文件 const configPath = path.join(__dirname, '../config.json'); const plansPath = path.join(__dirname, '../plans.json'); @@ -8,34 +11,10 @@ const plansPath = path.join(__dirname, '../plans.json'); const config = JSON.parse(fs.readFileSync(configPath, 'utf8')); const plans = JSON.parse(fs.readFileSync(plansPath, 'utf8')); -// 生成星星 -function generateStars(rating) { - return '⭐️'.repeat(rating); -} - -// 生成平台推荐 -function generateRecommendations(recommendations) { - let md = ''; - recommendations.forEach((rec, index) => { - md += `${index + 1}. ${rec.name} ${generateStars(rec.rating)}\n`; - rec.reasons.forEach(reason => { - md += ` - ${reason}\n`; - }); - }); - return md; -} - -// 生成评分说明 -function generateRatingGuide(ratingGuide) { - if (!ratingGuide) return ''; - return `\n**评分标准**: ${ratingGuide}\n`; -} - // 格式化价格 function formatPrice(price) { if (price === '-') return '-'; if (typeof price === 'number') { - // 整数显示为 ¥7.9,小数显示为 ¥7.90 return `¥${price}`; } return price; @@ -55,14 +34,13 @@ function formatStrikethrough(price, originalPrice) { return formatPrice(price); } -// 清理表格单元格内容(移除换行符,防止破坏表格格式) +// 清理表格单元格内容 function escapeTableCell(text) { if (!text) return '-'; - // 将换行符替换为空格 return String(text).replace(/\n/g, ' ').trim() || '-'; } -// 计算原始价格(包月×3 或 包月×12) +// 计算原始价格 function getOriginalPrice(currentPrice, multiplier) { if (currentPrice === '-' || typeof currentPrice !== 'number') return null; return currentPrice * multiplier; @@ -70,20 +48,18 @@ function getOriginalPrice(currentPrice, multiplier) { // 生成套餐对比表 function generateTable(plans) { - let md = '| 平台 | 套餐 | 链接 | 首月价格 | 连续包月 | 连续包季 | 连续包年 | 支持模型 | 5小时请求数 | 每周请求数 | 每月总请求数 | 其他权益 | 备注 |\n'; - md += '|------|------|---------|---------|---------|---------|---------|---------|-----------|-----------|-----------|---------|------|\n'; - + let md = `| 平台 | 套餐 | 链接 | 首月价格 | 连续包月 | 连续包季 | 连续包年 | 支持模型 | 5小时请求数 | 每周请求数 | 每月总请求数 | 其他权益 | 备注 |\n`; + md += `|------|------|---------|---------|---------|---------|---------|---------|-----------|-----------|-----------|---------|------|\n`; + plans.forEach(plan => { const vendor = plan.vendor; const planName = plan.plan; const link = `[跳转](${plan.action})`; const firstMonth = formatPrice(plan.firstMonthPrice); const monthly = formatPrice(plan.monthlyPrice); - // 包季:有值时加 " / 季" - const quarterly = plan.quarterlyPrice !== '-' + const quarterly = plan.quarterlyPrice !== '-' ? formatStrikethrough(plan.quarterlyPrice, getOriginalPrice(plan.monthlyPrice, 3)) + ' / 季' : '- / 季'; - // 包年:有值时加 " / 年" const yearly = plan.yearlyPrice !== '-' ? formatStrikethrough(plan.yearlyPrice, getOriginalPrice(plan.monthlyPrice, 12)) + ' / 年' : '- / 年'; @@ -96,14 +72,14 @@ function generateTable(plans) { md += `| ${vendor} | ${planName} | ${link} | ${firstMonth} | ${monthly} | ${quarterly} | ${yearly} | ${models} | ${fiveHoursRequests} | ${weeklyRequests} | ${monthlyRequests} | ${benefits} | ${note} |\n`; }); - + return md; } // 生成完整 README function generateReadme() { - const { recommendations, notes } = config; - + const { notes } = config; + let md = `# AI Coding Plan 对比工具 ## 📖 简介 @@ -116,11 +92,6 @@ ${config.header.models} 直接访问:[${ONLINE_URL}](${ONLINE_URL}) - -## 平台推荐 - -${generateRecommendations(recommendations)}${generateRatingGuide(config.ratingGuide)} - ## 📋 套餐对比表 ${generateTable(plans)} @@ -144,12 +115,11 @@ ${notes.map(n => `- ${n}`).join('\n')} // 主函数 function main() { const readme = generateReadme(); - - // 直接输出到 README.md + const outputPath = path.join(__dirname, '../README.md'); fs.writeFileSync(outputPath, readme, 'utf8'); - + console.log('README.md 已生成'); } -main(); +main(); \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000..b24531d --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,9 @@ + + + + https://longcoderx.github.io/coding-plan-page/ + 2026-04-06 + weekly + 1.0 + + \ No newline at end of file