manage.blade.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338
  1. @extends('admin.layout')
  2. @section('content')
  3. <link href="/base/js/swfupload/swfupload.css?v={{config("sys.version")}}" rel="stylesheet">
  4. <script type="text/javascript" src="/base/js/zclip/jquery.zclip.min.js?v={{config("sys.version")}}" ></script>
  5. <style type="text/css">
  6. i,em{font-style:normal;}
  7. .upload_object {width:80px;}
  8. .upload_object, .checkoption_btn {float:left;}
  9. .checkoption_btn{text-align:center; width:260px;}
  10. .checkoption_btn .checkbox_item{position:relative;display:inline-block;margin-right:10px;height:16px;}
  11. .checkbox_item input{position:absolute;top:-9999px;left:-9999px;}
  12. .checkbox_item .check_label{display:inline-block;cursor:default;}
  13. .checkbox_icon{display:block;float:left;margin-right:5px;width:16px;height:16px;background:url('/base/img/checkbox_icon.png') 0 0;}
  14. .check_label { width:230px; padding-top: 6px;}
  15. .check_label.on .checkbox_icon{background-position:-16px 0;}
  16. .checkbox_text{float:left;height:16px;line-height:16px; font-weight: normal;}
  17. </style>
  18. <div class="wrapper wrapper-content">
  19. <div class="row">
  20. <div class="col-sm-3">
  21. <div class="ibox float-e-margins">
  22. <div class="ibox-content">
  23. <div class="file-manager">
  24. <h5>当前路径:</h5>
  25. <?php echo $folderPath; ?>
  26. @if(role('foundation.resources.manage'))
  27. <div class="hr-line-dashed"></div>
  28. <form method="POST" action="" accept-charset="UTF-8">
  29. <div class="input-group">
  30. <input type="text" value="" placeholder="请输入当前路径下的目录名,不含“/”" name="dirname" class="input-sm form-control">
  31. <input type="hidden" name="_token" value="<?php echo csrf_token(); ?>"/>
  32. <span class="input-group-btn">
  33. <button type="submit" class="btn btn-sm btn-primary">创建目录</button>
  34. </span>
  35. </div>
  36. </form>
  37. @endif
  38. @if(role('Foundation/Attachment/upload'))
  39. <div id="new-upload-btn">
  40. <div class="hr-line-dashed"></div>
  41. <button class="btn btn-primary btn-block" data-toggle="modal" data-target="#uploadbox" data-backdrop="static" data-keyboard="false">上传文件</button>
  42. </div>
  43. @endif
  44. @if(isset($item['dir']))
  45. <div class="hr-line-dashed"></div>
  46. <h5>文件夹</h5>
  47. <ul class="folder-list" style="padding: 0">
  48. @foreach($item['dir'] AS $dir)
  49. <li><a href="{{ U('Base.resources.manage')}}?folder={{ $dir->getPrefix() }}"><i class="fa fa-folder"></i> {{ $dir->getPrefix() }}</a></li>
  50. @endforeach
  51. </ul>
  52. @endif
  53. <div class="clearfix"></div>
  54. </div>
  55. </div>
  56. </div>
  57. </div>
  58. <div class="col-sm-9 animated fadeInRight">
  59. <div class="row">
  60. <div class="col-sm-12">
  61. @if(isset($item['obj']) && is_array($item['obj']))
  62. @foreach($item['obj'] AS $file)
  63. <?php
  64. if(Request::input('folder') == $file->getKey()) continue;
  65. //是否过去日期
  66. $pastdate = false;
  67. if(strtotime(substr($file->getLastModified(), 0, 10)) < strtotime('2015-11-03')){
  68. $pastdate = true;
  69. }
  70. //是否跟目录
  71. $isroot = false;
  72. if(strpos($file->getKey(), '/') === false){
  73. $isroot = true;
  74. }
  75. //是否图片类型
  76. $isimg = false;
  77. if(in_array(fileExt($file->getKey()), array('jpg', 'jpeg', 'gif', 'png', 'bmp'))){
  78. $isimg = true;
  79. }
  80. ?>
  81. <div class="file-box">
  82. <div class="file">
  83. <span class="corner"></span>
  84. @if($isimg || ($pastdate && !$isroot))
  85. <div class="icon">
  86. <i class="fa fa-picture-o"></i>
  87. </div>
  88. @else
  89. <div class="icon">
  90. <i class="fa fa-file"></i>
  91. </div>
  92. @endif
  93. <div class="file-name">
  94. <input type="hidden" id="<?php echo trim($file->getETag(), '"'); ?>" value="{{ $img_path }}{{ $file->getKey()}}">
  95. <button type="button" class="btn btn-primary btn-xs copy-btn" value="<?php echo trim($file->getETag(), '"'); ?>">复制链接</button>
  96. @if($isimg || ($pastdate && !$isroot))
  97. &nbsp;&nbsp;&nbsp;&nbsp;
  98. <button type="button" class="btn btn-primary btn-xs" onclick="showImg('<?php echo trim($file->getETag(), '"'); ?>');">查看大图</button>
  99. @endif
  100. <br><br>
  101. @if($isroot)
  102. <div style="width:182px;height:32px;word-break:break-all;">{{ $file->getKey() }}</div>
  103. @else
  104. <div style="width:182px;height:32px;word-break:break-all;">{{ substr(strrchr($file->getKey(), '/'), 1) }}</div>
  105. @endif
  106. </div>
  107. </div>
  108. </div>
  109. @endforeach
  110. @endif
  111. </div>
  112. </div>
  113. </div>
  114. </div>
  115. </div>
  116. <div class="modal inmodal fade" id="uploadbox" tabindex="-1" role="dialog" aria-hidden="true">
  117. <div class="modal-dialog modal-lg">
  118. <div class="modal-content">
  119. <div class="modal-header" style="padding:15px 15px;">
  120. <div class="row">
  121. <div class="form-group">
  122. <div class="col-sm-8">
  123. <div class="upload_object">
  124. <span id="upload_more_files"></span>
  125. </div>
  126. <div class="checkoption_btn">
  127. <span class="checkbox_item">
  128. <input type="checkbox" name="iscover" />
  129. <label class="check_label" onclick="selectMode();">
  130. <i class="checkbox_icon "></i>
  131. <em class="checkbox_text">选择后,上传同名文件将会被覆盖。</em>
  132. </label>
  133. </span>
  134. </div>
  135. </div>
  136. <div class="col-sm-4">
  137. <button type="button" class="close" data-dismiss="modal" style="padding-top:8px;">
  138. <span aria-hidden="true">&times;</span>
  139. </button>
  140. </div>
  141. </div>
  142. </div>
  143. </div>
  144. <div class="modal-body">
  145. <div class="fieldset flash" id="fsUploadProgress"></div>
  146. </div>
  147. </div>
  148. </div>
  149. </div>
  150. <script type="text/javascript" src="/base/js/swfupload/swfupload.js?v={{config("sys.version")}}" ></script>
  151. <script type="text/javascript" src="/base/js/swfupload/swfupload.queue.js?v={{config("sys.version")}}" ></script>
  152. <script type="text/javascript" src="/base/js/swfupload/fileprogress.js?v={{config("sys.version")}}" ></script>
  153. <script type="text/javascript" src="/base/js/swfupload/handlers.js?v={{config("sys.version")}}" ></script>
  154. <script type="text/javascript">
  155. var loadlayer;
  156. var swfu = '';
  157. function initUploadControl(id, num, rename) {
  158. var settings = {
  159. flash_url : "/base/js/swfupload/swfupload.swf",
  160. flash9_url : "/base/js/swfupload/swfupload_fp9.swf",
  161. post_params : {
  162. "PHPSESSID" : "<?php echo session()->getId(); ?>",
  163. 'rename' : rename,
  164. 'bucket' : "resource-manager",
  165. "elementid" : id,
  166. "_token" : "<?php echo csrf_token(); ?>",
  167. "position" : "ali",
  168. "file_type" : "all",
  169. "folder" : "<?php echo Request::input('folder', 'lwj/designer/'); ?>"
  170. },
  171. upload_url : "<?php echo U('Base.attachment.upload'); ?>",
  172. file_size_limit : "5 MB",
  173. file_types : "*.*",
  174. file_upload_limit: num,
  175. custom_settings : {
  176. progressTarget : "fsUploadProgress"
  177. },
  178. button_image_url : "/base/js/swfupload/select-button.png",
  179. button_placeholder_id : id,
  180. button_width : 65,
  181. button_height : 29,
  182. button_cursor: SWFUpload.CURSOR.HAND, //鼠标样式
  183. button_window_mode : SWFUpload.WINDOW_MODE.TRANSPARENT,
  184. button_action : (num==1 ? SWFUpload.BUTTON_ACTION.SELECT_FILE : SWFUpload.BUTTON_ACTION.SELECT_FILES),
  185. swfupload_preload_handler : preLoad,
  186. swfupload_load_failed_handler : loadFailed,
  187. file_dialog_complete_handler : fileDialogComplete,
  188. file_queue_error_handler: fileQueueError,
  189. upload_error_handler : uploadErrorCo,
  190. upload_success_handler : uploadSuccessCo,
  191. upload_complete_handler : uploadCompleteCo,
  192. upload_progress_handler : uploadProgressCo,
  193. };
  194. swfu = new SWFUpload(settings);
  195. }
  196. initUploadControl("upload_more_files", 100, 0);
  197. //上传模式切换
  198. function selectMode() {
  199. $(".upload_object object").remove();
  200. $(".upload_object").append('<span id="upload_more_files"></span>');
  201. if ($(".checkoption_btn input[type='checkbox']").is(":checked")) {
  202. initUploadControl("upload_more_files", 100, 0);
  203. } else {
  204. initUploadControl("upload_more_files", 100, 1);
  205. }
  206. }
  207. //选择文件后提示信息
  208. function fileDialogComplete(selectedNum, queuedNum) {
  209. this.startUpload();//开始上传
  210. }
  211. function uploadErrorCo(data) {
  212. parent.layer.msg("500, 服务器内部错误", {icon: 2});
  213. }
  214. function fileQueueError(file, errorCode, message) {
  215. if (errorCode == SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED) {
  216. parent.layer.msg("上传队列中最多只能有3个文件等待上传", {icon: 2});
  217. return;
  218. }
  219. switch (errorCode) {
  220. case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:
  221. parent.layer.msg("文件大小超出限制", {icon: 2});
  222. break;
  223. case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE:
  224. parent.layer.msg("文件类型受限", {icon: 2});
  225. break;
  226. case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:
  227. parent.layer.msg("文件为空文件", {icon: 2});
  228. break;
  229. default:
  230. parent.layer.msg("加载入队列出错", {icon: 2});
  231. break;
  232. }
  233. }
  234. function uploadProgressCo(file, bytesLoaded, bytesTotal) {
  235. var percent = Math.ceil((bytesLoaded / bytesTotal) * 100);
  236. var progress = new FileProgress(file, this.customSettings.progressTarget);
  237. progress.setProgress(percent);
  238. if(percent == 100){
  239. progress.setStatus("文件保存中...");
  240. }else{
  241. progress.setStatus("文件上传中...");
  242. }
  243. }
  244. function uploadSuccessCo(file, serverData) {
  245. var result = new Array();
  246. result = eval('('+serverData+')');
  247. var progress = new FileProgress(file, this.customSettings.progressTarget);
  248. progress.setComplete();
  249. if(result.message){
  250. progress.setStatus(result.message);
  251. }else{
  252. progress.setStatus('<font color="#449d44">上传完成.</font>');
  253. }
  254. if(result.exception){
  255. parent.layer.msg(result.exception, {icon: 2});
  256. }
  257. }
  258. function uploadCompleteCo(data, srv) {
  259. }
  260. //关闭模态窗口时触发
  261. $('#uploadbox').on('hide.bs.modal', function () {
  262. $('#fsUploadProgress').html('');
  263. window.location.reload();
  264. });
  265. //复制链接
  266. $(".copy-btn").zclip({
  267. path: "/base/js/zclip/ZeroClipboard.swf",
  268. copy: function(){
  269. return $("#"+this.value).val();
  270. }
  271. });
  272. //查看大图
  273. function showImg(id){
  274. var imgSrc = $("#"+id).val();
  275. //页面层
  276. parent.layer.open({
  277. type: 1,
  278. skin: 'layui-layer-rim', //加上边框
  279. area: ['70%', '80%'], //宽高
  280. content: '<img style="display:block; margin:0 auto;" src="'+ imgSrc +'">'
  281. });
  282. }
  283. </script>
  284. <script type="text/javascript">
  285. (function($){
  286. $.fn.extend({
  287. checkbox : function(){
  288. return this.each(function(){
  289. var $this = $(this);
  290. if($this.hasClass("on")){
  291. $this.siblings("input").prop("checked","checked");
  292. }else{
  293. $this.siblings("input").removeAttr("checked");
  294. }
  295. $this.on("click",function(){
  296. if($this.hasClass("on")){
  297. $this.siblings("input").removeAttr("checked");
  298. $this.removeClass("on");
  299. }else{
  300. $this.siblings("input").prop("checked","checked");
  301. $this.addClass("on");
  302. }
  303. });
  304. });
  305. }
  306. });
  307. })(jQuery);
  308. $(".check_label").checkbox();
  309. </script>
  310. @endsection