mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-08 02:10:24 +00:00
Share to user support select user from department (#7361)
* update * remove 'All users' in org user department * change style --------- Co-authored-by: lian <imwhatiam123@gmail.com>
This commit is contained in:
@@ -52,10 +52,10 @@ class Item extends Component {
|
|||||||
<td width="13%">
|
<td width="13%">
|
||||||
<input type="checkbox" className="vam" checked='checked' disabled/>
|
<input type="checkbox" className="vam" checked='checked' disabled/>
|
||||||
</td>
|
</td>
|
||||||
<td width="11%"><img className="avatar" src={member.avatar_url} alt=""/></td>
|
<td width="12%"><img className="avatar" src={member.avatar_url} alt=""/></td>
|
||||||
<td width="60%">{member.name}</td>
|
<td width="60%">{member.name}</td>
|
||||||
<td width="16%" className={this.state.highlight ? 'visible' : 'invisible' }>
|
<td width="15%" className={this.state.highlight ? 'visible' : 'invisible' } id={`no-select-${index}`}>
|
||||||
<i className="sf3-font-help sf3-font" id={`no-select-${index}`}></i>
|
<i className="sf3-font-help sf3-font"></i>
|
||||||
<Tooltip placement='bottom' isOpen={this.state.tooltipOpen} toggle={this.toggleTooltip} target={`no-select-${index}`} delay={{ show: 0, hide: 0 }} fade={false}>
|
<Tooltip placement='bottom' isOpen={this.state.tooltipOpen} toggle={this.toggleTooltip} target={`no-select-${index}`} delay={{ show: 0, hide: 0 }} fade={false}>
|
||||||
{tip}
|
{tip}
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
@@ -107,12 +107,7 @@ class DepartmentGroupMembers extends Component {
|
|||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { members, memberSelected, loading, selectedMemberMap, currentDepartment, usedFor } = this.props;
|
const { members, memberSelected, loading, selectedMemberMap, currentDepartment, usedFor } = this.props;
|
||||||
let headerTitle;
|
let headerTitle = (currentDepartment.name || '') + ' ' + gettext('members');
|
||||||
if (currentDepartment.id === -1) {
|
|
||||||
headerTitle = gettext('All users');
|
|
||||||
} else {
|
|
||||||
headerTitle = currentDepartment.name + ' ' + gettext('members');
|
|
||||||
}
|
|
||||||
if (loading) {
|
if (loading) {
|
||||||
return (
|
return (
|
||||||
<div className="department-dialog-member pt-4">
|
<div className="department-dialog-member pt-4">
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
import React, { Component } from 'react';
|
import React, { Component } from 'react';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import Loading from '../../../components/loading';
|
import Loading from '../../../components/loading';
|
||||||
import { gettext, isOrgContext } from '../../../utils/constants';
|
import { isOrgContext } from '../../../utils/constants';
|
||||||
|
|
||||||
const ItemPropTypes = {
|
const ItemPropTypes = {
|
||||||
department: PropTypes.object,
|
department: PropTypes.object,
|
||||||
@@ -30,7 +30,7 @@ class Item extends Component {
|
|||||||
renderSubDepartments = () => {
|
renderSubDepartments = () => {
|
||||||
const { departments } = this.props;
|
const { departments } = this.props;
|
||||||
return (
|
return (
|
||||||
<div style={{ paddingLeft: '10px' }}>
|
<div>
|
||||||
{departments.map((department, index) => {
|
{departments.map((department, index) => {
|
||||||
if (department.parent_group_id !== this.props.department.id) return null;
|
if (department.parent_group_id !== this.props.department.id) return null;
|
||||||
return (
|
return (
|
||||||
@@ -43,6 +43,7 @@ class Item extends Component {
|
|||||||
toggleExpanded={this.props.toggleExpanded}
|
toggleExpanded={this.props.toggleExpanded}
|
||||||
currentDepartment={this.props.currentDepartment}
|
currentDepartment={this.props.currentDepartment}
|
||||||
allMembersClick={this.props.allMembersClick}
|
allMembersClick={this.props.allMembersClick}
|
||||||
|
padding={this.props.padding + 10}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
@@ -56,12 +57,12 @@ class Item extends Component {
|
|||||||
const { hasChild, isExpanded } = department;
|
const { hasChild, isExpanded } = department;
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<div className={isCurrent ? 'tr-highlight group-item' : 'group-item'} onClick={this.getMembers}>
|
<div className={isCurrent ? 'tr-highlight group-item' : 'group-item'} onClick={this.getMembers} style={{ paddingLeft: `${this.props.padding}px` }}>
|
||||||
{hasChild &&
|
{hasChild &&
|
||||||
<span
|
<span
|
||||||
className={`sf3-font sf3-font-down ${isExpanded ? '' : 'rotate-270'} d-inline-block`}
|
className={`sf3-font sf3-font-down ${isExpanded ? '' : 'rotate-270'} d-inline-block`}
|
||||||
onClick={this.toggleExpanded}
|
onClick={this.toggleExpanded}
|
||||||
style={{ color: isCurrent ? '#fff' : '#999', fontSize: '12px' }}
|
style={{ color: '#666' }}
|
||||||
>
|
>
|
||||||
</span>
|
</span>
|
||||||
}
|
}
|
||||||
@@ -112,19 +113,9 @@ class DepartmentGroup extends Component {
|
|||||||
if (loading) {
|
if (loading) {
|
||||||
return (<Loading/>);
|
return (<Loading/>);
|
||||||
}
|
}
|
||||||
const { allMembersClick } = this.state;
|
|
||||||
return (
|
return (
|
||||||
<div className="department-dialog-group">
|
<div className="department-dialog-group">
|
||||||
<div>
|
<div>
|
||||||
{isOrgContext &&
|
|
||||||
<div className={allMembersClick ? 'tr-highlight group-item' : 'group-item'}>
|
|
||||||
<span
|
|
||||||
className={'pr-2'}
|
|
||||||
style={{ color: allMembersClick ? '#fff' : '#999', fontSize: '12px' }}
|
|
||||||
/>
|
|
||||||
<span>{gettext('All users')}</span>
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
{departments.length > 0 && departments.map((department, index) => {
|
{departments.length > 0 && departments.map((department, index) => {
|
||||||
if (department.parent_group_id !== -1) return null;
|
if (department.parent_group_id !== -1) return null;
|
||||||
return (
|
return (
|
||||||
@@ -137,6 +128,7 @@ class DepartmentGroup extends Component {
|
|||||||
toggleExpanded={this.toggleExpanded}
|
toggleExpanded={this.toggleExpanded}
|
||||||
currentDepartment={this.props.currentDepartment}
|
currentDepartment={this.props.currentDepartment}
|
||||||
allMembersClick={this.state.allMembersClick}
|
allMembersClick={this.state.allMembersClick}
|
||||||
|
padding={10}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
|
@@ -1,129 +0,0 @@
|
|||||||
.department-dialog .department-dialog-content {
|
|
||||||
padding: 0;
|
|
||||||
min-height: 30rem;
|
|
||||||
display: flex;
|
|
||||||
overflow: hidden;
|
|
||||||
flex-wrap: nowrap;
|
|
||||||
align-content: space-between;
|
|
||||||
justify-content: space-between;
|
|
||||||
flex-direction: row;
|
|
||||||
}
|
|
||||||
|
|
||||||
.department-dialog .department-dialog-content > div {
|
|
||||||
max-height: calc(100vh - 120px);
|
|
||||||
overflow-y: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.department-dialog-content .department-dialog-group {
|
|
||||||
flex: 0 0 35%;
|
|
||||||
padding: 1rem;
|
|
||||||
border-right: 1px solid #eee;
|
|
||||||
}
|
|
||||||
|
|
||||||
.department-dialog-content .department-dialog-member {
|
|
||||||
display: flex;
|
|
||||||
flex: 0 0 35%;
|
|
||||||
border-right: 1px solid #eee;
|
|
||||||
}
|
|
||||||
|
|
||||||
.department-dialog-content .department-dialog-member-selected {
|
|
||||||
display: flex;
|
|
||||||
flex: 0 0 65%;
|
|
||||||
border-right: 1px solid #eee;
|
|
||||||
flex-direction: column;
|
|
||||||
justify-content: space-between;
|
|
||||||
}
|
|
||||||
|
|
||||||
.department-dialog-content .department-dialog-member-selected .modal-footer {
|
|
||||||
border-top: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.department-dialog-content .department-dialog-group .group-item {
|
|
||||||
cursor: pointer;
|
|
||||||
padding: 5px;
|
|
||||||
border-radius: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.department-dialog-content .department-dialog-group .group-item:hover {
|
|
||||||
background-color: #f5f5f5;
|
|
||||||
}
|
|
||||||
|
|
||||||
.department-dialog-content .department-dialog-group .group-item.tr-highlight:hover,
|
|
||||||
.department-dialog-content .department-dialog-group .tr-highlight {
|
|
||||||
background-color: #ED7109;
|
|
||||||
color: #ffffff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.department-dialog-member-head {
|
|
||||||
display: flex;
|
|
||||||
padding: 0 0 12px 0;
|
|
||||||
justify-content: space-between;
|
|
||||||
}
|
|
||||||
|
|
||||||
.department-dialog-member-head .department-name {
|
|
||||||
font-size: 0.8125rem;
|
|
||||||
color: #666;
|
|
||||||
}
|
|
||||||
|
|
||||||
.department-dialog-member-head .select-all {
|
|
||||||
cursor: pointer;
|
|
||||||
font-size: 0.8125rem;
|
|
||||||
color: #ED7109;
|
|
||||||
}
|
|
||||||
|
|
||||||
.department-dialog-member-head .select-all-disable {
|
|
||||||
font-size: 0.8125rem;
|
|
||||||
color: rgb(248, 205, 160);
|
|
||||||
}
|
|
||||||
|
|
||||||
.department-dialog-member-table td,
|
|
||||||
.department-dialog-member-head td {
|
|
||||||
border: none;
|
|
||||||
text-align: left;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.department-dialog-member-table {
|
|
||||||
display: block;
|
|
||||||
text-align: center;
|
|
||||||
max-height: calc(100% - 32px);
|
|
||||||
overflow-y: auto;
|
|
||||||
-webkit-overflow-scrolling: touch;
|
|
||||||
}
|
|
||||||
|
|
||||||
.department-dialog-member-table tr {
|
|
||||||
display: table;
|
|
||||||
width: 100%;
|
|
||||||
table-layout: fixed;
|
|
||||||
height: 36px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.department-dialog-content .avatar {
|
|
||||||
width: 24px;
|
|
||||||
height: 24px;
|
|
||||||
line-height: 24px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.department-dialog-content tr td:first-child {
|
|
||||||
padding-left: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.department-dialog-member-table tr td:first-child {
|
|
||||||
padding-bottom: 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tooltip-inner {
|
|
||||||
font-size: 13px;
|
|
||||||
font-weight: lighter;
|
|
||||||
text-align: justify;
|
|
||||||
color: #fff;
|
|
||||||
background-color: #303133;
|
|
||||||
}
|
|
||||||
|
|
||||||
.department-dialog-member-selected tr td:last-child {
|
|
||||||
padding-right: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.department-dialog-member-selected .modal-footer .btn {
|
|
||||||
min-width: 80px;
|
|
||||||
}
|
|
@@ -9,7 +9,7 @@
|
|||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
}
|
}
|
||||||
|
|
||||||
.department-dialog .department-dialog-content>div {
|
.department-dialog .department-dialog-content > div {
|
||||||
max-height: calc(100vh - 120px);
|
max-height: calc(100vh - 120px);
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
}
|
}
|
||||||
@@ -20,16 +20,6 @@
|
|||||||
border-right: 1px solid #eee;
|
border-right: 1px solid #eee;
|
||||||
}
|
}
|
||||||
|
|
||||||
.department-dialog-content .department-dialog-group .tr-highlight .dtable-icon-groups {
|
|
||||||
padding-right: 10px;
|
|
||||||
color: #ffffff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.department-dialog-content .department-dialog-group .dtable-icon-groups {
|
|
||||||
padding-right: 10px;
|
|
||||||
color: #9c9c9c;
|
|
||||||
}
|
|
||||||
|
|
||||||
.department-dialog-content .department-dialog-member {
|
.department-dialog-content .department-dialog-member {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex: 0 0 35%;
|
flex: 0 0 35%;
|
||||||
@@ -48,9 +38,9 @@
|
|||||||
border-top: none;
|
border-top: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.department-dialog-content .department-dialog-member-selected .dtable-icon-cancel {
|
.department-dialog-content .department-dialog-member-selected .sf3-font-close {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
color: #959595;
|
color: #666;
|
||||||
}
|
}
|
||||||
|
|
||||||
.department-dialog-content .department-dialog-group .group-item {
|
.department-dialog-content .department-dialog-group .group-item {
|
||||||
@@ -65,8 +55,22 @@
|
|||||||
|
|
||||||
.department-dialog-content .department-dialog-group .group-item.tr-highlight:hover,
|
.department-dialog-content .department-dialog-group .group-item.tr-highlight:hover,
|
||||||
.department-dialog-content .department-dialog-group .tr-highlight {
|
.department-dialog-content .department-dialog-group .tr-highlight {
|
||||||
background-color: #FF8000;
|
background-color: #f0f0f0;
|
||||||
color: #ffffff;
|
color: inherit;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.department-dialog-content .department-dialog-group .group-item.tr-highlight::before {
|
||||||
|
content: '';
|
||||||
|
display: block;
|
||||||
|
width: 4px;
|
||||||
|
background-color: #ff9800;
|
||||||
|
border-radius: 2px;
|
||||||
|
position: absolute;
|
||||||
|
top: 4px;
|
||||||
|
bottom: 4px;
|
||||||
|
left: -8px;
|
||||||
|
z-index: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.department-dialog-member-head {
|
.department-dialog-member-head {
|
||||||
@@ -77,13 +81,13 @@
|
|||||||
|
|
||||||
.department-dialog-member-head .department-name {
|
.department-dialog-member-head .department-name {
|
||||||
font-size: 0.8125rem;
|
font-size: 0.8125rem;
|
||||||
color: #9c9c9c;
|
color: #666;
|
||||||
}
|
}
|
||||||
|
|
||||||
.department-dialog-member-head .select-all {
|
.department-dialog-member-head .select-all {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
font-size: 0.8125rem;
|
font-size: 0.8125rem;
|
||||||
color: #ea7500;;
|
color: #ED7109;
|
||||||
}
|
}
|
||||||
|
|
||||||
.department-dialog-member-head .select-all-disable {
|
.department-dialog-member-head .select-all-disable {
|
||||||
@@ -104,6 +108,7 @@
|
|||||||
max-height: calc(100% - 32px);
|
max-height: calc(100% - 32px);
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
-webkit-overflow-scrolling: touch;
|
-webkit-overflow-scrolling: touch;
|
||||||
|
padding-bottom: 30px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.department-dialog-member-table tr {
|
.department-dialog-member-table tr {
|
||||||
@@ -115,6 +120,13 @@
|
|||||||
|
|
||||||
.department-dialog-member-table .sf3-font-help {
|
.department-dialog-member-table .sf3-font-help {
|
||||||
color: #999;
|
color: #999;
|
||||||
|
padding-right: 16px;
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.department-dialog-member-table .sf3-font-help:hover {
|
||||||
|
color: #666;
|
||||||
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
.department-dialog-member .empty-tip {
|
.department-dialog-member .empty-tip {
|
||||||
@@ -127,7 +139,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.department-dialog-member .empty-tip h2 {
|
.department-dialog-member .empty-tip h2 {
|
||||||
color: #999;
|
color: #666;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
font-size: 1rem;
|
font-size: 1rem;
|
||||||
}
|
}
|
||||||
@@ -146,22 +158,20 @@
|
|||||||
padding-bottom: 2px;
|
padding-bottom: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.department-dialog-member-table tr td .dtable-icon-use-help {
|
|
||||||
color: #bdbdbd;
|
|
||||||
}
|
|
||||||
|
|
||||||
.department-dialog-member-table tr td .dtable-icon-use-help:hover {
|
|
||||||
color: #888;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tooltip-inner {
|
.tooltip-inner {
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
font-weight: lighter;
|
font-weight: lighter;
|
||||||
text-align: justify;
|
text-align: justify;
|
||||||
color: #FFF;
|
color: #fff;
|
||||||
background-color: #303133;
|
background-color: #303133;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.bs-tooltip-top .arrow::before,
|
||||||
|
.bs-tooltip-auto[x-placement^="bottom"] .arrow::before,
|
||||||
|
.bs-tooltip-auto[x-placement^="top"] .arrow::before {
|
||||||
|
border-top-color: #303133;
|
||||||
|
}
|
||||||
|
|
||||||
.department-dialog-member-selected tr td:last-child {
|
.department-dialog-member-selected tr td:last-child {
|
||||||
padding-right: 16px;
|
padding-right: 16px;
|
||||||
}
|
}
|
||||||
|
@@ -92,12 +92,7 @@ class AddressBookDepartmentMembers(APIView):
|
|||||||
'''
|
'''
|
||||||
check if the department belongs to the org
|
check if the department belongs to the org
|
||||||
'''
|
'''
|
||||||
# TODO
|
return org_id == ccnet_api.get_org_id_by_group(department_id)
|
||||||
# owner = "%s@seafile_group" % department_id
|
|
||||||
# ws = Workspaces.objects.get_workspace_by_owner(owner)
|
|
||||||
# if ws and ws.org_id == org_id:
|
|
||||||
# return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
def get(self, request, department_id):
|
def get(self, request, department_id):
|
||||||
""" List members of a group in address book.
|
""" List members of a group in address book.
|
||||||
@@ -118,7 +113,6 @@ class AddressBookDepartmentMembers(APIView):
|
|||||||
members = ccnet_api.get_group_members(department_id)
|
members = ccnet_api.get_group_members(department_id)
|
||||||
for m in members:
|
for m in members:
|
||||||
member_info = get_address_book_group_memeber_info(m)
|
member_info = get_address_book_group_memeber_info(m)
|
||||||
# filter empty-user from bug that made an empty-group-owner when creating department
|
|
||||||
if m.user_name == '':
|
if m.user_name == '':
|
||||||
continue
|
continue
|
||||||
return_results.append(member_info)
|
return_results.append(member_info)
|
||||||
|
Reference in New Issue
Block a user