Blame view

src/components/cascader/cascader.vue 3.68 KB
0a48ac45   梁灏   Input add readonl...
1
  <template>
c463ab87   梁灏   add Cascader
2
      <div :class="classes" v-clickoutside="handleClose">
6ff31952   梁灏   optimize Input sh...
3
4
5
6
7
          <i-input
              readonly
              :disabled="disabled"
              :value.sync="displayRender"
              :size="size"
c463ab87   梁灏   add Cascader
8
9
10
11
12
13
14
15
16
17
18
19
20
21
              :placeholder="placeholder"
              @on-focus="onFocus"></i-input>
          <Icon type="ios-close" :class="[prefixCls + '-arrow']" v-show="showCloseIcon" @click.stop="clearSelect"></Icon>
          <Icon type="arrow-down-b" :class="[prefixCls + '-arrow']"></Icon>
          <Dropdown v-show="visible" transition="slide-up">
              <div>
                  <Caspanel
                      :prefix-cls="prefixCls"
                      :data.sync="data"
                      :disabled="disabled"
                      :trigger="trigger"
                      @on-update-result="updateResult"></Caspanel>
              </div>
          </Dropdown>
6ff31952   梁灏   optimize Input sh...
22
      </div>
0a48ac45   梁灏   Input add readonl...
23
24
  </template>
  <script>
6ff31952   梁灏   optimize Input sh...
25
26
      import iInput from '../input/input.vue';
      import Dropdown from '../select/dropdown.vue';
c463ab87   梁灏   add Cascader
27
28
      import Icon from '../icon/icon.vue';
      import Caspanel from './caspanel.vue';
6ff31952   梁灏   optimize Input sh...
29
      import clickoutside from '../../directives/clickoutside';
c463ab87   梁灏   add Cascader
30
      import { oneOf } from '../../utils/assist';
6ff31952   梁灏   optimize Input sh...
31
32
33
  
      const prefixCls = 'ivu-cascader';
  
0a48ac45   梁灏   Input add readonl...
34
      export default {
c463ab87   梁灏   add Cascader
35
36
          components: { iInput, Dropdown, Icon, Caspanel },
          directives: { clickoutside },
0a48ac45   梁灏   Input add readonl...
37
          props: {
6ff31952   梁灏   optimize Input sh...
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
              data: {
                  type: Array,
                  default () {
                      return []
                  }
              },
              value: {
                  type: Array
              },
              disabled: {
                  type: Boolean,
                  default: false
              },
              clearable: {
                  type: Boolean,
c463ab87   梁灏   add Cascader
53
                  default: true
6ff31952   梁灏   optimize Input sh...
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
              },
              placeholder: {
                  type: String,
                  default: '请选择'
              },
              size: {
                  validator (value) {
                      return oneOf(value, ['small', 'large']);
                  }
              },
              trigger: {
                  validator (value) {
                      return oneOf(value, ['click', 'hover']);
                  },
                  default: 'click'
              },
              changeOnSelect: {
                  type: Boolean,
                  default: false
              },
              renderFormat: {
                  type: Function,
c463ab87   梁灏   add Cascader
76
77
                  default (label, selectedData) {
                      return label.join('/');
6ff31952   梁灏   optimize Input sh...
78
79
                  }
              }
0a48ac45   梁灏   Input add readonl...
80
81
82
          },
          data () {
              return {
6ff31952   梁灏   optimize Input sh...
83
                  prefixCls: prefixCls,
c463ab87   梁灏   add Cascader
84
85
86
                  visible: false,
                  selected: [],
                  tmpSelected: []
0a48ac45   梁灏   Input add readonl...
87
88
89
              }
          },
          computed: {
c463ab87   梁灏   add Cascader
90
91
92
93
94
95
96
97
98
99
100
              classes () {
                  return [
                      `${prefixCls}`,
                      {
                          [`${prefixCls}-show-clear`]: this.showCloseIcon
                      }
                  ]
              },
              showCloseIcon () {
                  return this.value && this.value.length && this.clearable;
              },
6ff31952   梁灏   optimize Input sh...
101
102
103
104
105
106
107
108
              displayRender () {
                  let label = [];
                  for (let i = 0; i < this.selected.length; i++) {
                      label.push(this.selected[i].label);
                  }
  
                  return this.renderFormat(label);
              }
0a48ac45   梁灏   Input add readonl...
109
110
          },
          methods: {
c463ab87   梁灏   add Cascader
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
              clearSelect () {
  
              },
              handleClose () {
                  this.visible = false;
              },
              onFocus () {
                  this.visible = true;
              },
              updateResult (result) {
                  console.log(JSON.stringify(result))
                  this.selected = result;
              }
          },
          ready () {
  
0a48ac45   梁灏   Input add readonl...
127
128
129
          }
      }
  </script>