2024年2月6日15:57:24
parent
4470a015fa
commit
fd0e99737a
9
pom.xml
9
pom.xml
|
|
@ -169,8 +169,8 @@
|
|||
<version>${commons-beanutils.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.data</groupId>
|
||||
<artifactId>spring-data-redis</artifactId>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-data-redis</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
|
|
@ -236,11 +236,6 @@
|
|||
<artifactId>persistence-api</artifactId>
|
||||
<version>1.0.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>redis.clients</groupId>
|
||||
<artifactId>jedis</artifactId>
|
||||
<version>3.0.1</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
|
|
|||
|
|
@ -96,10 +96,18 @@ public class EntranceController extends BaseController {
|
|||
Integer user_count = this.userService.selectCountEq("deleteStatus", false);
|
||||
model.addAttribute("user_count",user_count);
|
||||
//小说数量
|
||||
Integer fiction_count = this.fictionService.selectCount(new Fiction());
|
||||
Fiction fiction = new Fiction();
|
||||
fiction.setDeleteStatus(false);
|
||||
fiction.setAddTime(null);
|
||||
fiction.setUpdateTime(null);
|
||||
Integer fiction_count = this.fictionService.selectCount(fiction);
|
||||
model.addAttribute("fiction_count",fiction_count);
|
||||
//小说集合数量
|
||||
Integer fiction_collection = this.fictionCollectionService.selectCount(new FictionCollection());
|
||||
FictionCollection fictionCollection = new FictionCollection();
|
||||
fictionCollection.setDeleteStatus(false);
|
||||
fictionCollection.setAddTime(null);
|
||||
fictionCollection.setUpdateTime(null);
|
||||
Integer fiction_collection = this.fictionCollectionService.selectCount(fictionCollection);
|
||||
model.addAttribute("fiction_collection",fiction_collection);
|
||||
//消息数量
|
||||
model.addAttribute("message_count",200);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,221 @@
|
|||
package com.zhangmeng.fiction.server.controller;
|
||||
|
||||
|
||||
import com.zhangmeng.fiction.server.common.controller.BaseController;
|
||||
import com.zhangmeng.fiction.server.common.utils.CommonUtil;
|
||||
import com.zhangmeng.fiction.server.entity.Permission;
|
||||
import com.zhangmeng.fiction.server.res.Result;
|
||||
import com.zhangmeng.fiction.server.res.ResultTree;
|
||||
import com.zhangmeng.fiction.server.res.StatusCode;
|
||||
import com.zhangmeng.fiction.server.service.PermissionService;
|
||||
import com.zhangmeng.fiction.server.service.RolePermissionService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.ui.Model;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
import springfox.documentation.annotations.ApiIgnore;
|
||||
import tk.mybatis.mapper.entity.Condition;
|
||||
import tk.mybatis.mapper.entity.Example;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Api(tags = "权限管理")
|
||||
@RestController
|
||||
@RequestMapping("/permission")
|
||||
public class PermissionController extends BaseController {
|
||||
|
||||
@Autowired
|
||||
private PermissionService permissionService;
|
||||
|
||||
@Autowired
|
||||
private RolePermissionService rolePermissionService;
|
||||
|
||||
@ApiIgnore
|
||||
@GetMapping("/index")
|
||||
public ModelAndView index() {
|
||||
return this.jumpPage("admin/permission/list");
|
||||
}
|
||||
|
||||
@ApiIgnore
|
||||
@GetMapping("/add")
|
||||
public ModelAndView add(Model model) {
|
||||
model.addAttribute("permissionTypeList", Permission.Type.valueListMap());
|
||||
return this.jumpPage("admin/permission/add");
|
||||
}
|
||||
|
||||
@ApiIgnore
|
||||
@GetMapping("/edit")
|
||||
public ModelAndView edit(Model model, String permissionId) {
|
||||
if (CommonUtil.isNotNull(permissionId)) {
|
||||
Permission permission = this.permissionService.findById(Long.parseLong(permissionId));
|
||||
model.addAttribute("permission", permission);
|
||||
model.addAttribute("permissionTypeList",Permission.Type.valueListMap());
|
||||
}
|
||||
return this.jumpPage("admin/permission/edit");
|
||||
}
|
||||
|
||||
@ApiOperation("权限列表")
|
||||
@GetMapping("/list")
|
||||
public Result list(Integer pageNum, Integer pageSize, String title) {
|
||||
Condition condition = new Condition(Permission.class);
|
||||
Example.Criteria criteria = condition.createCriteria();
|
||||
if (CommonUtil.isNotNull(title)){
|
||||
criteria.andLike("title","%" + title + "%");
|
||||
}
|
||||
// criteria.andEqualTo("status",Permission.Status.show);
|
||||
// PageHelper.startPage(pageNum,pageSize,"addTime desc");
|
||||
List<Permission> permissionList = this.permissionService.findByCondition(condition);
|
||||
// PageInfo<Permission> pageInfo = new PageInfo<>(permissionList);
|
||||
return new Result(true, 0, "查询成功", permissionList.size(),permissionList);
|
||||
}
|
||||
|
||||
@ApiOperation("查询上级")
|
||||
@GetMapping("/selectParent")
|
||||
public ResultTree selectParent(String parentId) {
|
||||
Condition condition = new Condition(Permission.class);
|
||||
Example.Criteria criteria = condition.createCriteria();
|
||||
if (parentId != null && !parentId.equals("")) {
|
||||
criteria.andEqualTo("parent_id", Long.parseLong(parentId));
|
||||
}
|
||||
List<Permission> list = this.permissionService.findByCondition(condition);
|
||||
Permission basePower = new Permission();
|
||||
basePower.setTitle("顶级权限");
|
||||
basePower.setId(0L);
|
||||
basePower.setParent_id(-1L);
|
||||
list.add(basePower);
|
||||
return dataTree(list);
|
||||
}
|
||||
|
||||
@ApiOperation("保存权限")
|
||||
@PostMapping("/save")
|
||||
public Result save(@RequestParam @RequestBody Map<String, Object> map) {
|
||||
Permission permission = null;
|
||||
boolean flag = false;
|
||||
String message = null;
|
||||
String id = CommonUtil.map_get_value(map, "id");
|
||||
if (id == null || id.equals("")) {
|
||||
permission = new Permission();
|
||||
flag = true;
|
||||
} else {
|
||||
permission = this.permissionService.findById(Long.parseLong(id));
|
||||
}
|
||||
String parentId = CommonUtil.map_get_value(map, "parentId");
|
||||
if (CommonUtil.isNotNull(parentId)) {
|
||||
permission.setParent_id(Long.parseLong(parentId));
|
||||
}
|
||||
|
||||
String title = CommonUtil.map_get_value(map, "title");
|
||||
if (CommonUtil.isNotNull(title)) {
|
||||
permission.setTitle(title);
|
||||
}
|
||||
|
||||
String code = CommonUtil.map_get_value(map, "code");
|
||||
|
||||
if (CommonUtil.isNotNull(code)) {
|
||||
permission.setCode(code);
|
||||
}
|
||||
|
||||
String type = CommonUtil.map_get_value(map, "type");
|
||||
|
||||
if (CommonUtil.isNotNull(type)) {
|
||||
Permission.Type permission_type = null;
|
||||
if (type.equals("CATALOG")) {
|
||||
permission_type = Permission.Type.CATALOG;
|
||||
}
|
||||
if (type.equals("MENU")) {
|
||||
permission_type = Permission.Type.MENU;
|
||||
}
|
||||
if (type.equals("BUTTON")) {
|
||||
permission_type = Permission.Type.BUTTON;
|
||||
}
|
||||
permission.setType(permission_type);
|
||||
}
|
||||
|
||||
String href = CommonUtil.map_get_value(map, "href");
|
||||
if (CommonUtil.isNotNull(href)) {
|
||||
permission.setHref(href);
|
||||
}
|
||||
|
||||
String openType = CommonUtil.map_get_value(map, "openType");
|
||||
if (CommonUtil.isNotNull(openType)) {
|
||||
permission.setOpenType(openType);
|
||||
}
|
||||
String icon = CommonUtil.map_get_value(map, "icon");
|
||||
if (CommonUtil.isNotNull(icon)) {
|
||||
permission.setIcon(icon);
|
||||
}
|
||||
|
||||
String sort = CommonUtil.map_get_value(map, "sort");
|
||||
if (CommonUtil.isNotNull(sort)) {
|
||||
//判断是否为数字
|
||||
if (CommonUtil.isNumeric_ASCII(sort)) {
|
||||
permission.setSort(Integer.parseInt(sort));
|
||||
}
|
||||
}
|
||||
if (flag) {
|
||||
message = "保存成功";
|
||||
this.permissionService.save(permission);
|
||||
} else {
|
||||
message = "修改成功";
|
||||
this.permissionService.update(permission);
|
||||
}
|
||||
return new Result(true, StatusCode.OK, message);
|
||||
}
|
||||
|
||||
@ApiOperation("删除权限")
|
||||
@PostMapping("/delete")
|
||||
public Result delete(String permissionId) {
|
||||
if (CommonUtil.isNotNull(permissionId)) {
|
||||
this.permissionService.deleteById(Long.parseLong(permissionId));
|
||||
}
|
||||
return new Result(true, StatusCode.OK, "删除成功");
|
||||
}
|
||||
|
||||
@ApiOperation("批量删除权限")
|
||||
@PostMapping("/batchRemove")
|
||||
public Result batchRemove(String ids) {
|
||||
String id_s = CommonUtil.firstLastComma(ids);
|
||||
String[] strings = id_s.split(",");
|
||||
if (strings.length > 0) {
|
||||
for (String id : strings) {
|
||||
this.permissionService.deleteById(Long.parseLong(id));
|
||||
}
|
||||
}
|
||||
return new Result(true, 0, "删除成功");
|
||||
}
|
||||
|
||||
@ApiOperation("菜单的显示与隐藏")
|
||||
@PostMapping("/upStatus")
|
||||
public Result upStatus(@RequestParam @RequestBody Map<String,Object> params){
|
||||
String status = CommonUtil.map_get_value(params, "status");
|
||||
String id = CommonUtil.map_get_value(params, "id");
|
||||
|
||||
if (status == null || status.equals("")){
|
||||
return Result.failure("stats不能为空");
|
||||
}
|
||||
|
||||
if (id == null || id.equals("")){
|
||||
return Result.failure("id不能为空");
|
||||
}
|
||||
|
||||
if (status.equals("true")){
|
||||
status = "show";
|
||||
}else {
|
||||
status = "hidden";
|
||||
}
|
||||
|
||||
|
||||
Permission.Status st = CommonUtil.getEnum(status,Permission.Status.class);
|
||||
Permission permission = this.permissionService.findById(Long.parseLong(id));
|
||||
|
||||
if (permission != null){
|
||||
permission.setStatus(st);
|
||||
this.permissionService.update(permission);
|
||||
}
|
||||
|
||||
return Result.success("操作成功");
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,163 @@
|
|||
package com.zhangmeng.fiction.server.controller;
|
||||
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import com.zhangmeng.fiction.server.common.controller.BaseController;
|
||||
import com.zhangmeng.fiction.server.common.utils.CommonUtil;
|
||||
import com.zhangmeng.fiction.server.entity.Permission;
|
||||
import com.zhangmeng.fiction.server.entity.Role;
|
||||
import com.zhangmeng.fiction.server.query.QueryParams;
|
||||
import com.zhangmeng.fiction.server.res.Result;
|
||||
import com.zhangmeng.fiction.server.res.ResultTree;
|
||||
import com.zhangmeng.fiction.server.res.StatusCode;
|
||||
import com.zhangmeng.fiction.server.service.PermissionService;
|
||||
import com.zhangmeng.fiction.server.service.RolePermissionService;
|
||||
import com.zhangmeng.fiction.server.service.RoleService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.ui.Model;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
import springfox.documentation.annotations.ApiIgnore;
|
||||
import tk.mybatis.mapper.entity.Condition;
|
||||
import tk.mybatis.mapper.entity.Example;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.Map;
|
||||
|
||||
@Api(tags = "角色管理")
|
||||
@RestController
|
||||
@RequestMapping("/role")
|
||||
public class RoleController extends BaseController {
|
||||
|
||||
@Autowired
|
||||
private RoleService roleService;
|
||||
|
||||
@ApiIgnore
|
||||
@GetMapping("/index")
|
||||
public ModelAndView index() {
|
||||
return this.jumpPage("admin/role/list");
|
||||
}
|
||||
|
||||
@ApiIgnore
|
||||
@GetMapping("/add")
|
||||
public ModelAndView add(Model model) {
|
||||
model.addAttribute("roleStatusList", Role.Status.enumListMap());
|
||||
return this.jumpPage("admin/role/add");
|
||||
}
|
||||
|
||||
@ApiIgnore
|
||||
@GetMapping("/edit")
|
||||
public ModelAndView edit(Model model, String roleId) {
|
||||
if (roleId != null && !roleId.equals("")) {
|
||||
Role role = this.roleService.findById(Long.parseLong(roleId));
|
||||
model.addAttribute("roleTypeList", Role.Type.enumListMap());
|
||||
model.addAttribute("role", role);
|
||||
}
|
||||
return this.jumpPage("admin/role/edit");
|
||||
}
|
||||
|
||||
/**
|
||||
* 授权
|
||||
*
|
||||
* @param model
|
||||
* @param roleId
|
||||
* @return
|
||||
*/
|
||||
@ApiIgnore
|
||||
@GetMapping("/authorize")
|
||||
public ModelAndView authorize(Model model, String roleId) {
|
||||
if (roleId != null && !roleId.equals("")) {
|
||||
Role role = this.roleService.findById(Long.parseLong(roleId));
|
||||
model.addAttribute("roleTypeList", Role.Type.enumListMap());
|
||||
model.addAttribute("role", role);
|
||||
}
|
||||
return this.jumpPage("admin/role/authorize");
|
||||
}
|
||||
|
||||
@ApiOperation("角色保存")
|
||||
@PostMapping("/save")
|
||||
public Result save(@RequestParam @RequestBody Map<String, Object> map) {
|
||||
String roleId = CommonUtil.map_get_value(map, "roleId");
|
||||
boolean flag = false;
|
||||
Role role = null;
|
||||
if (roleId == null || roleId.equals("")) {
|
||||
flag = true;
|
||||
role = new Role();
|
||||
role.setAddTime(new Date());
|
||||
role.setUpdateTime(new Date());
|
||||
role.setDeleteStatus(false);
|
||||
} else {
|
||||
role = this.roleService.findById(Long.parseLong(roleId));
|
||||
}
|
||||
|
||||
String type = CommonUtil.map_get_value(map, "type");
|
||||
if (CommonUtil.isNotNull(type)) {
|
||||
role.setType(CommonUtil.getEnum(type, Role.Type.class));
|
||||
}
|
||||
String roleName = CommonUtil.map_get_value(map, "roleName");
|
||||
if (CommonUtil.isNotNull(roleName)) {
|
||||
role.setRoleName(roleName);
|
||||
}
|
||||
String status = CommonUtil.map_get_value(map, "status");
|
||||
if (CommonUtil.isNotNull(status)) {
|
||||
role.setStatus(CommonUtil.getEnum(status, Role.Status.class));
|
||||
}
|
||||
|
||||
String description = CommonUtil.map_get_value(map, "description");
|
||||
if (CommonUtil.isNotNull(description)) {
|
||||
role.setDescription(description);
|
||||
}
|
||||
if (flag) {
|
||||
this.roleService.save(role);
|
||||
} else {
|
||||
this.roleService.update(role);
|
||||
}
|
||||
return Result.success("添加成功");
|
||||
}
|
||||
|
||||
@ApiOperation("角色列表")
|
||||
@GetMapping("/list")
|
||||
public Result list(Integer pageNum, Integer pageSize,String roleName,String roleCode) {
|
||||
Condition condition = new Condition(Role.class);
|
||||
Example.Criteria criteria = condition.createCriteria();
|
||||
if (CommonUtil.isNotNull(roleName)){
|
||||
criteria.andEqualTo("roleName",roleName);
|
||||
}
|
||||
|
||||
if (CommonUtil.isNotNull(roleCode)){
|
||||
criteria.andEqualTo("roleCode",roleCode);
|
||||
}
|
||||
PageInfo<Role> pageInfo = this.roleService.findByCondition(new QueryParams(pageNum, pageSize, condition),true);
|
||||
return new Result(true, StatusCode.OK, "重新成功", pageInfo.getTotal(),pageInfo.getList());
|
||||
}
|
||||
|
||||
/**
|
||||
* Describe: 获取角色权限
|
||||
* Param RoleId
|
||||
* Return ResuTree
|
||||
*/
|
||||
@GetMapping("/getRolePower")
|
||||
@ApiOperation(value = "获取角色权限数据")
|
||||
public ResultTree getRolePower(String roleId) {
|
||||
return dataTree(this.roleService.getRolePermission(roleId));
|
||||
}
|
||||
|
||||
@ApiOperation("角色删除")
|
||||
@PostMapping("/delete")
|
||||
public Result delete(String roleId) {
|
||||
if (CommonUtil.isNotNull(roleId) && CommonUtil.isNumeric_ASCII(roleId)) {
|
||||
this.roleService.deleteById(Long.parseLong(roleId));
|
||||
}
|
||||
return Result.success("删除成功");
|
||||
}
|
||||
|
||||
@ApiOperation("批量删除")
|
||||
@PostMapping("/batchRemove")
|
||||
public Result batchRemove(String ids){
|
||||
if (CommonUtil.isNotNull(ids)){
|
||||
this.roleService.deleteByIds(CommonUtil.firstLastComma(ids));
|
||||
}
|
||||
return Result.success("批量删除成功");
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,265 @@
|
|||
package com.zhangmeng.fiction.server.controller;
|
||||
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import com.zhangmeng.fiction.server.common.controller.BaseController;
|
||||
import com.zhangmeng.fiction.server.common.utils.CommonUtil;
|
||||
import com.zhangmeng.fiction.server.common.utils.UserUtil;
|
||||
import com.zhangmeng.fiction.server.dto.LoginUser;
|
||||
import com.zhangmeng.fiction.server.dto.Token;
|
||||
import com.zhangmeng.fiction.server.entity.Permission;
|
||||
import com.zhangmeng.fiction.server.entity.Role;
|
||||
import com.zhangmeng.fiction.server.entity.User;
|
||||
import com.zhangmeng.fiction.server.entity.VerificationCode;
|
||||
import com.zhangmeng.fiction.server.query.QueryParams;
|
||||
import com.zhangmeng.fiction.server.res.Result;
|
||||
import com.zhangmeng.fiction.server.res.ResultTree;
|
||||
import com.zhangmeng.fiction.server.res.StatusCode;
|
||||
import com.zhangmeng.fiction.server.service.*;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.ui.Model;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
import springfox.documentation.annotations.ApiIgnore;
|
||||
import tk.mybatis.mapper.entity.Condition;
|
||||
import tk.mybatis.mapper.entity.Example;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author zhangmeng
|
||||
* @version 1.0
|
||||
* @date 2021年7月10日09:15:06
|
||||
*/
|
||||
@Slf4j
|
||||
@Api(tags = "用户管理")
|
||||
@RestController
|
||||
@RequestMapping("/user")
|
||||
public class UserController extends BaseController {
|
||||
|
||||
@Autowired
|
||||
private UserService userService;
|
||||
|
||||
@Autowired
|
||||
private VerificationCodeService verificationCodeService;
|
||||
|
||||
@Autowired
|
||||
private PermissionService permissionService;
|
||||
|
||||
@Autowired
|
||||
private TokenService tokenService;
|
||||
|
||||
@ApiIgnore
|
||||
@GetMapping("/index")
|
||||
public ModelAndView index() {
|
||||
return this.jumpPage("admin/user/list");
|
||||
}
|
||||
|
||||
@ApiIgnore
|
||||
@GetMapping("/add")
|
||||
public ModelAndView add() {
|
||||
return this.jumpPage("admin/user/add");
|
||||
}
|
||||
|
||||
@ApiIgnore
|
||||
@GetMapping("/edit")
|
||||
public ModelAndView edit(Model model, String userId) {
|
||||
if (userId != null && !userId.equals("")) {
|
||||
User user = this.userService.findById(Long.parseLong(userId));
|
||||
model.addAttribute("user", user);
|
||||
}
|
||||
return this.jumpPage("admin/user/edit");
|
||||
}
|
||||
|
||||
@ApiIgnore
|
||||
@GetMapping("/person")
|
||||
public ModelAndView person(Model model) {
|
||||
User user = this.userService.findById(UserUtil.getLoginUser().getId());
|
||||
model.addAttribute("loginUser", user);
|
||||
//性别
|
||||
model.addAttribute("gender_list", User.Gender.enumListMap());
|
||||
//状态
|
||||
model.addAttribute("status_list", User.Status.enumListMap());
|
||||
//角色类型
|
||||
model.addAttribute("type_list", Role.Type.enumListMap());
|
||||
return this.jumpPage("admin/user/person");
|
||||
}
|
||||
|
||||
@ApiOperation("用户保存")
|
||||
@PostMapping("/save")
|
||||
public Result save(@RequestParam @RequestBody Map<String, Object> parms) {
|
||||
return this.userService.save_user(parms);
|
||||
}
|
||||
|
||||
@ApiOperation("用户删除")
|
||||
@PostMapping("/delete")
|
||||
public Result delete(String userId) {
|
||||
if (userId != null && !userId.equals("")) {
|
||||
this.userService.deleteById(Long.parseLong(userId));
|
||||
}
|
||||
return new Result(true, StatusCode.OK, "删除成功");
|
||||
}
|
||||
|
||||
@ApiOperation("用户列表")
|
||||
@GetMapping("/list")
|
||||
public Result list(Integer pageNum, Integer pageSize, String username, String telephone) {
|
||||
Condition condition = new Condition(User.class);
|
||||
Example.Criteria criteria = condition.createCriteria();
|
||||
if (username != null && !username.equals("")) {
|
||||
criteria.andLike("username", "%" + username + "%");
|
||||
}
|
||||
if (telephone != null && !telephone.equals("")) {
|
||||
criteria.andLike("telephone", "%" + telephone + "%");
|
||||
}
|
||||
PageInfo<User> pageInfo = this.userService.findByCondition(new QueryParams(pageNum, pageSize, condition, "addTime desc"), true);
|
||||
return new Result(true, StatusCode.OK, "查询成功", pageInfo.getTotal(), pageInfo.getList());
|
||||
}
|
||||
|
||||
@ApiOperation("用户批量删除")
|
||||
@PostMapping("/batchRemove")
|
||||
public Result batchRemove(String ids) {
|
||||
if (CommonUtil.isNotNull(ids)) {
|
||||
this.userService.deleteByIds(CommonUtil.firstLastComma(ids));
|
||||
}
|
||||
return Result.success("批量删除成功");
|
||||
}
|
||||
|
||||
@ApiIgnore
|
||||
@GetMapping("/reg")
|
||||
public ModelAndView reg() {
|
||||
return this.jumpPage("admin/user/reg");
|
||||
}
|
||||
|
||||
@ApiOperation("注册保存")
|
||||
@PostMapping("/reg_save")
|
||||
public Result reg_save(@RequestParam @RequestBody Map<String, Object> parms) {
|
||||
return this.userService.reg_save(parms);
|
||||
}
|
||||
|
||||
@ApiOperation("获取当前用户")
|
||||
@GetMapping("/current")
|
||||
public Result current() {
|
||||
return new Result(true, StatusCode.OK, "查询成功", UserUtil.getLoginUser());
|
||||
}
|
||||
|
||||
@ApiOperation("个人资料修改")
|
||||
@PostMapping("/personUpdate")
|
||||
public Result personUpdate(@RequestParam @RequestBody Map<String, Object> map) {
|
||||
User user = null;
|
||||
boolean flag = false;
|
||||
String userId = CommonUtil.map_get_value(map, "userId");
|
||||
if (userId != null && !userId.equals("")) {
|
||||
user = this.userService.findById(Long.parseLong(userId));
|
||||
flag = true;
|
||||
} else {
|
||||
user = new User();
|
||||
}
|
||||
String username = CommonUtil.map_get_value(map, "username");
|
||||
if (CommonUtil.isNotNull(username)) {
|
||||
user.setUsername(username);
|
||||
}
|
||||
|
||||
String sex = CommonUtil.map_get_value(map, "sex");
|
||||
if (CommonUtil.isNotNull(sex)) {
|
||||
user.setGender(CommonUtil.getEnum(sex, User.Gender.class));
|
||||
}
|
||||
String status = CommonUtil.map_get_value(map, "status");
|
||||
if (CommonUtil.isNotNull(status)) {
|
||||
user.setStatus(CommonUtil.getEnum(status, User.Status.class));
|
||||
}
|
||||
|
||||
String role_type = CommonUtil.map_get_value(map, "role_name");
|
||||
if (CommonUtil.isNotNull(role_type)) {
|
||||
user.setRoleType(CommonUtil.getEnum(role_type, Role.Type.class));
|
||||
}
|
||||
|
||||
String email = CommonUtil.map_get_value(map, "email");
|
||||
if (CommonUtil.isNotNull(email)) {
|
||||
user.setEmail(email);
|
||||
}
|
||||
String telephone = CommonUtil.map_get_value(map, "telephone");
|
||||
if (CommonUtil.isNotNull(telephone)) {
|
||||
user.setTelephone(telephone);
|
||||
}
|
||||
|
||||
String profession = CommonUtil.map_get_value(map, "profession");
|
||||
if (CommonUtil.isNotNull(profession)) {
|
||||
user.setProfession(profession);
|
||||
}
|
||||
|
||||
String sign = CommonUtil.map_get_value(map, "sign");
|
||||
if (CommonUtil.isNotNull(sign)) {
|
||||
user.setSign(sign);
|
||||
}
|
||||
|
||||
String file_id = CommonUtil.map_get_value(map, "file_id");
|
||||
if (CommonUtil.isNotNull(file_id)) {
|
||||
user.setPhoto_id(Long.parseLong(file_id));
|
||||
}
|
||||
String upload_image = CommonUtil.map_get_value(map, "upload_image");
|
||||
if (CommonUtil.isNotNull(upload_image)) {
|
||||
user.setAvatar(upload_image);
|
||||
}
|
||||
|
||||
String now_pos = CommonUtil.map_get_value(map, "now_pos");
|
||||
if (CommonUtil.isNotNull(now_pos)) {
|
||||
user.setNow_pos(now_pos);
|
||||
}
|
||||
|
||||
if (flag) {
|
||||
this.userService.update(user);
|
||||
} else {
|
||||
this.userService.save(user);
|
||||
}
|
||||
return Result.success("修改成功");
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/loginVerification")
|
||||
public ResponseEntity<Object> loginVerification(@RequestBody Map<String, Object> params) {
|
||||
//判断验证码是否正确
|
||||
String telephone = CommonUtil.map_get_value(params, "phone");
|
||||
String code = CommonUtil.map_get_value(params, "verificationCode");
|
||||
boolean flag = false;
|
||||
if (CommonUtil.isNotNull(code) && CommonUtil.isNotNull(telephone)) {
|
||||
Condition condition = new Condition(VerificationCode.class);
|
||||
Example.Criteria criteria = condition.createCriteria();
|
||||
criteria.andEqualTo("telephone", telephone);
|
||||
criteria.andEqualTo("code", code);
|
||||
List<VerificationCode> codeList = this.verificationCodeService.findByCondition(condition);
|
||||
if (codeList.size() > 0) {
|
||||
flag = true;
|
||||
}
|
||||
}
|
||||
Token token = null;
|
||||
boolean istrue = false;
|
||||
if (flag) {
|
||||
//根据手机号查询登录对象
|
||||
Condition condition = new Condition(User.class);
|
||||
Example.Criteria criteria = condition.createCriteria();
|
||||
criteria.andEqualTo("telephone", telephone);
|
||||
List<User> users = this.userService.findByCondition(condition);
|
||||
if (users.size() > 0) {
|
||||
User user = users.get(0);
|
||||
List<Permission> permissions = this.permissionService.findByUserId(user.getId());
|
||||
LoginUser loginUser = new LoginUser();
|
||||
BeanUtils.copyProperties(user, loginUser);
|
||||
loginUser.setPermissions(permissions);
|
||||
token = this.tokenService.saveToken(loginUser);
|
||||
istrue = true;
|
||||
}
|
||||
}
|
||||
if (istrue){
|
||||
Map<String,Object> result = new HashMap<>();
|
||||
result.put("isNew", false); result.put("token", token.getToken());
|
||||
return ResponseEntity.ok(result);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,335 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>首页</title>
|
||||
<meta name="renderer" content="webkit">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<link rel="stylesheet" href="${springMacroRequestContext.contextPath}/system/component/pear/css/pear.css" />
|
||||
<link rel="stylesheet" href="${springMacroRequestContext.contextPath}/system/admin/css/other/console1.css" />
|
||||
<!-- 主 题 更 换 -->
|
||||
<style id="pearadmin-bg-color"></style>
|
||||
</head>
|
||||
<body class="pear-container">
|
||||
<div>
|
||||
<div class="layui-row layui-col-space10">
|
||||
<div class="layui-col-xs6 layui-col-md3">
|
||||
<div class="layui-card top-panel">
|
||||
<div class="layui-card-header">用户人数</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-row layui-col-space5">
|
||||
<div class="layui-col-xs8 layui-col-md8 top-panel-number" style="color: #28333E;" id="value1">
|
||||
0
|
||||
</div>
|
||||
<div class="layui-col-xs4 layui-col-md4 top-panel-tips">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="icon" viewBox="0 0 1024 1024" width="200" height="200" t="1591462258798"
|
||||
p-id="942" version="1.1">
|
||||
<path fill="#fcc66f" d="M 262.7 835 c -15.3 0 -28.1 -11.4 -29.8 -26.6 L 174.1 291 c -0.6 -5.1 1 -10.2 4.5 -14 s 8.3 -6 13.4 -6 h 640 c 5.1 0 10 2.2 13.4 6 s 5 8.9 4.5 14 l -58.8 517.4 c -1.7 15.2 -14.5 26.6 -29.8 26.6 H 262.7 Z"
|
||||
p-id="943" />
|
||||
<path fill="#ffd79c" d="M 802 289 l -58.8 517.4 c -0.7 6.1 -5.8 10.6 -11.9 10.6 h 30 c 6.1 0 11.2 -4.6 11.9 -10.6 L 832 289 h -30 Z"
|
||||
p-id="944" />
|
||||
<path fill="#f56e73" d="M 164 307 c -16.5 0 -30 -13.5 -30 -30 v -58 c 0 -16.5 13.5 -30 30 -30 h 696 c 16.5 0 30 13.5 30 30 v 58 c 0 16.5 -13.5 30 -30 30 H 164 Z"
|
||||
p-id="945" />
|
||||
<path fill="#ffa1a8" d="M 860 207 h -30 c 6.6 0 12 5.4 12 12 v 58 c 0 6.6 -5.4 12 -12 12 h 30 c 6.6 0 12 -5.4 12 -12 v -58 c 0 -6.6 -5.4 -12 -12 -12 Z"
|
||||
p-id="946" />
|
||||
<path fill="#65c8ff" d="M 190.9 651.5 c -31.4 0 -56.9 -25.5 -56.9 -56.9 V 219 c 0 -16.5 13.5 -30 30 -30 h 466.2 c 9.9 0 18 8.1 18 18 v 301.1 c 0 34.7 -28.2 62.9 -62.9 62.9 s -62.9 -28.2 -62.9 -62.9 V 393.5 c 0 -23.2 -18.8 -42 -42 -42 s -42 18.8 -42 42 v 68.1 c 0 29.4 -23.9 53.4 -53.4 53.4 s -53.4 -23.9 -53.4 -53.4 v -68.1 c 0 -23.2 -18.8 -42 -42 -42 s -42 18.8 -42 42 v 201.1 c 0.1 31.4 -25.4 56.9 -56.7 56.9 Z"
|
||||
p-id="947" />
|
||||
<path fill="#b3eaff" d="M 277.8 321.5 c -33.1 0 -60 26.9 -60 60 v 201.1 c 0 21.5 -17.4 38.9 -38.9 38.9 c -7.7 0 -14.8 -2.2 -20.8 -6.1 c 6.9 10.9 19 18.1 32.8 18.1 c 21.5 0 38.9 -17.4 38.9 -38.9 V 393.5 c 0 -33.1 26.9 -60 60 -60 c 13.5 0 25.9 4.5 36 12 c -11 -14.5 -28.4 -24 -48 -24 Z M 618.3 207 v 289.1 c 0 24.8 -20.1 44.9 -44.9 44.9 c -9.3 0 -18 -2.8 -25.2 -7.7 c 8.1 11.9 21.7 19.7 37.2 19.7 c 24.8 0 44.9 -20.1 44.9 -44.9 V 207 h -12 Z M 468.5 321.5 c -33.1 0 -60 26.9 -60 60 v 68.1 c 0 19.5 -15.8 35.4 -35.4 35.4 c -6.7 0 -12.9 -1.9 -18.3 -5.1 c 6.2 10.2 17.4 17.1 30.3 17.1 c 19.5 0 35.4 -15.8 35.4 -35.4 v -68.1 c 0 -33.1 26.9 -60 60 -60 c 13.5 0 25.9 4.5 36 12 c -11 -14.5 -28.4 -24 -48 -24 Z"
|
||||
p-id="948" />
|
||||
<path fill="#453b56" d="M 698 729.4 m -18 0 a 18 18 0 1 0 36 0 a 18 18 0 1 0 -36 0 Z" p-id="949" />
|
||||
<path fill="#453b56" d="M 860 171 H 632.5 v 0.1 c -0.7 0 -1.5 -0.1 -2.2 -0.1 H 164 c -26.5 0 -48 21.5 -48 48 v 375.6 c 0 41.3 33.6 74.9 74.9 74.9 c 2.7 0 5.4 -0.2 8.1 -0.5 l 16 141.4 c 2.8 24.3 23.3 42.6 47.7 42.6 h 498.6 c 24.4 0 44.9 -18.3 47.7 -42.6 l 55.2 -485.6 c 24.5 -2.1 43.8 -22.7 43.8 -47.8 v -58 c 0 -26.5 -21.5 -48 -48 -48 Z M 190.9 633.5 c -21.5 0 -38.9 -17.4 -38.9 -38.9 V 219 c 0 -6.6 5.4 -12 12 -12 h 466.3 v 301.1 c 0 24.8 -20.1 44.9 -44.9 44.9 c -24.8 0 -44.9 -20.1 -44.9 -44.9 V 393.5 c 0 -33.1 -26.9 -60 -60 -60 s -60 26.9 -60 60 v 68.1 c 0 19.5 -15.8 35.4 -35.4 35.4 c -19.5 0 -35.4 -15.8 -35.4 -35.4 v -68.1 c 0 -33.1 -26.9 -60 -60 -60 s -60 26.9 -60 60 v 201.1 c 0.1 21.5 -17.4 38.9 -38.8 38.9 Z m 582.3 172.9 c -0.7 6.1 -5.8 10.6 -11.9 10.6 H 262.7 c -6.1 0 -11.2 -4.6 -11.9 -10.6 l -6.7 -59 h 396.6 c 9.9 0 18 -8.1 18 -18 s -8.1 -18 -18 -18 H 240 l -6.3 -55.4 c 19.3 -13.6 32.1 -36 32.1 -61.3 V 393.5 c 0 -13.2 10.8 -24 24 -24 s 24 10.8 24 24 v 68.1 c 0 39.4 32 71.4 71.4 71.4 s 71.4 -32 71.4 -71.4 v -68.1 c 0 -13.2 10.8 -24 24 -24 s 24 10.8 24 24 v 114.6 c 0 44.6 36.3 80.9 80.9 80.9 c 44.6 0 80.9 -36.3 80.9 -80.9 V 325 h 161.7 l -54.9 481.4 Z M 872 277 c 0 6.6 -5.4 12 -12 12 H 666.3 v -82 H 860 c 6.6 0 12 5.4 12 12 v 58 Z"
|
||||
p-id="950" /></svg>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-xs6 layui-col-md3">
|
||||
<div class="layui-card top-panel">
|
||||
<div class="layui-card-header">小说集合数量</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-row layui-col-space5">
|
||||
<div class="layui-col-xs8 layui-col-md8 top-panel-number" style="color: #28333E;" id="value2">
|
||||
0
|
||||
</div>
|
||||
<div class="layui-col-xs4 layui-col-md4 top-panel-tips">
|
||||
<svg t="1591462430908" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"
|
||||
p-id="3170" width="200" height="200">
|
||||
<path d="M532 784.2c0 24.4-19.8 44.3-44.3 44.3s-44.3-19.8-44.3-44.3c0-24.4 44.3-80.3 44.3-80.3s44.3 55.8 44.3 80.3zM766 784.2c0 24.4 19.8 44.3 44.3 44.3 24.4 0 44.3-19.8 44.3-44.3 0-24.4-44.3-80.3-44.3-80.3S766 759.7 766 784.2z"
|
||||
fill="#97DCFF" p-id="3171"></path>
|
||||
<path d="M123.5 471.3c-9.9 0-18-8.1-18-18v-302c0-9.9 8.1-18 18-18h58c9.9 0 18 8.1 18 18v302c0 9.9-8.1 18-18 18h-58z"
|
||||
fill="#FCC66F" p-id="3172"></path>
|
||||
<path d="M181.5 151.3v302h-58v-302h58m0-36h-58c-19.9 0-36 16.1-36 36v302c0 19.9 16.1 36 36 36h58c19.9 0 36-16.1 36-36v-302c0-19.8-16.1-36-36-36z"
|
||||
fill="#453B56" p-id="3173"></path>
|
||||
<path d="M266.4 210.7m-18 0a18 18 0 1 0 36 0 18 18 0 1 0-36 0Z" fill="#453B56" p-id="3174"></path>
|
||||
<path d="M430.8 641.1c-9.9 0-18-8.1-18-18v-21.6c0-130.3 106-236.3 236.3-236.3s236.3 106 236.3 236.3v21.6c0 9.9-8.1 18-18 18H430.8z"
|
||||
fill="#FCC66F" p-id="3175"></path>
|
||||
<path d="M649 383.2c-5 0-10 0.2-15 0.6 113.5 7.7 203.3 102.2 203.3 217.7v21.6h30v-21.6c0-120.6-97.7-218.3-218.3-218.3z"
|
||||
fill="#FFD79C" p-id="3176"></path>
|
||||
<path d="M419.6 694.4c-22.1 0-40.1-18-40.1-40.1s18-40.1 40.1-40.1h458.8c22.1 0 40.1 18 40.1 40.1s-18 40.1-40.1 40.1H419.6z"
|
||||
fill="#F56E73" p-id="3177"></path>
|
||||
<path d="M878.4 632.3h-30c12.2 0 22.1 9.9 22.1 22.1s-9.9 22.1-22.1 22.1h30c12.2 0 22.1-9.9 22.1-22.1s-9.9-22.1-22.1-22.1z"
|
||||
fill="#FFA1A8" p-id="3178"></path>
|
||||
<path d="M693.3 846.4c0 24.4-19.8 44.3-44.3 44.3-24.4 0-44.3-19.8-44.3-44.3s44.3-80.3 44.3-80.3 44.3 55.9 44.3 80.3z"
|
||||
fill="#97DCFF" p-id="3179"></path>
|
||||
<path d="M649 908.7c-34.3 0-62.3-27.9-62.3-62.3 0-28.5 36.9-77.2 48.1-91.4 3.4-4.3 8.6-6.8 14.1-6.8s10.7 2.5 14.1 6.8c11.3 14.2 48.1 62.9 48.1 91.4 0.2 34.3-27.8 62.3-62.1 62.3z m0-112.3c-14.1 20.4-26.3 41.9-26.3 50 0 14.5 11.8 26.3 26.3 26.3s26.3-11.8 26.3-26.3c0-8.1-12.1-29.6-26.3-50z"
|
||||
fill="#453B56" p-id="3180"></path>
|
||||
<path d="M903.3 601.9v-0.5c0-134.1-104.4-244.3-236.3-253.6v-30.7c0-68.7-55.9-124.6-124.6-124.6H326.5c-9.9 0-18 8.1-18 18s8.1 18 18 18h215.9c48.8 0 88.6 39.7 88.6 88.6v30.7c-131.8 9.3-236.3 119.4-236.3 253.6v0.5c-19.6 9.3-33.2 29.3-33.2 52.4 0 32 26 58.1 58.1 58.1H459c-14.8 21-33.5 51.5-33.5 71.8 0 34.3 27.9 62.3 62.3 62.3 34.3 0 62.2-27.9 62.2-62.3 0-20.3-18.6-50.7-33.5-71.8h264.9c-14.8 21-33.5 51.5-33.5 71.8 0 34.3 27.9 62.3 62.3 62.3 34.3 0 62.3-27.9 62.3-62.3 0-20.3-18.6-50.7-33.5-71.8h39.4c32 0 58.1-26 58.1-58.1 0-23.1-13.6-43-33.2-52.4zM487.8 810.4c-14.5 0-26.3-11.8-26.3-26.3 0-8.1 12.1-29.6 26.3-50 14.1 20.4 26.2 41.9 26.2 50 0 14.5-11.8 26.3-26.2 26.3z m322.5 0c-14.5 0-26.3-11.8-26.3-26.3 0-8.1 12.1-29.6 26.3-50 14.1 20.4 26.3 41.9 26.3 50-0.1 14.5-11.9 26.3-26.3 26.3zM649 383.2c118.8 0 215.4 94.9 218.1 213.1H430.9c2.8-118.1 99.3-213.1 218.1-213.1z m251.5 271.1c0 12.2-9.9 22.1-22.1 22.1H419.6c-12.2 0-22.1-9.9-22.1-22.1 0-12.2 9.9-22.1 22.1-22.1h458.8c12.2 0.1 22.1 10 22.1 22.1z"
|
||||
fill="#453B56" p-id="3181"></path>
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-xs6 layui-col-md3">
|
||||
<div class="layui-card top-panel">
|
||||
<div class="layui-card-header">小说数量</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-row layui-col-space5">
|
||||
<div class="layui-col-xs8 layui-col-md8 top-panel-number" style="color: #28333E;" id="value3">
|
||||
0
|
||||
</div>
|
||||
<div class="layui-col-xs4 layui-col-md4 top-panel-tips">
|
||||
<svg t="1591462464512" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"
|
||||
p-id="3311" width="200" height="200">
|
||||
<path d="M750.4 216.5h-130v-15.3c0-32.9-26.8-59.7-59.7-59.7h-97.3c-32.9 0-59.7 26.8-59.7 59.7v15.3h-130c-30.7 0-55.6 25-55.6 55.6v72.4c0 9.9 8.1 18 18 18h31.5v478c0 23.2 18.8 42 42 42h405c23.2 0 42-18.8 42-42v-478H788c9.9 0 18-8.1 18-18v-72.4c0-30.6-25-55.6-55.6-55.6z"
|
||||
fill="#FCC66F" p-id="3312"></path>
|
||||
<path d="M708.5 344.5v496c0 13.3-10.7 24-24 24h30c13.3 0 24-10.7 24-24v-496h-30z" fill="#FFD79C" p-id="3313"></path>
|
||||
<path d="M309.5 882.5c-23.2 0-42-18.8-42-42V596c0-9.9 8.1-18 18-18h36.8c30.2 0 54.8 24.6 54.8 54.8v231.7c0 9.9-8.1 18-18 18h-49.6zM664.9 882.5c-9.9 0-18-8.1-18-18V632.8c0-30.2 24.6-54.8 54.8-54.8h36.8c9.9 0 18 8.1 18 18v244.5c0 23.2-18.8 42-42 42h-49.6z"
|
||||
fill="#F56E73" p-id="3314"></path>
|
||||
<path d="M708.5 596v244.5c0 13.3-10.7 24-24 24h30c13.3 0 24-10.7 24-24V596h-30z" fill="#FFA1A8" p-id="3315"></path>
|
||||
<path d="M475.2 882.5c-9.9 0-18-8.1-18-18V632.8c0-30.2 24.6-54.8 54.8-54.8 30.2 0 54.8 24.6 54.8 54.8v231.7c0 9.9-8.1 18-18 18h-73.6z"
|
||||
fill="#F56E73" p-id="3316"></path>
|
||||
<path d="M560.7 159.5h-18c23 0 41.7 18.7 41.7 41.7V221h18v-19.8c-0.1-23-18.7-41.7-41.7-41.7zM750.4 234.5h-30c20.8 0 37.6 16.8 37.6 37.6v72.4h30v-72.4c0-20.8-16.8-37.6-37.6-37.6z"
|
||||
fill="#FFD79C" p-id="3317"></path>
|
||||
<path d="M750.4 198.5H638.2c-1.4-41.6-35.6-75-77.5-75h-97.3c-41.9 0-76.1 33.4-77.5 75H273.6c-40.6 0-73.6 33-73.6 73.6v72.4c0 19.9 16.1 36 36 36h13.5v460c0 33.1 26.9 60 60 60H714.7c33.1 0 60-26.9 60-60v-460H788c19.9 0 36-16.1 36-36v-72.4c0-40.6-33-73.6-73.6-73.6z m-287.1-39h97.3c22.1 0 40.2 17.2 41.5 39H421.8c1.4-21.8 19.4-39 41.5-39z m-104.2 705h-49.6c-13.3 0-24-10.7-24-24V596h36.8c20.3 0 36.8 16.5 36.8 36.8v231.7z m189.7 0h-73.6V632.8c0-20.3 16.5-36.8 36.8-36.8 20.3 0 36.8 16.5 36.8 36.8v231.7z m189.7-24c0 13.3-10.7 24-24 24h-49.6V632.8c0-20.3 16.5-36.8 36.8-36.8h36.8v244.5z m0-280.5h-36.8c-40.1 0-72.8 32.6-72.8 72.8v231.7h-44.2V632.8c0-40.1-32.6-72.8-72.8-72.8-40.1 0-72.8 32.6-72.8 72.8v231.7h-44.2V632.8c0-40.1-32.6-72.8-72.8-72.8h-36.8v-74.5h279c9.9 0 18-8.1 18-18s-8.1-18-18-18h-279v-69h453V560zM788 344.5H236v-72.4c0-20.8 16.8-37.6 37.6-37.6h476.8c20.8 0 37.6 16.8 37.6 37.6v72.4z"
|
||||
fill="#453B56" p-id="3318"></path>
|
||||
<path d="M621.8 467.5m-18 0a18 18 0 1 0 36 0 18 18 0 1 0-36 0Z" fill="#453B56" p-id="3319"></path>
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-xs6 layui-col-md3">
|
||||
<div class="layui-card top-panel">
|
||||
<div class="layui-card-header">消息数量</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-row layui-col-space5">
|
||||
<div class="layui-col-xs8 layui-col-md8 top-panel-number" style="color: #28333E;" id="value4">
|
||||
0
|
||||
</div>
|
||||
<div class="layui-col-xs4 layui-col-md4 top-panel-tips">
|
||||
<svg t="1591462491887" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"
|
||||
p-id="3449" width="200" height="200">
|
||||
<path d="M363.2 807c-9.9 0-18-8.1-18-18v-75.5c0-9.9 8.1-18 18-18h108.5c9.9 0 18 8.1 18 18V789c0 9.9-8.1 18-18 18H363.2z"
|
||||
fill="#F56E73" p-id="3450"></path>
|
||||
<path d="M441.7 713.5h30V789h-30z" fill="#FFA1A8" p-id="3451"></path>
|
||||
<path d="M259.6 398c-9.9 0-18-8.1-18-18V178.6c0-23.8 19.3-43.1 43.1-43.1s43.1 19.3 43.1 43.1V380c0 9.9-8.1 18-18 18h-50.2zM525.1 398c-9.9 0-18-8.1-18-18V178.6c0-23.8 19.3-43.1 43.1-43.1s43.1 19.3 43.1 43.1V380c0 9.9-8.1 18-18 18h-50.2z"
|
||||
fill="#65C8FF" p-id="3452"></path>
|
||||
<path d="M550.2 153.5c-3.2 0-6.2 0.7-9 1.7 9.4 3.6 16.1 12.7 16.1 23.4V380h18V178.6c0.1-13.9-11.2-25.1-25.1-25.1z"
|
||||
fill="#97DCFF" p-id="3453"></path>
|
||||
<path d="M686 330.5H149c-9.9 0-18 8.1-18 18v63c0 9.9 8.1 18 18 18h33.2l45 225c8.7 43.4 47.1 75 91.4 75h197.6c44.3 0 82.7-31.5 91.4-75l45-225H686c9.9 0 18-8.1 18-18v-63c0-9.9-8.1-18-18-18z"
|
||||
fill="#FCC66F" p-id="3454"></path>
|
||||
<path d="M608 411.5L560.1 651c-7 35.2-37.9 60.5-73.8 60.5h30c35.9 0 66.7-25.3 73.8-60.5L638 411.5h-30zM656 348.5h30v63h-30z"
|
||||
fill="#FFD79C" p-id="3455"></path>
|
||||
<path d="M474.2 543.5m-18 0a18 18 0 1 0 36 0 18 18 0 1 0-36 0Z" fill="#453B56" p-id="3456"></path>
|
||||
<path d="M416.9 525.5h-125c-9.9 0-18 8.1-18 18s8.1 18 18 18h125c9.9 0 18-8.1 18-18s-8.1-18-18-18zM893 543.5h-33.4c-65.2 0-118.2 53-118.2 118.2v19.6c0 9.9 8.1 18 18 18s18-8.1 18-18v-19.6c0-45.3 36.9-82.2 82.2-82.2H893c9.9 0 18-8.1 18-18s-8-18-18-18zM772.2 744.2c7-7 7-18.4 0-25.5-7-7-18.4-7-25.5 0s-7 18.4 0 25.5 18.4 7.1 25.5 0z"
|
||||
fill="#453B56" p-id="3457"></path>
|
||||
<path d="M759.5 761.6c-9.9 0-18 8.1-18 18v11.6c0 43.7-35.6 79.3-79.3 79.3H487.3c-26.4 0-48.3-19.9-51.4-45.5h35.8c19.9 0 36-16.1 36-36v-41.5h8.6c52.8 0 98.7-37.6 109.1-89.4l42.1-210.6H686c19.9 0 36-16.1 36-36v-63c0-19.9-16.1-36-36-36h-74.6V178.6c0-33.7-27.4-61.1-61.1-61.1s-61.1 27.4-61.1 61.1v133.9H345.9V178.6c0-33.7-27.4-61.1-61.1-61.1s-61.1 27.4-61.1 61.1v133.9H149c-19.9 0-36 16.1-36 36v63c0 19.9 16.1 36 36 36h18.5l42.1 210.6c10.4 51.8 56.2 89.4 109.1 89.4h8.6V789c0 19.9 16.1 36 36 36h36.6c3.3 45.5 41.2 81.5 87.5 81.5h174.8c63.6 0 115.3-51.7 115.3-115.3v-11.6c0-10-8.1-18-18-18z m-234.4-583c0-13.9 11.2-25.1 25.1-25.1s25.1 11.2 25.1 25.1v133.9H525V178.6z m-265.5 0c0-13.9 11.2-25.1 25.1-25.1s25.1 11.2 25.1 25.1v133.9h-50.3V178.6zM149 411.5v-63h537v63H149z m169.7 300c-35.9 0-66.7-25.3-73.8-60.5l-40.7-203.5h426.6L590.1 651c-7 35.2-37.9 60.5-73.8 60.5H318.7z m44.5 77.5v-41.5h108.5V789H363.2z"
|
||||
fill="#453B56" p-id="3458"></path>
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-row layui-col-space10">
|
||||
<div class="layui-col-md9">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-tab custom-tab layui-tab-brief" lay-filter="docDemoTabBrief">
|
||||
<div id="echarts-records" style="background-color:#ffffff;min-height:400px;padding: 10px"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">登录日志</div>
|
||||
<div class="layui-card-body">
|
||||
<dl class="layuiadmin-card-status">
|
||||
|
||||
<#if sysLogs ??>
|
||||
<#list sysLogs as syslog>
|
||||
<dd>
|
||||
<div class="layui-status-img"><a href="javascript:;">
|
||||
<img style="width: 32px;height: 32px;border-radius: 50px;" src="${syslog.avatar!}"></a></div>
|
||||
<div>
|
||||
<p> <a class="pear-text" lay-href="https://gitee.com/Jmysy/Pear-Admin-Layui">${syslog.addTime?string('yyyy-MM-dd hh:mm')}</a> ${syslog.description!}</p>
|
||||
<span>${syslog.date_difference!}</span>
|
||||
</div>
|
||||
</dd>
|
||||
<#else >
|
||||
暂无记录
|
||||
</#list>
|
||||
</#if>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-md3">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">最近小说</div>
|
||||
<div class="layui-card-body">
|
||||
<ul class="list">
|
||||
<#if articleList ??>
|
||||
<#list articleList as article>
|
||||
<li class="list-item"><span class="title">${article.bookName!}</span><span class="footer">${article.addTime?string('yyyy-MM-dd hh:mm')}</span></li>
|
||||
</#list>
|
||||
<#else >
|
||||
暂无文章
|
||||
</#if>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--</div>-->
|
||||
<script src="${springMacroRequestContext.contextPath}/system/component/layui/layui.js"></script>
|
||||
<script src="${springMacroRequestContext.contextPath}/system/component/pear/pear.js"></script>
|
||||
<script>
|
||||
layui.use(['layer', 'echarts', 'element', 'count'], function() {
|
||||
var $ = layui.jquery,
|
||||
layer = layui.layer,
|
||||
element = layui.element,
|
||||
count = layui.count,
|
||||
echarts = layui.echarts;
|
||||
|
||||
var value1 = replace_str(${user_count!});
|
||||
var value2 = replace_str('${fiction_collection!}');
|
||||
var value3 = replace_str(${fiction_count!});
|
||||
var value4 = replace_str(${message_count!});
|
||||
count.up("value1", {
|
||||
time: 4000,
|
||||
num: value1,
|
||||
bit: 0,
|
||||
regulator: 50
|
||||
});
|
||||
|
||||
count.up("value2", {
|
||||
time: 4000,
|
||||
num: value2,
|
||||
bit: 0,
|
||||
regulator: 50
|
||||
});
|
||||
|
||||
count.up("value3", {
|
||||
time: 4000,
|
||||
num: value3,
|
||||
bit: 0,
|
||||
regulator: 50
|
||||
});
|
||||
|
||||
count.up("value4", {
|
||||
time: 4000,
|
||||
bit: 0,
|
||||
num: value4,
|
||||
regulator: 50
|
||||
});
|
||||
|
||||
var echartsRecords = echarts.init(document.getElementById('echarts-records'), 'walden');
|
||||
|
||||
var option = {
|
||||
tooltip: {
|
||||
trigger: 'axis'
|
||||
},
|
||||
xAxis: [{
|
||||
type: 'category',
|
||||
data: ${data_x_y.X_date!},
|
||||
axisLine: {
|
||||
lineStyle: {
|
||||
color: "#999"
|
||||
}
|
||||
}
|
||||
}],
|
||||
yAxis: [{
|
||||
type: 'value',
|
||||
splitNumber: 4,
|
||||
splitLine: {
|
||||
lineStyle: {
|
||||
type: 'dashed',
|
||||
color: '#DDD'
|
||||
}
|
||||
},
|
||||
axisLine: {
|
||||
show: false,
|
||||
lineStyle: {
|
||||
color: "#333"
|
||||
},
|
||||
},
|
||||
nameTextStyle: {
|
||||
color: "#999"
|
||||
},
|
||||
splitArea: {
|
||||
show: false
|
||||
}
|
||||
}],
|
||||
series: [{
|
||||
name: '文章数量',
|
||||
type: 'line',
|
||||
data: ${data_x_y.Y_data!},
|
||||
lineStyle: {
|
||||
normal: {
|
||||
width: 8,
|
||||
color: {
|
||||
type: 'linear',
|
||||
colorStops: [{
|
||||
offset: 0,
|
||||
color: '#A9F387' // 0% 处的颜色
|
||||
}, {
|
||||
offset: 1,
|
||||
color: '#48D8BF' // 100% 处的颜色
|
||||
}],
|
||||
globalCoord: false // 缺省为 false
|
||||
},
|
||||
shadowColor: 'rgba(72,216,191, 0.3)',
|
||||
shadowBlur: 10,
|
||||
shadowOffsetY: 20
|
||||
}
|
||||
},
|
||||
itemStyle: {
|
||||
normal: {
|
||||
color: '#fff',
|
||||
borderWidth: 10,
|
||||
shadowColor: 'rgba(72,216,191, 0.3)',
|
||||
shadowBlur: 100,
|
||||
borderColor: "#A9F387"
|
||||
}
|
||||
},
|
||||
smooth: true
|
||||
}]
|
||||
};
|
||||
echartsRecords.setOption(option);
|
||||
|
||||
window.onresize = function() {
|
||||
echartsRecords.resize();
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
function replace_str(str) {
|
||||
console.log("str=" + str);
|
||||
str = str.toString()
|
||||
str = str.replace(/,/gi, "");
|
||||
console.log(str)
|
||||
return str
|
||||
}
|
||||
|
||||
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,183 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en" xmlns:th="http://www.thymeleaf.org">
|
||||
<head>
|
||||
<title>添加权限</title>
|
||||
<link rel="stylesheet" href="${springMacroRequestContext.contextPath}/system/component/pear/css/pear.css" />
|
||||
</head>
|
||||
<body>
|
||||
<form class="layui-form" action="">
|
||||
<div class="mainBox">
|
||||
<div class="main-container">
|
||||
<div class="main-container">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">父级</label>
|
||||
<div class="layui-input-block">
|
||||
<ul id="selectParent" name="parentId" class="dtree" data-id="-1"></ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">名称</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="title" lay-verify="title" autocomplete="off" placeholder="权限名称"
|
||||
class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item" id="powerCodeItem">
|
||||
<label class="layui-form-label">标识</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" id="code" name="code" autocomplete="off" placeholder="权限标识" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">状态</label>
|
||||
<div class="layui-input-block">
|
||||
<#-- <input type="radio" lay-filter="type" name="type" value="0" title="目录">-->
|
||||
<#-- <input type="radio" lay-filter="type" name="type" value="1" title="菜单" checked>-->
|
||||
<#-- <input type="radio" lay-filter="type" name="type" value="2" title="按钮">-->
|
||||
|
||||
|
||||
<#if permissionTypeList ??>
|
||||
<#list permissionTypeList as permissionType>
|
||||
<#if permissionType.value == 'MENU'>
|
||||
<input type="radio" lay-filter="type" name="type" value="${permissionType.value!}"
|
||||
title="${permissionType.description!}" checked>
|
||||
<#else >
|
||||
<input type="radio" lay-filter="type" name="type" value="${permissionType.value!}"
|
||||
title="${permissionType.description!}">
|
||||
</#if>
|
||||
</#list>
|
||||
</#if>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item" id="powerUrlItem">
|
||||
<label class="layui-form-label">路径</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" id="href" name="href" autocomplete="off" placeholder="菜单路径" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item" id="openTypeItem">
|
||||
<label class="layui-form-label">打开</label>
|
||||
<div class="layui-input-block">
|
||||
<select name="openType" id="openType">
|
||||
<option value=""></option>
|
||||
<option value="_iframe">框架</option>
|
||||
<option value="_blank">签页</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">图标</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" id="icon" name="icon" lay-filter="icon" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">排序</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="sort" lay-verify="title" autocomplete="off" placeholder="排序" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="bottom">
|
||||
<div class="button-container">
|
||||
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit="" lay-filter="power-save">
|
||||
<i class="layui-icon layui-icon-ok"></i>
|
||||
提交
|
||||
</button>
|
||||
<button type="reset" class="pear-btn pear-btn-sm">
|
||||
<i class="layui-icon layui-icon-refresh"></i>
|
||||
重置
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<script src="${springMacroRequestContext.contextPath}/system/component/layui/layui.js"></script>
|
||||
<script src="${springMacroRequestContext.contextPath}/system/component/pear/pear.js"></script>
|
||||
<script>
|
||||
layui.use(['form', 'jquery', 'iconPicker', 'dtree','dictionary'], function () {
|
||||
let form = layui.form;
|
||||
let $ = layui.jquery;
|
||||
let iconPicker = layui.iconPicker;
|
||||
let dtree = layui.dtree;
|
||||
let token = localStorage.getItem("token");
|
||||
dtree.renderSelect({
|
||||
elem: "#selectParent",
|
||||
url: "/permission/selectParent",
|
||||
headers:{
|
||||
token:token
|
||||
},
|
||||
method: 'get',
|
||||
selectInputName: {nodeId: "parentId", context: "title"},
|
||||
skin: "layui",
|
||||
dataFormat: "list",
|
||||
response: {treeId: "id", parentId: "parent_id", title: "title"}, //修改response中返回数据的定义
|
||||
selectInitVal: "0"
|
||||
});
|
||||
|
||||
form.on("radio(type)", function () {
|
||||
if (this.value == 'CATALOG') {
|
||||
$("#powerUrlItem").hide();
|
||||
$("#powerCodeItem").hide();
|
||||
$("#openTypeItem").hide();
|
||||
$("#powerUrl").val("");
|
||||
$("#powerCode").val("");
|
||||
$("#openType").val("");
|
||||
} else if (this.value == 'MENU') {
|
||||
$("#powerUrlItem").show();
|
||||
$("#powerCodeItem").show();
|
||||
$("#openTypeItem").show();
|
||||
} else if (this.value == 'BUTTON') {
|
||||
$("#powerUrlItem").hide();
|
||||
$("#openTypeItem").hide();
|
||||
$("#powerCodeItem").show();
|
||||
$("#powerUrl").val("");
|
||||
$("#openType").val("");
|
||||
}
|
||||
});
|
||||
|
||||
form.on('submit(power-save)', function (data) {
|
||||
data.field.icon = "layui-icon " + data.field.icon;
|
||||
var obj = data.field;
|
||||
obj['token'] = localStorage.getItem("token");
|
||||
$.ajax({
|
||||
url: '/permission/save',
|
||||
data: obj,
|
||||
type: 'post',
|
||||
success: function (result) {
|
||||
if (result.success) {
|
||||
layer.msg(result.msg, {icon: 1, time: 1000}, function () {
|
||||
parent.layer.close(parent.layer.getFrameIndex(window.name));//关闭当前页
|
||||
parent.render();
|
||||
});
|
||||
} else {
|
||||
layer.msg(result.msg, {icon: 2, time: 1000});
|
||||
}
|
||||
}
|
||||
})
|
||||
return false;
|
||||
});
|
||||
|
||||
iconPicker.render({
|
||||
// 选择器,推荐使用input
|
||||
elem: '#icon',
|
||||
// 数据类型:fontClass/unicode,推荐使用fontClass
|
||||
type: 'fontClass',
|
||||
// 是否开启搜索:true/false
|
||||
search: true,
|
||||
// 是否开启分页
|
||||
page: true,
|
||||
// 每页显示数量,默认12
|
||||
limit: 12,
|
||||
// 点击回调
|
||||
click: function (data) {
|
||||
console.log(data);
|
||||
}
|
||||
});
|
||||
})
|
||||
</script>
|
||||
<script>
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,222 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en" xmlns:th="http://www.thymeleaf.org">
|
||||
<head>
|
||||
<title>添加权限</title>
|
||||
<link rel="stylesheet" href="${springMacroRequestContext.contextPath}/system/component/pear/css/pear.css"/>
|
||||
</head>
|
||||
<body>
|
||||
<form class="layui-form" action="">
|
||||
<div class="mainBox">
|
||||
<div class="main-container">
|
||||
<div class="main-container">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">父级</label>
|
||||
<div class="layui-input-block">
|
||||
<ul id="selectParent" name="parentId" class="dtree" data-id="-1"></ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">名称</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="title" lay-verify="title" autocomplete="off" placeholder="权限名称"
|
||||
value="${permission.title!}" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item" id="powerCodeItem">
|
||||
<label class="layui-form-label">标识</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" id="code" name="code" autocomplete="off" placeholder="权限标识"
|
||||
class="layui-input"
|
||||
value="${permission.code!}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">状态</label>
|
||||
<div class="layui-input-block">
|
||||
<#if permissionTypeList ??>
|
||||
<#list permissionTypeList as permissionType>
|
||||
<#if permissionType.value == permission.type>
|
||||
<input type="radio" lay-filter="type" name="type" value="${permissionType.value!}"
|
||||
title="${permissionType.description!}" checked>
|
||||
<#else >
|
||||
<input type="radio" lay-filter="type" name="type" value="${permissionType.value!}"
|
||||
title="${permissionType.description!}">
|
||||
</#if>
|
||||
</#list>
|
||||
</#if>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item" id="powerUrlItem">
|
||||
<label class="layui-form-label">路径</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" id="href" name="href" autocomplete="off" placeholder="菜单路径"
|
||||
value="${permission.href!}" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item" id="openTypeItem">
|
||||
<label class="layui-form-label">打开</label>
|
||||
<div class="layui-input-block">
|
||||
<select name="openType" id="openType">
|
||||
<option value=""></option>
|
||||
<#if permission.openType ??>
|
||||
<#if permission.openType == '_iframe'>
|
||||
<option value="_iframe" selected>框架</option>
|
||||
<option value="_blank" selected>签页</option>
|
||||
<#else >
|
||||
<option value="_iframe">框架</option>
|
||||
<option value="_blank" selected>签页</option>
|
||||
</#if>
|
||||
<#else >
|
||||
<option value="_iframe">框架</option>
|
||||
<option value="_blank">签页</option>
|
||||
</#if>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">图标</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" id="icon" name="icon" lay-filter="icon" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">排序</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="sort" lay-verify="title" autocomplete="off" placeholder="排序"
|
||||
value="${permission.sort!}" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="bottom">
|
||||
<div class="button-container">
|
||||
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit="" lay-filter="power-save">
|
||||
<i class="layui-icon layui-icon-ok"></i>
|
||||
提交
|
||||
</button>
|
||||
<button type="reset" class="pear-btn pear-btn-sm">
|
||||
<i class="layui-icon layui-icon-refresh"></i>
|
||||
重置
|
||||
</button>
|
||||
<input type="hidden" id="id" name="id" value="${permission.id!}">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<script src="${springMacroRequestContext.contextPath}/system/component/layui/layui.js"></script>
|
||||
<script src="${springMacroRequestContext.contextPath}/system/component/pear/pear.js"></script>
|
||||
<script>
|
||||
layui.use(['form', 'jquery', 'iconPicker', 'dtree', 'dictionary','layer'], function () {
|
||||
let form = layui.form;
|
||||
let $ = layui.jquery;
|
||||
let iconPicker = layui.iconPicker;
|
||||
let dtree = layui.dtree;
|
||||
let layer = layui.layer;
|
||||
let token = localStorage.getItem("token");
|
||||
|
||||
let type='${permission.type}';
|
||||
|
||||
layer.ready(function(){
|
||||
|
||||
if (type == 'CATALOG') {
|
||||
$("#powerUrlItem").hide();
|
||||
$("#powerCodeItem").hide();
|
||||
$("#openTypeItem").hide();
|
||||
$("#powerUrl").val("");
|
||||
$("#powerCode").val("");
|
||||
$("#openType").val("");
|
||||
} else if (type == 'MENU') {
|
||||
$("#powerUrlItem").show();
|
||||
$("#powerCodeItem").show();
|
||||
$("#openTypeItem").show();
|
||||
} else if (type == 'BUTTON') {
|
||||
$("#powerUrlItem").hide();
|
||||
$("#openTypeItem").hide();
|
||||
$("#powerCodeItem").show();
|
||||
$("#powerUrl").val("");
|
||||
$("#openType").val("");
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
dtree.renderSelect({
|
||||
elem: "#selectParent",
|
||||
url: "/permission/selectParent",
|
||||
headers: {
|
||||
token: token
|
||||
},
|
||||
method: 'get',
|
||||
selectInputName: {nodeId: "parentId", context: "title"},
|
||||
skin: "layui",
|
||||
dataFormat: "list",
|
||||
response: {treeId: "id", parentId: "parent_id", title: "title"}, //修改response中返回数据的定义
|
||||
selectInitVal: "${permission.parent_id!}"
|
||||
});
|
||||
|
||||
form.on("radio(type)", function () {
|
||||
if (this.value == 'CATALOG') {
|
||||
$("#powerUrlItem").hide();
|
||||
$("#powerCodeItem").hide();
|
||||
$("#openTypeItem").hide();
|
||||
$("#powerUrl").val("");
|
||||
$("#powerCode").val("");
|
||||
$("#openType").val("");
|
||||
} else if (this.value == 'MENU') {
|
||||
$("#powerUrlItem").show();
|
||||
$("#powerCodeItem").show();
|
||||
$("#openTypeItem").show();
|
||||
} else if (this.value == 'BUTTON') {
|
||||
$("#powerUrlItem").hide();
|
||||
$("#openTypeItem").hide();
|
||||
$("#powerCodeItem").show();
|
||||
$("#powerUrl").val("");
|
||||
$("#openType").val("");
|
||||
}
|
||||
});
|
||||
|
||||
form.on('submit(power-save)', function (data) {
|
||||
data.field.icon = "layui-icon " + data.field.icon;
|
||||
var obj = data.field;
|
||||
obj['token'] = localStorage.getItem("token");
|
||||
$.ajax({
|
||||
url: '/permission/save',
|
||||
data: obj,
|
||||
type: 'post',
|
||||
success: function (result) {
|
||||
if (result.flag) {
|
||||
layer.msg(result.message, {icon: 1, time: 1000}, function () {
|
||||
parent.layer.close(parent.layer.getFrameIndex(window.name));//关闭当前页
|
||||
parent.render();
|
||||
});
|
||||
} else {
|
||||
layer.msg(result.message, {icon: 2, time: 1000});
|
||||
}
|
||||
}
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
iconPicker.render({
|
||||
// 选择器,推荐使用input
|
||||
elem: '#icon',
|
||||
// 数据类型:fontClass/unicode,推荐使用fontClass
|
||||
type: 'fontClass',
|
||||
// 是否开启搜索:true/false
|
||||
search: true,
|
||||
// 是否开启分页
|
||||
page: true,
|
||||
// 每页显示数量,默认12
|
||||
limit: 12,
|
||||
// 点击回调
|
||||
click: function (data) {
|
||||
console.log(data);
|
||||
}
|
||||
});
|
||||
|
||||
iconPicker.checkIcon("icon", '${permission.icon!}');
|
||||
})
|
||||
</script>
|
||||
<script>
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,299 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>权限管理</title>
|
||||
<link rel="stylesheet" href="${springMacroRequestContext.contextPath}/system/component/pear/css/pear.css"/>
|
||||
</head>
|
||||
<body class="pear-container">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-body">
|
||||
<form class="layui-form" action="">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-form-item layui-inline">
|
||||
<label class="layui-form-label">权限名称</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="title" placeholder="" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item layui-inline">
|
||||
<button class="pear-btn pear-btn-md pear-btn-primary" lay-submit lay-filter="power-query">
|
||||
<i class="layui-icon layui-icon-search"></i>
|
||||
查询
|
||||
</button>
|
||||
<button type="reset" class="pear-btn pear-btn-md">
|
||||
<i class="layui-icon layui-icon-refresh"></i>
|
||||
重置
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-body">
|
||||
<table id="power-table" lay-filter="power-table"></table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="power-toolbar">
|
||||
<button class="pear-btn pear-btn-primary pear-btn-md" lay-event="add">
|
||||
<i class="layui-icon layui-icon-add-1"></i>
|
||||
新增
|
||||
</button>
|
||||
<button class="pear-btn pear-btn-danger pear-btn-md" lay-event="batchRemove">
|
||||
<i class="layui-icon layui-icon-delete"></i>
|
||||
删除
|
||||
</button>
|
||||
<button class="pear-btn pear-btn-success pear-btn-md" lay-event="expandAll">
|
||||
<i class="layui-icon layui-icon-spread-left"></i>
|
||||
展开
|
||||
</button>
|
||||
<button class="pear-btn pear-btn-success pear-btn-md" lay-event="foldAll">
|
||||
<i class="layui-icon layui-icon-shrink-right"></i>
|
||||
折叠
|
||||
</button>
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="power-bar">
|
||||
<button class="pear-btn pear-btn-primary pear-btn-sm" lay-event="edit"><i class="layui-icon layui-icon-edit"></i>
|
||||
</button>
|
||||
<button class="pear-btn pear-btn-danger pear-btn-sm" lay-event="remove"><i class="layui-icon layui-icon-delete"></i>
|
||||
</button>
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="power-type">
|
||||
{{#if (d.type == 'CATALOG') { }}
|
||||
<span>目录</span>
|
||||
{{# }else if(d.type == 'MENU'){ }}
|
||||
<span>菜单</span>
|
||||
{{# }else if(d.type == 'BUTTON'){ }}
|
||||
<span>按钮</span>
|
||||
{{# } }}
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="power-enable">
|
||||
|
||||
{{#if (d.status == 'show') { }}
|
||||
<input type="checkbox" name="enable" value="{{d.id}}" lay-skin="switch" lay-text="启用|禁用" lay-filter="enable_sw" checked>
|
||||
{{# }else if(d.status == 'hidden'){ }}
|
||||
<input type="checkbox" name="enable" value="{{d.id}}" lay-skin="switch" lay-text="启用|禁用" lay-filter="enable_sw" >
|
||||
{{# } }}
|
||||
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="icon">
|
||||
<i class="layui-icon {{d.icon}}"></i>
|
||||
</script>
|
||||
|
||||
<script src="${springMacroRequestContext.contextPath}/system/component/layui/layui.js"></script>
|
||||
<script src="${springMacroRequestContext.contextPath}/system/component/pear/pear.js"></script>
|
||||
<script>
|
||||
layui.use(['table', 'form', 'jquery', 'treetable'], function () {
|
||||
let table = layui.table;
|
||||
let form = layui.form;
|
||||
let $ = layui.jquery;
|
||||
let treetable = layui.treetable;
|
||||
|
||||
let token = localStorage.getItem("token");
|
||||
|
||||
window.render = function () {
|
||||
treetable.render({
|
||||
treeColIndex: 1,
|
||||
treeSpid: 0,
|
||||
treeIdName: 'id',
|
||||
treePidName: 'parent_id',
|
||||
skin: 'line',
|
||||
method: 'post',
|
||||
treeDefaultClose: true,
|
||||
toolbar: '#power-toolbar',
|
||||
elem: '#power-table',
|
||||
url: '/permission/list?token=' + localStorage.getItem("token"),
|
||||
page: true,
|
||||
cols: [
|
||||
[
|
||||
{type: 'checkbox'},
|
||||
{field: 'title', minWidth: 200, title: '权限名称'},
|
||||
{field: 'icon', title: '图标', templet: '#icon'},
|
||||
{field: 'type', title: '权限类型', templet: '#power-type'},
|
||||
{field: 'status', title: '是否可用', templet: '#power-enable'},
|
||||
{field: 'sort', title: '排序'},
|
||||
{title: '操作', templet: '#power-bar', width: 150, align: 'center'}
|
||||
]
|
||||
]
|
||||
});
|
||||
};
|
||||
|
||||
render();
|
||||
|
||||
|
||||
table.on('tool(power-table)', function (obj) {
|
||||
if (obj.event === 'remove') {
|
||||
window.remove(obj);
|
||||
} else if (obj.event === 'edit') {
|
||||
window.edit(obj);
|
||||
}
|
||||
});
|
||||
|
||||
form.on('switch(enable_sw)', function(obj){
|
||||
|
||||
var status = obj.elem.checked;
|
||||
var value = obj.value;
|
||||
|
||||
$.ajax({
|
||||
url:'/permission/upStatus',
|
||||
type:'post',
|
||||
data:{
|
||||
token:token,
|
||||
status:status,
|
||||
id:value
|
||||
},
|
||||
success:function (res) {
|
||||
layer.msg(res.message, {icon: 1, time: 1000});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
form.on('submit(power-query)', function (data) {
|
||||
var keyword = data.field.title;
|
||||
var $tds = $('#power-table').next('.treeTable').find('.layui-table-body tbody tr td');
|
||||
if (!keyword) {
|
||||
$tds.css('background-color', 'transparent');
|
||||
layer.msg("请输入关键字", {icon: 5});
|
||||
return;
|
||||
}
|
||||
var searchCount = 0;
|
||||
$tds.each(function () {
|
||||
$(this).css('background-color', 'transparent');
|
||||
if ($(this).text().indexOf(keyword) >= 0) {
|
||||
$(this).css('background-color', 'rgba(250,230,160,0.5)');
|
||||
if (searchCount == 0) {
|
||||
$('body,html').stop(true);
|
||||
$('body,html').animate({scrollTop: $(this).offset().top - 150}, 500);
|
||||
}
|
||||
searchCount++;
|
||||
}
|
||||
});
|
||||
if (searchCount == 0) {
|
||||
layer.msg("没有匹配结果", {icon: 5});
|
||||
} else {
|
||||
treetable.expandAll('#power-table');
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
table.on('toolbar(power-table)', function (obj) {
|
||||
if (obj.event === 'add') {
|
||||
window.add();
|
||||
} else if (obj.event === 'refresh') {
|
||||
window.refresh();
|
||||
} else if (obj.event === 'batchRemove') {
|
||||
window.batchRemove(obj);
|
||||
} else if (obj.event === 'expandAll') {
|
||||
treetable.expandAll("#power-table");
|
||||
} else if (obj.event === 'foldAll') {
|
||||
treetable.foldAll("#power-table");
|
||||
}
|
||||
});
|
||||
|
||||
window.add = function () {
|
||||
layer.open({
|
||||
type: 2,
|
||||
title: '新增',
|
||||
shade: 0.1,
|
||||
area: ['900px', '600px'],
|
||||
content: '/permission/add?token=' + token
|
||||
});
|
||||
};
|
||||
|
||||
window.edit = function (obj) {
|
||||
layer.open({
|
||||
type: 2,
|
||||
title: '修改',
|
||||
shade: 0.1,
|
||||
area: ['900px', '600px'],
|
||||
content: '/permission/edit?permissionId=' + obj.data.id + '&token=' + token
|
||||
});
|
||||
};
|
||||
window.remove = function (obj) {
|
||||
layer.confirm('确定要删除该权限', {icon: 3, title: '提示'}, function (index) {
|
||||
layer.close(index);
|
||||
let loading = layer.load();
|
||||
$.ajax({
|
||||
url: "/permission/delete",
|
||||
data: {
|
||||
permissionId: obj.data['id'],
|
||||
token: token
|
||||
},
|
||||
type: 'post',
|
||||
success: function (result) {
|
||||
layer.close(loading);
|
||||
if (result.flag) {
|
||||
layer.msg(result.message, {icon: 1, time: 1000}, function () {
|
||||
obj.del();
|
||||
});
|
||||
} else {
|
||||
layer.msg(result.message, {icon: 2, time: 1000});
|
||||
}
|
||||
}
|
||||
})
|
||||
});
|
||||
};
|
||||
|
||||
window.batchRemove = function (obj) {
|
||||
let data = table.checkStatus(obj.config.id).data;
|
||||
if (data.length === 0) {
|
||||
layer.msg("未选中数据", {
|
||||
icon: 3,
|
||||
time: 1000
|
||||
});
|
||||
return false;
|
||||
}
|
||||
let ids = "";
|
||||
for (let i = 0; i < data.length; i++) {
|
||||
ids += data[i].id + ",";
|
||||
}
|
||||
ids = ids.substr(0, ids.length - 1);
|
||||
layer.confirm('确定要删除这些权限', {
|
||||
icon: 3,
|
||||
title: '提示'
|
||||
}, function (index) {
|
||||
layer.close(index);
|
||||
let loading = layer.load();
|
||||
$.ajax({
|
||||
url: "/permission/batchRemove" ,
|
||||
data: {
|
||||
ids:ids,
|
||||
token:token
|
||||
},
|
||||
type: 'post',
|
||||
success: function (result) {
|
||||
layer.close(loading);
|
||||
if (result.flag) {
|
||||
layer.msg(result.message, {
|
||||
icon: 1,
|
||||
time: 1000
|
||||
}, function () {
|
||||
table.reload('power-table');
|
||||
});
|
||||
} else {
|
||||
layer.msg(result.message, {
|
||||
icon: 2,
|
||||
time: 1000
|
||||
});
|
||||
}
|
||||
}
|
||||
})
|
||||
});
|
||||
};
|
||||
|
||||
window.refresh = function(param) {
|
||||
table.reload('power-table');
|
||||
};
|
||||
|
||||
})
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Loading…
Reference in New Issue