hookehuyr

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

更新多个页面中对getMyFamiliesAPI返回数据的处理,使用data.families替代直接使用data
在JoinFamily页面中添加对禁用家庭的处理和UI显示
更新family.js中的API文档说明
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) {
......