liyongli 2 年之前
当前提交
12f4353c49
共有 100 个文件被更改,包括 5565 次插入0 次删除
  1. 43 0
      miniprogram/app.js
  2. 15 0
      miniprogram/app.json
  3. 30 0
      miniprogram/app.wxss
  4. 52 0
      miniprogram/components/list/list.js
  5. 7 0
      miniprogram/components/list/list.json
  6. 21 0
      miniprogram/components/list/list.wxml
  7. 29 0
      miniprogram/components/list/list.wxss
  8. 89 0
      miniprogram/components/region/region.js
  9. 4 0
      miniprogram/components/region/region.json
  10. 13 0
      miniprogram/components/region/region.wxml
  11. 45 0
      miniprogram/components/region/region.wxss
  12. 35 0
      miniprogram/components/tabs/tabs.js
  13. 4 0
      miniprogram/components/tabs/tabs.json
  14. 8 0
      miniprogram/components/tabs/tabs.wxml
  15. 27 0
      miniprogram/components/tabs/tabs.wxss
  16. 7 0
      miniprogram/index.js
  17. 193 0
      miniprogram/miniprogram_npm/weui-miniprogram/actionsheet/actionsheet.js
  18. 4 0
      miniprogram/miniprogram_npm/weui-miniprogram/actionsheet/actionsheet.json
  19. 51 0
      miniprogram/miniprogram_npm/weui-miniprogram/actionsheet/actionsheet.wxml
  20. 1 0
      miniprogram/miniprogram_npm/weui-miniprogram/actionsheet/actionsheet.wxss
  21. 114 0
      miniprogram/miniprogram_npm/weui-miniprogram/badge/badge.js
  22. 4 0
      miniprogram/miniprogram_npm/weui-miniprogram/badge/badge.json
  23. 1 0
      miniprogram/miniprogram_npm/weui-miniprogram/badge/badge.wxml
  24. 0 0
      miniprogram/miniprogram_npm/weui-miniprogram/badge/badge.wxss
  25. 231 0
      miniprogram/miniprogram_npm/weui-miniprogram/cell/cell.js
  26. 6 0
      miniprogram/miniprogram_npm/weui-miniprogram/cell/cell.json
  27. 73 0
      miniprogram/miniprogram_npm/weui-miniprogram/cell/cell.wxml
  28. 1 0
      miniprogram/miniprogram_npm/weui-miniprogram/cell/cell.wxss
  29. 183 0
      miniprogram/miniprogram_npm/weui-miniprogram/cells/cells.js
  30. 4 0
      miniprogram/miniprogram_npm/weui-miniprogram/cells/cells.json
  31. 8 0
      miniprogram/miniprogram_npm/weui-miniprogram/cells/cells.wxml
  32. 1 0
      miniprogram/miniprogram_npm/weui-miniprogram/cells/cells.wxss
  33. 226 0
      miniprogram/miniprogram_npm/weui-miniprogram/checkbox-group/checkbox-group.js
  34. 6 0
      miniprogram/miniprogram_npm/weui-miniprogram/checkbox-group/checkbox-group.json
  35. 6 0
      miniprogram/miniprogram_npm/weui-miniprogram/checkbox-group/checkbox-group.wxml
  36. 0 0
      miniprogram/miniprogram_npm/weui-miniprogram/checkbox-group/checkbox-group.wxss
  37. 184 0
      miniprogram/miniprogram_npm/weui-miniprogram/checkbox/checkbox.js
  38. 7 0
      miniprogram/miniprogram_npm/weui-miniprogram/checkbox/checkbox.json
  39. 20 0
      miniprogram/miniprogram_npm/weui-miniprogram/checkbox/checkbox.wxml
  40. 1 0
      miniprogram/miniprogram_npm/weui-miniprogram/checkbox/checkbox.wxss
  41. 182 0
      miniprogram/miniprogram_npm/weui-miniprogram/dialog/dialog.js
  42. 4 0
      miniprogram/miniprogram_npm/weui-miniprogram/dialog/dialog.json
  43. 20 0
      miniprogram/miniprogram_npm/weui-miniprogram/dialog/dialog.wxml
  44. 1 0
      miniprogram/miniprogram_npm/weui-miniprogram/dialog/dialog.wxss
  45. 138 0
      miniprogram/miniprogram_npm/weui-miniprogram/form-page/form-page.js
  46. 4 0
      miniprogram/miniprogram_npm/weui-miniprogram/form-page/form-page.json
  47. 31 0
      miniprogram/miniprogram_npm/weui-miniprogram/form-page/form-page.wxml
  48. 0 0
      miniprogram/miniprogram_npm/weui-miniprogram/form-page/form-page.wxss
  49. 746 0
      miniprogram/miniprogram_npm/weui-miniprogram/form/form.js
  50. 4 0
      miniprogram/miniprogram_npm/weui-miniprogram/form/form.json
  51. 3 0
      miniprogram/miniprogram_npm/weui-miniprogram/form/form.wxml
  52. 192 0
      miniprogram/miniprogram_npm/weui-miniprogram/gallery/gallery.js
  53. 4 0
      miniprogram/miniprogram_npm/weui-miniprogram/gallery/gallery.json
  54. 13 0
      miniprogram/miniprogram_npm/weui-miniprogram/gallery/gallery.wxml
  55. 1 0
      miniprogram/miniprogram_npm/weui-miniprogram/gallery/gallery.wxss
  56. 149 0
      miniprogram/miniprogram_npm/weui-miniprogram/grids/grids.js
  57. 4 0
      miniprogram/miniprogram_npm/weui-miniprogram/grids/grids.json
  58. 26 0
      miniprogram/miniprogram_npm/weui-miniprogram/grids/grids.wxml
  59. 1 0
      miniprogram/miniprogram_npm/weui-miniprogram/grids/grids.wxss
  60. 185 0
      miniprogram/miniprogram_npm/weui-miniprogram/half-screen-dialog/half-screen-dialog.js
  61. 4 0
      miniprogram/miniprogram_npm/weui-miniprogram/half-screen-dialog/half-screen-dialog.json
  62. 42 0
      miniprogram/miniprogram_npm/weui-miniprogram/half-screen-dialog/half-screen-dialog.wxml
  63. 1 0
      miniprogram/miniprogram_npm/weui-miniprogram/half-screen-dialog/half-screen-dialog.wxss
  64. 240 0
      miniprogram/miniprogram_npm/weui-miniprogram/icon/icon.js
  65. 4 0
      miniprogram/miniprogram_npm/weui-miniprogram/icon/icon.json
  66. 14 0
      miniprogram/miniprogram_npm/weui-miniprogram/icon/icon.wxml
  67. 1 0
      miniprogram/miniprogram_npm/weui-miniprogram/icon/icon.wxss
  68. 100 0
      miniprogram/miniprogram_npm/weui-miniprogram/index.js
  69. 134 0
      miniprogram/miniprogram_npm/weui-miniprogram/loading/loading.js
  70. 4 0
      miniprogram/miniprogram_npm/weui-miniprogram/loading/loading.json
  71. 9 0
      miniprogram/miniprogram_npm/weui-miniprogram/loading/loading.wxml
  72. 1 0
      miniprogram/miniprogram_npm/weui-miniprogram/loading/loading.wxss
  73. 137 0
      miniprogram/miniprogram_npm/weui-miniprogram/msg/msg.js
  74. 4 0
      miniprogram/miniprogram_npm/weui-miniprogram/msg/msg.json
  75. 29 0
      miniprogram/miniprogram_npm/weui-miniprogram/msg/msg.wxml
  76. 1 0
      miniprogram/miniprogram_npm/weui-miniprogram/msg/msg.wxss
  77. 211 0
      miniprogram/miniprogram_npm/weui-miniprogram/navigation-bar/navigation-bar.js
  78. 4 0
      miniprogram/miniprogram_npm/weui-miniprogram/navigation-bar/navigation-bar.json
  79. 32 0
      miniprogram/miniprogram_npm/weui-miniprogram/navigation-bar/navigation-bar.wxml
  80. 0 0
      miniprogram/miniprogram_npm/weui-miniprogram/navigation-bar/navigation-bar.wxss
  81. 7 0
      miniprogram/miniprogram_npm/weui-miniprogram/package.json
  82. 243 0
      miniprogram/miniprogram_npm/weui-miniprogram/searchbar/searchbar.js
  83. 7 0
      miniprogram/miniprogram_npm/weui-miniprogram/searchbar/searchbar.json
  84. 19 0
      miniprogram/miniprogram_npm/weui-miniprogram/searchbar/searchbar.wxml
  85. 1 0
      miniprogram/miniprogram_npm/weui-miniprogram/searchbar/searchbar.wxss
  86. 225 0
      miniprogram/miniprogram_npm/weui-miniprogram/slideview/slideview.js
  87. 4 0
      miniprogram/miniprogram_npm/weui-miniprogram/slideview/slideview.json
  88. 23 0
      miniprogram/miniprogram_npm/weui-miniprogram/slideview/slideview.wxml
  89. 243 0
      miniprogram/miniprogram_npm/weui-miniprogram/slideview/slideview.wxs
  90. 0 0
      miniprogram/miniprogram_npm/weui-miniprogram/slideview/slideview.wxss
  91. 二进制
      miniprogram/miniprogram_npm/weui-miniprogram/static/icon/s-arrow-back.png
  92. 20 0
      miniprogram/miniprogram_npm/weui-miniprogram/static/icon/s-arrow-back.svg
  93. 138 0
      miniprogram/miniprogram_npm/weui-miniprogram/tabbar/tabbar.js
  94. 6 0
      miniprogram/miniprogram_npm/weui-miniprogram/tabbar/tabbar.json
  95. 10 0
      miniprogram/miniprogram_npm/weui-miniprogram/tabbar/tabbar.wxml
  96. 0 0
      miniprogram/miniprogram_npm/weui-miniprogram/tabbar/tabbar.wxss
  97. 174 0
      miniprogram/miniprogram_npm/weui-miniprogram/toptips/toptips.js
  98. 4 0
      miniprogram/miniprogram_npm/weui-miniprogram/toptips/toptips.json
  99. 6 0
      miniprogram/miniprogram_npm/weui-miniprogram/toptips/toptips.wxml
  100. 1 0
      miniprogram/miniprogram_npm/weui-miniprogram/toptips/toptips.wxss

+ 43 - 0
miniprogram/app.js

@@ -0,0 +1,43 @@
+"use strict";
+
+App({
+    globalData: {
+        select: [],
+        oriList: [],
+        menulist: [],
+        voice: [],
+        generate: []
+    },
+    onLaunch: function () {
+        let _this = this;
+        wx.showLoading()
+        wx.request({
+            url: "https://main-bucket.bj.bcebos.com/miniprog-avres/aiclip_avres.json?" + new Date(),
+            headers: {
+                'Content-Type': 'application/json'
+            },
+            success: function (res) {
+                _this.globalData.oriList = res.data.data.map(v => {
+                    v.music = v.music.map(m => {
+                        return {
+                            Url: m.audio,
+                            Name: m.audio_name,
+                            bo: m.wave_img,
+                            albumImageUrl: m.wave_img
+                        }
+                    })
+                    v.clips = v.clips.map(c => {
+                        return {
+                            video: c.video,
+                            thumbUrl: c.snaps[0],
+                            duration: c.duration,
+                            snaps: c.snaps,
+                        }
+                    })
+                    return v
+                });
+                wx.hideLoading();
+            }
+        });
+    },
+});

+ 15 - 0
miniprogram/app.json

@@ -0,0 +1,15 @@
+{
+  "pages": [
+    "pages/index/index",
+    "pages/selectVideo/selectVideo",
+    "pages/video/video"
+  ],
+  "window": {
+    "backgroundTextStyle": "light",
+    "navigationBarBackgroundColor": "#181818",
+    "navigationBarTitleText": "智能云剪辑",
+    "navigationBarTextStyle": "white"
+  },
+  "style": "v2",
+  "sitemapLocation": "sitemap.json"
+}

+ 30 - 0
miniprogram/app.wxss

@@ -0,0 +1,30 @@
+/**app.wxss**/
+@import 'miniprogram_npm/weui-miniprogram/weui-wxss/dist/style/weui.wxss';
+page{
+  width: 100%;
+  height: 100%;
+  background-color: #181818;
+  font-family: Microsoft Yahei,Hiragino Sans GB,Heiti SC,WenQuanYi Micro Hei,sans-serif;
+  font-weight: 400;
+  color: #e9e9e9;
+}
+.container {
+  height: 100%;
+  width: 100%;
+  box-sizing: border-box;
+} 
+.PageTitle{
+  font-size: 44rpx;
+  font-weight: 500;
+  padding-left: 22rpx;
+}
+
+.radio{
+  border-radius: 20rpx;
+}
+
+.localCell, .localCell .weui-cell__ft{
+  color: #e9e9e9;
+  background-color: #181818;
+}
+

+ 52 - 0
miniprogram/components/list/list.js

@@ -0,0 +1,52 @@
+"use strict";
+const app = getApp()
+Component({
+    properties: {
+        list: {
+            type: Array,
+            value: []
+        }
+    },
+    observers: {
+        "list": function (cur) {
+            let videoList = (cur|| []).reverse()
+            videoList = videoList.map(v=>{
+                v.videoImg = v.clips[0].snaps[0]
+                return v
+            })
+            this.setData({
+                videoList
+            })
+        }
+    },
+    data: {
+        slideButtons: [
+            {
+                type: 'warn',
+                text: '删除',
+                data: {
+
+                }
+            }
+        ],
+        videoList: [
+            {}
+        ]
+    },
+    ready() {
+    },
+    methods: {
+        slideButtonTap: function (e) {
+            wx.navigateTo({
+                url: "/pages/video/video?select=" + e.currentTarget.dataset.index
+            });
+        },
+        slideBtn(e) {
+            app.globalData.generate.splice(e.currentTarget.dataset.index, 1);
+            wx.setStorageSync('generated', JSON.stringify(app.globalData.generate))
+            this.setData({
+                videoList: app.globalData.generate
+            })
+        }
+    }
+});

+ 7 - 0
miniprogram/components/list/list.json

@@ -0,0 +1,7 @@
+{
+  "component": true,
+  "usingComponents": {
+    "mp-slideview": "weui-miniprogram/slideview/slideview",
+    "mp-cells": "weui-miniprogram/cells/cells"
+  }
+}

+ 21 - 0
miniprogram/components/list/list.wxml

@@ -0,0 +1,21 @@
+<!--components/list/list.wxml-->
+<mp-cells ext-class="my-cells" >
+  <mp-slideview wx:for="{{videoList}}" data-index="{{index}}" wx:key="id" buttons="{{slideButtons}}" ext-class="localCell" bindbuttontap="slideBtn">
+    <view data-index="{{index}}" bindtap="slideButtonTap">
+      <view class="local">
+      <view class="local__item">
+        <view class="placeholder">
+          <image slot="icon" src="{{item.videoImg}}"
+            style="margin-right: 16px;vertical-align: middle;width:120rpx; height: 120rpx;"></image>
+        </view>
+      </view>
+      <view class="local__item_0 ">
+        <view class="placeholder">{{item.name}}</view>
+        <view class="placeholder subTitle">更新于 {{item.update}}</view>
+        <!-- <view class="placeholder subTitle">6.6M</view> -->
+        <view class="placeholder">{{item.duration}}</view>
+      </view>
+    </view>
+    </view>
+  </mp-slideview>
+</mp-cells>

+ 29 - 0
miniprogram/components/list/list.wxss

@@ -0,0 +1,29 @@
+/* components/list/list.wxss */
+.local {
+  display: flex;
+  padding: 17rpx 34rpx;
+  font-size: 22rpx;
+  width: 682rpx;
+}
+
+.local .local__item {
+  flex-basis: 120rpx;
+  height: 120rpx;
+  width: 120rpx;
+  flex-shrink: 0;
+}
+
+.local .local__item_0 {
+  padding-left: 34rpx;
+}
+
+.placeholder {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  word-wrap: break-word;
+}
+
+.subTitle{
+  color: #787878;
+}

+ 89 - 0
miniprogram/components/region/region.js

@@ -0,0 +1,89 @@
+"use strict";
+var select = [];
+var app = getApp();
+Component({
+    data: {},
+    
+    ready: function () {
+     if(app.globalData.oriList.length) this.init();
+    },
+    methods: {
+        init(){
+            var _this = this;
+            select = [];
+            var list = [
+                {
+                    date: "2021-04-07",
+                    title: "大唐不夜城",
+                    id: 0,
+                    chirld: []
+                }
+            ];
+            for (let i = 0; i < app.globalData.oriList.length; i++) {
+                const ele = app.globalData.oriList[i];
+                let sList = ele.clips.map((v, o) => {
+                    return {
+                        id: i + '-' + o,
+                        selectIndex: -1,
+                        duration: _this.format(v.duration),
+                        secDuration: v.duration,
+                        videoWidth: v.videoWidth,
+                        videoHeight: v.videoHeight,
+                        name: v.name,
+                        snaps: v.snaps,
+                        video: v.video,
+                        thumbUrl: v.thumbUrl,
+                        voice: ele.voice
+                    };
+                })
+                list[0].chirld.push(...sList)
+            }
+            _this.setData({ list: list });
+    
+        },
+        selectItem: function () {
+            var data = arguments[0].currentTarget.dataset;
+            var list = JSON.parse(JSON.stringify(this.data.list));
+            var selectItem = list[data.pindex].chirld[data.index];
+            this.downFile(selectItem).then(res => {
+                selectItem.type = "video";
+                var selectList = [];
+                var push = true;
+                for (var i = 0; i < select.length; i++) {
+                    var v = select[i];
+                    if (v.id !== data.id)
+                        continue;
+                    list[v.pindex].chirld[v.index].selectIndex = -1;
+                    select.splice(i, 1);
+                    push = false;
+                    break;
+                }
+                select.length < 11 && push && select.push(data);
+                for (var i = 0; i < select.length; i++) {
+                    var v = select[i];
+                    list[v.pindex].chirld[v.index].selectIndex = i + 1;
+                    selectList.push(list[v.pindex].chirld[v.index])
+                }
+                this.setData({
+                    list: list
+                });
+
+                this.triggerEvent('select', selectList);
+            });
+        },
+        format(s) {
+            let sco = Math.floor(s % 60);
+            let min = Math.floor(s / 60);
+            let hour = Math.floor(min / 60);
+            let time = hour > 9 ? hour : "0" + hour;
+            time += min > 9 ? ":" + min : ":0" + min;
+            time += sco > 9 ? ":" + sco : ":0" + sco;
+            return time
+        },
+        downFile(v) {
+            return new Promise((resolve, reason) => {
+                resolve(v);
+            })
+        }
+    }
+});

+ 4 - 0
miniprogram/components/region/region.json

@@ -0,0 +1,4 @@
+{
+  "component": true,
+  "usingComponents": {}
+}

+ 13 - 0
miniprogram/components/region/region.wxml

@@ -0,0 +1,13 @@
+<!--components/region/region.wxml-->
+<view class="region" wx:for="{{list}}" wx:key="id">
+  <view class="title">{{item.date}},{{item.title}}</view>
+  <view class="videoItem" bindtap="selectItem" data-index="{{i}}" style="{{ i%3 === 0 ? 'margin-left: 0' : '' }}"
+    data-pindex="{{index}}" data-id="{{val.id}}" data-pid="{{item.id}}" wx:for="{{item.chirld}}" wx:key="id"
+    wx:for-item="val" wx:for-index="i">
+    <view class="{{val.selectIndex >= 0 ? 'select act' : 'select'}}">{{val.selectIndex >= 0 ? val.selectIndex : ''}}
+    </view>
+    <view class="time">{{val.duration}}</view>
+    <image src="{{val.snaps[0]}}" lazy-load
+      style="margin-right: 16px;vertical-align: middle;width:200rpx; height: 111rpx;"></image>
+  </view>
+</view>

