Просмотр исходного кода

Merge remote-tracking branch 'origin/master'

kunfei 3 лет назад
Родитель
Сommit
f9cf6267db
27 измененных файлов с 65 добавлено и 67 удалено
  1. 0 0
      app/src/main/assets/web/vue/assets/BookChapter-468f2c8e.css
  2. 0 0
      app/src/main/assets/web/vue/assets/BookChapter-d3c57abf.js
  3. 0 0
      app/src/main/assets/web/vue/assets/BookChapter-e6619d8a.js
  4. 0 0
      app/src/main/assets/web/vue/assets/BookShelf-3852f1dd.js
  5. 0 0
      app/src/main/assets/web/vue/assets/BookShelf-a8a609c2.css
  6. 0 0
      app/src/main/assets/web/vue/assets/BookShelf-e6a2af62.js
  7. 0 0
      app/src/main/assets/web/vue/assets/BookShelf-f637327a.css
  8. 1 1
      app/src/main/assets/web/vue/assets/config-97894739.js
  9. 0 1
      app/src/main/assets/web/vue/assets/el-loading-15d78e2b.js
  10. 0 0
      app/src/main/assets/web/vue/assets/el-loading-5b5af897.js
  11. 1 0
      app/src/main/assets/web/vue/assets/index-71b7f9c4.css
  12. 0 0
      app/src/main/assets/web/vue/assets/index-964f1746.css
  13. 0 0
      app/src/main/assets/web/vue/assets/index-ab2e286b.js
  14. 0 0
      app/src/main/assets/web/vue/assets/index-cbd182e6.js
  15. 2 2
      app/src/main/assets/web/vue/index.html
  16. 1 0
      modules/web/.eslintrc-auto-import.json
  17. 1 0
      modules/web/src/auto-imports.d.ts
  18. 5 5
      modules/web/src/components/BookItems.vue
  19. 13 5
      modules/web/src/components/ChapterContent.vue
  20. 6 6
      modules/web/src/components/SourceItem.vue
  21. 6 4
      modules/web/src/components/SourceList.vue
  22. 2 6
      modules/web/src/components/SourceTabForm.vue
  23. 20 18
      modules/web/src/components/ToolBar.vue
  24. 1 5
      modules/web/src/plugins/utils.js
  25. 4 7
      modules/web/src/views/BookChapter.vue
  26. 2 2
      modules/web/src/views/BookShelf.vue
  27. 0 5
      modules/web/src/views/SourceEditor.vue

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
app/src/main/assets/web/vue/assets/BookChapter-468f2c8e.css


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
app/src/main/assets/web/vue/assets/BookChapter-d3c57abf.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
app/src/main/assets/web/vue/assets/BookChapter-e6619d8a.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
app/src/main/assets/web/vue/assets/BookShelf-3852f1dd.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
app/src/main/assets/web/vue/assets/BookShelf-a8a609c2.css


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
app/src/main/assets/web/vue/assets/BookShelf-e6a2af62.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
app/src/main/assets/web/vue/assets/BookShelf-f637327a.css


+ 1 - 1
app/src/main/assets/web/vue/assets/config-7c50f05c.js → app/src/main/assets/web/vue/assets/config-97894739.js

@@ -1 +1 @@
-import{u as n,A as r}from"./index-cbd182e6.js";import"./vendor-8be1f5fb.js";const i=n();i.setMiniInterface(window.innerWidth<750);window.onresize=()=>{i.setMiniInterface(window.innerWidth<750)};r.getReadConfig().then(a=>{var e=a.data.data;if(e){const t=n();let o=JSON.parse(e),s=t.config;o=Object.assign(s,o),t.setConfig(o)}});
+import{u as n,A as r}from"./index-ab2e286b.js";import"./vendor-8be1f5fb.js";const i=n();i.setMiniInterface(window.innerWidth<750);window.onresize=()=>{i.setMiniInterface(window.innerWidth<750)};r.getReadConfig().then(a=>{var e=a.data.data;if(e){const t=n();let o=JSON.parse(e),s=t.config;o=Object.assign(s,o),t.setConfig(o)}});

+ 0 - 1
app/src/main/assets/web/vue/assets/el-loading-15d78e2b.js

