ref: 搜索功能优化,支持方向选择搜索,支持enter回车搜索

This commit is contained in:
muwoo 2021-07-04 13:54:22 +08:00
parent 872f21ae17
commit 9ab64bfa44
3 changed files with 41 additions and 10 deletions

View File

@ -19,6 +19,10 @@
@change="e => search({value: e.target.value})" @change="e => search({value: e.target.value})"
:value="searchValue" :value="searchValue"
:maxLength="selected && selected.key !== 'plugin-container' ? 0 : 1000" :maxLength="selected && selected.key !== 'plugin-container' ? 0 : 1000"
@keydown.down="(e) => changeCurrent(1)"
@keydown.up="() => changeCurrent(-1)"
@keypress.enter="(e) => targetSearch({value: e.target.value, type: 'enter'})"
@keypress.space="(e) => targetSearch({value: e.target.value, type: 'space'})"
> >
<div @click="goMenu" class="suffix-tool" slot="suffix"> <div @click="goMenu" class="suffix-tool" slot="suffix">
<a-icon v-show="selected && selected.key === 'plugin-container'" class="icon-more" type="more" /> <a-icon v-show="selected && selected.key === 'plugin-container'" class="icon-more" type="more" />
@ -29,7 +33,12 @@
</a-input> </a-input>
<div class="options" v-show="showOptions"> <div class="options" v-show="showOptions">
<a-list item-layout="horizontal" :data-source="options"> <a-list item-layout="horizontal" :data-source="options">
<a-list-item @click="() => item.click($router)" class="op-item" slot="renderItem" slot-scope="item, index"> <a-list-item
@click="() => item.click($router)"
:class="currentSelect === index ? 'active op-item' : 'op-item'"
slot="renderItem"
slot-scope="item, index"
>
<a-list-item-meta <a-list-item-meta
:description="item.desc" :description="item.desc"
> >
@ -51,8 +60,10 @@
<a-input <a-input
:placeholder="subPlaceHolder" :placeholder="subPlaceHolder"
class="sub-input" class="sub-input"
@change="(e) => onSearch({value: e.target.value, searchType: $route.query.searchType})" @change="(e) => search({value: e.target.value, searchType: $route.query.searchType})"
:value="searchValue" :value="searchValue"
@keypress.enter="(e) => targetSearch({value: e.target.value, type: 'enter'})"
@keypress.space="(e) => targetSearch({value: e.target.value, type: 'space'})"
></a-input> ></a-input>
</div> </div>
@ -68,7 +79,7 @@
import {mapActions, mapMutations, mapState} from "vuex"; import {mapActions, mapMutations, mapState} from "vuex";
import {ipcRenderer, remote} from "electron"; import {ipcRenderer, remote} from "electron";
import {getWindowHeight, debounce} from "./assets/common/utils"; import {getWindowHeight, debounce} from "./assets/common/utils";
const opConfig = remote.getGlobal('opConfig');
const {Menu, MenuItem} = remote; const {Menu, MenuItem} = remote;
export default { export default {
@ -77,6 +88,8 @@ export default {
searchType: this.$route.query.searchType ? 'subWindow' : '', searchType: this.$route.query.searchType ? 'subWindow' : '',
query: this.$route.query, query: this.$route.query,
searchFn: null, searchFn: null,
config: opConfig.get(),
currentSelect: 0,
} }
}, },
mounted() { mounted() {
@ -104,6 +117,26 @@ export default {
} }
this.searchFn(v); this.searchFn(v);
}, },
targetSearch(action) {
//
if((this.selected && this.selected.key === 'plugin-container') || this.searchType === 'subWindow') {
const webview = document.getElementById('webview');
if (action.type === 'space') {
if (this.config.perf.common.space) {
webview.send('msg-back-setSubInput', this.searchValue);
}
return;
}
webview.send('msg-back-setSubInput', this.searchValue);
} else if (this.showOptions) {
const item = this.options[this.currentSelect]
item.click(this.$router);
}
},
changeCurrent(index) {
this.currentSelect = this.currentSelect + index;
},
renderTitle(title) { renderTitle(title) {
const result = title.split(this.searchValue); const result = title.split(this.searchValue);
return `<div>${result[0]}<span style="color: red">${this.searchValue}</span>${result[1]}</div>` return `<div>${result[0]}<span style="color: red">${this.searchValue}</span>${result[1]}</div>`
@ -242,6 +275,9 @@ export default {
max-height: 500px; max-height: 500px;
overflow: auto; overflow: auto;
background: #fafafa; background: #fafafa;
&.active {
background: #DEE2E8;
}
} }
} }
} }

View File

@ -87,11 +87,6 @@ export default {
pluginDetail() { pluginDetail() {
return (this.devPlugins.filter(plugin => plugin.name === this.query.name)[0] || {}).features return (this.devPlugins.filter(plugin => plugin.name === this.query.name)[0] || {}).features
}, },
},
watch: {
searchValue() {
this.webview.send('msg-back-setSubInput', this.searchValue);
}
} }
} }
</script> </script>

View File

@ -97,9 +97,9 @@ const actions = {
return; return;
} }
const value = paylpad.value; const value = paylpad.value;
// 在插件界面 // 在插件界面不触发其他功能
if((state.selected && state.selected.key === 'plugin-container') || paylpad.searchType === 'subWindow') { if((state.selected && state.selected.key === 'plugin-container') || paylpad.searchType === 'subWindow') {
commit('commonUpdate', {searchValue: value}) commit('commonUpdate', {searchValue: value});
return; return;
} }
const fileUrl = clipboard.read('public.file-url').replace('file://', ''); const fileUrl = clipboard.read('public.file-url').replace('file://', '');