UNPKG

maycur-business

Version:

maycur business react components of web

652 lines (557 loc) 25 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; require("maycur-antd/lib/list/style/css"); var _list = _interopRequireDefault(require("maycur-antd/lib/list")); require("maycur-antd/lib/alert/style/css"); var _alert = _interopRequireDefault(require("maycur-antd/lib/alert")); require("maycur-antd/lib/select/style/css"); var _select = _interopRequireDefault(require("maycur-antd/lib/select")); require("maycur-antd/lib/tabs/style/css"); var _tabs = _interopRequireDefault(require("maycur-antd/lib/tabs")); require("maycur-antd/lib/breadcrumb/style/css"); var _breadcrumb = _interopRequireDefault(require("maycur-antd/lib/breadcrumb")); require("maycur-antd/lib/input/style/css"); var _input = _interopRequireDefault(require("maycur-antd/lib/input")); var _react = _interopRequireWildcard(require("react")); var _reactDom = _interopRequireDefault(require("react-dom")); var _DepartmentList = _interopRequireDefault(require("../DepartmentList")); var _UserGroupList = _interopRequireDefault(require("../UserGroupList")); var _utils = _interopRequireDefault(require("../../utils/utils")); var _constants = _interopRequireDefault(require("../../utils/constants")); var _reactI18next = require("react-i18next"); var _i18next = _interopRequireDefault(require("i18next")); var _mkTranslate = _interopRequireDefault(require("../../utils/mkTranslate")); var _lodash = _interopRequireDefault(require("lodash")); function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } var DEPARTMENT_PICKER = _constants["default"].DEPARTMENT_PICKER; var Search = _input["default"].Search; var BreadItem = _breadcrumb["default"].Item; var TabPane = _tabs["default"].TabPane; var prefix = _utils["default"].prefixCls; var Option = _select["default"].Option; var DepartmentTransfer = /*#__PURE__*/ function (_Component) { _inherits(DepartmentTransfer, _Component); function DepartmentTransfer(props) { var _this; _classCallCheck(this, DepartmentTransfer); _this = _possibleConstructorReturn(this, _getPrototypeOf(DepartmentTransfer).call(this, props)); _this.localeProcess = function () { _mkTranslate["default"].getNameSpace('DepartmentSelectionModal').then(function (t) { _this.setState({ t: t, breads: [{ name: t('departmentTransfer.addressBook'), code: null }] }); }); }; _this.onSearchSelectChange = function (accurate) { return _this.setState({ accurate: accurate }); }; _this.clearSearch = function () { // if (this.searchRef) { // let dom = ReactDOM.findDOMNode(this.searchRef); // let input = dom.getElementsByTagName("input")[0]; // input.value = ""; // } _this.setState({ searchKeyword: null, searchList: [], isSearching: false }); }; _this.setSelectList = function (selectList) { var onChange = _this.props.onChange; _this.setState({ selectList: selectList }); if (typeof onChange === 'function') { onChange(selectList); } }; _this.fetchRootDepartment = function () { var rootSync = _this.props.rootSync; var t = _this.state.t; return new Promise(function (resolve, reject) { if (typeof rootSync === 'function') { rootSync().then(function (res) { if (res.code === 'ACK') { var roots = []; if (res.data && res.data.length > 0) { roots = res.data.map(function (item) { return { code: item.code, name: item.name + t('departmentTransfer.root'), type: 'DEPARTMENT', hasChildren: false, hasDepartments: false, isRoot: true }; }); } resolve(roots); } else { reject(); } }); } else { reject(); } }); }; _this.setSourceList = function (departments, staffs) { var scope = _this.props.scope; var sourceList = _lodash["default"].unionBy([], departments, scope === DEPARTMENT_PICKER.SCOPE_DEPARTMENT ? [] : staffs, 'code'); _this.setState({ sourceList: sourceList }); }; _this.state = { sourceList: [], searchList: [], breads: [], selectList: props.selectList || [], allSelected: false, searchKeyword: null, sourceListLoading: false, searchListLoading: false, isSearching: false, t: _mkTranslate["default"].noop(), accurate: false }; _this.onSearch = _this.onSearch.bind(_assertThisInitialized(_this)); _this.clearSearch = _this.clearSearch.bind(_assertThisInitialized(_this)); _this.closeSelf = _this.closeSelf.bind(_assertThisInitialized(_this)); _this.unSelectItem = _this.unSelectItem.bind(_assertThisInitialized(_this)); _this.clearAll = _this.clearAll.bind(_assertThisInitialized(_this)); _this.onOutput = _this.onOutput.bind(_assertThisInitialized(_this)); _this.fetchSourceList = _this.fetchSourceList.bind(_assertThisInitialized(_this)); _this.fetchSearchList = _this.fetchSearchList.bind(_assertThisInitialized(_this)); _this.onDrillDown = _this.onDrillDown.bind(_assertThisInitialized(_this)); _this.goToBread = _this.goToBread.bind(_assertThisInitialized(_this)); _this.scrollBottom = _this.scrollBottom.bind(_assertThisInitialized(_this)); _this.localeProcess(); _this.selectBefore = _react["default"].createElement(_select["default"], { defaultValue: false, onChange: _this.onSearchSelectChange, dropdownClassName: 'ant-dept-search-dropdown', dropdownMatchSelectWidth: true }, _react["default"].createElement(Option, { value: false }, "\u6A21\u7CCA\u641C\u7D22"), _react["default"].createElement(Option, { value: true }, "\u7CBE\u786E\u641C\u7D22")); return _this; } _createClass(DepartmentTransfer, [{ key: "onSearch", value: function onSearch(value) { value = _lodash["default"].trim(value); this.setState({ isSearching: true, searchKeyword: value }); if (value) { this.fetchSearchList(value); } else { this.setState({ searchList: [], isSearching: false }); } } }, { key: "goToBread", value: function goToBread(bread) { var breads = this.state.breads; breads = _lodash["default"].dropRightWhile(breads, function (item) { return item.code !== bread.code; }); this.setState({ breads: breads }); this.fetchSourceList(bread.code); } }, { key: "unSelectItem", value: function unSelectItem(item) { var selectList = this.state.selectList; var idx = _lodash["default"].findIndex(selectList, { code: item.code }); if (idx !== -1) { selectList.splice(idx, 1); } this.setSelectList(selectList); } }, { key: "clearAll", value: function clearAll() { this.setSelectList([]); } }, { key: "closeSelf", value: function closeSelf() { var onCancel = this.props.onCancel; if (typeof onCancel === 'function') { onCancel(); } } }, { key: "onOutput", value: function onOutput(result) { var added = result.added, allSelected = result.allSelected, itemSelected = result.itemSelected; var _this$props = this.props, maxSelectLength = _this$props.maxSelectLength, onChange = _this$props.onChange; var selectList = this.state.selectList; /** 单选 */ if (!maxSelectLength || maxSelectLength === 1) { this.setState({ selectList: added }); setTimeout(this.scrollBottom); if (typeof onChange === 'function') { onChange(added); } return; } if (!allSelected || itemSelected) { selectList = _lodash["default"].unionWith(selectList, added, _utils["default"].bizEquals); } else { selectList = _lodash["default"].filter(selectList, function (o) { return added.every(function (i) { return i.code !== o.code; }); }); } this.setSelectList(selectList); setTimeout(this.scrollBottom); } }, { key: "onDrillDown", value: function onDrillDown(item) { var breads = this.state.breads; breads.push(item); this.setState({ breads: breads }); this.fetchSourceList(item.code); } // 获取根部门 }, { key: "fetchSourceList", value: function fetchSourceList(code, level) { var _this2 = this; var fetchDepartmentChildren = this.props.fetchDepartmentChildren; if (typeof fetchDepartmentChildren !== 'function') return; this.setState({ sourceListLoading: true }); fetchDepartmentChildren(code).then(function (data) { _this2.setState({ sourceListLoading: false }); if (_utils["default"].apiOK(data)) { var _data$data = data.data, departments = _data$data.departments, staffs = _data$data.staffs; // 1.先将获取到的部门 人员信息更新到视图 _lodash["default"].forEach(departments, function (item) { item.type = DEPARTMENT_PICKER.DEPARTMENT; }); _lodash["default"].forEach(staffs, function (item) { item.type = DEPARTMENT_PICKER.STAFF; }); _this2.setSourceList(departments, staffs); // 2.再插入根节点 如果是第一层 if (level === 1) { _this2.fetchRootDepartment().then(function (roots) { departments = [].concat(_toConsumableArray(roots), _toConsumableArray(departments)); _this2.setSourceList(departments, staffs); }); } } }, function () { _this2.setState({ sourceListLoading: false }); }); } }, { key: "fetchSearchList", value: function fetchSearchList(keyword) { var _this3 = this; var _this$props2 = this.props, scope = _this$props2.scope, searchDepartmentChildren = _this$props2.searchDepartmentChildren; if (typeof searchDepartmentChildren !== 'function') return; this.setState({ searchListLoading: true }); searchDepartmentChildren({ keyword: keyword, onlyEnable: true, accurate: this.state.accurate }, { pageId: DEPARTMENT_PICKER.SEARCH_LIST }).then(function (data) { _this3.setState({ searchListLoading: false }); if (_utils["default"].apiOK(data)) { var _data$data2 = data.data, departments = _data$data2.departments, staffs = _data$data2.staffs; _lodash["default"].forEach(departments, function (item) { item.type = DEPARTMENT_PICKER.DEPARTMENT; }); _lodash["default"].forEach(staffs, function (item) { item.type = DEPARTMENT_PICKER.STAFF; }); var searchList = _lodash["default"].unionBy([], scope === DEPARTMENT_PICKER.SCOPE_STAFF ? [] : departments, scope === DEPARTMENT_PICKER.SCOPE_DEPARTMENT ? [] : staffs, "code"); _this3.setState({ searchList: searchList }); } }, function () { _this3.setState({ searchListLoading: false }); }); } }, { key: "scrollBottom", value: function scrollBottom() { if (this.selectListRef) { var dom = _reactDom["default"].findDOMNode(this.selectListRef); dom.scrollTop = dom.scrollHeight; } } }, { key: "componentDidMount", value: function componentDidMount() { var breads = this.state.breads; var last = _lodash["default"].last(breads) || {}; this.fetchSourceList(last.code, 1); } }, { key: "UNSAFE_componentWillReceiveProps", value: function UNSAFE_componentWillReceiveProps(nextProps) { if (this.props.selectList !== nextProps.selectList) { this.setState({ selectList: nextProps.selectList }); } } }, { key: "render", value: function render() { var _this4 = this; var _this$state = this.state, sourceList = _this$state.sourceList, searchList = _this$state.searchList, selectList = _this$state.selectList, breads = _this$state.breads, searchKeyword = _this$state.searchKeyword, sourceListLoading = _this$state.sourceListLoading, searchListLoading = _this$state.searchListLoading, isSearching = _this$state.isSearching, t = _this$state.t, accurate = _this$state.accurate; var _this$props3 = this.props, scope = _this$props3.scope, justShowUserGroup = _this$props3.justShowUserGroup, isShowUserGroup = _this$props3.isShowUserGroup, maxSelectLength = _this$props3.maxSelectLength, fetchUserGroup = _this$props3.fetchUserGroup, leftAlertText = _this$props3.leftAlertText, renderAddition = _this$props3.renderAddition, includeChildDept = _this$props3.includeChildDept; var placeholder = t('departmentTransfer.placeholder'); switch (scope) { case DEPARTMENT_PICKER.SCOPE_DEPARTMENT: break; case DEPARTMENT_PICKER.SCOPE_STAFF: placeholder = t('departmentTransfer.staffPlaceholder'); break; default: break; } return _react["default"].createElement("div", { className: "".concat(prefix, "-department-picker-transfer") }, _react["default"].createElement("div", { className: 'transfer-content' }, _react["default"].createElement("div", { className: 'left' }, _react["default"].createElement(_tabs["default"], { defaultActiveKey: "DEPT" }, !justShowUserGroup ? _react["default"].createElement(TabPane, { tab: t('departmentTransfer.addressBook'), key: "DEPT" }, leftAlertText && _react["default"].createElement(_alert["default"], { message: leftAlertText, showIcon: true }), _react["default"].createElement("div", { className: "search-box".concat(searchKeyword ? ' searching' : '') }, _react["default"].createElement(Search, { addonBefore: this.selectBefore, value: searchKeyword, placeholder: accurate ? '搜索部门和人员名称' : placeholder, onChange: function onChange(e) { return _this4.setState({ searchKeyword: e.target.value }); }, onSearch: this.onSearch }), searchKeyword ? _react["default"].createElement("span", { className: 'fm fm-cross', onClick: this.clearSearch }) : null), isSearching ? _react["default"].createElement("div", { className: 'search-list' }, _react["default"].createElement(_DepartmentList["default"], _extends({ loading: searchListLoading }, this.props, { scope: scope, canDrillDown: false, sourceList: searchList, selectList: selectList, includeChildDept: includeChildDept, onOutput: this.onOutput }))) : _react["default"].createElement("div", { className: 'source-list' }, _react["default"].createElement(_breadcrumb["default"], null, breads.map(function (bread, idx) { return _react["default"].createElement(BreadItem, { key: bread.code }, idx !== breads.length - 1 ? _react["default"].createElement("a", { href: "javascript:void(0)", onClick: function onClick() { _this4.goToBread(bread); } }, bread.name) : _react["default"].createElement("span", null, bread.name)); })), _react["default"].createElement(_DepartmentList["default"], _extends({ loading: sourceListLoading }, this.props, { scope: scope, sourceList: sourceList, selectList: selectList, includeChildDept: includeChildDept, onOutput: this.onOutput, onDrillDown: this.onDrillDown })))) : null, justShowUserGroup || isShowUserGroup ? _react["default"].createElement(TabPane, { tab: t('departmentTransfer.byUserGroup'), key: "USER_GROUP" }, _react["default"].createElement("div", { className: 'user-group-wrapper' }, _react["default"].createElement(_UserGroupList["default"], { selectList: selectList, onOutput: this.onOutput, fetchUserGroup: fetchUserGroup }))) : null)), _react["default"].createElement("div", { className: 'middle' }, _react["default"].createElement("span", { className: "fm fm-angle-right" })), _react["default"].createElement("div", { className: 'right' }, _react["default"].createElement("div", { className: 'status-bar' }, _react["default"].createElement("span", { className: 'bar-label' }, t('departmentTransfer.barLabel')), justShowUserGroup || scope === DEPARTMENT_PICKER.SCOPE_STAFF ? null : _react["default"].createElement("span", { className: 'dep-count' }, t('departmentTransfer.department'), _react["default"].createElement("span", { className: 'strong' }, _lodash["default"].filter(selectList, { type: DEPARTMENT_PICKER.DEPARTMENT }).length)), justShowUserGroup || scope === DEPARTMENT_PICKER.SCOPE_DEPARTMENT ? null : _react["default"].createElement("span", { className: 'staff-count' }, t('departmentTransfer.staff'), _react["default"].createElement("span", { className: 'strong' }, _lodash["default"].filter(selectList, { type: DEPARTMENT_PICKER.STAFF }).length)), justShowUserGroup || isShowUserGroup ? _react["default"].createElement("span", { className: 'staff-count' }, t('departmentTransfer.userGroup'), _react["default"].createElement("span", { className: 'strong' }, _lodash["default"].filter(selectList, { type: DEPARTMENT_PICKER.USER_GROUP }).length)) : null, _react["default"].createElement("span", { className: 'clear-all' }, _react["default"].createElement("span", { className: 'btn', onClick: this.clearAll }, t('departmentTransfer.clear')))), maxSelectLength > 0 ? _react["default"].createElement(_alert["default"], { message: _react["default"].createElement("span", null, _react["default"].createElement(_reactI18next.Trans, { i18n: _i18next["default"], i18nKey: "departmentTransfer.maxLength", ns: "DepartmentSelectionModal", values: { maxSelectLength: maxSelectLength }, components: [_react["default"].createElement("span", null), _react["default"].createElement("span", { className: "strong" })], children: "\u6700\u591A\u53EA\u80FD\u9009\u62E9 <span className={'strong'}>{{ maxSelectLength }} </span>\u9879" })), className: "right-warn-alert", type: "warning" }) : null, _react["default"].createElement(_list["default"], { size: "small", dataSource: selectList, ref: function ref(_ref) { _this4.selectListRef = _ref; }, renderItem: function renderItem(item) { return _react["default"].createElement(_list["default"].Item, { key: item.code }, _react["default"].createElement("span", { className: 'item-name' }, item.type === DEPARTMENT_PICKER.STAFF ? _react["default"].createElement("span", { className: 'fm fm-employee' }) : item.type === DEPARTMENT_PICKER.DEPARTMENT ? _react["default"].createElement("span", { className: 'fm fm-cube' }) : _react["default"].createElement("span", { className: 'fm fm-user-group' }), _react["default"].createElement("span", { className: 'name' }, item.name, renderAddition && renderAddition(item))), _react["default"].createElement("span", { className: 'fm fm-trash', onClick: function onClick(e) { e.stopPropagation(); _this4.unSelectItem(item); } })); } })))); } }]); return DepartmentTransfer; }(_react.Component); DepartmentTransfer.defaultProps = { justShowUserGroup: false }; var _default = DepartmentTransfer; exports["default"] = _default;