Browse Source

resource 页面接口开发中

reghao 4 years ago
parent
commit
b8d2ff25ba

+ 5 - 0
dmaster/pom.xml

@@ -23,6 +23,11 @@
             <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
+        </dependency>
+
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-security</artifactId>

+ 2 - 2
dmaster/src/main/java/cn/reghao/autodop/dmaster/auth/entity/Menu.java

@@ -23,8 +23,8 @@ import java.util.*;
 public class Menu extends BaseEntity<Integer> {
     // 父 menu id
     private Integer pid;
-    // 具有相同 pid menu 的组内排序
-    private Integer sort;
+    // 在同一个 pid 组内的位置,作为排序使用
+    private Integer pos;
     private String title;
     private String url;
     // Menu 类型

+ 0 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/auth/repository/MenuRepository.java

@@ -10,7 +10,6 @@ import java.util.List;
  * @date 2019-08-29 10:52:14
  */
 public interface MenuRepository extends JpaRepository<Menu, Integer> {
-    Menu findById(int id);
     List<Menu> findByPid(int pid);
     List<Menu> findByStatus(String status);
 }

+ 25 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/common/exception/ControllerExceptionHandler.java

@@ -3,11 +3,18 @@ package cn.reghao.autodop.dmaster.common.exception;
 import cn.reghao.autodop.dmaster.utils.WebBody;
 import cn.reghao.autodop.common.utils.ExceptionUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.BindException;
+import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.ControllerAdvice;
 import org.springframework.web.bind.annotation.ExceptionHandler;
 import org.springframework.web.bind.annotation.ResponseBody;
 
 import javax.servlet.http.HttpServletRequest;
+import java.util.Objects;
 
 /**
  * 全局异常处理类,处理 controller 抛出的异常
@@ -17,7 +24,6 @@ import javax.servlet.http.HttpServletRequest;
  */
 @Slf4j
 @ControllerAdvice
-@ResponseBody
 public class ControllerExceptionHandler {
     /**
      * 处理所有 controller 上抛出的异常
@@ -25,6 +31,7 @@ public class ControllerExceptionHandler {
      * @date 2019-09-28 上午11:01
      */
     @ExceptionHandler({Exception.class})
+    @ResponseBody
     public String error(Exception e, HttpServletRequest request) {
         ExceptionUtil.errorMsg(e);
         String stackTrace = ExceptionUtil.stackTrace(e);
@@ -35,4 +42,21 @@ public class ControllerExceptionHandler {
         }
         return WebBody.error(msg);
     }
+
+    /**
+     * 表单提交验证异常
+     *
+     * @param
+     * @return
+     * @date 2021-05-18 下午3:36
+     */
+    @ExceptionHandler(BindException.class)
+    public ResponseEntity<String> bindException(BindException e) {
+        BindingResult bindingResult = e.getBindingResult();
+        String msg = Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage();
+
+        HttpHeaders headers = new HttpHeaders();
+        headers.setContentType(MediaType.APPLICATION_JSON);
+        return new ResponseEntity<>(WebBody.error1(msg), headers, HttpStatus.OK);
+    }
 }

+ 11 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/utils/WebBody.java

@@ -79,4 +79,15 @@ public class WebBody {
         }
         return null;
     }
