← 返回首页
UniApp基础教程(四)
发表时间:2022-10-15 11:13:34
表单案例

使用uni-ui的表单组件实现登录和注册表单界面效果。

1.项目结构图

2.users/index.vue

<template>
    <view>
        <view>
            <view>
                <text>
                    \n\n
                </text>
            </view>

            <view style="padding: 40rpx;">
                <button type="primary" plain="true" @tap="toLogin()">跳转表单演示页面</button>
            </view>
        </view>
    </view>
</template>

<script>
    export default {
        data() {
            return {
                title: ''
            }
        },
        methods: {
            toLogin() {
                uni.navigateTo({
                    url: '/pages/users/form'
                })
            }
        }
    }
</script>

<style>
    .center_title {
        size: 20rpx;
    }
</style>

3.users/form.vue

<template>
    <view class="content">
        <!-- <text>我的订单</text> -->
        <view>
            <view class="tabs">
                <view :class="['tabs-item',index==0?'tabs-item-tag':'']" @click="changeTab(0)">登录</view>
                <view :class="['tabs-item',index==1?'tabs-item-tag':'']" @click="changeTab(1)">注册</view>
            </view>
            <view :class="[index==0?'item':'']" v-show="index==0">
                <!-- 基础用法,不包含校验规则 -->
                <uni-forms ref="loginForm" :modelValue="loginUser">
                    <uni-forms-item label="用户名" required>
                        <uni-easyinput v-model="loginUser.username" placeholder="请输入用户名/手机/电子邮箱" />
                    </uni-forms-item>
                    <uni-forms-item label="密码" required>
                        <uni-easyinput type="password" v-model="loginUser.password" placeholder="请输入密码" />
                    </uni-forms-item>
                    <uni-forms-item label=" ">
                        <!--
                        <image style="margin-top: 10rpx; width: 240rpx; height: 90rpx;" src='/static/form/randomCode.png' />
                        -->
                        <view>
                            <image style="cursor: pointer; margin-top: 10rpx; width: 240rpx; height: 90rpx;"
                                :src='randomCodeUrl' @tap="changeRandomCode">
                            </image>
                        </view>
                    </uni-forms-item>
                    <uni-forms-item label="验证码" required>
                        <uni-easyinput v-model="loginUser.validateCode" placeholder="请输入验证码" />
                    </uni-forms-item>
                </uni-forms>
                <view>
                    <button type="default" plain="true" @click="doLogin()">登录</button>
                </view>
            </view>
            <view :class="[index==1?'item':'']" v-show="index==1">
                <!-- 基础用法,不包含校验规则 -->
                <uni-forms ref="regForm" :modelValue="regUser">
                    <uni-forms-item label="手机/邮箱" label-width="180rpx" required>
                        <uni-easyinput v-model="regUser.username" placeholder="请输入手机/邮箱" />
                    </uni-forms-item>
                    <uni-forms-item label=" " label-width="180rpx">
                        <button type="default" @click="sendMsg">发送验证码</button>
                    </uni-forms-item>
                    <uni-forms-item label="密码" label-width="180rpx" required>
                        <uni-easyinput v-model="regUser.password" type="password" placeholder="请输入密码" />
                    </uni-forms-item>
                    <uni-forms-item label="确认密码" label-width="180rpx" required>
                        <uni-easyinput v-model="regUser.confirmPass" type="password" placeholder="请输入确认密码" />
                    </uni-forms-item>
                    <uni-forms-item label="性别" label-width="180rpx" required>
                        <uni-data-checkbox v-model="regUser.gender" :localdata="genders" />
                    </uni-forms-item>
                    <uni-forms-item label="出生日期" label-width="180rpx">
                        <uni-datetime-picker type="datet" return-type="date" v-model="regUser.birthday" />
                    </uni-forms-item>
                    <uni-forms-item label="关注领域" label-width="180rpx">
                        <uni-data-checkbox v-model="regUser.favorite" multiple :localdata="favorites" />
                    </uni-forms-item>
                    <uni-forms-item label="选择学历" label-width="180rpx">
                        <uni-data-picker v-model="regUser.education" :localdata="eductions" popup-title="选择学历">
                        </uni-data-picker>
                    </uni-forms-item>
                    <uni-forms-item label="自我介绍" label-width="180rpx">
                        <uni-easyinput type="textarea" v-model="regUser.introduction" placeholder="请输入自我介绍" />
                    </uni-forms-item>
                    <uni-forms-item label="验证码" label-width="180rpx" required>
                        <uni-easyinput v-model="regUser.validateCode" placeholder="请输入验证码" />
                    </uni-forms-item>
                </uni-forms>
                <view>
                    <button type="primary" @click="doReg()">注册</button>
                </view>
            </view>

        </view>
    </view>
