refactor(app): 修改本地储存数据处理逻辑,统一管理
This commit is contained in:
28
src/assets/js/local-storage.js
Normal file
28
src/assets/js/local-storage.js
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
// 本地储存
|
||||||
|
|
||||||
|
import { useLocalStorage } from '@vueuse/core';
|
||||||
|
|
||||||
|
/** 本地储存 key 前缀 */
|
||||||
|
const PREFIX = 'frost-navigation/';
|
||||||
|
|
||||||
|
/** NavView 模块 */
|
||||||
|
export const storeNavView = {
|
||||||
|
|
||||||
|
/** 导航链接侧边栏折叠状态 */
|
||||||
|
isAsideCollapsed: useLocalStorage(PREFIX + 'nav-view/is-aside-collapsed', false),
|
||||||
|
|
||||||
|
/** 导航链接当前选中分类 */
|
||||||
|
currentCategory: useLocalStorage(PREFIX + 'nav-view/current-category', ''),
|
||||||
|
|
||||||
|
/** 导航链接搜索类型 */
|
||||||
|
searchType: useLocalStorage(PREFIX + 'nav-view/search-type', 'all'),
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
/** SearchView 模块 */
|
||||||
|
export const storeSearchView = {
|
||||||
|
|
||||||
|
/** 当前使用的搜索引擎名称 */
|
||||||
|
searchEngineName: useLocalStorage(PREFIX + 'search-view/search-engine-name', '必应'),
|
||||||
|
|
||||||
|
};
|
@@ -5,12 +5,8 @@ import {
|
|||||||
} from 'vue';
|
} from 'vue';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
SKEY_SEARCH_ENGINE_NAME,
|
storeSearchView,
|
||||||
} from '@/config/storage';
|
} from './local-storage';
|
||||||
|
|
||||||
import {
|
|
||||||
useLocalStorage,
|
|
||||||
} from '@vueuse/core';
|
|
||||||
|
|
||||||
import {
|
import {
|
||||||
$message,
|
$message,
|
||||||
@@ -37,7 +33,7 @@ import icon_zhihu from '@/assets/website-icon/zhihu.svg';
|
|||||||
/** 打开搜索结果页面 */
|
/** 打开搜索结果页面 */
|
||||||
export function openSearchResult() {
|
export function openSearchResult() {
|
||||||
|
|
||||||
let engine = searchEngineName.value;
|
let engine = storeSearchView.searchEngineName.value;
|
||||||
let keyword = searchKeyword.value;
|
let keyword = searchKeyword.value;
|
||||||
let baseURL = '';
|
let baseURL = '';
|
||||||
let useURL = '';
|
let useURL = '';
|
||||||
@@ -221,8 +217,5 @@ export const searchEngineList = [
|
|||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
/** 搜索引擎名称 */
|
|
||||||
export const searchEngineName = useLocalStorage(SKEY_SEARCH_ENGINE_NAME, '必应');
|
|
||||||
|
|
||||||
/** 搜索关键词 */
|
/** 搜索关键词 */
|
||||||
export const searchKeyword = ref('');
|
export const searchKeyword = ref('');
|
||||||
|
@@ -1,16 +0,0 @@
|
|||||||
// 本地储存 key 信息
|
|
||||||
|
|
||||||
/** 储存 key 前缀 */
|
|
||||||
const PREFIX = 'frost-navigation/';
|
|
||||||
|
|
||||||
/** 导航链接侧边栏折叠状态 */
|
|
||||||
export const SKEY_NAV_LINK_ASIDE_COLLAPSED = PREFIX + 'nav-link-aside-collapsed';
|
|
||||||
|
|
||||||
/** 导航链接当前选中分类 */
|
|
||||||
export const SKEY_NAV_LINK_CATEGORY = PREFIX + 'nav-link-category';
|
|
||||||
|
|
||||||
/** 导航链接搜索类型 */
|
|
||||||
export const SKEY_NAV_LINK_SEARCH_TYPE = PREFIX + 'nav-link-search-type';
|
|
||||||
|
|
||||||
/** 当前使用的搜索引擎名称 */
|
|
||||||
export const SKEY_SEARCH_ENGINE_NAME = PREFIX + 'search-engine-name';
|
|
@@ -27,18 +27,18 @@
|
|||||||
collapse-mode="width"
|
collapse-mode="width"
|
||||||
show-trigger="arrow-circle"
|
show-trigger="arrow-circle"
|
||||||
:bordered="true"
|
:bordered="true"
|
||||||
:collapsed="isCollapsed"
|
:collapsed="storeNavView.isAsideCollapsed.value"
|
||||||
:collapsed-width="64"
|
:collapsed-width="64"
|
||||||
:native-scrollbar="false"
|
:native-scrollbar="false"
|
||||||
:scrollbar-props="{ trigger: 'hover' }"
|
:scrollbar-props="{ trigger: 'hover' }"
|
||||||
:width="240"
|
:width="240"
|
||||||
@collapse="isCollapsed = true"
|
@collapse="storeNavView.isAsideCollapsed.value = true"
|
||||||
@expand="isCollapsed = false"
|
@expand="storeNavView.isAsideCollapsed.value = false"
|
||||||
>
|
>
|
||||||
<n-menu
|
<n-menu
|
||||||
v-model:value="navLinksTitle"
|
v-model:value="navLinksTitle"
|
||||||
mode="vertical"
|
mode="vertical"
|
||||||
:collapsed="isCollapsed"
|
:collapsed="storeNavView.isAsideCollapsed.value"
|
||||||
:collapsed-icon-size="24"
|
:collapsed-icon-size="24"
|
||||||
:collapsed-width="64"
|
:collapsed-width="64"
|
||||||
:icon-size="24"
|
:icon-size="24"
|
||||||
@@ -53,7 +53,7 @@
|
|||||||
<div class="right-content-header">
|
<div class="right-content-header">
|
||||||
<n-input-group>
|
<n-input-group>
|
||||||
<n-select
|
<n-select
|
||||||
v-model:value="searchType"
|
v-model:value="storeNavView.searchType.value"
|
||||||
class="search-type"
|
class="search-type"
|
||||||
:options="searchTypes"
|
:options="searchTypes"
|
||||||
/>
|
/>
|
||||||
@@ -144,10 +144,8 @@ import {
|
|||||||
} from '@/config/modules';
|
} from '@/config/modules';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
SKEY_NAV_LINK_ASIDE_COLLAPSED,
|
storeNavView,
|
||||||
SKEY_NAV_LINK_CATEGORY,
|
} from '@/assets/js/local-storage';
|
||||||
SKEY_NAV_LINK_SEARCH_TYPE,
|
|
||||||
} from '@/config/storage';
|
|
||||||
|
|
||||||
import {
|
import {
|
||||||
$dialog, $message,
|
$dialog, $message,
|
||||||
@@ -172,12 +170,6 @@ const detailDrawer = reactive({
|
|||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
/** 分类列表是否折叠 */
|
|
||||||
const isCollapsed = useLocalStorage(
|
|
||||||
SKEY_NAV_LINK_ASIDE_COLLAPSED,
|
|
||||||
false
|
|
||||||
);
|
|
||||||
|
|
||||||
/** 完整的链接列表 */
|
/** 完整的链接列表 */
|
||||||
const navLinksAll = formatNavLinks(true);
|
const navLinksAll = formatNavLinks(true);
|
||||||
|
|
||||||
@@ -206,12 +198,6 @@ const navLinksTitle = shallowRef('');
|
|||||||
/** 搜索关键词 */
|
/** 搜索关键词 */
|
||||||
const searchKeyword = shallowRef('');
|
const searchKeyword = shallowRef('');
|
||||||
|
|
||||||
/** 搜索类型 */
|
|
||||||
const searchType = useLocalStorage(
|
|
||||||
SKEY_NAV_LINK_SEARCH_TYPE,
|
|
||||||
'all'
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @desc 搜索类型列表
|
* @desc 搜索类型列表
|
||||||
* @type { import('naive-ui').SelectOption[] }
|
* @type { import('naive-ui').SelectOption[] }
|
||||||
@@ -235,7 +221,7 @@ function changeList(data = null) {
|
|||||||
if (data) {
|
if (data) {
|
||||||
useData = data;
|
useData = data;
|
||||||
} else {
|
} else {
|
||||||
storedKey = localStorage.getItem(SKEY_NAV_LINK_CATEGORY)
|
storedKey = storeNavView.currentCategory.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (storedKey) {
|
if (storedKey) {
|
||||||
@@ -249,17 +235,15 @@ function changeList(data = null) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (useData) {
|
if (useData) {
|
||||||
localStorage.setItem(SKEY_NAV_LINK_CATEGORY, useData.title);
|
storeNavView.currentCategory.value = useData.title;
|
||||||
navLinksCurr.value = useData.children;
|
navLinksCurr.value = useData.children;
|
||||||
navLinksTitle.value = useData.title;
|
navLinksTitle.value = useData.title;
|
||||||
} else {
|
} else {
|
||||||
localStorage.setItem(SKEY_NAV_LINK_CATEGORY, '');
|
storeNavView.currentCategory.value = '';
|
||||||
navLinksCurr.value = [];
|
navLinksCurr.value = [];
|
||||||
navLinksTitle.value = '';
|
navLinksTitle.value = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -344,7 +328,7 @@ function treeDataFilter(pattern = '', node = null) {
|
|||||||
pattern = pattern.toLowerCase();
|
pattern = pattern.toLowerCase();
|
||||||
}
|
}
|
||||||
|
|
||||||
let type = searchType.value;
|
let type = storeNavView.searchType.value;
|
||||||
|
|
||||||
let desc = String(node.desc).toLowerCase();
|
let desc = String(node.desc).toLowerCase();
|
||||||
let title = String(node.title).toLowerCase();
|
let title = String(node.title).toLowerCase();
|
||||||
|
@@ -27,7 +27,7 @@
|
|||||||
<!-- 搜索引擎列表 -->
|
<!-- 搜索引擎列表 -->
|
||||||
<div class="search-engines-wrapper">
|
<div class="search-engines-wrapper">
|
||||||
<n-radio-group
|
<n-radio-group
|
||||||
v-model:value="searchEngineName"
|
v-model:value="storeSearchView.searchEngineName.value"
|
||||||
class="search-engines-list"
|
class="search-engines-list"
|
||||||
>
|
>
|
||||||
<!-- 搜索引擎分类 -->
|
<!-- 搜索引擎分类 -->
|
||||||
@@ -68,9 +68,14 @@ import {
|
|||||||
NInput, NRadio, NRadioGroup,
|
NInput, NRadio, NRadioGroup,
|
||||||
} from 'naive-ui';
|
} from 'naive-ui';
|
||||||
|
|
||||||
|
import {
|
||||||
|
storeSearchView,
|
||||||
|
} from '@/assets/js/local-storage';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
openSearchResult,
|
openSearchResult,
|
||||||
searchEngineList, searchEngineName, searchKeyword,
|
searchEngineList,
|
||||||
|
searchKeyword,
|
||||||
} from '@/assets/js/search-engine';
|
} from '@/assets/js/search-engine';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
|
Reference in New Issue
Block a user