aldehyde 0.2.420 → 0.2.422

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 (216) hide show
  1. package/lib/controls/date-picker/index.d.ts.map +1 -1
  2. package/lib/controls/date-picker/index.js +8 -15
  3. package/lib/controls/date-picker/index.js.map +1 -1
  4. package/lib/controls/file-view/index.d.ts.map +1 -1
  5. package/lib/controls/file-view/index.js +5 -3
  6. package/lib/controls/file-view/index.js.map +1 -1
  7. package/lib/detail/button/view-button.d.ts +1 -0
  8. package/lib/detail/button/view-button.d.ts.map +1 -1
  9. package/lib/detail/button/view-button.js +3 -3
  10. package/lib/detail/button/view-button.js.map +1 -1
  11. package/lib/hooks/use-tabs/index.d.ts.map +1 -1
  12. package/lib/hooks/use-tabs/index.js +3 -0
  13. package/lib/hooks/use-tabs/index.js.map +1 -1
  14. package/lib/layout2/components/search-menu.js +1 -1
  15. package/lib/layout2/components/search-menu.js.map +1 -1
  16. package/lib/layout2/components/user-button.d.ts +3 -0
  17. package/lib/layout2/components/user-button.d.ts.map +1 -1
  18. package/lib/layout2/components/user-button.js +27 -7
  19. package/lib/layout2/components/user-button.js.map +1 -1
  20. package/lib/layout2/header.d.ts +2 -0
  21. package/lib/layout2/header.d.ts.map +1 -1
  22. package/lib/layout2/header.js +3 -3
  23. package/lib/layout2/header.js.map +1 -1
  24. package/lib/layout2/page.d.ts.map +1 -1
  25. package/lib/layout2/page.js +7 -5
  26. package/lib/layout2/page.js.map +1 -1
  27. package/lib/layout2/sider.d.ts +2 -0
  28. package/lib/layout2/sider.d.ts.map +1 -1
  29. package/lib/layout2/sider.js +2 -2
  30. package/lib/layout2/sider.js.map +1 -1
  31. package/lib/layout3/header.d.ts +2 -0
  32. package/lib/layout3/header.d.ts.map +1 -1
  33. package/lib/layout3/header.js +4 -4
  34. package/lib/layout3/header.js.map +1 -1
  35. package/lib/layout3/page.d.ts.map +1 -1
  36. package/lib/layout3/page.js +6 -4
  37. package/lib/layout3/page.js.map +1 -1
  38. package/lib/layout3/sider.d.ts +2 -0
  39. package/lib/layout3/sider.d.ts.map +1 -1
  40. package/lib/layout3/sider.js +2 -2
  41. package/lib/layout3/sider.js.map +1 -1
  42. package/lib/layout4/header.d.ts +2 -0
  43. package/lib/layout4/header.d.ts.map +1 -1
  44. package/lib/layout4/header.js +4 -4
  45. package/lib/layout4/header.js.map +1 -1
  46. package/lib/layout4/page.d.ts.map +1 -1
  47. package/lib/layout4/page.js +7 -5
  48. package/lib/layout4/page.js.map +1 -1
  49. package/lib/layout4/sider.d.ts +2 -0
  50. package/lib/layout4/sider.d.ts.map +1 -1
  51. package/lib/layout4/sider.js +2 -2
  52. package/lib/layout4/sider.js.map +1 -1
  53. package/lib/layout5/header.d.ts +2 -0
  54. package/lib/layout5/header.d.ts.map +1 -1
  55. package/lib/layout5/header.js +2 -2
  56. package/lib/layout5/header.js.map +1 -1
  57. package/lib/layout5/page.d.ts.map +1 -1
  58. package/lib/layout5/page.js +7 -5
  59. package/lib/layout5/page.js.map +1 -1
  60. package/lib/layout5/sider.d.ts +2 -0
  61. package/lib/layout5/sider.d.ts.map +1 -1
  62. package/lib/layout5/sider.js +2 -2
  63. package/lib/layout5/sider.js.map +1 -1
  64. package/lib/list/card-list/card-list-item.js +1 -1
  65. package/lib/list/card-list/card-list-item.js.map +1 -1
  66. package/lib/lowcode-components/bar-chart/index.d.ts.map +1 -1
  67. package/lib/lowcode-components/bar-chart/index.js +9 -1
  68. package/lib/lowcode-components/bar-chart/index.js.map +1 -1
  69. package/lib/lowcode-components/base-map/index.d.ts.map +1 -1
  70. package/lib/lowcode-components/base-map/index.js +9 -1
  71. package/lib/lowcode-components/base-map/index.js.map +1 -1
  72. package/lib/lowcode-components/capsule-bar-chart/index.d.ts.map +1 -1
  73. package/lib/lowcode-components/capsule-bar-chart/index.js +9 -1
  74. package/lib/lowcode-components/capsule-bar-chart/index.js.map +1 -1
  75. package/lib/lowcode-components/circular-progress-chart/index.d.ts.map +1 -1
  76. package/lib/lowcode-components/circular-progress-chart/index.js +9 -1
  77. package/lib/lowcode-components/circular-progress-chart/index.js.map +1 -1
  78. package/lib/lowcode-components/column-3d-chart/index.d.ts.map +1 -1
  79. package/lib/lowcode-components/column-3d-chart/index.js +9 -1
  80. package/lib/lowcode-components/column-3d-chart/index.js.map +1 -1
  81. package/lib/lowcode-components/column-chart/index.d.ts.map +1 -1
  82. package/lib/lowcode-components/column-chart/index.js +9 -1
  83. package/lib/lowcode-components/column-chart/index.js.map +1 -1
  84. package/lib/lowcode-components/effectScatter-map/index.d.ts.map +1 -1
  85. package/lib/lowcode-components/effectScatter-map/index.js +9 -1
  86. package/lib/lowcode-components/effectScatter-map/index.js.map +1 -1
  87. package/lib/lowcode-components/effectScatter-map-3d/index.d.ts.map +1 -1
  88. package/lib/lowcode-components/effectScatter-map-3d/index.js +9 -1
  89. package/lib/lowcode-components/effectScatter-map-3d/index.js.map +1 -1
  90. package/lib/lowcode-components/gauge-chart/index.d.ts.map +1 -1
  91. package/lib/lowcode-components/gauge-chart/index.js +9 -1
  92. package/lib/lowcode-components/gauge-chart/index.js.map +1 -1
  93. package/lib/lowcode-components/line-bar-chart/index.d.ts.map +1 -1
  94. package/lib/lowcode-components/line-bar-chart/index.js +9 -1
  95. package/lib/lowcode-components/line-bar-chart/index.js.map +1 -1
  96. package/lib/lowcode-components/line-chart/index.d.ts.map +1 -1
  97. package/lib/lowcode-components/line-chart/index.js +9 -1
  98. package/lib/lowcode-components/line-chart/index.js.map +1 -1
  99. package/lib/lowcode-components/liquid-chart/index.d.ts.map +1 -1
  100. package/lib/lowcode-components/liquid-chart/index.js +9 -1
  101. package/lib/lowcode-components/liquid-chart/index.js.map +1 -1
  102. package/lib/lowcode-components/lowcode-view/component/screen-fit/index.d.ts.map +1 -1
  103. package/lib/lowcode-components/lowcode-view/component/screen-fit/index.js +2 -0
  104. package/lib/lowcode-components/lowcode-view/component/screen-fit/index.js.map +1 -1
  105. package/lib/lowcode-components/lowcode-view/component/screen-fit/index.less +2 -1
  106. package/lib/lowcode-components/lowcode-view/index.d.ts +2 -1
  107. package/lib/lowcode-components/lowcode-view/index.d.ts.map +1 -1
  108. package/lib/lowcode-components/lowcode-view/index.js +2 -2
  109. package/lib/lowcode-components/lowcode-view/index.js.map +1 -1
  110. package/lib/lowcode-components/lowcode-view/index.less +7 -0
  111. package/lib/lowcode-components/pie-chart/index.d.ts.map +1 -1
  112. package/lib/lowcode-components/pie-chart/index.js +9 -1
  113. package/lib/lowcode-components/pie-chart/index.js.map +1 -1
  114. package/lib/lowcode-components/progress-chart/index.d.ts.map +1 -1
  115. package/lib/lowcode-components/progress-chart/index.js +9 -1
  116. package/lib/lowcode-components/progress-chart/index.js.map +1 -1
  117. package/lib/routable/ltmpl-route.d.ts +2 -1
  118. package/lib/routable/ltmpl-route.d.ts.map +1 -1
  119. package/lib/routable/ltmpl-route.js +11 -5
  120. package/lib/routable/ltmpl-route.js.map +1 -1
  121. package/lib/routable/splitview-ltmpl-route.d.ts.map +1 -1
  122. package/lib/routable/splitview-ltmpl-route.js +11 -4
  123. package/lib/routable/splitview-ltmpl-route.js.map +1 -1
  124. package/lib/table/act-table.d.ts +4 -0
  125. package/lib/table/act-table.d.ts.map +1 -1
  126. package/lib/table/act-table.js +37 -12
  127. package/lib/table/act-table.js.map +1 -1
  128. package/lib/table/column/column-builder.d.ts.map +1 -1
  129. package/lib/table/column/column-builder.js +6 -8
  130. package/lib/table/column/column-builder.js.map +1 -1
  131. package/lib/table/index.css +29 -2
  132. package/lib/table/page-config-button.d.ts +15 -0
  133. package/lib/table/page-config-button.d.ts.map +1 -0
  134. package/lib/table/page-config-button.js +156 -0
  135. package/lib/table/page-config-button.js.map +1 -0
  136. package/lib/table/pagination.d.ts +1 -0
  137. package/lib/table/pagination.d.ts.map +1 -1
  138. package/lib/table/pagination.js +2 -2
  139. package/lib/table/pagination.js.map +1 -1
  140. package/lib/table/query-table.d.ts.map +1 -1
  141. package/lib/table/query-table.js +1 -1
  142. package/lib/table/query-table.js.map +1 -1
  143. package/lib/table/relation-table.d.ts +1 -0
  144. package/lib/table/relation-table.d.ts.map +1 -1
  145. package/lib/tmpl/hcservice-v3.d.ts +9 -0
  146. package/lib/tmpl/hcservice-v3.d.ts.map +1 -1
  147. package/lib/tmpl/hcservice-v3.js +154 -0
  148. package/lib/tmpl/hcservice-v3.js.map +1 -1
  149. package/lib/tmpl/interface.d.ts +21 -0
  150. package/lib/tmpl/interface.d.ts.map +1 -1
  151. package/lib/tmpl/interface.js.map +1 -1
  152. package/lib/units/index.d.ts +9 -4
  153. package/lib/units/index.d.ts.map +1 -1
  154. package/lib/units/index.js +49 -13
  155. package/lib/units/index.js.map +1 -1
  156. package/lib/welcome/HCWelcome.js +10 -0
  157. package/lib/welcome/HCWelcome.js.map +1 -1
  158. package/lib/welcome/components/menu-card.less +1 -0
  159. package/lib/welcome/components/user-menus.d.ts +16 -0
  160. package/lib/welcome/components/user-menus.d.ts.map +1 -0
  161. package/lib/welcome/components/user-menus.js +210 -0
  162. package/lib/welcome/components/user-menus.js.map +1 -0
  163. package/lib/welcome/components/user-menus.less +193 -0
  164. package/package.json +1 -1
  165. package/src/aldehyde/controls/date-picker/index.tsx +12 -4
  166. package/src/aldehyde/controls/file-view/index.tsx +5 -1
  167. package/src/aldehyde/detail/button/view-button.tsx +7 -6
  168. package/src/aldehyde/hooks/use-tabs/index.tsx +3 -0
  169. package/src/aldehyde/layout2/components/search-menu.tsx +1 -1
  170. package/src/aldehyde/layout2/components/user-button.tsx +45 -8
  171. package/src/aldehyde/layout2/header.tsx +5 -3
  172. package/src/aldehyde/layout2/page.tsx +8 -7
  173. package/src/aldehyde/layout2/sider.tsx +4 -3
  174. package/src/aldehyde/layout3/header.tsx +6 -4
  175. package/src/aldehyde/layout3/page.tsx +7 -4
  176. package/src/aldehyde/layout3/sider.tsx +4 -3
  177. package/src/aldehyde/layout4/header.tsx +6 -4
  178. package/src/aldehyde/layout4/page.tsx +8 -5
  179. package/src/aldehyde/layout4/sider.tsx +4 -3
  180. package/src/aldehyde/layout5/header.tsx +4 -2
  181. package/src/aldehyde/layout5/page.tsx +8 -5
  182. package/src/aldehyde/layout5/sider.tsx +4 -3
  183. package/src/aldehyde/list/card-list/card-list-item.tsx +1 -1
  184. package/src/aldehyde/lowcode-components/bar-chart/index.tsx +12 -2
  185. package/src/aldehyde/lowcode-components/base-map/index.tsx +12 -2
  186. package/src/aldehyde/lowcode-components/capsule-bar-chart/index.tsx +12 -2
  187. package/src/aldehyde/lowcode-components/circular-progress-chart/index.tsx +12 -2
  188. package/src/aldehyde/lowcode-components/column-3d-chart/index.tsx +12 -2
  189. package/src/aldehyde/lowcode-components/column-chart/index.tsx +12 -2
  190. package/src/aldehyde/lowcode-components/effectScatter-map/index.tsx +12 -2
  191. package/src/aldehyde/lowcode-components/effectScatter-map-3d/index.tsx +12 -2
  192. package/src/aldehyde/lowcode-components/gauge-chart/index.tsx +12 -2
  193. package/src/aldehyde/lowcode-components/line-bar-chart/index.tsx +12 -2
  194. package/src/aldehyde/lowcode-components/line-chart/index.tsx +12 -2
  195. package/src/aldehyde/lowcode-components/liquid-chart/index.tsx +12 -2
  196. package/src/aldehyde/lowcode-components/lowcode-view/component/screen-fit/index.less +2 -1
  197. package/src/aldehyde/lowcode-components/lowcode-view/component/screen-fit/index.tsx +3 -1
  198. package/src/aldehyde/lowcode-components/lowcode-view/index.less +7 -0
  199. package/src/aldehyde/lowcode-components/lowcode-view/index.tsx +3 -1
  200. package/src/aldehyde/lowcode-components/pie-chart/index.tsx +12 -2
  201. package/src/aldehyde/lowcode-components/progress-chart/index.tsx +12 -2
  202. package/src/aldehyde/routable/ltmpl-route.tsx +13 -5
  203. package/src/aldehyde/routable/splitview-ltmpl-route.tsx +12 -3
  204. package/src/aldehyde/table/act-table.tsx +44 -13
  205. package/src/aldehyde/table/column/column-builder.tsx +13 -20
  206. package/src/aldehyde/table/index.css +29 -2
  207. package/src/aldehyde/table/page-config-button.tsx +199 -0
  208. package/src/aldehyde/table/pagination.tsx +8 -7
  209. package/src/aldehyde/table/query-table.tsx +1 -0
  210. package/src/aldehyde/tmpl/hcservice-v3.tsx +136 -0
  211. package/src/aldehyde/tmpl/interface.tsx +22 -0
  212. package/src/aldehyde/units/index.tsx +34 -3
  213. package/src/aldehyde/welcome/HCWelcome.js +10 -0
  214. package/src/aldehyde/welcome/components/menu-card.less +1 -0
  215. package/src/aldehyde/welcome/components/user-menus.less +193 -0
  216. package/src/aldehyde/welcome/components/user-menus.tsx +275 -0
