工作台功能调整

dev-scheduling
姜雪 1 month ago
parent fc0d72c277
commit 0ba6f9af20
  1. 25
      src/api/desk/myMessage.js
  2. 74
      src/page/index/top/index.vue
  3. 22
      src/utils/event-bus.js
  4. 11
      src/views/desk/completedTasks.vue
  5. 167
      src/views/desk/myMessage.vue
  6. 42
      src/views/desk/todoList.vue
  7. 6
      vite.config.mjs

@ -14,3 +14,28 @@ export const getList = (current, size, params) => {
});
};
export const update = ids => {
return request({
url: '/blade-desk/mesNotifyMessage/read',
method: 'post',
params: {
ids,
},
cryptoToken: false,
cryptoData: false,
});
};
export const count = (current, size, params) => {
return request({
url: '/blade-desk/mesNotifyMessage/count',
method: 'get',
params: {
...params,
current,
size,
},
cryptoToken: false,
cryptoData: false,
});
};

@ -26,9 +26,10 @@
<div class="top-bar__item">
<top-login :iconName="'system-management'" :contentTooltip="'单点登录'" :color="setting.styleRadio == 4 && '#fff'"></top-login>
</div>
<div class="top-bar__item" :title="'消息'">
<el-badge :value="200" :max="99" class="item">
<el-icon>
<div class="top-bar__item" :title="'消息'">
<el-badge @click="readMsg" :value="unreadCount" :max="99" class="item msg-icon">
<el-icon >
<Bell />
</el-icon>
</el-badge>
@ -139,7 +140,8 @@ import { getUserInfo as getUerOauthInfo } from '@/api/user';
import { validatenull } from '@/utils/validate';
import func from '@/utils/func';
import { color } from 'echarts';
import { count } from '@/api/desk/myMessage';
import EventBus from '@/utils/event-bus';
export default {
components: {
topLock,
@ -156,6 +158,7 @@ export default {
name: 'top',
data() {
return {
unreadCount: 0, //
userId: '',
roleId: '',
roleName: '',
@ -222,6 +225,26 @@ export default {
created() {
this.init();
},
mounted() {
//
console.log('事件监听已注册');
EventBus.$on('message-read', this.handleMessageRead);
// localStorage
window.addEventListener('storage', this.handleStorageChange);
},
beforeUnmount() {
//
console.log('取消事件监听');
EventBus.$off('message-read', this.handleMessageRead);
window.removeEventListener('storage', this.handleStorageChange);
},
handleStorageChange(event) {
if (event.key === 'message-read-timestamp') {
console.log('检测到消息已读(storage事件)');
this.getUnreadCount();
}
},
computed: {
func() {
return func;
@ -239,6 +262,13 @@ export default {
]),
},
methods: {
readMsg() {
this.$router.push({
path: '/desk/myMessage',
// state: { id: row.id }
});
// this.$message.info('...');
},
openSearch() {
// this.$store.commit('SET_IS_SEARCH', true);
console.log('route--------------------',this.$router)
@ -281,6 +311,26 @@ export default {
this.roleId = res.data.roleId;
this.deptId = res.data.deptId;
});
//
this.getUnreadCount();
},
getUnreadCount() {
console.log('开始获取未读数量...');
count('').then(res => {
console.log('获取未读数量响应:', res);
if (res.data.code === 200 && res.data.data) {
console.log('更新 unreadCount:', res.data.data);
this.unreadCount = res.data.data;
}
}).catch(err => {
console.error('获取未读消息数量失败:', err);
});
},
handleMessageRead() {
//
console.log('收到消息已读事件,更新未读数量');
this.getUnreadCount();
},
toDashboard() {
this.$router.push({ path: '/' });
@ -407,4 +457,20 @@ export default {
.bar_title_third{
margin-left: 245px;
}
//
.msg-icon {
cursor: pointer;
transition: all 0.3s ease;
font-size: 18px;
&:hover {
color: #409EFF;
transform: scale(1.1);
}
&:active {
transform: scale(0.95);
}
}
</style>

@ -0,0 +1,22 @@
// Vue 3 事件总线
const EventBus = {
events: {},
$on(event, callback) {
if (!this.events[event]) {
this.events[event] = [];
}
this.events[event].push(callback);
},
$off(event, callback) {
if (this.events[event]) {
this.events[event] = this.events[event].filter(cb => cb !== callback);
}
},
$emit(event, data) {
if (this.events[event]) {
this.events[event].forEach(callback => callback(data));
}
}
};
export default EventBus;

@ -88,7 +88,7 @@ export default {
column: [
{
label: '类型',
prop: 'type',
prop: 'bizType',
sortable: false,
type: 'select',
filter: true,
@ -103,7 +103,7 @@ export default {
},
{
label: '标题',
prop: 'title',
prop: 'content',
sortable: false,
filter: true,
span: 12,
@ -112,7 +112,7 @@ export default {
},
{
label: '创建人',
prop: 'createUser',
prop: 'createUserName',
sortable: false,
filter: true,
span: 12,
@ -180,9 +180,10 @@ export default {
this.onLoad(this.page);
},
searchChange(params, done) {
this.query = params;
console.log('搜索参数:', params);
this.query = params;
this.page.currentPage = 1;
this.onLoad();
this.onLoad(this.page);
done();
},
currentChange(currentPage) {

@ -15,22 +15,25 @@
@selection-change="selectionChange"
@on-load="onLoad"
>
<template #status="{row}">
<el-tag v-if="row.status === 1" type="info">已读</el-tag>
<el-tag v-if="row.status === 2" type="success">未读</el-tag>
</template>
<template #menu-left>
<el-button type="primary" @click="handleRead">标记已读</el-button>
</template>
<template #content="{row}">
<span @click="hanleView(row)" style="color:#284c89;cursor:pointer">{{row.content}}</span>
</template>
<template #status="{ row }">
<el-tag v-if="row.status === 1" type="info">已读</el-tag>
<el-tag v-if="row.status === 0" type="success">未读</el-tag>
</template>
<template #menu-left>
<el-button type="primary" @click="handleRead">标记已读</el-button>
</template>
<template #content="{ row }">
<span @click="hanleView(row)" style="color: #284c89; cursor: pointer">{{
row.content
}}</span>
</template>
</avue-crud>
</basic-container>
</template>
<script>
import { getList} from '@/api/desk/myMessage';
import { getList, update } from '@/api/desk/myMessage';
import EventBus from '@/utils/event-bus';
export default {
data() {
return {
@ -46,8 +49,8 @@ export default {
option: {
columnSort: true,
tip: false,
height: "auto",
align: "center",
height: 'auto',
align: 'center',
calcHeight: 32,
simplePage: false,
searchShow: true,
@ -61,9 +64,9 @@ export default {
viewBtn: false,
delBtn: true,
editBtn: true,
editBtnText: "修改",
editBtnIcon: " ",
delBtnIcon: " ",
editBtnText: '修改',
editBtnIcon: ' ',
delBtnIcon: ' ',
addBtn: false,
labelWidth: 120,
searchLabelWidth: 120,
@ -76,18 +79,18 @@ export default {
gridBtn: false,
searchShowBtn: false,
showOverflowTooltip: true,
searchLabelPosition: "left",
searchLabelPosition: "left",
searchLabelPosition: 'left',
searchLabelPosition: 'left',
searchGutter: 24,
searchSpan: 6,
menuAlign: "left",
menuAlign: 'left',
gridBtn: false,
searchMenuPosition: "right",
addBtnIcon: " ",
viewBtnIcon: " ",
delBtnIcon: " ",
editBtnIcon: " ",
menu:false,
searchMenuPosition: 'right',
addBtnIcon: ' ',
viewBtnIcon: ' ',
delBtnIcon: ' ',
editBtnIcon: ' ',
menu: false,
column: [
{
@ -112,10 +115,9 @@ export default {
searchLabelWidth: 90,
display:false,
},
{
label: '消息类型',
prop: 'type',
prop: 'bizType',
sortable: false,
type: 'select',
filter: true,
@ -140,7 +142,7 @@ export default {
},
{
label: '未读',
value: '2',
value: '0',
},
],
filter: true,
@ -152,8 +154,8 @@ export default {
label: '发送时间',
prop: 'approvalTime',
type: 'date',
format:"YYYY-MM-DD",
valueFormat:"YYYY-MM-DD",
format: 'YYYY-MM-DD',
valueFormat: 'YYYY-MM-DD',
searchRange:true,
sortable: false,
filter: true,
@ -179,19 +181,32 @@ export default {
data: [],
};
},
computed: {
ids() {
let ids = [];
this.selectionList.forEach(ele => {
ids.push(ele.id);
});
return ids.join(',');
},
},
created() {
this.onLoad(this.page);
},
methods: {
searchReset() {
this.query = {};
this.onLoad(this.page);
},
searchChange(params, done) {
console.log('搜索参数:', params);
this.query = params;
this.page.currentPage = 1;
this.onLoad();
this.onLoad(this.page);
done();
},
selectionChange(list){
this.selectionList = list;
selectionChange(list) {
this.selectionList = list;
},
currentChange(currentPage) {
this.page.currentPage = currentPage;
@ -202,69 +217,47 @@ export default {
refreshChange() {
this.onLoad();
},
hanleView(row){
this.$refs.crud.rowView(row)
hanleView(row) {
this.$refs.crud.rowView(row);
},
handleRead(){
if(this.selectionList.length == 0){
this.$message.error('请至少选择一条数据!');
return
}
let tmp = this.selectionList.find(item => item.status == 1)
if(tmp){
this.$message.error('请选择状态为【未读】的数据!')
return
}
handleRead() {
if (this.selectionList.length == 0) {
this.$message.error('请至少选择一条数据!');
return;
}
let tmp = this.selectionList.find(item => item.status == 1);
console.log(tmp, '111');
if (tmp) {
this.$message.error('请选择状态为【未读】的数据!');
return;
} else {
console.log(this.ids);
this.$confirm('确定将选择消息标记为已读?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
update(this.ids).then(() => {
this.$message.success('操作成功!');
this.onLoad(this.page);
//
console.log('触发消息已读事件');
EventBus.$emit('message-read');
// localStorage
localStorage.setItem('message-read-timestamp', Date.now());
});
});
}
},
onLoad(page, params = {}) {
onLoad(page, params = {}) {
getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
console.log(res,'00000001');
const data = res.data.data;
this.page.total = data.total;
this.data = data.records;
this.loading = false;
});
},
// onLoad(page, params = {}) {
// this.loading = true;
// this.data = [
// {
// id: 1,
// type: 1,
// title: '',
// content:"",
// createUser: '',
// status:1,
// approvalTime:"2026-01-18 22:15:30",
// createTime: '2026-01-05 09:06:32',
// },
// {
// id: 2,
// type: 2,
// title: '',
// content:"",
// createUser: '',
// status:1,
// approvalTime:"2026-01-18 22:15:30",
// createTime: '2026-01-12 09:06:32',
// },
// {
// id: 3,
// type: 1,
// title: '',
// content:"",
// createUser: '',
// status:2,
// approvalTime:"2026-01-18 22:15:30",
// createTime: '2026-01-15 09:06:32',
// },
// ];
// this.page.total = this.data.length;
// this.loading = false;
// },
},
};
</script>

@ -66,7 +66,7 @@ export default {
column: [
{
label: '业务类型',
label: '类型',
prop: 'bizType',
sortable: false,
type: 'select',
@ -75,13 +75,13 @@ export default {
search: true,
searchLabelWidth: 90,
dicData: [
{ label: '外协审批', value: 'testType' },
{ label: '外协审批', value: 1 },
{ label: '仓管审批', value: 2 },
{ label: '槽液审批', value: 3 },
],
},
{
label: '业务内容',
label: '标题',
prop: 'content',
sortable: false,
filter: true,
@ -91,7 +91,7 @@ export default {
},
{
label: '创建人',
prop: 'currentRoleName',
prop: 'createUserName',
sortable: false,
filter: true,
span: 12,
@ -144,12 +144,15 @@ export default {
},
searchReset() {
this.query = {};
this.onLoad(this.page);
},
searchChange(params, done) {
console.log('搜索参数:', params);
this.query = params;
this.page.currentPage = 1;
this.onLoad();
this.onLoad(this.page);
done();
},
currentChange(currentPage) {
@ -174,34 +177,7 @@ export default {
});
},
// onLoad(page, params = {}) {
// this.loading = true;
// this.data = [
// {
// id: 1,
// type: 1,
// title: '',
// createUser: '',
// createTime: '2026-01-05 09:06:32',
// },
// {
// id: 2,
// type: 2,
// title: '',
// createUser: '',
// createTime: '2026-01-12 09:06:32',
// },
// {
// id: 3,
// type: 3,
// title: '',
// createUser: '',
// createTime: '2026-01-15 09:06:32',
// },
// ];
// this.page.total = this.data.length;
// this.loading = false;
// },
},
};
</script>

@ -61,12 +61,12 @@ export default ({ mode, command }) => {
port: 2888,
proxy: {
'/api': {
target: 'http://192.168.0.104:80',//本地
target: 'http://192.168.0.115:80',//本地
// target: 'http://192.168.1.5:82',
// target: "http://192.168.1.4:82",
// target:'http://49.232.74.228:82',
// target: 'http://49.232.74.228:82',
// target: "http://192.168.0.7",
//target: 'https://saber3.bladex.cn/api',
// target: 'https://saber3.bladex.cn/api',
// target: 'http://49.232.74.228:82',
// target: "http:192.168.0.220:80",
// target: 'http:49.232.74.228:49',

Loading…
Cancel
Save