@chenchaolong/plugin-trade-compliance-workbench 1.0.18 → 1.0.19

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 (67) hide show
  1. package/dist/lib/domain/contract-number.js +2 -2
  2. package/dist/lib/domain/contract-number.js.map +1 -1
  3. package/dist/lib/remote-components/trade-compliance-workbench/app.css +1 -1
  4. package/dist/lib/remote-components/trade-compliance-workbench/app.js +5 -5
  5. package/dist/lib/remote-ui/app-source.d.ts.map +1 -1
  6. package/dist/lib/remote-ui/app-source.js +190 -64
  7. package/dist/lib/remote-ui/app-source.js.map +1 -1
  8. package/dist/lib/remote-ui/components/forms.js +1 -1
  9. package/dist/lib/remote-ui/components/forms.js.map +1 -1
  10. package/dist/lib/remote-ui/components/task-status.d.ts +2 -1
  11. package/dist/lib/remote-ui/components/task-status.d.ts.map +1 -1
  12. package/dist/lib/remote-ui/components/task-status.js +5 -4
  13. package/dist/lib/remote-ui/components/task-status.js.map +1 -1
  14. package/dist/lib/remote-ui/import-task-status.d.ts +10 -0
  15. package/dist/lib/remote-ui/import-task-status.d.ts.map +1 -0
  16. package/dist/lib/remote-ui/import-task-status.js +236 -0
  17. package/dist/lib/remote-ui/import-task-status.js.map +1 -0
  18. package/dist/lib/remote-ui/model.d.ts.map +1 -1
  19. package/dist/lib/remote-ui/model.js +2 -1
  20. package/dist/lib/remote-ui/model.js.map +1 -1
  21. package/dist/lib/remote-ui/pages/analytics-prototype.css +307 -0
  22. package/dist/lib/remote-ui/pages/catalogs.css +681 -0
  23. package/dist/lib/remote-ui/pages/catalogs.d.ts +5 -3
  24. package/dist/lib/remote-ui/pages/catalogs.d.ts.map +1 -1
  25. package/dist/lib/remote-ui/pages/catalogs.js +6 -6
  26. package/dist/lib/remote-ui/pages/catalogs.js.map +1 -1
  27. package/dist/lib/remote-ui/pages/contracts.css +259 -0
  28. package/dist/lib/remote-ui/pages/contracts.d.ts.map +1 -1
  29. package/dist/lib/remote-ui/pages/contracts.js +36 -13
  30. package/dist/lib/remote-ui/pages/contracts.js.map +1 -1
  31. package/dist/lib/remote-ui/pages/files-prototype.css +547 -0
  32. package/dist/lib/remote-ui/pages/files.d.ts +3 -2
  33. package/dist/lib/remote-ui/pages/files.d.ts.map +1 -1
  34. package/dist/lib/remote-ui/pages/files.js +15 -15
  35. package/dist/lib/remote-ui/pages/files.js.map +1 -1
  36. package/dist/lib/remote-ui/pages/procurement-contracts.css +939 -0
  37. package/dist/lib/remote-ui/pages/procurement.js +1 -1
  38. package/dist/lib/remote-ui/pages/procurement.js.map +1 -1
  39. package/dist/lib/remote-ui/pages/sales-files.css +512 -0
  40. package/dist/lib/remote-ui/pages/sales.js +2 -2
  41. package/dist/lib/remote-ui/pages/sales.js.map +1 -1
  42. package/dist/lib/remote-ui/pages/settings.css +178 -0
  43. package/dist/lib/remote-ui/pages/settings.js +1 -1
  44. package/dist/lib/remote-ui/pages/settings.js.map +1 -1
  45. package/dist/lib/remote-ui/polling.d.ts +1 -1
  46. package/dist/lib/remote-ui/polling.d.ts.map +1 -1
  47. package/dist/lib/remote-ui/polling.js +4 -2
  48. package/dist/lib/remote-ui/polling.js.map +1 -1
  49. package/dist/lib/remote-ui/purchase-review-adapter.d.ts +4 -0
  50. package/dist/lib/remote-ui/purchase-review-adapter.d.ts.map +1 -0
  51. package/dist/lib/remote-ui/purchase-review-adapter.js +78 -0
  52. package/dist/lib/remote-ui/purchase-review-adapter.js.map +1 -0
  53. package/dist/lib/remote-ui/styles.css +588 -0
  54. package/dist/lib/sales-file.service.d.ts.map +1 -1
  55. package/dist/lib/sales-file.service.js +19 -7
  56. package/dist/lib/sales-file.service.js.map +1 -1
  57. package/dist/lib/workbench-view.provider.d.ts +24 -0
  58. package/dist/lib/workbench-view.provider.d.ts.map +1 -1
  59. package/dist/lib/workbench-view.provider.js +19 -4
  60. package/dist/lib/workbench-view.provider.js.map +1 -1
  61. package/dist/lib/workbench.plugin.d.ts.map +1 -1
  62. package/dist/lib/workbench.plugin.js +1 -2
  63. package/dist/lib/workbench.plugin.js.map +1 -1
  64. package/dist/lib/workbench.service.d.ts.map +1 -1
  65. package/dist/lib/workbench.service.js +36 -10
  66. package/dist/lib/workbench.service.js.map +1 -1
  67. package/package.json +4 -1
