【JeeSite】区域和菜单管理

/**
 * 区域Entity
 * @author ThinkGem
 * @version 2013-05-15
 */
public class Area extends TreeEntity<Area> {

    private static final long serialVersionUID = 1L;
//    private Area parent;    // 父级编号
//    private String parentIds; // 所有父级编号
    private String code;     // 区域编码
//    private String name;     // 区域名称
//    private Integer sort;        // 排序
    private String type;     // 区域类型(1:国家;2:省份、直辖市;3:地市;4:区县)
View Code

area 对象的属性 parent 和 parentIds 放在父类TreeEntity<T> 中,

/**
 * 数据Entity类
 * @author ThinkGem
 * @version 2014-05-16
 */
public abstract class TreeEntity<T> extends DataEntity<T> {

    private static final long serialVersionUID = 1L;

    protected T parent;    // 父级编号
    protected String parentIds; // 所有父级编号
    protected String name;     // 机构名称
    protected Integer sort;        // 排序
View Code

public class AreaService extends TreeService<AreaDao, Area>   在TreeService中设计了更新parentIds(注意要更新子节点的parentIds,不能光更新新增的节点的parentIds)。还放了一个预留接口preUpdateChild

/**
 * Copyright &copy; 2012-2016 <a href="https://github.com/thinkgem/jeesite">JeeSite</a> All rights reserved.
 */
package com.thinkgem.jeesite.common.service;

import java.util.List;

import org.springframework.transaction.annotation.Transactional;

import com.thinkgem.jeesite.common.persistence.TreeDao;
import com.thinkgem.jeesite.common.persistence.TreeEntity;
import com.thinkgem.jeesite.common.utils.Reflections;
import com.thinkgem.jeesite.common.utils.StringUtils;

/**
 * Service基类
 * @author ThinkGem
 * @version 2014-05-16
 */
@Transactional(readOnly = true)
public abstract class TreeService<D extends TreeDao<T>, T extends TreeEntity<T>> extends CrudService<D, T> {
    
    @Transactional(readOnly = false)
    public void save(T entity) {
        
        @SuppressWarnings("unchecked")
        Class<T> entityClass = Reflections.getClassGenricType(getClass(), 1);
        
        // 如果没有设置父节点,则代表为跟节点,有则获取父节点实体
        if (entity.getParent() == null || StringUtils.isBlank(entity.getParentId()) 
                || "0".equals(entity.getParentId())){
            entity.setParent(null);
        }else{
            entity.setParent(super.get(entity.getParentId()));
        }
        if (entity.getParent() == null){
            T parentEntity = null;
            try {
                parentEntity = entityClass.getConstructor(String.class).newInstance("0");
            } catch (Exception e) {
                throw new ServiceException(e);
            }
            entity.setParent(parentEntity);
            entity.getParent().setParentIds(StringUtils.EMPTY);
        }
        
        // 获取修改前的parentIds,用于更新子节点的parentIds
        String oldParentIds = entity.getParentIds(); 
        
        // 设置新的父节点串
        entity.setParentIds(entity.getParent().getParentIds()+entity.getParent().getId()+",");
        
        // 保存或更新实体
        super.save(entity);
        
        // 更新子节点 parentIds
        T o = null;
        try {
            o = entityClass.newInstance();
        } catch (Exception e) {
            throw new ServiceException(e);
        }
        o.setParentIds("%,"+entity.getId()+",%");
        List<T> list = dao.findByParentIdsLike(o);
        for (T e : list){
            if (e.getParentIds() != null && oldParentIds != null){
                e.setParentIds(e.getParentIds().replace(oldParentIds, entity.getParentIds()));
                preUpdateChild(entity, e);
                dao.updateParentIds(e);
            }
        }
        
    }
    
