diff --git a/modules/web/src/components/ToolBar.vue b/modules/web/src/components/ToolBar.vue index a627594c1..78e831839 100644 --- a/modules/web/src/components/ToolBar.vue +++ b/modules/web/src/components/ToolBar.vue @@ -68,7 +68,7 @@ import API from '@api' import { CircleCheckFilled, Edit } from '@element-plus/icons-vue' import hotkeys from 'hotkeys-js' -import { getSourceName, isInvaildSource } from '../utils/souce' +import { getSourceName, isInvaildSource, normalizeSource } from '../utils/souce' const store = useSourceStore() const pull = () => { @@ -168,6 +168,7 @@ const redo = () => { const saveSource = () => { const source = store.currentSource if (isInvaildSource(source)) { + normalizeSource(source) API.saveSource(source).then(({ data }) => { const sourceName = getSourceName(source) if (data.isSuccess) { diff --git a/modules/web/src/store/sourceStore.ts b/modules/web/src/store/sourceStore.ts index 0fd954eab..a79007db1 100644 --- a/modules/web/src/store/sourceStore.ts +++ b/modules/web/src/store/sourceStore.ts @@ -13,8 +13,8 @@ const emptySource = isBookSource ? emptyBookSource : emptyRssSource export const useSourceStore = defineStore('source', { state: () => { return { - bookSources: [] as BookSoure[], // 临时存放所有书源, - rssSources: [] as RssSource[], // 临时存放所有订阅源 + bookSources: shallowRef([] as BookSoure[]), // 临时存放所有书源, + rssSources: shallowRef([] as RssSource[]), // 临时存放所有订阅源 savedSources: [] as Source[], // 批量保存到阅读app成功的源 currentSource: JSON.parse(JSON.stringify(emptySource)) as Source, // 当前编辑的源 currentTab: localStorage.getItem('tabName') || 'editTab', @@ -51,9 +51,9 @@ export const useSourceStore = defineStore('source', { //拉取源后保存 saveSources(data: Source[]) { if (isBookSource) { - this.bookSources = data as BookSoure[] + this.bookSources = markRaw(data) as BookSoure[] } else { - this.rssSources = data as RssSource[] + this.rssSources = markRaw(data) as RssSource[] } }, //批量推送 diff --git a/modules/web/src/utils/souce.ts b/modules/web/src/utils/souce.ts index 355b2dd50..46b8082bf 100644 --- a/modules/web/src/utils/souce.ts +++ b/modules/web/src/utils/souce.ts @@ -49,12 +49,27 @@ export const convertSourcesToMap = (sources: Source[]): Map => { return map } +export const normalizeSource = (source: any) => { + for (const key in source) { + const value = source[key] + if ( + value === '' || + value === null || + (typeof value === 'string' && !value.trim()) + ) { + delete source[key] + } else if (value instanceof Object) { + normalizeSource(value) + } + } +} + export const emptyBookSource = { ruleSearch: {}, ruleBookInfo: {}, ruleToc: {}, ruleContent: {}, - ruleReview: {}, + // ruleReview: {}, ruleExplore: {}, } as BookSoure export const emptyRssSource = {} as RssSource