From c2f43bea3926c121bc97f08d5f4d58e82059f874 Mon Sep 17 00:00:00 2001 From: muwoo <2424880409@qq.com> Date: Tue, 30 Nov 2021 15:44:56 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E4=B8=BB=E7=95=8C=E9=9D=A2?= =?UTF-8?q?=E5=BC=80=E5=8F=91&=E6=8F=92=E4=BB=B6=E8=BF=90=E8=A1=8C?= =?UTF-8?q?=E5=AE=B9=E5=99=A8=E5=BC=80=E5=8F=91&=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 126 ++++------------------- package.json | 2 + runner/src/App.vue | 8 +- src/common/utils/throttle.ts | 40 ++++++++ src/main/browsers/runner.ts | 2 +- src/renderer/App.vue | 139 ++++++-------------------- src/renderer/components/result.vue | 89 +++++++++++++++++ src/renderer/components/search.vue | 78 +++++++++++++++ src/renderer/plugins-manager/index.ts | 52 +++++++++- src/renderer/shims-vue.d.ts | 2 + 10 files changed, 320 insertions(+), 218 deletions(-) create mode 100644 src/common/utils/throttle.ts create mode 100644 src/renderer/components/result.vue create mode 100644 src/renderer/components/search.vue diff --git a/package-lock.json b/package-lock.json index 7518707..a001b37 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1142,6 +1142,19 @@ "to-fast-properties": "^2.0.0" } }, + "@better-scroll/core": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@better-scroll/core/-/core-2.4.2.tgz", + "integrity": "sha512-IqVZLnh04YpaEAy9wJDxtFK/stxVQjB9A9Wcr3Uwkj7Av1TtFpin+t/TObl53diNDG5ZJ+vck/OAthphpuugLA==", + "requires": { + "@better-scroll/shared-utils": "^2.4.2" + } + }, + "@better-scroll/shared-utils": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@better-scroll/shared-utils/-/shared-utils-2.4.2.tgz", + "integrity": "sha512-Gy/Jfbpu+hq0u+PcjkTqyXGqAf+0dexTzEZ5IDXEVwJVLmd3cx8A73oTcAZ8QZgk4wSHvlMjXecSaptkhnNPEw==" + }, "@ctrl/tinycolor": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.4.0.tgz", @@ -7458,103 +7471,6 @@ "safe-buffer": "^5.1.1" } }, - "execa": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-6.0.0.tgz", - "integrity": "sha512-m4wU9j4Z9nXXoqT8RSfl28JSwmMNLFF69OON8H/lL3NeU0tNpGz313bcOfYoBBHokB0dC2tMl3VUcKgHELhL2Q==", - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^3.0.1", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.0.1", - "onetime": "^6.0.0", - "signal-exit": "^3.0.5", - "strip-final-newline": "^3.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "human-signals": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", - "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==" - }, - "is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==" - }, - "mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==" - }, - "npm-run-path": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.0.1.tgz", - "integrity": "sha512-ybBJQUSyFwEEhqO2lXmyKOl9ucHtyZBWVM0h0FiMfT/+WKxCUZFa95qAR2X3w/w6oigN3B0b2UNHZbD+kdfD5w==", - "requires": { - "path-key": "^4.0.0" - }, - "dependencies": { - "path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==" - } - } - }, - "onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "requires": { - "mimic-fn": "^4.0.0" - } - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - }, - "strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==" - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "requires": { - "isexe": "^2.0.0" - } - } - } - }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -8446,11 +8362,6 @@ "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", "dev": true }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" - }, "get-symbol-description": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", @@ -10471,6 +10382,11 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=" + }, "lodash.transform": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.transform/-/lodash.transform-4.6.0.tgz", @@ -10743,7 +10659,8 @@ "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true }, "merge2": { "version": "1.4.1", @@ -13837,7 +13754,8 @@ "signal-exit": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==" + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", + "dev": true }, "simple-swizzle": { "version": "0.2.2", diff --git a/package.json b/package.json index 9dc8fbc..6464faa 100644 --- a/package.json +++ b/package.json @@ -14,12 +14,14 @@ }, "main": "background.js", "dependencies": { + "@better-scroll/core": "^2.4.2", "ant-design-vue": "^2.2.8", "core-js": "^3.6.5", "cross-spawn": "^7.0.3", "get-mac-apps": "^1.0.2", "got": "^11.8.3", "libnpmsearch": "^3.1.2", + "lodash.throttle": "^4.1.1", "vue": "^3.0.0", "vue-router": "^4.0.0-0", "vuex": "^4.0.0-0", diff --git a/runner/src/App.vue b/runner/src/App.vue index 5639172..3537be8 100644 --- a/runner/src/App.vue +++ b/runner/src/App.vue @@ -1,6 +1,9 @@ diff --git a/src/renderer/components/result.vue b/src/renderer/components/result.vue new file mode 100644 index 0000000..c81a18a --- /dev/null +++ b/src/renderer/components/result.vue @@ -0,0 +1,89 @@ + + + + + diff --git a/src/renderer/components/search.vue b/src/renderer/components/search.vue new file mode 100644 index 0000000..e2d5a4a --- /dev/null +++ b/src/renderer/components/search.vue @@ -0,0 +1,78 @@ + + + + + diff --git a/src/renderer/plugins-manager/index.ts b/src/renderer/plugins-manager/index.ts index 113d050..3e63f60 100644 --- a/src/renderer/plugins-manager/index.ts +++ b/src/renderer/plugins-manager/index.ts @@ -1,7 +1,8 @@ -import { reactive, toRefs } from "vue"; +import { reactive, toRefs, nextTick } from "vue"; import { nativeImage, remote } from "electron"; import { appSearch, PluginHandler } from "@/core"; import path from "path"; +import throttle from "lodash.throttle"; const appPath = remote.app.getPath("cache"); @@ -14,6 +15,8 @@ const createPluginManager = (): any => { const state: any = reactive({ appList: [], plugins: [], + options: [], + searchValue: "", }); const initPlugins = async () => { @@ -28,10 +31,47 @@ const createPluginManager = (): any => { // todo }; - const searchPlugin = () => { + const onSearch = throttle((e) => { + const value = e.target.value; + state.searchValue = value; + if (!value) return; // todo 先搜索 plugin // todo 再搜索 app - }; + let options: any = []; + const descMap = new Map(); + options = [ + ...options, + ...state.appList + .filter((plugin) => { + if (!descMap.get(plugin)) { + descMap.set(plugin, true); + let has = false; + plugin.keyWords.some((keyWord) => { + if ( + keyWord + .toLocaleUpperCase() + .indexOf(value.toLocaleUpperCase()) >= 0 + ) { + has = keyWord; + plugin.name = keyWord; + return true; + } + return false; + }); + return has; + } else { + return false; + } + }) + .map((plugin) => { + plugin.click = () => { + _openPlugin({ plugin }); + }; + return plugin; + }), + ]; + state.options = options; + }, 500); const getPluginInfo = async ({ pluginName, pluginPath }) => { const pluginInfo = await pluginInstance.getAdapterInfo(pluginName, pluginPath); @@ -41,12 +81,16 @@ const createPluginManager = (): any => { }; }; + const _openPlugin = ({ plugin }) => { + // + }; + return { ...toRefs(state), initPlugins, addPlugin, removePlugin, - searchPlugin, + onSearch, getPluginInfo, }; }; diff --git a/src/renderer/shims-vue.d.ts b/src/renderer/shims-vue.d.ts index b58d723..7b00668 100644 --- a/src/renderer/shims-vue.d.ts +++ b/src/renderer/shims-vue.d.ts @@ -10,3 +10,5 @@ declare module 'main' { } declare const __static: string + +declare module 'lodash.throttle'