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("<").split(">").join(">");
+ }
+ 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