diff --git a/src/assets/js/naive-ui.js b/src/assets/js/naive-ui.js index 2a53aba..f80633e 100644 --- a/src/assets/js/naive-ui.js +++ b/src/assets/js/naive-ui.js @@ -1,6 +1,9 @@ -// Naive UI 配置 +// Naive UI 配置和功能 -import { dateZhCN, zhCN } from 'naive-ui'; +import { + createDiscreteApi, + dateZhCN, zhCN, +} from 'naive-ui'; /** @type { import('naive-ui').ConfigProviderProps } */ export const configProviderProps = { @@ -44,3 +47,22 @@ export const configProviderProps = { }, }; + +export const { + message: $message, + notification: $notification, +} = createDiscreteApi( + [ + 'message', + 'notification', + ], + { + configProviderProps: configProviderProps, + messageProviderProps: { + closable: true, + duration: 2000, + keepAliveOnHover: true, + placement: 'top', + }, + }, +); diff --git a/src/assets/js/search-engine.js b/src/assets/js/search-engine.js new file mode 100644 index 0000000..7444290 --- /dev/null +++ b/src/assets/js/search-engine.js @@ -0,0 +1,210 @@ +// 搜索引擎 + +import { + ref, +} from 'vue'; + +import { + SKEY_SEARCH_ENGINE_NAME, +} from '@/config/storage'; + +import { + useLocalStorage, +} from '@vueuse/core'; + +import { + $message, +} from './naive-ui'; + +/** 打开搜索结果页面 */ +export function openSearchResult() { + + let engine = searchEngineName.value; + let keyword = searchKeyword.value; + let baseURL = ''; + let useURL = ''; + + // 获取搜索引擎 URL + for (let i = 0; i < searchEngineList.length; i++) { + + let category = searchEngineList[i]; + let engines = category.list; + + for (let j = 0; j < engines.length; j++) { + let item = engines[j]; + if (item.name === engine) { + baseURL = item.url; + } + } + + if (baseURL) { + break; + } + + } + + if (baseURL) { + useURL = baseURL.replace(/%keyword%/, keyword); + } + + if (useURL) { + window.open(useURL, '_blank'); + } else { + $message.error('搜索失败:找不到对应的搜索引擎'); + } + +} + +/** 搜索引擎列表 */ +export const searchEngineList = [ + { + title: '搜索', + list: [ + { + name: '百度', + desc: 'www.baidu.com', + url: 'https://www.baidu.com/s?wd=%keyword%', + icon: 'baidu.svg', + show: true, + }, + { + name: '必应', + desc: 'cn.bing.com', + url: 'https://cn.bing.com/search?q=%keyword%', + icon: 'bing.svg', + show: true, + }, + { + name: '搜狗', + desc: 'www.sogou.com', + url: 'https://www.sogou.com/web?query=%keyword%', + icon: 'sogou.svg', + show: true, + }, + { + name: '360', + desc: 'www.so.com', + url: 'https://www.so.com/s?q=%keyword%', + icon: '360.svg', + show: true, + }, + { + name: 'Google', + desc: 'www.google.com', + url: 'https://www.google.com/search?q=%keyword%', + icon: 'google.svg', + show: true, + }, + { + name: 'Yandex', + desc: 'yandex.com', + url: 'https://yandex.com/search/?text=%keyword%', + icon: 'yandex.svg', + show: true, + } + ] + }, + { + title: '多媒体', + list: [ + { + name: '网易云音乐', + desc: 'music.163.com', + url: 'https://music.163.com/#/search/m/?s=%keyword%', + icon: 'netease_music.svg', + show: true, + }, + { + name: 'AcFun', + desc: 'www.acfun.cn', + url: 'https://www.acfun.cn/search/?keyword=%keyword%', + icon: 'acfun.svg', + show: true, + }, + { + name: 'bilibili', + desc: 'search.bilibili.com', + url: 'https://search.bilibili.com/all?keyword=%keyword%', + icon: 'bilibili.svg', + show: true, + }, + { + name: 'QQ音乐', + desc: 'y.qq.com', + url: 'https://y.qq.com/n/ryqq/search?w=%keyword%', + icon: 'qq_music.svg', + show: true, + } + ] + }, + { + title: '技术', + list: [ + { + name: '博客园', + desc: 'zzk.cnblogs.co', + url: 'https://zzk.cnblogs.com/s?w=%keyword%', + icon: 'cnblogs.svg', + show: true, + }, + { + name: 'CSDN', + desc: 'so.csdn.net', + url: 'https://so.csdn.net/so/search/all?q=%keyword%', + icon: 'csdn.svg', + show: true, + }, + { + name: 'GitHub', + desc: 'github.com', + url: 'https://github.com/search?q=%keyword%', + icon: 'github.svg', + show: true, + }, + { + name: 'MDN', + desc: 'developer.mozilla.org', + url: 'https://developer.mozilla.org/zh-CN/search?q=%keyword%', + icon: 'mdn.svg', + show: true, + } + ] + }, + { + title: '设计', + list: [ + { + name: '站酷', + desc: 'www.zcool.com.cn', + url: 'https://www.zcool.com.cn/search/content?word=%keyword%', + icon: 'zcool.svg', + show: true, + }, + { + name: 'Iconfont', + desc: 'www.iconfont.cn', + url: 'https://www.iconfont.cn/search/index?searchType=icon&q=%keyword%', + icon: 'iconfont.svg', + show: true, + } + ] + }, + { + title: '社区', + list: [ + { + name: '知乎', + desc: 'www.zhihu.com', + url: 'https://www.zhihu.com/search?type=content&q=%keyword%', + icon: 'zhihu.svg', + show: true, + } + ] + }, +]; + +/** 搜索引擎名称 */ +export const searchEngineName = useLocalStorage(SKEY_SEARCH_ENGINE_NAME, '必应'); + +/** 搜索关键词 */ +export const searchKeyword = ref(''); diff --git a/src/assets/js/utils.js b/src/assets/js/utils.js index 94a15eb..f85de1b 100644 --- a/src/assets/js/utils.js +++ b/src/assets/js/utils.js @@ -1,6 +1,19 @@ // 工具函数 -import { description as appDesc } from '@package-json'; +import { + description as appDesc, +} from '@package-json'; + +/** 当前模块 URL */ +const META_URL = import.meta.url; + +/** + * @description 获取资源文件 URL + * @param {string} path 文件相对于 assets 目录的路径 + */ +export function getAssetsUrl(path = '') { + return new URL(`../${path}`, META_URL).href; +} /** * @description 更新页面标题 diff --git a/src/assets/website-icon/360.svg b/src/assets/website-icon/360.svg new file mode 100644 index 0000000..8bdb52c --- /dev/null +++ b/src/assets/website-icon/360.svg @@ -0,0 +1,2 @@ + + diff --git a/src/assets/website-icon/acfun.svg b/src/assets/website-icon/acfun.svg new file mode 100644 index 0000000..fe1a3c0 --- /dev/null +++ b/src/assets/website-icon/acfun.svg @@ -0,0 +1,2 @@ + + diff --git a/src/assets/website-icon/baidu.svg b/src/assets/website-icon/baidu.svg new file mode 100644 index 0000000..9b82c14 --- /dev/null +++ b/src/assets/website-icon/baidu.svg @@ -0,0 +1,2 @@ + + diff --git a/src/assets/website-icon/bilibili.svg b/src/assets/website-icon/bilibili.svg new file mode 100644 index 0000000..544082e --- /dev/null +++ b/src/assets/website-icon/bilibili.svg @@ -0,0 +1,2 @@ + + diff --git a/src/assets/website-icon/bing.svg b/src/assets/website-icon/bing.svg new file mode 100644 index 0000000..2dcd9d0 --- /dev/null +++ b/src/assets/website-icon/bing.svg @@ -0,0 +1,2 @@ + + diff --git a/src/assets/website-icon/cnblogs.svg b/src/assets/website-icon/cnblogs.svg new file mode 100644 index 0000000..7055f4c --- /dev/null +++ b/src/assets/website-icon/cnblogs.svg @@ -0,0 +1,2 @@ + + diff --git a/src/assets/website-icon/csdn.svg b/src/assets/website-icon/csdn.svg new file mode 100644 index 0000000..54c3a24 --- /dev/null +++ b/src/assets/website-icon/csdn.svg @@ -0,0 +1,2 @@ + + diff --git a/src/assets/website-icon/default.svg b/src/assets/website-icon/default.svg new file mode 100644 index 0000000..69a1f45 --- /dev/null +++ b/src/assets/website-icon/default.svg @@ -0,0 +1,2 @@ + + diff --git a/src/assets/website-icon/github.svg b/src/assets/website-icon/github.svg new file mode 100644 index 0000000..546926a --- /dev/null +++ b/src/assets/website-icon/github.svg @@ -0,0 +1,2 @@ + + diff --git a/src/assets/website-icon/google.svg b/src/assets/website-icon/google.svg new file mode 100644 index 0000000..aace472 --- /dev/null +++ b/src/assets/website-icon/google.svg @@ -0,0 +1,2 @@ + + diff --git a/src/assets/website-icon/iconfont.svg b/src/assets/website-icon/iconfont.svg new file mode 100644 index 0000000..732fb43 --- /dev/null +++ b/src/assets/website-icon/iconfont.svg @@ -0,0 +1,2 @@ + + diff --git a/src/assets/website-icon/mdn.svg b/src/assets/website-icon/mdn.svg new file mode 100644 index 0000000..2e7ccd2 --- /dev/null +++ b/src/assets/website-icon/mdn.svg @@ -0,0 +1,2 @@ + + diff --git a/src/assets/website-icon/mijisou.svg b/src/assets/website-icon/mijisou.svg new file mode 100644 index 0000000..1e17476 --- /dev/null +++ b/src/assets/website-icon/mijisou.svg @@ -0,0 +1,2 @@ + + diff --git a/src/assets/website-icon/netease_music.svg b/src/assets/website-icon/netease_music.svg new file mode 100644 index 0000000..2eb5284 --- /dev/null +++ b/src/assets/website-icon/netease_music.svg @@ -0,0 +1,2 @@ + + diff --git a/src/assets/website-icon/qq_music.svg b/src/assets/website-icon/qq_music.svg new file mode 100644 index 0000000..ac37f66 --- /dev/null +++ b/src/assets/website-icon/qq_music.svg @@ -0,0 +1,2 @@ + + diff --git a/src/assets/website-icon/sogou.svg b/src/assets/website-icon/sogou.svg new file mode 100644 index 0000000..72fa75d --- /dev/null +++ b/src/assets/website-icon/sogou.svg @@ -0,0 +1,2 @@ + + diff --git a/src/assets/website-icon/tianya.svg b/src/assets/website-icon/tianya.svg new file mode 100644 index 0000000..1fae0d3 --- /dev/null +++ b/src/assets/website-icon/tianya.svg @@ -0,0 +1,2 @@ + + diff --git a/src/assets/website-icon/yandex.svg b/src/assets/website-icon/yandex.svg new file mode 100644 index 0000000..cb467c6 --- /dev/null +++ b/src/assets/website-icon/yandex.svg @@ -0,0 +1,2 @@ + + diff --git a/src/assets/website-icon/zcool.svg b/src/assets/website-icon/zcool.svg new file mode 100644 index 0000000..79539f2 --- /dev/null +++ b/src/assets/website-icon/zcool.svg @@ -0,0 +1,2 @@ + + diff --git a/src/assets/website-icon/zhihu.svg b/src/assets/website-icon/zhihu.svg new file mode 100644 index 0000000..f4a43d7 --- /dev/null +++ b/src/assets/website-icon/zhihu.svg @@ -0,0 +1,2 @@ + + diff --git a/src/config/modules.js b/src/config/modules.js index bdae3c1..06097c0 100644 --- a/src/config/modules.js +++ b/src/config/modules.js @@ -9,7 +9,7 @@ export const ENABLE_MC_CTRL_MODULE = IS_DEV; export const ENABLE_NAV_MODULE = IS_DEV; /** 启用“搜索”模块 */ -export const ENABLE_SEARCH_MODULE = IS_DEV; +export const ENABLE_SEARCH_MODULE = true; /** 启用“工具箱”模块 */ export const ENABLE_TOOLBOX_MODULE = IS_DEV; diff --git a/src/config/storage.js b/src/config/storage.js new file mode 100644 index 0000000..71472ca --- /dev/null +++ b/src/config/storage.js @@ -0,0 +1,7 @@ +// 本地储存 key 信息 + +/** 储存 key 前缀 */ +const PREFIX = 'frost-navigation/'; + +/** 当前使用的搜索引擎名称 */ +export const SKEY_SEARCH_ENGINE_NAME = PREFIX + 'search-engine-name'; diff --git a/src/views/SearchView/SearchView.vue b/src/views/SearchView/SearchView.vue index 4d9144f..ea1cca2 100644 --- a/src/views/SearchView/SearchView.vue +++ b/src/views/SearchView/SearchView.vue @@ -1,9 +1,199 @@