From 3399f2eb7cc0212a0ae9c5bf072f55fa2d7bce8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=9C=E6=9C=AA=E5=A4=AE?= <2996985766@qq.com> Date: Sat, 6 Sep 2025 23:58:22 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=A2=9E=E5=8A=A0=E5=92=8C?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 隐藏头部菜单默认为:True - 增加开启/关闭全屏功能 - 简易过滤的样式优化 - 仪表台编辑只有管理员可见 --- .../components/quick_filter/quick_filter.xml | 34 +- .../quick_filter/quick_filter_label.scss | 56 + .../static/src/js/ks_dashboard_ninja_new.js | 1060 ++++++++--------- .../src/xml/ks_dashboard_ninja_templates.xml | 2 +- .../__manifest__.py | 2 +- .../static/src/js/navbar.js | 459 +++---- .../src/scss/menu/fullscreen_toggle.scss | 37 + .../static/src/xml/menu.xml | 58 +- 8 files changed, 923 insertions(+), 785 deletions(-) create mode 100644 header_search_panel/static/src/search/header_search/components/quick_filter/quick_filter_label.scss create mode 100644 sh_backmate_theme_adv_enterprise/static/src/scss/menu/fullscreen_toggle.scss diff --git a/header_search_panel/static/src/search/header_search/components/quick_filter/quick_filter.xml b/header_search_panel/static/src/search/header_search/components/quick_filter/quick_filter.xml index 9437a05e6..3133403d6 100644 --- a/header_search_panel/static/src/search/header_search/components/quick_filter/quick_filter.xml +++ b/header_search_panel/static/src/search/header_search/components/quick_filter/quick_filter.xml @@ -1,14 +1,15 @@ - - + -
- -
- -
-
+ + +
+
- -
+
-
- - - + + +
+
+
\ No newline at end of file diff --git a/header_search_panel/static/src/search/header_search/components/quick_filter/quick_filter_label.scss b/header_search_panel/static/src/search/header_search/components/quick_filter/quick_filter_label.scss new file mode 100644 index 000000000..6c55bd8ff --- /dev/null +++ b/header_search_panel/static/src/search/header_search/components/quick_filter/quick_filter_label.scss @@ -0,0 +1,56 @@ +/* label 基础样式 */ +.header-filter-value .selection-options label { + display: inline-block; + margin: 6px 8px 6px 0; + padding: 6px 16px; + font-size: 14px; + line-height: 1.5; + color: #444; + background: #fafafa; + border: 1px solid #e0e0e0; + border-radius: 999px; + /* 完全圆角 chip */ + cursor: pointer; + transition: all 0.25s ease; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06); + text-decoration: none !important; + /* 🔥 去掉下划线 */ + user-select: none; + /* 防止文字选中 */ +} + +/* hover 效果 */ +.header-filter-value .selection-options label:hover { + border-color: #4a90e2; + color: #4a90e2; + background: #f0f7ff; + box-shadow: 0 2px 6px rgba(74, 144, 226, 0.15); +} + +/* 选中效果 */ +.header-filter-value .selection-options input:checked+label { + background: linear-gradient(135deg, #4a90e2, #357ABD); + border-color: #357ABD; + color: #fff; + font-weight: 500; + box-shadow: 0 3px 8px rgba(74, 144, 226, 0.3); +} + +/* 小动画:点击时轻微缩放 */ +.header-filter-value .selection-options label:active { + transform: scale(0.95); +} + +#header_search_collapse { + .header-search-filter { + .header-filter-value { + .selection-options { + + input[type="radio"]:checked+label, + input[type="checkbox"]:checked+label { + left: 0 !important; + } + } + } + } +} \ No newline at end of file diff --git a/ks_dashboard_ninja/static/src/js/ks_dashboard_ninja_new.js b/ks_dashboard_ninja/static/src/js/ks_dashboard_ninja_new.js index 4edd4213a..a4c74de2c 100644 --- a/ks_dashboard_ninja/static/src/js/ks_dashboard_ninja_new.js +++ b/ks_dashboard_ninja/static/src/js/ks_dashboard_ninja_new.js @@ -1,11 +1,11 @@ /** @odoo-module **/ import { _t } from "@web/core/l10n/translation"; -import { Component, onWillStart, useState ,onMounted, onWillRender, useRef, useEffect,onWillUnmount } from "@odoo/owl"; +import { Component, onWillStart, useState, onMounted, onWillRender, useRef, useEffect, onWillUnmount } from "@odoo/owl"; import { registry } from "@web/core/registry"; import { jsonrpc } from "@web/core/network/rpc_service"; import { useService } from "@web/core/utils/hooks"; -import { loadJS,loadCSS } from "@web/core/assets"; +import { loadJS, loadCSS } from "@web/core/assets"; import { localization } from "@web/core/l10n/localization"; import { session } from "@web/session"; import { download } from "@web/core/network/download"; @@ -15,9 +15,9 @@ import { ConfirmationDialog } from "@web/core/confirmation_dialog/confirmation_d import { patch } from "@web/core/utils/patch"; import { isBrowserChrome, isMobileOS } from "@web/core/browser/feature_detection"; import { loadBundle } from '@web/core/assets'; -import {FormViewDialog} from '@web/views/view_dialogs/form_view_dialog'; +import { FormViewDialog } from '@web/views/view_dialogs/form_view_dialog'; import { renderToElement } from "@web/core/utils/render"; -import {globalfunction } from '@ks_dashboard_ninja/js/ks_global_functions' +import { globalfunction } from '@ks_dashboard_ninja/js/ks_global_functions' import { Ksdashboardtile } from '@ks_dashboard_ninja/components/ks_dashboard_tile_view/ks_dashboard_tile'; import { Ksdashboardlistview } from '@ks_dashboard_ninja/components/ks_dashboard_list_view/ks_dashboard_list'; import { Ksdashboardtodo } from '@ks_dashboard_ninja/components/ks_dashboard_to_do_item/ks_dashboard_to_do'; @@ -26,8 +26,8 @@ import { Ksdashboardgraph } from '@ks_dashboard_ninja/components/ks_dashboard_gr import { DateTimePicker } from "@web/core/datetime/datetime_picker"; import { DateTimeInput } from "@web/core/datetime/datetime_input"; const { DateTime } = luxon; -import {formatDate,formatDateTime} from "@web/core/l10n/dates"; -import {parseDateTime,parseDate,} from "@web/core/l10n/dates"; +import { formatDate, formatDateTime } from "@web/core/l10n/dates"; +import { parseDateTime, parseDate, } from "@web/core/l10n/dates"; export class KsDashboardNinja extends Component { @@ -38,15 +38,15 @@ export class KsDashboardNinja extends Component { this.notification = useService("notification"); this._rpc = useService("rpc"); this.dialogService = useService("dialog"); - this.header = useRef("ks_dashboard_header"); + this.header = useRef("ks_dashboard_header"); this.main_body = useRef("ks_main_body"); this.reload_menu_option = { - reload:this.props.action.context.ks_reload_menu, + reload: this.props.action.context.ks_reload_menu, menu_id: this.props.action.context.ks_menu_id }; this.ks_mode = 'active'; this.action_manager = parent; -// this.controllerID = params.controllerID; + // this.controllerID = params.controllerID; this.name = "ks_dashboard"; this.ksIsDashboardManager = false; this.ksDashboardEditMode = false; @@ -58,7 +58,7 @@ export class KsDashboardNinja extends Component { 'P': 'svg+xml', }; this.ksAllowItemClick = true; - + this.isAdmin = session.is_admin; //Dn Filters Iitialization this.date_format = localization.dateFormat @@ -100,21 +100,21 @@ export class KsDashboardNinja extends Component { 'l_custom': _t('Custom Filter'), }; // To make sure date filter show date in specific order. - this.ks_date_filter_selection_order = ['l_day', 't_week', 't_month', 't_quarter','t_year', - 'td_week','td_month','td_quarter', 'td_year','n_day','n_week', 'n_month', 'n_quarter', 'n_year', - 'ls_day','ls_week', 'ls_month', 'ls_quarter', 'ls_year', 'l_week', 'l_month', 'l_quarter', 'l_year', - 'ls_past_until_now', 'ls_pastwithout_now','n_future_starting_now', 'n_futurestarting_tomorrow', + this.ks_date_filter_selection_order = ['l_day', 't_week', 't_month', 't_quarter', 't_year', + 'td_week', 'td_month', 'td_quarter', 'td_year', 'n_day', 'n_week', 'n_month', 'n_quarter', 'n_year', + 'ls_day', 'ls_week', 'ls_month', 'ls_quarter', 'ls_year', 'l_week', 'l_month', 'l_quarter', 'l_year', + 'ls_past_until_now', 'ls_pastwithout_now', 'n_future_starting_now', 'n_futurestarting_tomorrow', 'l_custom' ]; this.ks_dashboard_id = this.props.action.params.ks_dashboard_id; this.gridstack_options = { - staticGrid:true, + staticGrid: true, float: false, cellHeight: 80, - styleInHead : true, -// disableOneColumnMode: true, + styleInHead: true, + // disableOneColumnMode: true, }; if (isMobileOS()) { this.gridstack_options.disableOneColumnMode = false @@ -128,22 +128,22 @@ export class KsDashboardNinja extends Component { ks_dashboard_name: '', ks_multi_layout: false, ks_dash_name: '', - ks_dashboard_manager :false, + ks_dashboard_manager: false, date_selection_data: {}, - date_selection_order :[], - ks_show_create_layout_option : true, - ks_show_layout :false, - ks_selected_board_id:false, - ks_child_boards:false, - ks_dashboard_data:{}, - ks_dn_pre_defined_filters:[], - ks_dashboard_item_length:0, - ks_dashboard_items:[], - update:false, - ksDateFilterSelection :false, - pre_defined_filter :{}, + date_selection_order: [], + ks_show_create_layout_option: true, + ks_show_layout: false, + ks_selected_board_id: false, + ks_child_boards: false, + ks_dashboard_data: {}, + ks_dn_pre_defined_filters: [], + ks_dashboard_item_length: 0, + ks_dashboard_items: [], + update: false, + ksDateFilterSelection: false, + pre_defined_filter: {}, ksDateFilterStartDate: DateTime.now(), - ksDateFilterEndDate:DateTime.now() + ksDateFilterEndDate: DateTime.now() }) this.ksChartColorOptions = ['default', 'cool', 'warm', 'neon']; this.ksDateFilterSelection = false; @@ -151,8 +151,8 @@ export class KsDashboardNinja extends Component { this.ksDateFilterEndDate = false; this.ksUpdateDashboard = {}; $("head").append(''); - if(this.props.action.context.ks_reload_menu){ - this.trigger_up('reload_menu_data', { keep_open: true, scroll_to_bottom: true}); + if (this.props.action.context.ks_reload_menu) { + this.trigger_up('reload_menu_data', { keep_open: true, scroll_to_bottom: true }); } var context = { ksDateFilterSelection: this.ksDateFilterSelection, @@ -160,25 +160,25 @@ export class KsDashboardNinja extends Component { ksDateFilterEndDate: self.ksDateFilterEndDate, } this.dn_state = {} - this.dn_state['user_context']=context + this.dn_state['user_context'] = context this.ks_speeches = []; onWillStart(this.willStart); onWillRender(this.dashboard_mount); - onWillUnmount(()=>this.ks_switch_default_dashboard()); + onWillUnmount(() => this.ks_switch_default_dashboard()); onMounted(() => { this.grid_initiate(); var filter_date_data = this.getObjectFromCookie('FilterDateData' + this.ks_dashboard_id); - if (filter_date_data != null){ + if (filter_date_data != null) { $(this.header.el).find('.ks_date_filter_selected').removeClass('ks_date_filter_selected'); $('#ks_date_filter_selection').text(this.ks_date_filter_selections[filter_date_data]); var element_selected = document.getElementById(filter_date_data); element_selected.classList.add('ks_date_filter_selected') this.state.ksDateFilterSelection = filter_date_data; - if(filter_date_data==='l_custom'){ + if (filter_date_data === 'l_custom') { var custom_range = this.getObjectFromCookie('custom_range' + this.ks_dashboard_id); - if(custom_range){ + if (custom_range) { this.state.ksDateFilterStartDate = custom_range['start_date'] this.state.ksDateFilterEndDate = custom_range['end_date'] } @@ -188,67 +188,67 @@ export class KsDashboardNinja extends Component { } - if (this.getObjectFromCookie('FilterDateData' + this.ks_dashboard_id) || this.getObjectFromCookie('FilterOrderData' + this.ks_dashboard_id)){ + if (this.getObjectFromCookie('FilterDateData' + this.ks_dashboard_id) || this.getObjectFromCookie('FilterOrderData' + this.ks_dashboard_id)) { this._onKsApplyDateFilter(); } }); } - willStart(){ + willStart() { var self = this; var def; var storedData = this.getObjectFromCookie('FilterOrderData' + self.ks_dashboard_id); if (this.reload_menu_option.reload && this.reload_menu_option.menu_id) { def = this.getParent().actionService.ksDnReloadMenu(this.reload_menu_option.menu_id); } - return $.when(def, loadBundle("ks_dashboard_ninja.ks_dashboard_lib")).then(function() { - return self.ks_fetch_data().then(function(){ - return self.ks_fetch_items_data().then(function(){ - if(storedData != null ){ + return $.when(def, loadBundle("ks_dashboard_ninja.ks_dashboard_lib")).then(function () { + return self.ks_fetch_data().then(function () { + return self.ks_fetch_items_data().then(function () { + if (storedData != null) { self.ks_dashboard_data.ks_dashboard_domain_data = storedData; - } - }); + } + }); }); }); } - grid_initiate(){ - var self=this; + grid_initiate() { + var self = this; const ks_element = this.main_body.el; var $gridstackContainer = $(`.grid-stack-${this.ks_dashboard_id}`); - if($gridstackContainer.length){ - this.grid = GridStack.init(this.gridstack_options,$gridstackContainer[0]); + if ($gridstackContainer.length) { + this.grid = GridStack.init(this.gridstack_options, $gridstackContainer[0]); var item = self.ksSortItems(self.ks_dashboard_data.ks_item_data) - if(this.ks_dashboard_data.ks_gridstack_config){ + if (this.ks_dashboard_data.ks_gridstack_config) { this.gridstackConfig = JSON.parse(this.ks_dashboard_data.ks_gridstack_config); } for (var i = 0; i < item.length; i++) { - var graphs = ['ks_scatter_chart','ks_bar_chart', 'ks_horizontalBar_chart', 'ks_line_chart', 'ks_area_chart', 'ks_doughnut_chart','ks_polarArea_chart','ks_pie_chart','ks_flower_view', 'ks_radar_view','ks_radialBar_chart','ks_map_view','ks_funnel_chart','ks_bullet_chart', 'ks_to_do', 'ks_list_view'] + var graphs = ['ks_scatter_chart', 'ks_bar_chart', 'ks_horizontalBar_chart', 'ks_line_chart', 'ks_area_chart', 'ks_doughnut_chart', 'ks_polarArea_chart', 'ks_pie_chart', 'ks_flower_view', 'ks_radar_view', 'ks_radialBar_chart', 'ks_map_view', 'ks_funnel_chart', 'ks_bullet_chart', 'ks_to_do', 'ks_list_view'] var $ks_preview = $('#' + item[i].id) if ($ks_preview.length && !this.ks_dashboard_data.ks_ai_explain_dash) { if (item[i].id in self.gridstackConfig) { - var min_width = graphs.includes(item[i].ks_dashboard_item_type)? 3:2 - self.grid.addWidget($ks_preview[0], {x:self.gridstackConfig[item[i].id].x, y:self.gridstackConfig[item[i].id].y, w:self.gridstackConfig[item[i].id].w, h: self.gridstackConfig[item[i].id].h, autoPosition:false, minW:min_width, maxW:null, minH:2, maxH:null, id:item[i].id}); - } else if ( graphs.includes (item[i].ks_dashboard_item_type)) { - self.grid.addWidget($ks_preview[0], {x:0, y:0, w:5, h:5,autoPosition:true,minW:4,maxW:null,minH:3,maxH:null, id :item[i].id}); - }else{ - self.grid.addWidget($ks_preview[0], {x:0, y:0, w:3, h:2,autoPosition:true,minW:3,maxW:null,minH:2,maxH:2,id:item[i].id}); + var min_width = graphs.includes(item[i].ks_dashboard_item_type) ? 3 : 2 + self.grid.addWidget($ks_preview[0], { x: self.gridstackConfig[item[i].id].x, y: self.gridstackConfig[item[i].id].y, w: self.gridstackConfig[item[i].id].w, h: self.gridstackConfig[item[i].id].h, autoPosition: false, minW: min_width, maxW: null, minH: 2, maxH: null, id: item[i].id }); + } else if (graphs.includes(item[i].ks_dashboard_item_type)) { + self.grid.addWidget($ks_preview[0], { x: 0, y: 0, w: 5, h: 5, autoPosition: true, minW: 4, maxW: null, minH: 3, maxH: null, id: item[i].id }); + } else { + self.grid.addWidget($ks_preview[0], { x: 0, y: 0, w: 3, h: 2, autoPosition: true, minW: 3, maxW: null, minH: 2, maxH: 2, id: item[i].id }); } - }else{ - if (item[i].id in self.gridstackConfig) { - var min_width = graphs.includes(item[i].ks_dashboard_item_type)? 3:2 - self.grid.addWidget($ks_preview[0], {x:self.gridstackConfig[item[i].id].x, y:self.gridstackConfig[item[i].id].y, w:12, h: 6, autoPosition:false, minW:min_width, maxW:null, minH:2, maxH:null, id:item[i].id}); - } else { - self.grid.addWidget($ks_preview[0], {x:0, y:0, w:12, h:6,autoPosition:true,minW:4,maxW:null,minH:3,maxH:null, id :item[i].id}); + } else { + if (item[i].id in self.gridstackConfig) { + var min_width = graphs.includes(item[i].ks_dashboard_item_type) ? 3 : 2 + self.grid.addWidget($ks_preview[0], { x: self.gridstackConfig[item[i].id].x, y: self.gridstackConfig[item[i].id].y, w: 12, h: 6, autoPosition: false, minW: min_width, maxW: null, minH: 2, maxH: null, id: item[i].id }); + } else { + self.grid.addWidget($ks_preview[0], { x: 0, y: 0, w: 12, h: 6, autoPosition: true, minW: 4, maxW: null, minH: 3, maxH: null, id: item[i].id }); } - Object.values(ks_element.querySelectorAll(".ks_dashboard_item_button_container")).map((item) => { + Object.values(ks_element.querySelectorAll(".ks_dashboard_item_button_container")).map((item) => { $(item).addClass('d-none') $(item).removeClass('d-md-flex') - }) - Object.values(ks_element.querySelectorAll(".ks_pager_name")).map((item) => { + }) + Object.values(ks_element.querySelectorAll(".ks_pager_name")).map((item) => { $(item).addClass('d-none') - }) + }) } @@ -258,21 +258,21 @@ export class KsDashboardNinja extends Component { this.ksRenderDashboard(); // Events // - Object.values(ks_element.querySelectorAll(".ks_duplicate_item")).map((item) => { item.addEventListener('click', this.onKsDuplicateItemClick.bind(this))}) - Object.values(ks_element.querySelectorAll(".ks_move_item")).map((item) => { item.addEventListener('click', this.onKsMoveItemClick.bind(this))}) - Object.values(ks_element.querySelectorAll(".ks_dashboard_item_delete")).map((item) => { item.addEventListener('click', this._onKsDeleteItemClick.bind(this))}) - Object.values(ks_element.querySelectorAll(".ks_chart_xls_csv_export")).map((item) => { item.addEventListener('click', this.ksChartExportXlsCsv.bind(this))}) - Object.values(ks_element.querySelectorAll(".ks_chart_pdf_export")).map((item) => { item.addEventListener('click', this.ksChartExportPdf.bind(this))}) - Object.values(ks_element.querySelectorAll(".ks_chart_image_export")).map((item) => { item.addEventListener('click', this.ksChartExportimage.bind(this))}) - Object.values(ks_element.querySelectorAll(".ks_chart_json_export")).map((item) => { item.addEventListener('click', this.ksItemExportJson.bind(this))}) - Object.values(ks_element.querySelectorAll(".ks_dashboard_quick_edit_action_popup")).map((item) => { item.addEventListener('click', this.onEditItemTypeClick.bind(this))}) - Object.values(ks_element.querySelectorAll(".ks_dashboard_item_customize")).map((item) => { item.addEventListener('click', this.onEditItemTypeClick.bind(this))}) - Object.values(ks_element.querySelectorAll(".ks_dashboard_menu_container")).map((item) => { item.addEventListener('click', this.stoppropagation.bind(this))}) - Object.values(ks_element.querySelectorAll(".ks_item_description")).map((item) => { item.addEventListener('click', this.stoppropagation.bind(this))}) - Object.values(ks_element.querySelectorAll(".ks_item_click")).map((item) => { item.addEventListener('click', this._onKsItemClick.bind(this))}) - Object.values(ks_element.querySelectorAll(".ks_dashboard_item_action")).map((item) => { item.addEventListener('click', this.ks_dashboard_item_action.bind(this))}) - Object.values(ks_element.querySelectorAll(".ks_dashboard_item_chart_info")).map((item) => { item.addEventListener('click', this.onChartMoreInfoClick.bind(this))}) -// Object.values((self.header.el).querySelectorAll(".ks_custom_filter_field_selector")).map((item) => { item.addEventListener('change', this.ksOnCustomFilterFieldSelect.bind(this))}) + Object.values(ks_element.querySelectorAll(".ks_duplicate_item")).map((item) => { item.addEventListener('click', this.onKsDuplicateItemClick.bind(this)) }) + Object.values(ks_element.querySelectorAll(".ks_move_item")).map((item) => { item.addEventListener('click', this.onKsMoveItemClick.bind(this)) }) + Object.values(ks_element.querySelectorAll(".ks_dashboard_item_delete")).map((item) => { item.addEventListener('click', this._onKsDeleteItemClick.bind(this)) }) + Object.values(ks_element.querySelectorAll(".ks_chart_xls_csv_export")).map((item) => { item.addEventListener('click', this.ksChartExportXlsCsv.bind(this)) }) + Object.values(ks_element.querySelectorAll(".ks_chart_pdf_export")).map((item) => { item.addEventListener('click', this.ksChartExportPdf.bind(this)) }) + Object.values(ks_element.querySelectorAll(".ks_chart_image_export")).map((item) => { item.addEventListener('click', this.ksChartExportimage.bind(this)) }) + Object.values(ks_element.querySelectorAll(".ks_chart_json_export")).map((item) => { item.addEventListener('click', this.ksItemExportJson.bind(this)) }) + Object.values(ks_element.querySelectorAll(".ks_dashboard_quick_edit_action_popup")).map((item) => { item.addEventListener('click', this.onEditItemTypeClick.bind(this)) }) + Object.values(ks_element.querySelectorAll(".ks_dashboard_item_customize")).map((item) => { item.addEventListener('click', this.onEditItemTypeClick.bind(this)) }) + Object.values(ks_element.querySelectorAll(".ks_dashboard_menu_container")).map((item) => { item.addEventListener('click', this.stoppropagation.bind(this)) }) + Object.values(ks_element.querySelectorAll(".ks_item_description")).map((item) => { item.addEventListener('click', this.stoppropagation.bind(this)) }) + Object.values(ks_element.querySelectorAll(".ks_item_click")).map((item) => { item.addEventListener('click', this._onKsItemClick.bind(this)) }) + Object.values(ks_element.querySelectorAll(".ks_dashboard_item_action")).map((item) => { item.addEventListener('click', this.ks_dashboard_item_action.bind(this)) }) + Object.values(ks_element.querySelectorAll(".ks_dashboard_item_chart_info")).map((item) => { item.addEventListener('click', this.onChartMoreInfoClick.bind(this)) }) + // Object.values((self.header.el).querySelectorAll(".ks_custom_filter_field_selector")).map((item) => { item.addEventListener('change', this.ksOnCustomFilterFieldSelect.bind(this))}) } @@ -283,36 +283,36 @@ export class KsDashboardNinja extends Component { ksDateFilterStartDate: self.ksDateFilterStartDate, ksDateFilterEndDate: self.ksDateFilterEndDate, } - if(self.dn_state['user_context']['ksDateFilterSelection'] !== undefined && self.ksDateFilterSelection !== 'l_none'){ + if (self.dn_state['user_context']['ksDateFilterSelection'] !== undefined && self.ksDateFilterSelection !== 'l_none') { context = self.dn_state['user_context'] } - var ks_new_obj = {...session.user_context,...{allowed_company_ids:this.env.services.company.activeCompanyIds}} + var ks_new_obj = { ...session.user_context, ...{ allowed_company_ids: this.env.services.company.activeCompanyIds } } return Object.assign(context, ks_new_obj); } - ks_fetch_data(){ + ks_fetch_data() { var self = this; - return jsonrpc("/web/dataset/call_kw",{ + return jsonrpc("/web/dataset/call_kw", { model: 'ks_dashboard_ninja.board', method: 'ks_fetch_dashboard_data', args: [self.ks_dashboard_id], - kwargs : {context:self.getContext()}, -// context: self.getContext() - }).then(function(result) { - // result = self.normalize_dn_data(result); + kwargs: { context: self.getContext() }, + // context: self.getContext() + }).then(function (result) { + // result = self.normalize_dn_data(result); self.ks_dashboard_data = result; self.ks_dashboard_data['ks_dashboard_id'] = self.props.action.params.ks_dashboard_id self.ks_dashboard_data['context'] = self.getContext() self.ks_dashboard_data['ks_ai_dashboard'] = false - if(self.dn_state['domain_data'] != undefined){ -// self.ks_dashboard_data.ks_dashboard_domain_data=self.dn_state['domain_data'] - Object.values(self.ks_dashboard_data.ks_dashboard_pre_domain_filter).map((x)=>{ - if(self.dn_state['domain_data'][x['model']] != undefined){ - if(self.dn_state['domain_data'][x['model']]['ks_domain_index_data'][0]['label'].indexOf(x['name']) ==-1){ + if (self.dn_state['domain_data'] != undefined) { + // self.ks_dashboard_data.ks_dashboard_domain_data=self.dn_state['domain_data'] + Object.values(self.ks_dashboard_data.ks_dashboard_pre_domain_filter).map((x) => { + if (self.dn_state['domain_data'][x['model']] != undefined) { + if (self.dn_state['domain_data'][x['model']]['ks_domain_index_data'][0]['label'].indexOf(x['name']) == -1) { self.ks_dashboard_data.ks_dashboard_pre_domain_filter[x['id']].active = false; } } - else{ + else { self.ks_dashboard_data.ks_dashboard_pre_domain_filter[x['id']].active = false; } }) @@ -320,51 +320,51 @@ export class KsDashboardNinja extends Component { }); } - dashboard_mount(){ + dashboard_mount() { var self = this; -// var items = self.ksSortItems(self.ks_dashboard_data.ks_item_data) + // var items = self.ksSortItems(self.ks_dashboard_data.ks_item_data) var items = Object.values(self.ks_dashboard_data.ks_item_data) self.state.ks_dashboard_items = items self.ks_dashboard_data['context'] = self.getContext() } - ks_fetch_items_data(){ + ks_fetch_items_data() { var self = this; var items_promises = [] - self.ks_dashboard_data.ks_dashboard_items_ids.forEach(function(item_id){ - items_promises.push(jsonrpc("/web/dataset/call_kw",{ + self.ks_dashboard_data.ks_dashboard_items_ids.forEach(function (item_id) { + items_promises.push(jsonrpc("/web/dataset/call_kw", { model: "ks_dashboard_ninja.board", method: "ks_fetch_item", - args : [[item_id], self.ks_dashboard_id, self.ksGetParamsForItemFetch(item_id)], - kwargs:{context:self.getContext()} - }).then(function(result){ + args: [[item_id], self.ks_dashboard_id, self.ksGetParamsForItemFetch(item_id)], + kwargs: { context: self.getContext() } + }).then(function (result) { self.ks_dashboard_data.ks_item_data[item_id] = result[item_id]; self.state.ks_show_create_layout_option = (Object.keys(self.ks_dashboard_data.ks_item_data).length > 0) && self.ks_dashboard_data.ks_dashboard_manager })); }); self.state.ks_dashboard_name = self.ks_dashboard_data.name, - self.state.ks_multi_layout = self.ks_dashboard_data.multi_layouts, - self.state.ks_dash_name = self.ks_dashboard_data.name, - self.state.ks_dashboard_manager = self.ks_dashboard_data.ks_dashboard_manager, - self.state.date_selection_data = self.ks_date_filter_selections, - self.state.date_selection_order = self.ks_date_filter_selection_order, - self.state.ks_show_layout = self.ks_dashboard_data.ks_dashboard_manager && self.ks_dashboard_data.ks_child_boards && true, - self.state.ks_selected_board_id = self.ks_dashboard_data.ks_selected_board_id, - self.state.ks_child_boards = self.ks_dashboard_data.ks_child_boards, - self.state.ks_dashboard_data = self.ks_dashboard_data, - self.state.ks_dn_pre_defined_filters = Object.values(self.ks_dashboard_data.ks_dashboard_pre_domain_filter).sort(function(a, b){return a.sequence - b.sequence}), - self.state.ks_dashboard_item_length = self.ks_dashboard_data.ks_dashboard_items_ids.length + self.state.ks_multi_layout = self.ks_dashboard_data.multi_layouts, + self.state.ks_dash_name = self.ks_dashboard_data.name, + self.state.ks_dashboard_manager = self.ks_dashboard_data.ks_dashboard_manager, + self.state.date_selection_data = self.ks_date_filter_selections, + self.state.date_selection_order = self.ks_date_filter_selection_order, + self.state.ks_show_layout = self.ks_dashboard_data.ks_dashboard_manager && self.ks_dashboard_data.ks_child_boards && true, + self.state.ks_selected_board_id = self.ks_dashboard_data.ks_selected_board_id, + self.state.ks_child_boards = self.ks_dashboard_data.ks_child_boards, + self.state.ks_dashboard_data = self.ks_dashboard_data, + self.state.ks_dn_pre_defined_filters = Object.values(self.ks_dashboard_data.ks_dashboard_pre_domain_filter).sort(function (a, b) { return a.sequence - b.sequence }), + self.state.ks_dashboard_item_length = self.ks_dashboard_data.ks_dashboard_items_ids.length self.state.update = false self.state.ksDateFilterSelection = self.state.ksDateFilterSelection == false ? 'none' : self.state.ksDateFilterSelection, - self.state.pre_defined_filter = {} + self.state.pre_defined_filter = {} self.state.custom_filter = {} var custom_range = this.getObjectFromCookie('custom_range' + this.ks_dashboard_id); - if(custom_range){ + if (custom_range) { this.state.ksDateFilterStartDate = parseDateTime(custom_range['start_date'], self.datetime_format) this.state.ksDateFilterEndDate = parseDateTime(custom_range['end_date'], self.datetime_format) - }else{ + } else { self.state.ksDateFilterStartDate = DateTime.now() self.state.ksDateFilterEndDate = DateTime.now() } @@ -375,34 +375,34 @@ export class KsDashboardNinja extends Component { } - ksGetParamsForItemFetch(){ + ksGetParamsForItemFetch() { return {}; } - ksRenderDashboard(){ + ksRenderDashboard() { var self = this; if (self.ks_dashboard_data.ks_child_boards) self.ks_dashboard_data.name = this.ks_dashboard_data.ks_child_boards[self.ks_dashboard_data.ks_selected_board_id][0]; if (!isMobileOS()) { $(self.header.el).addClass("ks_dashboard_header_sticky") } - if (Object.keys(self.ks_dashboard_data.ks_item_data).length===0){ + if (Object.keys(self.ks_dashboard_data.ks_item_data).length === 0) { $(self.header.el).find('.ks_dashboard_link').addClass("d-none"); $(self.header.el).find('.ks_dashboard_edit_layout').addClass("d-none"); } - if(!self.state.ks_dashboard_manager){ + if (!self.state.ks_dashboard_manager) { $(self.header.el).find('#ks_dashboard_title').addClass("ks_user") } - self.ksRenderDashboardMainContent(); + self.ksRenderDashboardMainContent(); } - ksRenderDashboardMainContent(){ + ksRenderDashboardMainContent() { var self = this; if (isMobileOS() && $('#ks_dn_layout_button :first-child').length > 0) { $('.ks_am_element').append($('#ks_dn_layout_button :first-child')[0].innerText); $(self.header.el).find("#ks_dn_layout_button").addClass("ks_hide"); } - if (Object.keys(self.ks_dashboard_data.ks_item_data).length){ - // todo implement below mentioned function + if (Object.keys(self.ks_dashboard_data.ks_item_data).length) { + // todo implement below mentioned function self._renderDateFilterDatePicker(); $(self.header.el).find('.ks_dashboard_link').removeClass("ks_hide"); } else if (!Object.keys(self.ks_dashboard_data.ks_item_data).length) { @@ -417,48 +417,48 @@ export class KsDashboardNinja extends Component { console.log("Print") } - loadDashboardData(date = false){ + loadDashboardData(date = false) { var self = this; $(self.header.el).find(".apply-dashboard-date-filter").removeClass("ks_hide"); $(self.header.el).find(".clear-dashboard-date-filter").removeClass("ks_hide"); } _KsGetDateValues() { - var self = this; - //Setting Date Filter Selected Option in Date Filter DropDown Menu - var date_filter_selected = self.ks_dashboard_data.ks_date_filter_selection; - if (self.ksDateFilterSelection == 'l_none'){ - var date_filter_selected = self.ksDateFilterSelection; - } - $(self.header.el).find('#' + date_filter_selected).addClass("ks_date_filter_selected"); - $(self.header.el).find('#ks_date_filter_selection').text(self.ks_date_filter_selections[date_filter_selected]); - - if (self.ks_dashboard_data.ks_date_filter_selection === 'l_custom') { - var ks_end_date = self.ks_dashboard_data.ks_dashboard_end_date; - var ks_start_date = self.ks_dashboard_data.ks_dashboard_start_date; - var start_date = parseDateTime(ks_start_date, self.datetime_format) - var end_date = parseDateTime(ks_end_date, self.datetime_format) - self.state.ksDateFilterStartDate = start_date - self.state.ksDateFilterEndDate = end_date - - $(self.header.el).find('.ks_date_input_fields').removeClass("ks_hide"); - $(self.header.el).find('.ks_date_filter_dropdown').addClass("ks_btn_first_child_radius"); - } else if (self.ks_dashboard_data.ks_date_filter_selection !== 'l_custom') { - $(self.header.el).find('.ks_date_input_fields').addClass("ks_hide"); - } + var self = this; + //Setting Date Filter Selected Option in Date Filter DropDown Menu + var date_filter_selected = self.ks_dashboard_data.ks_date_filter_selection; + if (self.ksDateFilterSelection == 'l_none') { + var date_filter_selected = self.ksDateFilterSelection; } + $(self.header.el).find('#' + date_filter_selected).addClass("ks_date_filter_selected"); + $(self.header.el).find('#ks_date_filter_selection').text(self.ks_date_filter_selections[date_filter_selected]); + + if (self.ks_dashboard_data.ks_date_filter_selection === 'l_custom') { + var ks_end_date = self.ks_dashboard_data.ks_dashboard_end_date; + var ks_start_date = self.ks_dashboard_data.ks_dashboard_start_date; + var start_date = parseDateTime(ks_start_date, self.datetime_format) + var end_date = parseDateTime(ks_end_date, self.datetime_format) + self.state.ksDateFilterStartDate = start_date + self.state.ksDateFilterEndDate = end_date + + $(self.header.el).find('.ks_date_input_fields').removeClass("ks_hide"); + $(self.header.el).find('.ks_date_filter_dropdown').addClass("ks_btn_first_child_radius"); + } else if (self.ks_dashboard_data.ks_date_filter_selection !== 'l_custom') { + $(self.header.el).find('.ks_date_input_fields').addClass("ks_hide"); + } + } _ksOnDateFilterMenuSelect(e) { if (e.target.id !== 'ks_date_selector_container') { var self = this; - $.each($('.ks_date_filter_selected'), function(idx, $itm) { + $.each($('.ks_date_filter_selected'), function (idx, $itm) { $($itm).removeClass("ks_date_filter_selected") }); $(e.target.parentElement).addClass("ks_date_filter_selected"); $('#ks_date_filter_selection').text(self.ks_date_filter_selections[e.target.parentElement.id]); if (e.target.parentElement.id !== "l_custom") { - e.target.parentElement.id === "l_none" ? self._onKsClearDateValues(true) : self._onKsApplyDateFilter(); + e.target.parentElement.id === "l_none" ? self._onKsClearDateValues(true) : self._onKsApplyDateFilter(); $('.ks_date_input_fields').addClass("ks_hide"); $('.ks_date_filter_dropdown').removeClass("ks_btn_first_child_radius"); @@ -470,9 +470,9 @@ export class KsDashboardNinja extends Component { $(self.header.el).find(".apply-dashboard-date-filter").removeClass("ks_hide"); $(self.header.el).find(".clear-dashboard-date-filter").removeClass("ks_hide"); } - if(self.state.ksDateFilterSelection === 'l_none'){ + if (self.state.ksDateFilterSelection === 'l_none') { this.eraseCookie('FilterDateData' + self.ks_dashboard_id); - }else{ + } else { this.setObjectInCookie('FilterDateData' + self.ks_dashboard_id, self.state.ksDateFilterSelection, 1); } } @@ -500,26 +500,26 @@ export class KsDashboardNinja extends Component { ksDateFilterStartDate: self.ksDateFilterStartDate, ksDateFilterEndDate: self.ksDateFilterEndDate, } - self.dn_state['user_context']=context - $(self.header.el).find(".apply-dashboard-date-filter").addClass("ks_hide"); - $(self.header.el).find(".clear-dashboard-date-filter").addClass("ks_hide"); - self.state.ksDateFilterSelection = $(self.header.el).find('.ks_date_filter_selected').attr('id'); - self.state.pre_defined_filter = {} - self.state.custom_filter = {} + self.dn_state['user_context'] = context + $(self.header.el).find(".apply-dashboard-date-filter").addClass("ks_hide"); + $(self.header.el).find(".clear-dashboard-date-filter").addClass("ks_hide"); + self.state.ksDateFilterSelection = $(self.header.el).find('.ks_date_filter_selected').attr('id'); + self.state.pre_defined_filter = {} + self.state.custom_filter = {} } else { if (start_date && end_date) { - if (parseDateTime(start_date,self.datetime_format) <= parseDateTime(end_date, self.datetime_format)) { -// var start_date = parseDateTime(start_date, self.datetime_format).format("YYYY-MM-DD H:m:s"); - var start_date = formatDateTime(parseDateTime(start_date, self.datetime_format), { format: "yyyy-MM-dd HH:mm:ss"}) + if (parseDateTime(start_date, self.datetime_format) <= parseDateTime(end_date, self.datetime_format)) { + // var start_date = parseDateTime(start_date, self.datetime_format).format("YYYY-MM-DD H:m:s"); + var start_date = formatDateTime(parseDateTime(start_date, self.datetime_format), { format: "yyyy-MM-dd HH:mm:ss" }) var end_date = formatDateTime(parseDateTime(end_date, self.datetime_format), { format: "yyyy-MM-dd HH:mm:ss" }) -// var end_date = formatDateTime(end_date, self.datetime_format).format("YYYY-MM-DD H:m:s"); - if (start_date === "Invalid date" || end_date === "Invalid date"){ + // var end_date = formatDateTime(end_date, self.datetime_format).format("YYYY-MM-DD H:m:s"); + if (start_date === "Invalid date" || end_date === "Invalid date") { alert(_t("Invalid Date")); - }else{ + } else { self.ksDateFilterSelection = $(self.header.el).find('.ks_date_filter_selected').attr('id'); self.ksDateFilterStartDate = start_date; self.ksDateFilterEndDate = end_date; - this.setObjectInCookie('custom_range' + self.ks_dashboard_id, {'start_date': start_date, 'end_date':end_date}, 1); + this.setObjectInCookie('custom_range' + self.ks_dashboard_id, { 'start_date': start_date, 'end_date': end_date }, 1); var res = {}; for (const [key, value] of Object.entries(self.ks_dashboard_data.ks_item_data)) { if (value.ks_dashboard_item_type != "ks_to_do") { @@ -531,16 +531,16 @@ export class KsDashboardNinja extends Component { ksDateFilterStartDate: self.ksDateFilterStartDate, ksDateFilterEndDate: self.ksDateFilterEndDate, } - self.dn_state['user_context']=context - $(self.header.el).find(".apply-dashboard-date-filter").addClass("ks_hide"); - $(self.header.el).find(".clear-dashboard-date-filter").addClass("ks_hide"); - self.state.ksDateFilterSelection = $(self.header.el).find('.ks_date_filter_selected').attr('id'); - this.setObjectInCookie('FilterDateData' + self.ks_dashboard_id, self.state.ksDateFilterSelection, 1); - self.state.pre_defined_filter = {} - self.state.custom_filter = {} - self.state.ksDateFilterStartDate = parseDateTime(self.ksDateFilterStartDate,self.datetime_format); - self.state.ksDateFilterEndDate = parseDateTime(self.ksDateFilterEndDate,self.datetime_format); - } + self.dn_state['user_context'] = context + $(self.header.el).find(".apply-dashboard-date-filter").addClass("ks_hide"); + $(self.header.el).find(".clear-dashboard-date-filter").addClass("ks_hide"); + self.state.ksDateFilterSelection = $(self.header.el).find('.ks_date_filter_selected').attr('id'); + this.setObjectInCookie('FilterDateData' + self.ks_dashboard_id, self.state.ksDateFilterSelection, 1); + self.state.pre_defined_filter = {} + self.state.custom_filter = {} + self.state.ksDateFilterStartDate = parseDateTime(self.ksDateFilterStartDate, self.datetime_format); + self.state.ksDateFilterEndDate = parseDateTime(self.ksDateFilterEndDate, self.datetime_format); + } } else { alert(_t("Start date should be less than end date")); } @@ -554,13 +554,13 @@ export class KsDashboardNinja extends Component { var expires = ""; if (days) { var date = new Date(); - date.setTime(date.getTime() + (days*24*60*60*1000)); + date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); expires = "; expires=" + date.toUTCString(); } document.cookie = name + "=" + (value || "") + expires + "; path=/"; } - setObjectInCookie(name, object, days) { + setObjectInCookie(name, object, days) { var jsonString = JSON.stringify(object); this.setCookie(name, jsonString, days); } @@ -582,7 +582,7 @@ export class KsDashboardNinja extends Component { return jsonString ? JSON.parse(jsonString) : null; } - _onKsClearDateValues(ks_l_none=false) { + _onKsClearDateValues(ks_l_none = false) { var self = this; self.ksDateFilterSelection = 'l_none'; self.ksDateFilterStartDate = false; @@ -598,12 +598,12 @@ export class KsDashboardNinja extends Component { ksDateFilterStartDate: self.ksDateFilterStartDate, ksDateFilterEndDate: self.ksDateFilterEndDate, } - self.dn_state['user_context']=context - $('.ks_date_input_fields').addClass("ks_hide"); - $('.ks_date_filter_dropdown').removeClass("ks_btn_first_child_radius"); - self.state.ksDateFilterSelection = 'l_none'; - self.state.pre_defined_filter = {}; - self.state.custom_filter = {} + self.dn_state['user_context'] = context + $('.ks_date_input_fields').addClass("ks_hide"); + $('.ks_date_filter_dropdown').removeClass("ks_btn_first_child_radius"); + self.state.ksDateFilterSelection = 'l_none'; + self.state.pre_defined_filter = {}; + self.state.custom_filter = {} $(self.header.el).find(".apply-dashboard-date-filter").addClass("ks_hide"); $(self.header.el).find(".clear-dashboard-date-filter").addClass("ks_hide"); @@ -620,7 +620,7 @@ export class KsDashboardNinja extends Component { for (var i = 0; i < a.length; i++) { a[i]['id'] = b[i]; } - a.sort(function(a, b) { + a.sort(function (a, b) { return (35 * a.y + a.x) - (35 * b.y + b.x); }); for (var i = 0; i < a.length; i++) { @@ -635,57 +635,57 @@ export class KsDashboardNinja extends Component { } onChartMoreInfoClick(e) { - var self = this; - var item_id = e.currentTarget.dataset.itemId; - var item_data = self.ks_dashboard_data.ks_item_data[item_id]; - var groupBy = item_data.ks_chart_groupby_type === 'date_type' ? item_data.ks_chart_relation_groupby_name + ':' + item_data.ks_chart_date_groupby : item_data.ks_chart_relation_groupby_name; - var domain = JSON.parse(item_data.ks_chart_data).previous_domain + var self = this; + var item_id = e.currentTarget.dataset.itemId; + var item_data = self.ks_dashboard_data.ks_item_data[item_id]; + var groupBy = item_data.ks_chart_groupby_type === 'date_type' ? item_data.ks_chart_relation_groupby_name + ':' + item_data.ks_chart_date_groupby : item_data.ks_chart_relation_groupby_name; + var domain = JSON.parse(item_data.ks_chart_data).previous_domain - if (item_data.ks_show_records) { - if (item_data.action) { + if (item_data.ks_show_records) { + if (item_data.action) { - if (!item_data.ks_is_client_action){ - var action = Object.assign({}, item_data.action); - if (action.view_mode.includes('tree')) action.view_mode = action.view_mode.replace('tree', 'list'); - for (var i = 0; i < action.views.length; i++) action.views[i][1].includes('tree') ? action.views[i][1] = action.views[i][1].replace('tree', 'list') : action.views[i][1]; - action['domain'] = item_data.ks_domain || []; - action['search_view_id'] = [action.search_view_id, 'search'] - }else{ - var action = Object.assign({}, item_data.action[0]); - if (action.params){ - action.params.default_active_id || 'mailbox_inbox'; - }else{ - action.params = { - 'default_active_id': 'mailbox_inbox' - } - action.context = {} - action.context.params = { - 'active_model': false - }; - } - } + if (!item_data.ks_is_client_action) { + var action = Object.assign({}, item_data.action); + if (action.view_mode.includes('tree')) action.view_mode = action.view_mode.replace('tree', 'list'); + for (var i = 0; i < action.views.length; i++) action.views[i][1].includes('tree') ? action.views[i][1] = action.views[i][1].replace('tree', 'list') : action.views[i][1]; + action['domain'] = item_data.ks_domain || []; + action['search_view_id'] = [action.search_view_id, 'search'] } else { - var action = { - name: _t(item_data.name), - type: 'ir.actions.act_window', - res_model: item_data.ks_model_name, - domain: domain || [], - context: { - 'group_by': groupBy ? groupBy:false , - }, - views: [ - [false, 'list'], - [false, 'form'] - ], - view_mode: 'list', - target: 'current', + var action = Object.assign({}, item_data.action[0]); + if (action.params) { + action.params.default_active_id || 'mailbox_inbox'; + } else { + action.params = { + 'default_active_id': 'mailbox_inbox' + } + action.context = {} + action.context.params = { + 'active_model': false + }; } } - self.actionService.doAction(action, { - on_reverse_breadcrumb: self.on_reverse_breadcrumb, - }); + } else { + var action = { + name: _t(item_data.name), + type: 'ir.actions.act_window', + res_model: item_data.ks_model_name, + domain: domain || [], + context: { + 'group_by': groupBy ? groupBy : false, + }, + views: [ + [false, 'list'], + [false, 'form'] + ], + view_mode: 'list', + target: 'current', + } } + self.actionService.doAction(action, { + on_reverse_breadcrumb: self.on_reverse_breadcrumb, + }); } + } onKsDuplicateItemClick(e) { @@ -693,23 +693,23 @@ export class KsDashboardNinja extends Component { var ks_item_id = $($(e.target).parentsUntil(".ks_dashboarditem_id").slice(-1)[0]).parent().attr('id'); var dashboard_id = $($(e.target).parentsUntil(".ks_dashboarditem_id").slice(-1)[0]).find('.ks_dashboard_select').val(); var dashboard_name = $($(e.target).parentsUntil(".ks_dashboarditem_id").slice(-1)[0]).find('.ks_dashboard_select option:selected').text(); - this._rpc("/web/dataset/call_kw/ks_dashboard_ninja.item/copy",{ + this._rpc("/web/dataset/call_kw/ks_dashboard_ninja.item/copy", { model: 'ks_dashboard_ninja.item', method: 'copy', args: [parseInt(ks_item_id), { 'ks_dashboard_ninja_board_id': parseInt(dashboard_id) }], - kwargs:{}, - }).then(function(result) { - self.notification.add(_t('Selected item is duplicated to ' + dashboard_name + ' .'),{ - title:_t("Item Duplicated"), + kwargs: {}, + }).then(function (result) { + self.notification.add(_t('Selected item is duplicated to ' + dashboard_name + ' .'), { + title: _t("Item Duplicated"), type: 'success', }); - var js_id = self.actionService.currentController.jsId - self.actionService.restore(js_id) + var js_id = self.actionService.currentController.jsId + self.actionService.restore(js_id) - }) - e.stopPropagation() + }) + e.stopPropagation() } @@ -718,27 +718,27 @@ export class KsDashboardNinja extends Component { var ks_item_id = $($(e.target).parentsUntil(".ks_dashboarditem_id").slice(-1)[0]).parent().attr('id'); var dashboard_id = $($(e.target).parentsUntil(".ks_dashboarditem_id").slice(-1)[0]).find('.ks_dashboard_select').val(); var dashboard_name = $($(e.target).parentsUntil(".ks_dashboarditem_id").slice(-1)[0]).find('.ks_dashboard_select option:selected').text(); - this._rpc("/web/dataset/call_kw/ks_dashboard_ninja.item/write",{ + this._rpc("/web/dataset/call_kw/ks_dashboard_ninja.item/write", { model: 'ks_dashboard_ninja.item', method: 'write', args: [parseInt(ks_item_id), { 'ks_dashboard_ninja_board_id': parseInt(dashboard_id) }], - kwargs:{} - }).then(function(result) { - self.notification.add(_t('Selected item is moved to ' + dashboard_name + ' .'),{ - title:_t("Item Moved"), + kwargs: {} + }).then(function (result) { + self.notification.add(_t('Selected item is moved to ' + dashboard_name + ' .'), { + title: _t("Item Moved"), type: 'success', }); - var js_id = self.actionService.currentController.jsId - self.actionService.restore(js_id) + var js_id = self.actionService.currentController.jsId + self.actionService.restore(js_id) }); e.stopPropagation() } - _onKsItemClick(e){ + _onKsItemClick(e) { var self = this; // To Handle only allow item to open when not clicking on item if (self.ksAllowItemClick) { @@ -749,25 +749,25 @@ export class KsDashboardNinja extends Component { if (item_data && item_data.ks_show_records && item_data.ks_data_calculation_type != 'query') { if (item_data.action) { - if (!item_data.ks_is_client_action){ + if (!item_data.ks_is_client_action) { var action = Object.assign({}, item_data.action); if (action.view_mode.includes('tree')) action.view_mode = action.view_mode.replace('tree', 'list'); for (var i = 0; i < action.views.length; i++) action.views[i][1].includes('tree') ? action.views[i][1] = action.views[i][1].replace('tree', 'list') : action.views[i][1]; action['domain'] = item_data.ks_domain || []; action['search_view_id'] = [action.search_view_id, 'search'] - }else{ + } else { var action = Object.assign({}, item_data.action[0]); - if (action.params){ + if (action.params) { action.params.default_active_id || 'mailbox_inbox'; - }else{ - action.params = { + } else { + action.params = { 'default_active_id': 'mailbox_inbox' - } - action.context = {} - action.context.params = { - 'active_model': false - }; } + action.context = {} + action.context.params = { + 'active_model': false + }; + } } } else { @@ -785,9 +785,9 @@ export class KsDashboardNinja extends Component { } } - if (item_data.ks_is_client_action){ - self.actionService.doAction(action,{}) - }else{ + if (item_data.ks_is_client_action) { + self.actionService.doAction(action, {}) + } else { self.actionService.doAction(action, { on_reverse_breadcrumb: self.on_reverse_breadcrumb, }); @@ -798,7 +798,7 @@ export class KsDashboardNinja extends Component { self.ksAllowItemClick = true; } } - ks_dashboard_item_action(e){ + ks_dashboard_item_action(e) { this.ksAllowItemClick = false; } @@ -813,63 +813,63 @@ export class KsDashboardNinja extends Component { ks_delete_item(id, item) { var self = this; this.dialogService.add(ConfirmationDialog, { - body: _t("Are you sure that you want to remove this item?"), - confirm: () => { - self._rpc("/web/dataset/call_kw/ks_dashboard_ninja.item/unlink",{ - model: 'ks_dashboard_ninja.item', - method: 'unlink', - args: [id], - kwargs:{} - }).then(function(result) { + body: _t("Are you sure that you want to remove this item?"), + confirm: () => { + self._rpc("/web/dataset/call_kw/ks_dashboard_ninja.item/unlink", { + model: 'ks_dashboard_ninja.item', + method: 'unlink', + args: [id], + kwargs: {} + }).then(function (result) { - // Clean Item Remove Process. - self.ks_remove_update_interval(); - delete self.ks_dashboard_data.ks_item_data[id]; - self.grid.removeWidget(item); + // Clean Item Remove Process. + self.ks_remove_update_interval(); + delete self.ks_dashboard_data.ks_item_data[id]; + self.grid.removeWidget(item); - if (Object.keys(self.ks_dashboard_data.ks_item_data).length > 0) { - self._ksSaveCurrentLayout(); - } + if (Object.keys(self.ks_dashboard_data.ks_item_data).length > 0) { + self._ksSaveCurrentLayout(); + } - var js_id = self.actionService.currentController.jsId - self.actionService.restore(js_id) + var js_id = self.actionService.currentController.jsId + self.actionService.restore(js_id) }); }, - cancel: () => {}, - }); - } - removeitems(){ - var self = this; - var ks_items = Object.values((self.main_body.el).querySelectorAll(".grid-stack-item")); - ks_items.forEach((item) =>{ - self.grid.removeWidget(item); - }) - } + cancel: () => { }, + }); + } + removeitems() { + var self = this; + var ks_items = Object.values((self.main_body.el).querySelectorAll(".grid-stack-item")); + ks_items.forEach((item) => { + self.grid.removeWidget(item); + }) + } - _ksSetCurrentLayoutClick(){ + _ksSetCurrentLayoutClick() { var self = this; this.ks_dashboard_data.ks_selected_board_id = $(self.header.el).find("#ks_dashboard_layout_dropdown_container .ks_layout_selected").data('ks_layout_id'); $(self.header.el).find(".ks_dashboard_top_menu .ks_dashboard_top_settings").removeClass("ks_hide"); $(self.header.el).find(".ks_dashboard_top_menu .ks_am_content_element").removeClass("ks_hide"); $(self.header.el).find(".ks_dashboard_layout_edit_mode_settings").addClass("ks_hide"); -// $('#ks_dashboard_title_input').val(this.ks_dashboard_data.ks_child_boards[this.ks_dashboard_data.ks_selected_board_id][0]); + // $('#ks_dashboard_title_input').val(this.ks_dashboard_data.ks_child_boards[this.ks_dashboard_data.ks_selected_board_id][0]); this.ks_dashboard_data.name = this.ks_dashboard_data.ks_child_boards[this.ks_dashboard_data.ks_selected_board_id][0]; - this._rpc("/web/dataset/call_kw/ks_dashboard_ninja.board/update_child_board",{ + this._rpc("/web/dataset/call_kw/ks_dashboard_ninja.board/update_child_board", { model: 'ks_dashboard_ninja.board', method: 'update_child_board', args: ['update', self.ks_dashboard_id, { "ks_selected_board_id": this.ks_dashboard_data.ks_selected_board_id, }], - kwargs:{}, - }).then(function(result){ + kwargs: {}, + }).then(function (result) { window.location.reload(); }); } - _ksSetDiscardCurrentLayoutClick(){ + _ksSetDiscardCurrentLayoutClick() { this.ksOnLayoutSelection(this.ks_dashboard_data.ks_selected_board_id); $(this.header.el).find(".ks_dashboard_top_menu .ks_dashboard_top_settings").removeClass("ks_hide"); $(this.header.el).find(".ks_dashboard_top_menu .ks_am_content_element").removeClass("ks_hide"); @@ -883,32 +883,32 @@ export class KsDashboardNinja extends Component { var model = 'ks_dashboard_ninja.child_board'; var rec_id = self.ks_dashboard_data.ks_gridstack_config_id; self.ks_dashboard_data.ks_gridstack_config = JSON.stringify(grid_config); - if(this.ks_dashboard_data.ks_selected_board_id && this.ks_dashboard_data.ks_child_boards){ + if (this.ks_dashboard_data.ks_selected_board_id && this.ks_dashboard_data.ks_child_boards) { this.ks_dashboard_data.ks_child_boards[this.ks_dashboard_data.ks_selected_board_id][1] = JSON.stringify(grid_config); - if (this.ks_dashboard_data.ks_selected_board_id !== 'ks_default'){ + if (this.ks_dashboard_data.ks_selected_board_id !== 'ks_default') { rec_id = parseInt(this.ks_dashboard_data.ks_selected_board_id) } } if (!isMobileOS()) { - this._rpc("/web/dataset/call_kw/ks_dashboard_ninja.child_board/write",{ + this._rpc("/web/dataset/call_kw/ks_dashboard_ninja.child_board/write", { model: model, method: 'write', args: [rec_id, { "ks_gridstack_config": JSON.stringify(grid_config) }], - kwargs:{}, + kwargs: {}, }) } } - ks_get_current_gridstack_config(){ + ks_get_current_gridstack_config() { var self = this; - if (document.querySelector('.grid-stack') && document.querySelector('.grid-stack').gridstack){ + if (document.querySelector('.grid-stack') && document.querySelector('.grid-stack').gridstack) { var items = document.querySelector('.grid-stack').gridstack.el.gridstack.engine.nodes; } var grid_config = {} - if (items){ + if (items) { for (var i = 0; i < items.length; i++) { grid_config[items[i].id] = { 'x': items[i].x, @@ -921,26 +921,26 @@ export class KsDashboardNinja extends Component { return grid_config; } - ////////////////////////////// Export functions //////////////////////////////////////////// + ////////////////////////////// Export functions //////////////////////////////////////////// async ksChartExportXlsCsv(e) { var chart_id = e.currentTarget.dataset.chartId; var name = this.ks_dashboard_data.ks_item_data[chart_id].name; var context = this.getContext(); - if (this.ks_dashboard_data.ks_item_data[chart_id].ks_dashboard_item_type === 'ks_list_view'){ - var params = this.ksGetParamsForItemFetch(parseInt(chart_id)); - var data = { - "header": name, - "chart_data": this.ks_dashboard_data.ks_item_data[chart_id].ks_list_view_data, - "ks_item_id": chart_id, - "ks_export_boolean": true, - "context": context, - 'params':params, - } - }else{ + if (this.ks_dashboard_data.ks_item_data[chart_id].ks_dashboard_item_type === 'ks_list_view') { + var params = this.ksGetParamsForItemFetch(parseInt(chart_id)); + var data = { + "header": name, + "chart_data": this.ks_dashboard_data.ks_item_data[chart_id].ks_list_view_data, + "ks_item_id": chart_id, + "ks_export_boolean": true, + "context": context, + 'params': params, + } + } else { var data = { "header": name, "chart_data": this.ks_dashboard_data.ks_item_data[chart_id].ks_chart_data, - } + } } const blockUI = new BlockUI(); await download({ @@ -953,7 +953,7 @@ export class KsDashboardNinja extends Component { }); } - ksChartExportPdf (e){ + ksChartExportPdf(e) { var self = this; var chart_id = e.currentTarget.dataset.chartId; var name = this.ks_dashboard_data.ks_item_data[chart_id].name; @@ -961,32 +961,32 @@ export class KsDashboardNinja extends Component { base64_image = $($(e.target).parentsUntil(".grid-stack-item").slice(-1)[0]).find('.ks_chart_card_body')[0] var $ks_el = $($($(self.main_body.el).find(".grid-stack-item[gs-id=" + chart_id + "]")).find('.ks_chart_card_body')); var ks_height = $ks_el.height() - html2canvas(base64_image, {useCORS: true, allowTaint: false}).then(function(canvas){ + html2canvas(base64_image, { useCORS: true, allowTaint: false }).then(function (canvas) { var ks_image = canvas.toDataURL("image/png"); var ks_image_def = { - content: [{ + content: [{ image: ks_image, width: 500, height: ks_height, - }], - images: { - bee: ks_image - } - }; - pdfMake.createPdf(ks_image_def).download(name + '.pdf'); + }], + images: { + bee: ks_image + } + }; + pdfMake.createPdf(ks_image_def).download(name + '.pdf'); }) } - ksChartExportimage(e){ + ksChartExportimage(e) { var self = this; var chart_id = e.currentTarget.dataset.chartId; var name = this.ks_dashboard_data.ks_item_data[chart_id].name; var base64_image base64_image = $($(e.target).parentsUntil(".grid-stack-item").slice(-1)[0]).find(".ks_chart_card_body")[0] - html2canvas(base64_image,{useCORS: true, allowTaint: false}).then(function(canvas){ + html2canvas(base64_image, { useCORS: true, allowTaint: false }).then(function (canvas) { var ks_image = canvas.toDataURL("image/png"); const link = document.createElement('a'); - link.href = ks_image; + link.href = ks_image; link.download = name + 'png' document.body.appendChild(link); link.click() @@ -1021,55 +1021,55 @@ export class KsDashboardNinja extends Component { $(e.currentTarget).parent().addClass('ks_date_filter_selected') var item_data = self.ks_dashboard_data.ks_item_data[$parent.data().itemId]; var chart_data = JSON.parse(item_data.ks_chart_data); - this._rpc("/web/dataset/call_kw/ks_dashboard_ninja.item/write",{ - model: 'ks_dashboard_ninja.item', - method: 'write', - args: [$parent.data().itemId, { - "ks_chart_item_color": e.currentTarget.dataset.chartColor - }], - kwargs:{} - }).then(function() { - self.ks_dashboard_data.ks_item_data[$parent.data().itemId]['ks_chart_item_color'] = e.target.dataset.chartColor; - $(self.main_body.el).find(".grid-stack-item[gs-id=" + item_data.id + "]").find(".card-body").remove(); + this._rpc("/web/dataset/call_kw/ks_dashboard_ninja.item/write", { + model: 'ks_dashboard_ninja.item', + method: 'write', + args: [$parent.data().itemId, { + "ks_chart_item_color": e.currentTarget.dataset.chartColor + }], + kwargs: {} + }).then(function () { + self.ks_dashboard_data.ks_item_data[$parent.data().itemId]['ks_chart_item_color'] = e.target.dataset.chartColor; + $(self.main_body.el).find(".grid-stack-item[gs-id=" + item_data.id + "]").find(".card-body").remove(); - var js_id = self.actionService.currentController.jsId - self.actionService.restore(js_id) + var js_id = self.actionService.currentController.jsId + self.actionService.restore(js_id) }) } } - ksOnDashboardExportClick(ev){ + ksOnDashboardExportClick(ev) { ev.preventDefault(); - var self= this; + var self = this; var dashboard_id = JSON.stringify(this.ks_dashboard_id); - this._rpc("/web/dataset/call_kw/ks_dashboard_ninja.board/ks_dashboard_export", { + this._rpc("/web/dataset/call_kw/ks_dashboard_ninja.board/ks_dashboard_export", { model: 'ks_dashboard_ninja.board', method: "ks_dashboard_export", args: [dashboard_id], - kwargs: {dashboard_id: dashboard_id} - }).then(function(result) { + kwargs: { dashboard_id: dashboard_id } + }).then(function (result) { var name = "dashboard_ninja"; var data = { "header": name, "dashboard_data": - result, + result, } download({ - data: { - data:JSON.stringify(data) - }, + data: { + data: JSON.stringify(data) + }, url: '/ks_dashboard_ninja/export/dashboard_json', }); }); } - stoppropagation(ev){ -// ev.stopPropagation(); + stoppropagation(ev) { + // ev.stopPropagation(); this.ksAllowItemClick = false; } - ksOnDashboardImportClick(ev){ + ksOnDashboardImportClick(ev) { ev.preventDefault(); var self = this; var dashboard_id = this.ks_dashboard_id; @@ -1080,29 +1080,29 @@ export class KsDashboardNinja extends Component { kwargs: { dashboard_id: dashboard_id } - }).then((result)=>{ - self.actionService.doAction(result) + }).then((result) => { + self.actionService.doAction(result) }); } - _ksOnDnLayoutMenuSelect(ev){ + _ksOnDnLayoutMenuSelect(ev) { var selected_layout_id = $(ev.currentTarget).data('ks_layout_id'); this.ksOnLayoutSelection(selected_layout_id); } - ksOnLayoutSelection(layout_id){ + ksOnLayoutSelection(layout_id) { var self = this; var selected_layout_name = this.ks_dashboard_data.ks_child_boards[layout_id][0]; var selected_layout_grid_config = this.ks_dashboard_data.ks_child_boards[layout_id][1]; this.gridstackConfig = JSON.parse(selected_layout_grid_config); - Object.entries(this.gridstackConfig).forEach((x,y)=>{ - self.grid.update($(self.main_body.el).find(".grid-stack-item[gs-id=" + x[0] + "]")[0],{ x:x[1]['x'], y:x[1]['y'], w:x[1]['w'], h:x[1]['h'],autoPosition:false}); + Object.entries(this.gridstackConfig).forEach((x, y) => { + self.grid.update($(self.main_body.el).find(".grid-stack-item[gs-id=" + x[0] + "]")[0], { x: x[1]['x'], y: x[1]['y'], w: x[1]['w'], h: x[1]['h'], autoPosition: false }); }); -// this.ks_dashboard_data.ks_selected_board_id = layout_id; + // this.ks_dashboard_data.ks_selected_board_id = layout_id; $(self.header.el).find("#ks_dashboard_layout_dropdown_container .ks_layout_selected").removeClass("ks_layout_selected"); - $(self.header.el).find("li.ks_dashboard_layout_event[data-ks_layout_id='"+ layout_id + "']").addClass('ks_layout_selected'); + $(self.header.el).find("li.ks_dashboard_layout_event[data-ks_layout_id='" + layout_id + "']").addClass('ks_layout_selected'); $(self.header.el).find("#ks_dn_layout_button span:first-child").text(selected_layout_name); $(self.header.el).find(".ks_dashboard_top_menu .ks_dashboard_edit_layout").addClass("ks_hide"); $(self.header.el).find(".ks_dashboard_top_menu .ks_am_content_element").addClass("ks_hide"); @@ -1110,7 +1110,7 @@ export class KsDashboardNinja extends Component { $(self.header.el).find(".ks_dashboard_layout_edit_mode_settings").removeClass("ks_hide"); } - _onKsSaveLayoutClick(){ + _onKsSaveLayoutClick() { this.grid.setStatic(true) var self = this; // Have to save dashboard here @@ -1120,28 +1120,28 @@ export class KsDashboardNinja extends Component { var model = 'ks_dashboard_ninja.board'; var rec_id = self.ks_dashboard_id; - if(this.ks_dashboard_data.ks_selected_board_id && this.ks_dashboard_data.ks_child_boards){ + if (this.ks_dashboard_data.ks_selected_board_id && this.ks_dashboard_data.ks_child_boards) { this.ks_dashboard_data.ks_child_boards[this.ks_dashboard_data.ks_selected_board_id][0] = dashboard_title; - if (this.ks_dashboard_data.ks_selected_board_id !== 'ks_default'){ + if (this.ks_dashboard_data.ks_selected_board_id !== 'ks_default') { model = 'ks_dashboard_ninja.child_board'; rec_id = this.ks_dashboard_data.ks_selected_board_id; } } var new_model = `web/dataset/call_kw/${model}/write` - this._rpc(new_model,{ + this._rpc(new_model, { model: model, method: 'write', args: [rec_id, { 'name': dashboard_title }], - kwargs : {}, + kwargs: {}, }) } if (this.ks_dashboard_data.ks_item_data) self._ksSaveCurrentLayout(); self._ksRenderActiveMode(); } - _onKsCancelLayoutClick(){ + _onKsCancelLayoutClick() { var self = this; // render page again @@ -1154,13 +1154,13 @@ export class KsDashboardNinja extends Component { var self = this; self.grid.setStatic(true) var dashboard_title = $('#ks_dashboard_title_input').val(); - if (dashboard_title ==="") { + if (dashboard_title === "") { self.call('notification', 'notify', { message: "Dashboard Name is required to save as New Layout.", type: 'warning', }); - } else{ - if (!self.ks_dashboard_data.ks_child_boards){ + } else { + if (!self.ks_dashboard_data.ks_child_boards) { self.ks_dashboard_data.ks_child_boards = { 'ks_default': [this.ks_dashboard_data.name, self.ks_dashboard_data.ks_gridstack_config] } @@ -1168,7 +1168,7 @@ export class KsDashboardNinja extends Component { this.ks_dashboard_data.name = dashboard_title; var grid_config = self.ks_get_current_gridstack_config(); - this._rpc("/web/dataset/call_kw/ks_dashboard_ninja.board/update_child_board",{ + this._rpc("/web/dataset/call_kw/ks_dashboard_ninja.board/update_child_board", { model: 'ks_dashboard_ninja.board', method: 'update_child_board', args: ['create', self.ks_dashboard_id, { @@ -1178,24 +1178,24 @@ export class KsDashboardNinja extends Component { "ks_active": true, "company_id": self.ks_dashboard_data.ks_company_id, }], - kwargs : {}, - }).then(function(res_id){ + kwargs: {}, + }).then(function (res_id) { self.ks_update_child_board_value(dashboard_title, res_id, grid_config), - self._ksRenderActiveMode(); + self._ksRenderActiveMode(); window.location.reload(); }); } } - ks_update_child_board_value(dashboard_title, res_id, grid_config){ + ks_update_child_board_value(dashboard_title, res_id, grid_config) { var self = this; var child_board_id = res_id.toString(); self.ks_dashboard_data.ks_selected_board_id = child_board_id; var update_data = {}; update_data[child_board_id] = [dashboard_title, JSON.stringify(grid_config)]; - self.ks_dashboard_data.ks_child_boards = Object.assign(update_data,self.ks_dashboard_data.ks_child_boards); + self.ks_dashboard_data.ks_child_boards = Object.assign(update_data, self.ks_dashboard_data.ks_child_boards); } - _ksRenderActiveMode(){ + _ksRenderActiveMode() { var self = this self.ks_mode = 'active'; @@ -1209,7 +1209,7 @@ export class KsDashboardNinja extends Component { ks_child_boards: self.ks_dashboard_data.ks_child_boards, ks_multi_layout: self.ks_dashboard_data.multi_layouts, ks_dash_name: self.ks_dashboard_data.name, - self:self, + self: self, })); $('#ks_dashboard_title .ks_am_element').replaceWith($layout_container); $('#ks_dashboard_title_label').replaceWith($layout_container); @@ -1250,10 +1250,10 @@ export class KsDashboardNinja extends Component { self.grid.commit(); } - ks_remove_update_interval(){ + ks_remove_update_interval() { var self = this; if (self.ksUpdateDashboard) { - Object.values(self.ksUpdateDashboard).forEach(function(itemInterval) { + Object.values(self.ksUpdateDashboard).forEach(function (itemInterval) { clearInterval(itemInterval); }); self.ksUpdateDashboard = {}; @@ -1267,7 +1267,7 @@ export class KsDashboardNinja extends Component { self._ksRenderEditMode(); } - _ksRenderEditMode(){ + _ksRenderEditMode() { var self = this; self.ks_mode = 'edit'; self.ks_remove_update_interval(); @@ -1290,7 +1290,7 @@ export class KsDashboardNinja extends Component { $(self.main_body.el).find('.ks_dashboard_item_l5').removeClass('ks_dashboard_item_header_hover'); $(self.main_body.el).find('.ks_dashboard_item_button_container').removeClass('ks_dashboard_item_header_hover'); -// $(self.header.el).find('.ks_dashboard_link').addClass("ks_hide") + // $(self.header.el).find('.ks_dashboard_link').addClass("ks_hide") $(self.header.el).find('.ks_dashboard_top_settings').addClass("ks_hide") $(self.header.el).find('.ks_dashboard_edit_mode_settings').removeClass("ks_hide") @@ -1307,27 +1307,27 @@ export class KsDashboardNinja extends Component { onAddItemTypeClick(e) { var self = this; - self.dialogService.add(FormViewDialog,{ - resModel: 'ks_dashboard_ninja.item', - context: { - 'ks_dashboard_id': self.ks_dashboard_id, - 'ks_dashboard_item_type': 'ks_tile', - 'form_view_ref': 'ks_dashboard_ninja.item_form_view', - 'form_view_initial_mode': 'edit', - 'ks_set_interval': self.ks_dashboard_data.ks_set_interval, - 'ks_data_formatting':self.ks_dashboard_data.ks_data_formatting, - 'ks_form_view' : true - }, - onRecordSaved:()=>{ - var js_id = self.actionService.currentController.jsId - self.actionService.restore(js_id) - $('body').removeClass('ks_dn_create_chart') + self.dialogService.add(FormViewDialog, { + resModel: 'ks_dashboard_ninja.item', + context: { + 'ks_dashboard_id': self.ks_dashboard_id, + 'ks_dashboard_item_type': 'ks_tile', + 'form_view_ref': 'ks_dashboard_ninja.item_form_view', + 'form_view_initial_mode': 'edit', + 'ks_set_interval': self.ks_dashboard_data.ks_set_interval, + 'ks_data_formatting': self.ks_dashboard_data.ks_data_formatting, + 'ks_form_view': true + }, + onRecordSaved: () => { + var js_id = self.actionService.currentController.jsId + self.actionService.restore(js_id) + $('body').removeClass('ks_dn_create_chart') - }, - onRecordDiscarded:()=>{ - $('body').removeClass('ks_dn_create_chart') - } - }); + }, + onRecordDiscarded: () => { + $('body').removeClass('ks_dn_create_chart') + } + }); } @@ -1336,24 +1336,24 @@ export class KsDashboardNinja extends Component { $('.ks_input_import_item_button').click(); } - ksImportItem(e) { + ksImportItem(e) { var self = this; var fileReader = new FileReader(); - fileReader.onload = function() { + fileReader.onload = function () { $('.ks_input_import_item_button').val(''); self._rpc("/web/dataset/call_kw/ks_dashboard_ninja.board/ks_import_item", { - model: 'ks_dashboard_ninja.board', - method: 'ks_import_item', - args: [self.ks_dashboard_id], - kwargs: { - file: fileReader.result, - dashboard_id: self.ks_dashboard_id - } - }).then(function(result) { + model: 'ks_dashboard_ninja.board', + method: 'ks_import_item', + args: [self.ks_dashboard_id], + kwargs: { + file: fileReader.result, + dashboard_id: self.ks_dashboard_id + } + }).then(function (result) { if (result === "Success") { - var js_id = self.actionService.currentController.jsId - self.actionService.restore(js_id) + var js_id = self.actionService.currentController.jsId + self.actionService.restore(js_id) } }); }; @@ -1361,8 +1361,8 @@ export class KsDashboardNinja extends Component { } - ksOnDashboardSettingClick(ev){ - var self= this; + ksOnDashboardSettingClick(ev) { + var self = this; var dashboard_id = this.ks_dashboard_id; var action = { name: _t('ks_open_setting'), @@ -1370,7 +1370,7 @@ export class KsDashboardNinja extends Component { res_model: 'ks_dashboard_ninja.board', res_id: dashboard_id, domain: [], - context: {'create':false}, + context: { 'create': false }, views: [ [false, 'form'] ], @@ -1380,10 +1380,10 @@ export class KsDashboardNinja extends Component { self.actionService.doAction(action) } - ksOnDashboardDeleteClick(ev){ + ksOnDashboardDeleteClick(ev) { ev.preventDefault(); var dashboard_id = this.ks_dashboard_id; - var self= this; + var self = this; self.dialogService.add(ConfirmationDialog, { body: _t("Are you sure you want to delete this dashboard ?"), confirm: () => { @@ -1391,16 +1391,16 @@ export class KsDashboardNinja extends Component { model: 'ks.dashboard.delete.wizard', method: "ks_delete_record", args: [self.ks_dashboard_id], - kwargs: {dashboard_id: dashboard_id} - }).then((result)=>{ - self.actionService.doAction(result) + kwargs: { dashboard_id: dashboard_id } + }).then((result) => { + self.actionService.doAction(result) }); }, }); } - ksOnDashboardCreateClick(ev){ - var self= this; + ksOnDashboardCreateClick(ev) { + var self = this; var action = { name: _t('Create Dashboard'), type: 'ir.actions.act_window', @@ -1417,97 +1417,97 @@ export class KsDashboardNinja extends Component { self.actionService.doAction(action) } - ksOnDashboardDuplicateClick(ev){ + ksOnDashboardDuplicateClick(ev) { ev.preventDefault(); - var self= this; + var self = this; var dashboard_id = this.ks_dashboard_id; this._rpc('/web/dataset/call_kw/ks.dashboard.duplicate.wizard/DuplicateDashBoard', { model: 'ks.dashboard.duplicate.wizard', method: "DuplicateDashBoard", args: [self.ks_dashboard_id], kwargs: {} - }).then((result)=>{ + }).then((result) => { self.actionService.doAction(result) }); - } + } onEditItemTypeClick(ev) { this.ksAllowItemClick = false; - var self =this - if(ev.currentTarget.dataset.itemId){ - self.dialogService.add(FormViewDialog,{ + var self = this + if (ev.currentTarget.dataset.itemId) { + self.dialogService.add(FormViewDialog, { resModel: 'ks_dashboard_ninja.item', - resId : parseInt(ev.currentTarget.dataset.itemId), - context: { - 'form_view_ref': 'ks_dashboard_ninja.item_form_view', - 'form_view_initial_mode': 'edit', - 'ks_form_view' :true - }, - onRecordSaved:()=>{ + resId: parseInt(ev.currentTarget.dataset.itemId), + context: { + 'form_view_ref': 'ks_dashboard_ninja.item_form_view', + 'form_view_initial_mode': 'edit', + 'ks_form_view': true + }, + onRecordSaved: () => { - var js_id = self.actionService.currentController.jsId - self.actionService.restore(js_id) - $('body').removeClass('ks_dn_create_chart') - }, - onRecordDiscarded:()=>{ - $('body').removeClass('ks_dn_create_chart') - } + var js_id = self.actionService.currentController.jsId + self.actionService.restore(js_id) + $('body').removeClass('ks_dn_create_chart') + }, + onRecordDiscarded: () => { + $('body').removeClass('ks_dn_create_chart') + } }); } } - kscreateaiitem(ev){ - var self= this; - self.dialogService.add(FormViewDialog,{ - resModel: 'ks_dashboard_ninja.arti_int', - context: { - 'ks_dashboard_id': self.ks_dashboard_id, - 'ks_form_view' : true - }, - }); - } - kscreateaidashboard(ev){ - var self= this; + kscreateaiitem(ev) { + var self = this; + self.dialogService.add(FormViewDialog, { + resModel: 'ks_dashboard_ninja.arti_int', + context: { + 'ks_dashboard_id': self.ks_dashboard_id, + 'ks_form_view': true + }, + }); + } + kscreateaidashboard(ev) { + var self = this; var action = { - name: _t('Generate Dashboard with AI'), - type: 'ir.actions.act_window', - res_model: 'ks_dashboard_ninja.ai_dashboard', - domain: [], - context: { - 'ks_dashboard_id':this.ks_dashboard_id - }, - views: [ - [false, 'form'] - ], - view_mode: 'form', - target: 'new', - } - self.actionService.doAction(action) + name: _t('Generate Dashboard with AI'), + type: 'ir.actions.act_window', + res_model: 'ks_dashboard_ninja.ai_dashboard', + domain: [], + context: { + 'ks_dashboard_id': this.ks_dashboard_id + }, + views: [ + [false, 'form'] + ], + view_mode: 'form', + target: 'new', } - ks_gen_ai_analysis(ev){ + self.actionService.doAction(action) + } + ks_gen_ai_analysis(ev) { var self = this; var ks_items = Object.values(self.ks_dashboard_data.ks_item_data); var ks_items_explain = [] var ks_rest_items = [] - if (ks_items.length>0){ - ks_items.map((item)=>{ - if (!item.ks_ai_analysis){ + if (ks_items.length > 0) { + ks_items.map((item) => { + if (!item.ks_ai_analysis) { ks_items_explain.push({ - name:item.name, - id:item.id, - ks_chart_data:item.ks_chart_data?{...JSON.parse(item.ks_chart_data),...{domains:[],previous_domain:[]}}:item.ks_chart_data, - ks_list_view_data:item.ks_list_view_data?JSON.parse(item.ks_list_view_data):item.ks_list_view_data, - item_type:item.ks_dashboard_item_type, - groupedby:item.ks_chart_relation_groupby_name, - subgroupedby:item.ks_chart_relation_sub_groupby_name, - stacked_bar_chart:item.ks_bar_chart_stacked, - count_type:item.ks_record_count_type, - count:item.ks_record_count, - model_name:item.ks_model_display_name, - kpi_data:item.ks_kpi_data + name: item.name, + id: item.id, + ks_chart_data: item.ks_chart_data ? { ...JSON.parse(item.ks_chart_data), ...{ domains: [], previous_domain: [] } } : item.ks_chart_data, + ks_list_view_data: item.ks_list_view_data ? JSON.parse(item.ks_list_view_data) : item.ks_list_view_data, + item_type: item.ks_dashboard_item_type, + groupedby: item.ks_chart_relation_groupby_name, + subgroupedby: item.ks_chart_relation_sub_groupby_name, + stacked_bar_chart: item.ks_bar_chart_stacked, + count_type: item.ks_record_count_type, + count: item.ks_record_count, + model_name: item.ks_model_display_name, + kpi_data: item.ks_kpi_data }) } - else{ + else { ks_rest_items.push(item) } @@ -1515,77 +1515,77 @@ export class KsDashboardNinja extends Component { this.dialogService.add(ConfirmationDialog, { body: _t("Do you agree that AI should be used to produce the explanation? It will take a few minutes to finish the process?"), confirm: () => { - self._rpc("/web/dataset/call_kw/ks_dashboard_ninja.arti_int/ks_generate_analysis",{ + self._rpc("/web/dataset/call_kw/ks_dashboard_ninja.arti_int/ks_generate_analysis", { model: 'ks_dashboard_ninja.arti_int', method: 'ks_generate_analysis', - args: [ks_items_explain,ks_rest_items,self.ks_dashboard_id], - kwargs:{}, - }).then(function(result) { - if (result){ - var js_id = self.actionService.currentController.jsId - self.actionService.restore(js_id) - } - }); + args: [ks_items_explain, ks_rest_items, self.ks_dashboard_id], + kwargs: {}, + }).then(function (result) { + if (result) { + var js_id = self.actionService.currentController.jsId + self.actionService.restore(js_id) + } + }); } - }); - }else{ - self.notification.add(_t('Plese make few items to explain with AI'),{ - title:_t("Failed"), + }); + } else { + self.notification.add(_t('Plese make few items to explain with AI'), { + title: _t("Failed"), type: 'warning', }); } } - ks_switch_default_dashboard(ev){ + ks_switch_default_dashboard(ev) { var self = this; - if (self.ks_dashboard_data.ks_ai_explain_dash){ - self._rpc("/web/dataset/call_kw/ks_dashboard_ninja.arti_int/ks_switch_default_dashboard",{ - model: 'ks_dashboard_ninja.arti_int', - method: 'ks_switch_default_dashboard', - args: [self.ks_dashboard_id], - kwargs:{}, - }).then(function(result) { - var js_id = self.actionService.currentController.jsId - self.actionService.restore(js_id) - }); + if (self.ks_dashboard_data.ks_ai_explain_dash) { + self._rpc("/web/dataset/call_kw/ks_dashboard_ninja.arti_int/ks_switch_default_dashboard", { + model: 'ks_dashboard_ninja.arti_int', + method: 'ks_switch_default_dashboard', + args: [self.ks_dashboard_id], + kwargs: {}, + }).then(function (result) { + var js_id = self.actionService.currentController.jsId + self.actionService.restore(js_id) + }); } } - async speak_once(ev,item){ + async speak_once(ev, item) { this.ksAllowItemClick = false; ev.preventDefault() var ks_audio = ev.currentTarget - $(document.querySelectorAll('audio')).each((index,item)=>{ - if ($(item).attr('src') && $(ks_audio).find('audio').attr('src') != $(item).attr('src')){ + $(document.querySelectorAll('audio')).each((index, item) => { + if ($(item).attr('src') && $(ks_audio).find('audio').attr('src') != $(item).attr('src')) { item.pause() $(item).parent().find('.fa.fa-volume-up').addClass('d-none'); - if (!$(item).parent().find(".fa-pause").length){ + if (!$(item).parent().find(".fa-pause").length) { $(item).parent().append(''); } } }) - if (!this.ks_speeches.length){ - if ($(ks_audio).find('audio').attr('src') && $(ks_audio).find('audio')[0].paused){ + if (!this.ks_speeches.length) { + if ($(ks_audio).find('audio').attr('src') && $(ks_audio).find('audio')[0].paused) { $(ks_audio).find('audio')[0].play(); $(ks_audio).find('.fa.fa-volume-up').removeClass('d-none'); $(ks_audio).find('.fa.fa-pause').remove(); - }else if ($(ks_audio).find('audio').attr('src') && !$(ks_audio).find('audio')[0].paused){ + } else if ($(ks_audio).find('audio').attr('src') && !$(ks_audio).find('audio')[0].paused) { $(ks_audio).find('audio')[0].pause(); $(ks_audio).find('.fa.fa-volume-up').addClass('d-none'); $(ks_audio).append(''); - }else{ + } else { $(ks_audio).find('span').addClass('d-none') $(ks_audio).append('
') - this.ks_speeches.push(this._rpc('web/dataset/call_kw/ks_dashboard_ninja.arti_int/ks_generatetext_to_speech',{ - model : "ks_dashboard_ninja.arti_int", - method:"ks_generatetext_to_speech", - args:[item.id], - kwargs:{} - }).then(function(result){ - if (result){ + this.ks_speeches.push(this._rpc('web/dataset/call_kw/ks_dashboard_ninja.arti_int/ks_generatetext_to_speech', { + model: "ks_dashboard_ninja.arti_int", + method: "ks_generatetext_to_speech", + args: [item.id], + kwargs: {} + }).then(function (result) { + if (result) { $(ks_audio).find('.spinner-grow').remove() $(ks_audio).find('span').removeClass('d-none') var audio = (JSON.parse(result)).snd; - $(ks_audio).find('audio')[0].src="data:audio/wav;base64, "+audio; + $(ks_audio).find('audio')[0].src = "data:audio/wav;base64, " + audio; $(ks_audio).find('audio')[0].play() this.ks_speeches.pop() } @@ -1598,16 +1598,16 @@ export class KsDashboardNinja extends Component { } -KsDashboardNinja.components = { Ksdashboardtile, Ksdashboardlistview, Ksdashboardgraph, Ksdashboardkpiview, Ksdashboardtodo, DateTimePicker, DateTimeInput}; +KsDashboardNinja.components = { Ksdashboardtile, Ksdashboardlistview, Ksdashboardgraph, Ksdashboardkpiview, Ksdashboardtodo, DateTimePicker, DateTimeInput }; KsDashboardNinja.template = "ks_dashboard_ninja.KsDashboardNinjaHeader" registry.category("actions").add("ks_dashboard_ninja", KsDashboardNinja); -const ks_dn_webclient ={ +const ks_dn_webclient = { async loadRouterState(...args) { var self = this; -// const sup = await this.super(...args); + // const sup = await this.super(...args); const sup = await super.loadRouterState(...args); - const ks_reload_menu = async (id) => { + const ks_reload_menu = async (id) => { this.menuService.reload().then(() => { self.menuService.selectMenu(id); }); diff --git a/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml b/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml index e6f5ad444..29397704b 100644 --- a/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml +++ b/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml @@ -2,7 +2,7 @@ - +
diff --git a/sh_backmate_theme_adv_enterprise/__manifest__.py b/sh_backmate_theme_adv_enterprise/__manifest__.py index ad78304f5..fb8185edc 100644 --- a/sh_backmate_theme_adv_enterprise/__manifest__.py +++ b/sh_backmate_theme_adv_enterprise/__manifest__.py @@ -128,7 +128,7 @@ "sh_backmate_theme_adv_enterprise/static/src/js/navbar.js", 'sh_backmate_theme_adv_enterprise/static/src/js/dropdown.js', "sh_backmate_theme_adv_enterprise/static/src/xml/menu.xml", - + "sh_backmate_theme_adv_enterprise/static/src/scss/menu/fullscreen_toggle.scss", #Theme Config "sh_backmate_theme_adv_enterprise/static/src/js/theme_config_custom.js", diff --git a/sh_backmate_theme_adv_enterprise/static/src/js/navbar.js b/sh_backmate_theme_adv_enterprise/static/src/js/navbar.js index 71adbef96..9aedeee24 100644 --- a/sh_backmate_theme_adv_enterprise/static/src/js/navbar.js +++ b/sh_backmate_theme_adv_enterprise/static/src/js/navbar.js @@ -10,7 +10,7 @@ import { isMobileOS } from "@web/core/browser/feature_detection"; import { session } from "@web/session"; import { useService } from "@web/core/utils/hooks"; import { jsonrpc } from "@web/core/network/rpc_service"; -import { onMounted } from "@odoo/owl"; +import { onMounted, useState } from "@odoo/owl"; var icon_style = 'standard'; var sidebar_collapse_style = ''; @@ -29,21 +29,40 @@ patch(NavBar.prototype, { this.getMenuBadgeData(); this.orm = useService("orm"); enable_multi_tab = session.sh_enable_multi_tab + // 定义状态 + this.state = useState({ + exFullscreen: false, + }); + // 监听全屏状态变化(包括 ESC 退出) + document.addEventListener("fullscreenchange", () => { + this.state.exFullscreen = !!document.fullscreenElement; + }); + document.addEventListener("webkitfullscreenchange", () => { + this.state.exFullscreen = !!document.webkitFullscreenElement; + }); + document.addEventListener("mozfullscreenchange", () => { + this.state.exFullscreen = !!document.mozFullScreenElement; + }); + document.addEventListener("MSFullscreenChange", () => { + this.state.exFullscreen = !!document.msFullscreenElement; + }); onMounted(() => { - if (enable_multi_tab){ - this.addmultitabtags() + if (enable_multi_tab) { + this.addmultitabtags() } $('.direct_menu').on('click', function (ev) { - $('.sh_dropdown_div').find('.active').removeClass('active'); - $('.dropdown-menu').find('.active').removeClass('active'); - $(ev.currentTarget).addClass('active') + $('.sh_dropdown_div').find('.active').removeClass('active'); + $('.dropdown-menu').find('.active').removeClass('active'); + $(ev.currentTarget).addClass('active') }); + //默认隐藏top bar + this._click_hide_top_bar(); }); const data = await this.orm.searchRead( - "sh.back.theme.config.settings", - [['id', '=', 1]], - ['icon_style','sidebar_collapse_style','search_style'] - ); + "sh.back.theme.config.settings", + [['id', '=', 1]], + ['icon_style', 'sidebar_collapse_style', 'search_style'] + ); if (data) { var i; for (i = 0; i < data.length; i++) { @@ -59,9 +78,35 @@ patch(NavBar.prototype, { } } } - }, - + /** + * 切换全屏显示 + **/ + _click_fullscreen_toggle(ev) { + const elem = document.documentElement; + if ( + document.fullscreenElement || + document.webkitFullscreenElement || + document.mozFullScreenElement || + document.msFullscreenElement + ) { + if (document.exitFullscreen) { + document.exitFullscreen(); + } else if (document.webkitExitFullscreen) { + document.webkitExitFullscreen(); // Safari + } else if (document.msExitFullscreen) { + document.msExitFullscreen(); // IE11 + } + } else { + if (elem.requestFullscreen) { + elem.requestFullscreen(); + } else if (elem.webkitRequestFullscreen) { + elem.webkitRequestFullscreen(); // Safari + } else if (elem.msRequestFullscreen) { + elem.msRequestFullscreen(); // IE11 + } + } + }, /** * 获取菜单角标 * */ @@ -77,12 +122,12 @@ patch(NavBar.prototype, { method: "POST", dataType: 'json', async: false, // 设置为同步请求 - beforeSend: (xhr) => {xhr.setRequestHeader('Content-Type', 'application/json');}, - data : JSON.stringify(jsonData), + beforeSend: (xhr) => { xhr.setRequestHeader('Content-Type', 'application/json'); }, + data: JSON.stringify(jsonData), success: (result) => { this.menuBadgeInfo = result.result; }, - error: function(xhr, status, error) { + error: function (xhr, status, error) { // 请求失败的处理逻辑 console.error("Error:", error); } @@ -118,123 +163,123 @@ patch(NavBar.prototype, { return badgeCount; }, - onMouseenter_o_app2(ev){ + onMouseenter_o_app2(ev) { $(ev.target.parentElement).find('ul.show_ul').css("transition", "all 0.6s ease 0s;"); $(ev.target.parentElement).find('ul.show_ul').slideDown("slow"); }, - onMouseenter_sh_backmate_theme_appmenu_div(ev){ + onMouseenter_sh_backmate_theme_appmenu_div(ev) { if ($('.o_web_client').hasClass('o_rtl')) { - if ($('#js_bar_toggle_btn_mobile').css("top") == '0px') { - $('.o_action_manager').css("margin-right", '260px'); - $('.o_menu_systray').css("width", '260px'); - $('.o_main_navbar ul.o_menu_systray .o_debug_manager .dropdown-menu.show').css("right", "260px"); - $('.o_mail_systray_dropdown').css("right", "260px"); - $('.o_switch_company_menu .dropdown-menu').css("right", "260px"); - if (sidebar_collapse_style != 'expanded' && search_style != 'collapsed') { - $('.sh_search_container').css("margin-right", '190px'); - $('#object1').css("padding-right", "0px"); - $('.multi_tab_section').css("margin-right", '260px'); - } - } - } else { - if ($('#js_bar_toggle_btn_mobile').css("top") == '0px') { + if ($('#js_bar_toggle_btn_mobile').css("top") == '0px') { + $('.o_action_manager').css("margin-right", '260px'); + $('.o_menu_systray').css("width", '260px'); + $('.o_main_navbar ul.o_menu_systray .o_debug_manager .dropdown-menu.show').css("right", "260px"); + $('.o_mail_systray_dropdown').css("right", "260px"); + $('.o_switch_company_menu .dropdown-menu').css("right", "260px"); + if (sidebar_collapse_style != 'expanded' && search_style != 'collapsed') { + $('.sh_search_container').css("margin-right", '190px'); + $('#object1').css("padding-right", "0px"); + $('.multi_tab_section').css("margin-right", '260px'); + } + } + } else { + if ($('#js_bar_toggle_btn_mobile').css("top") == '0px') { - if (sidebar_collapse_style != 'expanded') { - $('.multi_tab_section').css("margin-left", '260px'); - $('.o_action_manager').css("margin-left", '260px'); - } - $('.o_menu_systray').css("width", '260px'); - $('.o_main_navbar ul.o_menu_systray .o_debug_manager .dropdown-menu.show').css("left", "260px"); - $('.o_mail_systray_dropdown').css("left", "260px"); - $('.o_switch_company_menu .dropdown-menu').css("left", "260px"); - if (sidebar_collapse_style != 'expanded' && search_style != 'collapsed') { - $('.sh_search_container').css("margin-left", '190px'); - $('#object1').css("padding-left", "0px"); - } - } - } + if (sidebar_collapse_style != 'expanded') { + $('.multi_tab_section').css("margin-left", '260px'); + $('.o_action_manager').css("margin-left", '260px'); + } + $('.o_menu_systray').css("width", '260px'); + $('.o_main_navbar ul.o_menu_systray .o_debug_manager .dropdown-menu.show').css("left", "260px"); + $('.o_mail_systray_dropdown').css("left", "260px"); + $('.o_switch_company_menu .dropdown-menu').css("left", "260px"); + if (sidebar_collapse_style != 'expanded' && search_style != 'collapsed') { + $('.sh_search_container').css("margin-left", '190px'); + $('#object1').css("padding-left", "0px"); + } + } + } }, - onMouseleave_sh_backmate_theme_appmenu_div(ev){ + onMouseleave_sh_backmate_theme_appmenu_div(ev) { if ($('.o_web_client').hasClass('o_rtl')) { - if ($('#js_bar_toggle_btn_mobile').css("top") == '0px') { + if ($('#js_bar_toggle_btn_mobile').css("top") == '0px') { - if (sidebar_collapse_style != 'expanded') { - $(ev.target).find('.o_app2.sh_dropdown.active').parents('.sh_dropdown_div').find('ul.show_ul').slideUp("slow"); - $(ev.target).find('.o_app2.sh_dropdown.active').parents('.sh_dropdown_div').find('ul.show_ul').css("transition", "all 0.6s ease 0s;"); - $('#object1').css("padding-right", "0px"); - $('.multi_tab_section').css("margin-right", '80px'); - } + if (sidebar_collapse_style != 'expanded') { + $(ev.target).find('.o_app2.sh_dropdown.active').parents('.sh_dropdown_div').find('ul.show_ul').slideUp("slow"); + $(ev.target).find('.o_app2.sh_dropdown.active').parents('.sh_dropdown_div').find('ul.show_ul').css("transition", "all 0.6s ease 0s;"); + $('#object1').css("padding-right", "0px"); + $('.multi_tab_section').css("margin-right", '80px'); + } - $('.o_action_manager').css("margin-right", '68px'); - $('.sh_search_container').css("margin-right", '0px'); - $('.o_menu_systray').css("width", '68px'); - if ($('ul.dropdown-menu.dropdown-menu-right').hasClass('show_ul')) { - } - $('.o_main_navbar ul.o_menu_systray .o_debug_manager .dropdown-menu.show').css("right", "68px"); - $('.o_mail_systray_dropdown').css("right", "68px"); - $('.o_switch_company_menu .dropdown-menu').css("right", "68px"); - $(ev.target).find('.o_app2.sh_dropdown.active').parents('.sh_dropdown_div').find('ul.show_ul').css("display", "none"); - } - } else { - if ($('#js_bar_toggle_btn_mobile').css("top") == '0px') { - if (sidebar_collapse_style != 'expanded') { - $(ev.target).find('.o_app2.sh_dropdown.active').parents('.sh_dropdown_div').find('ul.show_ul').slideUp("slow"); - $(ev.target).find('.o_app2.sh_dropdown.active').parents('.sh_dropdown_div').find('ul.show_ul').css("transition", "all 0.6s ease 0s;"); - $('#object1').css("padding-left", "0px"); - $('.multi_tab_section').css("margin-left", '80px'); - $('.o_action_manager').css("margin-left", '68px'); - } + $('.o_action_manager').css("margin-right", '68px'); + $('.sh_search_container').css("margin-right", '0px'); + $('.o_menu_systray').css("width", '68px'); + if ($('ul.dropdown-menu.dropdown-menu-right').hasClass('show_ul')) { + } + $('.o_main_navbar ul.o_menu_systray .o_debug_manager .dropdown-menu.show').css("right", "68px"); + $('.o_mail_systray_dropdown').css("right", "68px"); + $('.o_switch_company_menu .dropdown-menu').css("right", "68px"); + $(ev.target).find('.o_app2.sh_dropdown.active').parents('.sh_dropdown_div').find('ul.show_ul').css("display", "none"); + } + } else { + if ($('#js_bar_toggle_btn_mobile').css("top") == '0px') { + if (sidebar_collapse_style != 'expanded') { + $(ev.target).find('.o_app2.sh_dropdown.active').parents('.sh_dropdown_div').find('ul.show_ul').slideUp("slow"); + $(ev.target).find('.o_app2.sh_dropdown.active').parents('.sh_dropdown_div').find('ul.show_ul').css("transition", "all 0.6s ease 0s;"); + $('#object1').css("padding-left", "0px"); + $('.multi_tab_section').css("margin-left", '80px'); + $('.o_action_manager').css("margin-left", '68px'); + } - $('.sh_search_container').css("margin-left", '0px'); - $('.o_menu_systray').css("width", '68px'); - if ($('ul.dropdown-menu.dropdown-menu-right').hasClass('show_ul')) { - } - $('.o_main_navbar ul.o_menu_systray .o_debug_manager .dropdown-menu.show').css("left", "68px"); - $('.o_mail_systray_dropdown').css("left", "68px"); - $('.o_switch_company_menu .dropdown-menu').css("left", "68px"); + $('.sh_search_container').css("margin-left", '0px'); + $('.o_menu_systray').css("width", '68px'); + if ($('ul.dropdown-menu.dropdown-menu-right').hasClass('show_ul')) { + } + $('.o_main_navbar ul.o_menu_systray .o_debug_manager .dropdown-menu.show').css("left", "68px"); + $('.o_mail_systray_dropdown').css("left", "68px"); + $('.o_switch_company_menu .dropdown-menu').css("left", "68px"); - } + } - } + } }, - _click_o_app(ev){ + _click_o_app(ev) { $(".sh_backmate_theme_appmenu_div").toggleClass("sidebar_toggle"); $(".blur_div").toggleClass("blur_toggle"); $('.o_menu_systray').css("opacity", '1'); /*todo later*/ /*$(this).parents('.sh_dropdown_div').find('.sh_dropdown').removeClass('sh_dropdown'); - $(this).parents('.sh_dropdown_div').find('.show_ul').css("display", "none");*/ + $(this).parents('.sh_dropdown_div').find('.show_ul').css("display", "none");*/ }, - _click_toggle_bar(ev){ + _click_toggle_bar(ev) { if ($("#toggle_bar").hasClass("fa-bars")) { - ev.target.classList.toggle('fa-times'); - $("#toggle_bar").removeClass('fa-bars'); - } else { - ev.target.classList.toggle('fa-bars'); - $("#toggle_bar").removeClass('fa-times'); - } + ev.target.classList.toggle('fa-times'); + $("#toggle_bar").removeClass('fa-bars'); + } else { + ev.target.classList.toggle('fa-bars'); + $("#toggle_bar").removeClass('fa-times'); + } }, - _click_js_bar_toggle_btn_mobile(ev){ + _click_js_bar_toggle_btn_mobile(ev) { $(".sh_backmate_theme_appmenu_div").toggleClass("sidebar_toggle"); $(".blur_div").toggleClass("blur_toggle"); $('.o_menu_systray').css("opacity", '1'); if ($('.sidebar_toggle').css("max-width") != '100%') { - $('.o_action_manager').css("margin-left" , '0px'); - $('.o_menu_systray').css("width", '0px'); - $('.o_menu_systray').css("opacity", '0'); - $('ul.dropdown-menu.dropdown-menu-right').css("display", 'none'); - $('ul.dropdown-menu.dropdown-menu-right').removeClass('show_ul'); - $('span.sh_dropdown').removeClass('sh_dropdown'); - $("#toggle_bar").addClass('fa-bars'); - $("#toggle_bar").removeClass('fa-times'); - $("#js_bar_toggle_btn_mobile").css("display","none"); + $('.o_action_manager').css("margin-left", '0px'); + $('.o_menu_systray').css("width", '0px'); + $('.o_menu_systray').css("opacity", '0'); + $('ul.dropdown-menu.dropdown-menu-right').css("display", 'none'); + $('ul.dropdown-menu.dropdown-menu-right').removeClass('show_ul'); + $('span.sh_dropdown').removeClass('sh_dropdown'); + $("#toggle_bar").addClass('fa-bars'); + $("#toggle_bar").removeClass('fa-times'); + $("#js_bar_toggle_btn_mobile").css("display", "none"); } else { - $('.o_action_manager').css("margin-left" , '310px'); + $('.o_action_manager').css("margin-left", '310px'); $('.o_menu_systray').css("width", '100%'); $('.o_menu_systray').css("opacity", '1'); $("#toggle_bar").removeClass('fa-bars'); @@ -242,16 +287,16 @@ patch(NavBar.prototype, { } }, - _click_blur_div(ev){ + _click_blur_div(ev) { if ($('#js_bar_toggle_btn_mobile').css("top") != '0px') { - if (!$('.blur_div').hasClass('blur_toggle')) { - $(".sh_backmate_theme_appmenu_div").toggleClass("sidebar_toggle"); - $(".blur_div").toggleClass("blur_toggle"); - $('.o_menu_systray').css("opacity", '1'); - } - } + if (!$('.blur_div').hasClass('blur_toggle')) { + $(".sh_backmate_theme_appmenu_div").toggleClass("sidebar_toggle"); + $(".blur_div").toggleClass("blur_toggle"); + $('.o_menu_systray').css("opacity", '1'); + } + } }, - _click_hide_top_bar(ev){ + _click_hide_top_bar(ev) { $('.o_main_navbar').css("width", "0px"); $('.o_main_navbar').css("height", "0px"); $('.o_main_navbar').css("min-height", "0px"); @@ -266,7 +311,7 @@ patch(NavBar.prototype, { $("#hide_top_bar").css("display", "none"); }, - _click_show_top_bar(ev){ + _click_show_top_bar(ev) { $('.o_main_navbar').css("width", "100%"); $('.o_main_navbar').css("height", "4rem"); $('.o_main_navbar').css("min-height", "4rem"); @@ -278,7 +323,7 @@ patch(NavBar.prototype, { $("#show_top_bar").css("display", "none"); }, - get_current_company(){ + get_current_company() { let current_company_id; if (session.user_context.allowed_company_ids) { current_company_id = session.user_context.allowed_company_ids[0]; @@ -298,14 +343,14 @@ patch(NavBar.prototype, { $(".sh_backmate_theme_appmenu_div").toggleClass("sidebar_toggle"); $(".blur_div").toggleClass("blur_toggle"); $('.o_menu_systray').css("opacity", '1'); - if (enable_multi_tab){ - if(window.event.shiftKey){ + if (enable_multi_tab) { + if (window.event.shiftKey) { this._createMultiTab(menu) - }else{ + } else { } } - if(this.websiteCustomMenus){ + if (this.websiteCustomMenus) { const websiteMenu = this.websiteCustomMenus.get(menu.xmlid); if (websiteMenu) { return this.websiteCustomMenus.open(menu); @@ -318,114 +363,114 @@ patch(NavBar.prototype, { }, _createMultiTab: function (ev) { - var tab_name = ev.name - var url = '#menu_id='+ev.id + '&action='+ ev.actionID - var actionId = ev.actionID - var menuId = ev.id - var menu_xmlid = ev.xmlid - var self = this - localStorage.setItem('LastCreatedTab',actionId) + var tab_name = ev.name + var url = '#menu_id=' + ev.id + '&action=' + ev.actionID + var actionId = ev.actionID + var menuId = ev.id + var menu_xmlid = ev.xmlid + var self = this + localStorage.setItem('LastCreatedTab', actionId) - jsonrpc('/add/mutli/tab', { - 'name':tab_name, - 'url':url, - 'actionId':actionId, - 'menuId':menuId, - 'menu_xmlid':menu_xmlid, - }).then((rec) => { - self.addmultitabtags(ev) - }); - }, + jsonrpc('/add/mutli/tab', { + 'name': tab_name, + 'url': url, + 'actionId': actionId, + 'menuId': menuId, + 'menu_xmlid': menu_xmlid, + }).then((rec) => { + self.addmultitabtags(ev) + }); + }, addmultitabtags: async function (ev) { - var self = this - var rec = await jsonrpc('/get/mutli/tab', {}); - if (rec){ - if (theme_style == 'theme_style'){ $('body > header').css("height", "48px"); } - $('.multi_tab_section').empty() - $.each(rec, function( key, value ) { - var tab_tag = '' - $('.multi_tab_section').append(tab_tag) - }) - var ShstoredActionId = sessionStorage.getItem("sh_current_action_id"); - var ShstoredAction = sessionStorage.getItem("sh_current_action"); - if (ShstoredActionId){ - var TabDiv = $('.multi_tab_section .multi_tab_div'); - var ActiveMenu = TabDiv.find('a[data-action-id="'+ ShstoredActionId +'"]'); - ActiveMenu.parent().addClass('tab_active') - } + var self = this + var rec = await jsonrpc('/get/mutli/tab', {}); + if (rec) { + if (theme_style == 'theme_style') { $('body > header').css("height", "48px"); } + $('.multi_tab_section').empty() + $.each(rec, function (key, value) { + var tab_tag = '' + $('.multi_tab_section').append(tab_tag) + }) + var ShstoredActionId = sessionStorage.getItem("sh_current_action_id"); + var ShstoredAction = sessionStorage.getItem("sh_current_action"); + if (ShstoredActionId) { + var TabDiv = $('.multi_tab_section .multi_tab_div'); + var ActiveMenu = TabDiv.find('a[data-action-id="' + ShstoredActionId + '"]'); + ActiveMenu.parent().addClass('tab_active') + } - if (ev) { - var actionId = ev.actionID - var menu_xmlid = ev.xmlid - if(localStorage.getItem('LastCreatedTab')){ - var target = '.multi_tab_section .multi_tab_div a[data-action-id="'+ localStorage.getItem('LastCreatedTab') +'"]' - $(target).parent().addClass('tab_active') - localStorage.removeItem('LastCreatedTab') - } else { - var target = '.multi_tab_section .multi_tab_div a[data-xml-id="'+ menu_xmlid +'"]' - $(target).parent().addClass('tab_active') - } - } - $('body').addClass("multi_tab_enabled"); + if (ev) { + var actionId = ev.actionID + var menu_xmlid = ev.xmlid + if (localStorage.getItem('LastCreatedTab')) { + var target = '.multi_tab_section .multi_tab_div a[data-action-id="' + localStorage.getItem('LastCreatedTab') + '"]' + $(target).parent().addClass('tab_active') + localStorage.removeItem('LastCreatedTab') } else { - $('body').removeClass("multi_tab_enabled"); + var target = '.multi_tab_section .multi_tab_div a[data-xml-id="' + menu_xmlid + '"]' + $(target).parent().addClass('tab_active') } - $('.multi_tab_section .remove_tab').on('click', function (ev) { - self._RemoveTab(ev) - }); - $('.multi_tab_section .multi_tab_div a').on('click', function (ev) { - self._TabClicked(ev) - }); - }, + } + $('body').addClass("multi_tab_enabled"); + } else { + $('body').removeClass("multi_tab_enabled"); + } + $('.multi_tab_section .remove_tab').on('click', function (ev) { + self._RemoveTab(ev) + }); + $('.multi_tab_section .multi_tab_div a').on('click', function (ev) { + self._TabClicked(ev) + }); + }, _RemoveTab: function (ev) { - var self = this - var multi_tab_id = $(ev.target).parent().find('a').attr('multi_tab_id') - jsonrpc('/remove/multi/tab', { - 'multi_tab_id':multi_tab_id, - }).then(function(rec) { - if (rec){ - if(rec['removeTab']){ - $(ev.target).parent().remove() - var FirstTab = $('.multi_tab_section').find('.multi_tab_div:first-child') - if(FirstTab.length){ - $(FirstTab).find('a')[0].click() - $(FirstTab).addClass('tab_active') - } - } - if(rec['multi_tab_count'] == 0){ - $('body').removeClass("multi_tab_enabled"); + var self = this + var multi_tab_id = $(ev.target).parent().find('a').attr('multi_tab_id') + jsonrpc('/remove/multi/tab', { + 'multi_tab_id': multi_tab_id, + }).then(function (rec) { + if (rec) { + if (rec['removeTab']) { + $(ev.target).parent().remove() + var FirstTab = $('.multi_tab_section').find('.multi_tab_div:first-child') + if (FirstTab.length) { + $(FirstTab).find('a')[0].click() + $(FirstTab).addClass('tab_active') } } - }); - }, + if (rec['multi_tab_count'] == 0) { + $('body').removeClass("multi_tab_enabled"); + } + } + }); + }, - _TabClicked: function (ev){ - localStorage.setItem("TabClick", true); - localStorage.setItem("TabClickTilteUpdate", true); - if($(ev.target).data('action-id')){ - $('.multi_tab_section').find('.tab_active').removeClass('tab_active'); - $(ev.target).parent().addClass('tab_active') - console.log('$(ev.target).parent()',$(ev.target).parent()) - } - else{ - if($(ev.currentTarget).data('action-id')){ + _TabClicked: function (ev) { + localStorage.setItem("TabClick", true); + localStorage.setItem("TabClickTilteUpdate", true); + if ($(ev.target).data('action-id')) { $('.multi_tab_section').find('.tab_active').removeClass('tab_active'); - $(ev.currentTarget).parent().addClass('tab_active') - console.log('$(ev.target).parent()',$(ev.target).parent()) + $(ev.target).parent().addClass('tab_active') + console.log('$(ev.target).parent()', $(ev.target).parent()) + } + else { + if ($(ev.currentTarget).data('action-id')) { + $('.multi_tab_section').find('.tab_active').removeClass('tab_active'); + $(ev.currentTarget).parent().addClass('tab_active') + console.log('$(ev.target).parent()', $(ev.target).parent()) + } } - } }, onNavBarDropdownItemClick(ev) { - if(ev.shiftKey){ - localStorage.setItem("sh_add_tab",1) - }else{ - localStorage.setItem("sh_add_tab",0) + if (ev.shiftKey) { + localStorage.setItem("sh_add_tab", 1) + } else { + localStorage.setItem("sh_add_tab", 0) } }, - getAppClassName(app){ + getAppClassName(app) { var app_name = app.xmlid return app_name.replaceAll('.', '_') }, @@ -504,7 +549,7 @@ patch(NavBar.prototype, { menuList.forEach(menu => { // 为当前菜单添加 level 属性 menu.level = level; - // 如果有子菜单,递归给子菜单添加等级 + // 如果有子菜单,递归给子菜单添加等级 if (menu.childrenTree && menu.childrenTree.length > 0) { this.addLevelToMenu(menu.childrenTree, level + 1); // 递归调用,增加等级 } @@ -514,7 +559,7 @@ patch(NavBar.prototype, { // 获取一级菜单的子菜单 currentMenuAppSections(app_id) { const childrenMenu = (this.menuService.getMenuAsTree(app_id).childrenTree) || []; - // 给每个子菜单及其子菜单递归添加等级 + // 给每个子菜单及其子菜单递归添加等级 this.addLevelToMenu(childrenMenu); return childrenMenu; }, diff --git a/sh_backmate_theme_adv_enterprise/static/src/scss/menu/fullscreen_toggle.scss b/sh_backmate_theme_adv_enterprise/static/src/scss/menu/fullscreen_toggle.scss new file mode 100644 index 000000000..c6d83e3d7 --- /dev/null +++ b/sh_backmate_theme_adv_enterprise/static/src/scss/menu/fullscreen_toggle.scss @@ -0,0 +1,37 @@ +#fullscreen_toggle { + /* 浅灰背景 */ + background-color: #f5f5f5; + /* 黑色图标 */ + color: #000; + /* 圆形 */ + border-radius: 50%; + /* 固定宽度 */ + width: 30px; + /* 固定高度 */ + height: 30px; + display: flex; + /* 居中对齐 */ + align-items: center; + justify-content: center; + /* 图标大小 */ + font-size: 18px; + cursor: pointer; + /* 动画 */ + transition: all 0.3s ease; + /* 去掉边框 */ + border: none; +} + +#fullscreen_toggle:hover { + /* 悬停时更深一点 */ + background-color: #e0e0e0; + /* 微微放大 */ + transform: scale(1.05); +} + +#fullscreen_toggle:active { + /* 点击时更深 */ + background-color: #d6d6d6; + /* 点击时缩小一点 */ + transform: scale(0.95); +} diff --git a/sh_backmate_theme_adv_enterprise/static/src/xml/menu.xml b/sh_backmate_theme_adv_enterprise/static/src/xml/menu.xml index 7d0c74c19..27c591a4f 100644 --- a/sh_backmate_theme_adv_enterprise/static/src/xml/menu.xml +++ b/sh_backmate_theme_adv_enterprise/static/src/xml/menu.xml @@ -1,13 +1,12 @@ - - - + + @@ -41,12 +40,11 @@ - - + @@ -73,7 +71,6 @@ -