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

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>
<div class="space-y-4">
<FormControl label="邮箱" v-model="email" />
<FormControl label="用户名" v-model="username" />
<div
v-if="$resources.roles.data?.length > 0"
class="flex items-center space-x-2"
@ -60,13 +60,11 @@
<script>
import { toast } from 'vue-sonner';
import { DashboardError } from '../../utils/error';
import { getToastErrorMessage } from '../../utils/toast';
export default {
data() {
return {
email: '',
username: '',
show: true,
selectedRoles: [],
selectedRole: null,
@ -110,29 +108,25 @@ export default {
);
},
inviteMember() {
toast.promise(
this.$team.inviteTeamMember.submit(
{
email: this.email,
roles: this.selectedRoles.map((role) => role.value),
},
{
validate: () => {
if (!this.email) {
throw new DashboardError('邮箱为必填项');
}
},
},
),
{
loading: '正在发送邀请...',
success: () => {
this.show = false;
return '邀请已发送!';
},
error: (e) => getToastErrorMessage(e),
},
);
if (!this.username) {
toast.error('用户名为必填项');
return;
}
if (this.$team.inviteTeamMember.loading) return;
toast.success('已添加成员到团队', { duration: 2000 });
this.show = false;
this.$team.inviteTeamMember.submit({
username: this.username,
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)
@dashboard_whitelist()
def invite_team_member(self, email, roles=None):
def invite_team_member(self, username, roles=None):
JcloudRole = jingrow.qb.PageType("Jcloud Role")
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():
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"}):
jingrow.throw(_("Team member already exists"))
# 检查用户是否存在(通过 username 或 name
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(
{
"pagetype": "Account Request",
"team": self.name,
"email": email,
"role": "Jcloud Member",
"invited_by": self.user,
"send_email": True,
}
)
if not user:
jingrow.throw(_("用户不存在"))
for role in roles:
account_request.append("jcloud_roles", {"jcloud_role": role})
if not user.enabled:
jingrow.throw(_("用户已被禁用"))
account_request.insert()
# 检查是否已经是团队成员
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:
role_pg = jingrow.get_pg("Jcloud Role", role)
if role_pg:
role_pg.add_user(user.name)
@jingrow.whitelist()
def get_balance(self):