function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } (function ($, undefined) { var pluginName = 'agDropdownCellEditor', dataKey = 'ag.dropdown.celleditor'; var defaults = { maxHeight: 200 }; // Utility functions var keys = { ESC: 27, TAB: 9, RETURN: 13, LEFT: 37, UP: 38, RIGHT: 39, DOWN: 40, ENTER: 13, SHIFT: 16 }; /** * Constructor * @param {[Node]} element [Select element] * @param {[Object]} options [Option object] */ var Plugin = function Plugin(input, options) { this.grid = options.grid; this.config = options.config; this.items = options.data.items; this.selected = options.data.selected; this.hook = options.hook; this.arrow = options.arrow || 'icon-search'; this.name = options.name; this.onSelect = options.select || function () {}; this.$input = $(input); // Settings this.settings = $.extend({}, defaults, options); // Initialize this.init(); $.fn[pluginName].instances.push(this); }; $.extend(Plugin.prototype, { init: function init() { // Construct the comboselect this._construct(); // Add event bindings this._events(); }, _construct: function _construct() { var me = this; // Wrap the Select this.$container = $('
'); // Append dropdown arrow this.$arrow = $('
'); // Append dropdown this.$dropdown = $('
'; }; OptionCellRenderer.prototype.getGui = function () { return this.eGui; }; function HtmlCellRenderer() {} HtmlCellRenderer.prototype.init = function (params) { this.eGui = document.createElement('span'); this.eGui.innerHTML = params.value || ''; }; HtmlCellRenderer.prototype.getGui = function () { return this.eGui; }; function ActionCellRenderer() {} ActionCellRenderer.prototype.init = function (params) { var gridOptions = params.api.gridCore.gridOptions; if (params.node.rowPinned) { return; } if (params.data == undefined) { return; } var data = params.data; var links = ''; if (data.master_id > 0) { params.colDef.options.forEach(function (action) { if (action.display) { var html = '' + action.name + ''; links += gridOptions.actionCellBeforeRender(html, action, data) || ''; } }); } this.eGui = document.createElement('span'); this.eGui.innerHTML = links; }; ActionCellRenderer.prototype.getGui = function () { return this.eGui; }; function SelectCellEditor() {} SelectCellEditor.prototype.init = function (params) { this.grid = params; this.selectedKey = null; this.items = params.colDef.cellEditorParams.values; this.eInput = document.createElement('input'); this.eInput.value = params.value || ''; this.eInput.className = 'ag-cell-edit-input form-control'; }; SelectCellEditor.prototype.getGui = function (params) { return this.eInput; }; SelectCellEditor.prototype.afterGuiAttached = function () { var me = this; var grid = me.grid; var oValue = me.eInput.value; // 初始化编辑器 $(me.eInput).agDropdownCellEditor({ grid: me, arrow: 'fa-caret-down', data: { items: me.items, selected: grid.data[grid.select_key] }, select: function select(item) { if (item) { grid.data[grid.select_key] = item.id; me.eInput.value = item.name; me.selectedKey = item.id; } else { me.eInput.value = oValue; } grid.stopEditing(); } }); me.eInput.focus(); me.eInput.select(); }; SelectCellEditor.prototype.getValue = function () { return this.eInput.value; }; SelectCellEditor.prototype.destroy = function () { $('body').find('.combo-select').remove(); }; function CheckboxCellRenderer() {} CheckboxCellRenderer.prototype.init = function (params) { var value = params.value; var values = params.colDef.cellEditorParams.values; this.eGui = document.createElement('div'); this.eGui.innerHTML = values[value] || values[0]; }; CheckboxCellRenderer.prototype.getGui = function () { return this.eGui; }; function CheckboxCellEditor() {} CheckboxCellEditor.prototype.init = function (params) { var value = params.value; this.eInput = document.createElement('input'); this.eInput.type = 'checkbox'; this.eInput.checked = value; this.eInput.value = value; }; CheckboxCellEditor.prototype.getGui = function (params) { return this.eInput; }; CheckboxCellEditor.prototype.afterGuiAttached = function () { var me = this; me.eInput.focus(); me.eInput.select(); }; CheckboxCellEditor.prototype.getValue = function () { return this.eInput.checked ? 1 : 0; }; CheckboxCellEditor.prototype.destroy = function () {}; function DialogCellEditor() {} DialogCellEditor.prototype.init = function (params) { this.params = params; this.eInput = document.createElement('div'); this.eInput.tabIndex = '-1'; var key = params.colDef.field + '_' + params.data.id; var query = params.query; query.multi = 1; query.is_grid = 1; query.url = params.url; query.grid_id = params.data.id; query.title = params.title; var url = ''; $.each(query, function (k, v) { url += ' data-' + k + '="' + v + '"'; }); this.query = query; this.eInput.innerHTML = ''; this.eInput.className = 'ag-input-wrapper ag-input-dialog-wrapper'; }; DialogCellEditor.prototype.getGui = function (params) { return this.eInput; }; DialogCellEditor.prototype.afterGuiAttached = function () { var me = this; $(me.eInput).find('input').gdooSuggest({ item: me.params.data, query: me.query }).on('onSelect', function (e, item) { me.params.data[me.query.name] = item[me.query.name]; me.eInput.querySelector('input').value = item[me.query.name]; }); me.eInput.querySelector('input').select(); }; DialogCellEditor.prototype.getValue = function () { return this.params.data[this.params.query.name]; }; DialogCellEditor.prototype.destroy = function () { var me = this; $(me.eInput).find('input').off(); }; DialogCellEditor.prototype.isPopup = function () { return false; }; function DateCellEditor() {} DateCellEditor.prototype.init = function (params) { this.params = params.colDef.cellEditorParams; this.eInput = document.createElement('div'); this.eInput.innerHTML = ''; this.eInput.className = 'ag-input-wrapper ag-input-date-wrapper'; }; DateCellEditor.prototype.getGui = function (params) { return this.eInput; }; DateCellEditor.prototype.afterGuiAttached = function () { this.eInput.querySelector('input').click(); }; DateCellEditor.prototype.getValue = function () { return this.eInput.querySelector('input').value; }; DateCellEditor.prototype.destroy = function () {}; function agGridOptions() { // 定义ag-grid默认参数 var gridOptions = { defaultColDef: { minWidth: 100, enableRowGroup: true, enablePivot: true, enableValue: true, sortable: true, resizable: true, filter: true, comparator: function comparator(a, b) { if (this.cellRenderer == 'htmlCellRenderer') { a = delHtmlTag(a); b = delHtmlTag(b); return a.localeCompare(b); } return typeof a === 'string' ? a.localeCompare(b) : a > b ? 1 : a < b ? -1 : 0; } }, pinnedBottomRowData: [], rowDragManaged: true, suppressRowClickSelection: true, rowMultiSelectWithClick: false, rowSelection: 'multiple', localeText: localeText, suppressAnimationFrame: true, suppressContextMenu: true, // 关闭参数检查 suppressPropertyNamesCheck: true, suppressCellSelection: true, enableCellTextSelection: true, // 自定义后端数据地址 remoteDataUrl: '', remoteParams: {}, dialogList: {}, editableList: {}, autoColumnsToFit: true, lastEditCell: {}, selectedRows: [], pager: false, pagerDom: null, pagePer: 50, // 格式化数字时候默认值是否强行为空 numberEmptyDefaultValue: false, pageList: [50, 100, 500, 1000, 2000, 5000, 10000, 20000, 50000], onCellEditingStarted: function onCellEditingStarted(params) { this.lastEditCell = params; }, remoteBeforeSuccess: function remoteBeforeSuccess() {}, remoteAfterSuccess: function remoteAfterSuccess() {}, onGridSizeChanged: function onGridSizeChanged() {}, onGridReady: function onGridReady() {}, onFirstDataRendered: function onFirstDataRendered(params) { var me = this; var api = me.api; if (me.autoColumnsToFit) { api.sizeColumnsToFit(); } if (typeof me.onCustomFirstDataRendered == "function") { me.onCustomFirstDataRendered.call(me, params); } // 计算合计行 me.generatePinnedBottomData(); }, onCellValueChanged: function onCellValueChanged(params) { this.generatePinnedBottomData(); }, getRowStyle: function getRowStyle(params) {}, onRowClicked: function onRowClicked(params) { var selected = params.node.isSelected(); if (selected === false) { params.node.setSelected(true, true); } }, getSelectedRows: function getSelectedRows() { return this.selectedRows; }, onRowSelected: function onRowSelected(params) { var me = this; var node = params.node; if (node.selected) { me.selectedRows.push(node.data); } else { for (var _i2 = 0; _i2 < me.selectedRows.length; _i2++) { var select = me.selectedRows[_i2]; if (node.data.id == select.id) { me.selectedRows.splice(_i2, 1); } } } }, columnTypes: { number: { cellClass: 'ag-cell-number', valueFormatter: function valueFormatter(params) { var me = this; if (params.node.rowPinned) { if (params.colDef.calcFooter) {} else { return ''; } } var options = params.colDef.numberOptions || {}; var places = options.places == undefined ? 2 : options.places; var separator = options.separator == undefined ? '.' : options.separator; var thousands = options.thousands == undefined ? ',' : options.thousands; var defaultValue = options["default"] == undefined ? 0 : options["default"]; var value = parseFloat(params.value); if (isNaN(value) || value == 0) { return gridOptions.numberEmptyDefaultValue == false ? defaultValue : ''; } value = number_format(value, places, separator, thousands); return value; }, valueParser: function valueParser(params) { var value = parseFloat(params.newValue); if (isNaN(value)) { return 0; } return value; } }, sn: { cellClass: 'ag-cell-sn', valueFormatter: function valueFormatter(params) { if (params.node.rowPinned) { return ''; } return parseInt(params.node.childIndex) + 1; }, valueParser: function valueParser(params) { return parseFloat(params.newValue); } }, datetime: { cellClass: 'ag-cell-datetime', valueFormatter: function valueFormatter(params) { if (params.node.rowPinned) { return ''; } return format_datetime(params.value); }, valueParser: function valueParser(params) { return parseFloat(params.newValue); } }, date: { cellClass: 'ag-cell-date', valueFormatter: function valueFormatter(params) { if (params.node.rowPinned) { return ''; } return format_date(params.value); }, valueParser: function valueParser(params) { return parseFloat(params.newValue); } } }, components: { 'optionCellRenderer': OptionCellRenderer, 'actionCellRenderer': ActionCellRenderer, 'htmlCellRenderer': HtmlCellRenderer, 'selectCellEditor': SelectCellEditor, 'dialogCellEditor': DialogCellEditor, 'dateCellEditor': DateCellEditor, 'checkboxCellEditor': CheckboxCellEditor, 'checkboxCellRenderer': CheckboxCellRenderer }, overlayLoadingTemplate: '数据加载中...', overlayNoRowsTemplate: '
暂无数据
暂无数据
' }; gridOptions.generatePinnedBottomData = function () { var me = this; var result = {}; var renderer = false; var columns = gridOptions.columnApi.getAllGridColumns(); columns.forEach(function (item) { if (item.colDef.calcFooter) { renderer = true; result[item.colId] = me.calculatePinnedBottomData(item); } }); if (renderer) { me.api.setPinnedBottomRowData([result]); } }; gridOptions.calculatePinnedBottomData = function (item) { var value = 0; gridOptions.api.forEachNode(function (row) { value += toNumber(row.data[item.colId]); }); return value == 0 ? '' : value; }; // 格式化行按钮 gridOptions.actionCellBeforeRender = function (html, action, data) { return html; }; gridOptions.remoteData = function (params, success) { var me = this; var remoteParams = gridOptions.remoteParams; for (var _key in params) { remoteParams[_key] = params[_key]; } gridOptions.api.showLoadingOverlay(); $.post(gridOptions.remoteDataUrl, remoteParams, function (res) { gridOptions.remoteBeforeSuccess.call(gridOptions, res); if (typeof success === 'function') { success(res); } if (res.per_page) { if (me.pagerDom === null) { var div = me.api.gridCore.eGridDiv; var pageId = div.id + '-pager'; $(div).after('
'); me.pagerDom = $('#' + pageId).Paging({ pagesize: res.per_page, count: res.total, current: res.current_page, pageSizeList: [50, 100, 500, 1000, 2000, 5000, 10000, 20000, 50000], callback: function callback(page, size, count) { me.remoteData2({ page: page, limit: size }); } }); } else { me.pagerDom[0].render({ pagesize: res.per_page, count: res.total, current: res.current_page }); } } gridOptions.api.hideOverlay(); gridOptions.api.setRowData(res.data); gridOptions.generatePinnedBottomData(); gridOptions.remoteAfterSuccess.call(gridOptions, res); }, 'json'); }; gridOptions.remoteData2 = function (params, success) { var me = this; var remoteParams = gridOptions.remoteParams; for (var _key2 in params) { remoteParams[_key2] = params[_key2]; } gridOptions.api.showLoadingOverlay(); $.post(gridOptions.remoteDataUrl, remoteParams, function (res) { gridOptions.remoteBeforeSuccess.call(gridOptions, res); if (typeof success === 'function') { success(res); } gridOptions.api.hideOverlay(); gridOptions.api.setRowData(res.data); gridOptions.generatePinnedBottomData(); gridOptions.remoteAfterSuccess.call(gridOptions, res); }, 'json'); }; return gridOptions; } window.agGridOptions = agGridOptions; })(window, jQuery); (function ($) { var GdooEvent = function GdooEvent(args) { var me = this; me.args = args; me.trigger = function (fun) { if (typeof me.args[fun] == 'function') { var args = []; for (var i = 1; i < arguments.length; i++) { args.push(arguments[i]); } return me.args[fun].apply(me, args); } }; me.exist = function (fun) { if (typeof me.args[fun] == 'function') { return true; } return false; }; }; var gdoo = { formKey: function formKey(params) { if (params.form_id) { var key = params.form_id + '.' + params.id; var id = params.form_id + '_' + params.id; var name = params.form_id + '_' + params.name; } else { var key = params.id; var id = params.id; var name = params.name; } return { id: id, key: key, name: name }; }, widgets: {}, forms: {}, dialogs: {}, grids: {}, event: { events: {}, set: function set(tag, fun) { this.events[tag] = new GdooEvent(fun); }, get: function get(tag) { return this.events[tag] || new GdooEvent({}); } } }; /** * 对话框初始化 */ gdoo.dialogInit = function (params, grid) { var option = gdoo.formKey(params); var event = gdoo.event.get(option.key); event.trigger('query', params); // 键盘按下和弹起事件 var ctrlNotActive = true; document.onkeydown = function (event) { event = event || window.event; if (event.keyCode == 17) { ctrlNotActive = false; } }; document.onkeyup = function (event) { event = event || window.event; if (event.keyCode == 17) { ctrlNotActive = true; } }; var multiple = params.multi == 0 ? false : true; // 点击行不勾选 grid.suppressRowClickSelection = true; // 多选还是单选 grid.rowSelection = multiple ? 'multiple' : 'single'; grid.multiple = multiple; grid.onRowClicked = function (row) { var selected = row.node.isSelected(); if (multiple) { if (selected === false) { row.node.setSelected(true, ctrlNotActive); } if (selected === true && ctrlNotActive === false) { row.node.setSelected(false, false); } } else { if (selected === false) { row.node.setSelected(true, true); } } }; grid.onRowSelected = function (row) { if (params.is_grid) {} else { var sid = params.prefix == 1 ? 'sid' : 'id'; var res = dialogCacheSelected[option.id]; if (row.node.isSelected()) { res[row.data[sid]] = row.data.name; } else { delete res[row.data[sid]]; } dialogCacheSelected[option.id] = res; } }; grid.onRowDoubleClicked = function () { var ret = gdoo.dialogSelected(event, params, option, grid); if (ret == true) { $('#gdoo-dialog-' + params.dialog_index).dialog('close'); } }; // 数据加载后执行 grid.remoteAfterSuccess = function () { gdoo.dialogInitSelected(params, option, grid); }; gdoo.dialogs[option.id] = grid; return option; }; /** * 对话框字段写入选中 */ gdoo.dialogSelected = function (event, params, option, grid) { var rows = grid.api.getSelectedRows(); if (params.is_grid) { var list = gdoo.forms[params.form_id]; list.api.dialogSelected(params, rows); } else { var sid = params.prefix == 1 ? 'sid' : 'id'; var multiple = params.multi == 0 ? false : true; var doc = getIframeDocument(params.iframe_id); if (doc) { var $option_id = $('#' + option.id, doc); var $option_text = $('#' + option.id + '_text', doc); } else { var $option_id = $('#' + option.id); var $option_text = $('#' + option.id + '_text'); } var res = dialogCacheSelected[option.id] || {}; $.each(rows, function (k, row) { res[row[sid]] = row.name; }); $option_id.val(Object.keys(res).join(',')); $option_text.val(Object.values(res).join(',')); if (event.exist('onSelect')) { return event.trigger('onSelect', multiple ? rows : rows[0]); } } return true; }; /** * 初始化选择 */ gdoo.dialogInitSelected = function (params, option, grid) { if (params.is_grid) {} else { var sid = params.prefix == 1 ? 'sid' : 'id'; var doc = getIframeDocument(params.iframe_id); if (doc) { var $option_id = $('#' + option.id, doc); var $option_text = $('#' + option.id + '_text', doc); } else { var $option_id = $('#' + option.id); var $option_text = $('#' + option.id + '_text'); } if (params.is_org) { var res = dialogCacheSelected[option.id]; } else { var id = $option_id.val(); var text = $option_text.val(); var res = {}; if (id) { var ids = id.split(','); var texts = text.split(','); for (var i = 0; i < ids.length; i++) { res[ids[i]] = texts[i]; } } dialogCacheSelected[option.id] = res; } grid.api.forEachNode(function (node) { var key = node.data[sid]; if (res[key] != undefined) { node.setSelected(true); } }); } }; /** * grid列表显示构建 * @param {*} table */ gdoo.grid = function (table) { var root = this; this.table = table; this.grid = new agGridOptions(); this.header = Vue.reactive({ init: false, name: '', master_table: '', access: {}, create_btn: false, trash_btn: false, simple_search_form: true, right_buttons: [], left_buttons: [], buttons: [], tabs: { items: [], active: '' }, search_form: { columns: [] }, bys: { name: '全部', items: [] } }); this.search = { simple: { el: null, query: {} }, advanced: { el: null, query: {} } }; this.action = new gridAction(); // 默认不自动计算栏目宽度 this.grid.autoColumnsToFit = false; // 默认点击行触发 this.grid.onRowDoubleClicked = function (params) { if (params.node.rowPinned) { return; } if (params.data == undefined) { return; } if (params.data.master_id > 0) { if (root.action.rowDoubleClick) { root.action.rowDoubleClick(params.data); } } }; this.div = function (height) { var gridDiv = document.querySelector("#" + this.table + "-grid"); // 因为panel高度根据页面原素高度不一致,这里设置修正值 gridDiv.style.height = this.getPanelHeight(height); new agGrid.Grid(gridDiv, this.grid); // 绑定自定义事件 $(gridDiv).on('click', '[data-toggle="event"]', function () { var data = $(this).data(); if (data.master_id > 0) { root.action[data.action](data); } }); return gridDiv; }; /** * 获取panel计算整体窗口高度 */ this.getPanelHeight = function (v) { var list = $('.gdoo-list-grid').position(); var position = list.top + v + 'px'; return 'calc(100vh - ' + position + ')'; }; this.init = function (res) { var me = this; if (me.header.init == false) { var header = res.header; me.header.init = true; me.header.create_btn = header.create_btn; me.header.trash_btn = header.trash_btn; me.header.name = header.name; me.header.table = table; // 搜索 var search_form = header.search_form; search_form.simple_search = header.simple_search_form; me.header.search_form = search_form; me.search.forms = search_form.forms; // 操作 me.action.table = table; me.action.name = header.master_name; me.action.bill_url = header.bill_uri; // access if (header.access) { me.header.access = header.access; } // 按钮 if (header.right_buttons) { me.header.right_buttons = header.right_buttons; } if (header.left_buttons) { me.header.left_buttons = header.left_buttons; } if (header.buttons) { me.header.center_buttons = header.buttons; } // bys if (header.bys) { me.header.bys = header.bys; if (search_form.params['by']) { me.header.bys.active = search_form.params['by']; for (var _i3 = 0; _i3 < header.bys.items.length; _i3++) { var item = header.bys.items[_i3]; if (item.value == me.header.bys.active) { me.header.bys.name = item.name; } } } else { me.header.bys.active = header.bys.items[0].value; me.header.bys.name = header.bys.items[0].name; } } // tabs if (header.tabs) { me.header.tabs = header.tabs; me.header.tabs.active = search_form.params['tab'] ? search_form.params['tab'] : header.tabs.items[0].value; } // 设置栏目 me.grid.api.setColumnDefs(header.columns); me.grid.columnDefs = header.columns; me.grid.remoteParams = search_form.query; // 渲染完成显示div $('#' + table + '-page').show(); setTimeout(function () { me.searchForm(); }, 1); } }; this.searchForm = function () { var me = this; me.search.advanced.el = $('#' + me.table + '-search-form-advanced').searchForm({ data: me.search.forms, advanced: true }); me.search.simple.el = $('#' + me.table + '-search-form').searchForm({ data: me.search.forms }); me.search.simple.el.find('#search-submit').on('click', function () { var query = me.search.simple.el.serializeArray(); var params = {}; me.search.queryType = 'simple'; $.map(query, function (row) { params[row.name] = row.value; }); params['page'] = 1; me.grid.remoteData(params); return false; }); }; this.setup = { header: this.header, action: this.action, grid: this.grid }; gdoo.grids[table] = { grid: this.grid, search: this.search }; }; window.gdoo = gdoo; })(jQuery); var select2List = {}; (function ($) { $.fn.select2Field = function (options) { $this = $(this); var key = $this.attr('key'); var event = gdoo.event.get(key); var defaults = { width: '100%', placeholder: ' - ', allowClear: true, minimumInputLength: 0, // 不需要每次都获取数据 resultCache: true, ajax: { type: 'POST', url: '', dataType: 'json', delay: 250, cache: false, data: function data(params) { var query = options.ajaxParams || {}; query.q = params.term || ''; query.page = params.page || 1; query.resultCache = true; event.trigger('query', query); return query; }, processResults: function processResults(res, params) { return { results: res.data, pagination: { more: res.current_page < res.last_page } }; } }, escapeMarkup: function escapeMarkup(markup) { return markup; }, templateResult: function templateResult(m) { return m.text; }, // 函数用来渲染结果 templateSelection: function templateSelection(m) { return m.text; }, createTag: function createTag(params) { var term = $.trim(params.term); if (term === '') { return null; } return { id: 'draft_' + term, text: term }; }, initSelection: function initSelection(element, callback) { var data = { id: element.val(), text: element.text() }; callback(data); } }; options = $.extend(true, {}, defaults, options); event.trigger('init', options); var select2 = $this.select2(options); select2.on('select2:select', function (e) { event.trigger('onSelect', e.params.data); }); select2.on('select2:opening', function () {}); select2.on('select2:open', function () {//select2.select2(); /* var data = $(this).data('select2'); $('.select2-link').remove(); data.$results.parents('.select2-results') .append('') .on('click', function () { data.trigger('close'); }); */ }); return select2; }; })(jQuery); (function ($) { 'use strict'; var grid = null; /** * 默认的配置选项 * @type {Object} */ var defaultOptions = { query: {}, item: {}, data: [], delay: 300, showBtn: true, clearable: false, keyLeft: 37, keyUp: 38, keyRight: 39, keyDown: 40, keyEnter: 13 }; /** * 显示下拉列表 */ function showSuggest($input, options) { var $dropdownMenu = $('#gdoo-suggest'); if (!$dropdownMenu.is(':visible')) { $dropdownMenu.show(); $input.trigger('onShowSuggest', [options ? options.data : []]); } } /** * 隐藏下拉列表 */ function hideSuggest($input, options) { var $dropdownMenu = $('#gdoo-suggest'); if ($dropdownMenu.is(':visible')) { $dropdownMenu.hide(); $input.trigger('onHideSuggest', [options ? options.data : []]); } } /** * 刷新数据 * ajax请求携带q参数 */ function refreshData($input, options, params) { showSuggest($input, options); var event = gdoo.event.get(params.form_id + '.' + params.id); event.trigger('open', params); event.trigger('query', params); params.suggest = true; params.q = $input.val(); grid.rowSelection = params.multi == 1 ? 'multiple' : 'single'; grid.remoteDataUrl = app.url(params.url); grid.remoteParams = params; grid.remoteData(); return $input; } /** * 构建 Suggest的agGrid * 作为 fnGetData 的 callback 函数调用 */ function buildSuggest($input, options, params) { var $dropdownMenu = $('#gdoo-suggest'); $dropdownMenu.html('
'); var gridDiv = document.querySelector("#suggest-aggrid"); grid = new agGridOptions(); grid.suppressRowClickSelection = true; grid.columnDefs = [//{suppressMenu: true, cellClass:'text-center', checkboxSelection: true, headerCheckboxSelection: multiple, suppressSizeToFit: true, sortable: false, width: 40}, //{suppressMenu: true, cellClass:'text-center', sortable: false, suppressSizeToFit: true, cellRenderer: 'htmlCellRenderer', field: 'images', headerName: '图片', width: 40}, { suppressMenu: true, cellClass: 'text-center', sortable: true, field: 'code', headerName: '存货编码', width: 100 }, { suppressMenu: true, cellClass: 'text-left', sortable: true, field: 'name', headerName: '产品名称', minWidth: 140 }, { suppressMenu: true, cellClass: 'text-center', sortable: true, field: 'spec', headerName: '规格型号', width: 100 }, { suppressMenu: true, cellClass: 'text-center', sortable: true, field: 'barcode', headerName: '产品条码', width: 120 }, { suppressMenu: true, cellClass: 'text-center', sortable: true, field: 'unit_id_name', headerName: '计量单位', width: 80 }, { suppressMenu: true, cellClass: 'text-right', field: 'price', headerName: '价格', width: 80 }]; grid.onRowClicked = function (row) { var ret = grid.dialogSelected([row.data]); if (ret) { hideSuggest($input, options); } }; /** * 写入选中 */ grid.dialogSelected = function (rows) { var params = grid.remoteParams; var sid = params.prefix == 1 ? 'sid' : 'id'; var id = []; var text = []; $.each(rows, function (index, row) { id.push(row[sid]); text.push(row.name); }); var input_id = params.form_id + '_' + params.id; $('#' + input_id).val(id.join(',')); $('#' + input_id + '_text').val(text.join(',')); var event = gdoo.event.get(params.form_id + '.' + params.id); if (event.exist('onSelect')) { return event.trigger('onSelect', grid.rowSelection == 'multiple' ? rows : rows[0]); } return true; }; new agGrid.Grid(gridDiv, grid); return $input; } $.fn.gdooDialogInput = function (options) { var self = this; options = options || {}; options = $.extend(true, {}, defaultOptions, options); $('body').append(''); return self.each(function () { var $input = $(this); var params = $input.data(); var keyupTimer = null; var isMouseenter = 0; var $dropdownMenu = $('#gdoo-suggest'); buildSuggest($input, options, params); $input.off(); // 开始事件处理 $input.on('keydown', function (event) { // 当提示层显示时才对键盘事件处理 if (!$dropdownMenu.is(':visible')) { return; } if (event.keyCode === options.keyEnter) { hideSuggest($input, options); } }).on('keyup input paste', function (event) { // 如果弹起的键是回车、向上或向下方向键则返回 if (~$.inArray(event.keyCode, [options.keyDown, options.keyUp, options.keyEnter])) { $input.val($input.val()); // 让鼠标输入跳到最后 return; } clearTimeout(keyupTimer); keyupTimer = setTimeout(function () { refreshData($input, options, params); }, options.delay); }).on('focus', function () { $dropdownMenu.off(); var w = $(window).width(); var h = $(window).height(); var width = $input.outerWidth(); var height = $input.outerHeight(); var offset = $input.offset(); var dw = $dropdownMenu.outerWidth(); var dh = $dropdownMenu.outerHeight(); var css = { top: offset.top + height - 1 }; // 判断是否小于768 if (w < 768) { css.minWidth = 360; css.left = 14; css.right = 14; } else { css.left = offset.left; // 右边超出 if (w < offset.left + dw + 10) { css.left = offset.left - dw + width; } // 下边超出 if (h < offset.top + dh + 10) { css.top = offset.top - dh + 1; } } $dropdownMenu.css(css); // 列表中滑动时,输入框失去焦点 $dropdownMenu.on('mouseenter', function () { isMouseenter = 1; $input.blur(); }).on('mouseleave', function () { isMouseenter = 0; $input.focus(); }).on('click', function () { // 阻止冒泡 return false; }); }).on('blur', function () { // 隐藏对话框 if (!isMouseenter) { hideSuggest($input, options); } }); }); }; })(jQuery); (function ($) { 'use strict'; $.fn.searchForm = function (options) { var self = this; var element = []; var data = options.data; var advanced = options.advanced == 1 ? 1 : data.advanced == 1 ? 1 : 0; var form_id = self.attr('id'); var assign = false; var values = {}; var _field = 'search-field-'; var _condition = 'search-condition-'; var _value = 'search-value-'; if (advanced) { _field = 'advanced-' + _field; _condition = 'advanced-' + _condition; _value = 'advanced-' + _value; } function init() { if (advanced) { $.each(data.field, function (i) { var type = self.find('#' + _field + i).data('type'); setValues(type, i, data.option[i]); }); } else { var e = self.find('#' + _field + '0'); e.val(data['field'][0]); var type = e.find('option:selected').data('type'); setValues(type, 0, data.option[0]); e.on('change', function () { assign = true; var index = this.selectedIndex - 1; var type = $(this).find('option:selected').data('type'); element[0].value.empty(); setValues(type, 0, data.option[index]); }); } } function setValues(type, i, config) { self.find('#' + _value + i); element[i] = { condition: self.find('#' + _condition + i), value: self.find('#' + _value + i) }; setCondition(i, type, data['condition'][i] || ''); handle[type].call(self, i, config); } function setCondition(i, type, selected) { var e = element[i].condition.empty(); var condition = {}; if (assign == true) { selected = ''; } condition.number = [{ key: "eq", value: '等于' }, { key: "neq", value: '不等于' }, { key: "gt", value: '大于' }, { key: "lt", value: '小于' }]; condition.date = [{ key: "eq", value: '等于' }, { key: "neq", value: '不等于' }, { key: "gt", value: '大于' }, { key: "lt", value: '小于' }]; condition.second = [{ key: "eq", value: '等于' }, { key: "neq", value: '不等于' }, { key: "gt", value: '大于' }, { key: "lt", value: '小于' }]; condition.text = [{ key: "like", value: '包含' }, { key: "not_like", value: '不包含' }, { key: "eq", value: '等于' }, { key: "neq", value: '不等于' }, { key: "gt", value: '大于' }, { key: "lt", value: '小于' }, { key: "empty", value: '为空' }, { key: "not_empty", value: '不为空' }]; if (type == 'second' || type == 'text' || type == 'number' || type == 'date') { var value = selected || condition[type][0].key; $.map(condition[type], function (row) { e.append(''); }); e.parent('div').css("display", "inline-block"); } else if (type == 'birthday') { e.append(''); e.parent('div').hide(); var value = 'birthday'; } else if (type == 'date2') { e.append(''); e.parent('div').hide(); var value = 'date2'; } else if (type == 'region') { e.append(''); e.parent('div').hide(); var value = 'region'; } else if (type == 'second2') { e.append(''); e.parent('div').hide(); var value = 'second2'; } else if (type == 'dialog') { e.append(''); e.parent('div').hide(); var value = 'dialog'; } else { e.append(''); e.parent('div').hide(); var value = 'eq'; } e.val(value); toggleValue(i, value); e.on('change', function () { toggleValue(i, $(this).val()); }); } function toggleValue(i, value) { var e = element[i].value; if (value == 'empty' || value == 'not_empty') { e.hide(); } else { e.show(); } } function attr(i, id) { var value = _value; var name = 'search'; var res = {}; var id_0 = ''; var id_1 = ''; if (id != undefined) { id_0 = '-' + id; id_1 = '_' + id; } res.id = form_id + '_' + value + i + id_0; res.name = name + '_' + i + id_1; if (assign == false) { if (id_0) { var v1 = data['search'][i][id]; res.value = v1 == undefined ? '' : v1; } else { var v1 = data['search'][i]; res.value = v1 == undefined ? '' : v1; } } else { res.value = ''; } return res; } function _option(rows) { var type = $.type(rows); var option = advanced == true ? '' : ''; if (type == 'array' || type == 'object') { $.map(rows, function (row) { option += ''; }); } else { option = option.concat(rows); } return option; } self._select = function (config, i, id, space) { var a = attr(i, id); var d = _option(config); var e = $(''); element[i].value.append(e); if (a.value !== '') { e.val(a.value); } }; self._text = function (i, id, space) { var a = attr(i, id); var e = $(''); element[i].value.append(e); }; self._year = function (i, id, space) { var a = attr(i, id); var e = $(''); element[i].value.append(e); }; self._date = function (i, id, space) { var a = attr(i, id); var e = $(''); element[i].value.append(e); }; self._date2 = function (i, id, space) { var a0 = attr(i, 0); var a1 = attr(i, 1); var e = $('
-
'); element[i].value.append(e); }; self._second2 = function (i, id, space) { var a0 = attr(i, 0); var a1 = attr(i, 1); var e = $('
-
'); element[i].value.append(e); }; self._birthday = function (i, id, space) { var a0 = attr(i, 0); var a1 = attr(i, 1); var e = $(' - '); element[i].value.append(e); }; self._birthday2 = function (i, id, space) { var a0 = attr(i, 0); var a1 = attr(i, 1); var e = $(' - '); element[i].value.append(e); }; self._dialog = function (config, i, id, space) { var a0 = attr(i, id); var query = []; if (config.query) { config.query['multi'] = config.query['multi'] == 'undefined' ? 1 : config.query['multi']; $.each(config.query, function (k, v) { query.push('data-' + k + '="' + v + '"'); }); } if (advanced) { var field = self.find('#' + _field + i); } else { var field = self.find('#' + _field + '0').find('option:selected'); } var options = field.data(); var e = '
'; e += ''; e += ''; e += '
'; e += ''; e += '
'; element[i].value.append($(e)); }; var handle = { empty: function empty(i) { element[i].value.empty(); }, text: function text(i) { self._text(i); }, select2: function select2(i) { self._text(i); }, select: function select(i, config) { self._select(config, i); }, number: function number(i) { self._text(i); }, year: function year(i) { self._year(i); }, date: function date(i) { self._date(i); }, date2: function date2(i) { self._date2(i); }, birthday: function birthday(i) { self._birthday(i); }, dialog: function dialog(i, config) { self._dialog(config, i); }, second: function second(i) { self._date(i); }, second2: function second2(i) { self._second2(i); }, option: function option(i, config) { self._select(config, i); }, address: function address(i) { var province = attr(i, 0); var city = attr(i, 1); var e = ' '; element[i].value.append(e); new pcas(province.id, city.id, province.value, city.value); }, region: function region(i) { var province = attr(i, 0); var city = attr(i, 1); var county = attr(i, 2); var province_id = province.value; var city_id = city.value; var county_id = county.value; element[i].value.append('  '); $.get(app.url('index/api/region', { layer: 1 }), function (res) { var option = ''; $.map(res, function (row) { option += ''; }); var e = $('#' + province.id).html(option); if (province_id) { e.val(province_id); } _city(i); _county(i); self.on('change', '#' + province.id, function () { province_id = this.value; city_id = 0; county_id = 0; _city(i); _county(i); }); self.on('change', '#' + city.id, function () { city_id = this.value; county_id = 0; _county(i); }); }); function _city(i, space) { $.get(app.url('index/api/region', { layer: 2, parent_id: province_id }), function (res) { var option = ''; $.map(res, function (row) { option += ''; }); var e = $('#' + city.id).html(option); if (city_id) { e.val(city_id); } }); } function _county(i, space) { $.get(app.url('index/api/region', { layer: 3, parent_id: city_id }), function (res) { var option = ''; $.map(res, function (row) { option += ''; }); var e = $('#' + county.id).html(option); if (county_id) { e.val(county_id); } }); } }, circle: function circle(i) { var circle = self.attr(i, 0); var customer = self.attr(i, 1); var circle_id = circle.value; var customer_id = customer.value; element[i].value.append(' '); $.post(app.url('customer/circle/dialog'), function (res) { var option = ''; $.map(res, function (row) { option += ''; }); var e = $('#' + circle.id).html(option); if (circle_id) { e.val(circle_id); } _customer(i); }); self.on('change', '#' + circle.id, function () { circle_id = this.value; customer_id = 0; _customer(i); }); function _customer(i) { var option = ''; if (circle_id) { $.post(app.url('customer/customer/dialog', { limit: 500, circle_id: circle_id }), function (res) { $.map(res.data, function (row) { option += ''; }); var e = $('#' + customer.id).html(option); if (customer_id) { e.val(customer_id); } }); } else { $('#' + customer.id).html(option); } } } }; self.attr = attr; self.element = element; self.options = options; if (typeof options.init == 'function') { options.init.call(this, handle); } init(); return this; }; })(jQuery); (function ($) { var COUNT = 0; $.fn.dialog = function (options) { var self = this, $this = $(self), $body = $(document.body), $element = $this.closest('.dialog'); this.options = options; var create = function create() { // fade var element = ''; // 窗口创建一个以上遮罩只显示一层 // options.backdrop = COUNT > 0 ? '' : options.backdrop; $element = $(element); $body.append($element); $element.find(".modal-body").append($this); $element.modal({ backdrop: options.backdrop }); //if(options.draggable === true) { $('.modal-dialog').draggable({ handle: ".modal-header", iframeFix: true }); //} }; var createButton = function createButton(_options) { var buttons = (_options || options || {}).buttons || {}, $btnrow = $element.find(".modal-footer"); // clear old buttons $btnrow.html(''); for (var button in buttons) { var btn = buttons[button], id = '', text = '', classed = 'btn-default', click = ''; classed = btn['class'] || btn.classed || classed; $button = $(''); $button.data('click', btn.click); if (btn.id) { $button.attr("id", btn.id); } $btnrow.append($button); } $btnrow.on('click', function (e) { var click = $(e.target).data('click'); if (typeof click === 'function') { click.call(self, e); } }); $btnrow.data('buttons', buttons); }; var show = function show() { $element.modal('show'); var showHandler = options.onShow || function () {}; showHandler.call(self); }; var close = function close() { $element.modal('hide'); }; var destroy = function destroy() { $element.remove(); }; if (options.constructor == Object) { var defaults = { show: true, backdrop: true, destroy: false }; options = $.extend(defaults, options); if ($element.size() == 0) { create(); createButton(); $element.find('.modal-title').html(options['title']); if (options['dialogClass']) { $element.find('.modal-dialog').addClass(options['dialogClass']); } $element.on('click', "[data-dismiss='dialog']", function () { var closeHandler = options.onClose || close; closeHandler.call(self); }); $element.one('show.bs.modal', function () { COUNT++; }); $element.one('hidden.bs.modal', function () { COUNT--; if (COUNT > 0) { $element.modal('checkScrollbar'); $body.addClass('modal-open'); $element.modal('setScrollbar'); } // 取消绑定的事件 // $element.off('click',"[data-dismiss='dialog']"); // 删除 $element if (options.destroy == true) { destroy(); } }); if (options.modalClass) { $element.addClass(options.modalClass); } } if (options.show) { show(); } } if (options == "destroy") { options.destroy = true; close(); } if (options == "close") { close(); } if (options == "show") { show(); } return self; }; })(jQuery); (function ($) { var modal = { ok: { text: "确定", classed: 'btn-info' }, cancel: { text: "取消", classed: 'btn-default' } }; $.messager = {}; $.messager.alert = function (title, message, callback) { if (arguments.length < 2) { message = title || ""; title = " "; } $("
" + message + "
").dialog({ title: title, destroy: true, dialogClass: 'modal-sm', buttons: [{ text: modal.ok.text, classed: modal.ok.classed || "btn-success", click: function click() { if (typeof callback === 'function') { callback(); } $(this).dialog("destroy"); } }] }); }; $.messager.confirm = function (title, message, callback) { $("
" + message + "
").dialog({ title: title, destroy: true, backdrop: 'static', dialogClass: 'modal-sm modal-confirm', buttons: [{ text: modal.cancel.text, classed: modal.cancel.classed || "btn-danger", click: function click() { $(this).dialog("destroy"); if (typeof callback === 'function') { callback(false); } } }, { text: modal.ok.text, classed: modal.ok.classed || "btn-success", click: function click() { $(this).dialog("destroy"); if (typeof callback === 'function') { callback(true); } } }] }); }; })(jQuery); (function ($) { var dialogIndex = 0; $.dialog = function (options) { var oldIndex = dialogIndex; var defaultOptions = { title: 'Dialog', modalClass: 'no-padder', dialogClass: 'modal-md', destroy: true, index: dialogIndex, onShow: function onShow() { var me = this; var url = options['url']; if (url) { var url = url + (url.indexOf('?') < 0 ? '?' : '&') + 'dialog_index=' + oldIndex; $.get(url, function (data) { me.html(data); }); } if (options['html']) { this.html(options['html']); } }, buttons: [{ text: "取消", click: function click() { $(this).dialog("close"); } }, { text: "确定", 'class': "btn-primary", click: function click() { $(this).dialog("close"); } }] }; options = $.extend(defaultOptions, options); var id = 'gdoo-dialog-' + dialogIndex; var $target = $('#' + id); if ($target.length == 0) { $target = $('
', { id: id }); dialogIndex++; } $target.dialog(options); return oldIndex; }; })(jQuery); (function ($) { $.toastr = function (type, title, content) { toastr.options = { "closeButton": true, "debug": false, "progressBar": false, "positionClass": "toast-top-right", //"positionClass": "toast-top-center", "onclick": null, "showDuration": "300", "hideDuration": "1000", "timeOut": "5000", "extendedTimeOut": "1000", "showEasing": "swing", "hideEasing": "linear", "showMethod": "fadeIn", "hideMethod": "fadeOut" }; toastr[type](title, content); }; })(jQuery); (function (window) { var calc = { /** * 人民币计算大写 * @param {type} currencyDigits * @returns {String} */ 'rmb': function rmb(currencyDigits) { // Constants: var MAXIMUM_NUMBER = 99999999999.99; // Predefine the radix characters and currency symbols for output: var YUANCAPITAL = { ZERO: "零", ONE: "壹", TWO: "贰", THREE: "叁", FOUR: "肆", FIVE: "伍", SIX: "陆", SEVEN: "柒", EIGHT: "捌", NINE: "玖", TEN: "拾", HUNDRED: "佰", THOUSAND: "仟", TEN_THOUSAND: "万", HUNDRED_MILLION: "亿", DOLLAR: "元", TEN_CENT: "角", CENT: "分", INTEGER: "整" }; var CN_ZERO = YUANCAPITAL.ZERO; var CN_ONE = YUANCAPITAL.ONE; var CN_TWO = YUANCAPITAL.TWO; var CN_THREE = YUANCAPITAL.THREE; var CN_FOUR = YUANCAPITAL.FOUR; var CN_FIVE = YUANCAPITAL.FIVE; var CN_SIX = YUANCAPITAL.SIX; var CN_SEVEN = YUANCAPITAL.SEVEN; var CN_EIGHT = YUANCAPITAL.EIGHT; var CN_NINE = YUANCAPITAL.NINE; var CN_TEN = YUANCAPITAL.TEN; var CN_HUNDRED = YUANCAPITAL.HUNDRED; var CN_THOUSAND = YUANCAPITAL.THOUSAND; var CN_TEN_THOUSAND = YUANCAPITAL.TEN_THOUSAND; var CN_HUNDRED_MILLION = YUANCAPITAL.HUNDRED_MILLION; var CN_DOLLAR = YUANCAPITAL.DOLLAR; var CN_TEN_CENT = YUANCAPITAL.TEN_CENT; var CN_CENT = YUANCAPITAL.CENT; var CN_INTEGER = YUANCAPITAL.INTEGER; // Variables: var integral; // Represent integral part of digit number. var decimal; // Represent decimal part of digit number. var outputCharacters; // The output result. var parts; var digits, radices, bigRadices, decimals; var zeroCount; var i, p, d; var quotient, modulus; // Validate input string: currencyDigits = currencyDigits.toString(); if (currencyDigits == "") { return ""; } if (currencyDigits.match(/[^,.\d]/) != null) { return ""; } if (currencyDigits.match(/^((\d{1,3}(,\d{3})*(.((\d{3},)*\d{1,3}))?)|(\d+(.\d+)?))$/) == null) { return ""; } // Normalize the format of input digits: currencyDigits = currencyDigits.replace(/,/g, ""); // Remove comma delimiters. currencyDigits = currencyDigits.replace(/^0+/, ""); // Trim zeros at the beginning. // Assert the number is not greater than the maximum number. if (Number(currencyDigits) > MAXIMUM_NUMBER) { return ""; } // Process the coversion from currency digits to characters: // Separate integral and decimal parts before processing coversion: parts = currencyDigits.split("."); if (parts.length > 1) { integral = parts[0]; decimal = parts[1]; // Cut down redundant decimal digits that are after the second. decimal = decimal.substr(0, 2); } else { integral = parts[0]; decimal = ""; } // Prepare the characters corresponding to the digits: digits = new Array(CN_ZERO, CN_ONE, CN_TWO, CN_THREE, CN_FOUR, CN_FIVE, CN_SIX, CN_SEVEN, CN_EIGHT, CN_NINE); radices = new Array("", CN_TEN, CN_HUNDRED, CN_THOUSAND); bigRadices = new Array("", CN_TEN_THOUSAND, CN_HUNDRED_MILLION); decimals = new Array(CN_TEN_CENT, CN_CENT); // Start processing: outputCharacters = ""; // Process integral part if it is larger than 0: if (Number(integral) > 0) { zeroCount = 0; for (i = 0; i < integral.length; i++) { p = integral.length - i - 1; d = integral.substr(i, 1); quotient = p / 4; modulus = p % 4; if (d == "0") { zeroCount++; } else { if (zeroCount > 0) { outputCharacters += digits[0]; } zeroCount = 0; outputCharacters += digits[Number(d)] + radices[modulus]; } if (modulus == 0 && zeroCount < 4) { outputCharacters += bigRadices[quotient]; } } outputCharacters += CN_DOLLAR; } // Process decimal part if there is: if (decimal != "") { for (i = 0; i < decimal.length; i++) { d = decimal.substr(i, 1); if (d != "0") { outputCharacters += digits[Number(d)] + decimals[i]; } } } // Confirm and return the final output string: if (outputCharacters == "") { outputCharacters = CN_ZERO + CN_DOLLAR; } if (decimal == "") { outputCharacters += CN_INTEGER; } //outputCharacters = CN_SYMBOL + outputCharacters; return outputCharacters; }, /** * 最大值 * @returns {unresolved} */ 'max': function max() { if (arguments.length == 0) { return; } var maxNum = arguments[0]; for (var i = 0; i < arguments.length; i++) { maxNum = Math.max(maxNum, arguments[i]); } return parseFloat(maxNum); }, /** * 最小值 * @returns {unresolved} */ 'min': function min() { if (arguments.length == 0) { return; } var minNum = arguments[0]; for (var i = 0; i < arguments.length; i++) { minNum = Math.min(minNum, arguments[i]); } return parseFloat(minNum); }, /** * 平均值 * @returns {unresolved} */ 'avg': function avg() { var args = arguments, len = args.length, i = 0, sum = 0; for (; i < len && (sum += parseFloat(args[i])); i++) {} return sum / len; }, /** * 取模运算 * @returns {String} */ 'mod': function mod() { if (arguments.length == 0) { return; } var firstNum = arguments[0]; var secondNum = arguments[1]; var result = firstNum % secondNum; result = isNaN(result) ? "" : parseFloat(result); return result; }, /** * 绝对值 * @param {type} val * @returns {@exp;Math@call;abs} */ 'abs': function abs(val) { return Math.abs(parseFloat(val)); }, /** * 获取值 * @param {type} val * @returns {@exp;Math@call;floor|Number} */ 'val': function val(_val, prec) { return isNaN(_val) || _val === Infinity ? 0 : _val.toFixed(prec); }, /** * 天数计算 * @param {type} val * @returns {Number|@exp;Math@call;floor} */ 'day': function day(val) { return val == 0 ? 0 : Math.floor(val / 86400); }, /** * 小时 * @param {type} val * @returns {@exp;Math@call;floor|Number} */ 'hour': function hour(val) { return val == 0 ? 0 : Math.floor(val / 3600); }, /** * 日期计算 * @param {type} val * @returns {String} */ 'date': function date(val) { var TIME = { YEAR: "年", HALFYEAR: "半年", QUARTER: "季", MONTH: "月", WEEK: "周", DAY: "天", HOUR: "小时", MIN: "分", MINS: "分钟", SEC: "秒", SECS: "秒钟", INVALID_DATE: "日期格式无效", WEEKS: "星期", WEEKDAYS: "日一二三四五六" }; return val >= 0 ? Math.floor(val / 86400) + TIME.DAY + Math.floor(val % 86400 / 3600) + TIME.HOUR + Math.floor(val % 3600 / 60) + TIME.MIN + Math.floor(val % 60) + TIME.SEC : TIME.INVALID_DATE; //'日期格式无效' }, /** * 列表控件计算 * @param {type} olist * @param {type} col * @returns {Number} */ 'list': function list(table_id, col) { var output = 0; var tbody = document.getElementById('body_' + table_id); for (var i = 0; i < tbody.rows.length; i++) { for (var j = 0; j < tbody.rows[i].cells.length; j++) { if (j == col) { var child = tbody.rows[i].cells[j].firstChild; if (child && child.tagName) { var val = child.value || child.innerText; val = val == "" || val.replace(/\s/g, '') == "" ? 0 : val; val = isNaN(val) ? NaN : val; output += parseFloat(val); } else { output += parseFloat(child.data); } } } } return parseFloat(output); }, /** * 计算控件获取item的值 * @param {type} $item * @returns {@exp;d@call;getTime|Number|@exp;document@call;getElementById} */ 'getVal': function getVal(id, type) { var $item = $('#' + id); if ($item.length == 0) { return 0; } // $item.data('flag') if (type == 'listview') { return document.getElementById('lv_' + id); } else if (type == 'date') { var val = $('#' + id).val(); //var val = $item.parent().data("datetimepicker").getDate(); var d = new Date(val); return d.getTime() / 1000; } else { var val = $item.val(); if (val == "") { val = 0; } return val; } }, /** 数字合计 */ sum: function sum() { var args = [].slice.call(arguments, 0), len, item, sum = 0; for (len = args.length; len--;) { item = parseFloat(args[len]); // if item=>NaN sum += item === item ? item : 0; } return sum; } }; var listView = { calc: calc, field: {}, data: {}, total: {}, editor: function editor(key, i, j) { var field = listView.field[key]; var type = field.type[j]; var size = field.size[j]; var css = field.checks[j] == 'SYS_NOT_NULL' ? 'input-required' : 'input-text'; var readonly = field.writes[j] == true ? false : true; var value = ''; if (listView.data[key][i]) { value = listView.data[key][i][j] == undefined ? '' : listView.data[key][i][j]; } var name = key + '[' + i + '][' + j + ']'; var id = key + '_' + i + '_' + j; switch (type) { case "empty": var out = ''; break; case "text": var out = readonly == 0 ? '' : '' + value + ''; break; case "textarea": var out = readonly == 0 ? '' : '' + value + ''; break; case "calc": var out = readonly == 0 ? '' : '' + value + ''; break; case "select": var option = field.value[j].split(','); var r = []; r.push(''); out = readonly == 0 ? r.join("\n") : '' + value + ''; break; case "radio": var option = field.value[j].split(','); var r = []; for (var i = 0; i < option.length; i++) { var checked = value == option[i] ? ' checked' : ''; r.push(''); } out = readonly == 0 ? r.join("\n") : '' + value + ''; break; case "checkbox": var option = field.value[j].split(','); var r = []; for (var i = 0; i < option.length; i++) { var checked = value == option[i] ? ' checked' : ''; r.push(''); } out = readonly == 0 ? r.join("\n") : '' + value + ''; break; case "datetime": out = readonly == 0 ? '' : '' + value + ''; break; } return out; }, rowUpdate: function rowUpdate(obj) { var e = obj.target.id.split('_'); if (e.length == 4) { var key = e[0] + '_' + e[1]; listView.rowSum(key, e[2]); listView.footerSum(key); } ; }, footerSum: function footerSum(key) { var body = document.getElementById('body_' + key); var field = listView.field[key]; var sum = field.sum; var readonly = field.readonly; for (var i = 0; i < sum.length; i++) { if (sum[i] == true) { var row = 0; for (var j = 0; j < body.rows.length; j++) { var td = body.rows[j].cells[i + 1]; var value = field.readonly == 0 ? $(td).find('input,select').val() : $(td).find('span').text(); value = parseFloat(value); row += isNaN(value) ? 0 : Math.round(parseFloat(value) * 10000) / 10000; } row = row.toFixed(2); $('#total_' + key + '_' + i).html(row); } } }, rowSum: function rowSum(key, j) { var field = listView.field[key]; var type = field.type; var value = field.value; var readonly = field.readonly; var calc = []; for (var i = 0; i < type.length; i++) { if (type[i] == 'calc') { calc[i] = value[i]; for (var k = 0; k < type.length; k++) { var n = k + 1; var td = $('#' + key + '_' + j + '_' + k); var td_value = readonly == 0 ? td.val() : td.text(); calc[i] = calc[i].replace('[' + n + ']', parseFloat(td_value)); } row = isNaN(eval(calc[i])) ? 0 : Math.round(parseFloat(eval(calc[i])) * 10000) / 10000; row = row.toFixed(2); var obj = $('#' + key + '_' + j + '_' + i); readonly == 0 ? obj.val(row) : obj.text(row); } } }, rowAdd: function rowAdd(key) { i = listView.total[key]; var tr = []; tr.push('' + (i + 1) + ''); for (var j = 0; j < listView.field[key].type.length; j++) { tr.push('' + listView.editor(key, i, j) + ''); } // 检查字段是否为只读 if (listView.field[key].readonly == 0) { var option = i > 0 ? '删除' : '添加'; tr.push('' + option + ''); } $('#body_' + key).append(tr.join("\n")); // 累加行 listView.total[key]++; }, deleteRow: function deleteRow(key, obj) { var tr = obj.parentNode.parentNode; tr.parentNode.removeChild(tr); // 总计列总数 listView.footerSum(key); }, init: function init(key) { // 初始化列表视图 listView.total[key] = 0; // 新建的时候默认显示一行 var length = listView.data[key].length > 0 ? listView.data[key].length : 1; for (var i = 0; i < length; i++) { // 添加一行 listView.rowAdd(key); // 计算小计行 listView.rowSum(key, i); } ; // 总计列总数 listView.footerSum(key); } }; window.listView = listView; })(window); (function (window) { // 循环子表 function gridListData(table) { var gets = {}; var tables = formGridList[table] || []; if (tables.length) { for (var i = 0; i < tables.length; i++) { var t = tables[i]; var store = t.api.memoryStore; var rows = []; t.api.stopEditing(); t.api.forEachNode(function (rowNode) { var data = rowNode.data; if (isNotEmpty(data[t.dataKey])) { var id = '' + data.id; var draft = id.indexOf('draft_'); if (draft === 0) { data.id = 0; } rows.push(data); } }); var event = gdoo.event.get('grid.' + t.tableKey); if (event.exist('onSaveBefore')) { var ret = event.trigger('onSaveBefore', rows); if (ret === false) { return false; } } if (rows.length == 0 && t.tableSaveDataNotEmpty === true) { toastrError(t.tableTitle + '不能为空。'); return false; } else { gets[t.tableKey] = { rows: rows, deleteds: store.deleted }; } } } return gets; } // 刷新所有相关grid function reloadGrid(table) { var iframes = top.document.getElementsByTagName("iframe"); for (var i = 0; i < iframes.length; i++) { var iframe = iframes[i]; var $gdoo = iframe.contentWindow.gdoo; if (iframe.id == 'tab_iframe_dashboard') { // 刷新首页全部部件 var widgets = Object.values($gdoo.widgets); widgets.forEach(function (grid) { grid.remoteData(); }); } else { // 刷新全部页面的相关grid if ($gdoo && $gdoo.grids) { var grids = $gdoo.grids; if (grids[table]) { grids[table].grid.remoteData(); } } } } } window.gridListData = gridListData; var model = { bill_url: '', audit: function audit(table) { var form = $('#' + table); var key = form.find('#master_key').val(); var run_id = form.find('#master_run_id').val(); var step_id = form.find('#master_step_id').val(); var run_log_id = form.find('#master_run_log_id').val(); var uri = $('#' + table).find('#master_uri').val(); var url = app.url(uri + '/flowAudit', { key: key, run_id: run_id, step_id: step_id, run_log_id: run_log_id }); $.dialog({ title: '单据审批', url: url, buttons: [{ text: '取消', 'class': 'btn-default', click: function click() { $(this).dialog('close'); } }, { text: '提交', 'class': 'btn-info', click: function click() { var query = $('#myturn,#' + table).serialize(); // 循环子表 var gets = gridListData(table); if (gets === false) { return; } var loading = showLoading(); $.post(app.url(uri + '/flowAudit'), query + '&' + $.param(gets), function (res) { if (res.status) { reloadGrid(table); toastrSuccess(res.data); if (res.url) { location.href = res.url; } } else { toastrError(res.data); } }, 'json').complete(function () { layer.close(loading); }); } }] }); }, draft: function draft(table) { var uri = $('#' + table).find('#master_uri').val(); var query = $('#myturn,#' + table).serialize(); // 循环子表 var gets = gridListData(table); if (gets === false) { return; } var loading = showLoading(); var event = gdoo.event.get('grid.' + table); $.post(app.url(uri + '/flowDraft'), query + '&' + $.param(gets), function (res) { if (event.exist('onSaveAfter')) { res = event.trigger('onSaveAfter', res); } if (res.status) { reloadGrid(table); toastrSuccess(res.data); if (res.url) { location.href = res.url; } } else { toastrError(res.data); } }, 'json').complete(function () { layer.close(loading); }); }, remove: function remove(url) { $.messager.confirm('操作警告', '确定要删除吗?', function (btn) { if (btn == true) { $.post(url, function (res) { if (res.status) { toastrSuccess(res.data); location.reload(); } else { toastrError(res.data); } }, 'json'); } }); }, store: function store(table) { var uri = $('#' + table).find('#master_uri').val(); var query = $('#' + table).serialize(); // 循环子表 var gets = gridListData(table); if (gets === false) { return; } var loading = showLoading(); $.post(app.url(uri + '/store'), query + '&' + $.param(gets), function (res) { if (res.status) { reloadGrid(table); toastrSuccess(res.data); if (res.url) { location.href = res.url; } } else { toastrError(res.data); } }, 'json').complete(function () { layer.close(loading); }); }, read: function read(table) { var uri = $('#' + table).find('#master_uri').val(); var query = $('#' + table).serialize(); var loading = showLoading(); $.post(app.url(uri + '/flowRead'), query, function (res) { if (res.status) { reloadGrid(table); toastrSuccess(res.data); location.reload(); } else { toastrError(res.data); } }, 'json').complete(function () { layer.close(loading); }); }, reset: function reset(table) { $.messager.confirm('操作警告', '确定要重置流程吗', function (btn) { if (btn == true) { var uri = $('#' + table).find('#master_uri').val(); var query = $('#' + table).serialize(); var loading = showLoading(); $.post(app.url(uri + '/flowReset'), query, function (res) { if (res.status) { location.reload(); } else { toastrError(res.data); } }, 'json').complete(function () { layer.close(loading); }); } }); }, auditLog: function auditLog(key) { var url = app.url('index/workflow/flowLog', { key: key }); $.dialog({ title: '审批记录', dialogClass: 'modal-lg', url: url, buttons: [{ text: '取消', 'class': 'btn-default', click: function click() { $(this).dialog('close'); } }] }); }, revise: function revise(key) { var url = app.url('index/workflow/flowRevise', { key: key }); formDialog({ title: '流程修正', url: url, dialogClass: 'modal-md', id: 'revise-form', success: function success(res) { toastrSuccess(res.data); location.reload(); $(this).dialog("close"); }, error: function error(res) { toastrError(res.data); } }); } }; // 流程撤回 model.recall = function (table) { var key = $('#' + table).find('#master_key').val(); var uri = $('#' + table).find('#master_uri').val(); var log_id = $('#' + table).find('#master_recall_log_id').val(); var url = app.url(uri + '/recall', { key: key, log_id: log_id }); $.dialog({ title: '撤回单据', url: url, buttons: [{ text: "取消", 'class': "btn-default", click: function click() { $(this).dialog("close"); } }, { text: "提交", 'class': "btn-info", click: function click() { var query = $('#myrecall').serialize(); var loading = showLoading(); $.post(app.url(uri + '/recall'), query, function (res) { if (res.status) { reloadGrid(table); toastrSuccess(res.data); location.reload(); } else { toastrError(res.data); } }, 'json').complete(function () { layer.close(loading); }); } }] }); }; // 弃审单据 model.abort = function (table) { var key = $('#' + table).find('#master_key').val(); var uri = $('#' + table).find('#master_uri').val(); var url = app.url(uri + '/abort', { key: key }); $.dialog({ title: '弃审单据', url: url, buttons: [{ text: "取消", 'class': "btn-default", click: function click() { $(this).dialog("close"); } }, { text: "提交", 'class': "btn-info", click: function click() { var query = $('#myabort').serialize(); var loading = showLoading(); $.post(app.url(uri + '/abort'), query, function (res) { if (res.status) { reloadGrid(table); toastrSuccess(res.data); location.reload(); } else { toastrError(res.data); } }, 'json').complete(function () { layer.close(loading); }); } }] }); }; // 普通审核弃审 model.audit2 = function (table) { var key = $('#' + table).find('#master_key').val(); var uri = $('#' + table).find('#master_uri').val(); $.messager.confirm('操作警告', '确定要审核单据吗', function (btn) { if (btn == true) { var loading = showLoading(); $.post(app.url(uri + '/audit'), { key: key }, function (res) { if (res.status) { reloadGrid(table); toastrSuccess(res.data); location.reload(); } else { toastrError(res.data); } }, 'json').complete(function () { layer.close(loading); }); } }); }; // 普通审核弃审 model.abort2 = function (table) { var key = $('#' + table).find('#master_key').val(); var uri = $('#' + table).find('#master_uri').val(); $.messager.confirm('操作警告', '确定要弃审单据吗', function (btn) { if (btn == true) { var loading = showLoading(); $.post(app.url(uri + '/abort'), { key: key }, function (res) { if (res.status) { reloadGrid(table); top.$.toastr('success', res.data); location.reload(); } else { top.$.toastr('error', res.data); } }, 'json').complete(function () { layer.close(loading); }); } }); }; // 子表新增 model.createRow = function (table) { var grid = gdoo.forms[table]; var onCreateRow = window[table + '.onCreateRow']; if (typeof onCreateRow == 'function') { var ret = onCreateRow.call(grid, table); if (ret === false) { return false; } } grid.api.memoryStore.create({}); }; // 子表删除 model.deleteRow = function (table) { var grid = gdoo.forms[table]; var onDeleteRow = window[table + '.onDeleteRow']; if (typeof onDeleteRow == 'function') { var ret = onDeleteRow.call(grid, table); if (ret === false) { return false; } } var selectedNodes = grid.api.getSelectedNodes(); if (selectedNodes && selectedNodes.length === 1) { var selectedNode = selectedNodes[0]; grid.api.deleteRow(selectedNode.data); grid.api.forEachNode(function (node) { if (node.childIndex === selectedNode.childIndex) { node.setSelected(true); return; } }); } }; // 快速搜索 model.quickFilter = function (table) { var grid = gdoo.forms[table]; var $div = $('#' + table + '_quick_filter_text'); var $el = $div.dialog({ title: ' 过滤' + grid.tableTitle, modalClass: 'no-padder', dialogClass: 'modal-sm', buttons: [{ text: "确定", classed: 'btn-info', click: function click() { grid.api.setQuickFilter($div.find('input').val()); $el.dialog("close"); } }, { text: "取消", classed: 'btn-default', click: function click() { $el.dialog("close"); } }] }).on('keydown', function (e) { if (e.keyCode == 13) { grid.api.setQuickFilter($div.find('input').val()); $el.dialog("close"); } }); }; // 子表关闭 model.closeRow = function (table) { var me = this; var grid = gdoo.forms[table]; var rows = grid.api.getSelectedRows(); if (rows.length > 0) { var id = rows[0].id; top.$.messager.confirm('操作提醒', '是否要关闭选中的行数据?', function (btn) { if (btn == true) { var loading = showLoading(); $.post(app.url(me.bill_url + '/closeRow'), { table: table, id: id }, function (res) { if (res.status) { toastrSuccess(res.data); grid.remoteData(); } else { toastrError(res.data); } }, 'json').complete(function () { layer.close(loading); }); } }); } else { toastrError('最少选择一行记录。'); } }; // 子表关闭所有 model.closeAllRow = function (table) { var me = this; var grid = gdoo.forms[table]; var ids = []; grid.api.forEachNode(function (node) { ids.push(node.data.id); }); if (ids.length > 0) { top.$.messager.confirm('操作提醒', '是否要关闭所有行数据?', function (btn) { if (btn == true) { var loading = showLoading(); $.post(app.url(me.bill_url + '/closeAllRow'), { table: table, ids: ids }, function (res) { if (res.status) { toastrSuccess(res.data); grid.remoteData(); } else { toastrError(res.data); } }, 'json').complete(function () { layer.close(loading); }); } }); } else { toastrError('最少选择一行记录。'); } }; window.flow = model; })(window); (function ($) { function gridAction(table, name) { this.name = name; this.table = table; this.dialogType = 'dialog'; this.show = function (data, key, name) { var me = this; if (data.flow_form_edit == 1) { me.audit(data); return; } var url = app.url(me.bill_url + '/show', { id: data.master_id }); if (me.dialogType == 'dialog') { viewDialog({ title: me.name, dialogClass: 'modal-lg', url: url, close: function close() { $(this).dialog("close"); } }); } else { if (isEmpty(key)) { key = me.bill_url.replace(/\//g, '_') + '_show'; } if (isEmpty(name)) { name = me.name; } top.addTab(me.bill_url + '/show?id=' + data.master_id, key, name); } }; this["import"] = function () { var me = this; var grid = gdoo.grids[me.table].grid; formDialog({ title: '数据导入', url: app.url(me.bill_url + '/import'), dialogClass: 'modal-md', id: 'import-dialog', onSubmit: function onSubmit() { var fd = new FormData(); fd.append("file", $('#import_file')[0].files[0]); var loading = showLoading(); $.ajax({ url: app.url(me.bill_url + '/import'), type: "POST", data: fd, processData: false, contentType: false, complete: function complete() { layer.close(loading); }, success: function success(res) { if (res.status) { $('#modal-import-dialog').dialog('close'); grid.remoteData(); toastrSuccess(res.data); } else { toastrError(res.data); } } }); } }); }; this["delete"] = function () { var me = this; var grid = gdoo.grids[me.table].grid; var rows = grid.api.getSelectedRows(); var ids = []; $.each(rows, function (index, row) { ids.push(row.master_id); }); if (ids.length > 0) { var content = ids.length + '个' + me.name + '将被删除?'; top.$.messager.confirm('删除' + me.name, content, function (btn) { if (btn == true) { var loading = showLoading(); $.post(app.url(me.bill_url + '/delete'), { id: ids }, function (res) { if (res.status) { toastrSuccess(res.data); grid.remoteData(); } else { toastrError(res.data); } }, 'json').complete(function () { layer.close(loading); }); } }); } else { toastrError('最少选择一行记录。'); } }; this.created_by = function (data) { var me = this; var grid = gdoo.grids[me.table].grid; formDialog({ title: '私信', url: app.url('user/message/create', { user_id: data.id }), storeUrl: app.url('model/form/store'), id: 'user_message', dialogClass: 'modal-md', success: function success(res) { toastrSuccess(res.data); grid.remoteData(); $(this).dialog("close"); }, error: function error(res) { toastrError(res.data); } }); }; this.create = function () { var me = this; var grid = gdoo.grids[me.table].grid; if (me.dialogType == 'dialog') { formDialog({ title: '新建' + me.name, url: app.url(me.bill_url + '/create'), storeUrl: app.url(me.bill_url + '/store'), id: me.table, table: me.table, dialogClass: 'modal-lg', success: function success(res) { toastrSuccess(res.data); grid.remoteData(); $(this).dialog("close"); }, error: function error(res) { toastrError(res.data); } }); } else { var key = me.bill_url.replace(/\//g, '_') + '_show'; top.addTab(me.bill_url + '/create', key, me.name); } }; this.edit = function (data) { var me = this; var grid = gdoo.grids[me.table].grid; if (me.dialogType == 'dialog') { formDialog({ title: '编辑' + me.name, url: app.url(me.bill_url + '/edit', { id: data.master_id }), storeUrl: app.url(me.bill_url + '/store'), id: me.table, table: me.table, dialogClass: 'modal-lg', success: function success(res) { toastrSuccess(res.data); grid.remoteData(); $(this).dialog("close"); }, error: function error(res) { toastrError(res.data); } }); } else { var key = me.bill_url.replace(/\//g, '_') + '_show'; top.addTab(me.bill_url + '/edit?id=' + data.master_id, key, me.name); } }; this.audit = function (data) { var me = this; var grid = gdoo.grids[me.table].grid; if (me.dialogType == 'dialog') { formDialog({ title: '审核' + me.name, url: app.url(me.bill_url + '/audit', { id: data.master_id }), storeUrl: app.url(me.bill_url + '/store'), id: me.table, table: me.table, dialogClass: 'modal-lg', success: function success(res) { toastrSuccess(res.data); grid.remoteData(); $(this).dialog("close"); }, error: function error(res) { toastrError(res.data); } }); } else { var key = me.bill_url.replace(/\//g, '_') + '_show'; top.addTab(me.bill_url + '/audit?id=' + data.master_id, key, me.name); } }; this.batchEdit = function () { var me = this; var grid = gdoo.grids[me.table].grid; var rows = grid.api.getSelectedRows(); var ids = []; $.each(rows, function (index, row) { ids.push(row.master_id); }); if (ids.length > 0) { formDialog({ title: '批量编辑', dialogClass: 'modal-sm', id: 'batch-edit-form', url: app.url(me.bill_url + '/batchEdit', { ids: ids.join(',') }), success: function success(res) { toastrSuccess(res.data); grid.remoteData(); $(this).dialog("close"); }, close: function close() { $(this).dialog("close"); } }); } else { toastrError('最少选择一行记录。'); } }; // 导出 this["export"] = function () { var me = this; var grid = gdoo.grids[me.table].grid; LocalExport(grid, me.name); }; this.filter = function () { var me = this; var config = gdoo.grids[me.table]; var grid = config.grid; var search = config.search; // 过滤数据 $(search.advanced.el).dialog({ title: '高级搜索', modalClass: 'no-padder', buttons: [{ text: "取消", 'class': "btn-default", click: function click() { $(this).dialog("close"); } }, { text: "确定", 'class': "btn-info", click: function click() { var query = search.advanced.el.serializeArray(); var params = {}; search.queryType = 'advanced'; $.map(query, function (row) { params[row.name] = row.value; }); params['page'] = 1; grid.remoteData(params); $(this).dialog("close"); return false; } }] }); }; } window.gridAction = gridAction; })(jQuery); var select2List = {}; var dialogCacheSelected = {}; $(function () { var $document = $(document); // 注册jQuery Ajax全局错误提示 $document.ajaxError(function (event, xhr) { if (xhr.responseJSON) { toastrError(xhr.responseJSON.message); } }); var input_select2 = $document.find('.input-select2'); if (input_select2.length) { input_select2.select2(); } // 新提示 $document.tooltip({ container: 'body', placement: 'auto', selector: '.hinted', delay: { show: 200, hide: 0 } }); // 批量操作 $('.select-all').on('click', function () { var tr = $('.select-row').closest('tr'); if ($(this).prop('checked')) { tr.addClass('success'); } else { tr.removeClass('success'); } $(".select-row").prop('checked', $(this).prop('checked')); }); // 从子窗口关闭tab $document.on('click', '[data-toggle="closetab"]', function () { // 获取框架的名称 if (window.name) { var id = window.name.replace('iframe_', ''); } else { var id = $(this).data('id'); } top.$.addtabs.close({ id: 'tab_' + id }); }); // 点击td选择行 $('.table tbody tr').on('click', function (e) { var tr = $(this); var checkbox = tr.find('.select-row'); var checked = checkbox.prop('checked'); if (checkbox.length == 0) { return; } if (e.target.tagName == 'INPUT') { setCheckbox(checked); } if (e.target.tagName == 'DIV') { setCheckbox(!checked); } if (e.target.tagName == 'TD') { setCheckbox(!checked); } function setCheckbox(checked) { if (checked) { tr.addClass('success'); } else { tr.removeClass('success'); } checkbox.prop('checked', checked); } }); // 转到某些地址,单页面内类型切换 $document.on('change', '[data-toggle="redirect"]', function () { // 从select的rel传递过来的地址 var url = $(this).data('url'); var id = $(this).attr('id'); var selected = $(this).find("option:selected").val(); location.href = url.replace(new RegExp('(' + id + '=)[^&]*', 'g'), '$1' + selected); }); // 清除弹出层id $document.on('click.dialog.search', '[data-toggle="dialog-clear"]', function () { var params = $(this).data(); $('#' + params.id).val(''); $('#' + params.id + '_text').val(''); var event = gdoo.event.get(params.id); event.trigger('clear', params); }); // 弹出对话框表单 $document.on('click.dialog.view', '[data-toggle="dialog-view"]', function () { var params = $(this).data(); var query = {}; $.each(params, function (k, v) { if (k == 'url' || k == 'title' || k == 'toggle') { return true; } query[k] = v; }); // 传递当前iframe var iframe_id = getIframeName(); if (iframe_id) { query.iframe_id = iframe_id; } var option = gdoo.formKey(params); var event = gdoo.event.get(option.key); event.trigger('open', params, query); var url = params['url']; var title = params['title']; var url = app.url(url, query); $.dialog({ title: title, url: url, dialogClass: 'modal-lg', buttons: [{ text: '取消', "class": 'btn-default', click: function click() { var me = this; $(me).dialog("close"); } }, { text: "确定", 'class': "btn-info", click: function click() { var grid = gdoo.dialogs[option.id]; if (grid) { var ret = gdoo.dialogSelected(event, params, option, grid); if (ret === true) { $(this).dialog("close"); } } else { $(this).dialog("close"); } } }] }); }); var gdoo_dialog_input = $document.find('.gdoo-dialog-input'); if (gdoo_dialog_input.length) { gdoo_dialog_input.gdooDialogInput(); } // 弹出对话框表单 $document.on('click.dialog.image', '[data-toggle="dialog-image"]', function () { var params = $(this).data(); $.dialog({ title: params.title, html: '', buttons: [{ text: '确定', 'class': 'btn-default', click: function click() { $(this).dialog("close"); } }] }); }); // 弹出对话框表单 $document.on('click.dialog.form', '[data-toggle="dialog-form"]', function () { var params = $(this).data(); params.id = params.id || 'myform'; params.size = params.size || 'md'; $.dialog({ title: params.title, url: params.url, dialogClass: 'modal-' + params.size, buttons: [{ text: '取消', "class": 'btn-default', click: function click() { var me = this; if (typeof error === 'function') { error.call(me, res); } else { $(me).dialog("close"); } } }, { text: '保存', "class": 'btn-info', click: function click() { var me = this; var action = $('#' + params.id).attr('action'); var formData = $('#' + params.id).serialize(); $.post(action, formData, function (res) { if (typeof success === 'function') { success.call(me, res); } else { if (res.status) { if (res.data == 'reload') { window.location.reload(); } else { toastrSuccess(res.data); $(me).dialog('close'); } } else { toastrError(res.data); } } }, 'json'); } }] }); }); // 日期选择 $document.on('click.date', '[data-toggle="date"]', function () { var data = $(this).data(); var ops = {}; ops['dateFmt'] = data['format'] || 'yyyy-MM-dd'; var onpicked = window[this.id + '.onpicked']; if (typeof onpicked == 'function') { ops['onpicked'] = onpicked; } if (data['dchanging']) { ops['dchanging'] = data['dchanging']; } datePicker(ops); }); // 日期时间选项 $document.on('click.datetime', '[data-toggle="datetime"]', function () { var data = $(this).data(); var ops = {}; ops['dateFmt'] = data['format'] || 'yyyy-MM-dd HH:mm'; if (data['dchanging']) { ops['dchanging'] = data['dchanging']; } datePicker(ops); }); // 关闭layerFrame $document.on('click.frame.close', '[data-toggle="layer-frame-close"]', function () { var index = parent.layer.getFrameIndex(window.name); parent.layer.close(index); }); // 打开layerFrame $document.on('click.frame.url', '[data-toggle="layer-frame-url"]', function () { var url = $(this).data('url'); var title = $(this).data('title') || false; var skin = $(this).data('skin') || 'frame'; var close = $(this).data('close') || false; var index = layer.open({ skin: 'layui-layer-' + skin, scrollbar: false, closeBtn: close, title: title, type: 2, move: false, area: ['100%', '100%'], content: url }); }); // 打开tabFrame $document.on('click.tab.frame', '[data-toggle="tab-frame-url"]', function () { var url = $(this).data('url'); var id = $(this).data('id'); var name = $(this).data('name'); top.addTab(url, id, name); }); // 媒体管理删除 $document.on('click', '[data-toggle="media-delete"]', function () { var me = this; var media = $(me).parent(); var rows = $(me).closest('.media-controller').find('.media-item'); if (rows.length > 1) { media.remove(); } else { media.find('img').attr('src', app.url('assets/images/nopic.jpg')); media.find('input').val(''); } }); $('a.image-show').hover(function (e) { var params = $(this).data(); var img = $('

'); $("body").append(img); $(this).find('img').stop().fadeTo('slow', 0.5); var $window = $(window); var $image = $(document).find('#image'); var height = $image.height(); var width = $image.width(); var left = $window.scrollLeft() + ($window.width() - width) / 2 + 'px'; var top = $window.scrollTop() + ($window.height() - height) / 2 + 'px'; var offset = $(this).offset(); $image.css({ left: offset.left + 100, top: top }); $image.fadeIn('fast'); }, function () { $(this).find('img').stop().fadeTo('slow', 1); $("#image").remove(); }); // 表格拖动排序 $('#table-sortable tbody').sortable({ // opacity: 0.6, delay: 50, cursor: "move", axis: "y", items: "tr", handle: 'td.move', // containmentType:"parent", // placeholder: "ui-sortable-placeholder", helper: function helper(event, ui) { // 在拖动时,拖动行的cell(单元格)宽度会发生改变。 ui.children().each(function () { $(this).width($(this).width()); }); return ui; }, stop: function stop(event, ui) {}, start: function start(event, ui) { ui.placeholder.outerHeight(ui.item.outerHeight()); }, update: function update() { var url = $(this).parent().attr('url'); var orders = $(this).sortable("toArray"); $.post(url, { sort: orders }, function (res) { toastrSuccess(res.data); }); } }); //.disableSelection(); }); var app = { /** * 确认窗口 */ confirm: function confirm(url, content, title) { title = title || '操作警告'; $.messager.confirm(title, content, function (btn) { if (btn == true) { location.href = url; } }); }, /** * 警告窗口 */ alert: function alert(title, content) { $.messager.alert(title, content); }, /** * 获取附带基本路径的URL */ url: function url(uri, params) { if (uri == '/') { return settings.public_url; } query = params == '' || params === undefined ? '' : '?' + $.param(params); return settings.public_url + '/' + uri + query; }, redirect: function redirect(uri, params) { return window.location.href = app.url(uri, params); }, /** * 汉字转换为拼音 */ pinyin: function pinyin(read, write, type) { type = type || 'first'; var field = $('#' + write).val(); if (field == '') { $.get(app.url('index/api/pinyin?type=' + type + '&id=' + Math.random()), { name: $('#' + read).val() }, function (data) { $('#' + write).val(data); }); } } }; var uploader = { file: function file(fileId) { var id = $('#' + fileId).find(".id").val(); location.href = app.url('index/attachment/download', { id: id }); }, cancel: function cancel(fileId) { var id = $('#' + fileId).find(".id").val(); if (id > 0) { var name = $('#' + fileId).find(".file-name a").text(); $.messager.confirm('删除文件', '确定要删除 ' + name + ' 此文件吗', function (btn) { if (btn == true) { $.get(app.url('index/attachment/delete'), { id: id }, function (res) { if (res == 1) { $('#' + fileId).remove(); } }); } }); } else { $('#' + fileId).remove(); } }, insert: function insert(fileId) { var id = $('#' + fileId).find(".id").val(); var name = $('#' + fileId).find(".file-name a").text(); // 检查图片类型 if (/\.(gif|jpg|jpeg|png|GIF|JPG|PNG)$/.test(name)) { var html = ''; } else { var html = '' + name + ''; } UE.getEditor("content").execCommand('insertHtml', html); } }; /** * 媒体对话框 */ function mediaDialog(url, name, id, multi) { var params = { id: id, name: name, multi: multi }; var url = app.url(url, params); $.dialog({ title: '媒体管理', url: url, dialogClass: 'modal-lg', buttons: [{ text: ' 取消', 'class': "btn-default", click: function click() { $(this).dialog('close'); } }, { text: ' 确定', 'class': "btn-info", click: function click() { if (window.saveMedia) { window.saveMedia.call(this, params); $(this).dialog('close'); } } }] }); } /** * 显示窗口 */ function viewBox(name, title, url, size) { size = size || 'md'; $.dialog({ title: title, url: url, dialogClass: 'modal-' + size, buttons: [{ text: "确定", 'class': "btn-default", click: function click() { $(this).dialog("close"); } }] }); } var viewDialogIndex = 0; /** * 表单窗口 */ function viewDialog(options) { if (options.id === undefined) { options.id = 'view-dialog-' + viewDialogIndex; viewDialogIndex++; } var exist = $('#modal-' + options.id); if (exist.length > 0) { exist.dialog('show'); } var defaults = { title: name, url: url, buttons: [{ text: '确定', 'class': 'btn-default', click: function click() { $(this).dialog('close'); } }] }; var settings = $.extend({}, defaults, options); $.dialog(settings); } var formDialogIndex = 0; /** * 表单窗口 */ function formDialog(options) { if (options.id === undefined) { options.id = 'form-dialog-' + formDialogIndex; formDialogIndex++; } var exist = $('#modal-' + options.id); if (exist.length > 0) { exist.dialog('show'); } else { var defaults = { title: 'formDialog', backdrop: 'static', buttons: [{ text: '取消', "class": 'btn-default', click: function click() { var me = this; if (typeof error === 'function') { error.call(me); } else { $(me).dialog("close"); } } }, { text: '保存', "class": 'btn-info', click: function click() { var me = this; var options = me.options; // 自定义提交函数 if (typeof options.onSubmit === 'function') { options.onSubmit.call(me); } else { // 默认提交方法 if (me.options.storeUrl) { var action = me.options.storeUrl; } else { var action = $('#' + options.id).attr('action'); } var query = $('#' + options.id).serialize(); // 循环子表 var gets = gridListData(options.table); if (gets === false) { return; } var loading = showLoading(); $.post(action, query + '&' + $.param(gets), function (res) { if (res.status) { if (typeof options.success === 'function') { options.success.call(me, res); } } else { if (typeof options.error === 'function') { options.error.call(me, res); } } }, 'json').complete(function () { layer.close(loading); }); } } }] }; var settings = $.extend({}, defaults, options); $.dialog(settings); } } /** * 转换时间,计算差值 */ function niceTime(timestamp) { // 当前时间戳 var nowtime = new Date().getTime(); // 计算时间戳差值 var secondNum = parseInt((nowtime - timestamp * 1000) / 1000); if (secondNum >= 0 && secondNum < 60) { return secondNum + '秒前'; } else if (secondNum >= 60 && secondNum < 3600) { var nTime = parseInt(secondNum / 60); return nTime + '分钟前'; } else if (secondNum >= 3600 && secondNum < 3600 * 24) { var nTime = parseInt(secondNum / 3600); return nTime + '小时前'; } else { var nTime = parseInt(secondNum / 86400); return nTime + '天前'; } } /** * 首字母大写 */ function ucfirst(str) { if (str) { return str[0].toUpperCase() + str.substr(1); } else { return str; } } /** * 数字金额大写转换(可以处理整数,小数,负数) */ function digitUppercase(n) { var fraction = ['角', '分']; var digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']; var unit = [['元', '万', '亿'], ['', '拾', '佰', '仟']]; var head = n < 0 ? '欠' : ''; n = Math.abs(n); var s = ''; for (var i = 0; i < fraction.length; i++) { s += (digit[Math.floor(n * 10 * Math.pow(10, i)) % 10] + fraction[i]).replace(/零./, ''); } s = s || '整'; n = Math.floor(n); for (var i = 0; i < unit[0].length && n > 0; i++) { var p = ''; for (var j = 0; j < unit[1].length && n > 0; j++) { p = digit[n % 10] + unit[1][j] + p; n = Math.floor(n / 10); } s = p.replace(/(零.)*零$/, '').replace(/^$/, '零') + unit[0][i] + s; } return head + s.replace(/(零.)*零元/, '元').replace(/(零.)+/g, '零').replace(/^整$/, '零元整'); } ; /** * 数字格式化 */ function number_format(number, decimals, decPoint, thousandsSep) { number = (number + '').replace(/[^0-9+\-Ee.]/g, ''); var n = !isFinite(+number) ? 0 : +number; var prec = !isFinite(+decimals) ? 0 : Math.abs(decimals); var sep = typeof thousandsSep === 'undefined' ? ',' : thousandsSep; var dec = typeof decPoint === 'undefined' ? '.' : decPoint; var s = ''; var toFixedFix = function toFixedFix(n, prec) { if (('' + n).indexOf('e') === -1) { return +(Math.round(n + 'e+' + prec) + 'e-' + prec); } else { var arr = ('' + n).split('e'); var sig = ''; if (+arr[1] + prec > 0) { sig = '+'; } return (+(Math.round(+arr[0] + 'e' + sig + (+arr[1] + prec)) + 'e-' + prec)).toFixed(prec); } }; // @todo: for IE parseFloat(0.55).toFixed(0) = 0; s = (prec ? toFixedFix(n, prec).toString() : '' + Math.round(n)).split('.'); if (s[0].length > 3) { s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep); } if ((s[1] || '').length < prec) { s[1] = s[1] || ''; s[1] += new Array(prec - s[1].length + 1).join('0'); } return s.join(dec); } /** * 检查变量是否为空 */ function isEmpty(val) { try { if (val == '' || val == null || val == undefined) { return true; } // 判断数字是否是NaN if (typeof val === "number") { if (isNaN(val)) { return true; } else { return false; } } // 判断参数是否是布尔、函数、日期、正则,是则返回false if (typeof val === "boolean" || typeof val === "function" || val instanceof Date || val instanceof RegExp) { return false; } //判断参数是否是字符串,去空,如果长度为0则返回true if (typeof val === "string") { if (val.trim().length == 0) { return true; } else { return false; } } if (_typeof(val) === 'object') { // 判断参数是否是数组,数组为空则返回true if (val instanceof Array) { if (val.length == 0) { return true; } else { return false; } } //判断参数是否是对象,判断是否是空对象,是则返回true if (val instanceof Object) { //判断对象属性个数 if (Object.getOwnPropertyNames(val).length == 0) { return true; } else { return false; } } } } catch (e) { return false; } } /** * 检查变量是否不为空 */ function isNotEmpty(value) { return !isEmpty(value); } /** * 清除字符串两边的空格 */ String.prototype.trim = function () { return this.replace(/^\s+|\s+$/g, ''); }; /** * 封装全部替换字符串 */ String.prototype.replaceAll = function (search, replace) { return this.replace(new RegExp(search, "gm"), replace); }; /** * 正则去掉所有的html标记 * @param {*} str */ function delHtmlTag(str) { return str.replace(/<[^>]+>/g, ""); } function isWeiXin() { var ua = window.navigator.userAgent.toLowerCase(); if (ua.match(/MicroMessenger/i) == 'micromessenger') { return true; } else { return false; } } function toastrSuccess(content) { if (isWeiXin()) { $.toastr('success', content); } else { top.$.toastr('success', content); } } function toastrError(content) { if (isWeiXin()) { $.toastr('error', content); } else { top.$.toastr('error', content); } } function url(uri, params) { query = params == '' || params === undefined ? '' : '?' + $.param(params); return settings.public_url + '/' + uri + query; } /** * 时间戳格式化 */ function format_datetime(value) { function add0(v) { return v < 10 ? '0' + v : v; } value = parseInt(value) * 1000; var time = new Date(value); var y = time.getFullYear(); var m = time.getMonth() + 1; var d = time.getDate(); var h = time.getHours(); var mm = time.getMinutes(); var s = time.getSeconds(); return y + '-' + add0(m) + '-' + add0(d) + ' ' + add0(h) + ':' + add0(mm); } /** * 时间戳格式化 */ function format_date(value) { function add0(v) { return v < 10 ? '0' + v : v; } value = parseInt(value) * 1000; var time = new Date(value); var y = time.getFullYear(); var m = time.getMonth() + 1; var d = time.getDate(); var h = time.getHours(); var mm = time.getMinutes(); var s = time.getSeconds(); return y + '-' + add0(m) + '-' + add0(d); } /** * ajax 提交 * @param {*} table * @param {*} callback */ function ajaxSubmit(table, callback) { // 监听提交事件 $('#' + table + '-form-submit').on('click', function () { var me = $('#' + table); var url = me.attr('action'); var data = me.serialize(); var rows = {}; var rows = gridListData(table); if (rows === false) { return; } data = data + '&' + $.param(rows); var loading = showLoading(); $.post(url, data, function (res) { if (typeof callback === 'function') { callback(res); } else { if (res.status) { toastrSuccess(res.data); if (res.url) { self.location.href = res.url; } } else { toastrError(res.data); } } }, 'json').complete(function () { layer.close(loading); }); return false; }); } /** * 获取框架的name * @returns */ function getIframeName() { var name = window.name; return name ? name.replace('iframe_', '') : ''; } /** * 获取框架的document * @param {*} iframe_id * @returns */ function getIframeDocument(iframe_id) { if (iframe_id) { var iframe = window.frames['iframe_' + iframe_id]; if (iframe) { return iframe.document; } else {//toastrError('iframe_id参数无效。'); } } return null; } /** * 数据加载提示 */ function showLoading(msg) { var loading = layer.msg(msg || '数据提交中...', { icon: 16, shade: 0.1, time: 1000 * 120 }); return loading; } /** * 格式化文件大小 * @param {*} fileSize */ function fileFormatSize(fileSize) { if (fileSize < 1024) { return fileSize + 'B'; } else if (fileSize < 1024 * 1024) { var temp = fileSize / 1024; temp = temp.toFixed(2); return temp + 'KB'; } else if (fileSize < 1024 * 1024 * 1024) { var temp = fileSize / (1024 * 1024); temp = temp.toFixed(2); return temp + 'MB'; } else { var temp = fileSize / (1024 * 1024 * 1024); temp = temp.toFixed(2); return temp + 'GB'; } } /** * 扫码上传功能 */ function FindFile(inputId, key) { $.post(app.url('index/attachment/draft'), { key: key }, function (data) { var qrArray = []; var fileDraft = "#fileDraft_" + inputId; var items = $(fileDraft).find(".id"); $.each(items, function (i, row) { qrArray.push($(this).val()); }); $.each(data, function (i, row) { if (qrArray.indexOf(row.id + "") == -1) { row.size = fileFormatSize(row.size); var html = template("uploader-item-tpl", row); $(fileDraft).append(html); } }); }); } /** * 格式为数值 * @param {*} value */ function toNumber(value) { value = parseFloat(value); return isNaN(value) ? 0 : isFinite(value) ? value : 0; } /** * 实现StringBuilder */ function StringBuilder() { this._stringArray = new Array(); } StringBuilder.prototype.append = function (str) { this._stringArray.push(str); }; StringBuilder.prototype.appendLine = function (str) { this._stringArray.push(str + "\n"); }; StringBuilder.prototype.toString = function (joinGap) { return this._stringArray.join(joinGap); }; /** * 本地导出excel * @param {*} grid * @param {*} name */ function LocalExport(grid, name) { if (grid.api.getDisplayedRowCount() == 0) { toastrError("表格无数据,无法导出."); return; } function getColumnsTable(columns) { var table = []; getColumnsRows(columns, 0, table); return table; } function getColumnsRows(columns, level, table) { var row = null; if (table.length > level) { row = table[level]; } else { row = []; table.push(row); } $.each(columns, function (name, column) { var children = column['children']; if (children != null) { column['colspan'] = children.length; getColumnsRows(children, level + 1, table); } column['rowspan'] = 1; row.push(column); }); } function getColumnsBottom(columns) { var columnsBottom = []; $.each(columns, function (i, column) { if (column['children'] != null) { var children = column['children']; $.each(getColumnsBottom(children), function (j, v) { columnsBottom.push(v); }); } else { columnsBottom.push(column); } }); return columnsBottom; } var columns = []; $.each(grid.columnDefs, function (i, column) { if (column['checkboxSelection'] == true) { return; } if (column['cellRenderer'] == '"actionCellRenderer"') { return; } columns.push(column); }); var columnsBottom = getColumnsBottom(columns); var columnsTable = getColumnsTable(columns); console.log("开始导出任务:" + name); var sb = new StringBuilder(); // 写出列名 var columnsCount = columnsTable.length - 1; $.each(columnsTable, function (i, rows) { var columnsRow = rows; sb.appendLine(''); $.each(columnsRow, function (j, column) { var rowspan = toNumber(column['rowspan']); var colspan = toNumber(column['colspan']); if (columnsCount > i) { if (column['children'] == null) { rowspan = rowspan + (i + 1); } } var s = '' + column['headerName'] + ''; sb.appendLine(s); }); sb.appendLine(''); }); // 写出数据 var count = 0; grid.api.forEachNode(function (rowNode, index) { var row = rowNode.data; sb.append(""); count++; $.each(columnsBottom, function (n, column) { var value; if (column['field'] == null) { value = ''; } else { value = row[column['field']] || ''; } if (column['cellRenderer'] == 'htmlCellRenderer') { value = delHtmlTag(value); } if (column['headerName'] == '序号') { value = count; } var style = []; if (column.type == "number") { var options = column.numberOptions || {}; var places = options.places == undefined ? 2 : options.places; value = parseFloat(value); value = isNaN(value) ? 0 : value.toFixed(places); } else if (column.form_type == 'date') {} else { style.push('mso-number-format:\'@\''); } sb.appendLine('' + value + ''); }); sb.appendLine(""); }); console.log("结束导出任务:" + name); var worksheet = 'Sheet1'; var excel = sb.toString(" "); // 下载的表格模板数据 var template = '' + '' + '' + excel + '
'; // 保存文件到本地 function saveShareContent(content, fileName) { var downLink = document.createElement('a'); downLink.download = fileName; // 字符内容转换为blod地址 var blob = new Blob([content]); downLink.href = URL.createObjectURL(blob); // 链接插入到页面 document.body.appendChild(downLink); downLink.click(); // 移除下载链接 document.body.removeChild(downLink); } var d = new Date(); var date = [d.getFullYear(), d.getMonth() + 1, d.getDate()].join('-'); saveShareContent(template, name + "-" + date + ".xls"); } /** * 导出普通table成xls * @param {*} id * @param {*} name */ function LocalTableExport(id, name) { var table = $('#' + id); var preserveColors = table.hasClass('table2excel_with_colors') ? true : false; var d = new Date(); var date = [d.getFullYear(), d.getMonth() + 1, d.getDate()].join('-'); table.table2excel({ exclude: ".noExl", name: name, filename: name + date + ".xls", fileext: ".xls", exclude_img: true, exclude_links: true, exclude_inputs: true, preserveColors: preserveColors }); } /** * 选择行政区域 */ function regionSelect() { var params = arguments; var a = { 'a1': '省', 'a2': '市', 'a3': '县' }; function getRegion(id, layer, parent_id, value) { $.get(app.url('index/api/region', { layer: layer, parent_id: parent_id }), function (res) { var option = ''; $.map(res, function (row) { option += ''; }); var e = $('#' + id).html(option); if (value > 0) { e.val(value); } }); } $('#' + params[0]).on('change', function () { getRegion(params[1], 2, this.value, 0); $('#' + params[1]).html(''); $('#' + params[2]).html(''); }); $('#' + params[1]).on('change', function () { getRegion(params[2], 3, this.value, 0); $('#' + params[2]).html(''); }); getRegion(params[0], 1, 0, params[3]); if (params[3]) { getRegion(params[1], 2, params[3], params[4]); if (params[4]) { getRegion(params[2], 3, params[4], params[5]); } } } ;