From 70ce3838a2939023f280e9c7bc8a014ab8c0ba71 Mon Sep 17 00:00:00 2001 From: neverland Date: Fri, 2 Feb 2018 19:50:29 +0800 Subject: [PATCH 1/5] [bugfix] TreeSelect: arrow position error (#605) --- packages/vant-css/src/tree-select.css | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/vant-css/src/tree-select.css b/packages/vant-css/src/tree-select.css index e47b6db13..130d32118 100644 --- a/packages/vant-css/src/tree-select.css +++ b/packages/vant-css/src/tree-select.css @@ -54,5 +54,6 @@ right: 0; top: 0; bottom: 0; + line-height: inherit; } } From 41df4b481915c29aa8fed5e6cc48062de20fc43b Mon Sep 17 00:00:00 2001 From: neverland Date: Mon, 5 Feb 2018 17:52:43 +0800 Subject: [PATCH 2/5] [new feature] add Circle component (#608) --- docs/demos/common.js | 4 + docs/demos/index.js | 1 + docs/demos/views/circle.vue | 78 +++++++++++++++++++ docs/markdown/en-US/circle.md | 69 +++++++++++++++++ docs/markdown/index.js | 2 + docs/markdown/zh-CN/circle.md | 70 +++++++++++++++++ docs/src/doc.config.js | 8 ++ packages/circle/index.vue | 126 +++++++++++++++++++++++++++++++ packages/index.js | 3 + packages/vant-css/src/circle.css | 32 ++++++++ packages/vant-css/src/index.css | 3 +- test/unit/specs/circle.spec.js | 65 ++++++++++++++++ 12 files changed, 460 insertions(+), 1 deletion(-) create mode 100644 docs/demos/views/circle.vue create mode 100644 docs/markdown/en-US/circle.md create mode 100644 docs/markdown/zh-CN/circle.md create mode 100644 packages/circle/index.vue create mode 100644 packages/vant-css/src/circle.css create mode 100644 test/unit/specs/circle.spec.js diff --git a/docs/demos/common.js b/docs/demos/common.js index 21757d521..b2f7f208b 100644 --- a/docs/demos/common.js +++ b/docs/demos/common.js @@ -31,6 +31,8 @@ Vue.component('demo-section', DemoSection); Locale.add({ 'zh-CN': { + add: '增加', + decrease: '减少', red: '红色', orange: '橙色', yellow: '黄色', @@ -56,6 +58,8 @@ Locale.add({ passwordPlaceholder: '请输入密码' }, 'en-US': { + add: 'Add', + decrease: 'Decrease', red: 'Red', orange: 'Orange', yellow: 'Yellow', diff --git a/docs/demos/index.js b/docs/demos/index.js index 7a6113cf3..a3c210b92 100644 --- a/docs/demos/index.js +++ b/docs/demos/index.js @@ -31,6 +31,7 @@ export default { 'cell-swipe': asyncWrapper(r => require.ensure([], () => r(componentWrapper(require('./views/cell-swipe'), 'cell-swipe')), 'cell-swipe')), 'cell': asyncWrapper(r => require.ensure([], () => r(componentWrapper(require('./views/cell'), 'cell')), 'cell')), 'checkbox': asyncWrapper(r => require.ensure([], () => r(componentWrapper(require('./views/checkbox'), 'checkbox')), 'checkbox')), + 'circle': asyncWrapper(r => require.ensure([], () => r(componentWrapper(require('./views/circle'), 'circle')), 'circle')), 'contact': asyncWrapper(r => require.ensure([], () => r(componentWrapper(require('./views/contact'), 'contact')), 'contact')), 'coupon': asyncWrapper(r => require.ensure([], () => r(componentWrapper(require('./views/coupon'), 'coupon')), 'coupon')), 'datetime-picker': asyncWrapper(r => require.ensure([], () => r(componentWrapper(require('./views/datetime-picker'), 'datetime-picker')), 'datetime-picker')), diff --git a/docs/demos/views/circle.vue b/docs/demos/views/circle.vue new file mode 100644 index 000000000..276724745 --- /dev/null +++ b/docs/demos/views/circle.vue @@ -0,0 +1,78 @@ + + + + + diff --git a/docs/markdown/en-US/circle.md b/docs/markdown/en-US/circle.md new file mode 100644 index 000000000..5e1bb8cda --- /dev/null +++ b/docs/markdown/en-US/circle.md @@ -0,0 +1,69 @@ +## Circle + +### Install +``` javascript +import { Circle } from 'vant'; + +Vue.use(Circle); +``` + +### Usage + +#### Basic Usage + +```html + +``` + +``` javascript +export default { + data() { + return { + currentRate: 0 + }; + }, + computed: { + text() { + return this.currentRate.toFixed(0) + '%' + } + } +}; +``` + +#### Custom style + +```html + +``` + + +### API + +| Attribute | Description | Type | Default | Accepted Values | +|-----------|-----------|-----------|-------------|-------------| +| v-model | Current rate | `Number` | - | - | +| rate | Target rate | `Number` | `100` | - | +| size | Circle size | `String` | `100px` | - | +| color | Progress bar color | `String` | `#38f` | - | +| layer-color | Layer color | `String` | `#fff` | - | +| fill | Fill color | `String` | `none` | - | +| speed | Animate speed(rate/s)| `Number` | - | - | +| text | Text | `String` | - | - | +| stroke-width | Stroke width | `Number` | `40` | - | +| clockwise | Is clockwise | `Boolean` | `true` | - | diff --git a/docs/markdown/index.js b/docs/markdown/index.js index 124f4cefe..e5108c2a8 100644 --- a/docs/markdown/index.js +++ b/docs/markdown/index.js @@ -25,6 +25,7 @@ export default { 'zh-CN/changelog-generated': wrapper(r => require.ensure([], () => r(require('./zh-CN/changelog-generated.md')), 'zh-CN/changelog-generated')), 'zh-CN/changelog': wrapper(r => require.ensure([], () => r(require('./zh-CN/changelog.md')), 'zh-CN/changelog')), 'zh-CN/checkbox': wrapper(r => require.ensure([], () => r(require('./zh-CN/checkbox.md')), 'zh-CN/checkbox')), + 'zh-CN/circle': wrapper(r => require.ensure([], () => r(require('./zh-CN/circle.md')), 'zh-CN/circle')), 'zh-CN/contact': wrapper(r => require.ensure([], () => r(require('./zh-CN/contact.md')), 'zh-CN/contact')), 'zh-CN/coupon': wrapper(r => require.ensure([], () => r(require('./zh-CN/coupon.md')), 'zh-CN/coupon')), 'zh-CN/datetime-picker': wrapper(r => require.ensure([], () => r(require('./zh-CN/datetime-picker.md')), 'zh-CN/datetime-picker')), @@ -77,6 +78,7 @@ export default { 'en-US/cell': wrapper(r => require.ensure([], () => r(require('./en-US/cell.md')), 'en-US/cell')), 'en-US/changelog': wrapper(r => require.ensure([], () => r(require('./en-US/changelog.md')), 'en-US/changelog')), 'en-US/checkbox': wrapper(r => require.ensure([], () => r(require('./en-US/checkbox.md')), 'en-US/checkbox')), + 'en-US/circle': wrapper(r => require.ensure([], () => r(require('./en-US/circle.md')), 'en-US/circle')), 'en-US/contact': wrapper(r => require.ensure([], () => r(require('./en-US/contact.md')), 'en-US/contact')), 'en-US/coupon': wrapper(r => require.ensure([], () => r(require('./en-US/coupon.md')), 'en-US/coupon')), 'en-US/datetime-picker': wrapper(r => require.ensure([], () => r(require('./en-US/datetime-picker.md')), 'en-US/datetime-picker')), diff --git a/docs/markdown/zh-CN/circle.md b/docs/markdown/zh-CN/circle.md new file mode 100644 index 000000000..e0c2fee3e --- /dev/null +++ b/docs/markdown/zh-CN/circle.md @@ -0,0 +1,70 @@ +## Circle 环形进度条 + +### 使用指南 +``` javascript +import { Circle } from 'vant'; + +Vue.use(Circle); +``` + +### 代码演示 + +#### 基础用法 +通过 `rate` 指定目标进度,`v-model` 代表当前进度,`speed` 控制动画速度 + +```html + +``` + +``` javascript +export default { + data() { + return { + currentRate: 0 + }; + }, + computed: { + text() { + return this.currentRate.toFixed(0) + '%' + } + } +}; +``` + +#### 样式定制 + +```html + +``` + + +### API + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | +|-----------|-----------|-----------|-------------|-------------| +| v-model | 当前进度 | `Number` | - | - | +| rate | 目标进度 | `Number` | `100` | - | +| size | 圆环直径 | `String` | `100px` | - | +| color | 进度条颜色 | `String` | `#38f` | - | +| layer-color | 轨道颜色 | `String` | `#fff` | - | +| fill | 填充颜色 | `String` | `none` | - | +| speed | 动画速度(单位为 rate/s)| `Number` | - | - | +| text | 文字 | `String` | - | - | +| stroke-width | 进度条宽度 | `Number` | `40` | - | +| clockwise | 是否顺时针增加 | `Boolean` | `true` | - | diff --git a/docs/src/doc.config.js b/docs/src/doc.config.js index c14fd4b24..f439eb013 100644 --- a/docs/src/doc.config.js +++ b/docs/src/doc.config.js @@ -80,6 +80,10 @@ module.exports = { path: '/cell', title: 'Cell - 单元格' }, + { + path: '/circle', + title: 'Circle - 环形进度条' + }, { path: '/icon', title: 'Icon - 图标' @@ -358,6 +362,10 @@ module.exports = { path: '/cell', title: 'Cell' }, + { + path: '/circle', + title: 'Circle' + }, { path: '/icon', title: 'Icon' diff --git a/packages/circle/index.vue b/packages/circle/index.vue new file mode 100644 index 000000000..1040124da --- /dev/null +++ b/packages/circle/index.vue @@ -0,0 +1,126 @@ + + + diff --git a/packages/index.js b/packages/index.js index cbd7e654f..f0c6cd13c 100644 --- a/packages/index.js +++ b/packages/index.js @@ -12,6 +12,7 @@ import CellGroup from './cell-group'; import CellSwipe from './cell-swipe'; import Checkbox from './checkbox'; import CheckboxGroup from './checkbox-group'; +import Circle from './circle'; import Col from './col'; import ContactCard from './contact-card'; import ContactEdit from './contact-edit'; @@ -77,6 +78,7 @@ const components = [ CellSwipe, Checkbox, CheckboxGroup, + Circle, Col, ContactCard, ContactEdit, @@ -149,6 +151,7 @@ export { CellSwipe, Checkbox, CheckboxGroup, + Circle, Col, ContactCard, ContactEdit, diff --git a/packages/vant-css/src/circle.css b/packages/vant-css/src/circle.css new file mode 100644 index 000000000..49eb936db --- /dev/null +++ b/packages/vant-css/src/circle.css @@ -0,0 +1,32 @@ +@import './common/var.css'; + +.van-circle { + position: relative; + text-align: center; + display: inline-block; + + svg { + top: 0; + left: 0; + width: 100%; + height: 100%; + position: absolute; + } + + &__layer { + fill: none; + stroke-dasharray: 3140px; + stroke-dashoffset: 3140px; + transform: rotate(90deg); + transform-origin: 530px 530px; + } + + &__text { + top: 50%; + left: 0; + width: 100%; + color: $text-color; + position: absolute; + transform: translateY(-50%); + } +} diff --git a/packages/vant-css/src/index.css b/packages/vant-css/src/index.css index a0ec70bd4..e2f140575 100644 --- a/packages/vant-css/src/index.css +++ b/packages/vant-css/src/index.css @@ -12,7 +12,7 @@ @import './badge.css'; @import './button.css'; @import './cell.css'; -@import './card.css'; +@import './circle.css'; @import './loading.css'; @import './nav-bar.css'; @import './notice-bar.css'; @@ -53,6 +53,7 @@ /* business components */ @import './address-edit.css'; @import './address-list.css'; +@import './card.css'; @import './contact-card.css'; @import './contact-list.css'; @import './contact-edit.css'; diff --git a/test/unit/specs/circle.spec.js b/test/unit/specs/circle.spec.js new file mode 100644 index 000000000..7fff94e7c --- /dev/null +++ b/test/unit/specs/circle.spec.js @@ -0,0 +1,65 @@ +import { mount } from 'avoriaz'; +import Circle from 'packages/circle'; + +describe('Circle', () => { + let wrapper; + afterEach(() => { + wrapper && wrapper.destroy(); + }); + + it('create a circle', () => { + wrapper = mount(Circle, { + propsData: { + text: 'test' + } + }); + + expect(wrapper.hasClass('van-circle')).to.be.true; + expect(wrapper.find('.van-circle__text')[0].text()).to.equal('test'); + }); + + it('circle rate', done => { + let currentRate = 0; + wrapper = mount(Circle, { + propsData: { + rate: 0, + value: 0, + clockwise: false + } + }); + wrapper.vm.$on('input', rate => { + currentRate = rate; + }); + wrapper.vm.rate = 50; + + setTimeout(() => { + expect(currentRate).to.equal(50); + done(); + }, 100); + }); + + it('circle animation', done => { + let currentRate = 0; + wrapper = mount(Circle, { + propsData: { + rate: 0, + value: 0, + speed: 500, + clockwise: false + } + }); + wrapper.vm.$on('input', rate => { + currentRate = rate; + }); + wrapper.vm.rate = 50; + + setTimeout(() => { + expect(currentRate === 50).to.be.false; + setTimeout(() => { + expect(currentRate === 50).to.be.true; + done(); + }, 200); + }, 50); + }); +}); + From 3556d5e7d193bd8564e8001ec3f7c5dcae07b2e9 Mon Sep 17 00:00:00 2001 From: neverland Date: Tue, 6 Feb 2018 14:14:56 +0800 Subject: [PATCH 3/5] [bugfix] Picker: style error in some andriod devices (#609) --- packages/vant-css/src/picker.css | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/packages/vant-css/src/picker.css b/packages/vant-css/src/picker.css index c24923b30..b2cabe9ad 100644 --- a/packages/vant-css/src/picker.css +++ b/packages/vant-css/src/picker.css @@ -7,8 +7,10 @@ background-color: $white; &__toolbar { + display: flex; height: 40px; line-height: 40px; + justify-content: space-between; } &__cancel, @@ -21,14 +23,6 @@ } } - &__cancel { - float: left; - } - - &__confirm { - float: right; - } - &__title { text-align: center; @mixin ellipsis; @@ -52,11 +46,11 @@ &-column { flex: 1; overflow: hidden; - font-size: 18px; + font-size: 16px; text-align: center; li { - padding: 0 10px; + padding: 0 5px; color: $gray-darker; @mixin ellipsis; } From 30e42284e9577ae56aa568a0bf03d804dbcc3e0a Mon Sep 17 00:00:00 2001 From: neverland Date: Tue, 6 Feb 2018 19:55:40 +0800 Subject: [PATCH 4/5] [new feature] Popup: support getContaienr (#611) --- docs/markdown/en-US/actionsheet.md | 1 + docs/markdown/en-US/popup.md | 1 + docs/markdown/en-US/sku.md | 1 + docs/markdown/zh-CN/actionsheet.md | 1 + docs/markdown/zh-CN/popup.md | 1 + docs/markdown/zh-CN/sku.md | 1 + packages/actionsheet/index.vue | 4 -- packages/coupon-list/index.vue | 2 - packages/mixins/popup/index.js | 51 ++++++++++++++++------- packages/mixins/popup/manager.js | 1 + packages/picker/PickerColumn.vue | 1 + packages/picker/index.vue | 2 +- packages/popup/index.vue | 6 --- packages/sku/Sku.vue | 10 ++++- packages/sku/components/SkuHeader.vue | 2 +- packages/steps/index.vue | 2 +- packages/tabs/index.vue | 2 +- packages/tree-select/index.vue | 4 +- packages/vant-css/src/base.css | 1 + packages/vant-css/src/common/ellipsis.css | 5 +++ packages/vant-css/src/picker.css | 6 +-- packages/vant-css/src/sku.css | 3 -- packages/vant-css/src/steps.css | 2 - packages/vant-css/src/tab.css | 2 - packages/vant-css/src/tree-select.css | 2 - test/unit/specs/popup.spec.js | 24 ++++++++++- 26 files changed, 91 insertions(+), 47 deletions(-) create mode 100644 packages/vant-css/src/common/ellipsis.css diff --git a/docs/markdown/en-US/actionsheet.md b/docs/markdown/en-US/actionsheet.md index 4bc0502c5..6a58204ed 100644 --- a/docs/markdown/en-US/actionsheet.md +++ b/docs/markdown/en-US/actionsheet.md @@ -61,6 +61,7 @@ Actionsheet will get another style if there is a `title` prop. | cancel-text | Text of cancel button | `String` | - | - | | overlay | Whether to show overlay | `Boolean` | - | - | | close-on-click-overlay | Whether to close when click overlay | `Boolean` | - | - | +| get-container | Return the mount node for actionsheet | `Function` | - | `() => HTMLElement` | ### Data struct of actions diff --git a/docs/markdown/en-US/popup.md b/docs/markdown/en-US/popup.md index a87291505..4c7474c94 100644 --- a/docs/markdown/en-US/popup.md +++ b/docs/markdown/en-US/popup.md @@ -48,3 +48,4 @@ Use `position` prop to set popup display position | close-on-click-overlay | Close popup when click overlay | `Boolean` | `true` | - | | transition | Transition | `String` | `popup-slide` | - | | prevent-scroll | Prevent background scroll | `Boolean` | `false` | - | +| get-container | Return the mount node for Popup | `Function` | - | `() => HTMLElement` | diff --git a/docs/markdown/en-US/sku.md b/docs/markdown/en-US/sku.md index 3c35d5bf3..d2b99a8c8 100644 --- a/docs/markdown/en-US/sku.md +++ b/docs/markdown/en-US/sku.md @@ -90,6 +90,7 @@ Vue.use(Sku); | disable-stepper-input | Whether to disable stepper input | `Boolean` | `false` | - | | stepper-title | Quantity title | `String` | `Quantity` | - | | custom-stepper-config | Custom stepper related config | `Object` | `{}` | - | +| get-container | Return the mount node for sku | `Function` | - | `() => HTMLElement` | ### Event diff --git a/docs/markdown/zh-CN/actionsheet.md b/docs/markdown/zh-CN/actionsheet.md index 310808041..a91d53b94 100644 --- a/docs/markdown/zh-CN/actionsheet.md +++ b/docs/markdown/zh-CN/actionsheet.md @@ -72,6 +72,7 @@ export default { | cancel-text | 取消按钮文案 | `String` | - | - | | overlay | 是否显示遮罩 | `Boolean` | - | - | | close-on-click-overlay | 点击遮罩是否关闭`Actionsheet` | `Boolean` | - | - | +| get-container | 指定挂载的 HTML 节点 | `Function` | - | `() => HTMLElement` | ### actions diff --git a/docs/markdown/zh-CN/popup.md b/docs/markdown/zh-CN/popup.md index e0ed9e492..47b33a47b 100644 --- a/docs/markdown/zh-CN/popup.md +++ b/docs/markdown/zh-CN/popup.md @@ -48,3 +48,4 @@ export default { | close-on-click-overlay | 点击蒙层是否关闭 Popup | `Boolean` | `true` | - | | transition | transition 名称 | `String` | `popup-slide` | - | | prevent-scroll | 是否防止滚动穿透 | `Boolean` | `false` | - | +| get-container | 指定弹出层挂载的 HTML 节点 | `Function` | - | `() => HTMLElement` | diff --git a/docs/markdown/zh-CN/sku.md b/docs/markdown/zh-CN/sku.md index 21b4f3a19..a2f616d9b 100644 --- a/docs/markdown/zh-CN/sku.md +++ b/docs/markdown/zh-CN/sku.md @@ -91,6 +91,7 @@ Vue.use(Sku); | disable-stepper-input | 是否禁用sku中stepper的input框 | `Boolean` | `false` | - | | stepper-title | 数量选择组件左侧文案 | `String` | `购买数量` | - | | custom-stepper-config | 步进器相关自定义配置 | `Object` | `{}` | - | +| get-container | 指定挂载的 HTML 节点 | `Function` | - | `() => HTMLElement` | ### Event diff --git a/packages/actionsheet/index.vue b/packages/actionsheet/index.vue index ec1333ffa..0cc15f580 100644 --- a/packages/actionsheet/index.vue +++ b/packages/actionsheet/index.vue @@ -60,10 +60,6 @@ export default create({ } }, - mounted() { - this.value && this.open(); - }, - methods: { onClickItem(item) { if (typeof item.callback === 'function') { diff --git a/packages/coupon-list/index.vue b/packages/coupon-list/index.vue index b3dddeda5..a2e40cc17 100644 --- a/packages/coupon-list/index.vue +++ b/packages/coupon-list/index.vue @@ -53,7 +53,6 @@ import Cell from '../cell'; import CellGroup from '../cell-group'; import CouponItem from './Item'; import Field from '../field'; -import Popup from '../popup'; import VanButton from '../button'; export default create({ @@ -64,7 +63,6 @@ export default create({ Cell, CellGroup, Field, - Popup, CouponItem }, diff --git a/packages/mixins/popup/index.js b/packages/mixins/popup/index.js index 7b51213ea..399f38edf 100644 --- a/packages/mixins/popup/index.js +++ b/packages/mixins/popup/index.js @@ -19,6 +19,8 @@ export default { zIndex: [String, Number], // prevent touchmove scroll preventScroll: Boolean, + // return the mount node for popup + getContainer: Function, // prevent body scroll lockOnScroll: { type: Boolean, @@ -26,17 +28,8 @@ export default { } }, - watch: { - value(val) { - this[val ? 'open' : 'close'](); - } - }, - - beforeMount() { - this._popupId = 'popup-' + context.plusKey('idSeed'); - }, - data() { + this._popupId = 'popup-' + context.plusKey('idSeed'); return { opened: false, pos: { @@ -46,6 +39,29 @@ export default { }; }, + watch: { + value(val) { + this[val ? 'open' : 'close'](); + }, + + getContainer() { + this.move(); + } + }, + + mounted() { + if (this.getContainer) { + this.move(); + } + if (this.value) { + this.open(); + } + }, + + beforeDestroy() { + this.doAfterClose(); + }, + methods: { recordPosition(e) { this.pos = { @@ -65,12 +81,14 @@ export default { let status = '11'; + /* istanbul ignore next */ if (scrollTop === 0) { status = offsetHeight >= scrollHeight ? '00' : '01'; } else if (scrollTop + offsetHeight >= scrollHeight) { status = '10'; } + /* istanbul ignore next */ if ( status !== '11' && isVertical && @@ -82,6 +100,7 @@ export default { }, open() { + /* istanbul ignore next */ if (this.opened || this.$isServer) { return; } @@ -137,10 +156,14 @@ export default { off(document, 'touchstart', this.recordPosition); off(document, 'touchmove', this.watchTouchMove); } - } - }, + }, - beforeDestroy() { - this.doAfterClose(); + move() { + if (this.getContainer) { + this.getContainer().appendChild(this.$el); + } else if (this.$parent) { + this.$parent.$el.appendChild(this.$el); + } + } } }; diff --git a/packages/mixins/popup/manager.js b/packages/mixins/popup/manager.js index 319c8da89..bf2e1c104 100644 --- a/packages/mixins/popup/manager.js +++ b/packages/mixins/popup/manager.js @@ -41,6 +41,7 @@ const manager = { const { id, dom } = config; const exist = context.stack.some(item => item.id === id); + /* istanbul ignore next */ if (!exist) { const targetNode = dom && dom.parentNode && dom.parentNode.nodeType !== 11 ? dom.parentNode : document.body; context.stack.push({ instance, id, config, targetNode }); diff --git a/packages/picker/PickerColumn.vue b/packages/picker/PickerColumn.vue index 365973601..97e6da7e1 100644 --- a/packages/picker/PickerColumn.vue +++ b/packages/picker/PickerColumn.vue @@ -13,6 +13,7 @@
  • {{ cancelButtonText || $t('cancel') }}
    +
    {{ confirmButtonText || $t('confirm') }}
    -
    diff --git a/packages/popup/index.vue b/packages/popup/index.vue index 9700ce2ce..a6291cfa5 100644 --- a/packages/popup/index.vue +++ b/packages/popup/index.vue @@ -41,12 +41,6 @@ export default create({ currentValue: false, currentTransition: transition }; - }, - - mounted() { - if (this.value) { - this.open(); - } } }); diff --git a/packages/sku/Sku.vue b/packages/sku/Sku.vue index 7d503a2ab..828b46589 100644 --- a/packages/sku/Sku.vue +++ b/packages/sku/Sku.vue @@ -1,5 +1,12 @@