使用 Vue + LayUI 做后台管理、RESTful 交互

使用 Vue + LayUI 做后台管理、RESTful 交互一、前言1、之前使用了React/Angular,使用起来显然是比jQuery好多了,但时隔半年,最近再次深入研究了vue,很惊喜。故以后选择MVC/MVVM框架的话,建议首选vue,主要是其代码结构,清晰简单。2、使用vue+layui了,但layui里边的layui.js模块vue.js冲突,因此放弃使用layui.js,导致很多高级…

大家好,又见面了,我是你们的朋友全栈君。

一、前言

1、之前使用了 React/Angular,使用起来显然是比 jQuery 好多了,但时隔半年,最近再次深入研究了 vue,很惊喜。

故以后选择 MVC/MVVM 框架的话,建议首选 vue,主要是其代码结构,清晰简单。
[增删改查] 使用 React + LayUI 做后台管理 CRUD 界面和 RESTful 交互

2、使用 vue + layui 了,但 layui 里边的 layui.js 模块 vue.js 冲突,
因此放弃使用 layui.js,导致很多高级功能用不了,如日期 laydate 模块,
只使用了 layui 的 css样式,这时显得 layui 鸡肋了好多。

故以后使用 UI 配合 vue 的话,建议选择 ElementUI/MintUI,毕竟是基于 vue 的,无缝对接。

二、功能演示

1、显示 index.html

这里写图片描述

2、添加 add.html

这里写图片描述

3、搜索 index.html

这里写图片描述

4、修改 update.html

这里写图片描述

5、删除 index.html

这里写图片描述

三、代码与结构

这里写图片描述
前端的代码已经放到 github 上了:https://github.com/larger5/CRUD_Vue_LayUI.git
后台完整的代码也已经放到 github 上了:https://github.com/larger5/springboot_Vue.git(ITAEM团队官网后台 v1.0)

1.index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ITAEM</title>
    <link href="lib/layui.css" type="text/css" rel="stylesheet">
    <script src="lib/vue-2.4.0.js" type="text/javascript"></script>
    <script src="lib/vue-resource-1.3.4.js"></script>
</head>
<body>
<div id="app" class="layui-container">

    <div className="layui-row layui-col-space2">
        <div class="layui-col-md1">
            <input type="text" v-model="searchId" required lay-verify="required" placeholder="id" class="layui-input" autocomplete="off"/>
        </div>
        <div class="layui-col-md1">
            <button id="btn2" class="layui-btn" @click.prevent="search()">搜索</button>
        </div>
    </div>

    <table class="layui-table">
        <colgroup>
            <col width="150">
            <col width="200">
            <col>
        </colgroup>
        <thead>
        <tr>
            <th>博客id</th>
            <th>标题</th>
            <th>文章链接</th>
            <th>作者</th>
            <th>是否展示</th>
            <th>修改</th>
            <th>删除</th>
        </tr>
        </thead>
        <tbody>
        <tr v-for="item in list" :key="item.id">
            <td>{
  
  {item.id}}</td>
            <td>{
  
  {item.title}}</td>
            <td>{
  
  {item.link}}</td>
            <td>{
  
  {item.author}}</td>
            <td>{
  
  {item.tag}}</td>
            <th>
                <a class="layui-btn layui-btn-normal" @click.prevent="upd(item.id)">修改</a>
            </th>
            <th>
                <button class="layui-btn layui-btn-danger" @click.prevent="del(item.id)">删除</button>
            </th>
        </tr>
        </tbody>
    </table>
    <a href="add.html" class="layui-btn layui-btn-warm">添加</a>
</div>
<script> // 如果我们通过全局配置了,请求的数据接口 根域名,则 ,在每次单独发起 http 请求的时候,请求的 url 路径,应该以相对路径开头,前面不能带 / ,否则 不会启用根路径做拼接; Vue.http.options.root = 'http://120.79.197.130:8080/'; // 全局启用 emulateJSON 选项:如果Web服务器无法处理编码为application/json的请求,你可以启用emulateJSON选项。 Vue.http.options.emulateJSON = true; var vm = new Vue({ 
     el: '#app', data: { 
     searchId: '',// 搜索用的 list: [] // 存放列表数据 }, created() { 
     // 当 vm 实例 的 data 和 methods 初始化完毕后,vm实例会自动执行created 这个生命周期函数 this.getAllList() }, methods: { 
     getAllList() { 
     // 由于已经导入了 Vue-resource这个包,所以 ,可以直接通过 this.$http 来发起数据请求 this.$http.get('getAllBlogs').then(result => { 
     // 注意: 通过 $http 获取到的数据,都在 result.body 中放着 var result = result.body if (result.code === 200) { 
     // 成功了 this.list = result.data console.log(result.data) } else { 
     // 失败了 alert('获取数据失败!') } }) }, del(id) { 
     this.$http.delete('deleteBlogById/' + id).then(result => { 
     if (result.body.code === 200) { 
     // 删除成功 this.getAllList() } else { 
     alert('删除失败!') } }) }, search() { 
     this.$http.get('getBlogById/'+this.searchId).then(result => { 
     var result = result.body if (result.code === 200) { 
     this.list=[] this.list.push(result.data) } else { 
     alert('查找失败!') } }) }, upd(updateId){ 
     window.location.href="http://localhost:63343/forVue/VueCRUD/update.html?#"+updateId } } }) </script>
