alllist.html 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320
  1. {extend name="../../base/view/common/base" /}
  2. {block name="style"}
  3. <style>
  4. ::-webkit-scrollbar { display: none; width: 6px; height: 6px; }
  5. ::-webkit-scrollbar-thumb { border-radius: 10px; background-color: #e1e1e1;}
  6. .disk-left{width:120px; float:left; height:calc(100vh - 86px); overflow-y: auto; border:1px solid #eeeeee; background-color:#fbfbfb; padding:15px;}
  7. .disk-left::-webkit-scrollbar {width: 0;}
  8. .disk-left h3{font-size:18px; height:30px; padding-left:10px; font-weight:800}
  9. .disk-types{padding:12px 0;}
  10. .disk-types li{padding:8px; border-radius:3px; cursor:pointer;}
  11. .disk-types li strong{margin-right:12px; font-size:18px;}
  12. .disk-types li:hover{background-color:#F3F4F5;}
  13. .disk-types li.on-this{background-color:#F2FAFF; color:#1E9FFF}
  14. .disk-line{border-bottom:1px solid #eee; margin:6px 0;}
  15. .disk-table{margin-left:120px; overflow:hidden; height:calc(100vh - 56px);border:1px solid #eeeeee; border-left:0; background-color:#fff;}
  16. .layui-btn.tool-add{padding:0 12px;}
  17. .disk-path{height:48px;padding:0 4px 0 12px;}
  18. .disk-breadcrumb{float:left; padding:11px 0}
  19. .disk-breadcrumb span{color:#666; margin:0 8px; font-size:10px;}
  20. .layui-tab{margin:0;}
  21. .file-item {height:calc(100vh - 216px); overflow-y: auto;}
  22. .disk-path .layui-form-checkbox[lay-skin=primary]>div{padding-right:4px}
  23. /** 文件 **/
  24. .file-item .file-subject { flex: 1; overflow: hidden; overflow-y: auto; margin: 10px; box-sizing: border-box; }
  25. .file-item .file-subject:hover::-webkit-scrollbar { display: block; }
  26. .file-item .file-subject ul { display: flex; flex-wrap: wrap; }
  27. .file-item .file-subject ul li {position: relative; height: 144px; margin:20px 10px; padding: 6px; border: 1px solid rgba(0, 0, 0, 0.05); border-radius: 3px; transition: all 0.2s ease-in-out; }
  28. .file-item .file-subject ul li:hover {border: 1px solid #eee; background-color:#f8f8f8;}
  29. .file-item .file-subject ul li.on {border: 1px solid #ff5722; }
  30. .file-item .file-subject ul li img { width: 86px; height: 86px; padding:16px;}
  31. .file-item .file-subject ul li img.file-image { width: 118px; height: 118px; padding:0; border-radius: 2px; }
  32. .file-item .file-subject ul li video { width: 60px; height: 60px; border-radius: 3px; }
  33. .file-item .file-subject ul li p {overflow: hidden; margin: 5px 0 0; width: 118px; font-size: 13px; text-align: center; text-overflow: ellipsis; white-space: nowrap; }
  34. .file-item .file-subject ul li .file-check{position: absolute; width:20px; height:20px; left: 0; top: 0; display: none; font-size: 14px; border-radius:2px 0 4px 0; text-align: center; line-height: 20px; color: #ffffff; background-color:#fff; border-right:1px solid #eee; border-bottom:1px solid #eee; cursor:pointer;}
  35. .file-item .file-subject ul li:hover .file-check{display: block;}
  36. .file-item .file-subject ul li.on .file-check{ display: block; background: #ff5722; border-color:#ff5722}
  37. .file-item .file-subject ul li .layui-btn-ctrl{position:absolute; top:0; right:0; display:none;}
  38. .file-item .file-subject ul li:hover .layui-btn-ctrl{display:block}
  39. .file-folder,.file-image,.file-pdf,.file-video,.file-audio{cursor:pointer;}
  40. .file-item .file-subject ul li .has-share{position: absolute; width:20px; height:20px; right: 2px; top: 75px; border-radius:50%; text-align: center; line-height: 20px; color: #ffffff; background-color:#1E9FFF; border:1px solid #fff; padding:2px;}
  41. .file-item .file-subject ul li .has-star{position: absolute; width:20px; height:20px; right: 32px; top: 75px; border-radius:50%; text-align: center; line-height: 20px; color: #ffffff; background-color:#ffb800; border:1px solid #fff; padding:2px;}
  42. .file-item .file-subject ul li .file-info{position: absolute; width:100%; height:23px; left: 0; top: 0; text-align:center; font-size: 12px; line-height: 23px; background-color:rgba(0,0,0,.12);border-radius:2px 2px 0 0;}
  43. .file-footer { display: flex; align-items: center; padding: 5px 15px 0; height: 45px; border-top: 1px solid #f2f2f2; text-align: center; background: #ffffff; }
  44. /** 无数据 **/
  45. .file-item .empty { display: flex; flex: 1; align-items: center; flex-direction: column; justify-content: center; overflow: hidden; text-align: center; color: #cccccc; }
  46. .file-item .empty i { font-size: 180px; }
  47. .file-item .empty p { width: 180px; text-align: center; }
  48. </style>
  49. {/block}
  50. <!-- 主体 -->
  51. {block name="body"}
  52. <div class="p-page">
  53. <div class="disk-left">
  54. <h3>全部文件</h3>
  55. <div id="diskTypes" class="disk-types">
  56. <ul>
  57. <li class="on-this" data-tab=""><strong class="iconfont icon-dingdanguanli"></strong>全部</li>
  58. <li data-tab="image"><strong class="iconfont icon-sucaiguanli"></strong>图片</li>
  59. <li data-tab="video"><strong class="iconfont icon-wodekecheng"></strong>视频</li>
  60. <li data-tab="audio"><strong class="iconfont icon-tuiguang"></strong>音频</li>
  61. <li data-tab="office"><strong class="iconfont icon-chengjiliebiao"></strong>Office文件</li>
  62. <li data-tab="pdf"><strong class="iconfont icon-lunwenguanli"></strong>在线文档</li>
  63. <li data-tab="zip"><strong class="iconfont icon-xiaoshoupin"></strong>压缩文件</li>
  64. </ul>
  65. </div>
  66. </div>
  67. <div class="disk-table">
  68. <form class="layui-form gg-form-bar border-b" lay-filter="barsearchform">
  69. {gt name="$auth" value="0"}
  70. <div class="layui-input-inline user-name" style="width:90px;">
  71. <input type="text" name="admin" placeholder="选择员工" class="layui-input picker-admin" readonly />
  72. <input type="text" name="admin_id" value="" style="display:none" />
  73. </div>
  74. {else/}
  75. {gt name="$is_leader" value="0"}
  76. <div class="layui-input-inline user-name" style="width:90px;">
  77. <input type="text" name="admin" placeholder="选择员工" class="layui-input picker-sub" readonly />
  78. <input type="text" name="admin_id" value="" style="display:none" />
  79. </div>
  80. {/gt}
  81. {/gt}
  82. <div class="layui-input-inline" style="width:300px">
  83. <input type="text" name="keywords" placeholder="输入关键字,文件名称/目录名称" class="layui-input" autocomplete="off" />
  84. </div>
  85. <div class="layui-input-inline" style="width:150px">
  86. <input type="hidden" name="pid" value="0" />
  87. <input type="hidden" name="ext" value="" />
  88. <input type="hidden" name="limit" value="30" />
  89. <button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform"><i class="layui-icon layui-icon-search mr-1"></i>搜索</button>
  90. <button type="reset" class="layui-btn layui-btn-reset">清空</button>
  91. </div>
  92. </form>
  93. <div class="disk-path layui-form border-b">
  94. <div class="disk-breadcrumb" id="diskPath"><i class="layui-icon layui-icon-component"></i> <a href="javascript:void(0);" data-id="0">全部文件</a></div>
  95. </div>
  96. <!-- 主体 -->
  97. <div class="file-item">
  98. <div class="file-subject">
  99. <ul id="filesBox"></ul>
  100. </div>
  101. </div>
  102. <!-- 页脚 -->
  103. <div class="file-footer">
  104. <div id="laypage"></div>
  105. </div>
  106. </div>
  107. </div>
  108. {/block}
  109. <!-- /主体 -->
  110. <!-- 脚本 -->
  111. {block name="script"}
  112. <script>
  113. const fileExt={
  114. image:['jpg','jpeg','png','gif'],
  115. office:['doc','docx','xls','xlsx','ppt','pptx'],
  116. pdf:['txt','pdf','article'],
  117. zip:['zip','rar','7z','gz','tar'],
  118. video:['mpg','mp4','mpeg','avi','wmv','mov','flv','m4v'],
  119. audio:['mp3','wav','wma','flac','midi']
  120. };
  121. const moduleInit = ['tool','uploadPlus','oaPicker'];
  122. function gouguInit() {
  123. var tool = layui.tool,uploadPlus = layui.uploadPlus,form = layui.form,laypage = layui.laypage;
  124. let ctrl_callback = function (e) {
  125. if(e.code == 0){
  126. layer.closeAll();
  127. layer.msg(e.msg);
  128. $('[lay-filter="webform"]').click();
  129. }
  130. else{
  131. layer.msg(e.msg);
  132. }
  133. }
  134. //左侧操作
  135. $('#diskTypes').on('click','li',function(){
  136. $(this).addClass('on-this').siblings().removeClass('on-this');
  137. let tab = $(this).data('tab');
  138. $('[name="pid"]').val(0);
  139. $('[name="keywords"]').val('');
  140. if(tab==''){
  141. $('[name="ext"]').val('');
  142. }
  143. else{
  144. $('[name="ext"]').val(fileExt[tab]);
  145. }
  146. let data = form.val('barsearchform');
  147. get_files(data);
  148. })
  149. //顶部目录操作
  150. $('#diskPath').on('click','a',function(){
  151. let id=$(this).data('id');
  152. $('[name="pid"]').val(id);
  153. let data = form.val('barsearchform');
  154. get_files(data);
  155. })
  156. //查看文件
  157. $('#filesBox').on('click','.file-item',function(){
  158. let id = $(this).parent().data('id');
  159. let href = $(this).data('href');
  160. let ext = $(this).data('ext');
  161. if(ext == 'video'){
  162. tool.videoView(href);
  163. }
  164. else if(ext == 'audio'){
  165. tool.audioView(href);
  166. }
  167. else if(ext == 'image'){
  168. tool.photoView(href);
  169. }
  170. else if(ext == 'pdf'){
  171. tool.pdfView(href);
  172. }
  173. else if(ext == 'article'){
  174. tool.articleView(id);
  175. }
  176. else if(ext == 'folder'){
  177. $('[name="pid"]').val(id);
  178. let data = form.val('barsearchform');
  179. get_files(data);
  180. }
  181. else{
  182. return false;
  183. }
  184. })
  185. //加载数据
  186. var data = form.val('barsearchform');
  187. get_files(data);
  188. form.on('submit(webform)', function (data) {
  189. get_files(data.field);
  190. return false;
  191. });
  192. $('.layui-btn-reset').click(function(){
  193. setTimeout(function(){
  194. $('[lay-filter="webform"]').click();
  195. },200)
  196. })
  197. function get_files(param){
  198. var loadIndex = layer.load(0);
  199. $.ajax({
  200. url:"/disk/index/alllist",
  201. data:param,
  202. complete:function(){
  203. setTimeout(function(){
  204. layer.close(loadIndex)
  205. }, 200);
  206. },
  207. success:function(res){
  208. $('[name="select_all"]').prop('checked', false);
  209. form.render('checkbox');
  210. if(res.code==0){
  211. laypage.render({
  212. elem: 'laypage',
  213. limit:param['limit'],
  214. curr:param['page'],
  215. count: res.count, // 数据总数
  216. jump: function(obj, first){
  217. //console.log(obj.curr); // 得到当前页,以便向服务端请求对应页的数据。
  218. //console.log(obj.limit); // 得到每页显示的条数
  219. // 首次不执行
  220. if(!first){
  221. var data = form.val('barsearchform');
  222. data['page'] = obj.curr;
  223. get_files(data);
  224. }
  225. }
  226. });
  227. let folder = res.totalRow;
  228. let folderHtml='<i class="layui-icon layui-icon-windows"></i> <a href="javascript:void(0);" data-id="0">全部文件</a>';
  229. if(folder.length>0){
  230. for(var f=0;f<folder.length;f++){
  231. folderHtml+='<span> 〉</span><a href="javascript:void(0);" data-id="'+folder[f].id+'">'+folder[f].name+'</a>';
  232. }
  233. }
  234. $('#diskPath').html(folderHtml);
  235. var item=res.data,li='';
  236. if(item.length>0){
  237. for(var a=0;a<item.length;a++){
  238. let type = '',ext="zip";
  239. // 判断元素是否在数组中
  240. let path='/static/home/images/icon/file.png';
  241. if (fileExt.image.includes(item[a].file_ext)) {
  242. path=item[a].thumbpath;
  243. type = '0,1';
  244. ext="image";
  245. }
  246. if (fileExt.office.includes(item[a].file_ext)) {
  247. type = '0,1';
  248. ext="office";
  249. path='/static/home/images/icon/'+item[a].file_ext+'.png';
  250. }
  251. if (item[a].file_ext == 'pdf' || item[a].file_ext == 'txt') {
  252. type = '0,1';
  253. ext="pdf";
  254. path='/static/home/images/icon/'+item[a].file_ext+'.png';
  255. }
  256. if (fileExt.video.includes(item[a].file_ext)) {
  257. type = '0,1';
  258. ext="video";
  259. path='/static/home/images/icon/video.png';
  260. }
  261. if (fileExt.audio.includes(item[a].file_ext)) {
  262. type = '0,1';
  263. ext="audio";
  264. path='/static/home/images/icon/audio.png';
  265. }
  266. if (fileExt.zip.includes(item[a].file_ext)) {
  267. type = '0';
  268. ext="zip";
  269. path='/static/home/images/icon/rar.png';
  270. }
  271. if(item[a].types==1){
  272. type = '1';
  273. ext="article";
  274. path='/static/home/images/icon/article.png';
  275. }
  276. ctrl = '<span class="layui-btn layui-btn-xs layui-btn-normal file-ctrl" data-ctrl="disk" data-fileid="'+item[a].id+'" data-actionid="'+item[a].action_id+'" data-href="'+item[a].filepath+'" data-filename="'+item[a].name+'" data-ext="'+ext+'" data-type="'+type+'">操作</span>';
  277. if(item[a].types==2){
  278. ext="folder";
  279. path='/static/home/images/icon/folder.png';
  280. ctrl='';
  281. }
  282. let is_share='';
  283. if(item[a].is_share==1){
  284. is_share='<div class="has-share" title="已分享"><i class="iconfont icon-fenxiang"></i></div>';
  285. }
  286. li+='<li data-id="'+item[a].id+'" data-title="'+item[a].name+'" data-ext="'+item[a].file_ext+'" data-types="'+item[a].types+'"><img src="'+path+'" alt="'+item[a].name+'" style="object-fit: contain;" class="file-item file-'+ext+'" data-href="'+item[a].filepath+'" data-ext="'+ext+'"><p title="'+item[a].name+'">'+item[a].name+'</p>\
  287. <div class="file-info">'+item[a].department+':'+item[a].admin_name+'</div><div class="layui-btn-ctrl">'+ctrl+'</div>'+is_share+'</li>';
  288. }
  289. $('#filesBox').html(li);
  290. $('#laypage').show();
  291. }
  292. else{
  293. $('#filesBox').html('<div class="empty"><i class="layui-icon layui-icon-upload"></i><p>无文件文件,赶紧去上传吧!</p></div>');
  294. $('#laypage').hide();
  295. }
  296. }
  297. }
  298. });
  299. }
  300. }
  301. </script>
  302. {/block}
  303. <!-- /脚本 -->