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 a6efb61e3..7cead7e9c 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,onWillRender} 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, { @@ -18,13 +18,15 @@ patch(ListController.prototype, { this.ooColumnsRef = useRef('ooColumnsRef'); this.ooManagerRef = useRef('ooManagerRef'); this.ooListRef = useRef('ooListRef'); - this.ooManager = useState({ state: false, key: '', filter: false, serial_num: false, sticky_end: false, + default_order_field: '', + default_order_type: 'asc', + default_page_size: 0, columns: this.archInfo.columns.filter((column) => { if (column.type === "field" && column.widget !== 'handle') { return column @@ -34,28 +36,20 @@ patch(ListController.prototype, { return column.name }) }); - - console.log(this.ooManager.columns) - onWillStart(async () => { const manager_data = await this.orm.call('ir.ui.view', 'get_manager_data', [this.env.config.viewId]); - console.log(manager_data) if (!Object.keys(manager_data).length || !manager_data.columns) { this.ooManager.columns.forEach(val => { val.visibility = !!!val.column_invisible; }) } else { - // 简化逻辑:如果字段不一致(字段名判断),则重置视图 const currentColumns = this.ooManager.columns; const savedColumns = manager_data.columns || []; - // 比较字段名是否一致 const currentColumnNames = currentColumns.map(col => col.name).sort(); const savedColumnNames = savedColumns.map(col => col.name).sort(); - const isFieldConsistent = JSON.stringify(currentColumnNames) === JSON.stringify(savedColumnNames); - if (!isFieldConsistent) { // 字段不一致,重置视图配置 this.ooManager.columns.forEach(val => { @@ -69,7 +63,19 @@ patch(ListController.prototype, { } this.ooManager.show = manager_data.show; }) - + onWillRender(() => { + if (this.ooManager.default_page_size>0) { + this.model.config.limit = this.ooManager.default_page_size; + // this.model.load(); + } + if (this.ooManager.default_order_field) { + this.model.config.orderBy = []; + this.model.config.orderBy.push({ + name: this.ooManager.default_order_field, + [this.ooManager.default_order_type]: true + }); + } + }); usePosition('ooListRef', () => this.ooManagerRef.el, { position: "bottom-start", }) @@ -84,7 +90,6 @@ patch(ListController.prototype, { useExternalListener(window, "click", this.onGlobalClick.bind(this)); }, - onGlobalClick(ev) { if (this.ooListRef.el && !this.ooListRef.el.contains(ev.target)) { this.ooManager.state = false; @@ -169,7 +174,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; @@ -192,7 +197,6 @@ patch(ListController.prototype, { this.ooManager.columns = columns; }, - /** * 保存 * @returns {*} @@ -208,7 +212,10 @@ patch(ListController.prototype, { columns: this.ooManager.columns, filter: this.ooManager.filter, serial_num: this.ooManager.serial_num, - sticky_end: this.ooManager.sticky_end + sticky_end: this.ooManager.sticky_end, + default_order_field: this.ooManager.default_order_field, + default_order_type: this.ooManager.default_order_type, + default_page_size: this.ooManager.default_page_size, } ] ); 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 b5db23122..8a9e0eaa6 100644 --- a/oo_list_manager/static/src/views/list/list_controller.xml +++ b/oo_list_manager/static/src/views/list/list_controller.xml @@ -39,6 +39,41 @@ + +