13 changed files with 193 additions and 23 deletions
@ -0,0 +1,51 @@ |
|||
<template> |
|||
<el-select v-model="messageIds" :multiple="multiple" filterable remote clearable |
|||
:placeholder="placeholder" :remote-method="handleRemote" :loading="loading"> |
|||
<el-option v-for="message in options" :key="message.id" :label="message.title" :value="message.id" /> |
|||
</el-select> |
|||
</template> |
|||
|
|||
<script setup lang="ts" name="ImSmSelect"> |
|||
|
|||
import { computed } from 'vue' |
|||
import { ref } from 'vue' |
|||
import { findSystemMessageByTitle } from '@/api/im/systemMessage' |
|||
|
|||
const props = defineProps({ |
|||
multiple: { |
|||
type: Boolean, |
|||
required: false, |
|||
default: () => false |
|||
}, |
|||
placeholder: { |
|||
type: String, |
|||
required: false, |
|||
default: () => '' |
|||
} |
|||
}) |
|||
|
|||
const loading = ref(false) |
|||
const options = ref() |
|||
const model = defineModel<number | Array<Number> | string | Array<String>>() |
|||
const messageIds = computed({ |
|||
get() { |
|||
if(model.value != undefined){ |
|||
return model.value |
|||
}else if(props.multiple){ |
|||
return [] |
|||
} |
|||
}, |
|||
set(value) { |
|||
model.value = value |
|||
} |
|||
}) |
|||
|
|||
const handleRemote = (title: string)=>{ |
|||
loading.value = true |
|||
findSystemMessageByTitle(title).then((res) => { |
|||
loading.value = false; |
|||
options.value = res.data; |
|||
}); |
|||
} |
|||
|
|||
</script> |
|||
@ -0,0 +1,128 @@ |
|||
<template> |
|||
<!-- 添加或修改系统消息推送任务对话框 --> |
|||
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body> |
|||
<el-form ref="dataFormRef" :model="form" :rules="dataRules" label-width="80px"> |
|||
<el-form-item label="系统消息" prop="messageId"> |
|||
<im-sm-select v-model="form.messageId"></im-sm-select> |
|||
</el-form-item> |
|||
<el-form-item label="推送时间" prop="sendTime"> |
|||
<el-date-picker clearable v-model="form.sendTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" |
|||
placeholder="请选择推送时间"> |
|||
</el-date-picker> |
|||
</el-form-item> |
|||
<el-form-item label="接收用户" prop="sendToAll"> |
|||
<el-radio-group v-model="form.sendToAll"> |
|||
<el-radio :value="true">全体用户</el-radio> |
|||
<el-radio :value="false">指定用户</el-radio> |
|||
</el-radio-group> |
|||
</el-form-item> |
|||
<el-form-item v-if="!form.sendToAll"> |
|||
<im-user-select v-model="recvIds" :multiple="true" placeholder="请选择最多20个用户"></im-user-select> |
|||
</el-form-item> |
|||
</el-form> |
|||
<template #footer> |
|||
<div class="dialog-footer"> |
|||
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button> |
|||
<el-button @click="cancel">取 消</el-button> |
|||
</div> |
|||
</template> |
|||
</el-dialog> |
|||
</template> |
|||
|
|||
<script setup name="SmTaskInfo" lang="ts"> |
|||
import { getSmPushTask, addSmPushTask, updateSmPushTask } from '@/api/im/smPushTask'; |
|||
import { SmPushTaskForm, SmPushTaskVO } from '@/api/im/smPushTask/types'; |
|||
import { parseTime } from '@/utils/ruoyi'; |
|||
|
|||
const emit = defineEmits(['refreshDataList']) |
|||
|
|||
const { proxy } = getCurrentInstance() as ComponentInternalInstance; |
|||
const recvIds = ref<Array<number>>([]); |
|||
const dataFormRef = ref<ElFormInstance>(); |
|||
const dataRules = ref() |
|||
const buttonLoading = ref(false); |
|||
const dialog = reactive<DialogOption>({ |
|||
visible: false, |
|||
title: '' |
|||
}); |
|||
|
|||
const form: SmPushTaskForm = reactive({ |
|||
id: undefined, |
|||
messageId: null, |
|||
sendTime: null, |
|||
sendToAll: true, |
|||
recvIds: '' |
|||
}) |
|||
|
|||
/** 提交按钮 */ |
|||
const submitForm = () => { |
|||
buttonLoading.value = true; |
|||
dataFormRef.value?.validate(async (valid: boolean) => { |
|||
if (valid) { |
|||
form.recvIds = recvIds.value.join(","); |
|||
if (form.id) { |
|||
updateSmPushTask(form).finally(() => buttonLoading.value = false); |
|||
} else { |
|||
await addSmPushTask(form).finally(() => buttonLoading.value = false); |
|||
} |
|||
proxy?.$modal.msgSuccess("操作成功"); |
|||
dialog.visible = false; |
|||
emit('refreshDataList') |
|||
} |
|||
}); |
|||
} |
|||
|
|||
const init = async (id?: number) => { |
|||
dialog.visible = true; |
|||
form.id = id; |
|||
recvIds.value = []; |
|||
// 重置表单数据 |
|||
dataFormRef.value?.resetFields() |
|||
if (id) { |
|||
const res = await getSmPushTask(id); |
|||
Object.assign(form, res.data); |
|||
if (res.data.recvIds) { |
|||
recvIds.value = res.data.recvIds.split(",").map(Number); |
|||
} |
|||
dialog.title = "修改推送任务"; |
|||
} else { |
|||
dialog.title = "添加推送任务"; |
|||
} |
|||
} |
|||
|
|||
const initByTask = (task?: SmPushTaskVO) => { |
|||
dialog.visible = true; |
|||
dataFormRef.value?.resetFields() |
|||
form.id = undefined; |
|||
form.messageId = task.messageId; |
|||
form.sendToAll = task.sendToAll; |
|||
form.recvIds = task.recvIds; |
|||
form.sendTime = parseTime(new Date(),'{y}-{m}-{d} {h}:{i}:{s}'); |
|||
recvIds.value = []; |
|||
if (task.recvIds) { |
|||
recvIds.value = task.recvIds.split(",").map(Number); |
|||
} |
|||
dialog.title = "添加推送任务"; |
|||
} |
|||
|
|||
|
|||
const initByMessage = (messageId: number) => { |
|||
dialog.visible = true; |
|||
dialog.title = "添加推送任务"; |
|||
dataFormRef.value?.resetFields() |
|||
form.id = undefined; |
|||
form.messageId = messageId; |
|||
form.sendToAll = true; |
|||
form.recvIds = ''; |
|||
form.sendTime = parseTime(new Date(),'{y}-{m}-{d} {h}:{i}:{s}'); |
|||
console.log(form.sendTime) |
|||
} |
|||
|
|||
const cancel = () => { |
|||
|
|||
dialog.visible = false; |
|||
} |
|||
defineExpose({ |
|||
init, initByTask, initByMessage |
|||
}) |
|||
</script> |
|||
|
After Width: | Height: | Size: 267 KiB |
|
After Width: | Height: | Size: 227 KiB |
|
After Width: | Height: | Size: 166 KiB |
|
After Width: | Height: | Size: 264 KiB |
|
After Width: | Height: | Size: 211 KiB |
Loading…
Reference in new issue