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