项目负责部分的功能介绍:我负责的是开发新增房源功能,包括房屋基本信息录入和户型信息填写两大核心模块,实现了从表单填写到数据提交的完整流程。
一、功能实现
-
房屋基本信息录入
-
表单设计:
- 使用
uView UI框架构建表单,包含地址、房屋类型、楼层、押金方式等必填字段。 - 通过
u-form和u-form-item组件实现表单验证,确保数据完整性。
- 使用
-
-
动态数据绑定:
- 调用
getDict方法从后端获取字典数据(如房屋类型、押金方式),通过v-for动态渲染下拉选项。 - 使用计算属性(如
selectedHouseTypeText)实时显示用户选择的文本。
- 调用
-
户型信息管理
-
多户型支持:
- 用户可添加多个户型,每个户型包含面积、价格、布局等信息。
- 通过数组
houseTypeList管理户型数据,支持动态增删(addHouseType/deleteHouseType)。
-
图片上传:
- 集成七牛云SDK,封装
uploadFile方法实现图片/视频上传,返回URL后绑定到表单数据。 - 支持多图上传(每个户型最多3张图片),提供删除功能(
deleteImage)。
- 集成七牛云SDK,封装
-
-
数据传递与提交
-
跨页面数据传递:
- 使用
uni.setStorageSync暂存第一页表单数据,跳转至第二页后合并提交。
- 使用
-
数据校验:
- 提交前验证必填字段、设施选择状态及图片数量,通过
$refs.uForm.validate确保数据合法。
- 提交前验证必填字段、设施选择状态及图片数量,通过
-
二、技术点与解决方案
-
关键技术应用
(1)七牛云文件上传:
- 首先需要安装七牛云的JavaScript SDK
- 创建七牛云上传工具类,在
utils目录下创建qiniu-upload.js文件。主要就是为了统一一下上传接口,需要上传时调用这个方法就好了。这个方法处理逻辑为由前端调用该方法获取请求上传凭证,后端会生成一个临时的token给到七牛云存储,并且返回token和 domain给到前端,然后前端就会将这个文件带上token的信息一起发送到七牛云中,七牛云便会返回对应该文件的URL给到前端。前端便可以通过这个URL展示该文件。处理逻辑如下:
- 通过
getFileFromPath方法统一处理不同平台的本地文件对象。
- 在
qiniu-upload.js文件中会编写一个upload的方法,让前端进行调用
(2)照片上传
- 当用户点击上传图片按钮后,会调取chooseContactImage方法跳转到相册进行选择。代码如下:
- 在上传图片时,会调取后端上传该图片的接口,定义获取该接口的方法。代码如下:
- 调用该upload方法,将用户选择的图片赋值给formData
(3)获取字典数据
- 先定义了一个通过 HTTP 请求获取字典数据的方法,这个方法中采用get请求去获取数据,接口中采用了动态路径参数的方法,这样可以获取到不同数据的字典。
- 定义了这个getDict方法后再通过调用这个方法,传递对应需要的字典的参数house_type来进行获取对应的字典数据,将这个字典数据赋值给一个房屋类型的数组houseTypeList
- 通过:list数组绑定,就可以展示房屋类型的数据给用户选择了。
- 当用户点击了其中一个房屋类型,便会调用handPickerClick的方法,将选中的数据同步到最后要存储在本地的数组,即存储在本地后通过合并第二页数据一起传给后端的那个数组。
- 当选择完成后,展示前会判断两个数据是否一致,一致才会展示
(4)动态表单验证:
- 自定义验证规则(如校验楼层为整数、图片必传),结合
uView的表单校验机制提升用户体验。
(5)响应式布局:
- 使用
scroll-view动态计算高度,适配不同屏幕尺寸;通过uni.upx2px实现rpx与px的转换。
-
难点与解决
-
多户型数据管理:
- 问题:新增/删除户型时需确保数据同步且不丢失。
- 方案:使用
Vue.set动态更新数组,结合$nextTick确保DOM渲染后滚动到最新条目。
-
跨平台文件处理:
- 问题:H5/小程序/APP获取文件对象的API差异大。
- 方案:通过条件编译(
#ifdef)区分平台逻辑,统一返回File对象或临时路径。
-
三、代码规范与优化
-
模块化设计
- 将字典获取、文件上传等逻辑封装为独立方法(如
getHouseLayoutDict、uploadFile),提升复用性。
- 将字典获取、文件上传等逻辑封装为独立方法(如
-
性能优化
- 图片上传采用压缩选项(
sizeType: ['compressed']),减少流量消耗。 - 使用
uni.$u.debounce限制高频操作(如连续点击提交)。
- 图片上传采用压缩选项(
-
Git提交规范
-
遵循
feature/fix/perf前缀提交,例如:git commit -m "feat: 新增户型图片上传功能" git commit -m "fix: 修复房屋类型选择无效的问题"
-
四、项目成果
-
功能完善:完成房源新增全流程,支持多户型、多图上传,覆盖房东核心需求。
-
用户体验:
- 通过本地存储减少页面跳转数据丢失,表单校验提示清晰。
- 设施选择采用直观的图标切换(
toggleFacility),提升操作效率。
-
代码质量:模块化设计、严格校验和详细注释,便于后续维护扩展。
技术栈:Vue.js + uView UI + 七牛云SDK + UniApp(多端兼容) + RESTful API。
五、个人成长
-
技能提升:
- 掌握了七牛云文件上传的完整流程及多平台适配技巧。
- 深入理解了动态表单验证和复杂状态管理的实现方式。
-
协作意识:
- 通过Git规范提交和模块化设计,增强团队协作效率。
总结:该项目不仅巩固了我的前端技术能力,更让我认识到模块化设计和用户体验细节的重要性,为后续复杂功能开发奠定了基础。