</template>

<script>
    export default {
        data() {
            return {
                // 默认显示0
                index: 0,
                token: new Date().getMilliseconds() + "",
                randomCodeUrl: 'https://www.simoniu.com/commons/validateCode/hutoolRandomCodeImage?token=' + new Date()
                    .getMilliseconds(),
                loginUser: {
                    username: '',
                    password: '',
                    validateCode: ''
                },
                regUser: {
                    username: '',
                    password: '',
                    confirmPass: '',
                    education: '本科',
                    gender: '男',
                    favorite: 'server',
                    birthday: '',
                    introduction: '',
                    validateCode: ''
                },
                // 单选数据源
                genders: [{
                    text: '男',
                    value: '男'
                }, {
                    text: '女',
                    value: '女'
                }],

                // 多选数据源
                favorites: [{
                    text: '后端',
                    value: 'server'
                }, {
                    text: '前端',
                    value: 'h5'
                }, {
                    text: '算法',
                    value: 'alg'
                }, {
                    text: 'A I ',
                    value: 'ai'
                }, {
                    text: '网络',
                    value: 'net'
                }, {
                    text: '其他',
                    value: 'other'
                }],

                // 城市数据
                eductions: [{
                        text: "文盲",
                        value: "文盲",
                    }, {
                        text: "小学",
                        value: "小学",
                    }, {
                        text: "初中",
                        value: "初中",
                    }, {
                        text: "高中",
                        value: "高中",
                    },
                    {
                        text: "大专",
                        value: "大专",
                    },
                    {
                        text: "本科",
                        value: "本科",
                    },
                    {
                        text: "研究生",
                        value: "研究生",
                    }
                ]
            };
        },
        onLoad() {
            /*
            uni.request({
                url: this.randomCodeUrl,
                method:'GET',
                data:{
                    token: this.token
                },
                success: (resp) => {
                   console.log(resp)
                }
            })*/
        },
        methods: {
            // 切换
            changeTab(index) {
                this.index = index;
                console.log('当前tab编号:' + index)
            },

            sendMsg() {
                uni.showToast({
                    title: '发送验证码',
                    duration: 2000
                })
            },

            changeRandomCode() {
                this.randomCodeUrl = 'https://www.simoniu.com/commons/validateCode/hutoolRandomCodeImage?token=' +
                    new Date().getMilliseconds();
            },

            doLogin() {
                console.log("------------登录用户资料-----------");
                console.log(this.loginUser);
                uni.showToast({
                    title: '执行登录',
                    duration: 2000
                })
            },
            doReg() {
                console.log("------------注册用户资料-----------");
                console.log(this.regUser);
                uni.showToast({
                    title: '执行注册',
                    duration: 2000
                })
            }
        }
    }
</script>

<style lang="scss">
    .content {
        .tabs {
            height: 60rpx;
            padding: 40rpx;
            display: flex;
            margin-top: 10rpx;

            .tabs-item {
                // 平均分布
                flex: 1;
                text-align: center;
                color: #111111;
                height: 60rpx;
                line-height: 60rpx;
            }

            .tabs-item-tag {
                color: #5BA7FF;
                border-bottom: 4rpx solid #5BA7FF;
            }
        }

        .item {
            padding: 40rpx;
            display: grid;

            image {
                width: 64rpx;
                height: 64rpx;
                margin: auto;
                margin-top: 400rpx;
            }

            text {
                text-align: center;
            }
        }
    }
</style>

运行效果: