UNPKG

vxe-table-demonic

Version:

一个基于 vue 的 PC 端表单/表格组件,支持增删改查、虚拟列表、虚拟树、懒加载、快捷菜单、数据校验、树形结构、打印导出、表单渲染、数据分页、弹窗、自定义模板、渲染器、JSON 配置式...

1,300 lines (1,298 loc) 52.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _vue = require("vue"); var _xeUtils = _interopRequireDefault(require("xe-utils")); var _utils = require("../../tools/utils"); var _dom = require("../../tools/dom"); var _log = require("../../tools/log"); var _conf = _interopRequireDefault(require("../../v-x-e-table/src/conf")); var _vXETable = require("../../v-x-e-table"); var _props = _interopRequireDefault(require("../../table/src/props")); var _emits = _interopRequireDefault(require("../../table/src/emits")); var _size = require("../../hooks/size"); var _event = require("../../tools/event"); var _vn = require("../../tools/vn"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var __assign = void 0 && (void 0).__assign || function () { __assign = Object.assign || function (t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __spreadArray = void 0 && (void 0).__spreadArray || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; var tableComponentPropKeys = Object.keys(_props.default); var tableComponentMethodKeys = ['clearAll', 'syncData', 'updateData', 'loadData', 'reloadData', 'reloadRow', 'loadColumn', 'reloadColumn', 'getRowNode', 'getColumnNode', 'getRowIndex', 'getVTRowIndex', 'getVMRowIndex', 'getColumnIndex', 'getVTColumnIndex', 'getVMColumnIndex', 'createData', 'createRow', 'revertData', 'clearData', 'isInsertByRow', 'isUpdateByRow', 'getColumns', 'getColumnById', 'getColumnByField', 'getTableColumn', 'getData', 'getCheckboxRecords', 'getParentRow', 'getRowSeq', 'getRowById', 'getRowid', 'getTableData', 'setColumnFixed', 'clearColumnFixed', 'setColumnWidth', 'getColumnWidth', 'hideColumn', 'showColumn', 'resetColumn', 'refreshColumn', 'refreshScroll', 'recalculate', 'closeTooltip', 'isAllCheckboxChecked', 'isAllCheckboxIndeterminate', 'getCheckboxIndeterminateRecords', 'setCheckboxRow', 'isCheckedByCheckboxRow', 'isIndeterminateByCheckboxRow', 'toggleCheckboxRow', 'setAllCheckboxRow', 'getRadioReserveRecord', 'clearRadioReserve', 'getCheckboxReserveRecords', 'clearCheckboxReserve', 'toggleAllCheckboxRow', 'clearCheckboxRow', 'setCurrentRow', 'isCheckedByRadioRow', 'setRadioRow', 'clearCurrentRow', 'clearRadioRow', 'getCurrentRecord', 'getRadioRecord', 'getCurrentColumn', 'setCurrentColumn', 'clearCurrentColumn', 'setPendingRow', 'togglePendingRow', 'getPendingRecords', 'clearPendingRow', 'sort', 'clearSort', 'isSort', 'getSortColumns', 'closeFilter', 'isFilter', 'isActiveFilterByColumn', 'isRowExpandLoaded', 'clearRowExpandLoaded', 'reloadRowExpand', 'reloadRowExpand', 'toggleRowExpand', 'setAllRowExpand', 'setRowExpand', 'isExpandByRow', 'isRowExpandByRow', 'clearRowExpand', 'clearRowExpandReserve', 'getRowExpandRecords', 'getTreeExpandRecords', 'isTreeExpandLoaded', 'clearTreeExpandLoaded', 'reloadTreeExpand', 'reloadTreeChilds', 'toggleTreeExpand', 'setAllTreeExpand', 'setTreeExpand', 'isTreeExpandByRow', 'clearTreeExpand', 'clearTreeExpandReserve', 'getScroll', 'scrollTo', 'scrollToRow', 'scrollToColumn', 'clearScroll', 'updateFooter', 'updateStatus', 'setMergeCells', 'removeInsertRow', 'removeMergeCells', 'getMergeCells', 'clearMergeCells', 'setMergeFooterItems', 'removeMergeFooterItems', 'getMergeFooterItems', 'clearMergeFooterItems', 'openTooltip', 'focus', 'blur', 'connect']; var gridComponentEmits = __spreadArray(__spreadArray([], _emits.default, true), ['page-change', 'form-submit', 'form-submit-invalid', 'form-reset', 'form-collapse', 'form-toggle-collapse', 'proxy-query', 'proxy-delete', 'proxy-save', 'toolbar-button-click', 'toolbar-tool-click', 'zoom'], false); var _default = (0, _vue.defineComponent)({ name: 'VxeGrid', props: __assign(__assign({}, _props.default), { layouts: Array, columns: Array, pagerConfig: Object, proxyConfig: Object, toolbarConfig: Object, formConfig: Object, zoomConfig: Object, size: { type: String, default: function () { return _conf.default.grid.size || _conf.default.size; } } }), emits: gridComponentEmits, setup: function (props, context) { var slots = context.slots, emit = context.emit; var xID = _xeUtils.default.uniqueId(); var instance = (0, _vue.getCurrentInstance)(); var computeSize = (0, _size.useSize)(props); var reactData = (0, _vue.reactive)({ tableLoading: false, proxyInited: false, isZMax: false, tableData: [], filterData: [], formData: {}, sortData: [], tZindex: 0, tablePage: { total: 0, pageSize: _conf.default.pager.pageSize || 10, currentPage: 1 } }); var refElem = (0, _vue.ref)(); var refTable = (0, _vue.ref)(); var refForm = (0, _vue.ref)(); var refToolbar = (0, _vue.ref)(); var refPager = (0, _vue.ref)(); var refFormWrapper = (0, _vue.ref)(); var refToolbarWrapper = (0, _vue.ref)(); var refTopWrapper = (0, _vue.ref)(); var refBottomWrapper = (0, _vue.ref)(); var refPagerWrapper = (0, _vue.ref)(); var extendTableMethods = function (methodKeys) { var funcs = {}; methodKeys.forEach(function (name) { funcs[name] = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var $xetable = refTable.value; if ($xetable && $xetable[name]) { return $xetable[name].apply($xetable, args); } }; }); return funcs; }; var gridExtendTableMethods = extendTableMethods(tableComponentMethodKeys); tableComponentMethodKeys.forEach(function (name) { gridExtendTableMethods[name] = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var $xetable = refTable.value; if ($xetable && $xetable[name]) { return $xetable && $xetable[name].apply($xetable, args); } }; }); var computeProxyOpts = (0, _vue.computed)(function () { return Object.assign({}, _conf.default.grid.proxyConfig, props.proxyConfig); }); var computeIsMsg = (0, _vue.computed)(function () { var proxyOpts = computeProxyOpts.value; return proxyOpts.message !== false; }); var computePagerOpts = (0, _vue.computed)(function () { return Object.assign({}, _conf.default.grid.pagerConfig, props.pagerConfig); }); var computeFormOpts = (0, _vue.computed)(function () { return Object.assign({}, _conf.default.grid.formConfig, props.formConfig); }); var computeToolbarOpts = (0, _vue.computed)(function () { return Object.assign({}, _conf.default.grid.toolbarConfig, props.toolbarConfig); }); var computeZoomOpts = (0, _vue.computed)(function () { return Object.assign({}, _conf.default.grid.zoomConfig, props.zoomConfig); }); var computeStyles = (0, _vue.computed)(function () { return reactData.isZMax ? { zIndex: reactData.tZindex } : null; }); var computeTableExtendProps = (0, _vue.computed)(function () { var rest = {}; var gridProps = props; tableComponentPropKeys.forEach(function (key) { rest[key] = gridProps[key]; }); return rest; }); var refMaps = { refElem: refElem, refTable: refTable, refForm: refForm, refToolbar: refToolbar, refPager: refPager }; var computeMaps = { computeProxyOpts: computeProxyOpts, computePagerOpts: computePagerOpts, computeFormOpts: computeFormOpts, computeToolbarOpts: computeToolbarOpts, computeZoomOpts: computeZoomOpts }; var $xegrid = { xID: xID, props: props, context: context, instance: instance, reactData: reactData, getRefMaps: function () { return refMaps; }, getComputeMaps: function () { return computeMaps; } }; var gridMethods = {}; var computeTableProps = (0, _vue.computed)(function () { var seqConfig = props.seqConfig, pagerConfig = props.pagerConfig, loading = props.loading, editConfig = props.editConfig, proxyConfig = props.proxyConfig; var isZMax = reactData.isZMax, tableLoading = reactData.tableLoading, tablePage = reactData.tablePage, tableData = reactData.tableData; var tableExtendProps = computeTableExtendProps.value; var proxyOpts = computeProxyOpts.value; var pagerOpts = computePagerOpts.value; var tableProps = Object.assign({}, tableExtendProps); if (isZMax) { if (tableExtendProps.maxHeight) { tableProps.maxHeight = 'auto'; } else { tableProps.height = 'auto'; } } if (proxyConfig && (0, _utils.isEnableConf)(proxyOpts)) { tableProps.loading = loading || tableLoading; tableProps.data = tableData; if (pagerConfig && proxyOpts.seq && (0, _utils.isEnableConf)(pagerOpts)) { tableProps.seqConfig = Object.assign({}, seqConfig, { startIndex: (tablePage.currentPage - 1) * tablePage.pageSize }); } } if (editConfig) { tableProps.editConfig = Object.assign({}, editConfig); } return tableProps; }); var initToolbar = function () { var toolbarOpts = computeToolbarOpts.value; if (props.toolbarConfig && (0, _utils.isEnableConf)(toolbarOpts)) { (0, _vue.nextTick)(function () { var $xetable = refTable.value; var $xetoolbar = refToolbar.value; if ($xetable && $xetoolbar) { $xetable.connect($xetoolbar); } }); } }; var initPages = function () { var tablePage = reactData.tablePage; var pagerConfig = props.pagerConfig; var pagerOpts = computePagerOpts.value; var currentPage = pagerOpts.currentPage, pageSize = pagerOpts.pageSize; if (pagerConfig && (0, _utils.isEnableConf)(pagerOpts)) { if (currentPage) { tablePage.currentPage = currentPage; } if (pageSize) { tablePage.pageSize = pageSize; } } }; var triggerPendingEvent = function (code) { var isMsg = computeIsMsg.value; var $xetable = refTable.value; var selectRecords = $xetable.getCheckboxRecords(); if (selectRecords.length) { $xetable.togglePendingRow(selectRecords); gridExtendTableMethods.clearCheckboxRow(); } else { if (isMsg) { // 检测弹窗模块 if (process.env.NODE_ENV === 'development') { if (!_vXETable.VXETable.modal) { (0, _log.errLog)('vxe.error.reqModule', ['Modal']); } } _vXETable.VXETable.modal.message({ id: code, content: _conf.default.i18n('vxe.grid.selectOneRecord'), status: 'warning' }); } } }; var getRespMsg = function (rest, defaultMsg) { var proxyOpts = computeProxyOpts.value; var _a = proxyOpts.props, proxyProps = _a === void 0 ? {} : _a; var msg; if (rest && proxyProps.message) { msg = _xeUtils.default.get(rest, proxyProps.message); } return msg || _conf.default.i18n(defaultMsg); }; var handleDeleteRow = function (code, alertKey, callback) { var isMsg = computeIsMsg.value; var selectRecords = gridExtendTableMethods.getCheckboxRecords(); if (isMsg) { if (selectRecords.length) { return _vXETable.VXETable.modal.confirm({ id: "cfm_".concat(code), content: _conf.default.i18n(alertKey), escClosable: true }).then(function (type) { if (type === 'confirm') { return callback(); } }); } else { // 检测弹窗模块 if (process.env.NODE_ENV === 'development') { if (!_vXETable.VXETable.modal) { (0, _log.errLog)('vxe.error.reqModule', ['Modal']); } } _vXETable.VXETable.modal.message({ id: "msg_".concat(code), content: _conf.default.i18n('vxe.grid.selectOneRecord'), status: 'warning' }); } } else { if (selectRecords.length) { callback(); } } return Promise.resolve(); }; var pageChangeEvent = function (params) { var proxyConfig = props.proxyConfig; var tablePage = reactData.tablePage; var currentPage = params.currentPage, pageSize = params.pageSize; var proxyOpts = computeProxyOpts.value; tablePage.currentPage = currentPage; tablePage.pageSize = pageSize; gridMethods.dispatchEvent('page-change', params); if (proxyConfig && (0, _utils.isEnableConf)(proxyOpts)) { gridMethods.commitProxy('query').then(function (rest) { gridMethods.dispatchEvent('proxy-query', rest, params.$event); }); } }; var sortChangeEvent = function (params) { var $xetable = refTable.value; var proxyConfig = props.proxyConfig; var computeSortOpts = $xetable.getComputeMaps().computeSortOpts; var proxyOpts = computeProxyOpts.value; var sortOpts = computeSortOpts.value; // 如果是服务端排序 if (sortOpts.remote) { reactData.sortData = params.sortList; if (proxyConfig && (0, _utils.isEnableConf)(proxyOpts)) { reactData.tablePage.currentPage = 1; gridMethods.commitProxy('query').then(function (rest) { gridMethods.dispatchEvent('proxy-query', rest, params.$event); }); } } gridMethods.dispatchEvent('sort-change', params); }; var filterChangeEvent = function (params) { var $xetable = refTable.value; var proxyConfig = props.proxyConfig; var computeFilterOpts = $xetable.getComputeMaps().computeFilterOpts; var proxyOpts = computeProxyOpts.value; var filterOpts = computeFilterOpts.value; // 如果是服务端过滤 if (filterOpts.remote) { reactData.filterData = params.filterList; if (proxyConfig && (0, _utils.isEnableConf)(proxyOpts)) { reactData.tablePage.currentPage = 1; gridMethods.commitProxy('query').then(function (rest) { gridMethods.dispatchEvent('proxy-query', rest, params.$event); }); } } gridMethods.dispatchEvent('filter-change', params); }; var submitFormEvent = function (params) { var proxyConfig = props.proxyConfig; var proxyOpts = computeProxyOpts.value; if (proxyConfig && (0, _utils.isEnableConf)(proxyOpts)) { gridMethods.commitProxy('reload').then(function (rest) { gridMethods.dispatchEvent('proxy-query', __assign(__assign({}, rest), { isReload: true }), params.$event); }); } gridMethods.dispatchEvent('form-submit', params); }; var resetFormEvent = function (params) { var proxyConfig = props.proxyConfig; var proxyOpts = computeProxyOpts.value; if (proxyConfig && (0, _utils.isEnableConf)(proxyOpts)) { gridMethods.commitProxy('reload').then(function (rest) { gridMethods.dispatchEvent('proxy-query', __assign(__assign({}, rest), { isReload: true }), params.$event); }); } gridMethods.dispatchEvent('form-reset', params); }; var submitInvalidEvent = function (params) { gridMethods.dispatchEvent('form-submit-invalid', params); }; var collapseEvent = function (params) { (0, _vue.nextTick)(function () { return gridExtendTableMethods.recalculate(true); }); gridMethods.dispatchEvent('form-toggle-collapse', params); gridMethods.dispatchEvent('form-collapse', params); }; var handleZoom = function (isMax) { var isZMax = reactData.isZMax; if (isMax ? !isZMax : isZMax) { reactData.isZMax = !isZMax; if (reactData.tZindex < (0, _utils.getLastZIndex)()) { reactData.tZindex = (0, _utils.nextZIndex)(); } } return (0, _vue.nextTick)().then(function () { return gridExtendTableMethods.recalculate(true); }).then(function () { return reactData.isZMax; }); }; var getFuncSlot = function (optSlots, slotKey) { var funcSlot = optSlots[slotKey]; if (funcSlot) { if (_xeUtils.default.isString(funcSlot)) { if (slots[funcSlot]) { return slots[funcSlot]; } else { if (process.env.NODE_ENV === 'development') { (0, _log.errLog)('vxe.error.notSlot', [funcSlot]); } } } else { return funcSlot; } } return null; }; /** * 渲染表单 */ var renderForms = function () { var formConfig = props.formConfig, proxyConfig = props.proxyConfig; var formData = reactData.formData; var proxyOpts = computeProxyOpts.value; var formOpts = computeFormOpts.value; var restVNs = []; if (formConfig && (0, _utils.isEnableConf)(formOpts) || slots.form) { var slotVNs = []; if (slots.form) { slotVNs = slots.form({ $grid: $xegrid }); } else { if (formOpts.items) { var formSlots_1 = {}; if (!formOpts.inited) { formOpts.inited = true; var beforeItem_1 = proxyOpts.beforeItem; if (proxyOpts && beforeItem_1) { formOpts.items.forEach(function (item) { beforeItem_1({ $grid: $xegrid, item: item }); }); } } // 处理插槽 formOpts.items.forEach(function (item) { _xeUtils.default.each(item.slots, function (func) { if (!_xeUtils.default.isFunction(func)) { if (slots[func]) { formSlots_1[func] = slots[func]; } } }); }); slotVNs.push((0, _vue.h)((0, _vue.resolveComponent)('vxe-form'), __assign(__assign({ ref: refForm }, Object.assign({}, formOpts, { data: proxyConfig && (0, _utils.isEnableConf)(proxyOpts) && proxyOpts.form ? formData : formOpts.data })), { onSubmit: submitFormEvent, onReset: resetFormEvent, onSubmitInvalid: submitInvalidEvent, onCollapse: collapseEvent }), formSlots_1)); } } restVNs.push((0, _vue.h)('div', { ref: refFormWrapper, key: 'form', class: 'vxe-grid--form-wrapper' }, slotVNs)); } return restVNs; }; /** * 渲染工具栏 */ var renderToolbars = function () { var toolbarConfig = props.toolbarConfig; var toolbarOpts = computeToolbarOpts.value; var restVNs = []; if (toolbarConfig && (0, _utils.isEnableConf)(toolbarOpts) || slots.toolbar) { var slotVNs = []; if (slots.toolbar) { slotVNs = slots.toolbar({ $grid: $xegrid }); } else { var toolbarOptSlots = toolbarOpts.slots; var buttonsSlot = void 0; var toolsSlot = void 0; var toolbarSlots = {}; if (toolbarOptSlots) { buttonsSlot = getFuncSlot(toolbarOptSlots, 'buttons'); toolsSlot = getFuncSlot(toolbarOptSlots, 'tools'); if (buttonsSlot) { toolbarSlots.buttons = buttonsSlot; } if (toolsSlot) { toolbarSlots.tools = toolsSlot; } } slotVNs.push((0, _vue.h)((0, _vue.resolveComponent)('vxe-toolbar'), __assign({ ref: refToolbar }, toolbarOpts), toolbarSlots)); } restVNs.push((0, _vue.h)('div', { ref: refToolbarWrapper, key: 'toolbar', class: 'vxe-grid--toolbar-wrapper' }, slotVNs)); } return restVNs; }; /** * 渲染表格顶部区域 */ var renderTops = function () { if (slots.top) { return [(0, _vue.h)('div', { ref: refTopWrapper, key: 'top', class: 'vxe-grid--top-wrapper' }, slots.top({ $grid: $xegrid }))]; } return []; }; var defaultLayouts = ['Form', 'Toolbar', 'Top', 'Table', 'Bottom', 'Pager']; var renderLayout = function () { var layouts = props.layouts; var vns = []; var currLayouts = layouts && layouts.length ? layouts : _conf.default.grid.layouts || defaultLayouts; currLayouts.forEach(function (name) { switch (name) { case 'Form': vns.push(renderForms()); break; case 'Toolbar': vns.push(renderToolbars()); break; case 'Top': vns.push(renderTops()); break; case 'Table': vns.push(renderTables()); break; case 'Bottom': vns.push(renderBottoms()); break; case 'Pager': vns.push(renderPagers()); break; default: if (process.env.NODE_ENV === 'development') { (0, _log.errLog)('vxe.error.notProp', ["layouts -> ".concat(name)]); } break; } }); return vns; }; var tableCompEvents = {}; _emits.default.forEach(function (name) { var type = _xeUtils.default.camelCase("on-".concat(name)); tableCompEvents[type] = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return emit.apply(void 0, __spreadArray([name], args, false)); }; }); /** * 渲染表格 */ var renderTables = function () { var proxyConfig = props.proxyConfig; var tableProps = computeTableProps.value; var proxyOpts = computeProxyOpts.value; var tableOns = Object.assign({}, tableCompEvents); var emptySlot = slots.empty; var loadingSlot = slots.loading; if (proxyConfig && (0, _utils.isEnableConf)(proxyOpts)) { if (proxyOpts.sort) { tableOns.onSortChange = sortChangeEvent; } if (proxyOpts.filter) { tableOns.onFilterChange = filterChangeEvent; } } var slotObj = {}; if (emptySlot) { slotObj.empty = function () { return emptySlot({}); }; } if (loadingSlot) { slotObj.loading = function () { return loadingSlot({}); }; } return [(0, _vue.h)((0, _vue.resolveComponent)('vxe-table'), __assign(__assign({ ref: refTable, key: 'table' }, tableProps), tableOns), slotObj)]; }; /** * 渲染表格底部区域 */ var renderBottoms = function () { if (slots.bottom) { return [(0, _vue.h)('div', { ref: refBottomWrapper, key: 'bottom', class: 'vxe-grid--bottom-wrapper' }, slots.bottom({ $grid: $xegrid }))]; } return []; }; /** * 渲染分页 */ var renderPagers = function () { var proxyConfig = props.proxyConfig, pagerConfig = props.pagerConfig; var proxyOpts = computeProxyOpts.value; var pagerOpts = computePagerOpts.value; var restVNs = []; if (pagerConfig && (0, _utils.isEnableConf)(pagerOpts) || slots.pager) { var slotVNs = []; if (slots.pager) { slotVNs = slots.pager({ $grid: $xegrid }); } else { var pagerOptSlots = pagerOpts.slots; var pagerSlots = {}; var leftSlot = void 0; var rightSlot = void 0; if (pagerOptSlots) { leftSlot = getFuncSlot(pagerOptSlots, 'left'); rightSlot = getFuncSlot(pagerOptSlots, 'right'); if (leftSlot) { pagerSlots.left = leftSlot; } if (rightSlot) { pagerSlots.right = rightSlot; } } slotVNs.push((0, _vue.h)((0, _vue.resolveComponent)('vxe-pager'), __assign(__assign(__assign({ ref: refPager }, pagerOpts), proxyConfig && (0, _utils.isEnableConf)(proxyOpts) ? reactData.tablePage : {}), { onPageChange: pageChangeEvent }), pagerSlots)); } restVNs.push((0, _vue.h)('div', { ref: refPagerWrapper, key: 'pager', class: 'vxe-grid--pager-wrapper' }, slotVNs)); } return restVNs; }; var initProxy = function () { var proxyConfig = props.proxyConfig, formConfig = props.formConfig; var proxyInited = reactData.proxyInited; var proxyOpts = computeProxyOpts.value; var formOpts = computeFormOpts.value; if (proxyConfig && (0, _utils.isEnableConf)(proxyOpts)) { if (formConfig && (0, _utils.isEnableConf)(formOpts) && proxyOpts.form && formOpts.items) { var formData_1 = {}; formOpts.items.forEach(function (item) { var field = item.field, itemRender = item.itemRender; if (field) { var itemValue = null; if (itemRender) { var defaultValue = itemRender.defaultValue; if (_xeUtils.default.isFunction(defaultValue)) { itemValue = defaultValue({ item: item }); } else if (!_xeUtils.default.isUndefined(defaultValue)) { itemValue = defaultValue; } } formData_1[field] = itemValue; } }); reactData.formData = formData_1; } if (!proxyInited) { reactData.proxyInited = true; if (proxyOpts.autoLoad !== false) { (0, _vue.nextTick)().then(function () { return gridMethods.commitProxy('_init'); }).then(function (rest) { gridMethods.dispatchEvent('proxy-query', __assign(__assign({}, rest), { isInited: true }), new Event('init')); }); } } } }; gridMethods = { dispatchEvent: function (type, params, evnt) { emit(type, Object.assign({ $grid: $xegrid, $event: evnt }, params)); }, /** * 提交指令,支持 code 或 button * @param {String/Object} code 字符串或对象 */ commitProxy: function (proxyTarget) { var args = []; for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } var toolbarConfig = props.toolbarConfig, pagerConfig = props.pagerConfig, editRules = props.editRules; var tablePage = reactData.tablePage, formData = reactData.formData; var isMsg = computeIsMsg.value; var proxyOpts = computeProxyOpts.value; var pagerOpts = computePagerOpts.value; var toolbarOpts = computeToolbarOpts.value; var beforeQuery = proxyOpts.beforeQuery, afterQuery = proxyOpts.afterQuery, beforeDelete = proxyOpts.beforeDelete, afterDelete = proxyOpts.afterDelete, beforeSave = proxyOpts.beforeSave, afterSave = proxyOpts.afterSave, _a = proxyOpts.ajax, ajax = _a === void 0 ? {} : _a, _b = proxyOpts.props, proxyProps = _b === void 0 ? {} : _b; var $xetable = refTable.value; var button = null; var code = null; if (_xeUtils.default.isString(proxyTarget)) { var buttons = toolbarOpts.buttons; var matchObj = toolbarConfig && (0, _utils.isEnableConf)(toolbarOpts) && buttons ? _xeUtils.default.findTree(buttons, function (item) { return item.code === proxyTarget; }, { children: 'dropdowns' }) : null; button = matchObj ? matchObj.item : null; code = proxyTarget; } else { button = proxyTarget; code = button.code; } var btnParams = button ? button.params : null; switch (code) { case 'insert': return $xetable.insert({}); case 'insert_edit': return $xetable.insert({}).then(function (_a) { var row = _a.row; return $xetable.setEditRow(row); }); // 已废弃 case 'insert_actived': return $xetable.insert({}).then(function (_a) { var row = _a.row; return $xetable.setEditRow(row); }); // 已废弃 case 'mark_cancel': triggerPendingEvent(code); break; case 'remove': return handleDeleteRow(code, 'vxe.grid.removeSelectRecord', function () { return $xetable.removeCheckboxRow(); }); case 'import': $xetable.importData(btnParams); break; case 'open_import': $xetable.openImport(btnParams); break; case 'export': $xetable.exportData(btnParams); break; case 'open_export': $xetable.openExport(btnParams); break; case 'reset_custom': return $xetable.resetColumn(true); case '_init': case 'reload': case 'query': { var ajaxMethods = ajax.query; if (ajaxMethods) { var isInited = code === '_init'; var isReload = code === 'reload'; var sortList = []; var filterList = []; var pageParams = {}; if (pagerConfig) { if (isInited || isReload) { tablePage.currentPage = 1; } if ((0, _utils.isEnableConf)(pagerOpts)) { pageParams = __assign({}, tablePage); } } if (isInited) { var computeSortOpts = $xetable.getComputeMaps().computeSortOpts; var sortOpts = computeSortOpts.value; var defaultSort = sortOpts.defaultSort; // 如果使用默认排序 if (defaultSort) { if (!_xeUtils.default.isArray(defaultSort)) { defaultSort = [defaultSort]; } sortList = defaultSort.map(function (item) { return { field: item.field, property: item.field, order: item.order }; }); } filterList = $xetable.getCheckedFilters(); } else { if (isReload) { $xetable.clearAll(); } else { sortList = $xetable.getSortColumns(); filterList = $xetable.getCheckedFilters(); } } var commitParams = { code: code, button: button, isInited: isInited, isReload: isReload, $grid: $xegrid, page: pageParams, sort: sortList.length ? sortList[0] : {}, sorts: sortList, filters: filterList, form: formData, options: ajaxMethods }; reactData.sortData = sortList; reactData.filterData = filterList; reactData.tableLoading = true; var applyArgs_1 = [commitParams].concat(args); return Promise.resolve((beforeQuery || ajaxMethods).apply(void 0, applyArgs_1)).then(function (rest) { reactData.tableLoading = false; if (rest) { if (pagerConfig && (0, _utils.isEnableConf)(pagerOpts)) { var total = _xeUtils.default.get(rest, proxyProps.total || 'page.total') || 0; tablePage.total = _xeUtils.default.toNumber(total); reactData.tableData = _xeUtils.default.get(rest, proxyProps.result || 'result') || []; // 检验当前页码,不能超出当前最大页数 var pageCount = Math.max(Math.ceil(total / tablePage.pageSize), 1); if (tablePage.currentPage > pageCount) { tablePage.currentPage = pageCount; } } else { reactData.tableData = (proxyProps.list ? _xeUtils.default.get(rest, proxyProps.list) : rest) || []; } } else { reactData.tableData = []; } if (afterQuery) { afterQuery.apply(void 0, applyArgs_1); } return { status: true }; }).catch(function () { reactData.tableLoading = false; return { status: false }; }); } else { if (process.env.NODE_ENV === 'development') { (0, _log.errLog)('vxe.error.notFunc', ['proxy-config.ajax.query']); } } break; } case 'delete': { var ajaxMethods_1 = ajax.delete; if (ajaxMethods_1) { var selectRecords_1 = gridExtendTableMethods.getCheckboxRecords(); var removeRecords_1 = selectRecords_1.filter(function (row) { return !$xetable.isInsertByRow(row); }); var body = { removeRecords: removeRecords_1 }; var commitParams = { $grid: $xegrid, code: code, button: button, body: body, form: formData, options: ajaxMethods_1 }; var applyArgs_2 = [commitParams].concat(args); if (selectRecords_1.length) { return handleDeleteRow(code, 'vxe.grid.deleteSelectRecord', function () { if (!removeRecords_1.length) { return $xetable.remove(selectRecords_1); } reactData.tableLoading = true; return Promise.resolve((beforeDelete || ajaxMethods_1).apply(void 0, applyArgs_2)).then(function (rest) { reactData.tableLoading = false; $xetable.setPendingRow(removeRecords_1, false); if (isMsg) { // 检测弹窗模块 if (process.env.NODE_ENV === 'development') { if (!_vXETable.VXETable.modal) { (0, _log.errLog)('vxe.error.reqModule', ['Modal']); } } _vXETable.VXETable.modal.message({ content: getRespMsg(rest, 'vxe.grid.delSuccess'), status: 'success' }); } if (afterDelete) { afterDelete.apply(void 0, applyArgs_2); } else { gridMethods.commitProxy('query'); } return { status: true }; }).catch(function (rest) { reactData.tableLoading = false; if (isMsg) { if (process.env.NODE_ENV === 'development') { if (!_vXETable.VXETable.modal.message) { (0, _log.errLog)('vxe.error.reqModule', ['Modal']); } } _vXETable.VXETable.modal.message({ id: code, content: getRespMsg(rest, 'vxe.grid.operError'), status: 'error' }); } return { status: false }; }); }); } else { if (isMsg) { // 检测弹窗模块 if (process.env.NODE_ENV === 'development') { if (!_vXETable.VXETable.modal) { (0, _log.errLog)('vxe.error.reqModule', ['Modal']); } } _vXETable.VXETable.modal.message({ id: code, content: _conf.default.i18n('vxe.grid.selectOneRecord'), status: 'warning' }); } } } else { if (process.env.NODE_ENV === 'development') { (0, _log.errLog)('vxe.error.notFunc', ['proxy-config.ajax.delete']); } } break; } case 'save': { var ajaxMethods_2 = ajax.save; if (ajaxMethods_2) { var body_1 = $xetable.getRecordset(); var insertRecords_1 = body_1.insertRecords, removeRecords_2 = body_1.removeRecords, updateRecords_1 = body_1.updateRecords, pendingRecords_1 = body_1.pendingRecords; var commitParams = { $grid: $xegrid, code: code, button: button, body: body_1, form: formData, options: ajaxMethods_2 }; var applyArgs_3 = [commitParams].concat(args); // 排除掉新增且标记为删除的数据 if (insertRecords_1.length) { body_1.pendingRecords = pendingRecords_1.filter(function (row) { return $xetable.findRowIndexOf(insertRecords_1, row) === -1; }); } // 排除已标记为删除的数据 if (pendingRecords_1.length) { body_1.insertRecords = insertRecords_1.filter(function (row) { return $xetable.findRowIndexOf(pendingRecords_1, row) === -1; }); } var restPromise = Promise.resolve(); if (editRules) { // 只校验新增和修改的数据 restPromise = $xetable.validate(body_1.insertRecords.concat(updateRecords_1)); } return restPromise.then(function (errMap) { if (errMap) { // 如果校验不通过 return; } if (body_1.insertRecords.length || removeRecords_2.length || updateRecords_1.length || body_1.pendingRecords.length) { reactData.tableLoading = true; return Promise.resolve((beforeSave || ajaxMethods_2).apply(void 0, applyArgs_3)).then(function (rest) { reactData.tableLoading = false; $xetable.clearPendingRow(); if (isMsg) { // 检测弹窗模块 if (process.env.NODE_ENV === 'development') { if (!_vXETable.VXETable.modal) { (0, _log.errLog)('vxe.error.reqModule', ['Modal']); } } _vXETable.VXETable.modal.message({ content: getRespMsg(rest, 'vxe.grid.saveSuccess'), status: 'success' }); } if (afterSave) { afterSave.apply(void 0, applyArgs_3); } else { gridMethods.commitProxy('query'); } return { status: true }; }).catch(function (rest) { reactData.tableLoading = false; if (isMsg) { // 检测弹窗模块 if (process.env.NODE_ENV === 'development') { if (!_vXETable.VXETable.modal) { (0, _log.errLog)('vxe.error.reqModule', ['Modal']); } } _vXETable.VXETable.modal.message({ id: code, content: getRespMsg(rest, 'vxe.grid.operError'), status: 'error' }); } return { status: false }; }); } else { if (isMsg) { // 检测弹窗模块 if (process.env.NODE_ENV === 'development') { if (!_vXETable.VXETable.modal) { (0, _log.errLog)('vxe.error.reqModule', ['Modal']); } } _vXETable.VXETable.modal.message({ id: code, content: _conf.default.i18n('vxe.grid.dataUnchanged'), status: 'info' }); } } }); } else { if (process.env.NODE_ENV === 'development') { (0, _log.errLog)('vxe.error.notFunc', ['proxy-config.ajax.save']); } } break; } default: { var gCommandOpts = _vXETable.VXETable.commands.get(code); if (gCommandOpts) { if (gCommandOpts.commandMethod) { gCommandOpts.commandMethod.apply(gCommandOpts, __spreadArray([{ code: code, button: button, $grid: $xegrid, $table: $xetable }], args, false)); } else { if (process.env.NODE_ENV === 'development') { (0, _log.errLog)('vxe.error.notCommands', [code]); } } } } } return (0, _vue.nextTick)(); }, zoom: function () { if (reactData.isZMax) { return gridMethods.revert(); } return gridMethods.maximize(); }, isMaximized: function () { return reactData.isZMax; }, maximize: function () { return handleZoom(true); }, revert: function () { return handleZoom(); }, getFormItems: function (itemIndex) { var formOpts = computeFormOpts.value; var formConfig = props.formConfig; var items = formOpts.items; var itemList = []; _xeUtils.default.eachTree(formConfig && (0, _utils.isEnableConf)(formOpts) && items ? items : [], function (item) { itemList.push(item); }, { children: 'children' }); return _xeUtils.default.isUndefined(itemIndex) ? itemList : itemList[itemIndex]; }, getProxyInfo: function () { var $xetable = refTable.value; if (props.proxyConfig) { var sortData = reactData.sortData; return { data: reactData.tableData, filter: reactData.filterData, form: reactData.formData, sort: sortData.length ? sortData[0] : {}, sorts: sortData, pager: reactData.tablePage, pendingRecords: $xetable ? $xetable.getPendingRecords() : [] }; } return null; } // setProxyInfo (options) { // if (props.proxyConfig && options) { // const { pager, form } = options // const proxyOpts = computeProxyOpts.value // if (pager) { // if (pager.currentPage) { // reactData.tablePage.currentPage = Number(pager.currentPage) // } // if (pager.pageSize) { // reactData.tablePage.pageSize = Number(pager.pageSize) // } // } // if (proxyOpts.form && form) { // Object.assign(reactData.formData, form) // } // } // return nextTick() // } }; // 检查插槽 if (process.env.NODE_ENV === 'development') { gridMethods.loadColumn = function (columns) { var $xetable = refTable.value; _xeUtils.default.eachTree(columns, function (column) { if (column.slots) { _xeUtils.default.each(column.slots, function (func) { if (!_xeUtils.default.isFunction(func)) { if (!slots[func]) { (0, _log.errLog)('vxe.error.notSlot', [func]); } } }); } }); return $xetable.loadColumn(columns); }; gridMethods.reloadColumn = function (columns) { gridExtendTableMethods.clearAll(); return gridMethods.loadColumn(columns); }; } var gridPrivateMethods = { extendTableMethods: extendTableMethods, callSlot: function (slotFunc, params) { if (slotFunc) { if (_xeUtils.default.isString(slotFunc)) { slotFunc = slots[slotFunc] || null; } if (_xeUtils.default.isFunction(slotFunc)) { return (0, _vn.getSlotVNs)(slotFunc(params)); } } return []; }, /** * 获取需要排除的高度 */ getExcludeHeight: function () { var height = props.height; var isZMax = reactData.isZMax; var el = refElem.value; var formWrapper = refFormWrapper.value; var toolbarWrapper = refToolbarWrapper.value; var topWrapper = refTopWrapper.value; var bottomWrapper = refBottomWrapper.value; var pagerWrapper = refPagerWrapper.value; var parentPaddingSize = isZMax || height !== 'auto' ? 0 : (0, _dom.getPaddingTopBottomSize)(el.parentNode); return parentPaddingSize + (0, _dom.getPaddingTopBottomSize)(el) + (0, _dom.getOffsetHeight)(formWrapper) + (0, _dom.getOffsetHeight)(toolbarWrapper) + (0, _dom.getOffsetHeight)(topWrapper) + (0, _dom.getOffsetHeight)(bottomWrapper) + (0, _dom.getOffsetHeight)(pagerWrapper); }, getParentHeight: function () { var el = refElem.value; if (el) { return (reactData.isZMax ? (0, _dom.getDomNode)().visibleHeight : _xeUtils.default.toNumber(getComputedStyle(el.parentNode).height)) - gridPrivateMethods.getExcludeHeight(); } return 0; }, triggerToolbarCommitEvent: function (params, evnt) { var code = params.code; return gridMethods.commitProxy(params, evnt).then(function (rest) { if (code && rest && rest.status && ['query', 'reload', 'delete', 'save'].includes(code)) { gridMethods.dispatchEvent(code === 'delete' || code === 'save' ? "proxy-".concat(code) : 'proxy-query', __assign(__assign({}, rest), { isReload: code === 'reload' }), evnt); } }); }, triggerToolbarBtnEvent: function (button, evnt) { gridPrivateMethods.triggerToolbarCommitEvent(button, evnt); gridMethods.dispatchEvent('toolbar-button-click', { code: button.code, button: button }, evnt); }, triggerToolbarTolEvent: function (tool, evnt) { gridPrivateMethods.triggerToolbarCommitEvent(tool, evnt); gridMethods.dispatchEvent('toolbar-tool-click', { code: tool.code, tool: tool, $event: evnt }); }, triggerZoomEvent: function (evnt) { gridMethods.zoom(); gridMethods.dispatchEvent('zoom', { type: reactData.isZMax ? 'max' : 'revert' }, evnt); } }; Object.assign($xegrid, gridExtendTableMethods, gridMethods, gridPrivateMethods); var columnFlag = (0, _vue.ref)(0); (0, _vue.watch)(function () { return props.columns ? props.columns.length : -1; }, function () { columnFlag.value++; }); (0, _vue.watch)(function () { return props.columns; }, function () { columnFlag.value++; }); (0, _vue.watch)(columnFlag, function () { (0, _vue.nextTick)(function () { return $xegrid.loadColumn(props.columns || []); }); }); (0, _vue.watch)(function () { return props.toolbarConfig; }, function () { initToolbar(); });