| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <script lang="ts" setup> |
| | | import type { GroupMemberLite } from './group-member.vue' |
| | | |
| | | import { computed, ref } from 'vue' |
| | | |
| | | import { confirm } from '#/packages/effects/common-ui/src' |
| | | |
| | | import { Button, message, Modal } from 'ant-design-vue' |
| | | |
| | | import { transferGroupOwner } from '#/api/im/group' |
| | | |
| | | import { GroupMemberPickerPanel } from '../picker' |
| | | |
| | | defineOptions({ name: 'ImGroupOwnerTransferDialog' }) |
| | | |
| | | const emit = defineEmits<{ |
| | | /** 转让æåï¼ç¶ä¾§éå¸¸ç¨æ¥ reload ç¾¤æ°æ® */ |
| | | reload: [] |
| | | }>() |
| | | |
| | | const visible = ref(false) |
| | | const submitting = ref(false) |
| | | const groupId = ref(0) |
| | | const members = ref<GroupMemberLite[]>([]) |
| | | const hideIds = ref<number[]>([]) |
| | | const selectedIds = ref<number[]>([]) |
| | | |
| | | defineExpose({ |
| | | /** æå¼è½¬è®©ç¾¤ä¸»å¼¹çªï¼reset â çå â visible=true */ |
| | | open(opts: { |
| | | groupId: number |
| | | /** éè userIdï¼å½åç¨æ·ï¼ä¸è½è½¬ç»èªå·±ï¼ */ |
| | | hideIds?: number[] |
| | | members: GroupMemberLite[] |
| | | }) { |
| | | groupId.value = opts.groupId |
| | | members.value = opts.members |
| | | hideIds.value = opts.hideIds ? [...opts.hideIds] : [] |
| | | selectedIds.value = [] |
| | | submitting.value = false |
| | | visible.value = true |
| | | } |
| | | }) |
| | | |
| | | /** éä¸çæ°ç¾¤ä¸»å¯¹è±¡ï¼åæ°ç»é¦é¡¹ï¼ */ |
| | | const newOwner = computed<GroupMemberLite | undefined>(() => { |
| | | if (selectedIds.value.length === 0) { |
| | | return undefined |
| | | } |
| | | return members.value.find((member) => member.userId === selectedIds.value[0]) |
| | | }) |
| | | |
| | | /** äºæ¬¡ç¡®è®¤è½¬è®©ï¼è½¬è®©åæ§ç¾¤ä¸»é为æ®éæåï¼æ æ³æ¤é */ |
| | | async function handleOk() { |
| | | if (!groupId.value || !newOwner.value) { |
| | | return |
| | | } |
| | | try { |
| | | await confirm( |
| | | `ç¡®å®å°ç¾¤ä¸»è½¬è®©ç» ${newOwner.value.showName}ï¼è½¬è®©åä½ å°å为æ®éæåï¼æ æ³æ¤éã`, |
| | | '确认转让群主' |
| | | ) |
| | | } catch { |
| | | return |
| | | } |
| | | submitting.value = true |
| | | try { |
| | | await transferGroupOwner({ |
| | | id: groupId.value, |
| | | newOwnerUserId: newOwner.value.userId |
| | | }) |
| | | message.success('群主转让æå') |
| | | emit('reload') |
| | | visible.value = false |
| | | } finally { |
| | | submitting.value = false |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <template> |
| | | <!-- |
| | | 转让群主ï¼é 1 使°ç¾¤ä¸» â äºæ¬¡ç¡®è®¤ â transferGroupOwner |
| | | - dialog 壳æ¬ç»ä»¶ææï¼éæ© UI å§æ GroupMemberPickerPanel |
| | | - å½åç¨æ·ä»åéééèï¼ä¸è½è½¬ç»èªå·±ï¼ |
| | | - maxSize=1 éå®åé |
| | | - 坹夿¥å£ï¼ref + open({ groupId, members, hideIds }) + emit reload() |
| | | --> |
| | | <Modal |
| | | v-model:open="visible" |
| | | title="éæ©æ°ç¾¤ä¸»" |
| | | width="700px" |
| | | :mask-closable="false" |
| | | class="im-picker-dialog" |
| | | > |
| | | <div class="h-[480px]"> |
| | | <GroupMemberPickerPanel |
| | | v-model:selected-ids="selectedIds" |
| | | :members="members" |
| | | :hide-ids="hideIds" |
| | | :max-size="1" |
| | | /> |
| | | </div> |
| | | |
| | | <template #footer> |
| | | <Button @click="visible = false">åæ¶</Button> |
| | | <Button |
| | | type="primary" |
| | | :loading="submitting" |
| | | :disabled="selectedIds.length === 0" |
| | | @click="handleOk" |
| | | > |
| | | ç¡®å® |
| | | </Button> |
| | | </template> |
| | | </Modal> |
| | | </template> |
| | | |
| | | <style scoped lang="scss"> |
| | | @use '../picker/picker-dialog' as picker; |
| | | |
| | | /* :deep ç©¿é el-dialog å
é¨ç±»ï¼å¤ç¨ picker å
Œ
± mixin */ |
| | | .im-picker-dialog { |
| | | @include picker.styles; |
| | | } |
| | | </style> |