UNPKG

syber-lowcode-business-materials

Version:
361 lines (355 loc) 18.1 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports["default"] = SearchPro; var _modal = _interopRequireDefault(require("antd/lib/modal")); var _checkbox = _interopRequireDefault(require("antd/lib/checkbox")); var _message2 = _interopRequireDefault(require("antd/lib/message")); var _tag = _interopRequireDefault(require("antd/lib/tag")); var _button = _interopRequireDefault(require("antd/lib/button")); var _input = _interopRequireDefault(require("antd/lib/input")); var _select = _interopRequireDefault(require("antd/lib/select")); var _extends3 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _form = _interopRequireDefault(require("antd/lib/form")); var _stylesModule = _interopRequireDefault(require("./styles.module.scss")); var _type = require("./type"); var _icons = require("@ant-design/icons"); var _react = require("react"); var _Filter = _interopRequireDefault(require("./svg/Filter")); var _Clear = _interopRequireDefault(require("./svg/Clear")); var _Setting = _interopRequireDefault(require("./svg/Setting")); var _lodash = _interopRequireDefault(require("lodash")); function SearchPro(props) { var _props$columns4, _props$columns4$filte, _$filter, _props$searchFormSett, _props$searchFormSett2, _props$searchFormSett3, _props$searchFormSett4, _props$columns5, _props$columns6; var _Form$useForm = _form["default"].useForm(), form = _Form$useForm[0]; var timeoutRef = (0, _react.useRef)(null); var openButtonRef = (0, _react.useRef)(null); var _useState = (0, _react.useState)({ filter: false, settings: false }), modalOpen = _useState[0], setModalOpen = _useState[1]; // 统一管理弹窗开关 var _useState2 = (0, _react.useState)({ x: 0, y: 0 }), modalPosition = _useState2[0], setModalPosition = _useState2[1]; // 手动定义弹窗位置 var _useState3 = (0, _react.useState)([]), checkValues = _useState3[0], setCheckValues = _useState3[1]; // 多选框双向绑定 var _useState4 = (0, _react.useState)([]), userSettings = _useState4[0], setUserSettings = _useState4[1]; // 保存于用户层的设置 var _useState5 = (0, _react.useState)(props === null || props === void 0 ? void 0 : props.defaultParams), tipsMap = _useState5[0], setTipsMap = _useState5[1]; // 提示信息 var _useState6 = (0, _react.useState)(undefined), options = _useState6[0], setOptions = _useState6[1]; // 搜索框options var getTipsStr = function getTipsStr(value, key) { var _props$columns, _options$key, _options$key$filter, _options$key$filter$m; var columnsItem = props === null || props === void 0 ? void 0 : (_props$columns = props.columns) === null || _props$columns === void 0 ? void 0 : _props$columns.find(function (item) { return item.dataIndex === key; }); return ((columnsItem === null || columnsItem === void 0 ? void 0 : columnsItem.title) || '搜索') + " " + (columnsItem !== null && columnsItem !== void 0 && columnsItem.renderTips ? columnsItem.renderTips(value, options === null || options === void 0 ? void 0 : options[key]) : options !== null && options !== void 0 && options[key] ? "\u5305\u542B:\u201C" + (options === null || options === void 0 ? void 0 : (_options$key = options[key]) === null || _options$key === void 0 ? void 0 : (_options$key$filter = _options$key.filter(function (item) { return value.includes(item.value); })) === null || _options$key$filter === void 0 ? void 0 : (_options$key$filter$m = _options$key$filter.map(function (item) { return item.label; })) === null || _options$key$filter$m === void 0 ? void 0 : _options$key$filter$m.join('、')) + "\u201C" : value); }; // 查询按钮位置,用于弹窗定位 var setModalPositionFn = function setModalPositionFn() { if (openButtonRef !== null && openButtonRef !== void 0 && openButtonRef.current) { var _openButtonRef$curren; setModalPosition(openButtonRef === null || openButtonRef === void 0 ? void 0 : (_openButtonRef$curren = openButtonRef.current) === null || _openButtonRef$curren === void 0 ? void 0 : _openButtonRef$curren.getBoundingClientRect()); } }; var renderFormItem = function renderFormItem(item, maxTagCount) { var _item$placeholder; switch (item.type) { case 'select': return /*#__PURE__*/React.createElement(_select["default"], (0, _extends3["default"])({ options: item === null || item === void 0 ? void 0 : item.options, placeholder: (_item$placeholder = item === null || item === void 0 ? void 0 : item.placeholder) !== null && _item$placeholder !== void 0 ? _item$placeholder : '', maxTagCount: maxTagCount, allowClear: true }, item === null || item === void 0 ? void 0 : item.modalProps)); case 'input': return /*#__PURE__*/React.createElement(_input["default"], (0, _extends3["default"])({ placeholder: (item === null || item === void 0 ? void 0 : item.placeholder) || item.title }, item === null || item === void 0 ? void 0 : item.modalProps)); default: return ''; } }; (0, _react.useEffect)(function () { var _props$id, _props$columns2, _props$columns2$filte, _props$columns3, _props$columns3$filte; // 查询储存的设置(用户层&&页面层) var uid = (_props$id = props === null || props === void 0 ? void 0 : props.id) !== null && _props$id !== void 0 ? _props$id : window.location.pathname; // TODO:页面唯一标识(修改正确唯一标识,暂时使用路由) var setting = JSON.parse(localStorage.getItem('searchProSettings')) || {}; if (setting[uid]) { setUserSettings(setting[uid]); // 配置展示 setCheckValues(setting[uid]); // 默认值 } // 默认值 if (props !== null && props !== void 0 && props.defaultParams) { form.setFieldsValue(props === null || props === void 0 ? void 0 : props.defaultParams); } // 组件options获取 var options = props === null || props === void 0 ? void 0 : (_props$columns2 = props.columns) === null || _props$columns2 === void 0 ? void 0 : (_props$columns2$filte = _props$columns2.filter(function (item) { return !!item.options; })) === null || _props$columns2$filte === void 0 ? void 0 : _props$columns2$filte.map(function (item) { return item === null || item === void 0 ? void 0 : item.options; }); var promiseIndex = props === null || props === void 0 ? void 0 : (_props$columns3 = props.columns) === null || _props$columns3 === void 0 ? void 0 : (_props$columns3$filte = _props$columns3.filter(function (item) { return !!item.options; })) === null || _props$columns3$filte === void 0 ? void 0 : _props$columns3$filte.map(function (item) { return item.dataIndex; }); var optionsMap = {}; promiseIndex.forEach(function (item, index) { optionsMap[item] = options[index]; }); setOptions(optionsMap); // 监听屏幕变化 window.addEventListener('resize', setModalPositionFn); return function () { window.removeEventListener('resize', setModalPositionFn); }; }, []); return /*#__PURE__*/React.createElement("div", { className: _stylesModule["default"].searchContainer + " " + (props === null || props === void 0 ? void 0 : props.classNames), style: (0, _extends3["default"])({ '--formItemWidth': '120px' }, props === null || props === void 0 ? void 0 : props.styles) }, /*#__PURE__*/React.createElement("div", { className: _stylesModule["default"].searchContent }, /*#__PURE__*/React.createElement("div", { className: _stylesModule["default"].settings }, /*#__PURE__*/React.createElement(_form["default"], { form: form, style: { display: 'flex', flex: '1', justifyContent: 'flex-end', gap: '10px', flexWrap: 'wrap' }, key: userSettings.join('-') }, props === null || props === void 0 ? void 0 : (_props$columns4 = props.columns) === null || _props$columns4 === void 0 ? void 0 : (_props$columns4$filte = _props$columns4.filter(function (item) { return userSettings === null || userSettings === void 0 ? void 0 : userSettings.includes(item === null || item === void 0 ? void 0 : item.key); })) === null || _props$columns4$filte === void 0 ? void 0 : _props$columns4$filte.map(function (item, index) { return /*#__PURE__*/React.createElement(_form["default"].Item, { label: item.title, name: item === null || item === void 0 ? void 0 : item.dataIndex, style: (0, _extends3["default"])({ marginBottom: '0' }, item.styles), key: (item === null || item === void 0 ? void 0 : item.key) || index, className: _stylesModule["default"].formItem }, renderFormItem(item, 0)); })), userSettings && !!(userSettings !== null && userSettings !== void 0 && userSettings.length) && /*#__PURE__*/React.createElement(_button["default"], { type: "primary", onClick: function onClick() { clearTimeout(timeoutRef.current); if (props !== null && props !== void 0 && props.onSearchSubmit) { setTipsMap(form.getFieldsValue()); props.onSearchSubmit(form.getFieldsValue()); } } }, "\u67E5\u8BE2"), /*#__PURE__*/React.createElement(_form["default"], { form: form }, !(props !== null && props !== void 0 && props.hiddenSearchInput) && /*#__PURE__*/React.createElement(_form["default"].Item, { label: "", name: (props === null || props === void 0 ? void 0 : props.searchInputDataIndex) || 'searchInput', style: { margin: '0' } }, /*#__PURE__*/React.createElement(_input["default"], { prefix: /*#__PURE__*/React.createElement(_icons.SearchOutlined, null), style: { borderRadius: '16px' }, placeholder: (props === null || props === void 0 ? void 0 : props.searchInputPlaceholder) || '输入搜索内容', onPressEnter: function onPressEnter() { clearTimeout(timeoutRef.current); if (props !== null && props !== void 0 && props.onSearchSubmit) { setTipsMap(form.getFieldsValue()); props.onSearchSubmit(form.getFieldsValue()); } }, onChange: function onChange() { clearTimeout(timeoutRef.current); timeoutRef.current = setTimeout(function () { if (props !== null && props !== void 0 && props.onSearchSubmit) { setTipsMap(form.getFieldsValue()); props.onSearchSubmit(form.getFieldsValue()); } }, 800); } }))), /*#__PURE__*/React.createElement("div", { ref: openButtonRef, className: _stylesModule["default"].iconWrap, onClick: function onClick() { setModalOpen(function (v) { return (0, _extends3["default"])({}, v, { filter: true }); }); }, onMouseEnter: setModalPositionFn }, /*#__PURE__*/React.createElement(_Filter["default"], null), /*#__PURE__*/React.createElement("div", { className: _stylesModule["default"].filterNumber }, (_$filter = _lodash["default"].filter(tipsMap, function (value) { return !!value && !Array.isArray(value) || Array.isArray(value) && !!(value !== null && value !== void 0 && value.length); })) === null || _$filter === void 0 ? void 0 : _$filter.length)), /*#__PURE__*/React.createElement("div", { className: _stylesModule["default"].iconWrap, onClick: function onClick() { form.resetFields(); if (props !== null && props !== void 0 && props.onSearchSubmit) { setTipsMap(form.getFieldsValue()); props.onSearchSubmit(form.getFieldsValue()); } } }, /*#__PURE__*/React.createElement(_Clear["default"], null)))), /*#__PURE__*/React.createElement("div", null, _lodash["default"].map(tipsMap, function (value, key) { if (!value || Array.isArray(value) && !(value !== null && value !== void 0 && value.length)) return; return /*#__PURE__*/React.createElement(_tag["default"], { closeIcon: true, onClose: function onClose() { var _form$setFieldsValue; form.setFieldsValue((_form$setFieldsValue = {}, _form$setFieldsValue[key] = undefined, _form$setFieldsValue)); if (props !== null && props !== void 0 && props.onSearchSubmit) { setTipsMap(form.getFieldsValue()); props.onSearchSubmit(form.getFieldsValue()); } }, style: { marginTop: '10px' } }, getTipsStr(value, key)); })), /*#__PURE__*/React.createElement(_modal["default"], { title: /*#__PURE__*/React.createElement("div", { style: { display: 'flex', alignItems: 'center', justifyContent: 'space-between', width: '100%' } }, "\u6DFB\u52A0\u6761\u4EF6\u7B5B\u9009", /*#__PURE__*/React.createElement("div", { className: _stylesModule["default"].iconWrap, onClick: function onClick() { setModalOpen(function (v) { return (0, _extends3["default"])({}, v, { settings: !v.settings }); }); } }, /*#__PURE__*/React.createElement(_Setting["default"], { style: { fillOpacity: modalOpen !== null && modalOpen !== void 0 && modalOpen.settings ? '1' : '0.5' } }))), open: modalOpen.filter // type="modalMiddle" , onOk: function onOk() { if (!(modalOpen !== null && modalOpen !== void 0 && modalOpen.settings)) { // 搜索 setModalOpen(function (v) { return (0, _extends3["default"])({}, v, { filter: false }); }); if (props !== null && props !== void 0 && props.onSearchSubmit) { setTipsMap(form.getFieldsValue()); props.onSearchSubmit(form.getFieldsValue()); } } else { var _props$id2, _extends2; // 保存设置 var uid = (_props$id2 = props === null || props === void 0 ? void 0 : props.id) !== null && _props$id2 !== void 0 ? _props$id2 : window.location.pathname; // TODO:页面唯一标识(修改正确唯一标识,暂时使用路由) var setting = JSON.parse(localStorage.getItem('searchProSettings')) || {}; localStorage.setItem('searchProSettings', JSON.stringify((0, _extends3["default"])({}, setting, (_extends2 = {}, _extends2[uid] = checkValues, _extends2)))); setUserSettings(checkValues); setModalOpen(function (v) { return (0, _extends3["default"])({}, v, { settings: false }); }); } }, onCancel: function onCancel() { if (!(modalOpen !== null && modalOpen !== void 0 && modalOpen.settings)) { setModalOpen(function (v) { return (0, _extends3["default"])({}, v, { filter: false }); }); } else { setModalOpen(function (v) { return (0, _extends3["default"])({}, v, { settings: false }); }); } }, okText: modalOpen !== null && modalOpen !== void 0 && modalOpen.settings ? '确认保存' : '确认查询', closable: false, forceRender: true, width: (props === null || props === void 0 ? void 0 : (_props$searchFormSett = props.searchFormSettings) === null || _props$searchFormSett === void 0 ? void 0 : _props$searchFormSett.modalWidth) || 470, style: { margin: "0 0 0 " + (modalPosition.x - ((props === null || props === void 0 ? void 0 : (_props$searchFormSett2 = props.searchFormSettings) === null || _props$searchFormSett2 === void 0 ? void 0 : _props$searchFormSett2.modalWidth) || 470) + 32) + "px", top: modalPosition.y + 32 + "px" }, mask: false, cancelText: '取消' }, /*#__PURE__*/React.createElement(_react.Fragment, null, /*#__PURE__*/React.createElement(_form["default"], { form: form, style: { display: modalOpen !== null && modalOpen !== void 0 && modalOpen.settings ? 'none' : 'grid', gridTemplateColumns: "repeat(" + ((_props$searchFormSett3 = props === null || props === void 0 ? void 0 : (_props$searchFormSett4 = props.searchFormSettings) === null || _props$searchFormSett4 === void 0 ? void 0 : _props$searchFormSett4.columnSize) !== null && _props$searchFormSett3 !== void 0 ? _props$searchFormSett3 : 1) + ", 1fr)", gap: '24px' } }, props === null || props === void 0 ? void 0 : (_props$columns5 = props.columns) === null || _props$columns5 === void 0 ? void 0 : _props$columns5.map(function (item, index) { var _props$searchFormSett5; return /*#__PURE__*/React.createElement(_form["default"].Item, { label: item.title, name: item === null || item === void 0 ? void 0 : item.dataIndex, style: { marginBottom: '0', width: '100%' }, key: (item === null || item === void 0 ? void 0 : item.key) || index, labelCol: item.labelCol || (props === null || props === void 0 ? void 0 : (_props$searchFormSett5 = props.searchFormSettings) === null || _props$searchFormSett5 === void 0 ? void 0 : _props$searchFormSett5.labelCol) || _type.defaultLabelCol }, renderFormItem(item, 3)); })), /*#__PURE__*/React.createElement("div", { style: { display: modalOpen !== null && modalOpen !== void 0 && modalOpen.settings ? 'block' : 'none' } }, /*#__PURE__*/React.createElement(_checkbox["default"].Group, { options: props === null || props === void 0 ? void 0 : (_props$columns6 = props.columns) === null || _props$columns6 === void 0 ? void 0 : _props$columns6.map(function (item) { return { label: item.title, value: item.key }; }), value: checkValues, style: { display: 'grid', gridTemplateColumns: "repeat(3, 1fr)", gap: '24px' }, onChange: function onChange(e) { if ((e === null || e === void 0 ? void 0 : e.length) > 3) { // 提示数量不能超过三个 _message2["default"].warning('最多只能选择三个'); } if ((e === null || e === void 0 ? void 0 : e.length) <= 3) { setCheckValues(e); } } }))))); }