hookehuyr

fix(components): 修改 IconFont 组件 name 属性为小写

按照 NutUI 官方文档要求,将所有 IconFont 的 name 属性从首字母大写改为小写。

修改内容:
- Search → search
- RectRight → rectRight
- RectLeft → rectLeft
- Del → del
- Loading → loading
- Issue → issue
- Check → check
- Download → download
- Service → service
- Close → close
- Order → order
- Star → star
- Photograph → photograph
- My → my
- Cart → cart
- Home → home
- Category → category

涉及文件:
- 首页、产品详情页、资料列表页等所有页面
- TabBar、NavHeader 等公共组件
- PdfPreview、OfficeViewer 等文档预览组件

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
...@@ -33,13 +33,13 @@ ...@@ -33,13 +33,13 @@
33 <view class="preview-container"> 33 <view class="preview-container">
34 <!-- 加载状态 --> 34 <!-- 加载状态 -->
35 <view v-if="loading" class="loading-container"> 35 <view v-if="loading" class="loading-container">
36 - <IconFont name="Loading" size="24" class="animate-spin text-blue-600" /> 36 + <IconFont name="loading" size="24" class="animate-spin text-blue-600" />
37 <text class="loading-text">{{ loadingText }}</text> 37 <text class="loading-text">{{ loadingText }}</text>
38 </view> 38 </view>
39 39
40 <!-- 错误状态 --> 40 <!-- 错误状态 -->
41 <view v-else-if="error" class="error-container"> 41 <view v-else-if="error" class="error-container">
42 - <IconFont name="Issue" size="48" color="#ff6b6b" /> 42 + <IconFont name="issue" size="48" color="#ff6b6b" />
43 <text class="error-text">{{ error }}</text> 43 <text class="error-text">{{ error }}</text>
44 <nut-button type="primary" size="small" @click="retry"> 44 <nut-button type="primary" size="small" @click="retry">
45 重试 45 重试
...@@ -75,7 +75,7 @@ ...@@ -75,7 +75,7 @@
75 <script setup> 75 <script setup>
76 import { ref, computed, watch } from 'vue' 76 import { ref, computed, watch } from 'vue'
77 import { getFileSize, detectFileType, formatFileSize } from './utils' 77 import { getFileSize, detectFileType, formatFileSize } from './utils'
78 -import IconFont from '@/components/IconFont.vue' 78 +import { IconFont } from '@nutui/icons-vue-taro'
79 79
80 // #ifdef H5 80 // #ifdef H5
81 import OfficeViewer from '../OfficeViewer.vue' 81 import OfficeViewer from '../OfficeViewer.vue'
......
...@@ -3,10 +3,6 @@ ...@@ -3,10 +3,6 @@
3 * @Date: 2025-01-30 3 * @Date: 2025-01-30
4 */ 4 */
5 5
6 -// #ifdef WEAPP
7 -import Taro from '@tarojs/taro'
8 -// #endif
9 -
10 /** 6 /**
11 * 从 URL 中检测文件类型 7 * 从 URL 中检测文件类型
12 * @param {string} url - 文档 URL 8 * @param {string} url - 文档 URL
......
1 <!-- 1 <!--
2 * @Date: 2026-01-29 21:30:20 2 * @Date: 2026-01-29 21:30:20
3 * @LastEditors: hookehuyr hookehuyr@gmail.com 3 * @LastEditors: hookehuyr hookehuyr@gmail.com
4 - * @LastEditTime: 2026-01-30 17:16:13 4 + * @LastEditTime: 2026-01-30 18:13:56
5 * @FilePath: /manulife-weapp/src/components/IconFont.vue 5 * @FilePath: /manulife-weapp/src/components/IconFont.vue
6 * @Description: 图标字体组件 6 * @Description: 图标字体组件
7 --> 7 -->
8 <template> 8 <template>
9 - <component :is="iconComponent" v-if="iconComponent" :size="size" :class="customClass" :color="color" /> 9 + <IconFontBase :name="name" :size="size" :color="color" :class="customClass" />
10 </template> 10 </template>
11 11
12 <script setup> 12 <script setup>
13 -import { computed } from 'vue'; 13 +import { IconFont as IconFontBase } from '@nutui/icons-vue-taro'
14 -import {
15 - Cart,
16 - Category,
17 - Check,
18 - Checklist,
19 - Clock,
20 - Download,
21 - Edit,
22 - Find,
23 - Home,
24 - Issue,
25 - Link,
26 - Loading,
27 - Location,
28 - My,
29 - Order,
30 - People,
31 - PlayCircleFill,
32 - Refresh,
33 - RectRight,
34 - RectLeft,
35 - Search,
36 - Service,
37 - Star,
38 - StarFill,
39 - Top,
40 - Photograph,
41 - Del,
42 - Close,
43 -} from '@nutui/icons-vue-taro';
44 14
45 const props = defineProps({ 15 const props = defineProps({
46 - name: { 16 + name: {
47 - type: String, 17 + type: String,
48 - required: true 18 + required: true
49 - }, 19 + },
50 - size: { 20 + size: {
51 - type: [String, Number], 21 + type: [String, Number],
52 - default: '' 22 + default: ''
53 - }, 23 + },
54 - color: { 24 + color: {
55 - type: String, 25 + type: String,
56 - default: '' 26 + default: ''
57 - }, 27 + },
58 - customClass: { 28 + customClass: {
59 - type: String, 29 + type: String,
60 - default: '' 30 + default: ''
61 - } 31 + }
62 -}); 32 +})
63 -
64 -const icons = {
65 - Cart,
66 - Category,
67 - Check,
68 - Checklist,
69 - Clock,
70 - Download,
71 - Edit,
72 - Find,
73 - Home,
74 - Issue,
75 - Link,
76 - Loading,
77 - Location,
78 - My,
79 - Order,
80 - People,
81 - PlayCircleFill,
82 - Refresh,
83 - RectRight,
84 - RectLeft,
85 - Search,
86 - Service,
87 - Star,
88 - StarFill,
89 - Top,
90 - Photograph,
91 - Del,
92 - Close,
93 -};
94 -
95 -const iconComponent = computed(() => {
96 - return icons[props.name] || null;
97 -});
98 </script> 33 </script>
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
12 <div class="fixed top-0 left-0 z-50 w-full h-[250rpx] bg-gradient-to-b from-[#1E3A8A] to-[#2563EB] pt-[100rpx]"> 12 <div class="fixed top-0 left-0 z-50 w-full h-[250rpx] bg-gradient-to-b from-[#1E3A8A] to-[#2563EB] pt-[100rpx]">
13 <div class="relative w-full h-full flex items-center justify-center px-[32rpx]"> 13 <div class="relative w-full h-full flex items-center justify-center px-[32rpx]">
14 <div v-if="canGoBack" class="absolute left-[32rpx] flex items-center justify-center w-[60rpx] h-[60rpx]" @tap="goBack"> 14 <div v-if="canGoBack" class="absolute left-[32rpx] flex items-center justify-center w-[60rpx] h-[60rpx]" @tap="goBack">
15 - <IconFont name="RectLeft" size="18" color="#fff" /> 15 + <IconFont name="rectLeft" size="18" color="#fff" />
16 </div> 16 </div>
17 <span class="text-white text-[35rpx] font-normal">{{ title }}</span> 17 <span class="text-white text-[35rpx] font-normal">{{ title }}</span>
18 </div> 18 </div>
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
22 <script setup> 22 <script setup>
23 import { ref, onMounted } from 'vue' 23 import { ref, onMounted } from 'vue'
24 import Taro from '@tarojs/taro' 24 import Taro from '@tarojs/taro'
25 -import IconFont from '@/components/IconFont.vue' 25 +import { IconFont } from '@nutui/icons-vue-taro'
26 26
27 defineProps({ 27 defineProps({
28 title: { 28 title: {
......
1 <template> 1 <template>
2 <view class="office-viewer"> 2 <view class="office-viewer">
3 <view v-if="error" class="error-container"> 3 <view v-if="error" class="error-container">
4 - <IconFont name="Issue" size="24" color="#ff6b6b" /> 4 + <IconFont name="issue" size="24" color="#ff6b6b" />
5 <text class="error-text">{{ error }}</text> 5 <text class="error-text">{{ error }}</text>
6 <nut-button type="primary" size="small" class="retry-btn" @click="retry">重试</nut-button> 6 <nut-button type="primary" size="small" class="retry-btn" @click="retry">重试</nut-button>
7 </view> 7 </view>
...@@ -17,21 +17,21 @@ ...@@ -17,21 +17,21 @@
17 @load="on_loaded" 17 @load="on_loaded"
18 /> 18 />
19 <view v-else class="unsupported-container"> 19 <view v-else class="unsupported-container">
20 - <IconFont name="Issue" size="24" color="#ff6b6b" /> 20 + <IconFont name="issue" size="24" color="#ff6b6b" />
21 <text class="unsupported-text">不支持的文件类型: {{ normalized_type || '未知' }}</text> 21 <text class="unsupported-text">不支持的文件类型: {{ normalized_type || '未知' }}</text>
22 </view> 22 </view>
23 <!-- #endif --> 23 <!-- #endif -->
24 24
25 <!-- #ifdef WEAPP --> 25 <!-- #ifdef WEAPP -->
26 <view class="unsupported-container"> 26 <view class="unsupported-container">
27 - <IconFont name="Issue" size="24" color="#ff6b6b" /> 27 + <IconFont name="issue" size="24" color="#ff6b6b" />
28 <text class="unsupported-text">小程序不支持内嵌 Office 预览</text> 28 <text class="unsupported-text">小程序不支持内嵌 Office 预览</text>
29 </view> 29 </view>
30 <!-- #endif --> 30 <!-- #endif -->
31 </view> 31 </view>
32 32
33 <view v-if="loading" class="loading-overlay"> 33 <view v-if="loading" class="loading-overlay">
34 - <IconFont name="Loading" size="24" class="animate-spin text-blue-600" /> 34 + <IconFont name="loading" size="24" class="animate-spin text-blue-600" />
35 <text class="loading-text">加载中...</text> 35 <text class="loading-text">加载中...</text>
36 </view> 36 </view>
37 </view> 37 </view>
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
39 39
40 <script setup> 40 <script setup>
41 import { ref, computed, watch } from 'vue' 41 import { ref, computed, watch } from 'vue'
42 -import IconFont from '@/components/IconFont.vue' 42 +import { IconFont } from '@nutui/icons-vue-taro'
43 import { getTencentPreviewUrl } from '@/components/DocumentPreview/utils' 43 import { getTencentPreviewUrl } from '@/components/DocumentPreview/utils'
44 44
45 const props = defineProps({ 45 const props = defineProps({
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
9 <view class="header"> 9 <view class="header">
10 <text class="title">{{ title || 'PDF 预览' }}</text> 10 <text class="title">{{ title || 'PDF 预览' }}</text>
11 <view class="close" @tap="close"> 11 <view class="close" @tap="close">
12 - <IconFont name="Del" size="16" color="#666" /> 12 + <IconFont name="del" size="16" color="#666" />
13 </view> 13 </view>
14 </view> 14 </view>
15 15
...@@ -35,7 +35,7 @@ ...@@ -35,7 +35,7 @@
35 </view> 35 </view>
36 36
37 <view v-if="loading" class="loading"> 37 <view v-if="loading" class="loading">
38 - <IconFont name="Loading" size="24" class="animate-spin text-blue-600" /> 38 + <IconFont name="loading" size="24" class="animate-spin text-blue-600" />
39 <text class="loading-text">加载中...</text> 39 <text class="loading-text">加载中...</text>
40 </view> 40 </view>
41 </view> 41 </view>
...@@ -44,7 +44,7 @@ ...@@ -44,7 +44,7 @@
44 44
45 <script setup> 45 <script setup>
46 import { ref, watch } from 'vue' 46 import { ref, watch } from 'vue'
47 -import IconFont from '@/components/IconFont.vue' 47 +import { IconFont } from '@nutui/icons-vue-taro'
48 48
49 const props = defineProps({ 49 const props = defineProps({
50 show: { 50 show: {
......
...@@ -9,12 +9,12 @@ ...@@ -9,12 +9,12 @@
9 <text class="text-[#6b7280] text-[24rpx] mt-[8rpx] leading-[32rpx]">{{ subtitle }}</text> 9 <text class="text-[#6b7280] text-[24rpx] mt-[8rpx] leading-[32rpx]">{{ subtitle }}</text>
10 </view> 10 </view>
11 </view> 11 </view>
12 - <IconFont name="RectRight" class="text-gray-400" size="16" /> 12 + <IconFont name="rectRight" class="text-gray-400" size="16" />
13 </view> 13 </view>
14 </template> 14 </template>
15 15
16 <script setup> 16 <script setup>
17 -import IconFont from './IconFont.vue' 17 +import { IconFont } from '@nutui/icons-vue-taro'
18 18
19 /** 19 /**
20 * Section Item Component 20 * Section Item Component
......
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
30 30
31 <script setup> 31 <script setup>
32 import { ref, shallowRef } from 'vue' 32 import { ref, shallowRef } from 'vue'
33 -import IconFont from '@/components/IconFont.vue' 33 +import { IconFont } from '@nutui/icons-vue-taro'
34 import { useGo } from '@/hooks/useGo' 34 import { useGo } from '@/hooks/useGo'
35 import Taro from '@tarojs/taro' 35 import Taro from '@tarojs/taro'
36 36
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
16 <img :src="avatarUrl" /> 16 <img :src="avatarUrl" />
17 </nut-avatar> 17 </nut-avatar>
18 <view class="absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 bg-black/30 rounded-full p-[16rpx]"> 18 <view class="absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 bg-black/30 rounded-full p-[16rpx]">
19 - <IconFont name="Photograph" color="#fff" size="24" /> 19 + <IconFont name="photograph" color="#fff" size="24" />
20 </view> 20 </view>
21 </view> 21 </view>
22 22
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
36 <script setup> 36 <script setup>
37 import { ref } from 'vue' 37 import { ref } from 'vue'
38 import { useGo } from '@/hooks/useGo' 38 import { useGo } from '@/hooks/useGo'
39 -import IconFont from '@/components/IconFont.vue' 39 +import { IconFont } from '@nutui/icons-vue-taro'
40 import NavHeader from '@/components/NavHeader.vue' 40 import NavHeader from '@/components/NavHeader.vue'
41 import Taro from '@tarojs/taro' 41 import Taro from '@tarojs/taro'
42 42
......
...@@ -43,7 +43,7 @@ ...@@ -43,7 +43,7 @@
43 <view class="flex items-center gap-[16rpx]"> 43 <view class="flex items-center gap-[16rpx]">
44 <!-- Delete Button --> 44 <!-- Delete Button -->
45 <view class="p-[10rpx]" @tap.stop="onDelete(item)"> 45 <view class="p-[10rpx]" @tap.stop="onDelete(item)">
46 - <IconFont name="Del" size="18" color="#999" /> 46 + <IconFont name="del" size="18" color="#999" />
47 </view> 47 </view>
48 </view> 48 </view>
49 </view> 49 </view>
...@@ -51,7 +51,7 @@ ...@@ -51,7 +51,7 @@
51 <!-- Empty State --> 51 <!-- Empty State -->
52 <view v-if="filteredList.length === 0" 52 <view v-if="filteredList.length === 0"
53 class="flex flex-col items-center justify-center py-[100rpx] text-gray-400"> 53 class="flex flex-col items-center justify-center py-[100rpx] text-gray-400">
54 - <IconFont name="Star" size="48" class="mb-[24rpx] opacity-50" /> 54 + <IconFont name="star" size="48" class="mb-[24rpx] opacity-50" />
55 <text class="text-[28rpx]">暂无收藏内容</text> 55 <text class="text-[28rpx]">暂无收藏内容</text>
56 </view> 56 </view>
57 </view> 57 </view>
...@@ -64,7 +64,7 @@ ...@@ -64,7 +64,7 @@
64 <script setup> 64 <script setup>
65 import { ref, computed } from 'vue' 65 import { ref, computed } from 'vue'
66 import { useGo } from '@/hooks/useGo' 66 import { useGo } from '@/hooks/useGo'
67 -import IconFont from '@/components/IconFont.vue' 67 +import { IconFont } from '@nutui/icons-vue-taro'
68 import TabBar from '@/components/TabBar.vue' 68 import TabBar from '@/components/TabBar.vue'
69 import NavHeader from '@/components/NavHeader.vue' 69 import NavHeader from '@/components/NavHeader.vue'
70 import Taro from '@tarojs/taro' 70 import Taro from '@tarojs/taro'
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
6 <view class="px-[32rpx] mt-[32rpx]"> 6 <view class="px-[32rpx] mt-[32rpx]">
7 <!-- Search Bar --> 7 <!-- Search Bar -->
8 <view class="flex items-center w-full h-[88rpx] bg-white rounded-full px-[32rpx] mb-[32rpx] shadow-sm"> 8 <view class="flex items-center w-full h-[88rpx] bg-white rounded-full px-[32rpx] mb-[32rpx] shadow-sm">
9 - <IconFont name="Search" class="text-gray-400 mr-[16rpx]" size="18" /> 9 + <IconFont name="search" class="text-gray-400 mr-[16rpx]" size="18" />
10 <input type="text" placeholder="搜索问题或关键词" placeholder-class="text-gray-400 text-[28rpx]" 10 <input type="text" placeholder="搜索问题或关键词" placeholder-class="text-gray-400 text-[28rpx]"
11 class="flex-1 text-[28rpx] text-gray-800 h-full" /> 11 class="flex-1 text-[28rpx] text-gray-800 h-full" />
12 </view> 12 </view>
...@@ -18,12 +18,12 @@ ...@@ -18,12 +18,12 @@
18 > 18 >
19 <view class="flex items-center z-10"> 19 <view class="flex items-center z-10">
20 <view class="w-[80rpx] h-[80rpx] rounded-[16rpx] bg-blue-50 flex items-center justify-center mr-[24rpx]"> 20 <view class="w-[80rpx] h-[80rpx] rounded-[16rpx] bg-blue-50 flex items-center justify-center mr-[24rpx]">
21 - <IconFont name="Service" size="24" color="#2563EB" /> 21 + <IconFont name="service" size="24" color="#2563EB" />
22 </view> 22 </view>
23 <text class="text-[32rpx] text-gray-900 font-medium">联系客服</text> 23 <text class="text-[32rpx] text-gray-900 font-medium">联系客服</text>
24 </view> 24 </view>
25 <view class="z-10"> 25 <view class="z-10">
26 - <IconFont name="RectRight" class="text-gray-400" size="16" /> 26 + <IconFont name="rectRight" class="text-gray-400" size="16" />
27 </view> 27 </view>
28 </view> 28 </view>
29 29
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
38 <view class="w-[12rpx] h-[12rpx] rounded-full bg-blue-600 mr-[24rpx]"></view> 38 <view class="w-[12rpx] h-[12rpx] rounded-full bg-blue-600 mr-[24rpx]"></view>
39 <text class="text-[28rpx] text-gray-800">{{ item.title }}</text> 39 <text class="text-[28rpx] text-gray-800">{{ item.title }}</text>
40 </view> 40 </view>
41 - <IconFont name="RectRight" class="text-gray-400" size="16" /> 41 + <IconFont name="rectRight" class="text-gray-400" size="16" />
42 </view> 42 </view>
43 </view> 43 </view>
44 </view> 44 </view>
...@@ -59,7 +59,7 @@ ...@@ -59,7 +59,7 @@
59 <text class="text-[24rpx] text-gray-500">遇到问题?请通过以下方式联系我们</text> 59 <text class="text-[24rpx] text-gray-500">遇到问题?请通过以下方式联系我们</text>
60 </view> 60 </view>
61 <view class="w-[64rpx] h-[64rpx] bg-gray-100 rounded-full flex items-center justify-center" @tap="showContactPopup = false"> 61 <view class="w-[64rpx] h-[64rpx] bg-gray-100 rounded-full flex items-center justify-center" @tap="showContactPopup = false">
62 - <IconFont name="Close" size="18" color="#6B7280" /> 62 + <IconFont name="close" size="18" color="#6B7280" />
63 </view> 63 </view>
64 </view> 64 </view>
65 65
...@@ -98,7 +98,7 @@ ...@@ -98,7 +98,7 @@
98 <!-- Header --> 98 <!-- Header -->
99 <view class="flex-shrink-0 px-[32rpx] py-[20rpx] bg-white border-b border-gray-100 flex items-center"> 99 <view class="flex-shrink-0 px-[32rpx] py-[20rpx] bg-white border-b border-gray-100 flex items-center">
100 <view class="w-[64rpx] h-[64rpx] flex items-center justify-center -ml-[16rpx]" @tap="showQuestionPopup = false"> 100 <view class="w-[64rpx] h-[64rpx] flex items-center justify-center -ml-[16rpx]" @tap="showQuestionPopup = false">
101 - <IconFont name="Close" size="20" color="#374151" /> 101 + <IconFont name="close" size="20" color="#374151" />
102 </view> 102 </view>
103 <text class="flex-1 text-[34rpx] font-bold text-gray-900 text-center pr-[48rpx] truncate">{{ currentQuestion?.title }}</text> 103 <text class="flex-1 text-[34rpx] font-bold text-gray-900 text-center pr-[48rpx] truncate">{{ currentQuestion?.title }}</text>
104 </view> 104 </view>
...@@ -120,7 +120,7 @@ ...@@ -120,7 +120,7 @@
120 import { ref } from 'vue' 120 import { ref } from 'vue'
121 import NavHeader from '@/components/NavHeader.vue' 121 import NavHeader from '@/components/NavHeader.vue'
122 import TabBar from '@/components/TabBar.vue' 122 import TabBar from '@/components/TabBar.vue'
123 -import IconFont from '@/components/IconFont.vue' 123 +import { IconFont } from '@nutui/icons-vue-taro'
124 124
125 // Popup 状态 125 // Popup 状态
126 const showContactPopup = ref(false) 126 const showContactPopup = ref(false)
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
14 class="flex items-center w-full h-[88rpx] bg-white/20 backdrop-blur-md rounded-full px-[32rpx] border border-white/30" 14 class="flex items-center w-full h-[88rpx] bg-white/20 backdrop-blur-md rounded-full px-[32rpx] border border-white/30"
15 @tap="go('/pages/search/index')" 15 @tap="go('/pages/search/index')"
16 > 16 >
17 - <IconFont name="Search" class="text-white/80 mr-[16rpx]" size="18" /> 17 + <IconFont name="search" class="text-white/80 mr-[16rpx]" size="18" />
18 <text class="text-white/80 text-[28rpx]">搜索培训资料、案例...</text> 18 <text class="text-white/80 text-[28rpx]">搜索培训资料、案例...</text>
19 </view> 19 </view>
20 </view> 20 </view>
...@@ -44,7 +44,7 @@ ...@@ -44,7 +44,7 @@
44 <text class="text-gray-900 text-[32rpx] font-bold">热卖产品:</text> 44 <text class="text-gray-900 text-[32rpx] font-bold">热卖产品:</text>
45 <view class="flex items-center text-blue-600" @tap="go('/pages/knowledge-base/index')"> 45 <view class="flex items-center text-blue-600" @tap="go('/pages/knowledge-base/index')">
46 <text class="text-[26rpx] mr-[4rpx]">查看更多</text> 46 <text class="text-[26rpx] mr-[4rpx]">查看更多</text>
47 - <IconFont name="RectRight" size="12" /> 47 + <IconFont name="rectRight" size="12" />
48 </view> 48 </view>
49 </view> 49 </view>
50 50
...@@ -121,7 +121,7 @@ ...@@ -121,7 +121,7 @@
121 <text class="text-gray-900 text-[32rpx] font-bold">本周热门资料</text> 121 <text class="text-gray-900 text-[32rpx] font-bold">本周热门资料</text>
122 <view class="flex items-center text-blue-600" @tap="go('/pages/material-list/index')"> 122 <view class="flex items-center text-blue-600" @tap="go('/pages/material-list/index')">
123 <text class="text-[26rpx] mr-[4rpx]">查看更多</text> 123 <text class="text-[26rpx] mr-[4rpx]">查看更多</text>
124 - <IconFont name="RectRight" size="12" /> 124 + <IconFont name="rectRight" size="12" />
125 </view> 125 </view>
126 </view> 126 </view>
127 127
...@@ -179,16 +179,16 @@ import { ref, shallowRef } from 'vue'; ...@@ -179,16 +179,16 @@ import { ref, shallowRef } from 'vue';
179 import Taro, { useShareAppMessage } from '@tarojs/taro'; 179 import Taro, { useShareAppMessage } from '@tarojs/taro';
180 import { useGo } from '@/hooks/useGo'; 180 import { useGo } from '@/hooks/useGo';
181 import TabBar from '@/components/TabBar.vue'; 181 import TabBar from '@/components/TabBar.vue';
182 -import IconFont from '@/components/IconFont.vue'; 182 +import { IconFont } from '@nutui/icons-vue-taro';
183 183
184 // Grid navigation data with routes 184 // Grid navigation data with routes
185 const loopData0 = shallowRef([ 185 const loopData0 = shallowRef([
186 - { icon: 'Order', lanhutext0: '计划书', route: '/pages/plan/index' }, 186 + { icon: 'order', lanhutext0: '计划书', route: '/pages/plan/index' },
187 - { icon: 'My', lanhutext0: '入职相关', route: '/pages/onboarding/index' }, 187 + { icon: 'my', lanhutext0: '入职相关', route: '/pages/onboarding/index' },
188 - { icon: 'Cart', lanhutext0: '签单相关', route: '/pages/signing/index' }, 188 + { icon: 'cart', lanhutext0: '签单相关', route: '/pages/signing/index' },
189 - { icon: 'Home', lanhutext0: '家办相关', route: '/pages/family-office/index' }, 189 + { icon: 'home', lanhutext0: '家办相关', route: '/pages/family-office/index' },
190 - { icon: 'Category', lanhutext0: '产品知识库', route: '/pages/knowledge-base/index' }, 190 + { icon: 'category', lanhutext0: '产品知识库', route: '/pages/knowledge-base/index' },
191 - { icon: 'Star', lanhutext0: '工具箱', route: null }, // 待开发 191 + { icon: 'star', lanhutext0: '工具箱', route: null }, // 待开发
192 ]); 192 ]);
193 193
194 // Navigation 194 // Navigation
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
10 <!-- Search Bar --> 10 <!-- Search Bar -->
11 <div class="px-[32rpx] mt-[32rpx]"> 11 <div class="px-[32rpx] mt-[32rpx]">
12 <div class="bg-white rounded-[12rpx] flex items-center px-[32rpx] py-[24rpx]"> 12 <div class="bg-white rounded-[12rpx] flex items-center px-[32rpx] py-[24rpx]">
13 - <IconFont name="Search" size="20" color="#9CA3AF" customClass="mr-[16rpx]" /> 13 + <IconFont name="search" size="20" color="#9CA3AF" class="mr-[16rpx]" />
14 <input 14 <input
15 v-model="searchValue" 15 v-model="searchValue"
16 type="text" 16 type="text"
...@@ -48,7 +48,7 @@ ...@@ -48,7 +48,7 @@
48 :name="item.collected ? 'StarFill' : 'Star'" 48 :name="item.collected ? 'StarFill' : 'Star'"
49 size="12" 49 size="12"
50 :color="item.collected ? '#F59E0B' : '#9CA3AF'" 50 :color="item.collected ? '#F59E0B' : '#9CA3AF'"
51 - customClass="mr-[8rpx]" 51 + class="mr-[8rpx]"
52 /> 52 />
53 <span :class="['text-[24rpx]', item.collected ? 'text-[#F59E0B]' : 'text-[#9CA3AF]']"> 53 <span :class="['text-[24rpx]', item.collected ? 'text-[#F59E0B]' : 'text-[#9CA3AF]']">
54 {{ item.collected ? '已收藏' : '收藏' }} 54 {{ item.collected ? '已收藏' : '收藏' }}
...@@ -71,7 +71,7 @@ ...@@ -71,7 +71,7 @@
71 import { ref } from 'vue' 71 import { ref } from 'vue'
72 import NavHeader from '@/components/NavHeader.vue' 72 import NavHeader from '@/components/NavHeader.vue'
73 import TabBar from '@/components/TabBar.vue' 73 import TabBar from '@/components/TabBar.vue'
74 -import IconFont from '@/components/IconFont.vue' 74 +import { IconFont } from '@nutui/icons-vue-taro'
75 import Taro from '@tarojs/taro' 75 import Taro from '@tarojs/taro'
76 76
77 const searchValue = ref('') 77 const searchValue = ref('')
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
23 </view> 23 </view>
24 24
25 <!-- Arrow --> 25 <!-- Arrow -->
26 - <IconFont name="RectRight" size="20" color="#9CA3AF" /> 26 + <IconFont name="rectRight" size="20" color="#9CA3AF" />
27 </view> 27 </view>
28 28
29 <!-- Menu List --> 29 <!-- Menu List -->
...@@ -44,7 +44,7 @@ ...@@ -44,7 +44,7 @@
44 </view> 44 </view>
45 <text class="text-[32rpx] text-gray-800">{{ item.title }}</text> 45 <text class="text-[32rpx] text-gray-800">{{ item.title }}</text>
46 </view> 46 </view>
47 - <IconFont name="RectRight" size="16" color="#9CA3AF" /> 47 + <IconFont name="rectRight" size="16" color="#9CA3AF" />
48 </view> 48 </view>
49 <!-- Separator --> 49 <!-- Separator -->
50 <view v-if="index < menuItems.length - 1" class="h-[2rpx] bg-gray-100 w-full"></view> 50 <view v-if="index < menuItems.length - 1" class="h-[2rpx] bg-gray-100 w-full"></view>
...@@ -57,7 +57,7 @@ ...@@ -57,7 +57,7 @@
57 class="flex items-center justify-center py-[20rpx] px-[32rpx] rounded-[16rpx] border-[2rpx] border-[#FEE2E2] bg-[#FEF2F2] active:opacity-70" 57 class="flex items-center justify-center py-[20rpx] px-[32rpx] rounded-[16rpx] border-[2rpx] border-[#FEE2E2] bg-[#FEF2F2] active:opacity-70"
58 @tap="handleLogout" 58 @tap="handleLogout"
59 > 59 >
60 - <IconFont name="Issue" size="18" color="#EF4444" customClass="mr-[12rpx]" /> 60 + <IconFont name="issue" size="18" color="#EF4444" class="mr-[12rpx]" />
61 <text class="text-[28rpx] text-[#EF4444] font-medium">退出登录</text> 61 <text class="text-[28rpx] text-[#EF4444] font-medium">退出登录</text>
62 </view> 62 </view>
63 </view> 63 </view>
...@@ -69,7 +69,7 @@ ...@@ -69,7 +69,7 @@
69 69
70 <script setup> 70 <script setup>
71 import { useGo } from '@/hooks/useGo' 71 import { useGo } from '@/hooks/useGo'
72 -import IconFont from '@/components/IconFont.vue' 72 +import { IconFont } from '@nutui/icons-vue-taro'
73 import TabBar from '@/components/TabBar.vue' 73 import TabBar from '@/components/TabBar.vue'
74 import NavHeader from '@/components/NavHeader.vue' 74 import NavHeader from '@/components/NavHeader.vue'
75 import Taro from '@tarojs/taro' 75 import Taro from '@tarojs/taro'
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
7 <view class="bg-white px-[24rpx] py-[16rpx]"> 7 <view class="bg-white px-[24rpx] py-[16rpx]">
8 <nut-searchbar v-model="searchValue" placeholder="搜索计划书名称、客户姓名..." @search="onSearch" clearable> 8 <nut-searchbar v-model="searchValue" placeholder="搜索计划书名称、客户姓名..." @search="onSearch" clearable>
9 <template #left-in> 9 <template #left-in>
10 - <IconFont name="Search" size="14" /> 10 + <IconFont name="search" size="14" />
11 </template> 11 </template>
12 </nut-searchbar> 12 </nut-searchbar>
13 </view> 13 </view>
...@@ -55,11 +55,11 @@ ...@@ -55,11 +55,11 @@
55 <!-- Actions --> 55 <!-- Actions -->
56 <view class="flex justify-end gap-[24rpx]"> 56 <view class="flex justify-end gap-[24rpx]">
57 <view class="flex items-center text-gray-500" @tap="onDelete(item)"> 57 <view class="flex items-center text-gray-500" @tap="onDelete(item)">
58 - <IconFont name="Del" size="14" class="mr-[8rpx]" /> 58 + <IconFont name="del" size="14" class="mr-[8rpx]" />
59 <text class="text-[24rpx]">删除</text> 59 <text class="text-[24rpx]">删除</text>
60 </view> 60 </view>
61 <view class="flex items-center text-blue-600" @tap="onView(item)"> 61 <view class="flex items-center text-blue-600" @tap="onView(item)">
62 - <IconFont name="Order" size="14" class="mr-[8rpx]" /> 62 + <IconFont name="order" size="14" class="mr-[8rpx]" />
63 <text class="text-[24rpx]">查看</text> 63 <text class="text-[24rpx]">查看</text>
64 </view> 64 </view>
65 </view> 65 </view>
...@@ -68,7 +68,7 @@ ...@@ -68,7 +68,7 @@
68 <!-- Empty State --> 68 <!-- Empty State -->
69 <view v-if="filteredList.length === 0" 69 <view v-if="filteredList.length === 0"
70 class="flex flex-col items-center justify-center py-[100rpx] text-gray-400"> 70 class="flex flex-col items-center justify-center py-[100rpx] text-gray-400">
71 - <IconFont name="Order" size="48" class="mb-[24rpx] opacity-50" /> 71 + <IconFont name="order" size="48" class="mb-[24rpx] opacity-50" />
72 <text class="text-[28rpx]">暂无相关计划书</text> 72 <text class="text-[28rpx]">暂无相关计划书</text>
73 </view> 73 </view>
74 </view> 74 </view>
...@@ -86,7 +86,7 @@ ...@@ -86,7 +86,7 @@
86 <script setup> 86 <script setup>
87 import { ref, computed } from 'vue' 87 import { ref, computed } from 'vue'
88 import { useGo } from '@/hooks/useGo' 88 import { useGo } from '@/hooks/useGo'
89 -import IconFont from '@/components/IconFont.vue' 89 +import { IconFont } from '@nutui/icons-vue-taro'
90 import TabBar from '@/components/TabBar.vue' 90 import TabBar from '@/components/TabBar.vue'
91 import NavHeader from '@/components/NavHeader.vue' 91 import NavHeader from '@/components/NavHeader.vue'
92 import Taro from '@tarojs/taro' 92 import Taro from '@tarojs/taro'
......
...@@ -71,7 +71,7 @@ ...@@ -71,7 +71,7 @@
71 <div class="flex flex-col gap-[32rpx]"> 71 <div class="flex flex-col gap-[32rpx]">
72 <div v-for="(feature, index) in features" :key="index" class="flex items-start"> 72 <div v-for="(feature, index) in features" :key="index" class="flex items-start">
73 <div class="w-[48rpx] h-[48rpx] rounded-full bg-blue-50 flex items-center justify-center mr-[24rpx] flex-shrink-0"> 73 <div class="w-[48rpx] h-[48rpx] rounded-full bg-blue-50 flex items-center justify-center mr-[24rpx] flex-shrink-0">
74 - <IconFont name="Check" size="14" color="#2563EB" /> 74 + <IconFont name="check" size="14" color="#2563EB" />
75 </div> 75 </div>
76 <div class="flex-1"> 76 <div class="flex-1">
77 <div class="text-[#1F2937] text-[28rpx] font-medium leading-[1.4]">{{ feature.title }}</div> 77 <div class="text-[#1F2937] text-[28rpx] font-medium leading-[1.4]">{{ feature.title }}</div>
...@@ -94,13 +94,13 @@ ...@@ -94,13 +94,13 @@
94 > 94 >
95 <div class="flex items-center justify-between mb-[8rpx]"> 95 <div class="flex items-center justify-between mb-[8rpx]">
96 <div class="flex items-center flex-1 mr-[24rpx]"> 96 <div class="flex items-center flex-1 mr-[24rpx]">
97 - <IconFont :name="file.iconName" size="24" :color="file.iconColor" customClass="mr-[24rpx]" /> 97 + <IconFont :name="file.iconName" size="24" :color="file.iconColor" class="mr-[24rpx]" />
98 <div class="flex flex-col"> 98 <div class="flex flex-col">
99 <span class="text-[#1F2937] text-[28rpx] font-medium mb-[4rpx] line-clamp-1">{{ file.name }}</span> 99 <span class="text-[#1F2937] text-[28rpx] font-medium mb-[4rpx] line-clamp-1">{{ file.name }}</span>
100 <span class="text-[#9CA3AF] text-[24rpx]">{{ file.size }}</span> 100 <span class="text-[#9CA3AF] text-[24rpx]">{{ file.size }}</span>
101 </div> 101 </div>
102 </div> 102 </div>
103 - <IconFont name="Download" size="20" color="#2563EB" @tap="onDownload(file)" /> 103 + <IconFont name="download" size="20" color="#2563EB" @tap="onDownload(file)" />
104 </div> 104 </div>
105 </div> 105 </div>
106 </div> 106 </div>
...@@ -116,7 +116,7 @@ ...@@ -116,7 +116,7 @@
116 import { ref } from 'vue' 116 import { ref } from 'vue'
117 import NavHeader from '@/components/NavHeader.vue' 117 import NavHeader from '@/components/NavHeader.vue'
118 import TabBar from '@/components/TabBar.vue' 118 import TabBar from '@/components/TabBar.vue'
119 -import IconFont from '@/components/IconFont.vue' 119 +import { IconFont } from '@nutui/icons-vue-taro'
120 import Taro, { useLoad } from '@tarojs/taro' 120 import Taro, { useLoad } from '@tarojs/taro'
121 121
122 // 接收页面参数 122 // 接收页面参数
...@@ -186,7 +186,7 @@ const files = ref([ ...@@ -186,7 +186,7 @@ const files = ref([
186 size: '2.3MB', 186 size: '2.3MB',
187 fileName: '产品条款.pdf', 187 fileName: '产品条款.pdf',
188 downloadUrl: 'https://cdn.ipadbiz.cn/manulife/document/1_%E7%BE%8E%E4%B9%90%E7%88%B1%E8%A7%89%E6%95%99%E8%82%B22024%E9%A1%B9%E7%9B%AE%E5%9B%BE%E5%BD%B1%E4%BB%8B%E7%BB%8D_.pdf', 188 downloadUrl: 'https://cdn.ipadbiz.cn/manulife/document/1_%E7%BE%8E%E4%B9%90%E7%88%B1%E8%A7%89%E6%95%99%E8%82%B22024%E9%A1%B9%E7%9B%AE%E5%9B%BE%E5%BD%B1%E4%BB%8B%E7%BB%8D_.pdf',
189 - iconName: 'Order', 189 + iconName: 'order',
190 iconColor: '#EF4444', 190 iconColor: '#EF4444',
191 fileType: 'pdf', 191 fileType: 'pdf',
192 showTip: false, 192 showTip: false,
...@@ -197,7 +197,7 @@ const files = ref([ ...@@ -197,7 +197,7 @@ const files = ref([
197 size: '1.8MB', 197 size: '1.8MB',
198 fileName: '投保须知.docx', 198 fileName: '投保须知.docx',
199 downloadUrl: 'https://cdn.ipadbiz.cn/manulife/document/%E8%80%81%E6%9D%A5%E8%B5%9B%E9%9A%90%E7%A7%81%E6%94%BF%E7%AD%96.docx', 199 downloadUrl: 'https://cdn.ipadbiz.cn/manulife/document/%E8%80%81%E6%9D%A5%E8%B5%9B%E9%9A%90%E7%A7%81%E6%94%BF%E7%AD%96.docx',
200 - iconName: 'Order', 200 + iconName: 'order',
201 iconColor: '#2563EB', 201 iconColor: '#2563EB',
202 fileType: 'docx', 202 fileType: 'docx',
203 showTip: true, 203 showTip: true,
...@@ -208,7 +208,7 @@ const files = ref([ ...@@ -208,7 +208,7 @@ const files = ref([
208 size: '3.2MB', 208 size: '3.2MB',
209 fileName: '健康告知.pptx', 209 fileName: '健康告知.pptx',
210 downloadUrl: 'https://cdn.ipadbiz.cn/manulife/document/%E8%82%A1%E5%88%A4%E5%90%88%E5%8F%8B%E7%94%A8%E7%9F%A5%E8%AF%86%E8%AF%B4%E6%98%8E20240112110417414.pptx', 210 downloadUrl: 'https://cdn.ipadbiz.cn/manulife/document/%E8%82%A1%E5%88%A4%E5%90%88%E5%8F%8B%E7%94%A8%E7%9F%A5%E8%AF%86%E8%AF%B4%E6%98%8E20240112110417414.pptx',
211 - iconName: 'Order', 211 + iconName: 'order',
212 iconColor: '#F59E0B', 212 iconColor: '#F59E0B',
213 fileType: 'pptx', 213 fileType: 'pptx',
214 showTip: true, 214 showTip: true,
...@@ -219,7 +219,7 @@ const files = ref([ ...@@ -219,7 +219,7 @@ const files = ref([
219 size: '1.5MB', 219 size: '1.5MB',
220 fileName: '保险责任说明.xlsx', 220 fileName: '保险责任说明.xlsx',
221 downloadUrl: 'https://cdn.ipadbiz.cn/manulife/document/%E8%80%81%E6%9D%A5%E8%B5%9B%E9%9A%90%E7%A7%81%E6%94%BF%E7%AD%96.docx', 221 downloadUrl: 'https://cdn.ipadbiz.cn/manulife/document/%E8%80%81%E6%9D%A5%E8%B5%9B%E9%9A%90%E7%A7%81%E6%94%BF%E7%AD%96.docx',
222 - iconName: 'Order', 222 + iconName: 'order',
223 iconColor: '#10B981', 223 iconColor: '#10B981',
224 fileType: 'xlsx', 224 fileType: 'xlsx',
225 showTip: true, 225 showTip: true,
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
7 <view class="px-[40rpx] mt-[40rpx]"> 7 <view class="px-[40rpx] mt-[40rpx]">
8 <!-- Search Input --> 8 <!-- Search Input -->
9 <view class="flex items-center w-full h-[88rpx] bg-white rounded-full px-[32rpx] border border-gray-200 mb-[40rpx]"> 9 <view class="flex items-center w-full h-[88rpx] bg-white rounded-full px-[32rpx] border border-gray-200 mb-[40rpx]">
10 - <IconFont name="Search" class="text-gray-400 mr-[16rpx]" size="18" /> 10 + <IconFont name="search" class="text-gray-400 mr-[16rpx]" size="18" />
11 <input 11 <input
12 v-model="searchKeyword" 12 v-model="searchKeyword"
13 type="text" 13 type="text"
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
16 @confirm="handleSearch" 16 @confirm="handleSearch"
17 /> 17 />
18 <view v-if="searchKeyword" class="ml-[16rpx]" @tap="clearSearch"> 18 <view v-if="searchKeyword" class="ml-[16rpx]" @tap="clearSearch">
19 - <IconFont name="Close" class="text-gray-400" size="16" /> 19 + <IconFont name="close" class="text-gray-400" size="16" />
20 </view> 20 </view>
21 </view> 21 </view>
22 22
...@@ -100,7 +100,7 @@ ...@@ -100,7 +100,7 @@
100 100
101 <!-- Initial State --> 101 <!-- Initial State -->
102 <view v-else class="flex flex-col items-center justify-center py-[120rpx]"> 102 <view v-else class="flex flex-col items-center justify-center py-[120rpx]">
103 - <IconFont name="Search" class="text-gray-300 mb-[24rpx]" size="64" /> 103 + <IconFont name="search" class="text-gray-300 mb-[24rpx]" size="64" />
104 <view class="text-[#6B7280] text-[28rpx]">搜索培训资料、案例、产品</view> 104 <view class="text-[#6B7280] text-[28rpx]">搜索培训资料、案例、产品</view>
105 <view class="text-[#9CA3AF] text-[24rpx] mt-[12rpx]">输入关键词开始搜索</view> 105 <view class="text-[#9CA3AF] text-[24rpx] mt-[12rpx]">输入关键词开始搜索</view>
106 </view> 106 </view>
...@@ -113,7 +113,7 @@ import { ref, computed } from 'vue' ...@@ -113,7 +113,7 @@ import { ref, computed } from 'vue'
113 import Taro from '@tarojs/taro' 113 import Taro from '@tarojs/taro'
114 import { useGo } from '@/hooks/useGo' 114 import { useGo } from '@/hooks/useGo'
115 import NavHeader from '@/components/NavHeader.vue' 115 import NavHeader from '@/components/NavHeader.vue'
116 -import IconFont from '@/components/IconFont.vue' 116 +import { IconFont } from '@nutui/icons-vue-taro'
117 117
118 // Navigation 118 // Navigation
119 const go = useGo() 119 const go = useGo()
......