+
+
+
+
@@ -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);
+ }
+}
diff --git a/src/utils/event-bus.js b/src/utils/event-bus.js
new file mode 100644
index 0000000..31f7a5b
--- /dev/null
+++ b/src/utils/event-bus.js
@@ -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;
diff --git a/src/views/desk/completedTasks.vue b/src/views/desk/completedTasks.vue
index 019fb7d..9622ea9 100644
--- a/src/views/desk/completedTasks.vue
+++ b/src/views/desk/completedTasks.vue
@@ -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) {
diff --git a/src/views/desk/myMessage.vue b/src/views/desk/myMessage.vue
index 66fa9ae..1845b63 100644
--- a/src/views/desk/myMessage.vue
+++ b/src/views/desk/myMessage.vue
@@ -15,22 +15,25 @@
@selection-change="selectionChange"
@on-load="onLoad"
>
-
- 已读
- 未读
-
-
- 标记已读
-
-
- {{row.content}}
-
+
+ 已读
+ 未读
+
+
+ 标记已读
+
+
+ {{
+ row.content
+ }}
+
diff --git a/src/views/desk/todoList.vue b/src/views/desk/todoList.vue
index e169aec..289bbe1 100644
--- a/src/views/desk/todoList.vue
+++ b/src/views/desk/todoList.vue
@@ -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;
- // },
+
},
};
diff --git a/vite.config.mjs b/vite.config.mjs
index 3b8551c..1797640 100644
--- a/vite.config.mjs
+++ b/vite.config.mjs
@@ -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',