327 lines
8.9 KiB
PHP
327 lines
8.9 KiB
PHP
|
<?php
|
|||
|
include( "head.php" );
|
|||
|
include( "groupList.php" );
|
|||
|
?>
|
|||
|
<div class="modal fade" id="netConfig" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
|
|||
|
<div class="modal-dialog" role="document">
|
|||
|
<div class="modal-content">
|
|||
|
<div class="modal-header">
|
|||
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
|
|||
|
<h4 class="modal-title" id="myModalLabel">
|
|||
|
<cn>网络设置</cn>
|
|||
|
<en>Network config</en>
|
|||
|
</h4>
|
|||
|
</div>
|
|||
|
<div class="modal-body">
|
|||
|
<form class="form-horizontal" id="net" role="form">
|
|||
|
<div class="form-group">
|
|||
|
<label class="col-sm-3 control-label">IP</label>
|
|||
|
<div class="col-sm-6">
|
|||
|
<input type="text" zcfg="ip" class="form-control"/>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="form-group">
|
|||
|
<label class="col-sm-3 control-label">
|
|||
|
<cn>掩码</cn>
|
|||
|
<en>Mask</en>
|
|||
|
</label>
|
|||
|
<div class="col-sm-6">
|
|||
|
<input type="text" zcfg="mask" class="form-control"/>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="form-group">
|
|||
|
<label class="col-sm-3 control-label">
|
|||
|
<cn>网关</cn>
|
|||
|
<en>Gateway</en>
|
|||
|
</label>
|
|||
|
<div class="col-sm-6">
|
|||
|
<input type="text" zcfg="gateway" class="form-control"/>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</form>
|
|||
|
</div>
|
|||
|
<div class="modal-footer">
|
|||
|
<button type="button" class="btn btn-warning" onclick="setNetwork();">
|
|||
|
<cn>保存</cn>
|
|||
|
<en>Save</en>
|
|||
|
</button>
|
|||
|
<button type="button" class="btn btn-default" data-dismiss="modal">
|
|||
|
<cn>关闭</cn>
|
|||
|
<en>Close</en>
|
|||
|
</button>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div id="alert"></div>
|
|||
|
<div class="row">
|
|||
|
<div class="col-lg-12">
|
|||
|
<div class="panel panel-default">
|
|||
|
<div class="panel-heading">
|
|||
|
<h3 class="panel-title">
|
|||
|
<cn>群组列表</cn>
|
|||
|
<en>Group list</en>
|
|||
|
</h3>
|
|||
|
</div>
|
|||
|
<div class="panel-body">
|
|||
|
<table class="table table-striped">
|
|||
|
<thead>
|
|||
|
<tr>
|
|||
|
<th>Mac</th>
|
|||
|
<th>IP</th>
|
|||
|
<th>
|
|||
|
<cn>设备型号</cn>
|
|||
|
<en>Device</en>
|
|||
|
</th>
|
|||
|
<th>
|
|||
|
<cn>软件版本</cn>
|
|||
|
<en>APP version</en>
|
|||
|
</th>
|
|||
|
<th>
|
|||
|
<cn>频道</cn>
|
|||
|
<en>Channels</en>
|
|||
|
</th>
|
|||
|
<th>
|
|||
|
<cn>操作</cn>
|
|||
|
<en>Operation</en>
|
|||
|
</th>
|
|||
|
</tr>
|
|||
|
</thead>
|
|||
|
<tbody id="groupList">
|
|||
|
</tbody>
|
|||
|
</table>
|
|||
|
<form class="form-inline" id="group">
|
|||
|
<div class="form-group">
|
|||
|
<label for="groupId">
|
|||
|
<cn>分组ID</cn>
|
|||
|
<en>Group ID</en>
|
|||
|
</label>
|
|||
|
<input type="text" class="form-control" id="groupId" zcfg="groupId" placeholder="">
|
|||
|
</div>
|
|||
|
<button type="button" class="btn btn-warning" onclick="updateGroup();">
|
|||
|
<cn>保存</cn>
|
|||
|
<en>Save</en>
|
|||
|
</button>
|
|||
|
<button type="button" id="research" class="btn btn-warning ">
|
|||
|
<cn>重新搜索</cn>
|
|||
|
<en>Search again</en>
|
|||
|
</button>
|
|||
|
</form>
|
|||
|
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="col-lg-12">
|
|||
|
<div class="panel panel-default">
|
|||
|
<div class="panel-heading">
|
|||
|
<h3 class="panel-title">
|
|||
|
<cn>频道表汇总</cn>
|
|||
|
<en>Channel collect</en>
|
|||
|
</h3>
|
|||
|
</div>
|
|||
|
<div class="panel-body">
|
|||
|
<table class="table table-striped">
|
|||
|
<thead>
|
|||
|
<tr>
|
|||
|
<th>
|
|||
|
<cn>序号</cn>
|
|||
|
<en>Number</en>
|
|||
|
</th>
|
|||
|
<th>
|
|||
|
<cn>频道名称</cn>
|
|||
|
<en>Channel name</en>
|
|||
|
</th>
|
|||
|
<th>URL</th>
|
|||
|
<th>
|
|||
|
<cn>排序</cn>
|
|||
|
<en>Sequence</en>
|
|||
|
</th>
|
|||
|
</tr>
|
|||
|
</thead>
|
|||
|
<tbody id="epgList">
|
|||
|
</tbody>
|
|||
|
</table>
|
|||
|
<form class="form-inline" id="group">
|
|||
|
<button type="button" class="btn btn-warning" onclick="getEPG();">
|
|||
|
<cn>汇总</cn>
|
|||
|
<en>Collect</en>
|
|||
|
</button>
|
|||
|
<button type="button" class="btn btn-warning" onclick="createEPG();">
|
|||
|
<cn>生成节目单</cn>
|
|||
|
<en>Create EPG</en>
|
|||
|
</button>
|
|||
|
<button type="button" class="btn btn-warning" onclick="syncEPG();">
|
|||
|
<cn>同步节目单</cn>
|
|||
|
<en>Sync EPG</en>
|
|||
|
</button>
|
|||
|
<a type="button" role="button" class="btn btn-default" href="config/epg.json" target="_blank">
|
|||
|
<cn>查看节目单</cn>
|
|||
|
<en>Show EPG</en>
|
|||
|
</a>
|
|||
|
</form>
|
|||
|
<div id="alertEPG"></div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<script src="js/zcfg.js"></script>
|
|||
|
<script type="text/javascript" language="javascript" src="js/confirm/jquery-confirm.min.js"></script>
|
|||
|
<script>
|
|||
|
var netConfig;
|
|||
|
var groupConfig;
|
|||
|
var curMac = "";
|
|||
|
|
|||
|
function updateGroup() {
|
|||
|
rpc( "group.update", [ groupConfig ], function ( data ) {
|
|||
|
$( "#research" ).click();
|
|||
|
} );
|
|||
|
}
|
|||
|
|
|||
|
function setNetwork() {
|
|||
|
rpc( "group.callSetNetwork", [ curMac, netConfig ] );
|
|||
|
}
|
|||
|
|
|||
|
function reboot( mac ) {
|
|||
|
$.confirm( {
|
|||
|
title: '<cn>重启</cn><en>Reboot</en>',
|
|||
|
content: '<cn>是否立即重启系统?</cn><en>Reboot immediately?</en>',
|
|||
|
buttons: {
|
|||
|
ok: {
|
|||
|
text: "<cn>确认重启</cn><en>Confirm</en>",
|
|||
|
btnClass: 'btn-warning',
|
|||
|
keys: [ 'enter' ],
|
|||
|
action: function () {
|
|||
|
rpc( "group.callReboot", [ mac ] );
|
|||
|
}
|
|||
|
},
|
|||
|
cancel: {
|
|||
|
text: "<cn>取消</cn><en>Cancel</en>",
|
|||
|
action: function () {
|
|||
|
console.log( 'the user clicked cancel' );
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
} );
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
function getNetwork( mac ) {
|
|||
|
$( '#netConfig' ).modal( 'show' );
|
|||
|
curMac = mac;
|
|||
|
rpc( "group.callGetNetwork", [ mac ], function ( data ) {
|
|||
|
netConfig = data;
|
|||
|
zcfg( "#net", netConfig );
|
|||
|
} );
|
|||
|
}
|
|||
|
|
|||
|
function showEPG( data ) {
|
|||
|
epgOrder = new Array();
|
|||
|
var html = '';
|
|||
|
for ( var i = 0; i < data.length; i++ ) {
|
|||
|
epgOrder.push( data[ i ].id );
|
|||
|
html += '<tr><td>' + ( i + 1 ) + '</td>';
|
|||
|
html += '<td>' + data[ i ].name + '</td>';
|
|||
|
html += '<td>' + data[ i ].url + '</td>';
|
|||
|
html += '<td><button type="button" onclick="epgSwap(0,'+i+');" class="btn btn-sm btn-default "><cn>置顶</cn><en>Top</en></button> ';
|
|||
|
html += '<button type="button" onclick="epgSwap('+(i-1)+','+i+');"" class="btn btn-sm btn-warning "><i class="fa fa-arrow-up"></i></button> ';
|
|||
|
html += '<button type="button" onclick="epgSwap('+(i+1)+','+i+');" class="btn btn-sm btn-warning "><i class="fa fa-arrow-down"></i></button> ';
|
|||
|
html += '<button type="button" onclick="epgSwap('+(data.length-1)+','+i+');" class="btn btn-sm btn-default "><cn>置底</cn><en>Bottom</en></button></td>';
|
|||
|
html += '</tr>';
|
|||
|
}
|
|||
|
$( "#epgList" ).html( html );
|
|||
|
}
|
|||
|
|
|||
|
var epgOrder;
|
|||
|
|
|||
|
function getEPG() {
|
|||
|
|
|||
|
rpc( "group.callGetEPG", null, function ( data ) {
|
|||
|
showEPG( data );
|
|||
|
} );
|
|||
|
}
|
|||
|
|
|||
|
function createEPG() {
|
|||
|
|
|||
|
rpc( "group.createEPG", null, function ( data ) {
|
|||
|
if(data)
|
|||
|
htmlAlert( "#alertEPG", "success", "<cn>生成节目单成功</cn><en>Create EPG success</en>!", "", 2000 );
|
|||
|
} );
|
|||
|
}
|
|||
|
|
|||
|
function syncEPG() {
|
|||
|
grpShow();
|
|||
|
}
|
|||
|
|
|||
|
function epgSwap( a, b ) {
|
|||
|
if(a<0 || b>=epgOrder.length)
|
|||
|
return;
|
|||
|
|
|||
|
var t = epgOrder[ a ];
|
|||
|
epgOrder[ a ] = epgOrder[ b ];
|
|||
|
epgOrder[ b ] = t;
|
|||
|
|
|||
|
rpc( "group.orderEPG", [ epgOrder ], function ( data ) {
|
|||
|
showEPG( data );
|
|||
|
} );
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
$( function () {
|
|||
|
navIndex( 5 );
|
|||
|
$.getJSON( "config/group.json", function ( result ) {
|
|||
|
groupConfig = result;
|
|||
|
zcfg( "#group", groupConfig );
|
|||
|
} );
|
|||
|
|
|||
|
function getList() {
|
|||
|
rpc( "group.getList", null, function ( data ) {
|
|||
|
var currentHtml = $( "#groupList" ).html();
|
|||
|
var html = '';
|
|||
|
for ( var i = 0; i < data.length; i++ ) {
|
|||
|
if ( data[ i ].info == undefined )
|
|||
|
continue;
|
|||
|
html += '<tr><td>' + data[ i ].mac + '</td>';
|
|||
|
html += '<td>' + data[ i ].ip + '</td>';
|
|||
|
|
|||
|
if(data[ i ].version && data[ i ].type){
|
|||
|
html += '<td>' + data[ i ].type + '</td>';
|
|||
|
html += '<td>' + data[ i ].version.app + '<br/>' + data[ i ].version.sdk + '</td>';
|
|||
|
}
|
|||
|
else{
|
|||
|
html += '<td></td>';
|
|||
|
html += '<td></td>';
|
|||
|
}
|
|||
|
|
|||
|
html += '<td>' + data[ i ].info.join() + '</td>';
|
|||
|
html += '<td><button type="button" onclick="getNetwork(\'' + data[ i ].mac + '\')" class="btn btn-sm btn-warning "><cn>网络设置</cn><en>Network config</en></button> <button type="button" onclick="reboot(\'' + data[ i ].mac + '\')" class="btn btn-sm btn-danger "><cn>重启</cn><en>Reboot</en></button></td></tr>';
|
|||
|
}
|
|||
|
if ( currentHtml != html )
|
|||
|
$( "#groupList" ).html( html );
|
|||
|
} );
|
|||
|
}
|
|||
|
getList();
|
|||
|
setInterval( getList, 3000 );
|
|||
|
|
|||
|
$( "#research" ).click( function ( e ) {
|
|||
|
rpc( "group.clearMember" );
|
|||
|
$( "#groupList" ).html( '' );
|
|||
|
} );
|
|||
|
|
|||
|
|
|||
|
$( "#grpSync" ).click( function ( e ) {
|
|||
|
for ( var i = 0; i < grpList.length; i++ ) {
|
|||
|
grpSetStatus( i, 0 );
|
|||
|
rpc( "group.callSyncEPG", [ grpList[ i ].mac ], function ( data, index ) {
|
|||
|
grpSetStatus( index, data ? 1 : 2 );
|
|||
|
}, i );
|
|||
|
}
|
|||
|
} );
|
|||
|
|
|||
|
|
|||
|
|
|||
|
} );
|
|||
|
</script>
|
|||
|
<?php
|
|||
|
include( "foot.php" );
|
|||
|
?>
|