@@ -50,11 +53,10 @@ Vue.component(Card.name, Card);
| 参数 | 说明 | 类型 | 默认值 | 可选值 |
|-----------|-----------|-----------|-------------|-------------|
-| thumb | 左侧图片 | `string` | | |
-| title | 标题 | `string` | | |
-| desc | 描述 | `string` | | |
-| centered | 内容是否垂直居中 | `string` | `false` | |
-
+| thumb | 左侧图片 | `String` | - | - |
+| title | 标题 | `String` | - | - |
+| desc | 描述 | `String` | - | - |
+| centered | 内容是否垂直居中 | `String` | `false` | - |
### Slot
@@ -62,6 +64,6 @@ Vue.component(Card.name, Card);
|-----------|-----------|
| title | 自定义标题 |
| desc | 自定义描述 |
-| tags | 自定义tags |
-| thumb | 自定义thumb |
-| footer | 自定义footer |
+| tags | 自定义 tags |
+| thumb | 自定义 thumb |
+| footer | 自定义 footer |
diff --git a/docs/examples-docs/cell-swipe.md b/docs/examples-docs/cell-swipe.md
index 45225aabd..a16494da7 100644
--- a/docs/examples-docs/cell-swipe.md
+++ b/docs/examples-docs/cell-swipe.md
@@ -1,6 +1,6 @@
## CellSwipe 滑动单元格
@@ -36,22 +32,21 @@ Vue.component(CellSwipe.name, CellSwipe);
:::demo 基础用法
```html
+ 选择
- 删除
- 选择
+ 删除
```
:::
-
### API
| 参数 | 说明 | 类型 | 默认值 | 可选值 |
|-----------|-----------|-----------|-------------|-------------|
-| left-width | 左侧滑动按钮宽度 | `number` | 0 | |
-| right-width | 右侧滑动按钮宽度 | `number` | 0 | |
+| left-width | 左侧滑动区域宽度 | `Number` | `0` | - |
+| right-width | 右侧滑动区域宽度 | `Number` | `0` | - |
### Slot
diff --git a/docs/examples-docs/cell.md b/docs/examples-docs/cell.md
index b2566b15a..bbad3c505 100644
--- a/docs/examples-docs/cell.md
+++ b/docs/examples-docs/cell.md
@@ -8,6 +8,21 @@ export default {
};
+
+
## Cell 单元格
### 使用指南
@@ -22,86 +37,66 @@ Vue.component(CellGroup.name, CellGroup);
#### 基础用法
-你可以将`van-cell-group`组件看成一个容器即可。
+将`van-cell-group`组件看成一个容器即可
:::demo 基础用法
```html
-
+
```
:::
#### 只设置value
-
-只设置`value`时会向左对齐。
+只设置`value`时会向左对齐
:::demo 只设置value
```html
-
-
+
```
:::
-#### 标题带描述信息
-
-传入`label`属性,属性值为描述信息的值。
-
-:::demo 标题带描述信息
+#### 展示图标
+通过`icon`属性在标题左侧展示图标
+:::demo 展示图标
```html
-
-
+
```
:::
-#### 带图标
+#### 展示箭头
+传入`isLink`属性则会在右侧显示箭头
-传入`icon`属性。
-
-:::demo 带图标
+:::demo 展示箭头
```html
-
-
-
-```
-:::
-
-#### 可点击的链接
-
-传入`url`属性,传入`isLink`属性则会在右侧显示箭头。
-
-:::demo 可点击的链接
-```html
-
-
-
+
+
```
:::
#### 高级用法
-
-如以上用法不能满足你的需求,可以使用对应的`slot`来自定义显示的内容。包含三个`slot`,默认`slot`、`icon`、`title`和`right-icon`的`slot`。
+如以上用法不能满足你的需求,可以使用对应的`slot`来自定义显示的内容
:::demo 高级用法
```html
-
+
起码运动馆
官方
-
+
-
+
@@ -112,12 +107,13 @@ Vue.component(CellGroup.name, CellGroup);
| 参数 | 说明 | 类型 | 默认值 | 可选值 |
|-----------|-----------|-----------|-------------|-------------|
-| icon | 左侧图标 | `string` | | |
-| title | 左侧标题 | `string` | | |
-| value | 右侧内容 | `string` | | |
-| isLink | 是否为链接,链接会在右侧出现箭头 | `boolean` | | |
-| url | 跳转链接 | `string` | | |
-| label | 描述信息,显示在标题下方 | `string` | | |
+| icon | 左侧图标 | `String` | - | - |
+| title | 左侧标题 | `String` | - | - |
+| value | 右侧内容 | `String` | - | - |
+| label | 标题下方的描述信息 | `String` | - | - |
+| url | 跳转链接 | `String` | - | - |
+| isLink | 是否展示右侧箭头 | `Boolean` | `false` | - |
+| required | 是否显示表单必填符号 | `Boolean` | `false` | - |
### Slot
diff --git a/docs/examples-docs/changelog.md b/docs/examples-docs/changelog.md
index 545b0e180..46f58c413 100644
--- a/docs/examples-docs/changelog.md
+++ b/docs/examples-docs/changelog.md
@@ -1,5 +1,56 @@
## 更新日志
+## [v0.8.8](https://github.com/youzan/vant/tree/v0.8.8) (2017-09-01)
+[Full Changelog](https://github.com/youzan/vant/compare/v0.8.7...v0.8.8)
+
+**非兼容更新和新特性:**
+
+- Checkbox: support listen to change event [\#104](https://github.com/youzan/vant/pull/104) ([chenjiahan](https://github.com/chenjiahan))
+- add GoodsAction component [\#102](https://github.com/youzan/vant/pull/102) ([chenjiahan](https://github.com/chenjiahan))
+- add InvalidGoods component [\#100](https://github.com/youzan/vant/pull/100) ([chenjiahan](https://github.com/chenjiahan))
+- add OrderGoods component [\#99](https://github.com/youzan/vant/pull/99) ([chenjiahan](https://github.com/chenjiahan))
+- add PayOrder component [\#98](https://github.com/youzan/vant/pull/98) ([chenjiahan](https://github.com/chenjiahan))
+
+**修复:**
+
+- 修复 make init bug [\#97](https://github.com/youzan/vant/pull/97) ([pangxie1991](https://github.com/pangxie1991))
+
+**合并的 Pull Request (可能有不兼容改动):**
+
+- PayOrder component add tip slot [\#105](https://github.com/youzan/vant/pull/105) ([Raistlin916](https://github.com/Raistlin916))
+- Add deep-select component and fix a popup bug. [\#103](https://github.com/youzan/vant/pull/103) ([Tinysymphony](https://github.com/Tinysymphony))
+- Doc: update Step/Loading/Tag/Badge documents [\#101](https://github.com/youzan/vant/pull/101) ([chenjiahan](https://github.com/chenjiahan))
+
+## [v0.8.7](https://github.com/youzan/vant/tree/v0.8.7) (2017-08-29)
+[Full Changelog](https://github.com/youzan/vant/compare/v0.8.6...v0.8.7)
+
+**非兼容更新和新特性:**
+
+- add ExpressWay component [\#96](https://github.com/youzan/vant/pull/96) ([chenjiahan](https://github.com/chenjiahan))
+- add CellSwitch component [\#95](https://github.com/youzan/vant/pull/95) ([chenjiahan](https://github.com/chenjiahan))
+- add NoticeBar && test cases [\#94](https://github.com/youzan/vant/pull/94) ([chenjiahan](https://github.com/chenjiahan))
+- Dialog: support both function call and component call [\#93](https://github.com/youzan/vant/pull/93) ([chenjiahan](https://github.com/chenjiahan))
+- CellSwipe: improve test coverage && code review [\#91](https://github.com/youzan/vant/pull/91) ([chenjiahan](https://github.com/chenjiahan))
+- Progress: adjust DOM struct [\#90](https://github.com/youzan/vant/pull/90) ([chenjiahan](https://github.com/chenjiahan))
+
+## [v0.8.6](https://github.com/youzan/vant/tree/v0.8.6) (2017-08-24)
+[Full Changelog](https://github.com/youzan/vant/compare/v0.8.5...v0.8.6)
+
+**非兼容更新和新特性:**
+
+- dalete merge && class operating methods [\#88](https://github.com/youzan/vant/pull/88) ([chenjiahan](https://github.com/chenjiahan))
+- directory adjust: delete entry index.js [\#87](https://github.com/youzan/vant/pull/87) ([chenjiahan](https://github.com/chenjiahan))
+- Button: reduce unnecessary styles [\#86](https://github.com/youzan/vant/pull/86) ([chenjiahan](https://github.com/chenjiahan))
+- Layout: optimize doc [\#85](https://github.com/youzan/vant/pull/85) ([chenjiahan](https://github.com/chenjiahan))
+
+**修复:**
+
+- Fix datetime-picker init value [\#89](https://github.com/youzan/vant/pull/89) ([w91](https://github.com/w91))
+
+**处理的 Issue:**
+
+- When 'showIndicators' set to 'false' The second image does not show [\#80](https://github.com/youzan/vant/issues/80)
+
## [v0.8.5](https://github.com/youzan/vant/tree/v0.8.5) (2017-08-21)
[Full Changelog](https://github.com/youzan/vant/compare/v0.8.4...v0.8.5)
diff --git a/docs/examples-docs/checkbox.md b/docs/examples-docs/checkbox.md
index fdfcba1d7..ef23ecd81 100644
--- a/docs/examples-docs/checkbox.md
+++ b/docs/examples-docs/checkbox.md
@@ -45,8 +45,7 @@ Vue.component(Checkbox.name, Checkbox);
### 代码演示
#### 基础用法
-
-通过`v-model`绑定值即可。当`Checkbox`选中时,绑定的值即为`true`,否则为`false`。当单个`Checkbox`使用时,更建议使用`Switch`组件。
+通过`v-model`绑定 checkbox 的勾选状态
:::demo 基础用法
```html
@@ -187,14 +186,20 @@ export default {
| 参数 | 说明 | 类型 | 默认值 | 可选值 |
|-----------|-----------|-----------|-------------|-------------|
-| disabled | 是否禁用单选框 | `boolean` | `false` | |
-| name | 根据这个来判断radio是否选中 | `boolean` | `false` | |
+| disabled | 是否禁用单选框 | `Boolean` | `false` | - |
+| name | 根据这个来判断radio是否选中 | `Boolean` | `false` | - |
### CheckboxGroup API
| 参数 | 说明 | 类型 | 默认值 | 可选值 |
|-----------|-----------|-----------|-------------|-------------|
-| disabled | 是否禁用单选框 | `boolean` | `false` | |
+| disabled | 是否禁用单选框 | `Boolean` | `false` | - |
+
+### Checkbox Event
+
+| 事件名称 | 说明 | 回调参数 |
+|-----------|-----------|-----------|
+| change | 当绑定值变化时触发的事件 | 当前组件的值 |
### CheckboxGroup Event
diff --git a/docs/examples-docs/deep-select.md b/docs/examples-docs/deep-select.md
new file mode 100644
index 000000000..846fdd9c5
--- /dev/null
+++ b/docs/examples-docs/deep-select.md
@@ -0,0 +1,169 @@
+
+
+## DeepSelect 分类选择组件
+
+### 使用指南
+``` javascript
+import { DeepSelect } from 'vant';
+
+Vue.component(DeepSelect.name, DeepSelect);
+```
+
+### 代码演示
+
+#### 基础用法
+
+:::demo 基础用法
+```html
+
+```
+
+```javascript
+export default {
+ data() {
+ return {
+ items: items,
+ // 左侧高亮元素的index
+ mainActiveIndex: 0,
+ // 被选中元素的id
+ activeId: 1001
+ };
+ },
+ methods: {
+ onNavClick(index) {
+ this.mainActiveIndex = index;
+ },
+ onItemClick(data) {
+ console.log(data);
+ this.activeId = data.id;
+ }
+ }
+}
+
+```
+:::
+
+### API
+
+#### 传入参数
+
+| 参数 | 说明 | 类型 | 默认值 | 必须 |
+|-----------|-----------|-----------|-------------|-------------|
+| items | 分类显示所需的数据,具体数据结构可看 数据结构 | Array | [] | |
+| mainActiveIndex | 左侧导航高亮的索引 | Number | 0 | |
+| activeId | 右侧选择项,高亮的数据id | Number | 0 | |
+
+#### 事件
+| 事件名 | 说明 | 参数 |
+|-----------|-----------|-----------|
+| navclick | 左侧导航点击时,触发的事件 | index:被点击的导航的索引 |
+| itemclick | 右侧选择项被点击时,会触发的事件 | data: 该点击项的数据 |
+
+### 数据格式
+#### items 分类显示所需数据的数据结构
+`items` 整体为一个数组,数组内包含一系列描述分类的 object。
+
+每个分类里,text表示当前分类的名称。children 表示分类里的可选项,为数组结构,id被用来唯一标识每个选项
+```javascript
+[
+ {
+ // 导航名称
+ text: '所有城市',
+ // 该导航下所有的可选项
+ children: [
+ {
+ // 可选项的名称
+ text: '温州',
+ // 可选项的id,高亮的时候是根据id是否和选中的id是否相同进行判断的
+ id: 1002
+ },
+ {
+ // 可选项的名称
+ text: '杭州',
+ // 可选项的id,高亮的时候是根据id是否和选中的id是否相同进行判断的
+ id: 1001
+ }
+ ]
+ }
+]
+```
diff --git a/docs/examples-docs/express-way.md b/docs/examples-docs/express-way.md
new file mode 100644
index 000000000..ee4d0ded4
--- /dev/null
+++ b/docs/examples-docs/express-way.md
@@ -0,0 +1,124 @@
+## ExpressWay 配送方式
+
+
+
+### 使用指南
+``` javascript
+import { ExpressWay } from 'vant';
+
+Vue.component(ExpressWay.name, ExpressWay);
+```
+
+### 代码演示
+
+#### 基础用法
+
+:::demo 基础用法
+```html
+
+
+
+
+
+
+
+```
+:::
+
+#### 不可修改配送方式
+
+:::demo 不可修改配送方式
+```html
+
+
+
+```
+:::
+
+### API
+
+| 参数 | 说明 | 类型 | 默认值 | 必须 |
+|-----------|-----------|-----------|-------------|-------------|
+| v-model | 当前选择的配送类型 | `Number` | | 是 |
+| expressList | 配送方式列表数据 | `Array` | | 是 |
+| cellTitle | Cell 标题 | `String` | `配送方式` | 否 |
+| actionsheetTitle | Actionsheet 标题 | `String` | `配送方式` | 否 |
+| editable | 能否修改配送方式 | `Boolean` | `true` | 否 |
+
+
+### 数据格式
+#### expressList中的配送方式字段说明
+| key | 说明 | 类型 |
+|-----------|-----------|-----------|
+| postage | 运费,以分为单位 | Number |
+| postage_title | 配送方式 | String |
+| postage_desc | 描述信息 | String |
+| express_type | 配送类型 | Number |
+| postage_warn_desc | 提示信息 | String |
+
+### Event
+
+| 事件名 | 说明 | 参数 |
+|-----------|-----------|-----------|
+| change | 修改配送方式时触发 | item: 对应的数据, index:对应的索引 |
diff --git a/docs/examples-docs/field.md b/docs/examples-docs/field.md
index 97a24a36a..377ab8bfd 100644
--- a/docs/examples-docs/field.md
+++ b/docs/examples-docs/field.md
@@ -133,19 +133,19 @@ Vue.component(Field.name, Field);
| 参数 | 说明 | 类型 | 默认值 | 可选值 |
|-----------|-----------|-----------|-------------|-------------|
-| type | 输入框类型 | `string` | `text` | `text`, `number`, `email`, `url`, `tel`, `date`, `datetime`, `password`, `textarea` |
-| placeholder | 输入框placeholder | `string` | | |
-| value | 输入框的值 | `string` | | |
-| label | 输入框标签 | `string` | | |
-| disabled | 是否禁用输入框 | `boolean` | `false` | |
-| error | 输入框是否有错误 | `boolean` | `false` | |
-| readonly | 输入框是否只读 | `boolean` | `false` | |
-| maxlength | 输入框maxlength | `string`, `number` | | |
-| rows | textarea rows | `string`, `number` | | |
-| cols | textarea cols | `string`, `number` | | |
-| autosize | 自动调整高度(仅支持textarea) | `boolean` | `false` | `true`, `false` |
-| icon | 输入框尾部图标 | `string` | | icon中支持的类型 |
-| onIconClick | 点击图标的回调函数 | `function` | | |
+| type | 输入框类型 | `String` | `text` | `text`, `number`, `email`, `url`, `tel`, `date`, `datetime`, `password`, `textarea` |
+| placeholder | 输入框placeholder | `String` | | |
+| value | 输入框的值 | `String` | | |
+| label | 输入框标签 | `String` | | |
+| disabled | 是否禁用输入框 | `Boolean` | `false` | |
+| error | 输入框是否有错误 | `Boolean` | `false` | |
+| readonly | 输入框是否只读 | `Boolean` | `false` | |
+| maxlength | 输入框maxlength | `String`, `Number` | | |
+| rows | textarea rows | `String`, `Number` | | |
+| cols | textarea cols | `String`, `Number` | | |
+| autosize | 自动调整高度(仅支持textarea) | `Boolean` | `false` | `true`, `false` |
+| icon | 输入框尾部图标 | `String` | | icon中支持的类型 |
+| onIconClick | 点击图标的回调函数 | `Function` | | |
### Slot
diff --git a/docs/examples-docs/goods-action.md b/docs/examples-docs/goods-action.md
new file mode 100644
index 000000000..328a48951
--- /dev/null
+++ b/docs/examples-docs/goods-action.md
@@ -0,0 +1,88 @@
+
+
+
+
+## GoodsAction 商品操作组件
+
+### 使用指南
+``` javascript
+import {
+ GoodsAction,
+ GoodsActionBigBtn,
+ GoodsActionMiniBtn
+} from 'vant';
+
+Vue.component(GoodsAction.name, GoodsAction);
+Vue.component(GoodsActionBigBtn.name, GoodsActionBigBtn);
+Vue.component(GoodsActionMiniBtn.name, GoodsActionMiniBtn);
+```
+
+### 代码演示
+
+:::demo
+```html
+
+
+ 客服
+
+
+ 购物车
+
+
+ 加入购物车
+
+
+ 立即购买
+
+
+```
+
+```javascript
+export default {
+ methods: {
+ onClickMiniBtn() {
+ Toast('点击图标');
+ },
+ onClickBigBtn() {
+ Toast('点击按钮');
+ }
+ }
+}
+```
+:::
+
+### API
+
+#### GoodsActionMiniBtn
+
+| 参数 | 说明 | 类型 | 默认值 | 可选值 |
+|-----------|-----------|-----------|-------------|-------------|
+| icon | 图标 | `String` | - | Icon 组件支持的所有图标 |
+| iconClass | 图标额外类名 | `String` | `''` | - |
+| url | 跳转链接 | `String` | `javascript:;` | - |
+
+#### GoodsActionBigBtn
+
+| 参数 | 说明 | 类型 | 默认值 | 可选值 |
+|-----------|-----------|-----------|-------------|-------------|
+| url | 跳转链接 | `String` | `javascript:;` | - |
+| primary | 是否主行动按钮,主行动按钮默认为红色 | `Boolean` | `false` | - |
diff --git a/docs/examples-docs/icon.md b/docs/examples-docs/icon.md
index a2278a668..480411e19 100644
--- a/docs/examples-docs/icon.md
+++ b/docs/examples-docs/icon.md
@@ -8,15 +8,20 @@
.van-col {
text-align: center;
- height: 120px;
+ height: 100px;
float: none;
display: inline-block;
+
+ .van-icon {
+ display: block;
+ }
}
.van-icon {
- font-size: 45px;
+ display: none;
+ font-size: 32px;
margin: 15px 0;
- display: block;
+ color: rgba(69, 90, 100, .8);
}
span {
@@ -27,21 +32,116 @@
## Icon 图标
@@ -57,93 +157,10 @@ Vue.component(Icon.name, Icon);
#### 基础用法
-设置`name`属性为对应的图标名称即可:
-
-:::demo 基础用法
+设置`name`属性为对应的图标名称即可,所有可用的图标名称见右侧列表
+:::demo 图标列表
```html
-
-```
-:::
-
-#### 图标列表
-
-:::demo 所有Icon
-```html
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
```
:::
@@ -151,4 +168,4 @@ Vue.component(Icon.name, Icon);
| 参数 | 说明 | 类型 | 默认值 | 可选值 |
|-----------|-----------|-----------|-------------|-------------|
-| name | icon名称 | `string` | `''` | |
+| name | icon名称 | `String` | `''` | - |
diff --git a/docs/examples-docs/image-preview.md b/docs/examples-docs/image-preview.md
index 1239abd78..0de221cb1 100644
--- a/docs/examples-docs/image-preview.md
+++ b/docs/examples-docs/image-preview.md
@@ -11,7 +11,7 @@ import { ImagePreview } from 'packages/index';
export default {
methods: {
- handleImagePreview() {
+ showImagePreview() {
ImagePreview([
'https://img.yzcdn.cn/upload_files/2017/03/15/FkubrzN7AgGwLlTeb1E89-T_ZjBg.png',
'https://img.yzcdn.cn/upload_files/2017/03/14/FmTPs0SeyQaAOSK1rRe1sL8RcwSY.jpeg',
@@ -38,22 +38,20 @@ import { ImagePreview } from 'vant';
:::demo 基础用法
```html
-预览图片
-
-
```
:::
diff --git a/docs/examples-docs/invalid-goods.md b/docs/examples-docs/invalid-goods.md
new file mode 100644
index 000000000..241ab5161
--- /dev/null
+++ b/docs/examples-docs/invalid-goods.md
@@ -0,0 +1,83 @@
+## InvalidGoods 不可用商品列表
+
+
+
+### 使用指南
+``` javascript
+import { InvalidGoods } from 'vant';
+
+Vue.component(InvalidGoods.name, InvalidGoods);
+```
+
+### 代码演示
+
+#### 基础用法
+
+:::demo 基础用法
+```html
+
+
+
+
+
+```
+:::
+
+### API
+
+| 参数 | 说明 | 类型 | 默认值 | 必须 |
+|-----------|-----------|-----------|-------------|-------------|
+| goods | 商品数据 | `Array` | | 是 |
+| title | 标题 | `String` | `以下商品无法一起购买,点击查看原因` | 否 |
+| actionsheetTitle | 弹出层标题 | `String` | `以下商品无法一起下单` | 否 |
+
+### 数据格式
+#### data中的商品字段说明
+| key | 说明 | 类型 |
+|-----------|-----------|-----------|
+| num | 商品数量 | `Number` |
+| sku_id | 商品 id | `Number` |
+| price | 商品价格,以分为单位 | `Number` |
+| title | 商品标题 | `String` |
+| img_url | 商品图片 url | `String` |
+| unavailable_desc | 不可用原因 | `String` |
+| sku | 商品 sku | `Array` |
diff --git a/docs/examples-docs/layout.md b/docs/examples-docs/layout.md
index 67d32b869..2fe09d2a9 100644
--- a/docs/examples-docs/layout.md
+++ b/docs/examples-docs/layout.md
@@ -79,12 +79,12 @@ Layout 组件提供了`24列栅格`,通过在`Col`上添加`span`属性设置
#### Row
| 参数 | 说明 | 类型 | 默认值 | 可选值 |
|-----------|-----------|-----------|-------------|-------------|
-| gutter | 列元素之间的间距(单位为px) | `String | Number` | - | |
-| prefix | className 前缀 | `String` | `van` | |
+| gutter | 列元素之间的间距(单位为px) | `String | Number` | - | - |
+| prefix | className 前缀 | `String` | `van` | - |
#### Column
| 参数 | 说明 | 类型 | 默认值 | 可选值 |
|-----------|-----------|-----------|-------------|-------------|
-| span | 列元素宽度 | `String | Number` | - | |
-| offset | 列元素偏移距离 | `String | Number` | - | |
-| prefix | className 前缀 | `String` | `van` | |
+| span | 列元素宽度 | `String | Number` | - | - |
+| offset | 列元素偏移距离 | `String | Number` | - | - |
+| prefix | className 前缀 | `String` | `van` | - |
diff --git a/docs/examples-docs/lazyload.md b/docs/examples-docs/lazyload.md
index 7e0151686..d2268c582 100644
--- a/docs/examples-docs/lazyload.md
+++ b/docs/examples-docs/lazyload.md
@@ -157,11 +157,11 @@ export default {
| 参数 | 说明 | 类型 | 默认值 | 可选值 |
|-----------|-----------|-----------|-------------|-------------|
-| loading | 加载时的图片 | `string` | | |
-| error | 错误时的图片 | `string` | | |
-| preload | 预加载高度的比例 | `string` | | |
-| attempt | 尝试次数 | `number` | `3` | |
+| loading | 加载时的图片 | `String` | | |
+| error | 错误时的图片 | `String` | | |
+| preload | 预加载高度的比例 | `String` | | |
+| attempt | 尝试次数 | `Number` | `3` | |
| listenEvents | 监听的事件 | `Array` | `['scroll', 'wheel', 'mousewheel', 'resize', 'animationend', 'transitionend', 'touchmove']` | |
| adapter | 适配器 | `Object` | | |
| filter | 图片url过滤 | `Object` | | |
-| lazyComponent | 是否能懒加载模块 | `boolean` | `false` | |
+| lazyComponent | 是否能懒加载模块 | `Boolean` | `false` | |
diff --git a/docs/examples-docs/loading.md b/docs/examples-docs/loading.md
index 098e7001d..b6a4521f7 100644
--- a/docs/examples-docs/loading.md
+++ b/docs/examples-docs/loading.md
@@ -1,19 +1,8 @@
@@ -29,39 +18,21 @@ Vue.component(Loading.name, Loading);
### 代码演示
-#### 渐变深色spinner
+#### 单色 spinner
-:::demo 渐变深色spinner
+:::demo 单色 spinner
```html
-
+
+
```
:::
-#### 渐变浅色spinner
+#### 渐变色 spinner
-:::demo 渐变浅色spinner
+:::demo 渐变色 spinner
```html
-
-
-
-
-
-```
-:::
-
-#### 单色spinner
-
-:::demo 单色spinner
-```html
-
-
+
+
```
:::
@@ -69,5 +40,5 @@ Vue.component(Loading.name, Loading);
| 参数 | 说明 | 类型 | 默认值 | 可选值 |
|-----------|-----------|-----------|-------------|-------------|
-| color | `loading`颜色 | `string` | `black` | `black`, `white` |
-| type | `loading`类型 | `string` | `gradient-circle` | `gradient-circle`, `circle` |
+| color | 颜色 | `String` | `black` | `black` `white` |
+| type | 类型 | `String` | `gradient-circle` | `gradient-circle` `circle` |
diff --git a/docs/examples-docs/notice-bar.md b/docs/examples-docs/notice-bar.md
new file mode 100644
index 000000000..7da1faa12
--- /dev/null
+++ b/docs/examples-docs/notice-bar.md
@@ -0,0 +1,69 @@
+
+
+## NoticeBar 通告栏
+
+### 使用指南
+``` javascript
+import { NoticeBar } from 'vant';
+
+Vue.component(NoticeBar.name, NoticeBar);
+```
+
+### 代码演示
+
+#### 基础用法
+
+:::demo 基础用法
+```html
+
+```
+:::
+
+#### 禁用滚动
+文字内容多于一行时,可通过`scrollable`参数控制是否开启滚动
+
+:::demo 禁用滚动
+```html
+
+ 足协杯战线连续第2年上演广州德比战,上赛季半决赛上恒大以两回合5-3的总比分淘汰富力。
+
+```
+:::
+
+#### 通告栏模式
+默认模式为空,支持`closeable`和`link`。
+
+:::demo 通告栏模式
+```html
+
+
+ 足协杯战线连续第2年上演广州德比战,上赛季半决赛上恒大以两回合5-3的总比分淘汰富力。
+
+
+
+
+ 足协杯战线连续第2年上演广州德比战,上赛季半决赛上恒大以两回合5-3的总比分淘汰富力。
+
+```
+:::
+
+### API
+
+| 参数 | 说明 | 类型 | 默认值 | 可选值 |
+|-----------|-----------|-----------|-------------|-------------|
+| mode | 通告栏模式 | String | `''` | `closeable` `link` |
+| delay | 动画延迟时间,单位秒 | Number | `1` | - |
+| speed | 滚动速率,单位px | Number | `40` | - |
+| scrollable | 是否滚动 | Boolean | `true` | - |
+
+### Event
+
+| 事件名 | 说明 | 参数 |
+|-----------|-----------|-----------|
+| click | 点击事件回调 | - |
diff --git a/docs/examples-docs/order-goods.md b/docs/examples-docs/order-goods.md
new file mode 100644
index 000000000..3c882555f
--- /dev/null
+++ b/docs/examples-docs/order-goods.md
@@ -0,0 +1,235 @@
+## OrderGoods 下单页商品列表
+
+
+
+### 使用指南
+``` javascript
+import { OrderGoods } from 'vant';
+
+Vue.component(OrderGoods.name, OrderGoods);
+```
+
+### 代码演示
+
+#### 基础用法
+
+:::demo 基础用法
+```html
+
+
+
+
+
+```
+:::
+
+#### 积分商品
+
+:::demo 积分商品
+```html
+
+
+
+
+
+```
+:::
+
+#### 预售商品
+
+:::demo 预售商品
+```html
+
+
+
+
+
+```
+:::
+
+#### 商品为空
+
+:::demo 商品为空
+```html
+
+```
+:::
+
+#### 多个商品
+
+:::demo 多个商品
+```html
+
+```
+:::
+
+### API
+
+| 参数 | 说明 | 类型 | 默认值 |
+|-----------|-----------|-----------|-------------|
+| shop-name | 店铺名称 | `String` | |
+| shop-link | 店铺链接 | `String` | |
+| header-icon | 店铺名称左侧的图标类型 | `String` | `shop` |
+| header-badge | 店铺名称右侧的徽章链接 | `String` | |
+| item-list | 商品列表 | `Array` | `[]` |
+| empty-icon | 商品列表为空时的图标 | `String` | |
+| empty-message | 商品列表为空时的提示文案 | `String` | `当前没有可购买的商品,请重新选择` |
+| empty-button-text | 商品列表为空时的按钮文案 | `String` | `返回重新选择` |
+| v-model | 买家留言 | `String` | `''` |
+| show-total-price | 是否显示价格栏 | `Boolean` | `true` |
+| show-message | 是否显示留言栏 | `Boolean` | `true` |
+| message-editable | 留言是否可以编辑 | `Boolean` | `true` |
+| price | 合计金额(单位分) | `Number` | |
+| points | 合计积分 | `Number` | |
+
+### 数据格式
+#### itemList 中的配送方式字段说明
+| key | 说明 | 类型 |
+|-----------|-----------|-----------|
+| title | 商品名称 | `String` |
+| img_url | 图片地址 | `String` |
+| delivery_time | 发货时间 | `String` |
+| num | 商品数量 | `Number` |
+| points_price | 积分价格 | `Number` |
+| pay_price(单位分) | 金额 | `Number` |
+| sku | 商品 sku | `Array` |
+| message | 商品留言 | `Array` |
+| is_presale | 是否为预售 | `Boolean` |
+| is_present | 是否为赠品 | `Boolean` |
+| is_period_buy | 是否为周期购 | `Boolean` |
+| show_delivery_time | 是否显示发货时间 | `Boolean` |
+
+### Event
+
+| 事件名 | 说明 | 参数 |
+|-----------|-----------|-----------|
+| clickEmptyButton | 点击商品为空时的按钮时触发 | - |
+
+### Slot
+| name | 描述 |
+|-----------|-----------|
+| 默认 | 在商品列表和留言之间插入内容 |
+| top | 在标题和商品列表之间插入内容 |
+| bottom | 在合计价格下方插入内容 |
diff --git a/docs/examples-docs/panel.md b/docs/examples-docs/panel.md
index 899cb071e..ee7612ae6 100644
--- a/docs/examples-docs/panel.md
+++ b/docs/examples-docs/panel.md
@@ -1,19 +1,6 @@
+
+### 使用指南
+``` javascript
+import { PayOrder } from 'vant';
+
+Vue.component(PayOrder.name, PayOrder);
+```
+
+### 代码演示
+
+#### 基础用法
+
+:::demo 基础用法
+```html
+
+```
+:::
+
+#### 禁用状态
+禁用状态下不会触发`submit`事件
+
+:::demo 禁用状态
+```html
+
+```
+:::
+
+#### 加载状态
+加载状态下不会触发`submit`事件
+:::demo 加载状态
+```html
+
+```
+:::
+
+####
+提示文案中的额外操作和说明
+:::demo 提示文案中添加操作
+```html
+
+
+ 您的收货地址不支持同城送, 修改地址 >
+
+
+```
+:::
+
+### API
+
+| 参数 | 说明 | 类型 | 默认值 | 必须 |
+|-----------|-----------|-----------|-------------|-------------|
+| price | 价格(单位分) | `Number` | | 是 |
+| button-text | 按钮文字 | `String` | | 是 |
+| button-type | 按钮类型 | `String` | `danger` | 否 |
+| tip | 提示文案 | `String` | | 否 |
+| disabled | 是否禁用按钮 | `Boolean` | `false` | 否 |
+| loading | 是否显示加载中的按钮 | `Boolean` | `false` | 否 |
+
+### Event
+
+| 事件名 | 说明 | 参数 |
+|-----------|-----------|-----------|
+| submit | 按钮点击事件回调 | - |
+
+### Slot
+
+| 名称 | 说明 |
+|-----------|-----------|
+| tip | 提示文案中的额外操作和说明 |
diff --git a/docs/examples-docs/picker.md b/docs/examples-docs/picker.md
index 0d3b7acac..aeb24fe72 100644
--- a/docs/examples-docs/picker.md
+++ b/docs/examples-docs/picker.md
@@ -143,8 +143,8 @@ export default {
| 参数 | 说明 | 类型 | 默认值 | 可选值 |
|-----------|-----------|-----------|-------------|-------------|
-| visibileColumnCount | 每一列可见备选元素的个数 | `number` | `5` | |
-| itemHeight | 选中元素区高度 | `number` | `44` | |
+| visibileColumnCount | 每一列可见备选元素的个数 | `Number` | `5` | |
+| itemHeight | 选中元素区高度 | `Number` | `44` | |
| columns | 对象数组,配置每一列显示的数据 | `Array` | | |
| showToolbar | 是否在组件顶部显示一个toolbar | `Boolean` | `true` | |
| title | 在toolbar上显示的标题文字 | `String` | | |
diff --git a/docs/examples-docs/popup.md b/docs/examples-docs/popup.md
index 892b9df15..88d857736 100644
--- a/docs/examples-docs/popup.md
+++ b/docs/examples-docs/popup.md
@@ -163,9 +163,9 @@ export default {
| 参数 | 说明 | 类型 | 默认值 | 可选值 |
|-----------|-----------|-----------|-------------|-------------|
-| value | 利用`v-model`绑定当前组件是否显示 | `boolean` | `false` | `true`, `false` |
-| overlay | 是否显示背景遮罩层 | `boolean` | `true` | `true`, `false` |
-| lockOnScroll | 背景是否跟随滚动 | `boolean` | `false` | `true`, `false` |
-| position | 弹出菜单位置 | `string` | | `top`, `bottom`, `right`, `left` |
-| closeOnClickOverlay | 点击遮罩层是否关闭弹出菜单 | `boolean` | `true` | `true`, `false` |
-| transition | 弹出菜单的`transition` | `string` | `popup-slide` | |
+| v-model | 当前组件是否显示 | `Boolean` | `false` | - |
+| overlay | 是否显示背景遮罩层 | `Boolean` | `true` | - |
+| lockOnScroll | 背景是否跟随滚动 | `Boolean` | `false` | - |
+| position | 弹出菜单位置 | `String` | - | `top`, `bottom`, `right`, `left` |
+| closeOnClickOverlay | 点击遮罩层是否关闭弹出菜单 | `Boolean` | `true` | - |
+| transition | 弹出菜单的`transition` | `String` | `popup-slide` | |
diff --git a/docs/examples-docs/progress.md b/docs/examples-docs/progress.md
index 917183190..2cbc071bd 100644
--- a/docs/examples-docs/progress.md
+++ b/docs/examples-docs/progress.md
@@ -57,8 +57,8 @@ Vue.component(Progress.name, Progress);
| 参数 | 说明 | 类型 | 默认值 | 可选值 |
|-----------|-----------|-----------|-------------|-------------|
-| inactive | 是否置灰 | `boolean` | `false` | |
-| percentage | 进度百分比 | `number` | `false` | `0-100` |
-| pivotText | 文字显示 | `string` | 百分比文字 | - |
-| color | 进度条颜色 | `string` | `#38f` | hexvalue |
-| textColor | 进度条文字颜色 | `string` | `#fff` | hexvalue |
+| inactive | 是否置灰 | `Boolean` | `false` | |
+| percentage | 进度百分比 | `Number` | `false` | `0-100` |
+| pivotText | 文字显示 | `String` | 百分比文字 | - |
+| color | 进度条颜色 | `String` | `#38f` | hexvalue |
+| textColor | 进度条文字颜色 | `String` | `#fff` | hexvalue |
diff --git a/docs/examples-docs/quantity.md b/docs/examples-docs/quantity.md
index 1361400ff..c6ad2137c 100644
--- a/docs/examples-docs/quantity.md
+++ b/docs/examples-docs/quantity.md
@@ -66,9 +66,15 @@ Vue.component(Quantity.name, Quantity);
| 参数 | 说明 | 类型 | 默认值 | 可选值 |
|-----------|-----------|-----------|-------------|-------------|
-| min | 最小值 | `string`, `number` | `1` | |
-| max | 最大值 | `string`, `number` | | |
-| step | 步数 | `string`, `number` | `1` | |
-| disabled | 是否被禁用了 | `boolean` | `false` | |
-| defaultValue | 默认值 | `string`, `number` | `1` | |
+| min | 最小值 | `String | Number` | `1` | - |
+| max | 最大值 | `String | Number` | - | - |
+| defaultValue | 默认值 | `String | Number` | `1` | - |
+| step | 步数 | `String | Number` | `1` | - |
+| disabled | 是否禁用 | `Boolean` | `false` | - |
+### Event
+
+| 事件名称 | 说明 | 回调参数 |
+|-----------|-----------|-----------|
+| change | 当绑定值变化时触发的事件 | 当前组件的值 |
+| overlimit | 点击不可用的按钮时触发 | - |
diff --git a/docs/examples-docs/radio.md b/docs/examples-docs/radio.md
index e580b966b..f4bb43269 100644
--- a/docs/examples-docs/radio.md
+++ b/docs/examples-docs/radio.md
@@ -134,14 +134,14 @@ export default {
| 参数 | 说明 | 类型 | 默认值 | 可选值 |
|-----------|-----------|-----------|-------------|-------------|
-| disabled | 是否禁用单选框 | `boolean` | `false` | |
-| name | 根据这个来判断radio是否选中 | `boolean` | `false` | |
+| disabled | 是否禁用单选框 | `Boolean` | `false` | |
+| name | 根据这个来判断radio是否选中 | `Boolean` | `false` | |
### RadioGroup API
| 参数 | 说明 | 类型 | 默认值 | 可选值 |
|-----------|-----------|-----------|-------------|-------------|
-| disabled | 是否禁用单选框 | `boolean` | `false` | |
+| disabled | 是否禁用单选框 | `Boolean` | `false` | |
### RadioGroup Event
diff --git a/docs/examples-docs/search.md b/docs/examples-docs/search.md
index a46d12c25..2f1a5c434 100644
--- a/docs/examples-docs/search.md
+++ b/docs/examples-docs/search.md
@@ -83,8 +83,8 @@ export default {
| 参数 | 说明 | 类型 | 默认值 | 可选值 |
|-----------|-----------|-----------|-------------|-------------|
-| placeholder | `input`的`placeholder`文案 | `string` | | |
-| type | 搜索样式类型 | `string` | `normal` | `normal`:普通样式,`showcase`:微杂志页样式 |
+| placeholder | `input`的`placeholder`文案 | `String` | | |
+| type | 搜索样式类型 | `String` | `normal` | `normal`:普通样式,`showcase`:微杂志页样式 |
### Event
diff --git a/docs/examples-docs/steps.md b/docs/examples-docs/steps.md
index d9d229b4b..d41d06a3d 100644
--- a/docs/examples-docs/steps.md
+++ b/docs/examples-docs/steps.md
@@ -1,12 +1,17 @@
@@ -20,7 +25,7 @@ export default {
methods: {
nextStep() {
- if (++this.active > 3) this.active = 0;
+ this.active = ++this.active % 4;
}
}
}
@@ -42,7 +47,7 @@ Vue.component(Steps.name, Steps);
:::demo 基础用法
```html
-
+
买家下单
商家接单
买家提货
@@ -61,7 +66,7 @@ export default {
methods: {
nextStep() {
- if (++this.active > 3) this.active = 0;
+ this.active = ++this.active % 4;
}
}
}
@@ -69,13 +74,19 @@ export default {
```
:::
-#### 只显示步骤条
+#### 物流描述
-当你不设置`title`或`description`属性时,就会只显示步骤条,而没有步骤的详细信息。
+通过`title`和`description`属性来定义物流描述信息
-:::demo 只显示步骤条
+:::demo 物流描述
```html
-
+
买家下单
商家接单
买家提货
@@ -84,38 +95,37 @@ export default {
```
:::
-#### 竖式步骤条
+#### 竖向步骤条
-可以通过设置`direction`属性来改变步骤条的显示方式,可选值有`vertical/horizontal`。
+可以通过设置`direction`属性来改变步骤条的显示方式
-:::demo 只显示步骤条
+:::demo 竖向步骤条
```html
- 【城市】最新的物流状态之类的表述哈哈哈哈
- 2016-07-12 12:12:12
+ 【城市】物流状态1
+ 2016-07-12 12:40
- 【城市】已经过了的物流状态我是折行我是折行我是折行联系电话:158630099999
- 2016-07-12 12:12:12
+ 【城市】物流状态2
+ 2016-07-11 10:00
- 未发货
- 2016-07-12 12:12:12
+ 快件已发货
+ 2016-07-10 09:30
```
:::
### 高级用法
-
-可以使用具名`slot`增加自定义内容,其中包含`icon`和`message-extra`。
+使用`slot`增加自定义内容
:::demo 高级用法
```html
-
- 流程
+
+ 物流进度
买家下单
商家接单
买家提货
@@ -128,13 +138,13 @@ export default {
| 参数 | 说明 | 类型 | 默认值 | 可选值 |
|-----------|-----------|-----------|-------------|-------------|
-| active | 当前激活的步骤,从0开始 | `number` | | |
-| icon | 当前步骤的icon | `string` | | |
-| iconClass | 当前步骤栏为icon添加的类 | `string` | | |
-| title | 当前步骤从标题 | `string` | | |
-| description | 当前步骤描述 | `string` | | |
-| direction | 显示方向 | `string` | `horizontal` | `vertical/horizontal` |
-| activeColor | `active`状态时的颜色 | `string` | `#06bf04` | |
+| active | 当前步骤,起始值为0 | `Number` | | |
+| icon | 当前步骤的icon | `String` | | |
+| iconClass | 当前步骤栏为icon添加的类 | `String` | | |
+| title | 当前步骤从标题 | `String` | | |
+| description | 当前步骤描述 | `String` | | |
+| direction | 显示方向 | `String` | `horizontal` | `vertical` |
+| activeColor | active状态颜色 | `String` | `#06bf04` | |
### Steps Slot
@@ -142,4 +152,3 @@ export default {
|-----------|-----------|
| icon | 自定义icon区域 |
| message-extra | 状态栏添加额外的元素 |
-
diff --git a/docs/examples-docs/swipe.md b/docs/examples-docs/swipe.md
index 2ce3618c8..81c7bcee5 100644
--- a/docs/examples-docs/swipe.md
+++ b/docs/examples-docs/swipe.md
@@ -135,8 +135,8 @@ export default {
| 参数 | 说明 | 类型 | 默认值 | 可选值 |
|-----------|-----------|-----------|-------------|-------------|
-| autoPlay | 是否自动轮播 | `boolean` | `false` | `true`, `false` |
-| showIndicators | 是否显示指示器 | `boolean` | `true` | `true`, `false` |
+| autoPlay | 是否自动轮播 | `Boolean` | `false` | `true`, `false` |
+| showIndicators | 是否显示指示器 | `Boolean` | `true` | `true`, `false` |
### 事件
diff --git a/docs/examples-docs/switch-cell.md b/docs/examples-docs/switch-cell.md
new file mode 100644
index 000000000..24ff57fc8
--- /dev/null
+++ b/docs/examples-docs/switch-cell.md
@@ -0,0 +1,81 @@
+## SwitchCell 开关单元格
+
+`SwitchCell`组件是对`Switch`和`Cell`组件的封装
+
+
+
+### 使用指南
+``` javascript
+import { SwitchCell } from 'vant';
+
+Vue.component(SwitchCell.name, SwitchCell);
+```
+
+### 代码演示
+
+#### 基础用法
+
+:::demo 基础用法
+```html
+
+
+
+
+
+
+
+```
+:::
+
+#### 禁用状态
+通过`disabled`属性可以将组件设置为禁用状态
+
+:::demo 禁用状态
+```html
+
+
+
+```
+:::
+
+#### 加载状态
+通过`loading`属性可以将组件设置为加载状态
+
+:::demo 加载状态
+```html
+
+
+
+```
+:::
+
+### API
+
+| 参数 | 说明 | 类型 | 默认值 | 可选值 |
+|-----------|-----------|-----------|-------------|-------------|
+| v-model | 开关状态 | `Boolean` | | |
+| title | 左侧标题 | `String` | `''` | |
+| loading | 是否为加载状态 | `Boolean` | `false` | |
+| disabled | 是否为禁用状态 | `Boolean` | `false` | |
+
+### Event
+
+| 事件名 | 说明 | 参数 |
+|-----------|-----------|-----------|
+| change | 开关状态切换回调 | checked: 是否选中开关 |
\ No newline at end of file
diff --git a/docs/examples-docs/switch.md b/docs/examples-docs/switch.md
index cb02b9ec8..c17a479de 100644
--- a/docs/examples-docs/switch.md
+++ b/docs/examples-docs/switch.md
@@ -158,7 +158,7 @@ export default {
| 参数 | 说明 | 类型 | 默认值 | 可选值 |
|-----------|-----------|-----------|-------------|-------------|
-| v-model | 开关状态 | `boolean` | `false` | `true`, `false` |
-| loading | loading状态 | `boolean` | `false` | `true`, `false` |
-| disabled | 禁用状态 | `boolean` | `false` | `true`, `false` |
-| onChange | 开关状态切换回调(默认则改变开关状态) | `function` | - | - |
+| v-model | 开关状态 | `Boolean` | `false` | `true`, `false` |
+| loading | loading状态 | `Boolean` | `false` | `true`, `false` |
+| disabled | 禁用状态 | `Boolean` | `false` | `true`, `false` |
+| onChange | 开关状态切换回调(默认则改变开关状态) | `Function` | - | - |
diff --git a/docs/examples-docs/tab.md b/docs/examples-docs/tab.md
index 4c2d7486e..dca444810 100644
--- a/docs/examples-docs/tab.md
+++ b/docs/examples-docs/tab.md
@@ -233,18 +233,18 @@ export default {
| 参数 | 说明 | 类型 | 默认值 | 可选 |
|-----------|-----------|-----------|-------------|-------------|
-| classtype | 两种UI | `string` | `line` | `line`, `card` |
-| active | 默认激活的tab | `string`, `number` | `0` | |
-| navclass | tabs的内部nav上的自定义classname | `string` | | |
-| duration | 切换tab的动画时间 | `number` | `0.3` | | |
+| classtype | 两种UI | `String` | `line` | `line`, `card` |
+| active | 默认激活的tab | `String`, `Number` | `0` | |
+| navclass | tabs的内部nav上的自定义classname | `String` | | |
+| duration | 切换tab的动画时间 | `Number` | `0.3` | | |
### van-tab API
| 参数 | 说明 | 类型 | 默认值 | 可选 |
|-----------|-----------|-----------|-------------|-------------|
-| title | tab的标题 | `string` | | |
-| disabled | 是否禁用这个tab | `boolean` | `false` | |
+| title | tab的标题 | `String` | | |
+| disabled | 是否禁用这个tab | `Boolean` | `false` | |
### van-tabs Event
diff --git a/docs/examples-docs/tag.md b/docs/examples-docs/tag.md
index 4d21b6ba6..63491187f 100644
--- a/docs/examples-docs/tag.md
+++ b/docs/examples-docs/tag.md
@@ -1,10 +1,14 @@
@@ -20,44 +24,37 @@ Vue.component(Tag.name, Tag);
### 代码演示
#### 基础用法
-
-`Tag`默认是灰色,另外还有有三种类型,`danger`、`success`、`primary`,它们分别显示为红色,绿色和蓝色,你也可以加上自定义的类,为它们加上其他的颜色。
-
+通过 type 属性控制 Tag 颜色,默认为灰色
:::demo 基础用法
```html
-
- 返现
-
-
- 返现
- 四字标签
- 一
-
+标签
+标签
+标签
+标签
```
:::
-#### 高级用法
+#### 空心样式
+设置`plain`属性设置为空心样式
-设置`plain`为`true`时表示空心的`tag`,还可以设置`mark`为`true`,表示是否为标记。
-
-:::demo 高级用法
+:::demo 空心样式
```html
-
- 返现
- 返现
-
-
- 返现
- 返现
-
-
- 返现
- 返现
-
-
- 返现
- 返现
-
+标签
+标签
+标签
+标签
+```
+:::
+
+#### 标记样式
+通过`mark`设置为标记样式
+
+:::demo 标记样式
+```html
+标签
+标签
+标签
+标签
```
:::
@@ -65,12 +62,12 @@ Vue.component(Tag.name, Tag);
| 参数 | 说明 | 类型 | 默认值 | 可选值 |
|-----------|-----------|-----------|-------------|-------------|
-| plain | 是否是空心tag | `boolean` | `false` | |
-| mark | 是否是标记 | `boolean` | `false` | |
-| type | tag类型 | `string` | `''` | `primary`, `success`, `danger` |
+| type | 类型 | `String` | `''`| `primary` `success` `danger` |
+| plain | 是否为空心样式 | `Boolean` | `false` | |
+| mark | 是否为标记样式 | `Boolean` | `false` | |
### Slot
| name | 描述 |
|-----------|-----------|
-| - | 自定义tag显示内容 |
+| - | 自定义 Tag 显示内容 |
diff --git a/docs/examples-docs/uploader.md b/docs/examples-docs/uploader.md
index f09410dc2..378d88f28 100644
--- a/docs/examples-docs/uploader.md
+++ b/docs/examples-docs/uploader.md
@@ -52,8 +52,8 @@ export default {
| 参数 | 说明 | 类型 | 默认值 | 可选值 |
|-----------|-----------|-----------|-------------|-------------|
-| result-type | 读取文件的方式,以base64的方式读取;以文本的方式读取 | `string` | `dataUrl` | `dataUrl`, `text` |
-| disable | 是否禁用上传,在图片上传期间设置为true,禁止用户点击此组件上传图片 | `boolean` | `false` | |
+| result-type | 读取文件的方式,以base64的方式读取;以文本的方式读取 | `String` | `dataUrl` | `dataUrl`, `text` |
+| disable | 是否禁用上传,在图片上传期间设置为true,禁止用户点击此组件上传图片 | `Boolean` | `false` | |
| before-read | 读文件之前的钩子,参数为选择的文件,若返回 false 则停止读取文件。 | `Function` | | |
| after-read | 文件读完之后回调此函数,参数为{file:'选择的文件',content:'读的内容'} | `Function` | | |
diff --git a/docs/examples-docs/waterfall.md b/docs/examples-docs/waterfall.md
index a88a27528..268b02449 100644
--- a/docs/examples-docs/waterfall.md
+++ b/docs/examples-docs/waterfall.md
@@ -58,7 +58,7 @@ export default {
}
},
computed: {
- isWaterfallDisabled: function() {
+ isWaterfallDisabled() {
return this.loading || this.finished;
}
}
@@ -123,8 +123,8 @@ export default {
| 参数 | 说明 | 类型 | 默认值 | 可选值 |
|-----------|-----------|-----------|-------------|-------------|
-| v-waterfall-lower | 滚动到底部, 触发执行的函数 | `function` | - | |
-| v-waterfall-upper | 滚动到顶部, 触发执行的函数 | `function` | - | |
-| waterfall-disabled | 在vue对象中表示是否禁止瀑布流触发的key值 | `string` | - | |
-| waterfall-offset | 触发瀑布流加载的阈值 | `number` | `300` | |
+| v-waterfall-lower | 滚动到底部, 触发执行的函数 | `Function` | - | |
+| v-waterfall-upper | 滚动到顶部, 触发执行的函数 | `Function` | - | |
+| waterfall-disabled | 在vue对象中表示是否禁止瀑布流触发的key值 | `String` | - | |
+| waterfall-offset | 触发瀑布流加载的阈值 | `Number` | `300` | |
diff --git a/docs/src/ExamplesApp.vue b/docs/src/ExamplesApp.vue
index 78dd05c34..77859a6d4 100644
--- a/docs/src/ExamplesApp.vue
+++ b/docs/src/ExamplesApp.vue
@@ -54,44 +54,42 @@ export default {
diff --git a/docs/src/ExamplesDocsApp.vue b/docs/src/ExamplesDocsApp.vue
index c8753bf7f..85337be4a 100644
--- a/docs/src/ExamplesDocsApp.vue
+++ b/docs/src/ExamplesDocsApp.vue
@@ -7,7 +7,6 @@
diff --git a/packages/express-way/Option.vue b/packages/express-way/Option.vue
new file mode 100644
index 000000000..c29521dfa
--- /dev/null
+++ b/packages/express-way/Option.vue
@@ -0,0 +1,32 @@
+
+
+
+
+
+ {{ data.postage_title }}
+ {{ data.postage }}
+
+
{{ data.postage_desc }}
+
{{ data.postage_warn_desc }}
+
+
+
+
+
diff --git a/packages/express-way/index.vue b/packages/express-way/index.vue
new file mode 100644
index 000000000..fcc72da4a
--- /dev/null
+++ b/packages/express-way/index.vue
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
+
+ {{ currentOption.postage }}
+ {{ currentOption.postage_title }}
+
+
+
+
+
diff --git a/packages/field/index.vue b/packages/field/index.vue
index 67145aa67..c2f32d3e9 100644
--- a/packages/field/index.vue
+++ b/packages/field/index.vue
@@ -47,10 +47,11 @@
diff --git a/packages/goods-action-mini-btn/index.vue b/packages/goods-action-mini-btn/index.vue
new file mode 100644
index 000000000..4f91fd443
--- /dev/null
+++ b/packages/goods-action-mini-btn/index.vue
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
diff --git a/packages/goods-action/index.vue b/packages/goods-action/index.vue
new file mode 100644
index 000000000..8ab06d10a
--- /dev/null
+++ b/packages/goods-action/index.vue
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
diff --git a/packages/index.js b/packages/index.js
index 3a1ca3699..9388bcb57 100644
--- a/packages/index.js
+++ b/packages/index.js
@@ -1,77 +1,97 @@
+import Actionsheet from './actionsheet';
+import Badge from './badge';
+import BadgeGroup from './badge-group';
import Button from './button';
-import Switch from './switch';
-import Field from './field';
-import Radio from './radio';
+import Card from './card';
import Cell from './cell';
-import Icon from './icon';
import CellGroup from './cell-group';
import CellSwipe from './cell-swipe';
-import Popup from './popup';
-import Dialog from './dialog';
-import Picker from './picker';
-import RadioGroup from './radio-group';
-import Waterfall from './waterfall';
-import Loading from './loading';
-import Panel from './panel';
-import Card from './card';
-import Steps from './steps';
-import Tag from './tag';
import Checkbox from './checkbox';
import CheckboxGroup from './checkbox-group';
-import BadgeGroup from './badge-group';
-import Badge from './badge';
+import Col from './col';
+import DatetimePicker from './datetime-picker';
+import DeepSelect from './deep-select';
+import Dialog from './dialog';
+import ExpressWay from './express-way';
+import Field from './field';
+import GoodsAction from './goods-action';
+import GoodsActionBigBtn from './goods-action-big-btn';
+import GoodsActionMiniBtn from './goods-action-mini-btn';
+import Icon from './icon';
+import ImagePreview from './image-preview';
+import InvalidGoods from './invalid-goods';
+import Lazyload from './lazyload';
+import Loading from './loading';
+import NoticeBar from './notice-bar';
+import OrderGoods from './order-goods';
+import Panel from './panel';
+import PayOrder from './pay-order';
+import Picker from './picker';
+import Popup from './popup';
+import Progress from './progress';
+import Quantity from './quantity';
+import Radio from './radio';
+import RadioGroup from './radio-group';
+import Row from './row';
import Search from './search';
import Step from './step';
-import Tabs from './tabs';
-import Tab from './tab';
-import Lazyload from './lazyload';
-import ImagePreview from './image-preview';
-import Col from './col';
-import Row from './row';
-import Actionsheet from './actionsheet';
-import Quantity from './quantity';
-import Progress from './progress';
-import Toast from './toast';
-import Uploader from './uploader';
+import Steps from './steps';
import Swipe from './swipe';
import SwipeItem from './swipe-item';
-import DatetimePicker from './datetime-picker';
+import Switch from './switch';
+import SwitchCell from './switch-cell';
+import Tab from './tab';
+import Tabs from './tabs';
+import Tag from './tag';
+import Toast from './toast';
+import Uploader from './uploader';
+import Waterfall from './waterfall';
-const version = '0.8.6';
+const version = '0.8.9';
const components = [
+ Actionsheet,
+ Badge,
+ BadgeGroup,
Button,
- Switch,
- Field,
- Radio,
+ Card,
Cell,
- Icon,
CellGroup,
CellSwipe,
- Popup,
- Picker,
- RadioGroup,
- Loading,
- Panel,
- Card,
- Steps,
- Tag,
Checkbox,
CheckboxGroup,
- BadgeGroup,
- Badge,
+ Col,
+ DatetimePicker,
+ DeepSelect,
+ ExpressWay,
+ Field,
+ GoodsAction,
+ GoodsActionBigBtn,
+ GoodsActionMiniBtn,
+ Icon,
+ InvalidGoods,
+ Loading,
+ NoticeBar,
+ OrderGoods,
+ Panel,
+ PayOrder,
+ Picker,
+ Popup,
+ Progress,
+ Quantity,
+ Radio,
+ RadioGroup,
+ Row,
Search,
Step,
- Tabs,
- Tab,
- Col,
- Row,
- Actionsheet,
- Quantity,
- Progress,
- Uploader,
+ Steps,
Swipe,
SwipeItem,
- DatetimePicker
+ Switch,
+ SwitchCell,
+ Tab,
+ Tabs,
+ Tag,
+ Uploader
];
const install = function(Vue) {
@@ -90,84 +110,56 @@ if (typeof window !== 'undefined' && window.Vue) {
export {
install,
version,
+ Actionsheet,
+ Badge,
+ BadgeGroup,
Button,
- Switch,
- Field,
- Radio,
+ Card,
Cell,
- Icon,
CellGroup,
CellSwipe,
- Popup,
- Dialog,
- Picker,
- RadioGroup,
- Waterfall,
- Loading,
- Panel,
- Card,
- Steps,
- Tag,
Checkbox,
CheckboxGroup,
- BadgeGroup,
- Badge,
+ Col,
+ DatetimePicker,
+ DeepSelect,
+ Dialog,
+ ExpressWay,
+ Field,
+ GoodsAction,
+ GoodsActionBigBtn,
+ GoodsActionMiniBtn,
+ Icon,
+ ImagePreview,
+ InvalidGoods,
+ Lazyload,
+ Loading,
+ NoticeBar,
+ OrderGoods,
+ Panel,
+ PayOrder,
+ Picker,
+ Popup,
+ Progress,
+ Quantity,
+ Radio,
+ RadioGroup,
+ Row,
Search,
Step,
- Tabs,
- Tab,
- Lazyload,
- ImagePreview,
- Col,
- Row,
- Actionsheet,
- Quantity,
- Progress,
- Toast,
- Uploader,
+ Steps,
Swipe,
SwipeItem,
- DatetimePicker
+ Switch,
+ SwitchCell,
+ Tab,
+ Tabs,
+ Tag,
+ Toast,
+ Uploader,
+ Waterfall
};
export default {
install,
- version,
- Button,
- Switch,
- Field,
- Radio,
- Cell,
- Icon,
- CellGroup,
- CellSwipe,
- Popup,
- Dialog,
- Picker,
- RadioGroup,
- Waterfall,
- Loading,
- Panel,
- Card,
- Steps,
- Tag,
- Checkbox,
- CheckboxGroup,
- BadgeGroup,
- Badge,
- Search,
- Step,
- Tabs,
- Tab,
- Lazyload,
- ImagePreview,
- Col,
- Row,
- Actionsheet,
- Quantity,
- Progress,
- Toast,
- Uploader,
- Swipe,
- SwipeItem,
- DatetimePicker
+ version
};
diff --git a/packages/invalid-goods/Card.vue b/packages/invalid-goods/Card.vue
new file mode 100644
index 000000000..dff9c0e40
--- /dev/null
+++ b/packages/invalid-goods/Card.vue
@@ -0,0 +1,30 @@
+
+
+
+
![]()
+
失效
+
+
+
+
{{ item.title }}
+ ¥{{ item.price }}
+
+
+
{{ item.sku }}
+
x{{ item.num }}
+
+
{{ item.unavailable_desc }}
+
+
+
+
+
+
diff --git a/packages/invalid-goods/index.vue b/packages/invalid-goods/index.vue
new file mode 100644
index 000000000..d0e1079c7
--- /dev/null
+++ b/packages/invalid-goods/index.vue
@@ -0,0 +1,78 @@
+
+
+
+
{{ title }}
+
+
+
+
![]()
+
+
+
+ 共{{ formattedGoods.length }}件
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/mixins/popup/index.js b/packages/mixins/popup/index.js
index cb98e2638..52317cbe2 100644
--- a/packages/mixins/popup/index.js
+++ b/packages/mixins/popup/index.js
@@ -99,6 +99,7 @@ export default {
* 显示popup
*/
open() {
+ /* istanbul ignore if */
if (this.$isServer) return;
if (this.opened) return;
diff --git a/packages/mixins/popup/popup-context.js b/packages/mixins/popup/popup-context.js
index 45cbae621..0e0588b7b 100644
--- a/packages/mixins/popup/popup-context.js
+++ b/packages/mixins/popup/popup-context.js
@@ -1,12 +1,7 @@
import Vue from 'vue';
-let context;
const _global = Vue.prototype.$isServer ? global : window;
-if (_global && _global.popupContext) {
- context = _global.popupContext;
-}
-
const DEFAULT_CONTEXT = {
idSeed: 1,
zIndex: 2000,
@@ -15,23 +10,24 @@ const DEFAULT_CONTEXT = {
modalStack: []
};
-context = _global.popupContext = {
- ...DEFAULT_CONTEXT,
- ...context
-};
+if (!_global.popupContext) {
+ _global.popupContext = {
+ ...DEFAULT_CONTEXT
+ };
+}
const PopupContext = {
getContext(key) {
- return context[key];
+ return _global.popupContext[key];
},
setContext(key, value) {
- context[key] = value;
+ _global.popupContext[key] = value;
},
plusKeyByOne(key) {
- const oldVal = +context[key];
- context[key] = oldVal + 1;
+ const oldVal = +_global.popupContext[key];
+ _global.popupContext[key] = oldVal + 1;
return oldVal;
}
diff --git a/packages/notice-bar/index.vue b/packages/notice-bar/index.vue
new file mode 100644
index 000000000..4060dccc6
--- /dev/null
+++ b/packages/notice-bar/index.vue
@@ -0,0 +1,93 @@
+
+
+
+
+
diff --git a/packages/order-goods/Card.vue b/packages/order-goods/Card.vue
new file mode 100644
index 000000000..edfa63b90
--- /dev/null
+++ b/packages/order-goods/Card.vue
@@ -0,0 +1,102 @@
+
+
+
+
+
![]()
+
+
+
+
{{ data.title }}
+ {{ price }}
+
+
+
+
{{ desc }}
+
x {{ data.num }}
+
+
+
+ 预售
+ 周期购
+
+
+ 查看留言
+
+
+
+
+
+
+ 备注信息
+
+ -
+
+
+
+
+ {{ value }}
+
+
+
+ 查看订单详情
+
+
+
+
+
+
diff --git a/packages/order-goods/Empty.vue b/packages/order-goods/Empty.vue
new file mode 100644
index 000000000..f997cfe1a
--- /dev/null
+++ b/packages/order-goods/Empty.vue
@@ -0,0 +1,25 @@
+
+
+
![]()
+
{{ message }}
+
{{ buttonText }}
+
+
+
+
diff --git a/packages/order-goods/Header.vue b/packages/order-goods/Header.vue
new file mode 100644
index 000000000..956229556
--- /dev/null
+++ b/packages/order-goods/Header.vue
@@ -0,0 +1,26 @@
+
+
+
+
+
diff --git a/packages/order-goods/Message.vue b/packages/order-goods/Message.vue
new file mode 100644
index 000000000..36a9af8e2
--- /dev/null
+++ b/packages/order-goods/Message.vue
@@ -0,0 +1,50 @@
+
+
+
+ {{ message }}
+
+
+
+
diff --git a/packages/order-goods/Price.vue b/packages/order-goods/Price.vue
new file mode 100644
index 000000000..ea1f68a5b
--- /dev/null
+++ b/packages/order-goods/Price.vue
@@ -0,0 +1,32 @@
+
+
+
+
+
diff --git a/packages/order-goods/index.vue b/packages/order-goods/index.vue
new file mode 100644
index 000000000..56f808ecb
--- /dev/null
+++ b/packages/order-goods/index.vue
@@ -0,0 +1,114 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/order-goods/utils.js b/packages/order-goods/utils.js
new file mode 100644
index 000000000..50d57b953
--- /dev/null
+++ b/packages/order-goods/utils.js
@@ -0,0 +1,13 @@
+/**
+ * 拼接商品价格(金额和积分)
+ */
+export function getTotalPrice(price, points) {
+ const arr = [];
+ if (points) {
+ arr.push(points + '积分');
+ }
+ if (price) {
+ arr.push('¥' + (price / 100).toFixed(2));
+ }
+ return arr.join(' + ');
+}
diff --git a/packages/panel/index.vue b/packages/panel/index.vue
index 37003010c..eed3760d7 100644
--- a/packages/panel/index.vue
+++ b/packages/panel/index.vue
@@ -10,7 +10,7 @@
-
diff --git a/packages/pay-order/index.vue b/packages/pay-order/index.vue
new file mode 100644
index 000000000..18a71ffe2
--- /dev/null
+++ b/packages/pay-order/index.vue
@@ -0,0 +1,66 @@
+
+
+
{{ tip }}
+
+
+
+ 合计:
+ ¥{{ priceInterger }}.
+ {{ priceDecimal }}
+
+
+
+ {{ loading ? '' : buttonText }}
+
+
+
+
+
+
diff --git a/packages/swipe/index.vue b/packages/swipe/index.vue
index 6d2e642e0..efad94805 100644
--- a/packages/swipe/index.vue
+++ b/packages/swipe/index.vue
@@ -3,7 +3,10 @@
-
+
diff --git a/packages/switch-cell/index.vue b/packages/switch-cell/index.vue
new file mode 100644
index 000000000..911d33da5
--- /dev/null
+++ b/packages/switch-cell/index.vue
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
diff --git a/packages/tag/index.vue b/packages/tag/index.vue
index e24bf0990..4fd9ad45d 100644
--- a/packages/tag/index.vue
+++ b/packages/tag/index.vue
@@ -1,21 +1,21 @@
-
+
diff --git a/packages/vant-css/package.json b/packages/vant-css/package.json
index d3dbbe043..3774e20c3 100644
--- a/packages/vant-css/package.json
+++ b/packages/vant-css/package.json
@@ -1,6 +1,6 @@
{
"name": "vant-css",
- "version": "0.8.6",
+ "version": "0.8.9",
"description": "vant css.",
"main": "lib/index.css",
"style": "lib/index.css",
diff --git a/packages/vant-css/src/badge.css b/packages/vant-css/src/badge.css
index 854c9d6b8..d79285264 100644
--- a/packages/vant-css/src/badge.css
+++ b/packages/vant-css/src/badge.css
@@ -32,9 +32,7 @@
display: block;
}
&::after {
- @mixin border-retina (top);
- @mixin border-retina (right);
- @mixin border-retina (left);
+ @mixin border-retina (top, right, left);
}
}
diff --git a/packages/vant-css/src/button.css b/packages/vant-css/src/button.css
index a3fd5f146..81ce54d89 100644
--- a/packages/vant-css/src/button.css
+++ b/packages/vant-css/src/button.css
@@ -103,6 +103,7 @@
line-height: 50px;
border: 0;
border-radius: 0;
+ font-size: 16px;
color: $bottom-action-button-default-color;
background-color: $bottom-action-button-default-background-color;
diff --git a/packages/vant-css/src/cell.css b/packages/vant-css/src/cell.css
index 5bc960596..8b381dd41 100644
--- a/packages/vant-css/src/cell.css
+++ b/packages/vant-css/src/cell.css
@@ -37,6 +37,10 @@
&__title {
display: table-cell;
+
+ .van-icon {
+ margin-right: 5px;
+ }
}
&__label {
diff --git a/packages/vant-css/src/common/var.css b/packages/vant-css/src/common/var.css
index 2edb3809e..61de30818 100644
--- a/packages/vant-css/src/common/var.css
+++ b/packages/vant-css/src/common/var.css
@@ -13,6 +13,7 @@ $c-yellow-light: #fcff00;
$c-orange: #f60;
$c-orange-dark: #f15a0c;
$c-blue: #38f;
+$c-active: #e8e8e8;
$c-background: #f8f8f8;
diff --git a/packages/vant-css/src/deep-select.css b/packages/vant-css/src/deep-select.css
new file mode 100644
index 000000000..265484ef0
--- /dev/null
+++ b/packages/vant-css/src/deep-select.css
@@ -0,0 +1,59 @@
+@import "./mixins/ellipsis.css";
+@import "./mixins/clearfix.css";
+@import './common/var.css';
+
+.van-deep-select {
+ user-select: none;
+ position: relative;
+ @mixin clearfix;
+
+ &__nav {
+ width: 143px;
+ /*float: left;*/
+ position: absolute;
+ left: 0;
+ top: 0;
+ bottom: 0;
+ overflow: scroll;
+ background-color: $c-white;
+ -webkit-overflow-scrolling: touch;
+ }
+
+ &__nitem {
+ line-height: 44px;
+ padding: 0 15px;
+ background-color: $c-white;
+ @mixin multi-ellipsis 1;
+
+ &--active {
+ background-color: $c-background;
+ }
+ }
+
+ &__content {
+ padding: 0 15px;
+ margin-left: 143px;
+ overflow: scroll;
+ -webkit-overflow-scrolling: touch;
+ }
+
+ &__item {
+ position: relative;
+ line-height: 44px;
+ padding-left: 5px;
+ padding-right: 18px;
+ @mixin multi-ellipsis 1;
+
+ &--active {
+ color: $button-danger-background-color;
+ }
+ }
+
+ &__selected {
+ float: right;
+ position: absolute;
+ right: 0px;
+ top: 0;
+ bottom: 0;
+ }
+}
diff --git a/packages/vant-css/src/express-way.css b/packages/vant-css/src/express-way.css
new file mode 100644
index 000000000..a0507b435
--- /dev/null
+++ b/packages/vant-css/src/express-way.css
@@ -0,0 +1,58 @@
+.van-express-way {
+ padding: 0;
+
+ &__fee,
+ &__type {
+ color: #666;
+ line-height: 1.5;
+ }
+
+ &__fee {
+ font-size: 14px;
+ }
+
+ &__type {
+ font-size: 12px;
+ }
+
+ .van-actionsheet__content {
+ max-height: 290px;
+ overflow-y: auto;
+ }
+
+ &-option {
+ position: relative;
+ padding: 14px 15px 14px 0;
+
+ .van-radio {
+ top: 50%;
+ left: 0;
+ margin-top: -11px;
+ position: absolute;
+ }
+
+ &__content {
+ padding-left: 30px;
+
+ p {
+ color: #999;
+ font-size: 12px;
+ line-height: 16px;
+ }
+ }
+
+ &__title {
+ span {
+ vertical-align: middle;
+
+ &:first-child {
+ margin-right: 5px;
+ }
+ }
+ }
+
+ &__warn {
+ color: #f09000;
+ }
+ }
+}
\ No newline at end of file
diff --git a/packages/vant-css/src/goods-action.css b/packages/vant-css/src/goods-action.css
new file mode 100644
index 000000000..5bb1ecdd3
--- /dev/null
+++ b/packages/vant-css/src/goods-action.css
@@ -0,0 +1,46 @@
+@import './common/var.css';
+@import './mixins/border_retina.css';
+
+.van-goods-action {
+ left: 0;
+ right: 0;
+ bottom: 0;
+ display: flex;
+ position: fixed;
+
+ &__big-btn {
+ flex: 1;
+ }
+
+ &__mini-btn {
+ color: #666;
+ display: flex;
+ height: 50px;
+ font-size: 10px;
+ min-width: 15%;
+ position: relative;
+ text-align: center;
+ background-color: #fff;
+ flex-direction: column;
+ justify-content: center;
+
+ &::after {
+ @mixin border-retina (top, left), #cacaca;
+ }
+
+ &:first-child {
+ &::after {
+ border-left-width: 0;
+ }
+ }
+
+ &:active {
+ background-color: $c-active;
+ }
+ }
+
+ &__mini-btn-icon {
+ font-size: 20px;
+ margin-bottom: 5px;
+ }
+}
diff --git a/packages/vant-css/src/index.css b/packages/vant-css/src/index.css
index d18b5a74d..25bebf27e 100644
--- a/packages/vant-css/src/index.css
+++ b/packages/vant-css/src/index.css
@@ -6,6 +6,7 @@
@import './cell.css';
@import './cell-swipe.css';
@import './card.css';
+@import './deep-select.css';
@import './dialog.css';
@import './field.css';
@import './icon.css';
@@ -30,3 +31,10 @@
@import './toast.css';
@import './uploader.css';
@import './swipe.css';
+@import './notice-bar.css';
+@import './switch-cell.css';
+@import './express-way.css';
+@import './pay-order.css';
+@import './order-goods.css';
+@import './invalid-goods.css';
+@import './goods-action.css';
diff --git a/packages/vant-css/src/invalid-goods.css b/packages/vant-css/src/invalid-goods.css
new file mode 100644
index 000000000..83317b9d3
--- /dev/null
+++ b/packages/vant-css/src/invalid-goods.css
@@ -0,0 +1,121 @@
+@import "./mixins/ellipsis.css";
+
+$van-invalid-goods-photo-size: 90px;
+
+.van {
+ &-invalid-goods {
+ margin: 10px 0;
+
+ &__title {
+ color: #999;
+ font-size: 12px;
+ text-align: center;
+ margin-bottom: 10px;
+ }
+
+ &__container {
+ padding: 5px 10px;
+ }
+
+ &__gallery {
+ overflow: hidden;
+ height: $van-invalid-goods-photo-size;
+ }
+
+ &__thumb {
+ float: left;
+ display: flex;
+ height: 100%;
+ position: relative;
+ margin-right: 5px;
+ align-items: center;
+ justify-content: center;
+
+ img {
+ max-width: $van-invalid-goods-photo-size;
+ max-height: $van-invalid-goods-photo-size;
+ }
+ }
+
+ &__count {
+ position: absolute;
+ top: 0;
+ right: 0;
+ width: 80px;
+ color: #666;
+ font-size: 14px;
+ padding-right: 8px;
+ line-height: calc($van-invalid-goods-photo-size + 10px);
+ background-color: #fff;
+ text-align: right;
+
+ span {
+ margin-right: 6px;
+ vertical-align: middle;
+ }
+ }
+
+ &__list {
+ max-height: 400px;
+ overflow-y: scroll;
+ }
+ }
+
+ &-invalid-goods-card {
+ color: #999;
+ margin: 10px 0;
+ padding: 5px 10px;
+ background-color: #fafafa;
+ height: $van-invalid-goods-photo-size;
+
+ &__flag {
+ position: absolute;
+ left: 0;
+ top: 70px;
+ width: $van-invalid-goods-photo-size;
+ color: #fff;
+ font-size: 12px;
+ line-height: 20px;
+ text-align: center;
+ background-color: rgba(0,0,0,.6);
+ }
+
+ &__content {
+ width: 100%;
+ padding-left: 100px;
+ box-sizing: border-box;
+ }
+
+ &__row {
+ display: flex;
+ line-height: 20px;
+ }
+
+ &__title,
+ &__sku {
+ flex: 1;
+ @mixin multi-ellipsis 2;
+ }
+
+ &__title,
+ &__price {
+ font-size: 14px;
+ }
+
+ &__num,
+ &__sku {
+ font-size: 12px;
+ }
+
+ &__desc {
+ color: #f60;
+ font-size: 12px;
+ margin-top: 5px;
+ }
+ }
+
+ .van-icon-arrow {
+ color: #666;
+ font-size: 10px;
+ }
+}
\ No newline at end of file
diff --git a/packages/vant-css/src/loading.css b/packages/vant-css/src/loading.css
index 1fd4c337e..704897bf4 100644
--- a/packages/vant-css/src/loading.css
+++ b/packages/vant-css/src/loading.css
@@ -10,9 +10,8 @@
}
.van-loading {
-
- line-height: 0;
font-size: 0;
+ line-height: 0;
&--circle {
width: 16px;
@@ -26,11 +25,10 @@
}
&__spinner {
- display: inline-block;
- height: 100%;
width: 100%;
- animation: van-loading 0.8s linear;
- animation-iteration-count: infinite;
+ height: 100%;
+ display: inline-block;
+ animation: van-loading 0.8s linear infinite;
&--circle {
border-radius: 100%;
diff --git a/packages/vant-css/src/notice-bar.css b/packages/vant-css/src/notice-bar.css
new file mode 100644
index 000000000..67f912a1a
--- /dev/null
+++ b/packages/vant-css/src/notice-bar.css
@@ -0,0 +1,36 @@
+@import './common/var.css';
+
+.van-notice-bar {
+ color: #f60;
+ padding: 9px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ background-color: #fff7cc;
+
+ &--withicon {
+ position: relative;
+ padding-right: 30px;
+ }
+
+ &__icon {
+ top: 10px;
+ right: 10px;
+ position: absolute;
+ font-size: 15px;
+ line-height: 1;
+ cursor: pointer;
+ }
+
+ &__content-wrap {
+ height: 18px;
+ overflow: hidden;
+ position: relative;
+ }
+
+ &__content {
+ position: absolute;
+ white-space: nowrap;
+ transition-property: left;
+ transition-timing-function: linear;
+ }
+}
diff --git a/packages/vant-css/src/order-goods.css b/packages/vant-css/src/order-goods.css
new file mode 100644
index 000000000..b40500e16
--- /dev/null
+++ b/packages/vant-css/src/order-goods.css
@@ -0,0 +1,214 @@
+@import "./mixins/border_retina.css";
+
+.van-order-goods {
+ background-color: #fff;
+
+ &-card {
+ margin-left: -15px;
+ position: relative;
+ background-color: #fafafa;
+
+ &:not(:first-child),
+ &__delivery {
+ &::after {
+ @mixin border-retina (top);
+ }
+ }
+
+ &__tags {
+ flex: 1;
+ }
+
+ &__tag-green,
+ &__tag-red {
+ font-size: 10px;
+ padding: 3px 5px;
+ margin-right: 5px;
+ border-radius: 2px;
+ display: inline-block;
+ }
+
+ &__tag-green {
+ color: #fff;
+ background-color: #4b0;
+ }
+
+ &__tag-red {
+ color: #ed5050;
+ padding: 5px 8px;
+ border: 1px solid #ed5050;
+ }
+
+ &__delivery {
+ padding-left: 15px;
+ background-color: transparent;
+
+ .van-cell__value {
+ color: #666;
+ }
+ }
+
+ &__present {
+ top: 0;
+ left: 3px;
+ width: 18px;
+ height: 36px;
+ position: absolute;
+ background: url("https://b.yzcdn.cn/v2/image/wap/trade/confirm/present@2x.png") no-repeat;
+ background-size: 18px 36px;
+ }
+
+ .van-button&__message-button {
+ height: 24px;
+ padding: 0 5px;
+ font-size: 10px;
+ line-height: 22px;
+ }
+
+ &__button {
+ padding: 20px 15px 0;
+ .van-button {
+ height: 40px;
+ line-height: 38px;
+ }
+ }
+
+ &__message {
+ width: 100%;
+ height: 100%;
+ background-color: #f8f8f8;
+
+ h2 {
+ color: #999;
+ font-size: 12px;
+ line-height: 18px;
+ padding: 5px 0 5px 10px;
+ }
+
+ ul {
+ background-color: #fff;
+ }
+
+ p,
+ a,
+ label {
+ font-size: 14px;
+ padding: 14px 0;
+ line-height: 20px;
+ vertical-align: top;
+ display: inline-block;
+ }
+
+ label {
+ color: #c9c9c9;
+ min-width: 90px;
+ }
+
+ li {
+ display: flex;
+ padding: 0 10px;
+ position: relative;
+
+ &:not(:last-child)::after {
+ @mixin border-retina (bottom);
+ }
+
+ img {
+ width: 70px;
+ height: 70px;
+ }
+ }
+ }
+ }
+
+ &-empty {
+ margin-left: -15px;
+ text-align: center;
+ position: relative;
+
+ &::after {
+ @mixin border-retina (top);
+ }
+
+ p {
+ color: #999;
+ padding: 0 10px;
+ font-size: 14px;
+ line-height: 20px;
+ }
+
+ img {
+ width: 80px;
+ height: 84px;
+ padding: 15px 0;
+ }
+
+ .van-button {
+ height: 41px;
+ margin: 15px 0;
+ padding: 0 10px;
+ line-height: 39px;
+ border-color: #e5e5e5;
+ }
+ }
+
+ &-header {
+ line-height: 50px;
+
+ a,
+ img,
+ .van-icon {
+ vertical-align: middle;
+ }
+
+ .van-icon {
+ font-size: 18px;
+ margin-right: 5px;
+ }
+
+ a {
+ color: #333;
+ font-size: 14px;
+ }
+
+ img {
+ height: 14px;
+ margin-left: 5px;
+ }
+ }
+
+ &-message {
+ textarea {
+ color: #666;
+ padding: 0;
+ width: 100%;
+ height: 22px;
+ border: none;
+ resize: none;
+ outline: none;
+ display: block;
+ font-size: 14px;
+ line-height: 22px;
+ transition: height .3s ease-in-out;
+ }
+
+ textarea&-focused {
+ height: 48px;
+ }
+
+ p {
+ color: #666;
+ text-align: left;
+ }
+
+ .van-cell__title {
+ width: 75px;
+ }
+ }
+
+ &-price {
+ .van-cell__value {
+ color: #f44;
+ }
+ }
+}
diff --git a/packages/vant-css/src/pay-order.css b/packages/vant-css/src/pay-order.css
new file mode 100644
index 000000000..f674c6f04
--- /dev/null
+++ b/packages/vant-css/src/pay-order.css
@@ -0,0 +1,59 @@
+.van-pay-order {
+ left: 0;
+ bottom: 0;
+ width: 100%;
+ z-index: 100;
+ position: fixed;
+ user-select: none;
+
+ &__tip {
+ color: #f60;
+ font-size: 12px;
+ line-height: 18px;
+ padding: 10px 10px;
+ background-color: #fff6e1;
+ }
+
+ &__bar {
+ height: 50px;
+ display: flex;
+ line-height: 50px;
+ background-color: #fff;
+ }
+
+ &__price {
+ flex: 1;
+ text-align: right;
+ padding-right: 10px;
+ }
+
+ &__price-text {
+ color: #666;
+ font-size: 16px;
+ }
+
+ &__price-interger {
+ color: #f44;
+ font-size: 16px;
+ }
+
+ &__price-decimal {
+ color: #f44;
+ font-size: 12px;
+ }
+
+ .van-button {
+ width: 110px;
+ height: 100%;
+ border-radius: 0;
+
+ &--disabled {
+ border: none;
+ }
+
+ .van-loading__spinner--white {
+ border-color: rgba(255,255,255, .8);
+ border-top-color: transparent;
+ }
+ }
+}
diff --git a/packages/vant-css/src/switch-cell.css b/packages/vant-css/src/switch-cell.css
new file mode 100644
index 000000000..7edabe8bd
--- /dev/null
+++ b/packages/vant-css/src/switch-cell.css
@@ -0,0 +1,9 @@
+.van-switch-cell {
+ .van-cell__title {
+ vertical-align: middle;
+ }
+
+ .van-switch {
+ float: right;
+ }
+}
\ No newline at end of file
diff --git a/test/unit/components/goods-action.vue b/test/unit/components/goods-action.vue
new file mode 100644
index 000000000..bf867989c
--- /dev/null
+++ b/test/unit/components/goods-action.vue
@@ -0,0 +1,37 @@
+
+
+
+ 客服
+
+
+ 购物车
+
+
+ 加入购物车
+
+
+ 立即购买
+
+
+
+
+
diff --git a/test/unit/components/notice-bar.vue b/test/unit/components/notice-bar.vue
new file mode 100644
index 000000000..7eed57545
--- /dev/null
+++ b/test/unit/components/notice-bar.vue
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
diff --git a/test/unit/get-webpack-conf.js b/test/unit/get-webpack-conf.js
index 6d0818692..d583169ad 100644
--- a/test/unit/get-webpack-conf.js
+++ b/test/unit/get-webpack-conf.js
@@ -35,7 +35,7 @@ function getWebpackConfig(testFileName) {
stats: 'errors-only',
resolve: {
modules: [path.resolve(process.cwd(), 'node_modules'), 'node_modules'],
- extensions: ['.js', '.json', '.vue'],
+ extensions: ['.js', '.json', '.vue', '.css'],
alias: {
src: path.resolve(process.cwd(), 'src'),
packages: path.resolve(process.cwd(), 'packages'),
@@ -75,7 +75,21 @@ function getWebpackConfig(testFileName) {
]
},
{
- test: /\.vue$/,
+ test: /test\/unit\/components\/.*\.vue$|packages\/swipe\/.*\.vue$/,
+ use: [
+ {
+ loader: 'vue-loader',
+ options: {
+ loaders: {
+ css: ['style-loader', 'css-loader', 'postcss-loader']
+ }
+ }
+ }
+ ]
+ },
+ {
+ test: /packages\/.*\.vue$/,
+ exclude: /packages\/swipe\/.*\.vue$/,
use: [
{
loader: 'vue-loader',
diff --git a/test/unit/index.js b/test/unit/index.js
index 9f20bac30..cac038bbe 100644
--- a/test/unit/index.js
+++ b/test/unit/index.js
@@ -13,4 +13,4 @@ if (process.env.TEST_FILE) {
});
} else {
testsReq.keys().forEach(testsReq);
-}
\ No newline at end of file
+}
diff --git a/test/unit/karma.conf.js b/test/unit/karma.conf.js
index 7c8a89d96..0056f945a 100644
--- a/test/unit/karma.conf.js
+++ b/test/unit/karma.conf.js
@@ -14,7 +14,8 @@ module.exports = function(config) {
reporters: ['spec', 'coverage'],
files: ['./index.js'],
preprocessors: {
- './index.js': ['webpack', 'sourcemap']
+ './index.js': ['webpack', 'sourcemap'],
+ 'test/unit/!(components)/**/*.vue': ['coverage']
},
webpack: getWebpackConfig(getTestFileName()),
webpackMiddleware: {
diff --git a/test/unit/specs/cell-swipe.spec.js b/test/unit/specs/cell-swipe.spec.js
index 89e5ca833..ed142b25f 100644
--- a/test/unit/specs/cell-swipe.spec.js
+++ b/test/unit/specs/cell-swipe.spec.js
@@ -7,14 +7,14 @@ const defaultProps = {
leftWidth: 100,
rightWidth: 100
}
-}
+};
describe('CellSwipe', () => {
let wrapper;
afterEach(() => {
wrapper && wrapper.destroy();
});
-
+
it('render left or right part when has width', () => {
wrapper = mount(CellSwipe, defaultProps);
expect(wrapper.find('.van-cell-swipe__left').length).to.equal(1);
@@ -97,7 +97,7 @@ describe('CellSwipe', () => {
triggerTouch(wrapper, 'touchstart', 0, 0);
triggerTouch(wrapper, 'touchmove', 1, 0);
-
+
wrapper.vm.$nextTick(() => {
expect(wrapper.vm.offset).to.equal(0);
expect(wrapper.vm.opened).to.be.false;
diff --git a/test/unit/specs/deep-select.spec.js b/test/unit/specs/deep-select.spec.js
new file mode 100644
index 000000000..2fa1a85b9
--- /dev/null
+++ b/test/unit/specs/deep-select.spec.js
@@ -0,0 +1,68 @@
+import DeepSelect from 'packages/deep-select';
+import { mount } from 'avoriaz';
+
+describe('DeepSelect', () => {
+ let wrapper;
+ afterEach(() => {
+ wrapper && wrapper.destroy();
+ });
+
+ it('create an empty deep-select', () => {
+ wrapper = mount(DeepSelect);
+ expect(wrapper.hasStyle('height', '0px')).to.be.true;
+ });
+
+ it('create a deep-select correctly', () => {
+ wrapper = mount(DeepSelect, {
+ propsData: {
+ items: [{
+ text: 'A',
+ children: [{
+ text: 'Cc',
+ id: 123
+ }]
+ }],
+ maxHeight: 200
+ }
+ });
+ expect(wrapper.hasClass('van-deep-select')).to.be.true;
+ expect(wrapper.hasStyle('height', '44px')).to.be.true;
+ expect(wrapper.propsData().maxHeight).to.equal(200);
+ });
+
+ it('interact with this component', () => {
+ wrapper = mount(DeepSelect, {
+ propsData: {
+ items: [{
+ text: 'A',
+ children: [{
+ text: 'Cc',
+ id: 123
+ }, {
+ text: 'Bb',
+ id: 234
+ }]
+ }, {
+ text: 'B',
+ children: [{
+ text: 'Nmi',
+ id: 345
+ }]
+ }],
+ maxHeight: 220
+ }
+ });
+ wrapper.vm.$on('navclick', index => {
+ wrapper.vm.mainActiveIndex = index;
+ });
+ wrapper.vm.$on('itemclick', item => {
+ wrapper.vm.activeId = item.id;
+ });
+ const secondNav = wrapper.find('.van-deep-select__nitem')[1];
+ secondNav.trigger('click');
+ expect(wrapper.vm.mainActiveIndex).to.equal(1);
+ const target = wrapper.find('.van-deep-select__item')[0];
+ target.trigger('click');
+ expect(wrapper.vm.activeId).to.equal(345);
+ });
+});
diff --git a/test/unit/specs/express-way.spec.js b/test/unit/specs/express-way.spec.js
new file mode 100644
index 000000000..06185dddd
--- /dev/null
+++ b/test/unit/specs/express-way.spec.js
@@ -0,0 +1,201 @@
+import ExpressWay from 'packages/express-way';
+import { mount } from 'avoriaz';
+import { DOMChecker } from '../utils';
+
+const mockData = [{
+ 'postage': 10050,
+ 'postage_desc': '由商家门店提供配送服务, 起送价 0.01 元',
+ 'postage_title': '同城配送',
+ 'express_type': 1
+}, {
+ 'postage': 0,
+ 'postage_desc': '由商家选择合作快递为您服务',
+ 'postage_title': '快递发货',
+ 'express_type': 2,
+ 'postage_warn_desc': '3天后发货'
+}];
+
+describe('ExpressWay', () => {
+ let wrapper;
+ afterEach(() => {
+ wrapper && wrapper.destroy();
+ });
+
+ it('default', () => {
+ wrapper = mount(ExpressWay, {
+ attachToDocument: true,
+ propsData: {
+ value: 1,
+ expressList: mockData
+ }
+ });
+
+ DOMChecker(wrapper, {
+ text: {
+ '.van-cell__text': '配送方式',
+ '.van-express-way__fee': '¥100.50',
+ '.van-express-way__type': mockData[0].postage_title,
+ '.van-actionsheet__header h3': '配送方式',
+ '.van-express-way-option__title span': mockData[0].postage_title,
+ '.van-express-way-option__content p': mockData[0].postage_desc
+ },
+ count: {
+ '.van-icon-arrow': 1
+ },
+ style: {
+ '.van-actionsheet': {
+ display: 'none'
+ }
+ }
+ });
+ });
+
+ it('show actionsheet', (done) => {
+ wrapper = mount(ExpressWay, {
+ attachToDocument: true,
+ propsData: {
+ value: 1,
+ expressList: mockData
+ }
+ });
+
+ // 点击后弹出 actionsheet
+ const cells = wrapper.find('.van-cell');
+ cells[cells.length - 1].trigger('click');
+ setTimeout(() => {
+ expect(wrapper.find('.van-actionsheet')[0].hasStyle('display', 'none')).to.equal(false);
+ done();
+ }, 500);
+ });
+
+ it('change express way', (done) => {
+ wrapper = mount(ExpressWay, {
+ attachToDocument: true,
+ propsData: {
+ value: 1,
+ expressList: mockData
+ }
+ });
+
+ wrapper.vm.$on('input', val => {
+ wrapper.vm.value = val;
+ });
+
+ // 点击后弹出 actionsheet
+ const cells = wrapper.find('.van-cell');
+ cells[cells.length - 1].trigger('click');
+
+ // 监听 change 事件
+ const submitSpyFunc = sinon.spy();
+ wrapper.vm.$on('change', submitSpyFunc);
+
+ setTimeout(() => {
+ expect(wrapper.find('.van-actionsheet')[0].hasStyle('display', 'none')).to.equal(false);
+
+ const secondOption = wrapper.find('.van-express-way-option')[1];
+ secondOption.trigger('click');
+
+ setTimeout(() => {
+ expect(wrapper.find('.van-actionsheet')[0].hasStyle('display', 'none')).to.equal(true);
+
+ DOMChecker(wrapper, {
+ text: {
+ '.van-express-way__fee': '免运费',
+ '.van-express-way__type': mockData[1].postage_title
+ }
+ });
+
+ // 修改后触发 change 事件
+ expect(submitSpyFunc.calledOnce).to.be.true;
+ done();
+ }, 500);
+ }, 500);
+ });
+
+ it('cellTitle prop', () => {
+ wrapper = mount(ExpressWay, {
+ attachToDocument: true,
+ propsData: {
+ value: 1,
+ cellTitle: '测试标题',
+ expressList: mockData
+ }
+ });
+
+ DOMChecker(wrapper, {
+ text: {
+ '.van-cell__text': '测试标题'
+ }
+ });
+ });
+
+ it('actionsheetTitle prop', () => {
+ wrapper = mount(ExpressWay, {
+ attachToDocument: true,
+ propsData: {
+ value: 1,
+ actionsheetTitle: '测试标题',
+ expressList: mockData
+ }
+ });
+
+ DOMChecker(wrapper, {
+ text: {
+ '.van-actionsheet__header h3': '测试标题'
+ }
+ });
+ });
+
+ it('set editable false ', () => {
+ wrapper = mount(ExpressWay, {
+ attachToDocument: true,
+ propsData: {
+ value: 1,
+ editable: false,
+ expressList: mockData
+ }
+ });
+
+ DOMChecker(wrapper, {
+ count: {
+ '.van-icon-arrow': 0,
+ '.van-actionsheet': 0
+ }
+ });
+ });
+
+ it('not editable when only one option', () => {
+ wrapper = mount(ExpressWay, {
+ attachToDocument: true,
+ propsData: {
+ value: 1,
+ editable: true,
+ expressList: mockData.slice(0, 1)
+ }
+ });
+
+ DOMChecker(wrapper, {
+ count: {
+ '.van-icon-arrow': 0,
+ '.van-actionsheet': 0
+ }
+ });
+ });
+
+ it('unexist express type', () => {
+ wrapper = mount(ExpressWay, {
+ attachToDocument: true,
+ propsData: {
+ value: -1,
+ expressList: mockData
+ }
+ });
+
+ DOMChecker(wrapper, {
+ text: {
+ '.van-express-way__fee': '',
+ '.van-express-way__type': ''
+ }
+ });
+ });
+});
diff --git a/test/unit/specs/goods-action.spec.js b/test/unit/specs/goods-action.spec.js
new file mode 100644
index 000000000..e86b69a08
--- /dev/null
+++ b/test/unit/specs/goods-action.spec.js
@@ -0,0 +1,47 @@
+import GoodsAction from '../components/goods-action';
+import GoodsActionBigBtn from 'packages/goods-action-big-btn';
+import GoodsActionMiniBtn from 'packages/goods-action-mini-btn';
+import { mount } from 'avoriaz';
+import { DOMChecker } from '../utils';
+
+describe('GoodsAction', () => {
+ let wrapper;
+
+ afterEach(() => {
+ wrapper && wrapper.destroy();
+ });
+
+ it('create a GoodsAction', () => {
+ wrapper = mount(GoodsAction, {});
+
+ DOMChecker(wrapper, {
+ count: {
+ '.van-goods-action__mini-btn': 2,
+ '.van-goods-action__big-btn': 2,
+ '.van-icon-chat': 1
+ }
+ });
+ });
+
+ it('click GoodsActionBigBtn', () => {
+ wrapper = mount(GoodsActionBigBtn, {});
+
+ const submitSpyFunc = sinon.spy();
+ wrapper.vm.$on('click', submitSpyFunc);
+ wrapper.trigger('click');
+ expect(submitSpyFunc.calledOnce).to.be.true;
+ });
+
+ it('click GoodsActionMiniBtn', () => {
+ wrapper = mount(GoodsActionMiniBtn, {
+ propsData: {
+ icon: 'card'
+ }
+ });
+
+ const submitSpyFunc = sinon.spy();
+ wrapper.vm.$on('click', submitSpyFunc);
+ wrapper.trigger('click');
+ expect(submitSpyFunc.calledOnce).to.be.true;
+ });
+});
diff --git a/test/unit/specs/invalid-goods.spec.js b/test/unit/specs/invalid-goods.spec.js
new file mode 100644
index 000000000..308713ce6
--- /dev/null
+++ b/test/unit/specs/invalid-goods.spec.js
@@ -0,0 +1,81 @@
+import InvalidGoods from 'packages/invalid-goods/index';
+import { mount } from 'avoriaz';
+import { DOMChecker } from '../utils';
+
+const mockItem = {
+ sku: [{ v: '商品SKU1' }, { v: '商品SKU2' }],
+ num: 2,
+ 'sku_id': 123,
+ title: '商品名称',
+ price: 12200,
+ 'unavailable_desc': '超出配送区域',
+ 'img_url': 'https://img.yzcdn.cn/upload_files/2017/06/29/FnPSAKkEeh4FnDA09oIbmnlzWQrw.png'
+};
+
+describe('InvalidGoods', () => {
+ let wrapper;
+ afterEach(() => {
+ wrapper && wrapper.destroy();
+ });
+
+ it('default', () => {
+ wrapper = mount(InvalidGoods, {
+ attachToDocument: true,
+ propsData: {
+ goods: [mockItem, mockItem, mockItem]
+ }
+ });
+
+ DOMChecker(wrapper, {
+ text: {
+ '.van-invalid-goods__title': '以下商品无法一起购买,点击查看原因',
+ '.van-actionsheet__header h3': '以下商品无法一起下单',
+ '.van-invalid-goods-card__price': '¥122.00',
+ '.van-invalid-goods-card__sku': '商品SKU1, 商品SKU2',
+ '.van-invalid-goods-card__title': mockItem.title,
+ '.van-invalid-goods-card__num': 'x' + mockItem.num,
+ '.van-invalid-goods-card__desc': mockItem.unavailable_desc,
+ '.van-invalid-goods__count span': '共3件'
+ },
+ count: {
+ '.van-invalid-goods-card': 3,
+ '.van-invalid-goods__gallery img': 3
+ },
+ src: {
+ '.van-invalid-goods__thumb img': mockItem.img_url
+ }
+ });
+ });
+
+ it('title prop', () => {
+ wrapper = mount(InvalidGoods, {
+ attachToDocument: true,
+ propsData: {
+ goods: [mockItem],
+ title: '标题'
+ }
+ });
+
+ DOMChecker(wrapper, {
+ text: {
+ '.van-invalid-goods__title': '标题'
+ }
+ });
+ });
+
+ it('actionsheetTitle prop', () => {
+ wrapper = mount(InvalidGoods, {
+ attachToDocument: true,
+ propsData: {
+ goods: [mockItem],
+ actionsheetTitle: 'actionsheet标题'
+ }
+ });
+
+ DOMChecker(wrapper, {
+ text: {
+ '.van-actionsheet__header h3': 'actionsheet标题'
+ }
+ });
+ });
+});
diff --git a/test/unit/specs/notice-bar.spec.js b/test/unit/specs/notice-bar.spec.js
new file mode 100644
index 000000000..87c796e44
--- /dev/null
+++ b/test/unit/specs/notice-bar.spec.js
@@ -0,0 +1,61 @@
+import NoticeBar from '../components/notice-bar';
+import { mount } from 'avoriaz';
+
+describe('NoticeBar', () => {
+ let wrapper;
+ afterEach(() => {
+ wrapper && wrapper.destroy();
+ });
+
+ it('create a notice-bar', () => {
+ wrapper = mount(NoticeBar, {
+ propsData: {},
+ attachToDocument: true
+ });
+
+ expect(wrapper.find('.van-notice-bar').length).to.equal(1);
+ });
+
+ it('mode closeable', () => {
+ wrapper = mount(NoticeBar, {
+ propsData: {
+ mode: 'closeable'
+ },
+ attachToDocument: true
+ });
+
+ const icon = wrapper.find('.van-icon-close');
+ expect(icon.length).to.equal(1);
+
+ icon[0].trigger('click');
+ expect(wrapper.hasStyle('display', 'none'));
+ });
+
+ it('mode link', () => {
+ wrapper = mount(NoticeBar, {
+ propsData: {
+ mode: 'link'
+ },
+ attachToDocument: true
+ });
+
+ expect(wrapper.find('.van-icon-arrow').length).to.equal(1);
+ });
+
+ it('notice-bar transitionend', (done) => {
+ wrapper = mount(NoticeBar, {
+ propsData: {
+ text: '足协杯战线连续第2年上演广州德比战',
+ speed: 1000,
+ delay: 0
+ },
+ attachToDocument: true
+ });
+
+ const content = wrapper.find('.van-notice-bar__content')[0];
+ setTimeout(() => {
+ expect(content.hasStyle('transition-delay', '0s')).to.be.true;
+ done();
+ }, 500);
+ });
+});
diff --git a/test/unit/specs/order-goods.spec.js b/test/unit/specs/order-goods.spec.js
new file mode 100644
index 000000000..698c5ff5b
--- /dev/null
+++ b/test/unit/specs/order-goods.spec.js
@@ -0,0 +1,311 @@
+import OrderGoods from 'packages/order-goods';
+import { mount } from 'avoriaz';
+import { DOMChecker } from '../utils';
+
+const item1 = {
+ img_url: 'https://img.yzcdn.cn/upload_files/2017/07/02/af5b9f44deaeb68000d7e4a711160c53.jpg',
+ pay_price: 1050,
+ title: '商品 A',
+ num: '1'
+};
+
+const item2 = {
+ points_price: 200,
+ pay_price: 50,
+ img_url: 'https://img.yzcdn.cn/upload_files/2017/07/02/e89d56cd92ad8ce3b9d8e1babc3758b6.jpg',
+ title: '商品 B',
+ num: '15',
+ sku: [{ v: '商品SKU1' }, { v: '商品SKU2' }]
+};
+
+const item3 = {
+ pay_price: 50,
+ img_url: 'https://img.yzcdn.cn/upload_files/2017/07/02/e89d56cd92ad8ce3b9d8e1babc3758b6.jpg',
+ title: '商品 C',
+ num: '15',
+ is_presale: true,
+ delivery_time: '三天后发货',
+ show_delivery_time: true,
+ is_presale: true,
+ is_present: true,
+ message: {
+ '留言1': '留言1内容',
+ '留言2': 'https://img.yzcdn.cn/upload_files/2017/07/02/e89d56cd92ad8ce3b9d8e1babc3758b6.jpg'
+ }
+};
+
+describe('OrderGoods', () => {
+ let wrapper;
+ afterEach(() => {
+ wrapper && wrapper.destroy();
+ });
+
+ it('default', () => {
+ wrapper = mount(OrderGoods, {
+ attachToDocument: true,
+ propsData: {
+ shopName: '起码运动馆',
+ price: item1.pay_price,
+ itemList: [item1],
+ message: '留言留言'
+ }
+ });
+
+ DOMChecker(wrapper, {
+ text: {
+ '.van-order-goods-header a': '起码运动馆',
+ '.van-order-goods-price .van-cell__value span': '¥10.50',
+ '.van-card__title': item1.title,
+ '.van-card__num': 'x ' + item1.num,
+ '.van-card__price': '¥10.50'
+ },
+ value: {
+ '.van-order-goods-message textarea': '留言留言'
+ },
+ src: {
+ '.van-card__thumb img': item1.img_url
+ }
+ });
+ });
+
+ it('empty list', () => {
+ wrapper = mount(OrderGoods, {
+ attachToDocument: true,
+ propsData: {
+ itemList: []
+ }
+ });
+
+ const submitSpyFunc = sinon.spy();
+ wrapper.vm.$on('clickEmptyButton', submitSpyFunc);
+
+ wrapper.find('.van-button')[0].trigger('click');
+
+ DOMChecker(wrapper, {
+ text: {
+ '.van-order-goods-empty p': '当前没有可购买的商品,请重新选择',
+ '.van-order-goods-empty button': '返回重新选择'
+ },
+ src: {
+ '.van-order-goods-empty img': 'http://b.yzcdn.cn/v2/image/wap/trade/new_order/empty@2x.png'
+ }
+ });
+
+ expect(submitSpyFunc.calledOnce).to.be.true;
+ });
+
+ it('empty list config', () => {
+ wrapper = mount(OrderGoods, {
+ attachToDocument: true,
+ propsData: {
+ emptyIcon: 'https://img.yzcdn.cn/upload_files/2017/07/01/FlIeRrn5bMRoWhcwp4Dp1TmVAXKy.jpg',
+ emptyMessage: '测试',
+ emptyButtonText: '测试'
+ }
+ });
+
+ DOMChecker(wrapper, {
+ text: {
+ '.van-order-goods-empty p': '测试',
+ '.van-order-goods-empty button': '测试'
+ },
+ src: {
+ '.van-order-goods-empty img': 'https://img.yzcdn.cn/upload_files/2017/07/01/FlIeRrn5bMRoWhcwp4Dp1TmVAXKy.jpg'
+ }
+ });
+ });
+
+ it('edit message', (done) => {
+ wrapper = mount(OrderGoods, {
+ attachToDocument: true,
+ propsData: {
+ itemList: [item1],
+ message: ''
+ }
+ });
+
+ wrapper.vm.$on('input', val => {
+ wrapper.vm.message = val;
+ expect(wrapper.vm.message).to.equal('测试留言');
+ done();
+ });
+
+ const textarea = wrapper.find('textarea')[0];
+ textarea.element.value = '测试留言';
+ textarea.trigger('input');
+ });
+
+ it('message not editable', () => {
+ wrapper = mount(OrderGoods, {
+ attachToDocument: true,
+ propsData: {
+ itemList: [item1],
+ message: '留言留言',
+ messageEditable: false
+ }
+ });
+
+ DOMChecker(wrapper, {
+ text: {
+ '.van-order-goods-message p': '留言留言'
+ }
+ });
+ });
+
+ it('message not editable && empty', () => {
+ wrapper = mount(OrderGoods, {
+ attachToDocument: true,
+ propsData: {
+ itemList: [item1],
+ message: '',
+ messageEditable: false
+ }
+ });
+
+ DOMChecker(wrapper, {
+ text: {
+ '.van-order-goods-message p': ''
+ }
+ });
+ });
+
+ it('points props', () => {
+ wrapper = mount(OrderGoods, {
+ attachToDocument: true,
+ propsData: {
+ itemList: [item1],
+ points: 100
+ }
+ });
+
+ DOMChecker(wrapper, {
+ text: {
+ '.van-order-goods-price .van-cell__value span': '100积分'
+ }
+ });
+ });
+
+ it('points prop and price prop', () => {
+ wrapper = mount(OrderGoods, {
+ attachToDocument: true,
+ propsData: {
+ itemList: [item1],
+ points: 100,
+ price: 1050
+ }
+ });
+
+ DOMChecker(wrapper, {
+ text: {
+ '.van-order-goods-price .van-cell__value span': '100积分 + ¥10.50'
+ }
+ });
+ });
+
+ it('shopLink prop', () => {
+ wrapper = mount(OrderGoods, {
+ attachToDocument: true,
+ propsData: {
+ itemList: [item1],
+ shopLink: 'http://www.youzan.com'
+ }
+ });
+
+ expect(wrapper.find('.van-order-goods-header a')[0].element.getAttribute('href')).to.equal('http://www.youzan.com');
+ });
+
+ it('item with points', () => {
+ wrapper = mount(OrderGoods, {
+ attachToDocument: true,
+ propsData: {
+ itemList: [item2]
+ }
+ });
+
+ DOMChecker(wrapper, {
+ text: {
+ '.van-card__price': '200积分 + ¥0.50',
+ '.van-card__title': item2.title,
+ '.van-card__num': 'x ' + item2.num
+ },
+ src: {
+ '.van-card__thumb img': item2.img_url
+ }
+ });
+ });
+
+ it('presable item with deliveryTime', () => {
+ wrapper = mount(OrderGoods, {
+ attachToDocument: true,
+ propsData: {
+ itemList: [item3]
+ }
+ });
+
+ DOMChecker(wrapper, {
+ text: {
+ '.van-card__price': '¥0.50',
+ '.van-card__title': item3.title,
+ '.van-card__num': 'x ' + item3.num,
+ '.van-order-goods-card__delivery .van-cell__value span': item3.delivery_time
+ },
+ count: {
+ '.van-order-goods-card__present': 1,
+ '.van-order-goods-card__tag-green': 1
+ },
+ src: {
+ '.van-card__thumb img': item3.img_url
+ }
+ });
+ });
+
+ it('item with message', (done) => {
+ wrapper = mount(OrderGoods, {
+ attachToDocument: true,
+ propsData: {
+ itemList: [item3]
+ }
+ });
+
+ DOMChecker(wrapper, {
+ count: {
+ '.van-order-goods-card__message-button': 1,
+ '.van-order-goods-card__message li': 2
+ },
+ style: {
+ '.van-order-goods-card__message': {
+ 'display': 'none'
+ }
+ }
+ });
+
+ const messageButton = wrapper.find('.van-order-goods-card__message-button')[0];
+ messageButton.trigger('click');
+
+ setTimeout(function() {
+ DOMChecker(wrapper, {
+ noStyle: {
+ '.van-order-goods-card__message': {
+ 'display': 'none'
+ }
+ }
+ });
+ done();
+ }, 300);
+ });
+
+ it('multi items', () => {
+ wrapper = mount(OrderGoods, {
+ attachToDocument: true,
+ propsData: {
+ itemList: [item1, item2, item3]
+ }
+ });
+
+ DOMChecker(wrapper, {
+ count: {
+ '.van-order-goods-card': 3
+ }
+ });
+ });
+});
diff --git a/test/unit/specs/pay-order.spec.js b/test/unit/specs/pay-order.spec.js
new file mode 100644
index 000000000..6dab66ebf
--- /dev/null
+++ b/test/unit/specs/pay-order.spec.js
@@ -0,0 +1,98 @@
+import PayOrder from 'packages/pay-order';
+import { mount } from 'avoriaz';
+import { DOMChecker } from '../utils';
+
+describe('PayOrder', () => {
+ let wrapper;
+ afterEach(() => {
+ wrapper && wrapper.destroy();
+ });
+
+ it('default', () => {
+ const props = {
+ price: 3050,
+ buttonText: '提交订单',
+ tip: '您的收货地址不支持同城送, 我们已为您推荐快递'
+ };
+
+ wrapper = mount(PayOrder, {
+ propsData: props
+ });
+
+ DOMChecker(wrapper, {
+ text: {
+ '.van-button__text': props.buttonText,
+ '.van-pay-order__price-interger': '¥30.',
+ '.van-pay-order__price-decimal': '50',
+ '.van-pay-order__tip': props.tip
+ }
+ });
+ });
+
+ it('no tip', () => {
+ wrapper = mount(PayOrder, {
+ propsData: {
+ price: 3005,
+ buttonText: '提交订单',
+ buttonType: 'default'
+ }
+ });
+
+ DOMChecker(wrapper, {
+ text: {
+ '.van-button__text': '提交订单',
+ '.van-pay-order__price-interger': '¥30.',
+ '.van-pay-order__price-decimal': '05',
+ '.van-pay-order__tip': ''
+ }
+ });
+ });
+
+ it('handle submit', () => {
+ wrapper = mount(PayOrder, {
+ propsData: {
+ price: 3005,
+ buttonText: '提交订单'
+ }
+ });
+
+ const submitSpyFunc = sinon.spy();
+ wrapper.vm.$on('submit', submitSpyFunc);
+ wrapper.find('.van-button')[0].trigger('click');
+ setTimeout(() => {
+ expect(submitSpyFunc.calledOnce).to.be.true;
+ }, 300);
+ });
+
+ it('can not submit when disabled', () => {
+ wrapper = mount(PayOrder, {
+ propsData: {
+ disabled: true,
+ buttonText: '提交订单'
+ }
+ });
+
+ const submitSpyFunc = sinon.spy();
+ wrapper.vm.$on('submit', submitSpyFunc);
+ wrapper.find('.van-button')[0].trigger('click');
+ setTimeout(() => {
+ expect(submitSpyFunc.calledOnce).to.be.false;
+ }, 300);
+ });
+
+ it('can not submit when loading', () => {
+ wrapper = mount(PayOrder, {
+ propsData: {
+ loading: true,
+ buttonText: '提交订单'
+ }
+ });
+
+ const submitSpyFunc = sinon.spy();
+ wrapper.vm.$on('submit', submitSpyFunc);
+ wrapper.find('.van-button')[0].trigger('click');
+ setTimeout(() => {
+ expect(submitSpyFunc.calledOnce).to.be.false;
+ }, 300);
+ });
+});
diff --git a/test/unit/specs/picker.spec.js b/test/unit/specs/picker.spec.js
index d3fe2184d..ee2d08e06 100644
--- a/test/unit/specs/picker.spec.js
+++ b/test/unit/specs/picker.spec.js
@@ -1,7 +1,6 @@
import Picker from 'packages/picker';
import PickerColumn from 'packages/picker/picker-column';
import { mount } from 'avoriaz';
-import Wrapper from 'avoriaz/dist/Wrapper';
const itemHeight = 44;
diff --git a/test/unit/specs/popup.spec.js b/test/unit/specs/popup.spec.js
index 202cfbdb5..250109f50 100644
--- a/test/unit/specs/popup.spec.js
+++ b/test/unit/specs/popup.spec.js
@@ -1,5 +1,6 @@
import Popup from 'packages/popup';
import { mount } from 'avoriaz';
+import { triggerTouch } from '../utils';
describe('Popup', () => {
let wrapper;
@@ -57,4 +58,60 @@ describe('Popup', () => {
expect(wrapper.hasClass('van-popup')).to.be.true;
expect(wrapper.instance().currentTransition).to.equal('popup-fade');
});
+
+ it('popup prevent scroll', (done) => {
+ wrapper = mount(Popup, {
+ propsData: {
+ preventScroll: true,
+ value: true
+ }
+ });
+
+ expect(wrapper.hasClass('van-popup')).to.be.true;
+
+ setTimeout(() => {
+ expect(wrapper.data().currentValue).to.be.true;
+ wrapper.vm.value = false;
+ triggerTouch(document, 'touchstart', 0, 0);
+ triggerTouch(document, 'touchmove', 0, 10);
+ triggerTouch(document, 'touchmove', 0, 30);
+ triggerTouch(document, 'touchmove', 0, -30);
+
+ setTimeout(() => {
+ expect(wrapper.data().currentValue).to.be.false;
+ done();
+ }, 300);
+ }, 300);
+ });
+
+ it('popup modal', (done) => {
+ wrapper = mount(Popup, {
+ propsData: {
+ preventScroll: true,
+ value: true
+ }
+ });
+
+ wrapper.vm.$on('input', val => {
+ wrapper.vm.value = val;
+ });
+
+ expect(wrapper.hasClass('van-popup')).to.be.true;
+
+ const modal = document.querySelector('.van-modal');
+
+ setTimeout(() => {
+ triggerTouch(modal, 'touchstart', 0, 0);
+ triggerTouch(modal, 'touchmove', 0, 10);
+ triggerTouch(modal, 'touchmove', 0, 30);
+ triggerTouch(modal, 'touchmove', 0, -30);
+ expect(modal).to.exist;
+
+ modal.click();
+ setTimeout(() => {
+ expect(wrapper.data().currentValue).to.be.false;
+ done();
+ }, 300);
+ }, 300);
+ });
});
diff --git a/test/unit/specs/switch-cell.spec.js b/test/unit/specs/switch-cell.spec.js
new file mode 100644
index 000000000..edfaee56a
--- /dev/null
+++ b/test/unit/specs/switch-cell.spec.js
@@ -0,0 +1,95 @@
+import SwitchCell from 'packages/switch-cell';
+import { mount } from 'avoriaz';
+import { DOMChecker } from '../utils';
+
+describe('SwitchCell', () => {
+ let wrapper;
+ afterEach(() => {
+ wrapper && wrapper.destroy();
+ });
+
+ it('default', () => {
+ wrapper = mount(SwitchCell, {
+ attachToDocument: true
+ });
+
+ DOMChecker(wrapper, {
+ count: {
+ '.van-switch--off': 1,
+ '.van-switch--disabled': 0
+ }
+ });
+ });
+
+ it('set title', () => {
+ wrapper = mount(SwitchCell, {
+ attachToDocument: true,
+ propsData: {
+ title: '测试标题'
+ }
+ });
+
+ DOMChecker(wrapper, {
+ text: {
+ '.van-cell__text': '测试标题'
+ },
+ count: {
+ '.van-switch--off': 1,
+ '.van-switch--disabled': 0
+ }
+ });
+ });
+
+ it('checked', () => {
+ wrapper = mount(SwitchCell, {
+ attachToDocument: true,
+ propsData: {
+ value: true
+ }
+ });
+
+ DOMChecker(wrapper, {
+ count: {
+ '.van-switch--on': 1,
+ '.van-switch--disabled': 0
+ }
+ });
+ });
+
+ it('disabled', () => {
+ wrapper = mount(SwitchCell, {
+ attachToDocument: true,
+ propsData: {
+ disabled: true
+ }
+ });
+
+ DOMChecker(wrapper, {
+ count: {
+ '.van-switch--off': 1,
+ '.van-switch--disabled': 1
+ }
+ });
+ });
+
+ it('listen to change event', (done) => {
+ wrapper = mount(SwitchCell, {
+ attachToDocument: true,
+ propsData: {
+ value: false
+ }
+ });
+
+ wrapper.vm.$on('input', (value) => {
+ wrapper.vm.value = value;
+ });
+
+ wrapper.vm.$on('change', (value) => {
+ expect(value).to.be.true;
+ done();
+ });
+
+ const switchEl = wrapper.find('.van-switch')[0];
+ switchEl.trigger('click');
+ });
+});
diff --git a/yarn.lock b/yarn.lock
index 28f96953e..4ce6cd205 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -334,15 +334,15 @@ autoprefixer@^6.3.1:
postcss "^5.2.16"
postcss-value-parser "^3.2.3"
-autoprefixer@^7.1.2:
- version "7.1.2"
- resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.1.2.tgz#fbeaf07d48fd878e0682bf7cbeeade728adb2b18"
+autoprefixer@^7.1.3:
+ version "7.1.3"
+ resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.1.3.tgz#0e8d337976d6f13644db9f8813b4c42f3d1ccc34"
dependencies:
- browserslist "^2.1.5"
- caniuse-lite "^1.0.30000697"
+ browserslist "^2.4.0"
+ caniuse-lite "^1.0.30000718"
normalize-range "^0.1.2"
num2fraction "^1.2.2"
- postcss "^6.0.6"
+ postcss "^6.0.10"
postcss-value-parser "^3.2.3"
avoriaz@2.0.0:
@@ -1204,13 +1204,20 @@ browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6:
caniuse-db "^1.0.30000639"
electron-to-chromium "^1.2.7"
-browserslist@^2.1.2, browserslist@^2.1.5:
+browserslist@^2.1.2:
version "2.3.3"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.3.3.tgz#2b0cabc4d28489f682598605858a0782f14b154c"
dependencies:
caniuse-lite "^1.0.30000715"
electron-to-chromium "^1.3.18"
+browserslist@^2.4.0:
+ version "2.4.0"
+ resolved "https://registry.npmjs.org/browserslist/-/browserslist-2.4.0.tgz#693ee93d01e66468a6348da5498e011f578f87f8"
+ dependencies:
+ caniuse-lite "^1.0.30000718"
+ electron-to-chromium "^1.3.18"
+
buffer-indexof@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.0.tgz#f54f647c4f4e25228baa656a2e57e43d5f270982"
@@ -1304,10 +1311,14 @@ caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639:
version "1.0.30000715"
resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000715.tgz#0b9b5c795950dfbaf301a8806bafe87f126da8ca"
-caniuse-lite@^1.0.30000697, caniuse-lite@^1.0.30000715:
+caniuse-lite@^1.0.30000715:
version "1.0.30000715"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000715.tgz#c327f5e6d907ebcec62cde598c3bf0dd793fb9a0"
+caniuse-lite@^1.0.30000718:
+ version "1.0.30000718"
+ resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000718.tgz#0dd24290beb11310b2d80f6b70a823c2a65a6fad"
+
caseless@~0.12.0:
version "0.12.0"
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
@@ -1812,9 +1823,9 @@ css-color-names@0.0.4:
version "0.0.4"
resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
-css-loader@^0.28.5:
- version "0.28.5"
- resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.5.tgz#dd02bb91b94545710212ef7f6aaa66663113d754"
+css-loader@^0.28.7:
+ version "0.28.7"
+ resolved "https://registry.npmjs.org/css-loader/-/css-loader-0.28.7.tgz#5f2ee989dd32edd907717f953317656160999c1b"
dependencies:
babel-code-frame "^6.11.0"
css-selector-tokenizer "^0.7.0"
@@ -4244,9 +4255,9 @@ karma-phantomjs-launcher@^1.0.4:
lodash "^4.0.1"
phantomjs-prebuilt "^2.1.7"
-karma-sinon-chai@^1.2.4:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/karma-sinon-chai/-/karma-sinon-chai-1.3.1.tgz#4633419494d9e2d848787dd76053031859f5b7f5"
+karma-sinon-chai@^1.3.2:
+ version "1.3.2"
+ resolved "https://registry.npmjs.org/karma-sinon-chai/-/karma-sinon-chai-1.3.2.tgz#ea4d97b16433e64813aaddddded7f7bb4338215e"
dependencies:
lolex "^1.6.0"
@@ -4272,9 +4283,9 @@ karma-webpack@^2.0.4:
source-map "^0.1.41"
webpack-dev-middleware "^1.0.11"
-karma@^1.7.0:
- version "1.7.0"
- resolved "https://registry.yarnpkg.com/karma/-/karma-1.7.0.tgz#6f7a1a406446fa2e187ec95398698f4cee476269"
+karma@^1.7.1:
+ version "1.7.1"
+ resolved "https://registry.npmjs.org/karma/-/karma-1.7.1.tgz#85cc08e9e0a22d7ce9cca37c4a1be824f6a2b1ae"
dependencies:
bluebird "^3.3.0"
body-parser "^1.16.1"
@@ -4819,6 +4830,16 @@ markdown-it@^8.3.2:
mdurl "^1.0.1"
uc.micro "^1.0.3"
+markdown-it@^8.4.0:
+ version "8.4.0"
+ resolved "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.0.tgz#e2400881bf171f7018ed1bd9da441dac8af6306d"
+ dependencies:
+ argparse "^1.0.7"
+ entities "~1.1.1"
+ linkify-it "^2.0.0"
+ mdurl "^1.0.1"
+ uc.micro "^1.0.3"
+
math-expression-evaluator@^1.2.14:
version "1.2.17"
resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac"
@@ -6036,7 +6057,7 @@ postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0
source-map "^0.5.6"
supports-color "^3.2.3"
-postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.2, postcss@^6.0.3, postcss@^6.0.6, postcss@^6.0.8, postcss@^6.0.9:
+postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.2, postcss@^6.0.3, postcss@^6.0.6, postcss@^6.0.9:
version "6.0.9"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.9.tgz#54819766784a51c65b1ec4d54c2f93765438c35a"
dependencies:
@@ -6044,6 +6065,14 @@ postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.2, postcss@^6.0.3, postcss@^6.0.6,
source-map "^0.5.6"
supports-color "^4.2.1"
+postcss@^6.0.10:
+ version "6.0.10"
+ resolved "https://registry.npmjs.org/postcss/-/postcss-6.0.10.tgz#c311b89734483d87a91a56dc9e53f15f4e6e84e4"
+ dependencies:
+ chalk "^2.1.0"
+ source-map "^0.5.7"
+ supports-color "^4.2.1"
+
precss@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/precss/-/precss-2.0.0.tgz#7f567e3318e06d44c8fdbf9e58452e8358bf4b71"
@@ -6848,6 +6877,10 @@ source-map@^0.1.41:
dependencies:
amdefine ">=0.0.4"
+source-map@^0.5.7:
+ version "0.5.7"
+ resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+
source-map@~0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d"
@@ -7585,9 +7618,9 @@ vue-html-loader@^1.2.4:
loader-utils "^1.0.2"
object-assign "^4.1.0"
-vue-lazyload@^1.0.6:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/vue-lazyload/-/vue-lazyload-1.0.6.tgz#7d5494fc35c35fc84dcc271165b827e309b4e793"
+vue-lazyload@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.npmjs.org/vue-lazyload/-/vue-lazyload-1.1.2.tgz#86e0de01edd70596abc22d1017eea2f2b28e5efd"
vue-loader@^13.0.4:
version "13.0.4"
@@ -7937,9 +7970,9 @@ yeast@0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419"
-zan-doc@^0.2.2:
- version "0.2.2"
- resolved "https://registry.npmjs.org/zan-doc/-/zan-doc-0.2.2.tgz#ebf8ffda5bd3cf9277cc3e59c48476a3fbf84d9f"
+zan-doc@^0.2.10:
+ version "0.2.10"
+ resolved "https://registry.npmjs.org/zan-doc/-/zan-doc-0.2.10.tgz#eb08f72100a873dd8ae0b2eb7f7454d3ff256322"
dependencies:
cheerio "0.22.0"
decamelize "^1.2.0"