hookehuyr

feat(familyForm): 新增家庭报名表单模块

添加家庭报名表单页面、路由、服务及模拟数据
- 创建表单页面,包含幼儿园班级选择、参赛人数、孩童姓名、手机号、证件登记和服装尺码等字段
- 添加路由配置,支持 /family-form 路径访问
- 实现服务层,提供获取学校选项和提交报名信息的功能
- 添加模拟数据,包含幼儿园列表和本地存储的报名记录
const familyFormRoutes = [
{
path: '/family-form',
name: '家庭报名表单',
component: () => import('@/views/familyForm/index.vue'),
meta: {
title: '家庭表单录入'
},
children: []
}
];
export default familyFormRoutes;
This diff is collapsed. Click to expand it.
const STORAGE_KEY = 'family-form-registrations';
const mockSchoolList = [
{
id: 'kg_001',
name: '上海市杨浦区科技幼儿园',
classes: [
{ id: 'kg_001_c_001', name: '小一班' },
{ id: 'kg_001_c_002', name: '中二班' },
{ id: 'kg_001_c_003', name: '大三班' }
]
},
{
id: 'kg_002',
name: '上海市黄浦区蓓蕾幼儿园',
classes: [
{ id: 'kg_002_c_001', name: '小太阳班' },
{ id: 'kg_002_c_002', name: '星星班' },
{ id: 'kg_002_c_003', name: '彩虹班' }
]
},
{
id: 'kg_003',
name: '上海市徐汇区童心幼儿园',
classes: [
{ id: 'kg_003_c_001', name: '亲子一班' },
{ id: 'kg_003_c_002', name: '亲子二班' },
{ id: 'kg_003_c_003', name: '亲子三班' }
]
}
];
const delay = (data, timeout = 200) => new Promise((resolve) => {
setTimeout(() => resolve(data), timeout);
});
const readRegistrations = () => {
try {
return JSON.parse(localStorage.getItem(STORAGE_KEY)) || [];
} catch (error) {
console.warn('读取家庭报名 mock 缓存失败', error);
return [];
}
};
const writeRegistrations = (list) => {
localStorage.setItem(STORAGE_KEY, JSON.stringify(list));
};
export const getMockSchoolList = () => delay({
code: 1,
data: mockSchoolList
});
export const saveMockRegistration = (params) => {
const list = readRegistrations();
const now = Date.now();
const nextItem = {
...params,
id: `family_${now}`,
updated_at: now
};
list.unshift(nextItem);
writeRegistrations(list);
return delay({
code: 1,
msg: '保存成功',
data: nextItem
}, 300);
};
import {
getMockSchoolList,
saveMockRegistration
} from './mock';
const normalizeSchoolList = (list = []) => list.map((school) => ({
text: school.name,
value: school.id,
children: (school.classes || []).map((item) => ({
text: item.name,
value: item.id
}))
}));
export const fetchSchoolOptions = async () => {
const res = await getMockSchoolList();
if (res.code !== 1) {
throw new Error(res.msg || '获取幼儿园信息失败');
}
return normalizeSchoolList(res.data);
};
export const submitRegistration = async (formData) => {
const res = await saveMockRegistration(formData);
if (res.code !== 1) {
throw new Error(res.msg || '保存报名信息失败');
}
return res.data;
};