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" );
 | 
						||
?>
 |