Commit 12fd2dc5807a57c76a18aa415de7116569738147

Authored by anykno
Committed by GitHub
2 parents b3dbdba9 d6070b23

Merge branch '2.0' into table_render

examples/components/table.vue 0 → 100644
  1 +<template>
  2 + <Table width="550" border :columns="columns2" :data="data3"></Table>
  3 +</template>
  4 +<script>
  5 + export default {
  6 + name: 'etable',
  7 + data () {
  8 + return {
  9 + columns2: [
  10 + {
  11 + title: '姓名',
  12 + key: 'name',
  13 + width: 100,
  14 + fixed: 'left'
  15 + },
  16 + {
  17 + title: '年龄',
  18 + key: 'age',
  19 + width: 100
  20 + },
  21 + {
  22 + title: '省份',
  23 + key: 'province',
  24 + width: 100
  25 + },
  26 + {
  27 + title: '市区',
  28 + key: 'city',
  29 + width: 100
  30 + },
  31 + {
  32 + title: '地址',
  33 + key: 'address',
  34 + width: 200
  35 + },
  36 + {
  37 + title: '邮编',
  38 + key: 'zip',
  39 + width: 100
  40 + },
  41 + {
  42 + title: '操作',
  43 + key: 'action',
  44 + fixed: 'right',
  45 + width: 120,
  46 + render: (h, params) => {
  47 + return h('div', [
  48 + h('Button', {
  49 + props: {
  50 + type: 'text',
  51 + size: 'small'
  52 + }
  53 + }, '查看'),
  54 + h('Button', {
  55 + props: {
  56 + type: 'text',
  57 + size: 'small'
  58 + }
  59 + }, '编辑')
  60 + ]);
  61 + }
  62 + }
  63 + ],
  64 + data3: [
  65 + {
  66 + name: '王小明',
  67 + age: 18,
  68 + address: '北京市朝阳区芍药居',
  69 + province: '北京市',
  70 + city: '朝阳区',
  71 + zip: 100000
  72 + },
  73 + {
  74 + name: '张小刚',
  75 + age: 25,
  76 + address: '北京市海淀区西二旗',
  77 + province: '北京市',
  78 + city: '海淀区',
  79 + zip: 100000
  80 + },
  81 + {
  82 + name: '李小红',
  83 + age: 30,
  84 + address: '上海市浦东新区世纪大道',
  85 + province: '上海市',
  86 + city: '浦东新区',
  87 + zip: 100000
  88 + },
  89 + {
  90 + name: '周小伟',
  91 + age: 26,
  92 + address: '深圳市南山区深南大道',
  93 + province: '广东',
  94 + city: '南山区',
  95 + zip: 100000
  96 + }
  97 + ]
  98 + }
  99 + }
  100 + }
  101 +</script>
