import { html, css, Component, classMap } from 'wkit' import { watch } from 'wkitd' import fetch from '/lib/fetch.js' class Header extends Component { static styles = css` ::selection { background: var(--color-plain-a); } .common-header { flex-shrink: 0; display: flex; flex-direction: column; justify-content: space-between; align-items: center; width: 100%; height: 240px; background: var(--color-red-1); color: #fff; .wrapper { display: flex; width: 1024px; justify-content: space-between; align-items: center; } .navibar { height: 36px; margin-top: 24px; .logo { font-weight: bold; font-size: 26px; & img { display: block; height: 36px; } } .navi { display: flex; align-items: center; font-size: 16px; & router-link { margin: 0 16px; padding: 3px 6px; border-radius: 4px; transition: background 0.2s ease-in-out; &:hover, &.active { background: rgba(255, 255, 255, 0.3); } } } } .banner { width: 640px; text-align: center; } .search { display: none; width: 520px; color: #fff; --bg-color: rgba(0, 0, 0, 0.3); } &.search-show { height: 320px; .search { display: inline-block; --wc-input-border-color: none; } } &::after { display: flex; justify-content: center; align-items: center; width: 100%; height: 48px; font-size: 16px; background: rgba(0, 0, 0, 0.1); content: '免费、快速、开放的 CDN 服务'; } } @media screen and (max-width: 1024px) { .common-header { .navibar { width: 100%; padding: 0 32px; } .wrapper { width: 100%; } } } ` #search(ev) { let id = this.$store.searchInput if (id) { fetch('/package/search/' + encodeURIComponent(id)) .then(r => { let dict = { versions: [], id } let last = null for (let it of r.data) { let tmp = it.split('/') let v = tmp.shift() let n = tmp.join('/') if (last === v) { dict[last].push(n) } else { last = v dict.versions.push(last) dict[last] = [n] } } dict.version = last this.$store.result = dict }) .catch(err => { this.$store.result = { version: '', versions: [], id: '' } }) } else { this.$store.result = { version: '', versions: [], id: '' } } } #handleInput(ev) { this.$store.searchInput = ev.target.value } mounted() { watch('$store.searchInput', val => { this.#search() }) watch('$route', route => { if (route.path === '/' && !route.query.name) { this.$store.searchInput = '' } }) } render() { return html`
` } } Header.reg('header')