pull/34593/merge
Kerwin Bryant 2025-06-14 14:57:31 +08:00 committed by GitHub
commit 206ea9f112
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 79 additions and 0 deletions

View File

@ -2796,6 +2796,7 @@ teams = Teams
code = Code code = Code
lower_members = members lower_members = members
lower_repositories = repositories lower_repositories = repositories
all_teams = All Teams
create_new_team = New Team create_new_team = New Team
create_team = Create Team create_team = Create Team
org_desc = Description org_desc = Description

View File

@ -67,7 +67,13 @@ func Members(ctx *context.Context) {
ctx.ServerError("GetMembers", err) ctx.ServerError("GetMembers", err)
return return
} }
teams, err := organization.FindOrgTeams(ctx, org.ID)
if err != nil {
ctx.ServerError("GetOrgTeams", err)
return
}
ctx.Data["Page"] = pager ctx.Data["Page"] = pager
ctx.Data["Teams"] = teams
ctx.Data["Members"] = members ctx.Data["Members"] = members
ctx.Data["MembersIsPublicMember"] = membersIsPublic ctx.Data["MembersIsPublicMember"] = membersIsPublic
ctx.Data["MembersIsUserOrgOwner"] = organization.IsUserOrgOwner(ctx, members, org.ID) ctx.Data["MembersIsUserOrgOwner"] = organization.IsUserOrgOwner(ctx, members, org.ID)

View File

@ -4,6 +4,17 @@
<div class="ui container"> <div class="ui container">
{{template "base/alert" .}} {{template "base/alert" .}}
{{if .IsOrganizationOwner}}
<div class="flex-text-block tw-justify-end tw-gap-x-1 tw-gap-y-2 tw-mb-4">
<button class="ui primary button show-modal" data-modal="#add-member-to-team-modal"
>
{{svg "octicon-plus"}}
{{ctx.Locale.Tr "org.teams.add_team_member"}}
</button>
</div>
<div class="divider"></div>
{{end}}
<div class="flex-list"> <div class="flex-list">
{{range .Members}} {{range .Members}}
{{$isPublic := index $.MembersIsPublicMember .ID}} {{$isPublic := index $.MembersIsPublicMember .ID}}
@ -87,4 +98,38 @@
{{template "base/modal_actions_confirm" .}} {{template "base/modal_actions_confirm" .}}
</div> </div>
<div class="ui small modal" id="add-member-to-team-modal">
<div class="header">{{ctx.Locale.Tr "org.teams.add_team_member"}}</div>
<div class="content">
<form class="ui form ignore-dirty" method="post" data-action-base-link="{{$.OrgLink}}">
{{.CsrfTokenHtml}}
<div class="required field">
<label>{{ctx.Locale.Tr "org.teams"}}</label>
<div class="ui dropdown selection search team_add_member_team_search">
<input name="team" type="hidden">
{{svg "octicon-triangle-down" 14 "dropdown icon"}}
<div class="text"></div>
<div class="menu">
{{range .Teams}}
<div class="item" data-value="{{.LowerName}}">{{.Name}}</div>
{{end}}
</div>
</div>
</div>
<div class="required field">
<label>{{ctx.Locale.Tr "org.members"}}</label>
<div id="search-user-box" class="ui search">
<div class="ui input">
<input class="prompt" name="uname" placeholder="{{ctx.Locale.Tr "search.user_kind"}}" autocomplete="off" required>
</div>
</div>
</div>
<div class="actions">
<button class="ui cancel button">{{ctx.Locale.Tr "cancel"}}</button>
<button type="submit" class="ui primary button">{{ctx.Locale.Tr "save"}}</button>
</div>
</form>
</div>
</div>
{{template "base/footer" .}} {{template "base/footer" .}}

View File

@ -3,6 +3,19 @@
{{template "org/header" .}} {{template "org/header" .}}
<div class="ui container"> <div class="ui container">
{{template "base/alert" .}} {{template "base/alert" .}}
{{if or .IsOrganizationOwner .IsOrganizationMember}}
<div class="flex-text-block tw-justify-end tw-gap-x-1 tw-gap-y-2 tw-mb-4">
{{if .IsOrganizationOwner}}
<a class="ui primary button" href="{{.OrgLink}}/teams/new">{{svg "octicon-plus"}} {{ctx.Locale.Tr "org.create_new_team"}}</a>
{{end}}
{{if .IsOrganizationMember}}
<a class="ui primary button" href="{{.OrgLink}}/teams">{{svg "octicon-people"}} {{ctx.Locale.Tr "org.all_teams"}}</a>
{{end}}
</div>
{{end}}
{{if and .IsOrganizationOwner .IsOrganizationMember}}
<div class="divider"></div>
{{end}}
<div class="ui stackable grid"> <div class="ui stackable grid">
{{template "org/team/sidebar" .}} {{template "org/team/sidebar" .}}
<div class="ui ten wide column"> <div class="ui ten wide column">

View File

@ -3,6 +3,19 @@ import {fomanticQuery} from '../modules/fomantic/base.ts';
const {appSubUrl} = window.config; const {appSubUrl} = window.config;
function initOrgTeamAddMember() {
const modal = document.querySelector('#add-member-to-team-modal');
if (!modal) return;
const elDropdown = modal.querySelector('.team_add_member_team_search');
const form = elDropdown.closest('form');
const baseUrl = form.getAttribute('data-action-base-link');
const teamInput = form.querySelector<HTMLInputElement>('input[name=team]');
const onChangeTeam = function() {
form.setAttribute('action', `${baseUrl}/teams/${teamInput.value}/action/add`);
};
fomanticQuery(elDropdown).dropdown('setting', 'onChange', onChangeTeam);
}
function initOrgTeamSettings() { function initOrgTeamSettings() {
// on the page "page-content organization new team" // on the page "page-content organization new team"
const pageContent = document.querySelector('.page-content.organization.new.team'); const pageContent = document.querySelector('.page-content.organization.new.team');
@ -39,6 +52,7 @@ function initOrgTeamSearchRepoBox() {
export function initOrgTeam() { export function initOrgTeam() {
if (!document.querySelector('.page-content.organization')) return; if (!document.querySelector('.page-content.organization')) return;
initOrgTeamAddMember();
initOrgTeamSettings(); initOrgTeamSettings();
initOrgTeamSearchRepoBox(); initOrgTeamSearchRepoBox();
} }