odoo17 前端 在头像下拉 dropdown 自定义菜单

news/2024/11/14 12:55:00 标签: 前端, odoo, odoo17

odoo17___dropdown__1">odoo17 前端 在头像下拉 dropdown 自定义菜单

其实很简单, 我们先找到原来已经创建好的, 找到代码位置

使用 我的资料 为例 odoo-17.0\addons\hr\static\src\user_menu\my_profile.js

/** @odoo-module **/

import { _t } from "@web/core/l10n/translation";
import { registry } from "@web/core/registry";
import { preferencesItem } from "@web/webclient/user_menu/user_menu_items";

export function hrPreferencesItem(env)  {
    return Object.assign(
        {}, 
        preferencesItem(env),
        {
            description: _t('My Profile'),
        }
    );
}

registry.category("user_menuitems").add('profile', hrPreferencesItem, { force: true })

可以看到这个注册类型在 user_menuitems

需要添加的也在这个类别中添加

如此操作

自定义一个模块, 继承 base, web 模块, 目录结构

└─demo
    │  __init__.py
    │  __manifest__.py
    ├─static
    │  └─src
    │      ├─js
    │      │   demo_item_service.js
    │      │   menu_item_demo.js

一样的, 先创建 menu_item_demo.js 文件

/** @odoo-module **/
import {registry} from "@web/core/registry";
import {_t} from "@web/core/l10n/translation";


export function menuItemDemo(env) {
    return {
        type: "item",  
        id: "menu_item_demo",  // 自定义id
        description: _t("这是新加的"),  // 页面显示的标题
        callback: async function () {
            // 点击执行回调, 需要执行的东西放这里, 我这里是打开一个dialog弹框
            env.services.demo_dialog.demoOpenDialog();
        },
        sequence: 51,
    };
}

// 对应的 user_menuitems 分类, 添加自己的方法
// 返回值固定写法, 可以多参考源码中写法
// type: 目前我发现有两个可选项
// 	- item: 占完整行
// 	- Switch: 滑动开关
registry.category("user_menuitems").add("pfp", menuItemDemo);

重启刷新就展示这个菜单了

callback 方法是点击后执行, 我这使用弹窗作为展示, 调用另外文件, 也可以直接写在这

还没结束

env.services 是内部注册的服务

demo_item_service.js 服务编写

服务可以自定义的, 但是为了规范,还是跟着项目写

/** @odoo-module **/

import {registry} from "@web/core/registry";
// 导入内置的dialog弹框
import {ConfirmationDialog} from "@web/core/confirmation_dialog/confirmation_dialog";

export const demoItemService = {
    // 添加依赖
    dependencies: ["dialog", "ui"],
    // 固定写法, 初始化执行方法
    start(env, {dialog, ui}) {
        let isPaletteOpened = false;
		// 页面点击后执行这个方法, 根据自己需求执行内容
        // 可以自己创建 组件 component 然后使用
        function demoOpenDialog() {
            isPaletteOpened = true;
            dialog.add(ConfirmationDialog, {
                body: "This is a demo dialog",  // 弹出框内容
                title: "Demo dialog",
                cancel: () => {  // 取消按钮回调
                    console.log('cancel')
                },
                confirm: () => {  // 确定按钮回调
                    console.log('confirm')
                },
            });
        }
		// 一定要返回出去, 不然外面用不到
        return {
            demoOpenDialog,
        };
    }
}
// 注册服务类, 给定id, 后面使用
registry.category("services").add("demo_dialog", demoItemService);

到这里js已经全部写好了, 执行导出 __manifest__.py

{
    'name': 'Demo',
    'version': '1.3',
    'category': 'Hidden',
    'description': """""",
    'depends': ['base', 'web'],
    'data': [
    ],
    'assets': {
        'web.assets_backend': [  // js/xml导出在这
            'demo/static/src/**/*',  // 重点是这里导出, 别用错了
        ],
    },
    'installable': True,
    'auto_install': True,
    'license': 'LGPL-3',
}

页面展示

这里只是做弹出框展示,如果需要更多的自己写模版, 方便自己处理后续问题


http://www.niftyadmin.cn/n/5751925.html

相关文章

【机器学习chp2】贝叶斯最优分类器、概率密度函数的参数估计、朴素贝叶斯分类器、高斯判别分析。万字超详细分析总结与思考

前言,请先看。 本文的《一》《二》属于两个单独的知识点:共轭先验和Laplace平滑,主要因为他们在本文的后续部分经常使用,又因为他们是本人的知识盲点,所以先对这两个知识进行了分析,后续内容按照标题中的顺…

torch.stack 张量维度的变化

torch.stack 是 PyTorch 中用于将一系列张量沿一个新的维度堆叠的函数。与 torch.cat 不同的是,torch.stack会在指定的维度上增加一个新的维度,而不是将张量直接拼接。 基本用法 语法: torch.stack(tensors, dim0)tensors: 一个张量列表&a…

如何让网站支持多语言

在开发支持多语言的网站时,存储和管理不同语言的内容是关键。以下是几种常用的方法: 数据库存储 方案:在数据库中为多语言内容设计表结构。通常会有一个 translations 表,包含以下字段: id:主键content_id&…

Unity3D学习FPS游戏(12)敌人检测和攻击玩家

前言:上一篇实现了敌人能动,有了点乐趣,但是敌人和玩家没什么对抗性。本篇将实现敌人追击玩家,并攻击玩家。 敌人攻击玩家 敌人检测玩家目标思路-碰撞检测的Trigger触发实现 敌人攻击目标思路-模仿玩家发射子弹的思路实现 效果 敌…

深度解读UI设计:从概念到实践一站式知晓

在当今数字化的时代,我们与各种电子设备和软件应用的交互日益频繁。而在这背后,UI设计(User Interface Design,用户界面设计)起着至关重要的作用,它直接影响着用户与产品之间的交互体验和视觉感受。那么&am…

0-Equity-Transformer:求解NP-Hard Min-Max路由问题的顺序生成算法(AAAI-24)(完)(code)

文章目录 AbstractIntroduction问题表述Methodology多智能体位置编码公平上下文编码训练方案ExperimentsmTSP的性能评估mPDP的性能评估Related WorkConclusionAbstract 最小最大路由问题旨在通过智能体合作完成任务来最小化多个智能体中最长行程的长度。这些问题包括对现实世界…

Ubuntu 22.04 ftp搭建

1、安装ftp服务 sudo apt-get install vsftpd 2、FTP安装完成后,会默认为我们创建用户名为ftp的用户,默认无密码。我们需要为其设置密码。输入 sudo passwd ftp 3、创建ftp用户的home目录 sudo mkdir /home/ftp 4、设置ftp目录的权限 sudo chmod 777 /ho…

Python毕业设计选题:基于django+vue的仓库管理系统设计

开发语言:Python框架:djangoPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 管理员登录 管理员功能界面 用户管理 公告信息管理 产品信息管理 产品类型管理 用户…