|
|
|
@ -6,9 +6,8 @@ import { |
|
|
|
memberInfo, |
|
|
|
getPermitedList, |
|
|
|
postPermitedList} from '@/api/hr/people/share_ctrol' |
|
|
|
import { MessageBox } from '@element-plus/icons-vue/dist/types'; |
|
|
|
|
|
|
|
import { ElDialog, ElMessageBox,TableInstance } from 'element-plus'; |
|
|
|
import { ElDialog, ElMessageBox,TableInstance, TreeInstance } from 'element-plus'; |
|
|
|
|
|
|
|
const props = withDefaults(defineProps<{ |
|
|
|
uid:string, //当前用户的uuid |
|
|
|
@ -17,33 +16,47 @@ const props = withDefaults(defineProps<{ |
|
|
|
closeFunc:(refresh?:boolean)=>void, //父级只需销毁组件 |
|
|
|
}>(),{}) |
|
|
|
|
|
|
|
const treeRef=ref<TreeInstance>() //tree组件的引用,为了实现初始选中状态 |
|
|
|
const treeData =ref<shareOrgInfo[]>([]) // 组织结构树的数据源 |
|
|
|
const members=ref<memberInfo[]>([]) //tablelist's data |
|
|
|
const permited=new Set<string>() //文档成员的id列表,用集合结构为了快速实现增删修改 |
|
|
|
const treeSelected=new Array<number>() //所有选中的tree节点 |
|
|
|
const permitedInfos=new Set<string>() //文档成员的姓名职位信息集合,为了实现与成员列表的同步修改 |
|
|
|
const tableMembersRef=ref<TableInstance>() //table组件的引用,为了实现初始选中状态 |
|
|
|
|
|
|
|
|
|
|
|
function onNodeClick(data:shareOrgInfo){ |
|
|
|
members.value=[]//这里在切换时应该清理现有数据,容易造成tableRef选中事件失效 |
|
|
|
getArchivesListPage({adminorg:data.id, page:1,pagesize:13}).then(resp=>{ |
|
|
|
if(resp.data.count >200){ |
|
|
|
ElMessageBox.alert("人数超过200,请按部门分配权限") |
|
|
|
if(resp.data.count >100){ |
|
|
|
ElMessageBox.alert("人数过多,不再显示具体人员,请分配部门可见权限") |
|
|
|
return |
|
|
|
} |
|
|
|
members.value=resp.data.list |
|
|
|
|
|
|
|
//设置默认选中的人员 |
|
|
|
members.value.forEach(row => { |
|
|
|
if (permited.has('p0'+row.keystr)) { |
|
|
|
// 确保 row-key 正确并且数据一致,手动选中行, 还要设置:reserve-selection="true"!!! |
|
|
|
tableMembersRef.value!.toggleRowSelection(row) |
|
|
|
} |
|
|
|
}) |
|
|
|
setTimeout(() => { |
|
|
|
members.value.forEach(row => { |
|
|
|
if (permited.has('p0'+row.keystr)) { |
|
|
|
// 确保 row-key 正确并且数据一致,手动选中行, 还要设置:reserve-selection="true"!!! |
|
|
|
tableMembersRef.value.toggleRowSelection(row,true) |
|
|
|
} |
|
|
|
}) |
|
|
|
}, 500) |
|
|
|
}) |
|
|
|
} |
|
|
|
|
|
|
|
function onSavePermChange(){ |
|
|
|
let _dprt= treeRef.value?.getCheckedKeys() //这里不能只获取叶子节点,因为有些员工的所属部门并不是叶子节点 |
|
|
|
let _dprtNodes= treeRef.value?.getCheckedNodes(false,true) |
|
|
|
let _list = permited.keys().toArray().filter(val=>val!=='') //成员的key |
|
|
|
let _infos = permitedInfos.keys().toArray().filter(val=>val!=='') //成员的姓名和部门信息 |
|
|
|
let _infos = permitedInfos.keys().toArray().filter(val=>(val!==''&&!val.includes(":"))) //成员的姓名和部门信息 |
|
|
|
|
|
|
|
//把部门权限加入list列表 |
|
|
|
//dprt:d101d102d303.... |
|
|
|
_list.push("dprt:d"+_dprt?.join("d")) |
|
|
|
//把部门名称加入infos列表 |
|
|
|
_dprtNodes?.forEach((item=>_infos.push(item.level+":"+item.name))) |
|
|
|
|
|
|
|
//由父级组件自主处理,并自动清理本弹窗组件 |
|
|
|
if(props.confirmFunc&&_list){ |
|
|
|
@ -80,12 +93,12 @@ function onManualSelect(select:[],row:memberInfo){ |
|
|
|
|
|
|
|
function onSelectionAll(news:memberInfo[]){ |
|
|
|
if(news.length>0){ |
|
|
|
news.forEach((item)=>{ |
|
|
|
members.value.forEach((item)=>{ |
|
|
|
permited.add('p0'+item.keystr) |
|
|
|
permitedInfos.add(`${item.name}-${item.maindeparmentname}-${item.positionname}`) |
|
|
|
}) |
|
|
|
}else{ |
|
|
|
news.forEach((item)=>{ |
|
|
|
members.value.forEach((item)=>{ |
|
|
|
permited.delete('p0'+item.keystr) |
|
|
|
permitedInfos.delete(`${item.name}-${item.maindeparmentname}-${item.positionname}`) |
|
|
|
}) |
|
|
|
@ -97,8 +110,14 @@ onMounted(()=>{ |
|
|
|
if(props.uuid!==""){ |
|
|
|
getPermitedList(props.uid,{uuid:props.uuid}).then(resp=>{ |
|
|
|
resp.data?.permited?.forEach(item=>{ |
|
|
|
if (item.startsWith("dprt")){ |
|
|
|
let arr=item.replace("dprt:d","").split("d") |
|
|
|
arr.forEach(val=>treeSelected.push(parseInt(val))) |
|
|
|
return |
|
|
|
} |
|
|
|
permited.add(item) //userUuids constitue the permited list |
|
|
|
}) |
|
|
|
}); |
|
|
|
|
|
|
|
resp.data?.infos?.forEach(item=>{ |
|
|
|
permitedInfos.add(item) |
|
|
|
}) |
|
|
|
@ -122,9 +141,11 @@ onMounted(()=>{ |
|
|
|
<div class="menus_tree"> |
|
|
|
<el-tree |
|
|
|
ref="treeRef" |
|
|
|
key="id" |
|
|
|
:data="treeData" |
|
|
|
node-key="uuid" |
|
|
|
node-key="id" |
|
|
|
show-checkbox |
|
|
|
:default-checked-keys="treeSelected" |
|
|
|
:check-on-click-leaf="false" |
|
|
|
:style="{maxHeight:'500px','overflow-y': 'auto'}" |
|
|
|
:props="{label: 'name',children:'child',isLeaf:'dir'}" |
|
|
|
:default-expanded-keys="['root']" |
|
|
|
@ -133,7 +154,7 @@ onMounted(()=>{ |
|
|
|
</div> |
|
|
|
<div class="tablelist"> |
|
|
|
<el-table ref="tableMembersRef" |
|
|
|
:data="members" |
|
|
|
:data="members" |
|
|
|
:row-key="row => row.keystr" |
|
|
|
style="overflow-y: auto;height: 500px;" |
|
|
|
@select="onManualSelect" |
|
|
|
|