Commit b8551b9b by naan1993

项目分离出父工程

parent 6357c717

Too many changes to show.

To preserve performance only 1000 of 1000+ files are displayed.

# 上线发布流程
# 上线发布流程
项目如果要发布到生产环境,步骤如下:
## 修改application.yml相关配置
1.开启验证码验证:
```
guns.kaptcha-open=true
```
2.开启session超时验证:
```
guns.session-open=true
```
并根据需求配置这两个参数的大小:session-invalidate-time 和 session-validation-interval.
3.服务器端口根据上线需要进行修改:
```
server.port=xxxx
```
4.beetl文件检测要改为false:
```
beetl.resource-auto-check=false
```
5.激活的相关的profile
```
spring.profiles.active=produce
```
6.关闭开发者工具
```
spring.devtools.restart.enabled=false
```
## 打包
guns支持多种启动方式(详情见readme),根据启动方式下面介绍两种打包方式:
1.打成jar包启动,执行maven命令:
```
clean package -Dmaven.test.skip=true
```
然后放到linxu中执行后台运行命令
```
nohup java -jar xxx.jar >out.txt 2>&1 &
```
2.打成war包启动,首先修改pom中packaging改为war,然后执行1的打包命令,直接放入服务器tomcat的webapp文件夹即可
\ No newline at end of file
# 多机环境部署注意事项
# 多机环境部署注意事项
多机环境把session托管给redis存储,所以要部署和配置redis,另外需要注意的是开启相关配置
## 注意事项如下
1.单机环境下不需要依赖spring-session,所以需要把相关依赖的注释打开
```
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session</artifactId>
<scope>compile</scope><!-- 需要分布式session的话需要改为compile -->
</dependency>
```
2.修改application.yml中guns.spring-session-open配置,改为true,打开spring-session
```
guns.spring-session-open=true
```
3.配置application.yml中,spring.redis.host,spring.redis.port,spring.redis.password
```
spring.redis.host=xxx
spring.redis.port=xxx
spring.redis.password=xxx
```
4.需要把SpringSessionConfig类中的注释打开
```
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 1800)
```
5.如需配置session失效时间,请在SpringSessionConfig类中修改maxInactiveIntervalInSeconds属性值
*.js linguist-language=java
*.css linguist-language=java
*.html linguist-language=java
\ No newline at end of file
*.class
# Package Files #
*.jar
*.war
*.ear
/target/
# eclipse
.settings/
.classpath
.project
logs/
# idea
.idea/
*.iml
*velocity.log*
Copyright 2017 StyleFeng
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Guns - 404 页面</title>
<link rel="shortcut icon" href="${ctxPath}/static/favicon.ico"> <link href="${ctxPath}/static/css/bootstrap.min.css?v=3.3.6" rel="stylesheet">
<link href="${ctxPath}/static/css/font-awesome.css?v=4.4.0" rel="stylesheet">
<link href="${ctxPath}/static/css/animate.css" rel="stylesheet">
<link href="${ctxPath}/static/css/style.css?v=4.1.0" rel="stylesheet">
</head>
<body class="gray-bg">
<div class="middle-box text-center animated fadeInDown">
<h1>404</h1>
<h3 class="font-bold">页面未找到!</h3>
<div class="error-desc">
抱歉,页面好像去火星了~
<form class="form-inline m-t" role="form">
<div class="form-group">
<input type="email" class="form-control" placeholder="请输入您需要查找的内容 …">
</div>
<button type="submit" class="btn btn-primary">搜索</button>
</form>
</div>
</div>
<!-- 全局js -->
<script src="${ctxPath}/static/js/jquery.min.js?v=2.1.4"></script>
<script src="${ctxPath}/static/js/bootstrap.min.js?v=3.3.6"></script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="renderer" content="webkit"/><!-- 让360浏览器默认选择webkit内核 -->
<!-- 全局css -->
<link rel="shortcut icon" href="${ctxPath}/static/favicon.ico">
<link href="${ctxPath}/static/css/bootstrap.min.css?v=3.3.6" rel="stylesheet">
<link href="${ctxPath}/static/css/font-awesome.css?v=4.4.0" rel="stylesheet">
<link href="${ctxPath}/static/css/plugins/bootstrap-table/bootstrap-table.min.css" rel="stylesheet">
<link href="${ctxPath}/static/css/plugins/validate/bootstrapValidator.min.css" rel="stylesheet">
<link href="${ctxPath}/static/css/animate.css" rel="stylesheet">
<link href="${ctxPath}/static/css/style.css?v=4.1.0" rel="stylesheet">
<link href="${ctxPath}/static/css/_fstyle.css" rel="stylesheet">
<link href="${ctxPath}/static/css/plugins/iCheck/custom.css" rel="stylesheet">
<link href="${ctxPath}/static/css/plugins/webuploader/webuploader.css" rel="stylesheet">
<link href="${ctxPath}/static/css/plugins/ztree/zTreeStyle.css" rel="stylesheet">
<link href="${ctxPath}/static/css/plugins/jquery-treegrid/css/jquery.treegrid.css" rel="stylesheet"/>
<!-- <link href="${ctxPath}/static/css/plugins/ztree/demo.css" rel="stylesheet"> -->
<!-- 全局js -->
<script src="${ctxPath}/static/js/jquery.min.js?v=2.1.4"></script>
<script src="${ctxPath}/static/js/bootstrap.min.js?v=3.3.6"></script>
<script src="${ctxPath}/static/js/plugins/ztree/jquery.ztree.all.min.js"></script>
<script src="${ctxPath}/static/js/plugins/bootstrap-table/bootstrap-table.min.js"></script>
<script src="${ctxPath}/static/js/plugins/validate/bootstrapValidator.min.js"></script>
<script src="${ctxPath}/static/js/plugins/validate/zh_CN.js"></script>
<script src="${ctxPath}/static/js/plugins/bootstrap-table/bootstrap-table-mobile.min.js"></script>
<script src="${ctxPath}/static/js/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
<script src="${ctxPath}/static/js/plugins/jquery-treegrid/js/jquery.treegrid.min.js"></script>
<script src="${ctxPath}/static/js/plugins/jquery-treegrid/js/jquery.treegrid.bootstrap3.js"></script>
<script src="${ctxPath}/static/js/plugins/jquery-treegrid/extension/jquery.treegrid.extension.js"></script>
<script src="${ctxPath}/static/js/plugins/layer/layer.min.js"></script>
<script src="${ctxPath}/static/js/plugins/iCheck/icheck.min.js"></script>
<script src="${ctxPath}/static/js/plugins/layer/laydate/laydate.js"></script>
<script src="${ctxPath}/static/js/plugins/webuploader/webuploader.min.js"></script>
<script src="${ctxPath}/static/js/common/ajax-object.js"></script>
<script src="${ctxPath}/static/js/common/bootstrap-table-object.js"></script>
<script src="${ctxPath}/static/js/common/tree-table-object.js"></script>
<script src="${ctxPath}/static/js/common/web-upload-object.js"></script>
<script src="${ctxPath}/static/js/common/ztree-object.js"></script>
<script src="${ctxPath}/static/js/common/Feng.js"></script>
<script type="text/javascript">
Feng.addCtx("${ctxPath}");
Feng.sessionTimeoutRegistry();
</script>
</head>
<body class="gray-bg">
<div class="wrapper wrapper-content animated fadeInRight">
${layoutContent}
</div>
<script src="${ctxPath}/static/js/content.js?v=1.0.0"></script>
</body>
</html>
<div id="page-wrapper" class="gray-bg dashbard-1">
<div class="row border-bottom">
<nav class="navbar navbar-static-top" role="navigation" style="margin-bottom: 0">
<div class="navbar-header"><a class="navbar-minimalize minimalize-styl-2 btn btn-primary " href="#"><i class="fa fa-bars"></i> </a>
<form role="search" class="navbar-form-custom" method="post" action="search_results.html">
<div class="form-group">
<input type="text" placeholder="请输入您需要查找的内容 …" class="form-control" name="top-search" id="top-search">
</div>
</form>
</div>
<ul class="nav navbar-top-links navbar-right">
<li class="dropdown hidden-xs">
<a class="right-sidebar-toggle" aria-expanded="false">
<i class="fa fa-tasks"></i> 主题
</a>
</li>
</ul>
</nav>
</div>
<div class="row content-tabs">
<button class="roll-nav roll-left J_tabLeft"><i class="fa fa-backward"></i>
</button>
<nav class="page-tabs J_menuTabs">
<div class="page-tabs-content">
<a href="javascript:;" class="active J_menuTab" data-id="${ctxPath}/blackboard">首页</a>
</div>
</nav>
<button class="roll-nav roll-right J_tabRight"><i class="fa fa-forward"></i>
</button>
<div class="btn-group roll-nav roll-right">
<button class="dropdown J_tabClose" data-toggle="dropdown">关闭操作<span class="caret"></span>
</button>
<ul role="menu" class="dropdown-menu dropdown-menu-right">
<li class="J_tabShowActive"><a>定位当前选项卡</a>
</li>
<li class="divider"></li>
<li class="J_tabCloseAll"><a>关闭全部选项卡</a>
</li>
<li class="J_tabCloseOther"><a>关闭其他选项卡</a>
</li>
</ul>
</div>
<a href="logout" class="roll-nav roll-right J_tabExit"><i class="fa fa fa-sign-out"></i> 退出</a>
</div>
<div class="row J_mainContent" id="content-main">
<iframe class="J_iframe" name="iframe0" width="100%" height="100%" src="${ctxPath}/blackboard" frameborder="0" data-id="${ctxPath}/blackboard" seamless></iframe>
</div>
<div class="footer">
<div class="pull-right">&copy; 2016-2017 <a href="http://git.oschina.net/naan1993/guns" target="_blank">guns</a>
</div>
</div>
</div>
\ No newline at end of file
<nav class="navbar-default navbar-static-side" role="navigation">
<div class="nav-close"><i class="fa fa-times-circle"></i>
</div>
<div class="sidebar-collapse">
<ul class="nav" id="side-menu">
<li class="nav-header">
<div class="dropdown profile-element">
<span><img alt="image" class="img-circle"
@if(isEmpty(avatar)){
src="${ctxPath}/static/img/girl.gif"
@}else{
src="${ctxPath}/kaptcha/${avatar}"
@}
width="64px" height="64px"/></span>
<a data-toggle="dropdown" class="dropdown-toggle" href="#">
<span class="clear">
<span class="block m-t-xs"><strong class="font-bold">${shiro.getUser().name}</strong></span>
<span class="text-muted text-xs block">${shiro.getUser().roleNames[0]}<b class="caret"></b></span>
</span>
</a>
<ul class="dropdown-menu animated fadeInRight m-t-xs">
<li><a class="J_menuItem" href="${ctxPath}/mgr/user_info">个人资料</a></li>
<li><a class="J_menuItem" href="${ctxPath}/mgr/user_chpwd">修改密码</a></li>
<li class="divider"></li>
<li><a href="${ctxPath}/logout">安全退出</a>
</li>
</ul>
</div>
<div class="logo-element">GS
</div>
</li>
@for(title in titles){
@if(tool.isEmpty(title.children)){
<li>
<a class="J_menuItem" href="${ctxPath}${title.url}" name="tabMenuItem">
<i class="fa ${title.icon}"></i>
<span class="nav-label">${title.name}</span>
</a>
</li>
@}else{
<li>
<a href="#">
<i class="fa ${title.icon}"></i>
<span class="nav-label">${title.name}</span>
<span class="fa arrow"></span>
</a>
<ul class="nav nav-second-level">
@for(subTitle in title.children){
@if(tool.isEmpty(subTitle.children)){
<li>
<a class="J_menuItem" href="${ctxPath}${subTitle.url}" name="tabMenuItem">${subTitle.name}</a>
</li>
@}else{
<li>
<a href="#">${subTitle.name} <span class="fa arrow"></span></a>
<ul class="nav nav-third-level">
@for(thirdTitle in subTitle.children){
<li>
<a class="J_menuItem" href="${ctxPath}${thirdTitle.url}" name="tabMenuItem">${thirdTitle.name}</a>
</li>
@}
</ul>
</li>
@}
@}
</ul>
</li>
@}
@}
</ul>
</div>
</nav>
\ No newline at end of file
<div id="right-sidebar">
<div class="sidebar-container">
<ul class="nav nav-tabs navs-3">
<li class="active"><a data-toggle="tab" href="#tab-1"> <i
class="fa fa-gear"></i> 主题
</a></li>
</ul>
<div class="tab-content">
<div id="tab-1" class="tab-pane active">
<div class="sidebar-title">
<h3>
<i class="fa fa-comments-o"></i> 主题设置
</h3>
<small><i class="fa fa-tim"></i>
你可以从这里选择和预览主题的布局和样式,这些设置会被保存在本地,下次打开的时候会直接应用这些设置。</small>
</div>
<div class="skin-setttings">
<div class="title">主题设置</div>
<div class="setings-item">
<span>收起左侧菜单</span>
<div class="switch">
<div class="onoffswitch">
<input type="checkbox" name="collapsemenu"
class="onoffswitch-checkbox" id="collapsemenu"> <label
class="onoffswitch-label" for="collapsemenu"> <span
class="onoffswitch-inner"></span> <span
class="onoffswitch-switch"></span>
</label>
</div>
</div>
</div>
<div class="setings-item">
<span>固定顶部</span>
<div class="switch">
<div class="onoffswitch">
<input type="checkbox" name="fixednavbar"
class="onoffswitch-checkbox" id="fixednavbar"> <label
class="onoffswitch-label" for="fixednavbar"> <span
class="onoffswitch-inner"></span> <span
class="onoffswitch-switch"></span>
</label>
</div>
</div>
</div>
<div class="setings-item">
<span> 固定宽度 </span>
<div class="switch">
<div class="onoffswitch">
<input type="checkbox" name="boxedlayout"
class="onoffswitch-checkbox" id="boxedlayout"> <label
class="onoffswitch-label" for="boxedlayout"> <span
class="onoffswitch-inner"></span> <span
class="onoffswitch-switch"></span>
</label>
</div>
</div>
</div>
<div class="title">皮肤选择</div>
<div class="setings-item default-skin nb">
<span class="skin-name "> <a href="#" class="s-skin-0">
默认皮肤 </a>
</span>
</div>
<div class="setings-item blue-skin nb">
<span class="skin-name "> <a href="#" class="s-skin-1">
蓝色主题 </a>
</span>
</div>
<div class="setings-item yellow-skin nb">
<span class="skin-name "> <a href="#" class="s-skin-3">
黄色/紫色主题 </a>
</span>
</div>
</div>
</div>
</div>
</div>
</div>
\ No newline at end of file
@/*
时间查询条件标签的参数说明:
name : 查询条件的名称
id : 查询内容的input框id
isTime : 日期是否带有小时和分钟(true/false)
pattern : 日期的正则表达式(例如:"YYYY-MM-DD")
@*/
<div class="input-group">
<div class="input-group-btn">
<button data-toggle="dropdown" class="btn btn-white dropdown-toggle"
type="button">${name}
</button>
</div>
<input type="text" class="form-control layer-date"
onclick="laydate({istime: ${isTime}, format: '${pattern}'})" id="${id}"/>
</div>
\ No newline at end of file
@/*
头像参数的说明:
name : 名称
id : 头像的id
@*/
<div class="form-group">
<label class="col-sm-3 control-label head-scu-label">${name}</label>
<div class="col-sm-4">
<div id="${id}PreId">
<div><img width="100px" height="100px"
@if(isEmpty(avatarImg)){
src="${ctxPath}/static/img/girl.gif"></div>
@}else{
src="${ctxPath}/kaptcha/${avatarImg}"></div>
@}
</div>
</div>
<div class="col-sm-2">
<div class="head-scu-btn upload-btn" id="${id}BtnId">
<i class="fa fa-upload"></i>&nbsp;上传
</div>
</div>
<input type="hidden" id="${id}" value="${avatarImg!}"/>
</div>
@if(isNotEmpty(underline) && underline == 'true'){
<div class="hr-line-dashed"></div>
@}
@/*
按钮标签中各个参数的说明:
btnType : 按钮的类型决定了颜色(default-灰色,primary-绿色,success-蓝色,info-淡蓝色,warning-黄色,danger-红色,white-白色)
space : 按钮左侧是否有间隔(true/false)
clickFun : 点击按钮所执行的方法
icon : 按钮上的图标的样式
name : 按钮名称
@*/
@var spaceCss = "";
@var btnType = "";
@if(isEmpty(space)){
@ spaceCss = "";
@}else{
@ spaceCss = "button-margin";
@}
@if(isEmpty(btnCss)){
@ btnType = "primary";
@}else{
@ btnType = btnCss;
@}
<button type="button" class="btn btn-${btnType} ${spaceCss}" onclick="${clickFun!}" id="${id!}">
<i class="fa ${icon}"></i>&nbsp;${name}
</button>
@/*
表单中input框标签中各个参数的说明:
hidden : input hidden框的id
id : input框id
name : input框名称
readonly : readonly属性
clickFun : 点击事件的方法名
style : 附加的css属性
@*/
<div class="form-group">
<label class="col-sm-3 control-label">${name}</label>
<div class="col-sm-9">
<input class="form-control" id="${id}" name="${id}"
@if(isNotEmpty(value)){
value="${tool.dateType(value)}"
@}
@if(isNotEmpty(type)){
type="${type}"
@}else{
type="text"
@}
@if(isNotEmpty(readonly)){
readonly="${readonly}"
@}
@if(isNotEmpty(clickFun)){
onclick="${clickFun}"
@}
@if(isNotEmpty(style)){
style="${style}"
@}
@if(isNotEmpty(disabled)){
disabled="${disabled}"
@}
>
@if(isNotEmpty(hidden)){
<input class="form-control" type="hidden" id="${hidden}" value="${hiddenValue!}">
@}
@if(isNotEmpty(selectFlag)){
<div id="${selectId}" style="display: none; position: absolute; z-index: 200;">
<ul id="${selectTreeId}" class="ztree tree-box" style="${selectStyle!}"></ul>
</div>
@}
</div>
</div>
@if(isNotEmpty(underline) && underline == 'true'){
<div class="hr-line-dashed"></div>
@}
@/*
select标签中各个参数的说明:
name : select的名称
id : select的id
underline : 是否带分割线
@*/
<div class="form-group">
<label class="col-sm-3 control-label">${name}</label>
<div class="col-sm-9">
<select class="form-control" id="${id}" name="${id}">
${tagBody!}
</select>
@if(isNotEmpty(hidden)){
<input class="form-control" type="hidden" id="${hidden}" value="${hiddenValue!}">
@}
</div>
</div>
@if(isNotEmpty(underline) && underline == 'true'){
<div class="hr-line-dashed"></div>
@}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="renderer" content="webkit">
<title>Guns - 主页</title>
<link rel="shortcut icon" href="${ctxPath}/static/favicon.ico">
<link href="${ctxPath}/static/css/bootstrap.min.css?v=3.3.6" rel="stylesheet">
<link href="${ctxPath}/static/css/font-awesome.min.css?v=4.4.0" rel="stylesheet">
<link href="${ctxPath}/static/css/animate.css" rel="stylesheet">
<link href="${ctxPath}/static/css/style.css?v=4.1.0" rel="stylesheet">
</head>
<body class="fixed-sidebar full-height-layout gray-bg" style="overflow:hidden">
<div id="wrapper">
<!--左侧导航开始-->
@include("/common/_tab.html"){}
<!--左侧导航结束-->
<!--右侧部分开始-->
@include("/common/_right.html"){}
<!--右侧部分结束-->
<!--右侧边栏开始-->
@include("/common/_theme.html"){}
<!--右侧边栏结束-->
</div>
<!-- 全局js -->
<script src="${ctxPath}/static/js/jquery.min.js?v=2.1.4"></script>
<script src="${ctxPath}/static/js/bootstrap.min.js?v=3.3.6"></script>
<script src="${ctxPath}/static/js/plugins/metisMenu/jquery.metisMenu.js"></script>
<script src="${ctxPath}/static/js/plugins/slimscroll/jquery.slimscroll.min.js"></script>
<script src="${ctxPath}/static/js/plugins/layer/layer.min.js"></script>
<!-- 自定义js -->
<script src="${ctxPath}/static/js/hplus.js?v=4.1.0"></script>
<script type="text/javascript" src="${ctxPath}/static/js/contabs.js"></script>
<!-- 第三方插件 -->
<script src="${ctxPath}/static/js/plugins/pace/pace.min.js"></script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Guns - 登录</title>
<link rel="shortcut icon" href="${ctxPath}/static/favicon.ico">
<link href="${ctxPath}/static/css/bootstrap.min.css?v=3.3.6" rel="stylesheet">
<link href="${ctxPath}/static/css/font-awesome.css?v=4.4.0" rel="stylesheet">
<link href="${ctxPath}/static/css/animate.css" rel="stylesheet">
<link href="${ctxPath}/static/css/style.css?v=4.1.0" rel="stylesheet">
<script>if (window.top !== window.self) {
window.top.location = window.location;
}</script>
<script src="${ctxPath}/static/js/jquery.min.js?v=2.1.4"></script>
<script src="${ctxPath}/static/js/bootstrap.min.js?v=3.3.6"></script>
</head>
<body class="gray-bg">
<div class="middle-box text-center loginscreen animated fadeInDown">
<div style="padding: 100px 0px;">
<div>
<h1 class="logo-name">GS</h1>
</div>
<h3>欢迎使用 Guns</h3>
<br/>
<h4 style="color: red;">${tips!}</h4>
<form class="m-t" role="form" action="${ctxPath}/login" method="post">
<div class="form-group">
<input type="text" name="username" class="form-control" placeholder="用户名" required="">
</div>
<div class="form-group">
<input type="password" name="password" class="form-control" placeholder="密码" required="">
</div>
@if(tool.getKaptchaOnOff() == true){
<div class="form-group" style="float: left;">
<div class="col-sm-8" style="padding-left: 0px; padding-right: 0px;">
<input class="form-control" type="text" name="kaptcha" placeholder="验证码" required="">
</div>
<div class="col-sm-4" style="padding-left: 0px; padding-right: 0px;">
<img src="${ctxPath}/kaptcha" id="kaptcha" width="100%" height="100%"/>
</div>
</div>
@}
<div class="checkbox" style="text-align: left">
<label>
<input type="checkbox" name="remember" style="margin-top: 2px;">记住我
</label>
</div>
<button type="submit" class="btn btn-primary block full-width m-b">登 录</button>
</p>
</form>
</div>
</div>
<script>
$(function () {
$("#kaptcha").on('click', function () {
$("#kaptcha").attr('src', '${ctxPath}/kaptcha?' + Math.floor(Math.random() * 100)).fadeIn();
});
});
</script>
</body>
</html>
@layout("/common/_container.html"){
<div class="row">
<div class="col-sm-6 col-sm-offset-3">
<div class="ibox float-e-margins">
<div class="ibox-title">
<h5>代码生成</h5>
</div>
<div class="ibox-content">
<div class="form-horizontal">
<div class="form-group">
<label class="col-sm-2 control-label">模块英文名称</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="moduleName"> <span class="help-block m-b-none">例如:system</span>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">业务名称</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="bizChName"> <span class="help-block m-b-none">例如:测试</span>
</div>
</div>
<div class="hr-line-dashed"></div>
<div class="form-group">
<label class="col-sm-2 control-label">业务英文名称</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="bizEnName"> <span class="help-block m-b-none">例如:test</span>
</div>
</div>
<div class="hr-line-dashed"></div>
<div class="form-group">
<label class="col-sm-2 control-label">输出路径</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="path"> <span class="help-block m-b-none">默认路径为D:\ideaSpace\guns,可修改为您的项目的路径</span>
</div>
</div>
<div class="form-group">
<div class="col-sm-4 col-sm-offset-2">
<button class="btn btn-primary" onclick="Code.generate()">代码生成</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="${ctxPath}/static/modular/system/code/code.js"></script>
@}
@layout("/common/_container.html"){
<div class="row">
<div class="col-sm-12">
<div class="ibox float-e-margins">
<div class="ibox-title">
<h5>部门管理</h5>
</div>
<div class="ibox-content">
<div class="row row-lg">
<div class="col-sm-12">
<div class="row">
<div class="col-sm-3">
<#NameCon id="condition" name="名称" />
</div>
<div class="col-sm-3">
<#button name="搜索" icon="fa-search" clickFun="Dept.search()"/>
</div>
</div>
<div class="hidden-xs" id="DeptTableToolbar" role="group">
@if(shiro.hasPermission("/dept/add")){
<#button name="添加" icon="fa-plus" clickFun="Dept.openAddDept()"/>
@}
@if(shiro.hasPermission("/dept/update")){
<#button name="修改" icon="fa-plus" clickFun="Dept.openDeptDetail()" space="true"/>
@}
@if(shiro.hasPermission("/dept/delete")){
<#button name="删除" icon="fa-plus" clickFun="Dept.delete()" space="true"/>
@}
</div>
<#table id="DeptTable"/>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="${ctxPath}/static/modular/system/dept/dept.js"></script>
@}
@layout("/common/_container.html"){
<div class="ibox float-e-margins">
<div class="ibox-content">
<div class="form-horizontal" id="deptInfoForm">
<input type="hidden" id="id" value="">
<div class="row">
<div class="col-sm-6 b-r">
<#input id="simplename" name="部门名称" underline="true"/>
<#input id="fullname" name="部门全称" underline="true"/>
<#input id="tips" name="备注" underline="true"/>
</div>
<div class="col-sm-6">
<#input id="num" name="排序" underline="true"/>
<#input id="pName" name="上级部门" readonly="readonly" hidden="pid"
clickFun="DeptInfoDlg.showDeptSelectTree(); return false;"
style="background-color: #ffffff !important;"/>
</div>
</div>
<!-- 父级部门的选择框 -->
<div id="parentDeptMenu" class="menuContent"
style="display: none; position: absolute; z-index: 200;">
<ul id="parentDeptMenuTree" class="ztree tree-box" style="width: 245px !important;"></ul>
</div>
<div class="row btn-group-m-t">
<div class="col-sm-10">
<#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="DeptInfoDlg.addSubmit()"/>
<#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="DeptInfoDlg.close()"/>
</div>
</div>
</div>
</div>
</div>
<script src="${ctxPath}/static/modular/system/dept/dept_info.js"></script>
@}
@layout("/common/_container.html"){
<div class="ibox float-e-margins">
<div class="ibox-content">
<div class="form-horizontal" id="deptInfoForm">
<input type="hidden" id="id" value="${dept.id}">
<div class="row">
<div class="col-sm-6 b-r">
<#input id="simplename" name="部门名称" underline="true" value="${dept.simplename}"/>
<#input id="fullname" name="部门全称" underline="true" value="${dept.fullname}"/>
<#input id="tips" name="备注" underline="true" value="${dept.tips}"/>
</div>
<div class="col-sm-6">
<#input id="num" name="排序" underline="true" value="${dept.num}"/>
<#input id="pName" name="上级部门" readonly="readonly" hidden="pid"
hiddenValue="${dept.pid}" value="${pName}"
clickFun="DeptInfoDlg.showDeptSelectTree(); return false;"
style="background-color: #ffffff !important;"/>
</div>
</div>
<!-- 父级部门的选择框 -->
<div id="parentDeptMenu" class="menuContent"
style="display: none; position: absolute; z-index: 200;">
<ul id="parentDeptMenuTree" class="ztree tree-box" style="width: 245px !important;"></ul>
</div>
<div class="row btn-group-m-t">
<div class="col-sm-10">
<#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="DeptInfoDlg.editSubmit()"/>
<#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="DeptInfoDlg.close()"/>
</div>
</div>
</div>
</div>
</div>
<script src="${ctxPath}/static/modular/system/dept/dept_info.js"></script>
@}
@layout("/common/_container.html"){
<div class="row">
<div class="col-sm-12">
<div class="ibox float-e-margins">
<div class="ibox-title">
<h5>字典管理</h5>
</div>
<div class="ibox-content">
<div class="row row-lg">
<div class="col-sm-12">
<div class="row">
<div class="col-sm-3">
<#NameCon id="condition" name="名称" />
</div>
<div class="col-sm-3">
<#button name="搜索" icon="fa-search" clickFun="Dict.search()"/>
</div>
</div>
<div class="hidden-xs" id="DictTableToolbar" role="group">
@if(shiro.hasPermission("/dict/add")){
<#button name="添加" icon="fa-plus" clickFun="Dict.openAddDict()"/>
@}
@if(shiro.hasPermission("/dict/update")){
<#button name="修改" icon="fa-plus" clickFun="Dict.openDictDetail()" space="true"/>
@}
@if(shiro.hasPermission("/dict/delete")){
<#button name="删除" icon="fa-plus" clickFun="Dict.delete()" space="true"/>
@}
</div>
<#table id="DictTable"/>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="${ctxPath}/static/modular/system/dict/dict.js"></script>
@}
@layout("/common/_container.html"){
<div class="ibox float-e-margins">
<div class="ibox-content">
<div class="form-horizontal">
<input type="hidden" id="id" value="">
<div class="row">
<div class="col-sm-12" id="itemsArea">
<div class="form-group">
<label class="col-sm-2 control-label">字典名称</label>
<div class="col-sm-2">
<input class="form-control" id="dictName" type="text">
</div>
<div class="col-sm-2">
<#button btnCss="info" name="增加" icon="fa-plus" clickFun="DictInfoDlg.addItem()"/>
</div>
</div>
<div class="hr-line-dashed"></div>
</div>
</div>
<div class="row btn-group-m-t">
<div class="col-sm-10">
<#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="DictInfoDlg.addSubmit()"/>
<#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="DictInfoDlg.close()"/>
</div>
</div>
</div>
</div>
<script type="text/template" id="itemTemplate">
<div class="form-group" name="dictItem" id="dictItem">
<label class="col-sm-2 control-label"></label>
<div class="col-sm-2">
<input class="form-control" type="text" name="itemNum">
</div>
<label class="col-sm-2 control-label" style="width: 8%;">名称</label>
<div class="col-sm-2">
<input class="form-control" type="text" name="itemName">
</div>
<div class="col-sm-4">
<#button btnCss="danger" name="删除" id="cancel" icon="fa-remove" clickFun="DictInfoDlg.deleteItem(event)"/>
</div>
</div>
</script>
<script src="${ctxPath}/static/modular/system/dict/dict_info.js"></script>
@}
\ No newline at end of file
@layout("/common/_container.html"){
<div class="ibox float-e-margins">
<div class="ibox-content">
<div class="form-horizontal">
<input type="hidden" id="id" value="">
<div class="row">
<div class="col-sm-12" id="itemsArea">
<input type="hidden" id="itemSize" value="${subDicts.~size!0}" />
<div class="form-group">
<label class="col-sm-2 control-label">字典名称</label>
<div class="col-sm-2">
<input class="form-control" id="dictName" type="text" value="${dict.name}">
<input type="hidden" id="dictId" value="${dict.id}">
</div>
<div class="col-sm-2">
<#button btnCss="info" name="增加" icon="fa-plus" clickFun="DictInfoDlg.addItem()"/>
</div>
</div>
<div class="hr-line-dashed"></div>
@for(item in subDicts){
<div class="form-group" name="dictItem" id="dictItem${itemLP.index}">
<label class="col-sm-2 control-label"></label>
<div class="col-sm-2">
<input class="form-control" type="text" name="itemNum" value="${item.num}">
</div>
<label class="col-sm-2 control-label" style="width: 8%;">名称</label>
<div class="col-sm-2">
<input class="form-control" type="text" name="itemName" value="${item.name}">
</div>
<div class="col-sm-4">
<#button btnCss="danger" name="删除" id="cancel" icon="fa-remove" clickFun="DictInfoDlg.deleteItem(event)"/>
</div>
</div>
@}
</input>
</div>
<div class="row btn-group-m-t">
<div class="col-sm-10">
<#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="DictInfoDlg.editSubmit()"/>
<#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="DictInfoDlg.close()"/>
</div>
</div>
</div>
</div>
<script type="text/template" id="itemTemplate">
<div class="form-group" name="dictItem" id="dictItem">
<label class="col-sm-2 control-label"></label>
<div class="col-sm-2">
<input class="form-control" type="text" name="itemNum">
</div>
<label class="col-sm-2 control-label" style="width: 8%;">名称</label>
<div class="col-sm-2">
<input class="form-control" type="text" name="itemName">
</div>
<div class="col-sm-4">
<#button btnCss="danger" name="删除" id="cancel" icon="fa-remove" clickFun="DictInfoDlg.deleteItem(event)"/>
</div>
</div>
</script>
<script src="${ctxPath}/static/modular/system/dict/dict_info.js"></script>
@}
\ No newline at end of file
@layout("/common/_container.html"){
<div class="row">
<div class="col-sm-12">
<div class="ibox float-e-margins">
<div class="ibox-title">
<h5>业务日志</h5>
</div>
<div class="ibox-content">
<div class="row row-lg">
<div class="col-sm-12">
<div class="row">
<div class="col-sm-2">
<#TimeCon id="beginTime" name="开始时间" isTime="false" pattern="YYYY-MM-DD" />
</div>
<div class="col-sm-2">
<#TimeCon id="endTime" name="结束时间" isTime="false" pattern="YYYY-MM-DD" />
</div>
<div class="col-sm-2">
<#NameCon id="logName" name="日志名称" />
</div>
<div class="col-sm-2">
<#SelectCon id="logType" name="日志类型" >
<option value="0">全部</option>
<option value="1">业务日志</option>
<option value="2">异常日志</option>
</#SelectCon>
</div>
<div class="col-sm-2">
<#button name="搜索" icon="fa-search" clickFun="OptLog.search()"/>
</div>
</div>
<div class="hidden-xs" id="OptLogTableToolbar" role="group">
<#button name="查看详情" icon="fa-plus" clickFun="OptLog.detail()"/>
@if(shiro.hasPermission("/log/delLog")){
<#button name="清空日志" icon="fa-plus" clickFun="OptLog.delLog()" space="true"/>
@}
</div>
<#table id="OptLogTable"/>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="${ctxPath}/static/modular/system/log/log.js"></script>
@}
@layout("/common/_container.html"){
<div class="row">
<div class="col-sm-12">
<div class="ibox float-e-margins">
<div class="ibox-title">
<h5>登录日志</h5>
</div>
<div class="ibox-content">
<div class="row row-lg">
<div class="col-sm-12">
<div class="row">
<div class="col-sm-3">
<#TimeCon id="beginTime" name="开始时间" isTime="false" pattern="YYYY-MM-DD" />
</div>
<div class="col-sm-3">
<#TimeCon id="endTime" name="结束时间" isTime="false" pattern="YYYY-MM-DD" />
</div>
<div class="col-sm-3">
<#NameCon id="logName" name="日志名称" />
</div>
<div class="col-sm-3">
<#button name="搜索" icon="fa-search" clickFun="LoginLog.search()"/>
</div>
</div>
<div class="hidden-xs" id="LoginLogTableToolbar" role="group">
<#button name="清空日志" icon="fa-plus" clickFun="LoginLog.delLog()"/>
</div>
<#table id="LoginLogTable"/>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="${ctxPath}/static/modular/system/log/login_log.js"></script>
@}
@layout("/common/_container.html"){
<div class="row">
<div class="col-sm-12">
<div class="ibox float-e-margins">
<div class="ibox-title">
<h5>菜单管理</h5>
</div>
<div class="ibox-content">
<div class="row row-lg">
<div class="col-sm-12">
<div class="row">
<div class="col-sm-3">
<#NameCon id="menuName" name="菜单名称" />
</div>
<div class="col-sm-3">
<#NameCon id="level" name="层级" />
</div>
<div class="col-sm-3">
<#button name="搜索" icon="fa-search" clickFun="Menu.search()"/>
</div>
</div>
<div class="hidden-xs" id="menuTableToolbar" role="group">
@if(shiro.hasPermission("/menu/add")){
<#button name="添加" icon="fa-plus" clickFun="Menu.openAddMenu()"/>
@}
@if(shiro.hasPermission("/menu/edit")){
<#button name="修改" icon="fa-edit" clickFun="Menu.openChangeMenu()" space="true"/>
@}
@if(shiro.hasPermission("/menu/remove")){
<#button name="删除" icon="fa-remove" clickFun="Menu.delMenu()" space="true"/>
@}
</div>
<#table id="menuTable"/>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="${ctxPath}/static/modular/system/menu/menu.js"></script>
@}
@layout("/common/_container.html"){
<div class="ibox float-e-margins">
<div class="ibox-content">
<div class="form-horizontal" id="menuInfoForm">
<input type="hidden" id="id" value="">
<div class="row">
<div class="col-sm-6 b-r">
<#input id="name" name="名称" underline="true" />
<#input id="code" name="菜单编号" underline="true" />
<#input id="pcodeName" name="父级编号" underline="true"
hidden="pcode" readonly="readonly"
clickFun="MenuInfoDlg.showMenuSelectTree(); return false;"
style="background-color: #ffffff !important;"
selectFlag="true" selectId="pcodeTreeDiv" selectTreeId="pcodeTree" selectStyle="width:244px !important;"/>
<#select id="ismenu" name="是否是菜单">
<option value="1"></option>
<option value="0">不是</option>
</#select>
</div>
<div class="col-sm-6">
<#input id="url" name="请求地址" underline="true" />
<#input id="num" name="排序" underline="true" />
<#input id="icon" name="图标" underline="false" />
</div>
</div>
<div class="row btn-group-m-t">
<div class="col-sm-10">
<#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="MenuInfoDlg.addSubmit()"/>
<#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="MenuInfoDlg.close()"/>
</div>
</div>
</div>
</div>
</div>
<script src="${ctxPath}/static/modular/system/menu/menu_info.js"></script>
@}
@layout("/common/_container.html"){
<div class="ibox float-e-margins">
<div class="ibox-content">
<div class="form-horizontal" id="menuInfoForm">
<input type="hidden" id="id" value="${menu.id}">
<input type="hidden" id="ismenuValue" value="${menu.ismenu}">
<div class="row">
<div class="col-sm-6 b-r">
<#input id="name" name="名称" value="${menu.name}" underline="true" />
<#input id="code" name="菜单编号" value="${menu.code}" underline="true" />
<#input id="pcodeName" name="父级编号" value="${menu.pcodeName}" underline="true"
hidden="pcode" readonly="readonly" hiddenValue="${menu.pcode}"
clickFun="MenuInfoDlg.showMenuSelectTree(); return false;"
style="background-color: #ffffff !important;"
selectFlag="true" selectId="pcodeTreeDiv" selectTreeId="pcodeTree" selectStyle="width:244px !important;"/>
<#select id="ismenu" name="是否是菜单">
<option value="1"></option>
<option value="0">不是</option>
</#select>
</div>
<div class="col-sm-6">
<#input id="url" name="请求地址" value="${menu.url}" underline="true" />
<#input id="num" name="排序" value="${menu.num}" underline="true" />
<#input id="icon" name="图标" underline="false" value="${menu.icon}"/>
</div>
</div>
<div class="row btn-group-m-t">
<div class="col-sm-10">
<#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="MenuInfoDlg.editSubmit()"/>
<#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="MenuInfoDlg.close()"/>
</div>
</div>
</div>
</div>
</div>
<script src="${ctxPath}/static/modular/system/menu/menu_info.js"></script>
@}
@layout("/common/_container.html"){
<div class="row">
<div class="col-sm-12">
<div class="ibox float-e-margins">
<div class="ibox-title">
<h5>通知管理</h5>
</div>
<div class="ibox-content">
<div class="row row-lg">
<div class="col-sm-12">
<div class="row">
<div class="col-sm-3">
<#NameCon id="condition" name="名称" />
</div>
<div class="col-sm-3">
<#button name="搜索" icon="fa-search" clickFun="Notice.search()"/>
</div>
</div>
<div class="hidden-xs" id="NoticeTableToolbar" role="group">
@if(shiro.hasPermission("/notice/add")){
<#button name="添加" icon="fa-plus" clickFun="Notice.openAddNotice()"/>
@}
@if(shiro.hasPermission("/notice/update")){
<#button name="修改" icon="fa-plus" clickFun="Notice.openNoticeDetail()" space="true"/>
@}
@if(shiro.hasPermission("/notice/delete")){
<#button name="删除" icon="fa-plus" clickFun="Notice.delete()" space="true"/>
@}
</div>
<#table id="NoticeTable"/>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="${ctxPath}/static/modular/system/notice/notice.js"></script>
@}
@layout("/common/_container.html"){
<div class="ibox float-e-margins">
<div class="ibox-content">
<div class="form-horizontal" id="noticeInfoForm">
<input type="hidden" id="id" value="">
<div class="row">
<div class="col-sm-12">
<div class="form-group">
<label class="col-sm-1 control-label">标题</label>
<div class="col-sm-11">
<input class="form-control" id="title" name="title" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-1 control-label">内容</label>
<div class="col-sm-11">
<div id="editor" class="editorHeight">
</div>
</div>
</div>
</div>
</div>
<div class="row btn-group-m-t">
<div class="col-sm-10">
<#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="NoticeInfoDlg.addSubmit()"/>
<#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="NoticeInfoDlg.close()"/>
</div>
</div>
</div>
</div>
</div>
<script type="text/javascript" src="${ctxPath}/static/js/plugins/wangEditor/wangEditor.js"></script>
<script src="${ctxPath}/static/modular/system/notice/notice_info.js"></script>
@}
@layout("/common/_container.html"){
<div class="ibox float-e-margins">
<div class="ibox-content">
<div class="form-horizontal" id="noticeInfoForm">
<input type="hidden" id="id" value="${notice.id}">
<input type="hidden" id="contentVal" value="${notice.content}">
<div class="row">
<div class="col-sm-12">
<div class="form-group">
<label class="col-sm-1 control-label">标题</label>
<div class="col-sm-11">
<input class="form-control" id="title" name="title" type="text" value="${notice.title}">
</div>
</div>
<div class="form-group">
<label class="col-sm-1 control-label">内容</label>
<div class="col-sm-11">
<div id="editor" class="editorHeight">
</div>
</div>
</div>
</div>
</div>
<div class="row btn-group-m-t">
<div class="col-sm-10">
<#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="NoticeInfoDlg.editSubmit()"/>
<#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="NoticeInfoDlg.close()"/>
</div>
</div>
</div>
</div>
</div>
<script type="text/javascript" src="${ctxPath}/static/js/plugins/wangEditor/wangEditor.js"></script>
<script src="${ctxPath}/static/modular/system/notice/notice_info.js"></script>
@}
@layout("/common/_container.html"){
<div class="row">
<div class="col-sm-12">
<div class="ibox float-e-margins">
<div class="ibox-title">
<h5>角色管理</h5>
</div>
<div class="ibox-content">
<div class="row row-lg">
<div class="col-sm-12">
<div class="row">
<div class="col-sm-3">
<#NameCon id="roleName" name="角色名称" />
</div>
<div class="col-sm-3">
<#button name="搜索" icon="fa-search" clickFun="Role.search()"/>
</div>
</div>
<div class="hidden-xs" id="roleTableToolbar" role="group">
@if(shiro.hasPermission("/role/add")){
<#button name="添加" icon="fa-plus" clickFun="Role.openAddRole()" />
@}
@if(shiro.hasPermission("/role/edit")){
<#button name="修改" icon="fa-edit" clickFun="Role.openChangeRole()" space="true"/>
@}
@if(shiro.hasPermission("/role/remove")){
<#button name="删除" icon="fa-remove" clickFun="Role.delRole()" space="true"/>
@}
@if(shiro.hasPermission("/role/setAuthority")){
<#button name="权限配置" icon="fa-user-secret" clickFun="Role.assign()" space="true"/>
@}
</div>
<#table id="roleTable"/>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="${ctxPath}/static/modular/system/role/role.js"></script>
@}
@layout("/common/_container.html"){
<div class="ibox float-e-margins">
<div class="ibox-content">
<div class="form-horizontal" id="roleInfoForm">
<input type="hidden" id="id" value="">
<div class="row">
<div class="col-sm-6 b-r">
<#input id="name" name="角色名称" underline="true"/>
<#input id="pName" name="上级名称" underline="true" hidden="pid" readonly="readonly"
clickFun="RolInfoDlg.showPNameSelectTree(); return false;"
style="background-color: #ffffff !important;"/>
<#input id="deptName" name="部门名称" hidden="deptid" readonly="readonly"
clickFun="RolInfoDlg.showDeptSelectTree(); return false;"
style="background-color: #ffffff !important;"/>
</div>
<div class="col-sm-6">
<#input id="tips" name="别名" underline="true"/>
<#input id="num" name="排序"/>
</div>
</div>
<!-- 这是部门下拉框 -->
<div id="deptContent" class="menuContent"
style="display: none; position: absolute; z-index: 200;">
<ul id="deptTree" class="ztree tree-box" style="width: 250px !important;"></ul>
</div>
<!-- 这是父级菜单下拉框 -->
<div id="pNameContent" class="menuContent"
style="display: none; position: absolute; z-index: 200;">
<ul id="pNameTree" class="ztree tree-box" style="width: 250px !important;"></ul>
</div>
<div class="row btn-group-m-t">
<div class="col-sm-10">
<#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="RolInfoDlg.addSubmit()"/>
<#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="RolInfoDlg.close()"/>
</div>
</div>
</div>
</div>
</div>
<script src="${ctxPath}/static/modular/system/role/role_info.js"></script>
@}
@layout("/common/_container.html"){
<script type="text/javascript">
$(function () {
var index = parent.layer.getFrameIndex(window.name); //获取窗口索引
$("#btn_close").bind("click", function () {
parent.layer.close(index);
});
$("#btn_save").bind("click", function () {
var ids = Feng.zTreeCheckedNodes("zTree");
var ajax = new $ax(Feng.ctxPath + "/role/setAuthority", function (data) {
Feng.success("分配角色成功!");
window.parent.Role.table.refresh();
parent.layer.close(index);
}, function (data) {
Feng.error("分配角色失败!"
+ data.responseJSON.message + "!");
});
ajax.set("roleId", "${roleId}");
ajax.set("ids", ids);
ajax.start();
});
initZtree();
});
function initZtree() {
var setting = {
check: {
enable: true,
chkboxType: { "Y": "ps", "N": "ps" }
},
data: {
simpleData: {
enable: true
}
}
};
var ztree = new $ZTree("zTree", "/menu/menuTreeListByRoleId/"
+ "${roleId}");
ztree.setSettings(setting);
ztree.init();
}
</script>
<!-- 配置grid -->
<div class="container" style="padding: 0px 10px !important;margin-top: -10px;text-align: center !important;">
<div class="row">
<div class="ibox float-e-margins">
<div class="ibox-title">
<h5>${roleName!}</h5>
</div>
<div class="ibox-content">
<ul id="zTree" class="ztree"></ul>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<button class="btn btn-sm btn-info" type="button" id="btn_save">
<i class="ace-icon fa fa-check bigger-110"></i>保存
</button>
&nbsp;
<button class="btn btn-sm btn-danger" type="button" id="btn_close">
<i class="ace-icon fa fa-close bigger-110"></i>关闭
</button>
</div>
</div>
</div>
@}
@layout("/common/_container.html"){
<div class="ibox float-e-margins">
<div class="ibox-content">
<div class="form-horizontal" id="roleInfoForm">
<input type="hidden" id="id" value="${role.id}">
<div class="row">
<div class="col-sm-6 b-r">
<#input id="name" name="角色名称" underline="true" value="${role.name}"/>
<#input id="pName" name="上级名称" underline="true" hidden="pid" hiddenValue="${role.pid}" readonly="readonly" value="${pName}"
clickFun="RolInfoDlg.showPNameSelectTree(); return false;"
style="background-color: #ffffff !important;"/>
<#input id="deptName" name="部门名称" hidden="deptid" hiddenValue="${role.deptid}" readonly="readonly" value="${deptName}"
clickFun="RolInfoDlg.showDeptSelectTree(); return false;"
style="background-color: #ffffff !important;"/>
</div>
<div class="col-sm-6">
<#input id="tips" name="别名" underline="true" value="${role.tips}"/>
<#input id="num" name="排序" value="${role.num}"/>
</div>
</div>
<!-- 这是部门下拉框 -->
<div id="deptContent" class="menuContent"
style="display: none; position: absolute; z-index: 200;">
<ul id="deptTree" class="ztree tree-box" style="width: 250px !important;"></ul>
</div>
<!-- 这是父级菜单下拉框 -->
<div id="pNameContent" class="menuContent"
style="display: none; position: absolute; z-index: 200;">
<ul id="pNameTree" class="ztree tree-box" style="width: 250px !important;"></ul>
</div>
<div class="row btn-group-m-t">
<div class="col-sm-10">
<#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="RolInfoDlg.editSubmit()"/>
<#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="RolInfoDlg.close()"/>
</div>
</div>
</div>
</div>
</div>
<script src="${ctxPath}/static/modular/system/role/role_info.js"></script>
@}
@layout("/common/_container.html"){
<div class="row">
<div class="col-sm-12">
<div class="ibox float-e-margins">
<div class="ibox-title">
<h5>用户管理</h5>
</div>
<div class="ibox-content">
<div class="row row-lg">
<div class="col-sm-12">
<div class="row">
<div class="col-lg-2 col-sm-3">
<div class="panel panel-default">
<div class="panel-heading">组织机构</div>
<div class="panel-body dept-tree">
<ul id="deptTree" class="ztree"></ul>
</div>
</div>
</div>
<div class="col-lg-10 col-sm-9">
<div class="row">
<div class="col-lg-10 col-sm-9">
<div class="row">
<div class="col-lg-4 col-sm-12">
<#NameCon id="name" name="用户名称" placeholder="帐号/姓名/手机号"/>
</div>
<div class="col-lg-4 col-sm-6">
<#TimeCon id="beginTime" name="注册开始日期" isTime="false" pattern="YYYY-MM-DD"/>
</div>
<div class="col-lg-4 col-sm-6">
<#TimeCon id="endTime" name="注册结束日期" isTime="false" pattern="YYYY-MM-DD"/>
</div>
</div>
</div>
<div class="col-lg-2 col-sm-3">
<div class="row">
<div class="col-lg-12 col-sm-12">
<#button name="搜索" icon="fa-search" clickFun="MgrUser.search()"/>
<#button name="重置" icon="fa-trash" clickFun="MgrUser.resetSearch()" space="true"/>
</div>
</div>
</div>
</div>
<div class="hidden-xs" id="managerTableToolbar" role="group">
@if(shiro.hasPermission("/mgr/add")){
<#button name="添加" icon="fa-plus" clickFun="MgrUser.openAddMgr()"/>
@}
@if(shiro.hasPermission("/mgr/edit")){
<#button name="修改" icon="fa-edit" clickFun="MgrUser.openChangeUser()" space="true"/>
@}
@if(shiro.hasPermission("/mgr/delete")){
<#button name="删除" icon="fa-remove" clickFun="MgrUser.delMgrUser()" space="true"/>
@}
@if(shiro.hasPermission("/mgr/reset")){
<#button name="重置密码" icon="fa-refresh" clickFun="MgrUser.resetPwd()" space="true"/>
@}
@if(shiro.hasPermission("/mgr/freeze")){
<#button name="冻结" icon="fa-warning" clickFun="MgrUser.freezeAccount()" space="true"/>
@}
@if(shiro.hasPermission("/mgr/unfreeze")){
<#button name="解除冻结" icon="fa-check-circle" clickFun="MgrUser.unfreeze()" space="true"/>
@}
@if(shiro.hasPermission("/mgr/setRole")){
<#button name="角色分配" icon="fa-user-secret" clickFun="MgrUser.roleAssign()" space="true"/>
@}
</div>
<#table id="managerTable"/>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="${ctxPath}/static/modular/system/user/user.js"></script>
@}
@layout("/common/_container.html"){
<div class="ibox float-e-margins">
<div class="ibox-content">
<div class="form-horizontal" id="userInfoForm">
<input type="hidden" id="id" value="">
<div class="row">
<div class="col-sm-6 b-r">
<#input id="account" name="账户" underline="true"/>
<#select id="sex" name="性别" underline="true">
<option value="1"></option>
<option value="2"></option>
</#select>
<#input id="password" name="密码" underline="true" type="password"/>
<#input id="roleid" name="角色" underline="true" disabled="disabled"/>
<#input id="email" name="邮箱" type="email"/>
</div>
<div class="col-sm-6">
<div id="driverInfoContent">
<#input id="name" name="姓名" underline="true"/>
<#input id="birthday" name="出生日期" underline="true" type="date"
clickFun="laydate({istime: false, format: 'YYYY-MM-DD'})"/>
<#input id="rePassword" name="确认密码" type="password" underline="true"/>
<#input id="citySel" name="部门" underline="true" readonly="readonly" hidden="deptid"
clickFun="UserInfoDlg.showDeptSelectTree(); return false;"
style="background-color: #ffffff !important;"/>
<#input id="phone" name="电话"/>
</div>
</div>
</div>
<!-- 这是部门选择的下拉框 -->
<div id="menuContent" class="menuContent"
style="display: none; position: absolute; z-index: 200;">
<ul id="treeDemo" class="ztree tree-box" style="width: 249px !important;"></ul>
</div>
<div class="row btn-group-m-t">
<div class="col-sm-10">
<#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="UserInfoDlg.addSubmit()"/>
<#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="UserInfoDlg.close()"/>
</div>
</div>
</div>
</div>
</div>
<script src="${ctxPath}/static/modular/system/user/user_info.js"></script>
@}
@layout("/common/_container.html"){
<div class="col-sm-4 col-sm-offset-4">
<div class="ibox float-e-margins">
<div class="ibox-title">
<h5>修改密码</h5>
</div>
<div class="ibox-content">
<div class="row row-lg">
<div class="col-sm-12">
<div class="ibox float-e-margins">
<div class="ibox-content" style="border:none !important; ">
<div class="form-horizontal">
<div class="row">
<div class="col-sm-12">
<#input id="oldPwd" name="原密码" underline="true" type="password"/>
<#input id="newPwd" name="新密码" underline="true" type="password"/>
<#input id="rePwd" name="新密码验证" type="password"/>
</div>
</div>
<div class="row btn-group-m-t">
<div class="col-sm-10">
<#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="UserInfoDlg.chPwd()"/>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="${ctxPath}/static/modular/system/user/user_info.js"></script>
@}
@layout("/common/_container.html"){
<div class="ibox float-e-margins">
<div class="ibox-content">
<div class="form-horizontal" id="userInfoForm">
<input type="hidden" id="id" value="${user.id}">
<input type="hidden" id="sexValue" value="${user.sex}">
<div class="row">
<div class="col-sm-6 b-r">
<#input id="account" name="账户" underline="true" value="${user.account}"/>
<#select id="sex" name="性别" underline="true">
<option value="1"></option>
<option value="2"></option>
</#select>
<#input id="roleid" name="角色" underline="true" value="${roleName}" disabled="disabled"/>
<#input id="email" name="邮箱" type="email" value="${user.email}"/>
</div>
<div class="col-sm-6">
<div id="driverInfoContent">
<#input id="name" name="姓名" underline="true" value="${user.name}"/>
<#input id="birthday" name="出生日期" underline="true" type="date"
value="${user.birthday}"
clickFun="laydate({istime: false, format: 'YYYY-MM-DD'})" />
<#input id="citySel" name="部门" underline="true" readonly="readonly" hidden="deptid" hiddenValue="${user.deptid}" value="${deptName}"
clickFun="UserInfoDlg.showDeptSelectTree(); return false;"
style="background-color: #ffffff !important;"/>
<#input id="phone" name="电话" value="${user.phone}"/>
</div>
</div>
</div>
<!-- 这是部门选择的下拉框 -->
<div id="menuContent" class="menuContent"
style="display: none; position: absolute; z-index: 200;">
<ul id="treeDemo" class="ztree tree-box" style="width: 249px !important;"></ul>
</div>
<div class="row btn-group-m-t">
<div class="col-sm-10">
<#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="UserInfoDlg.editSubmit()"/>
<#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="UserInfoDlg.close()"/>
</div>
</div>
</div>
</div>
</div>
<script src="${ctxPath}/static/modular/system/user/user_info.js"></script>
@}
@layout("/common/_container.html"){
<script type="text/javascript">
$(function () {
var index = parent.layer.getFrameIndex(window.name); //获取窗口索引
$("#btn_close").bind("click", function () {
parent.layer.close(index);
});
$("#btn_save").bind("click", function () {
var ids = Feng.zTreeCheckedNodes("zTree");
var ajax = new $ax(Feng.ctxPath + "/mgr/setRole", function (data) {
Feng.success("分配角色成功!");
window.parent.MgrUser.table.refresh();
parent.layer.close(index);
}, function (data) {
Feng.error("分配角色失败!" + data.responseJSON.message + "!");
});
ajax.set("roleIds", ids);
ajax.set("userId", "${userId}");
ajax.start();
});
initZtree();
});
function initZtree() {
var setting = {
check: {
enable: true,
chkboxType: {
"Y": "",
"N": ""
}
},
data: {
simpleData: {
enable: true
}
}
};
var ztree = new $ZTree("zTree", "/role/roleTreeListByUserId/${userId}");
ztree.setSettings(setting);
ztree.init();
}
</script>
<!-- 配置grid -->
<div class="container"
style="padding: 0px 10px !important; margin-top: -10px; text-align: center !important;">
<div class="row">
<div class="ibox float-e-margins">
<div class="ibox-title">
<h5>${userAccount!}</h5>
</div>
<div class="ibox-content">
<ul id="zTree" class="ztree"></ul>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<button class="btn btn-sm btn-info" type="button" id="btn_save">
<i class="ace-icon fa fa-check bigger-110"></i> 保存
</button>
&nbsp;
<button class="btn btn-sm btn-danger" type="button" id="btn_close">
<i class="ace-icon fa fa-close bigger-110"></i> 关闭
</button>
</div>
</div>
</div>
@}
@layout("/common/_container.html"){
<div class="col-sm-6 col-sm-offset-3">
<div class="ibox float-e-margins">
<div class="ibox-title">
<h5>用户管理</h5>
</div>
<div class="ibox-content">
<div class="row row-lg">
<div class="col-sm-12">
<div class="ibox float-e-margins">
<div class="ibox-content" style="border:none !important; ">
<div class="form-horizontal" id="userInfoForm">
<input type="hidden" id="id" value="${user.id}">
<input type="hidden" id="sexValue" value="${user.sex}">
<div class="row">
<div class="col-sm-6 b-r">
<#avatar id="avatar" name="头像" underline="true" avatarImg="${user.avatar}"/>
<#input id="account" name="账户" underline="true" value="${user.account}" disabled="disabled" />
<#select id="sex" name="性别" underline="true" value="${user.sex}">
<option value="1"></option>
<option value="2"></option>
</#select>
<#input id="roleid" name="角色" underline="true" value="${roleName}" disabled="disabled"/>
<#input id="email" name="邮箱" type="email" value="${user.email}"/>
</div>
<div class="col-sm-6">
<div id="driverInfoContent">
<#input id="name" name="姓名" underline="true" value="${user.name}"/>
<#input id="birthday" name="出生日期" underline="true" type="date"
value="${user.birthday}"
clickFun="laydate({istime: false, format: 'YYYY-MM-DD'})"/>
<#input id="citySel" name="部门" underline="true" readonly="readonly" value="${deptName}"
hidden="deptid" hiddenValue="${user.deptid}"
clickFun="UserInfoDlg.showInfoDeptSelectTree(); return false;"
style="background-color: #ffffff !important;"
selectFlag="true" selectId="menuContent" selectTreeId="treeDemo" selectStyle="width:250px !important;"/>
<#input id="phone" name="电话" value="${user.phone}"/>
</div>
</div>
</div>
<div class="progress progress-striped" id="progressTipArea" style="margin-top: 20px;">
<div id="progressBar" style="width: 0%" aria-valuemax="100" aria-valuemin="0" aria-valuenow="0" role="progressbar" class="progress-bar progress-bar-info">
</div>
</div>
<div class="row btn-group-m-t">
<div class="col-sm-10">
<#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="UserInfoDlg.editSubmit()"/>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="${ctxPath}/static/modular/system/user/user_info.js"></script>
@}
package ${controller.packageName};
<% for(import in controller.imports!){ %>
import ${import};
<% } %>
/**
* ${context.bizChName}控制器
*
* @author fengshuonan
* @Date ${tool.currentTime()}
*/
@Controller
@RequestMapping("/${context.bizEnName}")
public class ${context.bizEnBigName}Controller extends BaseController {
private String PREFIX = "/${context.moduleName}/${context.bizEnName}/";
/**
* 跳转到${context.bizChName}首页
*/
@RequestMapping("")
public String index() {
return PREFIX + "${context.bizEnName}.html";
}
/**
* 跳转到添加${context.bizChName}
*/
@RequestMapping("/${context.bizEnName}_add")
public String ${context.bizEnName}Add() {
return PREFIX + "${context.bizEnName}_add.html";
}
/**
* 跳转到修改${context.bizChName}
*/
@RequestMapping("/${context.bizEnName}_update/{${context.bizEnName}Id}")
public String ${context.bizEnName}Update(@PathVariable Integer ${context.bizEnName}Id, Model model) {
return PREFIX + "${context.bizEnName}_edit.html";
}
/**
* 获取${context.bizChName}列表
*/
@RequestMapping(value = "/list")
@ResponseBody
public Object list(String condition) {
return null;
}
/**
* 新增${context.bizChName}
*/
@RequestMapping(value = "/add")
@ResponseBody
public Object add() {
return super.SUCCESS_TIP;
}
/**
* 删除${context.bizChName}
*/
@RequestMapping(value = "/delete")
@ResponseBody
public Object delete() {
return SUCCESS_TIP;
}
/**
* 修改${context.bizChName}
*/
@RequestMapping(value = "/update")
@ResponseBody
public Object update() {
return super.SUCCESS_TIP;
}
/**
* ${context.bizChName}详情
*/
@RequestMapping(value = "/detail")
@ResponseBody
public Object detail() {
return null;
}
}
@layout("/common/_container.html"){
<div class="row">
<div class="col-sm-12">
<div class="ibox float-e-margins">
<div class="ibox-title">
<h5>${context.bizChName}管理</h5>
</div>
<div class="ibox-content">
<div class="row row-lg">
<div class="col-sm-12">
<div class="row">
<div class="col-sm-3">
<#NameCon id="condition" name="名称" />
</div>
<div class="col-sm-3">
<#button name="搜索" icon="fa-search" clickFun="${context.bizEnBigName}.search()"/>
</div>
</div>
<div class="hidden-xs" id="${context.bizEnBigName}TableToolbar" role="group">
@if(shiro.hasPermission("/${context.bizEnName}/add")){
<#button name="添加" icon="fa-plus" clickFun="${context.bizEnBigName}.openAdd${context.bizEnBigName}()"/>
@}
@if(shiro.hasPermission("/${context.bizEnName}/update")){
<#button name="修改" icon="fa-plus" clickFun="${context.bizEnBigName}.open${context.bizEnBigName}Detail()" space="true"/>
@}
@if(shiro.hasPermission("/${context.bizEnName}/delete")){
<#button name="删除" icon="fa-plus" clickFun="${context.bizEnBigName}.delete()" space="true"/>
@}
</div>
<#table id="${context.bizEnBigName}Table"/>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="\${ctxPath}/static/modular/${context.moduleName}/${context.bizEnName}/${context.bizEnName}.js"></script>
@}
/**
* ${context.bizChName}管理初始化
*/
var ${context.bizEnBigName} = {
id: "${context.bizEnBigName}Table", //表格id
seItem: null, //选中的条目
table: null,
layerIndex: -1
};
/**
* 初始化表格的列
*/
${context.bizEnBigName}.initColumn = function () {
return [
{field: 'selectItem', radio: true},
{title: 'id', field: 'id', visible: false, align: 'center', valign: 'middle'}
];
};
/**
* 检查是否选中
*/
${context.bizEnBigName}.check = function () {
var selected = $('#' + this.id).bootstrapTable('getSelections');
if(selected.length == 0){
Feng.info("请先选中表格中的某一记录!");
return false;
}else{
${context.bizEnBigName}.seItem = selected[0];
return true;
}
};
/**
* 点击添加${context.bizChName}
*/
${context.bizEnBigName}.openAdd${context.bizEnBigName} = function () {
var index = layer.open({
type: 2,
title: '添加${context.bizChName}',
area: ['800px', '420px'], //宽高
fix: false, //不固定
maxmin: true,
content: Feng.ctxPath + '/${context.bizEnName}/${context.bizEnName}_add'
});
this.layerIndex = index;
};
/**
* 打开查看${context.bizChName}详情
*/
${context.bizEnBigName}.open${context.bizEnBigName}Detail = function () {
if (this.check()) {
var index = layer.open({
type: 2,
title: '${context.bizChName}详情',
area: ['800px', '420px'], //宽高
fix: false, //不固定
maxmin: true,
content: Feng.ctxPath + '/${context.bizEnName}/${context.bizEnName}_update/' + ${context.bizEnBigName}.seItem.id
});
this.layerIndex = index;
}
};
/**
* 删除${context.bizChName}
*/
${context.bizEnBigName}.delete = function () {
if (this.check()) {
var ajax = new $ax(Feng.ctxPath + "/${context.bizEnName}/delete", function (data) {
Feng.success("删除成功!");
${context.bizEnBigName}.table.refresh();
}, function (data) {
Feng.error("删除失败!" + data.responseJSON.message + "!");
});
ajax.set("${context.bizEnName}Id",this.seItem.id);
ajax.start();
}
};
/**
* 查询${context.bizChName}列表
*/
${context.bizEnBigName}.search = function () {
var queryData = {};
queryData['condition'] = $("#condition").val();
${context.bizEnBigName}.table.refresh({query: queryData});
};
$(function () {
var defaultColunms = ${context.bizEnBigName}.initColumn();
var table = new BSTable(${context.bizEnBigName}.id, "/${context.bizEnName}/list", defaultColunms);
table.setPaginationType("client");
${context.bizEnBigName}.table = table.init();
});
@layout("/common/_container.html"){
<div class="ibox float-e-margins">
<div class="ibox-content">
<div class="form-horizontal">
<input type="hidden" id="id" value="">
<div class="row">
<div class="col-sm-6 b-r">
</div>
<div class="col-sm-6">
</div>
</div>
<div class="row btn-group-m-t">
<div class="col-sm-10">
<#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="${context.bizEnBigName}InfoDlg.addSubmit()"/>
<#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="${context.bizEnBigName}InfoDlg.close()"/>
</div>
</div>
</div>
</div>
</div>
<script src="\${ctxPath}/static/modular/${context.moduleName}/${context.bizEnName}/${context.bizEnName}_info.js"></script>
@}
@layout("/common/_container.html"){
<div class="ibox float-e-margins">
<div class="ibox-content">
<div class="form-horizontal">
<input type="hidden" id="id" value="\${${context.bizEnName}.id}">
<div class="row">
<div class="col-sm-6 b-r">
</div>
<div class="col-sm-6">
</div>
</div>
<div class="row btn-group-m-t">
<div class="col-sm-10">
<#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="${context.bizEnBigName}InfoDlg.editSubmit()"/>
<#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="${context.bizEnBigName}InfoDlg.close()"/>
</div>
</div>
</div>
</div>
</div>
<script src="\${ctxPath}/static/modular/${context.moduleName}/${context.bizEnName}/${context.bizEnName}_info.js"></script>
@}
/**
* 初始化${context.bizChName}详情对话框
*/
var ${context.bizEnBigName}InfoDlg = {
${context.bizEnName}InfoData : {}
};
/**
* 清除数据
*/
${context.bizEnBigName}InfoDlg.clearData = function() {
this.${context.bizEnName}InfoData = {};
}
/**
* 设置对话框中的数据
*
* @param key 数据的名称
* @param val 数据的具体值
*/
${context.bizEnBigName}InfoDlg.set = function(key, val) {
this.${context.bizEnName}InfoData[key] = (typeof val == "undefined") ? $("#" + key).val() : val;
return this;
}
/**
* 设置对话框中的数据
*
* @param key 数据的名称
* @param val 数据的具体值
*/
${context.bizEnBigName}InfoDlg.get = function(key) {
return $("#" + key).val();
}
/**
* 关闭此对话框
*/
${context.bizEnBigName}InfoDlg.close = function() {
parent.layer.close(window.parent.${context.bizEnBigName}.layerIndex);
}
/**
* 收集数据
*/
${context.bizEnBigName}InfoDlg.collectData = function() {
this.set('id');
}
/**
* 提交添加
*/
${context.bizEnBigName}InfoDlg.addSubmit = function() {
this.clearData();
this.collectData();
//提交信息
var ajax = new $ax(Feng.ctxPath + "/${context.bizEnName}/add", function(data){
Feng.success("添加成功!");
window.parent.${context.bizEnBigName}.table.refresh();
${context.bizEnBigName}InfoDlg.close();
},function(data){
Feng.error("添加失败!" + data.responseJSON.message + "!");
});
ajax.set(this.${context.bizEnName}InfoData);
ajax.start();
}
/**
* 提交修改
*/
${context.bizEnBigName}InfoDlg.editSubmit = function() {
this.clearData();
this.collectData();
//提交信息
var ajax = new $ax(Feng.ctxPath + "/${context.bizEnName}/update", function(data){
Feng.success("修改成功!");
window.parent.${context.bizEnBigName}.table.refresh();
${context.bizEnBigName}InfoDlg.close();
},function(data){
Feng.error("修改失败!" + data.responseJSON.message + "!");
});
ajax.set(this.${context.bizEnName}InfoData);
ajax.start();
}
$(function() {
});
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 此xml在spring-boot-1.5.3.RELEASE.jar里 -->
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
<!-- 开启后可以通过jmx动态控制日志级别(springboot Admin的功能) -->
<!--<jmxConfigurator/>-->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${LOG_PATH}${LOG_FILE}</File>
<encoder>
<pattern>%date [%level] [%thread] %logger{60} [%file : %line] %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 添加.gz 历史日志会启用压缩 大大缩小日志文件所占空间 -->
<fileNamePattern>${LOG_PATH}daily/${LOG_FILE}.%d{yyyy-MM-dd}.gz</fileNamePattern>
<maxHistory>30</maxHistory><!-- 保留30天日志 -->
</rollingPolicy>
</appender>
<!--<logger name="org.springframework" level="error"/>-->
<!--<logger name="jdbc.connection" level="OFF"/>-->
<!--<logger name="org.apache" level="error"/>-->
<!--<logger name="com.alibaba" level="error"/>-->
<!--<logger name="org.apache.kafka.clients.producer.ProducerConfig" level="warn"/>-->
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
</configuration>
\ No newline at end of file
.button-margin {
margin-left: 15px !important;
}
.input-none-margin {
margin: 0px !important;
}
.btn-margin-left {
margin-left: 15px !important;
}
.table-head {
float: left;
width: 100%;
height: auto;
}
.head-scu-label {
margin-top: 35px;
}
.head-scu-btn {
margin-top: 68px;
}
.line-margin {
margin: 8px 0 !important;
}
.be-driver-checkbox {
margin-top: 7px;
}
.btn-group-m-t {
margin-top: 20px;
}
.upload-btn {
white-space: nowrap;
}
.tree-box {
border-radius: 0px !important;
box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.2) !important;
background: rgb(250, 250, 250) none repeat scroll 0% 0% !important;
border: 1px solid rgb(204, 204, 204) !important;
overflow-y: scroll !important;
overflow-x: auto !important;
margin-top: 0px !important;
width: 224px !important;
max-height: 160px !important;
-moz-user-select: none !important;
}
.dept-tree {
padding:10px
}
.editorHeight{
height: 170px;
}
\ No newline at end of file
html{height: 100%;}
body.signin {
background: #18c8f6;
height: auto;
background:url("../img/login-background.jpg") no-repeat center fixed;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
color: rgba(255,255,255,.95);
}
.signinpanel {
width: 750px;
margin: 10% auto 0 auto;
}
.signinpanel .logopanel {
float: none;
width: auto;
padding: 0;
background: none;
}
.signinpanel .signin-info ul {
list-style: none;
padding: 0;
margin: 20px 0;
}
.signinpanel .form-control {
display: block;
margin-top: 15px;
}
.signinpanel .uname {
background: #fff url(../img/user.png) no-repeat 95% center;color:#333;
}
.signinpanel .pword {
background: #fff url(../img/locked.png) no-repeat 95% center;color:#333;
}
.signinpanel .btn {
margin-top: 15px;
}
.signinpanel form {
background: rgba(255, 255, 255, 0.2);
border: 1px solid rgba(255,255,255,.3);
-moz-box-shadow: 0 3px 0 rgba(12, 12, 12, 0.03);
-webkit-box-shadow: 0 3px 0 rgba(12, 12, 12, 0.03);
box-shadow: 0 3px 0 rgba(12, 12, 12, 0.03);
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
padding: 30px;
}
.signup-footer{border-top: solid 1px rgba(255,255,255,.3);margin:20px 0;padding-top: 15px;}
@media screen and (max-width: 768px) {
.signinpanel,
.signuppanel {
margin: 0 auto;
width: 420px!important;
padding: 20px;
}
.signinpanel form {
margin-top: 20px;
}
.signup-footer {
margin-bottom: 10px;
}
.signuppanel .form-control {
margin-bottom: 10px;
}
.signup-footer .pull-left,
.signup-footer .pull-right {
float: none !important;
text-align: center;
}
.signinpanel .signin-info ul {
display: none;
}
}
@media screen and (max-width: 320px) {
.signinpanel,
.signuppanel {
margin:0 20px;
width:auto;
}
}
@charset "UTF-8";
/*
* blueimp Gallery Indicator CSS 1.1.0
* https://github.com/blueimp/Gallery
*
* Copyright 2013, Sebastian Tschan
* https://blueimp.net
*
* Licensed under the MIT license:
* http://www.opensource.org/licenses/MIT
*/
.blueimp-gallery > .indicator {
position: absolute;
top: auto;
right: 15px;
bottom: 15px;
left: 15px;
margin: 0 40px;
padding: 0;
list-style: none;
text-align: center;
line-height: 10px;
display: none;
}
.blueimp-gallery > .indicator > li {
display: inline-block;
width: 9px;
height: 9px;
margin: 6px 3px 0 3px;
-webkit-box-sizing: content-box;
-moz-box-sizing: content-box;
box-sizing: content-box;
border: 1px solid transparent;
background: #ccc;
background: rgba(255, 255, 255, 0.25) center no-repeat;
border-radius: 5px;
box-shadow: 0 0 2px #000;
opacity: 0.5;
cursor: pointer;
}
.blueimp-gallery > .indicator > li:hover,
.blueimp-gallery > .indicator > .active {
background-color: #fff;
border-color: #fff;
opacity: 1;
}
.blueimp-gallery-controls > .indicator {
display: block;
/* Fix z-index issues (controls behind slide element) on Android: */
-webkit-transform: translateZ(0);
-moz-transform: translateZ(0);
-ms-transform: translateZ(0);
-o-transform: translateZ(0);
transform: translateZ(0);
}
.blueimp-gallery-single > .indicator {
display: none;
}
.blueimp-gallery > .indicator {
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
/* IE7 fixes */
*+html .blueimp-gallery > .indicator > li {
display: inline;
}
@charset "UTF-8";
/*
* blueimp Gallery Video Factory CSS 1.3.0
* https://github.com/blueimp/Gallery
*
* Copyright 2013, Sebastian Tschan
* https://blueimp.net
*
* Licensed under the MIT license:
* http://www.opensource.org/licenses/MIT
*/
.blueimp-gallery > .slides > .slide > .video-content > img {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
margin: auto;
width: auto;
height: auto;
max-width: 100%;
max-height: 100%;
/* Prevent artifacts in Mozilla Firefox: */
-moz-backface-visibility: hidden;
}
.blueimp-gallery > .slides > .slide > .video-content > video {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.blueimp-gallery > .slides > .slide > .video-content > iframe {
position: absolute;
top: 100%;
left: 0;
width: 100%;
height: 100%;
border: none;
}
.blueimp-gallery > .slides > .slide > .video-playing > iframe {
top: 0;
}
.blueimp-gallery > .slides > .slide > .video-content > a {
position: absolute;
top: 50%;
right: 0;
left: 0;
margin: -64px auto 0;
width: 128px;
height: 128px;
background: url(../img/video-play.png) center no-repeat;
opacity: 0.8;
cursor: pointer;
}
.blueimp-gallery > .slides > .slide > .video-content > a:hover {
opacity: 1;
}
.blueimp-gallery > .slides > .slide > .video-playing > a,
.blueimp-gallery > .slides > .slide > .video-playing > img {
display: none;
}
.blueimp-gallery > .slides > .slide > .video-content > video {
display: none;
}
.blueimp-gallery > .slides > .slide > .video-playing > video {
display: block;
}
.blueimp-gallery > .slides > .slide > .video-loading > a {
background: url(../img/loading.gif) center no-repeat;
background-size: 64px 64px;
}
/* Replace PNGs with SVGs for capable browsers (excluding IE<9) */
body:last-child .blueimp-gallery > .slides > .slide > .video-content:not(.video-loading) > a {
background-image: url(../img/video-play.svg);
}
/* IE7 fixes */
*+html .blueimp-gallery > .slides > .slide > .video-content {
height: 100%;
}
*+html .blueimp-gallery > .slides > .slide > .video-content > a {
left: 50%;
margin-left: -64px;
}
@charset "UTF-8";
/*
* blueimp Gallery CSS 2.11.1
* https://github.com/blueimp/Gallery
*
* Copyright 2013, Sebastian Tschan
* https://blueimp.net
*
* Licensed under the MIT license:
* http://www.opensource.org/licenses/MIT
*/
.blueimp-gallery,
.blueimp-gallery > .slides > .slide > .slide-content {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
/* Prevent artifacts in Mozilla Firefox: */
-moz-backface-visibility: hidden;
}
.blueimp-gallery > .slides > .slide > .slide-content {
margin: auto;
width: auto;
height: auto;
max-width: 100%;
max-height: 100%;
opacity: 1;
}
.blueimp-gallery {
position: fixed;
z-index: 999999;
overflow: hidden;
background: #000;
background: rgba(0, 0, 0, 0.9);
opacity: 0;
display: none;
direction: ltr;
-ms-touch-action: none;
touch-action: none;
}
.blueimp-gallery-carousel {
position: relative;
z-index: auto;
margin: 1em auto;
/* Set the carousel width/height ratio to 16/9: */
padding-bottom: 56.25%;
box-shadow: 0 0 10px #000;
-ms-touch-action: pan-y;
touch-action: pan-y;
}
.blueimp-gallery-display {
display: block;
opacity: 1;
}
.blueimp-gallery > .slides {
position: relative;
height: 100%;
overflow: hidden;
}
.blueimp-gallery-carousel > .slides {
position: absolute;
}
.blueimp-gallery > .slides > .slide {
position: relative;
float: left;
height: 100%;
text-align: center;
-webkit-transition-timing-function: cubic-bezier(0.645, 0.045, 0.355, 1.000);
-moz-transition-timing-function: cubic-bezier(0.645, 0.045, 0.355, 1.000);
-ms-transition-timing-function: cubic-bezier(0.645, 0.045, 0.355, 1.000);
-o-transition-timing-function: cubic-bezier(0.645, 0.045, 0.355, 1.000);
transition-timing-function: cubic-bezier(0.645, 0.045, 0.355, 1.000);
}
.blueimp-gallery,
.blueimp-gallery > .slides > .slide > .slide-content {
-webkit-transition: opacity 0.5s linear;
-moz-transition: opacity 0.5s linear;
-ms-transition: opacity 0.5s linear;
-o-transition: opacity 0.5s linear;
transition: opacity 0.5s linear;
}
.blueimp-gallery > .slides > .slide-loading {
background: url(../img/loading.gif) center no-repeat;
background-size: 64px 64px;
}
.blueimp-gallery > .slides > .slide-loading > .slide-content {
opacity: 0;
}
.blueimp-gallery > .slides > .slide-error {
background: url(../img/error.png) center no-repeat;
}
.blueimp-gallery > .slides > .slide-error > .slide-content {
display: none;
}
.blueimp-gallery > .prev,
.blueimp-gallery > .next {
position: absolute;
top: 50%;
left: 15px;
width: 40px;
height: 40px;
margin-top: -23px;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 60px;
font-weight: 100;
line-height: 30px;
color: #fff;
text-decoration: none;
text-shadow: 0 0 2px #000;
text-align: center;
background: #222;
background: rgba(0, 0, 0, 0.5);
-webkit-box-sizing: content-box;
-moz-box-sizing: content-box;
box-sizing: content-box;
border: 3px solid #fff;
-webkit-border-radius: 23px;
-moz-border-radius: 23px;
border-radius: 23px;
opacity: 0.5;
cursor: pointer;
display: none;
}
.blueimp-gallery > .next {
left: auto;
right: 15px;
}
.blueimp-gallery > .close,
.blueimp-gallery > .title {
position: absolute;
top: 15px;
left: 15px;
margin: 0 40px 0 0;
font-size: 20px;
line-height: 30px;
color: #fff;
text-shadow: 0 0 2px #000;
opacity: 0.8;
display: none;
}
.blueimp-gallery > .close {
padding: 15px;
right: 15px;
left: auto;
margin: -15px;
font-size: 30px;
text-decoration: none;
cursor: pointer;
}
.blueimp-gallery > .play-pause {
position: absolute;
right: 15px;
bottom: 15px;
width: 15px;
height: 15px;
background: url(../img/play-pause.png) 0 0 no-repeat;
cursor: pointer;
opacity: 0.5;
display: none;
}
.blueimp-gallery-playing > .play-pause {
background-position: -15px 0;
}
.blueimp-gallery > .prev:hover,
.blueimp-gallery > .next:hover,
.blueimp-gallery > .close:hover,
.blueimp-gallery > .title:hover,
.blueimp-gallery > .play-pause:hover {
color: #fff;
opacity: 1;
}
.blueimp-gallery-controls > .prev,
.blueimp-gallery-controls > .next,
.blueimp-gallery-controls > .close,
.blueimp-gallery-controls > .title,
.blueimp-gallery-controls > .play-pause {
display: block;
/* Fix z-index issues (controls behind slide element) on Android: */
-webkit-transform: translateZ(0);
-moz-transform: translateZ(0);
-ms-transform: translateZ(0);
-o-transform: translateZ(0);
transform: translateZ(0);
}
.blueimp-gallery-single > .prev,
.blueimp-gallery-left > .prev,
.blueimp-gallery-single > .next,
.blueimp-gallery-right > .next,
.blueimp-gallery-single > .play-pause {
display: none;
}
.blueimp-gallery > .slides > .slide > .slide-content,
.blueimp-gallery > .prev,
.blueimp-gallery > .next,
.blueimp-gallery > .close,
.blueimp-gallery > .play-pause {
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
/* Replace PNGs with SVGs for capable browsers (excluding IE<9) */
body:last-child .blueimp-gallery > .slides > .slide-error {
background-image: url(../img/error.svg);
}
body:last-child .blueimp-gallery > .play-pause {
width: 20px;
height: 20px;
background-size: 40px 20px;
background-image: url(../img/play-pause.svg);
}
body:last-child .blueimp-gallery-playing > .play-pause {
background-position: -20px 0;
}
/* IE7 fixes */
*+html .blueimp-gallery > .slides > .slide {
min-height: 300px;
}
*+html .blueimp-gallery > .slides > .slide > .slide-content {
position: relative;
}
@charset "UTF-8";.blueimp-gallery,.blueimp-gallery>.slides>.slide>.slide-content{position:absolute;top:0;right:0;bottom:0;left:0;-moz-backface-visibility:hidden}.blueimp-gallery>.slides>.slide>.slide-content{margin:auto;width:auto;height:auto;max-width:100%;max-height:100%;opacity:1}.blueimp-gallery{position:fixed;z-index:999999;overflow:hidden;background:#000;background:rgba(0,0,0,.9);opacity:0;display:none;direction:ltr;-ms-touch-action:none;touch-action:none}.blueimp-gallery-carousel{position:relative;z-index:auto;margin:1em auto;padding-bottom:56.25%;box-shadow:0 0 10px #000;-ms-touch-action:pan-y;touch-action:pan-y}.blueimp-gallery-display{display:block;opacity:1}.blueimp-gallery>.slides{position:relative;height:100%;overflow:hidden}.blueimp-gallery-carousel>.slides{position:absolute}.blueimp-gallery>.slides>.slide{position:relative;float:left;height:100%;text-align:center;-webkit-transition-timing-function:cubic-bezier(0.645,.045,.355,1);-moz-transition-timing-function:cubic-bezier(0.645,.045,.355,1);-ms-transition-timing-function:cubic-bezier(0.645,.045,.355,1);-o-transition-timing-function:cubic-bezier(0.645,.045,.355,1);transition-timing-function:cubic-bezier(0.645,.045,.355,1)}.blueimp-gallery,.blueimp-gallery>.slides>.slide>.slide-content{-webkit-transition:opacity .5s linear;-moz-transition:opacity .5s linear;-ms-transition:opacity .5s linear;-o-transition:opacity .5s linear;transition:opacity .5s linear}.blueimp-gallery>.slides>.slide-loading{background:url(../img/loading.gif) center no-repeat;background-size:64px 64px}.blueimp-gallery>.slides>.slide-loading>.slide-content{opacity:0}.blueimp-gallery>.slides>.slide-error{background:url(../img/error.png) center no-repeat}.blueimp-gallery>.slides>.slide-error>.slide-content{display:none}.blueimp-gallery>.prev,.blueimp-gallery>.next{position:absolute;top:50%;left:15px;width:40px;height:40px;margin-top:-23px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-decoration:none;text-shadow:0 0 2px #000;text-align:center;background:#222;background:rgba(0,0,0,.5);-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;cursor:pointer;display:none}.blueimp-gallery>.next{left:auto;right:15px}.blueimp-gallery>.close,.blueimp-gallery>.title{position:absolute;top:15px;left:15px;margin:0 40px 0 0;font-size:20px;line-height:30px;color:#fff;text-shadow:0 0 2px #000;opacity:.8;display:none}.blueimp-gallery>.close{padding:15px;right:15px;left:auto;margin:-15px;font-size:30px;text-decoration:none;cursor:pointer}.blueimp-gallery>.play-pause{position:absolute;right:15px;bottom:15px;width:15px;height:15px;background:url(../img/play-pause.png) 0 0 no-repeat;cursor:pointer;opacity:.5;display:none}.blueimp-gallery-playing>.play-pause{background-position:-15px 0}.blueimp-gallery>.prev:hover,.blueimp-gallery>.next:hover,.blueimp-gallery>.close:hover,.blueimp-gallery>.title:hover,.blueimp-gallery>.play-pause:hover{color:#fff;opacity:1}.blueimp-gallery-controls>.prev,.blueimp-gallery-controls>.next,.blueimp-gallery-controls>.close,.blueimp-gallery-controls>.title,.blueimp-gallery-controls>.play-pause{display:block;-webkit-transform:translateZ(0);-moz-transform:translateZ(0);-ms-transform:translateZ(0);-o-transform:translateZ(0);transform:translateZ(0)}.blueimp-gallery-single>.prev,.blueimp-gallery-left>.prev,.blueimp-gallery-single>.next,.blueimp-gallery-right>.next,.blueimp-gallery-single>.play-pause{display:none}.blueimp-gallery>.slides>.slide>.slide-content,.blueimp-gallery>.prev,.blueimp-gallery>.next,.blueimp-gallery>.close,.blueimp-gallery>.play-pause{-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body:last-child .blueimp-gallery>.slides>.slide-error{background-image:url(../img/error.svg)}body:last-child .blueimp-gallery>.play-pause{width:20px;height:20px;background-size:40px 20px;background-image:url(../img/play-pause.svg)}body:last-child .blueimp-gallery-playing>.play-pause{background-position:-20px 0}*+html .blueimp-gallery>.slides>.slide{min-height:300px}*+html .blueimp-gallery>.slides>.slide>.slide-content{position:relative}@charset "UTF-8";.blueimp-gallery>.indicator{position:absolute;top:auto;right:15px;bottom:15px;left:15px;margin:0 40px;padding:0;list-style:none;text-align:center;line-height:10px;display:none}.blueimp-gallery>.indicator>li{display:inline-block;width:9px;height:9px;margin:6px 3px 0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;border:1px solid transparent;background:#ccc;background:rgba(255,255,255,.25)center no-repeat;border-radius:5px;box-shadow:0 0 2px #000;opacity:.5;cursor:pointer}.blueimp-gallery>.indicator>li:hover,.blueimp-gallery>.indicator>.active{background-color:#fff;border-color:#fff;opacity:1}.blueimp-gallery-controls>.indicator{display:block;-webkit-transform:translateZ(0);-moz-transform:translateZ(0);-ms-transform:translateZ(0);-o-transform:translateZ(0);transform:translateZ(0)}.blueimp-gallery-single>.indicator{display:none}.blueimp-gallery>.indicator{-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}*+html .blueimp-gallery>.indicator>li{display:inline}@charset "UTF-8";.blueimp-gallery>.slides>.slide>.video-content>img{position:absolute;top:0;right:0;bottom:0;left:0;margin:auto;width:auto;height:auto;max-width:100%;max-height:100%;-moz-backface-visibility:hidden}.blueimp-gallery>.slides>.slide>.video-content>video{position:absolute;top:0;left:0;width:100%;height:100%}.blueimp-gallery>.slides>.slide>.video-content>iframe{position:absolute;top:100%;left:0;width:100%;height:100%;border:none}.blueimp-gallery>.slides>.slide>.video-playing>iframe{top:0}.blueimp-gallery>.slides>.slide>.video-content>a{position:absolute;top:50%;right:0;left:0;margin:-64px auto 0;width:128px;height:128px;background:url(../img/video-play.png) center no-repeat;opacity:.8;cursor:pointer}.blueimp-gallery>.slides>.slide>.video-content>a:hover{opacity:1}.blueimp-gallery>.slides>.slide>.video-playing>a,.blueimp-gallery>.slides>.slide>.video-playing>img{display:none}.blueimp-gallery>.slides>.slide>.video-content>video{display:none}.blueimp-gallery>.slides>.slide>.video-playing>video{display:block}.blueimp-gallery>.slides>.slide>.video-loading>a{background:url(../img/loading.gif) center no-repeat;background-size:64px 64px}body:last-child .blueimp-gallery>.slides>.slide>.video-content:not(.video-loading)>a{background-image:url(../img/video-play.svg)}*+html .blueimp-gallery>.slides>.slide>.video-content{height:100%}*+html .blueimp-gallery>.slides>.slide>.video-content>a{left:50%;margin-left:-64px}
/*
* blueimp Gallery Demo CSS 2.0.0
* https://github.com/blueimp/Gallery
*
* Copyright 2013, Sebastian Tschan
* https://blueimp.net
*
* Licensed under the MIT license:
* http://www.opensource.org/licenses/MIT
*/
body {
max-width: 750px;
margin: 0 auto;
padding: 1em;
font-family: 'Lucida Grande', 'Lucida Sans Unicode', Arial, sans-serif;
font-size: 1em;
line-height: 1.4em;
background: #222;
color: #fff;
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
}
a {
color: orange;
text-decoration: none;
}
img {
border: 0;
vertical-align: middle;
}
h1 {
line-height: 1em;
}
h2,
.links {
text-align: center;
}
@media (min-width: 481px) {
.navigation {
list-style: none;
padding: 0;
}
.navigation li {
display: inline-block;
}
.navigation li:not(:first-child):before {
content: '| ';
}
}
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="64" height="64">
<circle cx="32" cy="32" r="25" stroke="red" stroke-width="7" fill="black" fill-opacity="0.2"/>
<rect x="28" y="7" width="8" height="50" fill="red" transform="rotate(45, 32, 32)"/>
</svg>
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="30" height="15">
<polygon points="2,1 2,14 13,7" stroke="black" stroke-width="1" fill="white"/>
<rect x="17" y="2" width="4" height="11" stroke="black" stroke-width="1" fill="white"/>
<rect x="24" y="2" width="4" height="11" stroke="black" stroke-width="1" fill="white"/>
</svg>
This diff is collapsed. Click to expand it.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment