define(["jquery", "tableSelect", "ckeditor"], function ($, tableSelect, undefined) { var form = layui.form, layer = layui.layer, table = layui.table, laydate = layui.laydate, upload = layui.upload, element = layui.element, laytpl = layui.laytpl, tableSelect = layui.tableSelect, util = layui.util; layer.config({ skin: 'layui-layer-easy' }); var init = { table_elem: '#currentTable', table_render_id: 'currentTableRenderId', upload_url: 'ajax/upload', upload_exts: 'doc|gif|ico|icon|jpg|mp3|mp4|p12|pem|png|rar', }; var admin = { config: { shade: [0.02, '#000'], }, url: function (url) { return '/' + CONFIG.ADMIN + '/' + url; }, headers: function () { return {'X-CSRF-TOKEN': window.CONFIG.CSRF_TOKEN}; }, //js版empty,判断变量是否为空 empty: function (r) { var n, t, e, f = [void 0, null, !1, 0, "", "0"]; for (t = 0, e = f.length; t < e; t++) if (r === f[t]) return !0; if ("object" == typeof r) { for (n in r) if (r.hasOwnProperty(n)) return !1; return !0 } return !1 }, checkAuth: function (node, elem) { if (CONFIG.IS_SUPER_ADMIN) { return true; } if ($(elem).attr('data-auth-' + node) === '1') { return true; } else { return false; } }, parame: function (param, defaultParam) { return param !== undefined ? param : defaultParam; }, request: { post: function (option, ok, no, ex) { return admin.request.ajax('post', option, ok, no, ex); }, get: function (option, ok, no, ex) { return admin.request.ajax('get', option, ok, no, ex); }, ajax: function (type, option, ok, no, ex) { type = type || 'get'; option.url = option.url || ''; option.data = option.data || {}; option.prefix = option.prefix || false; option.statusName = option.statusName || 'code'; option.statusCode = option.statusCode || 1; ok = ok || function (res) { }; no = no || function (res) { var msg = res.msg == undefined ? '返回数据格式有误' : res.msg; admin.msg.error(msg); return false; }; ex = ex || function (res) { }; if (option.url == '') { admin.msg.error('请求地址不能为空'); return false; } if (option.prefix == true) { option.url = admin.url(option.url); } var index = admin.msg.loading('加载中'); $.ajax({ url: option.url, type: type, contentType: "application/x-www-form-urlencoded; charset=UTF-8", dataType: "json", headers:admin.headers(), data: option.data, timeout: 60000, success: function (res) { admin.msg.close(index); if (eval('res.' + option.statusName) == option.statusCode) { return ok(res); } else { return no(res); } }, error: function (xhr, textstatus, thrown) { admin.msg.error('Status:' + xhr.status + ',' + xhr.statusText + ',请稍后再试!', function () { ex(this); }); return false; }, complete: function(){ // @todo 刷新csrf-token } }); } }, common: { parseNodeStr: function (node) { var array = node.split('/'); $.each(array, function (key, val) { if (key === 0) { val = val.split('.'); $.each(val, function (i, v) { val[i] = admin.common.humpToLine(v.replace(v[0], v[0].toLowerCase())); }); val = val.join("."); array[key] = val; } }); node = array.join("/"); return node; }, lineToHump: function (name) { return name.replace(/\_(\w)/g, function (all, letter) { return letter.toUpperCase(); }); }, humpToLine: function (name) { return name.replace(/([A-Z])/g, "_$1").toLowerCase(); }, }, msg: { // 成功消息 success: function (msg, callback) { if (callback === undefined) { callback = function () { } } var index = layer.msg(msg, {icon: 1, shade: admin.config.shade, scrollbar: false, time: 2000, shadeClose: true}, callback); return index; }, // 失败消息 error: function (msg, callback) { if (callback === undefined) { callback = function () { } } var index = layer.msg(msg, {icon: 2, shade: admin.config.shade, scrollbar: false, time: 3000, shadeClose: true}, callback); return index; }, // 警告消息框 alert: function (msg, callback) { var index = layer.alert(msg, {end: callback, scrollbar: false}); return index; }, // 对话框 confirm: function (msg, ok, no) { var index = layer.confirm(msg, {title: '操作确认', btn: ['确认', '取消']}, function () { typeof ok === 'function' && ok.call(this); }, function () { typeof no === 'function' && no.call(this); self.close(index); }); return index; }, // 消息提示 tips: function (msg, time, callback) { var index = layer.msg(msg, {time: (time || 3) * 1000, shade: this.shade, end: callback, shadeClose: true}); return index; }, // 加载中提示 loading: function (msg, callback) { var index = msg ? layer.msg(msg, {icon: 16, scrollbar: false, shade: this.shade, time: 0, end: callback}) : layer.load(2, {time: 0, scrollbar: false, shade: this.shade, end: callback}); return index; }, // 关闭消息框 close: function (index) { return layer.close(index); } }, table: { render: function (options) { options.init = options.init || init; options.modifyReload = admin.parame(options.modifyReload, true); options.elem = options.elem || options.init.table_elem; options.id = options.id || options.init.table_render_id; options.layFilter = options.id + '_LayFilter'; options.url = options.url || admin.url(options.init.index_url); options.headers = admin.headers(); options.page = admin.parame(options.page, true); options.search = admin.parame(options.search, true); options.skin = options.skin || 'line'; options.limit = options.limit || 15; options.limits = options.limits || [10, 15, 20, 25, 50, 100]; options.cols = options.cols || []; options.defaultToolbar = (options.defaultToolbar === undefined && !options.search) ? ['filter', 'print', 'exports'] : ['filter', 'print', 'exports', { title: '搜索', layEvent: 'TABLE_SEARCH', icon: 'layui-icon-search', extend: 'data-table-id="' + options.id + '"' }]; // 判断是否为移动端 if (admin.checkMobile()) { options.defaultToolbar = !options.search ? ['filter'] : ['filter', { title: '搜索', layEvent: 'TABLE_SEARCH', icon: 'layui-icon-search', extend: 'data-table-id="' + options.id + '"' }]; } // 判断元素对象是否有嵌套的 options.cols = admin.table.formatCols(options.cols, options.init); // 初始化表格lay-filter $(options.elem).attr('lay-filter', options.layFilter); // 初始化表格搜索 if (options.search === true) { admin.table.renderSearch(options.cols, options.elem, options.id); } // 初始化表格左上方工具栏 options.toolbar = options.toolbar || ['refresh', 'add', 'delete', 'export']; options.toolbar = admin.table.renderToolbar(options.toolbar, options.elem, options.id, options.init); // 判断是否有操作列表权限 options.cols = admin.table.renderOperat(options.cols, options.elem); // 初始化表格 var newTable = table.render(options); // 监听表格搜索开关显示 admin.table.listenToolbar(options.layFilter, options.id); // 监听表格开关切换 admin.table.renderSwitch(options.cols, options.init, options.id, options.modifyReload); // 监听表格开关切换 admin.table.listenEdit(options.init, options.layFilter, options.id, options.modifyReload); return newTable; }, renderToolbar: function (data, elem, tableId, init) { data = data || []; var toolbarHtml = ''; $.each(data, function (i, v) { if (v === 'refresh') { toolbarHtml += ' \n'; } else if (v === 'add') { if (admin.checkAuth('add', elem)) { toolbarHtml += '\n'; } } else if (v === 'delete') { if (admin.checkAuth('delete', elem)) { toolbarHtml += '\n'; } } else if (v === 'export') { if (admin.checkAuth('export', elem)) { toolbarHtml += '\n'; } } else if (typeof v === "object") { $.each(v, function (ii, vv) { vv.class = vv.class || ''; vv.icon = vv.icon || ''; vv.auth = vv.auth || ''; vv.url = vv.url || ''; vv.method = vv.method || 'open'; vv.title = vv.title || vv.text; vv.text = vv.text || vv.title; vv.extend = vv.extend || ''; vv.checkbox = vv.checkbox || false; if (admin.checkAuth(vv.auth, elem)) { toolbarHtml += admin.table.buildToolbarHtml(vv, tableId); } }); } }); return '
' + toolbarHtml + '
'; }, renderSearch: function (cols, elem, tableId) { // TODO 只初始化第一个table搜索字段,如果存在多个(绝少数需求),得自己去扩展 cols = cols[0] || {}; var newCols = []; var formHtml = ''; $.each(cols, function (i, d) { d.field = d.field || false; d.fieldAlias = admin.parame(d.fieldAlias, d.field); d.title = d.title || d.field || ''; d.selectList = d.selectList || {}; d.search = admin.parame(d.search, true); d.searchTip = d.searchTip || '请输入' + d.title || ''; d.searchValue = d.searchValue || ''; d.searchOp = d.searchOp || '%*%'; d.timeType = d.timeType || 'datetime'; if (d.field !== false && d.search !== false) { switch (d.search) { case true: formHtml += '\t
\n' + '\n' + '
\n' + '\n' + '
\n' + '
'; break; case 'select': d.searchOp = '='; var selectHtml = ''; $.each(d.selectList, function (sI, sV) { var selected = ''; if (sI === d.searchValue) { selected = 'selected=""'; } selectHtml += '/n'; }); formHtml += '\t
\n' + '\n' + '
\n' + '\n' + '
\n' + '
'; break; case 'range': d.searchOp = 'range'; formHtml += '\t
\n' + '\n' + '
\n' + '\n' + '
\n' + '
'; break; case 'time': d.searchOp = '='; formHtml += '\t
\n' + '\n' + '
\n' + '\n' + '
\n' + '
'; break; } newCols.push(d); } }); if (formHtml !== '') { $(elem).before('
\n' + '条件搜索\n' + '' + '
'); admin.table.listenTableSearch(tableId); // 初始化form表单 form.render(); $.each(newCols, function (ncI, ncV) { if (ncV.search === 'range') { laydate.render({range: true, type: ncV.timeType, elem: '[name="' + ncV.fieldAlias + '"]'}); } if (ncV.search === 'time') { laydate.render({type: ncV.timeType, elem: '[name="' + ncV.fieldAlias + '"]'}); } }); } }, renderSwitch: function (cols, tableInit, tableId, modifyReload) { tableInit.modify_url = tableInit.modify_url || false; cols = cols[0] || {}; tableId = tableId || init.table_render_id; if (cols.length > 0) { $.each(cols, function (i, v) { v.filter = v.filter || false; if (v.filter !== false && tableInit.modify_url !== false) { admin.table.listenSwitch({filter: v.filter, url: tableInit.modify_url, tableId: tableId, modifyReload: modifyReload}); } }); } }, renderOperat(data, elem) { for (dk in data) { var col = data[dk]; var operat = col[col.length - 1].operat; if (operat !== undefined) { var check = false; for (key in operat) { var item = operat[key]; if (typeof item === 'string') { if (admin.checkAuth(item, elem)) { check = true; break; } } else { for (k in item) { var v = item[k]; if (v.auth !== undefined && admin.checkAuth(v.auth, elem)) { check = true; break; } } } } if (!check) { data[dk].pop() } } } return data; }, buildToolbarHtml: function (toolbar, tableId) { var html = ''; toolbar.class = toolbar.class || ''; toolbar.icon = toolbar.icon || ''; toolbar.auth = toolbar.auth || ''; toolbar.url = toolbar.url || ''; toolbar.extend = toolbar.extend || ''; toolbar.method = toolbar.method || 'open'; toolbar.field = toolbar.field || 'id'; toolbar.title = toolbar.title || toolbar.text; toolbar.text = toolbar.text || toolbar.title; toolbar.checkbox = toolbar.checkbox || false; var formatToolbar = toolbar; formatToolbar.icon = formatToolbar.icon !== '' ? ' ' : ''; formatToolbar.class = formatToolbar.class !== '' ? 'class="' + formatToolbar.class + '" ' : ''; if (toolbar.method === 'open') { formatToolbar.method = formatToolbar.method !== '' ? 'data-open="' + formatToolbar.url + '" data-title="' + formatToolbar.title + '" ' : ''; } else if (toolbar.method === 'none'){ // 常用于与extend配合,自定义监听按钮 formatToolbar.method = ''; } else { formatToolbar.method = formatToolbar.method !== '' ? 'data-request="' + formatToolbar.url + '" data-title="' + formatToolbar.title + '" ' : ''; } formatToolbar.checkbox = toolbar.checkbox ? ' data-checkbox="true" ' : ''; formatToolbar.tableId = tableId !== undefined ? ' data-table="' + tableId + '" ' : ''; html = ''; return html; }, buildOperatHtml: function (operat) { var html = ''; operat.class = operat.class || ''; operat.icon = operat.icon || ''; operat.auth = operat.auth || ''; operat.url = operat.url || ''; operat.extend = operat.extend || ''; operat.method = operat.method || 'open'; operat.field = operat.field || 'id'; operat.title = operat.title || operat.text; operat.text = operat.text || operat.title; var formatOperat = operat; formatOperat.icon = formatOperat.icon !== '' ? ' ' : ''; formatOperat.class = formatOperat.class !== '' ? 'class="' + formatOperat.class + '" ' : ''; if (operat.method === 'open') { formatOperat.method = formatOperat.method !== '' ? 'data-open="' + formatOperat.url + '" data-title="' + formatOperat.title + '" ' : ''; } else if (operat.method === 'none'){ // 常用于与extend配合,自定义监听按钮 formatOperat.method = ''; } else { formatOperat.method = formatOperat.method !== '' ? 'data-request="' + formatOperat.url + '" data-title="' + formatOperat.title + '" ' : ''; } html = '' + formatOperat.icon + formatOperat.text + ''; return html; }, toolSpliceUrl(url, field, data) { url = url.indexOf("?") !== -1 ? url + '&' + field + '=' + data[field] : url + '?' + field + '=' + data[field]; return url; }, formatCols: function (cols, init) { for (i in cols) { var col = cols[i]; for (index in col) { var val = col[index]; // 判断是否包含初始化数据 if (val.init === undefined) { cols[i][index]['init'] = init; } // 格式化列操作栏 if (val.templet === admin.table.tool && val.operat === undefined) { cols[i][index]['operat'] = ['edit', 'delete']; } // 判断是否包含开关组件 if (val.templet === admin.table.switch && val.filter === undefined) { cols[i][index]['filter'] = val.field; } // 判断是否含有搜索下拉列表 if (val.selectList !== undefined && val.search === undefined) { cols[i][index]['search'] = 'select'; } // 判断是否初始化对齐方式 if (val.align === undefined) { cols[i][index]['align'] = 'center'; } // 部分字段开启排序 var sortDefaultFields = ['id', 'sort']; if (val.sort === undefined && sortDefaultFields.indexOf(val.field) >= 0) { cols[i][index]['sort'] = true; } // 初始化图片高度 if (val.templet === admin.table.image && val.imageHeight === undefined) { cols[i][index]['imageHeight'] = 40; } // 判断是否多层对象 if (val.field !== undefined && val.field.split(".").length > 1) { if (val.templet === undefined) { cols[i][index]['templet'] = admin.table.value; } } // 判断是否列表数据转换 if (val.selectList !== undefined && val.templet === undefined) { cols[i][index]['templet'] = admin.table.list; } } } return cols; }, tool: function (data, option) { option.operat = option.operat || ['edit', 'delete']; var elem = option.init.table_elem || init.table_elem; var html = ''; $.each(option.operat, function (i, item) { if (typeof item === 'string') { switch (item) { case 'edit': var operat = { class: 'layui-btn layui-btn-success layui-btn-xs', method: 'open', field: 'id', icon: '', text: '编辑', title: '编辑信息', auth: 'edit', url: option.init.edit_url, extend: "" }; operat.url = admin.table.toolSpliceUrl(operat.url, operat.field, data); if (admin.checkAuth(operat.auth, elem)) { html += admin.table.buildOperatHtml(operat); } break; case 'delete': var operat = { class: 'layui-btn layui-btn-danger layui-btn-xs', method: 'get', field: 'id', icon: '', text: '删除', title: '确定删除?', auth: 'delete', url: option.init.delete_url, extend: "" }; operat.url = admin.table.toolSpliceUrl(operat.url, operat.field, data); if (admin.checkAuth(operat.auth, elem)) { html += admin.table.buildOperatHtml(operat); } break; } } else if (typeof item === 'object') { $.each(item, function (i, operat) { operat.class = operat.class || ''; operat.icon = operat.icon || ''; operat.auth = operat.auth || ''; operat.url = operat.url || ''; operat.method = operat.method || 'open'; operat.field = operat.field || 'id'; operat.title = operat.title || operat.text; operat.text = operat.text || operat.title; operat.extend = operat.extend || ''; // 自定义表格opreat按钮的弹窗标题风格,extra是表格里的欲加入标题中的字段 operat.extra = operat.extra || ''; if (data[operat.extra] !== undefined) { operat.title = data[operat.extra] + ' - ' + operat.title; } operat.url = admin.table.toolSpliceUrl(operat.url, operat.field, data); if (admin.checkAuth(operat.auth, elem)) { html += admin.table.buildOperatHtml(operat); } }); } }); return html; }, list: function (data, option) { option.selectList = option.selectList || {}; var field = option.field; try { var value = eval("data." + field); } catch (e) { var value = undefined; } if (option.selectList[value] === undefined || option.selectList[value] === '' || option.selectList[value] === null) { return value; } else { return option.selectList[value]; } }, image: function (data, option) { option.imageWidth = option.imageWidth || 200; option.imageHeight = option.imageHeight || 40; option.imageSplit = option.imageSplit || '|'; option.imageJoin = option.imageJoin || '
'; option.title = option.title || option.field; var field = option.field, title = data[option.title]; try { var value = eval("data." + field); } catch (e) { var value = undefined; } if (value === undefined || value===null) { return ''; } else { var values = value.split(option.imageSplit), valuesHtml = []; values.forEach((value, index) => { valuesHtml.push(''); }); return valuesHtml.join(option.imageJoin); } }, url: function (data, option) { var field = option.field; try { var value = eval("data." + field); } catch (e) { var value = undefined; } return '' + value + ''; }, switch: function (data, option) { var field = option.field; option.filter = option.filter || option.field || null; option.checked = option.checked || 1; option.tips = option.tips || '开|关'; try { var value = eval("data." + field); } catch (e) { var value = undefined; } var checked = value === option.checked ? 'checked' : ''; return laytpl('').render(data); }, price: function (data, option) { var field = option.field; try { var value = eval("data." + field); } catch (e) { var value = undefined; } return '¥' + value + ''; }, percent: function (data, option) { var field = option.field; try { var value = eval("data." + field); } catch (e) { var value = undefined; } return '' + value + '%'; }, icon: function (data, option) { var field = option.field; try { var value = eval("data." + field); } catch (e) { var value = undefined; } return ''; }, text: function (data, option) { var field = option.field; try { var value = eval("data." + field); } catch (e) { var value = undefined; } return '' + value + ''; }, value: function (data, option) { var field = option.field; try { var value = eval("data." + field); } catch (e) { var value = undefined; } return '' + value + ''; }, //时间戳转日期 date: function (data, option) { var field = option.field, value = ''; try { value = eval("data." + field); } catch (e) {} if (!admin.empty(value)){ value = util.toDateString(value * 1000, option.format || 'yyyy-MM-dd HH:mm:ss'); } return '' + value + ''; }, listenTableSearch: function (tableId) { form.on('submit(' + tableId + '_filter)', function (data) { var dataField = data.field; var formatFilter = {}, formatOp = {}; $.each(dataField, function (key, val) { if (val !== '') { formatFilter[key] = val; var op = $('#c-' + key).attr('data-search-op'); op = op || '%*%'; formatOp[key] = op; } }); table.reload(tableId, { page: { curr: 1 } , where: { filter: JSON.stringify(formatFilter), op: JSON.stringify(formatOp) } }, 'data'); return false; }); }, listenSwitch: function (option, ok) { option.filter = option.filter || ''; option.url = option.url || ''; option.field = option.field || option.filter || ''; option.tableId = option.tableId || init.table_render_id; option.modifyReload = option.modifyReload || false; form.on('switch(' + option.filter + ')', function (obj) { var checked = obj.elem.checked ? 1 : 0; if (typeof ok === 'function') { return ok({ id: obj.value, checked: checked, }); } else { var data = { id: obj.value, field: option.field, value: checked, }; admin.request.post({ url: option.url, prefix: true, data: data, }, function (res) { if (option.modifyReload) { table.reload(option.tableId); } }, function (res) { admin.msg.error(res.msg, function () { table.reload(option.tableId); }); }, function () { table.reload(option.tableId); }); } }); }, listenToolbar: function (layFilter, tableId) { table.on('toolbar(' + layFilter + ')', function (obj) { // 搜索表单的显示 switch (obj.event) { case 'TABLE_SEARCH': var searchFieldsetId = 'searchFieldset_' + tableId; var _that = $("#" + searchFieldsetId); if (_that.hasClass("layui-hide")) { _that.removeClass('layui-hide'); } else { _that.addClass('layui-hide'); } break; } }); }, listenEdit: function (tableInit, layFilter, tableId, modifyReload) { tableInit.modify_url = tableInit.modify_url || false; tableId = tableId || init.table_render_id; if (tableInit.modify_url !== false) { table.on('edit(' + layFilter + ')', function (obj) { var value = obj.value, data = obj.data, id = data.id, field = obj.field; var _data = { id: id, field: field, value: value, }; admin.request.post({ url: tableInit.modify_url, prefix: true, data: _data, }, function (res) { if (modifyReload) { table.reload(tableId); } }, function (res) { admin.msg.error(res.msg, function () { table.reload(tableId); }); }, function () { table.reload(tableId); }); }); } }, }, checkMobile: function () { var userAgentInfo = navigator.userAgent; var mobileAgents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"]; var mobile_flag = false; //根据userAgent判断是否是手机 for (var v = 0; v < mobileAgents.length; v++) { if (userAgentInfo.indexOf(mobileAgents[v]) > 0) { mobile_flag = true; break; } } var screen_width = window.screen.width; var screen_height = window.screen.height; //根据屏幕分辨率判断是否是手机 if (screen_width < 600 && screen_height < 800) { mobile_flag = true; } return mobile_flag; }, open: function (title, url, width, height, isResize, shadeClose = false) { isResize = isResize === undefined ? true : isResize; var index = layer.open({ title: title, type: 2, area: [width, height], content: url, maxmin: true, moveOut: true, shadeClose: shadeClose, success: function (layero, index) { var body = layer.getChildFrame('body', index); if (body.length > 0) { $.each(body, function (i, v) { // todo 优化弹出层背景色修改 $(v).before(''); }); } }, end: function () { index = null } }); if (admin.checkMobile() || width === undefined || height === undefined) { layer.full(index); } if (isResize) { $(window).on("resize", function () { index && layer.full(index); }) } }, listen: function (preposeCallback, ok, no, ex) { // 监听表单是否为必填项 admin.api.formRequired(); // 监听表单提交事件 admin.api.formSubmit(preposeCallback, ok, no, ex); // 初始化图片显示以及监听上传事件 admin.api.upload(); // 监听富文本初始化 admin.api.editor(); // 监听下拉选择生成 admin.api.select(); // 监听时间控件生成 admin.api.date(); // 初始化layui表单 form.render(); // 表格修改 $("body").on("mouseenter", ".table-edit-tips", function () { var openTips = layer.tips('点击行内容可以进行修改', $(this), {tips: [2, '#e74c3c'], time: 4000}); }); // 监听弹出层的打开 $('body').on('click', '[data-open]', function () { var clienWidth = $(this).attr('data-width'), clientHeight = $(this).attr('data-height'), dataFull = $(this).attr('data-full'), checkbox = $(this).attr('data-checkbox'), url = $(this).attr('data-open'), external = $(this).attr('data-external') || false, tableId = $(this).attr('data-table'); if(checkbox === 'true'){ tableId = tableId || init.table_render_id; var checkStatus = table.checkStatus(tableId), data = checkStatus.data; if (data.length <= 0) { admin.msg.error('请勾选需要操作的数据'); return false; } var ids = []; $.each(data, function (i, v) { ids.push(v.id); }); if (url.indexOf("?") === -1) { url += '?id=' + ids.join(','); } else { url += '&id=' + ids.join(','); } } if (clienWidth === undefined || clientHeight === undefined) { var width = document.body.clientWidth, height = document.body.clientHeight; if (width >= 800 && height >= 600) { clienWidth = '800px'; clientHeight = '600px'; } else { clienWidth = '100%'; clientHeight = '100%'; } } if (dataFull === 'true') { clienWidth = '100%'; clientHeight = '100%'; } admin.open( $(this).attr('data-title'), external ? url : admin.url(url), clienWidth, clientHeight, ); }); // 放大图片 $('body').on('click', '[data-image]', function () { var title = $(this).attr('data-image'), src = $(this).attr('src'), alt = $(this).attr('alt'); var photos = { "title": title, "id": Math.random(), "data": [ { "alt": alt, "pid": Math.random(), "src": src, "thumb": src } ] }; layer.photos({ photos: photos, anim: 5 }); return false; }); // 放大一组图片 $('body').on('click', '[data-images]', function () { var title = $(this).attr('data-images'), // 从当前元素向上找layuimini-upload-show找到第一个后停止, 再找其所有子元素li doms = $(this).closest(".layuimini-upload-show").children("li"), // 被点击的图片地址 now_src = $(this).attr('src'), alt = $(this).attr('alt'), data = []; $.each(doms, function(key, value){ var src = $(value).find('img').attr('src'); if(src != now_src){ // 压入其他图片地址 data.push({ "alt": alt, "pid": Math.random(), "src": src, "thumb": src }); }else{ // 把当前图片插入到头部 data.unshift({ "alt": alt, "pid": Math.random(), "src": now_src, "thumb": now_src }); } }); var photos = { "title": title, "id": Math.random(), "data": data, }; layer.photos({ photos: photos, anim: 5 }); return false; }); // 监听动态表格刷新 $('body').on('click', '[data-table-refresh]', function () { var tableId = $(this).attr('data-table-refresh'); if (tableId === undefined || tableId === '' || tableId == null) { tableId = init.table_render_id; } table.reload(tableId); }); // 监听搜索表格重置 $('body').on('click', '[data-table-reset]', function () { var tableId = $(this).attr('data-table-reset'); if (tableId === undefined || tableId === '' || tableId == null) { tableId = init.table_render_id; } table.reload(tableId, { page: { curr: 1 } , where: { filter: '{}', op: '{}' } }, 'data'); }); // 监听请求 $('body').on('click', '[data-request]', function () { var title = $(this).attr('data-title'), url = $(this).attr('data-request'), tableId = $(this).attr('data-table'), addons = $(this).attr('data-addons'), checkbox = $(this).attr('data-checkbox'), direct = $(this).attr('data-direct'), field = $(this).attr('data-field') || 'id'; title = title || '确定进行该操作?'; if (direct === 'true') { admin.msg.confirm(title, function () { window.location.href = url; }); return false; } var postData = {}; if(checkbox === 'true'){ tableId = tableId || init.table_render_id; var checkStatus = table.checkStatus(tableId), data = checkStatus.data; if (data.length <= 0) { admin.msg.error('请勾选需要操作的数据'); return false; } var ids = []; $.each(data, function (i, v) { ids.push(v[field]); }); postData[field] = ids; } if (addons !== true && addons !== 'true') { url = admin.url(url); } tableId = tableId || init.table_render_id; admin.msg.confirm(title, function () { admin.request.post({ url: url, data: postData, }, function (res) { admin.msg.success(res.msg, function () { table.reload(tableId); }); }) }); return false; }); // excel导出 $('body').on('click', '[data-table-export]', function () { var tableId = $(this).attr('data-table-export'), url = $(this).attr('data-url'); var index = admin.msg.confirm('根据查询进行导出,确定导出?', function () { window.location = admin.url(url); layer.close(index); }); }); // 数据表格多删除 $('body').on('click', '[data-table-delete]', function () { var tableId = $(this).attr('data-table-delete'), url = $(this).attr('data-url'); tableId = tableId || init.table_render_id; url = url !== undefined ? admin.url(url) : window.location.href; var checkStatus = table.checkStatus(tableId), data = checkStatus.data; if (data.length <= 0) { admin.msg.error('请勾选需要删除的数据'); return false; } var ids = []; $.each(data, function (i, v) { ids.push(v.id); }); admin.msg.confirm('确定删除?', function () { admin.request.post({ url: url, data: { id: ids }, }, function (res) { admin.msg.success(res.msg, function () { table.reload(tableId); }); }); }); return false; }); }, api: { form: function (url, data, ok, no, ex, refreshTable) { if (refreshTable === undefined) { refreshTable = true; } ok = ok || function (res) { res.msg = res.msg || ''; admin.msg.success(res.msg, function () { admin.api.closeCurrentOpen({ refreshTable: refreshTable }); }); return false; }; admin.request.post({ url: url, data: data, }, ok, no, ex); return false; }, closeCurrentOpen: function (option) { option = option || {}; option.refreshTable = option.refreshTable || false; option.refreshFrame = option.refreshFrame || false; if (option.refreshTable === true) { option.refreshTable = init.table_render_id; } var index = parent.layer.getFrameIndex(window.name); parent.layer.close(index); if (option.refreshTable !== false) { parent.layui.table.reload(option.refreshTable); } if (option.refreshFrame) { parent.location.reload(); } return false; }, refreshFrame: function () { parent.location.reload(); return false; }, refreshTable: function (tableName) { tableName = tableName || 'currentTable'; table.reload(tableName); }, formRequired: function () { var verifyList = document.querySelectorAll("[lay-verify]"); if (verifyList.length > 0) { $.each(verifyList, function (i, v) { var verify = $(this).attr('lay-verify'); // todo 必填项处理 if (verify.includes('required')) { var label = $(this).parent().prev(); if (label.is('label') && !label.hasClass('required')) { label.addClass('required'); } if ($(this).attr('lay-reqtext') === undefined && $(this).attr('placeholder') !== undefined) { $(this).attr('lay-reqtext', $(this).attr('placeholder')); } if ($(this).attr('placeholder') === undefined && $(this).attr('lay-reqtext') !== undefined) { $(this).attr('placeholder', $(this).attr('lay-reqtext')); } } }); } }, formSubmit: function (preposeCallback, ok, no, ex) { var formList = document.querySelectorAll("[lay-submit]"); // 表单提交自动处理 if (formList.length > 0) { $.each(formList, function (i, v) { var filter = $(this).attr('lay-filter'), type = $(this).attr('data-type'), refresh = $(this).attr('data-refresh'), url = $(this).attr('lay-submit'); // 表格搜索不做自动提交 if (type === 'tableSearch') { return false; } // 判断是否需要刷新表格 if (refresh === 'false') { refresh = false; } else { refresh = true; } // 自动添加layui事件过滤器 if (filter === undefined || filter === '') { filter = 'save_form_' + (i + 1); $(this).attr('lay-filter', filter) } if (url === undefined || url === '' || url === null) { url = window.location.href; } else { url = admin.url(url); } form.on('submit(' + filter + ')', function (data) { var dataField = data.field; // 富文本数据处理 var editorList = document.querySelectorAll(".editor"); if (editorList.length > 0) { $.each(editorList, function (i, v) { var name = $(this).attr("name"); dataField[name] = CKEDITOR.instances[name].getData(); }); } if (typeof preposeCallback === 'function') { dataField = preposeCallback(dataField); } admin.api.form(url, dataField, ok, no, ex, refresh); return false; }); }); } }, upload: function () { var uploadList = document.querySelectorAll("[data-upload]"); var uploadSelectList = document.querySelectorAll("[data-upload-select]"); if (uploadList.length > 0) { $.each(uploadList, function (i, v) { var uploadExts = $(this).attr('data-upload-exts') || init.upload_exts, uploadName = $(this).attr('data-upload'), uploadNumber = $(this).attr('data-upload-number') || 'one', uploadSign = $(this).attr('data-upload-sign') || '|', uploadAccept = $(this).attr('data-upload-accept') || 'file', uploadAcceptMime = $(this).attr('data-upload-mimetype') || '', elem = "input[name='" + uploadName + "']", uploadElem = this; // 监听上传事件 upload.render({ elem: this, url: admin.url(init.upload_url), exts: uploadExts, accept: uploadAccept,//指定允许上传时校验的文件类型 acceptMime: uploadAcceptMime,//规定打开文件选择框时,筛选出的文件类型 multiple: uploadNumber !== 'one',//是否多文件上传 headers:admin.headers(), done: function (res) { if (res.code === 1) { var url = res.data.url; if (uploadNumber !== 'one') { var oldUrl = $(elem).val(); if (oldUrl !== '') { url = oldUrl + uploadSign + url; } } $(elem).val(url); $(elem).trigger("input"); window.CONFIG.CSRF_TOKEN = res.data.token CKEDITOR.tools.setCookie('ckCsrfToken', res.data.token); admin.msg.success(res.msg); } else { admin.msg.error(res.msg); } return false; } }); // 监听上传input值变化 $(elem).bind("input propertychange", function (event) { var urlString = $(this).val(), urlArray = urlString.split(uploadSign), uploadIcon = $(uploadElem).attr('data-upload-icon') || "file"; $('#bing-' + uploadName).remove(); if (urlString.length > 0) { var parant = $(this).parent('div'); var liHtml = ''; $.each(urlArray, function (i, v) { liHtml += '
  • ×
  • \n'; }); parant.after(''); } }); // 非空初始化图片显示 if ($(elem).val() !== '') { $(elem).trigger("input"); } }); // 监听上传文件的删除事件 $('body').on('click', '[data-upload-delete]', function () { var uploadName = $(this).attr('data-upload-delete'), deleteUrl = $(this).attr('data-upload-url'), sign = $(this).attr('data-upload-sign'); var confirm = admin.msg.confirm('确定删除?', function () { var elem = "input[name='" + uploadName + "']"; var currentUrl = $(elem).val(); var url = ''; if (currentUrl !== deleteUrl) { url = currentUrl.search(deleteUrl) === 0 ? currentUrl.replace(deleteUrl + sign, '') : currentUrl.replace(sign + deleteUrl, ''); $(elem).val(url); $(elem).trigger("input"); } else { $(elem).val(url); $('#bing-' + uploadName).remove(); } admin.msg.close(confirm); }); return false; }); } if (uploadSelectList.length > 0) { $.each(uploadSelectList, function (i, v) { var uploadName = $(this).attr('data-upload-select'), uploadNumber = $(this).attr('data-upload-number') || 'one', uploadSign = $(this).attr('data-upload-sign') || '|'; var selectCheck = uploadNumber === 'one' ? 'radio' : 'checkbox'; var elem = "input[name='" + uploadName + "']", uploadElem = $(this).attr('id'); tableSelect.render({ elem: "#" + uploadElem, checkedKey: 'id', searchType: 'more', searchList: [ {searchKey: 'title', searchPlaceholder: '请输入文件名'}, ], table: { url: admin.url('ajax/getUploadFiles'), cols: [[ {type: selectCheck}, {field: 'id', title: 'ID'}, {field: 'url', minWidth: 80, search: false, title: '图片信息', imageHeight: 40, align: "center", templet: admin.table.image}, {field: 'original_name', width: 150, title: '文件原名', align: "center"}, {field: 'mime_type', width: 120, title: 'mime类型', align: "center"}, {field: 'create_time', width: 200, title: '创建时间', align: "center", search: 'range'}, ]] }, done: function (e, data) { var urlArray = []; $.each(data.data, function (index, val) { urlArray.push(val.url) }); var url = urlArray.join(uploadSign); admin.msg.success('选择成功', function () { $(elem).val(url); $(elem).trigger("input"); }); } }) }); } }, editor: function () { CKEDITOR.tools.setCookie('ckCsrfToken', window.CONFIG.CSRF_TOKEN); var editorList = document.querySelectorAll(".editor"); if (editorList.length > 0) { $.each(editorList, function (i, v) { CKEDITOR.replace( $(this).attr("name"), { height: $(this).height(), filebrowserImageUploadUrl: admin.url('ajax/uploadEditor'), }); }); } }, select: function () { var selectList = document.querySelectorAll("[data-select]"); $.each(selectList, function (i, v) { var url = $(this).attr('data-select'), selectFields = $(this).attr('data-fields'), value = $(this).attr('data-value'), that = this, html = ''; var fields = selectFields.replace(/\s/g, "").split(','); if (fields.length !== 2) { return admin.msg.error('下拉选择字段有误'); } admin.request.get( { url: url, data: { selectFields: selectFields }, }, function (res) { var list = res.data; list.forEach(val => { var key = val[fields[0]]; if (value !== undefined && key.toString() === value) { html += ''; } else { html += ''; } }); $(that).html(html); form.render(); } ); }); }, date: function () { var dateList = document.querySelectorAll("[data-date]"); if (dateList.length > 0) { $.each(dateList, function (i, v) { var format = $(this).attr('data-date'), type = $(this).attr('data-date-type'), range = $(this).attr('data-date-range'); if(type === undefined || type === '' || type ===null){ type = 'datetime'; } var options = { elem: this, type: type, }; if (format !== undefined && format !== '' && format !== null) { options['format'] = format; } if (range !== undefined) { if(range === null || range === ''){ range = '-'; } options['range'] = range; } laydate.render(options); }); } }, }, }; return admin; });