+ 45 - 0
miniprogram/components/region/region.wxss

@@ -0,0 +1,45 @@
+/* components/region/region.wxss */
+.region{
+  padding: 0 33rpx;
+}
+.title{
+  font-size: 25rpx;
+  height: 108rpx;
+  line-height: 108rpx;
+  text-align: left;
+}
+.videoItem {
+  margin-left: 28rpx;
+  margin-top: 28rpx;
+  display: inline-block;
+  position: relative;
+  color: #fdfbfc;
+  font-size: 23rpx;
+  height: 111rpx;
+  width:200rpx; 
+}
+
+.videoItem .time{
+  position: absolute;
+  right: 16rpx;
+  bottom: 5rpx;
+}
+.videoItem .select{
+  border: 1rpx solid #ece5e4;
+  position: absolute;
+  border-radius: 50%;
+  height: 30rpx;
+  width: 30rpx;
+  right: 16rpx;
+  top: 16rpx;
+  text-align: center;
+  line-height: 30rpx;
+}
+.videoItem .act{
+  border: none;
+  background: #fe2a54;
+}
+
+.region .videoItem{
+  display: inline-block;
+}

+ 35 - 0
miniprogram/components/tabs/tabs.js

@@ -0,0 +1,35 @@
+"use strict";
+Component({
+    ready: function () {
+        if (!this.data.tabList.length)
+            return;
+        var id = this.data.tabList[0].id;
+        this.setData({
+            tab: id
+        });
+        this.triggerEvent('change', id);
+    },
+    properties: {
+        list: {
+            type: Array,
+            value: []
+        }
+    },
+    data: {
+        tab: 0,
+        tabList: [
+            {
+                title: "剪辑",
+                number: 0,
+                id: 0
+            },
+        ]
+    },
+    methods: {
+        clickTab: function () {
+            var _this = this;
+            var tabData = arguments[0].currentTarget.dataset;
+            this.setData({ tab: tabData.id }, function () { return _this.triggerEvent("Change", tabData.id); });
+        }
+    }
+});

+ 4 - 0
miniprogram/components/tabs/tabs.json

@@ -0,0 +1,4 @@
+{
+  "component": true,
+  "usingComponents": {}
+}

+ 8 - 0
miniprogram/components/tabs/tabs.wxml

@@ -0,0 +1,8 @@
+<!--components/tabs/tabs.wxml-->
+<view class="videoTabs">
+  <view wx:for="{{tabList}}" wx:key="id" class="{{tab === item.id ? 'videoTab active' : 'videoTab'}}"
+    data-id="{{item.id}}" bindtap="clickTab">
+    {{item.title}} 
+    <text wx:if="{{item.number}}" class="num">{{item.number}}</text>
+  </view>
+</view>

+ 27 - 0
miniprogram/components/tabs/tabs.wxss

@@ -0,0 +1,27 @@
+/* components/tabs/tabs.wxss */
+.videoTabs {
+  padding: 34rpx;
+  font-size: 26rpx;
+}
+
+.videoTab .num{
+  font-size: 17rpx;
+}
+
+.videoTabs .videoTab{
+  display: inline-block;
+  border-bottom: 1rpx solid;
+  border-bottom-color: transparent;
+}
+
+.videoTabs .videoTab:not(:first-child){
+  margin-left: 34rpx;
+}
+
+.videoTabs .active{
+  border-bottom-color: #e9e9e9;
+}
+
+.videoTabs .videoTabFrom{
+  margin-left: 34rpx;
+}

+ 7 - 0
miniprogram/index.js

@@ -0,0 +1,7 @@
+module.exports = {
+  downloadFile:wx.downloadFile, // 文件下载
+  loadFontFace: wx.loadFontFace, // 字体加载
+  getFileSystemManager: wx.getFileSystemManager, // 模板功能用文件系统接口实现本地包缓存
+  realtimeLogManager: wx.getRealtimeLogManager(), // 错误日志上传
+  USER_DATA_PATH: wx.env.USER_DATA_PATH // 文件系统中的用户目录路径 (本地路径)
+  }

+ 193 - 0
miniprogram/miniprogram_npm/weui-miniprogram/actionsheet/actionsheet.js

@@ -0,0 +1,193 @@
+module.exports =
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+/******/
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId]) {
+/******/ 			return installedModules[moduleId].exports;
+/******/ 		}
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			i: moduleId,
+/******/ 			l: false,
+/******/ 			exports: {}
+/******/ 		};
+/******/
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ 		// Flag the module as loaded
+/******/ 		module.l = true;
+/******/
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/
+/******/
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+/******/
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+/******/
+/******/ 	// define getter function for harmony exports
+/******/ 	__webpack_require__.d = function(exports, name, getter) {
+/******/ 		if(!__webpack_require__.o(exports, name)) {
+/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ 		}
+/******/ 	};
+/******/
+/******/ 	// define __esModule on exports
+/******/ 	__webpack_require__.r = function(exports) {
+/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ 		}
+/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
+/******/ 	};
+/******/
+/******/ 	// create a fake namespace object
+/******/ 	// mode & 1: value is a module id, require it
+/******/ 	// mode & 2: merge all properties of value into the ns
+/******/ 	// mode & 4: return value when already ns object
+/******/ 	// mode & 8|1: behave like require
+/******/ 	__webpack_require__.t = function(value, mode) {
+/******/ 		if(mode & 1) value = __webpack_require__(value);
+/******/ 		if(mode & 8) return value;
+/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ 		var ns = Object.create(null);
+/******/ 		__webpack_require__.r(ns);
+/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ 		return ns;
+/******/ 	};
+/******/
+/******/ 	// getDefaultExport function for compatibility with non-harmony modules
+/******/ 	__webpack_require__.n = function(module) {
+/******/ 		var getter = module && module.__esModule ?
+/******/ 			function getDefault() { return module['default']; } :
+/******/ 			function getModuleExports() { return module; };
+/******/ 		__webpack_require__.d(getter, 'a', getter);
+/******/ 		return getter;
+/******/ 	};
+/******/
+/******/ 	// Object.prototype.hasOwnProperty.call
+/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+/******/
+/******/
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(__webpack_require__.s = 1);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */,
+/* 1 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Component({
+  options: {
+    multipleSlots: true,
+    // 在组件定义时的选项中启用多slot支持
+    addGlobalClass: true
+  },
+  properties: {
+    title: {
+      // 标题
+      type: String,
+      value: ''
+    },
+    showCancel: {
+      // 是否显示取消按钮
+      type: Boolean,
+      value: true
+    },
+    cancelText: {
+      // 取消按钮文案
+      type: String,
+      value: '取消'
+    },
+    maskClass: {
+      // 遮罩层class
+      type: String,
+      value: ''
+    },
+    extClass: {
+      // 弹出窗 class
+      type: String,
+      value: ''
+    },
+    maskClosable: {
+      // 点击遮罩 关闭 actionsheet
+      type: Boolean,
+      value: true
+    },
+    mask: {
+      // 是否需要 遮罩层
+      type: Boolean,
+      value: true
+    },
+    show: {
+      // 是否开启 actionsheet
+      type: Boolean,
+      value: false
+    },
+    actions: {
+      // actions 列表
+      type: Array,
+      value: [],
+      // {text, extClass}
+      observer: '_groupChange'
+    }
+  },
+  methods: {
+    _groupChange(e) {
+      // 支持 一维数组 写法
+      if (e.length > 0 && typeof e[0] !== 'string' && !(e[0] instanceof Array)) {
+        this.setData({
+          actions: [this.data.actions]
+        });
+      }
+    },
+
+    buttonTap(e) {
+      const {
+        value,
+        groupindex,
+        index
+      } = e.currentTarget.dataset;
+      this.triggerEvent('actiontap', {
+        value,
+        groupindex,
+        index
+      });
+    },
+
+    closeActionSheet(e) {
+      const {
+        type
+      } = e.currentTarget.dataset;
+
+      if (this.data.maskClosable || type) {
+        // 点击 action 里面的 取消
+        this.setData({
+          show: false
+        }); // 关闭回调事件
+
+        this.triggerEvent('close');
+      }
+    }
+
+  }
+});
+
+/***/ })
+/******/ ]);

+ 4 - 0
miniprogram/miniprogram_npm/weui-miniprogram/actionsheet/actionsheet.json

@@ -0,0 +1,4 @@
+{
+  "component": true,
+  "usingComponents": {}
+}

+ 51 - 0
miniprogram/miniprogram_npm/weui-miniprogram/actionsheet/actionsheet.wxml

@@ -0,0 +1,51 @@
+<wxs module="utils">
+    var join = function(a,b) {
+        return a+b
+    };
+    var isNotSlot = function(v) {
+        return typeof v !== 'string'
+    }
+    module.exports = {
+        join: join,
+        isNotSlot: isNotSlot
+    }
+</wxs>
+
+<view wx:if="{{mask}}" class="weui-mask {{show ? '' : 'weui-mask_hidden'}} {{maskClass}}" bindtap="closeActionSheet"></view>
+<view class="weui-actionsheet {{show ? 'weui-actionsheet_toggle' : ''}} {{extClass}}">
+    <!-- 标题 -->
+    <block  wx:if="{{title}}"> 
+        <view class="weui-actionsheet__title">
+            <view class="weui-actionsheet__title-text">{{title}}</view>
+        </view>
+    </block>
+    <slot name="title" wx:else></slot>
+    <view 
+        class="{{ !showCancel && index === actions.length-1 ? 'weui-actionsheet__action' : 'weui-actionsheet__menu' }}"
+        wx:key="index"
+        wx:for-item="actionItem" 
+        wx:for-index="index"
+        wx:for="{{actions}}"
+    >
+        <block wx:if="{{utils.isNotSlot(actionItem)}}">
+            <view
+                class="weui-actionsheet__cell {{item.type === 'warn' ? 'weui-actionsheet__cell_warn' : '' }}"
+                hover-class="weui-active"
+                wx:key="actionIndex" 
+                wx:for="{{actionItem}}"
+                wx:for-index="actionIndex"
+                data-groupindex="{{index}}"
+                data-index="{{actionIndex}}" 
+                data-value="{{item.value}}"
+                bindtap="buttonTap"
+            >
+                {{item.text}}
+            </view>  
+        </block>
+        <slot name="{{actionItem}}" wx:else></slot>
+    </view>
+    <!-- 取消按钮 -->
+    <view class="weui-actionsheet__action" wx:if="{{showCancel}}">
+        <view class="weui-actionsheet__cell" hover-class="weui-active" data-type="close" id="iosActionsheetCancel" bindtap="closeActionSheet">{{cancelText}}</view>
+    </view>
+</view>

+ 1 - 0
miniprogram/miniprogram_npm/weui-miniprogram/actionsheet/actionsheet.wxss

@@ -0,0 +1 @@
+.weui-mask.weui-mask_hidden{opacity:0;transform:scale3d(1, 1, 0)}.weui-mask{opacity:1;transform:scale3d(1, 1, 1);transition:all .3s}

+ 114 - 0
miniprogram/miniprogram_npm/weui-miniprogram/badge/badge.js

@@ -0,0 +1,114 @@
+module.exports =
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+/******/
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId]) {
+/******/ 			return installedModules[moduleId].exports;
+/******/ 		}
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			i: moduleId,
+/******/ 			l: false,
+/******/ 			exports: {}
+/******/ 		};
+/******/
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ 		// Flag the module as loaded
+/******/ 		module.l = true;
+/******/
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/
+/******/
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+/******/
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+/******/
+/******/ 	// define getter function for harmony exports
+/******/ 	__webpack_require__.d = function(exports, name, getter) {
+/******/ 		if(!__webpack_require__.o(exports, name)) {
+/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ 		}
+/******/ 	};
+/******/
+/******/ 	// define __esModule on exports
+/******/ 	__webpack_require__.r = function(exports) {
+/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ 		}
+/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
+/******/ 	};
+/******/
+/******/ 	// create a fake namespace object
+/******/ 	// mode & 1: value is a module id, require it
+/******/ 	// mode & 2: merge all properties of value into the ns
+/******/ 	// mode & 4: return value when already ns object
+/******/ 	// mode & 8|1: behave like require
+/******/ 	__webpack_require__.t = function(value, mode) {
+/******/ 		if(mode & 1) value = __webpack_require__(value);
+/******/ 		if(mode & 8) return value;
+/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ 		var ns = Object.create(null);
+/******/ 		__webpack_require__.r(ns);
+/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ 		return ns;
+/******/ 	};
+/******/
+/******/ 	// getDefaultExport function for compatibility with non-harmony modules
+/******/ 	__webpack_require__.n = function(module) {
+/******/ 		var getter = module && module.__esModule ?
+/******/ 			function getDefault() { return module['default']; } :
+/******/ 			function getModuleExports() { return module; };
+/******/ 		__webpack_require__.d(getter, 'a', getter);
+/******/ 		return getter;
+/******/ 	};
+/******/
+/******/ 	// Object.prototype.hasOwnProperty.call
+/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+/******/
+/******/
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(__webpack_require__.s = 15);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 15:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Component({
+  options: {
+    addGlobalClass: true
+  },
+  properties: {
+    extClass: {
+      type: String,
+      value: ''
+    },
+    content: {
+      type: String,
+      value: ''
+    }
+  }
+});
+
+/***/ })
+
+/******/ });

+ 4 - 0
miniprogram/miniprogram_npm/weui-miniprogram/badge/badge.json

@@ -0,0 +1,4 @@
+{
+    "component": true,
+    "usingComponents": {}
+}

+ 1 - 0
miniprogram/miniprogram_npm/weui-miniprogram/badge/badge.wxml

@@ -0,0 +1 @@
+<view class="weui-badge {{extClass}} {{!content ? 'weui-badge_dot' : ''}}">{{content}}</view>

+ 0 - 0
miniprogram/miniprogram_npm/weui-miniprogram/badge/badge.wxss


+ 231 - 0
miniprogram/miniprogram_npm/weui-miniprogram/cell/cell.js

@@ -0,0 +1,231 @@
+module.exports =
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+/******/
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId]) {
+/******/ 			return installedModules[moduleId].exports;
+/******/ 		}
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			i: moduleId,
+/******/ 			l: false,
+/******/ 			exports: {}
+/******/ 		};
+/******/
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ 		// Flag the module as loaded
+/******/ 		module.l = true;
+/******/
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/
+/******/
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+/******/
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+/******/
+/******/ 	// define getter function for harmony exports
+/******/ 	__webpack_require__.d = function(exports, name, getter) {
+/******/ 		if(!__webpack_require__.o(exports, name)) {
+/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ 		}
+/******/ 	};
+/******/
+/******/ 	// define __esModule on exports
+/******/ 	__webpack_require__.r = function(exports) {
+/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ 		}
+/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
+/******/ 	};
+/******/
+/******/ 	// create a fake namespace object
+/******/ 	// mode & 1: value is a module id, require it
+/******/ 	// mode & 2: merge all properties of value into the ns
+/******/ 	// mode & 4: return value when already ns object
+/******/ 	// mode & 8|1: behave like require
+/******/ 	__webpack_require__.t = function(value, mode) {
+/******/ 		if(mode & 1) value = __webpack_require__(value);
+/******/ 		if(mode & 8) return value;
+/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ 		var ns = Object.create(null);
+/******/ 		__webpack_require__.r(ns);
+/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ 		return ns;
+/******/ 	};
+/******/
+/******/ 	// getDefaultExport function for compatibility with non-harmony modules
+/******/ 	__webpack_require__.n = function(module) {
+/******/ 		var getter = module && module.__esModule ?
+/******/ 			function getDefault() { return module['default']; } :
+/******/ 			function getModuleExports() { return module; };
+/******/ 		__webpack_require__.d(getter, 'a', getter);
+/******/ 		return getter;
+/******/ 	};
+/******/
+/******/ 	// Object.prototype.hasOwnProperty.call
+/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+/******/
+/******/
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(__webpack_require__.s = 9);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 9:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Component({
+  options: {
+    addGlobalClass: true,
+    multipleSlots: true
+  },
+  properties: {
+    hover: {
+      type: Boolean,
+      value: false
+    },
+    link: {
+      type: Boolean,
+      value: false
+    },
+    extClass: {
+      type: String,
+      value: ''
+    },
+    iconClass: {
+      type: String,
+      value: ''
+    },
+    bodyClass: {
+      type: String,
+      value: ''
+    },
+    icon: {
+      type: String,
+      value: ''
+    },
+    title: {
+      // 和icon二选一,都是放在cell_hd里面
+      type: String,
+      value: ''
+    },
+    value: {
+      type: String,
+      value: ''
+    },
+    showError: {
+      type: Boolean,
+      value: false
+    },
+    prop: {
+      // 校验的属性,给父元素form使用
+      type: String,
+      value: ''
+    },
+    url: {
+      // 在link为true的时候有效,表示navigator的跳转url
+      type: String,
+      value: ''
+    },
+    footerClass: {
+      type: String,
+      value: ''
+    },
+    footer: {
+      type: String,
+      value: ''
+    },
+    inline: {
+      // 左右布局样式还是上下布局
+      type: Boolean,
+      value: true
+    },
+    hasHeader: {
+      type: Boolean,
+      value: true
+    },
+    hasFooter: {
+      type: Boolean,
+      value: true
+    },
+    hasBody: {
+      type: Boolean,
+      value: true
+    },
+    extHoverClass: {
+      // 提供给需要定制 hover-class 的场景,要求 hover 为 false
+      type: String,
+      value: ''
+    }
+  },
+  relations: {
+    '../form/form': {
+      type: 'ancestor'
+    },
+    '../cells/cells': {
+      type: 'ancestor'
+    }
+  },
+  data: {
+    inForm: false
+  },
+  methods: {
+    setError(error) {
+      this.setData({
+        error: error || false
+      });
+    },
+
+    setInForm() {
+      this.setData({
+        inForm: true
+      });
+    },
+
+    setOuterClass(className) {
+      this.setData({
+        outerClass: className
+      });
+    },
+
+    navigateTo() {
+      const data = this.data;
+
+      if (data.url && data.link) {
+        wx.navigateTo({
+          url: data.url,
+          success: res => {
+            this.triggerEvent('navigatesuccess', res, {});
+          },
+          fail: fail => {
+            this.triggerEvent('navigateerror', fail, {});
+          }
+        });
+      }
+    }
+
+  }
+});
+
+/***/ })
+
+/******/ });

+ 6 - 0
miniprogram/miniprogram_npm/weui-miniprogram/cell/cell.json

@@ -0,0 +1,6 @@
+{
+    "component": true,
+    "usingComponents": {
+        "mp-cells": "../cells/cells"
+    }
+}

+ 73 - 0
miniprogram/miniprogram_npm/weui-miniprogram/cell/cell.wxml

