Odoo15基于hr_org_chart的res.partner组件SCSS不加载问题
Odoo15 中 res.partner 模型无法加载组织架构组件SCSS样式的问题分析
我在Odoo15中基于hr_org_chart模块开发了一个展示公司架构的组件,需求是在res.partner模型中显示公司结构。目前组件可正常运行,但在res.partner模型中无法加载SCSS样式;即使使用原生hr_org_widget,在res.partner中同样无SCSS样式,仅在hr.employee模型中显示正常。涉及代码文件包括__manifest__.py、variables.scss、company_chart.scss、company_chart.js。
可能的原因及排查方向
1. SCSS资源的加载范围未覆盖res.partner模型
Odoo的前端资源(如SCSS)通过模块__manifest__.py的assets字段指定加载场景。原生hr_org_chart的SCSS可能仅绑定了hr.employee相关视图或模型的上下文,导致res.partner视图触发时未加载对应样式。
- 检查模块
__manifest__.py的assets配置,确认是否将SCSS文件添加到web.assets_backend这类全局后端资产包,而非仅关联hr模块专属的资产包(比如hr.assets_hr)。 - 错误示例:仅把SCSS归入
hr.assets_hr,这样只有HR模块视图会加载样式,res.partner属于基础模块视图,不会触发加载。
2. 样式选择器依赖hr.employee视图的专属上下文
原生hr_org_widget的SCSS可能使用了仅在hr.employee视图中存在的父级选择器(比如.o_hr_employee_form),导致样式在res.partner视图中无法匹配生效。
- 查看
company_chart.scss中的选择器,确认是否依赖hr.employee表单特有的类名。如果是,需要修改选择器,使其能匹配res.partner视图中的组件容器。 - 示例问题:原样式用
.o_hr_employee_form .org-chart,但res.partner视图中没有.o_hr_employee_form父容器,样式自然无法生效。
3. 前端资源缓存未更新
Odoo存在前端资源缓存机制,若SCSS文件已更新但缓存未清理,res.partner视图可能仍加载旧的无样式资源。
- 执行Odoo资产打包命令强制刷新资源:
./odoo-bin --addons-path=addons -d your_db --load-web-assets - 用
Ctrl+Shift+R强制刷新浏览器,清理客户端缓存。
4. 组件挂载容器的DOM结构差异
hr.employee模型中,hr_org_widget挂载的容器有特定样式上下文,而res.partner视图的容器缺少这些上下文类,导致SCSS样式无法继承或生效。
- 对比
hr.employee和res.partner视图中组件挂载容器的DOM结构与类名差异,调整company_chart.scss的选择器适配新容器。
内容的提问来源于stack exchange,提问作者LukaszK
相关产品推荐
相关产品推荐