@@ -0,0 +1,512 @@
1
+ .tcw-sales-files-page {
2
+ --sf-blue: #1769ff;
3
+ --sf-blue-soft: #f1f6ff;
4
+ --sf-border: #dbe3ef;
5
+ --sf-text: #172033;
6
+ color: var(--sf-text);
7
+ }
8
+
9
+ .tcw-sales-heading {
10
+ display: flex;
11
+ align-items: flex-start;
12
+ justify-content: space-between;
13
+ gap: 10px;
14
+ margin: 0 0 10px;
15
+ }
16
+
17
+ .tcw-sales-heading .tcw-list-heading {
18
+ margin: 0;
19
+ color: #111b2f;
20
+ font-size: 20px;
21
+ line-height: 1.25;
22
+ font-weight: 700;
23
+ }
24
+
25
+ .tcw-sales-heading p {
26
+ margin: 8px 0 0;
27
+ color: #687389;
28
+ font-size: 14px;
29
+ line-height: 1.5;
30
+ }
31
+
32
+ .tcw-sales-heading > .tcw-button {
33
+ min-height: 36px;
34
+ border-color: var(--sf-blue);
35
+ color: var(--sf-blue);
36
+ background: #fff;
37
+ }
38
+
39
+ .tcw-sales-files-page .tcw-filter-panel {
40
+ margin-bottom: 8px;
41
+ padding: 10px 12px;
42
+ border-color: var(--sf-border);
43
+ border-radius: 7px;
44
+ box-shadow: 0 1px 4px rgba(24, 45, 78, .04);
45
+ }
46
+
47
+ .tcw-sales-files-page .tcw-filter-grid {
48
+ gap: 8px 10px;
49
+ }
50
+
51
+ .tcw-sales-files-page .tcw-filter-control {
52
+ gap: 8px;
53
+ }
54
+
55
+ .tcw-sales-files-page .tcw-filter-control > span {
56
+ color: #263147;
57
+ font-size: 14px;
58
+ }
59
+
60
+ .tcw-sales-files-page .tcw-filter-control input,
61
+ .tcw-sales-files-page .tcw-filter-control select {
62
+ height: 34px;
63
+ border-color: #cfd8e5;
64
+ border-radius: 4px;
65
+ }
66
+
67
+ .tcw-sales-files-page .tcw-filter-actions .tcw-button {
68
+ min-height: 34px;
69
+ padding-inline: 16px;
70
+ }
71
+
72
+ .tcw-sales-files-page .tcw-button--primary,
73
+ .tcw-sales-files-page .tcw-pagination button:not(:disabled):hover {
74
+ border-color: var(--sf-blue);
75
+ background: var(--sf-blue);
76
+ }
77
+
78
+ .tcw-sales-files-page .tcw-notice {
79
+ min-height: 40px;
80
+ margin-bottom: 12px;
81
+ align-items: center;
82
+ border-color: #9bc0ff;
83
+ border-radius: 6px;
84
+ color: #1763d7;
85
+ background: var(--sf-blue-soft);
86
+ }
87
+
88
+ .tcw-sales-files-page .tcw-grid-section {
89
+ border-color: var(--sf-border);
90
+ border-radius: 6px;
91
+ }
92
+
93
+ .tcw-sales-files-page .tcw-data-table {
94
+ color: #1c273a;
95
+ font-size: 12px;
96
+ }
97
+
98
+ .tcw-sales-files-page .tcw-data-table th,
99
+ .tcw-sales-files-page .tcw-data-table td {
100
+ height: 36px;
101
+ padding: 6px 10px;
102
+ border-bottom-color: #e2e8f1;
103
+ }
104
+
105
+ .tcw-sales-files-page .tcw-data-table th {
106
+ color: #283448;
107
+ background: #f8fafc;
108
+ font-weight: 650;
109
+ }
110
+
111
+ .tcw-sales-files-page .tcw-row-actions {
112
+ gap: 11px;
113
+ }
114
+
115
+ .tcw-sales-files-page .tcw-data-table .action-column {
116
+ overflow: visible;
117
+ }
118
+
119
+ .tcw-sales-files-page--orders .tcw-data-table {
120
+ table-layout: fixed;
121
+ }
122
+
123
+ .tcw-sales-files-page--orders .tcw-data-table :is(th, td):not(.action-column) {
124
+ width: auto !important;
125
+ min-width: 0 !important;
126
+ max-width: none !important;
127
+ overflow: hidden;
128
+ text-overflow: ellipsis;
129
+ }
130
+
131
+ .tcw-sales-files-page--orders .tcw-data-table th.tcw-align-right {
132
+ white-space: normal;
133
+ overflow-wrap: anywhere;
134
+ line-height: 1.25;
135
+ }
136
+
137
+ .tcw-sales-files-page--orders .tcw-row-actions {
138
+ width: 100%;
139
+ min-width: 0;
140
+ justify-content: flex-start;
141
+ }
142
+
143
+ .tcw-sales-files-page--orders .tcw-row-actions > button {
144
+ flex: 0 0 auto;
145
+ }
146
+
147
+ .tcw-sales-files-page .tcw-row-actions button,
148
+ .tcw-sales-files-page .tcw-table-link {
149
+ color: #1265e8;
150
+ }
151
+
152
+ .tcw-sales-files-page .tcw-pagination {
153
+ min-height: 48px;
154
+ border-top: 0;
155
+ color: #1d293c;
156
+ }
157
+
158
+ .tcw-sales-files-page .tcw-tag {
159
+ min-height: 22px;
160
+ border: 0;
161
+ border-radius: 999px;
162
+ color: #14935a;
163
+ background: #e5f8ee;
164
+ }
165
+
166
+ .tcw-sales-files-page .tcw-tag--warning {
167
+ color: #ed7a15;
168
+ background: #fff0e3;
169
+ }
170
+
171
+ .tcw-sales-page--orders .tcw-context-bar,
172
+ .tcw-sales-page--lines .tcw-context-bar,
173
+ .tcw-sales-files-page--history .tcw-context-bar {
174
+ min-height: 58px;
175
+ margin-bottom: 12px;
176
+ padding: 8px 14px;
177
+ border-color: var(--sf-border);
178
+ border-radius: 7px;
179
+ }
180
+
181
+ .tcw-sales-page--orders .tcw-context-bar strong {
182
+ margin-right: 10px;
183
+ }
184
+
185
+ .tcw-sales-page--orders .tcw-metric-grid {
186
+ grid-template-columns: repeat(4, minmax(0, 1fr));
187
+ gap: 12px;
188
+ margin-bottom: 12px;
189
+ }
190
+
191
+ .tcw-sales-page--orders .tcw-metric-grid article {
192
+ position: relative;
193
+ min-height: 64px;
194
+ padding: 10px 12px 9px 50px;
195
+ border: 1px solid var(--sf-border);
196
+ border-radius: 7px;
197
+ }
198
+
199
+ .tcw-sales-page--orders .tcw-metric-grid article::before {
200
+ position: absolute;
201
+ top: 12px;
202
+ left: 12px;
203
+ display: grid;
204
+ width: 28px;
205
+ height: 28px;
206
+ place-items: center;
207
+ border-radius: 50%;
208
+ color: var(--sf-blue);
209
+ background: #eaf1ff;
210
+ font-family: remixicon;
211
+ font-size: 18px;
212
+ content: "\ea71";
213
+ }
214
+
215
+ .tcw-sales-page--orders .tcw-metric-grid article:nth-child(3)::before { color: #11a963; background: #e5f8ee; content: "\f0d7"; }
216
+ .tcw-sales-page--orders .tcw-metric-grid article:nth-child(4)::before { color: #f17d1d; background: #fff0e3; content: "\ef63"; }
217
+ .tcw-sales-page--orders .tcw-metric-grid article:nth-child(n+5) { min-height: 72px; }
218
+ .tcw-sales-page--orders .tcw-sales-top { margin-bottom: 12px; }
219
+ .tcw-sales-page--orders .tcw-metric-grid article strong { font-size: 20px; }
220
+ .tcw-sales-page--orders .tcw-metric-grid article small { position: static; margin-top: 2px; font-size: 12px; line-height: 1.4; }
221
+
222
+ .tcw-sales-page--lines .tcw-order-summary {
223
+ display: grid;
224
+ grid-template-columns: repeat(3, minmax(0, 1fr));
225
+ min-height: 60px;
226
+ }
227
+
228
+ .tcw-sales-page--lines .tcw-order-summary strong,
229
+ .tcw-sales-page--lines .tcw-order-summary span {
230
+ display: grid;
231
+ gap: 7px;
232
+ color: #162136;
233
+ }
234
+
235
+ .tcw-sales-page--lines .tcw-order-summary strong::before { color: #6b7689; font-size: 12px; font-weight: 400; content: "销售订单编号"; }
236
+ .tcw-sales-page--lines .tcw-order-summary span:nth-child(2)::before { color: #6b7689; font-size: 12px; content: "客户合同编号"; }
237
+ .tcw-sales-page--lines .tcw-order-summary span:nth-child(3)::before { color: #6b7689; font-size: 12px; content: "采购合同编号"; }
238
+
239
+ .tcw-sales-page--lines .tcw-data-table .action-column {
240
+ position: sticky;
241
+ right: 0;
242
+ z-index: 2;
243
+ background: #fff;
244
+ }
245
+
246
+ .tcw-sales-page--lines .tcw-data-table thead .action-column {
247
+ z-index: 3;
248
+ background: #f8fafc;
249
+ }
250
+
251
+ .tcw-sales-page--lines .tcw-row-actions {
252
+ justify-content: center;
253
+ white-space: nowrap;
254
+ }
255
+
256
+ .tcw-sales-files-page--history .tcw-context-bar .tcw-button { order: 3; margin-left: auto; border-color: var(--sf-blue); color: var(--sf-blue); }
257
+
258
+ .tcw-modal-backdrop:has(:is(.tcw-sales-customer-dialog, .tcw-sales-order-dialog, .tcw-sales-risk-dialog)) {
259
+ background: rgba(255, 255, 255, .68);
260
+ backdrop-filter: blur(2px);
261
+ }
262
+
263
+ .tcw-modal-backdrop:has(.tcw-sales-generate-dialog) {
264
+ background: rgba(255, 255, 255, .68);
265
+ backdrop-filter: blur(2px);
266
+ }
267
+
268
+ .tcw-modal-backdrop:has(.tcw-sales-bank-dialog input[value="CI"]) {
269
+ background: rgba(255, 255, 255, .68);
270
+ backdrop-filter: blur(2px);
271
+ }
272
+
273
+ .tcw-modal-backdrop:has(.tcw-sales-bank-dialog input[value="PI"]) {
274
+ background: rgba(0, 0, 0, .52);
275
+ backdrop-filter: none;
276
+ }
277
+
278
+ .tcw-modal:has(.tcw-sales-risk-dialog),
279
+ .tcw-modal:has(.tcw-sales-file-dialog),
280
+ .tcw-modal:has(.tcw-sales-customer-dialog),
281
+ .tcw-modal:has(.tcw-sales-order-dialog),
282
+ .tcw-modal:has(.tcw-sales-bank-dialog),
283
+ .tcw-modal:has(.tcw-sales-generate-dialog),
284
+ .tcw-modal:has(.tcw-sales-file-delete-dialog) {
285
+ border-radius: 8px;
286
+ box-shadow: 0 18px 55px rgba(16, 28, 48, .26);
287
+ }
288
+
289
+ .tcw-modal:has(.tcw-sales-risk-dialog) { width: min(760px, calc(100vw - 40px)); }
290
+ .tcw-modal:has(.tcw-sales-file-dialog) { width: min(640px, calc(100vw - 40px)); min-height: min(580px, calc(100vh - 40px)); transform: translate(12px, 4px); }
291
+ .tcw-modal:has(.tcw-sales-customer-dialog) { width: min(740px, calc(100vw - 40px)); max-height: min(560px, calc(100vh - 40px)); }
292
+ .tcw-modal:has(.tcw-sales-order-dialog) { width: min(760px, calc(100vw - 40px)); max-height: min(560px, calc(100vh - 40px)); }
293
+ .tcw-modal:has(.tcw-sales-generate-dialog) { width: min(740px, calc(100vw - 40px)); max-height: min(500px, calc(100vh - 40px)); }
294
+ .tcw-modal:has(.tcw-sales-file-delete-dialog) { width: min(540px, calc(100vw - 40px)); min-height: min(392px, calc(100vh - 40px)); transform: translateY(8px); }
295
+ .tcw-modal:has(.tcw-sales-risk-dialog) > header,
296
+ .tcw-modal:has(.tcw-sales-file-dialog) > header,
297
+ .tcw-modal:has(.tcw-sales-customer-dialog) > header,
298
+ .tcw-modal:has(.tcw-sales-order-dialog) > header { min-height: 50px; padding-inline: 16px; }
299
+ .tcw-modal:has(.tcw-sales-bank-dialog) > header,
300
+ .tcw-modal:has(.tcw-sales-generate-dialog) > header,
301
+ .tcw-modal:has(.tcw-sales-file-delete-dialog) > header { min-height: 50px; padding-inline: 16px; }
302
+ .tcw-modal:has(.tcw-sales-risk-dialog) > footer,
303
+ .tcw-modal:has(.tcw-sales-file-dialog) > footer,
304
+ .tcw-modal:has(.tcw-sales-customer-dialog) > footer,
305
+ .tcw-modal:has(.tcw-sales-order-dialog) > footer { min-height: 52px; padding-inline: 16px; }
306
+ .tcw-modal:has(.tcw-sales-bank-dialog) > footer,
307
+ .tcw-modal:has(.tcw-sales-generate-dialog) > footer,
308
+ .tcw-modal:has(.tcw-sales-file-delete-dialog) > footer { min-height: 52px; padding-inline: 16px; }
309
+ .tcw-modal:has(.tcw-sales-file-dialog) > .tcw-modal-body,
310
+ .tcw-modal:has(.tcw-sales-bank-dialog) > .tcw-modal-body,
311
+ .tcw-modal:has(.tcw-sales-generate-dialog) > .tcw-modal-body,
312
+ .tcw-modal:has(.tcw-sales-file-delete-dialog) > .tcw-modal-body { padding: 12px 16px; }
313
+
314
+ .tcw-sales-bank-dialog { display: grid; gap: 14px; }
315
+ .tcw-bank-order-summary { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px 12px; margin: 0; padding: 10px 12px; border: 1px solid #a9c7ff; border-radius: 7px; background: #f8fbff; }
316
+ .tcw-bank-order-summary div { min-width: 0; }
317
+ .tcw-bank-order-summary dt { color: #66738a; font-size: 12px; }
318
+ .tcw-bank-order-summary dd { margin: 7px 0 0; overflow: hidden; color: #17233a; font-weight: 650; text-overflow: ellipsis; white-space: nowrap; }
319
+ .tcw-bank-dialog-grid { display: grid; grid-template-columns: minmax(0, 1fr) minmax(290px, .9fr); gap: 12px; }
320
+ .tcw-bank-dialog-grid > section { display: grid; align-content: start; gap: 10px; }
321
+ .tcw-bank-dialog-grid > aside { min-height: 88px; padding: 8px 10px; border: 1px solid var(--sf-border); border-radius: 7px; }
322
+ .tcw-bank-dialog-grid h3 { margin: 0 0 8px; font-size: 15px; }
323
+ .tcw-bank-dialog-grid p { margin: 0 0 12px; color: #687389; }
324
+ .tcw-bank-preview-file { display: flex; align-items: center; gap: 8px; padding: 10px; border: 1px solid #dfe6f0; border-radius: 6px; }
325
+ .tcw-bank-preview-file > i { display: grid; width: 28px; height: 28px; place-items: center; border-radius: 5px; color: #1769ff; background: #eaf2ff; font-size: 16px; }
326
+ .tcw-bank-preview-file span { display: grid; gap: 5px; }
327
+ .tcw-bank-preview-file small { color: #6b778c; }
328
+ .tcw-sales-bank-dialog > .tcw-notice { margin: 0; }
329
+
330
+ .tcw-sales-generate-dialog { display: grid; gap: 14px; }
331
+ .tcw-sales-generate-summary { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px 12px; margin: 0; padding: 10px 12px; border: 1px solid #a9c7ff; border-radius: 7px; background: #f8fbff; }
332
+ .tcw-sales-generate-summary dt { color: #66738a; font-size: 12px; }
333
+ .tcw-sales-generate-summary dd { margin: 7px 0 0; overflow: hidden; color: #17233a; font-size: 16px; text-overflow: ellipsis; white-space: nowrap; }
334
+ .tcw-sales-generate-summary > div:nth-child(4) dd { font-size: 16px; font-weight: 700; }
335
+ .tcw-sales-generate-content { display: grid; grid-template-columns: minmax(0, 1.02fr) minmax(300px, .98fr); gap: 12px; }
336
+ .tcw-sales-generate-content > section { display: grid; align-content: start; gap: 8px; }
337
+ .tcw-sales-generate-content .tcw-form-field { grid-template-columns: 86px minmax(0, 1fr); align-items: center; gap: 12px; }
338
+ .tcw-sales-generate-content .tcw-form-field > span { font-weight: 650; }
339
+ .tcw-sales-generate-content :is(input, select) { height: 32px; }
340
+ .tcw-sales-generate-content textarea { min-height: 52px; }
341
+ .tcw-sales-generate-content > aside { min-height: 128px; padding: 8px 10px; border: 1px solid var(--sf-border); border-radius: 7px; background: #fbfcfe; }
342
+ .tcw-sales-generate-content h3 { margin: 0 0 10px; font-size: 15px; }
343
+ .tcw-sales-generate-content p { margin: 0 0 12px; color: #687389; }
344
+ .tcw-sales-generate-content ul { display: grid; gap: 10px; margin: 0; padding: 0; list-style: none; }
345
+ .tcw-sales-generate-content li { display: flex; align-items: center; gap: 12px; }
346
+ .tcw-sales-generate-content li i { color: var(--sf-blue); font-size: 22px; }
347
+ .tcw-sales-generate-dialog > .tcw-notice { margin: 0; border-color: #f0cf91; color: #996816; background: #fff8e8; }
348
+
349
+ .tcw-sales-file-delete-dialog { display: grid; gap: 12px; }
350
+ .tcw-sales-file-delete-dialog h3 { margin: 0; font-size: 17px; }
351
+ .tcw-delete-critical { display: flex; gap: 9px; padding: 10px 12px; border: 1px solid #ffb8b8; border-radius: 6px; color: #e22932; background: #fff1f1; line-height: 1.45; }
352
+ .tcw-delete-critical > i { flex: 0 0 auto; font-size: 18px; }
353
+ .tcw-sales-file-delete-dialog dl { display: grid; grid-template-columns: 1fr 1fr; gap: 10px 16px; margin: 0; padding: 10px 12px; border: 1px solid var(--sf-border); border-radius: 6px; font-size: 12px; }
354
+ .tcw-sales-file-delete-dialog dt { color: #69758a; font-size: 12px; }
355
+ .tcw-sales-file-delete-dialog dd { margin: 4px 0 0; overflow-wrap: anywhere; font-weight: 650; }
356
+ .tcw-sales-file-delete-dialog > p { margin: 0; padding: 8px 10px; border: 1px solid #f0cf91; border-radius: 5px; color: #996816; background: #fff8e8; }
357
+
358
+ @media (min-width: 981px) {
359
+ .tcw-modal:has(.tcw-sales-customer-dialog) { width: min(740px, calc(100vw - 40px)); height: min(560px, calc(100vh - 40px)); max-height: min(560px, calc(100vh - 40px)); transform: translate(16px, 18px); }
360
+ .tcw-modal:has(.tcw-sales-order-dialog) { width: min(760px, calc(100vw - 40px)); height: min(560px, calc(100vh - 40px)); max-height: min(560px, calc(100vh - 40px)); transform: translate(16px, 18px); }
361
+ .tcw-modal:has(.tcw-sales-risk-dialog) { width: min(760px, calc(100vw - 40px)); height: min(580px, calc(100vh - 40px)); max-height: min(580px, calc(100vh - 40px)); transform: translate(16px, 18px); }
362
+ .tcw-modal:has(.tcw-sales-bank-dialog input[value="PI"]) { width: min(760px, calc(100vw - 40px)); height: min(560px, calc(100vh - 40px)); min-height: min(560px, calc(100vh - 40px)); max-height: min(560px, calc(100vh - 40px)); transform: none; }
363
+ .tcw-modal:has(.tcw-sales-bank-dialog input[value="CI"]) { width: min(760px, calc(100vw - 40px)); height: min(540px, calc(100vh - 40px)); min-height: min(540px, calc(100vh - 40px)); max-height: min(540px, calc(100vh - 40px)); transform: translate(16px, 20px); }
364
+ .tcw-modal:has(.tcw-sales-generate-dialog) { width: min(740px, calc(100vw - 40px)); height: min(500px, calc(100vh - 40px)); min-height: min(500px, calc(100vh - 40px)); max-height: min(500px, calc(100vh - 40px)); transform: translate(16px, 20px); }
365
+ }
366
+
367
+ @media (min-width: 981px) and (max-height: 960px) {
368
+ .tcw-sales-page--lines > .tcw-sales-heading--lines {
369
+ margin-bottom: 12px;
370
+ }
371
+
372
+ .tcw-sales-page--lines .tcw-order-summary {
373
+ min-height: 68px;
374
+ margin-bottom: 10px;
375
+ }
376
+
377
+ .tcw-sales-page--lines > .tcw-notice {
378
+ margin-bottom: 10px;
379
+ }
380
+
381
+ .tcw-sales-page--lines > .tcw-filter-panel {
382
+ margin-bottom: 10px;
383
+ padding: 14px 20px;
384
+ }
385
+ }
386
+
387
+ .tcw-sales-customer-dialog,
388
+ .tcw-sales-order-dialog {
389
+ display: grid;
390
+ grid-template-columns: minmax(0, 1.15fr) minmax(280px, .85fr);
391
+ gap: 0 28px;
392
+ }
393
+
394
+ .tcw-sales-customer-dialog > section,
395
+ .tcw-sales-order-dialog > section { min-width: 0; padding-right: 28px; border-right: 1px solid var(--sf-border); }
396
+ .tcw-sales-customer-dialog > aside,
397
+ .tcw-sales-order-dialog > aside { min-width: 0; }
398
+ .tcw-sales-customer-dialog .tcw-field-grid { gap: 7px 14px; }
399
+ .tcw-sales-customer-dialog .tcw-form-field,
400
+ .tcw-sales-order-dialog .tcw-form-field { gap: 6px; }
401
+ .tcw-sales-customer-dialog .tcw-form-field { gap: 3px; }
402
+ .tcw-sales-customer-dialog input,
403
+ .tcw-sales-order-dialog input { height: 37px; }
404
+ .tcw-sales-customer-dialog input { height: 32px; }
405
+ .tcw-sales-customer-dialog input:disabled,
406
+ .tcw-sales-order-dialog input:disabled,
407
+ .tcw-sales-customer-dialog textarea:disabled { color: #41506a; background: #f8fafc; opacity: 1; }
408
+ .tcw-sales-customer-dialog aside dl,
409
+ .tcw-sales-order-dialog aside dl { display: grid; gap: 0; margin: 0 0 18px; }
410
+ .tcw-sales-customer-dialog aside dl > div,
411
+ .tcw-sales-order-dialog aside dl > div { display: grid; grid-template-columns: minmax(112px, .85fr) minmax(0, 1.15fr); align-items: center; min-height: 47px; border-bottom: 1px solid #e8edf4; }
412
+ .tcw-sales-customer-dialog dt,
413
+ .tcw-sales-order-dialog dt { color: #3c485d; font-weight: 650; }
414
+ .tcw-sales-customer-dialog dd,
415
+ .tcw-sales-order-dialog dd { margin: 0; color: #18243a; }
416
+ .tcw-sales-customer-dialog > .tcw-notice,
417
+ .tcw-sales-order-dialog > .tcw-notice { grid-column: 1 / -1; margin: 20px 0 0; }
418
+ .tcw-sales-customer-dialog > .tcw-notice { margin-top: 10px; }
419
+ .tcw-sales-customer-dialog aside dl > div { min-height: 39px; }
420
+ .tcw-sales-customer-dialog aside textarea { max-height: 140px; }
421
+ .tcw-sales-order-dialog aside .tcw-notice { margin: 18px 0 0; }
422
+
423
+ .tcw-modal:has(.tcw-sales-risk-dialog) > .tcw-modal-body {
424
+ min-height: 0;
425
+ overflow-y: auto;
426
+ }
427
+
428
+ .tcw-sales-risk-dialog {
429
+ display: grid;
430
+ grid-template-columns: minmax(0, 1fr) minmax(0, 1.05fr);
431
+ gap: 18px;
432
+ }
433
+
434
+ .tcw-sales-risk-dialog > section:first-child { grid-column: 1 / -1; }
435
+ .tcw-sales-risk-dialog > section { min-width: 0; }
436
+ .tcw-sales-risk-dialog h3 { margin: 0 0 12px; font-size: 16px; }
437
+ .tcw-sales-risk-dialog .tcw-preflight-summary { margin: 0; border: 1px solid var(--sf-border); border-radius: 7px; overflow: hidden; }
438
+ .tcw-sales-risk-dialog .tcw-preflight-summary > div { border: 0; border-bottom: 1px solid #e5eaf1; background: #fff; }
439
+ .tcw-sales-risk-result { scroll-margin-block: 16px; }
440
+ .tcw-sales-match-result { scroll-margin-block: 16px; }
441
+ .tcw-sales-risk-dialog .tcw-grid-section { border-color: var(--sf-border); }
442
+ .tcw-sales-risk-dialog .tcw-data-table { min-width: 560px; }
443
+
444
+ .tcw-sales-file-dialog .tcw-preflight-summary {
445
+ padding: 2px;
446
+ border: 1px solid #a9c7ff;
447
+ border-radius: 7px;
448
+ background: #f8fbff;
449
+ }
450
+
451
+ .tcw-sales-file-dialog .tcw-preflight-summary > div { border: 0; background: transparent; }
452
+ .tcw-sales-file-dialog .tcw-notice { margin-bottom: 0; }
453
+
454
+ @media (max-width: 980px) {
455
+ .tcw-modal:has(.tcw-sales-risk-dialog) {
456
+ max-height: calc(100vh - 12px);
457
+ transform: none;
458
+ }
459
+
460
+ .tcw-modal:has(.tcw-sales-risk-dialog) > .tcw-modal-body {
461
+ min-height: 0;
462
+ overflow-y: auto;
463
+ }
464
+
465
+ .tcw-modal:has(.tcw-sales-file-dialog),
466
+ .tcw-modal:has(.tcw-sales-bank-dialog),
467
+ .tcw-modal:has(.tcw-sales-generate-dialog),
468
+ .tcw-modal:has(.tcw-sales-file-delete-dialog) { min-height: 0; transform: none; }
469
+ .tcw-sales-page--lines > .tcw-sales-heading--lines {
470
+ position: static;
471
+ flex-direction: column;
472
+ flex-wrap: wrap;
473
+ min-height: 116px;
474
+ align-items: flex-start;
475
+ }
476
+ .tcw-sales-page--lines > .tcw-filter-panel {
477
+ padding-block: 12px;
478
+ }
479
+ .tcw-sales-page--lines .tcw-filter-grid {
480
+ gap: 10px;
481
+ }
482
+ .tcw-sales-heading--lines > div {
483
+ width: 100%;
484
+ min-width: 0;
485
+ }
486
+ .tcw-sales-heading--lines p,
487
+ .tcw-sales-heading--lines > .tcw-button {
488
+ max-width: 100%;
489
+ overflow-wrap: anywhere;
490
+ white-space: normal;
491
+ }
492
+ .tcw-sales-heading { flex-direction: column; }
493
+ .tcw-sales-page--orders .tcw-metric-grid { grid-template-columns: 1fr 1fr; }
494
+ .tcw-sales-risk-dialog { grid-template-columns: 1fr; }
495
+ .tcw-sales-risk-dialog > section:first-child { grid-column: auto; }
496
+ .tcw-sales-customer-dialog,
497
+ .tcw-sales-order-dialog { grid-template-columns: 1fr; }
498
+ .tcw-sales-customer-dialog > section,
499
+ .tcw-sales-order-dialog > section { padding: 0 0 18px; border-right: 0; border-bottom: 1px solid var(--sf-border); }
500
+ .tcw-sales-customer-dialog > aside,
501
+ .tcw-sales-order-dialog > aside { padding-top: 18px; }
502
+ .tcw-sales-generate-summary { grid-template-columns: repeat(2, minmax(0, 1fr)); }
503
+ .tcw-sales-generate-content { grid-template-columns: 1fr; }
504
+ }
505
+
506
+ @media (max-width: 640px) {
507
+ .tcw-sales-heading .tcw-list-heading { font-size: 18px; }
508
+ .tcw-sales-page--orders .tcw-metric-grid { grid-template-columns: 1fr; }
509
+ .tcw-sales-page--lines .tcw-order-summary { grid-template-columns: 1fr; }
510
+ .tcw-sales-generate-summary { grid-template-columns: 1fr; }
511
+ .tcw-sales-generate-content .tcw-form-field { grid-template-columns: 1fr; gap: 6px; }
512
+ }
@@ -78,7 +78,7 @@ export function SalesPage(props) {
78
78
  { type: 'custom', key: 'sanctionStatus', header: '制裁风险', width: 120, truncate: false, render: (_, row) => _jsx(Status, { value: row.sanctionStatus }) }, { type: 'text', key: 'complianceCheckedAt', header: '最近检查时间', width: 170, truncate: false, format: formatBeijingDateTime }
79
79
  ];
80
80
  const openOrders = (row) => row.profitRateStatus === 'MISSING' ? setConfirmCustomer(row) : props.onRouteChange({ type: 'sales', level: 'orders', customerId: row.id });
81
- return _jsxs("main", { className: "tcw-sales-files-page tcw-sales-page tcw-sales-page--customers", children: [_jsx(PageHeading, { title: "\u5BA2\u6237\u4FE1\u606F\u5217\u8868", description: "\u7EF4\u62A4\u9500\u552E\u5BA2\u6237\u4E3B\u4F53\uFF0C\u70B9\u51FB\u8BA2\u5355\u8BE6\u60C5\u8FDB\u5165\u8BE5\u5BA2\u6237\u7684\u9500\u552E\u8BA2\u5355\u5217\u8868\u3002" }), _jsx(FilterPanel, { definitions: customerFilters, values: filters, onChange: (key, value) => setFilters(current => ({ ...current, [key]: value })), onQuery: () => void query('salesCustomers'), onReset: () => reset('salesCustomers') }), _jsx(InfoNotice, { children: "\u5BA2\u6237\u9ED8\u8BA4\u5B9A\u4EF7\u5229\u6DA6\u7387\u4E0D\u80FD\u4E3A\u7A7A\uFF1B\u5236\u88C1\u547D\u4E2D\u53EA\u63D0\u793A\uFF0C\u4E0D\u963B\u6B62\u540E\u7EED\u9500\u552E\u4E1A\u52A1\u3002" }), _jsx(DataGrid, { columns: columns, rows: props.customers.items, rowKey: "id", pagination: pagination(props.customers), onPageChange: page => void query('salesCustomers', page), onPageSizeChange: pageSize => void queryDispatcher.pageSize('salesCustomers', pageSize, filters), emptyText: "\u6682\u65E0\u5BA2\u6237\u6570\u636E", actionWidth: 350, actions: row => _jsxs(_Fragment, { children: [_jsxs("button", { type: "button", onClick: () => openOrders(row), children: [_jsx("i", { className: "ri-file-list-3-line", "aria-hidden": "true" }), "\u8BA2\u5355\u8BE6\u60C5"] }), _jsxs("button", { type: "button", onClick: () => setRateDialog({ customer: row, enterOrders: false }), children: [_jsx("i", { className: "ri-user-settings-line", "aria-hidden": "true" }), "\u7EF4\u62A4\u5BA2\u6237\u4FE1\u606F"] }), _jsxs("button", { type: "button", onClick: () => setRateDialog({ customer: row, enterOrders: false }), children: [_jsx("i", { className: "ri-percent-line", "aria-hidden": "true" }), "\u7EF4\u62A4\u9ED8\u8BA4\u5229\u6DA6\u7387"] })] }) }), _jsx(ConfirmDialog, { open: Boolean(confirmCustomer), title: "\u9ED8\u8BA4\u5229\u6DA6\u7387\u672A\u7EF4\u62A4", message: "\u8BE5\u5BA2\u6237\u5C1A\u672A\u7EF4\u62A4\u9ED8\u8BA4\u5B9A\u4EF7\u5229\u6DA6\u7387\u3002\u662F\u5426\u5148\u7EF4\u62A4\u5229\u6DA6\u7387\u540E\u8FDB\u5165\u8BA2\u5355\u5217\u8868\uFF1F", onCancel: () => setConfirmCustomer(null), onConfirm: () => { if (confirmCustomer)
81
+ return _jsxs("main", { className: "tcw-sales-files-page tcw-sales-page tcw-sales-page--customers", children: [_jsx(PageHeading, { title: "\u5BA2\u6237\u4FE1\u606F\u5217\u8868", description: "\u7EF4\u62A4\u9500\u552E\u5BA2\u6237\u4E3B\u4F53\uFF0C\u70B9\u51FB\u8BA2\u5355\u8BE6\u60C5\u8FDB\u5165\u8BE5\u5BA2\u6237\u7684\u9500\u552E\u8BA2\u5355\u5217\u8868\u3002" }), _jsx(FilterPanel, { definitions: customerFilters, values: filters, onChange: (key, value) => setFilters(current => ({ ...current, [key]: value })), onQuery: () => void query('salesCustomers'), onReset: () => reset('salesCustomers') }), _jsx(InfoNotice, { children: "\u5BA2\u6237\u9ED8\u8BA4\u5B9A\u4EF7\u5229\u6DA6\u7387\u4E0D\u80FD\u4E3A\u7A7A\uFF1B\u5236\u88C1\u547D\u4E2D\u53EA\u63D0\u793A\uFF0C\u4E0D\u963B\u6B62\u540E\u7EED\u9500\u552E\u4E1A\u52A1\u3002" }), _jsx(DataGrid, { columns: columns, rows: props.customers.items, rowKey: "id", pagination: pagination(props.customers), onPageChange: page => void query('salesCustomers', page), onPageSizeChange: pageSize => void queryDispatcher.pageSize('salesCustomers', pageSize, filters), emptyText: "\u6682\u65E0\u5BA2\u6237\u6570\u636E", actionWidth: 190, actions: row => _jsxs(_Fragment, { children: [_jsxs("button", { type: "button", onClick: () => openOrders(row), children: [_jsx("i", { className: "ri-file-list-3-line", "aria-hidden": "true" }), "\u8BA2\u5355"] }), _jsxs("button", { type: "button", "aria-label": "\u7EF4\u62A4\u5BA2\u6237\u4FE1\u606F", onClick: () => setRateDialog({ customer: row, enterOrders: false }), children: [_jsx("i", { className: "ri-user-settings-line", "aria-hidden": "true" }), "\u5BA2\u6237\u7EF4\u62A4"] })] }) }), _jsx(ConfirmDialog, { open: Boolean(confirmCustomer), title: "\u9ED8\u8BA4\u5229\u6DA6\u7387\u672A\u7EF4\u62A4", message: "\u8BE5\u5BA2\u6237\u5C1A\u672A\u7EF4\u62A4\u9ED8\u8BA4\u5B9A\u4EF7\u5229\u6DA6\u7387\u3002\u662F\u5426\u5148\u7EF4\u62A4\u5229\u6DA6\u7387\u540E\u8FDB\u5165\u8BA2\u5355\u5217\u8868\uFF1F", onCancel: () => setConfirmCustomer(null), onConfirm: () => { if (confirmCustomer)
82
82
  setRateDialog({ customer: confirmCustomer, enterOrders: true }); setConfirmCustomer(null); } }), rateDialog && _jsx(CustomerMaintenanceDialog, { state: rateDialog, busy: props.busy, onClose: () => setRateDialog(null), onSave: async (rate) => { await props.onAction('save_customer_profit_rate', { customerId: rateDialog.customer.id, rate }); const next = rateDialog.enterOrders; const id = rateDialog.customer.id; setRateDialog(null); if (next)
83
83
  props.onRouteChange({ type: 'sales', level: 'orders', customerId: id });
84
84
  else
@@ -91,7 +91,7 @@ export function SalesPage(props) {
91
91
  { type: 'text', key: 'orderAmountCny', header: '销售总额 CNY', width: 140, align: 'right', truncate: false, format: money }, { type: 'text', key: 'receivedAmountCny', header: '已收款 CNY', width: 140, align: 'right', truncate: false, format: money }, { type: 'text', key: 'unreceivedAmountCny', header: '未收款 CNY', width: 140, align: 'right', truncate: false, format: money },
92
92
  { type: 'custom', key: 'paymentStatus', header: '收款状态', width: 110, truncate: false, render: (_, row) => paymentLabel(row.paymentStatus) }, { type: 'text', key: 'effectivePricingProfitRate', header: '订单利润率', width: 120, truncate: false, format: percent }, { type: 'text', key: 'pricingProfitRateSource', header: '利润率来源', width: 150, truncate: false, format: sourceLabel }
93
93
  ];
94
- return _jsxs("main", { className: "tcw-sales-files-page tcw-sales-page tcw-sales-page--orders", children: [_jsxs("section", { className: "tcw-context-bar", children: [_jsx("strong", { children: "\u5BA2\u6237\u6458\u8981" }), _jsxs("span", { children: [props.orders.customer?.code || '—', " \u00B7 ", props.orders.customer?.name || '—'] }), _jsx("span", { children: props.orders.customer?.country || '—' })] }), _jsx(PageHeading, { title: "\u9500\u552E\u8BA2\u5355\u5217\u8868", description: "\u67E5\u770B\u5F53\u524D\u5BA2\u6237\u7684\u6D3E\u751F\u9500\u552E\u8BA2\u5355\uFF0C\u70B9\u51FB\u5546\u54C1\u8BE6\u60C5\u8FDB\u5165\u5546\u54C1\u5217\u8868\uFF1B\u53EF\u7EF4\u62A4\u8BA2\u5355\u5B9A\u4EF7\u5229\u6DA6\u7387\u548C\u5DF2\u6536\u6B3E\u3002", action: _jsxs("button", { type: "button", className: "tcw-button tcw-button--secondary", onClick: () => props.onRouteChange({ type: 'sales', level: 'customers' }), children: [_jsx("i", { className: "ri-arrow-left-line", "aria-hidden": "true" }), "\u8FD4\u56DE\u5BA2\u6237\u4FE1\u606F\u5217\u8868"] }) }), _jsx("section", { className: "tcw-metric-grid", children: [['订单总数', String(metrics.orderCount)], ['销售总额', money(metrics.salesAmountCny)], ['已收款', money(metrics.receivedAmountCny)], ['未收款', money(metrics.unreceivedAmountCny)]].map(([label, value]) => _jsxs("article", { children: [_jsx("span", { children: label }), _jsx("strong", { children: value }), _jsx("small", { children: label === '订单总数' ? '笔' : 'CNY' })] }, label)) }), _jsx(FilterPanel, { definitions: orderFilters, values: filters, onChange: (key, value) => setFilters(current => ({ ...current, [key]: value })), onQuery: () => void query('salesOrders'), onReset: () => reset('salesOrders') }), _jsx(DataGrid, { columns: columns, rows: props.orders.items, rowKey: row => `${row.customerContractId}:${row.purchaseOrderId}`, pagination: pagination(props.orders), onPageChange: page => void query('salesOrders', page), onPageSizeChange: pageSize => void queryDispatcher.pageSize('salesOrders', pageSize, filters), emptyText: "\u6682\u65E0\u9500\u552E\u8BA2\u5355", actionWidth: 650, actions: row => _jsxs(_Fragment, { children: [_jsxs("button", { type: "button", onClick: () => props.onRouteChange({ type: 'sales', level: 'lines', customerId: row.customerId, orderKey: `${row.customerContractId}:${row.purchaseOrderId}` }), children: [_jsx("i", { className: "ri-list-check-2", "aria-hidden": "true" }), "\u5546\u54C1\u8BE6\u60C5"] }), _jsxs("button", { type: "button", onClick: event => { resetSalesPageScroll(event.currentTarget); setManualDialog({ order: row, field: 'pricingProfitRateOverride' }); }, children: [_jsx("i", { className: "ri-edit-box-line", "aria-hidden": "true" }), "\u7EF4\u62A4\u9500\u552E\u8BA2\u5355\u6570\u636E"] }), _jsxs("button", { type: "button", onClick: event => { resetSalesPageScroll(event.currentTarget); setManualDialog({ order: row, field: 'pricingProfitRateOverride' }); }, children: [_jsx("i", { className: "ri-percent-line", "aria-hidden": "true" }), "\u7EF4\u62A4\u8BA2\u5355\u5229\u6DA6\u7387"] }), _jsxs("button", { type: "button", onClick: event => { resetSalesPageScroll(event.currentTarget); setManualDialog({ order: row, field: 'receivedAmountCny' }); }, children: [_jsx("i", { className: "ri-money-cny-circle-line", "aria-hidden": "true" }), "\u7EF4\u62A4\u5DF2\u6536\u6B3E"] }), _jsxs("button", { type: "button", onClick: event => { resetSalesPageScroll(event.currentTarget); setGenerationDialog(row); }, children: [_jsx("i", { className: "ri-file-excel-2-line", "aria-hidden": "true" }), "\u751F\u6210\u9500\u552E\u6587\u4EF6"] })] }) }), manualDialog && _jsx(SalesOrderMaintenanceDialog, { state: manualDialog, busy: props.busy, onClose: () => setManualDialog(null), onSave: async (value) => { const { order, field } = manualDialog; await props.onAction('save_derived_manual_data', createSalesOrderMaintenancePayload(order, field, value)); setManualDialog(null); void query('salesOrders'); } }), generationDialog && _jsx(SalesGenerateFileDialog, { order: generationDialog, busy: props.busy, onClose: () => setGenerationDialog(null), onConfirm: async (draft) => {
94
+ return _jsxs("main", { className: "tcw-sales-files-page tcw-sales-page tcw-sales-page--orders", children: [_jsxs("section", { className: "tcw-context-bar", children: [_jsx("strong", { children: "\u5BA2\u6237\u6458\u8981" }), _jsxs("span", { children: [props.orders.customer?.code || '—', " \u00B7 ", props.orders.customer?.name || '—'] }), _jsx("span", { children: props.orders.customer?.country || '—' })] }), _jsx(PageHeading, { title: "\u9500\u552E\u8BA2\u5355\u5217\u8868", description: "\u67E5\u770B\u5F53\u524D\u5BA2\u6237\u7684\u6D3E\u751F\u9500\u552E\u8BA2\u5355\uFF0C\u70B9\u51FB\u5546\u54C1\u8BE6\u60C5\u8FDB\u5165\u5546\u54C1\u5217\u8868\uFF1B\u53EF\u7EF4\u62A4\u8BA2\u5355\u5B9A\u4EF7\u5229\u6DA6\u7387\u548C\u5DF2\u6536\u6B3E\u3002", action: _jsxs("button", { type: "button", className: "tcw-button tcw-button--secondary", onClick: () => props.onRouteChange({ type: 'sales', level: 'customers' }), children: [_jsx("i", { className: "ri-arrow-left-line", "aria-hidden": "true" }), "\u8FD4\u56DE\u5BA2\u6237\u4FE1\u606F\u5217\u8868"] }) }), _jsx("section", { className: "tcw-metric-grid", children: [['订单总数', String(metrics.orderCount)], ['销售总额', money(metrics.salesAmountCny)], ['已收款', money(metrics.receivedAmountCny)], ['未收款', money(metrics.unreceivedAmountCny)]].map(([label, value]) => _jsxs("article", { children: [_jsx("span", { children: label }), _jsx("strong", { children: value }), _jsx("small", { children: label === '订单总数' ? '笔' : 'CNY' })] }, label)) }), _jsx(FilterPanel, { definitions: orderFilters, values: filters, onChange: (key, value) => setFilters(current => ({ ...current, [key]: value })), onQuery: () => void query('salesOrders'), onReset: () => reset('salesOrders') }), _jsx(DataGrid, { columns: columns, rows: props.orders.items, rowKey: row => `${row.customerContractId}:${row.purchaseOrderId}`, pagination: pagination(props.orders), onPageChange: page => void query('salesOrders', page), onPageSizeChange: pageSize => void queryDispatcher.pageSize('salesOrders', pageSize, filters), emptyText: "\u6682\u65E0\u9500\u552E\u8BA2\u5355", actionWidth: 360, actions: row => _jsxs(_Fragment, { children: [_jsxs("button", { type: "button", onClick: () => props.onRouteChange({ type: 'sales', level: 'lines', customerId: row.customerId, orderKey: `${row.customerContractId}:${row.purchaseOrderId}` }), children: [_jsx("i", { className: "ri-list-check-2", "aria-hidden": "true" }), "\u5546\u54C1\u8BE6\u60C5"] }), _jsxs("button", { type: "button", "aria-label": "\u7EF4\u62A4\u9500\u552E\u8BA2\u5355\u6570\u636E", onClick: event => { resetSalesPageScroll(event.currentTarget); setManualDialog({ order: row, field: 'pricingProfitRateOverride' }); }, children: [_jsx("i", { className: "ri-percent-line", "aria-hidden": "true" }), "\u5229\u6DA6\u7387"] }), _jsxs("button", { type: "button", onClick: event => { resetSalesPageScroll(event.currentTarget); setManualDialog({ order: row, field: 'receivedAmountCny' }); }, children: [_jsx("i", { className: "ri-money-cny-circle-line", "aria-hidden": "true" }), "\u6536\u6B3E"] }), _jsxs("button", { type: "button", "aria-label": "\u751F\u6210\u9500\u552E\u6587\u4EF6", onClick: event => { resetSalesPageScroll(event.currentTarget); setGenerationDialog(row); }, children: [_jsx("i", { className: "ri-file-excel-2-line", "aria-hidden": "true" }), "\u751F\u6210\u6587\u4EF6"] })] }) }), manualDialog && _jsx(SalesOrderMaintenanceDialog, { state: manualDialog, busy: props.busy, onClose: () => setManualDialog(null), onSave: async (value) => { const { order, field } = manualDialog; await props.onAction('save_derived_manual_data', createSalesOrderMaintenancePayload(order, field, value)); setManualDialog(null); void query('salesOrders'); } }), generationDialog && _jsx(SalesGenerateFileDialog, { order: generationDialog, busy: props.busy, onClose: () => setGenerationDialog(null), onConfirm: async (draft) => {
95
95
  try {
96
96
  const translationFailures = await completeSalesGeneration(generationDialog, draft, props.onAction, props.onOpenFiles, () => setGenerationDialog(null));
97
97
  const details = translationFailures.map(failure => `${failure.field}:${failure.sourceValue}(${failure.message})`).join(';');