| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <script lang="ts" setup> |
| | | import { ref } from 'vue'; |
| | | |
| | | import { useVbenModal } from '#/packages/effects/common-ui/src'; |
| | | |
| | | import { Form, FormItem, message, Radio, RadioGroup } from 'ant-design-vue'; |
| | | |
| | | import { sendManagerChannelMessage } from '#/api/im/manager/channel/message'; |
| | | import { ChannelSelect } from '#/views/im/manager/channel/list/components'; |
| | | import { MaterialSelect } from '#/views/im/manager/channel/material/components'; |
| | | import { UserSelect } from '#/views/system/user/components'; |
| | | |
| | | const emit = defineEmits(['success']); |
| | | |
| | | const formData = ref({ |
| | | channelId: undefined as number | undefined, |
| | | materialId: undefined as number | undefined, |
| | | receiverUserType: 'all' as 'all' | 'users', |
| | | receiverUserIds: [] as number[], |
| | | }); |
| | | |
| | | /** é置表å */ |
| | | function resetForm() { |
| | | formData.value = { |
| | | channelId: undefined, |
| | | materialId: undefined, |
| | | receiverUserType: 'all', |
| | | receiverUserIds: [], |
| | | }; |
| | | } |
| | | |
| | | const [Modal, modalApi] = useVbenModal({ |
| | | async onConfirm() { |
| | | if (!formData.value.channelId || !formData.value.materialId) { |
| | | message.warning('è¯·éæ©é¢éåç´ æ'); |
| | | return; |
| | | } |
| | | if ( |
| | | formData.value.receiverUserType === 'users' && |
| | | formData.value.receiverUserIds.length === 0 |
| | | ) { |
| | | message.warning('请è³å°éæ©ä¸ä¸ªæ¥æ¶ç¨æ·'); |
| | | return; |
| | | } |
| | | modalApi.lock(); |
| | | try { |
| | | await sendManagerChannelMessage({ |
| | | materialId: formData.value.materialId, |
| | | receiverUserIds: |
| | | formData.value.receiverUserType === 'users' |
| | | ? formData.value.receiverUserIds |
| | | : undefined, |
| | | }); |
| | | await modalApi.close(); |
| | | emit('success'); |
| | | message.success('æ¨éæå'); |
| | | } finally { |
| | | modalApi.unlock(); |
| | | } |
| | | }, |
| | | onOpenChange(isOpen: boolean) { |
| | | if (isOpen) { |
| | | resetForm(); |
| | | } |
| | | }, |
| | | }); |
| | | </script> |
| | | |
| | | <template> |
| | | <Modal class="w-2/5" title="ç«å³æ¨éé¢éæ¶æ¯"> |
| | | <Form :label-col="{ style: { width: '110px' } }"> |
| | | <FormItem label="æå±é¢é" required> |
| | | <ChannelSelect |
| | | v-model="formData.channelId" |
| | | placeholder="è¯·éæ©é¢éï¼ç¨äºå è½½ç´ æï¼" |
| | | /> |
| | | </FormItem> |
| | | <FormItem label="ç´ æ" required> |
| | | <MaterialSelect |
| | | v-model="formData.materialId" |
| | | :channel-id="formData.channelId" |
| | | placeholder="è¯·éæ©ç´ æ" |
| | | /> |
| | | </FormItem> |
| | | <FormItem label="åä¼"> |
| | | <RadioGroup v-model:value="formData.receiverUserType"> |
| | | <Radio value="all">å
¨å</Radio> |
| | | <Radio value="users">æå®ç¨æ·</Radio> |
| | | </RadioGroup> |
| | | </FormItem> |
| | | <FormItem v-if="formData.receiverUserType === 'users'" label="æ¥æ¶ç¨æ·" required> |
| | | <UserSelect |
| | | v-model="formData.receiverUserIds" |
| | | multiple |
| | | placeholder="è¯·éæ©æ¥æ¶ç¨æ·" |
| | | /> |
| | | </FormItem> |
| | | </Form> |
| | | </Modal> |
| | | </template> |