fastlion-amis
Version:
一种MIS页面生成工具
641 lines (640 loc) • 35.6 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.CRUDStore = exports.DATAKEYID = void 0;
var tslib_1 = require("tslib");
var file_saver_1 = require("file-saver");
var mobx_state_tree_1 = require("mobx-state-tree");
var service_1 = require("./service");
var helper_1 = require("../utils/helper");
var pick_1 = (0, tslib_1.__importDefault)(require("lodash/pick"));
var tpl_builtin_1 = require("../utils/tpl-builtin");
var api_1 = require("../utils/api");
var commonTableFunction_1 = require("./utils/commonTableFunction");
var lodash_1 = require("lodash");
var ServerError = /** @class */ (function (_super) {
(0, tslib_1.__extends)(ServerError, _super);
function ServerError() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = 'ServerError';
return _this;
}
return ServerError;
}(Error));
// 作为前端item唯一性标识的字段-取得复杂点方便前端处理并且后端不会识别到-如果需要做表格项唯一性判断都要从这里取
exports.DATAKEYID = 'front_data_instance_unique_mark_' + Math.floor(Math.random() * 1000);
exports.CRUDStore = service_1.ServiceStore.named('CRUDStore')
.props({
pristineQuery: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.frozen(), {}),
query: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.frozen(), {}),
prevPage: 1,
page: 1,
perPage: 20,
total: 0,
mode: 'normal',
hasNext: false,
selectedAction: mobx_state_tree_1.types.frozen(),
columns: mobx_state_tree_1.types.frozen(),
items: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.array(mobx_state_tree_1.types.frozen()), []),
selectedItems: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.array(mobx_state_tree_1.types.frozen()), []),
unSelectedItems: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.array(mobx_state_tree_1.types.frozen()), []),
filterTogggable: false,
filterVisible: true,
hasInnerModalOpen: false,
searching: false,
filterLoading: false
})
.views(function (self) { return ({
get lastPage() {
return Math.max(Math.ceil(self.total / (self.perPage < 1 ? 10 : self.perPage)), 1);
},
get filterData() {
return (0, helper_1.createObject)(self.data, (0, tslib_1.__assign)({}, self.query));
},
get mergedData() {
return (0, helper_1.extendObject)(self.data, (0, tslib_1.__assign)((0, tslib_1.__assign)((0, tslib_1.__assign)({ perPage: self.perPage }, self.query), self.data), { selectedItems: self.selectedItems, unSelectedItems: self.unSelectedItems }));
},
get hasModalOpened() {
return self.dialogOpen || self.drawerOpen || self.hasInnerModalOpen;
},
get selectedItemsAsArray() {
return self.selectedItems.concat();
},
fetchCtxOf: function (data, options) {
var _a;
return (0, helper_1.createObject)(data, (0, tslib_1.__assign)((0, tslib_1.__assign)((0, tslib_1.__assign)({}, self.query), (_a = {}, _a[options.pageField || 'page'] = self.page, _a[options.perPageField || 'perPage'] = self.perPage, _a)), data));
}
}); })
.actions(function (self) {
var fetchCancel = null;
var childStore = {};
// 缓存map 保存data使用
// 单次可以缓存的最大条数 -- 内存大100条 内存小就40条
var halfSingleCacheNumber = 10;
var cacheData = {
cacheMap: {},
curApi: '',
parentDataSetId: '',
openCache: false,
};
function setPristineQuery() {
self.pristineQuery = self.query;
}
function updateQuery(values, updater, pageField, perPageField, replace) {
if (pageField === void 0) { pageField = 'page'; }
if (perPageField === void 0) { perPageField = 'perPage'; }
if (replace === void 0) { replace = false; }
var originQuery = self.query;
self.query = replace
? (0, tslib_1.__assign)({}, values) : (0, tslib_1.__assign)((0, tslib_1.__assign)({}, self.query), values);
if (self.query[pageField || 'page']) {
self.page = parseInt(self.query[pageField || 'page'], 10);
}
if (self.query[perPageField || 'perPage']) {
self.perPage = parseInt(self.query[perPageField || 'perPage'], 10);
}
updater &&
(0, helper_1.isObjectShallowModified)(originQuery, self.query, false) &&
setTimeout(updater.bind(null, "?" + (0, helper_1.qsstringify)(self.query)), 4);
}
function recursiveDelete(obj, propertyPath) {
if (obj && typeof obj === 'object' && obj[propertyPath]) {
delete obj[propertyPath];
}
if (obj === null || obj === void 0 ? void 0 : obj['__super']) {
recursiveDelete(obj["__super"], propertyPath);
}
}
function initStaticData(data, options) {
if (!(options === null || options === void 0 ? void 0 : options.loadDataMode) && data) {
var newdata = {
items: data.items.slice(0, options === null || options === void 0 ? void 0 : options.perPage),
total: data.items.length,
itemsRaw: data.items,
count: data.items.length
};
self.data = newdata;
self.total = data.total;
}
else {
var newdata = self.data.itemsRaw.slice((self.page - 1) * self.perPage, self.page * self.perPage);
self.reInitData((0, tslib_1.__assign)((0, tslib_1.__assign)({}, self.data), { items: newdata }));
}
}
var fetchInitData = (0, mobx_state_tree_1.flow)(function getInitData(api, data, options) {
var ctx, genrateUrl, items, dir, originData, data_1, json, result, total, count, page, hasNext, oItems, oRows, columns, rest, items, rowsData, data_2, dir, e_1, env;
var _a;
var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
if (options === void 0) { options = {}; }
return (0, tslib_1.__generator)(this, function (_o) {
switch (_o.label) {
case 0:
_o.trys.push([0, 4, , 5]);
self.filterLoading = true;
ctx = (0, helper_1.createObject)(self.data, (0, tslib_1.__assign)((0, tslib_1.__assign)((0, tslib_1.__assign)({}, self.query), data), (_a = {}, _a[options.pageField || 'page'] = self.page, _a[options.perPageField || 'perPage'] = self.perPage, _a)));
// 一次性加载不要发送 perPage 属性
if (options.loadDataOnce) {
recursiveDelete(ctx, options.perPageField || 'perPage');
}
genrateUrl = (0, api_1.buildApi)(api, ctx).url;
// 切换当前选中的缓存数据
if (options.openCache) {
cacheData.curApi = genrateUrl;
}
// 缓存当前url ai-tool会用到该url
cacheData.curApiForCache = genrateUrl;
// 如果他不需要强制刷新但是是一次性加载的情况
// 如果不是需要缓存的表格或者是需要缓存的表格但是有缓存数据源,就走这个分支
if (!options.forceReload && options.loadDataOnce && self.total && (!options.openCache || cacheData.cacheMap[genrateUrl])) {
items = void 0;
if (!options.openCache) {
items = options.source
? (0, tpl_builtin_1.resolveVariableAndFilter)(options.source, (0, helper_1.createObject)(self.mergedData, {
items: self.data.itemsRaw,
rows: self.data.itemsRaw
}), '| raw')
: self.items.concat();
}
else {
items = cacheData.cacheMap[genrateUrl].items;
}
if (self.query.orderBy) {
dir = /desc/i.test(self.query.orderDir) ? -1 : 1;
items = (0, helper_1.sortArray)(items, self.query.orderBy, dir);
}
if (childStore && (childStore === null || childStore === void 0 ? void 0 : childStore.modefiedMap)) {
items = (0, commonTableFunction_1.handleSort)(items.slice(), Array.from((_c = (_b = childStore.orderColumns).keys) === null || _c === void 0 ? void 0 : _c.call(_b)), childStore.orderColumns, (_d = childStore === null || childStore === void 0 ? void 0 : childStore.modefiedMap) === null || _d === void 0 ? void 0 : _d.modifiedDataSet);
}
originData = (0, helper_1.isMobile)()
? items.slice(0, self.page * self.perPage)
: items.slice((self.page - 1) * self.perPage, self.page * self.perPage);
data_1 = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, (options.openCache ? cacheData.cacheMap[genrateUrl] : self.data)), { total: items.length, items: originData });
// 没有原值给他补上去原值设置-或者第一个不一样
if (options.openCache && (!data_1.itemsRaw || (((_f = (_e = data_1.itemsRaw) === null || _e === void 0 ? void 0 : _e[0]) === null || _f === void 0 ? void 0 : _f[exports.DATAKEYID]) !== ((_g = items === null || items === void 0 ? void 0 : items[0]) === null || _g === void 0 ? void 0 : _g[exports.DATAKEYID])))) {
data_1.itemsRaw = originData;
}
self.total = parseInt((_h = data_1.total) !== null && _h !== void 0 ? _h : data_1.count, 10) || 0;
self.reInitData(data_1);
self.filterLoading = false;
return [2 /*return*/];
}
if (fetchCancel) {
fetchCancel();
fetchCancel = null;
self.fetching = false;
self.searching = false;
}
options.silent || self.markFetching(true);
self.searching = true;
json = void 0;
if (!(options.openCache && !options.forceReload && cacheData.cacheMap[genrateUrl])) return [3 /*break*/, 1];
json = { ok: true, data: cacheData.cacheMap[genrateUrl], msg: '请求成功', status: 200 };
return [3 /*break*/, 3];
case 1: return [4 /*yield*/, (0, mobx_state_tree_1.getEnv)(self).fetcher(api, ctx, (0, tslib_1.__assign)((0, tslib_1.__assign)({}, options), { cancelExecutor: function (executor) { return (fetchCancel = executor); } }))];
case 2:
json = _o.sent();
fetchCancel = null;
_o.label = 3;
case 3:
if (!json.ok) {
self.filterLoading = false;
self.updateMessage((_k = (_j = json.msg) !== null && _j !== void 0 ? _j : options.errorMessage) !== null && _k !== void 0 ? _k : self.__('CRUD.fetchFailed'), true);
(0, mobx_state_tree_1.getEnv)(self).notify('error', json.msg, json.msgTimeout !== undefined
? {
closeButton: true,
timeout: json.msgTimeout
}
: undefined);
}
else {
if (!json.data) {
throw new Error(self.__('CRUD.invalidData'));
}
self.updatedAt = Date.now();
result = (0, api_1.normalizeApiResponseData)(json.data);
// 数据标记 方便唯一性查找 如果有datakeyid不重新赋值
result.items = (0, helper_1.mapTree)(result.items, function (_) {
var _a;
return ((0, tslib_1.__assign)((0, tslib_1.__assign)({}, _), (_a = {}, _a[exports.DATAKEYID] = _[exports.DATAKEYID] || (0, helper_1.uuidv4)(), _a)));
});
result.rows = (0, helper_1.mapTree)(result.row, function (_) {
var _a;
return ((0, tslib_1.__assign)((0, tslib_1.__assign)({}, _), (_a = {}, _a[exports.DATAKEYID] = _[exports.DATAKEYID] || (0, helper_1.uuidv4)(), _a)));
});
total = result.total, count = result.count, page = result.page, hasNext = result.hasNext, oItems = result.items, oRows = result.rows, columns = result.columns, rest = (0, tslib_1.__rest)(result, ["total", "count", "page", "hasNext", "items", "rows", "columns"]);
items = void 0;
if (options.source) {
items = (0, tpl_builtin_1.resolveVariableAndFilter)(options.source, (0, helper_1.createObject)(self.filterData, result), '| raw');
}
else {
items = result.items || result.rows;
}
if (!Array.isArray(items)) {
throw new Error(self.__('CRUD.invalidArray'));
}
else {
// 确保成员是对象。
items.map(function (item) {
return typeof item === 'string' ? { text: item } : item;
});
}
rowsData = [];
if (options.loadDataMode && Array.isArray(self.data.items)) {
rowsData = self.data.items.concat(items);
}
else {
// 第一次的时候就是直接加载请求的数据
rowsData = items;
}
data_2 = (0, tslib_1.__assign)((0, tslib_1.__assign)((0, tslib_1.__assign)({}, (api.replaceData ? {} : self.pristine)), { items: rowsData, count: count, total: total, dataSetId: (0, helper_1.uuidv4)() }), rest);
// 如果需要缓存才走这里 - 把数据标记带进去
if (options.openCache) {
checkcacheData();
cacheData.cacheMap[genrateUrl] = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, (0, lodash_1.cloneDeep)(data_2)), { createTime: new Date().getTime() });
}
data_2.itemsRaw = oItems || oRows;
if (options.loadDataOnce) {
// 记录原始集合,后续可能基于原始数据做排序查找。
// data.itemsRaw = oItems || oRows;
if (self.query.orderBy) {
dir = /desc/i.test(self.query.orderDir) ? -1 : 1;
rowsData = (0, helper_1.sortArray)(rowsData, self.query.orderBy, dir);
}
data_2.items = rowsData.slice((self.page - 1) * self.perPage, self.page * self.perPage);
data_2.count = data_2.total = rowsData.length;
}
if (Array.isArray(columns)) {
self.columns = columns.concat();
}
else {
self.columns = undefined;
}
self.items.replace(rowsData);
self.reInitData(data_2, !!api.replaceData);
options.syncResponse2Query !== false &&
updateQuery((0, pick_1.default)(rest, Object.keys(self.query)), undefined, options.pageField || 'page', options.perPageField || 'perPage');
self.total = parseInt((_l = data_2.total) !== null && _l !== void 0 ? _l : data_2.count, 10) || 0;
typeof page !== 'undefined' && (self.page = parseInt(page, 10));
// 分页情况不清楚,只能知道有没有下一页。
if (typeof hasNext !== 'undefined') {
self.mode = 'simple';
self.total = 0;
self.hasNext = !!hasNext;
}
self.updateMessage((_m = json.msg) !== null && _m !== void 0 ? _m : options.successMessage);
// 配置了获取成功提示后提示,默认是空不会提示。
options &&
options.successMessage &&
(0, mobx_state_tree_1.getEnv)(self).notify('success', self.msg);
}
self.markFetching(false);
self.searching = false;
self.filterLoading = false;
return [2 /*return*/, json];
case 4:
e_1 = _o.sent();
env = (0, mobx_state_tree_1.getEnv)(self);
if (!(0, mobx_state_tree_1.isAlive)(self) || self.disposed) {
return [2 /*return*/];
}
self.markFetching(false);
self.searching = false;
if (env.isCancel(e_1)) {
return [2 /*return*/];
}
self.filterLoading = false;
console.error(e_1.stack);
env.notify('error', e_1.message);
return [2 /*return*/];
case 5: return [2 /*return*/];
}
});
});
function checkcacheData() {
// 如果缓存数量超过100条 开始删除最末尾的几个条目
// if (Object.values(cacheData.cacheMap).length > (2 * halfSingleCacheNumber)) {
var keyTimeMap = [];
for (var key in cacheData.cacheMap) {
keyTimeMap.push({
createTime: cacheData.cacheMap[key].createTime,
key: key,
});
}
// 根据创建时间排序,越新的越前面
keyTimeMap.sort(function (pre, cur) { return cur.createTime - pre.createTime; });
// 100条之后的筛选出来
var olderData = keyTimeMap.slice(2 * halfSingleCacheNumber);
// 清楚每条
olderData.map(function (_) {
delete cacheData.cacheMap[_.key];
});
// }
}
function changePage(page, perPage) {
self.page = page;
perPage && (self.perPage = parseInt(perPage, 10));
}
function changeTotal(total) {
self.total = total;
}
function selectAction(action) {
self.selectedAction = action;
}
var saveRemote = (0, mobx_state_tree_1.flow)(function saveRemote(api, data, options) {
var json, infoType, e_2;
var _a, _b, _c;
if (options === void 0) { options = {}; }
return (0, tslib_1.__generator)(this, function (_d) {
switch (_d.label) {
case 0:
_d.trys.push([0, 2, , 3]);
options = (0, tslib_1.__assign)({ method: 'post' }, options);
// 需要隐藏不展示loading
if (!options.shouldHideLoaing)
self.markSaving(true);
return [4 /*yield*/, (0, mobx_state_tree_1.getEnv)(self).fetcher(api, data, options)];
case 1:
json = _d.sent();
self.markSaving(false);
if (!(0, helper_1.isEmpty)(json.data) || json.ok) {
self.updateData((0, api_1.normalizeApiResponseData)(json.data), {
__saved: Date.now()
}, !!api && api.replaceData);
self.updatedAt = Date.now();
}
if (!json.ok) {
self.updateMessage((_b = (_a = json.msg) !== null && _a !== void 0 ? _a : options.errorMessage) !== null && _b !== void 0 ? _b : self.__('saveFailed'), true);
infoType = 'info';
if (json.status == 10001)
infoType = 'info';
if (json.status == 10003)
infoType = 'warning';
if (json.status == 10004)
infoType = 'error';
(0, mobx_state_tree_1.getEnv)(self).notify(infoType, self.msg, json.msgTimeout !== undefined
? {
closeButton: true,
timeout: json.msgTimeout
}
: undefined);
throw new ServerError(self.msg);
}
else {
self.updateMessage((_c = json.msg) !== null && _c !== void 0 ? _c : options.successMessage);
self.msg &&
(0, mobx_state_tree_1.getEnv)(self).notify('success', self.msg, json.msgTimeout !== undefined
? {
closeButton: true,
timeout: json.msgTimeout
}
: undefined);
}
return [2 /*return*/, json.data];
case 2:
e_2 = _d.sent();
self.markSaving(false);
if (!(0, mobx_state_tree_1.isAlive)(self) || self.disposed) {
return [2 /*return*/];
}
e_2.type !== 'ServerError' && (0, mobx_state_tree_1.getEnv)(self).notify('error', e_2.message);
throw e_2;
case 3: return [2 /*return*/];
}
});
});
function preFetchDataSlience(api, _ctx, options) {
var _this = this;
var apis = [];
// 获取父级的数据集id
var parentDataSetId = (_ctx.__super.hasOwnProperty('dataSetId') && _ctx.__super.dataSetId) || (_ctx.__super.__super.hasOwnProperty('dataSetId') && _ctx.__super.__super.dataSetId);
// cacheData.cacheMap = {}
// 更新数据集id
cacheData.parentDataSetId = parentDataSetId;
// 开始静默请求
// 获取super或者super中的super父级item数据 保证是父级传入的不会取到其他地方的
var parentItems = (_ctx.__super.hasOwnProperty('items') && _ctx.__super.items || (_ctx.__super.__super.hasOwnProperty('items') && _ctx.__super.__super.items));
var ctxIndex = parentItems.findIndex(function (_) { return _[exports.DATAKEYID] === _ctx[exports.DATAKEYID]; });
// 缓存的前半部分
var preParentArr = parentItems.slice(Math.max(0, ctxIndex - halfSingleCacheNumber), ctxIndex).reverse();
// 缓存的后半部分
var afterParentArr = parentItems.slice(ctxIndex, Math.min(ctxIndex + halfSingleCacheNumber, parentItems.length));
var unionArr = [];
// 按顺序合并两个数组
while (preParentArr.length || afterParentArr.length) {
var preItem = preParentArr.shift();
preItem && unionArr.push(preItem);
var afterItem = afterParentArr.shift();
afterItem && unionArr.push(afterItem);
}
unionArr === null || unionArr === void 0 ? void 0 : unionArr.map(function (_) {
apis.push({ api: api, data: _ });
});
var newCacheMap = {};
// 获取data
var fetchData = function () { return (0, tslib_1.__awaiter)(_this, void 0, void 0, function () {
var fetchApi, fetchCancel, ctx, genrateUrl, json, result, total, count, page, hasNext, oItems, oRows, columns, rest, items, data, error_1;
var _a;
return (0, tslib_1.__generator)(this, function (_b) {
switch (_b.label) {
case 0:
fetchApi = apis.shift();
if (!fetchApi)
return [2 /*return*/];
_b.label = 1;
case 1:
_b.trys.push([1, 5, , 6]);
ctx = (0, helper_1.createObject)(self.data, (0, tslib_1.__assign)((0, tslib_1.__assign)((0, tslib_1.__assign)({}, self.query), fetchApi === null || fetchApi === void 0 ? void 0 : fetchApi.data), (_a = {}, _a[options.pageField || 'page'] = self.page, _a[options.perPageField || 'perPage'] = self.perPage, _a)));
// 一次性加载不要发送 perPage 属性
if (options.loadDataOnce) {
recursiveDelete(ctx, options.perPageField || 'perPage');
}
genrateUrl = (fetchApi === null || fetchApi === void 0 ? void 0 : fetchApi.api) && (0, api_1.buildApi)(fetchApi === null || fetchApi === void 0 ? void 0 : fetchApi.api, ctx).url;
if (!!cacheData.cacheMap[genrateUrl || '']) return [3 /*break*/, 3];
return [4 /*yield*/, (0, mobx_state_tree_1.getEnv)(self).fetcher(fetchApi === null || fetchApi === void 0 ? void 0 : fetchApi.api, ctx, (0, tslib_1.__assign)((0, tslib_1.__assign)({}, options), { cancelExecutor: function (executor) { return (fetchCancel = executor); } }))];
case 2:
json = _b.sent();
if (json.ok) {
result = (0, api_1.normalizeApiResponseData)(json.data);
// 数据标记 方便唯一性查找 如果有datakeyid不重新赋值
result.items = (0, helper_1.mapTree)(result.items, function (_) {
var _a;
return ((0, tslib_1.__assign)((0, tslib_1.__assign)({}, _), (_a = {}, _a[exports.DATAKEYID] = _[exports.DATAKEYID] || (0, helper_1.uuidv4)(), _a)));
});
result.rows = (0, helper_1.mapTree)(result.row, function (_) {
var _a;
return ((0, tslib_1.__assign)((0, tslib_1.__assign)({}, _), (_a = {}, _a[exports.DATAKEYID] = _[exports.DATAKEYID] || (0, helper_1.uuidv4)(), _a)));
});
total = result.total, count = result.count, page = result.page, hasNext = result.hasNext, oItems = result.items, oRows = result.rows, columns = result.columns, rest = (0, tslib_1.__rest)(result, ["total", "count", "page", "hasNext", "items", "rows", "columns"]);
items = void 0;
items = result.items || result.rows;
if (!Array.isArray(items)) {
throw new Error(self.__('CRUD.invalidArray'));
}
else {
// 确保成员是对象。
items.map(function (item) {
return typeof item === 'string' ? { text: item } : item;
});
}
data = (0, tslib_1.__assign)({ items: items, count: count, total: total, createTime: new Date().getTime(), dataSetId: (0, helper_1.uuidv4)() }, rest);
// 如果需要缓存才走这里 - 把数据标记带进去
newCacheMap[genrateUrl || ''] = data;
}
else {
throw new Error(self.__('CRUD.invalidData'));
}
return [3 /*break*/, 4];
case 3:
// 已经有的跟新一下创建时间
newCacheMap[genrateUrl || ''] = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, cacheData.cacheMap[genrateUrl || '']), { createTime: new Date().getTime() });
_b.label = 4;
case 4:
// 执行完了更新缓存
if (apis.length) {
fetchData();
}
else {
cacheData.cacheMap = newCacheMap;
}
return [3 /*break*/, 6];
case 5:
error_1 = _b.sent();
console.error(error_1);
throw new Error(self.__('CRUD.invalidData'));
case 6: return [2 /*return*/];
}
});
}); };
// 打开一个长度为5的请求队列 预加载数据
new Array(5).fill(1).map(function (_) { return fetchData(); });
}
var setFilterTogglable = function (toggable, filterVisible) {
self.filterTogggable = toggable;
filterVisible !== void 0 && (self.filterVisible = filterVisible);
};
var setFilterVisible = function (visible) {
self.filterVisible = visible;
};
var setSelectedItems = function (items) {
self.selectedItems.replace(items);
};
var setUnSelectedItems = function (items) {
self.unSelectedItems.replace(items);
};
var setInnerModalOpened = function (value) {
self.hasInnerModalOpen = value;
};
var initFromScope = function (scope, source) {
var rowsData = (0, tpl_builtin_1.resolveVariableAndFilter)(source, scope, '| raw');
if (!Array.isArray(rowsData) && !self.items.length) {
return;
}
rowsData = Array.isArray(rowsData) ? rowsData : [];
var data = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, self.pristine), { items: rowsData, count: 0, total: 0 });
self.items.replace(rowsData);
self.reInitData(data);
};
// 跟新缓存数据源-- 使用这种方式调整
function updateCacheData(data) {
cacheData.cacheMap[cacheData.curApi] = (0, tslib_1.__assign)({}, cacheData.cacheMap[cacheData.curApi]);
cacheData.cacheMap[cacheData.curApi].items = (0, tslib_1.__spreadArray)([], data.items, true);
cacheData.cacheMap[cacheData.curApi].dataSetId = data.dataSetId;
}
function clearCacheData() {
cacheData = null;
}
// 获取缓存数据源
function getCacheData() {
var jsonStr = JSON.stringify(cacheData);
var encoder = new TextEncoder(); // TextEncoder 是 Web API 的一部分,可能不在所有环境中都可用
var bytes = encoder.encode(jsonStr).length;
console.log("\u7F13\u5B58\u5927\u5C0F: " + bytes / 1024);
return cacheData;
}
function getRawCacheData() {
return cacheData;
}
var exportAsCSV = function (options) {
if (options === void 0) { options = {}; }
return (0, tslib_1.__awaiter)(void 0, void 0, void 0, function () {
var items, env, res;
return (0, tslib_1.__generator)(this, function (_a) {
switch (_a.label) {
case 0:
items = options.loadDataOnce ? self.data.itemsRaw : self.data.items;
if (!options.api) return [3 /*break*/, 2];
env = (0, mobx_state_tree_1.getEnv)(self);
return [4 /*yield*/, env.fetcher(options.api, options.data)];
case 1:
res = _a.sent();
if (!res.data) {
return [2 /*return*/];
}
if (Array.isArray(res.data)) {
items = res.data;
}
else {
items = res.data.rows || res.data.items;
}
_a.label = 2;
case 2:
Promise.resolve().then(function () { return new Promise(function(resolve){require(['papaparse'], function(ret) {resolve(tslib_1.__importStar(ret));})}); }).then(function (papaparse) {
var csvText = papaparse.unparse(items);
if (csvText) {
var blob = new Blob(
// 加上 BOM 这样 Excel 打开的时候就不会乱码
[new Uint8Array([0xef, 0xbb, 0xbf]), csvText], {
type: 'text/plain;charset=utf-8'
});
(0, file_saver_1.saveAs)(blob, 'data.csv');
}
});
return [2 /*return*/];
}
});
});
};
//清空数据
function clearData() {
var data = {
items: [],
total: 0,
count: undefined
};
self.data = data;
self.total = 0;
}
// 设置子store
function setChildStore(store) {
childStore = store;
}
// 设置子store
function clearChildStore() {
childStore = null;
}
return {
clearCacheData: clearCacheData,
preFetchDataSlience: preFetchDataSlience,
getCacheData: getCacheData,
updateCacheData: updateCacheData,
setChildStore: setChildStore,
clearChildStore: clearChildStore,
setPristineQuery: setPristineQuery,
updateQuery: updateQuery,
fetchInitData: fetchInitData,
changePage: changePage,
changeTotal: changeTotal,
selectAction: selectAction,
saveRemote: saveRemote,
setFilterTogglable: setFilterTogglable,
setFilterVisible: setFilterVisible,
setSelectedItems: setSelectedItems,
setUnSelectedItems: setUnSelectedItems,
setInnerModalOpened: setInnerModalOpened,
initFromScope: initFromScope,
exportAsCSV: exportAsCSV,
clearData: clearData,
initStaticData: initStaticData,
getRawCacheData: getRawCacheData
};
});
//# sourceMappingURL=./store/crud.js.map
;