大事件项目

29 篇文章 1 订阅
3 篇文章 0 订阅

目录

一、登录页面/注册页面

 1.HTMl、CSS

2、JavaScript

 二、index首页

  1、HTML、CSS

2、JavaScript

三、个人中心-基本资料

  1、HTML、CSS

2、JS

三、个人中心-修改密码

1、HTMl、CSS

2、JS

四、个人中心-更换头像

  1、HTML、CSS

2、 js

四、文章管理--文章类别

  1、HTML、CSS

2、JS

五、文章管理--发表文章

1、HTML、CSS

2、JS

六、文章管理--文章列表

 1、HTML、CSS

2、js


一、登录页面/注册页面

 1.HTMl、CSS

<!DOCTYPE html>
<html lang="en">
 
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>登录&注册</title>
    <link rel="stylesheet" href="/assets/lib/layui/css/layui.css">
    <link rel="stylesheet" href="/assets/css/login.css">
</head>
 
<body>
    <!-- 顶部logo -->
    <div class="layui-main">
        <img src="/assets/images/logo.png" alt="">
    </div>
 
    <!-- 中心区域后台管理系统 -->
    <div class="center">
        <div class="top"></div>
        <!-- 登录 -->
        <div class="register">
            <form id="FormData" class="layui-form" action="">
                <!-- 用户名 -->
                <div class="layui-form-item">
                    <i class="layui-icon layui-icon-username"></i>
                    <input type="text" name="username" required lay-verify="required|username" placeholder="请输入用户名"
                        autocomplete="off" class="layui-input">
                </div>
                <!-- 密码 -->
                <div class="layui-form-item">
                    <i class="layui-icon layui-icon-password"></i>
                    <input type="text" name="password" required lay-verify="required|password" placeholder="请输入密码"
                        autocomplete="off" class="layui-input">
                </div>
                <!-- 按钮 -->
                <div class="layui-form-item">
                    <button class="layui-btn layui-btn-normal layui-btn-fluid" lay-submit
                        lay-filter="formDemo">登录</button>
                </div>
                <!-- a -->
                <div id="zhcy" class="layui-form-item">
                    <a href="javascript:;">注册</a>
                </div>
            </form>
        </div>
 
 
 
        <!-- 注册 -->
        <div class="login" style="display: none;">
            <form id="Form" class="layui-form" action="">
                <!-- 用户名 -->
                <div class="layui-form-item">
                    <i class="layui-icon layui-icon-username"></i>
                    <input type="text" name="username" required lay-verify="required|username" placeholder="请输入用户名"
                        autocomplete="off" class="layui-input">
                </div>
                <!-- 密码 -->
                <div class="layui-form-item">
                    <i class="layui-icon layui-icon-password"></i>
                    <input type="text" name="password" required lay-verify="required|password" placeholder="请输入密码"
                        autocomplete="off" class="layui-input">
                </div>
                <!-- 再次输入密码 -->
                <div class="layui-form-item">
                    <i class="layui-icon layui-icon-password"></i>
                    <input type="text" name="repassword" required lay-verify="required|repassword" placeholder="请再次输入密码"
                        autocomplete="off" class="layui-input">
                </div>
                <!-- 按钮 -->
                <div class="layui-form-item">
                    <button class="layui-btn layui-btn-normal layui-btn-fluid" lay-submit
                        lay-filter="formDemo">注册</button>
                </div>
                <!-- a -->
                <div id="dengue" class="layui-form-item">
                    <a href="javascript:;">登录</a>
                </div>
            </form>
        </div>
    </div>
    <script src="/assets/lib/layui/layui.all.js"></script>
    <script src="/assets/lib/jquery.js"></script>
    <script src="/assets/lib/axios.js"></script>
    <script src="/assets/js/login.js"></script>
</body>
 
</html>
body {
    background: url('/assets/images/login_bg.jpg') no-repeat;
    background-size: cover;
}
 
.layui-main {
    margin-top: 20px;
}
 
.center {
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
    width: 400px;
    height: 310px;
    background-color: #fff;
}
 
.top {
    height: 60px;
    background: url('/assets/images/login_title.png') no-repeat center;
}
 
.layui-form a {
    font-size: 12px;
}
 
form {
    padding: 0 30px;
}
 
.layui-form-item {
    position: relative;
}
 
.layui-icon {
    position: absolute;
    left: 10px;
    top: 10px;
}
 
.layui-form input {
    padding-left: 30px;
}

2、JavaScript

$(function () {
    // 登录
    $("#zhcy").on("click", function () {
        $('.login').show()
        $(".register").hide()
    })
    // 注册
    $("#dengue").on("click", function () {
        $(".register").show()
        $('.login').hide()
    })
    const form = layui.form
    
    // 注册正则判断
    form.verify({
        username: [
            /^[a-zA-Z0-9]{1,10}$/,
            '用户名必须是1-10位字母和数字'
        ],
        password: [
            /^[\S]{6,15}$/,
            '密码长度必须是6-15位的非空字符串'
        ],
        repassword: function (value) {
            // 判断确认密码要和新密码一致
            let txt = $('#Form [name=password]').val()
            // console.log(txt);
            if (txt != value) {
                return '两次密码不一致'
            }
        }
    })
 
    // 注册
    $("#Form").on("submit", function (e) {
        e.preventDefault()
        axios({
            url: 'http://www.liulongbin.top:3007/api/reguser',
            method: 'POST',
            data: $(this).serialize()
        }).then(res => {
            //成功回调
            console.log(res)
            if (res.data.status != 0) {
                return layer.msg(res.data.message)
            }
            // 成功
            layer.msg(res.data.message)
            setTimeout(function () {
                $("#dengue").click()
            }, 500)
        });
    })
 
    // 登录
    $('#FormData').on("submit", function (e) {
        //阻止form表单默认提交
        e.preventDefault()
        axios({
            url: 'http://www.liulongbin.top:3007/api/login',
            method: 'POST',
            data: $(this).serialize()
 
        }).then(res => {
            //成功回调
            console.log(res)
            if (res.data.status != 0) {
                return layer.msg('用户名或者密码错误')
            }
            // 成功
            // 跳转到index首页并且保存token
            layer.msg('登录成功')
            setTimeout(function () {
                location.href = '/index.html'
            }, 1000)
            localStorage.setItem('token', res.data.token)
        });
    })
})
 

 二、index首页

  1、HTML、CSS