    /**
     * 预留接口,用户更新子节前调用
     * @param childEntity
     */
    protected void preUpdateChild(T entity, T childEntity) {
        
    }

}
View Code

treeTable 的使用:

<%@ page contentType="text/html;charset=UTF-8" %>
<%@ include file="/WEB-INF/views/include/taglib.jsp"%>
<html>
<head>
    <title>区域管理</title>
    <meta name="decorator" content="default"/>
    <%@include file="/WEB-INF/views/include/treetable.jsp" %>
    <script type="text/javascript">
        $(document).ready(function() {
            var tpl = $("#treeTableTpl").html().replace(/(//<!--)|(//-->)/g,"");
            var data = ${fns:toJson(list)}, rootId = "0";
            addRow("#treeTableList", tpl, data, rootId, true);
            $("#treeTable").treeTable({expandLevel : 5});
        });
        function addRow(list, tpl, data, pid, root){
            for (var i=0; i<data.length; i++){
                var row = data[i];
                if ((${fns:jsGetVal('row.parentId')}) == pid){
                    $(list).append(Mustache.render(tpl, {
                        dict: {
                            type: getDictLabel(${fns:toJson(fns:getDictList('sys_area_type'))}, row.type)
                        }, pid: (root?0:pid), row: row
                    }));
                    addRow(list, tpl, data, row.id);
                }
            }
        }
    </script>
</head>
<body>
    <ul class="nav nav-tabs">
        <li class="active"><a href="${ctx}/sys/area/">区域列表</a></li>
        <shiro:hasPermission name="sys:area:edit"><li><a href="${ctx}/sys/area/form">区域添加</a></li></shiro:hasPermission>
    </ul>
    <sys:message content="${message}"/>
    <table id="treeTable" class="table table-striped table-bordered table-condensed">
        <thead><tr><th>区域名称</th><th>区域编码</th><th>区域类型</th><th>备注</th><shiro:hasPermission name="sys:area:edit"><th>操作</th></shiro:hasPermission></tr></thead>
        <tbody id="treeTableList"></tbody>
    </table>
    <script type="text/template" id="treeTableTpl">
        <tr id="{{row.id}}" pId="{{pid}}">
            <td><a href="${ctx}/sys/area/form?id={{row.id}}">{{row.name}}</a></td>
            <td>{{row.code}}</td>
            <td>{{dict.type}}</td>
            <td>{{row.remarks}}</td>
            <shiro:hasPermission name="sys:area:edit"><td>
                <a href="${ctx}/sys/area/form?id={{row.id}}">修改</a>
                <a href="${ctx}/sys/area/delete?id={{row.id}}" onclick="return confirmx('要删除该区域及所有子区域项吗?', this.href)">删除</a>
                <a href="${ctx}/sys/area/form?parent.id={{row.id}}">添加下级区域</a> 
            </td></shiro:hasPermission>
        </tr>
    </script>
</body>
</html>
View Code

上面的比较复杂不容易理解可以参考下面的

<%@ page contentType="text/html;charset=UTF-8" %>
<%@ include file="/WEB-INF/views/include/taglib.jsp"%>
<html>
<head>
    <title>菜单管理</title>
    <meta name="decorator" content="default"/>
    <%@include file="/WEB-INF/views/include/treetable.jsp" %>
    <script type="text/javascript">
        $(document).ready(function() {
            $("#treeTable").treeTable({expandLevel : 3}).show();
        });
        function updateSort() {
            loading('正在提交,请稍等...');
            $("#listForm").attr("action", "${ctx}/sys/menu/updateSort");
            $("#listForm").submit();
        }
    </script>
</head>
<body>
    <ul class="nav nav-tabs">
        <li class="active"><a href="${ctx}/sys/menu/">菜单列表</a></li>
        <shiro:hasPermission name="sys:menu:edit"><li><a href="${ctx}/sys/menu/form">菜单添加</a></li></shiro:hasPermission>
    </ul>
    <sys:message content="${message}"/>
    <form id="listForm" method="post">
        <table id="treeTable" class="table table-striped table-bordered table-condensed hide">
            <thead><tr><th>名称</th><th>链接</th><th style="text-align:center;">排序</th><th>可见</th><th>权限标识</th><shiro:hasPermission name="sys:menu:edit"><th>操作</th></shiro:hasPermission></tr></thead>
            <tbody><c:forEach items="${list}" var="menu">
                <tr id="${menu.id}" pId="${menu.parent.id ne '1'?menu.parent.id:'0'}">
                    <td nowrap><i class="icon-${not empty menu.icon?menu.icon:' hide'}"></i><a href="${ctx}/sys/menu/form?id=${menu.id}">${menu.name}</a></td>
                    <td title="${menu.href}">${fns:abbr(menu.href,30)}</td>
                    <td style="text-align:center;">
                        <shiro:hasPermission name="sys:menu:edit">
                            <input type="hidden" name="ids" value="${menu.id}"/>
                            <input name="sorts" type="text" value="${menu.sort}" style="50px;margin:0;padding:0;text-align:center;">
                        </shiro:hasPermission><shiro:lacksPermission name="sys:menu:edit">
                            ${menu.sort}
                        </shiro:lacksPermission>
                    </td>
                    <td>${menu.isShow eq '1'?'显示':'隐藏'}</td>
                    <td title="${menu.permission}">${fns:abbr(menu.permission,30)}</td>
                    <shiro:hasPermission name="sys:menu:edit"><td nowrap>
                        <a href="${ctx}/sys/menu/form?id=${menu.id}">修改</a>
                        <a href="${ctx}/sys/menu/delete?id=${menu.id}" onclick="return confirmx('要删除该菜单及所有子菜单项吗?', this.href)">删除</a>
                        <a href="${ctx}/sys/menu/form?parent.id=${menu.id}">添加下级菜单</a> 
                    </td></shiro:hasPermission>
                </tr>
            </c:forEach></tbody>
        </table>
        <shiro:hasPermission name="sys:menu:edit"><div class="form-actions pagination-left">
            <input id="btnSubmit" class="btn btn-primary" type="button" value="保存排序" onclick="updateSort();"/>
        </div></shiro:hasPermission>
     </form>
</body>
</html>
View Code

排序的批量更新方法不错。

<input type="hidden" name="ids" value="${menu.id}"/>
 <input name="sorts" type="text" value="${menu.sort}" >

/**
     * 批量修改菜单排序
     */
    @RequiresPermissions("sys:menu:edit")
    @RequestMapping(value = "updateSort")
    public String updateSort(String[] ids, Integer[] sorts, RedirectAttributes redirectAttributes) {
        if(Global.isDemoMode()){
            addMessage(redirectAttributes, "演示模式,不允许操作!");
            return "redirect:" + adminPath + "/sys/menu/";
        }
        for (int i = 0; i < ids.length; i++) {
            Menu menu = new Menu(ids[i]);
            menu.setSort(sorts[i]);
            systemService.updateMenuSort(menu);
        }
        addMessage(redirectAttributes, "保存菜单排序成功!");
        return "redirect:" + adminPath + "/sys/menu/";
    }
View Code

 

 <sys:treeselect id="menu" name="parent.id" value="${menu.parent.id}" labelName="parent.name" labelValue="${menu.parent.name}"
                    title="菜单" url="/sys/menu/treeData" extId="${menu.id}" cssClass="required"/>



点击tag标签 ,跳到 treeselect.tag , 点击确定按钮调用里面的JS方法,跳
iframe:${ctx}/tag/treeselect?url="+encodeURIComponent("${url}"), 转到如下JSP页面。里面有复杂的JS。

<%@ page contentType="text/html;charset=UTF-8" %>
<%@ include file="/WEB-INF/views/include/taglib.jsp"%>
<html>
<head>
    <title>数据选择</title>
    <meta name="decorator" content="blank"/>
    <%@include file="/WEB-INF/views/include/treeview.jsp" %>
    <script type="text/javascript">
        var key, lastValue = "", nodeList = [], type = getQueryString("type", "${url}");
        var tree, setting = {view:{selectedMulti:false,dblClickExpand:false},check:{enable:"${checked}",nocheckInherit:true},
                async:{enable:(type==3),url:"${ctx}/sys/user/treeData",autoParam:["id=officeId"]},
                data:{simpleData:{enable:true}},callback:{<%--
                    beforeClick: function(treeId, treeNode){
                        if("${checked}" == "true"){
                            //tree.checkNode(treeNode, !node.checked, true, true);
                            tree.expandNode(treeNode, true, false, false);
                        }
                    }, --%>
                    onClick:function(event, treeId, treeNode){
                        tree.expandNode(treeNode);
                    },onCheck: function(e, treeId, treeNode){
                        var nodes = tree.getCheckedNodes(true);
                        for (var i=0, l=nodes.length; i<l; i++) {
                            tree.expandNode(nodes[i], true, false, false);
                        }
                        return false;
                    },onAsyncSuccess: function(event, treeId, treeNode, msg){
                        var nodes = tree.getNodesByParam("pId", treeNode.id, null);
                        for (var i=0, l=nodes.length; i<l; i++) {
                            try{tree.checkNode(nodes[i], treeNode.checked, true);}catch(e){}
                            //tree.selectNode(nodes[i], false);
                        }
                        selectCheckNode();
                    },onDblClick: function(){//<c:if test="${!checked}">
                        top.$.jBox.getBox().find("button[value='ok']").trigger("click");
                        //$("input[type='text']", top.mainFrame.document).focus();//</c:if>
                    }
                }
            };
        function expandNodes(nodes) {
            if (!nodes) return;
            for (var i=0, l=nodes.length; i<l; i++) {
                tree.expandNode(nodes[i], true, false, false);
                if (nodes[i].isParent && nodes[i].zAsync) {
                    expandNodes(nodes[i].children);
                }
            }
        }
        $(document).ready(function(){
            $.get("${ctx}${url}${fn:indexOf(url,'?')==-1?'?':'&'}&extId=${extId}&isAll=${isAll}&module=${module}&t="
                    + new Date().getTime(), function(zNodes){
                // 初始化树结构
                tree = $.fn.zTree.init($("#tree"), setting, zNodes);
                
                // 默认展开一级节点
                var nodes = tree.getNodesByParam("level", 0);
                for(var i=0; i<nodes.length; i++) {
                    tree.expandNode(nodes[i], true, false, false);
                }
                //异步加载子节点(加载用户)
                var nodesOne = tree.getNodesByParam("isParent", true);
                for(var j=0; j<nodesOne.length; j++) {
                    tree.reAsyncChildNodes(nodesOne[j],"!refresh",true);
                }
                selectCheckNode();
            });
            key = $("#key");
            key.bind("focus", focusKey).bind("blur", blurKey).bind("change cut input propertychange", searchNode);
            key.bind('keydown', function (e){if(e.which == 13){searchNode();}});
            setTimeout("search();", "300");
        });
        
        // 默认选择节点
        function selectCheckNode(){
            var ids = "${selectIds}".split(",");
            for(var i=0; i<ids.length; i++) {
                var node = tree.getNodeByParam("id", (type==3?"u_":"")+ids[i]);
                if("${checked}" == "true"){
                    try{tree.checkNode(node, true, true);}catch(e){}
                    tree.selectNode(node, false);
                }else{
                    tree.selectNode(node, true);
                }
            }
        }
          function focusKey(e) {
            if (key.hasClass("empty")) {
                key.removeClass("empty");
            }
        }
        function blurKey(e) {
            if (key.get(0).value === "") {
                key.addClass("empty");
            }
            searchNode(e);
        }
        
        //搜索节点
        function searchNode() {
            // 取得输入的关键字的值
            var value = $.trim(key.get(0).value);
            
            // 按名字查询
            var keyType = "name";<%--
            if (key.hasClass("empty")) {
                value = "";
            }--%>
            
            // 如果和上次一次,就退出不查了。
            if (lastValue === value) {
                return;
            }
            
            // 保存最后一次
            lastValue = value;
            
            var nodes = tree.getNodes();
            // 如果要查空字串,就退出不查了。
            if (value == "") {
                showAllNode(nodes);
                return;
            }
            hideAllNode(nodes);
            nodeList = tree.getNodesByParamFuzzy(keyType, value);
            updateNodes(nodeList);
        }
        
        //隐藏所有节点
        function hideAllNode(nodes){            
            nodes = tree.transformToArray(nodes);
            for(var i=nodes.length-1; i>=0; i--) {
                tree.hideNode(nodes[i]);
            }
        }
        
        //显示所有节点
        function showAllNode(nodes){            
            nodes = tree.transformToArray(nodes);
            for(var i=nodes.length-1; i>=0; i--) {
                /* if(!nodes[i].isParent){
                    tree.showNode(nodes[i]);
                }else{ */
                    if(nodes[i].getParentNode()!=null){
                        tree.expandNode(nodes[i],false,false,false,false);
                    }else{
                        tree.expandNode(nodes[i],true,true,false,false);
                    }
                    tree.showNode(nodes[i]);
                    showAllNode(nodes[i].children);
                /* } */
            }
        }
        
        //更新节点状态
        function updateNodes(nodeList) {
            tree.showNodes(nodeList);
            for(var i=0, l=nodeList.length; i<l; i++) {
                
                //展开当前节点的父节点
                tree.showNode(nodeList[i].getParentNode()); 
                //tree.expandNode(nodeList[i].getParentNode(), true, false, false);
                //显示展开符合条件节点的父节点
                while(nodeList[i].getParentNode()!=null){
                    tree.expandNode(nodeList[i].getParentNode(), true, false, false);
                    nodeList[i] = nodeList[i].getParentNode();
                    tree.showNode(nodeList[i].getParentNode());
                }
                //显示根节点
                tree.showNode(nodeList[i].getParentNode());
                //展开根节点
                tree.expandNode(nodeList[i].getParentNode(), true, false, false);
            }
        }
        
        // 开始搜索
        function search() {
            $("#search").slideToggle(200);
            $("#txt").toggle();
            $("#key").focus();
        }
        
    </script>
</head>
<body>
    <div style="position:absolute;right:8px;top:5px;cursor:pointer;" onclick="search();">
        <i class="icon-search"></i><label id="txt">搜索</label>
    </div>
    <div id="search" class="form-search hide" style="padding:10px 0 0 13px;">
        <label for="key" class="control-label" style="padding:5px 5px 3px 0;">关键字:</label>
        <input type="text" class="empty" id="key" name="key" maxlength="50" style="110px;">
        <button class="btn" id="btn" onclick="searchNode()">搜索</button>
    </div>
    <div id="tree" class="ztree" style="padding:15px 20px;"></div>
</body>
View Code

    <form:radiobuttons path="isShow" items="${fns:getDictList('show_hide')}" itemLabel="label" itemValue="value" htmlEscape="false" class="required"/>

使用springMVC 表单form:radiobuttons
fns.tld 自定义标签 ,获取获取字典对象列表
View Code

 

<div class="control-group">
            <label class="control-label">图标:</label>
            <div class="controls">
                <sys:iconselect id="icon" name="icon" value="${menu.icon}"/>
            </div>
        </div>



点击跳入tag标签,加载如下url , 跳到tagiconselect.jsp
top.$.jBox.open("iframe:${ctx}/tag/iconselect?value="+$("#${id}").val(), "选择图标",

<%@ page contentType="text/html;charset=UTF-8" %>
<%@ include file="/WEB-INF/views/include/taglib.jsp"%>
<html>
<head>
    <title>图标选择</title>
    <meta name="decorator" content="blank"/>
    <style type="text/css">
        .page-header {clear:both;margin:0 20px;padding-top:20px;}
        .the-icons {padding:25px 10px 15px;list-style:none;}
        .the-icons li {float:left;width:22%;line-height:25px;margin:2px 5px;cursor:pointer;}
        .the-icons i {margin:1px 5px;font-size:16px;} .the-icons li:hover {background-color:#efefef;}
        .the-icons li.active {background-color:#0088CC;color:#ffffff;}
        .the-icons li:hover i{font-size:20px;}
    </style>
    <script type="text/javascript">
        $(document).ready(function(){
            $("#icons li").click(function(){
                $("#icons li").removeClass("active");
                $("#icons li i").removeClass("icon-white");
                $(this).addClass("active");
                $(this).children("i").addClass("icon-white");
                $("#icon").val($(this).text());
            });
            $("#icons li").each(function(){
                if ($(this).text()=="${value}"){
                    $(this).click();
                }
            });
            $("#icons li").dblclick(function(){
                top.$.jBox.getBox().find("button[value='ok']").trigger("click");
            });
        });
    </script>
</head>
<body>
<input type="hidden" id="icon" value="${value}" />
<div id="icons">
        
        <h2 class="page-header"> Web 应用的图标</h2>
        
        <ul class="the-icons">
          <li><i class="icon-adjust"></i> icon-adjust</li>
          <li><i class="icon-asterisk"></i> icon-asterisk</li>
          <li><i class="icon-ban-circle"></i> icon-ban-circle</li>
          <li><i class="icon-bar-chart"></i> icon-bar-chart</li>
          <li><i class="icon-barcode"></i> icon-barcode</li>
          <li><i class="icon-beaker"></i> icon-beaker</li>
          <li><i class="icon-beer"></i> icon-beer</li>
          <li><i class="icon-bell"></i> icon-bell</li>
          <li><i class="icon-bell-alt"></i> icon-bell-alt</li>
          <li><i class="icon-bolt"></i> icon-bolt</li>
          <li><i class="icon-book"></i> icon-book</li>
          <li><i class="icon-bookmark"></i> icon-bookmark</li>
          <li><i class="icon-bookmark-empty"></i> icon-bookmark-empty</li>
          <li><i class="icon-briefcase"></i> icon-briefcase</li>
          <li><i class="icon-bullhorn"></i> icon-bullhorn</li>
          <li><i class="icon-calendar"></i> icon-calendar</li>
          <li><i class="icon-camera"></i> icon-camera</li>
          <li><i class="icon-camera-retro"></i> icon-camera-retro</li>
          <li><i class="icon-certificate"></i> icon-certificate</li>
          <li><i class="icon-check"></i> icon-check</li>
          <li><i class="icon-check-empty"></i> icon-check-empty</li>
          <li><i class="icon-circle"></i> icon-circle</li>
          <li><i class="icon-circle-blank"></i> icon-circle-blank</li>
          <li><i class="icon-cloud"></i> icon-cloud</li>
          <li><i class="icon-cloud-download"></i> icon-cloud-download</li>
          <li><i class="icon-cloud-upload"></i> icon-cloud-upload</li>
          <li><i class="icon-coffee"></i> icon-coffee</li>
          <li><i class="icon-cog"></i> icon-cog</li>
          <li><i class="icon-cogs"></i> icon-cogs</li>
          <li><i class="icon-comment"></i> icon-comment</li>
          <li><i class="icon-comment-alt"></i> icon-comment-alt</li>
          <li><i class="icon-comments"></i> icon-comments</li>
          <li><i class="icon-comments-alt"></i> icon-comments-alt</li>
          <li><i class="icon-credit-card"></i> icon-credit-card</li>
          <li><i class="icon-dashboard"></i> icon-dashboard</li>
          <li><i class="icon-desktop"></i> icon-desktop</li>
          <li><i class="icon-download"></i> icon-download</li>
          <li><i class="icon-download-alt"></i> icon-download-alt</li>
        

          <li><i class="icon-edit"></i> icon-edit</li>
          <li><i class="icon-envelope"></i> icon-envelope</li>
          <li><i class="icon-envelope-alt"></i> icon-envelope-alt</li>
          <li><i class="icon-exchange"></i> icon-exchange</li>
          <li><i class="icon-exclamation-sign"></i> icon-exclamation-sign</li>
          <li><i class="icon-external-link"></i> icon-external-link</li>
          <li><i class="icon-eye-close"></i> icon-eye-close</li>
          <li><i class="icon-eye-open"></i> icon-eye-open</li>
          <li><i class="icon-facetime-video"></i> icon-facetime-video</li>
          <li><i class="icon-fighter-jet"></i> icon-fighter-jet</li>
          <li><i class="icon-film"></i> icon-film</li>
          <li><i class="icon-filter"></i> icon-filter</li>
          <li><i class="icon-fire"></i> icon-fire</li>
          <li><i class="icon-flag"></i> icon-flag</li>
          <li><i class="icon-folder-close"></i> icon-folder-close</li>
          <li><i class="icon-folder-open"></i> icon-folder-open</li>
          <li><i class="icon-folder-close-alt"></i> icon-folder-close-alt</li>
          <li><i class="icon-folder-open-alt"></i> icon-folder-open-alt</li>
          <li><i class="icon-food"></i> icon-food</li>
          <li><i class="icon-gift"></i> icon-gift</li>
          <li><i class="icon-glass"></i> icon-glass</li>
          <li><i class="icon-globe"></i> icon-globe</li>
          <li><i class="icon-group"></i> icon-group</li>
          <li><i class="icon-hdd"></i> icon-hdd</li>
          <li><i class="icon-headphones"></i> icon-headphones</li>
          <li><i class="icon-heart"></i> icon-heart</li>
          <li><i class="icon-heart-empty"></i> icon-heart-empty</li>
          <li><i class="icon-home"></i> icon-home</li>
          <li><i class="icon-inbox"></i> icon-inbox</li>
          <li><i class="icon-info-sign"></i> icon-info-sign</li>
          <li><i class="icon-key"></i> icon-key</li>
          <li><i class="icon-leaf"></i> icon-leaf</li>
          <li><i class="icon-laptop"></i> icon-laptop</li>
          <li><i class="icon-legal"></i> icon-legal</li>
          <li><i class="icon-lemon"></i> icon-lemon</li>
          <li><i class="icon-lightbulb"></i> icon-lightbulb</li>
          <li><i class="icon-lock"></i> icon-lock</li>
          <li><i class="icon-unlock"></i> icon-unlock</li>
        

          <li><i class="icon-magic"></i> icon-magic</li>
          <li><i class="icon-magnet"></i> icon-magnet</li>
          <li><i class="icon-map-marker"></i> icon-map-marker</li>
          <li><i class="icon-minus"></i> icon-minus</li>
          <li><i class="icon-minus-sign"></i> icon-minus-sign</li>
          <li><i class="icon-mobile-phone"></i> icon-mobile-phone</li>
          <li><i class="icon-money"></i> icon-money</li>
          <li><i class="icon-move"></i> icon-move</li>
          <li><i class="icon-music"></i> icon-music</li>
          <li><i class="icon-off"></i> icon-off</li>
          <li><i class="icon-ok"></i> icon-ok</li>
          <li><i class="icon-ok-circle"></i> icon-ok-circle</li>
          <li><i class="icon-ok-sign"></i> icon-ok-sign</li>
          <li><i class="icon-pencil"></i> icon-pencil</li>
          <li><i class="icon-picture"></i> icon-picture</li>
          <li><i class="icon-plane"></i> icon-plane</li>
          <li><i class="icon-plus"></i> icon-plus</li>
          <li><i class="icon-plus-sign"></i> icon-plus-sign</li>
          <li><i class="icon-print"></i> icon-print</li>
          <li><i class="icon-pushpin"></i> icon-pushpin</li>
          <li><i class="icon-qrcode"></i> icon-qrcode</li>
          <li><i class="icon-question-sign"></i> icon-question-sign</li>
          <li><i class="icon-quote-left"></i> icon-quote-left</li>
          <li><i class="icon-quote-right"></i> icon-quote-right</li>
          <li><i class="icon-random"></i> icon-random</li>
          <li><i class="icon-refresh"></i> icon-refresh</li>
          <li><i class="icon-remove"></i> icon-remove</li>
          <li><i class="icon-remove-circle"></i> icon-remove-circle</li>
          <li><i class="icon-remove-sign"></i> icon-remove-sign</li>
          <li><i class="icon-reorder"></i> icon-reorder</li>
          <li><i class="icon-reply"></i> icon-reply</li>
          <li><i class="icon-resize-horizontal"></i> icon-resize-horizontal</li>
          <li><i class="icon-resize-vertical"></i> icon-resize-vertical</li>
          <li><i class="icon-retweet"></i> icon-retweet</li>
          <li><i class="icon-road"></i> icon-road</li>
          <li><i class="icon-rss"></i> icon-rss</li>
          <li><i class="icon-screenshot"></i> icon-screenshot</li>
          <li><i class="icon-search"></i> icon-search</li>
        

          <li><i class="icon-share"></i> icon-share</li>
          <li><i class="icon-share-alt"></i> icon-share-alt</li>
          <li><i class="icon-shopping-cart"></i> icon-shopping-cart</li>
          <li><i class="icon-signal"></i> icon-signal</li>
          <li><i class="icon-signin"></i> icon-signin</li>
          <li><i class="icon-signout"></i> icon-signout</li>
          <li><i class="icon-sitemap"></i> icon-sitemap</li>
          <li><i class="icon-sort"></i> icon-sort</li>
          <li><i class="icon-sort-down"></i> icon-sort-down</li>
          <li><i class="icon-sort-up"></i> icon-sort-up</li>
          <li><i class="icon-spinner"></i> icon-spinner</li>
          <li><i class="icon-star"></i> icon-star</li>
          <li><i class="icon-star-empty"></i> icon-star-empty</li>
          <li><i class="icon-star-half"></i> icon-star-half</li>
          <li><i class="icon-tablet"></i> icon-tablet</li>
          <li><i class="icon-tag"></i> icon-tag</li>
          <li><i class="icon-tags"></i> icon-tags</li>
          <li><i class="icon-tasks"></i> icon-tasks</li>
          <li><i class="icon-thumbs-down"></i> icon-thumbs-down</li>
          <li><i class="icon-thumbs-up"></i> icon-thumbs-up</li>
          <li><i class="icon-time"></i> icon-time</li>
          <li><i class="icon-tint"></i> icon-tint</li>
          <li><i class="icon-trash"></i> icon-trash</li>
          <li><i class="icon-trophy"></i> icon-trophy</li>
          <li><i class="icon-truck"></i> icon-truck</li>
          <li><i class="icon-umbrella"></i> icon-umbrella</li>
          <li><i class="icon-upload"></i> icon-upload</li>
          <li><i class="icon-upload-alt"></i> icon-upload-alt</li>
          <li><i class="icon-user"></i> icon-user</li>
          <li><i class="icon-user-md"></i> icon-user-md</li>
          <li><i class="icon-volume-off"></i> icon-volume-off</li>
          <li><i class="icon-volume-down"></i> icon-volume-down</li>
          <li><i class="icon-volume-up"></i> icon-volume-up</li>
          <li><i class="icon-warning-sign"></i> icon-warning-sign</li>
          <li><i class="icon-wrench"></i> icon-wrench</li>
          <li><i class="icon-zoom-in"></i> icon-zoom-in</li>
          <li><i class="icon-zoom-out"></i> icon-zoom-out</li>
        </ul>
    
      
        <h2 class="page-header">文本编辑器图标</h2>
      
        <ul class="the-icons">
          <li><i class="icon-file"></i> icon-file</li>
          <li><i class="icon-file-alt"></i> icon-file-alt</li>
          <li><i class="icon-cut"></i> icon-cut</li>
          <li><i class="icon-copy"></i> icon-copy</li>
          <li><i class="icon-paste"></i> icon-paste</li>
          <li><i class="icon-save"></i> icon-save</li>
          <li><i class="icon-undo"></i> icon-undo</li>
          <li><i class="icon-repeat"></i> icon-repeat</li>
        

          <li><i class="icon-text-height"></i> icon-text-height</li>
          <li><i class="icon-text-width"></i> icon-text-width</li>
          <li><i class="icon-align-left"></i> icon-align-left</li>
          <li><i class="icon-align-center"></i> icon-align-center</li>
          <li><i class="icon-align-right"></i> icon-align-right</li>
          <li><i class="icon-align-justify"></i> icon-align-justify</li>
          <li><i class="icon-indent-left"></i> icon-indent-left</li>
          <li><i class="icon-indent-right"></i> icon-indent-right</li>
        

          <li><i class="icon-font"></i> icon-font</li>
          <li><i class="icon-bold"></i> icon-bold</li>
          <li><i class="icon-italic"></i> icon-italic</li>
          <li><i class="icon-strikethrough"></i> icon-strikethrough</li>
          <li><i class="icon-underline"></i> icon-underline</li>
          <li><i class="icon-link"></i> icon-link</li>
          <li><i class="icon-paper-clip"></i> icon-paper-clip</li>
          <li><i class="icon-columns"></i> icon-columns</li>
        

          <li><i class="icon-table"></i> icon-table</li>
          <li><i class="icon-th-large"></i> icon-th-large</li>
          <li><i class="icon-th"></i> icon-th</li>
          <li><i class="icon-th-list"></i> icon-th-list</li>
          <li><i class="icon-list"></i> icon-list</li>
          <li><i class="icon-list-ol"></i> icon-list-ol</li>
          <li><i class="icon-list-ul"></i> icon-list-ul</li>
          <li><i class="icon-list-alt"></i> icon-list-alt</li>
        </ul>
    
        <h2 class="page-header">指示方向的图标</h2>
      
        <ul class="the-icons">
          <li><i class="icon-angle-left"></i> icon-angle-left</li>
          <li><i class="icon-angle-right"></i> icon-angle-right</li>
          <li><i class="icon-angle-up"></i> icon-angle-up</li>
          <li><i class="icon-angle-down"></i> icon-angle-down</li>
          <li><i class="icon-arrow-down"></i> icon-arrow-down</li>
          <li><i class="icon-arrow-left"></i> icon-arrow-left</li>
          <li><i class="icon-arrow-right"></i> icon-arrow-right</li>
          <li><i class="icon-arrow-up"></i> icon-arrow-up</li>
        

          <li><i class="icon-caret-down"></i> icon-caret-down</li>
          <li><i class="icon-caret-left"></i> icon-caret-left</li>
          <li><i class="icon-caret-right"></i> icon-caret-right</li>
          <li><i class="icon-caret-up"></i> icon-caret-up</li>
          <li><i class="icon-chevron-down"></i> icon-chevron-down</li>
          <li><i class="icon-chevron-left"></i> icon-chevron-left</li>
          <li><i class="icon-chevron-right"></i> icon-chevron-right</li>
          <li><i class="icon-chevron-up"></i> icon-chevron-up</li>
        

          <li><i class="icon-circle-arrow-down"></i> icon-circle-arrow-down</li>
          <li><i class="icon-circle-arrow-left"></i> icon-circle-arrow-left</li>
          <li><i class="icon-circle-arrow-right"></i> icon-circle-arrow-right</li>
          <li><i class="icon-circle-arrow-up"></i> icon-circle-arrow-up</li>
          <li><i class="icon-double-angle-left"></i> icon-double-angle-left</li>
          <li><i class="icon-double-angle-right"></i> icon-double-angle-right</li>
          <li><i class="icon-double-angle-up"></i> icon-double-angle-up</li>
          <li><i class="icon-double-angle-down"></i> icon-double-angle-down</li>
        

          <li><i class="icon-hand-down"></i> icon-hand-down</li>
          <li><i class="icon-hand-left"></i> icon-hand-left</li>
          <li><i class="icon-hand-right"></i> icon-hand-right</li>
          <li><i class="icon-hand-up"></i> icon-hand-up</li>
          <li><i class="icon-circle"></i> icon-circle</li>
          <li><i class="icon-circle-blank"></i> icon-circle-blank</li>
        </ul>
      
    
        <h2 class="page-header">视频播放器图标</h2>
      
        <ul class="the-icons">
          <li><i class="icon-play-circle"></i> icon-play-circle</li>
          <li><i class="icon-play"></i> icon-play</li>
          <li><i class="icon-pause"></i> icon-pause</li>
          <li><i class="icon-stop"></i> icon-stop</li>
        

          <li><i class="icon-step-backward"></i> icon-step-backward</li>
          <li><i class="icon-fast-backward"></i> icon-fast-backward</li>
          <li><i class="icon-backward"></i> icon-backward</li>
          <li><i class="icon-forward"></i> icon-forward</li>
        

          <li><i class="icon-fast-forward"></i> icon-fast-forward</li>
          <li><i class="icon-step-forward"></i> icon-step-forward</li>
          <li><i class="icon-eject"></i> icon-eject</li>
        

          <li><i class="icon-fullscreen"></i> icon-fullscreen</li>
          <li><i class="icon-resize-full"></i> icon-resize-full</li>
          <li><i class="icon-resize-small"></i> icon-resize-small</li>
        </ul>
    
    
        <h2 class="page-header">SNS图标</h2>
      
        <ul class="the-icons">
          <li><i class="icon-phone"></i> icon-phone</li>
          <li><i class="icon-phone-sign"></i> icon-phone-sign</li>
          <li><i class="icon-facebook"></i> icon-facebook</li>
          <li><i class="icon-facebook-sign"></i> icon-facebook-sign</li>
        

          <li><i class="icon-twitter"></i> icon-twitter</li>
          <li><i class="icon-twitter-sign"></i> icon-twitter-sign</li>
          <li><i class="icon-github"></i> icon-github</li>
          <li><i class="icon-github-alt"></i> icon-github-alt</li>
        

          <li><i class="icon-github-sign"></i> icon-github-sign</li>
          <li><i class="icon-linkedin"></i> icon-linkedin</li>
          <li><i class="icon-linkedin-sign"></i> icon-linkedin-sign</li>
          <li><i class="icon-pinterest"></i> icon-pinterest</li>
        

          <li><i class="icon-pinterest-sign"></i> icon-pinterest-sign</li>
          <li><i class="icon-google-plus"></i> icon-google-plus</li>
          <li><i class="icon-google-plus-sign"></i> icon-google-plus-sign</li>
          <li><i class="icon-sign-blank"></i> icon-sign-blank</li>
        </ul>
      
      
        <h2 class="page-header">医疗图标</h2>
      
        <ul class="the-icons">
          <li><i class="icon-ambulance"></i> icon-ambulance</li>
          <li><i class="icon-beaker"></i> icon-beaker</li>
        

          <li><i class="icon-h-sign"></i> icon-h-sign</li>
          <li><i class="icon-hospital"></i> icon-hospital</li>
        

          <li><i class="icon-medkit"></i> icon-medkit</li>
          <li><i class="icon-plus-sign-alt"></i> icon-plus-sign-alt</li>
        

          <li><i class="icon-stethoscope"></i> icon-stethoscope</li>
          <li><i class="icon-user-md"></i> icon-user-md</li>
        </ul>
    <br/><br/>
</div>
</body>
View Code
原文地址:https://www.cnblogs.com/skyislimit/p/6757531.html