lists.html 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224
  1. {extend name="base"/}
  2. {block name="resources"}
  3. <link rel="stylesheet" type="text/css" href="SHOP_CSS/picture_manager.css" />
  4. <style>
  5. .layui-layout-admin.admin-style-1 .type-tab{ margin-left: -15px!important;width: calc(100% - 253px)!important;}
  6. </style>
  7. {/block}
  8. {block name="main"}
  9. <!-- 清理网站缓存 start -->
  10. <meta http-equiv="pragma" content="no-cache">
  11. <meta http-equiv="Cache-Control" content="no-cache, no-store">
  12. <meta http-equiv="expires" content="0">
  13. <!-- 清理网站缓存 end -->
  14. <div class="fourstage-nav layui-tab layui-tab-brief type-tab" lay-filter="edit_user_tab">
  15. <ul class="layui-tab-title">
  16. {foreach $type_list as $k => $v}
  17. <li class="{$k == $type ? 'layui-this' : ''}" lay-id="{$k}"><a href="{:url('shop/album/lists', ['type' => $k])}">{$v}</a></li>
  18. {/foreach}
  19. </ul>
  20. </div>
  21. <!-- 搜索框 -->
  22. <div class="single-filter-box top">
  23. {if $type == 'img'}
  24. <button class="layui-btn" onclick="uploadImg()">上传{$type_list[$type]}</button>
  25. {else if $type == 'video'}
  26. <button class="layui-btn" onclick="uploadVideo()">上传{$type_list[$type]}</button>
  27. {/if}
  28. <button class="layui-btn layui-btn-primary text-color border-color" onclick="addGrouping()">添加分组</button>
  29. <div class="layui-form">
  30. <div class="layui-input-inline">
  31. <input type="text" name="search_keys" placeholder="请输入{$type_list[$type]}名称" autocomplete="off" class="layui-input album-img-sreach">
  32. <button type="button" class="layui-btn layui-btn-primary" lay-filter="search" lay-submit>
  33. <i class="layui-icon">&#xe615;</i>
  34. </button>
  35. </div>
  36. </div>
  37. </div>
  38. <div class="album-box">
  39. <div class="album-list">
  40. <ul class="bg-color-light-gray layui-nav layui-nav-tree layui-inline" lay-filter="albumList">
  41. <div id="albumList" class="demo-tree-more"></div>
  42. </ul>
  43. </div>
  44. <div class="album-content">
  45. <div class="album-content-title">
  46. <span id="album_name">默认分组</span>
  47. <span>|</span>
  48. <a href="javascript:;" class="text-color edit" data-status="0">编辑</a>
  49. <a href="javascript:;" class="text-color album-action layui-hide" onclick="modifyGrouping()">编辑分组</a>
  50. <a href="javascript:;" onclick="deleteGrouping()" class="text-color album-action layui-hide">删除分组</a>
  51. </div>
  52. <ul class="album-img-box"></ul>
  53. <div class="album-foot-operation ">
  54. <div class="album-content-bar layui-form bg-color-light-gray album-action layui-hide" >
  55. <input type="checkbox" name="album-select" lay-filter="allChoose" lay-skin="primary" title="全选">
  56. </div>
  57. <button class="layui-btn album-action layui-hide" onclick="modifyImgGroup()">修改分组</button>
  58. <!-- <button class="layui-btn" onclick="thumbBatch()">生成缩略图</button> -->
  59. <button class="layui-btn album-action layui-hide" onclick="deleteImg()">删除</button>
  60. <div id="paged" class="page"></div>
  61. </div>
  62. </div>
  63. <!-- 存储图片路径 -->
  64. <input type="hidden" id="hidden_image_path">
  65. </div>
  66. {/block}
  67. {block name="script"}
  68. <!-- 分组列表 -->
  69. <script type="text/html" id="album_list">
  70. <div class="layui-tree">
  71. {{# for(let key in d){ }}
  72. <div class="layui-tree-set layui-tree-checkedFirst layui-tree-setHide ">
  73. <div class="layui-tree-entry">
  74. <div class="layui-tree-main">
  75. {{# if(d[key].child_list && d[key].child_list.length > 0){ }}
  76. <span class="layui-tree-iconClick" onclick="childSwitch(this)"><i class="layui-tree-iconArrow"></i></span>
  77. {{# }else{ }}
  78. <span class="layui-tree-iconClick"><i class="layui-tree-iconArrow layui-hide"></i></span>
  79. {{# } }}
  80. <div class="layui-tree-txt {{key == 0 ? 'selected text-color' : ''}}" onclick="switchGroup(this)" data-id="{{ d[key].album_id }}" data-album="{{ d[key].child ? d[key].child.toString() : d[key].album_id}}" data-name="{{d[key].album_name}}">
  81. <span>{{d[key].album_name}}</span>
  82. <span class="num">{{d[key].num}}</span>
  83. </div>
  84. </div>
  85. </div>
  86. {{# if(d[key].child_list && d[key].child_list.length > 0){ }}
  87. <div class="layui-tree-pack layui-tree-child">
  88. {{# for(let i in d[key].child_list){ }}
  89. <div class="layui-tree-set">
  90. <div class="layui-tree-entry">
  91. <div class="layui-tree-main">
  92. <span class="layui-tree-iconClick"><i class="layui-tree-iconArrow layui-hide"></i></span>
  93. <div class="layui-tree-txt" onclick="switchGroup(this)" data-id="{{d[key].child_list[i]['album_id']}}" data-album="{{d[key].child_list[i]['album_id']}}" data-name="{{d[key].child_list[i]['album_name']}}">
  94. <span>{{d[key].child_list[i]['album_name']}}</span>
  95. <span class="num">{{d[key].child_list[i]['num']}}</span>
  96. </div>
  97. </div>
  98. </div>
  99. </div>
  100. {{# } }}
  101. </div>
  102. {{# } }}
  103. </div>
  104. {{# } }}
  105. </div>
  106. </script>
  107. <!-- 多图上传 -->
  108. <script type="text/html" id="multuple_html">
  109. <div class="layui-form multuple-list-box">
  110. <div class="layui-form-item">
  111. <label class="layui-form-label sm">本地图片</label>
  112. <ul class="layui-input-block multuple-list">
  113. <li class="multuple-list-img" id="ImgUpload">
  114. <span class="bg-color">+</span>
  115. <span>点击添加图片</span>
  116. </li>
  117. </ul>
  118. </div>
  119. <div class="form-row sm">
  120. <button class="layui-btn layui-btn-disabled" disabled="disabled" onclick="submitOne()" id="chooseListAction">提交</button>
  121. <button class="layui-btn layui-btn-primary" onclick="back()">返回</button>
  122. </div>
  123. </div>
  124. </script>
  125. <!-- 视频上传 -->
  126. <script type="text/html" id="video_html">
  127. <div class="layui-form multuple-list-box">
  128. <div class="layui-form-item">
  129. <label class="layui-form-label sm">视频</label>
  130. <ul class="layui-input-block multuple-list">
  131. <li class="multuple-list-img" id="VideoUpload">
  132. <span class="bg-color">+</span>
  133. <span>点击添加</span>
  134. </li>
  135. </ul>
  136. </div>
  137. <div class="form-row sm">
  138. <button class="layui-btn layui-btn-disabled" disabled="disabled" onclick="submitVideoLimit()" id="chooseVideoAction">提交</button>
  139. <button class="layui-btn layui-btn-primary" onclick="back()">返回</button>
  140. </div>
  141. </div>
  142. </script>
  143. <!-- 替换图片 -->
  144. <script type="text/html" id="modify_file_html">
  145. <div class="layui-form multuple-list-box">
  146. <div class="layui-form-item">
  147. <label class="layui-form-label sm">本地图片</label>
  148. <ul class="layui-input-block multuple-list">
  149. <li class="multuple-list-img" id="modifyFile">
  150. <span class="bg-color">+</span>
  151. <span>点击添加图片</span>
  152. </li>
  153. </ul>
  154. </div>
  155. <div class="form-row sm">
  156. <button class="layui-btn layui-btn-disabled" disabled="disabled" id="modifyFileAction">提交</button>
  157. <button class="layui-btn layui-btn-primary" onclick="back()">返回</button>
  158. </div>
  159. </div>
  160. </script>
  161. <!-- 相册展示 -->
  162. <script type="text/html" id="list_html">
  163. {{# layui.each(d.list,function(index, item){ }}
  164. <li class="{$type}">
  165. <div class="album-pic">
  166. {if $type == 'img'}
  167. {{# if(item.is_thumb == 0){ }}
  168. <img layer-src="" src="{{ ns.img(item.pic_path + '?time=' + parseInt(new Date().getTime()/1000)) }}" alt="{{item.pic_name}}">
  169. {{# }else{ }}
  170. <img layer-src="{{ ns.img(item.pic_path + '?time=' + parseInt(new Date().getTime()/1000), 'big') }}" src="{{ ns.img(item.pic_path + '?time=' + parseInt(new Date().getTime()/1000), 'small') }}" alt="{{item.pic_name}}">
  171. {{# } }}
  172. {else if($type == 'video')}
  173. <video src="{{ ns.img(item.pic_path) }}" controls></video>
  174. {/if}
  175. </div>
  176. <div class="layui-form album-img-select">
  177. <div class="pic-name">{{item.pic_name ? item.pic_name : '未命名'}}</div>
  178. <div class="pic-spec">{{item.pic_spec}}</div>
  179. </div>
  180. <div class="album-img-operation {{ d.status == 0 ? 'layui-hide' : ''}}">
  181. <a href="javascript:;" class="text-color" data-pic-name="{{item.pic_name}}" data-id="{{item.pic_id}}" onclick="modifyImgName(this)">改名</a>|
  182. <a href="javascript:;" class="text-color" data-path="{{ns.img(item.pic_path)}}" onclick="copyLink(this)">链接</a>|
  183. <a href="javascript:;" class="text-color" data-id="{{item.pic_id}}" onclick="modifyImgGroup(this)">分组</a>|
  184. <a href="javascript:;" class="text-color" data-id="{{item.pic_id}}" onclick="modifyFile(this)">替换</a>|
  185. <a href="javascript:;" class="text-color delete-pic" data-id="{{item.pic_id}}" onclick="deleteImg(this)">删除</a>
  186. </div>
  187. <i class="iconfont iconxuanzhong"></i>
  188. </li>
  189. {{# }) }}
  190. </script>
  191. <!-- 图片分组 -->
  192. <script type="text/html" id="pic_group">
  193. <div class="layui-form img-group">
  194. {foreach $album_list_tree as $album_list_k => $album_list_v}
  195. {if !isset($album_list_v['child_list'])}
  196. <div class="layui-input-block one-group">
  197. {{# if(d.album_id == {$album_list_v.album_id} ){ }}
  198. <input type="radio" name="group" checked value="{$album_list_v.album_id}" title="{$album_list_v.album_name}">
  199. {{# }else{ }}
  200. <input type="radio" name="group" value="{$album_list_v.album_id}" title="{$album_list_v.album_name}">
  201. {{# } }}
  202. </div>
  203. {else /}
  204. <input type="radio" name="group" value="{$album_list_v.album_id}" title="{$album_list_v.album_name}">
  205. <!-- <div class="layui-input-block one-group">{$album_list_v['album_name']}</div>-->
  206. {foreach $album_list_v['child_list'] as $k => $v}
  207. <div class="layui-input-block two-group">
  208. {{# if(d.album_id == {$v.album_id} ){ }}
  209. <input type="radio" name="group" checked value="{$v.album_id}" title="{$v.album_name}">
  210. {{# }else{ }}
  211. <input type="radio" name="group" value="{$v.album_id}" title="{$v.album_name}">
  212. {{# } }}
  213. </div>
  214. {/foreach}
  215. {/if}
  216. {/foreach}
  217. </div>
  218. </script>
  219. <!-- 复制链接 -->
  220. <script type="text/html" id="copy_path">
  221. <div class="layui-form">
  222. <div class="layui-input-block">
  223. <input type="text" class="len-long layui-input link-input" name="" id="path_file" value="{{d}}" readonly >
  224. <button class="layui-btn layui-btn-primary" onclick="JScopy()">复制</button>
  225. </div>
  226. </div>
  227. </script>
  228. <!-- 添加分组 -->
  229. <script type="text/html" id="addGroup">
  230. <div class="layui-form">
  231. <div class="layui-form-item">
  232. <label class="layui-form-label mid">上级分组</label>
  233. <div class="layui-input-block len-mid">
  234. <select name="pid">
  235. <option value="0">顶级分组</option>
  236. {foreach $album_list as $k => $v}
  237. {if $v['level'] == 1 && $v['type'] == $type}
  238. <option value="{$v['album_id']}" >{$v['album_name']}</option>
  239. {/if}
  240. {/foreach}
  241. </select>
  242. </div>
  243. </div>
  244. <div class="layui-form-item">
  245. <label class="layui-form-label mid"><span class="required">*</span>分组名称:</label>
  246. <div class="layui-input-block">
  247. <input name="album_name" type="text" placeholder="请输入分组名称" lay-verify="required" class="layui-input len-mid">
  248. </div>
  249. </div>
  250. <div class="form-row mid">
  251. <button class="layui-btn" lay-submit lay-filter="add_group">保存</button>
  252. <button class="layui-btn layui-btn-primary" onclick="closeLayer()">返回</button>
  253. </div>
  254. </div>
  255. </script>
  256. <script>
  257. var form, upload, laytpl, layer, laypage, layer_one,element,tree,
  258. picture_arr = [],
  259. uploadListIns,
  260. initIdent= true;
  261. limit = 14,
  262. album_list_count = 0,
  263. album_id = 0;
  264. var repeat_flag = false;
  265. $(function() {
  266. layui.use(['form', 'laytpl', 'laypage', 'layer', 'upload','element','tree'], function() {
  267. form = layui.form;
  268. laytpl = layui.laytpl;
  269. laypage = layui.laypage;
  270. element = layui.element;
  271. layer = layui.layer;
  272. upload = layui.upload;
  273. tree = layui.tree;
  274. init(); //初始化数据
  275. form.render();
  276. element.init();
  277. //监听图片搜索
  278. form.on('submit(search)', function() {
  279. getFileAlbumList(1, limit); //图片加载
  280. });
  281. /**
  282. * 全选
  283. */
  284. form.on("checkbox(allChoose)", function(data) {
  285. if (data.elem.checked) {
  286. $('.album-img-box li').addClass('selected');
  287. } else {
  288. $('.album-img-box li').removeClass('selected');
  289. }
  290. });
  291. /**
  292. * 添加分组
  293. */
  294. form.on('submit(add_group)', function(data) {
  295. if (repeat_flag) return false;
  296. repeat_flag = true;
  297. data.field.type = "{$type}";
  298. $.ajax({
  299. url: ns.url("shop/Album/addAlbum"),
  300. data: data.field,
  301. type: "POST",
  302. dataType: "JSON",
  303. success: function(res) {
  304. layer.msg(res.message);
  305. flag_add_group = false;
  306. if (res.code == 0) {
  307. location.reload();
  308. }
  309. }
  310. })
  311. return false;
  312. });
  313. element.on('event(albumList)', function (data){
  314. console.log(data)
  315. });
  316. });
  317. });
  318. /**
  319. * 初始化数据
  320. */
  321. function init() {
  322. albumList(); //相册分组
  323. // getFileAlbumList(1, limit); //图片加载
  324. }
  325. /**
  326. * 多图上传
  327. */
  328. function uploadImg() {
  329. var imageArray=1;
  330. laytpl($("#multuple_html").html()).render({}, function(html) {
  331. layer_one = layer.open({
  332. type: 1,
  333. area: ['580px', '430px'],
  334. title: '本地上传',
  335. content: html,
  336. cancel: function() {
  337. $("#chooseListAction").removeClass("bg-color").addClass("layui-btn-disabled").attr("disabled", "disabled");
  338. },
  339. success: function(res) {
  340. //上传图片
  341. upload.render({
  342. elem: '#ImgUpload',
  343. url: ns.url("shop/upload/album"),
  344. data: {
  345. album_id: album_id,
  346. is_thumb:1,
  347. },
  348. exts:'jpg|jpeg|png|gjf|webp|bmp|tif',
  349. multiple: true,
  350. auto: false,
  351. bindAction: '#chooseListAction',
  352. choose: function(obj) {
  353. imageArray=1;
  354. //将每次选择的文件追加到文件队列
  355. var files = this.files = obj.pushFile();
  356. //预读本地文件,如果是多文件,则会遍历。(不支持ie8/9)
  357. obj.preview(function(index, file, result) {
  358. this.num=index;
  359. //追加预览图片
  360. var html = '';
  361. html += '<li class="multuple-list-img upload-wrap" index="' + index + '">';
  362. html += '<img layer-src class="multuple-list-image" src="' + result + '" alt="' + file.name + '">';
  363. html += '<span class="upload-close-modal" id="upload_img_' + index + '">×</span>';
  364. html += '<div class="upload-image-curtain">50%</div>';
  365. html += '<div class="tips"></div>';
  366. html += '</li>';
  367. $(".multuple-list").prepend(html);
  368. //删除预览图片
  369. $("#upload_img_" + index).bind("click", function() {
  370. delete files[index];
  371. delete picture_arr[index]; //删除所选队列
  372. $(this).parent('.upload-wrap').remove();
  373. // uploadListIns.config.elem.next()[0].value = ''; //清空 input file 值,以免删除后出现同名文件不可选
  374. //禁止点击
  375. if ($(".multuple-list li").length <= 1) {
  376. $("#chooseListAction").removeClass("bg-color").addClass("layui-btn-disabled").attr("disabled", "disabled");
  377. }
  378. });
  379. //开启点击
  380. if ($(".multuple-list li").length > 1) {
  381. $("#chooseListAction").addClass("bg-color").removeClass("layui-btn-disabled").removeAttr("disabled");
  382. }
  383. loadImgMagnify();
  384. });
  385. },
  386. done: function(res,index) {
  387. let data=$('.multuple-list-image');
  388. // 禁止点击
  389. picture_arr.push(res.data);
  390. var image_box = $(".upload-wrap[index='" + index + "']").parent().find(".upload-image-curtain");
  391. var image_tips = $(".upload-wrap[index='" + index + "']").parent().find(".tips");
  392. image_box.text("上传汇总");
  393. image_box.text("50%");
  394. image_box.show();
  395. if (res.code >= 0) {
  396. setTimeout(function() {
  397. image_box.text("100%");
  398. }, 500);
  399. setTimeout(function() {
  400. getFileAlbumList(1, limit);
  401. updateAlbumNum(album_id);
  402. layer.close(layer_one)
  403. }, 1000);
  404. return delete this.files[index]; //删除文件队列已经上传成功的文件
  405. } else {
  406. setTimeout(function() {
  407. image_box.text("上传失败");
  408. image_tips.text(res.message);
  409. layer.msg(res.message);
  410. }, 500);
  411. }
  412. if(imageArray==data.length){
  413. $("#chooseListAction").addClass("bg-color").removeClass("layui-btn-disabled").removeAttr("disabled");
  414. imageArray=1;
  415. return false
  416. }
  417. imageArray++
  418. }
  419. });
  420. }
  421. })
  422. });
  423. }
  424. /**
  425. * 视频上传
  426. */
  427. function uploadVideo() {
  428. var imageArray = 1;
  429. laytpl($("#video_html").html()).render({}, function (html) {
  430. layer_one = layer.open({
  431. type: 1,
  432. area: ['580px', '430px'],
  433. title: '本地上传',
  434. content: html,
  435. cancel: function () {
  436. $("#chooseVideoAction").removeClass("bg-color").addClass("layui-btn-disabled").attr("disabled", "disabled");
  437. },
  438. success: function (res) {
  439. //上传视频
  440. upload.render({
  441. elem: '#VideoUpload',
  442. url: ns.url("shop/upload/videoToAlbum"),
  443. data: {
  444. album_id: album_id,
  445. is_thumb: 1,
  446. },
  447. multiple: true,
  448. auto: false,
  449. accept: 'video',
  450. size: 50 * 1024,
  451. bindAction: '#chooseVideoAction',
  452. choose: function (obj) {
  453. imageArray = 1;
  454. //将每次选择的文件追加到文件队列
  455. var files = this.files = obj.pushFile();
  456. //预读本地文件,如果是多文件,则会遍历。(不支持ie8/9)
  457. obj.preview(function (index, file, result) {
  458. this.num = index;
  459. //追加预览图片
  460. var html = '';
  461. html += '<li class="multuple-list-img upload-wrap" index="' + index + '">';
  462. html += '<video class="multuple-list-image" src="' + result + '" alt="' + file.name + '"></video>';
  463. html += '<span class="upload-close-modal" id="upload_img_' + index + '">×</span>';
  464. html += '<div class="upload-image-curtain">50%</div>';
  465. html += '<div class="tips"></div>';
  466. html += '</li>';
  467. $(".multuple-list").prepend(html);
  468. //删除预览图片
  469. $("#upload_img_" + index).bind("click", function () {
  470. delete files[index];
  471. delete picture_arr[index]; //删除所选队列
  472. $(this).parent('.upload-wrap').remove();
  473. // uploadListIns.config.elem.next()[0].value = ''; //清空 input file 值,以免删除后出现同名文件不可选
  474. //禁止点击
  475. if ($(".multuple-list li").length <= 1) {
  476. $("#chooseListAction").removeClass("bg-color").addClass("layui-btn-disabled").attr("disabled", "disabled");
  477. }
  478. });
  479. //开启点击
  480. if ($(".multuple-list li").length > 1) {
  481. $("#chooseVideoAction").addClass("bg-color").removeClass("layui-btn-disabled").removeAttr("disabled");
  482. }
  483. });
  484. },
  485. done: function (res, index) {
  486. let data = $('.multuple-list-image');
  487. // 禁止点击
  488. picture_arr.push(res.data);
  489. var image_box = $(".upload-wrap[index='" + index + "']").parent().find(".upload-image-curtain");
  490. var image_tips = $(".upload-wrap[index='" + index + "']").parent().find(".tips");
  491. image_box.text("上传汇总");
  492. image_box.text("50%");
  493. image_box.show();
  494. if (res.code >= 0) {
  495. setTimeout(function () {
  496. image_box.text("100%");
  497. }, 500);
  498. setTimeout(function () {
  499. getFileAlbumList(1, limit);
  500. updateAlbumNum(album_id);
  501. layer.close(layer_one)
  502. }, 1000);
  503. return delete this.files[index]; //删除文件队列已经上传成功的文件
  504. } else {
  505. setTimeout(function () {
  506. image_box.text("上传失败");
  507. image_tips.text(res.message);
  508. layer.msg(res.message);
  509. }, 500);
  510. }
  511. if (imageArray == data.length) {
  512. $("#chooseVideoAction").addClass("bg-color").removeClass("layui-btn-disabled").removeAttr("disabled");
  513. imageArray = 1;
  514. return false
  515. }
  516. imageArray++
  517. }
  518. });
  519. }
  520. })
  521. });
  522. }
  523. // 上传图片是禁止操作
  524. function submitOne(){
  525. $("#chooseListAction").removeClass("bg-color").addClass("layui-btn-disabled").attr("disabled","disabled");
  526. $(".upload-image-curtain").css('display','block').text('等待中')
  527. // var image_box = $(".upload-wrap").parent().find(".upload-image-curtain");
  528. }
  529. // 上传视频是禁止操作
  530. function submitVideoLimit(){
  531. $("#chooseVideoAction").removeClass("bg-color").addClass("layui-btn-disabled").attr("disabled","disabled");
  532. $(".upload-image-curtain").css('display','block').text('等待中')
  533. // var image_box = $(".upload-wrap").parent().find(".upload-image-curtain");
  534. }
  535. function modifyFile(data) {
  536. if('{$type}' == 'img'){
  537. laytpl($("#modify_file_html").html()).render({}, function(html) {
  538. layer_one = layer.open({
  539. type: 1,
  540. area: ['580px', '430px'],
  541. title: '替换照片',
  542. content: html,
  543. cancel: function() {
  544. $("#modifyFileAction").removeClass("bg-color").addClass("layui-btn-disabled").attr("disabled", "disabled");
  545. },
  546. success: function(res) {
  547. //上传图片
  548. upload.render({
  549. elem: '#modifyFile',
  550. url: ns.url("shop/upload/modifyFile"),
  551. data: {
  552. album_id: album_id,
  553. pic_id: $(data).attr('data-id')
  554. },
  555. multiple: false,
  556. auto: false,
  557. bindAction: '#modifyFileAction',
  558. choose: function(obj) {
  559. //将每次选择的文件追加到文件队列
  560. var files = this.files = obj.pushFile();
  561. //预读本地文件,如果是多文件,则会遍历。(不支持ie8/9)
  562. obj.preview(function(index, file, result) {
  563. //追加预览图片
  564. var html = '';
  565. html += '<li class="multuple-list-img upload-wrap" index="' + index + '">';
  566. html += '<img src="' + result + '" alt="' + file.name + '">';
  567. html += '<span class="upload-close-modal" id="upload_img_' + index + '">×</span>';
  568. html += '<div class="upload-image-curtain">50%</div>';
  569. html += '<div class="tips"></div>';
  570. html += '</li>';
  571. $(".multuple-list").prepend(html);
  572. //删除预览图片
  573. $("#upload_img_" + index).bind("click", function() {
  574. delete files[index];
  575. delete picture_arr[index]; //删除所选队列
  576. $(this).parent('.upload-wrap').remove();
  577. // uploadListIns.config.elem.next()[0].value = ''; //清空 input file 值,以免删除后出现同名文件不可选
  578. //禁止点击
  579. if ($(".multuple-list li").length <= 1) {
  580. $("#modifyFileAction").removeClass("bg-color").addClass("layui-btn-disabled").attr("disabled", "disabled");
  581. //未选择图片时,显示添加按钮
  582. $("#modifyFile").show();
  583. }
  584. });
  585. //禁止点击
  586. if ($(".multuple-list li").length > 1) {
  587. $("#modifyFileAction").addClass("bg-color").removeClass("layui-btn-disabled").removeAttr("disabled");
  588. //隐藏添加按钮,仅替换一张图片
  589. $("#modifyFile").hide();
  590. }
  591. });
  592. },
  593. before: function(obj){ //obj参数包含的信息,跟 choose回调完全一致,可参见上文。
  594. $("#modifyFileAction").removeClass("bg-color").addClass("layui-btn-disabled").attr("disabled","disabled");
  595. },
  596. done: function(res, index) {
  597. picture_arr.push(res.data);
  598. var image_box = $(".upload-wrap[index='" + index + "']").parent().find(".upload-image-curtain");
  599. var image_tips = $(".upload-wrap[index='" + index + "']").parent().find(".tips");
  600. image_box.text("50%");
  601. image_box.show();
  602. if (res.code >= 0) {
  603. setTimeout(function() {
  604. image_box.text("100%");
  605. }, 500);
  606. setTimeout(function() {
  607. getFileAlbumList(1, limit);
  608. layer.close(layer_one);
  609. }, 1000);
  610. return delete this.files[index]; //删除文件队列已经上传成功的文件
  611. } else {
  612. setTimeout(function() {
  613. image_box.text("上传失败");
  614. image_tips.text(res.message);
  615. layer.close(layer_one);
  616. }, 500);
  617. }
  618. },
  619. allDone: function(obj){ //当文件全部被提交后,才触发
  620. $("#modifyFileAction").addClass("bg-color").removeClass("layui-btn-disabled").removeAttr("disabled");
  621. }
  622. });
  623. }
  624. })
  625. });
  626. }else{
  627. modifyVideoFile(data);
  628. }
  629. }
  630. function modifyVideoFile(data) {
  631. laytpl($("#video_html").html()).render({}, function(html) {
  632. layer_one = layer.open({
  633. type: 1,
  634. area: ['580px', '430px'],
  635. title: '替换视频',
  636. content: html,
  637. cancel: function() {
  638. $("#chooseVideoAction").removeClass("bg-color").addClass("layui-btn-disabled").attr("disabled", "disabled");
  639. },
  640. success: function(res) {
  641. //上传图片
  642. upload.render({
  643. elem: '#VideoUpload',
  644. url: ns.url("shop/upload/modifyVideoFile"),
  645. data: {
  646. album_id: album_id,
  647. pic_id: $(data).attr('data-id')
  648. },
  649. multiple: false,
  650. auto: false,
  651. accept: 'video',
  652. size: 50 * 1024,
  653. bindAction: '#chooseVideoAction',
  654. choose: function(obj) {
  655. //将每次选择的文件追加到文件队列
  656. var files = this.files = obj.pushFile();
  657. //预读本地文件,如果是多文件,则会遍历。(不支持ie8/9)
  658. obj.preview(function(index, file, result) {
  659. //追加预览图片
  660. var html = '';
  661. html += '<li class="multuple-list-img upload-wrap" index="' + index + '">';
  662. html += '<video class="multuple-list-image" src="' + result + '" alt="' + file.name + '"></video>';
  663. html += '<span class="upload-close-modal" id="upload_img_' + index + '">×</span>';
  664. html += '<div class="upload-image-curtain">50%</div>';
  665. html += '<div class="tips"></div>';
  666. html += '</li>';
  667. $(".multuple-list").prepend(html);
  668. //删除预览图片
  669. $("#upload_img_" + index).bind("click", function() {
  670. delete files[index];
  671. delete picture_arr[index]; //删除所选队列
  672. $(this).parent('.upload-wrap').remove();
  673. // uploadListIns.config.elem.next()[0].value = ''; //清空 input file 值,以免删除后出现同名文件不可选
  674. //禁止点击
  675. if ($(".multuple-list li").length <= 1) {
  676. $("#chooseVideoAction").removeClass("bg-color").addClass("layui-btn-disabled").attr("disabled", "disabled");
  677. //未选择图片时,显示添加按钮
  678. $("#modifyFile").show();
  679. }
  680. });
  681. //禁止点击
  682. if ($(".multuple-list li").length > 1) {
  683. $("#chooseVideoAction").addClass("bg-color").removeClass("layui-btn-disabled").removeAttr("disabled");
  684. //隐藏添加按钮,仅替换一张图片
  685. $("#modifyFile").hide();
  686. }
  687. });
  688. },
  689. done: function(res, index) {
  690. picture_arr.push(res.data);
  691. var image_box = $(".upload-wrap[index='" + index + "']").parent().find(".upload-image-curtain");
  692. var image_tips = $(".upload-wrap[index='" + index + "']").parent().find(".tips");
  693. image_box.text("50%");
  694. image_box.show();
  695. if (res.code >= 0) {
  696. setTimeout(function() {
  697. image_box.text("100%");
  698. }, 500);
  699. setTimeout(function() {
  700. getFileAlbumList(1, limit);
  701. layer.close(layer_one);
  702. }, 1000);
  703. return delete this.files[index]; //删除文件队列已经上传成功的文件
  704. } else {
  705. setTimeout(function() {
  706. image_box.text("上传失败");
  707. image_tips.text(res.message);
  708. layer.close(layer_one);
  709. }, 500);
  710. }
  711. }
  712. });
  713. }
  714. })
  715. });
  716. }
  717. /**
  718. * 图片加载
  719. */
  720. function getFileAlbumList(page, limit) {
  721. $.ajax({
  722. url: ns.url("shop/Album/lists"),
  723. type: "POST",
  724. dataType: "JSON",
  725. async: false,
  726. data: {
  727. album_id: $('.album-list .layui-tree-txt.selected').attr('data-album'),
  728. pic_name: $(".album-img-sreach").val(),
  729. limit,
  730. page
  731. },
  732. success: function(res) {
  733. res.data.status = $('.album-content-title .edit').attr('data-status');
  734. laytpl($("#list_html").html()).render(res.data, function(html) {
  735. $(".album-img-box").html(html);
  736. loadImgMagnify();
  737. });
  738. if(initIdent){
  739. album_list_count = res.data.list.length;
  740. $(".default-group .num").text(album_list_count);
  741. initIdent = false;
  742. }
  743. $("#paged").empty();
  744. if (res.data.count > 0) {
  745. //调用分页
  746. laypage.render({
  747. elem: "paged",
  748. count: res.data.count,
  749. curr: page, //当前页
  750. limit: limit,
  751. jump: function(obj, first) {
  752. if (!first) {
  753. getFileAlbumList(obj.curr, obj.limit);
  754. }
  755. form.render('checkbox');
  756. }
  757. })
  758. }
  759. }
  760. })
  761. }
  762. function switchGroup(obj){
  763. $('.album-list .selected').removeClass('selected text-color');
  764. $(obj).addClass('selected text-color');
  765. album_id = $(obj).data('id');
  766. album_name = $(obj).data('name');
  767. $("#album_name").empty().html(album_name);
  768. getFileAlbumList(1, limit);
  769. }
  770. /**
  771. * 相册分组
  772. */
  773. function albumList(num = '') {
  774. $.ajax({
  775. url: ns.url("shop/Album/getAlbumList"),
  776. type: 'POST',
  777. async: false,
  778. dataType: 'JSON',
  779. data:{'type' : "{$type}"},
  780. success: function(res) {
  781. var albumList = res.data;
  782. laytpl($("#album_list").html()).render(albumList, function(html) {
  783. $(".album-list ul").html(html);
  784. });
  785. if(albumList.length) {
  786. album_id = albumList[0].child ? albumList[0].child.toString() : albumList[0]['album_id'];
  787. album_name = albumList[0]['album_name'];
  788. getFileAlbumList(1, limit); //图片加载
  789. }
  790. }
  791. });
  792. }
  793. /**
  794. * 添加分组
  795. */
  796. var flag_add_group = false;
  797. function addGrouping() {
  798. if (flag_add_group) return;
  799. flag_add_group = true;
  800. var add_attr = $("#addGroup").html();
  801. laytpl(add_attr).render({}, function(html) {
  802. add_attr_index = layer.open({
  803. title: '添加分组',
  804. skin: 'layer-tips-class add-group',
  805. type: 1,
  806. area: ['500px', '250px'],
  807. content: html,
  808. success: function () {
  809. flag_add_group = false;
  810. form.render();
  811. },
  812. error: function () {
  813. flag_add_group = false;
  814. }
  815. });
  816. });
  817. }
  818. function closeLayer() {
  819. layer.closeAll();
  820. }
  821. /**
  822. * 修改分组
  823. */
  824. var flag_modify_group = false;
  825. function modifyGrouping() {
  826. layer.prompt({
  827. formType: 3,
  828. title: '修改分组名称',
  829. area: ["350px"]
  830. }, function(value) {
  831. if (flag_modify_group) return;
  832. flag_modify_group = true;
  833. $.ajax({
  834. url: ns.url("shop/Album/editAlbum"),
  835. data: {
  836. "album_name": value,
  837. album_id
  838. },
  839. type: "POST",
  840. dataType: "JSON",
  841. success: function(res) {
  842. layer.msg(res.message);
  843. flag_modify_group = false;
  844. if (res.code == 0) {
  845. location.reload();
  846. }
  847. }
  848. })
  849. })
  850. }
  851. /**
  852. * 更新分组图片数量
  853. */
  854. function updateAlbumNum(album_id){
  855. $.ajax({
  856. type: "POST",
  857. async: true,
  858. url: ns.url("shop/Album/albumInfo"),
  859. data: {
  860. album_id
  861. },
  862. dataType: "JSON",
  863. success: function(res) {
  864. if (res.code == 0 && res.data) {
  865. $('[data-id="'+album_id+'"]').find('.num').text(res.data.num);
  866. }
  867. }
  868. });
  869. }
  870. /**
  871. * 删除分组
  872. */
  873. var flag_delete_group = false;
  874. function deleteGrouping() {
  875. layer.confirm('仅删除分组,不删除图片,组内图片将自动归入默认分组', {
  876. btn: ['确定', '取消']
  877. }, function() {
  878. if (flag_delete_group) return;
  879. flag_delete_group = true;
  880. $.ajax({
  881. type: "POST",
  882. async: true,
  883. url: ns.url("shop/Album/deleteAlbum"),
  884. data: {
  885. album_id
  886. },
  887. dataType: "JSON",
  888. success: function(data) {
  889. flag_delete_group = false;
  890. layer.msg(data.message);
  891. if (data.code == 0) {
  892. location.reload();
  893. }
  894. }
  895. });
  896. }, function() {
  897. layer.close();
  898. });
  899. }
  900. /**
  901. * 修改图片名字
  902. */
  903. var flag_modify_pic;
  904. function modifyImgName(data) {
  905. var type = '{$type}' == 'img' ? '图片' : '视频';
  906. layer.prompt({
  907. formType: 3,
  908. title: '修改' + type + '名称',
  909. area: ["640px"],
  910. value: $(data).attr('data-pic-name'),
  911. }, function(value) {
  912. if (flag_modify_pic) return;
  913. flag_modify_pic = true;
  914. $.ajax({
  915. url: ns.url("shop/Album/modifyPicName"),
  916. data: {
  917. pic_name: value,
  918. pic_id: $(data).attr('data-id'),
  919. album_id,
  920. },
  921. type: "POST",
  922. dataType: "JSON",
  923. success: function(res) {
  924. layer.msg(res.message);
  925. flag_modify_pic = false;
  926. if (res.code == 0) {
  927. getFileAlbumList(1, limit);
  928. layer.closeAll('page');
  929. }
  930. }
  931. })
  932. })
  933. }
  934. /**
  935. * 生成缩略图
  936. */
  937. function thumbBatch(data){
  938. var pic_ids = [],
  939. url = '';
  940. if (!data) {
  941. $("input[data-is_thumb='0'][name='check[]']:checked").each(function(index, item) {
  942. pic_ids.push($(item).val());
  943. });
  944. }else{
  945. pic_ids.push($(data).attr("data-id"));
  946. }
  947. pic_ids = pic_ids.toString();
  948. if(pic_ids==''){
  949. layer.msg("请选择未裁剪图片再进行操作");
  950. return false;
  951. }
  952. layer.confirm('是否需要生成缩略图', {
  953. btn: ['确定', '取消']
  954. },function () {
  955. $.ajax({
  956. url:ns.url("shop/Album/thumbBatch"),
  957. data:{
  958. pic_id: pic_ids,
  959. },
  960. type:"POST",
  961. dataType: "JSON",
  962. success: function(data) {
  963. flag_delete_group = false;
  964. layer.msg(data.message);
  965. if (data.code == 0) {
  966. location.reload();
  967. }
  968. }
  969. });
  970. }, function() {
  971. layer.close();
  972. });
  973. }
  974. /**
  975. * 修改图片分组
  976. */
  977. function modifyImgGroup(data) {
  978. var pic_ids = [],
  979. url = '',
  980. type = '{$type}' == 'img' ? '图片' : '视频';
  981. if (!data) {
  982. $('.album-img-box li.selected').each(function () {
  983. pic_ids.push($(this).find('.delete-pic').attr("data-id"));
  984. })
  985. }else{
  986. pic_ids.push($(data).attr("data-id"));
  987. }
  988. url = ns.url("shop/Album/modifyFileAlbum");
  989. if(pic_ids==''){
  990. layer.msg("请选择"+ type +"再进行操作");
  991. return false;
  992. }
  993. laytpl($("#pic_group").html()).render({album_id}, function(html) {
  994. layer.open({
  995. type: 1,
  996. title: '修改'+ type +'分组',
  997. area: ["350px"],
  998. btn: ['保存', '取消'],
  999. content: html,
  1000. yes: function(index, layero) {
  1001. $.ajax({
  1002. url: url,
  1003. type: 'POST',
  1004. async: false,
  1005. dataType: 'JSON',
  1006. data: {
  1007. pic_id: pic_ids.toString(),
  1008. album_id: $(".img-group input[name='group']:checked").val(),
  1009. },
  1010. success: function(res) {
  1011. layer.msg(res.message);
  1012. if (res.code == 0) {
  1013. getFileAlbumList(1, limit);
  1014. updateAlbumNum(album_id);
  1015. updateAlbumNum($(".img-group input[name='group']:checked").val());
  1016. layer.closeAll('page');
  1017. }
  1018. }
  1019. })
  1020. }
  1021. });
  1022. form.render();
  1023. })
  1024. }
  1025. /**
  1026. * 删除图片
  1027. */
  1028. var flag_delete_img = false;
  1029. function deleteImg(data) {
  1030. var pic_ids = [],
  1031. url = '',
  1032. type = '{$type}' == 'img' ? '图片' : '视频';
  1033. if (!data) {
  1034. $('.album-img-box li.selected').each(function () {
  1035. pic_ids.push($(this).find('.delete-pic').attr("data-id"));
  1036. })
  1037. }else{
  1038. pic_ids.push($(data).attr("data-id"));
  1039. }
  1040. pic_ids = pic_ids.toString();
  1041. url = ns.url("shop/Album/deleteFile");
  1042. if(pic_ids==''){
  1043. layer.msg("请选择"+ type +"再进行操作");
  1044. return false;
  1045. }
  1046. layer.confirm('删除'+ type +'会连本地存储或云存储的'+ type +'也删掉,请谨慎操作!', {
  1047. btn: ['确定', '取消']
  1048. }, function() {
  1049. if (flag_delete_img) return;
  1050. flag_delete_img = true;
  1051. $.ajax({
  1052. type: "POST",
  1053. async: true,
  1054. url,
  1055. data: {
  1056. pic_id: pic_ids,
  1057. album_id: album_id
  1058. },
  1059. dataType: "JSON",
  1060. success: function(data) {
  1061. flag_delete_img = false;
  1062. layer.msg(data.message);
  1063. if (data.code == 0) {
  1064. getFileAlbumList(1, limit);
  1065. updateAlbumNum(album_id);
  1066. layer.closeAll('page');
  1067. }
  1068. }
  1069. });
  1070. }, function() {
  1071. layer.close();
  1072. });
  1073. }
  1074. /**
  1075. * 链接
  1076. */
  1077. function copyLink(data) {
  1078. laytpl($("#copy_path").html()).render($(data).attr("data-path"), function(html) {
  1079. layer.open({
  1080. type: 1,
  1081. area: ["800px"],
  1082. title: '复制链接',
  1083. content: html,
  1084. })
  1085. })
  1086. }
  1087. $('body').on(' mouseenter','.upload-image-curtain',function(){
  1088. $(this).siblings(".tips").show();
  1089. });
  1090. $('body').on(' mouseleave','.upload-image-curtain',function(){
  1091. $(this).siblings(".tips").hide();
  1092. });
  1093. function JScopy() {
  1094. ns.copy("path_file", function(res) {
  1095. $("#hidden_image_path").val(res.url);
  1096. });
  1097. }
  1098. $('body').on('click', '.album-img-box li .album-pic', function () {
  1099. if ($('.album-content-title .edit').attr('data-status') == 0) return;
  1100. if ($(this).parents('li').hasClass('selected')) {
  1101. $(this).parents('li').removeClass('selected')
  1102. } else {
  1103. $(this).parents('li').addClass('selected')
  1104. }
  1105. });
  1106. $('.album-content-title .edit').click(function () {
  1107. if ($(this).attr('data-status') == 1) {
  1108. $(this).attr('data-status', 0);
  1109. $(this).text('编辑');
  1110. $('.album-img-operation,.album-action').addClass('layui-hide');
  1111. $('.album-img-box li').removeClass('selected')
  1112. } else {
  1113. $(this).attr('data-status', 1);
  1114. $(this).text('完成');
  1115. $('.album-img-operation,.album-action').removeClass('layui-hide')
  1116. }
  1117. });
  1118. function childSwitch(obj){
  1119. $(obj).parents('.layui-tree-checkedFirst').find('.layui-tree-child').toggle(0,'linear',function (res){
  1120. if($(obj).parents('.layui-tree-checkedFirst').hasClass('layui-tree-spread')){
  1121. $(obj).parents('.layui-tree-checkedFirst').removeClass('layui-tree-spread');
  1122. }else{
  1123. $(obj).parents('.layui-tree-checkedFirst').addClass('layui-tree-spread');
  1124. }
  1125. });
  1126. }
  1127. </script>
  1128. {/block}