<!DOCTYPE html>
<html lang="en">
 
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>大事件管理后台</title>
    <link rel="stylesheet" href="/assets/lib/layui/css/layui.css">
    <link rel="stylesheet" href="/assets/fonts/iconfont.css">
    <link rel="stylesheet" href="/assets/css/index.css">
</head>
 
<body>
    <div class="layui-layout layui-layout-admin">
        <div class="layui-header">
            <div class="layui-logo layui-hide-xs"><img src="/assets/images/logo.png" alt=""></div>
            <!-- 头部区域(可配合layui 已有的水平导航) -->
            <ul class="layui-nav layui-layout-right">
                <li class="layui-nav-item layui-hide layui-show-md-inline-block">
                    <a class="profile" href="javascript:;">
                        <img style="display: none;" src="/assets/images/sample2.jpg" class="layui-nav-img">
                        <span class="wenzi">C</span>&nbsp; 个人中心
                    </a>
                    <dl class="layui-nav-child">
                        <dd><a href="">基本资料</a></dd>
                        <dd><a href="">更换头像</a></dd>
                        <dd><a href="">重置密码</a></dd>
                    </dl>
                </li>
                <li class="layui-nav-item" lay-header-event="menuRight" lay-unselect>
                    <a href="javascript:;" class="tuichu">
                        <span class="iconfont icon-tuichu"></span></i>退出
                    </a>
                </li>
            </ul>
        </div>
 
 
        <div class="layui-side layui-bg-black">
            <div class="layui-side-scroll">
                <!-- 左侧导航区域(可配合layui已有的垂直导航) -->
                <div class="profile">
                    <img style="display: none;" src="/assets/images/sample2.jpg" class="layui-nav-img">
                    <span class="wenzi">C</span>
                    <span class="hy">&nbsp; 欢迎 &nbsp;</span>
                </div>
                <ul class="layui-nav layui-nav-tree" lay-filter="test" lay-shrink='all'>
                    <li class="layui-nav-item  layui-this"><a href="/home/dashboard.html" target="fm"><span
                                class="iconfont icon-home"></span>首页</a></li>
                    <li class="layui-nav-item">
                        <a class="" href="javascript:;"><span class="iconfont icon-16"></span>文章管理</a>
                        <dl class="layui-nav-child">
                            <dd><a href="javascript:;"><i class="layui-icon layui-icon-app"></i>文章类别</a></dd>
                            <dd><a href="javascript:;"><i class="layui-icon layui-icon-app"></i>文章列表</a></dd>
                            <dd><a href="javascript:;"><i class="layui-icon layui-icon-app"></i>发表文章</a></dd>
                        </dl>
                    </li>
                    <li class="layui-nav-item">
                        <a href="javascript:;"><span class="iconfont icon-user"></span>个人中心</a>
                        <dl class="layui-nav-child">
                            <dd><a href="javascript:;"><i class="layui-icon layui-icon-app"></i>基本资料</a></dd>
                            <dd><a href="javascript:;"><i class="layui-icon layui-icon-app"></i>更换头像</a></dd>
                            <dd><a href=""><i class="layui-icon layui-icon-app"></i>重置密码</a></dd>
                        </dl>
                    </li>
 
                </ul>
            </div>
        </div>
 
        <div class="layui-body">
            <!-- 内容主体区域 -->
            <iframe name="fm" src="/home/dashboard.html" frameborder="0"></iframe>
        </div>
 
    </div>
 
 
 
    <script src="/assets/lib/layui/layui.all.js"></script>
    <script src="/assets/lib/jquery.js"></script>
    <script src="/assets/lib/axios.js"></script>
    <script src="/assets/js/commom.js"></script>
    <script src="/assets/js/index.js"></script>
</body>
 
</html>
.layui-layout a {
    font-size: 13px;
}
 
.iconfont {
    margin-right: 6px;
}
 
.layui-icon {
    margin-left: 15px;
    margin-right: 6px;
}
 
.layui-body {
    overflow: hidden;
}
 
iframe {
    width: 100%;
    height: 100%;
}
 
.layui-footer {
    text-align: center;
    font-size: 12px;
}
 
.profile {
    height: 60px;
    text-align: center;
    line-height: 60px;
}
 
.layui-side-scroll .profile {
    height: 70px;
    line-height: 70px;
}
 
.wenzi {
    display: inline-block;
    width: 30px;
    height: 30px;
    background-color: #5885e8;
    line-height: 30px;
    border-radius: 50%;
}

2、JavaScript

