租房小程序前端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

145 lines
3.8 KiB

  1. # 表单数据本地存储工具使用说明
  2. ## 概述
  3. `formStorage.js` 是一个专门用于防止用户意外退出导致表单数据丢失的工具类。它会自动保存用户填写的表单数据到本地存储,并在用户重新进入页面时恢复数据。
  4. ## 功能特性
  5. -**自动保存**: 用户输入时自动保存表单数据
  6. -**数据恢复**: 页面重新加载时自动恢复之前填写的数据
  7. -**防抖机制**: 避免频繁保存操作,提升性能
  8. -**数据过期**: 支持设置数据过期时间(默认7天)
  9. -**提交清理**: 表单提交成功后自动清除本地数据
  10. -**多表单支持**: 支持多个表单页面独立存储
  11. ## 已集成页面
  12. 目前已为以下三个表单页面集成了数据存储功能:
  13. 1. **经营性建设用地录入** (`commercial.vue`) - formKey: `commercial_form`
  14. 2. **闲置农房信息录入** (`farmhouse.vue`) - formKey: `farmhouse_form`
  15. 3. **其他农村资源录入** (`other.vue`) - formKey: `other_form`
  16. ## 工作流程
  17. ### 1. 页面加载时
  18. - 自动检查是否有保存的表单数据
  19. - 如果有数据且未过期,则恢复到表单中
  20. - 显示提示信息告知用户数据已恢复
  21. ### 2. 用户操作时
  22. - 监听所有表单输入事件(input、change等)
  23. - 使用防抖机制(1秒延迟)自动保存数据
  24. - 包括文本输入、选择器、文件上传等所有操作
  25. ### 3. 页面卸载时
  26. - 保存当前表单状态
  27. - 清理防抖定时器
  28. ### 4. 表单提交成功后
  29. - 自动清除本地存储的表单数据
  30. - 避免下次进入时恢复已提交的数据
  31. ## 监听的操作类型
  32. ### 基础输入
  33. - 文本输入框 (`@input`)
  34. - 数字输入框 (`@input`)
  35. - 文本域 (`@input`)
  36. - 单选按钮组 (`@change`)
  37. - 复选框 (`@change`)
  38. ### 选择器操作
  39. - 地址选择
  40. - 分类选择
  41. - 房屋状况选择
  42. ### 文件操作
  43. - 图片上传完成
  44. - 视频上传完成
  45. - 文件删除
  46. ### 特殊操作
  47. - 标签选择(房屋亮点、不利因素)
  48. - 协议勾选状态变化
  49. ## 数据存储格式
  50. ```javascript
  51. {
  52. data: {}, // 表单数据对象
  53. timestamp: 1234567890 // 保存时间戳
  54. }
  55. ```
  56. ## 存储键名规则
  57. - 前缀: `form_data_`
  58. - 完整键名: `form_data_{formKey}`
  59. - 示例: `form_data_commercial_form`
  60. ## 用户体验
  61. ### 数据恢复提示
  62. 当检测到有保存的数据时,会显示Toast提示:
  63. ```
  64. 已恢复上次填写的数据
  65. ```
  66. ### 自动保存
  67. - 用户无需手动保存
  68. - 所有操作都会触发自动保存
  69. - 使用防抖机制避免频繁操作
  70. ### 数据清理
  71. - 表单提交成功后自动清理
  72. - 数据过期后自动清理(7天)
  73. - 支持手动清理所有表单数据
  74. ## 技术实现
  75. ### 防抖机制
  76. ```javascript
  77. debounceSaveFormData() {
  78. clearTimeout(this.saveTimer)
  79. this.saveTimer = setTimeout(() => {
  80. this.saveFormData()
  81. }, 1000)
  82. }
  83. ```
  84. ### 数据恢复
  85. ```javascript
  86. restoreFormData() {
  87. const savedData = formStorage.getFormData(this.formKey)
  88. if (savedData) {
  89. this.form = { ...this.form, ...savedData }
  90. // 显示恢复提示
  91. }
  92. }
  93. ```
  94. ### 生命周期集成
  95. - `onLoad`: 恢复数据
  96. - `onUnload`: 保存数据
  97. - 提交成功: 清除数据
  98. ## 注意事项
  99. 1. **数据安全**: 敏感信息不会被保存(如密码等)
  100. 2. **存储限制**: 受浏览器本地存储容量限制
  101. 3. **数据同步**: 仅在本地设备有效,不跨设备同步
  102. 4. **过期清理**: 超过7天的数据会自动清理
  103. 5. **性能优化**: 使用防抖机制避免频繁保存
  104. ## 扩展使用
  105. 如需为其他表单页面添加此功能,请参考已集成页面的实现方式:
  106. 1. 导入工具类
  107. 2. 设置唯一的 `formKey`
  108. 3. 在生命周期中调用相应方法
  109. 4. 为表单控件添加事件监听
  110. 5. 在提交成功后清理数据
  111. 这样可以确保用户在填写表单时不会因为意外退出而丢失数据,大大提升用户体验。