@@ -0,0 +1,193 @@
1
+ .user-menus {
2
+ position: relative;
3
+ overflow: hidden;
4
+ border-radius: 0.75rem;
5
+ padding: 1.25rem;
6
+ border: 1px solid;
7
+
8
+ .heard {
9
+ display: flex;
10
+ align-items: center;
11
+ justify-content: space-between;
12
+
13
+ .title {
14
+ display: flex;
15
+ align-items: center;
16
+ gap: 0.5rem;
17
+
18
+ .line {
19
+ width: 0.25rem;
20
+ height: 1.25rem;
21
+ border-radius: 9999px;
22
+ }
23
+
24
+ .text {
25
+ font-weight: 600;
26
+ margin: 0;
27
+ }
28
+ }
29
+ }
30
+
31
+ .user-menu-item {
32
+ transition-property: all;
33
+ transition-timing-function: cubic-bezier(.4, 0, .2, 1);
34
+ transition-duration: .15s;
35
+ padding: 12px;
36
+ border-radius: 8px;
37
+ overflow: hidden;
38
+ cursor: pointer;
39
+ display: flex;
40
+ justify-content: center;
41
+ align-content: space-between;
42
+ flex-wrap: wrap;
43
+ position: relative;
44
+
45
+ .menu-title {
46
+ width: 100%;
47
+ text-align: center;
48
+ color: var(--ant-color-text-secondary);
49
+ margin-top: 8px;
50
+ }
51
+
52
+
53
+ .icon-wrapper {
54
+ position: relative;
55
+ display: flex;
56
+ height: 3rem;
57
+ width: 3rem;
58
+ align-items: center;
59
+ justify-content: center;
60
+ transition-property: all;
61
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
62
+ transition-duration: 0.3s;
63
+ animation-duration: 0.3s;
64
+ border-radius: 0.75rem;
65
+ opacity: 1;
66
+ }
67
+
68
+ .icon-animated {
69
+ font-size: 24px;
70
+ transition-property: all;
71
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
72
+ transition-duration: 300ms;
73
+ }
74
+
75
+ .user-menu-item-bg {
76
+ position: absolute;
77
+ top: 0;
78
+ left: 0;
79
+ transition-property: opacity;
80
+ transition-timing-function: cubic-bezier(.4, 0, .2, 1);
81
+ transition-duration: .3s;
82
+ opacity: 0;
83
+ width: 100%;
84
+ height: 100%;
85
+ }
86
+ }
87
+
88
+ .user-menu-item:hover {
89
+ transform: translateY(-1px);
90
+
91
+ .icon-animated {
92
+ transform: scale(1.1) rotate(6deg);
93
+ }
94
+
95
+ .user-menu-item-bg {
96
+ opacity: 1;
97
+ }
98
+
99
+ .menu-title {
100
+ font-weight: bolder;
101
+ color: var(--ant-color-text-base)
102
+ }
103
+ }
104
+
105
+ .user-menus-items-grid {
106
+ display: grid;
107
+ margin-top: 1rem;
108
+ grid-template-columns: repeat(3, minmax(0, 1fr));
109
+ gap: 0.5rem;
110
+
111
+ @media (min-width: 740px) {
112
+ grid-template-columns: repeat(4, minmax(0, 1fr));
113
+ }
114
+
115
+ @media (min-width: 840px) {
116
+ grid-template-columns: repeat(5, minmax(0, 1fr));
117
+ }
118
+
119
+ }
120
+
121
+ .user-page-config {
122
+ margin-top: 1rem;
123
+
124
+ .page-config-item-card {
125
+ position: relative;
126
+ overflow: hidden;
127
+ border-radius: 0.75rem;
128
+ padding: 1.25rem;
129
+ transition-property: transform, box-shadow;
130
+ display: flex;
131
+ align-items: flex-start;
132
+ justify-content: space-between;
133
+ border: 1px solid;
134
+ cursor: pointer;
135
+ height: 100%;
136
+
137
+ .ant-row {
138
+ width: 100%;
139
+ }
140
+
141
+ .icon-wrapper {
142
+ position: relative;
143
+ display: flex;
144
+ height: 3rem;
145
+ width: 3rem;
146
+ align-items: center;
147
+ justify-content: center;
148
+ transition-property: all;
149
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
150
+ transition-duration: 0.3s;
151
+ animation-duration: 0.3s;
152
+ border-radius: 0.75rem;
153
+ opacity: 1;
154
+ }
155
+
156
+ .item-title {
157
+ margin-bottom: 12px;
158
+ font-weight: 600;
159
+ font-size: 16px;
160
+ }
161
+
162
+ .tag {
163
+ padding: 4px 10px;
164
+ border-radius: 9999px;
165
+ font-size: 12px;
166
+ line-height: 16px;
167
+ }
168
+
169
+ }
170
+
171
+ .page-config-item-card:hover {
172
+ transform: translateY(-1px);
173
+ box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
174
+
175
+ .icon-wrapper {
176
+ transform: scale(1.1);
177
+ box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.04);
178
+ }
179
+
180
+ .item-title {
181
+ color: var(--ant-color-primary);
182
+ }
183
+ }
184
+
185
+ .icon-animated {
186
+ font-size: 24px;
187
+ transition-property: all;
188
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
189
+ transition-duration: 300ms;
190
+ }
191
+ }
192
+
193
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aldehyde",
3
- "version": "0.2.420",
3
+ "version": "0.2.422",
4
4
  "author": "cosmicparticle",
