mirror of https://github.com/flucont/btcloud.git
				
				
			
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							276 lines
						
					
					
						
							9.4 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							276 lines
						
					
					
						
							9.4 KiB
						
					
					
				
								{extend name="admin/layout" /}
							 | 
						|
								{block name="title"}插件列表{/block}
							 | 
						|
								{block name="main"}
							 | 
						|
								<style>
							 | 
						|
								td{overflow: hidden;text-overflow: ellipsis;white-space: nowrap;max-width:340px;}
							 | 
						|
								.bt-ico-ask {
							 | 
						|
								  border: 1px solid #fb7d00;
							 | 
						|
								  border-radius: 8px;
							 | 
						|
								  color: #fb7d00;
							 | 
						|
								  cursor: help;
							 | 
						|
								  display: inline-block;
							 | 
						|
								  font-family: arial;
							 | 
						|
								  font-size: 11px;
							 | 
						|
								  font-style: normal;
							 | 
						|
								  height: 16px;
							 | 
						|
								  line-height: 16px;
							 | 
						|
								  margin-left: 5px;
							 | 
						|
								  text-align: center;
							 | 
						|
								  width: 16px
							 | 
						|
								}
							 | 
						|
								.bt-ico-ask:hover {
							 | 
						|
								  background-color: #fb7d00;
							 | 
						|
								  color: #fff
							 | 
						|
								}
							 | 
						|
								</style>
							 | 
						|
								<div class="modal fade" id="help" tabindex="-1" role="dialog">
							 | 
						|
									<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">帮助</h4>
							 | 
						|
											</div>
							 | 
						|
											<div class="modal-body">
							 | 
						|
												<p>“版本与状态”一列中,红色的按钮代表本地不存在该版本插件包,需要点击下载;绿色的按钮代表已存在。</p>
							 | 
						|
								                <p>官方插件包本地存储路径是/data/win/plugins/package/软件标识-版本号.zip,第三方插件包路径是/data/plugins/other/other/,对于部分包含二次验证的插件可以自行修改。</p>
							 | 
						|
											</div>
							 | 
						|
											<div class="modal-footer">
							 | 
						|
												<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
							 | 
						|
											</div>
							 | 
						|
										</div>
							 | 
						|
									</div>
							 | 
						|
								</div>
							 | 
						|
								<div class="container" style="padding-top:70px;">
							 | 
						|
									<div class="col-xs-12 center-block" style="float: none;">
							 | 
						|
								
							 | 
						|
								<div id="searchToolbar">
							 | 
						|
								<form onsubmit="return searchSubmit()" method="GET" class="form-inline">
							 | 
						|
								  <div class="form-group">
							 | 
						|
								    <label>搜索</label>
							 | 
						|
									<input type="text" class="form-control" name="keyword" placeholder="应用名称">
							 | 
						|
								  </div>
							 | 
						|
								  <div class="form-group">
							 | 
						|
									<select name="type" class="form-control"><option value="0">全部插件</option>
							 | 
						|
								    {foreach $typelist as $k=>$v}<option value="{$k}">{$v}</option>{/foreach} </select>
							 | 
						|
								  </div>
							 | 
						|
								  <div class="form-group">
							 | 
						|
									<button class="btn btn-primary" type="submit"><i class="fa fa-search"></i> 搜索</button> 
							 | 
						|
									<a href="javascript:searchClear()" class="btn btn-default"><i class="fa fa-repeat"></i> 重置</a> 
							 | 
						|
								    <a href="javascript:refresh_plugins()" class="btn btn-success"><i class="fa fa-refresh"></i> 刷新列表</a> 
							 | 
						|
								    <a href="javascript:download_plugins()" class="btn btn-warning" id="batch_down" style="display:none;"><i class="fa fa-download"></i> 批量下载</a> 
							 | 
						|
								    <button type="button" class="btn btn-default" data-toggle="modal" data-target="#help"><i class="fa fa-info-circle"></i> 帮助</button>
							 | 
						|
								  </div>
							 | 
						|
								</form>
							 | 
						|
								</div>
							 | 
						|
								
							 | 
						|
								      <table id="listTable">
							 | 
						|
									  </table>
							 | 
						|
									</div>
							 | 
						|
								  </div>
							 | 
						|
								<script src="//lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/layer/3.5.1/layer.js"></script>
							 | 
						|
								<script src="//lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/bootstrap-table/1.19.1/bootstrap-table.min.js"></script>
							 | 
						|
								<script src="//lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/bootstrap-table/1.19.1/extensions/page-jump-to/bootstrap-table-page-jump-to.min.js"></script>
							 | 
						|
								<script src="/static/js/custom.js"></script>
							 | 
						|
								<script>
							 | 
						|
								
							 | 
						|
								function download_version(name, version, status){
							 | 
						|
								    if(status == true){
							 | 
						|
								        var confirm = layer.confirm('是否确定重新下载'+version+'版本插件包?', {
							 | 
						|
								            btn: ['确定','取消']
							 | 
						|
								        }, function(){
							 | 
						|
								            download_plugin(name, version)
							 | 
						|
								        }, function(){
							 | 
						|
								            layer.close(confirm)
							 | 
						|
								        });
							 | 
						|
								    }else{
							 | 
						|
								        download_plugin(name, version)
							 | 
						|
								    }
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								function download_plugin(name, version){
							 | 
						|
								    var ii = layer.msg('正在下载,请稍候...', {icon: 16, shade:0.1, time: 0});
							 | 
						|
								    $.ajax({
							 | 
						|
										type : 'POST',
							 | 
						|
										url : '/admin/download_plugin',
							 | 
						|
								        data: { name:name, version:version, os:'Windows'},
							 | 
						|
										dataType : 'json',
							 | 
						|
										success : function(data) {
							 | 
						|
								            layer.close(ii)
							 | 
						|
											if(data.code == 0){
							 | 
						|
												layer.alert(data.msg, {icon:1}, function(){layer.closeAll();searchSubmit();});
							 | 
						|
											}else{
							 | 
						|
												layer.alert(data.msg, {icon:2});
							 | 
						|
											}
							 | 
						|
										},
							 | 
						|
										error:function(data){
							 | 
						|
								            layer.close(ii)
							 | 
						|
											layer.msg('服务器错误', {icon:2});
							 | 
						|
										}
							 | 
						|
									});
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								function refresh_plugins(){
							 | 
						|
								    var confirm = layer.confirm('是否确定从宝塔官方获取最新插件列表?', {
							 | 
						|
								        btn: ['确定','取消']
							 | 
						|
								    }, function(){
							 | 
						|
								        layer.close(confirm)
							 | 
						|
								        var ii = layer.msg('正在获取插件列表,请稍候...', {icon: 16, shade:0.1, time: 0});
							 | 
						|
								        $.ajax({
							 | 
						|
								            type : 'GET',
							 | 
						|
								            url : '/admin/refresh_plugins?os=Windows',
							 | 
						|
								            dataType : 'json',
							 | 
						|
								            success : function(data) {
							 | 
						|
								                layer.close(ii)
							 | 
						|
								                if(data.code == 0){
							 | 
						|
								                    layer.alert(data.msg, {icon:1}, function(){layer.closeAll();searchSubmit();});
							 | 
						|
								                }else{
							 | 
						|
								                    layer.alert(data.msg, {icon:2});
							 | 
						|
								                }
							 | 
						|
								            },
							 | 
						|
								            error:function(data){
							 | 
						|
								                layer.close(ii)
							 | 
						|
								                layer.msg('服务器错误', {icon:2});
							 | 
						|
								            }
							 | 
						|
								        });
							 | 
						|
								    }, function(){
							 | 
						|
								        layer.close(confirm)
							 | 
						|
								    });
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								function download_plugins(){
							 | 
						|
								    var confirm = layer.confirm('批量下载当前分类下未下载的插件包', {
							 | 
						|
								        btn: ['确定','取消']
							 | 
						|
								    }, function(){
							 | 
						|
								        layer.close(confirm)
							 | 
						|
								        $.downloadCount = 0;
							 | 
						|
								        $.preDownloadCount = $.preDownload.length;
							 | 
						|
								        download_item();
							 | 
						|
								    }, function(){
							 | 
						|
								        layer.close(confirm)
							 | 
						|
								    });
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								function download_item(){
							 | 
						|
								    if($.preDownload.length == 0){
							 | 
						|
								        layer.alert('成功下载'+$.downloadCount+'个插件包!', {icon:1}, function(){layer.closeAll();searchSubmit();});
							 | 
						|
								        return;
							 | 
						|
								    }
							 | 
						|
								    $.downloadCount++;
							 | 
						|
								    var plugin = $.preDownload[0];
							 | 
						|
								    var ii = layer.msg('['+$.downloadCount+'/'+$.preDownloadCount+']正在下载'+plugin.name+'-'+plugin.version, {icon: 16, shade:0.1, time: 0});
							 | 
						|
								    $.ajax({
							 | 
						|
										type : 'POST',
							 | 
						|
										url : '/admin/download_plugin',
							 | 
						|
								        data: { name:plugin.name, version:plugin.version, os:'Windows'},
							 | 
						|
										dataType : 'json',
							 | 
						|
										success : function(data) {
							 | 
						|
								            layer.close(ii)
							 | 
						|
											if(data.code == 0){
							 | 
						|
								                $.preDownload.shift();
							 | 
						|
												download_item();
							 | 
						|
											}else{
							 | 
						|
												layer.alert(data.msg, {icon:2});
							 | 
						|
											}
							 | 
						|
										},
							 | 
						|
										error:function(data){
							 | 
						|
								            layer.close(ii)
							 | 
						|
											layer.msg('服务器错误', {icon:2});
							 | 
						|
										}
							 | 
						|
									});
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								function searchByType(type){
							 | 
						|
								    $("input[name=keyword]").val('');
							 | 
						|
								    $("select[name=type]").val(type);
							 | 
						|
								    searchSubmit()
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								$(document).ready(function(){
							 | 
						|
									updateToolbar();
							 | 
						|
									const defaultPageSize = 20;
							 | 
						|
								
							 | 
						|
									$("#listTable").bootstrapTable({
							 | 
						|
										url: '/admin/plugins_data?os=Windows',
							 | 
						|
										pageNumber: 1,
							 | 
						|
										pageSize: 15,
							 | 
						|
								        sidePagination: 'client',
							 | 
						|
										classes: 'table table-striped table-hover table-bottom-border',
							 | 
						|
										columns: [
							 | 
						|
											{
							 | 
						|
												field: 'name',
							 | 
						|
												title: '软件标识',
							 | 
						|
												formatter: function(value, row, index) {
							 | 
						|
													return '<b>'+value+'</b>';
							 | 
						|
												}
							 | 
						|
											},
							 | 
						|
											{
							 | 
						|
												field: 'title',
							 | 
						|
												title: '软件名称'
							 | 
						|
											},
							 | 
						|
								            {
							 | 
						|
												field: 'type',
							 | 
						|
												title: '软件分类',
							 | 
						|
												formatter: function(value, row, index) {
							 | 
						|
													return '<a href="javascript:searchByType('+value+')" title="查看该分类下的插件">'+row.typename+'</a>';
							 | 
						|
												}
							 | 
						|
											},
							 | 
						|
											{
							 | 
						|
												field: 'desc',
							 | 
						|
												title: '说明',
							 | 
						|
											},
							 | 
						|
											{
							 | 
						|
												field: 'price',
							 | 
						|
												title: '价格',
							 | 
						|
												formatter: function(value, row, index) {
							 | 
						|
													return value > 0 ? '<span style="color:#fc6d26">¥'+value+'</span>' : '免费';
							 | 
						|
												}
							 | 
						|
											},
							 | 
						|
											{
							 | 
						|
												field: 'author',
							 | 
						|
												title: '开发商'
							 | 
						|
											},
							 | 
						|
											{
							 | 
						|
												field: 'versions',
							 | 
						|
												title: '版本与状态',
							 | 
						|
												formatter: function(value, row, index) {
							 | 
						|
								                    var html = '';
							 | 
						|
								                    if(row.type == 5){
							 | 
						|
								                        html += '<a href="javascript:" class="btn btn-xs btn-success" disabled>无需下载</a>';
							 | 
						|
								                    }else{
							 | 
						|
								                        $.each(value, function(index,item){
							 | 
						|
								                            if(item.status)
							 | 
						|
								                                html += '<a href="javascript:download_version(\''+row.name+'\',\''+item.version+'\','+item.status+')" class="btn btn-xs btn-success">'+item.version+'</a> ';
							 | 
						|
								                            else
							 | 
						|
								                                html += '<a href="javascript:download_version(\''+row.name+'\',\''+item.version+'\','+item.status+')" class="btn btn-xs btn-danger">'+item.version+'</a> ';
							 | 
						|
								                        })
							 | 
						|
								                    }
							 | 
						|
								                    return html
							 | 
						|
												}
							 | 
						|
											},
							 | 
						|
										],
							 | 
						|
								        onLoadSuccess: function(data){
							 | 
						|
								            $.preDownload = [];
							 | 
						|
								            var type = $("select[name=type] option:selected").text();
							 | 
						|
								            if(type != '全部插件' && type != '运行环境' && type != '第三方应用'){
							 | 
						|
								                $("#batch_down").show();
							 | 
						|
								                if(data.length > 0){
							 | 
						|
								                    $.each(data, function(index, plugin){
							 | 
						|
								                        if(plugin.versions.length > 0){
							 | 
						|
								                            $.each(plugin.versions, function(index, version){
							 | 
						|
								                                if(!version.status){
							 | 
						|
								                                    $.preDownload.push({name:plugin.name, version:version.version})
							 | 
						|
								                                }
							 | 
						|
								                            });
							 | 
						|
								                        }
							 | 
						|
								                    });
							 | 
						|
								                }
							 | 
						|
								            }else{
							 | 
						|
								                $("#batch_down").hide();
							 | 
						|
								            }
							 | 
						|
								        }
							 | 
						|
									})
							 | 
						|
								})
							 | 
						|
								</script>
							 | 
						|
								{/block}
							 |