@@ -0,0 +1,73 @@
+<block wx:if="{{link}}">
+    <view bindtap="navigateTo" class="weui-cell weui-cell_access {{extClass}} {{outerClass}}{{inForm ? ' weui-cell-inform' : ''}}{{inline ? '' : ' .weui-cell_label-block'}}" hover-class="{{hover ? 'weui-cell_active weui-active' : extHoverClass}}">
+        <view wx:if="{{hasHeader}}" class="weui-cell__hd {{iconClass}}">
+            <block wx:if="{{icon}}">
+                <image src="{{icon}}" class="weui-cell__icon" mode="aspectFit"></image>
+            </block>
+            <block wx:else>
+                <slot name="icon"></slot>
+            </block>
+            <block wx:if="{{inForm}}">
+                <block wx:if="{{title}}"><view class="weui-label">{{title}}</view></block>
+                <block wx:else>
+                    <slot name="title"></slot>
+                </block>
+            </block>
+            <block wx:else>
+                <block wx:if="{{title}}">{{title}}</block>
+                <block wx:else>
+                    <slot name="title"></slot>
+                </block>
+            </block>
+        </view>
+        <view wx:if="{{hasBody}}" class="weui-cell__bd">
+            <block wx:if="{{value}}">{{value}}</block>
+            <block wx:else>
+                <slot></slot>
+            </block>
+        </view>
+        <view wx:if="{{hasFooter}}" class="weui-cell__ft weui-cell__ft_in-access {{footerClass}}">
+            <block wx:if="{{footer}}">{{footer}}</block>
+            <block wx:else>
+                <slot name="footer"></slot>
+            </block>
+        </view>
+    </view>
+</block>
+<block wx:else>
+    <view bindtap="navigateTo" class="weui-cell {{showError && error ? 'weui-cell_warn' : ''}} {{inForm ? 'weui-cell-inform' : ''}} {{extClass}} {{outerClass}}" hover-class="{{hover ? 'weui-cell_active weui-active' : extHoverClass}}">
+        <view wx:if="{{hasHeader}}" class="weui-cell__hd {{iconClass}}">
+            <block wx:if="{{icon}}">
+                <image src="{{icon}}" class="weui-cell__icon" mode="aspectFit"></image>
+            </block>
+            <block wx:else>
+                <slot name="icon"></slot>
+            </block>
+            <block wx:if="{{inForm}}">
+                <block wx:if="{{title}}"><view class="weui-label">{{title}}</view></block>
+                <block wx:else>
+                    <slot name="title"></slot>
+                </block>
+            </block>
+            <block wx:else>
+                <block wx:if="{{title}}">{{title}}</block>
+                <block wx:else>
+                    <slot name="title"></slot>
+                </block>
+            </block>
+        </view>
+        <view wx:if="{{hasBody}}" class="weui-cell__bd {{bodyClass}}">
+            <block wx:if="{{value}}">{{value}}</block>
+            <block wx:else>
+                <slot></slot>
+            </block>
+        </view>
+        <view wx:if="{{hasFooter}}" class="weui-cell__ft {{footerClass}}">
+            <block wx:if="{{footer}}">{{footer}}</block>
+            <block wx:else>
+                <slot name="footer"></slot>
+            </block>
+            <icon wx:if="{{showError && error}}" type="warn" size="23" color="#E64340"></icon>
+        </view>
+    </view>
+</block>

+ 1 - 0
miniprogram/miniprogram_npm/weui-miniprogram/cell/cell.wxss

@@ -0,0 +1 @@
+.weui-cell_wxss.weui-cell_wxss:before{display:block}

+ 183 - 0
miniprogram/miniprogram_npm/weui-miniprogram/cells/cells.js

@@ -0,0 +1,183 @@
+module.exports =
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+/******/
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId]) {
+/******/ 			return installedModules[moduleId].exports;
+/******/ 		}
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			i: moduleId,
+/******/ 			l: false,
+/******/ 			exports: {}
+/******/ 		};
+/******/
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ 		// Flag the module as loaded
+/******/ 		module.l = true;
+/******/
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/
+/******/
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+/******/
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+/******/
+/******/ 	// define getter function for harmony exports
+/******/ 	__webpack_require__.d = function(exports, name, getter) {
+/******/ 		if(!__webpack_require__.o(exports, name)) {
+/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ 		}
+/******/ 	};
+/******/
+/******/ 	// define __esModule on exports
+/******/ 	__webpack_require__.r = function(exports) {
+/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ 		}
+/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
+/******/ 	};
+/******/
+/******/ 	// create a fake namespace object
+/******/ 	// mode & 1: value is a module id, require it
+/******/ 	// mode & 2: merge all properties of value into the ns
+/******/ 	// mode & 4: return value when already ns object
+/******/ 	// mode & 8|1: behave like require
+/******/ 	__webpack_require__.t = function(value, mode) {
+/******/ 		if(mode & 1) value = __webpack_require__(value);
+/******/ 		if(mode & 8) return value;
+/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ 		var ns = Object.create(null);
+/******/ 		__webpack_require__.r(ns);
+/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ 		return ns;
+/******/ 	};
+/******/
+/******/ 	// getDefaultExport function for compatibility with non-harmony modules
+/******/ 	__webpack_require__.n = function(module) {
+/******/ 		var getter = module && module.__esModule ?
+/******/ 			function getDefault() { return module['default']; } :
+/******/ 			function getModuleExports() { return module; };
+/******/ 		__webpack_require__.d(getter, 'a', getter);
+/******/ 		return getter;
+/******/ 	};
+/******/
+/******/ 	// Object.prototype.hasOwnProperty.call
+/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+/******/
+/******/
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(__webpack_require__.s = 8);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 8:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Component({
+  options: {
+    addGlobalClass: true,
+    multipleSlots: true
+  },
+  properties: {
+    title: {
+      type: String,
+      value: ''
+    },
+    extClass: {
+      type: String,
+      value: ''
+    },
+    footer: {
+      type: String,
+      value: ''
+    }
+  },
+  data: {
+    firstItem: null,
+    checkboxCount: 0,
+    checkboxIsMulti: false,
+    outerClass: '',
+    childClass: ''
+  },
+  relations: {
+    '../cell/cell': {
+      type: 'descendant',
+
+      linked(target) {
+        if (!this.data.firstItem) {
+          this.data.firstItem = target;
+        }
+
+        if (target !== this.data.firstItem) {
+          target.setOuterClass('weui-cell_wxss');
+        }
+      }
+
+    },
+    '../form-page/form-page': {
+      type: 'ancestor'
+    },
+    '../checkbox-group/checkbox-group': {
+      type: 'descendant',
+
+      linked(target) {
+        this.setData({
+          checkboxCount: this.data.checkboxCount + 1,
+          checkboxIsMulti: target.data.multi
+        });
+      },
+
+      unlinked(target) {
+        this.setData({
+          checkboxCount: this.data.checkboxCount - 1,
+          checkboxIsMulti: target.data.multi
+        });
+      }
+
+    }
+  },
+  methods: {
+    setCellMulti(multi) {
+      this.setData({
+        checkboxIsMulti: multi
+      });
+    },
+
+    setCellsClass(className) {
+      this.setData({
+        childClass: className
+      });
+    },
+
+    setOuterClass(className) {
+      this.setData({
+        outerClass: className
+      });
+    }
+
+  }
+});
+
+/***/ })
+
+/******/ });

+ 4 - 0
miniprogram/miniprogram_npm/weui-miniprogram/cells/cells.json

@@ -0,0 +1,4 @@
+{
+    "component": true,
+    "usingComponents": {}
+}

+ 8 - 0
miniprogram/miniprogram_npm/weui-miniprogram/cells/cells.wxml

@@ -0,0 +1,8 @@
+<view class="{{extClass}} weui-cells__group {{outerClass}} {{childClass}}">
+    <view wx:if="{{title}}" class="weui-cells__title">{{title}}</view>
+    <view class="weui-cells weui-cells_after-title {{checkboxCount > 0 && checkboxIsMulti ? 'weui-cells_checkbox' : ''}}">
+        <slot></slot>
+    </view>
+    <view wx:if="{{footer}}" class="weui-cells__tips">{{footer}}</view>
+    <slot name="footer" wx:else></slot>
+</view>

+ 1 - 0
miniprogram/miniprogram_npm/weui-miniprogram/cells/cells.wxss

@@ -0,0 +1 @@
+.weui-cells__group_wxss.weui-cells__group_wxss .weui-cells__title{margin-top:24px}.weui-cells__group_form .weui-cells__tips{margin-top:8px;padding:0 32px;color:var(--weui-FG-1)}

+ 226 - 0
miniprogram/miniprogram_npm/weui-miniprogram/checkbox-group/checkbox-group.js

@@ -0,0 +1,226 @@
+module.exports =
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+/******/
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId]) {
+/******/ 			return installedModules[moduleId].exports;
+/******/ 		}
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			i: moduleId,
+/******/ 			l: false,
+/******/ 			exports: {}
+/******/ 		};
+/******/
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ 		// Flag the module as loaded
+/******/ 		module.l = true;
+/******/
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/
+/******/
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+/******/
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+/******/
+/******/ 	// define getter function for harmony exports
+/******/ 	__webpack_require__.d = function(exports, name, getter) {
+/******/ 		if(!__webpack_require__.o(exports, name)) {
+/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ 		}
+/******/ 	};
+/******/
+/******/ 	// define __esModule on exports
+/******/ 	__webpack_require__.r = function(exports) {
+/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ 		}
+/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
+/******/ 	};
+/******/
+/******/ 	// create a fake namespace object
+/******/ 	// mode & 1: value is a module id, require it
+/******/ 	// mode & 2: merge all properties of value into the ns
+/******/ 	// mode & 4: return value when already ns object
+/******/ 	// mode & 8|1: behave like require
+/******/ 	__webpack_require__.t = function(value, mode) {
+/******/ 		if(mode & 1) value = __webpack_require__(value);
+/******/ 		if(mode & 8) return value;
+/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ 		var ns = Object.create(null);
+/******/ 		__webpack_require__.r(ns);
+/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ 		return ns;
+/******/ 	};
+/******/
+/******/ 	// getDefaultExport function for compatibility with non-harmony modules
+/******/ 	__webpack_require__.n = function(module) {
+/******/ 		var getter = module && module.__esModule ?
+/******/ 			function getDefault() { return module['default']; } :
+/******/ 			function getModuleExports() { return module; };
+/******/ 		__webpack_require__.d(getter, 'a', getter);
+/******/ 		return getter;
+/******/ 	};
+/******/
+/******/ 	// Object.prototype.hasOwnProperty.call
+/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+/******/
+/******/
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(__webpack_require__.s = 24);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 24:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Component({
+  options: {
+    addGlobalClass: true,
+    multipleSlots: true
+  },
+  properties: {
+    multi: {
+      type: Boolean,
+      value: true,
+      observer: '_multiChange'
+    },
+    extClass: {
+      type: String,
+      value: ''
+    },
+    prop: {
+      type: String,
+      value: ''
+    }
+  },
+  data: {
+    targetList: [],
+    parentCell: null
+  },
+  relations: {
+    '../checkbox/checkbox': {
+      type: 'descendant',
+
+      linked(target) {
+        this.data.targetList.push(target);
+        target.setMulti(this.data.multi);
+
+        if (!this.data.firstItem) {
+          this.data.firstItem = target;
+        }
+
+        if (target !== this.data.firstItem) {
+          target.setOuterClass('weui-cell_wxss');
+        }
+      },
+
+      unlinked(target) {
+        let index = -1;
+        this.data.targetList.forEach((item, idx) => {
+          if (item === target) {
+            index = idx;
+          }
+        });
+        this.data.targetList.splice(index, 1);
+
+        if (!this.data.targetList) {
+          this.data.firstItem = null;
+        }
+      }
+
+    },
+    '../form/form': {
+      type: 'ancestor'
+    },
+    '../cells/cells': {
+      type: 'ancestor',
+
+      linked(target) {
+        if (!this.data.parentCell) {
+          this.data.parentCell = target;
+        }
+
+        this.setParentCellsClass();
+      },
+
+      unlinked() {
+        this.data.parentCell = null; // 方便内存回收
+      }
+
+    }
+  },
+  methods: {
+    checkedChange(checked, target) {
+      if (this.data.multi) {
+        const vals = [];
+        this.data.targetList.forEach(item => {
+          if (item.data.checked) {
+            vals.push(item.data.value);
+          }
+        });
+        this.triggerEvent('change', {
+          value: vals
+        });
+      } else {
+        let val = '';
+        this.data.targetList.forEach(item => {
+          if (item === target) {
+            val = item.data.value;
+          } else {
+            item.setData({
+              checked: false
+            });
+          }
+        });
+        this.triggerEvent('change', {
+          value: val
+        }, {});
+      }
+    },
+
+    setParentCellsClass() {
+      const className = this.data.multi ? 'weui-cells_checkbox' : '';
+
+      if (this.data.parentCell) {
+        this.data.parentCell.setCellsClass(className);
+      }
+    },
+
+    _multiChange(multi) {
+      this.data.targetList.forEach(target => {
+        target.setMulti(multi);
+      });
+
+      if (this.data.parentCell) {
+        this.data.parentCell.setCellMulti(multi);
+      }
+
+      return multi;
+    }
+
+  }
+});
+
+/***/ })
+
+/******/ });

+ 6 - 0
miniprogram/miniprogram_npm/weui-miniprogram/checkbox-group/checkbox-group.json

@@ -0,0 +1,6 @@
+{
+    "component": true,
+    "usingComponents": {
+        "mp-cells": "../cells/cells"
+    }
+}

+ 6 - 0
miniprogram/miniprogram_npm/weui-miniprogram/checkbox-group/checkbox-group.wxml

@@ -0,0 +1,6 @@
+<checkbox-group class="{{extClass}}" wx-if="{{multi}}" bindchange="checkedChange">
+    <slot></slot>
+</checkbox-group>
+<radio-group class="{{extClass}}" wx-else bindchange="checkedChange">
+    <slot></slot>
+</radio-group>

+ 0 - 0
miniprogram/miniprogram_npm/weui-miniprogram/checkbox-group/checkbox-group.wxss


+ 184 - 0
miniprogram/miniprogram_npm/weui-miniprogram/checkbox/checkbox.js

@@ -0,0 +1,184 @@
+module.exports =
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+/******/
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId]) {
+/******/ 			return installedModules[moduleId].exports;
+/******/ 		}
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			i: moduleId,
+/******/ 			l: false,
+/******/ 			exports: {}
+/******/ 		};
+/******/
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ 		// Flag the module as loaded
+/******/ 		module.l = true;
+/******/
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/
+/******/
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+/******/
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+/******/
+/******/ 	// define getter function for harmony exports
+/******/ 	__webpack_require__.d = function(exports, name, getter) {
+/******/ 		if(!__webpack_require__.o(exports, name)) {
+/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ 		}
+/******/ 	};
+/******/
+/******/ 	// define __esModule on exports
+/******/ 	__webpack_require__.r = function(exports) {
+/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ 		}
+/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
+/******/ 	};
+/******/
+/******/ 	// create a fake namespace object
+/******/ 	// mode & 1: value is a module id, require it
+/******/ 	// mode & 2: merge all properties of value into the ns
+/******/ 	// mode & 4: return value when already ns object
+/******/ 	// mode & 8|1: behave like require
+/******/ 	__webpack_require__.t = function(value, mode) {
+/******/ 		if(mode & 1) value = __webpack_require__(value);
+/******/ 		if(mode & 8) return value;
+/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ 		var ns = Object.create(null);
+/******/ 		__webpack_require__.r(ns);
+/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ 		return ns;
+/******/ 	};
+/******/
+/******/ 	// getDefaultExport function for compatibility with non-harmony modules
+/******/ 	__webpack_require__.n = function(module) {
+/******/ 		var getter = module && module.__esModule ?
+/******/ 			function getDefault() { return module['default']; } :
+/******/ 			function getModuleExports() { return module; };
+/******/ 		__webpack_require__.d(getter, 'a', getter);
+/******/ 		return getter;
+/******/ 	};
+/******/
+/******/ 	// Object.prototype.hasOwnProperty.call
+/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+/******/
+/******/
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(__webpack_require__.s = 25);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 25:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Component({
+  options: {
+    addGlobalClass: true,
+    multipleSlots: true
+  },
+  properties: {
+    multi: {
+      type: Boolean,
+      value: true
+    },
+    checked: {
+      type: Boolean,
+      value: false
+    },
+    value: {
+      type: String,
+      value: ''
+    },
+    label: {
+      type: String,
+      value: 'label'
+    },
+    extClass: {
+      type: String,
+      value: ''
+    }
+  },
+  data: {},
+  relations: {
+    '../checkbox-group/checkbox-group': {
+      type: 'ancestor',
+
+      linked(target) {
+        this.data.group = target;
+      },
+
+      unlinked() {
+        this.data.group = null;
+      }
+
+    }
+  },
+  methods: {
+    setMulti(multi) {
+      this.setData({
+        multi
+      });
+    },
+
+    setOuterClass(className) {
+      this.setData({
+        outerClass: className
+      });
+    },
+
+    checkedChange() {
+      if (this.data.multi) {
+        const checked = !this.data.checked;
+        this.setData({
+          checked
+        });
+
+        if (this.data.group) {
+          this.data.group.checkedChange(checked, this);
+        }
+      } else {
+        const checked = this.data.checked;
+        if (checked) return;
+        this.setData({
+          checked: true
+        });
+
+        if (this.data.group) {
+          this.data.group.checkedChange(checked, this);
+        }
+      }
+
+      this.triggerEvent('change', {
+        value: this.data.value,
+        checked: this.data.checked
+      });
+    }
+
+  }
+});
+
+/***/ })
+
+/******/ });

+ 7 - 0
miniprogram/miniprogram_npm/weui-miniprogram/checkbox/checkbox.json

@@ -0,0 +1,7 @@
+{
+    "component": true,
+    "usingComponents": {
+        "mp-cell": "../cell/cell",
+        "mp-checkbox-group": "../checkbox-group/checkbox-group"
+    }
+}

+ 20 - 0
miniprogram/miniprogram_npm/weui-miniprogram/checkbox/checkbox.wxml

@@ -0,0 +1,20 @@
+<mp-cell
+  has-footer="{{!multi}}"
+  has-header="{{multi}}"
+  bindtap="checkedChange"
+  ext-class="weui-check__label {{outerClass}} {{extClass}} {{!multi ? '^weui-cell_radio' : '^weui-cell_checkbox'}}"
+  ext-hover-class="weui-active">
+
+  <view slot="icon" wx:if="{{multi}}">
+    <checkbox value="{{value}}" checked="{{checked}}" disabled="{{disabled}}" color="{{color}}" class="weui-check">
+    </checkbox>
+    <!-- 未勾选 -->
+    <icon class="weui-icon-checked"></icon>
+  </view>
+  <view>{{label}}</view>
+  <view slot="footer" wx:if="{{!multi}}">
+    <radio value="{{value}}" checked="{{checked}}" disabled="{{disabled}}" color="{{color}}" class="weui-check"></radio>
+    <!-- 已勾选 -->
+    <icon class="weui-icon-checked"></icon>
+  </view>
+</mp-cell>

+ 1 - 0
miniprogram/miniprogram_npm/weui-miniprogram/checkbox/checkbox.wxss

@@ -0,0 +1 @@
+.weui-cell_radio .weui-check+.weui-icon-checked{color:transparent}.weui-check[checked]+.weui-icon-checked{color:var(--weui-BRAND);-webkit-mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M8.657%2018.435L3%2012.778l1.414-1.414%204.95%204.95L20.678%205l1.414%201.414-12.02%2012.021a1%201%200%2001-1.415%200z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M8.657%2018.435L3%2012.778l1.414-1.414%204.95%204.95L20.678%205l1.414%201.414-12.02%2012.021a1%201%200%2001-1.415%200z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E)}

+ 182 - 0
miniprogram/miniprogram_npm/weui-miniprogram/dialog/dialog.js

@@ -0,0 +1,182 @@
+module.exports =
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+/******/
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId]) {
+/******/ 			return installedModules[moduleId].exports;
+/******/ 		}
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			i: moduleId,
+/******/ 			l: false,
+/******/ 			exports: {}
+/******/ 		};
+/******/
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ 		// Flag the module as loaded
+/******/ 		module.l = true;
+/******/
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/
+/******/
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+/******/
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+/******/
+/******/ 	// define getter function for harmony exports
+/******/ 	__webpack_require__.d = function(exports, name, getter) {
+/******/ 		if(!__webpack_require__.o(exports, name)) {
+/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ 		}
+/******/ 	};
+/******/
+/******/ 	// define __esModule on exports
+/******/ 	__webpack_require__.r = function(exports) {
+/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ 		}
+/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
+/******/ 	};
+/******/
+/******/ 	// create a fake namespace object
+/******/ 	// mode & 1: value is a module id, require it
+/******/ 	// mode & 2: merge all properties of value into the ns
+/******/ 	// mode & 4: return value when already ns object
+/******/ 	// mode & 8|1: behave like require
+/******/ 	__webpack_require__.t = function(value, mode) {
+/******/ 		if(mode & 1) value = __webpack_require__(value);
+/******/ 		if(mode & 8) return value;
+/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ 		var ns = Object.create(null);
+/******/ 		__webpack_require__.r(ns);
+/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ 		return ns;
+/******/ 	};
+/******/
+/******/ 	// getDefaultExport function for compatibility with non-harmony modules
+/******/ 	__webpack_require__.n = function(module) {
+/******/ 		var getter = module && module.__esModule ?
+/******/ 			function getDefault() { return module['default']; } :
+/******/ 			function getModuleExports() { return module; };
+/******/ 		__webpack_require__.d(getter, 'a', getter);
+/******/ 		return getter;
+/******/ 	};
+/******/
+/******/ 	// Object.prototype.hasOwnProperty.call
+/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+/******/
+/******/
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(__webpack_require__.s = 20);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 20:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Component({
+  options: {
+    multipleSlots: true,
+    // 在组件定义时的选项中启用多slot支持
+    addGlobalClass: true
+  },
+  properties: {
+    title: {
+      // 弹窗标题,也可以通过 slot 自定义
+      type: String,
+      value: ''
+    },
+    extClass: {
+      // 弹窗 class
+      type: String,
+      value: ''
+    },
+    maskClosable: {
+      type: Boolean,
+      value: true
+    },
+    mask: {
+      // 是否需要 遮罩层
+      type: Boolean,
+      value: true
+    },
+    show: {
+      // 是否开启弹窗
+      type: Boolean,
+      value: false,
+      observer: '_showChange'
+    },
+    buttons: {
+      type: Array,
+      value: [] // {text, extClass}
+
+    }
+  },
+  data: {
+    innerShow: false
+  },
+
+  ready() {
+    const buttons = this.data.buttons;
+    const len = buttons.length;
+    buttons.forEach((btn, index) => {
+      if (len === 1) {
+        btn.className = 'weui-dialog__btn_primary';
+      } else if (index === 0) {
+        btn.className = 'weui-dialog__btn_default';
+      } else {
+        btn.className = 'weui-dialog__btn_primary';
+      }
+    });
+    this.setData({
+      buttons
+    });
+  },
+
+  methods: {
+    buttonTap(e) {
+      const {
+        index
+      } = e.currentTarget.dataset;
+      this.triggerEvent('buttontap', {
+        index,
+        item: this.data.buttons[index]
+      }, {});
+    },
+
+    close() {
+      const data = this.data;
+      if (!data.maskClosable) return;
+      this.setData({
+        show: false
+      });
+      this.triggerEvent('close', {}, {});
+    },
+
+    stopEvent() {}
+
+  }
+});
+
+/***/ })
+
+/******/ });

+ 4 - 0
miniprogram/miniprogram_npm/weui-miniprogram/dialog/dialog.json

@@ -0,0 +1,4 @@
+{
+  "component": true,
+  "usingComponents": {}
+}

+ 20 - 0
miniprogram/miniprogram_npm/weui-miniprogram/dialog/dialog.wxml

@@ -0,0 +1,20 @@
+<view bindtap="close" class="weui-mask {{!show ? 'weui-mask_hidden' : '' }}" wx:if="{{mask}}"></view>
+<view wx:if="{{show}}" bindtap="close" class="weui-dialog__wrp {{extClass}}">
+    <view class="weui-dialog" catchtap="stopEvent">
+      <view class="weui-dialog__hd">
+        <view class="weui-dialog__title">{{title}}
+          <slot name="title"></slot>
+        </view>
+      </view>
+      <view class="weui-dialog__bd">
+        <slot></slot>
+      </view>
+      <view class="weui-dialog__ft">
+        <block wx:if="{{buttons && buttons.length}}">
+          <view wx:for="{{buttons}}" wx:key="index" class="weui-dialog__btn {{item.className}} {{item.extClass}}" hover-class="weui-active" data-index="{{index}}" bindtap="buttonTap">{{item.text}}</view>
+        </block>
+        <slot name="footer" wx:else></slot>
+      </view>
+    </view>
+</view>
+

+ 1 - 0
miniprogram/miniprogram_npm/weui-miniprogram/dialog/dialog.wxss

@@ -0,0 +1 @@
+.weui-dialog.weui-dialog_hidden{opacity:0;transform:scale3d(1, 1, 0)}.weui-dialog{opacity:1;-webkit-transform:scale3d(1, 1, 1) translateY(-50%);transform:scale3d(1, 1, 1) translateY(-50%);transition:all .2s ease-in}.weui-mask.weui-mask_hidden{opacity:0;transform:scale3d(1, 1, 0)}.weui-mask{opacity:1;transform:scale3d(1, 1, 1);transition:all .2s ease-in}

+ 138 - 0
miniprogram/miniprogram_npm/weui-miniprogram/form-page/form-page.js

@@ -0,0 +1,138 @@
+module.exports =
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+/******/
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId]) {
+/******/ 			return installedModules[moduleId].exports;
+/******/ 		}
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			i: moduleId,
+/******/ 			l: false,
+/******/ 			exports: {}
+/******/ 		};
+/******/
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ 		// Flag the module as loaded
+/******/ 		module.l = true;
+/******/
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/
+/******/
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+/******/
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+/******/
+/******/ 	// define getter function for harmony exports
+/******/ 	__webpack_require__.d = function(exports, name, getter) {
+/******/ 		if(!__webpack_require__.o(exports, name)) {
+/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ 		}
+/******/ 	};
+/******/
+/******/ 	// define __esModule on exports
+/******/ 	__webpack_require__.r = function(exports) {
+/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ 		}
+/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
+/******/ 	};
+/******/
+/******/ 	// create a fake namespace object
+/******/ 	// mode & 1: value is a module id, require it
+/******/ 	// mode & 2: merge all properties of value into the ns
+/******/ 	// mode & 4: return value when already ns object
+/******/ 	// mode & 8|1: behave like require
+/******/ 	__webpack_require__.t = function(value, mode) {
+/******/ 		if(mode & 1) value = __webpack_require__(value);
+/******/ 		if(mode & 8) return value;
+/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ 		var ns = Object.create(null);
+/******/ 		__webpack_require__.r(ns);
+/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ 		return ns;
+/******/ 	};
+/******/
+/******/ 	// getDefaultExport function for compatibility with non-harmony modules
+/******/ 	__webpack_require__.n = function(module) {
+/******/ 		var getter = module && module.__esModule ?
+/******/ 			function getDefault() { return module['default']; } :
+/******/ 			function getModuleExports() { return module; };
+/******/ 		__webpack_require__.d(getter, 'a', getter);
+/******/ 		return getter;
+/******/ 	};
+/******/
+/******/ 	// Object.prototype.hasOwnProperty.call
+/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+/******/
+/******/
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(__webpack_require__.s = 2);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 2:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Component({
+  options: {
+    addGlobalClass: true,
+    multipleSlots: true
+  },
+  properties: {
+    title: {
+      // Msg 标题
+      type: String,
+      value: ''
+    },
+    subtitle: {
+      // icon 的 type
+      type: String,
+      value: ''
+    }
+  },
+  relations: {
+    '../cells/cells': {
+      type: 'descendant',
+
+      linked(target) {
+        if (!this.data.firstItem) {
+          this.data.firstItem = target;
+        }
+
+        target.setOuterClass('weui-cells__group weui-cells__group_form weui-cells_form');
+
+        if (target !== this.data.firstItem) {
+          target.setOuterClass('weui-cells__group_wxss weui-cells__group weui-cells__group_form weui-cells_form');
+        }
+      }
+
+    }
+  },
+  data: {
+    firstItem: null
+  }
+});
+
+/***/ })
+
+/******/ });

+ 4 - 0
miniprogram/miniprogram_npm/weui-miniprogram/form-page/form-page.json

@@ -0,0 +1,4 @@
+{
+  "component": true,
+  "usingComponents": {}
+}

+ 31 - 0
miniprogram/miniprogram_npm/weui-miniprogram/form-page/form-page.wxml

@@ -0,0 +1,31 @@
+<view class="weui-form">
+    <block wx:if="{{title || subtitle}}">
+      <view class="weui-form__text-area">
+          <view class="weui-form__title">{{title}}</view>
+          <view class="weui-form__desc">{{subtitle}}</view>
+      </view>
+    </block>
+    <block wx:else>
+      <view class="weui-form__text-area">
+        <slot name="title"></slot>
+      </view>
+    </block>
+  <view class="weui-form__control-area">
+    <slot></slot>
+  </view>
+  <view class="weui-form__tips-area">
+    <slot name="tips"></slot>
+  </view>
+  <view class="weui-form__opr-area">
+    <slot name="button"></slot>
+  </view>
+  <view class="weui-form__tips-area">
+    <slot name="suffixtips"></slot>
+  </view>
+  <view class="weui-form__extra-area">
+    <view class="weui-footer">
+      <slot name="footer"></slot>
+    </view>
+  </view>
+</view>
+

+ 0 - 0
miniprogram/miniprogram_npm/weui-miniprogram/form-page/form-page.wxss


+ 746 - 0
miniprogram/miniprogram_npm/weui-miniprogram/form/form.js

@@ -0,0 +1,746 @@
+module.exports =
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+/******/
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId]) {
+/******/ 			return installedModules[moduleId].exports;
+/******/ 		}
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			i: moduleId,
+/******/ 			l: false,
+/******/ 			exports: {}
+/******/ 		};
+/******/
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ 		// Flag the module as loaded
+/******/ 		module.l = true;
+/******/
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/
+/******/
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+/******/
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+/******/
+/******/ 	// define getter function for harmony exports
+/******/ 	__webpack_require__.d = function(exports, name, getter) {
+/******/ 		if(!__webpack_require__.o(exports, name)) {
+/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ 		}
+/******/ 	};
+/******/
+/******/ 	// define __esModule on exports
+/******/ 	__webpack_require__.r = function(exports) {
+/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ 		}
+/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
+/******/ 	};
+/******/
+/******/ 	// create a fake namespace object
+/******/ 	// mode & 1: value is a module id, require it
+/******/ 	// mode & 2: merge all properties of value into the ns
+/******/ 	// mode & 4: return value when already ns object
+/******/ 	// mode & 8|1: behave like require
+/******/ 	__webpack_require__.t = function(value, mode) {
+/******/ 		if(mode & 1) value = __webpack_require__(value);
+/******/ 		if(mode & 8) return value;
+/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ 		var ns = Object.create(null);
+/******/ 		__webpack_require__.r(ns);
+/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ 		return ns;
+/******/ 	};
+/******/
+/******/ 	// getDefaultExport function for compatibility with non-harmony modules
+/******/ 	__webpack_require__.n = function(module) {
+/******/ 		var getter = module && module.__esModule ?
+/******/ 			function getDefault() { return module['default']; } :
+/******/ 			function getModuleExports() { return module; };
+/******/ 		__webpack_require__.d(getter, 'a', getter);
+/******/ 		return getter;
+/******/ 	};
+/******/
+/******/ 	// Object.prototype.hasOwnProperty.call
+/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+/******/
+/******/
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(__webpack_require__.s = 4);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+exports.__esModule = true;
+exports.diffObject = exports.diff = void 0;
+
+const diff = (old, newVal) => {
+  if (!old && newVal || old && !newVal) return true;
+
+  for (const k in newVal) {
+    if (old[k] !== newVal[k]) return true;
+  }
+
+  for (const k in old) {
+    if (old[k] !== newVal[k]) return true;
+  }
+
+  return false;
+};
+
+exports.diff = diff;
+
+const diffObject = (old, newVal) => {
+  if (!old && newVal) return newVal;
+  if (!newVal && old) return old;
+  const diffObj = {};
+  let isDiff = false;
+
+  for (const k in newVal) {
+    if (old[k] !== newVal[k]) {
+      isDiff = true;
+      diffObj[k] = newVal[k];
+    }
+  }
+
+  for (const k in old) {
+    if (old[k] !== newVal[k]) {
+      isDiff = true;
+      diffObj[k] = newVal[k];
+    }
+  }
+
+  return isDiff ? diffObj : null;
+};
+
+exports.diffObject = diffObject;
+
+/***/ }),
+/* 1 */,
+/* 2 */,
+/* 3 */,
+/* 4 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+exports.__esModule = true;
+exports.default = void 0;
+
+var _formValidator = _interopRequireDefault(__webpack_require__(5));
+
+var _object = __webpack_require__(0);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function linked(target) {
+  if (target.data.prop) {
+    this.data.formItems[target.data.prop] = target;
+  }
+
+  if (target.setInForm) {
+    target.setInForm();
+  }
+
+  if (!this.data.firstItem) {
+    this.data.firstItem = target;
+  }
+}
+
+function unlinked(target) {
+  if (target.data.prop) {
+    delete this.data.formItems[target.data.prop];
+  }
+}
+
+Component({
+  properties: {
+    models: {
+      type: Object,
+      value: {},
+      observer: '_modelChange'
+    },
+    rules: {
+      // 格式是[{name, rules: {}}]
+      type: Array,
+      value: [],
+      observer: '_rulesChange'
+    },
+    extClass: {
+      type: String,
+      value: ''
+    }
+  },
+  data: {
+    errors: {},
+    formItems: {},
+    firstItem: null
+  },
+  relations: {
+    '../cell/cell': {
+      type: 'descendant',
+      linked,
+      unlinked
+    },
+    '../checkbox-group/checkbox-group': {
+      type: 'descendant',
+      linked,
+      unlinked
+    }
+  },
+
+  attached() {
+    this.initRules();
+    this.formValidator = new _formValidator.default(this.data.models, this.data.newRules);
+  },
+
+  methods: {
+    initRules(rules) {
+      const newRules = {};
+      (rules || this.data.rules).forEach(rule => {
+        if (rule.name && rule.rules) {
+          newRules[rule.name] = rule.rules || [];
+        }
+      });
+      this.setData({
+        newRules
+      });
+      return newRules;
+    },
+
+    _modelChange(newVal, oldVal) {
+      if (!this.formValidator) {
+        return newVal;
+      } // 这个必须在前面
+
+
+      this.formValidator.setModel(newVal);
+      const diffObj = (0, _object.diffObject)(oldVal, newVal);
+
+      if (diffObj) {
+        let isValid = true;
+        const errors = [];
+        const errorMap = {};
+        Object.keys(diffObj).forEach(k => {
+          this.formValidator.validateField(k, diffObj[k], function (isValided, error) {
+            if (error && error[k]) {
+              errors.push(error[k]);
+              errorMap[k] = error[k];
+            }
+
+            isValid = isValided;
+          });
+        });
+
+        this._showErrors(diffObj, errorMap);
+
+        this.triggerEvent(isValid ? 'success' : 'fail', isValid ? {
+          trigger: 'change'
+        } : {
+          errors,
+          trigger: 'change'
+        });
+      }
+
+      return newVal;
+    },
+
+    _rulesChange(newVal) {
+      const newRules = this.initRules(newVal);
+
+      if (this.formValidator) {
+        this.formValidator.setRules(newRules);
+      }
+
+      return newVal;
+    },
+
+    _showAllErrors(errors) {
+      Object.keys(this.data.newRules).forEach(k => {
+        this._showError(k, errors && errors[k]);
+      });
+    },
+
+    _showErrors(objs, errors) {
+      Object.keys(objs).forEach(k => {
+        this._showError(k, errors && errors[k]);
+      });
+    },
+
+    _showError(prop, error) {
+      const formItem = this.data.formItems[prop];
+
+      if (formItem && formItem.data.showError) {
+        formItem.setError(error);
+      }
+    },
+
+    validate(cb) {
+      return this.formValidator.validate((isValid, errors) => {
+        this._showAllErrors(errors);
+
+        const handleError = this.handleErrors(errors);
+        this.triggerEvent(isValid ? 'success' : 'fail', isValid ? {
+          trigger: 'validate'
+        } : {
+          errors: handleError,
+          trigger: 'validate'
+        });
+        cb && cb(isValid, handleError);
+      });
+    },
+
+    // eslint-disable-next-line @typescript-eslint/no-unused-vars
+    validateField(name, value, cb = (v, error = null) => {}) {
+      return this.formValidator.validateField(name, value, (isValid, errors) => {
+        this._showError(name, errors);
+
+        const handleError = this.handleErrors(errors);
+        this.triggerEvent(isValid ? 'success' : 'fail', isValid ? {
+          trigger: 'validate'
+        } : {
+          errors: handleError,
+          trigger: 'validate'
+        });
+        cb && cb(isValid, handleError);
+      });
+    },
+
+    handleErrors(errors) {
+      if (errors) {
+        const newErrors = [];
+        this.data.rules.forEach(rule => {
+          if (errors[rule.name]) {
+            errors[rule.name].name = rule.name;
+            newErrors.push(errors[rule.name]);
+          }
+        });
+        return newErrors;
+      }
+
+      return errors;
+    },
+
+    addMethod(ruleName, method) {
+      return this.formValidator.addMethod(ruleName, method);
+    }
+
+  }
+});
+var _default = _formValidator.default;
+exports.default = _default;
+
+/***/ }),
+/* 5 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+exports.__esModule = true;
+exports.default = void 0;
+
+var _validator = _interopRequireDefault(__webpack_require__(6));
+
+var _object = __webpack_require__(0);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+const toString = Object.prototype.toString;
+
+const validateSingleRule = (rule, value, param = null, models = null) => {
+  let message = '';
+  const ruleKeys = Object.keys(rule);
+
+  for (let i = 0, l = ruleKeys.length; i < l; ++i) {
+    const ruleKey = ruleKeys[i];
+    if (ruleKey === 'name' || ruleKey === 'message') continue;
+    const validateMethod = typeof rule.validator !== 'undefined' ? rule.validator : _validator.default[ruleKey];
+
+    if (typeof validateMethod === 'function') {
+      message = validateMethod(rule, value, param, models);
+
+      if (message) {
+        return message;
+      }
+    }
+  }
+
+  return message;
+};
+
+class FormValidator {
+  constructor(models, rules) {
+    _defineProperty(this, "models", void 0);
+
+    _defineProperty(this, "rules", void 0);
+
+    _defineProperty(this, "errors", void 0);
+
+    this.models = models;
+    this.rules = rules;
+    this.errors = {};
+  }
+
+  validate(cb) {
+    return new Promise(resolve => {
+      let failCount = 0;
+      const errors = this.errors;
+      const models = this.models; // let errorChanged = false
+
+      Object.keys(this.rules).forEach(fieldName => {
+        const oldError = errors[fieldName];
+
+        this._innerValidateField(fieldName, models[fieldName], (valid, newError) => {
+          if (!valid) failCount++;
+
+          if ((0, _object.diff)(oldError, newError)) {
+            errors[fieldName] = newError;
+            errorChanged = true;
+          }
+        });
+      });
+      const keys = Object.keys(errors);
+      keys.forEach(key => {
+        if (!errors[key]) delete errors[key];
+      }); // 先支持同步的接口吧
+
+      resolve({
+        isValid: !failCount,
+        errors: failCount ? errors : undefined
+      });
+      cb && cb(!failCount, failCount ? errors : undefined);
+    });
+  }
+
+  validateField(name, value, cb) {
+    return new Promise(resolve => {
+      this._innerValidateField(name, value, (valid, error) => {
+        const errObj = {};
+        errObj[name] = error;
+        resolve({
+          valid,
+          error: valid ? undefined : error
+        });
+        cb && cb(valid, valid ? undefined : errObj);
+        const oldError = this.errors[name];
+        const errorChanged = (0, _object.diff)(oldError, error);
+
+        if (errorChanged) {
+          if (!error) delete this.errors[name];
+          this.errors[name] = error;
+        }
+      });
+    });
+  }
+
+  _innerValidateField(name, value, cb) {
+    const rules = this.rules[name];
+
+    if (!rules) {
+      console.warn(`[form-validator] rule name ${name} not exists.`);
+      cb(true);
+      return;
+    } // 处理参数
+
+
+    if (typeof value === 'function') {
+      cb = value;
+      value = undefined;
+    }
+
+    let isFail = false;
+    const models = this.models;
+
+    if (toString.call(rules) === '[object Array]') {
+      rules.forEach(rule => {
+        rule.name = name; // 字段名称
+
+        const resMessage = validateSingleRule(rule, value || models[name], rule.param, models); // 失败了直接中止
+
+        if (resMessage && !isFail) {
+          isFail = true; // errors[name] = {message: resMessage}
+
+          const error = resMessage ? {
+            message: resMessage,
+            rule
+          } : undefined;
+          cb(false, error);
+        }
+      }); // 成功的回调
+
+      if (!isFail) {
+        cb(!isFail);
+      }
+    } else {
+      const rule = rules;
+      rule.name = name;
+      const resMessage = validateSingleRule(rule, value || models[name], rule.param, models);
+      const error = resMessage ? {
+        message: resMessage,
+        rule
+      } : undefined;
+
+      if (resMessage) {
+        isFail = true;
+      }
+
+      cb(!isFail, error);
+    }
+  }
+
+  static addMethod(ruleName, method) {
+    _validator.default[ruleName] = method;
+  }
+
+  setModel(newModel) {
+    this.models = newModel;
+  }
+
+  setRules(newRules) {
+    this.rules = newRules;
+  }
+
+}
+
+var _default = FormValidator;
+exports.default = _default;
+
+/***/ }),
+/* 6 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+exports.__esModule = true;
+exports.default = void 0;
+
+var _string = __webpack_require__(7);
+
+const defaultMessage = {
+  required: '%s必填',
+  minlength: '长度最少为%s',
+  maxlength: '长度最大为%s',
+  rangelength: '长度在%s和%s之间',
+  bytelength: '最多只能输入%s个字',
+  min: '值最小为%s',
+  max: '值最大为%s',
+  range: '值的范围为%s和%s之间',
+  mobile: '请输入正确的手机号',
+  email: '请输入正确的电子邮件',
+  url: '请输入正确的URL地址',
+  equalTo: '值和字段%s不相等'
+};
+
+const isEmpty = function (val) {
+  if (val === 0 || val === false) return false;
+  return !val;
+};
+
+var _default = {
+  required(r, val) {
+    if (r.required === false) return '';else if (isEmpty(val)) return (0, _string.sprintf)(r.message || defaultMessage.required, r.name);else return '';
+  },
+
+  minlength(r, val) {
+    const minlen = r.minlength;
+    val = val || '';
+    if (val.length < minlen) return (0, _string.sprintf)(r.message || defaultMessage.minlength, minlen);else return '';
+  },
+
+  maxlength(r, val) {
+    const maxlen = r.maxlength;
+    val = val || '';
+
+    if (val.length > maxlen) {
+      return (0, _string.sprintf)(r.message || defaultMessage.maxlength, maxlen);
+    } else {
+      return '';
+    }
+  },
+
+  rangelength(r, val) {
+    const range = r.rangelength;
+    val = val || '';
+
+    if (val.length > range[1] || val.length < range[0]) {
+      return (0, _string.sprintf)(r.message || defaultMessage.rangelength, range[0], range[1]);
+    } else {
+      return '';
+    }
+  },
+
+  min(r, val) {
+    const min = r.min;
+
+    if (val < min) {
+      return (0, _string.sprintf)(r.message || defaultMessage.min, min);
+    } else {
+      return '';
+    }
+  },
+
+  max(r, val) {
+    const max = r.max;
+
+    if (val > max) {
+      return (0, _string.sprintf)(r.message || defaultMessage.max, max);
+    } else {
+      return '';
+    }
+  },
+
+  range(r, val) {
+    const range = r.range;
+
+    if (val < range[0] || val > range[1]) {
+      return (0, _string.sprintf)(r.message || defaultMessage.range, range[0], range[1]);
+    } else {
+      return '';
+    }
+  },
+
+  mobile(r, val) {
+    val = val || '';
+
+    if (r.mobile === false) {
+      return '';
+    } else if (val.length !== 11) {
+      return (0, _string.sprintf)(r.message || defaultMessage.mobile);
+    } else {
+      return '';
+    }
+  },
+
+  email(r, value) {
+    if (r.email === false) return ''; // contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/
+    // eslint-disable-next-line
+
+    if (!/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(value)) {
+      return (0, _string.sprintf)(r.message || defaultMessage.email);
+    } else {
+      return '';
+    }
+  },
+
+  // http://docs.jquery.com/Plugins/Validation/Methods/url
+  url(r, value) {
+    if (r.url === false) return ''; // contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/
+
+    if ( // eslint-disable-next-line no-useless-escape
+    !/^(https?|s?ftp|weixin):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value)) {
+      return r.message || defaultMessage.url;
+    } else {
+      return '';
+    }
+  },
+
+  equalTo(r, value, param, models) {
+    const equalTo = r.equalTo;
+
+    if (value !== models[equalTo]) {
+      return (0, _string.sprintf)(r.message || defaultMessage.equalTo, r.name);
+    } else {
+      return '';
+    }
+  },
+
+  bytelength(r, value, param) {
+    param = r.param;
+    value = value || ''; // eslint-disable-next-line no-control-regex
+
+    const len = value.replace(/[^\x00-\xff]/g, '**').length;
+
+    if (len > param) {
+      return (0, _string.sprintf)(r.message || defaultMessage.bytelength, param);
+    } else {
+      return '';
+    }
+  }
+
+};
+exports.default = _default;
+
+/***/ }),
+/* 7 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+exports.__esModule = true;
+exports.sprintf = void 0;
+
+/**
+ * 占位替换
+ * @method sprintf
+ * @method String.prototype.sprintf
+ * @example
+ * "my name is %s  %s".sprintf("a","b")  =》"my name is a  b"
+ */
+const sprintf = (...args) => {
+  let i;
+  let result = args[0] || '';
+  let para;
+  let reg;
+  const length = args.length - 1;
+
+  if (length < 1) {
+    return result;
+  }
+
+  i = 1;
+
+  while (i < length + 1) {
+    result = result.replace(/%s/, '{#' + i + '#}');
+    i++;
+  }
+
+  result.replace('%s', '');
+  i = 1; // eslint-disable-next-line
+
+  while (true) {
+    para = args[i];
+
+    if (para === undefined) {
+      // 0 也是可能的替换数字
+      break;
+    }
+
+    reg = new RegExp('{#' + i + '#}', 'g');
+    result = result.replace(reg, para);
+    i++;
+  }
+
+  return result;
+};
+
+exports.sprintf = sprintf;
+
+/***/ })
+/******/ ]);

