lith 3 năm trước cách đây
mục cha
commit
e6fa906131

+ 235 - 96
dotnet/ServiceCenter/App.Gover.Gateway/wwwroot/_gover_/ActiveApiDoc.html

@@ -1,121 +1,260 @@
-<!DOCTYPE html>
-<html lang="zh">
+<!doctype html>
+<html lang="zh-cn">
 <head>
-    <meta charset="utf-8" />
-    <title>ActiveApiDoc</title>
-
-    <link rel="stylesheet" href="Scripts/editormd/css/editormd.css" />
-    <script src="Scripts/editormd/examples/js/jquery.min.js"></script>
-    <script src="Scripts/editormd/lib/marked.min.js"></script>
-    <script src="Scripts/editormd/lib/prettify.min.js"></script>
-    <script src="Scripts/editormd/lib/raphael.min.js"></script>
-    <script src="Scripts/editormd/lib/underscore.min.js"></script>
-    <script src="Scripts/editormd/lib/sequence-diagram.min.js"></script>
-    <script src="Scripts/editormd/lib/flowchart.min.js"></script>
-    <script src="Scripts/editormd/lib/jquery.flowchart.min.js"></script>
-    <script src="Scripts/editormd/editormd.js"></script>
-
-    <script src="Scripts/util/lith.js"></script>
-
-    <script src="Scripts/Sers/sers.apiClient.js"></script>
-    <script src="Scripts/Sers/sers.ssApiDescToMd.js"></script>
-    <script src="Scripts/Sers/sers.ssModel.js"></script>
-
-    <script src="Scripts/Sers/sers.SaveFile.js"></script>
-    <script src="Scripts/Sers/sers.postman.js"></script>
-
-    <style type="text/css">
-        #title a {
-            text-decoration: none;
-        }
-    </style>
+    <title>Sers Dashboard</title>
+
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+
+    <script src="Scripts/jquery/jquery.min.js"></script>
+
+    <!-- Main CSS -->
+    <link rel="stylesheet" href="Scripts/blog/css/style.css">
+
+    <!-- Font Awesome -->
+    <link href="Scripts/blog/css/font-awesome.min.css" rel="stylesheet">
 </head>
+
 <body>
-    <div id="title">
-        <h1>ApiDoc-可用的Api</h1>
-        apiStation: <span id="apiStation"> <a href="?" title="所有">所有</a> | </span>
-        <br />
-        postman导入文件:
-        <a id="postmanCollection" href="#" title="download postman collection File">下载postmanCollection</a> |
-        <a id="postmanEnvironment" href="#" title="download postman environment File">下载postmanEnvironment</a>
-        <br />
-        postmanWeb:
-        <a href="#" onclick="openPostmanWeb(false)">打开postmanWeb</a> |
-        <a href="#" onclick="openPostmanWeb(true)">打开postmanWeb并加载当前api</a>
-        <br />
-        markdown文档:<a id="mdDownload" href="#" title="download markdown document File">下载markdown文档</a>
+    <style>
+        .container {
+            max-width: 1920px !important;
+        }
+    </style>
+
+    <!-- Header -->
+    <div class="container">
+        <div class="header-wrap d-none d-md-block">
+            <div class="row">
+
+                <!-- Left header box -->
+                <header class="col-6 text-left">
+                    <h1><span> Sers </span> Dashboard </h1>
+                </header>
+
+            </div>
+        </div>
+    </div>
+
+
+    <!-- Main navigation -->
+    <div class="container navbar-container">
+        <nav class="navbar navbar-expand-md navbar-light">
+
+            <!-- Company name shown on mobile -->
+            <a class="navbar-brand d-md-none d-lg-none d-xl-none" href="#"><span> Sers </span> Dashboard </a>
+
+            <!-- Mobile menu toggle -->
+            <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#mainNavbar" aria-controls="mainNavbar" aria-expanded="false" aria-label="Toggle navigation">
+                <span class="navbar-toggler-icon"></span>
+            </button>
+
+            <!-- Main navigation items -->
+            <div class="collapse navbar-collapse" id="mainNavbar">
+                <ul class="navbar-nav mr-auto">
+                    <li class="nav-item active">
+                        <a class="nav-link" href="/">Home <span class="sr-only">(current)</span></a>
+                    </li>
+
+                    <li class="nav-item">
+                        <a class="nav-link" target="_blank" href="/_gover_/ActiveApiDoc.html">ActiveApiDoc</a>
+                    </li>
+
+                    <li class="nav-item">
+                        <a class="nav-link" target="_blank" href="/_gover_/ApiDoc.html">ApiDoc</a>
+                    </li>
+
+                    <li class="nav-item">
+                        <a class="nav-link" target="_blank" href="/_gover_/ApiStation.html">ApiStation</a>
+                    </li>
+
+                    <li class="nav-item">
+                        <a class="nav-link" target="_blank" href="/_gover_/ServiceStation.html">ServiceStation</a>
+                    </li>
+
+                    <li class="nav-item">
+                        <a class="nav-link" target="_blank" href="/_gover_/RateLimit.html">RateLimit</a>
+                    </li>
+
+                    <li class="nav-item">
+                        <a class="nav-link" target="_blank" href="/_gover_/Health.html">Health</a>
+                    </li>
+
+
+                    <li class="nav-item dropdown">
+                        <a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">Ext</a>
+                        <div class="dropdown-menu navbar-dark bg-primary">
+                            <a class="dropdown-item" target="_blank" href="/JsStation/JsStation.html">JsStation</a>
+                            <a class="dropdown-item" target="_blank" href="/MicroControl/mc.html">MicroControl</a>
+                            <a class="dropdown-item" target="_blank" href="/_robot_/TaskMng.html">Robot</a>
+                        </div>
+                    </li>
+
+                </ul>
+
+
+            </div>
+        </nav>
     </div>
-    <div id="test-editormd-view" style="width: 95%;">
+
+    <!-- Jumbtron / Slider -->
+    <div class="jumbotron-wrap">
+        <div class="container">
+            <div class="jumbotron jumbotron-narrow static-slider">              
+
+                apiStation:
+                <br />&nbsp; &nbsp; &nbsp; &nbsp;
+                <span id="apiStation"> <a href="?" title="所有">所有</a> | </span>
+                <br />
+
+                postman导入文件(用以导入接口至postman):
+                <br />&nbsp; &nbsp; &nbsp; &nbsp;
+                <a id="postmanCollection" href="#" title="download postman collection File">下载postmanCollection</a> |
+                <a id="postmanEnvironment" href="#" title="download postman environment File">下载postmanEnvironment</a>
+                <br />
+
+                postmanWeb:
+                <br />&nbsp; &nbsp; &nbsp; &nbsp;
+                <a href="#" onclick="openPostmanWeb(false)">打开postmanWeb</a> |
+                <a href="#" onclick="openPostmanWeb(true)">打开postmanWeb并加载当前api</a>
+                <br />
+
+                markdown文档:
+                <br />&nbsp; &nbsp; &nbsp; &nbsp;
+                <a id="mdDownload" href="#" title="download markdown document file">下载markdown文档</a>
+
+            </div>
+        </div>
     </div>
+    <!-- Main content area -->
+    <main class="container">
+        <div class="row">
 
-    <script type="text/javascript">    
+            <!-- Main content -->
+            <div class="col">
+                <!--内容区-->
+                <article>
+                    <h1 style="text-align:center;">Api接口文档(不含离线接口)</h1>
 
+                    <link rel="stylesheet" href="Scripts/editormd/css/editormd.css" />
+                    <script src="Scripts/editormd/examples/js/jquery.min.js"></script>
+                    <script src="Scripts/editormd/lib/marked.min.js"></script>
+                    <script src="Scripts/editormd/lib/prettify.min.js"></script>
+                    <script src="Scripts/editormd/lib/raphael.min.js"></script>
+                    <script src="Scripts/editormd/lib/underscore.min.js"></script>
+                    <script src="Scripts/editormd/lib/sequence-diagram.min.js"></script>
+                    <script src="Scripts/editormd/lib/flowchart.min.js"></script>
+                    <script src="Scripts/editormd/lib/jquery.flowchart.min.js"></script>
+                    <script src="Scripts/editormd/editormd.js"></script>
 
-        //加载apiStation
-        sers.apiClient.apiStation_getAll(function (apiRet) {
-            if (!apiRet.success) return;
+                    <script src="Scripts/util/lith.js"></script>
 
-            var html = '<a href="?" title="所有">所有</a> | ';
-            var data = apiRet.data;
-            for (var t in data) {
-                var stationName = data[t].stationName;
-                html += '<a href="?r=' + stationName + '" title="' + stationName + '">' + stationName + '</a> | ';
-            }
-            $('#apiStation').html(html);
-        });
+                    <script src="Scripts/Sers/sers.apiClient.js"></script>
+                    <script src="Scripts/Sers/sers.ssApiDescToMd.js"></script>
+                    <script src="Scripts/Sers/sers.ssModel.js"></script>
 
+                    <script src="Scripts/Sers/sers.SaveFile.js"></script>
+                    <script src="Scripts/Sers/sers.postman.js"></script>
 
-        //加载ApiDesc
-        var apiDescs;
-        var mdDoc;
-        var r = lith.document.url_GetArg('r');
-        sers.apiClient.apiDesc_getActive({ r: r }, function (apiReturn) {
-            apiDescs = apiReturn.data;
-            mdDoc = sers.ssApiDescsToMd(apiDescs);
+                    <style type="text/css">
+                        #title a {
+                            text-decoration: none;
+                        }
+                    </style>
+                    <div id="test-editormd-view" style="width: 95%;">
+                    </div>
 
-            var curMdDoc = "[TOC]\n\n" + mdDoc
+                    <script type="text/javascript">
 
-            editormd.markdownToHTML("test-editormd-view", {
-                markdown: curMdDoc,
-                htmlDecode: true
-            });
-        });
 
