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

feat(web-admin): pending storage-release ready checkbox filter

Replace QC-completed select with show-all checkbox; request readyForReviewOnly when unchecked.

Co-authored-by: Cursor <cursoragent@cursor.com>
zlwu 3 месяцев назад
Родитель
Сommit
63074c0032

+ 1 - 0
web-admin/src/api/storage-release-review.ts

@@ -146,6 +146,7 @@ export function fetchStorageReleaseReviewList(params?: {
   keyword?: string
   reviewPhase?: 'pending' | 'reviewed'
   qcWorkOrderCompleted?: boolean
+  readyForReviewOnly?: boolean
 }) {
   return request.get<PageList<StorageReleaseReview>>({
     url: '/web/admin/storage-release-reviews',

+ 50 - 45
web-admin/src/views/quality-inspection/storage-release-review/index.vue

@@ -26,15 +26,7 @@
 
       <div class="filter-block">
         <el-form :model="searchForm" class="filter-form" @submit.prevent>
-          <div
-            class="filter-grid"
-            :class="{ 'storage-release-filter-grid--5': activeTab === 'pending' }"
-            :style="
-              activeTab === 'pending'
-                ? { gridTemplateColumns: 'repeat(5, minmax(0, 1fr))' }
-                : undefined
-            "
-          >
+          <div class="filter-grid">
             <el-form-item label="关键词">
               <el-input
                 v-model="searchForm.keyword"
@@ -87,22 +79,20 @@
                 />
               </el-select>
             </el-form-item>
-            <el-form-item v-if="activeTab === 'pending'" label="质检工单是否完成">
-              <el-select
-                v-model="searchForm.qcWorkOrderCompleted"
-                placeholder="全部"
-                style="width: 100%"
-              >
-                <el-option
-                  v-for="item in qcWorkOrderCompletedOptions"
-                  :key="String(item.value)"
-                  :label="item.label"
-                  :value="item.value"
-                />
-              </el-select>
-            </el-form-item>
           </div>
           <div class="filter-actions-row">
+            <label
+              v-if="activeTab === 'pending'"
+              class="storage-release-ready-check"
+            >
+              <el-checkbox v-model="searchForm.showAllPending" />
+              <span class="storage-release-ready-check__copy">
+                <span class="storage-release-ready-check__title">展示全部待审核</span>
+                <span class="storage-release-ready-check__hint">
+                  默认不勾选:仅展示质检与生产工单均为完成的记录;勾选后展示全部。
+                </span>
+              </span>
+            </label>
             <div class="filter-actions-end">
               <el-button class="btn-ghost" @click="handleReset">
                 <el-icon><RefreshLeft /></el-icon>重置
@@ -410,19 +400,12 @@
     { value: 'yrk', label: '已入库' }
   ]
 
-  /** '' = 全部;'true'/'false' 避免 el-select 对 boolean 的歧义 */
-  const qcWorkOrderCompletedOptions = [
-    { value: 'true', label: '是' },
-    { value: 'false', label: '否' },
-    { value: '', label: '全部' }
-  ]
-
   const searchForm = reactive({
     receptionSource: '',
     reviewConclusion: '',
     storageStatus: '',
     keyword: '',
-    qcWorkOrderCompleted: 'true' as '' | 'true' | 'false'
+    showAllPending: false
   })
   const tableData = ref<StorageReleaseReview[]>([])
   const selectedRows = ref<StorageReleaseReview[]>([])
@@ -444,12 +427,8 @@
   async function loadData() {
     loading.value = true
     try {
-      const qcParam =
-        activeTab.value === 'pending' && searchForm.qcWorkOrderCompleted === 'true'
-          ? true
-          : activeTab.value === 'pending' && searchForm.qcWorkOrderCompleted === 'false'
-            ? false
-            : undefined
+      const readyOnly =
+        activeTab.value === 'pending' && !searchForm.showAllPending ? true : undefined
       const res = await fetchStorageReleaseReviewList({
         page: pagination.page,
         pageSize: pagination.pageSize,
@@ -458,7 +437,7 @@
         storageStatus: searchForm.storageStatus || undefined,
         keyword: searchForm.keyword || undefined,
         reviewPhase: activeTab.value,
-        qcWorkOrderCompleted: qcParam
+        readyForReviewOnly: readyOnly
       })
       tableData.value = res.list || []
       pagination.total = res.total ?? 0
@@ -473,7 +452,7 @@
     pagination.page = 1
     selectedRows.value = []
     if (name === 'pending') {
-      searchForm.qcWorkOrderCompleted = 'true'
+      searchForm.showAllPending = false
     }
     loadData()
   }
@@ -488,7 +467,7 @@
     searchForm.reviewConclusion = ''
     searchForm.storageStatus = ''
     searchForm.keyword = ''
-    searchForm.qcWorkOrderCompleted = 'true'
+    searchForm.showAllPending = false
     pagination.page = 1
     loadData()
   }
@@ -565,16 +544,42 @@
 </script>
 
 <style scoped lang="scss">
-  /* 待审核 5 列靠内联 style;仅极窄屏单列,避免 1100px 断点又变两行 */
   .filter-form :deep(.el-form-item) {
     margin-bottom: 0;
     min-width: 0;
   }
 
-  @media (max-width: 560px) {
-    .filter-grid.storage-release-filter-grid--5 {
-      grid-template-columns: 1fr !important;
-    }
+  .storage-release-ready-check {
+    display: inline-flex;
+    align-items: flex-start;
+    gap: 10px;
+    margin-right: auto;
+    max-width: 520px;
+    padding: 10px 12px;
+    border: 1px dashed #a7f3d0;
+    border-radius: 8px;
+    background: var(--primary-bg, #ecfdf5);
+    cursor: pointer;
+    user-select: none;
+  }
+
+  .storage-release-ready-check__copy {
+    display: flex;
+    flex-direction: column;
+    gap: 2px;
+  }
+
+  .storage-release-ready-check__title {
+    font-size: 13px;
+    font-weight: 600;
+    color: var(--text, #1e293b);
+    line-height: 1.4;
+  }
+
+  .storage-release-ready-check__hint {
+    font-size: 12px;
+    color: var(--text-muted, #64748b);
+    line-height: 1.45;
   }
 
   /* 操作列:查看 / 审核 / 样本入库 */