For AI agents: the complete documentation index is available at /llms.txt, the full documentation bundle is available at /llms-full.txt, and this page is available as Markdown at /blog/vue/admin-notes.md.

Vue 管理后台随笔

一、使用 Form 表单实现登录跳转

HTML
<form action="url" method="get/post" onsubmit="return toValid()">
    <div class="input-group">
        <span class="input-group-addon"
            ><b class="glyphicon glyphicon-user"></b
        ></span>
        <input
            type="text"
            name="userName"
            id="userName"
            class="form-control"
            placeholder="用户名"
        />
    </div>
    <div class="input-group">
        <span class="input-group-addon"
            ><b class="glyphicon glyphicon-eye-close"></b
        ></span>
        <input
            type="password"
            name="password"
            id="password"
            class="form-control"
            placeholder="密码"
        />
    </div>
    <div class="input-group loginBtn">
        <input type="submit" class="btn btn-primary" value="登录" />
        <input type="reset" class="btn btn-default" value="重置" />
    </div>
</form>

校验提交表单信息

HTML
function toValid() {
    let user = $("#userName").val().trim(),
        pwd = $("#userPwd").val().trim();
    if (user == "") {
        popWin("warning", "用户名不能为空!", "");
        return false;
    }
    if (pwd == "") {
        popWin("warning", "密码不能为空!", "");
        return false;
    }
    return true;
}
注意

通过 submit 按钮提交 form 表单数据,通过 reset 按钮实现表单的 重置。

二、设置页面高度撑起全屏

HTML
function setContentHeight() {
    var DDE = document.documentElement,
        DBOH = document.body.offsetHeight,
        WIH = window.innerHeight;
    var h = WIH ? WIH : DDE && DDE.clientHeight ? DDE.clientHeight : DBOH;
    document.getElementById("loginPage").style.minHeight = h + "px";
}
setContentHeight();
window.onresize = setContentHeight;
注意

window.onresize 方法,动态监测页面变化,从而实现动态改变。

三、jQuery 获取 form 表单 value 值,转化为 JSON 数据

HTML
let formObj = {},
    formList = $("#formId").serializeArray();
$.each(formList, function () {
    formObj[this.name] = this.value;
});
注意

使用 jQuery 插件中**$(' **#formId** ').serializeArray(),方法实现 form 表单的 JSON 序列化。

四、多文件上传(多个、多类型)

html 示例代码

HTML
<!DOCTYPE html>
<html lang="zh">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <meta http-equiv="X-UA-Compatible" content="ie=edge" />
        <title>文件上传</title>
        <link rel="stylesheet" type="text/css" href="css/iconfont.css" />
        <link
            rel="stylesheet"
            type="text/css"
            href="href"
            ="css/fileUpload.css"
        />
    </head>
    <body>
        <!--创建一个文件上传的容器-->
        <div id="fileUploadContent" class="fileUploadContent"></div>
        <button onclick="success()">模拟上传成功</button
        ><button onclick="fail()">模拟上传失败</button>
    </body>
    <script src="js/jquery-min.js"></script>
    <script src="js/fileUpload.js"></script>
</html>

js 逻辑代码

HTML
let wfu = new WpFileUpload("fileUploadContent");

wfu.initUpload({
    uploadUrl: "#", //上传文件信息地址
    progressUrl: "#", // 获取进度条信息地址
    scheduleStandard: false, // 是否模拟上传
    showSummerProgress: false, // 是否总显示进度条
    showFileItemProgress: false, // 是否显示单文件进度条
    ismultiple: true, // 是否可以多选,
    isHiddenUploadBt: true, // 隐藏上传按钮
    onUpload: uploadedFn, // 上传完成执行的回调
});

// 上传完成执行的回调函数
function uploadedFn() {
    // wfu.resultData:上传之后后台返回的信息
    let res = wfu.resultData;
    if (res.code == "200") {
        // code状态码返回成功时
    } else {
        // code状态码返回失败时
    }
}

// 文件上传成功提示信息
function success() {
    wfu.uploadSuccess();
}

// 文件上传失败提示信息
function fail() {
    wfu.uploadError();
}

五、封装信息提示弹窗(基于 bootstrap)

信息提示弹窗是基于 bootstrap&jQuery 封装的。

HTML
<!DOCTYPE html>
<html lang="zh">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <meta http-equiv="X-UA-Compatible" content="ie=edge" />
        <title>信息提示弹窗</title>
        <link rel="stylesheet" href="../static/css/reset.min.css" />
        <link rel="stylesheet" href="../static/css/bootstrap.min.css" />
        <style type="text/css">
            /* 弹窗信息 */
            .tipsBox {
                width: auto;
                position: fixed;
                top: 50%;
                left: 50%;
                -webkit-transform: translate(-50%);
                -moz-transform: translateX(-50%);
                -ms-transform: translateX(-50%);
                transform: translateX(-50%);
                z-index: 9999;
            }

            .tipsBox > div {
                display: none;
            }

            .tipsBox > div span {
                margin-right: 10px;
            }
        </style>
    </head>
    <body>
        <div class="tipsBox">
            <div id="alertTips" class="alert"></div>
        </div>
    </body>
    <script src="js/jquery-min.js"></script>
    <script type="text/javascript">
        // 弹窗封装
        let popWin = function (type, tips, msg) {
            let $Tip = $("#alertTips");
            $Tip.html(
                '<a href="#" class="close" data-dismiss="alert">&times;</a>'
            );
            let str = "<strong>" + tips + "</strong><span>" + msg + "<span>";
            let cName = "alert-" + type;
            $Tip.removeClass().addClass("alert");
            $Tip.addClass(cName).append(str);
            $Tip.fadeIn(400, function () {
                let timer = setTimeout(function () {
                    $Tip.fadeOut(500);
                    clearTimeout(timer);
                }, 1600);
            });
        };

        // 弹窗调用
        popWin("success", "成功!", "提示文本");
        popWin("warning", "警告!", "提示文本");
        popWin("danger", "失败!", "提示文本");
    </script>
</html>

六、bootstrap-select 文本下拉框

  • 图例样式: 图一.png

  • 带模糊查询的 select 下拉框: 图二.png

  • select 下拉菜单插件源码:bootstrap-select.zip

代码示例
<!DOCTYPE html>
<html lang="zh">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <meta http-equiv="X-UA-Compatible" content="ie=edge" />
        <title>多个同名select操作</title>
    </head>
    <body>
        <select name="select" onchange="changeOpt(this)">
            <option value="">请选择</option>
            <optgroup>
                <option value="1">1</option>
                <option value="2">2</option>
            </optgroup>
        </select>
    </body>
    <script type="text/javascript">
        let changeOpt = function (e) {
            // 当前选中的HTML页面的select节点
        };
    </script>
</html>
总结

若是同时使用两个相同 name 属性的 select 下拉框,则使用第一个 select 下拉框的 onchange 事件触发后续的 select 下拉框,则不起作用。原因是 bootstrap 插件使用的是定位实现的下拉选项的相关样式。