-        function openPostmanWeb(loadApi) {
+                        //加载apiStation
+                        sers.apiClient.apiStation_getAll(function (apiRet) {
+                            if (!apiRet.success) return;
 
-            if (loadApi) {
-                var context = sers.postman.apiDescToPostmanConfig(apiDescs);
-                context = JSON.stringify(context, null, 2);
-                localStorage.postmanCollection = context;
+                            var html = '<a href="?" title="所有">所有</a> | ';
+                            var data = apiRet.data;
+                            for (var t in data) {
+                                var stationName = data[t].stationName;
+                                html += '<a href="?r=' + stationName + '" title="' + stationName + '">' + stationName + '</a> | ';
+                            }
+                            $('#apiStation').html(html);
+                        });
 
-                context = sers.postman.environmentConfig.value;
-                context = JSON.stringify(context, null, 2);
-                localStorage.postmanEnvironment = context;
-            }
-            window.open('Scripts/PostmanWeb/postman.html');
-        }
 
+                        //加载ApiDesc
+                        var apiDescs;
+                        var mdDoc;
+                        var r = lith.document.url_GetArg('r');
+                        sers.apiClient.apiDesc_getActive({ r: r }, function (apiReturn) {
+                            apiDescs = apiReturn.data;
+                            mdDoc = sers.ssApiDescsToMd(apiDescs);
+
+                            var curMdDoc = "[TOC]\n\n" + mdDoc
+
+                            editormd.markdownToHTML("test-editormd-view", {
+                                markdown: curMdDoc,
+                                htmlDecode: true
+                            });
+                        });
+
+                        function openPostmanWeb(loadApi) {
+
+                            if (loadApi) {
+                                var context = sers.postman.apiDescToPostmanConfig(apiDescs);
+                                context = JSON.stringify(context, null, 2);
+                                localStorage.postmanCollection = context;
+
+                                context = sers.postman.environmentConfig.value;
+                                context = JSON.stringify(context, null, 2);
+                                localStorage.postmanEnvironment = context;
+                            }
+                            window.open('Scripts/PostmanWeb/postman.html');
+                        }
 
-        //postman file
-        $('#postmanCollection').click(function () {
-            var context = sers.postman.apiDescToPostmanConfig(apiDescs);
-            context = JSON.stringify(context, null, 2);
-            sers.SaveFile(context, sers.postman.collectionConfig.fileName);
-        });
 
-        $('#postmanEnvironment').click(function () {
-            var context = sers.postman.environmentConfig.value;
-            context = JSON.stringify(context, null, 2);
-            sers.SaveFile(context, sers.postman.environmentConfig.fileName);
-        });
+                        //postman file
+                        $('#postmanCollection').click(function () {
+                            var context = sers.postman.apiDescToPostmanConfig(apiDescs);
+                            context = JSON.stringify(context, null, 2);
+                            sers.SaveFile(context, sers.postman.collectionConfig.fileName);
+                        });
 
-        //mdDownload
-        $('#mdDownload').click(function () {
-            sers.SaveFile(mdDoc, 'SersActiveApiDoc(' + new Date().toJSON().slice(0, 10) + ').md');
-        });
+                        $('#postmanEnvironment').click(function () {
+                            var context = sers.postman.environmentConfig.value;
+                            context = JSON.stringify(context, null, 2);
+                            sers.SaveFile(context, sers.postman.environmentConfig.fileName);
+                        });
+
+                        //mdDownload
+                        $('#mdDownload').click(function () {
+                            sers.SaveFile(mdDoc, 'SersActiveApiDoc(' + new Date().toJSON().slice(0, 10) + ').md');
+                        });
+
+
+                    </script>
+                </article>
+            </div>
+        </div>
+    </main>
+
+
+    <!-- Footer -->
+    <div class="container footer-container">
+        <footer class="footer">
+            <div class="footer-bottom">
+                <p class="text-center"> <a target="_blank" href="https://github.com/serset/Sers">github</a> &nbsp;&nbsp; <a target="_blank" href="https://serset.github.io">online doc</a>  &nbsp;&nbsp; email: serset@yeah.net </p>
+                <p class="text-center"><a href="#">Back to top</a></p>
+            </div>
+        </footer>
+    </div>
 
 
-    </script>
+    <!-- Bootcamp JavaScript -->
+    <!-- jQuery first, then Popper.js, then Bootstrap JS -->
+    <!--<script src="Scripts/blog/js/jquery-3.2.1.slim.min.js"></script>-->
+    <script src="Scripts/blog/js/popper.min.js"></script>
+    <script src="Scripts/blog/js/bootstrap.min.js"></script>
 
 </body>
 </html>

+ 233 - 117
dotnet/ServiceCenter/App.Gover.Gateway/wwwroot/_gover_/ApiDoc.html

@@ -1,140 +1,256 @@
-<!DOCTYPE html>
-<html lang="zh">
+<!doctype html>
+<html lang="zh-cn">
 <head>
-    <meta charset="utf-8" />
-    <title>ApiDoc</title>
-
-    <link rel="stylesheet" href="Scripts/editormd/css/editormd.css" />
-    <script src="Scripts/editormd/examples/js/jquery.min.js"></script>
-    <script src="Scripts/editormd/lib/marked.min.js"></script>
-    <script src="Scripts/editormd/lib/prettify.min.js"></script>
-    <script src="Scripts/editormd/lib/raphael.min.js"></script>
-    <script src="Scripts/editormd/lib/underscore.min.js"></script>
-    <script src="Scripts/editormd/lib/sequence-diagram.min.js"></script>
-    <script src="Scripts/editormd/lib/flowchart.min.js"></script>
-    <script src="Scripts/editormd/lib/jquery.flowchart.min.js"></script>
-    <script src="Scripts/editormd/editormd.js"></script>
-
-    <script src="Scripts/util/lith.js"></script>
-
-    <script src="Scripts/Sers/sers.apiClient.js"></script>
-    <script src="Scripts/Sers/sers.ssApiDescToMd.js"></script>
-    <script src="Scripts/Sers/sers.ssModel.js"></script>
-
-    <script src="Scripts/Sers/sers.SaveFile.js"></script>
-    <script src="Scripts/Sers/sers.postman.js"></script>
-
-    <style type="text/css">
-        #title a {
-            text-decoration: none;
-        }
-    </style>
+    <title>Sers Dashboard</title>
+
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+
+    <script src="Scripts/jquery/jquery.min.js"></script>
+
+    <!-- Main CSS -->
+    <link rel="stylesheet" href="Scripts/blog/css/style.css">
+
+    <!-- Font Awesome -->
+    <link href="Scripts/blog/css/font-awesome.min.css" rel="stylesheet">
 </head>
+
 <body>
-    <div id="title">
-        <h1>ApiDoc-all</h1>
-        apiStation: <span id="apiStation"> <a href="?" title="所有">所有</a> | </span>
-        <br />
-        postman导入文件:
-        <a id="postmanCollection" href="#" title="download postman collection File">下载postmanCollection</a> |
-        <a id="postmanEnvironment" href="#" title="download postman environment File">下载postmanEnvironment</a>
-        <br />
-        postmanWeb:
-        <a href="#" onclick="openPostmanWeb(false)">打开postmanWeb</a> |
-        <a href="#" onclick="openPostmanWeb(true)">打开postmanWeb并加载当前api</a>
-        <br />
-        markdown文档:<a id="mdDownload" href="#" title="download markdown document File">下载markdown文档</a>
-        <br />
-
-        操作:
-        <a href="#" onclick="removeOfflineApiService()">移除离线接口</a> 
+    <style>
+        .container {
+            max-width: 1920px !important;
+        }
+    </style>
+
+    <!-- Header -->
+    <div class="container">
+        <div class="header-wrap d-none d-md-block">
+            <div class="row">
+
+                <!-- Left header box -->
+                <header class="col-6 text-left">
+                    <h1><span> Sers </span> Dashboard </h1>
+                </header>
+
+            </div>
+        </div>
+    </div>
+
+
+    <!-- Main navigation -->
+    <div class="container navbar-container">
+        <nav class="navbar navbar-expand-md navbar-light">
+
+            <!-- Company name shown on mobile -->
+            <a class="navbar-brand d-md-none d-lg-none d-xl-none" href="#"><span> Sers </span> Dashboard </a>
+
+            <!-- Mobile menu toggle -->
+            <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#mainNavbar" aria-controls="mainNavbar" aria-expanded="false" aria-label="Toggle navigation">
+                <span class="navbar-toggler-icon"></span>
+            </button>
+
+            <!-- Main navigation items -->
+            <div class="collapse navbar-collapse" id="mainNavbar">
+                <ul class="navbar-nav mr-auto">
+                    <li class="nav-item active">
+                        <a class="nav-link" href="/">Home <span class="sr-only">(current)</span></a>
+                    </li>
+
+                    <li class="nav-item">
+                        <a class="nav-link" target="_blank" href="/_gover_/ActiveApiDoc.html">ActiveApiDoc</a>
+                    </li>
+
+                    <li class="nav-item">
+                        <a class="nav-link" target="_blank" href="/_gover_/ApiDoc.html">ApiDoc</a>
+                    </li>
+
+                    <li class="nav-item">
+                        <a class="nav-link" target="_blank" href="/_gover_/ApiStation.html">ApiStation</a>
+                    </li>
+
+                    <li class="nav-item">
+                        <a class="nav-link" target="_blank" href="/_gover_/ServiceStation.html">ServiceStation</a>
+                    </li>
+
+                    <li class="nav-item">
+                        <a class="nav-link" target="_blank" href="/_gover_/RateLimit.html">RateLimit</a>
+                    </li>
 
+                    <li class="nav-item">
+                        <a class="nav-link" target="_blank" href="/_gover_/Health.html">Health</a>
+                    </li>
+
+
+                    <li class="nav-item dropdown">
+                        <a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">Ext</a>
+                        <div class="dropdown-menu navbar-dark bg-primary">
+                            <a class="dropdown-item" target="_blank" href="/JsStation/JsStation.html">JsStation</a>
+                            <a class="dropdown-item" target="_blank" href="/MicroControl/mc.html">MicroControl</a>
+                            <a class="dropdown-item" target="_blank" href="/_robot_/TaskMng.html">Robot</a>
+                        </div>
+                    </li>
+
+                </ul>
+
+
+            </div>
+        </nav>
     </div>
 
