Browse Source

修改bug

695593266@qq.com 5 days ago
parent
commit
3d1b5e9ef1

+ 228 - 104
src/views/home/index.vue

@@ -3,8 +3,8 @@
     <div class="screen-shell">
       <div class="screen-toolbar">
         <div class="screen-title">
-          <span>MES生产运营驾驶舱</span>
-          <em>Manufacturing Execution Dashboard</em>
+          <span>首页</span>
+          <!-- <em>Manufacturing Execution Dashboard</em> -->
         </div>
         <div class="screen-filters">
           <el-radio-group
@@ -408,9 +408,16 @@
     box-sizing: border-box;
     overflow: hidden;
     color: #d9f7ff;
-    background:
-      linear-gradient(90deg, rgba(56, 189, 248, 0.11) 0 1px, transparent 1px 100%),
-      linear-gradient(180deg, rgba(56, 189, 248, 0.08) 0 1px, transparent 1px 100%),
+    background: linear-gradient(
+        90deg,
+        rgba(56, 189, 248, 0.11) 0 1px,
+        transparent 1px 100%
+      ),
+      linear-gradient(
+        180deg,
+        rgba(56, 189, 248, 0.08) 0 1px,
+        transparent 1px 100%
+      ),
       linear-gradient(118deg, rgba(13, 148, 136, 0.1) 0%, transparent 34%),
       linear-gradient(242deg, rgba(14, 165, 233, 0.08) 0%, transparent 36%),
       linear-gradient(180deg, #061422 0%, #06101d 46%, #030914 100%);
@@ -424,11 +431,24 @@
       position: absolute;
       inset: 0;
       pointer-events: none;
-      background-image:
-        linear-gradient(115deg, transparent 0 42%, rgba(103, 232, 249, 0.08) 42% 42.4%, transparent 42.4% 100%),
-        linear-gradient(245deg, transparent 0 58%, rgba(16, 185, 129, 0.06) 58% 58.4%, transparent 58.4% 100%);
+      background-image: linear-gradient(
+          115deg,
+          transparent 0 42%,
+          rgba(103, 232, 249, 0.08) 42% 42.4%,
+          transparent 42.4% 100%
+        ),
+        linear-gradient(
+          245deg,
+          transparent 0 58%,
+          rgba(16, 185, 129, 0.06) 58% 58.4%,
+          transparent 58.4% 100%
+        );
       background-size: 420px 220px, 460px 240px;
-      mask-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.9), transparent 94%);
+      mask-image: linear-gradient(
+        to bottom,
+        rgba(0, 0, 0, 0.9),
+        transparent 94%
+      );
     }
 
     &::after {
@@ -465,7 +485,12 @@
       right: 20px;
       height: 1px;
       pointer-events: none;
-      background: linear-gradient(90deg, transparent, rgba(103, 232, 249, 0.42), transparent);
+      background: linear-gradient(
+        90deg,
+        transparent,
+        rgba(103, 232, 249, 0.42),
+        transparent
+      );
     }
 
     &::before {
@@ -488,14 +513,16 @@
     padding: 14px 22px;
     border: 1px solid rgba(103, 232, 249, 0.3);
     border-radius: 7px;
-    background:
-      linear-gradient(90deg, rgba(8, 47, 73, 0.84), rgba(5, 15, 28, 0.7) 58%, rgba(7, 30, 48, 0.82)),
+    background: linear-gradient(
+        90deg,
+        rgba(8, 47, 73, 0.84),
+        rgba(5, 15, 28, 0.7) 58%,
+        rgba(7, 30, 48, 0.82)
+      ),
       linear-gradient(180deg, rgba(103, 232, 249, 0.13), transparent 62%);
-    box-shadow:
-      inset 0 1px 0 rgba(236, 254, 255, 0.16),
+    box-shadow: inset 0 1px 0 rgba(236, 254, 255, 0.16),
       inset 0 -1px 0 rgba(56, 189, 248, 0.22),
-      inset 0 0 34px rgba(14, 165, 233, 0.13),
-      0 16px 32px rgba(0, 0, 0, 0.26);
+      inset 0 0 34px rgba(14, 165, 233, 0.13), 0 16px 32px rgba(0, 0, 0, 0.26);
 
     &::before {
       content: '';
@@ -504,7 +531,13 @@
       right: 18px;
       bottom: 0;
       height: 2px;
-      background: linear-gradient(90deg, transparent, rgba(103, 232, 249, 0.72), rgba(16, 185, 129, 0.42), transparent);
+      background: linear-gradient(
+        90deg,
+        transparent,
+        rgba(103, 232, 249, 0.72),
+        rgba(16, 185, 129, 0.42),
+        transparent
+      );
       opacity: 0.78;
     }
 
@@ -515,9 +548,16 @@
       top: 0;
       width: 36%;
       height: 100%;
-      background:
-        linear-gradient(100deg, rgba(103, 232, 249, 0.16), transparent 58%),
-        repeating-linear-gradient(90deg, rgba(125, 211, 252, 0.08) 0 1px, transparent 1px 22px);
+      background: linear-gradient(
+          100deg,
+          rgba(103, 232, 249, 0.16),
+          transparent 58%
+        ),
+        repeating-linear-gradient(
+          90deg,
+          rgba(125, 211, 252, 0.08) 0 1px,
+          transparent 1px 22px
+        );
       pointer-events: none;
     }
   }
@@ -538,8 +578,7 @@
       font-weight: 700;
       letter-spacing: 0;
       color: #f5fdff;
-      text-shadow:
-        0 0 14px rgba(34, 211, 238, 0.54),
+      text-shadow: 0 0 14px rgba(34, 211, 238, 0.54),
         0 0 28px rgba(14, 165, 233, 0.22);
 
       &::before {
@@ -547,9 +586,13 @@
         width: 8px;
         height: 32px;
         border-radius: 1px;
-        background: linear-gradient(180deg, #67e8f9 0%, #22d3ee 48%, #0ea5e9 100%);
-        box-shadow:
-          0 0 12px rgba(34, 211, 238, 0.9),
+        background: linear-gradient(
+          180deg,
+          #67e8f9 0%,
+          #22d3ee 48%,
+          #0ea5e9 100%
+        );
+        box-shadow: 0 0 12px rgba(34, 211, 238, 0.9),
           10px 0 24px rgba(14, 165, 233, 0.22);
       }
     }
@@ -574,13 +617,18 @@
     padding: 5px;
     border: 1px solid rgba(56, 189, 248, 0.26);
     border-radius: 7px;
-    background:
-      linear-gradient(180deg, rgba(6, 18, 32, 0.82), rgba(2, 8, 17, 0.8)),
-      repeating-linear-gradient(90deg, rgba(56, 189, 248, 0.035) 0 1px, transparent 1px 26px);
-    box-shadow:
-      inset 0 1px 0 rgba(165, 243, 252, 0.1),
-      inset 0 0 18px rgba(14, 165, 233, 0.12),
-      0 0 20px rgba(14, 165, 233, 0.1);
+    background: linear-gradient(
+        180deg,
+        rgba(6, 18, 32, 0.82),
+        rgba(2, 8, 17, 0.8)
+      ),
+      repeating-linear-gradient(
+        90deg,
+        rgba(56, 189, 248, 0.035) 0 1px,
+        transparent 1px 26px
+      );
+    box-shadow: inset 0 1px 0 rgba(165, 243, 252, 0.1),
+      inset 0 0 18px rgba(14, 165, 233, 0.12), 0 0 20px rgba(14, 165, 233, 0.1);
   }
 
   .mode-tabs {
@@ -599,8 +647,7 @@
       color: #06131f;
       border-color: #22d3ee;
       background: linear-gradient(135deg, #67e8f9, #38bdf8);
-      box-shadow:
-        inset 0 1px 0 rgba(236, 254, 255, 0.36),
+      box-shadow: inset 0 1px 0 rgba(236, 254, 255, 0.36),
         0 0 18px rgba(56, 189, 248, 0.42);
     }
   }
@@ -632,8 +679,7 @@
     color: #e0f7ff;
     border-color: rgba(56, 189, 248, 0.32);
     background: rgba(3, 12, 24, 0.86);
-    box-shadow:
-      inset 0 1px 0 rgba(125, 211, 252, 0.08),
+    box-shadow: inset 0 1px 0 rgba(125, 211, 252, 0.08),
       inset 0 0 12px rgba(14, 165, 233, 0.08);
   }
 
@@ -693,8 +739,11 @@
     border: 1px solid rgba(103, 232, 249, 0.34);
     border-radius: 7px;
     color: #7dd3fc;
-    background:
-      linear-gradient(150deg, rgba(14, 116, 144, 0.34), rgba(5, 13, 25, 0.94) 62%),
+    background: linear-gradient(
+        150deg,
+        rgba(14, 116, 144, 0.34),
+        rgba(5, 13, 25, 0.94) 62%
+      ),
       linear-gradient(90deg, rgba(34, 211, 238, 0.14), transparent 55%),
       repeating-linear-gradient(
         135deg,
@@ -703,12 +752,11 @@
         transparent 1px,
         transparent 26px
       );
-    box-shadow:
-      inset 0 1px 0 rgba(236, 254, 255, 0.12),
+    box-shadow: inset 0 1px 0 rgba(236, 254, 255, 0.12),
       inset 0 -1px 0 rgba(34, 211, 238, 0.12),