examples/routers/notice.vue
@@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
14 mounted () { 14 mounted () {
15 this.$Notice.config({ 15 this.$Notice.config({
16 top: 150, 16 top: 150,
17 - duration: 3 17 + duration: 30
18 }); 18 });
19 } 19 }
20 } 20 }
examples/routers/table.vue
1 <template> 1 <template>
2 - <div>  
3 - <Table border :columns="columns7" :data="data6"></Table>  
4 - <Button @click="handleAdd"> + 1</Button>  
5 - </div> 2 + <Table border :columns="columns7" :data="data6" @on-expand="expand"></Table>
6 </template> 3 </template>
7 <script> 4 <script>
8 - import abc from '../components/test.vue'; 5 + import etable from '../components/table.vue';
9 export default { 6 export default {
10 - components: { abc }, 7 + components: { etable },
11 data () { 8 data () {
12 return { 9 return {
13 - data1: 1,  
14 - self: this,  
15 columns7: [ 10 columns7: [
16 { 11 {
  12 + type: 'expand',
  13 + width: 50,
  14 + render: (h, params) => {
  15 +// return h(etable);
  16 + return h('div', params.row.name)
  17 + }
  18 + },
  19 + {
17 title: '姓名', 20 title: '姓名',
18 key: 'name', 21 key: 'name',
19 -// render (row, column, index) {  
20 -// return `<abc></abc>`;  
21 -// }  
22 - render: (h, row, column, index) => { 22 + render: (h, params) => {
23 return h('div', [ 23 return h('div', [
24 - h('Button',{  
25 - on: {  
26 - click: this.handleClick 24 + h('Icon', {
  25 + props: {
  26 + type: 'person'
27 } 27 }
28 - }, 'hello')  
29 - ]) 28 + }),
  29 + h('strong', params.row.name)
  30 + ]);
30 } 31 }
31 }, 32 },
32 { 33 {
33 title: '年龄', 34 title: '年龄',
34 - key: 'age' 35 + key: 'age',
  36 + sortable: true
35 }, 37 },
36 { 38 {
37 title: '地址', 39 title: '地址',
@@ -42,9 +44,35 @@ @@ -42,9 +44,35 @@
42 key: 'action', 44 key: 'action',
43 width: 150, 45 width: 150,
44 align: 'center', 46 align: 'center',
45 -// render (row, column, index) {  
46 -// return `<i-button type="primary" size="small" @click="show(${index})">查看</i-button> <i-button type="error" size="small" @click="remove(${index})">删除</i-button>`;  
47 -// } 47 + render: (h, params) => {
  48 + return h('div', [
  49 + h('Button', {
  50 + props: {
  51 + type: 'primary',
  52 + size: 'small'
  53 + },
  54 + style: {
  55 + marginRight: '5px'
  56 + },
  57 + on: {
  58 + click: () => {
  59 + this.show(params.index)
  60 + }
  61 + }
  62 + }, '查看'),
  63 + h('Button', {
  64 + props: {
  65 + type: 'error',
  66 + size: 'small'
  67 + },
  68 + on: {
  69 + click: () => {
  70 + this.remove(params.index)
  71 + }
  72 + }
  73 + }, '删除')
  74 + ]);
  75 + }
48 } 76 }
49 ], 77 ],
50 data6: [ 78 data6: [
@@ -61,7 +89,8 @@ @@ -61,7 +89,8 @@
61 { 89 {
62 name: '李小红', 90 name: '李小红',
63 age: 30, 91 age: 30,
64 - address: '上海市浦东新区世纪大道' 92 + address: '上海市浦东新区世纪大道',
  93 + _expanded: true
65 }, 94 },
66 { 95 {
67 name: '周小伟', 96 name: '周小伟',
@@ -71,11 +100,6 @@ @@ -71,11 +100,6 @@
71 ] 100 ]
72 } 101 }
73 }, 102 },
74 - computed: {  
75 - ttt () {  
76 - return this.data1 + 1;  
77 - }  
78 - },  
79 methods: { 103 methods: {
80 show (index) { 104 show (index) {
81 this.$Modal.info({ 105 this.$Modal.info({
@@ -86,11 +110,9 @@ @@ -86,11 +110,9 @@
86 remove (index) { 110 remove (index) {
87 this.data6.splice(index, 1); 111 this.data6.splice(index, 1);
88 }, 112 },
89 - handleAdd () {  
90 - this.data1++;  
91 - },  
92 - handleClick () {  
93 - this.$Message.info('111') 113 + expand (row, s) {
  114 +// console.log(row);
  115 +// console.log(s);
94 } 116 }
95 } 117 }
96 } 118 }
examples/routers/transfer.vue
@@ -178,7 +178,7 @@ @@ -178,7 +178,7 @@
178 setTimeout(function() { 178 setTimeout(function() {
179 console.log('--1'); 179 console.log('--1');
180 // _this.data1 = null; 180 // _this.data1 = null;
181 - _this.data1 = _this.getMockData1(); 181 +// _this.data1 = _this.getMockData1();
182 console.log('-fetch-', _this.data1); 182 console.log('-fetch-', _this.data1);
183 183
184 }, 1500); 184 }, 1500);
src/components/back-top/back-top.vue
@@ -67,7 +67,8 @@ @@ -67,7 +67,8 @@
67 this.backTop = window.pageYOffset >= this.height; 67 this.backTop = window.pageYOffset >= this.height;
68 }, 68 },
69 back () { 69 back () {
70 - scrollTop(window, document.body.scrollTop, 0, this.duration); 70 + const sTop = document.documentElement.scrollTop || document.body.scrollTop;
  71 + scrollTop(window, sTop, 0, this.duration);
71 this.$emit('on-click'); 72 this.$emit('on-click');
72 } 73 }
73 } 74 }
src/components/input/input.vue
@@ -37,6 +37,7 @@ @@ -37,6 +37,7 @@
37 :readonly="readonly" 37 :readonly="readonly"
38 :name="name" 38 :name="name"
39 :value="value" 39 :value="value"
  40 + :autofocus="autofocus"
40 @keyup.enter="handleEnter" 41 @keyup.enter="handleEnter"
41 @focus="handleFocus" 42 @focus="handleFocus"
42 @blur="handleBlur" 43 @blur="handleBlur"
src/components/select/select.vue
@@ -155,6 +155,8 @@ @@ -155,6 +155,8 @@
155 if (!this.model.length) { 155 if (!this.model.length) {
156 status = true; 156 status = true;
157 } 157 }
  158 + } else if( this.model === null){
  159 + status = true;
158 } 160 }
159 161
160 return status; 162 return status;
src/components/table/cell.vue
@@ -4,18 +4,25 @@ @@ -4,18 +4,25 @@
4 <template v-if="renderType === 'selection'"> 4 <template v-if="renderType === 'selection'">
5 <Checkbox :value="checked" @on-change="toggleSelect" :disabled="disabled"></Checkbox> 5 <Checkbox :value="checked" @on-change="toggleSelect" :disabled="disabled"></Checkbox>
6 </template> 6 </template>
  7 +
7 <template v-if="renderType === 'html'"><span v-html="row[column.key]"></span></template> 8 <template v-if="renderType === 'html'"><span v-html="row[column.key]"></span></template>
8 <template v-if="renderType === 'normal'"><span>{{row[column.key]}}</span></template> 9 <template v-if="renderType === 'normal'"><span>{{row[column.key]}}</span></template>
  10 + <template v-if="renderType === 'expand'">
  11 + <div :class="expandCls" @click="toggleExpand">
  12 + <Icon type="ios-arrow-right"></Icon>
  13 + </div>
  14 + </template>
9 </div> 15 </div>
10 </template> 16 </template>
11 <script> 17 <script>
12 import Vue from 'vue'; 18 import Vue from 'vue';
  19 + import Icon from '../icon/icon.vue';
13 import Checkbox from '../checkbox/checkbox.vue'; 20 import Checkbox from '../checkbox/checkbox.vue';
14 import { findComponentUpward } from '../../utils/assist'; 21 import { findComponentUpward } from '../../utils/assist';
15 22
16 export default { 23 export default {
17 name: 'TableCell', 24 name: 'TableCell',
18 - components: { Checkbox }, 25 + components: { Icon, Checkbox },
19 props: { 26 props: {
20 prefixCls: String, 27 prefixCls: String,
21 row: Object, 28 row: Object,
@@ -24,6 +31,7 @@ @@ -24,6 +31,7 @@
24 index: Number, // _index of data 31 index: Number, // _index of data
25 checked: Boolean, 32 checked: Boolean,
26 disabled: Boolean, 33 disabled: Boolean,
  34 + expanded: Boolean,
27 fixed: { 35 fixed: {
28 type: [Boolean, String], 36 type: [Boolean, String],
29 default: false 37 default: false
@@ -42,20 +50,30 @@ @@ -42,20 +50,30 @@
42 `${this.prefixCls}-cell`, 50 `${this.prefixCls}-cell`,
43 { 51 {
44 [`${this.prefixCls}-hidden`]: !this.fixed && this.column.fixed && (this.column.fixed === 'left' || this.column.fixed === 'right'), 52 [`${this.prefixCls}-hidden`]: !this.fixed && this.column.fixed && (this.column.fixed === 'left' || this.column.fixed === 'right'),
45 - [`${this.prefixCls}-cell-ellipsis`]: this.column.ellipsis || false 53 + [`${this.prefixCls}-cell-ellipsis`]: this.column.ellipsis || false,
  54 + [`${this.prefixCls}-cell-with-expand`]: this.renderType === 'expand'
  55 + }
  56 + ];
  57 + },
  58 + expandCls () {
  59 + return [
  60 + `${this.prefixCls}-cell-expand`,
  61 + {
  62 + [`${this.prefixCls}-cell-expand-expanded`]: this.expanded
46 } 63 }
47 ]; 64 ];
48 } 65 }
49 }, 66 },
50 methods: { 67 methods: {
51 compile () { 68 compile () {
52 - if (this.column.render) { 69 + if (this.column.render && this.renderType === 'render') {
53 // 兼容真 Render,后期废弃旧用法 70 // 兼容真 Render,后期废弃旧用法
54 let isRealRender = true; 71 let isRealRender = true;
55 const Table = findComponentUpward(this, 'Table'); 72 const Table = findComponentUpward(this, 'Table');
56 if (Table.context) isRealRender = false; 73 if (Table.context) isRealRender = false;
57 74
58 if (isRealRender) { 75 if (isRealRender) {
  76 + this.$el.innerHTML = '';
59 const component = new Vue({ 77 const component = new Vue({
60 functional: true, 78 functional: true,
61 render: (h) => { 79 render: (h) => {
@@ -114,6 +132,9 @@ @@ -114,6 +132,9 @@
114 }, 132 },
115 toggleSelect () { 133 toggleSelect () {
116 this.$parent.$parent.toggleSelect(this.index); 134 this.$parent.$parent.toggleSelect(this.index);
  135 + },
  136 + toggleExpand () {
  137 + this.$parent.$parent.toggleExpand(this.index);
117 } 138 }
118 }, 139 },
119 created () { 140 created () {
@@ -123,6 +144,8 @@ @@ -123,6 +144,8 @@
123 this.renderType = 'selection'; 144 this.renderType = 'selection';
124 } else if (this.column.type === 'html') { 145 } else if (this.column.type === 'html') {
125 this.renderType = 'html'; 146 this.renderType = 'html';
  147 + } else if (this.column.type === 'expand') {
  148 + this.renderType = 'expand';
126 } else if (this.column.render) { 149 } else if (this.column.render) {
127 this.renderType = 'render'; 150 this.renderType = 'render';
128 } else { 151 } else {
src/components/table/expand.vue 0 → 100644
  1 +<template>
  2 + <div ref="cell"></div>
  3 +</template>
  4 +<script>
  5 + import Vue from 'vue';
  6 + export default {
  7 + name: 'TableExpand',
  8 + props: {
  9 + row: Object,
  10 + render: Function,
  11 + index: Number,
  12 + },
  13 + methods: {
  14 + compile () {
  15 + if (this.render) {
  16 + this.$el.innerHTML = '';
  17 + const component = new Vue({
  18 + functional: true,
  19 + render: (h) => {
  20 + return this.render(h, {
  21 + row: this.row,
  22 + index: this.index
  23 + });
  24 + }
  25 + });
  26 + const Cell = component.$mount();
  27 + this.$refs.cell.appendChild(Cell.$el);
  28 + }
  29 + }
  30 + },
  31 + mounted () {
  32 + this.$nextTick(() => {
  33 + this.compile();
  34 + });
  35 + }
  36 + };
  37 +</script>
0 \ No newline at end of file 38 \ No newline at end of file
src/components/table/table-body.vue
@@ -4,39 +4,47 @@ @@ -4,39 +4,47 @@
4 <col v-for="(column, index) in columns" :width="setCellWidth(column, index, false)"> 4 <col v-for="(column, index) in columns" :width="setCellWidth(column, index, false)">
5 </colgroup> 5 </colgroup>
6 <tbody :class="[prefixCls + '-tbody']"> 6 <tbody :class="[prefixCls + '-tbody']">
7 - <tr  
8 - v-for="(row, index) in data"  
9 - :key="row"  
10 - :class="rowClasses(row._index)"  
11 - @mouseenter.stop="handleMouseIn(row._index)"  
12 - @mouseleave.stop="handleMouseOut(row._index)"  
13 - @click.stop="clickCurrentRow(row._index)"  
14 - @dblclick.stop="dblclickCurrentRow(row._index)">  
15 - <td v-for="column in columns" :class="alignCls(column, row)">  
16 - <Cell  
17 - :fixed="fixed"  
18 - :prefix-cls="prefixCls"  
19 - :row="row"  
20 - :column="column"  
21 - :natural-index="index"  
22 - :index="row._index"  
23 - :checked="rowChecked(row._index)"  
24 - :disabled="rowDisabled(row._index)" 7 + <template v-for="(row, index) in data">
  8 + <tr
  9 + :key="row"
  10 + :class="rowClasses(row._index)"
  11 + @mouseenter.stop="handleMouseIn(row._index)"
  12 + @mouseleave.stop="handleMouseOut(row._index)"
  13 + @click.stop="clickCurrentRow(row._index)"
  14 + @dblclick.stop="dblclickCurrentRow(row._index)">
  15 + <td v-for="column in columns" :class="alignCls(column, row)">
  16 + <Cell
  17 + :fixed="fixed"
  18 + :prefix-cls="prefixCls"
  19 + :row="row"
  20 + :column="column"
  21 + :natural-index="index"
  22 + :index="row._index"
  23 + :checked="rowChecked(row._index)"
  24 + :disabled="rowDisabled(row._index)"
  25 + :expanded="rowExpanded(row._index)"
25 ></Cell> 26 ></Cell>
26 - </td>  
27 - </tr> 27 + </td>
  28 + </tr>
  29 + <tr v-if="rowExpanded(row._index)">
  30 + <td :colspan="columns.length" :class="prefixCls + '-expanded-cell'">
  31 + <Expand :row="row" :render="expandRender" :index="row._index"></Expand>
  32 + </td>
  33 + </tr>
  34 + </template>
28 </tbody> 35 </tbody>
29 </table> 36 </table>
30 </template> 37 </template>
31 <script> 38 <script>
32 // todo :key="row" 39 // todo :key="row"
33 import Cell from './cell.vue'; 40 import Cell from './cell.vue';
  41 + import Expand from './expand.vue';
34 import Mixin from './mixin'; 42 import Mixin from './mixin';
35 43
36 export default { 44 export default {
37 name: 'TableBody', 45 name: 'TableBody',
38 mixins: [ Mixin ], 46 mixins: [ Mixin ],
39 - components: { Cell }, 47 + components: { Cell, Expand },
40 props: { 48 props: {
41 prefixCls: String, 49 prefixCls: String,
42 styleObject: Object, 50 styleObject: Object,
@@ -49,6 +57,20 @@ @@ -49,6 +57,20 @@
49 default: false 57 default: false
50 } 58 }
51 }, 59 },
  60 + computed: {
  61 + expandRender () {
  62 + let render = function () {
  63 + return '';
  64 + };
  65 + for (let i = 0; i < this.columns.length; i++) {
  66 + const column = this.columns[i];
  67 + if (column.type && column.type === 'expand') {
  68 + if (column.render) render = column.render;
  69 + }
  70 + }
  71 + return render;
  72 + }
  73 + },
52 methods: { 74 methods: {
53 rowClasses (_index) { 75 rowClasses (_index) {
54 return [ 76 return [
@@ -66,6 +88,9 @@ @@ -66,6 +88,9 @@
66 rowDisabled(_index){ 88 rowDisabled(_index){
67 return this.objData[_index] && this.objData[_index]._isDisabled; 89 return this.objData[_index] && this.objData[_index]._isDisabled;
68 }, 90 },
  91 + rowExpanded(_index){
  92 + return this.objData[_index] && this.objData[_index]._isExpanded;
  93 + },
69 rowClsName (_index) { 94 rowClsName (_index) {
70 return this.$parent.rowClassName(this.objData[_index], _index); 95 return this.$parent.rowClassName(this.objData[_index], _index);
71 }, 96 },
src/components/table/table-head.vue
@@ -7,7 +7,8 @@ @@ -7,7 +7,8 @@
7 <tr> 7 <tr>
8 <th v-for="(column, index) in columns" :class="alignCls(column)"> 8 <th v-for="(column, index) in columns" :class="alignCls(column)">
9 <div :class="cellClasses(column)"> 9 <div :class="cellClasses(column)">
10 - <template v-if="column.type === 'selection'"><Checkbox :value="isSelectAll" @on-change="selectAll"></Checkbox></template> 10 + <template v-if="column.type === 'expand'"></template>
  11 + <template v-else-if="column.type === 'selection'"><Checkbox :value="isSelectAll" @on-change="selectAll"></Checkbox></template>
11 <template v-else> 12 <template v-else>
12 <span v-html="renderHeader(column, index)"></span> 13 <span v-html="renderHeader(column, index)"></span>
13 <span :class="[prefixCls + '-sort']" v-if="column.sortable"> 14 <span :class="[prefixCls + '-sort']" v-if="column.sortable">
src/components/table/table.vue
@@ -404,6 +404,18 @@ @@ -404,6 +404,18 @@
404 } 404 }
405 this.$emit('on-selection-change', selection); 405 this.$emit('on-selection-change', selection);
406 }, 406 },
  407 + toggleExpand (_index) {
  408 + let data = {};
  409 +
  410 + for (let i in this.objData) {
  411 + if (parseInt(i) === _index) {
  412 + data = this.objData[i];
  413 + }
  414 + }
  415 + const status = !data._isExpanded;
  416 + this.objData[_index]._isExpanded = status;
  417 + this.$emit('on-expand', JSON.parse(JSON.stringify(this.cloneData[_index])), status);
  418 + },
407 selectAll (status) { 419 selectAll (status) {
408 // this.rebuildData.forEach((data) => { 420 // this.rebuildData.forEach((data) => {
409 // if(this.objData[data._index]._isDisabled){ 421 // if(this.objData[data._index]._isDisabled){
@@ -581,9 +593,9 @@ @@ -581,9 +593,9 @@
581 this.data.forEach((row, index) => { 593 this.data.forEach((row, index) => {
582 const newRow = deepCopy(row);// todo 直接替换 594 const newRow = deepCopy(row);// todo 直接替换
583 newRow._isHover = false; 595 newRow._isHover = false;
584 - if(newRow._disabled){ 596 + if (newRow._disabled) {
585 newRow._isDisabled = newRow._disabled; 597 newRow._isDisabled = newRow._disabled;
586 - }else{ 598 + } else {
587 newRow._isDisabled = false; 599 newRow._isDisabled = false;
588 } 600 }
589 if (newRow._checked) { 601 if (newRow._checked) {
@@ -591,6 +603,11 @@ @@ -591,6 +603,11 @@
591 } else { 603 } else {
592 newRow._isChecked = false; 604 newRow._isChecked = false;
593 } 605 }
  606 + if (newRow._expanded) {
  607 + newRow._isExpanded = newRow._expanded;
  608 + } else {
  609 + newRow._isExpanded = false;
  610 + }
594 if (newRow._highlight) { 611 if (newRow._highlight) {
595 newRow._isHighlight = newRow._highlight; 612 newRow._isHighlight = newRow._highlight;
596 } else { 613 } else {
src/components/transfer/list.vue
@@ -2,7 +2,7 @@ @@ -2,7 +2,7 @@
2 <div :class="classes" :style="listStyle"> 2 <div :class="classes" :style="listStyle">
3 <div :class="prefixCls + '-header'"> 3 <div :class="prefixCls + '-header'">
4 <Checkbox :value="checkedAll" :disabled="checkedAllDisabled" @on-change="toggleSelectAll"></Checkbox> 4 <Checkbox :value="checkedAll" :disabled="checkedAllDisabled" @on-change="toggleSelectAll"></Checkbox>
5 - <span>{{ title }}</span> 5 + <span :class="prefixCls + '-header-title'" @click="toggleSelectAll(!checkedAll)">{{ title }}</span>
6 <span :class="prefixCls + '-header-count'">{{ count }}</span> 6 <span :class="prefixCls + '-header-count'">{{ count }}</span>
7 </div> 7 </div>
8 <div :class="bodyClasses"> 8 <div :class="bodyClasses">
src/locale/lang/ru-RU.js 0 → 100644
  1 +export default {
  2 + i: {
  3 + select: {
  4 + placeholder: 'Выбрать',
  5 + noMatch: 'Нет соответствующих данных',
  6 + loading: 'Загрузка'
  7 + },
  8 + table: {
  9 + noDataText: 'Нет данных',
  10 + noFilteredDataText: 'Нет данных по фильтру',
  11 + confirmFilter: 'Подтвердить',
  12 + resetFilter: 'Сброс',
  13 + clearFilter: 'Все'
  14 + },
  15 + datepicker: {
  16 + selectDate: 'Выбрать дату',
  17 + selectTime: 'Выбрать время',
  18 + startTime: 'Начальное время',
  19 + endTime: 'Конечное время',
  20 + clear: 'Очистить',
  21 + ok: 'OK',
  22 + month: '',
  23 + month1: 'Январь',
  24 + month2: 'Февраль',
  25 + month3: 'Март',
  26 + month4: 'Апрель',
  27 + month5: 'Май',
  28 + month6: 'Июнь',
  29 + month7: 'Июль',
  30 + month8: 'Август',
  31 + month9: 'Сентябрь',
  32 + month10: 'Октябрь',
  33 + month11: 'Ноябрь',
  34 + month12: 'Декабрь',
  35 + year: '',
  36 + weeks: {
  37 + sun: 'Вс',
  38 + mon: 'Пн',
  39 + tue: 'Вт',
  40 + wed: 'Ср',
  41 + thu: 'Чт',
  42 + fri: 'Пт',
  43 + sat: 'Сб'
  44 + },
  45 + months: {
  46 + m1: 'Янв',
  47 + m2: 'Фев',
  48 + m3: 'Мар',
  49 + m4: 'Апр',
  50 + m5: 'Май',
  51 + m6: 'Июн',
  52 + m7: 'Июл',
  53 + m8: 'Авг',
  54 + m9: 'Сен',
  55 + m10: 'Окт',
  56 + m11: 'Ноя',
  57 + m12: 'Дек'
  58 + }
  59 + },
  60 + transfer: {
  61 + titles: {
  62 + source: 'Источник',
  63 + target: 'Цель'
  64 + },
  65 + filterPlaceholder: 'Искать здесь',
  66 + notFoundText: 'Не Найдено'
  67 + },
  68 + modal: {
  69 + okText: 'OK',
  70 + cancelText: 'Отменить'
  71 + },
  72 + poptip: {
  73 + okText: 'OK',
  74 + cancelText: 'Отменить'
  75 + },
  76 + page: {
  77 + prev: 'Пред. страница',
  78 + next: 'След. страница',
  79 + total: 'Всего',
  80 + item: 'пункт',
  81 + items: 'пункты',
  82 + prev5: 'Пред. 5 страниц',
  83 + next5: 'След. 5 страниц',
  84 + page: '/page',
  85 + goto: 'Идти к',
  86 + p: ''
  87 + },
  88 + rate: {
  89 + star: 'Звезда',
  90 + stars: 'Звезды'
  91 + },
  92 + tree: {
  93 + emptyText: 'Нет данных'
  94 + }
  95 + }
  96 +};
0 \ No newline at end of file 97 \ No newline at end of file
src/styles/components/notice.less
@@ -50,6 +50,7 @@ @@ -50,6 +50,7 @@
50 white-space: nowrap; 50 white-space: nowrap;
51 } 51 }
52 &-with-desc &-title{ 52 &-with-desc &-title{
  53 + font-weight: bold;
53 margin-bottom: 8px; 54 margin-bottom: 8px;
54 } 55 }
55 &-with-desc&-with-icon &-title{ 56 &-with-desc&-with-icon &-title{
@@ -58,7 +59,8 @@ @@ -58,7 +59,8 @@
58 59
59 &-desc { 60 &-desc {
60 font-size: 12px; 61 font-size: 12px;
61 - color: @legend-color; 62 + //color: @legend-color;
  63 + color: @text-color;
62 text-align: justify; 64 text-align: justify;
63 line-height: 1.5; 65 line-height: 1.5;
64 } 66 }
src/styles/components/table.less
@@ -145,6 +145,24 @@ @@ -145,6 +145,24 @@
145 overflow: hidden; 145 overflow: hidden;
146 text-overflow: ellipsis; 146 text-overflow: ellipsis;
147 } 147 }
  148 +
  149 + &-with-expand{
  150 + height: 47px;
  151 + line-height: 47px;
  152 + padding: 0;
  153 + text-align: center;
  154 + }
  155 +
  156 + &-expand{
  157 + cursor: pointer;
  158 + transition: transform @transition-time @ease-in-out;
  159 + i{
  160 + font-size: @font-size-base;
  161 + }
  162 + &-expanded{
  163 + transform: rotate(90deg);
  164 + }
  165 + }
148 } 166 }
149 &-hidden{ 167 &-hidden{
150 visibility: hidden; 168 visibility: hidden;
@@ -156,6 +174,11 @@ @@ -156,6 +174,11 @@
156 vertical-align: middle; 174 vertical-align: middle;
157 } 175 }
158 176
  177 + td&-expanded-cell{
  178 + padding: 20px 50px;
  179 + background: @table-thead-bg;
  180 + }
  181 +
159 &-stripe &-body, 182 &-stripe &-body,
160 &-stripe &-fixed-body 183 &-stripe &-fixed-body
161 { 184 {
@@ -184,6 +207,13 @@ @@ -184,6 +207,13 @@
184 height: 60px; 207 height: 60px;
185 line-height: 60px; 208 line-height: 60px;
186 } 209 }
  210 + .@{table-prefix-cls}-cell-with-expand{
  211 + height: 59px;
  212 + line-height: 59px;
  213 + i{
  214 + font-size: @font-size-base+2;
  215 + }
  216 + }
187 } 217 }
188 218
189 &-small{ 219 &-small{
@@ -197,6 +227,10 @@ @@ -197,6 +227,10 @@
197 height: 40px; 227 height: 40px;
198 line-height: 40px; 228 line-height: 40px;
199 } 229 }
  230 + .@{table-prefix-cls}-cell-with-expand{
  231 + height: 39px;
  232 + line-height: 39px;
  233 + }
200 } 234 }
201 235
202 &-row-highlight, 236 &-row-highlight,
src/styles/components/transfer.less
@@ -31,6 +31,10 @@ @@ -31,6 +31,10 @@
31 left: 0; 31 left: 0;
32 width: 100%; 32 width: 100%;
33 33
  34 + &-title{
  35 + cursor: pointer;
  36 + }
  37 +
34 & > span{ 38 & > span{
35 padding-left: 4px; 39 padding-left: 4px;
36 } 40 }
src/styles/custom.less
@@ -3,25 +3,25 @@ @@ -3,25 +3,25 @@
3 @css-prefix-iconfont : ivu-icon; 3 @css-prefix-iconfont : ivu-icon;
4 4
5 // Color 5 // Color
6 -@primary-color : #3399ff; 6 +@primary-color : #2d8cf0;
7 @info-color : #2db7f5; 7 @info-color : #2db7f5;
8 -@success-color : #00cc66; 8 +@success-color : #19be6b;
9 @warning-color : #ff9900; 9 @warning-color : #ff9900;
10 -@error-color : #ff3300;  
11 -@link-color : #3399ff; 10 +@error-color : #ed3f14;
  11 +@link-color : #2D8cF0;
12 @link-hover-color : tint(@link-color, 20%); 12 @link-hover-color : tint(@link-color, 20%);
13 @link-active-color : shade(@link-color, 5%); 13 @link-active-color : shade(@link-color, 5%);
14 @selected-color : fade(@primary-color, 90%); 14 @selected-color : fade(@primary-color, 90%);
15 @tooltip-color : #fff; 15 @tooltip-color : #fff;
16 -@subsidiary-color : #9ea7b4; 16 +@subsidiary-color : #80848f;
17 @rate-star-color : #f5a623; 17 @rate-star-color : #f5a623;
18 18
19 // Base 19 // Base
20 @body-background : #fff; 20 @body-background : #fff;
21 @font-family : "Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif; 21 @font-family : "Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif;
22 @code-family : Consolas,Menlo,Courier,monospace; 22 @code-family : Consolas,Menlo,Courier,monospace;
23 -@title-color : #464c5b;  
24 -@text-color : #657180; 23 +@title-color : #1c2438;
  24 +@text-color : #495060;
25 @font-size-base : 14px; 25 @font-size-base : 14px;
26 @font-size-small : 12px; 26 @font-size-small : 12px;
27 @line-height-base : 1.5; 27 @line-height-base : 1.5;
@@ -31,16 +31,16 @@ @@ -31,16 +31,16 @@
31 @cursor-disabled : not-allowed; 31 @cursor-disabled : not-allowed;
32 32
33 // Border color 33 // Border color
34 -@border-color-base : #d7dde4; // outside  
35 -@border-color-split : #e3e8ee; // inside 34 +@border-color-base : #dddee1; // outside
  35 +@border-color-split : #e9eaec; // inside
36 36
37 // Background color 37 // Background color
38 @background-color-base : #f7f7f7; // base 38 @background-color-base : #f7f7f7; // base
39 @background-color-select-hover: @input-disabled-bg; 39 @background-color-select-hover: @input-disabled-bg;
40 @tooltip-bg : rgba(70, 76, 91, .9); 40 @tooltip-bg : rgba(70, 76, 91, .9);
41 @head-bg : #f9fafc; 41 @head-bg : #f9fafc;
42 -@table-thead-bg : #f5f7f9;  
43 -@table-td-stripe-bg : #f5f7f9; 42 +@table-thead-bg : #f8f8f9;
  43 +@table-td-stripe-bg : #f8f8f9;
44 @table-td-hover-bg : #ebf7ff; 44 @table-td-hover-bg : #ebf7ff;
45 @table-td-highlight-bg : #ebf7ff; 45 @table-td-highlight-bg : #ebf7ff;
46 @menu-dark-active-bg : #313540; 46 @menu-dark-active-bg : #313540;
@@ -66,7 +66,7 @@ @@ -66,7 +66,7 @@
66 @btn-border-radius-small: 3px; 66 @btn-border-radius-small: 3px;
67 @btn-group-border : shade(@primary-color, 5%); 67 @btn-group-border : shade(@primary-color, 5%);
68 68
69 -@btn-disable-color : #c3cbd6; 69 +@btn-disable-color : #bbbec4;
70 @btn-disable-bg : @background-color-base; 70 @btn-disable-bg : @background-color-base;
71 @btn-disable-border : @border-color-base; 71 @btn-disable-border : @border-color-base;
72 72
src/styles/mixins/button.less
@@ -133,7 +133,7 @@ @@ -133,7 +133,7 @@
133 line-height: @line-height-base; 133 line-height: @line-height-base;
134 user-select: none; 134 user-select: none;
135 .button-size(@btn-padding-base; @btn-font-size; @btn-border-radius); 135 .button-size(@btn-padding-base; @btn-font-size; @btn-border-radius);
136 - transform: translate3d(0, 0, 0); 136 + //transform: translate3d(0, 0, 0);
137 //transition: all @transition-time linear; 137 //transition: all @transition-time linear;
138 transition: color @transition-time linear, background-color @transition-time linear, border @transition-time linear; 138 transition: color @transition-time linear, background-color @transition-time linear, border @transition-time linear;
139 139