后台管理系统 Html Bootstrap

Bootstrap4实现增删改查

BootStrap4.3.1 + SpringBoot2.1.5

一张图
在这里插入图片描述

1 引入JS

<meta name="viewpoint" content="width=device-width,initial-scale=1" />
<script type="text/javascript" src="js/jquery-3.4.1.min.js"></script>
<script src="https://cdn.bootcss.com/popper.js/1.14.7/umd/popper.min.js"></script>
<script type="text/javascript" src="bootstrap/js/bootstrap.min.js"></script>
<link rel="stylesheet" type="text/css" href="bootstrap/css/bootstrap.min.css" />

设置设备大小viewport

2 基础排版样式

2.1 容器和网格系统

• container container-fluid //容器类前者固定宽度后者100%宽度
文字排版
• display //标题类 1-4
• small //小文本
<abbr> //文本底部下面一条虚线边框

2.2 栅格布局系统

栅格嵌套*
响应式布局
显示和隐藏样式

3 导航栏

• navbar、navbar-expand-sm、bg-light、bg-dark
• ul:navbar-nav li:nav-item

<div class="container-fluid">
	<nav class="navbar navbar-expand-md bg-dark">
		<div class="navbar-header">
		<!-- <img src="/img/logo.png" class="img-rounded"> -->
			<h2><a class="navbar-brand" href="../index.html">LOGO</a></h2>
		</div>
	<ul class="nav navbar-nav">
		<li class="nav-item active" id="nav1Page"><a class="nav-link" href="#">主页</a></li>
		<li class="nav-item" id="nav2Page"><a class="nav-link" href="#">基础管理</a></li>
		<li class="nav-item" id="nav3Page"><a class="nav-link" href="#">业务管理</a></li>
		<li class="nav-item" id="nav4Page"><a class="nav-link" href="#">消息管理</a></li>
		<li class="nav-item" id="nav5Page"><a class="nav-link" href="#">系统管理</a></li>
	</ul>
</nav>


4 下拉菜单

• dropdown //下拉菜单默认
• button设置dropdown-toggle data-toggle=“dropdown” //下拉button
• dropdown-menu //下拉菜单
• a设置样式dropdown-item

<div class="dropdown">
	<a class="dropdown-toggle" data-toggle="dropdown" href="#">
		<span class="glyphicon glyphicon-user"></span>admin</a>
		<ul class="dropdown-menu">
			<li class="dropdown-item"><a href="#">个人中心</a></li>
			<li class="dropdown-item"><a href="#">设置</a></li>
			<li class="dropdown-item"><a href="#">关于</a></li>
			<li class="dropdown-item"><a href="#">退出</a></li>
		</ul>
	</div>
	

5 列表组(含折叠)

• list-group //列表组
• list-group-item //列表li
• list-group-item-action

collapse类用于指定一个折叠元素,点击后控制内容的隐藏与显示,需要在元素上添加 data-toggle=“collapse” 属性。data-target="#id" 属性是对应折叠的内容。

<!-- 左侧栏 List Group -->
<div class="row">
	<div class="col-md-2">
		<ul class="list-group">
			<li class="list-group-item"><a data-toggle="collapse"
				data-target="#collapse1" href="#">基础管理</a>
				<ul class="collapse show" id="collapse1">
					<li>
						<a class="list-group-item-action" href="#">部门管理 
						<span id="totalCount" class="badge badge-pill badge-secondary">0</span>
						</a>
					</li>
					<li><a href="#">管理2</a></li>
					<li><a href="#">管理3</a></li>
					<li><a href="#">管理4</a></li>
				</ul></li>
			<li class="list-group-item"><a data-toggle="collapse"
				data-target="#collapse2" href="#">权限管理</a>
				<ul class="collapse" id="collapse2">
					<li><a href="#">管理1</a></li>
					<li><a href="#">管理2</a></li>
					<li><a href="#">管理3</a></li>
					<li><a href="#">管理4</a></li>
				</ul></li>
		</ul>
	</div>
</div>

5.1 bootstrap-treeview

bootstrap-treeview是一款效果非常酷的基于bootstrap的jQuery多级列表树插件。该jQuery插件基于Twitter Bootstrap,以简单和优雅的方式来显示一些继承树结构,如视图树、列表树等等。

