tree-table-vue-extend
Version:
A table (with tree-grid) component for Vue.js 2.0 and add some features based on team's own need. (Its style extends iView)
278 lines (231 loc) • 4.74 kB
text/less
@import "./font/font-awesome.min.css";
// text
@prefixCls: zk-table;
@css-prefix: ivu-;
// color
@black: #1F2D3D;
@white: #ffffff;
@border: #e9eaec;
@hoverRow: #ebf7ff;
@backgroundRow: #f8f8f9;
@primary-color: #2d8cf0;
@border-color-base: #dcdee2; // outside
// Z-index
@zindex-spin: 8;
@zindex-spin-fullscreen : 2010;
.@{prefixCls} {
position: relative;
width: 100%;
box-sizing: border-box;
background-color: @white;
border: 1px solid @border;
font-size: 12px;
line-height: 26px;
color: @black;
}
.@{prefixCls}__header-wrapper,
.@{prefixCls}__footer-wrapper {
overflow: hidden;
}
.@{prefixCls}__body-wrapper {
overflow: auto;
}
.@{prefixCls}__header,
.@{prefixCls}__body,
.@{prefixCls}__footer {
width: 100%;
table-layout: fixed;
border-collapse: collapse;
border-spacing: 0;
}
.@{prefixCls}__header-row {
height: 40px;
box-sizing: border-box;
background-color: @backgroundRow;
border-bottom: 1px solid @border;
}
.@{prefixCls}__footer-row {
height: 40px;
box-sizing: border-box;
background-color: @white;
border-top: 1px solid @border;
}
.@{prefixCls}__body-row {
height: 48px;
box-sizing: border-box;
&:not(:first-of-type) {
border-top: 1px solid @border;
}
}
.@{prefixCls}__header-cell,
.@{prefixCls}__body-cell,
.@{prefixCls}__footer-cell {
box-sizing: border-box;
text-align: left;
vertical-align: middle;
word-break: break-all;
overflow: hidden;
}
.@{prefixCls}__header-cell {
font-weight: bold;
}
.@{prefixCls}__cell-inner {
padding: 6px 12px;
}
.@{prefixCls}--firstProp-header-inner {
padding-left: 32px;
}
.@{prefixCls}--empty-row {
height: 80px;
}
.@{prefixCls}--empty-content {
text-align: center;
}
.@{prefixCls}--center-cell {
text-align: center;
}
.@{prefixCls}--right-cell {
text-align: right;
}
.@{prefixCls}--stripe-row {
background-color: @backgroundRow;
}
.@{prefixCls}--row-hover {
background-color: @hoverRow;
}
.@{prefixCls}--border-cell {
&:not(:last-of-type) {
border-right: 1px solid @border;
}
}
.@{prefixCls}--tree-icon {
margin-right: 6px;
cursor: pointer;
}
.@{prefixCls}--expand-inner {
text-align: center;
cursor: pointer;
transition: transform .2s ease-in-out;
}
.@{prefixCls}--expanded-inner {
transform: rotate(90deg);
}
.@{prefixCls}--expand-content {
padding: 20px;
}
// Size
.size(@width; @height) {
width: @width;
height: @height;
}
.square(@size) {
.size(@size; @size);
}
// 排序
.zk-table__sort {
display: inline-block;
width: 14px;
height: 16px;
margin-left: 5px;
vertical-align: middle;
overflow: hidden;
cursor: pointer;
position: relative;
i {
display: block;
overflow: hidden;
color: #c5c8ce;
transition: color .2s ease-in-out;
font-size: 16px;
}
.fa-fix-up {
height: 8px;
line-height: 15px;
}
.fa-fix-down {
height: 8px;
line-height: 2px;
}
.fa-color-balck {
color: black;
}
.fa-sort-enabled {
color: black;
}
}
// Spin 样式
@spin-prefix-cls: ~"@{css-prefix}spin";
@spin-dot-size-small: 12px;
@spin-dot-size: 20px;
@spin-dot-size-large: 32px;
.@{spin-prefix-cls} {
color: @primary-color;
vertical-align: middle;
text-align: center;
&-dot {
position: relative;
display: block;
border-radius: 50%;
background-color: @primary-color;
.square(@spin-dot-size);
animation: ani-spin-bounce 1s 0s ease-in-out infinite;
}
&-large &-dot {
.square(@spin-dot-size-large);
}
&-small &-dot {
.square(@spin-dot-size-small);
}
&-fix {
position: absolute;
top: 0;
left: 0;
z-index: @zindex-spin;
.square(100%);
background-color: rgba(255,255,255,.9);
}
&-fullscreen{
z-index: @zindex-spin-fullscreen;
&-wrapper{
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
}
}
&-fix &-main {
position: absolute;
top: 50%;
left: 50%;
-ms-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
}
&-fix &-dot {
display: inline-block;
}
&-text,
&-show-text &-dot {
display: none;
}
&-show-text &-text {
display: block;
}
}
// use in Table loading, Table right border is not included in .ivu-table-wrapper, so fix it
.@{prefixCls}__body-wrapper{
> .@{spin-prefix-cls}-fix{
border: 1px solid @border-color-base;
border-top: 0;
border-left: 0;
}
}
@keyframes ani-spin-bounce {
0% {
transform: scale(0);
}
100% {
transform: scale(1);
opacity: 0;
}
}