# 长者档案功能 - 代码示例
## 1. 组件使用示例
### 在父组件中使用 ElderProfileDialog
```vue
```
## 2. 事件处理示例
### 监听档案按钮点击事件
```vue
```
## 3. 数据结构示例
### 长者档案数据结构
```typescript
interface ElderProfileData {
id?: number // 长者ID
name: string // 长者名称
avatar?: string // 头像URL
age: number // 年龄
gender: string // 性别
relativePhone?: string // 家属电话
elderPhone?: string // 长者电话
address?: string // 长者地址
warningData?: WarningRecord[] // 预警历史
}
interface WarningRecord {
eventType: string // 预警类型
message: string // 预警信息
happensAt: string // 发生时间
}
```
## 4. API 调用示例
### 获取长者档案
```typescript
import fetchHttp from '@/config/axios/fetchHttp'
import { getAccessToken } from '@/utils/auth'
// 调用接口获取长者档案
const fetchElderDetail = async (elderId: number) => {
try {
const res = await fetchHttp.get(
`/api/pc/admin/getElderDetail?elderId=${elderId}`,
{},
{
headers: {
Authorization: `Bearer ${getAccessToken()}`
}
}
)
if (res) {
console.log('长者档案:', res)
return res
}
} catch (error) {
console.error('获取长者档案失败:', error)
}
}
```
## 5. 假数据生成示例
### 生成测试用的假数据
```typescript
// 生成假数据
const generateMockData = (elderId: number) => {
const names = ['王奶奶', '李爷爷', '张奶奶', '刘爷爷', '陈奶奶', '杨爷爷']
const genders = ['女', '男']
const addresses = [
'北京市朝阳区建国路1号',
'上海市浦东新区世纪大道100号',
'广州市天河区珠江新城',
'深圳市南山区科技园路1号',
'杭州市西湖区文三路477号'
]
return {
id: elderId,
name: names[elderId % names.length],
age: 65 + (elderId % 20),
gender: genders[elderId % 2],
elderPhone: `1${Math.floor(Math.random() * 9) + 3}${String(Math.floor(Math.random() * 1000000000)).padStart(9, '0')}`,
relativePhone: `1${Math.floor(Math.random() * 9) + 3}${String(Math.floor(Math.random() * 1000000000)).padStart(9, '0')}`,
address: addresses[elderId % addresses.length],
warningData: [
{
eventType: '跌倒预警',
message: '检测到长者跌倒,请立即查看',
happensAt: new Date().toISOString()
}
]
}
}
```
## 6. 样式自定义示例
### 自定义弹窗样式
```vue
```
## 7. 完整示例
### 完整的长者档案功能实现
```vue
```
## 8. 错误处理示例
### 处理接口错误和网络问题
```typescript
const fetchElderDetail = async (elderId: number) => {
loading.value = true
try {
const res = await fetchHttp.get(
`/api/pc/admin/getElderDetail?elderId=${elderId}`,
{},
{
headers: {
Authorization: `Bearer ${getAccessToken()}`
}
}
)
if (res) {
// 接口有数据
elderData.value = res
} else {
// 接口暂无数据,使用假数据
console.warn('接口暂无数据,使用假数据')
elderData.value = generateMockData(elderId)
}
} catch (error) {
// 接口出错,使用假数据
console.error('获取长者档案失败:', error)
ElMessage.warning('使用本地数据显示')
elderData.value = generateMockData(elderId)
} finally {
loading.value = false
}
}
```
## 9. 时间格式化示例
### 格式化预警时间
```typescript
import { formatToDateTime } from '@/utils/dateUtil'
// 格式化时间
const formatTime = (time: string | number) => {
if (!time) return '未知'
return formatToDateTime(time)
}
// 使用示例
const warningTime = '2024-01-15T10:30:00Z'
console.log(formatTime(warningTime)) // 输出: 2024-01-15 10:30:00
```
## 10. 类型定义示例
### 完整的 TypeScript 类型定义
```typescript
// 长者档案数据
interface ElderProfileData {
id?: number
name: string
avatar?: string
age: number
gender: string
relativePhone?: string
elderPhone?: string
address?: string
warningData?: WarningRecord[]
}
// 预警记录
interface WarningRecord {
eventType: string
message: string
happensAt: string
}
// 组件 Props
interface ElderProfileDialogProps {
modelValue: boolean
elderId?: number
}
// 组件 Emits
interface ElderProfileDialogEmits {
'update:modelValue': [value: boolean]
}
```
## 11. 集成测试示例
### 测试长者档案功能
```typescript
import { describe, it, expect, vi } from 'vitest'
import { mount } from '@vue/test-utils'
import ElderProfileDialog from './ElderProfileDialog.vue'
describe('ElderProfileDialog', () => {
it('应该正确显示长者信息', () => {
const wrapper = mount(ElderProfileDialog, {
props: {
modelValue: true,
elderId: 1
}
})
expect(wrapper.find('.profile-content').exists()).toBe(true)
})
it('应该在关闭时触发 update:modelValue 事件', async () => {
const wrapper = mount(ElderProfileDialog, {
props: {
modelValue: true,
elderId: 1
}
})
await wrapper.vm.$emit('update:modelValue', false)
expect(wrapper.emitted('update:modelValue')).toBeTruthy()
})
})
```
## 12. 性能优化示例
### 使用缓存优化性能
```typescript
// 缓存长者档案数据
const elderProfileCache = new Map()
const fetchElderDetail = async (elderId: number) => {
// 检查缓存
if (elderProfileCache.has(elderId)) {
elderData.value = elderProfileCache.get(elderId)!
return
}
loading.value = true
try {
const res = await fetchHttp.get(
`/api/pc/admin/getElderDetail?elderId=${elderId}`,
{},
{
headers: {
Authorization: `Bearer ${getAccessToken()}`
}
}
)
if (res) {
// 缓存数据
elderProfileCache.set(elderId, res)
elderData.value = res
}
} catch (error) {
console.error('获取长者档案失败:', error)
} finally {
loading.value = false
}
}
```