From f4072ce20e15bf8a07ff8ac718b38810522e4ead Mon Sep 17 00:00:00 2001 From: ivan deng Date: Sun, 19 Feb 2023 01:09:07 +0800 Subject: [PATCH] update odoo customize set lang --- app_odoo_customize/__manifest__.py | 3 +- app_odoo_customize/models/ir_http.py | 3 + .../switch_lang_menu/switch_lang_menu.js | 53 +++++++++++ .../switch_lang_menu/switch_lang_menu.xml | 59 ++++++++++++ app_odoo_customize/static/src/js/user_menu.js | 95 +++++++++---------- .../static/src/webclient/user_menu.xml | 16 ++++ app_web_enterprise/__manifest__.py | 1 + .../static/src/xml/form_label.xml | 10 ++ 8 files changed, 187 insertions(+), 53 deletions(-) create mode 100644 app_odoo_customize/static/description/switch_lang_menu/switch_lang_menu.js create mode 100644 app_odoo_customize/static/description/switch_lang_menu/switch_lang_menu.xml create mode 100644 app_odoo_customize/static/src/webclient/user_menu.xml create mode 100644 app_web_enterprise/static/src/xml/form_label.xml diff --git a/app_odoo_customize/__manifest__.py b/app_odoo_customize/__manifest__.py index 1f6273fa..e24a72da 100644 --- a/app_odoo_customize/__manifest__.py +++ b/app_odoo_customize/__manifest__.py @@ -23,7 +23,7 @@ { 'name': 'odoo 16 Customize OEM(Boost, Data reset)', - 'version': '16.23.02.17', + 'version': '16.23.02.19', 'author': 'Sunpop.cn', 'category': 'Productivity', 'website': 'https://www.sunpop.cn', @@ -75,6 +75,7 @@ 'app_odoo_customize/static/src/js/user_menu.js', 'app_odoo_customize/static/src/js/ribbon.js', 'app_odoo_customize/static/src/js/dialog.js', + 'app_odoo_customize/static/src/webclient/**/*.xml', ], }, 'pre_init_hook': 'pre_init_hook', diff --git a/app_odoo_customize/models/ir_http.py b/app_odoo_customize/models/ir_http.py index 9614102c..3eb2e065 100644 --- a/app_odoo_customize/models/ir_http.py +++ b/app_odoo_customize/models/ir_http.py @@ -19,10 +19,13 @@ class IrHttp(models.AbstractModel): result['app_support_url'] = config_parameter.get_param('app_support_url') result['app_account_title'] = config_parameter.get_param('app_account_title') result['app_account_url'] = config_parameter.get_param('app_account_url') + result['app_show_lang'] = config_parameter.get_param('app_show_lang') result['app_show_debug'] = config_parameter.get_param('app_show_debug') result['app_show_documentation'] = config_parameter.get_param('app_show_documentation') result['app_show_documentation_dev'] = config_parameter.get_param('app_show_documentation_dev') result['app_show_support'] = config_parameter.get_param('app_show_support') result['app_show_account'] = config_parameter.get_param('app_show_account') result['app_show_poweredby'] = config_parameter.get_param('app_show_poweredby') + # 增加多语言 + result['app_lang_list'] = self.env['res.lang'].search_read([], ['id', 'code', 'name']) return result diff --git a/app_odoo_customize/static/description/switch_lang_menu/switch_lang_menu.js b/app_odoo_customize/static/description/switch_lang_menu/switch_lang_menu.js new file mode 100644 index 00000000..186cbab3 --- /dev/null +++ b/app_odoo_customize/static/description/switch_lang_menu/switch_lang_menu.js @@ -0,0 +1,53 @@ +/** @odoo-module **/ + +import { Dropdown } from "@web/core/dropdown/dropdown"; +import { DropdownItem } from "@web/core/dropdown/dropdown_item"; +import { useService } from "@web/core/utils/hooks"; +import { registry } from "@web/core/registry"; +import { browser } from "@web/core/browser/browser"; +import { symmetricalDifference } from "@web/core/utils/arrays"; + +import { Component, useState } from "@odoo/owl"; + +export class SwitchLangMenu extends Component { + setup() { + this.LangService = useService("Lang"); + this.currentLang = this.LangService.currentLang; + this.state = useState({ langToSet: [] }); + } + + setLang(LangId) { + this.state.langToSet = symmetricalDifference(this.state.langToSet, [ + LangId, + ]); + browser.clearTimeout(this.toggleTimer); + this.toggleTimer = browser.setTimeout(() => { + this.LangService.set2Lang("toggle", ...this.state.langToSet); + }, this.constructor.toggleDelay); + } + + logIntoLang(LangId) { + browser.clearTimeout(this.toggleTimer); + this.LangService.set2Lang("loginto", LangId); + } + + get selectedCompanies() { + return symmetricalDifference( + this.LangService.allowedLangIds, + this.state.langToSet + ); + } +} +SwitchLangMenu.template = "web.SwitchLangMenu"; +SwitchLangMenu.components = { Dropdown, DropdownItem }; +SwitchLangMenu.toggleDelay = 1000; + +export const systrayItem = { + Component: SwitchLangMenu, + isDisplayed(env) { + const { availableCompanies } = env.services.Lang; + return Object.keys(availableCompanies).length > 1; + }, +}; + +registry.category("systray").add("SwitchLangMenu", systrayItem, { sequence: 1 }); diff --git a/app_odoo_customize/static/description/switch_lang_menu/switch_lang_menu.xml b/app_odoo_customize/static/description/switch_lang_menu/switch_lang_menu.xml new file mode 100644 index 00000000..37a3efae --- /dev/null +++ b/app_odoo_customize/static/description/switch_lang_menu/switch_lang_menu.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+ +
+ + + + +
+
+
+
+ +
diff --git a/app_odoo_customize/static/src/js/user_menu.js b/app_odoo_customize/static/src/js/user_menu.js index 5b71da79..19d74f1f 100644 --- a/app_odoo_customize/static/src/js/user_menu.js +++ b/app_odoo_customize/static/src/js/user_menu.js @@ -12,15 +12,21 @@ const userMenuRegistry = registry.category("user_menuitems"); patch(UserMenu.prototype, "app_odoo_customize.UserMenu", { setup() { this._super.apply(this, arguments); - userMenuRegistry.remove("debug"); - userMenuRegistry.remove("asset_asset"); - userMenuRegistry.remove("leave_debug"); - userMenuRegistry.remove("separator0"); + // this.companyService = useService("company"); + this.rpc = useService("rpc"); + this.orm = useService("orm"); + this.app_show_lang = session.app_show_lang; + this.app_lang_list = session.app_lang_list; + //todo: 演习 shortCutsItem 中的用法,当前是直接 xml 写了展现 + + if (session.app_show_lang) { + userMenuRegistry.add("separator1", separator1) + } if (session.app_show_debug) { - userMenuRegistry.add("debug", debugItem) - .add("asset_asset", activateAssetsDebugging) - .add("leave_debug", leaveDebugMode) - .add("separator0", separator8) + userMenuRegistry.add("debug", debugItem, {'force': true}) + .add("asset_asset", activateAssetsDebugging, {'force': true}) + .add("leave_debug", leaveDebugMode, {'force': true}) + .add("separator10", separator10) } userMenuRegistry.remove("documentation"); if (session.app_show_documentation) { @@ -34,46 +40,23 @@ patch(UserMenu.prototype, "app_odoo_customize.UserMenu", { if (session.app_show_account) { userMenuRegistry.add("odoo_account", odooAccountItem); } - // this.rpc = useService("rpc"); - // todo: 处理语言列表,rpc取值,同上处理 userMenuRegistry.add("slang_"+语言代码, debugItem(语言代码), env) - // todo: 语言图片的处理,正常直接参考 Shortcuts 的处理,直接生成 html代码即可。 - // Shortcuts不成就可以扩展 @web/webclient/user_menu/user_menu, 参考 CheckBox 的处理。建议直接CheckBox这个类型改,增加个 element.img的处理,选中的语言就是 ischecked的 - // - // return env.services.rpc("/web/action/load", { - // action_id: actionID, - // additional_context: context, - // }); - /* - - self._rpc({ - model: 'res.lang', - method: 'search_read', - domain: [], - fields: ['name', 'code'], - lazy: false, - }).then(function (res) { - _.each(res, function (lang) { - var a = ''; - if (lang['code'] === session.user_context.lang) { - a = ''; - } else { - a = ''; - } - lang_list += '' + lang['name'] + a + ''; - }); - lang_list += '