Commit e6a4ce28 by fengshuonan

UI全面更新

parent 7b798ace
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
<version>2.1.1.RELEASE</version> <version>2.1.1.RELEASE</version>
</parent> </parent>
<groupId>cn.stylefeng.guns</groupId> <groupId>cn.stylefeng</groupId>
<artifactId>guns</artifactId> <artifactId>guns</artifactId>
<version>1.0.0</version> <version>1.0.0</version>
...@@ -264,18 +264,6 @@ ...@@ -264,18 +264,6 @@
<spring.active>dev</spring.active> <spring.active>dev</spring.active>
</properties> </properties>
</profile> </profile>
<profile>
<id>test</id>
<properties>
<spring.active>test</spring.active>
</properties>
</profile>
<profile>
<id>produce</id>
<properties>
<spring.active>produce</spring.active>
</properties>
</profile>
</profiles> </profiles>
</project> </project>
...@@ -162,6 +162,25 @@ public class ConstantFactory implements IConstantFactory { ...@@ -162,6 +162,25 @@ public class ConstantFactory implements IConstantFactory {
} }
@Override @Override
public Menu getMenuByCode(String code) {
if (ToolUtil.isEmpty(code)) {
return new Menu();
} else if (code.equals("0")) {
return new Menu();
} else {
Menu param = new Menu();
param.setCode(code);
QueryWrapper<Menu> queryWrapper = new QueryWrapper<>(param);
Menu menu = menuMapper.selectOne(queryWrapper);
if (menu == null) {
return new Menu();
} else {
return menu;
}
}
}
@Override
public String getMenuNameByCode(String code) { public String getMenuNameByCode(String code) {
if (ToolUtil.isEmpty(code)) { if (ToolUtil.isEmpty(code)) {
return ""; return "";
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
package cn.stylefeng.guns.core.common.constant.factory; package cn.stylefeng.guns.core.common.constant.factory;
import cn.stylefeng.guns.modular.system.entity.Dict; import cn.stylefeng.guns.modular.system.entity.Dict;
import cn.stylefeng.guns.modular.system.entity.Menu;
import java.util.List; import java.util.List;
...@@ -74,6 +75,11 @@ public interface IConstantFactory { ...@@ -74,6 +75,11 @@ public interface IConstantFactory {
String getMenuName(Long menuId); String getMenuName(Long menuId);
/** /**
* 获取菜单通过编号
*/
Menu getMenuByCode(String code);
/**
* 获取菜单名称通过编号 * 获取菜单名称通过编号
*/ */
String getMenuNameByCode(String code); String getMenuNameByCode(String code);
......
/**
* Copyright 2018-2020 stylefeng & fengshuonan (https://gitee.com/stylefeng)
* <p>
* 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
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* 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.
*/
package cn.stylefeng.guns.core.common.constant.factory;
import cn.hutool.core.util.StrUtil;
import cn.stylefeng.roses.core.util.ToolUtil;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 组合字符串生产者
*
* @author fengshuonan
* @date 2017-04-27 16:42
*/
public class MutiStrFactory {
/**
* 每个条目之间的分隔符
*/
public static final String ITEM_SPLIT = ";";
/**
* 属性之间的分隔符
*/
public static final String ATTR_SPLIT = ":";
/**
* 拼接字符串的id
*/
public static final String MUTI_STR_ID = "ID";
/**
* 拼接字符串的CODE
*/
public static final String MUTI_STR_CODE = "CODE";
/**
* 拼接字符串的NAME
*/
public static final String MUTI_STR_NAME = "NAME";
/**
* 拼接字符串的NUM
*/
public static final String MUTI_STR_NUM = "NUM";
/**
* 解析一个组合字符串(例如: "1:启用;2:禁用;3:冻结" 这样的字符串)
*
* @author fengshuonan
* @Date 2017/4/27 16:44
*/
public static List<Map<String, String>> parseKeyValue(String mutiString) {
if (ToolUtil.isEmpty(mutiString)) {
return new ArrayList<>();
} else {
ArrayList<Map<String, String>> results = new ArrayList<>();
String[] items = StrUtil.split(StrUtil.removeSuffix(mutiString, ITEM_SPLIT), ITEM_SPLIT);
for (String item : items) {
String[] attrs = item.split(ATTR_SPLIT);
HashMap<String, String> itemMap = new HashMap<>();
itemMap.put(MUTI_STR_CODE, attrs[0]);
itemMap.put(MUTI_STR_NAME, attrs[1]);
itemMap.put(MUTI_STR_NUM, attrs[2]);
results.add(itemMap);
}
return results;
}
}
}
...@@ -26,15 +26,35 @@ import lombok.Data; ...@@ -26,15 +26,35 @@ import lombok.Data;
@Data @Data
public class ZTreeNode { public class ZTreeNode {
private Long id; //节点id /**
* 节点id
*/
private Long id;
private Long pId; //父节点id /**
* 父节点id
*/
private Long pId;
private String name; //节点名称 /**
* 节点名称
*/
private String name;
private Boolean open; //是否打开节点 /**
* 是否打开节点
*/
private Boolean open;
/**
* 是否被选中
*/
private Boolean checked;
private Boolean checked; //是否被选中 /**
* 节点图标 single or group
*/
private String iconSkin;
/** /**
* 创建ztree的父级节点 * 创建ztree的父级节点
......
...@@ -13,51 +13,49 @@ ...@@ -13,51 +13,49 @@
* 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 cn.stylefeng.guns.core.common.constant.factory; package cn.stylefeng.guns.core.common.page;
import cn.stylefeng.guns.core.common.constant.state.Order;
import cn.stylefeng.roses.core.util.HttpContext; import cn.stylefeng.roses.core.util.HttpContext;
import cn.stylefeng.roses.core.util.ToolUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
/** /**
* BootStrap Table默认的分页参数创建 * Layui Table默认的分页参数创建
* *
* @author fengshuonan * @author fengshuonan
* @date 2017-04-05 22:25 * @date 2017-04-05 22:25
*/ */
public class PageFactory { public class LayuiPageFactory {
public Page defaultPage() { /**
* 获取layui table的分页参数
*
* @author fengshuonan
* @Date 2019/1/25 22:13
*/
public static Page defaultPage() {
HttpServletRequest request = HttpContext.getRequest(); HttpServletRequest request = HttpContext.getRequest();
//每页多少条数据 //每页多少条数据
int limit = Integer.valueOf(request.getParameter("limit")); int limit = Integer.valueOf(request.getParameter("limit"));
//每页的偏移量(本页当前有多少条) //第几页
int offset = Integer.valueOf(request.getParameter("offset")); int page = Integer.valueOf(request.getParameter("page"));
//排序字段名称 return new Page(page, limit);
String sort = request.getParameter("sort"); }
//asc或desc(升序或降序) /**
String order = request.getParameter("order"); * 创建layui能识别的分页响应参数
*
//如果没有排序字段名称 * @author fengshuonan
if (ToolUtil.isEmpty(sort)) { * @Date 2019/1/25 22:14
return new Page((offset / limit + 1), limit); */
} else { public static LayuiPageInfo createPageInfo(Page page) {
LayuiPageInfo result = new LayuiPageInfo();
//如果有排序字段 result.setCount(page.getTotal());
Page page = new Page((offset / limit + 1), limit); result.setData(page.getRecords());
if (Order.ASC.getDes().equals(order)) { return result;
page.setAsc(sort);
} else {
page.setDesc(sort);
}
return page;
}
} }
} }
...@@ -15,42 +15,25 @@ ...@@ -15,42 +15,25 @@
*/ */
package cn.stylefeng.guns.core.common.page; package cn.stylefeng.guns.core.common.page;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.Data;
import java.util.List; import java.util.List;
/** /**
* 分页结果的封装(for Bootstrap Table) * 分页结果的封装(for Layui Table)
* *
* @author fengshuonan * @author fengshuonan
* @Date 2017年1月22日 下午11:06:41 * @Date 2019年1月25日22:07:36
*/ */
public class PageInfoBT<T> { @Data
public class LayuiPageInfo {
// 结果集 private Integer code = 0;
private List<T> rows;
// 总数 private String msg = "请求成功";
private long total;
public PageInfoBT(Page<T> page) { private List data;
this.rows = page.getRecords();
this.total = page.getTotal();
}
public List<T> getRows() { private long count;
return rows;
}
public void setRows(List<T> rows) {
this.rows = rows;
}
public long getTotal() {
return total;
}
public void setTotal(long total) {
this.total = total;
}
} }
...@@ -41,13 +41,13 @@ public class GunsUserFilter extends AccessControlFilter { ...@@ -41,13 +41,13 @@ public class GunsUserFilter extends AccessControlFilter {
/** /**
* Returns <code>true</code> if the request is a * Returns <code>true</code> if the request is a
* {@link #isLoginRequest(javax.servlet.ServletRequest, javax.servlet.ServletResponse) loginRequest} or * {@link #isLoginRequest(ServletRequest, ServletResponse) loginRequest} or
* if the current {@link #getSubject(javax.servlet.ServletRequest, javax.servlet.ServletResponse) subject} * if the current {@link #getSubject(ServletRequest, ServletResponse) subject}
* is not <code>null</code>, <code>false</code> otherwise. * is not <code>null</code>, <code>false</code> otherwise.
* *
* @return <code>true</code> if the request is a * @return <code>true</code> if the request is a
* {@link #isLoginRequest(javax.servlet.ServletRequest, javax.servlet.ServletResponse) loginRequest} or * {@link #isLoginRequest(ServletRequest, ServletResponse) loginRequest} or
* if the current {@link #getSubject(javax.servlet.ServletRequest, javax.servlet.ServletResponse) subject} * if the current {@link #getSubject(ServletRequest, ServletResponse) subject}
* is not <code>null</code>, <code>false</code> otherwise. * is not <code>null</code>, <code>false</code> otherwise.
*/ */
protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) { protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) {
...@@ -62,7 +62,7 @@ public class GunsUserFilter extends AccessControlFilter { ...@@ -62,7 +62,7 @@ public class GunsUserFilter extends AccessControlFilter {
/** /**
* This default implementation simply calls * This default implementation simply calls
* {@link #saveRequestAndRedirectToLogin(javax.servlet.ServletRequest, javax.servlet.ServletResponse) saveRequestAndRedirectToLogin} * {@link #saveRequestAndRedirectToLogin(ServletRequest, ServletResponse) saveRequestAndRedirectToLogin}
* and then immediately returns <code>false</code>, thereby preventing the chain from continuing so the redirect may * and then immediately returns <code>false</code>, thereby preventing the chain from continuing so the redirect may
* execute. * execute.
*/ */
......
...@@ -154,7 +154,7 @@ public class Contrast { ...@@ -154,7 +154,7 @@ public class Contrast {
Method getMethod = null; Method getMethod = null;
try { try {
getMethod = clazz.getDeclaredMethod(prefix + StrUtil.upperFirst(field.getName())); getMethod = clazz.getDeclaredMethod(prefix + StrUtil.upperFirst(field.getName()));
} catch (java.lang.NoSuchMethodException e) { } catch (NoSuchMethodException e) {
System.err.println("this className:" + clazz.getName() + " is not methodName: " + e.getMessage()); System.err.println("this className:" + clazz.getName() + " is not methodName: " + e.getMessage());
continue; continue;
} }
......
...@@ -22,6 +22,7 @@ import cn.stylefeng.guns.core.common.constant.dictmap.DeptDict; ...@@ -22,6 +22,7 @@ import cn.stylefeng.guns.core.common.constant.dictmap.DeptDict;
import cn.stylefeng.guns.core.common.constant.factory.ConstantFactory; import cn.stylefeng.guns.core.common.constant.factory.ConstantFactory;
import cn.stylefeng.guns.core.common.node.TreeviewNode; import cn.stylefeng.guns.core.common.node.TreeviewNode;
import cn.stylefeng.guns.core.common.node.ZTreeNode; import cn.stylefeng.guns.core.common.node.ZTreeNode;
import cn.stylefeng.guns.core.common.page.LayuiPageFactory;
import cn.stylefeng.guns.core.log.LogObjectHolder; import cn.stylefeng.guns.core.log.LogObjectHolder;
import cn.stylefeng.guns.modular.system.entity.Dept; import cn.stylefeng.guns.modular.system.entity.Dept;
import cn.stylefeng.guns.modular.system.model.DeptDto; import cn.stylefeng.guns.modular.system.model.DeptDto;
...@@ -33,6 +34,7 @@ import cn.stylefeng.roses.core.reqres.response.ResponseData; ...@@ -33,6 +34,7 @@ import cn.stylefeng.roses.core.reqres.response.ResponseData;
import cn.stylefeng.roses.core.treebuild.DefaultTreeBuildFactory; import cn.stylefeng.roses.core.treebuild.DefaultTreeBuildFactory;
import cn.stylefeng.roses.core.util.ToolUtil; import cn.stylefeng.roses.core.util.ToolUtil;
import cn.stylefeng.roses.kernel.model.exception.RequestEmptyException; import cn.stylefeng.roses.kernel.model.exception.RequestEmptyException;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
...@@ -53,7 +55,7 @@ import java.util.Map; ...@@ -53,7 +55,7 @@ import java.util.Map;
@RequestMapping("/dept") @RequestMapping("/dept")
public class DeptController extends BaseController { public class DeptController extends BaseController {
private String PREFIX = "/system/dept/"; private String PREFIX = "/modular/system/dept/";
@Autowired @Autowired
private DeptService deptService; private DeptService deptService;
...@@ -163,8 +165,9 @@ public class DeptController extends BaseController { ...@@ -163,8 +165,9 @@ public class DeptController extends BaseController {
@ResponseBody @ResponseBody
public Object list(@RequestParam(value = "condition", required = false) String condition, public Object list(@RequestParam(value = "condition", required = false) String condition,
@RequestParam(value = "deptId", required = false) String deptId) { @RequestParam(value = "deptId", required = false) String deptId) {
List<Map<String, Object>> list = this.deptService.list(condition, deptId); Page<Map<String, Object>> list = this.deptService.list(condition, deptId);
return super.warpObject(new DeptWarpper(list)); Page<Map<String, Object>> wrap = new DeptWarpper(list).wrap();
return LayuiPageFactory.createPageInfo(wrap);
} }
/** /**
......
...@@ -20,12 +20,14 @@ import cn.stylefeng.guns.core.common.annotion.Permission; ...@@ -20,12 +20,14 @@ import cn.stylefeng.guns.core.common.annotion.Permission;
import cn.stylefeng.guns.core.common.constant.Const; import cn.stylefeng.guns.core.common.constant.Const;
import cn.stylefeng.guns.core.common.constant.dictmap.DictMap; import cn.stylefeng.guns.core.common.constant.dictmap.DictMap;
import cn.stylefeng.guns.core.common.constant.factory.ConstantFactory; import cn.stylefeng.guns.core.common.constant.factory.ConstantFactory;
import cn.stylefeng.guns.core.common.page.LayuiPageFactory;
import cn.stylefeng.guns.core.log.LogObjectHolder; import cn.stylefeng.guns.core.log.LogObjectHolder;
import cn.stylefeng.guns.modular.system.model.DictDto; import cn.stylefeng.guns.modular.system.model.DictDto;
import cn.stylefeng.guns.modular.system.service.DictService; import cn.stylefeng.guns.modular.system.service.DictService;
import cn.stylefeng.guns.modular.system.warpper.DictWarpper; import cn.stylefeng.guns.modular.system.warpper.DictWarpper;
import cn.stylefeng.roses.core.base.controller.BaseController; import cn.stylefeng.roses.core.base.controller.BaseController;
import cn.stylefeng.roses.core.reqres.response.ResponseData; import cn.stylefeng.roses.core.reqres.response.ResponseData;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;
...@@ -33,7 +35,6 @@ import org.springframework.web.bind.annotation.RequestMapping; ...@@ -33,7 +35,6 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
...@@ -46,7 +47,7 @@ import java.util.Map; ...@@ -46,7 +47,7 @@ import java.util.Map;
@RequestMapping("/dict") @RequestMapping("/dict")
public class DictController extends BaseController { public class DictController extends BaseController {
private String PREFIX = "/system/dict/"; private String PREFIX = "/modular/system/dict/";
@Autowired @Autowired
private DictService dictService; private DictService dictService;
...@@ -110,8 +111,9 @@ public class DictController extends BaseController { ...@@ -110,8 +111,9 @@ public class DictController extends BaseController {
@Permission(Const.ADMIN_NAME) @Permission(Const.ADMIN_NAME)
@ResponseBody @ResponseBody
public Object list(String condition) { public Object list(String condition) {
List<Map<String, Object>> list = this.dictService.list(condition); Page<Map<String, Object>> list = this.dictService.list(condition);
return super.warpObject(new DictWarpper(list)); Page<Map<String, Object>> warpper = new DictWarpper(list).wrap();
return LayuiPageFactory.createPageInfo(warpper);
} }
/** /**
......
...@@ -19,9 +19,8 @@ import cn.hutool.core.bean.BeanUtil; ...@@ -19,9 +19,8 @@ import cn.hutool.core.bean.BeanUtil;
import cn.stylefeng.guns.core.common.annotion.BussinessLog; import cn.stylefeng.guns.core.common.annotion.BussinessLog;
import cn.stylefeng.guns.core.common.annotion.Permission; import cn.stylefeng.guns.core.common.annotion.Permission;
import cn.stylefeng.guns.core.common.constant.Const; import cn.stylefeng.guns.core.common.constant.Const;
import cn.stylefeng.guns.core.common.constant.factory.PageFactory;
import cn.stylefeng.guns.core.common.constant.state.BizLogType; import cn.stylefeng.guns.core.common.constant.state.BizLogType;
import cn.stylefeng.guns.core.common.page.PageInfoBT; import cn.stylefeng.guns.core.common.page.LayuiPageFactory;
import cn.stylefeng.guns.modular.system.entity.OperationLog; import cn.stylefeng.guns.modular.system.entity.OperationLog;
import cn.stylefeng.guns.modular.system.service.OperationLogService; import cn.stylefeng.guns.modular.system.service.OperationLogService;
import cn.stylefeng.guns.modular.system.warpper.LogWarpper; import cn.stylefeng.guns.modular.system.warpper.LogWarpper;
...@@ -48,7 +47,7 @@ import java.util.Map; ...@@ -48,7 +47,7 @@ import java.util.Map;
@RequestMapping("/log") @RequestMapping("/log")
public class LogController extends BaseController { public class LogController extends BaseController {
private static String PREFIX = "/system/log/"; private static String PREFIX = "/modular/system/log/";
@Autowired @Autowired
private OperationLogService operationLogService; private OperationLogService operationLogService;
...@@ -79,14 +78,14 @@ public class LogController extends BaseController { ...@@ -79,14 +78,14 @@ public class LogController extends BaseController {
@RequestParam(required = false) Integer logType) { @RequestParam(required = false) Integer logType) {
//获取分页参数 //获取分页参数
Page page = new PageFactory().defaultPage(); Page page = LayuiPageFactory.defaultPage();
//根据条件查询操作日志 //根据条件查询操作日志
List<Map<String, Object>> result = operationLogService.getOperationLogs(page, beginTime, endTime, logName, BizLogType.valueOf(logType)); List<Map<String, Object>> result = operationLogService.getOperationLogs(page, beginTime, endTime, logName, BizLogType.valueOf(logType));
page.setRecords(new LogWarpper(result).wrap()); page.setRecords(new LogWarpper(result).wrap());
return new PageInfoBT<>(page); return LayuiPageFactory.createPageInfo(page);
} }
/** /**
......
...@@ -50,7 +50,8 @@ public class LoginController extends BaseController { ...@@ -50,7 +50,8 @@ public class LoginController extends BaseController {
public String index(Model model) { public String index(Model model) {
//获取当前用户角色列表 //获取当前用户角色列表
List<Long> roleList = ShiroKit.getUserNotNull().getRoleList(); ShiroUser user = ShiroKit.getUserNotNull();
List<Long> roleList = user.getRoleList();
if (roleList == null || roleList.size() == 0) { if (roleList == null || roleList.size() == 0) {
ShiroKit.getSubject().logout(); ShiroKit.getSubject().logout();
...@@ -58,6 +59,8 @@ public class LoginController extends BaseController { ...@@ -58,6 +59,8 @@ public class LoginController extends BaseController {
return "/login.html"; return "/login.html";
} }
model.addAttribute("menus", user.getMenus());
return "/index.html"; return "/index.html";
} }
......
...@@ -18,8 +18,7 @@ package cn.stylefeng.guns.modular.system.controller; ...@@ -18,8 +18,7 @@ package cn.stylefeng.guns.modular.system.controller;
import cn.stylefeng.guns.core.common.annotion.BussinessLog; import cn.stylefeng.guns.core.common.annotion.BussinessLog;
import cn.stylefeng.guns.core.common.annotion.Permission; import cn.stylefeng.guns.core.common.annotion.Permission;
import cn.stylefeng.guns.core.common.constant.Const; import cn.stylefeng.guns.core.common.constant.Const;
import cn.stylefeng.guns.core.common.constant.factory.PageFactory; import cn.stylefeng.guns.core.common.page.LayuiPageFactory;
import cn.stylefeng.guns.core.common.page.PageInfoBT;
import cn.stylefeng.guns.modular.system.service.LoginLogService; import cn.stylefeng.guns.modular.system.service.LoginLogService;
import cn.stylefeng.guns.modular.system.warpper.LogWarpper; import cn.stylefeng.guns.modular.system.warpper.LogWarpper;
import cn.stylefeng.roses.core.base.controller.BaseController; import cn.stylefeng.roses.core.base.controller.BaseController;
...@@ -44,7 +43,7 @@ import java.util.Map; ...@@ -44,7 +43,7 @@ import java.util.Map;
@RequestMapping("/loginLog") @RequestMapping("/loginLog")
public class LoginLogController extends BaseController { public class LoginLogController extends BaseController {
private static String PREFIX = "/system/log/"; private static String PREFIX = "/modular/system/log/";
@Autowired @Autowired
private LoginLogService loginLogService; private LoginLogService loginLogService;
...@@ -74,13 +73,13 @@ public class LoginLogController extends BaseController { ...@@ -74,13 +73,13 @@ public class LoginLogController extends BaseController {
@RequestParam(required = false) String logName) { @RequestParam(required = false) String logName) {
//获取分页参数 //获取分页参数
Page page = new PageFactory().defaultPage(); Page page = LayuiPageFactory.defaultPage();
//根据条件查询日志 //根据条件查询日志
List<Map<String, Object>> result = loginLogService.getLoginLogs(page, beginTime, endTime, logName); List<Map<String, Object>> result = loginLogService.getLoginLogs(page, beginTime, endTime, logName);
page.setRecords(new LogWarpper(result).wrap()); page.setRecords(new LogWarpper(result).wrap());
return new PageInfoBT<>(page); return LayuiPageFactory.createPageInfo(page);
} }
/** /**
......
...@@ -23,6 +23,7 @@ import cn.stylefeng.guns.core.common.constant.dictmap.MenuDict; ...@@ -23,6 +23,7 @@ import cn.stylefeng.guns.core.common.constant.dictmap.MenuDict;
import cn.stylefeng.guns.core.common.constant.factory.ConstantFactory; import cn.stylefeng.guns.core.common.constant.factory.ConstantFactory;
import cn.stylefeng.guns.core.common.exception.BizExceptionEnum; import cn.stylefeng.guns.core.common.exception.BizExceptionEnum;
import cn.stylefeng.guns.core.common.node.ZTreeNode; import cn.stylefeng.guns.core.common.node.ZTreeNode;
import cn.stylefeng.guns.core.common.page.LayuiPageFactory;
import cn.stylefeng.guns.core.log.LogObjectHolder; import cn.stylefeng.guns.core.log.LogObjectHolder;
import cn.stylefeng.guns.modular.system.entity.Menu; import cn.stylefeng.guns.modular.system.entity.Menu;
import cn.stylefeng.guns.modular.system.model.MenuDto; import cn.stylefeng.guns.modular.system.model.MenuDto;
...@@ -33,6 +34,7 @@ import cn.stylefeng.roses.core.base.controller.BaseController; ...@@ -33,6 +34,7 @@ import cn.stylefeng.roses.core.base.controller.BaseController;
import cn.stylefeng.roses.core.reqres.response.ResponseData; import cn.stylefeng.roses.core.reqres.response.ResponseData;
import cn.stylefeng.roses.core.util.ToolUtil; import cn.stylefeng.roses.core.util.ToolUtil;
import cn.stylefeng.roses.kernel.model.exception.ServiceException; import cn.stylefeng.roses.kernel.model.exception.ServiceException;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
...@@ -53,7 +55,7 @@ import java.util.Map; ...@@ -53,7 +55,7 @@ import java.util.Map;
@RequestMapping("/menu") @RequestMapping("/menu")
public class MenuController extends BaseController { public class MenuController extends BaseController {
private static String PREFIX = "/system/menu/"; private static String PREFIX = "/modular/system/menu/";
@Autowired @Autowired
private MenuService menuService; private MenuService menuService;
...@@ -138,8 +140,9 @@ public class MenuController extends BaseController { ...@@ -138,8 +140,9 @@ public class MenuController extends BaseController {
public Object list(@RequestParam(required = false) String menuName, public Object list(@RequestParam(required = false) String menuName,
@RequestParam(required = false) String level, @RequestParam(required = false) String level,
@RequestParam(required = false) Long menuId) { @RequestParam(required = false) Long menuId) {
List<Map<String, Object>> menus = this.menuService.selectMenus(menuName, level, menuId); Page<Map<String, Object>> menus = this.menuService.selectMenus(menuName, level, menuId);
return super.warpObject(new MenuWarpper(menus)); Page<Map<String, Object>> wrap = new MenuWarpper(menus).wrap();
return LayuiPageFactory.createPageInfo(wrap);
} }
/** /**
......
...@@ -20,6 +20,7 @@ import cn.stylefeng.guns.core.common.annotion.BussinessLog; ...@@ -20,6 +20,7 @@ import cn.stylefeng.guns.core.common.annotion.BussinessLog;
import cn.stylefeng.guns.core.common.constant.dictmap.NoticeMap; import cn.stylefeng.guns.core.common.constant.dictmap.NoticeMap;
import cn.stylefeng.guns.core.common.constant.factory.ConstantFactory; import cn.stylefeng.guns.core.common.constant.factory.ConstantFactory;
import cn.stylefeng.guns.core.common.exception.BizExceptionEnum; import cn.stylefeng.guns.core.common.exception.BizExceptionEnum;
import cn.stylefeng.guns.core.common.page.LayuiPageFactory;
import cn.stylefeng.guns.core.log.LogObjectHolder; import cn.stylefeng.guns.core.log.LogObjectHolder;
import cn.stylefeng.guns.core.shiro.ShiroKit; import cn.stylefeng.guns.core.shiro.ShiroKit;
import cn.stylefeng.guns.modular.system.entity.Notice; import cn.stylefeng.guns.modular.system.entity.Notice;
...@@ -28,6 +29,7 @@ import cn.stylefeng.guns.modular.system.warpper.NoticeWrapper; ...@@ -28,6 +29,7 @@ import cn.stylefeng.guns.modular.system.warpper.NoticeWrapper;
import cn.stylefeng.roses.core.base.controller.BaseController; import cn.stylefeng.roses.core.base.controller.BaseController;
import cn.stylefeng.roses.core.util.ToolUtil; import cn.stylefeng.roses.core.util.ToolUtil;
import cn.stylefeng.roses.kernel.model.exception.ServiceException; import cn.stylefeng.roses.kernel.model.exception.ServiceException;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;
...@@ -50,7 +52,7 @@ import java.util.Map; ...@@ -50,7 +52,7 @@ import java.util.Map;
@RequestMapping("/notice") @RequestMapping("/notice")
public class NoticeController extends BaseController { public class NoticeController extends BaseController {
private String PREFIX = "/system/notice/"; private String PREFIX = "/modular/system/notice/";
@Autowired @Autowired
private NoticeService noticeService; private NoticeService noticeService;
...@@ -113,8 +115,9 @@ public class NoticeController extends BaseController { ...@@ -113,8 +115,9 @@ public class NoticeController extends BaseController {
@RequestMapping(value = "/list") @RequestMapping(value = "/list")
@ResponseBody @ResponseBody
public Object list(String condition) { public Object list(String condition) {
List<Map<String, Object>> list = this.noticeService.list(condition); Page<Map<String, Object>> list = this.noticeService.list(condition);
return super.warpObject(new NoticeWrapper(list)); Page<Map<String, Object>> wrap = new NoticeWrapper(list).wrap();
return LayuiPageFactory.createPageInfo(wrap);
} }
/** /**
......
...@@ -23,6 +23,7 @@ import cn.stylefeng.guns.core.common.constant.dictmap.RoleDict; ...@@ -23,6 +23,7 @@ import cn.stylefeng.guns.core.common.constant.dictmap.RoleDict;
import cn.stylefeng.guns.core.common.constant.factory.ConstantFactory; import cn.stylefeng.guns.core.common.constant.factory.ConstantFactory;
import cn.stylefeng.guns.core.common.exception.BizExceptionEnum; import cn.stylefeng.guns.core.common.exception.BizExceptionEnum;
import cn.stylefeng.guns.core.common.node.ZTreeNode; import cn.stylefeng.guns.core.common.node.ZTreeNode;
import cn.stylefeng.guns.core.common.page.LayuiPageFactory;
import cn.stylefeng.guns.core.log.LogObjectHolder; import cn.stylefeng.guns.core.log.LogObjectHolder;
import cn.stylefeng.guns.modular.system.entity.Role; import cn.stylefeng.guns.modular.system.entity.Role;
import cn.stylefeng.guns.modular.system.entity.User; import cn.stylefeng.guns.modular.system.entity.User;
...@@ -34,6 +35,7 @@ import cn.stylefeng.roses.core.base.controller.BaseController; ...@@ -34,6 +35,7 @@ import cn.stylefeng.roses.core.base.controller.BaseController;
import cn.stylefeng.roses.core.reqres.response.ResponseData; import cn.stylefeng.roses.core.reqres.response.ResponseData;
import cn.stylefeng.roses.core.util.ToolUtil; import cn.stylefeng.roses.core.util.ToolUtil;
import cn.stylefeng.roses.kernel.model.exception.ServiceException; import cn.stylefeng.roses.kernel.model.exception.ServiceException;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;
...@@ -55,7 +57,7 @@ import java.util.Map; ...@@ -55,7 +57,7 @@ import java.util.Map;
@RequestMapping("/role") @RequestMapping("/role")
public class RoleController extends BaseController { public class RoleController extends BaseController {
private static String PREFIX = "/system/role"; private static String PREFIX = "/modular/system/role";
@Autowired @Autowired
private UserService userService; private UserService userService;
...@@ -128,8 +130,9 @@ public class RoleController extends BaseController { ...@@ -128,8 +130,9 @@ public class RoleController extends BaseController {
@RequestMapping(value = "/list") @RequestMapping(value = "/list")
@ResponseBody @ResponseBody
public Object list(@RequestParam(value = "roleName", required = false) String roleName) { public Object list(@RequestParam(value = "roleName", required = false) String roleName) {
List<Map<String, Object>> roles = this.roleService.selectRoles(roleName); Page<Map<String, Object>> roles = this.roleService.selectRoles(roleName);
return super.warpObject(new RoleWarpper(roles)); Page<Map<String, Object>> wrap = new RoleWarpper(roles).wrap();
return LayuiPageFactory.createPageInfo(wrap);
} }
/** /**
......
...@@ -15,10 +15,12 @@ ...@@ -15,10 +15,12 @@
*/ */
package cn.stylefeng.guns.modular.system.controller; package cn.stylefeng.guns.modular.system.controller;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.codec.Base64; import cn.hutool.core.codec.Base64;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.stylefeng.guns.core.common.constant.DefaultAvatar; import cn.stylefeng.guns.core.common.constant.DefaultAvatar;
import cn.stylefeng.guns.core.common.constant.factory.ConstantFactory; import cn.stylefeng.guns.core.common.constant.factory.ConstantFactory;
import cn.stylefeng.guns.core.log.LogObjectHolder;
import cn.stylefeng.guns.core.shiro.ShiroKit; import cn.stylefeng.guns.core.shiro.ShiroKit;
import cn.stylefeng.guns.core.shiro.ShiroUser; import cn.stylefeng.guns.core.shiro.ShiroUser;
import cn.stylefeng.guns.modular.system.entity.FileInfo; import cn.stylefeng.guns.modular.system.entity.FileInfo;
...@@ -58,8 +60,6 @@ import java.util.Map; ...@@ -58,8 +60,6 @@ import java.util.Map;
@Slf4j @Slf4j
public class SystemController extends BaseController { public class SystemController extends BaseController {
private String PREFIX = "/common/";
@Autowired @Autowired
private UserService userService; private UserService userService;
...@@ -67,6 +67,68 @@ public class SystemController extends BaseController { ...@@ -67,6 +67,68 @@ public class SystemController extends BaseController {
private FileInfoService fileInfoService; private FileInfoService fileInfoService;
/** /**
* 主页面
*
* @author fengshuonan
* @Date 2019/1/24 3:38 PM
*/
@RequestMapping("/welcome")
public String console() {
return "/modular/frame/welcome.html";
}
/**
* 主题页面
*
* @author fengshuonan
* @Date 2019/1/24 3:38 PM
*/
@RequestMapping("/theme")
public String theme() {
return "/modular/frame/theme.html";
}
/**
* 跳转到修改密码界面
*
* @author fengshuonan
* @Date 2018/12/24 22:43
*/
@RequestMapping("/user_chpwd")
public String chPwd() {
return "/modular/frame/password.html";
}
/**
* 个人消息列表
*
* @author fengshuonan
* @Date 2018/12/24 22:43
*/
@RequestMapping("/message")
public String message() {
return "/modular/frame/message.html";
}
/**
* 跳转到查看用户详情页面
*
* @author fengshuonan
* @Date 2018/12/24 22:43
*/
@RequestMapping("/user_info")
public String userInfo(Model model) {
Long userId = ShiroKit.getUserNotNull().getId();
User user = this.userService.getById(userId);
model.addAllAttributes(BeanUtil.beanToMap(user));
model.addAttribute("roleName", ConstantFactory.me().getRoleName(user.getRoleId()));
model.addAttribute("deptName", ConstantFactory.me().getDeptName(user.getDeptId()));
LogObjectHolder.me().set(user);
return "/modular/frame/user_info.html";
}
/**
* 通用的树列表选择器 * 通用的树列表选择器
* *
* @author fengshuonan * @author fengshuonan
...@@ -89,7 +151,7 @@ public class SystemController extends BaseController { ...@@ -89,7 +151,7 @@ public class SystemController extends BaseController {
throw new RequestEmptyException("请求数据不完整!"); throw new RequestEmptyException("请求数据不完整!");
} }
return PREFIX + "common_tree_dlg.html"; return "/common/tree_dlg.html";
} }
/** /**
......
...@@ -15,7 +15,6 @@ ...@@ -15,7 +15,6 @@
*/ */
package cn.stylefeng.guns.modular.system.controller; package cn.stylefeng.guns.modular.system.controller;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.stylefeng.guns.config.properties.GunsProperties; import cn.stylefeng.guns.config.properties.GunsProperties;
import cn.stylefeng.guns.core.common.annotion.BussinessLog; import cn.stylefeng.guns.core.common.annotion.BussinessLog;
...@@ -25,6 +24,7 @@ import cn.stylefeng.guns.core.common.constant.dictmap.UserDict; ...@@ -25,6 +24,7 @@ import cn.stylefeng.guns.core.common.constant.dictmap.UserDict;
import cn.stylefeng.guns.core.common.constant.factory.ConstantFactory; import cn.stylefeng.guns.core.common.constant.factory.ConstantFactory;
import cn.stylefeng.guns.core.common.constant.state.ManagerStatus; import cn.stylefeng.guns.core.common.constant.state.ManagerStatus;
import cn.stylefeng.guns.core.common.exception.BizExceptionEnum; import cn.stylefeng.guns.core.common.exception.BizExceptionEnum;
import cn.stylefeng.guns.core.common.page.LayuiPageFactory;
import cn.stylefeng.guns.core.log.LogObjectHolder; import cn.stylefeng.guns.core.log.LogObjectHolder;
import cn.stylefeng.guns.core.shiro.ShiroKit; import cn.stylefeng.guns.core.shiro.ShiroKit;
import cn.stylefeng.guns.modular.system.entity.User; import cn.stylefeng.guns.modular.system.entity.User;
...@@ -38,6 +38,7 @@ import cn.stylefeng.roses.core.reqres.response.ResponseData; ...@@ -38,6 +38,7 @@ import cn.stylefeng.roses.core.reqres.response.ResponseData;
import cn.stylefeng.roses.core.util.ToolUtil; import cn.stylefeng.roses.core.util.ToolUtil;
import cn.stylefeng.roses.kernel.model.exception.RequestEmptyException; import cn.stylefeng.roses.kernel.model.exception.RequestEmptyException;
import cn.stylefeng.roses.kernel.model.exception.ServiceException; import cn.stylefeng.roses.kernel.model.exception.ServiceException;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;
...@@ -48,7 +49,6 @@ import org.springframework.web.multipart.MultipartFile; ...@@ -48,7 +49,6 @@ import org.springframework.web.multipart.MultipartFile;
import javax.validation.Valid; import javax.validation.Valid;
import java.io.File; import java.io.File;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.UUID; import java.util.UUID;
...@@ -62,7 +62,7 @@ import java.util.UUID; ...@@ -62,7 +62,7 @@ import java.util.UUID;
@RequestMapping("/mgr") @RequestMapping("/mgr")
public class UserMgrController extends BaseController { public class UserMgrController extends BaseController {
private static String PREFIX = "/system/user/"; private static String PREFIX = "/modular/system/user/";
@Autowired @Autowired
private GunsProperties gunsProperties; private GunsProperties gunsProperties;
...@@ -126,35 +126,6 @@ public class UserMgrController extends BaseController { ...@@ -126,35 +126,6 @@ public class UserMgrController extends BaseController {
} }
/** /**
* 跳转到查看用户详情页面
*
* @author fengshuonan
* @Date 2018/12/24 22:43
*/
@RequestMapping("/user_info")
public String userInfo(Model model) {
Long userId = ShiroKit.getUserNotNull().getId();
User user = this.userService.getById(userId);
model.addAllAttributes(BeanUtil.beanToMap(user));
model.addAttribute("roleName", ConstantFactory.me().getRoleName(user.getRoleId()));
model.addAttribute("deptName", ConstantFactory.me().getDeptName(user.getDeptId()));
LogObjectHolder.me().set(user);
return PREFIX + "user_view.html";
}
/**
* 跳转到修改密码界面
*
* @author fengshuonan
* @Date 2018/12/24 22:43
*/
@RequestMapping("/user_chpwd")
public String chPwd() {
return PREFIX + "user_chpwd.html";
}
/**
* 获取用户详情 * 获取用户详情
* *
* @author fengshuonan * @author fengshuonan
...@@ -191,7 +162,7 @@ public class UserMgrController extends BaseController { ...@@ -191,7 +162,7 @@ public class UserMgrController extends BaseController {
if (ToolUtil.isOneEmpty(oldPassword, newPassword)) { if (ToolUtil.isOneEmpty(oldPassword, newPassword)) {
throw new RequestEmptyException(); throw new RequestEmptyException();
} }
this.userService.changePwd(oldPassword,newPassword); this.userService.changePwd(oldPassword, newPassword);
return SUCCESS_TIP; return SUCCESS_TIP;
} }
...@@ -219,12 +190,14 @@ public class UserMgrController extends BaseController { ...@@ -219,12 +190,14 @@ public class UserMgrController extends BaseController {
} }
if (ShiroKit.isAdmin()) { if (ShiroKit.isAdmin()) {
List<Map<String, Object>> users = userService.selectUsers(null, name, beginTime, endTime, deptId); Page<Map<String, Object>> users = userService.selectUsers(null, name, beginTime, endTime, deptId);
return new UserWarpper(users).wrap(); Page wrapped = new UserWarpper(users).wrap();
return LayuiPageFactory.createPageInfo(wrapped);
} else { } else {
DataScope dataScope = new DataScope(ShiroKit.getDeptDataScope()); DataScope dataScope = new DataScope(ShiroKit.getDeptDataScope());
List<Map<String, Object>> users = userService.selectUsers(dataScope, name, beginTime, endTime, deptId); Page<Map<String, Object>> users = userService.selectUsers(dataScope, name, beginTime, endTime, deptId);
return new UserWarpper(users).wrap(); Page wrapped = new UserWarpper(users).wrap();
return LayuiPageFactory.createPageInfo(wrapped);
} }
} }
......
...@@ -4,6 +4,7 @@ import cn.stylefeng.guns.core.common.node.TreeviewNode; ...@@ -4,6 +4,7 @@ import cn.stylefeng.guns.core.common.node.TreeviewNode;
import cn.stylefeng.guns.core.common.node.ZTreeNode; import cn.stylefeng.guns.core.common.node.ZTreeNode;
import cn.stylefeng.guns.modular.system.entity.Dept; import cn.stylefeng.guns.modular.system.entity.Dept;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
...@@ -27,7 +28,7 @@ public interface DeptMapper extends BaseMapper<Dept> { ...@@ -27,7 +28,7 @@ public interface DeptMapper extends BaseMapper<Dept> {
/** /**
* 获取所有部门列表 * 获取所有部门列表
*/ */
List<Map<String, Object>> list(@Param("condition") String condition, @Param("deptId") String deptId); Page<Map<String, Object>> list(@Param("page") Page page, @Param("condition") String condition, @Param("deptId") String deptId);
/** /**
* 获取所有部门树列表 * 获取所有部门树列表
......
...@@ -2,6 +2,7 @@ package cn.stylefeng.guns.modular.system.mapper; ...@@ -2,6 +2,7 @@ package cn.stylefeng.guns.modular.system.mapper;
import cn.stylefeng.guns.modular.system.entity.Dict; import cn.stylefeng.guns.modular.system.entity.Dict;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
...@@ -25,7 +26,7 @@ public interface DictMapper extends BaseMapper<Dict> { ...@@ -25,7 +26,7 @@ public interface DictMapper extends BaseMapper<Dict> {
/** /**
* 查询字典列表 * 查询字典列表
*/ */
List<Map<String, Object>> list(@Param("condition") String conditiion); Page<Map<String, Object>> list(@Param("page") Page page, @Param("condition") String conditiion);
/** /**
* 根据父类编码获取词典列表 * 根据父类编码获取词典列表
......
...@@ -4,6 +4,7 @@ import cn.stylefeng.guns.core.common.node.MenuNode; ...@@ -4,6 +4,7 @@ import cn.stylefeng.guns.core.common.node.MenuNode;
import cn.stylefeng.guns.core.common.node.ZTreeNode; import cn.stylefeng.guns.core.common.node.ZTreeNode;
import cn.stylefeng.guns.modular.system.entity.Menu; import cn.stylefeng.guns.modular.system.entity.Menu;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
...@@ -25,7 +26,7 @@ public interface MenuMapper extends BaseMapper<Menu> { ...@@ -25,7 +26,7 @@ public interface MenuMapper extends BaseMapper<Menu> {
* @return * @return
* @date 2017年2月12日 下午9:14:34 * @date 2017年2月12日 下午9:14:34
*/ */
List<Map<String, Object>> selectMenus(@Param("condition") String condition, @Param("level") String level, @Param("menuId") Long menuId, @Param("code") String code); Page<Map<String, Object>> selectMenus(@Param("page") Page page, @Param("condition") String condition, @Param("level") String level, @Param("menuId") Long menuId, @Param("code") String code);
/** /**
* 根据条件查询菜单 * 根据条件查询菜单
......
...@@ -2,9 +2,9 @@ package cn.stylefeng.guns.modular.system.mapper; ...@@ -2,9 +2,9 @@ package cn.stylefeng.guns.modular.system.mapper;
import cn.stylefeng.guns.modular.system.entity.Notice; import cn.stylefeng.guns.modular.system.entity.Notice;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
...@@ -20,6 +20,6 @@ public interface NoticeMapper extends BaseMapper<Notice> { ...@@ -20,6 +20,6 @@ public interface NoticeMapper extends BaseMapper<Notice> {
/** /**
* 获取通知列表 * 获取通知列表
*/ */
List<Map<String, Object>> list(@Param("condition") String condition); Page<Map<String, Object>> list(@Param("page") Page page, @Param("condition") String condition);
} }
...@@ -3,6 +3,7 @@ package cn.stylefeng.guns.modular.system.mapper; ...@@ -3,6 +3,7 @@ package cn.stylefeng.guns.modular.system.mapper;
import cn.stylefeng.guns.core.common.node.ZTreeNode; import cn.stylefeng.guns.core.common.node.ZTreeNode;
import cn.stylefeng.guns.modular.system.entity.Role; import cn.stylefeng.guns.modular.system.entity.Role;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
...@@ -24,7 +25,7 @@ public interface RoleMapper extends BaseMapper<Role> { ...@@ -24,7 +25,7 @@ public interface RoleMapper extends BaseMapper<Role> {
* @return * @return
* @date 2017年2月12日 下午9:14:34 * @date 2017年2月12日 下午9:14:34
*/ */
List<Map<String, Object>> selectRoles(@Param("condition") String condition); Page<Map<String, Object>> selectRoles(@Param("page") Page page, @Param("condition") String condition);
/** /**
* 删除某个角色的所有权限 * 删除某个角色的所有权限
......
...@@ -3,6 +3,7 @@ package cn.stylefeng.guns.modular.system.mapper; ...@@ -3,6 +3,7 @@ package cn.stylefeng.guns.modular.system.mapper;
import cn.stylefeng.guns.modular.system.entity.User; import cn.stylefeng.guns.modular.system.entity.User;
import cn.stylefeng.roses.core.datascope.DataScope; import cn.stylefeng.roses.core.datascope.DataScope;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
...@@ -31,7 +32,7 @@ public interface UserMapper extends BaseMapper<User> { ...@@ -31,7 +32,7 @@ public interface UserMapper extends BaseMapper<User> {
/** /**
* 根据条件查询用户列表 * 根据条件查询用户列表
*/ */
List<Map<String, Object>> selectUsers(@Param("dataScope") DataScope dataScope, @Param("name") String name, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("deptId") Long deptId); Page<Map<String, Object>> selectUsers(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("name") String name, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("deptId") Long deptId);
/** /**
* 设置用户的角色 * 设置用户的角色
......
...@@ -3,11 +3,13 @@ package cn.stylefeng.guns.modular.system.service; ...@@ -3,11 +3,13 @@ package cn.stylefeng.guns.modular.system.service;
import cn.stylefeng.guns.core.common.exception.BizExceptionEnum; import cn.stylefeng.guns.core.common.exception.BizExceptionEnum;
import cn.stylefeng.guns.core.common.node.TreeviewNode; import cn.stylefeng.guns.core.common.node.TreeviewNode;
import cn.stylefeng.guns.core.common.node.ZTreeNode; import cn.stylefeng.guns.core.common.node.ZTreeNode;
import cn.stylefeng.guns.core.common.page.LayuiPageFactory;
import cn.stylefeng.guns.modular.system.entity.Dept; import cn.stylefeng.guns.modular.system.entity.Dept;
import cn.stylefeng.guns.modular.system.mapper.DeptMapper; import cn.stylefeng.guns.modular.system.mapper.DeptMapper;
import cn.stylefeng.roses.core.util.ToolUtil; import cn.stylefeng.roses.core.util.ToolUtil;
import cn.stylefeng.roses.kernel.model.exception.ServiceException; import cn.stylefeng.roses.kernel.model.exception.ServiceException;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
...@@ -115,8 +117,9 @@ public class DeptService extends ServiceImpl<DeptMapper, Dept> { ...@@ -115,8 +117,9 @@ public class DeptService extends ServiceImpl<DeptMapper, Dept> {
* @author fengshuonan * @author fengshuonan
* @Date 2018/12/23 5:16 PM * @Date 2018/12/23 5:16 PM
*/ */
public List<Map<String, Object>> list(String condition, String deptId) { public Page<Map<String, Object>> list(String condition, String deptId) {
return this.baseMapper.list(condition, deptId); Page page = LayuiPageFactory.defaultPage();
return this.baseMapper.list(page, condition, deptId);
} }
/** /**
......
...@@ -2,12 +2,14 @@ package cn.stylefeng.guns.modular.system.service; ...@@ -2,12 +2,14 @@ package cn.stylefeng.guns.modular.system.service;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.stylefeng.guns.core.common.exception.BizExceptionEnum; import cn.stylefeng.guns.core.common.exception.BizExceptionEnum;
import cn.stylefeng.guns.core.common.page.LayuiPageFactory;
import cn.stylefeng.guns.modular.system.entity.Dict; import cn.stylefeng.guns.modular.system.entity.Dict;
import cn.stylefeng.guns.modular.system.mapper.DictMapper; import cn.stylefeng.guns.modular.system.mapper.DictMapper;
import cn.stylefeng.guns.modular.system.model.DictDto; import cn.stylefeng.guns.modular.system.model.DictDto;
import cn.stylefeng.roses.core.util.ToolUtil; import cn.stylefeng.roses.core.util.ToolUtil;
import cn.stylefeng.roses.kernel.model.exception.ServiceException; import cn.stylefeng.roses.kernel.model.exception.ServiceException;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
...@@ -125,7 +127,8 @@ public class DictService extends ServiceImpl<DictMapper, Dict> { ...@@ -125,7 +127,8 @@ public class DictService extends ServiceImpl<DictMapper, Dict> {
* @author fengshuonan * @author fengshuonan
* @Date 2018/12/23 5:26 PM * @Date 2018/12/23 5:26 PM
*/ */
public List<Map<String, Object>> list(String conditiion) { public Page<Map<String, Object>> list(String conditiion) {
return this.baseMapper.list(conditiion); Page page = LayuiPageFactory.defaultPage();
return this.baseMapper.list(page, conditiion);
} }
} }
...@@ -6,6 +6,7 @@ import cn.stylefeng.guns.core.common.constant.state.MenuStatus; ...@@ -6,6 +6,7 @@ import cn.stylefeng.guns.core.common.constant.state.MenuStatus;
import cn.stylefeng.guns.core.common.exception.BizExceptionEnum; import cn.stylefeng.guns.core.common.exception.BizExceptionEnum;
import cn.stylefeng.guns.core.common.node.MenuNode; import cn.stylefeng.guns.core.common.node.MenuNode;
import cn.stylefeng.guns.core.common.node.ZTreeNode; import cn.stylefeng.guns.core.common.node.ZTreeNode;
import cn.stylefeng.guns.core.common.page.LayuiPageFactory;
import cn.stylefeng.guns.modular.system.entity.Menu; import cn.stylefeng.guns.modular.system.entity.Menu;
import cn.stylefeng.guns.modular.system.mapper.MenuMapper; import cn.stylefeng.guns.modular.system.mapper.MenuMapper;
import cn.stylefeng.guns.modular.system.model.MenuDto; import cn.stylefeng.guns.modular.system.model.MenuDto;
...@@ -13,6 +14,7 @@ import cn.stylefeng.roses.core.util.ToolUtil; ...@@ -13,6 +14,7 @@ import cn.stylefeng.roses.core.util.ToolUtil;
import cn.stylefeng.roses.kernel.model.exception.RequestEmptyException; import cn.stylefeng.roses.kernel.model.exception.RequestEmptyException;
import cn.stylefeng.roses.kernel.model.exception.ServiceException; import cn.stylefeng.roses.kernel.model.exception.ServiceException;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
...@@ -107,7 +109,7 @@ public class MenuService extends ServiceImpl<MenuMapper, Menu> { ...@@ -107,7 +109,7 @@ public class MenuService extends ServiceImpl<MenuMapper, Menu> {
* @return * @return
* @date 2017年2月12日 下午9:14:34 * @date 2017年2月12日 下午9:14:34
*/ */
public List<Map<String, Object>> selectMenus(String condition, String level, Long menuId) { public Page<Map<String, Object>> selectMenus(String condition, String level, Long menuId) {
//获取menuId的code //获取menuId的code
String code = ""; String code = "";
...@@ -116,7 +118,9 @@ public class MenuService extends ServiceImpl<MenuMapper, Menu> { ...@@ -116,7 +118,9 @@ public class MenuService extends ServiceImpl<MenuMapper, Menu> {
code = menu.getCode(); code = menu.getCode();
} }
return this.baseMapper.selectMenus(condition, level, menuId, code); Page page = LayuiPageFactory.defaultPage();
return this.baseMapper.selectMenus(page, condition, level, menuId, code);
} }
/** /**
......
package cn.stylefeng.guns.modular.system.service; package cn.stylefeng.guns.modular.system.service;
import cn.stylefeng.guns.core.common.page.LayuiPageFactory;
import cn.stylefeng.guns.modular.system.entity.Notice; import cn.stylefeng.guns.modular.system.entity.Notice;
import cn.stylefeng.guns.modular.system.mapper.NoticeMapper; import cn.stylefeng.guns.modular.system.mapper.NoticeMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
...@@ -25,7 +26,8 @@ public class NoticeService extends ServiceImpl<NoticeMapper, Notice> { ...@@ -25,7 +26,8 @@ public class NoticeService extends ServiceImpl<NoticeMapper, Notice> {
* @author fengshuonan * @author fengshuonan
* @Date 2018/12/23 6:05 PM * @Date 2018/12/23 6:05 PM
*/ */
public List<Map<String, Object>> list(String condition) { public Page<Map<String, Object>> list(String condition) {
return this.baseMapper.list(condition); Page page = LayuiPageFactory.defaultPage();
return this.baseMapper.list(page, condition);
} }
} }
...@@ -7,6 +7,7 @@ import cn.stylefeng.guns.core.common.constant.cache.Cache; ...@@ -7,6 +7,7 @@ import cn.stylefeng.guns.core.common.constant.cache.Cache;
import cn.stylefeng.guns.core.common.constant.factory.ConstantFactory; import cn.stylefeng.guns.core.common.constant.factory.ConstantFactory;
import cn.stylefeng.guns.core.common.exception.BizExceptionEnum; import cn.stylefeng.guns.core.common.exception.BizExceptionEnum;
import cn.stylefeng.guns.core.common.node.ZTreeNode; import cn.stylefeng.guns.core.common.node.ZTreeNode;
import cn.stylefeng.guns.core.common.page.LayuiPageFactory;
import cn.stylefeng.guns.core.log.LogObjectHolder; import cn.stylefeng.guns.core.log.LogObjectHolder;
import cn.stylefeng.guns.core.util.CacheUtil; import cn.stylefeng.guns.core.util.CacheUtil;
import cn.stylefeng.guns.modular.system.entity.Relation; import cn.stylefeng.guns.modular.system.entity.Relation;
...@@ -17,6 +18,7 @@ import cn.stylefeng.guns.modular.system.model.RoleDto; ...@@ -17,6 +18,7 @@ import cn.stylefeng.guns.modular.system.model.RoleDto;
import cn.stylefeng.roses.core.util.ToolUtil; import cn.stylefeng.roses.core.util.ToolUtil;
import cn.stylefeng.roses.kernel.model.exception.RequestEmptyException; import cn.stylefeng.roses.kernel.model.exception.RequestEmptyException;
import cn.stylefeng.roses.kernel.model.exception.ServiceException; import cn.stylefeng.roses.kernel.model.exception.ServiceException;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
...@@ -146,8 +148,9 @@ public class RoleService extends ServiceImpl<RoleMapper, Role> { ...@@ -146,8 +148,9 @@ public class RoleService extends ServiceImpl<RoleMapper, Role> {
* @return * @return
* @date 2017年2月12日 下午9:14:34 * @date 2017年2月12日 下午9:14:34
*/ */
public List<Map<String, Object>> selectRoles(String condition) { public Page<Map<String, Object>> selectRoles(String condition) {
return this.baseMapper.selectRoles(condition); Page page = LayuiPageFactory.defaultPage();
return this.baseMapper.selectRoles(page, condition);
} }
/** /**
......
...@@ -5,6 +5,7 @@ import cn.stylefeng.guns.core.common.constant.Const; ...@@ -5,6 +5,7 @@ import cn.stylefeng.guns.core.common.constant.Const;
import cn.stylefeng.guns.core.common.constant.state.ManagerStatus; import cn.stylefeng.guns.core.common.constant.state.ManagerStatus;
import cn.stylefeng.guns.core.common.exception.BizExceptionEnum; import cn.stylefeng.guns.core.common.exception.BizExceptionEnum;
import cn.stylefeng.guns.core.common.node.MenuNode; import cn.stylefeng.guns.core.common.node.MenuNode;
import cn.stylefeng.guns.core.common.page.LayuiPageFactory;
import cn.stylefeng.guns.core.shiro.ShiroKit; import cn.stylefeng.guns.core.shiro.ShiroKit;
import cn.stylefeng.guns.core.shiro.ShiroUser; import cn.stylefeng.guns.core.shiro.ShiroUser;
import cn.stylefeng.guns.core.shiro.service.UserAuthService; import cn.stylefeng.guns.core.shiro.service.UserAuthService;
...@@ -15,6 +16,7 @@ import cn.stylefeng.guns.modular.system.mapper.UserMapper; ...@@ -15,6 +16,7 @@ import cn.stylefeng.guns.modular.system.mapper.UserMapper;
import cn.stylefeng.guns.modular.system.model.UserDto; import cn.stylefeng.guns.modular.system.model.UserDto;
import cn.stylefeng.roses.core.datascope.DataScope; import cn.stylefeng.roses.core.datascope.DataScope;
import cn.stylefeng.roses.kernel.model.exception.ServiceException; import cn.stylefeng.roses.kernel.model.exception.ServiceException;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -136,8 +138,9 @@ public class UserService extends ServiceImpl<UserMapper, User> { ...@@ -136,8 +138,9 @@ public class UserService extends ServiceImpl<UserMapper, User> {
* @author fengshuonan * @author fengshuonan
* @Date 2018/12/24 22:45 * @Date 2018/12/24 22:45
*/ */
public List<Map<String, Object>> selectUsers(DataScope dataScope, String name, String beginTime, String endTime, Long deptId) { public Page<Map<String, Object>> selectUsers(DataScope dataScope, String name, String beginTime, String endTime, Long deptId) {
return this.baseMapper.selectUsers(dataScope, name, beginTime, endTime, deptId); Page page = LayuiPageFactory.defaultPage();
return this.baseMapper.selectUsers(page, dataScope, name, beginTime, endTime, deptId);
} }
/** /**
......
...@@ -19,6 +19,8 @@ import cn.hutool.core.util.StrUtil; ...@@ -19,6 +19,8 @@ import cn.hutool.core.util.StrUtil;
import cn.stylefeng.guns.core.common.constant.factory.ConstantFactory; import cn.stylefeng.guns.core.common.constant.factory.ConstantFactory;
import cn.stylefeng.guns.modular.system.entity.Dict; import cn.stylefeng.guns.modular.system.entity.Dict;
import cn.stylefeng.roses.core.base.warpper.BaseControllerWrapper; import cn.stylefeng.roses.core.base.warpper.BaseControllerWrapper;
import cn.stylefeng.roses.kernel.model.page.PageResult;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -31,8 +33,8 @@ import java.util.Map; ...@@ -31,8 +33,8 @@ import java.util.Map;
*/ */
public class DictWarpper extends BaseControllerWrapper { public class DictWarpper extends BaseControllerWrapper {
public DictWarpper(List<Map<String, Object>> multi) { public DictWarpper(Page<Map<String, Object>> page) {
super(multi); super(page);
} }
@Override @Override
......
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/guns?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=CTT
username: root
password: root
filters: wall,mergeStat
#多数据源情况的配置
guns:
muti-datasource:
open: false
url: jdbc:mysql://127.0.0.1:3306/guns_test?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=CTT
username: root
password: root
dataSourceNames:
- dataSourceGuns
- dataSourceBiz
\ No newline at end of file
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/guns?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=CTT
username: root
password: root
filters: wall,mergeStat
#多数据源情况的配置
guns:
muti-datasource:
open: false
url: jdbc:mysql://127.0.0.1:3306/guns_test?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=CTT
username: root
password: root
dataSourceNames:
- dataSourceGuns
- dataSourceBiz
\ No newline at end of file
server: server:
port: 80 port: 80
tomcat: max-http-header-size: 10240
max-http-header-size: 10240 #单位:字节
guns: guns:
swagger-open: true #是否开启swagger (true/false) swagger-open: true #是否开启swagger (true/false)
...@@ -18,12 +17,12 @@ spring: ...@@ -18,12 +17,12 @@ spring:
active: @spring.active@ active: @spring.active@
mvc: mvc:
view: view:
prefix: /WEB-INF prefix: /pages
devtools: devtools:
restart: restart:
enabled: false enabled: false
additional-paths: src/main/java additional-paths: src/main/java
exclude: assets/**,WEB-INF/** exclude: assets/**,pages/**
servlet: servlet:
multipart: multipart:
max-request-size: 100MB max-request-size: 100MB
......
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/png" sizes="16x16" href="${ctxPath}/assets/common/favicon.ico">
<title> 404 - Guns</title>
<link href="${ctxPath}/assets/common/plugins/bootstrap/css/bootstrap.min.css" rel="stylesheet">
<link href="${ctxPath}/assets/common/static/css/style.css" rel="stylesheet">
<link href="${ctxPath}/assets/common/static/css/colors/blue.css" id="theme" rel="stylesheet">
</head>
<body class="fix-header card-no-border">
<section id="wrapper" class="error-page">
@var bgImg = images.error404();
<div class="error-box" style="background-image:url(${bgImg});">
<div class="error-body text-center">
<h1>404</h1>
<h3 class="text-uppercase">Page Not Found !</h3>
<p class="text-muted m-t-30 m-b-30">YOU SEEM TO BE TRYING TO FIND HIS WAY HOME</p>
<a href="${ctxPath}/" class="btn btn-info btn-rounded waves-effect waves-light m-b-40">Back to home</a></div>
<footer class="footer text-center">
© 2018 Guns by stylefeng (https://gitee.com/stylefeng/guns)
</footer>
</div>
</section>
<script src="${ctxPath}/assets/common/plugins/jquery/jquery.min.js"></script>
<script src="${ctxPath}/assets/common/plugins/bootstrap/js/tether.min.js"></script>
<script src="${ctxPath}/assets/common/plugins/bootstrap/js/bootstrap.min.js"></script>
<script src="${ctxPath}/assets/common/static/js/waves.js"></script>
</body>
</html>
@layout("/common/_container.html",{title:"代码生成"}){
<div class="row" xmlns="">
<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="form-horizontal" id="generate">
<div class="row">
<div class="col-sm-4">
<#input id="projectPath" name="项目路径" value="${params.projectPath}"/>
</div>
<div class="col-sm-4">
<#input id="projectPackage" name="项目的包" value="${params.projectPackage}"/>
</div>
<div class="col-sm-4">
<#input id="corePackage" name="核心包" value="${params.corePackage}"/>
</div>
</div>
<div class="row">
<div class="col-sm-3">
<#input id="author" name="作者" value="${params.author!}"/>
</div>
<div class="col-sm-3">
<#input id="bizName" name="业务名称" />
</div>
<div class="col-sm-3">
<#input id="moduleName" name="模块名称" value="${params.moduleName}"/>
</div>
<div class="col-sm-3">
<#input id="parentMenuName" name="父级菜单名称" underline="false" value="${params.parentMenuName}"
hidden="pid" readonly="readonly"
clickFun="Code.showMenuSelectTree(); return false;"
style="background-color: #ffffff !important;"
selectFlag="true" selectId="pcodeTreeDiv" selectTreeId="pcodeTree" selectStyle=""/>
</div>
</div>
<div class="row">
<div class="col-sm-3">
<#input id="tableName" name="表名称" disabled="disabled"/>
</div>
<div class="col-sm-3">
<#input id="ignoreTabelPrefix" name="表前缀" value="${params.ignoreTabelPrefix}"/>
</div>
<div class="col-sm-3">
<#input id="className" name="类名" disabled="disabled"/>
</div>
</div>
<div class="row">
<div class="col-sm-6">
<button id="genBtn" type="button" class="btn btn-primary mr10"
onclick="Code.generate()">
<span style="padding: 5px 20px;">生成</span>
</button>
</div>
</div>
</div>
<div style="padding-top: 10px; overflow: hidden"
class="container-fluid">
<div class="col-md-12">
<div class="row admin-form">
<div class="col-md-3 col-md-offset-3">
<h2>数据表</h2>
<div class="list-group" id="tableList"
data-bind="foreach: tables"
style="height: 500px; overflow-y: scroll">
@for(table in tables!){
<a href="javascript:void(0)" class="list-group-item" tableName="${table.tableName}" onclick="Code.selectTable('${table.tableName}')">${table.tableName}-${table.tableComment}</a>
@}
</div>
</div>
<div class="col-md-3">
<span><h2>模板</h2></span>
<div class="list-group" id="templateList"
style="height: 500px; overflow-y: scroll">
@for(template in templates!){
<a href="javascript:void(0)" class="list-group-item" key="${template.key}" onclick="Code.selectTemplate('${template.key}')">${template.desc}</a>
@}
</div>
</div>
</div>
</div>
</div>
<ul class="nav nav-list">
<li class="divider"></li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="${ctxPath}/static/js/common/select-list-object.js"></script>
<script src="${ctxPath}/static/modular/code/gen.js"></script>
@}
<!DOCTYPE html>
<html lang="en">
@/**
@ * 本页面所用的模板变量
@ *
@ * plugins : 需要用到的插件,目前有["table","ztree","sweet-alert","laydate","layer"]
@ * title : 页面的标题
@ * layoutContent : 主页面的html内容
@ * js : 业务所需要的js,为数组
@ * css : 业务所需要的css,为数组
@ *
@ * 下面的需要从后台返回
@ *
@ * menus : 菜单列表的集合
@ * name : 姓名
@ * avatar : 头像
@ * email : 邮箱
@ **/
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<!--Tell the browser to be responsive to screen width -->
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>${title!"Guns管理系统"}</title>
<meta name="description" content="Guns管理系统">
<meta name="author" content="stylefeng">
<!-- Favicon icon -->
<link rel="icon" type="image/png" sizes="16x16" href="${ctxPath}/assets/common/favicon.ico">
<!-- ============================================================== -->
<!-- css资源文件 -->
<!-- ============================================================== -->
<!-- Bootstrap Core CSS -->
<link href="${ctxPath}/assets/common/plugins/bootstrap/css/bootstrap.min.css" rel="stylesheet">
<!-- toast提示框 CSS -->
<link href="${ctxPath}/assets/common/plugins/toast-master/css/jquery.toast.css" rel="stylesheet">
<!-- Custom CSS -->
<link href="${ctxPath}/assets/common/static/css/style.css" rel="stylesheet">
<link href="${ctxPath}/assets/common/static/stylefeng/feng.css" rel="stylesheet">
<!-- You can change the theme colors from here -->
<link href="${ctxPath}/assets/common/static/css/colors/blue.css" id="theme" rel="stylesheet">
<!--其他插件css-->
@if(isNotEmpty(plugins)){
@if(array.contain(plugins,"table")){
<link href="${ctxPath}/assets/common/plugins/bootstrap-table/bootstrap-table.min.css" rel="stylesheet" type="text/css" />
@}
@if(array.contain(plugins,"ztree")){
<link href="${ctxPath}/assets/common/plugins/ztree/zTreeStyle.css" rel="stylesheet" type="text/css" />
@}
@if(array.contain(plugins,"sweet-alert")){
<link href="${ctxPath}/assets/common/plugins/sweetalert/sweetalert.css" rel="stylesheet" type="text/css" />
@}
@if(array.contain(plugins,"cropper")){
<link href="${ctxPath}/assets/common/plugins/cropper/cropper.min.css" rel="stylesheet" type="text/css" />
@}
@if(array.contain(plugins,"bootstrap-treetable")){
<link href="${ctxPath}/assets/common/plugins/bootstrap-treetable/bootstrap-treetable.min.css" rel="stylesheet" type="text/css" />
@}
@if(array.contain(plugins,"treeview")){
<link href="${ctxPath}/assets/common/plugins/bootstrap-treeview/bootstrap-treeview.min.css" rel="stylesheet" type="text/css" />
@}
@}
<!--其他业务用的css-->
@if(isNotEmpty(css)){
@for(item in css){
@if(strutil.startWith(item,"/")){
@item = item + ctxPath;
@}
<link href="${item}" rel="stylesheet" type="text/css" />
@}
@}
</head>
<body class="fix-header fix-sidebar card-no-border">
<!-- ============================================================== -->
<!-- Main wrapper - style you can find in pages.scss -->
<!-- ============================================================== -->
<div id="main-wrapper">
<!-- 顶部导航栏 - style you can find in pages.scss -->
@include("/common/_top_header.html"){}
<!-- 左侧菜单列表 - style you can find in sidebar.scss -->
@include("/common/_sidebar.html"){}
<!-- 主页正式内容开始 -->
@include("/common/_content.html"){}
</div>
<!-- jquery -->
<script src="${ctxPath}/assets/common/plugins/jquery/jquery.min.js"></script>
<!-- Bootstrap tether Core JavaScript -->
<script src="${ctxPath}/assets/common/plugins/bootstrap/js/popper.min.js"></script>
<script src="${ctxPath}/assets/common/plugins/bootstrap/js/tether.min.js"></script>
<script src="${ctxPath}/assets/common/plugins/bootstrap/js/bootstrap.min.js"></script>
<!-- slimscrollbar scrollbar JavaScript(滚动条插件) -->
<script src="${ctxPath}/assets/common/static/js/jquery.slimscroll.js"></script>
<!--Wave Effects(点击按钮的波浪效果) -->
<script src="${ctxPath}/assets/common/static/js/waves.js"></script>
<!--Menu sidebar (左侧菜单切换插件) -->
<script src="${ctxPath}/assets/common/static/js/sidebarmenu.js"></script>
<!--stickey kit(页面头部工具栏固定) -->
<script src="${ctxPath}/assets/common/plugins/sticky-kit-master/dist/sticky-kit.min.js"></script>
<!--toast(提示框) -->
<script src="${ctxPath}/assets/common/plugins/toast-master/js/jquery.toast.js"></script>
<!--Guns JavaScript -->
<script src="${ctxPath}/assets/common/static/stylefeng/feng.js"></script>
<script src="${ctxPath}/assets/common/static/stylefeng/ajax-object.js"></script>
<!--Custom JavaScript -->
<script src="${ctxPath}/assets/common/static/js/custom.min.js"></script>
<!-- vue -->
<script src="${ctxPath}/assets/common/plugins/vue/vue.js"></script>
<!-- 右侧主题设置 -->
<script src="${ctxPath}/assets/common/plugins/styleswitcher/jQuery.style.switcher.js"></script>
<!-- 加入contextPath属性和session超时的配置 -->
<script type="text/javascript">
Feng.addCtx("${ctxPath}");
Feng.sessionTimeoutRegistry();
</script>
<!--其他插件js-->
@if(isNotEmpty(plugins)){
@if(array.contain(plugins,"table")){
<script src="${ctxPath}/assets/common/plugins/bootstrap-table/bootstrap-table.min.js"></script>
<script src="${ctxPath}/assets/common/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
<script src="${ctxPath}/assets/common/plugins/bootstrap-table/bootstrap-table-object.js"></script>
@}
@if(array.contain(plugins,"ztree")){
<script src="${ctxPath}/assets/common/plugins/ztree/jquery.ztree.all.min.js"></script>
<script src="${ctxPath}/assets/common/plugins/ztree/ztree-object.js"></script>
@}
@if(array.contain(plugins,"layer")){
<script src="${ctxPath}/assets/common/plugins/layer/layer.js"></script>
@}
@if(array.contain(plugins,"sweet-alert")){
<script src="${ctxPath}/assets/common/plugins/sweetalert/sweetalert.min.js"></script>
@}
@if(array.contain(plugins,"laydate")){
<script src="${ctxPath}/assets/common/plugins/laydate/laydate.js"></script>
@}
@if(array.contain(plugins,"cropper")){
<script src="${ctxPath}/assets/common/plugins/cropper/cropper.min.js"></script>
<script src="${ctxPath}/assets/common/plugins/cropper/cropper.jquery.min.js"></script>
@}
@if(array.contain(plugins,"bootstrap-treetable")){
<script src="${ctxPath}/assets/common/plugins/bootstrap-treetable/bootstrap-treetable.min.js"></script>
<script src="${ctxPath}/assets/common/plugins/bootstrap-treetable/bootstrap-treetable-object.js"></script>
@}
@if(array.contain(plugins,"treeview")){
<script src="${ctxPath}/assets/common/plugins/bootstrap-treeview/bootstrap-treeview.min.js"></script>
@}
@}
<!--其他业务用的js-->
@if(isNotEmpty(js)){
@for(item in js){
@if(strutil.startWith(item,"/")){
@item = ctxPath + item;
@}
<script src="${item}"></script>
@}
@}
</body>
</html>
<div class="page-wrapper">
<div class="p-20 p-b-0">
<!--开始主页的内容-->
${layoutContent}
<!-- 主题切换部分 -->
<div class="right-sidebar">
<div class="slimscrollright">
<div class="rpanel-title"> 主题切换 <span><i class="ti-close right-side-toggle"></i></span> </div>
<div class="r-panel-body">
<ul id="themecolors" class="m-t-20">
<li><b>With Light sidebar</b></li>
<li><a href="javascript:void(0)" data-theme="default" class="default-theme">1</a></li>
<li><a href="javascript:void(0)" data-theme="green" class="green-theme">2</a></li>
<li><a href="javascript:void(0)" data-theme="red" class="red-theme">3</a></li>
<li><a href="javascript:void(0)" data-theme="blue" class="blue-theme working">4</a></li>
<li><a href="javascript:void(0)" data-theme="purple" class="purple-theme">5</a></li>
<li><a href="javascript:void(0)" data-theme="megna" class="megna-theme">6</a></li>
<li class="d-block m-t-30"><b>With Dark sidebar</b></li>
<li><a href="javascript:void(0)" data-theme="default-dark" class="default-dark-theme">7</a></li>
<li><a href="javascript:void(0)" data-theme="green-dark" class="green-dark-theme">8</a></li>
<li><a href="javascript:void(0)" data-theme="red-dark" class="red-dark-theme">9</a></li>
<li><a href="javascript:void(0)" data-theme="blue-dark" class="blue-dark-theme">10</a></li>
<li><a href="javascript:void(0)" data-theme="purple-dark" class="purple-dark-theme">11</a></li>
<li><a href="javascript:void(0)" data-theme="megna-dark" class="megna-dark-theme ">12</a></li>
</ul>
</div>
</div>
</div>
</div>
</div>
<!DOCTYPE html>
<html lang="en">
@/**
@ * 本页面所用的模板变量
@ *
@ * plugins : 需要用到的插件,目前有["table","ztree","sweet-alert","laydate","layer"]
@ * title : 页面的标题
@ * layoutContent : 主页面的html内容
@ * js : 业务所需要的js,为数组
@ * css : 业务所需要的css,为数组
@ **/
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<!--Tell the browser to be responsive to screen width -->
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>${title!"Guns管理系统"}</title>
<meta name="description" content="Guns管理系统">
<meta name="author" content="stylefeng">
<!-- Favicon icon -->
<link rel="icon" type="image/png" sizes="16x16" href="${ctxPath}/assets/common/favicon.ico">
<!-- ============================================================== -->
<!-- css资源文件 -->
<!-- ============================================================== -->
<!-- Bootstrap Core CSS -->
<link href="${ctxPath}/assets/common/plugins/bootstrap/css/bootstrap.min.css" rel="stylesheet">
<!-- toast提示框 CSS -->
<link href="${ctxPath}/assets/common/plugins/toast-master/css/jquery.toast.css" rel="stylesheet">
<!-- Custom CSS -->
<link href="${ctxPath}/assets/common/static/css/style.css" rel="stylesheet">
<link href="${ctxPath}/assets/common/static/stylefeng/feng.css" rel="stylesheet">
<!-- You can change the theme colors from here -->
<link href="${ctxPath}/assets/common/static/css/colors/blue.css" id="theme" rel="stylesheet">
<!--其他插件css-->
@if(isNotEmpty(plugins)){
@if(array.contain(plugins,"table")){
<link href="${ctxPath}/assets/common/plugins/bootstrap-table/bootstrap-table.min.css" rel="stylesheet" type="text/css" />
@}
@if(array.contain(plugins,"ztree")){
<link href="${ctxPath}/assets/common/plugins/ztree/zTreeStyle.css" rel="stylesheet" type="text/css" />
@}
@if(array.contain(plugins,"sweet-alert")){
<link href="${ctxPath}/assets/common/plugins/sweetalert/sweetalert.css" rel="stylesheet" type="text/css" />
@}
@}
<!--其他业务用的css-->
@if(isNotEmpty(css)){
@for(item in css){
@if(strutil.startWith(item,"/")){
@item = item + ctxPath;
@}
<link href="${item}" rel="stylesheet" type="text/css" />
@}
@}
</head>
<body class="fix-header fix-sidebar card-no-border">
<!-- ============================================================== -->
<!-- Main wrapper - style you can find in pages.scss -->
<!-- ============================================================== -->
<div id="main-wrapper">
${layoutContent}
</div>
<!-- jquery -->
<script src="${ctxPath}/assets/common/plugins/jquery/jquery.min.js"></script>
<!-- Bootstrap tether Core JavaScript -->
<script src="${ctxPath}/assets/common/plugins/bootstrap/js/tether.min.js"></script>
<script src="${ctxPath}/assets/common/plugins/bootstrap/js/bootstrap.min.js"></script>
<!-- slimscrollbar scrollbar JavaScript(滚动条插件) -->
<script src="${ctxPath}/assets/common/static/js/jquery.slimscroll.js"></script>
<!--Wave Effects(点击按钮的波浪效果) -->
<script src="${ctxPath}/assets/common/static/js/waves.js"></script>
<!--Menu sidebar (左侧菜单切换插件) -->
<script src="${ctxPath}/assets/common/static/js/sidebarmenu.js"></script>
<!--stickey kit(页面头部工具栏固定) -->
<script src="${ctxPath}/assets/common/plugins/sticky-kit-master/dist/sticky-kit.min.js"></script>
<!--toast(提示框) -->
<script src="${ctxPath}/assets/common/plugins/toast-master/js/jquery.toast.js"></script>
<!--Guns JavaScript -->
<script src="${ctxPath}/assets/common/static/stylefeng/feng.js"></script>
<script src="${ctxPath}/assets/common/static/stylefeng/ajax-object.js"></script>
<!--Custom JavaScript -->
<script src="${ctxPath}/assets/common/static/js/custom.min.js"></script>
<!-- vue -->
<script src="${ctxPath}/assets/common/plugins/vue/vue.js"></script>
<!-- 加入contextPath属性和session超时的配置 -->
<script type="text/javascript">
Feng.addCtx("${ctxPath}");
Feng.sessionTimeoutRegistry();
</script>
<!--其他插件js-->
@if(isNotEmpty(plugins)){
@if(array.contain(plugins,"table")){
<script src="${ctxPath}/assets/common/plugins/bootstrap-table/bootstrap-table.min.js"></script>
<script src="${ctxPath}/assets/common/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
<script src="${ctxPath}/assets/common/plugins/bootstrap-table/bootstrap-table-object.js"></script>
@}
@if(array.contain(plugins,"ztree")){
<script src="${ctxPath}/assets/common/plugins/ztree/jquery.ztree.all.min.js"></script>
<script src="${ctxPath}/assets/common/plugins/ztree/ztree-object.js"></script>
@}
@if(array.contain(plugins,"layer")){
<script src="${ctxPath}/assets/common/plugins/layer/layer.js"></script>
@}
@if(array.contain(plugins,"sweet-alert")){
<script src="${ctxPath}/assets/common/plugins/sweetalert/sweetalert.min.js"></script>
@}
@if(array.contain(plugins,"laydate")){
<script src="${ctxPath}/assets/common/plugins/laydate/laydate.js"></script>
@}
@if(array.contain(plugins,"validation")){
<script src="${ctxPath}/assets/common/plugins/validation/validation.js"></script>
@}
@if(array.contain(plugins,"wangEditor")){
<script src="${ctxPath}/assets/common/plugins/wangEditor/wangEditor.min.js"></script>
@}
@}
<!--其他业务用的js-->
@if(isNotEmpty(js)){
@for(item in js){
@if(strutil.startWith(item,"/")){
@item = ctxPath + item;
@}
<script src="${item}"></script>
@}
@}
</body>
</html>
<aside class="left-sidebar">
<div class="scroll-sidebar">
<!--顶部用户头像部分-->
<div class="user-profile">
<div class="profile-img"> <img src="${avatar}" alt="user" /> </div>
<div class="profile-text">
<a href="#" class="dropdown-toggle link u-dropdown" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="true">${name!}<span class="caret"></span></a>
<div class="dropdown-menu animated flipInY top-35">
<a href="${ctxPath}/mgr/user_info" class="dropdown-item"><i class="ti-user"></i>个人信息</a>
<div class="dropdown-divider"></div> <a href="${ctxPath}/mgr/user_chpwd" class="dropdown-item"><i class="ti-settings"></i>修改密码</a>
<div class="dropdown-divider"></div> <a href="${ctxPath}/logout" class="dropdown-item"><i class="fa fa-power-off"></i>退出</a>
</div>
</div>
</div>
<!--菜单条-->
<nav class="sidebar-nav">
<ul id="sidebarnav">
@for(title in menus!){
<!--这个是分组线和分割线-->
<!--<li class="nav-devider"></li>-->
<!--<li class="nav-small-cap">PERSONAL</li>-->
@if(tool.isEmpty(title.children)){
<li>
<a href="${ctxPath}${title.url}"><i class="fa ${title.icon}"></i>${title.name}</a>
</li>
@}else{
<li>
<a class="has-arrow " href="#" aria-expanded="false">
<i class="fa ${title.icon}"></i><span class="hide-menu">${title.name} </span>
</a>
<ul aria-expanded="false" class="collapse">
@for(subTitle in title.children){
@if(tool.isEmpty(subTitle.children)){
<li><a href="${ctxPath}${subTitle.url}">${subTitle.name}</a></li>
@}else{
<li>
<a class="has-arrow" href="#" aria-expanded="false">${subTitle.name}</a>
<ul aria-expanded="false" class="collapse">
@for(thirdTitle in subTitle.children){
<li><a href="${ctxPath}${thirdTitle.url}">${thirdTitle.name}</a></li>
@}
</ul>
</li>
@}
@}
</ul>
</li>
@}
@}
</ul>
</nav>
</div>
<div class="sidebar-footer">
<a href="${ctxPath}/mgr/user_info" class="link" data-toggle="tooltip" title="编辑资料"><i class="mdi mdi-account"></i></a>
<a href="${ctxPath}/mgr/user_chpwd" class="link" data-toggle="tooltip" title="修改密码"><i class="ti-settings"></i></a>
<a href="${ctxPath}/logout" class="link" data-toggle="tooltip" title="退出登录"><i class="mdi mdi-power"></i></a>
</div>
</aside>
<header class="topbar">
<nav class="navbar top-navbar navbar-expand-md navbar-light">
<!--页面左上角的logo部分-->
<div class="navbar-header">
<a class="navbar-brand" href="${ctxPath}/">
<b>
<i class=" wi wi-solar-eclipse"></i>
</b>
<span>Guns管理系统</span>
</a>
</div>
<!--页面顶部的导航条-->
<div class="navbar-collapse">
<!--顶部导航条左侧(收缩菜单按钮和站内消息通知)-->
<ul class="navbar-nav mr-auto mt-md-0 ">
<!--隐藏和显示sidebar-->
<li class="nav-item"><a class="nav-link nav-toggler hidden-md-up text-muted waves-effect waves-dark" href="javascript:void(0)"><i class="ti-menu"></i></a></li>
<li class="nav-item"><a class="nav-link sidebartoggler hidden-sm-down text-muted waves-effect waves-dark" href="javascript:void(0)"><i class="icon-arrow-left-circle"></i></a></li>
<!--通知-->
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle text-muted waves-effect waves-dark" href="" id="2" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <i class="mdi mdi-email"></i>
<div class="notify"><span class="heartbit"></span> <span class="point"></span></div>
</a>
<div class="dropdown-menu mailbox animated bounceInDown" aria-labelledby="2">
<ul>
<li>
<div class="drop-title">您有1条通知</div>
</li>
<li>
<div class="message-center">
<a href="https://gitee.com/stylefeng/guns" target="_blank">
<div class="user-img">
<img src="${avatar}" alt="user" class="img-circle"> <span class="profile-status online pull-right"></span>
</div>
<div class="mail-contnet">
<h5>Hi!Guns 旗舰版发布了!</h5>
<span class="time">2018-11-20 12:00</span>
</div>
</a>
</div>
</li>
<li>
<a class="nav-link text-center" href="javascript:void(0);"> <strong>查看所有通知</strong> <i class="fa fa-angle-right"></i> </a>
</li>
</ul>
</div>
</li>
<!--主题切换-->
<li class="nav-item">
<a class="nav-link text-muted waves-effect waves-dark" href="javascript:void(0)" onclick="Feng.showRightSideBar()">
<i class="mdi mdi-settings"></i>
</a>
</li>
</ul>
<!--顶部导航条右侧(profile和多语言按钮) -->
<ul class="navbar-nav my-lg-0">
<!--用户信息按钮-->
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle text-muted waves-effect waves-dark" href="" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><img
src="${avatar}" alt="user" class="profile-pic"/></a>
<div class="dropdown-menu dropdown-menu-right animated flipInY">
<ul class="dropdown-user">
<li>
<div class="dw-user-box">
<div class="u-img"><img src="${avatar}" alt="user"></div>
<div class="u-text">
<h4>${name!}</h4>
<p class="text-muted">${email!}</p><a href="${ctxPath}/mgr/user_info" class="btn btn-rounded btn-danger btn-sm">个人信息</a></div>
</div>
</li>
<li role="separator" class="divider"></li>
<li><a href="${ctxPath}/mgr/user_info"><i class="ti-user"></i> 编辑资料</a></li>
<li><a href="${ctxPath}/mgr/user_chpwd"><i class="ti-settings"></i> 修改密码</a></li>
<li role="separator" class="divider"></li>
<li><a href="${ctxPath}/logout"><i class="fa fa-power-off"></i> 退出</a></li>
</ul>
</div>
</li>
<!--多语言选择-->
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle text-muted waves-effect waves-dark" href="" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <i
class="flag-icon flag-icon-cn"></i></a>
<div class="dropdown-menu dropdown-menu-right animated flipInY">
<a class="dropdown-item" href="#"><i class="flag-icon flag-icon-cn"></i> Chinese</a>
<a class="dropdown-item" href="#"><i class="flag-icon flag-icon-us"></i> English</a>
</div>
</li>
</ul>
</div>
</nav>
</header>
@/*
名称查询条件标签的参数说明:
name : 查询条件的名称
id : 查询内容的input框id
@*/
<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" id="${id}" placeholder="${placeholder!}" />
</div>
\ No newline at end of file
@/*
选择查询条件标签的参数说明:
name : 查询条件的名称
id : 查询内容的input框id
@*/
<div class="input-group">
<div class="input-group-btn">
<button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button">
${name}
</button>
</div>
<select class="form-control" id="${id}">
${tagBody!}
</select>
</div>
\ No newline at end of file
@/*
时间查询条件标签的参数说明:
name : 查询条件的名称
id : 查询内容的input框id
isTime : 日期是否带有小时和分钟(true/false)
@*/
<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" 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-白色)
clickFun : 点击按钮所执行的方法
icon : 按钮上的图标的样式
name : 按钮名称
@*/
@var btnType = "";
@if(isEmpty(btnCss)){
@ btnType = "primary";
@}else{
@ btnType = btnCss;
@}
<button type="button" class="btn btn-${btnType}" 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>
@}
@/*
表格标签的参数说明:
id : table表格的id
@*/
<table id="${id}" data-mobile-responsive="true" data-click-to-select="true" class="lh-11">
<thead>
<tr>
<th data-field="selectItem" data-checkbox="true"></th>
</tr>
</thead>
</table>
\ No newline at end of file
1 dictSelector(字典选择器)
此标签是为了方便在前台form表单中使用系统中维护的字典而开发的,具体说明如下:
1.1 标签样例
<#dictSelector id="sex" name ="sex" code="sys_sex" readonly="readonly" label="性别" underline="true" value="${user.sex}" />
1.2 属性说明
id: (非必须) 控件的id
name: (非必须) 控件的name
code:(必须) 字典类型编码,根据code的值去后台查询该类型的字典。
type:(非必须) 控件类型,可选项为[select,radio,checkbox],标签会根据填写的类型,生成不同的控件。
searchnum:(非必须)下拉框达到多少个,开启搜索框,默认10个,type为select起效。
label:(非必须) 字典属性名称
width:(非必须) 控件的宽度单位为px,type为select起效。
value: (非必须) 控件默认值,多选时值要用,分隔。
placeholder:(非必须) 控件提示信息,type为select起效。
multiple:(非必须) 是否开启多选,可选值[true,false],默认为false,type为select起效。
underline:(非必须) 是否显示分割线,可选值[true,false],默认为false。
onchange:(非必须) onchange事件方法名称,会传入更改后的值作为参数,例:onchange="myOnChange" function myOnChange(newVal){}。
readonly:(非必须)只读控件,可选值[true,false],默认false
disabled:(非必须) 禁用控件,可选值[true,false],默认false
@layout("/common/_container.html",{title:"概览"}){
<div class="row">
<div class="col-md-6 col-lg-3 col-xlg-3">
<div class="card card-inverse card-info">
<div class="box bg-info text-center">
<h1 class="font-light text-white">25w+</h1>
<h6 class="text-white">Guns码云访问量</h6>
</div>
</div>
</div>
<div class="col-md-6 col-lg-3 col-xlg-3">
<div class="card card-primary card-inverse">
<div class="box text-center">
<h1 class="font-light text-white">37k+</h1>
<h6 class="text-white">Guns zip下载量</h6>
</div>
</div>
</div>
<div class="col-md-6 col-lg-3 col-xlg-3">
<div class="card card-inverse card-success">
<div class="box text-center">
<h1 class="font-light text-white">41k+</h1>
<h6 class="text-white">pull统计</h6>
</div>
</div>
</div>
<div class="col-md-6 col-lg-3 col-xlg-3">
<div class="card card-inverse card-warning">
<div class="box text-center">
<h1 class="font-light text-white">500+</h1>
<h6 class="text-white">push统计</h6>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="card card-outline-theme">
<div class="card-header">
<h4 class="m-b-0 text-white">项目特点</h4></div>
<div class="card-body">
<h3 class="card-title">全新的技术选型</h3>
<p class="card-text">基于Spring Boot,简化了大量项目配置和maven依赖,整合了常用框架springmvc + shiro + mybatis-plus + beetl,更专注于业务开发</p>
<h3 class="card-title">高效迭代</h3>
<p class="card-text">每周至少一次的版本更新或迭代,活跃的社区,快速发现并修复框架中的问题</p>
<h3 class="card-title">丰富的文档</h3>
<p class="card-text">《Guns技术文档》基于最新版的Guns,集Guns使用手册,Guns开发手册,Guns核心思想于一体,帮助使用者快速上手开发,另外《Guns视频教程》系统地讲解了如何构建一个日常生产环境实用的后台管理系统及其原理</p>
<h3 class="card-title">简洁友好的代码风格</h3>
<p class="card-text">自Guns v1.0开始,Guns始终致力于坚持做更简洁的管理系统,分包明确规范,业务按模块单独隔离,整齐的代码缩进,关键位置的代码注释</p>
<h3 class="card-title">恰到好处的封装</h3>
<p class="card-text">roses-kernel模块经过多年积累,组成一套企业级的生态化组件,更适合企业级的项目开发</p>
<h3 class="card-title">人性化的代码生成器</h3>
<p class="card-text">可生成带有主页跳转和增删改查的通用控制器、html页面以及相关的js,还可以生成Service和Dao,只需填写一些基本参数,即可快速生成新业务模板代码</p>
<a href="javascript:void(0)" class="btn btn-info">点击查看项目主页</a>
</div>
</div>
</div>
<div class="col-md-12">
<div class="card card-outline-theme">
<div class="card-header">
<h4 class="m-b-0 text-white">Guns历史版本</h4></div>
<div class="card-body">
<div class="row">
<div class="col-lg-3 col-md-6 img-responsive">
<div class="card bg-light-extra">
<div class="card-body">
<h4 class="card-title">Guns v5.1(最新版)</h4>
<p class="card-text">Guns和Roses核心模块公用,打造更加强大的企业级核心模块,回归了单模块应用!</p>
<a href="https://gitee.com/stylefeng/guns" target="_blank" class="btn btn-info">点击前往</a>
</div>
</div>
</div>
<div class="col-lg-3 col-md-6 img-responsive">
<div class="card bg-light-extra">
<div class="card-body">
<h4 class="card-title">Guns v4.2</h4>
<p class="card-text">guns-admin集成rest api服务,升级spring boot到2.0,极大地简化前端页面体积!</p>
<a href="https://gitee.com/stylefeng/guns/tree/v4.2/" target="_blank" class="btn btn-info">点击前往</a>
</div>
</div>
</div>
<div class="col-lg-3 col-md-6">
<div class="card bg-light-extra">
<div class="card-body">
<h4 class="card-title">Guns v3.3</h4>
<p class="card-text">整个项目模块化,核心包抽离,集成jwt,增加rest api鉴权机制,并引入flowable 6.2.0!</p>
<a href="https://gitee.com/stylefeng/guns/tree/v3.3/" target="_blank" class="btn btn-info">点击前往</a>
</div>
</div>
</div>
<div class="col-lg-3 col-md-6">
<div class="card bg-light-extra">
<div class="card-body">
<h4 class="card-title">Guns v2.4</h4>
<p class="card-text">基于spring boot全面升级,成为国内首批使用spring boot的开源系统!更专注业务开发!</p>
<a href="https://gitee.com/stylefeng/guns/tree/v2.4/" target="_blank" class="btn btn-info">点击前往</a>
</div>
</div>
</div>
<div class="col-lg-3 col-md-6">
<div class="card bg-light-extra">
<div class="card-body">
<h4 class="card-title">Guns v1.0</h4>
<p class="card-text">Guns开山之作,java bean方式配置,零spring xml配置!打开新一代管理系统大门!</p>
<a href="https://gitee.com/stylefeng/guns/tree/v1.0/" target="_blank" class="btn btn-info">点击前往</a>
</div>
</div>
</div>
<div class="col-lg-3 col-md-6">
<div class="card bg-light-extra">
<div class="card-body">
<h4 class="card-title">Guns SSO</h4>
<p class="card-text">Guns 5.0,单点登录版本,集成自研单点登录框架!</p>
<a href="https://gitee.com/stylefeng/guns/tree/sso/" target="_blank" class="btn btn-info">点击前往</a>
</div>
</div>
</div>
<div class="col-lg-3 col-md-6">
<div class="card bg-light-extra">
<div class="card-body">
<h4 class="card-title">Guns ORACLE</h4>
<p class="card-text">尚未集成调试,敬请期待</p>
</div>
</div>
</div>
<div class="col-lg-3 col-md-6">
<div class="card bg-light-extra">
<div class="card-body">
<h4 class="card-title">Guns MSSQL</h4>
<p class="card-text">尚未集成调试,敬请期待</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/png" sizes="16x16" href="${ctxPath}/assets/common/favicon.ico">
<title>登录 - Guns</title>
<link href="${ctxPath}/assets/common/plugins/bootstrap/css/bootstrap.min.css" rel="stylesheet">
<link href="${ctxPath}/assets/common/static/css/style.css" rel="stylesheet">
<link href="${ctxPath}/assets/common/static/css/colors/blue.css" id="theme" rel="stylesheet">
</head>
<body>
<div class="preloader">
<svg class="circular" viewBox="25 25 50 50">
<circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"/>
</svg>
</div>
<section id="wrapper">
@var bgImg = images.loginBg();
<div class="login-register" style="background-image:url(${bgImg});">
<div class="login-box card">
<div class="card-body">
<form class="form-horizontal form-material" id="loginform" action="${ctxPath}/login" method="post">
<h3 class="box-title m-b-30">Guns管理系统</h3>
@if(isNotEmpty(tips)){
<h5 class="box-title m-b-30" style="color: red;">${tips}</h5>
@}
<div class="form-group ">
<div class="col-xs-12">
<input class="form-control" name="username" type="text" required="" placeholder="账号" autocomplete="off"></div>
</div>
<div class="form-group">
<div class="col-xs-12">
<input class="form-control" name="password" type="password" required="" placeholder="密码" autocomplete="off"></div>
</div>
<div class="form-group">
<div class="col-md-12 p-l-0">
<div class="checkbox checkbox-info p-t-0">
<input id="checkbox-signup" type="checkbox" name="remember">
<label for="checkbox-signup"> 记住我 </label>
</div>
</div>
<div class="form-group text-center m-t-20 m-b-0">
<div class="col-xs-12">
<button class="btn btn-info btn-lg btn-block text-uppercase waves-effect waves-light" type="submit">登录</button>
</div>
</div>
</div>
<div class="form-group m-b-0">
<div class="col-sm-12 text-center">
<p>没有账号? <a href="#" class="text-info m-l-5"><b>点击注册</b></a></p>
</div>
</div>
</form>
</div>
</div>
</div>
</section>
<script src="${ctxPath}/assets/common/plugins/jquery/jquery.min.js"></script>
<script src="${ctxPath}/assets/common/plugins/bootstrap/js/tether.min.js"></script>
<script src="${ctxPath}/assets/common/plugins/bootstrap/js/bootstrap.min.js"></script>
<script src="${ctxPath}/assets/common/static/js/waves.js"></script>
<script src="${ctxPath}/assets/common/static/js/custom.min.js"></script>
</body>
</html>
\ No newline at end of file
@layout("/common/_container.html",{plugins:["table","layer","sweet-alert","treeview"],js:["/assets/modular/system/dept/dept.js"]}){
<div class="row">
<div class="col-lg-2 col-sm-3 p-r-0">
<div class="card card-outline-theme">
<div class="card-header">
<h5 class="m-b-0 text-white">部门树列表</h5>
</div>
<div class="card-body">
<ul id="deptTree" class="p-l-0"></ul>
</div>
</div>
</div>
<div class="col-lg-10 col-sm-9" id="deptPage">
<div class="row">
<div class="col-lg-12">
<div class="card card-outline-theme m-b-10">
<div class="card-body">
<div class="form-horizontal">
<div class="form-body">
<div class="row">
<div class="col-md-3">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text">部门名称</div>
</div>
<input v-model="name" type="text" class="form-control" placeholder="" autocomplete="off">
</div>
</div>
<div class="col-md-3">
<div class="input-group condition-button">
<div class="input-group-btn condition-button">
<button type="button" id="check-minutes"
class="btn btn-info waves-effect waves-light condition-button-width" onclick="Dept.search()">查询
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="card card-outline-theme m-b-0">
<div class="card-body p-t-0 p-b-0">
<div class="form-horizontal">
<div class="form-actions">
<div class="row">
<div class="col-lg-12">
<div class="card m-b-0 p-b-0">
<div class="hidden-xs" id="DeptTableToolbar" role="group">
@if(shiro.hasPermission("/dept/add")){
<button type="button" class="btn btn-primary waves-effect m-l-5" onclick="Dept.openAddDept()">
<i class="fa fa-check-circle"></i>&nbsp;添加
</button>
@}
@if(shiro.hasPermission("/dept/update")){
<button type="button" class="btn btn-primary waves-effect m-l-5" onclick="Dept.openDeptDetail()">
<i class="fa fa-check-circle"></i>&nbsp;修改
</button>
@}
@if(shiro.hasPermission("/dept/delete")){
<button type="button" class="btn btn-primary waves-effect m-l-5" onclick="Dept.delete()">
<i class="fa fa-check-circle"></i>&nbsp;删除
</button>
@}
</div>
<#table id="DeptTable"/>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@}
@layout("/common/_dialog.html",{plugins:["laydate","sweet-alert","layer"],js:["/assets/modular/system/dept/dept_add.js"]}){
<div class="container-fluid">
<form id="deptForm" \@submit="submitForm">
<div class="row">
<div class="col-6">
<div class="form-group">
<h5>部门名称 <span class="text-danger">*</span></h5>
<div class="controls">
<input v-model="simpleName" type="text" class="form-control">
</div>
</div>
<div class="form-group">
<h5>部门全称 <span class="text-danger">*</span></h5>
<div class="controls">
<input v-model="fullName" type="text" class="form-control">
</div>
</div>
<div class="form-group">
<h5>备注 <span class="text-danger">*</span></h5>
<div class="controls">
<input v-model="description" type="text" class="form-control">
</div>
</div>
</div>
<div class="col-6">
<div class="form-group">
<h5>排序</h5>
<div class="controls">
<input v-model="sort" type="text" class="form-control">
</div>
</div>
<div class="form-group">
<h5>上级部门 <span class="text-danger">*</span></h5>
<div class="controls">
<input v-model="pName" id="detpName" \@click="showDeptSelectTree" type="text" class="form-control" autocomplete="off">
<input v-model="pid" type="hidden" class="form-control">
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-6">
<div class="text-xs-right">
<button class="btn btn-info normal-button-width" \@click="ensure">提交</button>
<button class="btn btn-inverse normal-button-width m-l-10" \@click="close">取消</button>
</div>
</div>
</div>
</form>
</div>
@}
@layout("/common/_dialog.html",{plugins:["laydate","sweet-alert","layer"],js:["/assets/modular/system/dept/dept_edit.js"]}){
<div class="container-fluid">
<form id="deptEditForm" \@submit="submitForm">
<div class="row">
<div class="col-6">
<div class="form-group">
<h5>部门名称 <span class="text-danger">*</span></h5>
<div class="controls">
<input v-model="simpleName" type="text" class="form-control">
</div>
</div>
<div class="form-group">
<h5>部门全称 <span class="text-danger">*</span></h5>
<div class="controls">
<input v-model="fullName" type="text" class="form-control">
</div>
</div>
<div class="form-group">
<h5>备注 <span class="text-danger">*</span></h5>
<div class="controls">
<input v-model="description" type="text" class="form-control">
</div>
</div>
</div>
<div class="col-6">
<div class="form-group">
<h5>排序</h5>
<div class="controls">
<input v-model="sort" type="text" class="form-control">
</div>
</div>
<div class="form-group">
<h5>上级部门 <span class="text-danger">*</span></h5>
<div class="controls">
<input v-model="pName" id="detpName" \@click="showDeptSelectTree" type="text" class="form-control" autocomplete="off">
<input v-model="pid" type="hidden" class="form-control">
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-6">
<div class="text-xs-right">
<button class="btn btn-info normal-button-width" \@click="ensure">提交</button>
<button class="btn btn-inverse normal-button-width m-l-10" \@click="close">取消</button>
</div>
</div>
</div>
</form>
</div>
@}
\ No newline at end of file
@layout("/common/_container.html",{plugins:["table","layer","sweet-alert"],js:["/assets/modular/system/dict/dict.js"]}){
<div class="row" id="dictPage">
<div class="col-lg-12">
<div class="card card-outline-theme m-b-10">
<div class="card-body">
<div class="form-horizontal">
<div class="form-body">
<div class="row">
<div class="col-md-3">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text">字典名称</div>
</div>
<input v-model="condition" type="text" class="form-control" placeholder="字典名称" autocomplete="off">
</div>
</div>
<div class="col-md-3">
<div class="input-group condition-button">
<div class="input-group-btn condition-button">
<button type="button" id="check-minutes"
class="btn btn-info waves-effect waves-light condition-button-width" onclick="Dict.search()">查询
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="card card-outline-theme m-b-0">
<div class="card-body p-t-0 p-b-0">
<div class="form-horizontal">
<div class="form-actions">
<div class="row">
<div class="col-lg-12">
<div class="card m-b-0 p-b-0">
<div class="hidden-xs" id="dictTableToolbar" role="group">
@if(shiro.hasPermission("/dict/add")){
<button type="button" class="btn btn-primary waves-effect" onclick="Dict.openAddType()">
<i class="fa fa-plus"></i>&nbsp;添加类型
</button>
@}
@if(shiro.hasPermission("/dict/add")){
<button type="button" class="btn btn-primary waves-effect m-l-5" onclick="Dict.openAddItem()">
<i class="fa fa-plus"></i>&nbsp;添加子条目
</button>
@}
@if(shiro.hasPermission("/dict/delete")){
<button type="button" class="btn btn-primary waves-effect m-l-5" onclick="Dict.delete()">
<i class="fa fa-remove"></i>&nbsp;删除
</button>
@}
</div>
<#table id="dictTable"/>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@}
@layout("/common/_dialog.html",{plugins:["sweet-alert","layer"],js:["/assets/modular/system/dict/dict_add_item.js"]}){
<div class="container-fluid">
<form id="dictForm" \@submit="submitForm">
<input id="dictTypeId" value="${dictTypeId}" type="hidden" class="form-control">
<div class="row">
<div class="col-6">
<div class="form-group">
<h5>父级字典</h5>
<div class="controls">
<input value="${dictTypeName}" disabled="disabled" type="text" class="form-control">
</div>
</div>
<div class="form-group">
<h5>字典编码 <span class="text-danger">*</span></h5>
<div class="controls">
<input v-model="code" type="text" class="form-control">
</div>
</div>
<div class="form-group">
<h5>字典编码对应的名称 <span class="text-danger">*</span></h5>
<div class="controls">
<input v-model="name" type="text" class="form-control">
</div>
</div>
</div>
<div class="col-6">
<div class="form-group">
<h5>描述</h5>
<div class="controls">
<input v-model="description" type="text" class="form-control">
</div>
</div>
<div class="form-group">
<h5>排序</h5>
<div class="controls">
<input v-model="sort" type="text" class="form-control">
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-6">
<div class="text-xs-right">
<button class="btn btn-info normal-button-width" \@click="ensure">提交</button>
<button class="btn btn-inverse normal-button-width m-l-10" \@click="close">取消</button>
</div>
</div>
</div>
</form>
</div>
@}
@layout("/common/_dialog.html",{plugins:["sweet-alert","layer"],js:["/assets/modular/system/dict/dict_add_type.js"]}){
<div class="container-fluid">
<form id="dictForm" \@submit="submitForm">
<div class="row">
<div class="col-6">
<div class="form-group">
<h5>父级字典</h5>
<div class="controls">
<input value="顶级" disabled="disabled" type="text" class="form-control">
</div>
</div>
<div class="form-group">
<h5>字典编码 <span class="text-danger">*</span></h5>
<div class="controls">
<input v-model="code" type="text" class="form-control">
</div>
</div>
<div class="form-group">
<h5>字典名称 <span class="text-danger">*</span></h5>
<div class="controls">
<input v-model="name" type="text" class="form-control">
</div>
</div>
</div>
<div class="col-6">
<div class="form-group">
<h5>描述</h5>
<div class="controls">
<input v-model="description" type="text" class="form-control">
</div>
</div>
<div class="form-group">
<h5>排序</h5>
<div class="controls">
<input v-model="sort" type="text" class="form-control">
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-6">
<div class="text-xs-right">
<button class="btn btn-info normal-button-width" \@click="ensure">提交</button>
<button class="btn btn-inverse normal-button-width m-l-10" \@click="close">取消</button>
</div>
</div>
</div>
</form>
</div>
@}
@layout("/common/_container.html",{plugins:["table","layer","sweet-alert","laydate"],js:["/assets/modular/system/log/log.js"]}){
<div class="row" id="logPage">
<div class="col-lg-12">
<div class="card card-outline-theme m-b-10">
<div class="card-body">
<div class="form-horizontal">
<div class="form-body">
<div class="row">
<div class="col-md-3">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text">开始时间</div>
</div>
<input type="text" id="beginTime" class="form-control" placeholder="开始时间" autocomplete="off">
</div>
</div>
<div class="col-md-3">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text">结束时间</div>
</div>
<input type="text" id="endTime" class="form-control" placeholder="结束时间" autocomplete="off">
</div>
</div>
<div class="col-md-3">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text">日志名称</div>
</div>
<input v-model="logName" type="text" class="form-control" placeholder="日志名称" autocomplete="off">
</div>
</div>
<div class="col-md-3">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text">日志类型</div>
</div>
<select id="logType" class="form-control">
<option value="0">全部</option>
<option value="1">业务日志</option>
<option value="2">异常日志</option>
</select>
</div>
</div>
<div class="col-md-3 m-t-10">
<div class="input-group condition-button">
<div class="input-group-btn condition-button">
<button type="button" id="check-minutes"
class="btn btn-info waves-effect waves-light condition-button-width"
onclick="OptLog.search()">查询
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="card card-outline-theme m-b-0">
<div class="card-body p-t-0 p-b-0">
<div class="form-horizontal">
<div class="form-actions">
<div class="row">
<div class="col-lg-12">
<div class="card m-b-0 p-b-0">
<div class="hidden-xs" id="OptLogTableToolbar" role="group">
<button type="button" class="btn btn-primary waves-effect" onclick="OptLog.detail()">
<i class="fa fa-plus"></i>&nbsp;查看详情
</button>
@if(shiro.hasPermission("/log/delLog")){
<button type="button" class="btn btn-primary waves-effect" onclick="OptLog.delLog()">
<i class="fa fa-plus"></i>&nbsp;清空日志
</button>
@}
</div>
<#table id="OptLogTable"/>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@}
@layout("/common/_container.html",{plugins:["table","layer","sweet-alert","laydate"],js:["/assets/modular/system/log/login_log.js"]}){
<div class="row" id="loginLogPage">
<div class="col-lg-12">
<div class="card card-outline-theme m-b-10">
<div class="card-body">
<div class="form-horizontal">
<div class="form-body">
<div class="row">
<div class="col-md-3">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text">开始时间</div>
</div>
<input type="text" id="beginTime" class="form-control" placeholder="开始时间"
autocomplete="off">
</div>
</div>
<div class="col-md-3">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text">结束时间</div>
</div>
<input type="text" id="endTime" class="form-control" placeholder="结束时间"
autocomplete="off">
</div>
</div>
<div class="col-md-3">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text">日志名称</div>
</div>
<input v-model="logName" type="text" class="form-control" placeholder="日志名称"
autocomplete="off">
</div>
</div>
<div class="col-md-3">
<div class="input-group condition-button">
<div class="input-group-btn condition-button">
<button type="button" id="check-minutes"
class="btn btn-info waves-effect waves-light condition-button-width"
onclick="LoginLog.search()">查询
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="card card-outline-theme m-b-0">
<div class="card-body p-t-0 p-b-0">
<div class="form-horizontal">
<div class="form-actions">
<div class="row">
<div class="col-lg-12">
<div class="card m-b-0 p-b-0">
<div class="hidden-xs" id="loginLogTableToolbar" role="group">
<button type="button" class="btn btn-primary waves-effect" onclick="LoginLog.delLog()">
<i class="fa fa-plus"></i>&nbsp;清空日志
</button>
</div>
<#table id="loginLogTable"/>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@}
@layout("/common/_container.html",{plugins:["table","layer","sweet-alert","ztree"],js:["/assets/modular/system/menu/menu.js"]}){
<div class="row" id="menuPage">
<div class="col-lg-2 col-sm-3 p-r-0">
<div class="card card-outline-theme">
<div class="card-header">
<h5 class="m-b-0 text-white">菜单树</h5>
</div>
<div class="card-body">
<ul id="menuTree" class="ztree"></ul>
</div>
</div>
</div>
<div class="col-lg-10 col-sm-9">
<div class="row">
<div class="col-lg-12">
<div class="card card-outline-theme m-b-10">
<div class="card-body">
<div class="form-horizontal">
<div class="form-body">
<div class="row">
<div class="col-md-3">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text">菜单名称</div>
</div>
<input v-model="menuName" type="text" class="form-control" placeholder="菜单名称" autocomplete="off">
</div>
</div>
<div class="col-md-3">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text">层级</div>
</div>
<input v-model="level" type="text" class="form-control" placeholder="层级" autocomplete="off">
</div>
</div>
<div class="col-md-3">
<div class="input-group condition-button">
<div class="input-group-btn condition-button">
<button type="button" id="check-minutes"
class="btn btn-info waves-effect waves-light condition-button-width" onclick="Menu.search()">查询
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="card card-outline-theme m-b-0">
<div class="card-body p-t-0 p-b-0">
<div class="form-horizontal">
<div class="form-actions">
<div class="row">
<div class="col-lg-12">
<div class="card m-b-0 p-b-0">
<div class="hidden-xs" id="menuTableToolbar" role="group">
@if(shiro.hasPermission("/menu/add")){
<button type="button" class="btn btn-primary waves-effect" onclick="Menu.openAddMenu()">
<i class="fa fa-plus"></i>&nbsp;添加
</button>
@}
@if(shiro.hasPermission("/menu/edit")){
<button type="button" class="btn btn-primary waves-effect m-l-5" onclick="Menu.openChangeMenu()">
<i class="fa fa-edit"></i>&nbsp;修改
</button>
@}
@if(shiro.hasPermission("/menu/remove")){
<button type="button" class="btn btn-primary waves-effect m-l-5" onclick="Menu.delMenu()">
<i class="fa fa-remove"></i>&nbsp;删除
</button>
@}
</div>
<#table id="menuTable"/>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@}
\ No newline at end of file
@layout("/common/_dialog.html",{plugins:["laydate","sweet-alert","layer"],js:["/assets/modular/system/menu/menu_add.js"]}){
<div class="container-fluid">
<form id="menuForm" \@submit="submitForm">
<div class="row">
<div class="col-6">
<div class="form-group">
<h5>名称 <span class="text-danger">*</span></h5>
<div class="controls">
<input v-model="name" type="text" class="form-control">
</div>
</div>
<div class="form-group">
<h5>菜单编号 <span class="text-danger">*</span></h5>
<div class="controls">
<input v-model="code" type="text" class="form-control">
</div>
</div>
<div class="form-group">
<h5>父级编号 <span class="text-danger">*</span></h5>
<div class="controls">
<input v-model="pcodeName" id="detpName" \@click="showMenuSelectTree" type="text" class="form-control" autocomplete="off">
<input v-model="pid" type="hidden" class="form-control">
</div>
</div>
<div class="form-group">
<h5>是否是菜单 <span class="text-danger">*</span></h5>
<div class="controls">
<select v-model="menuFlag" class="form-control">
<option value="">请选择</option>
<option value="Y"></option>
<option value="N">不是</option>
</select>
</div>
</div>
</div>
<div class="col-6">
<div class="form-group">
<h5>请求地址 <span class="text-danger">*</span></h5>
<div class="controls">
<input v-model="url" type="text" class="form-control">
</div>
</div>
<div class="form-group">
<h5>排序</h5>
<div class="controls">
<input v-model="sort" type="text" class="form-control">
</div>
</div>
<div class="form-group">
<h5>图标</h5>
<div class="controls">
<input v-model="icon" type="text" class="form-control">
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-6">
<div class="text-xs-right">
<button class="btn btn-info normal-button-width" \@click="ensure">提交</button>
<button class="btn btn-inverse normal-button-width m-l-10" \@click="close">取消</button>
</div>
</div>
</div>
</form>
</div>
@}
@layout("/common/_dialog.html",{plugins:["laydate","sweet-alert","layer"],js:["/assets/modular/system/menu/menu_edit.js"]}){
<div class="container-fluid">
<form id="menuForm" \@submit="submitForm">
<div class="row">
<div class="col-6">
<div class="form-group">
<h5>名称 <span class="text-danger">*</span></h5>
<div class="controls">
<input v-model="name" type="text" class="form-control">
</div>
</div>
<div class="form-group">
<h5>菜单编号 <span class="text-danger">*</span></h5>
<div class="controls">
<input v-model="code" type="text" class="form-control">
</div>
</div>
<div class="form-group">
<h5>父级编号 <span class="text-danger">*</span></h5>
<div class="controls">
<input v-model="pcodeName" id="detpName" \@click="showMenuSelectTree" type="text" class="form-control" autocomplete="off">
<input v-model="pid" type="hidden" class="form-control">
</div>
</div>
<div class="form-group">
<h5>是否是菜单 <span class="text-danger">*</span></h5>
<div class="controls">
<select v-model="menuFlag" class="form-control">
<option value="">请选择</option>
<option value="Y"></option>
<option value="N">不是</option>
</select>
</div>
</div>
</div>
<div class="col-6">
<div class="form-group">
<h5>请求地址 <span class="text-danger">*</span></h5>
<div class="controls">
<input v-model="url" type="text" class="form-control">
</div>
</div>
<div class="form-group">
<h5>排序</h5>
<div class="controls">
<input v-model="sort" type="text" class="form-control">
</div>
</div>
<div class="form-group">
<h5>图标</h5>
<div class="controls">
<input v-model="icon" type="text" class="form-control">
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-6">
<div class="text-xs-right">
<button class="btn btn-info normal-button-width" \@click="ensure">提交</button>
<button class="btn btn-inverse normal-button-width m-l-10" \@click="close">取消</button>
</div>
</div>
</div>
</form>
</div>
@}
@layout("/common/_container.html",{plugins:["table","layer","sweet-alert"],js:["/assets/modular/system/notice/notice.js"]}){
<div class="row" id="noticePage">
<div class="col-lg-12">
<div class="card card-outline-theme m-b-10">
<div class="card-body">
<div class="form-horizontal">
<div class="form-body">
<div class="row">
<div class="col-md-3">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text">通知名称</div>
</div>
<input v-model="condition" type="text" class="form-control" placeholder="通知名称" autocomplete="off">
</div>
</div>
<div class="col-md-3">
<div class="input-group condition-button">
<div class="input-group-btn condition-button">
<button type="button" id="check-minutes"
class="btn btn-info waves-effect waves-light condition-button-width" onclick="Notice.search()">查询
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="card card-outline-theme m-b-0">
<div class="card-body p-t-0 p-b-0">
<div class="form-horizontal">
<div class="form-actions">
<div class="row">
<div class="col-lg-12">
<div class="card m-b-0 p-b-0">
<div class="hidden-xs" id="NoticeTableToolbar" role="group">
@if(shiro.hasPermission("/notice/add")){
<button type="button" class="btn btn-primary waves-effect" onclick="Notice.openAddNotice()">
<i class="fa fa-plus"></i>&nbsp;添加
</button>
@}
@if(shiro.hasPermission("/notice/update")){
<button type="button" class="btn btn-primary waves-effect m-l-5" onclick="Notice.openNoticeDetail()">
<i class="fa fa-edit"></i>&nbsp;修改
</button>
@}
@if(shiro.hasPermission("/notice/delete")){
<button type="button" class="btn btn-primary waves-effect m-l-5" onclick="Notice.delete()">
<i class="fa fa-remove"></i>&nbsp;删除
</button>
@}
</div>
<#table id="NoticeTable"/>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@}
@layout("/common/_dialog.html",{plugins:["sweet-alert","layer","wangEditor"],js:["/assets/modular/system/notice/notice_add.js"]}){
<div class="container-fluid">
<form id="noticeForm">
<div class="row">
<div class="col-12">
<div class="form-group">
<h5>标题 <span class="text-danger">*</span></h5>
<div class="controls">
<input id="title" type="text" class="form-control">
</div>
</div>
<div class="form-group">
<h5>内容 <span class="text-danger">*</span></h5>
<div id="editor"></div>
</div>
</div>
</div>
<div class="row">
<div class="col-6">
<div class="text-xs-right">
<button class="btn btn-info normal-button-width" onclick="NoticeAddDlg.ensure()">提交</button>
<button class="btn btn-inverse normal-button-width m-l-10" onclick="NoticeAddDlg.close()">取消</button>
</div>
</div>
</div>
</form>
</div>
@}
\ No newline at end of file
@layout("/common/_dialog.html",{plugins:["sweet-alert","layer","wangEditor"],js:["/assets/modular/system/notice/notice_edit.js"]}){
<div class="container-fluid">
<form id="noticeForm">
<input id="noticeId" value="${noticeId}" type="hidden" class="form-control">
<input id="contentVal" value='${content}' type="hidden" class="form-control">
<div class="row">
<div class="col-12">
<div class="form-group">
<h5>标题 <span class="text-danger">*</span></h5>
<div class="controls">
<input id="title" value="${title}" type="text" class="form-control">
</div>
</div>
<div class="form-group">
<h5>内容 <span class="text-danger">*</span></h5>
<div class="controls">
<div id="editor"></div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-6">
<div class="text-xs-right">
<button class="btn btn-info normal-button-width" onclick="NoticeEditDlg.ensure()">提交</button>
<button class="btn btn-inverse normal-button-width m-l-10" onclick="NoticeEditDlg.close()">取消</button>
</div>
</div>
</div>
</form>
</div>
@}
\ No newline at end of file
@layout("/common/_container.html",{title:"概览"}){
<div class="row">
<div class="col-12">
@for(notice in noticeList){
<div class="alert alert-info" role="alert">
${notice.content}
</div>
@}
</div>
</div>
@}
@layout("/common/_container.html",{plugins:["table","layer","sweet-alert"],js:["/assets/modular/system/role/role.js"]}){
<div class="row" id="rolePage">
<div class="col-lg-12">
<div class="card card-outline-theme m-b-10">
<div class="card-body">
<div class="form-horizontal">
<div class="form-body">
<div class="row">
<div class="col-md-3">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text">角色名称</div>
</div>
<input v-model="roleName" type="text" class="form-control" placeholder="角色名称" autocomplete="off">
</div>
</div>
<div class="col-md-3">
<div class="input-group condition-button">
<div class="input-group-btn condition-button">
<button type="button" id="check-minutes"
class="btn btn-info waves-effect waves-light condition-button-width" onclick="Role.search()">查询
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="card card-outline-theme m-b-0">
<div class="card-body p-t-0 p-b-0">
<div class="form-horizontal">
<div class="form-actions">
<div class="row">
<div class="col-lg-12">
<div class="card m-b-0 p-b-0">
<div class="hidden-xs" id="roleTableToolbar" role="group">
@if(shiro.hasPermission("/mgr/add")){
<button type="button" class="btn btn-primary waves-effect" onclick="Role.openAddRole()">
<i class="fa fa-plus"></i>&nbsp;添加
</button>
@}
@if(shiro.hasPermission("/mgr/edit")){
<button type="button" class="btn btn-primary waves-effect m-l-5" onclick="Role.openChangeRole()">
<i class="fa fa-edit"></i>&nbsp;修改
</button>
@}
@if(shiro.hasPermission("/mgr/delete")){
<button type="button" class="btn btn-primary waves-effect m-l-5" onclick="Role.delRole()">
<i class="fa fa-remove"></i>&nbsp;删除
</button>
@}
@if(shiro.hasPermission("/role/setAuthority")){
<button type="button" class="btn btn-primary waves-effect m-l-5" onclick="Role.assign()">
<i class="fa fa-user-secret"></i>&nbsp;权限配置
</button>
@}
</div>
<#table id="roleTable"/>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@}
@layout("/common/_dialog.html",{plugins:["sweet-alert","layer"],js:["/assets/modular/system/role/role_add.js"]}){
<div class="container-fluid">
<form id="roleForm" \@submit="submitForm">
<div class="row">
<div class="col-6">
<div class="form-group">
<h5>角色名称 <span class="text-danger">*</span></h5>
<div class="controls">
<input v-model="name" type="text" class="form-control">
</div>
</div>
<div class="form-group">
<h5>上级名称 <span class="text-danger">*</span></h5>
<div class="controls">
<input v-model="pName" id="pName" \@click="showParentSelectTree" type="text" class="form-control" autocomplete="off">
<input v-model="pid" type="hidden" class="form-control">
</div>
</div>
<div class="form-group">
<h5>别名 <span class="text-danger">*</span></h5>
<div class="controls">
<input v-model="description" type="text" class="form-control">
</div>
</div>
</div>
<div class="col-6">
<div class="form-group">
<h5>排序</h5>
<div class="controls">
<input v-model="sort" type="text" class="form-control">
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-6">
<div class="text-xs-right">
<button class="btn btn-info normal-button-width" \@click="ensure">提交</button>
<button class="btn btn-inverse normal-button-width m-l-10" \@click="close">取消</button>
</div>
</div>
</div>
</form>
</div>
@}
@layout("/common/_dialog.html",{plugins:["sweet-alert","layer"],js:["/assets/modular/system/role/role_edit.js"]}){
<div class="container-fluid">
<form id="roleForm" \@submit="submitForm">
<div class="row">
<div class="col-6">
<div class="form-group">
<h5>角色名称 <span class="text-danger">*</span></h5>
<div class="controls">
<input v-model="name" type="text" class="form-control">
</div>
</div>
<div class="form-group">
<h5>上级名称 <span class="text-danger">*</span></h5>
<div class="controls">
<input v-model="pName" id="pName" \@click="showParentSelectTree" type="text" class="form-control" autocomplete="off">
<input v-model="pid" type="hidden" class="form-control">
</div>
</div>
<div class="form-group">
<h5>别名 <span class="text-danger">*</span></h5>
<div class="controls">
<input v-model="description" type="text" class="form-control">
</div>
</div>
</div>
<div class="col-6">
<div class="form-group">
<h5>排序</h5>
<div class="controls">
<input v-model="sort" type="text" class="form-control">
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-6">
<div class="text-xs-right">
<button class="btn btn-info normal-button-width" \@click="ensure">提交</button>
<button class="btn btn-inverse normal-button-width m-l-10" \@click="close">取消</button>
</div>
</div>
</div>
</form>
</div>
@}
@layout("/common/_container.html",{plugins:["table","ztree","layer","sweet-alert","laydate"],js:["/assets/modular/system/user/user.js"]}){
<div class="row">
<div class="col-lg-2 col-sm-3 p-r-0">
<div class="card card-outline-theme">
<div class="card-header">
<h5 class="m-b-0 text-white">部门选择</h5>
</div>
<div class="card-body">
<ul id="deptTree" class="ztree"></ul>
</div>
</div>
</div>
<div class="col-lg-10 col-sm-9" id="userManagerPage">
<div class="row">
<div class="col-lg-12">
<div class="card card-outline-theme m-b-10">
<div class="card-body">
<div class="form-horizontal">
<div class="form-body">
<div class="row">
<div class="col-md-3">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text">用户名称</div>
</div>
<input v-model="name" type="text" class="form-control" placeholder="账号/姓名/手机号" autocomplete="off">
</div>
</div>
<div class="col-md-3">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text">注册日期</div>
</div>
<input type="text" id="timeLimit" class="form-control" placeholder="注册日期" autocomplete="off">
</div>
</div>
<div class="col-md-3">
<div class="input-group condition-button">
<div class="input-group-btn condition-button">
<button type="button" id="check-minutes"
class="btn btn-info waves-effect waves-light condition-button-width" onclick="MgrUser.search()">查询</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="card card-outline-theme m-b-0">
<div class="card-body p-t-0 p-b-0">
<div class="form-horizontal">
<div class="form-actions">
<div class="row">
<div class="col-lg-12">
<div class="card m-b-0 p-b-0">
<div class="hidden-xs" id="managerTableToolbar" role="group">
@if(shiro.hasPermission("/mgr/add")){
<button type="button" class="btn btn-primary waves-effect" onclick="MgrUser.openAddMgr()">
<i class="fa fa-plus"></i>&nbsp;添加
</button>
@}
@if(shiro.hasPermission("/mgr/edit")){
<button type="button" class="btn btn-primary waves-effect m-l-5" onclick="MgrUser.openChangeUser()">
<i class="fa fa-edit"></i>&nbsp;修改
</button>
@}
@if(shiro.hasPermission("/mgr/delete")){
<button type="button" class="btn btn-primary waves-effect m-l-5" onclick="MgrUser.delMgrUser()">
<i class="fa fa-remove"></i>&nbsp;删除
</button>
@}
@if(shiro.hasPermission("/mgr/reset")){
<button type="button" class="btn btn-primary waves-effect m-l-5" onclick="MgrUser.resetPwd()">
<i class="fa fa-refresh"></i>&nbsp;重置密码
</button>
@}
@if(shiro.hasPermission("/mgr/freeze")){
<button type="button" class="btn btn-primary waves-effect m-l-5" onclick="MgrUser.freezeAccount()">
<i class="fa fa-warning"></i>&nbsp;冻结
</button>
@}
@if(shiro.hasPermission("/mgr/unfreeze")){
<button type="button" class="btn btn-primary waves-effect m-l-5" onclick="MgrUser.unfreeze()">
<i class="fa fa-check-circle"></i>&nbsp;解除冻结
</button>
@}
@if(shiro.hasPermission("/mgr/setRole")){
<button type="button" class="btn btn-primary waves-effect m-l-5" onclick="MgrUser.roleAssign()">
<i class="fa fa-user-secret"></i>&nbsp;角色分配
</button>
@}
</div>
<#table id="managerTable"/>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@}
@layout("/common/_dialog.html",{plugins:["laydate","sweet-alert","layer"],js:["/assets/modular/system/user/user_add.js"]}){
<div class="container-fluid">
<form id="userForm" \@submit="submitForm">
<div class="row">
<div class="col-6">
<div class="form-group">
<h5>账号 <span class="text-danger">*</span></h5>
<div class="controls">
<input v-model="account" type="text" class="form-control">
</div>
</div>
<div class="form-group">
<h5>密码 <span class="text-danger">*</span></h5>
<div class="controls">
<input v-model="password" type="password" class="form-control">
</div>
</div>
<div class="form-group">
<h5>重复密码 <span class="text-danger">*</span></h5>
<div class="controls">
<input v-model="rePassword" type="password" class="form-control">
</div>
</div>
<div class="form-group">
<h5>姓名 <span class="text-danger">*</span></h5>
<div class="controls">
<input v-model="name" type="text" class="form-control">
</div>
</div>
<div class="form-group">
<h5>邮箱</h5>
<div class="controls">
<input v-model="email" type="email" class="form-control">
</div>
</div>
</div>
<div class="col-6">
<div class="form-group">
<h5>出生日期</h5>
<div class="controls">
<input v-model="birthday" id="birthday" type="hidden" class="form-control" autocomplete="off">
<input id="dateSelect" type="text" class="form-control" autocomplete="off">
</div>
</div>
<div class="form-group">
<h5>性别</h5>
<div class="controls">
<select v-model="sex" class="form-control">
<option value="">请选择</option>
<option value="M"></option>
<option value="F"></option>
</select>
</div>
</div>
<div class="form-group">
<h5>部门 <span class="text-danger">*</span></h5>
<div class="controls">
<input v-model="deptName" id="detpName" \@click="showDeptSelectTree" type="text" class="form-control" autocomplete="off">
<input v-model="deptId" type="hidden" class="form-control">
</div>
</div>
<div class="form-group">
<h5>电话</h5>
<div class="controls">
<input v-model="phone" type="text" class="form-control">
</div>
</div>
<div class="form-group">
<h5>角色</h5>
<div class="controls">
<input disabled type="text" class="form-control" value="请在分配角色功能里配置">
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-6">
<div class="text-xs-right">
<button class="btn btn-info normal-button-width" \@click="ensure">提交</button>
<button class="btn btn-inverse normal-button-width m-l-10" \@click="close">取消</button>
</div>
</div>
</div>
</form>
</div>
@}
@layout("/common/_dialog.html",{plugins:["laydate","sweet-alert","layer"],js:["/assets/modular/system/user/user_edit.js"]}){
<div class="container-fluid">
<form id="userForm" \@submit="submitForm">
<div class="row">
<div class="col-6">
<div class="form-group">
<h5>账号 <span class="text-danger">*</span></h5>
<div class="controls">
<input v-model="account" type="text" class="form-control">
</div>
</div>
<div class="form-group">
<h5>姓名 <span class="text-danger">*</span></h5>
<div class="controls">
<input v-model="name" type="text" class="form-control">
</div>
</div>
<div class="form-group">
<h5>邮箱</h5>
<div class="controls">
<input v-model="email" type="email" class="form-control">
</div>
</div>
<div class="form-group">
<h5>性别</h5>
<div class="controls">
<select v-model="sex" class="form-control">
<option value="">请选择</option>
<option value="M"></option>
<option value="F"></option>
</select>
</div>
</div>
</div>
<div class="col-6">
<div class="form-group">
<h5>出生日期</h5>
<div class="controls">
<input v-model="birthday" id="birthday" type="hidden" class="form-control" autocomplete="off">
<input id="dateSelect" type="text" class="form-control" autocomplete="off">
</div>
</div>
<div class="form-group">
<h5>部门 <span class="text-danger">*</span></h5>
<div class="controls">
<input v-model="deptName" id="detpName" \@click="showDeptSelectTree" type="text" class="form-control" autocomplete="off">
<input v-model="deptId" type="hidden" class="form-control">
</div>
</div>
<div class="form-group">
<h5>电话</h5>
<div class="controls">
<input v-model="phone" type="text" class="form-control">
</div>
</div>
<div class="form-group">
<h5>角色</h5>
<div class="controls">
<input v-model="roleName" disabled type="text" class="form-control" value="请在分配角色功能里配置">
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-6">
<div class="text-xs-right">
<button class="btn btn-info normal-button-width" \@click="ensure">提交</button>
<button class="btn btn-inverse normal-button-width m-l-10" \@click="close">取消</button>
</div>
</div>
</div>
</form>
</div>
@}
/** 错误页面样式 */
.error-page {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
text-align: center;
}
.error-page-img {
min-width: 300px;
max-width: 100%;
max-height: 300px;
}
.error-page-info {
display: inline-block;
text-align: center;
vertical-align: middle;
padding-left: 30px;
}
.error-page-info h1 {
color: #434e59;
font-size: 72px;
font-weight: 600;
margin-bottom: 10px;
}
.error-page-info-desc {
color: #777;
font-size: 20px;
line-height: 28px;
margin-bottom: 16px;
}
\ No newline at end of file
/** 登录页面样式 */
body {
background-image: url("../images/bg_login.png");
background-repeat: no-repeat;
background-size: cover;
}
.login-wrapper, body, html {
height: 100%
}
.login-wrapper {
overflow: auto;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
.login-body {
padding: 10px 10px 40px 10px;
}
.login-body > .layui-card {
max-width: 360px;
margin: 0 auto;
}
.login-body .layui-card-header {
font-weight: 700;
font-size: 15px;
}
.login-body .layui-form-pane .layui-form-label {
width: 48px;
}
.login-body .layui-form-pane .layui-input-block {
margin-left: 48px;
}
.login-body .login-captcha {
width: 100%;
cursor: pointer;
}
.login-body .login-other > * {
display: inline-block;
vertical-align: middle;
margin-right: 10px;
font-size: 14px;
}
.login-body .login-other .layui-icon {
position: relative;
top: 2px;
font-size: 26px;
}
.login-body .login-other a:hover {
opacity: .8;
}
.layui-icon-login-qq {
color: #3492ED
}
.layui-icon-login-wechat {
color: #4DAF29
}
.layui-icon-login-weibo {
color: #CF1900
}
/** 底部样式 */
.login-footer {
text-align: center;
line-height: 30px;
color: rgba(255, 255, 255, 0.7) !important;
padding-bottom: 20px;
}
.login-footer span {
padding: 0 5px
}
.login-footer a {
padding: 0 5px;
color: rgba(255, 255, 255, 0.7) !important;
}
.login-footer a:hover {
color: rgba(255, 255, 255, 0.4) !important;
}
/** 头部样式 */
.login-header {
font-family: Myriad Pro, Helvetica Neue, Arial, Helvetica, sans-serif;
font-size: 20px;
font-weight: 600;
color: rgba(255, 255, 255, 0.85) !important;
padding: 10px;
}
.login-header img {
height: 35px;
}
/** 移动设备样式 */
@media screen and (min-height: 590px) {
.login-footer {
position: absolute;
bottom: 0;
width: 100%;
}
}
@media screen and (min-height: 670px) {
.login-body {
padding: 110px 10px 40px 10px;
}
}
/** 辅助样式 */
.layui-link {
color: #029789 !important;
}
.layui-link:hover {
opacity: .8;
}
.pull-right {
float: right;
}
.inline-block {
display: inline-block;
}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="1361px" height="609px" viewBox="0 0 1361 609" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch -->
<title>Group 21</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="Ant-Design-Pro-3.0" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="账户密码登录-校验" transform="translate(-79.000000, -82.000000)">
<g id="Group-21" transform="translate(77.000000, 73.000000)">
<g id="Group-18" opacity="0.8" transform="translate(74.901416, 569.699158) rotate(-7.000000) translate(-74.901416, -569.699158) translate(4.901416, 525.199158)">
<ellipse id="Oval-11" fill="#CFDAE6" opacity="0.25" cx="63.5748792" cy="32.468367" rx="21.7830479" ry="21.766008"></ellipse>
<ellipse id="Oval-3" fill="#CFDAE6" opacity="0.599999964" cx="5.98746479" cy="13.8668601" rx="5.2173913" ry="5.21330997"></ellipse>
<path d="M38.1354514,88.3520215 C43.8984227,88.3520215 48.570234,83.6838647 48.570234,77.9254015 C48.570234,72.1669383 43.8984227,67.4987816 38.1354514,67.4987816 C32.3724801,67.4987816 27.7006688,72.1669383 27.7006688,77.9254015 C27.7006688,83.6838647 32.3724801,88.3520215 38.1354514,88.3520215 Z" id="Oval-3-Copy" fill="#CFDAE6" opacity="0.45"></path>
<path d="M64.2775582,33.1704963 L119.185836,16.5654915" id="Path-12" stroke="#CFDAE6" stroke-width="1.73913043" stroke-linecap="round" stroke-linejoin="round"></path>
<path d="M42.1431708,26.5002681 L7.71190162,14.5640702" id="Path-16" stroke="#E0B4B7" stroke-width="0.702678964" opacity="0.7" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1.405357899873153,2.108036953469981"></path>
<path d="M63.9262187,33.521561 L43.6721326,69.3250951" id="Path-15" stroke="#BACAD9" stroke-width="0.702678964" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1.405357899873153,2.108036953469981"></path>
<g id="Group-17" transform="translate(126.850922, 13.543654) rotate(30.000000) translate(-126.850922, -13.543654) translate(117.285705, 4.381889)" fill="#CFDAE6">
<ellipse id="Oval-4" opacity="0.45" cx="9.13482653" cy="9.12768076" rx="9.13482653" ry="9.12768076"></ellipse>
<path d="M18.2696531,18.2553615 C18.2696531,13.2142826 14.1798519,9.12768076 9.13482653,9.12768076 C4.08980114,9.12768076 0,13.2142826 0,18.2553615 L18.2696531,18.2553615 Z" id="Oval-4" transform="translate(9.134827, 13.691521) scale(-1, -1) translate(-9.134827, -13.691521) "></path>
</g>
</g>
<g id="Group-14" transform="translate(216.294700, 123.725600) rotate(-5.000000) translate(-216.294700, -123.725600) translate(106.294700, 35.225600)">
<ellipse id="Oval-2" fill="#CFDAE6" opacity="0.25" cx="29.1176471" cy="29.1402439" rx="29.1176471" ry="29.1402439"></ellipse>
<ellipse id="Oval-2" fill="#CFDAE6" opacity="0.3" cx="29.1176471" cy="29.1402439" rx="21.5686275" ry="21.5853659"></ellipse>
<ellipse id="Oval-2-Copy" stroke="#CFDAE6" opacity="0.4" cx="179.019608" cy="138.146341" rx="23.7254902" ry="23.7439024"></ellipse>
<ellipse id="Oval-2" fill="#BACAD9" opacity="0.5" cx="29.1176471" cy="29.1402439" rx="10.7843137" ry="10.7926829"></ellipse>
<path d="M29.1176471,39.9329268 L29.1176471,18.347561 C23.1616351,18.347561 18.3333333,23.1796097 18.3333333,29.1402439 C18.3333333,35.1008781 23.1616351,39.9329268 29.1176471,39.9329268 Z" id="Oval-2" fill="#BACAD9"></path>
<g id="Group-9" opacity="0.45" transform="translate(172.000000, 131.000000)" fill="#E6A1A6">
<ellipse id="Oval-2-Copy-2" cx="7.01960784" cy="7.14634146" rx="6.47058824" ry="6.47560976"></ellipse>
<path d="M0.549019608,13.6219512 C4.12262681,13.6219512 7.01960784,10.722722 7.01960784,7.14634146 C7.01960784,3.56996095 4.12262681,0.670731707 0.549019608,0.670731707 L0.549019608,13.6219512 Z" id="Oval-2-Copy-2" transform="translate(3.784314, 7.146341) scale(-1, 1) translate(-3.784314, -7.146341) "></path>
</g>
<ellipse id="Oval-10" fill="#CFDAE6" cx="218.382353" cy="138.685976" rx="1.61764706" ry="1.61890244"></ellipse>
<ellipse id="Oval-10-Copy-2" fill="#E0B4B7" opacity="0.35" cx="179.558824" cy="175.381098" rx="1.61764706" ry="1.61890244"></ellipse>
<ellipse id="Oval-10-Copy" fill="#E0B4B7" opacity="0.35" cx="180.098039" cy="102.530488" rx="2.15686275" ry="2.15853659"></ellipse>
<path d="M28.9985381,29.9671598 L171.151018,132.876024" id="Path-11" stroke="#CFDAE6" opacity="0.8"></path>
</g>
<g id="Group-10" opacity="0.799999952" transform="translate(1054.100635, 36.659317) rotate(-11.000000) translate(-1054.100635, -36.659317) translate(1026.600635, 4.659317)">
<ellipse id="Oval-7" stroke="#CFDAE6" stroke-width="0.941176471" cx="43.8135593" cy="32" rx="11.1864407" ry="11.2941176"></ellipse>
<g id="Group-12" transform="translate(34.596774, 23.111111)" fill="#BACAD9">
<ellipse id="Oval-7" opacity="0.45" cx="9.18534718" cy="8.88888889" rx="8.47457627" ry="8.55614973"></ellipse>
<path d="M9.18534718,17.4450386 C13.8657264,17.4450386 17.6599235,13.6143199 17.6599235,8.88888889 C17.6599235,4.16345787 13.8657264,0.332739156 9.18534718,0.332739156 L9.18534718,17.4450386 Z" id="Oval-7"></path>
</g>
<path d="M34.6597385,24.809694 L5.71666084,4.76878945" id="Path-2" stroke="#CFDAE6" stroke-width="0.941176471"></path>
<ellipse id="Oval" stroke="#CFDAE6" stroke-width="0.941176471" cx="3.26271186" cy="3.29411765" rx="3.26271186" ry="3.29411765"></ellipse>
<ellipse id="Oval-Copy" fill="#F7E1AD" cx="2.79661017" cy="61.1764706" rx="2.79661017" ry="2.82352941"></ellipse>
<path d="M34.6312443,39.2922712 L5.06366663,59.785082" id="Path-10" stroke="#CFDAE6" stroke-width="0.941176471"></path>
</g>
<g id="Group-19" opacity="0.33" transform="translate(1282.537219, 446.502867) rotate(-10.000000) translate(-1282.537219, -446.502867) translate(1142.537219, 327.502867)">
<g id="Group-17" transform="translate(141.333539, 104.502742) rotate(275.000000) translate(-141.333539, -104.502742) translate(129.333539, 92.502742)" fill="#BACAD9">
<circle id="Oval-4" opacity="0.45" cx="11.6666667" cy="11.6666667" r="11.6666667"></circle>
<path d="M23.3333333,23.3333333 C23.3333333,16.8900113 18.1099887,11.6666667 11.6666667,11.6666667 C5.22334459,11.6666667 0,16.8900113 0,23.3333333 L23.3333333,23.3333333 Z" id="Oval-4" transform="translate(11.666667, 17.500000) scale(-1, -1) translate(-11.666667, -17.500000) "></path>
</g>
<circle id="Oval-5-Copy-6" fill="#CFDAE6" cx="201.833333" cy="87.5" r="5.83333333"></circle>
<path d="M143.5,88.8126685 L155.070501,17.6038544" id="Path-17" stroke="#BACAD9" stroke-width="1.16666667"></path>
<path d="M17.5,37.3333333 L127.466252,97.6449735" id="Path-18" stroke="#BACAD9" stroke-width="1.16666667"></path>
<polyline id="Path-19" stroke="#CFDAE6" stroke-width="1.16666667" points="143.902597 120.302281 174.935455 231.571342 38.5 147.510847 126.366941 110.833333"></polyline>
<path d="M159.833333,99.7453842 L195.416667,89.25" id="Path-20" stroke="#E0B4B7" stroke-width="1.16666667" opacity="0.6"></path>
<path d="M205.333333,82.1372105 L238.719406,36.1666667" id="Path-24" stroke="#BACAD9" stroke-width="1.16666667"></path>
<path d="M266.723424,132.231988 L207.083333,90.4166667" id="Path-25" stroke="#CFDAE6" stroke-width="1.16666667"></path>
<circle id="Oval-5" fill="#C1D1E0" cx="156.916667" cy="8.75" r="8.75"></circle>
<circle id="Oval-5-Copy-3" fill="#C1D1E0" cx="39.0833333" cy="148.75" r="5.25"></circle>
<circle id="Oval-5-Copy-2" fill-opacity="0.6" fill="#D1DEED" cx="8.75" cy="33.25" r="8.75"></circle>
<circle id="Oval-5-Copy-4" fill-opacity="0.6" fill="#D1DEED" cx="243.833333" cy="30.3333333" r="5.83333333"></circle>
<circle id="Oval-5-Copy-5" fill="#E0B4B7" cx="175.583333" cy="232.75" r="5.25"></circle>
</g>
</g>
</g>
</g>
</svg>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<svg width="83px" height="77px" viewBox="0 0 83 77" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 47.1 (45422) - http://www.bohemiancoding.com/sketch -->
<title>Group 6</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="Ant-Design-Pro-3.0" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="任务为空" transform="translate(-1157.000000, -169.000000)">
<g id="Group-26-Copy" transform="translate(1031.000000, 44.000000)">
<g id="Group-6" transform="translate(126.000000, 126.000000)">
<path d="M78.624,12.0568323 L78.624,10.6970825 L78.624,10.6970825 C78.624,9.95481184 79.2257293,9.35308255 79.968,9.35308255 C80.1768025,9.35308255 80.3827331,9.40173282 80.5694602,9.49517507 L81.9280649,10.1750499 L81.9280649,10.1750499 C82.5918601,10.5072273 82.8606895,11.3146225 82.5285122,11.9784177 C82.3985128,12.2381974 82.1878447,12.4488655 81.9280649,12.5788649 L80.5694602,13.2587398 L80.5694602,13.2587398 C79.9056651,13.5909171 79.0982698,13.3220877 78.7660925,12.6582925 C78.6726503,12.4715654 78.624,12.2656348 78.624,12.0568323 Z" id="Triangle-36" fill-opacity="0.4" fill="#A3B1BF"></path>
<ellipse id="Oval-203" stroke-opacity="0.4" stroke="#A3B1BF" stroke-width="2.016" cx="18.144" cy="2.69026549" rx="2.688" ry="2.69026549"></ellipse>
<path d="M77.876704,46.8803671 L76.011296,46.8803671 L76.011296,46.8803671 C75.5985758,46.8803671 75.264,47.2149429 75.264,47.6276631 C75.264,48.0403832 75.5985758,48.374959 76.011296,48.374959 L77.876704,48.374959 L77.876704,50.3649164 C77.876704,50.7776366 78.2112798,51.1122124 78.624,51.1122124 L78.624,51.1122124 L78.624,51.1122124 C79.0367202,51.1122124 79.371296,50.7776366 79.371296,50.3649164 L79.371296,50.3649164 L79.371296,48.374959 L81.236704,48.374959 C81.6494242,48.374959 81.984,48.0403832 81.984,47.6276631 L81.984,47.6276631 C81.984,47.2149429 81.6494242,46.8803671 81.236704,46.8803671 L81.236704,46.8803671 L79.371296,46.8803671 L79.371296,45.1395084 L79.371296,45.1395084 C79.371296,44.7267882 79.0367202,44.3922124 78.624,44.3922124 C78.2112798,44.3922124 77.876704,44.7267882 77.876704,45.1395084 L77.876704,46.8803671 Z" id="Combined-Shape" fill-opacity="0.4" fill="#A3B1BF"></path>
<path d="M2.61270403,35.4467388 L0.747295969,35.4467388 L0.747295969,35.4467388 C0.334575802,35.4467388 -5.05436431e-17,35.7813146 0,36.1940347 C5.05436431e-17,36.6067549 0.334575802,36.9413307 0.747295969,36.9413307 L2.61270403,36.9413307 L2.61270403,38.9312881 C2.61270403,39.3440083 2.94727983,39.6785841 3.36,39.6785841 C3.77272017,39.6785841 4.10729597,39.3440083 4.10729597,38.9312881 L4.10729597,38.9312881 L4.10729597,36.9413307 L5.97270403,36.9413307 C6.3854242,36.9413307 6.72,36.6067549 6.72,36.1940347 L6.72,36.1940347 L6.72,36.1940347 C6.72,35.7813146 6.3854242,35.4467388 5.97270403,35.4467388 L5.97270403,35.4467388 L4.10729597,35.4467388 L4.10729597,33.70588 L4.10729597,33.70588 C4.10729597,33.2931599 3.77272017,32.9585841 3.36,32.9585841 C2.94727983,32.9585841 2.61270403,33.2931599 2.61270403,33.70588 L2.61270403,35.4467388 Z" id="Combined-Shape-Copy" fill-opacity="0.4" fill="#A3B1BF"></path>
<ellipse id="Oval-4" fill-opacity="0.25" fill="#A3B1BF" cx="44.352" cy="73.5587663" rx="21.504" ry="2.01769912"></ellipse>
<path d="M69.198,15.7660988 L59.298,15.7660988 L59.298,12.6134439 C59.298,10.3728071 57.48675,8.56003054 55.248,8.56003054 L34.9755,8.56003054 C34.7505,6.53332384 33.034875,4.95699641 30.948,4.95699641 L26.898,4.95699641 C24.65925,4.95699641 22.848,6.76977296 22.848,9.01040981 L22.848,51.3460609 C22.848,53.5866977 24.65925,55.3994743 26.898,55.3994743 L30.948,55.3994743 C33.18675,55.3994743 34.998,53.5866977 34.998,51.3460609 L34.998,36.9339244 L55.248,36.9339244 L55.248,40.0865792 C55.248,42.3272161 57.05925,44.1399926 59.298,44.1399926 L69.198,44.1399926 C71.43675,44.1399926 73.248,42.3272161 73.248,40.0865792 L73.248,19.8195122 C73.248,17.5788754 71.43675,15.7660988 69.198,15.7660988 Z M30.948,51.3460609 L26.898,51.3460609 L26.898,9.01040981 L30.948,9.01040981 L30.948,51.3460609 Z M55.248,32.8805109 L34.998,32.8805109 L34.998,12.6134439 L55.248,12.6134439 L55.248,32.8805109 Z M69.198,40.0865792 L59.298,40.0865792 L59.298,19.8195122 L69.198,19.8195122 L69.198,40.0865792 Z" id="Shape" fill-opacity="0.4" fill="#A3B1BF" fill-rule="nonzero"></path>
</g>
</g>
</g>
</g>
</svg>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<svg width="75px" height="73px" viewBox="0 0 75 73" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 47.1 (45422) - http://www.bohemiancoding.com/sketch -->
<title>bells (1)</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="Ant-Design-Pro-3.0" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="通知为空" transform="translate(-1161.000000, -172.000000)">
<g id="Group-26-Copy" transform="translate(1031.000000, 44.000000)">
<g id="bells-(1)" transform="translate(130.000000, 128.000000)">
<path d="M60.4865,49.018595 L58.824,49.018595 L58.824,22.6239669 C58.824,12.9262978 51.449625,4.94310111 41.9615,3.88849432 L41.9615,2.1209969 C41.9615,0.948556947 41.0055625,0 39.824,0 C38.6424375,0 37.6865,0.948556947 37.6865,2.1209969 L37.6865,3.88849432 C28.198375,4.94310111 20.824,12.9262978 20.824,22.6239669 L20.824,49.018595 L19.1615,49.018595 C17.9799375,49.018595 17.024,49.967152 17.024,51.1395919 C17.024,52.3120319 17.9799375,53.2605888 19.1615,53.2605888 L35.549,53.2605888 L35.549,56.0885847 C35.549,58.4334646 37.460875,60.3305785 39.824,60.3305785 C42.187125,60.3305785 44.099,58.4334646 44.099,56.0885847 L44.099,53.2605888 L60.4865,53.2605888 C61.6680625,53.2605888 62.624,52.3120319 62.624,51.1395919 C62.624,49.967152 61.6680625,49.018595 60.4865,49.018595 Z M54.549,49.018595 L25.099,49.018595 L25.099,22.6239669 C25.099,14.5523954 31.689625,8.01265496 39.824,8.01265496 C47.958375,8.01265496 54.549,14.5523954 54.549,22.6239669 L54.549,49.018595 Z" id="Shape" fill-opacity="0.4" fill="#A3B1BF" fill-rule="nonzero"></path>
<path d="M71.136,16.012278 L71.136,14.8111797 L71.136,14.8111797 C71.136,14.1396014 71.6804217,13.5951797 72.352,13.5951797 C72.5395074,13.5951797 72.7244747,13.6385426 72.892445,13.7218794 L74.1028889,14.3224285 L74.1028889,14.3224285 C74.7044928,14.6209081 74.9502237,15.3505699 74.6517442,15.9521739 C74.5336639,16.1901719 74.340887,16.3829489 74.1028889,16.5010291 L72.892445,17.1015783 L72.892445,17.1015783 C72.2908411,17.4000579 71.5611793,17.154327 71.2626997,16.552723 C71.179363,16.3847527 71.136,16.1997854 71.136,16.012278 Z" id="Triangle-36" fill-opacity="0.4" fill="#A3B1BF"></path>
<ellipse id="Oval-203" stroke-opacity="0.4" stroke="#A3B1BF" stroke-width="1.824" cx="16.416" cy="7.61958858" rx="2.432" ry="2.41322314"></ellipse>
<path d="M70.4656602,47.2590131 L68.7663398,47.2590131 C68.3961213,47.2590131 68.096,47.5591345 68.096,47.9293529 C68.096,48.2995713 68.3961213,48.5996927 68.7663398,48.5996927 L70.4656602,48.5996927 L70.4656602,50.4107364 C70.4656602,50.7809549 70.7657816,51.0810762 71.136,51.0810762 L71.136,51.0810762 C71.5062184,51.0810762 71.8063398,50.7809549 71.8063398,50.4107364 L71.8063398,48.5996927 L73.5056602,48.5996927 C73.8758787,48.5996927 74.176,48.2995713 74.176,47.9293529 L74.176,47.9293529 C74.176,47.5591345 73.8758787,47.2590131 73.5056602,47.2590131 L73.5056602,47.2590131 L71.8063398,47.2590131 L71.8063398,45.6714159 L71.8063398,45.6714159 C71.8063398,45.3011975 71.5062184,45.0010762 71.136,45.0010762 C70.7657816,45.0010762 70.4656602,45.3011975 70.4656602,45.6714159 L70.4656602,47.2590131 Z" id="Combined-Shape" fill-opacity="0.4" fill="#A3B1BF"></path>
<path d="M2.36966024,37.0028148 L0.670339761,37.0028148 L0.670339761,37.0028148 C0.300121334,37.0028148 -4.53386812e-17,37.3029361 0,37.6731545 C4.53386812e-17,38.043373 0.300121334,38.3434943 0.670339761,38.3434943 L2.36966024,38.3434943 L2.36966024,40.1545381 C2.36966024,40.5247565 2.66978157,40.8248778 3.04,40.8248778 L3.04,40.8248778 C3.41021843,40.8248778 3.71033976,40.5247565 3.71033976,40.1545381 L3.71033976,38.3434943 L5.40966024,38.3434943 C5.77987867,38.3434943 6.08,38.043373 6.08,37.6731545 C6.08,37.3029361 5.77987867,37.0028148 5.40966024,37.0028148 L3.71033976,37.0028148 L3.71033976,35.4152176 L3.71033976,35.4152176 C3.71033976,35.0449992 3.41021843,34.7448778 3.04,34.7448778 C2.66978157,34.7448778 2.36966024,35.0449992 2.36966024,35.4152176 L2.36966024,37.0028148 Z" id="Combined-Shape-Copy" fill-opacity="0.4" fill="#A3B1BF"></path>
<ellipse id="Oval-4" fill-opacity="0.25" fill="#A3B1BF" cx="40.128" cy="71.1900826" rx="19.456" ry="1.80991736"></ellipse>
</g>
</g>
</g>
</g>
</svg>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<svg width="87px" height="83px" viewBox="0 0 87 83" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 47.1 (45422) - http://www.bohemiancoding.com/sketch -->
<title>Group 6</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="Ant-Design-Pro-3.0" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="消息为空" transform="translate(-1155.000000, -163.000000)">
<g id="Group-26-Copy" transform="translate(1031.000000, 44.000000)">
<g id="Group-6" transform="translate(124.000000, 120.000000)">
<path d="M82.7851852,20.5337889 L82.7851852,19.2238049 L82.7851852,19.2238049 C82.7851852,18.5037892 83.3688732,17.9201011 84.0888889,17.9201011 C84.2909964,17.9201011 84.4903362,17.9670906 84.6711654,18.0573583 L85.9832794,18.7123504 L85.9832794,18.7123504 C86.6274901,19.0339328 86.8890319,19.8168627 86.5674495,20.4610733 C86.4412034,20.7139761 86.2361822,20.9189973 85.9832794,21.0452434 L84.6711654,21.7002354 L84.6711654,21.7002354 C84.0269547,22.0218178 83.2440248,21.760276 82.9224424,21.1160653 C82.8321746,20.9352362 82.7851852,20.7358964 82.7851852,20.5337889 Z" id="Triangle-36" fill-opacity="0.4" fill="#A3B1BF"></path>
<ellipse id="Oval-203" stroke-opacity="0.4" stroke="#A3B1BF" stroke-width="1.95555556" cx="17.6" cy="2.6031746" rx="2.60740741" ry="2.6031746"></ellipse>
<path d="M82.0620811,53.8230453 L80.24903,53.8230453 L80.24903,53.8230453 C79.8496706,53.8230453 79.5259259,54.14679 79.5259259,54.5461493 C79.5259259,54.9455087 79.8496706,55.2692534 80.24903,55.2692534 L82.0620811,55.2692534 L82.0620811,57.2028219 C82.0620811,57.6021812 82.3858258,57.9259259 82.7851852,57.9259259 L82.7851852,57.9259259 C83.1845445,57.9259259 83.5082892,57.6021812 83.5082892,57.2028219 L83.5082892,57.2028219 L83.5082892,55.2692534 L85.3213404,55.2692534 C85.7206997,55.2692534 86.0444444,54.9455087 86.0444444,54.5461493 C86.0444444,54.14679 85.7206997,53.8230453 85.3213404,53.8230453 L83.5082892,53.8230453 L83.5082892,52.1305115 L83.5082892,52.1305115 C83.5082892,51.7311521 83.1845445,51.4074074 82.7851852,51.4074074 C82.3858258,51.4074074 82.0620811,51.7311521 82.0620811,52.1305115 L82.0620811,53.8230453 Z" id="Combined-Shape" fill-opacity="0.4" fill="#A3B1BF"></path>
<path d="M2.5361552,42.7595532 L0.723104056,42.7595532 L0.723104056,42.7595532 C0.323744714,42.7595532 -4.89074141e-17,43.0832979 0,43.4826573 C4.89074141e-17,43.8820166 0.323744714,44.2057613 0.723104056,44.2057613 L2.5361552,44.2057613 L2.5361552,46.1393298 C2.5361552,46.5386891 2.85989992,46.8624339 3.25925926,46.8624339 L3.25925926,46.8624339 C3.6586186,46.8624339 3.98236332,46.5386891 3.98236332,46.1393298 L3.98236332,46.1393298 L3.98236332,44.2057613 L5.79541446,44.2057613 C6.1947738,44.2057613 6.51851852,43.8820166 6.51851852,43.4826573 C6.51851852,43.0832979 6.1947738,42.7595532 5.79541446,42.7595532 L3.98236332,42.7595532 L3.98236332,41.0670194 L3.98236332,41.0670194 C3.98236332,40.6676601 3.6586186,40.3439153 3.25925926,40.3439153 C2.85989992,40.3439153 2.5361552,40.6676601 2.5361552,41.0670194 L2.5361552,42.7595532 Z" id="Combined-Shape-Copy" fill-opacity="0.4" fill="#A3B1BF"></path>
<ellipse id="Oval-4" fill-opacity="0.25" fill="#A3B1BF" cx="49.5407407" cy="80.047619" rx="20.8592593" ry="1.95238095"></ellipse>
<path d="M71.6866074,29.4965409 L68.5468032,29.4965409 L68.5468032,28.4988753 C68.5468032,26.9683656 67.3796508,25.7212837 65.9494782,25.7212837 L56.5081472,25.7212837 C56.1136168,24.9390232 55.5218212,24.3721677 54.7108421,24.3721677 C40.9461157,24.3721677 28.5786844,12.0373933 28.5786844,12.0373933 C28.1786744,11.8163197 27.7622257,11.7142857 27.3567362,11.7142857 C26.0032778,11.7142857 24.7703704,12.8366595 24.7703704,14.3898434 L24.7703704,59.8006328 C24.7703704,61.3651538 26.0087574,62.4761905 27.3567362,62.4761905 C27.7951032,62.4761905 28.2499091,62.3571508 28.6718374,62.0963973 C28.6718374,62.0963973 40.0967795,47.3354816 54.8697502,47.3354816 C55.6259334,47.3354816 56.1684127,46.8083061 56.5300655,46.0770626 L56.7547286,46.0770626 C56.8314429,49.4952009 56.0588209,53.1344128 55.3409948,55.7589535 C54.9245461,57.2837946 55.5053825,58.8879955 56.7876062,59.7552844 C57.3684426,60.1464146 58.0314728,60.344814 58.6890234,60.344814 C59.4780841,60.344814 60.2616653,60.0613863 60.9082567,59.5115365 C64.700132,56.2521177 66.1193454,52.5052033 66.6453859,49.9373481 C66.9741612,48.3331472 67.0015592,46.9783627 66.9632021,46.0827311 C67.1604673,45.8219776 67.3467733,45.5385499 67.5275997,45.2551222 C68.5522827,43.6282471 68.5522827,42.9990375 68.5522827,42.6986041 L68.5522827,41.4175108 L71.6866074,41.4175108 C72.7770455,41.4175108 73.6592593,40.5048736 73.6592593,39.3768312 L73.6592593,31.5372205 C73.6592593,30.4091782 72.7770455,29.4965409 71.6866074,29.4965409 Z M53.1765573,43.310808 C49.8175696,43.5318816 46.4037859,44.3935019 43.0009614,45.8843317 C39.9159531,47.2391162 36.8364243,49.1154077 33.844569,51.4621893 C31.7842437,53.0777273 30.0526937,54.6932653 28.7101945,56.0537183 L28.7101945,17.5302225 C30.1568059,18.720619 32.0965802,20.2001117 34.3980074,21.6739358 C37.4227403,23.6125814 40.4748711,25.1657653 43.472206,26.2824706 C46.7709183,27.5125469 50.0148347,28.2267847 53.1382002,28.4081785 L53.1382002,28.5045439 C53.1382002,28.6349206 53.1491594,28.7596288 53.1710777,28.8786685 L53.1710777,43.2484539 C53.1765573,43.2711281 53.1765573,43.2881338 53.1765573,43.310808 Z M64.6014994,42.3584909 C64.4316322,42.7042727 64.0754589,43.2711281 63.861755,43.5545558 C63.6864081,43.6679269 63.5275001,43.8096408 63.3959899,43.9740289 C63.0233779,44.4388503 62.8644698,45.0510542 62.968582,45.6462524 C62.968582,45.6575895 63.1932452,47.1087395 62.7877556,49.0927335 C62.316511,51.4055037 61.2315525,53.4688575 59.560278,55.2487836 C60.3548183,51.9326793 61.0233281,47.6699264 60.5520835,43.781298 C60.426053,42.7609582 59.5876759,41.9957034 58.5958704,41.9957034 L57.1930957,41.9957034 L57.1930957,40.3008056 C57.1930957,40.1137433 57.1656978,39.9323496 57.1218611,39.7622929 L57.1218611,29.8026428 L64.6014994,29.8026428 L64.6014994,42.3584909 Z M69.7139555,37.3361517 L68.5468032,37.3361517 L68.5468032,33.5779001 L69.7139555,33.5779001 L69.7139555,37.3361517 Z" id="Shape" fill-opacity="0.4" fill="#A3B1BF" fill-rule="nonzero"></path>
</g>
</g>
</g>
</g>
</svg>
\ No newline at end of file
var Feng = {
ctxPath: "",
addCtx: function (ctx) {
if (this.ctxPath === "") {
this.ctxPath = ctx;
}
},
info: function (info) {
top.layer.msg(info, {icon: 6});
},
success: function (info) {
top.layer.msg(info, {icon: 1});
},
error: function (info) {
top.layer.msg(info, {icon: 2});
},
confirm: function(tip, ensure){
top.layer.confirm(tip, {
skin: 'layui-layer-admin'
}, function () {
ensure();
});
},
currentDate: function () {
// 获取当前日期
var date = new Date();
// 获取当前月份
var nowMonth = date.getMonth() + 1;
// 获取当前是几号
var strDate = date.getDate();
// 添加分隔符“-”
var seperator = "-";
// 对月份进行处理,1-9月在前面添加一个“0”
if (nowMonth >= 1 && nowMonth <= 9) {
nowMonth = "0" + nowMonth;
}
// 对月份进行处理,1-9号在前面添加一个“0”
if (strDate >= 0 && strDate <= 9) {
strDate = "0" + strDate;
}
// 最后拼接字符串,得到一个格式为(yyyy-MM-dd)的日期
return date.getFullYear() + seperator + nowMonth + seperator + strDate;
},
getUrlParam: function (name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
var r = window.location.search.substr(1).match(reg);
if (r != null) {
return unescape(r[2]);
} else {
return null;
}
},
infoDetail: function (title, info) {
var display = "";
if (typeof info === "string") {
display = info;
} else {
if (info instanceof Array) {
for (var x in info) {
display = display + info[x] + "<br/>";
}
} else {
display = info;
}
}
top.layer.open({
title: title,
type: 1,
skin: 'layui-layer-rim', //加上边框
area: ['950px', '600px'], //宽高
content: '<div style="padding: 20px;">' + display + '</div>'
});
},
zTreeCheckedNodes: function (zTreeId) {
var zTree = $.fn.zTree.getZTreeObj(zTreeId);
var nodes = zTree.getCheckedNodes();
var ids = "";
for (var i = 0, l = nodes.length; i < l; i++) {
ids += "," + nodes[i].id;
}
return ids.substring(1);
},
closeAllLoading: function () {
layer.closeAll('loading');
}
};
// 以下代码是配置layui扩展模块的目录,每个页面都需要引入
layui.config({
base: Feng.ctxPath + '/assets/common/module/'
}).extend({
formSelects: 'formSelects/formSelects-v4',
treetable: 'treetable-lay/treetable',
dropdown: 'dropdown/dropdown',
notice: 'notice/notice',
step: 'step-lay/step',
dtree: 'dtree/dtree',
citypicker: 'city-picker/city-picker',
tableSelect: 'tableSelect/tableSelect',
ax: 'ax/ax',
ztree: 'ztree/ztree-object'
}).use(['admin'], function () {
var $ = layui.$;
var admin = layui.admin;
// 单标签模式需要根据子页面的地址联动侧边栏的选中,用于适配浏览器前进后退按钮
if (window != top && top.layui && top.layui.index && !top.layui.index.pageTabs) {
top.layui.admin.activeNav(location.href.substring(Feng.ctxPath.length));
}
// 移除loading动画
setTimeout(function () {
admin.removeLoading();
}, window == top ? 300 : 150);
//注册session超时的操作
$.ajaxSetup({
contentType: "application/x-www-form-urlencoded;charset=utf-8",
complete: function (XMLHttpRequest, textStatus) {
//通过XMLHttpRequest取得响应头,sessionstatus,
var sessionstatus = XMLHttpRequest.getResponseHeader("sessionstatus");
if (sessionstatus === "timeout") {
//如果超时就处理 ,指定要跳转的页面
window.location = Feng.ctxPath + "/global/sessionError";
}
}
});
});
\ No newline at end of file
/** layui-v2.4.5 MIT License By https://www.layui.com */
blockquote,body,button,dd,div,dl,dt,form,h1,h2,h3,h4,h5,h6,input,legend,li,ol,p,td,textarea,th,ul{margin:0;padding:0;-webkit-tap-highlight-color:rgba(0,0,0,0)}html{font:12px 'Helvetica Neue','PingFang SC',STHeitiSC-Light,Helvetica,Arial,sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}a,button,input{-webkit-tap-highlight-color:rgba(255,0,0,0)}a{text-decoration:none;background:0 0}a:active,a:hover{outline:0}table{border-collapse:collapse;border-spacing:0}li{list-style:none}b,strong{font-weight:700}h1,h2,h3,h4,h5,h6{font-weight:500}address,cite,dfn,em,var{font-style:normal}dfn{font-style:italic}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}img{border:0;vertical-align:bottom}.layui-inline,input,label{vertical-align:middle}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0;outline:0}button,select{text-transform:none}select{-webkit-appearance:none;border:none}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}@font-face{font-family:layui-icon;src:url(../font/iconfont.eot?v=1.0.7);src:url(../font/iconfont.eot?v=1.0.7#iefix) format('embedded-opentype'),url(../font/iconfont.woff?v=1.0.7) format('woff'),url(../font/iconfont.ttf?v=1.0.7) format('truetype'),url(../font/iconfont.svg?v=1.0.7#iconfont) format('svg')}.layui-icon{font-family:layui-icon!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.layui-box,.layui-box *{-webkit-box-sizing:content-box!important;-moz-box-sizing:content-box!important;box-sizing:content-box!important}.layui-border-box,.layui-border-box *{-webkit-box-sizing:border-box!important;-moz-box-sizing:border-box!important;box-sizing:border-box!important}.layui-inline{position:relative;display:inline-block;*display:inline;*zoom:1}.layui-edge,.layui-upload-iframe{position:absolute;width:0;height:0}.layui-edge{border-style:dashed;border-color:transparent;overflow:hidden}.layui-elip{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-unselect{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.layui-disabled,.layui-disabled:active{background-color:#d2d2d2!important;color:#fff!important;cursor:not-allowed!important}.layui-circle{border-radius:100%}.layui-show{display:block!important}.layui-hide{display:none!important}.layui-upload-iframe{border:0;visibility:hidden}.layui-upload-enter{border:1px solid #009E94;background-color:#009E94;color:#fff;-webkit-transform:scale(1.1);transform:scale(1.1)}@-webkit-keyframes layui-m-anim-scale{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes layui-m-anim-scale{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.layui-m-anim-scale{animation-name:layui-m-anim-scale;-webkit-animation-name:layui-m-anim-scale}@-webkit-keyframes layui-m-anim-up{0%{opacity:0;-webkit-transform:translateY(800px);transform:translateY(800px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes layui-m-anim-up{0%{opacity:0;-webkit-transform:translateY(800px);transform:translateY(800px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}.layui-m-anim-up{-webkit-animation-name:layui-m-anim-up;animation-name:layui-m-anim-up}@-webkit-keyframes layui-m-anim-left{0%{-webkit-transform:translateX(100%);transform:translateX(100%)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes layui-m-anim-left{0%{-webkit-transform:translateX(100%);transform:translateX(100%)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}.layui-m-anim-left{-webkit-animation-name:layui-m-anim-left;animation-name:layui-m-anim-left}@-webkit-keyframes layui-m-anim-right{0%{-webkit-transform:translateX(-100%);transform:translateX(-100%)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes layui-m-anim-right{0%{-webkit-transform:translateX(-100%);transform:translateX(-100%)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}.layui-m-anim-right{-webkit-animation-name:layui-m-anim-right;animation-name:layui-m-anim-right}@-webkit-keyframes layui-m-anim-lout{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{-webkit-transform:translateX(-100%);transform:translateX(-100%)}}@keyframes layui-m-anim-lout{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{-webkit-transform:translateX(-100%);transform:translateX(-100%)}}.layui-m-anim-lout{-webkit-animation-name:layui-m-anim-lout;animation-name:layui-m-anim-lout}@-webkit-keyframes layui-m-anim-rout{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{-webkit-transform:translateX(100%);transform:translateX(100%)}}@keyframes layui-m-anim-rout{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{-webkit-transform:translateX(100%);transform:translateX(100%)}}.layui-m-anim-rout{-webkit-animation-name:layui-m-anim-rout;animation-name:layui-m-anim-rout}.layui-m-layer{position:relative;z-index:19891014}.layui-m-layer *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.layui-m-layermain,.layui-m-layershade{position:fixed;left:0;top:0;width:100%;height:100%}.layui-m-layershade{background-color:rgba(0,0,0,.7);pointer-events:auto}.layui-m-layermain{display:table;font-family:Helvetica,arial,sans-serif;pointer-events:none}.layui-m-layermain .layui-m-layersection{display:table-cell;vertical-align:middle;text-align:center}.layui-m-layerchild{position:relative;display:inline-block;text-align:left;background-color:#fff;font-size:14px;border-radius:5px;box-shadow:0 0 8px rgba(0,0,0,.1);pointer-events:auto;-webkit-overflow-scrolling:touch;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.2s;animation-duration:.2s}.layui-m-layer0 .layui-m-layerchild{width:90%;max-width:640px}.layui-m-layer1 .layui-m-layerchild{border:none;border-radius:0}.layui-m-layer2 .layui-m-layerchild{width:auto;max-width:260px;min-width:40px;border:none;background:0 0;box-shadow:none;color:#fff}.layui-m-layerchild h3{padding:0 10px;height:60px;line-height:60px;font-size:16px;font-weight:400;border-radius:5px 5px 0 0;text-align:center}.layui-m-layerbtn span,.layui-m-layerchild h3{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-m-layercont{padding:50px 30px;line-height:22px;text-align:center}.layui-m-layer1 .layui-m-layercont{padding:0;text-align:left}.layui-m-layer2 .layui-m-layercont{text-align:center;padding:0;line-height:0}.layui-m-layer2 .layui-m-layercont i{width:25px;height:25px;margin-left:8px;display:inline-block;background-color:#fff;border-radius:100%;-webkit-animation:layui-m-anim-loading 1.4s infinite ease-in-out;animation:layui-m-anim-loading 1.4s infinite ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both}.layui-m-layerbtn,.layui-m-layerbtn span{position:relative;text-align:center;border-radius:0 0 5px 5px}.layui-m-layer2 .layui-m-layercont p{margin-top:20px}@-webkit-keyframes layui-m-anim-loading{0%,100%,80%{transform:scale(0);-webkit-transform:scale(0)}40%{transform:scale(1);-webkit-transform:scale(1)}}@keyframes layui-m-anim-loading{0%,100%,80%{transform:scale(0);-webkit-transform:scale(0)}40%{transform:scale(1);-webkit-transform:scale(1)}}.layui-m-layer2 .layui-m-layercont i:first-child{margin-left:0;-webkit-animation-delay:-.32s;animation-delay:-.32s}.layui-m-layer2 .layui-m-layercont i.layui-m-layerload{-webkit-animation-delay:-.16s;animation-delay:-.16s}.layui-m-layer2 .layui-m-layercont>div{line-height:22px;padding-top:7px;margin-bottom:20px;font-size:14px}.layui-m-layerbtn{display:box;display:-moz-box;display:-webkit-box;width:100%;height:50px;line-height:50px;font-size:0;border-top:1px solid #D0D0D0;background-color:#F2F2F2}.layui-m-layerbtn span{display:block;-moz-box-flex:1;box-flex:1;-webkit-box-flex:1;font-size:14px;cursor:pointer}.layui-m-layerbtn span[yes]{color:#40AFFE}.layui-m-layerbtn span[no]{border-right:1px solid #D0D0D0;border-radius:0 0 0 5px}.layui-m-layerbtn span:active{background-color:#F6F6F6}.layui-m-layerend{position:absolute;right:7px;top:10px;width:30px;height:30px;border:0;font-weight:400;background:0 0;cursor:pointer;-webkit-appearance:none;font-size:30px}.layui-m-layerend::after,.layui-m-layerend::before{position:absolute;left:5px;top:15px;content:'';width:18px;height:1px;background-color:#999;transform:rotate(45deg);-webkit-transform:rotate(45deg);border-radius:3px}.layui-m-layerend::after{transform:rotate(-45deg);-webkit-transform:rotate(-45deg)}body .layui-m-layer .layui-m-layer-footer{position:fixed;width:95%;max-width:100%;margin:0 auto;left:0;right:0;bottom:10px;background:0 0}.layui-m-layer-footer .layui-m-layercont{padding:20px;border-radius:5px 5px 0 0;background-color:rgba(255,255,255,.8)}.layui-m-layer-footer .layui-m-layerbtn{display:block;height:auto;background:0 0;border-top:none}.layui-m-layer-footer .layui-m-layerbtn span{background-color:rgba(255,255,255,.8)}.layui-m-layer-footer .layui-m-layerbtn span[no]{color:#FD482C;border-top:1px solid #c2c2c2;border-radius:0 0 5px 5px}.layui-m-layer-footer .layui-m-layerbtn span[yes]{margin-top:10px;border-radius:5px}body .layui-m-layer .layui-m-layer-msg{width:auto;max-width:90%;margin:0 auto;bottom:-150px;background-color:rgba(0,0,0,.7);color:#fff}.layui-m-layer-msg .layui-m-layercont{padding:10px 20px}
\ No newline at end of file
/** layui-v2.4.5 MIT License By https://www.layui.com */
html #layuicss-skincodecss{display:none;position:absolute;width:1989px}.layui-code-h3,.layui-code-view{position:relative;font-size:12px}.layui-code-view{display:block;margin:10px 0;padding:0;border:1px solid #e2e2e2;border-left-width:6px;background-color:#F2F2F2;color:#333;font-family:Courier New}.layui-code-h3{padding:0 10px;height:32px;line-height:32px;border-bottom:1px solid #e2e2e2}.layui-code-h3 a{position:absolute;right:10px;top:0;color:#999}.layui-code-view .layui-code-ol{position:relative;overflow:auto}.layui-code-view .layui-code-ol li{position:relative;margin-left:45px;line-height:20px;padding:0 5px;border-left:1px solid #e2e2e2;list-style-type:decimal-leading-zero;*list-style-type:decimal;background-color:#fff}.layui-code-view pre{margin:0}.layui-code-notepad{border:1px solid #0C0C0C;border-left-color:#3F3F3F;background-color:#0C0C0C;color:#C2BE9E}.layui-code-notepad .layui-code-h3{border-bottom:none}.layui-code-notepad .layui-code-ol li{background-color:#3F3F3F;border-left:none}
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
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