+ 4 - 0
miniprogram/miniprogram_npm/weui-miniprogram/form/form.json

@@ -0,0 +1,4 @@
+{
+    "component": true,
+    "usingComponents": {}
+}

+ 3 - 0
miniprogram/miniprogram_npm/weui-miniprogram/form/form.wxml

@@ -0,0 +1,3 @@
+<view class="{{extClass}}">
+    <slot></slot>
+</view>

+ 192 - 0
miniprogram/miniprogram_npm/weui-miniprogram/gallery/gallery.js

@@ -0,0 +1,192 @@
+module.exports =
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+/******/
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId]) {
+/******/ 			return installedModules[moduleId].exports;
+/******/ 		}
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			i: moduleId,
+/******/ 			l: false,
+/******/ 			exports: {}
+/******/ 		};
+/******/
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ 		// Flag the module as loaded
+/******/ 		module.l = true;
+/******/
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/
+/******/
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+/******/
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+/******/
+/******/ 	// define getter function for harmony exports
+/******/ 	__webpack_require__.d = function(exports, name, getter) {
+/******/ 		if(!__webpack_require__.o(exports, name)) {
+/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ 		}
+/******/ 	};
+/******/
+/******/ 	// define __esModule on exports
+/******/ 	__webpack_require__.r = function(exports) {
+/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ 		}
+/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
+/******/ 	};
+/******/
+/******/ 	// create a fake namespace object
+/******/ 	// mode & 1: value is a module id, require it
+/******/ 	// mode & 2: merge all properties of value into the ns
+/******/ 	// mode & 4: return value when already ns object
+/******/ 	// mode & 8|1: behave like require
+/******/ 	__webpack_require__.t = function(value, mode) {
+/******/ 		if(mode & 1) value = __webpack_require__(value);
+/******/ 		if(mode & 8) return value;
+/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ 		var ns = Object.create(null);
+/******/ 		__webpack_require__.r(ns);
+/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ 		return ns;
+/******/ 	};
+/******/
+/******/ 	// getDefaultExport function for compatibility with non-harmony modules
+/******/ 	__webpack_require__.n = function(module) {
+/******/ 		var getter = module && module.__esModule ?
+/******/ 			function getDefault() { return module['default']; } :
+/******/ 			function getModuleExports() { return module; };
+/******/ 		__webpack_require__.d(getter, 'a', getter);
+/******/ 		return getter;
+/******/ 	};
+/******/
+/******/ 	// Object.prototype.hasOwnProperty.call
+/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+/******/
+/******/
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(__webpack_require__.s = 21);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 21:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Component({
+  options: {
+    addGlobalClass: true
+  },
+  properties: {
+    imgUrls: {
+      type: Array,
+      value: [],
+
+      observer(newVal) {
+        this.setData({
+          currentImgs: newVal
+        });
+      }
+
+    },
+    showDelete: {
+      // 是否显示delete按钮
+      type: Boolean,
+      value: true
+    },
+    show: {
+      type: Boolean,
+      value: true
+    },
+    current: {
+      type: Number,
+      value: 0
+    },
+    hideOnClick: {
+      type: Boolean,
+      value: true
+    },
+    extClass: {
+      type: String,
+      value: ''
+    }
+  },
+  data: {
+    currentImgs: []
+  },
+
+  ready() {
+    const data = this.data;
+    this.setData({
+      currentImgs: data.imgUrls
+    });
+  },
+
+  methods: {
+    change(e) {
+      this.setData({
+        current: e.detail.current
+      });
+      this.triggerEvent('change', {
+        current: e.detail.current
+      }, {});
+    },
+
+    deleteImg() {
+      const data = this.data;
+      const imgs = data.currentImgs;
+      const url = imgs.splice(data.current, 1);
+      this.triggerEvent('delete', {
+        url: url[0],
+        index: data.current
+      }, {});
+
+      if (imgs.length === 0) {
+        // @ts-ignore
+        this.hideGallery();
+        return;
+      }
+
+      this.setData({
+        current: 0,
+        currentImgs: imgs
+      });
+    },
+
+    hideGallery() {
+      const data = this.data;
+
+      if (data.hideOnClick) {
+        this.setData({
+          show: false
+        });
+        this.triggerEvent('hide', {}, {});
+      }
+    }
+
+  }
+});
+
+/***/ })
+
+/******/ });

+ 4 - 0
miniprogram/miniprogram_npm/weui-miniprogram/gallery/gallery.json

@@ -0,0 +1,4 @@
+{
+    "component": true,
+    "usingComponents": {}
+}

+ 13 - 0
miniprogram/miniprogram_npm/weui-miniprogram/gallery/gallery.wxml

@@ -0,0 +1,13 @@
+<view class="weui-gallery {{show ? 'weui-gallery_show' : ''}} {{extClass}}">
+  <view class="weui-gallery__info">{{current+1}}/{{currentImgs.length}}</view>
+  <swiper class="weui-gallery__img__wrp" bindtap="hideGallery" indicator-dots="{{false}}" bindchange="change" current="{{current}}" autoplay="{{false}}" duration="{{500}}">
+    <block wx:for="{{currentImgs}}" wx:key="index">
+      <swiper-item>
+        <image mode="aspectFit" class="weui-gallery__img" src="{{item}}"></image>
+      </swiper-item>
+    </block>
+  </swiper>
+  <view class="weui-gallery__opr" wx:if="{{showDelete}}">
+    <navigator bindtap="deleteImg" class="weui-gallery__del">删除</navigator>
+  </view>
+</view>

+ 1 - 0
miniprogram/miniprogram_npm/weui-miniprogram/gallery/gallery.wxss

@@ -0,0 +1 @@
+.weui-gallery{display:none}.weui-gallery_show.weui-gallery{display:flex}

+ 149 - 0
miniprogram/miniprogram_npm/weui-miniprogram/grids/grids.js

@@ -0,0 +1,149 @@
+module.exports =
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+/******/
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId]) {
+/******/ 			return installedModules[moduleId].exports;
+/******/ 		}
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			i: moduleId,
+/******/ 			l: false,
+/******/ 			exports: {}
+/******/ 		};
+/******/
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ 		// Flag the module as loaded
+/******/ 		module.l = true;
+/******/
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/
+/******/
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+/******/
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+/******/
+/******/ 	// define getter function for harmony exports
+/******/ 	__webpack_require__.d = function(exports, name, getter) {
+/******/ 		if(!__webpack_require__.o(exports, name)) {
+/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ 		}
+/******/ 	};
+/******/
+/******/ 	// define __esModule on exports
+/******/ 	__webpack_require__.r = function(exports) {
+/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ 		}
+/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
+/******/ 	};
+/******/
+/******/ 	// create a fake namespace object
+/******/ 	// mode & 1: value is a module id, require it
+/******/ 	// mode & 2: merge all properties of value into the ns
+/******/ 	// mode & 4: return value when already ns object
+/******/ 	// mode & 8|1: behave like require
+/******/ 	__webpack_require__.t = function(value, mode) {
+/******/ 		if(mode & 1) value = __webpack_require__(value);
+/******/ 		if(mode & 8) return value;
+/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ 		var ns = Object.create(null);
+/******/ 		__webpack_require__.r(ns);
+/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ 		return ns;
+/******/ 	};
+/******/
+/******/ 	// getDefaultExport function for compatibility with non-harmony modules
+/******/ 	__webpack_require__.n = function(module) {
+/******/ 		var getter = module && module.__esModule ?
+/******/ 			function getDefault() { return module['default']; } :
+/******/ 			function getModuleExports() { return module; };
+/******/ 		__webpack_require__.d(getter, 'a', getter);
+/******/ 		return getter;
+/******/ 	};
+/******/
+/******/ 	// Object.prototype.hasOwnProperty.call
+/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+/******/
+/******/
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(__webpack_require__.s = 23);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 23:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+const defaultGridProps = {
+  target: 'self',
+  url: '',
+  openType: 'navigate',
+  delta: 1,
+  appId: '',
+  path: '',
+  extraData: '',
+  version: 'release',
+  hoverClass: 'navigator-hover',
+  hoverStopPropagation: false,
+  hoverStartTime: 50,
+  hoverStayTime: 600,
+  bindsuccess: () => {},
+  bindfail: () => {},
+  bindcomplete: () => {}
+};
+Component({
+  options: {
+    addGlobalClass: true,
+    pureDataPattern: /^_/
+  },
+  properties: {
+    extClass: {
+      type: String,
+      value: ''
+    },
+    grids: {
+      type: Array,
+      value: [],
+      observer: '_onGridsChange'
+    }
+  },
+  data: {
+    innerGrids: []
+  },
+
+  ready() {},
+
+  methods: {
+    _onGridsChange(grids) {
+      if (grids) {
+        this.setData({
+          innerGrids: grids.map(grid => Object.assign({}, defaultGridProps, grid))
+        });
+      }
+    }
+
+  }
+});
+
+/***/ })
+
+/******/ });

+ 4 - 0
miniprogram/miniprogram_npm/weui-miniprogram/grids/grids.json

@@ -0,0 +1,4 @@
+{
+  "component": true,
+  "usingComponents": {}
+}

+ 26 - 0
miniprogram/miniprogram_npm/weui-miniprogram/grids/grids.wxml

@@ -0,0 +1,26 @@
+<view class="weui-grids {{extClass}}">
+  <block wx:for="{{innerGrids}}" wx:key="index">
+    <navigator
+      class="weui-grid"
+      target="{{item.target}}"
+      url="{{item.url}}"
+      open-type="{{item.openType}}"
+      app-id="{{item.appId}}"
+      path="{{item.path}}"
+      extra-data="{{item.extraData}}"
+      version="{{item.version}}"
+      hover-class="{{item.hoverClass}}"
+      hover-stop-propagation="{{item.hoverStopPropagation}}"
+      hover-start-time="{{item.hoverStartTime}}"
+      hover-stay-time="{{item.hoverStayTime}}"
+      bindsuccess="{{item.bindsuccess}}"
+      bindfail="{{item.bindfail}}"
+      bindcomplete="{{item.bindcomplete}}"
+    >
+      <view class="weui-grid__icon">
+        <image class="weui-grid__icon_img" src="{{item.imgUrl}}" alt></image>
+      </view>
+      <view class="weui-grid__label">{{item.text}}</view>
+    </navigator>
+  </block>
+</view>

+ 1 - 0
miniprogram/miniprogram_npm/weui-miniprogram/grids/grids.wxss

@@ -0,0 +1 @@
+.weui-grid .weui-grid__icon_img{width:100%;height:100%}

+ 185 - 0
miniprogram/miniprogram_npm/weui-miniprogram/half-screen-dialog/half-screen-dialog.js

