@appthen/cli 1.2.10 → 1.2.12

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 (173) hide show
  1. package/.gitignore +1 -0
  2. package/bin/main.js +92 -0
  3. package/dist/index.js +7014 -14988
  4. package/package.json +8 -1
  5. package/tests/test-app/.appthen/shadow-space-100001-test-app-e99876b1.json +1862 -0
  6. package/tests/test-app/.appthen/space-config.json +8 -0
  7. package/tests/test-app/docs/AI-Workflow.flow +112 -0
  8. package/tests/test-app/docs/Logic-1.flow +16 -0
  9. package/tests/test-app/docs/Logic.flow +16 -0
  10. package/tests/test-app/docs/Project-Blueprint-1.flow +119 -0
  11. package/tests/test-app/docs/Project-Blueprint.flow +119 -0
  12. package/tests/test-app/docs/README.md +3 -0
  13. package/tests/test-app/docs/claude.md +194 -0
  14. package/tests/test-app/docs/page_requirement_analysis.md +149 -0
  15. 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
  16. package/tests/test-app/src/apis/AddTodoPost.api.ts +42 -0
  17. package/tests/test-app/src/apis/DeleteTodoPost.api.ts +32 -0
  18. package/tests/test-app/src/apis/GetListPost.api.ts +38 -0
  19. package/tests/test-app/src/apis/TicketAttachmentUploadPost.api.ts +42 -0
  20. package/tests/test-app/src/apis/UpdateTodoPost.api.ts +46 -0
  21. package/tests/test-app/src/app.css +15 -0
  22. package/tests/test-app/src/cloud_functions/ticket|attachment|upload.node.ts +86 -0
  23. package/tests/test-app/src/cloud_functions/ticket|comment|add.node.ts +65 -0
  24. package/tests/test-app/src/cloud_functions/types|entity|Ticket.node.ts +88 -0
  25. package/tests/test-app/src/cloud_functions/types|entity|TicketAttachment.node.ts +70 -0
  26. package/tests/test-app/src/cloud_functions/types|entity|TicketCategory.node.ts +56 -0
  27. package/tests/test-app/src/cloud_functions/types|entity|TicketComment.node.ts +62 -0
  28. package/tests/test-app/src/cloud_functions/types|entity|TicketHistory.node.ts +74 -0
  29. package/tests/test-app/src/cloud_functions/types|entity|TicketPriority.node.ts +68 -0
  30. package/tests/test-app/src/cloud_functions/types|entity|TicketStatus.node.ts +63 -0
  31. package/tests/test-app/src/cloud_functions/types|models|CreateTicketParams.node.ts +20 -0
  32. package/tests/test-app/src/cloud_functions/types|models|TicketListParams.node.ts +30 -0
  33. package/tests/test-app/src/cloud_functions/types|models|UpdateTicketParams.node.ts +22 -0
  34. package/tests/test-app/src/components/Button.js +11 -0
  35. package/tests/test-app/src/components/MessageCenter.tsx +506 -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/CustomerManagement.tsx +535 -0
  63. package/tests/test-app/src/pages/CyberpunkDashboard.tsx +348 -0
  64. package/tests/test-app/src/pages/CyberpunkProductManagement.tsx +637 -0
  65. package/tests/test-app/src/pages/CyberpunkUserList.tsx +316 -0
  66. package/tests/test-app/src/pages/DashboardV2.tsx +334 -0
  67. package/tests/test-app/src/pages/DataReport.tsx +298 -0
  68. package/tests/test-app/src/pages/DataStatistics.tsx +317 -0
  69. package/tests/test-app/src/pages/DepartmentManagement.tsx +503 -0
  70. package/tests/test-app/src/pages/FileExplorer.tsx +441 -0
  71. package/tests/test-app/src/pages/OrderDetail.tsx +393 -0
  72. package/tests/test-app/src/pages/ProductManagement.tsx +521 -0
  73. package/tests/test-app/src/pages/ProjectTimeline.tsx +395 -0
  74. package/tests/test-app/src/pages/RoleManagement.tsx +523 -0
  75. package/tests/test-app/src/pages/SLAManagement.tsx +668 -0
  76. package/tests/test-app/src/pages/StaticCyberpunkDashboard.tsx +462 -0
  77. package/tests/test-app/src/pages/StaticCyberpunkUserList.tsx +567 -0
  78. package/tests/test-app/src/pages/StudentWeaknessList.tsx +547 -0
  79. package/tests/test-app/src/pages/SystemSettings.tsx +422 -0
  80. package/tests/test-app/src/pages/TaskManagement.tsx +467 -0
  81. package/tests/test-app/src/pages/TicketCreate.tsx +27 -0
  82. package/tests/test-app/src/pages/TicketDetail.tsx +27 -0
  83. package/tests/test-app/src/pages/TicketList.tsx +27 -0
  84. package/tests/test-app/src/pages/TicketManagement.tsx +402 -0
  85. package/tests/test-app/src/pages/TicketManagementPage.tsx +1238 -0
  86. package/tests/test-app/src/pages/UserProfile.tsx +404 -0
  87. package/tests/test-app/src/pages/VisualAIIDEUpgrade.tsx +245 -0
  88. package/tests/test-app/src/pages/WorkflowDesigner.tsx +434 -0
  89. package/tests/test-app/src/pages/admin/dashboard.tsx +591 -0
  90. package/tests/test-app/src/pages/appthen_guide/ComponentTreeUnderstanding.tsx +26 -0
  91. package/tests/test-app/src/pages/appthen_guide/DataBindingLearning.tsx +26 -0
  92. package/tests/test-app/src/pages/article-list.tsx +222 -0
  93. package/tests/test-app/src/pages/babyProductRecommendationPage.tsx +168 -0
  94. package/tests/test-app/src/pages/back-end/adminRootLayout.tsx +155 -0
  95. package/tests/test-app/src/pages/back-end/adminRootLayout10.tsx +157 -0
  96. package/tests/test-app/src/pages/back-end/adminRootLayout2.tsx +156 -0
  97. package/tests/test-app/src/pages/back-end/adminRootLayout3.tsx +156 -0
  98. package/tests/test-app/src/pages/back-end/adminRootLayout4.tsx +157 -0
  99. package/tests/test-app/src/pages/back-end/adminRootLayout5.tsx +157 -0
  100. package/tests/test-app/src/pages/back-end/adminRootLayout6.tsx +157 -0
  101. package/tests/test-app/src/pages/back-end/adminRootLayout7.tsx +157 -0
  102. package/tests/test-app/src/pages/back-end/adminRootLayout8.tsx +157 -0
  103. package/tests/test-app/src/pages/back-end/adminRootLayout9.tsx +157 -0
  104. package/tests/test-app/src/pages/back-end/backgroundManagementSystem.css +5 -0
  105. package/tests/test-app/src/pages/back-end/backgroundManagementSystem.tsx +1745 -0
  106. package/tests/test-app/src/pages/category-list.tsx +179 -0
  107. package/tests/test-app/src/pages/comment-list.tsx +194 -0
  108. package/tests/test-app/src/pages/component/WorkOrderCard.tsx +140 -0
  109. package/tests/test-app/src/pages/cover.tsx +42 -0
  110. package/tests/test-app/src/pages/cyberpunk/cyberpunkCRMPage.tsx +1299 -0
  111. package/tests/test-app/src/pages/data-analytics.tsx +1872 -0
  112. package/tests/test-app/src/pages/data-overview.tsx +600 -0
  113. package/tests/test-app/src/pages/data_dashboard/blueBrightGreenTechnologyWind.css +181 -0
  114. package/tests/test-app/src/pages/data_dashboard/blueBrightGreenTechnologyWind.tsx +225 -0
  115. package/tests/test-app/src/pages/data_dashboard/blueLargeScreen.css +181 -0
  116. package/tests/test-app/src/pages/data_dashboard/blueLargeScreen.tsx +138 -0
  117. package/tests/test-app/src/pages/data_dashboard/component_library/BlueBrightGreenBorder.tsx +47 -0
  118. package/tests/test-app/src/pages/data_dashboard/component_library/FullScreenContainer.tsx +133 -0
  119. package/tests/test-app/src/pages/demo-error-page.tsx +119 -0
  120. package/tests/test-app/src/pages/department-list.tsx +183 -0
  121. package/tests/test-app/src/pages/description_of_mock_interface.md +32 -0
  122. package/tests/test-app/src/pages/digitalLargeScreen.css +181 -0
  123. package/tests/test-app/src/pages/digitalLargeScreen.tsx +1417 -0
  124. package/tests/test-app/src/pages/goods-list.tsx +233 -0
  125. package/tests/test-app/src/pages/housekeeping/adminDashboardPage.tsx +880 -0
  126. package/tests/test-app/src/pages/mobile_terminal/PersonalCenter.css +3 -0
  127. package/tests/test-app/src/pages/mobile_terminal/PersonalCenter.tsx +362 -0
  128. package/tests/test-app/src/pages/mobile_terminal/WorkOrderHomepage.tsx +337 -0
  129. package/tests/test-app/src/pages/mobile_terminal/newWorkOrder.tsx +224 -0
  130. package/tests/test-app/src/pages/mobile_terminal/tabbar.tsx +67 -0
  131. package/tests/test-app/src/pages/mobile_terminal/uiHandsOnPractice.tsx +638 -0
  132. package/tests/test-app/src/pages/mobile_terminal/workOrderDetails.tsx +346 -0
  133. package/tests/test-app/src/pages/mobile_terminal/workOrderPage.tsx +345 -0
  134. package/tests/test-app/src/pages/notice-list.tsx +217 -0
  135. package/tests/test-app/src/pages/order-detail.tsx +330 -0
  136. package/tests/test-app/src/pages/order-list.tsx +195 -0
  137. package/tests/test-app/src/pages/order-management.tsx +563 -0
  138. package/tests/test-app/src/pages/page/OrderList.tsx +230 -0
  139. package/tests/test-app/src/pages/role-list.tsx +184 -0
  140. package/tests/test-app/src/pages/simple/simplePage.tsx +92 -0
  141. package/tests/test-app/src/pages/simple-page.tsx +43 -0
  142. package/tests/test-app/src/pages/test-destructure.tsx +44 -0
  143. package/tests/test-app/src/pages/test-error-page.tsx +75 -0
  144. package/tests/test-app/src/pages/test-page-with-errors.tsx +51 -0
  145. package/tests/test-app/src/pages/test-page.tsx +101 -0
  146. package/tests/test-app/src/pages/test-render.tsx +52 -0
  147. package/tests/test-app/src/pages/test-return-type.tsx +41 -0
  148. package/tests/test-app/src/pages/test-type-assertion.tsx +37 -0
  149. package/tests/test-app/src/pages/testPage.css +3 -0
  150. package/tests/test-app/src/pages/testPage.tsx +158 -0
  151. package/tests/test-app/src/pages/ui/styleSelectorPage.tsx +1554 -0
  152. package/tests/test-app/src/pages/user-list.tsx +212 -0
  153. package/tests/test-app/src/pages/web_version/website.css +205 -0
  154. package/tests/test-app/src/pages/web_version/website.tsx +1066 -0
  155. package/tests/test-app/src/pages/wrong-page.tsx +50 -0
  156. package/tests/test-app/src/pages//345/276/205/345/212/236.apidoc.json +336 -0
  157. package/tests/test-app/src/project.json +1120 -0
  158. package/tests/test-app/src/store/global.store.ts +10 -0
  159. package/tests/test-app/src/types/CreateTicketParams.m.ts +20 -0
  160. package/tests/test-app/src/types/SLAPolicy.ts +50 -0
  161. package/tests/test-app/src/types/Ticket.ts +68 -0
  162. package/tests/test-app/src/types/TicketAttachment.m.ts +67 -0
  163. package/tests/test-app/src/types/TicketComment.m.ts +59 -0
  164. package/tests/test-app/src/types/TicketEvaluation.ts +44 -0
  165. package/tests/test-app/src/types/TicketHistory.m.ts +71 -0
  166. package/tests/test-app/src/types/TicketListParams.m.ts +30 -0
  167. package/tests/test-app/src/types/TicketPriority.m.ts +65 -0
  168. package/tests/test-app/src/types/TicketRecord.ts +47 -0
  169. package/tests/test-app/src/types/TrainDoor.ts +284 -0
  170. package/tests/test-app/src/types/UpdateTicketParams.m.ts +22 -0
  171. package/tests/test-app/src/utils/__afterRequest.util.ts +3 -0
  172. package/tests/test-app/src/utils/__beforeRequest.util.ts +10 -0
  173. package/tests/test-app/src/utils/testGlobalAction.util.ts +7 -0
