shish 20 часов назад
Родитель
Сommit
c6525752f7
2 измененных файлов с 134 добавлено и 91 удалено
  1. 66 43
      hdApp/src/admin/home/apply.vue
  2. 68 48
      hdApp/src/admin/home/components/mall-home-panel.vue

+ 66 - 43
hdApp/src/admin/home/apply.vue

@@ -4,6 +4,17 @@
 -->
 <template>
   <view class="app-content">
+    <!-- 有待审核才出现:点进待审核 Tab;宫格「退款记录」始终进全部 -->
+    <view v-if="pendingRefundCount > 0" class="refund-todo-wrap" @click="goPendingRefund">
+      <view class="refund-todo-row">
+        <view class="refund-todo-left">
+          <text class="refund-todo-title">售后待审核</text>
+          <text class="refund-todo-stat">有{{ pendingRefundCount }}笔待处理</text>
+        </view>
+        <text class="refund-todo-action">去处理</text>
+        <text class="refund-todo-arrow">›</text>
+      </view>
+    </view>
     <view class="apply-content_box">
       <view v-for="item in applyMenuList" :key="item.title" class="apply-list_box">
         <view class="section-header">
@@ -27,10 +38,6 @@
                 mode="aspectFit"
               />
               <view v-else class="icon-empty"></view>
-              <!-- 退款记录:有待审核时红角标提示数量 -->
-              <view v-if="menuBadgeCount(s) > 0" class="menu-badge">
-                {{ formatMenuBadge(menuBadgeCount(s)) }}
-              </view>
             </view>
             <view class="icon-text">{{ s.name }}</view>
           </view>