-    <div id="test-editormd-view" style="width: 95%;">
+    <!-- Jumbtron / Slider -->
+    <div class="jumbotron-wrap">
+        <div class="container">
+            <div class="jumbotron jumbotron-narrow static-slider">
+
+                apiStation:
+                <br />&nbsp; &nbsp; &nbsp; &nbsp;
+                <span id="apiStation"> <a href="?" title="所有">所有</a> | </span>
+                <br />
+
+                postman导入文件(用以导入接口至postman):
+                <br />&nbsp; &nbsp; &nbsp; &nbsp;
+                <a id="postmanCollection" href="#" title="download postman collection File">下载postmanCollection</a> |
+                <a id="postmanEnvironment" href="#" title="download postman environment File">下载postmanEnvironment</a>
+                <br />
+
+                postmanWeb:
+                <br />&nbsp; &nbsp; &nbsp; &nbsp;
+                <a href="#" onclick="openPostmanWeb(false)">打开postmanWeb</a> |
+                <a href="#" onclick="openPostmanWeb(true)">打开postmanWeb并加载当前api</a>
+                <br />
+
+                markdown文档:
+                <br />&nbsp; &nbsp; &nbsp; &nbsp;
+                <a id="mdDownload" href="#" title="download markdown document file">下载markdown文档</a>              
+
+            </div>
+        </div>
     </div>
+    <!-- Main content area -->
+    <main class="container">
+        <div class="row">
 
-    <script type="text/javascript">
-        //加载apiStation
-        sers.apiClient.apiStation_getAll(function (apiRet) {
-            if (!apiRet.success) return;
-
-            var html = '<a href="?" title="所有">所有</a> | ';
-            var data = apiRet.data;
-            for (var t in data) {
-                var stationName = data[t].stationName;
-                html += '<a href="?r=' + stationName + '" title="' + stationName + '">' + stationName + '</a> | ';
-            }
-            $('#apiStation').html(html);
-        });
-
-
-        //加载ApiDesc
-        var apiDescs;
-        var r = lith.document.url_GetArg('r');
-        sers.apiClient.apiDesc_getAll({ r: r }, function (apiReturn) {
-            apiDescs = apiReturn.data;
-            var mdDoc = sers.ssApiDescsToMd(apiDescs);
-
-            mdDoc = "[TOC]\n\n" + mdDoc
-
-            editormd.markdownToHTML("test-editormd-view", {
-                markdown: mdDoc,
-                htmlDecode: true
-            });
-        });
-
-        function openPostmanWeb(loadApi) {
-
-            if (loadApi) {
-                var context = sers.postman.apiDescToPostmanConfig(apiDescs);
-                context = JSON.stringify(context, null, 2);
-                localStorage.postmanCollection = context;
-
-                context = sers.postman.environmentConfig.value;
-                context = JSON.stringify(context, null, 2);
-                localStorage.postmanEnvironment = context;
-            }
-            window.open('Scripts/PostmanWeb/postman.html');
-        }
+            <!-- Main content -->
+            <div class="col">
+                <!--内容区-->
+                <article>
+                    <h1 style="text-align:center;">Api接口文档(含离线接口)</h1>
 
+                    <link rel="stylesheet" href="Scripts/editormd/css/editormd.css" />
+                    <script src="Scripts/editormd/examples/js/jquery.min.js"></script>
+                    <script src="Scripts/editormd/lib/marked.min.js"></script>
+                    <script src="Scripts/editormd/lib/prettify.min.js"></script>
+                    <script src="Scripts/editormd/lib/raphael.min.js"></script>
+                    <script src="Scripts/editormd/lib/underscore.min.js"></script>
+                    <script src="Scripts/editormd/lib/sequence-diagram.min.js"></script>
+                    <script src="Scripts/editormd/lib/flowchart.min.js"></script>
+                    <script src="Scripts/editormd/lib/jquery.flowchart.min.js"></script>
+                    <script src="Scripts/editormd/editormd.js"></script>
 
-         //postman file
-        $('#postmanCollection').click(function () {
-            var context = sers.postman.apiDescToPostmanConfig(apiDescs);
-            context = JSON.stringify(context);
-            sers.SaveFile(context, sers.postman.collectionConfig.fileName);
-        });
+                    <script src="Scripts/util/lith.js"></script>
 
-        $('#postmanEnvironment').click(function () {
-            var context = sers.postman.environmentConfig.value;
-            context = JSON.stringify(context);
-            sers.SaveFile(context, sers.postman.environmentConfig.fileName);
-        });
+                    <script src="Scripts/Sers/sers.apiClient.js"></script>
+                    <script src="Scripts/Sers/sers.ssApiDescToMd.js"></script>
+                    <script src="Scripts/Sers/sers.ssModel.js"></script>
 
-        //mdDownload
-        $('#mdDownload').click(function () {
-            sers.SaveFile(mdDoc, 'SersApiDoc(' + new Date().toJSON().slice(0, 10) + ').md');
-        });
+                    <script src="Scripts/Sers/sers.SaveFile.js"></script>
+                    <script src="Scripts/Sers/sers.postman.js"></script>
 
+                    <style type="text/css">
+                        #title a {
+                            text-decoration: none;
+                        }
+                    </style>
+                    <div id="test-editormd-view" style="width: 95%;">
+                    </div>
 
+                    <script type="text/javascript">
+                        //加载apiStation
+                        sers.apiClient.apiStation_getAll(function (apiRet) {
+                            if (!apiRet.success) return;
 
+                            var html = '<a href="?" title="所有">所有</a> | ';
+                            var data = apiRet.data;
+                            for (var t in data) {
+                                var stationName = data[t].stationName;
+                                html += '<a href="?r=' + stationName + '" title="' + stationName + '">' + stationName + '</a> | ';
+                            }
+                            $('#apiStation').html(html);
+                        });
 
-        function removeOfflineApiService() {
 
-            if (!confirm('移除离线接口,移除后不可恢复,确定继续移除吗?')) return;
+                        //加载ApiDesc
+                        var apiDescs;
+                        var r = lith.document.url_GetArg('r');
+                        sers.apiClient.apiDesc_getAll({ r: r }, function (apiReturn) {
+                            apiDescs = apiReturn.data;
+                            var mdDoc = sers.ssApiDescsToMd(apiDescs);
 
-            sers.apiClient.apiDesc_removeOffline(function (apiRet) {
-                if (!apiRet.success) {
-                    alert('操作失败,请重试。' + ((apiRet.error || {}).errorMessage || ''));
-                    return;
-                }
-                location.reload();
-            });
-        }
+                            mdDoc = "[TOC]\n\n" + mdDoc
+
+                            editormd.markdownToHTML("test-editormd-view", {
+                                markdown: mdDoc,
+                                htmlDecode: true
+                            });
+                        });
+
+                        function openPostmanWeb(loadApi) {
+
+                            if (loadApi) {
+                                var context = sers.postman.apiDescToPostmanConfig(apiDescs);
+                                context = JSON.stringify(context, null, 2);
+                                localStorage.postmanCollection = context;
+
+                                context = sers.postman.environmentConfig.value;
+                                context = JSON.stringify(context, null, 2);
+                                localStorage.postmanEnvironment = context;
+                            }
+                            window.open('Scripts/PostmanWeb/postman.html');
+                        }
+
+
+                        //postman file
+                        $('#postmanCollection').click(function () {
+                            var context = sers.postman.apiDescToPostmanConfig(apiDescs);
+                            context = JSON.stringify(context);
+                            sers.SaveFile(context, sers.postman.collectionConfig.fileName);
+                        });
+
+                        $('#postmanEnvironment').click(function () {
+                            var context = sers.postman.environmentConfig.value;
+                            context = JSON.stringify(context);
+                            sers.SaveFile(context, sers.postman.environmentConfig.fileName);
+                        });
+
+                        //mdDownload
+                        $('#mdDownload').click(function () {
+                            sers.SaveFile(mdDoc, 'SersApiDoc(' + new Date().toJSON().slice(0, 10) + ').md');
+                        });
+
+                    </script>
+                </article>
+            </div>
+        </div>
+    </main>
+
+
+    <!-- Footer -->
+    <div class="container footer-container">
+        <footer class="footer">
+            <div class="footer-bottom">
+                <p class="text-center"> <a target="_blank" href="https://github.com/serset/Sers">github</a> &nbsp;&nbsp; <a target="_blank" href="https://serset.github.io">online doc</a>  &nbsp;&nbsp; email: serset@yeah.net </p>
+                <p class="text-center"><a href="#">Back to top</a></p>
+            </div>
+        </footer>
+    </div>
 
 
-    </script>
+    <!-- Bootcamp JavaScript -->
+    <!-- jQuery first, then Popper.js, then Bootstrap JS -->
+    <!--<script src="Scripts/blog/js/jquery-3.2.1.slim.min.js"></script>-->
+    <script src="Scripts/blog/js/popper.min.js"></script>
+    <script src="Scripts/blog/js/bootstrap.min.js"></script>
 
 </body>
 </html>

+ 243 - 0
dotnet/ServiceCenter/App.Gover.Gateway/wwwroot/_gover_/ApiStation.html