bootstrap-treeview
https://www.cnblogs.com/tangzeqi/p/8021637.html

5.2 左侧菜单

左侧菜单栏折叠展开效果
https://blog.csdn.net/caicai1171523597/article/details/88057386

6 表单样式

• form-group 可用于表单布局,对form中的div添加该样式进行布局,同时配合form的class进行布局。
• input-group 输入框组,是对表单的扩展,可在form的div中方便的组合span和input等
• label for email
• input class form-control

6.1 input-group

关键字检索

<!-- 关键字检索 -->
<div class="input-group justify-content-end">
	<input type="text" class="form-control col-md-2" placeholder="输入关键字"/>
		<span class="input-group-btn">
			<button type="submit" class="btn btn-outline-primary">搜索</button>
		</span>
</div>

6.2 form-group

右侧栏:查询条件+表格+分页

<!-- 右侧栏:查询条件 -->
<div class="col-md-10">
	<div class="row form-inline form-group" id="manage_dept_query">
	<div class="form-group col-md-3">
		<label for="dept_id">部门ID</label>
		<input type="text" id="dept_id" class="form-control"/>
	</div>
		<div class="form-group col-md-3">
			<label for="dept_name">部门名称</label>
			<input type="text" id="dept_name" class="form-control" value="" placeholder="请输入" />
		</div>
		<div class="form-group col-md-2">
			<label for="dept_level">部门级别</label>
			<select id="dept_level" class="form-control">
				<option value="1">请选择</option>
				<option value="1">1</option>
				<option value="2">2</option>
				<option value="3">3</option>
			</select>
		</div>
		
		<!-- 查询按钮 -->
		<span class="col-md-1"><button class="btn btn-outline-primary" type="button" id="manage_query_button" onclick="queryDepts()">查询</button></span>
		<span class="col-md-1"><button class="btn btn-outline-primary" type="button" id="manage_add_button" onclick="dept_add_model()">新增</button></span>
</div>

7 表格样式

<table> 标签样式有以下几种:
.table 表格基本样式
.table-striped 在 <tbody> 内添加斑马线形式的条纹 ( IE8 不支持)
.table-bordered 为所有表格的单元格添加边框
.table-hover 在 <tbody> 内的任一行启用鼠标悬停状态
.table-condensed 让表格更加紧凑
.table-responsive //响应式表格,可以让表格水平滚动以适应小型设备(小于 768px)。当在大于 768px 宽的大型设备上查看时,您将看不到任何的差别。
.table-dark //黑色背景表格

7.2 table

表格固定

<!-- 列表 -->
<div id="mamage_list" style="height: 550px; overflow: auto;">
	<table class="table table-bordered table-hover text-center" id="manage_list_table">
		<thead>
			<tr>
				<th>全选<input type='checkbox' id="cb0"/></th>
				<th>序号</th>
				<th>部门编号</th>
				<th>部门名称</th>
				<th>部门级别</th>
				<th>操作</th>
			</tr>
		</thead>
		<tbody></tbody>
	</table>
</div>

7.3 分页

• pagination //ul元素上添加
• page-item //在li元素上添加page-item
• page-link

分页静态界面

<!-- 分页查询 -->
	<div class="input-group justify-content-end">
			<ul class="pagination pagination-sm">
				<li class="page-item"><a class="page-link" href="#">首页</a></li>
				<li class="page-item disabled"><a class="page-link" href="#">上一页</a></li>
				<li class="page-item active"><a class="page-link" href="#">1</a></li>
				<li class="page-item"><a class="page-link" href="#">2</a></li>
				<li class="page-item"><a class="page-link" href="#">3</a></li>
				<li class="page-item"><a class="page-link" href="#">下一页</a></li>
				<li class="page-item"><a class="page-link" href="#">尾页</a></li>
			</ul>
			
		<!-- Query Result -->
		<span class="col-md-2"><label>共50条记录 第1/3页 </label></span>
		<div class="input-group col-md-2">
		<input type="text" id="table_page" class="form-control text-center col-md-4" value="1" placeholder="1"/>
		<span class="input-group-addon"><button class="btn btn-outline-primary">GO</button></span>
		</div>

分页动态界面

在这里插入图片描述

