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

style(modules/web): lint code with eslint

Xwite 2 лет назад
Родитель
Сommit
8b7e33a32e

+ 2 - 2
modules/web/scripts/sync.js

@@ -3,8 +3,8 @@ import fs from "node:fs";
 import process from "node:process";
 
 if (!process.env.GITHUB_ENV) {
-  console.log("非Github WorkFlows环境,取消文件复制")
-  process.exit()
+  console.log("非Github WorkFlows环境,取消文件复制");
+  process.exit();
 }
 const LEGADO_ASSETS_WEB_VUE_DIR = new URL(
   "../../../app/src/main/assets/web/vue",

+ 4 - 1
modules/web/src/api/axios.js

@@ -3,7 +3,10 @@ import axios from "axios";
 const SECOND = 1000;
 
 const ajax = axios.create({
-  baseURL: import.meta.env.VITE_API || localStorage.getItem("remoteIp") || location.origin,
+  baseURL:
+    import.meta.env.VITE_API ||
+    localStorage.getItem("remoteIp") ||
+    location.origin,
   timeout: 120 * SECOND,
 });
 

+ 21 - 24
modules/web/src/api/index.js

@@ -4,8 +4,8 @@ import { ElMessage } from "element-plus/es";
 /** https://github.com/gedoor/legado/tree/master/app/src/main/java/io/legado/app/api */
 /** https://github.com/gedoor/legado/tree/master/app/src/main/java/io/legado/app/web */
 
-let legado_http_origin
-let legado_webSocket_origin
+let legado_http_origin;
+let legado_webSocket_origin;
 
 const setLeagdoHttpUrl = (http_url) => {
   let legado_webSocket_port;
@@ -19,29 +19,28 @@ const setLeagdoHttpUrl = (http_url) => {
   } else {
     legado_webSocket_port = protocol.startsWith("https:") ? "444" : "81";
   }
-  legado_webSocket_origin = 
-    `${protocol.startsWith("https:") ? "wss://" : "ws://"}${hostname}:${legado_webSocket_port}`;
+  legado_webSocket_origin = `${protocol.startsWith("https:") ? "wss://" : "ws://"}${hostname}:${legado_webSocket_port}`;
 
   console.info("legado_server_config:");
-  console.table({legado_http_origin, legado_webSocket_origin});
+  console.table({ legado_http_origin, legado_webSocket_origin });
 };
 
 // 手动初始化 阅读web服务地址
 setLeagdoHttpUrl(ajax.defaults.baseURL);
 
 const testLeagdoHttpUrlConnection = async (http_url) => {
-  const {data = {}} = await ajax.get("/getReadConfig", {
+  const { data = {} } = await ajax.get("/getReadConfig", {
     baseURL: http_url,
-    timeout: 3000
-  })
+    timeout: 3000,
+  });
   // 返回结果应该是JSON 并有键值isSuccess
   try {
-    if ("isSuccess" in data) return data.data
-    throw new Error("ReadConfig后端返回格式错误" )
+    if ("isSuccess" in data) return data.data;
+    throw new Error("ReadConfig后端返回格式错误");
   } catch {
-    throw new Error("ReadConfig后端返回格式错误" )
+    throw new Error("ReadConfig后端返回格式错误");
   }
-}
+};
 
 const isSourecEditor = /source/i.test(location.href);
 const APIExceptionHandler = (error) => {
@@ -59,7 +58,7 @@ ajax.interceptors.response.use((response) => response, APIExceptionHandler);
 // 书架API
 // Http
 /** @returns {Promise<import("axios").AxiosResponse<{isSuccess: boolean, data: string, errorMsg:string}>>} */
-const getReadConfig = () => ajax.get("/getReadConfig", {timeout: 3000});
+const getReadConfig = () => ajax.get("/getReadConfig", { timeout: 3000 });
 const saveReadConfig = (config) => ajax.post("/saveReadConfig", config);
 
 const saveBookProgress = (bookProgress) =>
@@ -70,7 +69,7 @@ const saveBookProgressWithBeacon = (bookProgress) => {
   // 常规请求可能会被取消 使用Fetch keep-alive 或者 navigator.sendBeacon
   navigator.sendBeacon(
     `${legado_http_origin}/saveBookProgress`,
-    JSON.stringify(bookProgress)
+    JSON.stringify(bookProgress),
   );
 };
 
@@ -81,22 +80,21 @@ const getChapterList = (/** @type {string} */ bookUrl) =>
 
 const getBookContent = (
   /** @type {string} */ bookUrl,
-  /** @type {number} */ chapterIndex
+  /** @type {number} */ chapterIndex,
 ) =>
   ajax.get(
     "/getBookContent?url=" +
       encodeURIComponent(bookUrl) +
       "&index=" +
-      chapterIndex
+      chapterIndex,
   );
 
 // webSocket
 const search = (
   /** @type {string} */ searchKey,
   /** @type {(data: string) => void} */ onReceive,
-  /** @type {() => void} */ onFinish
+  /** @type {() => void} */ onFinish,
 ) => {
-
   const url = `${legado_webSocket_origin}/searchBook`;
   const socket = new WebSocket(url);
 
@@ -140,9 +138,8 @@ const debug = (
   /** @type {string} */ sourceUrl,
   /** @type {string} */ searchKey,
   /** @type {(data: string) => void} */ onReceive,
-  /** @type {() => void} */ onFinish
+  /** @type {() => void} */ onFinish,
 ) => {
-
   const url = `${legado_webSocket_origin}/${
     isBookSource ? "bookSource" : "rssSource"
   }Debug`;
@@ -168,16 +165,16 @@ const debug = (
  * @param {string} coverUrl
  */
 const getProxyCoverUrl = (coverUrl) => {
-  if(coverUrl.startsWith(legado_http_origin)) return coverUrl
+  if (coverUrl.startsWith(legado_http_origin)) return coverUrl;
   return legado_http_origin + "/cover?path=" + encodeURIComponent(coverUrl);
-}
+};
 /**
  * 从阅读获取需要特定处理的图片
  * @param {string} src
  * @param {number|`${number}`} width
  */
 const getProxyImageUrl = (src, width) => {
-  if (src.startsWith(legado_http_origin)) return src
+  if (src.startsWith(legado_http_origin)) return src;
   return (
     legado_http_origin +
     "/image?path=" +
@@ -187,7 +184,7 @@ const getProxyImageUrl = (src, width) => {
     "&width=" +
     width
   );
-}
+};
 
 export default {
   getReadConfig,

+ 1 - 3
modules/web/src/components/BookItems.vue

@@ -57,14 +57,12 @@ const props = defineProps(["books", "isSearch"]);
 const emit = defineEmits(["bookClick"]);
 const handleClick = (book) => emit("bookClick", book);
 const getCover = (coverUrl) => {
-  return isLegadoUrl(coverUrl)
-    ? API.getProxyCoverUrl(coverUrl) : coverUrl
+  return isLegadoUrl(coverUrl) ? API.getProxyCoverUrl(coverUrl) : coverUrl;
 };
 const proxyImage = (event) => {
   event.target.src = API.getProxyCoverUrl(event.target.src);
 };
 
-
 const subJustify = computed(() =>
   props.isSearch ? "space-between" : "flex-start",
 );

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

@@ -34,11 +34,15 @@ const props = defineProps({
 const getImageSrc = (content) => {
   const imgPattern = /<img[^>]*src="([^"]*(?:"[^>]+\})?)"[^>]*>/;
   const src = content.match(imgPattern)[1];
-  if (isLegadoUrl(src)) return API.getProxyImageUrl(src, useBookStore().config.readWidth)
+  if (isLegadoUrl(src))
+    return API.getProxyImageUrl(src, useBookStore().config.readWidth);
   return src;
 };
 const proxyImage = (event) => {
-  event.target.src = API.getProxyImageUrl(event.target.src, useBookStore().config.readWidth);
+  event.target.src = API.getProxyImageUrl(
+    event.target.src,
+    useBookStore().config.readWidth,
+  );
 };
 
 const calculateWordCount = (paragraph) => {

+ 1 - 5
modules/web/src/components/PopCatalog.vue

@@ -27,10 +27,7 @@ import CatalogItem from "./CatalogItem.vue";
 
 const store = useBookStore();
 
-const {
-  catalog,
-  popCataVisible, miniInterface
-} = storeToRefs(store);
+const { catalog, popCataVisible, miniInterface } = storeToRefs(store);
 
 //主题
 const isNight = computed(() => store.theme);
@@ -89,7 +86,6 @@ const gotoChapter = (note) => {
   store.saveBookProgress();
   emit("getContent", chapterIndex);
 };
-
 </script>
 
 <style lang="scss" scoped>

+ 44 - 53
modules/web/src/components/ReadSettings.vue

@@ -68,10 +68,7 @@
                 "
                 >确定</el-button
               >
-              <el-button
-                type="primary"
-                size="small"
-                @click="loadFontFromURL"
+              <el-button type="primary" size="small" @click="loadFontFromURL"
                 >网络下载</el-button
               >
             </div>
@@ -196,14 +193,14 @@ watch(
     API.saveReadConfig(newValue);
   },
   {
-    deep: 2 //深度为2
-  }
-)
+    deep: 2, //深度为2
+  },
+);
 
 //主题颜色
 const theme = computed(() => store.theme);
 const isNight = computed(() => store.isNight);
-const moonIcon = computed(() => theme.value == 6 ? "" : "");
+const moonIcon = computed(() => (theme.value == 6 ? "" : ""));
 const themeColors = [
   {
     background: "rgba(250, 245, 235, 0.8)",
@@ -234,7 +231,7 @@ const popupTheme = computed(() => {
 });
 const setTheme = (theme) => {
   store.config.theme = theme;
-}
+};
 
 //预置字体
 const fonts = ref(["雅黑", "宋体", "楷书"]);
@@ -253,51 +250,45 @@ const setCustomFont = () => {
 };
 // 加载网络字体
 const loadFontFromURL = () => {
-  ElMessageBox.prompt(
-    "请输入 字体网络链接",
-    "提示",
-    {
-      confirmButtonText: "确定",
-      cancelButtonText: "取消",
-      inputPattern: /^https?:.+$/,
-      inputErrorMessage: "url 形式不正确",
-      beforeClose: (action, instance, done) => {
-        if (action === "confirm") {
-          instance.confirmButtonLoading = true;
-          instance.confirmButtonText = "下载中……";
-          // instance.inputValue
-          const url = instance.inputValue
-          if (typeof FontFace !== "function") {
-            ElMessage.error("浏览器不支持FontFace");
-            return done();
-          }
-          const fontface = new FontFace(
-            customFontName.value,
-            `url("${url}")`
-          )
-          //@ts-ignore
-          document.fonts.add(fontface);
-          fontface.load()
-          //API.getBookShelf()
-            .then(function () {
-              instance.confirmButtonLoading = false;
-              ElMessage.info("字体加载成功!");
-              setCustomFont();
-              done();
-            })
-            .catch(function (error) {
-              instance.confirmButtonLoading = false;
-              instance.confirmButtonText = "确定";
-              ElMessage.error("下载失败,请检查您输入的 url");
-              throw error;
-            });
-        } else {
-          done();
+  ElMessageBox.prompt("请输入 字体网络链接", "提示", {
+    confirmButtonText: "确定",
+    cancelButtonText: "取消",
+    inputPattern: /^https?:.+$/,
+    inputErrorMessage: "url 形式不正确",
+    beforeClose: (action, instance, done) => {
+      if (action === "confirm") {
+        instance.confirmButtonLoading = true;
+        instance.confirmButtonText = "下载中……";
+        // instance.inputValue
+        const url = instance.inputValue;
+        if (typeof FontFace !== "function") {
+          ElMessage.error("浏览器不支持FontFace");
+          return done();
         }
-      },
-    }
-  );
-}
+        const fontface = new FontFace(customFontName.value, `url("${url}")`);
+        //@ts-ignore
+        document.fonts.add(fontface);
+        fontface
+          .load()
+          //API.getBookShelf()
+          .then(function () {
+            instance.confirmButtonLoading = false;
+            ElMessage.info("字体加载成功!");
+            setCustomFont();
+            done();
+          })
+          .catch(function (error) {
+            instance.confirmButtonLoading = false;
+            instance.confirmButtonText = "确定";
+            ElMessage.error("下载失败,请检查您输入的 url");
+            throw error;
+          });
+      } else {
+        done();
+      }
+    },
+  });
+};
 
 //字体大小
 const fontSize = computed(() => {

+ 2 - 2
modules/web/src/components/SourceDebug.vue

@@ -44,8 +44,8 @@ const startDebug = async () => {
   try {
     await API.saveSource(store.currentSource);
   } catch (e) {
-    store.debugFinish()
-    throw e
+    store.debugFinish();
+    throw e;
   }
   API.debug(
     store.currentSourceUrl,

+ 4 - 4
modules/web/src/components/SourceHelp.vue

@@ -26,11 +26,11 @@ import { Link } from "@element-plus/icons-vue";
   <el-link :icon="Link" href="/help/#httpTTSHelp" target="_blank"
     >在线朗读规则</el-link
   ><br />
-  <el-link :icon="Link" href="/help/#webDavBookHelp" target="_blank"
-    > WebDav书籍简明使用教程</el-link
+  <el-link :icon="Link" href="/help/#webDavBookHelp" target="_blank">
+    WebDav书籍简明使用教程</el-link
   ><br />
-  <el-link :icon="Link" href="/help/#webDavHelp" target="_blank"
-    > WebDav备份教程</el-link
+  <el-link :icon="Link" href="/help/#webDavHelp" target="_blank">
+    WebDav备份教程</el-link
   ><br />
   <el-link :icon="Link" href="https://regexr-cn.com/" target="_blank"
     >正则表达式在线验证工具</el-link

+ 1 - 1
modules/web/src/components/SourceList.vue

@@ -54,7 +54,7 @@ import SourceItem from "./SourceItem.vue";
 const store = useSourceStore();
 const sourceUrlSelect = ref([]);
 const searchKey = ref("");
-const sources  = computed(() => store.sources);
+const sources = computed(() => store.sources);
 
 // 筛选源
 /** @type Ref<import('@/source').Source[]> */

+ 9 - 9
modules/web/src/main.js

@@ -2,7 +2,7 @@ import { createApp } from "vue";
 import App from "./App.vue";
 import router from "@/router";
 import store from "@/store";
-import "element-plus/theme-chalk/dark/css-vars.css"
+import "element-plus/theme-chalk/dark/css-vars.css";
 
 createApp(App).use(store).use(router).mount("#app");
 
@@ -10,12 +10,12 @@ createApp(App).use(store).use(router).mount("#app");
 useBookStore().loadReadConfig();
 // 书架 同步Element PLUS 夜间模式
 watch(
-    () => useBookStore().isNight,
-    (isNight) => {
-        if (isNight) {
-            document.documentElement.classList.add("dark");
-        } else {
-            document.documentElement.classList.remove("dark");
-        }
+  () => useBookStore().isNight,
+  (isNight) => {
+    if (isNight) {
+      document.documentElement.classList.add("dark");
+    } else {
+      document.documentElement.classList.remove("dark");
     }
-)
+  },
+);

+ 8 - 8
modules/web/src/pages/bookshelf/main.js

@@ -10,12 +10,12 @@ createApp(App).use(store).use(bookRouter).mount("#app");
 useBookStore().loadReadConfig();
 // 同步Element PLUS 夜间模式
 watch(
-    () => useBookStore().isNight,
-    (isNight) => {
-        if (isNight) {
-            document.documentElement.classList.add("dark");
-        } else {
-            document.documentElement.classList.remove("dark");
-        }
+  () => useBookStore().isNight,
+  (isNight) => {
+    if (isNight) {
+      document.documentElement.classList.add("dark");
+    } else {
+      document.documentElement.classList.remove("dark");
     }
-)
+  },
+);

+ 8 - 6
modules/web/src/store/bookStore.js

@@ -52,7 +52,7 @@ export const useBookStore = defineStore("book", {
       };
     },
     theme: (state) => {
-      return state.config.theme
+      return state.config.theme;
     },
     isNight: (state) => state.config.theme == 6,
   },
@@ -114,10 +114,12 @@ export const useBookStore = defineStore("book", {
     },
     //读取阅读界面配置以初始化夜间模式 以免初次加载书架页面时闪屏
     async loadReadConfig() {
-      return API.getReadConfig().then(response => response.data)
-        .then(({isSuccess, data}) => 
-          isSuccess && this.setConfig(JSON.parse(data))
-        )
-    }
+      return API.getReadConfig()
+        .then((response) => response.data)
+        .then(
+          ({ isSuccess, data }) =>
+            isSuccess && this.setConfig(JSON.parse(data)),
+        );
+    },
   },
 });

+ 9 - 8
modules/web/src/views/BookChapter.vue

@@ -301,7 +301,10 @@ const toChapterPos = (pos) => {
 };
 
 // 60秒保存一次进度
-const saveBookProgressThrottle = useThrottleFn(() => store.saveBookProgress(), 60000)
+const saveBookProgressThrottle = useThrottleFn(
+  () => store.saveBookProgress(),
+  60000,
+);
 
 const onReadedLengthChange = (index, pos) => {
   saveReadingBookProgressToBrowser(index, pos);
@@ -491,7 +494,7 @@ onMounted(() => {
       bookAuthor: bookAuthor,
       bookUrl: bookUrl,
       index: chapterIndex,
-      chapterPos: chapterPos
+      chapterPos: chapterPos,
     };
     localStorage.setItem(bookUrl, JSON.stringify(book));
   }
@@ -531,7 +534,6 @@ onMounted(() => {
   );
 });
 
-
 onUnmounted(() => {
   window.removeEventListener("keyup", handleKeyPress);
   window.removeEventListener("keydown", ignoreKeyPress);
@@ -544,7 +546,6 @@ onUnmounted(() => {
   scrollObserver = null;
 });
 
-
 const addToBookShelfConfirm = async () => {
   const bookUrl = sessionStorage.getItem("bookUrl");
   const bookName = sessionStorage.getItem("bookName");
@@ -553,10 +554,10 @@ const addToBookShelfConfirm = async () => {
   sessionStorage.removeItem("isSeachBook");
   // 阅读的是搜索的书籍 并未在书架
   if (isSeachBook === "true") {
-    const addtoshelf = window.confirm(`是否将《${bookName}》放入书架?`)
+    const addtoshelf = window.confirm(`是否将《${bookName}》放入书架?`);
     if (!addtoshelf) await API.deleteBook(book);
-      //按下返回键时不能触发 ElMessageBox.confirm
-/*     await ElMessageBox.confirm(
+    //按下返回键时不能触发 ElMessageBox.confirm
+    /*     await ElMessageBox.confirm(
       `是否将《${bookName}》放入书架?`,
       "放入书架",
       {
@@ -571,7 +572,7 @@ const addToBookShelfConfirm = async () => {
       await API.deleteBook(book);
     }) */
   }
-}
+};
 onBeforeRouteLeave(async (to, from, next) => {
   await addToBookShelfConfirm();
   next();

+ 74 - 67
modules/web/src/views/BookShelf.vue

@@ -20,7 +20,9 @@
           <div class="recent-title">最近阅读</div>
           <div class="reading-recent">
             <el-tag
-              :type="readingRecent.name == '尚无阅读记录' ? 'warning' : 'primary'"
+              :type="
+                readingRecent.name == '尚无阅读记录' ? 'warning' : 'primary'
+              "
               class="recent-book"
               size="large"
               @click="
@@ -29,7 +31,7 @@
                   readingRecent.name,
                   readingRecent.author,
                   readingRecent.chapterIndex,
-                  readingRecent.chapterPos
+                  readingRecent.chapterPos,
                 )
               "
               :class="{ 'no-point': readingRecent.url == '' }"
@@ -40,37 +42,37 @@
         </div>
         <div class="setting-wrapper">
           <div class="setting-title">基本设定</div>
-            <div class="setting-item">
-              <el-tag
-                :type="connectType"
-                size="large"
-                class="setting-connect"
-                :class="{ 'no-point': newConnect }"
-                @click="setIP"
-              >
-                {{ connectStatus }}
-              </el-tag>
-            </div>
+          <div class="setting-item">
+            <el-tag
+              :type="connectType"
+              size="large"
+              class="setting-connect"
+              :class="{ 'no-point': newConnect }"
+              @click="setIP"
+            >
+              {{ connectStatus }}
+            </el-tag>
           </div>
         </div>
-        <div class="bottom-icons">
-          <a
-            href="https://github.com/gedoor/legado_web_bookshelf"
-            target="_blank"
-          >
-            <div class="bottom-icon">
-              <img :src="githubUrl" alt="" />
-            </div>
-          </a>
-        </div>
       </div>
-      <div class="shelf-wrapper" ref="shelfWrapper">
-        <book-items
-          :books="books"
-          @bookClick="handleBookClick"
-          :isSearch="isSearching"
-        ></book-items>
+      <div class="bottom-icons">
+        <a
+          href="https://github.com/gedoor/legado_web_bookshelf"
+          target="_blank"
+        >
+          <div class="bottom-icon">
+            <img :src="githubUrl" alt="" />
+          </div>
+        </a>
       </div>
+    </div>
+    <div class="shelf-wrapper" ref="shelfWrapper">
+      <book-items
+        :books="books"
+        @bookClick="handleBookClick"
+        :isSearch="isSearching"
+      ></book-items>
+    </div>
   </div>
 </template>
 
@@ -96,7 +98,7 @@ const readingRecent = ref({
 const shelfWrapper = ref(null);
 const { showLoading, closeLoading, loadingWrapper, isLoading } = useLoading(
   shelfWrapper,
-  "正在获取书籍信息"
+  "正在获取书籍信息",
 );
 
 // 书架书籍和在线书籍搜索
@@ -145,7 +147,7 @@ const searchBook = () => {
       if (books.value.length == 0) {
         ElMessage.info("搜索结果为空");
       }
-    }
+    },
   );
 };
 
@@ -171,7 +173,7 @@ const setIP = () => {
           // instance.inputValue
           const ip = instance.inputValue;
           API.testLeagdoHttpUrlConnection("http://" + ip)
-          //API.getBookShelf()
+            //API.getBookShelf()
             .then(function (configStr) {
               saveReadConfig(configStr);
               instance.confirmButtonLoading = false;
@@ -182,7 +184,7 @@ const setIP = () => {
               API.setLeagdoHttpUrl("http://" + ip);
               //持久化
               localStorage.setItem("remoteIp", ip);
-              fetchBookShelfData()
+              fetchBookShelfData();
               done();
             })
             .catch(function (error) {
@@ -196,7 +198,7 @@ const setIP = () => {
           done();
         }
       },
-    }
+    },
   );
 };
 
@@ -210,13 +212,20 @@ const handleBookClick = async (book) => {
     durChapterPos = 0,
   } = book;
   // 判断是否为 searchBook
-  const isSeachBook = "respondTime" in book
+  const isSeachBook = "respondTime" in book;
   if (isSeachBook) {
     await API.saveBook(book);
   }
   toDetail(bookUrl, name, author, durChapterIndex, durChapterPos, isSeachBook);
 };
-const toDetail = (bookUrl, bookName, bookAuthor, chapterIndex, chapterPos, isSeachBook) => {
+const toDetail = (
+  bookUrl,
+  bookName,
+  bookAuthor,
+  chapterIndex,
+  chapterPos,
+  isSeachBook,
+) => {
   if (bookName === "尚无阅读记录") return;
   sessionStorage.setItem("bookUrl", bookUrl);
   sessionStorage.setItem("bookName", bookName);
@@ -242,37 +251,36 @@ const loadShelf = () => {
     store
       .saveBookProgress()
       //确保各种网络情况下同步请求先完成
-      .finally(fetchBookShelfData)
+      .finally(fetchBookShelfData),
   );
 };
 
-const saveReadConfig = configStr => {
+const saveReadConfig = (configStr) => {
   try {
-      store.setConfig(JSON.parse(configStr));
-    } catch {
-      ElMessage.info("阅读界面解析错误");
-    }
-}
+    store.setConfig(JSON.parse(configStr));
+  } catch {
+    ElMessage.info("阅读界面解析错误");
+  }
+};
 
 const fetchBookShelfData = () => {
-  return API.getBookShelf()
-    .then((response) => {
-      store.setConnectType("success");
-      if (response.data.isSuccess) {
-        //store.increaseBookNum(response.data.data.length);
-        store.addBooks(
-          response.data.data.sort(function (a, b) {
-            var x = a["durChapterTime"] || 0;
-            var y = b["durChapterTime"] || 0;
-            return y - x;
-          })
-        );
-      } else {
-        ElMessage.error(response.data.errorMsg ?? "后端返回格式错误!");
-      }
-      store.setConnectStatus("已连接 " + API.legado_http_origin);
-      store.setNewConnect(false);
-    })
+  return API.getBookShelf().then((response) => {
+    store.setConnectType("success");
+    if (response.data.isSuccess) {
+      //store.increaseBookNum(response.data.data.length);
+      store.addBooks(
+        response.data.data.sort(function (a, b) {
+          var x = a["durChapterTime"] || 0;
+          var y = b["durChapterTime"] || 0;
+          return y - x;
+        }),
+      );
+    } else {
+      ElMessage.error(response.data.errorMsg ?? "后端返回格式错误!");
+    }
+    store.setConnectStatus("已连接 " + API.legado_http_origin);
+    store.setNewConnect(false);
+  });
 };
 
 onMounted(() => {
@@ -285,17 +293,16 @@ onMounted(() => {
     }
   }
   API.testLeagdoHttpUrlConnection()
-  //.then(saveReadConfig) 应该在组件挂载前读取阅读配置
-  .then(loadShelf)
-  .catch(function (error) {
+    //.then(saveReadConfig) 应该在组件挂载前读取阅读配置
+    .then(loadShelf)
+    .catch(function (error) {
       store.setConnectType("danger");
       store.setConnectStatus("连接异常");
-      ElMessage.error("后端连接失败异常,请检查阅读WEB服务或者设置其它可用IP")
+      ElMessage.error("后端连接失败异常,请检查阅读WEB服务或者设置其它可用IP");
       store.setNewConnect(false);
       throw error;
-  });
+    });
 });
-
 </script>
 
 <style lang="scss" scoped>

+ 1 - 1
modules/web/src/views/SourceEditor.vue

@@ -8,7 +8,7 @@
 <script setup>
 import bookSourceConfig from "@/config/bookSourceEditConfig";
 import rssSourceConfig from "@/config/rssSourceEditConfig";
-import "@/assets/sourceeditor.css"
+import "@/assets/sourceeditor.css";
 import { useDark } from "@vueuse/core";
 
 useDark();