You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
197 lines
5.8 KiB
197 lines
5.8 KiB
<template>
|
|
<el-dialog
|
|
v-model="state.isShowDialog"
|
|
draggable
|
|
:close-on-click-modal="false"
|
|
width="700px"
|
|
top="5vh"
|
|
destroy-on-close
|
|
>
|
|
<template #header>
|
|
<div>
|
|
<el-icon class="el-custom-dialog-icon">
|
|
<Edit />
|
|
</el-icon>
|
|
<span>发布</span>
|
|
</div>
|
|
</template>
|
|
<div class="app-container" style="min-height: 150px" v-loading="state.loading">
|
|
<el-form ref="elFormRef" :model="state.form" :rules="rules" label-width="90px">
|
|
<el-row>
|
|
<el-col :span="12">
|
|
<el-form-item label="类型">
|
|
<EnumSelect
|
|
v-model="state.form.messageType"
|
|
enum="MessageTypeEnum"
|
|
style="width: 210px"
|
|
/>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="12"></el-col>
|
|
</el-row>
|
|
<el-row>
|
|
<el-col :span="12">
|
|
<el-form-item label="发布到">
|
|
<el-select v-model="state.publishTo">
|
|
<el-option :key="0" label="所有人" :value="0" />
|
|
<el-option :key="1" label="自定义" :value="1" />
|
|
</el-select>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="12"></el-col>
|
|
</el-row>
|
|
<el-row v-if="state.publishTo == 1">
|
|
<el-col :span="24">
|
|
<el-button type="primary" @click="() => userSelectDialogRef.openDialog()">
|
|
添加
|
|
</el-button>
|
|
<el-table
|
|
ref="tableRef"
|
|
row-key="id"
|
|
:data="state.tableData"
|
|
border
|
|
style="margin-top: 5px"
|
|
>
|
|
<el-table-column type="index" width="50">
|
|
<template #default="scope">
|
|
{{ scope.$index + 1 + (state.pageParams.Page - 1) * state.pageParams.PageSize }}
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column prop="userName" label="账号"></el-table-column>
|
|
<el-table-column prop="realName" label="姓名"></el-table-column>
|
|
<el-table-column prop="orgName" label="机构部门" />
|
|
<el-table-column label="操作" align="left" width="80" show-overflow-tooltip>
|
|
<template #default="scope">
|
|
<el-button
|
|
link
|
|
icon="Delete"
|
|
type="danger"
|
|
@click="handleDelete(scope.row.id)"
|
|
v-auth="'receivemessage:page'"
|
|
>
|
|
删除
|
|
</el-button>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table>
|
|
<el-pagination
|
|
style="margin-top: 10px"
|
|
v-model:currentPage="state.pageParams.Page"
|
|
v-model:page-size="state.pageParams.PageSize"
|
|
:total="state.pageParams.Total"
|
|
background
|
|
layout="total, sizes,prev, pager, next"
|
|
@size-change="handleQuery"
|
|
@current-change="handleQuery"
|
|
:page-sizes="[10, 20, 50, 100]"
|
|
/>
|
|
</el-col>
|
|
</el-row>
|
|
</el-form>
|
|
<UserSelectDialog ref="userSelectDialogRef" @selected="mergeSelected"></UserSelectDialog>
|
|
</div>
|
|
<template #footer>
|
|
<div class="el-custom-dialog-footer">
|
|
<el-button type="primary" @click="submit" :disabled="state.loading">确定</el-button>
|
|
<el-button @click="() => (state.isShowDialog = false)" :disabled="state.loading">
|
|
取消
|
|
</el-button>
|
|
</div>
|
|
</template>
|
|
</el-dialog>
|
|
</template>
|
|
<script setup>
|
|
import { reactive, ref,defineExpose } from 'vue'
|
|
import { ElMessage } from 'element-plus'
|
|
import { publishMessage } from '@/api/system/messageApi'
|
|
import EnumSelect from '@/views/system/components/enumSelect.vue'
|
|
import UserSelectDialog from '@/views/system/components/userSelectDialog.vue'
|
|
|
|
const emits = defineEmits(['onClose'])
|
|
const state = reactive({
|
|
isShowDialog: false,
|
|
form: {},
|
|
loading: false,
|
|
publishTo: 0,
|
|
pageParams: {
|
|
Page: 1,
|
|
PageSize: 10,
|
|
Total: 0
|
|
},
|
|
tableData: [],
|
|
tableDataBak: []
|
|
})
|
|
const elFormRef = ref()
|
|
const userSelectDialogRef = ref()
|
|
|
|
const rules = {}
|
|
function openDialog(id) {
|
|
resetForm()
|
|
state.form.id = id
|
|
state.isShowDialog = true
|
|
}
|
|
|
|
function resetForm() {
|
|
state.form = {
|
|
id: null,
|
|
messageType: 0,
|
|
userIds: []
|
|
}
|
|
state.publishTo = 0
|
|
state.tableDataBak = []
|
|
state.tableData = []
|
|
state.pageParams.Total=0
|
|
elFormRef.value?.resetFields()
|
|
}
|
|
|
|
function submit() {
|
|
elFormRef.value.validate((valid) => {
|
|
if (valid) {
|
|
state.loading = true
|
|
let postData = Object.assign({}, state.form)
|
|
postData.userIds=state.tableDataBak.map((item) => item.id)
|
|
publishMessage(postData)
|
|
.then(() => {
|
|
emits('onClose')
|
|
ElMessage({
|
|
message: '更新成功',
|
|
type: 'success'
|
|
})
|
|
state.isShowDialog = false
|
|
})
|
|
.finally(() => (state.loading = false))
|
|
}
|
|
})
|
|
}
|
|
|
|
function mergeSelected(data) {
|
|
//把数据合并进入 state.tableData 根据列userName 去重
|
|
data.forEach((item) => {
|
|
let isExist = state.tableDataBak.find((i) => i.userName === item.userName)
|
|
if (!isExist) {
|
|
state.tableDataBak.push(item)
|
|
}
|
|
})
|
|
state.pageParams.Total= state.tableDataBak.length
|
|
handleQuery()
|
|
}
|
|
|
|
function handleQuery() {
|
|
state.loading = true
|
|
//根据state.tableData 和 state.pageParams 进行分页显示
|
|
state.tableData = state.tableDataBak.slice(
|
|
(state.pageParams.Page - 1) * state.pageParams.PageSize,
|
|
state.pageParams.Page * state.pageParams.PageSize
|
|
)
|
|
state.loading = false
|
|
}
|
|
|
|
function handleDelete(id) {
|
|
state.tableData = state.tableData.filter((item) => item.id !== id)
|
|
state.tableDataBak = state.tableDataBak.filter((item) => item.id !== id)
|
|
}
|
|
|
|
defineExpose({
|
|
openDialog
|
|
})
|
|
</script>
|
|
|