diff --git a/doc.config.js b/doc.config.js index 93f4887a..f75364c2 100644 --- a/doc.config.js +++ b/doc.config.js @@ -54,6 +54,7 @@ module.exports = { base: 'form', label: '表单', include: { + checkbox: require('./packages/checkbox/README.md'), field: require('./packages/field/README.md'), search: require('./packages/search/README.md'), select: require('./packages/select/README.md'), diff --git a/example/app.json b/example/app.json index 2942c672..07c44601 100644 --- a/example/app.json +++ b/example/app.json @@ -3,6 +3,7 @@ "pages/dashboard/index", "pages/actionsheet/index", "pages/btn/index", + "pages/checkbox/index", "pages/badge/index", "pages/capsule/index", "pages/card/index", diff --git a/example/pages/checkbox/index.js b/example/pages/checkbox/index.js new file mode 100644 index 00000000..eeeb5de5 --- /dev/null +++ b/example/pages/checkbox/index.js @@ -0,0 +1,17 @@ +var Zan = require('../../dist/index'); + +Page({ + + data: { + items: [ + {value: 'a'}, + {value: 'b', checked: true}, + {value: 'c'}, + ] + }, + + handleCheckboxChange: function(e) { + console.log('checkbox发生change事件,携带value值为:', e.detail) + console.log('items:', this.data.items) + } +}); diff --git a/example/pages/checkbox/index.json b/example/pages/checkbox/index.json new file mode 100644 index 00000000..11aa52e5 --- /dev/null +++ b/example/pages/checkbox/index.json @@ -0,0 +1,10 @@ +{ + "navigationBarTitleText": "Checkbox 选择", + "usingComponents": { + "zan-checkbox-group": "../../dist/checkbox-group/index", + "zan-checkbox": "../../dist/checkbox/index", + "zan-panel": "../../dist/panel/index", + "zan-cell": "../../dist/cell/index", + "doc-page": "../../components/doc-page/index" + } +} diff --git a/example/pages/checkbox/index.wxml b/example/pages/checkbox/index.wxml new file mode 100644 index 00000000..bcd09418 --- /dev/null +++ b/example/pages/checkbox/index.wxml @@ -0,0 +1,43 @@ + + + 复选框 + + + + 复选框 + + + + 复选框 + + + + + 复选框 {{ item.value }} + + + + + 复选框 a + 复选框 b + 复选框 c + + diff --git a/example/pages/checkbox/index.wxss b/example/pages/checkbox/index.wxss new file mode 100644 index 00000000..f4a72014 --- /dev/null +++ b/example/pages/checkbox/index.wxss @@ -0,0 +1,4 @@ +.checkbox-demo { + display: block; + margin: 15px 0; +} diff --git a/example/pages/dashboard/config.js b/example/pages/dashboard/config.js index d0124375..c04b7929 100644 --- a/example/pages/dashboard/config.js +++ b/example/pages/dashboard/config.js @@ -17,6 +17,9 @@ export default { }, { name: 'Cell 单元格', path: '/pages/cell/index' + }, { + name: 'Checkbox 复选框', + path: '/pages/checkbox/index' }, { name: 'Helper 基础样式', path: '/pages/helper/index' diff --git a/packages/checkbox-group/index.js b/packages/checkbox-group/index.js new file mode 100644 index 00000000..8b9a8a80 --- /dev/null +++ b/packages/checkbox-group/index.js @@ -0,0 +1,26 @@ +const CHECKBOX_PATH = '../checkbox/index'; + +Component({ + relations: { + [CHECKBOX_PATH]: { + type: 'child', + linked() { + this.updateChildren(CHECKBOX_PATH); + } + } + }, + + data: { + elementUpdateTimeout: 0 + }, + + methods: { + updateChildren(childPath) { // 把checkbox标记为在group中,设置不同样式 + let elements = this.getRelationNodes(childPath); + + elements.forEach((checkbox, index) => { + checkbox.updateData({ isInGroup: true}); + }); + } + } +}); diff --git a/packages/checkbox-group/index.json b/packages/checkbox-group/index.json new file mode 100644 index 00000000..32640e0d --- /dev/null +++ b/packages/checkbox-group/index.json @@ -0,0 +1,3 @@ +{ + "component": true +} \ No newline at end of file diff --git a/packages/checkbox-group/index.pcss b/packages/checkbox-group/index.pcss new file mode 100644 index 00000000..099d5e19 --- /dev/null +++ b/packages/checkbox-group/index.pcss @@ -0,0 +1,7 @@ +.checkbox-group { + padding-bottom: 10px; + background-color: #fff; +} +.checkbox-group .zan-checkbox { + margin-top: 10px; +} diff --git a/packages/checkbox-group/index.wxml b/packages/checkbox-group/index.wxml new file mode 100644 index 00000000..a6ef51f8 --- /dev/null +++ b/packages/checkbox-group/index.wxml @@ -0,0 +1,3 @@ + + + diff --git a/packages/checkbox/README.md b/packages/checkbox/README.md new file mode 100644 index 00000000..c8c48c41 --- /dev/null +++ b/packages/checkbox/README.md @@ -0,0 +1,100 @@ +## Checkbox 复选框 + +### 使用指南 +在 index.json 中引入组件 +```json +{ + "usingComponents": { + "zan-checkbox": "/packages/checkbox/index" + } +} +``` + +### 代码演示 + +#### 基础用法 + +```html +复选框 +``` + +#### 基础用法 + +```html +复选框 +``` + +#### 禁用状态 + +```html +复选框 +``` + +#### 禁用内容部分点击事件 + +```html +复选框 +``` + +#### Checkbox组 + +```html + + 复选框 {{ item.name }} + +``` + +```js +Page({ + data: { + items: [ + {value: 'a'}, + {value: 'b', checked: true}, + {value: 'c'}, + ] + } +}); +``` + +#### 列表模式 + +```html +复选框 a +复选框 b +复选框 c +``` + +### 参数 +| 参数 | 说明 | 类型 | 默认值 | 必须 | +|-----------|-----------|-----------|-------------|-------------| +| checked | 是否选中 | Boolean| false | | +| disabled | 是否可用 | Boolean| false | | +| labelDisabled | 文字区域是否可选 | Boolean | false | | +| type | 显示类型 | String | - | | + +### 事件 + +| 事件名称 | 说明 | 回调参数 | +| ---- | --- | ---| +| change | 数值改变时修改 | checked值| diff --git a/packages/checkbox/index.js b/packages/checkbox/index.js new file mode 100644 index 00000000..a74cd7ac --- /dev/null +++ b/packages/checkbox/index.js @@ -0,0 +1,42 @@ +const CHECKBOX_GROUP_PATH = '../checkbox-group/index'; + +Component({ + externalClasses: ['checkbox-class'], + relations: { + [CHECKBOX_GROUP_PATH]: { + type: 'parent' + } + }, + + properties: { + checked: Boolean, + disabled: Boolean, + isInGroup: Boolean, + labelDisabled: Boolean, + type: String + }, + + data() { + return { + isInGroup: false, + isInCell: false + } + }, + + methods: { + handleClick() { + if (this.data.disabled) { + return; + } + + const checked = !this.data.checked; + + this.triggerEvent('change', checked) + this.setData({ checked }) + }, + + updateData(data) { + this.setData(data); + } + } +}); diff --git a/packages/checkbox/index.json b/packages/checkbox/index.json new file mode 100644 index 00000000..fc0d0bf9 --- /dev/null +++ b/packages/checkbox/index.json @@ -0,0 +1,6 @@ +{ + "component": true, + "usingComponents": { + "zan-icon": "../icon/index" + } +} diff --git a/packages/checkbox/index.pcss b/packages/checkbox/index.pcss new file mode 100644 index 00000000..513bb7a8 --- /dev/null +++ b/packages/checkbox/index.pcss @@ -0,0 +1,39 @@ +.zan-checkbox { + display: inline-block; + padding: 0 10px; + font-size: 14px; + + &__item { + display: block; + margin-top: 10px; + } + + &__list-item { + display: block; + padding: 10px 10px 10px 0; + margin-left: 10px; + border-bottom: 1px solid #e5e5e5; + .zan-checkbox__icon { + float: right; + } + } + + &__icon { + display: inline-flex; + align-items: center; + color: #aaa; + + &.zan-checkbox--checked { + color: #06bf04; + } + + &.zan-checkbox--disabled { + color: #e5e5e5; + } + } + + &__label { + display: inline-block; + margin-left: 10px; + } +} diff --git a/packages/checkbox/index.wxml b/packages/checkbox/index.wxml new file mode 100644 index 00000000..6684fd04 --- /dev/null +++ b/packages/checkbox/index.wxml @@ -0,0 +1,25 @@ + + + + + + + + +function getColor(color) { + color = color || '#ff4444' + return color; +} + +module.exports = { + getColor: getColor +}; +