<body>
	<!-- 分页查询 -->
	<div class="input-group justify-content-end" id="paginationDiv">
		<ul class="pagination pagination-sm" id="pagination">
		</ul>
		<!-- Query Result -->
		<span class="col-md-2" id="pageInfo"><label>共0条记录&nbsp;&nbsp;第1/1页</label></span>
		<span class="input-group col-md-2">
			<input type="text" id="pageInput" class="form-control text-center col-md-4"	placeholder="1" />
			<span class="input-group-addon">
			<button class="btn btn-outline-primary" onclick="queryDepts()">GO</button></span>
		</span>
	</div>
</body>

脚本


<script type="text/javascript">

/* 分页查询JS. */
var pagination; //分页控件id
var homePage=1; //首页
var lastPage=0; //上一页(初始值为0)
var firstPage=1; //第一页(恒值1)
var pageNo=1; //页码(初始值为1)
var nextPage=0; //下一页(初始值为0)
var endPage=0; //末页(初始值为0)
var pageSize=20; //单页数量
var pageCount=1; //总页数(初始值为1)
var totalCount=0; //总数据量
// currentPage=pageNo; //当前页数(暂未使用)
// pageIndex=pageNo*pageSize; //起始页下标(放在后台计算)
// pageGoInput //页面跳转输入框
// pageGoBtn //页面跳转按钮

$(function(){
	pagination = $("#pagination");
	initPagination(200);
})

function initPagination(total)
{
/*
 * 	totalCount = total == undefined ? 0 : total;
	if(totalCount == 0)
	{
		//$('#pagination').hide();
		return;
	}
 */

	/*
	 * 分页初始化计算方式
	 * homePage=1
	 * lastPage==pageNo ? pageNo : pageNo-1
	 * firstPage=1
	 * nextPage==pageNo ? pageNo : pageNo+1
	 * 如果firstPage=pageNo=endPage
	 */
	pageCount = Math.ceil(totalCount/pageSize);
	pagination.html('');
	pagination.append("<li class='page-item' id='homePage' pageNo='1'><a class='page-link' href='#'>首页</a></li>");
	pagination.append("<li class='page-item' id='lastPage' pageNo='1'><a class='page-link' href='#'>上一页</a></li>");
	//page 1 is default active
	pagination.append("<li class='page-item active' id='firstPage' pageNo='1'><a class='page-link' href='#'>1</a></li>");
	if(pageCount > 1)
	{
		for(var i=2; i<=pageCount; i++)
		{
			pagination.append("<li class='page-item' pageNo='"+i+"'><a class='page-link' href='#'>"+i+"</a></li>");
		}
		pagination.append("<li class='page-item' id='nextPage' pageNo='"+ (pageNo+1) +"'><a class='page-link' href='#'>下一页</a></li>");
	}else
	{
		pagination.append("<li class='page-item disabled' id='nextPage' pageNo='1'><a class='page-link' href='#'>下一页</a></li>");
		//pageNo='1' 或者 pageNo='"+pageCount+"' 或者 pageNo='"+pageNo+"'
		//pagination.append("<li class='page-item disabled' id='nextPage' pageNo='"+pageNo+"'><a class='page-link' href='#'>下一页</a></li>");
	}
	endPage = pageCount;
	pagination.append("<li class='page-item' id='endPage' pageNo='"+ pageCount +"'><a class='page-link' href='#'>末页</a></li>");
	//pageInfo
	$("#pageInfo").html("<label>共" + totalCount + "条记录&nbsp;&nbsp;第"+pageNo+"/"+pageCount+"页 </label>");
	
	//get pageNo
	$("#pagination li").click(function()
	{
		pageination($(this));
	});

	//get next page btn
	$("#nextPage").click(function() {
		nextPageClick($(this));
	});
}

function nextPageClick(page) {
//	$("#pagination li").removeClass("active");
// //遍历测试
//	$("#pagination li[pageNo]").each(function(i){
//		   var sortid=$(this).attr("pageNo");
//		   console.log(sortid)
//		});
}