// 入口函数
$(function () {
    // 渲染页面用户信息,作为全局变量
    index()
 
    // 退出
    $(".tuichu").on("click", function () {
        layer.confirm('确认退出登录吗?', { icon: 3, title: '提示' }, function (index) {
            //do something
            location.href = '/login.html'
            localStorage.removeItem("token")
            layer.close(index);
        });
    })
})
 
 
// 渲染用户信息,设置为全局变量
function index() {
    axios({
        url: '/my/userinfo',
        method: 'GET',
    }).then(res => {
        //成功回调
        // console.log(res)
        if (res.data.status != 0) {
            return layer.msg(res.data.message)
        }
        // 成功则渲染里面的图片和文字
        getData(res.data.data)
    });
}
 
function getData(res) {
    // 渲染文字
    let name = res.nickname || res.username
    $('.hy').html(`&nbsp 欢迎 ${name}`)
 
    // 渲染头像
    if (res.user_pic != null) {
        $('.layui-nav-img').show().attr('src', res.user_pic)
        $('.wenzi').hide()
    } else {
        $('.layui-nav-img').hide()
        let first = name[0].toUpperCase()
        $('.wenzi').show().html(first)
    }
}

三、个人中心-基本资料

  1、HTML、CSS

<!DOCTYPE html>
<html lang="en">
 
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="/assets/lib/layui/css/layui.css">
    <link rel="stylesheet" href="/assets/fonts/iconfont.css">
    <link rel="stylesheet" href="/assets/css/user/user_data.css">
</head>
 
<body>
    <div class="layui-card">
        <div class="layui-card-header">修改用户信息</div>
        <div class="layui-card-body">
            <form class="layui-form" action="" lay-filter="form">
                <!-- 登录名称 -->
                <div class="layui-form-item">
                    <label class="layui-form-label">登录名称</label>
                    <input type="hidden" name="id">
                    <div class="layui-input-block">
                        <input type="text" name="username" required lay-verify="required" placeholder="请输入标题"
                            autocomplete="off" class="layui-input">
                    </div>
                </div>
                <!-- 用户昵称 -->
                <div class="layui-form-item">
                    <label class="layui-form-label">用户昵称</label>
                    <div class="layui-input-block">
                        <input type="text" name="nickname" required lay-verify="required|nickname" placeholder="请输入用户昵称"
                            autocomplete="off" class="layui-input" maxlength="10">
                    </div>
                </div>
                <!-- 用户邮箱 -->
                <div class="layui-form-item">
                    <label class="layui-form-label">用户邮箱</label>
                    <div class="layui-input-block">
                        <input type="text" name="email" required lay-verify="required|email" placeholder="请输入用户邮箱"
                            autocomplete="off" class="layui-input">
                    </div>
                </div>
                <!-- 按钮 -->
                <div class="layui-form-item">
                    <div class="layui-input-block">
                        <button class="layui-btn" lay-submit lay-filter="formDemo">提交修改</button>
                        <button id="chongjin" type="reset" class="layui-btn layui-btn-primary">重置</button>
                    </div>
                </div>
            </form>
        </div>
    </div>
 
 
    <script src="/assets/lib/layui/layui.all.js"></script>
    <script src="/assets/lib/jquery.js"></script>
    <script src="/assets/lib/axios.js"></script>
    <script src="/assets/js/commom.js"></script>
    <script src="/assets/js/user/user_data.js"></script>
</body>
 
</html>
body {
    background-color: #f2f2f2;
    padding: 15px;
}
 
form {
    width: 500px;
}

2、JS

$(function () {
    let form = layui.form
    apply()// 渲染用户信息
    function apply() {
        axios({
            url: '/my/userinfo',
            method: 'GET',
        }).then(res => {
            //成功回调
            // console.log(res)
            if (res.data.status != 0) {
                return layer.msg(res.data.message)
            }
            // 成功
            form.val('form', res.data.data);
        });
    }
 
 
    // 修改用户信息
    $("form").on('submit', function (e) {
        // 阻止表单默认提交
        e.preventDefault()
        axios({
            url: '/my/userinfo',
            method: 'POST',
            data: $(this).serialize()
        }).then(res => {
            //成功回调
            // console.log(res)
            if (res.data.status != 0) {
                return layer.msg(res.data.message)
            }
            // 成功
            layer.msg('修改用户信息成功')
            // index页面实时更新
            window.parent.index()
        });
    })
 
    //重置按钮
    $("#chongjin").on("click", function (e) {
        e.preventDefault()
        apply()
    })
    
    //正则表达式
    form.verify({
        nickname: [
            /^[\S]{1,10}$/,
            '昵称的长度为1-10的非空字符串'
        ]
    })
})

三、个人中心-修改密码

 

1、HTMl、CSS

<!DOCTYPE html>
<html lang="en">
 
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="/assets/lib/layui/css/layui.css">
    <link rel="stylesheet" href="/assets/fonts/iconfont.css">
    <link rel="stylesheet" href="/assets/css/user/user_password.css">
</head>
 
