增加面包屑导航组件
parent
0cc95ced95
commit
12cacb9db4
|
@ -0,0 +1,89 @@
|
|||
/**
|
||||
* {}
|
||||
* @author yutent<yutent.io@gmail.com>
|
||||
* @date 2023/04/10 16:12:33
|
||||
*/
|
||||
|
||||
import { css, html, Component, bind, styleMap } from '@bd/core'
|
||||
|
||||
const last = Symbol('last')
|
||||
|
||||
class Breadcrumb extends Component {
|
||||
static styles = [
|
||||
css`
|
||||
:host {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
height: 32px;
|
||||
font-size: 14px;
|
||||
}
|
||||
`
|
||||
]
|
||||
|
||||
#updateChildrenStat(checkAll) {
|
||||
let list = Array.from(this.children)
|
||||
list.forEach((it, i) => {
|
||||
if (it.tagName === 'WC-BREADCRUMB-ITEM') {
|
||||
if (list.length === i + 1) {
|
||||
it.last = true
|
||||
}
|
||||
} else {
|
||||
it.remove()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
mounted() {
|
||||
this.#updateChildrenStat()
|
||||
}
|
||||
}
|
||||
|
||||
class Item extends Component {
|
||||
static props = {
|
||||
path: '',
|
||||
separator: '/'
|
||||
}
|
||||
|
||||
static styles = [
|
||||
css`
|
||||
:host,
|
||||
.breadcrumb-item {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
height: 32px;
|
||||
font-size: 14px;
|
||||
}
|
||||
.separator {
|
||||
margin: 0 8px;
|
||||
user-select: none;
|
||||
}
|
||||
`
|
||||
]
|
||||
|
||||
get last() {
|
||||
return this[last] || false
|
||||
}
|
||||
|
||||
set last(val) {
|
||||
this[last] = !!val
|
||||
this.$requestUpdate()
|
||||
}
|
||||
|
||||
render() {
|
||||
return html`
|
||||
<label class="breadcrumb-item">
|
||||
<slot></slot>
|
||||
<span
|
||||
class="separator"
|
||||
style=${styleMap({ display: this[last] ? 'none' : '' })}
|
||||
>
|
||||
<slot name="separator"> ${this.separator || '/'} </slot>
|
||||
</span>
|
||||
</label>
|
||||
`
|
||||
}
|
||||
}
|
||||
|
||||
Breadcrumb.reg('breadcrumb')
|
||||
Item.reg('breadcrumb-item')
|
Loading…
Reference in New Issue