function pageination(page)
{
	//获取当前页数
	pageNo = Number(page.attr("pageNo"));
	lastPage = pageNo-1;
	nextPage = pageNo+1;
	lastPage = lastPage <= 1 ? 1 : lastPage;
	nextPage = nextPage >= pageCount ? pageCount : nextPage;
	var newLastPage = $("#lastPage").attr("pageNo",lastPage);
	var newNextPage = $("#nextPage").attr("pageNo",nextPage);
	//设置样式
	$("#pagination li").removeClass("active");
	//点击nextPage 则去掉上一页样式,设置新的pageNo样式为active
	if(page.attr("id")=="nextPage" || page.attr("id")=="lastPage")
	{
		//pageNo已是最新
		$("#pagination li[pageNo="+pageNo+"]").addClass("active");
		
//		//遍历测试
//		$.each($("#pagination li[pageNo]"),function(i){
//			if($(this).attr("pageNo")==nextPage)
//			{
//				alert($(this).attr("pageNo"))
//				//console.log($(this).attr("pageNo"));
//			}
//		});
	}
	else {
		if(!page.hasClass("active"))
		{
			page.addClass("active");
		}
	}
	alert("pageId="+page.attr("id")+", pageNo="+pageNo+", lastPage="+lastPage+", nextPage="+nextPage)
	console.log("pageId="+page.attr("id")+", pageNo="+pageNo+", lastPage="+lastPage+", nextPage="+nextPage)
}
</script>


8 模态窗口

新增
在这里插入图片描述

<!-- 新增-->
<span class="col-md-1"><button class="btn btn-outline-primary" type="button" id="manage_add_button" onclick="dept_add_model()">新增</button></span>
<!-- 新增界面-->
<div class="modal fade" id="dept_add_modal" tabindex="-1" role="dialog" data-backdrop="static" data-keyboard="false" aria-labelleyby="myModalLabel">
	<div class="modal-dialog modal-lg">
		<div class="modal-content">
			<div class="modal-header">
				<h4 class="modal-title" id="myModalLabel">新增</h4>
				<button type="button" class="btn-danger close" id="btn_close" aria-label="close" onclick="modal_hide()">
					<span aria-hidden="true">&times;</span>
				</button>
			</div>
			<div class="modal-body">
				<form id="dept_add_form">
					<div class="form-group">
						<label class="control-label" for="dept_id">部门ID</label>
						<input type="text" id="dept_id" class="form-control">
					</div>
					<div class="form-group">
						<label>部门名称</label>
						<input type="text" id="dept_name" class="form-control">
					</div>
					<div class="form-group">
						<label for="dept_level">部门级别</label>
						<select id="dept_level" class="form-control">
							<option value="0">请选择</option>
							<option value="1">1</option>
							<option value="2">2</option>
							<option value="3">3</option>
						</select>
					</div>
				</form>
			</div>
			<div class="modal-footer">
				<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
				<button type="submit" class="btn btn-primary">保存</button>
			</div>
		</div>
	</div></div>
 

data-backdrop=“static” data-keyboard=“false” //禁止模态框的关闭按钮和点击空白处关闭模态框

aria-label属性用来给当前元素加上的标签描述,接受字符串作为参数。是用不可视的方式给元素加label(如果被描述元素存在真实的描述元素,可使用 aria-labelledby 属性作为来绑定描述元素和被描述元素来代替)。

8.2 模态窗口显示、隐藏

隐藏模态窗口对表单重置:
//input清空
$(“input”).val("");

//select重置
$("#selectId option:first").prop(“selected”, ‘selected’)

//注:$("#formId")[0].reset();
//因为reset方法是js的,在jquery中使用时要将jQuery对象转成js对象
.

//显示模态窗口
function dept_add_model() {
	$("#dept_add_model").modal();
}
//隐藏模态窗口
function modal_hide() {
	if (confirm("是否取消操作?"))
	{
		//隐藏模态窗口
		$("#dept_add_modal").modal('hide');
		//$("input").val("");
		$("#dept_add_form")[0].reset(); 
	} else {
		return false;
	}}

信息提示框

• alert-success //成功提示信息
• alert-dismissable class=“close” data-dismiss=“alert” //关闭提示框
&times; × 是 HTML 实体字符,来表示关闭操作

<div class="container">
	<div class="alert alert-success alert-dismissible fade show">
	<span><strong>信息:</strong>success</span>
	<button type="button" class="close" data-dismiss="alert">&times;</button>
	</div>
</div>

图片

