Просмотр исходного кода

chore: auto bump version and changelog [skip ci]

iwt 3 недель назад
Родитель
Сommit
5ad0a77659

+ 26 - 1
cfc-frontend/components/FamilyMemberCard.vue

@@ -3,6 +3,10 @@
     <!-- 头像区域 -->
     <!-- 头像区域 -->
     <view class="card-avatar-wrap">
     <view class="card-avatar-wrap">
       <image class="card-avatar" :src="member.avatar || defaultAvatar" mode="aspectFill" />
       <image class="card-avatar" :src="member.avatar || defaultAvatar" mode="aspectFill" />
+      <!-- 待办角标 -->
+      <view v-if="pendingCount > 0" class="card-pending-badge">
+        <text class="badge-num">{{ pendingCount }}</text>
+      </view>
       <!-- 关系标签徽章 -->
       <!-- 关系标签徽章 -->
       <view class="card-relation-badge" :style="{ background: relationColor }">
       <view class="card-relation-badge" :style="{ background: relationColor }">
         <text class="card-relation-text">{{ member.relationship || member.relativeLabel || member.roleLabel || '成员' }}</text>
         <text class="card-relation-text">{{ member.relationship || member.relativeLabel || member.roleLabel || '成员' }}</text>
@@ -51,7 +55,8 @@ export default {
   props: {
   props: {
     member: { type: Object, required: true },
     member: { type: Object, required: true },
     isSelected: { type: Boolean, default: false },
     isSelected: { type: Boolean, default: false },
-    energyScore: { type: Number, default: null }
+    energyScore: { type: Number, default: null },
+    pendingCount: { type: Number, default: 0 }
   },
   },
   computed: {
   computed: {
     defaultAvatar: function() {
     defaultAvatar: function() {
@@ -159,6 +164,26 @@ export default {
 .spouse-icon {
 .spouse-icon {
   font-size: 18rpx;
   font-size: 18rpx;
 }
 }
+/* 待办角标 */
+.card-pending-badge {
+  position: absolute;
+  top: -6rpx;
+  right: -6rpx;
+  min-width: 32rpx;
+  height: 32rpx;
+  padding: 0 8rpx;
+  background: #FF6B6B;
+  color: #fff;
+  font-size: 20rpx;
+  border-radius: 16rpx;
+  text-align: center;
+  line-height: 32rpx;
+  font-weight: 500;
+}
+.badge-num {
+  display: block;
+  line-height: 1;
+}
 .card-relation-dots {
 .card-relation-dots {
   display: flex;
   display: flex;
   flex-direction: row;
   flex-direction: row;

+ 4 - 1
cfc-frontend/components/FamilyMemberStrip.vue

@@ -17,6 +17,7 @@
             :member="member"
             :member="member"
             :isSelected="member.id === selectedMemberId"
             :isSelected="member.id === selectedMemberId"
             :energyScore="getMemberEnergy(member)"
             :energyScore="getMemberEnergy(member)"
+            :pendingCount="pendingCounts[member.id] || 0"
             @select="onSelect"
             @select="onSelect"
             @longpress="onLongPress"
             @longpress="onLongPress"
           />
           />
@@ -29,6 +30,7 @@
           :member="member"
           :member="member"
           :isSelected="member.id === selectedMemberId"
           :isSelected="member.id === selectedMemberId"
           :energyScore="getMemberEnergy(member)"
           :energyScore="getMemberEnergy(member)"
+          :pendingCount="pendingCounts[member.id] || 0"
           @select="onSelect"
           @select="onSelect"
           @longpress="onLongPress"
           @longpress="onLongPress"
         />
         />
@@ -132,7 +134,8 @@ export default {
     selectedMemberId: { type: Number, default: null },
     selectedMemberId: { type: Number, default: null },
     energyMap: { type: Object, default: function() { return {} } },
     energyMap: { type: Object, default: function() { return {} } },
     isParent: { type: Boolean, default: false },
     isParent: { type: Boolean, default: false },
-    centerMemberId: { type: Number, default: null }
+    centerMemberId: { type: Number, default: null },
+    pendingCounts: { type: Object, default: function() { return {} } }
   },
   },
   data: function() {
   data: function() {
     return {
     return {

+ 16 - 0
cfc-frontend/pages/home-pages/parent-index.vue

@@ -1310,6 +1310,22 @@ export default {
     goArticleDetail: function(articleOrId) {
     goArticleDetail: function(articleOrId) {
       var id = typeof articleOrId === 'object' ? articleOrId.id : articleOrId
       var id = typeof articleOrId === 'object' ? articleOrId.id : articleOrId
       uni.navigateTo({ url: '/pages/article-center/article-detail?id=' + id })
       uni.navigateTo({ url: '/pages/article-center/article-detail?id=' + id })
+    },
+    // 按成员统计待完成数(pending + in_progress)
+    _countTasksByMember: function(tasks) {
+      var counts = {}
+      for (var i = 0; i < tasks.length; i++) {
+        var task = tasks[i]
+        if (!task || !task.familyMemberId) continue
+        var memberId = task.familyMemberId
+        if (!counts[memberId]) {
+          counts[memberId] = 0
+        }
+        if (task.status === 'pending' || task.status === 'in_progress') {
+          counts[memberId] += 1
+        }
+      }
+      return counts
     }
     }
   }
   }
 }
 }

+ 1 - 1
cfc-web/.last_build_commit

@@ -1 +1 @@
-8a1277824a9ffb31f0982a03924b59a19c72e6c9
+e158e30347f28aa1136e8a7a616362d2dae94e76