field($model, 'avatar',['labelOptions' => ['class' => 'form-label col-md-1'],'options'=>['class'=>'row']])->widget('manks\FileInput', ['clientOptions' => ['pick' => ['multiple' => false],'uploadType'=>1,'buttonDivClass'=>'','defaultImage'=>''],'imageBlockClass'=>'col-md-1','fixStyle'=>'','helpTips'=>'
']);
//echo manks\FileInput::widget(['clientOptions' => ['pick' => ['multiple' => false],'uploadType'=>1,'fileNumLimit'=>1],'name'=>'cert_info[idcard_img]','imageBlockClass'=>'col-md-1','value'=>'320/362/1f48ae2059304e3e3904185febe2f34d.jpg']);
//上传单文件
//echo $form->field($model, 'avatar',['labelOptions' => ['class' => 'form-label col-md-1'],'options'=>['class'=>'row']])->widget('manks\FileInput', ['clientOptions' => ['pick' => ['multiple' => false],'uploadType'=>2,'buttonTxt'=>'选择文件','buttonDivClass'=>'','defaultImage'=>''],'imageBlockClass'=>'col-md-1','fixStyle'=>'']);
//echo manks\FileInput::widget(['clientOptions' => ['pick' => ['multiple' => false],'uploadType'=>2,'buttonTxt'=>'选择文件'],'name'=>'cert_info[idcard_img]','imageBlockClass'=>'col-md-1','value'=>'']);
//上传头像(手机端)
//echo $form->field($model, 'avatar',['labelOptions' => ['class' => 'form-label col-md-1'],'options'=>['class'=>'row']])->widget('manks\FileInput', ['clientOptions' => ['pick' => ['multiple' => false],'uploadType'=>3,'buttonDivClass'=>'','defaultImage'=>''],'imageBlockClass'=>'col-md-1','fixStyle'=>'']);
//echo manks\FileInput::widget(['clientOptions' => ['pick' => ['multiple' => false],'uploadType'=>3],'name'=>'cert_info[idcard_img]','imageBlockClass'=>'col-md-1','value'=>'']);
//上传封面(手机端)
//echo $form->field($model, 'avatar',['labelOptions' => ['class' => 'form-label col-md-1'],'options'=>['class'=>'row']])->widget('manks\FileInput', ['clientOptions' => ['pick' => ['multiple' => false],'uploadType'=>4,'buttonDivClass'=>'','defaultImage'=>''],'imageBlockClass'=>'col-md-1','fixStyle'=>'']);
//echo manks\FileInput::widget(['clientOptions' => ['pick' => ['multiple' => false],'uploadType'=>4],'name'=>'cert_info[idcard_img]','imageBlockClass'=>'col-md-1','value'=>'']);
//上传封面(PC)
//echo $form->field($model, 'avatar',['labelOptions' => ['class' => 'form-label col-md-1'],'options'=>['class'=>'row']])->widget('manks\FileInput', ['clientOptions' => ['pick' => ['multiple' => false],'uploadType'=>5,'buttonDivClass'=>'','defaultImage'=>''],'imageBlockClass'=>'col-md-1','fixStyle'=>'width:400px;height:225px;line-height:225px;','helpTips'=>'']);
//echo manks\FileInput::widget(['clientOptions' => ['pick' => ['multiple' => false],'uploadType'=>5],'name'=>'cert_info[idcard_img]','imageBlockClass'=>'col-md-1','value'=>'']);
//上传多图(PC)
//echo $form->field($model, 'avatar',['labelOptions' => ['class' => 'form-label col-md-1'],'options'=>['class'=>'row','style'=>'display:block']])->widget('manks\FileInput', ['clientOptions' => ['pick' => ['multiple' => true],'uploadType'=>1,'buttonDivClass'=>'','defaultImage'=>''],'imageBlockClass'=>'col-md-1','fixStyle'=>'','helpTips'=>'']);
//echo manks\FileInput::widget(['clientOptions' => ['pick' => ['multiple' => true],'uploadType'=>1],'name'=>'cert_info[idcard_img]','imageBlockClass'=>'col-md-1 test','fixStyle'=>'width:200px;height:120px;','value'=>'']);
//上传多文件(PC)
//echo $form->field($model, 'avatar',['labelOptions' => ['class' => 'form-label col-md-1'],'options'=>['class'=>'row']])->widget('manks\FileInput', ['clientOptions' => ['pick' => ['multiple' => true],'uploadType'=>2,'buttonTxt'=>'选择文件','buttonDivClass'=>'','defaultImage'=>''],'imageBlockClass'=>'col-md-1','fixStyle'=>'']);
//echo manks\FileInput::widget(['clientOptions' => ['pick' => ['multiple' => true],'uploadType'=>2,'buttonTxt'=>'选择文件'],'name'=>'cert_info[idcard_img]','imageBlockClass'=>'','value'=>'']);
//上传多图(h5)
echo $form->field($model, 'avatar',['labelOptions' => ['class' => 'form-label col-md-1'],'options'=>['class'=>'row']])->widget('manks\FileInput', ['clientOptions' => ['pick' => ['multiple' => true],'uploadType'=>8,'buttonTxt'=>'选择文件','buttonDivClass'=>'','defaultImage'=>''],'imageBlockClass'=>'col-md-1','fixStyle'=>'']);
*/
namespace manks;
use Yii;
use yii\widgets\InputWidget;
use yii\helpers\Html;
use yii\base\InvalidConfigException;
use yii\helpers\Url;
use yii\helpers\Json;
use app\modules\admin\models\Config;
class FileInput extends InputWidget
{
public $clientOptions = [];//传入参数
public $chooseButtonClass = ['class' => 'btn btn-light'];
public $chooseFileBlockClass = 'choosefile-block';
public $imageBlockClass='';//图片框样式
public $imageClass='';//图片样式
public $fixStyle='';
public $containStyle='';
public $delIconClass = '';//删除样式
public $containerClass='';
public $helpTips='';
public $theme = '';//定义文档上传页面的风格
private $_view;//视图对象
private $_hashVar;//用于上传按钮Class, Modal 弹框ID ,通过一定算法生成
private $_config;//上传组件配置
private $_domain;//上传成功后的文件路由域名
private $_appdomain;//应用域名
private $_defaultImg;//传图时候显示的默认图
private $_encOptions;//编码后的传入参数
private $_fixImgClass;
private $_loadingImg;//loading 图片
private $assetsUrl;
//下面是不传model 时候的用法
public $name;
public $id;
public $value;
public function init ()
{
if(empty($name))parent::init();
$this->_domain = UPLOAD_URL;
$this->_appdomain = APP_URL;
$this->_view = $this->getView();
$this->initOptions();
$this->initConfig();
$this->registerClientScript();
//对图片排列样式纠正
if(defined('IN_ADMIN')&&IN_ADMIN)//后台不能重复加载bootstrap.js
{
$this->_fixImgClass = $this->imageBlockClass.' fix-img';
}
else
{
$this->_fixImgClass = $this->imageBlockClass.' fix-img';
}
}
public function run ()
{
if ($this->hasModel()) {
$model = $this->model;
$attribute = $this->attribute;
}
else
{
$model = null;
$attribute = null;
}
// 单文件
if (empty($this->_config['pick']['multiple'])||$this->_config['pick']['multiple']==false) {
$html = $this->renderInput($model, $attribute);
if($this->_config['uploadType']==1)//单图
{
$html .= $this->renderSingleImage($model, $attribute);
}
else if($this->_config['uploadType']==2)//单文件
{
$html .= $this->renderSingleFile($model, $attribute);
}
else if($this->_config['uploadType']==3)//前台上传头像(H5)
{
$html .= $this->renderMobileAvatar($model, $attribute);
}
else if($this->_config['uploadType']==4)//前台上传封面(H5)
{
$html .= $this->renderMobileThumb($model, $attribute);
}
else if($this->_config['uploadType']==5)//前台上传封面(PC)
{
}
else if($this->_config['uploadType']==6)//前台上传单图(PC美化)
{
}
else if($this->_config['uploadType']==88)//前台上传单文档
{
$html .= $this->renderSingleUpload($model, $attribute);
}
}else {
$html = $this->renderMultiInput($model, $attribute);
if($this->_config['uploadType']==1)//图
{
$html .= $this->renderMultiImage($model, $attribute);
}
else if($this->_config['uploadType']==2)//文件
{
$html .= $this->renderMultiFile($model, $attribute);
}
else if($this->_config['uploadType']==8)//H5多图
{
}
else if($this->_config['uploadType']==99)//前台批量上传文档
{
$html .= $this->renderMultidoc();
}
}
echo $html;
}
/**
* init options
*/
public function initOptions ()
{
// to do.
if ($this->hasModel()){
$id = md5($this->options['id']);//通过传入的INPUT 元素ID,生成上传选择器ID前半段
}
else
{
$id = md5($this->name);
}
$this->id = $id;
$this->hashClientOptions("webupload_config_{$id}");
}
/**
* register base js config
*/
public function initConfig ()
{
if (empty($this->_domain)) {
throw new InvalidConfigException("param `domain` must set.", 1);
}
$this->_config = $this->mergeConfig();
$asset = FileInputAsset::register($this->_view);
$assetsUrl = $asset->baseUrl;
$this->assetsUrl = $assetsUrl;
$this->_loadingImg = $assetsUrl.'/webuploader/loading.gif';
if(!empty($this->_config['defaultImage']))
{
$this->_defaultImg = $this->_config['defaultImage'];
}
else
{
$this->_defaultImg = $this->assetsUrl.'/webuploader/nopic.png';
}
$this->_config['defaultImage'] = $this->_defaultImg;
$config = Json::htmlEncode($this->_config);
$js = <<_hashVar} = {$config};
$('#{$this->_hashVar}').webupload_fileinput({$this->_hashVar});
JS;
$this->_view->registerJs($js);
}
/**
* Registers the needed client script and options.
*/
public function registerClientScript ()
{
}
/**
* generate hash var by plugin options
*/
protected function hashClientOptions($name)
{
$this->_encOptions = empty($this->clientOptions) ? '' : Json::htmlEncode($this->clientOptions);//JSON编码客户端元素参数
$this->_hashVar = $name . '_' . hash('crc32', $this->_encOptions);
}
/*
**合并上传组件配置
* buttonTxt:按钮上面显示的文字
* buttonDivClass:按钮父级容器样式
*
*
*
*/
public function mergeConfig ()
{
//系统设置的上传限制
$sysConfigInfo = Config::find()->where("name='attachment'")->one();
$sysConfig = string2array($sysConfigInfo->value);
//设置文件类型限制
if(($this->clientOptions['uploadType']==2||$this->clientOptions['uploadType']==88||$this->clientOptions['uploadType']==99)&&empty($this->clientOptions['accept']))
{
$this->clientOptions['accept'] = [
'title' => 'Files',
'extensions' => 'gif,jpg,jpeg,bmp,png,pdf,doc,ppt,pptx,xls,xlsx,docx,rar,zip,7z,tar.gz,war,txt,ico,mp4,mp3,flv',
'mimeTypes' => '*',
];
if(!empty($sysConfig['file_type']))
{
$this->clientOptions['accept']['extensions'] = str_replace('|',',',$sysConfig['file_type']);
}
}
else if($this->clientOptions['uploadType']==1||$this->clientOptions['uploadType']==3||$this->clientOptions['uploadType']==4||$this->clientOptions['uploadType']==5||$this->clientOptions['uploadType']==6||$this->clientOptions['uploadType']==8)
{
$this->clientOptions['accept'] = [
'title' => 'Images',
'extensions' => 'gif,jpg,jpeg,bmp,png,ico',
'mimeTypes' => 'image/*',
];
}
//如果客户端没有传入大小限制,采用系统配置
if(!empty($sysConfig['file_single_size_limit'])&&empty($this->clientOptions['fileSingleSizeLimit']))
{
$this->clientOptions['fileSingleSizeLimit'] = $sysConfig['file_single_size_limit']*1024*1024;
}
if(!empty($sysConfig['file_size_limit'])&&empty($this->clientOptions['fileSizeLimit']))
{
$this->clientOptions['fileSizeLimit'] = $sysConfig['file_size_limit']*1024*1024;
}
if(!empty($sysConfig['file_num_limit'])&&empty($this->clientOptions['fileNumLimit']))
{
$this->clientOptions['fileNumLimit'] = $sysConfig['file_num_limit'];
}
$config = $this->mergeArray($this->getDefaultClientOptions(), $this->clientOptions);
//初始表单需要的csrf
if (isset($this->clientOptions['csrf']) && $this->clientOptions['csrf'] === false) {
} else {
$config['formData'][Yii::$app->request->csrfParam] = Yii::$app->request->csrfToken;
}
$config['modal_id'] = $this->_hashVar;
if (empty($config['server'])) {
$config['server'] = Url::to([Yii::$app->params['webuploader']['uploadUrl']]);
}
if (empty($config['md5checkUrl'])) {
$config['md5checkUrl'] = API_URL.Yii::$app->params['webuploader']['md5checkUrl'];
}
$config['compress'] = false;
return $config;
}
/**
* 合并数组
*/
public function mergeArray ($oriArr, $desArr)
{
foreach ($oriArr as $k => $v) {
if (array_key_exists($k, $desArr)) {
if (is_array($v) && $v) {
foreach ($v as $k2 => $v2) {
if (array_key_exists($k2, $desArr[$k])&&$desArr[$k][$k2]!=null) {
$oriArr[$k][$k2] = $desArr[$k][$k2];
}
}
} else {
if($desArr[$k]!=null)$oriArr[$k] = $desArr[$k];
}
}
}
return $oriArr;
}
/**
* register default config for js
*/
public function getDefaultClientOptions ()
{
return Yii::$app->params['webuploader']['baseConfig'];
}
/**
* render html body-input
*/
public function renderInput ($model=null, $attribute=null)
{
Html::addCssClass($this->chooseButtonClass, " {$this->_hashVar}");
$eles = [];
if ($this->hasModel())
{
$eles[] = Html::tag('div',Html::activeTextInput($model, $attribute, ['class' => 'input-'.$this->id]), ['style'=>'display:none']);
}
else
{
$eles[] ='';
}
if($this->_config['uploadType']==3)
{
if(!empty($this->_config['defaultImage']))
{
$this->_defaultImg = $this->_config['defaultImage'];
}
else
{
$this->_defaultImg = $this->assetsUrl.'/webuploader/noavatar.png';
}
if(!empty($this->containerClass)&&$this->containerClass=='upltu')$this->_defaultImg = '';
$this->_config['defaultImage'] = $this->_defaultImg;
$value = $this->hasModel()?$model->$attribute:$this->value;
$attachment = \app\modules\admin\models\Attachment::find()->where("hash='".md5($value)."'")->asArray()->one();
$uploadId = $this->id;
$src = $this->_defaultImg;
if ($this->hasModel())
{
if (($value = $model->$attribute)) {
$src = $this->realUrl($value);
}
}
else
{
$src = $this->value?$this->realUrl($this->value):$this->_defaultImg;
}
if(!empty($this->containerClass)&&$this->containerClass=='upltu')//美化后的
{
$displayStr = $src==''?' display:none; ':'';
$html = Html::tag('div', implode("\n", $eles), ['class' => '']);
$html.='

'.Html::tag('em', '', ['class' =>$this->delIconClass.' delImage3']).'
';
$this->insertMobileThumbJs($uploadId,$attachment);
}
else
{
$html = Html::tag('div', implode("\n", $eles), ['class' => '']);
$html.='

'.Html::tag('em', 'x', ['class' => 'close delImage']).'
';
$this->insertMobileThumbJs($uploadId,$attachment);
}
return $html;
}
else if($this->_config['uploadType']==4||$this->_config['uploadType']==5||$this->_config['uploadType']==6)//封面图
{
if(!empty($this->_config['defaultImage']))
{
$this->_defaultImg = $this->_config['defaultImage'];
}
else
{
$this->_defaultImg = $this->assetsUrl.'/webuploader/nopic.png';
}
if($this->_config['uploadType']==6)$this->_defaultImg = '';
$this->_config['defaultImage'] = $this->_defaultImg;
$value = $this->hasModel()?$model->$attribute:$this->value;
$attachment = \app\modules\admin\models\Attachment::find()->where("hash='".md5($value)."'")->asArray()->one();
$uploadId = $this->id;
//图片
$src = $this->_defaultImg;
if ($this->hasModel())
{
if (($value = $model->$attribute)) {
$src = $this->realUrl($value);
}
}
else
{
$src = $this->value?$this->realUrl($this->value):$this->_defaultImg;
}
if($this->helpTips)
{
$helptips = Html::tag('div', $this->helpTips, ['class' =>"helptips"]);
}
if($this->_config['uploadType']==6)
{
$html = Html::tag('div', implode("\n", $eles), ['class' => '']);
$buttonStr = Html::button('',array_merge($this->chooseButtonClass));
$displayStr = $src==''?' display:none; ':'';
$html.='';
}
else
{
$html = Html::tag('div', implode("\n", $eles), ['class' => '']);
$html.='
'.Html::button($this->_config['buttonTxt']?$this->_config['buttonTxt']:'选择图片', $this->chooseButtonClass).'
'.$helptips.'
';
}
if($this->_config['uploadType']==5||$this->_config['uploadType']==6)
{
$this->insertPcPicJs($uploadId,$attachment);
}
else
{
$this->insertMobileThumbJs($uploadId,$attachment);
}
return $html;
}
else if($this->_config['uploadType']==88)
{
$value = $this->hasModel()?$model->$attribute:$this->value;
$attachment = \app\modules\admin\models\Attachment::find()->where("hash='".md5($value)."'")->asArray()->one();
$uploadId = $this->id;
$html = Html::tag('div', implode("\n", $eles), ['class' => '']);
$html.='';
$this->insertDocJs($uploadId,$attachment);
return $html;
}
else
{
$eles[] = Html::tag('div', Html::button($this->_config['buttonTxt']?$this->_config['buttonTxt']:'选择图片', $this->chooseButtonClass), ['class' => $this->_config['buttonDivClass']?$this->_config['buttonDivClass'].' button-block-'.$this->_config['uploadType']:'button-block button-block-'.$this->_config['uploadType']]);
return Html::tag('div', implode("\n", $eles), ['class' => $this->chooseFileBlockClass?$this->chooseFileBlockClass:'choosefile-block']);
}
}
/**
* render html body-input-multi
*/
public function renderMultiInput ($model=null, $attribute=null)
{
Html::addCssClass($this->chooseButtonClass, " {$this->_hashVar}");
$eles = [];
//$eles[] = Html::tag('div',Html::textInput($attribute, null, ['class' => 'layui-input', 'readonly' => 'readonly']), ['class' => 'layui-input-inline']);
$inputName = $this->hasModel()?Html::getInputName($model, $attribute):$this->name;
$eles[] = Html::hiddenInput($inputName, null);
if($this->_config['uploadType']==8)//H5多图
{
$imgstr = '';
$value = $this->hasModel()?$model->$attribute:$this->value;
if(!empty($value))
{
$files = explode(",",$value);
if(is_array($files))foreach($files as $k=>$file)
{
$imgstr .= '
x ';
$attachments[] = \app\modules\admin\models\Attachment::find()->where("hash = '".md5($file)."'")->asArray()->one();
}
}
$html = Html::tag('div', implode("\n", $eles), ['class' => '']);
$uploadId = $this->id;
$html.='
'.Html::button($this->_config['buttonTxt']?$this->_config['buttonTxt']:'选择图片', $this->chooseButtonClass).'
';
$this->insertMobilePicJs($inputName,$uploadId,$attachments);
return $html;
}
//上传多个文档
else if($this->_config['uploadType']==99)
{
$uploadId = $this->id;
$fileTypeList = explode(",",$this->_config['accept']['extensions']);
$fileTypes = [];
if(is_array($fileTypeList))foreach($fileTypeList as $fileext){
$fileTypes[]= $fileext;
}
$limitStr = $this->_config['formData']['init_limit_day']?'今日还可上传'.$this->_config['formData']['upload_limit_day'].'个,':'';
$html = '';
$html.='
点击上传文件
按住Ctrl可选中多个同时上传;一次最多能添加'.$this->_config['fileNumLimit'].'个
'.$limitStr.'单个文件不超过'.($this->_config['fileSingleSizeLimit']/(1024*1024)).'MB
支持拓展名:'.join(" ",$fileTypes).'等
';
$this->insertMultiDocJs($uploadId);
return $html;
}
else
{
$eles[] = Html::tag('div', Html::button($this->_config['buttonTxt']?$this->_config['buttonTxt']:'选择图片', $this->chooseButtonClass), ['class' => $this->_config['buttonDivClass']?$this->_config['buttonDivClass']:'button-block']);
return Html::tag('div', implode("\n", $eles), ['class' =>$this->chooseFileBlockClass?$this->chooseFileBlockClass:'choosefile-block']);
}
}
/**
* render html body-image
*/
public function renderSingleImage ($model=null, $attribute=null)
{
if(!empty($this->_config['defaultImage']))
{
$this->_defaultImg = $this->_config['defaultImage'];
}
else
{
$this->_defaultImg = $this->assetsUrl.'/webuploader/nopic.png';
}
$src = $this->_defaultImg;
$eles = [];
if ($this->hasModel())
{
if (($value = $model->$attribute)) {
$src = $this->realUrl($value);
}
}
else
{
$src = $this->value?$this->realUrl($this->value):$this->_defaultImg;
}
$eles[] = Html::img($src, ['class' => 'img-thumbnail']);
$eles[] = Html::tag('em', 'x', ['class' => 'close delImage']);
if(!empty($this->helpTips))
{
$eles[] = Html::tag('div', $this->helpTips, ['class' =>"helptips"]);
}
return Html::tag('div', implode("\n", $eles), ['class' =>"uploadertype-".$this->_config['uploadType']." ".$this->_fixImgClass,'style'=>$this->fixStyle]);
}
/**
* render html body-image
*/
public function renderSingleFile ($model=null, $attribute=null)
{
if ($this->hasModel())
{
$relValue = $model->$attribute;
$value = $this->realUrl($relValue);
}
else
{
$relValue = $this->value;
$value = $this->realUrl($this->value);
}
$eles = [];
if($value)
{
$attachment = \app\modules\admin\models\Attachment::find()->where("hash='".md5($relValue)."'")->asArray()->one();
$eles[] = Html::tag('div',"".$attachment?$attachment['file_name']:basename($value)."", ['class' => 'uploader-unit-file-name']);
$eles[] = Html::tag('em', 'x', ['class' => 'close delMultiFile', 'title' => '删除']);
}
return Html::tag('div', ''.implode("\n", $eles).'
', ['class' => 'uploader-file-list uploadertype-'.$this->_config['uploadType'].' '.$this->_fixImgClass,'style'=>$this->fixStyle]);
}
public function renderMobileAvatar ($model=null, $attribute=null)
{
if ($this->hasModel())
{
$value = $model->$attribute;
$value = $this->realUrl($value);
}
else
{
$value = $this->realUrl($this->value);
}
if($value)
{
}
return '';
}
/**
* render html body-image
*/
public function renderMobileThumb ($model=null, $attribute=null)
{
if ($this->hasModel())
{
$value = $model->$attribute;
$value = $this->realUrl($value);
}
else
{
$value = $this->realUrl($this->value);
}
if($value)
{
}
return '';
}
/**
* render html body-image
*/
public function renderSingleUpload($model=null, $attribute=null)
{
if ($this->hasModel())
{
$value = $model->$attribute;
$value = $this->realUrl($value);
}
else
{
$value = $this->realUrl($this->value);
}
return '';
}
public function renderMultidoc($model=null, $attribute=null)
{
return '';
}
/**
* render html body-image-muitl
*/
public function renderMultiImage ($model=null, $attribute=null)
{
/**
* @var $srcTmp like this: src1,src2...srcxxx
*/
$srcTmp = $this->hasModel()?$model->$attribute:$this->value;
$items = [];
if ($srcTmp) {
is_string($srcTmp) && $srcTmp = explode(Yii::$app->params['webuploader']['delimiter'], $srcTmp);
$inputName = $this->hasModel()?Html::getInputName($model, $attribute):$this->name;
foreach ($srcTmp as $k => $v) {
$dv = $this->realUrl($v);
$src = $v ? $dv : $this->_defaultImg;
$eles = [];
$eles[] = Html::img($src, ['class' => 'img-responsive img-thumbnail cus-img']);
$eles[] = Html::hiddenInput($inputName . "[]", $v);
$eles[] = Html::tag('em', 'x', ['class' => 'close delMultiImage', 'title' => '删除']);
$items[] = Html::tag('div', implode("\n", $eles), ['class' => 'multi-item']);
}
}
return Html::tag('div', implode("\n", $items), ['class' => 'uploadertype-'.$this->_config['uploadType'].' multi-img-details'.' '. $this->_fixImgClass]);
}
/**
* render html body-image-muitl
*/
public function renderMobMultiImage ($model=null, $attribute=null)
{
/**
* @var $srcTmp like this: src1,src2...srcxxx
*/
$srcTmp = $this->hasModel()?$model->$attribute:$this->value;
$items = [];
if ($srcTmp) {
is_string($srcTmp) && $srcTmp = explode(Yii::$app->params['webuploader']['delimiter'], $srcTmp);
$inputName = $this->hasModel()?Html::getInputName($model, $attribute):$this->name;
foreach ($srcTmp as $k => $v) {
$dv = $this->realUrl($v);
$src = $v ? $dv : $this->_defaultImg;
$eles = [];
$eles[] = Html::img($src, ['class' => 'img-responsive img-thumbnail cus-img']);
$eles[] = Html::hiddenInput($inputName . "[]", $v);
$eles[] = Html::tag('em', 'x', ['class' => 'close delMultiImage', 'title' => '删除']);
$items[] = Html::tag('div', implode("\n", $eles), ['class' => 'multi-item']);
}
}
return Html::tag('div', implode("\n", $items), ['class' => 'input-group multi-img-details'.' '. $this->_fixImgClass]);
}
/**
* render html body-image-muitl
*/
public function renderMultiFile ($model=null, $attribute=null)
{
/**
* @var $srcTmp like this: src1,src2...srcxxx
*/
$srcTmp = $this->hasModel()?$model->$attribute:$this->value;
$items = [];
if ($srcTmp) {
is_string($srcTmp) && $srcTmp = explode(Yii::$app->params['webuploader']['delimiter'], $srcTmp);
$inputName = $this->hasModel()?Html::getInputName($model, $attribute):$this->name;
foreach ($srcTmp as $k => $v) {
$dv = $this->realUrl($v);
$attachment = \app\modules\admin\models\Attachment::find()->where("hash='".md5($v)."'")->asArray()->one();
$eles = [];
$eles[] = Html::tag('div',"".$attachment?$attachment['file_name']:basename($v)."", ['class' => 'uploader-unit-file-name']);
$eles[] = Html::hiddenInput($inputName . "[]", $v);
$eles[] = Html::tag('em', 'x', ['class' => 'close delMultiFile', 'title' => '删除']);
$items[] = Html::tag('div', implode("\n", $eles), ['class' => 'uploader-file-item']);
}
}
return Html::tag('div', implode("\n", $items), ['class' => 'uploadertype-'.$this->_config['uploadType'].' uploader-file-list'.' '. $this->_fixImgClass,'style'=>$this->fixStyle]);
}
//封面图
public function insertMobileThumbJs($uploadId,$attachment=null)
{
$config = Json::htmlEncode($this->_config);
if(!empty($attachment['file_path'])){
$attachment['file_path'] = $this->realUrl($attachment['file_path']);
}
else
{
$attachment = null;
}
$attachment = Json::htmlEncode($attachment);
$js = <<0){
uploader_{$uploadId}.removeFile( file );
$('#'+file.id).remove();
return;
}
$(".upload-box-{$uploadId} img").attr('src',loadimg);
uploader_{$uploadId}.upload();
});
//上传出错
uploader_{$uploadId}.on('uploadError', function (file, reason) {
layer_mobile.open({content: "文件[" + file.name + "]上传失败,原因:" + reason,time: 2});
});
uploader_{$uploadId}.on( 'error', function( code ) {
var msg = code;
switch (code) {
case 'Q_EXCEED_NUM_LIMIT':
msg = '添加的文件数量超出 fileNumLimit 的设置';
break;
case 'Q_EXCEED_SIZE_LIMIT':
msg = '添加的文件总大小超出了 fileSizeLimit 的设置';
break;
case 'Q_TYPE_DENIED':
msg = '添加的文件类型错误';
break;
case 'Q_TYPE_DENIED':
msg = '添加的文件类型错误';
break;
case 'F_EXCEED_SIZE':
msg = '文件超出大小限制';
break;
}
layer_mobile.open({content: msg,skin: 'msg',time: 2 });
});
// 文件上传成功,给item添加成功class, 用样式标记上传成功。
uploader_{$uploadId}.on( 'uploadSuccess', function( file,response ) {
if(response.code==1)
{
uploader_{$uploadId}.removeFile( file );
$(".input-{$uploadId}").val('');
$('#'+file.id).remove();
layer_mobile.open({content: response.msg,skin: 'msg',time: 2 });
return;
}
if(response.attachment=='')
{
uploader_{$uploadId}.removeFile( file );
$(".input-{$uploadId}").val('');
$('#'+file.id).remove();
layer_mobile.open({content:'上传出错,请联系管理员',skin: 'msg',time: 2 });
return;
}
uploader_{$uploadId}.removeFile( file );
$('#'+file.id).remove();
$(".input-{$uploadId}").val(response.attachment);
$(".upload-box-{$uploadId} img").attr('src',response.url);
if($("#img_box_{$uploadId}").length>0)$("#img_box_{$uploadId}").show();
});
// 完成上传完了,成功或者失败,先删除进度条。
uploader_{$uploadId}.on( 'uploadComplete', function( file ) {
});
//初始化已经存在的文件
uploader_{$uploadId}.on( 'ready', function( ) {
if(existfile_{$uploadId}==null)return;
getFileObject(existfile_{$uploadId}.file_path, function (fileObject) {
var wuFile = new WebUploader.Lib.File(WebUploader.guid('rt_'),fileObject);
var file = new WebUploader.File(wuFile);
file.name = existfile_{$uploadId}.file_name;
file.attachment_id = existfile_{$uploadId}.a_id;
file.file_path = existfile_{$uploadId}.file_path;
uploader_{$uploadId}.options.auto = false;
uploader_{$uploadId}.addFile(file);
existfile_{$uploadId} = null;
//初始状态
$('.upload-box-{$uploadId} .doc-delete').on('click', function(){
uploader_{$uploadId}.removeFile( file );
$('#'+file.id).remove();
$(".input-{$uploadId}").val('');
})
})
})
})
//下面是编辑图片时候用到
var getFileBlob = function (url, cb) {
var xhr = new XMLHttpRequest();
xhr.open("GET", url);
xhr.responseType = "blob";
xhr.addEventListener('load', function() {
cb(xhr.response);
});
xhr.send();
};
var blobToFile = function (blob, name) {
blob.lastModifiedDate = new Date();
blob.name = name;
return blob;
};
var getFileObject = function(filePathOrUrl, cb) {
getFileBlob(filePathOrUrl, function (blob) {
cb(blobToFile(blob, filePathOrUrl));
});
};
JS;
$this->_view->registerJs($js);
}
//多图(移动端)
public function insertMobilePicJs($inputName,$uploadId,$attachments=null)
{
$config = Json::htmlEncode($this->_config);
if(!empty($attachments))
{
for($i=0;$irealUrl($attachments[$i]['file_path']);
}
}
}
else
{
$attachments = null;
}
;
$attachments = Json::htmlEncode($attachments);
$js = <<0){
uploader_{$uploadId}.removeFile( file );
$('#'+file.id).remove();
return;
}
loading = layer_mobile.open({type: 2,time:2,content: '上传中...'});
uploader_{$uploadId}.upload();
});
//上传出错
uploader_{$uploadId}.on('uploadError', function (file, reason) {
layer_mobile.open({
content: "文件[" + file.name + "]上传失败,原因:" + reason
,time: 2
});
});
uploader_{$uploadId}.on( 'error', function( code ) {
var msg = code;
switch (code) {
case 'Q_EXCEED_NUM_LIMIT':
msg = '添加的文件数量超出 fileNumLimit 的设置';
break;
case 'Q_EXCEED_SIZE_LIMIT':
msg = '添加的文件总大小超出了 fileSizeLimit 的设置';
break;
case 'Q_TYPE_DENIED':
msg = '添加的文件类型错误';
break;
case 'Q_TYPE_DENIED':
msg = '添加的文件类型错误';
break;
case 'F_EXCEED_SIZE':
msg = '文件超出大小限制';
break;
}
layer_mobile.open({content: msg,skin: 'msg',time: 2 });
});
// 文件上传成功,给item添加成功class, 用样式标记上传成功。
uploader_{$uploadId}.on( 'uploadSuccess', function( file,response ) {
layer_mobile.close(loading);
if(response.code==1)
{
uploader_{$uploadId}.removeFile( file );
$('#'+file.id).remove();
layer_mobile.open({content: response.msg,skin: 'msg',time: 2 });
return;
}
if(response.attachment=='')
{
uploader_{$uploadId}.removeFile( file );
$('#'+file.id).remove();
layer_mobile.open({content: '上传出错,请联系管理员',skin: 'msg',time: 2 });
return;
}
uploader_{$uploadId}.removeFile( file );
$('#'+file.id).remove();
$(".upload-box-{$uploadId} .img-box").append("
x ");
});
// 完成上传完了,成功或者失败,先删除进度条。
uploader_{$uploadId}.on( 'uploadComplete', function( file ) {
});
//初始化已经存在的文件
uploader_{$uploadId}.on( 'ready', function( ) {
if(existfile_{$uploadId}==null||existfile_{$uploadId}[0]==null)return;
var k=0;
for(var i=0;i_view->registerJs($js);
}
//单张大图(PC端)
public function insertPcPicJs($uploadId,$attachment=null)
{
$config = Json::htmlEncode($this->_config);
if(!empty($attachment['file_path'])){
$attachment['file_path'] = $this->realUrl($attachment['file_path']);
}
else
{
$attachment = null;
}
$attachment = Json::htmlEncode($attachment);
$js = <<0){
uploader_{$uploadId}.removeFile( file );
$('#'+file.id).remove();
return;
}
$(".upload-box-{$uploadId} img").attr('src',loadimg);
$(".upload-box-{$uploadId} img").parent().addClass('loading').show();
uploader_{$uploadId}.upload();
});
//上传出错
uploader_{$uploadId}.on('uploadError', function (file, reason) {
layer.msg("文件[" + file.name + "]上传失败,原因:" + reason,{time: 3000});
});
uploader_{$uploadId}.on( 'error', function( code ) {
var msg = code;
switch (code) {
case 'Q_EXCEED_NUM_LIMIT':
msg = '添加的文件数量超出 fileNumLimit 的设置';
break;
case 'Q_EXCEED_SIZE_LIMIT':
msg = '添加的文件总大小超出了 fileSizeLimit 的设置';
break;
case 'Q_TYPE_DENIED':
msg = '添加的文件类型错误';
break;
case 'Q_TYPE_DENIED':
msg = '添加的文件类型错误';
break;
case 'F_EXCEED_SIZE':
msg = '文件超出大小限制';
break;
}
layer.msg(msg,{time: 2000});
});
// 文件上传成功,给item添加成功class, 用样式标记上传成功。
uploader_{$uploadId}.on( 'uploadSuccess', function( file,response ) {
if(response.code==1)
{
uploader_{$uploadId}.removeFile( file );
$(".input-{$uploadId}").val('');
$('#'+file.id).remove();
layer.msg(response.msg,{time: 2000});
return;
}
if(response.attachment=='')
{
uploader_{$uploadId}.removeFile( file );
$(".input-{$uploadId}").val('');
$('#'+file.id).remove();
layer.msg('上传出错,请联系管理员',{time: 2000});
return;
}
uploader_{$uploadId}.removeFile( file );
$('#'+file.id).remove();
$(".input-{$uploadId}").val(response.attachment);
$(".upload-box-{$uploadId} img").attr('src',response.url);
if($("#img_box_{$uploadId}").length>0)$("#img_box_{$uploadId}").show();
$(".upload-box-{$uploadId} img").parent().removeClass('loading');
});
// 完成上传完了,成功或者失败,先删除进度条。
uploader_{$uploadId}.on( 'uploadComplete', function( file ) {
});
//初始化已经存在的文件
uploader_{$uploadId}.on( 'ready', function( ) {
if(existfile_{$uploadId}==null)return;
getFileObject(existfile_{$uploadId}.file_path, function (fileObject) {
var wuFile = new WebUploader.Lib.File(WebUploader.guid('rt_'),fileObject);
var file = new WebUploader.File(wuFile);
file.name = existfile_{$uploadId}.file_name;
file.attachment_id = existfile_{$uploadId}.a_id;
file.file_path = existfile_{$uploadId}.file_path;
uploader_{$uploadId}.options.auto = false;
uploader_{$uploadId}.addFile(file);
existfile_{$uploadId} = null;
//初始状态
$('.upload-box-{$uploadId} .doc-delete').on('click', function(){
uploader_{$uploadId}.removeFile( file );
$('#'+file.id).remove();
$(".input-{$uploadId}").val('');
})
})
})
})
//下面是编辑图片时候用到
var getFileBlob = function (url, cb) {
var xhr = new XMLHttpRequest();
xhr.open("GET", url);
xhr.responseType = "blob";
xhr.addEventListener('load', function() {
cb(xhr.response);
});
xhr.send();
};
var blobToFile = function (blob, name) {
blob.lastModifiedDate = new Date();
blob.name = name;
return blob;
};
var getFileObject = function(filePathOrUrl, cb) {
getFileBlob(filePathOrUrl, function (blob) {
cb(blobToFile(blob, filePathOrUrl));
});
};
JS;
$this->_view->registerJs($js);
}
//单个文档上传
public function insertDocJs($uploadId,$attachment=null)
{
$config = Json::htmlEncode($this->_config);
if(!empty($attachment['file_path'])){
$attachment['file_path'] = $this->realUrl($attachment['file_path']);
}
else
{
$attachment = null;
}
$attachment = Json::htmlEncode($attachment);
$js = <<0){
uploader_{$uploadId}.removeFile(file, true);
message('你已经达到今天上传数量上限,请明天再来!');
return false;
}
});
// 当有文件添加进队列
uploader_{$uploadId}.on( 'fileQueued', function( file ) {
if(existfile_{$uploadId}!=null)return;
var title = file.name.replace("."+file.ext,"");
this.md5File(file).then(function (md5) {
$.get(config_{$uploadId}.md5checkUrl+"?md5=" + md5+"&title="+title, function (data) {
if (data.error == 0) {
file.md5 = md5;
file.title = title;
uploader_{$uploadId}.upload();
} else if (data.error == 1||data.error == 2) {
layer.confirm(data.msg, {
btn: ['知道了'] //按钮
}, function(index){
uploader_{$uploadId}.removeFile(file, true);
layer.close(index);
}, function(index){
uploader_{$uploadId}.removeFile(file, true);
layer.close(index);
});
}
});
});
});
uploader_{$uploadId}.on('uploadProgress', function (file, percent) {
percent = parseInt(percent);
$(".upload-box-{$uploadId} .rings").css({'width':percent * 100 + '%'});
$(".upload-box-{$uploadId} .ringstxt").text(percent * 100 + '%');
$(".upload-box-{$uploadId} .uploadtip_txt").text('上传中(' + parseInt(percent * 100) + '%' + ")");
});
uploader_{$uploadId}.on('uploadError', function (file, reason) {
layer.confirm("文件[" + file.name + "]上传失败,原因:" + reason, {
btn: ['确定'] //按钮
}, function(){
uploader_{$uploadId}.removeFile(file, true);
});
});
uploader_{$uploadId}.on( 'error', function( code ) {
var msg = code;
switch (code) {
case 'Q_EXCEED_NUM_LIMIT':
msg = '添加的文件数量超出 fileNumLimit 的设置';
break;
case 'Q_EXCEED_SIZE_LIMIT':
msg = '添加的文件总大小超出了 fileSizeLimit 的设置';
break;
case 'Q_TYPE_DENIED':
msg = '添加的文件类型错误';
break;
case 'Q_TYPE_DENIED':
msg = '添加的文件类型错误';
break;
case 'F_EXCEED_SIZE':
msg = '文件超出大小限制';
break;
}
message(msg);
});
uploader_{$uploadId}.on( 'uploadSuccess', function( file,response ) {
if(response.code==1)
{
$(".upload-box-{$uploadId} .rings").css({'width':'0%'});
$(".upload-box-{$uploadId} .ringstxt").text('');
$(".upload-box-{$uploadId} .uploadtip_txt").html("点击上传文件");
$(".upload-box-{$uploadId} .upload_status_txt").html('');
uploader_{$uploadId}.removeFile( file );
$(".input-{$uploadId}").val('');
$('#'+file.id).remove();
message(response.msg);
return;
}
else
{
$(".upload-box-{$uploadId} .upload_status_txt").html("");
$('.upload-box-{$uploadId} .doc-delete').on('click', function(){
$(".upload-box-{$uploadId} .rings").css({'width':'0%'});
$(".upload-box-{$uploadId} .ringstxt").text('');
$(".upload-box-{$uploadId} .uploadtip_txt").html("点击上传文件");
$(".upload-box-{$uploadId} .upload_status_txt").html('');
uploader_{$uploadId}.removeFile( file );
$('#'+file.id).remove();
$(".input-{$uploadId}").val('');
})
if(response.attachment=='')
{
$(".upload-box-{$uploadId} .rings").css({'width':'0%'});
$(".upload-box-{$uploadId} .ringstxt").text('');
$(".upload-box-{$uploadId} .uploadtip_txt").html("点击上传文件");
$(".upload-box-{$uploadId} .upload_status_txt").html('');
uploader_{$uploadId}.removeFile( file );
$(".input-{$uploadId}").val('');
$('#'+file.id).remove();
message('上传出错,请联系管理员');
return;
}
else
{
$(".upload-box-{$uploadId} .uploadtip_txt").html("已上传");
$(".input-{$uploadId}").val(response.attachment);
if(file.ext=='zip'||file.ext=='rar')
{
$('#thumbbox').show();
$('#editorbox').show();
$('#maininfo').removeClass('col-md-12').addClass('col-md-8');
}
else if(file.ext=='mp4'||file.ext=='flv'||file.ext=='wmv'||file.ext=='mp3')
{
$('#thumbbox').show();
$('#editorbox').hide();
$('#maininfo').removeClass('col-md-12').addClass('col-md-8');
}
else
{
$('#thumbbox').hide();
$('#editorbox').hide();
$('#maininfo').removeClass('col-md-8').addClass('col-md-12');
}
$('#doc-md5').val(file.md5);
$('#doc-ext').val(file.ext);
$('#doc-filesize').val(file.size);
$('#doc-title').val(file.title);
if($('#auto_get_tags').length>0){ $('#auto_get_tags').click();}
}
}
});
// 完成上传完了,成功或者失败,先删除进度条。
uploader_{$uploadId}.on( 'uploadComplete', function( file ) {
});
//初始化已经存在的文件
uploader_{$uploadId}.on( 'ready', function( ) {
if(existfile_{$uploadId}==null)return;
getFileObject(existfile_{$uploadId}.file_path, function (fileObject) {
var wuFile = new WebUploader.Lib.File(WebUploader.guid('rt_'),fileObject);
var file = new WebUploader.File(wuFile);
file.name = existfile_{$uploadId}.file_name;
file.attachment_id = existfile_{$uploadId}.a_id;
uploader_{$uploadId}.options.auto = false;
uploader_{$uploadId}.addFile(file);
existfile_{$uploadId} = null;
//初始状态
$(".upload-box-{$uploadId} .rings").css({'width':100 + '%'});
$(".upload-box-{$uploadId} .ringstxt").text( 100 + '%');
$(".upload-box-{$uploadId} .uploadtip_txt").text('已上传');
$(".upload-box-{$uploadId} .upload_status_txt").html("");
$('.upload-box-{$uploadId} .doc-delete').on('click', function(){
$(".upload-box-{$uploadId} .rings").css({'width':'0%'});
$(".upload-box-{$uploadId} .ringstxt").text('');
$(".upload-box-{$uploadId} .uploadtip_txt").html("点击上传文件");
$(".upload-box-{$uploadId} .upload_status_txt").html('');
uploader_{$uploadId}.removeFile( file );
$('#'+file.id).remove();
$(".input-{$uploadId}").val('');
})
})
})
})
//下面是编辑图片时候用到
var getFileBlob = function (url, cb) {
var xhr = new XMLHttpRequest();
xhr.open("GET", url);
xhr.responseType = "blob";
xhr.addEventListener('load', function() {
cb(xhr.response);
});
xhr.send();
};
var blobToFile = function (blob, name) {
blob.lastModifiedDate = new Date();
blob.name = name;
return blob;
};
var getFileObject = function(filePathOrUrl, cb) {
getFileBlob(filePathOrUrl, function (blob) {
cb(blobToFile(blob, filePathOrUrl));
});
};
JS;
$this->_view->registerJs($js);
}
//文档批量上传
public function insertMultiDocJs($uploadId)
{
$config = Json::htmlEncode($this->_config);
$js = <<0&&$('#doc-ext_type_1').val()=='')||($('#doc-ext_type_2').length>0&&$('#doc-ext_type_2').val()=='')||($('#doc-ext_type_3').length>0&&$('#doc-ext_type_3').val()=='')||($('#doc-ext_type_4').length>0&&$('#doc-ext_type_4').val()=='')||($('#doc-ext_type_5').length>0&&$('#doc-ext_type_5').val()==''))
{
message('请完善栏目扩展属性');
return false;
}
if(uploader_{$uploadId}.options.formData.upload_limit_day<=0&&uploader_{$uploadId}.options.formData.init_limit_day>0){
uploader_{$uploadId}.removeFile(file, true);
message('你已经达到今天上传数量上限,请明天再来!');
return false;
}
file.cat_id = $('#cat_id').val();
file.cat_name = $('#cat_tit').text();
file.coin_price = $('#doc-coin_price').val();
file.title = file.name.replace("."+file.ext,"");
file.iconfont = 'icon-'+file.ext;
if(file.ext=='doc'||file.ext=='docx')
{
file.iconfont = 'icon-file-doc-fill';
}
if(file.ext=='ppt'||file.ext=='pptx')
{
file.iconfont = 'icon-file-ppt-fill';
}
if(file.ext=='xls'||file.ext=='xlsx')
{
file.iconfont = 'icon-file-excel-fill';
}
if(file.ext=='zip'||file.ext=='rar')
{
file.iconfont = 'icon-wenjian_yasuobao';
}
if(file.ext=='pdf')
{
file.iconfont = 'icon-file-pdf-fill';
}
if($('#doc-ext_type_1').val()!=''&&$('#doc-ext_type_1').length>0){
file.ext_type_1 = $('#doc-ext_type_1').val();
}
if($('#doc-ext_type_2').val()!=''&&$('#doc-ext_type_2').length>0){
file.ext_type_2 = $('#doc-ext_type_2').val();
}
if($('#doc-ext_type_3').val()!=''&&$('#doc-ext_type_3').length>0){
file.ext_type_3 = $('#doc-ext_type_3').val();
}
if($('#doc-ext_type_4').val()!=''&&$('#doc-ext_type_4').length>0){
file.ext_type_4 = $('#doc-ext_type_4').val();
}
if($('#doc-ext_type_5').val()!=''&&$('#doc-ext_type_5').length>0){
file.ext_type_5 = $('#doc-ext_type_5').val();
}
});
// 文件添加进队列
uploader_{$uploadId}.on( 'fileQueued', function( file ) {
this.md5File(file).then(function (md5) {
file.md5 = md5;
$.get(config_{$uploadId}.md5checkUrl+"?md5=" + md5 +"&title="+file.title, function (data) {
if (data.error == 0) {
var html = '
';
html += '';
html += '
';
html += ''+file.cat_name+'
';
html += ''+uploader_{$uploadId}.options.formData.coin_name+':
';
html += ''+formatBytes(file.size)+'
';
html += '';
$(".waitlist").append(html);
$('#waitnum').text($('.waitlist li').length);
//从队列删除文件
$(document).on("click", ".delitem", function(){
var files = uploader_{$uploadId}.getFiles();
for(var i in files)
{
if(files[i].id==$(this).data('fileid')){
uploader_{$uploadId}.removeFile(files[i], true);
}
}
$(this).parent().parent().remove();
resetStatus();
})
uploader_{$uploadId}.upload(file);
} else if (data.error == 1) {//不可上传
var errorHtml = '
';
errorHtml += '';
errorHtml += '
';
errorHtml += ''+file.cat_name+'
';
errorHtml += ''+uploader_{$uploadId}.options.formData.coin_name+':
';
errorHtml += ''+formatBytes(file.size)+'
';
errorHtml += '';
$(".errorlist").append(errorHtml);
$('#errornum').text($('.errorlist li').length);
uploader_{$uploadId}.removeFile(file, true);
//从队列删除文件
$(document).on("click", ".moveitem", function(){
$(this).parent().parent().remove();
resetStatus();
})
}
else if(data.error==2){//修改标题后可以传
var edithtml = '
';
edithtml += '';
edithtml += '待修改 | 继续上传
';
edithtml += ''+file.cat_name+'
';
edithtml += ''+uploader_{$uploadId}.options.formData.coin_name+':
';
edithtml += ''+formatBytes(file.size)+'
';
edithtml += '';
$(".editlist").append(edithtml);
//从队列删除文件
$(document).on("click", ".delitem", function(){
var files = uploader_{$uploadId}.getFiles();
for(var i in files)
{
if(files[i].id==$(this).data('fileid')) {uploader_{$uploadId}.removeFile(files[i], true)};
}
$(this).parent().parent().remove();
resetStatus();
})
$(document).on("click", ".goonupload", function(){
if($(this).data('lock')==1)
{
message('请修改标题后上传');
return;
}
var title = $("#li_"+$(this).data('fileid')+" .doctit").val();
var files = uploader_{$uploadId}.getFiles();
for(var i in files)
{
if(files[i].id==$(this).data('fileid')) {
files[i].title = title;
uploader_{$uploadId}.upload(files[i]);
}
}
})
}
resetStatus();
});
});
});
uploader_{$uploadId}.on('uploadProgress', function (file, percent) {
percent = parseInt(percent);
$(".upload-box-{$uploadId} .rings").css({'width':percent * 100 + '%'});
$(".upload-box-{$uploadId} .ringstxt").text(percent * 100 + '%');
});
uploader_{$uploadId}.on('uploadError', function (file, reason) {
layer.confirm("文件[" + file.name + "]上传失败,原因:" + reason, {
btn: ['确定'] //按钮
}, function(){
});
});
uploader_{$uploadId}.on( 'error', function( code ) {
var msg = code;
switch (code) {
case 'Q_EXCEED_NUM_LIMIT':
msg = '队列中的文件数量超出上限';
break;
case 'Q_EXCEED_SIZE_LIMIT':
msg = '队列中的文件总大小超出上限';
break;
case 'Q_TYPE_DENIED':
msg = '添加的文件类型错误';
break;
case 'Q_TYPE_DENIED':
msg = '添加的文件类型错误';
break;
case 'F_EXCEED_SIZE':
msg = '文件超出大小限制';
break;
}
message(msg);
});
// 文件上传成功,给item添加成功class, 用样式标记上传成功。
uploader_{$uploadId}.on( 'uploadSuccess', function( file,response ) {
$('#waitnum').text($('.waitlist li').length);
if(response.code==1)
{
var html = '
';
html += '';
html += '
';
html += ''+file.cat_name+'
';
html += ''+uploader_{$uploadId}.options.formData.coin_name+':
';
html += ''+formatBytes(file.size)+'
';
html += '';
$(".faillist").append(html);
uploader_{$uploadId}.removeFile( file );
$('#li_'+file.id).remove();
resetStatus();
$(".upload-box-{$uploadId} .rings").css({'width':'0%'});
$(".upload-box-{$uploadId} .ringstxt").text('');
return;
}
else
{
if(response.attachment=='')
{
var html = '
';
html += '';
html += '
';
html += ''+file.cat_name+'
';
html += ''+uploader_{$uploadId}.options.formData.coin_name+':
';
html += ''+formatBytes(file.size)+'
';
html += '';
$(".faillist").append(html);
$('#failnum').text($('.faillist li').length);
uploader_{$uploadId}.removeFile( file );
$('#li_'+file.id).remove();
//从队列删除文件
$(document).on("click", ".removeFailItem", function(){
$(this).parent().parent().remove();
resetStatus();
$(".upload-box-{$uploadId} .rings").css({'width':'0%'});
$(".upload-box-{$uploadId} .ringstxt").text('');
})
return;
}
else
{
if(uploader_{$uploadId}.options.formData.upload_limit_day<=0&&uploader_{$uploadId}.options.formData.init_limit_day>0){
var files = uploader_{$uploadId}.getFiles();
for(var i in files)
{
uploader_{$uploadId}.cancelFile(files[i]);
}
$(".upload-box-{$uploadId} .rings").css({'width':'0%'});
$(".upload-box-{$uploadId} .ringstxt").text('');
message('你已经达到今天上传数量上限,请明天再来!');
return false;
}
//var loading = commonLoading();
var postData = {'Doc[title]':file.title,'Doc[md5]':file.md5,'Doc[ext]':file.ext,'Doc[filesize]':file.size,'cat_id':file.cat_id,'Doc[ext_type_1]':file.ext_type_1,'Doc[ext_type_2]':file.ext_type_2,'Doc[ext_type_3]':file.ext_type_3,'Doc[ext_type_4]':file.ext_type_4,'Doc[ext_type_5]':file.ext_type_5,'DocData[file]':response.attachment,'Doc[coin_price]':file.coin_price}
$.ajax({
type: "POST",
async : false,
url:api_url+"upload/multi",
data:$.extend(postData, {request_from:request_from}),
headers: {'Authorization': 'Bearer '+access_token},
success: function (res) {
//layer.close(loading);
if(res.error==0)
{
if(uploader_{$uploadId}.options.formData.upload_limit_day>0)
{
uploader_{$uploadId}.options.formData.upload_limit_day = uploader_{$uploadId}.options.formData.upload_limit_day-1;
$('#restnum,#bottomnum').text(uploader_{$uploadId}.options.formData.upload_limit_day);
}
var html = '
';
html += '';
html += '
';
html += ''+file.cat_name+'
';
html += ''+uploader_{$uploadId}.options.formData.coin_name+':
';
html += ''+formatBytes(file.size)+'
';
html += '';
$(".suclist").append(html);
uploader_{$uploadId}.removeFile( file );
$('#li_'+file.id).remove();
//从队列删除文件
$(document).on("click", ".removeSucItem", function(){
$(this).parent().parent().remove();
$('#sucnum').text($('.suclist li').length);
resetStatus();
})
resetStatus();
$(".upload-box-{$uploadId} .rings").css({'width':'0%'});
$(".upload-box-{$uploadId} .ringstxt").text('');
}
else
{
uploader_{$uploadId}.removeFile( file );
$('#sucli_'+file.id).remove();
resetStatus();
$(".upload-box-{$uploadId} .rings").css({'width':'0%'});
$(".upload-box-{$uploadId} .ringstxt").text('');
message(res.msg);
}
}
});
}
}
$('#waitnum').text($('.waitlist li').length);
});
// 完成上传完了,成功或者失败,先删除进度条。
uploader_{$uploadId}.on( 'uploadComplete', function( file ) {
$(".batchupload-tab li").eq(1).click();
$(".upload-box-{$uploadId} .rings").css({'width':'0%'});
$(".upload-box-{$uploadId} .ringstxt").text('');
resetStatus();
});
//初始化已经存在的文件
uploader_{$uploadId}.on( 'ready', function( ) {
uploader_{$uploadId}.addButton({id: '#continueupload'});
})
})
var formatBytes = function (bytes,decimals) {
if(bytes == 0) return '0 Bytes';
var k = 1024,
dm = decimals <= 0 ? 0 : decimals || 2,
sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],
i = Math.floor(Math.log(bytes) / Math.log(k));
return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];
}
var resetStatus = function()
{
if($('.waitlist li').length>0){ $('.waitlist').siblings('.empty').hide(); }
if($('.waitlist li').length==0){ $('.waitlist').siblings('.empty').show();}
if($('.suclist li').length>0){ $('.suclist').siblings('.empty').hide(); }
if($('.suclist li').length==0){ $('.suclist').siblings('.empty').show();}
if($('.faillist li').length>0){ $('.faillist').siblings('.empty').hide(); }
if($('.faillist li').length==0){ $('.faillist').siblings('.empty').show();}
if($('.editlist li').length>0){ $('.editlist').siblings('.empty').hide(); }
if($('.editlist li').length==0){ $('.editlist').siblings('.empty').show();}
if($('.errorlist li').length>0){ $('.errorlist').siblings('.empty').hide(); }
if($('.errorlist li').length==0){ $('.errorlist').siblings('.empty').show();}
$('#sucnum').text($('.suclist li').length);
$('#editnum').text($('.editlist li').length);
$('#failnum').text($('.faillist li').length);
$('#waitnum').text($('.waitlist li').length);
$('#errornum').text($('.errorlist li').length);
}
JS;
$this->_view->registerJs($js);
}
/**
* validate `$value` is url
*/
private function _validateUrl ($value)
{
$pattern = '/^{schemes}:\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(?::\d{1,5})?(?:$|[?\/#])/i';
$validSchemes = ['http', 'https'];
$pattern = str_replace('{schemes}', '(' . implode('|', $validSchemes) . ')', $pattern);
if (!preg_match($pattern, $value)) {
return false;
}
return true;
}
//获取文件绝对URL
function realUrl($url)
{
if(empty($url))return '';
if($this->_validateUrl($url))
{
return $url;
}
else
{
$url = getFileUrl($url);
return $url;
}
}
}