5
5
  "main": "lib/index.js",
6
6
  "module": "src/aldehyde/index.txs",
@@ -17,6 +17,13 @@ dayjs.extend(localeData);
17
17
 
18
18
  const { RangePicker } = AntdDatePicker;
19
19
 
20
+ // 默认显示预设时间范围
21
+ const defShowPresets = {
22
+ "last1days": { label: "最近1天", value: [dayjs().subtract(1, 'day'), dayjs()] },
23
+ "yesterday": { label: "昨天", value: [dayjs().subtract(1, 'day').startOf('day'), dayjs().subtract(1, 'day').endOf('day')] },
24
+ "currentDay": { label: "今天", value: [dayjs().startOf('day'), dayjs().endOf('day')] },
25
+ };
26
+
20
27
  // 预设时间范围
21
28
  const defPresets = {
22
29
  "currentYear": { label: "本年", value: [dayjs().startOf('year'), dayjs().endOf('year')] },
@@ -26,9 +33,7 @@ const defPresets = {
26
33
  "last30days": { label: "最近30天", value: [dayjs().subtract(30, 'day'), dayjs()] },
27
34
  "last15days": { label: "最近15天", value: [dayjs().subtract(15, 'day'), dayjs()] },
28
35
  "last7days": { label: "最近7天", value: [dayjs().subtract(7, 'day'), dayjs()] },
29
- "last1days": { label: "最近1天", value: [dayjs().subtract(1, 'day'), dayjs()] },
30
- "yesterday": { label: "昨天", value: [dayjs().subtract(1, 'day').startOf('day'), dayjs().subtract(1, 'day').endOf('day')] },
31
- "currentDay": { label: "今天", value: [dayjs().startOf('day'), dayjs().endOf('day')] },
36
+ ...defShowPresets,
32
37
  "last12hours": { label: "最近12小时", value: [dayjs().subtract(12, 'hour'), dayjs()] },
33
38
  "last6hours": { label: "最近6小时", value: [dayjs().subtract(6, 'hour'), dayjs()] },
34
39
  "last1hour": { label: "最近1小时", value: [dayjs().subtract(1, 'hour'), dayjs()] },
@@ -67,7 +72,10 @@ const DatePicker: React.FC<DatePickerProps> = (props) => {
67
72
  return current && ((max && dayjs(current.format(format), format) > dayjs(max, format)) || (min && dayjs(current.format(format), format) < dayjs(min, format)));
68
73
  };
69
74
 
70
- const presets = useMemo(() => dateControlShortcutKeys?.map(item => defPresets[item]) || [], [dateControlShortcutKeys]);
75
+ const presets = useMemo(() => {
76
+ const temArr = dateControlShortcutKeys?.map(item => defPresets[item]) || [];
77
+ return temArr?.length ? temArr : Object.values(defShowPresets);
78
+ }, [dateControlShortcutKeys]);
71
79
 
72
80
  let entryControl = undefined;
73
81
  let picker: "date" | "time" | "year" | "month" | "week" | "quarter" = "date";
@@ -8,6 +8,8 @@ import Player from "griffith";
8
8
  // 不得已而为之
9
9
  const Player1: any = Player;
10
10
 
11
+ // Image容错图片
12
+ const fallback = "data:image/png;base64,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";
11
13
 
12
14
  export interface FileViewProps {
13
15
  fieldConfig: FieldConfig,
@@ -67,7 +69,7 @@ export default class FileView extends React.PureComponent<FileViewProps, FileVie
67
69
  packFile2Show = () => {
68
70
  const { urlData, filePath, playing } = this.state;
69
71
  const { downloadable, serverKey, fieldConfig } = this.props;
70
- const { preview } = fieldConfig;
72
+ const { preview, isFallback } = fieldConfig;
71
73
 
72
74
  let path = undefined;
73
75
  let fileName = undefined;
@@ -83,6 +85,7 @@ export default class FileView extends React.PureComponent<FileViewProps, FileVie
83
85
  width={90}
84
86
  src={filePath.iconPath ? filePath.iconPath : filePath.path}
85
87
  preview={preview || preview === false ? preview : { src: filePath.path }}
88
+ fallback={isFallback ? fallback : undefined}
86
89
  />
87
90
  } else if (urlData) {
88
91
  // let urlValue = await HCService.loadFileTxt(jsonFile.base.path)
@@ -90,6 +93,7 @@ export default class FileView extends React.PureComponent<FileViewProps, FileVie
90
93
  width={90}
91
94
  src={urlData}
92
95
  preview={preview || preview === false ? preview : { src: urlData }}
96
+ fallback={isFallback ? fallback : undefined}
93
97
  />
94
98
  } else if (['mp4', 'MP4', 'mov', 'MOV', 'avi', 'AVI', 'WMV', 'wmv', "wav", "WAV"].includes(filePath.contentType)) {
95
99
  let sources = {
@@ -1,6 +1,6 @@
1
1
  import React from "react";
2
2
  import { Button } from "antd";
3
- import {DtmplData, LtmplConfig, ShowViewParam} from "../../tmpl/interface";
3
+ import { DtmplData, LtmplConfig, ShowViewParam } from "../../tmpl/interface";
4
4
  import { AlignCenterOutlined } from "@ant-design/icons";
5
5
  import ActionUtils from "../../controls/action/utils";
6
6
 
@@ -9,10 +9,11 @@ interface ViewButtonProps {
9
9
  showView: (showViewParam: ShowViewParam) => void;
10
10
  data: DtmplData;
11
11
  ltmplConfig: LtmplConfig;
12
+ buttonType?: "link" | "text" | "primary" | "default" | "dashed";
12
13
  }
13
14
 
14
15
  const ViewButton: React.FC<ViewButtonProps> = (props) => {
15
- const { showView, data, ltmplConfig } = props;
16
+ const { showView, data, ltmplConfig, buttonType = "primary" } = props;
16
17
  let button = undefined;
17
18
  if (ltmplConfig.classViewConfigs) {
18
19
  ltmplConfig.classViewConfigs.forEach((classViewConfig) => {
@@ -23,10 +24,10 @@ const ViewButton: React.FC<ViewButtonProps> = (props) => {
23
24
  button = (
24
25
  <Button
25
26
  size="small"
26
- type="primary"
27
+ type={buttonType}
27
28
  icon={<AlignCenterOutlined />}
28
29
  onClick={() =>
29
- showView({
30
+ showView({
30
31
  code: data.code,
31
32
  dtmplSourceId: classViewConfig.id,
32
33
  })
@@ -49,9 +50,9 @@ const ViewButton: React.FC<ViewButtonProps> = (props) => {
49
50
  button = (
50
51
  <Button
51
52
  size="small"
52
- type="primary"
53
+ type={buttonType}
53
54
  icon={<AlignCenterOutlined />}
54
- onClick={() => showView({ code: data.code})}
55
+ onClick={() => showView({ code: data.code })}
55
56
  ></Button>
56
57
  );
57
58
  }
@@ -40,6 +40,9 @@ export function useTabs() {
40
40
  return;
41
41
  }
42
42
  const index = (keepAliveTabs || []).findIndex(o => o.routePath === routePath);
43
+ if (index === -1) {
44
+ return;
45
+ }
43
46
  if (keepAliveTabs[index].routePath === activeTabRoutePath && keepAliveTabs.length > 1) {
44
47
  if (index > 0) {
45
48
  navigate(keepAliveTabs[index - 1].pathname);
@@ -64,7 +64,7 @@ const Index = (props: Props) => {
64
64
  />;
65
65
 
66
66
  return (
67
- <Popover placement="bottom" content={renderMenu} styles={{ body: { padding: 2 } }} destroyOnHidden onOpenChange={(val) => val && setSelectInit(true)}>
67
+ <Popover placement="bottom" trigger="click" content={renderMenu} styles={{ body: { padding: 2 } }} destroyOnHidden onOpenChange={(val) => val && setSelectInit(true)}>
68
68
  <Button type="link" icon={<SearchOutlined />} shape="default" size="large"
69
69
  style={{
70
70
  width: "100%",
@@ -7,11 +7,11 @@ import {
7
7
  SettingOutlined,
8
8
  UnlockOutlined,
9
9
  UserOutlined,
10
- CompressOutlined, GlobalOutlined
10
+ CompressOutlined, GlobalOutlined, DownloadOutlined
11
11
  } from "@ant-design/icons";
12
- import { Button, ButtonProps, Dropdown, GetProp, MenuProps } from "antd";
12
+ import { Button, ButtonProps, Dropdown, GetProp, MenuProps, Popconfirm } from "antd";
13
13
  import HcserviceV3 from "../../tmpl/hcservice-v3";
14
- import { UserInfo } from "../../tmpl/interface";
14
+ import { UserInfo, ThemeConfig } from "../../tmpl/interface";
15
15
  import UserInfoBar from "../../layout/menu/userinfo-bar";
16
16
  import { useLocale } from "../../locale/useLocale";
17
17
  import { NavLink, useNavigate } from "react-router-dom";
@@ -34,10 +34,12 @@ type DropDownMenuType = {
34
34
  interface Props extends ButtonProps {
35
35
  logoutUrl?: string;
36
36
  customRender?: ReactNode;
37
+ layoutRootPath?: string;
38
+ themeConfig?: ThemeConfig;
37
39
  }
38
40
 
39
41
  const UserButton: React.FC<Props> = (props) => {
40
- const { logoutUrl = "/login2", customRender } = props;
42
+ const { logoutUrl = "/login2", customRender, layoutRootPath = "v2", themeConfig } = props;
41
43
  // translate
42
44
  const { translate, changeSiderCollapsed, getSiderCollapsed, compactTheme, changeCompactTheme } = useLocale();
43
45
  const [keepAliveTabs, setKeepAliveTabs] = useSessionStorageState<KeepAliveTab[]>('keepAliveTabs', {
@@ -51,11 +53,23 @@ const UserButton: React.FC<Props> = (props) => {
51
53
  id: undefined,
52
54
  name: undefined,
53
55
  });
56
+
54
57
  const initUserConfig = async () => {
55
58
  const userInfo: UserInfo = await Units.getUserInfo();
56
59
  setUserConfig(userInfo);
57
60
  };
58
- useEffect(() => { }, [userConfig]);
61
+
62
+ // 初始化侧边栏菜单显隐
63
+ const initSiderCollapsed = (hideLeftMenuTheme: string) => {
64
+ if (!hideLeftMenuTheme || !layoutRootPath) {
65
+ return;
66
+ }
67
+ const temThemes = hideLeftMenuTheme.split(",");
68
+ const isCollapsed = getSiderCollapsed();
69
+ if ((temThemes.includes(layoutRootPath) && !isCollapsed) || (!temThemes.includes(layoutRootPath) && isCollapsed)) {
70
+ changeSiderCollapsed();
71
+ }
72
+ }
59
73
 
60
74
  // 上下文配置信息
61
75
  const [globalContext, setGlobalContext] = useState<any[]>();
@@ -65,8 +79,15 @@ const UserButton: React.FC<Props> = (props) => {
65
79
  };
66
80
  useEffect(() => {
67
81
  initContext();
82
+ initUserConfig();
68
83
  }, []);
69
84
 
85
+ useEffect(() => {
86
+ if (themeConfig) {
87
+ initSiderCollapsed(themeConfig.hideLeftMenuTheme);
88
+ }
89
+ }, [themeConfig]);
90
+
70
91
  // 用户是否登录
71
92
  const [isLogin, setIsLogin] = useState<boolean>(false);
72
93
  useEffect(() => {
@@ -74,9 +95,6 @@ const UserButton: React.FC<Props> = (props) => {
74
95
  setIsLogin(true);
75
96
  else setIsLogin(false);
76
97
  }, [userConfig]);
77
- useEffect(() => {
78
- initUserConfig();
79
- }, []);
80
98
 
81
99
  // logout
82
100
  const logout = async () => {
@@ -145,6 +163,25 @@ const UserButton: React.FC<Props> = (props) => {
145
163
  return isLogin && userConfig.cleanCachable;
146
164
  },
147
165
  },
166
+ {
167
+ label: (
168
+ <Popconfirm
169
+ placement="rightBottom"
170
+ title={translate("${确定要[拉取]我的配置吗}?")}
171
+ onConfirm={() => Units.getPageConfigDefault()}
172
+ okText={translate("${确定}")}
173
+ cancelText={translate("${取消}")}
174
+ okType="danger"
175
+ >
176
+ <span onClick={(e) => e.stopPropagation()}>
177
+ {translate("${我的配置}")}
178
+ </span>
179
+ </Popconfirm>
180
+ ),
181
+ key: "userPageConfig",
182
+ icon: <DownloadOutlined />,
183
+ show: () => isLogin && themeConfig?.allowUserConfig,
184
+ },
148
185
  {
149
186
  label: <span onClick={() => changeCompactTheme()}>{translate(compactTheme ? "${默认主题}" : "${紧凑主题}")}</span>,
150
187
  key: "compactTheme",
@@ -25,6 +25,7 @@ import { useLayoutContext } from "./layout-context";
25
25
  import IconFont from "./components/icon-font";
26
26
  import SearchMenu from "./components/search-menu";
27
27
  import ScreenfullButton from "./components/screenfull-button";
28
+ import { ThemeConfig } from "../tmpl/interface";
28
29
 
29
30
  const toolbarStyle: CSSProperties = {
30
31
  width: "100%",
@@ -41,6 +42,7 @@ type HeaderPropsType = {
41
42
  menuList: MenuType[];
42
43
  style?: any;
43
44
  logoImg: string;
45
+ themeConfig?: ThemeConfig;
44
46
  };
45
47
 
46
48
  type MenuItem = Required<MenuProps>["items"][number];
@@ -48,7 +50,7 @@ type MenuItem = Required<MenuProps>["items"][number];
48
50
 
49
51
  const { useToken } = theme;
50
52
 
51
- const Header: React.FC<HeaderPropsType> = ({ systemName, menuList, style, logoImg }) => {
53
+ const Header: React.FC<HeaderPropsType> = ({ systemName, menuList, style, logoImg, themeConfig }) => {
52
54
  const { setDocumentTitle, menuItemIdToFirstFloorIdxMap } = useLayoutContext();
53
55
 
54
56
  // token
@@ -65,7 +67,7 @@ const Header: React.FC<HeaderPropsType> = ({ systemName, menuList, style, logoIm
65
67
  menuList,
66
68
  (menuItem, floor) => {
67
69
  const { disabled, label, children, icon } = menuItem;
68
- const renderIcon = icon ? <IconFont type={icon} /> : "";
70
+ const renderIcon = (themeConfig?.showTopMenuIcon && icon) ? <IconFont type={icon} /> : "";
69
71
  if (disabled)
70
72
  return (
71
73
  <div
@@ -260,7 +262,7 @@ const Header: React.FC<HeaderPropsType> = ({ systemName, menuList, style, logoIm
260
262
  type="link"
261
263
  style={toolbarStyle}
262
264
  /> */}
263
- <UserButton style={{ padding: 0, marginRight: "15px", color: "#ffffff" }} />
265
+ <UserButton themeConfig={themeConfig} layoutRootPath="v2" style={{ padding: 0, marginRight: "15px", color: "#ffffff" }} />
264
266
  </Space>
265
267
  </div>
266
268
  </div>
@@ -9,7 +9,7 @@ import Sider from "./sider";
9
9
  import Main from "./main";
10
10
  import HcserviceV3 from "../tmpl/hcservice-v3";
11
11
  import { MenuType } from "./type/layout-type";
12
- import { BlockType, MenuConfigAPIType } from "../tmpl/interface";
12
+ import { BlockType, MenuConfigAPIType, ThemeConfig } from "../tmpl/interface";
13
13
  import { useVarCssColor } from "../hooks/useVarCssColor";
14
14
  import { generate } from "@ant-design/colors";
15
15
  import { LayoutProvider, useLayoutContext } from "./layout-context";
@@ -204,16 +204,17 @@ const Page: React.FC<PagePropsType> = (props: PagePropsType) => {
204
204
 
205
205
  const [systemName, setSystemName] = useState("");
206
206
  const [systemLogo, setSystemLogo] = useState("");
207
-
208
207
  const [menu, SetMenu] = useState<MenuType[]>([]);
208
+ const [themeConfig, setThemeConfig] = useState<ThemeConfig>();
209
209
 
210
210
  const getThemeConfigAndMenuConfig = async () => {
211
- const themeConfig = await Units.getThemeConfig();
211
+ const tConfig = await Units.getThemeConfig();
212
212
  const menuConfig = await getMenuConfig();
213
- setSystemName(themeConfig?.programName || menuConfig?.systemName);
214
- setSystemLogo(themeConfig?.programIcon || homePng);
213
+ setSystemName(tConfig?.programName || menuConfig?.systemName);
214
+ setSystemLogo(tConfig?.programIcon || homePng);
215
215
  SetMenu(menuConfig?.menu);
216
216
  updateMenuItemIdToFirstFloorIdxMap(menuConfig?.menu);
217
+ setThemeConfig(tConfig);
217
218
  };
218
219
 
219
220
 
@@ -243,9 +244,9 @@ const Page: React.FC<PagePropsType> = (props: PagePropsType) => {
243
244
  algorithm: compactTheme ? [theme.compactAlgorithm] : [],
244
245
  }}>
245
246
  <Layout style={{ height: "100%" }} className={compactTheme ? "layout-compactTheme" : undefined}>
246
- <Header logoImg={logo || systemLogo} systemName={systemName ? systemName : Units.programName_NavLeft()} menuList={menu}></Header>
247
+ <Header themeConfig={themeConfig} logoImg={logo || systemLogo} systemName={systemName ? systemName : Units.programName_NavLeft()} menuList={menu}></Header>
247
248
  <Layout>
248
- <Sider menuList={menu} collapsed={getSiderCollapsed()}></Sider>
249
+ <Sider themeConfig={themeConfig} menuList={menu} collapsed={getSiderCollapsed()}></Sider>
249
250
  <Main>{props.children}</Main>
250
251
  </Layout>
251
252
  </Layout>
@@ -12,7 +12,7 @@ import { useLocale } from "../locale/useLocale";
12
12
  import { generate } from "@ant-design/colors";
13
13
  import { useLayoutContext } from "./layout-context";
14
14
  import IconFont from "./components/icon-font";
15
- import { UserInfo } from "../tmpl/interface";
15
+ import { UserInfo, ThemeConfig } from "../tmpl/interface";
16
16
  import Units from "../units";
17
17
  import "./css/sider.less";
18
18
 
@@ -20,6 +20,7 @@ type SiderPropsType = {
20
20
  menuList: MenuType[];
21
21
  // style?: typeof Layout.Sider.defaultProps.style;
22
22
  collapsed: boolean;
23
+ themeConfig?: ThemeConfig;
23
24
  };
24
25
 
25
26
  type MenuItem = Required<MenuProps>["items"][number];
@@ -54,7 +55,7 @@ const getSecoundFloorMenuList = (
54
55
 
55
56
  const { useToken } = theme;
56
57
 
57
- const Sider: React.FC<SiderPropsType> = ({ menuList, collapsed }) => {
58
+ const Sider: React.FC<SiderPropsType> = ({ menuList, collapsed, themeConfig }) => {
58
59
  const { setDocumentTitle, menuItemIdToFirstFloorIdxMap } = useLayoutContext();
59
60
  const [orgName, setOrgName] = useState<string>(""); // 组织名称
60
61
 
@@ -91,7 +92,7 @@ const Sider: React.FC<SiderPropsType> = ({ menuList, collapsed }) => {
91
92
  ) => {
92
93
  return handlePropsMenuToAntdMenu(secoundFloorMenu, (menuItem, floor) => {
93
94
  const { disabled, label, children, icon } = menuItem;
94
- const renderIcon = icon ? <IconFont type={icon} /> : "";
95
+ const renderIcon = (themeConfig?.showLeftMenuIcon && icon) ? <IconFont type={icon} /> : "";
95
96
 
96
97
  if (disabled)
97
98
  return (
@@ -17,6 +17,7 @@ import headerBgImg from "./imgs/header-bg.png";
17
17
  import homeBgImg from "./imgs/home-bg.png";
18
18
  import Time from "./components/time";
19
19
  import IconFont from "../layout2/components/icon-font";
20
+ import { ThemeConfig } from "../tmpl/interface";
20
21
  import "./css/header.less";
21
22
 
22
23
  const toolbarStyle: CSSProperties = {
@@ -57,11 +58,12 @@ type HeaderPropsType = {
57
58
  systemName: string;
58
59
  menuList: MenuType[];
59
60
  style?: any;
61
+ themeConfig?: ThemeConfig;
60
62
  };
61
63
 
62
64
  type MenuItem = Required<MenuProps>["items"][number];
63
65
 
64
- const Header: React.FC<HeaderPropsType> = ({ systemName, menuList }) => {
66
+ const Header: React.FC<HeaderPropsType> = ({ systemName, menuList, themeConfig }) => {
65
67
  const { setDocumentTitle, menuItemIdToFirstFloorIdxMap } = useLayoutContext();
66
68
  const { translate, getLocale } = useLocale();
67
69
  const [menu, setMenu] = useState<MenuItem[]>([]);
@@ -73,7 +75,7 @@ const Header: React.FC<HeaderPropsType> = ({ systemName, menuList }) => {
73
75
 
74
76
  const renderMenuItem = (menuItem) => {
75
77
  const { label, id, disabled, icon } = menuItem;
76
- const renderIcon = icon ? <IconFont type={icon} /> : "";
78
+ const renderIcon = (themeConfig?.showTopMenuIcon && icon) ? <IconFont type={icon} /> : "";
77
79
  return <div className={`menu-item ${disabled ? "menu-disabled" : ""}`}><div className={selParentId === id ? "menu-item-border-sel" : "menu-item-border"}><Space size={"small"}>{renderIcon}{translate("${" + label + "}")}</Space></div></div>;
78
80
  }
79
81
 
@@ -82,7 +84,7 @@ const Header: React.FC<HeaderPropsType> = ({ systemName, menuList }) => {
82
84
  if (disabled) {
83
85
  return renderMenuItem(menuItem);
84
86
  }
85
- const renderIcon = icon ? <IconFont type={icon} /> : "";
87
+ const renderIcon = (themeConfig?.showTopMenuIcon && icon) ? <IconFont type={icon} /> : "";
86
88
  const { path, target } = getLeftMostRouteInfo(menuItem);
87
89
  if (floor === 0) {
88
90
  return path === null ? (
@@ -155,7 +157,7 @@ const Header: React.FC<HeaderPropsType> = ({ systemName, menuList }) => {
155
157
  type="link"
156
158
  style={toolbarStyle}
157
159
  /> */}
158
- <div className="header-user"><UserButton logoutUrl="/login3" style={{ padding: 0, color: "#fff" }} /></div>
160
+ <div className="header-user"><UserButton themeConfig={themeConfig} layoutRootPath="v3" logoutUrl="/login3" style={{ padding: 0, color: "#fff" }} /></div>
159
161
  </Space>
160
162
  </div>
161
163
  </div>
@@ -13,6 +13,7 @@ import Units from '../units';
13
13
  import { useLocale } from "../locale/useLocale";
14
14
  import { KeepAliveTab } from "../hooks/use-tabs";
15
15
  import { getMenuConfig } from "../layout2/page";
16
+ import { ThemeConfig } from "../tmpl/interface";
16
17
  import "./css/main.less";
17
18
 
18
19
  const { useToken } = theme;
@@ -24,6 +25,7 @@ type PagePropsType = {
24
25
  const Page: React.FC<PagePropsType> = (props: PagePropsType) => {
25
26
  const [systemName, setSystemName] = useState("");
26
27
  const [menu, setMenu] = useState<MenuType[]>([]);
28
+ const [themeConfig, setThemeConfig] = useState<ThemeConfig>();
27
29
  const pageRef = useRef<HTMLDivElement>(undefined); // page ref
28
30
  //清空缓存
29
31
  const [keepAliveTabs, setKeepAliveTabs] = useSessionStorageState<KeepAliveTab[]>('keepAliveTabs', { defaultValue: [] });
@@ -32,11 +34,12 @@ const Page: React.FC<PagePropsType> = (props: PagePropsType) => {
32
34
  const { token: { colorPrimary } } = useToken();
33
35
 
34
36
  const getThemeConfigAndMenuConfig = async () => {
35
- const themeConfig = await Units.getThemeConfig();
37
+ const tConfig = await Units.getThemeConfig();
36
38
  const menuConfig = await getMenuConfig("v3");
37
- setSystemName(themeConfig?.programName || menuConfig?.systemName);
39
+ setSystemName(tConfig?.programName || menuConfig?.systemName);
38
40
  setMenu(menuConfig?.menu);
39
41
  updateMenuItemIdToFirstFloorIdxMap(menuConfig?.menu);
42
+ setThemeConfig(tConfig);
40
43
  };
41
44
 
42
45
  useEffect(() => {
@@ -69,9 +72,9 @@ const Page: React.FC<PagePropsType> = (props: PagePropsType) => {
69
72
  card={{ className: "v3-antd-card" }}
70
73
  >
71
74
  <Layout style={{ height: "100%" }} className={compactTheme ? "layout-compactTheme" : undefined}>
72
- <Header systemName={systemName ? systemName : Units.programName_NavLeft()} menuList={menu}></Header>
75
+ <Header themeConfig={themeConfig} systemName={systemName ? systemName : Units.programName_NavLeft()} menuList={menu}></Header>
73
76
  <Layout>
74
- <Sider menuList={menu} collapsed={getSiderCollapsed()}></Sider>
77
+ <Sider themeConfig={themeConfig} menuList={menu} collapsed={getSiderCollapsed()}></Sider>
75
78
  <Main>{props.children}</Main>
76
79
  </Layout>
77
80
  </Layout>