<body>
    <div class="layui-card">
        <div class="layui-card-header">修改密码</div>
        <div class="layui-card-body">
            <form class="layui-form" action="" lay-filter="form">
                <!-- 登录名称 -->
                <div class="layui-form-item">
                    <label class="layui-form-label">原密码</label>
                    <input type="hidden" name="id">
                    <div class="layui-input-block">
                        <input type="text" name="oldPwd" required lay-verify="required|oldPwd" placeholder="请输入原密码"
                            autocomplete="off" class="layui-input">
                    </div>
                </div>
                <!-- 新密码 -->
                <div class="layui-form-item">
                    <label class="layui-form-label">新密码</label>
                    <div class="layui-input-block">
                        <input type="text" name="newPwd" required lay-verify="required|oldPwd|newPwd"
                            placeholder="请输入新密码" autocomplete="off" class="layui-input" maxlength="10">
                    </div>
                </div>
                <!-- 确认新密码 -->
                <div class="layui-form-item">
                    <label class="layui-form-label">确认新密码</label>
                    <div class="layui-input-block">
                        <input type="text" name="RenewPwd" required lay-verify="required|oldPwd|RenewPwd"
                            placeholder="请确认新密码" autocomplete="off" class="layui-input">
                    </div>
                </div>
                <!-- 按钮 -->
                <div class="layui-form-item">
                    <div class="layui-input-block">
                        <button class="layui-btn" lay-submit lay-filter="formDemo">修改密码</button>
                        <button id="chongjin" type="reset" class="layui-btn layui-btn-primary">重置</button>
                    </div>
                </div>
            </form>
        </div>
    </div>
 
 
    <script src="/assets/lib/layui/layui.all.js"></script>
    <script src="/assets/lib/jquery.js"></script>
    <script src="/assets/lib/axios.js"></script>
    <script src="/assets/js/commom.js"></script>
    <script src="/assets/js/user/user_password.js"></script>
</body>
 
</html>
body {
    background-color: #f2f2f2;
    padding: 15px;
}
 
form {
    width: 500px;
}

2、JS

$(function () {
 
    // 正则表达式
    let form = layui.form
    form.verify({
        oldPwd: [
            /^[\S]{6,15}$/,
            '密码的必须是6-15位的非空字符'
        ],
        // 新密码不能与旧密码相同
        newPwd: function (value) {
            let v1 = $('[name=oldPwd]').val()
            if (value == v1) {
                return '新密码不能与旧密码相同'
            }
        },
        // 确认密码要和新密码相同
        RenewPwd: function (value) {
            let v2 = $("[name=newPwd]").val()
            if (value != v2) {
                return '两次密码不一致'
            }
        }
    })
 
    // 修改密码  
    $("form").on('submit', function (e) {
        e.preventDefault()
        axios({
            url: '/my/updatepwd',
            method: 'POST',
            data: $(this).serialize()
        }).then(res => {
            //成功回调
            console.log(res)
            if (res.data.status != 0) {
                return layer.msg(res.data.message)
            }
            // 成功
            layer.msg(res.data.message)
            setTimeout(function () {
                window.parent.location.href = '/login.html'
            }, 1000)
            localStorage.removeItem('token')
        });
    })
})

四、个人中心-更换头像

  1、HTML、CSS

body {
    background-color: #f2f2f2;
    padding: 15px;
}
 
form {
    width: 500px;
}
 
/* 设置卡片主体区域的宽度 */
.layui-card-body {
    width: 500px;
}
 
/* 设置按钮行的样式 */
.row2 {
    display: flex;
    justify-content: flex-end;
    margin-top: 20px;
}
 
/* 设置裁剪区域的样式 */
.cropper-box {
    width: 350px;
    height: 350px;
    background-color: cyan;
    overflow: hidden;
}
 
/* 设置第一个预览区域的样式 */
.w100 {
    width: 100px;
    height: 100px;
    background-color: gray;
}
 
/* 设置第二个预览区域的样式 */
.w50 {
    width: 50px;
    height: 50px;
    background-color: gray;
    margin-top: 50px;
}
 
/* 设置预览区域下方文本的样式 */
.size {
    font-size: 12px;
    color: gray;
    text-align: center;
}
 
/* 设置图片行的样式 */
.row1 {
    display: flex;
}
 
/* 设置 preview-box 区域的的样式 */
.preview-box {
    display: flex;
    flex-direction: column;
    flex: 1;
    align-items: center;
}
 
/* 设置 img-preview 区域的样式 */
.img-preview {
    overflow: hidden;
    border-radius: 50%;
}
<!DOCTYPE html>
<html lang="en">
 
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="/assets/lib/layui/css/layui.css">
    <link rel="stylesheet" href="/assets/lib/cropper/cropper.css" />
    <link rel="stylesheet" href="/assets/css/user/user_pic.css">
</head>
 
<body>
    <div class="layui-card">
        <div class="layui-card-header">更换头像</div>
        <div class="layui-card-body">
            <!-- 第一行的图片裁剪和预览区域 -->
            <div class="row1">
                <!-- 图片裁剪区域 -->
                <div class="cropper-box">
                    <!-- 这个 img 标签很重要,将来会把它初始化为裁剪区域 -->
                    <img id="image" src="/assets/images/sample.jpg" />
                </div>
                <!-- 图片的预览区域 -->
                <div class="preview-box">
                    <div>
                        <!-- 宽高为 100px 的预览区域 -->
                        <div class="img-preview w100"></div>
                        <p class="size">100 x 100</p>
                    </div>
                    <div>
                        <!-- 宽高为 50px 的预览区域 -->
                        <div class="img-preview w50"></div>
                        <p class="size">50 x 50</p>
                    </div>
                </div>
            </div>
 
            <!-- 第二行的按钮区域 -->
            <div class="row2">
                <input id="File" type="file" style="display: none;">
                <button id="uploading" type="button" class="layui-btn">上传</button>
                <button id="affirm" type="button" class="layui-btn layui-btn-danger">确定</button>
            </div>
        </div>
    </div>
 
 
    <script src="/assets/lib/layui/layui.all.js"></script>
    <script src="/assets/lib/jquery.js"></script>
    <script src="/assets/lib/cropper/Cropper.js"></script>
    <script src="/assets/lib/cropper/jquery-cropper.js"></script>
    <script src="/assets/lib/axios.js"></script>
    <script src="/assets/js/commom.js"></script>
    <script src="/assets/js/user/user_pic.js"></script>
