赞
踩
在移动应用开发中,表单是用户与应用交互的重要方式之一。无论是注册信息、提交反馈还是预约服务,表单都扮演着关键角色。小程序作为移动应用的一种形式,其表单设计同样至关重要。本文将引导你通过Uni-app和Vue框架,一步步构建一个简洁而实用的小程序表单填写页面。
页面使用<scroll-view>
组件创建一个可滚动的视图区域,内部包含用于展示表单的<view>
容器和用于提交表单的按钮<view>
容器。
- <scroll-view class="body" :scroll-y="true">
- <view class="orderReport">
- <!-- 表单内容 -->
- </view>
- <view class="orderReportBottom">
- <!-- 底部按钮内容 -->
- </view>
- </scroll-view>
表单的标题使用<view>
标签定义,表单项则通过<u-form>
组件来创建,其中包含文本输入、多行文本输入以及日期选择器。
- <view class="orderReportForm">
- <view class="title">日程信息</view>
- <u-form :model="form" ref="uForm" labelWidth="80" labelPosition="left" :label-style="{'color': '#747F9E'}">
- <u-form-item borderBottom label="日程标题" prop="title" required="true">
- <!-- 单行文本框 -->
- <u-input v-model="form.title" border="none" :customStyle="inputClass"/>
- </u-form-item>
- <u-form-item borderBottom label="日程内容" prop="content" required="true">
- <!-- 多行文本框 -->
- <u--textarea v-model="form.content" border="none"/>
- </u-form-item>
- <u-form-item borderBottom label="开始日期" right-icon="arrow-right" prop="startTimePoint" required="true">
- <u-button :text="form.startTimePoint? form.startTimePoint : '请选择'" @click="clickStartTime()" :custom-></u-button>
- <u-icon slot="right" name="arrow-right"></u-icon>
- <!-- 日期选择器 -->
- <u-datetime-picker
- :show="startShow"
- v-model="nowTime"
- mode="datetime"
- @confirm="cofirmStartTime"
- @cancel="startShow = false"
- ></u-datetime-picker>
- </u-form-item>
- <u-form-item borderBottom label="结束日期" prop="endTimePoint" required="true">
- <u-button :text="form.endTimePoint? form.endTimePoint : '请选择'" @click="clickEndTime()" :custom-></u-button>
- <u-icon slot="right" name="arrow-right"></u-icon>
- <!-- 日期选择器 -->
- <u-datetime-picker
- :show="endShow"
- v-model="nowTime"
- mode="datetime"
- @confirm="cofirmEndTime"
- @cancel="endShow = false"
- ></u-datetime-picker>
- </u-form-item>
- </u-form>
- </view>
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
表单底部有一个提交按钮,用于提交表单数据。
- <view class="orderReportBottom">
- <view class="orderReportButton">
- <u-button type="primary" @click="cofirmForm" color="#0052D9">提交</u-button>
- </view>
- </view>
在Vue组件的data
函数中定义了表单数据、样式、显示状态以及表单验证规则。
- data() {
- return {
- // 表单数据
- form:{
- title:"",
- content:"",
- startTimePoint:"",
- endTimePoint:""
- },
- // 表单验证规则
- rules: {
- title: [{ required: true, message: '请输入日程标题',trigger: ['change','blur']}],
- content: [{ required: true, message: '请输入日程内容',trigger: ['change','blur']}],
- startTimePoint: [{ required: true, message: '请选择开始日期',trigger: ['change','blur']}],
- endTimePoint: [{ required: true, message: '请选择结束日期',trigger: ['change','blur']}],
- },
- // 按钮的自定义样式
- btnstyle:{
- borderColor: '#ffffff',
- justifyContent: 'flex-start'
- },
- // 输入框的自定义样式
- inputClass:{
- padding:'0 24rpx'
- },
- // 控制开始日期选择器的显示
- startShow:false,
- // 控制结束日期选择器的显示
- endShow:false,
- // 当前时间,用于日期选择器的初始值
- nowTime: Number(new Date()),
- }
- },
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
在onReady
生命周期方法中设置表单验证规则。定义了表单提交、日期选择器的打开与确认等方法。
- // 必须要在onReady生命周期,因为onLoad生命周期组件可能尚未创建完毕
- onReady() {
- this.$refs.uForm.setRules(this.rules);
- },
- methods:{
- // 整体表单提交
- cofirmForm(){
- console.log(this.form,'form表单提交');
- this.$refs.uForm.validate().then(valid => {
- if (valid) {
- console.log('验证通过');
- }
- }).catch(()=>{
- console.log('验证失败');
- })
- },
- // '开始日期'点击打开选择弹窗
- clickStartTime(){
- this.startShow = true
- this.nowTime = Number(new Date())
- },
- // '结束日期'点击打开选择弹窗
- clickEndTime(){
- this.endShow = true
- this.nowTime = Number(new Date())
- },
- // '开始日期'点击确定
- cofirmStartTime(e){
- this.form.startTimePoint = this.formatDate(new Date(e.value));
- this.startShow = false
- },
- // '结束日期'点击确定
- cofirmEndTime(e){
- this.form.endTimePoint = this.formatDate(new Date(e.value));
- this.endShow = false
- },
- // 获取2024-02-01 17:01:01 时间格式
- formatDate(date) {
- const year = date.getFullYear();
- const month = ('0' + (date.getMonth() + 1)).slice(-2);
- const day = ('0' + date.getDate()).slice(-2);
- const hours = ('0' + date.getHours()).slice(-2);
- const minutes = ('0' + date.getMinutes()).slice(-2);
- const seconds = ('0' + date.getSeconds()).slice(-2);
- return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
- },
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
使用SCSS编写页面和组件的样式,包括滚动视图的背景色、表单容器的布局、标题的样式以及按钮的布局和颜色。
- <style lang="scss" scoped>
- .body{
- height: 100vh;
- background-color: #f6f7fB;
- .orderReport{
- height: 100vh;
- display: flex;
- flex-direction: column;
- // 表单内容
- .orderReportForm{
- width: 90%;
- margin: 0 auto;
- margin-bottom: 20rpx;
- display: flex;
- flex-direction: column;
- background: #ffffff;
- padding: 30rpx 30rpx;
- box-sizing: border-box;
- border-radius: 2px;
- // 表单标题
- .title {
- font-size:32rpx;
- font-weight: 600;
- margin-bottom: 20rpx;
- &::after {
- position: relative;
- top: 8rpx;
- left: -128rpx;
- content: '';
- background: linear-gradient(129deg, #90B7FF 0%, #EAF1FF 100%);
- border-radius: 2rpx;
- opacity: 0.5;
- width: 120rpx;
- height: 16rpx;
- display: inline-block;
- }
- }
- }
- // 底部按钮内容
- .orderReportBottom{
- display: flex;
- flex-direction: column;
- background: #ffffff;
- margin-top: auto;
- height: 180rpx;
- .orderReportButton{
- width: 90%;
- margin: 0 auto;
- margin-top: 20rpx;
- }
- }
- }
- }
- </style>
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
通过上述步骤,我们构建了一个功能完备、样式简洁的小程序表单填写页面。这个页面不仅提供了基本的输入功能,还包括了表单验证和用户交互设计,确保了用户能够顺畅地完成表单填写。希望本文能够帮助开发者们快速上手小程序表单的设计和实现,提升用户体验。
在小程序开发的道路上,表单设计只是冰山一角。随着技术的不断进步和用户需求的日益增长,我们还需要不断探索和学习,以创造出更加人性化、智能化的应用体验。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。