UNPKG

fastlion-amis

Version:

一种MIS页面生成工具

324 lines (323 loc) 24 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 icons_1 = require("@ant-design/icons"); var types_1 = require("./types"); var icons_2 = require("../../../../components/icons"); var sortablejs_1 = tslib_1.__importDefault(require("sortablejs")); var CheckAllOptionEnum; (function (CheckAllOptionEnum) { CheckAllOptionEnum["SELECT_ALL"] = "\u5168\u9009"; CheckAllOptionEnum["SELECT_REVERSE"] = "\u53CD\u9009"; CheckAllOptionEnum["CLEAR_ALL"] = "\u5168\u6E05"; })(CheckAllOptionEnum || (CheckAllOptionEnum = {})); var OptionQuery = function (props) { var _a; var visible = props.visible, segmentFields = props.segmentFields, itemRepeat = props.itemRepeat, itemCount = props.itemCount, itemSumCount = props.itemSumCount, showFields = props.showFields, sortFields = props.sortFields, groupByFields = props.groupByFields, section = props.section, leftOpenRightClose = props.leftOpenRightClose, sectionField = props.sectionField, avgSection = props.avgSection, sectionNorm = props.sectionNorm, sectionWidthValue = props.sectionWidthValue, sections = props.sections, setItemRepeat = props.setItemRepeat, setItemCount = props.setItemCount, setItemSumCount = props.setItemSumCount, setShowFields = props.setShowFields, setSortFields = props.setSortFields, setGroupByFields = props.setGroupByFields, setSection = props.setSection, setLeftOpenRightClose = props.setLeftOpenRightClose, setSectionField = props.setSectionField, setAvgSection = props.setAvgSection, setSectionNorm = props.setSectionNorm, setSectionWidthValue = props.setSectionWidthValue, setSections = props.setSections; var _b = (0, react_1.useState)(), selectedShowField = _b[0], setSelectedShowField = _b[1]; var _c = (0, react_1.useState)(1), sectionValue = _c[0], setSectionValue = _c[1]; var _d = (0, react_1.useState)(''), searchValue = _d[0], setSearchValue = _d[1]; var inputRef = (0, react_1.useRef)(null); var innerRef = (0, react_1.useRef)(null); (0, react_1.useEffect)(function () { var sortable = new sortablejs_1.default(document.getElementById("transfer-target-0"), { group: '.transfer-target-content', handle: '.item-label', animation: 150, onEnd: function (e) { var oldIndex = e.oldIndex; var newIndex = e.newIndex; if (oldIndex != undefined && newIndex != undefined) { setSortFields(function (fields) { var newFields = tslib_1.__spreadArray([], fields, true); var tempField = fields[oldIndex]; newFields[oldIndex] = newFields[newIndex]; newFields[newIndex] = tempField; return newFields; }); } } }); return function () { sortable.destroy(); }; }, []); // 勾选数据去重,仅查项数,仅查总数 var handleCheckOption = function (type, checked) { switch (type) { case 'repeat': setItemRepeat(checked); if (checked) { setShowFields(function (fields) { return fields.map(function (field) { return (field.comparable === false ? tslib_1.__assign(tslib_1.__assign({}, field), { checked: false }) : field); }); }); } break; case 'count': setItemCount(checked); setSortFields([]); if (checked) { setShowFields(function (fields) { if (fields.every(function (field) { return field.checked; })) { return fields.map(function (field) { return (tslib_1.__assign(tslib_1.__assign({}, field), { checked: false })); }); } return fields; }); } break; case 'sumCount': setItemSumCount(checked); setShowFields(function (fields) { if (checked && fields.every(function (field) { return field.checked; })) { setGroupByFields([]); setSortFields([]); return fields.map(function (field) { return (tslib_1.__assign(tslib_1.__assign({}, field), { checked: field.type == 'number' || field.type == 'progress' })); }); } return fields; }); break; default: break; } }; // 勾选全选,全清,反选 var handleCheckAll = function (option) { var some = itemRepeat || itemCount || itemSumCount; setShowFields(function (fields) { switch (option) { case CheckAllOptionEnum.SELECT_ALL: if (some) { return fields.map(function (field) { return (field.comparable === true && !field.disabled ? tslib_1.__assign(tslib_1.__assign({}, field), { checked: true }) : field); }); } else { return fields.map(function (field) { return (tslib_1.__assign(tslib_1.__assign({}, field), { checked: true })); }); } case CheckAllOptionEnum.CLEAR_ALL: return fields.map(function (field) { return (tslib_1.__assign(tslib_1.__assign({}, field), { checked: field.disabled ? field.checked : (some ? false : field.disabled) })); }); case CheckAllOptionEnum.SELECT_REVERSE: return fields.map(function (field) { return (tslib_1.__assign(tslib_1.__assign({}, field), { checked: !field.disabled ? !field.checked : field.checked })); }); default: return fields; } }); }; // 勾选显示字段 var handleCheckShowField = function (showField, checked, isCheck) { var _a; setSelectedShowField(function (field) { if (checked) { return showField; } else { return field ? (field.name === showField.name ? undefined : showField) : showField; } }); (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus(); if (isCheck) { setShowFields(function (fields) { return fields.map(function (field) { if (field.name === showField.name) { return tslib_1.__assign(tslib_1.__assign({}, field), { checked: checked }); } return field; }); }); } }; var handleAddField = (0, react_1.useCallback)(function (type, fields) { if (selectedShowField) { if (type === 0) { var tempFields = fields.slice(); if (itemCount || itemSumCount) { antd_1.message.warning('仅查项数,仅查总数不能使用字段排序'); return; } if (section && (selectedShowField.type != 'number' && selectedShowField.type != 'date' && selectedShowField.type != 'progress')) { antd_1.message.warning('分段查询,非数字时间类型不能使用字段排序'); return; } if (!tempFields.some(function (field) { return field.name === selectedShowField.name; })) { tempFields.push(tslib_1.__assign(tslib_1.__assign({}, selectedShowField), { order: 0 })); setSortFields(tempFields); } else { antd_1.message.warning('已添加过该字段'); } } else { var tempFields = fields.slice(); if (!tempFields.some(function (field) { return field.name === selectedShowField.name; })) { tempFields.push(selectedShowField); setGroupByFields(tempFields); } else { antd_1.message.warning('已添加过该字段'); return; } setShowFields(function (fields) { return fields.map(function (field) { var _a; if (field.name === selectedShowField.name) { return tslib_1.__assign(tslib_1.__assign({}, field), { checked: true, disabled: true }); } if (fields.every(function (field) { return field.checked; })) { return tslib_1.__assign(tslib_1.__assign({}, field), { checked: (_a = field.isNumerical) !== null && _a !== void 0 ? _a : false }); } return field; }); }); } } }, [selectedShowField]); var handleDeleteField = function (type, names) { if (type === 0) { setSortFields(function (fields) { return fields.filter(function (field) { return !names.includes(field.name); }); }); } else { setGroupByFields(function (fields) { return fields.filter(function (field) { return !names.includes(field.name); }); }); setShowFields(function (fields) { return fields.map(function (field) { var target = names.find(function (name) { return name === field.name; }); return target ? tslib_1.__assign(tslib_1.__assign({}, field), { checked: false, disabled: false }) : field; }); }); } }; // 排序字段修改 var handleSortField = function (field) { setSortFields(function (fields) { return fields.map(function (sortField) { if (field.name === sortField.name) { return tslib_1.__assign(tslib_1.__assign({}, sortField), { order: (1 ^ sortField.order) }); } return sortField; }); }); }; // 勾选分段查项 var handleCheckSegment = function (checked) { if (checked) { setShowFields(function (fields) { if (fields.every(function (field) { return field.checked; })) { return fields.map(function (field) { var isChecked = field.type == 'number' || field.type == 'date' || field.type == 'progress'; if (!field.disabled) { return tslib_1.__assign(tslib_1.__assign({}, field), { checked: isChecked }); } return field; }); } return fields; }); } setSection(checked); }; //修改分段字段 var handleChangeSectionField = function (value) { var field = segmentFields.find(function (field) { return field.name == value; }); if ((field === null || field === void 0 ? void 0 : field.type) !== 'date') { setSectionNorm(''); } else { setSectionNorm('year'); } setSectionField(value); }; //添加段位列表 var handleAddSections = (0, react_1.useCallback)(function () { setSections(function (sections) { if (sections.includes(sectionValue)) { antd_1.message.warning('已添加过该段位'); return sections; } return sections.concat(sectionValue); }); }, [sectionValue]); var renderTarget = function (type, fields) { var sortDisabled = !!!(selectedShowField === null || selectedShowField === void 0 ? void 0 : selectedShowField.comparable) || itemSumCount || itemCount; var groupDisabled = !!!(selectedShowField === null || selectedShowField === void 0 ? void 0 : selectedShowField.comparable) || itemSumCount; var disabledBtn = type == 0 ? sortDisabled : groupDisabled; return (react_1.default.createElement("div", { className: "target-box" }, react_1.default.createElement("div", { className: "btn-group" }, react_1.default.createElement("div", { style: { cursor: disabledBtn ? 'not-allowed' : 'pointer' }, className: " btn", onClick: disabledBtn ? undefined : function () { return handleAddField(type, fields); } }, react_1.default.createElement("i", { className: 'fa fa-chevron-right' }))), react_1.default.createElement("div", { className: "transfer-target" }, react_1.default.createElement("div", { className: "transfer-target-header" }, react_1.default.createElement("span", { className: "title" }, type === 0 ? '排序字段' : '分组字段'), react_1.default.createElement(antd_1.Button, { type: 'link', onClick: function () { return handleDeleteField(type, fields.map(function (field) { return field.name; })); } }, "\u6E05\u7A7A")), react_1.default.createElement("div", { className: "transfer-target-content" }, react_1.default.createElement("div", { className: 'option', id: "transfer-target-".concat(type) }, type === 0 && fields.map(function (field, index) { return (react_1.default.createElement("span", { className: 'option-item', key: field.name }, react_1.default.createElement("span", { className: 'item-title' }, index + 1), react_1.default.createElement("span", { onClick: function () { handleSortField(field); } }, react_1.default.createElement(icons_2.Icon, { icon: "".concat(field.order === 0 ? '#icon-toolshunxu' : '#icon-tooldaoxu'), symbol: true })), react_1.default.createElement("span", { className: 'item-label' }, field.label), react_1.default.createElement(icons_1.CloseOutlined, { onClick: function () { return handleDeleteField(type, [field.name]); } }))); }), type === 1 && fields.map(function (field, index) { return (react_1.default.createElement("div", { className: 'option-item', key: field.name }, react_1.default.createElement("span", { className: 'item-title' }, index + 1), react_1.default.createElement("span", { className: 'item-label' }, field.label), react_1.default.createElement(icons_1.CloseOutlined, { onClick: function () { return handleDeleteField(type, [field.name]); } }))); })), type === 1 && react_1.default.createElement("div", { className: 'transfer-target-footer' }, "\u5EFA\u8BAE\u9009\u62E9\u5C11\u4E8E8\u4E2A\u5206\u7EC4\u5B57\u6BB5 "))))); }; return visible ? (react_1.default.createElement("div", { className: 'transfer-check' }, react_1.default.createElement("div", { className: 'transfer-check-group' }, react_1.default.createElement(antd_1.Checkbox, { checked: itemRepeat, onChange: function (e) { return handleCheckOption('repeat', e.target.checked); } }, "\u6570\u636E\u53BB\u91CD"), react_1.default.createElement(antd_1.Checkbox, { checked: itemCount, disabled: itemSumCount, onChange: function (e) { return handleCheckOption('count', e.target.checked); } }, "\u4EC5\u67E5\u9879\u6570"), react_1.default.createElement(antd_1.Checkbox, { checked: itemSumCount, disabled: itemCount, onChange: function (e) { return handleCheckOption('sumCount', e.target.checked); } }, "\u4EC5\u67E5\u603B\u6570")), react_1.default.createElement("div", { className: 'transfer-container' }, react_1.default.createElement("div", { className: 'transfer-source' }, react_1.default.createElement("div", { className: "transfer-source-header" }, react_1.default.createElement("span", { className: "title" }, "\u663E\u793A\u5B57\u6BB5"), react_1.default.createElement("div", { className: "option-group" }, Object.values(CheckAllOptionEnum).map(function (value, index) { return react_1.default.createElement("div", { key: index }, react_1.default.createElement("span", { className: "option", onClick: function () { return handleCheckAll(value); } }, value), "\u00A0\u00A0"); }))), react_1.default.createElement("div", { className: 'transfer-source-position' }, react_1.default.createElement(antd_1.Input, { ref: inputRef, onKeyDown: function (e) { //键盘事件后清空值,后续重新输入 e.stopPropagation(); if (e.key === 'Enter') { setTimeout(function () { setSearchValue(''); }, 500); } }, onCompositionEnd: function (e) { setTimeout(function () { setSearchValue(''); }, 500); }, onBlur: function () { return setSearchValue(''); }, value: searchValue, onChange: function (e) { return setSearchValue(e.target.value); } })), react_1.default.createElement("div", { className: "transfer-source-content" }, react_1.default.createElement("div", { className: "source-content-inner", ref: innerRef }, showFields.map(function (field) { return (react_1.default.createElement("section", { key: field.name, className: (selectedShowField === null || selectedShowField === void 0 ? void 0 : selectedShowField.name) === field.name ? 'display-field display-field-active' : 'display-field' }, react_1.default.createElement(antd_1.Checkbox, { disabled: field.disabled, checked: field.checked, onChange: function (e) { return handleCheckShowField(field, e.target.checked, true); } }), react_1.default.createElement("span", { className: 'display-field-label', onClick: function () { handleCheckShowField(field, false, false); } }, field.label))); })))), react_1.default.createElement("div", { className: 'transfer-target-group' }, renderTarget(0, sortFields), renderTarget(1, groupByFields))), react_1.default.createElement("div", { style: { margin: '5px 0' } }, react_1.default.createElement(antd_1.Checkbox, { disabled: itemSumCount, checked: section, onChange: function (e) { return handleCheckSegment(e.target.checked); } }, "\u5206\u6BB5\u67E5\u8BE2"), section && react_1.default.createElement(antd_1.Checkbox, { checked: leftOpenRightClose, onChange: function (e) { return setLeftOpenRightClose(e.target.checked); } }, "\u533A\u95F4\u5DE6\u5F00\u53F3\u95ED")), section && (react_1.default.createElement("div", { className: 'transfer-segment-container' }, react_1.default.createElement("div", { className: 'left-content' }, react_1.default.createElement("div", { className: 'segment-select' }, react_1.default.createElement("div", { className: 'segment-select-item' }, react_1.default.createElement("span", null, "\u5206\u6BB5\u5B57\u6BB5"), react_1.default.createElement(antd_1.Select, { style: { width: 150, marginLeft: 10 }, dropdownClassName: "dropdown-select-style", value: sectionField, onChange: function (value) { return handleChangeSectionField(value); } }, segmentFields.map(function (field) { return react_1.default.createElement(antd_1.Select.Option, { key: field.name, value: field.name }, field.label); }))), react_1.default.createElement("div", { className: 'segment-select-item' }, react_1.default.createElement("span", null, "\u7C7B\u578B"), react_1.default.createElement(antd_1.Select, { style: { width: 150, marginLeft: 10 }, value: avgSection, onChange: setAvgSection, dropdownClassName: "dropdown-select-style" }, react_1.default.createElement(antd_1.Select.Option, { value: true }, "\u5E73\u5747\u6BB5\u4F4D"), react_1.default.createElement(antd_1.Select.Option, { value: false }, "\u81EA\u5B9A\u4E49\u6BB5\u4F4D"))), react_1.default.createElement("div", { className: 'segment-select-item' }, react_1.default.createElement("span", null, "\u5206\u6BB5\u6807\u51C6"), react_1.default.createElement(antd_1.Select, { value: sectionNorm, onChange: setSectionNorm, disabled: ((_a = segmentFields.find(function (field) { return field.name == sectionField; })) === null || _a === void 0 ? void 0 : _a.type) !== 'date', style: { width: 150, marginLeft: 10 }, dropdownClassName: "dropdown-select-style" }, types_1.SegmentStandardOptions.map(function (option) { return react_1.default.createElement(antd_1.Select.Option, { key: option.value, value: option.value }, option.title); }))), react_1.default.createElement("div", { className: 'segment-select-item' }, react_1.default.createElement("span", null, avgSection ? '宽度' : '段位'), avgSection ? react_1.default.createElement(antd_1.InputNumber, { value: sectionWidthValue, onChange: function (value) { return setSectionWidthValue(value !== null && value !== void 0 ? value : 0); }, min: 0, type: 'number', style: { width: 150, marginLeft: 10 } }) : react_1.default.createElement(antd_1.InputNumber, { value: sectionValue, onChange: function (value) { return setSectionValue(value !== null && value !== void 0 ? value : 0); }, type: 'number', style: { width: 150, marginLeft: 10 } })))), !avgSection && (react_1.default.createElement("div", { className: 'right-content' }, react_1.default.createElement("div", { className: 'target-box' }, react_1.default.createElement("div", { className: "btn-group" }, react_1.default.createElement("div", { style: { cursor: false ? 'not-allowed' : 'pointer' }, className: "btn", onClick: handleAddSections }, react_1.default.createElement("i", { className: 'fa fa-chevron-right' }))), react_1.default.createElement("div", { className: "transfer-target" }, react_1.default.createElement("div", { className: "transfer-target-header" }, react_1.default.createElement("span", { className: "title" }, "\u6BB5\u4F4D\u5217\u8868")), react_1.default.createElement("div", { className: "transfer-target-content" }, react_1.default.createElement("div", { className: "target-content-inner" }, sections.map(function (section) { return (react_1.default.createElement("div", { className: 'option-item', key: section }, react_1.default.createElement("span", { className: 'item-label' }, section), react_1.default.createElement("i", { className: 'fa fa-times', onClick: function () { return setSections(function (sections) { return sections.filter(function (item) { return item != section; }); }); } }))); }))))))))))) : null; }; exports.default = OptionQuery; //# sourceMappingURL=./renderers/CRUD/components/AdvancedQuery/OptionQuery.js.map