</body>
 
</html>

2、 js

$(function () {
    // 1.1 获取裁剪区域的 DOM 元素
    var $image = $('#image')
    // 1.2 配置选项
    const options = {
        // 纵横比
        aspectRatio: 1,
        // 指定预览区域
        preview: '.img-preview'
    }
 
    // 1.3 创建裁剪区域
    $image.cropper(options)
 
    // 点击上传按钮触发file文件选择框点击事件
    $("#uploading").on("click", function () {
        $("#File").click()
    })
 
    // file文件选择框change事件
    $("#File").on("change", function (e) {
        let file = e.target.files[0]
        // console.log(file);
        //  根据文件选择 创建一个对应的地址
        let newImgURL = URL.createObjectURL(file)
 
        $image
            .cropper('destroy')      // 销毁旧的裁剪区域
            .attr('src', newImgURL)  // 重新设置图片路径
            .cropper(options)        // 重新初始化裁剪区域
    })
    // 点击确认按钮
    $("#affirm").on("click", function () {
        var dataURL = $image
            .cropper('getCroppedCanvas', { // 创建一个 Canvas 画布
                width: 100,
                height: 100
            })
            .toDataURL('image/png')       // 将 Canvas 画布上的内容,转化为 base64 格式的字符串
 
        axios({
            url: '/my/update/avatar',
            method: 'POST',
            data: `avatar=${encodeURIComponent(dataURL)}`,
        }).then(res => {
            //成功回调
            console.log(res)
            if (res.data.status != 0) {
                return layer.msg(res.data.message)
            }
            // 成功
            layer.msg(res.data.message)
            // index 页面实时刷新
            window.parent.index()
        });
    })
 
})

四、文章管理--文章类别

  1、HTML、CSS

<!DOCTYPE html>
<html lang="en">
 
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="/assets/lib/layui/css/layui.css">
    <link rel="stylesheet" href="/assets/css/article/article.sort.css">
</head>
 
<body>
    <div class="layui-card">
        <div class="layui-card-header">
            <span>文章类别管理</span>
            <button id="add" class="layui-btn layui-btn-normal layui-btn-sm" lay-submit
                lay-filter="formDemo">添加分类</button>
        </div>
        <div class="layui-card-body">
            <table class="layui-table">
                <colgroup>
                    <col width="150">
                    <col>
                    <col>
                    <col width="200">
                </colgroup>
                <thead>
                    <tr>
                        <th>序号</th>
                        <th>分类名称</th>
                        <th>分类别名</th>
                        <th>操作 </th>
                    </tr>
                </thead>
                <tbody>
                    <!-- <tr>
                        <td>贤心</td>
                        <td>2016-11-29</td>
                        <td>人生就像是一场修行</td>
                        <td>
                            <button id="del" class="layui-btn layui-btn-danger  layui-btn-xs" lay-submit
                                lay-filter="formDemo">删除</button>
                            <button id="xiugai" class="layui-btn  layui-btn-xs" lay-submit
                                lay-filter="formDemo">修改</button>
                        </td>
                    </tr> -->
                </tbody>
            </table>
        </div>
       
    </div>
 
 
    <script src="/assets/lib/layui/layui.all.js"></script>
    <script src="/assets/lib/jquery.js"></script>
    <script src="/assets/lib/axios.js"></script>
    <script src="/assets/js/commom.js"></script>
    <script src="/assets/js/article/article.sort.js"></script>
</body>
 
</html>
body {
    background-color: #f2f2f2;
    padding: 15px;
}
 
.layui-card-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
}
 
form {
    padding-top: 20px;
    padding-right: 30px;
}

2、JS

