2 Commits cc1abebf97 ... 507336941c

Autor SHA1 Nachricht Datum
  huoyi 507336941c refactor(portraitManagement): 优化组织画像及预警页面UI和组件结构 vor 20 Stunden
  huoyi@samsundot.com 8260bd57fc feat(warningPage): 完善综合预警工作台页面功能和样式 vor 2 Tagen

+ 3 - 1
src/views/portraitManagement/components/SearchBar.vue

@@ -143,7 +143,8 @@ const handleSelect = (item) => {
143 143
     const name = item.nickName
144 144
 
145 145
     personName.value = path.length > 0 ? `${path.join(' / ')} / ${name}` : name
146
-    curQuery.value = { personName: item.nickName,id:item.id }
146
+    
147
+    curQuery.value = { personName: item.nickName,id:item.userId }
147 148
     searchHandler(curQuery.value)
148 149
   } else {
149 150
     const path = item.path && item.path.length > 0 ? item.path : ((item.id || item.deptId) ? buildPathForNode(departments.value, item.deptId || item.id) || [] : [])
@@ -215,6 +216,7 @@ const selectTime = (t) => {
215 216
 
216 217
 const searchHandler = (query = {}) => {
217 218
   const queryParams = { ...getTimeRange(), ...query }
219
+  
218 220
   if (props.deptType === 'user') {
219 221
     if (queryParams.personName) {
220 222
       emit('search', queryParams)

+ 0 - 1
src/views/portraitManagement/components/whiteCard.vue

@@ -1,7 +1,6 @@
1 1
 <template>
2 2
   <div class="white-card" :style="{ background: bgColor }">
3 3
     <div class="card-title" v-if="title">
4
-      <span class="title-dot"></span>
5 4
       <span class="title-text">{{ title }}</span>
6 5
     </div>
7 6
     <div class="card-body">

+ 1 - 1
src/views/portraitManagement/employeeProfile/index.vue

@@ -68,7 +68,7 @@
68 68
                   <div class="info-item-value">
69 69
                     {{ portrait.qualificationLevelText || '-' }}
70 70
                     <span class="info-item-tag" style="margin-left: 10px;margin-top: 2px;"
71
-                      v-if="!!portrait.xrayOperatorStarttime || portrait.postNames.includes('X射线安检仪操作岗位')">X射线安检仪操作岗位</span>
71
+                      v-if="!!portrait.xrayOperatorStarttime || portrait?.postNames?.includes('X射线安检仪操作岗位')">X射线安检仪操作岗位</span>
72 72
                   </div>
73 73
                 </div>
74 74
               </div>

+ 150 - 0
src/views/portraitManagement/organProfile/components/RankList.vue

@@ -0,0 +1,150 @@
1
+<template>
2
+  <div class="rank-list">
3
+    <div class="rank-avatar-row">
4
+      <div class="rank-avatar-item" v-for="item in podiumOrder" :key="item.rank">
5
+        <div class="rank-avatar-wrapper" :class="'rank-pos-' + item.rank">
6
+          <div class="rank-avatar" :style="{ background: item.color }">{{ item.name.slice(-2) }}</div>
7
+          <span class="rank-badge">{{ item.rank }}</span>
8
+        </div>
9
+        <div class="rank-name">{{ item.name }}</div>
10
+        <div class="rank-num">{{ item.num }}</div>
11
+      </div>
12
+    </div>
13
+    <div class="rank-table">
14
+      <div class="rank-tr rank-th">
15
+        <span>排名</span><span>姓名</span><span>{{ numLabel }}</span>
16
+      </div>
17
+      <div class="rank-tr" v-for="(item, i) in list" :key="i">
18
+        <span>{{ i + 1 }}</span>
19
+        <span>{{ item.name }}</span>
20
+        <span>{{ item.num }}</span>
21
+      </div>
22
+    </div>
23
+  </div>
24
+</template>
25
+
26
+<script setup>
27
+import { computed } from 'vue'
28
+
29
+const props = defineProps({
30
+  top3: { type: Array, default: () => [] },
31
+  list: { type: Array, default: () => [] },
32
+  numLabel: { type: String, default: '问题数' }
33
+})
34
+
35
+// 领奖台顺序:第2名(左)、第1名(中)、第3名(右)
36
+const podiumOrder = computed(() => {
37
+  if (props.top3.length < 3) return props.top3
38
+  return [
39
+    { ...props.top3[1], rank: 2 },
40
+    { ...props.top3[0], rank: 1 },
41
+    { ...props.top3[2], rank: 3 }
42
+  ]
43
+})
44
+</script>
45
+
46
+<style lang="scss" scoped>
47
+.rank-list {
48
+  .rank-avatar-row {
49
+    display: flex;
50
+    justify-content: center;
51
+    gap: 20px;
52
+    margin-top: 15px;
53
+    margin-bottom: 12px;
54
+
55
+    .rank-avatar-item {
56
+      display: flex;
57
+      flex-direction: column;
58
+      align-items: center;
59
+      gap: 6px;
60
+
61
+      &:nth-child(2) {
62
+        transform: translateY(-10px);
63
+      }
64
+
65
+      .rank-avatar-wrapper {
66
+        position: relative;
67
+        display: inline-flex;
68
+        align-items: center;
69
+        justify-content: center;
70
+        border-radius: 50%;
71
+
72
+        &.rank-pos-1 {
73
+          border: 3px solid #fbbf24;
74
+          .rank-badge { background: #fbbf24; }
75
+        }
76
+
77
+        &.rank-pos-2 {
78
+          border: 3px solid #94a3b8;
79
+          .rank-badge { background: #94a3b8; }
80
+        }
81
+
82
+        &.rank-pos-3 {
83
+          border: 3px solid #fb923c;
84
+          .rank-badge { background: #fb923c; }
85
+        }
86
+
87
+        .rank-avatar {
88
+          width: 44px;
89
+          height: 44px;
90
+          border-radius: 50%;
91
+          display: flex;
92
+          align-items: center;
93
+          justify-content: center;
94
+          color: #fff;
95
+          font-size: 16px;
96
+          font-weight: bold;
97
+        }
98
+
99
+        .rank-badge {
100
+          position: absolute;
101
+          bottom: -8px;
102
+          left: 50%;
103
+          transform: translateX(-50%);
104
+          width: 12px;
105
+          height: 12px;
106
+          border-radius: 50%;
107
+          display: flex;
108
+          align-items: center;
109
+          justify-content: center;
110
+          font-size: 11px;
111
+          font-weight: bold;
112
+          color: #fff;
113
+        }
114
+      }
115
+
116
+      .rank-name {
117
+        font-size: 12px;
118
+        color: #475569;
119
+      }
120
+
121
+      .rank-num {
122
+        font-size: 18px;
123
+        color: #1e293b;
124
+        font-weight: bold;
125
+      }
126
+    }
127
+  }
128
+
129
+  .rank-table {
130
+    .rank-tr {
131
+      display: flex;
132
+      padding: 5px 0;
133
+      font-size: 12px;
134
+      color: #64748b;
135
+      border-bottom: 1px solid #e2e8f0;
136
+
137
+      span {
138
+        flex: 1;
139
+        text-align: center;
140
+      }
141
+    }
142
+
143
+    .rank-th {
144
+      color: #1e293b;
145
+      font-weight: bold;
146
+      border-bottom: 2px solid #cbd5e1;
147
+    }
148
+  }
149
+}
150
+</style>

+ 39 - 235
src/views/portraitManagement/organProfile/index.vue

@@ -4,7 +4,7 @@
4 4
     <!-- 顶部指标卡片 -->
5 5
     <div class="metric-row">
6 6
       <div class="metric-card" v-for="(m, i) in metricCards" :key="i" :style="{ background: m.bg }">
7
-        <div class="metric-title">{{ m.title }}</div>
7
+        <div class="metric-title" :style="{ color: m.color }">{{ m.title }}</div>
8 8
         <div class="metric-value" :style="{ color: m.color }">{{ m.value }}</div>
9 9
         <div class="metric-change-row">
10 10
           <div class="metric-change-info">
@@ -18,12 +18,12 @@
18 18
       </div>
19 19
       <div class="metric-side-cards">
20 20
         <div class="metric-card metric-warning-top">
21
-          <div class="metric-title">锐甲安语—自愿报告系统</div>
22
-          <div class="metric-value" style="color:#fff">3</div>
21
+          <div class="metric-title" style="color:#507AFC">锐甲安语—自愿报告系统</div>
22
+          <div class="metric-value" style="color:#507AFC">3</div>
23 23
         </div>
24 24
         <div class="metric-card metric-warning-bottom">
25
-          <div class="metric-title">部门亚健康人员</div>
26
-          <div class="metric-value" style="color:#fff">147</div>
25
+          <div class="metric-title" style="color:#E41754">部门亚健康人员</div>
26
+          <div class="metric-value" style="color:#E41754">147</div>
27 27
         </div>
28 28
       </div>
29 29
     </div>
@@ -33,80 +33,80 @@
33 33
       <div class="charts-col charts-col-main">
34 34
         <!-- 第一行 -->
35 35
         <div class="charts-grid charts-grid-2">
36
-          <WhiteCard title="监察问题统计" bgColor="#dbeafe">
36
+          <WhiteCard title="监察问题统计" bgColor="#FFF4E4">
37 37
             <div ref="supervisionLineRef" class="chart-box" />
38 38
           </WhiteCard>
39
-          <WhiteCard title="问题类型分布" bgColor="#dbeafe">
39
+          <WhiteCard title="问题类型分布" bgColor="#FFF4E4">
40 40
             <div ref="problemTypeRef" class="chart-box" />
41 41
           </WhiteCard>
42 42
         </div>
43 43
         <!-- 第二行 -->
44 44
         <div class="charts-grid charts-grid-2">
45
-          <WhiteCard title="班组问题统计(监察)" bgColor="#dcfce7">
45
+          <WhiteCard title="班组问题统计(监察)" bgColor="#FFF4E4">
46 46
             <div ref="teamSupervisionRef" class="chart-box" />
47 47
           </WhiteCard>
48
-          <WhiteCard title="区域问题占比(监察)" bgColor="#fef3c7">
48
+          <WhiteCard title="区域问题占比(监察)" bgColor="#FFF4E4">
49 49
             <div ref="areaPieRef" class="chart-box" />
50 50
           </WhiteCard>
51 51
         </div>
52 52
         <!-- 第三行 -->
53 53
         <div class="charts-grid charts-grid-2">
54
-          <WhiteCard title="班组问题统计(实时)" bgColor="#dcfce7">
54
+          <WhiteCard title="班组问题统计(实时)" bgColor="#E4F0E5">
55 55
             <div ref="teamRealtimeRef" class="chart-box" />
56 56
           </WhiteCard>
57
-          <WhiteCard title="实时质控拦截情况" bgColor="#dcfce7">
57
+          <WhiteCard title="实时质控拦截情况" bgColor="#E4F0E5">
58 58
             <div ref="realtimeLineRef" class="chart-box" />
59 59
           </WhiteCard>
60 60
         </div>
61 61
         <!-- 第四行 -->
62 62
         <div class="charts-grid charts-grid-2">
63
-          <WhiteCard title="实时质控开机年龄分布" bgColor="#dbeafe">
63
+          <WhiteCard title="实时质控开机年龄分布" bgColor="#E4F0E5">
64 64
             <div ref="yearRingRef" class="chart-box" />
65 65
           </WhiteCard>
66
-          <WhiteCard title="实时质控围难易度" bgColor="#dbeafe">
66
+          <WhiteCard title="实时质控图像难易度" bgColor="#E4F0E5">
67 67
             <div ref="difficultyRef" class="chart-box" />
68 68
           </WhiteCard>
69 69
         </div>
70 70
         <!-- 实时质控开机年限分布 -->
71 71
         <div class="charts-grid charts-grid-2">
72
-          <WhiteCard title="实时质控开机年限分布" bgColor="#dcfce7">
72
+          <WhiteCard title="实时质控开机年限分布" bgColor="#E4F0E5">
73 73
             <div ref="yearLimitRef" class="chart-box" />
74 74
           </WhiteCard>
75
-          <WhiteCard title="实时拦截物品汇总" bgColor="#dbeafe">
75
+          <WhiteCard title="实时拦截物品汇总" bgColor="#E4F0E5">
76 76
             <div ref="interceptItemsRef" class="chart-box" />
77 77
           </WhiteCard>
78 78
         </div>
79 79
         <!-- 第五行 -->
80 80
         <div class="charts-grid charts-grid-2">
81 81
 
82
-          <WhiteCard title="服务巡查" bgColor="#dbeafe">
82
+          <WhiteCard title="服务巡查" bgColor="#E4EBFF">
83 83
             <div ref="servicePatrolRef" class="chart-box" />
84 84
           </WhiteCard>
85
-          <WhiteCard title="服务巡查" bgColor="#e8eaf6">
85
+          <WhiteCard title="服务巡查" bgColor="#E4EBFF">
86 86
             <div ref="servicePatrolLineRef" class="chart-box" />
87 87
           </WhiteCard>
88 88
         </div>
89 89
         <!-- 第六行 -->
90 90
         <div class="charts-grid charts-grid-2">
91
-          <WhiteCard title="投诉涉及班组情况" bgColor="#fce4ec">
91
+          <WhiteCard title="投诉涉及班组情况" bgColor="#F0ACA1">
92 92
             <div ref="complaintTeamRef" class="chart-box" />
93 93
           </WhiteCard>
94
-          <WhiteCard title="不安全事件发生对比" bgColor="#dbeafe">
94
+          <WhiteCard title="不安全事件发生对比" bgColor="#DCDCDF">
95 95
             <div ref="unsafeCompareRef" class="chart-box" />
96 96
           </WhiteCard>
97 97
         </div>
98 98
         <!-- 第七行 -->
99 99
         <div class="charts-grid charts-grid-2">
100
-          <WhiteCard title="亚健康人数占比" bgColor="#fef3c7">
100
+          <WhiteCard title="亚健康人数占比" bgColor="#FFDBA1">
101 101
             <div ref="subhealthPieRef" class="chart-box" />
102 102
           </WhiteCard>
103
-          <WhiteCard title="各班组健康与亚健康比例" bgColor="#fef3c7">
103
+          <WhiteCard title="各班组健康与亚健康比例" bgColor="#FFDBA1">
104 104
             <div ref="healthRatioRef" class="chart-box" />
105 105
           </WhiteCard>
106 106
         </div>
107 107
         <!-- 第八行 -->
108 108
         <div class="charts-grid charts-grid-1">
109
-          <WhiteCard title="旅检三部人员年龄分布表" bgColor="#dbeafe">
109
+          <WhiteCard title="旅检三部人员年龄分布表" bgColor="#FFFFFF">
110 110
             <div ref="ageDistRef" class="chart-box-wide" />
111 111
           </WhiteCard>
112 112
         </div>
@@ -114,101 +114,17 @@
114 114
 
115 115
       <!-- 右侧排行榜 -->
116 116
       <div class="charts-col-side">
117
-        <WhiteCard title="监察问题(总)" bgColor="#f0f4ff">
118
-          <div class="rank-list">
119
-            <div class="rank-avatar-row">
120
-              <div class="rank-avatar-item" v-for="(item, i) in superVisionTop3" :key="i">
121
-                <div class="rank-avatar-wrapper" :class="'rank-pos-' + (i + 1)">
122
-                  <div class="rank-avatar" :style="{ background: item.color }">{{ item.name.slice(-2) }}</div>
123
-                  <span class="rank-badge">{{ i + 1 }}</span>
124
-                </div>
125
-                <div class="rank-name">{{ item.name }}</div>
126
-                <div class="rank-num">{{ item.num }}</div>
127
-              </div>
128
-            </div>
129
-            <div class="rank-table">
130
-              <div class="rank-tr rank-th">
131
-                <span>排名</span><span>姓名</span><span>问题数</span>
132
-              </div>
133
-              <div class="rank-tr" v-for="(item, i) in superVisionList" :key="i">
134
-                <span>{{ i + 1 }}</span>
135
-                <span>{{ item.name }}</span>
136
-                <span>{{ item.num }}</span>
137
-              </div>
138
-            </div>
139
-          </div>
117
+        <WhiteCard title="监察问题(总)" bgColor="#FFF4E4">
118
+          <RankList :top3="superVisionTop3" :list="superVisionList" num-label="问题数" />
140 119
         </WhiteCard>
141
-        <WhiteCard title="实时漏洞检情况(总)" bgColor="#f0fdf4">
142
-          <div class="rank-list">
143
-            <div class="rank-avatar-row">
144
-              <div class="rank-avatar-item" v-for="(item, i) in vulnTop3" :key="i">
145
-                <div class="rank-avatar-wrapper" :class="'rank-pos-' + (i + 1)">
146
-                  <div class="rank-avatar" :style="{ background: item.color }">{{ item.name.slice(-2) }}</div>
147
-                  <span class="rank-badge">{{ i + 1 }}</span>
148
-                </div>
149
-                <div class="rank-name">{{ item.name }}</div>
150
-                <div class="rank-num">{{ item.num }}</div>
151
-              </div>
152
-            </div>
153
-            <div class="rank-table">
154
-              <div class="rank-tr rank-th">
155
-                <span>排名</span><span>姓名</span><span>问题数</span>
156
-              </div>
157
-              <div class="rank-tr" v-for="(item, i) in vulnList" :key="i">
158
-                <span>{{ i + 1 }}</span>
159
-                <span>{{ item.name }}</span>
160
-                <span>{{ item.num }}</span>
161
-              </div>
162
-            </div>
163
-          </div>
120
+        <WhiteCard title="实时漏检情况(总)" bgColor="#E4F0E5">
121
+          <RankList :top3="vulnTop3" :list="vulnList" num-label="问题数" />
164 122
         </WhiteCard>
165
-        <WhiteCard title="航站楼加分" bgColor="#eff6ff">
166
-          <div class="rank-list">
167
-            <div class="rank-avatar-row">
168
-              <div class="rank-avatar-item" v-for="(item, i) in bonusTop3" :key="i">
169
-                <div class="rank-avatar-wrapper" :class="'rank-pos-' + (i + 1)">
170
-                  <div class="rank-avatar" :style="{ background: item.color }">{{ item.name.slice(-2) }}</div>
171
-                  <span class="rank-badge">{{ i + 1 }}</span>
172
-                </div>
173
-                <div class="rank-name">{{ item.name }}</div>
174
-                <div class="rank-num">{{ item.num }}</div>
175
-              </div>
176
-            </div>
177
-            <div class="rank-table">
178
-              <div class="rank-tr rank-th">
179
-                <span>排名</span><span>姓名</span><span>加分</span>
180
-              </div>
181
-              <div class="rank-tr" v-for="(item, i) in bonusList" :key="i">
182
-                <span>{{ i + 1 }}</span>
183
-                <span>{{ item.name }}</span>
184
-                <span>{{ item.num }}</span>
185
-              </div>
186
-            </div>
187
-          </div>
123
+        <WhiteCard title="航站楼加分" bgColor="#E4EBFF">
124
+          <RankList :top3="bonusTop3" :list="bonusList" num-label="加分" />
188 125
         </WhiteCard>
189
-        <WhiteCard title="查获数量" bgColor="#f0f4ff">
190
-          <div class="rank-list">
191
-            <div class="rank-avatar-row">
192
-              <div class="rank-avatar-item" v-for="(item, i) in seizureTop3" :key="i">
193
-                <div class="rank-avatar-wrapper" :class="'rank-pos-' + (i + 1)">
194
-                  <div class="rank-avatar" :style="{ background: item.color }">{{ item.name.slice(-2) }}</div>
195
-                  <span class="rank-badge">{{ i + 1 }}</span>
196
-                </div>
197
-                <div class="rank-name">{{ item.name }}</div>
198
-                <div class="rank-num">{{ item.num }}</div>
199
-              </div>
200
-            </div>
201
-            <div class="rank-table">
202
-              <div class="rank-tr rank-th">
203
-                <span>排名</span><span>姓名</span><span>查获数</span>
204
-              </div>
205
-              <div class="rank-tr" v-for="(item, i) in seizureList" :key="i">
206
-                <span>{{ i + 1 }}</span>
207
-                <span>{{ item.name }}</span>
208
-                <span>{{ item.num }}</span>
209
-              </div>
210
-            </div>
211
-          </div>
126
+        <WhiteCard title="查获数量" bgColor="#FFFFFF">
127
+          <RankList :top3="seizureTop3" :list="seizureList" num-label="查获数" />
212 128
         </WhiteCard>
213 129
       </div>
214 130
     </div>
@@ -221,15 +137,16 @@ import { ref, computed, onMounted } from 'vue'
221 137
 import { useECharts } from '@/hooks/useEcharts'
222 138
 import WhiteCard from '../components/whiteCard.vue'
223 139
 import Page from '../components/page.vue'
140
+import RankList from './components/RankList.vue'
224 141
 import * as echarts from 'echarts'
225 142
 
226 143
 // ─── 顶部指标卡片 ───────────────────────────────
227 144
 const metricCards = ref([
228
-  { title: '监察问题数(本月)', value: '11', change: '57.69%', changeType: 'down', changeColor: '#ef4444', color: '#f59e0b', bg: '#dbeafe', sparkColor: '#3b82f6' },
229
-  { title: '实时质控数(本月)', value: '21', change: '56.25%', changeType: 'down', changeColor: '#ef4444', color: '#22c55e', bg: '#dcfce7', sparkColor: '#22c55e' },
230
-  { title: '服务巡查(本月)', value: '4', change: '0%', changeType: 'flat', changeColor: '#6b7280', color: '#3b82f6', bg: '#dbeafe', sparkColor: '#3b82f6' },
231
-  { title: '投诉情况(本月)', value: '1', change: '88.89%', changeType: 'down', changeColor: '#ef4444', color: '#ef4444', bg: '#fce4ec', sparkColor: '#ef4444' },
232
-  { title: '不安全事件发生次数(今年)', value: '3', change: '57.14%', changeType: 'down', changeColor: '#ef4444', color: '#ffffff', bg: '#6b7280', sparkColor: '#9ca3af' },
145
+  { title: '监察问题数(本月)', value: '11', change: '57.69%', changeType: 'down', changeColor: '#ef4444', color: '#f59e0b', bg: '#FFF4E4', sparkColor: '#3b82f6' },
146
+  { title: '实时质控数(本月)', value: '21', change: '56.25%', changeType: 'down', changeColor: '#ef4444', color: '#22c55e', bg: '#E4F0E5', sparkColor: '#22c55e' },
147
+  { title: '服务巡查(本月)', value: '4', change: '0%', changeType: 'flat', changeColor: '#6b7280', color: '#3b82f6', bg: '#E6E8FF', sparkColor: '#3b82f6' },
148
+  { title: '投诉情况(本月)', value: '1', change: '88.89%', changeType: 'down', changeColor: '#ef4444', color: '#ef4444', bg: '#F0ACA1', sparkColor: '#ef4444' },
149
+  { title: '不安全事件发生次数(今年)', value: '3', change: '57.14%', changeType: 'down', changeColor: '#ef4444', color: '#ffffff', bg: '#A5A5A5', sparkColor: '#9ca3af' },
233 150
 ])
234 151
 
235 152
 // ─── 图表 ref ────────────────────────────────────
@@ -519,6 +436,7 @@ onMounted(() => {
519 436
 
520 437
 <style lang="scss" scoped>
521 438
 .org-profile {
439
+  background-color: #F2F3F7;
522 440
   padding: 15px;
523 441
   box-sizing: border-box;
524 442
   min-height: calc(100vh - 90px);
@@ -635,11 +553,11 @@ onMounted(() => {
635 553
     }
636 554
 
637 555
     .metric-warning-top {
638
-      background: linear-gradient(135deg, #f59e0b, #d97706) !important;
556
+      background: #F2E5FF !important;
639 557
     }
640 558
 
641 559
     .metric-warning-bottom {
642
-      background: linear-gradient(135deg, #fbbf24, #f59e0b) !important;
560
+      background: #FFDBA1 !important;
643 561
     }
644 562
   }
645 563
 
@@ -688,120 +606,6 @@ onMounted(() => {
688 606
     }
689 607
   }
690 608
 
691
-  // ── 排行榜 ──
692
-  .rank-list {
693
-    .rank-avatar-row {
694
-      display: flex;
695
-      justify-content: center;
696
-      gap: 20px;
697
-      margin-top: 15px;
698
-      margin-bottom: 12px;
699
-
700
-      .rank-avatar-item {
701
-        display: flex;
702
-        flex-direction: column;
703
-        align-items: center;
704
-        gap: 6px;
705
-
706
-        &:nth-child(2) {
707
-          transform: translateY(-10px);
708
-        }
709
-
710
-        .rank-avatar-wrapper {
711
-          position: relative;
712
-          display: inline-flex;
713
-          align-items: center;
714
-          justify-content: center;
715
-          border-radius: 50%;
716
-
717
-
718
-          &.rank-pos-1 {
719
-            border: 3px solid #94a3b8;
720
-
721
-            .rank-badge {
722
-              background: #94a3b8;
723
-            }
724
-
725
-          }
726
-
727
-          &.rank-pos-2 {
728
-            border: 3px solid #fbbf24;
729
-
730
-            .rank-badge {
731
-              background: #fbbf24;
732
-            }
733
-          }
734
-
735
-          &.rank-pos-3 {
736
-            border: 3px solid #fb923c;
737
-
738
-            .rank-badge {
739
-              background: #fb923c;
740
-            }
741
-          }
742
-
743
-          .rank-avatar {
744
-            width: 44px;
745
-            height: 44px;
746
-            border-radius: 50%;
747
-            display: flex;
748
-            align-items: center;
749
-            justify-content: center;
750
-            color: #fff;
751
-            font-size: 16px;
752
-            font-weight: bold;
753
-          }
754
-
755
-          .rank-badge {
756
-            position: absolute;
757
-            bottom: -8px;
758
-            left: 50%;
759
-            transform: translateX(-50%);
760
-            width: 12px;
761
-            height: 12px;
762
-            border-radius: 50%;
763
-            display: flex;
764
-            align-items: center;
765
-            justify-content: center;
766
-            font-size: 11px;
767
-            font-weight: bold;
768
-            color: #fff;
769
-          }
770
-        }
771
-
772
-        .rank-name {
773
-          font-size: 12px;
774
-          color: #475569;
775
-        }
776 609
 
777
-        .rank-num {
778
-          font-size: 18px;
779
-          color: '#1e293b';
780
-          font-weight: bold;
781
-        }
782
-      }
783
-    }
784
-
785
-    .rank-table {
786
-      .rank-tr {
787
-        display: flex;
788
-        padding: 5px 0;
789
-        font-size: 12px;
790
-        color: #64748b;
791
-        border-bottom: 1px solid #e2e8f0;
792
-
793
-        span {
794
-          flex: 1;
795
-          text-align: center;
796
-        }
797
-      }
798
-
799
-      .rank-th {
800
-        color: '#1e293b';
801
-        font-weight: bold;
802
-        border-bottom: 2px solid #cbd5e1;
803
-      }
804
-    }
805
-  }
806 610
 }
807 611
 </style>

+ 6 - 21
src/views/warningManage/redLineWarning/index.vue

@@ -62,9 +62,9 @@
62 62
                         </el-table-column>
63 63
                         <el-table-column prop="deptName" label="所属部门" />
64 64
                         <el-table-column prop="eventTime" label="事件时间" sortable width="180" />
65
-                        <el-table-column prop="dimName" label="维度名称" />
66
-                        <el-table-column prop="secondIndicator" label="二级指标名称" />
67
-                        <el-table-column prop="deductionTotal" label="扣分分值合计" sortable />
65
+                        <el-table-column prop="dimensionName" label="维度名称" />
66
+                        <el-table-column prop="level2Name" label="二级指标名称" />
67
+                        <el-table-column prop="totalScore" label="扣分分值合计" sortable />
68 68
                         <el-table-column prop="occurrenceCount" label="发生次数" sortable />
69 69
                         <el-table-column prop="overallScore" label="预警等级">
70 70
                             <template #default="{ row }">
@@ -77,7 +77,7 @@
77 77
                                 <span v-else class="status-warning">正常范围</span>
78 78
                             </template>
79 79
                         </el-table-column>
80
-                        <el-table-column prop="coreRisk" label="核心风险" />
80
+                        <el-table-column prop="coreRisks" label="核心风险" />
81 81
                         <el-table-column prop="statusLabel" label="状态标签">
82 82
                             <template #default="{ row }">
83 83
                                 <span v-if="row.overallScore < 75" style="color:#b91c1c;"><i class="fas fa-bell"></i>
@@ -151,7 +151,7 @@ const coreRisksOrOutstandingAchievementsList = [
151 151
     "临近预警线,服务巡查扣分1次"
152 152
 ]
153 153
 
154
-const dimNames = ["安全管理", "服务质量", "运行效率", "队伍建设"]
154
+
155 155
 const indicatorNames = ["安全违规次数", "旅客投诉率", "安检差错率", "培训合格率", "操作规范度"]
156 156
 const deductionScores = [2, 5, 3, 1, 4]
157 157
 const occurrenceCounts = [1, 2, 3, 1, 2]
@@ -162,21 +162,6 @@ const queryParams = reactive({
162 162
     pageSize: 10
163 163
 })
164 164
 
165
-for (let i = 0; i < newNames.length; i++) {
166
-    employeesData.value.push({
167
-        userId: String(10021 + i),
168
-        nickName: newNames[i],
169
-        deptName: deptList[i % deptList.length],
170
-        eventTime: `2026-0${(i % 9) + 1}-${String((i * 3 + 10) % 28 + 1).padStart(2, '0')}`,
171
-        overallScore: scores[i % scores.length],
172
-        dimName: dimNames[i % dimNames.length],
173
-        secondIndicator: indicatorNames[i % indicatorNames.length],
174
-        deductionTotal: deductionScores[i % deductionScores.length],
175
-        occurrenceCount: occurrenceCounts[i % occurrenceCounts.length],
176
-        coreRisk: coreRisksOrOutstandingAchievementsList[i % coreRisksOrOutstandingAchievementsList.length],
177
-        statusLabel: scores[i % scores.length] < 75 ? '1' : scores[i % scores.length] >= 90 ? '2' : '3'
178
-    })
179
-}
180 165
 
181 166
 // 将组织架构数据转换为树形数据
182 167
 const transformCascadeData = (nodes) => {
@@ -226,7 +211,7 @@ const getSelectedInfo = (selectedValue) => {
226 211
 }
227 212
 
228 213
 const allFilteredEmployees = computed(() => {
229
-    let result = employeesData.value.ledgerWarningDetailItemList || []
214
+    let result = employeesData.value || []
230 215
 
231 216
     // 预警等级筛选
232 217
     if (selectedAlertLevel.value) {

Datei-Diff unterdrückt, da er zu groß ist
+ 772 - 544
src/views/warningManage/warningPage/index.vue