@@ -70,13 +70,20 @@ const memberSearchFields: OptionItem<string>[] = [
7070 { label: ' 姓名' , value: ' name' },
7171]
7272const workspaceMembers = ref <WorkspaceMemberItem []>([])
73+ const workspaceMemberTableRef = useTemplateRef <{ clearSelection: () => void }>(' workspaceMemberTableRef' )
7374function handleMemberSearch(query ? : Dict <unknown >) {
7475 memberSearchQuery .value = query
7576 paginationConfig .value .currentPage = 1
7677 return loadWorkspaceMembers ()
7778}
7879
80+ function clearMemberSelection() {
81+ workspaceMemberTableRef .value ?.clearSelection ()
82+ batchSelectedMembers .value = []
83+ }
84+
7985function loadWorkspaceMembers() {
86+ clearMemberSelection ()
8087 const workspaceId = currentWorkspace .value ?.id
8188 if (! workspaceId ) {
8289 workspaceMembers .value = []
@@ -95,7 +102,16 @@ function loadWorkspaceMembers() {
95102}
96103
97104/** 同一用户的选择框、姓名和用户名按连续记录合并。 */
98- function objectSpanMethod({ column , row , rowIndex }: { row: WorkspaceMemberItem ; column: TableColumnCtx <WorkspaceMemberItem >; rowIndex: number ; columnIndex: number }) {
105+ function objectSpanMethod({
106+ column ,
107+ row ,
108+ rowIndex ,
109+ }: {
110+ row: WorkspaceMemberItem
111+ column: TableColumnCtx <WorkspaceMemberItem >
112+ rowIndex: number
113+ columnIndex: number
114+ }) {
99115 const shouldMerge = column .type === ' selection' || column .property === ' nick_name' || column .property === ' username'
100116 if (! shouldMerge ) return
101117
@@ -139,17 +155,18 @@ function handleRemoveMember(member: WorkspaceMemberItem) {
139155
140156/* 批量删除成员 */
141157const batchSelectedMembers = ref <WorkspaceMemberItem []>([])
158+
142159function handleBatchDelete() {
143160 const workspaceId = currentWorkspace .value ?.id
144- if (! workspaceId ) return
161+ if (! workspaceId || workspaceLoading . value || workspaceMembersLoading . value || ! batchSelectedMembers . value . length ) return
145162
146- MsgConfirm (` 是否删除选中的 ${batchSelectedMembers .value .length } 个成员? ` , ' ' )
163+ const selectedMembers = [... batchSelectedMembers .value ]
164+ const userCount = new Set (selectedMembers .map (({ user_id }) => user_id )).size
165+ const userRelationIds = [... new Set (selectedMembers .map (({ user_relation_id }) => user_relation_id ))]
166+ MsgConfirm (' 是否移除选中记录对应的成员?' , ` 涉及 ${userCount } 位用户,共 ${selectedMembers .length } 条记录。 ` )
147167 .then (() => {
148168 workspaceMembersLoading .value = true
149- return WorkspaceApi .postBatchRemoveWorkspaceMembers (
150- workspaceId ,
151- batchSelectedMembers .value .map (({ user_relation_id }) => user_relation_id ),
152- ).then (({ success_count , failed_count }) => {
169+ return WorkspaceApi .postBatchRemoveWorkspaceMembers (workspaceId , userRelationIds ).then (({ success_count , failed_count }) => {
153170 if (failed_count > 0 ) {
154171 MsgSuccess (` 移除成功 ${success_count } 个成员,失败 ${failed_count } 个 ` )
155172 } else {
@@ -231,8 +248,10 @@ onMounted(() => loadWorkspaceOptions())
231248 </div >
232249
233250 <MkTable
251+ ref="workspaceMemberTableRef"
234252 v-model :pagination-config =" paginationConfig "
235253 :data =" workspaceMembers "
254+ selection-group-key="user_id"
236255 v-loading =" workspaceMembersLoading "
237256 @current-change =" loadWorkspaceMembers ()"
238257 @size-change =" loadWorkspaceMembers ()"
0 commit comments