@appthen/cli 1.2.10 → 1.2.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/.gitignore +1 -0
  2. package/bin/main.js +45 -0
  3. package/dist/index.js +1108 -267
  4. package/package.json +1 -1
  5. package/tests/test-app/.appthen/shadow-space-100001-test-app-e99876b1.json +1406 -0
  6. package/tests/test-app/.appthen/shadow-space-unknown-user-test-app-e99876b1.json +1060 -0
  7. package/tests/test-app/.appthen/space-config.json +8 -0
  8. package/tests/test-app/docs/AI-Workflow.flow +112 -0
  9. package/tests/test-app/docs/Logic-1.flow +16 -0
  10. package/tests/test-app/docs/Logic.flow +16 -0
  11. package/tests/test-app/docs/Project-Blueprint-1.flow +119 -0
  12. package/tests/test-app/docs/Project-Blueprint.flow +119 -0
  13. package/tests/test-app/docs/README.md +3 -0
  14. package/tests/test-app/docs/claude.md +194 -0
  15. package/tests/test-app/docs/page_requirement_analysis.md +149 -0
  16. package/tests/test-app/docs//345/267/245/345/215/225/347/256/241/347/220/206/347/263/273/347/273/237/350/257/246/347/273/206/350/256/276/350/256/241.md +377 -0
  17. package/tests/test-app/src/apis/AddTodoPost.api.ts +42 -0
  18. package/tests/test-app/src/apis/DeleteTodoPost.api.ts +32 -0
  19. package/tests/test-app/src/apis/GetListPost.api.ts +38 -0
  20. package/tests/test-app/src/apis/TicketAttachmentUploadPost.api.ts +42 -0
  21. package/tests/test-app/src/apis/UpdateTodoPost.api.ts +46 -0
  22. package/tests/test-app/src/app.css +15 -0
  23. package/tests/test-app/src/cloud_functions/ticket|attachment|upload.node.ts +86 -0
  24. package/tests/test-app/src/cloud_functions/ticket|comment|add.node.ts +65 -0
  25. package/tests/test-app/src/cloud_functions/types|entity|Ticket.node.ts +88 -0
  26. package/tests/test-app/src/cloud_functions/types|entity|TicketAttachment.node.ts +70 -0
  27. package/tests/test-app/src/cloud_functions/types|entity|TicketCategory.node.ts +56 -0
  28. package/tests/test-app/src/cloud_functions/types|entity|TicketComment.node.ts +62 -0
  29. package/tests/test-app/src/cloud_functions/types|entity|TicketHistory.node.ts +74 -0
  30. package/tests/test-app/src/cloud_functions/types|entity|TicketPriority.node.ts +68 -0
  31. package/tests/test-app/src/cloud_functions/types|entity|TicketStatus.node.ts +63 -0
  32. package/tests/test-app/src/cloud_functions/types|models|CreateTicketParams.node.ts +20 -0
  33. package/tests/test-app/src/cloud_functions/types|models|TicketListParams.node.ts +30 -0
  34. package/tests/test-app/src/cloud_functions/types|models|UpdateTicketParams.node.ts +22 -0
  35. package/tests/test-app/src/components/Button.js +11 -0
  36. package/tests/test-app/src/components/MouduleDemoNzp.tsx +40 -0
  37. package/tests/test-app/src/components/Timeline.tsx +145 -0
  38. package/tests/test-app/src/index.ts +2 -0
  39. package/tests/test-app/src/modules/work_order_module/apis/TicketCommentAddPost.api.ts +48 -0
  40. package/tests/test-app/src/modules/work_order_module/apis/TicketCreatePost.api.ts +52 -0
  41. package/tests/test-app/src/modules/work_order_module/apis/TicketDeleteDelete.api.ts +39 -0
  42. package/tests/test-app/src/modules/work_order_module/apis/TicketDetailGet.api.ts +39 -0
  43. package/tests/test-app/src/modules/work_order_module/apis/TicketListGet.api.ts +61 -0
  44. package/tests/test-app/src/modules/work_order_module/apis/TicketUpdatePut.api.ts +57 -0
  45. package/tests/test-app/src/modules/work_order_module/apis/TrainDoorFaultListGet.ts +76 -0
  46. package/tests/test-app/src/modules/work_order_module/apis/TrainDoorListGet.ts +76 -0
  47. package/tests/test-app/src/modules/work_order_module/apis/TrainDoorOperationRecordsGet.ts +284 -0
  48. package/tests/test-app/src/modules/work_order_module/apis/TrainDoorStatisticsGet.ts +96 -0
  49. package/tests/test-app/src/modules/work_order_module/cloud_function/category|list.node.ts +40 -0
  50. package/tests/test-app/src/modules/work_order_module/cloud_function/priority|list.node.ts +26 -0
  51. package/tests/test-app/src/modules/work_order_module/cloud_function/status|list.node.ts +26 -0
  52. package/tests/test-app/src/modules/work_order_module/cloud_function/ticket|create.node.ts +54 -0
  53. package/tests/test-app/src/modules/work_order_module/cloud_function/ticket|delete.node.ts +55 -0
  54. package/tests/test-app/src/modules/work_order_module/cloud_function/ticket|detail.node.ts +65 -0
  55. package/tests/test-app/src/modules/work_order_module/cloud_function/ticket|list.node.ts +85 -0
  56. package/tests/test-app/src/modules/work_order_module/cloud_function/ticket|update.node.ts +73 -0
  57. package/tests/test-app/src/modules/work_order_module/data_model/Ticket.m.ts +85 -0
  58. package/tests/test-app/src/modules/work_order_module/data_model/TicketCategory.m.ts +53 -0
  59. package/tests/test-app/src/modules/work_order_module/data_model/TicketStatus.m.ts +60 -0
  60. package/tests/test-app/src/modules/work_order_module//345/267/245/345/215/225/347/263/273/347/273/237/344/272/247/345/223/201/350/256/276/350/256/241/346/226/207/346/241/243.md +301 -0
  61. package/tests/test-app/src/modules/work_order_module//345/267/245/345/215/225/347/263/273/347/273/237/345/274/200/345/217/221/344/273/273/345/212/241/345/210/206/345/267/245/346/226/207/346/241/243.md +345 -0
  62. package/tests/test-app/src/pages/SLAManagement.tsx +668 -0
  63. package/tests/test-app/src/pages/TicketCreate.tsx +27 -0
  64. package/tests/test-app/src/pages/TicketDetail.tsx +27 -0
  65. package/tests/test-app/src/pages/TicketList.tsx +27 -0
  66. package/tests/test-app/src/pages/TicketManagementPage.tsx +1238 -0
  67. package/tests/test-app/src/pages/VisualAIIDEUpgrade.tsx +245 -0
  68. package/tests/test-app/src/pages/appthen_guide/ComponentTreeUnderstanding.tsx +26 -0
  69. package/tests/test-app/src/pages/appthen_guide/DataBindingLearning.tsx +26 -0
  70. package/tests/test-app/src/pages/back-end/adminRootLayout.tsx +155 -0
  71. package/tests/test-app/src/pages/back-end/adminRootLayout10.tsx +157 -0
  72. package/tests/test-app/src/pages/back-end/adminRootLayout2.tsx +156 -0
  73. package/tests/test-app/src/pages/back-end/adminRootLayout3.tsx +156 -0
  74. package/tests/test-app/src/pages/back-end/adminRootLayout4.tsx +157 -0
  75. package/tests/test-app/src/pages/back-end/adminRootLayout5.tsx +157 -0
  76. package/tests/test-app/src/pages/back-end/adminRootLayout6.tsx +157 -0
  77. package/tests/test-app/src/pages/back-end/adminRootLayout7.tsx +157 -0
  78. package/tests/test-app/src/pages/back-end/adminRootLayout8.tsx +157 -0
  79. package/tests/test-app/src/pages/back-end/adminRootLayout9.tsx +157 -0
  80. package/tests/test-app/src/pages/back-end/backgroundManagementSystem.css +5 -0
  81. package/tests/test-app/src/pages/back-end/backgroundManagementSystem.tsx +1745 -0
  82. package/tests/test-app/src/pages/component/WorkOrderCard.tsx +140 -0
  83. package/tests/test-app/src/pages/cover.tsx +42 -0
  84. package/tests/test-app/src/pages/data_dashboard/blueBrightGreenTechnologyWind.css +181 -0
  85. package/tests/test-app/src/pages/data_dashboard/blueBrightGreenTechnologyWind.tsx +225 -0
  86. package/tests/test-app/src/pages/data_dashboard/blueLargeScreen.css +181 -0
  87. package/tests/test-app/src/pages/data_dashboard/blueLargeScreen.tsx +138 -0
  88. package/tests/test-app/src/pages/data_dashboard/component_library/BlueBrightGreenBorder.tsx +47 -0
  89. package/tests/test-app/src/pages/data_dashboard/component_library/FullScreenContainer.tsx +133 -0
  90. package/tests/test-app/src/pages/description_of_mock_interface.md +32 -0
  91. package/tests/test-app/src/pages/digitalLargeScreen.css +181 -0
  92. package/tests/test-app/src/pages/digitalLargeScreen.tsx +1417 -0
  93. package/tests/test-app/src/pages/mobile_terminal/PersonalCenter.css +3 -0
  94. package/tests/test-app/src/pages/mobile_terminal/PersonalCenter.tsx +362 -0
  95. package/tests/test-app/src/pages/mobile_terminal/WorkOrderHomepage.tsx +337 -0
  96. package/tests/test-app/src/pages/mobile_terminal/newWorkOrder.tsx +224 -0
  97. package/tests/test-app/src/pages/mobile_terminal/tabbar.tsx +67 -0
  98. package/tests/test-app/src/pages/mobile_terminal/uiHandsOnPractice.tsx +638 -0
  99. package/tests/test-app/src/pages/mobile_terminal/workOrderDetails.tsx +346 -0
  100. package/tests/test-app/src/pages/mobile_terminal/workOrderPage.tsx +345 -0
  101. package/tests/test-app/src/pages/testPage.css +3 -0
  102. package/tests/test-app/src/pages/testPage.tsx +158 -0
  103. package/tests/test-app/src/pages/web_version/website.css +205 -0
  104. package/tests/test-app/src/pages/web_version/website.tsx +1066 -0
  105. package/tests/test-app/src/pages//345/276/205/345/212/236.apidoc.json +336 -0
  106. package/tests/test-app/src/project.json +1120 -0
  107. package/tests/test-app/src/store/global.store.ts +10 -0
  108. package/tests/test-app/src/types/CreateTicketParams.m.ts +20 -0
  109. package/tests/test-app/src/types/SLAPolicy.ts +50 -0
  110. package/tests/test-app/src/types/Ticket.ts +68 -0
  111. package/tests/test-app/src/types/TicketAttachment.m.ts +67 -0
  112. package/tests/test-app/src/types/TicketComment.m.ts +59 -0
  113. package/tests/test-app/src/types/TicketEvaluation.ts +44 -0
  114. package/tests/test-app/src/types/TicketHistory.m.ts +71 -0
  115. package/tests/test-app/src/types/TicketListParams.m.ts +30 -0
  116. package/tests/test-app/src/types/TicketPriority.m.ts +65 -0
  117. package/tests/test-app/src/types/TicketRecord.ts +47 -0
  118. package/tests/test-app/src/types/TrainDoor.ts +284 -0
  119. package/tests/test-app/src/types/UpdateTicketParams.m.ts +22 -0
  120. package/tests/test-app/src/utils/__afterRequest.util.ts +3 -0
  121. package/tests/test-app/src/utils/__beforeRequest.util.ts +10 -0
  122. package/tests/test-app/src/utils/testGlobalAction.util.ts +7 -0
