|
|
- # 表单数据本地存储工具使用说明
-
- ## 概述
-
- `formStorage.js` 是一个专门用于防止用户意外退出导致表单数据丢失的工具类。它会自动保存用户填写的表单数据到本地存储,并在用户重新进入页面时恢复数据。
-
- ## 功能特性
-
- - ✅ **自动保存**: 用户输入时自动保存表单数据
- - ✅ **数据恢复**: 页面重新加载时自动恢复之前填写的数据
- - ✅ **防抖机制**: 避免频繁保存操作,提升性能
- - ✅ **数据过期**: 支持设置数据过期时间(默认7天)
- - ✅ **提交清理**: 表单提交成功后自动清除本地数据
- - ✅ **多表单支持**: 支持多个表单页面独立存储
-
- ## 已集成页面
-
- 目前已为以下三个表单页面集成了数据存储功能:
-
- 1. **经营性建设用地录入** (`commercial.vue`) - formKey: `commercial_form`
- 2. **闲置农房信息录入** (`farmhouse.vue`) - formKey: `farmhouse_form`
- 3. **其他农村资源录入** (`other.vue`) - formKey: `other_form`
-
- ## 工作流程
-
- ### 1. 页面加载时
- - 自动检查是否有保存的表单数据
- - 如果有数据且未过期,则恢复到表单中
- - 显示提示信息告知用户数据已恢复
-
- ### 2. 用户操作时
- - 监听所有表单输入事件(input、change等)
- - 使用防抖机制(1秒延迟)自动保存数据
- - 包括文本输入、选择器、文件上传等所有操作
-
- ### 3. 页面卸载时
- - 保存当前表单状态
- - 清理防抖定时器
-
- ### 4. 表单提交成功后
- - 自动清除本地存储的表单数据
- - 避免下次进入时恢复已提交的数据
-
- ## 监听的操作类型
-
- ### 基础输入
- - 文本输入框 (`@input`)
- - 数字输入框 (`@input`)
- - 文本域 (`@input`)
- - 单选按钮组 (`@change`)
- - 复选框 (`@change`)
-
- ### 选择器操作
- - 地址选择
- - 分类选择
- - 房屋状况选择
-
- ### 文件操作
- - 图片上传完成
- - 视频上传完成
- - 文件删除
-
- ### 特殊操作
- - 标签选择(房屋亮点、不利因素)
- - 协议勾选状态变化
-
- ## 数据存储格式
-
- ```javascript
- {
- data: {}, // 表单数据对象
- timestamp: 1234567890 // 保存时间戳
- }
- ```
-
- ## 存储键名规则
-
- - 前缀: `form_data_`
- - 完整键名: `form_data_{formKey}`
- - 示例: `form_data_commercial_form`
-
- ## 用户体验
-
- ### 数据恢复提示
- 当检测到有保存的数据时,会显示Toast提示:
- ```
- 已恢复上次填写的数据
- ```
-
- ### 自动保存
- - 用户无需手动保存
- - 所有操作都会触发自动保存
- - 使用防抖机制避免频繁操作
-
- ### 数据清理
- - 表单提交成功后自动清理
- - 数据过期后自动清理(7天)
- - 支持手动清理所有表单数据
-
- ## 技术实现
-
- ### 防抖机制
- ```javascript
- debounceSaveFormData() {
- clearTimeout(this.saveTimer)
- this.saveTimer = setTimeout(() => {
- this.saveFormData()
- }, 1000)
- }
- ```
-
- ### 数据恢复
- ```javascript
- restoreFormData() {
- const savedData = formStorage.getFormData(this.formKey)
- if (savedData) {
- this.form = { ...this.form, ...savedData }
- // 显示恢复提示
- }
- }
- ```
-
- ### 生命周期集成
- - `onLoad`: 恢复数据
- - `onUnload`: 保存数据
- - 提交成功: 清除数据
-
- ## 注意事项
-
- 1. **数据安全**: 敏感信息不会被保存(如密码等)
- 2. **存储限制**: 受浏览器本地存储容量限制
- 3. **数据同步**: 仅在本地设备有效,不跨设备同步
- 4. **过期清理**: 超过7天的数据会自动清理
- 5. **性能优化**: 使用防抖机制避免频繁保存
-
- ## 扩展使用
-
- 如需为其他表单页面添加此功能,请参考已集成页面的实现方式:
-
- 1. 导入工具类
- 2. 设置唯一的 `formKey`
- 3. 在生命周期中调用相应方法
- 4. 为表单控件添加事件监听
- 5. 在提交成功后清理数据
-
- 这样可以确保用户在填写表单时不会因为意外退出而丢失数据,大大提升用户体验。
|