@@ -0,0 +1,243 @@
+<!doctype html>
+<html lang="zh-cn">
+<head>
+    <title>Sers Dashboard</title>
+
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+
+    <script src="Scripts/jquery/jquery.min.js"></script>
+
+    <!-- Main CSS -->
+    <link rel="stylesheet" href="Scripts/blog/css/style.css">
+
+    <!-- Font Awesome -->
+    <link href="Scripts/blog/css/font-awesome.min.css" rel="stylesheet">
+</head>
+
+<body>
+    <style>
+        .container {
+            max-width: 1920px !important;
+        }
+    </style>
+
+    <!-- Header -->
+    <div class="container">
+        <div class="header-wrap d-none d-md-block">
+            <div class="row">
+
+                <!-- Left header box -->
+                <header class="col-6 text-left">
+                    <h1><span> Sers </span> Dashboard </h1>
+                </header>
+
+            </div>
+        </div>
+    </div>
+
+
+    <!-- Main navigation -->
+    <div class="container navbar-container">
+        <nav class="navbar navbar-expand-md navbar-light">
+
+            <!-- Company name shown on mobile -->
+            <a class="navbar-brand d-md-none d-lg-none d-xl-none" href="#"><span> Sers </span> Dashboard </a>
+
+            <!-- Mobile menu toggle -->
+            <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#mainNavbar" aria-controls="mainNavbar" aria-expanded="false" aria-label="Toggle navigation">
+                <span class="navbar-toggler-icon"></span>
+            </button>
+
+            <!-- Main navigation items -->
+            <div class="collapse navbar-collapse" id="mainNavbar">
+                <ul class="navbar-nav mr-auto">
+                    <li class="nav-item active">
+                        <a class="nav-link" href="/">Home <span class="sr-only">(current)</span></a>
+                    </li>
+
+                    <li class="nav-item">
+                        <a class="nav-link" target="_blank" href="/_gover_/ActiveApiDoc.html">ActiveApiDoc</a>
+                    </li>
+
+                    <li class="nav-item">
+                        <a class="nav-link" target="_blank" href="/_gover_/ApiDoc.html">ApiDoc</a>
+                    </li>
+
+                    <li class="nav-item">
+                        <a class="nav-link" target="_blank" href="/_gover_/ApiStation.html">ApiStation</a>
+                    </li>
+
+                    <li class="nav-item">
+                        <a class="nav-link" target="_blank" href="/_gover_/ServiceStation.html">ServiceStation</a>
+                    </li>
+
+                    <li class="nav-item">
+                        <a class="nav-link" target="_blank" href="/_gover_/RateLimit.html">RateLimit</a>
+                    </li>
+
+                    <li class="nav-item">
+                        <a class="nav-link" target="_blank" href="/_gover_/Health.html">Health</a>
+                    </li>
+
+
+                    <li class="nav-item dropdown">
+                        <a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">Ext</a>
+                        <div class="dropdown-menu navbar-dark bg-primary">
+                            <a class="dropdown-item" target="_blank" href="/JsStation/JsStation.html">JsStation</a>
+                            <a class="dropdown-item" target="_blank" href="/MicroControl/mc.html">MicroControl</a>
+                            <a class="dropdown-item" target="_blank" href="/_robot_/TaskMng.html">Robot</a>
+                        </div>
+                    </li>
+
+                </ul>
+
+
+            </div>
+        </nav>
+    </div>
+
+    <!-- Jumbtron / Slider -->
+    <div class="jumbotron-wrap">
+        <div class="container">
+            <div class="jumbotron jumbotron-narrow static-slider">
+
+                <a href="#" onclick="apiStationFilter=null;reloadStations();" title="显示所有的Api站点">显示所有</a>
+
+                <a href="#" onclick="apiStationFilter=apiStationFilter_OnlyOnline;reloadStations();" title="仅显示在线的Api站点(apiNodeCount不为0)(默认为仅显示在线)">仅显示在线</a>
+ 
+                <a href="#" onclick="removeOfflineApi()">移除离线接口</a>
+            </div>
+        </div>
+    </div>
+    <!-- Main content area -->
+    <main class="container">
+        <div class="row">
+
+            <!-- Main content -->
+            <div class="col">
+                <!--内容区-->
+                <article>
+                    <h1 style="text-align:center;">Api站点管理</h1>
+
+                    <style>
+                        .line {
+                            border: 1px solid #cccccc;
+                            border-collapse: collapse;
+                        }                           
+                    </style>
+                    <script src="Scripts/vue/vue.js"></script>
+                    <!--<script src="Scripts/jquery/jquery.min.js"></script>-->
+
+                    <script src="Scripts/Sers/sers.apiClient.js"></script>
+                    <div id="stations">
+
+                        <div v-for="station in stations" style="width:300px;height:250px; float:left;margin:2px;padding:4px;word-wrap:break-word;" class="line">
+                            <font style="font-weight:bold;color:#e84855;">{{ station.stationName }} </font><br />
+                            called(err/sum) : {{(station.counter||{}).errorCount}}/ {{(station.counter||{}).sumCount}}<br />
+                            qps : {{station.qps}}     <br />
+                            apiService : {{station.apiServiceCount}}     <br />
+                            apiNode : {{station.apiNodeCount}}     <br />
+                            activeApiNode : {{station.activeApiNodeCount}}     <br />
+                            状态(正常|暂停) : {{station.status}}<br />
+                            操作 : <a href="#" @click="start(station)">打开</a>   <a href="#" @click="pause(station)">暂停</a><br />
+
+                        </div>
+                        <div style=" clear: both;"></div>
+                    </div>
+                    <script>
+
+
+                        var stations = new Vue({
+                            el: '#stations',
+                            data: {
+                                stations: []
+                            }, methods: {
+                                start: function (station) {
+                                    sers.apiClient.apiStation_start(station.stationName, function (data) {
+                                        rendStations();
+                                    });
+                                }, pause: function (station) {
+                                    sers.apiClient.apiStation_pause(station.stationName, function (data) {
+                                        rendStations();
+                                    });
+                                }
+                            }
+                        });
+
+
+                        function apiStationFilter_OnlyOnline(apiStations) {
+                            return apiStations.filter(function (item) { return item.apiNodeCount; });
+                        }
+
+                        var apiStationFilter = apiStationFilter_OnlyOnline;
+
+                        function reloadStations() {
+                            sers.apiClient.apiStation_getAll(function (apiRet) {
+                                var apiStations = apiRet.data;
+                                if (apiStationFilter) apiStations = apiStationFilter(apiStations);
+                                stations.stations = apiStations;
+                            });
+                        }
+
+                        reloadStations();
+
+
+                        var intervals = [];
+                        function startRefreshTask() {
+                            var interval = setInterval(reloadStations, 2000);
+                            intervals.push(interval);
+                        }
+                        function stopRefreshTask() {
+                            for (var t in intervals) {
+                                clearInterval(intervals[t]);
+                            }
+                            intervals = [];
+                        }
+
+                        startRefreshTask();
+
+
+
+
+
+                        function removeOfflineApi() {
+
+                            if (!confirm('移除离线接口,移除后不可恢复,确定继续移除吗?')) return;
+
+                            sers.apiClient.apiDesc_removeOffline(function (apiRet) {
+                                if (!apiRet.success) {
+                                    alert('操作失败,请重试。' + ((apiRet.error || {}).errorMessage || ''));
+                                    return;
+                                }
+                                alert('已成功移除离线接口');
+                            });
+                        }
+
+                    </script>
+                </article>
+            </div>
+        </div>
+    </main>
+
+
+    <!-- Footer -->
+    <div class="container footer-container">
+        <footer class="footer">
+            <div class="footer-bottom">
+                <p class="text-center"> <a target="_blank" href="https://github.com/serset/Sers">github</a> &nbsp;&nbsp; <a target="_blank" href="https://serset.github.io">online doc</a>  &nbsp;&nbsp; email: serset@yeah.net </p>
+                <p class="text-center"><a href="#">Back to top</a></p>
+            </div>
+        </footer>
+    </div>
+
+
+    <!-- Bootcamp JavaScript -->
+    <!-- jQuery first, then Popper.js, then Bootstrap JS -->
+    <!--<script src="Scripts/blog/js/jquery-3.2.1.slim.min.js"></script>-->
+    <script src="Scripts/blog/js/popper.min.js"></script>
+    <script src="Scripts/blog/js/bootstrap.min.js"></script>
+
+</body>
+</html>

+ 0 - 98
dotnet/ServiceCenter/App.Gover.Gateway/wwwroot/_gover_/ApiStationMng.html

@@ -1,98 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-
-<head>
-    <meta charset="UTF-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <meta http-equiv="X-UA-Compatible" content="ie=edge">
-    <title>Api站点管理</title>
-    <script src="Scripts/vue/vue.js"></script>
-    <script src="Scripts/jquery/jquery.min.js"></script>
- 
-    <script src="Scripts/Sers/sers.apiClient.js"></script>
-
-    <style>
-
-        .line {
-            border: 1px solid #cccccc;
-            border-collapse: collapse;
-        }
-    </style>
-</head>
-
-<body>
-
-    <h1>Api站点管理</h1>
-    <a href="#" onclick="apiStationFilter=null;reloadStations();" title="显示所有的Api站点">显示所有</a> 
-    <a href="#" onclick="apiStationFilter=apiStationFilter_OnlyOnline;reloadStations();" title="仅显示在线的Api站点(apiNodeCount不为0)(默认为仅显示在线)">仅显示在线</a>
-    <div id="stations">
-
-        <div v-for="station in stations" style="width:300px;height:250px; float:left;margin:2px;padding:4px;word-wrap:break-word;" class="line">
-            {{station.stationName}}     <br />
-            calledCount  err/sum:  {{(station.counter||{}).errorCount}}/ {{(station.counter||{}).sumCount}}<br />
-            qps:{{station.qps}}     <br />
-            apiServiceCount:{{station.apiServiceCount}}     <br />
-            apiNodeCount:{{station.apiNodeCount}}     <br />
-            activeApiNodeCount:{{station.activeApiNodeCount}}     <br />
-            状态:{{station.status}}(正常、暂停)<br />
-            操作:  <a href="#" @click="start(station)">打开</a>   <a href="#" @click="pause(station)">暂停</a><br />
-
-        </div>
-
-    </div>
-    <script>
-
-
-        var stations = new Vue({
-            el: '#stations',
-            data: {
-                stations: []
-            }, methods: {
-                start: function (station) {
-                    sers.apiClient.apiStation_start(station.stationName, function (data) {
-                        rendStations();
-                    });
-                }, pause: function (station) {
-                    sers.apiClient.apiStation_pause(station.stationName, function (data) {
-                        rendStations();
-                    });
-                }
-            }
-        });
-
-
-        function apiStationFilter_OnlyOnline(apiStations) {
-            return apiStations.filter(function (item) { return item.apiNodeCount; });
-        }
-
-        var apiStationFilter = apiStationFilter_OnlyOnline;
-
-        function reloadStations() {
-            sers.apiClient.apiStation_getAll(function (apiRet) {
-                var apiStations = apiRet.data;
-                if (apiStationFilter) apiStations = apiStationFilter(apiStations);
-                stations.stations = apiStations;
-            });
-        }
-
-        reloadStations();
-
-
-        var intervals = [];
-        function startRefreshTask() {
-            var interval = setInterval(reloadStations, 2000);
-            intervals.push(interval);
-        }
-        function stopRefreshTask() {
-            for (var t in intervals) {
-                clearInterval(intervals[t]);
-            }
-            intervals = [];
-        }
-
-        startRefreshTask();
-
-    </script>
-</body>
-
-</html>

