|
|
@@ -157,9 +157,7 @@ |
|
|
|
</div>
|
|
|
|
<span class="Text_tiny tinyText_wirte">工作负责人</span>
|
|
|
|
</div>
|
|
|
|
<li v-for="(user, index) in listManagerComputed(
|
|
|
|
folder.manageUser
|
|
|
|
)" :key="index">
|
|
|
|
<li v-for="(user, index) in folder.manageUser" :key="index">
|
|
|
|
<div>
|
|
|
|
<div class="avtarface" title="编辑">
|
|
|
|
<!-- <img src="" v-lazy="headSrc + user.headImgUrl" @click="aloneAddUserForFolder(folder)" /> -->
|
|
|
@@ -240,7 +238,8 @@ |
|
|
|
<li v-for="(user, index) in folderChild.manageUser" :key="index">
|
|
|
|
<div>
|
|
|
|
<div class="avtarface" title="编辑">
|
|
|
|
<img src="" v-lazy="headSrc + user.headImgUrl" @click="aloneAddUserForFolder(folderChild)" />
|
|
|
|
<!-- <img src="" v-lazy="headSrc + user.headImgUrl" @click="aloneAddUserForFolder(folderChild)" /> -->
|
|
|
|
<img :src="user.headImgUrl | resolveAvator" @click="aloneAddUserForFolder(folderChild)" />
|
|
|
|
</div>
|
|
|
|
<span class="Text_tiny tinyText_wirte">{{
|
|
|
|
user.cnName
|
|
|
@@ -261,7 +260,7 @@ |
|
|
|
)" :key="index">
|
|
|
|
<div v-if="index < 14 || showAll">
|
|
|
|
<div class="avtarface" title="编辑">
|
|
|
|
<img src="" v-lazy="headSrc + user.headImgUrl" />
|
|
|
|
<img :src=" user.headImgUrl | resolveAvator" />
|
|
|
|
</div>
|
|
|
|
<span class="Text_tiny tinyText_wirte">{{
|
|
|
|
user.cnName
|
|
|
@@ -288,7 +287,7 @@ |
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div v-show="listNewFolder.length>0">
|
|
|
|
<div v-show="listNewFolder.length > 0 && false">
|
|
|
|
<span class="fl label_text">自定义工作</span>
|
|
|
|
<span class="fr mt-10" @click="addProjFolderWork()"><i class="yiyunPlusmini"></i></span>
|
|
|
|
</div>
|
|
|
@@ -333,23 +332,24 @@ |
|
|
|
<!-- 添加协作群与工作 -->
|
|
|
|
<el-collapse-item name="1" class="nomidline">
|
|
|
|
<template slot="title">
|
|
|
|
<!-- <span class="fr mr_20"> -->
|
|
|
|
<!-- <el-checkbox class="checkBoxCol" v-model="ischeckAll" @change="handleCheckTopAll">全选</el-checkbox> -->
|
|
|
|
<!-- </span> -->
|
|
|
|
<span class="fr mr_20">
|
|
|
|
<el-checkbox class="checkBoxCol" v-model="ischeckAll" @change="handleCheckTopAll">全选</el-checkbox>
|
|
|
|
</span>
|
|
|
|
<span>从部门中选择职员</span>
|
|
|
|
</template>
|
|
|
|
<el-collapse accordion v-for="(dept, group_index) in listDept" v-show="dept.listUser.length>0" :key="group_index">
|
|
|
|
<!-- 二级折叠面板 -->
|
|
|
|
<el-collapse-item>
|
|
|
|
<template slot="title">
|
|
|
|
<!-- <span class="fr mr_20"> -->
|
|
|
|
<!-- <el-checkbox class="checkBoxCol" v-model="dept.selected" :key="group_index" @change="handleCheckItemAll(group_index,$event)">全选</el-checkbox> -->
|
|
|
|
<!-- </span> -->
|
|
|
|
<span class="fr mr_20">
|
|
|
|
<el-checkbox class="checkBoxCol" v-model="dept.selected" :key="group_index" @change="handleCheckItemAll(group_index,$event)">全选</el-checkbox>
|
|
|
|
</span>
|
|
|
|
<span>{{ dept.deptName }} </span>
|
|
|
|
</template>
|
|
|
|
<div class="user_info_item" v-for="(user, index) in listUserManager(
|
|
|
|
<!-- <div class="user_info_item" v-for="(user, index) in listUserManager(
|
|
|
|
dept.listUser
|
|
|
|
)" :label="user" :key="index">
|
|
|
|
)" :label="user" :key="index"> -->
|
|
|
|
<div class="user_info_item" v-for="(user, index) in dept.listUser" :label="user" :key="index">
|
|
|
|
<el-checkbox class="checkBoxCol" v-model="user.selected" @change="
|
|
|
|
handleCheckedOnlyOne(
|
|
|
|
group_index,
|
|
|
@@ -408,9 +408,10 @@ |
|
|
|
</div>
|
|
|
|
<!-- 项目负责人选择后 -->
|
|
|
|
<div v-if="listManagerComputed(selectedUser).length != 0">
|
|
|
|
<div class="user_info_item mainpeople_H" v-for="(user, index) in listManagerComputed(
|
|
|
|
<!-- <div class="user_info_item mainpeople_H" v-for="(user, index) in listManagerComputed(
|
|
|
|
selectedUser
|
|
|
|
)" :key="index">
|
|
|
|
)" :key="index"> -->
|
|
|
|
<div class="user_info_item mainpeople_H" v-for="(user, index) in selectedUser" :key="index">
|
|
|
|
<i class="icon font_family icon-icon_huangguan-jihuo middlehuangguan fl" title="负责人"></i>
|
|
|
|
<!-- <img v-lazy="headSrc + user.headImgUrl" alt="" class="user_info_faceImg" /> -->
|
|
|
|
<img :src="user.headImgUrl | resolveAvator" alt="" class="user_info_faceImg" />
|
|
|
@@ -442,18 +443,20 @@ |
|
|
|
}},进行职员指派。
|
|
|
|
</p>
|
|
|
|
</div>
|
|
|
|
<!-- <div v-if="isShowStaffList">
|
|
|
|
<div v-if="isShowStaffList">
|
|
|
|
<div class="row_painfr" v-for="dept in listDeptComputed" :key="dept.deptID" >
|
|
|
|
<div class="yiyun_line"></div>
|
|
|
|
<div v-for="deptID in listDeptUserNoZero(selectedUser)" :key="deptID">
|
|
|
|
<div v-if="deptID ==dept.deptID">
|
|
|
|
<div v-if="deptID == dept.id">
|
|
|
|
<div class="yiyun_line"></div>
|
|
|
|
<span>{{dept.deptName}}</span>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="renyuanbox" v-for="(user,index) in listUserComputed(selectedUser)" :key="index">
|
|
|
|
<div class="user_info_item" v-if="user.deptID ==dept.deptID">
|
|
|
|
<img v-lazy="headSrc+user.headImgUrl" alt="" class="user_info_faceImg">
|
|
|
|
<!-- <div class="renyuanbox" v-for="(user,index) in listUserComputed(selectedUser)" :key="index"> -->
|
|
|
|
<div class="renyuanbox" v-for="(user,index) in selectedUser" :key="index">
|
|
|
|
<div class="user_info_item" v-if="user.deptId == dept.id">
|
|
|
|
<!-- <img v-lazy="headSrc+user.headImgUrl" alt="" class="user_info_faceImg"> -->
|
|
|
|
<img v-lazy="user.headImgUrl | resolveAvator" alt="" class="user_info_faceImg">
|
|
|
|
<span class="user_info_name">{{user.cnName}}</span>
|
|
|
|
<el-popover placement="bottom-start" width="180" trigger="hover">
|
|
|
|
<ul class="popover_ul popover_ul">
|
|
|
@@ -478,7 +481,7 @@ |
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div> -->
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
@@ -506,9 +509,10 @@ |
|
|
|
handleCheckItemAll(group_index, $event)
|
|
|
|
">全选</el-checkbox>
|
|
|
|
</template>
|
|
|
|
<div class="user_info_item" v-for="(user, index) in listUserStaff(
|
|
|
|
<!-- <div class="user_info_item" v-for="(user, index) in listUserStaff(
|
|
|
|
dept.listUser
|
|
|
|
)" :label="user" :key="index">
|
|
|
|
)" :label="user" :key="index"> -->
|
|
|
|
<div class="user_info_item" v-for="(user, index) in dept.listUser" :label="user" :key="index">
|
|
|
|
<el-checkbox class="checkBoxCol" v-model="user.selected" @change="
|
|
|
|
handleCheckedOne(group_index, user, $event)
|
|
|
|
" :disabled="disabled">
|
|
|
@@ -558,37 +562,37 @@ |
|
|
|
<span>工作负责人</span>
|
|
|
|
<div class="yiyun_line"></div>
|
|
|
|
<!-- 项目负责人选择前 -->
|
|
|
|
<div class="main_workerBox" v-if="listManagerComputed(selectedUser).length == 0">
|
|
|
|
<!-- <div class="main_workerBox" v-if="listManagerComputed(selectedUser).length == 0"> -->
|
|
|
|
<div class="main_workerBox" v-if="selectedUser.length == 0">
|
|
|
|
<i class="icon font_family icon-icon_huangguan-weijihuo largehuangguan"></i>
|
|
|
|
<div class="rentou_alrge"></div>
|
|
|
|
</div>
|
|
|
|
<!-- 项目负责人选择后 -->
|
|
|
|
<div v-if="listManagerComputed(selectedUser).length != 0">
|
|
|
|
<div class="user_info_item mainpeople_H" v-for="(user, index) in listManagerComputed(
|
|
|
|
<!-- <div v-if="listManagerComputed(selectedUser).length != 0"> -->
|
|
|
|
<div v-if="selectedUser.length != 0">
|
|
|
|
<!-- <div class="user_info_item mainpeople_H" v-for="(user, index) in listManagerComputed(
|
|
|
|
selectedUser
|
|
|
|
)" :key="index">
|
|
|
|
)" :key="index"> -->
|
|
|
|
<div class="user_info_item mainpeople_H" v-for="(user, index) in selectedUser" :key="index">
|
|
|
|
<i class="icon font_family icon-icon_huangguan-jihuo middlehuangguan fl" title="负责人"></i>
|
|
|
|
<!-- <img v-lazy="headSrc + user.headImgUrl" alt="" class="user_info_faceImg" /> -->
|
|
|
|
<img :src="user.headImgUrl | resolveAvator" alt="" class="user_info_faceImg" />
|
|
|
|
<img :src="user.headImgUrl | resolveAvator" alt="" class="user_info_faceImg" />
|
|
|
|
<span class="user_info_name">{{ user.cnName }}</span>
|
|
|
|
<el-popover placement="bottom-start" width="180" trigger="hover">
|
|
|
|
<ul class="popover_ul popover_ul">
|
|
|
|
<li>
|
|
|
|
<a href="javascript:;">{{ user.roleName }}</a>
|
|
|
|
</li>
|
|
|
|
<li>
|
|
|
|
<a href="javascript:;">{{ user.phone }}</a>
|
|
|
|
</li>
|
|
|
|
<li>
|
|
|
|
<a href="javascript:;">所在项目{{ user.projCount }}个</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
<span class="user_info_job" slot="reference">{{
|
|
|
|
user.position
|
|
|
|
}}</span>
|
|
|
|
</el-popover>
|
|
|
|
<span class="user_info_role" @click="removeManageUser(user)">修改
|
|
|
|
</span>
|
|
|
|
<el-popover placement="bottom-start" width="180" trigger="hover">
|
|
|
|
<ul class="popover_ul popover_ul">
|
|
|
|
<li>
|
|
|
|
<a href="javascript:;">{{ user.roleName }}</a>
|
|
|
|
</li>
|
|
|
|
<li>
|
|
|
|
<a href="javascript:;">{{ user.phone }}</a>
|
|
|
|
</li>
|
|
|
|
<li>
|
|
|
|
<a href="javascript:;">所在项目{{ user.projCount }}个</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
<span class="user_info_job" slot="reference">{{user.position}}</span>
|
|
|
|
</el-popover>
|
|
|
|
<span class="user_info_role" @click="removeManageUser(user)">修改</span>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<p class="diaTip">
|
|
|
@@ -598,15 +602,15 @@ |
|
|
|
</p>
|
|
|
|
</div>
|
|
|
|
<div v-if="isShowStaffList">
|
|
|
|
<div class="row_painfr" v-for="dept in listDept" v-show="dept.listUser.length > 0" :key="dept.deptID">
|
|
|
|
<div class="row_painfr" v-for="dept in listDept" v-show="dept.listUser.length > 0" :key="dept.id">
|
|
|
|
<div v-for="deptID in listDeptUserNoZero(selectedUser)" :key="deptID">
|
|
|
|
<div v-if="deptID == dept.deptID">
|
|
|
|
<div v-if="deptID == dept.id">
|
|
|
|
<div class="yiyun_line"></div>
|
|
|
|
<span>{{ dept.deptName }}</span>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="renyuanbox" v-for="(user, index) in listUserComputed(selectedUser)" :key="index">
|
|
|
|
<div class="user_info_item" v-if="user.deptID == dept.deptID">
|
|
|
|
<div class="user_info_item" v-if="user.deptId == dept.id">
|
|
|
|
<!-- <img v-lazy="headSrc + user.headImgUrl" alt="" class="user_info_faceImg" /> -->
|
|
|
|
<img :src="user.headImgUrl | resolveAvator" alt="" class="user_info_faceImg" />
|
|
|
|
<span class="user_info_name">{{ user.cnName }}</span>
|
|
|
@@ -658,7 +662,7 @@ |
|
|
|
</template>
|
|
|
|
|
|
|
|
<script>
|
|
|
|
import { getUserInfo,roleOptions,fetchAddressBook,getUserListByNode,roleMap,stateOptions} from '@/services/user.js';
|
|
|
|
import { getUserInfo,roleOptions,fetchDeptList,getUserListByNode,roleMap,stateOptions} from '@/services/user.js';
|
|
|
|
import { fetchApi } from '@/utils/request';
|
|
|
|
import { firstCharToLowerCase, firstCharToUpperCase } from '@/utils/tool';
|
|
|
|
|
|
|
@@ -1028,7 +1032,8 @@ export default { |
|
|
|
this.listDept[j].listUser[k].selected = false;
|
|
|
|
for (var i = 0; i < data.listUser.length; i++) {
|
|
|
|
if (
|
|
|
|
this.listDept[j].listUser[k].userID == data.listUser[i].userID
|
|
|
|
// this.listDept[j].listUser[k].userID == data.listUser[i].userID
|
|
|
|
this.listDept[j].listUser[k].id == data.listUser[i].id
|
|
|
|
) {
|
|
|
|
this.listDept[j].listUser[k].folderPerm =
|
|
|
|
data.listUser[i].folderPerm;
|
|
|
@@ -1036,7 +1041,8 @@ export default { |
|
|
|
}
|
|
|
|
if(!this.isShowManager)
|
|
|
|
{
|
|
|
|
if(this.currUser.userID == sessionStorage.userId && sessionStorage.userId == this.listDept[j].listUser[k].userID )
|
|
|
|
// if(this.currUser.accountId == sessionStorage.userId && sessionStorage.accountId == this.listDept[j].listUser[k].userID )
|
|
|
|
if(this.currUser.accountId == sessionStorage.userId && sessionStorage.accountId == this.listDept[j].listUser[k].id)
|
|
|
|
{
|
|
|
|
this.listDept[j].listUser[k].selected = true;
|
|
|
|
}
|
|
|
@@ -1100,15 +1106,6 @@ export default { |
|
|
|
this.selectedManageUser = [];
|
|
|
|
this.isShowThreePage = true;
|
|
|
|
this.isShowFirstPage = false;
|
|
|
|
|
|
|
|
// this.fetchPlainDeptUserList(this.$store.state.currentCompanyId).then(list => {
|
|
|
|
// this.listDept = list;
|
|
|
|
// this.listDept = [...this.listDept];
|
|
|
|
// console.log('1111111111111111111111111',this.listDept);
|
|
|
|
// }).catch(err => {
|
|
|
|
// console.log(err);
|
|
|
|
// })
|
|
|
|
// this.selectedUser = this.newProjData.projectData.listProjManager;
|
|
|
|
},
|
|
|
|
/*
|
|
|
|
*顶部全选
|
|
|
@@ -1118,7 +1115,7 @@ export default { |
|
|
|
//首级全选
|
|
|
|
for (var j = 0; j < this.listDept.length; j++) {
|
|
|
|
if (this.listDept[j].listUser.length > 0) {
|
|
|
|
this.handleCheckItemAll(j, false); //清除已经被选中的状态
|
|
|
|
// this.handleCheckItemAll(j, false); //清除已经被选中的状态
|
|
|
|
this.handleCheckItemAll(j, e);
|
|
|
|
}
|
|
|
|
}
|
|
|
@@ -1147,18 +1144,18 @@ export default { |
|
|
|
handleCheckedOne(topIndex, user, e) {
|
|
|
|
if(!this.isShowManager)
|
|
|
|
{
|
|
|
|
if(user.userID == sessionStorage.userId)
|
|
|
|
{
|
|
|
|
this.$notify.info({
|
|
|
|
title: "温馨提示",
|
|
|
|
message: "不能移除自己哦",
|
|
|
|
offset: 100,
|
|
|
|
duration: 5000
|
|
|
|
});
|
|
|
|
user.selected=true;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if(user.userID == this.currUser.userID)
|
|
|
|
// if(user.userID == sessionStorage.userId)
|
|
|
|
// {
|
|
|
|
// this.$notify.info({
|
|
|
|
// title: "温馨提示",
|
|
|
|
// message: "不能移除自己哦",
|
|
|
|
// offset: 100,
|
|
|
|
// duration: 5000
|
|
|
|
// });
|
|
|
|
// user.selected=true;
|
|
|
|
// return;
|
|
|
|
// }
|
|
|
|
if(user.id == this.currUser.accountId)
|
|
|
|
{
|
|
|
|
this.$notify.info({
|
|
|
|
title: "温馨提示",
|
|
|
@@ -1240,7 +1237,7 @@ export default { |
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (checkCount == haveDataCount) {
|
|
|
|
if ((checkCount == haveDataCount) && checkCount !== 0 && haveDataCount !== 0) {
|
|
|
|
this.ischeckAll = true;
|
|
|
|
} else {
|
|
|
|
this.ischeckAll = false;
|
|
|
@@ -1449,14 +1446,13 @@ export default { |
|
|
|
// });
|
|
|
|
// },
|
|
|
|
async fetchProjectDetail() {
|
|
|
|
const [userList, projectDataRes, treeDeptList] = await Promise.all([
|
|
|
|
const [userList, projectDataRes, deptList] = await Promise.all([
|
|
|
|
this.getUserList(),
|
|
|
|
this.$fetchApi('folder/queryNodeFolderListByProjectId', { projectId: sessionStorage.projId }),
|
|
|
|
fetchAddressBook(this.$store.state.currentCompanyId),
|
|
|
|
fetchDeptList(this.$store.state.currentCompanyId),
|
|
|
|
]);
|
|
|
|
|
|
|
|
const deptHeadList = treeDeptList[0].children || [];
|
|
|
|
const oList = this.plainTreeNodes(deptHeadList, userList);
|
|
|
|
// const deptHeadList = deptList[0].children || [];
|
|
|
|
const oList = this.plainTreeNodes(deptList, userList);
|
|
|
|
this.listDept = oList;
|
|
|
|
this.currListDeptUserData = oList;
|
|
|
|
|
|
|
@@ -1466,14 +1462,16 @@ export default { |
|
|
|
h[user.id] = user;
|
|
|
|
return h;
|
|
|
|
}, {});
|
|
|
|
this.listManagerUser = manager.map(u => userHash[u.Id]);
|
|
|
|
this.listManagerUser = manager.map(u => userHash[u.UserId]);
|
|
|
|
// debugger;
|
|
|
|
if(this.listManagerUser.length) {
|
|
|
|
this.currUser = this.listManagerUser[0];
|
|
|
|
this.currUser = this.listManagerUser[0] || {};
|
|
|
|
this.listManagerUser = this.listManagerUser.slice(1);
|
|
|
|
}
|
|
|
|
// todo folder, userList
|
|
|
|
const folderList = mergeFolderList(folder, userHash);
|
|
|
|
console.log(folderList);
|
|
|
|
this.listNewFolder = folderList;
|
|
|
|
},
|
|
|
|
async getUserList(){
|
|
|
|
const { list: userList } = await getUserListByNode({ id: this.$store.state.currentCompanyId, nodeType: 'company' }, 1, 10000);
|
|
|
@@ -1592,7 +1590,27 @@ export default { |
|
|
|
};
|
|
|
|
|
|
|
|
function mergeFolderList(plainFolderList, userHash) {
|
|
|
|
return [];
|
|
|
|
const [rootFolder, commonFolder, ...restFolderList] = plainFolderList;
|
|
|
|
const rootFolderId = rootFolder.Id;
|
|
|
|
const headList = [];
|
|
|
|
const hash = {};
|
|
|
|
restFolderList.forEach(upperFolder => {
|
|
|
|
const folder = firstCharToLowerCase(upperFolder);
|
|
|
|
hash[folder.id] = folder;
|
|
|
|
folder.listChildren = [];
|
|
|
|
folder.listUser = folder.oldGeneralId.split(',').filter(a => a);
|
|
|
|
folder.manageUser = (folder.oldManager === '0' ? '' : folder.oldManager).split(',').filter(a => a);
|
|
|
|
const parentFolderId = folder.superId;
|
|
|
|
// headList.push(folder);
|
|
|
|
if(parentFolderId === rootFolderId) {
|
|
|
|
headList.push(folder);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
const parentFolder = hash[parentFolderId];
|
|
|
|
if(!parentFolder) return;
|
|
|
|
parentFolder.listChildren.push(folder);
|
|
|
|
});
|
|
|
|
return headList;
|
|
|
|
}
|
|
|
|
</script>
|
|
|
|
<style scoped lang="scss">
|
|
|
|