@cecee/document-flip-book 1.0.16 → 1.0.18

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 (77) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +83 -0
  3. package/dist/cjs/AccountingBook/index.d.ts +3 -0
  4. package/dist/cjs/AccountingBook/index.js +19 -0
  5. package/dist/cjs/{ArchiveCover.js → DocumentFlipBook/ArchiveCover.js} +23 -3
  6. package/dist/cjs/{ExportModal.js → DocumentFlipBook/ExportModal.js} +1 -1
  7. package/dist/cjs/{ProjectCover.js → DocumentFlipBook/ProjectCover.js} +24 -4
  8. package/dist/cjs/{exportHtml.d.ts → DocumentFlipBook/exportHtml.d.ts} +3 -3
  9. package/dist/cjs/{exportHtml.js → DocumentFlipBook/exportHtml.js} +104 -48
  10. package/dist/cjs/{exportPdf.d.ts → DocumentFlipBook/exportPdf.d.ts} +2 -0
  11. package/dist/cjs/{exportPdf.js → DocumentFlipBook/exportPdf.js} +17 -6
  12. package/dist/cjs/{globalCache.d.ts → DocumentFlipBook/globalCache.d.ts} +2 -1
  13. package/dist/cjs/DocumentFlipBook/images/Clip_1.svg +97 -0
  14. package/dist/cjs/DocumentFlipBook/images/Clip_2.svg +1114 -0
  15. package/dist/cjs/DocumentFlipBook/images/Inside.svg +10 -0
  16. package/dist/cjs/DocumentFlipBook/images/book.svg +1 -0
  17. package/dist/cjs/DocumentFlipBook/images/coverSpine.svg +4 -0
  18. package/dist/{esm/DocumentFlipBook.d.ts → cjs/DocumentFlipBook/index.d.ts} +2 -0
  19. package/dist/cjs/{DocumentFlipBook.js → DocumentFlipBook/index.js} +116 -22
  20. package/dist/cjs/DocumentFlipBook/index.less +797 -0
  21. package/dist/cjs/{printPdf.d.ts → DocumentFlipBook/printPdf.d.ts} +1 -0
  22. package/dist/cjs/{utils.d.ts → DocumentFlipBook/utils.d.ts} +2 -1
  23. package/dist/cjs/{utils.js → DocumentFlipBook/utils.js} +4 -1
  24. package/dist/cjs/index.d.ts +3 -3
  25. package/dist/cjs/index.js +10 -3
  26. package/dist/esm/AccountingBook/index.d.ts +3 -0
  27. package/dist/esm/AccountingBook/index.js +13 -0
  28. package/dist/esm/{ArchiveCover.js → DocumentFlipBook/ArchiveCover.js} +23 -3
  29. package/dist/esm/{ExportModal.js → DocumentFlipBook/ExportModal.js} +1 -1
  30. package/dist/esm/{ProjectCover.js → DocumentFlipBook/ProjectCover.js} +24 -4
  31. package/dist/esm/{exportHtml.d.ts → DocumentFlipBook/exportHtml.d.ts} +3 -3
  32. package/dist/esm/{exportHtml.js → DocumentFlipBook/exportHtml.js} +103 -47
  33. package/dist/esm/{exportPdf.d.ts → DocumentFlipBook/exportPdf.d.ts} +2 -0
  34. package/dist/esm/{exportPdf.js → DocumentFlipBook/exportPdf.js} +17 -6
  35. package/dist/esm/{globalCache.d.ts → DocumentFlipBook/globalCache.d.ts} +2 -1
  36. package/dist/esm/DocumentFlipBook/images/Clip_1.svg +97 -0
  37. package/dist/esm/DocumentFlipBook/images/Clip_2.svg +1114 -0
  38. package/dist/esm/DocumentFlipBook/images/Inside.svg +10 -0
  39. package/dist/esm/DocumentFlipBook/images/book.svg +1 -0
  40. package/dist/esm/DocumentFlipBook/images/coverSpine.svg +4 -0
  41. package/dist/{cjs/DocumentFlipBook.d.ts → esm/DocumentFlipBook/index.d.ts} +2 -0
  42. package/dist/esm/{DocumentFlipBook.js → DocumentFlipBook/index.js} +116 -22
  43. package/dist/esm/DocumentFlipBook/index.less +797 -0
  44. package/dist/esm/{printPdf.d.ts → DocumentFlipBook/printPdf.d.ts} +1 -0
  45. package/dist/esm/{utils.d.ts → DocumentFlipBook/utils.d.ts} +2 -1
  46. package/dist/esm/{utils.js → DocumentFlipBook/utils.js} +4 -1
  47. package/dist/esm/index.d.ts +3 -3
  48. package/dist/esm/index.js +5 -3
  49. package/package.json +6 -1
  50. package/dist/cjs/index.less +0 -674
  51. package/dist/esm/index.less +0 -674
  52. /package/dist/cjs/{ArchiveCover.d.ts → DocumentFlipBook/ArchiveCover.d.ts} +0 -0
  53. /package/dist/cjs/{ExportModal.d.ts → DocumentFlipBook/ExportModal.d.ts} +0 -0
  54. /package/dist/cjs/{HeaderBar.d.ts → DocumentFlipBook/HeaderBar.d.ts} +0 -0
  55. /package/dist/cjs/{HeaderBar.js → DocumentFlipBook/HeaderBar.js} +0 -0
  56. /package/dist/cjs/{PdfPage.d.ts → DocumentFlipBook/PdfPage.d.ts} +0 -0
  57. /package/dist/cjs/{PdfPage.js → DocumentFlipBook/PdfPage.js} +0 -0
  58. /package/dist/cjs/{ProjectCover.d.ts → DocumentFlipBook/ProjectCover.d.ts} +0 -0
  59. /package/dist/cjs/{SideTabs.d.ts → DocumentFlipBook/SideTabs.d.ts} +0 -0
  60. /package/dist/cjs/{SideTabs.js → DocumentFlipBook/SideTabs.js} +0 -0
  61. /package/dist/cjs/{globalCache.js → DocumentFlipBook/globalCache.js} +0 -0
  62. /package/dist/cjs/{printPdf.js → DocumentFlipBook/printPdf.js} +0 -0
  63. /package/dist/cjs/{types.d.ts → DocumentFlipBook/types.d.ts} +0 -0
  64. /package/dist/cjs/{types.js → DocumentFlipBook/types.js} +0 -0
  65. /package/dist/esm/{ArchiveCover.d.ts → DocumentFlipBook/ArchiveCover.d.ts} +0 -0
  66. /package/dist/esm/{ExportModal.d.ts → DocumentFlipBook/ExportModal.d.ts} +0 -0
  67. /package/dist/esm/{HeaderBar.d.ts → DocumentFlipBook/HeaderBar.d.ts} +0 -0
  68. /package/dist/esm/{HeaderBar.js → DocumentFlipBook/HeaderBar.js} +0 -0
  69. /package/dist/esm/{PdfPage.d.ts → DocumentFlipBook/PdfPage.d.ts} +0 -0
  70. /package/dist/esm/{PdfPage.js → DocumentFlipBook/PdfPage.js} +0 -0
  71. /package/dist/esm/{ProjectCover.d.ts → DocumentFlipBook/ProjectCover.d.ts} +0 -0
  72. /package/dist/esm/{SideTabs.d.ts → DocumentFlipBook/SideTabs.d.ts} +0 -0
  73. /package/dist/esm/{SideTabs.js → DocumentFlipBook/SideTabs.js} +0 -0
  74. /package/dist/esm/{globalCache.js → DocumentFlipBook/globalCache.js} +0 -0
  75. /package/dist/esm/{printPdf.js → DocumentFlipBook/printPdf.js} +0 -0
  76. /package/dist/esm/{types.d.ts → DocumentFlipBook/types.d.ts} +0 -0
  77. /package/dist/esm/{types.js → DocumentFlipBook/types.js} +0 -0
