From 5bae32c726b9002fb89f7668a3cb95e528c010bf Mon Sep 17 00:00:00 2001 From: cookfront Date: Mon, 20 Feb 2017 11:49:37 +0800 Subject: [PATCH 1/8] picker component --- docs/examples/picker.md | 22 ++++ package.json | 1 - packages/picker/src/draggable.js | 51 ++++++++++ packages/picker/src/picker-column.vue | 141 ++++++++++++++++++++++++-- packages/picker/src/picker.vue | 6 +- packages/zanui-css/src/index.pcss | 1 + packages/zanui-css/src/picker.pcss | 73 +++++++++++++ src/utils/transition.js | 100 ++++++++++++++++++ 8 files changed, 385 insertions(+), 10 deletions(-) create mode 100644 packages/picker/src/draggable.js create mode 100644 packages/zanui-css/src/picker.pcss create mode 100644 src/utils/transition.js diff --git a/docs/examples/picker.md b/docs/examples/picker.md index d9c84223b..f4d8959f3 100644 --- a/docs/examples/picker.md +++ b/docs/examples/picker.md @@ -1,7 +1,29 @@ + + ## Picker组件 模仿iOS中的`UIPickerView`。 +### 基础用法 + +:::demo 基础用法 +```html + +``` +::: + ### API | 参数 | 说明 | 类型 | 默认值 | 可选值 | diff --git a/package.json b/package.json index 2090aa0d9..f10b62000 100644 --- a/package.json +++ b/package.json @@ -98,7 +98,6 @@ "rimraf": "^2.5.4", "run-sequence": "^1.2.2", "saladcss-bem": "^0.0.1", - "sass-loader": "^3.2.3", "style-loader": "^0.13.1", "theaterjs": "^3.0.0", "transliteration": "^1.1.11", diff --git a/packages/picker/src/draggable.js b/packages/picker/src/draggable.js new file mode 100644 index 000000000..4f524c986 --- /dev/null +++ b/packages/picker/src/draggable.js @@ -0,0 +1,51 @@ +import Vue from 'vue'; + +let isDragging = false; + +const supportTouch = !Vue.prototype.$isServer && 'ontouchstart' in window; + +export default function(element, options) { + const moveFn = function(event) { + if (options.drag) { + options.drag(supportTouch ? event.changedTouches[0] || event.touches[0] : event); + } + }; + + const endFn = function(event) { + if (!supportTouch) { + document.removeEventListener('mousemove', moveFn); + document.removeEventListener('mouseup', endFn); + } + document.onselectstart = null; + document.ondragstart = null; + + isDragging = false; + + if (options.end) { + options.end(supportTouch ? event.changedTouches[0] || event.touches[0] : event); + } + }; + + element.addEventListener(supportTouch ? 'touchstart' : 'mousedown', function(event) { + if (isDragging) return; + document.onselectstart = function() { return false; }; + document.ondragstart = function() { return false; }; + + if (!supportTouch) { + document.addEventListener('mousemove', moveFn); + document.addEventListener('mouseup', endFn); + } + isDragging = true; + + if (options.start) { + event.preventDefault(); + options.start(supportTouch ? event.changedTouches[0] || event.touches[0] : event); + } + }); + + if (supportTouch) { + element.addEventListener('touchmove', moveFn); + element.addEventListener('touchend', endFn); + element.addEventListener('touchcancel', endFn); + } +}; diff --git a/packages/picker/src/picker-column.vue b/packages/picker/src/picker-column.vue index b07316837..f0ab04053 100644 --- a/packages/picker/src/picker-column.vue +++ b/packages/picker/src/picker-column.vue @@ -1,14 +1,21 @@ diff --git a/packages/picker/src/picker.vue b/packages/picker/src/picker.vue index 513e33c8b..90e2d6d7a 100644 --- a/packages/picker/src/picker.vue +++ b/packages/picker/src/picker.vue @@ -1,10 +1,10 @@ From 3426ea0ac41f6ffa353a3c905bf36600396d26f2 Mon Sep 17 00:00:00 2001 From: cookfront Date: Wed, 22 Feb 2017 10:56:53 +0800 Subject: [PATCH 6/8] radio component --- packages/radio-group/index.js | 2 +- packages/radio/src/radio-group.vue | 4 ++++ packages/radio/src/radio.vue | 35 ++++++++++++++++++++++++++++-- packages/zanui-css/src/radio.pcss | 5 +++++ src/index.js | 5 ++++- 5 files changed, 47 insertions(+), 4 deletions(-) create mode 100644 packages/zanui-css/src/radio.pcss diff --git a/packages/radio-group/index.js b/packages/radio-group/index.js index 596da9a2c..6f65c1c39 100644 --- a/packages/radio-group/index.js +++ b/packages/radio-group/index.js @@ -1,3 +1,3 @@ -import RadioGroup from '../cell/src/radio-group'; +import RadioGroup from 'packages/radio/src/radio-group'; export default RadioGroup; diff --git a/packages/radio/src/radio-group.vue b/packages/radio/src/radio-group.vue index 0327fa3d1..157922b3b 100644 --- a/packages/radio/src/radio-group.vue +++ b/packages/radio/src/radio-group.vue @@ -6,6 +6,10 @@ diff --git a/packages/radio/src/radio.vue b/packages/radio/src/radio.vue index be88dbedb..cae6c3e9d 100644 --- a/packages/radio/src/radio.vue +++ b/packages/radio/src/radio.vue @@ -4,6 +4,10 @@ :class="{ 'is-disabled': disabled }"> + + + + @@ -22,10 +26,37 @@ export default { props: { disabled: Boolean, - value: {} + value: {}, + parentGroup: null }, - created() { + computed: { + isGroup() { + let parent = this.$parent; + while (parent) { + if (parent.$options.name === 'z-radio-group') { + this.parentGroup = parent; + return true; + } else { + parent = parent.$parent; + } + } + return false; + }, + + model: { + get() { + return this.isGroup ? this.parentGroup.value : this.value; + }, + + set(val) { + if (this.isGroup) { + + } else { + this.$emit('input', val); + } + } + } } }; diff --git a/packages/zanui-css/src/radio.pcss b/packages/zanui-css/src/radio.pcss new file mode 100644 index 000000000..c8ec135cd --- /dev/null +++ b/packages/zanui-css/src/radio.pcss @@ -0,0 +1,5 @@ +@component-namespace z { + @b radio { + + } +} diff --git a/src/index.js b/src/index.js index dc0270226..4fa0815ec 100644 --- a/src/index.js +++ b/src/index.js @@ -8,6 +8,7 @@ import CellGroup from '../packages/cell-group/index.js'; import Popup from '../packages/popup/index.js'; import Dialog from '../packages/dialog/index.js'; import Picker from '../packages/picker/index.js'; +import RadioGroup from '../packages/radio-group/index.js'; // zanui import '../packages/zanui-css/src/index.pcss'; @@ -23,6 +24,7 @@ const install = function(Vue) { Vue.component(CellGroup.name, CellGroup); Vue.component(Popup.name, Popup); Vue.component(Picker.name, Picker); + Vue.component(RadioGroup.name, RadioGroup); }; // auto install @@ -42,5 +44,6 @@ module.exports = { CellGroup, Popup, Dialog, - Picker + Picker, + RadioGroup }; From 396e46ef0acafe12467e3d19892bae61cd017400 Mon Sep 17 00:00:00 2001 From: jiangruowei Date: Wed, 22 Feb 2017 15:30:45 +0800 Subject: [PATCH 7/8] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E5=8A=A8?= =?UTF-8?q?=E7=94=BB=E5=8F=8A=E4=BD=BF=E7=94=A8BEM=E8=A7=84=E8=8C=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/examples/switch.md | 12 ++++++++---- packages/switch/src/switch.vue | 19 ++++++++----------- packages/zanui-css/src/switch.pcss | 20 ++++++++++---------- 3 files changed, 26 insertions(+), 25 deletions(-) diff --git a/docs/examples/switch.md b/docs/examples/switch.md index 400912c95..b77773cb3 100644 --- a/docs/examples/switch.md +++ b/docs/examples/switch.md @@ -43,13 +43,17 @@ export default { :::demo 样例代码 ```html
-
+
-
{{switchStateText}}
+
{{switchStateText}}
-
+
-
OFF, DISABLED
+
ON, DISABLED
+
+
+ +
OFF, DISABLED
``` diff --git a/packages/switch/src/switch.vue b/packages/switch/src/switch.vue index 0b8413dce..d10f30faa 100644 --- a/packages/switch/src/switch.vue +++ b/packages/switch/src/switch.vue @@ -1,6 +1,6 @@ @@ -39,15 +39,12 @@ export default { }, computed: { switchState: function() { - if (this.disabled) { - return 'disabled'; - } else if (this.loading) { - return 'loading'; - } else if (this.checked) { - return 'on'; - } else { - return 'off'; - } + let switchState = this.checked ? ['is-on'] : ['is-off']; + + if (this.disabled) switchState.push('is-disabled'); + if (this.loading) switchState.push('is-loading'); + + return switchState; } }, methods: { diff --git a/packages/zanui-css/src/switch.pcss b/packages/zanui-css/src/switch.pcss index 1199114fa..7802cb39a 100644 --- a/packages/zanui-css/src/switch.pcss +++ b/packages/zanui-css/src/switch.pcss @@ -17,28 +17,23 @@ box-shadow: 0 3px 1px 0 rgba(0, 0, 0, .05), 0 2px 2px 0 rgba(0, 0, 0, .1), 0 3px 3px 0 rgba(0, 0, 0, .05); @when on { left: 0; + transition: all .5s ease-in-out; } @when off { - right: 0; + left: 20px; + transition: all .5s ease-in-out; } - } @when on { background-color: #44db5e; border-color: #44db5e; - @descendent node { - left: 0; - } } @when off { background-color: #fff; border-color: rgba(0, 0, 0, .1); - @descendent node { - right: 0; - } } @when loading { @@ -46,8 +41,13 @@ } @when disabled { - background-color: #f2f2f2; - border-color: rgba(0, 0, 0, .1); + @when off { + background-color: #f2f2f2; + border-color: rgba(0, 0, 0, .1); + } + @when on { + background-color: #a6e7b1; + } } } } From c4b59b4a7bc30b35ef1f3b8d94cf41c0acd3df46 Mon Sep 17 00:00:00 2001 From: cookfront Date: Wed, 22 Feb 2017 18:49:50 +0800 Subject: [PATCH 8/8] component css --- packages/cell/src/cell.vue | 6 +++--- packages/field/src/field.vue | 4 ++-- packages/zanui-css/src/cell.pcss | 10 +++++----- packages/zanui-css/src/field.pcss | 18 +++++++++--------- 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/packages/cell/src/cell.vue b/packages/cell/src/cell.vue index 996bf3a12..8db64129c 100644 --- a/packages/cell/src/cell.vue +++ b/packages/cell/src/cell.vue @@ -1,15 +1,15 @@