Odoo 18 客户端动作(Client Action)配置指南
1. 定义客户端动作的XML菜单
在模块的 views 目录下创建 client_action_views.xml 文件,定义 ir.actions.client 记录及关联的菜单项:
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
  <data>
    <!-- 客户端动作定义 -->
    <record id="dashboard_ir_actions_client" model="ir.actions.client">
      <field name="name">仪表盘</field>
      <field name="tag">test_model.dashboard</field> <!-- 唯一标识符,关联前端组件 -->
      <!-- 可选参数:target指定打开方式(current/main/fullscreen/new) -->
      <!-- <field name="target">main</field> -->
    </record>
    <!-- 菜单项定义 -->
    <menuitem 
      name="仪表盘" 
      id="advanced_dashboard_menu" 
      sequence="1" 
      action="dashboard_ir_actions_client"
    />
  </data>
</odoo>
        
关键参数说明
tag客户端动作的唯一标识符,用于前端组件注册时匹配(需与JavaScript代码中的注册标签一致)。target控制动作的显示方式:
- current:在主内容区域打开(默认)。
- fullscreen:全屏模式打开。
- new:在对话框/弹出窗口中打开。
- main:重置面包屑导航(清除历史路径)。
params(可选)传递给前端的参数(如Python字典格式的键值对)。
2. 实现前端组件(JavaScript)
在模块的 static/src/js 目录下创建 client_action.js,继承OWL的 Component 类并注册动作:
/** @odoo-module **/
import { registry } from '@web/core/registry';
import { Component } from '@odoo/owl';
// 定义仪表盘组件
export class AdvancedDashboard extends Component {
  setup() {
    // 初始化逻辑(如数据加载、服务调用)
  }
}
// 注册组件为客户端动作(tag需与XML中的tag一致)
AdvancedDashboard.template = "test_model.advanced_dashboard"; // 关联模板名称
registry.category("actions").add("test_model.dashboard", AdvancedDashboard);
        
3. 定义模板(XML)
在 static/src/xml 目录下创建 client_action.xml,定义组件的UI结构:
<?xml version="1.0" encoding="UTF-8"?>
<templates xml:space="preserve">
  <t t-name="test_model.advanced_dashboard">
    <div class="o_dashboard">
      <h1>通过客户端动作渲染的仪表盘</h1>
      <!-- 动态内容可通过props或服务注入 -->
    </div>
  </t>
</templates>
        
关键说明:t-name 需与JavaScript中 AdvancedDashboard.template 属性完全匹配。
4. 配置模块清单(manifest.py)
在 __manifest__.py 中确保XML和静态资源正确加载:
{
    'name': '高级仪表盘',
    'version': '1.0',
    'depends': ['web'],
    'data': [
        'views/client_action_views.xml',  # 加载XML菜单和动作
    ],
    'assets': {
        'web.assets_backend': [
            'test_model/static/src/js/client_action.js',  # 后端加载JS组件
            'test_model/static/src/xml/client_action.xml',  # 后端加载XML模板
        ],
    },
}
        
操作验证
- 升级模块:在Odoo后台启用开发者模式,升级当前模块。
- 查看效果:在菜单中找到新增的“仪表盘”菜单项,点击后应显示模板定义的页面内容。 
扩展说明
- 参数传递:通过 ir.actions.client 的 params 字段传递数据(如 {'key': 'value'}),在前端组件中通过 this.props 获取。
- 复杂交互:结合Odoo的服务(如 rpc、dialog)实现数据请求、弹窗等功能。
- 动作类型:除普通页面渲染外,客户端动作还可用于触发弹窗、导航跳转等前端逻辑。
通过以上步骤,可在Odoo 18中灵活配置客户端动作,实现自定义用户交互逻辑。