@@ -1 +0,0 @@
-const a='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024"><path fill="currentColor" d="M512 64a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V96a32 32 0 0 1 32-32zm0 640a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V736a32 32 0 0 1 32-32zm448-192a32 32 0 0 1-32 32H736a32 32 0 1 1 0-64h192a32 32 0 0 1 32 32zm-640 0a32 32 0 0 1-32 32H96a32 32 0 0 1 0-64h192a32 32 0 0 1 32 32zM195.2 195.2a32 32 0 0 1 45.248 0L376.32 331.008a32 32 0 0 1-45.248 45.248L195.2 240.448a32 32 0 0 1 0-45.248zm452.544 452.544a32 32 0 0 1 45.248 0L828.8 783.552a32 32 0 0 1-45.248 45.248L647.744 692.992a32 32 0 0 1 0-45.248zM828.8 195.264a32 32 0 0 1 0 45.184L692.992 376.32a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0zm-452.544 452.48a32 32 0 0 1 0 45.248L240.448 828.8a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0z"/></svg>';export{a as l};

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
app/src/main/assets/web/vue/assets/el-loading-5b5af897.js


+ 1 - 0
app/src/main/assets/web/vue/assets/index-71b7f9c4.css

@@ -0,0 +1 @@
+.el-link[data-v-aee57c78]{padding:4px}.el-text[data-v-aee57c78]{padding-top:20px}.error[data-v-d4c4e88b]{border-color:var(--el-color-error)!important;color:var(--el-color-error)!important;--el-checkbox-checked-text-color: var(--el-color-error);--el-checkbox-checked-bg-color: var(--el-color-error);--el-checkbox-checked-input-border-color: var(--el-color-error)}.tool[data-v-3d581419]{display:flex;margin:4px 0;justify-content:center}#source-list[data-v-3d581419]{margin-top:6px;height:calc(100vh - 119px)}#source-list[data-v-3d581419] .el-checkbox{margin-bottom:4px;width:100%}[data-v-fe904689] #debug-text{height:calc(100vh - 86px)}[data-v-7e91a802] .el-input{width:100%}[data-v-7e91a802] #source-json{height:calc(100vh - 50px)}[data-v-dcce2457] .el-tabs__header{margin-bottom:5px}.flex-space-between[data-v-dc7cd0f9]{display:flex;justify-content:space-between;align-items:baseline}.flex-column-center[data-v-dc7cd0f9]{display:flex;flex-direction:column;justify-content:center}.menu>.el-button[data-v-dc7cd0f9]{margin:4px;padding:1em;width:6em}.hotkeys-item .title[data-v-dc7cd0f9]{width:5em;display:flex;justify-content:flex-end;margin-right:1em}.hotkeys-item__content[data-v-dc7cd0f9]{display:flex;flex-wrap:wrap;flex:1}.hotkeys-item__content div[data-v-dc7cd0f9]{margin-bottom:1em}.hotkeys-item__content span[data-v-dc7cd0f9]{margin:.5em}[data-v-2cfb5302] .el-tab-pane{height:calc(100vh - 55px);padding-top:15px;padding-right:5px;overflow-y:auto}[data-v-2cfb5302] .el-tabs__header{margin:0}kbd{background-color:#fcfcfc;border-radius:3px;border:1px solid hsl(0deg,0%,80%);padding:4px 5px;font-weight:700}code{background-color:#f2f1f1;padding:.125rem .25rem;border-radius:.25rem;font-size:.835rem}body{padding:0;margin:0}.el-tabs__header{position:sticky;top:0px;z-index:2;background-color:#fff}.editor[data-v-e99e7704]{display:flex;height:100vh;overflow:hidden}.editor .left[data-v-e99e7704]{flex:1;margin-left:20px}.editor .right[data-v-e99e7704]{flex:1;width:360px;margin-right:20px}

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
app/src/main/assets/web/vue/assets/index-964f1746.css


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
app/src/main/assets/web/vue/assets/index-ab2e286b.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
app/src/main/assets/web/vue/assets/index-cbd182e6.js


+ 2 - 2
app/src/main/assets/web/vue/index.html

