UNPKG

@fe6/water-pro

Version:

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

309 lines (262 loc) 9.49 kB
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); } import _regeneratorRuntime from "@babel/runtime/regenerator"; /** @format */ import { __awaiter } from "tslib"; import { ref, unref, computed, onMounted, watch, reactive, watchEffect } from 'vue'; import { isArray, isFunction, isBoolean, uuid } from '@fe6/shared'; import { get, cloneDeep } from 'lodash-es'; import { useTimeoutFn } from '../../../_util/hooks/use-timeout'; import { FETCH_SETTING, ROW_KEY, PAGE_SIZE } from '../const'; export 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 = reactive({ sortInfo: {}, filterInfo: {} }); var dataSourceRef = ref([]); // watchEffect(() => { // const { dataSource, api } = unref(propsRef); // !api && dataSource && (dataSourceRef.value = dataSource); // }); watchEffect(function () { tableData.value = unref(dataSourceRef); }); watch(function () { return unref(propsRef).dataSource; }, function () { var _unref = unref(propsRef), dataSource = _unref.dataSource, api = _unref.api; !api && dataSource && (dataSourceRef.value = dataSource); }, { immediate: true }); function handleTableChange(pagination, filters, sorter) { var _unref2 = unref(propsRef), clearSelectOnPageChange = _unref2.clearSelectOnPageChange, sortFn = _unref2.sortFn, filterFn = _unref2.filterFn; if (clearSelectOnPageChange) { clearSelectedRowKeys(); } setPagination(pagination); var params = {}; if (sorter && isFunction(sortFn)) { var sortInfo = sortFn(sorter); searchState.sortInfo = sortInfo; params.sortInfo = sortInfo; } if (filters && isFunction(filterFn)) { var filterInfo = filterFn(filters); searchState.filterInfo = filterInfo; params.filterInfo = filterInfo; } fetch({ params: params }); } function setTableKey(items) { if (!items || !isArray(items)) { return; } items.forEach(function (item) { if (!item[ROW_KEY]) { item[ROW_KEY] = uuid(); } if (item.children && item.children.length) { setTableKey(item.children); } }); } var getAutoCreateKey = computed(function () { return unref(propsRef).autoCreateKey && !unref(propsRef).rowKey; }); var getRowKey = computed(function () { var _unref3 = unref(propsRef), rowKey = _unref3.rowKey; return unref(getAutoCreateKey) ? ROW_KEY : rowKey; }); var getDataSourceRef = computed(function () { var dataSource = unref(dataSourceRef); if (!dataSource || dataSource.length === 0) { return []; } if (unref(getAutoCreateKey)) { var firstItem = dataSource[0]; var lastItem = dataSource[dataSource.length - 1]; if (firstItem && lastItem) { if (!firstItem[ROW_KEY] || !lastItem[ROW_KEY]) { var data = cloneDeep(unref(dataSourceRef)); data.forEach(function (item) { if (!item[ROW_KEY]) { item[ROW_KEY] = uuid(); } if (item.children && item.children.length) { setTableKey(item.children); } }); dataSourceRef.value = data; } } } return unref(dataSourceRef); }); function updateTableData(index, key, value) { return __awaiter(this, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee() { var record; return _regeneratorRuntime.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 = 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 || !isFunction(api)) { return; } try { setLoading(true); var _ref2 = fetchSetting || FETCH_SETTING, pageField = _ref2.pageField, sizeField = _ref2.sizeField, listField = _ref2.listField, totalField = _ref2.totalField; var pageParams = {}; var _unref5 = unref(getPaginationInfo), _unref5$current = _unref5.current, current = _unref5$current === void 0 ? 1 : _unref5$current, _unref5$pageSize = _unref5.pageSize, pageSize = _unref5$pageSize === void 0 ? PAGE_SIZE : _unref5$pageSize; if (isBoolean(pagination) && !pagination || 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 && 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 = isArray(res); setLoading(false); var resultItems = isArrayResult ? res : get(res, listField); var resultTotal = isArrayResult ? 0 : get(res, totalField); // 假如数据变少,导致总页数变少并小于当前选中页码,通过getPaginationRef获取到的页码是不正确的,需获取正确的页码再次执行 if (resultTotal) { var currentTotalPage = Math.ceil(resultTotal / pageSize); if (current > currentTotalPage) { setPagination({ current: currentTotalPage }); fetch(opt); } } if (afterFetch && 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: 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 __awaiter(this, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() { return _regeneratorRuntime.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); })); } onMounted(function () { useTimeoutFn(function () { unref(propsRef).immediate && fetch(); }, 16); }); return { getDataSourceRef: getDataSourceRef, getDataSource: getDataSource, getRowKey: getRowKey, setTableData: setTableData, getAutoCreateKey: getAutoCreateKey, fetch: fetch, reload: reload, updateTableData: updateTableData, handleTableChange: handleTableChange }; }