cfel-base-components 2.5.52 → 2.5.54
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/demo/src/index.jsx +86 -15
- package/demo/src/index.module.less +23 -3
- package/package.json +1 -1
- package/src/.umi/core/helmet.ts +1 -1
- package/src/components/layout/index.scss +68 -78
- package/src/components/layout/index.tsx +32 -4
- package/src/components/layout-console/index-console.scss +90 -46
- package/src/components/layout-console/index.tsx +134 -165
- package/src/global.d.ts +0 -2
- package/demo/src/index.scss +0 -0
- package/src/components/layout-copy/index.scss +0 -169
- package/src/components/layout-copy/index.tsx +0 -218
- package/src/components/layout-copy/user-card/index.scss +0 -180
- package/src/components/layout-copy/user-card/index.tsx +0 -162
|
@@ -64,7 +64,7 @@ export default function LiosLayout(props: LiosLayoutlProps) {
|
|
|
64
64
|
isHideHeader,
|
|
65
65
|
onCollapse,
|
|
66
66
|
type,
|
|
67
|
-
umiHistory
|
|
67
|
+
umiHistory,
|
|
68
68
|
} = props
|
|
69
69
|
|
|
70
70
|
const findKeyPath = (pathname: string) => {
|
|
@@ -88,9 +88,7 @@ export default function LiosLayout(props: LiosLayoutlProps) {
|
|
|
88
88
|
}
|
|
89
89
|
|
|
90
90
|
// 初始化选中菜单
|
|
91
|
-
const [selectKey, setSelectKey] = useState<any>(
|
|
92
|
-
findKeyPath('/' + location.pathname.split('/')[2])
|
|
93
|
-
)
|
|
91
|
+
const [selectKey, setSelectKey] = useState<any>(findKeyPath('/' + location.pathname.split('/')[2]))
|
|
94
92
|
|
|
95
93
|
const [infoOpen, setInfoOpen] = useState<string | null>(null)
|
|
96
94
|
|
|
@@ -135,7 +133,7 @@ export default function LiosLayout(props: LiosLayoutlProps) {
|
|
|
135
133
|
//在这里找到当前菜单的上层目录
|
|
136
134
|
const paMenu = findParentMenu(menuList, '/' + location.pathname.split('/')[2])
|
|
137
135
|
//去重
|
|
138
|
-
const set = new Set(paMenu.map(item => item.key))
|
|
136
|
+
const set = new Set(paMenu.map((item) => item.key))
|
|
139
137
|
openKeys.forEach((element: string) => {
|
|
140
138
|
set.add(element)
|
|
141
139
|
})
|
|
@@ -148,11 +146,29 @@ export default function LiosLayout(props: LiosLayoutlProps) {
|
|
|
148
146
|
account: false,
|
|
149
147
|
id: false,
|
|
150
148
|
tenantName: false,
|
|
151
|
-
tenantId: false
|
|
149
|
+
tenantId: false,
|
|
152
150
|
})
|
|
153
151
|
|
|
154
|
-
const onOpenChange: MenuProps['onOpenChange'] = keys => {
|
|
155
|
-
|
|
152
|
+
const onOpenChange: MenuProps['onOpenChange'] = (keys) => {
|
|
153
|
+
// Find the last opened key
|
|
154
|
+
const latestOpenKey = keys.find((key) => openKeys.indexOf(key) === -1)
|
|
155
|
+
|
|
156
|
+
if (latestOpenKey) {
|
|
157
|
+
// If opening a new key
|
|
158
|
+
const rootSubmenuKeys = menuList.map((item) => item.key)
|
|
159
|
+
|
|
160
|
+
if (rootSubmenuKeys.indexOf(latestOpenKey) === -1) {
|
|
161
|
+
// If it's a third level menu, only keep its parent menu open
|
|
162
|
+
const parentKey = keys.find((key) => rootSubmenuKeys.includes(key))
|
|
163
|
+
setOpenKeys(parentKey ? [parentKey, latestOpenKey] : [latestOpenKey])
|
|
164
|
+
} else {
|
|
165
|
+
// If it's a second level menu, only keep it open
|
|
166
|
+
setOpenKeys([latestOpenKey])
|
|
167
|
+
}
|
|
168
|
+
} else {
|
|
169
|
+
// If closing a menu
|
|
170
|
+
setOpenKeys(keys)
|
|
171
|
+
}
|
|
156
172
|
}
|
|
157
173
|
|
|
158
174
|
const copyTextToClipboard = async (text: string, key: string) => {
|
|
@@ -165,7 +181,7 @@ export default function LiosLayout(props: LiosLayoutlProps) {
|
|
|
165
181
|
// 菜单动画
|
|
166
182
|
const collapseNode = () => {
|
|
167
183
|
return {
|
|
168
|
-
height: 0
|
|
184
|
+
height: 0,
|
|
169
185
|
}
|
|
170
186
|
}
|
|
171
187
|
const expandNode = (node: any) => {
|
|
@@ -179,26 +195,26 @@ export default function LiosLayout(props: LiosLayoutlProps) {
|
|
|
179
195
|
onEnterStart: collapseNode,
|
|
180
196
|
onEnterActive: expandNode,
|
|
181
197
|
onLeaveStart: expandNode,
|
|
182
|
-
onLeaveActive: collapseNode
|
|
198
|
+
onLeaveActive: collapseNode,
|
|
183
199
|
}
|
|
184
200
|
|
|
185
201
|
const verticalMotion = {
|
|
186
202
|
motionName: 'rc-menu-open-zoom',
|
|
187
203
|
motionAppear: true,
|
|
188
204
|
motionEnter: true,
|
|
189
|
-
motionLeave: true
|
|
205
|
+
motionLeave: true,
|
|
190
206
|
}
|
|
191
207
|
|
|
192
208
|
return (
|
|
193
|
-
<Layout className=
|
|
209
|
+
<Layout className="layout-warps-console">
|
|
194
210
|
{Array.isArray(menuList) && menuList.length > 0 && (
|
|
195
211
|
<Sider
|
|
196
|
-
className=
|
|
212
|
+
className="layout-side-console"
|
|
197
213
|
collapsible
|
|
198
214
|
trigger={null}
|
|
199
215
|
collapsed={collapsed}
|
|
200
216
|
width={260}
|
|
201
|
-
onCollapse={value => {
|
|
217
|
+
onCollapse={(value) => {
|
|
202
218
|
if (onCollapse) {
|
|
203
219
|
onCollapse(value)
|
|
204
220
|
}
|
|
@@ -206,12 +222,10 @@ export default function LiosLayout(props: LiosLayoutlProps) {
|
|
|
206
222
|
setCollapsed(value)
|
|
207
223
|
}}
|
|
208
224
|
>
|
|
209
|
-
<div className=
|
|
225
|
+
<div className="layout-side-mask1-console"></div>
|
|
226
|
+
<div className="layout-side-mask2-console"></div>
|
|
210
227
|
|
|
211
|
-
<div
|
|
212
|
-
className='header-logo-console'
|
|
213
|
-
style={{ justifyContent: collapsed ? 'center' : '', paddingLeft: collapsed ? '0' : '' }}
|
|
214
|
-
>
|
|
228
|
+
<div className="header-logo-console" style={{ justifyContent: collapsed ? 'center' : '', paddingLeft: collapsed ? '0' : '' }}>
|
|
215
229
|
<div
|
|
216
230
|
onClick={() => {
|
|
217
231
|
window.open('/home')
|
|
@@ -222,23 +236,24 @@ export default function LiosLayout(props: LiosLayoutlProps) {
|
|
|
222
236
|
{/* {collapsed && <img className={`logo-base sub-logo`} src={logo || subLogoUrl} />} */}
|
|
223
237
|
</div>
|
|
224
238
|
|
|
225
|
-
{
|
|
239
|
+
{!collapsed && (
|
|
226
240
|
<div
|
|
227
|
-
className=
|
|
241
|
+
className="trigger-console"
|
|
228
242
|
onClick={() => {
|
|
229
243
|
setCollapsed(true)
|
|
230
244
|
}}
|
|
231
245
|
>
|
|
232
246
|
<Arrow collapsed={true} type={type} />
|
|
233
247
|
</div>
|
|
234
|
-
)}
|
|
248
|
+
)}
|
|
235
249
|
</div>
|
|
236
250
|
|
|
237
251
|
{collapsed && (
|
|
238
252
|
<div style={{ width: '100%', display: 'flex', justifyContent: 'center' }}>
|
|
239
253
|
<div
|
|
240
|
-
className=
|
|
254
|
+
className="close-trigger-console"
|
|
241
255
|
onClick={() => {
|
|
256
|
+
localStorage.setItem('layout_collapsed', 'false')
|
|
242
257
|
setCollapsed(false)
|
|
243
258
|
}}
|
|
244
259
|
>
|
|
@@ -250,19 +265,12 @@ export default function LiosLayout(props: LiosLayoutlProps) {
|
|
|
250
265
|
<div style={{ height: 24 }}></div>
|
|
251
266
|
|
|
252
267
|
<div style={{ width: '100%', padding: '0 16px' }}>
|
|
253
|
-
<Search
|
|
254
|
-
menuList={menuList}
|
|
255
|
-
collapsed={collapsed}
|
|
256
|
-
type={type || ''}
|
|
257
|
-
umiHistory={umiHistory}
|
|
258
|
-
setSelectKey={setSelectKey}
|
|
259
|
-
findKeyPath={findKeyPath}
|
|
260
|
-
/>
|
|
268
|
+
<Search menuList={menuList} collapsed={collapsed} type={type || ''} umiHistory={umiHistory} setSelectKey={setSelectKey} findKeyPath={findKeyPath} />
|
|
261
269
|
</div>
|
|
262
270
|
|
|
263
271
|
{!collapsed && <div style={{ height: 12 }}></div>}
|
|
264
272
|
|
|
265
|
-
<div className=
|
|
273
|
+
<div className="layout-menu-console">
|
|
266
274
|
<RcMenu
|
|
267
275
|
mode={collapsed ? 'vertical' : 'inline'}
|
|
268
276
|
className={`menu-console${collapsed ? '-collapsed' : ''}`}
|
|
@@ -276,7 +284,7 @@ export default function LiosLayout(props: LiosLayoutlProps) {
|
|
|
276
284
|
onMenuClick(item)
|
|
277
285
|
}
|
|
278
286
|
}}
|
|
279
|
-
triggerSubMenuAction=
|
|
287
|
+
triggerSubMenuAction="hover"
|
|
280
288
|
>
|
|
281
289
|
{menuList.map((item: any) => {
|
|
282
290
|
const isSelected = selectKey.includes(item.key)
|
|
@@ -285,19 +293,32 @@ export default function LiosLayout(props: LiosLayoutlProps) {
|
|
|
285
293
|
if (isSelected) {
|
|
286
294
|
classNames += ' submenu-selected'
|
|
287
295
|
}
|
|
296
|
+
if (collapsed) {
|
|
297
|
+
return (
|
|
298
|
+
<Popover placement="right" arrow={false} content={<div>123</div>} trigger="hover">
|
|
299
|
+
<SubMenu
|
|
300
|
+
key={item.key}
|
|
301
|
+
className="menu-item-content"
|
|
302
|
+
title={
|
|
303
|
+
<div className="sub-list">
|
|
304
|
+
<div className="menu-item-inner">
|
|
305
|
+
<span className={`menu-item-icon ${isSelected ? 'submenu-selected' : ''}`}>{item.icon}</span>
|
|
306
|
+
{!collapsed && <span className={classNames}>{item.label}</span>}
|
|
307
|
+
</div>
|
|
308
|
+
</div>
|
|
309
|
+
}
|
|
310
|
+
></SubMenu>
|
|
311
|
+
</Popover>
|
|
312
|
+
)
|
|
313
|
+
}
|
|
288
314
|
return (
|
|
289
315
|
<SubMenu
|
|
290
|
-
popupClassName='rc-menu-submenu-popup'
|
|
291
316
|
key={item.key}
|
|
292
|
-
className=
|
|
317
|
+
className="menu-item-content"
|
|
293
318
|
title={
|
|
294
|
-
<div className=
|
|
295
|
-
<div className=
|
|
296
|
-
<span
|
|
297
|
-
className={`menu-item-icon ${isSelected ? 'submenu-selected' : ''}`}
|
|
298
|
-
>
|
|
299
|
-
{item.icon}
|
|
300
|
-
</span>
|
|
319
|
+
<div className="sub-list">
|
|
320
|
+
<div className="menu-item-inner">
|
|
321
|
+
<span className={`menu-item-icon ${isSelected ? 'submenu-selected' : ''}`}>{item.icon}</span>
|
|
301
322
|
{!collapsed && <span className={classNames}>{item.label}</span>}
|
|
302
323
|
</div>
|
|
303
324
|
</div>
|
|
@@ -314,20 +335,9 @@ export default function LiosLayout(props: LiosLayoutlProps) {
|
|
|
314
335
|
if (child.children) {
|
|
315
336
|
return (
|
|
316
337
|
<SubMenu
|
|
317
|
-
|
|
318
|
-
className='menu-item-content sub-li'
|
|
338
|
+
className="menu-item-content sub-li"
|
|
319
339
|
key={child.key}
|
|
320
|
-
title={
|
|
321
|
-
<div className='sub-list'>
|
|
322
|
-
{!collapsed && (
|
|
323
|
-
<span
|
|
324
|
-
className={`menu-item-label ${isSelected ? 'submenu-selected' : ''}`}
|
|
325
|
-
>
|
|
326
|
-
{child.label}
|
|
327
|
-
</span>
|
|
328
|
-
)}
|
|
329
|
-
</div>
|
|
330
|
-
}
|
|
340
|
+
title={<div className="sub-list">{!collapsed && <span className={`menu-item-label ${isSelected ? 'submenu-selected' : ''}`}>{child.label}</span>}</div>}
|
|
331
341
|
>
|
|
332
342
|
{child.children.map((grandChild: any) => {
|
|
333
343
|
const isSelected = selectKey.includes(grandChild.key)
|
|
@@ -338,16 +348,8 @@ export default function LiosLayout(props: LiosLayoutlProps) {
|
|
|
338
348
|
}
|
|
339
349
|
}
|
|
340
350
|
return (
|
|
341
|
-
<MenuItem key={grandChild.key} className=
|
|
342
|
-
<div className=
|
|
343
|
-
{!collapsed && (
|
|
344
|
-
<span
|
|
345
|
-
className={`menu-item-label ${isSelected ? 'submenu-selected' : ''}`}
|
|
346
|
-
>
|
|
347
|
-
{grandChild.label}
|
|
348
|
-
</span>
|
|
349
|
-
)}
|
|
350
|
-
</div>
|
|
351
|
+
<MenuItem key={grandChild.key} className="grand-li">
|
|
352
|
+
<div className="menu-item-content">{!collapsed && <span className={`menu-item-label ${isSelected ? 'submenu-selected' : ''}`}>{grandChild.label}</span>}</div>
|
|
351
353
|
</MenuItem>
|
|
352
354
|
)
|
|
353
355
|
})}
|
|
@@ -355,16 +357,8 @@ export default function LiosLayout(props: LiosLayoutlProps) {
|
|
|
355
357
|
)
|
|
356
358
|
}
|
|
357
359
|
return (
|
|
358
|
-
<MenuItem key={child.key} className=
|
|
359
|
-
<div className=
|
|
360
|
-
{!collapsed && (
|
|
361
|
-
<span
|
|
362
|
-
className={`menu-item-label ${isSelected ? 'submenu-selected' : ''}`}
|
|
363
|
-
>
|
|
364
|
-
{child.label}
|
|
365
|
-
</span>
|
|
366
|
-
)}
|
|
367
|
-
</div>
|
|
360
|
+
<MenuItem key={child.key} className="sub-li">
|
|
361
|
+
<div className="menu-item-content">{!collapsed && <span className={`menu-item-label ${isSelected ? 'submenu-selected' : ''}`}>{child.label}</span>}</div>
|
|
368
362
|
</MenuItem>
|
|
369
363
|
)
|
|
370
364
|
})}
|
|
@@ -378,11 +372,9 @@ export default function LiosLayout(props: LiosLayoutlProps) {
|
|
|
378
372
|
classNames += ' submenu-selected'
|
|
379
373
|
}
|
|
380
374
|
return (
|
|
381
|
-
<MenuItem key={item.key} className=
|
|
382
|
-
<div>
|
|
383
|
-
<span className={`menu-item-icon ${isSelected ? 'submenu-selected' : ''}`}>
|
|
384
|
-
{item.icon}
|
|
385
|
-
</span>
|
|
375
|
+
<MenuItem key={item.key} className="menu-item-content">
|
|
376
|
+
<div className="first-li">
|
|
377
|
+
<span className={`menu-item-icon ${isSelected ? 'submenu-selected' : ''}`}>{item.icon}</span>
|
|
386
378
|
{!collapsed && <span className={classNames}>{item.label}</span>}
|
|
387
379
|
</div>
|
|
388
380
|
</MenuItem>
|
|
@@ -394,21 +386,21 @@ export default function LiosLayout(props: LiosLayoutlProps) {
|
|
|
394
386
|
</Sider>
|
|
395
387
|
)}
|
|
396
388
|
|
|
397
|
-
<div className=
|
|
389
|
+
<div className="layout-main-console">
|
|
398
390
|
{!isHideHeader && (
|
|
399
|
-
<div className=
|
|
391
|
+
<div className="layout-header-console">
|
|
400
392
|
{appName && (
|
|
401
|
-
<div className=
|
|
393
|
+
<div className="app-name">
|
|
402
394
|
<strong>{appName}</strong>
|
|
403
395
|
</div>
|
|
404
396
|
)}
|
|
405
397
|
|
|
406
|
-
<div className=
|
|
398
|
+
<div className="layout-header-fill-console" />
|
|
407
399
|
|
|
408
|
-
<div className=
|
|
400
|
+
<div className="layout-header-actions-console">
|
|
409
401
|
{actions?.map((item, index) => {
|
|
410
402
|
return (
|
|
411
|
-
<div className=
|
|
403
|
+
<div className="actions-item" key={index}>
|
|
412
404
|
{item}
|
|
413
405
|
</div>
|
|
414
406
|
)
|
|
@@ -416,40 +408,33 @@ export default function LiosLayout(props: LiosLayoutlProps) {
|
|
|
416
408
|
</div>
|
|
417
409
|
|
|
418
410
|
<Popover
|
|
419
|
-
placement=
|
|
411
|
+
placement="bottom"
|
|
420
412
|
content={
|
|
421
|
-
<UserCard
|
|
422
|
-
myWalletInfo={myWalletInfo}
|
|
423
|
-
MyLoginInfo={MyLoginInfo}
|
|
424
|
-
amountInfo={amountInfo}
|
|
425
|
-
customAction={customAction}
|
|
426
|
-
isCopied={isCopied}
|
|
427
|
-
copyTextToClipboard={copyTextToClipboard}
|
|
428
|
-
/>
|
|
413
|
+
<UserCard myWalletInfo={myWalletInfo} MyLoginInfo={MyLoginInfo} amountInfo={amountInfo} customAction={customAction} isCopied={isCopied} copyTextToClipboard={copyTextToClipboard} />
|
|
429
414
|
}
|
|
430
415
|
arrow={false}
|
|
431
|
-
trigger=
|
|
432
|
-
onOpenChange={e => {
|
|
416
|
+
trigger="click"
|
|
417
|
+
onOpenChange={(e) => {
|
|
433
418
|
setInfoOpen(e ? 'up' : 'down')
|
|
434
419
|
if (!e) return
|
|
435
420
|
setIsCopied({
|
|
436
421
|
account: false,
|
|
437
422
|
id: false,
|
|
438
423
|
tenantName: false,
|
|
439
|
-
tenantId: false
|
|
424
|
+
tenantId: false,
|
|
440
425
|
})
|
|
441
426
|
if (myLoginInfoAction) {
|
|
442
427
|
myLoginInfoAction()
|
|
443
428
|
}
|
|
444
429
|
}}
|
|
445
430
|
>
|
|
446
|
-
<div className=
|
|
447
|
-
<img className=
|
|
448
|
-
<div className=
|
|
431
|
+
<div className="layout-header-user-console">
|
|
432
|
+
<img className="avatar" src={avatar} />
|
|
433
|
+
<div className="name">{name}</div>
|
|
449
434
|
<span
|
|
450
435
|
style={{
|
|
451
436
|
display: 'inline-block',
|
|
452
|
-
marginLeft: '4px'
|
|
437
|
+
marginLeft: '4px',
|
|
453
438
|
}}
|
|
454
439
|
className={`iconfont icon-zhankai ${infoOpen ? (infoOpen === 'up' ? 'up' : 'down') : ''}`}
|
|
455
440
|
></span>
|
|
@@ -457,7 +442,7 @@ export default function LiosLayout(props: LiosLayoutlProps) {
|
|
|
457
442
|
</Popover>
|
|
458
443
|
</div>
|
|
459
444
|
)}
|
|
460
|
-
<div className=
|
|
445
|
+
<div className="layout-content-console">{props.children}</div>
|
|
461
446
|
</div>
|
|
462
447
|
</Layout>
|
|
463
448
|
)
|
|
@@ -465,17 +450,10 @@ export default function LiosLayout(props: LiosLayoutlProps) {
|
|
|
465
450
|
|
|
466
451
|
function Arrow({ collapsed, type }: { collapsed?: boolean; type?: string }) {
|
|
467
452
|
return (
|
|
468
|
-
<svg
|
|
469
|
-
style={{ transform: !collapsed ? 'rotate(180deg)' : 'rotate(0deg)' }}
|
|
470
|
-
viewBox='0 0 1024 1024'
|
|
471
|
-
version='1.1'
|
|
472
|
-
xmlns='http://www.w3.org/2000/svg'
|
|
473
|
-
width='20'
|
|
474
|
-
height='20'
|
|
475
|
-
>
|
|
453
|
+
<svg style={{ transform: !collapsed ? 'rotate(180deg)' : 'rotate(0deg)' }} viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="20" height="20">
|
|
476
454
|
<path
|
|
477
|
-
fill=
|
|
478
|
-
d=
|
|
455
|
+
fill="#FFFFFF"
|
|
456
|
+
d="M564.6336 775.168a41.5744 41.5744 0 0 0-13.312-28.672l-230.4-234.4448 229.9904-234.1888a42.0864 42.0864 0 0 0-26.3168-73.0112 42.0864 42.0864 0 0 0-30.6176 11.264L231.0656 481.024a41.984 41.984 0 0 0-2.4576 59.5968l1.9968 2.048 263.7824 265.6256a41.984 41.984 0 0 0 70.2464-33.0752z m254.5152 0a41.472 41.472 0 0 0-13.312-28.672L575.488 512l229.9904-234.1376a41.984 41.984 0 1 0-56.9344-61.7984L485.632 480.9728a42.0864 42.0864 0 0 0-2.4064 59.6992l0.8704 0.9216 0.8704 0.8192 0.4096 0.4096 263.5776 265.4208a41.984 41.984 0 0 0 70.1952-33.0752z"
|
|
479
457
|
></path>
|
|
480
458
|
</svg>
|
|
481
459
|
)
|
|
@@ -502,10 +480,7 @@ function Search({ menuList, collapsed, type, umiHistory, setSelectKey, findKeyPa
|
|
|
502
480
|
|
|
503
481
|
useEffect(() => {
|
|
504
482
|
const handleKeyDown = (event: KeyboardEvent) => {
|
|
505
|
-
if (
|
|
506
|
-
(navigator.platform.toLowerCase().includes('mac') ? event.metaKey : event.ctrlKey) &&
|
|
507
|
-
event.key.toLowerCase() === 'k'
|
|
508
|
-
) {
|
|
483
|
+
if ((navigator.platform.toLowerCase().includes('mac') ? event.metaKey : event.ctrlKey) && event.key.toLowerCase() === 'k') {
|
|
509
484
|
event.preventDefault()
|
|
510
485
|
const searchInput = document.querySelector('#menu-input') as HTMLInputElement
|
|
511
486
|
if (searchInput) {
|
|
@@ -515,9 +490,20 @@ function Search({ menuList, collapsed, type, umiHistory, setSelectKey, findKeyPa
|
|
|
515
490
|
}
|
|
516
491
|
}
|
|
517
492
|
|
|
493
|
+
const handleClickOutside = (event: MouseEvent) => {
|
|
494
|
+
console.log(1)
|
|
495
|
+
const searchContainer = document.querySelector('.search-container')
|
|
496
|
+
if (searchContainer && !searchContainer.contains(event.target as Node)) {
|
|
497
|
+
setIsFocused(false)
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
|
|
518
501
|
document.addEventListener('keydown', handleKeyDown)
|
|
502
|
+
document.addEventListener('mousedown', handleClickOutside)
|
|
503
|
+
|
|
519
504
|
return () => {
|
|
520
505
|
document.removeEventListener('keydown', handleKeyDown)
|
|
506
|
+
document.removeEventListener('mousedown', handleClickOutside)
|
|
521
507
|
}
|
|
522
508
|
}, [])
|
|
523
509
|
|
|
@@ -544,7 +530,7 @@ function Search({ menuList, collapsed, type, umiHistory, setSelectKey, findKeyPa
|
|
|
544
530
|
search(menuList as Router[])
|
|
545
531
|
setSearchResult(searchResults)
|
|
546
532
|
function search(data: Router[]) {
|
|
547
|
-
data.forEach(item => {
|
|
533
|
+
data.forEach((item) => {
|
|
548
534
|
if (typeof item.label === 'string' && item.label.includes(value.toLocaleUpperCase())) {
|
|
549
535
|
searchResults.push(item)
|
|
550
536
|
}
|
|
@@ -558,7 +544,7 @@ function Search({ menuList, collapsed, type, umiHistory, setSelectKey, findKeyPa
|
|
|
558
544
|
const enter = (item: Router) => {
|
|
559
545
|
setIsFocused(false)
|
|
560
546
|
//如果搜索历史里面有这个item,就不再添加
|
|
561
|
-
if (searchHistory.findIndex(i => i.key === item.key) === -1) {
|
|
547
|
+
if (searchHistory.findIndex((i) => i.key === item.key) === -1) {
|
|
562
548
|
setSearchHistory([...searchHistory, item])
|
|
563
549
|
}
|
|
564
550
|
//如果是目录就找到目录下第一个菜单进入
|
|
@@ -585,65 +571,50 @@ function Search({ menuList, collapsed, type, umiHistory, setSelectKey, findKeyPa
|
|
|
585
571
|
}
|
|
586
572
|
|
|
587
573
|
const deleteHistory = (item: Router) => {
|
|
588
|
-
setSearchHistory(searchHistory.filter(i => i.key !== item.key))
|
|
574
|
+
setSearchHistory(searchHistory.filter((i) => i.key !== item.key))
|
|
589
575
|
}
|
|
590
576
|
return (
|
|
591
577
|
<>
|
|
592
578
|
{collapsed ? (
|
|
593
|
-
<div className=
|
|
594
|
-
<div className=
|
|
595
|
-
<svg
|
|
596
|
-
viewBox='0 0 1024 1024'
|
|
597
|
-
version='1.1'
|
|
598
|
-
xmlns='http://www.w3.org/2000/svg'
|
|
599
|
-
width='18'
|
|
600
|
-
height='18'
|
|
601
|
-
>
|
|
579
|
+
<div className="search-mobile-console">
|
|
580
|
+
<div className="search-icon">
|
|
581
|
+
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="18" height="18">
|
|
602
582
|
<path
|
|
603
|
-
fill=
|
|
604
|
-
d=
|
|
583
|
+
fill="#C3CAEF"
|
|
584
|
+
d="M962.048 907.776l-229.0176-229.0176a384.3072 384.3072 0 1 0-54.272 54.272l229.0176 229.0176a38.4 38.4 0 0 0 54.272-54.272zM436.1216 743.0656a306.944 306.944 0 1 1 306.944-306.944 307.3024 307.3024 0 0 1-306.944 306.944z"
|
|
605
585
|
></path>
|
|
606
586
|
</svg>
|
|
607
587
|
</div>
|
|
608
588
|
</div>
|
|
609
589
|
) : (
|
|
610
|
-
<div>
|
|
611
|
-
<div className=
|
|
612
|
-
<div className=
|
|
613
|
-
<img src=
|
|
590
|
+
<div className="search-container">
|
|
591
|
+
<div className="search-console">
|
|
592
|
+
<div className="search-bg-mask">
|
|
593
|
+
<img src="https://cfel-front.oss-cn-hangzhou.aliyuncs.com/logo/base-component/menu-search-bg-console.png" />
|
|
614
594
|
</div>
|
|
615
595
|
<input
|
|
616
|
-
autoComplete=
|
|
617
|
-
id=
|
|
596
|
+
autoComplete="off"
|
|
597
|
+
id="menu-input"
|
|
618
598
|
value={searchTerm}
|
|
619
|
-
onChange={e => handleSearch(e.target.value)}
|
|
620
|
-
className=
|
|
621
|
-
placeholder=
|
|
599
|
+
onChange={(e) => handleSearch(e.target.value)}
|
|
600
|
+
className="search-input"
|
|
601
|
+
placeholder="搜索菜单..."
|
|
622
602
|
onFocus={() => setIsFocused(true)}
|
|
623
|
-
onBlur={e => {
|
|
603
|
+
onBlur={(e) => {
|
|
624
604
|
if (!e.relatedTarget?.closest('.lists-console')) {
|
|
625
605
|
setIsFocused(false)
|
|
626
606
|
}
|
|
627
607
|
}}
|
|
628
608
|
/>
|
|
629
|
-
<div className=
|
|
630
|
-
<svg
|
|
631
|
-
viewBox='0 0 1024 1024'
|
|
632
|
-
version='1.1'
|
|
633
|
-
xmlns='http://www.w3.org/2000/svg'
|
|
634
|
-
width='18'
|
|
635
|
-
height='18'
|
|
636
|
-
>
|
|
609
|
+
<div className="search-icon">
|
|
610
|
+
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="18" height="18">
|
|
637
611
|
<path
|
|
638
|
-
fill=
|
|
639
|
-
d=
|
|
612
|
+
fill="#C3CAEF"
|
|
613
|
+
d="M962.048 907.776l-229.0176-229.0176a384.3072 384.3072 0 1 0-54.272 54.272l229.0176 229.0176a38.4 38.4 0 0 0 54.272-54.272zM436.1216 743.0656a306.944 306.944 0 1 1 306.944-306.944 307.3024 307.3024 0 0 1-306.944 306.944z"
|
|
640
614
|
></path>
|
|
641
615
|
</svg>
|
|
642
616
|
</div>
|
|
643
|
-
<div
|
|
644
|
-
className='search-command'
|
|
645
|
-
style={{ width: navigator.platform.toLowerCase().includes('mac') ? '' : '50px' }}
|
|
646
|
-
>
|
|
617
|
+
<div className="search-command" style={{ width: navigator.platform.toLowerCase().includes('mac') ? '' : '50px' }}>
|
|
647
618
|
{navigator.platform.toLowerCase().includes('mac') ? '⌘' : 'Ctrl+'}K
|
|
648
619
|
</div>
|
|
649
620
|
|
|
@@ -661,31 +632,29 @@ function Search({ menuList, collapsed, type, umiHistory, setSelectKey, findKeyPa
|
|
|
661
632
|
<List
|
|
662
633
|
tabIndex={-1}
|
|
663
634
|
split={false}
|
|
664
|
-
className=
|
|
665
|
-
size=
|
|
635
|
+
className="lists-console"
|
|
636
|
+
size="small"
|
|
666
637
|
bordered
|
|
667
638
|
dataSource={searchResult}
|
|
668
|
-
renderItem={item => (
|
|
669
|
-
<List.Item onClick={() => enter(item)}>{item.label}</List.Item>
|
|
670
|
-
)}
|
|
639
|
+
renderItem={(item) => <List.Item onClick={() => enter(item)}>{item.label}</List.Item>}
|
|
671
640
|
/>
|
|
672
641
|
) : (
|
|
673
642
|
<List
|
|
674
643
|
tabIndex={-1}
|
|
675
644
|
split={false}
|
|
676
|
-
className=
|
|
677
|
-
header=
|
|
678
|
-
size=
|
|
645
|
+
className="lists-console"
|
|
646
|
+
header="最近访问"
|
|
647
|
+
size="small"
|
|
679
648
|
bordered
|
|
680
649
|
dataSource={searchHistory}
|
|
681
|
-
renderItem={item => {
|
|
650
|
+
renderItem={(item) => {
|
|
682
651
|
return (
|
|
683
652
|
<div
|
|
684
653
|
className={'search-item'}
|
|
685
654
|
style={{
|
|
686
655
|
display: 'flex',
|
|
687
656
|
justifyContent: 'space-between',
|
|
688
|
-
alignItems: 'center'
|
|
657
|
+
alignItems: 'center',
|
|
689
658
|
}}
|
|
690
659
|
>
|
|
691
660
|
<List.Item onClick={() => enter(item)}>{item.label}</List.Item>
|
package/src/global.d.ts
CHANGED
package/demo/src/index.scss
DELETED
|
File without changes
|