修复无法添加成员到团队的问题

This commit is contained in:
jingrow 2025-11-18 04:55:24 +08:00
parent 21929ff21c
commit 0f3d164c6c
2 changed files with 49 additions and 45 deletions

View File

@ -14,7 +14,7 @@
> >
<template #body-content> <template #body-content>
<div class="space-y-4"> <div class="space-y-4">
<FormControl label="邮箱" v-model="email" /> <FormControl label="用户名" v-model="username" />
<div <div
v-if="$resources.roles.data?.length > 0" v-if="$resources.roles.data?.length > 0"
class="flex items-center space-x-2" class="flex items-center space-x-2"
@ -60,13 +60,11 @@
<script> <script>
import { toast } from 'vue-sonner'; import { toast } from 'vue-sonner';
import { DashboardError } from '../../utils/error';
import { getToastErrorMessage } from '../../utils/toast';
export default { export default {
data() { data() {
return { return {
email: '', username: '',
show: true, show: true,
selectedRoles: [], selectedRoles: [],
selectedRole: null, selectedRole: null,
@ -110,29 +108,25 @@ export default {
); );
}, },
inviteMember() { inviteMember() {
toast.promise( if (!this.username) {
this.$team.inviteTeamMember.submit( toast.error('用户名为必填项');
{ return;
email: this.email,
roles: this.selectedRoles.map((role) => role.value),
},
{
validate: () => {
if (!this.email) {
throw new DashboardError('邮箱为必填项');
} }
}, if (this.$team.inviteTeamMember.loading) return;
},
), toast.success('已添加成员到团队', { duration: 2000 });
{
loading: '正在发送邀请...',
success: () => {
this.show = false; this.show = false;
return '邀请已发送!'; this.$team.inviteTeamMember.submit({
}, username: this.username,
error: (e) => getToastErrorMessage(e), roles: this.selectedRoles.map((role) => role.value),
}, });
); this.username = '';
this.selectedRoles = [];
setTimeout(() => {
if (this.$team?.getTeamMembers) {
this.$team.getTeamMembers.submit();
}
}, 500);
}, },
}, },
}; };

View File

@ -774,7 +774,7 @@ class Team(Page):
return get_team_members(self.name) return get_team_members(self.name)
@dashboard_whitelist() @dashboard_whitelist()
def invite_team_member(self, email, roles=None): def invite_team_member(self, username, roles=None):
JcloudRole = jingrow.qb.PageType("Jcloud Role") JcloudRole = jingrow.qb.PageType("Jcloud Role")
JcloudRoleUser = jingrow.qb.PageType("Jcloud Role User") JcloudRoleUser = jingrow.qb.PageType("Jcloud Role User")
@ -790,26 +790,36 @@ class Team(Page):
if jingrow.session.user != self.user and not has_admin_access.run(): if jingrow.session.user != self.user and not has_admin_access.run():
jingrow.throw(_("Only team owner can invite team members")) jingrow.throw(_("Only team owner can invite team members"))
jingrow.utils.validate_email_address(email, True) # 验证用户名是否存在
if not username:
jingrow.throw(_("用户名不能为空"))
if jingrow.db.exists("Team Member", {"user": email, "parent": self.name, "parenttype": "Team"}): # 检查用户是否存在(通过 username 或 name
jingrow.throw(_("Team member already exists")) user = jingrow.db.get_value("User", {"username": username}, ["name", "enabled"], as_dict=True)
if not user:
# 如果通过 username 找不到,尝试通过 name因为 name 可能是 username
user = jingrow.db.get_value("User", username, ["name", "enabled"], as_dict=True)
account_request = jingrow.get_pg( if not user:
{ jingrow.throw(_("用户不存在"))
"pagetype": "Account Request",
"team": self.name,
"email": email,
"role": "Jcloud Member",
"invited_by": self.user,
"send_email": True,
}
)
if not user.enabled:
jingrow.throw(_("用户已被禁用"))
# 检查是否已经是团队成员
if jingrow.db.exists("Team Member", {"user": user.name, "parent": self.name, "parenttype": "Team"}):
jingrow.throw(_("该用户已经是团队成员"))
# 直接添加团队成员
self.append("team_members", {"user": user.name})
self.save(ignore_permissions=True)
# 添加角色
if roles:
for role in roles: for role in roles:
account_request.append("jcloud_roles", {"jcloud_role": role}) role_pg = jingrow.get_pg("Jcloud Role", role)
if role_pg:
account_request.insert() role_pg.add_user(user.name)
@jingrow.whitelist() @jingrow.whitelist()
def get_balance(self): def get_balance(self):