UNPKG

yyuap-ref

Version:

cloud os fe ref project which is based on tinper

780 lines (712 loc) 26.2 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _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; }; var _createClass = 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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _Ref = require('../components/ref/Ref'); var _Ref2 = _interopRequireDefault(_Ref); var _modal = require('../bee/modal'); var _modal2 = _interopRequireDefault(_modal); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); require('../assets/index.css'); var _api = require('./api'); var _Error = require('../components/ref/Error'); var _Error2 = _interopRequireDefault(_Error); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } function noop() {} var RefTree = function (_Component) { _inherits(RefTree, _Component); function RefTree(props) { _classCallCheck(this, RefTree); var _this = _possibleConstructorReturn(this, (RefTree.__proto__ || Object.getPrototypeOf(RefTree)).call(this, props)); _this.onClickBtn = function (type) { var _this$props$option = _this.props.option, onCancel = _this$props$option.onCancel, onSave = _this$props$option.onSave; switch (type) { case 'save': console.log(_this.state.selectedArray); onSave(_this.state.selectedArray); _this.setState({ isShowModal: false }); break; case 'cancel': _this.setState({ selectedArray: [], isShowModal: false }, function () { onCancel(); }); break; case 'empty': _this.setState({ selectedArray: [], checkedKeys: [] }, function () {}); break; default: _this.setState({ selectedArray: [] }, function () { console.log(_this.state.selectedArray); }); } _this.props.option.destory(); }; _this.onSearchClick = function (value) { _this.setState({ expandedKeys: [], searchValue: value }); _this.getRefTreeData(value); }; var option = props.option; var checkedArray = option.checkedArray, multiple = option.multiple, checkStrictly = option.checkStrictly, parentNodeDisableCheck = option.parentNodeDisableCheck, defaultExpandAll = option.defaultExpandAll; _this.state = { isShowModal: true, selectedArray: checkedArray || [], // 记录保存的选择项 tabActiveKey: null, // 记录当前激活tab originKey: null, // 保留tab点击已选择的前一tab的key tabData: _this.calctabData(option.tabData), // tree state treeData: [], defaultExpandAll: defaultExpandAll, checkable: multiple, multiple: multiple, checkStrictly: checkStrictly, parentNodeDisableCheck: parentNodeDisableCheck, checkedKeys: [], showError: false, expandedKeys: [], onSaveCheckItems: [], isAfterAjax: false, loading: true, searchValue: '' }; _this.onClickBtn = _this.onClickBtn.bind(_this); return _this; } _createClass(RefTree, [{ key: 'componentWillMount', value: function componentWillMount() { this.getRefTreeData(); } }, { key: 'componentWillReceiveProps', value: function componentWillReceiveProps(nextProps) { this.setState({ selectedArray: nextProps.option.checkedArray, onSaveCheckItems: nextProps.option.checkedArray }); } }, { key: 'loopSpliceArray', // onSearchChange = (value) => { // this.getRefTreeData(value); // }; value: function loopSpliceArray(value, ob) { var children = ob.node.props.children; var loop = function loop(data) { data.forEach(function (item) { value.indexOf(item.key) > -1 ? value.splice(value.indexOf(item.key), 1) : null; if (item.props.children && item.props.children.length > 0) { loop(item.props.children); } }); }; if (!ob.expanded && children.length > 0) { loop(children); } return value; } }, { key: 'onExpand', value: function onExpand(value, ob) { console.log(value, ob.expanded, ob.node.props.eventKey); value = this.loopSpliceArray(value, ob); console.log(value); this.setState({ expandedKeys: value }); } }, { key: 'onTabSelect', value: function onTabSelect(_ref) { var activeKey = _ref.activeKey, originKey = _ref.originKey; var option = this.props.option; // console.log('click Tab:' + activeKey); this.setState({ tabActiveKey: activeKey, originKey: originKey }); this.getRefTreeData(); } // tree EventHandler }, { key: 'onCheck', value: function onCheck(selectedKeys, event) { // this.onSelect(selectedKeys,event) var _props$option = this.props.option, checkAllChildren = _props$option.checkAllChildren, multiple = _props$option.multiple; var onSaveCheckItems = this.state.onSaveCheckItems; var eventKey = event.node.props.eventKey; var ishaskey = false; var keyIndex = void 0; onSaveCheckItems.forEach(function (v, i) { if (v.id == eventKey) { keyIndex = i; } if (v.id == eventKey && v.checkAllchildren) { ishaskey = true; return false; } }); if (ishaskey) { this.setState({ checkedKeys: selectedKeys }); return false; } var arr = {}; event.checkedNodes.forEach(function (item) { if (item.key == eventKey) { arr = item.props.paramitem; } }); if (multiple) { if (selectedKeys.indexOf(eventKey) > -1) { onSaveCheckItems.push(arr); } else { onSaveCheckItems.splice(keyIndex, 1); } } else { onSaveCheckItems = [arr]; } this.setState({ selectedArray: onSaveCheckItems, checkedKeys: selectedKeys, onSaveCheckItems: onSaveCheckItems }); } }, { key: 'onDoubleClick', value: function onDoubleClick(selectedKeys, event) { var _this2 = this; var item = event.node.props; var arr = [item.paramitem]; this.setState({ selectedArray: arr }, function () { console.log(_this2.state.selectedArray); _this2.onClickBtn('save'); }); } }, { key: 'onSelect', value: function onSelect(selectedKeys, event) { var _props$option2 = this.props.option, checkAllChildren = _props$option2.checkAllChildren, multiple = _props$option2.multiple; event.checkedNodes = event.selectedNodes; if (multiple) { return false; } this.onCheck(selectedKeys, event); } // 获取树组件数据 }, { key: 'getRefTreeData', value: function getRefTreeData(value) { var _this3 = this; var option = this.props.option; var param = option.param, checkedArray = option.checkedArray; var tabActiveKey = this.state.tabActiveKey; var URL = option.refModelUrl.TreeUrl; if (option.isTab && option.tabData) { param = Object.assign(param, { refShowClassCode: tabActiveKey }); } param = Object.assign(param, { treeNode: "", treeloadData: option.treeloadData || false }); (0, _api.getTreeList)(URL, param, value).then(function (res) { if (_this3.props.option.onAfterAjax && !_this3.state.isAfterAjax) { _this3.props.option.onAfterAjax(res); _this3.setState({ isAfterAjax: true }); } if (res && res.data && res.data.length > 0) { var data = res.data, page = res.page; // if(option.treeloadData){ // data = data.map((v)=>{ // delete v.children; // return v // }) // } _this3.setState({ treeData: data, loading: false }); // if (data[0].id) { // this.setState({ // expandedKeys: [data[0].id], // }); // } _this3.calcCheckedKeys(checkedArray); } else { _this3.setState({ showError: true, treeData: [], loading: false }); } }); } }, { key: 'removeOne', value: function removeOne(c) { var selectedArray = this.state.selectedArray; var arr = selectedArray.filter(function (item) { return item.refpk !== c.refpk; }); var selectedKeys = arr.map(function (item) { return item.refpk; }); this.setState({ selectedArray: arr, checkedKeys: selectedKeys }); } }, { key: 'clearAll', value: function clearAll() { this.setState({ selectedArray: [], checkedKeys: [] }); } }, { key: 'calcCheckedKeys', value: function calcCheckedKeys() { var _this4 = this; var checkedArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; var checkAllChildren = this.props.option.checkAllChildren; var checkedKeysData = []; var onSaveCheckItemsData = []; var checkedKeys = this.state.checkedKeys; if (checkedArray.length) { checkedArray.forEach(function (item) { if (item.refpk || item.id) { if (item.refpk.indexOf('child://') > -1 && checkAllChildren) { _this4.checkAllchildrenFun(true, item.refpk.split('child://')[1] || item.id, 'load'); } else { onSaveCheckItemsData.push(item); checkedKeysData.push(item.refpk || item.id); } } }); } setTimeout(function () { var _state = _this4.state, checkedKeys = _state.checkedKeys, onSaveCheckItems = _state.onSaveCheckItems; //checkedKeys.concat(checkedKeysData) checkedKeys = checkedKeys.concat(checkedKeysData); onSaveCheckItems = onSaveCheckItems.concat(onSaveCheckItemsData); var obj = {}; onSaveCheckItems = onSaveCheckItems.reduce(function (cur, next) { obj[next.id] ? "" : obj[next.id] = true && cur.push(next); return cur; }, []); checkedKeys = Array.from(new Set(checkedKeys)); _this4.setState({ checkedKeys: checkedKeys, onSaveCheckItems: onSaveCheckItems }); }, 10); } }, { key: 'calctabData', value: function calctabData(tabData) { return { dataSource: tabData }; } }, { key: 'getNewTreeData', value: function getNewTreeData(treeData, curKey, child) { var _this5 = this; var loop = function loop(data) { data.forEach(function (item) { if (curKey == item.id) { item.children = child; return false; } else { if (item.children) { loop(item.children); } } }); }; loop(treeData); this.setState({ treeData: treeData }, function () { _this5.calcCheckedKeys(_this5.props.option.checkedArray); }); } }, { key: 'onLoadData', value: function onLoadData(treeNode) { var _this6 = this; return new Promise(function (resolve) { setTimeout(function () { // const treeData = [...this.state.treeData]; _this6.getRefTreeloadData(treeNode.props.eventKey); resolve(); }, 1000); }); } }, { key: 'getRefTreeloadData', value: function getRefTreeloadData(treeNode) { var _this7 = this; var option = this.props.option; var param = option.param; var _state2 = this.state, tabActiveKey = _state2.tabActiveKey, treeData = _state2.treeData, searchValue = _state2.searchValue; var URL = option.refModelUrl.TreeUrl; if (option.treeloadData) { param = Object.assign(param, { treeNode: treeNode, treeloadData: option.treeloadData || false }); } if (option.isTab && option.tabData) { param = Object.assign(param, { refShowClassCode: tabActiveKey }); } (0, _api.getTreeList)(URL, param, '').then(function (res) { if (res) { var data = res.data; _this7.getNewTreeData(treeData, treeNode, data); } }); } }, { key: 'MergeArray', value: function MergeArray(arr1, arr2) { var _arr = new Array(); for (var i = 0; i < arr1.length; i++) { _arr.push(arr1[i]); } for (var i = 0; i < arr2.length; i++) { var flag = true; for (var j = 0; j < arr1.length; j++) { if (arr2[i].id == arr1[j].id) { flag = false; break; } } if (flag) { _arr.push(arr2[i]); } } return _arr; } }, { key: 'checkAllchildrenFun', value: function checkAllchildrenFun(value, checkid, load) { console.log(checkid); var self = this; var _state3 = this.state, treeData = _state3.treeData, checkedKeys = _state3.checkedKeys, onSaveCheckItems = _state3.onSaveCheckItems, selectedArray = _state3.selectedArray; var onSaveCheckItemsData = []; //合并去重 onSaveCheckItems = this.MergeArray(this.props.option.checkedArray, onSaveCheckItems); var keyitem = void 0; // if(!load){ // onSaveCheckItems.forEach((item,index) => { // if(item.id==checkid){ // keyitem=index // onSaveCheckItems.splice(keyitem,1) // } // }) // } var loop = function loop(datas) { return datas.forEach(function (item) { if (item.children && item.children.length) { loop(item.children); } if (value) { if (checkedKeys.indexOf(item.id) < 0) { checkedKeys.push(item.id); } item.isChildNode = true; item.parentNodeDisableCheck = true; } else { item.isChildNode = false; checkedKeys = self.removeByValue(checkedKeys, item.id); item.parentNodeDisableCheck = false; item.checkAllChildren = false; } onSaveCheckItems.forEach(function (item2, index2) { if (item2.id == item.id) { onSaveCheckItemsData = self.removeByValue(onSaveCheckItemsData, item2); onSaveCheckItems.splice(index2, 1); item2.checkAllChildren = false; } }); }); }; var loopParentData = function loopParentData(datas) { return datas.forEach(function (v, index) { if (v.id == checkid && v.children) { loop(v.children); v.isChildNode = false; if (value) { v.checkAllChildren = true; if (v.refpk.indexOf('child://') < 0) { v.refpk = 'child://' + v.refpk; } v.parentNodeDisableCheck = true; onSaveCheckItems.forEach(function (item, index) { if (item.id == checkid) { onSaveCheckItems.splice(index, 1); } }); onSaveCheckItemsData.push(v); onSaveCheckItems = onSaveCheckItems.concat(onSaveCheckItemsData); if (checkedKeys.indexOf(checkid) < 0) { checkedKeys.push(checkid); } } else { v.checkAllChildren = false; if (v.refpk.indexOf('child://') > -1) { v.refpk = v.refpk.split('child://')[1]; } v.parentNodeDisableCheck = false; // if (checkedKeys.indexOf(checkid) > -1) { // checkedKeys = self.removeByValue(checkedKeys, checkid) // } // onSaveCheckItems.forEach((item2, index2) => { // if (item2.id == v.id) { // onSaveCheckItemsData = self.removeByValue(onSaveCheckItemsData, item2) // onSaveCheckItems.splice(index2, 1) // item2.checkAllChildren = false // } // }) } } else { if (v.children) { loopParentData(v.children); } } }); }; loopParentData(treeData); console.log(onSaveCheckItems); this.props.option.checkedArray = onSaveCheckItems; if (!load) { this.setState({ selectedArray: onSaveCheckItems, onSaveCheckItems: onSaveCheckItems }); } else { this.setState({ onSaveCheckItems: selectedArray }); } this.setState({ checkedKeys: checkedKeys, treeData: treeData }); } }, { key: 'removeByValue', value: function removeByValue(arr, val) { for (var i = 0; i < arr.length; i++) { if (arr[i] == val) { arr.splice(i, 1); break; } } return arr; } }, { key: 'render', value: function render() { var _this8 = this; var _props = this.props, option = _props.option, _props$modalOptions = _props.modalOptions, modalOptions = _props$modalOptions === undefined ? {} : _props$modalOptions; var _state4 = this.state, treeData = _state4.treeData, showError = _state4.showError, isShowModal = _state4.isShowModal, tabActiveKey = _state4.tabActiveKey, tabData = _state4.tabData, loading = _state4.loading; var _state5 = this.state, selectedArray = _state5.selectedArray, checkable = _state5.checkable, checkedKeys = _state5.checkedKeys, multiple = _state5.multiple, expandedKeys = _state5.expandedKeys, checkStrictly = _state5.checkStrictly, parentNodeDisableCheck = _state5.parentNodeDisableCheck; var defaultExpandAll = this.state.defaultExpandAll; var tabSheet = { flex: 1, width: 100 }; if (this.props.option.treeloadData) { defaultExpandAll = false; } var ifOnlyTree = option.multiple ? 'onlyRefTreeModal' : ''; return _react2.default.createElement( 'div', null, isShowModal ? _react2.default.createElement( _modal2.default, _extends({ show: true, className: option.className + ' yyuap-ref ' + ifOnlyTree, backdrop: option.backdrop, enforceFocus: false, onHide: function onHide() { return _this8.onClickBtn('cancel'); } }, modalOptions), _react2.default.createElement(_modal2.default.Header, { closeButton: true }), _react2.default.createElement( _modal2.default.Body, null, _react2.default.createElement( _Ref2.default, null, _react2.default.createElement( 'div', null, option.title ? _react2.default.createElement( 'div', { className: 'Reftitle' }, option.title ) : _react2.default.createElement('div', { className: 'Reftitle' }), option.RefSearch ? _react2.default.createElement('div', { is: 'RefSearch', onSearch: this.onSearchClick, onChange: this.onSearchChange, searchPlaceholder: option.searchPlaceholder, language: option.param.locale || "" }) : _react2.default.createElement('div', null), _react2.default.createElement( 'div', { className: 'treebox' }, _react2.default.createElement( 'div', { className: 'c-tree' }, option.isTab ? _react2.default.createElement('div', { style: tabSheet, is: 'Tab', data: tabData, selectedArray: option.selectedArray, ifNeedSelect: 'false', ifOnlyNeedSelect: 'false', onTabSelect: this.onTabSelect.bind(this), tabActiveKey: tabActiveKey, originKey: this.state.originKey }) : _react2.default.createElement('div', null), option.isTree && treeData.length ? _react2.default.createElement('div', { is: 'Tree', data: this.state.treeData, defaultExpandAll: defaultExpandAll // checkable={this.state.checkable} , expandedKeysList: expandedKeys, onExpand: this.onExpand.bind(this), checkable: this.props.option.multiple, openIconClassName: this.props.option.openIconClassName, closeIconClassName: this.props.option.closeIconClassName, multiple: this.props.option.multiple, checkAllChildren: this.props.option.checkAllChildren, onCheck: this.onCheck.bind(this), onSelect: this.onSelect.bind(this), onDoubleClick: this.onDoubleClick.bind(this), checkedKeys: checkedKeys, defaultCheckedKeys: checkedKeys, selectedKeys: checkedKeys, checkStrictly: true, loading: loading, showLine: option.showLine, treeloadData: this.props.option.treeloadData, checkAllchildrenFun: this.checkAllchildrenFun.bind(this), onLoadData: this.onLoadData.bind(this), parentNodeDisableCheck: parentNodeDisableCheck, language: option.param.locale || "" }) : _react2.default.createElement(_Error2.default, { show: showError, language: option.param.locale || "" }) ), option.multiple ? // <TreeCheckedList // selectedArray={selectedArray} // clearAll={this.clearAll.bind(this)} // removeOne={this.removeOne.bind(this)} // /> _react2.default.createElement('div', null) : _react2.default.createElement('div', null) ), option.RefButton ? _react2.default.createElement('div', { is: 'RefButton', language: option.param.locale || "", ishasemptyBtn: option.emptyBtn, buttonText: option.buttonText, onClickBtn: this.onClickBtn }) : _react2.default.createElement('div', null) ) ) ) ) : null ); } }]); return RefTree; }(_react.Component); RefTree.propTypes = { option: _propTypes2.default.oneOfType([_propTypes2.default.object]) }; RefTree.defaultProps = { option: { // 基础设置 title: '弹窗标题', RefSearch: false, // 是否应用搜索 默认 false, isTab: false, // 是否应用搜索 默认 false, isTree: true, // 是否应用搜索 默认 true, RefButton: true, // 是否应用搜索 默认 true, tabData: [], // json数组须指定 title,id 参数 默认为空,且为空时不显示 tab 组件 multiple: false, // 默认单选 showLine: false, // 默认单选 defaultExpandAll: false, // 数默认展开 checkStrictly: false, parentNodeDisableCheck: false, checkedArray: [], // 指定已选择数据id param: { refCode: 'glxzzz', refModelUrl: 'http://d835dxtp.c87e2267-1001-4c70-bb2a-ab41f3b81aa3.app.yyuap.com/basedoc-mc/ref/adminableorg/', pk_user: 'f07e2142-482b-448a-a1fd-5cb9a48c5d39', tenantId: 'gtzceot7', sysId: 'diwork' }, onCancel: noop, onSave: noop } }; exports.default = RefTree; module.exports = exports['default'];