@@ -51,7 +58,7 @@ export default {
   components: { NotLogin },
   data() {
     return {
-      /** 售后待审核条数,供「退款记录」角标 */
+      /** 售后待审核条数,供应用页待办条;宫格入口不跟这个数跳转 */
       pendingRefundCount: 0,
       /** 应用页菜单分组(写死) */
       applyMenuList: [
@@ -71,8 +78,8 @@ export default {
             { name: '开单', icon: 'plant-billing', action: 'goItemKd', pf: 1 },
             { name: '快捷开单', icon: 'plant-quick-billing', action: 'goItemKjKd', pf: 1 },
             { name: '退款', icon: 'order-filled', url: '/admin/custom/selectCustom?style=1&refund=1', pf: 1 },
-            // badge=pendingRefund:角标挂待审核数;进列表默认待审核 Tab
-            { name: '退款记录', icon: 'order-filled', url: '/admin/billing/freeRefundList?tab=pending', badge: 'pendingRefund', pf: 1 },
+            // 稳定入口:始终进全部列表;待审核走页顶待办条
+            { name: '退款记录', icon: 'order-filled', url: '/admin/billing/freeRefundList', pf: 1 },
             { name: '花材排序', icon: 'sort-filled', url: '/admin/itemClass/sort', pf: 1 },
             { name: '改价', icon: 'change-price-filled', url: '/admin/changePrice/list2', pf: 1 },
             { name: '报损', icon: 'breakage', url: '/admin/breakage/list', pf: 1 },
@@ -153,30 +160,15 @@ export default {
     ...mapGetters({ loginInfo: 'getLoginInfo', myShopInfo: 'getMyShopInfo' })
   },
   onShow() {
-    // 从售后详情返回时刷新待审核角标
+    // 从售后详情返回时刷新待办条数量
     this.loadPendingRefundCount()
   },
   methods: {
     iconSrc,
     init() {},
     /**
-     * 菜单角标数量:目前仅退款记录挂待审核数
-     * @param {Object} item 菜单项
-     */
-    menuBadgeCount(item) {
-      if (item && item.badge === 'pendingRefund') {
-        return Number(this.pendingRefundCount) || 0
-      }
-      return 0
-    },
-    /** 角标展示:超过 99 显示 99+ */
-    formatMenuBadge(n) {
-      const num = Number(n) || 0
-      return num > 99 ? '99+' : String(num)
-    },
-    /**
-     * 拉取待审核售后条数,用于「退款记录」入口角标。
-     * 参数与 freeRefundList 待审核 Tab 一致:近30天 + status=0,避免角标与列表对不上。
+     * 拉取待审核售后条数,用于应用页待办条。
+     * 参数与 freeRefundList 待审核 Tab 一致:近30天 + status=0,避免条上数量与列表对不上。
      */
     loadPendingRefundCount() {
       refundList({
@@ -201,6 +193,10 @@ export default {
     goItemKd() {
       this.$util.pageTo({ url: '/admin/custom/selectCustom' })
     },
+    /** 待办条:只进待审核,和宫格「退款记录」进全部区分开 */
+    goPendingRefund() {
+      this.$util.pageTo({ url: '/admin/billing/freeRefundList?tab=pending' })
+    },
     /** 应用菜单跳转 */
     goPage(item) {
       if (item.action && typeof this[item.action] === 'function') {
@@ -228,6 +224,51 @@ export default {
   padding-bottom: 28upx;
 }
 
+/* 应用页顶待办条:有待审核才出现,点进待审核列表 */
+.refund-todo-wrap {
+  margin: 20upx 12upx 0;
+  border-radius: 18upx;
+  overflow: hidden;
+  box-shadow: 0 8upx 26upx rgba(20, 48, 36, 0.06);
+}
+.refund-todo-row {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  padding: 28upx 24upx;
+  background: #fff7f0;
+}
+.refund-todo-left {
+  display: flex;
+  align-items: center;
+  flex: 1;
+  min-width: 0;
+  font-size: 32upx;
+  color: #333;
+}
+.refund-todo-title {
+  font-weight: bold;
+  color: #d4380d;
+}
+.refund-todo-stat {
+  color: #d4380d;
+  margin-left: 20upx;
+  font-size: 30upx;
+}
+.refund-todo-action {
+  flex-shrink: 0;
+  font-size: 28upx;
+  color: #d4380d;
+  font-weight: 700;
+  margin-right: 8upx;
+}
+.refund-todo-arrow {
+  flex-shrink: 0;
+  font-size: 40upx;
+  color: #d4380d;
+  line-height: 1;
+}
+
 .apply-content_box {
   padding-top: 8upx;
   padding-bottom: 20upx;
@@ -312,24 +353,6 @@ export default {
             border-radius: 16upx;
             background: rgba(9, 197, 103, 0.12);
           }
-
-          /* 菜单角标:右上角红底白字 */
-          .menu-badge {
-            position: absolute;
-            top: -8upx;
-            right: -10upx;
-            min-width: 32upx;
-            height: 32upx;
-            padding: 0 8upx;
-            box-sizing: border-box;
-            border-radius: 16upx;
-            background: #ff2842;
-            color: #fff;
-            font-size: 20upx;
-            font-weight: bold;
-            line-height: 32upx;
-            text-align: center;
-          }
         }
 
         .icon-text {

+ 68 - 48
hdApp/src/admin/home/components/mall-home-panel.vue

@@ -83,10 +83,6 @@
                 :src="iconSrc(item.icon)"
                 mode="aspectFit"
               />
-              <!-- 菜单角标(如退款待审核) -->
-              <view v-if="menuBadgeCount(item) > 0" class="menu-badge">
-                {{ formatMenuBadge(menuBadgeCount(item)) }}
-              </view>
             </view>
             <view class="home-menu-text">{{ item.name }}</view>
           </view>
@@ -106,6 +102,18 @@
         </view>
       </view>
 
+      <!-- 有待审核才出现:点进待审核 Tab;宫格「退款记录」始终进全部,避免同一入口语义漂移 -->
+      <view v-if="pendingRefundCount > 0" class="module-com refund-todo-wrap" @click="goPendingRefund">
+        <view class="refund-todo-row">
+          <view class="refund-todo-left">
+            <text class="refund-todo-title">售后待审核</text>
+            <text class="refund-todo-stat">有{{ pendingRefundCount }}笔待处理</text>
+          </view>
+          <text class="refund-todo-action">去处理</text>
+          <text class="refund-todo-arrow">›</text>
+        </view>
+      </view>
+
       <view class="home-card">
         <view class="home-menu-grid">
           <view class="home-menu-item" v-for="item in bizMenuList" :key="item.name" @click="handleMenuTap(item)">
@@ -116,10 +124,6 @@
                 :src="iconSrc(item.icon)"
                 mode="aspectFit"
               />
-              <!-- 退款记录:有待审核时红角标提示数量 -->
-              <view v-if="menuBadgeCount(item) > 0" class="menu-badge">
-                {{ formatMenuBadge(menuBadgeCount(item)) }}
-              </view>
             </view>
             <view class="home-menu-text">{{ item.name }}</view>
           </view>
@@ -176,7 +180,7 @@ import { refundList } from '@/api/refund'
 /**
  * 工作台首页面板
  * 用途:店铺首页快捷操作 / 业务菜单 / 更多功能;菜单项直接写死,不走配置文件与本地缓存。
- * 含「退款记录」待审核角标,与应用页 apply 行为一致。
+ * 含售后待审核待办条(有数才出现),与应用页 apply 行为一致。
  */
 export default {
   name: "MallHomePanel",
@@ -208,7 +212,7 @@ export default {
       unReadMsgNum: 0,
       currentDate: '',
       birthdaySummary: { today: 0, tomorrow: 0, week: 0 },
-      /** 售后待审核条数,供「退款记录」角标 */
+      /** 售后待审核条数,供首页待办条;宫格入口不跟这个数跳转 */
       pendingRefundCount: 0,
       // 快捷操作(写死)
       quickMenuList: [
@@ -228,8 +232,8 @@ export default {
         { name: '首页配置', icon: 'settings-filled', url: '/admin/homePageConfig/index', pf: 1 },
         { name: '公告', icon: 'notice', url: '/admin/shopNotice/list', pf: 1 },
         { name: '退款', icon: 'order-filled', url: '/admin/custom/selectCustom?style=1&refund=1', pf: 1 },
-        // badge=pendingRefund:角标挂待审核数;进列表默认待审核 Tab
-        { name: '退款记录', icon: 'order-filled', url: '/admin/billing/freeRefundList?tab=pending', badge: 'pendingRefund', pf: 1 },
+        // 稳定入口:始终进全部列表;待审核走上方待办条
+        { name: '退款记录', icon: 'order-filled', url: '/admin/billing/freeRefundList', pf: 1 },
         { name: '拆散', icon: 'disassemble', url: '/admin/part/list', pf: 1 },
         { name: '改价', icon: 'change-price-filled', url: '/admin/changePrice/list2', pf: 1 },
         { name: '报损', icon: 'breakage', url: '/admin/breakage/list', pf: 1 },
@@ -367,28 +371,13 @@ export default {
         }
       })
       this.getUnReadMsgCount()
-      // 与聊天未读一并刷新:退款待审核角标
+      // 与聊天未读一并刷新:售后待审核待办条
       this.loadPendingRefundCount()
       return Promise.all([p1, p2, p3])
     },
     /**
-     * 菜单角标数量:目前仅退款记录挂待审核数
-     * @param {Object} item 菜单项
-     */
-    menuBadgeCount(item) {
-      if (item && item.badge === 'pendingRefund') {
-        return Number(this.pendingRefundCount) || 0
-      }
-      return 0
-    },
-    /** 角标展示:超过 99 显示 99+ */
-    formatMenuBadge(n) {
-      const num = Number(n) || 0
-      return num > 99 ? '99+' : String(num)
-    },
-    /**
-     * 拉取待审核售后条数,用于「退款记录」入口角标。
-     * 参数与 freeRefundList 待审核 Tab 一致:近30天 + status=0,避免角标与列表对不上。
+     * 拉取待审核售后条数,用于首页待办条。
+     * 参数与 freeRefundList 待审核 Tab 一致:近30天 + status=0,避免条上数量与列表对不上。
      */
     loadPendingRefundCount() {
       refundList({
@@ -425,6 +414,10 @@ export default {
     goBirthdayBoard() {
       this.$util.pageTo({ url: '/admin/birthday/board' })
     },
+    /** 待办条:只进待审核,和宫格「退款记录」进全部区分开 */
+    goPendingRefund() {
+      this.$util.pageTo({ url: '/admin/billing/freeRefundList?tab=pending' })
+    },
     getUnReadMsgCount(){
       unReadMsgCount().then(res=>{
         if(res.code == 1){
@@ -732,6 +725,51 @@ export default {
   line-height: 1;
 }
 
+/* 售后待办条:有待审核才渲染,样式对齐生日条,底色偏警示以免漏看 */
+.refund-todo-wrap {
+  margin: 24upx 24upx 0;
+  border-radius: 18upx;
+  overflow: hidden;
+  box-shadow: 0 8upx 26upx rgba(20, 48, 36, 0.06);
+}
+.refund-todo-row {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  padding: 28upx 24upx;
+  background: #fff7f0;
+}
+.refund-todo-left {
+  display: flex;
+  align-items: center;
+  flex: 1;
+  min-width: 0;
+  font-size: 32upx;
+  color: #333;
+}
+.refund-todo-title {
+  font-weight: bold;
+  color: #d4380d;
+}
+.refund-todo-stat {
+  color: #d4380d;
+  margin-left: 20upx;
+  font-size: 30upx;
+}
+.refund-todo-action {
+  flex-shrink: 0;
+  font-size: 28upx;
+  color: #d4380d;
+  font-weight: 700;
+  margin-right: 8upx;
+}
+.refund-todo-arrow {
+  flex-shrink: 0;
+  font-size: 40upx;
+  color: #d4380d;
+  line-height: 1;
+}
+
 .news-wrap {
   overflow: hidden;
   margin: 24upx 24upx 0;
@@ -855,24 +893,6 @@ export default {
   line-height: 0;
 }
 
-/* 菜单角标:右上角红底白字(与 apply 页一致) */
-.menu-badge {
-  position: absolute;
-  top: -8upx;
-  right: -10upx;
-  min-width: 32upx;
-  height: 32upx;
-  padding: 0 8upx;
-  box-sizing: border-box;
-  border-radius: 16upx;
-  background: #ff2842;
-  color: #fff;
-  font-size: 20upx;
-  font-weight: bold;
-  line-height: 32upx;
-  text-align: center;
-}
-
 .quick-menu-icon-img,
 .home-menu-icon-img {
   display: block;