+
+    public static String error1(String msg) {
+        WebBody webBody = new WebBody(ERROR.getCode(), msg);
+        webBody.setTimestamp(DateTimeConverter.now());
+        try {
+            return objectMapper.writeValueAsString(webBody);
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
 }

+ 2 - 2
dmaster/src/main/java/cn/reghao/autodop/dmaster/view/controller/HomePageController.java

@@ -48,9 +48,9 @@ public class HomePageController {
         keyMenu.forEach((id, menu) -> {
             Menu parentMenu = keyMenu.get(menu.getPid());
             if (parentMenu != null) {
-                parentMenu.getChildren().put(menu.getSort(), menu);
+                parentMenu.getChildren().put(menu.getPos(), menu);
             } else {
-                treeMenu.put(menu.getSort(), menu);
+                treeMenu.put(menu.getPos(), menu);
             }
         });
 

+ 77 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/view/controller/ResourceController.java

@@ -0,0 +1,77 @@
+package cn.reghao.autodop.dmaster.view.controller;
+
+import cn.reghao.autodop.dmaster.auth.entity.DataStatus;
+import cn.reghao.autodop.dmaster.auth.entity.Menu;
+import cn.reghao.autodop.dmaster.utils.WebBody;
+import cn.reghao.autodop.dmaster.view.service.ResourceService;
+import cn.reghao.autodop.dmaster.view.validator.MenuValidator;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.http.MediaType;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author reghao
+ * @date 2021-04-04 21:24:18
+ */
+@Api(tags = "资源接口")
+@RequestMapping("/system/menu")
+@RestController
+public class ResourceController {
+    private ResourceService resourceService;
+
+    public ResourceController(ResourceService resourceService) {
+        this.resourceService = resourceService;
+    }
+
+    @ApiOperation(value = "添加/修改资源")
+    @PostMapping(value = "/save", produces = MediaType.APPLICATION_JSON_VALUE)
+    public String addMenu(@Validated MenuValidator menuValidator, Menu menu) {
+        Integer id = menu.getId();
+        if (id == null) {
+            resourceService.addResource(menu);
+        } else {
+            resourceService.updateResource(menu);
+        }
+        return WebBody.success("ok");
+    }
+
+    @ApiOperation(value = "修改资源状态")
+    @PostMapping(value = "/status/{status}", produces = MediaType.APPLICATION_JSON_VALUE)
+    public String menuStatus(@PathVariable("status") String status,
+                             @RequestParam("ids") List<Integer> ids) {
+        return WebBody.success("ok");
+    }
+
+    @ApiOperation(value = "删除资源")
+    @DeleteMapping(value = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
+    public String deleteMenu(@PathVariable("id") Menu menu) {
+        // TODO 重新调整组内排序
+        resourceService.deleteResource(menu);
+        return WebBody.success("ok");
+    }
+
+    @ApiOperation(value = "获取所有的资源")
+    @GetMapping(value = "/list/{status}", produces = MediaType.APPLICATION_JSON_VALUE)
+    public String list(@PathVariable(value = "status", required = false) String status) {
+        if (status == null) {
+            status = DataStatus.ENABLE.name();
+        }
+        List<Menu> list = resourceService.getResourceByStatus(status);
+        return WebBody.success(list);
+    }
+
+    @ApiOperation(value = "获取同一 pid 组内的资源位置")
+    @GetMapping(value = "/sortList/{pid}/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
+    public String sortList(@PathVariable(value = "pid") int pid,
+                           @PathVariable(value = "id", required = false) Menu menu) {
+        Map<Integer, String> map = resourceService.getMapByPid(pid);
+        // 排除正在编辑的 menu
+        map.remove(menu.getPos());
+        return WebBody.success(map);
+    }
+}

+ 9 - 53
dmaster/src/main/java/cn/reghao/autodop/dmaster/view/controller/ResourcePageController.java

@@ -2,12 +2,10 @@ package cn.reghao.autodop.dmaster.view.controller;
 
 import cn.reghao.autodop.dmaster.auth.entity.DataStatus;
 import cn.reghao.autodop.dmaster.auth.entity.Role;
-import cn.reghao.autodop.dmaster.utils.WebBody;
 import cn.reghao.autodop.dmaster.auth.entity.Menu;
 import cn.reghao.autodop.dmaster.view.service.ResourceService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.springframework.http.MediaType;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.*;
@@ -38,17 +36,6 @@ public class ResourcePageController {
         return "/system/menu/index";
     }
 
-    @ApiOperation(value = "获取所有的资源")
-    @GetMapping(value = "/list/{status}", produces = MediaType.APPLICATION_JSON_VALUE)
-    @ResponseBody
-    public String list(@PathVariable(value = "status", required = false) String status) {
-        if (status == null) {
-            status = DataStatus.ENABLE.name();
-        }
-        List<Menu> list = resourceService.getResourceByStatus(status);
-        return WebBody.success(list);
-    }
-
     @ApiOperation(value = "获取资源添加页面")
     @GetMapping({"/add", "/add/{pid}"})
     public String toAdd(@PathVariable(value = "pid", required = false) Integer pid, Model model) {
@@ -61,23 +48,6 @@ public class ResourcePageController {
         return "/system/menu/add";
     }
 
-    @ApiOperation(value = "获取所有的资源")
-    @GetMapping(value = "/sortList/{pid}/{notId}", produces = MediaType.APPLICATION_JSON_VALUE)
-    @ResponseBody
-    public String sortList(@PathVariable(value = "pid") int pid,
-                           @PathVariable(value = "notId", required = false) int notId) {
-        Map<Integer, String> map = resourceService.getMapByPid(pid);
-        return WebBody.success(map);
-    }
-
-    // TODO Hibernate 会根据传入的 id 自动查找相应的 Menu
-    @GetMapping("/roleList/{id}")
-    public String roleListWithResource(@PathVariable("id") Menu menu, Model model) {
-        List<Role> list = new ArrayList<>(menu.getRoles());
-        model.addAttribute("list", list);
-        return "/system/menu/roleList";
-    }
-
     @ApiOperation(value = "获取资源编辑页面")
     @GetMapping("/edit/{id}")
     public String toEdit(@PathVariable("id") Menu menu, Model model) {
@@ -94,33 +64,19 @@ public class ResourcePageController {
         return "/system/menu/add";
     }
 
+    // TODO Hibernate 会根据传入的 id 自动查找相应的 Menu
+    @ApiOperation(value = "获取角色列表页面")
+    @GetMapping("/roleList/{id}")
+    public String roleListWithResource(@PathVariable("id") Menu menu, Model model) {
+        List<Role> list = new ArrayList<>(menu.getRoles());
+        model.addAttribute("list", list);
+        return "/system/menu/roleList";
+    }
+
     @ApiOperation(value = "获取资源详细页面")
     @GetMapping("/detail/{id}")
     public String toDetail(@PathVariable("id") Menu menu, Model model) {
         model.addAttribute("menu", menu);
         return "/system/menu/detail";
     }
-
-    @ApiOperation(value = "添加资源")
-    @PostMapping(value = "/save", produces = MediaType.APPLICATION_JSON_VALUE)
-    @ResponseBody
-    public String addMenu(Menu menu) {
-        resourceService.addResource(menu);
-        return WebBody.success("ok");
-    }
-
-    @ApiOperation(value = "修改资源状态")
-    @PostMapping(value = "/status/{status}", produces = MediaType.APPLICATION_JSON_VALUE)
-    @ResponseBody
-    public String menuStatus(@PathVariable("status") String status,
-                             @RequestParam("ids") List<Integer> ids) {
-        return WebBody.success("ok");
-    }
-
-    @ApiOperation(value = "删除资源")
-    @DeleteMapping(value = "/status1/{ids}", produces = MediaType.APPLICATION_JSON_VALUE)
-    @ResponseBody
-    public String deleteMenu(@PathVariable("ids") List<Integer> ids) {
-        return WebBody.success("ok");
-    }
 }

+ 5 - 5
dmaster/src/main/java/cn/reghao/autodop/dmaster/view/controller/TestController.java

@@ -69,7 +69,7 @@ public class TestController {
         Set<Menu> menus = new HashSet<>();
         Menu homeMenu = new Menu();
         homeMenu.setPid(0);
-        homeMenu.setSort(1);
+        homeMenu.setPos(1);
         homeMenu.setTitle("主页");
         homeMenu.setUrl("/home");
         homeMenu.setType(MenuType.BUTTON.name());
@@ -78,7 +78,7 @@ public class TestController {
 
         Menu sysMenu = new Menu();
         sysMenu.setPid(0);
-        sysMenu.setSort(2);
+        sysMenu.setPos(2);
         sysMenu.setTitle("系统管理");
         sysMenu.setUrl("#");
         sysMenu.setType(MenuType.DIR.name());
@@ -89,7 +89,7 @@ public class TestController {
         menus.clear();
         Menu userMenu = new Menu();
         userMenu.setPid(sysMenu.getId());
-        userMenu.setSort(1);
+        userMenu.setPos(1);
         userMenu.setTitle("用户管理");
         userMenu.setUrl("/system/user");
         userMenu.setType(MenuType.BUTTON.name());
@@ -98,7 +98,7 @@ public class TestController {
 
         Menu roleMenu = new Menu();
         roleMenu.setPid(sysMenu.getId());
-        roleMenu.setSort(2);
+        roleMenu.setPos(2);
         roleMenu.setTitle("角色管理");
         roleMenu.setUrl("/system/role");
         roleMenu.setType(MenuType.BUTTON.name());
@@ -107,7 +107,7 @@ public class TestController {
 
         Menu resourceMenu = new Menu();
         resourceMenu.setPid(sysMenu.getId());
-        resourceMenu.setSort(3);
+        resourceMenu.setPos(3);
         resourceMenu.setTitle("资源管理");
         resourceMenu.setUrl("/system/user/menu");
         resourceMenu.setType(MenuType.BUTTON.name());

+ 63 - 20
dmaster/src/main/java/cn/reghao/autodop/dmaster/view/service/ResourceService.java

@@ -22,30 +22,73 @@ public class ResourceService {
 
     public void addResource(Menu menu) {
         menu.setStatus(DataStatus.ENABLE.name());
+        int pos = menu.getPos();
         int pid = menu.getPid();
-        int sort = menu.getSort();
 
+        if (adjustPosition(pos, pid)) {
+            menu.setPos(pos+1);
+            menuRepository.save(menu);
+        }
+    }
+
+    /**
+     * 调整组内位置
+     *
+     * @param
+     * @return
+     * @date 2021-05-18 上午9:54
+     */
+    private boolean adjustPosition(int pid, int pos) {
         List<Menu> menus = menuRepository.findByPid(pid);
-        if (menus.isEmpty()) {
-            menu.setSort(1);
-        } else {
-            if (sort == 0) {
-                menu.setSort(1);
-                List<Menu> tmpList = menus.stream().peek(menu1 -> {
-                    int tmp = menu1.getSort();
-                    menu1.setSort(tmp+1);
-                }).collect(Collectors.toList());
-                menuRepository.saveAll(tmpList);
-                menuRepository.save(menu);
-            } else {
-                Map<Integer, Menu> map = menus.stream().collect(Collectors.toMap(Menu::getSort, menu1 -> menu1));
-                System.out.println();
-            }
+        int size = menus.size();
+        if (pos > size) {
+            return false;
+        }
+
+        // 组内没有menu or 新增的 menu 在组内排在最后一位
+        if (menus.isEmpty() || pos == size) {
+            return true;
+        }
+
+        // 新增的 menu 在组内排在第 1 位
+        if (pos == 0) {
+            // 组内的元素均后移一位
+            List<Menu> tmpList = menus.stream().peek(menu1 -> {
+                int tmp = menu1.getPos();
+                menu1.setPos(tmp+1);
+            }).collect(Collectors.toList());
+            menuRepository.saveAll(tmpList);
+            return true;
+        }
+
+        // 新增的 menu 插入到组中间
+        Map<Integer, Menu> map = menus.stream().collect(Collectors.toMap(Menu::getPos, menu1 -> menu1));
+        // 需要调整顺序的 menu
+        List<Menu> tmpList = new ArrayList<>();
+        for (int i = pos+1; i <= size; i++) {
+            Menu menu = map.get(i);
+            int tmp = menu.getPos();
+            menu.setPos(tmp+1);
+            tmpList.add(menu);
         }
+        menuRepository.saveAll(tmpList);
+        return true;
     }
 
-    public void updateResource(Menu menu) {
+    public boolean updateResource(Menu menu) {
+        Optional<Menu> optionalMenu = menuRepository.findById(menu.getId());
+        if (!optionalMenu.isPresent()) {
+            return false;
+        }
+
+        Menu menuEntity = optionalMenu.get();
+        int pos = menuEntity.getPos();
+        int newPos = menu.getPos();
+        return true;
+    }
 
+    public void deleteResource(Menu menu) {
+        menuRepository.delete(menu);
     }
 
     public List<Menu> getResourceByStatus(String status) {
@@ -54,7 +97,7 @@ public class ResourceService {
         List<Menu> list = new ArrayList<>();
         map.forEach((pid, menus) -> {
             list.addAll(menus.stream()
-                    .sorted(Comparator.comparing(Menu::getSort))
+                    .sorted(Comparator.comparing(Menu::getPos))
                     .peek(menu -> menu.setChildren(null))
                     .collect(Collectors.toList()));
         });
@@ -66,12 +109,12 @@ public class ResourceService {
         List<Menu> menus = menuRepository.findByPid(pid);
         Map<Integer, String> map = new HashMap<>();
         menus.forEach(menu -> {
-            map.put(menu.getSort(), menu.getTitle());
+            map.put(menu.getPos(), menu.getTitle());
         });
         return map;
     }
 
     public Menu getResourceById(int id) {
-        return menuRepository.findById(id);
+        return menuRepository.findById(id).get();
     }
 }

+ 23 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/view/validator/MenuValidator.java

@@ -0,0 +1,23 @@
+package cn.reghao.autodop.dmaster.view.validator;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * @author reghao
+ * @date 2021-05-18 14:38:49
+ */
+@Data
+public class MenuValidator implements Serializable {
+    @NotEmpty(message = "标题不能为空字符串")
+    private String title;
+    @NotNull(message = "父级菜单不能为 NULL")
+    private Integer pid;
+    @NotEmpty(message = "url地址不能为空字符串,可以输入#代替!")
+    private String url;
+    @NotNull(message = "菜单类型不能为 NULL")
+    private String type;
+}

+ 2 - 0
dmaster/src/main/resources/static/js/main.js

@@ -126,6 +126,8 @@ layui.use(['element', 'form', 'layer', 'upload'], function () {
                 }
             }, 100);
         } else {
+            console.log('---------------------------')
+            console.log(result)
             layer.msg(result.msg, {offset: '15px', time: 2000, icon: 2});
         }
     };

+ 33 - 35
dmaster/src/main/resources/templates/system/menu/add.html

@@ -11,46 +11,60 @@
         <div class="layui-form-item">
             <label class="layui-form-label required">标题</label>
             <div class="layui-input-inline">
-                <input class="layui-input" type="text" name="title"  placeholder="请输入标题" th:value="${menu?.title}">
+                <label>
+                    <input class="layui-input" type="text" name="title"  placeholder="请输入标题" th:value="${menu?.title}">
+                </label>
             </div>
         </div>
         <div class="layui-form-item">
             <label class="layui-form-label required">URL地址</label>
             <div class="layui-input-inline">
-                <input class="layui-input url-input" type="text" name="url"  placeholder="请输入URL地址" th:value="${menu?.url}">
+                <label>
+                    <input class="layui-input url-input" type="text" name="url"  placeholder="请输入URL地址" th:value="${menu?.url}">
+                </label>
             </div>
         </div>
         <div class="layui-form-item">
             <label class="layui-form-label">菜单图标</label>
             <div class="layui-input-inline">
-                <input class="layui-input icon-input" type="text" name="icon"  placeholder="请输入菜单图标" th:value="${menu?.icon}">
+                <label>
+                    <input class="layui-input icon-input" type="text" name="icon"  placeholder="请输入菜单图标" th:value="${menu?.icon}">
+                </label>
             </div>
             <i th:class="'icon-show '+${menu?.icon}" style="line-height: 38px;"></i>
         </div>
         <div class="layui-form-item">
             <label class="layui-form-label required">父级菜单</label>
             <div class="layui-input-inline">
-                <input class="layui-input select-tree" th:attr="data-url=@{/system/menu/list/enable}, data-value=${pMenu?.id}" type="text" name="pid"  placeholder="请输入父级菜单(必须是目录类型)" th:value="${pMenu?.title}">
+                <label>
+                    <input class="layui-input select-tree" th:attr="data-url=@{/system/menu/list/enable}, data-value=${pMenu?.id}" type="text" name="pid"  placeholder="请输入父级菜单(必须是目录类型)" th:value="${pMenu?.title}">
+                </label>
             </div>
         </div>
         <div class="layui-form-item">
             <label class="layui-form-label required">菜单类型</label>
             <div class="layui-input-inline">
-                <select name="type" mo:dict="MENU_TYPE" mo-selected="${menu?.type}" mo-empty="" lay-verify="type"></select>
+                <label>
+                    <select name="type" mo:dict="MENU_TYPE" mo-selected="${menu?.type}" mo-empty="" lay-verify="type"></select>
+                </label>
             </div>
         </div>
         <div class="layui-form-item">
             <label class="layui-form-label">排序</label>
             <div class="layui-input-inline">
-                <select class="select-sort" name="sort"
-                        th:attr="data-url=@{/system/menu/sortList}, data-id=${menu?.id}, data-sort=${menu?.sort}" lay-verify="sort"></select>
+                <label>
+                    <select class="select-pos" name="pos"
+                            th:attr="data-url=@{/system/menu/sortList}, data-id=${menu?.id}, data-pos=${menu?.pos}" lay-verify="pos"></select>
+                </label>
             </div>
             <div class="layui-input-info">(之后)</div>
         </div>
         <div class="layui-form-item layui-form-text">
             <label class="layui-form-label">备注</label>
             <div class="layui-input-block">
-                <textarea placeholder="请输入内容" class="layui-textarea" name="remark">[[${menu?.remark}]]</textarea>
+                <label>
+                    <textarea placeholder="请输入内容" class="layui-textarea" name="remark">[[${menu?.remark}]]</textarea>
+                </label>
             </div>
         </div>
         <div class="layui-form-item timo-finally">
@@ -68,7 +82,7 @@
 <script type="text/javascript">
     layui.use(['form'], function () {
         window.form = layui.form;
-        // 初始化排序下拉选项
+        // 初始化排序字段下拉选项
         var pid = $(".select-tree").data('value');
         if (pid !== undefined){
             sortRender({id: pid});
@@ -82,25 +96,26 @@
         onSelected: sortRender
     });
 
-    // 更新渲染排序下拉选项
+    // 重新渲染排序字段的下拉选项
     function sortRender(treeNode) {
         var pid = treeNode.id;
-        var sort = $(".select-sort");
-        var id = sort.data('id') ? sort.data('id') : 0;
-        var url = sort.data('url') + "/" + pid + "/" + id;
+        var pos = $(".select-pos");
+        var id = pos.data('id') ? pos.data('id') : 0;
+        var url = pos.data('url') + "/" + pid + "/" + id;
         $.get(url, function (result) {
             result = result.data
             var options = '';
-            var sortNum = Object.keys(result).length;
-            if(pid === $(".select-tree").data('value') && sort.data('sort')){
-                sortNum = sort.data('sort') - 1;
+            var posNum = Object.keys(result).length;
+            if(pid === $(".select-tree").data('value') && pos.data('pos')){
+                posNum = pos.data('pos') - 1;
             }
             result[0] = "首位";
+            // TODO key 应该是 int 类型才对
             for(var key in result){
-                var selected = sortNum === key ? "selected=''" : "";
+                var selected = posNum === parseInt(key) ? "selected=''" : "";
                 options += "<option value='"+ key +"' " + selected + ">"+ result[key] +"</option>";
             }
-            sort.html(options);
+            pos.html(options);
             form.render('select');
         });
     }
@@ -109,23 +124,6 @@
     $(".icon-input").on("input propertychange", function(){
         $(".icon-show").attr("class", "icon-show "+$(this).val());
     });
-
-    // 同步操作权限输入框
-    var $perms = $(".perms-input").val();
-    $(".url-input").on("input propertychange", function(){
-        if($perms === ''){
-            $(".perms-refresh").click();
-        }
-    });
-
-    // 更新权限标识
-    $(".perms-refresh").on("click", function (e) {
-        e.preventDefault();
-        var $perms = $(".perms-input");
-        var url = $(".url-input").val().substr(1);
-        var perms = url.replace(new RegExp( '/' , "g" ), ':');
-        $perms.val(perms);
-    })
 </script>
 </body>
 </html>

+ 1 - 1
dmaster/src/main/resources/templates/system/menu/detail.html

@@ -30,7 +30,7 @@
                 <th width='100px'>菜单类型</th>
                 <td th:text="${#dicts.keyValue('MENU_TYPE', menu.type)}"></td>
                 <th width='100px'>本级排序</th>
-                <td th:text="${menu.sort}"></td>
+                <td th:text="${menu.pos}"></td>
             </tr>
                 <!--<tr>
                     <th>创建用户</th>

+ 2 - 4
dmaster/src/main/resources/templates/system/menu/index.html

@@ -67,7 +67,6 @@
                                     <th>名称</th>
                                     <th>URL 地址</th>
                                     <th>资源类型</th>
-                                    <!--<th>状态</th>-->
                                     <th>查看</th>
                                     <th>操作</th>
                                 </tr>
@@ -83,11 +82,10 @@
                                     <td>{{title}}</td>
                                     <td>{{url}}</td>
                                     <td>{{type}}</td>
-                                    <!--<td>{{status}}</td>-->
                                     <td>
                                         <a class="open-popup" data-title="角色列表"
                                            th:attr="data-url=@{'/system/menu/roleList/{{id}}'}" data-size="800,600"
-                                           href="#">已授权角色</a>
+                                           href="#">已授权角色</a>
                                     </td>
                                     <td>
                                         <a class="open-popup popup-edit" data-title="编辑资源"
@@ -98,7 +96,7 @@
                                            data-size="800,600" href="#">详细
                                         </a>
                                         <a class="ajax-delete popup-delete" th:attr="data-msg='您是否确定删除'"
-                                           th:href="@{'/system/menu/status1/{{id}}'}">删除
+                                           th:href="@{'/system/menu/{{id}}'}">删除
                                         </a>
                                     </td>
                                 </tr>