@@ -0,0 +1,393 @@
1
+ /**
2
+ * 订单详情
3
+ * 订单详细信息展示
4
+ *
5
+ * @type Page
6
+ * @route /order/detail
7
+ * @screen 1920w
8
+ * @frames web
9
+ */
10
+ import React from 'react';
11
+
12
+
13
+
14
+ class IProps {
15
+ orderId?: number;
16
+ }
17
+
18
+ /*
19
+ * 数据与接口请求定义
20
+ */
21
+ class IState {
22
+ orderDetail?: {
23
+ /* @example ORD20240115001 */id?: string,
24
+ /* @example shipped */status?: string,
25
+ /* @example 2024-01-15 10:30:00 */createTime?: string,
26
+ /* @example 2024-01-16 14:20:00 */updateTime?: string,
27
+ user?: {
28
+ /* @example 1 */id?: number,
29
+ /* @example 张三 */name?: string,
30
+ /* @example 13800138000 */phone?: string,
31
+ /* @example 北京市海淀区中关村大街1号 */address?: string,
32
+ },
33
+ items?: {
34
+ /* @example 1 */id?: number,
35
+ /* @example 商品A */name?: string,
36
+ /* @example 2 */quantity?: number,
37
+ /* @example 99 */price?: number,
38
+ /* @example https://via.placeholder.com/80 */image?: string,
39
+ }[],
40
+ payment?: {
41
+ /* @example wechat */method?: string,
42
+ /* @example 496 */amount?: number,
43
+ /* @example 2024-01-15 10:35:00 */time?: string,
44
+ /* @example paid */status?: string,
45
+ },
46
+ shipping?: {
47
+ /* @example express */method?: string,
48
+ /* @example 顺丰快递 */company?: string,
49
+ /* @example SF1234567890 */trackingNumber?: string,
50
+ /* @example 10 */fee?: number,
51
+ /* @example 北京市海淀区中关村大街1号 */address?: string,
52
+ },
53
+ };
54
+ loading?: boolean;
55
+ showTimeline?: boolean;
56
+ activeStep?: number;
57
+ }
58
+
59
+ class Document extends React.Component<IProps, IState> {
60
+ state = {
61
+ orderDetail: {
62
+ id: 'ORD20240115001',
63
+ status: 'shipped',
64
+ createTime: '2024-01-15 10:30:00',
65
+ updateTime: '2024-01-16 14:20:00',
66
+ user: {
67
+ id: 1,
68
+ name: '张三',
69
+ phone: '13800138000',
70
+ address: '北京市海淀区中关村大街1号',
71
+ },
72
+ items: [
73
+ {
74
+ id: 1,
75
+ name: '商品A',
76
+ quantity: 2,
77
+ price: 99,
78
+ image: 'https://via.placeholder.com/80',
79
+ },
80
+ {
81
+ id: 2,
82
+ name: '商品B',
83
+ quantity: 1,
84
+ price: 199,
85
+ image: 'https://via.placeholder.com/80',
86
+ },
87
+ {
88
+ id: 3,
89
+ name: '商品C',
90
+ quantity: 3,
91
+ price: 49,
92
+ image: 'https://via.placeholder.com/80',
93
+ },
94
+ ],
95
+ payment: {
96
+ method: 'wechat',
97
+ amount: 496,
98
+ time: '2024-01-15 10:35:00',
99
+ status: 'paid',
100
+ },
101
+ shipping: {
102
+ method: 'express',
103
+ company: '顺丰快递',
104
+ trackingNumber: 'SF1234567890',
105
+ fee: 10,
106
+ address: '北京市海淀区中关村大街1号',
107
+ },
108
+ },
109
+ loading: false,
110
+ showTimeline: true,
111
+ activeStep: 2,
112
+ };
113
+
114
+ toggleTimeline() {
115
+ this.setState({
116
+ showTimeline: !this.state.showTimeline,
117
+ });
118
+ }
119
+
120
+ handleCancelOrder() {
121
+ console.log('取消订单');
122
+ }
123
+
124
+ handleRefund() {
125
+ console.log('申请退款');
126
+ }
127
+
128
+ handleContactSupport() {
129
+ console.log('联系客服');
130
+ }
131
+
132
+ render() {
133
+ // 💀 死亡:变量声明 - 解构赋值
134
+ const { orderDetail, loading, showTimeline, activeStep } = this.state;
135
+
136
+ // 💀 死亡:变量声明 - 计算属性
137
+ // 💀 死亡:变量声明 - 计算属性
138
+ const totalItems = orderDetail.items.reduce(
139
+ (sum, item) => sum + item.quantity,
140
+ 0
141
+ );
142
+ const totalAmount = orderDetail.items.reduce(
143
+ (sum, item) => sum + item.price * item.quantity,
144
+ 0
145
+ );
146
+ const finalAmount = totalAmount + orderDetail.shipping.fee;
147
+
148
+ // 💀 死亡:变量声明 - 状态配置
149
+ // 💀 死亡:变量声明 - 状态配置
150
+ const statusConfig = {
151
+ pending: {
152
+ label: '待付款',
153
+ color: 'orange',
154
+ step: 0,
155
+ },
156
+ paid: {
157
+ label: '已付款',
158
+ color: 'blue',
159
+ step: 1,
160
+ },
161
+ shipped: {
162
+ label: '已发货',
163
+ color: 'green',
164
+ step: 2,
165
+ },
166
+ delivered: {
167
+ label: '已送达',
168
+ color: 'cyan',
169
+ step: 3,
170
+ },
171
+ completed: {
172
+ label: '已完成',
173
+ color: 'green',
174
+ step: 4,
175
+ },
176
+ cancelled: {
177
+ label: '已取消',
178
+ color: 'red',
179
+ step: -1,
180
+ },
181
+ };
182
+
183
+ // 💀 死亡:变量声明 - 支付方式配置
184
+ // 💀 死亡:变量声明 - 支付方式配置
185
+ const paymentMethods = {
186
+ wechat: {
187
+ label: '微信支付',
188
+ icon: '💚',
189
+ },
190
+ alipay: {
191
+ label: '支付宝',
192
+ icon: '💙',
193
+ },
194
+ card: {
195
+ label: '银行卡',
196
+ icon: '💳',
197
+ },
198
+ };
199
+
200
+ // 💀 死亡:if 语句 - 条件渲染
201
+ // 💀 死亡:if 语句 - 条件渲染
202
+ if (loading) {
203
+ return <View className="p-6">加载中...</View>;
204
+ }
205
+
206
+ // 💀 死亡:变量声明 - 当前状态
207
+ // 💀 死亡:变量声明 - 当前状态
208
+ const currentStatus = statusConfig[orderDetail.status];
209
+
210
+ // 💀 死亡:变量声明 - JSX 片段
211
+ // 💀 死亡:变量声明 - JSX 片段
212
+ const orderItemCard = item => (
213
+ <View
214
+ key={item.id}
215
+ className="flex items-center gap-4 p-4 border rounded"
216
+ >
217
+ <Image src={item.image} width={80} height={80} className="rounded" />
218
+ <View className="flex-1">
219
+ <Text className="font-bold">{item.name}</Text>
220
+ <Text className="text-gray-500">数量: {item.quantity}</Text>
221
+ </View>
222
+ <Text className="text-lg font-bold">¥{item.price.toFixed(2)}</Text>
223
+ </View>
224
+ );
225
+
226
+ // 💀 死亡:变量声明 - 时间线数据
227
+ // 💀 死亡:变量声明 - 时间线数据
228
+ const timelineData = [
229
+ {
230
+ time: '2024-01-15 10:30',
231
+ title: '订单创建',
232
+ description: '订单创建成功',
233
+ },
234
+ {
235
+ time: '2024-01-15 10:35',
236
+ title: '支付成功',
237
+ description: '已完成支付',
238
+ },
239
+ {
240
+ time: '2024-01-16 14:20',
241
+ title: '已发货',
242
+ description: '顺丰快递已揽收',
243
+ },
244
+ ];
245
+ return (
246
+ <Page className="p-[24px] bg-[var(--gray-50)] min-h-screen">
247
+ <View className="mb-[24px]">
248
+ <Text className="text-2xl font-bold text-[#1f2937]">订单详情</Text>
249
+ <Text className="text-[#6b7280] text-sm mt-[4px]">
250
+ 订单详细信息展示
251
+ </Text>
252
+ </View>
253
+ <Card className="mb-[24px]">
254
+ <View className="flex items-center justify-between">
255
+ <View>
256
+ <Tag
257
+ color={currentStatus.color}
258
+ className="text-lg pl-[16px] pr-[16px] pt-[8px] pb-[8px]"
259
+ >
260
+ <Text>{currentStatus.label}</Text>
261
+ </Tag>
262
+ <Text className="text-[#6b7280] mt-[8px]">
263
+ 订单号:{orderDetail.id}
264
+ </Text>
265
+ </View>
266
+ <Steps current={currentStatus.step}>
267
+ <Steps.Step title="待付款" description="等待买家付款" />
268
+ <Steps.Step title="已付款" description="买家已付款" />
269
+ <Steps.Step title="已发货" description="商家已发货" />
270
+ <Steps.Step title="已完成" description="交易完成" />
271
+ </Steps>
272
+ </View>
273
+ </Card>
274
+ <Card className="mb-[24px]">
275
+ <Text className="block text-lg font-bold mb-[16px]">基本信息</Text>
276
+ <Descriptions column={2}>
277
+ <Descriptions.Item label="订单号">
278
+ <Text>{orderDetail.id}</Text>
279
+ </Descriptions.Item>
280
+ <Descriptions.Item label="下单时间">
281
+ <Text>{orderDetail.createTime}</Text>
282
+ </Descriptions.Item>
283
+ <Descriptions.Item label="收货人">
284
+ <Text>{orderDetail.user.name}</Text>
285
+ </Descriptions.Item>
286
+ <Descriptions.Item label="联系电话">
287
+ <Text>{orderDetail.user.phone}</Text>
288
+ </Descriptions.Item>
289
+ <Descriptions.Item label="收货地址" span={2}>
290
+ <Text>{orderDetail.shipping.address}</Text>
291
+ </Descriptions.Item>
292
+ </Descriptions>
293
+ </Card>
294
+ <Card className="mb-[24px]">
295
+ <Text className="block text-lg font-bold mb-[16px]">商品列表</Text>
296
+ <View className="space-y-3">
297
+ {orderDetail.items.map((item, index) => (
298
+ <Text>{orderItemCard(item)}</Text>
299
+ ))}
300
+ </View>
301
+ <Divider />
302
+ <View className="text-[var(--right)]">
303
+ <Text>商品总计:</Text>
304
+ <Text className="text-xl font-bold ml-[8px]">
305
+ ¥{totalAmount.toFixed(2)}
306
+ </Text>
307
+ </View>
308
+ <View className="text-[var(--right)] mt-[8px]">
309
+ <Text>运费:</Text>
310
+ <Text className="ml-[8px]">
311
+ ¥{orderDetail.shipping.fee.toFixed(2)}
312
+ </Text>
313
+ </View>
314
+ <View className="text-[var(--right)] mt-[8px]">
315
+ <Text>实付款:</Text>
316
+ <Text className="text-2xl font-bold text-[#ef4444] ml-[8px]">
317
+ ¥{finalAmount.toFixed(2)}
318
+ </Text>
319
+ </View>
320
+ </Card>
321
+ <Card className="mb-[24px]">
322
+ <Text className="block text-lg font-bold mb-[16px]">支付信息</Text>
323
+ <Descriptions column={2}>
324
+ <Descriptions.Item label="支付方式">
325
+ <Text>{paymentMethods[orderDetail.payment.method].icon}</Text>
326
+ <Text>{paymentMethods[orderDetail.payment.method].label}</Text>
327
+ </Descriptions.Item>
328
+ <Descriptions.Item label="支付金额">
329
+ ¥<Text>{orderDetail.payment.amount.toFixed(2)}</Text>
330
+ </Descriptions.Item>
331
+ <Descriptions.Item label="支付时间">
332
+ <Text>{orderDetail.payment.time}</Text>
333
+ </Descriptions.Item>
334
+ <Descriptions.Item label="支付状态">
335
+ <Tag color="green">已支付</Tag>
336
+ </Descriptions.Item>
337
+ </Descriptions>
338
+ </Card>
339
+ <Card className="mb-[24px]">
340
+ <View className="flex items-center justify-between mb-[16px]">
341
+ <Text className="text-lg font-bold">物流信息</Text>
342
+ <Button onClick={() => this.toggleTimeline()}>
343
+ {showTimeline ? '隐藏' : '显示'}时间线
344
+ </Button>
345
+ </View>
346
+ <Descriptions column={2}>
347
+ <Descriptions.Item label="快递公司">
348
+ <Text>{orderDetail.shipping.company}</Text>
349
+ </Descriptions.Item>
350
+ <Descriptions.Item label="运单号">
351
+ <Text>{orderDetail.shipping.trackingNumber}</Text>
352
+ </Descriptions.Item>
353
+ </Descriptions>
354
+ {!!showTimeline && (
355
+ <View className="mt-[16px]">
356
+ <Timeline>
357
+ {timelineData.map((item, index) => (
358
+ <Timeline.Item key={index}>
359
+ <Text className="font-bold">{item.title}</Text>
360
+ <Text className="block text-[#6b7280] text-sm">
361
+ {item.time}
362
+ </Text>
363
+ <Text className="text-[#4b5563]">{item.description}</Text>
364
+ </Timeline.Item>
365
+ ))}
366
+ </Timeline>
367
+ </View>
368
+ )}
369
+ </Card>
370
+ <Card>
371
+ <Space>
372
+ <Button onClick={() => this.handleContactSupport()}>
373
+ 联系客服
374
+ </Button>
375
+ {!!(orderDetail.status === 'pending') && (
376
+ <Button onClick={() => this.handleCancelOrder()} danger={true}>
377
+ 取消订单
378
+ </Button>
379
+ )}
380
+ {!!(orderDetail.status === 'shipped') && (
381
+ <Button type="primary" onClick={() => this.handleRefund()}>
382
+ 申请退款
383
+ </Button>
384
+ )}
385
+ <Button>再次购买</Button>
386
+ </Space>
387
+ </Card>
388
+ </Page>
389
+ );
390
+ }
391
+ }
392
+
393
+ export default Document;