choice.html 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>列表页面</title>
  6. </head>
  7. <body class="laytp-container">
  8. <div class="layui-card" id="search-form" style="display:none;">
  9. <div class="layui-card-body">
  10. <form class="layui-form" lay-filter="layui-form">
  11. <div class="layui-form-item">
  12. <div class="layui-form-item layui-inline">
  13. <label class="layui-form-label" title="ID">ID</label>
  14. <div class="layui-input-inline">
  15. <input autocomplete="off" type="text" id="id" name="search_param[id][value]" id="id" placeholder="请输入ID" class="layui-input">
  16. <input type="hidden" name="search_param[id][condition]" value="=">
  17. </div>
  18. </div>
  19. <div class="layui-form-item layui-inline">
  20. <label class="layui-form-label" title="所属分类">所属分类</label>
  21. <div class="layui-input-inline">
  22. <div class="xmSelect"
  23. data-name="search_param[category_id][value]"
  24. data-sourceType="route"
  25. data-source="/admin.files.category/index"
  26. data-sourceTree="true"
  27. data-paging="false"
  28. data-valueField="id"
  29. data-textField="name"
  30. data-placeholder="请选择所属分类"
  31. data-selected="{{=d.category_id}}"
  32. ></div>
  33. <input type="hidden" name="search_param[category_id][condition]" value="FIND_IN_SET">
  34. </div>
  35. </div>
  36. <div class="layui-form-item layui-inline">
  37. <label class="layui-form-label" title="文件名称">文件名称</label>
  38. <div class="layui-input-inline">
  39. <input autocomplete="off" type="text" id="name" name="search_param[name][value]" placeholder="请输入文件名称" class="layui-input">
  40. <input type="hidden" name="search_param[name][condition]" value="LIKE">
  41. </div>
  42. </div>
  43. <div class="layui-form-item layui-inline">
  44. <label class="layui-form-label" title="文件类型">文件类型</label>
  45. <div class="layui-input-inline">
  46. <select id="file_type" name="search_param[file_type][value]">
  47. <option value="">请选择文件类型</option>
  48. <option value=""></option>
  49. <option value="image" {{# if(d.file_type === 'image'){ }}selected="selected"{{# } }}>图片</option>
  50. <option value="video" {{# if(d.file_type === 'video'){ }}selected="selected"{{# } }}>视频</option>
  51. <option value="music" {{# if(d.file_type === 'audio'){ }}selected="selected"{{# } }}>音频</option>
  52. <option value="file">文件</option>
  53. </select>
  54. <input type="hidden" name="search_param[file_type][condition]" value="=">
  55. </div>
  56. </div>
  57. <div class="layui-form-item layui-inline">
  58. <label class="layui-form-label" title="上传方式">上传方式</label>
  59. <div class="layui-input-inline">
  60. <select id="upload_type" name="search_param[upload_type][value]">
  61. <option value="">请选择上传方式</option>
  62. <option value=""></option>
  63. <option value="local">本地上传</option>
  64. <option value="ali-oss">阿里云OSS</option>
  65. <option value="qiniu-kodo">七牛云KODO</option>
  66. </select>
  67. <input type="hidden" name="search_param[upload_type][condition]" value="=">
  68. </div>
  69. </div>
  70. <div class="layui-form-item layui-inline">
  71. <label class="layui-form-label" title="创建者">创建者</label>
  72. <div class="layui-input-inline">
  73. <div class="xmSelect"
  74. data-name="search_param[create_admin_user_id][value]"
  75. data-sourceType="route"
  76. data-source="/admin.user/index"
  77. data-sourceTree="false"
  78. data-paging="true"
  79. data-valueField="id"
  80. data-textField="nickname"
  81. data-placeholder="请选择创建者"
  82. ></div>
  83. <input type="hidden" name="search_param[create_admin_user_id][condition]" value="FIND_IN_SET">
  84. </div>
  85. </div>
  86. <div class="layui-form-item layui-inline">
  87. <label class="layui-form-label" title="最后更新者">最后更新者</label>
  88. <div class="layui-input-inline">
  89. <div class="xmSelect"
  90. data-name="search_param[update_admin_user_id][value]"
  91. data-sourceType="route"
  92. data-source="/admin.user/index"
  93. data-sourceTree="false"
  94. data-paging="true"
  95. data-valueField="id"
  96. data-textField="nickname"
  97. data-placeholder="请选择最后更新者"
  98. ></div>
  99. <input type="hidden" name="search_param[update_admin_user_id][condition]" value="FIND_IN_SET">
  100. </div>
  101. </div>
  102. <div class="layui-form-item layui-inline">
  103. <label class="layui-form-label" title="创建时间">创建时间</label>
  104. <div class="layui-input-inline">
  105. <input type="text" class="layui-input laydate"
  106. id="create_time" name="search_param[create_time][value]"
  107. data-type="datetime" data-isRange="true" placeholder="请选择创建时间">
  108. <input type="hidden" name="search_param[create_time][condition]" value="BETWEEN">
  109. </div>
  110. </div>
  111. <div class="layui-form-item layui-inline">
  112. <button class="laytp-btn laytp-btn-md laytp-btn-primary" lay-submit lay-filter="laytp-search-form">
  113. <i class="layui-icon layui-icon-search"></i>
  114. 查询
  115. </button>
  116. <button type="reset" class="laytp-btn laytp-btn-md laytp-search-form-reset">
  117. <i class="layui-icon layui-icon-refresh"></i>
  118. 重置
  119. </button>
  120. </div>
  121. </div>
  122. </form>
  123. </div>
  124. </div>
  125. <div class="layui-card">
  126. <div class="layui-card-body">
  127. <table id="laytp-table" lay-filter="laytp-table"></table>
  128. </div>
  129. </div>
  130. <script type="text/html" id="default-toolbar">
  131. <button class="laytp-btn laytp-btn-warming laytp-btn-md" lay-event="search">
  132. <i class="layui-icon layui-icon-search"></i>
  133. 搜索
  134. </button>
  135. <button class="laytp-btn laytp-btn-primary laytp-btn-md" lay-event="finishChoice">
  136. <i class="layui-icon layui-icon-ok-circle"></i>
  137. 完成选择
  138. </button>
  139. </script>
  140. <script>
  141. if (localStorage.getItem("staticDomain")) {
  142. document.write("<link rel='stylesheet' href='" + localStorage.getItem("staticDomain") + "/component/layui/css/layui.css?v=" + localStorage.getItem("version") + "'>");
  143. document.write("<script src='" + localStorage.getItem("staticDomain") + "/component/layui/layui.js?v=" + localStorage.getItem("version") + "'><\/script>");
  144. document.write("<script src='" + localStorage.getItem("staticDomain") + "/component/laytp/layuiConfig.js?v=" + localStorage.getItem("version") + "'><\/script>");
  145. } else {
  146. document.write("<link rel='stylesheet' href='/static/component/layui/css/layui.css?v=" + localStorage.getItem("version") + "'>");
  147. document.write("<script src='/static/component/layui/layui.js?v=" + localStorage.getItem("version") + "'><\/script>");
  148. document.write("<script src='/static/component/laytp/layuiConfig.js?v=" + localStorage.getItem("version") + "'><\/script>");
  149. }
  150. </script>
  151. <script>
  152. layui.use(['laytp'], function () {
  153. const
  154. facade = layui.facade
  155. ;
  156. // 选择右侧数据表格,展示某分类下的附件列表
  157. const funController = {};
  158. //静态页面地址前缀
  159. window.htmlPrefix = facade.compatibleHtmlPath("/admin/files/");
  160. //后端接口地址前缀
  161. window.apiPrefix = facade.compatibleApiRoute("/admin.files/");
  162. //表格渲染
  163. funController.tableRender = function (where, page) {
  164. layui.table.render({
  165. elem: "#laytp-table"
  166. , id: "laytp-table"
  167. , url: facade.url("/admin.files/index",{paging:1})
  168. , toolbar: "#default-toolbar"
  169. , defaultToolbar: [{
  170. title: '刷新',
  171. layEvent: 'refresh',
  172. icon: 'layui-icon-refresh',
  173. }, 'filter', 'print', 'exports']
  174. , where: where
  175. , method: "GET"
  176. , cellMinWidth: 120
  177. , skin: 'line'
  178. , loading: false
  179. , page: {
  180. curr: page
  181. }
  182. , parseData: function (res) { //res 即为原始返回的数据
  183. return facade.parseTableData(res, true);
  184. }
  185. , done: function(res){
  186. layui.laytpTable.done();
  187. var checkedIdsArr = checkedIds.split(", ");
  188. // 已经选中的数据,设置选中复选框或者单选框
  189. for(let k in res.data){
  190. for(let id in checkedIdsArr){
  191. if(res.data[k].id === parseInt(checkedIdsArr[id])){
  192. checkedItems[id] = res.data[k];
  193. //这句才是真正选中,通过设置关键字LAY_CHECKED为true选中
  194. res.data[k]["LAY_CHECKED"]='true';
  195. //下面三句是通过更改css来实现选中的效果
  196. var index= res.data[k]['LAY_TABLE_INDEX'];
  197. $('tr[data-index=' + index + '] input[type="checkbox"]').prop('checked', true);
  198. $('tr[data-index=' + index + '] input[type="checkbox"]').next().addClass('layui-form-checked');
  199. //单选框选中
  200. $(".layui-table-view[lay-id='laytp-table'] .layui-table-body tr[data-index="+index+"] .layui-form-radio").click();
  201. }
  202. }
  203. }
  204. }
  205. , cols: [[
  206. {type:colsType, fixed:'left', checked:true}
  207. ,{field:'id',title:'ID',align:'center',width:80,fixed:'left'}
  208. ,{field:'category_id',title:'所属分类',align:'center',templet:'<div>{{# if(d.category){ }}{{d.category.name}}{{# }else{ }}-{{# } }}</div>'}
  209. ,{field:'name',title:'文件名称',align:'center',templet:function(d){
  210. return layui.laytpl('{{=d.name}}').render({name:d.name});
  211. }}
  212. ,{field:'file_type',title:'文件类型',align:'center',templet:function(d){
  213. return laytp.tableFormatter.status('file_type',d.file_type,{"value":["image","video","music","file"],"text":["图片","视频","音频","文件"]});
  214. }}
  215. ,{field:'path',title:'文件预览',align:'center',templet:function(d){
  216. if(d.file_type === "image"){
  217. return laytp.tableFormatter.images(d.path);
  218. }else if(d.file_type === "video"){
  219. return laytp.tableFormatter.video(d.path);
  220. }else if(d.file_type === "music"){
  221. return laytp.tableFormatter.audio(d.path);
  222. }else if(d.file_type === "file"){
  223. return laytp.tableFormatter.file(d.path);
  224. }
  225. }}
  226. ,{field:'upload_type',title:'上传方式',align:'center',templet:function(d){
  227. return laytp.tableFormatter.status('upload_type',d.upload_type,{"value":["local","ali-oss","qiniu-kodo"],"text":["本地上传","阿里云OSS","七牛云KODO"]});
  228. }}
  229. ,{field:'create_admin_user_id',title:'创建者',align:'center',templet:'<div>{{# if(d.createAdminUser){ }}{{d.createAdminUser.nickname}}{{# }else{ }}-{{# } }}</div>'}
  230. ,{field:'create_time',title:'创建时间',align:'center'}
  231. ]]
  232. });
  233. //监听数据表格顶部左侧按钮点击事件
  234. layui.table.on("toolbar(laytp-table)", function (obj) {
  235. //默认按钮点击事件,包括添加按钮和回收站按钮
  236. var defaultTableToolbar = layui.context.get("defaultTableToolbar");
  237. if (defaultTableToolbar.indexOf(obj.event) !== -1) {
  238. laytp.tableToolbar(obj);
  239. } else {
  240. //自定义按钮点击事件
  241. switch(obj.event){
  242. //完成选择
  243. case "finishChoice":
  244. var name = facade.getUrlParam("name");
  245. layui.laytpUpload.choiceAfter(name, multi, fileType, checkedItems);
  246. parent.layui.layer.close(parent.layui.layer.getFrameIndex(window.name));//关闭当前页
  247. break;
  248. }
  249. }
  250. });
  251. //监听数据表格[操作列]按钮点击事件
  252. layui.table.on("tool(laytp-table)", function (obj) {
  253. var defaultTableTool = layui.context.get("defaultTableTool");
  254. if (defaultTableTool.indexOf(obj.event) !== -1) {
  255. laytp.tableTool(obj);
  256. } else {
  257. // //自定义按钮点击事件
  258. // switch(obj.event){
  259. // //自定义按钮点击事件
  260. // case "":
  261. //
  262. // break;
  263. // }
  264. }
  265. });
  266. //监听表头排序事件
  267. layui.table.on('sort(laytp-table)', function(obj){
  268. layui.table.reload('laytp-table', {
  269. initSort: obj //记录初始排序,如果不设的话,将无法标记表头的排序状态。
  270. , where: {
  271. "order_param" : {
  272. "field" : obj.field,
  273. "type" : obj.type
  274. }
  275. }
  276. });
  277. });
  278. // 监听复选框选择事件
  279. layui.table.on('checkbox(laytp-table)', function(obj){
  280. if(obj.checked){
  281. if(obj.type === 'one'){
  282. checkedItems[obj.data.id] = obj.data;
  283. }else if(obj.type === 'all'){
  284. allData = layui.table.getData("laytp-table");
  285. for(let k in allData){
  286. checkedItems[allData[k].id] = allData[k];
  287. }
  288. }
  289. }else{
  290. if(obj.type === 'one'){
  291. delete checkedItems[obj.data.id];
  292. }else if(obj.type === 'all'){
  293. allData = layui.table.getData("laytp-table");
  294. for(let k in allData){
  295. delete checkedItems[allData[k].id];
  296. }
  297. }
  298. }
  299. });
  300. // 监听单选框选择事件
  301. layui.table.on('radio(laytp-table)', function(obj){ //test 是 table 标签对应的 lay-filter 属性
  302. checkedItems = {};
  303. checkedItems[obj.data.id] = obj.data;
  304. });
  305. };
  306. // 全局定义一个存储已选择项的对象
  307. var checkedItems = {};
  308. // 全局定义一个变量,用来存储当前页的所有数据
  309. var allData;
  310. window.funController = funController;
  311. // 根据参数,设置搜索表单的值并执行一次搜索
  312. var multi = (facade.getUrlParam('multi') === 'true');
  313. var colsType = multi ? 'checkbox' : 'radio';
  314. var categoryId = facade.getUrlParam('category_id') ? facade.getUrlParam('category_id') : 0;
  315. var fileType = facade.getUrlParam('file_type') ? facade.getUrlParam('file_type') : "";
  316. var checkedIds = facade.getUrlParam('checked_ids') ? decodeURI(facade.getUrlParam('checked_ids')) : "";
  317. funController.tableRender();
  318. // if(checkedIds){
  319. // console.log(checkedIds);
  320. // var checkedIdsArr = checkedIds.split(", ");
  321. // for(let k in checkedIdsArr){
  322. // checkedItems[checkedIdsArr[k]] = checkedIdsArr[k];
  323. // }
  324. // funController.tableRender();
  325. // }else{
  326. // funController.tableRender();
  327. // }
  328. });
  329. </script>
  330. </body>
  331. </html>