HTML设计简单的教务管理系统

这是《人机界面设计》的一个作业,运用了HTML,css,javascript的基本操作设计出来的一个西安邮电教务系统的简单页面

本文适合新手运用所学的前端知识进行尝试,建议使用vscode编译器并安装相关包

话不多说,先看最终设计出来的页面:
在这里插入图片描述
上图为登陆界面。账号密码格式正确则跳转到主页面

在此处只验证了输入格式是否正确,并没有数据库与之匹配,所以只要格式规范就可以跳转到主界面

在这里插入图片描述
上图为跳转后的主页面
在这里插入图片描述
上图为模拟手机端打开登陆界面


上图为手机端展示的主页面

在这里插入图片描述
最终完成的文件夹。文件夹res存放需要用到的图片。main为主页面,login为登陆页面
接下来给大家分享登陆页面的HTML部分:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <link rel="stylesheet" href="./css/index.css">
    <title>登陆</title>
</head>
<body>
    <div class="container" id="app" v-cloak>
        <div class="row">
            <div class="hidden-sm-down col-lg-7 col-xl-8 back-img">
                <img src="./res/indexBack.jpg" alt="学生选课系统">
            </div>
            <div class="col-sm-11 col-md-10 col-lg-5 col-xl-4 login-area">
                <ul class="nav nav-tabs type-change-tabs nav-justified">
                    <li class="nav-item" v-for="(item, index) in tabs">
                        <a href="javascript:;" 
                            v-bind:class="'nav-link ' + (item.isActive ? 'active' : '1') " 
                            v-bind:data-type="item.type" 
                            v-on:click="changeTabs" 
                            v-bind:data-index="index"
                        >{{ item.value }}</a>
                    </li>
                </ul>
                <form action="javascript:;" class="login-form">
                    <div class="form-group">
                        <label for="username">{{ tabs[show].showUsernameText }}:</label>
                        <input  type="text" name="username" id="username" class="form-control"
                                v-bind:placeholder="tabs[show].showUsernameText" 
                                v-model="inputData.username"
                                v-on:input="inputChange"
                        >
                    </div>
                    <div class="form-group">
                        <label for="password">密码:</label>
                        <input type="password" name="password" id="password" placeholder="密码" class="form-control" 
                                v-model="inputData.password"
                                v-on:input="inputChange"
                        >
                    </div>
                    <div class="form-group">
                        <label for="captcha">验证码:</label>
                        <input type="text" name="captcha" id="captcha" class="form-control" placeholder="五位验证码"
                                v-model="inputData.captcha"
                                v-on:input="inputChange"
                        >
                        <img alt="验证码" title="验证码" class="captcha" v-bind:src="captchaUrl" v-on:click="updateCaptcha">
                        <span class="text-primary" v-on:click="updateCaptcha">看不清?换一张</span>
                    </div>
                    <div class="form-group">
                        <input type="submit" class="btn btn-primary btn-block login-butt" 
                                v-bind:value="tabs[show].value + '登陆'"
                                v-on:click="login"
                        >
                    </div>
                    <div v-bind:class="'form-group info-show' + ' text-' + callbackInfoType">
                        {{ callbackInfo }}
                    </div>
                </form>
            </div>
        </div>
    </div>

    <!-- 引入JS -->
    <script src="./js/index.js"></script>
<div>
	<center>copyright &copy; 西安邮电大学版权所有
	</center>
</div>
</body>
</html>

接下来是主页面(login成功后的跳转页面)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <link rel="stylesheet" href="./css/dashboard.css">
    <title>教务管理系统</title>
</head>
<body>
    <div class="container-fluid" id="app" v-cloak>
        <div class="row">
            <div class="col-12">
                <nav class="navbar bg-primary navbar-dark navbar-expand-md">
                    <a class="navbar-brand" href="./index.html">教务管理系统</a>
                    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#collapsibleNavbar">
                        <span class="navbar-toggler-icon"></span>
                    </button>
                    <div class="collapse navbar-collapse" id="collapsibleNavbar">
                        <ul class="navbar-nav">
                            <li class="nav-item dropdown">
                                <a href="javascript:;" id="navbardrop" data-toggle="dropdown" class="nav-link dropdown-toggle active">个人信息管理</a>
                                <div class="dropdown-menu">
                                    <a href="javascript:;" target="_blank" title="修改个人基本信息" class="dropdown-item">信息修改</a>
                                    <a href="javascript:;" target="_blank" title="修改账户密码" class="dropdown-item">密码修改</a>
                                </div>
                            </li>
                            <li class="nav-item dropdown"><a href="javascript:;" id="navbardrop" data-toggle="dropdown" class="nav-link dropdown-toggle active">课程管理</a>
                                <div class="dropdown-menu">
                                    <a href="javascript:;" target="_blank" title="添加,删除课程" class="dropdown-item">课程管理</a>
                                    <a href="javascript:;" target="_blank" title="管理课程的成绩" class="dropdown-item">成绩管理</a>
                                </div>
                            </li>
                            <li class="nav-item dropdown">
                                <a href="javascript:;" id="navbardrop" data-toggle="dropdown" class="nav-link dropdown-toggle active">系统管理</a>
                                <div class="dropdown-menu">
                                    <a href="javascript:;" target="_blank" title="添加,删除用户" class="dropdown-item">用户管理</a>
                                </div>
                            </li>
                        </ul>
                    </div>
                </nav>
            </div>
        </div>
        <div class="row">
            <div class="col-xs-12 col-sm-10 col-md-4 col-lg-3 col-xl-2 center">
                <img src="./res/head.jpg" alt="头像" title="<%= info.name %>" class="head-img">
                <div class="alert alert-primary">
                    欢迎你:王勇
                </div>
                <div class="alert alert-dark">
                    权限:管理员
                </div>
                <button class="btn btn-primary btn-block"
                    v-on:click="logout"
                >退出登录</button>
            </div>
        </div>
    </div>

    <!-- js -->
    <script src="./js/dashboard.js"></script>