-      inset 0 0 28px rgba(34, 211, 238, 0.08),
-      0 14px 26px rgba(0, 0, 0, 0.24);
-    transition: border-color 0.2s ease, box-shadow 0.2s ease, transform 0.2s ease;
+      inset 0 0 28px rgba(34, 211, 238, 0.08), 0 14px 26px rgba(0, 0, 0, 0.24);
+    transition: border-color 0.2s ease, box-shadow 0.2s ease,
+      transform 0.2s ease;
 
     &::before,
     &::after {
@@ -719,10 +767,16 @@
 
     &::before {
       inset: 0;
-      background:
-        linear-gradient(90deg, rgba(103, 232, 249, 0.9), transparent 44%) left top / 100% 3px no-repeat,
-        linear-gradient(180deg, rgba(103, 232, 249, 0.52), transparent 50%) left top / 1px 100% no-repeat,
-        linear-gradient(90deg, rgba(103, 232, 249, 0.16), transparent 50%) left bottom / 100% 1px no-repeat;
+      background: linear-gradient(
+            90deg,
+            rgba(103, 232, 249, 0.9),
+            transparent 44%
+          )
+          left top / 100% 3px no-repeat,
+        linear-gradient(180deg, rgba(103, 232, 249, 0.52), transparent 50%) left
+          top / 1px 100% no-repeat,
+        linear-gradient(90deg, rgba(103, 232, 249, 0.16), transparent 50%) left
+          bottom / 100% 1px no-repeat;
       opacity: 0.82;
     }
 
@@ -733,17 +787,18 @@
       bottom: -36px;
       border: 1px solid rgba(125, 211, 252, 0.22);
       transform: rotate(45deg);
-      background:
-        linear-gradient(135deg, rgba(14, 165, 233, 0.18), rgba(13, 148, 136, 0.04));
+      background: linear-gradient(
+        135deg,
+        rgba(14, 165, 233, 0.18),
+        rgba(13, 148, 136, 0.04)
+      );
     }
   }
 
   .metric-card:hover {
     border-color: rgba(103, 232, 249, 0.62);
-    box-shadow:
-      inset 0 1px 0 rgba(165, 243, 252, 0.16),
-      inset 0 0 34px rgba(34, 211, 238, 0.13),
-      0 16px 32px rgba(0, 0, 0, 0.3),
+    box-shadow: inset 0 1px 0 rgba(165, 243, 252, 0.16),
+      inset 0 0 34px rgba(34, 211, 238, 0.13), 0 16px 32px rgba(0, 0, 0, 0.3),
       0 0 22px rgba(14, 165, 233, 0.18);
     transform: translateY(-1px);
   }
@@ -751,8 +806,11 @@
   .metric-card-3 {
     color: #fb7185 !important;
     border-color: rgba(251, 113, 133, 0.42);
-    background:
-      linear-gradient(150deg, rgba(190, 18, 60, 0.28), rgba(5, 13, 25, 0.94) 62%),
+    background: linear-gradient(
+        150deg,
+        rgba(190, 18, 60, 0.28),
+        rgba(5, 13, 25, 0.94) 62%
+      ),
       linear-gradient(90deg, rgba(251, 113, 133, 0.15), transparent 55%);
 
     &::before {
@@ -762,8 +820,7 @@
 
   .metric-card-3 .metric-value {
     color: #ff7890;
-    text-shadow:
-      0 0 10px rgba(251, 113, 133, 0.85),
+    text-shadow: 0 0 10px rgba(251, 113, 133, 0.85),
       0 0 22px rgba(251, 113, 133, 0.38);
   }
 
@@ -776,11 +833,13 @@
     justify-content: center;
     border: 1px solid rgba(125, 211, 252, 0.12);
     border-radius: 7px;
-    background:
-      linear-gradient(135deg, rgba(10, 28, 46, 0.92), rgba(14, 116, 144, 0.2)),
+    background: linear-gradient(
+        135deg,
+        rgba(10, 28, 46, 0.92),
+        rgba(14, 116, 144, 0.2)
+      ),
       linear-gradient(180deg, rgba(103, 232, 249, 0.08), transparent);
-    box-shadow:
-      inset 0 0 18px rgba(103, 232, 249, 0.14),
+    box-shadow: inset 0 0 18px rgba(103, 232, 249, 0.14),
       0 0 18px rgba(14, 165, 233, 0.14);
 
     img {
@@ -846,8 +905,7 @@
     overflow: visible;
     text-overflow: clip;
     font-variant-numeric: tabular-nums;
-    text-shadow:
-      0 0 10px rgba(56, 189, 248, 0.85),
+    text-shadow: 0 0 10px rgba(56, 189, 248, 0.85),
       0 0 22px rgba(56, 189, 248, 0.35);
 
     span {
@@ -864,15 +922,20 @@
     border: 1px solid rgba(56, 189, 248, 0.28);
     border-radius: 7px;
     color: #d9f7ff;
-    background:
-      linear-gradient(180deg, rgba(10, 34, 56, 0.9), rgba(4, 13, 25, 0.94)),
+    background: linear-gradient(
+        180deg,
+        rgba(10, 34, 56, 0.9),
+        rgba(4, 13, 25, 0.94)
+      ),
       linear-gradient(135deg, rgba(34, 211, 238, 0.1), transparent 42%),
-      repeating-linear-gradient(90deg, rgba(125, 211, 252, 0.02) 0 1px, transparent 1px 52px);
-    box-shadow:
-      inset 0 1px 0 rgba(236, 254, 255, 0.1),
+      repeating-linear-gradient(
+        90deg,
+        rgba(125, 211, 252, 0.02) 0 1px,
+        transparent 1px 52px
+      );
+    box-shadow: inset 0 1px 0 rgba(236, 254, 255, 0.1),
       inset 0 -1px 0 rgba(56, 189, 248, 0.12),
-      inset 0 0 28px rgba(14, 165, 233, 0.09),
-      0 16px 34px rgba(0, 0, 0, 0.26);
+      inset 0 0 28px rgba(14, 165, 233, 0.09), 0 16px 34px rgba(0, 0, 0, 0.26);
 
     &::before {
       content: '';
@@ -880,11 +943,18 @@
       inset: 0;
       pointer-events: none;
       border-radius: inherit;
-      background:
-        linear-gradient(90deg, rgba(103, 232, 249, 0.72), transparent 88px) left top / 148px 1px no-repeat,
-        linear-gradient(180deg, rgba(103, 232, 249, 0.52), transparent 64px) left top / 1px 100px no-repeat,
-        linear-gradient(270deg, rgba(103, 232, 249, 0.46), transparent 88px) right bottom / 148px 1px no-repeat,
-        linear-gradient(0deg, rgba(103, 232, 249, 0.34), transparent 64px) right bottom / 1px 100px no-repeat;
+      background: linear-gradient(
+            90deg,
+            rgba(103, 232, 249, 0.72),
+            transparent 88px
+          )
+          left top / 148px 1px no-repeat,
+        linear-gradient(180deg, rgba(103, 232, 249, 0.52), transparent 64px)
+          left top / 1px 100px no-repeat,
+        linear-gradient(270deg, rgba(103, 232, 249, 0.46), transparent 88px)
+          right bottom / 148px 1px no-repeat,
+        linear-gradient(0deg, rgba(103, 232, 249, 0.34), transparent 64px) right
+          bottom / 1px 100px no-repeat;
       opacity: 0.85;
     }
 
@@ -896,7 +966,12 @@
       bottom: 0;
       height: 1px;
       pointer-events: none;
-      background: linear-gradient(90deg, transparent, rgba(34, 211, 238, 0.62), transparent);
+      background: linear-gradient(
+        90deg,
+        transparent,
+        rgba(34, 211, 238, 0.62),
+        transparent
+      );
       opacity: 0.6;
     }
 
@@ -905,8 +980,7 @@
       z-index: 1;
       padding: 12px 18px;
       border-bottom: 1px solid rgba(56, 189, 248, 0.18);
-      background:
-        linear-gradient(90deg, rgba(8, 47, 73, 0.58), transparent 68%),
+      background: linear-gradient(90deg, rgba(8, 47, 73, 0.58), transparent 68%),
         linear-gradient(180deg, rgba(125, 211, 252, 0.06), transparent);
     }
 
@@ -915,8 +989,10 @@
       z-index: 1;
       height: calc(100% - 48px);
       padding: 12px 14px 14px;
-      background:
-        linear-gradient(rgba(125, 211, 252, 0.022) 1px, transparent 1px),
+      background: linear-gradient(
+          rgba(125, 211, 252, 0.022) 1px,
+          transparent 1px
+        ),
         linear-gradient(90deg, rgba(125, 211, 252, 0.022) 1px, transparent 1px);
       background-size: 30px 30px;
     }
@@ -955,7 +1031,12 @@
       content: '';
       width: 96px;
       height: 1px;
-      background: linear-gradient(90deg, rgba(103, 232, 249, 0.86), rgba(16, 185, 129, 0.3), transparent);
+      background: linear-gradient(
+        90deg,
+        rgba(103, 232, 249, 0.86),
+        rgba(16, 185, 129, 0.3),
+        transparent
+      );
       opacity: 0.7;
     }
   }
