diff --git a/README.md b/README.md
index a457719..82cd376 100644
--- a/README.md
+++ b/README.md
@@ -33,10 +33,15 @@
- orderconfirm/chooseway 选择方式
- orderconfirm/ordershopinfo 顶部的商品信息
- orderconfirm/orderyf 运费
+- pages/order/order 订单列表
+ 组件
+ - order/tab 切换列表
+ - order/commodity 商品信息操作
+ - order/message 商品信息
- pages/chooseaddr/chooseaddr 选择地址
- chooseaddr/address 地址列表(单个)
- chooseaddr/addradd 添加按钮
- pages/addaddress/addaddress 选择地址
- - addaddress/shuru 添加地址的输入的每一项
\ No newline at end of file
+ - addaddress/shuru 添加地址的输入的每一项
diff --git a/app.json b/app.json
index cde0584..b680326 100644
--- a/app.json
+++ b/app.json
@@ -1,23 +1,24 @@
{
- "pages": [
- "pages/addaddress/addaddress",
- "pages/chooseaddr/chooseaddr",
- "pages/orderconfirm/orderconfirm",
- "pages/message/message",
- "pages/personal/personal",
- "pages/product/product",
- "pages/classify/classify",
- "pages/shopping/shopping",
- "pages/search/search",
- "pages/index/index"
+ "pages": [
+ "pages/addaddress/addaddress",
+ "pages/chooseaddr/chooseaddr",
+ "pages/order/order",
+ "pages/orderconfirm/orderconfirm",
+ "pages/message/message",
+ "pages/personal/personal",
+ "pages/product/product",
+ "pages/classify/classify",
+ "pages/shopping/shopping",
+ "pages/search/search",
+ "pages/index/index"
+ ],
+ "window": {
+ "backgroundTextStyle": "light",
+ "navigationBarBackgroundColor": "#fff",
+ "navigationBarTitleText": "WeChat",
+ "navigationBarTextStyle": "black"
+ },
+ "style": "v2",
+ "sitemapLocation": "sitemap.json"
- ],
- "window": {
- "backgroundTextStyle": "light",
- "navigationBarBackgroundColor": "#fff",
- "navigationBarTitleText": "WeChat",
- "navigationBarTextStyle": "black"
- },
- "style": "v2",
- "sitemapLocation": "sitemap.json"
}
\ No newline at end of file
diff --git a/components/order/commodity/index.js b/components/order/commodity/index.js
new file mode 100644
index 0000000..9f59aa7
--- /dev/null
+++ b/components/order/commodity/index.js
@@ -0,0 +1,8 @@
+Component({
+ properties: {
+ },
+ data: {
+ },
+ methods: {
+ }
+})
\ No newline at end of file
diff --git a/components/order/commodity/index.json b/components/order/commodity/index.json
new file mode 100644
index 0000000..9800f6a
--- /dev/null
+++ b/components/order/commodity/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "message":"../message/index"
+ }
+}
\ No newline at end of file
diff --git a/components/order/commodity/index.scss b/components/order/commodity/index.scss
new file mode 100644
index 0000000..e558039
--- /dev/null
+++ b/components/order/commodity/index.scss
@@ -0,0 +1,81 @@
+.commodity {
+ margin-top: 20rpx;
+ background-color: #fff;
+ .message {
+ padding: 35rpx;
+ display: flex;
+ align-items: center;
+ border-bottom: 1rpx solid #F2F2F2;
+ .image {
+ width: 141rpx;
+ height: 150rpx;
+ background-color: #000;
+ margin-left: 34rpx;
+ }
+ .introduce {
+ margin-left: 32rpx;
+ height: 120rpx;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ width: 362rpx;
+ .title {
+ font-size: 28rpx;
+ color: #333;
+ }
+ .count {
+ font-size: 24rpx;
+ color: #999;
+ display: flex;
+ > view {
+ margin-right: 27rpx;
+ }
+ }
+ }
+ .parameter {
+ width: 150rpx;
+ height: 120rpx;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ align-items: flex-end;
+ }
+ }
+ .aggregate{
+ display: flex;
+ box-sizing: border-box;
+ padding: 30rpx;
+ justify-content: flex-end;
+ font-size: 22rpx;
+ color: #999;
+ height: 78rpx;
+ border-bottom: 1rpx solid #F2F2F2;
+
+ >text{
+ color: #333;
+ margin: 0 5rpx;
+ }
+ }
+ .operation{
+ height: 84rpx;
+ display: flex;
+ justify-content: flex-end;
+ padding:0 30rpx;
+ align-items: center;
+ .button{
+ width: 133rpx;
+ height: 51rpx;
+ border:2rpx solid #999999;
+ border-radius: 26rpx;
+ text-align: center;
+ font-size: 22rpx;
+ color:#999999;
+ line-height: 51rpx;
+ margin-right: 8rpx;
+ }
+ .hlight{
+ border:2rpx solid rgba(71,200,119,1);
+ color: #47C877;
+ }
+ }
+}
\ No newline at end of file
diff --git a/components/order/commodity/index.wxml b/components/order/commodity/index.wxml
new file mode 100644
index 0000000..e7264f2
--- /dev/null
+++ b/components/order/commodity/index.wxml
@@ -0,0 +1,14 @@
+
+
+
+ 共计1件商品 合计:
+ ¥29.80
+ (含运费¥0.00)
+
+
+ 评价
+
+ 评价
+
+
+
\ No newline at end of file
diff --git a/components/order/commodity/index.wxss b/components/order/commodity/index.wxss
new file mode 100644
index 0000000..e025d4a
--- /dev/null
+++ b/components/order/commodity/index.wxss
@@ -0,0 +1 @@
+.commodity{margin-top:20rpx;background-color:#fff}.commodity .message{padding:35rpx;display:flex;align-items:center;border-bottom:1rpx solid #F2F2F2}.commodity .message .image{width:141rpx;height:150rpx;background-color:#000;margin-left:34rpx}.commodity .message .introduce{margin-left:32rpx;height:120rpx;display:flex;flex-direction:column;justify-content:space-between;width:362rpx}.commodity .message .introduce .title{font-size:28rpx;color:#333}.commodity .message .introduce .count{font-size:24rpx;color:#999;display:flex}.commodity .message .introduce .count>view{margin-right:27rpx}.commodity .message .parameter{width:150rpx;height:120rpx;display:flex;flex-direction:column;justify-content:space-between;align-items:flex-end}.commodity .aggregate{display:flex;box-sizing:border-box;padding:30rpx;justify-content:flex-end;font-size:22rpx;color:#999;height:78rpx;border-bottom:1rpx solid #F2F2F2}.commodity .aggregate>text{color:#333;margin:0 5rpx}.commodity .operation{height:84rpx;display:flex;justify-content:flex-end;padding:0 30rpx;align-items:center}.commodity .operation .button{width:133rpx;height:51rpx;border:2rpx solid #999999;border-radius:26rpx;text-align:center;font-size:22rpx;color:#999999;line-height:51rpx;margin-right:8rpx}.commodity .operation .hlight{border:2rpx solid #47c877;color:#47C877}
diff --git a/components/order/message/index.js b/components/order/message/index.js
new file mode 100644
index 0000000..9f59aa7
--- /dev/null
+++ b/components/order/message/index.js
@@ -0,0 +1,8 @@
+Component({
+ properties: {
+ },
+ data: {
+ },
+ methods: {
+ }
+})
\ No newline at end of file
diff --git a/components/order/message/index.json b/components/order/message/index.json
new file mode 100644
index 0000000..32640e0
--- /dev/null
+++ b/components/order/message/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
\ No newline at end of file
diff --git a/components/order/message/index.scss b/components/order/message/index.scss
new file mode 100644
index 0000000..cfa585f
--- /dev/null
+++ b/components/order/message/index.scss
@@ -0,0 +1,40 @@
+.message {
+ padding: 35rpx;
+display: flex;
+align-items: center;
+border-bottom: 1rpx solid #F2F2F2;
+.image {
+ width: 141rpx;
+ height: 150rpx;
+ background-color: #000;
+ margin-left: 34rpx;
+}
+.introduce {
+ margin-left: 32rpx;
+ height: 120rpx;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ width: 362rpx;
+ .title {
+ font-size: 28rpx;
+ color: #333;
+ }
+ .count {
+ font-size: 24rpx;
+ color: #999;
+ display: flex;
+ > view {
+ margin-right: 27rpx;
+ }
+ }
+}
+.parameter {
+ width: 150rpx;
+ height: 120rpx;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ align-items: flex-end;
+}
+}
\ No newline at end of file
diff --git a/components/order/message/index.wxml b/components/order/message/index.wxml
new file mode 100644
index 0000000..055d05c
--- /dev/null
+++ b/components/order/message/index.wxml
@@ -0,0 +1,14 @@
+
+
+
+ 001|德国双心药房版 胶原蛋白美容口服液养颜
+
+ 30只
+ 1.0356kg
+
+
+
+ ¥29.80
+ x2
+
+
\ No newline at end of file
diff --git a/components/order/message/index.wxss b/components/order/message/index.wxss
new file mode 100644
index 0000000..6221a43
--- /dev/null
+++ b/components/order/message/index.wxss
@@ -0,0 +1 @@
+.message{padding:35rpx;display:flex;align-items:center;border-bottom:1rpx solid #F2F2F2}.message .image{width:141rpx;height:150rpx;background-color:#000;margin-left:34rpx}.message .introduce{margin-left:32rpx;height:120rpx;display:flex;flex-direction:column;justify-content:space-between;width:362rpx}.message .introduce .title{font-size:28rpx;color:#333}.message .introduce .count{font-size:24rpx;color:#999;display:flex}.message .introduce .count>view{margin-right:27rpx}.message .parameter{width:150rpx;height:120rpx;display:flex;flex-direction:column;justify-content:space-between;align-items:flex-end}
diff --git a/components/order/tab/index.js b/components/order/tab/index.js
new file mode 100644
index 0000000..9f59aa7
--- /dev/null
+++ b/components/order/tab/index.js
@@ -0,0 +1,8 @@
+Component({
+ properties: {
+ },
+ data: {
+ },
+ methods: {
+ }
+})
\ No newline at end of file
diff --git a/components/order/tab/index.json b/components/order/tab/index.json
new file mode 100644
index 0000000..86d254c
--- /dev/null
+++ b/components/order/tab/index.json
@@ -0,0 +1,8 @@
+{
+ "component": true,
+ "usingComponents": {
+ "commodity":"../commodity/index",
+ "van-tab": "../utils/dist/tab/index",
+ "van-tabs": "../utils/dist/tabs/index"
+ }
+}
\ No newline at end of file
diff --git a/components/order/tab/index.scss b/components/order/tab/index.scss
new file mode 100644
index 0000000..5003c84
--- /dev/null
+++ b/components/order/tab/index.scss
@@ -0,0 +1,3 @@
+.tab {
+ width: 750rpx;
+}
\ No newline at end of file
diff --git a/components/order/tab/index.wxml b/components/order/tab/index.wxml
new file mode 100644
index 0000000..332394c
--- /dev/null
+++ b/components/order/tab/index.wxml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/order/tab/index.wxss b/components/order/tab/index.wxss
new file mode 100644
index 0000000..77cc1ab
--- /dev/null
+++ b/components/order/tab/index.wxss
@@ -0,0 +1 @@
+.tab{width:750rpx}
diff --git a/pages/order/order.js b/pages/order/order.js
new file mode 100644
index 0000000..8e1eeab
--- /dev/null
+++ b/pages/order/order.js
@@ -0,0 +1,66 @@
+// pages/order/order.js
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad: function (options) {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload: function () {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh: function () {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom: function () {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage: function () {
+
+ }
+})
\ No newline at end of file
diff --git a/pages/order/order.json b/pages/order/order.json
new file mode 100644
index 0000000..f3c80a3
--- /dev/null
+++ b/pages/order/order.json
@@ -0,0 +1,5 @@
+{
+ "usingComponents": {
+ "tab":"../components/order/tab/index"
+ }
+}
\ No newline at end of file
diff --git a/pages/order/order.scss b/pages/order/order.scss
new file mode 100644
index 0000000..ffb81b1
--- /dev/null
+++ b/pages/order/order.scss
@@ -0,0 +1,9 @@
+.box {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ width: 100%;
+}
+page {
+ background-color: #efefef;
+}
diff --git a/pages/order/order.wxml b/pages/order/order.wxml
new file mode 100644
index 0000000..388926d
--- /dev/null
+++ b/pages/order/order.wxml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/pages/order/order.wxss b/pages/order/order.wxss
new file mode 100644
index 0000000..069fac9
--- /dev/null
+++ b/pages/order/order.wxss
@@ -0,0 +1 @@
+.box{display:flex;flex-direction:column;align-items:center;width:100%}page{background-color:#efefef}
diff --git a/utils/dist/action-sheet/index.d.ts b/utils/dist/action-sheet/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/action-sheet/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/action-sheet/index.js b/utils/dist/action-sheet/index.js
new file mode 100644
index 0000000..8065c83
--- /dev/null
+++ b/utils/dist/action-sheet/index.js
@@ -0,0 +1,59 @@
+import { VantComponent } from '../common/component';
+VantComponent({
+ props: {
+ show: Boolean,
+ title: String,
+ cancelText: String,
+ description: String,
+ round: {
+ type: Boolean,
+ value: true
+ },
+ zIndex: {
+ type: Number,
+ value: 100
+ },
+ actions: {
+ type: Array,
+ value: []
+ },
+ overlay: {
+ type: Boolean,
+ value: true
+ },
+ closeOnClickOverlay: {
+ type: Boolean,
+ value: true
+ },
+ closeOnClickAction: {
+ type: Boolean,
+ value: true
+ },
+ safeAreaInsetBottom: {
+ type: Boolean,
+ value: true
+ }
+ },
+ methods: {
+ onSelect(event) {
+ const { index } = event.currentTarget.dataset;
+ const item = this.data.actions[index];
+ if (item && !item.disabled && !item.loading) {
+ this.$emit('select', item);
+ if (this.data.closeOnClickAction) {
+ this.onClose();
+ }
+ }
+ },
+ onCancel() {
+ this.$emit('cancel');
+ },
+ onClose() {
+ this.$emit('close');
+ },
+ onClickOverlay() {
+ this.$emit('click-overlay');
+ this.onClose();
+ }
+ }
+});
diff --git a/utils/dist/action-sheet/index.json b/utils/dist/action-sheet/index.json
new file mode 100644
index 0000000..19bf989
--- /dev/null
+++ b/utils/dist/action-sheet/index.json
@@ -0,0 +1,8 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-icon": "../icon/index",
+ "van-popup": "../popup/index",
+ "van-loading": "../loading/index"
+ }
+}
diff --git a/utils/dist/action-sheet/index.wxml b/utils/dist/action-sheet/index.wxml
new file mode 100644
index 0000000..bed9b06
--- /dev/null
+++ b/utils/dist/action-sheet/index.wxml
@@ -0,0 +1,54 @@
+
+
+
+
+
+ {{ description }}
+
+
+
+
+
+
+
+ {{ cancelText }}
+
+
diff --git a/utils/dist/action-sheet/index.wxss b/utils/dist/action-sheet/index.wxss
new file mode 100644
index 0000000..dc54840
--- /dev/null
+++ b/utils/dist/action-sheet/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-action-sheet{max-height:90%!important;max-height:var(--action-sheet-max-height,90%)!important;color:#323233;color:var(--action-sheet-item-text-color,#323233)}.van-action-sheet__cancel,.van-action-sheet__item{text-align:center;font-size:16px;font-size:var(--action-sheet-item-font-size,16px);line-height:50px;line-height:var(--action-sheet-item-height,50px);background-color:#fff;background-color:var(--action-sheet-item-background,#fff)}.van-action-sheet__cancel--hover,.van-action-sheet__item--hover{background-color:#f2f3f5;background-color:var(--active-color,#f2f3f5)}.van-action-sheet__cancel:before{display:block;content:" ";height:8px;height:var(--action-sheet-cancel-padding-top,8px);background-color:#f7f8fa;background-color:var(--action-sheet-cancel-padding-color,#f7f8fa)}.van-action-sheet__item--disabled{color:#c8c9cc;color:var(--action-sheet-item-disabled-text-color,#c8c9cc)}.van-action-sheet__item--disabled.van-action-sheet__item--hover{background-color:#fff;background-color:var(--action-sheet-item-background,#fff)}.van-action-sheet__subname{margin-left:4px;margin-left:var(--padding-base,4px);font-size:12px;font-size:var(--action-sheet-subname-font-size,12px);color:#646566;color:var(--action-sheet-subname-color,#646566)}.van-action-sheet__header{text-align:center;font-weight:500;font-weight:var(--font-weight-bold,500);font-size:16px;font-size:var(--action-sheet-header-font-size,16px);line-height:44px;line-height:var(--action-sheet-header-height,44px)}.van-action-sheet__description{text-align:center;padding:16px;padding:var(--padding-md,16px);color:#646566;color:var(--action-sheet-description-color,#646566);font-size:14px;font-size:var(--action-sheet-description-font-size,14px);line-height:20px;line-height:var(--action-sheet-description-line-height,20px)}.van-action-sheet__close{position:absolute!important;top:0;right:0;line-height:inherit!important;padding:0 12px;padding:var(--action-sheet-close-icon-padding,0 12px);font-size:18px!important;font-size:var(--action-sheet-close-icon-size,18px)!important;color:#969799;color:var(--action-sheet-close-icon-color,#969799)}.van-action-sheet__loading{display:-webkit-flex!important;display:flex!important;height:50px;height:var(--action-sheet-item-height,50px)}
\ No newline at end of file
diff --git a/utils/dist/area/index.d.ts b/utils/dist/area/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/area/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/area/index.js b/utils/dist/area/index.js
new file mode 100644
index 0000000..5601d77
--- /dev/null
+++ b/utils/dist/area/index.js
@@ -0,0 +1,210 @@
+import { VantComponent } from '../common/component';
+import { pickerProps } from '../picker/shared';
+const COLUMNSPLACEHOLDERCODE = '000000';
+VantComponent({
+ classes: ['active-class', 'toolbar-class', 'column-class'],
+ props: Object.assign(Object.assign({}, pickerProps), { value: String, areaList: {
+ type: Object,
+ value: {}
+ }, columnsNum: {
+ type: null,
+ value: 3
+ }, columnsPlaceholder: {
+ type: Array,
+ observer(val) {
+ this.setData({
+ typeToColumnsPlaceholder: {
+ province: val[0] || '',
+ city: val[1] || '',
+ county: val[2] || '',
+ }
+ });
+ }
+ } }),
+ data: {
+ columns: [{ values: [] }, { values: [] }, { values: [] }],
+ displayColumns: [{ values: [] }, { values: [] }, { values: [] }],
+ typeToColumnsPlaceholder: {}
+ },
+ watch: {
+ value(value) {
+ this.code = value;
+ this.setValues();
+ },
+ areaList: 'setValues',
+ columnsNum(value) {
+ this.setData({
+ displayColumns: this.data.columns.slice(0, +value)
+ });
+ }
+ },
+ mounted() {
+ setTimeout(() => {
+ this.setValues();
+ }, 0);
+ },
+ methods: {
+ getPicker() {
+ if (this.picker == null) {
+ this.picker = this.selectComponent('.van-area__picker');
+ }
+ return this.picker;
+ },
+ onCancel(event) {
+ this.emit('cancel', event.detail);
+ },
+ onConfirm(event) {
+ const { index } = event.detail;
+ let { value } = event.detail;
+ value = this.parseOutputValues(value);
+ this.emit('confirm', { value, index });
+ },
+ emit(type, detail) {
+ detail.values = detail.value;
+ delete detail.value;
+ this.$emit(type, detail);
+ },
+ // parse output columns data
+ parseOutputValues(values) {
+ const { columnsPlaceholder } = this.data;
+ return values.map((value, index) => {
+ // save undefined value
+ if (!value)
+ return value;
+ value = JSON.parse(JSON.stringify(value));
+ if (!value.code || value.name === columnsPlaceholder[index]) {
+ value.code = '';
+ value.name = '';
+ }
+ return value;
+ });
+ },
+ onChange(event) {
+ const { index, picker, value } = event.detail;
+ this.code = value[index].code;
+ this.setValues().then(() => {
+ this.$emit('change', {
+ picker,
+ values: this.parseOutputValues(picker.getValues()),
+ index
+ });
+ });
+ },
+ getConfig(type) {
+ const { areaList } = this.data;
+ return (areaList && areaList[`${type}_list`]) || {};
+ },
+ getList(type, code) {
+ const { typeToColumnsPlaceholder } = this.data;
+ let result = [];
+ if (type !== 'province' && !code) {
+ return result;
+ }
+ const list = this.getConfig(type);
+ result = Object.keys(list).map(code => ({
+ code,
+ name: list[code]
+ }));
+ if (code) {
+ // oversea code
+ if (code[0] === '9' && type === 'city') {
+ code = '9';
+ }
+ result = result.filter(item => item.code.indexOf(code) === 0);
+ }
+ if (typeToColumnsPlaceholder[type] && result.length) {
+ // set columns placeholder
+ const codeFill = type === 'province' ? '' : type === 'city' ? COLUMNSPLACEHOLDERCODE.slice(2, 4) : COLUMNSPLACEHOLDERCODE.slice(4, 6);
+ result.unshift({
+ code: `${code}${codeFill}`,
+ name: typeToColumnsPlaceholder[type]
+ });
+ }
+ return result;
+ },
+ getIndex(type, code) {
+ let compareNum = type === 'province' ? 2 : type === 'city' ? 4 : 6;
+ const list = this.getList(type, code.slice(0, compareNum - 2));
+ // oversea code
+ if (code[0] === '9' && type === 'province') {
+ compareNum = 1;
+ }
+ code = code.slice(0, compareNum);
+ for (let i = 0; i < list.length; i++) {
+ if (list[i].code.slice(0, compareNum) === code) {
+ return i;
+ }
+ }
+ return 0;
+ },
+ setValues() {
+ const county = this.getConfig('county');
+ let { code } = this;
+ if (!code) {
+ if (this.data.columnsPlaceholder.length) {
+ code = COLUMNSPLACEHOLDERCODE;
+ }
+ else if (Object.keys(county)[0]) {
+ code = Object.keys(county)[0];
+ }
+ else {
+ code = '';
+ }
+ }
+ const province = this.getList('province');
+ const city = this.getList('city', code.slice(0, 2));
+ const picker = this.getPicker();
+ if (!picker) {
+ return;
+ }
+ const stack = [];
+ stack.push(picker.setColumnValues(0, province, false));
+ stack.push(picker.setColumnValues(1, city, false));
+ if (city.length && code.slice(2, 4) === '00') {
+ [{ code }] = city;
+ }
+ stack.push(picker.setColumnValues(2, this.getList('county', code.slice(0, 4)), false));
+ return Promise.all(stack)
+ .catch(() => { })
+ .then(() => picker.setIndexes([
+ this.getIndex('province', code),
+ this.getIndex('city', code),
+ this.getIndex('county', code)
+ ]))
+ .catch(() => { });
+ },
+ getValues() {
+ const picker = this.getPicker();
+ return picker ? picker.getValues().filter(value => !!value) : [];
+ },
+ getDetail() {
+ const values = this.getValues();
+ const area = {
+ code: '',
+ country: '',
+ province: '',
+ city: '',
+ county: ''
+ };
+ if (!values.length) {
+ return area;
+ }
+ const names = values.map((item) => item.name);
+ area.code = values[values.length - 1].code;
+ if (area.code[0] === '9') {
+ area.country = names[1] || '';
+ area.province = names[2] || '';
+ }
+ else {
+ area.province = names[0] || '';
+ area.city = names[1] || '';
+ area.county = names[2] || '';
+ }
+ return area;
+ },
+ reset(code) {
+ this.code = code || '';
+ return this.setValues();
+ }
+ }
+});
diff --git a/utils/dist/area/index.json b/utils/dist/area/index.json
new file mode 100644
index 0000000..a778e91
--- /dev/null
+++ b/utils/dist/area/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-picker": "../picker/index"
+ }
+}
diff --git a/utils/dist/area/index.wxml b/utils/dist/area/index.wxml
new file mode 100644
index 0000000..6075794
--- /dev/null
+++ b/utils/dist/area/index.wxml
@@ -0,0 +1,18 @@
+
diff --git a/utils/dist/area/index.wxss b/utils/dist/area/index.wxss
new file mode 100644
index 0000000..99694d6
--- /dev/null
+++ b/utils/dist/area/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';
\ No newline at end of file
diff --git a/utils/dist/button/index.d.ts b/utils/dist/button/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/button/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/button/index.js b/utils/dist/button/index.js
new file mode 100644
index 0000000..e32509e
--- /dev/null
+++ b/utils/dist/button/index.js
@@ -0,0 +1,68 @@
+import { VantComponent } from '../common/component';
+import { button } from '../mixins/button';
+import { openType } from '../mixins/open-type';
+VantComponent({
+ mixins: [button, openType],
+ classes: ['hover-class', 'loading-class'],
+ data: {
+ style: ''
+ },
+ props: {
+ icon: String,
+ plain: Boolean,
+ block: Boolean,
+ round: Boolean,
+ square: Boolean,
+ loading: Boolean,
+ hairline: Boolean,
+ disabled: Boolean,
+ loadingText: String,
+ customStyle: String,
+ loadingType: {
+ type: String,
+ value: 'circular'
+ },
+ type: {
+ type: String,
+ value: 'default'
+ },
+ size: {
+ type: String,
+ value: 'normal'
+ },
+ loadingSize: {
+ type: String,
+ value: '20px'
+ },
+ color: {
+ type: String,
+ observer(color) {
+ let style = '';
+ if (color) {
+ style += `color: ${this.data.plain ? color : 'white'};`;
+ if (!this.data.plain) {
+ // Use background instead of backgroundColor to make linear-gradient work
+ style += `background: ${color};`;
+ }
+ // hide border when color is linear-gradient
+ if (color.indexOf('gradient') !== -1) {
+ style += 'border: 0;';
+ }
+ else {
+ style += `border-color: ${color};`;
+ }
+ }
+ if (style !== this.data.style) {
+ this.setData({ style });
+ }
+ }
+ }
+ },
+ methods: {
+ onClick() {
+ if (!this.data.disabled && !this.data.loading) {
+ this.$emit('click');
+ }
+ }
+ }
+});
diff --git a/utils/dist/button/index.json b/utils/dist/button/index.json
new file mode 100644
index 0000000..e00a588
--- /dev/null
+++ b/utils/dist/button/index.json
@@ -0,0 +1,7 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-icon": "../icon/index",
+ "van-loading": "../loading/index"
+ }
+}
diff --git a/utils/dist/button/index.wxml b/utils/dist/button/index.wxml
new file mode 100644
index 0000000..77b4942
--- /dev/null
+++ b/utils/dist/button/index.wxml
@@ -0,0 +1,52 @@
+
+
+
diff --git a/utils/dist/button/index.wxss b/utils/dist/button/index.wxss
new file mode 100644
index 0000000..0d302cb
--- /dev/null
+++ b/utils/dist/button/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-button{position:relative;display:-webkit-inline-flex;display:inline-flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;box-sizing:border-box;padding:0;line-height:20px;text-align:center;vertical-align:middle;-webkit-appearance:none;-webkit-text-size-adjust:100%;height:44px;height:var(--button-default-height,44px);font-size:16px;font-size:var(--button-default-font-size,16px);transition:opacity .2s;transition:opacity var(--animation-duration-fast,.2s);border-radius:2px;border-radius:var(--button-border-radius,2px)}.van-button:before{position:absolute;top:50%;left:50%;width:100%;height:100%;border:inherit;border-radius:inherit;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);opacity:0;content:" ";background-color:#000;background-color:var(--black,#000);border-color:#000;border-color:var(--black,#000)}.van-button:after{border-width:0}.van-button--active:before{opacity:.15}.van-button--unclickable:after{display:none}.van-button--default{color:#323233;color:var(--button-default-color,#323233);background-color:#fff;background-color:var(--button-default-background-color,#fff);border:1px solid #ebedf0;border:1px solid var(--button-default-border-color,#ebedf0)}.van-button--primary{color:#fff;color:var(--button-primary-color,#fff);background-color:#07c160;background-color:var(--button-primary-background-color,#07c160);border:1px solid #07c160;border:1px solid var(--button-primary-border-color,#07c160)}.van-button--info{color:#fff;color:var(--button-info-color,#fff);background-color:#1989fa;background-color:var(--button-info-background-color,#1989fa);border:1px solid #1989fa;border:1px solid var(--button-info-border-color,#1989fa)}.van-button--danger{color:#fff;color:var(--button-danger-color,#fff);background-color:#ee0a24;background-color:var(--button-danger-background-color,#ee0a24);border:1px solid #ee0a24;border:1px solid var(--button-danger-border-color,#ee0a24)}.van-button--warning{color:#fff;color:var(--button-warning-color,#fff);background-color:#ff976a;background-color:var(--button-warning-background-color,#ff976a);border:1px solid #ff976a;border:1px solid var(--button-warning-border-color,#ff976a)}.van-button--plain{background-color:#fff;background-color:var(--button-plain-background-color,#fff)}.van-button--plain.van-button--primary{color:#07c160;color:var(--button-primary-background-color,#07c160)}.van-button--plain.van-button--info{color:#1989fa;color:var(--button-info-background-color,#1989fa)}.van-button--plain.van-button--danger{color:#ee0a24;color:var(--button-danger-background-color,#ee0a24)}.van-button--plain.van-button--warning{color:#ff976a;color:var(--button-warning-background-color,#ff976a)}.van-button--large{width:100%;height:50px;height:var(--button-large-height,50px)}.van-button--normal{padding:0 15px;font-size:14px;font-size:var(--button-normal-font-size,14px)}.van-button--small{min-width:60px;min-width:var(--button-small-min-width,60px);height:30px;height:var(--button-small-height,30px);padding:0 8px;padding:0 var(--padding-xs,8px);font-size:12px;font-size:var(--button-small-font-size,12px)}.van-button--mini{display:inline-block;min-width:50px;min-width:var(--button-mini-min-width,50px);height:22px;height:var(--button-mini-height,22px);font-size:10px;font-size:var(--button-mini-font-size,10px)}.van-button--mini+.van-button--mini{margin-left:5px}.van-button--block{display:-webkit-flex;display:flex;width:100%}.van-button--round{border-radius:999px;border-radius:var(--button-round-border-radius,999px)}.van-button--square{border-radius:0}.van-button--disabled{opacity:.5;opacity:var(--button-disabled-opacity,.5)}.van-button__text{display:inline}.van-button__icon+.van-button__text:not(:empty),.van-button__loading-text{margin-left:4px}.van-button__icon{min-width:1em;line-height:inherit!important;vertical-align:top}.van-button--hairline{padding-top:1px;border-width:0}.van-button--hairline:after{border-color:inherit;border-width:1px;border-radius:4px;border-radius:calc(var(--button-border-radius, 2px)*2)}.van-button--hairline.van-button--round:after{border-radius:999px;border-radius:var(--button-round-border-radius,999px)}.van-button--hairline.van-button--square:after{border-radius:0}
\ No newline at end of file
diff --git a/utils/dist/card/index.d.ts b/utils/dist/card/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/card/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/card/index.js b/utils/dist/card/index.js
new file mode 100644
index 0000000..ae64151
--- /dev/null
+++ b/utils/dist/card/index.js
@@ -0,0 +1,38 @@
+import { link } from '../mixins/link';
+import { VantComponent } from '../common/component';
+VantComponent({
+ classes: [
+ 'num-class',
+ 'desc-class',
+ 'thumb-class',
+ 'title-class',
+ 'price-class',
+ 'origin-price-class',
+ ],
+ mixins: [link],
+ props: {
+ tag: String,
+ num: String,
+ desc: String,
+ thumb: String,
+ title: String,
+ price: String,
+ centered: Boolean,
+ lazyLoad: Boolean,
+ thumbLink: String,
+ originPrice: String,
+ thumbMode: {
+ type: String,
+ value: 'aspectFit'
+ },
+ currency: {
+ type: String,
+ value: '¥'
+ }
+ },
+ methods: {
+ onClickThumb() {
+ this.jumpLink('thumbLink');
+ }
+ }
+});
diff --git a/utils/dist/card/index.json b/utils/dist/card/index.json
new file mode 100644
index 0000000..e917407
--- /dev/null
+++ b/utils/dist/card/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-tag": "../tag/index"
+ }
+}
diff --git a/utils/dist/card/index.wxml b/utils/dist/card/index.wxml
new file mode 100644
index 0000000..a17b1d6
--- /dev/null
+++ b/utils/dist/card/index.wxml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
diff --git a/utils/dist/card/index.wxss b/utils/dist/card/index.wxss
new file mode 100644
index 0000000..8e86e45
--- /dev/null
+++ b/utils/dist/card/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-card{position:relative;box-sizing:border-box;padding:8px 16px;padding:var(--card-padding,8px 16px);font-size:12px;font-size:var(--card-font-size,12px);color:#323233;color:var(--card-text-color,#323233);background-color:#fafafa;background-color:var(--card-background-color,#fafafa)}.van-card__header{display:-webkit-flex;display:flex}.van-card__header--center{-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center}.van-card__thumb{position:relative;-webkit-flex:none;flex:none;width:90px;width:var(--card-thumb-size,90px);height:90px;height:var(--card-thumb-size,90px);margin-right:8px;margin-right:var(--padding-xs,8px)}.van-card__thumb:empty{display:none}.van-card__img{width:100%;height:100%}.van-card__content{position:relative;-webkit-flex:1;flex:1;min-width:0}.van-card__desc,.van-card__title{word-wrap:break-word}.van-card__title{font-weight:700;line-height:16px;line-height:var(--card-title-line-height,16px)}.van-card__desc{line-height:20px;line-height:var(--card-desc-line-height,20px);color:#646566;color:var(--card-desc-color,#646566)}.van-card__bottom{line-height:20px}.van-card__price{display:inline-block;font-weight:700;color:#ee0a24;color:var(--card-price-color,#ee0a24)}.van-card__origin-price{display:inline-block;margin-left:5px;text-decoration:line-through;font-size:10px;font-size:var(--card-origin-price-font-size,10px);color:#646566;color:var(--card-origin-price-color,#646566)}.van-card__num{float:right}.van-card__tag{position:absolute;top:2px;left:0}.van-card__footer{-webkit-flex:none;flex:none;width:100%;text-align:right}
\ No newline at end of file
diff --git a/utils/dist/cell-group/index.d.ts b/utils/dist/cell-group/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/cell-group/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/cell-group/index.js b/utils/dist/cell-group/index.js
new file mode 100644
index 0000000..3611e09
--- /dev/null
+++ b/utils/dist/cell-group/index.js
@@ -0,0 +1,10 @@
+import { VantComponent } from '../common/component';
+VantComponent({
+ props: {
+ title: String,
+ border: {
+ type: Boolean,
+ value: true
+ }
+ }
+});
diff --git a/utils/dist/cell-group/index.json b/utils/dist/cell-group/index.json
new file mode 100644
index 0000000..32640e0
--- /dev/null
+++ b/utils/dist/cell-group/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
\ No newline at end of file
diff --git a/utils/dist/cell-group/index.wxml b/utils/dist/cell-group/index.wxml
new file mode 100644
index 0000000..6e0b471
--- /dev/null
+++ b/utils/dist/cell-group/index.wxml
@@ -0,0 +1,9 @@
+
+ {{ title }}
+
+
+
+
diff --git a/utils/dist/cell-group/index.wxss b/utils/dist/cell-group/index.wxss
new file mode 100644
index 0000000..edbccd5
--- /dev/null
+++ b/utils/dist/cell-group/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-cell-group__title{padding:16px 16px 8px;padding:var(--cell-group-title-padding,16px 16px 8px);font-size:14px;font-size:var(--cell-group-title-font-size,14px);line-height:16px;line-height:var(--cell-group-title-line-height,16px);color:#969799;color:var(--cell-group-title-color,#969799)}
\ No newline at end of file
diff --git a/utils/dist/cell/index.d.ts b/utils/dist/cell/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/cell/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/cell/index.js b/utils/dist/cell/index.js
new file mode 100644
index 0000000..11cd042
--- /dev/null
+++ b/utils/dist/cell/index.js
@@ -0,0 +1,37 @@
+import { link } from '../mixins/link';
+import { VantComponent } from '../common/component';
+VantComponent({
+ classes: [
+ 'title-class',
+ 'label-class',
+ 'value-class',
+ 'right-icon-class',
+ 'hover-class'
+ ],
+ mixins: [link],
+ props: {
+ title: null,
+ value: null,
+ icon: String,
+ size: String,
+ label: String,
+ center: Boolean,
+ isLink: Boolean,
+ required: Boolean,
+ clickable: Boolean,
+ titleWidth: String,
+ customStyle: String,
+ arrowDirection: String,
+ useLabelSlot: Boolean,
+ border: {
+ type: Boolean,
+ value: true
+ }
+ },
+ methods: {
+ onClick(event) {
+ this.$emit('click', event.detail);
+ this.jumpLink();
+ }
+ }
+});
diff --git a/utils/dist/cell/index.json b/utils/dist/cell/index.json
new file mode 100644
index 0000000..a9ab393
--- /dev/null
+++ b/utils/dist/cell/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-icon": "../icon/index"
+ }
+}
\ No newline at end of file
diff --git a/utils/dist/cell/index.wxml b/utils/dist/cell/index.wxml
new file mode 100644
index 0000000..afaaaf8
--- /dev/null
+++ b/utils/dist/cell/index.wxml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+ {{ title }}
+
+
+
+
+ {{ label }}
+
+
+
+
+ {{ value }}
+
+
+
+
+
+
+
+
diff --git a/utils/dist/cell/index.wxss b/utils/dist/cell/index.wxss
new file mode 100644
index 0000000..f0bdd3a
--- /dev/null
+++ b/utils/dist/cell/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-cell{position:relative;display:-webkit-flex;display:flex;box-sizing:border-box;width:100%;padding:10px 16px;padding:var(--cell-vertical-padding,10px) var(--cell-horizontal-padding,16px);font-size:14px;font-size:var(--cell-font-size,14px);line-height:24px;line-height:var(--cell-line-height,24px);color:#323233;color:var(--cell-text-color,#323233);background-color:#fff;background-color:var(--cell-background-color,#fff)}.van-cell:after{position:absolute;box-sizing:border-box;-webkit-transform-origin:center;transform-origin:center;content:" ";pointer-events:none;top:auto;right:0;bottom:0;left:16px;border-bottom:1px solid #ebedf0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.van-cell--borderless:after{display:none}.van-cell-group{background-color:#fff;background-color:var(--cell-background-color,#fff)}.van-cell__label{margin-top:3px;margin-top:var(--cell-label-margin-top,3px);font-size:12px;font-size:var(--cell-label-font-size,12px);line-height:18px;line-height:var(--cell-label-line-height,18px);color:#969799;color:var(--cell-label-color,#969799)}.van-cell__value{overflow:hidden;text-align:right;vertical-align:middle;color:#969799;color:var(--cell-value-color,#969799)}.van-cell__title,.van-cell__value{-webkit-flex:1;flex:1}.van-cell__title:empty,.van-cell__value:empty{display:none}.van-cell__left-icon-wrap,.van-cell__right-icon-wrap{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;height:24px;height:var(--cell-line-height,24px);font-size:16px;font-size:var(--cell-icon-size,16px)}.van-cell__left-icon-wrap{margin-right:5px}.van-cell__right-icon-wrap{margin-left:5px;color:#969799;color:var(--cell-right-icon-color,#969799)}.van-cell__left-icon{vertical-align:middle}.van-cell__left-icon,.van-cell__right-icon{line-height:24px;line-height:var(--cell-line-height,24px)}.van-cell--clickable.van-cell--hover{background-color:#f2f3f5;background-color:var(--cell-active-color,#f2f3f5)}.van-cell--required{overflow:visible}.van-cell--required:before{position:absolute;content:"*";left:8px;left:var(--padding-xs,8px);font-size:14px;font-size:var(--cell-font-size,14px);color:#ee0a24;color:var(--cell-required-color,#ee0a24)}.van-cell--center{-webkit-align-items:center;align-items:center}.van-cell--large{padding-top:12px;padding-top:var(--cell-large-vertical-padding,12px);padding-bottom:12px;padding-bottom:var(--cell-large-vertical-padding,12px)}.van-cell--large .van-cell__title{font-size:16px;font-size:var(--cell-large-title-font-size,16px)}.van-cell--large .van-cell__label{font-size:14px;font-size:var(--cell-large-label-font-size,14px)}
\ No newline at end of file
diff --git a/utils/dist/checkbox-group/index.d.ts b/utils/dist/checkbox-group/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/checkbox-group/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/checkbox-group/index.js b/utils/dist/checkbox-group/index.js
new file mode 100644
index 0000000..92438e7
--- /dev/null
+++ b/utils/dist/checkbox-group/index.js
@@ -0,0 +1,39 @@
+import { VantComponent } from '../common/component';
+VantComponent({
+ field: true,
+ relation: {
+ name: 'checkbox',
+ type: 'descendant',
+ linked(target) {
+ this.children = this.children || [];
+ this.children.push(target);
+ this.updateChild(target);
+ },
+ unlinked(target) {
+ this.children = this.children.filter((child) => child !== target);
+ }
+ },
+ props: {
+ max: Number,
+ value: {
+ type: Array,
+ observer: 'updateChildren'
+ },
+ disabled: {
+ type: Boolean,
+ observer: 'updateChildren'
+ }
+ },
+ methods: {
+ updateChildren() {
+ (this.children || []).forEach((child) => this.updateChild(child));
+ },
+ updateChild(child) {
+ const { value, disabled } = this.data;
+ child.setData({
+ value: value.indexOf(child.data.name) !== -1,
+ disabled: disabled || child.data.disabled
+ });
+ }
+ }
+});
diff --git a/utils/dist/checkbox-group/index.json b/utils/dist/checkbox-group/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/utils/dist/checkbox-group/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/utils/dist/checkbox-group/index.wxml b/utils/dist/checkbox-group/index.wxml
new file mode 100644
index 0000000..4fa864c
--- /dev/null
+++ b/utils/dist/checkbox-group/index.wxml
@@ -0,0 +1 @@
+
diff --git a/utils/dist/checkbox-group/index.wxss b/utils/dist/checkbox-group/index.wxss
new file mode 100644
index 0000000..99694d6
--- /dev/null
+++ b/utils/dist/checkbox-group/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';
\ No newline at end of file
diff --git a/utils/dist/checkbox/index.d.ts b/utils/dist/checkbox/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/checkbox/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/checkbox/index.js b/utils/dist/checkbox/index.js
new file mode 100644
index 0000000..4491e3b
--- /dev/null
+++ b/utils/dist/checkbox/index.js
@@ -0,0 +1,87 @@
+import { VantComponent } from '../common/component';
+import { addUnit } from '../common/utils';
+function emit(target, value) {
+ target.$emit('input', value);
+ target.$emit('change', value);
+}
+VantComponent({
+ field: true,
+ relation: {
+ name: 'checkbox-group',
+ type: 'ancestor',
+ linked(target) {
+ this.parent = target;
+ },
+ unlinked() {
+ this.parent = null;
+ }
+ },
+ classes: ['icon-class', 'label-class'],
+ props: {
+ value: Boolean,
+ disabled: Boolean,
+ useIconSlot: Boolean,
+ checkedColor: String,
+ labelPosition: String,
+ labelDisabled: Boolean,
+ shape: {
+ type: String,
+ value: 'round'
+ },
+ iconSize: {
+ type: null,
+ observer: 'setSizeWithUnit'
+ }
+ },
+ data: {
+ sizeWithUnit: '20px'
+ },
+ methods: {
+ emitChange(value) {
+ if (this.parent) {
+ this.setParentValue(this.parent, value);
+ }
+ else {
+ emit(this, value);
+ }
+ },
+ toggle() {
+ const { disabled, value } = this.data;
+ if (!disabled) {
+ this.emitChange(!value);
+ }
+ },
+ onClickLabel() {
+ const { labelDisabled, disabled, value } = this.data;
+ if (!disabled && !labelDisabled) {
+ this.emitChange(!value);
+ }
+ },
+ setParentValue(parent, value) {
+ const parentValue = parent.data.value.slice();
+ const { name } = this.data;
+ const { max } = parent.data;
+ if (value) {
+ if (max && parentValue.length >= max) {
+ return;
+ }
+ if (parentValue.indexOf(name) === -1) {
+ parentValue.push(name);
+ emit(parent, parentValue);
+ }
+ }
+ else {
+ const index = parentValue.indexOf(name);
+ if (index !== -1) {
+ parentValue.splice(index, 1);
+ emit(parent, parentValue);
+ }
+ }
+ },
+ setSizeWithUnit(size) {
+ this.set({
+ sizeWithUnit: addUnit(size)
+ });
+ },
+ }
+});
diff --git a/utils/dist/checkbox/index.json b/utils/dist/checkbox/index.json
new file mode 100644
index 0000000..0a336c0
--- /dev/null
+++ b/utils/dist/checkbox/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-icon": "../icon/index"
+ }
+}
diff --git a/utils/dist/checkbox/index.wxml b/utils/dist/checkbox/index.wxml
new file mode 100644
index 0000000..65124a1
--- /dev/null
+++ b/utils/dist/checkbox/index.wxml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/utils/dist/checkbox/index.wxss b/utils/dist/checkbox/index.wxss
new file mode 100644
index 0000000..d217597
--- /dev/null
+++ b/utils/dist/checkbox/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-checkbox{display:-webkit-flex;display:flex;overflow:hidden;-webkit-user-select:none;user-select:none}.van-checkbox__icon-wrap,.van-checkbox__label{line-height:20px;line-height:var(--checkbox-size,20px)}.van-checkbox__icon-wrap{-webkit-flex:none;flex:none}.van-checkbox__icon{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;box-sizing:border-box;width:1em;height:1em;color:transparent;text-align:center;transition-property:color,border-color,background-color;font-size:20px;font-size:var(--checkbox-size,20px);border:1px solid #c8c9cc;border:1px solid var(--checkbox-border-color,#c8c9cc);transition-duration:.2s;transition-duration:var(--checkbox-transition-duration,.2s)}.van-checkbox__icon--round{border-radius:100%}.van-checkbox__icon--checked{color:#fff;color:var(--white,#fff);background-color:#1989fa;background-color:var(--checkbox-checked-icon-color,#1989fa);border-color:#1989fa;border-color:var(--checkbox-checked-icon-color,#1989fa)}.van-checkbox__icon--disabled{background-color:#ebedf0;background-color:var(--checkbox-disabled-background-color,#ebedf0);border-color:#c8c9cc;border-color:var(--checkbox-disabled-icon-color,#c8c9cc)}.van-checkbox__icon--disabled.van-checkbox__icon--checked{color:#c8c9cc;color:var(--checkbox-disabled-icon-color,#c8c9cc)}.van-checkbox__label{word-wrap:break-word;margin-left:10px;margin-left:var(--checkbox-label-margin,10px);color:#323233;color:var(--checkbox-label-color,#323233)}.van-checkbox__label--left{float:left;margin:0 10px 0 0;margin:0 var(--checkbox-label-margin,10px) 0 0}.van-checkbox__label--disabled{color:#c8c9cc;color:var(--checkbox-disabled-label-color,#c8c9cc)}.van-checkbox__label:empty{margin:0}
\ No newline at end of file
diff --git a/utils/dist/circle/index.d.ts b/utils/dist/circle/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/circle/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/circle/index.js b/utils/dist/circle/index.js
new file mode 100644
index 0000000..08c7eb4
--- /dev/null
+++ b/utils/dist/circle/index.js
@@ -0,0 +1,158 @@
+import { VantComponent } from '../common/component';
+import { isObj } from '../common/utils';
+import { BLUE, WHITE } from '../common/color';
+function format(rate) {
+ return Math.min(Math.max(rate, 0), 100);
+}
+const PERIMETER = 2 * Math.PI;
+const BEGIN_ANGLE = -Math.PI / 2;
+const STEP = 1;
+VantComponent({
+ props: {
+ text: String,
+ lineCap: {
+ type: String,
+ value: 'round'
+ },
+ value: {
+ type: Number,
+ value: 0,
+ observer: 'reRender'
+ },
+ speed: {
+ type: Number,
+ value: 50
+ },
+ size: {
+ type: Number,
+ value: 100,
+ observer: 'setStyle'
+ },
+ fill: String,
+ layerColor: {
+ type: String,
+ value: WHITE
+ },
+ color: {
+ type: [String, Object],
+ value: BLUE,
+ observer: 'setHoverColor'
+ },
+ strokeWidth: {
+ type: Number,
+ value: 4
+ },
+ clockwise: {
+ type: Boolean,
+ value: true
+ }
+ },
+ data: {
+ style: 'width: 100px; height: 100px;',
+ hoverColor: BLUE
+ },
+ methods: {
+ getContext() {
+ if (!this.ctx) {
+ this.ctx = wx.createCanvasContext('van-circle', this);
+ }
+ return this.ctx;
+ },
+ setHoverColor() {
+ const context = this.getContext();
+ const { color, size } = this.data;
+ let hoverColor = color;
+ if (isObj(color)) {
+ const LinearColor = context.createLinearGradient(size, 0, 0, 0);
+ Object.keys(color)
+ .sort((a, b) => parseFloat(a) - parseFloat(b))
+ .map(key => LinearColor.addColorStop(parseFloat(key) / 100, color[key]));
+ hoverColor = LinearColor;
+ }
+ this.setData({ hoverColor });
+ },
+ setStyle() {
+ const { size } = this.data;
+ const style = `width: ${size}px; height: ${size}px;`;
+ this.setData({ style });
+ },
+ presetCanvas(context, strokeStyle, beginAngle, endAngle, fill) {
+ const { strokeWidth, lineCap, clockwise, size } = this.data;
+ const position = size / 2;
+ const radius = position - strokeWidth / 2;
+ context.setStrokeStyle(strokeStyle);
+ context.setLineWidth(strokeWidth);
+ context.setLineCap(lineCap);
+ context.beginPath();
+ context.arc(position, position, radius, beginAngle, endAngle, !clockwise);
+ context.stroke();
+ if (fill) {
+ context.setFillStyle(fill);
+ context.fill();
+ }
+ },
+ renderLayerCircle(context) {
+ const { layerColor, fill } = this.data;
+ this.presetCanvas(context, layerColor, 0, PERIMETER, fill);
+ },
+ renderHoverCircle(context, formatValue) {
+ const { clockwise, hoverColor } = this.data;
+ // 结束角度
+ const progress = PERIMETER * (formatValue / 100);
+ const endAngle = clockwise
+ ? BEGIN_ANGLE + progress
+ : 3 * Math.PI - (BEGIN_ANGLE + progress);
+ this.presetCanvas(context, hoverColor, BEGIN_ANGLE, endAngle);
+ },
+ drawCircle(currentValue) {
+ const context = this.getContext();
+ const { size } = this.data;
+ context.clearRect(0, 0, size, size);
+ this.renderLayerCircle(context);
+ const formatValue = format(currentValue);
+ if (formatValue !== 0) {
+ this.renderHoverCircle(context, formatValue);
+ }
+ context.draw();
+ },
+ reRender() {
+ // tofector 动画暂时没有想到好的解决方案
+ const { value, speed } = this.data;
+ if (speed <= 0 || speed > 1000) {
+ this.drawCircle(value);
+ return;
+ }
+ this.clearInterval();
+ this.currentValue = this.currentValue || 0;
+ this.interval = setInterval(() => {
+ if (this.currentValue !== value) {
+ if (this.currentValue < value) {
+ this.currentValue += STEP;
+ }
+ else {
+ this.currentValue -= STEP;
+ }
+ this.drawCircle(this.currentValue);
+ }
+ else {
+ this.clearInterval();
+ }
+ }, 1000 / speed);
+ },
+ clearInterval() {
+ if (this.interval) {
+ clearInterval(this.interval);
+ this.interval = null;
+ }
+ }
+ },
+ created() {
+ const { value } = this.data;
+ this.currentValue = value;
+ this.drawCircle(value);
+ },
+ destroyed() {
+ this.ctx = null;
+ this.clearInterval();
+ }
+});
diff --git a/utils/dist/circle/index.json b/utils/dist/circle/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/utils/dist/circle/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/utils/dist/circle/index.wxml b/utils/dist/circle/index.wxml
new file mode 100644
index 0000000..215122f
--- /dev/null
+++ b/utils/dist/circle/index.wxml
@@ -0,0 +1,7 @@
+
+
+
+
+
+ {{ text }}
+
\ No newline at end of file
diff --git a/utils/dist/circle/index.wxss b/utils/dist/circle/index.wxss
new file mode 100644
index 0000000..3ab63df
--- /dev/null
+++ b/utils/dist/circle/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-circle{position:relative;display:inline-block;text-align:center}.van-circle__text{position:absolute;top:50%;left:0;width:100%;-webkit-transform:translateY(-50%);transform:translateY(-50%);color:#323233;color:var(--circle-text-color,#323233)}
\ No newline at end of file
diff --git a/utils/dist/col/index.d.ts b/utils/dist/col/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/col/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/col/index.js b/utils/dist/col/index.js
new file mode 100644
index 0000000..2d1d85e
--- /dev/null
+++ b/utils/dist/col/index.js
@@ -0,0 +1,23 @@
+import { VantComponent } from '../common/component';
+VantComponent({
+ relation: {
+ name: 'row',
+ type: 'ancestor'
+ },
+ props: {
+ span: Number,
+ offset: Number
+ },
+ data: {
+ style: ''
+ },
+ methods: {
+ setGutter(gutter) {
+ const padding = `${gutter / 2}px`;
+ const style = gutter ? `padding-left: ${padding}; padding-right: ${padding};` : '';
+ if (style !== this.data.style) {
+ this.setData({ style });
+ }
+ }
+ }
+});
diff --git a/utils/dist/col/index.json b/utils/dist/col/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/utils/dist/col/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/utils/dist/col/index.wxml b/utils/dist/col/index.wxml
new file mode 100644
index 0000000..a759aac
--- /dev/null
+++ b/utils/dist/col/index.wxml
@@ -0,0 +1,8 @@
+
+
+
+
+
diff --git a/utils/dist/col/index.wxss b/utils/dist/col/index.wxss
new file mode 100644
index 0000000..44c896a
--- /dev/null
+++ b/utils/dist/col/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-col{float:left;box-sizing:border-box}.van-col--1{width:4.16666667%}.van-col--offset-1{margin-left:4.16666667%}.van-col--2{width:8.33333333%}.van-col--offset-2{margin-left:8.33333333%}.van-col--3{width:12.5%}.van-col--offset-3{margin-left:12.5%}.van-col--4{width:16.66666667%}.van-col--offset-4{margin-left:16.66666667%}.van-col--5{width:20.83333333%}.van-col--offset-5{margin-left:20.83333333%}.van-col--6{width:25%}.van-col--offset-6{margin-left:25%}.van-col--7{width:29.16666667%}.van-col--offset-7{margin-left:29.16666667%}.van-col--8{width:33.33333333%}.van-col--offset-8{margin-left:33.33333333%}.van-col--9{width:37.5%}.van-col--offset-9{margin-left:37.5%}.van-col--10{width:41.66666667%}.van-col--offset-10{margin-left:41.66666667%}.van-col--11{width:45.83333333%}.van-col--offset-11{margin-left:45.83333333%}.van-col--12{width:50%}.van-col--offset-12{margin-left:50%}.van-col--13{width:54.16666667%}.van-col--offset-13{margin-left:54.16666667%}.van-col--14{width:58.33333333%}.van-col--offset-14{margin-left:58.33333333%}.van-col--15{width:62.5%}.van-col--offset-15{margin-left:62.5%}.van-col--16{width:66.66666667%}.van-col--offset-16{margin-left:66.66666667%}.van-col--17{width:70.83333333%}.van-col--offset-17{margin-left:70.83333333%}.van-col--18{width:75%}.van-col--offset-18{margin-left:75%}.van-col--19{width:79.16666667%}.van-col--offset-19{margin-left:79.16666667%}.van-col--20{width:83.33333333%}.van-col--offset-20{margin-left:83.33333333%}.van-col--21{width:87.5%}.van-col--offset-21{margin-left:87.5%}.van-col--22{width:91.66666667%}.van-col--offset-22{margin-left:91.66666667%}.van-col--23{width:95.83333333%}.van-col--offset-23{margin-left:95.83333333%}.van-col--24{width:100%}.van-col--offset-24{margin-left:100%}
\ No newline at end of file
diff --git a/utils/dist/collapse-item/index.d.ts b/utils/dist/collapse-item/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/collapse-item/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/collapse-item/index.js b/utils/dist/collapse-item/index.js
new file mode 100644
index 0000000..a869be0
--- /dev/null
+++ b/utils/dist/collapse-item/index.js
@@ -0,0 +1,96 @@
+import { VantComponent } from '../common/component';
+const nextTick = () => new Promise(resolve => setTimeout(resolve, 20));
+VantComponent({
+ classes: ['title-class', 'content-class'],
+ relation: {
+ name: 'collapse',
+ type: 'ancestor',
+ linked(parent) {
+ this.parent = parent;
+ }
+ },
+ props: {
+ name: null,
+ title: null,
+ value: null,
+ icon: String,
+ label: String,
+ disabled: Boolean,
+ clickable: Boolean,
+ border: {
+ type: Boolean,
+ value: true
+ },
+ isLink: {
+ type: Boolean,
+ value: true
+ }
+ },
+ data: {
+ contentHeight: 0,
+ expanded: false,
+ transition: false
+ },
+ mounted() {
+ this.updateExpanded()
+ .then(nextTick)
+ .then(() => {
+ const data = { transition: true };
+ if (this.data.expanded) {
+ data.contentHeight = 'auto';
+ }
+ this.setData(data);
+ });
+ },
+ methods: {
+ updateExpanded() {
+ if (!this.parent) {
+ return Promise.resolve();
+ }
+ const { value, accordion } = this.parent.data;
+ const { children = [] } = this.parent;
+ const { name } = this.data;
+ const index = children.indexOf(this);
+ const currentName = name == null ? index : name;
+ const expanded = accordion
+ ? value === currentName
+ : (value || []).some((name) => name === currentName);
+ const stack = [];
+ if (expanded !== this.data.expanded) {
+ stack.push(this.updateStyle(expanded));
+ }
+ stack.push(this.set({ index, expanded }));
+ return Promise.all(stack);
+ },
+ updateStyle(expanded) {
+ return this.getRect('.van-collapse-item__content')
+ .then((rect) => rect.height)
+ .then((height) => {
+ if (expanded) {
+ return this.set({
+ contentHeight: height ? `${height}px` : 'auto'
+ });
+ }
+ return this.set({ contentHeight: `${height}px` })
+ .then(nextTick)
+ .then(() => this.set({ contentHeight: 0 }));
+ });
+ },
+ onClick() {
+ if (this.data.disabled) {
+ return;
+ }
+ const { name, expanded } = this.data;
+ const index = this.parent.children.indexOf(this);
+ const currentName = name == null ? index : name;
+ this.parent.switch(currentName, !expanded);
+ },
+ onTransitionEnd() {
+ if (this.data.expanded) {
+ this.setData({
+ contentHeight: 'auto'
+ });
+ }
+ }
+ }
+});
diff --git a/utils/dist/collapse-item/index.json b/utils/dist/collapse-item/index.json
new file mode 100644
index 0000000..0e5425c
--- /dev/null
+++ b/utils/dist/collapse-item/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-cell": "../cell/index"
+ }
+}
diff --git a/utils/dist/collapse-item/index.wxml b/utils/dist/collapse-item/index.wxml
new file mode 100644
index 0000000..91afbc2
--- /dev/null
+++ b/utils/dist/collapse-item/index.wxml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/utils/dist/collapse-item/index.wxss b/utils/dist/collapse-item/index.wxss
new file mode 100644
index 0000000..6ca214e
--- /dev/null
+++ b/utils/dist/collapse-item/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-collapse-item__title .van-cell__right-icon{-webkit-transform:rotate(90deg);transform:rotate(90deg);transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;transition:-webkit-transform var(--collapse-item-transition-duration,.3s);transition:transform var(--collapse-item-transition-duration,.3s);transition:transform var(--collapse-item-transition-duration,.3s),-webkit-transform var(--collapse-item-transition-duration,.3s)}.van-collapse-item__title--expanded .van-cell__right-icon{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.van-collapse-item__title--disabled .van-cell,.van-collapse-item__title--disabled .van-cell__right-icon{color:#c8c9cc!important;color:var(--collapse-item-title-disabled-color,#c8c9cc)!important}.van-collapse-item__title--disabled .van-cell--hover{background-color:#fff!important;background-color:var(--white,#fff)!important}.van-collapse-item__wrapper{overflow:hidden}.van-collapse-item__wrapper--transition{transition:height .3s ease-in-out}.van-collapse-item__content{padding:15px;padding:var(--collapse-item-content-padding,15px);color:#969799;color:var(--collapse-item-content-text-color,#969799);font-size:13px;font-size:var(--collapse-item-content-font-size,13px);line-height:1.5;line-height:var(--collapse-item-content-line-height,1.5);background-color:#fff;background-color:var(--collapse-item-content-background-color,#fff)}
\ No newline at end of file
diff --git a/utils/dist/collapse/index.d.ts b/utils/dist/collapse/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/collapse/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/collapse/index.js b/utils/dist/collapse/index.js
new file mode 100644
index 0000000..c6efb6a
--- /dev/null
+++ b/utils/dist/collapse/index.js
@@ -0,0 +1,50 @@
+import { VantComponent } from '../common/component';
+VantComponent({
+ relation: {
+ name: 'collapse-item',
+ type: 'descendant',
+ linked(child) {
+ this.children.push(child);
+ },
+ unlinked(child) {
+ this.children = this.children.filter((item) => item !== child);
+ }
+ },
+ props: {
+ value: {
+ type: null,
+ observer: 'updateExpanded'
+ },
+ accordion: {
+ type: Boolean,
+ observer: 'updateExpanded'
+ },
+ border: {
+ type: Boolean,
+ value: true
+ }
+ },
+ beforeCreate() {
+ this.children = [];
+ },
+ methods: {
+ updateExpanded() {
+ this.children.forEach((child) => {
+ child.updateExpanded();
+ });
+ },
+ switch(name, expanded) {
+ const { accordion, value } = this.data;
+ if (!accordion) {
+ name = expanded
+ ? (value || []).concat(name)
+ : (value || []).filter((activeName) => activeName !== name);
+ }
+ else {
+ name = expanded ? name : '';
+ }
+ this.$emit('change', name);
+ this.$emit('input', name);
+ }
+ }
+});
diff --git a/utils/dist/collapse/index.json b/utils/dist/collapse/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/utils/dist/collapse/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/utils/dist/collapse/index.wxml b/utils/dist/collapse/index.wxml
new file mode 100644
index 0000000..fd4e171
--- /dev/null
+++ b/utils/dist/collapse/index.wxml
@@ -0,0 +1,3 @@
+
+
+
diff --git a/utils/dist/collapse/index.wxss b/utils/dist/collapse/index.wxss
new file mode 100644
index 0000000..99694d6
--- /dev/null
+++ b/utils/dist/collapse/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';
\ No newline at end of file
diff --git a/utils/dist/common/color.d.ts b/utils/dist/common/color.d.ts
new file mode 100644
index 0000000..386f307
--- /dev/null
+++ b/utils/dist/common/color.d.ts
@@ -0,0 +1,7 @@
+export declare const RED = "#ee0a24";
+export declare const BLUE = "#1989fa";
+export declare const WHITE = "#fff";
+export declare const GREEN = "#07c160";
+export declare const ORANGE = "#ff976a";
+export declare const GRAY = "#323233";
+export declare const GRAY_DARK = "#969799";
diff --git a/utils/dist/common/color.js b/utils/dist/common/color.js
new file mode 100644
index 0000000..6b285bd
--- /dev/null
+++ b/utils/dist/common/color.js
@@ -0,0 +1,7 @@
+export const RED = '#ee0a24';
+export const BLUE = '#1989fa';
+export const WHITE = '#fff';
+export const GREEN = '#07c160';
+export const ORANGE = '#ff976a';
+export const GRAY = '#323233';
+export const GRAY_DARK = '#969799';
diff --git a/utils/dist/common/component.d.ts b/utils/dist/common/component.d.ts
new file mode 100644
index 0000000..307a96c
--- /dev/null
+++ b/utils/dist/common/component.d.ts
@@ -0,0 +1,3 @@
+import { VantComponentOptions, CombinedComponentInstance } from '../definitions/index';
+declare function VantComponent(vantOptions?: VantComponentOptions>): void;
+export { VantComponent };
diff --git a/utils/dist/common/component.js b/utils/dist/common/component.js
new file mode 100644
index 0000000..63ef1a9
--- /dev/null
+++ b/utils/dist/common/component.js
@@ -0,0 +1,48 @@
+import { basic } from '../mixins/basic';
+import { observe } from '../mixins/observer/index';
+function mapKeys(source, target, map) {
+ Object.keys(map).forEach(key => {
+ if (source[key]) {
+ target[map[key]] = source[key];
+ }
+ });
+}
+function VantComponent(vantOptions = {}) {
+ const options = {};
+ mapKeys(vantOptions, options, {
+ data: 'data',
+ props: 'properties',
+ mixins: 'behaviors',
+ methods: 'methods',
+ beforeCreate: 'created',
+ created: 'attached',
+ mounted: 'ready',
+ relations: 'relations',
+ destroyed: 'detached',
+ classes: 'externalClasses'
+ });
+ const { relation } = vantOptions;
+ if (relation) {
+ options.relations = Object.assign(options.relations || {}, {
+ [`../${relation.name}/index`]: relation
+ });
+ }
+ // add default externalClasses
+ options.externalClasses = options.externalClasses || [];
+ options.externalClasses.push('custom-class');
+ // add default behaviors
+ options.behaviors = options.behaviors || [];
+ options.behaviors.push(basic);
+ // map field to form-field behavior
+ if (vantOptions.field) {
+ options.behaviors.push('wx://form-field');
+ }
+ // add default options
+ options.options = {
+ multipleSlots: true,
+ addGlobalClass: true
+ };
+ observe(vantOptions, options);
+ Component(options);
+}
+export { VantComponent };
diff --git a/utils/dist/common/index.wxss b/utils/dist/common/index.wxss
new file mode 100644
index 0000000..6e6891f
--- /dev/null
+++ b/utils/dist/common/index.wxss
@@ -0,0 +1 @@
+.van-ellipsis{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.van-multi-ellipsis--l2{-webkit-line-clamp:2}.van-multi-ellipsis--l2,.van-multi-ellipsis--l3{display:-webkit-box;overflow:hidden;text-overflow:ellipsis;-webkit-box-orient:vertical}.van-multi-ellipsis--l3{-webkit-line-clamp:3}.van-clearfix:after{display:table;clear:both;content:""}.van-hairline,.van-hairline--bottom,.van-hairline--left,.van-hairline--right,.van-hairline--surround,.van-hairline--top,.van-hairline--top-bottom{position:relative}.van-hairline--bottom:after,.van-hairline--left:after,.van-hairline--right:after,.van-hairline--surround:after,.van-hairline--top-bottom:after,.van-hairline--top:after,.van-hairline:after{position:absolute;box-sizing:border-box;-webkit-transform-origin:center;transform-origin:center;content:" ";pointer-events:none;top:-50%;right:-50%;bottom:-50%;left:-50%;border:0 solid #eee;-webkit-transform:scale(.5);transform:scale(.5)}.van-hairline--top:after{border-top-width:1px}.van-hairline--left:after{border-left-width:1px}.van-hairline--right:after{border-right-width:1px}.van-hairline--bottom:after{border-bottom-width:1px}.van-hairline--top-bottom:after{border-width:1px 0}.van-hairline--surround:after{border-width:1px}
\ No newline at end of file
diff --git a/utils/dist/common/style/clearfix.wxss b/utils/dist/common/style/clearfix.wxss
new file mode 100644
index 0000000..a0ca838
--- /dev/null
+++ b/utils/dist/common/style/clearfix.wxss
@@ -0,0 +1 @@
+.van-clearfix:after{display:table;clear:both;content:""}
\ No newline at end of file
diff --git a/utils/dist/common/style/ellipsis.wxss b/utils/dist/common/style/ellipsis.wxss
new file mode 100644
index 0000000..1e9dbc9
--- /dev/null
+++ b/utils/dist/common/style/ellipsis.wxss
@@ -0,0 +1 @@
+.van-ellipsis{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.van-multi-ellipsis--l2{-webkit-line-clamp:2}.van-multi-ellipsis--l2,.van-multi-ellipsis--l3{display:-webkit-box;overflow:hidden;text-overflow:ellipsis;-webkit-box-orient:vertical}.van-multi-ellipsis--l3{-webkit-line-clamp:3}
\ No newline at end of file
diff --git a/utils/dist/common/style/hairline.wxss b/utils/dist/common/style/hairline.wxss
new file mode 100644
index 0000000..f64e2f8
--- /dev/null
+++ b/utils/dist/common/style/hairline.wxss
@@ -0,0 +1 @@
+.van-hairline,.van-hairline--bottom,.van-hairline--left,.van-hairline--right,.van-hairline--surround,.van-hairline--top,.van-hairline--top-bottom{position:relative}.van-hairline--bottom:after,.van-hairline--left:after,.van-hairline--right:after,.van-hairline--surround:after,.van-hairline--top-bottom:after,.van-hairline--top:after,.van-hairline:after{position:absolute;box-sizing:border-box;-webkit-transform-origin:center;transform-origin:center;content:" ";pointer-events:none;top:-50%;right:-50%;bottom:-50%;left:-50%;border:0 solid #eee;-webkit-transform:scale(.5);transform:scale(.5)}.van-hairline--top:after{border-top-width:1px}.van-hairline--left:after{border-left-width:1px}.van-hairline--right:after{border-right-width:1px}.van-hairline--bottom:after{border-bottom-width:1px}.van-hairline--top-bottom:after{border-width:1px 0}.van-hairline--surround:after{border-width:1px}
\ No newline at end of file
diff --git a/utils/dist/common/style/mixins/clearfix.wxss b/utils/dist/common/style/mixins/clearfix.wxss
new file mode 100644
index 0000000..e69de29
diff --git a/utils/dist/common/style/mixins/ellipsis.wxss b/utils/dist/common/style/mixins/ellipsis.wxss
new file mode 100644
index 0000000..e69de29
diff --git a/utils/dist/common/style/mixins/hairline.wxss b/utils/dist/common/style/mixins/hairline.wxss
new file mode 100644
index 0000000..e69de29
diff --git a/utils/dist/common/style/theme.wxss b/utils/dist/common/style/theme.wxss
new file mode 100644
index 0000000..e69de29
diff --git a/utils/dist/common/style/var.wxss b/utils/dist/common/style/var.wxss
new file mode 100644
index 0000000..e69de29
diff --git a/utils/dist/common/utils.d.ts b/utils/dist/common/utils.d.ts
new file mode 100644
index 0000000..9fad27d
--- /dev/null
+++ b/utils/dist/common/utils.d.ts
@@ -0,0 +1,8 @@
+///
+export declare function isDef(value: any): boolean;
+export declare function isObj(x: any): boolean;
+export declare function isNumber(value: any): boolean;
+export declare function range(num: number, min: number, max: number): number;
+export declare function nextTick(fn: Function): void;
+export declare function getSystemInfoSync(): WechatMiniprogram.GetSystemInfoSuccessCallbackResult;
+export declare function addUnit(value?: string | number): string | undefined;
diff --git a/utils/dist/common/utils.js b/utils/dist/common/utils.js
new file mode 100644
index 0000000..cc0f8f1
--- /dev/null
+++ b/utils/dist/common/utils.js
@@ -0,0 +1,32 @@
+export function isDef(value) {
+ return value !== undefined && value !== null;
+}
+export function isObj(x) {
+ const type = typeof x;
+ return x !== null && (type === 'object' || type === 'function');
+}
+export function isNumber(value) {
+ return /^\d+(\.\d+)?$/.test(value);
+}
+export function range(num, min, max) {
+ return Math.min(Math.max(num, min), max);
+}
+export function nextTick(fn) {
+ setTimeout(() => {
+ fn();
+ }, 1000 / 30);
+}
+let systemInfo = null;
+export function getSystemInfoSync() {
+ if (systemInfo == null) {
+ systemInfo = wx.getSystemInfoSync();
+ }
+ return systemInfo;
+}
+export function addUnit(value) {
+ if (!isDef(value)) {
+ return undefined;
+ }
+ value = String(value);
+ return isNumber(value) ? `${value}px` : value;
+}
diff --git a/utils/dist/count-down/index.d.ts b/utils/dist/count-down/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/count-down/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/count-down/index.js b/utils/dist/count-down/index.js
new file mode 100644
index 0000000..54a01fe
--- /dev/null
+++ b/utils/dist/count-down/index.js
@@ -0,0 +1,100 @@
+import { VantComponent } from '../common/component';
+import { isSameSecond, parseFormat, parseTimeData } from './utils';
+function simpleTick(fn) {
+ return setTimeout(fn, 30);
+}
+VantComponent({
+ props: {
+ useSlot: Boolean,
+ millisecond: Boolean,
+ time: {
+ type: Number,
+ observer: 'reset'
+ },
+ format: {
+ type: String,
+ value: 'HH:mm:ss'
+ },
+ autoStart: {
+ type: Boolean,
+ value: true
+ }
+ },
+ data: {
+ timeData: parseTimeData(0),
+ formattedTime: '0'
+ },
+ destroyed() {
+ clearTimeout(this.tid);
+ this.tid = null;
+ },
+ methods: {
+ // 开始
+ start() {
+ if (this.counting) {
+ return;
+ }
+ this.counting = true;
+ this.endTime = Date.now() + this.remain;
+ this.tick();
+ },
+ // 暂停
+ pause() {
+ this.counting = false;
+ clearTimeout(this.tid);
+ },
+ // 重置
+ reset() {
+ this.pause();
+ this.remain = this.data.time;
+ this.setRemain(this.remain);
+ if (this.data.autoStart) {
+ this.start();
+ }
+ },
+ tick() {
+ if (this.data.millisecond) {
+ this.microTick();
+ }
+ else {
+ this.macroTick();
+ }
+ },
+ microTick() {
+ this.tid = simpleTick(() => {
+ this.setRemain(this.getRemain());
+ if (this.remain !== 0) {
+ this.microTick();
+ }
+ });
+ },
+ macroTick() {
+ this.tid = simpleTick(() => {
+ const remain = this.getRemain();
+ if (!isSameSecond(remain, this.remain) || remain === 0) {
+ this.setRemain(remain);
+ }
+ if (this.remain !== 0) {
+ this.macroTick();
+ }
+ });
+ },
+ getRemain() {
+ return Math.max(this.endTime - Date.now(), 0);
+ },
+ setRemain(remain) {
+ this.remain = remain;
+ const timeData = parseTimeData(remain);
+ if (this.data.useSlot) {
+ this.$emit('change', timeData);
+ }
+ this.setData({
+ formattedTime: parseFormat(this.data.format, timeData)
+ });
+ if (remain === 0) {
+ this.pause();
+ this.$emit('finish');
+ }
+ }
+ }
+});
diff --git a/utils/dist/count-down/index.json b/utils/dist/count-down/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/utils/dist/count-down/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/utils/dist/count-down/index.wxml b/utils/dist/count-down/index.wxml
new file mode 100644
index 0000000..e206e16
--- /dev/null
+++ b/utils/dist/count-down/index.wxml
@@ -0,0 +1,4 @@
+
+
+ {{ formattedTime }}
+
diff --git a/utils/dist/count-down/index.wxss b/utils/dist/count-down/index.wxss
new file mode 100644
index 0000000..bc33f5d
--- /dev/null
+++ b/utils/dist/count-down/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-count-down{color:#323233;color:var(--count-down-text-color,#323233);font-size:14px;font-size:var(--count-down-font-size,14px);line-height:20px;line-height:var(--count-down-line-height,20px)}
\ No newline at end of file
diff --git a/utils/dist/count-down/utils.d.ts b/utils/dist/count-down/utils.d.ts
new file mode 100644
index 0000000..e4a58dd
--- /dev/null
+++ b/utils/dist/count-down/utils.d.ts
@@ -0,0 +1,10 @@
+export declare type TimeData = {
+ days: number;
+ hours: number;
+ minutes: number;
+ seconds: number;
+ milliseconds: number;
+};
+export declare function parseTimeData(time: number): TimeData;
+export declare function parseFormat(format: string, timeData: TimeData): string;
+export declare function isSameSecond(time1: number, time2: number): boolean;
diff --git a/utils/dist/count-down/utils.js b/utils/dist/count-down/utils.js
new file mode 100644
index 0000000..3237988
--- /dev/null
+++ b/utils/dist/count-down/utils.js
@@ -0,0 +1,57 @@
+function padZero(num, targetLength = 2) {
+ let str = num + '';
+ while (str.length < targetLength) {
+ str = '0' + str;
+ }
+ return str;
+}
+const SECOND = 1000;
+const MINUTE = 60 * SECOND;
+const HOUR = 60 * MINUTE;
+const DAY = 24 * HOUR;
+export function parseTimeData(time) {
+ const days = Math.floor(time / DAY);
+ const hours = Math.floor((time % DAY) / HOUR);
+ const minutes = Math.floor((time % HOUR) / MINUTE);
+ const seconds = Math.floor((time % MINUTE) / SECOND);
+ const milliseconds = Math.floor(time % SECOND);
+ return {
+ days,
+ hours,
+ minutes,
+ seconds,
+ milliseconds
+ };
+}
+export function parseFormat(format, timeData) {
+ const { days } = timeData;
+ let { hours, minutes, seconds, milliseconds } = timeData;
+ if (format.indexOf('DD') === -1) {
+ hours += days * 24;
+ }
+ else {
+ format = format.replace('DD', padZero(days));
+ }
+ if (format.indexOf('HH') === -1) {
+ minutes += hours * 60;
+ }
+ else {
+ format = format.replace('HH', padZero(hours));
+ }
+ if (format.indexOf('mm') === -1) {
+ seconds += minutes * 60;
+ }
+ else {
+ format = format.replace('mm', padZero(minutes));
+ }
+ if (format.indexOf('ss') === -1) {
+ milliseconds += seconds * 1000;
+ }
+ else {
+ format = format.replace('ss', padZero(seconds));
+ }
+ return format.replace('SSS', padZero(milliseconds, 3));
+}
+export function isSameSecond(time1, time2) {
+ return Math.floor(time1 / 1000) === Math.floor(time2 / 1000);
+}
diff --git a/utils/dist/datetime-picker/index.d.ts b/utils/dist/datetime-picker/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/datetime-picker/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/datetime-picker/index.js b/utils/dist/datetime-picker/index.js
new file mode 100644
index 0000000..d350d11
--- /dev/null
+++ b/utils/dist/datetime-picker/index.js
@@ -0,0 +1,297 @@
+import { VantComponent } from '../common/component';
+import { isDef } from '../common/utils';
+import { pickerProps } from '../picker/shared';
+const currentYear = new Date().getFullYear();
+function isValidDate(date) {
+ return isDef(date) && !isNaN(new Date(date).getTime());
+}
+function range(num, min, max) {
+ return Math.min(Math.max(num, min), max);
+}
+function padZero(val) {
+ return `00${val}`.slice(-2);
+}
+function times(n, iteratee) {
+ let index = -1;
+ const result = Array(n < 0 ? 0 : n);
+ while (++index < n) {
+ result[index] = iteratee(index);
+ }
+ return result;
+}
+function getTrueValue(formattedValue) {
+ if (!formattedValue)
+ return;
+ while (isNaN(parseInt(formattedValue, 10))) {
+ formattedValue = formattedValue.slice(1);
+ }
+ return parseInt(formattedValue, 10);
+}
+function getMonthEndDay(year, month) {
+ return 32 - new Date(year, month - 1, 32).getDate();
+}
+const defaultFormatter = (_, value) => value;
+VantComponent({
+ classes: ['active-class', 'toolbar-class', 'column-class'],
+ props: Object.assign(Object.assign({}, pickerProps), { value: null, filter: null, type: {
+ type: String,
+ value: 'datetime'
+ }, showToolbar: {
+ type: Boolean,
+ value: true
+ }, formatter: {
+ type: null,
+ value: defaultFormatter
+ }, minDate: {
+ type: Number,
+ value: new Date(currentYear - 10, 0, 1).getTime()
+ }, maxDate: {
+ type: Number,
+ value: new Date(currentYear + 10, 11, 31).getTime()
+ }, minHour: {
+ type: Number,
+ value: 0
+ }, maxHour: {
+ type: Number,
+ value: 23
+ }, minMinute: {
+ type: Number,
+ value: 0
+ }, maxMinute: {
+ type: Number,
+ value: 59
+ } }),
+ data: {
+ innerValue: Date.now(),
+ columns: []
+ },
+ watch: {
+ value: 'updateValue',
+ type: 'updateValue',
+ minDate: 'updateValue',
+ maxDate: 'updateValue',
+ minHour: 'updateValue',
+ maxHour: 'updateValue',
+ minMinute: 'updateValue',
+ maxMinute: 'updateValue'
+ },
+ methods: {
+ updateValue() {
+ const { data } = this;
+ const val = this.correctValue(this.data.value);
+ const isEqual = val === data.innerValue;
+ if (!isEqual) {
+ this.updateColumnValue(val).then(() => {
+ this.$emit('input', val);
+ });
+ }
+ else {
+ this.updateColumns();
+ }
+ },
+ getPicker() {
+ if (this.picker == null) {
+ this.picker = this.selectComponent('.van-datetime-picker');
+ const { picker } = this;
+ const { setColumnValues } = picker;
+ picker.setColumnValues = (...args) => setColumnValues.apply(picker, [...args, false]);
+ }
+ return this.picker;
+ },
+ updateColumns() {
+ const { formatter = defaultFormatter } = this.data;
+ const results = this.getOriginColumns().map(column => ({
+ values: column.values.map(value => formatter(column.type, value))
+ }));
+ return this.set({ columns: results });
+ },
+ getOriginColumns() {
+ const { filter } = this.data;
+ const results = this.getRanges().map(({ type, range }) => {
+ let values = times(range[1] - range[0] + 1, index => {
+ let value = range[0] + index;
+ value = type === 'year' ? `${value}` : padZero(value);
+ return value;
+ });
+ if (filter) {
+ values = filter(type, values);
+ }
+ return { type, values };
+ });
+ return results;
+ },
+ getRanges() {
+ const { data } = this;
+ if (data.type === 'time') {
+ return [
+ {
+ type: 'hour',
+ range: [data.minHour, data.maxHour]
+ },
+ {
+ type: 'minute',
+ range: [data.minMinute, data.maxMinute]
+ }
+ ];
+ }
+ const { maxYear, maxDate, maxMonth, maxHour, maxMinute } = this.getBoundary('max', data.innerValue);
+ const { minYear, minDate, minMonth, minHour, minMinute } = this.getBoundary('min', data.innerValue);
+ const result = [
+ {
+ type: 'year',
+ range: [minYear, maxYear]
+ },
+ {
+ type: 'month',
+ range: [minMonth, maxMonth]
+ },
+ {
+ type: 'day',
+ range: [minDate, maxDate]
+ },
+ {
+ type: 'hour',
+ range: [minHour, maxHour]
+ },
+ {
+ type: 'minute',
+ range: [minMinute, maxMinute]
+ }
+ ];
+ if (data.type === 'date')
+ result.splice(3, 2);
+ if (data.type === 'year-month')
+ result.splice(2, 3);
+ return result;
+ },
+ correctValue(value) {
+ const { data } = this;
+ // validate value
+ const isDateType = data.type !== 'time';
+ if (isDateType && !isValidDate(value)) {
+ value = data.minDate;
+ }
+ else if (!isDateType && !value) {
+ const { minHour } = data;
+ value = `${padZero(minHour)}:00`;
+ }
+ // time type
+ if (!isDateType) {
+ let [hour, minute] = value.split(':');
+ hour = padZero(range(hour, data.minHour, data.maxHour));
+ minute = padZero(range(minute, data.minMinute, data.maxMinute));
+ return `${hour}:${minute}`;
+ }
+ // date type
+ value = Math.max(value, data.minDate);
+ value = Math.min(value, data.maxDate);
+ return value;
+ },
+ getBoundary(type, innerValue) {
+ const value = new Date(innerValue);
+ const boundary = new Date(this.data[`${type}Date`]);
+ const year = boundary.getFullYear();
+ let month = 1;
+ let date = 1;
+ let hour = 0;
+ let minute = 0;
+ if (type === 'max') {
+ month = 12;
+ date = getMonthEndDay(value.getFullYear(), value.getMonth() + 1);
+ hour = 23;
+ minute = 59;
+ }
+ if (value.getFullYear() === year) {
+ month = boundary.getMonth() + 1;
+ if (value.getMonth() + 1 === month) {
+ date = boundary.getDate();
+ if (value.getDate() === date) {
+ hour = boundary.getHours();
+ if (value.getHours() === hour) {
+ minute = boundary.getMinutes();
+ }
+ }
+ }
+ }
+ return {
+ [`${type}Year`]: year,
+ [`${type}Month`]: month,
+ [`${type}Date`]: date,
+ [`${type}Hour`]: hour,
+ [`${type}Minute`]: minute
+ };
+ },
+ onCancel() {
+ this.$emit('cancel');
+ },
+ onConfirm() {
+ this.$emit('confirm', this.data.innerValue);
+ },
+ onChange() {
+ const { data } = this;
+ let value;
+ const picker = this.getPicker();
+ if (data.type === 'time') {
+ const indexes = picker.getIndexes();
+ value = `${+data.columns[0].values[indexes[0]]}:${+data.columns[1].values[indexes[1]]}`;
+ }
+ else {
+ const values = picker.getValues();
+ const year = getTrueValue(values[0]);
+ const month = getTrueValue(values[1]);
+ const maxDate = getMonthEndDay(year, month);
+ let date = getTrueValue(values[2]);
+ if (data.type === 'year-month') {
+ date = 1;
+ }
+ date = date > maxDate ? maxDate : date;
+ let hour = 0;
+ let minute = 0;
+ if (data.type === 'datetime') {
+ hour = getTrueValue(values[3]);
+ minute = getTrueValue(values[4]);
+ }
+ value = new Date(year, month - 1, date, hour, minute);
+ }
+ value = this.correctValue(value);
+ this.updateColumnValue(value).then(() => {
+ this.$emit('input', value);
+ this.$emit('change', picker);
+ });
+ },
+ updateColumnValue(value) {
+ let values = [];
+ const { type, formatter = defaultFormatter } = this.data;
+ const picker = this.getPicker();
+ if (type === 'time') {
+ const pair = value.split(':');
+ values = [
+ formatter('hour', pair[0]),
+ formatter('minute', pair[1])
+ ];
+ }
+ else {
+ const date = new Date(value);
+ values = [
+ formatter('year', `${date.getFullYear()}`),
+ formatter('month', padZero(date.getMonth() + 1))
+ ];
+ if (type === 'date') {
+ values.push(formatter('day', padZero(date.getDate())));
+ }
+ if (type === 'datetime') {
+ values.push(formatter('day', padZero(date.getDate())), formatter('hour', padZero(date.getHours())), formatter('minute', padZero(date.getMinutes())));
+ }
+ }
+ return this.set({ innerValue: value })
+ .then(() => this.updateColumns())
+ .then(() => picker.setValues(values));
+ }
+ },
+ created() {
+ const innerValue = this.correctValue(this.data.value);
+ this.updateColumnValue(innerValue).then(() => {
+ this.$emit('input', innerValue);
+ });
+ }
+});
diff --git a/utils/dist/datetime-picker/index.json b/utils/dist/datetime-picker/index.json
new file mode 100644
index 0000000..a778e91
--- /dev/null
+++ b/utils/dist/datetime-picker/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-picker": "../picker/index"
+ }
+}
diff --git a/utils/dist/datetime-picker/index.wxml b/utils/dist/datetime-picker/index.wxml
new file mode 100644
index 0000000..ade2202
--- /dev/null
+++ b/utils/dist/datetime-picker/index.wxml
@@ -0,0 +1,16 @@
+
diff --git a/utils/dist/datetime-picker/index.wxss b/utils/dist/datetime-picker/index.wxss
new file mode 100644
index 0000000..99694d6
--- /dev/null
+++ b/utils/dist/datetime-picker/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';
\ No newline at end of file
diff --git a/utils/dist/definitions/index.d.ts b/utils/dist/definitions/index.d.ts
new file mode 100644
index 0000000..3a8fc16
--- /dev/null
+++ b/utils/dist/definitions/index.d.ts
@@ -0,0 +1,28 @@
+///
+import { Weapp } from './weapp';
+declare type RecordToAny = {
+ [K in keyof T]: any;
+};
+export declare type CombinedComponentInstance = Methods & WechatMiniprogram.Component.TrivialInstance & Weapp.FormField & {
+ data: Data & RecordToAny;
+};
+export interface VantComponentOptions {
+ data?: Data;
+ field?: boolean;
+ classes?: string[];
+ mixins?: string[];
+ props?: Props & Weapp.PropertyOption;
+ watch?: Weapp.WatchOption;
+ relation?: Weapp.RelationOption & {
+ name: string;
+ };
+ relations?: {
+ [componentName: string]: Weapp.RelationOption;
+ };
+ methods?: Methods & Weapp.MethodOption;
+ beforeCreate?: (this: Instance) => void;
+ created?: (this: Instance) => void;
+ mounted?: (this: Instance) => void;
+ destroyed?: (this: Instance) => void;
+}
+export {};
diff --git a/utils/dist/definitions/index.js b/utils/dist/definitions/index.js
new file mode 100644
index 0000000..e69de29
diff --git a/utils/dist/definitions/weapp.d.ts b/utils/dist/definitions/weapp.d.ts
new file mode 100644
index 0000000..5fb0060
--- /dev/null
+++ b/utils/dist/definitions/weapp.d.ts
@@ -0,0 +1,112 @@
+///
+export declare namespace Weapp {
+ export interface FormField {
+ data: {
+ name: string;
+ value: any;
+ };
+ }
+ interface Target {
+ id: string;
+ tagName: string;
+ dataset: {
+ [key: string]: any;
+ };
+ }
+ export interface Event {
+ /**
+ * 代表事件的类型。
+ */
+ type: string;
+ /**
+ * 页面打开到触发事件所经过的毫秒数。
+ */
+ timeStamp: number;
+ /**
+ * 触发事件的源组件。
+ */
+ target: Target;
+ /**
+ * 事件绑定的当前组件。
+ */
+ currentTarget: Target;
+ /**
+ * 额外的信息
+ */
+ detail: any;
+ }
+ interface Touch {
+ /**
+ * 触摸点的标识符
+ */
+ identifier: number;
+ /**
+ * 距离文档左上角的距离,文档的左上角为原点 ,横向为X轴,纵向为Y轴
+ */
+ pageX: number;
+ /**
+ * 距离文档左上角的距离,文档的左上角为原点 ,横向为X轴,纵向为Y轴
+ */
+ pageY: number;
+ /**
+ * 距离页面可显示区域(屏幕除去导航条)左上角距离,横向为X轴,纵向为Y轴
+ */
+ clientX: number;
+ /**
+ * 距离页面可显示区域(屏幕除去导航条)左上角距离,横向为X轴,纵向为Y轴
+ */
+ clientY: number;
+ }
+ export interface TouchEvent extends Event {
+ touches: Array;
+ changedTouches: Array;
+ }
+ /**
+ * relation定义,miniprogram-api-typings缺少this定义
+ */
+ export interface RelationOption {
+ /** 目标组件的相对关系 */
+ type: 'parent' | 'child' | 'ancestor' | 'descendant';
+ /** 关系生命周期函数,当关系被建立在页面节点树中时触发,触发时机在组件attached生命周期之后 */
+ linked?(this: Instance, target: WechatMiniprogram.Component.TrivialInstance): void;
+ /** 关系生命周期函数,当关系在页面节点树中发生改变时触发,触发时机在组件moved生命周期之后 */
+ linkChanged?(this: Instance, target: WechatMiniprogram.Component.TrivialInstance): void;
+ /** 关系生命周期函数,当关系脱离页面节点树时触发,触发时机在组件detached生命周期之后 */
+ unlinked?(this: Instance, target: WechatMiniprogram.Component.TrivialInstance): void;
+ /** 如果这一项被设置,则它表示关联的目标节点所应具有的behavior,所有拥有这一behavior的组件节点都会被关联 */
+ target?: string;
+ }
+ /**
+ * obverser定义,miniprogram-api-typings缺少this定义
+ */
+ type Observer = (this: Instance, newVal: T, oldVal: T, changedPath: Array) => void;
+ /**
+ * watch定义
+ */
+ export interface WatchOption {
+ [name: string]: string | Observer;
+ }
+ /**
+ * methods定义,miniprogram-api-typings缺少this定义
+ */
+ export interface MethodOption {
+ [name: string]: (this: Instance, ...args: any[]) => any;
+ }
+ export interface ComputedOption {
+ [name: string]: (this: Instance) => any;
+ }
+ type PropertyType = StringConstructor | NumberConstructor | BooleanConstructor | ArrayConstructor | ObjectConstructor | FunctionConstructor | null;
+ export interface PropertyOption {
+ [name: string]: PropertyType | PropertyType[] | {
+ /** 属性类型 */
+ type: PropertyType | PropertyType[];
+ /** 属性初始值 */
+ value?: any;
+ /** 属性值被更改时的响应函数 */
+ observer?: string | Observer;
+ /** 属性的类型(可以指定多个) */
+ optionalTypes?: PropertyType[];
+ };
+ }
+ export {};
+}
diff --git a/utils/dist/definitions/weapp.js b/utils/dist/definitions/weapp.js
new file mode 100644
index 0000000..e69de29
diff --git a/utils/dist/dialog/dialog.d.ts b/utils/dist/dialog/dialog.d.ts
new file mode 100644
index 0000000..66769a6
--- /dev/null
+++ b/utils/dist/dialog/dialog.d.ts
@@ -0,0 +1,47 @@
+///
+declare type DialogAction = 'confirm' | 'cancel';
+declare type DialogOptions = {
+ lang?: string;
+ show?: boolean;
+ title?: string;
+ width?: string | number;
+ zIndex?: number;
+ context?: WechatMiniprogram.Page.TrivialInstance | WechatMiniprogram.Component.TrivialInstance;
+ message?: string;
+ overlay?: boolean;
+ selector?: string;
+ ariaLabel?: string;
+ className?: string;
+ customStyle?: string;
+ transition?: string;
+ asyncClose?: boolean;
+ businessId?: number;
+ sessionFrom?: string;
+ overlayStyle?: string;
+ appParameter?: string;
+ messageAlign?: string;
+ sendMessageImg?: string;
+ showMessageCard?: boolean;
+ sendMessagePath?: string;
+ sendMessageTitle?: string;
+ confirmButtonText?: string;
+ cancelButtonText?: string;
+ showConfirmButton?: boolean;
+ showCancelButton?: boolean;
+ closeOnClickOverlay?: boolean;
+ confirmButtonOpenType?: string;
+};
+interface Dialog {
+ (options: DialogOptions): Promise;
+ alert?: (options: DialogOptions) => Promise;
+ confirm?: (options: DialogOptions) => Promise;
+ close?: () => void;
+ stopLoading?: () => void;
+ install?: () => void;
+ setDefaultOptions?: (options: DialogOptions) => void;
+ resetDefaultOptions?: () => void;
+ defaultOptions?: DialogOptions;
+ currentOptions?: DialogOptions;
+}
+declare const Dialog: Dialog;
+export default Dialog;
diff --git a/utils/dist/dialog/dialog.js b/utils/dist/dialog/dialog.js
new file mode 100644
index 0000000..4c4f7e4
--- /dev/null
+++ b/utils/dist/dialog/dialog.js
@@ -0,0 +1,63 @@
+let queue = [];
+function getContext() {
+ const pages = getCurrentPages();
+ return pages[pages.length - 1];
+}
+const Dialog = options => {
+ options = Object.assign(Object.assign({}, Dialog.currentOptions), options);
+ return new Promise((resolve, reject) => {
+ const context = options.context || getContext();
+ const dialog = context.selectComponent(options.selector);
+ delete options.context;
+ delete options.selector;
+ if (dialog) {
+ dialog.setData(Object.assign({ onCancel: reject, onConfirm: resolve }, options));
+ queue.push(dialog);
+ }
+ else {
+ console.warn('未找到 van-dialog 节点,请确认 selector 及 context 是否正确');
+ }
+ });
+};
+Dialog.defaultOptions = {
+ show: true,
+ title: '',
+ width: null,
+ message: '',
+ zIndex: 100,
+ overlay: true,
+ selector: '#van-dialog',
+ className: '',
+ asyncClose: false,
+ transition: 'scale',
+ customStyle: '',
+ messageAlign: '',
+ overlayStyle: '',
+ confirmButtonText: '确认',
+ cancelButtonText: '取消',
+ showConfirmButton: true,
+ showCancelButton: false,
+ closeOnClickOverlay: false,
+ confirmButtonOpenType: ''
+};
+Dialog.alert = Dialog;
+Dialog.confirm = options => Dialog(Object.assign({ showCancelButton: true }, options));
+Dialog.close = () => {
+ queue.forEach(dialog => {
+ dialog.close();
+ });
+ queue = [];
+};
+Dialog.stopLoading = () => {
+ queue.forEach(dialog => {
+ dialog.stopLoading();
+ });
+};
+Dialog.setDefaultOptions = options => {
+ Object.assign(Dialog.currentOptions, options);
+};
+Dialog.resetDefaultOptions = () => {
+ Dialog.currentOptions = Object.assign({}, Dialog.defaultOptions);
+};
+Dialog.resetDefaultOptions();
+export default Dialog;
diff --git a/utils/dist/dialog/index.d.ts b/utils/dist/dialog/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/dialog/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/dialog/index.js b/utils/dist/dialog/index.js
new file mode 100644
index 0000000..85d6c3c
--- /dev/null
+++ b/utils/dist/dialog/index.js
@@ -0,0 +1,119 @@
+import { VantComponent } from '../common/component';
+import { button } from '../mixins/button';
+import { openType } from '../mixins/open-type';
+import { addUnit } from '../common/utils';
+import { GRAY, BLUE } from '../common/color';
+VantComponent({
+ mixins: [button, openType],
+ props: {
+ show: Boolean,
+ title: String,
+ message: String,
+ useSlot: Boolean,
+ className: String,
+ customStyle: String,
+ asyncClose: Boolean,
+ messageAlign: String,
+ overlayStyle: String,
+ useTitleSlot: Boolean,
+ showCancelButton: Boolean,
+ closeOnClickOverlay: Boolean,
+ confirmButtonOpenType: String,
+ width: {
+ type: null,
+ observer: 'setWidthWithUnit'
+ },
+ zIndex: {
+ type: Number,
+ value: 2000
+ },
+ confirmButtonText: {
+ type: String,
+ value: '确认'
+ },
+ cancelButtonText: {
+ type: String,
+ value: '取消'
+ },
+ confirmButtonColor: {
+ type: String,
+ value: BLUE
+ },
+ cancelButtonColor: {
+ type: String,
+ value: GRAY
+ },
+ showConfirmButton: {
+ type: Boolean,
+ value: true
+ },
+ overlay: {
+ type: Boolean,
+ value: true
+ },
+ transition: {
+ type: String,
+ value: 'scale'
+ }
+ },
+ data: {
+ loading: {
+ confirm: false,
+ cancel: false
+ }
+ },
+ watch: {
+ show(show) {
+ !show && this.stopLoading();
+ }
+ },
+ methods: {
+ onConfirm() {
+ this.handleAction('confirm');
+ },
+ onCancel() {
+ this.handleAction('cancel');
+ },
+ onClickOverlay() {
+ this.onClose('overlay');
+ },
+ handleAction(action) {
+ if (this.data.asyncClose) {
+ this.setData({
+ [`loading.${action}`]: true
+ });
+ }
+ this.onClose(action);
+ },
+ close() {
+ this.setData({
+ show: false
+ });
+ },
+ stopLoading() {
+ this.setData({
+ loading: {
+ confirm: false,
+ cancel: false
+ }
+ });
+ },
+ onClose(action) {
+ if (!this.data.asyncClose) {
+ this.close();
+ }
+ this.$emit('close', action);
+ // 把 dialog 实例传递出去,可以通过 stopLoading() 在外部关闭按钮的 loading
+ this.$emit(action, { dialog: this });
+ const callback = this.data[action === 'confirm' ? 'onConfirm' : 'onCancel'];
+ if (callback) {
+ callback(this);
+ }
+ },
+ setWidthWithUnit(val) {
+ this.setData({
+ widthWithUnit: addUnit(val)
+ });
+ }
+ }
+});
diff --git a/utils/dist/dialog/index.json b/utils/dist/dialog/index.json
new file mode 100644
index 0000000..e2ee09a
--- /dev/null
+++ b/utils/dist/dialog/index.json
@@ -0,0 +1,7 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-popup": "../popup/index",
+ "van-button": "../button/index"
+ }
+}
diff --git a/utils/dist/dialog/index.wxml b/utils/dist/dialog/index.wxml
new file mode 100644
index 0000000..854e8a1
--- /dev/null
+++ b/utils/dist/dialog/index.wxml
@@ -0,0 +1,69 @@
+
+
+
+
+
+ {{ message }}
+
+
+
+
diff --git a/utils/dist/dialog/index.wxss b/utils/dist/dialog/index.wxss
new file mode 100644
index 0000000..e5f6cbb
--- /dev/null
+++ b/utils/dist/dialog/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-dialog{top:45%!important;overflow:hidden;width:320px;width:var(--dialog-width,320px);font-size:16px;font-size:var(--dialog-font-size,16px);border-radius:16px;border-radius:var(--dialog-border-radius,16px);background-color:#fff;background-color:var(--dialog-background-color,#fff)}@media (max-width:321px){.van-dialog{width:90%;width:var(--dialog-small-screen-width,90%)}}.van-dialog__header{text-align:center;padding-top:24px;padding-top:var(--dialog-header-padding-top,24px);font-weight:500;font-weight:var(--dialog-header-font-weight,500);line-height:24px;line-height:var(--dialog-header-line-height,24px)}.van-dialog__header--isolated{padding:24px 0;padding:var(--dialog-header-isolated-padding,24px 0)}.van-dialog__message{overflow-y:auto;text-align:center;-webkit-overflow-scrolling:touch;font-size:14px;font-size:var(--dialog-message-font-size,14px);line-height:20px;line-height:var(--dialog-message-line-height,20px);max-height:60vh;max-height:var(--dialog-message-max-height,60vh);padding:24px;padding:var(--dialog-message-padding,24px)}.van-dialog__message-text{word-wrap:break-word}.van-dialog__message--has-title{padding-top:12px;padding-top:var(--dialog-has-title-message-padding-top,12px);color:#646566;color:var(--dialog-has-title-message-text-color,#646566)}.van-dialog__message--left{text-align:left}.van-dialog__message--right{text-align:right}.van-dialog__footer{display:-webkit-flex;display:flex}.van-dialog__button{-webkit-flex:1;flex:1}.van-dialog__cancel,.van-dialog__confirm{border:0!important}.van-dialog-bounce-enter{-webkit-transform:translate3d(-50%,-50%,0) scale(.7);transform:translate3d(-50%,-50%,0) scale(.7);opacity:0}.van-dialog-bounce-leave-active{-webkit-transform:translate3d(-50%,-50%,0) scale(.9);transform:translate3d(-50%,-50%,0) scale(.9);opacity:0}
\ No newline at end of file
diff --git a/utils/dist/divider/index.d.ts b/utils/dist/divider/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/divider/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/divider/index.js b/utils/dist/divider/index.js
new file mode 100644
index 0000000..73f833d
--- /dev/null
+++ b/utils/dist/divider/index.js
@@ -0,0 +1,33 @@
+import { VantComponent } from '../common/component';
+VantComponent({
+ props: {
+ dashed: {
+ type: Boolean,
+ value: false
+ },
+ hairline: {
+ type: Boolean,
+ value: false
+ },
+ contentPosition: {
+ type: String,
+ value: ''
+ },
+ fontSize: {
+ type: Number,
+ value: ''
+ },
+ borderColor: {
+ type: String,
+ value: ''
+ },
+ textColor: {
+ type: String,
+ value: ''
+ },
+ customStyle: {
+ type: String,
+ value: ''
+ }
+ }
+});
diff --git a/utils/dist/divider/index.json b/utils/dist/divider/index.json
new file mode 100644
index 0000000..e8cfaaf
--- /dev/null
+++ b/utils/dist/divider/index.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/utils/dist/divider/index.wxml b/utils/dist/divider/index.wxml
new file mode 100644
index 0000000..412e73f
--- /dev/null
+++ b/utils/dist/divider/index.wxml
@@ -0,0 +1,8 @@
+
+
+
+
+
diff --git a/utils/dist/divider/index.wxss b/utils/dist/divider/index.wxss
new file mode 100644
index 0000000..c055e3a
--- /dev/null
+++ b/utils/dist/divider/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-divider{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;margin:16px 0;margin:var(--divider-margin,16px 0);color:#969799;color:var(--divider-text-color,#969799);font-size:14px;font-size:var(--divider-font-size,14px);line-height:24px;line-height:var(--divider-line-height,24px);border:0 solid #ebedf0;border-color:var(--divider-border-color,#ebedf0)}.van-divider:after,.van-divider:before{display:block;-webkit-flex:1;flex:1;box-sizing:border-box;height:1px;border-color:inherit;border-style:inherit;border-width:1px 0 0}.van-divider:before{content:""}.van-divider--hairline:after,.van-divider--hairline:before{-webkit-transform:scaleY(.5);transform:scaleY(.5)}.van-divider--dashed{border-style:dashed}.van-divider--center:before,.van-divider--left:before,.van-divider--right:before{margin-right:16px;margin-right:var(--divider-content-padding,16px)}.van-divider--center:after,.van-divider--left:after,.van-divider--right:after{content:"";margin-left:16px;margin-left:var(--divider-content-padding,16px)}.van-divider--left:before{max-width:10%;max-width:var(--divider-content-left-width,10%)}.van-divider--right:after{max-width:10%;max-width:var(--divider-content-right-width,10%)}
\ No newline at end of file
diff --git a/utils/dist/dropdown-item/index.d.ts b/utils/dist/dropdown-item/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/dropdown-item/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/dropdown-item/index.js b/utils/dist/dropdown-item/index.js
new file mode 100644
index 0000000..f2b6c48
--- /dev/null
+++ b/utils/dist/dropdown-item/index.js
@@ -0,0 +1,104 @@
+import { VantComponent } from '../common/component';
+VantComponent({
+ field: true,
+ relation: {
+ name: 'dropdown-menu',
+ type: 'ancestor',
+ linked(target) {
+ this.parent = target;
+ this.updateDataFromParent();
+ },
+ unlinked() {
+ this.parent = null;
+ }
+ },
+ props: {
+ value: {
+ type: null,
+ observer: 'rerender'
+ },
+ title: {
+ type: String,
+ observer: 'rerender'
+ },
+ disabled: Boolean,
+ titleClass: {
+ type: String,
+ observer: 'rerender'
+ },
+ options: {
+ type: Array,
+ value: [],
+ observer: 'rerender'
+ }
+ },
+ data: {
+ transition: true,
+ showPopup: false,
+ showWrapper: false,
+ displayTitle: ''
+ },
+ methods: {
+ rerender() {
+ wx.nextTick(() => {
+ this.parent && this.parent.updateItemListData();
+ });
+ },
+ updateDataFromParent() {
+ if (this.parent) {
+ const { overlay, duration, activeColor, closeOnClickOverlay, direction } = this.parent.data;
+ this.setData({
+ overlay,
+ duration,
+ activeColor,
+ closeOnClickOverlay,
+ direction
+ });
+ }
+ },
+ onClickOverlay() {
+ this.toggle();
+ this.$emit('close');
+ },
+ onOptionTap(event) {
+ const { option } = event.currentTarget.dataset;
+ const { value } = option;
+ const shouldEmitChange = this.data.value !== value;
+ this.setData({ showPopup: false, value });
+ setTimeout(() => {
+ this.setData({ showWrapper: false });
+ }, this.data.duration || 0);
+ this.rerender();
+ if (shouldEmitChange) {
+ this.$emit('change', value);
+ }
+ },
+ toggle(show, options = {}) {
+ const { showPopup, duration } = this.data;
+ if (show == null) {
+ show = !showPopup;
+ }
+ if (show === showPopup) {
+ return;
+ }
+ if (!show) {
+ const time = options.immediate ? 0 : duration;
+ this.setData({ transition: !options.immediate, showPopup: show });
+ setTimeout(() => {
+ this.setData({ showWrapper: false });
+ }, time);
+ this.rerender();
+ return;
+ }
+ this.parent.getChildWrapperStyle().then((wrapperStyle = '') => {
+ this.setData({
+ transition: !options.immediate,
+ showPopup: show,
+ wrapperStyle,
+ showWrapper: true
+ });
+ this.rerender();
+ });
+ }
+ }
+});
diff --git a/utils/dist/dropdown-item/index.json b/utils/dist/dropdown-item/index.json
new file mode 100644
index 0000000..88d5409
--- /dev/null
+++ b/utils/dist/dropdown-item/index.json
@@ -0,0 +1,8 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-popup": "../popup/index",
+ "van-cell": "../cell/index",
+ "van-icon": "../icon/index"
+ }
+}
diff --git a/utils/dist/dropdown-item/index.wxml b/utils/dist/dropdown-item/index.wxml
new file mode 100644
index 0000000..07bca8d
--- /dev/null
+++ b/utils/dist/dropdown-item/index.wxml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+ {{ item.text }}
+
+
+
+
+
+
+
diff --git a/utils/dist/dropdown-item/index.wxss b/utils/dist/dropdown-item/index.wxss
new file mode 100644
index 0000000..e06c287
--- /dev/null
+++ b/utils/dist/dropdown-item/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-dropdown-item{position:fixed;right:0;left:0;overflow:hidden}.van-dropdown-item__option{text-align:left}.van-dropdown-item__option--active .van-dropdown-item__icon,.van-dropdown-item__option--active .van-dropdown-item__title{color:#1989fa;color:var(--dropdown-menu-option-active-color,#1989fa)}.van-dropdown-item--up{top:0}.van-dropdown-item--down{bottom:0}.van-dropdown-item__icon{display:block;line-height:inherit}
\ No newline at end of file
diff --git a/utils/dist/dropdown-menu/index.d.ts b/utils/dist/dropdown-menu/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/dropdown-menu/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/dropdown-menu/index.js b/utils/dist/dropdown-menu/index.js
new file mode 100644
index 0000000..889387b
--- /dev/null
+++ b/utils/dist/dropdown-menu/index.js
@@ -0,0 +1,121 @@
+import { VantComponent } from '../common/component';
+import { addUnit } from '../common/utils';
+let ARRAY = [];
+VantComponent({
+ field: true,
+ relation: {
+ name: 'dropdown-item',
+ type: 'descendant',
+ linked(target) {
+ this.children.push(target);
+ this.updateItemListData();
+ },
+ unlinked(target) {
+ this.children = this.children.filter((child) => child !== target);
+ this.updateItemListData();
+ }
+ },
+ props: {
+ activeColor: {
+ type: String,
+ observer: 'updateChildrenData'
+ },
+ overlay: {
+ type: Boolean,
+ value: true,
+ observer: 'updateChildrenData'
+ },
+ zIndex: {
+ type: Number,
+ value: 10
+ },
+ duration: {
+ type: Number,
+ value: 200,
+ observer: 'updateChildrenData'
+ },
+ direction: {
+ type: String,
+ value: 'down',
+ observer: 'updateChildrenData'
+ },
+ closeOnClickOverlay: {
+ type: Boolean,
+ value: true,
+ observer: 'updateChildrenData'
+ },
+ closeOnClickOutside: {
+ type: Boolean,
+ value: true
+ }
+ },
+ data: {
+ itemListData: []
+ },
+ beforeCreate() {
+ const { windowHeight } = wx.getSystemInfoSync();
+ this.windowHeight = windowHeight;
+ this.children = [];
+ ARRAY.push(this);
+ },
+ destroyed() {
+ ARRAY = ARRAY.filter(item => item !== this);
+ },
+ methods: {
+ updateItemListData() {
+ this.setData({
+ itemListData: this.children.map((child) => child.data)
+ });
+ },
+ updateChildrenData() {
+ this.children.forEach((child) => {
+ child.updateDataFromParent();
+ });
+ },
+ toggleItem(active) {
+ this.children.forEach((item, index) => {
+ const { showPopup } = item.data;
+ if (index === active) {
+ item.toggle();
+ }
+ else if (showPopup) {
+ item.toggle(false, { immediate: true });
+ }
+ });
+ },
+ close() {
+ this.children.forEach((child) => {
+ child.toggle(false, { immediate: true });
+ });
+ },
+ getChildWrapperStyle() {
+ const { zIndex, direction } = this.data;
+ return this.getRect('.van-dropdown-menu').then((rect) => {
+ const { top = 0, bottom = 0 } = rect;
+ const offset = direction === 'down' ? bottom : this.windowHeight - top;
+ let wrapperStyle = `z-index: ${zIndex};`;
+ if (direction === 'down') {
+ wrapperStyle += `top: ${addUnit(offset)};`;
+ }
+ else {
+ wrapperStyle += `bottom: ${addUnit(offset)};`;
+ }
+ return wrapperStyle;
+ });
+ },
+ onTitleTap(event) {
+ const { index } = event.currentTarget.dataset;
+ const child = this.children[index];
+ if (!child.data.disabled) {
+ ARRAY.forEach(menuItem => {
+ if (menuItem &&
+ menuItem.data.closeOnClickOutside &&
+ menuItem !== this) {
+ menuItem.close();
+ }
+ });
+ this.toggleItem(index);
+ }
+ }
+ }
+});
diff --git a/utils/dist/dropdown-menu/index.json b/utils/dist/dropdown-menu/index.json
new file mode 100644
index 0000000..32640e0
--- /dev/null
+++ b/utils/dist/dropdown-menu/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
\ No newline at end of file
diff --git a/utils/dist/dropdown-menu/index.wxml b/utils/dist/dropdown-menu/index.wxml
new file mode 100644
index 0000000..037ac3b
--- /dev/null
+++ b/utils/dist/dropdown-menu/index.wxml
@@ -0,0 +1,23 @@
+
+
+
+
diff --git a/utils/dist/dropdown-menu/index.wxs b/utils/dist/dropdown-menu/index.wxs
new file mode 100644
index 0000000..6538854
--- /dev/null
+++ b/utils/dist/dropdown-menu/index.wxs
@@ -0,0 +1,16 @@
+/* eslint-disable */
+function displayTitle(item) {
+ if (item.title) {
+ return item.title;
+ }
+
+ var match = item.options.filter(function(option) {
+ return option.value === item.value;
+ });
+ var displayTitle = match.length ? match[0].text : '';
+ return displayTitle;
+}
+
+module.exports = {
+ displayTitle: displayTitle
+};
diff --git a/utils/dist/dropdown-menu/index.wxss b/utils/dist/dropdown-menu/index.wxss
new file mode 100644
index 0000000..43efd77
--- /dev/null
+++ b/utils/dist/dropdown-menu/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-dropdown-menu{display:-webkit-flex;display:flex;-webkit-user-select:none;user-select:none;height:50px;height:var(--dropdown-menu-height,50px);background-color:#fff;background-color:var(--dropdown-menu-background-color,#fff)}.van-dropdown-menu__item{display:-webkit-flex;display:flex;-webkit-flex:1;flex:1;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;min-width:0}.van-dropdown-menu__item:active{opacity:.7}.van-dropdown-menu__item--disabled:active{opacity:1}.van-dropdown-menu__item--disabled .van-dropdown-menu__title{color:#969799;color:var(--dropdown-menu-title-disabled-text-color,#969799)}.van-dropdown-menu__title{position:relative;box-sizing:border-box;max-width:100%;padding:0 8px;padding:var(--dropdown-menu-title-padding,0 8px);color:#323233;color:var(--dropdown-menu-title-text-color,#323233);font-size:15px;font-size:var(--dropdown-menu-title-font-size,15px);line-height:18px;line-height:var(--dropdown-menu-title-line-height,18px)}.van-dropdown-menu__title:after{position:absolute;top:50%;right:-4px;margin-top:-5px;border-color:transparent transparent currentcolor currentcolor;border-style:solid;border-width:3px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:.8;content:""}.van-dropdown-menu__title--active{color:#1989fa;color:var(--dropdown-menu-title-active-text-color,#1989fa)}.van-dropdown-menu__title--down:after{margin-top:-1px;-webkit-transform:rotate(135deg);transform:rotate(135deg)}
\ No newline at end of file
diff --git a/utils/dist/field/index.d.ts b/utils/dist/field/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/field/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/field/index.js b/utils/dist/field/index.js
new file mode 100644
index 0000000..35dc34c
--- /dev/null
+++ b/utils/dist/field/index.js
@@ -0,0 +1,108 @@
+import { VantComponent } from '../common/component';
+import { getSystemInfoSync } from '../common/utils';
+VantComponent({
+ field: true,
+ classes: ['input-class', 'right-icon-class'],
+ props: {
+ size: String,
+ icon: String,
+ label: String,
+ error: Boolean,
+ fixed: Boolean,
+ focus: Boolean,
+ center: Boolean,
+ isLink: Boolean,
+ leftIcon: String,
+ rightIcon: String,
+ disabled: Boolean,
+ autosize: Boolean,
+ readonly: Boolean,
+ required: Boolean,
+ password: Boolean,
+ iconClass: String,
+ clearable: Boolean,
+ clickable: Boolean,
+ inputAlign: String,
+ placeholder: String,
+ customStyle: String,
+ confirmType: String,
+ confirmHold: Boolean,
+ holdKeyboard: Boolean,
+ errorMessage: String,
+ arrowDirection: String,
+ placeholderStyle: String,
+ errorMessageAlign: String,
+ selectionEnd: {
+ type: Number,
+ value: -1
+ },
+ selectionStart: {
+ type: Number,
+ value: -1
+ },
+ showConfirmBar: {
+ type: Boolean,
+ value: true
+ },
+ adjustPosition: {
+ type: Boolean,
+ value: true
+ },
+ cursorSpacing: {
+ type: Number,
+ value: 50
+ },
+ maxlength: {
+ type: Number,
+ value: -1
+ },
+ type: {
+ type: String,
+ value: 'text'
+ },
+ border: {
+ type: Boolean,
+ value: true
+ },
+ titleWidth: {
+ type: String,
+ value: '90px'
+ }
+ },
+ data: {
+ focused: false,
+ system: getSystemInfoSync().system.split(' ').shift().toLowerCase()
+ },
+ methods: {
+ onInput(event) {
+ const { value = '' } = event.detail || {};
+ this.setData({ value }, () => {
+ this.emitChange(value);
+ });
+ },
+ onFocus(event) {
+ this.setData({ focused: true });
+ this.$emit('focus', event.detail);
+ },
+ onBlur(event) {
+ this.setData({ focused: false });
+ this.$emit('blur', event.detail);
+ },
+ onClickIcon() {
+ this.$emit('click-icon');
+ },
+ onClear() {
+ this.setData({ value: '' }, () => {
+ this.emitChange('');
+ this.$emit('clear', '');
+ });
+ },
+ onConfirm() {
+ this.$emit('confirm', this.data.value);
+ },
+ emitChange(value) {
+ this.$emit('input', value);
+ this.$emit('change', value);
+ }
+ }
+});
diff --git a/utils/dist/field/index.json b/utils/dist/field/index.json
new file mode 100644
index 0000000..8809c46
--- /dev/null
+++ b/utils/dist/field/index.json
@@ -0,0 +1,7 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-cell": "../cell/index",
+ "van-icon": "../icon/index"
+ }
+}
\ No newline at end of file
diff --git a/utils/dist/field/index.wxml b/utils/dist/field/index.wxml
new file mode 100644
index 0000000..6490178
--- /dev/null
+++ b/utils/dist/field/index.wxml
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ errorMessage }}
+
+
diff --git a/utils/dist/field/index.wxss b/utils/dist/field/index.wxss
new file mode 100644
index 0000000..9297f8d
--- /dev/null
+++ b/utils/dist/field/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-field__body{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center}.van-field__body--textarea{line-height:1.2em;min-height:24px;min-height:var(--cell-line-height,24px)}.van-field__body--textarea.van-field__body--ios{margin-top:-4.5px}.van-field__input{position:relative;display:block;box-sizing:border-box;width:100%;margin:0;padding:0;line-height:inherit;text-align:left;background-color:initial;border:0;resize:none;color:#323233;color:var(--field-input-text-color,#323233);height:24px;height:var(--cell-line-height,24px);min-height:24px;min-height:var(--cell-line-height,24px)}.van-field__input--textarea{height:18px;height:var(--field-text-area-min-height,18px);min-height:18px;min-height:var(--field-text-area-min-height,18px)}.van-field__input--error{color:#ee0a24;color:var(--field-input-error-text-color,#ee0a24)}.van-field__input--disabled{background-color:initial;opacity:1;color:#969799;color:var(--field-input-disabled-text-color,#969799)}.van-field__input--center{text-align:center}.van-field__input--right{text-align:right}.van-field__placeholder{position:absolute;top:0;right:0;left:0;pointer-events:none;color:#969799;color:var(--field-placeholder-text-color,#969799)}.van-field__placeholder--error{color:#ee0a24;color:var(--field-error-message-color,#ee0a24)}.van-field__icon-root{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;min-height:24px;min-height:var(--cell-line-height,24px)}.van-field__clear-root,.van-field__icon-container{line-height:inherit;vertical-align:middle;padding:0 8px;padding:0 var(--padding-xs,8px);margin-right:-8px;margin-right:-var(--padding-xs,8px)}.van-field__button,.van-field__clear-root,.van-field__icon-container{-webkit-flex-shrink:0;flex-shrink:0}.van-field__clear-root{color:#c8c9cc;color:var(--field-clear-icon-color,#c8c9cc)}.van-field__icon-container{color:#969799;color:var(--field-icon-container-color,#969799)}.van-field__icon-container:empty{display:none}.van-field__button{padding-left:8px;padding-left:var(--padding-xs,8px)}.van-field__button:empty{display:none}.van-field__error-message{text-align:left;font-size:12px;font-size:var(--field-error-message-text-font-size,12px);color:#ee0a24;color:var(--field-error-message-color,#ee0a24)}.van-field__error-message--center{text-align:center}.van-field__error-message--right{text-align:right}
\ No newline at end of file
diff --git a/utils/dist/goods-action-button/index.d.ts b/utils/dist/goods-action-button/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/goods-action-button/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/goods-action-button/index.js b/utils/dist/goods-action-button/index.js
new file mode 100644
index 0000000..8eed4a3
--- /dev/null
+++ b/utils/dist/goods-action-button/index.js
@@ -0,0 +1,41 @@
+import { VantComponent } from '../common/component';
+import { link } from '../mixins/link';
+import { button } from '../mixins/button';
+import { openType } from '../mixins/open-type';
+VantComponent({
+ mixins: [link, button, openType],
+ relation: {
+ type: 'ancestor',
+ name: 'goods-action',
+ linked(parent) {
+ this.parent = parent;
+ }
+ },
+ props: {
+ text: String,
+ color: String,
+ loading: Boolean,
+ disabled: Boolean,
+ type: {
+ type: String,
+ value: 'danger'
+ }
+ },
+ mounted() {
+ this.updateStyle();
+ },
+ methods: {
+ onClick(event) {
+ this.$emit('click', event.detail);
+ this.jumpLink();
+ },
+ updateStyle() {
+ const { children = [] } = this.parent;
+ const index = children.indexOf(this);
+ this.setData({
+ isFirst: index === 0,
+ isLast: index === children.length - 1
+ });
+ }
+ }
+});
diff --git a/utils/dist/goods-action-button/index.json b/utils/dist/goods-action-button/index.json
new file mode 100644
index 0000000..b567686
--- /dev/null
+++ b/utils/dist/goods-action-button/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-button": "../button/index"
+ }
+}
diff --git a/utils/dist/goods-action-button/index.wxml b/utils/dist/goods-action-button/index.wxml
new file mode 100644
index 0000000..d6d2daa
--- /dev/null
+++ b/utils/dist/goods-action-button/index.wxml
@@ -0,0 +1,28 @@
+
+
+ {{ text }}
+
diff --git a/utils/dist/goods-action-button/index.wxss b/utils/dist/goods-action-button/index.wxss
new file mode 100644
index 0000000..5b603f1
--- /dev/null
+++ b/utils/dist/goods-action-button/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';:host{-webkit-flex:1;flex:1}.van-goods-action-button{border:none!important;height:40px!important;height:var(--goods-action-button-height,40px)!important;font-weight:500!important;font-weight:var(--font-weight-bold,500)!important;line-height:40px!important;line-height:var(--goods-action-button-height,40px)!important}.van-goods-action-button--first{display:block!important;margin-left:5px;border-top-left-radius:20px!important;border-top-left-radius:var(--goods-action-button-border-radius,20px)!important;border-bottom-left-radius:20px!important;border-bottom-left-radius:var(--goods-action-button-border-radius,20px)!important}.van-goods-action-button--last{display:block!important;margin-right:5px;border-top-right-radius:20px!important;border-top-right-radius:var(--goods-action-button-border-radius,20px)!important;border-bottom-right-radius:20px!important;border-bottom-right-radius:var(--goods-action-button-border-radius,20px)!important}.van-goods-action-button--warning{background:linear-gradient(90deg,#ffd01e,#ff8917);background:var(--goods-action-button-warning-color,linear-gradient(90deg,#ffd01e,#ff8917))}.van-goods-action-button--danger{background:linear-gradient(90deg,#ff6034,#ee0a24);background:var(--goods-action-button-danger-color,linear-gradient(90deg,#ff6034,#ee0a24))}@media (max-width:321px){.van-goods-action-button{font-size:13px}}
\ No newline at end of file
diff --git a/utils/dist/goods-action-icon/index.d.ts b/utils/dist/goods-action-icon/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/goods-action-icon/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/goods-action-icon/index.js b/utils/dist/goods-action-icon/index.js
new file mode 100644
index 0000000..5a32e70
--- /dev/null
+++ b/utils/dist/goods-action-icon/index.js
@@ -0,0 +1,22 @@
+import { VantComponent } from '../common/component';
+import { link } from '../mixins/link';
+import { button } from '../mixins/button';
+import { openType } from '../mixins/open-type';
+VantComponent({
+ classes: ['icon-class', 'text-class'],
+ mixins: [link, button, openType],
+ props: {
+ text: String,
+ dot: Boolean,
+ info: String,
+ icon: String,
+ disabled: Boolean,
+ loading: Boolean
+ },
+ methods: {
+ onClick(event) {
+ this.$emit('click', event.detail);
+ this.jumpLink();
+ }
+ }
+});
diff --git a/utils/dist/goods-action-icon/index.json b/utils/dist/goods-action-icon/index.json
new file mode 100644
index 0000000..93bfe8a
--- /dev/null
+++ b/utils/dist/goods-action-icon/index.json
@@ -0,0 +1,7 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-icon": "../icon/index",
+ "van-button": "../button/index"
+ }
+}
diff --git a/utils/dist/goods-action-icon/index.wxml b/utils/dist/goods-action-icon/index.wxml
new file mode 100644
index 0000000..f3f0052
--- /dev/null
+++ b/utils/dist/goods-action-icon/index.wxml
@@ -0,0 +1,38 @@
+
+
+
+
+ {{ text }}
+
+
diff --git a/utils/dist/goods-action-icon/index.wxss b/utils/dist/goods-action-icon/index.wxss
new file mode 100644
index 0000000..30fff3d
--- /dev/null
+++ b/utils/dist/goods-action-icon/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-goods-action-icon{border:none!important;width:50px!important;width:var(--goods-action-icon-height,50px)!important}.van-goods-action-icon__content{display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;-webkit-justify-content:center;justify-content:center;height:100%;line-height:1;font-size:10px;font-size:var(--goods-action-icon-font-size,10px);color:#646566;color:var(--goods-action-icon-text-color,#646566)}.van-goods-action-icon__icon{margin-bottom:4px}
\ No newline at end of file
diff --git a/utils/dist/goods-action/index.d.ts b/utils/dist/goods-action/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/goods-action/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/goods-action/index.js b/utils/dist/goods-action/index.js
new file mode 100644
index 0000000..4a07ba8
--- /dev/null
+++ b/utils/dist/goods-action/index.js
@@ -0,0 +1,22 @@
+import { VantComponent } from '../common/component';
+VantComponent({
+ relation: {
+ type: 'descendant',
+ name: 'goods-action-button',
+ linked(child) {
+ this.children.push(child);
+ },
+ unlinked(child) {
+ this.children = this.children.filter((item) => item !== child);
+ }
+ },
+ beforeCreate() {
+ this.children = [];
+ },
+ props: {
+ safeAreaInsetBottom: {
+ type: Boolean,
+ value: true
+ }
+ }
+});
diff --git a/utils/dist/goods-action/index.json b/utils/dist/goods-action/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/utils/dist/goods-action/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/utils/dist/goods-action/index.wxml b/utils/dist/goods-action/index.wxml
new file mode 100644
index 0000000..569450c
--- /dev/null
+++ b/utils/dist/goods-action/index.wxml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/utils/dist/goods-action/index.wxss b/utils/dist/goods-action/index.wxss
new file mode 100644
index 0000000..22b779e
--- /dev/null
+++ b/utils/dist/goods-action/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-goods-action{position:fixed;right:0;bottom:0;left:0;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;background-color:#fff;background-color:var(--goods-action-background-color,#fff)}.van-goods-action--safe{padding-bottom:env(safe-area-inset-bottom)}
\ No newline at end of file
diff --git a/utils/dist/grid-item/index.d.ts b/utils/dist/grid-item/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/grid-item/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/grid-item/index.js b/utils/dist/grid-item/index.js
new file mode 100644
index 0000000..756996c
--- /dev/null
+++ b/utils/dist/grid-item/index.js
@@ -0,0 +1,68 @@
+import { link } from '../mixins/link';
+import { VantComponent } from '../common/component';
+import { addUnit } from '../common/utils';
+VantComponent({
+ relation: {
+ name: 'grid',
+ type: 'ancestor',
+ linked(parent) {
+ this.parent = parent;
+ }
+ },
+ mixins: [link],
+ props: {
+ icon: String,
+ dot: Boolean,
+ info: null,
+ text: String,
+ useSlot: Boolean
+ },
+ mounted() {
+ this.updateStyle();
+ },
+ methods: {
+ updateStyle() {
+ if (!this.parent) {
+ return;
+ }
+ const { data, children } = this.parent;
+ const { columnNum, border, square, gutter, clickable, center } = data;
+ const width = `${100 / columnNum}%`;
+ const styleWrapper = [];
+ styleWrapper.push(`width: ${width}`);
+ if (square) {
+ styleWrapper.push(`padding-top: ${width}`);
+ }
+ if (gutter) {
+ const gutterValue = addUnit(gutter);
+ styleWrapper.push(`padding-right: ${gutterValue}`);
+ const index = children.indexOf(this);
+ if (index >= columnNum) {
+ styleWrapper.push(`margin-top: ${gutterValue}`);
+ }
+ }
+ let contentStyle = '';
+ if (square && gutter) {
+ const gutterValue = addUnit(gutter);
+ contentStyle = `
+ right: ${gutterValue};
+ bottom: ${gutterValue};
+ height: auto;
+ `;
+ }
+ this.setData({
+ style: styleWrapper.join('; '),
+ contentStyle,
+ center,
+ border,
+ square,
+ gutter,
+ clickable
+ });
+ },
+ onClick() {
+ this.$emit('click');
+ this.jumpLink();
+ }
+ }
+});
diff --git a/utils/dist/grid-item/index.json b/utils/dist/grid-item/index.json
new file mode 100644
index 0000000..0a336c0
--- /dev/null
+++ b/utils/dist/grid-item/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-icon": "../icon/index"
+ }
+}
diff --git a/utils/dist/grid-item/index.wxml b/utils/dist/grid-item/index.wxml
new file mode 100644
index 0000000..2fb189b
--- /dev/null
+++ b/utils/dist/grid-item/index.wxml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ text }}
+
+
+
+
+
diff --git a/utils/dist/grid-item/index.wxss b/utils/dist/grid-item/index.wxss
new file mode 100644
index 0000000..7f2e818
--- /dev/null
+++ b/utils/dist/grid-item/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-grid-item{position:relative;float:left;box-sizing:border-box}.van-grid-item--square{height:0}.van-grid-item__content{display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;box-sizing:border-box;height:100%;padding:16px 8px;padding:var(--grid-item-content-padding,16px 8px);background-color:#fff;background-color:var(--grid-item-content-background-color,#fff)}.van-grid-item__content:after{z-index:1;border-width:0 1px 1px 0;border-bottom-width:var(--border-width-base,1px);border-right-width:var(--border-width-base,1px);border-top-width:0}.van-grid-item__content--surround:after{border-width:1px;border-width:var(--border-width-base,1px)}.van-grid-item__content--center{-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center}.van-grid-item__content--square{position:absolute;top:0;right:0;left:0}.van-grid-item__content--clickable:active{background-color:#f2f3f5;background-color:var(--grid-item-content-active-color,#f2f3f5)}.van-grid-item__icon{font-size:26px;font-size:var(--grid-item-icon-size,26px)}.van-grid-item__text{word-wrap:break-word;color:#646566;color:var(--grid-item-text-color,#646566);font-size:12px;font-size:var(--grid-item-text-font-size,12px)}
\ No newline at end of file
diff --git a/utils/dist/grid/index.d.ts b/utils/dist/grid/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/grid/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/grid/index.js b/utils/dist/grid/index.js
new file mode 100644
index 0000000..97f3eb0
--- /dev/null
+++ b/utils/dist/grid/index.js
@@ -0,0 +1,62 @@
+import { VantComponent } from '../common/component';
+import { addUnit } from '../common/utils';
+VantComponent({
+ relation: {
+ name: 'grid-item',
+ type: 'descendant',
+ linked(child) {
+ this.children.push(child);
+ },
+ unlinked(child) {
+ this.children = this.children.filter((item) => item !== child);
+ }
+ },
+ props: {
+ square: {
+ type: Boolean,
+ observer: 'updateChildren'
+ },
+ gutter: {
+ type: [Number, String],
+ value: 0,
+ observer: 'updateChildren'
+ },
+ clickable: {
+ type: Boolean,
+ observer: 'updateChildren'
+ },
+ columnNum: {
+ type: Number,
+ value: 4,
+ observer: 'updateChildren'
+ },
+ center: {
+ type: Boolean,
+ value: true,
+ observer: 'updateChildren'
+ },
+ border: {
+ type: Boolean,
+ value: true,
+ observer: 'updateChildren'
+ }
+ },
+ beforeCreate() {
+ this.children = [];
+ },
+ created() {
+ const { gutter } = this.data;
+ if (gutter) {
+ this.setData({
+ style: `padding-left: ${addUnit(gutter)}`
+ });
+ }
+ },
+ methods: {
+ updateChildren() {
+ this.children.forEach((child) => {
+ child.updateStyle();
+ });
+ }
+ }
+});
diff --git a/utils/dist/grid/index.json b/utils/dist/grid/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/utils/dist/grid/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/utils/dist/grid/index.wxml b/utils/dist/grid/index.wxml
new file mode 100644
index 0000000..fc76cc3
--- /dev/null
+++ b/utils/dist/grid/index.wxml
@@ -0,0 +1,3 @@
+
+
+
diff --git a/utils/dist/grid/index.wxss b/utils/dist/grid/index.wxss
new file mode 100644
index 0000000..327fc5e
--- /dev/null
+++ b/utils/dist/grid/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-grid{position:relative;box-sizing:border-box;overflow:hidden}
\ No newline at end of file
diff --git a/utils/dist/icon/index.d.ts b/utils/dist/icon/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/icon/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/icon/index.js b/utils/dist/icon/index.js
new file mode 100644
index 0000000..8d83ff1
--- /dev/null
+++ b/utils/dist/icon/index.js
@@ -0,0 +1,39 @@
+import { VantComponent } from '../common/component';
+import { addUnit } from '../common/utils';
+VantComponent({
+ props: {
+ dot: Boolean,
+ info: null,
+ size: {
+ type: null,
+ observer: 'setSizeWithUnit'
+ },
+ color: String,
+ customStyle: String,
+ classPrefix: {
+ type: String,
+ value: 'van-icon'
+ },
+ name: {
+ type: String,
+ observer(val) {
+ this.setData({
+ isImageName: val.indexOf('/') !== -1
+ });
+ }
+ }
+ },
+ data: {
+ sizeWithUnit: null,
+ },
+ methods: {
+ onClick() {
+ this.$emit('click');
+ },
+ setSizeWithUnit(size) {
+ this.setData({
+ sizeWithUnit: addUnit(size)
+ });
+ }
+ }
+});
diff --git a/utils/dist/icon/index.json b/utils/dist/icon/index.json
new file mode 100644
index 0000000..bf0ebe0
--- /dev/null
+++ b/utils/dist/icon/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-info": "../info/index"
+ }
+}
diff --git a/utils/dist/icon/index.wxml b/utils/dist/icon/index.wxml
new file mode 100644
index 0000000..c568b58
--- /dev/null
+++ b/utils/dist/icon/index.wxml
@@ -0,0 +1,18 @@
+
+
+
+
diff --git a/utils/dist/icon/index.wxss b/utils/dist/icon/index.wxss
new file mode 100644
index 0000000..8fa5efc
--- /dev/null
+++ b/utils/dist/icon/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';@font-face{font-weight:400;font-family:vant-icon;font-style:normal;font-display:auto;src:url(https://img.yzcdn.cn/vant/vant-icon-0bc654.woff2) format("woff2"),url(https://img.yzcdn.cn/vant/vant-icon-0bc654.woff) format("woff"),url(https://img.yzcdn.cn/vant/vant-icon-0bc654.ttf) format("truetype")}.van-icon{position:relative;font:normal normal normal 14px/1 vant-icon;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased}.van-icon,.van-icon:before{display:inline-block}.van-icon-add-o:before{content:"\F000"}.van-icon-add-square:before{content:"\F001"}.van-icon-add:before{content:"\F002"}.van-icon-after-sale:before{content:"\F003"}.van-icon-aim:before{content:"\F004"}.van-icon-alipay:before{content:"\F005"}.van-icon-apps-o:before{content:"\F006"}.van-icon-arrow-down:before{content:"\F007"}.van-icon-arrow-left:before{content:"\F008"}.van-icon-arrow-up:before{content:"\F009"}.van-icon-arrow:before{content:"\F00A"}.van-icon-ascending:before{content:"\F00B"}.van-icon-audio:before{content:"\F00C"}.van-icon-award-o:before{content:"\F00D"}.van-icon-award:before{content:"\F00E"}.van-icon-bag-o:before{content:"\F00F"}.van-icon-bag:before{content:"\F010"}.van-icon-balance-list-o:before{content:"\F011"}.van-icon-balance-list:before{content:"\F012"}.van-icon-balance-o:before{content:"\F013"}.van-icon-balance-pay:before{content:"\F014"}.van-icon-bar-chart-o:before{content:"\F015"}.van-icon-bars:before{content:"\F016"}.van-icon-bell:before{content:"\F017"}.van-icon-bill-o:before{content:"\F018"}.van-icon-bill:before{content:"\F019"}.van-icon-birthday-cake-o:before{content:"\F01A"}.van-icon-bookmark-o:before{content:"\F01B"}.van-icon-bookmark:before{content:"\F01C"}.van-icon-browsing-history-o:before{content:"\F01D"}.van-icon-browsing-history:before{content:"\F01E"}.van-icon-brush-o:before{content:"\F01F"}.van-icon-bulb-o:before{content:"\F020"}.van-icon-bullhorn-o:before{content:"\F021"}.van-icon-calender-o:before{content:"\F022"}.van-icon-card:before{content:"\F023"}.van-icon-cart-circle-o:before{content:"\F024"}.van-icon-cart-circle:before{content:"\F025"}.van-icon-cart-o:before{content:"\F026"}.van-icon-cart:before{content:"\F027"}.van-icon-cash-back-record:before{content:"\F028"}.van-icon-cash-on-deliver:before{content:"\F029"}.van-icon-cashier-o:before{content:"\F02A"}.van-icon-certificate:before{content:"\F02B"}.van-icon-chart-trending-o:before{content:"\F02C"}.van-icon-chat-o:before{content:"\F02D"}.van-icon-chat:before{content:"\F02E"}.van-icon-checked:before{content:"\F02F"}.van-icon-circle:before{content:"\F030"}.van-icon-clear:before{content:"\F031"}.van-icon-clock-o:before{content:"\F032"}.van-icon-clock:before{content:"\F033"}.van-icon-close:before{content:"\F034"}.van-icon-closed-eye:before{content:"\F035"}.van-icon-cluster-o:before{content:"\F036"}.van-icon-cluster:before{content:"\F037"}.van-icon-column:before{content:"\F038"}.van-icon-comment-circle-o:before{content:"\F039"}.van-icon-comment-circle:before{content:"\F03A"}.van-icon-comment-o:before{content:"\F03B"}.van-icon-comment:before{content:"\F03C"}.van-icon-completed:before{content:"\F03D"}.van-icon-contact:before{content:"\F03E"}.van-icon-coupon-o:before{content:"\F03F"}.van-icon-coupon:before{content:"\F040"}.van-icon-credit-pay:before{content:"\F041"}.van-icon-cross:before{content:"\F042"}.van-icon-debit-pay:before{content:"\F043"}.van-icon-delete:before{content:"\F044"}.van-icon-descending:before{content:"\F045"}.van-icon-description:before{content:"\F046"}.van-icon-desktop-o:before{content:"\F047"}.van-icon-diamond-o:before{content:"\F048"}.van-icon-diamond:before{content:"\F049"}.van-icon-discount:before{content:"\F04A"}.van-icon-down:before{content:"\F04B"}.van-icon-ecard-pay:before{content:"\F04C"}.van-icon-edit:before{content:"\F04D"}.van-icon-ellipsis:before{content:"\F04E"}.van-icon-empty:before{content:"\F04F"}.van-icon-envelop-o:before{content:"\F050"}.van-icon-exchange:before{content:"\F051"}.van-icon-expand-o:before{content:"\F052"}.van-icon-expand:before{content:"\F053"}.van-icon-eye-o:before{content:"\F054"}.van-icon-eye:before{content:"\F055"}.van-icon-fail:before{content:"\F056"}.van-icon-failure:before{content:"\F057"}.van-icon-filter-o:before{content:"\F058"}.van-icon-fire-o:before{content:"\F059"}.van-icon-fire:before{content:"\F05A"}.van-icon-flag-o:before{content:"\F05B"}.van-icon-flower-o:before{content:"\F05C"}.van-icon-free-postage:before{content:"\F05D"}.van-icon-friends-o:before{content:"\F05E"}.van-icon-friends:before{content:"\F05F"}.van-icon-gem-o:before{content:"\F060"}.van-icon-gem:before{content:"\F061"}.van-icon-gift-card-o:before{content:"\F062"}.van-icon-gift-card:before{content:"\F063"}.van-icon-gift-o:before{content:"\F064"}.van-icon-gift:before{content:"\F065"}.van-icon-gold-coin-o:before{content:"\F066"}.van-icon-gold-coin:before{content:"\F067"}.van-icon-good-job-o:before{content:"\F068"}.van-icon-good-job:before{content:"\F069"}.van-icon-goods-collect-o:before{content:"\F06A"}.van-icon-goods-collect:before{content:"\F06B"}.van-icon-graphic:before{content:"\F06C"}.van-icon-home-o:before{content:"\F06D"}.van-icon-hot-o:before{content:"\F06E"}.van-icon-hot-sale-o:before{content:"\F06F"}.van-icon-hot-sale:before{content:"\F070"}.van-icon-hot:before{content:"\F071"}.van-icon-hotel-o:before{content:"\F072"}.van-icon-idcard:before{content:"\F073"}.van-icon-info-o:before{content:"\F074"}.van-icon-info:before{content:"\F075"}.van-icon-invition:before{content:"\F076"}.van-icon-label-o:before{content:"\F077"}.van-icon-label:before{content:"\F078"}.van-icon-like-o:before{content:"\F079"}.van-icon-like:before{content:"\F07A"}.van-icon-live:before{content:"\F07B"}.van-icon-location-o:before{content:"\F07C"}.van-icon-location:before{content:"\F07D"}.van-icon-lock:before{content:"\F07E"}.van-icon-logistics:before{content:"\F07F"}.van-icon-manager-o:before{content:"\F080"}.van-icon-manager:before{content:"\F081"}.van-icon-map-marked:before{content:"\F082"}.van-icon-medel-o:before{content:"\F083"}.van-icon-medel:before{content:"\F084"}.van-icon-more-o:before{content:"\F085"}.van-icon-more:before{content:"\F086"}.van-icon-music-o:before{content:"\F087"}.van-icon-music:before{content:"\F088"}.van-icon-new-arrival-o:before{content:"\F089"}.van-icon-new-arrival:before{content:"\F08A"}.van-icon-new-o:before{content:"\F08B"}.van-icon-new:before{content:"\F08C"}.van-icon-newspaper-o:before{content:"\F08D"}.van-icon-notes-o:before{content:"\F08E"}.van-icon-orders-o:before{content:"\F08F"}.van-icon-other-pay:before{content:"\F090"}.van-icon-paid:before{content:"\F091"}.van-icon-passed:before{content:"\F092"}.van-icon-pause-circle-o:before{content:"\F093"}.van-icon-pause-circle:before{content:"\F094"}.van-icon-pause:before{content:"\F095"}.van-icon-peer-pay:before{content:"\F096"}.van-icon-pending-payment:before{content:"\F097"}.van-icon-phone-circle-o:before{content:"\F098"}.van-icon-phone-circle:before{content:"\F099"}.van-icon-phone-o:before{content:"\F09A"}.van-icon-phone:before{content:"\F09B"}.van-icon-photo-o:before{content:"\F09C"}.van-icon-photo:before{content:"\F09D"}.van-icon-photograph:before{content:"\F09E"}.van-icon-play-circle-o:before{content:"\F09F"}.van-icon-play-circle:before{content:"\F0A0"}.van-icon-play:before{content:"\F0A1"}.van-icon-plus:before{content:"\F0A2"}.van-icon-point-gift-o:before{content:"\F0A3"}.van-icon-point-gift:before{content:"\F0A4"}.van-icon-points:before{content:"\F0A5"}.van-icon-printer:before{content:"\F0A6"}.van-icon-qr-invalid:before{content:"\F0A7"}.van-icon-qr:before{content:"\F0A8"}.van-icon-question-o:before{content:"\F0A9"}.van-icon-question:before{content:"\F0AA"}.van-icon-records:before{content:"\F0AB"}.van-icon-refund-o:before{content:"\F0AC"}.van-icon-replay:before{content:"\F0AD"}.van-icon-scan:before{content:"\F0AE"}.van-icon-search:before{content:"\F0AF"}.van-icon-send-gift-o:before{content:"\F0B0"}.van-icon-send-gift:before{content:"\F0B1"}.van-icon-service-o:before{content:"\F0B2"}.van-icon-service:before{content:"\F0B3"}.van-icon-setting-o:before{content:"\F0B4"}.van-icon-setting:before{content:"\F0B5"}.van-icon-share:before{content:"\F0B6"}.van-icon-shop-collect-o:before{content:"\F0B7"}.van-icon-shop-collect:before{content:"\F0B8"}.van-icon-shop-o:before{content:"\F0B9"}.van-icon-shop:before{content:"\F0BA"}.van-icon-shopping-cart-o:before{content:"\F0BB"}.van-icon-shopping-cart:before{content:"\F0BC"}.van-icon-shrink:before{content:"\F0BD"}.van-icon-sign:before{content:"\F0BE"}.van-icon-smile-comment-o:before{content:"\F0BF"}.van-icon-smile-comment:before{content:"\F0C0"}.van-icon-smile-o:before{content:"\F0C1"}.van-icon-smile:before{content:"\F0C2"}.van-icon-star-o:before{content:"\F0C3"}.van-icon-star:before{content:"\F0C4"}.van-icon-stop-circle-o:before{content:"\F0C5"}.van-icon-stop-circle:before{content:"\F0C6"}.van-icon-stop:before{content:"\F0C7"}.van-icon-success:before{content:"\F0C8"}.van-icon-thumb-circle-o:before{content:"\F0C9"}.van-icon-thumb-circle:before{content:"\F0CA"}.van-icon-todo-list-o:before{content:"\F0CB"}.van-icon-todo-list:before{content:"\F0CC"}.van-icon-tosend:before{content:"\F0CD"}.van-icon-tv-o:before{content:"\F0CE"}.van-icon-umbrella-circle:before{content:"\F0CF"}.van-icon-underway-o:before{content:"\F0D0"}.van-icon-underway:before{content:"\F0D1"}.van-icon-upgrade:before{content:"\F0D2"}.van-icon-user-circle-o:before{content:"\F0D3"}.van-icon-user-o:before{content:"\F0D4"}.van-icon-video-o:before{content:"\F0D5"}.van-icon-video:before{content:"\F0D6"}.van-icon-vip-card-o:before{content:"\F0D7"}.van-icon-vip-card:before{content:"\F0D8"}.van-icon-volume-o:before{content:"\F0D9"}.van-icon-volume:before{content:"\F0DA"}.van-icon-wap-home-o:before{content:"\F0DB"}.van-icon-wap-home:before{content:"\F0DC"}.van-icon-wap-nav:before{content:"\F0DD"}.van-icon-warn-o:before{content:"\F0DE"}.van-icon-warning-o:before{content:"\F0DF"}.van-icon-warning:before{content:"\F0E0"}.van-icon-weapp-nav:before{content:"\F0E1"}.van-icon-wechat:before{content:"\F0E2"}.van-icon-youzan-shield:before{content:"\F0E3"}:host{display:-webkit-inline-flex;display:inline-flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center}.van-icon--image{width:1em;height:1em}.van-icon__image{width:100%;height:100%}.van-icon__info{z-index:1}
\ No newline at end of file
diff --git a/utils/dist/image/index.d.ts b/utils/dist/image/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/image/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/image/index.js b/utils/dist/image/index.js
new file mode 100644
index 0000000..95650f7
--- /dev/null
+++ b/utils/dist/image/index.js
@@ -0,0 +1,98 @@
+import { addUnit, isDef } from '../common/utils';
+import { VantComponent } from '../common/component';
+import { button } from '../mixins/button';
+import { openType } from '../mixins/open-type';
+const FIT_MODE_MAP = {
+ none: 'center',
+ fill: 'scaleToFill',
+ cover: 'aspectFill',
+ contain: 'aspectFit'
+};
+VantComponent({
+ mixins: [button, openType],
+ classes: ['custom-class', 'loading-class', 'error-class', 'image-class'],
+ props: {
+ src: String,
+ round: Boolean,
+ width: {
+ type: null,
+ observer: 'setStyle'
+ },
+ height: {
+ type: null,
+ observer: 'setStyle'
+ },
+ radius: null,
+ lazyLoad: Boolean,
+ useErrorSlot: Boolean,
+ useLoadingSlot: Boolean,
+ showMenuByLongpress: Boolean,
+ fit: {
+ type: String,
+ value: 'fill',
+ observer: 'setMode'
+ },
+ showError: {
+ type: Boolean,
+ value: true
+ },
+ showLoading: {
+ type: Boolean,
+ value: true
+ }
+ },
+ data: {
+ error: false,
+ loading: true
+ },
+ watch: {
+ src() {
+ this.setData({
+ error: false,
+ loading: true
+ });
+ }
+ },
+ mounted() {
+ this.setMode();
+ this.setStyle();
+ },
+ methods: {
+ setMode() {
+ this.setData({
+ mode: FIT_MODE_MAP[this.data.fit],
+ });
+ },
+ setStyle() {
+ const { width, height, radius } = this.data;
+ let style = '';
+ if (isDef(width)) {
+ style += `width: ${addUnit(width)};`;
+ }
+ if (isDef(height)) {
+ style += `height: ${addUnit(height)};`;
+ }
+ if (isDef(radius)) {
+ style += 'overflow: hidden;';
+ style += `border-radius: ${addUnit(radius)};`;
+ }
+ this.setData({ style });
+ },
+ onLoad(event) {
+ this.setData({
+ loading: false
+ });
+ this.$emit('load', event.detail);
+ },
+ onError(event) {
+ this.setData({
+ loading: false,
+ error: true
+ });
+ this.$emit('error', event.detail);
+ },
+ onClick(event) {
+ this.$emit('click', event.detail);
+ }
+ }
+});
diff --git a/utils/dist/image/index.json b/utils/dist/image/index.json
new file mode 100644
index 0000000..e00a588
--- /dev/null
+++ b/utils/dist/image/index.json
@@ -0,0 +1,7 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-icon": "../icon/index",
+ "van-loading": "../loading/index"
+ }
+}
diff --git a/utils/dist/image/index.wxml b/utils/dist/image/index.wxml
new file mode 100644
index 0000000..4724ca2
--- /dev/null
+++ b/utils/dist/image/index.wxml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/utils/dist/image/index.wxss b/utils/dist/image/index.wxss
new file mode 100644
index 0000000..e5f1637
--- /dev/null
+++ b/utils/dist/image/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-image{position:relative;display:inline-block}.van-image--round{overflow:hidden;border-radius:50%}.van-image--round .van-image__img{border-radius:inherit}.van-image__error,.van-image__img,.van-image__loading{display:block;width:100%;height:100%}.van-image__error,.van-image__loading{position:absolute;top:0;left:0;display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;color:#969799;color:var(--image-placeholder-text-color,#969799);font-size:14px;font-size:var(--image-placeholder-font-size,14px);background-color:#f7f8fa;background-color:var(--image-placeholder-background-color,#f7f8fa)}
\ No newline at end of file
diff --git a/utils/dist/index-anchor/index.d.ts b/utils/dist/index-anchor/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/index-anchor/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/index-anchor/index.js b/utils/dist/index-anchor/index.js
new file mode 100644
index 0000000..caaf191
--- /dev/null
+++ b/utils/dist/index-anchor/index.js
@@ -0,0 +1,22 @@
+import { VantComponent } from '../common/component';
+VantComponent({
+ relation: {
+ name: 'index-bar',
+ type: 'ancestor',
+ linked(target) {
+ this.parent = target;
+ },
+ unlinked() {
+ this.parent = null;
+ }
+ },
+ props: {
+ useSlot: Boolean,
+ index: null
+ },
+ data: {
+ active: false,
+ wrapperStyle: '',
+ anchorStyle: ''
+ }
+});
diff --git a/utils/dist/index-anchor/index.json b/utils/dist/index-anchor/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/utils/dist/index-anchor/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/utils/dist/index-anchor/index.wxml b/utils/dist/index-anchor/index.wxml
new file mode 100644
index 0000000..49affa7
--- /dev/null
+++ b/utils/dist/index-anchor/index.wxml
@@ -0,0 +1,14 @@
+
+
+
+
+ {{ index }}
+
+
+
diff --git a/utils/dist/index-anchor/index.wxss b/utils/dist/index-anchor/index.wxss
new file mode 100644
index 0000000..b8c3c0a
--- /dev/null
+++ b/utils/dist/index-anchor/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-index-anchor{padding:0 16px;padding:var(--index-anchor-padding,0 16px);color:#323233;color:var(--index-anchor-text-color,#323233);font-weight:500;font-weight:var(--index-anchor-font-weight,500);font-size:14px;font-size:var(--index-anchor-font-size,14px);line-height:32px;line-height:var(--index-anchor-line-height,32px);background-color:initial;background-color:var(--index-anchor-background-color,transparent)}.van-index-anchor--active{right:0;left:0;color:#07c160;color:var(--index-anchor-active-text-color,#07c160);background-color:#fff;background-color:var(--index-anchor-active-background-color,#fff)}
\ No newline at end of file
diff --git a/utils/dist/index-bar/index.d.ts b/utils/dist/index-bar/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/index-bar/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/index-bar/index.js b/utils/dist/index-bar/index.js
new file mode 100644
index 0000000..ec8e8e7
--- /dev/null
+++ b/utils/dist/index-bar/index.js
@@ -0,0 +1,240 @@
+import { VantComponent } from '../common/component';
+import { GREEN } from '../common/color';
+const indexList = () => {
+ const indexList = [];
+ const charCodeOfA = 'A'.charCodeAt(0);
+ for (let i = 0; i < 26; i++) {
+ indexList.push(String.fromCharCode(charCodeOfA + i));
+ }
+ return indexList;
+};
+VantComponent({
+ relation: {
+ name: 'index-anchor',
+ type: 'descendant',
+ linked() {
+ this.updateData();
+ },
+ linkChanged() {
+ this.updateData();
+ },
+ unlinked() {
+ this.updateData();
+ }
+ },
+ props: {
+ sticky: {
+ type: Boolean,
+ value: true
+ },
+ zIndex: {
+ type: Number,
+ value: 1
+ },
+ highlightColor: {
+ type: String,
+ value: GREEN
+ },
+ scrollTop: {
+ type: Number,
+ value: 0,
+ observer: 'onScroll'
+ },
+ stickyOffsetTop: {
+ type: Number,
+ value: 0
+ },
+ indexList: {
+ type: Array,
+ value: indexList()
+ }
+ },
+ data: {
+ activeAnchorIndex: null,
+ showSidebar: false
+ },
+ methods: {
+ updateData() {
+ this.timer && clearTimeout(this.timer);
+ this.timer = setTimeout(() => {
+ this.children = this.getRelationNodes('../index-anchor/index');
+ this.setData({
+ showSidebar: !!this.children.length
+ });
+ this.setRect().then(() => {
+ this.onScroll();
+ });
+ }, 0);
+ },
+ setRect() {
+ return Promise.all([
+ this.setAnchorsRect(),
+ this.setListRect(),
+ this.setSiderbarRect()
+ ]);
+ },
+ setAnchorsRect() {
+ return Promise.all(this.children.map(anchor => (anchor.getRect('.van-index-anchor-wrapper').then((rect) => {
+ Object.assign(anchor, {
+ height: rect.height,
+ top: rect.top + this.data.scrollTop
+ });
+ }))));
+ },
+ setListRect() {
+ return this.getRect('.van-index-bar').then((rect) => {
+ Object.assign(this, {
+ height: rect.height,
+ top: rect.top + this.data.scrollTop
+ });
+ });
+ },
+ setSiderbarRect() {
+ return this.getRect('.van-index-bar__sidebar').then(res => {
+ this.sidebar = {
+ height: res.height,
+ top: res.top
+ };
+ });
+ },
+ setDiffData({ target, data }) {
+ const diffData = {};
+ Object.keys(data).forEach(key => {
+ if (target.data[key] !== data[key]) {
+ diffData[key] = data[key];
+ }
+ });
+ if (Object.keys(diffData).length) {
+ target.setData(diffData);
+ }
+ },
+ getAnchorRect(anchor) {
+ return anchor.getRect('.van-index-anchor-wrapper').then((rect) => ({
+ height: rect.height,
+ top: rect.top
+ }));
+ },
+ getActiveAnchorIndex() {
+ const { children } = this;
+ const { sticky, scrollTop, stickyOffsetTop } = this.data;
+ for (let i = this.children.length - 1; i >= 0; i--) {
+ const preAnchorHeight = i > 0 ? children[i - 1].height : 0;
+ const reachTop = sticky ? preAnchorHeight + stickyOffsetTop : 0;
+ if (reachTop + scrollTop >= children[i].top) {
+ return i;
+ }
+ }
+ return -1;
+ },
+ onScroll() {
+ const { children = [] } = this;
+ if (!children.length) {
+ return;
+ }
+ const { sticky, stickyOffsetTop, zIndex, highlightColor, scrollTop } = this.data;
+ const active = this.getActiveAnchorIndex();
+ this.setDiffData({
+ target: this,
+ data: {
+ activeAnchorIndex: active
+ }
+ });
+ if (sticky) {
+ let isActiveAnchorSticky = false;
+ if (active !== -1) {
+ isActiveAnchorSticky = children[active].top <= stickyOffsetTop + scrollTop;
+ }
+ children.forEach((item, index) => {
+ if (index === active) {
+ let wrapperStyle = '';
+ let anchorStyle = `
+ color: ${highlightColor};
+ `;
+ if (isActiveAnchorSticky) {
+ wrapperStyle = `
+ height: ${children[index].height}px;
+ `;
+ anchorStyle = `
+ position: fixed;
+ top: ${stickyOffsetTop}px;
+ z-index: ${zIndex};
+ color: ${highlightColor};
+ `;
+ }
+ this.setDiffData({
+ target: item,
+ data: {
+ active: true,
+ anchorStyle,
+ wrapperStyle
+ }
+ });
+ }
+ else if (index === active - 1) {
+ const currentAnchor = children[index];
+ const currentOffsetTop = currentAnchor.top;
+ const targetOffsetTop = index === children.length - 1
+ ? this.top
+ : children[index + 1].top;
+ const parentOffsetHeight = targetOffsetTop - currentOffsetTop;
+ const translateY = parentOffsetHeight - currentAnchor.height;
+ const anchorStyle = `
+ position: relative;
+ transform: translate3d(0, ${translateY}px, 0);
+ z-index: ${zIndex};
+ color: ${highlightColor};
+ `;
+ this.setDiffData({
+ target: item,
+ data: {
+ active: true,
+ anchorStyle
+ }
+ });
+ }
+ else {
+ this.setDiffData({
+ target: item,
+ data: {
+ active: false,
+ anchorStyle: '',
+ wrapperStyle: '',
+ }
+ });
+ }
+ });
+ }
+ },
+ onClick(event) {
+ this.scrollToAnchor(event.target.dataset.index);
+ },
+ onTouchMove(event) {
+ const sidebarLength = this.children.length;
+ const touch = event.touches[0];
+ const itemHeight = this.sidebar.height / sidebarLength;
+ let index = Math.floor((touch.clientY - this.sidebar.top) / itemHeight);
+ if (index < 0) {
+ index = 0;
+ }
+ else if (index > sidebarLength - 1) {
+ index = sidebarLength - 1;
+ }
+ this.scrollToAnchor(index);
+ },
+ onTouchStop() {
+ this.scrollToAnchorIndex = null;
+ },
+ scrollToAnchor(index) {
+ if (typeof index !== 'number' || this.scrollToAnchorIndex === index) {
+ return;
+ }
+ this.scrollToAnchorIndex = index;
+ const anchor = this.children.filter(item => item.data.index === this.data.indexList[index])[0];
+ this.$emit('select', anchor.data.index);
+ anchor && wx.pageScrollTo({
+ duration: 0,
+ scrollTop: anchor.top
+ });
+ }
+ }
+});
diff --git a/utils/dist/index-bar/index.json b/utils/dist/index-bar/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/utils/dist/index-bar/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/utils/dist/index-bar/index.wxml b/utils/dist/index-bar/index.wxml
new file mode 100644
index 0000000..19a59cf
--- /dev/null
+++ b/utils/dist/index-bar/index.wxml
@@ -0,0 +1,22 @@
+
+
+
+
+
diff --git a/utils/dist/index-bar/index.wxss b/utils/dist/index-bar/index.wxss
new file mode 100644
index 0000000..dba5dc0
--- /dev/null
+++ b/utils/dist/index-bar/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-index-bar{position:relative}.van-index-bar__sidebar{position:fixed;top:50%;right:0;display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;text-align:center;-webkit-transform:translateY(-50%);transform:translateY(-50%);-webkit-user-select:none;user-select:none}.van-index-bar__index{font-weight:500;padding:0 4px 0 16px;padding:0 var(--padding-base,4px) 0 var(--padding-md,16px);font-size:10px;font-size:var(--index-bar-index-font-size,10px);line-height:14px;line-height:var(--index-bar-index-line-height,14px)}
\ No newline at end of file
diff --git a/utils/dist/info/index.d.ts b/utils/dist/info/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/info/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/info/index.js b/utils/dist/info/index.js
new file mode 100644
index 0000000..8e34c0f
--- /dev/null
+++ b/utils/dist/info/index.js
@@ -0,0 +1,8 @@
+import { VantComponent } from '../common/component';
+VantComponent({
+ props: {
+ dot: Boolean,
+ info: null,
+ customStyle: String
+ }
+});
diff --git a/utils/dist/info/index.json b/utils/dist/info/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/utils/dist/info/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/utils/dist/info/index.wxml b/utils/dist/info/index.wxml
new file mode 100644
index 0000000..3112dfc
--- /dev/null
+++ b/utils/dist/info/index.wxml
@@ -0,0 +1,7 @@
+
+
+{{ dot ? '' : info }}
diff --git a/utils/dist/info/index.wxss b/utils/dist/info/index.wxss
new file mode 100644
index 0000000..16e3f32
--- /dev/null
+++ b/utils/dist/info/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-info{position:absolute;top:0;right:0;box-sizing:border-box;white-space:nowrap;text-align:center;-webkit-transform:translate(50%,-50%);transform:translate(50%,-50%);-webkit-transform-origin:100%;transform-origin:100%;min-width:16px;min-width:var(--info-size,16px);padding:0 3px;padding:var(--info-padding,0 3px);color:#fff;color:var(--info-color,#fff);font-weight:500;font-weight:var(--info-font-weight,500);font-size:12px;font-size:var(--info-font-size,12px);font-family:PingFang SC,Helvetica Neue,Arial,sans-serif;font-family:var(--info-font-family,PingFang SC,Helvetica Neue,Arial,sans-serif);line-height:14px;line-height:calc(var(--info-size, 16px) - var(--info-border-width, 1px)*2);background-color:#ee0a24;background-color:var(--info-background-color,#ee0a24);border:1px solid #fff;border:var(--info-border-width,1px) solid var(--white,#fff);border-radius:16px;border-radius:var(--info-size,16px)}.van-info--dot{min-width:0;border-radius:100%;width:8px;width:var(--info-dot-size,8px);height:8px;height:var(--info-dot-size,8px);background-color:#ee0a24;background-color:var(--info-dot-color,#ee0a24)}
\ No newline at end of file
diff --git a/utils/dist/loading/index.d.ts b/utils/dist/loading/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/loading/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/loading/index.js b/utils/dist/loading/index.js
new file mode 100644
index 0000000..af510c8
--- /dev/null
+++ b/utils/dist/loading/index.js
@@ -0,0 +1,32 @@
+import { VantComponent } from '../common/component';
+import { addUnit } from '../common/utils';
+VantComponent({
+ props: {
+ color: String,
+ vertical: Boolean,
+ type: {
+ type: String,
+ value: 'circular'
+ },
+ size: {
+ type: String,
+ observer: 'setSizeWithUnit'
+ },
+ textSize: {
+ type: String,
+ observer: 'setTextSizeWithUnit'
+ }
+ },
+ methods: {
+ setSizeWithUnit(size) {
+ this.setData({
+ sizeWithUnit: addUnit(size)
+ });
+ },
+ setTextSizeWithUnit(size) {
+ this.set({
+ textSizeWithUnit: addUnit(size)
+ });
+ }
+ }
+});
diff --git a/utils/dist/loading/index.json b/utils/dist/loading/index.json
new file mode 100644
index 0000000..32640e0
--- /dev/null
+++ b/utils/dist/loading/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
\ No newline at end of file
diff --git a/utils/dist/loading/index.wxml b/utils/dist/loading/index.wxml
new file mode 100644
index 0000000..5229d04
--- /dev/null
+++ b/utils/dist/loading/index.wxml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
diff --git a/utils/dist/loading/index.wxss b/utils/dist/loading/index.wxss
new file mode 100644
index 0000000..f28a6b4
--- /dev/null
+++ b/utils/dist/loading/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';:host{font-size:0;line-height:1}.van-loading{display:-webkit-inline-flex;display:inline-flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;color:#c8c9cc;color:var(--loading-spinner-color,#c8c9cc)}.van-loading__spinner{position:relative;box-sizing:border-box;width:30px;width:var(--loading-spinner-size,30px);max-width:100%;max-height:100%;height:30px;height:var(--loading-spinner-size,30px);-webkit-animation:van-rotate .8s linear infinite;animation:van-rotate .8s linear infinite;-webkit-animation:van-rotate var(--loading-spinner-animation-duration,.8s) linear infinite;animation:van-rotate var(--loading-spinner-animation-duration,.8s) linear infinite}.van-loading__spinner--spinner{-webkit-animation-timing-function:steps(12);animation-timing-function:steps(12)}.van-loading__spinner--circular{border:1px solid transparent;border-top-color:initial;border-radius:100%}.van-loading__text{margin-left:8px;margin-left:var(--padding-xs,8px);color:#969799;color:var(--loading-text-color,#969799);font-size:14px;font-size:var(--loading-text-font-size,14px);line-height:20px;line-height:var(--loading-text-line-height,20px)}.van-loading__text:empty{display:none}.van-loading--vertical{-webkit-flex-direction:column;flex-direction:column}.van-loading--vertical .van-loading__text{margin:8px 0 0;margin:var(--padding-xs,8px) 0 0}.van-loading__dot{position:absolute;top:0;left:0;width:100%;height:100%}.van-loading__dot:before{display:block;width:2px;height:25%;margin:0 auto;background-color:currentColor;border-radius:40%;content:" "}.van-loading__dot:first-of-type{-webkit-transform:rotate(30deg);transform:rotate(30deg);opacity:1}.van-loading__dot:nth-of-type(2){-webkit-transform:rotate(60deg);transform:rotate(60deg);opacity:.9375}.van-loading__dot:nth-of-type(3){-webkit-transform:rotate(90deg);transform:rotate(90deg);opacity:.875}.van-loading__dot:nth-of-type(4){-webkit-transform:rotate(120deg);transform:rotate(120deg);opacity:.8125}.van-loading__dot:nth-of-type(5){-webkit-transform:rotate(150deg);transform:rotate(150deg);opacity:.75}.van-loading__dot:nth-of-type(6){-webkit-transform:rotate(180deg);transform:rotate(180deg);opacity:.6875}.van-loading__dot:nth-of-type(7){-webkit-transform:rotate(210deg);transform:rotate(210deg);opacity:.625}.van-loading__dot:nth-of-type(8){-webkit-transform:rotate(240deg);transform:rotate(240deg);opacity:.5625}.van-loading__dot:nth-of-type(9){-webkit-transform:rotate(270deg);transform:rotate(270deg);opacity:.5}.van-loading__dot:nth-of-type(10){-webkit-transform:rotate(300deg);transform:rotate(300deg);opacity:.4375}.van-loading__dot:nth-of-type(11){-webkit-transform:rotate(330deg);transform:rotate(330deg);opacity:.375}.van-loading__dot:nth-of-type(12){-webkit-transform:rotate(1turn);transform:rotate(1turn);opacity:.3125}@-webkit-keyframes van-rotate{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes van-rotate{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}
\ No newline at end of file
diff --git a/utils/dist/mixins/basic.d.ts b/utils/dist/mixins/basic.d.ts
new file mode 100644
index 0000000..b273369
--- /dev/null
+++ b/utils/dist/mixins/basic.d.ts
@@ -0,0 +1 @@
+export declare const basic: string;
diff --git a/utils/dist/mixins/basic.js b/utils/dist/mixins/basic.js
new file mode 100644
index 0000000..2fdd634
--- /dev/null
+++ b/utils/dist/mixins/basic.js
@@ -0,0 +1,22 @@
+export const basic = Behavior({
+ methods: {
+ $emit(...args) {
+ this.triggerEvent(...args);
+ },
+ getRect(selector, all) {
+ return new Promise(resolve => {
+ wx.createSelectorQuery()
+ .in(this)[all ? 'selectAll' : 'select'](selector)
+ .boundingClientRect(rect => {
+ if (all && Array.isArray(rect) && rect.length) {
+ resolve(rect);
+ }
+ if (!all && rect) {
+ resolve(rect);
+ }
+ })
+ .exec();
+ });
+ }
+ }
+});
diff --git a/utils/dist/mixins/button.d.ts b/utils/dist/mixins/button.d.ts
new file mode 100644
index 0000000..b51db87
--- /dev/null
+++ b/utils/dist/mixins/button.d.ts
@@ -0,0 +1 @@
+export declare const button: string;
diff --git a/utils/dist/mixins/button.js b/utils/dist/mixins/button.js
new file mode 100644
index 0000000..5d3b4dc
--- /dev/null
+++ b/utils/dist/mixins/button.js
@@ -0,0 +1,18 @@
+export const button = Behavior({
+ externalClasses: ['hover-class'],
+ properties: {
+ id: String,
+ lang: {
+ type: String,
+ value: 'en'
+ },
+ businessId: Number,
+ sessionFrom: String,
+ sendMessageTitle: String,
+ sendMessagePath: String,
+ sendMessageImg: String,
+ showMessageCard: Boolean,
+ appParameter: String,
+ ariaLabel: String
+ }
+});
diff --git a/utils/dist/mixins/link.d.ts b/utils/dist/mixins/link.d.ts
new file mode 100644
index 0000000..d58043b
--- /dev/null
+++ b/utils/dist/mixins/link.d.ts
@@ -0,0 +1 @@
+export declare const link: string;
diff --git a/utils/dist/mixins/link.js b/utils/dist/mixins/link.js
new file mode 100644
index 0000000..d7aed0c
--- /dev/null
+++ b/utils/dist/mixins/link.js
@@ -0,0 +1,17 @@
+export const link = Behavior({
+ properties: {
+ url: String,
+ linkType: {
+ type: String,
+ value: 'navigateTo'
+ }
+ },
+ methods: {
+ jumpLink(urlKey = 'url') {
+ const url = this.data[urlKey];
+ if (url) {
+ wx[this.data.linkType]({ url });
+ }
+ }
+ }
+});
diff --git a/utils/dist/mixins/observer/behavior.d.ts b/utils/dist/mixins/observer/behavior.d.ts
new file mode 100644
index 0000000..3da2a64
--- /dev/null
+++ b/utils/dist/mixins/observer/behavior.d.ts
@@ -0,0 +1 @@
+export declare const behavior: string;
diff --git a/utils/dist/mixins/observer/behavior.js b/utils/dist/mixins/observer/behavior.js
new file mode 100644
index 0000000..948f446
--- /dev/null
+++ b/utils/dist/mixins/observer/behavior.js
@@ -0,0 +1,14 @@
+export const behavior = Behavior({
+ methods: {
+ set(data, callback) {
+ return new Promise(resolve => {
+ this.setData(data, () => {
+ if (callback && typeof callback === 'function') {
+ callback.call(this);
+ }
+ resolve();
+ });
+ });
+ }
+ }
+});
diff --git a/utils/dist/mixins/observer/index.d.ts b/utils/dist/mixins/observer/index.d.ts
new file mode 100644
index 0000000..4e54b2e
--- /dev/null
+++ b/utils/dist/mixins/observer/index.d.ts
@@ -0,0 +1 @@
+export declare function observe(vantOptions: any, options: any): void;
diff --git a/utils/dist/mixins/observer/index.js b/utils/dist/mixins/observer/index.js
new file mode 100644
index 0000000..d6f608d
--- /dev/null
+++ b/utils/dist/mixins/observer/index.js
@@ -0,0 +1,19 @@
+import { behavior } from './behavior';
+export function observe(vantOptions, options) {
+ const { watch } = vantOptions;
+ options.behaviors.push(behavior);
+ if (watch) {
+ const props = options.properties || {};
+ Object.keys(watch).forEach(key => {
+ if (key in props) {
+ let prop = props[key];
+ if (prop === null || !('type' in prop)) {
+ prop = { type: prop };
+ }
+ prop.observer = watch[key];
+ props[key] = prop;
+ }
+ });
+ options.properties = props;
+ }
+}
diff --git a/utils/dist/mixins/open-type.d.ts b/utils/dist/mixins/open-type.d.ts
new file mode 100644
index 0000000..64b023d
--- /dev/null
+++ b/utils/dist/mixins/open-type.d.ts
@@ -0,0 +1 @@
+export declare const openType: string;
diff --git a/utils/dist/mixins/open-type.js b/utils/dist/mixins/open-type.js
new file mode 100644
index 0000000..514517e
--- /dev/null
+++ b/utils/dist/mixins/open-type.js
@@ -0,0 +1,25 @@
+export const openType = Behavior({
+ properties: {
+ openType: String
+ },
+ methods: {
+ bindGetUserInfo(event) {
+ this.$emit('getuserinfo', event.detail);
+ },
+ bindContact(event) {
+ this.$emit('contact', event.detail);
+ },
+ bindGetPhoneNumber(event) {
+ this.$emit('getphonenumber', event.detail);
+ },
+ bindError(event) {
+ this.$emit('error', event.detail);
+ },
+ bindLaunchApp(event) {
+ this.$emit('launchapp', event.detail);
+ },
+ bindOpenSetting(event) {
+ this.$emit('opensetting', event.detail);
+ },
+ }
+});
diff --git a/utils/dist/mixins/touch.d.ts b/utils/dist/mixins/touch.d.ts
new file mode 100644
index 0000000..35ee831
--- /dev/null
+++ b/utils/dist/mixins/touch.d.ts
@@ -0,0 +1 @@
+export declare const touch: string;
diff --git a/utils/dist/mixins/touch.js b/utils/dist/mixins/touch.js
new file mode 100644
index 0000000..2a79426
--- /dev/null
+++ b/utils/dist/mixins/touch.js
@@ -0,0 +1,35 @@
+const MIN_DISTANCE = 10;
+function getDirection(x, y) {
+ if (x > y && x > MIN_DISTANCE) {
+ return 'horizontal';
+ }
+ if (y > x && y > MIN_DISTANCE) {
+ return 'vertical';
+ }
+ return '';
+}
+export const touch = Behavior({
+ methods: {
+ resetTouchStatus() {
+ this.direction = '';
+ this.deltaX = 0;
+ this.deltaY = 0;
+ this.offsetX = 0;
+ this.offsetY = 0;
+ },
+ touchStart(event) {
+ this.resetTouchStatus();
+ const touch = event.touches[0];
+ this.startX = touch.clientX;
+ this.startY = touch.clientY;
+ },
+ touchMove(event) {
+ const touch = event.touches[0];
+ this.deltaX = touch.clientX - this.startX;
+ this.deltaY = touch.clientY - this.startY;
+ this.offsetX = Math.abs(this.deltaX);
+ this.offsetY = Math.abs(this.deltaY);
+ this.direction = this.direction || getDirection(this.offsetX, this.offsetY);
+ }
+ }
+});
diff --git a/utils/dist/mixins/transition.d.ts b/utils/dist/mixins/transition.d.ts
new file mode 100644
index 0000000..ee7b6ca
--- /dev/null
+++ b/utils/dist/mixins/transition.d.ts
@@ -0,0 +1 @@
+export declare const transition: (showDefaultValue: boolean) => any;
diff --git a/utils/dist/mixins/transition.js b/utils/dist/mixins/transition.js
new file mode 100644
index 0000000..a64df6a
--- /dev/null
+++ b/utils/dist/mixins/transition.js
@@ -0,0 +1,120 @@
+import { isObj } from '../common/utils';
+const getClassNames = (name) => ({
+ enter: `van-${name}-enter van-${name}-enter-active enter-class enter-active-class`,
+ 'enter-to': `van-${name}-enter-to van-${name}-enter-active enter-to-class enter-active-class`,
+ leave: `van-${name}-leave van-${name}-leave-active leave-class leave-active-class`,
+ 'leave-to': `van-${name}-leave-to van-${name}-leave-active leave-to-class leave-active-class`
+});
+const nextTick = () => new Promise(resolve => setTimeout(resolve, 1000 / 30));
+export const transition = function (showDefaultValue) {
+ return Behavior({
+ properties: {
+ customStyle: String,
+ // @ts-ignore
+ show: {
+ type: Boolean,
+ value: showDefaultValue,
+ observer: 'observeShow'
+ },
+ // @ts-ignore
+ duration: {
+ type: null,
+ value: 300,
+ observer: 'observeDuration'
+ },
+ name: {
+ type: String,
+ value: 'fade'
+ }
+ },
+ data: {
+ type: '',
+ inited: false,
+ display: false
+ },
+ attached() {
+ if (this.data.show) {
+ this.enter();
+ }
+ },
+ methods: {
+ observeShow(value) {
+ value ? this.enter() : this.leave();
+ },
+ enter() {
+ const { duration, name } = this.data;
+ const classNames = getClassNames(name);
+ const currentDuration = isObj(duration) ? duration.enter : duration;
+ this.status = 'enter';
+ this.$emit('before-enter');
+ Promise.resolve()
+ .then(nextTick)
+ .then(() => {
+ this.checkStatus('enter');
+ this.$emit('enter');
+ this.setData({
+ inited: true,
+ display: true,
+ classes: classNames.enter,
+ currentDuration
+ });
+ })
+ .then(nextTick)
+ .then(() => {
+ this.checkStatus('enter');
+ this.transitionEnded = false;
+ this.setData({
+ classes: classNames['enter-to']
+ });
+ })
+ .catch(() => { });
+ },
+ leave() {
+ if (!this.data.display) {
+ return;
+ }
+ const { duration, name } = this.data;
+ const classNames = getClassNames(name);
+ const currentDuration = isObj(duration) ? duration.leave : duration;
+ this.status = 'leave';
+ this.$emit('before-leave');
+ Promise.resolve()
+ .then(nextTick)
+ .then(() => {
+ this.checkStatus('leave');
+ this.$emit('leave');
+ this.setData({
+ classes: classNames.leave,
+ currentDuration
+ });
+ })
+ .then(nextTick)
+ .then(() => {
+ this.checkStatus('leave');
+ this.transitionEnded = false;
+ setTimeout(() => this.onTransitionEnd(), currentDuration);
+ this.setData({
+ classes: classNames['leave-to']
+ });
+ })
+ .catch(() => { });
+ },
+ checkStatus(status) {
+ if (status !== this.status) {
+ throw new Error(`incongruent status: ${status}`);
+ }
+ },
+ onTransitionEnd() {
+ if (this.transitionEnded) {
+ return;
+ }
+ this.transitionEnded = true;
+ this.$emit(`after-${this.status}`);
+ const { show, display } = this.data;
+ if (!show && display) {
+ this.setData({ display: false });
+ }
+ }
+ }
+ });
+};
diff --git a/utils/dist/nav-bar/index.d.ts b/utils/dist/nav-bar/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/nav-bar/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/nav-bar/index.js b/utils/dist/nav-bar/index.js
new file mode 100644
index 0000000..3acf41a
--- /dev/null
+++ b/utils/dist/nav-bar/index.js
@@ -0,0 +1,38 @@
+import { VantComponent } from '../common/component';
+VantComponent({
+ classes: ['title-class'],
+ props: {
+ title: String,
+ fixed: Boolean,
+ leftText: String,
+ rightText: String,
+ leftArrow: Boolean,
+ border: {
+ type: Boolean,
+ value: true
+ },
+ zIndex: {
+ type: Number,
+ value: 1
+ },
+ safeAreaInsetTop: {
+ type: Boolean,
+ value: true
+ },
+ },
+ data: {
+ statusBarHeight: 0
+ },
+ created() {
+ const { statusBarHeight } = wx.getSystemInfoSync();
+ this.setData({ statusBarHeight });
+ },
+ methods: {
+ onClickLeft() {
+ this.$emit('click-left');
+ },
+ onClickRight() {
+ this.$emit('click-right');
+ }
+ }
+});
diff --git a/utils/dist/nav-bar/index.json b/utils/dist/nav-bar/index.json
new file mode 100644
index 0000000..0a336c0
--- /dev/null
+++ b/utils/dist/nav-bar/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-icon": "../icon/index"
+ }
+}
diff --git a/utils/dist/nav-bar/index.wxml b/utils/dist/nav-bar/index.wxml
new file mode 100644
index 0000000..9ed4446
--- /dev/null
+++ b/utils/dist/nav-bar/index.wxml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+ {{ leftText }}
+
+
+
+
+ {{ title }}
+
+
+
+ {{ rightText }}
+
+
+
diff --git a/utils/dist/nav-bar/index.wxss b/utils/dist/nav-bar/index.wxss
new file mode 100644
index 0000000..be4ebb5
--- /dev/null
+++ b/utils/dist/nav-bar/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-nav-bar{position:relative;text-align:center;-webkit-user-select:none;user-select:none;height:44px;height:var(--nav-bar-height,44px);line-height:44px;line-height:var(--nav-bar-height,44px);background-color:#fff;background-color:var(--nav-bar-background-color,#fff)}.van-nav-bar__text{display:inline-block;vertical-align:middle;margin:0 -16px;margin:0 -var(--padding-md,16px);padding:0 16px;padding:0 var(--padding-md,16px);color:#1989fa;color:var(--nav-bar-text-color,#1989fa)}.van-nav-bar__text--hover{background-color:#f2f3f5;background-color:var(--active-color,#f2f3f5)}.van-nav-bar__arrow{vertical-align:middle;font-size:16px;font-size:var(--nav-bar-arrow-size,16px);color:#1989fa;color:var(--nav-bar-text-color,#1989fa)}.van-nav-bar__arrow+.van-nav-bar__text{margin-left:-20px;padding-left:25px}.van-nav-bar--fixed{position:fixed;top:0;left:0;width:100%}.van-nav-bar__title{max-width:60%;margin:0 auto;color:#323233;color:var(--nav-bar-title-text-color,#323233);font-weight:500;font-weight:var(--font-weight-bold,500);font-size:16px;font-size:var(--nav-bar-title-font-size,16px)}.van-nav-bar__left,.van-nav-bar__right{position:absolute;bottom:0;font-size:14px;font-size:var(--font-size-md,14px)}.van-nav-bar__left{left:16px;left:var(--padding-md,16px)}.van-nav-bar__right{right:16px;right:var(--padding-md,16px)}
\ No newline at end of file
diff --git a/utils/dist/notice-bar/index.d.ts b/utils/dist/notice-bar/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/notice-bar/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/notice-bar/index.js b/utils/dist/notice-bar/index.js
new file mode 100644
index 0000000..faf3567
--- /dev/null
+++ b/utils/dist/notice-bar/index.js
@@ -0,0 +1,123 @@
+import { VantComponent } from '../common/component';
+const FONT_COLOR = '#ed6a0c';
+const BG_COLOR = '#fffbe8';
+VantComponent({
+ props: {
+ text: {
+ type: String,
+ value: ''
+ },
+ mode: {
+ type: String,
+ value: ''
+ },
+ url: {
+ type: String,
+ value: ''
+ },
+ openType: {
+ type: String,
+ value: 'navigate'
+ },
+ delay: {
+ type: Number,
+ value: 1
+ },
+ speed: {
+ type: Number,
+ value: 50
+ },
+ scrollable: {
+ type: Boolean,
+ value: true
+ },
+ leftIcon: {
+ type: String,
+ value: ''
+ },
+ color: {
+ type: String,
+ value: FONT_COLOR
+ },
+ backgroundColor: {
+ type: String,
+ value: BG_COLOR
+ },
+ wrapable: Boolean
+ },
+ data: {
+ show: true
+ },
+ watch: {
+ text() {
+ this.setData({}, this.init);
+ }
+ },
+ created() {
+ this.resetAnimation = wx.createAnimation({
+ duration: 0,
+ timingFunction: 'linear'
+ });
+ },
+ destroyed() {
+ this.timer && clearTimeout(this.timer);
+ },
+ methods: {
+ init() {
+ Promise.all([
+ this.getRect('.van-notice-bar__content'),
+ this.getRect('.van-notice-bar__wrap')
+ ]).then((rects) => {
+ const [contentRect, wrapRect] = rects;
+ if (contentRect == null ||
+ wrapRect == null ||
+ !contentRect.width ||
+ !wrapRect.width) {
+ return;
+ }
+ const { speed, scrollable, delay } = this.data;
+ if (scrollable && wrapRect.width < contentRect.width) {
+ const duration = (contentRect.width / speed) * 1000;
+ this.wrapWidth = wrapRect.width;
+ this.contentWidth = contentRect.width;
+ this.duration = duration;
+ this.animation = wx.createAnimation({
+ duration,
+ timingFunction: 'linear',
+ delay
+ });
+ this.scroll();
+ }
+ });
+ },
+ scroll() {
+ this.timer && clearTimeout(this.timer);
+ this.timer = null;
+ this.setData({
+ animationData: this.resetAnimation
+ .translateX(this.wrapWidth)
+ .step()
+ .export()
+ });
+ setTimeout(() => {
+ this.setData({
+ animationData: this.animation
+ .translateX(-this.contentWidth)
+ .step()
+ .export()
+ });
+ }, 20);
+ this.timer = setTimeout(() => {
+ this.scroll();
+ }, this.duration);
+ },
+ onClickIcon() {
+ this.timer && clearTimeout(this.timer);
+ this.timer = null;
+ this.setData({ show: false });
+ },
+ onClick(event) {
+ this.$emit('click', event);
+ }
+ }
+});
diff --git a/utils/dist/notice-bar/index.json b/utils/dist/notice-bar/index.json
new file mode 100644
index 0000000..a9ab393
--- /dev/null
+++ b/utils/dist/notice-bar/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-icon": "../icon/index"
+ }
+}
\ No newline at end of file
diff --git a/utils/dist/notice-bar/index.wxml b/utils/dist/notice-bar/index.wxml
new file mode 100644
index 0000000..eb0851c
--- /dev/null
+++ b/utils/dist/notice-bar/index.wxml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+ {{ text }}
+
+
+
+
+
+
+
+
+
diff --git a/utils/dist/notice-bar/index.wxss b/utils/dist/notice-bar/index.wxss
new file mode 100644
index 0000000..6a49858
--- /dev/null
+++ b/utils/dist/notice-bar/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-notice-bar{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;height:40px;height:var(--notice-bar-height,40px);padding:0 16px;padding:var(--notice-bar-padding,0 16px);font-size:14px;font-size:var(--notice-bar-font-size,14px);color:#ed6a0c;color:var(--notice-bar-text-color,#ed6a0c);line-height:24px;line-height:var(--notice-bar-line-height,24px);background-color:#fffbe8;background-color:var(--notice-bar-background-color,#fffbe8)}.van-notice-bar--withicon{position:relative;padding-right:40px}.van-notice-bar--wrapable{height:auto;padding:8px 16px;padding:var(--notice-bar-wrapable-padding,8px 16px)}.van-notice-bar--wrapable .van-notice-bar__wrap{height:auto}.van-notice-bar--wrapable .van-notice-bar__content{position:relative;white-space:normal}.van-notice-bar__left-icon{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;margin-right:4px;vertical-align:middle}.van-notice-bar__left-icon,.van-notice-bar__right-icon{font-size:16px;font-size:var(--notice-bar-icon-size,16px);min-width:22px;min-width:var(--notice-bar-icon-min-width,22px)}.van-notice-bar__right-icon{position:absolute;top:10px;right:15px}.van-notice-bar__wrap{position:relative;-webkit-flex:1;flex:1;overflow:hidden;height:24px;height:var(--notice-bar-line-height,24px)}.van-notice-bar__content{position:absolute;white-space:nowrap}.van-notice-bar__content.van-ellipsis{max-width:100%}
\ No newline at end of file
diff --git a/utils/dist/notify/index.d.ts b/utils/dist/notify/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/notify/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/notify/index.js b/utils/dist/notify/index.js
new file mode 100644
index 0000000..db9ba76
--- /dev/null
+++ b/utils/dist/notify/index.js
@@ -0,0 +1,59 @@
+import { VantComponent } from '../common/component';
+import { WHITE } from '../common/color';
+VantComponent({
+ props: {
+ message: String,
+ background: String,
+ type: {
+ type: String,
+ value: 'danger'
+ },
+ color: {
+ type: String,
+ value: WHITE
+ },
+ duration: {
+ type: Number,
+ value: 3000
+ },
+ zIndex: {
+ type: Number,
+ value: 110
+ },
+ safeAreaInsetTop: {
+ type: Boolean,
+ value: false
+ }
+ },
+ created() {
+ const { statusBarHeight } = wx.getSystemInfoSync();
+ this.setData({ statusBarHeight });
+ },
+ methods: {
+ show() {
+ const { duration, onOpened } = this.data;
+ clearTimeout(this.timer);
+ this.setData({
+ show: true
+ }, onOpened);
+ if (duration > 0 && duration !== Infinity) {
+ this.timer = setTimeout(() => {
+ this.hide();
+ }, duration);
+ }
+ },
+ hide() {
+ const { onClose } = this.data;
+ clearTimeout(this.timer);
+ this.setData({
+ show: false
+ }, onClose);
+ },
+ onTap(event) {
+ const { onClick } = this.data;
+ if (onClick) {
+ onClick(event.detail);
+ }
+ }
+ }
+});
diff --git a/utils/dist/notify/index.json b/utils/dist/notify/index.json
new file mode 100644
index 0000000..c14a65f
--- /dev/null
+++ b/utils/dist/notify/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-transition": "../transition/index"
+ }
+}
diff --git a/utils/dist/notify/index.wxml b/utils/dist/notify/index.wxml
new file mode 100644
index 0000000..552b8e3
--- /dev/null
+++ b/utils/dist/notify/index.wxml
@@ -0,0 +1,15 @@
+
+
+
+ {{ message }}
+
+
diff --git a/utils/dist/notify/index.wxss b/utils/dist/notify/index.wxss
new file mode 100644
index 0000000..3b4aba6
--- /dev/null
+++ b/utils/dist/notify/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-notify{text-align:center;word-wrap:break-word;padding:6px 15px;padding:var(--notify-padding,6px 15px);font-size:14px;font-size:var(--notify-font-size,14px);line-height:20px;line-height:var(--notify-line-height,20px)}.van-notify__container{position:fixed;top:0;box-sizing:border-box;width:100%}.van-notify--primary{background-color:#1989fa;background-color:var(--notify-primary-background-color,#1989fa)}.van-notify--success{background-color:#07c160;background-color:var(--notify-success-background-color,#07c160)}.van-notify--danger{background-color:#ee0a24;background-color:var(--notify-danger-background-color,#ee0a24)}.van-notify--warning{background-color:#ff976a;background-color:var(--notify-warning-background-color,#ff976a)}
\ No newline at end of file
diff --git a/utils/dist/notify/notify.d.ts b/utils/dist/notify/notify.d.ts
new file mode 100644
index 0000000..671195a
--- /dev/null
+++ b/utils/dist/notify/notify.d.ts
@@ -0,0 +1,19 @@
+interface NotifyOptions {
+ type?: 'primary' | 'success' | 'danger' | 'warning';
+ color?: string;
+ zIndex?: number;
+ message: string;
+ context?: any;
+ duration?: number;
+ selector?: string;
+ background?: string;
+ safeAreaInsetTop?: boolean;
+ onClick?: () => void;
+ onOpened?: () => void;
+ onClose?: () => void;
+}
+declare function Notify(options: NotifyOptions | string): any;
+declare namespace Notify {
+ var clear: (options?: NotifyOptions) => void;
+}
+export default Notify;
diff --git a/utils/dist/notify/notify.js b/utils/dist/notify/notify.js
new file mode 100644
index 0000000..140690b
--- /dev/null
+++ b/utils/dist/notify/notify.js
@@ -0,0 +1,41 @@
+import { WHITE } from '../common/color';
+const defaultOptions = {
+ selector: '#van-notify',
+ type: 'danger',
+ message: '',
+ background: '',
+ duration: 3000,
+ zIndex: 110,
+ color: WHITE,
+ onClick: () => { },
+ onOpened: () => { },
+ onClose: () => { }
+};
+function parseOptions(message) {
+ return typeof message === 'string' ? { message } : message;
+}
+function getContext() {
+ const pages = getCurrentPages();
+ return pages[pages.length - 1];
+}
+export default function Notify(options) {
+ options = Object.assign({}, defaultOptions, parseOptions(options));
+ const context = options.context || getContext();
+ const notify = context.selectComponent(options.selector);
+ delete options.context;
+ delete options.selector;
+ if (notify) {
+ notify.set(options);
+ notify.show();
+ return notify;
+ }
+ console.warn('未找到 van-notify 节点,请确认 selector 及 context 是否正确');
+}
+Notify.clear = function (options) {
+ options = Object.assign({}, defaultOptions, parseOptions(options));
+ const context = options.context || getContext();
+ const notify = context.selectComponent(options.selector);
+ if (notify) {
+ notify.hide();
+ }
+};
diff --git a/utils/dist/overlay/index.d.ts b/utils/dist/overlay/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/overlay/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/overlay/index.js b/utils/dist/overlay/index.js
new file mode 100644
index 0000000..f579113
--- /dev/null
+++ b/utils/dist/overlay/index.js
@@ -0,0 +1,22 @@
+import { VantComponent } from '../common/component';
+VantComponent({
+ props: {
+ show: Boolean,
+ customStyle: String,
+ duration: {
+ type: null,
+ value: 300
+ },
+ zIndex: {
+ type: Number,
+ value: 1
+ }
+ },
+ methods: {
+ onClick() {
+ this.$emit('click');
+ },
+ // for prevent touchmove
+ noop() { }
+ }
+});
diff --git a/utils/dist/overlay/index.json b/utils/dist/overlay/index.json
new file mode 100644
index 0000000..c14a65f
--- /dev/null
+++ b/utils/dist/overlay/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-transition": "../transition/index"
+ }
+}
diff --git a/utils/dist/overlay/index.wxml b/utils/dist/overlay/index.wxml
new file mode 100644
index 0000000..9212348
--- /dev/null
+++ b/utils/dist/overlay/index.wxml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/utils/dist/overlay/index.wxss b/utils/dist/overlay/index.wxss
new file mode 100644
index 0000000..0f9df0e
--- /dev/null
+++ b/utils/dist/overlay/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.7);background-color:var(--overlay-background-color,rgba(0,0,0,.7))}
\ No newline at end of file
diff --git a/utils/dist/panel/index.d.ts b/utils/dist/panel/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/panel/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/panel/index.js b/utils/dist/panel/index.js
new file mode 100644
index 0000000..e624d5e
--- /dev/null
+++ b/utils/dist/panel/index.js
@@ -0,0 +1,10 @@
+import { VantComponent } from '../common/component';
+VantComponent({
+ classes: ['header-class', 'footer-class'],
+ props: {
+ desc: String,
+ title: String,
+ status: String,
+ useFooterSlot: Boolean
+ }
+});
diff --git a/utils/dist/panel/index.json b/utils/dist/panel/index.json
new file mode 100644
index 0000000..0e5425c
--- /dev/null
+++ b/utils/dist/panel/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-cell": "../cell/index"
+ }
+}
diff --git a/utils/dist/panel/index.wxml b/utils/dist/panel/index.wxml
new file mode 100644
index 0000000..3f135d2
--- /dev/null
+++ b/utils/dist/panel/index.wxml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/utils/dist/panel/index.wxss b/utils/dist/panel/index.wxss
new file mode 100644
index 0000000..ffd9df9
--- /dev/null
+++ b/utils/dist/panel/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-panel{background:#fff;background:var(--panel-background-color,#fff)}.van-panel__header-value{color:#ee0a24;color:var(--panel-header-value-color,#ee0a24)}.van-panel__footer{padding:8px 16px;padding:var(--panel-footer-padding,8px 16px)}
\ No newline at end of file
diff --git a/utils/dist/picker-column/index.d.ts b/utils/dist/picker-column/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/picker-column/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/picker-column/index.js b/utils/dist/picker-column/index.js
new file mode 100644
index 0000000..4a78299
--- /dev/null
+++ b/utils/dist/picker-column/index.js
@@ -0,0 +1,119 @@
+import { VantComponent } from '../common/component';
+import { isObj, range } from '../common/utils';
+const DEFAULT_DURATION = 200;
+VantComponent({
+ classes: ['active-class'],
+ props: {
+ valueKey: String,
+ className: String,
+ itemHeight: Number,
+ visibleItemCount: Number,
+ initialOptions: {
+ type: Array,
+ value: []
+ },
+ defaultIndex: {
+ type: Number,
+ value: 0
+ }
+ },
+ data: {
+ startY: 0,
+ offset: 0,
+ duration: 0,
+ startOffset: 0,
+ options: [],
+ currentIndex: 0
+ },
+ created() {
+ const { defaultIndex, initialOptions } = this.data;
+ this.set({
+ currentIndex: defaultIndex,
+ options: initialOptions
+ }).then(() => {
+ this.setIndex(defaultIndex);
+ });
+ },
+ watch: {
+ defaultIndex(value) {
+ this.setIndex(value);
+ }
+ },
+ methods: {
+ getCount() {
+ return this.data.options.length;
+ },
+ onTouchStart(event) {
+ this.setData({
+ startY: event.touches[0].clientY,
+ startOffset: this.data.offset,
+ duration: 0
+ });
+ },
+ onTouchMove(event) {
+ const { data } = this;
+ const deltaY = event.touches[0].clientY - data.startY;
+ this.setData({
+ offset: range(data.startOffset + deltaY, -(this.getCount() * data.itemHeight), data.itemHeight)
+ });
+ },
+ onTouchEnd() {
+ const { data } = this;
+ if (data.offset !== data.startOffset) {
+ this.setData({ duration: DEFAULT_DURATION });
+ const index = range(Math.round(-data.offset / data.itemHeight), 0, this.getCount() - 1);
+ this.setIndex(index, true);
+ }
+ },
+ onClickItem(event) {
+ const { index } = event.currentTarget.dataset;
+ this.setIndex(index, true);
+ },
+ adjustIndex(index) {
+ const { data } = this;
+ const count = this.getCount();
+ index = range(index, 0, count);
+ for (let i = index; i < count; i++) {
+ if (!this.isDisabled(data.options[i]))
+ return i;
+ }
+ for (let i = index - 1; i >= 0; i--) {
+ if (!this.isDisabled(data.options[i]))
+ return i;
+ }
+ },
+ isDisabled(option) {
+ return isObj(option) && option.disabled;
+ },
+ getOptionText(option) {
+ const { data } = this;
+ return isObj(option) && data.valueKey in option
+ ? option[data.valueKey]
+ : option;
+ },
+ setIndex(index, userAction) {
+ const { data } = this;
+ index = this.adjustIndex(index) || 0;
+ const offset = -index * data.itemHeight;
+ if (index !== data.currentIndex) {
+ return this.set({ offset, currentIndex: index }).then(() => {
+ userAction && this.$emit('change', index);
+ });
+ }
+ return this.set({ offset });
+ },
+ setValue(value) {
+ const { options } = this.data;
+ for (let i = 0; i < options.length; i++) {
+ if (this.getOptionText(options[i]) === value) {
+ return this.setIndex(i);
+ }
+ }
+ return Promise.resolve();
+ },
+ getValue() {
+ const { data } = this;
+ return data.options[data.currentIndex];
+ }
+ }
+});
diff --git a/utils/dist/picker-column/index.json b/utils/dist/picker-column/index.json
new file mode 100644
index 0000000..32640e0
--- /dev/null
+++ b/utils/dist/picker-column/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
\ No newline at end of file
diff --git a/utils/dist/picker-column/index.wxml b/utils/dist/picker-column/index.wxml
new file mode 100644
index 0000000..f052ed9
--- /dev/null
+++ b/utils/dist/picker-column/index.wxml
@@ -0,0 +1,22 @@
+
+
+
+
+ {{ getOptionText(option, valueKey) }}
+
+
diff --git a/utils/dist/picker-column/index.wxs b/utils/dist/picker-column/index.wxs
new file mode 100644
index 0000000..3c8fc68
--- /dev/null
+++ b/utils/dist/picker-column/index.wxs
@@ -0,0 +1,8 @@
+function isObj(x) {
+ var type = typeof x;
+ return x !== null && (type === 'object' || type === 'function');
+}
+
+module.exports = function (option, valueKey) {
+ return isObj(option) && option[valueKey] != null ? option[valueKey] : option;
+}
diff --git a/utils/dist/picker-column/index.wxss b/utils/dist/picker-column/index.wxss
new file mode 100644
index 0000000..c5c6910
--- /dev/null
+++ b/utils/dist/picker-column/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-picker-column{overflow:hidden;text-align:center;color:#000;color:var(--picker-option-text-color,#000);font-size:16px;font-size:var(--picker-option-font-size,16px)}.van-picker-column__item{padding:0 5px}.van-picker-column__item--selected{font-weight:500;font-weight:var(--font-weight-bold,500);color:#323233;color:var(--picker-option-selected-text-color,#323233)}.van-picker-column__item--disabled{opacity:.3;opacity:var(--picker-option-disabled-opacity,.3)}
\ No newline at end of file
diff --git a/utils/dist/picker/index.d.ts b/utils/dist/picker/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/picker/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/picker/index.js b/utils/dist/picker/index.js
new file mode 100644
index 0000000..8e78e66
--- /dev/null
+++ b/utils/dist/picker/index.js
@@ -0,0 +1,135 @@
+import { VantComponent } from '../common/component';
+import { pickerProps } from './shared';
+VantComponent({
+ classes: ['active-class', 'toolbar-class', 'column-class'],
+ props: Object.assign(Object.assign({}, pickerProps), { valueKey: {
+ type: String,
+ value: 'text'
+ }, toolbarPosition: {
+ type: String,
+ value: 'top'
+ }, defaultIndex: {
+ type: Number,
+ value: 0
+ }, columns: {
+ type: Array,
+ value: [],
+ observer(columns = []) {
+ this.simple = columns.length && !columns[0].values;
+ this.children = this.selectAllComponents('.van-picker__column');
+ if (Array.isArray(this.children) && this.children.length) {
+ this.setColumns().catch(() => { });
+ }
+ }
+ } }),
+ beforeCreate() {
+ this.children = [];
+ },
+ methods: {
+ noop() { },
+ setColumns() {
+ const { data } = this;
+ const columns = this.simple ? [{ values: data.columns }] : data.columns;
+ const stack = columns.map((column, index) => this.setColumnValues(index, column.values));
+ return Promise.all(stack);
+ },
+ emit(event) {
+ const { type } = event.currentTarget.dataset;
+ if (this.simple) {
+ this.$emit(type, {
+ value: this.getColumnValue(0),
+ index: this.getColumnIndex(0)
+ });
+ }
+ else {
+ this.$emit(type, {
+ value: this.getValues(),
+ index: this.getIndexes()
+ });
+ }
+ },
+ onChange(event) {
+ if (this.simple) {
+ this.$emit('change', {
+ picker: this,
+ value: this.getColumnValue(0),
+ index: this.getColumnIndex(0)
+ });
+ }
+ else {
+ this.$emit('change', {
+ picker: this,
+ value: this.getValues(),
+ index: event.currentTarget.dataset.index
+ });
+ }
+ },
+ // get column instance by index
+ getColumn(index) {
+ return this.children[index];
+ },
+ // get column value by index
+ getColumnValue(index) {
+ const column = this.getColumn(index);
+ return column && column.getValue();
+ },
+ // set column value by index
+ setColumnValue(index, value) {
+ const column = this.getColumn(index);
+ if (column == null) {
+ return Promise.reject(new Error('setColumnValue: 对应列不存在'));
+ }
+ return column.setValue(value);
+ },
+ // get column option index by column index
+ getColumnIndex(columnIndex) {
+ return (this.getColumn(columnIndex) || {}).data.currentIndex;
+ },
+ // set column option index by column index
+ setColumnIndex(columnIndex, optionIndex) {
+ const column = this.getColumn(columnIndex);
+ if (column == null) {
+ return Promise.reject(new Error('setColumnIndex: 对应列不存在'));
+ }
+ return column.setIndex(optionIndex);
+ },
+ // get options of column by index
+ getColumnValues(index) {
+ return (this.children[index] || {}).data.options;
+ },
+ // set options of column by index
+ setColumnValues(index, options, needReset = true) {
+ const column = this.children[index];
+ if (column == null) {
+ return Promise.reject(new Error('setColumnValues: 对应列不存在'));
+ }
+ const isSame = JSON.stringify(column.data.options) === JSON.stringify(options);
+ if (isSame) {
+ return Promise.resolve();
+ }
+ return column.set({ options }).then(() => {
+ if (needReset) {
+ column.setIndex(0);
+ }
+ });
+ },
+ // get values of all columns
+ getValues() {
+ return this.children.map((child) => child.getValue());
+ },
+ // set values of all columns
+ setValues(values) {
+ const stack = values.map((value, index) => this.setColumnValue(index, value));
+ return Promise.all(stack);
+ },
+ // get indexes of all columns
+ getIndexes() {
+ return this.children.map((child) => child.data.currentIndex);
+ },
+ // set indexes of all columns
+ setIndexes(indexes) {
+ const stack = indexes.map((optionIndex, columnIndex) => this.setColumnIndex(columnIndex, optionIndex));
+ return Promise.all(stack);
+ }
+ }
+});
diff --git a/utils/dist/picker/index.json b/utils/dist/picker/index.json
new file mode 100644
index 0000000..2fcec89
--- /dev/null
+++ b/utils/dist/picker/index.json
@@ -0,0 +1,7 @@
+{
+ "component": true,
+ "usingComponents": {
+ "picker-column": "../picker-column/index",
+ "loading": "../loading/index"
+ }
+}
diff --git a/utils/dist/picker/index.wxml b/utils/dist/picker/index.wxml
new file mode 100644
index 0000000..6631a73
--- /dev/null
+++ b/utils/dist/picker/index.wxml
@@ -0,0 +1,65 @@
+
+
+
+ {{ cancelButtonText }}
+
+ {{ title }}
+
+ {{ confirmButtonText }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ function isSimple(columns) {
+ return columns.length && !columns[0].values;
+ }
+ module.exports = isSimple;
+
diff --git a/utils/dist/picker/index.wxss b/utils/dist/picker/index.wxss
new file mode 100644
index 0000000..f23a940
--- /dev/null
+++ b/utils/dist/picker/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-picker{position:relative;overflow:hidden;-webkit-text-size-adjust:100%;-webkit-user-select:none;user-select:none;background-color:#fff;background-color:var(--picker-background-color,#fff)}.van-picker__toolbar{display:-webkit-flex;display:flex;-webkit-justify-content:space-between;justify-content:space-between;height:44px;height:var(--picker-toolbar-height,44px);line-height:44px;line-height:var(--picker-toolbar-height,44px)}.van-picker__cancel,.van-picker__confirm{padding:0 16px;padding:var(--picker-action-padding,0 16px);font-size:14px;font-size:var(--picker-action-font-size,14px);color:#1989fa;color:var(--picker-action-text-color,#1989fa)}.van-picker__cancel--hover,.van-picker__confirm--hover{background-color:#f2f3f5;background-color:var(--picker-action-active-color,#f2f3f5)}.van-picker__title{max-width:50%;text-align:center;font-weight:500;font-weight:var(--font-weight-bold,500);font-size:16px;font-size:var(--picker-option-font-size,16px)}.van-picker__columns{position:relative;display:-webkit-flex;display:flex}.van-picker__column{-webkit-flex:1 1;flex:1 1;width:0}.van-picker__loading{position:absolute;top:0;right:0;bottom:0;left:0;z-index:4;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;background-color:hsla(0,0%,100%,.9);background-color:var(--picker-loading-mask-color,hsla(0,0%,100%,.9))}.van-picker__frame,.van-picker__loading .van-loading{position:absolute;top:50%;left:0;z-index:1;width:100%;-webkit-transform:translateY(-50%);transform:translateY(-50%);pointer-events:none}
\ No newline at end of file
diff --git a/utils/dist/picker/shared.d.ts b/utils/dist/picker/shared.d.ts
new file mode 100644
index 0000000..c548045
--- /dev/null
+++ b/utils/dist/picker/shared.d.ts
@@ -0,0 +1,21 @@
+export declare const pickerProps: {
+ title: StringConstructor;
+ loading: BooleanConstructor;
+ showToolbar: BooleanConstructor;
+ cancelButtonText: {
+ type: StringConstructor;
+ value: string;
+ };
+ confirmButtonText: {
+ type: StringConstructor;
+ value: string;
+ };
+ visibleItemCount: {
+ type: NumberConstructor;
+ value: number;
+ };
+ itemHeight: {
+ type: NumberConstructor;
+ value: number;
+ };
+};
diff --git a/utils/dist/picker/shared.js b/utils/dist/picker/shared.js
new file mode 100644
index 0000000..cf57d1d
--- /dev/null
+++ b/utils/dist/picker/shared.js
@@ -0,0 +1,21 @@
+export const pickerProps = {
+ title: String,
+ loading: Boolean,
+ showToolbar: Boolean,
+ cancelButtonText: {
+ type: String,
+ value: '取消'
+ },
+ confirmButtonText: {
+ type: String,
+ value: '确认'
+ },
+ visibleItemCount: {
+ type: Number,
+ value: 5
+ },
+ itemHeight: {
+ type: Number,
+ value: 44
+ }
+};
diff --git a/utils/dist/popup/index.d.ts b/utils/dist/popup/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/popup/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/popup/index.js b/utils/dist/popup/index.js
new file mode 100644
index 0000000..4a2e7af
--- /dev/null
+++ b/utils/dist/popup/index.js
@@ -0,0 +1,80 @@
+import { VantComponent } from '../common/component';
+import { transition } from '../mixins/transition';
+VantComponent({
+ classes: [
+ 'enter-class',
+ 'enter-active-class',
+ 'enter-to-class',
+ 'leave-class',
+ 'leave-active-class',
+ 'leave-to-class'
+ ],
+ mixins: [transition(false)],
+ props: {
+ round: Boolean,
+ closeable: Boolean,
+ customStyle: String,
+ overlayStyle: String,
+ transition: {
+ type: String,
+ observer: 'observeClass'
+ },
+ zIndex: {
+ type: Number,
+ value: 100
+ },
+ overlay: {
+ type: Boolean,
+ value: true
+ },
+ closeIcon: {
+ type: String,
+ value: 'cross'
+ },
+ closeIconPosition: {
+ type: String,
+ value: 'top-right'
+ },
+ closeOnClickOverlay: {
+ type: Boolean,
+ value: true
+ },
+ position: {
+ type: String,
+ value: 'center',
+ observer: 'observeClass'
+ },
+ safeAreaInsetBottom: {
+ type: Boolean,
+ value: true
+ },
+ safeAreaInsetTop: {
+ type: Boolean,
+ value: false
+ }
+ },
+ created() {
+ this.observeClass();
+ },
+ methods: {
+ onClickCloseIcon() {
+ this.$emit('close');
+ },
+ onClickOverlay() {
+ this.$emit('click-overlay');
+ if (this.data.closeOnClickOverlay) {
+ this.$emit('close');
+ }
+ },
+ observeClass() {
+ const { transition, position } = this.data;
+ const updateData = {
+ name: transition || position
+ };
+ if (transition === 'none') {
+ updateData.duration = 0;
+ }
+ this.setData(updateData);
+ }
+ }
+});
diff --git a/utils/dist/popup/index.json b/utils/dist/popup/index.json
new file mode 100644
index 0000000..88a6eab
--- /dev/null
+++ b/utils/dist/popup/index.json
@@ -0,0 +1,7 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-icon": "../icon/index",
+ "van-overlay": "../overlay/index"
+ }
+}
diff --git a/utils/dist/popup/index.wxml b/utils/dist/popup/index.wxml
new file mode 100644
index 0000000..a384686
--- /dev/null
+++ b/utils/dist/popup/index.wxml
@@ -0,0 +1,24 @@
+
+
+
+
diff --git a/utils/dist/popup/index.wxss b/utils/dist/popup/index.wxss
new file mode 100644
index 0000000..6e477ac
--- /dev/null
+++ b/utils/dist/popup/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-popup{position:fixed;box-sizing:border-box;max-height:100%;overflow-y:auto;transition-timing-function:ease;-webkit-animation:ease both;animation:ease both;-webkit-overflow-scrolling:touch;background-color:#fff;background-color:var(--popup-background-color,#fff)}.van-popup--center{top:50%;left:50%;-webkit-transform:translate3d(-50%,-50%,0);transform:translate3d(-50%,-50%,0)}.van-popup--center.van-popup--round{border-radius:20px;border-radius:var(--popup-round-border-radius,20px)}.van-popup--top{top:0;left:0;width:100%}.van-popup--top.van-popup--round{border-radius:0 0 20px 20px;border-radius:0 0 var(--popup-round-border-radius,20px) var(--popup-round-border-radius,20px)}.van-popup--right{top:50%;right:0;-webkit-transform:translate3d(0,-50%,0);transform:translate3d(0,-50%,0)}.van-popup--right.van-popup--round{border-radius:20px 0 0 20px;border-radius:var(--popup-round-border-radius,20px) 0 0 var(--popup-round-border-radius,20px)}.van-popup--bottom{bottom:0;left:0;width:100%}.van-popup--bottom.van-popup--round{border-radius:20px 20px 0 0;border-radius:var(--popup-round-border-radius,20px) var(--popup-round-border-radius,20px) 0 0}.van-popup--left{top:50%;left:0;-webkit-transform:translate3d(0,-50%,0);transform:translate3d(0,-50%,0)}.van-popup--left.van-popup--round{border-radius:0 20px 20px 0;border-radius:0 var(--popup-round-border-radius,20px) var(--popup-round-border-radius,20px) 0}.van-popup--bottom.van-popup--safe{padding-bottom:env(safe-area-inset-bottom)}.van-popup--safeTop{padding-top:env(safe-area-inset-top)}.van-popup__close-icon{position:absolute;z-index:1;z-index:var(--popup-close-icon-z-index,1);color:#969799;color:var(--popup-close-icon-color,#969799);font-size:18px;font-size:var(--popup-close-icon-size,18px)}.van-popup__close-icon--top-left{top:16px;top:var(--popup-close-icon-margin,16px);left:16px;left:var(--popup-close-icon-margin,16px)}.van-popup__close-icon--top-right{top:16px;top:var(--popup-close-icon-margin,16px);right:16px;right:var(--popup-close-icon-margin,16px)}.van-popup__close-icon--bottom-left{bottom:16px;bottom:var(--popup-close-icon-margin,16px);left:16px;left:var(--popup-close-icon-margin,16px)}.van-popup__close-icon--bottom-right{right:16px;right:var(--popup-close-icon-margin,16px);bottom:16px;bottom:var(--popup-close-icon-margin,16px)}.van-popup__close-icon:active{opacity:.6}.van-scale-enter-active,.van-scale-leave-active{transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}.van-scale-enter,.van-scale-leave-to{-webkit-transform:translate3d(-50%,-50%,0) scale(.7);transform:translate3d(-50%,-50%,0) scale(.7);opacity:0}.van-fade-enter-active,.van-fade-leave-active{transition-property:opacity}.van-fade-enter,.van-fade-leave-to{opacity:0}.van-center-enter-active,.van-center-leave-active{transition-property:opacity}.van-center-enter,.van-center-leave-to{opacity:0}.van-bottom-enter-active,.van-bottom-leave-active,.van-left-enter-active,.van-left-leave-active,.van-right-enter-active,.van-right-leave-active,.van-top-enter-active,.van-top-leave-active{transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform}.van-bottom-enter,.van-bottom-leave-to{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}.van-top-enter,.van-top-leave-to{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}.van-left-enter,.van-left-leave-to{-webkit-transform:translate3d(-100%,-50%,0);transform:translate3d(-100%,-50%,0)}.van-right-enter,.van-right-leave-to{-webkit-transform:translate3d(100%,-50%,0);transform:translate3d(100%,-50%,0)}
\ No newline at end of file
diff --git a/utils/dist/progress/index.d.ts b/utils/dist/progress/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/progress/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/progress/index.js b/utils/dist/progress/index.js
new file mode 100644
index 0000000..6ca67bd
--- /dev/null
+++ b/utils/dist/progress/index.js
@@ -0,0 +1,38 @@
+import { VantComponent } from '../common/component';
+import { BLUE } from '../common/color';
+import { addUnit } from '../common/utils';
+VantComponent({
+ props: {
+ inactive: Boolean,
+ percentage: Number,
+ pivotText: String,
+ pivotColor: String,
+ trackColor: String,
+ showPivot: {
+ type: Boolean,
+ value: true
+ },
+ color: {
+ type: String,
+ value: BLUE
+ },
+ textColor: {
+ type: String,
+ value: '#fff'
+ },
+ strokeWidth: {
+ type: null,
+ observer: 'setStrokeWidthUnit'
+ }
+ },
+ data: {
+ strokeWidthUnit: '4px'
+ },
+ methods: {
+ setStrokeWidthUnit(val) {
+ this.setData({
+ strokeWidthUnit: addUnit(val)
+ });
+ }
+ }
+});
diff --git a/utils/dist/progress/index.json b/utils/dist/progress/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/utils/dist/progress/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/utils/dist/progress/index.wxml b/utils/dist/progress/index.wxml
new file mode 100644
index 0000000..5d27517
--- /dev/null
+++ b/utils/dist/progress/index.wxml
@@ -0,0 +1,19 @@
+
+
+
+
+
+ {{ getters.text(pivotText, percentage) }}
+
+
+
diff --git a/utils/dist/progress/index.wxs b/utils/dist/progress/index.wxs
new file mode 100644
index 0000000..d685345
--- /dev/null
+++ b/utils/dist/progress/index.wxs
@@ -0,0 +1,5 @@
+module.exports = {
+ text: function(pivotText, percentage) {
+ return pivotText || percentage + '%';
+ }
+};
diff --git a/utils/dist/progress/index.wxss b/utils/dist/progress/index.wxss
new file mode 100644
index 0000000..33c62c7
--- /dev/null
+++ b/utils/dist/progress/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-progress{position:relative;height:4px;height:var(--progress-height,4px);border-radius:4px;border-radius:var(--progress-height,4px);background:#ebedf0;background:var(--progress-background-color,#ebedf0)}.van-progress__portion{position:absolute;left:0;height:100%;border-radius:inherit;background:#1989fa;background:var(--progress-color,#1989fa)}.van-progress__pivot{position:absolute;top:50%;right:0;box-sizing:border-box;min-width:2em;text-align:center;word-break:keep-all;border-radius:1em;-webkit-transform:translateY(-50%);transform:translateY(-50%);color:#fff;color:var(--progress-pivot-text-color,#fff);padding:0 5px;padding:var(--progress-pivot-padding,0 5px);font-size:10px;font-size:var(--progress-pivot-font-size,10px);line-height:1.6;line-height:var(--progress-pivot-line-height,1.6);background-color:#1989fa;background-color:var(--progress-pivot-background-color,#1989fa)}
\ No newline at end of file
diff --git a/utils/dist/radio-group/index.d.ts b/utils/dist/radio-group/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/radio-group/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/radio-group/index.js b/utils/dist/radio-group/index.js
new file mode 100644
index 0000000..e4c69e3
--- /dev/null
+++ b/utils/dist/radio-group/index.js
@@ -0,0 +1,38 @@
+import { VantComponent } from '../common/component';
+VantComponent({
+ field: true,
+ relation: {
+ name: 'radio',
+ type: 'descendant',
+ linked(target) {
+ this.children = this.children || [];
+ this.children.push(target);
+ this.updateChild(target);
+ },
+ unlinked(target) {
+ this.children = this.children.filter((child) => child !== target);
+ }
+ },
+ props: {
+ value: {
+ type: null,
+ observer: 'updateChildren'
+ },
+ disabled: {
+ type: Boolean,
+ observer: 'updateChildren'
+ }
+ },
+ methods: {
+ updateChildren() {
+ (this.children || []).forEach((child) => this.updateChild(child));
+ },
+ updateChild(child) {
+ const { value, disabled } = this.data;
+ child.setData({
+ value,
+ disabled: disabled || child.data.disabled
+ });
+ }
+ }
+});
diff --git a/utils/dist/radio-group/index.json b/utils/dist/radio-group/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/utils/dist/radio-group/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/utils/dist/radio-group/index.wxml b/utils/dist/radio-group/index.wxml
new file mode 100644
index 0000000..4fa864c
--- /dev/null
+++ b/utils/dist/radio-group/index.wxml
@@ -0,0 +1 @@
+
diff --git a/utils/dist/radio-group/index.wxss b/utils/dist/radio-group/index.wxss
new file mode 100644
index 0000000..99694d6
--- /dev/null
+++ b/utils/dist/radio-group/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';
\ No newline at end of file
diff --git a/utils/dist/radio/index.d.ts b/utils/dist/radio/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/radio/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/radio/index.js b/utils/dist/radio/index.js
new file mode 100644
index 0000000..c3b5165
--- /dev/null
+++ b/utils/dist/radio/index.js
@@ -0,0 +1,60 @@
+import { VantComponent } from '../common/component';
+import { addUnit } from '../common/utils';
+VantComponent({
+ field: true,
+ relation: {
+ name: 'radio-group',
+ type: 'ancestor',
+ linked(target) {
+ this.parent = target;
+ },
+ unlinked() {
+ this.parent = null;
+ }
+ },
+ classes: ['icon-class', 'label-class'],
+ props: {
+ value: null,
+ disabled: Boolean,
+ useIconSlot: Boolean,
+ checkedColor: String,
+ labelPosition: {
+ type: String,
+ value: 'right'
+ },
+ labelDisabled: Boolean,
+ shape: {
+ type: String,
+ value: 'round'
+ },
+ iconSize: {
+ type: null,
+ observer: 'setIconSizeUnit'
+ }
+ },
+ data: {
+ iconSizeWithUnit: '20px'
+ },
+ methods: {
+ setIconSizeUnit(val) {
+ this.setData({
+ iconSizeWithUnit: addUnit(val)
+ });
+ },
+ emitChange(value) {
+ const instance = this.parent || this;
+ instance.$emit('input', value);
+ instance.$emit('change', value);
+ },
+ onChange(event) {
+ console.log(event);
+ this.emitChange(this.data.name);
+ },
+ onClickLabel() {
+ const { disabled, labelDisabled, name } = this.data;
+ if (!disabled && !labelDisabled) {
+ this.emitChange(name);
+ }
+ }
+ }
+});
diff --git a/utils/dist/radio/index.json b/utils/dist/radio/index.json
new file mode 100644
index 0000000..0a336c0
--- /dev/null
+++ b/utils/dist/radio/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-icon": "../icon/index"
+ }
+}
diff --git a/utils/dist/radio/index.wxml b/utils/dist/radio/index.wxml
new file mode 100644
index 0000000..3b64f3f
--- /dev/null
+++ b/utils/dist/radio/index.wxml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/utils/dist/radio/index.wxss b/utils/dist/radio/index.wxss
new file mode 100644
index 0000000..7fbec3e
--- /dev/null
+++ b/utils/dist/radio/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-radio{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;overflow:hidden;-webkit-user-select:none;user-select:none}.van-radio__icon-wrap{-webkit-flex:none;flex:none}.van-radio__icon{display:block;box-sizing:border-box;width:1em;height:1em;color:transparent;text-align:center;transition-property:color,border-color,background-color;border:1px solid #c8c9cc;border:1px solid var(--radio-border-color,#c8c9cc);font-size:20px;font-size:var(--radio-size,20px);transition-duration:.2s;transition-duration:var(--radio-transition-duration,.2s)}.van-radio__icon--round{border-radius:100%}.van-radio__icon--checked{color:#fff;color:var(--white,#fff);background-color:#1989fa;background-color:var(--radio-checked-icon-color,#1989fa);border-color:#1989fa;border-color:var(--radio-checked-icon-color,#1989fa)}.van-radio__icon--disabled{background-color:#ebedf0;background-color:var(--radio-disabled-background-color,#ebedf0);border-color:#c8c9cc;border-color:var(--radio-disabled-icon-color,#c8c9cc)}.van-radio__icon--disabled.van-radio__icon--checked{color:#c8c9cc;color:var(--radio-disabled-icon-color,#c8c9cc)}.van-radio__label{word-wrap:break-word;margin-left:10px;margin-left:var(--radio-label-margin,10px);color:#323233;color:var(--radio-label-color,#323233);line-height:20px;line-height:var(--radio-size,20px)}.van-radio__label--left{float:left;margin:0 10px 0 0;margin:0 var(--radio-label-margin,10px) 0 0}.van-radio__label--disabled{color:#c8c9cc;color:var(--radio-disabled-label-color,#c8c9cc)}.van-radio__label:empty{margin:0}
\ No newline at end of file
diff --git a/utils/dist/rate/index.d.ts b/utils/dist/rate/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/rate/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/rate/index.js b/utils/dist/rate/index.js
new file mode 100644
index 0000000..288ec71
--- /dev/null
+++ b/utils/dist/rate/index.js
@@ -0,0 +1,95 @@
+import { VantComponent } from '../common/component';
+import { addUnit } from '../common/utils';
+VantComponent({
+ field: true,
+ classes: ['icon-class'],
+ props: {
+ value: Number,
+ readonly: Boolean,
+ disabled: Boolean,
+ allowHalf: Boolean,
+ size: {
+ type: null,
+ observer: 'setSizeWithUnit'
+ },
+ icon: {
+ type: String,
+ value: 'star'
+ },
+ voidIcon: {
+ type: String,
+ value: 'star-o'
+ },
+ color: {
+ type: String,
+ value: '#ffd21e'
+ },
+ voidColor: {
+ type: String,
+ value: '#c7c7c7'
+ },
+ disabledColor: {
+ type: String,
+ value: '#bdbdbd'
+ },
+ count: {
+ type: Number,
+ value: 5
+ },
+ gutter: {
+ type: null,
+ observer: 'setGutterWithUnit'
+ },
+ touchable: {
+ type: Boolean,
+ value: true
+ }
+ },
+ data: {
+ innerValue: 0,
+ gutterWithUnit: undefined,
+ sizeWithUnit: null
+ },
+ watch: {
+ value(value) {
+ if (value !== this.data.innerValue) {
+ this.setData({ innerValue: value });
+ }
+ }
+ },
+ methods: {
+ setGutterWithUnit(val) {
+ this.setData({
+ gutterWithUnit: addUnit(val)
+ });
+ },
+ setSizeWithUnit(size) {
+ this.setData({
+ sizeWithUnit: addUnit(size)
+ });
+ },
+ onSelect(event) {
+ const { data } = this;
+ const { score } = event.currentTarget.dataset;
+ if (!data.disabled && !data.readonly) {
+ this.setData({ innerValue: score + 1 });
+ this.$emit('input', score + 1);
+ this.$emit('change', score + 1);
+ }
+ },
+ onTouchMove(event) {
+ const { touchable } = this.data;
+ if (!touchable)
+ return;
+ const { clientX } = event.touches[0];
+ this.getRect('.van-rate__icon', true).then((list) => {
+ const target = list
+ .sort(item => item.right - item.left)
+ .find(item => clientX >= item.left && clientX <= item.right);
+ if (target != null) {
+ this.onSelect(Object.assign(Object.assign({}, event), { currentTarget: target }));
+ }
+ });
+ }
+ }
+});
diff --git a/utils/dist/rate/index.json b/utils/dist/rate/index.json
new file mode 100644
index 0000000..0a336c0
--- /dev/null
+++ b/utils/dist/rate/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-icon": "../icon/index"
+ }
+}
diff --git a/utils/dist/rate/index.wxml b/utils/dist/rate/index.wxml
new file mode 100644
index 0000000..72defd6
--- /dev/null
+++ b/utils/dist/rate/index.wxml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
diff --git a/utils/dist/rate/index.wxss b/utils/dist/rate/index.wxss
new file mode 100644
index 0000000..6fd3435
--- /dev/null
+++ b/utils/dist/rate/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-rate{display:-webkit-inline-flex;display:inline-flex;-webkit-user-select:none;user-select:none}.van-rate__item{position:relative;padding:0 2px;padding:0 var(--rate-horizontal-padding,2px)}.van-rate__icon{display:block;height:1em;font-size:20px;font-size:var(--rate-icon-size,20px)}.van-rate__icon--half{position:absolute;top:0;width:.5em;overflow:hidden;left:2px;left:var(--rate-horizontal-padding,2px)}
\ No newline at end of file
diff --git a/utils/dist/row/index.d.ts b/utils/dist/row/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/row/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/row/index.js b/utils/dist/row/index.js
new file mode 100644
index 0000000..d7c8ba4
--- /dev/null
+++ b/utils/dist/row/index.js
@@ -0,0 +1,36 @@
+import { VantComponent } from '../common/component';
+VantComponent({
+ relation: {
+ name: 'col',
+ type: 'descendant',
+ linked(target) {
+ if (this.data.gutter) {
+ target.setGutter(this.data.gutter);
+ }
+ }
+ },
+ props: {
+ gutter: Number
+ },
+ watch: {
+ gutter: 'setGutter'
+ },
+ mounted() {
+ if (this.data.gutter) {
+ this.setGutter();
+ }
+ },
+ methods: {
+ setGutter() {
+ const { gutter } = this.data;
+ const margin = `-${Number(gutter) / 2}px`;
+ const style = gutter
+ ? `margin-right: ${margin}; margin-left: ${margin};`
+ : '';
+ this.setData({ style });
+ this.getRelationNodes('../col/index').forEach(col => {
+ col.setGutter(this.data.gutter);
+ });
+ }
+ }
+});
diff --git a/utils/dist/row/index.json b/utils/dist/row/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/utils/dist/row/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/utils/dist/row/index.wxml b/utils/dist/row/index.wxml
new file mode 100644
index 0000000..20c5366
--- /dev/null
+++ b/utils/dist/row/index.wxml
@@ -0,0 +1,3 @@
+
+
+
diff --git a/utils/dist/row/index.wxss b/utils/dist/row/index.wxss
new file mode 100644
index 0000000..32a098b
--- /dev/null
+++ b/utils/dist/row/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-row:after{display:table;clear:both;content:""}
\ No newline at end of file
diff --git a/utils/dist/search/index.d.ts b/utils/dist/search/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/search/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/search/index.js b/utils/dist/search/index.js
new file mode 100644
index 0000000..931dd6c
--- /dev/null
+++ b/utils/dist/search/index.js
@@ -0,0 +1,73 @@
+import { VantComponent } from '../common/component';
+VantComponent({
+ field: true,
+ classes: ['field-class', 'input-class', 'cancel-class'],
+ props: {
+ label: String,
+ focus: Boolean,
+ error: Boolean,
+ disabled: Boolean,
+ readonly: Boolean,
+ inputAlign: String,
+ showAction: Boolean,
+ useActionSlot: Boolean,
+ useLeftIconSlot: Boolean,
+ useRightIconSlot: Boolean,
+ leftIcon: {
+ type: String,
+ value: 'search'
+ },
+ rightIcon: String,
+ placeholder: String,
+ placeholderStyle: String,
+ actionText: {
+ type: String,
+ value: '取消'
+ },
+ background: {
+ type: String,
+ value: '#ffffff'
+ },
+ maxlength: {
+ type: Number,
+ value: -1
+ },
+ shape: {
+ type: String,
+ value: 'square'
+ },
+ clearable: {
+ type: Boolean,
+ value: true
+ }
+ },
+ methods: {
+ onChange(event) {
+ this.setData({ value: event.detail });
+ this.$emit('change', event.detail);
+ },
+ onCancel() {
+ /**
+ * 修复修改输入框值时,输入框失焦和赋值同时触发,赋值失效
+ * https://github.com/youzan/@vant/weapp/issues/1768
+ */
+ setTimeout(() => {
+ this.setData({ value: '' });
+ this.$emit('cancel');
+ this.$emit('change', '');
+ }, 200);
+ },
+ onSearch() {
+ this.$emit('search', this.data.value);
+ },
+ onFocus() {
+ this.$emit('focus');
+ },
+ onBlur() {
+ this.$emit('blur');
+ },
+ onClear() {
+ this.$emit('clear');
+ },
+ }
+});
diff --git a/utils/dist/search/index.json b/utils/dist/search/index.json
new file mode 100644
index 0000000..b4cfe91
--- /dev/null
+++ b/utils/dist/search/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-field": "../field/index"
+ }
+}
diff --git a/utils/dist/search/index.wxml b/utils/dist/search/index.wxml
new file mode 100644
index 0000000..1d0e6f1
--- /dev/null
+++ b/utils/dist/search/index.wxml
@@ -0,0 +1,50 @@
+
+
+
+
+ {{ label }}
+
+
+
+
+
+
+
+
+
+
+ {{ actionText }}
+
+
diff --git a/utils/dist/search/index.wxss b/utils/dist/search/index.wxss
new file mode 100644
index 0000000..32247c5
--- /dev/null
+++ b/utils/dist/search/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-search{-webkit-align-items:center;align-items:center;box-sizing:border-box;padding:10px 12px;padding:var(--search-padding,10px 12px)}.van-search,.van-search__content{display:-webkit-flex;display:flex}.van-search__content{-webkit-flex:1;flex:1;padding-left:8px;padding-left:var(--padding-xs,8px);border-radius:2px;border-radius:var(--border-radius-sm,2px);background-color:#f7f8fa;background-color:var(--search-background-color,#f7f8fa)}.van-search__content--round{border-radius:17px;border-radius:calc(var(--search-input-height, 34px)/2)}.van-search__label{padding:0 5px;padding:var(--search-label-padding,0 5px);font-size:14px;font-size:var(--search-label-font-size,14px);line-height:34px;line-height:var(--search-input-height,34px);color:#323233;color:var(--search-label-color,#323233)}.van-search__field{-webkit-flex:1;flex:1}.van-search__field__left-icon{color:#969799;color:var(--search-left-icon-color,#969799)}.van-search--withaction{padding-right:0}.van-search__action{padding:0 8px;padding:var(--search-action-padding,0 8px);font-size:14px;font-size:var(--search-action-font-size,14px);line-height:34px;line-height:var(--search-input-height,34px);color:#323233;color:var(--search-action-text-color,#323233)}.van-search__action--hover{background-color:#f2f3f5;background-color:var(--active-color,#f2f3f5)}
\ No newline at end of file
diff --git a/utils/dist/sidebar-item/index.d.ts b/utils/dist/sidebar-item/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/sidebar-item/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/sidebar-item/index.js b/utils/dist/sidebar-item/index.js
new file mode 100644
index 0000000..ecdaa08
--- /dev/null
+++ b/utils/dist/sidebar-item/index.js
@@ -0,0 +1,36 @@
+import { VantComponent } from '../common/component';
+VantComponent({
+ classes: [
+ 'active-class',
+ 'disabled-class',
+ ],
+ relation: {
+ type: 'ancestor',
+ name: 'sidebar',
+ linked(target) {
+ this.parent = target;
+ }
+ },
+ props: {
+ dot: Boolean,
+ info: null,
+ title: String,
+ disabled: Boolean
+ },
+ methods: {
+ onClick() {
+ const { parent } = this;
+ if (!parent || this.data.disabled) {
+ return;
+ }
+ const index = parent.children.indexOf(this);
+ parent.setActive(index).then(() => {
+ this.$emit('click', index);
+ parent.$emit('change', index);
+ });
+ },
+ setActive(selected) {
+ return this.setData({ selected });
+ }
+ }
+});
diff --git a/utils/dist/sidebar-item/index.json b/utils/dist/sidebar-item/index.json
new file mode 100644
index 0000000..bf0ebe0
--- /dev/null
+++ b/utils/dist/sidebar-item/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-info": "../info/index"
+ }
+}
diff --git a/utils/dist/sidebar-item/index.wxml b/utils/dist/sidebar-item/index.wxml
new file mode 100644
index 0000000..f68e864
--- /dev/null
+++ b/utils/dist/sidebar-item/index.wxml
@@ -0,0 +1,18 @@
+
+
+
diff --git a/utils/dist/sidebar-item/index.wxss b/utils/dist/sidebar-item/index.wxss
new file mode 100644
index 0000000..36d2bf4
--- /dev/null
+++ b/utils/dist/sidebar-item/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-sidebar-item{display:block;box-sizing:border-box;overflow:hidden;word-wrap:break-word;border-left:3px solid transparent;-webkit-user-select:none;user-select:none;padding:20px 12px 20px 8px;padding:var(--sidebar-padding,20px 12px 20px 8px);font-size:14px;font-size:var(--sidebar-font-size,14px);line-height:20px;line-height:var(--sidebar-line-height,20px);color:#323233;color:var(--sidebar-text-color,#323233);background-color:#fafafa;background-color:var(--sidebar-background-color,#fafafa)}.van-sidebar-item__text{position:relative;display:inline-block}.van-sidebar-item--hover:not(.van-sidebar-item--disabled){background-color:#f2f3f5;background-color:var(--sidebar-active-color,#f2f3f5)}.van-sidebar-item:after{border-bottom-width:1px}.van-sidebar-item--selected{color:#323233;color:var(--sidebar-selected-text-color,#323233);font-weight:500;font-weight:var(--sidebar-selected-font-weight,500);border-color:#ee0a24;border-color:var(--sidebar-selected-border-color,#ee0a24)}.van-sidebar-item--selected:after{border-right-width:1px}.van-sidebar-item--selected,.van-sidebar-item--selected.van-sidebar-item--hover{background-color:#fff;background-color:var(--sidebar-selected-background-color,#fff)}.van-sidebar-item--disabled{color:#c8c9cc;color:var(--sidebar-disabled-text-color,#c8c9cc)}
\ No newline at end of file
diff --git a/utils/dist/sidebar/index.d.ts b/utils/dist/sidebar/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/sidebar/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/sidebar/index.js b/utils/dist/sidebar/index.js
new file mode 100644
index 0000000..326faf5
--- /dev/null
+++ b/utils/dist/sidebar/index.js
@@ -0,0 +1,43 @@
+import { VantComponent } from '../common/component';
+VantComponent({
+ relation: {
+ name: 'sidebar-item',
+ type: 'descendant',
+ linked(target) {
+ this.children.push(target);
+ this.setActive(this.data.activeKey);
+ },
+ unlinked(target) {
+ this.children = this.children.filter((item) => item !== target);
+ this.setActive(this.data.activeKey);
+ }
+ },
+ props: {
+ activeKey: {
+ type: Number,
+ value: 0,
+ observer: 'setActive'
+ }
+ },
+ beforeCreate() {
+ this.children = [];
+ this.currentActive = -1;
+ },
+ methods: {
+ setActive(activeKey) {
+ const { children, currentActive } = this;
+ if (!children.length) {
+ return Promise.resolve();
+ }
+ this.currentActive = activeKey;
+ const stack = [];
+ if (currentActive !== activeKey && children[currentActive]) {
+ stack.push(children[currentActive].setActive(false));
+ }
+ if (children[activeKey]) {
+ stack.push(children[activeKey].setActive(true));
+ }
+ return Promise.all(stack);
+ }
+ }
+});
diff --git a/utils/dist/sidebar/index.json b/utils/dist/sidebar/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/utils/dist/sidebar/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/utils/dist/sidebar/index.wxml b/utils/dist/sidebar/index.wxml
new file mode 100644
index 0000000..e64c19c
--- /dev/null
+++ b/utils/dist/sidebar/index.wxml
@@ -0,0 +1,3 @@
+
diff --git a/utils/dist/sidebar/index.wxss b/utils/dist/sidebar/index.wxss
new file mode 100644
index 0000000..ba3ba94
--- /dev/null
+++ b/utils/dist/sidebar/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-sidebar{width:85px;width:var(--sidebar-width,85px)}
\ No newline at end of file
diff --git a/utils/dist/skeleton/index.d.ts b/utils/dist/skeleton/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/skeleton/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/skeleton/index.js b/utils/dist/skeleton/index.js
new file mode 100644
index 0000000..4092bbd
--- /dev/null
+++ b/utils/dist/skeleton/index.js
@@ -0,0 +1,41 @@
+import { VantComponent } from '../common/component';
+VantComponent({
+ props: {
+ row: {
+ type: Number,
+ value: 0
+ },
+ title: Boolean,
+ avatar: Boolean,
+ loading: {
+ type: Boolean,
+ value: true
+ },
+ animate: {
+ type: Boolean,
+ value: true
+ },
+ avatarSize: {
+ type: String,
+ value: '32px'
+ },
+ avatarShape: {
+ type: String,
+ value: 'round'
+ },
+ titleWidth: {
+ type: String,
+ value: '40%'
+ },
+ rowWidth: {
+ type: null,
+ value: '100%',
+ observer(val) {
+ this.setData({ isArray: val instanceof Array });
+ }
+ }
+ },
+ data: {
+ isArray: false
+ }
+});
diff --git a/utils/dist/skeleton/index.json b/utils/dist/skeleton/index.json
new file mode 100644
index 0000000..e8cfaaf
--- /dev/null
+++ b/utils/dist/skeleton/index.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/utils/dist/skeleton/index.wxml b/utils/dist/skeleton/index.wxml
new file mode 100644
index 0000000..1177370
--- /dev/null
+++ b/utils/dist/skeleton/index.wxml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/utils/dist/skeleton/index.wxss b/utils/dist/skeleton/index.wxss
new file mode 100644
index 0000000..565b26e
--- /dev/null
+++ b/utils/dist/skeleton/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-skeleton{display:-webkit-flex;display:flex;box-sizing:border-box;width:100%;padding:0 16px;padding:var(--skeleton-padding,0 16px)}.van-skeleton__avatar{-webkit-flex-shrink:0;flex-shrink:0;margin-right:16px;margin-right:var(--padding-md,16px);background-color:#f2f3f5;background-color:var(--skeleton-avatar-background-color,#f2f3f5)}.van-skeleton__avatar--round{border-radius:100%}.van-skeleton__content{-webkit-flex:1;flex:1}.van-skeleton__avatar+.van-skeleton__content{padding-top:8px;padding-top:var(--padding-xs,8px)}.van-skeleton__row,.van-skeleton__title{height:16px;height:var(--skeleton-row-height,16px);background-color:#f2f3f5;background-color:var(--skeleton-row-background-color,#f2f3f5)}.van-skeleton__title{margin:0}.van-skeleton__row:not(:first-child){margin-top:12px;margin-top:var(--skeleton-row-margin-top,12px)}.van-skeleton__title+.van-skeleton__row{margin-top:20px}.van-skeleton--animate{-webkit-animation:van-skeleton-blink 1.2s ease-in-out infinite;animation:van-skeleton-blink 1.2s ease-in-out infinite}@-webkit-keyframes van-skeleton-blink{50%{opacity:.6}}@keyframes van-skeleton-blink{50%{opacity:.6}}
\ No newline at end of file
diff --git a/utils/dist/slider/index.d.ts b/utils/dist/slider/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/slider/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/slider/index.js b/utils/dist/slider/index.js
new file mode 100644
index 0000000..971e15e
--- /dev/null
+++ b/utils/dist/slider/index.js
@@ -0,0 +1,107 @@
+import { VantComponent } from '../common/component';
+import { touch } from '../mixins/touch';
+import { addUnit } from '../common/utils';
+VantComponent({
+ mixins: [touch],
+ props: {
+ disabled: Boolean,
+ useButtonSlot: Boolean,
+ activeColor: String,
+ inactiveColor: String,
+ max: {
+ type: Number,
+ value: 100
+ },
+ min: {
+ type: Number,
+ value: 0
+ },
+ step: {
+ type: Number,
+ value: 1
+ },
+ value: {
+ type: Number,
+ value: 0
+ },
+ barHeight: {
+ type: null,
+ value: '2px'
+ }
+ },
+ watch: {
+ value(value) {
+ this.updateValue(value, false);
+ }
+ },
+ created() {
+ this.updateValue(this.data.value);
+ },
+ methods: {
+ onTouchStart(event) {
+ if (this.data.disabled)
+ return;
+ this.touchStart(event);
+ this.startValue = this.format(this.data.value);
+ this.dragStatus = 'start';
+ },
+ onTouchMove(event) {
+ if (this.data.disabled)
+ return;
+ if (this.dragStatus === 'start') {
+ this.$emit('drag-start');
+ }
+ this.touchMove(event);
+ this.dragStatus = 'draging';
+ this.getRect('.van-slider').then((rect) => {
+ const diff = this.deltaX / rect.width * 100;
+ this.newValue = this.startValue + diff;
+ this.updateValue(this.newValue, false, true);
+ });
+ },
+ onTouchEnd() {
+ if (this.data.disabled)
+ return;
+ if (this.dragStatus === 'draging') {
+ this.updateValue(this.newValue, true);
+ this.$emit('drag-end');
+ }
+ },
+ onClick(event) {
+ if (this.data.disabled)
+ return;
+ const { min } = this.data;
+ this.getRect('.van-slider').then((rect) => {
+ const value = (event.detail.x - rect.left) / rect.width * this.getRange() + min;
+ this.updateValue(value, true);
+ });
+ },
+ updateValue(value, end, drag) {
+ value = this.format(value);
+ const { barHeight, min } = this.data;
+ const width = `${((value - min) * 100) / this.getRange()}%`;
+ this.setData({
+ value,
+ barStyle: `
+ width: ${width};
+ height: ${addUnit(barHeight)};
+ ${drag ? 'transition: none;' : ''}
+ `,
+ });
+ if (drag) {
+ this.$emit('drag', { value });
+ }
+ if (end) {
+ this.$emit('change', value);
+ }
+ },
+ getRange() {
+ const { max, min } = this.data;
+ return max - min;
+ },
+ format(value) {
+ const { max, min, step } = this.data;
+ return Math.round(Math.max(min, Math.min(value, max)) / step) * step;
+ }
+ }
+});
diff --git a/utils/dist/slider/index.json b/utils/dist/slider/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/utils/dist/slider/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/utils/dist/slider/index.wxml b/utils/dist/slider/index.wxml
new file mode 100644
index 0000000..d30d078
--- /dev/null
+++ b/utils/dist/slider/index.wxml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/utils/dist/slider/index.wxss b/utils/dist/slider/index.wxss
new file mode 100644
index 0000000..7886b60
--- /dev/null
+++ b/utils/dist/slider/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-slider{position:relative;border-radius:999px;border-radius:var(--border-radius-max,999px);background-color:#ebedf0;background-color:var(--slider-inactive-background-color,#ebedf0)}.van-slider:before{position:absolute;right:0;left:0;content:"";top:-8px;top:-var(--padding-xs,8px);bottom:-8px;bottom:-var(--padding-xs,8px)}.van-slider__bar{position:relative;border-radius:inherit;transition:width .2s;transition:width var(--animation-duration-fast,.2s);background-color:#1989fa;background-color:var(--slider-active-background-color,#1989fa)}.van-slider__button{width:24px;height:24px;border-radius:50%;box-shadow:0 1px 2px rgba(0,0,0,.5);background-color:#fff;background-color:var(--slider-button-background-color,#fff)}.van-slider__button-wrapper{position:absolute;top:50%;right:0;-webkit-transform:translate3d(50%,-50%,0);transform:translate3d(50%,-50%,0)}.van-slider--disabled{opacity:.5}
\ No newline at end of file
diff --git a/utils/dist/stepper/index.d.ts b/utils/dist/stepper/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/stepper/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/stepper/index.js b/utils/dist/stepper/index.js
new file mode 100644
index 0000000..c242588
--- /dev/null
+++ b/utils/dist/stepper/index.js
@@ -0,0 +1,172 @@
+import { VantComponent } from '../common/component';
+import { addUnit, isDef } from '../common/utils';
+const LONG_PRESS_START_TIME = 600;
+const LONG_PRESS_INTERVAL = 200;
+// add num and avoid float number
+function add(num1, num2) {
+ const cardinal = Math.pow(10, 10);
+ return Math.round((num1 + num2) * cardinal) / cardinal;
+}
+VantComponent({
+ field: true,
+ classes: ['input-class', 'plus-class', 'minus-class'],
+ props: {
+ value: null,
+ integer: Boolean,
+ disabled: Boolean,
+ inputWidth: null,
+ buttonSize: null,
+ asyncChange: Boolean,
+ disableInput: Boolean,
+ decimalLength: {
+ type: Number,
+ value: null
+ },
+ min: {
+ type: null,
+ value: 1
+ },
+ max: {
+ type: null,
+ value: Number.MAX_SAFE_INTEGER
+ },
+ step: {
+ type: null,
+ value: 1
+ },
+ showPlus: {
+ type: Boolean,
+ value: true
+ },
+ showMinus: {
+ type: Boolean,
+ value: true
+ },
+ disablePlus: Boolean,
+ disableMinus: Boolean
+ },
+ watch: {
+ value(value) {
+ if (value === '') {
+ return;
+ }
+ const newValue = this.range(value);
+ if (typeof newValue === 'number' && +this.data.value !== newValue) {
+ this.setData({ value: newValue });
+ }
+ },
+ inputWidth() {
+ this.set({
+ inputStyle: this.computeInputStyle()
+ });
+ },
+ buttonSize() {
+ this.set({
+ inputStyle: this.computeInputStyle(),
+ buttonStyle: this.computeButtonStyle()
+ });
+ }
+ },
+ data: {
+ focus: false,
+ inputStyle: '',
+ buttonStyle: ''
+ },
+ created() {
+ this.setData({
+ value: this.range(this.data.value)
+ });
+ },
+ methods: {
+ isDisabled(type) {
+ if (type === 'plus') {
+ return this.data.disabled || this.data.disablePlus || this.data.value >= this.data.max;
+ }
+ return this.data.disabled || this.data.disableMinus || this.data.value <= this.data.min;
+ },
+ onFocus(event) {
+ this.$emit('focus', event.detail);
+ },
+ onBlur(event) {
+ const value = this.range(this.data.value);
+ this.triggerInput(value);
+ this.$emit('blur', event.detail);
+ },
+ // limit value range
+ range(value) {
+ value = String(value).replace(/[^0-9.-]/g, '');
+ // format range
+ value = value === '' ? 0 : +value;
+ value = Math.max(Math.min(this.data.max, value), this.data.min);
+ // format decimal
+ if (isDef(this.data.decimalLength)) {
+ value = value.toFixed(this.data.decimalLength);
+ }
+ return value;
+ },
+ onInput(event) {
+ const { value = '' } = event.detail || {};
+ this.triggerInput(value);
+ },
+ onChange() {
+ const { type } = this;
+ if (this.isDisabled(type)) {
+ this.$emit('overlimit', type);
+ return;
+ }
+ const diff = type === 'minus' ? -this.data.step : +this.data.step;
+ const value = add(+this.data.value, diff);
+ this.triggerInput(this.range(value));
+ this.$emit(type);
+ },
+ longPressStep() {
+ this.longPressTimer = setTimeout(() => {
+ this.onChange();
+ this.longPressStep();
+ }, LONG_PRESS_INTERVAL);
+ },
+ onTap(event) {
+ const { type } = event.currentTarget.dataset;
+ this.type = type;
+ this.onChange();
+ },
+ onTouchStart(event) {
+ clearTimeout(this.longPressTimer);
+ const { type } = event.currentTarget.dataset;
+ this.type = type;
+ this.isLongPress = false;
+ this.longPressTimer = setTimeout(() => {
+ this.isLongPress = true;
+ this.onChange();
+ this.longPressStep();
+ }, LONG_PRESS_START_TIME);
+ },
+ onTouchEnd() {
+ clearTimeout(this.longPressTimer);
+ },
+ triggerInput(value) {
+ this.setData({
+ value: this.data.asyncChange ? this.data.value : value
+ });
+ this.$emit('change', value);
+ },
+ computeInputStyle() {
+ let style = '';
+ if (this.data.inputWidth) {
+ style = `width: ${addUnit(this.data.inputWidth)};`;
+ }
+ if (this.data.buttonSize) {
+ style += `height: ${addUnit(this.data.buttonSize)};`;
+ }
+ return style;
+ },
+ computeButtonStyle() {
+ let style = '';
+ const size = addUnit(this.data.buttonSize);
+ if (this.data.buttonSize) {
+ style = `width: ${size};height: ${size};`;
+ }
+ return style;
+ }
+ }
+});
diff --git a/utils/dist/stepper/index.json b/utils/dist/stepper/index.json
new file mode 100644
index 0000000..32640e0
--- /dev/null
+++ b/utils/dist/stepper/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
\ No newline at end of file
diff --git a/utils/dist/stepper/index.wxml b/utils/dist/stepper/index.wxml
new file mode 100644
index 0000000..456ccce
--- /dev/null
+++ b/utils/dist/stepper/index.wxml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
diff --git a/utils/dist/stepper/index.wxss b/utils/dist/stepper/index.wxss
new file mode 100644
index 0000000..5da5b79
--- /dev/null
+++ b/utils/dist/stepper/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-stepper{font-size:0}.van-stepper__minus,.van-stepper__plus{position:relative;display:inline-block;box-sizing:border-box;margin:1px;vertical-align:middle;border:0;background-color:#f2f3f5;background-color:var(--stepper-background-color,#f2f3f5);color:#323233;color:var(--stepper-button-icon-color,#323233);width:28px;width:var(--stepper-input-height,28px);height:28px;height:var(--stepper-input-height,28px);padding:4px;padding:var(--padding-base,4px)}.van-stepper__minus:before,.van-stepper__plus:before{width:9px;height:1px}.van-stepper__minus:after,.van-stepper__plus:after{width:1px;height:9px}.van-stepper__minus:after,.van-stepper__minus:before,.van-stepper__plus:after,.van-stepper__plus:before{position:absolute;top:0;right:0;bottom:0;left:0;margin:auto;background-color:currentColor;content:""}.van-stepper__minus--hover,.van-stepper__plus--hover{background-color:#e8e8e8;background-color:var(--stepper-active-color,#e8e8e8)}.van-stepper__minus--disabled,.van-stepper__plus--disabled{color:#c8c9cc;color:var(--stepper-button-disabled-icon-color,#c8c9cc)}.van-stepper__minus--disabled,.van-stepper__minus--disabled.van-stepper__minus--hover,.van-stepper__minus--disabled.van-stepper__plus--hover,.van-stepper__plus--disabled,.van-stepper__plus--disabled.van-stepper__minus--hover,.van-stepper__plus--disabled.van-stepper__plus--hover{background-color:#f7f8fa;background-color:var(--stepper-button-disabled-color,#f7f8fa)}.van-stepper__minus{border-radius:4px 0 0 4px;border-radius:var(--stepper-border-radius,4px) 0 0 var(--stepper-border-radius,4px)}.van-stepper__minus:after{display:none}.van-stepper__plus{border-radius:0 4px 4px 0;border-radius:0 var(--stepper-border-radius,4px) var(--stepper-border-radius,4px) 0}.van-stepper__input{display:inline-block;box-sizing:border-box;min-height:0;margin:1px;padding:1px;text-align:center;vertical-align:middle;border:0;border-width:1px 0;border-radius:0;-webkit-appearance:none;font-size:14px;font-size:var(--stepper-input-font-size,14px);color:#323233;color:var(--stepper-input-text-color,#323233);background-color:#f2f3f5;background-color:var(--stepper-background-color,#f2f3f5);width:32px;width:var(--stepper-input-width,32px);height:28px;height:var(--stepper-input-height,28px)}.van-stepper__input--disabled{color:#c8c9cc;color:var(--stepper-input-disabled-text-color,#c8c9cc);background-color:#f2f3f5;background-color:var(--stepper-input-disabled-background-color,#f2f3f5)}
\ No newline at end of file
diff --git a/utils/dist/steps/index.d.ts b/utils/dist/steps/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/steps/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/steps/index.js b/utils/dist/steps/index.js
new file mode 100644
index 0000000..14b5f30
--- /dev/null
+++ b/utils/dist/steps/index.js
@@ -0,0 +1,22 @@
+import { VantComponent } from '../common/component';
+import { GREEN } from '../common/color';
+VantComponent({
+ props: {
+ icon: String,
+ steps: Array,
+ active: Number,
+ direction: {
+ type: String,
+ value: 'horizontal'
+ },
+ activeColor: {
+ type: String,
+ value: GREEN
+ },
+ activeIcon: {
+ type: String,
+ value: 'checked'
+ },
+ inactiveIcon: String
+ }
+});
diff --git a/utils/dist/steps/index.json b/utils/dist/steps/index.json
new file mode 100644
index 0000000..0a336c0
--- /dev/null
+++ b/utils/dist/steps/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-icon": "../icon/index"
+ }
+}
diff --git a/utils/dist/steps/index.wxml b/utils/dist/steps/index.wxml
new file mode 100644
index 0000000..9e280d8
--- /dev/null
+++ b/utils/dist/steps/index.wxml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+ {{ item.text }}
+ {{ item.desc }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function get(index, active) {
+ if (index < active) {
+ return 'finish';
+ } else if (index === active) {
+ return 'process';
+ }
+
+ return '';
+}
+
+module.exports = get;
+
diff --git a/utils/dist/steps/index.wxss b/utils/dist/steps/index.wxss
new file mode 100644
index 0000000..2c50b1a
--- /dev/null
+++ b/utils/dist/steps/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-steps{overflow:hidden;background-color:#fff;background-color:var(--steps-background-color,#fff)}.van-steps--horizontal{padding:10px}.van-steps--horizontal .van-step__wrapper{position:relative;display:-webkit-flex;display:flex;overflow:hidden}.van-steps--vertical{padding-left:10px}.van-steps--vertical .van-step__wrapper{padding:0 0 0 20px}.van-step{position:relative;-webkit-flex:1;flex:1;font-size:14px;font-size:var(--step-font-size,14px);color:#969799;color:var(--step-text-color,#969799)}.van-step--finish{color:#323233;color:var(--step-finish-text-color,#323233)}.van-step__circle{border-radius:50%;width:5px;width:var(--step-circle-size,5px);height:5px;height:var(--step-circle-size,5px);background-color:#969799;background-color:var(--step-circle-color,#969799)}.van-step--horizontal{padding-bottom:14px}.van-step--horizontal:first-child .van-step__title{-webkit-transform:none;transform:none}.van-step--horizontal:first-child .van-step__circle-container{padding:0 8px 0 0;-webkit-transform:translate3d(0,50%,0);transform:translate3d(0,50%,0)}.van-step--horizontal:last-child{position:absolute;right:0;width:auto}.van-step--horizontal:last-child .van-step__title{text-align:right;-webkit-transform:none;transform:none}.van-step--horizontal:last-child .van-step__circle-container{right:0;padding:0 0 0 8px;-webkit-transform:translate3d(0,50%,0);transform:translate3d(0,50%,0)}.van-step--horizontal .van-step__circle-container{position:absolute;bottom:6px;z-index:1;-webkit-transform:translate3d(-50%,50%,0);transform:translate3d(-50%,50%,0);background-color:#fff;background-color:var(--white,#fff);padding:0 8px;padding:0 var(--padding-xs,8px)}.van-step--horizontal .van-step__title{display:inline-block;-webkit-transform:translate3d(-50%,0,0);transform:translate3d(-50%,0,0);font-size:12px;font-size:var(--step-horizontal-title-font-size,12px)}.van-step--horizontal .van-step__line{position:absolute;right:0;bottom:6px;left:0;height:1px;-webkit-transform:translate3d(0,50%,0);transform:translate3d(0,50%,0);background-color:#ebedf0;background-color:var(--step-line-color,#ebedf0)}.van-step--horizontal.van-step--process{color:#323233;color:var(--step-process-text-color,#323233)}.van-step--horizontal.van-step--process .van-step__icon{display:block;line-height:1;font-size:12px;font-size:var(--step-icon-size,12px)}.van-step--vertical{padding:10px 10px 10px 0;line-height:18px}.van-step--vertical:after{border-bottom-width:1px}.van-step--vertical:last-child:after{border-bottom-width:none}.van-step--vertical:first-child:before{position:absolute;top:0;left:-15px;z-index:1;width:1px;height:20px;content:"";background-color:#fff;background-color:var(--white,#fff)}.van-step--vertical .van-step__circle,.van-step--vertical .van-step__icon,.van-step--vertical .van-step__line{position:absolute;top:19px;left:-14px;z-index:2;-webkit-transform:translate3d(-50%,-50%,0);transform:translate3d(-50%,-50%,0)}.van-step--vertical .van-step__icon{line-height:1;font-size:12px;font-size:var(--step-icon-size,12px)}.van-step--vertical .van-step__line{z-index:1;width:1px;height:100%;-webkit-transform:translate3d(-50%,0,0);transform:translate3d(-50%,0,0);background-color:#ebedf0;background-color:var(--step-line-color,#ebedf0)}
\ No newline at end of file
diff --git a/utils/dist/sticky/index.d.ts b/utils/dist/sticky/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/sticky/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/sticky/index.js b/utils/dist/sticky/index.js
new file mode 100644
index 0000000..6b904a9
--- /dev/null
+++ b/utils/dist/sticky/index.js
@@ -0,0 +1,140 @@
+import { VantComponent } from '../common/component';
+const ROOT_ELEMENT = '.van-sticky';
+VantComponent({
+ props: {
+ zIndex: {
+ type: Number,
+ value: 99
+ },
+ offsetTop: {
+ type: Number,
+ value: 0,
+ observer: 'observeContent'
+ },
+ disabled: {
+ type: Boolean,
+ observer(value) {
+ if (!this.mounted) {
+ return;
+ }
+ value ? this.disconnectObserver() : this.initObserver();
+ }
+ },
+ container: {
+ type: null,
+ observer(target) {
+ if (typeof target !== 'function' || !this.data.height) {
+ return;
+ }
+ this.observeContainer();
+ }
+ }
+ },
+ data: {
+ wrapStyle: '',
+ containerStyle: ''
+ },
+ methods: {
+ setStyle() {
+ const { offsetTop, height, fixed, zIndex } = this.data;
+ if (fixed) {
+ this.setData({
+ wrapStyle: `top: ${offsetTop}px;`,
+ containerStyle: `height: ${height}px; z-index: ${zIndex};`
+ });
+ }
+ else {
+ this.setData({
+ wrapStyle: '',
+ containerStyle: ''
+ });
+ }
+ },
+ getContainerRect() {
+ const nodesRef = this.data.container();
+ return new Promise(resolve => nodesRef.boundingClientRect(resolve).exec());
+ },
+ initObserver() {
+ this.disconnectObserver();
+ this.getRect(ROOT_ELEMENT).then((rect) => {
+ this.setData({ height: rect.height });
+ wx.nextTick(() => {
+ this.observeContent();
+ this.observeContainer();
+ });
+ });
+ },
+ disconnectObserver(observerName) {
+ if (observerName) {
+ const observer = this[observerName];
+ observer && observer.disconnect();
+ }
+ else {
+ this.contentObserver && this.contentObserver.disconnect();
+ this.containerObserver && this.containerObserver.disconnect();
+ }
+ },
+ observeContent() {
+ const { offsetTop } = this.data;
+ this.disconnectObserver('contentObserver');
+ const contentObserver = this.createIntersectionObserver({
+ thresholds: [0, 1]
+ });
+ this.contentObserver = contentObserver;
+ contentObserver.relativeToViewport({ top: -offsetTop });
+ contentObserver.observe(ROOT_ELEMENT, res => {
+ if (this.data.disabled) {
+ return;
+ }
+ this.setFixed(res.boundingClientRect.top);
+ });
+ },
+ observeContainer() {
+ if (typeof this.data.container !== 'function') {
+ return;
+ }
+ const { height } = this.data;
+ this.getContainerRect().then((rect) => {
+ this.containerHeight = rect.height;
+ this.disconnectObserver('containerObserver');
+ const containerObserver = this.createIntersectionObserver({
+ thresholds: [0, 1]
+ });
+ this.containerObserver = containerObserver;
+ containerObserver.relativeToViewport({
+ top: this.containerHeight - height
+ });
+ containerObserver.observe(ROOT_ELEMENT, res => {
+ if (this.data.disabled) {
+ return;
+ }
+ this.setFixed(res.boundingClientRect.top);
+ });
+ });
+ },
+ setFixed(top) {
+ const { offsetTop, height } = this.data;
+ const { containerHeight } = this;
+ const fixed = containerHeight && height
+ ? top > height - containerHeight && top < offsetTop
+ : top < offsetTop;
+ this.$emit('scroll', {
+ scrollTop: top,
+ isFixed: fixed
+ });
+ this.setData({ fixed });
+ wx.nextTick(() => {
+ this.setStyle();
+ });
+ }
+ },
+ mounted() {
+ this.mounted = true;
+ if (!this.data.disabled) {
+ this.initObserver();
+ }
+ },
+ destroyed() {
+ this.disconnectObserver();
+ }
+});
diff --git a/utils/dist/sticky/index.json b/utils/dist/sticky/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/utils/dist/sticky/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/utils/dist/sticky/index.wxml b/utils/dist/sticky/index.wxml
new file mode 100644
index 0000000..2f95359
--- /dev/null
+++ b/utils/dist/sticky/index.wxml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/utils/dist/sticky/index.wxss b/utils/dist/sticky/index.wxss
new file mode 100644
index 0000000..5269387
--- /dev/null
+++ b/utils/dist/sticky/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-sticky{position:relative}.van-sticky-wrap--fixed{position:fixed;right:0;left:0}
\ No newline at end of file
diff --git a/utils/dist/submit-bar/index.d.ts b/utils/dist/submit-bar/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/submit-bar/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/submit-bar/index.js b/utils/dist/submit-bar/index.js
new file mode 100644
index 0000000..23a34da
--- /dev/null
+++ b/utils/dist/submit-bar/index.js
@@ -0,0 +1,57 @@
+import { VantComponent } from '../common/component';
+VantComponent({
+ classes: [
+ 'bar-class',
+ 'price-class',
+ 'button-class'
+ ],
+ props: {
+ tip: {
+ type: null,
+ observer: 'updateTip'
+ },
+ tipIcon: String,
+ type: Number,
+ price: {
+ type: null,
+ observer: 'updatePrice'
+ },
+ label: String,
+ loading: Boolean,
+ disabled: Boolean,
+ buttonText: String,
+ currency: {
+ type: String,
+ value: '¥'
+ },
+ buttonType: {
+ type: String,
+ value: 'danger'
+ },
+ decimalLength: {
+ type: Number,
+ value: 2,
+ observer: 'updatePrice'
+ },
+ suffixLabel: String,
+ safeAreaInsetBottom: {
+ type: Boolean,
+ value: true
+ }
+ },
+ methods: {
+ updatePrice() {
+ const { price, decimalLength } = this.data;
+ this.setData({
+ hasPrice: typeof price === 'number',
+ priceStr: (price / 100).toFixed(decimalLength)
+ });
+ },
+ updateTip() {
+ this.setData({ hasTip: typeof this.data.tip === 'string' });
+ },
+ onSubmit(event) {
+ this.$emit('submit', event.detail);
+ }
+ }
+});
diff --git a/utils/dist/submit-bar/index.json b/utils/dist/submit-bar/index.json
new file mode 100644
index 0000000..bda9b8d
--- /dev/null
+++ b/utils/dist/submit-bar/index.json
@@ -0,0 +1,7 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-button": "../button/index",
+ "van-icon": "../icon/index"
+ }
+}
diff --git a/utils/dist/submit-bar/index.wxml b/utils/dist/submit-bar/index.wxml
new file mode 100644
index 0000000..4cdbd18
--- /dev/null
+++ b/utils/dist/submit-bar/index.wxml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+ {{ tip }}
+
+
+
+
+
+
+
+ {{ label || '合计:' }}
+
+ {{ currency }}
+ {{ priceStr }}
+
+ {{ suffixLabel }}
+
+
+ {{ loading ? '' : buttonText }}
+
+
+
diff --git a/utils/dist/submit-bar/index.wxss b/utils/dist/submit-bar/index.wxss
new file mode 100644
index 0000000..c21838e
--- /dev/null
+++ b/utils/dist/submit-bar/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-submit-bar{position:fixed;bottom:0;left:0;width:100%;-webkit-user-select:none;user-select:none;z-index:100;z-index:var(--submit-bar-z-index,100);background-color:#fff;background-color:var(--submit-bar-background-color,#fff)}.van-submit-bar__tip{padding:10px;padding:var(--submit-bar-tip-padding,10px);color:#f56723;color:var(--submit-bar-tip-color,#f56723);font-size:12px;font-size:var(--submit-bar-tip-font-size,12px);line-height:1.5;line-height:var(--submit-bar-tip-line-height,1.5);background-color:#fff7cc;background-color:var(--submit-bar-tip-background-color,#fff7cc)}.van-submit-bar__tip:empty{display:none}.van-submit-bar__tip-icon{width:12px;height:12px;margin-right:4px;vertical-align:middle;font-size:12px;font-size:var(--submit-bar-tip-icon-size,12px);min-width:18px;min-width:calc(var(--submit-bar-tip-icon-size, 12px)*1.5)}.van-submit-bar__tip-text{display:inline;vertical-align:middle}.van-submit-bar__bar{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-end;justify-content:flex-end;height:50px;height:var(--submit-bar-height,50px);font-size:14px;font-size:var(--submit-bar-text-font-size,14px);background-color:#fff;background-color:var(--submit-bar-background-color,#fff)}.van-submit-bar__bar--safe{padding-bottom:env(safe-area-inset-bottom)}.van-submit-bar__text{-webkit-flex:1;flex:1;text-align:right;color:#323233;color:var(--submit-bar-text-color,#323233);padding-right:12px;padding-right:var(--padding-sm,12px);font-weight:500;font-weight:var(--font-weight-bold,500)}.van-submit-bar__price{color:#ee0a24;color:var(--submit-bar-price-color,#ee0a24);font-size:18px;font-size:var(--submit-bar-price-font-size,18px)}.van-submit-bar__currency{font-size:14px;font-size:var(--submit-bar-currency-font-size,14px)}.van-submit-bar__suffix-label{margin-left:5px}.van-submit-bar__button{width:110px;width:var(--submit-bar-button-width,110px)}
\ No newline at end of file
diff --git a/utils/dist/swipe-cell/index.d.ts b/utils/dist/swipe-cell/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/swipe-cell/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/swipe-cell/index.js b/utils/dist/swipe-cell/index.js
new file mode 100644
index 0000000..fa2e349
--- /dev/null
+++ b/utils/dist/swipe-cell/index.js
@@ -0,0 +1,122 @@
+import { VantComponent } from '../common/component';
+import { touch } from '../mixins/touch';
+import { range } from '../common/utils';
+const THRESHOLD = 0.3;
+let ARRAY = [];
+VantComponent({
+ props: {
+ disabled: Boolean,
+ leftWidth: {
+ type: Number,
+ value: 0
+ },
+ rightWidth: {
+ type: Number,
+ value: 0
+ },
+ asyncClose: Boolean,
+ name: {
+ type: [Number, String],
+ value: ''
+ }
+ },
+ mixins: [touch],
+ data: {
+ catchMove: false
+ },
+ created() {
+ this.offset = 0;
+ ARRAY.push(this);
+ },
+ destroyed() {
+ ARRAY = ARRAY.filter(item => item !== this);
+ },
+ methods: {
+ open(position) {
+ const { leftWidth, rightWidth } = this.data;
+ const offset = position === 'left' ? leftWidth : -rightWidth;
+ this.swipeMove(offset);
+ this.$emit('open', {
+ position,
+ name: this.data.name
+ });
+ },
+ close() {
+ this.swipeMove(0);
+ },
+ swipeMove(offset = 0) {
+ this.offset = range(offset, -this.data.rightWidth, this.data.leftWidth);
+ const transform = `translate3d(${this.offset}px, 0, 0)`;
+ const transition = this.dragging
+ ? 'none'
+ : 'transform .6s cubic-bezier(0.18, 0.89, 0.32, 1)';
+ this.setData({
+ wrapperStyle: `
+ -webkit-transform: ${transform};
+ -webkit-transition: ${transition};
+ transform: ${transform};
+ transition: ${transition};
+ `
+ });
+ },
+ swipeLeaveTransition() {
+ const { leftWidth, rightWidth } = this.data;
+ const { offset } = this;
+ if (rightWidth > 0 && -offset > rightWidth * THRESHOLD) {
+ this.open('right');
+ }
+ else if (leftWidth > 0 && offset > leftWidth * THRESHOLD) {
+ this.open('left');
+ }
+ else {
+ this.swipeMove(0);
+ }
+ this.setData({ catchMove: false });
+ },
+ startDrag(event) {
+ if (this.data.disabled) {
+ return;
+ }
+ this.startOffset = this.offset;
+ this.touchStart(event);
+ },
+ noop() { },
+ onDrag(event) {
+ if (this.data.disabled) {
+ return;
+ }
+ this.touchMove(event);
+ if (this.direction !== 'horizontal') {
+ return;
+ }
+ this.dragging = true;
+ ARRAY.filter(item => item !== this).forEach(item => item.close());
+ this.setData({ catchMove: true });
+ this.swipeMove(this.startOffset + this.deltaX);
+ },
+ endDrag() {
+ if (this.data.disabled) {
+ return;
+ }
+ this.dragging = false;
+ this.swipeLeaveTransition();
+ },
+ onClick(event) {
+ const { key: position = 'outside' } = event.currentTarget.dataset;
+ this.$emit('click', position);
+ if (!this.offset) {
+ return;
+ }
+ if (this.data.asyncClose) {
+ this.$emit('close', {
+ position,
+ instance: this,
+ name: this.data.name
+ });
+ }
+ else {
+ this.swipeMove(0);
+ }
+ }
+ }
+});
diff --git a/utils/dist/swipe-cell/index.json b/utils/dist/swipe-cell/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/utils/dist/swipe-cell/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/utils/dist/swipe-cell/index.wxml b/utils/dist/swipe-cell/index.wxml
new file mode 100644
index 0000000..7293619
--- /dev/null
+++ b/utils/dist/swipe-cell/index.wxml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/utils/dist/swipe-cell/index.wxss b/utils/dist/swipe-cell/index.wxss
new file mode 100644
index 0000000..d615270
--- /dev/null
+++ b/utils/dist/swipe-cell/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-swipe-cell{position:relative;overflow:hidden}.van-swipe-cell__left,.van-swipe-cell__right{position:absolute;top:0;height:100%}.van-swipe-cell__left{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.van-swipe-cell__right{right:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}
\ No newline at end of file
diff --git a/utils/dist/switch/index.d.ts b/utils/dist/switch/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/switch/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/switch/index.js b/utils/dist/switch/index.js
new file mode 100644
index 0000000..4009817
--- /dev/null
+++ b/utils/dist/switch/index.js
@@ -0,0 +1,51 @@
+import { VantComponent } from '../common/component';
+import { BLUE, GRAY_DARK } from '../common/color';
+VantComponent({
+ field: true,
+ classes: ['node-class'],
+ props: {
+ checked: null,
+ loading: Boolean,
+ disabled: Boolean,
+ activeColor: String,
+ inactiveColor: String,
+ size: {
+ type: String,
+ value: '30px'
+ },
+ activeValue: {
+ type: null,
+ value: true
+ },
+ inactiveValue: {
+ type: null,
+ value: false
+ }
+ },
+ watch: {
+ checked(value) {
+ const loadingColor = this.getLoadingColor(value);
+ this.setData({ value, loadingColor });
+ }
+ },
+ created() {
+ const { checked: value } = this.data;
+ const loadingColor = this.getLoadingColor(value);
+ this.setData({ value, loadingColor });
+ },
+ methods: {
+ getLoadingColor(checked) {
+ const { activeColor, inactiveColor } = this.data;
+ return checked ? activeColor || BLUE : inactiveColor || GRAY_DARK;
+ },
+ onClick() {
+ const { activeValue, inactiveValue } = this.data;
+ if (!this.data.disabled && !this.data.loading) {
+ const checked = this.data.checked === activeValue;
+ const value = checked ? inactiveValue : activeValue;
+ this.$emit('input', value);
+ this.$emit('change', value);
+ }
+ }
+ }
+});
diff --git a/utils/dist/switch/index.json b/utils/dist/switch/index.json
new file mode 100644
index 0000000..01077f5
--- /dev/null
+++ b/utils/dist/switch/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-loading": "../loading/index"
+ }
+}
diff --git a/utils/dist/switch/index.wxml b/utils/dist/switch/index.wxml
new file mode 100644
index 0000000..31a104d
--- /dev/null
+++ b/utils/dist/switch/index.wxml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
diff --git a/utils/dist/switch/index.wxss b/utils/dist/switch/index.wxss
new file mode 100644
index 0000000..e32a72a
--- /dev/null
+++ b/utils/dist/switch/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-switch{position:relative;display:inline-block;box-sizing:initial;width:2em;width:var(--switch-width,2em);height:1em;height:var(--switch-height,1em);background-color:#fff;background-color:var(--switch-background-color,#fff);border:1px solid rgba(0,0,0,.1);border:var(--switch-border,1px solid rgba(0,0,0,.1));border-radius:1em;border-radius:var(--switch-node-size,1em);transition:background-color .3s;transition:background-color var(--switch-transition-duration,.3s)}.van-switch__node{position:absolute;top:0;left:0;border-radius:100%;z-index:1;z-index:var(--switch-node-z-index,1);width:1em;width:var(--switch-node-size,1em);height:1em;height:var(--switch-node-size,1em);background-color:#fff;background-color:var(--switch-node-background-color,#fff);box-shadow:0 3px 1px 0 rgba(0,0,0,.05),0 2px 2px 0 rgba(0,0,0,.1),0 3px 3px 0 rgba(0,0,0,.05);box-shadow:var(--switch-node-box-shadow,0 3px 1px 0 rgba(0,0,0,.05),0 2px 2px 0 rgba(0,0,0,.1),0 3px 3px 0 rgba(0,0,0,.05));transition:-webkit-transform .3s cubic-bezier(.3,1.05,.4,1.05);transition:transform .3s cubic-bezier(.3,1.05,.4,1.05);transition:transform .3s cubic-bezier(.3,1.05,.4,1.05),-webkit-transform .3s cubic-bezier(.3,1.05,.4,1.05);transition:-webkit-transform var(--switch-transition-duration,.3s) cubic-bezier(.3,1.05,.4,1.05);transition:transform var(--switch-transition-duration,.3s) cubic-bezier(.3,1.05,.4,1.05);transition:transform var(--switch-transition-duration,.3s) cubic-bezier(.3,1.05,.4,1.05),-webkit-transform var(--switch-transition-duration,.3s) cubic-bezier(.3,1.05,.4,1.05)}.van-switch__loading{position:absolute!important;top:25%;left:25%;width:50%;height:50%}.van-switch--on{background-color:#1989fa;background-color:var(--switch-on-background-color,#1989fa)}.van-switch--on .van-switch__node{-webkit-transform:translateX(1em);transform:translateX(1em);-webkit-transform:translateX(calc(var(--switch-width, 2em) - var(--switch-node-size, 1em)));transform:translateX(calc(var(--switch-width, 2em) - var(--switch-node-size, 1em)))}.van-switch--disabled{opacity:.4;opacity:var(--switch-disabled-opacity,.4)}
\ No newline at end of file
diff --git a/utils/dist/tab/index.d.ts b/utils/dist/tab/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/tab/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/tab/index.js b/utils/dist/tab/index.js
new file mode 100644
index 0000000..555086b
--- /dev/null
+++ b/utils/dist/tab/index.js
@@ -0,0 +1,56 @@
+import { VantComponent } from '../common/component';
+VantComponent({
+ relation: {
+ name: 'tabs',
+ type: 'ancestor',
+ linked(target) {
+ this.parent = target;
+ },
+ unlinked() {
+ this.parent = null;
+ }
+ },
+ props: {
+ dot: Boolean,
+ info: null,
+ title: String,
+ disabled: Boolean,
+ titleStyle: String,
+ name: {
+ type: [Number, String],
+ value: '',
+ }
+ },
+ data: {
+ active: false
+ },
+ watch: {
+ title: 'update',
+ disabled: 'update',
+ dot: 'update',
+ info: 'update',
+ titleStyle: 'update'
+ },
+ methods: {
+ getComputedName() {
+ if (this.data.name !== '') {
+ return this.data.name;
+ }
+ return this.index;
+ },
+ updateRender(active, parent) {
+ const { data: parentData } = parent;
+ this.inited = this.inited || active;
+ this.setData({
+ active,
+ shouldRender: this.inited || !parentData.lazyRender,
+ shouldShow: active || parentData.animated
+ });
+ },
+ update() {
+ if (this.parent) {
+ this.parent.updateTabs();
+ }
+ }
+ }
+});
diff --git a/utils/dist/tab/index.json b/utils/dist/tab/index.json
new file mode 100644
index 0000000..32640e0
--- /dev/null
+++ b/utils/dist/tab/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
\ No newline at end of file
diff --git a/utils/dist/tab/index.wxml b/utils/dist/tab/index.wxml
new file mode 100644
index 0000000..f5e99f2
--- /dev/null
+++ b/utils/dist/tab/index.wxml
@@ -0,0 +1,8 @@
+
+
+
+
+
diff --git a/utils/dist/tab/index.wxss b/utils/dist/tab/index.wxss
new file mode 100644
index 0000000..b4e61b0
--- /dev/null
+++ b/utils/dist/tab/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';:host{-webkit-flex-shrink:0;flex-shrink:0;width:100%}.van-tab__pane,:host{box-sizing:border-box}.van-tab__pane{overflow-y:auto}.van-tab__pane--active{height:auto}.van-tab__pane--inactive{height:0;overflow:visible}
\ No newline at end of file
diff --git a/utils/dist/tabbar-item/index.d.ts b/utils/dist/tabbar-item/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/tabbar-item/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/tabbar-item/index.js b/utils/dist/tabbar-item/index.js
new file mode 100644
index 0000000..bd5fccf
--- /dev/null
+++ b/utils/dist/tabbar-item/index.js
@@ -0,0 +1,47 @@
+import { VantComponent } from '../common/component';
+VantComponent({
+ props: {
+ info: null,
+ name: null,
+ icon: String,
+ dot: Boolean
+ },
+ relation: {
+ name: 'tabbar',
+ type: 'ancestor'
+ },
+ data: {
+ active: false
+ },
+ methods: {
+ onClick() {
+ if (this.parent) {
+ this.parent.onChange(this);
+ }
+ this.$emit('click');
+ },
+ updateFromParent() {
+ const { parent } = this;
+ if (!parent) {
+ return;
+ }
+ const index = parent.children.indexOf(this);
+ const parentData = parent.data;
+ const { data } = this;
+ const active = (data.name || index) === parentData.active;
+ const patch = {};
+ if (active !== data.active) {
+ patch.active = active;
+ }
+ if (parentData.activeColor !== data.activeColor) {
+ patch.activeColor = parentData.activeColor;
+ }
+ if (parentData.inactiveColor !== data.inactiveColor) {
+ patch.inactiveColor = parentData.inactiveColor;
+ }
+ return Object.keys(patch).length > 0
+ ? this.set(patch)
+ : Promise.resolve();
+ }
+ }
+});
diff --git a/utils/dist/tabbar-item/index.json b/utils/dist/tabbar-item/index.json
new file mode 100644
index 0000000..16f174c
--- /dev/null
+++ b/utils/dist/tabbar-item/index.json
@@ -0,0 +1,7 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-icon": "../icon/index",
+ "van-info": "../info/index"
+ }
+}
diff --git a/utils/dist/tabbar-item/index.wxml b/utils/dist/tabbar-item/index.wxml
new file mode 100644
index 0000000..d83b061
--- /dev/null
+++ b/utils/dist/tabbar-item/index.wxml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/utils/dist/tabbar-item/index.wxss b/utils/dist/tabbar-item/index.wxss
new file mode 100644
index 0000000..85bb21c
--- /dev/null
+++ b/utils/dist/tabbar-item/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';:host{-webkit-flex:1;flex:1}.van-tabbar-item{display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;height:100%;color:#646566;color:var(--tabbar-item-text-color,#646566);font-size:12px;font-size:var(--tabbar-item-font-size,12px);line-height:1;line-height:var(--tabbar-item-line-height,1)}.van-tabbar-item__icon{position:relative;margin-bottom:5px;margin-bottom:var(--tabbar-item-margin-bottom,5px);font-size:18px;font-size:var(--tabbar-item-icon-size,18px)}.van-tabbar-item__icon__inner{display:block;min-width:1em}.van-tabbar-item--active{color:#1989fa;color:var(--tabbar-item-active-color,#1989fa)}.van-tabbar-item__info{margin-top:2px}
\ No newline at end of file
diff --git a/utils/dist/tabbar/index.d.ts b/utils/dist/tabbar/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/tabbar/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/tabbar/index.js b/utils/dist/tabbar/index.js
new file mode 100644
index 0000000..b227644
--- /dev/null
+++ b/utils/dist/tabbar/index.js
@@ -0,0 +1,65 @@
+import { VantComponent } from '../common/component';
+VantComponent({
+ relation: {
+ name: 'tabbar-item',
+ type: 'descendant',
+ linked(target) {
+ this.children.push(target);
+ target.parent = this;
+ target.updateFromParent();
+ },
+ unlinked(target) {
+ this.children = this.children.filter((item) => item !== target);
+ this.updateChildren();
+ }
+ },
+ props: {
+ active: {
+ type: null,
+ observer: 'updateChildren'
+ },
+ activeColor: {
+ type: String,
+ observer: 'updateChildren'
+ },
+ inactiveColor: {
+ type: String,
+ observer: 'updateChildren'
+ },
+ fixed: {
+ type: Boolean,
+ value: true
+ },
+ border: {
+ type: Boolean,
+ value: true
+ },
+ zIndex: {
+ type: Number,
+ value: 1
+ },
+ safeAreaInsetBottom: {
+ type: Boolean,
+ value: true
+ }
+ },
+ beforeCreate() {
+ this.children = [];
+ },
+ methods: {
+ updateChildren() {
+ const { children } = this;
+ if (!Array.isArray(children) || !children.length) {
+ return Promise.resolve();
+ }
+ return Promise.all(children.map((child) => child.updateFromParent()));
+ },
+ onChange(child) {
+ const index = this.children.indexOf(child);
+ const active = child.data.name || index;
+ if (active !== this.data.active) {
+ this.$emit('change', active);
+ }
+ }
+ }
+});
diff --git a/utils/dist/tabbar/index.json b/utils/dist/tabbar/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/utils/dist/tabbar/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/utils/dist/tabbar/index.wxml b/utils/dist/tabbar/index.wxml
new file mode 100644
index 0000000..c49b9d9
--- /dev/null
+++ b/utils/dist/tabbar/index.wxml
@@ -0,0 +1,8 @@
+
+
+
+
+
diff --git a/utils/dist/tabbar/index.wxss b/utils/dist/tabbar/index.wxss
new file mode 100644
index 0000000..65fad1e
--- /dev/null
+++ b/utils/dist/tabbar/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-tabbar{display:-webkit-flex;display:flex;width:100%;height:50px;height:var(--tabbar-height,50px);background-color:#fff;background-color:var(--tabbar-background-color,#fff)}.van-tabbar--fixed{position:fixed;bottom:0;left:0}.van-tabbar--safe{padding-bottom:env(safe-area-inset-bottom)}
\ No newline at end of file
diff --git a/utils/dist/tabs/index.d.ts b/utils/dist/tabs/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/tabs/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/tabs/index.js b/utils/dist/tabs/index.js
new file mode 100644
index 0000000..8ba4002
--- /dev/null
+++ b/utils/dist/tabs/index.js
@@ -0,0 +1,289 @@
+import { VantComponent } from '../common/component';
+import { touch } from '../mixins/touch';
+import { isDef, addUnit } from '../common/utils';
+VantComponent({
+ mixins: [touch],
+ classes: ['nav-class', 'tab-class', 'tab-active-class', 'line-class'],
+ relation: {
+ name: 'tab',
+ type: 'descendant',
+ linked(target) {
+ target.index = this.children.length;
+ this.children.push(target);
+ this.updateTabs();
+ },
+ unlinked(target) {
+ this.children = this.children
+ .filter((child) => child !== target)
+ .map((child, index) => {
+ child.index = index;
+ return child;
+ });
+ this.updateTabs();
+ }
+ },
+ props: {
+ color: {
+ type: String,
+ observer: 'setLine'
+ },
+ sticky: Boolean,
+ animated: {
+ type: Boolean,
+ observer() {
+ this.setTrack();
+ this.children.forEach((child) => child.updateRender());
+ }
+ },
+ swipeable: Boolean,
+ lineWidth: {
+ type: [String, Number],
+ value: -1,
+ observer: 'setLine'
+ },
+ lineHeight: {
+ type: [String, Number],
+ value: -1,
+ observer: 'setLine'
+ },
+ titleActiveColor: String,
+ titleInactiveColor: String,
+ active: {
+ type: [String, Number],
+ value: 0,
+ observer(name) {
+ if (name !== this.getCurrentName()) {
+ this.setCurrentIndexByName(name);
+ }
+ }
+ },
+ type: {
+ type: String,
+ value: 'line'
+ },
+ border: {
+ type: Boolean,
+ value: true
+ },
+ ellipsis: {
+ type: Boolean,
+ value: true
+ },
+ duration: {
+ type: Number,
+ value: 0.3
+ },
+ zIndex: {
+ type: Number,
+ value: 1
+ },
+ swipeThreshold: {
+ type: Number,
+ value: 4,
+ observer(value) {
+ this.setData({
+ scrollable: this.children.length > value || !this.data.ellipsis
+ });
+ }
+ },
+ offsetTop: {
+ type: Number,
+ value: 0
+ },
+ lazyRender: {
+ type: Boolean,
+ value: true
+ },
+ },
+ data: {
+ tabs: [],
+ lineStyle: '',
+ scrollLeft: 0,
+ scrollable: false,
+ trackStyle: '',
+ currentIndex: null,
+ container: null
+ },
+ beforeCreate() {
+ this.children = [];
+ },
+ mounted() {
+ this.setData({
+ container: () => this.createSelectorQuery().select('.van-tabs')
+ });
+ this.setLine(true);
+ this.setTrack();
+ this.scrollIntoView();
+ },
+ methods: {
+ updateTabs() {
+ const { children = [], data } = this;
+ this.setData({
+ tabs: children.map((child) => child.data),
+ scrollable: this.children.length > data.swipeThreshold || !data.ellipsis
+ });
+ this.setCurrentIndexByName(this.getCurrentName() || data.active);
+ },
+ trigger(eventName) {
+ const { currentIndex } = this.data;
+ const child = this.children[currentIndex];
+ if (!isDef(child)) {
+ return;
+ }
+ this.$emit(eventName, {
+ index: currentIndex,
+ name: child.getComputedName(),
+ title: child.data.title
+ });
+ },
+ onTap(event) {
+ const { index } = event.currentTarget.dataset;
+ const child = this.children[index];
+ if (child.data.disabled) {
+ this.trigger('disabled');
+ }
+ else {
+ this.setCurrentIndex(index);
+ wx.nextTick(() => {
+ this.trigger('click');
+ });
+ }
+ },
+ // correct the index of active tab
+ setCurrentIndexByName(name) {
+ const { children = [] } = this;
+ const matched = children.filter((child) => child.getComputedName() === name);
+ if (matched.length) {
+ this.setCurrentIndex(matched[0].index);
+ }
+ },
+ setCurrentIndex(currentIndex) {
+ const { data, children = [] } = this;
+ if (!isDef(currentIndex) ||
+ currentIndex >= children.length ||
+ currentIndex < 0) {
+ return;
+ }
+ children.forEach((item, index) => {
+ const active = index === currentIndex;
+ if (active !== item.data.active || !item.inited) {
+ item.updateRender(active, this);
+ }
+ });
+ if (currentIndex === data.currentIndex) {
+ return;
+ }
+ const shouldEmitChange = data.currentIndex !== null;
+ this.setData({ currentIndex });
+ wx.nextTick(() => {
+ this.setLine();
+ this.setTrack();
+ this.scrollIntoView();
+ this.trigger('input');
+ if (shouldEmitChange) {
+ this.trigger('change');
+ }
+ });
+ },
+ getCurrentName() {
+ const activeTab = this.children[this.data.currentIndex];
+ if (activeTab) {
+ return activeTab.getComputedName();
+ }
+ },
+ setLine(skipTransition) {
+ if (this.data.type !== 'line') {
+ return;
+ }
+ const { color, duration, currentIndex, lineWidth, lineHeight } = this.data;
+ this.getRect('.van-tab', true).then((rects = []) => {
+ const rect = rects[currentIndex];
+ if (rect == null) {
+ return;
+ }
+ const width = lineWidth !== -1 ? lineWidth : rect.width / 2;
+ const height = lineHeight !== -1
+ ? `height: ${addUnit(lineHeight)}; border-radius: ${addUnit(lineHeight)};`
+ : '';
+ let left = rects
+ .slice(0, currentIndex)
+ .reduce((prev, curr) => prev + curr.width, 0);
+ left += (rect.width - width) / 2;
+ const transition = skipTransition
+ ? ''
+ : `transition-duration: ${duration}s; -webkit-transition-duration: ${duration}s;`;
+ this.setData({
+ lineStyle: `
+ ${height}
+ width: ${addUnit(width)};
+ background-color: ${color};
+ -webkit-transform: translateX(${left}px);
+ transform: translateX(${left}px);
+ ${transition}
+ `
+ });
+ });
+ },
+ setTrack() {
+ const { animated, duration, currentIndex } = this.data;
+ if (!animated) {
+ return;
+ }
+ this.setData({
+ trackStyle: `
+ transform: translate3d(${-100 * currentIndex}%, 0, 0);
+ -webkit-transition-duration: ${duration}s;
+ transition-duration: ${duration}s;
+ `
+ });
+ },
+ // scroll active tab into view
+ scrollIntoView() {
+ const { currentIndex, scrollable } = this.data;
+ if (!scrollable) {
+ return;
+ }
+ Promise.all([
+ this.getRect('.van-tab', true),
+ this.getRect('.van-tabs__nav')
+ ]).then(([tabRects, navRect]) => {
+ const tabRect = tabRects[currentIndex];
+ const offsetLeft = tabRects
+ .slice(0, currentIndex)
+ .reduce((prev, curr) => prev + curr.width, 0);
+ this.setData({
+ scrollLeft: offsetLeft - (navRect.width - tabRect.width) / 2
+ });
+ });
+ },
+ onTouchScroll(event) {
+ this.$emit('scroll', event.detail);
+ },
+ onTouchStart(event) {
+ if (!this.data.swipeable)
+ return;
+ this.touchStart(event);
+ },
+ onTouchMove(event) {
+ if (!this.data.swipeable)
+ return;
+ this.touchMove(event);
+ },
+ // watch swipe touch end
+ onTouchEnd() {
+ if (!this.data.swipeable)
+ return;
+ const { tabs, currentIndex } = this.data;
+ const { direction, deltaX, offsetX } = this;
+ const minSwipeDistance = 50;
+ if (direction === 'horizontal' && offsetX >= minSwipeDistance) {
+ if (deltaX > 0 && currentIndex !== 0) {
+ this.setCurrentIndex(currentIndex - 1);
+ }
+ else if (deltaX < 0 && currentIndex !== tabs.length - 1) {
+ this.setCurrentIndex(currentIndex + 1);
+ }
+ }
+ }
+ }
+});
diff --git a/utils/dist/tabs/index.json b/utils/dist/tabs/index.json
new file mode 100644
index 0000000..19c0bc3
--- /dev/null
+++ b/utils/dist/tabs/index.json
@@ -0,0 +1,7 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-info": "../info/index",
+ "van-sticky": "../sticky/index"
+ }
+}
diff --git a/utils/dist/tabs/index.wxml b/utils/dist/tabs/index.wxml
new file mode 100644
index 0000000..ed8f0d9
--- /dev/null
+++ b/utils/dist/tabs/index.wxml
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/utils/dist/tabs/index.wxs b/utils/dist/tabs/index.wxs
new file mode 100644
index 0000000..aa117ce
--- /dev/null
+++ b/utils/dist/tabs/index.wxs
@@ -0,0 +1,55 @@
+/* eslint-disable */
+function tabClass(active, ellipsis) {
+ var classes = ['tab-class'];
+
+ if (active) {
+ classes.push('tab-active-class');
+ }
+
+ if (ellipsis) {
+ classes.push('van-ellipsis');
+ }
+
+ return classes.join(' ');
+}
+
+function tabStyle(
+ active,
+ ellipsis,
+ color,
+ type,
+ disabled,
+ activeColor,
+ inactiveColor,
+ swipeThreshold,
+ scrollable
+) {
+ var styles = [];
+ var isCard = type === 'card';
+ // card theme color
+ if (color && isCard) {
+ styles.push('border-color:' + color);
+
+ if (!disabled) {
+ if (active) {
+ styles.push('background-color:' + color);
+ } else {
+ styles.push('color:' + color);
+ }
+ }
+ }
+
+ var titleColor = active ? activeColor : inactiveColor;
+ if (titleColor) {
+ styles.push('color:' + titleColor);
+ }
+
+ if (scrollable && ellipsis) {
+ styles.push('flex-basis:' + 88 / swipeThreshold + '%');
+ }
+
+ return styles.join(';');
+}
+
+module.exports.tabClass = tabClass;
+module.exports.tabStyle = tabStyle;
diff --git a/utils/dist/tabs/index.wxss b/utils/dist/tabs/index.wxss
new file mode 100644
index 0000000..1bb6922
--- /dev/null
+++ b/utils/dist/tabs/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-tabs{position:relative;-webkit-tap-highlight-color:transparent}.van-tabs__wrap{display:-webkit-flex;display:flex;overflow:hidden}.van-tabs__wrap--scrollable .van-tab{-webkit-flex:0 0 22%;flex:0 0 22%}.van-tabs__scroll{background-color:#fff;background-color:var(--tabs-nav-background-color,#fff)}.van-tabs__scroll--line{box-sizing:initial;height:calc(100% + 15px)}.van-tabs__scroll--card{margin:0 16px;margin:0 var(--padding-md,16px)}.van-tabs__nav{position:relative;display:-webkit-flex;display:flex;-webkit-user-select:none;user-select:none}.van-tabs__nav--card{box-sizing:border-box;height:30px;height:var(--tabs-card-height,30px);border:1px solid #ee0a24;border:var(--border-width-base,1px) solid var(--tabs-default-color,#ee0a24);border-radius:2px;border-radius:var(--border-radius-sm,2px)}.van-tabs__nav--card .van-tab{color:#ee0a24;color:var(--tabs-default-color,#ee0a24);line-height:28px;line-height:calc(var(--tabs-card-height, 30px) - 2*var(--border-width-base, 1px));border-right:1px solid #ee0a24;border-right:var(--border-width-base,1px) solid var(--tabs-default-color,#ee0a24)}.van-tabs__nav--card .van-tab:last-child{border-right:none}.van-tabs__nav--card .van-tab.van-tab--active{color:#fff;color:var(--white,#fff);background-color:#ee0a24;background-color:var(--tabs-default-color,#ee0a24)}.van-tabs__nav--card .van-tab--disabled{color:#c8c9cc;color:var(--tab-disabled-text-color,#c8c9cc)}.van-tabs__line{position:absolute;bottom:0;left:0;z-index:1;height:3px;height:var(--tabs-bottom-bar-height,3px);border-radius:3px;border-radius:var(--tabs-bottom-bar-height,3px);background-color:#ee0a24;background-color:var(--tabs-bottom-bar-color,#ee0a24)}.van-tabs__track{position:relative;width:100%;height:100%}.van-tabs__track--animated{display:-webkit-flex;display:flex;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform}.van-tabs__content{overflow:hidden}.van-tabs--line .van-tabs__wrap{height:44px;height:var(--tabs-line-height,44px)}.van-tabs--card .van-tabs__wrap{height:30px;height:var(--tabs-card-height,30px)}.van-tab{position:relative;-webkit-flex:1;flex:1;box-sizing:border-box;min-width:0;padding:0 5px;text-align:center;cursor:pointer;color:#646566;color:var(--tab-text-color,#646566);font-size:14px;font-size:var(--tab-font-size,14px);line-height:44px;line-height:var(--tabs-line-height,44px)}.van-tab--active{font-weight:500;font-weight:var(--font-weight-bold,500);color:#323233;color:var(--tab-active-text-color,#323233)}.van-tab--disabled{color:#c8c9cc;color:var(--tab-disabled-text-color,#c8c9cc)}.van-tab--complete{-webkit-flex:1 0 auto!important;flex:1 0 auto!important}.van-tab__title__info{position:relative!important;top:-1px!important;display:inline-block;-webkit-transform:translateX(0)!important;transform:translateX(0)!important}
\ No newline at end of file
diff --git a/utils/dist/tag/index.d.ts b/utils/dist/tag/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/tag/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/tag/index.js b/utils/dist/tag/index.js
new file mode 100644
index 0000000..093acb5
--- /dev/null
+++ b/utils/dist/tag/index.js
@@ -0,0 +1,21 @@
+import { VantComponent } from '../common/component';
+VantComponent({
+ props: {
+ size: String,
+ mark: Boolean,
+ color: String,
+ plain: Boolean,
+ round: Boolean,
+ textColor: String,
+ type: {
+ type: String,
+ value: 'default'
+ },
+ closeable: Boolean
+ },
+ methods: {
+ onClose() {
+ this.$emit('close');
+ }
+ }
+});
diff --git a/utils/dist/tag/index.json b/utils/dist/tag/index.json
new file mode 100644
index 0000000..32640e0
--- /dev/null
+++ b/utils/dist/tag/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
\ No newline at end of file
diff --git a/utils/dist/tag/index.wxml b/utils/dist/tag/index.wxml
new file mode 100644
index 0000000..8c78686
--- /dev/null
+++ b/utils/dist/tag/index.wxml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
diff --git a/utils/dist/tag/index.wxss b/utils/dist/tag/index.wxss
new file mode 100644
index 0000000..211e376
--- /dev/null
+++ b/utils/dist/tag/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-tag{display:-webkit-inline-flex;display:inline-flex;-webkit-align-items:center;align-items:center;line-height:normal;padding:.2em .5em;padding:var(--tag-padding,.2em .5em);color:#fff;color:var(--tag-text-color,#fff);font-size:10px;font-size:var(--tag-font-size,10px);border-radius:.2em;border-radius:var(--tag-border-radius,.2em)}.van-tag:after{border-color:currentColor;border-radius:.2em * 2;border-radius:var(--tag-border-radius,.2em) * 2}.van-tag--default{background-color:#969799;background-color:var(--tag-default-color,#969799)}.van-tag--default.van-tag--plain{color:#969799;color:var(--tag-default-color,#969799)}.van-tag--danger{background-color:#ee0a24;background-color:var(--tag-dander-color,#ee0a24)}.van-tag--danger.van-tag--plain{color:#ee0a24;color:var(--tag-dander-color,#ee0a24)}.van-tag--primary{background-color:#1989fa;background-color:var(--tag-primary-color,#1989fa)}.van-tag--primary.van-tag--plain{color:#1989fa;color:var(--tag-primary-color,#1989fa)}.van-tag--success{background-color:#07c160;background-color:var(--tag-success-color,#07c160)}.van-tag--success.van-tag--plain{color:#07c160;color:var(--tag-success-color,#07c160)}.van-tag--warning{background-color:#ff976a;background-color:var(--tag-warning-color,#ff976a)}.van-tag--warning.van-tag--plain{color:#ff976a;color:var(--tag-warning-color,#ff976a)}.van-tag--plain{background-color:#fff;background-color:var(--tag-plain-background-color,#fff)}.van-tag--mark{padding-right:.7em}.van-tag--mark,.van-tag--mark:after{border-radius:0 999px 999px 0;border-radius:0 var(--tag-round-border-radius,999px) var(--tag-round-border-radius,999px) 0}.van-tag--round,.van-tag--round:after{border-radius:999px;border-radius:var(--tag-round-border-radius,999px)}.van-tag--medium{font-size:12px;font-size:var(--tag-medium-font-size,12px)}.van-tag--large{font-size:14px;font-size:var(--tag-large-font-size,14px)}.van-tag__close{margin-left:2px}
\ No newline at end of file
diff --git a/utils/dist/toast/index.d.ts b/utils/dist/toast/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/toast/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/toast/index.js b/utils/dist/toast/index.js
new file mode 100644
index 0000000..a9fe162
--- /dev/null
+++ b/utils/dist/toast/index.js
@@ -0,0 +1,29 @@
+import { VantComponent } from '../common/component';
+VantComponent({
+ props: {
+ show: Boolean,
+ mask: Boolean,
+ message: String,
+ forbidClick: Boolean,
+ zIndex: {
+ type: Number,
+ value: 1000
+ },
+ type: {
+ type: String,
+ value: 'text'
+ },
+ loadingType: {
+ type: String,
+ value: 'circular'
+ },
+ position: {
+ type: String,
+ value: 'middle'
+ }
+ },
+ methods: {
+ // for prevent touchmove
+ noop() { }
+ }
+});
diff --git a/utils/dist/toast/index.json b/utils/dist/toast/index.json
new file mode 100644
index 0000000..9b1b78c
--- /dev/null
+++ b/utils/dist/toast/index.json
@@ -0,0 +1,9 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-icon": "../icon/index",
+ "van-loading": "../loading/index",
+ "van-overlay": "../overlay/index",
+ "van-transition": "../transition/index"
+ }
+}
diff --git a/utils/dist/toast/index.wxml b/utils/dist/toast/index.wxml
new file mode 100644
index 0000000..635e7d6
--- /dev/null
+++ b/utils/dist/toast/index.wxml
@@ -0,0 +1,33 @@
+
+
+
+
+ {{ message }}
+
+
+
+
+
+ {{ message }}
+
+
+
+
+
diff --git a/utils/dist/toast/index.wxss b/utils/dist/toast/index.wxss
new file mode 100644
index 0000000..da946c9
--- /dev/null
+++ b/utils/dist/toast/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-toast{display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;box-sizing:initial;color:#fff;color:var(--toast-text-color,#fff);font-size:14px;font-size:var(--toast-font-size,14px);line-height:20px;line-height:var(--toast-line-height,20px);white-space:pre-wrap;word-wrap:break-word;background-color:rgba(50,50,51,.88);background-color:var(--toast-background-color,rgba(50,50,51,.88));border-radius:4px;border-radius:var(--toast-border-radius,4px)}.van-toast__container{position:fixed;top:50%;left:50%;width:-webkit-fit-content;width:fit-content;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);max-width:70%;max-width:var(--toast-max-width,70%)}.van-toast--text{min-width:96px;min-width:var(--toast-text-min-width,96px);padding:8px 12px;padding:var(--toast-text-padding,8px 12px)}.van-toast--icon{width:90px;width:var(--toast-default-width,90px);min-height:90px;min-height:var(--toast-default-min-height,90px);padding:16px;padding:var(--toast-default-padding,16px)}.van-toast--icon .van-toast__icon{font-size:48px;font-size:var(--toast-icon-size,48px)}.van-toast--icon .van-toast__text{padding-top:8px}.van-toast__loading{margin:10px 0}.van-toast--top{-webkit-transform:translateY(-30vh);transform:translateY(-30vh)}.van-toast--bottom{-webkit-transform:translateY(30vh);transform:translateY(30vh)}
\ No newline at end of file
diff --git a/utils/dist/toast/toast.d.ts b/utils/dist/toast/toast.d.ts
new file mode 100644
index 0000000..f7148a0
--- /dev/null
+++ b/utils/dist/toast/toast.d.ts
@@ -0,0 +1,26 @@
+///
+declare type ToastMessage = string | number;
+interface ToastOptions {
+ show?: boolean;
+ type?: string;
+ mask?: boolean;
+ zIndex?: number;
+ context?: WechatMiniprogram.Component.TrivialInstance | WechatMiniprogram.Page.TrivialInstance;
+ position?: string;
+ duration?: number;
+ selector?: string;
+ forbidClick?: boolean;
+ loadingType?: string;
+ message?: ToastMessage;
+ onClose?: () => void;
+}
+declare function Toast(toastOptions: ToastOptions | ToastMessage): WechatMiniprogram.Component.TrivialInstance;
+declare namespace Toast {
+ var loading: (options: string | number | ToastOptions) => WechatMiniprogram.Component.Instance, Record, Record>;
+ var success: (options: string | number | ToastOptions) => WechatMiniprogram.Component.Instance, Record, Record>;
+ var fail: (options: string | number | ToastOptions) => WechatMiniprogram.Component.Instance, Record, Record>;
+ var clear: () => void;
+ var setDefaultOptions: (options: ToastOptions) => void;
+ var resetDefaultOptions: () => void;
+}
+export default Toast;
diff --git a/utils/dist/toast/toast.js b/utils/dist/toast/toast.js
new file mode 100644
index 0000000..ed5a894
--- /dev/null
+++ b/utils/dist/toast/toast.js
@@ -0,0 +1,66 @@
+import { isObj } from '../common/utils';
+const defaultOptions = {
+ type: 'text',
+ mask: false,
+ message: '',
+ show: true,
+ zIndex: 1000,
+ duration: 2000,
+ position: 'middle',
+ forbidClick: false,
+ loadingType: 'circular',
+ selector: '#van-toast'
+};
+let queue = [];
+let currentOptions = Object.assign({}, defaultOptions);
+function parseOptions(message) {
+ return isObj(message) ? message : { message };
+}
+function getContext() {
+ const pages = getCurrentPages();
+ return pages[pages.length - 1];
+}
+function Toast(toastOptions) {
+ const options = Object.assign(Object.assign({}, currentOptions), parseOptions(toastOptions));
+ const context = options.context || getContext();
+ const toast = context.selectComponent(options.selector);
+ if (!toast) {
+ console.warn('未找到 van-toast 节点,请确认 selector 及 context 是否正确');
+ return;
+ }
+ delete options.context;
+ delete options.selector;
+ toast.clear = () => {
+ toast.setData({ show: false });
+ if (options.onClose) {
+ options.onClose();
+ }
+ };
+ queue.push(toast);
+ toast.setData(options);
+ clearTimeout(toast.timer);
+ if (options.duration > 0) {
+ toast.timer = setTimeout(() => {
+ toast.clear();
+ queue = queue.filter(item => item !== toast);
+ }, options.duration);
+ }
+ return toast;
+}
+const createMethod = (type) => (options) => Toast(Object.assign({ type }, parseOptions(options)));
+Toast.loading = createMethod('loading');
+Toast.success = createMethod('success');
+Toast.fail = createMethod('fail');
+Toast.clear = () => {
+ queue.forEach(toast => {
+ toast.clear();
+ });
+ queue = [];
+};
+Toast.setDefaultOptions = (options) => {
+ Object.assign(currentOptions, options);
+};
+Toast.resetDefaultOptions = () => {
+ currentOptions = Object.assign({}, defaultOptions);
+};
+export default Toast;
diff --git a/utils/dist/transition/index.d.ts b/utils/dist/transition/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/transition/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/transition/index.js b/utils/dist/transition/index.js
new file mode 100644
index 0000000..a920f1f
--- /dev/null
+++ b/utils/dist/transition/index.js
@@ -0,0 +1,13 @@
+import { VantComponent } from '../common/component';
+import { transition } from '../mixins/transition';
+VantComponent({
+ classes: [
+ 'enter-class',
+ 'enter-active-class',
+ 'enter-to-class',
+ 'leave-class',
+ 'leave-active-class',
+ 'leave-to-class'
+ ],
+ mixins: [transition(true)]
+});
diff --git a/utils/dist/transition/index.json b/utils/dist/transition/index.json
new file mode 100644
index 0000000..32640e0
--- /dev/null
+++ b/utils/dist/transition/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
\ No newline at end of file
diff --git a/utils/dist/transition/index.wxml b/utils/dist/transition/index.wxml
new file mode 100644
index 0000000..412e8af
--- /dev/null
+++ b/utils/dist/transition/index.wxml
@@ -0,0 +1,8 @@
+
+
+
diff --git a/utils/dist/transition/index.wxss b/utils/dist/transition/index.wxss
new file mode 100644
index 0000000..d459f5c
--- /dev/null
+++ b/utils/dist/transition/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-transition{transition-timing-function:ease}.van-fade-enter-active,.van-fade-leave-active{transition-property:opacity}.van-fade-enter,.van-fade-leave-to{opacity:0}.van-fade-down-enter-active,.van-fade-down-leave-active,.van-fade-left-enter-active,.van-fade-left-leave-active,.van-fade-right-enter-active,.van-fade-right-leave-active,.van-fade-up-enter-active,.van-fade-up-leave-active{transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}.van-fade-up-enter,.van-fade-up-leave-to{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);opacity:0}.van-fade-down-enter,.van-fade-down-leave-to{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);opacity:0}.van-fade-left-enter,.van-fade-left-leave-to{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);opacity:0}.van-fade-right-enter,.van-fade-right-leave-to{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);opacity:0}.van-slide-down-enter-active,.van-slide-down-leave-active,.van-slide-left-enter-active,.van-slide-left-leave-active,.van-slide-right-enter-active,.van-slide-right-leave-active,.van-slide-up-enter-active,.van-slide-up-leave-active{transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform}.van-slide-up-enter,.van-slide-up-leave-to{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}.van-slide-down-enter,.van-slide-down-leave-to{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}.van-slide-left-enter,.van-slide-left-leave-to{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.van-slide-right-enter,.van-slide-right-leave-to{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}
\ No newline at end of file
diff --git a/utils/dist/tree-select/index.d.ts b/utils/dist/tree-select/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/tree-select/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/tree-select/index.js b/utils/dist/tree-select/index.js
new file mode 100644
index 0000000..bf82410
--- /dev/null
+++ b/utils/dist/tree-select/index.js
@@ -0,0 +1,74 @@
+import { VantComponent } from '../common/component';
+import { addUnit } from '../common/utils';
+VantComponent({
+ classes: [
+ 'main-item-class',
+ 'content-item-class',
+ 'main-active-class',
+ 'content-active-class',
+ 'main-disabled-class',
+ 'content-disabled-class'
+ ],
+ props: {
+ items: {
+ type: Array,
+ observer: 'updateSubItems'
+ },
+ activeId: null,
+ mainActiveIndex: {
+ type: Number,
+ value: 0,
+ observer: 'updateSubItems'
+ },
+ height: {
+ type: [Number, String],
+ value: 300,
+ observer: 'updateHeight'
+ },
+ max: {
+ type: Number,
+ value: Infinity
+ }
+ },
+ data: {
+ subItems: []
+ },
+ created() {
+ this.updateHeight();
+ },
+ methods: {
+ // 当一个子项被选择时
+ onSelectItem(event) {
+ const { item } = event.currentTarget.dataset;
+ const isArray = Array.isArray(this.data.activeId);
+ // 判断有没有超出右侧选择的最大数
+ const isOverMax = isArray && this.data.activeId.length >= this.data.max;
+ // 判断该项有没有被选中, 如果有被选中,则忽视是否超出的条件
+ const isSelected = isArray
+ ? this.data.activeId.indexOf(item.id) > -1
+ : this.data.activeId === item.id;
+ if (!item.disabled && (!isOverMax || isSelected)) {
+ this.$emit('click-item', item);
+ }
+ },
+ // 当一个导航被点击时
+ onClickNav(event) {
+ const index = event.detail;
+ const item = this.data.items[index];
+ if (!item.disabled) {
+ this.$emit('click-nav', { index });
+ }
+ },
+ // 更新子项列表
+ updateSubItems() {
+ const { items, mainActiveIndex } = this.data;
+ const { children = [] } = items[mainActiveIndex] || {};
+ return this.set({ subItems: children });
+ },
+ updateHeight() {
+ this.setData({
+ innerHeight: addUnit(this.data.height)
+ });
+ }
+ }
+});
diff --git a/utils/dist/tree-select/index.json b/utils/dist/tree-select/index.json
new file mode 100644
index 0000000..42991a2
--- /dev/null
+++ b/utils/dist/tree-select/index.json
@@ -0,0 +1,8 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-icon": "../icon/index",
+ "van-sidebar": "../sidebar/index",
+ "van-sidebar-item": "../sidebar-item/index"
+ }
+}
diff --git a/utils/dist/tree-select/index.wxml b/utils/dist/tree-select/index.wxml
new file mode 100644
index 0000000..d6f95a8
--- /dev/null
+++ b/utils/dist/tree-select/index.wxml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.text }}
+
+
+
+
diff --git a/utils/dist/tree-select/index.wxs b/utils/dist/tree-select/index.wxs
new file mode 100644
index 0000000..b1cbb39
--- /dev/null
+++ b/utils/dist/tree-select/index.wxs
@@ -0,0 +1,12 @@
+/* eslint-disable */
+var array = require('../wxs/array.wxs');
+
+function isActive (activeList, itemId) {
+ if (array.isArray(activeList)) {
+ return activeList.indexOf(itemId) > -1;
+ }
+
+ return activeList === itemId;
+}
+
+module.exports.isActive = isActive;
diff --git a/utils/dist/tree-select/index.wxss b/utils/dist/tree-select/index.wxss
new file mode 100644
index 0000000..654e55a
--- /dev/null
+++ b/utils/dist/tree-select/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-tree-select{position:relative;display:-webkit-flex;display:flex;-webkit-user-select:none;user-select:none;font-size:14px;font-size:var(--tree-select-font-size,14px)}.van-tree-select__nav{-webkit-flex:1;flex:1;background-color:#fafafa;background-color:var(--tree-select-nav-background-color,#fafafa);--sidebar-padding:12px 8px 12px 12px}.van-tree-select__nav__inner{width:100%!important;height:100%}.van-tree-select__content{-webkit-flex:2;flex:2;background-color:#fff;background-color:var(--tree-select-content-background-color,#fff)}.van-tree-select__item{position:relative;font-weight:700;padding:0 32px 0 16px;padding:0 32px 0 var(--padding-md,16px);line-height:44px;line-height:var(--tree-select-item-height,44px)}.van-tree-select__item--active{color:#ee0a24;color:var(--tree-select-item-active-color,#ee0a24)}.van-tree-select__item--disabled{color:#c8c9cc;color:var(--tree-select-item-disabled-color,#c8c9cc)}.van-tree-select__selected{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);right:16px;right:var(--padding-md,16px)}
\ No newline at end of file
diff --git a/utils/dist/uploader/index.d.ts b/utils/dist/uploader/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/utils/dist/uploader/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/utils/dist/uploader/index.js b/utils/dist/uploader/index.js
new file mode 100644
index 0000000..9cc5def
--- /dev/null
+++ b/utils/dist/uploader/index.js
@@ -0,0 +1,151 @@
+import { VantComponent } from '../common/component';
+import { isImageFile } from './utils';
+import { addUnit } from '../common/utils';
+VantComponent({
+ props: {
+ disabled: Boolean,
+ multiple: Boolean,
+ uploadText: String,
+ useSlot: Boolean,
+ useBeforeRead: Boolean,
+ previewSize: {
+ type: null,
+ value: 90,
+ observer: 'setComputedPreviewSize'
+ },
+ name: {
+ type: [Number, String],
+ value: ''
+ },
+ accept: {
+ type: String,
+ value: 'image'
+ },
+ fileList: {
+ type: Array,
+ value: [],
+ observer: 'formatFileList'
+ },
+ maxSize: {
+ type: Number,
+ value: Number.MAX_VALUE
+ },
+ maxCount: {
+ type: Number,
+ value: 100
+ },
+ deletable: {
+ type: Boolean,
+ value: true
+ },
+ previewImage: {
+ type: Boolean,
+ value: true
+ },
+ previewFullImage: {
+ type: Boolean,
+ value: true
+ },
+ imageFit: {
+ type: String,
+ value: 'scaleToFill'
+ }
+ },
+ data: {
+ lists: [],
+ computedPreviewSize: '',
+ isInCount: true
+ },
+ methods: {
+ formatFileList() {
+ const { fileList = [], maxCount } = this.data;
+ const lists = fileList.map(item => (Object.assign(Object.assign({}, item), { isImage: typeof item.isImage === 'undefined' ? isImageFile(item) : item.isImage })));
+ this.setData({ lists, isInCount: lists.length < maxCount });
+ },
+ setComputedPreviewSize(val) {
+ this.setData({
+ computedPreviewSize: addUnit(val)
+ });
+ },
+ startUpload() {
+ if (this.data.disabled)
+ return;
+ const { name = '', capture = ['album', 'camera'], maxCount = 100, multiple = false, maxSize, accept, lists, useBeforeRead = false // 是否定义了 beforeRead
+ } = this.data;
+ let chooseFile = null;
+ const newMaxCount = maxCount - lists.length;
+ // 设置为只选择图片的时候使用 chooseImage 来实现
+ if (accept === 'image') {
+ chooseFile = new Promise((resolve, reject) => {
+ wx.chooseImage({
+ count: multiple ? (newMaxCount > 9 ? 9 : newMaxCount) : 1,
+ sourceType: capture,
+ success: resolve,
+ fail: reject
+ });
+ });
+ }
+ else {
+ chooseFile = new Promise((resolve, reject) => {
+ wx.chooseMessageFile({
+ count: multiple ? newMaxCount : 1,
+ type: 'file',
+ success: resolve,
+ fail: reject
+ });
+ });
+ }
+ chooseFile.then((res) => {
+ const file = multiple ? res.tempFiles : res.tempFiles[0];
+ // 检查文件大小
+ if (file instanceof Array) {
+ const sizeEnable = file.every(item => item.size <= maxSize);
+ if (!sizeEnable) {
+ this.$emit('oversize', { name });
+ return;
+ }
+ }
+ else if (file.size > maxSize) {
+ this.$emit('oversize', { name });
+ return;
+ }
+ // 触发上传之前的钩子函数
+ if (useBeforeRead) {
+ this.$emit('before-read', {
+ file,
+ name,
+ callback: (result) => {
+ if (result) {
+ // 开始上传
+ this.$emit('after-read', { file, name });
+ }
+ }
+ });
+ }
+ else {
+ this.$emit('after-read', { file, name });
+ }
+ });
+ },
+ deleteItem(event) {
+ const { index } = event.currentTarget.dataset;
+ this.$emit('delete', { index, name: this.data.name });
+ },
+ doPreviewImage(event) {
+ if (!this.data.previewFullImage)
+ return;
+ const curUrl = event.currentTarget.dataset.url;
+ const images = this.data.lists
+ .filter(item => item.isImage)
+ .map(item => item.url || item.path);
+ this.$emit('click-preview', { url: curUrl, name: this.data.name });
+ wx.previewImage({
+ urls: images,
+ current: curUrl,
+ fail() {
+ wx.showToast({ title: '预览图片失败', icon: 'none' });
+ }
+ });
+ }
+ }
+});
diff --git a/utils/dist/uploader/index.json b/utils/dist/uploader/index.json
new file mode 100644
index 0000000..0a336c0
--- /dev/null
+++ b/utils/dist/uploader/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-icon": "../icon/index"
+ }
+}
diff --git a/utils/dist/uploader/index.wxml b/utils/dist/uploader/index.wxml
new file mode 100644
index 0000000..02546aa
--- /dev/null
+++ b/utils/dist/uploader/index.wxml
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+ {{ item.name || item.url || item.path }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ uploadText }}
+
+
+
+
diff --git a/utils/dist/uploader/index.wxss b/utils/dist/uploader/index.wxss
new file mode 100644
index 0000000..ed70582
--- /dev/null
+++ b/utils/dist/uploader/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-uploader{position:relative;display:inline-block}.van-uploader__wrapper{display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap}.van-uploader__upload{position:relative;display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;box-sizing:border-box;width:80px;height:80px;margin:0 8px 8px 0;background-color:#fff;border:1px dashed #ebedf0;border-radius:4px}.van-uploader__upload-icon{display:inline-block;width:24px;height:24px;color:#969799;font-size:24px}.van-uploader__upload-text{margin-top:8px;color:#969799;font-size:12px}.van-uploader__preview{position:relative;margin:0 8px 8px 0}.van-uploader__preview-image{display:block;width:80px;height:80px;border-radius:4px}.van-uploader__preview-delete{position:absolute;top:-8px;right:-8px;color:#969799;font-size:18px;background-color:#fff;border-radius:100%}.van-uploader__file{display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;width:80px;height:80px;background-color:#f7f8fa;border-radius:4px}.van-uploader__file-icon{display:inline-block;width:20px;height:20px;color:#646566;font-size:20px}.van-uploader__file-name{box-sizing:border-box;width:100%;margin-top:8px;padding:0 5px;color:#646566;font-size:12px;text-align:center}
\ No newline at end of file
diff --git a/utils/dist/uploader/utils.d.ts b/utils/dist/uploader/utils.d.ts
new file mode 100644
index 0000000..d3bb3b5
--- /dev/null
+++ b/utils/dist/uploader/utils.d.ts
@@ -0,0 +1,12 @@
+interface File {
+ path: string;
+ url: string;
+ size: number;
+ name: string;
+ type: string;
+ time: number;
+ image: boolean;
+}
+export declare function isImageUrl(url: string): boolean;
+export declare function isImageFile(item: File): boolean;
+export {};
diff --git a/utils/dist/uploader/utils.js b/utils/dist/uploader/utils.js
new file mode 100644
index 0000000..aa59dc1
--- /dev/null
+++ b/utils/dist/uploader/utils.js
@@ -0,0 +1,16 @@
+const IMAGE_EXT = ['jpeg', 'jpg', 'gif', 'png', 'svg'];
+export function isImageUrl(url) {
+ return IMAGE_EXT.some(ext => url.indexOf(`.${ext}`) !== -1);
+}
+export function isImageFile(item) {
+ if (item.type) {
+ return item.type.indexOf('image') === 0;
+ }
+ if (item.path) {
+ return isImageUrl(item.path);
+ }
+ if (item.url) {
+ return isImageUrl(item.url);
+ }
+ return false;
+}
diff --git a/utils/dist/wxs/array.wxs b/utils/dist/wxs/array.wxs
new file mode 100644
index 0000000..610089c
--- /dev/null
+++ b/utils/dist/wxs/array.wxs
@@ -0,0 +1,5 @@
+function isArray(array) {
+ return array && array.constructor === 'Array';
+}
+
+module.exports.isArray = isArray;
diff --git a/utils/dist/wxs/bem.wxs b/utils/dist/wxs/bem.wxs
new file mode 100644
index 0000000..93b2777
--- /dev/null
+++ b/utils/dist/wxs/bem.wxs
@@ -0,0 +1,38 @@
+var array = require('./array.wxs');
+var object = require('./object.wxs');
+var PREFIX = 'van-';
+
+function join(name, mods) {
+ name = PREFIX + name;
+ mods = mods.map(function(mod) {
+ return name + '--' + mod;
+ });
+ mods.unshift(name);
+ return mods.join(' ');
+}
+
+function traversing(mods, conf) {
+ if (!conf) {
+ return;
+ }
+
+ if (typeof conf === 'string' || typeof conf === 'number') {
+ mods.push(conf);
+ } else if (array.isArray(conf)) {
+ conf.forEach(function(item) {
+ traversing(mods, item);
+ });
+ } else if (typeof conf === 'object') {
+ object.keys(conf).forEach(function(key) {
+ conf[key] && mods.push(key);
+ });
+ }
+}
+
+function bem(name, conf) {
+ var mods = [];
+ traversing(mods, conf);
+ return join(name, mods);
+}
+
+module.exports.bem = bem;
diff --git a/utils/dist/wxs/memoize.wxs b/utils/dist/wxs/memoize.wxs
new file mode 100644
index 0000000..261ae67
--- /dev/null
+++ b/utils/dist/wxs/memoize.wxs
@@ -0,0 +1,54 @@
+/**
+ * Simple memoize
+ * wxs doesn't support fn.apply, so this memoize only support up to 2 args
+ */
+
+function isPrimitive(value) {
+ var type = typeof value;
+ return (
+ type === 'boolean' ||
+ type === 'number' ||
+ type === 'string' ||
+ type === 'undefined' ||
+ value === null
+ );
+}
+
+// mock simple fn.call in wxs
+function call(fn, args) {
+ if (args.length === 2) {
+ return fn(args[0], args[1]);
+ }
+
+ if (args.length === 1) {
+ return fn(args[0]);
+ }
+
+ return fn();
+}
+
+function serializer(args) {
+ if (args.length === 1 && isPrimitive(args[0])) {
+ return args[0];
+ }
+ var obj = {};
+ for (var i = 0; i < args.length; i++) {
+ obj['key' + i] = args[i];
+ }
+ return JSON.stringify(obj);
+}
+
+function memoize(fn) {
+ var cache = {};
+
+ return function() {
+ var key = serializer(arguments);
+ if (cache[key] === undefined) {
+ cache[key] = call(fn, arguments);
+ }
+
+ return cache[key];
+ };
+}
+
+module.exports.memoize = memoize;
diff --git a/utils/dist/wxs/object.wxs b/utils/dist/wxs/object.wxs
new file mode 100644
index 0000000..e077107
--- /dev/null
+++ b/utils/dist/wxs/object.wxs
@@ -0,0 +1,13 @@
+/* eslint-disable */
+var REGEXP = getRegExp('{|}|"', 'g');
+
+function keys(obj) {
+ return JSON.stringify(obj)
+ .replace(REGEXP, '')
+ .split(',')
+ .map(function(item) {
+ return item.split(':')[0];
+ });
+}
+
+module.exports.keys = keys;
diff --git a/utils/dist/wxs/utils.wxs b/utils/dist/wxs/utils.wxs
new file mode 100644
index 0000000..a18662d
--- /dev/null
+++ b/utils/dist/wxs/utils.wxs
@@ -0,0 +1,7 @@
+var bem = require('./bem.wxs').bem;
+var memoize = require('./memoize.wxs').memoize;
+
+module.exports = {
+ bem: memoize(bem),
+ memoize: memoize
+};