增加面包屑导航组件
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