hookehuyr

feat: 新增家办相关页面并重构通用导航组件

- 新增 `pages/family-office/index` 页面,实现家庭成员、健康档案、资产管理、生活服务四大功能板块
- 创建通用导航头组件 `NavHeader`,统一页面顶部样式并优化滚动体验
- 封装图标组件 `IconFont`,简化 NutUI 图标使用并消除 Vue 3 响应式警告
- 重构入职相关、签单相关、首页页面,使用新组件替代硬编码头部结构
- 将静态数据源从 `ref` 升级为 `shallowRef` 以提升性能
- 更新路由配置和组件类型声明
......@@ -7,7 +7,9 @@ export {}
declare module 'vue' {
export interface GlobalComponents {
IconFont: typeof import('./src/components/IconFont.vue')['default']
IndexNav: typeof import('./src/components/indexNav.vue')['default']
NavHeader: typeof import('./src/components/NavHeader.vue')['default']
NutButton: typeof import('@nutui/nutui-taro')['Button']
Picker: typeof import('./src/components/time-picker-data/picker.vue')['default']
PosterBuilder: typeof import('./src/components/PosterBuilder/index.vue')['default']
......
......@@ -4,7 +4,17 @@ All notable changes to this project will be documented in this file.
## [Unreleased]
### Fixed
- 修复 Vue 3 响应式组件警告:将包含 NutUI 图标组件的静态数据源从 `ref` 升级为 `shallowRef`,并结合 `markRaw` 使用。彻底消除了 "Component that was made a reactive object" 警告,避免了 Vue 对组件对象进行不必要的深度代理,显著提升了页面初始化和渲染性能。涉及首页、TabBar、入职相关、签单相关及家办相关所有页面。
- 优化 `NavHeader` 组件交互体验,将页面头部固定在顶部 (`fixed`),并内置等高占位元素防止内容遮挡,提升滚动时的用户体验。
- 重构图标使用方式:创建 `src/components/IconFont.vue` 组件封装 NutUI 图标库,支持通过字符串 `name` 属性配置图标,彻底移除 `markRaw` 逻辑,简化代码结构并符合用户偏好,同时保留了 SVG 图标的高清与高性能特性。
### Added
- 创建通用导航头组件 `src/components/NavHeader.vue`,统一页面头部样式
- 重构 "入职相关"、"签单相关"、"家办相关" 页面,使用 `NavHeader` 组件替代硬编码的头部结构
- 新增 "家办相关" 页面 (`src/pages/family-office`),复用 "入职相关" 页面布局与样式
- 规划并实现家庭成员、健康档案、资产管理、生活服务四大功能板块
- 注册新页面路由至 `src/app.config.js`
- 初始化项目 Git 仓库
- 创建 .gitignore 配置文件
- 创建并切换到 develop 分支
......
This diff is collapsed. Click to expand it.
<template>
<div class="page flex-col">
<div class="group_1 flex-row justify-between">
<span class="text_1">9:41</span>
<img
class="image_1"
referrerpolicy="no-referrer"
src="https://lanhu-oss-2537-2.lanhuapp.com/SketchPng41ebf05313566695702fdc28688b6ed52dbbba555ddd1f6c423593ff63b3f65e"
/>
</div>
<div class="group_2 flex-row justify-between">
<img
class="thumbnail_1"
referrerpolicy="no-referrer"
src="https://lanhu-oss-2537-2.lanhuapp.com/SketchPng66b8991933f35bccdd7664c63b4a7cba9b2c3554be75da299d9c33e4b9efda22"
/>
<span class="text_2">产品中心</span>
</div>
<div class="group_3 flex-col">
<div class="group_4 flex-col">
<div class="group_5 flex-row justify-between">
<div class="text-wrapper_1 flex-col">
<span class="text_3">全部产品</span>
</div>
<div class="text-wrapper_2 flex-col">
<span class="text_4">人寿保险</span>
</div>
<div class="text-wrapper_3 flex-col">
<span class="text_5">医疗保险</span>
</div>
<div class="text-wrapper_4 flex-col">
<span class="text_6">意外保险</span>
</div>
</div>
</div>
<span class="text_7">全部产品</span>
<div class="grid_1 flex-row">
<div class="box_1 flex-col">
<div class="image-text_1 flex-col">
<div class="box_2 flex-col">
<div class="text-wrapper_5 flex-col">
<span class="text_8">热卖</span>
</div>
</div>
<span class="text-group_1">终身寿险尊享版</span>
</div>
<div class="text-wrapper_6 flex-col">
<span class="text_9">5年超值</span>
</div>
</div>
<div class="box_3 flex-col">
<span class="text_10">百万医疗保险计划</span>
<div class="block_1 flex-row justify-between">
<img
class="thumbnail_2"
referrerpolicy="no-referrer"
src="https://lanhu-oss-2537-2.lanhuapp.com/SketchPnga1fc927b8312af6aec1a5da5cbcba571a10640194d44885876793d4472bcffe2"
/>
<div class="group_6 flex-col">
<div class="text-wrapper_7 flex-col">
<span class="text_11">收益率3.5%</span>
</div>
</div>
</div>
</div>
<div class="box_4 flex-col">
<span class="text_12">意外伤害保障计划</span>
<div class="box_5 flex-row justify-between">
<img
class="thumbnail_3"
referrerpolicy="no-referrer"
src="https://lanhu-oss-2537-2.lanhuapp.com/SketchPng4c86d1d1b122075e3c3268fd63f98594b586778c6dc6b611dc372913490d2807"
/>
<div class="box_6 flex-col">
<div class="text-wrapper_8 flex-col">
<span class="text_13">保证收益万能</span>
</div>
</div>
</div>
</div>
<div class="box_7 flex-col">
<div class="image-text_2 flex-col">
<div class="box_8 flex-col">
<div class="text-wrapper_9 flex-col">
<span class="text_14">热卖</span>
</div>
</div>
<span class="text-group_2">分红型年金保险</span>
</div>
<div class="box_9 flex-row justify-between">
<img
class="thumbnail_4"
referrerpolicy="no-referrer"
src="https://lanhu-oss-2537-2.lanhuapp.com/SketchPnga1fc927b8312af6aec1a5da5cbcba571a10640194d44885876793d4472bcffe2"
/>
<div class="block_2 flex-col">
<div class="text-wrapper_10 flex-col">
<span class="text_15">保证收益万能</span>
</div>
</div>
</div>
</div>
<div class="box_10 flex-col">
<span class="text_16">重大疾病保险</span>
<div class="group_7 flex-row justify-between">
<img
class="thumbnail_5"
referrerpolicy="no-referrer"
src="https://lanhu-oss-2537-2.lanhuapp.com/SketchPng4c86d1d1b122075e3c3268fd63f98594b586778c6dc6b611dc372913490d2807"
/>
<div class="group_8 flex-col">
<div class="text-wrapper_11 flex-col">
<span class="text_17">收益率4.2%</span>
</div>
</div>
</div>
</div>
<div class="box_11 flex-col">
<div class="image-text_3 flex-col">
<div class="box_12 flex-col">
<div class="text-wrapper_12 flex-col">
<span class="text_18">热卖</span>
</div>
</div>
<span class="text-group_3">少儿教育金保险</span>
</div>
<div class="group_9 flex-row justify-between">
<img
class="thumbnail_6"
referrerpolicy="no-referrer"
src="https://lanhu-oss-2537-2.lanhuapp.com/SketchPnga1fc927b8312af6aec1a5da5cbcba571a10640194d44885876793d4472bcffe2"
/>
<div class="group_10 flex-col">
<div class="text-wrapper_13 flex-col">
<span class="text_19">教育专属</span>
</div>
</div>
</div>
</div>
</div>
<div class="group_11 flex-col">
<img
class="image_2"
referrerpolicy="no-referrer"
src="https://lanhu-oss-2537-2.lanhuapp.com/SketchPngbf3e746af52a38753bd540d5f486761a166161ff3c8f2985aa5e994a36349ea4"
/>
<div class="list_1 flex-row">
<div
class="image-text_4 flex-col"
v-for="(item, index) in loopData0"
:key="index"
>
<img
class="label_1"
referrerpolicy="no-referrer"
:src="item.lanhuimage0"
/>
<span
class="text-group_4"
:style="{ color: item.lanhufontColor0 }"
v-html="item.lanhutext0"
></span>
</div>
</div>
<img
class="image_3"
referrerpolicy="no-referrer"
src="https://lanhu-oss-2537-2.lanhuapp.com/SketchPngd87bce34194e46404c7ac21a64bed8e9f8454451baaf336c5201241680a20c9d"
/>
</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
loopData0: [
{
lanhuimage0:
'https://lanhu-oss-2537-2.lanhuapp.com/SketchPnga613c67a645a5984586afecdb62939c0f7a50579c221b1918780e7886dfe9c43',
lanhutext0: '首页',
lanhufontColor0: 'rgba(37,99,235,1.000000)',
},
{
lanhuimage0:
'https://lanhu-oss-2537-2.lanhuapp.com/SketchPng355fd7cd6d5c986d30655db577fe8e511f878d37c9506e77dc53be60228d6453',
lanhutext0: 'AI答疑',
lanhufontColor0: 'rgba(156,163,175,1.000000)',
},
{
lanhuimage0:
'https://lanhu-oss-2537-2.lanhuapp.com/SketchPng13ceb19b113cdc23fbf47e15ccf14d27aec044ad2c13f88539fc8459993ade6f',
lanhutext0: '我的',
lanhufontColor0: 'rgba(156,163,175,1.000000)',
},
],
constants: {},
};
},
methods: {},
};
</script>
<style src="./common.css" />
<style src="./index.css" />
......@@ -9,6 +9,7 @@ const pages = [
'pages/index/index',
'pages/auth/index',
'pages/onboarding/index',
'pages/family-office/index',
'pages/signing/index',
]
......
<template>
<component :is="iconComponent" v-if="iconComponent" :size="size" :class="customClass" :color="color" />
</template>
<script setup>
import { computed } from 'vue';
import {
Cart,
Category,
Check,
Checklist,
Clock,
Edit,
Find,
Home,
My,
Order,
PlayCircleFill,
RectRight,
Search,
Service,
Star,
Top
} from '@nutui/icons-vue-taro';
const props = defineProps({
name: {
type: String,
required: true
},
size: {
type: [String, Number],
default: ''
},
color: {
type: String,
default: ''
},
customClass: {
type: String,
default: ''
}
});
const icons = {
Cart,
Category,
Check,
Checklist,
Clock,
Edit,
Find,
Home,
My,
Order,
PlayCircleFill,
RectRight,
Search,
Service,
Star,
Top
};
const iconComponent = computed(() => {
return icons[props.name] || null;
});
</script>
<!--
* @Date: 2026-01-29 21:09:28
* @LastEditors: hookehuyr hookehuyr@gmail.com
* @LastEditTime: 2026-01-29 21:18:14
* @FilePath: /manulife-weapp/src/components/NavHeader.vue
* @Description: 通用导航头组件,用于页面顶部固定导航栏,展示页面标题。
-->
<template>
<!-- Placeholder to prevent content from being hidden behind fixed header -->
<div class="w-full h-[250rpx]"></div>
<!-- Fixed Header -->
<div class="fixed top-0 left-0 z-50 w-full h-[250rpx] bg-gradient-to-b from-[#1E3A8A] to-[#2563EB] flex items-center justify-center pt-[100rpx]">
<span class="text-white text-[35rpx] font-normal">{{ title }}</span>
</div>
</template>
<script setup>
defineProps({
title: {
type: String,
required: true
}
})
</script>
<!--
* @Date: 2026-01-29 20:33:23
* @LastEditors: hookehuyr hookehuyr@gmail.com
* @LastEditTime: 2026-01-29 20:42:52
* @LastEditTime: 2026-01-29 21:18:33
* @FilePath: /manulife-weapp/src/components/TabBar.vue
* @Description: 文件描述
* @Description: 通用底部导航栏组件,用于页面底部固定导航栏,展示页面标题。
-->
<template>
<view class="fixed bottom-0 left-0 w-full bg-white shadow-[0_-4rpx_16rpx_rgba(0,0,0,0.05)] pb-[env(safe-area-inset-bottom)] z-50">
......@@ -14,8 +14,8 @@
:key="index"
@tap="handleTabClick(item)"
>
<component
:is="item.icon"
<IconFont
:name="item.icon"
:class="[current === item.key ? 'text-blue-600' : 'text-gray-400']"
size="24"
/>
......@@ -29,8 +29,8 @@
</template>
<script setup>
import { ref } from 'vue'
import { Home, Service, My } from '@nutui/icons-vue-taro'
import { ref, shallowRef } from 'vue'
import IconFont from '@/components/IconFont.vue'
import { useGo } from '@/hooks/useGo'
import Taro from '@tarojs/taro'
......@@ -43,24 +43,24 @@ const props = defineProps({
const go = useGo()
const tabs = ref([
const tabs = shallowRef([
{
key: 'home',
label: '首页',
icon: Home,
icon: 'Home',
path: '/pages/index/index'
},
{
key: 'ai',
label: 'AI答疑',
icon: Service,
path: '/pages/ai/index' // Placeholder path
icon: 'Service',
path: '/pages/ai/index'
},
{
key: 'me',
label: '我的',
icon: My,
path: '/pages/me/index' // Placeholder path
icon: 'My',
path: '/pages/me/index'
}
])
......
/*
* @Date: 2025-06-28 10:33:00
* @LastEditors: hookehuyr hookehuyr@gmail.com
* @LastEditTime: 2026-01-29 17:51:21
* @FilePath: /manulife-weapp/src/pages/index/index.config.js
* @Description: 首页配置
*/
export default definePageConfig({
navigationBarTitleText: '入职相关',
navigationStyle: 'custom'
})
<template>
<div class="min-h-screen bg-[#f9fafb] pb-[calc(160rpx+env(safe-area-inset-bottom))]">
<!-- Navigation Header -->
<NavHeader title="家办相关" />
<!-- Content List -->
<div class="px-[40rpx] mt-[40rpx] relative z-10">
<div v-for="(section, index) in sections" :key="index"
class="bg-white rounded-[32rpx] mb-[32rpx] pb-[56rpx] overflow-hidden shadow-sm">
<!-- Section Header -->
<div class="px-[40rpx] py-[32rpx]" :style="{ background: section.bgGradient }">
<span class="text-[#1f2937] text-[32rpx] font-normal">{{ section.title }}</span>
</div>
<!-- Section Items -->
<div class="flex flex-col">
<div v-for="(item, itemIndex) in section.items" :key="itemIndex" class="flex flex-col">
<div class="flex items-center justify-between px-[40rpx] mt-[56rpx] cursor-pointer"
@tap="handleItemClick(item)">
<div class="flex items-center">
<div class="w-[96rpx] h-[96rpx] mr-[32rpx] flex items-center justify-center bg-gray-50 rounded-full">
<IconFont :name="item.icon" class="text-blue-600" size="32" />
</div>
<div class="flex flex-col">
<span class="text-[#1f2937] text-[28rpx] font-normal leading-[40rpx]">{{ item.title }}</span>
<span class="text-[#6b7280] text-[24rpx] mt-[8rpx] leading-[32rpx]">{{ item.subtitle }}</span>
</div>
</div>
<IconFont name="RectRight" class="text-gray-400" size="16" />
</div>
<!-- Divider -->
<div v-if="itemIndex < section.items.length - 1"
class="w-[626rpx] h-[2rpx] bg-[#e5e7eb] mx-auto mt-[32rpx]"></div>
</div>
</div>
</div>
</div>
<!-- Tab Bar -->
<TabBar current="" />
</div>
</template>
<script setup>
import { shallowRef } from 'vue'
import { useGo } from '@/hooks/useGo'
import TabBar from '@/components/TabBar.vue'
import NavHeader from '@/components/NavHeader.vue'
import IconFont from '@/components/IconFont.vue'
const go = useGo()
const sections = shallowRef([
{
title: '家庭成员',
bgGradient: 'linear-gradient(90deg, #F3E8FF 0%, #E9D5FF 100%)',
items: [
{
title: '成员列表',
subtitle: '管理家庭成员信息',
icon: 'My'
},
{
title: '新增成员',
subtitle: '添加家庭成员',
icon: 'Edit'
}
]
},
{
title: '健康档案',
bgGradient: 'linear-gradient(90deg, #F0FDF4 0%, #DCFCE7 100%)',
items: [
{
title: '体检报告',
subtitle: '查看家庭成员体检记录',
icon: 'Order'
},
{
title: '就医记录',
subtitle: '家庭成员就医历史',
icon: 'Clock'
}
]
},
{
title: '资产管理',
bgGradient: 'linear-gradient(90deg, #FFF7ED 0%, #FFEDD5 100%)',
items: [
{
title: '保单管理',
subtitle: '家庭保单汇总',
icon: 'Star'
},
{
title: '资产总览',
subtitle: '家庭资产分布',
icon: 'Find'
}
]
},
{
title: '生活服务',
bgGradient: 'linear-gradient(90deg, #E0F2FE 0%, #BAE6FD 100%)',
items: [
{
title: '高端医疗',
subtitle: '预约高端医疗服务',
icon: 'Service'
},
{
title: '康养服务',
subtitle: '健康养生服务',
icon: 'PlayCircleFill'
}
]
}
])
/**
* Handle item click
* @param {Object} item - Clicked item data
*/
const handleItemClick = (item) => {
console.log('Clicked:', item.title)
// TODO: Navigate to respective page
}
</script>
<script>
export default {
name: 'FamilyOfficeIndex'
}
</script>
/*
* @Date: 2025-06-28 10:33:00
* @LastEditors: hookehuyr hookehuyr@gmail.com
* @LastEditTime: 2026-01-29 17:51:21
* @LastEditTime: 2026-01-29 21:07:21
* @FilePath: /manulife-weapp/src/pages/index/index.config.js
* @Description: 首页配置
*/
export default {
navigationBarTitleText: '臻奇智荟圈'
}
export default definePageConfig({
navigationBarTitleText: '臻奇智荟圈',
navigationStyle: 'custom'
})
......
This diff is collapsed. Click to expand it.
<template>
<div class="min-h-screen bg-[#f9fafb] pb-[calc(160rpx+env(safe-area-inset-bottom))]">
<!-- Navigation Header -->
<div class="relative w-full h-[300rpx] bg-gradient-to-b from-[#1E3A8A] to-[#2563EB] flex items-center justify-center pt-[40rpx]">
<span class="text-white text-[44rpx] font-normal">入职相关</span>
</div>
<NavHeader title="入职相关" />
<!-- Content List -->
<div class="px-[40rpx] mt-[40rpx] relative z-10">
......@@ -19,14 +17,14 @@
<div class="flex items-center justify-between px-[40rpx] mt-[56rpx] cursor-pointer" @tap="handleItemClick(item)">
<div class="flex items-center">
<div class="w-[96rpx] h-[96rpx] mr-[32rpx] flex items-center justify-center bg-gray-50 rounded-full">
<component :is="item.icon" class="text-blue-600" size="32" />
<IconFont :name="item.icon" class="text-blue-600" size="32" />
</div>
<div class="flex flex-col">
<span class="text-[#1f2937] text-[28rpx] font-normal leading-[40rpx]">{{ item.title }}</span>
<span class="text-[#6b7280] text-[24rpx] mt-[8rpx] leading-[32rpx]">{{ item.subtitle }}</span>
</div>
</div>
<RectRight class="text-gray-400" size="16" />
<IconFont name="RectRight" class="text-gray-400" size="16" />
</div>
<!-- Divider -->
<div v-if="itemIndex < section.items.length - 1" class="w-[626rpx] h-[2rpx] bg-[#e5e7eb] mx-auto mt-[32rpx]"></div>
......@@ -41,85 +39,72 @@
</template>
<script setup>
import { ref } from 'vue'
import { shallowRef } from 'vue'
import { useGo } from '@/hooks/useGo'
import TabBar from '@/components/TabBar.vue'
import {
Edit,
Find,
Order,
Clock,
Checklist,
Check,
Star,
Top,
PlayCircleFill,
RectRight
} from '@nutui/icons-vue-taro'
import NavHeader from '@/components/NavHeader.vue'
import IconFont from '@/components/IconFont.vue'
const go = useGo()
const sections = ref([
const sections = shallowRef([
{
title: '入职前',
bgGradient: 'linear-gradient(90deg, #F3E8FF 0%, #E9D5FF 100%)',
items: [
{
icon: 'Edit',
title: '考试报名',
subtitle: '资格考试报名入口',
icon: Edit
subtitle: '报名参加代理人资格考试'
},
{
title: '考试资料及刷题',
subtitle: '历年真题及模拟题库',
icon: Find
icon: 'Find',
title: '面试结果查询',
subtitle: '查看面试状态和结果'
},
{
title: '签合约锁人规则',
subtitle: '合约条款详解',
icon: Order
icon: 'Order',
title: '入职材料提交',
subtitle: '上传入职所需证件和资料'
}
]
},
{
title: '入职中',
bgGradient: 'linear-gradient(90deg, #F0FDF4 0%, #DCFCE7 100%)',
items: [
{
icon: 'Clock',
title: '各个进度时间线表格',
subtitle: '入职进度跟踪表',
icon: Clock
subtitle: '查看入职流程关键节点'
},
{
title: '各个财务计划盘及对数',
subtitle: '财务计划配置指南',
icon: Checklist
icon: 'Checklist',
title: '待办事项清单',
subtitle: '你需要完成的任务列表'
},
{
title: '基本法对比',
subtitle: '公司制度对比分析',
icon: Check
icon: 'Check',
title: '签署合同',
subtitle: '电子合同在线签署'
}
]
},
{
title: '入职后',
bgGradient: 'linear-gradient(90deg, #FFF7ED 0%, #FFEDD5 100%)',
items: [
{
title: '公司拿钱必修课',
subtitle: '薪酬体系培训',
icon: Star
icon: 'Star',
title: '新人培训',
subtitle: '参加新人岗前培训课程'
},
{
title: '升职流程条件',
subtitle: '晋升通道说明',
icon: Top
icon: 'Top',
title: '业绩目标设定',
subtitle: '制定首月业绩目标'
},
{
title: '必修课程',
subtitle: '岗位技能课程',
icon: PlayCircleFill
icon: 'PlayCircleFill',
title: '团队介绍',
subtitle: '了解你的团队和主管'
}
]
}
......
<template>
<div class="min-h-screen bg-[#f9fafb] pb-[calc(160rpx+env(safe-area-inset-bottom))]">
<!-- Navigation Header -->
<div class="relative w-full h-[300rpx] bg-gradient-to-b from-[#1E3A8A] to-[#2563EB] flex items-center justify-center pt-[40rpx]">
<span class="text-white text-[44rpx] font-normal">签单相关</span>
</div>
<NavHeader title="签单相关" />
<!-- Content List -->
<div class="px-[40rpx] mt-[40rpx] relative z-10">
......@@ -19,14 +17,14 @@
<div class="flex items-center justify-between px-[40rpx] mt-[56rpx] cursor-pointer" @tap="handleItemClick(item)">
<div class="flex items-center">
<div class="w-[96rpx] h-[96rpx] mr-[32rpx] flex items-center justify-center bg-gray-50 rounded-full">
<component :is="item.icon" class="text-blue-600" size="32" />
<IconFont :name="item.icon" class="text-blue-600" size="32" />
</div>
<div class="flex flex-col">
<span class="text-[#1f2937] text-[28rpx] font-normal leading-[40rpx]">{{ item.title }}</span>
<span class="text-[#6b7280] text-[24rpx] mt-[8rpx] leading-[32rpx]">{{ item.subtitle }}</span>
</div>
</div>
<RectRight class="text-gray-400" size="16" />
<IconFont name="RectRight" class="text-gray-400" size="16" />
</div>
<!-- Divider -->
<div v-if="itemIndex < section.items.length - 1" class="w-[626rpx] h-[2rpx] bg-[#e5e7eb] mx-auto mt-[32rpx]"></div>
......@@ -41,109 +39,92 @@
</template>
<script setup>
import { ref } from 'vue'
import { shallowRef } from 'vue'
import { useGo } from '@/hooks/useGo'
import TabBar from '@/components/TabBar.vue'
import {
Shop,
Category,
Check,
Edit,
Checklist,
Cart,
People,
Order,
Clock,
Refresh,
Location,
RectRight
} from '@nutui/icons-vue-taro'
import NavHeader from '@/components/NavHeader.vue'
import IconFont from '@/components/IconFont.vue'
const go = useGo()
const sections = ref([
const sections = shallowRef([
{
title: '培训板块',
bgGradient: 'linear-gradient(90deg, #F3E8FF 0%, #E9D5FF 100%)',
items: [
{
icon: 'Shop',
title: '公司介绍',
subtitle: '企业背景及发展历程',
icon: Shop
subtitle: '企业背景及发展历程'
},
{
icon: 'Category',
title: '产品介绍及更新',
subtitle: '最新产品资料库',
icon: Category
subtitle: '最新产品资料库'
}
]
},
{
title: '签单前',
bgGradient: 'linear-gradient(90deg, #F0FDF4 0%, #DCFCE7 100%)',
items: [
{
icon: 'Check',
title: '预核保',
subtitle: '核保流程指引',
icon: Check
subtitle: '核保流程指引'
},
{
icon: 'Edit',
title: '做计划书',
subtitle: '方案设计工具',
icon: Edit
subtitle: '方案设计工具'
}
]
},
{
title: '签单中',
bgGradient: 'linear-gradient(90deg, #FFF7ED 0%, #FFEDD5 100%)',
items: [
{
icon: 'Checklist',
title: '信息收集及健康告知模板',
subtitle: '标准表格及注意事项',
icon: Checklist
subtitle: '标准表格及注意事项'
},
{
icon: 'Cart',
title: '缴费方式银行开户',
subtitle: '支付渠道办理指南',
icon: Cart
subtitle: '支付渠道办理指南'
},
{
icon: 'People',
title: '体检经验',
subtitle: '体检流程及常见问题',
icon: People
subtitle: '体检流程及常见问题'
}
]
},
{
title: '签单后',
bgGradient: 'linear-gradient(90deg, #EFF6FF 0%, #DBEAFE 100%)',
items: [
{
icon: 'Order',
title: '批单跟进',
subtitle: '保单变更处理流程',
icon: Order
subtitle: '保单变更处理流程'
},
{
icon: 'Clock',
title: '核保/pending',
subtitle: '核保进度查询',
icon: Clock
subtitle: '核保进度查询'
},
{
icon: 'Refresh',
title: '续保',
subtitle: '续期服务指引',
icon: Refresh
subtitle: '续期服务指引'
}
]
},
{
title: '售后',
bgGradient: 'linear-gradient(90deg, #F0FDF4 0%, #DCFCE7 100%)',
items: [
{
icon: 'Location',
title: '香港医生资源',
subtitle: '专业医疗机构名录',
icon: Location
subtitle: '专业医疗机构名录'
}
]
}
......