From 613052512a00d4875c6991bbf35ab2461b26a930 Mon Sep 17 00:00:00 2001
From: niying <132>
Date: 星期一, 29 一月 2024 11:53:31 +0800
Subject: [PATCH] 添加接口分发日志模块

---
 src/main/java/com/itstyle/Application.java                              |    2 
 src/main/resources/templates/log/showLog.html                           |  111 ++++++++++
 src/main/java/com/itstyle/log/controller/InterfaceLogController.java    |   30 ++
 src/main/java/com/itstyle/log/entity/InterfaceLogEntity.java            |   32 ++
 src/main/java/com/itstyle/log/service/impl/InterfaceLogServiceImpl.java |   47 ++++
 src/main/resources/templates/main.html                                  |   26 ++
 src/main/resources/templates/log/listlog.html                           |  344 +++++++++++++++++++++++++++++++
 src/main/java/com/itstyle/log/service/InterfaceLogService.java          |   18 +
 8 files changed, 606 insertions(+), 4 deletions(-)

diff --git a/src/main/java/com/itstyle/Application.java b/src/main/java/com/itstyle/Application.java
index 3591cd9..3ff0b7c 100644
--- a/src/main/java/com/itstyle/Application.java
+++ b/src/main/java/com/itstyle/Application.java
@@ -13,7 +13,7 @@
  * API鎺ュ彛娴嬭瘯锛歨ttp://localhost:8080/task/swagger-ui.html
  */
 @SpringBootApplication
