mirror of
https://gitee.com/vant-contrib/vant.git
synced 2025-04-25 02:41:46 +08:00
refactor(TreeSelect): use Sidebar as nav (#4383)
This commit is contained in:
parent
ebf5a18eb9
commit
5b0feb58e8
@ -483,7 +483,7 @@
|
|||||||
|
|
||||||
// SidebarItem
|
// SidebarItem
|
||||||
@sidebar-font-size: @font-size-md;
|
@sidebar-font-size: @font-size-md;
|
||||||
@sidebar-line-height: 1.4;
|
@sidebar-line-height: 20px;
|
||||||
@sidebar-text-color: @text-color;
|
@sidebar-text-color: @text-color;
|
||||||
@sidebar-disabled-text-color: @gray;
|
@sidebar-disabled-text-color: @gray;
|
||||||
@sidebar-padding: 20px @padding-sm 20px @padding-xs;
|
@sidebar-padding: 20px @padding-sm 20px @padding-xs;
|
||||||
@ -648,10 +648,7 @@
|
|||||||
@tree-select-font-size: @font-size-md;
|
@tree-select-font-size: @font-size-md;
|
||||||
@tree-select-nav-background-color: @background-color-light;
|
@tree-select-nav-background-color: @background-color-light;
|
||||||
@tree-select-content-background-color: @white;
|
@tree-select-content-background-color: @white;
|
||||||
@tree-select-nav-item-padding: 0 @padding-xs 0 @padding-sm;
|
@tree-select-nav-item-padding: @padding-sm @padding-xs @padding-sm @padding-sm;
|
||||||
@tree-select-nav-item-active-border-color: @red;
|
|
||||||
@tree-select-nav-item-active-background-color: @white;
|
|
||||||
@tree-select-nav-item-disabled-color: @gray-dark;
|
|
||||||
@tree-select-item-height: 44px;
|
@tree-select-item-height: 44px;
|
||||||
@tree-select-item-active-color: @red;
|
@tree-select-item-active-color: @red;
|
||||||
@tree-select-item-disabled-color: @gray;
|
@tree-select-item-disabled-color: @gray;
|
||||||
|
@ -13,20 +13,7 @@
|
|||||||
-webkit-overflow-scrolling: touch;
|
-webkit-overflow-scrolling: touch;
|
||||||
|
|
||||||
&-item {
|
&-item {
|
||||||
position: relative;
|
|
||||||
padding: @tree-select-nav-item-padding;
|
padding: @tree-select-nav-item-padding;
|
||||||
line-height: @tree-select-item-height;
|
|
||||||
border-left: 3px solid transparent;
|
|
||||||
|
|
||||||
&--active {
|
|
||||||
font-weight: bold;
|
|
||||||
background-color: @tree-select-nav-item-active-background-color;
|
|
||||||
border-color: @tree-select-nav-item-active-border-color;
|
|
||||||
}
|
|
||||||
|
|
||||||
&--disabled {
|
|
||||||
color: @tree-select-nav-item-disabled-color;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -39,7 +26,7 @@
|
|||||||
|
|
||||||
&__item {
|
&__item {
|
||||||
position: relative;
|
position: relative;
|
||||||
padding-left: @padding-md;
|
padding: 0 32px 0 @padding-md;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
line-height: @tree-select-item-height;
|
line-height: @tree-select-item-height;
|
||||||
|
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
import { createNamespace, addUnit } from '../utils';
|
import { createNamespace, addUnit } from '../utils';
|
||||||
import { emit, inherit } from '../utils/functional';
|
import { emit, inherit } from '../utils/functional';
|
||||||
import Icon from '../icon';
|
import Icon from '../icon';
|
||||||
|
import Sidebar from '../sidebar';
|
||||||
|
import SidebarItem from '../sidebar-item';
|
||||||
|
|
||||||
// Types
|
// Types
|
||||||
import { CreateElement, RenderContext } from 'vue/types';
|
import { CreateElement, RenderContext } from 'vue/types';
|
||||||
@ -52,28 +54,12 @@ function TreeSelect(
|
|||||||
: activeId === id;
|
: activeId === id;
|
||||||
}
|
}
|
||||||
|
|
||||||
const Nav = items.map((item, index) => (
|
const Nav = items.map(item => (
|
||||||
<div
|
<SidebarItem
|
||||||
key={index}
|
title={item.text}
|
||||||
class={[
|
disabled={item.disabled}
|
||||||
'van-ellipsis',
|
class={bem('nav-item')}
|
||||||
bem('nav-item', {
|
/>
|
||||||
active: mainActiveIndex === index,
|
|
||||||
disabled: item.disabled
|
|
||||||
})
|
|
||||||
]}
|
|
||||||
onClick={() => {
|
|
||||||
if (!item.disabled) {
|
|
||||||
emit(ctx, 'click-nav', index);
|
|
||||||
emit(ctx, 'update:main-active-index', index);
|
|
||||||
|
|
||||||
// compatible for old usage, should be removed in next major version
|
|
||||||
emit(ctx, 'navclick', index);
|
|
||||||
}
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
{item.text}
|
|
||||||
</div>
|
|
||||||
));
|
));
|
||||||
|
|
||||||
function Content() {
|
function Content() {
|
||||||
@ -124,7 +110,19 @@ function TreeSelect(
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div class={bem()} style={{ height: addUnit(height) }} {...inherit(ctx)}>
|
<div class={bem()} style={{ height: addUnit(height) }} {...inherit(ctx)}>
|
||||||
<div class={bem('nav')}>{Nav}</div>
|
<Sidebar
|
||||||
|
class={bem('nav')}
|
||||||
|
activeKey={mainActiveIndex}
|
||||||
|
onChange={(index: number) => {
|
||||||
|
emit(ctx, 'click-nav', index);
|
||||||
|
emit(ctx, 'update:main-active-index', index);
|
||||||
|
|
||||||
|
// compatible for old usage, should be removed in next major version
|
||||||
|
emit(ctx, 'navclick', index);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{Nav}
|
||||||
|
</Sidebar>
|
||||||
<div class={bem('content')}>{Content()}</div>
|
<div class={bem('content')}>{Content()}</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
@ -4,11 +4,19 @@ exports[`renders demo correctly 1`] = `
|
|||||||
<div>
|
<div>
|
||||||
<div>
|
<div>
|
||||||
<div class="van-tree-select" style="height: 300px;">
|
<div class="van-tree-select" style="height: 300px;">
|
||||||
<div class="van-tree-select__nav">
|
<div class="van-sidebar van-tree-select__nav"><a class="van-sidebar-item van-sidebar-item--select van-tree-select__nav-item">
|
||||||
<div class="van-ellipsis van-tree-select__nav-item van-tree-select__nav-item--active">浙江</div>
|
<div class="van-sidebar-item__text">浙江
|
||||||
<div class="van-ellipsis van-tree-select__nav-item">江苏</div>
|
<!---->
|
||||||
<div class="van-ellipsis van-tree-select__nav-item van-tree-select__nav-item--disabled">福建</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
</a><a class="van-sidebar-item van-tree-select__nav-item">
|
||||||
|
<div class="van-sidebar-item__text">江苏
|
||||||
|
<!---->
|
||||||
|
</div>
|
||||||
|
</a><a class="van-sidebar-item van-sidebar-item--disabled van-tree-select__nav-item">
|
||||||
|
<div class="van-sidebar-item__text">福建
|
||||||
|
<!---->
|
||||||
|
</div>
|
||||||
|
</a></div>
|
||||||
<div class="van-tree-select__content">
|
<div class="van-tree-select__content">
|
||||||
<div class="van-ellipsis van-tree-select__item van-tree-select__item--active">杭州<i class="van-icon van-icon-checked van-tree-select__selected" style="font-size: 16px;">
|
<div class="van-ellipsis van-tree-select__item van-tree-select__item--active">杭州<i class="van-icon van-icon-checked van-tree-select__selected" style="font-size: 16px;">
|
||||||
<!----></i></div>
|
<!----></i></div>
|
||||||
@ -20,11 +28,19 @@ exports[`renders demo correctly 1`] = `
|
|||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<div class="van-tree-select" style="height: 300px;">
|
<div class="van-tree-select" style="height: 300px;">
|
||||||
<div class="van-tree-select__nav">
|
<div class="van-sidebar van-tree-select__nav"><a class="van-sidebar-item van-sidebar-item--select van-tree-select__nav-item">
|
||||||
<div class="van-ellipsis van-tree-select__nav-item van-tree-select__nav-item--active">浙江</div>
|
<div class="van-sidebar-item__text">浙江
|
||||||
<div class="van-ellipsis van-tree-select__nav-item">江苏</div>
|
<!---->
|
||||||
<div class="van-ellipsis van-tree-select__nav-item van-tree-select__nav-item--disabled">福建</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
</a><a class="van-sidebar-item van-tree-select__nav-item">
|
||||||
|
<div class="van-sidebar-item__text">江苏
|
||||||
|
<!---->
|
||||||
|
</div>
|
||||||
|
</a><a class="van-sidebar-item van-sidebar-item--disabled van-tree-select__nav-item">
|
||||||
|
<div class="van-sidebar-item__text">福建
|
||||||
|
<!---->
|
||||||
|
</div>
|
||||||
|
</a></div>
|
||||||
<div class="van-tree-select__content">
|
<div class="van-tree-select__content">
|
||||||
<div class="van-ellipsis van-tree-select__item van-tree-select__item--active">杭州<i class="van-icon van-icon-checked van-tree-select__selected" style="font-size: 16px;">
|
<div class="van-ellipsis van-tree-select__item van-tree-select__item--active">杭州<i class="van-icon van-icon-checked van-tree-select__selected" style="font-size: 16px;">
|
||||||
<!----></i></div>
|
<!----></i></div>
|
||||||
@ -37,10 +53,15 @@ exports[`renders demo correctly 1`] = `
|
|||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<div class="van-tree-select" style="height: 55vw;">
|
<div class="van-tree-select" style="height: 55vw;">
|
||||||
<div class="van-tree-select__nav">
|
<div class="van-sidebar van-tree-select__nav"><a class="van-sidebar-item van-sidebar-item--select van-tree-select__nav-item">
|
||||||
<div class="van-ellipsis van-tree-select__nav-item van-tree-select__nav-item--active">分组 1</div>
|
<div class="van-sidebar-item__text">分组 1
|
||||||
<div class="van-ellipsis van-tree-select__nav-item">分组 2</div>
|
<!---->
|
||||||
</div>
|
</div>
|
||||||
|
</a><a class="van-sidebar-item van-tree-select__nav-item">
|
||||||
|
<div class="van-sidebar-item__text">分组 2
|
||||||
|
<!---->
|
||||||
|
</div>
|
||||||
|
</a></div>
|
||||||
<div class="van-tree-select__content">
|
<div class="van-tree-select__content">
|
||||||
<div class="van-image"><img src="https://img.yzcdn.cn/vant/apple-1.jpg" class="van-image__img">
|
<div class="van-image"><img src="https://img.yzcdn.cn/vant/apple-1.jpg" class="van-image__img">
|
||||||
<div class="van-image__loading"><i class="van-icon van-icon-photo-o" style="font-size: 22px;">
|
<div class="van-image__loading"><i class="van-icon van-icon-photo-o" style="font-size: 22px;">
|
||||||
|
@ -2,23 +2,25 @@
|
|||||||
|
|
||||||
exports[`content slot 1`] = `
|
exports[`content slot 1`] = `
|
||||||
<div class="van-tree-select" style="height: 300px;">
|
<div class="van-tree-select" style="height: 300px;">
|
||||||
<div class="van-tree-select__nav">
|
<div class="van-sidebar van-tree-select__nav"><a class="van-sidebar-item van-sidebar-item--select van-tree-select__nav-item">
|
||||||
<div class="van-ellipsis van-tree-select__nav-item van-tree-select__nav-item--active">group1</div>
|
<div class="van-sidebar-item__text">group1
|
||||||
|
<!---->
|
||||||
</div>
|
</div>
|
||||||
|
</a></div>
|
||||||
<div class="van-tree-select__content">Custom Content</div>
|
<div class="van-tree-select__content">Custom Content</div>
|
||||||
</div>
|
</div>
|
||||||
`;
|
`;
|
||||||
|
|
||||||
exports[`empty list 1`] = `
|
exports[`empty list 1`] = `
|
||||||
<div class="van-tree-select" style="height: 300px;">
|
<div class="van-tree-select" style="height: 300px;">
|
||||||
<div class="van-tree-select__nav"></div>
|
<div class="van-sidebar van-tree-select__nav"></div>
|
||||||
<div class="van-tree-select__content"></div>
|
<div class="van-tree-select__content"></div>
|
||||||
</div>
|
</div>
|
||||||
`;
|
`;
|
||||||
|
|
||||||
exports[`height prop 1`] = `
|
exports[`height prop 1`] = `
|
||||||
<div class="van-tree-select" style="height: 100vh;">
|
<div class="van-tree-select" style="height: 100vh;">
|
||||||
<div class="van-tree-select__nav"></div>
|
<div class="van-sidebar van-tree-select__nav"></div>
|
||||||
<div class="van-tree-select__content"></div>
|
<div class="van-tree-select__content"></div>
|
||||||
</div>
|
</div>
|
||||||
`;
|
`;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user