Commit ecaf8d51e05b2b18e3d72ba700f1c108ea2b0cbe

Authored by 梁灏
1 parent 595cfa72

Date add transfer prop

examples/routers/date.vue
1 <template> 1 <template>
2 <div> 2 <div>
3 - <Date-picker type="daterange" placeholder="选择日期" style="width: 200px"></Date-picker> 3 + <Date-picker transfer type="daterange" placeholder="选择日期" style="width: 200px"></Date-picker>
4 <Date-picker type="daterange" placeholder="选择日期" style="width: 200px"></Date-picker> 4 <Date-picker type="daterange" placeholder="选择日期" style="width: 200px"></Date-picker>
5 <Date-picker type="daterange" placeholder="选择日期" style="width: 200px"></Date-picker> 5 <Date-picker type="daterange" placeholder="选择日期" style="width: 200px"></Date-picker>
6 </div> 6 </div>
examples/routers/modal.vue
@@ -5,7 +5,8 @@ @@ -5,7 +5,8 @@
5 <Modal v-model="showModal" title="弹窗"> 5 <Modal v-model="showModal" title="弹窗">
6 <Tabs> 6 <Tabs>
7 <Tab-pane label="演示" style="height: 80px;"> 7 <Tab-pane label="演示" style="height: 80px;">
8 - <i-select transfer> 8 + <Date-picker transfer type="daterange" placement="bottom-end" placeholder="选择日期" style="width: 200px"></Date-picker>
  9 + <i-select transfer multiple v-model="m1">
