diff --git a/packages/web/components/common/Icon/constants.ts b/packages/web/components/common/Icon/constants.ts
index e7e87d5cd19e..442a44fb1d31 100644
--- a/packages/web/components/common/Icon/constants.ts
+++ b/packages/web/components/common/Icon/constants.ts
@@ -360,6 +360,7 @@ export const iconPaths = {
'modal/selectSource': () => import('./icons/modal/selectSource.svg'),
'modal/setting': () => import('./icons/modal/setting.svg'),
'modal/teamPlans': () => import('./icons/modal/teamPlans.svg'),
+ 'modal/key': () => import('./icons/modal/key.svg'),
'model/BAAI': () => import('./icons/model/BAAI.svg'),
'model/alicloud': () => import('./icons/model/alicloud.svg'),
'model/baichuan': () => import('./icons/model/baichuan.svg'),
diff --git a/packages/web/components/common/Icon/icons/modal/key.svg b/packages/web/components/common/Icon/icons/modal/key.svg
new file mode 100644
index 000000000000..836c660793af
--- /dev/null
+++ b/packages/web/components/common/Icon/icons/modal/key.svg
@@ -0,0 +1,9 @@
+
diff --git a/packages/web/i18n/en/user.json b/packages/web/i18n/en/user.json
index 1ca785b521e3..3695f852d87d 100644
--- a/packages/web/i18n/en/user.json
+++ b/packages/web/i18n/en/user.json
@@ -46,6 +46,7 @@
"password.to_login": "Go to Login",
"password.verification_code": "Verification Code",
"permission.Manage": "Admin",
+ "permission.Add": "Add Permissions",
"permission.Manage tip": "Team admin with full permissions",
"permission.Read": "Read Only",
"permission.Read desc": "Members can only read related resources, cannot create new resources",
@@ -57,6 +58,7 @@
"permission_des.manage": "Can create resources, invite, and delete members",
"permission_des.read": "Members can only read related resources and cannot create new resources.",
"permission_des.write": "In addition to readable resources, you can also create new resources",
+ "permission_add_tip": "After adding, you can check the permissions for them.",
"permissions": "Permissions",
"personal_information": "Me",
"personalization": "Personalization",
@@ -81,6 +83,7 @@
"team.Update Team": "Update team information",
"team.add_collaborator": "Add Collaborator",
"team.add_writer": "Add writable members",
+ "team.add_permission": "Add permissions",
"team.avatar_and_name": "avatar",
"team.belong_to_group": "Member group",
"team.group.avatar": "Group avatar",
@@ -102,7 +105,7 @@
"team.group.role.admin": "administrator",
"team.group.role.member": "member",
"team.group.role.owner": "owner",
- "team.group.search_placeholder": "Search member/group name",
+ "team.group.search_placeholder": "Search member/group/org name",
"team.group.set_as_admin": "Set as administrator",
"team.group.toast.can_not_delete_owner": "Owner cannot be deleted, please transfer first",
"team.group.transfer_owner": "transfer owner",
diff --git a/packages/web/i18n/zh-CN/user.json b/packages/web/i18n/zh-CN/user.json
index 7eb979052736..a8bf81d5aea3 100644
--- a/packages/web/i18n/zh-CN/user.json
+++ b/packages/web/i18n/zh-CN/user.json
@@ -49,6 +49,7 @@
"permission.Manage tip": "团队管理员,拥有全部权限",
"permission.Read": "仅读",
"permission.Read desc": "成员仅可阅读相关资源,无法新建资源",
+ "permission.Add": "添加权限",
"permission.Write": "可写",
"permission.Write tip": "除了可读资源外,还可以新建新的资源",
"permission.only_collaborators": "仅协作者访问",
@@ -57,6 +58,7 @@
"permission_des.manage": "可创建资源、邀请、删除成员",
"permission_des.read": "成员仅可阅读相关资源,无法新建资源",
"permission_des.write": "除了可读资源外,还可以新建新的资源",
+ "permission_add_tip": "添加后,您可为其勾选权限。",
"permissions": "权限",
"personal_information": "个人信息",
"personalization": "个性化",
@@ -81,6 +83,7 @@
"team.Update Team": "更新团队信息",
"team.add_collaborator": "添加协作者",
"team.add_writer": "添加可写成员",
+ "team.add_permission": "添加权限",
"team.avatar_and_name": "头像 & 名称",
"team.belong_to_group": "所属群组",
"team.group.avatar": "群头像",
@@ -102,7 +105,7 @@
"team.group.role.admin": "管理员",
"team.group.role.member": "成员",
"team.group.role.owner": "所有者",
- "team.group.search_placeholder": "搜索成员/群组名称",
+ "team.group.search_placeholder": "搜索成员/部门/群组名称",
"team.group.set_as_admin": "设为管理员",
"team.group.toast.can_not_delete_owner": "不能删除所有者, 请先转让",
"team.group.transfer_owner": "转让所有者",
diff --git a/packages/web/i18n/zh-Hant/user.json b/packages/web/i18n/zh-Hant/user.json
index f259aebd346e..35d58e31e448 100644
--- a/packages/web/i18n/zh-Hant/user.json
+++ b/packages/web/i18n/zh-Hant/user.json
@@ -49,6 +49,7 @@
"permission.Manage tip": "團隊管理員,擁有完整權限",
"permission.Read": "唯讀",
"permission.Read desc": "成員僅能閱讀相關資源,無法建立新資源",
+ "permission.Add": "新增權限",
"permission.Write": "可寫入",
"permission.Write tip": "除了可讀取資源外,還可以建立新的資源",
"permission.only_collaborators": "僅協作者可存取",
@@ -57,6 +58,7 @@
"permission_des.manage": "可建立資源、邀請及刪除成員",
"permission_des.read": "成員僅能閱讀相關資源,無法建立新資源",
"permission_des.write": "除了可讀取資源外,還可以建立新的資源",
+ "permission_add_tip": "添加後,您可為其勾選權限。",
"permissions": "權限",
"personal_information": "個人資料",
"personalization": "個人化",
@@ -81,6 +83,7 @@
"team.Update Team": "更新團隊資訊",
"team.add_collaborator": "新增協作者",
"team.add_writer": "新增可寫入成員",
+ "team.add_permission": "新增權限",
"team.avatar_and_name": "頭像與名稱",
"team.belong_to_group": "所屬成員群組",
"team.group.avatar": "群組頭像",
@@ -102,7 +105,7 @@
"team.group.role.admin": "管理員",
"team.group.role.member": "成員",
"team.group.role.owner": "擁有者",
- "team.group.search_placeholder": "搜尋成員/群組名稱",
+ "team.group.search_placeholder": "搜尋成員/部門/群組名稱",
"team.group.set_as_admin": "設為管理員",
"team.group.toast.can_not_delete_owner": "無法刪除擁有者,請先轉移擁有權",
"team.group.transfer_owner": "轉移擁有者",
diff --git a/projects/app/src/components/support/permission/MemberManager/MemberModal.tsx b/projects/app/src/components/support/permission/MemberManager/MemberModal.tsx
index dd854713fdac..6aa0731daede 100644
--- a/projects/app/src/components/support/permission/MemberManager/MemberModal.tsx
+++ b/projects/app/src/components/support/permission/MemberManager/MemberModal.tsx
@@ -35,7 +35,13 @@ const HoverBoxStyle = {
cursor: 'pointer'
};
-function MemberModal({ onClose }: { onClose: () => void }) {
+function MemberModal({
+ onClose,
+ addPermissionOnly: addOnly = false
+}: {
+ onClose: () => void;
+ addPermissionOnly?: boolean;
+}) {
const { t } = useTranslation();
const { userInfo, loadAndGetTeamMembers, loadAndGetGroups, myGroups, loadAndGetOrgs } =
useUserStore();
@@ -195,8 +201,8 @@ function MemberModal({ onClose }: { onClose: () => void }) {
void }) {
p="4"
>
setSearchText(e.target.value)}
/>
@@ -289,7 +295,10 @@ function MemberModal({ onClose }: { onClose: () => void }) {
{filterMembers.map((member) => {
+ const collaborator = collaboratorList?.find((v) => v.tmbId === member.tmbId);
+ const disabled = addOnly && collaborator !== undefined;
const onChange = () => {
+ if (disabled) return;
setSelectedMembers((state) => {
if (state.includes(member.tmbId)) {
return state.filter((v) => v !== member.tmbId);
@@ -297,7 +306,6 @@ function MemberModal({ onClose }: { onClose: () => void }) {
return [...state, member.tmbId];
});
};
- const collaborator = collaboratorList?.find((v) => v.tmbId === member.tmbId);
return (
void }) {
onClick={onChange}
>
{member.memberName}
-
+
);
})}
{filterOrgs.map((org) => {
+ const collaborator = collaboratorList?.find((v) => v.orgId === org._id);
+ const disabled = addOnly && collaborator !== undefined;
const onChange = () => {
+ if (disabled) return;
setSelectedOrgIdList((state) => {
if (state.includes(org._id)) {
return state.filter((v) => v !== org._id);
@@ -330,7 +344,6 @@ function MemberModal({ onClose }: { onClose: () => void }) {
return [...state, org._id];
});
};
- const collaborator = collaboratorList?.find((v) => v.orgId === org._id);
return (
void }) {
onClick={onChange}
>
@@ -357,7 +371,9 @@ function MemberModal({ onClose }: { onClose: () => void }) {
>
)}
-
+
{org.count && (
void }) {
_hover={{
bgColor: 'myGray.200'
}}
- onClick={() => {
+ onClick={(e) => {
+ e.stopPropagation();
setParentPath(getOrgChildrenPath(org));
}}
/>
@@ -376,7 +393,10 @@ function MemberModal({ onClose }: { onClose: () => void }) {
);
})}
{filterGroups.map((group) => {
+ const collaborator = collaboratorList?.find((v) => v.groupId === group._id);
+ const disabled = addOnly && collaborator !== undefined;
const onChange = () => {
+ if (disabled) return;
setSelectedGroupIdList((state) => {
if (state.includes(group._id)) {
return state.filter((v) => v !== group._id);
@@ -384,7 +404,6 @@ function MemberModal({ onClose }: { onClose: () => void }) {
return [...state, group._id];
});
};
- const collaborator = collaboratorList?.find((v) => v.groupId === group._id);
return (
void }) {
onClick={onChange}
>
{group.name === DefaultGroupName ? userInfo?.team.teamName : group.name}
-
+
);
})}
@@ -450,7 +472,7 @@ function MemberModal({ onClose }: { onClose: () => void }) {
- {!!permissionList && (
+ {!addOnly && !!permissionList && (
void }) {
onChange={(v) => setSelectedPermission(v)}
/>
)}
+ {addOnly && (
+
+
+ {t('user:permission_add_tip')}
+
+ )}
diff --git a/projects/app/src/components/support/permission/MemberManager/context.tsx b/projects/app/src/components/support/permission/MemberManager/context.tsx
index b46c6d7863df..683830b1538b 100644
--- a/projects/app/src/components/support/permission/MemberManager/context.tsx
+++ b/projects/app/src/components/support/permission/MemberManager/context.tsx
@@ -80,12 +80,14 @@ const CollaboratorContextProvider = ({
refetchResource,
refreshDeps = [],
isInheritPermission,
- hasParent
+ hasParent,
+ addPermissionOnly
}: MemberManagerInputPropsType & {
children: (props: ChildrenProps) => ReactNode;
refetchResource?: () => void;
isInheritPermission?: boolean;
hasParent?: boolean;
+ addPermissionOnly?: boolean;
}) => {
const onUpdateCollaboratorsThen = async (props: UpdateClbPermissionProps) => {
await onUpdateCollaborators(props);
@@ -209,6 +211,7 @@ const CollaboratorContextProvider = ({
onCloseAddMember();
refetchResource?.();
}}
+ addPermissionOnly={addPermissionOnly}
/>
)}
{isOpenManageModal && (
diff --git a/projects/app/src/pages/account/team/components/PermissionManage/index.tsx b/projects/app/src/pages/account/team/components/PermissionManage/index.tsx
index cb97ba24cee5..626adc1873e0 100644
--- a/projects/app/src/pages/account/team/components/PermissionManage/index.tsx
+++ b/projects/app/src/pages/account/team/components/PermissionManage/index.tsx
@@ -52,7 +52,6 @@ function PermissionManage({
}) {
const { t } = useTranslation();
const { userInfo } = useUserStore();
- const [searchKey, setSearchKey] = useState('');
const collaboratorList = useContextSelector(
CollaboratorContext,
@@ -144,7 +143,7 @@ function PermissionManage({
leftIcon={}
onClick={onOpenAddMember}
>
- {t('common:common.Add')}
+ {t('user:permission.Add')}
)}
@@ -418,6 +417,7 @@ export const Render = ({ Tabs }: { Tabs: React.ReactNode }) => {
onUpdateCollaborators={updateMemberPermission}
onDelOneCollaborator={deleteMemberPermission}
refreshDeps={[userInfo?.team.teamId]}
+ addPermissionOnly={true}
>
{({ onOpenAddMember }) => }