家谱管理系统 - 前端技术详细文档
📋 文档概述
本文档提供家谱管理系统前端模块的详细技术说明,涵盖所有类、方法的功能描述、参数说明和实现逻辑。
🏗️ 系统架构概览
模块依赖关系
main.js (应用入口) # 统一初始化和管理所有模块 ├── core/ (核心工具模块) # 提供基础工具和服务 │ ├── utils.js (DateUtils, FormUtils, DomUtils) # 日期、表单、DOM工具类 │ ├── apiService.js # API请求服务封装 │ ├── simpleValidator.js # 表单验证器 │ └── messageManager.js # 消息提示管理器 ├── components/ (UI组件库) # 可复用UI组件 │ ├── dateInputManager.js # 日期输入管理组件 │ ├── personSearch.js # 人员搜索组件 │ ├── dataTable.js # 数据表格组件 │ ├── pagination.js # 分页组件 │ ├── tabManager.js # 标签管理器 │ └── relationshipInputManager.js # 关系输入组件 └── pages/ (页面逻辑模块) # 具体页面功能实现 ├── personAdd.js # 人员添加页面 ├── personList.js # 人员列表页面 ├── personDetail.js # 人员详情页面 ├── personEdit.js # 人员编辑页面 └── relationshipAdd.js # 关系添加页面
🔧 核心模块 (core/)
1. utils.js - 通用工具模块
DateUtils 日期工具类
功能: 处理日期数据的解析、格式化、显示和输入框渲染
方法列表:
| 方法 | 参数 | 返回值 | 功能描述 |
|---|---|---|---|
parseDateData(dateString, accuracy, dateType) | dateString: 日期字符串accuracy: 精度dateType: 日期类型 | Object 解析后的日期数据 | 解析日期数据为结构化对象,支持不同精度和日期类型 |
buildDate(formData, accuracy, type) | formData: FormData对象accuracy: 精度type: 日期类型前缀 | String 日期字符串 | 从表单数据构建标准日期字符串 |
getDateType(formData, accuracy, type) | formData: FormData对象accuracy: 精度type: 日期类型前缀 | String 日期类型 | 根据精度获取对应的日期类型字段值 |
clampValue(value, min, max) | value: 数值min: 最小值max: 最大值 | Number 限制后的值 | 限制数值在指定范围内 |
formatDateDisplay(dateString, dateType, accuracy) | dateString: 日期字符串dateType: 日期类型accuracy: 精度 | String 格式化后的日期 | 统一格式化日期显示,支持公历和农历 |
formatLunarDate(dateString, accuracy) | dateString: 日期字符串accuracy: 精度 | String 农历日期字符串 | 专门格式化农历日期显示 |
formatSolarDate(dateString, accuracy) | dateString: 日期字符串accuracy: 精度 | String 公历日期字符串 | 专门格式化公历日期显示 |
fixLunarDateDisplay(person) | person: 人员对象 | String 修复后的日期显示 | 修复人员对象的农历日期显示格式 |
renderDateInputs(type, dateData, isRequired) | type: 日期类型前缀dateData: 日期数据isRequired: 是否必填 | String HTML字符串 | 渲染日期输入框组,支持不同精度 |
FormUtils 表单工具类
功能: 处理表单数据的收集和变更检测
方法列表:
| 方法 | 参数 | 返回值 | 功能描述 |
|---|---|---|---|
collectPersonData(form, isLiving) | form: 表单元素isLiving: 是否在世 | Object 人员数据对象 | 从表单收集人员数据,处理日期字段 |
hasFormChanges(originalData, currentForm) | originalData: 原始数据currentForm: 当前表单 | Boolean 是否有变更 | 检测表单数据是否发生变更 |
DomUtils DOM工具类
功能: 提供DOM操作和界面状态管理
方法列表:
| 方法 | 参数 | 返回值 | 功能描述 |
|---|---|---|---|
escapeHtml(unsafe) | unsafe: 未转义字符串 | String 转义后的字符串 | HTML特殊字符转义,防止XSS攻击 |
showElement(elementId, show) | elementId: 元素IDshow: 显示状态 | void | 显示或隐藏指定元素 |
setElementRequired(elementId, required) | elementId: 元素IDrequired: 必填状态 | void | 设置元素的必填状态 |
updateSaveButtonState(buttonId, hasChanges) | buttonId: 按钮IDhasChanges: 是否有变更 | void | 根据变更状态更新保存按钮状态 |
showLoading(containerId, show, message) | containerId: 容器IDshow: 显示状态message: 加载消息 | void | 显示或隐藏加载状态 |
2. apiService.js - API服务封装
功能: 统一管理所有后端API调用,提供标准的请求处理
类方法列表:
| 方法 | 参数 | 返回值 | 功能描述 |
|---|---|---|---|
request(endpoint, options) | endpoint: API端点options: 请求选项 | Promise 响应数据 | 统一的API请求方法,处理错误和响应 |
getPersons(params) | params: 查询参数 | Promise 人员列表 | 获取人员列表,支持分页和搜索 |
getPerson(personId) | personId: 人员ID | Promise 人员详情 | 获取单个人员详细信息 |
createPerson(data) | data: 人员数据 | Promise 创建结果 | 创建新人员 |
updatePerson(personId, data) | personId: 人员IDdata: 更新数据 | Promise 更新结果 | 更新人员信息 |
deletePerson(personId) | personId: 人员ID | Promise 删除结果 | 删除指定人员 |
searchPersons(keyword) | keyword: 搜索关键词 | Promise 搜索结果 | 根据关键词搜索人员 |
createRelationship(data) | data: 关系数据 | Promise 创建结果 | 创建亲属关系 |
deleteRelationship(relId) | relId: 关系ID | Promise 删除结果 | 删除指定关系 |
3. simpleValidator.js - 简化验证器
功能: 提供基础的表单数据验证功能
类方法列表:
| 方法 | 参数 | 返回值 | 功能描述 |
|---|---|---|---|
validatePerson(data) | data: 人员数据 | Object 验证结果 | 验证人员数据的完整性和格式 |
validateRelationship(data) | data: 关系数据 | Object 验证结果 | 验证关系数据的有效性 |
validateRequired(value, fieldName) | value: 字段值fieldName: 字段名 | String 错误信息 | 验证字段是否必填 |
validateEmail(email) | email: 邮箱地址 | String 错误信息 | 验证邮箱格式 |
validatePhone(phone) | phone: 手机号码 | String 错误信息 | 验证手机号格式 |
4. messageManager.js - 消息管理器
功能: 统一管理用户提示消息的显示和隐藏
构造函数:
constructor(containerSelector = 'body', messageId = 'form-message')
方法列表:
| 方法 | 参数 | 返回值 | 功能描述 |
|---|---|---|---|
showMessage(message, type, autoHide, duration) | message: 消息内容type: 消息类型autoHide: 自动隐藏duration: 显示时长 | HTMLElement 消息元素 | 显示通用消息提示 |
clearMessage() | 无 | void | 清除当前显示的消息 |
showSuccess(message, autoHide, duration) | message: 成功消息autoHide: 自动隐藏duration: 显示时长 | HTMLElement 消息元素 | 显示成功消息 |
showError(message, autoHide, duration) | message: 错误消息autoHide: 自动隐藏duration: 显示时长 | HTMLElement 消息元素 | 显示错误消息 |
showWarning(message, autoHide, duration) | message: 警告消息autoHide: 自动隐藏duration: 显示时长 | HTMLElement 消息元素 | 显示警告消息 |
showInfo(message, autoHide, duration) | message: 信息消息autoHide: 自动隐藏duration: 显示时长 | HTMLElement 消息元素 | 显示信息消息 |
showPersonCreateSuccess(formData) | formData: 表单数据 | HTMLElement 模态框元素 | 显示人员创建成功模态框 |
showPersonUpdateSuccess(formData) | formData: 表单数据 | HTMLElement 模态框元素 | 显示人员更新成功模态框 |
🎨 UI组件库 (components/)
1. dateInputManager.js - 日期输入管理器
功能: 管理不同精度的日期输入(精确到日/月/年)
构造函数:
constructor(prefix, accuracySelectId, containers)
方法列表:
| 方法 | 参数 | 返回值 | 功能描述 |
|---|---|---|---|
init() | 无 | void | 初始化日期管理器 |
initAccuracyHandler() | 无 | void | 初始化精度选择处理器 |
updateDateInputFormat(accuracy) | accuracy: 日期精度 | void | 根据精度更新日期输入格式 |
setDateInputsRequired(required) | required: 必填状态 | void | 设置所有日期输入框必填状态 |
setContainerInputsRequired(containerId, required) | containerId: 容器IDrequired: 必填状态 | void | 设置特定容器输入框必填状态 |
clearDateInputs(containerId) | containerId: 容器ID | void | 清空日期输入框的值和状态 |
initDateInputLimits() | 无 | void | 初始化日期输入限制 |
limitInputValue(input) | input: 输入框元素 | void | 限制输入值在合理范围内 |
validateDateValidity() | 无 | Object 验证结果 | 验证日期有效性(基础范围验证) |
validateExactDate() | 无 | Object 验证结果 | 验证精确到日的日期 |
validateYearMonth() | 无 | Object 验证结果 | 验证精确到年月的日期 |
validateYearOnly() | 无 | Object 验证结果 | 验证精确到年的日期 |
collectDateData(formData) | formData: FormData对象 | Object 日期数据 | 收集日期相关数据 |
buildDate(formData, accuracy) | formData: FormData对象accuracy: 精度 | String 日期字符串 | 构建日期字符串 |
getDateType(formData, accuracy) | formData: FormData对象accuracy: 精度 | String 日期类型 | 获取日期类型 |
validateDate() | 无 | Boolean 是否有效 | 验证日期是否填写完整 |
reset() | 无 | void | 重置日期管理器状态 |
2. personSearch.js - 人员搜索组件
功能: 提供人员搜索和选择功能
构造函数:
constructor(containerId, options = {})
方法列表:
| 方法 | 参数 | 返回值 | 功能描述 |
|---|---|---|---|
init() | 无 | void | 初始化组件 |
render() | 无 | void | 渲染组件HTML结构 |
bindEvents() | 无 | void | 绑定事件监听器 |
handleSearch(keyword) | keyword: 搜索关键词 | void | 处理搜索逻辑 |
showLoading() | 无 | void | 显示加载状态 |
searchPersons(keyword) | keyword: 搜索关键词 | Promise 搜索结果 | 调用API搜索人员 |
showSearchResults(persons, emptyMessage) | persons: 人员列表emptyMessage: 空结果提示 | void | 显示搜索结果 |
selectPerson(option) | option: 选择的人员元素 | void | 选择人员 |
updateSelectedDisplay() | 无 | void | 更新选中人员显示 |
clearSelection() | 无 | void | 清空选择 |
showSuggestions() | 无 | void | 显示建议框 |
hideSuggestions() | 无 | void | 隐藏建议框 |
showError(message) | message: 错误消息 | void | 显示错误信息 |
getSelectedPerson() | 无 | Object 选中人员 | 获取当前选中人员 |
setSelectedPerson(person) | person: 人员对象 | void | 设置选中人员 |
destroy() | 无 | void | 销毁组件,清理资源 |
3. dataTable.js - 数据表格组件
功能: 渲染和操作人员数据表格
构造函数:
constructor(containerId, options = {})
方法列表:
| 方法 | 参数 | 返回值 | 功能描述 |
|---|---|---|---|
render(data) | data: 表格数据 | void | 渲染表格数据 |
generateTableHTML() | 无 | String HTML字符串 | 生成表格HTML结构 |
formatDateDisplay(person) | person: 人员对象 | String 格式化日期 | 格式化日期显示 |
generateActionButtons(personId) | personId: 人员ID | String HTML字符串 | 生成操作按钮 |
bindRowEvents() | 无 | void | 绑定行事件处理 |
disableDeleteButton(button) | button: 删除按钮 | void | 禁用删除按钮并显示加载状态 |
enableAllDeleteButtons() | 无 | void | 启用所有删除按钮 |
showLoading() | 无 | void | 显示加载状态 |
showEmpty() | 无 | void | 显示空数据状态 |
showError(message, onRetry) | message: 错误消息onRetry: 重试回调 | void | 显示错误状态 |
destroy() | 无 | void | 清理事件监听器 |
4. pagination.js - 分页组件
功能: 处理数据分页显示和导航
构造函数:
constructor(container, options = {})
方法列表:
| 方法 | 参数 | 返回值 | 功能描述 |
|---|---|---|---|
update(options) | options: 分页配置 | void | 更新分页配置 |
render() | 无 | void | 渲染分页组件 |
generatePaginationHTML(totalPages) | totalPages: 总页数 | String HTML字符串 | 生成分页按钮HTML |
bindEvents() | 无 | void | 绑定分页事件 |
handlePageChange(page) | page: 目标页码 | void | 处理页面切换 |
updateButtonStates(totalPages) | totalPages: 总页数 | void | 更新按钮状态 |
getPaginationInfo() | 无 | String 分页信息 | 获取分页描述信息 |
5. tabManager.js - 标签管理器
功能: 管理页面标签切换功能
构造函数:
constructor()
方法列表:
| 方法 | 参数 | 返回值 | 功能描述 |
|---|---|---|---|
init() | 无 | void | 初始化标签管理器 |
switchTab(tabId) | tabId: 目标标签ID | void | 切换到指定标签页 |
onTabChange(tabId) | tabId: 当前标签ID | void | 标签切换回调函数 |
showTab(tabId) | tabId: 目标标签ID | void | 显示指定标签页(外部调用) |
getActiveTab() | 无 | String 激活标签ID | 获取当前激活标签 |
6. relationshipInputManager.js - 关系输入组件
功能: 提供关系建立的表单输入功能
构造函数:
constructor(containerId, options = {})
方法列表:
| 方法 | 参数 | 返回值 | 功能描述 |
|---|---|---|---|
init() | 无 | void | 初始化表单 |
render() | 无 | void | 渲染表单HTML结构 |
initPersonSearch() | 无 | void | 初始化人员搜索组件 |
bindEvents() | 无 | void | 绑定事件监听器 |
updateAddButtonState() | 无 | void | 更新添加按钮状态 |
handleAddRelationship() | 无 | void | 处理添加关系逻辑 |
getFormData() | 无 | Object 表单数据 | 获取表单数据并进行验证 |
resetForm() | 无 | void | 重置表单状态 |
destroy() | 无 | void | 销毁组件,清理资源 |
📄 页面逻辑模块 (pages/)
1. personAdd.js - 人员添加页面
功能: 处理人员添加表单的渲染、验证和提交
构造函数:
constructor()
方法列表:
| 方法 | 参数 | 返回值 | 功能描述 |
|---|---|---|---|
initEventListeners() | 无 | void | 初始化事件监听器 |
initRealTimeValidation() | 无 | void | 初始化实时验证 |
showFieldError(fieldName, errorMessage) | fieldName: 字段名errorMessage: 错误信息 | void | 显示字段级错误提示 |
clearFieldError(fieldName) | fieldName: 字段名 | void | 清除字段错误提示 |
toggleDeathInfo() | 无 | void | 切换逝世信息显示状态 |
handleFormSubmit() | 无 | void | 处理表单提交 |
validateDateFields() | 无 | Boolean 是否有效 | 验证日期字段有效性 |
validateFormStepByStep(data) | data: 表单数据 | Boolean 是否通过验证 | 分步骤验证表单数据 |
focusField(fieldName) | fieldName: 字段名 | void | 聚焦到指定字段 |
focusFirstBirthDateField() | 无 | void | 聚焦到第一个出生日期字段 |
focusFirstDeathDateField() | 无 | void | 聚焦到第一个逝世日期字段 |
ensureRequiredStates() | 无 | void | 确保必填状态正确 |
validateBusinessRules(data) | data: 表单数据 | Boolean 是否通过验证 | 验证业务规则 |
showValidationErrors(errors) | errors: 错误信息 | void | 显示验证错误 |
submitForm(formData) | formData: 表单数据 | void | 提交表单数据 |
handleSuccess(result, formData) | result: 响应结果formData: 表单数据 | void | 处理成功响应 |
handleError(error) | error: 错误对象 | void | 处理错误响应 |
showLoading(show) | show: 显示状态 | void | 显示加载状态 |
collectFormData() | 无 | Object 表单数据 | 收集表单数据 |
resetForm() | 无 | void | 重置表单状态 |
clearAllFieldErrors() | 无 | void | 清除所有字段错误 |
destroy() | 无 | void | 销毁实例,清理事件监听器 |
2. personList.js - 人员列表页面
功能: 管理人员列表的显示、搜索、分页和操作
构造函数:
constructor()
方法列表:
| 方法 | 参数 | 返回值 | 功能描述 |
|---|---|---|---|
init() | 无 | Promise | 初始化页面 |
initializeComponents() | 无 | void | 初始化组件 |
initEventListeners() | 无 | void | 初始化事件监听器 |
loadPersons() | 无 | Promise | 加载人员列表数据 |
updatePagination() | 无 | void | 更新分页信息 |
getPaginationInfo() | 无 | String 分页信息 | 获取分页描述信息 |
handleTableAction(action, personId) | action: 操作类型personId: 人员ID | void | 处理表格操作 |
handleViewPerson(personId) | personId: 人员ID | void | 处理查看人员详情 |
handleEditPerson(personId) | personId: 人员ID | void | 处理编辑人员 |
deletePerson(personId) | personId: 人员ID | Promise | 删除指定人员 |
handleSearch() | 无 | void | 处理搜索操作 |
handlePageChange(page) | page: 目标页码 | void | 处理页面切换 |
showMessage(message, type) | message: 消息内容type: 消息类型 | void | 显示消息提示 |
destroy() | 无 | void | 清理资源 |
3. personDetail.js - 人员详情页面
功能: 显示人员详细信息模态框
构造函数:
constructor()
方法列表:
| 方法 | 参数 | 返回值 | 功能描述 |
|---|---|---|---|
init() | 无 | void | 初始化页面 |
bindGlobalEvents() | 无 | void | 绑定全局事件 |
isModalOpen() | 无 | Boolean 模态框状态 | 检查模态框是否打开 |
viewPerson(personId) | personId: 人员ID | Promise | 查看人员详情 |
showPersonDetail(personId) | personId: 人员ID | Promise | 显示人员详情数据 |
renderPersonDetail(person) | person: 人员对象 | void | 渲染人员详情内容 |
openModal() | 无 | void | 打开详情模态框 |
closeModal() | 无 | void | 关闭详情模态框 |
editCurrentPerson() | 无 | void | 编辑当前显示的人员 |
showLoading(show) | show: 显示状态 | void | 显示加载状态 |
formatDateTime(dateTimeString) | dateTimeString: 日期时间字符串 | String 格式化时间 | 格式化日期时间显示 |
showMessage(message, type) | message: 消息内容type: 消息类型 | void | 显示消息提示 |
4. personEdit.js - 人员编辑页面
功能: 处理人员信息编辑功能
构造函数:
constructor()
方法列表:
| 方法 | 参数 | 返回值 | 功能描述 |
|---|---|---|---|
init() | 无 | void | 初始化页面 |
initializeManagers() | 无 | void | 初始化管理器 |
initializeDateManagers() | 无 | void | 初始化日期管理器 |
bindEvents() | 无 | void | 绑定事件监听器 |
editPerson(personId) | personId: 人员ID | Promise | 编辑指定人员 |
showEditForm(personId) | personId: 人员ID | Promise | 显示编辑表单 |
renderEditForm(person) | person: 人员对象 | void | 渲染编辑表单 |
bindFormEvents() | 无 | void | 绑定表单事件 |
savePersonEdit() | 无 | Promise | 保存人员编辑 |
validateForm() | 无 | Boolean 是否有效 | 验证表单数据 |
validateDateFields(formData) | formData: 表单数据 | Array 错误信息 | 验证日期字段 |
submitForm(formData) | formData: 表单数据 | Promise | 提交表单数据 |
showLoading(show) | show: 显示状态 | void | 显示加载状态 |
collectFormData() | 无 | Object 表单数据 | 收集表单数据 |
toggleDeathInfo(show) | show: 显示状态 | void | 切换逝世信息显示 |
handleValidationError(errors) | errors: 错误信息 | void | 处理验证错误 |
handleSaveSuccess(result) | result: 响应结果 | void | 处理保存成功 |
handleSaveError(error) | error: 错误对象 | void | 处理保存错误 |
hasChanges() | 无 | Boolean 是否有变更 | 检查表单是否有变更 |
updateSaveButtonState() | 无 | void | 更新保存按钮状态 |
handleCloseRequest() | 无 | void | 处理关闭请求 |
openModal() | 无 | void | 打开编辑模态框 |
closeModal() | 无 | void | 关闭编辑模态框 |
showMessage(message, type) | message: 消息内容type: 消息类型 | void | 显示消息提示 |
isModalOpen() | 无 | Boolean 模态框状态 | 检查模态框是否打开 |
5. relationshipAdd.js - 关系添加页面
功能: 处理亲属关系建立功能
构造函数:
constructor()
方法列表:
| 方法 | 参数 | 返回值 | 功能描述 |
|---|---|---|---|
init() | 无 | void | 初始化页面 |
initializeComponents() | 无 | void | 初始化组件 |
handleAddRelationship(formData) | formData: 表单数据 | Promise | 处理添加关系逻辑 |
showCreationMessages(messages, totalCount) | messages: 创建消息totalCount: 总数 | void | 显示关系创建消息 |
formatCreationMessages(messages) | messages: 消息数组 | String HTML字符串 | 格式化创建消息显示 |
showMessage(message, type) | message: 消息内容type: 消息类型 | void | 显示简单消息提示 |
destroy() | 无 | void | 销毁页面,清理资源 |
🚀 应用入口 (main.js)
功能: 统一管理应用初始化和模块加载
构造函数:
constructor()
方法列表:
| 方法 | 参数 | 返回值 | 功能描述 |
|---|---|---|---|
init() | 无 | Promise | 初始化应用 |
initCoreModules() | 无 | Promise | 初始化核心模块 |
initPageComponents() | 无 | Promise | 初始化页面组件 |
initPersonPages() | 无 | Promise | 初始化人员相关页面 |
initRelationshipPages() | 无 | Promise | 初始化关系相关页面 |
initAddPages() | 无 | Promise | 初始化添加页面 |
loadModule(moduleName, initFunction) | moduleName: 模块名initFunction: 初始化函数 | Promise | 动态加载模块 |
showGlobalError(message) | message: 错误消息 | void | 显示全局错误提示 |
getStatus() | 无 | Object 应用状态 | 获取应用运行状态 |
reinit() | 无 | Promise | 重新初始化应用 |
destroy() | 无 | void | 销毁应用,清理资源 |
🔄 数据流与状态管理
数据流架构
用户操作 → 事件监听器 → 数据处理 → API调用 → 后端服务 ↓ 后端响应 → 状态更新 → UI渲染 → 用户反馈
状态管理
// 应用状态示例
{
currentPage: 1, // 当前页码
pageSize: 10, // 每页数量
totalPersons: 0, // 总人员数
searchKeyword: '', // 搜索关键词
searchGender: '', // 性别筛选
currentPerson: null, // 当前选中人员
originalData: null, // 原始数据(用于比较变更)
activeTab: 'add-person', // 激活标签
formData: {}, // 表单数据
validationErrors: [], // 验证错误
isLoading: false, // 加载状态
isProcessing: false // 处理中状态
}🛡️ 错误处理机制
1. 网络错误处理
try {
const result = await ApiService.request(endpoint, options);
// 处理成功响应
} catch (error) {
// 统一错误处理
MessageManager.showError(error.message);
// 恢复界面状态
this.showLoading(false);
this.enableAllDeleteButtons?.();
}2. 表单验证流程
// 分步骤验证 1. 基础非空验证 → 即时反馈(实时验证) 2. 格式验证 → 失焦时验证(字段级验证) 3. 业务逻辑验证 → 提交时验证(表单级验证) 4. 服务端验证 → API返回验证(最终验证)
📊 性能优化策略
1. 加载优化
按需加载: 组件按需初始化,避免不必要的资源消耗
数据分页: 每页10条数据,减少初始加载数据量
延迟搜索: 输入时延迟搜索,避免频繁API请求
组件缓存: 重复使用的组件实例化一次
2. 用户体验优化
即时反馈: 所有操作都有明确的加载状态和结果提示
状态保持: 搜索条件、分页状态在操作间保持连续性
错误恢复: 操作失败后自动恢复可操作状态
渐进式验证: 分步骤验证,提供清晰的错误指引
🎯 核心业务逻辑
1. 人员信息验证规则
// 必填字段验证
1. 姓名 → 非空验证(trim后长度 > 0)
2. 性别 → 选项验证 (M/F)
3. 出生日期 → 日期格式验证 + 范围验证(1900-2100)
4. 在世状态 → 逻辑验证
// 条件验证
if (!isLiving) {
// 不在世人员必须填写逝世日期
validateDeathDate()
// 逝世日期不能早于出生日期
validateDeathAfterBirth()
}2. 日期处理逻辑
// 日期精度处理
switch(accuracy) {
case 'exact': // 精确到日 → 年+月+日(全部必填)
case 'year_month': // 精确到月 → 年+月(日默认为01)
case 'year_only': // 精确到年 → 年(月日默认为01-01)
}
// 日期类型处理
switch(dateType) {
case 'solar': // 公历日期 → 直接显示
case 'lunar': // 农历日期 → 转换为中文显示
}3. 关系建立逻辑
// 关系类型映射
关系类型: {
'parent': '父母关系', // A是B的父母
'spouse': '配偶关系', // A是B的配偶
'child': '子女关系' // A是B的子女
}
// 关系验证规则
1. 不能选择同一人员(from_person_id ≠ to_person_id)
2. 关系类型必须选择
3. 人员必须存在(通过ID验证)
4. 防止重复关系(后端唯一性约束)✅ 系统运行状态
已验证功能
✅ 标签切换功能: 新增成员 ↔ 添加关系 正常切换
✅ 人员CRUD操作: 添加、查看、编辑、删除功能完整
✅ 关系建立: 亲属关系创建和自动反向关系生成
✅ 搜索筛选: 按姓名、性别组合搜索正常
✅ 分页显示: 数据分页和导航功能完善
✅ 日期管理: 多精度日期输入和验证
✅ 消息提示: 统一的消息反馈机制
✅ 错误处理: 完善的错误处理和状态恢复
技术特点
模块化设计: 功能清晰分离,便于维护和测试
统一管理: API、消息、验证统一处理,减少重复代码
用户体验优先: 即时反馈、状态指示、渐进式交互
错误恢复: 完善的错误处理和状态恢复机制
性能优化: 按需加载、分页处理、延迟搜索
安全性: XSS防护、输入验证、API安全调用
🔧 部署说明
环境要求
现代浏览器支持 ES6+(Chrome 60+, Firefox 55+, Safari 11+)
后端API服务运行在端口 8000
Web服务运行在端口 5000
启动流程
启动后端FastAPI服务 (
localhost:8000)启动前端Flask服务 (
localhost:5000)浏览器访问
https://localhost:5000
这套前端架构确保了系统的稳定性、可用性和可维护性,为用户提供了流畅的家谱管理体验。