Commit 548eac43fe9a510649fc85e86e9279ebaa969ad4
1 parent
3e4bab96
fixed #1387 and update v-transfer-dom
Modal add transfer prop
Showing
10 changed files
with
205 additions
and
101 deletions
Show diff stats
examples/routers/modal.vue
| @@ -6,6 +6,7 @@ | @@ -6,6 +6,7 @@ | ||
| 6 | width="70" | 6 | width="70" |
| 7 | title="普通的Modal对话框标题" | 7 | title="普通的Modal对话框标题" |
| 8 | @on-ok="ok" | 8 | @on-ok="ok" |
| 9 | + :transfer="true" | ||
| 9 | @on-cancel="cancel"> | 10 | @on-cancel="cancel"> |
| 10 | <div> | 11 | <div> |
| 11 | <Form :model="formItem" :label-width="80"> | 12 | <Form :model="formItem" :label-width="80"> |
examples/routers/poptip.vue
| 1 | <template> | 1 | <template> |
| 2 | <div> | 2 | <div> |
| 3 | - <Poptip trigger="hover" transfer title="提示标题" content="提示内容"> | 3 | + <Poptip trigger="hover" title="提示标题" content="提示内容"> |
| 4 | <Button>hover 激活</Button> | 4 | <Button>hover 激活</Button> |
| 5 | </Poptip> | 5 | </Poptip> |
| 6 | <Poptip title="提示标题" content="提示内容"> | 6 | <Poptip title="提示标题" content="提示内容"> |
examples/routers/table.vue
| 1 | +<!--<template>--> | ||
| 2 | + <!--<div>--> | ||
| 3 | + <!--<Table--> | ||
| 4 | + <!--width="500"--> | ||
| 5 | + <!--border--> | ||
| 6 | + <!--highlight-row--> | ||
| 7 | + <!--:columns="columns2"--> | ||
| 8 | + <!--@on-selection-change="change2"--> | ||
| 9 | + <!--:data="data3"></Table>--> | ||
| 10 | + <!--<Button @click="addData">添加数据</Button>--> | ||
| 11 | + <!--</div>--> | ||
| 12 | +<!--</template>--> | ||
| 13 | +<!--<script>--> | ||
| 14 | + <!--import test from '../components/test.vue';--> | ||
| 15 | + <!--export default {--> | ||
| 16 | + <!--data () {--> | ||
| 17 | + <!--return {--> | ||
| 18 | + <!--columns2: [--> | ||
| 19 | +<!--// {--> | ||
| 20 | +<!--// type: 'selection',--> | ||
| 21 | +<!--// width: 60,--> | ||
| 22 | +<!--// align: 'center'--> | ||
| 23 | +<!--// },--> | ||
| 24 | + <!--{--> | ||
| 25 | + <!--title: '姓名',--> | ||
| 26 | + <!--key: 'name',--> | ||
| 27 | + <!--width: 100,--> | ||
| 28 | +<!--// sortable: true,--> | ||
| 29 | + <!--fixed: 'right',--> | ||
| 30 | + <!--render: (h, params) => {--> | ||
| 31 | + <!--return h('div', [--> | ||
| 32 | + <!--h('Button', {--> | ||
| 33 | + <!--props: {--> | ||
| 34 | + <!--type: 'primary',--> | ||
| 35 | + <!--size: 'small'--> | ||
| 36 | + <!--},--> | ||
| 37 | + <!--on: {--> | ||
| 38 | + <!--click: this.edit--> | ||
| 39 | + <!--},--> | ||
| 40 | + <!--}, '修改')--> | ||
| 41 | + <!--]);--> | ||
| 42 | + <!--}--> | ||
| 43 | + <!--},--> | ||
| 44 | + <!--{--> | ||
| 45 | + <!--title: '年龄',--> | ||
| 46 | + <!--key: 'age',--> | ||
| 47 | + <!--sortable: true,--> | ||
| 48 | +<!--// width: 100--> | ||
| 49 | + <!--},--> | ||
| 50 | + <!--{--> | ||
| 51 | + <!--title: '省份',--> | ||
| 52 | + <!--key: 'province',--> | ||
| 53 | + <!--sortable: true,--> | ||
| 54 | +<!--// fixed: 'right',--> | ||
| 55 | +<!--// width: 100--> | ||
| 56 | + <!--},--> | ||
| 57 | +<!--// {--> | ||
| 58 | +<!--// title: '市区',--> | ||
| 59 | +<!--// key: 'city',--> | ||
| 60 | +<!--// width: 100--> | ||
| 61 | +<!--// },--> | ||
| 62 | +<!--// {--> | ||
| 63 | +<!--// title: '地址',--> | ||
| 64 | +<!--// key: 'address',--> | ||
| 65 | +<!--// width: 200--> | ||
| 66 | +<!--// },--> | ||
| 67 | +<!--// {--> | ||
| 68 | +<!--// title: '邮编',--> | ||
| 69 | +<!--// key: 'zip',--> | ||
| 70 | +<!--// width: 100--> | ||
| 71 | +<!--// },--> | ||
| 72 | +<!--// {--> | ||
| 73 | +<!--// title: '操作',--> | ||
| 74 | +<!--// key: 'action',--> | ||
| 75 | +<!--// fixed: 'right',--> | ||
| 76 | +<!--// width: 120,--> | ||
| 77 | +<!--// render: (h, params) => {--> | ||
| 78 | +<!--// return h(test);--> | ||
| 79 | +<!--// }--> | ||
| 80 | +<!--// }--> | ||
| 81 | + <!--],--> | ||
| 82 | + <!--data3: [--> | ||
| 83 | +<!--// {--> | ||
| 84 | +<!--// name: '王小明',--> | ||
| 85 | +<!--// age: 18,--> | ||
| 86 | +<!--// address: '北京市朝阳区芍药居',--> | ||
| 87 | +<!--// province: '北京市',--> | ||
| 88 | +<!--// city: '朝阳区',--> | ||
| 89 | +<!--// zip: 100000--> | ||
| 90 | +<!--// },--> | ||
| 91 | +<!--// {--> | ||
| 92 | +<!--// name: '张小刚',--> | ||
| 93 | +<!--// age: 25,--> | ||
| 94 | +<!--// address: '北京市海淀区西二旗',--> | ||
| 95 | +<!--// province: '北京市',--> | ||
| 96 | +<!--// city: '海淀区',--> | ||
| 97 | +<!--// zip: 100000--> | ||
| 98 | +<!--// },--> | ||
| 99 | +<!--// {--> | ||
| 100 | +<!--// name: '李小红',--> | ||
| 101 | +<!--// age: 30,--> | ||
| 102 | +<!--// address: '上海市浦东新区世纪大道',--> | ||
| 103 | +<!--// province: '上海市',--> | ||
| 104 | +<!--// city: '浦东新区',--> | ||
| 105 | +<!--// zip: 100000--> | ||
| 106 | +<!--// },--> | ||
| 107 | +<!--// {--> | ||
| 108 | +<!--// name: '周小伟',--> | ||
| 109 | +<!--// age: 26,--> | ||
| 110 | +<!--// address: '深圳市南山区深南大道',--> | ||
| 111 | +<!--// province: '广东',--> | ||
| 112 | +<!--// city: '南山区',--> | ||
| 113 | +<!--// zip: 100000--> | ||
| 114 | +<!--// }--> | ||
| 115 | + <!--]--> | ||
| 116 | + <!--}--> | ||
| 117 | + <!--},--> | ||
| 118 | + <!--methods: {--> | ||
| 119 | + <!--change1 (d, l) {--> | ||
| 120 | +<!--// console.log(d)--> | ||
| 121 | +<!--// console.log(l)--> | ||
| 122 | + <!--},--> | ||
| 123 | + <!--change2 (d, l) {--> | ||
| 124 | + <!--console.log(d);--> | ||
| 125 | + <!--console.log(l);--> | ||
| 126 | + <!--},--> | ||
| 127 | + <!--addData () {--> | ||
| 128 | + <!--this.data3.push({--> | ||
| 129 | + <!--name: '周小伟',--> | ||
| 130 | + <!--age: 26,--> | ||
| 131 | + <!--address: '深圳市南山区深南大道',--> | ||
| 132 | + <!--province: '广东',--> | ||
| 133 | + <!--city: '南山区',--> | ||
| 134 | + <!--zip: 100000--> | ||
| 135 | + <!--})--> | ||
| 136 | + <!--}--> | ||
| 137 | + <!--}--> | ||
| 138 | + <!--}--> | ||
| 139 | +<!--</script>--> | ||
| 140 | + | ||
| 1 | <template> | 141 | <template> |
| 2 | - <Table | ||
| 3 | - width="550" | ||
| 4 | - border | ||
| 5 | - highlight-row | ||
| 6 | - :columns="columns2" | ||
| 7 | - @on-selection-change="change2" | ||
| 8 | - :data="data3"></Table> | 142 | + <div> |
| 143 | + <i-table :data="dtData" :height="400" :columns="dtCols" border highlight-row></i-table> | ||
| 144 | + <Button type="ghost" @click="addData"> add data</Button> | ||
| 145 | + </div> | ||
| 9 | </template> | 146 | </template> |
| 10 | <script> | 147 | <script> |
| 11 | - import test from '../components/test.vue'; | ||
| 12 | export default { | 148 | export default { |
| 13 | - data () { | ||
| 14 | - return { | ||
| 15 | - columns2: [ | 149 | + data(){ |
| 150 | + return{ | ||
| 151 | + dtData:[], | ||
| 152 | + dtCols:[ | ||
| 16 | { | 153 | { |
| 17 | type: 'selection', | 154 | type: 'selection', |
| 18 | width: 60, | 155 | width: 60, |
| 19 | align: 'center' | 156 | align: 'center' |
| 20 | }, | 157 | }, |
| 21 | { | 158 | { |
| 22 | - title: '姓名', | 159 | + title: '分类名称', |
| 23 | key: 'name', | 160 | key: 'name', |
| 24 | - width: 100, | ||
| 25 | - sortable: true, | ||
| 26 | -// fixed: 'left', | ||
| 27 | -// renderHeader: (h, params) => { | ||
| 28 | -// return h('Tag', params.index) | ||
| 29 | -// } | ||
| 30 | - }, | ||
| 31 | - { | ||
| 32 | - title: '年龄', | ||
| 33 | - key: 'age', | ||
| 34 | - sortable: true, | ||
| 35 | - width: 100 | ||
| 36 | - }, | ||
| 37 | - { | ||
| 38 | - title: '省份', | ||
| 39 | - key: 'province', | ||
| 40 | - width: 100 | ||
| 41 | - }, | ||
| 42 | - { | ||
| 43 | - title: '市区', | ||
| 44 | - key: 'city', | ||
| 45 | - width: 100 | ||
| 46 | - }, | ||
| 47 | - { | ||
| 48 | - title: '地址', | ||
| 49 | - key: 'address', | ||
| 50 | - width: 200 | ||
| 51 | - }, | ||
| 52 | - { | ||
| 53 | - title: '邮编', | ||
| 54 | - key: 'zip', | ||
| 55 | - width: 100 | 161 | + sortable: true |
| 56 | }, | 162 | }, |
| 57 | { | 163 | { |
| 58 | title: '操作', | 164 | title: '操作', |
| 59 | - key: 'action', | ||
| 60 | fixed: 'right', | 165 | fixed: 'right', |
| 61 | width: 120, | 166 | width: 120, |
| 62 | render: (h, params) => { | 167 | render: (h, params) => { |
| 63 | - return h(test); | 168 | + return h('div', [ |
| 169 | + h('Button', { | ||
| 170 | + props: { | ||
| 171 | + type: 'primary', | ||
| 172 | + size: 'small' | ||
| 173 | + }, | ||
| 174 | + on: { | ||
| 175 | + click: this.edit | ||
| 176 | + }, | ||
| 177 | + }, '修改') | ||
| 178 | + ]); | ||
| 64 | } | 179 | } |
| 65 | } | 180 | } |
| 66 | - ], | ||
| 67 | - data3: [ | ||
| 68 | - { | ||
| 69 | - name: '王小明', | ||
| 70 | - age: 18, | ||
| 71 | - address: '北京市朝阳区芍药居', | ||
| 72 | - province: '北京市', | ||
| 73 | - city: '朝阳区', | ||
| 74 | - zip: 100000 | ||
| 75 | - }, | ||
| 76 | - { | ||
| 77 | - name: '张小刚', | ||
| 78 | - age: 25, | ||
| 79 | - address: '北京市海淀区西二旗', | ||
| 80 | - province: '北京市', | ||
| 81 | - city: '海淀区', | ||
| 82 | - zip: 100000 | ||
| 83 | - }, | ||
| 84 | - { | ||
| 85 | - name: '李小红', | ||
| 86 | - age: 30, | ||
| 87 | - address: '上海市浦东新区世纪大道', | ||
| 88 | - province: '上海市', | ||
| 89 | - city: '浦东新区', | ||
| 90 | - zip: 100000 | ||
| 91 | - }, | ||
| 92 | - { | ||
| 93 | - name: '周小伟', | ||
| 94 | - age: 26, | ||
| 95 | - address: '深圳市南山区深南大道', | ||
| 96 | - province: '广东', | ||
| 97 | - city: '南山区', | ||
| 98 | - zip: 100000 | ||
| 99 | - } | ||
| 100 | ] | 181 | ] |
| 101 | } | 182 | } |
| 102 | }, | 183 | }, |
| 103 | methods: { | 184 | methods: { |
| 104 | - change1 (d, l) { | ||
| 105 | -// console.log(d) | ||
| 106 | -// console.log(l) | ||
| 107 | - }, | ||
| 108 | - change2 (d, l) { | ||
| 109 | - console.log(d); | ||
| 110 | - console.log(l); | 185 | + addData () { |
| 186 | + this.dtData.push({ | ||
| 187 | + name: '发送到附件是' | ||
| 188 | + }) | ||
| 111 | } | 189 | } |
| 112 | } | 190 | } |
| 113 | } | 191 | } |
| 114 | -</script> | 192 | -</script> |
| 193 | +</script> | ||
| 115 | \ No newline at end of file | 194 | \ No newline at end of file |
src/components/dropdown/dropdown.vue
| @@ -12,7 +12,8 @@ | @@ -12,7 +12,8 @@ | ||
| 12 | ref="drop" | 12 | ref="drop" |
| 13 | @mouseenter.native="handleMouseenter" | 13 | @mouseenter.native="handleMouseenter" |
| 14 | @mouseleave.native="handleMouseleave" | 14 | @mouseleave.native="handleMouseleave" |
| 15 | - v-transfer-dom:forbidden="transfer"><slot name="list"></slot></Drop> | 15 | + :data-transfer="transfer" |
| 16 | + v-transfer-dom><slot name="list"></slot></Drop> | ||
| 16 | </transition> | 17 | </transition> |
| 17 | </div> | 18 | </div> |
| 18 | </template> | 19 | </template> |
src/components/modal/modal.vue
| 1 | <template> | 1 | <template> |
| 2 | - <div v-transfer-dom> | 2 | + <div v-transfer-dom :data-transfer="transfer"> |
| 3 | <transition :name="transitionNames[1]"> | 3 | <transition :name="transitionNames[1]"> |
| 4 | <div :class="maskClasses" v-show="visible" @click="mask"></div> | 4 | <div :class="maskClasses" v-show="visible" @click="mask"></div> |
| 5 | </transition> | 5 | </transition> |
| @@ -91,6 +91,10 @@ | @@ -91,6 +91,10 @@ | ||
| 91 | default () { | 91 | default () { |
| 92 | return ['ease', 'fade']; | 92 | return ['ease', 'fade']; |
| 93 | } | 93 | } |
| 94 | + }, | ||
| 95 | + transfer: { | ||
| 96 | + type: Boolean, | ||
| 97 | + default: true | ||
| 94 | } | 98 | } |
| 95 | }, | 99 | }, |
| 96 | data () { | 100 | data () { |
src/components/poptip/poptip.vue
| @@ -20,7 +20,8 @@ | @@ -20,7 +20,8 @@ | ||
| 20 | v-show="visible" | 20 | v-show="visible" |
| 21 | @mouseenter="handleMouseenter" | 21 | @mouseenter="handleMouseenter" |
| 22 | @mouseleave="handleMouseleave" | 22 | @mouseleave="handleMouseleave" |
| 23 | - v-transfer-dom:forbidden="transfer"> | 23 | + :data-transfer="transfer" |
| 24 | + v-transfer-dom> | ||
| 24 | <div :class="[prefixCls + '-content']"> | 25 | <div :class="[prefixCls + '-content']"> |
| 25 | <div :class="[prefixCls + '-arrow']"></div> | 26 | <div :class="[prefixCls + '-arrow']"></div> |
| 26 | <div :class="[prefixCls + '-inner']" v-if="confirm"> | 27 | <div :class="[prefixCls + '-inner']" v-if="confirm"> |
src/components/table/table.vue
| @@ -37,7 +37,7 @@ | @@ -37,7 +37,7 @@ | ||
| 37 | </table> | 37 | </table> |
| 38 | </div> | 38 | </div> |
| 39 | <div :class="[prefixCls + '-fixed']" :style="fixedTableStyle" v-if="isLeftFixed"> | 39 | <div :class="[prefixCls + '-fixed']" :style="fixedTableStyle" v-if="isLeftFixed"> |
| 40 | - <div :class="[prefixCls + '-fixed-header']" v-if="showHeader"> | 40 | + <div :class="fixedHeaderClasses" v-if="showHeader"> |
| 41 | <table-head | 41 | <table-head |
| 42 | fixed="left" | 42 | fixed="left" |
| 43 | :prefix-cls="prefixCls" | 43 | :prefix-cls="prefixCls" |
| @@ -59,7 +59,7 @@ | @@ -59,7 +59,7 @@ | ||
| 59 | </div> | 59 | </div> |
| 60 | </div> | 60 | </div> |
| 61 | <div :class="[prefixCls + '-fixed-right']" :style="fixedRightTableStyle" v-if="isRightFixed"> | 61 | <div :class="[prefixCls + '-fixed-right']" :style="fixedRightTableStyle" v-if="isRightFixed"> |
| 62 | - <div :class="[prefixCls + '-fixed-header']" v-if="showHeader"> | 62 | + <div :class="fixedHeaderClasses" v-if="showHeader"> |
| 63 | <table-head | 63 | <table-head |
| 64 | fixed="right" | 64 | fixed="right" |
| 65 | :prefix-cls="prefixCls" | 65 | :prefix-cls="prefixCls" |
| @@ -216,6 +216,14 @@ | @@ -216,6 +216,14 @@ | ||
| 216 | } | 216 | } |
| 217 | ]; | 217 | ]; |
| 218 | }, | 218 | }, |
| 219 | + fixedHeaderClasses () { | ||
| 220 | + return [ | ||
| 221 | + `${prefixCls}-fixed-header`, | ||
| 222 | + { | ||
| 223 | + [`${prefixCls}-fixed-header-with-empty`]: !this.rebuildData.length | ||
| 224 | + } | ||
| 225 | + ]; | ||
| 226 | + }, | ||
| 219 | styles () { | 227 | styles () { |
| 220 | let style = {}; | 228 | let style = {}; |
| 221 | if (this.height) { | 229 | if (this.height) { |
src/components/tooltip/tooltip.vue
| @@ -10,7 +10,8 @@ | @@ -10,7 +10,8 @@ | ||
| 10 | v-show="!disabled && (visible || always)" | 10 | v-show="!disabled && (visible || always)" |
| 11 | @mouseenter="handleShowPopper" | 11 | @mouseenter="handleShowPopper" |
| 12 | @mouseleave="handleClosePopper" | 12 | @mouseleave="handleClosePopper" |
| 13 | - v-transfer-dom:forbidden="transfer"> | 13 | + :data-transfer="transfer" |
| 14 | + v-transfer-dom> | ||
| 14 | <div :class="[prefixCls + '-content']"> | 15 | <div :class="[prefixCls + '-content']"> |
| 15 | <div :class="[prefixCls + '-arrow']"></div> | 16 | <div :class="[prefixCls + '-arrow']"></div> |
| 16 | <div :class="[prefixCls + '-inner']"><slot name="content">{{ content }}</slot></div> | 17 | <div :class="[prefixCls + '-inner']"><slot name="content">{{ content }}</slot></div> |
src/directives/transfer-dom.js
| @@ -15,8 +15,8 @@ function getTarget (node) { | @@ -15,8 +15,8 @@ function getTarget (node) { | ||
| 15 | } | 15 | } |
| 16 | 16 | ||
| 17 | const directive = { | 17 | const directive = { |
| 18 | - inserted (el, { value, arg }, vnode) { | ||
| 19 | - if (arg.forbidden) return false; | 18 | + inserted (el, { value }, vnode) { |
| 19 | + if (el.dataset.transfer !== 'true') return false; | ||
| 20 | el.className = el.className ? el.className + ' v-transfer-dom' : 'v-transfer-dom'; | 20 | el.className = el.className ? el.className + ' v-transfer-dom' : 'v-transfer-dom'; |
| 21 | const parentNode = el.parentNode; | 21 | const parentNode = el.parentNode; |
| 22 | if (!parentNode) return; | 22 | if (!parentNode) return; |
| @@ -37,8 +37,8 @@ const directive = { | @@ -37,8 +37,8 @@ const directive = { | ||
| 37 | } | 37 | } |
| 38 | } | 38 | } |
| 39 | }, | 39 | }, |
| 40 | - componentUpdated (el, { value, arg }) { | ||
| 41 | - if (arg.forbidden) return false; | 40 | + componentUpdated (el, { value }) { |
| 41 | + if (el.dataset.transfer !== 'true') return false; | ||
| 42 | // need to make sure children are done updating (vs. `update`) | 42 | // need to make sure children are done updating (vs. `update`) |
| 43 | const ref$1 = el.__transferDomData; | 43 | const ref$1 = el.__transferDomData; |
| 44 | if (!ref$1) return; | 44 | if (!ref$1) return; |
| @@ -62,8 +62,8 @@ const directive = { | @@ -62,8 +62,8 @@ const directive = { | ||
| 62 | getTarget(value).appendChild(el); | 62 | getTarget(value).appendChild(el); |
| 63 | } | 63 | } |
| 64 | }, | 64 | }, |
| 65 | - unbind (el, { arg } ) { | ||
| 66 | - if (arg.forbidden) return false; | 65 | + unbind (el) { |
| 66 | + if (el.dataset.transfer !== 'true') return false; | ||
| 67 | el.className = el.className.replace('v-transfer-dom', ''); | 67 | el.className = el.className.replace('v-transfer-dom', ''); |
| 68 | const ref$1 = el.__transferDomData; | 68 | const ref$1 = el.__transferDomData; |
| 69 | if (!ref$1) return; | 69 | if (!ref$1) return; |
src/styles/components/table.less
| @@ -268,6 +268,16 @@ | @@ -268,6 +268,16 @@ | ||
| 268 | } | 268 | } |
| 269 | &-fixed-header{ | 269 | &-fixed-header{ |
| 270 | overflow: hidden; | 270 | overflow: hidden; |
| 271 | + &-with-empty{ | ||
| 272 | + .@{table-prefix-cls}-hidden{ | ||
| 273 | + .@{table-prefix-cls}-sort{ | ||
| 274 | + display: none; | ||
| 275 | + } | ||
| 276 | + .@{table-prefix-cls}-cell span{ | ||
| 277 | + display: none; | ||
| 278 | + } | ||
| 279 | + } | ||
| 280 | + } | ||
| 271 | } | 281 | } |
| 272 | &-fixed-body{ | 282 | &-fixed-body{ |
| 273 | overflow: hidden; | 283 | overflow: hidden; |