194 lines
6.5 KiB
JavaScript
194 lines
6.5 KiB
JavaScript
/** @odoo-module **/
|
|
|
|
import { Dropdown } from "@web/core/dropdown/dropdown";
|
|
import { DropdownItem } from "@web/core/dropdown/dropdown_item";
|
|
import { useService } from "@web/core/utils/hooks";
|
|
import { registry } from "@web/core/registry";
|
|
import { browser } from "@web/core/browser/browser";
|
|
import { symmetricalDifference } from "@web/core/utils/arrays";
|
|
import { _t, qweb as QWeb } from "web.core";
|
|
import * as BarcodeScanner from "@web/webclient/barcode/barcode_scanner";
|
|
|
|
const { Component, useState } = owl;
|
|
const session = require("web.session");
|
|
const rpc = require("web.rpc");
|
|
var show_company = false;
|
|
session.user_has_group("base.group_multi_company").then(function (has_group) {
|
|
show_company = has_group;
|
|
});
|
|
var start_search_after_letter = 0
|
|
|
|
|
|
|
|
export class GlobalSearch extends Component {
|
|
setup() {
|
|
var self = this;
|
|
self.actionService = useService("action")
|
|
this._search_def = $.Deferred();
|
|
this.show_company = show_company;
|
|
this.allowed_company_ids = String(session.user_context.allowed_company_ids)
|
|
.split(",")
|
|
.map(function (id) {
|
|
return parseInt(id);
|
|
});
|
|
this.current_company = this.allowed_company_ids[0];
|
|
rpc.query({
|
|
model: "res.company",
|
|
method: "search_read",
|
|
args: [[["id", "=", self.current_company]], ["start_search_after_letter"]],
|
|
}).then(function (data) {
|
|
if(data){
|
|
if(data && data[0]){
|
|
start_search_after_letter = data[0].start_search_after_letter;
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
}
|
|
async on2BarcodeBtnClick() {
|
|
const barcode = await BarcodeScanner.scanBarcode();
|
|
console.log(barcode);
|
|
if (barcode) {
|
|
console.log("存在");
|
|
const input = document.querySelector('.usermenu_search_input');
|
|
if (input) {
|
|
input.value = barcode;
|
|
}
|
|
const event = new KeyboardEvent('keydown', {key: 'Enter'});
|
|
input.dispatchEvent(event);
|
|
|
|
// await this.onBarcodeScanned(barcode);
|
|
// if ("vibrate" in browser.navigator) {
|
|
// browser.navigator.vibrate(100);
|
|
// }
|
|
} else {
|
|
// console.log("不存在")
|
|
// alert('不存在')
|
|
this.notification.add(this.env._t("Please, scan again !"), {
|
|
type: "warning",
|
|
});
|
|
}
|
|
}
|
|
|
|
onSearchResultsNavigate(){
|
|
this._search_def.reject();
|
|
this._search_def = $.Deferred();
|
|
setTimeout(this._search_def.resolve.bind(this._search_def), 500);
|
|
|
|
this._search_def.done(this._searchData.bind(this));
|
|
|
|
return;
|
|
}
|
|
_on_click_clear_Search(){
|
|
$(".sh_search_input input").val('');
|
|
$(".sh_search_results").empty();
|
|
}
|
|
|
|
_searchData() {
|
|
|
|
var query = $(".sh_search_input input").val();
|
|
if (query === "") {
|
|
$(".sh_search_container").removeClass("has-results");
|
|
$(".sh_search_results").empty();
|
|
return;
|
|
}
|
|
$(".sh_search_results").empty();
|
|
var self = this;
|
|
if (query.length >=start_search_after_letter) {
|
|
rpc.query({
|
|
model: "global.search",
|
|
method: "get_search_result",
|
|
args: [[query]],
|
|
}).then(function (data) {
|
|
if (data) {
|
|
$(".sh_search_results").show();
|
|
console.log('data',data)
|
|
self._searchableMenus = data;
|
|
|
|
// var results = fuzzy.filter(query, _.keys(self._searchableMenus), {});
|
|
|
|
var results = _.keys(self._searchableMenus);
|
|
console.log('results',results)
|
|
if (results.length === 1) {
|
|
// 不显示搜索结果,直接跳转
|
|
$(".sh_search_results").hide();
|
|
var result = results[0];
|
|
console.log('result',result)
|
|
var original = self._searchableMenus[result];
|
|
console.log('original',original)
|
|
// if (original.action) {
|
|
// self.do_action(original.action);
|
|
// } else if (original.menu_id) {
|
|
// self.do_action(original.menu_id);
|
|
// }
|
|
if (original) {
|
|
self.actionService.doAction({
|
|
type: "ir.actions.act_window",
|
|
res_model: original.model,
|
|
res_id: original.id,
|
|
views: [[false, "form"]],
|
|
target: "current",
|
|
flags: { action_buttons: true, headless: true },
|
|
|
|
});
|
|
}
|
|
|
|
}
|
|
$(".sh_search_results").toggleClass("has-results", Boolean(results.length));
|
|
|
|
$(QWeb.render('MenuSearchResults', {
|
|
results: results,
|
|
widget:self,
|
|
_checkIsMenu: (key) => {
|
|
console.log('123',key)
|
|
key = key.split("|")[0];
|
|
if (key == "menu") {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
},
|
|
_linkInfo: (key) => {
|
|
var original = self._searchableMenus[key];
|
|
return original;
|
|
},
|
|
_getFieldInfo: (key) => {
|
|
key = key.split("|")[1];
|
|
return key;
|
|
},
|
|
_getcompanyInfo: (key) => {
|
|
key = key.split("|")[0];
|
|
return key;
|
|
},
|
|
_linkInfo: (key) => {
|
|
var original = self._searchableMenus[key];
|
|
return original;
|
|
}
|
|
|
|
|
|
})).appendTo($(".sh_search_results"));
|
|
|
|
|
|
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
}
|
|
GlobalSearch.template = "GlobalSearch";
|
|
GlobalSearch.components = { Dropdown, DropdownItem };
|
|
GlobalSearch.toggleDelay = 1000;
|
|
|
|
export const systrayItem = {
|
|
Component: GlobalSearch,
|
|
};
|
|
|
|
registry.category("systray").add("GlobalSearch", systrayItem, { sequence: 1 });
|
|
|
|
|
|
|