-@ComponentScan(basePackages = {"com.itstyle.mdm","com.itstyle.quartz"})
+@ComponentScan(basePackages = {"com.itstyle.mdm","com.itstyle.quartz","com.itstyle.log"})
 public class Application {
 	private static final Logger logger = LoggerFactory.getLogger(Application.class);
 	
diff --git a/src/main/java/com/itstyle/log/controller/InterfaceLogController.java b/src/main/java/com/itstyle/log/controller/InterfaceLogController.java
new file mode 100644
index 0000000..3f2122c
--- /dev/null
+++ b/src/main/java/com/itstyle/log/controller/InterfaceLogController.java
@@ -0,0 +1,30 @@
+package com.itstyle.log.controller;
+
+import com.itstyle.log.entity.InterfaceLogEntity;
+import com.itstyle.log.service.InterfaceLogService;
+import com.itstyle.quartz.entity.Result;
+import com.itstyle.quartz.web.JobController;
+import org.quartz.SchedulerException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 鎺ュ彛鏃ュ織controller
+ */
+@RestController
+@RequestMapping("/interface")
+public class InterfaceLogController {
+    private final static Logger LOGGER = LoggerFactory.getLogger(JobController.class);
+    @Autowired
+    private InterfaceLogService interfaceLogService;
+
+    @PostMapping("/list")
+    public Result list(InterfaceLogEntity interfaceLog, Integer pageNo, Integer pageSize) throws SchedulerException {
+        LOGGER.info("鎺ュ彛鏃ュ織鍒楄〃");
+        return interfaceLogService.list(interfaceLog, pageNo, pageSize);
+    }
+}
diff --git a/src/main/java/com/itstyle/log/entity/InterfaceLogEntity.java b/src/main/java/com/itstyle/log/entity/InterfaceLogEntity.java
new file mode 100644
index 0000000..f8f76f1
--- /dev/null
+++ b/src/main/java/com/itstyle/log/entity/InterfaceLogEntity.java
@@ -0,0 +1,32 @@
+package com.itstyle.log.entity;
+
+import lombok.Data;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import java.util.Date;
+
+/**
+ * 鎺ュ彛鏃ュ織瀹炰綋绫�
+ */
+@Data
+@Entity
+@Table(name="interface_log")
+public class InterfaceLogEntity {
+    String uuid;
+    String interfaceName;
+    String url;
+    Date createTime;
+    String prams;
+    String result;
+
+    public void setUuid(String uuid) {
+        this.uuid = uuid;
+    }
+
+    @Id
+    public String getUuid() {
+        return uuid;
+    }
+}
diff --git a/src/main/java/com/itstyle/log/service/InterfaceLogService.java b/src/main/java/com/itstyle/log/service/InterfaceLogService.java
new file mode 100644
index 0000000..c7dfabf
--- /dev/null
+++ b/src/main/java/com/itstyle/log/service/InterfaceLogService.java
@@ -0,0 +1,18 @@
+package com.itstyle.log.service;
+
+import com.itstyle.log.entity.InterfaceLogEntity;
+import com.itstyle.quartz.entity.Result;
+import com.itstyle.quartz.entity.SysConfigEntity;
+import org.quartz.SchedulerException;
+
+public interface InterfaceLogService {
+    /**
+     * 鑾峰彇鎺ュ彛鏃ュ織鍒楄〃
+     * @param interfaceLog
+     * @param pageNo
+     * @param pageSize
+     * @return
+     * @throws SchedulerException
+     */
+    Result list(InterfaceLogEntity interfaceLog, Integer pageNo, Integer pageSize) throws SchedulerException;
+}
diff --git a/src/main/java/com/itstyle/log/service/impl/InterfaceLogServiceImpl.java b/src/main/java/com/itstyle/log/service/impl/InterfaceLogServiceImpl.java
new file mode 100644
index 0000000..f09b020
--- /dev/null
+++ b/src/main/java/com/itstyle/log/service/impl/InterfaceLogServiceImpl.java
@@ -0,0 +1,47 @@
+package com.itstyle.log.service.impl;
+
+import com.itstyle.log.entity.InterfaceLogEntity;
+import com.itstyle.log.service.InterfaceLogService;
+import com.itstyle.quartz.dynamicquery.DynamicQuery;
+import com.itstyle.quartz.entity.PageBean;
+import com.itstyle.quartz.entity.QuartzEntity;
+import com.itstyle.quartz.entity.Result;
+import com.itstyle.quartz.entity.SysConfigEntity;
+import org.quartz.SchedulerException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+import java.util.List;
+
+@Service("interfaceLogService")
+public class InterfaceLogServiceImpl implements InterfaceLogService {
+
+    @Autowired
+    private DynamicQuery dynamicQuery;
+
+    @Override
+    public Result list(InterfaceLogEntity interfaceLog, Integer pageNo, Integer pageSize) throws SchedulerException {
+        String countSql = "SELECT COUNT(*) FROM interface_log AS sys ";
+        if(!StringUtils.isEmpty(interfaceLog.getInterfaceName())){
+            countSql+=" WHERE sys.interfaceName = "+interfaceLog.getInterfaceName();
+        }
+        Long totalCount = dynamicQuery.nativeQueryCount(countSql);
+        PageBean<QuartzEntity> data = new PageBean<>();
+        if(totalCount>0){
+            StringBuffer nativeSql = new StringBuffer();
+            nativeSql.append("SELECT sys.uuid,sys.interfaceName,sys.url,sys.createTime,sys.prams,sys.result ");
+            nativeSql.append("FROM interface_log AS sys ");
+            Object[] params = new  Object[]{};
+            if(!StringUtils.isEmpty(interfaceLog.getInterfaceName())){
+                nativeSql.append(" AND sys.interfaceName = ?");
+                params = new Object[]{interfaceLog.getInterfaceName()};
+            }
+            Pageable pageable = PageRequest.of(pageNo-1,pageSize);
+            List<InterfaceLogEntity> list = dynamicQuery.nativeQueryPagingList(InterfaceLogEntity.class,pageable, nativeSql.toString(), params);
+            data = new PageBean(list, totalCount);
+        }
+        return Result.ok(data);
+    }
+}
diff --git a/src/main/resources/templates/log/listlog.html b/src/main/resources/templates/log/listlog.html
new file mode 100644
index 0000000..dcee87c
--- /dev/null
+++ b/src/main/resources/templates/log/listlog.html
@@ -0,0 +1,344 @@
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org">
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <title>浠诲姟棣栭〉</title>
+    <meta name="author" content="灏忔煉2012" />
+    <meta name="site" content="https://blog.52itstyle.com" />
+    <link rel="stylesheet" th:href="@{/iview/iview.css}">
+    <script th:src="@{/libs/jquery-3.2.1.min.js}" type="text/javascript"></script>
+    <script th:src="@{/libs/vue.min.js}" type="text/javascript"></script>
+    <script th:src="@{/layer/layer.js}" type="text/javascript"></script>
+    <script th:src="@{/iview/iview.min.js}" type="text/javascript"></script>
+    <script th:src="@{/common.js}" type="text/javascript"></script>
+    <style type="text/css">
+        [v-cloak] {
+            display: none;
+        }
+    </style>
+</head>
+<body>
+<div id="app" v-cloak>
+    <div style="margin-bottom: 6px;margin: 30px">
+        <i-input v-model="content" placeholder="鏁版嵁鍒嗗彂鏃ュ織"  style="width: 300px"></i-input>
+        <i-button type="primary" @click="search()" icon="ios-search">鎼滅储</i-button>
+        <i-button type="primary" @click="empty()" icon="ios-close-empty">娓呯┖</i-button>
+    </div>
+    <div style="margin-bottom: 6px;margin: 30px">
+        <template>
+            <i-table border :content="self" :columns="tableTitle" :data="JobData"></i-table>
+            <br>
+            <Page  style="float: right;" :current="pageNo" :total="tableSize" :page-size="pageSize"  @on-change="changePage" @on-page-size-change="changePageSize" show-elevator show-sizer show-total></Page>
+        </template>
+    </div>
+</div>
+<script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
+<script type="text/javascript">
+    var vm = new Vue({
+        el : '#app',
+        data : {
+            content : '',
+            pageNo : 1,
+            pageSize : 10,
+            jobName : "",
+            JobData : [],
+            tableSize : 50,
+            tableTitle:[ {
+                key : "interfaceName",
+                title : "鍒嗗彂鎺ュ彛鍚嶇О"
+            }, {
+                key : "url",
+                title : "鍒嗗彂鍦板潃"
+            }, {
+                key : "createTime",
+                title : "鍙戦�佹椂闂�"
+            }, {
+                key : "prams",
+                title : "璇锋眰鍙傛暟"
+            }, {
+                key : "result",
+                title : "鍝嶅簲缁撴灉"
+            },{
+                title : '鎿嶄綔',
+                key : 'action',
+                width : 300,
+                align : 'left',
+                render : function(h, params) {
+                    var functionList = [];
+                    //鏌ョ湅
+                    var show = h('Button', {
+                        props : {
+                            type : 'primary',
+                            size : 'small',
+                            icon : 'edit'
+                        },
+                        style : {
+                            marginRight : '8px'
+                        },
+                        on : {
+                            click : function() {
+                                vm.show(params.row);
+                            }
+                        }
+                    }, '鏌ョ湅');
+                    functionList.push(show);
+                    // 杩斿洖鏂规硶闆嗗悎
+                    return h('div', functionList);
+                }
+            }]
+
+        },
+        methods : {
+            //鎼滅储
+            search : function(){
+                $.ajax({
+                    url:"../interface/list",
+                    type:"post",
+                    data:{'sysName':this.content,"pageNo":this.pageNo,'pageSize':this.pageSize},
+                    success: function(result) {
+
+                    }
+                });
+            },
+            empty : function(){
+                vm.content = '';
+                this.list();
+            },
+            //浠诲姟鍒楄〃(鑷瀹炵幇鍒嗛〉)
+            list : function() {
+                $.ajax({
+                    url:"../interface/list",
+                    type:"post",
+                    data:{'time':(new Date()).toString(),"pageNo":this.pageNo,'pageSize':this.pageSize},
+                    success: function(result) {
+                        vm.JobData = result.msg.pageData;
+                        vm.tableSize = result.msg.totalCount;
+                    }
+                });
+            },
+            show : function(log){
+                dialogOpen({
+                    title: '鏌ョ湅',
+                    url: 'log/showLog.shtml',
+                    scroll : true,
+                    width: '1200px',
+                    height: '800px',
+                    success : function(iframeId){
+                        top.frames[iframeId].vm.formQuartz=log;
+                        const params = Process(log.prams);
+                        const result = Process(log.result);
+                        top.frames[iframeId].document.getElementById("fromParam").innerHTML = params;
+                        top.frames[iframeId].document.getElementById("fromResule").innerHTML = result;
+                    },
+                });
+            },
+            reload :  function(){
+                this.load();
+            },
+            changePage : function(pageNo) {
+                vm.pageNo = pageNo;
+                vm.load();
+            },
+            changePageSize : function(pageSize) {
+                vm.pageSize = pageSize;
+                vm.load();
+            }
+        },
+        created : function() {
+            this.list();
+        }
+    })
+
+    //鏍煎紡鍖栦唬鐮佸嚱鏁�,宸茬粡鐢ㄥ師鐢熸柟寮忓啓濂戒簡涓嶉渶瑕佹敼鍔�,鐩存帴寮曠敤灏卞ソ
+    function formatJson(json, options) {
+        var reg = null,
+            formatted = '',
+            pad = 0,
+            PADDING = '    ';
+        options = options || {};
+        options.newlineAfterColonIfBeforeBraceOrBracket = (options.newlineAfterColonIfBeforeBraceOrBracket === true) ? true : false;
+        options.spaceAfterColon = (options.spaceAfterColon === false) ? false : true;
+        if (typeof json !== 'string') {
+            json = JSON.stringify(json);
+        } else {
+            json = JSON.parse(json);
+            json = JSON.stringify(json);
+        }
+        reg = /([\{\}])/g;
+        json = json.replace(reg, '\r\n$1\r\n');
+        reg = /([\[\]])/g;
+        json = json.replace(reg, '\r\n$1\r\n');
+        reg = /(\,)/g;
+        json = json.replace(reg, '$1\r\n');
+        reg = /(\r\n\r\n)/g;
+        json = json.replace(reg, '\r\n');
+        reg = /\r\n\,/g;
+        json = json.replace(reg, ',');
+        if (!options.newlineAfterColonIfBeforeBraceOrBracket) {
+            reg = /\:\r\n\{/g;
+            json = json.replace(reg, ':{');
+            reg = /\:\r\n\[/g;
+            json = json.replace(reg, ':[');
+        }
+        if (options.spaceAfterColon) {
+            reg = /\:/g;
+            json = json.replace(reg, ':');
+        }
+        (json.split('\r\n')).forEach(function (node, index) {
+            //console.log(node);
+            var i = 0,
+                indent = 0,
+                padding = '';
+
+            if (node.match(/\{$/) || node.match(/\[$/)) {
+                indent = 1;
+            } else if (node.match(/\}/) || node.match(/\]/)) {
+                if (pad !== 0) {
+                    pad -= 1;
+                }
+            } else {
+                indent = 0;
+            }
+
+            for (i = 0; i < pad; i++) {
+                padding += PADDING;
+            }
+
+            formatted += padding + node + '\r\n';
+            pad += indent;
+        });
+        return formatted;
+    };
+    //寮曠敤绀轰緥閮ㄥ垎
+    //(1)鍒涘缓json鏍煎紡鎴栬�呬粠鍚庡彴鎷垮埌瀵瑰簲鐨刯son鏍煎紡
+    //var originalJson = {"name": "binginsist", "sex": "鐢�", "age": "25"};
+    //涓嬮潰鐢ㄤ竴涓湡瀹炵殑json鏁版嵁鍋氭祴璇�
+    //var originalJson = {
+    //    "_errmsg":"ok",
+    //    "result":[
+    //    ],
+    //    "stat":"wechat",
+    //    "_token":"",
+    //    "weixinId":"900504",
+    //    "_errcode":"0",
+    //    "regionId":"00000000"
+    //}
+    //
+    //(2)璋冪敤formatJson鍑芥暟,灏唈son鏍煎紡杩涜鏍煎紡鍖�
+    //var resultJson = formatJson(originalJson);
+    //灏嗘牸寮忓寲濂藉悗鐨刯son鍐欏叆椤甸潰涓�
+    //document.getElementById("writePlace").innerHTML = '<pre>' +resultJson + '<pre/>';
+
+    //鐫�鑹�
+    function IsArray(obj) {
+        return obj &&
+            typeof obj === 'object' &&  typeof obj.length === 'number' && !(obj.propertyIsEnumerable('length'));
+    }
+    function Process(params) {
+        var json = params;
+        var html = "";
+        try {
+            if (json == "") {
+                json = '""';
+            }
+            var obj = eval("[" + json + "]");
+            html = ProcessObject(obj[0], 0, false, false, false);
+            return html;
+        } catch(e) {
+        }
+    }
+    function ProcessObject(obj, indent, addComma, isArray, isPropertyContent) {
+        var html = "";
+        var comma = (addComma) ? "<span class='Comma'>,</span> ": "";
+        var type = typeof obj;
+        if (IsArray(obj)) {
+            if (obj.length == 0) {
+                html += GetRow(indent, "<span class='ArrayBrace'>[ ]</span>" + comma, isPropertyContent);
+            } else {
+                html += GetRow(indent, "<span class='ArrayBrace'>[</span>", isPropertyContent);
+                for (var i = 0; i < obj.length; i++) {
+                    html += ProcessObject(obj[i], indent + 1, i < (obj.length - 1), true, false);
+                }
+                html += GetRow(indent, "<span class='ArrayBrace'>]</span>" + comma);
+            }
+        } else {
+            if (type == "object" && obj == null) {
+                html += FormatLiteral("null", "", comma, indent, isArray, "Null");
+            } else {
+                if (type == "object") {
+                    var numProps = 0;
+                    for (var prop in obj) {
+                        numProps++;
+                    }
+                    if (numProps == 0) {
+                        html += GetRow(indent, "<span class='ObjectBrace'>{ }</span>" + comma, isPropertyContent)
+                    } else {
+                        html += GetRow(indent, "<span class='ObjectBrace'>{</span>", isPropertyContent);
+                        var j = 0;
+                        for (var prop in obj) {
+                            html += GetRow(indent + 1, '<span class="PropertyName">"' + prop + '"</span>: ' + ProcessObject(obj[prop], indent + 1, ++j < numProps, false, true))
+                        }
+                        html += GetRow(indent, "<span class='ObjectBrace'>}</span>" + comma);
+                    }
+                } else {
+                    if (type == "number") {
+                        html += FormatLiteral(obj, "", comma, indent, isArray, "Number");
+                    } else {
+                        if (type == "boolean") {
+                            html += FormatLiteral(obj, "", comma, indent, isArray, "Boolean");
+                        } else {
+                            if (type == "function") {
+                                obj = FormatFunction(indent, obj);
+                                html += FormatLiteral(obj, "", comma, indent, isArray, "Function");
+                            } else {
+                                if (type == "undefined") {
+                                    html += FormatLiteral("undefined", "", comma, indent, isArray, "Null");
+                                } else {
+                                    html += FormatLiteral(obj, '"', comma, indent, isArray, "String");
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        return html;
+    };
+
+    function FormatLiteral(literal, quote, comma, indent, isArray, style) {
+        if (typeof literal == "string") {
+            literal = literal.split("<").join("&lt;").split(">").join("&gt;");
+        }
+        var str = "<span class='" + style + "'>" + quote + literal + quote + comma + "</span>";
+        if (isArray) {
+            str = GetRow(indent, str);
+        }
+        return str;
+    }
+    function FormatFunction(indent, obj) {
+        var tabs = "";
+        for (var i = 0; i < indent; i++) {
+            tabs += "    ";
+        }
+        var funcStrArray = obj.toString().split("\n");
+        var str = "";
+        for (var i = 0; i < funcStrArray.length; i++) {
+            str += ((i == 0) ? "": tabs) + funcStrArray[i] + "\n";
+        }
+        return str;
+    }
+    function GetRow(indent, data, isPropertyContent) {
+        var tabs = "";
+        for (var i = 0; i < indent && !isPropertyContent; i++) {
+            tabs += "    ";
+        }
+        if (data != null && data.length > 0 && data.charAt(data.length - 1) != "\n") {
+            data = data + "\n";
+        }
+        return tabs + data;
+    };
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/main/resources/templates/log/showLog.html b/src/main/resources/templates/log/showLog.html
new file mode 100644
index 0000000..2ca6785
--- /dev/null
+++ b/src/main/resources/templates/log/showLog.html
@@ -0,0 +1,111 @@
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org">
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+
+    <title>浠诲姟棣栭〉</title>
+    <meta name="author" content="灏忔煉2012" />
+    <meta name="site" content="https://blog.52itstyle.com" />
+    <link rel="stylesheet" th:href="@{/iview/iview.css}">
+    <script th:src="@{/libs/jquery-3.2.1.min.js}" type="text/javascript"></script>
+    <script th:src="@{/libs/vue.min.js}" type="text/javascript"></script>
+    <script th:src="@{/layer/layer.js}" type="text/javascript"></script>
+    <script th:src="@{/iview/iview.min.js}" type="text/javascript"></script>
+    <style type="text/css">
+        [v-cloak] {
+            display: none;
+        }
+        body {font-size:14px;font-family:consolas;}
+        pre {font-family:'consolas';}
+        .Canvas {
+            font:14px/18px 'consolas';
+            background-color: #ECECEC;
+            color: #000000;
+            border: solid 1px #CECECE;
+        }
+        .ObjectBrace {
+            color: #00AA00;
+            font-weight: bold;
+        }
+        .ArrayBrace {
+            color: #0033FF;
+            font-weight: bold;
+        }
+        .PropertyName {
+            color: #CC0000;
+            font-weight: bold;
+        }
+        .String {
+            color: #007777;
+        }
+        .Number {
+            color: #AA00AA;
+        }
+        .Boolean {
+            color: #0000FF;
+        }
+        .Function {
+            color: #AA6633;
+            text-decoration: "italic";
+        }
+        .Null {
+            color: #0000FF;
+        }
+        .Comma {
+            color: #000000;
+            font-weight: bold;
+        }
+        PRE.CodeContainer {
+            margin-top: 0px;
+            margin-bottom: 0px;
+        }
+    </style>
+</head>
+<body>
+<div id="app" v-cloak style="margin: 30px">
+    <template>
+        <i-form v-ref:form-quartz :model="formQuartz" :rules="ruleValidate" :label-width="120">
+            <Form-item label="鍒嗗彂鎺ュ彛鍚嶇О" prop="interfaceName">
+                <i-input  v-model="formQuartz.interfaceName"  :value.sync="formQuartz.interfaceName" disabled="disabled"></i-input>
+            </Form-item>
+            <Form-item label="鍒嗗彂鍦板潃" prop="url" >
+                <i-input  v-model="formQuartz.url" :value.sync="formQuartz.url"  disabled="disabled"></i-input>
+            </Form-item>
+            <Form-item label="鍙戦�佹椂闂�" prop="createTime">
+                <i-input  v-model="formQuartz.createTime" :value.sync="formQuartz.createTime"  disabled="disabled"></i-input>
+            </Form-item>
+            <Form-item label="璇锋眰鍙傛暟" prop="prams">
+                <pre id = "fromParam" class="CodeContainer" style=" width: 100%;min-height: 600px;height: 100%;"></pre>
+                <!--<div ref="fromParam" id="fromParam" v-model="formQuartz.prams"></div>-->
+            </Form-item>
+            <Form-item label="鍝嶅簲缁撴灉" prop="result">
+                <pre id = "fromResule" class="CodeContainer" style=" width: 100%;min-height: 600px;height: 100%;"></pre>
+                <!--<div ref="fromParam" id="fromResule" v-model="formQuartz.result"></div>-->
+            </Form-item>
+        </i-form>
+    </template>
+</div>
+<script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
+<script type="text/javascript">
+    var vm = new Vue({
+        el : '#app',
+        data : {
+            formQuartz: {
+                interfaceName : '',
+                url : '',
+                createTime : ''
+            },
+            ruleValidate: {
+
+            }
+        },
+        methods : {
+        },
+        created : function() {
+        }
+    })
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/main/resources/templates/main.html b/src/main/resources/templates/main.html
index 70a75fa..90d2ac2 100644
--- a/src/main/resources/templates/main.html
+++ b/src/main/resources/templates/main.html
@@ -133,8 +133,28 @@
               <li data-src="task/index.shtml"><a  href="#task/index.shtml"><i class="fa fa-circle-o"></i>浠诲姟鍒楄〃</a></li>
               <li data-src="sysConfig/distribute.shtml"><a  href="#sysConfig/distribute.shtml"><i class="fa fa-circle-o"></i>寮傛瀯绯荤粺鍒嗗彂閰嶇疆</a></li>
           </ul>
+        </li>
+        <li class="active treeview menu-open">
+          <a href="#">
+            <i class="fa fa-dashboard"></i> <span>鏃ュ織绠$悊</span>
+            <span class="pull-right-container">
+              <i class="fa fa-angle-left pull-right"></i>
+            </span>
+          </a>
           <ul class="treeview-menu">
-              <li data-src="task/cron.shtml"><a  href="#task/cron.shtml"><i class="fa fa-circle-o"></i>琛ㄨ揪寮忕敓鎴愬櫒</a></li>
+            <li data-src="log/listlog.shtml"><a  href="#log/listlog.shtml"><i class="fa fa-circle-o"></i>鏁版嵁鍒嗗彂鏃ュ織</a></li>
+            <!--<li data-src="sysConfig/distribute.shtml"><a  href="#sysConfig/distribute.shtml"><i class="fa fa-circle-o"></i>寮傛瀯绯荤粺鍒嗗彂閰嶇疆</a></li>-->
+          </ul>
+        </li>
+        <li class="active treeview menu-open">
+          <a href="#">
+            <i class="fa fa-dashboard"></i> <span>琛ㄨ揪寮忕敓鎴愬櫒</span>
+            <span class="pull-right-container">
+              <i class="fa fa-angle-left pull-right"></i>
+            </span>
+          </a>
+          <ul class="treeview-menu">
+            <li data-src="task/cron.shtml"><a  href="#task/cron.shtml"><i class="fa fa-circle-o"></i>琛ㄨ揪寮忕敓鎴愬櫒</a></li>
           </ul>
         </li>
       </ul>
@@ -144,11 +164,11 @@
   <div class="content-wrapper">
     <section class="content-header">
       <h1>
-        Dashboard
+        浠〃鏉�
       </h1>
       <ol class="breadcrumb">
         <li><a href="main.shtml"><i class="fa fa-dashboard"></i> Home</a></li>
-        <li class="active">Dashboard</li>
+        <li class="active">浠〃鏉�</li>
       </ol>
     </section>
     <!-- 涓婚〉 -->

--
Gitblit v1.8.0