@@ -972,9 +1053,16 @@
 
   .chart-panel {
     :deep(.el-card__body) {
-      background:
-        linear-gradient(180deg, rgba(6, 21, 38, 0.18), rgba(3, 11, 22, 0.34)),
-        repeating-linear-gradient(90deg, rgba(56, 189, 248, 0.026) 0 1px, transparent 1px 78px),
+      background: linear-gradient(
+          180deg,
+          rgba(6, 21, 38, 0.18),
+          rgba(3, 11, 22, 0.34)
+        ),
+        repeating-linear-gradient(
+          90deg,
+          rgba(56, 189, 248, 0.026) 0 1px,
+          transparent 1px 78px
+        ),
         linear-gradient(rgba(125, 211, 252, 0.022) 1px, transparent 1px),
         linear-gradient(90deg, rgba(125, 211, 252, 0.022) 1px, transparent 1px);
       background-size: auto, auto, 30px 30px, 30px 30px;
@@ -983,9 +1071,16 @@
 
   .pie-panel {
     :deep(.el-card__body) {
-      background:
-        linear-gradient(180deg, rgba(6, 21, 38, 0.2), rgba(3, 11, 22, 0.36)),
-        repeating-linear-gradient(135deg, rgba(56, 189, 248, 0.028) 0 1px, transparent 1px 34px),
+      background: linear-gradient(
+          180deg,
+          rgba(6, 21, 38, 0.2),
+          rgba(3, 11, 22, 0.36)
+        ),
+        repeating-linear-gradient(
+          135deg,
+          rgba(56, 189, 248, 0.028) 0 1px,
+          transparent 1px 34px
+        ),
         linear-gradient(rgba(125, 211, 252, 0.022) 1px, transparent 1px),
         linear-gradient(90deg, rgba(125, 211, 252, 0.022) 1px, transparent 1px);
       background-size: auto, auto, 30px 30px, 30px 30px;
@@ -995,8 +1090,11 @@
   .table-panel {
     :deep(.el-card__body) {
       padding: 12px 14px 14px;
-      background:
-        linear-gradient(180deg, rgba(5, 16, 30, 0.12), rgba(5, 16, 30, 0.34)),
+      background: linear-gradient(
+          180deg,
+          rgba(5, 16, 30, 0.12),
+          rgba(5, 16, 30, 0.34)
+        ),
         repeating-linear-gradient(
           90deg,
           rgba(56, 189, 248, 0.02) 0,
@@ -1009,8 +1107,11 @@
     :deep(.ele-pro-table) {
       height: 100%;
       color: #dbeafe;
-      background:
-        linear-gradient(180deg, rgba(6, 20, 36, 0.86), rgba(3, 11, 22, 0.92)),
+      background: linear-gradient(
+          180deg,
+          rgba(6, 20, 36, 0.86),
+          rgba(3, 11, 22, 0.92)
+        ),
         linear-gradient(90deg, rgba(56, 189, 248, 0.04), transparent);
     }
 
@@ -1027,8 +1128,11 @@
       overflow: hidden;
       font-size: 12px;
       color: #dbeafe;
-      background:
-        linear-gradient(180deg, rgba(6, 20, 36, 0.88), rgba(3, 11, 22, 0.94)),
+      background: linear-gradient(
+          180deg,
+          rgba(6, 20, 36, 0.88),
+          rgba(3, 11, 22, 0.94)
+        ),
         repeating-linear-gradient(
           90deg,
           rgba(56, 189, 248, 0.022) 0,
@@ -1037,8 +1141,7 @@
           transparent 72px
         );
       border: 1px solid rgba(125, 211, 252, 0.24);
-      box-shadow:
-        inset 0 0 18px rgba(14, 165, 233, 0.08),
+      box-shadow: inset 0 0 18px rgba(14, 165, 233, 0.08),
         0 0 18px rgba(14, 165, 233, 0.1);
     }
 
@@ -1049,13 +1152,20 @@
     }
 
     :deep(.el-table__header-wrapper) {
-      background: linear-gradient(180deg, rgba(13, 95, 117, 0.78), rgba(8, 47, 73, 0.72));
+      background: linear-gradient(
+        180deg,
+        rgba(13, 95, 117, 0.78),
+        rgba(8, 47, 73, 0.72)
+      );
     }
 
     :deep(.el-table__empty-block) {
       min-height: 214px;
-      background:
-        radial-gradient(circle at 50% 42%, rgba(34, 211, 238, 0.12), transparent 30%),
+      background: radial-gradient(
+          circle at 50% 42%,
+          rgba(34, 211, 238, 0.12),
+          transparent 30%
+        ),
         linear-gradient(180deg, rgba(6, 20, 36, 0.88), rgba(3, 11, 22, 0.96)) !important;
     }
 
@@ -1070,8 +1180,11 @@
     }
 
     :deep(.el-loading-mask) {
-      background:
-        radial-gradient(circle at 50% 42%, rgba(34, 211, 238, 0.16), transparent 28%),
+      background: radial-gradient(
+          circle at 50% 42%,
+          rgba(34, 211, 238, 0.16),
+          transparent 28%
+        ),
         linear-gradient(180deg, rgba(5, 17, 31, 0.94), rgba(2, 8, 17, 0.96)) !important;
       backdrop-filter: blur(1px);
     }
@@ -1099,7 +1212,11 @@
     :deep(.el-table th) {
       height: 36px;
       color: #c7fbff;
-      background: linear-gradient(180deg, rgba(14, 116, 144, 0.62), rgba(8, 47, 73, 0.78)) !important;
+      background: linear-gradient(
+        180deg,
+        rgba(14, 116, 144, 0.62),
+        rgba(8, 47, 73, 0.78)
+      ) !important;
       border-color: rgba(56, 189, 248, 0.22);
       text-shadow: 0 0 10px rgba(103, 232, 249, 0.34);
     }
@@ -1125,14 +1242,21 @@
     }
 
     :deep(.el-table--enable-row-hover .el-table__body tr:hover > td),
-    :deep(.el-table--enable-row-hover .el-table__body tr:hover > td.el-table__cell),
+    :deep(
+        .el-table--enable-row-hover .el-table__body tr:hover > td.el-table__cell
+      ),
     :deep(.el-table__body tr.hover-row > td),
     :deep(.el-table__body tr.hover-row > td.el-table__cell),
     :deep(.el-table__body tr.current-row > td),
     :deep(.el-table__body tr.current-row > td.el-table__cell) {
       color: #f8fafc !important;
-      background: linear-gradient(90deg, rgba(34, 211, 238, 0.2), rgba(14, 165, 233, 0.14)) !important;
-      box-shadow: inset 0 1px 0 rgba(125, 211, 252, 0.2), inset 0 -1px 0 rgba(125, 211, 252, 0.16);
+      background: linear-gradient(
+        90deg,
+        rgba(34, 211, 238, 0.2),
+        rgba(14, 165, 233, 0.14)
+      ) !important;
+      box-shadow: inset 0 1px 0 rgba(125, 211, 252, 0.2),
+        inset 0 -1px 0 rgba(125, 211, 252, 0.16);
     }
 
     :deep(.el-table__body tr:hover > td .cell),

+ 17 - 0
src/views/produce/components/footBtn.vue

@@ -31,6 +31,14 @@
           return null;
         }
       },
+      qualityInspectionDisabled: {
+        type: Boolean,
+        default: false
+      },
+      qualityInspectionDisabledMsg: {
+        type: String,
+        default: ''
+      },
       activeName: {
         type: String,
         default: '0'
@@ -371,6 +379,15 @@
       btnListData() {
         // 根据是否完成产前准备等前置条件 来禁用按钮
         return this.btnList.map((i) => {
+          if (i.type === 'qualityInspection' && this.qualityInspectionDisabled) {
+            return {
+              ...i,
+              disable: true,
+              msg:
+                this.qualityInspectionDisabledMsg ||
+                '请先完成领料、投料后再进行首件两检'
+            };
+          }
           if (this.isPreProductionResult) {
             for (let key in this.isPreProductionResult) {
               let obj = this.disableObj[key];

+ 323 - 33
src/views/produce/index.vue

@@ -2,14 +2,19 @@
   <div class="index_box">
     <div class="content_box">
       <div class="content_box_tab">
-        <el-input
-          style="width: 160px"
-          clearable
-          v-model="name"
-          placeholder="请输入筛选项"
-          @input="seekInput"
-        />
-        <el-button type="text" @click="updataTaskList">刷新</el-button>
+        <div class="task-toolbar">
+          <el-input
+            class="task-filter-input"
+            clearable
+            v-model="name"
+            placeholder="请输入筛选项"
+            @input="seekInput"
+          />
+          <div class="task-toolbar-actions">
+            <el-button type="text" @click="updataTaskList">刷新</el-button>
+            <el-button type="text" @click="sortTaskList">排序</el-button>
+          </div>
+        </div>
         <el-tabs
           v-model="activeName"
           type="card"
@@ -278,6 +283,8 @@
           :singleReportInspection="singleReportInspection"
           style="background: rgba(223, 250, 222, 0.6); padding: 10px"
           :isPreProductionResult="isPreProductionResult"
+          :qualityInspectionDisabled="qualityInspectionDisabled"
+          :qualityInspectionDisabledMsg="firstArticlePickFeedMsg"
           :activeName="activeName"
         ></footBtn>
       </div>
@@ -412,7 +419,8 @@
     singleListTask,
     pleaseEntrustManagement,
     checkPleaseEntrust,
-    checkRepeatPick
+    checkRepeatPick,
+    checkRepeatFeed
   } from '@/api/produce/index';
   import prenatalExamination from './components/prenatalExamination/index.vue';
   import { workorderPage2 } from '@/api/produce/workOrder.js';
@@ -541,6 +549,9 @@
         treeKey: '1',
         taskData: null,
         taskRequestController: null,
+        firstArticlePickFeedReady: true,
+        firstArticlePickFeedMsg: '',
+        firstArticlePickFeedCheckKey: '',
         /** 底部按钮点击后隐藏右侧工单详情预览(含 type 为空的按钮,如暂停启动) */
         workOrderDetailPreviewSuppressed: false,
         paperSizeDialogVisible: false,
@@ -592,6 +603,19 @@
       info() {
         return this.$store.state.user.info;
       },
+      hasFirstArticleInspectionTarget() {
+        if (this.activeName === '0') {
+          return this.workListIds.length > 0;
+        }
+        return !!this.taskData;
+      },
+      qualityInspectionDisabled() {
+        return (
+          this.info?.clientEnvironmentId == 9 &&
+          this.hasFirstArticleInspectionTarget &&
+          !this.firstArticlePickFeedReady
+        );
+      },
       rightShow() {
         return (type) => {};
       },
@@ -633,6 +657,7 @@
         this.isFinalCheckProduction = false;
         this.operationType = '';
         this.workOrderDetailPreviewSuppressed = false;
+        this.resetFirstArticlePickFeedStatus();
         this.getTaskList();
         this.name = '';
         this.seekInput();
@@ -671,6 +696,62 @@
         }
       },
 
+      isSingleUserTaskMode() {
+        return localStorage.getItem('singleUserInfo') == '1';
+      },
+
+      getSelectedUserInfo() {
+        return JSON.parse(localStorage.getItem('chooseUserInfo'));
+      },
+
+      getTaskListRequest() {
+        return this.isSingleUserTaskMode()
+          ? singleListTask(this.getSelectedUserInfo())
+          : listTask();
+      },
+
+      syncCurrentTask(list = this.produceTaskList) {
+        if (!list?.length) return;
+
+        const currentTask = list[0];
+        this.$store.commit('user/setTaskObj', currentTask);
+        this.produceTaskInfo = currentTask;
+        this.$nextTick(() => {
+          this.$refs.taskListRef?.setCurrentKey(currentTask.id);
+        });
+      },
+
+      async refreshTaskWorkCountByActiveTab() {
+        if (this.activeName === '0') {
+          await this.getTaskWorkNumber();
+        } else if (this.activeName === '1') {
+          await this.getTaskWorkList();
+        }
+      },
+
+      async loadTaskList(options = {}) {
+        const {
+          withCount = !this.isSingleUserTaskMode(),
+          sorted = false,
+          abort = false
+        } = options;
+
+        if (abort) {
+          this.abortTaskRequest();
+        }
+
+        const res = await this.getTaskListRequest();
+        this.handleTaskList(res);
+
+        if (withCount) {
+          await this.refreshTaskWorkCountByActiveTab();
+        }
+
+        if (sorted) {
+          this.applySortedTaskList();
+        }
+      },
+
       // 前端筛选
       seekInput() {
         // console.log(activeName);
@@ -726,6 +807,7 @@
         this.feedNeedEquipment = data.feedNeedEquipment;
         this.reportNeedFeed = data.reportNeedFeed;
         this.produceTaskInfo = data;
+        this.resetFirstArticlePickFeedStatus();
 
         // 重置按钮 禁用
         if (this.produceTaskInfo && this.produceTaskInfo.id != data.id) {
@@ -754,22 +836,7 @@
 
       // 获取工序列表
       getTaskList() {
-        if (localStorage.getItem('singleUserInfo') == '1') {
-          singleListTask(
-            JSON.parse(localStorage.getItem('chooseUserInfo'))
-          ).then((res) => {
-            this.handleTaskList(res);
-          });
-        } else {
-          listTask().then((res) => {
-            this.handleTaskList(res);
-            if (this.activeName === '0') {
-              this.getTaskWorkNumber();
-            } else if (this.activeName === '1') {
-              this.getTaskWorkList();
-            }
-          });
-        }
+        return this.loadTaskList();
         // if (localStorage.getItem('singleUserInfo') == '1') {
         //   singleListTask(
         //     JSON.parse(localStorage.getItem('chooseUserInfo'))
@@ -825,13 +892,50 @@
         this.arr = JSON.parse(JSON.stringify(res));
 
         // 默认选中第一个
-        if (res?.length) {
-          this.$store.commit('user/setTaskObj', res[0]);
-          this.produceTaskInfo = res[0];
-          this.$nextTick(() => {
-            this.$refs.taskListRef?.setCurrentKey(res[0].id);
-          });
-        }
+        this.syncCurrentTask(res);
+      },
+
+      getTaskNumber(item) {
+        const number = Number(item?.number);
+        return Number.isFinite(number) ? number : 0;
+      },
+
+      sortTaskListByNumber(list) {
+        return [...list]
+          .map((item, index) => ({ item, index }))
+          .sort((a, b) => {
+            const aNumber = this.getTaskNumber(a.item);
+            const bNumber = this.getTaskNumber(b.item);
+            const aHasNumber = aNumber > 0;
+            const bHasNumber = bNumber > 0;
+
+            if (aHasNumber !== bHasNumber) {
+              return aHasNumber ? -1 : 1;
+            }
+
+            if (aHasNumber && aNumber !== bNumber) {
+              return bNumber - aNumber;
+            }
+
+            return a.index - b.index;
+          })
+          .map(({ item }) => item);
+      },
+
+      applySortedTaskList() {
+        this.taskDataList = this.sortTaskListByNumber(this.taskDataList);
+        this.produceTaskList = this.taskDataList;
+        this.arr = JSON.parse(JSON.stringify(this.taskDataList));
+        this.treeKey = Date.now();
+        this.syncCurrentTask();
+      },
+
+      async sortTaskList() {
+        await this.loadTaskList({
+          withCount: true,
+          sorted: true,
+          abort: true
+        });
       },
 
       async fetchTaskWorkCount(apiFn) {
@@ -1027,11 +1131,13 @@
         this.workListIds = data.ids;
         this.workData = data;
         this.checkProductionResult();
+        this.refreshFirstArticlePickFeedStatus();
       },
 
       taskSelect(data) {
         this.workOrderDetailPreviewSuppressed = false;
         this.taskData = data.list && data.list.length > 0 ? data.list[0] : null;
+        this.refreshFirstArticlePickFeedStatus();
       },
 
       buildWorkOrderInfoFromTaskRow(row) {
@@ -1192,6 +1298,147 @@
         return true;
       },
 
+      resetFirstArticlePickFeedStatus() {
+        this.firstArticlePickFeedReady = true;
+        this.firstArticlePickFeedMsg = '';
+        this.firstArticlePickFeedCheckKey = '';
+      },
+
+      getFirstArticleWorkOrderId(row = {}) {
+        return row.workOrderId || row.mesWorkOrderId || row.id;
+      },
+
+      getFirstArticleInspectionRows() {
+        if (this.activeName === '1') {
+          return this.taskData ? [this.taskData] : [];
+        }
+
+        const selectedIds = new Set(this.workListIds.map((id) => String(id)));
+        const rows = this.workData?.list || [];
+        const selectedRows = rows.filter((row) =>
+          selectedIds.has(String(this.getFirstArticleWorkOrderId(row)))
+        );
+
+        return selectedRows.length
+          ? selectedRows
+          : this.workListIds.map((id) => ({ id }));
+      },
+
+      hasNonZeroCheckData(data, keys) {
+        if (Array.isArray(data)) {
+          return data.some((item) => this.hasNonZeroCheckData(item, keys));
+        }
+
+        if (data && typeof data === 'object') {
+          const values = keys?.length
+            ? keys.map((key) => data[key])
+            : Object.values(data);
+          return values.some((value) => this.hasNonZeroCheckData(value));
+        }
+
+        const num = Number(data);
+        if (!Number.isNaN(num)) {
+          return num !== 0;
+        }
+
+        return Boolean(data);
+      },
+
+      async checkFirstArticlePickFeed(row) {
+        const workOrderId = this.getFirstArticleWorkOrderId(row);
+        if (!workOrderId) {
+          return { pickDone: false, feedDone: false };
+        }
+
+        const [pickRes, feedRes] = await Promise.all([
+          checkRepeatPick({ workOrderId }),
+          checkRepeatFeed([
+            {
+              currentTaskDiagram: row.currentTaskDiagram,
+              workOrderId
+            }
+          ])
+        ]);
+
+        return {
+          pickDone: this.hasNonZeroCheckData(pickRes?.data),
+          feedDone: this.hasNonZeroCheckData(feedRes?.data, [
+            'feedFormed',
+            'feedQuantity',
+            'allFeedQuantity'
+          ])
+        };
+      },
+
+      getFirstArticlePickFeedMsg(results) {
+        const needPick = results.some((item) => !item.pickDone);
+        const needFeed = results.some((item) => !item.feedDone);
+
+        if (needPick && needFeed) {
+          return '请先完成领料、投料后再进行首件两检';
+        }
+        if (needPick) {
+          return '请先完成领料后再进行首件两检';
+        }
+        if (needFeed) {
+          return '请先完成投料后再进行首件两检';
+        }
+        return '';
+      },
+
+      async refreshFirstArticlePickFeedStatus() {
+        if (this.info?.clientEnvironmentId != 9) {
+          this.resetFirstArticlePickFeedStatus();
+          return true;
+        }
+
+        if (!this.hasFirstArticleInspectionTarget) {
+          this.resetFirstArticlePickFeedStatus();
+          return true;
+        }
+
+        const rows = this.getFirstArticleInspectionRows();
+        const checkKey = `${this.activeName}-${rows
+          .map((row) => this.getFirstArticleWorkOrderId(row))
+          .join(',')}`;
+        this.firstArticlePickFeedCheckKey = checkKey;
+        this.firstArticlePickFeedReady = false;
+        this.firstArticlePickFeedMsg = '正在检查领料、投料状态';
+
+        try {
+          const results = await Promise.all(
+            rows.map((row) => this.checkFirstArticlePickFeed(row))
+          );
+
+          if (this.firstArticlePickFeedCheckKey !== checkKey) {
+            return this.firstArticlePickFeedReady;
+          }
+
+          const msg = this.getFirstArticlePickFeedMsg(results);
+          this.firstArticlePickFeedReady = !msg;
+          this.firstArticlePickFeedMsg = msg;
+          return this.firstArticlePickFeedReady;
+        } catch (error) {
+          if (this.firstArticlePickFeedCheckKey === checkKey) {
+            this.firstArticlePickFeedReady = false;
+            this.firstArticlePickFeedMsg =
+              '领料、投料状态检查失败,请稍后重试';
+          }
+          return false;
+        }
+      },
+
+      async validateFirstArticlePickFeedBeforeInspection() {
+        const ready = await this.refreshFirstArticlePickFeedStatus();
+        if (!ready) {
+          this.$message.warning(
+            this.firstArticlePickFeedMsg ||
+              '请先完成领料、投料后再进行首件两检'
+          );
+        }
+        return ready;
+      },
+
       async getFirstArticleConfig() {
         const res = await parameterGetByCode({
           code: 'first_article_dual_inspection_for_report'
@@ -1655,7 +1902,7 @@
       },
 
       /* ================== 首件两检 ================== */
-      handleQualityInspection() {
+      async handleQualityInspection() {
         if (this.activeName == '0') {
           if (
             !this.checkWorkOrder({
@@ -1668,6 +1915,9 @@
 
           const item = this.workData?.list?.[0];
           if (!item) return null;
+          if (!(await this.validateFirstArticlePickFeedBeforeInspection())) {
+            return;
+          }
 
           const req = this.buildCraftFileReq(item, this.workListIds[0]);
 
@@ -1691,6 +1941,10 @@
             return this.$message.warning('该任务单已被拒绝');
           }
 
+          if (!(await this.validateFirstArticlePickFeedBeforeInspection())) {
+            return;
+          }
+
           this.selfRequest(this.taskData);
         }
       },
@@ -1891,6 +2145,7 @@
           this.$nextTick(() => {
             this.$refs.pickListRef.getList(this.workListIds);
           });
+          this.refreshFirstArticlePickFeedStatus();
         }
         this.pickingShow = false;
       },
@@ -1942,6 +2197,7 @@
       // 投料后 重新检测按钮状态
       reloadFeeding() {
         this.checkProductionResult();
+        this.refreshFirstArticlePickFeedStatus();
       }
     },
 
@@ -2058,6 +2314,40 @@
     padding: 10px 10px;
   }
 
+  .task-toolbar {
+    display: flex;
+    align-items: center;
+    width: 100%;
+    margin-bottom: 2px;
+  }
+
+  .task-filter-input {
+    flex: 1;
+    min-width: 0;
+
+    ::v-deep .el-input__inner {
+      padding-left: 10px;
+      padding-right: 24px;
+    }
+  }
+
+  .task-toolbar-actions {
+    display: flex;
+    align-items: center;
+    flex-shrink: 0;
+    margin-left: 2px;
+
+    .el-button {
+      padding: 0;
+      min-width: auto;
+      margin-left: 2px;
+
+      &:first-child {
+        margin-left: 0;
+      }
+    }
+  }
+
   .right_main_box {
     background-color: #fff;
     height: 100%;

+ 359 - 3
src/views/produceOrder/components/releaseDialog/index.vue

@@ -7,7 +7,7 @@
     :visible.sync="dispatchVisible"
     :width="modelWidth"
     append-to-body
-    custom-class="ele-dialog-form"
+    custom-class="ele-dialog-form release-dialog-industrial"
   >
     <div class="form-wrapper">
       <el-form
@@ -1810,6 +1810,298 @@
 </script>
 
 <style lang="scss" scoped>
+  .form-wrapper {
+    position: relative;
+    padding: 18px 20px 20px;
+    background:
+      linear-gradient(rgba(39, 56, 74, 0.035) 1px, transparent 1px),
+      linear-gradient(90deg, rgba(39, 56, 74, 0.035) 1px, transparent 1px),
+      linear-gradient(135deg, rgba(31, 111, 235, 0.08), transparent 36%),
+      linear-gradient(180deg, #f7faff 0%, #edf3f8 100%);
+    background-size: 24px 24px, 24px 24px, auto, auto;
+  }
+
+  .form-wrapper::before {
+    position: absolute;
+    top: 0;
+    right: 0;
+    left: 0;
+    height: 3px;
+    background: linear-gradient(90deg, #1b74e4, #1ed6c9, #72d572);
+    content: '';
+  }
+
+  ::v-deep .basic {
+    padding: 16px 18px 6px;
+    margin-bottom: 10px;
+    border: 1px solid #d8e3ee;
+    border-radius: 6px;
+    background:
+      linear-gradient(90deg, rgba(27, 116, 228, 0.06), transparent 26%),
+      #ffffff;
+    box-shadow: inset 4px 0 0 #1b74e4, 0 10px 24px rgba(31, 51, 73, 0.08);
+  }
+
+  ::v-deep .el-form > .el-row:not(.basic) {
+    padding: 12px 18px 0;
+    margin-bottom: 14px;
+    border: 1px solid #d8e3ee;
+    border-radius: 6px;
+    background:
+      linear-gradient(90deg, rgba(32, 209, 194, 0.06), transparent 30%),
+      #fafdff;
+    box-shadow: inset 4px 0 0 #20d1c2, 0 8px 18px rgba(31, 51, 73, 0.05);
+  }
+
+  ::v-deep .el-form-item {
+    display: flex;
+    align-items: center;
+    width: 100%;
+    margin-right: 0;
+    margin-bottom: 16px;
+  }
+
+  ::v-deep .el-form-item__label {
+    flex: 0 0 112px;
+    width: 112px !important;
+    color: #31485e;
+    font-weight: 700;
+    letter-spacing: 0;
+  }
+
+  ::v-deep .el-form-item__content {
+    flex: 1;
+    min-width: 0;
+  }
+
+  ::v-deep .el-input__inner {
+    height: 36px;
+    border-color: #d8e3ee;
+    border-radius: 5px;
+    background: linear-gradient(180deg, #fbfdff, #eef4f9);
+    color: #27394a;
+    font-weight: 600;
+    transition: border-color 0.18s ease, box-shadow 0.18s ease;
+  }
+
+  ::v-deep .el-input__inner:focus {
+    border-color: #1b9eea;
+    box-shadow: 0 0 0 3px rgba(27, 158, 234, 0.14);
+  }
+
+  ::v-deep .el-input.is-disabled .el-input__inner {
+    border-color: #e1e8f0;
+    background: linear-gradient(180deg, #f8fafc, #f0f4f8);
+    color: #687887;
+  }
+
+  .process_list {
+    overflow: hidden;
+    margin-top: 12px;
+    border: 1px solid #cbd9e6 !important;
+    border-radius: 6px;
+    background: #fff;
+    box-shadow: 0 12px 28px rgba(31, 51, 73, 0.09);
+  }
+
+  .process_list > span {
+    display: block;
+    margin: 0;
+    padding: 12px 16px;
+    border: 1px solid rgba(24, 144, 255, 0.22);
+    border-right: none;
+    border-left: none;
+    border-radius: 0;
+    background:
+      linear-gradient(90deg, rgba(16, 194, 123, 0.14), transparent 38%),
+      #f7fbff;
+    color: #13844f !important;
+    font-weight: 700;
+  }
+
+  ::v-deep .el-tabs--border-card > .el-tabs__header {
+    border-bottom-color: #d8e3ee;
+    background: linear-gradient(180deg, #26384a, #1c2b3a);
+  }
+
+  ::v-deep .el-tabs--border-card > .el-tabs__header .el-tabs__item {
+    height: 44px;
+    border-right: 1px solid rgba(255, 255, 255, 0.08);
+    color: #b8c7d8;
+    font-weight: 700;
+  }
+
+  ::v-deep .el-tabs--border-card > .el-tabs__header .el-tabs__item.is-active {
+    border-right-color: transparent;
+    border-left-color: transparent;
+    background: linear-gradient(180deg, #ffffff, #f4f8fc);
+    color: #1572d6;
+    box-shadow: inset 0 3px 0 #20d1c2;
+  }
+
+  ::v-deep .el-tabs--border-card > .el-tabs__header .el-tabs__item:not(.is-active):hover {
+    color: #ffffff;
+    background: rgba(32, 209, 194, 0.1);
+  }
+
+  ::v-deep .el-tabs--border-card > .el-tabs__content {
+    padding: 0;
+    background: #f8fbfe;
+  }
+
+  .table {
+    overflow: hidden;
+    margin: 16px 8px 10px;
+    border: 1px solid #d9e4ee;
+    border-radius: 6px;
+    background: #fff;
+    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.8);
+  }
+
+  .table ::v-deep .ele-pro-table-toolbar {
+    display: flex;
+    flex-wrap: wrap;
+    align-items: center;
+    gap: 10px 18px;
+    padding: 12px 14px;
+    border-bottom: 1px solid #dce7f1;
+    background:
+      linear-gradient(90deg, rgba(27, 116, 228, 0.08), rgba(32, 209, 194, 0.06)),
+      #ffffff;
+  }
+
+  .table ::v-deep .el-button {
+    min-width: 64px;
+    border-radius: 5px;
+    font-weight: 700;
+  }
+
+  .table ::v-deep .el-button--primary {
+    border-color: #1b8ff0;
+    background: linear-gradient(135deg, #1b8ff0, #16b6e7);
+    box-shadow: 0 6px 14px rgba(27, 143, 240, 0.18);
+  }
+
+  .table ::v-deep .el-button--success {
+    border-color: #18b86f;
+    background: linear-gradient(135deg, #18b86f, #31c94c);
+    box-shadow: 0 6px 14px rgba(24, 184, 111, 0.18);
+  }
+
+  .table ::v-deep .el-radio-button__inner {
+    border-color: #cbd9e6;
+    background: #fff;
+    color: #52677c;
+    font-weight: 700;
+  }
+
+  .table ::v-deep .el-table {
+    color: #2e4052;
+  }
+
+  .table ::v-deep .el-table th.el-table__cell {
+    border-color: rgba(255, 255, 255, 0.08);
+    background: linear-gradient(180deg, #283b4e, #1e3042);
+    color: #eaf6ff;
+    font-weight: 800;
+  }
+
+  .table ::v-deep .el-table td.el-table__cell {
+    border-color: #edf2f6;
+  }
+
+  .table ::v-deep .el-table__fixed-right {
+    overflow: hidden;
+    border-left: 1px solid #d8e3ee;
+    border-radius: 0 6px 6px 0;
+    box-shadow: -8px 0 18px rgba(31, 51, 73, 0.08);
+  }
+
+  .table ::v-deep .el-table__fixed-right::before {
+    background-color: #d8e3ee;
+  }
+
+  .table ::v-deep .el-table__fixed-right th.el-table__cell {
+    background: linear-gradient(180deg, #26384a, #1c2b3a);
+  }
+
+  .table ::v-deep .el-table__body tr:hover > td.el-table__cell {
+    background: #eef8ff !important;
+  }
+
+  .table ::v-deep .el-table__body-wrapper::-webkit-scrollbar,
+  .table ::v-deep .el-table__fixed-body-wrapper::-webkit-scrollbar {
+    width: 8px;
+    height: 8px;
+  }
+
+  .table ::v-deep .el-table__body-wrapper::-webkit-scrollbar-thumb,
+  .table ::v-deep .el-table__fixed-body-wrapper::-webkit-scrollbar-thumb {
+    border-radius: 8px;
+    background: linear-gradient(90deg, #71879b, #42586d);
+  }
+
+  .table ::v-deep .el-table__body-wrapper::-webkit-scrollbar-track,
+  .table ::v-deep .el-table__fixed-body-wrapper::-webkit-scrollbar-track {
+    background: #e8eef4;
+  }
+
+  .table ::v-deep .el-pagination {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    min-height: 64px;
+    padding: 10px 0;
+    line-height: 32px;
+  }
+
+  .table ::v-deep .el-pagination > * {
+    display: inline-flex;
+    align-items: center;
+    justify-content: center;
+  }
+
+  .table ::v-deep .el-pagination .el-pagination__sizes {
+    height: 36px;
+    margin: 0 14px 0 18px;
+    line-height: 36px;
+  }
+
+  .table ::v-deep .el-pagination .el-pagination__sizes .el-select,
+  .table ::v-deep .el-pagination .el-pagination__sizes .el-input {
+    height: 36px;
+    line-height: 36px;
+  }
+
+  .table ::v-deep .el-pagination .el-pagination__sizes .el-input__inner {
+    height: 36px;
+    line-height: 36px;
+    text-align: center;
+  }
+
+  .table ::v-deep .el-pagination .btn-prev,
+  .table ::v-deep .el-pagination .btn-next,
+  .table ::v-deep .el-pagination .el-pager li {
+    display: inline-flex;
+    align-items: center;
+    justify-content: center;
+    height: 32px;
+    min-width: 32px;
+    line-height: 32px;
+  }
+
+  .table ::v-deep .el-pagination__jump {
+    height: 36px;
+    margin-left: 18px;
+    line-height: 36px;
+  }
+
+  .table ::v-deep .el-pagination__editor.el-input,
+  .table ::v-deep .el-pagination__editor.el-input .el-input__inner {
+    height: 36px;
+    line-height: 36px;
+  }
+
   .top-box {
     display: flex;
     margin-bottom: 10px;
@@ -1828,12 +2120,13 @@
   }
 
   ::v-deep .el-radio-button__orig-radio:checked + .el-radio-button__inner {
-    background-color: #10d070;
+    background: linear-gradient(135deg, #16b6e7, #10d070);
     border-color: #10d070;
+    color: #fff;
   }
 
   ::v-deep .el-radio-button__orig-radio:checked + .el-radio-button__inner {
-    box-shadow: none;
+    box-shadow: 0 0 0 2px rgba(16, 208, 112, 0.16);
   }
 
   // ::v-deep .ele-block{
@@ -1871,5 +2164,68 @@
 
   .describe {
     display: inline-block;
+    padding: 8px 12px;
+    border: 1px solid rgba(16, 208, 112, 0.28);
+    border-radius: 5px;
+    background: #effbf5;
+    color: #12804e !important;
+    font-weight: 700;
+  }
+</style>
+
+<style lang="scss">
+  .release-dialog-industrial {
+    overflow: hidden;
+    border: 1px solid #435a70;
+    border-radius: 8px;
+    background: #edf3f8;
+    box-shadow: 0 24px 80px rgba(16, 32, 48, 0.42);
+  }
+
+  .release-dialog-industrial .el-dialog__header {
+    padding: 18px 24px;
+    border-bottom: 1px solid rgba(32, 209, 194, 0.28);
+    background:
+      linear-gradient(90deg, rgba(32, 209, 194, 0.18), transparent 42%),
+      linear-gradient(135deg, #1b2a3a, #26384a);
+  }
+
+  .release-dialog-industrial .el-dialog__title {
+    color: #f3f9ff;
+    font-size: 18px;
+    font-weight: 800;
+  }
+
+  .release-dialog-industrial .el-dialog__title::before {
+    display: inline-block;
+    width: 4px;
+    height: 18px;
+    margin-right: 10px;
+    vertical-align: -3px;
+    border-radius: 2px;
+    background: linear-gradient(180deg, #20d1c2, #1b8ff0);
+    box-shadow: 0 0 12px rgba(32, 209, 194, 0.48);
+    content: '';
+  }
+
+  .release-dialog-industrial .el-dialog__headerbtn i {
+    color: #c8d6e5;
+    font-weight: 700;
+  }
+
+  .release-dialog-industrial .el-dialog__body {
+    padding: 0;
+    background: #edf3f8;
+  }
+
+  .release-dialog-industrial::before {
+    position: absolute;
+    top: 0;
+    right: 0;
+    left: 0;
+    height: 1px;
+    background: rgba(255, 255, 255, 0.18);
+    content: '';
+    pointer-events: none;
   }
 </style>

+ 357 - 3
src/views/produceOrder/components/releaseDialog/planDotLineReleaseDialog.vue

@@ -7,7 +7,7 @@
     :visible.sync="dispatchVisible"
     :width="modelWidth"
     append-to-body
-    custom-class="ele-dialog-form"
+    custom-class="ele-dialog-form release-dialog-industrial"
   >
     <div class="form-wrapper">
       <el-form
@@ -1917,6 +1917,298 @@
 </script>
 
 <style lang="scss" scoped>
+  .form-wrapper {
+    position: relative;
+    padding: 18px 20px 20px;
+    background:
+      linear-gradient(rgba(39, 56, 74, 0.035) 1px, transparent 1px),
+      linear-gradient(90deg, rgba(39, 56, 74, 0.035) 1px, transparent 1px),
+      linear-gradient(135deg, rgba(31, 111, 235, 0.08), transparent 36%),
+      linear-gradient(180deg, #f7faff 0%, #edf3f8 100%);
+    background-size: 24px 24px, 24px 24px, auto, auto;
+  }
+
+  .form-wrapper::before {
+    position: absolute;
+    top: 0;
+    right: 0;
+    left: 0;
+    height: 3px;
+    background: linear-gradient(90deg, #1b74e4, #1ed6c9, #72d572);
+    content: '';
+  }
+
+  ::v-deep .basic {
+    padding: 16px 18px 6px;
+    margin-bottom: 10px;
+    border: 1px solid #d8e3ee;
+    border-radius: 6px;
+    background:
+      linear-gradient(90deg, rgba(27, 116, 228, 0.06), transparent 26%),
+      #ffffff;
+    box-shadow: inset 4px 0 0 #1b74e4, 0 10px 24px rgba(31, 51, 73, 0.08);
+  }
+
+  ::v-deep .el-form > .el-row:not(.basic) {
+    padding: 12px 18px 0;
+    margin-bottom: 14px;
+    border: 1px solid #d8e3ee;
+    border-radius: 6px;
+    background:
+      linear-gradient(90deg, rgba(32, 209, 194, 0.06), transparent 30%),
+      #fafdff;
+    box-shadow: inset 4px 0 0 #20d1c2, 0 8px 18px rgba(31, 51, 73, 0.05);
+  }
+
+  ::v-deep .el-form-item {
+    display: flex;
+    align-items: center;
+    width: 100%;
+    margin-right: 0;
+    margin-bottom: 16px;
+  }
+
+  ::v-deep .el-form-item__label {
+    flex: 0 0 112px;
+    width: 112px !important;
+    color: #31485e;
+    font-weight: 700;
+    letter-spacing: 0;
+  }
+
+  ::v-deep .el-form-item__content {
+    flex: 1;
+    min-width: 0;
+  }
+
+  ::v-deep .el-input__inner {
+    height: 36px;
+    border-color: #d8e3ee;
+    border-radius: 5px;
+    background: linear-gradient(180deg, #fbfdff, #eef4f9);
+    color: #27394a;
+    font-weight: 600;
+    transition: border-color 0.18s ease, box-shadow 0.18s ease;
+  }
+
+  ::v-deep .el-input__inner:focus {
+    border-color: #1b9eea;
+    box-shadow: 0 0 0 3px rgba(27, 158, 234, 0.14);
+  }
+
+  ::v-deep .el-input.is-disabled .el-input__inner {
+    border-color: #e1e8f0;
+    background: linear-gradient(180deg, #f8fafc, #f0f4f8);
+    color: #687887;
+  }
+
+  .process_list {
+    overflow: hidden;
+    margin-top: 12px;
+    border: 1px solid #cbd9e6 !important;
+    border-radius: 6px;
+    background: #fff;
+    box-shadow: 0 12px 28px rgba(31, 51, 73, 0.09);
+  }
+
+  .process_list > span {
+    display: block;
+    margin: 0;
+    padding: 12px 16px;
+    border: 1px solid rgba(24, 144, 255, 0.22);
+    border-right: none;
+    border-left: none;
+    border-radius: 0;
+    background:
+      linear-gradient(90deg, rgba(16, 194, 123, 0.14), transparent 38%),
+      #f7fbff;
+    color: #13844f !important;
+    font-weight: 700;
+  }
+
+  ::v-deep .el-tabs--border-card > .el-tabs__header {
+    border-bottom-color: #d8e3ee;
+    background: linear-gradient(180deg, #26384a, #1c2b3a);
+  }
+
+  ::v-deep .el-tabs--border-card > .el-tabs__header .el-tabs__item {
+    height: 44px;
+    border-right: 1px solid rgba(255, 255, 255, 0.08);
+    color: #b8c7d8;
+    font-weight: 700;
+  }
+
+  ::v-deep .el-tabs--border-card > .el-tabs__header .el-tabs__item.is-active {
+    border-right-color: transparent;
+    border-left-color: transparent;
+    background: linear-gradient(180deg, #ffffff, #f4f8fc);
+    color: #1572d6;
+    box-shadow: inset 0 3px 0 #20d1c2;
+  }
+
+  ::v-deep .el-tabs--border-card > .el-tabs__header .el-tabs__item:not(.is-active):hover {
+    color: #ffffff;
+    background: rgba(32, 209, 194, 0.1);
+  }
+
+  ::v-deep .el-tabs--border-card > .el-tabs__content {
+    padding: 0;
+    background: #f8fbfe;
+  }
+
+  .table {
+    overflow: hidden;
+    margin: 16px 8px 10px;
+    border: 1px solid #d9e4ee;
+    border-radius: 6px;
+    background: #fff;
+    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.8);
+  }
+
+  .table ::v-deep .ele-pro-table-toolbar {
+    display: flex;
+    flex-wrap: wrap;
+    align-items: center;
+    gap: 10px 18px;
+    padding: 12px 14px;
+    border-bottom: 1px solid #dce7f1;
+    background:
+      linear-gradient(90deg, rgba(27, 116, 228, 0.08), rgba(32, 209, 194, 0.06)),
+      #ffffff;
+  }
+
+  .table ::v-deep .el-button {
+    min-width: 64px;
+    border-radius: 5px;
+    font-weight: 700;
+  }
+
+  .table ::v-deep .el-button--primary {
+    border-color: #1b8ff0;
+    background: linear-gradient(135deg, #1b8ff0, #16b6e7);
+    box-shadow: 0 6px 14px rgba(27, 143, 240, 0.18);
+  }
+
+  .table ::v-deep .el-button--success {
+    border-color: #18b86f;
+    background: linear-gradient(135deg, #18b86f, #31c94c);
+    box-shadow: 0 6px 14px rgba(24, 184, 111, 0.18);
+  }
+
+  .table ::v-deep .el-radio-button__inner {
+    border-color: #cbd9e6;
+    background: #fff;
+    color: #52677c;
+    font-weight: 700;
+  }
+
+  .table ::v-deep .el-table {
+    color: #2e4052;
+  }
+
+  .table ::v-deep .el-table th.el-table__cell {
+    border-color: rgba(255, 255, 255, 0.08);
+    background: linear-gradient(180deg, #283b4e, #1e3042);
+    color: #eaf6ff;
+    font-weight: 800;
+  }
+
+  .table ::v-deep .el-table td.el-table__cell {
+    border-color: #edf2f6;
+  }
+
+  .table ::v-deep .el-table__fixed-right {
+    overflow: hidden;
+    border-left: 1px solid #d8e3ee;
+    border-radius: 0 6px 6px 0;
+    box-shadow: -8px 0 18px rgba(31, 51, 73, 0.08);
+  }
+
+  .table ::v-deep .el-table__fixed-right::before {
+    background-color: #d8e3ee;
+  }
+
+  .table ::v-deep .el-table__fixed-right th.el-table__cell {
+    background: linear-gradient(180deg, #26384a, #1c2b3a);
+  }
+
+  .table ::v-deep .el-table__body tr:hover > td.el-table__cell {
+    background: #eef8ff !important;
+  }
+
+  .table ::v-deep .el-table__body-wrapper::-webkit-scrollbar,
+  .table ::v-deep .el-table__fixed-body-wrapper::-webkit-scrollbar {
+    width: 8px;
+    height: 8px;
+  }
+
+  .table ::v-deep .el-table__body-wrapper::-webkit-scrollbar-thumb,
+  .table ::v-deep .el-table__fixed-body-wrapper::-webkit-scrollbar-thumb {
+    border-radius: 8px;
+    background: linear-gradient(90deg, #71879b, #42586d);
+  }
+
+  .table ::v-deep .el-table__body-wrapper::-webkit-scrollbar-track,
+  .table ::v-deep .el-table__fixed-body-wrapper::-webkit-scrollbar-track {
+    background: #e8eef4;
+  }
+
+  .table ::v-deep .el-pagination {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    min-height: 64px;
+    padding: 10px 0;
+    line-height: 32px;
+  }
+
+  .table ::v-deep .el-pagination > * {
+    display: inline-flex;
+    align-items: center;
+    justify-content: center;
+  }
+
+  .table ::v-deep .el-pagination .el-pagination__sizes {
+    height: 36px;
+    margin: 0 14px 0 18px;
+    line-height: 36px;
+  }
+
+  .table ::v-deep .el-pagination .el-pagination__sizes .el-select,
+  .table ::v-deep .el-pagination .el-pagination__sizes .el-input {
+    height: 36px;
+    line-height: 36px;
+  }
+
+  .table ::v-deep .el-pagination .el-pagination__sizes .el-input__inner {
+    height: 36px;
+    line-height: 36px;
+    text-align: center;
+  }
+
+  .table ::v-deep .el-pagination .btn-prev,
+  .table ::v-deep .el-pagination .btn-next,
+  .table ::v-deep .el-pagination .el-pager li {
+    display: inline-flex;
+    align-items: center;
+    justify-content: center;
+    height: 32px;
+    min-width: 32px;
+    line-height: 32px;
+  }
+
+  .table ::v-deep .el-pagination__jump {
+    height: 36px;
+    margin-left: 18px;
+    line-height: 36px;
+  }
+
+  .table ::v-deep .el-pagination__editor.el-input,
+  .table ::v-deep .el-pagination__editor.el-input .el-input__inner {
+    height: 36px;
+    line-height: 36px;
+  }
+
   .top-box {
     display: flex;
     margin-bottom: 10px;
@@ -1935,12 +2227,13 @@
   }
 
   ::v-deep .el-radio-button__orig-radio:checked + .el-radio-button__inner {
-    background-color: #10d070;
+    background: linear-gradient(135deg, #16b6e7, #10d070);
     border-color: #10d070;
+    color: #fff;
   }
 
   ::v-deep .el-radio-button__orig-radio:checked + .el-radio-button__inner {
-    box-shadow: none;
+    box-shadow: 0 0 0 2px rgba(16, 208, 112, 0.16);
   }
 
   // ::v-deep .ele-block{
@@ -1978,6 +2271,12 @@
 
   .describe {
     display: inline-block;
+    padding: 8px 12px;
+    border: 1px solid rgba(16, 208, 112, 0.28);
+    border-radius: 5px;
+    background: #effbf5;
+    color: #12804e !important;
+    font-weight: 700;
   }
 
   .device-limited-tooltip-wrap {
@@ -2017,6 +2316,61 @@
 </style>
 
 <style lang="scss">
+  .release-dialog-industrial {
+    overflow: hidden;
+    border: 1px solid #435a70;
+    border-radius: 8px;
+    background: #edf3f8;
+    box-shadow: 0 24px 80px rgba(16, 32, 48, 0.42);
+  }
+
+  .release-dialog-industrial .el-dialog__header {
+    padding: 18px 24px;
+    border-bottom: 1px solid rgba(32, 209, 194, 0.28);
+    background:
+      linear-gradient(90deg, rgba(32, 209, 194, 0.18), transparent 42%),
+      linear-gradient(135deg, #1b2a3a, #26384a);
+  }
+
+  .release-dialog-industrial .el-dialog__title {
+    color: #f3f9ff;
+    font-size: 18px;
+    font-weight: 800;
+  }
+
+  .release-dialog-industrial .el-dialog__title::before {
+    display: inline-block;
+    width: 4px;
+    height: 18px;
+    margin-right: 10px;
+    vertical-align: -3px;
+    border-radius: 2px;
+    background: linear-gradient(180deg, #20d1c2, #1b8ff0);
+    box-shadow: 0 0 12px rgba(32, 209, 194, 0.48);
+    content: '';
+  }
+
+  .release-dialog-industrial .el-dialog__headerbtn i {
+    color: #c8d6e5;
+    font-weight: 700;
+  }
+
+  .release-dialog-industrial .el-dialog__body {
+    padding: 0;
+    background: #edf3f8;
+  }
+
+  .release-dialog-industrial::before {
+    position: absolute;
+    top: 0;
+    right: 0;
+    left: 0;
+    height: 1px;
+    background: rgba(255, 255, 255, 0.18);
+    content: '';
+    pointer-events: none;
+  }
+
   .device-limited-tooltip-popper {
     max-width: 260px;
     padding: 9px 12px;

+ 211 - 21
src/views/taskList/components/Ddtails.vue

@@ -6,7 +6,7 @@
     :title="title"
     :visible.sync="detailsVisible"
     append-to-body
-    custom-class="ele-dialog-form"
+    custom-class="ele-dialog-form task-report-dialog"
     width="75vw"
   >
     <el-form
@@ -382,24 +382,22 @@
       // 时间选择
       handleTimeChange() {
         // 如果结束时间早于开始时间,清空结束时间
-
-        if (this.form.realStartTime && this.current.startTime) {
-          const realStartTime = new Date(this.form.realStartTime).getTime();
-          const realEndTime = new Date(this.current.startTime).getTime();
-          if (realStartTime < realEndTime) {
-            this.form.realStartTime = '';
-            this.$message.warning('实际开始时间不能早于任务开始时间');
-          }
-        }
-
-        if (this.form.realStartTime && this.form.realEndTime) {
-          const realStartTime = new Date(this.form.realStartTime).getTime();
-          const realEndTime = new Date(this.form.realEndTime).getTime();
-          if (realStartTime > realEndTime) {
-            this.form.realEndTime = '';
-            this.$message.warning('结束时间不能早于开始时间');
-          }
-        }
+        // if (this.form.realStartTime && this.current.startTime) {
+        //   const realStartTime = new Date(this.form.realStartTime).getTime();
+        //   const realEndTime = new Date(this.current.startTime).getTime();
+        //   if (realStartTime < realEndTime) {
+        //     this.form.realStartTime = '';
+        //     this.$message.warning('实际开始时间不能早于任务开始时间');
+        //   }
+        // }
+        // if (this.form.realStartTime && this.form.realEndTime) {
+        //   const realStartTime = new Date(this.form.realStartTime).getTime();
+        //   const realEndTime = new Date(this.form.realEndTime).getTime();
+        //   if (realStartTime > realEndTime) {
+        //     this.form.realEndTime = '';
+        //     this.$message.warning('结束时间不能早于开始时间');
+        //   }
+        // }
       },
       // 重量正则判断
       handleWeightInput(e, type) {
@@ -561,16 +559,208 @@
 </script>
 
 <style scoped lang="scss">
+  ::v-deep .task-report-dialog {
+    overflow: hidden;
+    border: 1px solid rgba(40, 120, 210, 0.28);
+    border-radius: 6px;
+    background: linear-gradient(180deg, #f7fbff 0%, #ffffff 34%, #f4f8fb 100%),
+      #fff;
+    box-shadow: 0 18px 50px rgba(15, 36, 61, 0.34);
+
+    .el-dialog__header,
+    .ele-modal__header {
+      position: relative;
+      min-height: 54px;
+      padding: 0 22px;
+      display: flex;
+      align-items: center;
+      border-bottom: 1px solid rgba(34, 112, 214, 0.22);
+      background: linear-gradient(90deg, #102941 0%, #15446d 48%, #0f314e 100%),
+        #102941;
+      box-shadow: inset 0 -1px 0 rgba(63, 171, 255, 0.38);
+    }
+
+    .el-dialog__title,
+    .ele-modal__title {
+      color: #eef8ff;
+      font-size: 17px;
+      font-weight: 700;
+      letter-spacing: 0;
+    }
+
+    .el-dialog__headerbtn,
+    .ele-modal__headerbtn {
+      top: 17px;
+
+      .el-dialog__close,
+      i {
+        color: rgba(230, 246, 255, 0.78);
+      }
+
+      &:hover {
+        .el-dialog__close,
+        i {
+          color: #40d9ff;
+        }
+      }
+    }
+
+    .el-dialog__body,
+    .ele-modal__body {
+      padding: 20px 24px 18px;
+      background: linear-gradient(
+          rgba(36, 122, 206, 0.055) 1px,
+          transparent 1px
+        ),
+        linear-gradient(90deg, rgba(36, 122, 206, 0.045) 1px, transparent 1px),
+        linear-gradient(180deg, #f7fbff 0%, #ffffff 46%, #f4f8fb 100%);
+      background-size: 28px 28px, 28px 28px, 100% 100%;
+    }
+
+    .el-form {
+      color: #26384a;
+    }
+  }
+
+  ::v-deep .task-report-dialog .el-row {
+    position: relative;
+  }
+
+  ::v-deep .task-report-dialog .basic {
+    margin: 12px 0 8px !important;
+    padding: 14px 14px 2px;
+    border: 1px solid rgba(28, 118, 208, 0.18);
+    border-radius: 6px;
+    background: rgba(255, 255, 255, 0.78);
+    box-shadow: inset 4px 0 0 rgba(35, 148, 255, 0.78),
+      0 8px 20px rgba(24, 58, 92, 0.06);
+  }
+
+  ::v-deep .task-report-dialog .el-form > .el-row:first-child {
+    margin: 12px 0 8px;
+    padding: 14px 14px 8px;
+    border: 1px solid rgba(28, 118, 208, 0.22);
+    border-radius: 6px;
+    background: linear-gradient(
+        180deg,
+        rgba(231, 244, 255, 0.88),
+        rgba(255, 255, 255, 0.84)
+      ),
+      #fff;
+    box-shadow: inset 4px 0 0 #2394ff, 0 8px 20px rgba(24, 58, 92, 0.08);
+  }
+
+  ::v-deep .task-report-dialog .el-form-item {
+    margin-bottom: 18px;
+  }
+
+  ::v-deep .task-report-dialog .el-form-item__label {
+    color: #526170;
+    font-size: 14px;
+    font-weight: 700;
+  }
+
+  ::v-deep .task-report-dialog .el-input__inner,
+  ::v-deep .task-report-dialog .el-textarea__inner {
+    border-color: #d6e1ec;
+    border-radius: 4px;
+    background: rgba(255, 255, 255, 0.94);
+    color: #23384d;
+    font-size: 14px;
+    font-weight: 600;
+    transition: border-color 0.2s ease, box-shadow 0.2s ease,
+      background-color 0.2s ease;
+  }
+
+  ::v-deep .task-report-dialog .el-input__inner:hover,
+  ::v-deep .task-report-dialog .el-textarea__inner:hover {
+    border-color: #8fc8ff;
+  }
+
+  ::v-deep .task-report-dialog .el-input__inner:focus,
+  ::v-deep .task-report-dialog .el-textarea__inner:focus {
+    border-color: #2394ff;
+    background: #fff;
+    box-shadow: 0 0 0 3px rgba(35, 148, 255, 0.12);
+  }
+
+  ::v-deep .task-report-dialog .el-input.is-disabled .el-input__inner,
+  ::v-deep .task-report-dialog .el-textarea.is-disabled .el-textarea__inner {
+    border-color: #e1e8ef;
+    background: #f4f7fa;
+    color: #5d6975;
+    -webkit-text-fill-color: #5d6975;
+  }
+
+  ::v-deep .task-report-dialog .el-input-group__append {
+    border-color: #d6e1ec;
+    background: #eef4fa;
+    color: #657485;
+    font-weight: 700;
+  }
+
+  ::v-deep
+    .task-report-dialog
+    .el-form-item.is-required:not(.is-no-asterisk)
+    > .el-form-item__label:before {
+    color: #ff5a5f;
+    font-weight: 800;
+  }
+
+  ::v-deep .task-report-dialog .header-title,
+  ::v-deep .task-report-dialog .headerTitle,
+  ::v-deep .task-report-dialog .header_title {
+    margin-top: 22px !important;
+  }
+
   ::v-deep .time_select {
     width: 100%;
   }
 
-  ::v-deep .tool_btn {
+  ::v-deep .task-report-dialog .tool_btn {
+    margin: 8px 0 18px;
     text-align: right;
 
     .el-button {
-      padding: 10px 18px !important;
+      min-width: 92px;
+      padding: 11px 24px !important;
+      border-radius: 4px;
       font-size: 15px !important;
+      font-weight: 700;
+    }
+
+    .el-button--primary {
+      border-color: #1d8fff;
+      background: linear-gradient(135deg, #1597ff 0%, #006fd6 100%);
+      box-shadow: 0 8px 18px rgba(0, 122, 218, 0.28);
+
+      &:hover,
+      &:focus {
+        border-color: #35b9ff;
+        background: linear-gradient(135deg, #35b9ff 0%, #087ee8 100%);
+      }
+    }
+  }
+
+  @media (max-width: 1366px) {
+    ::v-deep .task-report-dialog {
+      width: 86vw !important;
+    }
+  }
+
+  @media (max-width: 768px) {
+    ::v-deep .task-report-dialog {
+      width: 94vw !important;
+
+      .el-dialog__body,
+      .ele-modal__body {
+        padding: 16px 14px;
+      }
+    }
+
+    ::v-deep .task-report-dialog .basic,
+    ::v-deep .task-report-dialog .el-form > .el-row:first-child {
+      padding: 12px 10px 2px;
     }
   }
 </style>

+ 44 - 1
src/views/taskList/index.vue

@@ -287,6 +287,7 @@
   import qualityInspection from '@/views/produce/components/qualityInspection/index.vue';
   import ncReport from './components/ncReport.vue';
   import { parameterGetByCode } from '@/api/system/dictionary-data';
+  import { checkRepeatFeed } from '@/api/produce/index';
 
   export default {
     components: {
@@ -932,7 +933,15 @@
       reload(where) {
         this.$refs.table.reload({ page: 1, where });
       },
-      details(type, row) {
+      async details(type, row) {
+        if (
+          type === 'report' &&
+          this.tabValue != '4' &&
+          !(await this.validateTaskReportFeed(row))
+        ) {
+          return;
+        }
+
         let currentRow = {
           assignCode: row.assignCode,
           mesWorkOrderCode: row.mesWorkOrderCode,
@@ -1014,6 +1023,40 @@
         }
       },
 
+      async validateTaskReportFeed(row) {
+        // if (!row || !row.workOrderId || !row.taskId) {
+        //   this.$message.warning('任务单缺少工单或工序信息,无法校验投料状态');
+        //   return false;
+        // }
+
+        // this.loading = true;
+        // try {
+        //   const res = await checkRepeatFeed([
+        //     {
+        //       workOrderId: row.workOrderId,
+        //       currentTaskDiagram: {
+        //         taskId: row.taskId
+        //       }
+        //     }
+        //   ]);
+        //   const feedList = res?.data || [];
+        //   const hasFeed = feedList.some((item) => item.feedFormed != '0');
+
+        //   if (!hasFeed) {
+        //     this.$message.warning('请先完成投料后再报工');
+        //     return false;
+        //   }
+
+        //   return true;
+        // } catch (err) {
+        //   this.$message.error(err.message || '校验投料状态失败');
+        //   return false;
+        // } finally {
+        //   this.loading = false;
+        // }
+        return true; // 暂时不校验投料状态
+      },
+
       getDecimalLength(num) {
         return (num.toString().split('.')[1] || '').length;
       },

+ 2 - 2
vue.config.js

@@ -32,8 +32,8 @@ module.exports = {
       // 当我们的本地的请求 有/api的时候,就会代理我们的请求地址向另外一个服务器发出请求
       '/api': {
         // target: 'http://124.71.68.31:50001',
-        target: 'http://192.168.1.125:18086',
-        // target: 'http://192.168.1.251:18086',
+        // target: 'http://192.168.1.125:18086',
+        target: 'http://192.168.1.251:18086',
         // target: 'http://192.168.1.251:18186',
         // target: 'http://192.168.1.251:18086', // 开发环境
         // target: 'http://192.168.1.103:18086',192.168.1.116