<div>
	<center>copyright &copy; 西安邮电大学版权所有
	</center>
</div>
</body>
</html>

JavaScript部分

在这里插入图片描述

var app = new Vue({
    el : '#app',
    data : {

    },
    methods : {
        // 退出登陆
        logout : function() {
            window.location.href = './login.html';
        }
    }
});

var app = new Vue({
    el : '#app',
    data : {
        // 选项卡的值
        tabs : [
            {
                isActive : true,
                value : '学生',
                type : 'student',
                showUsernameText : '学号'
            },
            {
                isActive : false,
                value : '老师',
                type: 'teacher',
                showUsernameText : '工号'
            }
        ],
        // 当前展示的选项卡的下标
        show: 0,
        // 登陆API回调的信息
        callbackInfo : '',
        // 登陆API回调的信息类型
        callbackInfoType : '',
        // 输入的表单数据
        inputData : {
            username : '',
            password : '',
            captcha  : ''
        },
        // 验证码的地址
        captchaUrl : './res/captcha.svg'
    },
    methods : {
        /**
         * 修改选中的选项卡
         * @param {object} e 
         */
        changeTabs : function(e) {
            this.tabs[this.show].isActive = false;
            this.tabs[parseInt(e.target.dataset.index)].isActive = true;
            this.show = parseInt(e.target.dataset.index);
        },
        /**
         * 处理登陆事件
         */
        login : function() {
            let username = this.inputData.username;
            let password = this.inputData.password;
            let captcha = this.inputData.captcha;
            let type = this.tabs[this.show].type;
            if(username.length != 8) {
                this.callbackInfo = '用户名必须是8位'
                this.callbackInfoType = 'warning'
                return;
            }
            if(/\D/.test(username)) {
                this.callbackInfo = '用户名只能是纯数字';
                this.callbackInfoType = 'warning';
                return;
            }

            if(password.length < 6) {
                this.callbackInfoType = 'warning';
                this.callbackInfo = '密码长度不能小于6';
                return;
            }
            let pattern = /^\w{6,}$/;
            if(!pattern.test(password)) {
                this.callbackInfo = '密码只能是数字或者字母';
                this.callbackInfoType = 'warning';
                return;
            }

            if(captcha.length != 5) {
                this.callbackInfo = '验证码错误';
                this.callbackInfoType = 'warning';
                return;
            }
            // 这里是验证成功之后的API请求
            window.location.href = './index.html';
        },
        /**
         * input事件
         */
        inputChange : function() {
            if(!this.callbackInfo.length) return;
            this.callbackInfo = this.callbackInfoType = '';
        },
        /**
         * 更新验证码图片
         */
        updateCaptcha : function() {
            this.captchaUrl = './res/captcha.svg' + '?time=' + new Date().getTime();
        }
    }
});

登录界面中使用学号(8位数字)和密码(6位以上字母和数字的组合)登录,通过javascript验证学号和密码的格式是否正确,如果格式且验证码正确则跳转至首页(不用验证密码是否正确);如果格式不正确,提示用户重新输入

css部分:

在这里插入图片描述

[v-cloak]{
    display: none;
}
.show-page-frame{
    overflow: hidden;
    height: 100%;
    width: 100%;
}
.center{
    text-align: center;
    margin: 0px auto;
}
.head-img{
    border-radius: 50%;
    border:1px solid gray;
    max-width: 200px;
    max-height: 200px;
    margin-top: 20px;
    margin-bottom: 20px;
}
[v-cloak] {
    display: none;
}
.login-area{
    margin: 0px auto;
}

.type-change-tabs{
    margin-bottom: 20px;
}
.info-show{
    text-align: center;
    overflow: hidden;
    height:20px;
}
.back-img>img{
    width:100%;
    height:100%;
}
.back-img{
    margin-bottom: 20px;
}
.row{
    padding-top: 100px;
}
.captcha{
    cursor: pointer;
}
.captcha~span{
    cursor: pointer;
}

至于res中的文件是用来存放图片的,读者可以创建res文件夹后添加自己的图片,注意图片的命名即可,命名如下图所示。

在这里插入图片描述
至此任务基本上完成。读者可以试着自己照猫画虎感受前端的初步魅力

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值