|
@@ -2,11 +2,11 @@
|
|
|
<div class="flex">
|
|
|
<template v-if="!isMobile">
|
|
|
<!--全屏 -->
|
|
|
- <div class="setting-item" @click="toggle">
|
|
|
- <svg-icon
|
|
|
- :icon-class="isFullscreen ? 'fullscreen-exit' : 'fullscreen'"
|
|
|
- />
|
|
|
- </div>
|
|
|
+ <!-- <div class="setting-item" @click="toggle">-->
|
|
|
+ <!-- <svg-icon-->
|
|
|
+ <!-- :icon-class="isFullscreen ? 'fullscreen-exit' : 'fullscreen'"-->
|
|
|
+ <!-- />-->
|
|
|
+ <!-- </div>-->
|
|
|
|
|
|
<!-- <!– 布局大小 –>
|
|
|
<el-tooltip
|
|
@@ -24,17 +24,37 @@
|
|
|
<!-- 用户头像 -->
|
|
|
<el-dropdown class="setting-item" trigger="click">
|
|
|
<div class="flex-center h100% p10px">
|
|
|
- <img :src="userStore.user.avatar + '?imageView2/1/w/80/h/80'"
|
|
|
- class="rounded-full mr-10px w24px w24px" />
|
|
|
- <el-badge v-if="unReadMessageNum > 0" :value="unReadMessageNum" :max="10">
|
|
|
+ <img
|
|
|
+ v-if="userStore.user.avatar"
|
|
|
+ :src="getHeader"
|
|
|
+ object-fit="cover"
|
|
|
+ style="
|
|
|
+ width: 30px;
|
|
|
+ height: 30px;
|
|
|
+ border-radius: 15px;
|
|
|
+ margin-right: 10px;
|
|
|
+ "
|
|
|
+ />
|
|
|
+ <el-badge
|
|
|
+ v-if="unReadMessageNum > 0"
|
|
|
+ :value="unReadMessageNum"
|
|
|
+ :max="10"
|
|
|
+ >
|
|
|
<span>{{ userStore.user.username }}</span>
|
|
|
</el-badge>
|
|
|
<span v-else>{{ userStore.user.username }}</span>
|
|
|
</div>
|
|
|
<template #dropdown>
|
|
|
<el-dropdown-menu>
|
|
|
+ <el-dropdown-item divided @click="userCenter">
|
|
|
+ 个人中心
|
|
|
+ </el-dropdown-item>
|
|
|
<el-dropdown-item divided @click="openMessageDialog">
|
|
|
- <el-badge v-if="unReadMessageNum > 0" :value="unReadMessageNum" :max="10">
|
|
|
+ <el-badge
|
|
|
+ v-if="unReadMessageNum > 0"
|
|
|
+ :value="unReadMessageNum"
|
|
|
+ :max="10"
|
|
|
+ >
|
|
|
<span>消息中心</span>
|
|
|
</el-badge>
|
|
|
<span v-else>消息中心</span>
|
|
@@ -48,47 +68,46 @@
|
|
|
|
|
|
<!-- 设置 -->
|
|
|
<template v-if="defaultSettings.showSettings">
|
|
|
- <div class="setting-item" @click="settingStore.settingsVisible = true">
|
|
|
- <svg-icon icon-class="setting" />
|
|
|
- </div>
|
|
|
+ <!-- <div class="setting-item" @click="settingStore.settingsVisible = true">-->
|
|
|
+ <!-- <svg-icon icon-class="setting" />-->
|
|
|
+ <!-- </div>-->
|
|
|
</template>
|
|
|
|
|
|
<el-dialog
|
|
|
- v-model="dialog.visible"
|
|
|
- :title="dialog.title"
|
|
|
- width="980px"
|
|
|
- min-height="800px"
|
|
|
- @close="dialog.visible = false">
|
|
|
+ v-model="dialog.visible"
|
|
|
+ :title="dialog.title"
|
|
|
+ width="980px"
|
|
|
+ min-height="800px"
|
|
|
+ @close="dialog.visible = false"
|
|
|
+ >
|
|
|
<el-tabs type="border-card" @tab-click="clickTab">
|
|
|
<el-tab-pane label="通知消息">
|
|
|
<div class="mainContentBox">
|
|
|
<avue-crud
|
|
|
- :option="options"
|
|
|
- v-model:page="page"
|
|
|
- :table-loading="loading"
|
|
|
- @size-change="handleQuery"
|
|
|
- @current-change="handleQuery"
|
|
|
- :data="pageData"
|
|
|
- >
|
|
|
- </avue-crud>
|
|
|
+ :option="options"
|
|
|
+ v-model:page="page"
|
|
|
+ :table-loading="loading"
|
|
|
+ @size-change="handleQuery"
|
|
|
+ @current-change="handleQuery"
|
|
|
+ :data="pageData"
|
|
|
+ />
|
|
|
</div>
|
|
|
</el-tab-pane>
|
|
|
<el-tab-pane label="系统消息">
|
|
|
<div class="mainContentBox">
|
|
|
<avue-crud
|
|
|
- :option="options"
|
|
|
- v-model:page="page1"
|
|
|
- :table-loading="loading"
|
|
|
- @size-change="handleQuery1"
|
|
|
- @current-change="handleQuery1"
|
|
|
- :data="pageData1"
|
|
|
- >
|
|
|
- </avue-crud>
|
|
|
+ :option="options"
|
|
|
+ v-model:page="page1"
|
|
|
+ :table-loading="loading"
|
|
|
+ @size-change="handleQuery1"
|
|
|
+ @current-change="handleQuery1"
|
|
|
+ :data="pageData1"
|
|
|
+ />
|
|
|
</div>
|
|
|
</el-tab-pane>
|
|
|
</el-tabs>
|
|
|
-
|
|
|
</el-dialog>
|
|
|
+ <UserCenter ref="userCenterRef" />
|
|
|
</div>
|
|
|
</template>
|
|
|
<script setup>
|
|
@@ -100,14 +119,20 @@ import {
|
|
|
} from "@/store";
|
|
|
import defaultSettings from "@/settings";
|
|
|
import { DeviceEnum } from "@/enums/DeviceEnum";
|
|
|
-import {userMessageNum,userMessage,readMessage} from "@/api/system/message"
|
|
|
+import UserCenter from "@/views/login/userCenter.vue";
|
|
|
+import { userMessageNum, userMessage, readMessage } from "@/api/system/message";
|
|
|
const appStore = useAppStore();
|
|
|
const options = ref({});
|
|
|
const loading = ref(false);
|
|
|
const tagsViewStore = useTagsViewStore();
|
|
|
const userStore = useUserStore();
|
|
|
const settingStore = useSettingsStore();
|
|
|
-const unReadMessageNum = ref(null)
|
|
|
+const unReadMessageNum = ref(null);
|
|
|
+const getHeader = computed(() => {
|
|
|
+ let url = import.meta.env.VITE_APP_UPLOAD_URL + userStore.user.avatar;
|
|
|
+ console.log("url", url);
|
|
|
+ return import.meta.env.VITE_APP_UPLOAD_URL + userStore.user.avatar;
|
|
|
+});
|
|
|
const route = useRoute();
|
|
|
const router = useRouter();
|
|
|
const page = ref({ total: 0, currentPage: 1, pageSize: 10 });
|
|
@@ -118,22 +143,22 @@ const dialog = reactive({
|
|
|
title: "消息管理",
|
|
|
visible: false,
|
|
|
type: "0",
|
|
|
- state: "0"
|
|
|
+ state: "0",
|
|
|
});
|
|
|
|
|
|
-const openMessageDialog = ()=>{
|
|
|
- handleQuery()
|
|
|
- dialog.visible = true
|
|
|
-}
|
|
|
+const openMessageDialog = () => {
|
|
|
+ handleQuery();
|
|
|
+ dialog.visible = true;
|
|
|
+};
|
|
|
const isMobile = computed(() => appStore.device === DeviceEnum.MOBILE);
|
|
|
|
|
|
const { isFullscreen, toggle } = useFullscreen();
|
|
|
|
|
|
-const checkUnReadMessageNum =() =>{
|
|
|
- userMessageNum({}).then((data)=>{
|
|
|
- unReadMessageNum.value = data.data
|
|
|
- })
|
|
|
-}
|
|
|
+const checkUnReadMessageNum = () => {
|
|
|
+ userMessageNum({}).then((data) => {
|
|
|
+ unReadMessageNum.value = data.data;
|
|
|
+ });
|
|
|
+};
|
|
|
options.value = {
|
|
|
border: true,
|
|
|
align: "center",
|
|
@@ -149,8 +174,7 @@ options.value = {
|
|
|
label: "标题",
|
|
|
prop: "title",
|
|
|
width: 150,
|
|
|
- overHidden: true
|
|
|
-
|
|
|
+ overHidden: true,
|
|
|
},
|
|
|
{
|
|
|
label: "内容",
|
|
@@ -164,8 +188,8 @@ options.value = {
|
|
|
},
|
|
|
{
|
|
|
label: "时间",
|
|
|
- prop: "created"
|
|
|
- }
|
|
|
+ prop: "created",
|
|
|
+ },
|
|
|
],
|
|
|
};
|
|
|
/**
|
|
@@ -202,28 +226,32 @@ const handleQuery = (params, done) => {
|
|
|
pageSize: page.value.pageSize,
|
|
|
pageNo: page.value.currentPage,
|
|
|
};
|
|
|
- queryMessageList(querySearch,page,pageData,done)
|
|
|
+ queryMessageList(querySearch, page, pageData, done);
|
|
|
};
|
|
|
-const queryMessageList = (searchParams,pageObj,pageDataList,done) =>{
|
|
|
+const queryMessageList = (searchParams, pageObj, pageDataList, done) => {
|
|
|
userMessage(searchParams)
|
|
|
- .then(({ data }) => {
|
|
|
- pageDataList.value = data.records;
|
|
|
- pageObj.value.total = data.totalCount;
|
|
|
- pageObj.value.currentPage = data.pageNo;
|
|
|
- pageObj.value.pageSize = data.pageSize;
|
|
|
+ .then(({ data }) => {
|
|
|
+ pageDataList.value = data.records;
|
|
|
+ pageObj.value.total = data.totalCount;
|
|
|
+ pageObj.value.currentPage = data.pageNo;
|
|
|
+ pageObj.value.pageSize = data.pageSize;
|
|
|
|
|
|
- if(data.records){
|
|
|
- let unreadIds = data.records.filter((item)=>item.readState === '0').map((mes)=>mes.id)
|
|
|
- if(unreadIds.length > 0){
|
|
|
- readMessage(unreadIds).then((data)=>{})
|
|
|
- }
|
|
|
+ if (data.records) {
|
|
|
+ let unreadIds = data.records
|
|
|
+ .filter((item) => item.readState === "0")
|
|
|
+ .map((mes) => mes.id);
|
|
|
+ if (unreadIds.length > 0) {
|
|
|
+ readMessage(unreadIds).then((data) => {});
|
|
|
}
|
|
|
- })
|
|
|
- .finally(() => {
|
|
|
- loading.value = false;
|
|
|
- if (done) { done(); }
|
|
|
- });
|
|
|
-}
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .finally(() => {
|
|
|
+ loading.value = false;
|
|
|
+ if (done) {
|
|
|
+ done();
|
|
|
+ }
|
|
|
+ });
|
|
|
+};
|
|
|
const handleQuery1 = (params, done) => {
|
|
|
loading.value = true;
|
|
|
const querySearch = {
|
|
@@ -231,12 +259,17 @@ const handleQuery1 = (params, done) => {
|
|
|
pageSize: page1.value.pageSize,
|
|
|
pageNo: page1.value.currentPage,
|
|
|
};
|
|
|
- queryMessageList(querySearch,page1,pageData1,done)
|
|
|
+ queryMessageList(querySearch, page1, pageData1, done);
|
|
|
};
|
|
|
|
|
|
onMounted(() => {
|
|
|
- checkUnReadMessageNum()
|
|
|
+ checkUnReadMessageNum();
|
|
|
});
|
|
|
+
|
|
|
+const userCenterRef = ref();
|
|
|
+const userCenter = () => {
|
|
|
+ userCenterRef.value && userCenterRef.value?.show();
|
|
|
+};
|
|
|
</script>
|
|
|
<style lang="scss" scoped>
|
|
|
.setting-item {
|