Bläddra i källkod

feat: enhance book information handling and improve data categorization

- Updated the logic for retrieving the first letter of book names to ensure accurate categorization.
- Refactored the book categorization process to utilize a new helper function for better readability and maintainability.
- Improved error handling in the navigation URL construction for book reviews.
- Streamlined the data emission for first letter categorization to enhance performance.
- Adjusted CSS styles for better visual consistency across components.
ylong 2 veckor sedan
förälder
incheckning
1514964948

+ 5 - 8
components/pageScroll/index.vue

@@ -110,14 +110,11 @@ const upCallback = (mescroll) => {
     }
     const seq = ++loadSeq
     getList(mescroll).then(res => {
-        if (seq !== loadSeq) return
-        if (res?.code !== undefined && res.code !== 200) {
-            mescroll.endErr()
-            return
-        }
-        const curPageData = normalizeListData(res)
-        if (mescroll.num == 1) list.value = []
-        list.value = list.value.concat(curPageData)
+        console.log(res, 'res')
+        const curPageData = res.rows || res.data?.rows || res.data || [] // 当前页数据
+        if (mescroll.num == 1) list.value = []; // 第一页需手动制空列表
+        list.value = list.value.concat(curPageData); //追加新数据
+
         emit('updateList', list.value, mescroll.num)
         const total = res.total ?? res.data?.total ?? 0
         mescroll.endBySize(curPageData.length, total)

+ 1 - 1
pages/index/detail/components/BookInfo.vue

@@ -109,7 +109,7 @@ const formatBookList = (list) => {
         }
 
         // 兜底方案:如果首字母为空或无效,放入"其他"分类
-        if (!firstLetter || firstLetter.trim() === "") {
+        if (!firstLetter || !/^[A-Z]$/.test(firstLetter)) {
             firstLetter = "其他";
         }
 

+ 48 - 39
pages/index/detail/components/ReviewBookInfo.vue

@@ -50,7 +50,7 @@ function handleBookClick(book) {
     //     return;
     // }
     uni.navigateTo({
-        url: `/pages/index/detail/review-book?isbn=${book.isbn}&orderId=${props.detail.orderId}&auditReviewId=${book.auditReviewComment.auditReviewId}&&index=${book.auditReviewComment.index}`,
+        url: `/pages/index/detail/review-book?isbn=${book.isbn}&orderId=${props.detail.orderId}&auditReviewId=${book.auditReviewComment?.auditReviewId || ''}&index=${book.auditReviewComment?.index ?? ''}`,
     });
     uni.setStorageSync("auditBook", book);
 }
@@ -63,62 +63,70 @@ function getAuditCateNum(cate) {
     return auditList.filter((v) => v.sts == cate).length;
 }
 
+function getBookFirstLetter(bookName) {
+    if (!bookName) return "其他";
+
+    let firstChineseChar = null;
+    for (let i = 0; i < bookName.length; i++) {
+        const char = bookName.charAt(i);
+        if (/^[\u4E00-\u9FA5]$/.test(char)) {
+            firstChineseChar = char;
+            break;
+        }
+    }
+
+    let firstLetter = "";
+    if (firstChineseChar) {
+        const pinyin = toPinyin.chineseToPinYin(firstChineseChar);
+        firstLetter = toPinyin.chineseToInitials(pinyin);
+        if (!firstLetter && pinyin) {
+            firstLetter = pinyin.charAt(0).toUpperCase();
+        }
+    } else {
+        const char = bookName.charAt(0);
+        if (/^[A-Za-z]$/.test(char)) {
+            firstLetter = char.toUpperCase();
+        }
+    }
+
+    if (!firstLetter || !/^[A-Z]$/.test(firstLetter)) {
+        firstLetter = "其他";
+    }
+    return firstLetter;
+}
+
+function isBookReviewed(book) {
+    const sts = book.auditReviewComment?.sts;
+    return sts != null && sts !== 0 && sts !== "0";
+}
+
+function getReviewSts(book) {
+    return Number(book.auditReviewComment?.sts);
+}
+
 //格式化书籍列表
 const formatBookList = (list) => {
     const poorBooks = { title: "极差", list: [], backgroundColor: "#de868f", id: "poor" };
     const goodBooks = { title: "良好", list: [], backgroundColor: "#81b337", id: "good" };
     const otherBooks = [];
-    //获取所有的首字母
-    const allFirstLetter = [];
 
     const handleBookCategorization = (book) => {
-        let firstLetter;
-        // 找到第一个中文
-        let firstChineseChar = null;
-        for (let i = 0; i < book.bookName.length; i++) {
-            const char = book.bookName.charAt(i);
-            if (/^[\u4E00-\u9FA5]$/.test(char)) {
-                // 检查是否为中文
-                firstChineseChar = char;
-                break;
-            }
-        }
-
-        // 如果找到中文,使用其拼音首字母
-        if (firstChineseChar) {
-            firstLetter = toPinyin.chineseToInitials(toPinyin.chineseToPinYin(firstChineseChar));
-        } else {
-            // 如果没有找到中文,使用第一个字符
-            const char = book.bookName.charAt(0);
-            if (/^[A-Za-z]$/.test(char)) {
-                firstLetter = char.toUpperCase();
-            } else {
-                firstLetter = char;
-            }
-        }
+        const firstLetter = getBookFirstLetter(book.bookName);
 
         let bool = otherBooks.some((item) => item.title == firstLetter);
         if (!bool) {
             otherBooks.push({ id: firstLetter, title: firstLetter, list: [{ ...book }] });
-            allFirstLetter.push(firstLetter);
-            emit("get-all-firstLetter", allFirstLetter);
         } else {
             otherBooks.find((item) => item.title == firstLetter).list.push(book);
         }
     };
 
     list.forEach((book) => {
-        book.goodNum = list?.filter((v) => v.sts == 1).length || 0;
-        book.badNum = list?.filter((v) => v.sts == 3).length || 0;
-
-        // Check if book is fully audited (all items have been reviewed)
-        const totalAudited = list?.filter((v) => v.sts !== 0).length || 0;
-        const isFullyAudited = totalAudited === list.length;
-
-        if (isFullyAudited) {
-            if (book.auditReviewComment?.sts === 3) {
+        if (isBookReviewed(book)) {
+            const sts = getReviewSts(book);
+            if (sts === 3) {
                 poorBooks.list.push(book);
-            } else if (book.auditReviewComment?.sts === 1) {
+            } else if (sts === 1) {
                 goodBooks.list.push(book);
             } else {
                 handleBookCategorization(book);
@@ -143,6 +151,7 @@ watch(
         let poor = poorBooks.list.length > 0 ? poorBooks : {};
         let good = goodBooks.list.length > 0 ? goodBooks : {};
         formatList.value = [...otherBooks, poor, good];
+        emit("get-all-firstLetter", otherBooks.map((item) => item.id));
     },
     { immediate: true, deep: true }
 );

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/app-plus/app-service.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/app-plus/pages/index/audit/isbn-order.css


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/app-plus/pages/index/audit/review-order.css


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/app-plus/pages/index/audit/sender.css


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/app-plus/pages/index/detail/index.css


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/app-plus/pages/index/detail/review-detail.css


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/app-plus/pages/index/detail/user-orders.css


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/app-plus/pages/index/express/route-exception.css


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/app-plus/pages/index/offline/check-record.css


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/app-plus/pages/index/statistic/after-sale-result.css


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/app-plus/pages/index/statistic/audit.css


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/app-plus/pages/index/statistic/package.css


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/app-plus/pages/index/wms/order-query-list.css


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/app-plus/pages/my/page/audit-unfinished.css


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/app-plus/pages/order/mall/pending.css


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/app-plus/pages/order/recycle/pending.css


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/app-plus/pages/order/stat/receive-stat.css


Vissa filer visades inte eftersom för många filer har ändrats