maycur-business
Version:
maycur business react components of web
652 lines (557 loc) • 25 kB
JSX
"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;