</body>
</html>

2.add.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ITAEM</title>
    <link href="lib/layui.css" type="text/css" rel="stylesheet">
    <script src="lib/vue-2.4.0.js" type="text/javascript"></script>
    <script src="lib/vue-resource-1.3.4.js"></script>
</head>
<body>
<div id="app" class="layui-container">
    <form class="layui-form" action="">
        <div class="layui-form-item">
            <label class="layui-form-label">标题</label>
            <div class="layui-input-block">
                <input v-model="title" type="text" placeholder="title" class="layui-input" autocomplete="off">
            </div>
        </div>
        <div class="layui-form-item">
            <label class="layui-form-label">链接</label>
            <div class="layui-input-block">
                <input v-model="link" type="text" placeholder="https://www.baidu.com/" class="layui-input" autocomplete="off">
            </div>
        </div>
        <div class="layui-form-item">
            <label class="layui-form-label">作者</label>
            <div class="layui-input-block">
                <input v-model="author" type="text" placeholder="author" class="layui-input" autocomplete="off">
            </div>
        </div>
        <div class="layui-form-item">
            <label class="layui-form-label">是否展示</label>
            <div class="layui-input-block">
                <input v-model="tag" type="text" placeholder="0/1" class="layui-input" autocomplete="off">
            </div>
        </div>
        <div class="layui-form-item">
            <div class="layui-input-block">
                <button class="layui-btn" @click="add">添加</button>
            </div>
        </div>
    </form>
    <a href="index.html" class="layui-btn layui-btn-primary">返回</a>
