From a1590d9201ac30960e1ed8b77f40704a72ff2ccc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=AE=87?= Date: Wed, 2 Jul 2025 22:55:42 +0800 Subject: [PATCH 1/4] 1 --- oo_list_manager/static/src/views/list/list_controller.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/oo_list_manager/static/src/views/list/list_controller.js b/oo_list_manager/static/src/views/list/list_controller.js index 53f1b4429..ebd1ffd53 100644 --- a/oo_list_manager/static/src/views/list/list_controller.js +++ b/oo_list_manager/static/src/views/list/list_controller.js @@ -33,7 +33,7 @@ patch(ListController.prototype, { onWillStart(async () => { const manager_data = await this.orm.call('ir.ui.view', 'get_manager_data', [this.env.config.viewId]); - if (!Object.keys(manager_data).length) { + if (!Object.keys(manager_data).length || !manager_data.columns) { this.ooManager.columns.forEach(val => { val.visibility = !!!val.column_invisible; }) @@ -41,6 +41,7 @@ patch(ListController.prototype, { Object.assign(this.ooManager, manager_data); this.archInfo.advanced_filter = this.ooManager.filter; } + this.ooManager.show = manager_data.show; }) usePosition('ooListRef', () => this.ooManagerRef.el, { From e70294c3887231159141ea83b34844daded2d124 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=AE=87?= Date: Wed, 2 Jul 2025 22:57:10 +0800 Subject: [PATCH 2/4] 1 --- oo_list_manager/__manifest__.py | 38 ++--- oo_list_manager/models/ir_ui_view.py | 20 +-- .../static/src/views/list/list_controller.js | 30 ++-- .../static/src/views/list/list_controller.xml | 46 +++--- .../static/src/views/list/list_renderer.js | 152 +++++++++++------- tree_view_advanced_filter/__manifest__.py | 3 +- .../js/list_view_sticky_header_and_column.js | 21 ++- .../list_view_sticky_header_and_column.xml | 55 ++++--- .../static/src/web_list_num/list_renderer.js | 12 +- 9 files changed, 216 insertions(+), 161 deletions(-) diff --git a/oo_list_manager/__manifest__.py b/oo_list_manager/__manifest__.py index 2c4de9c41..00233c276 100644 --- a/oo_list_manager/__manifest__.py +++ b/oo_list_manager/__manifest__.py @@ -1,39 +1,31 @@ # -*- coding: utf-8 -*- { - 'name': "oo_list_manager", - - 'summary': "Short (1 phrase/line) summary of the module's purpose", - - 'description': """ -Long description of module's purpose + "name": "oo_list_manager", + "summary": "Short (1 phrase/line) summary of the module's purpose", + "description": """ + Long description of module's purpose """, - - 'author': "My Company", - 'website': "https://www.yourcompany.com", - + "author": "My Company", + "website": "https://www.yourcompany.com", # Categories can be used to filter modules in modules listing # Check https://github.com/odoo/odoo/blob/15.0/odoo/addons/base/data/ir_module_category_data.xml # for the full list - 'category': 'Uncategorized', - 'version': '0.1', - + "category": "Uncategorized", + "version": "0.1", # any module necessary for this one to work correctly - 'depends': ['base', 'web', 'tree_view_advanced_filter'], - + "depends": ["base", "web", "tree_view_advanced_filter"], # always loaded - 'data': [ + "data": [ # 'security/ir.model.access.csv', - 'views/ir_ui_view.xml' ], # only loaded in demonstration mode "application": True, "auto_install": False, - 'license': 'LGPL-3', - 'assets': { - 'web.assets_backend': [ - 'oo_list_manager/static/src/views/list/*', - 'oo_list_manager/static/src/views/auto_hide_list/*', + "license": "LGPL-3", + "assets": { + "web.assets_backend": [ + "oo_list_manager/static/src/views/list/*", + "oo_list_manager/static/src/views/auto_hide_list/*", ] }, } - diff --git a/oo_list_manager/models/ir_ui_view.py b/oo_list_manager/models/ir_ui_view.py index f9355119f..14b516f39 100644 --- a/oo_list_manager/models/ir_ui_view.py +++ b/oo_list_manager/models/ir_ui_view.py @@ -4,27 +4,15 @@ from odoo import models, fields, api class IrUiView(models.Model): - _inherit = 'ir.ui.view' + _inherit = "ir.ui.view" - manager_data = fields.Json(string='data') - group_ids = fields.Many2many('res.groups', string='Groups') + manager_data = fields.Json(string="data") def get_manager_data(self): - if not self: - return {} self.ensure_one() - - resp = self.manager_data or {} - resp.update({ - 'show': self.env.uid in self.group_ids.users.ids - }) - return resp + return self.manager_data or {} def save_manager_data(self, manager_data): - if not self: - return False self.ensure_one() - self.sudo().write({ - 'manager_data': manager_data - }) + self.sudo().write({"manager_data": manager_data}) return True diff --git a/oo_list_manager/static/src/views/list/list_controller.js b/oo_list_manager/static/src/views/list/list_controller.js index ebd1ffd53..b53e82485 100644 --- a/oo_list_manager/static/src/views/list/list_controller.js +++ b/oo_list_manager/static/src/views/list/list_controller.js @@ -1,13 +1,13 @@ /** @odoo-module **/ -import {ListController} from "@web/views/list/list_controller"; -import {patch} from "@web/core/utils/patch"; -import {onWillStart, useState, useRef, useExternalListener} from "@odoo/owl"; -import {Dropdown} from "@web/core/dropdown/dropdown"; -import {CheckBox} from "@web/core/checkbox/checkbox"; -import {useSortable} from "@web/core/utils/sortable_owl"; -import {useService} from "@web/core/utils/hooks"; -import {usePosition} from "@web/core/position_hook"; +import { ListController } from "@web/views/list/list_controller"; +import { patch } from "@web/core/utils/patch"; +import { onWillStart, useState, useRef, useExternalListener } from "@odoo/owl"; +import { Dropdown } from "@web/core/dropdown/dropdown"; +import { CheckBox } from "@web/core/checkbox/checkbox"; +import { useSortable } from "@web/core/utils/sortable_owl"; +import { useService } from "@web/core/utils/hooks"; +import { usePosition } from "@web/core/position_hook"; patch(ListController.prototype, { @@ -24,6 +24,7 @@ patch(ListController.prototype, { key: '', filter: false, serial_num: false, + frozen_columns: 0, // 新增字段 columns: this.archInfo.columns.filter((column) => { if (column.type === "field" && column.widget !== 'handle') { return column @@ -33,7 +34,7 @@ patch(ListController.prototype, { onWillStart(async () => { const manager_data = await this.orm.call('ir.ui.view', 'get_manager_data', [this.env.config.viewId]); - if (!Object.keys(manager_data).length || !manager_data.columns) { + if (!Object.keys(manager_data).length) { this.ooManager.columns.forEach(val => { val.visibility = !!!val.column_invisible; }) @@ -41,7 +42,6 @@ patch(ListController.prototype, { Object.assign(this.ooManager, manager_data); this.archInfo.advanced_filter = this.ooManager.filter; } - this.ooManager.show = manager_data.show; }) usePosition('ooListRef', () => this.ooManagerRef.el, { @@ -106,7 +106,7 @@ patch(ListController.prototype, { * @param params */ sortColumnDrop(params) { - const {element, previous} = params; + const { element, previous } = params; const fromId = element.dataset.id; const toId = previous ? previous.dataset.id : null; @@ -144,10 +144,18 @@ patch(ListController.prototype, { columns: this.ooManager.columns, filter: this.ooManager.filter, serial_num: this.ooManager.serial_num, + frozen_columns: this.ooManager.frozen_columns, // 加入保存 } ] ); }, + onChangeFrozenColumns() { + this.isChange = true; + this.saveManagerData(); + }, + updateForzenColumns(num) { + this.ooManager.frozen_columns = num; + } }) ListController.components = { diff --git a/oo_list_manager/static/src/views/list/list_controller.xml b/oo_list_manager/static/src/views/list/list_controller.xml index 14a6c4de4..c47aae9a2 100644 --- a/oo_list_manager/static/src/views/list/list_controller.xml +++ b/oo_list_manager/static/src/views/list/list_controller.xml @@ -1,32 +1,37 @@ - -