9 <i-option v-for="item in options" :value="item.value" :key="item.value">{{ item.label }}</i-option> 10 <i-option v-for="item in options" :value="item.value" :key="item.value">{{ item.label }}</i-option>
10 </i-select> 11 </i-select>
11 </Tab-pane> 12 </Tab-pane>
@@ -22,6 +23,7 @@ @@ -22,6 +23,7 @@
22 export default { 23 export default {
23 data () { 24 data () {
24 return { 25 return {
  26 + m1: [],
25 showModal: false, 27 showModal: false,
26 showModal2: false, 28 showModal2: false,
27 options: [ 29 options: [
examples/routers/select.vue
1 <template> 1 <template>
2 - <Row>  
3 - <Col span="12" style="padding-right:10px">  
4 - <Select  
5 - v-model="model13"  
6 - filterable  
7 - remote  
8 - :remote-method="remoteMethod1"  
9 - :loading="loading1">  
10 - <Option v-for="(option, index) in options1" :value="option.value" :key="index">{{option.label}}</Option>  
11 - </Select>  
12 - </Col>  
13 - <Col span="12">  
14 - <Select  
15 - v-model="model14"  
16 - multiple  
17 - filterable  
18 - remote  
19 - :remote-method="remoteMethod2"  
20 - :loading="loading2">  
21 - <Option v-for="(option, index) in options2" :value="option.value" :key="index">{{option.label}}</Option>  
22 - </Select>  
23 - </Col>  
24 - </Row> 2 + <i-select transfer multiple v-model="m1">
  3 + <i-option v-for="item in options" :value="item.value" :key="item.value">{{ item.label }}</i-option>
  4 + </i-select>
25 </template> 5 </template>
26 <script> 6 <script>
27 export default { 7 export default {
28 data () { 8 data () {
29 return { 9 return {
30 - model13: '',  
31 - loading1: false,  
32 - options1: [],  
33 - model14: [],  
34 - loading2: false,  
35 - options2: [],  
36 - list: ['Alabama', 'Alaska', 'Arizona', 'Arkansas', 'California', 'Colorado', 'Connecticut', 'Delaware', 'Florida', 'Georgia', 'Hawaii', 'Idaho', 'Illinois', 'Indiana', 'Iowa', 'Kansas', 'Kentucky', 'Louisiana', 'Maine', 'Maryland', 'Massachusetts', 'Michigan', 'Minnesota', 'Mississippi', 'Missouri', 'Montana', 'Nebraska', 'Nevada', 'New hampshire', 'New jersey', 'New mexico', 'New york', 'North carolina', 'North dakota', 'Ohio', 'Oklahoma', 'Oregon', 'Pennsylvania', 'Rhode island', 'South carolina', 'South dakota', 'Tennessee', 'Texas', 'Utah', 'Vermont', 'Virginia', 'Washington', 'West virginia', 'Wisconsin', 'Wyoming'], 10 + m1: [],
  11 + showModal: false,
  12 + showModal2: false,
  13 + options: [
  14 + {
  15 + value: 'beijing',
  16 + label: '北京市'
  17 + },
  18 + {
  19 + value: 'shanghai',
  20 + label: '上海市'
  21 + },
  22 + {
  23 + value: 'shenzhen',
  24 + label: '深圳市'
  25 + },
  26 + {
  27 + value: 'hangzhou',
  28 + label: '杭州市'
  29 + },
  30 + {
  31 + value: 'nanjing',
  32 + label: '南京市'
  33 + },
  34 + {
  35 + value: 'chongqing',
  36 + label: '重庆市'
  37 + }
  38 + ]
37 } 39 }
38 }, 40 },
39 methods: { 41 methods: {
src/components/date-picker/picker.vue
1 <template> 1 <template>
2 - <div  
3 - :class="[prefixCls]"  
4 - v-clickoutside="handleClose"> 2 + <div :class="[prefixCls]" v-clickoutside="handleClose">
5 <div ref="reference" :class="[prefixCls + '-rel']"> 3 <div ref="reference" :class="[prefixCls + '-rel']">
6 <slot> 4 <slot>
7 <i-input 5 <i-input
@@ -20,7 +18,14 @@ @@ -20,7 +18,14 @@
20 </slot> 18 </slot>
21 </div> 19 </div>
22 <transition :name="transition"> 20 <transition :name="transition">
23 - <Drop v-show="opened" :placement="placement" ref="drop"> 21 + <Drop
  22 + @click.native="handleTransferClick"
  23 + v-show="opened"
  24 + :class="{ [prefixCls + '-transfer']: transfer }"
  25 + :placement="placement"
  26 + ref="drop"
  27 + :data-transfer="transfer"
  28 + v-transfer-dom>
24 <div ref="picker"></div> 29 <div ref="picker"></div>
25 </Drop> 30 </Drop>
26 </transition> 31 </transition>
@@ -31,6 +36,7 @@ @@ -31,6 +36,7 @@
31 import iInput from '../../components/input/input.vue'; 36 import iInput from '../../components/input/input.vue';
32 import Drop from '../../components/select/dropdown.vue'; 37 import Drop from '../../components/select/dropdown.vue';
33 import clickoutside from '../../directives/clickoutside'; 38 import clickoutside from '../../directives/clickoutside';
  39 + import TransferDom from '../../directives/transfer-dom';
34 import { oneOf } from '../../utils/assist'; 40 import { oneOf } from '../../utils/assist';
35 import { formatDate, parseDate } from './util'; 41 import { formatDate, parseDate } from './util';
36 import Emitter from '../../mixins/emitter'; 42 import Emitter from '../../mixins/emitter';
@@ -142,7 +148,7 @@ @@ -142,7 +148,7 @@
142 name: 'CalendarPicker', 148 name: 'CalendarPicker',
143 mixins: [ Emitter ], 149 mixins: [ Emitter ],
144 components: { iInput, Drop }, 150 components: { iInput, Drop },
145 - directives: { clickoutside }, 151 + directives: { clickoutside, TransferDom },
146 props: { 152 props: {
147 format: { 153 format: {
148 type: String 154 type: String
@@ -188,6 +194,10 @@ @@ -188,6 +194,10 @@
188 }, 194 },
189 options: { 195 options: {
190 type: Object 196 type: Object
  197 + },
  198 + transfer: {
  199 + type: Boolean,
  200 + default: false
191 } 201 }
192 }, 202 },
193 data () { 203 data () {
@@ -198,6 +208,7 @@ @@ -198,6 +208,7 @@
198 picker: null, 208 picker: null,
199 internalValue: '', 209 internalValue: '',
200 disableClickOutSide: false, // fixed when click a date,trigger clickoutside to close picker 210 disableClickOutSide: false, // fixed when click a date,trigger clickoutside to close picker
  211 + disableCloseUnderTransfer: false, // transfer 模式下,点击Drop也会触发关闭
201 currentValue: this.value 212 currentValue: this.value
202 }; 213 };
203 }, 214 },
@@ -258,7 +269,15 @@ @@ -258,7 +269,15 @@
258 } 269 }
259 }, 270 },
260 methods: { 271 methods: {
  272 + // 开启 transfer 时,点击 Drop 即会关闭,这里不让其关闭
  273 + handleTransferClick () {
  274 + if (this.transfer) this.disableCloseUnderTransfer = true;
  275 + },
261 handleClose () { 276 handleClose () {
  277 + if (this.disableCloseUnderTransfer) {
  278 + this.disableCloseUnderTransfer = false;
  279 + return false;
  280 + }
262 if (this.open !== null) return; 281 if (this.open !== null) return;
263 // if (!this.disableClickOutSide) this.visible = false; 282 // if (!this.disableClickOutSide) this.visible = false;
264 this.visible = false; 283 this.visible = false;
src/components/select/select.vue
@@ -26,7 +26,7 @@ @@ -26,7 +26,7 @@
26 </div> 26 </div>
27 <transition :name="transitionName"> 27 <transition :name="transitionName">
28 <Drop 28 <Drop
29 - :class="{ [prefixCls + '-dropdown-transfer']: transfer }" 29 + :class="dropdownCls"
30 v-show="dropVisible" 30 v-show="dropVisible"
31 :placement="placement" 31 :placement="placement"
32 ref="dropdown" 32 ref="dropdown"
@@ -157,6 +157,12 @@ @@ -157,6 +157,12 @@
157 } 157 }
158 ]; 158 ];
159 }, 159 },
  160 + dropdownCls () {
  161 + return {
  162 + [prefixCls + '-dropdown-transfer']: this.transfer,
  163 + [prefixCls + '-multiple']: this.multiple && this.transfer
  164 + };
  165 + },
160 showPlaceholder () { 166 showPlaceholder () {
161 let status = false; 167 let status = false;
162 168
src/styles/components/date-picker.less
@@ -191,6 +191,10 @@ @@ -191,6 +191,10 @@
191 } 191 }
192 } 192 }
193 } 193 }
  194 + &-transfer{
  195 + z-index: @zindex-transfer;
  196 + max-height: none;
  197 + }
194 } 198 }
195 199
196 .@{picker-prefix-cls} { 200 .@{picker-prefix-cls} {