bdcontract-web-ide/NodePortal_Gateway.html
2021-11-04 18:31:16 +08:00

1333 lines
86 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Cache-Control" content="no-cache"/>
<title>数瑞数联网网关Portal</title>
<script src="./jqueryui1.12/jquery-2.1.4.js"></script>
<script src="./js/popper.min.js"></script>
<link href="./jqueryui1.12/jquery-ui.css" rel="stylesheet">
<script src="./jqueryui1.12/jquery-ui.js"></script>
<script src="./jqueryui1.12/jquery.contextMenu.js"></script>
<link href="./jqueryui1.12/jquery.contextMenu.min.css" rel="stylesheet">
<script src="./jqueryui1.12/jquery.ui.position.js"></script>
<link href="./jqueryui1.12/jquery-editable-select.css" rel="stylesheet">
<script src="./jqueryui1.12/jquery-editable-select.js"></script>
<script src="./js/createWS.js"></script>
<script src="./js/cryptico.js"></script>
<script src="./js/commonutil.js"></script>
<script src="./js/bootstrap.min.js"></script>
<script src="./js/echarts.min.js"></script>
<script src="./js/echarts-gl.min.js"></script>
<script src="./js/echartsTheme.js"></script>
<script src="./js/sm2.js"></script>
<link rel="stylesheet" type="text/css"
href="./js/DataTables/datatables.min.css"/>
<link rel="stylesheet" type="text/css"
href="./js/DataTables/datatables.extra.css"/>
<script type="text/javascript"
src="./js/DataTables/jquery.dataTables.min.js"></script>
<script type="text/javascript"
src="./js/DataTables/dataTables.bootstrap4.min.js"></script>
<script src="./js/NodePortal.js"></script>
<script src="./js/nodePortalLog/initLog.js"></script>
<script src="./js/nodePortalLog/drawPic.js"></script>
<script src="./js/codeManage/projectManage.js"></script>
<script src="./js/codeManage/fileManage.js"></script>
<script src="./js/codeManage/selectManage.js"></script>
<script src="./js/codeManage/operManage.js"></script>
<script src="./js/codeManage/recoverFrame.js"></script>
<script src="./js/codeManage/contractAuthManage.js"></script>
<script src="./js/instanceManage/newManage.js"></script>
<script src="./js/NodeUser.js"></script>
<script src="./js/NodeConfig.js"></script>
<script src="./js/NodeContractInstances.js"></script>
<!-- <script src="./js/scide.js"></script> -->
<script src="./js/vue.js"></script>
<!-- <link
href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-switch/3.3.2/css/bootstrap3/bootstrap-switch.min.css"
rel="stylesheet">
<script
src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-switch/3.3.2/js/bootstrap-switch.min.js"></script> -->
<!-- <link rel="stylesheet" href="./css/bootstrap.min.css"> -->
<link rel="stylesheet" href="./css/loading.css">
<link rel="stylesheet" href="./css/common.css">
<link rel="stylesheet" href="./css/bootstrap.min.css">
<script src="./js/bootstrap.min.js"></script>
<link href="./css/bootstrap4-toggle.min.css" rel="stylesheet">
<script src="./js/bootstrap4-toggle.min.js"></script>
</head>
<body style="overflow-x: hidden;">
<header
class="headerFooter navbar navbar-default navbar-fixed-top navColor ">
<div class="col-4">
<a class="navbar-brand" href="#"> <img alt="Brand"
src="./images/logo-1.png" style="height: 30px">
</a> <span>数瑞数联网网关管理</span>
</div>
<div class="nav navbar-right userName" data-toggle="modal"
data-target="#pubkeyDialog">欢迎, {{shortName}}
</div>
</header>
<div class="container-fluid " id="main">
<div class="row h-100">
<div class="col-2 " id="horiNav">
<div class="nav flex-column nav-pills " id="v-pills-tab"
role="tablist" aria-orientation="vertical">
<a class="nav-link active" id="v-pills-nodeManager-tab"
data-toggle="pill" href="#v-pills-nodeManager" role="tab"
aria-controls="v-pills-nodeManager" aria-selected="false"
onclick="loadNodeConfig()"><img
src="./images/index/customer-support.png" class="iconimg">网关配置 </a>
<a class="nav-link" id="v-pills-userManager-tab"
data-toggle="pill" href="#v-pills-userManager" role="tab"
aria-controls="v-pills-userManager" aria-selected="true"
onclick="loadUserMan()"> <img
src="./images/index/operation.png" class="iconimg">用户管理
</a>
<a
class="nav-link" id="v-pills-logManager-tab" data-toggle="pill"
href="#v-pills-logManager" role="tab" onclick="initLocalLog()"
aria-controls="v-pills-logManager" aria-selected="false"><img
src="./images/index/writer.png" class="iconimg">监管日志管理
</a>
<a class="nav-link" id="v-pills-contractCodeManager-tab"
data-toggle="pill" href="#v-pills-contractCodeManager" role="tab"
aria-controls="v-pills-contractCodeManager"
onclick="initcodeManage()" aria-selected="false"><img
src="./images/index/analysis.png" class="iconimg">DO接入管理 </a> <a
class="nav-link" id="v-pills-contractInstance-tab"
data-toggle="pill" href="#v-pills-contractInstance" role="tab"
aria-controls="v-pills-contractInstance" aria-selected="false"
onclick="loadContractInstances()"><img
src="./images/index/network.png" class="iconimg">DO实例管理 </a>
</div>
</div>
<div class="col-10 h-100" style="padding: 0; overflow-y: scroll;">
<div class="tab-content" id="v-pills-tabContent">
<!-- 用户管理对应的DIV -->
<div class="tab-pane fade " id="v-pills-userManager"
role="tabpanel" aria-labelledby="v-pills-userManager-tab">
<div class="container">
<div class="row" style="margin-top: 30px">
<div class="col-sm-6">
<div class="card ">
<div class="card-body">
<h5 class="card-title">用户情况</h5>
<!-- <p class="card-text">管理员人数、节点人数、申请人数</p> -->
<div class="d-flex justify-content-center" id="RolePie">
<div class="spinner-border text-primary"
style="width: 4rem; height: 4rem;" role="status">
<span class="sr-only">Loading...</span>
</div>
</div>
</div>
</div>
</div>
<div class="col-sm-6">
<div class="card ">
<div class="card-body">
<h5 class="card-title">用户活跃统计</h5>
<!-- <p class="card-text">管理员人数、节点人数、申请人数</p> -->
<div class="container col-12" id="nodeUserActivityDiv"
style="padding: 0px">
<div class="d-flex justify-content-center">
<div class="spinner-border text-primary"
style="width: 4rem; height: 4rem;" role="status">
<span class="sr-only">Loading...</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- <div class="modal fade" id="dialog" tabindex="-1" role="dialog"
aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="dialogTitleH5">Modal title</h5>
<button type="button" class="close" data-dismiss="modal"
aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body" id="warning">...</div>
<div class="modal-footer">
<button type="button" class="btn btn-outline-secondary"
data-dismiss="modal">关闭</button>
<button type="button" id="dialogConfimBtn"
class="btn btn-outline-primary" data-dismiss="modal">确定</button>
</div>
</div>
</div>
</div> -->
<div class="row" style="margin-top: 30px">
<div class="col-sm-12">
<div class="card">
<div class="card-body">
<h5 class="card-title">授权用户管理</h5>
<div id="authorizedRole">
<div class="d-flex justify-content-center">
<div class="spinner-border text-primary"
style="width: 4rem; height: 4rem;" role="status">
<span class="sr-only">Loading...</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row" style="margin-top: 30px">
<div class="col-sm-12">
<div class="card ">
<div class="card-body">
<h5 class="card-title">未授权用户管理</h5>
<div id="unAuthorizedRole">
<div class="d-flex justify-content-center">
<div class="spinner-border text-primary"
style="width: 4rem; height: 4rem;" role="status">
<span class="sr-only">Loading...</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 合约启动管理管理 对应的DIV -->
<div class="tab-pane fade" id="v-pills-contractCodeManager"
role="tabpanel" aria-labelledby="v-pills-contractCodeManager-tab">
<div id="fileMenu" class=" container">
<div class="row h-100"
style="padding-top: 30px; padding-bottom: 30px">
<div class="col-sm-12" style="height: 100%">
<div id="chooseButtons" class="row" style="height: 40%">
<div class="col-sm-12">
<div class="card ">
<div class="card-body">
<div class="input-group mb3">
<div class="input-group-prepend">
<button id="ypkIsPrivate" class=" btn btn-outline-primary"
onclick="changeYpkPath()" data-toggle="tooltip"
data-original-title="点击可切换目录"
style="cursor:pointer">公共目录
</button>
</div>
<select id="selectYpkFile" class="custom-select"
style="appearance: none"
onchange="changeYpkName(this.value)">
<option selected>请选择ypk文件</option>
</select>
<select id="selectDumpPeriod" class="custom-select"
style="appearance: none">
<option selected>不保存</option>
<option selected>/12hours自动保存</option>
<option selected>/1day自动保存</option>
<option selected>/2days自动保存</option>
<option selected>选择状态保存模式</option>
</select>
<div class="input-group-append">
<button onclick="deleteYpk()"
type="button" title="删除该DOypk文件" data-toggle="tooltip"
class="btn btn-outline-primary">
<img alt="Brand"
src="./images/index/trash.png"
class="buttonimg">
</button>
</div>
<div class="input-group-append">
<button type="button" class="btn btn-outline-primary"
title="使用该ypk单点启动DO" data-toggle="tooltip"
onclick="startContractAtSlave()">
<img alt="Brand" src="./images/onlineide/start.png"
class="buttonimg">
</button>
</div>
</div>
</br>
<div class="input-group mb3">
<!-- <select id="selectUnits" class="custom-select" onclick="getNodeTrustUnits()" -->
<select id="selectUnits" class="custom-select"
style="appearance: none">
<option selected>选择节点集群</option>
<option></option>
</select>
<input class="form-control" id="selectUnitNum" type="number"
placeholder="选择节点数量" step="1" class="modal_input" min="1"
max="10"/>
<select class="custom-select" id="sequence"
style="appearance: none">
<option selected id="sequencing" value="0">选择集群DO模式</option>
<option value="1">RequestOnce</option>
<option value="2">ResponseOnce</option>
<option value="3">RARF</option>
<option value="4">RARH</option>
<option value="5">RARA</option>
<option value="6">Sharding</option>
</select>
<div class="btn-group mr-3" role="group"
style="margin-left: 2%">
<button type="button" class="btn btn-outline-primary"
data-toggle="tooltip" onclick="distributeContract()"
title="分发DOypk至集群其他节点">
<img alt="Brand"
src="./images/onlineide/video-files.png"
class="buttonimg">
</button>
<button type="button" class="btn btn-outline-primary"
data-toggle="tooltip"
onclick="startContractUnits()"
title="启动(集群)">
<img alt="Brand" src="./images/onlineide/ethernet.png"
class="buttonimg">
</button>
</div>
</div>
</br>
<div class="input-group mb3">
<select class="custom-select"
style="appearance: none">
<option selected value="0">选择共识算法</option>
<option value="0">无需共识</option>
<option value="1">PBFT</option>
<option value="2">RAFT</option>
<option value="3">Single</option>
</select>
<select id="network" class="custom-select" style="appearance: none">
<option selected value="0">选择通信方式</option>
<option value="0">TCP</option>
<option value="1">P2P</option>
</select>
<select id="response" class="custom-select"
style="appearance: none">
<option selected value="0">选择结果返回模式</option>
<option value="0">All</option>
<option value="1">Most</option>
<option value="2">First</option>
</select>
<div class="btn-group mr-3" role="group" style="margin-left: 2%">
<button type="button" class="btn btn-outline-primary"
data-toggle="tooltip"
onclick="startContractConfig()"
title="启动配置集群">
<img alt="Brand" src="./images/onlineide/configstart.png"
class="buttonimg">
</button>
</div>
</div>
</div>
</div>
</div>
</div>
<input id="uploadFileInput" style="display: none;"
type="file" name="file" onchange="uploadFile()">
<div id="displayBoxes" class="row d-flex align-items-stretch"
style="height: 60%">
<div class="col-sm-12">
<div id="resultArea">
<div class="card " style="height: 100%">
<div class="card-body" style="height: 100%">
<h5 class="card-title">
返回结果显示
</h5></br>
<label id="result" style="height: 80%; width: 100%"></label>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 合约实例管理 对应的DIV -->
<!-- TODO
合约实例DB-对应所有者用户/
申请新实例发送请求到数据库/
此页面中请求再ManagerAction中创建新方法/
licence是否依然使用39contract -->
<div class="tab-pane fade" id="v-pills-contractInstance"
role="tabpanel" aria-labelledby="v-pills-contractInstance-tab">
<div class="container">
<div class="row" style="margin-top: 30px">
<div class="col-sm-6">
<div class="card ">
<div class="card-body">
<h5 class="card-title">DO实例状态</h5>
<div class="container col-12" id="ciStatusPieDiv"
style="min-height: 150px; padding: 0px">
<div class="d-flex justify-content-center">
<div class="spinner-border text-primary"
style="width: 4rem; height: 4rem;" role="status">
<span class="sr-only">Loading...</span>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-sm-6">
<div class="card ">
<div class="card-body">
<h5 class="card-title">各类DO实例调用次数</h5>
<div class="container col-12" id="ciTimesPieDiv"
style="min-height: 150px; padding: 0px">
<div class="d-flex justify-content-center">
<div class="spinner-border text-primary"
style="width: 4rem; height: 4rem;" role="status">
<span class="sr-only">Loading...</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row" style="margin-top: 30px">
<div class="col-sm-12">
<div class="card ">
<div class="card-body" id="ciTabDiv">
<h5 class="card-title">DO实例列表</h5>
<div class="d-flex justify-content-center">
<div class="spinner-border text-primary"
style="width: 4rem; height: 4rem;" role="status">
<span class="sr-only">Loading...</span>
</div>
</div>
</div>
<!-- <div class="card-body">
<h5 class="card-title">合约实例列表</h5>
<div class="container" style="minHeight: 150px; padding: 0px">
<div class="d-flex justify-content-center">
<table class="table" id="contractinstancestable">
</table>
</div>
</div>
</div> -->
</div>
</div>
</div>
<div class="row" style="margin-top: 30px">
<div class="col-sm-12">
<div class="card ">
<div class="card-body">
<button onclick="killAllContract()" type="button"
class="btn btn-outline-primary">停止全部
</button>
</div>
<div class="card-body" id="cpTabDiv">
<div class="d-flex justify-content-center">
<div class="spinner-border text-primary"
style="width: 4rem; height: 4rem;" role="status">
<span class="sr-only">Loading...</span>
</div>
</div>
</div>
<!-- <div class="card-body">
<h5 class="card-title">合约实例列表</h5>
<div class="container" style="minHeight: 150px; padding: 0px">
<div class="d-flex justify-content-center">
<table class="table" id="contractinstancestable">
</table>
</div>
</div>
</div> -->
</div>
</div>
</div>
<div class="row" style="margin-top: 30px">
<div class="col-sm-12" id="contractinstance">
<div class="card ">
<div class="card-body">
<h5 class="card-title">实例详情</h5>
<div class="container">
<div class="row d-flex justify-content-flex-start">
<div class="input-group mb-3">
<div class="input-group-prepend">
<label class="input-group-text">选择实例</label>
</div>
<select id="selectContractInstance"
onchange="changeContractInstance(this.value)"
class="form-control">
<option selected>选择...</option>
</select>
<!-- only for test ADSP -->
<!--<div class="input-group-prepend">
<button onclick="startTestADSP()" type="button"
class="btn btn-outline-primary">开始测试
</button>
</div>-->
</div>
</div>
<div class="row d-flex justify-content-flex-start">
<h6 class="card-title" style="margin-top: 2%">实例调用</h6>
<div class="input-group mb-3">
<div class="input-group-prepend">
<select id="selectContractFunction" onchange=""
class="form-control">
<option selected>选择方法...</option>
</select>
</div>
<div class="input-group-append">
<span class="input-group-text">参数</span>
</div>
<input type="text" class="form-control" placeholder="输入参数" id="arg">
<input type="text" class="form-control col-2" placeholder="输入gas"
id="gasLimit">
<div class="input-group-append">
<div class="input-group-text">
<input type="checkbox" id="executeContractAsDebug"
aria-label="Checkbox for isDebug"
data-toggle="tooltip"
title="模拟调用"></input>
</div>
</div>
<div class="input-group-append">
<button onclick="executeContract()" type="button"
class="btn btn-outline-primary">执行
</button>
</div>
<div class="input-group-append">
<button onclick="executeContractWithDynamicResult()"
type="button" class="btn btn-outline-primary">动态分析执行
</button>
</div>
<div class="input-group-append">
<button onclick="executeContractConfig()"
type="button" class="btn btn-outline-primary">集群配置执行
</button>
</div>
</div>
</div>
<div class="row d-flex justify-content-flex-start">
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text" id="responseStatus">执行状态:</span>
</div>
<div class="input-group-prepend">
<span class="input-group-text" id="responseID">执行ID</span>
</div>
<div class="input-group-prepend">
<span class="input-group-text" id="responseTime">执行时间:</span>
</div>
<textarea class="form-control" id="responseArea"></textarea>
</div>
</div>
<div class="row d-flex justify-content-flex-start">
<h6 class="card-title" style="margin-top: 2%">Mask配置</h6>
<div class="input-group mb-3">
<div class="input-group-append">
<span class="input-group-text">参数</span>
</div>
<input type="text" class="form-control" placeholder="输入参数"
id="maskArg">
<div class="input-group-append">
<button onclick="getMask()" type="button"
class="btn btn-outline-primary">get
</button>
</div>
<div class="input-group-append">
<button onclick="setMask()"
type="button" class="btn btn-outline-primary">set
</button>
</div>
</div>
</div>
<div class="row d-flex justify-content-flex-start">
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text" id="maskStatus">当前配置:</span>
</div>
<textarea class="form-control" id="maskResponseArea"></textarea>
</div>
</div>
<div class="row d-flex justify-content-flex-start">
<h6 class="card-title" style="margin-top: 2%">Mock配置</h6>
<div class="input-group mb-3">
<div class="input-group-append">
<span class="input-group-text">参数</span>
</div>
<input type="text" class="form-control" placeholder="输入参数"
id="mockArg">
<div class="input-group-append">
<button onclick="getMock()" type="button"
class="btn btn-outline-primary">get
</button>
</div>
<div class="input-group-append">
<button onclick="setMock()"
type="button" class="btn btn-outline-primary">set
</button>
</div>
</div>
</div>
<div class="row d-flex justify-content-flex-start">
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text" id="mockStatus">当前配置:</span>
</div>
<textarea class="form-control" id="mockResponseArea"></textarea>
</div>
</div>
<div class="row d-flex justify-content-flex-start">
<h6 class="card-title" style="margin-top: 2%">权限管理</h6>
</div>
<div class="row d-flex justify-content-flex-start">
<div id="contractSetting" class="col-sm-4">
<div class="card " style="height: 100%">
<div class="card-body "
style="flex: 1 1 auto; overflow-y: auto">
<h6>
<b>当前DO权限</b>
</h6>
<div>
<ul class="list-group" id="ulPermission">
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="row d-flex justify-content-flex-start">
<h6 class="card-title" style="margin-top: 2%">状态管理</h6>
</div>
<div class="row d-flex justify-content-flex-start">
<div class="input-group mb-3">
<div class="input-group-prepend">
<button onclick="showChangeDumpPeriod()"
type="button" class="btn btn-outline-primary">
更改保存周期
</button>
</div>
<div class="input-group-append">
<button id="dumpButton" onclick="dumpContract()"
type="button" class="btn btn-outline-primary">
保存状态
</button>
</div>
<div class="input-group-append">
<span class="input-group-text">选择镜像文件:</span>
</div>
<select id="selectMemeryFiles" class="custom-select"
onchange="changeMemoryFiles(this.value)"
style="appearance:none; -webkit-appearance:none">
<option selected>选择时间</option>
</select>
<div class="input-group-append">
<button id="backtoButton" onclick="transferTo()"
type="button" class="btn btn-outline-primary">
恢复状态
</button>
</div>
<div class="input-group-append">
<button id="deleteIMGButton" onclick="deleteMemoryFile()"
type="button" class="btn btn-outline-primary">
删除该镜像
</button>
</div>
</div>
</div>
<div class="row d-flex justify-content-flex-start">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">结果:</span>
</div>
<textarea class="form-control" id="recoverResult"></textarea>
</div>
</div>
</div>
</div>
<br/>
<div class="container" style="padding: 0px; display:none">
<div class="d-flex justify-content-center">
<div class="input-group mb-3">
<div class="btn-group mr-3" role="group">
<button onclick="killAllContractLocal()"
type="button" class="btn btn-outline-secondary">停止全部
</button>
<button onclick="stopContractP2PTrustfully()"
type="button" class="btn btn-outline-secondary">停止可信DO
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 日志管理 对应的DIV -->
<div class="tab-pane fade" id="v-pills-logManager" role="tabpanel"
aria-labelledby="v-pills-logManager-tab">
<div class="container">
<div class="row" style="margin-top: 30px">
<div class="col-sm-6">
<div class="card ">
<div class="card-body">
<div class="card-title" style="margin-bottom: 50px">
<h5 class="card-title" id="logPie1" style="float: left">各类平台操作百分比</h5>
<div class="input-group mb-2"
style="float: right; width: 35%">
<div class="input-group-prepend">
<span class="input-group-text"
id="inputGroup-sizing-default">时间</span>
</div>
<select class="custom-select" id="pie1"
onchange="changePie1Time(this.value)"
style="appearance: none;">
<option selected>365天</option>
<option selected>30天</option>
<option selected>7天</option>
</select>
</div>
</div>
<div class="container col-12" id="auditLocalNodeLogPie"
style="min-height: 250px; padding: 0px">
<div class="d-flex justify-content-center">
<div class="spinner-border text-primary"
style="width: 4rem; height: 4rem;" role="status">
<span class="sr-only">Loading...</span>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-sm-6">
<div class="card ">
<div class="card-body">
<div class="card-title" style="margin-bottom: 50px">
<h5 class="card-title" id="logPie2" style="float: left">各类DO操作百分比</h5>
<div class="input-group mb-2"
style="float: right; width: 35%">
<div class="input-group-prepend">
<span class="input-group-text"
id="inputGroup-sizing-default">时间</span>
</div>
<select class="custom-select" id="pie2"
onchange="changePie2Time(this.value)"
style="appearance: none;">
<option selected>365天</option>
<option selected>30天</option>
<option selected>7天</option>
</select>
</div>
</div>
<div class="container col-12" id="auditLocalContractLogPie"
style="min-height: 250px; padding: 0px">
<div class="d-flex justify-content-center">
<div class="spinner-border text-primary"
style="width: 4rem; height: 4rem;" role="status">
<span class="sr-only">Loading...</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="container">
<div class="row" style="margin-top: 30px">
<div class="col-sm-6">
<div class="card ">
<div class="card-body">
<div class="card-title" style="margin-bottom: 50px">
<h5 class="card-title" id="logLine1" style="float: left">每日平台使用统计</h5>
<div class="input-group mb-2"
style="float: right; width: 35%">
<div class="input-group-prepend">
<span class="input-group-text"
id="inputGroup-sizing-default">时间</span>
</div>
<select class="custom-select" id="line1"
onchange="changeLine1Time(this.value)"
style="appearance: none;">
<option selected>365天</option>
<option selected>30天</option>
<option selected>7天</option>
</select>
</div>
</div>
<div class="container col-12" id="auditLocalNodeLogLine"
style="min-height: 250px; padding: 0px">
<div class="d-flex justify-content-center">
<div class="spinner-border text-primary"
style="width: 4rem; height: 4rem;" role="status">
<span class="sr-only">Loading...</span>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-sm-6">
<div class="card ">
<div class="card-body">
<div class="card-title" style="margin-bottom: 50px">
<h5 class="card-title" id="logLine2" style="float: left">每日DO操作统计</h5>
<div class="input-group mb-2"
style="float: right; width: 35%">
<div class="input-group-prepend">
<span class="input-group-text"
id="inputGroup-sizing-default">时间</span>
</div>
<select class="custom-select" id="line2"
onchange="changeLine2Time(this.value)"
style="appearance: none;">
<option selected>365天</option>
<option selected>30天</option>
<option selected>7天</option>
</select>
</div>
</div>
<div class="container col-12" id="auditLocalContractLogLine"
style="min-height: 250px; padding: 0px">
<div class="d-flex justify-content-center">
<div class="spinner-border text-primary"
style="width: 4rem; height: 4rem;" role="status">
<span class="sr-only">Loading...</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="container">
<div class="row" style="margin-top: 30px">
<div class="col-sm-12">
<div class="card">
<div class="card-body">
<div class="card-title" style="margin-bottom: 30px">
<h5 class="card-title" style="float: left">节点日志详情</h5>
<div class="input-group mb-2" style="float:right;width:25%">
<div class="input-group-prepend">
<span class="input-group-text"
id="inputGroup-sizing-default">时间范围(单位:日)</span>
</div>
<input type="text" class="form-control" id="nodeLogInput"></input>
<div class="input-group-append">
<button type="button" class="btn btn-outline-primary"
onclick="changeNodeLogTime()"
title="更新内容" data-toggle="tooltip">
<img src="./images/onlineide/refresh.png" class="buttonimg"/>
</button>
</div>
</div>
</div>
<div class="card-body" id="localNodeLog">
<div class="d-flex justify-content-center">
<div class="spinner-border text-primary"
style="width: 4rem; height: 4rem;" role="status">
<span class="sr-only">Loading...</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row" style="margin-top: 30px">
<div class="col-sm-12">
<div class="card ">
<div class="card-body">
<div class="card-title" style="margin-bottom: 30px">
<h5 class="card-title" style="float: left">DO日志详情</h5>
<div class="input-group mb-2" style="float:right;width:25%">
<div class="input-group-prepend">
<span class="input-group-text"
id="inputGroup-sizing-default">时间范围(单位:日)</span>
</div>
<input type="text" class="form-control" id="contractLogInput"></input>
<div class="input-group-append">
<button type="button" class="btn btn-outline-primary"
onclick="changeContractLogTime()"
title="更新内容" data-toggle="tooltip">
<img src="./images/onlineide/refresh.png" class="buttonimg"/>
</button>
</div>
</div>
</div>
<div class="card-body" id="localContractLog">
<div class="d-flex justify-content-center">
<div class="spinner-border text-primary"
style="width: 4rem; height: 4rem;" role="status">
<span class="sr-only">Loading...</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row" style="margin-top: 30px">
<div class="col-sm-12">
<div class="card ">
<div class="card-body">
<div class="card-title" style="margin-bottom: 30px">
<h5 class="card-title" style="float: left">账本日志审计</h5>
</div>
<div class="card-body" id="ledger">
<div class="d-flex justify-content-center">
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text"
id="inputGroup-sizing-default">账本:</span>
</div>
<input type="text" class="form-control" id="ledgerInput">
<div class="input-group-prepend">
<span class="input-group-text"
id="inputGroup-sizing-default">Hash:</span>
</div>
<input type="text" class="form-control" id="hashInput">
<div class="input-group-append">
<button class="btn btn-outline-secondary" type="button"
id="changeNodeName" onclick="queryDataByHash()">查询
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row" style="margin-top: 30px">
<div class="col-sm-12">
<div class="card ">
<div class="card-body">
<div class="card-title" style="margin-bottom: 30px">
<h5 class="card-title" style="float: left">账本日志详情</h5>
<div class="input-group mb-2" style="float:right;width:25%">
<div class="input-group-prepend">
<span class="input-group-text"
id="inputGroup-sizing-default">条数范围(单位:条)</span>
</div>
<input type="text" class="form-control" id="ledgerLogInput"></input>
<div class="input-group-append">
<button type="button" class="btn btn-outline-primary"
onclick="changeLedgerLogCount()"
title="更新内容" data-toggle="tooltip">
<img src="./images/onlineide/refresh.png" class="buttonimg"/>
</button>
</div>
</div>
</div>
<div class="card-body" id="ledgerLog">
<div class="d-flex justify-content-center">
<div class="spinner-border text-primary"
style="width: 4rem; height: 4rem;" role="status">
<span class="sr-only">Loading...</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 节点管理 对应的DIV -->
<div class="tab-pane fade show active" id="v-pills-nodeManager" role="tabpanel"
aria-labelledby="v-pills-nodeManager-tab">
<div class="container">
<div class="row" style="margin-top: 30px">
<div class="col-sm-12">
<div class="card">
<div class="card-body">
<h5 class="card-title">节点配置</h5>
<div class="card-body" id="centerportal">
<div class="d-flex justify-content-center">
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text"
id="inputGroup-sizing-default">节点名称</span>
</div>
<input type="text" class="form-control" id="nodeNameInput">
<div class="input-group-append">
<button class="btn btn-outline-secondary" type="button"
id="changeNodeName" onclick="changeNodeName()">修改
</button>
</div>
</div>
</div>
<div class="d-flex justify-content-center">
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text"
id="inputGroup-sizing-default">路由设置</span>
</div>
<input type="text" class="form-control" id="doipConfigInput">
<div class="input-group-append">
<button class="btn btn-outline-secondary" type="button"
id="changeDOIPConfig" onclick="changeDOIPConfig()">修改
</button>
</div>
</div>
</div>
<div class="d-flex justify-content-center" style="display:none">
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text"
id="inputGroup-sizing-default">内网地址</span>
</div>
<input type="text" class="form-control" id="ipPortInput">
<div class="input-group-append">
<button class="btn btn-outline-secondary" type="button"
id="changeIpPort" onclick="changeIpPort()">修改
</button>
</div>
</div>
</div>
<div class="d-flex justify-content-center">
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text"
id="inputGroup-sizing-default">PeerID</span>
</div>
<input type="text" class="form-control" id="peerIDInput">
</div>
</div>
<div class="d-flex justify-content-center">
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text"
id="inputGroup-sizing-default">YJS路径</span>
</div>
<input type="text" class="form-control" id="yjsInput">
<div class="input-group-append">
<button class="btn btn-outline-secondary" type="button"
id="changeYJSPath" onclick="changeYJSPath()">修改
</button>
</div>
</div>
</div>
<div class="d-flex justify-content-center">
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text"
id="inputGroup-sizing-default">MasterAddr</span>
</div>
<input type="text" class="form-control" id="masterAddrInput">
<div class="input-group-append">
<button class="btn btn-outline-secondary" type="button"
onclick="changeMasterAddress()">修改
</button>
</div>
</div>
</div>
<div class="d-flex justify-content-center">
<div class='input-group mb-3'>
<div class="input-group-prepend">
<span class="input-group-text"
id="inputGroup-sizing-default">加入网络</span>
</div>
<input type='text' class='form-control'
id='nodeCenterInput'>
<div class='input-group-append'>
<button class='btn btn-outline-secondary' type='button'
id='changeNodeCenter' onclick='changeNodeCenter()'>修改
</button>
</div>
</div>
</div>
<div class="d-flex justify-content-center">
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text"
id="inputGroup-sizing-default">账本节点</span>
</div>
<input type="text" class="form-control" placeholder="IP:Port 以空格间隔"
id="bdledgerPeersInput">
<div class='input-group-append'>
<button class='btn btn-outline-secondary' type='button'
id='changeBDledger' onclick='changeBDledger()'>修改
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row" style="margin-top: 30px; display:none;">
<div class="col-sm-12">
<div class="card">
<div class="card-body">
<h5 class="card-title">Licence配置</h5>
<div class="card-body" id="paths">
<div class="d-flex justify-content-center">
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text">Licence</span>
</div>
<textarea class="form-control" id="licence"
aria-label="Licence"></textarea>
</div>
</div>
<div class="d-flex justify-content-center">
<div class="input-group mb-3">
<span class="input-group-text">Licence过期时间 </span> <span
class="input-group-text" id="expireTime"></span>
</div>
</div>
<div class="d-flex justify-content-center">
<div class="input-group mb-3">
<button type="button" onclick="uploadLicence()"
class="btn btn-outline-secondary">设置Licence
</button>
<button onclick="submitReq()" type="button"
class="btn btn-outline-secondary">申请Licence
</button>
<button onclick="flushLicence()" type="button"
class="btn btn-outline-secondary">刷新申请状态
</button>
<button onclick="downloadUUID()" type="button"
class="btn btn-outline-secondary">下载节点ID文件
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 用于配置sm2密钥的对话框 -->
<div class="modal fade" id="pubkeyDialog" tabindex="-1" role="dialog"
aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLongTitle">用户信息</h5>
<button type="button" class="close" data-dismiss="modal"
aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<div class="row" style="padding-left: 16px; padding-right: 16px">
<div class="input-group mb-3">
<div class="input-group-prepend">
<label class="input-group-text" for="localKeyList">本地公钥</label>
</div>
<select class="custom-select"
aria-label="Example select with button addon"
style="appearance: none" v-model="selectedSM2Key"
@change="changeSM2Key($event)">
<option v-for="(item,index) in sm2KeyList" :key="index"
:value='item.id'>{{item.title}}
</option>
</select>
<div class="input-group-append">
<button class="btn btn-outline-primary" for="localKeyList"
v-on:click="exportPubkey">导出公钥
</button>
</div>
<div class="input-group-append">
<button class="btn btn-outline-danger" for="localKeyList"
v-on:click="deletePubkey">删除公钥
</button>
</div>
</div>
</div>
<div class="row" style="padding-left: 16px; padding-right: 16px">
<div class="input-group mb-1">
<div class="input-group-prepend">
<label class="input-group-text" for="localKeyList">当前SM2密钥</label>
</div>
<input type="text" class="form-control" placeholder="(请复制并妥善保存)"
disabled="disabled" aria-label=""
aria-describedby="basic-addon1">
<div class="input-group-append">
<button type="button" class="btn btn-outline-primary"
id="generatePubkeyBtn" v-on:click="generatePubkey">生成新公钥
</button>
<button type="button" class="btn btn-outline-primary"
data-dismiss="modal" id="importPubkeyBtn"
v-on:click="importPubkey">导入公钥
</button>
</div>
</div>
</div>
<textarea class="form-control mb-3" title="复制密钥,并妥善保存"
id="sm2KeyTextarea" v-model="sm2KeyStr"
style="width: 100%; min-height: 150px" rows="" cols="">
</textarea>
<div class="row" style="padding-left: 16px; padding-right: 16px;">
</div>
<div class="row" style="padding-left: 16px; padding-right: 16px">
<span>我的权限:{{myRole}}</span>
</div>
<div class="input-group">
<select id="inputGroupSelect04" v-model="test"
class="custom-select" style="appearance: none"
@change="changeProduct($event)">
<option v-for="(item,index) in productList" :key="index"
:value='item.id'>{{item.title}}
</option>
</select>
<div class="input-group-append">
<button class="btn btn-outline-primary" type="button"
v-on:click="applyRole">角色认证
</button>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Flexbox container for aligning the toasts -->
<div aria-live="polite" aria-atomic="true" aria-hidden="true"
class="d-flex justify-content-center align-items-center"
style="dispaly: none; min-height: 200px; position: absolute; top: 30%; left: 40%;"
aria-hidden="true">
<!-- Then put toasts within -->
<div id="alertDiv" class="toast fade hide" role="alert"
aria-live="assertive" autohide="false" aria-atomic="true"
style="min-width: 200px">
<div class="toast-header">
<strong class="mr-auto">{{toastTitle}}</strong>
<button type="button" class="ml-2 mb-1 close" data-dismiss="toast"
aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="toast-body">{{toastMessage}}</div>
</div>
</div>
<div class="modal fade" id="dialog" tabindex="-1" role="dialog"
aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="dialogTitleH5">Modal title</h5>
<button type="button" class="close" data-dismiss="modal"
aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body" id="dialogBodyDiv">...</div>
<div class="modal-footer">
<button type="button" class="btn btn-outline-secondary"
data-dismiss="modal">关闭
</button>
<button type="button" id="dialogConfimBtn"
class="btn btn-outline-primary" data-dismiss="modal">确定
</button>
</div>
</div>
</div>
</div>
<footer class="headerFooter" footermt-autopy-3>
<div class="row">
<div style="padding-left: -10px;" class="col-7">©2018-2020</div>
<div class="col-5" style="text-align:right">
Icons made by <a href="https://www.flaticon.com/authors/monkik"
title="monkik" style="color: white;">monkik</a> and
<a href="https://www.flaticon.com/authors/becris" style="color: white;" title="Becris">Becris</a> from <a
href="https://www.flaticon.com/" title="Flaticon"
style="color: white;">www.flaticon.com</a>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</div>
</div>
</footer>
<script>
const isBaaS = false
var h = document.body.clientHeight
- $("header").css("height").replace("px", "")
- $("footer").css("height").replace("px", "");
$("#main").css("height", h + "px");
init();
//initWSocket();
</script>
</body>
</html>