</div>
<script> // 如果我们通过全局配置了,请求的数据接口 根域名,则 ,在每次单独发起 http 请求的时候,请求的 url 路径,应该以相对路径开头,前面不能带 / ,否则 不会启用根路径做拼接; Vue.http.options.root = 'http://120.79.197.130:8080/'; // 全局启用 emulateJSON 选项:如果Web服务器无法处理编码为application/json的请求,你可以启用emulateJSON选项。 Vue.http.options.emulateJSON = true; var vm = new Vue({ 
     el: '#app', data: { 
     title: '', link: '', author: '', tag: '' }, methods: { 
     add() { 
     this.$http.post('insertBlog', { 
     title: this.title, link: this.link, author: this.author, tag: this.tag, }) .then(result => { 
     var result = result.body if (result.code === 200) { 
     alert('添加成功!') } else { 
     // 失败了 alert('添加失败!') } }) } } }) </script>
</body>
</html>

3.update.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ITAEM</title>
    <link href="lib/layui.css" type="text/css" rel="stylesheet">
    <script src="lib/vue-2.4.0.js" type="text/javascript"></script>
    <script src="lib/vue-resource-1.3.4.js"></script>
</head>
<body>
<div id="app" class="layui-container">
    <form class="layui-form" action="">
        <div class="layui-form-item">
            <label class="layui-form-label">id</label>
            <div class="layui-input-block">
                <input v-model="id" type="text" placeholder="title" class="layui-input" autocomplete="off" disabled>
            </div>
        </div>
        <div class="layui-form-item">
            <label class="layui-form-label">标题</label>
            <div class="layui-input-block">
                <input v-model="title" type="text" placeholder="title" class="layui-input" autocomplete="off">
            </div>
        </div>
        <div class="layui-form-item">
            <label class="layui-form-label">链接</label>
            <div class="layui-input-block">
                <input v-model="link" type="text" placeholder="https://www.baidu.com/" class="layui-input" autocomplete="off">
            </div>
        </div>
        <div class="layui-form-item">
            <label class="layui-form-label">作者</label>
            <div class="layui-input-block">
                <input v-model="author" type="text" placeholder="author" class="layui-input" autocomplete="off">
            </div>
        </div>
        <div class="layui-form-item">
            <label class="layui-form-label">是否展示</label>
            <div class="layui-input-block">
                <input v-model="tag" type="text" placeholder="0/1" class="layui-input" autocomplete="off">
            </div>
        </div>
        <div class="layui-form-item">
            <div class="layui-input-block">
                <button class="layui-btn" @click="upd()">修改</button>
            </div>
        </div>
    </form>
    <a href="index.html" class="layui-btn layui-btn-primary">返回</a>

</div>
<script> // 如果我们通过全局配置了,请求的数据接口 根域名,则 ,在每次单独发起 http 请求的时候,请求的 url 路径,应该以相对路径开头,前面不能带 / ,否则 不会启用根路径做拼接; Vue.http.options.root = 'http://120.79.197.130:8080/'; // 全局启用 emulateJSON 选项:如果Web服务器无法处理编码为application/json的请求,你可以启用emulateJSON选项。 Vue.http.options.emulateJSON = true; var vm = new Vue({ 
     el: '#app', data: { 
     id: '', title: '', link: '', author: '', tag: '' }, created() { 
     // 当 vm 实例 的 data 和 methods 初始化完毕后,vm实例会自动执行created 这个生命周期函数 var userId = location.hash.substring(1) // 去掉 # this.$http.get('getBlogById/' + userId).then(result => { 
     // 注意: 通过 $http 获取到的数据,都在 result.body 中放着 var result = result.body if (result.code === 200) { 
     // 成功了 this.id = result.data.id this.title = result.data.title this.link = result.data.link this.author = result.data.author this.tag = result.data.tag } else { 
     // 失败了 alert('获取数据失败!') } }) }, methods: { 
     upd() { 
     // 注意方法名不能为 update this.$http.put('updateBlog', { 
     'id': this.id, 'title': this.title, 'link': this.link, 'author': this.author, 'tag': this.tag }) .then(result => { 
     var result = result.body if (result.code === 200) { 
     alert('修改成功!') } else { 
     // 失败了 alert('修改失败!') } }) } } }) </script>
</body>
</html>

四、小结

本文使用的框架 VueLayUI,以及推荐的 UI 框架 ElementUI(pc端)/MintUI(移动端),都是国产的,值得支持。

2018/8/25 更新

解决本文前言的痛点(没有使用 webpack,代码冗余)

[增删改查] 使用 Vue + ElementUI + Webpack + VueRouter 做后台管理、REST 交互

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/152819.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 以太坊硬件钱包原理_以太坊区块链怎么挣钱

    以太坊硬件钱包原理_以太坊区块链怎么挣钱这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好!这是你第一次使用Markdown编辑器所展示的欢迎页。如果你想学习如何使用Mar

    2022年8月30日
    2
  • KeyValuePair和Dictionary详解:「建议收藏」

    KeyValuePair和Dictionary详解:「建议收藏」1、KeyValuePaira、KeyValuePair是一个结构体(struct);b、KeyValuePair只包含一个Key、Value的键值对。2、Dictionarya、Dictionary可以简单的看作是KeyValuePair的集合;b、Dictionary可以包含多个Key、Value的键值对。usingSystem;usingSystem.Collections.Generic;namespaceConsoleTest

    2022年7月15日
    14
  • HttpServlet 实现 MySQL 数据库的插入操作

    HttpServlet 实现 MySQL 数据库的插入操作HttpServlet实现MySQL数据库的插入操作MySQL数据库及表的创建过程,请参考前文《MySQL数据库及数据表的创建》。本文重点来分步进行HttpServlet中,MySQL数据库的插入操作实现。实现步骤1.准备数据库的地址、用户名和密码publicstaticfinalStringurl=”jdbc:mysql://localhost:3306/budaye_test01″;publicstaticfinalStringname=”root

    2025年6月30日
    0
  • python 写的一款百度关键字url多线程采集

    python 写的一款百度关键字url多线程采集

    2021年9月7日
    54
  • kettle工具的作用和使用「建议收藏」

    kettle工具的作用和使用「建议收藏」最近公司一个同事离职,由我来接手他手上的一个项目,我负责开发后台,因为设计到脚本统计数据,需要做定时任务将日表数据统计到月表或者年表。于是该项目用到了Kettle,用了之后才发现,这是个好东西啊。一.了解Kettle工具Kettle最早是一个开源的ETL工具,以Java开发,支持跨平台运行,其特性包括:支持100%无编码、拖拽方式开发ETL数据管道;可对接包括传统数据库、文件、大数据平台、接口、流数据等数据源;支持ETL数据管道加入机器学习算法。二.Kettle下载和安装1.官网下载地址:https

    2022年10月16日
    0
  • k8s中存在很多为Evicted状态的Pod

    k8s中存在很多为Evicted状态的Pod背景在查看k8s的环境的时候,突然发现存在n多个pod状态为Evicted。差不多得有几百个。解决同事愉快的丢了个链接给我,让我自己看一波:Whatwillhappentoevictedpodsinkubernetes?查看了一下pod的信息。结果发现是磁盘满了。kubectldescribepod{pode_name}-n{namespace}但是得手动删除Evicted状态的podkubectlgetpods–all-namespaces-ojson

    2022年5月16日
    48

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号