$(function () {
    let form = layui.form
    // 渲染信息
    getData()
    function getData() {
        axios({
            url: '/my/article/cates',
            method: 'GET',
        }).then(res => {
            //成功回调
            // console.log(res)
            if (res.data.status != 0) {
                return layer.msg(res.data.message)
            }
            // 成功
            let arr = []
            res.data.data.forEach(value => {
                arr.push(`
                <tr>
                    <td>${value.Id}</td>
                    <td>${value.name}</td>
                    <td>${value.alias}</td>
                    <td>
                        <button data-id='${value.Id}' id="del" class="layui-btn layui-btn-danger  layui-btn-xs" lay-submit
                            lay-filter="formDemo">删除</button>
                        <button data-id='${value.Id}' id="xiugai" class="layui-btn  layui-btn-xs" lay-submit
                            lay-filter="formDemo">修改</button>
                    </td>
                </tr>
                `)
            })
 
            // 添加导tbody里
            $('tbody').empty().html(arr.join(''))
        });
    }
 
 
    let index = ''
    // 添加分类
    $("#add").on("click", function () {
        index = layer.open({
            title: '添加文章分类',
            type: 1,
            skin: 'layui-layer-lan',
            area: ['500px', '250px']
            , content: `
            <form id="formData" class="layui-form" action="">
                <!-- 分类名称 -->
                <div class="layui-form-item">
                    <label class="layui-form-label">分类名称</label>
                    <div class="layui-input-block">
                        <input type="text" name="name" required lay-verify="required" placeholder="请输入分类名称" autocomplete="off"
                            class="layui-input">
                    </div>
                </div>
                <!-- 分类别名 -->
                <div class="layui-form-item">
                    <label class="layui-form-label">分类别名</label>
                    <div class="layui-input-block">
                        <input type="text" name="alias" required lay-verify="required" placeholder="请输入分类别名" autocomplete="off"
                            class="layui-input">
                    </div>
                </div>
                <!-- 按钮 -->
                <div class="layui-form-item">
                    <div class="layui-input-block">
                        <button class="layui-btn" lay-submit lay-filter="formDemo">确认添加</button>
                        <button type="reset" class="layui-btn layui-btn-primary">重置</button>
                    </div>
                </div>
            </form>
            `
        });
    })
 
    // 点击确认添加 -- 事件委托
    $('body').on('submit', '#formData', function (e) {
        // 阻止表单默认提交
        e.preventDefault()
        axios({
            url: '/my/article/addcates',
            method: 'POST',
            data: $(this).serialize()
        }).then(res => {
            //成功回调
            // console.log(res)
            if (res.data.status != 0) {
                return layer.msg(res.data.message)
            }
            // 成功
            layer.msg(res.data.message)
            getData()
            // 关闭弹出层
            layer.close(index);
        });
    })
 
    // 删除 -- 事件委托
    $('tbody').on("click", '#del', function () {
        //获取id
        let id = $(this).attr('data-id')
 
        layer.confirm('确认删除吗?', { icon: 3, title: '提示' }, function (index) {
            //do something
            axios({
                url: '/my/article/deletecate/' + id,
                method: 'get',
            }).then(res => {
                //成功回调
                console.log(res)
                if (res.data.status != 0) {
                    return layer.msg(res.data.message)
                }
                // 成功
                layer.msg(res.data.message)
                getData()
            });
            layer.close(index);
        });
 
    })
 
    // 修改
    $('tbody').on("click", '#xiugai', function () {
        let id = $(this).attr('data-id')
        index = layer.open({
            title: '添加文章分类',
            type: 1,
            skin: 'layui-layer-lan',
            area: ['500px', '250px']
            , content: `
            <form id="Formdata" class="layui-form" action="" lay-filter="Form">
                <!-- 分类名称 -->
                <div class="layui-form-item">
                <input type="hidden" name="Id">
                    <label class="layui-form-label">分类名称</label>
                    <div class="layui-input-block">
                        <input type="text" name="name" required lay-verify="required" placeholder="请输入分类名称" autocomplete="off"
                            class="layui-input">
                    </div>
                </div>
                <!-- 分类别名 -->
                <div class="layui-form-item">
                    <label class="layui-form-label">分类别名</label>
                    <div class="layui-input-block">
                        <input type="text" name="alias" required lay-verify="required" placeholder="请输入分类别名" autocomplete="off"
                            class="layui-input">
                    </div>
                </div>
                <!-- 按钮 -->
                <div class="layui-form-item">
                    <div class="layui-input-block">
                        <button class="layui-btn" lay-submit lay-filter="formDemo">确认修改</button>
                    </div>
                </div>
            </form>
            `
        });
        axios({
            url: '/my/article/cates/' + id,
            method: 'get',
        }).then(res => {
            //成功回调
            // console.log(res)
            if (res.data.status != 0) {
                return layer.msg(res.data.message)
            }
            // 成功
            form.val('Form', res.data.data);
        });
    })
 
    //点击确认修改
    $('body').on('submit', '#Formdata', function (e) {
        e.preventDefault()
        axios({
            url: '/my/article/updatecate',
            method: 'POST',
            data: $(this).serialize()
        }).then(res => {
            //成功回调
            console.log(res)
            if (res.data.status != 0) {
                return layer.msg(res.data.message)
            }
            // 成功
            layer.msg(res.data.message)
            getData()
            // 关闭弹出层
            layer.close(index);
        });
    })
        
})

五、文章管理--发表文章

1、HTML、CSS

<!DOCTYPE html>
<html lang="en">
 
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="/assets/lib/layui/css/layui.css">
    <link rel="stylesheet" href="/assets/lib/cropper/cropper.css" />
    <link rel="stylesheet" href="/assets/css/article/article.data.css">
</head>
 
<body>
    <div class="layui-card">
        <div class="layui-card-header">写文章</div>
        <div class="layui-card-body">
            <form class="layui-form" action="">
                <!-- 文章标题 -->
                <div class="layui-form-item">
                    <label class="layui-form-label">文章标题</label>
                    <div class="layui-input-block">
                        <input type="text" name="title" required lay-verify="required" placeholder="请输入文章标题"
                            autocomplete="off" class="layui-input">
                    </div>
                </div>
                <!-- 文章类别 -->
                <div class="layui-form-item">
                    <label class="layui-form-label">文章类别</label>
                    <div class="layui-input-block">
                        <select name="cate_id" lay-verify="required">
                            <option value=""></option>
                            <!-- <option value="0">北京</option> -->
                        </select>
                    </div>
                </div>
                <!-- 文章内容 -->
                <div class="layui-form-item">
                    <!-- 左侧的 label -->
                    <label class="layui-form-label">文章内容</label>
                    <!-- 为富文本编辑器外部的容器设置高度 -->
                    <div class="layui-input-block" style="height: 400px;">
                        <!-- 重要:将来这个 textarea 会被初始化为富文本编辑器 -->
                        <textarea name="content"></textarea>
                    </div>
                </div>
                <!-- 文章封面 -->
                <div class="layui-form-item">
                    <!-- 左侧的 label -->
                    <label class="layui-form-label">文章封面</label>
                    <!-- 选择封面区域 -->
                    <div class="layui-input-block cover-box">
                        <!-- 左侧裁剪区域 -->
                        <div class="cover-left">
                            <img id="image" src="/assets/images/sample2.jpg" alt="" />
                        </div>
                        <!-- 右侧预览区域和选择封面区域 -->
                        <div class="cover-right">
                            <!-- 预览的区域 -->
                            <div class="img-preview"></div>
                            <!-- 选择封面按钮 -->
                            <input id="File" type="file" style="display: none;">
                            <button id="xuanze" type="button" class="layui-btn layui-btn-danger">选择封面</button>
                        </div>
                    </div>
                </div>
                <!-- 按钮 -->
                <div class="layui-form-item">
                    <div class="layui-input-block">
                        <button id="fabu" class="layui-btn" lay-submit lay-filter="formDemo">发布</button>
                        <button id="caogao" class="layui-btn layui-btn-primary">存为草稿</button>
                    </div>
                </div>
            </form>
        </div>
    </div>
 
 
    <script src="/assets/lib/layui/layui.all.js"></script>
    <script src="/assets/lib/jquery.js"></script>
    <script src="/assets/lib/axios.js"></script>
    <script src="/assets/js/commom.js"></script>
    <!-- 富文本 -->
    <script src="/assets/lib/tinymce/tinymce.min.js"></script>
    <script src="/assets/lib/tinymce/tinymce_setup.js"></script>
    <script src="/assets/lib/cropper/Cropper.js"></script>
    <script src="/assets/lib/cropper/jquery-cropper.js"></script>
    <script src="/assets/js/article/article.data.js"></script>
