小红点
This commit is contained in:
@@ -391,7 +391,20 @@ class SoongWorkflowCommentWizard(models.TransientModel):
|
||||
return record_id.users_id.employee_id
|
||||
return self.env['hr.employee'] # 默认返回空记录集
|
||||
|
||||
def _send_workflow_notifications(self, partners=None):
|
||||
""" 通知前端刷新红点、播放音频
|
||||
:param partners: 需要通知的用户(res.partner)
|
||||
"""
|
||||
if not partners:
|
||||
partners = self.env['res.partner'].search([])
|
||||
bus_message = {'type': 'wkf_notify'}
|
||||
notifications = [[partner, 'sun_badge_menu.reload_menu_data', [bus_message]] for partner in partners]
|
||||
self.env["bus.bus"]._sendmany(notifications)
|
||||
|
||||
def add_comment(self):
|
||||
# test
|
||||
return self._send_workflow_notifications()
|
||||
|
||||
self.ensure_one()
|
||||
cx = self.env.context.copy() or {}
|
||||
record_id = self.env[self.res_model].search([('id', '=', self.res_id)])
|
||||
|
||||
@@ -1,19 +1,65 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import {NavBar} from "@web/webclient/navbar/navbar";
|
||||
import {patch} from "@web/core/utils/patch";
|
||||
import { browser } from "@web/core/browser/browser";
|
||||
import { NavBar } from "@web/webclient/navbar/navbar";
|
||||
import { patch } from "@web/core/utils/patch";
|
||||
import { deepCopy } from "@web/core/utils/objects";
|
||||
import { useService } from "@web/core/utils/hooks";
|
||||
import { url } from "@web/core/utils/urls";
|
||||
|
||||
const WKF_NOTIFY_TYPE = 'wkf_notify'
|
||||
|
||||
patch(NavBar.prototype, {
|
||||
setup() {
|
||||
super.setup();
|
||||
this.busService = this.env.services.bus_service
|
||||
console.log(this.env.services.bus_service)
|
||||
// 监听后端发送的信号,重新加载菜单数据
|
||||
this.busService.subscribe("sun_badge_menu.reload_menu_data", () => {
|
||||
//
|
||||
console.log('重新加载数据...')
|
||||
this.audio = new Audio();
|
||||
this.audio.src = this.audio.canPlayType("audio/ogg; codecs=vorbis")
|
||||
? url("/mail/static/src/audio/ting.ogg")
|
||||
: url("/mail/static/src/audio/ting.mp3");
|
||||
/**
|
||||
* 监听后端发送的信号,重新加载菜单数据
|
||||
* 1. 通知类型为WKF_NOTIFY_TYPE时,直接刷新菜单播放音频
|
||||
* 2. 其余则通过菜单badge_count对比
|
||||
*/
|
||||
this.busService.subscribe("sun_badge_menu.reload_menu_data", (detail) => {
|
||||
console.log('[sun_badge_menu.reload_menu_data]重新加载数据...')
|
||||
debugger
|
||||
for (const d of detail) {
|
||||
if (d?.type === WKF_NOTIFY_TYPE) {
|
||||
this.menuService.reload();
|
||||
return this.audio.play().catch((e) => {
|
||||
console.log(e)
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const oldMenuApps = deepCopy(this.menuService.getApps())
|
||||
this.menuService.reload();
|
||||
const getReduceCount = (value) => {
|
||||
return value ? value.reduce((count, app) => count + (app?.badge_count || 0), 0) : 0;
|
||||
}
|
||||
browser.setTimeout(() => {
|
||||
debugger
|
||||
const oldCount = getReduceCount(oldMenuApps)
|
||||
const newMenuApps = this.menuService.getApps()
|
||||
const newCount = getReduceCount(newMenuApps)
|
||||
if (newCount > oldCount) {
|
||||
return this.audio.play().catch((e) => {
|
||||
console.log(e)
|
||||
});
|
||||
}
|
||||
if (oldMenuApps.length === newMenuApps.length) {
|
||||
const oldCountArr = oldMenuApps.map((app) => (app?.badge_count || 0))
|
||||
const newCountArr = newMenuApps.map((app) => (app?.badge_count || 0))
|
||||
for (let i = 0; i < oldMenuApps.length; i++) {
|
||||
if (oldCountArr[i] < newCountArr[i]) {
|
||||
return this.audio.play().catch((e) => {
|
||||
console.log(e)
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}, 300)
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user