@fe6/water-pro
Version:
An enterprise-class UI design language and Vue-based implementation
309 lines (262 loc) • 9.49 kB
JavaScript
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
};
}