Merge branch 'master' of https://git.oschina.net/smallc/SpringBlade
This commit is contained in:
commit
5ba5f09f77
|
|
@ -1,206 +1,206 @@
|
||||||
/**
|
/**
|
||||||
* Copyright (c) 2015-2016, Chill Zhuang 庄骞 (smallchill@163.com).
|
* Copyright (c) 2015-2016, Chill Zhuang 庄骞 (smallchill@163.com).
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
* You may obtain a copy of the License at
|
* You may obtain a copy of the License at
|
||||||
*
|
*
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
*
|
*
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package com.smallchill.core.beetl.tag;
|
package com.smallchill.core.beetl.tag;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.beetl.core.Tag;
|
import org.beetl.core.Tag;
|
||||||
|
|
||||||
import com.smallchill.common.vo.TreeNode;
|
import com.smallchill.common.vo.TreeNode;
|
||||||
import com.smallchill.core.constant.ConstCache;
|
import com.smallchill.core.constant.ConstCache;
|
||||||
import com.smallchill.core.constant.ConstCacheKey;
|
import com.smallchill.core.constant.ConstCacheKey;
|
||||||
import com.smallchill.core.constant.Cst;
|
import com.smallchill.core.constant.Cst;
|
||||||
import com.smallchill.core.plugins.dao.Db;
|
import com.smallchill.core.plugins.dao.Db;
|
||||||
import com.smallchill.core.toolbox.Func;
|
import com.smallchill.core.toolbox.Func;
|
||||||
import com.smallchill.core.toolbox.Paras;
|
import com.smallchill.core.toolbox.Paras;
|
||||||
|
|
||||||
public class SideBarTag extends Tag {
|
public class SideBarTag extends Tag {
|
||||||
|
|
||||||
private List<TreeNode> nodeList = new ArrayList<TreeNode>();
|
private List<TreeNode> nodeList = new ArrayList<TreeNode>();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public void render() {
|
public void render() {
|
||||||
try {
|
try {
|
||||||
Map<String, String> param = (Map<String, String>) args[1];
|
Map<String, String> param = (Map<String, String>) args[1];
|
||||||
|
|
||||||
final Object userId = param.get("userId");
|
final Object userId = param.get("userId");
|
||||||
final Object roleId = param.get("roleId");
|
final Object roleId = param.get("roleId");
|
||||||
String ctxPath =Cst.me().getContextPath();
|
String ctxPath =Cst.me().getContextPath();
|
||||||
|
|
||||||
Map<String, Object> userRole = Db.selectOneByCache(ConstCache.ROLE_CACHE, ConstCacheKey.ROLE_EXT + userId, "select * from TFW_ROLE_EXT where USERID=#{userId}", Paras.create().set("userId", userId));
|
Map<String, Object> userRole = Db.selectOneByCache(ConstCache.ROLE_CACHE, ConstCacheKey.ROLE_EXT + userId, "select * from TFW_ROLE_EXT where USERID=#{userId}", Paras.create().set("userId", userId));
|
||||||
|
|
||||||
String roleIn = "0";
|
String roleIn = "0";
|
||||||
String roleOut = "0";
|
String roleOut = "0";
|
||||||
if (!Func.isEmpty(userRole)) {
|
if (!Func.isEmpty(userRole)) {
|
||||||
Paras rd = Paras.parse(userRole);
|
Paras rd = Paras.parse(userRole);
|
||||||
roleIn = rd.getStr("ROLEIN");
|
roleIn = rd.getStr("ROLEIN");
|
||||||
roleOut = rd.getStr("ROLEOUT");
|
roleOut = rd.getStr("ROLEOUT");
|
||||||
}
|
}
|
||||||
final StringBuilder sql = new StringBuilder();
|
final StringBuilder sql = new StringBuilder();
|
||||||
|
|
||||||
sql.append("select * from TFW_MENU ");
|
sql.append("select * from TFW_MENU ");
|
||||||
sql.append(" where ( ");
|
sql.append(" where ( ");
|
||||||
sql.append(" (status=1)");
|
sql.append(" (status=1)");
|
||||||
sql.append(" and (icon is not null and icon not LIKE '%btn%' and icon not LIKE '%icon%') ");
|
sql.append(" and (icon is not null and icon not LIKE '%btn%' and icon not LIKE '%icon%') ");
|
||||||
sql.append(" and (id in (select menuId from TFW_RELATION where roleId in (#{join(roleId)})) or id in (#{join(roleIn)}))");
|
sql.append(" and (id in (select menuId from TFW_RELATION where roleId in (#{join(roleId)})) or id in (#{join(roleIn)}))");
|
||||||
sql.append(" and id not in(#{join(roleOut)})");
|
sql.append(" and id not in(#{join(roleOut)})");
|
||||||
sql.append(" )");
|
sql.append(" )");
|
||||||
sql.append(" order by levels,pCode,num");
|
sql.append(" order by levels,pCode,num");
|
||||||
|
|
||||||
@SuppressWarnings("rawtypes")
|
@SuppressWarnings("rawtypes")
|
||||||
List<Map> sideBar = Db.selectListByCache(ConstCache.MENU_CACHE, ConstCacheKey.SIDEBAR + userId, sql.toString(),
|
List<Map> sideBar = Db.selectListByCache(ConstCache.MENU_CACHE, ConstCacheKey.SIDEBAR + userId, sql.toString(),
|
||||||
Paras.create()
|
Paras.create()
|
||||||
.set("roleId", roleId.toString().split(","))
|
.set("roleId", roleId.toString().split(","))
|
||||||
.set("roleIn", roleIn.split(","))
|
.set("roleIn", roleIn.split(","))
|
||||||
.set("roleOut", roleOut.split(",")));
|
.set("roleOut", roleOut.split(",")));
|
||||||
|
|
||||||
for (Map<String, Object> side : sideBar) {
|
for (Map<String, Object> side : sideBar) {
|
||||||
TreeNode node = new TreeNode();
|
TreeNode node = new TreeNode();
|
||||||
Paras rd = Paras.parse(side);
|
Paras rd = Paras.parse(side);
|
||||||
node.setId(rd.getStr("CODE"));
|
node.setId(rd.getStr("CODE"));
|
||||||
node.setParentId(rd.getStr("PCODE"));
|
node.setParentId(rd.getStr("PCODE"));
|
||||||
node.setName(rd.getStr("NAME"));
|
node.setName(rd.getStr("NAME"));
|
||||||
node.setIcon(rd.getStr("ICON"));
|
node.setIcon(rd.getStr("ICON"));
|
||||||
node.setIsParent(false);
|
node.setIsParent(false);
|
||||||
nodeList.add(node);
|
nodeList.add(node);
|
||||||
}
|
}
|
||||||
|
|
||||||
new TreeNode().buildNodes(nodeList);
|
new TreeNode().buildNodes(nodeList);
|
||||||
|
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
for (Map<String, Object> side : sideBar) {
|
for (Map<String, Object> side : sideBar) {
|
||||||
if (Func.toInt(side.get("LEVELS")) == 1) {
|
if (Func.toInt(side.get("LEVELS")) == 1) {
|
||||||
String firstMenu = "";
|
String firstMenu = "";
|
||||||
String subMenu = "";
|
String subMenu = "";
|
||||||
String href = Func.isEmpty(side.get("URL")) ? "#" : ctxPath + side.get("URL") + "";
|
String href = Func.isEmpty(side.get("URL")) ? "#" : ctxPath + side.get("URL") + "";
|
||||||
String addtabs = Func.isEmpty(side.get("URL")) ? "" : "data-addtabs=\"" + side.get("CODE") + "\"";
|
String addtabs = Func.isEmpty(side.get("URL")) ? "" : "data-addtabs=\"" + side.get("CODE") + "\"";
|
||||||
|
|
||||||
firstMenu += "<li >";
|
firstMenu += "<li >";
|
||||||
firstMenu += " <a data-url=\"" + href + "\" " + addtabs + " data-title=\"" + side.get("NAME") + "\" data-icon=\"fa " + side.get("ICON") + "\" class=\"" + getDropDownClass(Func.toStr(side.get("CODE")),"dropdown-toggle") + " tmsp-pointer\">";
|
firstMenu += " <a data-url=\"" + href + "\" " + addtabs + " data-title=\"" + side.get("NAME") + "\" data-icon=\"fa " + side.get("ICON") + "\" class=\"" + getDropDownClass(Func.toStr(side.get("CODE")),"dropdown-toggle") + " blade-pointer\">";
|
||||||
firstMenu += " <i class=\"menu-icon fa " + side.get("ICON") + "\"></i>";
|
firstMenu += " <i class=\"menu-icon fa " + side.get("ICON") + "\"></i>";
|
||||||
firstMenu += " <span class=\"menu-text\">" + side.get("NAME") + "</span>";
|
firstMenu += " <span class=\"menu-text\">" + side.get("NAME") + "</span>";
|
||||||
firstMenu += " <b class=\"arrow " + getDropDownClass(Func.toStr(side.get("CODE")),"fa fa-angle-down") + "\"></b>";
|
firstMenu += " <b class=\"arrow " + getDropDownClass(Func.toStr(side.get("CODE")),"fa fa-angle-down") + "\"></b>";
|
||||||
firstMenu += " </a>";
|
firstMenu += " </a>";
|
||||||
firstMenu += " <b class=\"arrow\"></b>";
|
firstMenu += " <b class=\"arrow\"></b>";
|
||||||
|
|
||||||
subMenu = this.reloadMenu(sideBar, Func.toStr(side.get("CODE")), firstMenu, 1, ctxPath);// 寻找子菜单
|
subMenu = this.reloadMenu(sideBar, Func.toStr(side.get("CODE")), firstMenu, 1, ctxPath);// 寻找子菜单
|
||||||
|
|
||||||
sb.append(subMenu);
|
sb.append(subMenu);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//版权校验
|
//版权校验
|
||||||
sb.append("<script type=\"text/javascript\">");
|
sb.append("<script type=\"text/javascript\">");
|
||||||
sb.append(" $(function(){");
|
sb.append(" $(function(){");
|
||||||
sb.append(" setTimeout(function(){");
|
sb.append(" setTimeout(function(){");
|
||||||
sb.append(" var $supporter = $(\"#support_tonbusoft\");");
|
sb.append(" var $supporter = $(\"#support_tonbusoft\");");
|
||||||
sb.append(" $supporter.addClass('bigger-110');");
|
sb.append(" $supporter.addClass('bigger-110');");
|
||||||
sb.append(" var name = $supporter.html();");
|
sb.append(" var name = $supporter.html();");
|
||||||
sb.append(" var index = layer;");
|
sb.append(" var index = layer;");
|
||||||
sb.append(" if(index == undefined){");
|
sb.append(" if(index == undefined){");
|
||||||
sb.append(" alert(\"该产品版权归 smallchill@163.com 所有,请勿盗版!\");");
|
sb.append(" alert(\"该产品版权归 smallchill@163.com 所有,请勿盗版!\");");
|
||||||
sb.append(" return;");
|
sb.append(" return;");
|
||||||
sb.append(" }");
|
sb.append(" }");
|
||||||
sb.append(" if(name == undefined){");
|
sb.append(" if(name == undefined){");
|
||||||
sb.append(" layer.alert(\"该产品版权归 smallchill@163.com 所有,请勿盗版!\", {icon: 2,title:\"侵权警告\"});");
|
sb.append(" layer.alert(\"该产品版权归 smallchill@163.com 所有,请勿盗版!\", {icon: 2,title:\"侵权警告\"});");
|
||||||
sb.append(" return;");
|
sb.append(" return;");
|
||||||
sb.append(" } else if(!(name.indexOf(\"smallchill@163.com\") >= 0 && $supporter.is(\"span\") && !$supporter.is(\":hidden\"))){");
|
sb.append(" } else if(!(name.indexOf(\"smallchill@163.com\") >= 0 && $supporter.is(\"span\") && !$supporter.is(\":hidden\"))){");
|
||||||
sb.append(" layer.alert(\"该产品版权归 smallchill@163.com 所有,请勿盗版!\", {icon: 2,title:\"侵权警告\"});");
|
sb.append(" layer.alert(\"该产品版权归 smallchill@163.com 所有,请勿盗版!\", {icon: 2,title:\"侵权警告\"});");
|
||||||
sb.append(" return;");
|
sb.append(" return;");
|
||||||
sb.append(" }");
|
sb.append(" }");
|
||||||
sb.append(" }, 1800);");
|
sb.append(" }, 1800);");
|
||||||
sb.append(" });");
|
sb.append(" });");
|
||||||
sb.append("</script>");
|
sb.append("</script>");
|
||||||
|
|
||||||
ctx.byteWriter.writeString(sb.toString());
|
ctx.byteWriter.writeString(sb.toString());
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 加载子菜单
|
* 加载子菜单
|
||||||
*
|
*
|
||||||
* @param sideBar
|
* @param sideBar
|
||||||
* 菜单集合
|
* 菜单集合
|
||||||
* @param pCode
|
* @param pCode
|
||||||
* 父编号
|
* 父编号
|
||||||
* @param menuCode
|
* @param menuCode
|
||||||
* 选中菜单编号
|
* 选中菜单编号
|
||||||
* @param pStr
|
* @param pStr
|
||||||
* 父HTML
|
* 父HTML
|
||||||
* @param levels
|
* @param levels
|
||||||
* 层级
|
* 层级
|
||||||
* @return String 返回子菜单HTML集
|
* @return String 返回子菜单HTML集
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings({ "rawtypes", "unchecked" })
|
@SuppressWarnings({ "rawtypes", "unchecked" })
|
||||||
public String reloadMenu(List<Map> sideBar, String pCode, String pStr, int levels, String ctxPath) {
|
public String reloadMenu(List<Map> sideBar, String pCode, String pStr, int levels, String ctxPath) {
|
||||||
String Str = "";
|
String Str = "";
|
||||||
String subStr = "";
|
String subStr = "";
|
||||||
for (Map subside : sideBar) {
|
for (Map subside : sideBar) {
|
||||||
Paras rd = Paras.parse(subside);
|
Paras rd = Paras.parse(subside);
|
||||||
int _levels = rd.getInt("LEVELS");
|
int _levels = rd.getInt("LEVELS");
|
||||||
String _code = rd.getStr("CODE");
|
String _code = rd.getStr("CODE");
|
||||||
String _pCode = rd.getStr("PCODE");
|
String _pCode = rd.getStr("PCODE");
|
||||||
String _url = rd.getStr("URL");
|
String _url = rd.getStr("URL");
|
||||||
String _icon = rd.getStr("ICON");
|
String _icon = rd.getStr("ICON");
|
||||||
String _name = rd.getStr("NAME");
|
String _name = rd.getStr("NAME");
|
||||||
if ((_pCode.equals(pCode) && _levels > levels)) {
|
if ((_pCode.equals(pCode) && _levels > levels)) {
|
||||||
String href = Func.isEmpty(_url) ? "#" : ctxPath + _url + "";
|
String href = Func.isEmpty(_url) ? "#" : ctxPath + _url + "";
|
||||||
String addtabs = Func.isEmpty(_url) ? "" : "data-addtabs=\"" + _code + "\"";
|
String addtabs = Func.isEmpty(_url) ? "" : "data-addtabs=\"" + _code + "\"";
|
||||||
|
|
||||||
Str += "<li>";
|
Str += "<li>";
|
||||||
Str += " <a data-url=\"" + href + "\" " + addtabs + " data-title=\"" + _name + "\" data-icon=\"fa " + _icon + "\" class=\"" + getDropDownClass(_code, "dropdown-toggle") + " tmsp-pointer\">";
|
Str += " <a data-url=\"" + href + "\" " + addtabs + " data-title=\"" + _name + "\" data-icon=\"fa " + _icon + "\" class=\"" + getDropDownClass(_code, "dropdown-toggle") + " blade-pointer\">";
|
||||||
Str += " <i class=\"menu-icon fa " + _icon + "\"></i>";
|
Str += " <i class=\"menu-icon fa " + _icon + "\"></i>";
|
||||||
Str += _name;
|
Str += _name;
|
||||||
Str += " <b class=\"arrow " + getDropDownClass(_code,"fa fa-angle-down") + "\"></b>";
|
Str += " <b class=\"arrow " + getDropDownClass(_code,"fa fa-angle-down") + "\"></b>";
|
||||||
Str += " </a>";
|
Str += " </a>";
|
||||||
Str += " <b class=\"arrow\"></b>";
|
Str += " <b class=\"arrow\"></b>";
|
||||||
|
|
||||||
subStr = this.reloadMenu(sideBar, _code, Str, _levels, ctxPath);// 递归寻找子菜单
|
subStr = this.reloadMenu(sideBar, _code, Str, _levels, ctxPath);// 递归寻找子菜单
|
||||||
|
|
||||||
Str = Func.isEmpty(subStr) ? Str : subStr;
|
Str = Func.isEmpty(subStr) ? Str : subStr;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
if (Str.length() > 0) {
|
if (Str.length() > 0) {
|
||||||
pStr += (Func.isEmpty(pStr)) ? Str : "<ul class=\"submenu\">" + Str + "</ul>";
|
pStr += (Func.isEmpty(pStr)) ? Str : "<ul class=\"submenu\">" + Str + "</ul>";
|
||||||
pStr += "</li>";
|
pStr += "</li>";
|
||||||
return pStr;
|
return pStr;
|
||||||
} else {
|
} else {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getDropDownClass(String code,String dropdownclass){
|
public String getDropDownClass(String code,String dropdownclass){
|
||||||
Iterator<TreeNode> it = nodeList.iterator();
|
Iterator<TreeNode> it = nodeList.iterator();
|
||||||
while (it.hasNext()) {
|
while (it.hasNext()) {
|
||||||
TreeNode n = (TreeNode) it.next();
|
TreeNode n = (TreeNode) it.next();
|
||||||
if(n.getId().equals(code)&&n.isParent()){
|
if(n.getId().equals(code)&&n.isParent()){
|
||||||
return dropdownclass;
|
return dropdownclass;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,12 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html >
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<title>${title!'curd'}</title>
|
<title>${title!'blade'}</title>
|
||||||
<link rel="shortcut icon" href="${ctxPath}/static/style/images/favicon.ico" type="image/x-icon" />
|
<link rel="shortcut icon" href="${ctxPath}/static/style/images/favicon.ico" type="image/x-icon" />
|
||||||
<meta name="renderer" content="webkit" /><!-- 360浏览器默认选择webkit内核 -->
|
<!-- 360浏览器默认选择webkit内核 -->
|
||||||
<meta name="description" content="Common form elements and layouts" />
|
<meta name="renderer" content="webkit" />
|
||||||
|
<meta name="description" content="blade framework" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
|
||||||
<!-- bootstrap & fontawesome -->
|
<!-- bootstrap & fontawesome -->
|
||||||
<link rel="stylesheet" href="${ctxPath}/static/assets/css/bootstrap.css" />
|
<link rel="stylesheet" href="${ctxPath}/static/assets/css/bootstrap.css" />
|
||||||
|
|
@ -28,19 +29,17 @@
|
||||||
</head>
|
</head>
|
||||||
<body class="no-skin">
|
<body class="no-skin">
|
||||||
<div class="main-container" id="main-container">
|
<div class="main-container" id="main-container">
|
||||||
<!-- /section:basics/sidebar -->
|
|
||||||
<div class="main-content">
|
<div class="main-content">
|
||||||
<div class="main-content-inner">
|
<div class="main-content-inner">
|
||||||
<!-- /section:basics/content.breadcrumbs -->
|
|
||||||
<div class="page-content">
|
<div class="page-content">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12">
|
<div class="col-xs-12">
|
||||||
${layoutContent}
|
${layoutContent}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div><!-- /.page-content -->
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div><!-- /.main-content -->
|
</div>
|
||||||
</div><!-- /.main-container -->
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -1,21 +1,20 @@
|
||||||
<div class="space-4"></div>
|
<div class="space-4"></div>
|
||||||
<!-- #section:elements.form -->
|
@ for(x in col) {
|
||||||
@for(x in col){
|
@ if(!isEmpty(x.title)) {
|
||||||
@ if(!isEmpty(x.title)){
|
|
||||||
<div class="page-header-form">
|
<div class="page-header-form">
|
||||||
<h2>
|
<h2>
|
||||||
${x.title!}
|
${x.title!}
|
||||||
@if(!isEmpty(x.small)){
|
@ if(!isEmpty(x.small)) {
|
||||||
<small>
|
<small>
|
||||||
<i class="ace-icon fa fa-angle-double-right">
|
<i class="ace-icon fa fa-angle-double-right">
|
||||||
${x.small!}
|
${x.small!}
|
||||||
</i>
|
</i>
|
||||||
</small>
|
</small>
|
||||||
@}
|
@ }
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@ }else{
|
@ } else {
|
||||||
@ var display = (func.like(x.type,"hidden")) ? "none" : "block";
|
@ var display = (func.like(x.type,"hidden")) ? "none" : "block";
|
||||||
@ var placeholder = (!isEmpty(x.placeholder)) ? x.placeholder : ("暂无"+x.name);
|
@ var placeholder = (!isEmpty(x.placeholder)) ? x.placeholder : ("暂无"+x.name);
|
||||||
@ if(x.newline!false){
|
@ if(x.newline!false){
|
||||||
|
|
|
||||||
|
|
@ -1,24 +1,22 @@
|
||||||
<div class="space-4"></div>
|
<div class="space-4"></div>
|
||||||
|
|
||||||
<!-- 判断表单是否发生过更改的token -->
|
<!-- 判断表单是否发生过更改的token -->
|
||||||
<input type="hidden" id="form_token" value="0"/>
|
<input type="hidden" id="form_token" value="0"/>
|
||||||
<!-- 乐观锁控制 -->
|
<!-- 乐观锁控制 -->
|
||||||
<input type="hidden" id="_version" name="VERSION" value="0">
|
<input type="hidden" id="_version" name="VERSION" value="0">
|
||||||
|
|
||||||
@if(isEmpty(keys)){
|
@ if(isEmpty(keys)) {
|
||||||
<input type="hidden" id="_${key!'id'}" name="${table!}.${key!'id'}" value=""/>
|
<input type="hidden" id="_${key!'id'}" name="${table!}.${key!'id'}" value=""/>
|
||||||
@}
|
@ } else {
|
||||||
@else{
|
@for(k in keys) {
|
||||||
@for(k in keys){
|
|
||||||
<input type="hidden" id="${k.table!}_${k.key!'id'}" name="${k.table!}.${k.key!'id'}" value=""/>
|
<input type="hidden" id="${k.table!}_${k.key!'id'}" name="${k.table!}.${k.key!'id'}" value=""/>
|
||||||
@}
|
@}
|
||||||
@}
|
@ }
|
||||||
@for(x in col){
|
@ for(x in col){
|
||||||
@ if(!isEmpty(x.title)){
|
@ if(!isEmpty(x.title)) {
|
||||||
<div class="page-header-form">
|
<div class="page-header-form">
|
||||||
<h2>
|
<h2>
|
||||||
${x.title!}
|
${x.title!}
|
||||||
@if(!isEmpty(x.small)){
|
@if(!isEmpty(x.small)) {
|
||||||
<small>
|
<small>
|
||||||
<i class="ace-icon fa fa-angle-double-right">
|
<i class="ace-icon fa fa-angle-double-right">
|
||||||
${x.small!}
|
${x.small!}
|
||||||
|
|
@ -28,7 +26,7 @@
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@ }else{
|
@ } else {
|
||||||
@ var display = (func.like(x.type,"hidden")) ? "none" : "block";
|
@ var display = (func.like(x.type,"hidden")) ? "none" : "block";
|
||||||
@ var placeholder = (!isEmpty(x.placeholder)) ? x.placeholder : ("暂无"+x.name);
|
@ var placeholder = (!isEmpty(x.placeholder)) ? x.placeholder : ("暂无"+x.name);
|
||||||
@ if(x.newline){
|
@ if(x.newline){
|
||||||
|
|
|
||||||
|
|
@ -1,24 +1,23 @@
|
||||||
<div class="space-4"></div>
|
<div class="space-4"></div>
|
||||||
<!-- #section:elements.form -->
|
@ for(x in col) {
|
||||||
@for(x in col){
|
@ if(!isEmpty(x.title)) {
|
||||||
@ if(!isEmpty(x.title)){
|
|
||||||
<div class="page-header-form">
|
<div class="page-header-form">
|
||||||
<h2>
|
<h2>
|
||||||
${x.title!}
|
${x.title!}
|
||||||
@if(!isEmpty(x.small)){
|
@ if(!isEmpty(x.small)) {
|
||||||
<small>
|
<small>
|
||||||
<i class="ace-icon fa fa-angle-double-right">
|
<i class="ace-icon fa fa-angle-double-right">
|
||||||
${x.small!}
|
${x.small!}
|
||||||
</i>
|
</i>
|
||||||
</small>
|
</small>
|
||||||
@}
|
@ }
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@ }else{
|
@ } else {
|
||||||
@ var display = (func.like(x.type,"hidden")) ? "none" : "block";
|
@ var display = (func.like(x.type,"hidden")) ? "none" : "block";
|
||||||
@ var placeholder = (!isEmpty(x.placeholder)) ? x.placeholder : ("暂无"+x.name);
|
@ var placeholder = (!isEmpty(x.placeholder)) ? x.placeholder : ("暂无"+x.name);
|
||||||
@ if(x.newline){
|
@ if(x.newline) {
|
||||||
<div class="form-group" style="display:${display!}">
|
<div class="form-group" style="display:${display!}">
|
||||||
@ }
|
@ }
|
||||||
<label class="col-sm-2 control-label no-padding-right" > ${x.name!} </label>
|
<label class="col-sm-2 control-label no-padding-right" > ${x.name!} </label>
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,12 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<title>Blade企业级开发平台</title>
|
<title>Blade企业级开发平台</title>
|
||||||
<link rel="shortcut icon" href="${ctxPath}/static/style/images/favicon.ico" type="image/x-icon" />
|
<link rel="shortcut icon" href="${ctxPath}/static/style/images/favicon.ico" type="image/x-icon" />
|
||||||
<meta name="renderer" content="webkit" /><!-- 360浏览器默认选择webkit内核 -->
|
<!-- 360浏览器默认选择webkit内核 -->
|
||||||
<meta name="description" content="overview & stats" />
|
<meta name="renderer" content="webkit" />
|
||||||
|
<meta name="description" content="blade framework" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
|
||||||
<script src='${ctxPath}/static/assets/js/jquery.js'></script>
|
<script src='${ctxPath}/static/assets/js/jquery.js'></script>
|
||||||
<!-- bootstrap & fontawesome -->
|
<!-- bootstrap & fontawesome -->
|
||||||
|
|
@ -23,16 +24,16 @@
|
||||||
<!-- ace settings handler -->
|
<!-- ace settings handler -->
|
||||||
<script src="${ctxPath}/static/assets/js/ace-extra.js"></script>
|
<script src="${ctxPath}/static/assets/js/ace-extra.js"></script>
|
||||||
<link rel="stylesheet" href="${ctxPath}/static/blade/css/blade-tab.css" type="text/css" media="screen" />
|
<link rel="stylesheet" href="${ctxPath}/static/blade/css/blade-tab.css" type="text/css" media="screen" />
|
||||||
<script src="${ctxPath}/static/blade/js/blade-tab.js"></script> <!-- layer -->
|
<!-- layer -->
|
||||||
|
<script src="${ctxPath}/static/blade/js/blade-tab.js"></script>
|
||||||
|
<!-- blade通用工具类 -->
|
||||||
<script src="${ctxPath}/static/layer/layer.js"></script>
|
<script src="${ctxPath}/static/layer/layer.js"></script>
|
||||||
<script src="${ctxPath}/static/blade/js/blade-ajax.js" type="text/javascript" ></script>
|
<script src="${ctxPath}/static/blade/js/blade-ajax.js" type="text/javascript" ></script>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="no-skin">
|
<body class="no-skin">
|
||||||
<!-- #section:basics/navbar.layout -->
|
|
||||||
<div id="navbar" class="navbar navbar-default">
|
<div id="navbar" class="navbar navbar-default">
|
||||||
<div class="navbar-container" id="navbar-container">
|
<div class="navbar-container" id="navbar-container">
|
||||||
<!-- #section:basics/sidebar.mobile.toggle -->
|
|
||||||
<button type="button" class="navbar-toggle menu-toggler pull-left" id="menu-toggler" data-target="#sidebar">
|
<button type="button" class="navbar-toggle menu-toggler pull-left" id="menu-toggler" data-target="#sidebar">
|
||||||
<span class="sr-only">Toggle sidebar</span>
|
<span class="sr-only">Toggle sidebar</span>
|
||||||
|
|
||||||
|
|
@ -43,15 +44,12 @@
|
||||||
<span class="icon-bar"></span>
|
<span class="icon-bar"></span>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<!-- /section:basics/sidebar.mobile.toggle -->
|
|
||||||
<div class="navbar-header pull-left">
|
<div class="navbar-header pull-left">
|
||||||
<!-- #section:basics/navbar.layout.brand -->
|
|
||||||
<a href="#" class="navbar-brand">
|
<a href="#" class="navbar-brand">
|
||||||
<small>
|
<small>
|
||||||
<!-- <i class="fa fa-tumblr"></i> -->
|
|
||||||
Blade企业级开发平台
|
Blade企业级开发平台
|
||||||
</small>
|
</small>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div><!-- /.navbar-container -->
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
|
|
||||||
<!-- #section:basics/sidebar -->
|
|
||||||
<div id="sidebar" class="sidebar responsive">
|
<div id="sidebar" class="sidebar responsive">
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
try{ace.settings.check('sidebar' , 'fixed')}catch(e){}
|
try{ace.settings.check('sidebar' , 'fixed')}catch(e){}
|
||||||
|
|
@ -25,7 +24,6 @@
|
||||||
<blade:sidebar userId="${shiro.getUser().id}" roleId="${shiro.getUser().roles}" />
|
<blade:sidebar userId="${shiro.getUser().id}" roleId="${shiro.getUser().roles}" />
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
<!-- #section:basics/sidebar.layout.minimize -->
|
|
||||||
<div class="sidebar-toggle sidebar-collapse" id="sidebar-collapse">
|
<div class="sidebar-toggle sidebar-collapse" id="sidebar-collapse">
|
||||||
<i class="ace-icon fa fa-angle-double-left" data-icon1="ace-icon fa fa-angle-double-left" data-icon2="ace-icon fa fa-angle-double-right"></i>
|
<i class="ace-icon fa fa-angle-double-left" data-icon1="ace-icon fa fa-angle-double-left" data-icon2="ace-icon fa fa-angle-double-right"></i>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,18 @@
|
||||||
|
|
||||||
.close-tab {
|
.close-tab {
|
||||||
font-size: 10px;
|
font-size: 10px;
|
||||||
position:absolute;
|
position:absolute;
|
||||||
right: 5px;
|
right: 5px;
|
||||||
top: 5px;
|
top: 5px;
|
||||||
/* padding-left: 25px; */
|
z-index: 100;
|
||||||
z-index: 100;
|
cursor: pointer;
|
||||||
cursor: pointer;
|
color: #94A6B0;
|
||||||
color: #94A6B0;
|
}
|
||||||
}
|
|
||||||
|
.blade-pointer{
|
||||||
.tmsp-pointer{
|
cursor:pointer;
|
||||||
cursor:pointer;
|
}
|
||||||
}
|
|
||||||
|
.topbar-collapse {
|
||||||
.topbar-collapse {
|
float:right;
|
||||||
float:right;
|
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue
Block a user