@beisen/auto-tree
Version:
AutoTree
484 lines (446 loc) • 18.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getCommonInputData = undefined;
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
exports.getBtnData = getBtnData;
exports.getSearchData = getSearchData;
exports.getSysVersion = getSysVersion;
exports.getElByClass = getElByClass;
exports.setMaskStyle = setMaskStyle;
exports.setRealNode = setRealNode;
exports.renderTree = renderTree;
exports.renderAutoUl = renderAutoUl;
exports.setResult_Height = setResult_Height;
exports.resetPosition = resetPosition;
exports.getSelectedData = getSelectedData;
exports.pushLi = pushLi;
exports.getText = getText;
exports.getHightLightData = getHightLightData;
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _toolTip = require('@beisen/tool-tip');
var _toolTip2 = _interopRequireDefault(_toolTip);
var _loading = require('@beisen/loading');
var _loading2 = _interopRequireDefault(_loading);
var _tree = require('@beisen/tree');
var _tree2 = _interopRequireDefault(_tree);
var _commonFunc = require('@beisen/common-func');
var _resizeEvent = require('./resize-event');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/* eslint-disable */
function getBtnData(bsStyle, bsSize, title, func) {
var ret = {
bsStyle: bsStyle || 'default',
bsSize: bsSize || 'default',
active: true,
title: title || '确认',
onClick: func || function (val) {}
};
return ret;
}
function getSearchData(searchValue, active, placeholder, searchPlaceholder) {
var ret = {
"placeholder": searchPlaceholder /**没有值的时候显示的内容(string)**/
, "iconName": "sys-icon-sousuo" /**IconName 文字前面的图标**/
, "value": searchValue || '' //搜索框中的默认值
, "active": active ? active : false //input框激活
, "hidden": false //隐藏搜索框
, "readonly": false //搜索框只读
, "disabled": false //搜索框禁用
, useInputPlaceHolder: placeholder,
"onClick": function onClick(val) {},
"onBlur": function onBlur(val) {},
"onFocus": function onFocus(val) {}
};
return ret;
}
function getCommonInputData(isActive, placeholder, _defaultValue, disabled, errorStatus, errorMsg, resultsData, _itemClose, onChange, addClass, removeClass) {
var ret = {
"status": "show",
"isActive": isActive //蓝线是否出现
, "placeHolder": placeholder //input中的placeholder
, "defaultValue": _defaultValue //input中的defaultvalue
, "readonly": disabled || '' //只读态
, "errorStatus": errorStatus //报错
, "errorMsg": errorMsg //报错信息,为空时不显示
, "selectDate": resultsData,
'istips': false,
'hasInput': true
//数据
, handlerClick: function handlerClick() {},
itemClose: function itemClose(event, item, index) {
_itemClose(event, item, index);
} //删除按钮回调
, inputChange: function inputChange(event, status, value) {
onChange(event);
} //input的change事件
, inputClick: function inputClick(event, status, value) {
addClass(event);
} //input的点击事件
, inputBlur: function inputBlur(event, status, value) {
removeClass(event);
} //input的blur事件
};
return ret;
}
exports.getCommonInputData = getCommonInputData;
function getSysVersion() {
//判断浏览器版本
var Sys = {};
var ua = navigator.userAgent.toLowerCase();
var s = void 0;
(s = ua.match(/rv:([\d.]+)\) like gecko/)) ? Sys.ie = s[1] : (s = ua.match(/msie ([\d.]+)/)) ? Sys.ie = s[1] : (s = ua.match(/firefox\/([\d.]+)/)) ? Sys.firefox = s[1] : (s = ua.match(/chrome\/([\d.]+)/)) ? Sys.chrome = s[1] : (s = ua.match(/opera.([\d.]+)/)) ? Sys.opera = s[1] : (s = ua.match(/version\/([\d.]+).*safari/)) ? Sys.safari = s[1] : 0;
// if (Sys.chrome) document.write('Chrome: ' + Sys.chrome);
return Sys;
}
function getElByClass(classN) {
return document.getElementsByClassName(classN)[0];
}
function setMaskStyle() {
var mask = getElByClass('AutoTree-mask');
if (mask != undefined) {
mask.style.height = window.innerHeight + 'px';
mask.style.width = window.innerWidth + 'px';
}
}
function setRealNode(event) {
var node = event.target;
var toLowerCase = node.tagName.toLowerCase();
if (toLowerCase !== 'li' && toLowerCase !== 'span' && toLowerCase !== 'em' && node.className !== 'autoTree_ItemName' && node.className !== 'autoTree_ParentName') return;
if (toLowerCase == 'span' || toLowerCase == 'em') {
node = node.parentNode;
}
if (node.className == 'autoTree_ParentName') node = node.previousSibling;
if (node.className == 'auto-tree__item ') node = node.firstChild;
var nodeId = node.getAttribute('data-index');
if (nodeId == null) node = node.parentNode;
return node;
}
function renderTree(self, temp, offset, treeItemClick, ul_Content, itemClick, searchChange, searchCom, showPanel) {
var _self$props = self.props,
treeData = _self$props.treeData,
autoTreeData = _self$props.autoTreeData,
isFetching = _self$props.isFetching,
componentId = _self$props.componentId,
showDropDown = _self$props.showDropDown,
translation = _self$props.translation;
var _self$state = self.state,
inputValue = _self$state.inputValue,
isFocus = _self$state.isFocus,
searchValue = _self$state.searchValue;
var _tar = self.refs.autoForm_ref.refs.autoTreeInput;
var autoTreeSum = autoTreeData ? autoTreeData : [];
var assignTreeData = (0, _extends3.default)({}, treeData, { style: { "height": "315px" } });
var AutoDom = isFetching ? _react2.default.createElement(
'div',
{ style: { "maxHeight": '310px', 'overflowY': 'scroll', backgroundColor: "#FFF", height: '310px' } },
_react2.default.createElement(_loading2.default, { type: 'small' })
) : searchChange ? (inputValue.length > 0 || searchValue.length > 0) && autoTreeSum.length > 0 ? _react2.default.createElement(
'div',
null,
showPanel ? _react2.default.createElement(
'div',
{ className: 'auto-result-container-search' },
_react2.default.createElement(
'ul',
{ className: 'auto-result', onClick: itemClick },
ul_Content
)
) : '',
searchCom
) : (inputValue.length > 0 || searchValue.length > 0) && autoTreeSum.length == 0 ? _react2.default.createElement('div', { className: 'empty-con error_page', 'data-bg-text': self.translation.emptyBgText }) : _react2.default.createElement(
'div',
null,
showPanel ? _react2.default.createElement(_tree2.default, (0, _extends3.default)({}, assignTreeData, { onClick: treeItemClick, translation: translation })) : '',
searchCom
) : _react2.default.createElement(
'div',
null,
showPanel ? _react2.default.createElement(_tree2.default, (0, _extends3.default)({}, assignTreeData, { onClick: treeItemClick, translation: translation })) : '',
searchCom
);
var treeLength = treeData.treeData ? treeData.treeData.length : 0;
var treeDOM = document.getElementsByClassName('base-tree-component')[0];
var treeHeight = showDropDown ? 361 : 310;
var height = isFetching ? 310 : treeHeight;
if (!showPanel && showDropDown) height = 51;
//修复点击后错位bug
self.CommonMount.renderDom('autotree__tree-panel', // wrap's classname & id
AutoDom, // content dom
_tar, // 跟随目标
[_tar, //挂载目标节点
{ // 挂载元素宽高 {width: '', height: ''}
width: 340, // 挂载宽度
height: height
}], false, //labeL和input框是否为竖向结构,会留出对应的label空间
0, //水平向左偏移量,为负数则向右
false, //弹层靠左靠右模式,默认为false 靠左模式
100 //window.onresize执行时间,默认100ms
, 30);
}
function renderAutoUl(self, temp, offset) {
var _self$state2 = self.state,
isFocus = _self$state2.isFocus,
inputValue = _self$state2.inputValue,
isShow = _self$state2.isShow,
showTree = _self$state2.showTree,
style = _self$state2.style,
status = _self$state2.status,
autoTreeItems = _self$state2.autoTreeItems,
hasClick = _self$state2.hasClick,
single = _self$state2.single;
var _self$props2 = self.props,
autoTreeData = _self$props2.autoTreeData,
sync = _self$props2.sync,
componentId = _self$props2.componentId,
isFetching = _self$props2.isFetching;
if (!isFocus && showTree == false) self['domState' + componentId] = false;
var autoResultHeight = void 0,
tempPadding = void 0,
showAutoUl = void 0,
findAllText = void 0,
ulChild = void 0,
tempStyle = void 0,
ulStyle = void 0,
autoLi = void 0,
li_ItemHeight = void 0,
tempPopStyle = void 0,
findAll_style = void 0;
autoResultHeight = setResult_Height(autoTreeItems, inputValue, isFocus, hasClick, autoTreeData, sync, componentId);
autoLi = self.returnAutoLi(true);
if (status == 'edit') {
ulChild = autoLi.length == 0 && inputValue.length >= 0 ? _react2.default.createElement('div', { className: 'findNothing empty-con' }) : autoLi;
tempStyle = inputValue.length == 0 && autoLi.length == 0 ? '' : _react2.default.createElement(
'div',
{ className: 'findAll', onClick: self.findAll, style: { 'position': 'absolute', 'bottom': '0', 'right': '15px' } },
_react2.default.createElement(
'label',
null,
'\u5168\u90E8\u67E5\u627E'
)
);
ulStyle = tempStyle == '' ? { 'padding': '0 0 0 0' } : { 'maxHeight': '280px' };
if (tempStyle == '') {
ulStyle = { 'padding': '0 0 0 0' };
} else if (self.renderParents_Node) {
ulStyle = { 'maxHeight': '280px' };
} else {
ulStyle = { 'maxHeight': '250px' };
}
findAll_style = self.renderParents_Node ? {} : { 'bottom': '50px' };
findAllText = inputValue.length >= 0 && autoLi.length == 0 && isFocus == true ? _react2.default.createElement(
'div',
{ style: findAll_style, className: 'findAll-null' },
_react2.default.createElement(
'label',
{ onClick: self.findAll },
'\u201C\u67E5\u627E\u5168\u90E8\u201D'
)
) : tempStyle;
showAutoUl = isShow ? _react2.default.createElement(
'ul',
{ className: 'auto-result', style: ulStyle, onClick: self.itemClick },
ulChild
) : '';
}
//根据是否显示父级设置下拉最大高度
li_ItemHeight = self.renderParents_Node ? '280px' : '250px';
tempPadding = isShow ? '44px' : '0';
tempPopStyle = autoLi.length > 0 ? { 'maxHeight': li_ItemHeight, 'paddingBottom': tempPadding, 'lineHeight': '34px' } : { 'maxHeight': '280px' };
var _tar = void 0;
if (status == 'search' && single) {
_tar = getElByClass('autoTree-search-input');
} else if (status == 'edit' && !single) {
_tar = self.refs.autoForm_ref.refs.autoTree_commonInput;
} else if (status == 'edit' && single) {
_tar = self.refs.autoForm_ref.refs.autoTreeInput;
}
var tempFecthing = isFetching ? _react2.default.createElement(
'div',
{ style: { "maxHeight": '250px', 'overflowY': 'scroll', backgroundColor: "#FFF", height: '200px' } },
_react2.default.createElement(_loading2.default, { type: 'small' })
) : _react2.default.createElement(
'div',
{ style: { width: _tar.clientWidth } },
showAutoUl,
isShow ? findAllText : ''
);
var AutoDom = status == 'edit' ? _react2.default.createElement(
'div',
{ className: status == 'edit' ? 'auto-result-container' : 'auto-result-container-search',
style: tempPopStyle },
tempFecthing
) : '';
// AutoDom = isFetching ? tempFecthing : AutoDom;
if (!showTree) {
self.CommonMount.renderDom('mount-box', // wrap's classname & id
AutoDom, // content dom
_tar, // 跟随目标
[_tar, //挂载目标节点
{ // 挂载元素宽高 {width: '', height: ''}
width: _tar.clientWidth, // 挂载宽度
height: autoResultHeight
}]);
}
resetPosition(status, showTree, inputValue, autoTreeItems, componentId, autoTreeData, sync);
}
//根据数据计算下拉框的实际高度 以便利用高度计算定位位置
function setResult_Height(autoTreeItems, inputValue, isFocus, hasClick, autoTreeData, sync, componentId) {
var autoResultHeight = void 0;
var sessionData = JSON.parse(sessionStorage.getItem('search' + componentId));
var dataResult = sync ? autoTreeItems : autoTreeData;
var tempBool = (dataResult == undefined || dataResult.length == 0) && isFocus == true && sessionData != null && sessionData.length > 0 && hasClick == true || inputValue == '' && isFocus == true && sessionData != null && sessionData.length > 0 && hasClick == false;
//根据数据计算下拉框的实际高度 以便利用高度计算定位位置
// if(dataResult!=undefined || tempBool){
var tempResult = dataResult != undefined ? tempBool ? sessionData : dataResult : sessionData;
var maxLength = void 0,
itemHeight = void 0;
if (tempResult.length > 0) {
maxLength = tempResult[0].pname ? 5 : 8;
itemHeight = tempResult[0].pname ? 54 : 30;
}
if (tempResult.length == 0) {
autoResultHeight = 259;
} else if (tempResult.length > maxLength) {
autoResultHeight = tempResult[0].pname ? 320 : 290;
} else {
autoResultHeight = tempResult.length * itemHeight + 56;
}
// }
return autoResultHeight;
}
//弹窗定位
function resetPosition(status, showTree, inputValue, autoTreeItems, componentId, autoTreeData, sync) {
var windowH = window.innerHeight;
var windowW = window.innerWidth;
var popAutoResult = getElByClass('pop-auto-result'); //弹窗中搜索结果节点
var searchContainer = getElByClass('searchContainer');
var autoResultContainer = getElByClass('auto-result-container');
//设置弹窗定位
if (status == 'edit' && autoResultContainer != undefined && searchContainer != undefined) {
autoResultContainer.style.left = (windowW - autoResultContainer.offsetWidth) * 0.5 + 'px';
autoResultContainer.style.top = (windowH - autoResultContainer.offsetHeight - 50) * 0.5 + 'px';
autoResultContainer.display = 'block';
} else if (status == 'search' && searchContainer != undefined) {
searchContainer.style.left = (windowW - searchContainer.offsetWidth) * 0.5 + 'px';
searchContainer.style.top = (windowH - searchContainer.offsetHeight) * 0.5 + 'px';
}
}
function getSelectedData(func, dropDownData, translation) {
var ret = {
defaultValue: dropDownData.defaultValue || translation.thisLevelAndAllSubordinatesText,
inputItems: [{
"value": 0,
"text": translation.thisLevelText,
"isChecked": true
}, {
"value": 4,
"text": translation.thisLevelAndAllSubordinatesText,
"isChecked": false
}],
itemClickCallback: function itemClickCallback(event, target, val) {
func(event, target, val);
}
};
return ret;
}
function pushLi(autoLi, itemClass, holdon_class, i, id, text, sideTip, hiddenTip, index, beforeText, searchContent, searchText, renderParents_Node, pname, props) {
var resultText = index == -1 ? text : _react2.default.createElement(
'span',
null,
beforeText,
searchContent,
searchText
);
var status = props.status,
single = props.single;
if (status == 'edit' && !single) {
autoLi.push(_react2.default.createElement(
'li',
{ className: itemClass, id: holdon_class, key: i, 'data-index': id },
_react2.default.createElement(
_toolTip2.default,
{ title: text, side: sideTip, hidden: hiddenTip },
_react2.default.createElement(
'div',
{ className: 'autoTree_ItemName', 'data-index': id },
_react2.default.createElement(
'span',
{ 'data-index': id },
resultText
)
)
),
renderParents_Node == true ? _react2.default.createElement(
_toolTip2.default,
{ title: pname ? pname : '-无-', side: sideTip, hidden: hiddenTip },
_react2.default.createElement(
'div',
{ className: 'autoTree_ParentName', 'data-index': id },
_react2.default.createElement(
'span',
{ 'data-index': id },
pname ? pname : '-无-'
)
)
) : ''
));
} else {
autoLi.push(_react2.default.createElement(
'li',
{ className: itemClass, id: holdon_class, key: i, 'data-index': id },
_react2.default.createElement(
_toolTip2.default,
{ title: text, side: sideTip, hidden: hiddenTip },
_react2.default.createElement(
'div',
{ className: 'autoTree_ItemName', 'data-index': id },
_react2.default.createElement(
'span',
{ 'data-index': id },
resultText
),
renderParents_Node == true ? _react2.default.createElement(
_toolTip2.default,
{ title: pname ? pname : '-无-', side: sideTip, hidden: hiddenTip },
_react2.default.createElement(
'span',
{ className: 'auto-tree__item-pname', 'data-index': id },
'(' + (pname ? pname : '-无-') + ')'
)
) : ''
)
)
));
}
}
function getText(index, text, valueLength, autoLi, itemClass, holdon_class, i, sideTip, hiddenTip, renderParents_Node, item, props) {
var searchContent = void 0,
searchText = void 0,
beforeText = void 0;
if (index != -1) {
beforeText = index == 0 ? '' : text.substring(0, index);
var subValue = text.substring(index, index == 0 ? valueLength : valueLength + index);
searchContent = _react2.default.createElement(
'em',
null,
subValue
);
searchText = text.substring(index == 0 ? valueLength : valueLength + index, text.length);
}
pushLi(autoLi, itemClass, holdon_class, i, item.id, text, sideTip, hiddenTip, index, beforeText, searchContent, searchText, renderParents_Node, (0, _commonFunc.decode)(item.pname), props);
}
function getHightLightData(holdOn_index, item, value, autoLi, i, renderParents_Node, sideTip, hiddenTip, props) {
var text = void 0;
text = (0, _commonFunc.decode)(item.name);
var itemClass = renderParents_Node ? "auto-tree__item " : "auto-tree__item_notShow ";
var holdon_class = i == holdOn_index ? 'li-hold-on' : '';
//获取搜索字符在字段中的位置,分两种 1.首位(index==0) 2.非首位
var index = text.indexOf(value);
var valueLength = value.length;
getText(index, text, valueLength, autoLi, itemClass, holdon_class, i, sideTip, hiddenTip, renderParents_Node, item, props);
return autoLi;
}