hookehuyr

fix(family): 修复家庭列表数据结构和禁用家庭处理

更新多个页面中对getMyFamiliesAPI返回数据的处理,使用data.families替代直接使用data
在JoinFamily页面中添加对禁用家庭的处理和UI显示
更新family.js中的API文档说明
/*
* @Date: 2024-01-01 00:00:00
* @LastEditors: hookehuyr hookehuyr@gmail.com
* @LastEditTime: 2025-09-03 16:51:51
* @LastEditTime: 2025-09-22 15:35:23
* @FilePath: /lls_program/src/api/family.js
* @Description: 家庭相关接口
*/
......@@ -42,18 +42,18 @@ export const searchFamilyByPassphraseAPI = (params) => fn(fetch.get(Api.SEARCH_B
* @returns {Object} response - 响应对象
* @returns {string} response.code - 响应状态码
* @returns {string} response.msg - 响应消息
* @returns {Array} response.data - 家庭列表
* @returns {number} response.data[].id - 家庭ID
* @returns {string} response.data[].name - 家庭名称
* @returns {string} response.data[].avatar_url - 家庭头像
* @returns {boolean} response.data[].is_my - 是否是我创建的家庭
* @returns {string} response.data[].created_by_nickname - 创建者昵称
* @returns {string} response.data[].is_current_family - 是否是当前家庭
* @returns {Array} response.data[].users - 家庭成员列表
* @returns {string} response.data[].users[].user_id - 用户ID
* @returns {string} response.data[].users[].role - 角色
* @returns {string} response.data[].users[].avatar_url - 头像
* @returns {string} response.data[].users[].nickname - 昵称
* @returns {Array} response.data.families - 家庭列表
* @returns {number} response.data.families[].id - 家庭ID
* @returns {string} response.data.families[].name - 家庭名称
* @returns {string} response.data.families[].avatar_url - 家庭头像
* @returns {boolean} response.data.families[].is_my - 是否是我创建的家庭
* @returns {string} response.data.families[].created_by_nickname - 创建者昵称
* @returns {string} response.data.families[].is_current_family - 是否是当前家庭
* @returns {Array} response.data.families[].users - 家庭成员列表
* @returns {string} response.data.families[].users[].user_id - 用户ID
* @returns {string} response.data.families[].users[].role - 角色
* @returns {string} response.data.families[].users[].avatar_url - 头像
* @returns {string} response.data.families[].users[].nickname - 昵称
*/
export const getMyFamiliesAPI = () => fn(fetch.get(Api.LIST_MY_FAMILIES));
......
<!--
* @Date: 2022-09-19 14:11:06
* @LastEditors: hookehuyr hookehuyr@gmail.com
* @LastEditTime: 2025-09-22 15:10:03
* @LastEditTime: 2025-09-22 15:35:48
* @FilePath: /lls_program/src/pages/ActivitiesCover/index.vue
* @Description: 活动海报页面 - 展示活动信息并处理定位授权
-->
......@@ -901,7 +901,7 @@ const initPageData = async () => {
const { code, data } = await getMyFamiliesAPI()
if (code) {
// 如果加入家庭
if (data.length) {
if (data?.families?.length) {
hasJoinedFamily.value = true
}
}
......
......@@ -65,7 +65,7 @@ const fetchAdConfig = async () => {
const checkUserFamily = async () => {
try {
const { code, data } = await getMyFamiliesAPI();
hasFamily.value = code && data && data.length > 0;
hasFamily.value = code && data && data?.families?.length > 0;
} catch (error) {
console.error('检查用户家庭状态失败:', error);
hasFamily.value = false;
......
......@@ -109,7 +109,9 @@
@tap="selectFamily(family.id)"
:class="[
'family-item p-4 border rounded-lg flex items-center space-x-3',
selectedFamilyId === family.id
family.disable
? 'border-gray-300 bg-gray-100 opacity-60 cursor-not-allowed'
: selectedFamilyId === family.id
? 'border-blue-500 bg-blue-50'
: 'border-gray-200 bg-white'
]"
......@@ -124,7 +126,10 @@
<!-- 家庭信息 -->
<view class="flex-1">
<view class="font-medium text-gray-900 mb-1">{{ family.name }}</view>
<view class="font-medium text-gray-900 mb-1">
{{ family.name }}
<text v-if="family.disable" class="text-xs text-red-500 ml-2">(被大家长移除后无法再加入)</text>
</view>
<view class="text-sm text-gray-600 line-clamp-2">{{ family.note }}</view>
</view>
......@@ -274,6 +279,14 @@ const handleClearSearch = () => {
// 选择家庭
const selectFamily = (familyId) => {
// 查找对应的家庭信息
const family = mockFamilies.value.find(f => f.id === familyId);
// 如果家庭被禁用,则不允许选中
if (family && family.disable) {
return;
}
selectedFamilyId.value = familyId
};
......
......@@ -287,7 +287,7 @@ const initPageData = async () => {
// 获取家庭列表
const { code, data } = await getMyFamiliesAPI();
if (code) {
familyList.value = data;
familyList.value = data?.families || [];
console.warn(data);
}
......
<!--
* @Date: 2025-08-27 17:47:46
* @LastEditors: hookehuyr hookehuyr@gmail.com
* @LastEditTime: 2025-09-22 13:40:24
* @LastEditTime: 2025-09-22 15:36:09
* @FilePath: /lls_program/src/pages/Profile/index.vue
* @Description: 文件描述
-->
......@@ -194,7 +194,7 @@ const initPageData = async () => {
// 检查用户是否加入了家庭
try {
const familyResponse = await getMyFamiliesAPI();
if (familyResponse.code && familyResponse.data && familyResponse.data.length > 0) {
if (familyResponse.code && familyResponse.data && familyResponse?.data?.families?.length > 0) {
userInfo.value.has_family = true;
}
} catch (error) {
......