(function () { var admin = window.UA_ADMIN; var form = window.UA_CORE.form, layer = window.UA_CORE.layer, upload = window.UA_CORE.upload, laydate = window.UA_CORE.laydate; var { init, extGroup } = window.UA_SHARED; const { createEditor, createToolbar } = window.wangEditor; admin.api = { button: function () { $('button[target="_blank"]').click(function () { window.open(admin.url($(this).attr('href'))); }); }, closeCurrentOpen: function (option) { option = option || {}; option.backHref = option.backHref || ''; option.refreshTable = option.refreshTable || false; option.refreshFrame = option.refreshFrame || false; option.onClose = option.onClose || function () { }; if (option.refreshTable === true) { option.refreshTable = init.tableRenderId; } var backWindow = window.parent; if (option.backHref) { // 标签打开页面,需要返回上一个标签刷新的情况 backWindow = admin.findPageId(option.backHref); if (backWindow) { backWindow.layui.table.reloadData(option.refreshTable); } else { admin.findIndexPage(function (w) { var menu = w.miniTab.searchMenu(option.backHref); var title = option.backHref; if (menu) { title = menu.title; } w.miniTab.create({ tabId: option.backHref, href: option.backHref, title: title, }); }); } admin.findIndexPage(function (w) { w.layui.element.tabDelete('layuiminiTab', admin.getCurrentPageId()); w.layui.element.tabChange('layuiminiTab', option.backHref); }); return; } // 弹框保存后刷新的情况 var index = parent.layer.getFrameIndex(window.name); backWindow.layer.close(index, option.onClose); if (option.refreshTable !== false) { backWindow.layui.table.reloadData(option.refreshTable); } if (option.refreshFrame) { backWindow.location.reload(); } return false; }, refreshFrame: function () { parent.location.reload(); return false; }, refreshTable: function (tableName, mode) { tableName = tableName || 'currentTableRenderId'; if (mode == 'table') { table.reload(tableName); } else { table.reloadData(tableName); } }, // var options = { // url :'system.menu/index?id=1' // } // ua.api.reloadTable('currentTableRenderId',options) reloadTable: function (tableName, options, mode) { tableName = tableName || 'currentTableRenderId'; if (mode == 'table') { table.reload(tableName, options); } else { table.reloadData(tableName, options); } }, 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, complete) { 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'), close = $(this).attr('data-close'), url = $(this).attr('lay-submit'); // 表格搜索不做自动提交 if (type === 'tableSearch') { return false; } // 判断是否需要刷新表格 if (refresh === 'false') { refresh = false; } else { refresh = true; } if (close === 'false') { close = false; } else { close = 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 btnElem = data.elem; var form = $(this).closest('form'); if ($(form).hasClass('loading')) return false; $(form).addClass('loading'); // 判断btn是否具备name和value属性,如果有,则加到表单数据里 var btnName = $(btnElem).attr('name'); var btnValue = $(btnElem).attr('value'); var backHref = $(btnElem).attr('data-back-href'); if (btnName !== undefined && btnValue !== undefined) { data.field[btnName] = btnValue; } if (!backHref) { backHref = admin.getQueryVariable('backTagId'); } var dataField = data.field; dataField = admin.api.formSubmitEditor(dataField, v); dataField = admin.api.formSubmitCity(dataField, v); if (typeof preposeCallback === 'function') { dataField = preposeCallback(dataField); } complete = complete || function () { $(form).removeClass('loading'); }; if (ok) { var originalOk = ok; ok = function (res) { originalOk(res); complete(); }; } else { ok = function (res) { res.msg = res.msg || ''; admin.msg.success(res.msg, function () { if (close) { admin.api.closeCurrentOpen({ refreshTable: refresh, backHref: backHref, onClose: function () { complete(); } }); } }); return false; }; } admin.request.post({ url: url, data: dataField, }, ok, no, ex, complete); return false; }); }); } }, formSubmitEditor(dataField, form) { return dataField; }, formSubmitCity(dataField, form) { var cityList = $(form).closest('.layui-form').find('[data-toggle="city-picker"]'); if (cityList.length > 0) { $.each(cityList, function (i, v) { var fieldName = $(v).attr('name'); var code = $(v).data('citypicker').getCode(); var text = $(v).data('citypicker').getVal(); var level = $(v).data('level'); var formatTargetList = {}; formatTargetList['name'] = 1; formatTargetList['code'] = 1; formatTargetList['name-province'] = 1; formatTargetList['name-city'] = 1; formatTargetList['name-district'] = 1; formatTargetList['code-province'] = 1; formatTargetList['code-city'] = 1; formatTargetList['code-district'] = 1; $.each(formatTargetList, function (targetType, value) { var valueSet = $(v).data('field-' + targetType); if (valueSet == 0) { formatTargetList[targetType] = 0; } }); var codeArr = code.split('/'); var textArr = text.split('/'); if (formatTargetList['name'] == 1) { dataField[fieldName] = text; } if (formatTargetList['code'] == 1) { dataField[fieldName + '_code'] = code; } if (formatTargetList['name-province'] == 1) { dataField[fieldName + '_name_province'] = textArr[0] || ''; } if (formatTargetList['name-city'] == 1) { dataField[fieldName + '_name_city'] = textArr[1] || ''; } if (formatTargetList['name-district'] == 1) { dataField[fieldName + '_name_district'] = textArr[2] || ''; } if (formatTargetList['code-province'] == 1) { dataField[fieldName + '_code_province'] = codeArr[0] || ''; } if (formatTargetList['code-city'] == 1) { dataField[fieldName + '_code_city'] = codeArr[1] || ''; } if (formatTargetList['code-district'] == 1) { dataField[fieldName + '_code_district'] = codeArr[2] || ''; } }); } return dataField; }, 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'), 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') || '', uploadDisablePreview = $(this).attr('data-upload-disable-preview') || '0', uploadFilenameField = $(this).attr('data-upload-filename-field') || '', elem = "input[name='" + uploadName + "']", uploadElem = this; if (uploadFilenameField) { var elemFilenameField = "[name='" + uploadFilenameField + "']"; } if (uploadExts == '*') { uploadExts = init.uploadExts; } else if (uploadExts.charAt(0) == '*') { var extGroupName = uploadExts.slice(1); if (extGroup[extGroupName]) { uploadExts = extGroup[extGroupName].join('|'); } } // 监听上传事件 upload.render({ elem: this, url: admin.url(init.uploadUrl), exts: uploadExts, accept: uploadAccept,//指定允许上传时校验的文件类型 acceptMime: uploadAcceptMime,//规定打开文件选择框时,筛选出的文件类型 multiple: uploadNumber !== 'one',//是否多文件上传 headers: admin.headers(), done: function (res) { if (res.code === 0) { var url = res.data.url; var filename = res.data.original_name; if (uploadNumber !== 'one') { var oldUrl = $(elem).val(); if (oldUrl !== '') { url = oldUrl + uploadSign + url; } if (elemFilenameField) { var oldFilename = $(elemFilenameField).val(); if (oldFilename !== '') { filename = oldFilename + uploadSign + filename; } } } if (elemFilenameField) { $(elemFilenameField).val(filename); } $(elem).val(url); $(elem).trigger("input"); admin.msg.success(res.msg); } else { admin.msg.error(res.msg); } return false; } }); if (uploadDisablePreview == 0) { // 监听上传input值变化 $(elem).bind("input propertychange", function (event) { var urlString = $(this).val(), urlArray = urlString.split(uploadSign), uploadIcon = $(uploadElem).attr('data-upload-icon') || "file"; var uploadNameKey = uploadName.replace(/\[/g, "-").replace(/\]/g, "-"); $('#bing-' + uploadNameKey).remove(); if (urlString.length > 0) { var parant = $(this).parent('div'); var liHtml = ''; var filenameArray = []; if (uploadFilenameField) { var filenameVal = $(elemFilenameField).val() || ''; if (filenameVal) { filenameArray = filenameVal.split(uploadSign); } } $.each(urlArray, function (i, v) { // 获取链接扩展名 var ext = v.substr(v.lastIndexOf('.') + 1); var currentFilename = filenameArray[i] || ''; currentFilename = currentFilename.replace(/"/g, '"'); if (extGroup.image.indexOf(ext) != -1) { // 是图片 liHtml += '
  • ×
  • \n'; } else { // 不是图片 // 遍历extGroup数组找到扩展名所在的索引 uploadIcon = admin.getExtGroupName(ext); liHtml += '
  • ×
  • \n'; } }); parant.after(''); var initSortable = function () { var el = document.getElementById('bing-' + uploadNameKey); if (el) { new Sortable(el, { animation: 150, onEnd: function (evt) { var newUrls = []; var newFilenames = []; $(el).find('.uploads-delete-tip').each(function () { newUrls.push($(this).attr('data-upload-url')); newFilenames.push($(this).attr('data-upload-filename')); }); $(elem).val(newUrls.join(uploadSign)); if (uploadFilenameField) { $(elemFilenameField).val(newFilenames.join(uploadSign)); } $(elem).trigger("input"); } }); } }; initSortable(); } }); // 非空初始化图片显示 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'), uploadFilenameField = $(this).attr('data-upload-filename-field'), sign = $(this).attr('data-upload-sign'); var confirm = admin.msg.confirm('确定删除?', function () { var elem = "input[name='" + uploadName + "']"; var elemFilenameField = "[name='" + uploadFilenameField + "']"; var currentUrl = $(elem).val(); var currentFilename = $(elemFilenameField).val(); var currentUrlList = currentUrl.split(sign); var deleteIndex = currentUrlList.indexOf(deleteUrl); currentUrlList.splice(deleteIndex, 1); $(elem).val(currentUrlList.join(sign)); $(elem).trigger("input"); if (currentFilename) { var currentFilenameList = currentFilename.split(sign); currentFilenameList.splice(deleteIndex, 1); $(elemFilenameField).val(currentFilenameList.join(sign)); } 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') || '|', uploadFilenameField = $(this).attr('data-upload-filename-field') || ''; if (uploadFilenameField) { var elemFilenameField = "[name='" + uploadFilenameField + "']"; var elemFilename = $(elemFilenameField); } var selectCheck = uploadNumber === 'one' ? 'radio' : 'checkbox'; var elem = "input[name='" + uploadName + "']"; var width = document.body.clientWidth, height = document.body.clientHeight; if (width >= 800 && height >= 600) { clienWidth = '800px'; clientHeight = '600px'; } else { clienWidth = '100%'; clientHeight = '100%'; } $(v).click(function () { layer.open({ title: '选择文件', type: 2, area: [clienWidth, clientHeight], content: admin.url('system.uploadfile/index') + '?select_mode=' + selectCheck, success(layero, index) { window.onTableDataConfirm = function (data) { var currentUrl = $(elem).val(); var urlArray = currentUrl.split(uploadSign); if (currentUrl.length == 0 || selectCheck == 'radio') { urlArray = []; } if (uploadFilenameField) { var currentFilename = $(elemFilename).val(); var filenameArray = currentFilename.split(uploadSign); if (currentFilename.length == 0 || selectCheck == 'radio') { filenameArray = []; } } $.each(data, function (index, val) { if (urlArray.indexOf(val.url) == -1) { urlArray.push(val.url); } if (uploadFilenameField) { if (filenameArray.indexOf(val.original_name) == -1) { filenameArray.push(val.original_name); } } }); var url = urlArray.join(uploadSign); if (uploadFilenameField) { var filename = filenameArray.join(uploadSign); } $(elem).val(url); if (uploadFilenameField) { $(elemFilenameField).val(filename); } $(elem).trigger("input"); layer.close(index); admin.msg.success('选择成功'); }; } }); }); }); } }, editor: function () { var editorList = document.querySelectorAll(".editor"); if (editorList.length > 0) { $.each(editorList, function (i, v) { var editorConfig = { placeholder: '请输入内容', onChange(editor) { const html = editor.getHtml(); $(v).val(html); }, MENU_CONF: { uploadImage: { server: admin.url('ajax/uploadEditor'), maxFileSize: 10 * 1024 * 1024, fieldName: 'upload', }, } }; var formName = $(this).attr('name'); var editorId = 'editor-' + formName.replace(/\[/g, '-').replace(/\]/g, '-'); var editorContainer = $('
    '); $(this).after(editorContainer); var toolbarId = 'toolbar-' + formName.replace(/\[/g, '-').replace(/\]/g, '-'); var toolbarContent = $('
    '); $(this).after(toolbarContent); $(this).hide(); var originalValue = $(this).val(); const editor = createEditor({ selector: '#' + editorId, html: originalValue, config: editorConfig, mode: 'default', scroll: true }); $(v).data('editor', editor); const toolbarConfig = { excludeKeys: [ 'uploadVideo', 'fullScreen', 'todo', ] }; const toolbar = createToolbar({ editor, selector: '#' + toolbarId, config: toolbarConfig, mode: 'default', // or 'simple' }); }); } }, 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 template = $(that).data('template'); if (typeof template != 'function') { template = function (data, fields) { return data[fields[1]]; }; } 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]]; var valueTitle = template(val, fields); if (value !== undefined && key.toString() === value) { html += ''; } else { html += ''; } }); $(that).html(html); form.render(); } ); }); }, nativeRadio() { $('[value-checked]').each(function (index, elem) { if ($(this).hasClass('checked-rendered')) { return; } $(this).addClass('checked-rendered'); if ($(this).attr('value') == $(this).attr('value-checked')) { $(this).prop('checked', true); } }); }, nativeSelect() { $('[value-selected]').each(function (index, elem) { if ($(this).hasClass('selected-rendered')) { return; } $(this).addClass('selected-rendered'); if ($(this).attr('value') == $(this).attr('value-selected')) { $(this).prop('selected', true); } }); }, 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); }); } }, tableData() { var tableList = document.querySelectorAll('[data-toggle="table-data"]'); $.each(tableList, function (i, v) { var data = $(v).data(); tableData.render(v, data, admin); }); }, mapLocation() { var mapList = document.querySelectorAll('[data-toggle="map-location"]'); $.each(mapList, function (i, v) { if ($(v).hasClass('map-rendered')) { return; } $(v).addClass('map-rendered'); var data = $(v).data(); mapLocation.render(v, data, admin); }); }, tagInput() { var list = document.querySelectorAll('[data-toggle="tag-input"]'); $.each(list, function (i, v) { var data = $(v).data(); tagInput.render(v, data, admin); }); }, propertyInput() { var list = document.querySelectorAll('[data-toggle="property-input"]'); $.each(list, function (i, v) { var data = $(v).data(); data.value = $(v).text(); propertyInput.render(v, data, admin); }); }, copyText(elem) { if (elem == undefined) { elem = 'body'; } var list = $(elem).find('[data-toggle="copy-text"]'); $.each(list, function (i, v) { if ($(v).hasClass('copy-rendered')) { return; } $(v).addClass('copy-rendered'); var clipboard = new ClipboardJS(v); clipboard.on('success', function (e) { admin.msg.success('复制成功'); }); clipboard.on('error', function (e) { admin.msg.error('复制失败'); }); }); }, pasteText(elem) { if (elem == undefined) { elem = 'body'; } var list = $(elem).find('[data-toggle="paste-text"]'); $.each(list, function (i, v) { if ($(v).hasClass('paste-rendered')) { return; } $(v).addClass('paste-rendered'); var targetElemName = $(v).data('paste-target'); $(v).on('click', function () { if (!navigator.clipboard) { admin.msg.error('您的当前不支持粘贴操作'); return; } navigator.clipboard.readText() .then(text => { $(targetElemName).val(text); layer.msg('粘贴成功'); }) .catch(err => { console.error('Failed to read clipboard contents: ', err); layer.msg('粘贴失败,请手动粘贴'); }); }); }); } }; })();