yyuap-ref
Version:
cloud os fe ref project which is based on tinper
546 lines (482 loc) • 20 kB
JavaScript
'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,
isTable: true,
RefButton: true,
tabData: [//tab标签
{ "title": "常用", "key": "commonUse" }, { "title": "全部", "key": "total" }, { "title": "推荐", "key": "recommed" }],
param: { //url请求参数
refCode: 'test_common', //test_common||test_grid||test_tree||test_treeTable
tenantId: 'xxx',
sysId: 'xxx'
},
checkedArray: [{ memo: "page2:用友骨干", refremark: "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 RefTable = function (_Component) {
_inherits(RefTable, _Component);
function RefTable(props) {
_classCallCheck(this, RefTable);
var _this = _possibleConstructorReturn(this, (RefTable.__proto__ || Object.getPrototypeOf(RefTable)).call(this, props));
_initialiseProps.call(_this);
var option = _this.props.option;
_this.state = {
List: [],
tableData: {}, //存放表格数据
tabData: {}, //存放tab标签的数据
selectedArray: option.checkedArray || [], //记录保存的选择项
tabActiveKey: null, //记录当前激活tab
originKey: null, //保留tab点击已选择的前一tab的key
isShowModal: true, //是否显示弹窗
pageCount: 0, //下拉加载数据使用--请求数据的总页数
curPage: 0, //下拉加载数据使用--请求数据的当前页
ifScroll: false, //下拉加载数据使用--控制滚动事件
refTable: null, //下拉加载数据使用--事件绑定对象
isAfterAjax: false,
loading: true
};
return _this;
}
//use to refresh tab data
_createClass(RefTable, [{
key: 'getRefTabData',
value: function getRefTabData(value) {
this.setState({
tabData: {
dataSource: this.props.option.tabData,
defaultActiveKey: this.props.option.defaultActiveKey
}
});
}
//use to refresh table dat
}, {
key: 'getRefTableData',
value: function getRefTableData(value) {
var _this2 = this;
var _props$option$refMode = this.props.option.refModelUrl,
TableBodyUrl = _props$option$refMode.TableBodyUrl,
TableBarUrl = _props$option$refMode.TableBarUrl;
if (value.activepage && value.activepage > 0) {
if (!this.props.option.hasPage) {
(0, _api.getTableData)(TableBarUrl, TableBodyUrl, 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,
loading: false
};
});
});
} else {
(0, _api.getTableData)(TableBarUrl, TableBodyUrl, 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,
loading: false
};
});
});
}
} else {
(0, _api.getTableData)(TableBarUrl, TableBodyUrl, 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 barArr = ['code','name','memo','memo','memo','memo']
// var nameArr = ['code','name','memo','memo','memo','memo']
var colsArr = barArr.map(function (v, k) {
return {
'title': nameArr[k],
'dataIndex': v,
'key': v + k,
'width': 150,
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,
loading: false,
curPage: 0,
pageCount: bodyData && bodyData.page.pageCount
});
});
}
}
}, {
key: 'componentWillReceiveProps',
value: function componentWillReceiveProps(nextProps) {
this.setState({
selectedArray: nextProps.option.checkedArray
});
}
}, {
key: 'componentWillMount',
value: function componentWillMount() {
var option = this.props.option;
var activepage = this.state.activepage;
if (option.RefList) {
this.getRefList();
}
if (option.isTab) {
this.getRefTabData();
}
if (option.isTable) {
var activekey = option.tabData && option.tabData[0] && option.tabData[0].key || '';
var value = Object.assign({}, { param: option.param }, { activepage: 0, activekey: activekey });
this.getRefTableData(value);
}
if (option.isTree) {
this.getRefTreeData();
}
}
//按钮点击
//搜索输入变化触发
//选中数组保存回调
}, {
key: 'onTabSelect',
/* tab与table的回调函数 ---start */
value: function onTabSelect(_ref7) {
var activeKey = _ref7.activeKey,
originKey = _ref7.originKey;
var option = this.props.option;
this.setState({
tabActiveKey: activeKey,
originKey: originKey
});
var _state = this.state,
searchvalue = _state.searchvalue,
curPage = _state.curPage;
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 (option.isTable) {
if (!option.hasPage) {
this.state.refTable.scrollTop = 0;
}
var value = Object.assign({}, { param: option.param }, { activepage: curPage, activekey: originKey || activeKey, searchvalue: searchvalue });
this.getRefTableData(value);
console.log(originKey || activeKey);
}
}
}
}, {
key: 'handlePageSelect',
value: function handlePageSelect(eventKey) {
var _state2 = this.state,
pageCount = _state2.pageCount,
curPage = _state2.curPage,
originKey = _state2.originKey,
tabActiveKey = _state2.tabActiveKey,
searchvalue = _state2.searchvalue;
var option = this.props.option;
curPage = eventKey - 1;
var value = Object.assign({}, { param: option.param }, { activepage: curPage, searchvalue: searchvalue, activekey: originKey || tabActiveKey });
this.getRefTableData(value);
}
}, {
key: 'onSendData',
value: function onSendData(refTable) {
var _this3 = this;
this.setState({ refTable: refTable });
var initScroll = function initScroll() {
var _state3 = _this3.state,
pageCount = _state3.pageCount,
curPage = _state3.curPage,
ifScroll = _state3.ifScroll,
originKey = _state3.originKey,
tabActiveKey = _state3.tabActiveKey,
searchvalue = _state3.searchvalue;
var option = _this3.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) {
_this3.setState({ ifScroll: true });
var value = Object.assign({}, { param: option.param }, { activepage: curPage + 1, activekey: originKey || tabActiveKey, searchvalue: searchvalue });
_this3.getRefTableData(value);
} else {
// scrollerLoading = true;
}
}
};
refTable.addEventListener('scroll', initScroll, false);
}
/* tree的回调函数 ---end */
}, {
key: 'onCheck',
value: function onCheck(selectedKeys, event) {
this.setState({
selectedArray: selectedKeys
});
}
}, {
key: 'onSelect',
value: function onSelect(selectedKeys, event) {
this.setState({
selectedArray: selectedKeys
});
}
//tree EventHandler
}, {
key: 'render',
value: function render() {
var _this4 = this;
var _props = this.props,
option = _props.option,
_props$modalOptions = _props.modalOptions,
modalOptions = _props$modalOptions === undefined ? {} : _props$modalOptions;
var isShowModal = this.state.isShowModal;
return _react2.default.createElement(
'div',
null,
isShowModal ? _react2.default.createElement(
_modal2.default,
_extends({
show: true, className: option.className + ' yyuap-ref onlyRefTable',
backdrop: option.backdrop,
enforceFocus: false,
onHide: function onHide() {
return _this4.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: 'yyuap-ref-Table' },
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),
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.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,
hasPage: option.hasPage || false,
pageCount: this.state.pageCount,
curPage: this.state.curPage,
loading: this.state.loading,
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 RefTable;
}(_react.Component);
// ReactDOM.render(
// (
// <RefTable option={op}/>
// ),
// document.getElementById('root'),
// );
var _initialiseProps = function _initialiseProps() {
var _this5 = this;
this.onClickBtn = function (type) {
//console.log(type,this.state.RefListSelectArray)
switch (type) {
case 'save':
console.log(_this5.state.selectedArray);
_this5.setState({
isShowModal: false
});
_this5.props.option.onSave(_this5.state.selectedArray);
break;
case 'cancel':
_this5.setState({
selectedArray: [],
isShowModal: false
}, function () {
console.log(_this5.state.selectedArray);
_this5.props.option.onCancel();
});
break;
case 'empty':
_this5.setState({
selectedArray: []
}, function () {
console.log(_this5.state.selectedArray);
});
break;
default:
_this5.setState({ selectedArray: [] }, function () {
console.log(_this5.state.selectedArray);
//this.props.options.onSave(this.state.RefListSelectArray)
});
}
//this.props.options.onSave(this.state.RefListSelectArray)
_this5.props.option.destory();
};
this.onSearchClick = function (value) {
console.log(value);
var option = _this5.props.option;
var curPage = _this5.state.curPage;
_this5.setState({
searchvalue: value,
curPage: 0
});
var value = Object.assign({}, { param: option.param }, { searchvalue: value, activepage: 0 });
_this5.getRefTableData(value);
};
this.onSearchChange = function (value) {
console.log(value);
};
this.RefSelectedChecked = function (selectedArray, autoSave) {
if (_this5.state.tabActiveKey == '__selected') {
_this5.setState({
selectedArray: selectedArray
});
return;
}
var tableData = _this5.state.tableData.listData || [];
var oldSelected = _this5.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 = _this5.state.selectedArray.filter(function (v, k) {
return judgeInData(v.refpk);
});
if (_this5.props.option.isRadio) {
_this5.setState({
selectedArray: selectedArray
}, function () {
if (autoSave && autoSave === 'isRadio') {
_this5.onClickBtn('save');
}
});
} else {
_this5.setState({
selectedArray: selectedArray.concat(dataNotInData)
});
}
};
};
exports.default = RefTable;
module.exports = exports['default'];