659 lines
35 KiB
HTML
659 lines
35 KiB
HTML
<!DOCTYPE html>
|
|
<html xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/web/thymeleaf/layout" layout:decorator="layout/basic">
|
|
<head>
|
|
<title th:text="#{dashboard_en}"></title>
|
|
<meta name="viewport" content="width=device-width, initial-scale=.1" />
|
|
<!-- Spinners -->
|
|
<link rel="stylesheet" href="/css/spinners.css" th:href="@{/css/spinners.css}"/>
|
|
<!-- JS for This Page -->
|
|
<script th:inline="javascript" type="text/javascript">
|
|
/*<![CDATA[*/
|
|
var getBiztpMap = [[${getBiztpMap}]] ;
|
|
|
|
var i18n_strGOOD = /*[[#{good}]]*/ ;
|
|
var i18n_strBAD = /*[[#{bad}]]*/ ;
|
|
var i18n_alarm_clear = /*[[#{alarm.clear}]]*/;
|
|
var i18n_error = /*[[#{error}]]*/;
|
|
var fail = /*[[#{fail}]]*/ '';
|
|
var disconnected = /*[[#{disconnected}]]*/ '';
|
|
var file = /*[[#{file_en}]]*/ '';
|
|
var master_en = /*[[#{master_en}]]*/ '';
|
|
var master_core_en = /*[[#{master.core_en}]]*/ '';
|
|
var msg_info_connecte_store = /*[[#{msg.info.connecte.store}]]*/ '';
|
|
var msg_confirm_connecte_store_ESL_management_system = /*[[#{msg.confirm.connecte.store.ESL.management.system}]]*/;
|
|
|
|
var strFileType = function(fileType) {
|
|
//'HCORE','TE','FW', 'FONT', 'IMAGE', 'HCORE_CFG', 'POS_FILE', 'RVD_FILE', 'EMS', 'HCORE_DB', 'USER', 'SSL', 'ESNTL'
|
|
var mapper = {}
|
|
, i18n_template = /*[[#{template}]]*/
|
|
, i18n_group = /*[[#{group}]]*/;
|
|
mapper[ 'HCORE'.toUpperCase() ] = /*[[#{e_core}]]*/;
|
|
mapper[ 'TE'.toUpperCase() ] = i18n_template;
|
|
mapper[ 'FW'.toUpperCase() ] = /*[[#{firmware.label}]]*/;
|
|
mapper[ 'FONT'.toUpperCase() ] = /*[[#{font}]]*/;
|
|
mapper[ 'IMAGE'.toUpperCase() ] = /*[[#{image.code}]]*/;
|
|
mapper[ 'HCORE_CFG'.toUpperCase()] = /*[[#{hcore_cfg}]]*/;
|
|
mapper[ 'POS_FILE'.toUpperCase() ] = /*[[#{pos.file2}]]*/;
|
|
mapper[ 'RVD_FILE'.toUpperCase() ] = /*[[#{reservation.send}]]*/;
|
|
mapper[ 'EMS'.toUpperCase() ] = /*[[#{ems}]]*/;
|
|
mapper[ 'HCORE_DB'.toUpperCase() ] = 'DB' + /*[[#{backup}]]*/;
|
|
mapper[ 'USER'.toUpperCase() ] = /*[[#{user}]]*/;
|
|
mapper[ 'SSL'.toUpperCase() ] = /*[[#{ssl}]]*/;
|
|
mapper[ 'ESNTL'.toUpperCase() ] = i18n_template + ' ' + i18n_group;
|
|
return mapper[ fileType && fileType.toUpperCase() ];
|
|
}, strWorkType = function(workType) {
|
|
var mapper = {};
|
|
mapper[ 'Sync_complate'.toUpperCase() ] = '<span class="text-success">' + /*[[#{sync.complete}]]*/ + '</span>';
|
|
mapper[ 'Sync_start'.toUpperCase() ] = '<span class="text-primary">' + /*[[#{sync.start}]]*/ + '</span>';
|
|
mapper[ 'Sync_fail'.toUpperCase() ] = '<span class="text-danger">' + /*[[#{sync.fail}]]*/ + '</span>';
|
|
return mapper[ workType && workType.toUpperCase() ];
|
|
}, strAlarmType = function(alarmType){
|
|
return {
|
|
keep_alive_fail : /*[[#{alarm.status.type.keep_alive_fail}]]*/
|
|
, keep_alive_fail_esn : /*[[#{alarm.status.type.keep_alive_fail_esn}]]*/
|
|
, network_fail : /*[[#{alarm.status.type.network_fail}]]*/
|
|
, file_sync_fail : /*[[#{alarm.status.type.file_sync_fail}]]*/
|
|
, gateway_disconnected: /*[[#{alarm.status.type.gateway_disconnected}]]*/
|
|
, master_core_fail : /*[[#{alarm.status.type.master_core_fail}]]*/
|
|
, database_conn_fail : /*[[#{alarm.status.type.database_conn_fail}]]*/
|
|
, web_service_fail : /*[[#{alarm.status.type.web_service_fail}]]*/
|
|
, event_reset_fail : /*[[#{alarm.status.type.event_reset_fail}]]*/
|
|
, event_info_fail : /*[[#{alarm.status.type.event_info_fail}]]*/
|
|
, biztp_info_fail : /*[[#{alarm.status.type.biztp_info_fail}]]*/
|
|
, user_info_fail : /*[[#{alarm.status.type.user_info_fail}]]*/
|
|
, core_restart_sw : /*[[#{alarm.status.type.core_restart_sw}]]*/
|
|
, core_restart_db : /*[[#{alarm.status.type.core_restart_db}]]*/
|
|
, gateway_disconnected_storage : /*[[#{alarm.status.type.gateway_disconnected_storage}]]*/
|
|
}[ alarmType && alarmType.toLowerCase() ]
|
|
};
|
|
var activeDeviceTypeObj = new Object();
|
|
activeDeviceTypeObj.primary =/*[[#{active.device.type.primary}]]*/ '';
|
|
activeDeviceTypeObj.secondary =/*[[#{backup}]]*/ '';
|
|
activeDeviceTypeObj.single =/*[[#{active.device.type.single}]]*/ '';
|
|
|
|
/*]]>*/
|
|
</script>
|
|
<script src="/js/dashboard/dashboardAjax.js" th:src="@{/js/dashboard/dashboardAjax.js}" charset="UTF-8"></script>
|
|
<script src="/js/dashboard/dashboard.js" th:src="@{/js/dashboard/dashboard.js}" charset="UTF-8"></script>
|
|
<script src="/js/store/storeAjax.js" th:inline="javascript" th:src="@{/js/store/storeAjax.js}" charset="UTF-8"></script>
|
|
</head>
|
|
<body>
|
|
<div layout:fragment="content">
|
|
<input type="hidden" id="isAdmin" name="isAdmin" value="ADMIN" sec:authorize="hasAuthority('ADMIN')" />
|
|
<br />
|
|
<div class="container-fluid">
|
|
<div class="row">
|
|
<div id="dashboard_store_div" class="col-8">
|
|
|
|
|
|
<!-- 매장 현황 -->
|
|
<div class="card" >
|
|
<div class="card-header bg-custom-dark text-light">
|
|
<div class="float-left">
|
|
<h4 class="m-0 mr-2 fas fa-dice-one text-secondary"></h4>
|
|
</div>
|
|
<div class="float-left">
|
|
<h4 class="m-0" th:text="#{store.present_condition}"></h4>
|
|
</div>
|
|
<div class="float-right">
|
|
<div class="input-group input-group-sm" >
|
|
<input
|
|
type="text"
|
|
class="form-control form-control-sm border border-warning"
|
|
style="height:24px"
|
|
id="filter0"
|
|
th:placeholder="#{business.conditions.store.name}"
|
|
th:attr="aria-label=#{business.conditions.store.name}"
|
|
aria-describedby="btn-search-store-status" />
|
|
<div class="input-group-append">
|
|
<button type="button" class="btn btn-sm btn-outline-warning " id="btn-search-store-status">
|
|
<i class="fas fa-search"></i>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="float-right mr-2">
|
|
<div class="input-group input-group-sm" >
|
|
<div class="input-group-prepend">
|
|
<label class="input-group-text border border-warning" for="refreshTimeStoreStatus" th:text="#{refresh.time}" ></label>
|
|
</div>
|
|
<div class="input-group-append">
|
|
<select class="form-control form-control-sm border border-warning" id="refreshTimeStoreStatus">
|
|
<option value="" th:text="#{disabled}"></option>
|
|
<option value="10" th:text="'10' + #{data.time.second}" selected="selected"></option>
|
|
<option value="30" th:text="'30' + #{data.time.second}"></option>
|
|
<option value="60" th:text="' 1' + #{data.time.minute}"></option>
|
|
<option value="300" th:text="' 5' + #{data.time.minute}"></option>
|
|
<option value="600" th:text="'10' + #{data.time.minute}"></option>
|
|
<option value="1800" th:text="'30' + #{data.time.minute}"></option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- ADMIN -->
|
|
<div class="card-body p-0" style="height: 431px;overflow: hidden;" sec:authorize="hasAuthority('ADMIN')">
|
|
<table class="table table-sm table-striped table-bordered text-center m-0" id="storeStatusListHeader" >
|
|
<colgroup>
|
|
<col id="col_1" width="90px"></col>
|
|
<col id="col_2" width="70px"></col>
|
|
<col id="col_3" width="165px"></col>
|
|
<col id="col_4" width="60px"></col>
|
|
<col id="col_5" width="50px"></col>
|
|
<col id="col_6" width="50px"></col>
|
|
<col id="col_7" width="50px"></col>
|
|
<col id="col_8" width="50px"></col>
|
|
<col id="col_9" width="70px"></col>
|
|
<col id="col_10" width="70px"></col>
|
|
<col id="col_11" width="70px"></col>
|
|
<!-- <col id="col_12" width="55px"></col> -->
|
|
<!-- <col id="col_13" width="55px"></col> -->
|
|
<!-- <col id="col_14" width="60px"></col> -->
|
|
<col id="col_15" width="*"></col>
|
|
</colgroup>
|
|
<thead >
|
|
<tr >
|
|
<th colspan="3" class="border-bottom-0 align-middle" ><span th:text="#{store}"></span></th>
|
|
<th rowspan="2" onclick="dashboardSortData('store_status','active_device_type', doStoreSearch)" class="border-bottom-0 align-middle" style="cursor: pointer;"><span class="" th:utext="#{core}+'<br />'+#{type}"></span><i id="ss_active_device_type_updown" class="sort-updown icon-sort-up-down"></i></th>
|
|
<th rowspan="2" onclick="dashboardSortData('store_status','core_status', doStoreSearch)" class="border-bottom-0 align-middle" style="cursor: pointer;"><span class="" th:text="#{status}"></span> <div class="clear-fix"></div> <i id="ss_core_status_updown" class="sort-updown icon-sort-up-down"></i></th>
|
|
<th rowspan="2" onclick="dashboardSortData('store_status','gateway_status', doStoreSearch)" class="border-bottom-0 align-middle" style="cursor: pointer;"><span class="" th:text="#{gateway}"></span> <div class="clear-fix"></div> <i id="ss_gateway_status_updown" class="sort-updown icon-sort-up-down"></i></th>
|
|
<th rowspan="2" onclick="dashboardSortData('store_status','network_status', doStoreSearch)" class="border-bottom-0 align-middle" style="cursor: pointer;"><span class="" th:text="#{network}"></span> <div class="clear-fix"></div> <i id="ss_network_status_updown" class="sort-updown icon-sort-up-down"></i></th>
|
|
<th rowspan="2" onclick="dashboardSortData('store_status','sync_status', doStoreSearch)" class="border-bottom-0 align-middle" style="cursor: pointer;"><span class="" th:text="#{sync}"></span> <div class="clear-fix"></div> <i id="ss_sync_status_updown" class="sort-updown icon-sort-up-down"></i></th>
|
|
<th colspan="3" class="border-bottom-0 align-middle" ><div class="" th:text="#{tag}"></div></th>
|
|
<!-- <th colspan="3" class="border-bottom-0 align-middle" ><div class="" th:text="#{goods.change}"></div></th> -->
|
|
<!-- <th rowspan="2" class="border-bottom-0 align-middle" ><div class="" th:text="#{esl.file}"></div></th> -->
|
|
<th rowspan="2" onclick="dashboardSortData('store_status','update_time', doStoreSearch) " class="border-bottom-0 align-middle" style="cursor: pointer;"><span class="" th:text="#{update.date.time}"></span><i id="ss_update_time_updown" class="sort-updown icon-sort-up-down"></i></th>
|
|
</tr>
|
|
<tr>
|
|
<th onclick="dashboardSortData('store_status','biztp_code', doStoreSearch)" class="border-bottom-0 align-middle" style="cursor: pointer;"><span th:text="#{business.conditions}"></span><i id="ss_biztp_code_updown" class="sort-updown icon-sort-up-down"></i></th>
|
|
<th onclick="dashboardSortData('store_status','str_code', doStoreSearch)" class="border-bottom-0 align-middle" style="cursor: pointer;"><span th:text="#{code}"></span><i id="ss_str_code_updown" class="sort-updown icon-sort-up-down"></i></th>
|
|
<th onclick="dashboardSortData('store_status','str_name', doStoreSearch)" class="border-bottom-0 align-middle" style="cursor: pointer;"><span th:text="#{store.name}"></span><i id="ss_str_name_updown" class="sort-updown icon-sort-up-down"></i></th>
|
|
<th class="border-bottom-0 align-middle"><div class="" th:text="#{total}"></div></th>
|
|
<th class="border-bottom-0 align-middle"><div class="" th:text="#{in_use}"></div></th>
|
|
<th class="border-bottom-0 align-middle"><span class="" th:utext="#{onstorage}"></span></th>
|
|
<!--
|
|
<th class="border-bottom-0 align-middle"><div class="" th:text="#{product}"></div></th>
|
|
<th class="border-bottom-0 align-middle"><div class="" th:text="#{event}"></div></th>
|
|
<th class="border-bottom-0 align-middle"><span class="" th:utext="#{daliy.middle.sale.price}"></span></th>
|
|
-->
|
|
</tr>
|
|
</thead>
|
|
</table>
|
|
<div style="height: 380px;overflow-y: auto;">
|
|
<table class="table table-sm table-striped table-bordered text-center m-0" id="storeStatusList">
|
|
<colgroup >
|
|
<col id="col_1" width="90px"></col>
|
|
<col id="col_2" width="70px"></col>
|
|
<col id="col_3" width="165px"></col>
|
|
<col id="col_4" width="60px"></col>
|
|
<col id="col_5" width="50px"></col>
|
|
<col id="col_6" width="50px"></col>
|
|
<col id="col_7" width="50px"></col>
|
|
<col id="col_8" width="50px"></col>
|
|
<col id="col_9" width="70px"></col>
|
|
<col id="col_10" width="70px"></col>
|
|
<col id="col_11" width="70px"></col>
|
|
<!-- <col id="col_12" width="55px"></col> -->
|
|
<!-- <col id="col_13" width="55px"></col> -->
|
|
<!-- <col id="col_14" width="60px"></col> -->
|
|
<col id="col_15" width="*"></col>
|
|
</colgroup>
|
|
<tbody id="filterTarget0" class="spinner-1" ></tbody>
|
|
</table>
|
|
<h4 class="d-none h4 p-3 mt-0 bg-secondary text-center">
|
|
<i class="fas fa-exclamation-circle text-warning"></i>
|
|
<span class="text-light" th:text="#{msg.data.notfound}"></span>
|
|
</h4>
|
|
</div>
|
|
</div><!-- .card-body, sec:authorize="hasAuthority('ADMIN')" -->
|
|
|
|
<!-- MANAGER -->
|
|
<div class="card-body p-0" sec:authorize="hasAuthority('MANAGER')">
|
|
<table class="table table-sm table-striped table-bordered text-center m-0" id="storeStatusList">
|
|
<thead>
|
|
<tr>
|
|
<th colspan="3" class="border-bottom-0 align-middle" ><div class="" th:text="#{store}"></div></th>
|
|
<th colspan="6" class="border-bottom-0 align-middle" ><div class="" th:text="#{tag.present.condition}"></div></th>
|
|
</tr>
|
|
<tr>
|
|
<th onclick="dashboardSortData('store_info', 'biztp_code', doStoreSearch)" class="border-bottom-0 align-middle" style="cursor: pointer;"><span class="" th:text="#{business.conditions}"></span><i id="ssm_biztp_code_updown" class="sort-updown icon-sort-up-down"></i></th>
|
|
<th onclick="dashboardSortData('store_info', 'str_code' , doStoreSearch)" class="border-bottom-0 align-middle" style="cursor: pointer;"><span class="" th:text="#{code}"></span><i id="ssm_str_code_updown" class="sort-updown icon-sort-up-down"></i></th>
|
|
<th onclick="dashboardSortData('store_info', 'str_name' , doStoreSearch)" class="border-bottom-0 align-middle" style="cursor: pointer;"><span class="" th:text="#{store.name}"></span><i id="ssm_str_name_updown" class="sort-updown icon-sort-up-down"></i></th>
|
|
<!-- tag -->
|
|
<th class="border-bottom-0 align-middle" ><div class="" th:text="#{total}"></div></th>
|
|
<th class="border-bottom-0 align-middle" ><div class="" th:text="#{in_use}"></div></th>
|
|
<th class="border-bottom-0 align-middle" ><div class="" th:text="#{disconnected}"></div></th>
|
|
<th class="border-bottom-0 align-middle" ><div class="" th:text="#{unused}"></div></th>
|
|
<th class="border-bottom-0 align-middle" ><div class="" th:text="#{onstorage}"></div></th>
|
|
<th class="border-bottom-0 align-middle" ><div class="" th:text="#{low_battery}"></div></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody id="filterTarget0" class="spinner-1" ></tbody>
|
|
</table>
|
|
<h4 class="d-none h4 p-3 mt-0 bg-secondary text-center">
|
|
<i class="fas fa-exclamation-circle text-warning"></i>
|
|
<span class="text-light" th:text="#{msg.data.notfound}"></span>
|
|
</h4>
|
|
</div><!-- .card-body -->
|
|
|
|
<div class="card-footer bg-custom-dark text-light p-1">
|
|
<!--
|
|
<div class="float-left" sec:authorize="hasAuthority('ADMIN') or hasAuthority('MANAGER')">
|
|
<div id="footerGotoEmart"
|
|
data-toggle="tooltip"
|
|
data-placement="right"
|
|
style="cursor: pointer;" >
|
|
<span class="badge badge-warning m=0 p-1 pl-5 pr-5 text-custom-light" style="border: 1px solid #C0C0C0;">이마트</span> | 1092 | 죽전점
|
|
</div>
|
|
</div>
|
|
-->
|
|
<div class="float-right" id="storeStatusGoodBadData"></div>
|
|
</div><!-- .card-footer -->
|
|
</div><!-- .card -->
|
|
<br />
|
|
|
|
|
|
|
|
<!-- 알람 현황 -->
|
|
<div class="card" sec:authorize="hasAuthority('ADMIN')">
|
|
<div class="card-header bg-custom-dark text-light clearfix">
|
|
<div class="float-left">
|
|
<h4 class="m-0 mr-2 fas fa-dice-two text-secondary"></h4>
|
|
</div>
|
|
<div class="float-left">
|
|
<h4 class="m-0" th:text="#{alarm.present.condition}"></h4>
|
|
</div>
|
|
<div class="float-right">
|
|
<div class="input-group input-group-sm" >
|
|
<input
|
|
type="text"
|
|
class="form-control form-control-sm border border-warning"
|
|
style="height:24px"
|
|
id="filter1"
|
|
th:placeholder="#{search.placeholder.code.store.name}"
|
|
th:attr="aria-label=#{search}"
|
|
aria-describedby="btn-search-alaram-history" />
|
|
<div class="input-group-append">
|
|
<button type="button" class="btn btn-sm btn-outline-warning " id="btn-search-alaram-history">
|
|
<i class="fas fa-search"></i>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="float-right mr-2">
|
|
<div class="input-group input-group-sm" >
|
|
<div class="input-group-prepend">
|
|
<label class="input-group-text border border-warning" for="refreshTimeAlarmHistory" th:text="#{refresh.time}" ></label>
|
|
</div>
|
|
<div class="input-group-append">
|
|
<select class="form-control form-control-sm border border-warning" id="refreshTimeAlaramHistory">
|
|
<option value="" th:text="#{disabled}"></option>
|
|
<option value="10" th:text="'10' + #{data.time.second}" selected="selected"></option>
|
|
<option value="30" th:text="'30' + #{data.time.second}"></option>
|
|
<option value="60" th:text="' 1' + #{data.time.minute}"></option>
|
|
<option value="300" th:text="' 5' + #{data.time.minute}"></option>
|
|
<option value="600" th:text="'10' + #{data.time.minute}"></option>
|
|
<option value="1800" th:text="'30' + #{data.time.minute}"></option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div><!-- .card-header -->
|
|
<div class="card-body p-0" style="height: 212px;overflow: hidden;" >
|
|
<table class="table table-sm table-striped table-bordered text-center m-0">
|
|
<colgroup>
|
|
<col width="150px"></col>
|
|
<col width="100px"></col>
|
|
<col width="100px"></col>
|
|
<col width="220px"></col>
|
|
<col width="100px"></col>
|
|
<col width="*"></col>
|
|
</colgroup>
|
|
<thead>
|
|
<tr>
|
|
<th onclick="dashboardSortData('alarm_history','alarm_occure_time', doAlarmSearch)" class="border-bottom-0 align-middle p-2" style="cursor: pointer;"><span class="" th:text="#{alarm.occure.time}"></span><i id="ah_alarm_occure_time_updown" class="sort-updown icon-sort-up-down"></i></th>
|
|
<th onclick="dashboardSortData('alarm_history','object_type', doAlarmSearch)" class="border-bottom-0 align-middle p-2" style="cursor: pointer;"><span class="" th:text="#{object.type}"></span><i id="ah_object_type_updown" class="sort-updown icon-sort-up-down"></i></th>
|
|
<th onclick="dashboardSortData('alarm_history','object_id' , doAlarmSearch)" class="border-bottom-0 align-middle p-2" style="cursor: pointer;"><span class="" th:text="#{code}"></span><i id="ah_object_id_updown" class="sort-updown icon-sort-up-down"></i></th>
|
|
<th onclick="dashboardSortData('alarm_history','object_name', doAlarmSearch)" class="border-bottom-0 align-middle p-2" style="cursor: pointer;"><span class="" th:text="#{official.name}"></span><i id="ah_object_name_updown" class="sort-updown icon-sort-up-down"></i></th>
|
|
<th onclick="dashboardSortData('alarm_history','alarm_state', doAlarmSearch)" class="border-bottom-0 align-middle p-2" style="cursor: pointer;"><span class="" th:text="#{status}"></span><i id="ah_alarm_state_updown" class="sort-updown icon-sort-up-down"></i></th>
|
|
<th class="border-bottom-0 align-middle p-2" ><div class="" th:text="#{message}"></div></th>
|
|
</tr>
|
|
</thead>
|
|
</table>
|
|
<div style="height: 180px;overflow-y: auto;">
|
|
<table class="table table-sm table-striped table-bordered text-center m-0" id="alarmStatusList" >
|
|
<colgroup>
|
|
<col width="150px"></col>
|
|
<col width="100px"></col>
|
|
<col width="100px"></col>
|
|
<col width="220px"></col>
|
|
<col width="100px"></col>
|
|
<col width="*"></col>
|
|
</colgroup>
|
|
<tbody id="filterTarget1" class="spinner-1" ></tbody>
|
|
</table>
|
|
<h4 class="d-none h4 p-3 mt-0 bg-secondary text-center">
|
|
<i class="fas fa-exclamation-circle text-warning"></i>
|
|
<span class="text-light" th:text="#{msg.data.notfound}"></span>
|
|
</h4>
|
|
</div>
|
|
</div>
|
|
<div class="card-footer bg-custom-dark text-light text-right p-1"></div>
|
|
</div>
|
|
<br />
|
|
|
|
|
|
|
|
</div><!-- .col-8 -->
|
|
<div class="col-4" sec:authorize="hasAuthority('ADMIN')">
|
|
|
|
|
|
<div class="d-none"> 숨김!!
|
|
<!-- ESN 동작 현황 -->
|
|
<div class="card">
|
|
<div class="card-header bg-custom-dark text-light clearfix">
|
|
<div class="float-left">
|
|
<h4 class="m-0 mr-2 fas fa-dice-three text-secondary"></h4>
|
|
</div>
|
|
<div class="float-left">
|
|
<h4 class="m-0" th:text="#{esn.operation.status}"></h4>
|
|
</div>
|
|
<div class="float-right">
|
|
<div class="input-group input-group-sm" >
|
|
<div class="input-group-prepend">
|
|
<label class="input-group-text border border-warning" for="refreshTimeOperationStatus" th:text="#{refresh.time}" ></label>
|
|
</div>
|
|
<select class="form-control form-control-sm border border-warning" id="refreshTimeOperationStatus">
|
|
<option value="" th:text="#{disabled}"></option>
|
|
<option value="10" th:text="'10' + #{data.time.second}" selected="selected"></option>
|
|
<option value="30" th:text="'30' + #{data.time.second}"></option>
|
|
<option value="60" th:text="'1' + #{data.time.minute}"></option>
|
|
<option value="300" th:text="'5' + #{data.time.minute}"></option>
|
|
<option value="600" th:text="'10' + #{data.time.minute}"></option>
|
|
<option value="1800" th:text="'30' + #{data.time.minute}"></option>
|
|
</select>
|
|
<div class="input-group-append">
|
|
<button type="button" class="btn btn-sm btn-outline-warning " id="btn-search-operation-status">
|
|
<i class="fas fa-redo-alt"></i>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div><!-- .card-header -->
|
|
<div class="card-body p-0">
|
|
<table class="table table-sm table-striped table-bordered text-center m-0">
|
|
<colgroup>
|
|
<col width="130px" ></col>
|
|
<col width="65px" ></col>
|
|
<col width="65px" ></col>
|
|
<col width="65px" ></col>
|
|
<col width="*" ></col>
|
|
</colgroup>
|
|
<thead>
|
|
<tr>
|
|
<th onclick="dashboardSortData('poscvt_status', 'poscvt_name', doPosCVTSearch)" class="border-bottom-0 align-middle p-2" style="cursor: pointer;"><span class="" th:text="#{division}"></span><i id="ps_poscvt_name_updown" class="sort-updown icon-sort-up-down"></i></th>
|
|
<th onclick="dashboardSortData('poscvt_status','status', doPosCVTSearch)" class="border-bottom-0 align-middle p-2" style="cursor: pointer;"><span class="" th:text="#{status}"></span><i id="ps_status_updown" class="sort-updown icon-sort-up-down"></i></th>
|
|
<th onclick="dashboardSortData('poscvt_status','version', doPosCVTSearch)" class="border-bottom-0 align-middle p-2" style="cursor: pointer;"><span class="" th:text="#{version}"></span><i id="ps_version_updown" class="sort-updown icon-sort-up-down"></i></th>
|
|
<th onclick="dashboardSortData('poscvt_status','network_status',doPosCVTSearch)" class="border-bottom-0 align-middle p-2" style="cursor: pointer;"><span class="" th:text="#{network}"></span><i id="ps_network_status_updown" class="sort-updown icon-sort-up-down"></i></th>
|
|
<th onclick="dashboardSortData('poscvt_status','last_update_time',doPosCVTSearch)" class="border-bottom-0 align-middle p-2" style="cursor: pointer;"><span class="" th:text="#{update.date.time}"></span><i id="ps_last_update_time_updown" class="sort-updown icon-sort-up-down"></i></th>
|
|
</tr>
|
|
</thead>
|
|
</table>
|
|
<div style="height: 51px;overflow-y: auto;">
|
|
<table class="table table-sm table-striped table-bordered text-center m-0" id="esnOperationStatusList">
|
|
<colgroup>
|
|
<col width="130px" ></col>
|
|
<col width="65px" ></col>
|
|
<col width="65px" ></col>
|
|
<col width="65px" ></col>
|
|
<col width="*" ></col>
|
|
</colgroup>
|
|
<tbody class="spinner-1" ></tbody>
|
|
</table>
|
|
<h4 class="d-none h4 p-3 mt-0 bg-secondary text-center">
|
|
<i class="fas fa-exclamation-circle text-warning"></i>
|
|
<span class="text-light" th:text="#{msg.data.notfound}"></span>
|
|
</h4>
|
|
</div>
|
|
</div><!-- .card-body -->
|
|
<div class="card-footer bg-custom-dark text-light text-right p-1"></div>
|
|
</div><!-- .card -->
|
|
<br />
|
|
</div><!-- .d-none (숨김!!) -->
|
|
|
|
|
|
<!-- ESN 동작 이력 -->
|
|
<div class="card">
|
|
<div class="card-header bg-custom-dark text-light clearfix">
|
|
<div class="float-left">
|
|
<h4 class="m-0 mr-2 fas fa-dice-four text-secondary"></h4>
|
|
</div>
|
|
<div class="float-left">
|
|
<h4 class="m-0" th:text="#{esn.operation.history}"></h4>
|
|
</div>
|
|
<div class="float-right">
|
|
<div class="input-group input-group-sm" >
|
|
<div class="input-group-prepend">
|
|
<label class="input-group-text border border-warning" for="refreshTimeOperationHistory" th:text="#{refresh.time}" ></label>
|
|
</div>
|
|
<select class="form-control form-control-sm border border-warning" id="refreshTimeOperationHistory">
|
|
<option value="" th:text="#{disabled}"></option>
|
|
<option value="10" th:text="'10' + #{data.time.second}" selected="selected"></option>
|
|
<option value="30" th:text="'30' + #{data.time.second}"></option>
|
|
<option value="60" th:text="'1' + #{data.time.minute}"></option>
|
|
<option value="300" th:text="'5' + #{data.time.minute}"></option>
|
|
<option value="600" th:text="'10' + #{data.time.minute}"></option>
|
|
<option value="1800" th:text="'30' + #{data.time.minute}"></option>
|
|
</select>
|
|
<div class="input-group-append">
|
|
<button type="button" class="btn btn-sm btn-outline-warning" id="btn-search-operation-history">
|
|
<i class="fas fa-redo-alt"></i>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div><!-- .card-header -->
|
|
<div class="card-body p-0 " style="height: 536px;overflow: hidden;" >
|
|
<table class="table table-sm table-striped table-bordered text-center m-0">
|
|
<colgroup>
|
|
<col width="110px" ></col>
|
|
<col width="65px" ></col>
|
|
<col width="90px" ></col>
|
|
<col width="100px" ></col>
|
|
<col width="*" ></col>
|
|
</colgroup>
|
|
<thead>
|
|
<tr>
|
|
<th onclick="dashboardSortData('work_history', 'work_time', doWorkSearch)" class="border-bottom-0 align-middle p-2" style="cursor: pointer;"><span th:text="#{update.date.time}"></span><i id="wh_work_time_updown" class="sort-updown icon-sort-up-down"></i></th>
|
|
<th onclick="dashboardSortData('work_history', 'str_code' , doWorkSearch)" class="border-bottom-0 align-middle p-2" style="cursor: pointer;"><span th:text="#{code}"></span><i id="wh_str_code_updown" class="sort-updown icon-sort-up-down"></i></th>
|
|
<th onclick="dashboardSortData('work_history', 'str_name' , doWorkSearch)" class="border-bottom-0 align-middle p-2" style="cursor: pointer;"><span th:text="#{store}"></span><i id="wh_str_name_updown" class="sort-updown icon-sort-up-down"></i></th>
|
|
<th onclick="dashboardSortData('work_history', 'file_type', doWorkSearch)" class="border-bottom-0 align-middle p-2" style="cursor: pointer;"><span th:text="#{file.type}"></span><i id="wh_file_type_updown" class="sort-updown icon-sort-up-down"></i></th>
|
|
<th onclick="dashboardSortData('work_history', 'work_type', doWorkSearch)" class="border-bottom-0 align-middle p-2" style="cursor: pointer;"><span th:text="#{content}"></span><i id="wh_work_type_updown" class="sort-updown icon-sort-up-down"></i></th>
|
|
</tr>
|
|
</thead>
|
|
</table>
|
|
<div style="height: 504px;overflow-y: auto;">
|
|
<table class="table table-sm table-striped table-bordered text-center m-0" id="esnWorkHistory">
|
|
<colgroup>
|
|
<col width="110px" ></col>
|
|
<col width="65px" ></col>
|
|
<col width="90px" ></col>
|
|
<col width="100px" ></col>
|
|
<col width="*" ></col>
|
|
</colgroup>
|
|
<tbody class="spinner-1" ></tbody>
|
|
</table>
|
|
<h4 class="d-none h4 p-3 mt-0 bg-secondary text-center">
|
|
<i class="fas fa-exclamation-circle text-warning"></i>
|
|
<span class="text-light" th:text="#{msg.data.notfound}"></span>
|
|
</h4>
|
|
</div>
|
|
</div><!-- .card-body -->
|
|
<div class="card-footer bg-custom-dark text-light text-right p-1"></div>
|
|
</div><!-- .card -->
|
|
<br />
|
|
|
|
|
|
|
|
<!-- 서버 정보 -->
|
|
<div class="card">
|
|
<div class="card-header bg-custom-dark text-light clearfix">
|
|
<div class="float-left">
|
|
<h4 class="m-0 mr-2 fas fa-server text-secondary"></h4>
|
|
</div>
|
|
<div class="float-left">
|
|
<h4 class="m-0" th:text="#{server.info}"></h4>
|
|
</div>
|
|
<div class="float-right">
|
|
<div class="input-group input-group-sm" >
|
|
<div class="input-group-prepend">
|
|
<label class="input-group-text border border-warning" for="refreshServerInfo" th:text="#{refresh.time}" ></label>
|
|
</div>
|
|
<select class="form-control form-control-sm border border-warning" id="refreshServerInfo">
|
|
<option value="" th:text="#{disabled}" selected="selected"></option>
|
|
<option value="10" th:text="'10' + #{data.time.second}"></option>
|
|
<option value="30" th:text="'30' + #{data.time.second}"></option>
|
|
<option value="60" th:text="'1' + #{data.time.minute}"></option>
|
|
<option value="300" th:text="'5' + #{data.time.minute}"></option>
|
|
<option value="600" th:text="'10' + #{data.time.minute}"></option>
|
|
<option value="1800" th:text="'30' + #{data.time.minute}"></option>
|
|
</select>
|
|
<div class="input-group-append">
|
|
<button type="button" class="btn btn-sm btn-outline-warning" id="btn-search-server-info">
|
|
<!-- <i class="fas fa-search"></i> -->
|
|
<i class="fas fa-redo-alt"></i>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div><!-- .card-header -->
|
|
<div class="card-body p-0 " style="height: 125px;overflow: hidden;" >
|
|
<table class="table table-sm table-bordered text-center m-0" id="serverInfo">
|
|
<tbody class="spinner-1">
|
|
<tr>
|
|
<th class="align-middle p-2" th:text="#{os}"></th>
|
|
<td class="align-middle p-2">-</td>
|
|
</tr>
|
|
<tr>
|
|
<th class="align-middle p-2" th:text="#{number.of.processors}"></th>
|
|
<td class="align-middle p-2">-</td>
|
|
</tr>
|
|
<tr>
|
|
<th class="align-middle p-2" th:text="#{cpu.usage}">CPU Usage</th>
|
|
<td class="align-middle p-2">-</td>
|
|
</tr>
|
|
<tr>
|
|
<th class="align-middle p-2" th:text="#{memory.usage}"></th>
|
|
<td class="align-middle p-2">-</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div><!-- .card-body -->
|
|
<div class="card-footer bg-custom-dark text-light text-right p-1"></div>
|
|
</div><!-- .card -->
|
|
<br />
|
|
|
|
|
|
|
|
</div><!-- .col-4 -->
|
|
</div><!-- .row -->
|
|
|
|
|
|
|
|
|
|
|
|
<!-- The Modal: 패스워드 변경 필요 안내 메시지 -->
|
|
<div class="modal" id="isExpired" th:if="${isExpired}">
|
|
<div class="modal-dialog">
|
|
<div class="modal-content">
|
|
|
|
<!-- Modal Header -->
|
|
<div class="modal-header">
|
|
<h4 class="modal-title" th:text="#{confirm}"></h4>
|
|
<button type="button" class="close" data-dismiss="modal">×</button>
|
|
</div>
|
|
|
|
<!-- Modal body -->
|
|
<div class="modal-body">
|
|
<span th:text="#{msg.pwd.90days.passed}"></span>
|
|
<br />
|
|
<span th:text="#{msg.need.change.password}"></span>
|
|
</div>
|
|
|
|
<!-- Modal footer -->
|
|
<div class="modal-footer">
|
|
<button type="button" class="btn btn-outline-warning text-bold" data-dismiss="modal" th:text="#{confirm}"></button>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
</div><!-- .modal#isExpired -->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- str_code에 관한 동기화 실패 리스트 팝업 -->
|
|
<div class="modal" id="syncFailListModal">
|
|
<div class="modal-dialog">
|
|
<div class="modal-content">
|
|
|
|
<!-- Modal Header -->
|
|
<div class="modal-header bg-custom-dark">
|
|
<h4 class="modal-title text-light text-bold" th:text="#{sync.fail.list}"></h4>
|
|
<button type="button" class="close text-light text-bold" data-dismiss="modal" style="font-size: 24px;">×</button>
|
|
</div>
|
|
|
|
<!-- Modal body -->
|
|
<div class="modal-body m-0 p-0" style="width: 460px;">
|
|
<table class="table table-sm table-striped table-bordered table-hover text-center m-0">
|
|
<colgroup>
|
|
<col width="120px" />
|
|
<col width="110px" />
|
|
<col width="101px" />
|
|
<col width="*" />
|
|
</colgroup>
|
|
<thead>
|
|
<tr>
|
|
<th class="border-bottom-0 align-middle p-2" th:text="#{update.date.time}"></th>
|
|
<th class="border-bottom-0 align-middle p-2" th:text="#{file.type}"></th>
|
|
<th class="border-bottom-0 align-middle p-2" th:utext="#{core}+' '+#{file}+#{number}"></th>
|
|
<th class="border-bottom-0 align-middle p-2" th:utext="#{esn}+' '+#{file}+#{number}"></th>
|
|
</tr>
|
|
</thead>
|
|
</table>
|
|
<div class="" style="max-height: 260px;overflow-y: auto;">
|
|
<table class="table table-sm table-striped table-bordered table-hover text-center m-0">
|
|
<colgroup>
|
|
<col width="120px" />
|
|
<col width="110px" />
|
|
<col width="101px" />
|
|
<col width="*" />
|
|
</colgroup>
|
|
<tbody id="syncFailList"></tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Modal footer -->
|
|
<div class="modal-footer bg-custom-dark">
|
|
<button type="button" class="btn btn-outline-warning text-bold" data-dismiss="modal" th:text="#{confirm}"></button>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
</div><!-- .modal str_code에 관한 동기화 실패 -->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</div><!-- .container-fluid -->
|
|
</div><!-- fragment -->
|
|
</body>
|
|
</html> |