hookehuyr

feat: 更新UI样式和图标,优化图片选择失败处理

- 将多个页面中的文本颜色和背景样式更新为白色主题
- 添加自定义图标替换原有图标,增强视觉一致性
- 注释掉图片选择失败时的错误提示,优化用户体验
- 调整家庭相册和创建家庭页面的布局和图标
...@@ -3,9 +3,13 @@ ...@@ -3,9 +3,13 @@
3 <!-- Family album --> 3 <!-- Family album -->
4 <view class="p-5 mt-4 mb-6 bg-white rounded-xl shadow-md mx-4"> 4 <view class="p-5 mt-4 mb-6 bg-white rounded-xl shadow-md mx-4">
5 <view class="flex justify-between items-center mb-2"> 5 <view class="flex justify-between items-center mb-2">
6 - <h2 class="font-medium text-lg">多彩瞬间</h2> 6 + <!-- <h2 class="font-medium text-lg">多彩瞬间</h2> -->
7 + <h2 class="font-medium text-lg flex items-center">
8 + <IconFont size="20" name="https://cdn.ipadbiz.cn/lls_prog/icon/%E7%9B%B8%E5%86%8C.png" />
9 + <text class="ml-2">多彩瞬间</text>
10 + </h2>
7 <view class="text-blue-500 flex items-center text-xs" @click="openAlbumList"> 11 <view class="text-blue-500 flex items-center text-xs" @click="openAlbumList">
8 - 进入相册 12 + 查看更多
9 </view> 13 </view>
10 </view> 14 </view>
11 <p class="text-sm text-gray-500 mb-3">记录每一个家庭活动瞬间</p> 15 <p class="text-sm text-gray-500 mb-3">记录每一个家庭活动瞬间</p>
...@@ -111,7 +115,7 @@ ...@@ -111,7 +115,7 @@
111 <script setup> 115 <script setup>
112 import { ref, onMounted, computed } from 'vue'; 116 import { ref, onMounted, computed } from 'vue';
113 import Taro, { useDidShow } from '@tarojs/taro'; 117 import Taro, { useDidShow } from '@tarojs/taro';
114 -import { Close, Photograph } from '@nutui/icons-vue-taro'; 118 +import { Close, Photograph, IconFont } from '@nutui/icons-vue-taro';
115 119
116 import { getPhotoListAPI } from '@/api/photo'; 120 import { getPhotoListAPI } from '@/api/photo';
117 121
......
...@@ -443,6 +443,9 @@ const handleGoToRewards = () => { ...@@ -443,6 +443,9 @@ const handleGoToRewards = () => {
443 box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.08); 443 box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.08);
444 margin: 32rpx; 444 margin: 32rpx;
445 overflow: hidden; 445 overflow: hidden;
446 + background-image: url('https://cdn.ipadbiz.cn/lls_prog/images/dashboard_bg.png');
447 + background-size: cover;
448 + background-position: center bottom;
446 } 449 }
447 450
448 .points-collector-header { 451 .points-collector-header {
...@@ -462,9 +465,9 @@ const handleGoToRewards = () => { ...@@ -462,9 +465,9 @@ const handleGoToRewards = () => {
462 // background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); 465 // background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
463 // TODO: 等待正式背景图 466 // TODO: 等待正式背景图
464 // background-image: url('https://cdn.ipadbiz.cn/lls_prog/images/bg-test-2.png'); 467 // background-image: url('https://cdn.ipadbiz.cn/lls_prog/images/bg-test-2.png');
465 - background-image: url('https://cdn.ipadbiz.cn/lls_prog/images/dashboard_bg.png'); 468 + // background-image: url('https://cdn.ipadbiz.cn/lls_prog/images/dashboard_bg.png');
466 - background-size: cover; 469 + // background-size: cover;
467 - background-position: center bottom; 470 + // background-position: center bottom;
468 overflow: hidden; 471 overflow: hidden;
469 } 472 }
470 473
......
...@@ -318,7 +318,7 @@ const changeAvatar = () => { ...@@ -318,7 +318,7 @@ const changeAvatar = () => {
318 }); 318 });
319 }, 319 },
320 fail: () => { 320 fail: () => {
321 - Taro.showToast({ title: '选择图片失败', icon: 'none' }); 321 + // Taro.showToast({ title: '选择图片失败', icon: 'none' });
322 }, 322 },
323 }); 323 });
324 }; 324 };
......
1 <!-- 1 <!--
2 * @Date: 2025-08-27 17:44:53 2 * @Date: 2025-08-27 17:44:53
3 * @LastEditors: hookehuyr hookehuyr@gmail.com 3 * @LastEditors: hookehuyr hookehuyr@gmail.com
4 - * @LastEditTime: 2025-09-11 20:01:15 4 + * @LastEditTime: 2025-09-16 11:01:23
5 * @FilePath: /lls_program/src/pages/CreateFamily/index.vue 5 * @FilePath: /lls_program/src/pages/CreateFamily/index.vue
6 * @Description: 文件描述 6 * @Description: 文件描述
7 --> 7 -->
...@@ -10,8 +10,9 @@ ...@@ -10,8 +10,9 @@
10 <!-- <AppHeader title="创建家庭" /> --> 10 <!-- <AppHeader title="创建家庭" /> -->
11 <view class="flex-1 px-4 py-6 overflow-auto"> 11 <view class="flex-1 px-4 py-6 overflow-auto">
12 <view class="mb-6"> 12 <view class="mb-6">
13 - <view class="text-gray-600 mb-6"> 13 + <view class="text-gray-600 mb-6 flex items-center">
14 - 请填写家庭信息,创建您的专属家庭空间 14 + <IconFont size="20" name="https://cdn.ipadbiz.cn/lls_prog/icon/%E5%88%9B%E5%BB%BA%E5%AE%B6%E5%BA%AD1.png" />
15 + <text class="ml-1">请填写家庭信息,创建您的专属家庭空间</text>
15 </view> 16 </view>
16 <!-- Family Name --> 17 <!-- Family Name -->
17 <view class="mb-6"> 18 <view class="mb-6">
...@@ -91,8 +92,10 @@ ...@@ -91,8 +92,10 @@
91 </view> --> 92 </view> -->
92 </view> 93 </view>
93 <view class="flex items-center text-sm text-gray-600"> 94 <view class="flex items-center text-sm text-gray-600">
94 - <Tips size="16" class="text-yellow-500 mr-2" /> 95 + <view>
95 - <view>设置有意义的家训口令,便于家人记忆和加入</view> 96 + <IconFont size="15" name="https://cdn.ipadbiz.cn/lls_prog/icon/%E5%88%9B%E5%BB%BA%E5%AE%B6%E5%BA%AD3.png" />
97 + <text class="ml-1">设置有意义的家训口令,便于家人记忆和加入</text>
98 + </view>
96 </view> 99 </view>
97 </view> 100 </view>
98 </view> 101 </view>
...@@ -104,9 +107,9 @@ ...@@ -104,9 +107,9 @@
104 </view> 107 </view>
105 <!-- 封面显示区域 --> 108 <!-- 封面显示区域 -->
106 <view class="mb-4"> 109 <view class="mb-4">
107 - <view class="relative"> 110 + <view class="relative bg-gray-100 rounded-lg">
108 <image 111 <image
109 - :src="familyAvatar || defaultFamilyCover" 112 + :src="familyAvatar"
110 class="w-full h-48 rounded-lg object-cover" 113 class="w-full h-48 rounded-lg object-cover"
111 mode="aspectFill" 114 mode="aspectFill"
112 @tap="previewAvatar" 115 @tap="previewAvatar"
...@@ -120,9 +123,9 @@ ...@@ -120,9 +123,9 @@
120 </view> 123 </view>
121 <view 124 <view
122 @click="chooseImage" 125 @click="chooseImage"
123 - class="absolute bottom-3 right-2 px-3 py-1 bg-black bg-opacity-50 text-white text-sm rounded-full flex items-center" 126 + class="absolute bottom-3 right-2 px-3 py-1 bg-gray-600 bg-opacity-50 text-white text-sm rounded-full flex items-center"
124 > 127 >
125 - <Photograph size="14" class="mr-1" /> 128 + <IconFont size="20" class="mr-1" name="https://cdn.ipadbiz.cn/lls_prog/icon/%E5%88%9B%E5%BB%BA%E5%AE%B6%E5%BA%AD4.png" />
126 {{ familyAvatar ? '更换' : '上传' }} 129 {{ familyAvatar ? '更换' : '上传' }}
127 </view> 130 </view>
128 </view> 131 </view>
...@@ -171,7 +174,7 @@ ...@@ -171,7 +174,7 @@
171 <script setup> 174 <script setup>
172 import { ref, nextTick, computed } from 'vue'; 175 import { ref, nextTick, computed } from 'vue';
173 import Taro from '@tarojs/taro'; 176 import Taro from '@tarojs/taro';
174 -import { Tips, Photograph, Right } from '@nutui/icons-vue-taro'; 177 +import { Tips, Photograph, Right, IconFont } from '@nutui/icons-vue-taro';
175 import BASE_URL from '@/utils/config'; 178 import BASE_URL from '@/utils/config';
176 // 接口信息 179 // 接口信息
177 import { createFamilyAPI } from '@/api/family'; 180 import { createFamilyAPI } from '@/api/family';
...@@ -311,7 +314,7 @@ const chooseImage = () => { ...@@ -311,7 +314,7 @@ const chooseImage = () => {
311 }); 314 });
312 }, 315 },
313 fail: function () { 316 fail: function () {
314 - showToast('选择图片失败', 'none'); 317 + // showToast('选择图片失败', 'none');
315 } 318 }
316 }); 319 });
317 }; 320 };
...@@ -361,7 +364,10 @@ const uploadImage = (filePath) => { ...@@ -361,7 +364,10 @@ const uploadImage = (filePath) => {
361 * 预览头像 364 * 预览头像
362 */ 365 */
363 const previewAvatar = () => { 366 const previewAvatar = () => {
364 - const imageToPreview = familyAvatar.value || defaultFamilyCover.value; 367 + if (!familyAvatar.value) {
368 + return;
369 + }
370 + const imageToPreview = familyAvatar.value;
365 previewImages.value = [{ src: imageToPreview }]; 371 previewImages.value = [{ src: imageToPreview }];
366 previewIndex.value = 0; 372 previewIndex.value = 0;
367 previewVisible.value = true; 373 previewVisible.value = true;
......
...@@ -18,6 +18,6 @@ ...@@ -18,6 +18,6 @@
18 18
19 .tip-text { 19 .tip-text {
20 font-size: 20rpx; 20 font-size: 20rpx;
21 - color: #666; 21 + // color: #666;
22 line-height: 1; 22 line-height: 1;
23 } 23 }
......
...@@ -42,22 +42,22 @@ ...@@ -42,22 +42,22 @@
42 <!-- 头部:今日步数 --> 42 <!-- 头部:今日步数 -->
43 <template #header> 43 <template #header>
44 <view class="flex justify-between items-center mb-1 relative"> 44 <view class="flex justify-between items-center mb-1 relative">
45 - <span class="text-gray-500">今日</span> 45 + <span class="text-white">今日</span>
46 <!-- 积分规则提示 --> 46 <!-- 积分规则提示 -->
47 <view class="points-rule-tip" @tap="handleGoToPointsRule"> 47 <view class="points-rule-tip" @tap="handleGoToPointsRule">
48 <!-- <view class="tip-icon">💡</view> --> 48 <!-- <view class="tip-icon">💡</view> -->
49 - <text class="tip-text">积分攻略</text> 49 + <text class="tip-text text-white">积分攻略</text>
50 </view> 50 </view>
51 </view> 51 </view>
52 <view class="flex justify-between items-center"> 52 <view class="flex justify-between items-center">
53 <view class="flex items-baseline"> 53 <view class="flex items-baseline">
54 - <span class="text-4xl font-bold"> 54 + <span class="text-4xl font-bold text-white">
55 {{ todaySteps?.toLocaleString() }} 55 {{ todaySteps?.toLocaleString() }}
56 </span> 56 </span>
57 - <span class="ml-1 text-gray-500">步</span> 57 + <span class="ml-1 text-white">步</span>
58 </view> 58 </view>
59 <view class="flex gap-2"> 59 <view class="flex gap-2">
60 - <view class="bg-blue-500 text-white px-4 py-2 rounded-full text-sm" @click="handleCollectAll"> 60 + <view class="bg-white text-blue-500 opacity-80 px-4 py-2 rounded-full text-sm" @click="handleCollectAll">
61 一键收取 61 一键收取
62 </view> 62 </view>
63 </view> 63 </view>
...@@ -84,7 +84,7 @@ ...@@ -84,7 +84,7 @@
84 <!-- 头部:今日步数 --> 84 <!-- 头部:今日步数 -->
85 <template #header> 85 <template #header>
86 <view class="flex justify-between items-center mb-1 relative"> 86 <view class="flex justify-between items-center mb-1 relative">
87 - <span class="text-gray-500">今日</span> 87 + <span class="text-white">今日</span>
88 <!-- 积分规则提示 --> 88 <!-- 积分规则提示 -->
89 <view class="points-rule-tip" @tap="handleGoToPointsRule"> 89 <view class="points-rule-tip" @tap="handleGoToPointsRule">
90 <!-- <view class="tip-icon">💡</view> --> 90 <!-- <view class="tip-icon">💡</view> -->
...@@ -93,13 +93,13 @@ ...@@ -93,13 +93,13 @@
93 </view> 93 </view>
94 <view class="flex justify-between items-center"> 94 <view class="flex justify-between items-center">
95 <view class="flex items-baseline"> 95 <view class="flex items-baseline">
96 - <span class="text-4xl font-bold"> 96 + <span class="text-4xl font-bold text-white">
97 {{ todaySteps?.toLocaleString() }} 97 {{ todaySteps?.toLocaleString() }}
98 </span> 98 </span>
99 - <span class="ml-1 text-gray-500">步</span> 99 + <span class="ml-1 text-white">步</span>
100 </view> 100 </view>
101 <view class="flex gap-2"> 101 <view class="flex gap-2">
102 - <view class="bg-blue-500 text-white px-4 py-2 rounded-full text-sm" @click="handleCollectAll"> 102 + <view class="bg-white text-blue-500 opacity-80 px-4 py-2 rounded-full text-sm" @click="handleCollectAll">
103 一键收取 103 一键收取
104 </view> 104 </view>
105 </view> 105 </view>
...@@ -121,7 +121,10 @@ ...@@ -121,7 +121,10 @@
121 <!-- Family step ranking --> 121 <!-- Family step ranking -->
122 <view class="p-5 bg-white rounded-xl shadow-md mx-4"> 122 <view class="p-5 bg-white rounded-xl shadow-md mx-4">
123 <view class="flex justify-between items-center mb-4"> 123 <view class="flex justify-between items-center mb-4">
124 - <h2 class="font-medium text-lg">今日家庭步数排行</h2> 124 + <h2 class="font-medium text-lg flex items-center">
125 + <IconFont size="20" name="https://cdn.ipadbiz.cn/lls_prog/icon/%E5%A5%96%E6%9D%AF.png" />
126 + <text class="ml-2">今日家庭步数排行</text>
127 + </h2>
125 <span class="text-sm text-gray-500"> 128 <span class="text-sm text-gray-500">
126 总计 {{ getTotalSteps() }} 步 129 总计 {{ getTotalSteps() }} 步
127 </span> 130 </span>
...@@ -159,7 +162,7 @@ ...@@ -159,7 +162,7 @@
159 import "./index.less"; 162 import "./index.less";
160 import { ref, computed, onMounted } from 'vue'; 163 import { ref, computed, onMounted } from 'vue';
161 import Taro, { useDidShow, useReady, useLoad } from '@tarojs/taro'; 164 import Taro, { useDidShow, useReady, useLoad } from '@tarojs/taro';
162 -import { Setting, Photograph, Category } from '@nutui/icons-vue-taro'; 165 +import { Setting, Photograph, Category, IconFont } from '@nutui/icons-vue-taro';
163 import BottomNav from '../../components/BottomNav.vue'; 166 import BottomNav from '../../components/BottomNav.vue';
164 import TotalPointsDisplay from '@/components/TotalPointsDisplay.vue'; 167 import TotalPointsDisplay from '@/components/TotalPointsDisplay.vue';
165 import PointsCollector from '@/components/PointsCollector.vue' 168 import PointsCollector from '@/components/PointsCollector.vue'
......
...@@ -301,7 +301,7 @@ const chooseImage = () => { ...@@ -301,7 +301,7 @@ const chooseImage = () => {
301 }); 301 });
302 }, 302 },
303 fail: function () { 303 fail: function () {
304 - showToast('选择图片失败', 'none'); 304 + // showToast('选择图片失败', 'none');
305 } 305 }
306 }); 306 });
307 }; 307 };
......
...@@ -311,7 +311,7 @@ const changeAvatar = () => { ...@@ -311,7 +311,7 @@ const changeAvatar = () => {
311 }); 311 });
312 }, 312 },
313 fail: () => { 313 fail: () => {
314 - Taro.showToast({ title: '选择图片失败', icon: 'none' }); 314 + // Taro.showToast({ title: '选择图片失败', icon: 'none' });
315 }, 315 },
316 }); 316 });
317 }; 317 };
......
...@@ -167,7 +167,7 @@ const chooseImage = () => { ...@@ -167,7 +167,7 @@ const chooseImage = () => {
167 }); 167 });
168 }, 168 },
169 fail: function () { 169 fail: function () {
170 - showToast('选择图片失败', 'error'); 170 + // showToast('选择图片失败', 'error');
171 } 171 }
172 }); 172 });
173 }; 173 };
......
...@@ -53,7 +53,7 @@ ...@@ -53,7 +53,7 @@
53 : 'border-gray-200 text-gray-700' 53 : 'border-gray-200 text-gray-700'
54 ]" 54 ]"
55 > 55 >
56 - <My size="20" /> 56 + <IconFont :name="role.type" size="20" />
57 <span class="text-sm">{{ role.label }}</span> 57 <span class="text-sm">{{ role.label }}</span>
58 </view> 58 </view>
59 </view> 59 </view>
...@@ -165,7 +165,7 @@ ...@@ -165,7 +165,7 @@
165 <script setup> 165 <script setup>
166 import { ref, computed, nextTick, onMounted, watch } from 'vue'; 166 import { ref, computed, nextTick, onMounted, watch } from 'vue';
167 import Taro from '@tarojs/taro'; 167 import Taro from '@tarojs/taro';
168 -import { My, Check } from '@nutui/icons-vue-taro'; 168 +import { My, Check, IconFont } from '@nutui/icons-vue-taro';
169 // 获取接口信息 169 // 获取接口信息
170 import { searchFamilyByPassphraseAPI, joinFamilyAPI } from '@/api/family'; 170 import { searchFamilyByPassphraseAPI, joinFamilyAPI } from '@/api/family';
171 // 导入主题颜色 171 // 导入主题颜色
...@@ -231,16 +231,16 @@ const handleBlur = (index) => { ...@@ -231,16 +231,16 @@ const handleBlur = (index) => {
231 }; 231 };
232 232
233 const familyRoles = [ 233 const familyRoles = [
234 - { id: '丈夫', label: '丈夫' }, 234 + { id: '丈夫', label: '丈夫', type: 'https://cdn.ipadbiz.cn/lls_prog/icon/%E7%94%B7.png' },
235 - { id: '妻子', label: '妻子' }, 235 + { id: '妻子', label: '妻子', type: 'https://cdn.ipadbiz.cn/lls_prog/icon/%E5%A5%B3.png' },
236 - { id: '儿子', label: '儿子' }, 236 + { id: '儿子', label: '儿子', type: 'https://cdn.ipadbiz.cn/lls_prog/icon/%E7%94%B7.png' },
237 - { id: '女儿', label: '女儿' }, 237 + { id: '女儿', label: '女儿', type: 'https://cdn.ipadbiz.cn/lls_prog/icon/%E5%A5%B3.png' },
238 - { id: '女婿', label: '女婿' }, 238 + { id: '女婿', label: '女婿', type: 'https://cdn.ipadbiz.cn/lls_prog/icon/%E7%94%B7.png' },
239 - { id: '儿媳', label: '儿媳' }, 239 + { id: '儿媳', label: '儿媳', type: 'https://cdn.ipadbiz.cn/lls_prog/icon/%E5%A5%B3.png' },
240 - { id: '孙子', label: '孙子' }, 240 + { id: '孙子', label: '孙子', type: 'https://cdn.ipadbiz.cn/lls_prog/icon/%E7%94%B7%E5%AD%A9.png' },
241 - { id: '外孙', label: '外孙' }, 241 + { id: '外孙', label: '外孙', type: 'https://cdn.ipadbiz.cn/lls_prog/icon/%E7%94%B7%E5%AD%A9.png' },
242 - { id: '孙女', label: '孙女' }, 242 + { id: '孙女', label: '孙女', type: 'https://cdn.ipadbiz.cn/lls_prog/icon/%E5%A5%B3%E5%AD%A9.png' },
243 - { id: '外孙女', label: '外孙女' } 243 + { id: '外孙女', label: '外孙女', type: 'https://cdn.ipadbiz.cn/lls_prog/icon/%E5%A5%B3%E5%AD%A9.png' }
244 ]; 244 ];
245 245
246 const isComplete = computed(() => { 246 const isComplete = computed(() => {
......
...@@ -605,10 +605,10 @@ const chooseBackgroundImage = () => { ...@@ -605,10 +605,10 @@ const chooseBackgroundImage = () => {
605 uploadBackgroundImage(tempFile.path) 605 uploadBackgroundImage(tempFile.path)
606 }, 606 },
607 fail: () => { 607 fail: () => {
608 - Taro.showToast({ 608 + // Taro.showToast({
609 - title: '选择图片失败', 609 + // title: '选择图片失败',
610 - icon: 'none' 610 + // icon: 'none'
611 - }) 611 + // })
612 } 612 }
613 }) 613 })
614 } 614 }
......