</body>
 
</html>
body {
    background-color: #f2f2f2;
    padding: 15px;
}
 
/* 封面容器的样式 */
.cover-box {
    display: flex;
}
 
/* 左侧裁剪区域的样式 */
.cover-left {
    width: 400px;
    height: 280px;
    overflow: hidden;
    margin-right: 20px;
}
 
/* 右侧盒子的样式 */
.cover-right {
    display: flex;
    flex-direction: column;
    align-items: center;
}
 
/* 预览区域的样式 */
.img-preview {
    width: 200px;
    height: 140px;
    background-color: #ccc;
    margin-bottom: 20px;
    overflow: hidden;
}

2、JS

$(function () {
    let form = layui.form
    // 渲染用户信息
    getData()
    function getData() {
        axios({
            url: '/my/article/cates',
            method: 'GET',
        }).then(res => {
            //成功回调
            // console.log(res)
            if (res.data.status != 0) {
                return layer.msg(res.data.message)
            }
            // 成功
            let arr = []
            res.data.data.forEach(value => {
                arr.push(`<option value="${value.Id}">${value.name}</option>`)
            })
            // 添加到页面
            $('select').empty().html(arr.join(''))
            // 更新渲染
            form.render('select'); //更新全部
        });
    }
 
    // 初始化富文本编辑器
    initEditor()
 
    // 1. 初始化图片裁剪器
    var $image = $('#image')
 
    // 2. 裁剪选项
    var options = {
        aspectRatio: 400 / 280,
        preview: '.img-preview'
    }
 
    // 3. 初始化裁剪区域
    $image.cropper(options)
 
    // 设置设置状态
    let state = ''
    $("#fabu").on("click", function () {
        state = '已发布'
    })
    $("#caogao").on("click", function () {
        state = '存为草稿'
    })
    // 选择选择封面触发file文件选择
    $("#xuanze").on("click", function () {
        $("#File").click()
    })
 
    // file  change事件
    $("#File").on("change", function (e) {
        let file = e.target.files[0]
        // 对应一个URL地址
        let newImgURL = URL.createObjectURL(file)
        $image
            .cropper('destroy')      // 销毁旧的裁剪区域
            .attr('src', newImgURL)  // 重新设置图片路径
            .cropper(options)        // 重新初始化裁剪区域
    })
 
    // 发布内容
    $('form').on("submit", function (e) {
        e.preventDefault()
        // 创建FormDaat
        let fd = new FormData(this)
        fd.append('state', state)
        console.log(...fd);
        $image
            .cropper('getCroppedCanvas', { // 创建一个 Canvas 画布
                width: 400,
                height: 280
            })
            .toBlob(function (blob) {       // 将 Canvas 画布上的内容,转化为文件对象
                // 得到文件对象后,进行后续的操作
                fd.append('cover_img', blob)
                // 发送ajax
                axios({
                    url: '/my/article/add',
                    method: 'POST',
                    data: fd
                }).then(res => {
                    //成功回调
                    console.log(res)
                    if (res.data.status != 0) {
                        return layer.msg(res.data.message)
                    }
                    // 成功
                    if (state == '已发布') {
                        layer.msg('发布成功')
                    } else if (state == '存为草稿') {
                        layer.msg('已存为草稿')
                    }
                    // 跳转到文章列表页,触发点击事件
                    setTimeout(function () {
                        window.parent.document.querySelector("#list").click()
                    }, 1000)
                });
            });
    })
 
 
})

六、文章管理--文章列表

 1、HTML、CSS

<!DOCTYPE html>
<html lang="en">
 
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="/assets/lib/layui/css/layui.css">
    <link rel="stylesheet" href="/assets/css/article/article.list.css">
</head>
 
