feat: 🚀 消息发送页面简介还差图片封面未添加

This commit is contained in:
bunny 2024-10-31 16:58:10 +08:00
parent 560411b2dd
commit 2bda0940cf
6 changed files with 76 additions and 35 deletions

View File

@ -43,7 +43,7 @@ function hoverDescription(event, description) {
<template> <template>
<div class="notice-container border-b-[1px] border-solid border-[#f0f0f0] dark:border-[#303030]"> <div class="notice-container border-b-[1px] border-solid border-[#f0f0f0] dark:border-[#303030]">
<el-avatar v-if="noticeItem.avatar" :size="30" :src="noticeItem.avatar" class="notice-container-avatar" /> <el-avatar v-if="noticeItem.cover" :size="30" :src="noticeItem.cover" class="notice-container-avatar" />
<div class="notice-container-text"> <div class="notice-container-text">
<div class="notice-text-title text-[#000000d9] dark:text-white"> <div class="notice-text-title text-[#000000d9] dark:text-white">
<el-tooltip :content="noticeItem.title" :disabled="!titleTooltip" :effect="tooltipEffect" :enterable="!isMobile" placement="top-start" popper-class="notice-title-popper"> <el-tooltip :content="noticeItem.title" :disabled="!titleTooltip" :effect="tooltipEffect" :enterable="!isMobile" placement="top-start" popper-class="notice-title-popper">

View File

@ -1,7 +1,9 @@
import { $t } from '@/plugins/i18n'; import { $t } from '@/plugins/i18n';
import { ref } from 'vue';
import { fetchGetMessageList } from '@/api/v1/message';
export interface ListItem { export interface ListItem {
avatar: string; cover: string;
title: string; title: string;
datetime: string; datetime: string;
type: string; type: string;
@ -17,30 +19,52 @@ export interface TabItem {
emptyText: string; emptyText: string;
} }
// { // 请求参数
// avatar: 'https://xiaoxian521.github.io/hyperlink/svg/smile1.svg', const form = { status: false, currentPage: 1, pageSize: 100 };
// title: '小铭 评论了你', // 响应内容
// description: '诚在于心,信在于行,诚信在于心行合一。', export const noticesData = ref<TabItem[]>([]);
// datetime: '今天',
// type: '2', /** 获取所有消息 */
// }, export const getAllMessageList = async () => {
export const noticesData: TabItem[] = [ const baseResult = await fetchGetMessageList(form);
{ const datalist = baseResult.data.list;
key: '1',
name: $t('status.pureNotify'), // 通知消息
list: [], const notifications = datalist
emptyText: $t('status.pureNoNotify'), .filter(message => message.messageType === 'notifications')
}, .map(message => ({
{ cover: message.cover,
key: '2', description: message.summary,
name: $t('status.pureMessage'), title: message.title,
list: [], datetime: message.createTime,
emptyText: $t('status.pureNoMessage'), type: '1',
}, })) as ListItem[];
{
key: '3', // 消息
name: $t('status.pureTodo'), const notify = datalist
list: [], .filter(message => message.messageType !== 'notifications' && message.messageType !== 'sys')
emptyText: $t('status.pureNoTodo'), .map(message => ({
}, cover: message.cover,
]; description: message.summary,
title: message.title,
datetime: message.createTime,
type: '2',
})) as ListItem[];
// 系统消息
const system = datalist
.filter(message => message.messageType === 'sys')
.map(message => ({
cover: message.cover,
description: message.summary,
title: message.title,
datetime: message.createTime,
type: '3',
})) as ListItem[];
noticesData.value = [
{ key: '1', name: $t('status.pureNotify'), list: notifications, emptyText: $t('status.pureNoNotify') },
{ key: '2', name: $t('status.pureMessage'), list: notify, emptyText: $t('status.pureNoMessage') },
{ key: '3', name: $t('status.systemMessage'), list: system, emptyText: $t('status.systemMessage') },
];
};

View File

@ -1,18 +1,27 @@
<script lang="ts" setup> <script lang="ts" setup>
import { useI18n } from 'vue-i18n'; import { useI18n } from 'vue-i18n';
import { computed, ref } from 'vue'; import { computed, onMounted, ref } from 'vue';
import { noticesData } from './data'; import { getAllMessageList, noticesData } from './data';
import NoticeList from './components/NoticeList.vue'; import NoticeList from './components/NoticeList.vue';
import BellIcon from '@iconify-icons/ep/bell'; import BellIcon from '@iconify-icons/ep/bell';
const { t } = useI18n(); const { t } = useI18n();
const noticesNum = ref(0); const noticesNum = ref(0);
//
const notices = ref(noticesData); const notices = ref(noticesData);
const activeKey = ref(noticesData[0]?.key); //
const activeKey = ref(noticesData.value[0]?.key);
notices.value.map(v => (noticesNum.value += v.list.length));
const getLabel = computed(() => item => item.name + (item.list.length > 0 ? `(${item.list.length})` : '')); const getLabel = computed(() => item => item.name + (item.list.length > 0 ? `(${item.list.length})` : ''));
onMounted(async () => {
//
await getAllMessageList();
//
notices.value.map(v => (noticesNum.value += v.list.length));
//
activeKey.value = noticesData.value[0]?.key;
});
</script> </script>
<template> <template>

View File

@ -107,7 +107,11 @@ onMounted(() => {
<!-- 是否已读 --> <!-- 是否已读 -->
<el-form-item :label="$t('isRead')" prop="status"> <el-form-item :label="$t('isRead')" prop="status">
<el-switch v-model="formState.status" :active-text="$t('readAlready')" :active-value="true" :inactive-text="$t('unread')" :inactive-value="false" :style="switchStyle" inline-prompt /> <el-switch v-model="formState.status" :active-text="$t('readAlready')" :active-value="true" :inactive-text="$t('unread')" :inactive-value="false" :style="switchStyle" inline-prompt />
<!--<el-switch v-model="formState.status" />--> </el-form-item>
<!-- 简介 -->
<el-form-item :label="$t('summary')" prop="summary">
<el-input v-model="formState.summary" :autosize="{ minRows: 3, maxRows: 6 }" maxlength="200" minlength="10" show-word-limit type="textarea" />
</el-form-item> </el-form-item>
<!-- 提交 --> <!-- 提交 -->

View File

@ -9,4 +9,6 @@ export const rules = {
content: [{ required: true, message: `${$t('input')}${$t('content')}`, trigger: 'blur' }], content: [{ required: true, message: `${$t('input')}${$t('content')}`, trigger: 'blur' }],
// 编辑器类型 // 编辑器类型
editorType: [{ required: true, message: `${$t('input')}${$t('editorType')}`, trigger: 'blur' }], editorType: [{ required: true, message: `${$t('input')}${$t('editorType')}`, trigger: 'blur' }],
// 消息简介
summary: [{ required: true, message: `${$t('input')}${$t('summary')}`, trigger: 'blur' }],
}; };

View File

@ -8,4 +8,6 @@ export const formState = reactive({
content: '', content: '',
editorType: 'markdown', editorType: 'markdown',
status: false, status: false,
summary: '',
cover: '',
}); });