Browse Source

feat: fix task completion points display (0→10CF) and unit format (分→CF) - resolve Unknown column errors and UI display issues

iwt 1 week ago
parent
commit
fa4b1fa4f3

+ 2 - 2
cfc-backend/src/main/java/com/etotem/cfc/service/TaskService.java

@@ -1221,10 +1221,10 @@ if (todayPenaltyTotal < PENALTY_MAX_DAILY) {
 int penalty = Math.min(task.getPoints(), PENALTY_MAX_DAILY - todayPenaltyTotal);
 return -penalty;
 } else {
-return 0; // 达到每日扣分上限
+return points; // 达到每日扣分上限:不扣分,任务完成仍发放基础分
 }
         } else {
-            return 0; // 扣分未开启
+            return points; // 扣分未开启:任务完成发放基础分
         }
     }
 

+ 7 - 3
cfc-frontend/pages/child/tasks.vue

@@ -56,7 +56,7 @@
               <view class="task-title">{{ task.title }}</view>
               <view class="task-meta">
                 <BaseBadge variant="warning" size="xs">
-                  <text class="points-text">+{{ task.points }} ⭐</text>
+                  <text class="points-text">+{{ task.points }} CF</text>
                 </BaseBadge>
                 <text
                   class="task-time"
@@ -250,8 +250,12 @@ export default {
       this.completingTaskId = taskId
       try {
         res = await completeTaskApi(taskId, this.currentChildId, '')
-        points = res.data.pointsEarned
-        uni.showToast({ title: '获得 ' + points + ' 积分', icon: 'success' })
+        if (res.data && res.data.needReview) {
+          uni.showToast({ title: '已提交,待审核', icon: 'none' })
+        } else {
+          points = res.data.pointsEarned
+          uni.showToast({ title: '获得 ' + points + ' CF', icon: 'success' })
+        }
         setTimeout(() => {
           this.completingTaskId = null
           this.loadData()

+ 1 - 1
cfc-frontend/pages/growth-main/index.vue

@@ -217,7 +217,7 @@
               <view class="task-preview-left">
                 <text class="task-preview-name">{{ task.title }}</text>
                 <view class="task-preview-meta">
-                  <text class="task-preview-points">+{{ task.points }}分</text>
+                  <text class="task-preview-points">+{{ task.points }}CF</text>
                   <text class="task-preview-deadline" v-if="task.deadline">⏱ {{ formatTaskTime(task.deadline) }}</text>
                 </view>
               </view>

+ 6 - 2
cfc-frontend/pages/index-home/index.vue

@@ -155,7 +155,7 @@
         >
           <view class="task-quick-info">
             <text class="task-quick-title line-clamp-1">{{ task.title }}</text>
-            <text class="task-quick-meta">+{{ task.points }}分</text>
+            <text class="task-quick-meta">+{{ task.points }}CF</text>
           </view>
           <button class="btn-quick-complete" @click="quickCompleteTask(task)">完成</button>
         </view>
@@ -1494,7 +1494,11 @@ title: '添加家庭成员',
       var memberId = (task && task.familyMemberId) || self.currentChildId || uni.getStorageSync('currentMemberId')
       completeTaskApi(task.id, memberId, '').then(function(res) {
         if (res.code === 200) {
-          uni.showToast({ title: '获得 ' + (res.data && res.data.pointsEarned || 0) + ' 积分', icon: 'success' })
+          if (res.data && res.data.needReview) {
+            uni.showToast({ title: '已提交,待审核', icon: 'none' })
+          } else {
+            uni.showToast({ title: '获得 ' + (res.data && res.data.pointsEarned || 0) + ' CF', icon: 'success' })
+          }
           self.loadTodayTasks()
         } else {
           uni.showToast({ title: (res && res.message) || '完成失败', icon: 'none' })

+ 1 - 1
cfc-frontend/pages/parent/child-detail.vue

@@ -64,7 +64,7 @@
             <text class="task-status-icon">{{ task.status === 'completed' ? '✅' : '⏳' }}</text>
             <view class="task-info">
               <text class="task-title">{{ task.title }}</text>
-              <text class="task-points" v-if="task.points">+{{ task.points }}分</text>
+              <text class="task-points" v-if="task.points">+{{ task.points }}CF</text>
             </view>
           </view>
         </view>

+ 5 - 5
cfc-frontend/pages/tasks/tasks.vue

@@ -32,7 +32,7 @@
             <text v-if="task.memberOnly === 1" class="member-badge">会员任务</text>
           </view>
           <view class="task-meta">
-            <text class="points">+{{ task.points }}分</text>
+            <text class="points">+{{ task.points }}CF</text>
             <text class="creator">创建人:{{ task.creatorName || '家人' }}</text>
             <text class="deadline">截止 {{ formatTime(task.deadline) }}</text>
           </view>
@@ -63,7 +63,7 @@
             <text v-if="task.requireInput === 1" class="minigame-badge">✍️</text>
           </view>
           <view class="task-meta">
-            <text class="points">+{{ task.points }}分</text>
+            <text class="points">+{{ task.points }}CF</text>
             <text class="deadline">截止 {{ formatTime(task.deadline) }}</text>
           </view>
           <!-- 进度型任务:展示进度条 -->
@@ -96,7 +96,7 @@
             <text v-if="task.memberOnly === 1" class="member-badge">会员任务</text>
           </view>
           <view class="task-meta">
-            <text class="points">+{{ task.points }}分</text>
+            <text class="points">+{{ task.points }}CF</text>
             <text class="assignee">{{ task.executorName || '未分配' }}</text>
             <text class="status-tag" :class="'status-' + task.status">{{ statusLabel(task.status) }}</text>
           </view>
@@ -402,7 +402,7 @@ export default {
         if (res.data && res.data.needReview) {
           uni.showToast({ title: '已提交,待审核', icon: 'none' })
         } else {
-          uni.showToast({ title: `获得 ${res.data.pointsEarned} 积分`, icon: 'success' })
+          uni.showToast({ title: `获得 ${res.data.pointsEarned} CF`, icon: 'success' })
         }
         this.loadTodayTasks()
       } catch (e) {
@@ -492,7 +492,7 @@ export default {
         if (res.data && res.data.needReview) {
           uni.showToast({ title: '已提交,待审核', icon: 'none' })
         } else {
-          uni.showToast({ title: `获得 ${res.data.pointsEarned} 积分`, icon: 'success' })
+          uni.showToast({ title: `获得 ${res.data.pointsEarned} CF`, icon: 'success' })
         }
         this.closeInputModal()
         this.loadTodayTasks()

+ 1 - 1
cfc-web/.last_build_commit

@@ -1 +1 @@
-a3e3c3a56577b827887c6a472a85344c72633b0c
+2221f249d4f4b28a827089d30551cdd9bf06b491

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

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

+ 1 - 1
cfc-web/package.json

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

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

@@ -4,22 +4,31 @@
 
 ---
 
-## v1.0.1590 (2026-10-12)
+## v1.0.1592 (2026-10-12)
+
+### 文档
+- update health education knowledge base documentation for 2026 Q4
+
+
+## v1.0.1591 (2026-10-12)
 
 ### Bug 修复
-- 本地菜单补齐菜单管理入口,简化 effectiveMenuItems 清理废弃 dynamicMenuItems
 - 登录浮层面板高度降为 85vh(更紧凑)
 - 登录浮层四步闭环单行显示(防止四字文本换行)
-- 登录浮层点击协议复选框不再关闭
-
-### 文档
-- update health education knowledge base documentation for 2026 Q4
 
 ### 其他
 - - .loop-pill-text 加 white-space:nowrap,四字步骤强制单行
 - - .loop-arrow 加 flex-shrink:0,箭头不被压缩
 - - 适配 750rpx 屏宽,四个 pill + 三个箭头容纳一行
 - 
+
+
+## v1.0.1590 (2026-10-12)
+
+### Bug 修复
+- 登录浮层点击协议复选框不再关闭
+
+### 其他
 - - 面板根 view 加 @click.stop,阻止内部点击(含 checkbox)冒泡到遮罩
 - - 保留:点击遮罩空白区才关闭浮层
 - 
@@ -29,6 +38,14 @@
 - - 修复:面板高度足够显示协议行;四步闭环与五维标签强制单行显示(flex-wrap: nowrap + margin 替代 gap)
 - - DimensionVisitorCard.vue:登录引导卡片,支持通过 openLoginSheet 唤起浮层
 - 
+
+### 新功能
+- 登录页改造为底部滑出浮层(login-sheet)
+
+
+## v1.0.1589 (2026-10-12)
+
+### 其他
 - resolve last_build_commit conflict
 - 
 - 
@@ -44,7 +61,6 @@
 - 
 
 ### 新功能
-- 登录页改造为底部滑出浮层(login-sheet)
 - gut-flora-risks-detail.vue 展示 relatedBacteria 与 gut-flora-detail.vue gutStatusLevel 微标(P0+P1 完整)
 - pdf_parser.py 北京菌群 related_bacteria/gutStatusLevel 解析 + report_parse_agent.py schema 扩展
 - ReportCollectService 与 LangGraphReportParseService 映射 gutStatusLevel 与 relatedBacteria,实现 P0+P1 完整链路
@@ -54,23 +70,6 @@
 - 已知类型解析失败退避重试 + 解析进度后台可见 + 食材回填
 
 
-## v1.0.1589 (2026-10-12)
-
-### 新功能
-- 新增报告解析进度页面(查看/重试/回填)
-- 已知类型解析失败退避重试 + 解析进度后台可见 + 食材回填
-
-### 其他
-- - 新增 api/reportParse.js;注册路由 report-parse-status 与侧边菜单
-- - npm run build 产物版本 1.0.1588
-- 
-- - LangGraphReportParseService 新增 parseByScriptWithReason 保留失败原因,专用 RestTemplate 读超时放宽至 300s
-- - health_report_drafts 新增 parse_attempt/next_retry_at/parse_started_at/parse_finished_at(迁移364 + schema.sql)
-- - 新增 /api/admin/report-parse list|retry|backfill-food 及 reparseReportFoods(只覆盖 payload_json.foods)
-- - buildFoodsFromPayload 跳过空/无名称食材;saveFoodsForReport 先删后插保证幂等;入库前幂等守卫
-- 
-
-
 ## v1.0.1588 (2026-10-12)
 
 ### 重构

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

@@ -1,6 +1,6 @@
 # 更新日志
 
-> 当前版本: v1.0.1590
+> 当前版本: v1.0.1592
 
 ## 历史版本
 
@@ -8,22 +8,31 @@
 
 ---
 
-## v1.0.1590 (2026-10-12)
+## v1.0.1592 (2026-10-12)
+
+### 文档
+- update health education knowledge base documentation for 2026 Q4
+
+
+## v1.0.1591 (2026-10-12)
 
 ### Bug 修复
-- 本地菜单补齐菜单管理入口,简化 effectiveMenuItems 清理废弃 dynamicMenuItems
 - 登录浮层面板高度降为 85vh(更紧凑)
 - 登录浮层四步闭环单行显示(防止四字文本换行)
-- 登录浮层点击协议复选框不再关闭
-
-### 文档
-- update health education knowledge base documentation for 2026 Q4
 
 ### 其他
 - - .loop-pill-text 加 white-space:nowrap,四字步骤强制单行
 - - .loop-arrow 加 flex-shrink:0,箭头不被压缩
 - - 适配 750rpx 屏宽,四个 pill + 三个箭头容纳一行
 - 
+
+
+## v1.0.1590 (2026-10-12)
+
+### Bug 修复
+- 登录浮层点击协议复选框不再关闭
+
+### 其他
 - - 面板根 view 加 @click.stop,阻止内部点击(含 checkbox)冒泡到遮罩
 - - 保留:点击遮罩空白区才关闭浮层
 - 
@@ -33,6 +42,14 @@
 - - 修复:面板高度足够显示协议行;四步闭环与五维标签强制单行显示(flex-wrap: nowrap + margin 替代 gap)
 - - DimensionVisitorCard.vue:登录引导卡片,支持通过 openLoginSheet 唤起浮层
 - 
+
+### 新功能
+- 登录页改造为底部滑出浮层(login-sheet)
+
+
+## v1.0.1589 (2026-10-12)
+
+### 其他
 - resolve last_build_commit conflict
 - 
 - 
@@ -48,7 +65,6 @@
 - 
 
 ### 新功能
-- 登录页改造为底部滑出浮层(login-sheet)
 - gut-flora-risks-detail.vue 展示 relatedBacteria 与 gut-flora-detail.vue gutStatusLevel 微标(P0+P1 完整)
 - pdf_parser.py 北京菌群 related_bacteria/gutStatusLevel 解析 + report_parse_agent.py schema 扩展
 - ReportCollectService 与 LangGraphReportParseService 映射 gutStatusLevel 与 relatedBacteria,实现 P0+P1 完整链路
@@ -58,23 +74,6 @@
 - 已知类型解析失败退避重试 + 解析进度后台可见 + 食材回填
 
 
-## v1.0.1589 (2026-10-12)
-
-### 新功能
-- 新增报告解析进度页面(查看/重试/回填)
-- 已知类型解析失败退避重试 + 解析进度后台可见 + 食材回填
-
-### 其他
-- - 新增 api/reportParse.js;注册路由 report-parse-status 与侧边菜单
-- - npm run build 产物版本 1.0.1588
-- 
-- - LangGraphReportParseService 新增 parseByScriptWithReason 保留失败原因,专用 RestTemplate 读超时放宽至 300s
-- - health_report_drafts 新增 parse_attempt/next_retry_at/parse_started_at/parse_finished_at(迁移364 + schema.sql)
-- - 新增 /api/admin/report-parse list|retry|backfill-food 及 reparseReportFoods(只覆盖 payload_json.foods)
-- - buildFoodsFromPayload 跳过空/无名称食材;saveFoodsForReport 先删后插保证幂等;入库前幂等守卫
-- 
-
-
 ## v1.0.1588 (2026-10-12)
 
 ### 重构