@@ -0,0 +1,1417 @@
1
+ /**
2
+ * 数字化大屏
3
+ * @type Page
4
+ * @route /doorsystem
5
+ * @screen 1920x1080 #2c2c2c
6
+ * @frames web
7
+ */
8
+ import React from 'react';
9
+ import { Modal, Page, ScrollView, Text, View } from '@appthen/react';
10
+ import BlueBrightGreenBorder from '/src/pages/border/BlueBrightGreenBorder';
11
+ import { Button, DatePicker, Select } from '@appthen/antd';
12
+ import { ECharts } from '@appthen/echarts';
13
+ import FullScreenContainer from '/src/pages/screen/FullScreenContainer';
14
+ import './digitalLargeScreen.css';
15
+
16
+ class IProps {}
17
+
18
+ /*
19
+ * 数据与接口请求定义
20
+ */
21
+ class IState {
22
+ /* 线路选择 */
23
+ selectedLine: string;
24
+ /* 时间范围选择 */
25
+ startTime: string;
26
+ endTime: string;
27
+ /* Mock故障统计数据 */
28
+ mockStatus: {
29
+ /* 今日故障数量 */todayFaultCount?: number,
30
+ /* 活跃故障数量 */activeFaultCount?: number,
31
+ /* 故障列车数量 */faultTrainCount?: number,
32
+ /* 故障设备数量 */faultDeviceCount?: number,
33
+ };
34
+ /* Mock预警统计数据 */
35
+ mockWarningStatus: {
36
+ /* 今日预警数量 */todayWarningCount?: number,
37
+ /* 预警设备数量 */warningDeviceCount?: number,
38
+ };
39
+ /* Mock列车列表数据 */
40
+ mockTrains: {
41
+ /* 列车编号 */trainNo?: string,
42
+ /* 列车状态 */status?: string,
43
+ /* 车辆数量 */carCount?: number,
44
+ /* 在线状态 */isOnline?: boolean,
45
+ }[];
46
+ /* Mock故障列表 */
47
+ mockFaultList: {
48
+ /* 产品名称 */productName?: string,
49
+ /* 车厢号 */carNo?: string,
50
+ /* 设备编号 */deviceNo?: string,
51
+ /* 故障名称 */faultName?: string,
52
+ /* 故障显示名称 */faultDisplayName?: string,
53
+ /* 报警时间 */alarmTime?: string,
54
+ /* 故障描述 */faultDescription?: string,
55
+ /* 故障状态 */faultStatus?: string,
56
+ /* 开始时间 */startTime?: string,
57
+ endTime?: any,
58
+ /* 应急措施 */emergencyMeasures?: string,
59
+ /* 库房措施 */warehouseMeasures?: string,
60
+ }[];
61
+ /* Mock预警列表 */
62
+ mockWarningList: {
63
+ /* 产品名称 */productName?: string,
64
+ /* 车厢号 */carNo?: string,
65
+ /* 设备编号 */deviceNo?: string,
66
+ /* 预警名称 */warningName?: string,
67
+ /* 预警显示名称 */warningDisplayName?: string,
68
+ /* 预警时间 */warningTime?: string,
69
+ /* 预警描述 */warningDescription?: string,
70
+ /* 预警级别 */warningLevel?: string,
71
+ }[];
72
+ /* 当前选中的列车状态类型 */
73
+ trainStatusFilter: string;
74
+ /* all, normal, fault, warning */
75
+ mockBrakeLifeData: {
76
+ /* @example 制动系统-0601 */deviceName?: string,
77
+ /* @example 85 */remainingLife?: number,
78
+ /* @example 2024-06-01 */maintenanceTime?: string,
79
+ }[];
80
+ /* Mock故障趋势数据 */
81
+ mockFaultTrend: {
82
+ /* @example 00:00 */time?: string,
83
+ /* @example 5 */faults?: number,
84
+ /* @example 3 */warnings?: number,
85
+ }[];
86
+ /* Mock车辆故障排序数据 */
87
+ mockVehicleFaultSort: {
88
+ /* @example 602 */name?: string,
89
+ /* @example 8 */faults?: number,
90
+ }[];
91
+ /* Mock低故障率TOP5数据 */
92
+ mockLowFaultTop5: {
93
+ /* @example 604 */name?: string,
94
+ /* @example 0.2 */value?: number,
95
+ }[];
96
+ }
97
+
98
+ class Document extends React.Component<IProps, IState> {
99
+ state = {
100
+ selectedLine: '6号线',
101
+ startTime: '',
102
+ endTime: '',
103
+ mockStatus: {
104
+ todayFaultCount: 12,
105
+ activeFaultCount: 8,
106
+ faultTrainCount: 5,
107
+ faultDeviceCount: 23,
108
+ },
109
+ mockWarningStatus: { todayWarningCount: 15, warningDeviceCount: 18 },
110
+ mockTrains: [
111
+ { trainNo: '0601', status: 'normal', carCount: 6, isOnline: true },
112
+ { trainNo: '0602', status: 'fault', carCount: 6, isOnline: true },
113
+ { trainNo: '0603', status: 'warning', carCount: 6, isOnline: true },
114
+ { trainNo: '0604', status: 'normal', carCount: 6, isOnline: true },
115
+ { trainNo: '0605', status: 'normal', carCount: 6, isOnline: true },
116
+ { trainNo: '0606', status: 'warning', carCount: 6, isOnline: true },
117
+ { trainNo: '0607', status: 'normal', carCount: 6, isOnline: true },
118
+ { trainNo: '0608', status: 'fault', carCount: 6, isOnline: true },
119
+ ],
120
+ mockFaultList: [
121
+ {
122
+ productName: '制动系统',
123
+ carNo: '02',
124
+ deviceNo: 'B001',
125
+ faultName: '制动压力异常',
126
+ faultDisplayName: '制动压力异常',
127
+ alarmTime: '2024-01-01 10:30:00',
128
+ faultDescription: '制动系统压力传感器故障',
129
+ faultStatus: 'active',
130
+ startTime: '2024-01-01 10:30:00',
131
+ emergencyMeasures: '立即检修',
132
+ warehouseMeasures: '更换传感器',
133
+ },
134
+ {
135
+ productName: '车门系统',
136
+ carNo: '03',
137
+ deviceNo: 'D001',
138
+ faultName: '车门无法关闭',
139
+ faultDisplayName: '车门无法关闭',
140
+ alarmTime: '2024-01-01 11:45:00',
141
+ faultDescription: '车门传感器故障',
142
+ faultStatus: 'active',
143
+ startTime: '2024-01-01 11:45:00',
144
+ emergencyMeasures: '手动关闭',
145
+ warehouseMeasures: '更换传感器',
146
+ },
147
+ {
148
+ productName: '空调系统',
149
+ carNo: '04',
150
+ deviceNo: 'A001',
151
+ faultName: '空调压缩机故障',
152
+ faultDisplayName: '空调压缩机故障',
153
+ alarmTime: '2024-01-01 12:20:00',
154
+ faultDescription: '空调压缩机过热',
155
+ faultStatus: 'active',
156
+ startTime: '2024-01-01 12:20:00',
157
+ emergencyMeasures: '关闭空调',
158
+ warehouseMeasures: '更换压缩机',
159
+ },
160
+ {
161
+ productName: '牵引系统',
162
+ carNo: '01',
163
+ deviceNo: 'T001',
164
+ faultName: '牵引电机故障',
165
+ faultDisplayName: '牵引电机故障',
166
+ alarmTime: '2024-01-01 13:15:00',
167
+ faultDescription: '牵引电机过热',
168
+ faultStatus: 'active',
169
+ startTime: '2024-01-01 13:15:00',
170
+ emergencyMeasures: '降低功率',
171
+ warehouseMeasures: '更换电机',
172
+ },
173
+ {
174
+ productName: '制动系统',
175
+ carNo: '05',
176
+ deviceNo: 'B002',
177
+ faultName: '制动片磨损',
178
+ faultDisplayName: '制动片磨损',
179
+ alarmTime: '2024-01-01 14:00:00',
180
+ faultDescription: '制动片磨损严重',
181
+ faultStatus: 'active',
182
+ startTime: '2024-01-01 14:00:00',
183
+ emergencyMeasures: '限制速度',
184
+ warehouseMeasures: '更换制动片',
185
+ },
186
+ ],
187
+ mockWarningList: [
188
+ {
189
+ productName: '制动系统',
190
+ carNo: '01',
191
+ deviceNo: 'B001',
192
+ warningName: '制动压力预警',
193
+ warningDisplayName: '制动压力预警',
194
+ warningTime: '2024-01-01 10:30:00',
195
+ warningDescription: '制动系统压力偏低',
196
+ warningLevel: '中',
197
+ },
198
+ {
199
+ productName: '车门系统',
200
+ carNo: '02',
201
+ deviceNo: 'D001',
202
+ warningName: '车门传感器预警',
203
+ warningDisplayName: '车门传感器预警',
204
+ warningTime: '2024-01-01 11:45:00',
205
+ warningDescription: '车门传感器响应延迟',
206
+ warningLevel: '低',
207
+ },
208
+ {
209
+ productName: '空调系统',
210
+ carNo: '03',
211
+ deviceNo: 'A001',
212
+ warningName: '空调温度预警',
213
+ warningDisplayName: '空调温度预警',
214
+ warningTime: '2024-01-01 12:20:00',
215
+ warningDescription: '空调温度控制偏差',
216
+ warningLevel: '低',
217
+ },
218
+ {
219
+ productName: '制动系统',
220
+ carNo: '04',
221
+ deviceNo: 'B002',
222
+ warningName: '制动片磨损预警',
223
+ warningDisplayName: '制动片磨损预警',
224
+ warningTime: '2024-01-01 13:15:00',
225
+ warningDescription: '制动片磨损达到预警值',
226
+ warningLevel: '高',
227
+ },
228
+ {
229
+ productName: '牵引系统',
230
+ carNo: '05',
231
+ deviceNo: 'T001',
232
+ warningName: '牵引电机温度预警',
233
+ warningDisplayName: '牵引电机温度预警',
234
+ warningTime: '2024-01-01 14:00:00',
235
+ warningDescription: '牵引电机温度偏高',
236
+ warningLevel: '中',
237
+ },
238
+ ],
239
+ trainStatusFilter: 'all',
240
+ mockBrakeLifeData: [
241
+ {
242
+ deviceName: '制动系统-0601',
243
+ remainingLife: 85,
244
+ maintenanceTime: '2024-06-01',
245
+ },
246
+ {
247
+ deviceName: '制动系统-0602',
248
+ remainingLife: 72,
249
+ maintenanceTime: '2024-05-15',
250
+ },
251
+ {
252
+ deviceName: '制动系统-0603',
253
+ remainingLife: 68,
254
+ maintenanceTime: '2024-05-10',
255
+ },
256
+ {
257
+ deviceName: '制动系统-0604',
258
+ remainingLife: 91,
259
+ maintenanceTime: '2024-07-01',
260
+ },
261
+ {
262
+ deviceName: '制动系统-0605',
263
+ remainingLife: 45,
264
+ maintenanceTime: '2024-04-01',
265
+ },
266
+ ],
267
+ mockFaultTrend: [
268
+ { time: '00:00', faults: 5, warnings: 3 },
269
+ { time: '04:00', faults: 8, warnings: 6 },
270
+ { time: '08:00', faults: 12, warnings: 9 },
271
+ { time: '12:00', faults: 15, warnings: 12 },
272
+ { time: '16:00', faults: 10, warnings: 8 },
273
+ { time: '20:00', faults: 7, warnings: 5 },
274
+ { time: '24:00', faults: 4, warnings: 2 },
275
+ ],
276
+ mockVehicleFaultSort: [
277
+ { name: '0602', faults: 8 },
278
+ { name: '0608', faults: 6 },
279
+ { name: '0603', faults: 4 },
280
+ { name: '0601', faults: 2 },
281
+ { name: '0605', faults: 1 },
282
+ { name: '0604', faults: 1 },
283
+ ],
284
+ mockLowFaultTop5: [
285
+ { name: '0604', value: 0.2 },
286
+ { name: '0601', value: 0.5 },
287
+ { name: '0607', value: 0.8 },
288
+ { name: '0605', value: 1.2 },
289
+ { name: '0606', value: 1.5 },
290
+ ],
291
+ };
292
+
293
+ /**
294
+ * 通用修改数据
295
+ */
296
+ setStateValue(e, { field, valueField, indexs }, cb) {
297
+ const state = {
298
+ ...this.state,
299
+ };
300
+ let value = e;
301
+ if (valueField) {
302
+ value = valueField.split('.').reduce((obj, key) => obj && obj[key], e);
303
+ }
304
+ const _field =
305
+ indexs?.length > 0
306
+ ? field
307
+ .replace(/\\.\\[\\]/g, match => `[${indexs.shift()}].`)
308
+ .replace('.[item]', '')
309
+ : field;
310
+ this.utils.setValue(state, _field, value);
311
+ this.setState(state, cb);
312
+ }
313
+
314
+ /**
315
+ * 页面加载后执行
316
+ */
317
+ componentDidMount() {
318
+ // Mock版本 - 无需加载数据
319
+ console.log('Mock版本已加载');
320
+ }
321
+
322
+ /**
323
+ * 线路选择变更
324
+ */
325
+ handleLineChange(value) {
326
+ this.setState({
327
+ selectedLine: value,
328
+ });
329
+ }
330
+
331
+ /**
332
+ * 时间范围变更
333
+ */
334
+ handleTimeRangeChange(dates) {
335
+ if (dates && dates.length === 2) {
336
+ this.setState({
337
+ startTime: dates[0],
338
+ endTime: dates[1],
339
+ });
340
+ }
341
+ }
342
+
343
+ /**
344
+ * 查询数据
345
+ */
346
+ handleQuery() {
347
+ // Mock版本 - 仅用于UI展示,无真实数据加载
348
+ console.log('模拟查询数据');
349
+ }
350
+
351
+ /**
352
+ * 切换列车状态筛选
353
+ */
354
+ handleTrainStatusFilter(status) {
355
+ this.setState({
356
+ trainStatusFilter: status,
357
+ });
358
+ }
359
+
360
+ /**
361
+ * 查看列车详情
362
+ */
363
+ handleViewTrainDetail(train) {
364
+ // 打开详情弹窗
365
+ this.$('modal')?.open();
366
+ }
367
+
368
+ /**
369
+ * 查看故障详情
370
+ */
371
+ handleViewFaultDetail(fault) {
372
+ // 打开详情弹窗
373
+ this.$('modal')?.open();
374
+ }
375
+
376
+ render() {
377
+ return (
378
+ <Page className="h-screen">
379
+ <Modal
380
+ animate="pop"
381
+ renderView={props => (
382
+ <View className="flex flex-col bg-[#001585] w-[900px] h-[880px] rounded p-[20px]">
383
+ <View className="flex flex-row justify-center items-center mb-[20px]">
384
+ <View className="flex flex-row items-center">
385
+ <View
386
+ style={{
387
+ backgroundImage:
388
+ 'url(https://cdn.appthen.com/Fusc9RzqS6dkjtgdKOjo_HaUzVXC)',
389
+ backgroundRepeat: 'no-repeat',
390
+ display: 'flex',
391
+ flexDirection: 'row',
392
+ backgroundSize: '100% 100%',
393
+ backgroundPosition: 'center center',
394
+ justifyContent: 'center',
395
+ height: '40px',
396
+ width: '100%',
397
+ flex: '1',
398
+ }}
399
+ >
400
+ <View className="h-full flex flex-col justify-center pl-[0px] w-[342px] items-center">
401
+ <Text className="text-[#00fcff] text-base [fontFamily:Helvetica]">
402
+ 设备预警详情
403
+ </Text>
404
+ </View>
405
+ </View>
406
+ </View>
407
+ </View>
408
+ <View className="bg-[#0a0a2e] rounded-lg p-[16px] mb-[16px]">
409
+ <View className="grid grid-cols-2 gap-4">
410
+ <View>
411
+ <Text className="text-sm text-[#888888] mb-[4px]">
412
+ 预警编号
413
+ </Text>
414
+ <Text className="text-base text-[#ffffff] font-bold">
415
+ W20240101001
416
+ </Text>
417
+ </View>
418
+ <View>
419
+ <Text className="text-sm text-[#888888] mb-[4px]">
420
+ 预警级别
421
+ </Text>
422
+ <View className="flex flex-row items-center">
423
+ <View className="w-[12px] h-[12px] bg-[#FFD700] rounded-full mr-[8px]" />
424
+ <Text className="text-base text-[#FFD700] font-bold">
425
+ 中级预警
426
+ </Text>
427
+ </View>
428
+ </View>
429
+ <View>
430
+ <Text className="text-sm text-[#888888] mb-[4px]">
431
+ 设备名称
432
+ </Text>
433
+ <Text className="text-base text-[#ffffff]">
434
+ 制动系统-0601车
435
+ </Text>
436
+ </View>
437
+ <View>
438
+ <Text className="text-sm text-[#888888] mb-[4px]">
439
+ 预警时间
440
+ </Text>
441
+ <Text className="text-base text-[#ffffff]">
442
+ 2024-01-01 10:30:15
443
+ </Text>
444
+ </View>
445
+ <View>
446
+ <Text className="text-sm text-[#888888] mb-[4px]">
447
+ 车厢号
448
+ </Text>
449
+ <Text className="text-base text-[#ffffff]">01车厢</Text>
450
+ </View>
451
+ <View>
452
+ <Text className="text-sm text-[#888888] mb-[4px]">
453
+ 设备编号
454
+ </Text>
455
+ <Text className="text-base text-[#ffffff]">B001</Text>
456
+ </View>
457
+ </View>
458
+ </View>
459
+ <View className="flex-1 flex flex-row gap-4">
460
+ <View className="flex-1 flex flex-col">
461
+ <BlueBrightGreenBorder
462
+ content={
463
+ <View className="p-[16px] flex flex-col h-full">
464
+ <View
465
+ style={{
466
+ backgroundImage:
467
+ 'url(https://cdn.appthen.com/Fusc9RzqS6dkjtgdKOjo_HaUzVXC)',
468
+ backgroundRepeat: 'no-repeat',
469
+ display: 'flex',
470
+ flexDirection: 'row',
471
+ backgroundSize: '100% 100%',
472
+ backgroundPosition: 'center center',
473
+ justifyContent: 'center',
474
+ height: '40px',
475
+ marginBottom: '16px',
476
+ }}
477
+ >
478
+ <View className="h-full flex flex-col justify-center pl-[20px]">
479
+ <Text className="text-[#00fcff] text-sm [fontFamily:Helvetica]">
480
+ 预警描述
481
+ </Text>
482
+ </View>
483
+ </View>
484
+ <View className="flex-1">
485
+ <View className="mb-[12px] flex flex-col">
486
+ <Text className="text-sm text-[#888888] mb-[4px]">
487
+ 预警名称
488
+ </Text>
489
+ <Text className="text-base text-[#FFD700]">
490
+ 制动系统压力异常
491
+ </Text>
492
+ </View>
493
+ <View className="mb-[12px]">
494
+ <Text className="text-sm text-[#888888] mb-[4px]">
495
+ 详细描述
496
+ </Text>
497
+ <Text className="text-sm text-[#ffffff] [lineHeight:1.625] flex flex-col">
498
+ 制动系统压力传感器检测到压力值低于正常范围,当前压力为0.6MPa,&#10;
499
+ 正常范围应为0.8-1.2MPa。该异常可能导致制动距离延长,&#10;
500
+ 影响行车安全。建议立即检查制动系统管路和传感器状态。
501
+ </Text>
502
+ </View>
503
+ <View className="mb-[12px]">
504
+ <Text className="text-sm text-[#888888] mb-[4px]">
505
+ 可能原因
506
+ </Text>
507
+ <Text className="text-sm text-[#ffffff]">
508
+ 1. 制动管路泄漏
509
+ <br />
510
+ 2. 压力传感器故障
511
+ <br />
512
+ 3. 制动泵工作异常
513
+ <br />
514
+ 4. 气压不足
515
+ </Text>
516
+ </View>
517
+ <View>
518
+ <Text className="text-sm text-[#888888] mb-[4px]">
519
+ 影响范围
520
+ </Text>
521
+ <Text className="text-sm text-[#ffffff]">
522
+ 影响本车厢制动性能,可能导致制动距离增加20-30%
523
+ </Text>
524
+ </View>
525
+ </View>
526
+ </View>
527
+ }
528
+ className="flex flex-col flex-1"
529
+ />
530
+ </View>
531
+ <View className="flex-1 flex flex-col">
532
+ <BlueBrightGreenBorder
533
+ content={
534
+ <View className="p-[16px] flex flex-col h-full">
535
+ <View
536
+ style={{
537
+ backgroundImage:
538
+ 'url(https://cdn.appthen.com/Fusc9RzqS6dkjtgdKOjo_HaUzVXC)',
539
+ backgroundRepeat: 'no-repeat',
540
+ display: 'flex',
541
+ flexDirection: 'row',
542
+ backgroundSize: '100% 100%',
543
+ backgroundPosition: 'center center',
544
+ justifyContent: 'center',
545
+ height: '40px',
546
+ marginBottom: '16px',
547
+ }}
548
+ >
549
+ <View className="h-full flex flex-col justify-center pl-[20px]">
550
+ <Text className="text-[#00fcff] text-sm [fontFamily:Helvetica]">
551
+ 处理措施
552
+ </Text>
553
+ </View>
554
+ </View>
555
+ <View className="flex-1">
556
+ <View className="mb-[16px] flex flex-col">
557
+ <Text className="text-sm text-[#FF6B6B] mb-[4px] font-bold">
558
+ 应急措施
559
+ </Text>
560
+ <Text className="text-sm text-[#ffffff] [lineHeight:1.625]">
561
+ 1. 立即降低行车速度至40km/h以下
562
+ <br />
563
+ 2. 加强制动时的安全距离
564
+ <br />
565
+ 3. 准备应急制动系统
566
+ <br />
567
+ 4. 通知乘务人员做好应急准备
568
+ </Text>
569
+ </View>
570
+ <View className="mb-[16px] flex flex-col">
571
+ <Text className="text-sm text-[#4ECDC4] mb-[4px] font-bold">
572
+ 检查步骤
573
+ </Text>
574
+ <Text className="text-sm text-[#ffffff] [lineHeight:1.625]">
575
+ 1. 检查制动管路是否有泄漏
576
+ <br />
577
+ 2. 测试压力传感器工作状态
578
+ <br />
579
+ 3. 检查制动泵压力输出
580
+ <br />
581
+ 4. 验证气压系统压力
582
+ </Text>
583
+ </View>
584
+ <View className="mb-[16px]">
585
+ <Text className="text-sm text-[#45B7D1] mb-[4px] font-bold">
586
+ 维修建议
587
+ </Text>
588
+ <Text className="text-sm text-[#ffffff] [lineHeight:1.625]">
589
+ 1. 如发现管路泄漏,立即更换密封件
590
+ <br />
591
+ 2. 传感器故障需更换新传感器
592
+ <br />
593
+ 3. 制动泵异常需进行大修或更换
594
+ <br />
595
+ 4. 补充气压至正常范围
596
+ </Text>
597
+ </View>
598
+ <View>
599
+ <Text className="text-sm text-[#96CEB4] mb-[4px] font-bold">
600
+ 预防措施
601
+ </Text>
602
+ <Text className="text-sm text-[#ffffff] [lineHeight:1.625]">
603
+ 1. 增加制动系统巡检频率
604
+ <br />
605
+ 2. 定期校准压力传感器
606
+ <br />
607
+ 3. 建立压力变化趋势监控
608
+ <br />
609
+ 4. 备品备件充足储备
610
+ </Text>
611
+ </View>
612
+ </View>
613
+ </View>
614
+ }
615
+ className="flex flex-col flex-1"
616
+ />
617
+ </View>
618
+ </View>
619
+ <View className="flex flex-row justify-between items-center mt-[16px]">
620
+ <View className="flex flex-row gap-3">
621
+ <Button
622
+ type="primary"
623
+ size="small"
624
+ className="bg-[#197dcb] border-[#197dcb] border border-solid"
625
+ >
626
+ 确认处理
627
+ </Button>
628
+ <Button
629
+ type="default"
630
+ size="small"
631
+ className="bg-[#666] border-[#666] border border-solid text-[#ffffff]"
632
+ >
633
+ 转派维修
634
+ </Button>
635
+ <Button
636
+ type="default"
637
+ size="small"
638
+ className="bg-[#666] border-[#666] border border-solid text-[#ffffff]"
639
+ >
640
+ 查看历史
641
+ </Button>
642
+ </View>
643
+ <View className="text-sm text-[#888888]">
644
+ <Text>处理时限: 2小时内</Text>
645
+ </View>
646
+ </View>
647
+ </View>
648
+ )}
649
+ visible={false}
650
+ maskClosable={true}
651
+ ref="modal"
652
+ className=""
653
+ />
654
+ <FullScreenContainer
655
+ content={
656
+ <View className="h-full flex flex-col">
657
+ <View
658
+ key="header"
659
+ style={{
660
+ height: '80px',
661
+ backgroundImage:
662
+ 'url(https://cdn.appthen.com/Fu5bWQQXD0SVPRCq31hi3903u5xD)',
663
+ backgroundSize: 'cover',
664
+ backgroundPosition: 'center',
665
+ }}
666
+ >
667
+ <View className="flex-1 flex flex-row items-center pl-[32px] pr-[32px]">
668
+ <View className="flex-1">
669
+ <Text className="text-4xl text-[#81d3fc] font-extrabold">
670
+ 地铁列车设备监控仪表盘
671
+ </Text>
672
+ </View>
673
+ <View className="flex flex-row items-center gap-6">
674
+ <View className="flex flex-col">
675
+ <Text className="text-sm text-[#ffffff] mb-[4px]">
676
+ 线路选择
677
+ </Text>
678
+ <Select
679
+ value={this.state.selectedLine}
680
+ onChange={value => this.handleLineChange(value)}
681
+ className="w-[120px]"
682
+ >
683
+ <Select.Option value="1号线">
684
+ <Text>1号线</Text>
685
+ </Select.Option>
686
+ <Select.Option value="2号线">
687
+ <Text>2号线</Text>
688
+ </Select.Option>
689
+ <Select.Option value="3号线">
690
+ <Text>3号线</Text>
691
+ </Select.Option>
692
+ <Select.Option value="4号线">
693
+ <Text>4号线</Text>
694
+ </Select.Option>
695
+ <Select.Option value="5号线">
696
+ <Text>5号线</Text>
697
+ </Select.Option>
698
+ <Select.Option value="6号线">
699
+ <Text>6号线</Text>
700
+ </Select.Option>
701
+ </Select>
702
+ </View>
703
+ <View className="flex flex-col">
704
+ <Text className="text-sm text-[#ffffff] mb-[4px]">
705
+ 时间范围
706
+ </Text>
707
+ <DatePicker.RangePicker
708
+ onChange={dates => this.handleTimeRangeChange(dates)}
709
+ className="w-[240px]"
710
+ />
711
+ </View>
712
+ <Button
713
+ type="primary"
714
+ onClick={() => this.handleQuery()}
715
+ className="mt-[24px]"
716
+ >
717
+ 查询
718
+ </Button>
719
+ </View>
720
+ </View>
721
+ </View>
722
+ <View key="main" className="flex-1 flex flex-row">
723
+ <View className="pl-[20px] pr-[10px] flex flex-col w-[680px]">
724
+ <BlueBrightGreenBorder
725
+ content={
726
+ <View className="p-[16px] flex flex-col h-full">
727
+ <View
728
+ style={{
729
+ backgroundImage:
730
+ 'url(https://cdn.appthen.com/Fusc9RzqS6dkjtgdKOjo_HaUzVXC)',
731
+ backgroundRepeat: 'no-repeat',
732
+ display: 'flex',
733
+ flexDirection: 'row',
734
+ backgroundSize: '100% 100%',
735
+ backgroundPosition: 'center center',
736
+ justifyContent: 'center',
737
+ height: '52px',
738
+ marginBottom: '20px',
739
+ }}
740
+ >
741
+ <View className="h-full flex flex-col justify-center pl-[30px]">
742
+ <Text className="text-[#00fcff] text-lg [fontFamily:Helvetica]">
743
+ 设备故障指标
744
+ </Text>
745
+ </View>
746
+ </View>
747
+ <View className="flex flex-row justify-between">
748
+ <View className="flex flex-col items-center mr-[20px]">
749
+ <View
750
+ style={{
751
+ borderImage:
752
+ 'url(https://cdn.appthen.com/FlFgi0fblg9box18PDqEVwWsSiFd) 0 fill stretch',
753
+ borderImageWidth: 'auto',
754
+ width: '57px',
755
+ height: '65px',
756
+ }}
757
+ __hidePh={true}
758
+ />
759
+ <View className="mt-[10px] mb-[10px]">
760
+ <Text className="text-[32px] text-[#FFD700]">
761
+ {this.state.mockWarningStatus
762
+ ?.todayWarningCount || 0}
763
+ </Text>
764
+ </View>
765
+ <View>
766
+ <Text className="text-sm text-[#ffffff]">
767
+ 今日预警
768
+ </Text>
769
+ </View>
770
+ </View>
771
+ <View className="flex flex-col items-center mr-[20px]">
772
+ <View
773
+ style={{
774
+ borderImage:
775
+ 'url(https://cdn.appthen.com/Fjs_YDcmk37VesLIDaWaF8wmU3DQ) 0 fill stretch',
776
+ borderImageWidth: 'auto',
777
+ width: '57px',
778
+ height: '65px',
779
+ }}
780
+ __hidePh={true}
781
+ />
782
+ <View className="mt-[10px] mb-[10px]">
783
+ <Text className="text-[32px] text-[#FF0000]">
784
+ {this.state.mockStatus?.todayFaultCount || 0}
785
+ </Text>
786
+ </View>
787
+ <View>
788
+ <Text className="text-sm text-[#ffffff]">
789
+ 今日故障
790
+ </Text>
791
+ </View>
792
+ </View>
793
+ <View className="flex flex-col items-center">
794
+ <View
795
+ style={{
796
+ borderImage:
797
+ 'url(https://cdn.appthen.com/Fl3BCenUwPtZJLVmtt6_zaucdldp) 0 fill stretch',
798
+ borderImageWidth: 'auto',
799
+ width: '57px',
800
+ height: '65px',
801
+ }}
802
+ __hidePh={true}
803
+ />
804
+ <View className="mt-[10px] mb-[10px]">
805
+ <Text className="text-[32px] text-[#808080]">
806
+ {this.state.mockStatus?.activeFaultCount || 0}
807
+ </Text>
808
+ </View>
809
+ <View>
810
+ <Text className="text-sm text-[#ffffff]">
811
+ 活跃故障
812
+ </Text>
813
+ </View>
814
+ </View>
815
+ </View>
816
+ </View>
817
+ }
818
+ className="flex flex-col h-[281px]"
819
+ />
820
+ <BlueBrightGreenBorder
821
+ content={
822
+ <View className="p-[16px] flex flex-col h-full">
823
+ <View
824
+ style={{
825
+ backgroundImage:
826
+ 'url(https://cdn.appthen.com/Fusc9RzqS6dkjtgdKOjo_HaUzVXC)',
827
+ backgroundRepeat: 'no-repeat',
828
+ display: 'flex',
829
+ flexDirection: 'row',
830
+ backgroundSize: '100% 100%',
831
+ backgroundPosition: 'center center',
832
+ justifyContent: 'center',
833
+ height: '52px',
834
+ marginBottom: '20px',
835
+ }}
836
+ >
837
+ <View className="h-full flex flex-col justify-center pl-[30px]">
838
+ <Text className="text-[#00fcff] text-lg [fontFamily:Helvetica]">
839
+ 故障数量变化趋势
840
+ </Text>
841
+ </View>
842
+ </View>
843
+ <ECharts
844
+ advanced={false}
845
+ title={{ text: '', show: false }}
846
+ tooltip={{ trigger: 'axis', show: true }}
847
+ legend={{ show: true, data: ['故障数', '预警数'] }}
848
+ xAxis={{
849
+ type: 'category',
850
+ name: '时间',
851
+ show: true,
852
+ data: this.state.mockFaultTrend?.map(function (
853
+ item
854
+ ) {
855
+ return item.time;
856
+ }) || [
857
+ '00:00',
858
+ '04:00',
859
+ '08:00',
860
+ '12:00',
861
+ '16:00',
862
+ '20:00',
863
+ '24:00',
864
+ ],
865
+ }}
866
+ yAxis={{ type: 'value', name: '数量', show: true }}
867
+ series={[
868
+ {
869
+ name: '故障数',
870
+ type: 'line',
871
+ data: this.state.mockFaultTrend?.map(function (
872
+ item
873
+ ) {
874
+ return item.faults;
875
+ }) || [12, 8, 15, 22, 18, 25, 20],
876
+ smooth: true,
877
+ itemStyle: { color: '#FF0000' },
878
+ lineStyle: { color: '#FF0000', width: 2 },
879
+ },
880
+ {
881
+ name: '预警数',
882
+ type: 'line',
883
+ data: this.state.mockFaultTrend?.map(function (
884
+ item
885
+ ) {
886
+ return item.warnings;
887
+ }) || [5, 12, 8, 15, 20, 18, 22],
888
+ smooth: true,
889
+ itemStyle: { color: '#FFD700' },
890
+ lineStyle: { color: '#FFD700', width: 2 },
891
+ },
892
+ ]}
893
+ />
894
+ </View>
895
+ }
896
+ className="flex flex-col h-[420px]"
897
+ />
898
+ <BlueBrightGreenBorder
899
+ content={
900
+ <View className="p-[16px] flex flex-col h-full">
901
+ <View
902
+ style={{
903
+ backgroundImage:
904
+ 'url(https://cdn.appthen.com/Fusc9RzqS6dkjtgdKOjo_HaUzVXC)',
905
+ backgroundRepeat: 'no-repeat',
906
+ display: 'flex',
907
+ flexDirection: 'row',
908
+ backgroundSize: '100% 100%',
909
+ backgroundPosition: 'center center',
910
+ justifyContent: 'center',
911
+ height: '52px',
912
+ marginBottom: '20px',
913
+ }}
914
+ >
915
+ <View className="h-full flex flex-col justify-center pl-[30px]">
916
+ <Text className="text-[#00fcff] text-lg [fontFamily:Helvetica]">
917
+ 车辆故障排序
918
+ </Text>
919
+ </View>
920
+ </View>
921
+ <ECharts
922
+ advanced={false}
923
+ title={{ text: '', show: false }}
924
+ tooltip={{ trigger: 'item', show: true }}
925
+ xAxis={{ type: 'value', name: '故障数', show: true }}
926
+ yAxis={{
927
+ type: 'category',
928
+ name: '车辆',
929
+ show: true,
930
+ data: this.state.mockVehicleFaultSort?.map(
931
+ function (item) {
932
+ return item.name;
933
+ }
934
+ ) || [
935
+ '车辆6',
936
+ '车辆5',
937
+ '车辆4',
938
+ '车辆3',
939
+ '车辆2',
940
+ '车辆1',
941
+ ],
942
+ }}
943
+ series={[
944
+ {
945
+ name: '故障数',
946
+ type: 'bar',
947
+ data: this.state.mockVehicleFaultSort?.map(
948
+ function (item) {
949
+ return item.faults;
950
+ }
951
+ ) || [8, 12, 6, 15, 9, 10],
952
+ itemStyle: { color: '#FF0000' },
953
+ },
954
+ ]}
955
+ />
956
+ </View>
957
+ }
958
+ className="flex flex-col h-[389px]"
959
+ />
960
+ </View>
961
+ <View className="flex-1 flex flex-col pl-[10px] pr-[10px]">
962
+ <BlueBrightGreenBorder
963
+ content={
964
+ <View className="p-[16px] flex flex-col h-full">
965
+ <View
966
+ style={{
967
+ backgroundImage:
968
+ 'url(https://cdn.appthen.com/Fusc9RzqS6dkjtgdKOjo_HaUzVXC)',
969
+ backgroundRepeat: 'no-repeat',
970
+ display: 'flex',
971
+ flexDirection: 'row',
972
+ backgroundSize: '100% 100%',
973
+ backgroundPosition: 'center center',
974
+ justifyContent: 'center',
975
+ height: '52px',
976
+ marginBottom: '20px',
977
+ }}
978
+ >
979
+ <View className="h-full flex flex-col justify-center pl-[30px]">
980
+ <Text className="text-[#00fcff] text-lg [fontFamily:Helvetica]">
981
+ 状态统计
982
+ </Text>
983
+ </View>
984
+ </View>
985
+ <View className="grid grid-cols-4 gap-4">
986
+ <View className="flex flex-col items-center">
987
+ <Text className="text-2xl text-[#FFD700] font-bold">
988
+ {this.state.mockWarningStatus
989
+ ?.warningDeviceCount || 0}
990
+ </Text>
991
+ <Text className="text-sm text-[#ffffff]">
992
+ 预警设备数
993
+ </Text>
994
+ </View>
995
+ <View className="flex flex-col items-center">
996
+ <Text className="text-2xl text-[#FF0000] font-bold">
997
+ {this.state.mockStatus?.faultDeviceCount || 0}
998
+ </Text>
999
+ <Text className="text-sm text-[#ffffff]">
1000
+ 故障设备数
1001
+ </Text>
1002
+ </View>
1003
+ <View className="flex flex-col items-center">
1004
+ <Text className="text-2xl text-[#197dcb] font-bold">
1005
+ {this.state.mockTrains?.filter(t => t.isOnline)
1006
+ .length || 0}
1007
+ </Text>
1008
+ <Text className="text-sm text-[#ffffff]">
1009
+ 在线车辆
1010
+ </Text>
1011
+ </View>
1012
+ <View className="flex flex-col items-center">
1013
+ <Text className="text-2xl text-[#00FF00] font-bold">
1014
+ {this.state.mockTrains?.length || 0}
1015
+ </Text>
1016
+ <Text className="text-sm text-[#ffffff]">
1017
+ 配车总数
1018
+ </Text>
1019
+ </View>
1020
+ </View>
1021
+ </View>
1022
+ }
1023
+ className="flex flex-col h-[193px]"
1024
+ />
1025
+ <BlueBrightGreenBorder
1026
+ content={
1027
+ <View className="p-[16px] flex flex-col h-full">
1028
+ <View
1029
+ style={{
1030
+ backgroundImage:
1031
+ 'url(https://cdn.appthen.com/Fusc9RzqS6dkjtgdKOjo_HaUzVXC)',
1032
+ backgroundRepeat: 'no-repeat',
1033
+ display: 'flex',
1034
+ flexDirection: 'row',
1035
+ backgroundSize: '100% 100%',
1036
+ backgroundPosition: 'center center',
1037
+ justifyContent: 'center',
1038
+ height: '52px',
1039
+ marginBottom: '20px',
1040
+ }}
1041
+ >
1042
+ <View className="h-full flex flex-col justify-center pl-[30px]">
1043
+ <Text className="text-[#00fcff] text-lg [fontFamily:Helvetica]">
1044
+ 列车线路图
1045
+ </Text>
1046
+ </View>
1047
+ </View>
1048
+ <ECharts
1049
+ advanced={false}
1050
+ title={{ text: '', show: false }}
1051
+ tooltip={{ trigger: 'item', show: true }}
1052
+ xAxis={{
1053
+ type: 'category',
1054
+ show: false,
1055
+ data: [
1056
+ '站点1',
1057
+ '站点2',
1058
+ '站点3',
1059
+ '站点4',
1060
+ '站点5',
1061
+ '站点6',
1062
+ '站点7',
1063
+ '站点8',
1064
+ ],
1065
+ }}
1066
+ yAxis={{ type: 'value', show: false }}
1067
+ series={[
1068
+ {
1069
+ name: '线路',
1070
+ type: 'line',
1071
+ data: [0, 1, 2, 3, 4, 5, 6, 7],
1072
+ smooth: true,
1073
+ itemStyle: { color: '#197dcb' },
1074
+ lineStyle: { color: '#197dcb', width: 4 },
1075
+ symbol: 'circle',
1076
+ symbolSize: 12,
1077
+ },
1078
+ ]}
1079
+ />
1080
+ </View>
1081
+ }
1082
+ className="flex flex-col h-[669px]"
1083
+ />
1084
+ <BlueBrightGreenBorder
1085
+ content={
1086
+ <View className="p-[16px] flex flex-col h-full">
1087
+ <View
1088
+ style={{
1089
+ backgroundImage:
1090
+ 'url(https://cdn.appthen.com/Fusc9RzqS6dkjtgdKOjo_HaUzVXC)',
1091
+ backgroundRepeat: 'no-repeat',
1092
+ display: 'flex',
1093
+ flexDirection: 'row',
1094
+ backgroundSize: '100% 100%',
1095
+ backgroundPosition: 'center center',
1096
+ justifyContent: 'center',
1097
+ height: '52px',
1098
+ marginBottom: '20px',
1099
+ }}
1100
+ >
1101
+ <View className="h-full flex flex-col justify-center pl-[30px]">
1102
+ <Text className="text-[#00fcff] text-lg [fontFamily:Helvetica]">
1103
+ 列车状态总览
1104
+ </Text>
1105
+ </View>
1106
+ </View>
1107
+ <View className="flex flex-row gap-2 mb-[16px]">
1108
+ <Button
1109
+ type={
1110
+ this.state.trainStatusFilter === 'all'
1111
+ ? 'primary'
1112
+ : 'default'
1113
+ }
1114
+ size="small"
1115
+ onClick={() => this.handleTrainStatusFilter('all')}
1116
+ >
1117
+ 全部
1118
+ </Button>
1119
+ <Button
1120
+ type={
1121
+ this.state.trainStatusFilter === 'normal'
1122
+ ? 'primary'
1123
+ : 'default'
1124
+ }
1125
+ size="small"
1126
+ onClick={() =>
1127
+ this.handleTrainStatusFilter('normal')
1128
+ }
1129
+ >
1130
+ 正常
1131
+ </Button>
1132
+ <Button
1133
+ type={
1134
+ this.state.trainStatusFilter === 'fault'
1135
+ ? 'primary'
1136
+ : 'default'
1137
+ }
1138
+ size="small"
1139
+ onClick={() =>
1140
+ this.handleTrainStatusFilter('fault')
1141
+ }
1142
+ >
1143
+ 故障
1144
+ </Button>
1145
+ <Button
1146
+ type={
1147
+ this.state.trainStatusFilter === 'warning'
1148
+ ? 'primary'
1149
+ : 'default'
1150
+ }
1151
+ size="small"
1152
+ onClick={() =>
1153
+ this.handleTrainStatusFilter('warning')
1154
+ }
1155
+ >
1156
+ 预警
1157
+ </Button>
1158
+ </View>
1159
+ <View className="grid grid-cols-3 gap-2">
1160
+ {this.state.mockTrains
1161
+ ?.slice(0, 6)
1162
+ .map((train, index) => (
1163
+ <View
1164
+ key={index}
1165
+ className={`p-2 rounded border cursor-pointer text-center ${
1166
+ train.status === 'normal'
1167
+ ? 'border-blue-500 bg-blue-900 bg-opacity-20'
1168
+ : train.status === 'fault'
1169
+ ? 'border-red-500 bg-red-900 bg-opacity-20'
1170
+ : train.status === 'warning'
1171
+ ? 'border-yellow-500 bg-yellow-900 bg-opacity-20'
1172
+ : 'border-gray-500 bg-gray-900 bg-opacity-20'
1173
+ }`}
1174
+ onClick={() =>
1175
+ this.handleViewTrainDetail(train)
1176
+ }
1177
+ >
1178
+ <Text
1179
+ className={`text-sm font-bold ${
1180
+ train.status === 'normal'
1181
+ ? 'text-blue-400'
1182
+ : train.status === 'fault'
1183
+ ? 'text-red-400'
1184
+ : train.status === 'warning'
1185
+ ? 'text-yellow-400'
1186
+ : 'text-gray-400'
1187
+ }`}
1188
+ >
1189
+ {train.trainNo}
1190
+ </Text>
1191
+ <Text className="text-xs text-[#9ca3af]">
1192
+ {train.isOnline ? '在线' : '离线'}
1193
+ </Text>
1194
+ </View>
1195
+ ))}
1196
+ </View>
1197
+ </View>
1198
+ }
1199
+ className="flex flex-col flex-1"
1200
+ />
1201
+ </View>
1202
+ <View className="pr-[20px] pl-[10px] flex flex-col w-[780px]">
1203
+ <BlueBrightGreenBorder
1204
+ content={
1205
+ <View className="p-[16px] flex flex-col h-full">
1206
+ <View
1207
+ style={{
1208
+ backgroundImage:
1209
+ 'url(https://cdn.appthen.com/Fusc9RzqS6dkjtgdKOjo_HaUzVXC)',
1210
+ backgroundRepeat: 'no-repeat',
1211
+ display: 'flex',
1212
+ flexDirection: 'row',
1213
+ backgroundSize: '100% 100%',
1214
+ backgroundPosition: 'center center',
1215
+ justifyContent: 'center',
1216
+ height: '52px',
1217
+ marginBottom: '20px',
1218
+ }}
1219
+ >
1220
+ <View className="h-full flex flex-col justify-center pl-[30px]">
1221
+ <Text className="text-[#00fcff] text-lg [fontFamily:Helvetica]">
1222
+ 设备预警信息
1223
+ </Text>
1224
+ </View>
1225
+ </View>
1226
+ <View className="flex flex-col overflow-hidden h-[280px]">
1227
+ <View className="flex flex-row items-center h-[36px] bg-[#454545]">
1228
+ <View className="w-[80px] flex flex-col items-center">
1229
+ <Text className="text-sm text-[#ffffff]">
1230
+ 车厢号
1231
+ </Text>
1232
+ </View>
1233
+ <View className="w-[80px] flex flex-col items-center">
1234
+ <Text className="text-sm text-[#ffffff]">
1235
+ 设备
1236
+ </Text>
1237
+ </View>
1238
+ <View className="flex-1 flex flex-col items-center">
1239
+ <Text className="text-sm text-[#ffffff]">
1240
+ 预警名称
1241
+ </Text>
1242
+ </View>
1243
+ <View className="w-[120px] flex flex-col items-center">
1244
+ <Text className="text-sm text-[#ffffff]">
1245
+ 预警时间
1246
+ </Text>
1247
+ </View>
1248
+ <View className="w-[80px] flex flex-col items-center">
1249
+ <Text className="text-sm text-[#ffffff]">
1250
+ 操作
1251
+ </Text>
1252
+ </View>
1253
+ </View>
1254
+ <ScrollView>
1255
+ {this.state.mockWarningList
1256
+ ?.slice(0, 8)
1257
+ .map((item, index) => (
1258
+ <View
1259
+ key={index}
1260
+ className="border-gray-700 cursor-pointer flex flex-row h-[35px] border-b-[1px] border-b-solid"
1261
+ >
1262
+ <View className="w-[80px] flex flex-col items-center justify-center">
1263
+ <Text className="text-xs text-[#ffffff]">
1264
+ {item?.carNo || '-'}
1265
+ </Text>
1266
+ </View>
1267
+ <View className="w-[80px] flex flex-col items-center justify-center">
1268
+ <Text className="text-xs text-[#ffffff]">
1269
+ {item?.productName || '-'}
1270
+ </Text>
1271
+ </View>
1272
+ <View className="flex-1 flex flex-col justify-center pl-[8px] pr-[8px]">
1273
+ <Text className="text-xs text-[#FFD700]">
1274
+ {item?.warningDisplayName || '-'}
1275
+ </Text>
1276
+ </View>
1277
+ <View className="w-[120px] flex flex-col items-center justify-center">
1278
+ <Text className="text-xs text-[#ffffff]">
1279
+ {item?.warningTime
1280
+ ? this.utils
1281
+ .dayjs(item.warningTime)
1282
+ .format('MM-DD HH:mm')
1283
+ : '-'}
1284
+ </Text>
1285
+ </View>
1286
+ <View
1287
+ onClick={() =>
1288
+ this.handleViewFaultDetail(item)
1289
+ }
1290
+ className="w-[80px] flex flex-col items-center justify-center cursor-pointer"
1291
+ >
1292
+ <Text className="text-xs text-[#00fcff]">
1293
+ 查看
1294
+ </Text>
1295
+ </View>
1296
+ </View>
1297
+ ))}
1298
+ </ScrollView>
1299
+ </View>
1300
+ </View>
1301
+ }
1302
+ className="flex flex-col h-[604px]"
1303
+ />
1304
+ <BlueBrightGreenBorder
1305
+ content={
1306
+ <View className="p-[16px] flex flex-col h-full">
1307
+ <View
1308
+ style={{
1309
+ backgroundImage:
1310
+ 'url(https://cdn.appthen.com/Fusc9RzqS6dkjtgdKOjo_HaUzVXC)',
1311
+ backgroundRepeat: 'no-repeat',
1312
+ display: 'flex',
1313
+ flexDirection: 'row',
1314
+ backgroundSize: '100% 100%',
1315
+ backgroundPosition: 'center center',
1316
+ justifyContent: 'center',
1317
+ height: '52px',
1318
+ marginBottom: '20px',
1319
+ }}
1320
+ >
1321
+ <View className="h-full flex flex-col justify-center pl-[30px]">
1322
+ <Text className="text-[#00fcff] text-lg [fontFamily:Helvetica]">
1323
+ 设备故障信息
1324
+ </Text>
1325
+ </View>
1326
+ </View>
1327
+ <View className="h-[46px] flex flex-row bg-[#494949]">
1328
+ <View className="flex flex-row justify-center items-center w-[80px]">
1329
+ <Text className="text-sm text-[#ffffff]">
1330
+ 车厢号
1331
+ </Text>
1332
+ </View>
1333
+ <View className="flex flex-row justify-center items-center w-[80px]">
1334
+ <Text className="text-sm text-[#ffffff]">设备</Text>
1335
+ </View>
1336
+ <View className="flex flex-row justify-center items-center flex-1">
1337
+ <Text className="text-sm text-[#ffffff]">
1338
+ 故障名称
1339
+ </Text>
1340
+ </View>
1341
+ <View className="flex flex-row justify-center items-center w-[140px]">
1342
+ <Text className="text-sm text-[#ffffff]">
1343
+ 故障时间
1344
+ </Text>
1345
+ </View>
1346
+ <View className="flex flex-row justify-center items-center w-[80px]">
1347
+ <Text className="text-sm text-[#ffffff]">操作</Text>
1348
+ </View>
1349
+ </View>
1350
+ <ScrollView>
1351
+ {this.state.mockFaultList
1352
+ ?.slice(0, 8)
1353
+ .map((item, index) => (
1354
+ <View
1355
+ key={index}
1356
+ className="border-gray-700 h-[46px] flex flex-row border-b-[1px] border-b-solid"
1357
+ >
1358
+ <View className="flex flex-row justify-center items-center w-[80px]">
1359
+ <Text className="text-sm text-[#ffffff]">
1360
+ {item?.carNo || '-'}
1361
+ </Text>
1362
+ </View>
1363
+ <View className="flex flex-row justify-center items-center w-[80px]">
1364
+ <Text className="text-sm text-[#ffffff]">
1365
+ {item?.productName || '-'}
1366
+ </Text>
1367
+ </View>
1368
+ <View className="flex flex-row justify-center items-center flex-1 pl-[8px] pr-[8px]">
1369
+ <Text className="text-sm text-[#FF0000]">
1370
+ {item?.faultDisplayName || '-'}
1371
+ </Text>
1372
+ </View>
1373
+ <View className="flex flex-row justify-center items-center w-[140px]">
1374
+ <Text className="text-sm text-[#ffffff]">
1375
+ {item?.startTime
1376
+ ? this.utils
1377
+ .dayjs(item.startTime)
1378
+ .format('MM-DD HH:mm')
1379
+ : '-'}
1380
+ </Text>
1381
+ </View>
1382
+ <View
1383
+ onClick={() =>
1384
+ this.handleViewFaultDetail(item)
1385
+ }
1386
+ className="flex flex-row justify-center items-center w-[80px] cursor-pointer"
1387
+ >
1388
+ <Text className="text-sm text-[#00fcff]">
1389
+ 详情
1390
+ </Text>
1391
+ </View>
1392
+ </View>
1393
+ ))}
1394
+ </ScrollView>
1395
+ </View>
1396
+ }
1397
+ className="flex flex-col flex-1"
1398
+ />
1399
+ </View>
1400
+ </View>
1401
+ <View key="footer" className="bg-[#1a1b2f] p-[16px]">
1402
+ <Text className="text-[#ffffff]">
1403
+ 系统状态: 在线 | 最后更新:{new Date().toLocaleString()}
1404
+ </Text>
1405
+ </View>
1406
+ </View>
1407
+ }
1408
+ baseWidth={2560}
1409
+ baseHeight={1440}
1410
+ className="h-screen bg-[#0f1129] flex flex-col"
1411
+ />
1412
+ </Page>
1413
+ );
1414
+ }
1415
+ }
1416
+
1417
+ export default Document;