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.
- package/lib/controls/date-picker/index.d.ts.map +1 -1
- package/lib/controls/date-picker/index.js +8 -15
- package/lib/controls/date-picker/index.js.map +1 -1
- package/lib/controls/file-view/index.d.ts.map +1 -1
- package/lib/controls/file-view/index.js +5 -3
- package/lib/controls/file-view/index.js.map +1 -1
- package/lib/detail/button/view-button.d.ts +1 -0
- package/lib/detail/button/view-button.d.ts.map +1 -1
- package/lib/detail/button/view-button.js +3 -3
- package/lib/detail/button/view-button.js.map +1 -1
- package/lib/hooks/use-tabs/index.d.ts.map +1 -1
- package/lib/hooks/use-tabs/index.js +3 -0
- package/lib/hooks/use-tabs/index.js.map +1 -1
- package/lib/layout2/components/search-menu.js +1 -1
- package/lib/layout2/components/search-menu.js.map +1 -1
- package/lib/layout2/components/user-button.d.ts +3 -0
- package/lib/layout2/components/user-button.d.ts.map +1 -1
- package/lib/layout2/components/user-button.js +27 -7
- package/lib/layout2/components/user-button.js.map +1 -1
- package/lib/layout2/header.d.ts +2 -0
- package/lib/layout2/header.d.ts.map +1 -1
- package/lib/layout2/header.js +3 -3
- package/lib/layout2/header.js.map +1 -1
- package/lib/layout2/page.d.ts.map +1 -1
- package/lib/layout2/page.js +7 -5
- package/lib/layout2/page.js.map +1 -1
- package/lib/layout2/sider.d.ts +2 -0
- package/lib/layout2/sider.d.ts.map +1 -1
- package/lib/layout2/sider.js +2 -2
- package/lib/layout2/sider.js.map +1 -1
- package/lib/layout3/header.d.ts +2 -0
- package/lib/layout3/header.d.ts.map +1 -1
- package/lib/layout3/header.js +4 -4
- package/lib/layout3/header.js.map +1 -1
- package/lib/layout3/page.d.ts.map +1 -1
- package/lib/layout3/page.js +6 -4
- package/lib/layout3/page.js.map +1 -1
- package/lib/layout3/sider.d.ts +2 -0
- package/lib/layout3/sider.d.ts.map +1 -1
- package/lib/layout3/sider.js +2 -2
- package/lib/layout3/sider.js.map +1 -1
- package/lib/layout4/header.d.ts +2 -0
- package/lib/layout4/header.d.ts.map +1 -1
- package/lib/layout4/header.js +4 -4
- package/lib/layout4/header.js.map +1 -1
- package/lib/layout4/page.d.ts.map +1 -1
- package/lib/layout4/page.js +7 -5
- package/lib/layout4/page.js.map +1 -1
- package/lib/layout4/sider.d.ts +2 -0
- package/lib/layout4/sider.d.ts.map +1 -1
- package/lib/layout4/sider.js +2 -2
- package/lib/layout4/sider.js.map +1 -1
- package/lib/layout5/header.d.ts +2 -0
- package/lib/layout5/header.d.ts.map +1 -1
- package/lib/layout5/header.js +2 -2
- package/lib/layout5/header.js.map +1 -1
- package/lib/layout5/page.d.ts.map +1 -1
- package/lib/layout5/page.js +7 -5
- package/lib/layout5/page.js.map +1 -1
- package/lib/layout5/sider.d.ts +2 -0
- package/lib/layout5/sider.d.ts.map +1 -1
- package/lib/layout5/sider.js +2 -2
- package/lib/layout5/sider.js.map +1 -1
- package/lib/list/card-list/card-list-item.js +1 -1
- package/lib/list/card-list/card-list-item.js.map +1 -1
- package/lib/lowcode-components/bar-chart/index.d.ts.map +1 -1
- package/lib/lowcode-components/bar-chart/index.js +9 -1
- package/lib/lowcode-components/bar-chart/index.js.map +1 -1
- package/lib/lowcode-components/base-map/index.d.ts.map +1 -1
- package/lib/lowcode-components/base-map/index.js +9 -1
- package/lib/lowcode-components/base-map/index.js.map +1 -1
- package/lib/lowcode-components/capsule-bar-chart/index.d.ts.map +1 -1
- package/lib/lowcode-components/capsule-bar-chart/index.js +9 -1
- package/lib/lowcode-components/capsule-bar-chart/index.js.map +1 -1
- package/lib/lowcode-components/circular-progress-chart/index.d.ts.map +1 -1
- package/lib/lowcode-components/circular-progress-chart/index.js +9 -1
- package/lib/lowcode-components/circular-progress-chart/index.js.map +1 -1
- package/lib/lowcode-components/column-3d-chart/index.d.ts.map +1 -1
- package/lib/lowcode-components/column-3d-chart/index.js +9 -1
- package/lib/lowcode-components/column-3d-chart/index.js.map +1 -1
- package/lib/lowcode-components/column-chart/index.d.ts.map +1 -1
- package/lib/lowcode-components/column-chart/index.js +9 -1
- package/lib/lowcode-components/column-chart/index.js.map +1 -1
- package/lib/lowcode-components/effectScatter-map/index.d.ts.map +1 -1
- package/lib/lowcode-components/effectScatter-map/index.js +9 -1
- package/lib/lowcode-components/effectScatter-map/index.js.map +1 -1
- package/lib/lowcode-components/effectScatter-map-3d/index.d.ts.map +1 -1
- package/lib/lowcode-components/effectScatter-map-3d/index.js +9 -1
- package/lib/lowcode-components/effectScatter-map-3d/index.js.map +1 -1
- package/lib/lowcode-components/gauge-chart/index.d.ts.map +1 -1
- package/lib/lowcode-components/gauge-chart/index.js +9 -1
- package/lib/lowcode-components/gauge-chart/index.js.map +1 -1
- package/lib/lowcode-components/line-bar-chart/index.d.ts.map +1 -1
- package/lib/lowcode-components/line-bar-chart/index.js +9 -1
- package/lib/lowcode-components/line-bar-chart/index.js.map +1 -1
- package/lib/lowcode-components/line-chart/index.d.ts.map +1 -1
- package/lib/lowcode-components/line-chart/index.js +9 -1
- package/lib/lowcode-components/line-chart/index.js.map +1 -1
- package/lib/lowcode-components/liquid-chart/index.d.ts.map +1 -1
- package/lib/lowcode-components/liquid-chart/index.js +9 -1
- package/lib/lowcode-components/liquid-chart/index.js.map +1 -1
- package/lib/lowcode-components/lowcode-view/component/screen-fit/index.d.ts.map +1 -1
- package/lib/lowcode-components/lowcode-view/component/screen-fit/index.js +2 -0
- package/lib/lowcode-components/lowcode-view/component/screen-fit/index.js.map +1 -1
- package/lib/lowcode-components/lowcode-view/component/screen-fit/index.less +2 -1
- package/lib/lowcode-components/lowcode-view/index.d.ts +2 -1
- package/lib/lowcode-components/lowcode-view/index.d.ts.map +1 -1
- package/lib/lowcode-components/lowcode-view/index.js +2 -2
- package/lib/lowcode-components/lowcode-view/index.js.map +1 -1
- package/lib/lowcode-components/lowcode-view/index.less +7 -0
- package/lib/lowcode-components/pie-chart/index.d.ts.map +1 -1
- package/lib/lowcode-components/pie-chart/index.js +9 -1
- package/lib/lowcode-components/pie-chart/index.js.map +1 -1
- package/lib/lowcode-components/progress-chart/index.d.ts.map +1 -1
- package/lib/lowcode-components/progress-chart/index.js +9 -1
- package/lib/lowcode-components/progress-chart/index.js.map +1 -1
- package/lib/routable/ltmpl-route.d.ts +2 -1
- package/lib/routable/ltmpl-route.d.ts.map +1 -1
- package/lib/routable/ltmpl-route.js +11 -5
- package/lib/routable/ltmpl-route.js.map +1 -1
- package/lib/routable/splitview-ltmpl-route.d.ts.map +1 -1
- package/lib/routable/splitview-ltmpl-route.js +11 -4
- package/lib/routable/splitview-ltmpl-route.js.map +1 -1
- package/lib/table/act-table.d.ts +4 -0
- package/lib/table/act-table.d.ts.map +1 -1
- package/lib/table/act-table.js +37 -12
- package/lib/table/act-table.js.map +1 -1
- package/lib/table/column/column-builder.d.ts.map +1 -1
- package/lib/table/column/column-builder.js +6 -8
- package/lib/table/column/column-builder.js.map +1 -1
- package/lib/table/index.css +29 -2
- package/lib/table/page-config-button.d.ts +15 -0
- package/lib/table/page-config-button.d.ts.map +1 -0
- package/lib/table/page-config-button.js +156 -0
- package/lib/table/page-config-button.js.map +1 -0
- package/lib/table/pagination.d.ts +1 -0
- package/lib/table/pagination.d.ts.map +1 -1
- package/lib/table/pagination.js +2 -2
- package/lib/table/pagination.js.map +1 -1
- package/lib/table/query-table.d.ts.map +1 -1
- package/lib/table/query-table.js +1 -1
- package/lib/table/query-table.js.map +1 -1
- package/lib/table/relation-table.d.ts +1 -0
- package/lib/table/relation-table.d.ts.map +1 -1
- package/lib/tmpl/hcservice-v3.d.ts +9 -0
- package/lib/tmpl/hcservice-v3.d.ts.map +1 -1
- package/lib/tmpl/hcservice-v3.js +154 -0
- package/lib/tmpl/hcservice-v3.js.map +1 -1
- package/lib/tmpl/interface.d.ts +21 -0
- package/lib/tmpl/interface.d.ts.map +1 -1
- package/lib/tmpl/interface.js.map +1 -1
- package/lib/units/index.d.ts +9 -4
- package/lib/units/index.d.ts.map +1 -1
- package/lib/units/index.js +49 -13
- package/lib/units/index.js.map +1 -1
- package/lib/welcome/HCWelcome.js +10 -0
- package/lib/welcome/HCWelcome.js.map +1 -1
- package/lib/welcome/components/menu-card.less +1 -0
- package/lib/welcome/components/user-menus.d.ts +16 -0
- package/lib/welcome/components/user-menus.d.ts.map +1 -0
- package/lib/welcome/components/user-menus.js +210 -0
- package/lib/welcome/components/user-menus.js.map +1 -0
- package/lib/welcome/components/user-menus.less +193 -0
- package/package.json +1 -1
- package/src/aldehyde/controls/date-picker/index.tsx +12 -4
- package/src/aldehyde/controls/file-view/index.tsx +5 -1
- package/src/aldehyde/detail/button/view-button.tsx +7 -6
- package/src/aldehyde/hooks/use-tabs/index.tsx +3 -0
- package/src/aldehyde/layout2/components/search-menu.tsx +1 -1
- package/src/aldehyde/layout2/components/user-button.tsx +45 -8
- package/src/aldehyde/layout2/header.tsx +5 -3
- package/src/aldehyde/layout2/page.tsx +8 -7
- package/src/aldehyde/layout2/sider.tsx +4 -3
- package/src/aldehyde/layout3/header.tsx +6 -4
- package/src/aldehyde/layout3/page.tsx +7 -4
- package/src/aldehyde/layout3/sider.tsx +4 -3
- package/src/aldehyde/layout4/header.tsx +6 -4
- package/src/aldehyde/layout4/page.tsx +8 -5
- package/src/aldehyde/layout4/sider.tsx +4 -3
- package/src/aldehyde/layout5/header.tsx +4 -2
- package/src/aldehyde/layout5/page.tsx +8 -5
- package/src/aldehyde/layout5/sider.tsx +4 -3
- package/src/aldehyde/list/card-list/card-list-item.tsx +1 -1
- package/src/aldehyde/lowcode-components/bar-chart/index.tsx +12 -2
- package/src/aldehyde/lowcode-components/base-map/index.tsx +12 -2
- package/src/aldehyde/lowcode-components/capsule-bar-chart/index.tsx +12 -2
- package/src/aldehyde/lowcode-components/circular-progress-chart/index.tsx +12 -2
- package/src/aldehyde/lowcode-components/column-3d-chart/index.tsx +12 -2
- package/src/aldehyde/lowcode-components/column-chart/index.tsx +12 -2
- package/src/aldehyde/lowcode-components/effectScatter-map/index.tsx +12 -2
- package/src/aldehyde/lowcode-components/effectScatter-map-3d/index.tsx +12 -2
- package/src/aldehyde/lowcode-components/gauge-chart/index.tsx +12 -2
- package/src/aldehyde/lowcode-components/line-bar-chart/index.tsx +12 -2
- package/src/aldehyde/lowcode-components/line-chart/index.tsx +12 -2
- package/src/aldehyde/lowcode-components/liquid-chart/index.tsx +12 -2
- package/src/aldehyde/lowcode-components/lowcode-view/component/screen-fit/index.less +2 -1
- package/src/aldehyde/lowcode-components/lowcode-view/component/screen-fit/index.tsx +3 -1
- package/src/aldehyde/lowcode-components/lowcode-view/index.less +7 -0
- package/src/aldehyde/lowcode-components/lowcode-view/index.tsx +3 -1
- package/src/aldehyde/lowcode-components/pie-chart/index.tsx +12 -2
- package/src/aldehyde/lowcode-components/progress-chart/index.tsx +12 -2
- package/src/aldehyde/routable/ltmpl-route.tsx +13 -5
- package/src/aldehyde/routable/splitview-ltmpl-route.tsx +12 -3
- package/src/aldehyde/table/act-table.tsx +44 -13
- package/src/aldehyde/table/column/column-builder.tsx +13 -20
- package/src/aldehyde/table/index.css +29 -2
- package/src/aldehyde/table/page-config-button.tsx +199 -0
- package/src/aldehyde/table/pagination.tsx +8 -7
- package/src/aldehyde/table/query-table.tsx +1 -0
- package/src/aldehyde/tmpl/hcservice-v3.tsx +136 -0
- package/src/aldehyde/tmpl/interface.tsx +22 -0
- package/src/aldehyde/units/index.tsx +34 -3
- package/src/aldehyde/welcome/HCWelcome.js +10 -0
- package/src/aldehyde/welcome/components/menu-card.less +1 -0
- package/src/aldehyde/welcome/components/user-menus.less +193 -0
- 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
|
@@ -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
|
-
|
|
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(() =>
|
|
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=
|
|
27
|
+
type={buttonType}
|
|
27
28
|
icon={<AlignCenterOutlined />}
|
|
28
29
|
onClick={() =>
|
|
29
|
-
|
|
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=
|
|
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
|
-
|
|
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
|
|
211
|
+
const tConfig = await Units.getThemeConfig();
|
|
212
212
|
const menuConfig = await getMenuConfig();
|
|
213
|
-
setSystemName(
|
|
214
|
-
setSystemLogo(
|
|
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
|
|
37
|
+
const tConfig = await Units.getThemeConfig();
|
|
36
38
|
const menuConfig = await getMenuConfig("v3");
|
|
37
|
-
setSystemName(
|
|
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>
|