@@ -4,10 +4,10 @@
         <meta charset="UTF-8" />
         <meta charset="UTF-8" />
         <link rel="icon" href="./favicon.ico" />
         <link rel="icon" href="./favicon.ico" />
     <meta name="viewport" content="width=device-width,initial-scale=1.0" />
     <meta name="viewport" content="width=device-width,initial-scale=1.0" />
-      <script type="module" crossorigin src="./assets/index-cbd182e6.js"></script>
+      <script type="module" crossorigin src="./assets/index-ab2e286b.js"></script>
       <link rel="modulepreload" crossorigin href="./assets/vendor-8be1f5fb.js">
       <link rel="modulepreload" crossorigin href="./assets/vendor-8be1f5fb.js">
       <link rel="stylesheet" href="./assets/vendor-6f0d1692.css">
       <link rel="stylesheet" href="./assets/vendor-6f0d1692.css">
-      <link rel="stylesheet" href="./assets/index-964f1746.css">
+      <link rel="stylesheet" href="./assets/index-71b7f9c4.css">
     </head>
     </head>
 
 
     <body>
     <body>

+ 1 - 0
modules/web/.eslintrc-auto-import.json

@@ -4,6 +4,7 @@
     "ComponentPublicInstance": true,
     "ComponentPublicInstance": true,
     "ComputedRef": true,
     "ComputedRef": true,
     "EffectScope": true,
     "EffectScope": true,
+    "ElLoading": true,
     "ElMessage": true,
     "ElMessage": true,
     "InjectionKey": true,
     "InjectionKey": true,
     "PropType": true,
     "PropType": true,

+ 1 - 0
modules/web/src/auto-imports.d.ts