@@ -0,0 +1,185 @@
+module.exports =
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+/******/
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId]) {
+/******/ 			return installedModules[moduleId].exports;
+/******/ 		}
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			i: moduleId,
+/******/ 			l: false,
+/******/ 			exports: {}
+/******/ 		};
+/******/
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ 		// Flag the module as loaded
+/******/ 		module.l = true;
+/******/
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/
+/******/
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+/******/
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+/******/
+/******/ 	// define getter function for harmony exports
+/******/ 	__webpack_require__.d = function(exports, name, getter) {
+/******/ 		if(!__webpack_require__.o(exports, name)) {
+/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ 		}
+/******/ 	};
+/******/
+/******/ 	// define __esModule on exports
+/******/ 	__webpack_require__.r = function(exports) {
+/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ 		}
+/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
+/******/ 	};
+/******/
+/******/ 	// create a fake namespace object
+/******/ 	// mode & 1: value is a module id, require it
+/******/ 	// mode & 2: merge all properties of value into the ns
+/******/ 	// mode & 4: return value when already ns object
+/******/ 	// mode & 8|1: behave like require
+/******/ 	__webpack_require__.t = function(value, mode) {
+/******/ 		if(mode & 1) value = __webpack_require__(value);
+/******/ 		if(mode & 8) return value;
+/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ 		var ns = Object.create(null);
+/******/ 		__webpack_require__.r(ns);
+/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ 		return ns;
+/******/ 	};
+/******/
+/******/ 	// getDefaultExport function for compatibility with non-harmony modules
+/******/ 	__webpack_require__.n = function(module) {
+/******/ 		var getter = module && module.__esModule ?
+/******/ 			function getDefault() { return module['default']; } :
+/******/ 			function getModuleExports() { return module; };
+/******/ 		__webpack_require__.d(getter, 'a', getter);
+/******/ 		return getter;
+/******/ 	};
+/******/
+/******/ 	// Object.prototype.hasOwnProperty.call
+/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+/******/
+/******/
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(__webpack_require__.s = 17);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 17:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Component({
+  options: {
+    multipleSlots: true,
+    // 在组件定义时的选项中启用多slot支持
+    addGlobalClass: true
+  },
+  properties: {
+    closabled: {
+      // 是否具有关闭标签
+      type: Boolean,
+      value: true
+    },
+    title: {
+      // 标题,也可以通过 slot 自定义
+      type: String,
+      value: ''
+    },
+    subTitle: {
+      // 副标题,也可以通过 slot 自定义
+      type: String,
+      value: ''
+    },
+    extClass: {
+      // 弹窗 class
+      type: String,
+      value: ''
+    },
+    desc: {
+      type: String,
+      value: ''
+    },
+    tips: {
+      type: String,
+      value: ''
+    },
+    maskClosable: {
+      type: Boolean,
+      value: true
+    },
+    mask: {
+      // 是否需要 遮罩层
+      type: Boolean,
+      value: true
+    },
+    show: {
+      // 是否开启弹窗
+      type: Boolean,
+      value: false,
+      observer: '_showChange'
+    },
+    buttons: {
+      type: Array,
+      value: [] // {text, extClass}
+
+    }
+  },
+  methods: {
+    close(e) {
+      const {
+        type
+      } = e.currentTarget.dataset;
+
+      if (this.data.maskClosable || type === 'close') {
+        this.setData({
+          show: false
+        }); // 关闭弹窗回调事件
+
+        this.triggerEvent('close');
+      }
+    },
+
+    buttonTap(e) {
+      const {
+        index
+      } = e.currentTarget.dataset;
+      this.triggerEvent('buttontap', {
+        index,
+        item: this.data.buttons[index]
+      }, {});
+    },
+
+    onMaskMouseMove() {// do nothing
+    }
+
+  }
+});
+
+/***/ })
+
+/******/ });

+ 4 - 0
miniprogram/miniprogram_npm/weui-miniprogram/half-screen-dialog/half-screen-dialog.json

@@ -0,0 +1,4 @@
+{
+  "component": true,
+  "usingComponents": {}
+}

+ 42 - 0
miniprogram/miniprogram_npm/weui-miniprogram/half-screen-dialog/half-screen-dialog.wxml

@@ -0,0 +1,42 @@
+<view class="{{show ? 'weui-show' :'weui-hidden'}}">
+  <view class="weui-mask init" wx:if="{{mask}}" bindtap="close" catch:touchmove="onMaskMouseMove" data-type="tap"></view>
+  <view class="weui-half-screen-dialog {{extClass}}">
+    <view class="weui-half-screen-dialog__hd">
+      <view wx:if="{{closabled}}" class="weui-half-screen-dialog__hd__side" bindtap="close" data-type="close">
+        <view class="weui-icon-btn weui-icon-btn_close" hover-class="weui-active">关闭</view>
+      </view>
+      <view class="weui-half-screen-dialog__hd__main">
+        <block wx:if="{{title}}">
+          <text class="weui-half-screen-dialog__title">{{title}}</text>
+          <text class="weui-half-screen-dialog__subtitle">{{subTitle}}</text>
+        </block>
+        <block wx:else>
+          <view class="weui-half-screen-dialog__title"><slot name="title"></slot></view>
+        </block>
+      </view>
+      <view class="weui-half-screen-dialog__hd__side">
+        <view class="weui-icon-btn weui-icon-btn_more" hover-class="weui-active">更多</view>
+      </view>
+    </view>
+    <view class="weui-half-screen-dialog__bd">
+      <block wx:if="{{desc}}">
+        <view class="weui-half-screen-dialog__desc">{{desc}}</view>
+        <view class="weui-half-screen-dialog__tips">{{tips}}</view>
+      </block>
+      <slot name="desc" wx:else></slot>
+    </view>
+    <view class="weui-half-screen-dialog__ft">
+      <block wx:if="{{buttons && buttons.length}}">
+        <button
+          wx:for="{{buttons}}"
+          wx:key="index"
+          type="{{item.type}}"
+          class="weui-btn {{item.className}}"
+          data-index="{{index}}"
+          bindtap="buttonTap"
+        >{{item.text}}</button>
+      </block>
+      <slot name="footer" wx:else></slot>
+    </view>
+  </view>
+</view>

+ 1 - 0
miniprogram/miniprogram_npm/weui-miniprogram/half-screen-dialog/half-screen-dialog.wxss

@@ -0,0 +1 @@
+.weui-mask,.weui-half-screen-dialog{transition:all .3s}.weui-hidden .weui-mask{visibility:hidden;opacity:0}.weui-hidden .weui-half-screen-dialog{transform:translateY(100%)}.weui-show .weui-mask{opacity:1;visibility:visible}.weui-show .weui-half-screen-dialog{transform:translateY(0%)}

文件差异内容过多而无法显示
+ 240 - 0
miniprogram/miniprogram_npm/weui-miniprogram/icon/icon.js


+ 4 - 0
miniprogram/miniprogram_npm/weui-miniprogram/icon/icon.json

@@ -0,0 +1,4 @@
+{
+  "component": true,
+  "usingComponents": {}
+}

+ 14 - 0
miniprogram/miniprogram_npm/weui-miniprogram/icon/icon.wxml

@@ -0,0 +1,14 @@
+<wxs module="utils">
+    var double = function(a) {
+        return 2*a
+    };
+    var ifSpecialIcon = function(v) {
+      return v === 'arrow' || v === 'back'
+    }
+    module.exports = {
+      double: double,
+      ifSpecialIcon: ifSpecialIcon
+    }
+</wxs>
+
+<view class="{{extClass}} weui-icon" style="background:{{color}};width:{{size}}px;height:{{ utils.ifSpecialIcon(icon) ? utils.double(size) : size}}px;mask-image:url({{src}});-webkit-mask-image:url({{src}});-moz-mask-image:url({{src}})"></view>

+ 1 - 0
miniprogram/miniprogram_npm/weui-miniprogram/icon/icon.wxss

@@ -0,0 +1 @@
+.weui-icon{vertical-align:middle;display:inline-block;background:black;mask-repeat:no-repeat;-webkit-mask-repeat:no-repeat;-moz-mask-repeat:no-repeat;mask-size:cover;-webkit-mask-size:cover;-moz-mask-size:cover}

+ 100 - 0
miniprogram/miniprogram_npm/weui-miniprogram/index.js

@@ -0,0 +1,100 @@
+module.exports =
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+/******/
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId]) {
+/******/ 			return installedModules[moduleId].exports;
+/******/ 		}
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			i: moduleId,
+/******/ 			l: false,
+/******/ 			exports: {}
+/******/ 		};
+/******/
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ 		// Flag the module as loaded
+/******/ 		module.l = true;
+/******/
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/
+/******/
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+/******/
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+/******/
+/******/ 	// define getter function for harmony exports
+/******/ 	__webpack_require__.d = function(exports, name, getter) {
+/******/ 		if(!__webpack_require__.o(exports, name)) {
+/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ 		}
+/******/ 	};
+/******/
+/******/ 	// define __esModule on exports
+/******/ 	__webpack_require__.r = function(exports) {
+/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ 		}
+/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
+/******/ 	};
+/******/
+/******/ 	// create a fake namespace object
+/******/ 	// mode & 1: value is a module id, require it
+/******/ 	// mode & 2: merge all properties of value into the ns
+/******/ 	// mode & 4: return value when already ns object
+/******/ 	// mode & 8|1: behave like require
+/******/ 	__webpack_require__.t = function(value, mode) {
+/******/ 		if(mode & 1) value = __webpack_require__(value);
+/******/ 		if(mode & 8) return value;
+/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ 		var ns = Object.create(null);
+/******/ 		__webpack_require__.r(ns);
+/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ 		return ns;
+/******/ 	};
+/******/
+/******/ 	// getDefaultExport function for compatibility with non-harmony modules
+/******/ 	__webpack_require__.n = function(module) {
+/******/ 		var getter = module && module.__esModule ?
+/******/ 			function getDefault() { return module['default']; } :
+/******/ 			function getModuleExports() { return module; };
+/******/ 		__webpack_require__.d(getter, 'a', getter);
+/******/ 		return getter;
+/******/ 	};
+/******/
+/******/ 	// Object.prototype.hasOwnProperty.call
+/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+/******/
+/******/
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(__webpack_require__.s = 27);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 27:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+exports.__esModule = true;
+
+/***/ })
+
+/******/ });

+ 134 - 0
miniprogram/miniprogram_npm/weui-miniprogram/loading/loading.js

@@ -0,0 +1,134 @@
+module.exports =
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+/******/
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId]) {
+/******/ 			return installedModules[moduleId].exports;
+/******/ 		}
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			i: moduleId,
+/******/ 			l: false,
+/******/ 			exports: {}
+/******/ 		};
+/******/
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ 		// Flag the module as loaded
+/******/ 		module.l = true;
+/******/
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/
+/******/
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+/******/
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+/******/
+/******/ 	// define getter function for harmony exports
+/******/ 	__webpack_require__.d = function(exports, name, getter) {
+/******/ 		if(!__webpack_require__.o(exports, name)) {
+/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ 		}
+/******/ 	};
+/******/
+/******/ 	// define __esModule on exports
+/******/ 	__webpack_require__.r = function(exports) {
+/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ 		}
+/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
+/******/ 	};
+/******/
+/******/ 	// create a fake namespace object
+/******/ 	// mode & 1: value is a module id, require it
+/******/ 	// mode & 2: merge all properties of value into the ns
+/******/ 	// mode & 4: return value when already ns object
+/******/ 	// mode & 8|1: behave like require
+/******/ 	__webpack_require__.t = function(value, mode) {
+/******/ 		if(mode & 1) value = __webpack_require__(value);
+/******/ 		if(mode & 8) return value;
+/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ 		var ns = Object.create(null);
+/******/ 		__webpack_require__.r(ns);
+/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ 		return ns;
+/******/ 	};
+/******/
+/******/ 	// getDefaultExport function for compatibility with non-harmony modules
+/******/ 	__webpack_require__.n = function(module) {
+/******/ 		var getter = module && module.__esModule ?
+/******/ 			function getDefault() { return module['default']; } :
+/******/ 			function getModuleExports() { return module; };
+/******/ 		__webpack_require__.d(getter, 'a', getter);
+/******/ 		return getter;
+/******/ 	};
+/******/
+/******/ 	// Object.prototype.hasOwnProperty.call
+/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+/******/
+/******/
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(__webpack_require__.s = 14);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 14:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Component({
+  options: {
+    addGlobalClass: true
+  },
+  properties: {
+    extClass: {
+      type: String,
+      value: ''
+    },
+    show: {
+      // 默认显示出来
+      type: Boolean,
+      value: true
+    },
+    animated: {
+      type: Boolean,
+      value: false
+    },
+    duration: {
+      // 过渡动画时间
+      type: Number,
+      value: 350
+    },
+    type: {
+      type: String,
+      value: 'dot-gray' // 取值dot-white、dot-gray、circle
+
+    },
+    tips: {
+      // type是circle的时候才有效
+      type: String,
+      value: '加载中'
+    }
+  }
+});
+
+/***/ })
+
+/******/ });

+ 4 - 0
miniprogram/miniprogram_npm/weui-miniprogram/loading/loading.json

@@ -0,0 +1,4 @@
+{
+    "component": true,
+    "usingComponents": {}
+}

+ 9 - 0
miniprogram/miniprogram_npm/weui-miniprogram/loading/loading.wxml

@@ -0,0 +1,9 @@
+<view class="wx_loading_view {{animated ? 'wx_loading_view__animated' : ''}} {{!show ? 'wx_loading_view__hide' : ''}} {{extClass}}" style="{{animated ? 'transition: height ' + duration + 'ms ease;' : ''}}" id="wx_loading_view">
+    <view wx:if="{{type==='dot-white'}}" class="loading wx_dot_loading wx_dot_loading_white">
+    </view>
+    <view wx:elif="{{type==='dot-gray'}}" class="loading wx_dot_loading"></view>
+    <view wx:elif="{{type==='circle'}}" class="weui-loadmore">
+        <view class="weui-loading"></view>
+        <view class="weui-loadmore__tips">{{tips}}</view>
+    </view>
+</view>

+ 1 - 0
miniprogram/miniprogram_npm/weui-miniprogram/loading/loading.wxss

@@ -0,0 +1 @@
+.wx_loading_view{display:flex;justify-content:center;align-items:center;overflow:hidden}.wx_loading_view__hide{height:0 !important;display:none}.wx_loading_view__animated.wx_loading_view__hide{display:flex}.loading{color:rgba(255,255,255,0.9);font-size:17px;text-align:center}.loading_view_translation{transition:height .2s .3s ease}

+ 137 - 0
miniprogram/miniprogram_npm/weui-miniprogram/msg/msg.js

@@ -0,0 +1,137 @@
+module.exports =
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+/******/
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId]) {
+/******/ 			return installedModules[moduleId].exports;
+/******/ 		}
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			i: moduleId,
+/******/ 			l: false,
+/******/ 			exports: {}
+/******/ 		};
+/******/
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ 		// Flag the module as loaded
+/******/ 		module.l = true;
+/******/
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/
+/******/
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+/******/
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+/******/
+/******/ 	// define getter function for harmony exports
+/******/ 	__webpack_require__.d = function(exports, name, getter) {
+/******/ 		if(!__webpack_require__.o(exports, name)) {
+/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ 		}
+/******/ 	};
+/******/
+/******/ 	// define __esModule on exports
+/******/ 	__webpack_require__.r = function(exports) {
+/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ 		}
+/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
+/******/ 	};
+/******/
+/******/ 	// create a fake namespace object
+/******/ 	// mode & 1: value is a module id, require it
+/******/ 	// mode & 2: merge all properties of value into the ns
+/******/ 	// mode & 4: return value when already ns object
+/******/ 	// mode & 8|1: behave like require
+/******/ 	__webpack_require__.t = function(value, mode) {
+/******/ 		if(mode & 1) value = __webpack_require__(value);
+/******/ 		if(mode & 8) return value;
+/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ 		var ns = Object.create(null);
+/******/ 		__webpack_require__.r(ns);
+/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ 		return ns;
+/******/ 	};
+/******/
+/******/ 	// getDefaultExport function for compatibility with non-harmony modules
+/******/ 	__webpack_require__.n = function(module) {
+/******/ 		var getter = module && module.__esModule ?
+/******/ 			function getDefault() { return module['default']; } :
+/******/ 			function getModuleExports() { return module; };
+/******/ 		__webpack_require__.d(getter, 'a', getter);
+/******/ 		return getter;
+/******/ 	};
+/******/
+/******/ 	// Object.prototype.hasOwnProperty.call
+/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+/******/
+/******/
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(__webpack_require__.s = 19);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 19:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Component({
+  options: {
+    addGlobalClass: true,
+    multipleSlots: true
+  },
+  properties: {
+    title: {
+      // Msg 标题
+      type: String,
+      value: ''
+    },
+    type: {
+      // icon 的 type
+      type: String,
+      value: ''
+    },
+    icon: {
+      // 可以自行设置 icon, 设置icon 之后,type 失效
+      type: String,
+      value: ''
+    },
+    desc: {
+      // 描述
+      type: String,
+      value: ''
+    },
+    extClass: {
+      type: String,
+      value: ''
+    },
+    size: {
+      // 可以自行设置 icon, 设置icon 之后,type 失效
+      type: Number,
+      value: 64
+    }
+  },
+  data: {}
+});
+
+/***/ })
+
+/******/ });

+ 4 - 0
miniprogram/miniprogram_npm/weui-miniprogram/msg/msg.json

@@ -0,0 +1,4 @@
+{
+  "component": true,
+  "usingComponents": {}
+}

+ 29 - 0
miniprogram/miniprogram_npm/weui-miniprogram/msg/msg.wxml

@@ -0,0 +1,29 @@
+<view class="weui-msg {{extClass}}">
+  <view class="weui-msg__icon-area">
+    <icon type="{{type}}" size="{{size}}" wx:if="{{type}}"></icon>
+    <image class="weui-msg__icon-img" src="{{icon}}" mode="aspectFit" wx:elif="{{icon}}" />
+  </view>
+  <view class="weui-msg__text-area">
+    <view class="weui-msg__title">{{title}}</view>
+    <view class="weui-msg__desc">
+      {{desc}}
+      <slot name="desc" wx:if="{{!desc}}"></slot>
+    </view>
+    <slot name="extend"></slot>
+  </view>
+  <view class="weui-msg__opr-area">
+    <view class="weui-btn-area">
+      <slot name="handle"></slot>
+    </view>
+  </view>
+  <view class="weui-msg__tips-area">
+    <view class="weui-msg__tips">
+      <slot name="tips"></slot>
+    </view>
+  </view>
+  <view class="weui-msg__extra-area">
+    <view class="weui-footer">
+      <slot name="footer"></slot>
+    </view>
+  </view>
+</view>

+ 1 - 0
miniprogram/miniprogram_npm/weui-miniprogram/msg/msg.wxss

@@ -0,0 +1 @@
+.weui-msg__icon-img{width:190rpx;height:190rpx}

+ 211 - 0
miniprogram/miniprogram_npm/weui-miniprogram/navigation-bar/navigation-bar.js

