Files
Pichome/dzz/system/template/orgtree.htm
2024-01-31 01:00:33 +08:00

505 lines
14 KiB
HTML
Raw Permalink 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.

<!--{template common/header_simple_start}-->
<link href="static/jstree/themes/default/style.min.css?{VERHASH}" rel="stylesheet" media="all">
<style>
body{
height:100%;
width:100%;
margin:0;
overflow:auto;
/*padding-bottom:34px;*/
}
.jstree-default .jstree-icon:empty{
font-size: 20px;
}
.orgtree-search{
position:fixed;
width:100%;
left:0;
top:0;
background-color:#FFF;
}
.orgtree-search .form-control{
padding:5px 35px 5px 25px;
border:0;
border-bottom:1px solid #CCC;
box-shadow:none;
background-color: #FFFFFF;
}
.orgtree-search .form-control:focus{
box-shadow:none;
}
.orgtree-search .search{
position:absolute;
left:0px;
top:0px;
width:24px;
height:32px;
padding:8px 5px;
font-size: 18px;
color: rgba(78,85,99,0.65);
}
.orgtree-search .delete {
position: absolute;
right: 1px;
top: 0px;
width:24px;
height:32px;
padding:8px 5px;
font-size: 18px;
color: rgba(78,85,99,0.65);
}
.orgtree-search .delete:hover,.orgtree-search .search:hover{
color: rgba(78,85,99,1);
text-decoration: none;
}
.orgtree-search a:hover{
background:#F7F7F7;
}
.jstree-default-responsive .jstree-anchor>.jstree-themeicon{
background-size:auto;
}
.Topcarousel{
width: 24px;
height: 24px;
border-radius: 50%;
display: inline-block;
line-height: 24px;
text-align: center;
margin-right: 2px;
color: #FFFFFF;
font-size:14px;
}
.iconFirstWord{
width: 24px;
height: 24px;
border-radius: 50%;
display: inline-block;
line-height: 24px;
text-align: center;
margin-right: 2px;
color: #FFFFFF;
font-size:14px;
}
.jstree-default .jstree-icon:empty{
border-radius: 50%;
}
.jstree-default .jstree-node{
line-height: 2.4rem;
}
.jstree-default .jstree-node, .jstree-default .jstree-icon{
background-image: url(dzz/system/images/32px.png);
}
.jstree-default .jstree-last {
background: 0 0;
}
.jstree-default .jstree-themeicon-custom {
background-color: transparent;
background-image: none;
}
#orgtree{
padding:15px;overflow:auto;height:100%;
}
<!--{if $_GET['nosearch']>0}-->
.orgtree-search{
display:none;
}
body{
padding-bottom:0;
}
<!--{/if}-->
</style>
<script type="text/javascript">
var ctrlid='$_GET['ctrlid']';
var multiple=parseInt('$_GET['multiple']')>0?true:false;
var nouser=parseInt('$_GET['nouser']')>0?1:0;
var showjob=parseInt('$_GET['showjob']')>0?1:0;
var exids = '$_GET['exids']';
var stype='$_GET['stype']'?parseInt('$_GET['stype']'):0;//0:可以选择机构和用户1仅选择机构和部门2仅选择用户
var range='$_GET['range']'?parseInt('$_GET['range']'):0;//0:机构和用户1仅机构和部门2仅群组
var moderator=parseInt('$_GET['moderator']')>0?1:0;
var callback_url = '{$callback_url}';
var ismobile='$ismobile'?1:0;
</script>
<!--{template common/header_simple_end}-->
<div id="orgtree" class="orgtree-container" style=""></div>
<!--{if intval($_GET['nosearch'])<1}-->
<div class="orgtree-search">
<a href="javascript:;" class="search" onclick="jstree_search();return false" title="{lang search}"><i class="dzz dzz-search"></i></a>
<a href="javascript:;" class="delete" onclick="jstree_search('stop');return false" title="{lang close_search}"><i class="dzz dzz-close"></i></a>
<input id="jstree_search_input" type="text" placeholder="{lang search_department_user}" class="form-control" onkeyup="if(event.keyCode==13){jstree_search()}" />
</div>
<!--{/if}-->
<script type="text/javascript">
window.onesize=function(){
/*var clientHeight=parent.jQuery('#'+ctrlid+'_dropdown_menu').css('height');
if(isNaN(clientHeight)) clientHeight=jQuery('body').height();
jQuery('#orgtree').css('height',clientHeight-(jQuery('.orgtree-search').length>0?jQuery('.orgtree-search').outerHeight(true):0));
console.log('resize');*/
}
jQuery(document).ready(function(e) {
/*var clientHeight=parent.jQuery('#'+ctrlid+'_dropdown_menu').css('height');
if(isNaN(clientHeight)) clientHeight=jQuery('body').height();
jQuery('#orgtree').css('height',clientHeight-(jQuery('.orgtree-search').length>0?jQuery('.orgtree-search').outerHeight(true):0));*/
// console.log(parseInt(parent.jQuery('#'+ctrlid+'_dropdown_menu').css('height')),jQuery('.orgtree-search').outerHeight(true));
jQuery("#orgtree").jstree({
"core" : {
"multiple" : multiple,
"check_callback" : false,
"themes" : { "responsive":false},
'data':function(node,cb){
var self=this;
jQuery.post(DZZSCRIPT+'?mod=system&op=orgtree&do=orgtree',{'id':node.id,'nouser':nouser,'moderator':moderator,'zero':'$zero','stype':stype,'range':range,'showjob':showjob,'exids':exids},function(json){
cb.call(this,json);
},'json');
}
},
"types": {
"#": {
"max_children": -1,
"max_depth": -1,
"valid_children": -1
},
"organization": {//部门
"icon": "dzz dzz-account-box",
"valid_children": ['depart','folder']
},
"department": {
"icon": "dzz/system/images/department.png",
"valid_children": ['depart','folder']
},
"group": {//群组
"icon": "dzz dzz-group",
"valid_children": ['folder']
},
"default": {//我的网盘
"icon": "dzz dzz-account-circle",
"valid_children": ['folder']
},
},
"checkbox" : {
"keep_selected_style" : false
<!--{if $_GET['stype']==1 || empty($_GET['multiple'])}-->
,"three_state": true//父子级别级联选择
// ,"tie_selection": false
<!--{/if}-->
},
"search":{
"show_only_matches":true,
"fuzzy":false,
"ajax":{'url' : '{DZZSCRIPT}?mod=system&op=orgtree&do=search&stype='+stype+'&nouser='+nouser,'dataType':'json'}
},
"plugins" : ['types',"checkbox","search","wholerow"]
// List of active plugins
});
jQuery("#orgtree").on('select_node.jstree',function(e,data){
var inst=jQuery("#orgtree").jstree(true);
if(data.node.state.loaded) open_node(data.node);
else inst.load_node(data.node,function(){open_node(data.node)});
});
jQuery("#orgtree").on('changed.jstree',function(e,data){
//jQuery("#orgtree").jstree(true).toggle_node(data.node);
window.setTimeout(function(){ formatSelected(data.selected);},200);
/*if(data.action=='select_node'){
formatSelected(data.selected);
}else if(data.action=='deselect_node'){
formatSelected(data.selected);
}*/
});
jQuery("#orgtree").on('ready.jstree',function(e){
var inst=jQuery("#orgtree").jstree(true);
try{
var orgtree=parent.openarr? parent.openarr[ctrlid]:((parent.selorg.openarr && parent.selorg.openarr[ctrlid])?parent.selorg.openarr[ctrlid] : []);
if(orgtree){
for(var i in orgtree){
if(document.getElementById(orgtree[i][0])) open_node_dg(inst,document.getElementById(orgtree[i][0]),orgtree[i],open_node_dg_callback);
}
}
}catch(e){}
});
/* jQuery("#orgtree").on('open_node.jstree',function(e,data){
jstree_checked(data.node);
});*/
});
var ajaxing=false;
var arr=[];
var timer=null;
try{
var orgtree=parent.openarr? parent.openarr[ctrlid]:((parent.selorg.openarr && parent.selorg.openarr[ctrlid])?parent.selorg.openarr[ctrlid] : []);
}catch(e){
var orgtree=[];
}
var arr1=[];
if(orgtree){
for(var i in orgtree){
arr1.push(i);
}
}
function open_node_dg_callback(nodeid){
var j=jQuery.inArray(nodeid,arr1);
if(j>-1){
arr1.splice(j,1);
}
if(arr1.length<1){
jstree_checked();
}
}
function open_node(node){
ajaxing=false;
var inst=jQuery("#orgtree").jstree(true);
if(!node) return;
if(node.type=='user') return;
//inst.open_node(node);
if(node && node.children && node.children.length){
for(var i=0 ;i<node.children.length;i++){
var t=inst.get_node(node.children[i]);
if(!t) continue;
if(t.id.indexOf('uid_')!==-1){
continue;
}else if(t.state.loaded){
open_node(inst.get_node(node.children[i]));
}else{
arr.push(node.children[i]);
}
}
open_run();
}
}
function open_run(){
if(timer || ajaxing) return;
if(!ajaxing){
if(arr.length>0){
timer=window.setInterval(function(){
ajaxing=true;
if(arr.length<1) return;
var nid=arr.shift();
if(nid.indexOf('uid_')!==-1) return;
var pnode=jQuery("#orgtree").jstree(true).get_node(nid);
if(!pnode) return;
if(jQuery("#orgtree").jstree(true).is_loaded(nid)){
open_node(pnode);
}else{
jQuery("#orgtree").jstree(true).load_node(nid,function(node,state){
node.state.loaded=true;
open_node(pnode);
});
}
},50);
}else{
window.clearInterval(timer);
}
}
}
function open_node_dg(inst,node,arr,callback){ //自动打开有权限的目录树
inst.open_node(node,function(node){
var i=jQuery.inArray((node.id),arr);
if(i<arr.length && i>-1 && document.getElementById(arr[i+1])) open_node_dg(inst,document.getElementById(arr[i+1]),arr,callback);
else{
if(typeof(callback)=='function'){
callback(arr[i]);
}
//inst.select_node(node);
}
});
}
function jstree_checked(node){
var inst=jQuery("#orgtree").jstree(true)
if(!parent.jQuery('#sel_'+ctrlid).val()) return;
var orgids=parent.jQuery('#sel_'+ctrlid).val().split(',');
var uids_node=[];
var oids_node=[]
for(var i in orgids){//生成btn-sorg
if(orgids[i].indexOf('uid_')===0){ //用户
if(stype==0 || stype==2){
var uid=orgids[i].replace('uid_','');
jQuery('#orgtree .jstree-node[uid='+uid+']').each(function(){
var node=inst.get_node(this);
if(node) uids_node.push(node);
});
}
}else{
if(stype==0 || stype==1){
var node=inst.get_node(orgids[i]);
if(node) oids_node.push(node);
}
}
}
if(oids_node.length){
inst.select_node(oids_node,true);
}
if(uids_node.length){
inst.select_node(uids_node,true);
}
}
//初始化选择范围
//
function formatSelected(sels){//格式化选择的内容,并且创建右侧的发布范围
var inst=jQuery("#orgtree").jstree(true);
var nsels=[];
if(stype<2){//可以选择部门时,如果部门选中的话,下级全部忽略
for(var i in sels){
if(inst.get_parent(sels[i])=='other' || jQuery.inArray(inst.get_parent(sels[i]),sels)<0){
nsels.push(sels[i]);
}
}
}else if(stype==2){
for(var i in sels){
if(sels[i].indexOf('uid_')!==-1){
nsels.push(sels[i]);
}
}
}
//限制选择数量
//console.log(nsels);
//console.log(limit);
/*if(limit && nsels.length>limit){
for(var i=limit;i<nsels.length;i++){
var node=inst.get_node(sels[i]);
inst.deselect_node(node);
}
nsels.splice(limit);
}
console.log(nsels);*/
selectorg_add(nsels,1);
}
function selectorg_add(sels,del){ //添加到右侧
var inst=jQuery("#orgtree").jstree(true);
var vals=[];
var nsels=[];
for(var i in sels){
var node=inst.get_node(sels[i]);
if((jQuery.isNumeric(sels[i]))){//是机构或部门
if(stype==2) continue;
var path=node.text;
if(node.parents.length>1){
for(var j=0;j<node.parents.length-1;j++){
var nodep=inst.get_node(node.parents[j]);
if(nodep.text) path=nodep.text+'-'+path;
}
}
nsels.push(sels[i]);
vals.push({'orgid':sels[i],'icon':node.icon,'text':node.text,'path':path});
}else if( sels[i].indexOf('uid_')!==-1){//是用户
if(stype==1) continue;
nsels.push(sels[i].replace(/orgid_\d+_/,''));
vals.push({'orgid':sels[i].replace(/orgid_\d+_/,''),'icon':node.icon,'text':node.text,'path':node.text});
}
}
var orgids=[];
if(parent.jQuery('#sel_'+ctrlid).val()){
orgids=parent.jQuery('#sel_'+ctrlid).val().split(',');
}
if(del){
var dels=[];
for(var j in orgids){
if(jQuery.inArray(orgids[j],nsels)<0){
dels.push(orgids[j]);
}
}
try{
if(dels) parent.selorg.del(ctrlid,dels);
}catch(e){}
}
try{
parent.selorg.add(ctrlid,vals);
}catch(e){}
}
function checkdel_by_treeSelecteds(){ //检测右侧以选择区域,在树中存在的,没有选中的删除掉;
var inst=jQuery("#orgtree").jstree(true);
var orgids=[];
var sels=inst.get_selected();
var nsels=[]
for(var i in sels){
if(jQuery.inArray(inst.get_parent(sels[i]),sels)>=0){
}else{
if((jQuery.isNumeric(sels[i]) || sels[i]=='other')){
nsels.push(sels[i]);
}else {
nsels.push(sels[i].replace(/orgid_\d+_/,''));
}
}
}
var vals=[];
if(parent.jQuery('#sel_'+ctrlid).val()){
orgids=parent.jQuery('#sel_'+ctrlid).val().split(',');
}
for(var i in orgids){
if(jQuery.inArray(orgids[i],nsels)>-1) continue;
vals.push(orgids[i]);
}
try{parent.selorg.del(ctrlid,vals);}catch(e){}
}
function selectorg_remove(val){
var inst=jQuery("#orgtree").jstree(true);
//取消树中的选择状态
val+='';
var select_nodes=inst.get_selected(true);
for(var i in select_nodes){
if(val.indexOf('uid_')===0){
var regx=new RegExp(val+'$','i');
if(regx.test(select_nodes[i].id)){
inst.deselect_node(select_nodes[i]);
}
}else if(val==='other'){
if(select_nodes[i].id=='other') inst.deselect_node(select_nodes[i]);
}else if(val*1==select_nodes[i].id*1){
inst.deselect_node(select_nodes[i]);
}
}
}
function jstree_search(op){
if(op=='stop'){
jQuery('#jstree_search_input').val('');
jQuery("#orgtree").jstree(true).search();
}else{
jQuery("#orgtree").jstree(true).search(jQuery('#jstree_search_input').val());
}
}
function selectorg_search(keyword){
jQuery('#jstree_search_input').val(keyword);
jQuery("#orgtree").jstree(true).search(keyword);
}
$(function(){
jQuery('.orgtree-search').siblings('#orgtree').css('padding','40px 15px 15px 15px');
})
</script>
<script type="text/javascript" src="static/js/jstree.min.js?{VERHASH}"></script>
</body>
</html>