default.php 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. <?php
  2. use yii\helpers\Html;
  3. use yii\helpers\Url;
  4. use common\helpers\ImageHelper;
  5. use common\helpers\StringHelper;
  6. ?>
  7. <div class="rf-row">
  8. <div class="col-sm-12">
  9. <div class="upload-list">
  10. <ul id="<?= $boxId; ?>" data-name="<?= $name?>" data-boxId="<?= $boxId?>" data-multiple="<?= $config['pick']['multiple'] ?>">
  11. <?php foreach ($value as $vo){ ?>
  12. <li>
  13. <?= Html::hiddenInput($name, $vo)?>
  14. <div class="img-box">
  15. <?php if ($type == 'images' || ImageHelper::isImg($vo)) {?>
  16. <a href="<?= trim($vo) ?>" data-fancybox="rfUploadImg">
  17. <div class="bg-cover" style="background-image: url(<?= $vo?>);"></div>
  18. </a>
  19. <?php } else { ?>
  20. <i class="fa fa-file-alt"></i>
  21. <i class="upload-extend"><?= StringHelper::clipping($vo) ?></i>
  22. <div class="bottom-bar"><a href="<?= $vo ?>" target="_blank">预览</a></div>
  23. <?php } ?>
  24. <i class="delimg" data-multiple="<?= $config['pick']['multiple'] ?>"></i>
  25. </div>
  26. </li>
  27. <?php } ?>
  28. <li class="upload-box <?php if(!empty($value) && $config['pick']['multiple'] == false){?>hide<?php } ?>">
  29. <i class="fa fa-cloud-upload-alt"></i>
  30. <?php if ($themeConfig['select'] === true) {?>
  31. <div class="upload-box-bg hide befor-upload">
  32. <a class="first openUploadIframe" href="<?= Url::to(['/files/selector', 'box_id' => $boxId, 'upload_type' => $type, 'multiple' => $config['pick']['multiple'], 'upload_drive' => $config['formData']['drive']])?>">选择文件</a>
  33. <a class="second upload-box-immediately">立即上传</a>
  34. </div>
  35. <?php } ?>
  36. <div class="upload-box-bg hide">
  37. <div class="upload-progress first">
  38. <span class="badge bg-green">0%</span>
  39. </div>
  40. <a class="second cancel">取消上传</a>
  41. </div>
  42. </li>
  43. </ul>
  44. </div>
  45. </div>
  46. </div>
  47. <!--模板-->
  48. <script type="text/html" id="tpl-<?= $boxId; ?>">
  49. <li>
  50. <input type="hidden" name="<?= $name; ?>" value="{{value}}">
  51. <div class="img-box">
  52. {{if upload_type == 'images'}}
  53. <a href="{{value}}" data-fancybox="rfUploadImg">
  54. <div class="bg-cover" style="background-image: url({{value}});"></div>
  55. </a>
  56. {{else}}
  57. <i class="fa fa-file-alt"></i>
  58. <i class="upload-extend">{{extend}}</i>
  59. <div class="bottom-bar"><a href="{{value}}" target="_blank">预览</a></div>
  60. {{/if}}
  61. <i class="delimg" data-multiple="{{multiple}}"></i>
  62. </div>
  63. </li>
  64. </script>
  65. <!--隐藏上传组件-->
  66. <div class="hidden" id="upload-<?= $boxId; ?>">
  67. <div class="upload-album-<?= $boxId; ?>"></div>
  68. </div>
  69. <script>
  70. var boxId = "<?= $boxId; ?>";
  71. var closeFiles = {};
  72. // 删除图片节点
  73. $(document).on("click", ".delimg", function() {
  74. let parentObj = $(this).parent().parent();
  75. let multiple = $(this).data('multiple');
  76. let name = parentObj.parent().attr('data-name');
  77. let boxId = parentObj.parent().attr('data-boxId');
  78. if (multiple == true) {
  79. name = name.substring(0, name.length - 2);
  80. }
  81. let input = '<input type="hidden" name="' + name + '" value="" id="hideInput-' + boxId + '">';
  82. // 判断是否是多图上传
  83. if (multiple === '' || multiple === false) {
  84. //增加值为空的隐藏域
  85. parentObj.parent().append(input);
  86. //显示上传图片按钮
  87. parentObj.next("li").removeClass('hide');
  88. } else {
  89. // 增加值为空的隐藏域
  90. let length = parentObj.parent().find('li').length;
  91. if (length === 2) {
  92. parentObj.parent().append(input);
  93. }
  94. }
  95. parentObj.remove();
  96. });
  97. // 上传成功
  98. $(document).on('upload-success-' + boxId, function(e, data, config){
  99. let boxId = config.boxId;
  100. let multiple = config.pick.multiple;
  101. // 判断是否是多图上传
  102. let obj = $('#' + boxId + ' .upload-box');
  103. if (multiple === 'false' || multiple === false){
  104. $(obj).addClass('hide');
  105. }
  106. var arr = data.url.split('.');
  107. // 增加显示
  108. let callData = [];
  109. callData["id"] = data.id;
  110. callData["value"] = data.url;
  111. callData["extend"] = '.' + arr[arr.length - 1];
  112. callData["upload_type"] = data.upload_type;
  113. callData["multiple"] = multiple;
  114. let html = template('tpl-' + config.boxId, callData);
  115. // 查找文本框并移除
  116. $(obj).parent().find('#hideInput-' + boxId).remove();
  117. $(obj).before(html);
  118. });
  119. // 上传失败
  120. $(document).on('upload-error-' + boxId, function(e, file, reason, uploader, config){
  121. uploader.removeFile(file); //从队列中移除
  122. rfError("上传失败,服务器错误");
  123. });
  124. // 文件添加进来的时候
  125. $(document).on('upload-file-queued-' + boxId, function(e, file, uploader, config){
  126. let parentObj = getParent(config);
  127. });
  128. // 一批文件添加进来的时候
  129. $(document).on('upload-files-queued-' + boxId, function(e, files, uploader, config){
  130. let parentObj = getParent(config);
  131. });
  132. // 上传不管成功还是失败回调
  133. $(document).on('upload-complete-' + boxId, function(e, file, num, config, uploadProgress){
  134. let parentObj = getParent(config);
  135. var remove = true;
  136. // 如果队列为空,则移除进度条
  137. jQuery.each(uploadProgress, function(i, val) {
  138. var tmpVal = parseInt(val);
  139. if (tmpVal >= -1 && tmpVal < 100 && closeFiles[i] === undefined) {
  140. remove = false;
  141. }
  142. });
  143. console.log(closeFiles);
  144. console.log(uploadProgress);
  145. if (remove === true) {
  146. parentObj.find(".upload-progress").parent().addClass('hide');
  147. }
  148. });
  149. // 创建进度条
  150. $(document).on('upload-create-progress-' + boxId, function(e, file, uploader, config){
  151. let parentObj = getParent(config);
  152. if (parentObj.children(".upload-progress").hasClass('hide')) {
  153. parentObj.children(".badge").html("0%");
  154. let progressCancel = parentObj.find('.cancel');
  155. //绑定点击事件
  156. progressCancel.click(function() {
  157. uploader.cancelFile(file);
  158. closeFiles[file.id] = true;
  159. parentObj.find('.upload-progress').parent().addClass('hide');
  160. });
  161. parentObj.find('.upload-progress').parent().removeClass('hide');
  162. }
  163. });
  164. // 实时进度条
  165. $(document).on('upload-progress-' + boxId, function(e, file, percentage, config){
  166. let parentObj = getParent(config);
  167. let progressObj = parentObj.find(".upload-progress");
  168. percentage = Math.floor(percentage * 100);
  169. if (percentage > 1) {
  170. percentage -= 1;
  171. }
  172. progressObj.find(".badge").attr('percentage', percentage);
  173. progressObj.find(".badge").html(percentage + "%");
  174. });
  175. // md5创建验证中
  176. $(document).on('md5Verify-create-progress-' + boxId, function(e, file, uploader, config, text = "验证中..."){
  177. let parentObj = getParent(config);
  178. if (parentObj.children(".upload-progress").length === 0) {
  179. parentObj.find(".badge").html(text);
  180. let progressCancel = parentObj.find('.cancel');
  181. //绑定点击事件
  182. progressCancel.click(function() {
  183. uploader.cancelFile(file);
  184. parentObj.find('.upload-progress').parent().addClass('hide');
  185. });
  186. parentObj.find('.upload-progress').parent().removeClass('hide');
  187. }
  188. });
  189. // 选择回调
  190. $(document).on('select-file-' + boxId, function(e, boxId, data){
  191. if (data.length === 0) {
  192. return;
  193. }
  194. let multiple = $('#' + boxId).data('multiple');
  195. // 判断是否是多图上传
  196. let obj = $('#' + boxId + ' .upload-box');
  197. if (multiple === 'false' || multiple === false || multiple === ''){
  198. $(obj).addClass('hide');
  199. // 增加显示
  200. var arr = data[0].url.split('.');
  201. let callData = [];
  202. callData["id"] = data[0].id;
  203. callData["value"] = data[0].url;
  204. callData["upload_type"] = data[0].upload_type;
  205. callData["extend"] = '.' + arr[arr.length - 1];
  206. callData["multiple"] = multiple;
  207. let html = template('tpl-' + boxId, callData);
  208. $(obj).before(html);
  209. } else {
  210. for (let i = 0; i < data.length; i++) {
  211. // 增加显示
  212. var arr = data[i].url.split('.');
  213. let callData = [];
  214. callData["id"] = data[i].id;
  215. callData["value"] = data[i].url;
  216. callData["upload_type"] = data[i].upload_type;
  217. callData["extend"] = '.' + arr[arr.length - 1];
  218. callData["multiple"] = multiple;
  219. let html = template('tpl-' + boxId, callData);
  220. $(obj).before(html);
  221. }
  222. }
  223. // 查找文本框并移除
  224. $(obj).parent().find('#hideInput-' + boxId).remove();
  225. });
  226. // 获取当前的父类
  227. function getParent(config) {
  228. let boxId = config.boxId;
  229. return $('#' + boxId);
  230. }
  231. </script>
粤ICP备19079148号