@@ -0,0 +1,211 @@
+module.exports =
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+/******/
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId]) {
+/******/ 			return installedModules[moduleId].exports;
+/******/ 		}
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			i: moduleId,
+/******/ 			l: false,
+/******/ 			exports: {}
+/******/ 		};
+/******/
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ 		// Flag the module as loaded
+/******/ 		module.l = true;
+/******/
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/
+/******/
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+/******/
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+/******/
+/******/ 	// define getter function for harmony exports
+/******/ 	__webpack_require__.d = function(exports, name, getter) {
+/******/ 		if(!__webpack_require__.o(exports, name)) {
+/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ 		}
+/******/ 	};
+/******/
+/******/ 	// define __esModule on exports
+/******/ 	__webpack_require__.r = function(exports) {
+/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ 		}
+/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
+/******/ 	};
+/******/
+/******/ 	// create a fake namespace object
+/******/ 	// mode & 1: value is a module id, require it
+/******/ 	// mode & 2: merge all properties of value into the ns
+/******/ 	// mode & 4: return value when already ns object
+/******/ 	// mode & 8|1: behave like require
+/******/ 	__webpack_require__.t = function(value, mode) {
+/******/ 		if(mode & 1) value = __webpack_require__(value);
+/******/ 		if(mode & 8) return value;
+/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ 		var ns = Object.create(null);
+/******/ 		__webpack_require__.r(ns);
+/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ 		return ns;
+/******/ 	};
+/******/
+/******/ 	// getDefaultExport function for compatibility with non-harmony modules
+/******/ 	__webpack_require__.n = function(module) {
+/******/ 		var getter = module && module.__esModule ?
+/******/ 			function getDefault() { return module['default']; } :
+/******/ 			function getModuleExports() { return module; };
+/******/ 		__webpack_require__.d(getter, 'a', getter);
+/******/ 		return getter;
+/******/ 	};
+/******/
+/******/ 	// Object.prototype.hasOwnProperty.call
+/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+/******/
+/******/
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(__webpack_require__.s = 3);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 3:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Component({
+  options: {
+    multipleSlots: true,
+    // 在组件定义时的选项中启用多slot支持
+    addGlobalClass: true
+  },
+
+  /**
+   * 组件的属性列表
+   */
+  properties: {
+    extClass: {
+      type: String,
+      value: ''
+    },
+    title: {
+      type: String,
+      value: ''
+    },
+    background: {
+      type: String,
+      value: ''
+    },
+    color: {
+      type: String,
+      value: ''
+    },
+    back: {
+      type: Boolean,
+      value: true
+    },
+    loading: {
+      type: Boolean,
+      value: false
+    },
+    animated: {
+      // 显示隐藏的时候opacity动画效果
+      type: Boolean,
+      value: true
+    },
+    show: {
+      // 显示隐藏导航,隐藏的时候navigation-bar的高度占位还在
+      type: Boolean,
+      value: true,
+      observer: '_showChange'
+    },
+    // back为true的时候,返回的页面深度
+    delta: {
+      type: Number,
+      value: 1
+    }
+  },
+
+  /**
+   * 组件的初始数据
+   */
+  data: {
+    displayStyle: ''
+  },
+
+  attached() {
+    const isSupport = !!wx.getMenuButtonBoundingClientRect;
+    const rect = wx.getMenuButtonBoundingClientRect ? wx.getMenuButtonBoundingClientRect() : null;
+    wx.getSystemInfo({
+      success: res => {
+        const ios = !!(res.system.toLowerCase().search('ios') + 1);
+        this.setData({
+          ios,
+          statusBarHeight: res.statusBarHeight,
+          innerWidth: isSupport ? `width:${rect.left}px` : '',
+          innerPaddingRight: isSupport ? `padding-right:${res.windowWidth - rect.left}px` : '',
+          leftWidth: isSupport ? `width:${res.windowWidth - rect.left}px` : ''
+        });
+      }
+    });
+  },
+
+  /**
+   * 组件的方法列表
+   */
+  methods: {
+    _showChange(show) {
+      const animated = this.data.animated;
+      let displayStyle = '';
+
+      if (animated) {
+        displayStyle = `opacity: ${show ? '1' : '0'};-webkit-transition:opacity 0.5s;transition:opacity 0.5s;`;
+      } else {
+        displayStyle = `display: ${show ? '' : 'none'}`;
+      }
+
+      this.setData({
+        displayStyle
+      });
+    },
+
+    back() {
+      const data = this.data;
+
+      if (data.delta) {
+        wx.navigateBack({
+          delta: data.delta
+        });
+      }
+
+      this.triggerEvent('back', {
+        delta: data.delta
+      }, {});
+    }
+
+  }
+});
+
+/***/ })
+
+/******/ });

+ 4 - 0
miniprogram/miniprogram_npm/weui-miniprogram/navigation-bar/navigation-bar.json

@@ -0,0 +1,4 @@
+{
+  "component": true,
+  "usingComponents": {}
+}

+ 32 - 0
miniprogram/miniprogram_npm/weui-miniprogram/navigation-bar/navigation-bar.wxml

@@ -0,0 +1,32 @@
+<view class="weui-navigation-bar {{extClass}}">
+  <view class="weui-navigation-bar__placeholder {{ios ? 'ios' : 'android'}}" style="padding-top: {{statusBarHeight}}px;visibility: hidden;"></view>
+  <view class="weui-navigation-bar__inner {{ios ? 'ios' : 'android'}}" style="padding-top: {{statusBarHeight}}px; color: {{color}};background: {{background}};{{displayStyle}};{{innerPaddingRight}};{{innerWidth}};">
+
+    <view class='weui-navigation-bar__left' style="{{leftWidth}}">
+      <block wx:if="{{back}}">
+        <view class="weui-navigation-bar__buttons">
+          <view bindtap="back" class="weui-navigation-bar__button weui-navigation-bar__btn_goback" hover-class="weui-active"></view>
+        </view>
+      </block>
+      <block wx:else>
+        <slot name="left"></slot>
+      </block>
+    </view>
+
+    <view class='weui-navigation-bar__center'>
+      <view wx:if="{{loading}}" class="weui-navigation-bar__loading">
+        <view class="weui-loading" style="width:{{size.width}}rpx;height:{{size.height}}rpx;"></view>
+      </view>
+      <block wx:if="{{title}}">
+        <text>{{title}}</text>
+      </block>
+      <block wx:else>
+        <slot name="center"></slot>
+      </block>
+    </view>
+
+    <view class='weui-navigation-bar__right'>
+      <slot name="right"></slot>
+    </view>
+  </view>
+</view>

+ 0 - 0
miniprogram/miniprogram_npm/weui-miniprogram/navigation-bar/navigation-bar.wxss


+ 7 - 0
miniprogram/miniprogram_npm/weui-miniprogram/package.json

@@ -0,0 +1,7 @@
+{
+    "name": "weui-miniprogram",
+    "version": "1.0.7",
+    "description": "小程序 WeUI 组件库",
+    "author": "xushengni,tomylin,cunjinli,rockhou",
+    "license": "MIT"
+}

+ 243 - 0
miniprogram/miniprogram_npm/weui-miniprogram/searchbar/searchbar.js

@@ -0,0 +1,243 @@
+module.exports =
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+/******/
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId]) {
+/******/ 			return installedModules[moduleId].exports;
+/******/ 		}
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			i: moduleId,
+/******/ 			l: false,
+/******/ 			exports: {}
+/******/ 		};
+/******/
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ 		// Flag the module as loaded
+/******/ 		module.l = true;
+/******/
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/
+/******/
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+/******/
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+/******/
+/******/ 	// define getter function for harmony exports
+/******/ 	__webpack_require__.d = function(exports, name, getter) {
+/******/ 		if(!__webpack_require__.o(exports, name)) {
+/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ 		}
+/******/ 	};
+/******/
+/******/ 	// define __esModule on exports
+/******/ 	__webpack_require__.r = function(exports) {
+/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ 		}
+/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
+/******/ 	};
+/******/
+/******/ 	// create a fake namespace object
+/******/ 	// mode & 1: value is a module id, require it
+/******/ 	// mode & 2: merge all properties of value into the ns
+/******/ 	// mode & 4: return value when already ns object
+/******/ 	// mode & 8|1: behave like require
+/******/ 	__webpack_require__.t = function(value, mode) {
+/******/ 		if(mode & 1) value = __webpack_require__(value);
+/******/ 		if(mode & 8) return value;
+/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ 		var ns = Object.create(null);
+/******/ 		__webpack_require__.r(ns);
+/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ 		return ns;
+/******/ 	};
+/******/
+/******/ 	// getDefaultExport function for compatibility with non-harmony modules
+/******/ 	__webpack_require__.n = function(module) {
+/******/ 		var getter = module && module.__esModule ?
+/******/ 			function getDefault() { return module['default']; } :
+/******/ 			function getModuleExports() { return module; };
+/******/ 		__webpack_require__.d(getter, 'a', getter);
+/******/ 		return getter;
+/******/ 	};
+/******/
+/******/ 	// Object.prototype.hasOwnProperty.call
+/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+/******/
+/******/
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(__webpack_require__.s = 26);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 26:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Component({
+  options: {
+    addGlobalClass: true
+  },
+  properties: {
+    extClass: {
+      type: String,
+      value: ''
+    },
+    focus: {
+      type: Boolean,
+      value: false
+    },
+    placeholder: {
+      type: String,
+      value: '搜索'
+    },
+    value: {
+      type: String,
+      value: ''
+    },
+    search: {
+      // 返回Promise的函数
+      // @ts-ignore
+      type: Function,
+      value: null
+    },
+    throttle: {
+      // 500ms内只会调用一次search函数
+      type: Number,
+      value: 500
+    },
+    cancelText: {
+      type: String,
+      value: '取消'
+    },
+    cancel: {
+      type: Boolean,
+      value: true
+    }
+  },
+  data: {
+    result: [] // 搜索结果
+
+  },
+
+  /* @ts-ignore */
+  lastSearch: Date.now(),
+  lifetimes: {
+    // @ts-ignore
+    attached() {
+      // @ts-ignore
+      if (this.data.focus) {
+        this.setData({
+          searchState: true
+        });
+      }
+    }
+
+  },
+  methods: {
+    clearInput() {
+      // @ts-ignore
+      this.setData({
+        value: '',
+        focus: true,
+        result: []
+      }); // @ts-ignore
+
+      this.triggerEvent('clear');
+    },
+
+    // @ts-ignore
+    inputFocus(e) {
+      // this.setData({
+      //     searchState: true
+      // })
+      // @ts-ignore
+      this.triggerEvent('focus', e.detail);
+    },
+
+    // @ts-ignore
+    inputBlur(e) {
+      this.setData({
+        focus: false
+      });
+      this.triggerEvent('blur', e.detail);
+    },
+
+    showInput() {
+      this.setData({
+        focus: true,
+        searchState: true
+      });
+    },
+
+    hideInput() {
+      this.setData({
+        searchState: false
+      });
+      this.triggerEvent('cancel');
+    },
+
+    // @ts-ignore
+    inputChange(e) {
+      this.setData({
+        value: e.detail.value
+      });
+      this.triggerEvent('input', e.detail);
+
+      if (Date.now() - this.lastSearch < this.data.throttle) {
+        return;
+      }
+
+      if (typeof this.data.search !== 'function') {
+        return;
+      }
+
+      this.lastSearch = Date.now();
+      this.timerId = setTimeout(() => {
+        this.data.search(this.data.value).then(json => {
+          this.setData({
+            result: json
+          });
+        }).catch(err => {
+          console.error('search error', err);
+        });
+      }, this.data.throttle);
+    },
+
+    // @ts-ignore
+    selectResult(e) {
+      const {
+        index
+      } = e.currentTarget.dataset;
+      const item = this.data.result[index];
+      this.triggerEvent('selectresult', {
+        index,
+        item
+      });
+    }
+
+  }
+});
+
+/***/ })
+
+/******/ });

+ 7 - 0
miniprogram/miniprogram_npm/weui-miniprogram/searchbar/searchbar.json

@@ -0,0 +1,7 @@
+{
+    "component": true,
+    "usingComponents": {
+        "mp-cells": "../cells/cells",
+        "mp-cell": "../cell/cell"
+    }
+}

+ 19 - 0
miniprogram/miniprogram_npm/weui-miniprogram/searchbar/searchbar.wxml

@@ -0,0 +1,19 @@
+<view class="weui-search-bar {{searchState ? 'weui-search-bar_focusing' : ''}} {{extClass}}">
+    <view class="weui-search-bar__form">
+        <view class="weui-search-bar__box">
+            <icon class="weui-icon-search" type="search" size="12"></icon>
+            <input type="text" class="weui-search-bar__input" placeholder="{{placeholder}}" value="{{value}}" focus="{{focus}}" bindblur="inputBlur" bindfocus="inputFocus" bindinput="inputChange" />
+            <text class="weui-icon-clear" hover-class="weui-active" wx:if="{{value.length > 0}}" bindtap="clearInput"></text>
+        </view>
+        <label class="weui-search-bar__label" bindtap="showInput">
+            <icon class="weui-icon-search" type="search" size="12"></icon>
+            <text class="weui-search-bar__text">搜索</text>
+        </label>
+    </view>
+    <view wx:if="{{cancel && searchState}}" class="weui-search-bar__cancel-btn" bindtap="hideInput">{{cancelText}}</view>
+</view>
+<mp-cells ext-class=" {{'searchbar-result ' + extClass}}" wx:if="{{searchState && result.length > 0}}">
+    <mp-cell class="result" bindtap="selectResult" body-class="weui-cell_primary" data-index="{{index}}" wx:for="{{result}}" wx:key="index" hover>
+        <view>{{item.text}}</view>
+    </mp-cell>
+</mp-cells>

+ 1 - 0
miniprogram/miniprogram_npm/weui-miniprogram/searchbar/searchbar.wxss

@@ -0,0 +1 @@
+.weui-search-bar__label text{display:inline-block;font-size:14px;vertical-align:middle}

+ 225 - 0
miniprogram/miniprogram_npm/weui-miniprogram/slideview/slideview.js

@@ -0,0 +1,225 @@
+module.exports =
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+/******/
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId]) {
+/******/ 			return installedModules[moduleId].exports;
+/******/ 		}
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			i: moduleId,
+/******/ 			l: false,
+/******/ 			exports: {}
+/******/ 		};
+/******/
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ 		// Flag the module as loaded
+/******/ 		module.l = true;
+/******/
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/
+/******/
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+/******/
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+/******/
+/******/ 	// define getter function for harmony exports
+/******/ 	__webpack_require__.d = function(exports, name, getter) {
+/******/ 		if(!__webpack_require__.o(exports, name)) {
+/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ 		}
+/******/ 	};
+/******/
+/******/ 	// define __esModule on exports
+/******/ 	__webpack_require__.r = function(exports) {
+/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ 		}
+/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
+/******/ 	};
+/******/
+/******/ 	// create a fake namespace object
+/******/ 	// mode & 1: value is a module id, require it
+/******/ 	// mode & 2: merge all properties of value into the ns
+/******/ 	// mode & 4: return value when already ns object
+/******/ 	// mode & 8|1: behave like require
+/******/ 	__webpack_require__.t = function(value, mode) {
+/******/ 		if(mode & 1) value = __webpack_require__(value);
+/******/ 		if(mode & 8) return value;
+/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ 		var ns = Object.create(null);
+/******/ 		__webpack_require__.r(ns);
+/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ 		return ns;
+/******/ 	};
+/******/
+/******/ 	// getDefaultExport function for compatibility with non-harmony modules
+/******/ 	__webpack_require__.n = function(module) {
+/******/ 		var getter = module && module.__esModule ?
+/******/ 			function getDefault() { return module['default']; } :
+/******/ 			function getModuleExports() { return module; };
+/******/ 		__webpack_require__.d(getter, 'a', getter);
+/******/ 		return getter;
+/******/ 	};
+/******/
+/******/ 	// Object.prototype.hasOwnProperty.call
+/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+/******/
+/******/
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(__webpack_require__.s = 18);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 18:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Component({
+  /**
+   * 组件的属性列表
+   */
+  options: {
+    addGlobalClass: true,
+    multipleSlots: true
+  },
+  properties: {
+    extClass: {
+      type: String,
+      value: ''
+    },
+    buttons: {
+      type: Array,
+      value: [],
+
+      // type, data, text, src, extClass
+      observer() {
+        this.addClassNameForButton();
+      }
+
+    },
+    disable: {
+      type: Boolean,
+      value: false
+    },
+    icon: {
+      // 是否是icon
+      type: Boolean,
+      value: false
+    },
+    show: {
+      type: Boolean,
+      value: false
+    },
+    duration: {
+      type: Number,
+      value: 350 // 动画市场,单位ms
+
+    },
+    throttle: {
+      type: Number,
+      value: 40
+    },
+    rebounce: {
+      type: Number,
+      value: 0 // 回弹距离
+
+    }
+  },
+
+  /**
+   * 组件的初始数据
+   */
+  data: {
+    size: null
+  },
+
+  /**
+   * 组件的方法列表
+   */
+  ready() {
+    // @ts-ignore
+    this.updateRight();
+    this.addClassNameForButton();
+  },
+
+  methods: {
+    updateRight() {
+      // 获取右侧滑动显示区域的宽度
+      const data = this.data;
+      const query = wx.createSelectorQuery().in(this);
+      query.select('.left').boundingClientRect(res => {
+        const btnQuery = wx.createSelectorQuery().in(this);
+        btnQuery.selectAll('.btn').boundingClientRect(rects => {
+          this.setData({
+            size: {
+              buttons: rects,
+              button: res,
+              show: data.show,
+              disable: data.disable,
+              throttle: data.throttle,
+              rebounce: data.rebounce
+            }
+          });
+        }).exec();
+      }).exec();
+    },
+
+    addClassNameForButton() {
+      // @ts-ignore
+      const {
+        buttons,
+        icon
+      } = this.data;
+      buttons.forEach(btn => {
+        if (icon) {
+          btn.className = '';
+        } else if (btn.type === 'warn') {
+          btn.className = 'weui-slideview__btn-group_warn';
+        } else {
+          btn.className = 'weui-slideview__btn-group_default';
+        }
+      });
+      this.setData({
+        buttons
+      });
+    },
+
+    buttonTapByWxs(data) {
+      this.triggerEvent('buttontap', data, {});
+    },
+
+    hide() {
+      this.triggerEvent('hide', {}, {});
+    },
+
+    show() {
+      this.triggerEvent('show', {}, {});
+    },
+
+    transitionEnd() {}
+
+  }
+});
+
+/***/ })
+
+/******/ });

+ 4 - 0
miniprogram/miniprogram_npm/weui-miniprogram/slideview/slideview.json

@@ -0,0 +1,4 @@
+{
+  "component": true,
+  "usingComponents": {}
+}

+ 23 - 0
miniprogram/miniprogram_npm/weui-miniprogram/slideview/slideview.wxml

@@ -0,0 +1,23 @@
+<!-- slide-view/slide-view.wxml -->
+<wxs module="handler" src="./slideview.wxs"></wxs>
+<view class="weui-slideview weui-movable-view {{icon ? 'weui-slideview_icon' : ''}} {{extClass}}" style="width: 100%;height: 100%;">
+    <view bindtransitionend="{{handler.transitionEnd}}"
+      show="{{show}}" change:show="{{handler.showChange}}" 
+      rebounce="{{rebounce}}" change:rebounce="{{handler.rebounceChange}}" 
+      duration="{{duration}}" change:duration="{{handler.durationChange}}" 
+      change:disable="{{handler.disableChange}}" disable="{{disable}}" 
+      change:prop="{{handler.sizeReady}}" prop="{{size}}" 
+      bindtouchstart="{{handler.touchstart}}" bindtouchmove="{{handler.touchmove}}" bindtouchend="{{handler.touchend}}" class="weui-slideview__left left" style="width:100%;">
+      <slot></slot>
+    </view>
+    <view class="weui-slideview__right right">
+      <view class="weui-slideview__buttons" style="height:100%;width:100%;" wx:if="{{buttons && buttons.length}}">
+        <view wx:for="{{buttons}}" wx:key="index" class='btn weui-slideview__btn__wrp {{item.className}} {{item.extClass}}'>
+          <view bindtap="{{handler.hideButton}}" data-data="{{item.data}}" data-index="{{index}}" class='weui-slideview__btn'>
+            <text wx:if="{{!icon}}">{{item.text}}</text>
+            <image class="weui-slideview__btn__icon" wx:else src="{{item.src}}"/>
+          </view>
+        </view>
+      </view>
+    </view>
+</view>

+ 243 - 0
miniprogram/miniprogram_npm/weui-miniprogram/slideview/slideview.wxs