• rounded //圆角效果
• rounded-circle //椭圆效果
• img-thumbnail //图片缩略图效果
• img-fluid //图片响应式效果

超大屏幕

• jumbotron // 屏幕
• jumbotron-fluid //没有圆角的全屏幕

按钮

• btn-primary //主要按钮
• btn-secondary //次要按钮
• btn-success //成功按钮
• btn-info //信息按钮
• btn-danger //危险
• btn-outline-primary //按钮边框
• btn-sm btn-lg //小大号按钮
• btn-block //块级按钮
• active //可用
• disabled //禁用

按钮组

• btn-group //按钮组
• btn-group-lg|sm|xs 控制按钮组大小
• btn-group-vertical 垂直按钮组

进度条

• progress //添加一个div
• progress-bar //在上面的div中添加一个progress-bar的div

卡片

• card、card-header、card-body、card-footer
• card-img-top //图片
• card-body、card-title、card-text //图片卡片
• card-img-overlay//设置图片为背景

提示框

• data-toggle=“tooltip” //创建提示框
• title=“我是提示内容!” //提示内容
• data-placement=“top” //指定提示框位置
$(document).ready(function(){ //初始化
$(’[data-toggle=“tooltip”]’).tooltip();
});

颜色

• text-muted 柔和
• text-primary 重要
• text-success 成功
• text-info 提示
• text-warning 警告
• text-danger 危险
• text-secondary 副标题
• text-dark 深灰色文字
• text-light 浅灰色
• text-white 白色

参考资料

Bootstrap4 中文文档
http://bs4.ntp.org.cn/examples.html

折叠导航栏
https://www.runoob.com/bootstrap4/bootstrap4-navbar.html

JQuery全局变量在函数中调用报错undefined
https://blog.csdn.net/qq_19636353/article/details/45244539

bootstrap-treeview
https://www.cnblogs.com/tangzeqi/p/8021637.html

其他

定义前端一些常用ID、方法


/* 查询. */
dept_id、dept_name、dept_level;//查询条件的属性id
$(#"query")、$(#"queryBtn")、$(#"queryDeptBtn") //查询按钮
queryDepts();、queryAll() //查询所有dept方法
queryDeptById(); //查询1个dept方法(通过id查询)
queryDeptList(); //查询列表方法
showDeptList(data)  //显示加载查询列表

/* 新增. */
$("#addDeptId")、$("#addDeptName")、$("#addDeptLevel"); //新增参数ID定义
$("#addBtn")、$("#addDeptBtn") //新增按钮id
$("#addModal")、$("#addDeptModal");showAddDeptModal() //新增界面模态窗口ID、方法
$("#addDeptForm") //新增表单id
$("#saveBtn")、$("#addSaveBtn") //保存按钮id
addSaveDept();//保存方法
addDepts();//批量新增方法

/* 修改. */
$("#editDeptId")、$("#editDeptName")、$("#editDeptLevel") //修改参数
$("#edit1")、$("#editBtn1")、$("#editDeptBtn1") //修改按钮id(含多个)
$("#editForm")、$("#editDeptForm") //修改表单id
$("#editModal")、$("#editDeptModal");showEditDeptModal() //修改界面模态窗口id、方法
$("#editSaveBtn") //修改保存按钮
editSaveDept() //修改保存调用方法
editDepts() //批量修改方法

/* 删除. */
$("#del1")、$("#delBtn1")、$("#delDeptBtn1") //删除按钮id(含多个)
deleteDept() //删除方法


/* 分页查询. */
var pagination; //分页控件id
var homePage=1; //首页
var lastPage=0; //上一页(初始值为0)
var firstPage=1; //第一页(恒值1)
var pageNo=1; //页码(初始值为1)
var nextPage=0; //下一页(初始值为0)
var endPage=0; //末页(初始值为0)
var pageSize=30; //单页数量(默认30条记录)
var pageCount=1; //总页数(初始值为1)
var totalCount=0; //总数据量
// currentPage=pageNo; //当前页数(放在后台计算)
// pageIndex=pageNo*pageSize; //起始页下标=pageNo-1(放在后台计算)
// pageInput //分页输入框
// pageSearch //分页搜索按钮

/* 导出. */
exportDeptBtn; //导出dept按钮id
exportDepts(); //导出方法


/* 公共模块. */
btn_close

  • 7
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值