UNPKG

fastlion-amis

Version:

一种MIS页面生成工具

256 lines (255 loc) 19.3 kB
"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