当前位置:   article > 正文

实现一个简单的小程序Form表单填写页面_小程序表单页面设计

小程序表单页面设计

引言

移动应用开发中,表单是用户与应用交互的重要方式之一。无论是注册信息、提交反馈还是预约服务,表单都扮演着关键角色。小程序作为移动应用的一种形式,其表单设计同样至关重要。本文将引导你通过Uni-app和Vue框架,一步步构建一个简洁而实用的小程序表单填写页面。

表单效果图

HTML模板部分

滚动视图和表单容器

页面使用<scroll-view>组件创建一个可滚动的视图区域,内部包含用于展示表单的<view>容器和用于提交表单的按钮<view>容器。

  1. <scroll-view class="body" :scroll-y="true">
  2. <view class="orderReport">
  3. <!-- 表单内容 -->
  4. </view>
  5. <view class="orderReportBottom">
  6. <!-- 底部按钮内容 -->
  7. </view>
  8. </scroll-view>

表单标题和表单项

表单的标题使用<view>标签定义,表单项则通过<u-form>组件来创建,其中包含文本输入、多行文本输入以及日期选择器。

  1. <view class="orderReportForm">
  2. <view class="title">日程信息</view>
  3. <u-form :model="form" ref="uForm" labelWidth="80" labelPosition="left" :label-style="{'color': '#747F9E'}">
  4. <u-form-item borderBottom label="日程标题" prop="title" required="true">
  5. <!-- 单行文本框 -->
  6. <u-input v-model="form.title" border="none" :customStyle="inputClass"/>
  7. </u-form-item>
  8. <u-form-item borderBottom label="日程内容" prop="content" required="true">
  9. <!-- 多行文本框 -->
  10. <u--textarea v-model="form.content" border="none"/>
  11. </u-form-item>
  12. <u-form-item borderBottom label="开始日期" right-icon="arrow-right" prop="startTimePoint" required="true">
  13. <u-button :text="form.startTimePoint? form.startTimePoint : '请选择'" @click="clickStartTime()" :custom-></u-button>
  14. <u-icon slot="right" name="arrow-right"></u-icon>
  15. <!-- 日期选择器 -->
  16. <u-datetime-picker
  17. :show="startShow"
  18. v-model="nowTime"
  19. mode="datetime"
  20. @confirm="cofirmStartTime"
  21. @cancel="startShow = false"
  22. ></u-datetime-picker>
  23. </u-form-item>
  24. <u-form-item borderBottom label="结束日期" prop="endTimePoint" required="true">
  25. <u-button :text="form.endTimePoint? form.endTimePoint : '请选择'" @click="clickEndTime()" :custom-></u-button>
  26. <u-icon slot="right" name="arrow-right"></u-icon>
  27. <!-- 日期选择器 -->
  28. <u-datetime-picker
  29. :show="endShow"
  30. v-model="nowTime"
  31. mode="datetime"
  32. @confirm="cofirmEndTime"
  33. @cancel="endShow = false"
  34. ></u-datetime-picker>
  35. </u-form-item>
  36. </u-form>
  37. </view>

提交按钮

表单底部有一个提交按钮,用于提交表单数据。

  1. <view class="orderReportBottom">
  2. <view class="orderReportButton">
  3. <u-button type="primary" @click="cofirmForm" color="#0052D9">提交</u-button>
  4. </view>
  5. </view>

JavaScript脚本部分

数据声明

在Vue组件的data函数中定义了表单数据、样式、显示状态以及表单验证规则。

  1. data() {
  2. return {
  3. // 表单数据
  4. form:{
  5. title:"",
  6. content:"",
  7. startTimePoint:"",
  8. endTimePoint:""
  9. },
  10. // 表单验证规则
  11. rules: {
  12. title: [{ required: true, message: '请输入日程标题',trigger: ['change','blur']}],
  13. content: [{ required: true, message: '请输入日程内容',trigger: ['change','blur']}],
  14. startTimePoint: [{ required: true, message: '请选择开始日期',trigger: ['change','blur']}],
  15. endTimePoint: [{ required: true, message: '请选择结束日期',trigger: ['change','blur']}],
  16. },
  17. // 按钮的自定义样式
  18. btnstyle:{
  19. borderColor: '#ffffff',
  20. justifyContent: 'flex-start'
  21. },
  22. // 输入框的自定义样式
  23. inputClass:{
  24. padding:'0 24rpx'
  25. },
  26. // 控制开始日期选择器的显示
  27. startShow:false,
  28. // 控制结束日期选择器的显示
  29. endShow:false,
  30. // 当前时间,用于日期选择器的初始值
  31. nowTime: Number(new Date()),
  32. }
  33. },

