Przeglądaj źródła

chore: auto bump version and changelog [skip ci]

iwt 1 tydzień temu
rodzic
commit
7e869a7928

+ 6 - 6
cfc-backend/src/main/java/com/etotem/cfc/service/HealthReportService.java

@@ -255,7 +255,7 @@ public class HealthReportService {
                                     .or(w2 -> w2.isNull(HealthReport::getSubjectId)
                                     .or(w2 -> w2.isNull(HealthReport::getSubjectId)
                                             .in(HealthReport::getUserId, memberIds)))
                                             .in(HealthReport::getUserId, memberIds)))
                             .eq(HealthReport::getStatus, "active")
                             .eq(HealthReport::getStatus, "active")
-                            .orderByDesc(HealthReport::getReportDate));
+                            .orderByDesc(HealthReport::getCreatedAt));
         }
         }
 
 
         // 3. 补充按报告表 family_id 匹配的报告(去重)
         // 3. 补充按报告表 family_id 匹配的报告(去重)
@@ -263,7 +263,7 @@ public class HealthReportService {
                 new LambdaQueryWrapper<HealthReport>()
                 new LambdaQueryWrapper<HealthReport>()
                         .eq(HealthReport::getFamilyId, familyId)
                         .eq(HealthReport::getFamilyId, familyId)
                         .eq(HealthReport::getStatus, "active")
                         .eq(HealthReport::getStatus, "active")
-                        .orderByDesc(HealthReport::getReportDate));
+                        .orderByDesc(HealthReport::getCreatedAt));
         Set<Long> seen = new HashSet<>();
         Set<Long> seen = new HashSet<>();
         for (HealthReport r : reports) {
         for (HealthReport r : reports) {
             seen.add(r.getId());
             seen.add(r.getId());
@@ -273,10 +273,10 @@ public class HealthReportService {
                 reports.add(r);
                 reports.add(r);
             }
             }
         }
         }
-        // 按报告日期倒
+        // 按上传时间倒序(createdAt),默认按上传时间排
         reports.sort((a, b) -> {
         reports.sort((a, b) -> {
-            java.util.Date da = a.getReportDate();
-            java.util.Date db = b.getReportDate();
+            java.util.Date da = a.getCreatedAt();
+            java.util.Date db = b.getCreatedAt();
             if (da == null) return 1;
             if (da == null) return 1;
             if (db == null) return -1;
             if (db == null) return -1;
             return db.compareTo(da);
             return db.compareTo(da);
@@ -318,7 +318,7 @@ public class HealthReportService {
                                 .or(w2 -> w2.isNull(HealthReport::getSubjectId)
                                 .or(w2 -> w2.isNull(HealthReport::getSubjectId)
                                         .in(HealthReport::getUserId, ids)))
                                         .in(HealthReport::getUserId, ids)))
                         .eq(HealthReport::getStatus, "active")
                         .eq(HealthReport::getStatus, "active")
-                        .orderByDesc(HealthReport::getReportDate)
+                        .orderByDesc(HealthReport::getCreatedAt)
         );
         );
     }
     }
 
 

+ 29 - 1
cfc-frontend/pages/health/report-upload.vue

