UNPKG

@fe6/water-pro

Version:

An enterprise-class UI design language and Vue-based implementation

323 lines (267 loc) 10.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useDataSource = useDataSource; var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _tslib = require("tslib"); var _vue = require("vue"); var _shared = require("@fe6/shared"); var _lodashEs = require("lodash"); var _useTimeout = require("../../../_util/hooks/use-timeout"); var _const = require("../const"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } function useDataSource(propsRef, _ref, emit) { var getPaginationInfo = _ref.getPaginationInfo, setPagination = _ref.setPagination, setLoading = _ref.setLoading, getFieldsValue = _ref.getFieldsValue, clearSelectedRowKeys = _ref.clearSelectedRowKeys, tableData = _ref.tableData; var searchState = (0, _vue.reactive)({ sortInfo: {}, filterInfo: {} }); var dataSourceRef = (0, _vue.ref)([]); // watchEffect(() => { // const { dataSource, api } = unref(propsRef); // !api && dataSource && (dataSourceRef.value = dataSource); // }); (0, _vue.watchEffect)(function () { tableData.value = (0, _vue.unref)(dataSourceRef); }); (0, _vue.watch)(function () { return (0, _vue.unref)(propsRef).dataSource; }, function () { var _unref = (0, _vue.unref)(propsRef), dataSource = _unref.dataSource, api = _unref.api; !api && dataSource && (dataSourceRef.value = dataSource); }, { immediate: true }); function handleTableChange(pagination, filters, sorter) { var _unref2 = (0, _vue.unref)(propsRef), clearSelectOnPageChange = _unref2.clearSelectOnPageChange, sortFn = _unref2.sortFn, filterFn = _unref2.filterFn; if (clearSelectOnPageChange) { clearSelectedRowKeys(); } setPagination(pagination); var params = {}; if (sorter && (0, _shared.isFunction)(sortFn)) { var sortInfo = sortFn(sorter); searchState.sortInfo = sortInfo; params.sortInfo = sortInfo; } if (filters && (0, _shared.isFunction)(filterFn)) { var filterInfo = filterFn(filters); searchState.filterInfo = filterInfo; params.filterInfo = filterInfo; } fetch({ params: params }); } function setTableKey(items) { if (!items || !(0, _shared.isArray)(items)) { return; } items.forEach(function (item) { if (!item[_const.ROW_KEY]) { item[_const.ROW_KEY] = (0, _shared.uuid)(); } if (item.children && item.children.length) { setTableKey(item.children); } }); } var getAutoCreateKey = (0, _vue.computed)(function () { return (0, _vue.unref)(propsRef).autoCreateKey && !(0, _vue.unref)(propsRef).rowKey; }); var getRowKey = (0, _vue.computed)(function () { var _unref3 = (0, _vue.unref)(propsRef), rowKey = _unref3.rowKey; return (0, _vue.unref)(getAutoCreateKey) ? _const.ROW_KEY : rowKey; }); var getDataSourceRef = (0, _vue.computed)(function () { var dataSource = (0, _vue.unref)(dataSourceRef); if (!dataSource || dataSource.length === 0) { return []; } if ((0, _vue.unref)(getAutoCreateKey)) { var firstItem = dataSource[0]; var lastItem = dataSource[dataSource.length - 1]; if (firstItem && lastItem) { if (!firstItem[_const.ROW_KEY] || !lastItem[_const.ROW_KEY]) { var data = (0, _lodashEs.cloneDeep)((0, _vue.unref)(dataSourceRef)); data.forEach(function (item) { if (!item[_const.ROW_KEY]) { item[_const.ROW_KEY] = (0, _shared.uuid)(); } if (item.children && item.children.length) { setTableKey(item.children); } }); dataSourceRef.value = data; } } } return (0, _vue.unref)(dataSourceRef); }); function updateTableData(index, key, value) { return (0, _tslib.__awaiter)(this, void 0, void 0, /*#__PURE__*/_regenerator.default.mark(function _callee() { var record; return _regenerator.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: record = dataSourceRef.value[index]; if (record) { dataSourceRef.value[index][key] = value; } return _context.abrupt("return", dataSourceRef.value[index]); case 3: case "end": return _context.stop(); } } }, _callee); })); } function fetch(opt) { var _a, _b, _c; var _unref4 = (0, _vue.unref)(propsRef), api = _unref4.api, searchInfo = _unref4.searchInfo, fetchSetting = _unref4.fetchSetting, beforeFetch = _unref4.beforeFetch, afterFetch = _unref4.afterFetch, useSearchForm = _unref4.useSearchForm, pagination = _unref4.pagination; if (!api || !(0, _shared.isFunction)(api)) { return; } try { setLoading(true); var _ref2 = fetchSetting || _const.FETCH_SETTING, pageField = _ref2.pageField, sizeField = _ref2.sizeField, listField = _ref2.listField, totalField = _ref2.totalField; var pageParams = {}; var _unref5 = (0, _vue.unref)(getPaginationInfo), _unref5$current = _unref5.current, current = _unref5$current === void 0 ? 1 : _unref5$current, _unref5$pageSize = _unref5.pageSize, pageSize = _unref5$pageSize === void 0 ? _const.PAGE_SIZE : _unref5$pageSize; if ((0, _shared.isBoolean)(pagination) && !pagination || (0, _shared.isBoolean)(getPaginationInfo)) { pageParams = {}; } else { pageParams[pageField] = opt && opt.page || current; pageParams[sizeField] = pageSize; } var _searchState$sortInfo = searchState.sortInfo, sortInfo = _searchState$sortInfo === void 0 ? {} : _searchState$sortInfo, filterInfo = searchState.filterInfo; var params = _extends(_extends(_extends(_extends(_extends(_extends(_extends(_extends({}, pageParams), useSearchForm ? getFieldsValue() : {}), searchInfo), (_a = opt === null || opt === void 0 ? void 0 : opt.searchInfo) !== null && _a !== void 0 ? _a : {}), sortInfo), filterInfo), (_b = opt === null || opt === void 0 ? void 0 : opt.sortInfo) !== null && _b !== void 0 ? _b : {}), (_c = opt === null || opt === void 0 ? void 0 : opt.filterInfo) !== null && _c !== void 0 ? _c : {}); if (beforeFetch && (0, _shared.isFunction)(beforeFetch)) { params = beforeFetch(params) || params; } var fetchApi = (opt === null || opt === void 0 ? void 0 : opt.api) || api; fetchApi({ params: params, success: function success(res) { var isArrayResult = (0, _shared.isArray)(res); setLoading(false); var resultItems = isArrayResult ? res : (0, _lodashEs.get)(res, listField); var resultTotal = isArrayResult ? 0 : (0, _lodashEs.get)(res, totalField); // 假如数据变少,导致总页数变少并小于当前选中页码,通过getPaginationRef获取到的页码是不正确的,需获取正确的页码再次执行 if (resultTotal) { var currentTotalPage = Math.ceil(resultTotal / pageSize); if (current > currentTotalPage) { setPagination({ current: currentTotalPage }); fetch(opt); } } if (afterFetch && (0, _shared.isFunction)(afterFetch)) { resultItems = afterFetch(resultItems, res) || resultItems; } dataSourceRef.value = resultItems; setPagination({ total: resultTotal || 0 }); if (opt && opt.page) { setPagination({ current: opt.page || 1 }); } emit('fetch-success', { items: (0, _vue.unref)(resultItems), total: resultTotal, params: params }, res); }, error: function error(_error) { setLoading(false); emit('fetch-error', _error); dataSourceRef.value = []; setPagination({ total: 0 }); } }); } catch (error) { emit('fetch-error', error); dataSourceRef.value = []; setLoading(false); setPagination({ total: 0 }); } finally { // fix table 加载数据的时候没有loading // setLoading(false); emit('fetch-finally'); } } function setTableData(values) { dataSourceRef.value = values; } function getDataSource() { return getDataSourceRef.value; } function reload(opt) { return (0, _tslib.__awaiter)(this, void 0, void 0, /*#__PURE__*/_regenerator.default.mark(function _callee2() { return _regenerator.default.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: _context2.next = 2; return fetch(opt); case 2: case "end": return _context2.stop(); } } }, _callee2); })); } (0, _vue.onMounted)(function () { (0, _useTimeout.useTimeoutFn)(function () { (0, _vue.unref)(propsRef).immediate && fetch(); }, 16); }); return { getDataSourceRef: getDataSourceRef, getDataSource: getDataSource, getRowKey: getRowKey, setTableData: setTableData, getAutoCreateKey: getAutoCreateKey, fetch: fetch, reload: reload, updateTableData: updateTableData, handleTableChange: handleTableChange }; }