You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

441 lines
18 KiB
HTML

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<extend name="Public/base" />
<block name="body">
<link rel="stylesheet" type="text/css" href="__STATIC__/bootstrap.min.css" media="all">
<link rel="stylesheet" type="text/css" href="__CSS__/admin_table.css" media="all">
<script type="text/javascript" src="__JS__/select2.min.js"></script>
<link rel="stylesheet" href="__CSS__/select2.min.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="__STATIC__/webuploader/webuploader.css" media="all">
<script src="__STATIC__/md5.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript" src="__STATIC__/webuploader/webuploader.js"></script>
<style>
.select2-container--default .select2-selection--single .select2-selection__rendered {
line-height:35px;
line-height:28px;
}
.select2-container--default .select2-selection--single .select2-selection__arrow {
height:26px;
}
.select2-container--default .select2-search--dropdown .select2-search__field {
height:26px;line-height:26px;font-size:12px;
}
.select2-results__option[aria-selected] {font-size:12px;}
.tabcon1711 .select2-container--default .select2-selection--single{
font-size: 12px;
color: #555;
vertical-align: middle;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
background-color: #fff;
border: 1px solid #ccc;
-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075);
-moz-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075);
box-shadow: inset 0 1px 1px rgba(0,0,0,0.075);
-webkit-transition: border linear .2s, box-shadow linear .2s;
-moz-transition: border linear .2s, box-shadow linear .2s;
-o-transition: border linear .2s, box-shadow linear .2s;
transition: border linear .2s, box-shadow linear .2s;height:30px;}
.tabcon1711 .select2-container--default .select2-selection--single .select2-selection__rendered {line-height: 30px;}
.tabcon1711 .select2-container--default .select2-selection--single .select2-selection__arrow {height:30px;}
.tabcon1711 .select2-container--default .select2-search--dropdown .select2-search__field {
height:26px;line-height:26px;font-size:12px;
}
.tabcon1711 .select2-results__option[aria-selected] {font-size:12px;}
</style>
<div class="cf main-place top_nav_list navtab_list">
<h3 class="page_title">上传原包</h3>
<p class="description_text">说明:此功能为上传游戏原包的功能</p>
</div>
<!-- 标签页导航 -->
<div class="tab-wrap">
<div class="tab-content tabcon1711">
<!-- 表单 -->
<form id="form" action="{:U('add')}" method="post" class="form-horizontal">
<!-- 基础文档模型 -->
<div id="tab1" class="tab-pane in tab1">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="l"><i class="mustmark" style="margin-left:-7px">*</i>游戏名称:</td>
<td class="r">
<select id="game_id" name="game_id" class="select_gallery">
<option value="0" selected="">请选择</option>
<volist name='game_lists' id='vo'>
<option value="{$vo.id}" sdk_version="{$vo.sdk_version}" developers="{$vo.developers}">{$vo.game_name}</option>
<!--<option value="{$vo.id}" style="display:none" >{$vo.sdk_version}</option>-->
</volist>
</select>
<input type="hidden" id="game_name" name="game_name" value="" />
</td>
</tr>
<tr>
<td class="l">运营平台</td>
<td class="r table_radio">
<span class="form_radio">
<volist name=":get_systems_list()" id="vo">
<gt name="key" value="0">
<label id="type{$key}">
<input type="radio" class="inp_radio js-typeradio" value="{$key}" name="sdk_version" disabled="true"> <span class="type{$key}">{$vo}</span>
</label>
</gt>
</volist></span>
<input type="hidden" id="file_type" name="file_type" value="" />
</td>
</tr>
<tr id="is-new-sdk" style="display: none;">
<td class="l">是否新包</td>
<td class="r table_radio">
<span class="form_radio">
<label><input type="radio" class="inp_radio" checked value="1" name="is_new_sdk" ></label>
<label><input type="radio" class="inp_radio" checked value="0" name="is_new_sdk" ></label>
</td>
</tr>
<tr class="picbox">
<td class="l"><i class="mustmark" style="margin-left:-7px">*</i>上传原包</td>
<td class="r">
<span class=" table_btn table_uploads">
<div id="uploader" class="wu-example">
<div class="btns">
<div id="picker">上传原包</div>
</div>
<!--用来存放文件信息-->
<div id="thelist" class="uploader-list">
</div>
</div>
<input type="hidden" id="data" name="data" value="000"/>
<input type="hidden" id="file_id" name="file_id" value="{$data['file_id']}"/>
<input type="hidden" id="file_name" name="file_name" value="{$data['file_name']}"/>
<input type="hidden" id="file_url" name="file_url" value="{$data['file_url']}"/>
<input type="hidden" id="file_size" name="file_size" value="{$data['file_size']}"/>
<input type="hidden" id="file_name2" name="file_name2" value="{$data['file_name2']}"/>
<input type="hidden" id="file_url2" name="file_url2" value="{$data['file_url2']}"/>
</span>
<span class="notice-text">更新原包后会自动进行推广员游戏包更新,打包完成后,对应推广员下的游戏包无需更新,渠道玩家即可下载最新版游戏包(前提:服务器开启定时任务)</span>
</td>
<!-- <td class="l pack_name_class">原包名称:</td>
<td class="r pack_name_class" colspan='1'>
<input type="text" class="txt" name="pack_name" value="">
</td> -->
</tr>
<tr>
<td class="l"><i class="mustmark" style="margin-left:-7px;display:none" id="apply_bz">*</i>包名:</td>
<td class="r">
<input type="text" class="txt" name="bao_name" style="background:#E7E7E7" value="无需填写,自动生成" disabled="disabled">
</td>
</tr>
<tr>
<td class="l">原包版本:</td>
<td class="r">
<input type="text" class="txt" name="version" style="background:#E7E7E7" value="无需填写,自动生成" disabled="disabled">
</td>
</tr>
<tr>
<td class="l">原包大小:</td>
<td class="r">
<input type="text" class="txt" name="gsize" style="background:#E7E7E7" value="无需填写,自动生成" disabled="disabled">
</td>
</tr>
<tr>
<td class="l">更新说明:</td>
<td class="r">
<textarea name="remark" class="txt_area"></textarea>
</td>
</tr>
</tbody>
</table>
</div>
<input type="hidden" id="developers" name="develop_id" value="0">
<input type="hidden" name="type" value="{$_GET['type']}">
<div class="form-item cf">
<button class="submit_btn ajax-post ajax-loading mlspacing" id="submit" type="submit" target-form="form-horizontal">保存</button>
<a class="submit_btn " alt="返回上一页" title="返回上一页" href="javascript:window.history.back();" >返回</a>
</div>
</form>
</div>
</div>
<div class="common_settings">
<span class="plus_icon"><span><img src="__IMG__/zwmimages/icon_jia.png"></span></span>
<form class="addShortcutIcon">
<input type="hidden" name="title" value="{$m_title}">
<input type="hidden" name="url" value="GameSource/lists">
</form>
<a class="ajax-post add-butn <notempty name='commonset'>addSIsetted</notempty>" href="javascript:;" target-form="addShortcutIcon" url="{:U('Think/addShortcutIcon')}"><img src="__IMG__/zwmimages/icon_jia.png"><span><notempty name='commonset'>已添加<else />添加至常用设置</notempty></span></a>
</div>
</block>
<block name="script">
<script type="text/javascript" src="__STATIC__/datetimepicker/js/bootstrap-datetimepicker.min.js"></script>
<script type="text/javascript">
//导航高亮
highlight_subnav('{:U('GameSource/lists')}');
$('#submit').click(function(){
$('#form').submit();
});
$(function(){
Think.setValue("game_id", "{$Think.get.game_id|default = 0}");
$(".select_gallery").select2();
$('.date').datetimepicker({
format: 'yyyy-mm-dd',
language:"zh-CN",
minView:2,
autoclose:true
});
$('.time').datetimepicker({
format: 'yyyy-mm-dd hh:ii',
language:"zh-CN",
minView:2,
autoclose:true
});
showTab();
//$('.pack_name_class').hide();
});
var userInfo = {userId:"kazaff", md5:""}; //用户会话信息
var chunkSize = 5000 * 1024; //分块大小
var uniqueFileName = null; //文件唯一标识符
var md5Mark = null;
var backEndUrl = "{:U('File/shard_upload',array('session_id'=>session_id()))}";
WebUploader.Uploader.register({
"before-send-file" : "beforeSendFile",
"before-send" : "beforeSend",
"after-send-file" : "afterSendFile"
}, {
beforeSendFile: function(file){
//秒传验证
var task = new $.Deferred();
var start = new Date().getTime();
(new WebUploader.Uploader()).md5File(file, 0, 10*1024*1024).progress(function(percentage){
//console.log(percentage);
}).then(function(val){
//console.log("总耗时: "+((new Date().getTime()) - start)/1000);
md5Mark = val;
userInfo.md5 = val;
$.ajax({
type: "POST"
, url: backEndUrl
, data: {status: "md5Check", md5: val}
, cache: false
, timeout: 1000 //todo 超时的话,只能认为该文件不曾上传过
, dataType: "json"
}).then(function(data, textStatus, jqXHR){
alert(data.chunk);
//console.log(data);
if(data.ifExist){ //若存在这返回失败给WebUploader表明该文件不需要上传
task.reject();
uploader.skipFile(file);
file.path = data.path;
}else{
task.resolve();
//拿到上传文件的唯一名称,用于断点续传
uniqueFileName = md5(''+userInfo.userId+file.name+file.type+file.lastModifiedDate+file.size);
}
}, function(jqXHR, textStatus, errorThrown){ //任何形式的验证失败,都触发重新上传
task.resolve();
//拿到上传文件的唯一名称,用于断点续传
uniqueFileName = md5(''+userInfo.userId+file.name+file.type+file.lastModifiedDate+file.size);
});
});
return $.when(task);
}
, beforeSend: function(block){
//分片验证是否已传过,用于断点续传
var task = new $.Deferred();
$.ajax({
type: "POST"
, url: backEndUrl
, data: {
status: "chunkCheck"
, name: uniqueFileName
, chunkIndex: block.chunk
, size: block.end - block.start
}
, cache: false
, timeout: 2000 //todo 超时的话,只能认为该分片未上传过
, dataType: "json"
}).then(function(data, textStatus, jqXHR){
if(data.ifExist){ //若存在返回失败给WebUploader表明该分块不需要上传
task.reject();
}else{
task.resolve();
}
}, function(jqXHR, textStatus, errorThrown){ //任何形式的验证失败,都触发重新上传
task.resolve();
});
return $.when(task);
}
, afterSendFile: function(file){
var chunksTotal = 0;
if((chunksTotal = Math.ceil(file.size/chunkSize)) > 1){
//合并请求
var task = new $.Deferred();
$.ajax({
type: "POST"
, url: backEndUrl
, data: {
status: "chunksMerge"
, name: uniqueFileName
, chunks: chunksTotal
, ext: file.ext
, md5: md5Mark
}
, cache: false
, dataType: "json"
}).then(function(data, textStatus, jqXHR){
//todo 检查响应是否正常
task.resolve();
file.path = data.path;
$("#file_name").val(data.name);
$("#file_url").val(data.path);
$("#file_size").val(file.size);
}, function(jqXHR, textStatus, errorThrown){
task.reject();
});
return $.when(task);
}else{
// UploadComlate(file);
}
}
});
var uploader = new WebUploader.Uploader({
// 选完文件后,是否自动上传。
auto: true,
// swf文件路径
swf: '__STATIC__/webuploader/Uploader.swf',
// 文件接收服务端。
server: "{:U('File/shard_upload',array('session_id'=>session_id()))}",
// 选择文件的按钮。可选。
// 内部根据当前运行是创建可能是input元素也可能是flash.
pick: {id:'#picker'},
//dnd: "#theList",
paste: document.body,
// 不压缩image, 默认如果是jpeg文件上传前会压缩一把再上传
resize: false,
accept:{
title:'安卓',
extensions:'apk,ipa',
mimeTypes:'.apk,.ipa'
},
disableGlobalDnd: true,
fileNumLimit:1,
threads:3,
compress: false,
prepareNextFile: true,
formData: function(){return $.extend(true, {}, userInfo);},
duplicate:true,
chunked:true,
chunkSize: 5*1000*1024,
duplicate: true
});
// 当有文件被添加进队列的时候
uploader.on( 'fileQueued', function( file ) {
$("#thelist").append( '<div id="' + file.id + '" class="item">' +
'<h4 class="info">' + file.name + '</h4>' +
'<p class="state">等待上传...</p>' +
'</div>' );
});
// 文件上传过程中创建进度条实时显示。
uploader.on( 'uploadProgress', function( file, percentage ) {
var $li = $( '#'+file.id ),
$percent = $li.find('.progress .progress-bar');
// 避免重复创建
if ( !$percent.length ) {
$percent = $('<div class="progress progress-striped active">' +
'<div class="progress-bar" role="progressbar" style="width: 0%">' +
'</div>' +
'</div>').appendTo( $li ).find('.progress-bar');
}
$li.find('p.state').text('上传中');
$percent.css( 'width', percentage * 100 + '%' );
$percent.text( (percentage * 100).toFixed(0) + '%' );
});
uploader.on( 'uploadSuccess', function( file , response) {
$( '#'+file.id ).find('p.state').text('已上传');
// alert(JSON.stringify(response));
if(!response.chunk){
$("#file_name").val(response.name);
$("#file_url").val(response.path);
$("#file_size").val(response.size);
}
//alert($("#file_name").val()+";"+$("#file_url").val()+";"+$("#file_size").val())
});
uploader.on( 'uploadError', function( file ) {
console.log(file.id);
$( '#'+file.id ).find('p.state').text('上传出错');
});
uploader.onError = function(err) {
console.log(err);
};
uploader.on( 'uploadComplete', function(file) {
$( '#'+file.id ).find('.progress').fadeOut();
});
uploader.on('beforeFileQueued',function(file){
switch($("input[type=radio]:checked").val()){
case undefined:
alert('请选择游戏');
return false;
break;
case '1':
if(file.ext != 'apk'){
alert('请选择文件后缀为apk的文件');
return false;
}else{
return true;
}
break;
case '2':
if(file.ext != 'ipa'){
alert('请选择文件后缀为ipa的文件');
return false;
}else{
return true;
}
break;
}
})
$("#game_id").change(function(){
var type = $("#game_id option:selected").attr('sdk_version');
$('input[type="radio"][name="sdk_version"][value="'+type+'"]').prop('checked',true);
$('#developers').val($("#game_id option:selected").attr('developers'));
$("#game_name").val($("#game_id option:selected").text());
$("#file_type").val(type);
if (type == 2){
$('#is-new-sdk').show();
$('#apply_bz').show();
}else{
$('#is-new-sdk').hide();
$('#apply_bz').hide();
}
//if(type == 1){$('.pack_name_class').show();}else{$('.pack_name_class').hide();}
});
</script>
</block>