@@ -205,7 +205,26 @@ export default {
       uploadReportOnly(filePath).then(function(res) {
       uploadReportOnly(filePath).then(function(res) {
         uni.hideLoading()
         uni.hideLoading()
         self.uploading = false
         self.uploading = false
-        var draftId = res.data && res.data.draftId
+        var data = res.data || {}
+        // 处理重复上传:duplicate=true
+        if (data.duplicate) {
+          if (data.collecting) {
+            self.collectDraftId = data.draftId
+            self.collecting = true
+            self.collectError = data.message || '该报告正在解析中,请稍候'
+            self.collectFileName = fileName || '报告文件'
+            self.startCollectPolling(data.draftId)
+          } else {
+            // 已完成,跳转详情
+            var reportId = data.reportId
+            if (reportId) {
+              self.goToDetail(reportId, 'gut_flora')
+            }
+          }
+          uni.showToast({ title: data.message || '该报告已上传过', icon: 'none', duration: 3000 })
+          return
+        }
+        var draftId = data.draftId
         if (!draftId) {
         if (!draftId) {
           uni.showToast({ title: (res && res.message) || '上传失败', icon: 'none' })
           uni.showToast({ title: (res && res.message) || '上传失败', icon: 'none' })
           return
           return
@@ -280,6 +299,15 @@ export default {
       this.stopCollectPolling()
       this.stopCollectPolling()
       uni.redirectTo({ url: '/pages/health/report-list' })
       uni.redirectTo({ url: '/pages/health/report-list' })
     },
     },
+    goToDetail: function(reportId, reportType) {
+      var url
+      if (reportType === 'gut_flora') {
+        url = '/pages/health/gut-flora-detail?reportId=' + reportId
+      } else {
+        url = '/pages/health/report-detail?reportType=' + (reportType || 'gut_flora') + '&reportId=' + reportId
+      }
+      uni.redirectTo({ url: url })
+    },
     cancelCollect: function() {
     cancelCollect: function() {
       this.stopCollectPolling()
       this.stopCollectPolling()
       this.collecting = false
       this.collecting = false

+ 1 - 1
cfc-web/.last_build_commit

@@ -1 +1 @@
-9062f32a3b4790b960d34af09ba1a0d0416c6954
+2dcd930d2208a2593a959651a97de45c8bd99b3e

+ 2 - 2
cfc-web/package-lock.json

@@ -1,12 +1,12 @@
 {
 {
   "name": "cfc-web",
   "name": "cfc-web",
-  "version": "1.0.1344",
+  "version": "1.0.1345",
   "lockfileVersion": 3,
   "lockfileVersion": 3,
   "requires": true,
   "requires": true,
   "packages": {
   "packages": {
     "": {
     "": {
       "name": "cfc-web",
       "name": "cfc-web",
-      "version": "1.0.1344",
+      "version": "1.0.1345",
       "dependencies": {
       "dependencies": {
         "@wangeditor/editor": "^5.1.23",
         "@wangeditor/editor": "^5.1.23",
         "@wangeditor/editor-for-vue": "^1.0.2",
         "@wangeditor/editor-for-vue": "^1.0.2",

+ 1 - 1
cfc-web/package.json

@@ -1,6 +1,6 @@
 {
 {
   "name": "cfc-web",
   "name": "cfc-web",
-  "version": "1.0.1345",
+  "version": "1.0.1346",
   "private": true,
   "private": true,
   "scripts": {
   "scripts": {
     "dev": "vue-cli-service serve",
     "dev": "vue-cli-service serve",

+ 24 - 0
cfc-web/public/CHANGELOG-v1.0.md

@@ -4,6 +4,30 @@
 
 
 ---
 ---
 
 
+## v1.0.1346 (2026-09-09)
+
+### 新功能
+- 新用户引导页强化 - 从痛点切入强调'看见和了解'
+- 报告编辑页支持成员选择/重选/解绑 + 删除重算维度
+
+### 其他
+- - OnboardingGuide: 家长端新增第1步痛点开场'你真的了解孩子的状态吗?',子步骤强调'五维沙盘看见全家''小任务大改变''心愿墙看得见努力';孩子端新增'你的每一点成长,都被看见'
+- - 首页Hero/登录页: slogan统一改为痛点钩子'孩子的情绪、习惯、能力,你真的看见了吗?',sub-slogan强化痛点叙事'情绪低落没察觉、习惯变化没注意、能力短板没发现——问题爆发才着急。先看见,先了解,不等问题发生。'
+- 
+- - /report/edit 移除 subjectId 必填,支持 null(解绑)/ 0(不变)/ 正值(绑定或切换)
+- - updateReportFromPayload 按 subjectId 语义重算维度分:
+-   * 正值:绑定或切换成员,重算新成员 + 原成员(含食材推荐)
+-   * null:解绑,重算原成员(移除报告影响)
+-   * <=0:保持不变(子页面局部编辑不触碰绑定)
+- - deleteReport 删除后重算原绑定成员的维度分(含食材推荐)
+- - 新增 FoodRecommendService 注入(@Lazy 打破循环依赖)
+- 前端:
+- - report-detail.vue saveEdit 未选成员传 null(解绑),面板加「不绑定成员」选项
+- - gut-flora-detail.vue draft 模式补成员选择面板 + doConfirm 传 subjectId
+- 行为:未选成员 → 报告不纳入任何用户/家庭维度计算;选中 → 纳入并重算;删除 → 重算
+- 
+
+
 ## v1.0.1345 (2026-09-09)
 ## v1.0.1345 (2026-09-09)
 
 
 ### 新功能
 ### 新功能

+ 25 - 1
cfc-web/public/CHANGELOG.md

@@ -1,6 +1,6 @@
 # 更新日志
 # 更新日志
 
 
-> 当前版本: v1.0.1345
+> 当前版本: v1.0.1346
 
 
 ## 历史版本
 ## 历史版本
 
 
@@ -8,6 +8,30 @@
 
 
 ---
 ---
 
 
+## v1.0.1346 (2026-09-09)
+
+### 新功能
+- 新用户引导页强化 - 从痛点切入强调'看见和了解'
+- 报告编辑页支持成员选择/重选/解绑 + 删除重算维度
+
+### 其他
+- - OnboardingGuide: 家长端新增第1步痛点开场'你真的了解孩子的状态吗?',子步骤强调'五维沙盘看见全家''小任务大改变''心愿墙看得见努力';孩子端新增'你的每一点成长,都被看见'
+- - 首页Hero/登录页: slogan统一改为痛点钩子'孩子的情绪、习惯、能力,你真的看见了吗?',sub-slogan强化痛点叙事'情绪低落没察觉、习惯变化没注意、能力短板没发现——问题爆发才着急。先看见,先了解,不等问题发生。'
+- 
+- - /report/edit 移除 subjectId 必填,支持 null(解绑)/ 0(不变)/ 正值(绑定或切换)
+- - updateReportFromPayload 按 subjectId 语义重算维度分:
+-   * 正值:绑定或切换成员,重算新成员 + 原成员(含食材推荐)
+-   * null:解绑,重算原成员(移除报告影响)
+-   * <=0:保持不变(子页面局部编辑不触碰绑定)
+- - deleteReport 删除后重算原绑定成员的维度分(含食材推荐)
+- - 新增 FoodRecommendService 注入(@Lazy 打破循环依赖)
+- 前端:
+- - report-detail.vue saveEdit 未选成员传 null(解绑),面板加「不绑定成员」选项
+- - gut-flora-detail.vue draft 模式补成员选择面板 + doConfirm 传 subjectId
+- 行为:未选成员 → 报告不纳入任何用户/家庭维度计算;选中 → 纳入并重算;删除 → 重算
+- 
+
+
 ## v1.0.1345 (2026-09-09)
 ## v1.0.1345 (2026-09-09)
 
 
 ### 新功能
 ### 新功能