生命周期和方法

onReady生命周期方法中设置表单验证规则。定义了表单提交、日期选择器的打开与确认等方法。

  1. // 必须要在onReady生命周期,因为onLoad生命周期组件可能尚未创建完毕
  2. onReady() {
  3. this.$refs.uForm.setRules(this.rules);
  4. },
  5. methods:{
  6. // 整体表单提交
  7. cofirmForm(){
  8. console.log(this.form,'form表单提交');
  9. this.$refs.uForm.validate().then(valid => {
  10. if (valid) {
  11. console.log('验证通过');
  12. }
  13. }).catch(()=>{
  14. console.log('验证失败');
  15. })
  16. },
  17. // '开始日期'点击打开选择弹窗
  18. clickStartTime(){
  19. this.startShow = true
  20. this.nowTime = Number(new Date())
  21. },
  22. // '结束日期'点击打开选择弹窗
  23. clickEndTime(){
  24. this.endShow = true
  25. this.nowTime = Number(new Date())
  26. },
  27. // '开始日期'点击确定
  28. cofirmStartTime(e){
  29. this.form.startTimePoint = this.formatDate(new Date(e.value));
  30. this.startShow = false
  31. },
  32. // '结束日期'点击确定
  33. cofirmEndTime(e){
  34. this.form.endTimePoint = this.formatDate(new Date(e.value));
  35. this.endShow = false
  36. },
  37. // 获取2024-02-01 17:01:01 时间格式
  38. formatDate(date) {
  39. const year = date.getFullYear();
  40. const month = ('0' + (date.getMonth() + 1)).slice(-2);
  41. const day = ('0' + date.getDate()).slice(-2);
  42. const hours = ('0' + date.getHours()).slice(-2);
  43. const minutes = ('0' + date.getMinutes()).slice(-2);
  44. const seconds = ('0' + date.getSeconds()).slice(-2);
  45. return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
  46. },
  47. }

样式定义

使用SCSS编写页面和组件的样式,包括滚动视图的背景色、表单容器的布局、标题的样式以及按钮的布局和颜色。

  1. <style lang="scss" scoped>
  2. .body{
  3. height: 100vh;
  4. background-color: #f6f7fB;
  5. .orderReport{
  6. height: 100vh;
  7. display: flex;
  8. flex-direction: column;
  9. // 表单内容
  10. .orderReportForm{
  11. width: 90%;
  12. margin: 0 auto;
  13. margin-bottom: 20rpx;
  14. display: flex;
  15. flex-direction: column;
  16. background: #ffffff;
  17. padding: 30rpx 30rpx;
  18. box-sizing: border-box;
  19. border-radius: 2px;
  20. // 表单标题
  21. .title {
  22. font-size:32rpx;
  23. font-weight: 600;
  24. margin-bottom: 20rpx;
  25. &::after {
  26. position: relative;
  27. top: 8rpx;
  28. left: -128rpx;
  29. content: '';
  30. background: linear-gradient(129deg, #90B7FF 0%, #EAF1FF 100%);
  31. border-radius: 2rpx;
  32. opacity: 0.5;
  33. width: 120rpx;
  34. height: 16rpx;
  35. display: inline-block;
  36. }
  37. }
  38. }
  39. // 底部按钮内容
  40. .orderReportBottom{
  41. display: flex;
  42. flex-direction: column;
  43. background: #ffffff;
  44. margin-top: auto;
  45. height: 180rpx;
  46. .orderReportButton{
  47. width: 90%;
  48. margin: 0 auto;
  49. margin-top: 20rpx;
  50. }
  51. }
  52. }
  53. }
  54. </style>

结语

通过上述步骤,我们构建了一个功能完备、样式简洁的小程序表单填写页面。这个页面不仅提供了基本的输入功能,还包括了表单验证和用户交互设计,确保了用户能够顺畅地完成表单填写。希望本文能够帮助开发者们快速上手小程序表单的设计和实现,提升用户体验。

小程序开发的道路上,表单设计只是冰山一角。随着技术的不断进步和用户需求的日益增长,我们还需要不断探索和学习,以创造出更加人性化、智能化的应用体验。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/858876
推荐阅读
相关标签
  

闽ICP备14008679号