diff --git a/jikimo_frontend/__manifest__.py b/jikimo_frontend/__manifest__.py index ea28cb5f..81eb73e0 100644 --- a/jikimo_frontend/__manifest__.py +++ b/jikimo_frontend/__manifest__.py @@ -24,12 +24,15 @@ 'jikimo_frontend/static/src/fields/custom_many2many_checkboxes/*', 'jikimo_frontend/static/src/scss/custom_style.scss', # 'jikimo_frontend/static/src/views/list_nums/list_nbCols.js', - # 'jikimo_frontend/static/src/views/list_nums/list_nums.xml', - # 'jikimo_frontend/static/src/views/list_nums/list_nums2.xml', - # 'jikimo_frontend/static/src/views/list_nums/list_nums3.xml', + 'jikimo_frontend/static/src/views/list_nums/list_nums.xml', + 'jikimo_frontend/static/src/views/list_nums/list_nums2.xml', + 'jikimo_frontend/static/src/views/list_nums/list_nums3.xml', 'jikimo_frontend/static/src/js/custom_form_status_indicator.js', 'jikimo_frontend/static/src/scss/rowno_in_tree.scss', - 'jikimo_frontend/static/src/views/list_nums/list_render.xml', + # 'jikimo_frontend/static/src/views/list_nums/list_render.xml', + 'jikimo_frontend/static/src/list/list_up_down_button.xml', + 'jikimo_frontend/static/src/list/custom_import.js', + 'jikimo_frontend/static/src/list/custom_width.js', ], diff --git a/jikimo_frontend/static/src/list/custom_width.js b/jikimo_frontend/static/src/list/custom_width.js new file mode 100644 index 00000000..e7cc7b68 --- /dev/null +++ b/jikimo_frontend/static/src/list/custom_width.js @@ -0,0 +1,172 @@ +/** @odoo-module */ + +import {patch} from '@web/core/utils/patch'; +import {ListRenderer} from "@web/views/list/list_renderer" + +// var {patch} = require("web.utils") 这句话也行 + +patch(ListRenderer.prototype, 'jikimo_frontend.ListRenderer', { + // 你可以重写或者添加一些方法和属性 + // The following code manipulates the DOM directly to avoid having to wait for a + // render + patch which would occur on the next frame and cause flickering. + freezeColumnWidths() { + if (!this.keepColumnWidths) { + this.columnWidths = null; + } + + const table = this.tableRef.el; + const headers = [...table.querySelectorAll("thead th:not(.o_list_actions_header)")]; + // 列数+1 + const columnsLength = headers.length + 1; + + if (!this.columnWidths || !this.columnWidths.length) { + // no column widths to restore + // Set table layout auto and remove inline style to make sure that css + // rules apply (e.g. fixed width of record selector) + table.style.tableLayout = "auto"; + headers.forEach((th) => { + th.style.width = null; + th.style.maxWidth = null; + }); + + this.setDefaultColumnWidths(columnsLength); + + // Squeeze the table by applying a max-width on largest columns to + // ensure that it doesn't overflow + this.columnWidths = this.computeColumnWidthsFromContent(); + table.style.tableLayout = "fixed"; + } + headers.forEach((th, index) => { + if (!th.style.width) { + th.style.width = `${Math.floor(this.columnWidths[index])}px`; + } + }); + }, + + setDefaultColumnWidths(columnsLength) { + const widths = this.state.columns.map((col) => this.calculateColumnWidth(col)); + const sumOfRelativeWidths = widths + .filter(({ type }) => type === "relative") + .reduce((sum, { value }) => sum + value, 0); + + // // 计算新增列的权重 + // const newColumnWeight = 0.1; + // + // // 新增列后的总权重 + // const totalWeights = sumOfRelativeWidths + newColumnWeight; + + // 1 because nth-child selectors are 1-indexed, 2 when the first column contains + // the checkboxes to select records. + const columnOffset = this.hasSelectors ? 2 : 1; + // widths.forEach(({ type, value }, i) => { + // const headerEl = this.tableRef.el.querySelector(`th:nth-child(${i + columnOffset})`); + // if (type === "absolute") { + // if (this.isEmpty) { + // headerEl.style.width = value; + // } else { + // headerEl.style.minWidth = value; + // } + // } else if (type === "relative" && this.isEmpty) { + // // headerEl.style.width = `${((value / sumOfRelativeWidths) * 100).toFixed(2)}%`; + // headerEl.style.width = `${100 / columnsLength}%`; + // } + // }); + + // widths.forEach(({ type, value }, i) => { + // const headerEl = this.tableRef.el.querySelector(`th:nth-child(${i + columnOffset})`); + // if (type === "absolute") { + // if (this.isEmpty) { + // headerEl.style.width = value; + // } else { + // headerEl.style.minWidth = value; + // } + // } else if (type === "relative" && this.isEmpty) { + // + // if (i === 0) { + // // 第一列 + // headerEl.style.width = `3.2%`; + // + // } else { + // headerEl.style.width = `${100 / columnsLength}%`; + // } + // + // } + // + // }); + + widths.forEach(({ type, value }, i) => { + const headerEl = this.tableRef.el.querySelector(`th:nth-child(${i + columnOffset})`); + const column = this.state.columns[i]; // 获取当前列的对象 + if (type === "absolute") { + if (this.isEmpty) { + headerEl.style.width = value; + } else { + headerEl.style.minWidth = value; + } + } else if (type === "relative" && this.isEmpty) { + + if (i === 0) { + // 第一列 + headerEl.style.width = `${1}%`; + } else if (column.name === "sequence") { + // sequence列 + headerEl.style.width = `${1}%`; + } else if (column.name === "name") { + // name列 + headerEl.style.width = `${20}%`; + + } else { + headerEl.style.width = `${100 / columnsLength}%`; + } + + } else { + headerEl.style.width = `${100 / columnsLength}%`; + } + + }); + + + + + + + // widths.forEach(({type, value}, i) => { + // + // const headerEl = this.tableRef.el.querySelector(`th:nth-child(${i + columnOffset})`); + // + // if (type === 'absolute') { + // // 原有绝对宽度逻辑 + // } else if (type === 'relative' && this.isEmpty) { + // + // if (i === columnsLength - 1) { + // // 新增列按权重分配 + // headerEl.style.width = `${(newColumnWeight/totalWeights) * 100}%`; + // + // } else { + // // 原相对列按权重分配 + // headerEl.style.width = `${(value/totalWeights) * 100}%`; + // } + // + // } + // + // }); + }, + // calculateColumnWidth(column) { + // if (column.options && column.rawAttrs.width) { + // return { type: "absolute", value: column.rawAttrs.width }; + // } + // + // if (column.type !== "field") { + // return { type: "relative", value: 1 }; + // } + // + // const type = column.widget || this.props.list.fields[column.name].type; + // if (type in FIXED_FIELD_COLUMN_WIDTHS) { + // return { type: "absolute", value: FIXED_FIELD_COLUMN_WIDTHS[type] }; + // } + // + // return { type: "relative", value: 1 }; + // } + +} +); diff --git a/jikimo_frontend/static/src/list/list_up_down_button.xml b/jikimo_frontend/static/src/list/list_up_down_button.xml new file mode 100644 index 00000000..8bd28f5e --- /dev/null +++ b/jikimo_frontend/static/src/list/list_up_down_button.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/jikimo_frontend/static/src/scss/rowno_in_tree.scss b/jikimo_frontend/static/src/scss/rowno_in_tree.scss index f5aa2914..c244ad7d 100644 --- a/jikimo_frontend/static/src/scss/rowno_in_tree.scss +++ b/jikimo_frontend/static/src/scss/rowno_in_tree.scss @@ -1,3 +1,4 @@ .row_no { - width:4% !important; + width: 3.2% !important; + vertical-align: middle; } diff --git a/jikimo_frontend/static/src/views/list_nums/list_nums.xml b/jikimo_frontend/static/src/views/list_nums/list_nums.xml index 6424887a..d2ad6824 100644 --- a/jikimo_frontend/static/src/views/list_nums/list_nums.xml +++ b/jikimo_frontend/static/src/views/list_nums/list_nums.xml @@ -5,7 +5,7 @@ - + diff --git a/sf_plan/models/custom_plan.py b/sf_plan/models/custom_plan.py index 064a1e20..e80a7783 100644 --- a/sf_plan/models/custom_plan.py +++ b/sf_plan/models/custom_plan.py @@ -63,6 +63,14 @@ class sf_production_plan(models.Model): # picking_type_id = fields.Many2one('stock.picking.type', 'Operation Type', compute='_compute_orderpoint_id') # move_dest_ids = fields.One2many('stock.move', 'created_production_id', compute='_compute_orderpoint_id') + @api.model + def get_import_templates(self): + """returns the xlsx import template file""" + return [{ + 'label': _('导入计划数据'), + 'template': '/sf_plan/static/src/xlsx/sf_production_plan.xlsx' + }] + @api.model def _compute_orderpoint_id(self): pass diff --git a/sf_plan/static/src/xlsx/sf_production_plan.xlsx b/sf_plan/static/src/xlsx/sf_production_plan.xlsx new file mode 100644 index 00000000..a82cab58 Binary files /dev/null and b/sf_plan/static/src/xlsx/sf_production_plan.xlsx differ