+ 207 - 0
dotnet/ServiceCenter/App.Gover.Gateway/wwwroot/_gover_/Health.html

@@ -0,0 +1,207 @@
+<!doctype html>
+<html lang="zh-cn">
+<head>
+    <title>Sers Dashboard</title>
+
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+
+    <script src="Scripts/jquery/jquery.min.js"></script>
+
+    <!-- Main CSS -->
+    <link rel="stylesheet" href="Scripts/blog/css/style.css">
+
+    <!-- Font Awesome -->
+    <link href="Scripts/blog/css/font-awesome.min.css" rel="stylesheet">
+</head>
+
+<body>
+    <style>
+        .container {
+            max-width: 1920px !important;
+        }
+    </style>
+
+    <!-- Header -->
+    <div class="container">
+        <div class="header-wrap d-none d-md-block">
+            <div class="row">
+
+                <!-- Left header box -->
+                <header class="col-6 text-left">
+                    <h1><span> Sers </span> Dashboard </h1>
+                </header>
+
+            </div>
+        </div>
+    </div>
+
+
+    <!-- Main navigation -->
+    <div class="container navbar-container">
+        <nav class="navbar navbar-expand-md navbar-light">
+
+            <!-- Company name shown on mobile -->
+            <a class="navbar-brand d-md-none d-lg-none d-xl-none" href="#"><span> Sers </span> Dashboard </a>
+
+            <!-- Mobile menu toggle -->
+            <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#mainNavbar" aria-controls="mainNavbar" aria-expanded="false" aria-label="Toggle navigation">
+                <span class="navbar-toggler-icon"></span>
+            </button>
+
+            <!-- Main navigation items -->
+            <div class="collapse navbar-collapse" id="mainNavbar">
+                <ul class="navbar-nav mr-auto">
+                    <li class="nav-item active">
+                        <a class="nav-link" href="/">Home <span class="sr-only">(current)</span></a>
+                    </li>
+
+                    <li class="nav-item">
+                        <a class="nav-link" target="_blank" href="/_gover_/ActiveApiDoc.html">ActiveApiDoc</a>
+                    </li>
+
+                    <li class="nav-item">
+                        <a class="nav-link" target="_blank" href="/_gover_/ApiDoc.html">ApiDoc</a>
+                    </li>
+
+                    <li class="nav-item">
+                        <a class="nav-link" target="_blank" href="/_gover_/ApiStation.html">ApiStation</a>
+                    </li>
+
+                    <li class="nav-item">
+                        <a class="nav-link" target="_blank" href="/_gover_/ServiceStation.html">ServiceStation</a>
+                    </li>
+
+                    <li class="nav-item">
+                        <a class="nav-link" target="_blank" href="/_gover_/RateLimit.html">RateLimit</a>
+                    </li>
+
+                    <li class="nav-item">
+                        <a class="nav-link" target="_blank" href="/_gover_/Health.html">Health</a>
+                    </li>
+
+
+                    <li class="nav-item dropdown">
+                        <a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">Ext</a>
+                        <div class="dropdown-menu navbar-dark bg-primary">
+                            <a class="dropdown-item" target="_blank" href="/JsStation/JsStation.html">JsStation</a>
+                            <a class="dropdown-item" target="_blank" href="/MicroControl/mc.html">MicroControl</a>
+                            <a class="dropdown-item" target="_blank" href="/_robot_/TaskMng.html">Robot</a>
+                        </div>
+                    </li>
+
+                </ul>
+
+
+            </div>
+        </nav>
+    </div>
+
+    <!-- Jumbtron / Slider -->
+    <!--<div class="jumbotron-wrap">
+        <div class="container">
+            <div class="jumbotron jumbotron-narrow static-slider"> 
+            </div>
+        </div>
+    </div>-->
+
+    <!-- Main content area -->
+    <main class="container">
+        <div class="row">
+
+            <!-- Main content -->
+            <div class="col">
+                <!--内容区-->
+                <article>
+                    <h1 style="text-align:center;">服务中心-健康信息</h1>
+
+                    <style>
+                        .line {
+                            border: 1px solid #cccccc;
+                            border-collapse: collapse;
+                        }
+                    </style>
+                    <script src="Scripts/vue/vue.js"></script>
+                    <!--<script src="Scripts/jquery/jquery.min.js"></script>-->
+
+                    <script src="Scripts/Sers/sers.apiClient.js"></script>
+                    <div id="items">
+
+                        <div v-for="(item, name) in items" style="width:300px;height:200px; float:left;margin:2px;padding:4px;word-wrap:break-word;" class="line">
+                            <font style="font-weight:bold;color:#e84855;">{{ name }} </font><br />
+                            <table>
+                                <tr v-for="(value, key) in item">
+                                    <td> {{ key }} </td>
+                                    <td> : {{ value }}</td>
+                                </tr>
+                            </table>
+                        </div>
+
+                        <div style=" clear: both;"></div>
+                    </div>
+                    <script>
+
+
+                        var items = new Vue({
+                            el: '#items',
+                            data: {
+                                items: [
+                                    {                                        
+                                    }
+                                ]
+                            }
+                        });
+
+
+                        function rendItems() {
+                            sers.apiClient.post({
+                                api: '/_gover_/serviceCenter/healthInfo', onSuc: function (data) {                                    
+                                    items.items = data.data;
+                                }
+                            });
+                        }
+
+                        rendItems();
+
+
+                        var intervals = [];
+                        function startRefreshTask() {
+                            var interval = setInterval(rendItems, 2000);
+                            intervals.push(interval);
+                        }
+                        function stopRefreshTask() {
+                            for (var t in intervals) {
+                                clearInterval(intervals[t]);
+                            }
+                            intervals = [];
+                        }
+
+                        startRefreshTask();
+                    </script>
+
+                </article>
+            </div>
+        </div>
+    </main>
+
+
+    <!-- Footer -->
+    <div class="container footer-container">
+        <footer class="footer">
+            <div class="footer-bottom">
+                <p class="text-center"> <a target="_blank" href="https://github.com/serset/Sers">github</a> &nbsp;&nbsp; <a target="_blank" href="https://serset.github.io">online doc</a>  &nbsp;&nbsp; email: serset@yeah.net </p>
+                <p class="text-center"><a href="#">Back to top</a></p>
+            </div>
+        </footer>
+    </div>
+
+
+    <!-- Bootcamp JavaScript -->
+    <!-- jQuery first, then Popper.js, then Bootstrap JS -->
+    <!--<script src="Scripts/blog/js/jquery-3.2.1.slim.min.js"></script>-->
+    <script src="Scripts/blog/js/popper.min.js"></script>
+    <script src="Scripts/blog/js/bootstrap.min.js"></script>
+
+</body>
+</html>

+ 0 - 0
dotnet/ServiceCenter/App.Gover.Gateway/wwwroot/_gover_/RateLimitMng.html → dotnet/ServiceCenter/App.Gover.Gateway/wwwroot/_gover_/RateLimit.html


+ 0 - 109
dotnet/ServiceCenter/App.Gover.Gateway/wwwroot/_gover_/ServiceCenterHealth.html

@@ -1,109 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-
-<head>
-    <meta charset="UTF-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <meta http-equiv="X-UA-Compatible" content="ie=edge">
-    <title>服务中心-健康数据</title>
-    <script src="Scripts/vue/vue.js"></script>
-    <script src="Scripts/jquery/jquery.min.js"></script>
-
-
-    <script src="Scripts/Sers/sers.apiClient.js"></script>
-
-    <style>
-
-        .line {
-            border: 1px solid #cccccc;
-            border-collapse: collapse;
-        }
-    </style>
-</head>
-
-<body>
-
-    <h1>服务中心-健康数据</h1>
-
-    <div id="items">
-
-        <div v-for="item in items" style="width:300px;height:500px; float:left;margin:2px;padding:4px;word-wrap:break-word;" class="line">
-            {{ item.route }}  <br />
-            -----------------------<br />
-            <p v-html="item.html"></p>
-
-        </div>
-
-    </div>
-    <script>
-
-
-        var items = new Vue({
-            el: '#items',
-            data: {
-                items: [
-                    {
-                        connGuid: ''
-                    }
-                ]
-            }, methods: {
-                start: function (station) {
-                    sers.apiClient.serviceStation_start(station.connKey, function (data) {
-                        rendItems();
-                    });
-                }, pause: function (station) {
-                    sers.apiClient.serviceStation_pause(station.connKey, function (data) {
-                        rendItems();
-                    });
-                }
-            }
-        });
-
-
-        function rendItems() {
-            sers.apiClient.post({
-                api: '/_gover_/serviceCenter/healthInfo', onSuc: function (data) {
-                    var jsonInfos = data.data;
-                    var infos = [];
-                    for (var route in jsonInfos) {
-                        var html = '';
-                        var jsonInfo = jsonInfos[route];
-                        if (typeof (jsonInfo) == 'object') {
-                            for (var key in jsonInfo) {
-                                var value = jsonInfo[key];
-                                if (typeof (value) == 'object') value = JSON.stringify(value);
-                                html += key + ' ' + value + '<br/>';
-                            }
-                        } else {
-                            html += jsonInfo;
-                        }
-
-                        var info = { route: route, html: html };
-                        infos.push(info);
-
-                    }
-                    items.items = infos;
-                }
-            });
-        }
-
-        rendItems();
-
-
-        var intervals = [];
-        function startRefreshTask() {
-            var interval = setInterval(rendItems, 2000);
-            intervals.push(interval);
-        }
-        function stopRefreshTask() {
-            for (var t in intervals) {
-                clearInterval(intervals[t]);
-            }
-            intervals = [];
-        }
-
-        startRefreshTask();
-    </script>
-</body>
-
-</html>