<body>
    <div class="layui-card">
        <div class="layui-card-header">文章列表</div>
        <div class="layui-card-body">
            <form class="layui-form layui-form-pane" action="">
                <!-- 分类 -->
                <div class="layui-form-item layui-inline" pane>
                    <label class="layui-form-label">分类</label>
                    <div class="layui-input-block">
                        <select name="name" lay-verify="required">
                            <option value=""></option>
                        </select>
                    </div>
                </div>
                <!-- 状态 -->
                <div class="layui-form-item layui-inline" pane>
                    <label class="layui-form-label">状态</label>
                    <div class="layui-input-block">
                        <select name="state" lay-verify="required">
                            <option value="">请选择状态</option>
                            <option value="已发布">已发布</option>
                            <option value="存为草稿">存为草稿</option>
                        </select>
                    </div>
                </div>
                <!-- 按钮 -->
                <div class="layui-form-item layui-inline">
                    <button id="screen" class="layui-btn" lay-submit lay-filter="formDemo">筛选</button>
                    <button style="margin-left: 0px;" type="reset" class="layui-btn layui-btn-primary">重置</button>
                </div>
            </form>
 
            <!-- 表格 -->
            <table class="layui-table">
                <colgroup>
                    <col>
                    <col width="200">
                    <col width="200">
                    <col width="200">
                    <col width="200">
                </colgroup>
                <thead>
                    <tr>
                        <th>文章标题</th>
                        <th>分类</th>
                        <th>发表时间</th>
                        <th>状态</th>
                        <th>操作</th>
                    </tr>
                </thead>
                <tbody>
                    <!-- <tr>
                        <td>贤心</td>
                        <td>2016-11-29</td>
                        <td>人生就像是一场修行</td>
                        <td>人生就像是一场修行</td>
                        <td>
                            <button class="layui-btn layui-btn-danger  layui-btn-xs" lay-submit
                                lay-filter="formDemo">删除</button>
                            <button type="reset" class="layui-btn layui-btn-xs">修改</button>
                        </td>
                    </tr> -->
 
                </tbody>
            </table>
 
 
 
            <!-- 分页 -->
            <div id="test1"></div>
        </div>
    </div>
 
 
    <script src="/assets/lib/layui/layui.all.js"></script>
    <script src="/assets/lib/jquery.js"></script>
    <script src="/assets/lib/axios.js"></script>
    <script src="/assets/js/commom.js"></script>
    <script src="/assets/js/article/article.list.js"></script>
</body>
 
</html>
body {
    background-color: #f2f2f2;
    padding: 15px;
}

2、js

$(function () {
    let form = layui.form
 
 
 
    let p = {
        pagenum: 1,    // 是	int	页码值
        pagesize: 3,	// 是	int	每页显示多少条数据
        cate_id: '',	    // 否	string	文章分类的 Id
        state: ''	    // 否	string	文章的状态,可选值有:已发布、草稿
    }
 
    // 渲染表格
    getData()
    function getData() {
        axios({
            url: '/my/article/list',
            method: 'get',
            params: p
        }).then(res => {
            //成功回调
            // console.log(res)
            if (res.data.status != 0) {
                return layui.msg(res.data.message)
            }
            // 成功
            let arr = []
            res.data.data.forEach(value => {
                arr.push(`
                <tr>
                    <td>${value.title}</td>
                    <td>${value.cate_name}</td>
                    <td>${value.pub_date}</td>
                    <td>${value.state}</td>
                    <td>
                        <button id="Del" data-id="${value.Id}" class="layui-btn layui-btn-danger  layui-btn-xs" lay-submit
                            lay-filter="formDemo">删除</button>
                    </td>
                </tr>
                `)
            })
            $('tbody').empty().html(arr.join(''))
            apple(res.data.total)
        });
    }
 
    // 渲染分类
    classify()
    function classify() {
        axios({
            url: '/my/article/cates',
            method: 'GET',
 
        }).then(res => {
            //成功回调
            // console.log(res)
            if (res.data.status != 0) {
                return layer.msg(res.data.message)
            }
            // 成功
            let arr = ['<option value="">请选择分类</option>']
            res.data.data.forEach(value => {
                arr.push(`<option value="${value.Id}">${value.name}</option>`)
            })
            $("[name=name]").empty().html(arr.join(''))
            form.render(); //更新全部
        });
    }
    // 筛选
    $("#screen").on("click", function (e) {
        e.preventDefault()
        p.cate_id = $("[name=name]").val()
        p.state = $("[name=state]").val()
        getData()
    })
 
 
 
 
    // 分页
    function apple(total) {
        var laypage = layui.laypage;
 
        //执行一个laypage实例
        laypage.render({
            elem: 'test1' //注意,这里的 test1 是 ID,不用加 # 号
            , count: total, //数据总数,从服务端得到
            layout: ['count', 'limit', 'prev', 'page', 'next', 'skip'],
            curr: p.pagenum, // 起始页
            limit: p.pagesize,
            limits: [2, 3, 4, 5, 6],
            jump: function (obj, first) {
                //obj包含了当前分页的所有参数,比如:
                // console.log(obj); //得到当前页,以便向服务端请求对应页的数据。
                // console.log(first); //得到每页显示的条数
 
                //首次不执行
                if (!first) {
                    //do something
                    p.pagenum = obj.curr
                    p.pagesize = obj.limit
                    //更新页面
                    getData()
                }
            }
        });
    }
 
 
    // 删除按钮
    $("tbody").on("click", '#Del', function (e) {
        e.preventDefault()
        // 获取ID
        let id = $(this).attr('data-id')
        layer.confirm('确认删除吗?', { icon: 3, title: '提示' }, function (index) {
            //do something
            axios({
                url: '/my/article/delete/' + id,
                method: 'get',
            }).then(res => {
                //成功回调
                // console.log(res)
                if (res.data.status != 0) {
                    return layer.msg(res.data.message)
                }
                // 成功
                layer.msg(res.data.message)
                getData()
            });
            layer.close(index);
        });
    })
 
 
 
})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

J小C=

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值