|
|
@@ -1,133 +1,90 @@
|
|
|
<template>
|
|
|
- <a-card title="站内信" :bordered="false" :bodyStyle="miniMessageBodyStyle">
|
|
|
- <div class="index-message-list">
|
|
|
- <a-list :data-source="messageList" size="small" :loading="miniMessageLoading">
|
|
|
- <template #renderItem="{ item }">
|
|
|
- <a-list-item>
|
|
|
- <a-list-item-meta :description="formatDateTime(item.createTime)">
|
|
|
- <template #title>
|
|
|
- <a @click="messageDetail(item)">{{ item.subject }}</a>
|
|
|
- </template>
|
|
|
- </a-list-item-meta>
|
|
|
- </a-list-item>
|
|
|
- </template>
|
|
|
- </a-list>
|
|
|
- </div>
|
|
|
- <xn-form-container title="详情" :width="700" :visible="visible" :destroy-on-close="true" @close="onClose">
|
|
|
- <a-form ref="formRef" :model="formData" layout="vertical">
|
|
|
- <a-form-item label="主题:" name="subject">
|
|
|
- <span>{{ formData.subject }}</span>
|
|
|
- </a-form-item>
|
|
|
- <a-form-item label="发送时间:" name="createTime">
|
|
|
- <span>{{ formatDateTime(formData.createTime)}}</span>
|
|
|
- </a-form-item>
|
|
|
- <a-form-item label="内容:" name="content">
|
|
|
- <span>{{ formData.content }}</span>
|
|
|
- </a-form-item>
|
|
|
- <a-form-item label="查收情况:" name="receiveInfoList">
|
|
|
- <s-table
|
|
|
- ref="table"
|
|
|
- :columns="columns"
|
|
|
- :data="loadData"
|
|
|
- :alert="false"
|
|
|
- :showPagination="false"
|
|
|
- bordered
|
|
|
- :row-key="(record) => record.id"
|
|
|
- :scroll="{x:'auto'}"
|
|
|
- >
|
|
|
+ <a-card>
|
|
|
+ <a-row :gutter="10">
|
|
|
+ <a-col :span="4">
|
|
|
+ <a-menu id="userMessage" v-model:selected-keys="selectedKeys" mode="inline" @click="handleClick">
|
|
|
+ <a-menu-item :key="messageCategory.value" v-for="messageCategory in messageCategoryList">{{
|
|
|
+ messageCategory.label
|
|
|
+ }}</a-menu-item>
|
|
|
+ </a-menu>
|
|
|
+ </a-col>
|
|
|
+ <a-col :span="20">
|
|
|
+ <div style="margin-top: -16px;">
|
|
|
+ <s-table ref="table" :columns="columns" :data="loadData" bordered :row-key="(record) => record.id">
|
|
|
<template #bodyCell="{ column, record }">
|
|
|
+ <template v-if="column.dataIndex === 'subject'">
|
|
|
+ <ellipsis :length="40" tooltip>
|
|
|
+ {{ record.subject }}
|
|
|
+ </ellipsis>
|
|
|
+ </template>
|
|
|
+ <template v-if="column.dataIndex == 'createTime'">{{ formatDateTime(record.createTime) }}</template>
|
|
|
<template v-if="column.dataIndex === 'read'">
|
|
|
<span v-if="record.read" style="color: #d9d9d9">已读</span>
|
|
|
<span v-else style="color: #ff4d4f">未读</span>
|
|
|
</template>
|
|
|
+ <template v-if="column.dataIndex === 'action'">
|
|
|
+ <a-space>
|
|
|
+ <a @click="detailRef.onOpen(record)">详情</a>
|
|
|
+ </a-space>
|
|
|
+ </template>
|
|
|
</template>
|
|
|
</s-table>
|
|
|
- </a-form-item>
|
|
|
- </a-form>
|
|
|
- </xn-form-container>
|
|
|
+ </div>
|
|
|
+ </a-col>
|
|
|
+ <detail ref="detailRef" @refresh="refresh" />
|
|
|
+ </a-row>
|
|
|
</a-card>
|
|
|
</template>
|
|
|
|
|
|
-<script setup name="miniMessage">
|
|
|
- import indexApi from '@/api/sys/indexApi'
|
|
|
- import { onMounted } from 'vue'
|
|
|
- import router from '@/router'
|
|
|
+<script setup name="inSiteMessage">
|
|
|
+ import detail from './detail.vue'
|
|
|
+ import userCenterApi from '@/api/sys/userCenterApi'
|
|
|
+ import tool from '@/utils/tool'
|
|
|
+ import { nextTick } from 'vue'
|
|
|
import { parseTime } from '@/utils/exam'
|
|
|
- const formatDateTime = (val) => {
|
|
|
+ function formatDateTime(val) {
|
|
|
if (!val) return ''
|
|
|
return parseTime(val, '{y}-{m}-{d} {h}:{i}:{s}')
|
|
|
}
|
|
|
- const miniMessageLoading = ref(false)
|
|
|
- const messageList = ref([])
|
|
|
- const miniMessageBodyStyle = ref({
|
|
|
- 'padding-top': '10px'
|
|
|
- })
|
|
|
- onMounted(() => {
|
|
|
- // 进来后执行查询
|
|
|
- getMessageList()
|
|
|
- })
|
|
|
- // 获取站内信列表
|
|
|
- const getMessageList = () => {
|
|
|
- miniMessageLoading.value = true
|
|
|
- indexApi
|
|
|
- .indexMessageList()
|
|
|
- .then((data) => {
|
|
|
- messageList.value = data
|
|
|
- })
|
|
|
- .finally(() => {
|
|
|
- miniMessageLoading.value = false
|
|
|
- })
|
|
|
- }
|
|
|
- // 跳转,用于点击更多按钮
|
|
|
- const leaveFor = (url = '/') => {
|
|
|
- router.replace({ path: url, query: { tab: 'userMessage' } })
|
|
|
- }
|
|
|
- // 点击详情
|
|
|
- const messageDetail = (message) => {
|
|
|
- visible.value = true
|
|
|
- const param = {
|
|
|
- id: message.id
|
|
|
- }
|
|
|
- indexApi.indexMessageDetail(param).then((data) => {
|
|
|
- Object.assign(message, data)
|
|
|
- formData.value = message
|
|
|
- receiveInfoList.value = data.receiveInfoList
|
|
|
- table.value.refresh(true)
|
|
|
- })
|
|
|
- }
|
|
|
|
|
|
- const loadData = () => {
|
|
|
- return new Promise((resolve) => {
|
|
|
- resolve(receiveInfoList.value)
|
|
|
- })
|
|
|
- }
|
|
|
- // 以下部分是抽屉的
|
|
|
- const visible = ref(false)
|
|
|
- const formRef = ref()
|
|
|
- const receiveInfoList = ref([])
|
|
|
- const formData = ref({})
|
|
|
+ const messageCategoryList = tool.dictList('MESSAGE_CATEGORY')
|
|
|
+ const selectedKeys = ref(new Array(messageCategoryList[0].value))
|
|
|
const table = ref()
|
|
|
+ const detailRef = ref()
|
|
|
const columns = [
|
|
|
{
|
|
|
- title: '姓名',
|
|
|
- dataIndex: 'receiveUserName'
|
|
|
+ title: '主题',
|
|
|
+ dataIndex: 'subject'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: '发送时间',
|
|
|
+ dataIndex: 'createTime',
|
|
|
},
|
|
|
{
|
|
|
title: '是否已读',
|
|
|
dataIndex: 'read',
|
|
|
- width: 120
|
|
|
+ width: '100px'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: '操作',
|
|
|
+ dataIndex: 'action',
|
|
|
+ width: '100px'
|
|
|
}
|
|
|
]
|
|
|
- // 关闭抽屉
|
|
|
- const onClose = () => {
|
|
|
- visible.value = false
|
|
|
- formData.value = {}
|
|
|
- receiveInfoList.value = []
|
|
|
+ const loadData = (parameter) => {
|
|
|
+ parameter.category = selectedKeys.value[0]
|
|
|
+ return userCenterApi.userLoginUnreadMessagePage(parameter).then((data) => {
|
|
|
+ return data
|
|
|
+ })
|
|
|
}
|
|
|
-</script>
|
|
|
-
|
|
|
-<style scoped>
|
|
|
- .index-message-list {
|
|
|
- overflow: auto;
|
|
|
+ const refresh = () => {
|
|
|
+ table.value.refresh(false)
|
|
|
}
|
|
|
-</style>
|
|
|
+ // 点击左侧菜单切换数据查询
|
|
|
+ const handleClick = () => {
|
|
|
+ // 先让上面的变量赋值,咱在查询
|
|
|
+ nextTick(() => {
|
|
|
+ table.value.refresh(true)
|
|
|
+ })
|
|
|
+ }
|
|
|
+</script>
|