+ 304 - 0
dotnet/ServiceCenter/App.Gover.Gateway/wwwroot/_gover_/ServiceStation.html

@@ -0,0 +1,304 @@
+<!doctype html>
+<html lang="zh-cn">
+<head>
+    <title>Sers Dashboard</title>
+
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+
+    <script src="Scripts/jquery/jquery.min.js"></script>
+
+    <!-- Main CSS -->
+    <link rel="stylesheet" href="Scripts/blog/css/style.css">
+
+    <!-- Font Awesome -->
+    <link href="Scripts/blog/css/font-awesome.min.css" rel="stylesheet">
+</head>
+
+<body>
+    <style>
+        .container {
+            max-width: 1920px !important;
+        }
+    </style>
+
+    <!-- Header -->
+    <div class="container">
+        <div class="header-wrap d-none d-md-block">
+            <div class="row">
+
+                <!-- Left header box -->
+                <header class="col-6 text-left">
+                    <h1><span> Sers </span> Dashboard </h1>
+                </header>
+
+            </div>
+        </div>
+    </div>
+
+
+    <!-- Main navigation -->
+    <div class="container navbar-container">
+        <nav class="navbar navbar-expand-md navbar-light">
+
+            <!-- Company name shown on mobile -->
+            <a class="navbar-brand d-md-none d-lg-none d-xl-none" href="#"><span> Sers </span> Dashboard </a>
+
+            <!-- Mobile menu toggle -->
+            <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#mainNavbar" aria-controls="mainNavbar" aria-expanded="false" aria-label="Toggle navigation">
+                <span class="navbar-toggler-icon"></span>
+            </button>
+
+            <!-- Main navigation items -->
+            <div class="collapse navbar-collapse" id="mainNavbar">
+                <ul class="navbar-nav mr-auto">
+                    <li class="nav-item active">
+                        <a class="nav-link" href="/">Home <span class="sr-only">(current)</span></a>
+                    </li>
+
+                    <li class="nav-item">
+                        <a class="nav-link" target="_blank" href="/_gover_/ActiveApiDoc.html">ActiveApiDoc</a>
+                    </li>
+
+                    <li class="nav-item">
+                        <a class="nav-link" target="_blank" href="/_gover_/ApiDoc.html">ApiDoc</a>
+                    </li>
+
+                    <li class="nav-item">
+                        <a class="nav-link" target="_blank" href="/_gover_/ApiStation.html">ApiStation</a>
+                    </li>
+
+                    <li class="nav-item">
+                        <a class="nav-link" target="_blank" href="/_gover_/ServiceStation.html">ServiceStation</a>
+                    </li>
+
+                    <li class="nav-item">
+                        <a class="nav-link" target="_blank" href="/_gover_/RateLimit.html">RateLimit</a>
+                    </li>
+
+                    <li class="nav-item">
+                        <a class="nav-link" target="_blank" href="/_gover_/Health.html">Health</a>
+                    </li>
+
+
+                    <li class="nav-item dropdown">
+                        <a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">Ext</a>
+                        <div class="dropdown-menu navbar-dark bg-primary">
+                            <a class="dropdown-item" target="_blank" href="/JsStation/JsStation.html">JsStation</a>
+                            <a class="dropdown-item" target="_blank" href="/MicroControl/mc.html">MicroControl</a>
+                            <a class="dropdown-item" target="_blank" href="/_robot_/TaskMng.html">Robot</a>
+                        </div>
+                    </li>
+
+                </ul>
+
+
+            </div>
+        </nav>
+    </div>
+
+    <!-- Jumbtron / Slider -->
+    <!--<div class="jumbotron-wrap">
+        <div class="container">
+            <div class="jumbotron jumbotron-narrow static-slider"> 
+            </div>
+        </div>
+    </div>-->
+
+    <!-- Main content area -->
+    <main class="container">
+        <div class="row">
+
+            <!-- Main content -->
+            <div class="col">
+                <!--内容区-->
+                <article>
+                    <h1 style="text-align:center;">服务站点管理</h1>
+
+                    <style>
+                        .line {
+                            border: 1px solid #cccccc;
+                            border-collapse: collapse;
+                        }
+                    </style>
+                    <script src="Scripts/vue/vue.js"></script>
+                    <!--<script src="Scripts/jquery/jquery.min.js"></script>-->
+
+                    <script src="Scripts/Sers/sers.apiClient.js"></script>
+                    <div id="stations">
+
+                        <div v-for="station in stations" style="width:300px;height:540px; float:left;margin:2px;padding:4px;word-wrap:break-word;" class="line">
+                            <font style="font-weight:bold;color:#e84855;">{{ (station.serviceStationInfo||{}).serviceStationName }} </font><br />
+                            {{station.apiStationNames}} <br />                            
+                            操作 : <a href="#" @click="start(station)">打开</a>   <a href="#" @click="pause(station)">暂停</a>  <a href="#" @click="stop(station)">强制关闭</a> 
+                            <br />
+                            <table>
+                                <tr>
+                                    <td> 状态(正常|暂停) </td>
+                                    <td> : {{station.status}}  </td>
+                                </tr>     
+                                <tr>
+                                    <td> stationVersion </td>
+                                    <td> : {{ (station.serviceStationInfo||{}).stationVersion }} </td>
+                                </tr>
+                                <tr>
+                                    <td> startTime </td>
+                                    <td> : {{station.startTime}} </td>
+                                </tr>                          
+                            </table>
+                            -----------------------<br />
+                            <table>
+                                <tr>
+                                    <td> qps </td>
+                                    <td> : {{station.qps}} </td>
+                                </tr>
+                                <tr>
+                                    <td> apiNode </td>
+                                    <td> : {{station.apiNodeCount}} </td>
+                                </tr>
+                                <tr>
+                                    <td> activeApiNode </td>
+                                    <td> : {{station.activeApiNodeCount}}    </td>
+                                </tr>
+                                <tr>
+                                    <td> called(err/sum) </td>
+                                    <td> : {{(station.counter||{}).errorCount}}/{{(station.counter||{}).sumCount}} </td>
+                                </tr>
+                            </table>
+                            -----------------------<br />
+                            <table>
+                                <tr>
+                                    <td> MachineName </td>
+                                    <td> : {{ getStringByPath(station,'deviceInfo.MachineName')}} </td>
+                                </tr>
+                                <tr>
+                                    <td> cpuUsage </td>
+                                    <td> : {{ getFloatByPath(station,'usageStatus.cpuUsage') }} %  </td>
+                                </tr>
+                                <tr>
+                                    <td> memoryUsage </td>
+                                    <td> : {{ getFloatByPath(station,'usageStatus.memoryUsage') }} %  </td>
+                                </tr>
+                            </table>
+                            -----------------------<br />
+                            <table>
+                                <tr>
+                                    <td> deviceKey </td>
+                                    <td> : <font :title="(station.deviceInfo||{}).deviceKey">{{((station.deviceInfo||{}).deviceKey||'').substr(0,4) }} </font></td>
+                                </tr>
+                                <tr>
+                                    <td> serviceStationKey </td>
+                                    <td> : <font :title="(station.serviceStationInfo||{}).serviceStationKey">{{((station.serviceStationInfo||{}).serviceStationKey||'').substr(0,4) }} </font></td>
+                                </tr>
+                                <tr>
+                                    <td> connKey </td>
+                                    <td> : <font :title="station.connKey">{{(station.connKey||'').substr(0,4) }} </font></td>
+                                </tr>
+                            </table>
+                            <br /> <!--{{station.deviceInfo}}-->
+                        </div>
+
+
+                        <div style=" clear: both;"></div>
+                    </div>
+                    <script>
+
+                        // getFloatByPath({a:{b:'12.525'}},'a.b');
+                        function getFloatByPath(obj, path, fixed) {
+                            var items = path.split('.');
+                            for (var i in items) {
+                                if (!obj) return '';
+                                obj = obj[items[i]];
+                            }
+                            obj = parseFloat(obj);
+                            return isNaN(obj) ? '' : obj.toFixed(isNaN(fixed) ? 2 : fixed);
+                        }
+
+                        function getStringByPath(obj, path) {
+                            var items = path.split('.');
+                            for (var i in items) {
+                                if (!obj) return '';
+                                obj = obj[items[i]];
+                            }
+                            return '' + obj;
+                        }
+
+
+                        var stations = new Vue({
+                            el: '#stations',
+                            data: {
+                                stations: [
+                                    {
+                                    }
+                                ]
+                            }, methods: {
+                                getFloatByPath: getFloatByPath,
+                                getStringByPath: getStringByPath,
+
+                                start: function (station) {
+                                    sers.apiClient.serviceStation_start(station.connKey, function (data) {
+                                        rendStations();
+                                    });
+                                }, pause: function (station) {
+                                    sers.apiClient.serviceStation_pause(station.connKey, function (data) {
+                                        rendStations();
+                                    });
+                                }, stop: function (station) {
+                                    if (!confirm('手动关闭服务站点后,服务站点不一定会自动重新连接,确定继续吗?')) return;
+                                    sers.apiClient.serviceStation_stop(station.connKey, function (data) {
+                                        rendStations();
+                                    });
+                                }
+                            }
+                        });
+
+
+                        function rendStations() {
+                            sers.apiClient.serviceStation_getAll(function (data) {
+                                stations.stations = data.data;
+                            });
+                        }
+
+                        rendStations();
+
+
+                        var intervals = [];
+                        function startRefreshTask() {
+                            var interval = setInterval(rendStations, 2000);
+                            intervals.push(interval);
+                        }
+                        function stopRefreshTask() {
+                            for (var t in intervals) {
+                                clearInterval(intervals[t]);
+                            }
+                            intervals = [];
+                        }
+
+                        startRefreshTask();
+                    </script>
+                </article>
+            </div>
+        </div>
+    </main>
+
+
+    <!-- Footer -->
+    <div class="container footer-container">
+        <footer class="footer">
+            <div class="footer-bottom">
+                <p class="text-center"> <a target="_blank" href="https://github.com/serset/Sers">github</a> &nbsp;&nbsp; <a target="_blank" href="https://serset.github.io">online doc</a>  &nbsp;&nbsp; email: serset@yeah.net </p>
+                <p class="text-center"><a href="#">Back to top</a></p>
+            </div>
+        </footer>
+    </div>
+
+
+    <!-- Bootcamp JavaScript -->
+    <!-- jQuery first, then Popper.js, then Bootstrap JS -->
+    <!--<script src="Scripts/blog/js/jquery-3.2.1.slim.min.js"></script>-->
+    <script src="Scripts/blog/js/popper.min.js"></script>
+    <script src="Scripts/blog/js/bootstrap.min.js"></script>
+
+</body>
+</html>

