fastlion-amis
Version:
一种MIS页面生成工具
256 lines (255 loc) • 19.3 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var react_1 = tslib_1.__importStar(require("react"));
var antd_1 = require("antd");
var DownOutlined_1 = tslib_1.__importDefault(require("@ant-design/icons/lib/icons/DownOutlined"));
var ConditionQuery_1 = tslib_1.__importDefault(require("./ConditionQuery"));
var OptionQuery_1 = tslib_1.__importDefault(require("./OptionQuery"));
var ModalFooter_1 = tslib_1.__importDefault(require("./ModalFooter"));
var types_1 = require("./types");
var helper_1 = require("../../../../utils/helper");
var AdvancedQuery = function (_a) {
var _b;
var props = _a.props, state = _a.state, otherProps = tslib_1.__rest(_a, ["props", "state"]);
var advancedTitle = otherProps.advancedTitle, showOptionQuery = otherProps.showOptionQuery, hideAdvancedFilter = otherProps.hideAdvancedFilter;
var advancedFilter = props.advancedFilter, advancedQueryFields = props.advancedQueryFields, advancedFilterApi = props.advancedFilterApi, _c = props.columns, columns = _c === void 0 ? [] : _c, env = props.env, render = props.render, __ = props.translate, cx = props.classnames, store = props.store;
var showAdvancedFilter = state.showAdvancedFilter;
var advancedHeader = (0, react_1.useMemo)(function () {
var _a, _b;
return (_b = (_a = advancedFilter.body.find(function (item) { return item.name === types_1.ADVANCED_FILTER_NAME.HEADER; })) === null || _a === void 0 ? void 0 : _a.body) !== null && _b !== void 0 ? _b : [];
}, [advancedFilter]);
var defaultHedaerData = (0, react_1.useMemo)(function () {
var result = {};
advancedHeader.forEach(function (item) { var _a; result[item.name] = (_a = item.value) !== null && _a !== void 0 ? _a : ''; });
return result;
}, [advancedHeader]);
var defaultFields = (0, react_1.useMemo)(function () {
return columns
.filter(function (column) { return !column.hidden && column.type !== 'operation'; })
.map(function (column) {
var _a;
return ({
type: column.type,
label: "".concat(column.groupName ? "".concat(column.groupName, " \u00B7 ") : '').concat(column.label),
name: column.name,
comparable: (_a = column.comparable) !== null && _a !== void 0 ? _a : true,
isNumerical: column.isNumerical
});
});
}, [columns]);
var segmentFields = (0, react_1.useMemo)(function () {
return defaultFields.filter(function (field) { return field.type == 'number' || field.type == 'date' || field.type == 'progress'; });
}, [defaultFields]);
var _d = (0, react_1.useState)(false), foldCondition = _d[0], setFoldCondition = _d[1];
var _e = (0, react_1.useState)(false), foldOption = _e[0], setFoldOption = _e[1];
var _f = (0, react_1.useState)({}), advancedHeaderData = _f[0], setAdvancedHeaderData = _f[1];
var _g = (0, react_1.useState)([]), advancedFilterDatas = _g[0], setAdvancedFilterDatas = _g[1];
var _h = (0, react_1.useState)(true), caseSensitive = _h[0], setCaseSensitive = _h[1];
var _j = (0, react_1.useState)(3000), topN = _j[0], setTopN = _j[1];
var _k = (0, react_1.useState)(false), limitStatus = _k[0], setLimitStatus = _k[1];
var _l = (0, react_1.useState)(false), itemRepeat = _l[0], setItemRepeat = _l[1];
var _m = (0, react_1.useState)(false), itemCount = _m[0], setItemCount = _m[1];
var _o = (0, react_1.useState)(false), itemSumCount = _o[0], setItemSumCount = _o[1];
var _p = (0, react_1.useState)(defaultFields.map(function (field) { return (tslib_1.__assign(tslib_1.__assign({}, field), { checked: true, disabled: false })); })), showFields = _p[0], setShowFields = _p[1];
var _q = (0, react_1.useState)([]), sortFields = _q[0], setSortFields = _q[1];
var _r = (0, react_1.useState)([]), groupByFields = _r[0], setGroupByFields = _r[1];
var _s = (0, react_1.useState)(false), section = _s[0], setSection = _s[1];
var _t = (0, react_1.useState)(false), leftOpenRightClose = _t[0], setLeftOpenRightClose = _t[1];
var _u = (0, react_1.useState)((_b = segmentFields[0]) === null || _b === void 0 ? void 0 : _b.name), sectionField = _u[0], setSectionField = _u[1];
var _v = (0, react_1.useState)(''), sectionNorm = _v[0], setSectionNorm = _v[1];
var _w = (0, react_1.useState)(true), avgSection = _w[0], setAvgSection = _w[1];
var _x = (0, react_1.useState)(1), sectionWidthValue = _x[0], setSectionWidthValue = _x[1];
var _y = (0, react_1.useState)([]), sections = _y[0], setSections = _y[1];
var ref = (0, react_1.useRef)(null);
var handleHeaderValueChange = function (value, name) {
setAdvancedHeaderData(function (data) {
var _a;
return (tslib_1.__assign(tslib_1.__assign({}, data), (_a = {}, _a[name] = value, _a)));
});
};
var handleTemplateChange = function (data) {
var _a, _b, _c, _d;
var advancedHeader = data.advancedHeader, advancedFilter = data.advancedFilter, _e = data.advancedFilterSub, advancedFilterSub = _e === void 0 ? [] : _e, caseSensitive = data.caseSensitive, _f = data.limitParam, topN = _f.topN, limitStatus = _f.limitStatus, optionsParam = data.optionsParam;
setAdvancedHeaderData(advancedHeader);
// 默认值里如果包含前缀,说明是新版默认值数据,不用添加前缀
if (advancedFilter.some(function (data) { return data.field.includes(types_1.ADVANCED_FILTER_NAME.FILTER) || data.field.includes(types_1.ADVANCED_FILTER_NAME.FILTER_SUB); })) {
setAdvancedFilterDatas(advancedFilter.map(function (data) { return (tslib_1.__assign(tslib_1.__assign({}, data), { key: (0, helper_1.uuidv4)() })); }));
}
else {
// 旧版默认值是分开存储,要加上前缀
var fn_1 = function (data, name) {
var _a;
var oldValues = data.values;
//处理旧版默认值比较字段
if (((_a = data.compareField) === null || _a === void 0 ? void 0 : _a.length) && data.useFieldCompare && typeof oldValues == 'string' && oldValues.startsWith('(') && oldValues.endsWith(')')) {
var result_1 = oldValues.substring(1, oldValues.length - 1);
data.compareField.forEach(function (compare) {
var field = defaultFields.find(function (item) { return item.name === compare; });
if (field)
result_1 = result_1.replace(compare, "[".concat(field.label, "]"));
});
return tslib_1.__assign(tslib_1.__assign({}, data), { field: "".concat(name, ".").concat(data.field), key: (0, helper_1.uuidv4)(), values: result_1 });
}
return tslib_1.__assign(tslib_1.__assign({}, data), { field: "".concat(name, ".").concat(data.field), key: (0, helper_1.uuidv4)() });
};
setAdvancedFilterDatas(advancedFilter.map(function (data) { return fn_1(data, types_1.ADVANCED_FILTER_NAME.FILTER); }).concat(advancedFilterSub.map(function (data) { return fn_1(data, types_1.ADVANCED_FILTER_NAME.FILTER_SUB); })));
}
// 新版默认值直接从data取
if (typeof caseSensitive == 'boolean') {
setCaseSensitive(caseSensitive);
}
else {
// 旧版默认值从filter数组第一项
setCaseSensitive(!!((_c = (_b = ((_a = advancedFilter[0]) !== null && _a !== void 0 ? _a : advancedFilterSub[0])) === null || _b === void 0 ? void 0 : _b.caseSensitive) !== null && _c !== void 0 ? _c : true));
}
setTopN(topN);
setLimitStatus(limitStatus);
if (optionsParam) {
var itemRepeat_1 = optionsParam.itemRepeat, itemCount_1 = optionsParam.itemCount, itemSumCount_1 = optionsParam.itemSumCount, showFields_1 = optionsParam.showFields, sortFields_1 = optionsParam.sortFields, groupByFields_1 = optionsParam.groupByFields, section_1 = optionsParam.section, _g = optionsParam.sectionParams, avgSection_1 = _g.avgSection, leftOpenRightClose_1 = _g.leftOpenRightClose, sectionField_1 = _g.sectionField, sectionNorm_1 = _g.sectionNorm, sections_1 = _g.sections;
setItemRepeat(itemRepeat_1);
setItemCount(itemCount_1);
setItemSumCount(itemSumCount_1);
setShowFields(function (fields) { return fields.map(function (field) {
var checked = showFields_1.length == 0 ? true : showFields_1.includes(field.name);
var disabled = groupByFields_1.includes(field.name);
return tslib_1.__assign(tslib_1.__assign({}, field), { checked: checked, disabled: disabled });
}); });
setSortFields(sortFields_1.flatMap(function (field) {
var _a = field.split(','), fieldName = _a[0], orderName = _a[1];
var order = orderName === 'desc' ? 1 : 0;
var targetField = defaultFields.find(function (item) { return item.name === fieldName; });
return targetField ? tslib_1.__assign(tslib_1.__assign({}, targetField), { order: order }) : [];
}));
setGroupByFields(groupByFields_1.flatMap(function (field) { var _a; return (_a = defaultFields.find(function (item) { return item.name === field; })) !== null && _a !== void 0 ? _a : []; }));
setSection(section_1);
setLeftOpenRightClose(leftOpenRightClose_1);
setSectionField(sectionField_1);
setSectionNorm(sectionNorm_1);
setAvgSection(avgSection_1);
if (avgSection_1) {
setSectionWidthValue(sections_1[0]);
}
else {
setSections(sections_1);
}
}
else {
//模板默认值没有optionsParam把选项查项置为默认
setItemRepeat(false);
setItemCount(false);
setItemSumCount(false);
setShowFields(defaultFields.map(function (field) { return (tslib_1.__assign(tslib_1.__assign({}, field), { checked: true, disabled: false })); }));
setSortFields([]);
setGroupByFields([]);
setSection(false);
setLeftOpenRightClose(false);
setSectionField((_d = segmentFields[0]) === null || _d === void 0 ? void 0 : _d.name);
setSectionNorm('');
setAvgSection(true);
setSectionWidthValue(1);
setSections([]);
}
};
var handleReset = function (data) {
var _a, _b, _c;
if (data) {
handleTemplateChange(data);
}
else {
setAdvancedHeaderData(defaultHedaerData);
var datas = (_b = (_a = ref.current) === null || _a === void 0 ? void 0 : _a.getDefaultAdvancedFilterDatas()) !== null && _b !== void 0 ? _b : [];
if (datas.length)
setAdvancedFilterDatas(datas);
setCaseSensitive(true);
setLimitStatus(false);
setTopN(3000);
setSection(false);
setItemRepeat(false);
setItemCount(false);
setItemSumCount(false);
setShowFields(defaultFields.map(function (field) { return (tslib_1.__assign(tslib_1.__assign({}, field), { checked: true, disabled: false })); }));
setSortFields([]);
setGroupByFields([]);
setSection(false);
setLeftOpenRightClose(false);
setSectionField((_c = segmentFields[0]) === null || _c === void 0 ? void 0 : _c.name);
setSectionNorm('');
setAvgSection(true);
setSectionWidthValue(1);
setSections([]);
}
};
var handleConfirm = function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
var values, result;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, Promise.all(store.children
.filter(function (model) { return [types_1.ADVANCED_FILTER_NAME.HEADER, types_1.ADVANCED_FILTER_NAME.FILTER, types_1.ADVANCED_FILTER_NAME.FILTER_SUB].some(function (name) { var _a; return (_a = model.name) === null || _a === void 0 ? void 0 : _a.startsWith(name); }); })
.map(function (model) { return model === null || model === void 0 ? void 0 : model.validate({}); }))];
case 1:
values = _a.sent();
if (values.some(function (value) { return !value; }))
return [2 /*return*/];
result = {
advancedHeader: advancedHeaderData,
advancedFilter: advancedFilterDatas,
caseSensitive: caseSensitive,
limitParam: { topN: topN, limitStatus: limitStatus },
optionsParam: {
itemCount: itemCount,
itemRepeat: itemRepeat,
itemSumCount: itemSumCount,
showFields: showFields.filter(function (field) { return field.checked; }),
sortFields: sortFields,
groupByFields: groupByFields,
section: section,
sectionParams: { avgSection: avgSection, leftOpenRightClose: leftOpenRightClose, sectionField: sectionField, sectionNorm: sectionNorm, sections: sections }
}
};
console.log(result);
return [2 /*return*/];
}
});
}); };
var renderChild = function (control, index, value) {
var props = {
formMode: 'horizontal',
key: "".concat(control.name, "-").concat(control.type, "-").concat(index),
label: "".concat(control.groupName ? "".concat(control.groupName, " \u00B7 ") : '').concat(control.label),
value: value,
onChange: handleHeaderValueChange
};
return render("".concat(control.name, "-").concat(index), control, props);
};
return (react_1.default.createElement(antd_1.Modal, { zIndex: 9, title: __('CRUD.advancedFilter') + (advancedTitle ? " - ".concat(advancedTitle) : ''), width: 1000, className: 'Modal-advanced common-modal-component', bodyStyle: { overflowY: 'auto' }, maskClosable: false, visible: showAdvancedFilter, onCancel: hideAdvancedFilter, getContainer: env.getTopModalContainer, footer: (react_1.default.createElement(ModalFooter_1.default, { env: env, translate: __, classnames: cx, columnInfo: {
advancedHeader: advancedHeaderData,
advancedFilter: advancedFilterDatas,
caseSensitive: caseSensitive,
limitParam: { topN: topN, limitStatus: limitStatus },
optionsParam: {
itemCount: itemCount,
itemRepeat: itemRepeat,
itemSumCount: itemSumCount,
showFields: showFields.filter(function (field) { return field.checked; }).map(function (field) { return field.name; }),
sortFields: sortFields.map(function (field) { return field.name; }),
groupByFields: groupByFields.map(function (field) { return field.name; }),
section: section,
sectionParams: { avgSection: avgSection, leftOpenRightClose: leftOpenRightClose, sectionField: sectionField, sectionNorm: sectionNorm, sections: sections }
}
}, advancedFilterApi: advancedFilterApi, onChange: handleTemplateChange, onConfirm: handleConfirm, onReset: handleReset })) },
react_1.default.createElement("form", { className: cx("Form", "Form--horizontal") },
react_1.default.createElement("div", { className: 'Modal-advanced-body' },
(Array.isArray(advancedHeader) && advancedHeader.length > 0) && (react_1.default.createElement("div", { className: 'Modal-advanced-body-condition' },
react_1.default.createElement(antd_1.Row, { className: 'filter-row', gutter: 24, style: { margin: 0 } }, advancedHeader.map(function (item, idx) { return (react_1.default.createElement(antd_1.Col, { key: item.name, style: { padding: 0 }, span: 12 }, renderChild(item, idx, advancedHeaderData[item.name]))); })))),
(Array.isArray(advancedFilterDatas) && advancedFilterDatas.length > 0) && (react_1.default.createElement(antd_1.Divider, { style: { userSelect: 'none' }, orientation: "left", orientationMargin: 0, className: "fold-query-text" },
"\u6761\u4EF6\u67E5\u8BE2 ",
react_1.default.createElement(DownOutlined_1.default, { rotate: foldCondition ? 270 : 0, onClick: function () { setFoldCondition(function (fold) { return !fold; }); } }))),
react_1.default.createElement(ConditionQuery_1.default, { visible: !foldCondition, render: render, env: env, classnames: cx, ref: ref, advancedQueryFields: advancedQueryFields, advancedFilter: advancedFilter, advancedFilterDatas: advancedFilterDatas, caseSensitive: caseSensitive, limitStatus: limitStatus, topN: topN, setAdvancedFilterDatas: setAdvancedFilterDatas, setCaseSensitive: setCaseSensitive, setLimitStatus: setLimitStatus, setTopN: setTopN }),
showOptionQuery && (react_1.default.createElement(antd_1.Divider, { style: { userSelect: 'none' }, orientation: "left", orientationMargin: "0", className: 'fold-query-text' },
"\u9009\u9879\u67E5\u8BE2 ",
react_1.default.createElement(DownOutlined_1.default, { rotate: foldOption ? 270 : 0, onClick: function () { setFoldOption(function (fold) { return !fold; }); } }))),
showOptionQuery && (react_1.default.createElement(OptionQuery_1.default, { visible: !foldOption, segmentFields: segmentFields, itemRepeat: itemRepeat, itemCount: itemCount, itemSumCount: itemSumCount, showFields: showFields, sortFields: sortFields, groupByFields: groupByFields, section: section, leftOpenRightClose: leftOpenRightClose, sectionField: sectionField, avgSection: avgSection, sectionNorm: sectionNorm, sectionWidthValue: sectionWidthValue, sections: sections, setItemRepeat: setItemRepeat, setItemCount: setItemCount, setItemSumCount: setItemSumCount, setShowFields: setShowFields, setSortFields: setSortFields, setGroupByFields: setGroupByFields, setSection: setSection, setLeftOpenRightClose: setLeftOpenRightClose, setSectionField: setSectionField, setAvgSection: setAvgSection, setSectionNorm: setSectionNorm, setSectionWidthValue: setSectionWidthValue, setSections: setSections }))))));
};
exports.default = AdvancedQuery;
//# sourceMappingURL=./renderers/CRUD/components/AdvancedQuery/index.js.map