fix: 消息显示问题

This commit is contained in:
bunny 2025-05-01 18:24:43 +08:00
parent a61ab82e01
commit a431967eb0
11 changed files with 27 additions and 2432 deletions

View File

@ -1,6 +1,9 @@
# 线上环境平台打包路径 # 线上环境平台打包路径
VITE_PUBLIC_PATH = / VITE_PUBLIC_PATH = /
# 平台本地运行端口号
VITE_PORT = 80
# 线上环境路由历史模式Hash模式传"hash"、HTML5模式传"h5"、Hash模式带base参数传"hash,base参数"、HTML5模式带base参数传"h5,base参数" # 线上环境路由历史模式Hash模式传"hash"、HTML5模式传"h5"、Hash模式带base参数传"hash,base参数"、HTML5模式带base参数传"h5,base参数"
VITE_ROUTER_HISTORY = "hash" VITE_ROUTER_HISTORY = "hash"
@ -10,4 +13,4 @@ VITE_CDN = false
# 是否启用gzip压缩或brotli压缩分两种情况删除原始文件和不删除原始文件 # 是否启用gzip压缩或brotli压缩分两种情况删除原始文件和不删除原始文件
# 压缩时不删除原始文件的配置gzip、brotli、both同时开启 gzip 与 brotli 压缩、none不开启压缩默认 # 压缩时不删除原始文件的配置gzip、brotli、both同时开启 gzip 与 brotli 压缩、none不开启压缩默认
# 压缩时删除原始文件的配置gzip-clear、brotli-clear、both-clear同时开启 gzip 与 brotli 压缩、none不开启压缩默认 # 压缩时删除原始文件的配置gzip-clear、brotli-clear、both-clear同时开启 gzip 与 brotli 压缩、none不开启压缩默认
VITE_COMPRESSION = "none" VITE_COMPRESSION = "both"

View File

@ -47,13 +47,9 @@
"@amap/amap-jsapi-loader": "^1.0.1", "@amap/amap-jsapi-loader": "^1.0.1",
"@howdyjs/mouse-menu": "^2.1.6", "@howdyjs/mouse-menu": "^2.1.6",
"@infectoone/vue-ganttastic": "^2.3.2", "@infectoone/vue-ganttastic": "^2.3.2",
"@logicflow/core": "^1.2.28",
"@logicflow/extension": "^1.2.28",
"@pureadmin/descriptions": "^1.2.1", "@pureadmin/descriptions": "^1.2.1",
"@pureadmin/table": "^3.2.1", "@pureadmin/table": "^3.2.1",
"@pureadmin/utils": "^2.6.0", "@pureadmin/utils": "^2.6.0",
"@vue-flow/background": "^1.3.2",
"@vue-flow/core": "^1.42.5",
"@vueuse/core": "^13.1.0", "@vueuse/core": "^13.1.0",
"@vueuse/motion": "^3.0.3", "@vueuse/motion": "^3.0.3",
"@wangeditor/editor": "^5.1.23", "@wangeditor/editor": "^5.1.23",
@ -79,7 +75,6 @@
"md-editor-v3": "^5.5.0", "md-editor-v3": "^5.5.0",
"mint-filter": "^4.0.3", "mint-filter": "^4.0.3",
"mitt": "^3.0.1", "mitt": "^3.0.1",
"mqtt": "4.3.7",
"nprogress": "^0.2.0", "nprogress": "^0.2.0",
"path-browserify": "^1.0.1", "path-browserify": "^1.0.1",
"pinia": "^3.0.2", "pinia": "^3.0.2",

File diff suppressed because it is too large Load Diff

View File