+ 0 - 141
dotnet/ServiceCenter/App.Gover.Gateway/wwwroot/_gover_/ServiceStationMng.html

@@ -1,141 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-
-<head>
-    <meta charset="UTF-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <meta http-equiv="X-UA-Compatible" content="ie=edge">
-    <title>服务器站点管理</title>
-    <script src="Scripts/vue/vue.js"></script>
-    <script src="Scripts/jquery/jquery.min.js"></script>
-
-    <script src="Scripts/Sers/sers.apiClient.js"></script>
-
-    <style>
-
-        .line {
-            border: 1px solid #cccccc;
-            border-collapse: collapse;
-        }
-    </style>
-</head>
-
-<body>
-
-    <h1>服务站点管理</h1>
-
-    <div id="stations">
-
-        <div v-for="station in stations" style="width:300px;height:500px; float:left;margin:2px;padding:4px;word-wrap:break-word;" class="line">
-            {{ (station.serviceStationInfo||{}).serviceStationName }} <br />
-            {{station.apiStationNames}} <br />
-            stationVersion:{{ (station.serviceStationInfo||{}).stationVersion }}<br />
-            startTime:{{station.startTime}}<br />
-            状态:{{station.status}}(正常、暂停)<br />
-            操作:  <a href="#" @click="start(station)">打开</a>   <a href="#" @click="pause(station)">暂停</a>  <a href="#" @click="stop(station)">强制关闭</a> <br />
-            -----------------------<br />
-            qps:{{station.qps}} <br />
-            apiNodeCount:{{station.apiNodeCount}} <br />
-            activeApiNodeCount:{{station.activeApiNodeCount}}     <br />
-            calledCount  err/sum:  {{(station.counter||{}).errorCount}}/ {{(station.counter||{}).sumCount}}<br />
-            -----------------------<br />
-            MachineName:{{ getStringByPath(station,'deviceInfo.MachineName')}}<br />
-            cpuUsage:{{ getFloatByPath(station,'usageStatus.cpuUsage') }} %<br />
-            memoryUsage:{{ getFloatByPath(station,'usageStatus.memoryUsage') }} % <br />
-            -----------------------<br />
-            <table>
-                <tr>
-                    <td>deviceKey:</td>
-                    <td>  <font :title="(station.deviceInfo||{}).deviceKey">{{((station.deviceInfo||{}).deviceKey||'').substr(0,4) }} </font></td>
-                </tr>
-                <tr>
-                    <td>serviceStationKey: </td>
-                    <td><font :title="(station.serviceStationInfo||{}).serviceStationKey">{{((station.serviceStationInfo||{}).serviceStationKey||'').substr(0,4) }} </font></td>
-                </tr>
-                <tr>
-                    <td>connKey:</td>
-                    <td>  <font :title="station.connKey">{{(station.connKey||'').substr(0,4) }} </font></td>
-                </tr>
-            </table>
-            <br /> <!--{{station.deviceInfo}}-->
-        </div>
-
-    </div>
-    <script>
-
-        // getFloatByPath({a:{b:'12.525'}},'a.b');
-        function getFloatByPath(obj, path,fixed) {
-            var items = path.split('.');
-            for (var i in items) {
-                if (!obj) return '';
-                obj = obj[items[i]];                
-            }
-            obj = parseFloat(obj);
-            return isNaN(obj) ? '' : obj.toFixed(isNaN(fixed)?2:fixed);            
-        }
-
-         function getStringByPath(obj, path) {
-            var items = path.split('.');
-            for (var i in items) {
-                if (!obj) return '';
-                obj = obj[items[i]];                
-            }            
-            return ''+obj;            
-        }
-
-
-        var stations = new Vue({
-            el: '#stations',
-            data: {
-                stations: [
-                    {                         
-                    }
-                ]
-            }, methods: {
-                getFloatByPath: getFloatByPath,
-                getStringByPath: getStringByPath,
-
-                start: function (station) {
-                    sers.apiClient.serviceStation_start(station.connKey, function (data) {
-                        rendStations();
-                    });
-                }, pause: function (station) {
-                    sers.apiClient.serviceStation_pause(station.connKey, function (data) {
-                        rendStations();
-                    });
-                }, stop: function (station) {
-                    if (!confirm('手动关闭服务站点后,服务站点不一定会自动重新连接,确定继续吗?')) return;
-                    sers.apiClient.serviceStation_stop(station.connKey, function (data) {
-                        rendStations();
-                    });
-                }
-            }
-        });
-
-
-        function rendStations() {
-            sers.apiClient.serviceStation_getAll(function (data) {
-                stations.stations = data.data;
-            });
-        }
-
-        rendStations();
-
-
-        var intervals = [];
-        function startRefreshTask() {
-            var interval = setInterval(rendStations, 2000);
-            intervals.push(interval);
-        }
-        function stopRefreshTask() {
-            for (var t in intervals) {
-                clearInterval(intervals[t]);
-            }
-            intervals = [];
-        }
-
-        startRefreshTask();
-    </script>
-</body>
-
-</html>

+ 14 - 14
dotnet/ServiceCenter/App.Gover.Gateway/wwwroot/_gover_/blog.html

@@ -1,7 +1,7 @@
 <!doctype html>
 <html lang="zh-cn">
 <head>
-    <title>Sers控制台</title>
+    <title>Sers Dashboard</title>
 
     <meta charset="utf-8">
     <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
@@ -30,7 +30,7 @@
 
                 <!-- Left header box -->
                 <header class="col-6 text-left">
-                    <h1><span> Sers </span> 控制台 </h1>
+                    <h1><span> Sers </span> Dashboard </h1>
                 </header>
 
             </div>
@@ -43,7 +43,7 @@
         <nav class="navbar navbar-expand-md navbar-light">
 
             <!-- Company name shown on mobile -->
-            <a class="navbar-brand d-md-none d-lg-none d-xl-none" href="#"><span> Sers </span> 控制台 </a>
+            <a class="navbar-brand d-md-none d-lg-none d-xl-none" href="#"><span> Sers </span> Dashboard </a>
 
             <!-- Mobile menu toggle -->
             <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#mainNavbar" aria-controls="mainNavbar" aria-expanded="false" aria-label="Toggle navigation">
@@ -58,36 +58,36 @@
                     </li>
 
                     <li class="nav-item">
-                        <a class="nav-link" href="/?doc/md/Sers微服务快速入门/README.md">Active Api</a>
+                        <a class="nav-link" target="_blank" href="/_gover_/ActiveApiDoc.html">ActiveApiDoc</a>
                     </li>
 
                     <li class="nav-item">
-                        <a class="nav-link" href="/?doc/md/解析Sers微服务/README.md">Api</a>
+                        <a class="nav-link" target="_blank" href="/_gover_/ApiDoc.html">ApiDoc</a>
                     </li>
 
                     <li class="nav-item">
-                        <a class="nav-link" href="/?doc/md/Sqler/README.md">ApiStation</a>
+                        <a class="nav-link" target="_blank" href="/_gover_/ApiStation.html">ApiStation</a>
                     </li>
 
                     <li class="nav-item">
-                        <a class="nav-link" href="/?doc/md/Sqler/README.md">ServiceStation</a>
+                        <a class="nav-link" target="_blank" href="/_gover_/ServiceStation.html">ServiceStation</a>
                     </li>
 
                     <li class="nav-item">
-                        <a class="nav-link" href="/?doc/md/Sqler/README.md">服务限流</a>
+                        <a class="nav-link" target="_blank" href="/_gover_/RateLimit.html">RateLimit</a>
                     </li>
 
                     <li class="nav-item">
-                        <a class="nav-link" href="/?doc/md/Sqler/README.md">Health</a>
+                        <a class="nav-link" target="_blank" href="/_gover_/Health.html">Health</a>
                     </li>
 
 
                     <li class="nav-item dropdown">
                         <a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">Ext</a>
                         <div class="dropdown-menu navbar-dark bg-primary">
-                            <a class="dropdown-item" href="examples.html">JsStation</a>
-                            <a class="dropdown-item" href="three-column.html">MicroControl</a>
-                            <a class="dropdown-item" href="one-column.html">Robot</a>
+                            <a class="dropdown-item" target="_blank" href="/JsStation/JsStation.html">JsStation</a>
+                            <a class="dropdown-item" target="_blank" href="/MicroControl/mc.html">MicroControl</a>
+                            <a class="dropdown-item" target="_blank" href="/_robot_/TaskMng.html">Robot</a>
                         </div>
                     </li>
 
@@ -99,13 +99,13 @@
     </div>
 
     <!-- Jumbtron / Slider -->
