mxd 5 жил өмнө
parent
commit
c6e4c8e929

+ 10 - 0
src/main/java/org/ssssssss/magicapi/config/ApiInfo.java

@@ -16,6 +16,8 @@ public class ApiInfo {
 
 	private String name;
 
+	private String groupName;
+
 	private String parameter;
 
 	private String option;
@@ -62,6 +64,14 @@ public class ApiInfo {
 		this.name = name;
 	}
 
+	public void setGroupName(String groupName) {
+		this.groupName = groupName;
+	}
+
+	public String getGroupName() {
+		return groupName;
+	}
+
 	public String getParameter() {
 		return parameter;
 	}

+ 7 - 7
src/main/java/org/ssssssss/magicapi/config/MagicApiService.java

@@ -11,13 +11,13 @@ import java.util.UUID;
 public class MagicApiService {
 
 	private final String deleteById = "delete from magic_api_info where id = ?";
-	private final String selectList = "select id,api_name name,api_path path,api_method method from magic_api_info order by api_update_time desc";
-	private final String selectListWithScript = "select id,api_name name,api_path path,api_method method,api_script script,api_parameter parameter,api_option `option` from magic_api_info";
-	private final String selectOne = "select api_method method,api_script script,api_path path,api_name name,api_parameter parameter,api_option `option` from magic_api_info where id = ?";
+	private final String selectList = "select id,api_name name,api_group_name group_name,api_path path,api_method method from magic_api_info order by api_update_time desc";
+	private final String selectListWithScript = "select id,api_name name,api_group_name group_name,api_path path,api_method method,api_script script,api_parameter parameter,api_option `option` from magic_api_info";
+	private final String selectOne = "select api_method method,api_script script,api_path path,api_name name,api_group_name group_name,api_parameter parameter,api_option `option` from magic_api_info where id = ?";
 	private final String exists = "select count(*) from magic_api_info where api_method = ? and api_path = ?";
 	private final String existsWithoutId = "select count(*) from magic_api_info where api_method = ? and api_path = ? and id !=?";
-	private final String insert = "insert into magic_api_info(id,api_method,api_path,api_script,api_name,api_parameter,api_option,api_create_time,api_update_time) values(?,?,?,?,?,?,?,?,?)";
-	private final String update = "update magic_api_info set api_method = ?,api_path = ?,api_script = ?,api_name = ?,api_parameter = ?,api_option = ?,api_update_time = ? where id = ?";
+	private final String insert = "insert into magic_api_info(id,api_method,api_path,api_script,api_name,api_group_name,api_parameter,api_option,api_create_time,api_update_time) values(?,?,?,?,?,?,?,?,?,?)";
+	private final String update = "update magic_api_info set api_method = ?,api_path = ?,api_script = ?,api_name = ?,api_group_name = ?,api_parameter = ?,api_option = ?,api_update_time = ? where id = ?";
 	private RowMapper<ApiInfo> rowMapper = new BeanPropertyRowMapper<>(ApiInfo.class);
 	private JdbcTemplate template;
 
@@ -56,10 +56,10 @@ public class MagicApiService {
 	protected boolean insert(ApiInfo info) {
 		info.setId(UUID.randomUUID().toString().replace("-", ""));
 		long time = System.currentTimeMillis();
-		return template.update(insert, info.getId(), info.getMethod(), info.getPath(), info.getScript(), info.getName(), info.getParameter(), info.getOption(), time, time) > 0;
+		return template.update(insert, info.getId(), info.getMethod(), info.getPath(), info.getScript(), info.getName(), info.getGroupName(), info.getParameter(), info.getOption(), time, time) > 0;
 	}
 
 	protected boolean update(ApiInfo info) {
-		return template.update(update, info.getMethod(), info.getPath(), info.getScript(), info.getName(), info.getParameter(), info.getOption(), System.currentTimeMillis(), info.getId()) > 0;
+		return template.update(update, info.getMethod(), info.getPath(), info.getScript(), info.getName(), info.getGroupName(), info.getParameter(), info.getOption(), System.currentTimeMillis(), info.getId()) > 0;
 	}
 }

+ 0 - 2
src/main/java/org/ssssssss/script/MagicScriptEngine.java

@@ -17,8 +17,6 @@ public class MagicScriptEngine {
 
 	private static ExecutorService service = Executors.newCachedThreadPool();
 
-	private static Logger logger = LoggerFactory.getLogger(MagicScriptEngine.class);
-
 	static {
 		addDefaultImport("range", (BiFunction<Integer, Integer, Iterator<Integer>>) (from, to) -> new Iterator<Integer>() {
 			int idx = from;

+ 2 - 20
src/main/resources/magicapi-support/css/index.css

@@ -97,27 +97,9 @@ html,body{
 .api-list{
     height : 100%;
 }
-.api-list li{
-    list-style: none;
-    line-height: 28px;
-    border-bottom: 1px solid #eee;
-    margin : 0 4px;
-    font-weight: bold;
-    color : #666;
-    overflow: hidden;
-    text-overflow: ellipsis;
-    white-space: nowrap;
-    cursor: pointer;
-}
-.api-list li:last-child{
-    border-bottom: none;
-}
-.api-list li label{
+.api-list .layui-tree-entry label{
     color : #000;
-}
-.api-list li.empty{
-    text-align: center;
-    cursor: default;
+    padding-right: 4px;
 }
 .scroller{
     overflow: auto;

+ 14 - 6
src/main/resources/magicapi-support/index.html

@@ -24,23 +24,31 @@
 					</div>
 					<div class="layui-side">
 						<div class="layui-side-scroll scroller">
-							<ul class="api-list">
-								<li class="empty">您还没有创建接口..</li>
-							</ul>
+							<div class="api-list" id="api-list" >
+
+							</div>
 						</div>
 					</div>
 				</div>
 				<div class="layui-right-container">
 					<div class="properties-container layui-form">
 						<div class="layui-input-placeholder">
-							<div class="layui-input-inline" style="width: 100px;margin-left: 81px;">请求方法</div>
+							<div class="layui-input-inline" style="width: 150px;margin-left: 81px;">接口分组</div>
+							<div class="layui-input-inline" style="width: 100px;margin-left: 5px;">请求方法</div>
 							<div class="layui-input-inline" style="width: 200px;margin-left: 5px;">接口名称</div>
-							<div class="layui-input-inline" style="width: 300px;margin-left: 10px;">接口地址</div>
+							<div class="layui-input-inline" style="width: 300px;margin-left: 5px;">接口地址</div>
 						</div>
 						<div>
 							<button type="button" class="layui-btn layui-btn-normal layui-btn-sm btn-create">
 								<i class="layui-icon">&#xe624;</i> 新建
 							</button>
+							<div class="layui-input-inline" style="width: 150px;margin-left: 5px;">
+								<select name="group" lay-search>
+									<option value="">请输入组名</option>
+									<option value="未分组">未分组</option>
+									<option value="23">123</option>
+								</select>
+							</div>
 							<div class="layui-input-inline" style="width: 100px;margin-left: 5px;">
 								<select name="method">
 									<option value="GET">GET</option>
@@ -52,7 +60,7 @@
 							<div class="layui-input-inline" style="width: 200px;margin-left: 5px;">
 								<input type="text" name="name" class="layui-input" placeholder="请输入接口名称"/>
 							</div>
-							<div class="layui-input-inline" style="position: absolute;left:390px;right:140px;">
+							<div class="layui-input-inline" style="position: absolute;left:550px;right:140px;">
 								<input type="text" name="path" class="layui-input" placeholder="请输入接口地址"/>
 							</div>
 							<button type="button" class="layui-btn layui-btn-normal layui-btn-sm btn-save" style="float:right;margin-right: 10px;">

+ 98 - 27
src/main/resources/magicapi-support/js/index.js

@@ -38,6 +38,7 @@ $(function(){
     }
     var defaultRequestValue = '{\r\n\t"request" : {\r\n\t\t"message" : "Hello MagicAPI!"\r\n\t},\r\n\t"path" : {\r\n\t\t"id" : "123456"\r\n\t},\r\n\t"header" : {\r\n\t\t"token" : "tokenValue"\r\n\t},\r\n\t"cookie" : {\r\n\t\t"cookieName" : "cookieValue"\r\n\t},\r\n\t"session" : {\r\n\t\t"userId" : "123"\r\n\t}\r\n}';
     var resetEditor = function(){
+        resetGroup('未分组')
         editor&&editor.setValue('return message;');
         requestEditor && requestEditor.setValue(defaultRequestValue);
         outputEditor&&outputEditor.setValue('');
@@ -82,6 +83,32 @@ $(function(){
             }
         }
     }
+
+    var resetGroup = function(selValue){
+        var $dom = $("select[name='group']").next().find("input");
+        $dom.unbind("blur");
+        if(!$dom.attr('bind-event')){
+            $dom.attr('bind-event','true');
+            $dom.css({
+                "cursor" : "default"
+            })
+            $dom.focus(function () {
+                window.setTimeout(function(){
+                    var sourceSelect =  $dom.next();
+                    var selectText = $(sourceSelect).find(".layui-anim-upbit .layui-this");
+                    var selectVal = $(sourceSelect).find("input").val();
+                    if (selectVal !== selectText.text()) {
+                        $(selectText).removeClass("layui-this");
+                    }
+                },100)
+            })
+        }
+        if(selValue !== undefined){
+            $dom.val(selValue);
+        }
+        return $dom;
+    }
+    resetGroup();
     // 初始化编辑器
     require(['vs/editor/editor.main'], function() {
         requestEditor = monaco.editor.create(document.getElementById('request-parameter'), {
@@ -195,25 +222,85 @@ $(function(){
     }
     // 窗口改变大小时,刷新编辑器
     $(window).resize(editorLayout);
+    var $tree;
     // 渲染接口列表
     var renderApiList = function(emptyString){
         var $ul = $(".layui-left .api-list").html('');
         var empty = true;
+        var root = [];
+        var groups = {
+            "未分组" : {
+                id : '未分组',
+                children : [],
+                spread : true,
+                title : '未分组'
+            }
+        };
         if(apiList&&apiList.length > 0){
             for(var i=0,len = apiList.length;i<len;i++){
                 var info = apiList[i];
+                info.groupName = info.groupName || '未分组';
+                if(!groups[info.groupName]){
+                    groups[info.groupName] = {
+                        id : info.groupName,
+                        children : [],
+                        spread : true,
+                        title : info.groupName
+                    }
+                }
                 if(info.show!==false){
-                    var $li = $('<li/>').attr('data-id',info.id);
-                    $li.append($('<label/>').html(info.name));
-                    $li.append('(' + info.path + ')');
-                    $ul.append($li);
-                    empty = false;
+                    groups[info.groupName].children.push({
+                        id : info.id,
+                        groupName : info.groupName,
+                        name : info.name,
+                        title : '<label>' + info.name + "</label>" + info.path,
+                        path : info.path
+                    });
                 }
             }
         }
-        if(empty){
-            $ul.html($('<li/>').addClass('empty').html(emptyString));
+        for(var key in groups){
+            root.push(groups[key]);
+        }
+        if($tree){
+            layui.tree.reload('api-list',{
+                data : root
+            })
+        }else{
+            $tree = layui.tree.render({
+                elem : '#api-list',
+                id : 'api-list',
+                data : root,
+                click : function(obj){
+                    if(!obj.data.children){
+                        var id = obj.data.id;
+                        _ajax({
+                            url : 'get',
+                            data : {
+                                id : id
+                            },
+                            success : function(info){
+                                apiId = id;
+                                $('input[name=name]').val(info.name);
+                                $('input[name=path]').val(info.path);
+                                $('select[name=method]').val(info.method);
+                                layui.form.render();
+                                resetEditor();
+                                resetGroup().val(info.groupName || '未分组');
+                                editor && editor.setValue(info.script);
+                                requestEditor && requestEditor.setValue(info.parameter || defaultRequestValue);
+                                optionEditor && optionEditor.setValue(info.option || '{\r\n}');
+
+                            }
+                        })
+                    }
+                }
+            })
         }
+
+        // if(empty){
+        //     $ul.html($('<li/>').addClass('empty').html(emptyString));
+        // }
     }
     var resizeX = $(".layout-resizer-x")[0];
     resizeX.onmousedown = function(e){
@@ -282,26 +369,6 @@ $(function(){
             }
             e.preventDefault();
         }
-    }).on('click','.api-list li[data-id]',function(){
-        var id = $(this).data('id');
-        _ajax({
-            url : 'get',
-            data : {
-                id : id
-            },
-            success : function(info){
-                apiId = id;
-                $('input[name=name]').val(info.name);
-                $('input[name=path]').val(info.path);
-                $('select[name=method]').val(info.method);
-                layui.form.render();
-                resetEditor();
-                editor && editor.setValue(info.script);
-                requestEditor && requestEditor.setValue(info.parameter || defaultRequestValue);
-                optionEditor && optionEditor.setValue(info.option || '{\r\n}');
-
-            }
-        })
     }).on('click','.btn-create',function(){
         layui.layer.confirm('新建接口会清空当前编辑器,是否继续?',{
             title : "创建接口"
@@ -350,6 +417,7 @@ $(function(){
         var name = $('input[name=name]').val();
         var path = $('input[name=path]').val();
         var method = $('select[name=method]').val();
+        var groupName = resetGroup().val() || '未分组';
         _ajax({
             url : 'save',
             data : {
@@ -357,6 +425,7 @@ $(function(){
                 path : path,
                 method : method,
                 id : apiId,
+                groupName : groupName,
                 parameter: requestEditor.getValue(),
                 option: optionEditor.getValue(),
                 name : name
@@ -369,6 +438,7 @@ $(function(){
                             apiList[i].name = name;
                             apiList[i].path = path;
                             apiList[i].method = method;
+                            apiList[i].groupName = groupName;
                             break;
                         }
                     }
@@ -379,6 +449,7 @@ $(function(){
                         name : name,
                         path : path,
                         method : method,
+                        groupName : groupName || '未分组',
                         show : true
                     })
                 }