@ -48,11 +48,9 @@ function goMessageDetail(message: ListItem) {
}); });
} }
</script> </script>
<template> <template>
<div class="notice-container border-[1px] border-solid border-[#f0f0f0] dark:border-[#303030]" @click="goMessageDetail(noticeItem)"> <div class="notice-container border-0 border-b-[1px] border-solid border-[#f0f0f0] dark:border-[#303030]" @click="goMessageDetail(noticeItem)">
<!--<el-avatar v-if="noticeItem.cover" :size="30" :src="noticeItem.cover" class="notice-container-avatar" />--> <el-avatar v-if="noticeItem.cover" :size="30" :src="noticeItem.cover" class="notice-container-avatar" fit="cover" />
<img v-if="noticeItem.cover" :src="noticeItem.cover" alt="" 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 <el-tooltip
@ -101,14 +99,11 @@ function goMessageDetail(message: ListItem) {
align-items: flex-start; align-items: flex-start;
justify-content: space-between; justify-content: space-between;
padding: 12px 0; padding: 12px 0;
margin: 2px 0 0 0;
// border-bottom: 1px solid #f0f0f0; // border-bottom: 1px solid #f0f0f0;
.notice-container-avatar { .notice-container-avatar {
width: 30px; margin-right: 4px;
margin-right: 8px;
object-fit: cover;
background: #fff; background: #fff;
} }
@ -128,7 +123,7 @@ function goMessageDetail(message: ListItem) {
.notice-title-content { .notice-title-content {
flex: 1; flex: 1;
width: 200px; width: 180px;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;

View File

@ -3,6 +3,7 @@ import { throttle } from '@pureadmin/utils';
import { ElNotification, ElTag } from 'element-plus'; import { ElNotification, ElTag } from 'element-plus';
import { getMessageReceivedPageByUser } from '@/api/v1/message/messageReceived'; import { getMessageReceivedPageByUser } from '@/api/v1/message/messageReceived';
import { $t } from '@/plugins/i18n'; import { $t } from '@/plugins/i18n';
import { router } from '@/store/utils';
export interface ListItem { export interface ListItem {
messageId: string; messageId: string;
@ -129,8 +130,10 @@ const showNotification = (NotificationList) => {
NotificationList.forEach((message) => { NotificationList.forEach((message) => {
ElNotification({ ElNotification({
title: message?.title, title: message?.title,
position: 'bottom-left',
duration: 2000,
message: ( message: (
<div class="flex "> <div class="flex" onClick={() => router.push(`/message-detail/${message.messageType}/${message.messageId}`)}>
<img src={message.cover} alt="" style={{ width: '50px', height: '50px', objectFit: 'cover' }} /> <img src={message.cover} alt="" style={{ width: '50px', height: '50px', objectFit: 'cover' }} />
<div class="flex justify-between mt-3 mx-2"> <div class="flex justify-between mt-3 mx-2">
<span class="mr-2">{message.description}</span> <span class="mr-2">{message.description}</span>
@ -138,7 +141,6 @@ const showNotification = (NotificationList) => {
</div> </div>
</div> </div>
), ),
position: 'bottom-right',
}); });
}); });
} }

View File

@ -19,7 +19,7 @@ const loading = ref(false);
const { t } = useI18n(); const { t } = useI18n();
const ruleForm = reactive({ const ruleForm = reactive({
username: 'bunny', username: 'Administrator',
password: 'admin123', password: 'admin123',
type: currentPage.value, type: currentPage.value,
}); });

View File

@ -74,7 +74,7 @@ onMounted(() => {
<el-form ref="formRef" :model="formState" :rules="rules" class="w-[100%] p-5" label-width="100px"> <el-form ref="formRef" :model="formState" :rules="rules" class="w-[100%] p-5" label-width="100px">
<!-- 标题 --> <!-- 标题 -->
<el-form-item :label="$t('title')" prop="title"> <el-form-item :label="$t('title')" prop="title">
<el-input v-model="formState.title" /> <el-input v-model="formState.title" maxlength="8" show-word-limit />
</el-form-item> </el-form-item>
<!-- 消息类型 --> <!-- 消息类型 -->
@ -151,7 +151,7 @@ onMounted(() => {
<!-- 简介 --> <!-- 简介 -->
<el-form-item :label="$t('summary')" prop="summary"> <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-input v-model="formState.summary" :autosize="{ minRows: 3, maxRows: 6 }" maxlength="200" minlength="4" show-word-limit type="textarea" />
</el-form-item> </el-form-item>
<!-- 消息等级 --> <!-- 消息等级 -->
@ -163,7 +163,7 @@ onMounted(() => {
<!-- 消息等级简介 --> <!-- 消息等级简介 -->
<el-form-item :label="$t('extra')" prop="extra"> <el-form-item :label="$t('extra')" prop="extra">
<el-input v-model="formState.extra" maxlength="20" minlength="10" show-word-limit type="text" /> <el-input v-model="formState.extra" maxlength="5" show-word-limit type="text" />
</el-form-item> </el-form-item>
<!-- 提交 --> <!-- 提交 -->

View File

@ -22,7 +22,7 @@ editorConfig.MENU_CONF['uploadImage'] = {
allowedFileTypes: ['image/png', 'image/jpg', 'image/jpeg'], allowedFileTypes: ['image/png', 'image/jpg', 'image/jpeg'],
meta: { type: 'message' }, meta: { type: 'message' },
// TODO Authorization // TODO Authorization
headers: { Authorization: token.value }, headers: { Authorization: `Bearer ${token.value}` },
// //
customInsert(res: any, insertFn) { customInsert(res: any, insertFn) {
// res.data.url // res.data.url

View File

@ -3,7 +3,6 @@ import { onMounted, ref } from 'vue';
import { FormInstance } from 'element-plus'; import { FormInstance } from 'element-plus';
import { coverUrl, editorTypeList, loading, onSearchUserinfo, onUpload, rules, updateMessage, userDataList } from '@/views/message-manger/message-send/utils'; import { coverUrl, editorTypeList, loading, onSearchUserinfo, onUpload, rules, updateMessage, userDataList } from '@/views/message-manger/message-send/utils';
import { $t } from '@/plugins/i18n'; import { $t } from '@/plugins/i18n';
import { usePublicHooks } from '@/views/hooks';
import { useMessageTypeStore } from '@/store/message/messageType'; import { useMessageTypeStore } from '@/store/message/messageType';
import LoadingSvg from '@/assets/svg/loading.svg'; import LoadingSvg from '@/assets/svg/loading.svg';
import { beforeUpload, messageLevel, settingLR } from '@/views/message-manger/message-editing/utils'; import { beforeUpload, messageLevel, settingLR } from '@/views/message-manger/message-editing/utils';
@ -13,8 +12,6 @@ import RichEditor from '@/views/message-manger/message-send/components/rich-edit
import MarkdownEditor from '@/views/message-manger/message-send/components/markdown-editor.vue'; import MarkdownEditor from '@/views/message-manger/message-send/components/markdown-editor.vue';
import ImageLoading from '@/components/Upload/ImageLoading.vue'; import ImageLoading from '@/components/Upload/ImageLoading.vue';
//
const { switchStyle } = usePublicHooks();
const formRef = ref<FormInstance>(); const formRef = ref<FormInstance>();
const messageTypeStore = useMessageTypeStore(); const messageTypeStore = useMessageTypeStore();
@ -38,7 +35,7 @@ defineExpose({ formRef });
<el-form ref="formRef" :model="updateMessage" :rules="rules" class="w-[100%] p-5" label-width="auto"> <el-form ref="formRef" :model="updateMessage" :rules="rules" class="w-[100%] p-5" label-width="auto">
<!-- 标题 --> <!-- 标题 -->
<el-form-item :label="$t('title')" prop="title"> <el-form-item :label="$t('title')" prop="title">
<el-input v-model="updateMessage.title" /> <el-input v-model="updateMessage.title" maxlength="8" show-word-limit />
</el-form-item> </el-form-item>
<!-- 消息类型 --> <!-- 消息类型 -->
@ -135,7 +132,7 @@ defineExpose({ formRef });
<!-- 消息等级简介 --> <!-- 消息等级简介 -->
<el-form-item :label="$t('extra')" prop="extra"> <el-form-item :label="$t('extra')" prop="extra">
<el-input v-model="updateMessage.extra" maxlength="20" minlength="10" show-word-limit type="text" /> <el-input v-model="updateMessage.extra" maxlength="4" show-word-limit type="text" />
</el-form-item> </el-form-item>
</el-form> </el-form>
</template> </template>

View File

@ -24,7 +24,7 @@ export const updateMessage = reactive({
// 封面 // 封面
cover: undefined, cover: undefined,
// 消息接受人ids // 消息接受人ids
receivedUserIds: undefined, receivedUserIds: [],
// 发送人用户ID // 发送人用户ID
sendUserId: undefined, sendUserId: undefined,
// 发送人昵称 // 发送人昵称
@ -79,6 +79,9 @@ export async function onUpdate(row: any) {
username: item.username, username: item.username,
})); }));
updateMessage.receivedUserIds = messageSendStore.receivedUserinfoList.map((item: any) => item.receivedUserId); updateMessage.receivedUserIds = messageSendStore.receivedUserinfoList.map((item: any) => item.receivedUserId);
// 消息接受去重
const set = new Set(updateMessage.receivedUserIds);
updateMessage.receivedUserIds = Array.from(set);
// 设置封面图片 // 设置封面图片
coverUrl.value = row.cover; coverUrl.value = row.cover;
@ -99,10 +102,7 @@ export async function onUpdate(row: any) {
data.content = encode(data.content); data.content = encode(data.content);
// 更新消息内容 // 更新消息内容
const result = await messageSendStore.editMessage({ const result = await messageSendStore.editMessage({ ...data, id: row.id });
...data,
id: row.id,
});
if (!result) return; if (!result) return;
Object.assign(updateMessage, {}); Object.assign(updateMessage, {});
done(); done();

View File

@ -40,6 +40,7 @@ export default ({ mode }: ConfigEnv): UserConfigExport => {
exclude, exclude,
}, },
build: { build: {
outDir: 'docker/dist',
// https://cn.vitejs.dev/guide/build.html#browser-compatibility // https://cn.vitejs.dev/guide/build.html#browser-compatibility
target: 'es2015', target: 'es2015',
sourcemap: false, sourcemap: false,