-    <!--<div class="jumbotron-wrap">
+    <div class="jumbotron-wrap">
         <div class="container">
             <div class="jumbotron jumbotron-narrow static-slider">
                 <h1 class="text-center">Style examples</h1>
             </div>
         </div>
-    </div>-->
+    </div>
 
     <!-- Main content area -->
     <main class="container">

+ 219 - 29
dotnet/ServiceCenter/App.Gover.Gateway/wwwroot/_gover_/index.html

@@ -1,38 +1,228 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
+<!doctype html>
+<html lang="zh-cn">
 <head>
-    <meta charset="UTF-8" />
-    <title>index.html</title>
+    <title>Sers Dashboard</title>
+
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
 
     <script src="Scripts/jquery/jquery.min.js"></script>
-    <script src="Scripts/util/lith.js"></script>
-    <script type="text/javascript">
-
-        var user = lith.document.url_GetArg('user');
-        if (user) {
-            var date = new Date();
-            date.setSeconds(date.getSeconds() + 3600);
-            lith.cookie.set('user', user, date);
-        }
 
-    </script>
-    <style type="text/css">
-        a {
-            text-decoration: none;
-        }
-    </style>
+    <!-- Main CSS -->
+    <link rel="stylesheet" href="Scripts/blog/css/style.css">
+
+    <!-- Font Awesome -->
+    <link href="Scripts/blog/css/font-awesome.min.css" rel="stylesheet">
 </head>
+  
 <body>
-    login: <a href="index.html?user=admin_123456">login</a> <br />
-    1.ServiceCenterHealth:<a target="_blank" href="ServiceCenterHealth.html">ServiceCenterHealth</a> <br />
-    2.ApiDoc: <a target="_blank" href="ActiveApiDoc.html?r=_gover_">ActiveApiDoc</a> <a target="_blank" href="ApiDoc.html?r=_gover_">ApiDoc</a> <br />
+    <style>
+        .container {
+            max-width: 1920px !important;
+        }
+    </style>
+
+    <!-- Header -->
+    <div class="container">
+        <div class="header-wrap d-none d-md-block">
+            <div class="row">
+
+                <!-- Left header box -->
+                <header class="col-6 text-left">
+                    <h1><span> Sers </span> Dashboard </h1>
+                </header>
+
+            </div>
+        </div>
+    </div>
+
+
+    <!-- Main navigation -->
+    <div class="container navbar-container">
+        <nav class="navbar navbar-expand-md navbar-light">
+
+            <!-- Company name shown on mobile -->
+            <a class="navbar-brand d-md-none d-lg-none d-xl-none" href="#"><span> Sers </span> Dashboard </a>
+
+            <!-- Mobile menu toggle -->
+            <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#mainNavbar" aria-controls="mainNavbar" aria-expanded="false" aria-label="Toggle navigation">
+                <span class="navbar-toggler-icon"></span>
+            </button>
+
+            <!-- Main navigation items -->
+            <div class="collapse navbar-collapse" id="mainNavbar">
+                <ul class="navbar-nav mr-auto">
+                    <li class="nav-item active">
+                        <a class="nav-link" href="/">Home <span class="sr-only">(current)</span></a>
+                    </li>
+
+                    <li class="nav-item">
+                        <a class="nav-link" target="_blank" href="/_gover_/ActiveApiDoc.html">ActiveApiDoc</a>
+                    </li>
+
+                    <li class="nav-item">
+                        <a class="nav-link" target="_blank" href="/_gover_/ApiDoc.html">ApiDoc</a>
+                    </li>
+
+                    <li class="nav-item">
+                        <a class="nav-link" target="_blank" href="/_gover_/ApiStation.html">ApiStation</a>
+                    </li>
+
+                    <li class="nav-item">
+                        <a class="nav-link" target="_blank" href="/_gover_/ServiceStation.html">ServiceStation</a>
+                    </li>
+
+                    <li class="nav-item">
+                        <a class="nav-link" target="_blank" href="/_gover_/RateLimit.html">RateLimit</a>
+                    </li>
+
+                    <li class="nav-item">
+                        <a class="nav-link" target="_blank" href="/_gover_/Health.html">Health</a>
+                    </li>
+
+
+                    <li class="nav-item dropdown">
+                        <a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">Ext</a>
+                        <div class="dropdown-menu navbar-dark bg-primary">
+                            <a class="dropdown-item" target="_blank" href="/JsStation/JsStation.html">JsStation</a>
+                            <a class="dropdown-item" target="_blank" href="/MicroControl/mc.html">MicroControl</a>
+                            <a class="dropdown-item" target="_blank" href="/_robot_/TaskMng.html">Robot</a>
+                        </div>
+                    </li>
+
+                </ul>
+
+
+            </div>
+        </nav>
+    </div>
+
+    <!-- Jumbtron / Slider -->
+    <!--<div class="jumbotron-wrap">
+        <div class="container">
+            <div class="jumbotron jumbotron-narrow static-slider">              
+            </div>
+        </div>
+    </div>-->
+
+
+    <!-- Main content area -->
+    <main class="container">
+        <div class="row">
+
+            <!-- Main content -->
+            <div class="col">
+                <!--内容区-->
+                <article>
+
+                    <!--<script src="Scripts/jquery/jquery.min.js"></script>-->
+                    <script src="Scripts/util/lith.js"></script>
+                    <script type="text/javascript">
+
+                        var user = lith.document.url_GetArg('user');
+                        if (user) {
+                            var date = new Date();
+                            date.setSeconds(date.getSeconds() + 3600);
+                            lith.cookie.set('user', user, date);
+                        }
+
+                    </script>
+
+                    <div class="sidebar-box">
+                        <h4>login</h4>
+                        <ul>
+                            <li><a href="index.html?user=admin_123456">login</a></li>
+                        </ul>
+                    </div>
+
+                    <div class="sidebar-box">
+                        <h4>ApiDoc</h4>
+                        <ul>
+                            <li><a href="ActiveApiDoc.html?r=_gover_">ActiveApiDoc</a></li>
+                            <li><a href="ApiDoc.html?r=_gover_">ApiDoc</a></li>
+                        </ul>
+                    </div>
+
+                    <div class="sidebar-box">
+                        <h4>ApiStation</h4>
+                        <ul>
+                            <li><a href="ApiStation.html">ApiStation</a></li>
+                        </ul>
+                    </div>
+
+                    <div class="sidebar-box">
+                        <h4>ServiceStation</h4>
+                        <ul>
+                            <li><a href="ServiceStation.html">ServiceStation</a></li>
+                        </ul>
+                    </div>
+
+                    <div class="sidebar-box">
+                        <h4>服务限流</h4>
+                        <ul>
+                            <li><a href="RateLimit.html">RateLimit</a></li>
+                        </ul>
+                    </div>
+
+                    <div class="sidebar-box">
+                        <h4>Health</h4>
+                        <ul>
+                            <li><a href="Health.html">Health</a></li>
+                        </ul>
+                    </div>
+
+                    <div class="sidebar-box">
+                        <h4>Ext</h4>
+                        <ul>
+                            <li><a href="/JsStation/JsStation.html">JsStation</a></li>
+                            <li><a target="_blank" href="/MicroControl/mc.html">MicroControl</a></li>
+                            <li><a target="_blank" href="/_robot_/TaskMng.html">Robot</a></li>
+
+                        </ul>
+                    </div>
+                </article>
+
+                <!--Sers简介-->
+                <article>
+                    <h1>Sers简介</h1>
+                    Sers为一套跨平台跨语言的开源微服务架构协议<br />
+                    源码地址:<a target="_blank" href="https://github.com/serset/Sers">https://github.com/serset/Sers</a> <br />
+                    文档地址:<a target="_blank" href="https://serset.github.io">https://serset.github.io</a> <br />
+                    作者邮箱:serset@yeah.net <br /><br />
+
+                    <h2>Sers拥有如下特性:</h2>
+                    <ul>
+                        <li>跨语言、跨平台,目前已支持c#、java、c++、javascript</li>
+                        <li>高效高并发(百万并发),单机QPS:2000000</li>
+                        <li>轻量简洁,可javascript接入,代码不到1000行,压缩后只有8KB</li>
+                        <li>易扩展,可以自行扩展接入</li>
+                        <li>支持IOCP、ZMQ、WebSocket、NamedPipe、SharedMemory等多种通讯方式</li>
+                        <li>无代码侵入,.net core接入服务中心只需要1行代码</li>
+                    </ul>
+                </article>
+
+            </div>
+        </div>
+    </main>
+
+
+    <!-- Footer -->
+    <div class="container footer-container">
+        <footer class="footer">
+            <div class="footer-bottom">
+                <p class="text-center"> <a target="_blank" href="https://github.com/serset/Sers">github</a> &nbsp;&nbsp; <a target="_blank" href="https://serset.github.io">online doc</a>  &nbsp;&nbsp; email: serset@yeah.net </p>
+                <p class="text-center"><a href="#">Back to top</a></p>
+            </div>
+        </footer>
+    </div>
+
 
-    3.ApiStationMng: <a target="_blank" href="ApiStationMng.html">ApiStationMng</a>  <br />
-    4.ServiceStationMng:<a target="_blank" href="ServiceStationMng.html">ServiceStationMng</a> <br />
+    <!-- Bootcamp JavaScript -->
+    <!-- jQuery first, then Popper.js, then Bootstrap JS -->
+    <!--<script src="Scripts/blog/js/jquery-3.2.1.slim.min.js"></script>-->
+    <script src="Scripts/blog/js/popper.min.js"></script>
+    <script src="Scripts/blog/js/bootstrap.min.js"></script>
 
-    5.服务限流: <a target="_blank" href="RateLimitMng.html">RateLimitMng</a><br />
-    6.robot: <a target="_blank" href="/_robot_/TaskMng.html">robot-TaskMng</a><br />
-    7.MicroControl: <a target="_blank" href="/MicroControl/mc.html">MicroControl</a><br />
-    8.JsStation: <a target="_blank" href="/JsStation/JsStation.html">JsStation</a>
 </body>
-</html>
+</html>