@@ -5,6 +5,7 @@
 export {}
 export {}
 declare global {
 declare global {
   const EffectScope: typeof import('vue')['EffectScope']
   const EffectScope: typeof import('vue')['EffectScope']
+  const ElLoading: typeof import('element-plus/es')['ElLoading']
   const ElMessage: typeof import('element-plus/es')['ElMessage']
   const ElMessage: typeof import('element-plus/es')['ElMessage']
   const acceptHMRUpdate: typeof import('pinia')['acceptHMRUpdate']
   const acceptHMRUpdate: typeof import('pinia')['acceptHMRUpdate']
   const computed: typeof import('vue')['computed']
   const computed: typeof import('vue')['computed']

+ 5 - 5
modules/web/src/components/BookItems.vue

@@ -3,7 +3,7 @@
     <div class="wrapper">
     <div class="wrapper">
       <div
       <div
         class="book"
         class="book"
-        v-for="book in props.books"
+        v-for="book in books"
         :key="book.bookUrl"
         :key="book.bookUrl"
         @click="handleClick(book)"
         @click="handleClick(book)"
       >
       >
@@ -22,7 +22,7 @@
             <div class="author">
             <div class="author">
               {{ book.author }}
               {{ book.author }}
             </div>
             </div>
-            <div class="tags" v-show="props.isSearch">
+            <div class="tags" v-show="isSearch">
               <el-tag
               <el-tag
                 v-for="tag in book.kind?.split(',').slice(0, 2)"
                 v-for="tag in book.kind?.split(',').slice(0, 2)"
                 :key="tag"
                 :key="tag"
@@ -30,16 +30,16 @@
                 {{ tag }}
                 {{ tag }}
               </el-tag>
               </el-tag>
             </div>
             </div>
-            <div class="update-info" v-show="!props.isSearch">
+            <div class="update-info" v-show="!isSearch">
               <div class="dot">•</div>
               <div class="dot">•</div>
               <div class="size">共{{ book.totalChapterNum }}章</div>
               <div class="size">共{{ book.totalChapterNum }}章</div>
               <div class="dot">•</div>
               <div class="dot">•</div>
               <div class="date">{{ dateFormat(book.lastCheckTime) }}</div>
               <div class="date">{{ dateFormat(book.lastCheckTime) }}</div>
             </div>
             </div>
           </div>
           </div>
-          <div class="intro" v-show="props.isSearch">{{ book.intro }}</div>
+          <div class="intro" v-show="isSearch">{{ book.intro }}</div>
 
 
-          <div class="dur-chapter" v-show="!props.isSearch">
+          <div class="dur-chapter" v-show="!isSearch">
             已读:{{ book.durChapterTitle }}
             已读:{{ book.durChapterTitle }}
           </div>
           </div>
           <div class="last-chapter">最新:{{ book.latestChapterTitle }}</div>
           <div class="last-chapter">最新:{{ book.latestChapterTitle }}</div>

+ 13 - 5
modules/web/src/components/ChapterContent.vue

@@ -1,9 +1,10 @@
 <template>
 <template>
-  <div v-for="(para, index) in props.carray" :key="index">
+  <div v-for="(para, index) in carray" :key="index">
     <img
     <img
       class="full"
       class="full"
       v-if="/^\s*<img[^>]*src[^>]+>$/.test(para)"
       v-if="/^\s*<img[^>]*src[^>]+>$/.test(para)"
       :src="getImageSrc(para)"
       :src="getImageSrc(para)"
+      @error.once="proxyImage"
       loading="lazy"
       loading="lazy"
     />
     />
     <p v-else :style="style" v-html="para" />
     <p v-else :style="style" v-html="para" />
@@ -12,8 +13,10 @@
 
 
 <script setup>
 <script setup>
 import config from "../plugins/config";
 import config from "../plugins/config";
+import { getImageFromLegado, isLegadoUrl } from "../plugins/utils";
+
 const store = useBookStore();
 const store = useBookStore();
-const props = defineProps(["carray"]);
+defineProps(["carray"]);
 
 
 const fontFamily = computed(() => {
 const fontFamily = computed(() => {
   if (store.config.font >= 0) {
   if (store.config.font >= 0) {
@@ -30,10 +33,15 @@ const style = computed(() => {
   return style;
   return style;
 });
 });
 
 
-function getImageSrc(content) {
+const getImageSrc = (content) => {
   const imgPattern = /<img[^>]*src="([^"]*(?:"[^>]+\})?)"[^>]*>/;
   const imgPattern = /<img[^>]*src="([^"]*(?:"[^>]+\})?)"[^>]*>/;
-  return content.match(imgPattern)[1];
-}
+  const src = content.match(imgPattern)[1];
+  if (isLegadoUrl(src)) return getImageFromLegado(src);
+  return src;
+};
+const proxyImage = (event) => {
+  event.target.src = getImageFromLegado(event.target.src);
+};
 
 
 watch(fontSize, () => {
 watch(fontSize, () => {
   store.setShowContent(false);
   store.setShowContent(false);

+ 6 - 6
modules/web/src/components/SourceItem.vue

@@ -11,12 +11,12 @@
 </template>
 </template>
 
 
 <script setup>
 <script setup>
-const { source } = defineProps(['source'])
-const store = useSourceStore()
-const { errorPushSources } = storeToRefs(store)
-const handleSourceClick = source => {
-  store.changeCurrentSource(source)
-}
+defineProps(["source"]);
+const store = useSourceStore();
+const { errorPushSources } = storeToRefs(store);
+const handleSourceClick = (source) => {
+  store.changeCurrentSource(source);
+};
 </script>
 </script>
 <style lang="scss" scoped>
 <style lang="scss" scoped>
 .error {
 .error {

+ 6 - 4
modules/web/src/components/SourceList.vue

@@ -30,7 +30,7 @@
   </div>
   </div>
   <el-checkbox-group id="source-list" v-model="sourceSelect">
   <el-checkbox-group id="source-list" v-model="sourceSelect">
     <virtual-list
     <virtual-list
-      style="height: 100%; overflow-y: auto; overflow-x: hidden;"
+      style="height: 100%; overflow-y: auto; overflow-x: hidden"
       :data-key="(source) => source.bookSourceUrl || source.sourceUrl"
       :data-key="(source) => source.bookSourceUrl || source.sourceUrl"
       :data-sources="sourcesFiltered"
       :data-sources="sourcesFiltered"
       :data-component="SourceItem"
       :data-component="SourceItem"
@@ -42,7 +42,7 @@
 <script setup>
 <script setup>
 import { Folder, Delete, Download, Search } from "@element-plus/icons-vue";
 import { Folder, Delete, Download, Search } from "@element-plus/icons-vue";
 import { isSourceContains } from "../utils/souce";
 import { isSourceContains } from "../utils/souce";
-import VirtualList from 'vue3-virtual-scroll-list';
+import VirtualList from "vue3-virtual-scroll-list";
 import SourceItem from "./SourceItem.vue";
 import SourceItem from "./SourceItem.vue";
 
 
 const store = useSourceStore();
 const store = useSourceStore();
@@ -98,7 +98,10 @@ const importSourceFile = () => {
 };
 };
 const outExport = () => {
 const outExport = () => {
   const exportFile = document.createElement("a");
   const exportFile = document.createElement("a");
-  let sources = sourceSelect.value.length === 0 ? sourcesFiltered.value : sourceSelect.value,
+  let sources =
+      sourceSelect.value.length === 0
+        ? sourcesFiltered.value
+        : sourceSelect.value,
     sourceType = isBookSource.value ? "BookSource" : "RssSource";
     sourceType = isBookSource.value ? "BookSource" : "RssSource";
 
 
   exportFile.download = `${sourceType}_${Date()
   exportFile.download = `${sourceType}_${Date()
@@ -129,5 +132,4 @@ const outExport = () => {
     width: 100%;
     width: 100%;
   }
   }
 }
 }
-
 </style>
 </style>

+ 2 - 6
modules/web/src/components/SourceTabForm.vue

@@ -1,7 +1,7 @@
 <template>
 <template>
   <el-tabs id="source-edit">
   <el-tabs id="source-edit">
     <el-tab-pane
     <el-tab-pane
-      v-for="{ name, children } in tabsData"
+      v-for="{ name, children } in Object.values(config)"
       :label="name"
       :label="name"
       :key="name"
       :key="name"
     >
     >
@@ -59,11 +59,7 @@
 
 
 <script setup>
 <script setup>
 const store = useSourceStore();
 const store = useSourceStore();
-
-const props = defineProps(["config"]);
-
-const tabsData = Object.values(props.config);
-
+defineProps(["config"]);
 const { currentSource } = storeToRefs(store);
 const { currentSource } = storeToRefs(store);
 </script>
 </script>
 
 

+ 20 - 18
modules/web/src/components/ToolBar.vue

@@ -73,25 +73,27 @@ import { isInvaildSource } from "../utils/souce";
 const store = useSourceStore();
 const store = useSourceStore();
 const pull = () => {
 const pull = () => {
   const loadingMsg = ElMessage({
   const loadingMsg = ElMessage({
-    message: '加载中……',
+    message: "加载中……",
     showClose: true,
     showClose: true,
-    duration: 0
-  })
-  API.getSources().then(({ data }) => {
-    if (data.isSuccess) {
-      store.changeTabName("editList");
-      store.saveSources(data.data);
-      ElMessage({
-        message: `成功拉取${data.data.length}条源`,
-        type: "success",
-      });
-    } else {
-      ElMessage({
-        message: data.errorMsg ?? "后端错误",
-        type: "error",
-      });
-    }
-  }).finally(() => loadingMsg.close());
+    duration: 0,
+  });
+  API.getSources()
+    .then(({ data }) => {
+      if (data.isSuccess) {
+        store.changeTabName("editList");
+        store.saveSources(data.data);
+        ElMessage({
+          message: `成功拉取${data.data.length}条源`,
+          type: "success",
+        });
+      } else {
+        ElMessage({
+          message: data.errorMsg ?? "后端错误",
+          type: "error",
+        });
+      }
+    })
+    .finally(() => loadingMsg.close());
 };
 };
 
 
 const push = () => {
 const push = () => {

+ 1 - 5
modules/web/src/plugins/utils.js

@@ -1,7 +1,7 @@
 import { formatDate } from "@vueuse/shared";
 import { formatDate } from "@vueuse/shared";
 
 
 export const isLegadoUrl = (/** @type {string} */ url) =>
 export const isLegadoUrl = (/** @type {string} */ url) =>
-  /,\s*\s*\{/.test(url) ||
+  /,\s*\{/.test(url) ||
   !(
   !(
     url.startsWith("http") ||
     url.startsWith("http") ||
     url.startsWith("data:") ||
     url.startsWith("data:") ||
@@ -11,10 +11,6 @@ export const isLegadoUrl = (/** @type {string} */ url) =>
  * @param {string} src
  * @param {string} src
  */
  */
 export function getImageFromLegado(src) {
 export function getImageFromLegado(src) {
-  //返回阅读代理的图片链接 已经代理的或者dataurl返回传入值
-  if (!isLegadoUrl(src)) {
-    return src;
-  }
   return (
   return (
     (import.meta.env.VITE_API || location.origin) +
     (import.meta.env.VITE_API || location.origin) +
     "/image?path=" +
     "/image?path=" +

+ 4 - 7
modules/web/src/views/BookChapter.vue

@@ -85,7 +85,7 @@
           <div class="title" :index="data.index" v-if="showContent">
           <div class="title" :index="data.index" v-if="showContent">
             {{ data.title }}
             {{ data.title }}
           </div>
           </div>
-          <chapter-content :carray="data.content" v-if="showContent"/>
+          <chapter-content :carray="data.content" v-if="showContent" />
         </div>
         </div>
         <div class="loading" ref="loading"></div>
         <div class="loading" ref="loading"></div>
         <div class="bottom-bar" ref="bottom"></div>
         <div class="bottom-bar" ref="bottom"></div>
@@ -105,7 +105,7 @@ const loadingSerive = ref(null);
 const content = ref();
 const content = ref();
 
 
 watch(showLoading, (loading) => {
 watch(showLoading, (loading) => {
- if (!loading) return loadingSerive.value?.close();
+  if (!loading) return loadingSerive.value?.close();
   loadingSerive.value = ElLoading.service({
   loadingSerive.value = ElLoading.service({
     target: content.value,
     target: content.value,
     spinner: loadingSvg,
     spinner: loadingSvg,
@@ -139,15 +139,13 @@ const {
   showContent,
   showContent,
 } = storeToRefs(store);
 } = storeToRefs(store);
 
 
-const { chapterPos, index: chapterIndex} = toRefs(store.readingBook);
+const { chapterPos, index: chapterIndex } = toRefs(store.readingBook);
 
 
 const { theme, infiniteLoading } = toRefs(store.config);
 const { theme, infiniteLoading } = toRefs(store.config);
 
 
 // 主题部分
 // 主题部分
 const bodyColor = computed(() => settings.themes[theme.value].body);
 const bodyColor = computed(() => settings.themes[theme.value].body);
-const chapterColor = computed(
-  () => settings.themes[theme.value].content
-);
+const chapterColor = computed(() => settings.themes[theme.value].content);
 const popupColor = computed(() => settings.themes[theme.value].popup);
 const popupColor = computed(() => settings.themes[theme.value].popup);
 
 
 const readWidth = computed(() => {
 const readWidth = computed(() => {
@@ -215,7 +213,6 @@ watch(popupColor, (color) => {
   rightBarTheme.value.background = color;
   rightBarTheme.value.background = color;
 });
 });
 
 
-
 watchEffect(() => {
 watchEffect(() => {
   if (chapterData.value.length > 0) {
   if (chapterData.value.length > 0) {
     store.setContentLoading(false);
     store.setContentLoading(false);

+ 2 - 2
modules/web/src/views/BookShelf.vue

@@ -147,7 +147,7 @@ const searchBook = () => {
     () => {
     () => {
       showLoading.value = false;
       showLoading.value = false;
       if (books.value.length == 0) {
       if (books.value.length == 0) {
-        ElMessage.info("搜索结果为空")
+        ElMessage.info("搜索结果为空");
       }
       }
     }
     }
   );
   );
@@ -224,7 +224,7 @@ const fetchBookShelfData = () => {
       showLoading.value = false;
       showLoading.value = false;
       store.setConnectType("danger");
       store.setConnectType("danger");
       store.setConnectStatus("连接失败");
       store.setConnectStatus("连接失败");
-      ElMessage.error("后端连接失败")
+      ElMessage.error("后端连接失败");
       store.setNewConnect(false);
       store.setNewConnect(false);
       throw error;
       throw error;
     });
     });

+ 0 - 5
modules/web/src/views/SourceEditor.vue

@@ -34,10 +34,5 @@ if (/bookSource/i.test(location.href)) {
     width: 360px;
     width: 360px;
     margin-right: 20px;
     margin-right: 20px;
   }
   }
-  #loading {
-    position: fixed;
-    top: 100px;
-    left: 90vw;
-  }
 }
 }
 </style>
 </style>

Некоторые файлы не были показаны из-за большого количества измененных файлов