Ver Fonte

chore: auto bump version and changelog [skip ci]

iwt há 1 mês atrás
pai
commit
41b3c5a380

+ 27 - 2
cfc-frontend/components/FamilyMemberStrip.vue

@@ -43,10 +43,18 @@
         <text class="action-item-icon">🔄</text>
         <text class="action-item-text">切换到该成员视角</text>
       </view>
-      <view class="action-item" @click="editMember">
+      <view class="action-item" @click="editMember" v-if="canEdit">
         <text class="action-item-icon">✏️</text>
         <text class="action-item-text">编辑资料</text>
       </view>
+      <view class="action-item" @click="questionnaireMember">
+        <text class="action-item-icon">📋</text>
+        <text class="action-item-text">关系问卷</text>
+      </view>
+      <view class="action-item" @click="interactionMember">
+        <text class="action-item-icon">💬</text>
+        <text class="action-item-text">记录互动</text>
+      </view>
       <view class="action-item" @click="callMember" v-if="actionMember && actionMember.phone">
         <text class="action-item-icon">📞</text>
         <text class="action-item-text">拨打电话</text>
@@ -83,6 +91,9 @@ export default {
     canSwitch: function() {
       return this.actionMember && this.actionMember.userId
     },
+    canEdit: function() {
+      return this.isParent && this.actionMember && !this.actionMember.userId && this.actionMember.source === 'family_member'
+    },
     canRemove: function() {
       return this.isParent && this.actionMember && !this.actionMember.isSelf
     }
@@ -110,7 +121,21 @@ export default {
       var member = this.actionMember
       this.closeMenu()
       if (member) {
-        uni.navigateTo({ url: '/pages/profile-extra/family-members?editId=' + member.id })
+        uni.navigateTo({ url: '/pages/family/add-member?memberId=' + member.id })
+      }
+    },
+    questionnaireMember: function() {
+      var member = this.actionMember
+      this.closeMenu()
+      if (member) {
+        uni.navigateTo({ url: '/pages/action-detail/relationship-questionnaire?memberId=' + member.id })
+      }
+    },
+    interactionMember: function() {
+      var member = this.actionMember
+      this.closeMenu()
+      if (member) {
+        uni.navigateTo({ url: '/pages/action-detail/interaction-log?memberId=' + member.id })
       }
     },
     callMember: function() {

+ 34 - 7
cfc-frontend/pages/family/add-member.vue

@@ -1,7 +1,7 @@
 <template>
 <view class="container">
 <view class="form-container">
-<view class="page-title">添加家庭成员</view>
+<view class="page-title">{{ isEdit ? '编辑成员' : '添加家庭成员' }}</view>
 
 <!-- 昵称(必填) -->
 <view class="form-item required">
@@ -87,7 +87,7 @@
 </template>
 
 <script>
-import { addFamilyMember } from '../../utils/api.js'
+import { addFamilyMember, updateFamilyMember } from '../../utils/api.js'
 import GenerationPicker from '../../components/GenerationPicker.vue'
 
 export default {
@@ -95,6 +95,8 @@ components: { GenerationPicker },
 data() {
 return {
 submitting: false,
+isEdit: false,
+editMemberId: null,
 form: {
 nickname: '',
 generationLevel: '',
@@ -138,9 +140,17 @@ age--
 return age >= 0 ? age + '岁' : ''
 }
 },
-onLoad() {
-var today = new Date()
-this.todayDate = today.getFullYear() + '-' + String(today.getMonth() + 1).padStart(2, '0') + '-' + String(today.getDate()).padStart(2, '0')
+onLoad(options) {
+  var today = new Date()
+  this.todayDate = today.getFullYear() + '-' + String(today.getMonth() + 1).padStart(2, '0') + '-' + String(today.getDate()).padStart(2, '0')
+  if (options && options.memberId) {
+    this.isEdit = true
+    this.editMemberId = Number(options.memberId)
+    if (options.nickname) this.form.nickname = decodeURIComponent(options.nickname)
+    if (options.gender) this.form.gender = options.gender
+    if (options.phone) this.form.phone = options.phone
+    if (options.birthday) this.form.birthday = options.birthday
+  }
 },
 methods: {
 onGenderChange(e) {
@@ -169,7 +179,7 @@ if (!this.form.nickname || !this.form.nickname.trim()) {
 uni.showToast({ title: '请输入成员昵称', icon: 'none' })
 return
 }
-if (!this.$refs.generationPicker || !this.$refs.generationPicker.selectedGen) {
+if (!this.isEdit && (!this.$refs.generationPicker || !this.$refs.generationPicker.selectedGen)) {
   uni.showToast({ title: '请选择辈分关系', icon: 'none' })
   return
 }
@@ -188,6 +198,22 @@ return
 
 try {
 this.submitting = true
+if (this.isEdit) {
+  var updatePayload = {
+    memberId: this.editMemberId,
+    nickname: this.form.nickname.trim()
+  }
+  if (this.form.gender) updatePayload.gender = this.form.gender
+  if (this.form.birthday) updatePayload.birthday = this.form.birthday
+  if (this.form.phone) updatePayload.phone = this.form.phone
+  var res = await updateFamilyMember(updatePayload)
+  if (res.code === 200) {
+    uni.showToast({ title: '已更新', icon: 'success' })
+    setTimeout(function() { uni.navigateBack() }, 1500)
+  } else {
+    uni.showToast({ title: res.message || '更新失败', icon: 'none' })
+  }
+} else {
 var genLevel = (this.$refs.generationPicker && this.$refs.generationPicker.selectedGen) || this.form.generationLevel
 var genPeerType = (this.$refs.generationPicker && this.$refs.generationPicker.selectedPeer) || this.form.peerType
 var payload = {
@@ -219,8 +245,9 @@ setTimeout(function() { uni.navigateBack() }, 1500)
 } else {
 uni.showToast({ title: res.message || '添加失败', icon: 'none' })
 }
+}
 } catch (e) {
-uni.showToast({ title: '添加失败', icon: 'none' })
+uni.showToast({ title: this.isEdit ? '更新失败' : '添加失败', icon: 'none' })
 } finally {
 this.submitting = false
 }

+ 3 - 2
cfc-frontend/pages/profile-extra/family-members.vue

@@ -202,6 +202,7 @@ export default {
       this.showMemberDetailModal = true
     },
     canEditMember(member) {
+      if (!this.isAdmin) return false
       if (member.userId) return false
       return member.source === 'family_member'
     },
@@ -283,11 +284,11 @@ export default {
     },
     doQuestionnaire(member) {
       this.showMemberDetailModal = false
-      uni.navigateTo({ url: '/pages/action/relationship-questionnaire?memberId=' + member.id })
+      uni.navigateTo({ url: '/pages/action-detail/relationship-questionnaire?memberId=' + member.id })
     },
     recordInteraction(member) {
       this.showMemberDetailModal = false
-      uni.navigateTo({ url: '/pages/action/interaction-log?memberId=' + member.id })
+      uni.navigateTo({ url: '/pages/action-detail/interaction-log?memberId=' + member.id })
     },
     closeMemberDetail() {
       this.showMemberDetailModal = false

+ 1 - 1
cfc-web/.last_build_commit

@@ -1 +1 @@
-d00912a19d8b99219c89bdcf5daef2fb5878bcd4
+32a97e7f87a23e93d4f597ac3e3f3584397ad855