diff --git a/CHANGELOG.md b/CHANGELOG.md index 205650e..9af2ee5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,8 @@ # Changelog -## v1.3.0(2026-09-12)星图点亮体系重构 +## v1.2.0(2026-09-13)星图点亮体系重构 + +- **登录修复**:微信一键登录恢复(Docker 迁移环境变量补齐 + 容器网络修复);趋势页筛选按钮单行紧凑化、产品图标修复 - **详情页修复**:正文按段落渲染,71 条知识不再"暂无内容" - **读后检测**:AI 批量生成 36 道检测题,服务端判题,答对点亮星球(点亮进度/streak 入档案) diff --git a/client/src/manifest.json b/client/src/manifest.json index 3c9f343..7645e38 100644 --- a/client/src/manifest.json +++ b/client/src/manifest.json @@ -1,7 +1,7 @@ { "name": "宇之然AI维度", "appid": "wxdad62baf4ccd09e3", - "versionName": "1.3.0", + "versionName": "1.2.0", "versionCode": "100", "description": "AI 知识探索社区 — 从5个维度系统理解人工智能", "uni-app": { diff --git a/client/src/pages/profile/profile.vue b/client/src/pages/profile/profile.vue index 7a59461..da5f297 100644 --- a/client/src/pages/profile/profile.vue +++ b/client/src/pages/profile/profile.vue @@ -147,7 +147,7 @@ import { knowledgeApi, aiChatApi } from '@/utils/api' import { DIMENSIONS } from '@/utils/dimensions' import AppIcon from '@/components/AppIcon.vue' -const VERSION = '1.3.0' +const VERSION = '1.2.0' const SUB_GUEST = '游客 · 点亮进度保存在本机,登录后同步' const SUB_USER = '已点亮 {n} 颗星球 · 连续 {d} 天' const PLAN_FREE = '✦ 免费版' diff --git a/docs/版本规则.md b/docs/版本规则.md new file mode 100644 index 0000000..97b70c7 --- /dev/null +++ b/docs/版本规则.md @@ -0,0 +1,28 @@ +# 版本号规则(宇之然AI维度 小程序/H5) + +> 格式:`主版本.次版本.修订号`(如 `1.2.0`),线上已发布版本为递增基线,**不跳号**。 + +## 递增规则 + +| 位 | 何时 +1 | 例子 | +|---|---|---| +| **主版本** X | 产品形态重构、世界观/信息架构大改、含不兼容数据迁移 | 点亮体系之后若做"维度2.0"社区重构 → `2.0.0` | +| **次版本** Y | 新功能模块、新页面、成组的体验升级 | 星图点亮体系(v1.1.5 → `1.2.0`);后续新增周挑战 → `1.3.0` | +| **修订号** Z | bug 修复、文案/样式微调、配置变更、性能优化 | 登录修复+筛选按钮 → `1.2.1` | + +**判断口诀**:改 bug 不加功能 → 只动尾号;加功能不改架构 → 动次版本;连架构带数据一起变 → 动主版本。 + +## 执行约束(防漂移) + +1. **唯一事实来源**:`client/src/manifest.json` 的 `versionName`。发版前先改它。 +2. 页面内展示的版本号(如"我的"页)与 `CHANGELOG.md` 条目同步更新为同一版本。 +3. 上传脚本 `scripts/upload-wx.js` **自动读取 manifest 版本号**;`--version` 显式传参必须与 manifest 完全一致,否则拒绝上传。 +4. 一次提审对应一个版本号;提审被拒后修改重传**仍用同一版本号**(微信平台以最后一次上传为准),通过并发布后才递增。 +5. 版本号只从"线上已发布版"递增,与中间上传但未发布的版本无关。 + +## 历史版本对照 + +| 版本 | 状态 | 内容 | +|---|---|---| +| 1.1.5 | 已发布(线上) | 分享优化+下拉刷新+触感反馈+SEO 路由 | +| 1.2.0 | 待提审 | 星图点亮体系重构(详情页修复/读后检测/游客问答/维度精灵/深色模式/登录与筛选修复) | diff --git a/scripts/upload-wx.js b/scripts/upload-wx.js index b72ac00..d4cf55c 100644 --- a/scripts/upload-wx.js +++ b/scripts/upload-wx.js @@ -1,10 +1,51 @@ +/** + * 微信小程序上传脚本 + * + * 用法: + * node scripts/upload-wx.js # 版本号自动取 client/src/manifest.json 的 versionName + * node scripts/upload-wx.js --desc "修复描述" + * node scripts/upload-wx.js --version 1.2.1 # 必须与 manifest 一致,否则拒绝上传 + * + * 版本规则见 docs/版本规则.md: + * 主版本=产品形态重构;次版本=新功能模块;修订号=修复与微调 + */ const ci = require('miniprogram-ci'); const path = require('path'); const fs = require('fs'); +function parseArgs(argv) { + const out = {}; + for (let i = 0; i < argv.length; i++) { + const a = argv[i]; + if (a.startsWith('--')) { + const key = a.slice(2); + const next = argv[i + 1]; + if (next && !next.startsWith('--')) { out[key] = next; i++; } + else out[key] = true; + } else { + // 兼容位置参数:第一个是版本,第二个是描述 + if (out.version === undefined) out.version = a; + else if (out.desc === undefined) out.desc = a; + } + } + return out; +} + (async () => { - const version = process.argv[2] || '1.0.0'; - const desc = process.argv[3] || 'default'; + const args = parseArgs(process.argv.slice(2)); + const manifest = JSON.parse( + fs.readFileSync(path.resolve(__dirname, '../client/src/manifest.json'), 'utf-8') + ); + const manifestVersion = manifest.versionName; + + // 版本号唯一事实来源是 manifest.json;显式传参必须一致(防止包与元数据漂移) + if (args.version && args.version !== manifestVersion) { + console.log(`ERROR: --version ${args.version} 与 manifest.json versionName ${manifestVersion} 不一致。版本号请改 manifest.json(唯一事实来源)。`); + process.exit(1); + } + + const version = manifestVersion; + const desc = args.desc || 'release'; const projectPath = path.resolve(__dirname, '../client/dist/build/mp-weixin'); const project = new ci.Project({ @@ -16,7 +57,7 @@ const fs = require('fs'); }); console.log('START_UPLOAD'); - console.log('version=' + version + ' desc=' + desc); + console.log(`version=${version} desc=${desc}`); const uploadResult = await ci.upload({ project, @@ -31,4 +72,4 @@ const fs = require('fs'); })().catch(err => { console.log('ERROR:' + err.message); process.exit(1); -}); \ No newline at end of file +});