From 2e2257e10cd45306c85d160ef76b6e4b81fd0337 Mon Sep 17 00:00:00 2001 From: fransli123 <53903341+fransli123@users.noreply.github.com> Date: Fri, 9 Aug 2019 00:17:52 +0800 Subject: [PATCH] Create switch.js --- .../runtime/components/switch.js | 193 ++++++++++++++++++ 1 file changed, 193 insertions(+) create mode 100644 src/platforms/app-plus-nvue/runtime/components/switch.js diff --git a/src/platforms/app-plus-nvue/runtime/components/switch.js b/src/platforms/app-plus-nvue/runtime/components/switch.js new file mode 100644 index 000000000..5fdfc45b6 --- /dev/null +++ b/src/platforms/app-plus-nvue/runtime/components/switch.js @@ -0,0 +1,193 @@ +import { + emitter, + listeners +} from '../mixins' + +function getSwitch (weex) { + return { + name: 'Switch', + mixins: [emitter, listeners], + props: { + name: { + type: String, + default: '' + }, + id: { + type: String, + default: '' + }, + type: { + type: String, + default: 'switch' + }, + checked: { + type: [Boolean, String], + default: false + }, + disabled: { + type: [Boolean, String], + default: false + }, + color: { + type: String, + default: '#007aff' + } + }, + data () { + return { + switchChecked: this.checked + } + }, + computed: { + switchStyle () { + return { + backgroundColor: this.color + } + } + }, + watch: { + checked (value) { + this.switchChecked = value + } + }, + created () { + this.$dispatch('Form', 'uni-form-group-update', { + type: 'add', + vm: this + }) + }, + beforeDestroy () { + this.$dispatch('Form', 'uni-form-group-update', { + type: 'remove', + vm: this + }) + }, + methods: { + _onClick ($event) { + if (this.disabled) { + return + } + this.switchChecked = !this.switchChecked + this.$trigger('change', { + value: this.switchChecked + }) + }, + _resetFormData () { + this.switchChecked = false + }, + _getFormData () { + const data = {} + if (this.name !== '') { + data['value'] = this.switchChecked + data['key'] = this.name + } + return data + } + }, + render (createElement) { + const _vm = this + return createElement('div', _vm._g({ + staticClass: ['uni-switch'], + on: { + 'click': _vm._onClick + } + }, _vm.$listeners), [(_vm.type === 'switch') ? createElement('div', { + staticClass: ['uni-switch-input'], + style: { + backgroundColor: _vm.switchChecked ? _vm.color : '#DFDFDF' + } + }, [ + createElement('div', { + staticClass: ['uni-switch-input-bg'], + style: { + backgroundColor: _vm.switchChecked ? _vm.color : '#FFFFFF' + } + }), + createElement('div', { + staticClass: ['uni-switch-input-check'], + class: [_vm.switchChecked ? 'uni-switch-input-check-checked' : ''] + }) + ]) : _vm._e(), (_vm.type === 'checkbox') ? createElement('div', { + staticClass: ['uni-checkbox-input'], + class: [_vm.switchChecked ? 'uni-checkbox-input-checked' : ''] + }, [(_vm.switchChecked) ? createElement('u-text', { + staticClass: ['uni-icon', 'uni-checkbox-input-icon'] + }, [_vm._v(_vm._s('\uEA08'))]) : _vm._e()]) : _vm._e()]) + }, + style: { + 'uni-switch': { + 'position': 'relative' + }, + 'uni-switch-input': { + 'position': 'relative', + 'width': '52', + 'height': '32', + 'borderRadius': '16', + 'backgroundColor': '#dfdfdf', + 'transitionDuration': 200, + 'transitionProperty': 'backgroundColor' + }, + 'uni-switch-input-disabled': { + 'backgroundColor': '#e1e1e1' + }, + 'uni-switch-input-bg': { + 'position': 'absolute', + 'left': 1, + 'top': 1, + 'width': '50', + 'height': '30', + 'borderRadius': '15', + 'backgroundColor': '#ffffff', + 'transitionDuration': 200, + 'transitionProperty': 'backgroundColor' + }, + 'uni-switch-input-check': { + 'pointerEvents': 'none', + 'position': 'absolute', + 'left': 1, + 'top': 1, + 'width': '30', + 'height': '30', + 'borderRadius': 50, + 'backgroundColor': '#ffffff', + 'boxShadow': '0 1px 3px #e0e0e0', + 'transitionDuration': 200, + 'transitionProperty': 'transform,backgroundColor', + 'transform': 'translateX(0)' + }, + 'uni-switch-input-check-checked': { + 'background': '#ffffff', + 'borderColor': '#ffffff', + 'transform': 'translateX(20px)' + }, + 'uni-checkbox-input': { + 'position': 'relative', + 'appearance': 'none', + 'marginRight': '5', + 'backgroundColor': '#ffffff', + 'borderStyle': 'solid', + 'borderWidth': '1', + 'borderColor': '#d1d1d1', + 'borderRadius': '3', + 'width': '22', + 'height': '22', + 'outline': 0 + }, + 'uni-checkbox-input-disabled': { + 'backgroundColor': '#e1e1e1', + 'color': '#adadad' + }, + 'uni-icon': { + 'fontFamily': 'unincomponents', + 'fontSize': '16', + 'marginLeft': '2', + 'marginTop': '2', + 'color': '#007aff' + } + } + } +} + +export default function init (Vue, weex) { + Vue.component('switch', getSwitch(weex)) +} -- GitLab