ball_admin/org.html

449 lines
23 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Title</title>
</head>
<style>
@media screen and(-ms-high-contrast:active),(-ms-high-contrast:none) {
.ie_display{
display: flex;
flex-direction: column;
align-items: center;
}
.ie_margin{
margin-left: -10px!important;
}
}
</style>
<body style="overflow-y: scroll;">
<div id="depart" style="display: flex;justify-content: center;padding: 30px"></div>
</body>
<script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
<script>
var isCompany = false;
//配置公司背景色,部门背景色,用户所在部门背景色
var comBackground = 'linear-gradient(#2196f3,#4c6cca)';
var depBackground = 'linear-gradient(#673ab7,#4c6cca)';
var userBackground = 'linear-gradient(#4CAF50,#4c6cca)';
//获取用户所在部门和id
var userDepName = '技术部';
var userDepId = '7';
var isHasTopCom = false;//是否需要另设顶层公司
var topCompany = 'XXX集团有限公司';//顶层公司名称
//1.接口返回原始数据结构
var depArr = [
{departmentname: 'CEO', subcompanyid1: '2', supdepid: '0', id: '1'},
{departmentname: '销售与市场', subcompanyid1: '3', supdepid: '1', id: '2'},
{departmentname: '生产', subcompanyid1: '2', supdepid: '1', id: '3'},
{departmentname: '人力资源部', subcompanyid1: '2', supdepid: '2', id: '4'},
{departmentname: '物流&客服部', subcompanyid1: '3', supdepid: '3', id: '5'},
{departmentname: '计划&采购部', subcompanyid1: '3', supdepid: '3', id: '6'},
{departmentname: '技术部', subcompanyid1: '2', supdepid: '4', id: '7'},
{departmentname: '采购部', subcompanyid1: '2', supdepid: '5', id: '8'},
{departmentname: '销售部', subcompanyid1: '2', supdepid: '6', id: '9'},
];
var comArr = [
{subcompanyname: 'XXX有限公司', supsubcomid: '0', id: '1'},
{subcompanyname: 'XXX有限公司华中分公司', supsubcomid: '1', id: '2'},
{subcompanyname: 'XXX有限公司华南分公司', supsubcomid: '1', id: '3'},
];
//2.将接口返回的数据拼接成链表结构
function findDep(depArr, str, arrNew) {
var arr = arrNew || [];
depArr.map(function(item, index){
if (item.departmentname == str) {
depArr.map(function(item1, index){
if (item1.id == item.supdepid) {
arr.push(item1);
if (item.supdepid == '0') {
return;
}
findDep(depArr, item1.departmentname, arr);
}
})
}
})
return arr;
}
var newComArr = [];
if(isHasTopCom){
newComArr.push({
departmentname: topCompany,
supdepid: '0',
id: '8888',
});
}
comArr.map(function(item, index){
if(isHasTopCom){
if (item.supsubcomid === '0') {
item.supsubcomid = '8888';
};
}
newComArr.push({
departmentname: item.subcompanyname,
supdepid: item.supsubcomid,
id: item.id,
});
});
function bibao(obj, s, m, str) {
var x1 = m || [];
for (var i = 0; i < obj.length; i++) {
if (obj[i].supdepid == s) {
x1.push(obj[i]);
x1.map(function (item, index) {
if (item.subcompanyid1 && isCompany) {
} else {
x1[index].child = [];
}
if (str) {
isCompany = true;
for (var i = 0; i < str.length; i++) {
if (item.id == str[i].subcompanyid1 && !item.subcompanyid1) {
x1[index].child.push(str[i]);
}
}
}
return bibao(obj, item.id, x1[index].child, str);
})
}
}
return x1;
};
var arr = bibao(depArr, '0');
var gData = bibao(newComArr,'0', [], arr);
//3.界面和样式的处理
function generate(obj, num, cb) {
if (obj && obj[0]) {
obj.map(function (item, index) {
var html = '';
var str = item.departmentname;
if (item.departmentname.indexOf(" ") > -1) {
item.departmentname = item.departmentname.replace(/\s*/g, "");
}
var str1 = '';
if (item.departmentname.indexOf('-') > -1) {
str1 = item.departmentname.replace(/-/g, '')
}else if (item.departmentname.indexOf('&') > -1) {
str1 = item.departmentname.replace(/&/g, '')
}else if (item.departmentname.indexOf('—') > -1) {
str1 = item.departmentname.replace(/—/g, '')
} else if (item.departmentname.indexOf('.') > -1) {
str1 = item.departmentname.replace(/./g, '')
} else if (item.departmentname.indexOf('') > -1) {
str1 = item.departmentname.replace(//g, '')
} else if (item.departmentname.indexOf('') > -1) {
str1 = item.departmentname.replace(//g, '')
} else if (item.departmentname.indexOf('') > -1 && item.departmentname.indexOf('') > -1) {
str1 = item.departmentname.replace(//g, '').replace(//g, '');
} else if (item.departmentname.indexOf('(') > -1 && item.departmentname.indexOf(')') > -1) {
str1 = item.departmentname.replace('(', '').replace(')', '');
} else if (item.departmentname.indexOf('-') > -1 && item.departmentname.indexOf('(') > -1 && item.departmentname.indexOf(')') > -1) {
str1 = item.departmentname.replace(/-/g, '').replace('(', '').replace(')', '');
} else if (item.departmentname.indexOf('-') > -1 && item.departmentname.indexOf('') > -1 && item.departmentname.indexOf('') > -1) {
str1 = item.departmentname.replace(/-/g, '').replace(//g, '').replace(//g, '');
} else {
str1 = item.departmentname;
}
var idStr = str1 + item.id;
var idStrSpan = item.departmentname + item.id + 'span';
var child = item.child;
var spanBar = num != 1 ? "<div style='background: #4c6cca;display: block;width: 3px;height: 20px;margin: auto;'></div>" : "<span></span>";
var background = item.subcompanyid1 ? depBackground : comBackground;
if (item.departmentname == userDepName && item.id== userDepId) {
background = userBackground;
}
var span = child && child.length > 0 ? "<div id=" + idStrSpan + " style='color:#fff;cursor:pointer;font-size: 25px;margin-top: -10px' onclick='display(" + JSON.stringify(item) + ",$(this)," + index + ")'>+</div>" : "<span></span>";
html += "<div class='ie_display' style='text-align: center;font-size:14px;color:#fff;width: 200px'><div style='display:flex;align-items: center'><div>" + spanBar + "<div style='background: " + background + ";box-shadow:5px 5px 5px #6A48D7;width: 150px;margin: auto;text-align: center;border-radius: 5px;display: flex;align-items:center;justify-content:space-between;height: 60px'><div style='width: 20px'></div><div>" + str + "</div><div style='display: flex;flex-direction: column;height: 100%;justify-content: space-between'>" + span + "<div style='align-self: flex-end;width: 20px;border-radius: 50%;background: #fff;color: #4c6cca'>" + child.length + "</div></div></div></div></div><div id=" + "'" + idStr + "'" + " style='display: flex;justify-content: center;'></div></div>";
if (cb) {
cb(html)
}
})
}
};
generate(gData, 1, function (html) {
$('#depart').append(html)
});
//4.点击触发generate方法挂载界面(点击右上角的+或-按钮)
function display(item, that, index) {
var str1 = '';
if (item.departmentname.indexOf('-') > -1) {
str1 = item.departmentname.replace(/-/g, '')
} else if (item.departmentname.indexOf('&') > -1) {
str1 = item.departmentname.replace(/&/g, '')
}else if (item.departmentname.indexOf('—') > -1) {
str1 = item.departmentname.replace(/—/g, '')
} else if (item.departmentname.indexOf('.') > -1) {
str1 = item.departmentname.replace(/./g, '')
} else if (item.departmentname.indexOf('') > -1) {
str1 = item.departmentname.replace(//g, '')
} else if (item.departmentname.indexOf('') > -1) {
str1 = item.departmentname.replace(//g, '')
} else if (item.departmentname.indexOf('') > -1 && item.departmentname.indexOf('') > -1) {
str1 = item.departmentname.replace(//g, '').replace(//g, '');
} else if (item.departmentname.indexOf('(') > -1 && item.departmentname.indexOf(')') > -1) {
str1 = item.departmentname.replace('(', '').replace(')', '');
} else if (item.departmentname.indexOf('-') > -1 && item.departmentname.indexOf('(') > -1 && item.departmentname.indexOf(')') > -1) {
str1 = item.departmentname.replace(/-/g, '').replace('(', '').replace(')', '');
} else if (item.departmentname.indexOf('-') > -1 && item.departmentname.indexOf('') > -1 && item.departmentname.indexOf('') > -1) {
str1 = item.departmentname.replace(/-/g, '').replace(//g, '').replace(//g, '');
} else {
str1 = item.departmentname;
}
var str = str1 + item.id;
var child = item.child;
var spanLeftImg = child[0].subcompanyid1 ? './leftDep.png' : './leftCom.png';
var spanRightImg = child[0].subcompanyid1 ? './rightDep.png' : './rightCom.png';
if(Number($('#depart')[0].style.left.replace('px',''))>0){
}else {
$('#depart').css({
'position': 'relative',
'left': "0px",
'transition-property': 'all',
'transition-duration': '1.5s'
});
}
if (child) {
if ($('#' + str).children('div').length > 0) {
that.html('+');
$('#' + str + '>div').remove();
if (child.length !== 1) {
$('#' + str).prev().remove();
}
} else {
var firstChild = 0;
var divLeft = 0;
var lineWidth = 0;
that.html('-');
$('#' + str).before('<div style="width: 150px"><div style="background: #4c6cca;display: block;width: 3px;height: 20px;margin: auto;"></div><div style="height: 3px;background: #4c6cca;margin-left: -26px"></div></div>');
generate(child, '', function (html) {
$('#' + str).append("<div style=''>" + html + "</div>");
$('#' + str).css('margin-bottom', '20px');
var childNum = $('#' + str).children('div').length;
var maxNum = parseInt((window.innerWidth-5)/200);
var siblings = ($('#' + str).parent().parent().siblings());
var windowWidth = window.innerWidth;
//右边越界
if ($('#' + str) && $('#' + str).children('div:first-child')[0] && ($('#' + str).children('div:last-child')[0].offsetLeft > windowWidth - 200) && child.length < maxNum) {
$('#depart').css({
position: 'relative',
'left': -($('#' + str).children('div:last-child')[0].offsetLeft + 200 - windowWidth) + 'px',
'transition-property': 'all',
'transition-duration': '1s'
});
}
for (var i = 0; i < siblings.length; i++) {
if ($(siblings[i])[0].childElementCount > 0 && $(siblings[i])[0].id!='span1'&& $(siblings[i])[0].id!='span2') {
if ($(siblings[i]).children().children('div:last-child').children().length > 0) {
if ($(siblings[i]).children().children('div:last-child').children().length > 1) {
$(siblings[i]).children().children('div:last-child').prev().remove();
}
$(siblings[i]).children().children('div:first-child').children('div:last-child').children('div:last-child').children('div:last-child').children('div:first-child').html('+');
$(siblings[i]).children().children('div:last-child').children().remove();
}
}
}
if (200 * (childNum + 1) - 197 >= window.innerWidth) {
if (isIE()) {
console.log(isIE())
$('#' + str).css({position: 'absolute', left: '-28px', right: 0});
} else {
$('#' + str).css({position: 'absolute', left: 0, right: 0});
}
$('#' + str).css({position: 'absolute', left: 0, right: 0});
$('#' + str).children("div:nth-child(" + childNum + ")").css('display', 'none');
if ($('#' + str).children("div:first-child")[0]&&$('#' + str).children("div:first-child")[0].id != 'span1') {
$('#' + str).children("div:first-child").before('<div id="span1" class="ie_positon_span1" style="margin-top: 23px;cursor: pointer" onclick="leftDir(' + str + ')"><img src=' + spanLeftImg + ' alt="" style="width:40px;height: 50px"/></div>');
}
$('#' + str).children('#span1').css('visibility', 'hidden');
if ($('#' + str).children('#span2').length == 0) {
$('#' + str).children("div:nth-child(" + Number(maxNum + 1) + ")").after('<div id="span2" class="ie_margin" style="margin-top: 23px;cursor: pointer;margin-left: -40px" onclick="rightDir(' + str + ')"><img src=' + spanRightImg + ' alt="" style="width:40px;height: 50px"/></div>');
}
divLeft = $('#' + str).children("div:nth-child(2)").children("div:first-child").children("div:first-child").children("div:first-child").children("div:first-child")[0].offsetLeft+1.5;
lineWidth = 200 * (maxNum - 1);
firstChild = $('#' + str).children('#span1')&&$('#' + str).children('#span1')[0].offsetLeft;
} else {
divLeft = $('#' + str).children("div:first-child").children("div:first-child").children("div:first-child").children("div:first-child").children("div:first-child")[0].offsetLeft;
lineWidth = 200 * (childNum - 1) + 3 ;
firstChild = $('#' + str).children("div:first-child")[0].offsetLeft;
}
//左边越界
if (firstChild+Number($('#depart')[0].offsetLeft)<=0) {
$('#depart').css({
'position': 'relative',
'left': -firstChild + 'px',
'transition-property': 'all',
'transition-duration': '1s'
});
}
$('#' + str).prev().children("div:last-child").css({
'width': lineWidth + 'px',
'margin-left': '0px',
'position': 'absolute',
'left': divLeft+ 'px',
});
if (child.length == 1) {
$('#' + str).prev().remove();
}
});
}
}
}
//5.创建用户所属的组织链条
var count = 0;
function findDep(depArr, str, id, arrNew) {
var arr = arrNew || [{child: []}];
count++;
for (var n = 0; n < depArr.length; n++) {
var item = depArr[n];
if (item.departmentname == str && item.id == id) {
for (var m = 0; m < depArr.length; m++) {
var item1 = depArr[m];
if (item1.id == item.supdepid) {
var itemStr = item1.child;
for (var i = 0; i < itemStr.length; i++) {
if (item.departmentname == itemStr[i].departmentname) {
if (count % 2 == 0) {
arr[0].name = item1.departmentname;
arr[0].no = i;
}
if (count % 2 != 0) {
arr[0].child.push({name: item1.departmentname, no: i});
}
}
}
var arrNew = arr;
if (arr[0].name != undefined && arr[0].child.length > 0) {
arrNew = [{child: arr}];
count--;
}
if (item1.supdepid == '0' && item1.subcompanyid1 == undefined) {
return arr;
} else if (item1.supdepid == '0') {
for (var i = 0; i < newComArr.length; i++) {
if (newComArr[i].id == item1.subcompanyid1) {
var itemStr1 = newComArr[i].child;
for (var j = 0; j < itemStr1.length; j++) {
if (item1.departmentname == itemStr1[j].departmentname) {
arrNew[0].name = newComArr[i].departmentname;
arrNew[0].no = j;
return findDep(newComArr, newComArr[i].departmentname, newComArr[i].id, [{child: arrNew}]);
break;
}
}
}
}
} else {
return findDep(depArr, item1.departmentname, item1.id, arrNew);
}
break;
}else if(item.supdepid == '0'){
var arrNew = arr;
if (arr[0].name != undefined && arr[0].child.length > 0) {
arrNew = [{child: arr}];
count--;
}
for (var i = 0; i < newComArr.length; i++) {
if (newComArr[i].id == item.subcompanyid1) {
var itemStr1 = newComArr[i].child;
for (var j = 0; j < itemStr1.length; j++) {
if (item.departmentname == itemStr1[j].departmentname) {
arrNew[0].name = newComArr[i].departmentname;
arrNew[0].no = j;
return findDep(newComArr, newComArr[i].departmentname, newComArr[i].id, [{child: arrNew}]);
break;
}
}
}
}
}
}
break;
}
}
}
var depChain = findDep(depArr, userDepName, userDepId);
function displayDep(obj, objN, index) {
var objM = obj[index];
var idStrSpan = objM.departmentname + objM.id + 'span';
display(objM, $('#' + idStrSpan));
if (objN && objN.length > 0) {
if (objM.departmentname == objN[0].name) {
if (objN[0].child && objN[0].child.length > 0) {
displayDep(objM.child, objN[0].child, objN[0].no);
}
}
}
}
;
displayDep(gData, depChain, 0);
//点击右边箭头
function rightDir(str) {
if ($(str).children('#span1')[0].style.visibility == 'hidden') {
$(str).children('#span1').css('visibility', 'visible');
}
$(str).children('#span1').next().css('display', 'none');
$(str).children('#span1').insertAfter($(str).children('#span1').next());
$(str).children('#span2').next().css('display', 'block');
$(str).children('#span2').insertAfter($(str).children('#span2').next());
if ($(str).children('#span2').next().length == 0) {
$(str).children('#span2').css('visibility', 'hidden');
}
removeChild(str);
}
//点击左边箭头
function leftDir(str) {
if ($(str).children('#span2')[0].style.visibility == 'hidden') {
$(str).children('#span2').css('visibility', 'visible');
}
$(str).children('#span1').prev().css('display', 'block');
$(str).children('#span1').insertBefore($(str).children('#span1').prev());
$(str).children('#span2').prev().css('display', 'none');
$(str).children('#span2').insertBefore($(str).children('#span2').prev());
if ($(str).children('#span1').prev().length == 0) {
$(str).children('#span1').css('visibility', 'hidden');
}
removeChild(str);
}
//公共方法-点击箭头之后删掉下面的所属机构
function removeChild(father) {
$('#depart').css({
position: 'relative',
'left': "0px",
'transition-property': 'all',
'transition-duration': '1.5s'
});
var siblings = $(father).children();
for (var i = 0; i < siblings.length; i++) {
if ($(siblings[i])[0].childElementCount > 0) {
if ($(siblings[i]).children().children('div:last-child').children().length > 0) {
if ($(siblings[i]).children().children('div:last-child').children().length > 1) {
$(siblings[i]).children().children('div:last-child').prev().remove();
}
$(siblings[i]).children().children('div:last-child').children().remove();
$(siblings[i]).children().children('div:first-child').children('div:last-child').children('div:last-child').children('div:last-child').children('div:first-child').html('+');
}
}
}
}
//判断是否是ie浏览器
function isIE() {
if (!!window.ActiveXObject || "ActiveXObject" in window) {
return true;
} else {
return false;
}
}
</script>
</html>