fix(family): 修复家庭列表数据结构和禁用家庭处理
更新多个页面中对getMyFamiliesAPI返回数据的处理,使用data.families替代直接使用data 在JoinFamily页面中添加对禁用家庭的处理和UI显示 更新family.js中的API文档说明
Showing
6 changed files
with
36 additions
and
23 deletions
| 1 | /* | 1 | /* |
| 2 | * @Date: 2024-01-01 00:00:00 | 2 | * @Date: 2024-01-01 00:00:00 |
| 3 | * @LastEditors: hookehuyr hookehuyr@gmail.com | 3 | * @LastEditors: hookehuyr hookehuyr@gmail.com |
| 4 | - * @LastEditTime: 2025-09-03 16:51:51 | 4 | + * @LastEditTime: 2025-09-22 15:35:23 |
| 5 | * @FilePath: /lls_program/src/api/family.js | 5 | * @FilePath: /lls_program/src/api/family.js |
| 6 | * @Description: 家庭相关接口 | 6 | * @Description: 家庭相关接口 |
| 7 | */ | 7 | */ |
| ... | @@ -42,18 +42,18 @@ export const searchFamilyByPassphraseAPI = (params) => fn(fetch.get(Api.SEARCH_B | ... | @@ -42,18 +42,18 @@ export const searchFamilyByPassphraseAPI = (params) => fn(fetch.get(Api.SEARCH_B |
| 42 | * @returns {Object} response - 响应对象 | 42 | * @returns {Object} response - 响应对象 |
| 43 | * @returns {string} response.code - 响应状态码 | 43 | * @returns {string} response.code - 响应状态码 |
| 44 | * @returns {string} response.msg - 响应消息 | 44 | * @returns {string} response.msg - 响应消息 |
| 45 | - * @returns {Array} response.data - 家庭列表 | 45 | + * @returns {Array} response.data.families - 家庭列表 |
| 46 | - * @returns {number} response.data[].id - 家庭ID | 46 | + * @returns {number} response.data.families[].id - 家庭ID |
| 47 | - * @returns {string} response.data[].name - 家庭名称 | 47 | + * @returns {string} response.data.families[].name - 家庭名称 |
| 48 | - * @returns {string} response.data[].avatar_url - 家庭头像 | 48 | + * @returns {string} response.data.families[].avatar_url - 家庭头像 |
| 49 | - * @returns {boolean} response.data[].is_my - 是否是我创建的家庭 | 49 | + * @returns {boolean} response.data.families[].is_my - 是否是我创建的家庭 |
| 50 | - * @returns {string} response.data[].created_by_nickname - 创建者昵称 | 50 | + * @returns {string} response.data.families[].created_by_nickname - 创建者昵称 |
| 51 | - * @returns {string} response.data[].is_current_family - 是否是当前家庭 | 51 | + * @returns {string} response.data.families[].is_current_family - 是否是当前家庭 |
| 52 | - * @returns {Array} response.data[].users - 家庭成员列表 | 52 | + * @returns {Array} response.data.families[].users - 家庭成员列表 |
| 53 | - * @returns {string} response.data[].users[].user_id - 用户ID | 53 | + * @returns {string} response.data.families[].users[].user_id - 用户ID |
| 54 | - * @returns {string} response.data[].users[].role - 角色 | 54 | + * @returns {string} response.data.families[].users[].role - 角色 |
| 55 | - * @returns {string} response.data[].users[].avatar_url - 头像 | 55 | + * @returns {string} response.data.families[].users[].avatar_url - 头像 |
| 56 | - * @returns {string} response.data[].users[].nickname - 昵称 | 56 | + * @returns {string} response.data.families[].users[].nickname - 昵称 |
| 57 | */ | 57 | */ |
| 58 | export const getMyFamiliesAPI = () => fn(fetch.get(Api.LIST_MY_FAMILIES)); | 58 | export const getMyFamiliesAPI = () => fn(fetch.get(Api.LIST_MY_FAMILIES)); |
| 59 | 59 | ... | ... |
| 1 | <!-- | 1 | <!-- |
| 2 | * @Date: 2022-09-19 14:11:06 | 2 | * @Date: 2022-09-19 14:11:06 |
| 3 | * @LastEditors: hookehuyr hookehuyr@gmail.com | 3 | * @LastEditors: hookehuyr hookehuyr@gmail.com |
| 4 | - * @LastEditTime: 2025-09-22 15:10:03 | 4 | + * @LastEditTime: 2025-09-22 15:35:48 |
| 5 | * @FilePath: /lls_program/src/pages/ActivitiesCover/index.vue | 5 | * @FilePath: /lls_program/src/pages/ActivitiesCover/index.vue |
| 6 | * @Description: 活动海报页面 - 展示活动信息并处理定位授权 | 6 | * @Description: 活动海报页面 - 展示活动信息并处理定位授权 |
| 7 | --> | 7 | --> |
| ... | @@ -901,7 +901,7 @@ const initPageData = async () => { | ... | @@ -901,7 +901,7 @@ const initPageData = async () => { |
| 901 | const { code, data } = await getMyFamiliesAPI() | 901 | const { code, data } = await getMyFamiliesAPI() |
| 902 | if (code) { | 902 | if (code) { |
| 903 | // 如果加入家庭 | 903 | // 如果加入家庭 |
| 904 | - if (data.length) { | 904 | + if (data?.families?.length) { |
| 905 | hasJoinedFamily.value = true | 905 | hasJoinedFamily.value = true |
| 906 | } | 906 | } |
| 907 | } | 907 | } | ... | ... |
| ... | @@ -65,7 +65,7 @@ const fetchAdConfig = async () => { | ... | @@ -65,7 +65,7 @@ const fetchAdConfig = async () => { |
| 65 | const checkUserFamily = async () => { | 65 | const checkUserFamily = async () => { |
| 66 | try { | 66 | try { |
| 67 | const { code, data } = await getMyFamiliesAPI(); | 67 | const { code, data } = await getMyFamiliesAPI(); |
| 68 | - hasFamily.value = code && data && data.length > 0; | 68 | + hasFamily.value = code && data && data?.families?.length > 0; |
| 69 | } catch (error) { | 69 | } catch (error) { |
| 70 | console.error('检查用户家庭状态失败:', error); | 70 | console.error('检查用户家庭状态失败:', error); |
| 71 | hasFamily.value = false; | 71 | hasFamily.value = false; | ... | ... |
| ... | @@ -109,9 +109,11 @@ | ... | @@ -109,9 +109,11 @@ |
| 109 | @tap="selectFamily(family.id)" | 109 | @tap="selectFamily(family.id)" |
| 110 | :class="[ | 110 | :class="[ |
| 111 | 'family-item p-4 border rounded-lg flex items-center space-x-3', | 111 | 'family-item p-4 border rounded-lg flex items-center space-x-3', |
| 112 | - selectedFamilyId === family.id | 112 | + family.disable |
| 113 | - ? 'border-blue-500 bg-blue-50' | 113 | + ? 'border-gray-300 bg-gray-100 opacity-60 cursor-not-allowed' |
| 114 | - : 'border-gray-200 bg-white' | 114 | + : selectedFamilyId === family.id |
| 115 | + ? 'border-blue-500 bg-blue-50' | ||
| 116 | + : 'border-gray-200 bg-white' | ||
| 115 | ]" | 117 | ]" |
| 116 | > | 118 | > |
| 117 | <!-- 家庭头像 --> | 119 | <!-- 家庭头像 --> |
| ... | @@ -124,7 +126,10 @@ | ... | @@ -124,7 +126,10 @@ |
| 124 | 126 | ||
| 125 | <!-- 家庭信息 --> | 127 | <!-- 家庭信息 --> |
| 126 | <view class="flex-1"> | 128 | <view class="flex-1"> |
| 127 | - <view class="font-medium text-gray-900 mb-1">{{ family.name }}</view> | 129 | + <view class="font-medium text-gray-900 mb-1"> |
| 130 | + {{ family.name }} | ||
| 131 | + <text v-if="family.disable" class="text-xs text-red-500 ml-2">(被大家长移除后无法再加入)</text> | ||
| 132 | + </view> | ||
| 128 | <view class="text-sm text-gray-600 line-clamp-2">{{ family.note }}</view> | 133 | <view class="text-sm text-gray-600 line-clamp-2">{{ family.note }}</view> |
| 129 | </view> | 134 | </view> |
| 130 | 135 | ||
| ... | @@ -274,6 +279,14 @@ const handleClearSearch = () => { | ... | @@ -274,6 +279,14 @@ const handleClearSearch = () => { |
| 274 | 279 | ||
| 275 | // 选择家庭 | 280 | // 选择家庭 |
| 276 | const selectFamily = (familyId) => { | 281 | const selectFamily = (familyId) => { |
| 282 | + // 查找对应的家庭信息 | ||
| 283 | + const family = mockFamilies.value.find(f => f.id === familyId); | ||
| 284 | + | ||
| 285 | + // 如果家庭被禁用,则不允许选中 | ||
| 286 | + if (family && family.disable) { | ||
| 287 | + return; | ||
| 288 | + } | ||
| 289 | + | ||
| 277 | selectedFamilyId.value = familyId | 290 | selectedFamilyId.value = familyId |
| 278 | }; | 291 | }; |
| 279 | 292 | ... | ... |
| ... | @@ -287,7 +287,7 @@ const initPageData = async () => { | ... | @@ -287,7 +287,7 @@ const initPageData = async () => { |
| 287 | // 获取家庭列表 | 287 | // 获取家庭列表 |
| 288 | const { code, data } = await getMyFamiliesAPI(); | 288 | const { code, data } = await getMyFamiliesAPI(); |
| 289 | if (code) { | 289 | if (code) { |
| 290 | - familyList.value = data; | 290 | + familyList.value = data?.families || []; |
| 291 | console.warn(data); | 291 | console.warn(data); |
| 292 | } | 292 | } |
| 293 | 293 | ... | ... |
| 1 | <!-- | 1 | <!-- |
| 2 | * @Date: 2025-08-27 17:47:46 | 2 | * @Date: 2025-08-27 17:47:46 |
| 3 | * @LastEditors: hookehuyr hookehuyr@gmail.com | 3 | * @LastEditors: hookehuyr hookehuyr@gmail.com |
| 4 | - * @LastEditTime: 2025-09-22 13:40:24 | 4 | + * @LastEditTime: 2025-09-22 15:36:09 |
| 5 | * @FilePath: /lls_program/src/pages/Profile/index.vue | 5 | * @FilePath: /lls_program/src/pages/Profile/index.vue |
| 6 | * @Description: 文件描述 | 6 | * @Description: 文件描述 |
| 7 | --> | 7 | --> |
| ... | @@ -194,7 +194,7 @@ const initPageData = async () => { | ... | @@ -194,7 +194,7 @@ const initPageData = async () => { |
| 194 | // 检查用户是否加入了家庭 | 194 | // 检查用户是否加入了家庭 |
| 195 | try { | 195 | try { |
| 196 | const familyResponse = await getMyFamiliesAPI(); | 196 | const familyResponse = await getMyFamiliesAPI(); |
| 197 | - if (familyResponse.code && familyResponse.data && familyResponse.data.length > 0) { | 197 | + if (familyResponse.code && familyResponse.data && familyResponse?.data?.families?.length > 0) { |
| 198 | userInfo.value.has_family = true; | 198 | userInfo.value.has_family = true; |
| 199 | } | 199 | } |
| 200 | } catch (error) { | 200 | } catch (error) { | ... | ... |
-
Please register or login to post a comment