UNPKG

yyuap-ref

Version:

cloud os fe ref project which is based on tinper

685 lines (613 loc) 24.7 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 _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); 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 _reactDom = require('react-dom'); var _reactDom2 = _interopRequireDefault(_reactDom); var _Ref = require('../components/ref/Ref'); var _Ref2 = _interopRequireDefault(_Ref); var _modal = require('../bee/modal'); var _modal2 = _interopRequireDefault(_modal); require('../assets/index.css'); require('./index.css'); var _api = require('./api.js'); 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; } var op = { title: '弹窗标题', RefSearch: true, isTab: true, isTree: true, isTable: true, RefButton: true, tabData: [//tab标签 { "title": "常用", "key": "commonUse" }, { "title": "全部", "key": "total" }, { "title": "推荐", "key": "recommed" }], param: { //url请求参数 refCode: 'test_treeTable', //test_common||test_grid||test_tree||test_treeTable tenantId: 'xxx', sysId: 'xxx' }, checkedArray: [{ memo: "page2:用友骨干", refpk: "currPageIndex:248", refcode: "test48", refname: "测试48", key: "currPageIndex:248" }], onCancel: function onCancel(p) { console.log(p); }, onSave: function onSave(sels) { console.log(sels); } }; var RefTreeTable = function (_Component) { _inherits(RefTreeTable, _Component); function RefTreeTable(props) { _classCallCheck(this, RefTreeTable); var _this = _possibleConstructorReturn(this, (RefTreeTable.__proto__ || Object.getPrototypeOf(RefTreeTable)).call(this, props)); _initialiseProps.call(_this); var option = _this.props.option; _this.state = { treeData: [], tableData: {}, //存放表格数据 tabData: {}, //存放tab标签的数据 selectedArray: option.checkedArray || [], //记录保存的选择项 tabActiveKey: null, //记录当前激活tab originKey: null, //保留tab点击已选择的前一tab的key isShowModal: true, //是否显示弹窗 pageCount: 0, //下拉加载数据使用--请求数据的总页数 curPage: 0, //下拉加载数据使用--请求数据的当前页 ifScroll: false, //下拉加载数据使用--控制滚动事件 refTable: null, //下拉加载数据使用--事件绑定对象 searchvalue: '', option: {}, treeIdactive: '', onAfterAjax: false, loadingTree: true, loadingTable: false }; return _this; } //use to refresh table data _createClass(RefTreeTable, [{ key: 'getRefTableData', value: function getRefTableData(value) { var _this2 = this; var option = this.props.option; var URL2 = option.refModelUrl.TableBodyUrl; var URL = option.refModelUrl.TableBarUrl; if (value.activepage && value.activepage > 0) { if (!this.props.option.hasPage) { (0, _api.getTreeTableData)(URL, URL2, value).then(function (_ref) { var _ref2 = _slicedToArray(_ref, 2), barData = _ref2[0], bodyData = _ref2[1]; if (_this2.props.option.onAfterAjax && !_this2.state.isAfterAjax) { _this2.props.option.onAfterAjax(bodyData); _this2.setState({ isAfterAjax: true }); } var tempData = []; if (bodyData) { tempData = bodyData.data.map(function (v, k) { v.key = v.refpk; return v; }); } _this2.setState(function (prevData) { return { curPage: prevData.curPage + 1, tableData: { listData: prevData.tableData.listData.concat(tempData), cols: prevData.tableData.cols }, ifScroll: false, loadingTable: false }; }); }); } else { (0, _api.getTreeTableData)(URL, URL2, value).then(function (_ref3) { var _ref4 = _slicedToArray(_ref3, 2), barData = _ref4[0], bodyData = _ref4[1]; if (_this2.props.option.onAfterAjax && !_this2.state.isAfterAjax) { _this2.props.option.onAfterAjax(bodyData); _this2.setState({ isAfterAjax: true }); } var tempData = []; if (bodyData) { tempData = bodyData.data.map(function (v, k) { v.key = v.refpk; return v; }); } _this2.setState(function (prevData) { return { curPage: value.activepage, tableData: { listData: tempData, cols: prevData.tableData.cols }, ifScroll: false, loadingTable: false }; }); }); } } else { (0, _api.getTreeTableData)(URL, URL2, value).then(function (_ref5) { var _ref6 = _slicedToArray(_ref5, 2), barData = _ref6[0], bodyData = _ref6[1]; if (_this2.props.option.onAfterAjax && !_this2.state.isAfterAjax) { _this2.props.option.onAfterAjax(bodyData); _this2.setState({ isAfterAjax: true }); } var nameArr = barData.strFieldName; var barArr = barData.strFieldCode; var colsArr = barArr.map(function (v, k) { return { 'title': nameArr[k], 'dataIndex': v, 'key': v + k, 'width': 100, render: function render(text, record, index) { if (v == 'code' && !record.code) { return record.refcode || ''; } else if (v == 'name' && !record.name) { return record.refname || ''; } else { return text; } } }; }); var listArr = bodyData && bodyData.data && bodyData.data.map(function (v, k) { v.key = v.refpk; return v; }); _this2.setState({ tableData: { listData: listArr, cols: colsArr }, ifScroll: false, loadingTable: false, curPage: 0, pageCount: bodyData.page.pageCount }); }); } } }, { key: 'onLoadData', value: function onLoadData(treeNode) { var _this3 = this; return new Promise(function (resolve) { setTimeout(function () { // const treeData = [...this.state.treeData]; _this3.getRefTreeloadData(treeNode.props.eventKey); resolve(); }, 1000); }); } }, { key: 'getNewTreeData', value: function getNewTreeData(treeData, curKey, child) { 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 }); } }, { key: 'getRefTreeloadData', value: function getRefTreeloadData(treeNode) { var _this4 = this; var option = this.props.option; var param = option.param; var _state = this.state, tabActiveKey = _state.tabActiveKey, treeData = _state.treeData; var URL = option.refModelUrl.TreeGridUrl || 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 }); } var value = Object.assign({}, { param: param }); (0, _api.getTree)(URL, value).then(function (res) { if (res) { var data = res.data; if (option.treeloadData) { data = data.map(function (v) { delete v.children; return v; }); } _this4.getNewTreeData(treeData, treeNode, data); } else { _this4.setState({ showError: true }); } }); } // 获取树组件数据 }, { key: 'getRefTreeData', value: function getRefTreeData(type) { var _this5 = this; var option = this.props.option; var activepage = this.state.activepage; var URL = option.refModelUrl.TreeGridUrl || option.refModelUrl.TreeUrl; var param = option.param; param = Object.assign(param, { treeNode: "", treeloadData: option.treeloadData || false }); var value = Object.assign({}, { param: param }, type); (0, _api.getTree)(URL, value).then(function (res) { if (res && res.data && res.data.length > 0) { if (option.treeloadData) { res.data = res.data.map(function (v) { delete v.children; return v; }); } var treeId = res.data[0].id; //默认树第一个id if (option.isDefaultSelect == false) { treeId = ''; } _this5.setState({ treeData: res.data, loadingTree: false, treeIdactive: treeId }); var paramVal = Object.assign({}, { param: option.param }, { activepage: 0, key: treeId }); _this5.getRefTableData(paramVal); } }); } }, { key: 'componentWillReceiveProps', value: function componentWillReceiveProps(nextProps) { this.setState({ selectedArray: nextProps.option.checkedArray }); } }, { key: 'componentWillMount', value: function componentWillMount() { var option = this.props.option; this.setState({ option: option, tabData: { dataSource: option.tabData, defaultActiveKey: option.defaultActiveKey } }); var activekey = option.tabData && option.tabData[0] && option.tabData[0].key || ''; this.getRefTreeData({ type: activekey }); } //按钮点击 //搜索点击发请求 //搜索输入变化触发 }, { key: 'onExpand', value: function onExpand(value) { console.log(value); this.setState({ expandedKeys: value }); } //选中数组保存回调 }, { key: 'onTabSelect', /* tab与table的回调函数 ---start */ value: function onTabSelect(_ref7) { var activeKey = _ref7.activeKey, originKey = _ref7.originKey; this.setState({ tabActiveKey: activeKey, originKey: originKey }); if (activeKey == '__selected' && this.props.option.hasPage) { this.props.option.hasPage = false; } else if (activeKey != '__selected' && this.props.option.hasPage != undefined) { this.props.option.hasPage = true; if (this.props.option.isTable) { this.getRefTreeData({ type: originKey || activeKey }); // this.getRefTreeData({type:(originKey||activeKey)}); } } } /* tree的回调函数 ---end */ }, { key: 'onDoubleClick', value: function onDoubleClick() {} }, { key: 'onSelect', value: function onSelect(selectedKeys, event) { var _state2 = this.state, searchvalue = _state2.searchvalue, treeIdactive = _state2.treeIdactive, tabActiveKey = _state2.tabActiveKey; var option = this.props.option; var pos = event.node.props.pos.split('-'); if (option.treeSelectLevel && pos.length - 1 != option.treeSelectLevel) { return false; } var treeIdactiveNew = selectedKeys[0] || ''; console.log(treeIdactiveNew); this.setState({ treeIdactive: treeIdactiveNew }); var paramVal = Object.assign({}, { param: option.param }, { key: treeIdactiveNew, searchvalue: searchvalue }); this.getRefTableData(paramVal); } //tree EventHandler }, { key: 'handlePageSelect', value: function handlePageSelect(eventKey) { var _state3 = this.state, treeIdactive = _state3.treeIdactive, curPage = _state3.curPage, originKey = _state3.originKey, tabActiveKey = _state3.tabActiveKey, searchvalue = _state3.searchvalue; var option = this.props.option; curPage = eventKey - 1; var value = Object.assign({}, { param: option.param }, { key: treeIdactive, activepage: curPage, searchvalue: searchvalue }); this.getRefTableData(value); } }, { key: 'onSendData', value: function onSendData(refTable) { var _this6 = this; this.setState({ refTable: refTable }); var initScroll = function initScroll() { var _state4 = _this6.state, pageCount = _state4.pageCount, curPage = _state4.curPage, ifScroll = _state4.ifScroll, originKey = _state4.originKey, tabActiveKey = _state4.tabActiveKey, treeIdactive = _state4.treeIdactive, searchvalue = _state4.searchvalue; var option = _this6.props.option; if (ifScroll) return; var scrollerscrollHeight = refTable.scrollHeight; // 容器滚动总高度 var scrollerHeight = refTable.getBoundingClientRect().height; // 容器滚动可见高度 var scrollerTop = refTable.scrollTop; //滚过的高度 if (scrollerscrollHeight - scrollerHeight - scrollerTop <= 10) { if (curPage + 1 < pageCount) { _this6.setState({ ifScroll: true }); var paramVal = Object.assign({}, { param: option.param }, { activepage: curPage + 1, key: treeIdactive, searchvalue: searchvalue }); _this6.getRefTableData(paramVal); } else { // scrollerLoading = true; } } }; refTable.addEventListener('scroll', initScroll, false); } }, { key: 'render', value: function render() { var _this7 = this; var _props = this.props, option = _props.option, _props$modalOptions = _props.modalOptions, modalOptions = _props$modalOptions === undefined ? {} : _props$modalOptions; var _state5 = this.state, isShowModal = _state5.isShowModal, treeIdactive = _state5.treeIdactive, _state5$expandedKeys = _state5.expandedKeys, expandedKeys = _state5$expandedKeys === undefined ? [] : _state5$expandedKeys, loadingTree = _state5.loadingTree, loadingTable = _state5.loadingTable; console.log(option); return _react2.default.createElement( 'div', null, isShowModal ? _react2.default.createElement( _modal2.default, _extends({ show: true, className: option.className + ' yyuap-ref OnlyTreeTable', backdrop: option.backdrop, enforceFocus: false, onHide: function onHide() { return _this7.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', { className: 'TreeTable' }, 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 || "" // onGetSearchResult={this.onSearchGetResult} // url={'www.baidu.com'} }) : _react2.default.createElement('div', null), option.isTab ? _react2.default.createElement('div', { is: 'Tab', data: this.state.tabData, selectedArray: this.state.selectedArray, ifNeedSelect: 'true', ifOnlyNeedSelect: 'false', onTabSelect: this.onTabSelect.bind(this), tabActiveKey: this.state.tabActiveKey, originKey: this.state.originKey, language: option.param.locale || "" }) : _react2.default.createElement('div', null), option.isTree ? _react2.default.createElement('div', { is: 'Tree', data: this.state.treeData // , multiple: false //是否允许选择多个树节点 , checkable: false //是否支持添加在树节点前添加Checkbox , defaultExpandAll: option.defaultExpandAll //默认是否展开所有节点 , onSelect: this.onSelect.bind(this) // , expandedKeysList: expandedKeys, onExpand: this.onExpand.bind(this), showLine: option.showLine, loading: loadingTree, openIconClassName: this.props.option.openIconClassName, closeIconClassName: this.props.option.closeIconClassName, defaultSelectedKeys: treeIdactive, treeloadData: this.props.option.treeloadData, onDoubleClick: this.onDoubleClick.bind(this), onLoadData: this.onLoadData.bind(this), language: option.param.locale || "" }) : _react2.default.createElement('div', null), option.isTable ? _react2.default.createElement('div', { is: 'RefTable', data: this.state.tableData, isRadio: option.isRadio || false, onTableSelect: this.RefSelectedChecked.bind(this), onSendData: this.onSendData.bind(this), tabActiveKey: this.state.tabActiveKey, selectedArray: this.state.selectedArray, loading: loadingTable, hasPage: option.hasPage || false, pageCount: this.state.pageCount, curPage: this.state.curPage, paginationOption: option.paginationOption, handlePageSelect: this.handlePageSelect.bind(this), onClickBtn: this.onClickBtn.bind(this), language: option.param.locale || "" }) : _react2.default.createElement('div', null), option.RefButton ? _react2.default.createElement('div', { is: 'RefButton', language: option.param.locale || "", ishasemptyBtn: option.emptyBtn, buttonText: option.buttonText, hasPage: option.hasPage || false, onClickBtn: this.onClickBtn.bind(this) }) : _react2.default.createElement('div', null) ) ) ) ) : null ); } }]); return RefTreeTable; }(_react.Component); // ReactDOM.render( // ( // <RefTreeTable option={op}/> // ), // document.getElementById('root'), // ); var _initialiseProps = function _initialiseProps() { var _this8 = this; this.onClickBtn = function (type) { //console.log(type,this.state.RefListSelectArray) switch (type) { case 'save': console.log(_this8.state.selectedArray); _this8.props.option.onSave(_this8.state.selectedArray); _this8.setState({ isShowModal: false }); break; case 'cancel': _this8.setState({ selectedArray: [], isShowModal: false }, function () { console.log('取消了'); _this8.props.option.onCancel(_this8.state.selectedArray); }); break; case 'empty': _this8.setState({ selectedArray: [] }, function () {}); break; default: _this8.setState({ selectedArray: [] }, function () { console.log(_this8.state.selectedArray); //this.props.options.onSave(this.state.RefListSelectArray) }); } //this.props.options.onSave(this.state.RefListSelectArray) _this8.props.option.destory(); }; this.onSearchClick = function (value) { console.log(value); var _state6 = _this8.state, treeIdactive = _state6.treeIdactive, activepage = _state6.activepage, option = _state6.option; _this8.setState({ searchvalue: value }); var paramVal = Object.assign({}, { param: option.param }, { searchvalue: value, key: treeIdactive }); _this8.getRefTableData(paramVal); }; this.onSearchChange = function (value) { console.log(value); _this8.setState({ searchvalue: value }); }; this.RefSelectedChecked = function (selectedArray, autoSave) { if (_this8.state.tabActiveKey == '__selected') { _this8.setState({ selectedArray: selectedArray }); return; } var tableData = _this8.state.tableData.listData || []; var oldSelected = _this8.state.selectedArray; var judgeInData = function judgeInData(v) { for (var i = 0; i < tableData.length; i++) { if (tableData[i].refpk == v) { return false; } } return true; }; var dataNotInData = _this8.state.selectedArray.filter(function (v, k) { return judgeInData(v.refpk); }); if (_this8.props.option.isRadio) { _this8.setState({ selectedArray: selectedArray }, function () { if (autoSave && autoSave === 'isRadio') { _this8.onClickBtn('save'); } }); } else { _this8.setState({ selectedArray: selectedArray.concat(dataNotInData) }); } }; }; exports.default = RefTreeTable; module.exports = exports['default'];