@@ -0,0 +1,797 @@
1
+ .common-header-bar {
2
+ display: flex;
3
+ align-items: center;
4
+ justify-content: space-between;
5
+ height: 50px;
6
+ padding: 0 16px;
7
+ background: #fff;
8
+ border-bottom: 1px solid #f0f0f0;
9
+
10
+ .header-left,
11
+ .header-right,
12
+ .header-item {
13
+ display: flex;
14
+ align-items: center;
15
+ }
16
+
17
+ .header-title {
18
+ font-size: 18px;
19
+ font-weight: bold;
20
+ margin-right: 16px;
21
+ }
22
+
23
+ .dfb-divider {
24
+ width: 1px;
25
+ height: 18px;
26
+ background: #e8e8e8;
27
+ margin: 0 8px;
28
+ }
29
+ }
30
+
31
+ .book-page {
32
+ width: 100%;
33
+ height: 100%;
34
+ background: var(--dfb-theme-color, #9F7D4E);
35
+ padding: 22px;
36
+ }
37
+
38
+ .book-view {
39
+ // box-shadow: 0 0 18px rgba(0, 0, 0, 0.18);
40
+ // overflow: hidden;
41
+ position: relative;
42
+ z-index: 10;
43
+ overflow: visible; // 显式设置为 visible 以显示侧边厚度装饰
44
+ background: transparent; // 改为透明,避免遮挡背景层或产生白色边框
45
+
46
+ // 书本左侧厚度 1
47
+ .dfb-book-thickness-left-1 {
48
+ position: absolute;
49
+ top: 0;
50
+ left: -4px;
51
+ width: 8px;
52
+ height: 100%;
53
+ background: linear-gradient(to right, rgba(255, 255, 255, 0.3), rgba(255, 255, 255, 0.5) 50%, rgba(255, 255, 255, 0.3));
54
+ border-radius: 2px;
55
+ z-index: 20;
56
+ box-shadow: rgba(255, 255, 255, 0.6) 0px 0px 6px inset;
57
+ pointer-events: none;
58
+ display: none; // 默认隐藏,由 nth-child 控制显示
59
+ }
60
+
61
+ // 书本左侧厚度 2
62
+ .dfb-book-thickness-left-2 {
63
+ position: absolute;
64
+ top: 0;
65
+ left: -10px;
66
+ width: 20px;
67
+ height: 100%;
68
+ background: linear-gradient(to right, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.4) 50%, rgba(255, 255, 255, 0.2));
69
+ z-index: 14;
70
+ pointer-events: none;
71
+ display: none; // 默认隐藏
72
+ }
73
+
74
+ // 书本右侧厚度 1
75
+ .dfb-book-thickness-right-1 {
76
+ position: absolute;
77
+ top: 0;
78
+ right: -4px;
79
+ width: 8px;
80
+ height: 100%;
81
+ background: linear-gradient(to right, rgba(255, 255, 255, 0.3), rgba(255, 255, 255, 0.5) 50%, rgba(255, 255, 255, 0.3));
82
+ border-radius: 2px;
83
+ z-index: 15;
84
+ box-shadow: rgba(255, 255, 255, 0.6) 0px 0px 6px inset;
85
+ pointer-events: none;
86
+ display: none; // 默认隐藏
87
+ }
88
+
89
+ // 书本右侧厚度 2
90
+ .dfb-book-thickness-right-2 {
91
+ position: absolute;
92
+ top: 0;
93
+ right: -10px;
94
+ width: 20px;
95
+ height: 100%;
96
+ background: linear-gradient(to left, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.4) 50%, rgba(255, 255, 255, 0.2));
97
+ z-index: 14;
98
+ pointer-events: none;
99
+ display: none; // 默认隐藏
100
+ }
101
+
102
+ // 偶数页(第 2, 4, 6... 个子元素,对应 Page 1, 3, 5...)是左页 -> 显示左侧厚度
103
+ &:nth-child(even) {
104
+ .dfb-book-thickness-left-1,
105
+ .dfb-book-thickness-left-2 {
106
+ display: block;
107
+ }
108
+ }
109
+
110
+ // 奇数页(第 1, 3, 5... 个子元素,对应 Page 0, 2, 4...)是右页 -> 显示右侧厚度
111
+ &:nth-child(odd) {
112
+ .dfb-book-thickness-right-1,
113
+ .dfb-book-thickness-right-2 {
114
+ display: block;
115
+ }
116
+ }
117
+ }
118
+
119
+ .header-nav-btn {
120
+ padding: 0 7px;
121
+ }
122
+
123
+ .dfb-HTMLFlipBook {
124
+ position: relative;
125
+ z-index: 10;
126
+ overflow: visible; // 显式设置为 visible 以显示侧边厚度装饰
127
+ background: transparent; // 改为透明,避免遮挡背景层或产生白色边框
128
+ }
129
+
130
+ .dfb-root {
131
+ display: flex;
132
+ flex-direction: column;
133
+ height: 100%;
134
+ min-width: 1000px;
135
+ overflow: hidden;
136
+ background: #fff;
137
+
138
+ &.is-fullscreen-modal {
139
+ position: fixed;
140
+ top: 0;
141
+ left: 0;
142
+ width: 100vw;
143
+ height: 100vh;
144
+ z-index: 1001;
145
+ background: #fff;
146
+ animation: dfb-fade-in 0.3s ease;
147
+ }
148
+ }
149
+
150
+ @keyframes dfb-fade-in {
151
+ from {
152
+ opacity: 0;
153
+ transform: scale(0.95);
154
+ }
155
+
156
+ to {
157
+ opacity: 1;
158
+ transform: scale(1);
159
+ }
160
+ }
161
+
162
+ .dfb-header {
163
+ display: flex;
164
+ align-items: center;
165
+ justify-content: space-between;
166
+ height: 55px;
167
+ padding: 10px 10px;
168
+ background: #fff;
169
+ border-bottom: 1px solid #f0f0f0;
170
+
171
+ .dfb-search-btn {
172
+ height: 30px;
173
+ }
174
+
175
+ &-left-group {
176
+ display: flex;
177
+ align-items: center;
178
+ gap: 4px;
179
+ }
180
+
181
+ &-right-group {
182
+ display: flex;
183
+ align-items: center;
184
+ gap: 16px;
185
+ }
186
+
187
+ .dfb-divider {
188
+ height: 18px;
189
+ background: #e8e8e8;
190
+ margin: 0 8px;
191
+ }
192
+
193
+ .ant-btn-link {
194
+ color: #000;
195
+ font-size: 14px;
196
+ padding: 0 8px;
197
+ height: auto;
198
+
199
+ &:hover {
200
+ color: #1677ff;
201
+ }
202
+
203
+ &:disabled {
204
+ color: #d9d9d9;
205
+ cursor: not-allowed;
206
+ }
207
+ }
208
+
209
+ // 搜索框样式
210
+ &-search-wrap {
211
+ display: flex;
212
+ align-items: center;
213
+ gap: 8px;
214
+ }
215
+
216
+ &-search-input {
217
+ width: 220px;
218
+ height: 36px;
219
+ border-radius: 6px;
220
+
221
+ &:hover,
222
+ &:focus {
223
+ border-color: #4096ff;
224
+ }
225
+ }
226
+
227
+ &-search-btn {
228
+ height: 36px;
229
+ border-radius: 6px;
230
+ padding: 0 16px;
231
+ }
232
+ }
233
+
234
+ .dfb-headerTitle {
235
+ font-size: 18px;
236
+ font-weight: 600;
237
+ color: #111827;
238
+ }
239
+
240
+ .dfb-headerLeftActions {
241
+ display: flex;
242
+ align-items: center;
243
+ gap: 6px;
244
+ }
245
+
246
+ .dfb-headerCenter {
247
+ display: flex;
248
+ align-items: center;
249
+ gap: 4px;
250
+ color: #111827;
251
+ }
252
+
253
+ .dfb-pageIndicator {
254
+ display: inline-flex;
255
+ align-items: center;
256
+ justify-content: center;
257
+ min-width: 66px;
258
+ font-weight: 600;
259
+ color: #111827;
260
+ }
261
+
262
+ .dfb-headerRight {
263
+ display: flex;
264
+ align-items: center;
265
+ gap: 10px;
266
+ }
267
+
268
+ .dfb-searchWrap {
269
+ display: flex;
270
+ align-items: center;
271
+ gap: 8px;
272
+ }
273
+
274
+ .dfb-searchInput {
275
+ width: 280px;
276
+ }
277
+
278
+ .dfb-searchBtn {
279
+ padding: 0 14px;
280
+ }
281
+
282
+ .dfb-stage {
283
+ flex: 1;
284
+ display: flex;
285
+ overflow: auto;
286
+ padding: 20px;
287
+ position: relative;
288
+ justify-content: center;
289
+ min-width: 100px;
290
+
291
+ // 解决 AntD Spin 嵌套导致的布局问题
292
+ .ant-spin-nested-loading {
293
+ width: 100%;
294
+ height: 100%;
295
+
296
+ .ant-spin-container {
297
+ width: 100%;
298
+ height: 100%;
299
+ display: flex;
300
+ flex-direction: column;
301
+ }
302
+ }
303
+ }
304
+
305
+ .dfb-sideTabs {
306
+ position: absolute;
307
+ right: 2px; // 调整位置,使其紧贴书本边缘
308
+ top: 40px;
309
+ display: flex;
310
+ flex-direction: column;
311
+ gap: 6px; //
312
+ z-index: 20;
313
+ transition: all 0.3s ease;
314
+
315
+ &.is-on-cover {
316
+ right: -42px; // 封面是单页模式,标签需要向左移动(进入书壳内部边缘)
317
+ top: 40px;
318
+ }
319
+
320
+ .dfb-sideTab {
321
+ width: 42px;
322
+ min-height: 80px;
323
+ padding: 12px 6px 12px 10px;
324
+ border: none;
325
+ border-radius: 0 6px 6px 0;
326
+ cursor: pointer;
327
+ color: #fff;
328
+ font-size: 13px;
329
+ font-weight: 500;
330
+ line-height: 1.2;
331
+ writing-mode: vertical-rl;
332
+ text-align: center;
333
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
334
+ box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.1);
335
+ position: relative;
336
+ overflow: hidden;
337
+ display: flex;
338
+ align-items: center;
339
+ justify-content: center;
340
+
341
+ // 标签左侧的装饰条(仅在选中态或悬浮态显示,模拟折痕)
342
+ &::before {
343
+ content: "";
344
+ position: absolute;
345
+ left: 0;
346
+ top: 0;
347
+ bottom: 0;
348
+ width: 0; // 默认宽度为 0
349
+ background: rgba(255, 255, 255, 0.35);
350
+ transition: all 0.2s ease;
351
+ opacity: 0;
352
+ }
353
+
354
+
355
+
356
+ &.is-active {
357
+ position: relative;
358
+ left: -10px;
359
+ width: 52px; // 选中态更长
360
+ padding-left: 16px;
361
+ font-weight: 700;
362
+ box-shadow: 5px 2px 12px rgba(0, 0, 0, 0.2);
363
+ z-index: 12;
364
+ font-size: 14px;
365
+
366
+ &::before {
367
+ width: 8px; // 选中态条纹显示且最宽
368
+ opacity: 1;
369
+ background: rgba(255, 255, 255, 0.4);
370
+ }
371
+ }
372
+
373
+ .dfb-sideTabText {
374
+ letter-spacing: 2px;
375
+ filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.1));
376
+ }
377
+ }
378
+
379
+ }
380
+
381
+ .is-on-activeTab {
382
+ right: 12px !important;
383
+ }
384
+
385
+ .dfb-book-wrapper {
386
+ display: block;
387
+ margin: auto; // 关键:在 flex 容器中使用 margin: auto 实现完美居中且溢出时可滚动到顶部
388
+ position: relative;
389
+ min-width: 300px;
390
+ }
391
+
392
+ // 方法三:背景层样式
393
+ .dfb-book-background-layer {
394
+ position: absolute;
395
+ top: 0;
396
+ left: 0;
397
+ right: 0;
398
+ bottom: 0;
399
+ padding: 18px 54px;
400
+ z-index: 1;
401
+ transition: all 0.3s ease;
402
+ pointer-events: none;
403
+ overflow: hidden;
404
+ /* 确保伪元素不会超出容器 */
405
+ }
406
+
407
+ /* 左侧较高的背景块 */
408
+ .dfb-book-background-layer::before {
409
+ content: "";
410
+ position: absolute;
411
+ top: 2px;
412
+ left: -16px;
413
+ width: 50%;
414
+ /* 占据左半边 */
415
+ height: 100%;
416
+ /* 高度为100%,显得更高 */
417
+ background-color: var(--dfb-theme-color, #9F7D4E);
418
+ transition: all 0.3s ease;
419
+ }
420
+
421
+ /* 右侧较低的背景块 */
422
+ .dfb-book-background-layer::after {
423
+ content: "";
424
+ position: absolute;
425
+ top: 9px;
426
+ right: -16px;
427
+ width: 50%;
428
+ /* 占据右半边 */
429
+ height: calc(100% - 15px);
430
+ /* 高度减去顶部偏移量 */
431
+ background-color: var(--dfb-theme-color, #9F7D4E);
432
+ filter: brightness(0.85); // 自动加深,不再依赖额外的变量
433
+ opacity: 0.9;
434
+ transition: all 0.3s ease;
435
+ }
436
+
437
+ // 方法三:内容层样式
438
+ .dfb-book-content-layer {
439
+ position: relative;
440
+ z-index: 10; // 位于背景之上
441
+ padding: 18px 54px; // 保持与背景层一致的内边距
442
+ }
443
+
444
+ // 书脊内侧装饰 (Inside.svg)
445
+ .dfb-inside-spine {
446
+ position: absolute;
447
+ left: 50%;
448
+ top: 2px;
449
+ height: calc(100% - 1px);
450
+ bottom: 18px;
451
+ width: 34px; // 恢复为原始 SVG 宽度
452
+ transform: translateX(-50%);
453
+ z-index: 5; // 提高层级,确保在 .dfb-book-background-layer 的 linear-gradient 之上
454
+ pointer-events: none;
455
+ opacity: 1; // 增加不透明度使其更清晰
456
+ }
457
+
458
+ // 中缝装饰层(确保在中缝位置且高于内容层)
459
+ // .dfb-spine-decoration-layer {
460
+ // position: absolute;
461
+ // left: 50%;
462
+ // top: 0;
463
+ // bottom: 0;
464
+ // width: 0; // 仅作为定位参考
465
+ // z-index: 20; // 必须高于内容层 (10) 才能看到
466
+ // pointer-events: none;
467
+ // }
468
+
469
+ // 书本中缝分割线
470
+ .dfb-book-spine {
471
+ position: absolute;
472
+ left: 50%;
473
+ top: 17px;
474
+ bottom: 18px;
475
+ width: 2px;
476
+ transform: translateX(-50%);
477
+ background: rgba(0, 0, 0, 0.2);
478
+ box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
479
+ z-index: 20;
480
+ pointer-events: none;
481
+ transition: opacity 0.3s ease;
482
+
483
+ &::before {
484
+ content: "";
485
+ position: absolute;
486
+ left: -4px;
487
+ top: 0;
488
+ bottom: 0;
489
+ width: 10px;
490
+ background: linear-gradient(to right, transparent, rgba(0, 0, 0, 0.15), transparent);
491
+ }
492
+ }
493
+
494
+ .dfb-cover {
495
+ width: 100%;
496
+ height: 100%;
497
+ display: grid;
498
+ place-items: center;
499
+ background: var(--dfb-theme-color, #9F7D4E);
500
+ color: #111;
501
+ font-size: 46px;
502
+ font-weight: 800;
503
+ letter-spacing: 8px;
504
+ border: 3px solid rgba(0, 0, 0, 0.55);
505
+ }
506
+
507
+
508
+
509
+
510
+ .export-modal {
511
+ .ant-modal-content {
512
+ border-radius: 8px;
513
+ padding: 24px;
514
+ }
515
+
516
+ .export-radio {
517
+ .ant-radio-wrapper {
518
+ padding: 8px 0;
519
+ }
520
+ }
521
+ }
522
+
523
+ .archive-cover {
524
+ width: 100%;
525
+ height: 100%;
526
+ display: flex;
527
+ align-items: center;
528
+ justify-content: center;
529
+ color: #000;
530
+ font-family: "SimSun", "STSong", serif;
531
+ padding: 40px 40px 40px 57px; // 增加左侧内边距,给背脊留出空间
532
+ box-sizing: border-box;
533
+ position: relative; // 确保子元素绝对定位
534
+
535
+ .archive-spine {
536
+ background-color: #fff;
537
+ position: absolute;
538
+ left: 0;
539
+ top: 0;
540
+ bottom: 0;
541
+ width: 25px; // 稍微放宽一点,效果更好
542
+ z-index: 10;
543
+ }
544
+
545
+ &__outer-border {
546
+ border: 5px solid #000;
547
+ width: 100%;
548
+ height: 100%;
549
+ padding: 4px;
550
+ box-sizing: border-box;
551
+ display: flex;
552
+ }
553
+
554
+ &__inner {
555
+ border: 1px solid #000;
556
+ width: 100%;
557
+ height: 100%;
558
+ padding: 20px 20px;
559
+ box-sizing: border-box;
560
+ display: flex;
561
+ flex-direction: column;
562
+ align-items: center;
563
+ background: transparent;
564
+ }
565
+
566
+ &__company {
567
+ font-size: 26px;
568
+ font-weight: bold;
569
+ margin-top: 10px;
570
+ margin-bottom: 10px;
571
+ letter-spacing: 4px;
572
+ text-align: center;
573
+ }
574
+
575
+ &__title {
576
+ font-size: 42px;
577
+ font-weight: 900;
578
+ margin-bottom: 22px;
579
+ letter-spacing: 16px;
580
+ text-align: center;
581
+ line-height: 1;
582
+ }
583
+
584
+ &__table {
585
+ width: 100%;
586
+ border-collapse: collapse;
587
+ border: 2px solid #000;
588
+ margin-bottom: 10px;
589
+
590
+ td {
591
+ border: 1.5px solid #000;
592
+ height: 30px;
593
+ padding: 4px 12px;
594
+ vertical-align: middle;
595
+ text-align: center;
596
+ font-size: 16px;
597
+ font-weight: 600;
598
+
599
+ &.label {
600
+ width: 120px;
601
+ background: rgba(0, 0, 0, 0.04);
602
+ font-weight: 900;
603
+ }
604
+
605
+ &.value {
606
+ text-align: center;
607
+ }
608
+
609
+ &.tall-row {
610
+ height: 100px;
611
+ line-height: 1.4;
612
+ padding: 10px 15px;
613
+ }
614
+ }
615
+ }
616
+
617
+ &__stats-row {
618
+ height: 54px !important;
619
+
620
+ .stats-content {
621
+ display: flex;
622
+ justify-content: center;
623
+ align-items: center;
624
+ width: 100%;
625
+ font-size: 20px;
626
+ font-weight: 700;
627
+ gap: 30px;
628
+
629
+ .num {
630
+ font-family: "Times New Roman", serif;
631
+ font-size: 24px;
632
+ margin: 0 5px;
633
+ min-width: 30px;
634
+ display: inline-block;
635
+ text-align: center;
636
+ border-bottom: none; // 如果需要下划线可以加,但图片里没有
637
+ }
638
+ }
639
+ }
640
+ }
641
+
642
+ // 项目模式封面样式
643
+ .project-cover-container {
644
+ position: relative; // 确保子元素绝对定位
645
+ width: 100%;
646
+ height: 100%;
647
+ z-index: 20;
648
+ box-sizing: border-box;
649
+ display: flex;
650
+ flex-direction: column;
651
+ font-family: "SimSun", "STSong", serif;
652
+ padding: 30px 30px 30px 47px; // 增加左侧内边距,给背脊留出空间
653
+
654
+ .archive-spine {
655
+ background-color: #fff;
656
+ position: absolute;
657
+ left: 0;
658
+ top: 0;
659
+ bottom: 0;
660
+ width: 25px;
661
+ z-index: 10;
662
+ }
663
+
664
+ // 移除 react-pageflip 默认添加的样式影响
665
+ &.stf__item {
666
+ background-color: transparent !important;
667
+ box-shadow: none !important;
668
+
669
+ &.--hard,
670
+ &.--soft,
671
+ &.--simple,
672
+ &.--right {
673
+ background-color: transparent !important;
674
+ }
675
+ }
676
+
677
+ .project-cover-border-outer {
678
+ border: 5px solid #000;
679
+ padding: 5px;
680
+ height: 100%;
681
+ box-sizing: border-box;
682
+ }
683
+
684
+ .project-cover-border-inner {
685
+ border: 2px solid #000;
686
+ height: 100%;
687
+ display: flex;
688
+ flex-direction: column;
689
+ box-sizing: border-box;
690
+ }
691
+
692
+ .project-cover-header {
693
+ text-align: center;
694
+ color: #000;
695
+ // padding: 8px 0;
696
+
697
+ .project-cover-title {
698
+ height: 110px;
699
+ line-height: 110px;
700
+
701
+ font-size: 54px;
702
+ font-weight: 900;
703
+ letter-spacing: 8px;
704
+ // margin: 22px 0;
705
+ }
706
+ }
707
+
708
+ .project-cover-stats-row {
709
+ display: flex;
710
+ border-bottom: 1px solid #000;
711
+ border-top: 1px solid #000;
712
+ margin-top: -1px;
713
+
714
+ .stat-cell-label {
715
+ flex: 1;
716
+ text-align: center;
717
+ height: 42px;
718
+ line-height: 42px;
719
+ // padding: 8px;
720
+ border-right: 1px solid #000;
721
+ display: flex;
722
+ align-items: center;
723
+ justify-content: center;
724
+ gap: 8px;
725
+ }
726
+
727
+ .stat-cell-value {
728
+ flex: 1;
729
+ text-align: center;
730
+ height: 42px;
731
+ line-height: 42px;
732
+ border-right: 1px solid #000;
733
+ font-family: "Times New Roman", serif;
734
+ font-size: 18px;
735
+ font-weight: bold;
736
+
737
+ &:last-child {
738
+ border-right: none;
739
+ }
740
+ }
741
+ }
742
+
743
+ .project-cover-details {
744
+ // flex: 1;
745
+ display: flex;
746
+ flex-direction: column;
747
+
748
+ .detail-row {
749
+ display: flex;
750
+ border-bottom: 1px solid #000;
751
+ height: 40px;
752
+
753
+ .detail-label {
754
+ width: 100px;
755
+ padding-left: 28px;
756
+ line-height: 40px;
757
+ font-weight: bold;
758
+ border-right: 1px solid #000;
759
+ }
760
+
761
+ .detail-value {
762
+ padding-left: 28px;
763
+ line-height: 40px;
764
+ flex: 1;
765
+ font-weight: 600;
766
+ }
767
+ }
768
+ }
769
+
770
+ .project-cover-footer {
771
+ .footer-row {
772
+ display: flex;
773
+ border-bottom: 1px solid #000;
774
+
775
+ .footer-cell {
776
+ flex: 1;
777
+ text-align: center;
778
+ height: 45px;
779
+ line-height: 45px;
780
+ border-right: 1px solid #000;
781
+ font-weight: bold;
782
+ display: flex;
783
+ align-items: center;
784
+ justify-content: center;
785
+ font-size: 16px;
786
+
787
+ &:last-child {
788
+ border-right: none;
789
+ }
790
+ }
791
+
792
+ &.no-bottom-border {
793
+ border-bottom: none;
794
+ }
795
+ }
796
+ }
797
+ }