1. 整理 只处理 oo_list_manager 在视图中增加字段,不显示问题.

2. 调整方案: 如果字段名和 视图的字段名不一致,则重置已经通过oo_list_manger 设置的方案.
原因: oo_l 模块 设置保存了方案, 不会再通过 视图去取字段.
This commit is contained in:
sunjie
2025-08-04 00:37:44 +08:00
parent a57370f099
commit 42d43de220
2 changed files with 45 additions and 20 deletions
@@ -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, {
@@ -35,15 +35,37 @@ patch(ListController.prototype, {
})
});
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 {
Object.assign(this.ooManager, manager_data);
this.archInfo.advanced_filter = this.ooManager.filter;
// 简化逻辑:如果字段不一致(字段名判断),则重置视图
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 => {
val.visibility = !!!val.column_invisible;
});
} else {
// 字段一致,使用保存的配置
Object.assign(this.ooManager, manager_data);
this.archInfo.advanced_filter = this.ooManager.filter;
}
}
this.ooManager.show = manager_data.show;
})
@@ -147,7 +169,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;
@@ -23,12 +23,14 @@ class OvertimeApprovals(models.Model):
is_issues = fields.Boolean(string='是否上会')
issues_result = fields.Html(string="会议结果")
details = fields.Text(string="加班说明")
meal = fields.Selection([('yes', '是'), ('no', '否')], string="误餐费", default=None)
employee_ids = fields.Many2many('hr.employee', string="加班人", default=lambda self: self.env['hr.employee'].search([('user_id', '=', self.env.uid)]))
meal = fields.Selection([('yes', '是'), ('no', '否')], string="误餐费", default=None)
employee_ids = fields.Many2many('hr.employee', string="加班人", default=lambda self: self.env['hr.employee'].search(
[('user_id', '=', self.env.uid)]))
related_issues_id = fields.Many2one('issue.library', string="关联议题")
documents_ids = fields.Many2many('ir.attachment', string="附件")
duration = fields.Float(string="时长", compute='_compute_duration', store=True, help="如果时长大于8则按8小时算")
real_duration = fields.Float(string="实际时长", compute='_compute_duration', store=True, help="如果时长大于8则按实际时长算")
real_duration = fields.Float(string="实际时长", compute='_compute_duration', store=True,
help="如果时长大于8则按实际时长算")
overtime_hours = fields.Float(string="本月加班时长")
start_time = fields.Datetime(string="开始时间")
start_week = fields.Char(string="星期", compute='_compute_weekday')
@@ -41,6 +43,7 @@ class OvertimeApprovals(models.Model):
active = fields.Boolean('Active', default=True, tracking=True)
work_end = fields.Boolean(string="结束")
test_field = fields.Char(string="测试字段")
def _get_default_name_title(self):
return self._description if self._description else self._name
@@ -76,7 +79,7 @@ class OvertimeApprovals(models.Model):
rec.duration = 0.0
rec.real_duration = 0.0
if rec.duration > 8 :
if rec.duration > 8:
rec.real_duration = 8
@api.depends('start_time', 'end_time')
@@ -98,7 +101,7 @@ class OvertimeApprovals(models.Model):
company_id = vals.get('company_id')
if company_id:
company = self.env['res.company'].browse(company_id)
if company.name == '天河物管' :
if company.name == '天河物管':
if vals.get('duration'):
if (vals['duration']) % 1 != 0.5:
raise ValidationError("时长不对!请重新编辑")
@@ -168,16 +171,16 @@ class OvertimeApprovals(models.Model):
meal_number = employee_id.meal_number
record.overtime_hours = employee_id.holiday_overtime_hours + employee_id.weekend_overtime_hours + employee_id.normal_overtime_hours
if self.meal == 'yes':
meal_number +=1
employee_id.write({'meal_number':meal_number})
meal_number += 1
employee_id.write({'meal_number': meal_number})
holiday_status_id = self.env['hr.leave.type'].search([('name', '=', '补休')])
allocation = self.env['hr.leave.allocation'].create({
'employee_id': employee_id.id,
'name': '补休',
'number_of_days': self.real_duration/7,
'number_of_days': self.real_duration / 7,
'holiday_status_id': holiday_status_id.id,
'allocation_type': 'regular',
"number_of_days_display": self.real_duration/7,
"number_of_days_display": self.real_duration / 7,
})
if allocation:
allocation.sudo().action_validate()