mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-27 15:54:39 +00:00
Merge branch 'master' into 13.0
This commit is contained in:
@@ -22,7 +22,7 @@
|
|||||||
.dir-content-nav {
|
.dir-content-nav {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
width: 24%;
|
width: 25%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dir-content-nav:hover {
|
.dir-content-nav:hover {
|
||||||
@@ -45,43 +45,45 @@
|
|||||||
.tree-node-inner {
|
.tree-node-inner {
|
||||||
position: relative;
|
position: relative;
|
||||||
display: flex;
|
display: flex;
|
||||||
padding-right: 1rem;
|
padding-right: 0.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tree-node-inner i {
|
.tree-node-inner .sf3-font-down {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 20%;
|
top: 15%;
|
||||||
left: 0.3rem;
|
left: 0.3rem;
|
||||||
color: #999;
|
color: #999;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tree-node-inner-hover {
|
.tree-node-inner-hover {
|
||||||
background-color: #FFEFB2;
|
background-color: #f0f0f0;
|
||||||
border-radius: 0.25rem;
|
border-radius: 0.25rem;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tree-node-hight-light {
|
.tree-node-hight-light {
|
||||||
color: #fff;
|
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
background-color: #feac74 !important;
|
background-color: #f5f5f5 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tree-node-hight-light i {
|
.tree-node-hight-light::before {
|
||||||
color: #fff;
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
display: block;
|
||||||
|
width: 4px;
|
||||||
|
left: -8px;
|
||||||
|
top: 2px;
|
||||||
|
bottom: 2px;
|
||||||
|
border-radius: 2px;
|
||||||
|
background-color: #ff9800;
|
||||||
|
z-index: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tree-node-hight-light .attr-action-icon,
|
.tree-view .tree-node-icon {
|
||||||
.tree-node-hight-light .attr-action-icon:focus,
|
|
||||||
.tree-node-hight-light .attr-action-icon:hover {
|
|
||||||
color: #fff !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tree-node-icon {
|
|
||||||
padding-right: 1.5rem;
|
padding-right: 1.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tree-node-text {
|
.tree-view .tree-node-text {
|
||||||
width: calc(100% - 2.5rem);
|
width: calc(100% - 2.5rem);
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
@@ -90,7 +92,18 @@
|
|||||||
line-height: 24px;
|
line-height: 24px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tree-view {
|
.tree-view .dropdown .right-icon {
|
||||||
padding: 12px 12px 12px 0;
|
width: 20px;
|
||||||
flex: 1 1;
|
height: 20px;
|
||||||
|
border-radius: 3px;
|
||||||
|
cursor: pointer;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
color: #666;
|
||||||
|
margin-top: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tree-view .dropdown .right-icon:hover {
|
||||||
|
background-color: #dbdbdb;
|
||||||
}
|
}
|
||||||
|
@@ -22,7 +22,7 @@
|
|||||||
.dir-content-nav {
|
.dir-content-nav {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
width: 24%;
|
width: 25%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dir-content-nav:hover {
|
.dir-content-nav:hover {
|
||||||
@@ -45,43 +45,45 @@
|
|||||||
.tree-node-inner {
|
.tree-node-inner {
|
||||||
position: relative;
|
position: relative;
|
||||||
display: flex;
|
display: flex;
|
||||||
padding-right: 1rem;
|
padding-right: 0.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tree-node-inner i {
|
.tree-node-inner .sf3-font-down {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 20%;
|
top: 15%;
|
||||||
left: 0.3rem;
|
left: 0.3rem;
|
||||||
color: #999;
|
color: #999;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tree-node-inner-hover {
|
.tree-node-inner-hover {
|
||||||
background-color: #FFEFB2;
|
background-color: #f0f0f0;
|
||||||
border-radius: 0.25rem;
|
border-radius: 0.25rem;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tree-node-hight-light {
|
.tree-node-hight-light {
|
||||||
color: #fff;
|
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
background-color: #feac74 !important;
|
background-color: #f5f5f5 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tree-node-hight-light i {
|
.tree-node-hight-light::before {
|
||||||
color: #fff;
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
display: block;
|
||||||
|
width: 4px;
|
||||||
|
left: -8px;
|
||||||
|
top: 2px;
|
||||||
|
bottom: 2px;
|
||||||
|
border-radius: 2px;
|
||||||
|
background-color: #ff9800;
|
||||||
|
z-index: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tree-node-hight-light .attr-action-icon,
|
.tree-view .tree-node-icon {
|
||||||
.tree-node-hight-light .attr-action-icon:focus,
|
|
||||||
.tree-node-hight-light .attr-action-icon:hover {
|
|
||||||
color: #fff !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tree-node-icon {
|
|
||||||
padding-right: 1.5rem;
|
padding-right: 1.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tree-node-text {
|
.tree-view .tree-node-text {
|
||||||
width: calc(100% - 2.5rem);
|
width: calc(100% - 2.5rem);
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
@@ -90,7 +92,18 @@
|
|||||||
line-height: 24px;
|
line-height: 24px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tree-view {
|
.tree-view .dropdown .right-icon {
|
||||||
padding: 12px 12px 12px 0;
|
width: 20px;
|
||||||
flex: 1 1;
|
height: 20px;
|
||||||
|
border-radius: 3px;
|
||||||
|
cursor: pointer;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
color: #666;
|
||||||
|
margin-top: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tree-view .dropdown .right-icon:hover {
|
||||||
|
background-color: #dbdbdb;
|
||||||
}
|
}
|
||||||
|
@@ -60,6 +60,10 @@ class DingtalkDepartments extends Component {
|
|||||||
|
|
||||||
getDingtalkDepartmentsList = (departmentID) => {
|
getDingtalkDepartmentsList = (departmentID) => {
|
||||||
systemAdminAPI.sysAdminListDingtalkDepartments(departmentID).then((res) => {
|
systemAdminAPI.sysAdminListDingtalkDepartments(departmentID).then((res) => {
|
||||||
|
if (!res.data.department && res.data.errmsg) {
|
||||||
|
toaster.danger(res.data.errmsg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (!departmentID) {
|
if (!departmentID) {
|
||||||
let departmentsTree = this.getDepartmentsTree(res.data.department);
|
let departmentsTree = this.getDepartmentsTree(res.data.department);
|
||||||
this.setState({
|
this.setState({
|
||||||
@@ -302,7 +306,7 @@ class DingtalkDepartments extends Component {
|
|||||||
<div className="cur-view-path">
|
<div className="cur-view-path">
|
||||||
<h3 className="sf-heading">{'钉钉集成'}</h3>
|
<h3 className="sf-heading">{'钉钉集成'}</h3>
|
||||||
</div>
|
</div>
|
||||||
<div className="cur-view-content d-flex flex-row">
|
<div className="cur-view-content d-flex flex-row p-0">
|
||||||
<DingtalkDepartmentsTreePanel
|
<DingtalkDepartmentsTreePanel
|
||||||
departmentsTree={this.state.departmentsTree}
|
departmentsTree={this.state.departmentsTree}
|
||||||
isTreeLoading={this.state.isTreeLoading}
|
isTreeLoading={this.state.isTreeLoading}
|
||||||
|
@@ -115,13 +115,14 @@ class DingtalkDepartmentsTreeNode extends Component {
|
|||||||
style={this.state.active ? {} : { opacity: 0 }}
|
style={this.state.active ? {} : { opacity: 0 }}
|
||||||
>
|
>
|
||||||
<DropdownToggle
|
<DropdownToggle
|
||||||
tag='i'
|
tag='span'
|
||||||
className='sf3-font sf3-font-more-vertical cursor-pointer attr-action-icon'
|
className='cursor-pointer right-icon'
|
||||||
title={gettext('More operations')}
|
title={gettext('More operations')}
|
||||||
aria-label={gettext('More operations')}
|
aria-label={gettext('More operations')}
|
||||||
data-toggle="dropdown"
|
data-toggle="dropdown"
|
||||||
aria-expanded={this.state.dropdownOpen}
|
aria-expanded={this.state.dropdownOpen}
|
||||||
>
|
>
|
||||||
|
<i className="sf3-font sf3-font-more"></i>
|
||||||
</DropdownToggle>
|
</DropdownToggle>
|
||||||
<DropdownMenu className="drop-list">
|
<DropdownMenu className="drop-list">
|
||||||
<DropdownItem
|
<DropdownItem
|
||||||
|
@@ -12,19 +12,14 @@ const DingtalkDepartmentsTreePanelPropTypes = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
class DingtalkDepartmentsTreePanel extends Component {
|
class DingtalkDepartmentsTreePanel extends Component {
|
||||||
|
|
||||||
constructor(props) {
|
|
||||||
super(props);
|
|
||||||
}
|
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { departmentsTree } = this.props;
|
const { departmentsTree } = this.props;
|
||||||
return (
|
return (
|
||||||
<div className="dir-content-nav">
|
<div className="dir-content-nav">
|
||||||
<div className="tree-view tree">
|
<div className="tree-view p-4">
|
||||||
{this.props.isTreeLoading ?
|
{this.props.isTreeLoading ?
|
||||||
<Loading/> :
|
<Loading/> :
|
||||||
<div className="tree-node">
|
<>
|
||||||
{departmentsTree.length > 0 && departmentsTree.map((department, index) => {
|
{departmentsTree.length > 0 && departmentsTree.map((department, index) => {
|
||||||
return (
|
return (
|
||||||
<DingtalkDepartmentsTreeNode
|
<DingtalkDepartmentsTreeNode
|
||||||
@@ -38,7 +33,7 @@ class DingtalkDepartmentsTreePanel extends Component {
|
|||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
</div>
|
</>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -59,6 +59,10 @@ class WorkWeixinDepartments extends Component {
|
|||||||
|
|
||||||
getWorkWeixinDepartmentsList = (departmentID) => {
|
getWorkWeixinDepartmentsList = (departmentID) => {
|
||||||
systemAdminAPI.sysAdminListWorkWeixinDepartments(departmentID).then((res) => {
|
systemAdminAPI.sysAdminListWorkWeixinDepartments(departmentID).then((res) => {
|
||||||
|
if (!res.data.department && res.data.errmsg) {
|
||||||
|
toaster.danger(res.data.errmsg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (!departmentID) {
|
if (!departmentID) {
|
||||||
let departmentsTree = this.getDepartmentsTree(res.data.department);
|
let departmentsTree = this.getDepartmentsTree(res.data.department);
|
||||||
this.setState({
|
this.setState({
|
||||||
@@ -302,7 +306,7 @@ class WorkWeixinDepartments extends Component {
|
|||||||
<div className="cur-view-path">
|
<div className="cur-view-path">
|
||||||
<h3 className="sf-heading">{'企业微信集成'}</h3>
|
<h3 className="sf-heading">{'企业微信集成'}</h3>
|
||||||
</div>
|
</div>
|
||||||
<div className="cur-view-content d-flex flex-row">
|
<div className="cur-view-content d-flex flex-row p-0">
|
||||||
<WorkWeixinDepartmentsTreePanel
|
<WorkWeixinDepartmentsTreePanel
|
||||||
departmentsTree={this.state.departmentsTree}
|
departmentsTree={this.state.departmentsTree}
|
||||||
isTreeLoading={this.state.isTreeLoading}
|
isTreeLoading={this.state.isTreeLoading}
|
||||||
|
@@ -115,13 +115,14 @@ class WorkWeixinDepartmentsTreeNode extends Component {
|
|||||||
style={this.state.active ? {} : { opacity: 0 }}
|
style={this.state.active ? {} : { opacity: 0 }}
|
||||||
>
|
>
|
||||||
<DropdownToggle
|
<DropdownToggle
|
||||||
tag='i'
|
tag='span'
|
||||||
className='sf3-font sf3-font-more-vertical cursor-pointer attr-action-icon'
|
className='cursor-pointer right-icon'
|
||||||
title={gettext('More operations')}
|
title={gettext('More operations')}
|
||||||
aria-label={gettext('More operations')}
|
aria-label={gettext('More operations')}
|
||||||
data-toggle="dropdown"
|
data-toggle="dropdown"
|
||||||
aria-expanded={this.state.dropdownOpen}
|
aria-expanded={this.state.dropdownOpen}
|
||||||
>
|
>
|
||||||
|
<i className="sf3-font sf3-font-more"></i>
|
||||||
</DropdownToggle>
|
</DropdownToggle>
|
||||||
<DropdownMenu className="drop-list">
|
<DropdownMenu className="drop-list">
|
||||||
<DropdownItem
|
<DropdownItem
|
||||||
|
@@ -12,19 +12,14 @@ const WorkWeixinDepartmentsTreePanelPropTypes = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
class WorkWeixinDepartmentsTreePanel extends Component {
|
class WorkWeixinDepartmentsTreePanel extends Component {
|
||||||
|
|
||||||
constructor(props) {
|
|
||||||
super(props);
|
|
||||||
}
|
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { departmentsTree } = this.props;
|
const { departmentsTree } = this.props;
|
||||||
return (
|
return (
|
||||||
<div className="dir-content-nav">
|
<div className="dir-content-nav">
|
||||||
<div className="tree-view tree">
|
<div className="tree-view p-4">
|
||||||
{this.props.isTreeLoading ?
|
{this.props.isTreeLoading ?
|
||||||
<Loading/> :
|
<Loading/> :
|
||||||
<div className="tree-node">
|
<>
|
||||||
{departmentsTree.length > 0 && departmentsTree.map((department, index) => {
|
{departmentsTree.length > 0 && departmentsTree.map((department, index) => {
|
||||||
return (
|
return (
|
||||||
<WorkWeixinDepartmentsTreeNode
|
<WorkWeixinDepartmentsTreeNode
|
||||||
@@ -38,7 +33,7 @@ class WorkWeixinDepartmentsTreePanel extends Component {
|
|||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
</div>
|
</>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -18,5 +18,5 @@ CREATE TABLE IF NOT EXISTS OrgUploadRateLimit (
|
|||||||
UNIQUE INDEX(org_id)
|
UNIQUE INDEX(org_id)
|
||||||
) ENGINE=INNODB;
|
) ENGINE=INNODB;
|
||||||
|
|
||||||
ALTER TABLE RepoInfo ADD COLUMN IF NOT EXISTS type varchar(10);
|
ALTER TABLE RepoInfo ADD COLUMN type varchar(10);
|
||||||
CREATE INDEX IF NOT EXISTS RepoInfoTypeIndex on RepoInfo (type);
|
CREATE INDEX RepoInfoTypeIndex on RepoInfo (type);
|
||||||
|
@@ -89,9 +89,9 @@ CREATE TABLE IF NOT EXISTS `wiki_wiki2_publish` (
|
|||||||
KEY `ix_wiki2_publish_repo_id` (`repo_id`)
|
KEY `ix_wiki2_publish_repo_id` (`repo_id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||||
|
|
||||||
ALTER TABLE share_fileshare ADD COLUMN IF NOT EXISTS `user_scope` varchar(225) DEFAULT 'all_users';
|
ALTER TABLE share_fileshare ADD COLUMN `user_scope` varchar(225) DEFAULT 'all_users';
|
||||||
ALTER TABLE share_fileshare ADD COLUMN IF NOT EXISTS `authed_details` LONGTEXT DEFAULT NULL;
|
ALTER TABLE share_fileshare ADD COLUMN `authed_details` LONGTEXT DEFAULT NULL;
|
||||||
ALTER TABLE share_fileshare ADD INDEX IF NOT EXISTS `idx_ctime` (`ctime`);
|
ALTER TABLE share_fileshare ADD INDEX `idx_ctime` (`ctime`);
|
||||||
ALTER TABLE share_fileshare ADD INDEX IF NOT EXISTS `idx_view_cnt` (`view_cnt`);
|
ALTER TABLE share_fileshare ADD INDEX `idx_view_cnt` (`view_cnt`);
|
||||||
|
|
||||||
ALTER TABLE profile_profile ADD COLUMN IF NOT EXISTS `is_manually_set_contact_email` tinyint(1) DEFAULT 0;
|
ALTER TABLE profile_profile ADD COLUMN `is_manually_set_contact_email` tinyint(1) DEFAULT 0;
|
||||||
|
Reference in New Issue
Block a user