@@ -0,0 +1,243 @@
+/* eslint-disable */
+var touchstart = function(event, ownerInstance) {
+    var ins = event.instance
+    var st = ins.getState()
+    if (st.disable) return // disable的逻辑
+    // console.log('touchstart st', JSON.stringify(st))
+    if (!st.size) return
+    // console.log('touchstart', JSON.stringify(event))
+    st.isMoving = true
+    st.startX = event.touches[0].pageX
+    st.startY = event.touches[0].pageY
+    st.firstAngle = 0
+}
+var touchmove = function(event, ownerInstance) {
+    var ins = event.instance
+    var st = ins.getState()
+    if (!st.size || !st.isMoving) return
+    // console.log('touchmove', JSON.stringify(event))
+    var pagex = event.touches[0].pageX - st.startX
+    var pagey = event.touches[0].pageY - st.startY
+    // 左侧45度角为界限,大于45度则允许水平滑动
+    if (st.firstAngle === 0) {
+        st.firstAngle = Math.abs(pagex) - Math.abs(pagey)
+    }
+    if (st.firstAngle < 0) {
+        return
+    }
+    var movex = pagex > 0 ? Math.min(st.max, pagex) : Math.max(-st.max, pagex)
+    // 往回滑动的情况
+    if (st.out) {
+        // 已经是划出来了,还要往左滑动,忽略
+        if (movex < 0) return
+        ins.setStyle({
+            'transform': 'translateX(' + (st.transformx + movex) + 'px)',
+            'transition': ''
+        })
+        var btns = ownerInstance.selectAllComponents('.btn')
+        var transformTotal = 0
+        var len = btns.length
+        var i = len - 1;
+        for (;i >= 0; i--) {
+            var transform = st.size.buttons[i].width / st.max * movex
+            var transformx = st.size.buttons[i].max - Math.min(st.size.buttons[i].max, transform + transformTotal)
+            btns[i].setStyle({
+                'transform': 'translateX(' + (-transformx) + 'px)',
+                'transition': ''
+            })
+            transformTotal += transform
+        }
+        return false
+    }
+    if (movex > 0) movex = 0
+    ins.setStyle({
+        'transform': 'translateX(' + movex + 'px)',
+        'transition': ''
+    })
+    st.transformx = movex
+    var btns = ownerInstance.selectAllComponents('.btn')
+    var transformTotal = 0
+    var len = btns.length
+    var i = len - 1;
+    for (;i >= 0; i--) {
+        var transform = st.size.buttons[i].width / st.max * movex
+        var transformx = Math.max(-st.size.buttons[i].max, transform + transformTotal)
+        btns[i].setStyle({
+            'transform': 'translateX(' + transformx + 'px)',
+            'transition': ''
+        })
+        st.size.buttons[i].transformx = transformx
+        transformTotal += transform
+    }
+    return false // 禁止垂直方向的滑动
+}
+var touchend = function(event, ownerInstance) {
+    var ins = event.instance
+    var st = ins.getState()
+    if (!st.size || !st.isMoving) return
+    // 左侧45度角为界限,大于45度则允许水平滑动
+    if (st.firstAngle < 0) {
+        return
+    }
+    var duration = st.duration / 1000
+    st.isMoving = false
+    // console.log('touchend', JSON.stringify(event))
+    var btns = ownerInstance.selectAllComponents('.btn')
+    var len = btns.length
+    var i = len - 1
+    // console.log('len size', len)
+    if (Math.abs(event.changedTouches[0].pageX - st.startX) < st.throttle || event.changedTouches[0].pageX - st.startX > 0) { // 方向也要控制
+        st.out = false
+        ins.setStyle({
+            'transform': 'translate3d(0px, 0, 0)',
+            'transition': 'transform ' + (duration) + 's'
+        })
+        for (;i >= 0; i--) {
+            btns[i].setStyle({
+                'transform': 'translate3d(0px, 0, 0)',
+                'transition': 'transform ' + (duration) + 's'
+            })
+        }
+        ownerInstance.callMethod('hide')
+        return
+    }
+    showButtons(ins, ownerInstance, duration)
+    ownerInstance.callMethod('show')
+}
+var REBOUNCE_TIME = 0.2
+var showButtons = function(ins, ownerInstance, withDuration) {
+    var st = ins.getState()
+    if (!st.size) return
+    var rebounceTime = st.rebounce ? REBOUNCE_TIME : 0
+    var movex = st.max
+    st.out = true
+    var btns = ownerInstance.selectAllComponents('.btn')
+    var rebounce = st.rebounce || 0
+    var len = btns.length
+    var i = len - 1
+    ins.setStyle({
+        'transform': 'translate3d(' + (-movex - rebounce) + 'px, 0, 0)',
+        'transition': 'transform ' + (withDuration) + 's'
+    })
+    st.transformx = -movex
+    var transformTotal = 0
+    for (;i >= 0; i--) {
+        var transform = st.size.buttons[i].width / st.max * movex
+        var transformx = (-(transform + transformTotal))
+        btns[i].setStyle({
+            'transform': 'translate3d(' + transformx + 'px, 0, 0)',
+            'transition': 'transform ' + (withDuration ? withDuration + rebounceTime : withDuration) + 's'
+        })
+        st.size.buttons[i].transformx = transformx
+        transformTotal += transform
+    }
+}
+var innerHideButton = function(ownerInstance) {
+    var ins = ownerInstance.selectComponent('.left')
+    var st = ins.getState()
+    if (!st.size) return
+    var duration = st.duration ? st.duration / 1000 : 0
+    var btns = ownerInstance.selectAllComponents('.btn')
+    var len = btns.length
+    var i = len - 1
+    ins.setStyle({
+        'transform': 'translate3d(0px, 0, 0)',
+        'transition': 'transform ' + (duration) + 's'
+    })
+    st.transformx = 0
+    for (;i >= 0; i--) {
+        btns[i].setStyle({
+            'transform': 'translate3d(0px, 0, 0)',
+            'transition': 'transform ' + (duration) + 's'
+        })
+        st.size.buttons[i].transformx = 0
+    }
+}
+var hideButton = function(event, ownerInstance) {
+    innerHideButton(ownerInstance)
+    ownerInstance.callMethod('buttonTapByWxs', {index: event.currentTarget.dataset.index, data: event.currentTarget.dataset.data})
+    return false
+}
+var sizeReady = function(newVal, oldVal, ownerInstance, ins) {
+    var st = ins.getState()
+    // st.disable = newVal && newVal.disable
+    if (newVal && newVal.button && newVal.buttons) {
+        st.size = newVal
+        st.transformx = 0
+        // var min = newVal.button.width
+        var max = 0
+        var len = newVal.buttons.length
+        var i = newVal.buttons.length - 1;
+        var total = 0
+        for (; i >= 0; i--) {
+            max += newVal.buttons[i].width
+            // if (min > newVal.buttons[i]) {
+            //     min = newVal.buttons[i].width
+            // }
+            total += newVal.buttons[i].width
+            newVal.buttons[i].max = total
+            newVal.buttons[i].transformx = 0
+        }
+        st.throttle = st.size.throttle || 40 // 固定值
+        st.rebounce = st.size.rebounce
+        st.max = max
+        ownerInstance.selectComponent('.right').setStyle({
+            'line-height': newVal.button.height + 'px',
+            left: (newVal.button.width) + 'px',
+            width: max + 'px'
+        })
+        // console.log('st size', JSON.stringify(newVal))
+        if (!st.size.disable && st.size.show) {
+            showButtons(ins, ownerInstance)
+        }
+    }
+}
+var disableChange = function(newVal, oldVal, ownerInstance, ins) {
+    var st = ins.getState()
+    st.disable = newVal
+}
+var durationChange = function(newVal, oldVal, ownerInstance, ins) {
+    var st = ins.getState()
+    st.duration = newVal || 400
+}
+var showChange = function(newVal, oldVal, ownerInstance, ins) {
+    var st = ins.getState()
+    st.show = newVal
+    if (st.disable) return
+    // console.log('show change')
+    if (st.show) {
+        showButtons(ins, ownerInstance, st.duration)
+    } else {
+        innerHideButton(ownerInstance)
+    }
+}
+var rebounceChange = function(newVal, oldVal, ownerInstance, ins) {
+    var st = ins.getState()
+    // console.log('rebounce', st.rebounce)
+    st.rebounce = newVal
+}
+var transitionEnd = function(event, ownerInstance) {
+    // console.log('transition')
+    var ins = event.instance
+    var st = ins.getState()
+    // 回弹效果
+    if (st.out && st.rebounce) {
+        // console.log('transition rebounce', st.rebounce)
+        ins.setStyle({
+            'transform': 'translate3d(' + (-st.max) + 'px, 0, 0)',
+            'transition': 'transform ' + REBOUNCE_TIME +'s'
+        })
+    }
+}
+module.exports = {
+    touchstart: touchstart,
+    touchmove: touchmove,
+    touchend: touchend,
+    hideButton: hideButton,
+    sizeReady: sizeReady,
+    disableChange: disableChange,
+    durationChange: durationChange,
+    showChange: showChange,
+    rebounceChange: rebounceChange,
+    transitionEnd: transitionEnd
+}

+ 0 - 0
miniprogram/miniprogram_npm/weui-miniprogram/slideview/slideview.wxss


二进制
miniprogram/miniprogram_npm/weui-miniprogram/static/icon/s-arrow-back.png


+ 20 - 0
miniprogram/miniprogram_npm/weui-miniprogram/static/icon/s-arrow-back.svg

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="12px" height="24px" viewBox="0 0 12 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <!-- Generator: Sketch 52.2 (67145) - http://www.bohemiancoding.com/sketch -->
+    <title>Icons/Filled/arrow Copy 2</title>
+    <desc>Created with Sketch.</desc>
+    <g id="05成员管理" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="单个成员编辑" transform="translate(-25.000000, -54.000000)">
+            <rect id="bg" x="0" y="0" width="375" height="236"></rect>
+            <g id="Navbar">
+                <g id="Group-4" transform="translate(8.000000, 50.000000)">
+                    <g id="Icons/Filled/arrow" transform="translate(23.000000, 16.000000) rotate(-180.000000) translate(-23.000000, -16.000000) translate(17.000000, 4.000000)" fill="#000000" fill-opacity="0.9">
+                        <g id="Group" transform="translate(-2.000000, 5.000000)">
+                            <path d="M3,2.5039609 L11,2.5039609 L11,4.5039609 L4,4.5039609 L4,11.5039609 L2,11.5039609 L2,3.5039609 C2,2.95167615 2.44771525,2.5039609 3,2.5039609 Z" id="图标颜色" transform="translate(6.500000, 7.003961) rotate(135.000000) translate(-6.500000, -7.003961) "></path>
+                        </g>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 138 - 0
miniprogram/miniprogram_npm/weui-miniprogram/tabbar/tabbar.js

@@ -0,0 +1,138 @@
+module.exports =
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+/******/
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId]) {
+/******/ 			return installedModules[moduleId].exports;
+/******/ 		}
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			i: moduleId,
+/******/ 			l: false,
+/******/ 			exports: {}
+/******/ 		};
+/******/
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ 		// Flag the module as loaded
+/******/ 		module.l = true;
+/******/
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/
+/******/
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+/******/
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+/******/
+/******/ 	// define getter function for harmony exports
+/******/ 	__webpack_require__.d = function(exports, name, getter) {
+/******/ 		if(!__webpack_require__.o(exports, name)) {
+/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ 		}
+/******/ 	};
+/******/
+/******/ 	// define __esModule on exports
+/******/ 	__webpack_require__.r = function(exports) {
+/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ 		}
+/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
+/******/ 	};
+/******/
+/******/ 	// create a fake namespace object
+/******/ 	// mode & 1: value is a module id, require it
+/******/ 	// mode & 2: merge all properties of value into the ns
+/******/ 	// mode & 4: return value when already ns object
+/******/ 	// mode & 8|1: behave like require
+/******/ 	__webpack_require__.t = function(value, mode) {
+/******/ 		if(mode & 1) value = __webpack_require__(value);
+/******/ 		if(mode & 8) return value;
+/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ 		var ns = Object.create(null);
+/******/ 		__webpack_require__.r(ns);
+/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ 		return ns;
+/******/ 	};
+/******/
+/******/ 	// getDefaultExport function for compatibility with non-harmony modules
+/******/ 	__webpack_require__.n = function(module) {
+/******/ 		var getter = module && module.__esModule ?
+/******/ 			function getDefault() { return module['default']; } :
+/******/ 			function getModuleExports() { return module; };
+/******/ 		__webpack_require__.d(getter, 'a', getter);
+/******/ 		return getter;
+/******/ 	};
+/******/
+/******/ 	// Object.prototype.hasOwnProperty.call
+/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+/******/
+/******/
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(__webpack_require__.s = 16);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 16:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Component({
+  options: {
+    addGlobalClass: true
+  },
+  properties: {
+    extClass: {
+      type: String,
+      value: ''
+    },
+    list: {
+      type: Array,
+      value: []
+    },
+    current: {
+      type: Number,
+      value: 0
+    }
+  },
+  methods: {
+    tabChange(e) {
+      const {
+        index
+      } = e.currentTarget.dataset;
+
+      if (index === this.data.current) {
+        return;
+      }
+
+      this.setData({
+        current: index
+      });
+      this.triggerEvent('change', {
+        index,
+        item: this.data.list[index]
+      });
+    }
+
+  }
+});
+
+/***/ })
+
+/******/ });

+ 6 - 0
miniprogram/miniprogram_npm/weui-miniprogram/tabbar/tabbar.json

@@ -0,0 +1,6 @@
+{
+    "component": true,
+    "usingComponents": {
+        "mp-badge": "../badge/badge"
+    }
+}

+ 10 - 0
miniprogram/miniprogram_npm/weui-miniprogram/tabbar/tabbar.wxml

@@ -0,0 +1,10 @@
+<view class="weui-tabbar {{extClass}}">
+  <!-- 选中的时候往 weui-tabbar__item 加 class:weui-bar__item_on -->
+  <view data-index='{{index}}' bindtap="tabChange" wx:for="{{list}}" wx:key="index" class="weui-tabbar__item {{index === current ? 'weui-bar__item_on' : ''}}">
+    <view style="position: relative;display:inline-block;">
+      <image src="{{current === index ? item.selectedIconPath : item.iconPath}}" class="weui-tabbar__icon"></image>
+      <mp-badge wx:if="{{item.badge || item.dot}}" content="{{item.badge}}" style="position: absolute;top:-2px;left:calc(100% - 3px)"></mp-badge>
+    </view>
+    <view class="weui-tabbar__label">{{item.text}}</view>
+  </view>
+</view>

文件差异内容过多而无法显示
+ 0 - 0
miniprogram/miniprogram_npm/weui-miniprogram/tabbar/tabbar.wxss


+ 174 - 0
miniprogram/miniprogram_npm/weui-miniprogram/toptips/toptips.js

@@ -0,0 +1,174 @@
+module.exports =
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+/******/
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId]) {
+/******/ 			return installedModules[moduleId].exports;
+/******/ 		}
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			i: moduleId,
+/******/ 			l: false,
+/******/ 			exports: {}
+/******/ 		};
+/******/
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ 		// Flag the module as loaded
+/******/ 		module.l = true;
+/******/
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/
+/******/
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+/******/
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+/******/
+/******/ 	// define getter function for harmony exports
+/******/ 	__webpack_require__.d = function(exports, name, getter) {
+/******/ 		if(!__webpack_require__.o(exports, name)) {
+/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ 		}
+/******/ 	};
+/******/
+/******/ 	// define __esModule on exports
+/******/ 	__webpack_require__.r = function(exports) {
+/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ 		}
+/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
+/******/ 	};
+/******/
+/******/ 	// create a fake namespace object
+/******/ 	// mode & 1: value is a module id, require it
+/******/ 	// mode & 2: merge all properties of value into the ns
+/******/ 	// mode & 4: return value when already ns object
+/******/ 	// mode & 8|1: behave like require
+/******/ 	__webpack_require__.t = function(value, mode) {
+/******/ 		if(mode & 1) value = __webpack_require__(value);
+/******/ 		if(mode & 8) return value;
+/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ 		var ns = Object.create(null);
+/******/ 		__webpack_require__.r(ns);
+/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ 		return ns;
+/******/ 	};
+/******/
+/******/ 	// getDefaultExport function for compatibility with non-harmony modules
+/******/ 	__webpack_require__.n = function(module) {
+/******/ 		var getter = module && module.__esModule ?
+/******/ 			function getDefault() { return module['default']; } :
+/******/ 			function getModuleExports() { return module; };
+/******/ 		__webpack_require__.d(getter, 'a', getter);
+/******/ 		return getter;
+/******/ 	};
+/******/
+/******/ 	// Object.prototype.hasOwnProperty.call
+/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+/******/
+/******/
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(__webpack_require__.s = 13);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 13:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Component({
+  options: {
+    addGlobalClass: true
+  },
+  properties: {
+    type: {
+      type: String,
+      value: 'error',
+      observer: '_typeChange'
+    },
+    show: {
+      type: Boolean,
+      value: false,
+      observer: '_showChange'
+    },
+    msg: {
+      type: String,
+      value: ''
+    },
+    delay: {
+      type: Number,
+      value: 2000
+    },
+    extClass: {
+      type: String,
+      value: ''
+    }
+  },
+  data: {
+    typeClassMap: {
+      warn: 'weui-toptips_warn',
+      info: 'weui-toptips_info',
+      success: 'weui-toptips_success',
+      error: 'weui-toptips_error'
+    }
+  },
+
+  attached() {
+    const data = this.data;
+    this.setData({
+      className: data.typeClassMap[data.type] || ''
+    });
+  },
+
+  methods: {
+    _typeChange(newVal) {
+      this.setData({
+        className: this.data.typeClassMap[newVal] || ''
+      });
+      return newVal;
+    },
+
+    _showChange(newVal) {
+      this._showToptips(newVal);
+    },
+
+    _showToptips(newVal) {
+      if (newVal && this.data.delay) {
+        setTimeout(() => {
+          this.setData({
+            show: false
+          }, () => {
+            // tooltips 隐藏了,触发 hide 事件
+            this.triggerEvent('hide', {}, {});
+          });
+        }, this.data.delay);
+      }
+
+      this.setData({
+        show: newVal
+      });
+    }
+
+  }
+});
+
+/***/ })
+
+/******/ });

+ 4 - 0
miniprogram/miniprogram_npm/weui-miniprogram/toptips/toptips.json

@@ -0,0 +1,4 @@
+{
+    "component": true,
+    "usingComponents": {}
+}

+ 6 - 0
miniprogram/miniprogram_npm/weui-miniprogram/toptips/toptips.wxml

@@ -0,0 +1,6 @@
+<view class="weui-toptips {{className}} {{extClass}} {{show ? 'weui-toptips_show' :  ''}}">
+    <block wx:if="{{msg}}">{{msg}}</block>
+    <block wx:else>
+        <slot></slot>
+    </block>
+</view>

+ 1 - 0
miniprogram/miniprogram_npm/weui-miniprogram/toptips/toptips.wxss

@@ -0,0 +1 @@
+.weui-toptips_show.weui-toptips{display:block}.weui-toptips_show{-webkit-transform:translateZ(0) translateY(0);transform:translateZ(0) translateY(0);opacity:1}.weui-toptips_success{background-color:var(--weui-BRAND)}.weui-toptips_error{background-color:var(--weui-RED)}.weui-toptips_info{background-color:var(--weui-BLUE)}

部分文件因为文件数量过多而无法显示