瀏覽代碼

Initial Commit

guhongwei 2 年之前
當前提交
e8f7a6f615
共有 100 個文件被更改,包括 2683 次插入0 次删除
  1. 31 0
      .eslintrc.js
  2. 14 0
      .gitignore
  3. 34 0
      app.js
  4. 46 0
      app.json
  5. 47 0
      app.wxss
  6. 37 0
      commpents/dialog/index.js
  7. 4 0
      commpents/dialog/index.json
  8. 8 0
      commpents/dialog/index.wxml
  9. 19 0
      commpents/dialog/index.wxss
  10. 111 0
      commpents/hg-editor/hg-editor.js
  11. 4 0
      commpents/hg-editor/hg-editor.json
  12. 40 0
      commpents/hg-editor/hg-editor.wxml
  13. 39 0
      commpents/hg-editor/hg-editor.wxss
  14. 67 0
      commpents/hg-editor/iconfont.wxss
  15. 74 0
      commpents/mobile-frame/foot.js
  16. 4 0
      commpents/mobile-frame/foot.json
  17. 23 0
      commpents/mobile-frame/foot.less
  18. 7 0
      commpents/mobile-frame/foot.wxml
  19. 20 0
      commpents/mobile-frame/foot.wxss
  20. 38 0
      commpents/mobile-frame/index.js
  21. 7 0
      commpents/mobile-frame/index.json
  22. 38 0
      commpents/mobile-frame/index.less
  23. 15 0
      commpents/mobile-frame/index.wxml
  24. 33 0
      commpents/mobile-frame/index.wxss
  25. 26 0
      commpents/mobile-frame/top.js
  26. 4 0
      commpents/mobile-frame/top.json
  27. 34 0
      commpents/mobile-frame/top.less
  28. 7 0
      commpents/mobile-frame/top.wxml
  29. 28 0
      commpents/mobile-frame/top.wxss
  30. 37 0
      commpents/tabs/index.js
  31. 4 0
      commpents/tabs/index.json
  32. 3 0
      commpents/tabs/index.wxml
  33. 0 0
      commpents/tabs/index.wxss
  34. 11 0
      commpents/tabs/read.md
  35. 57 0
      commpents/upload/index.js
  36. 4 0
      commpents/upload/index.json
  37. 0 0
      commpents/upload/index.less
  38. 1 0
      commpents/upload/index.wxml
  39. 1 0
      commpents/upload/index.wxss
  40. 19 0
      commpents/upload/read.md
  41. 二進制
      image/back.png
  42. 二進制
      image/lingdang.png
  43. 二進制
      image/tabs/contact.png
  44. 二進制
      image/tabs/contact_1.png
  45. 二進制
      image/tabs/find.png
  46. 二進制
      image/tabs/find_1.png
  47. 二進制
      image/tabs/home.png
  48. 二進制
      image/tabs/home_1.png
  49. 二進制
      image/tabs/my.png
  50. 二進制
      image/tabs/my_1.png
  51. 二進制
      image/tabs/news.png
  52. 二進制
      image/tabs/news_1.png
  53. 二進制
      image/tabs/topic.png
  54. 二進制
      image/tabs/topic_1.png
  55. 二進制
      image/wechat.png
  56. 1 0
      miniprogram_npm/@vant/weapp/action-sheet/index.d.ts
  57. 73 0
      miniprogram_npm/@vant/weapp/action-sheet/index.js
  58. 8 0
      miniprogram_npm/@vant/weapp/action-sheet/index.json
  59. 69 0
      miniprogram_npm/@vant/weapp/action-sheet/index.wxml
  60. 1 0
      miniprogram_npm/@vant/weapp/action-sheet/index.wxss
  61. 1 0
      miniprogram_npm/@vant/weapp/area/index.d.ts
  62. 235 0
      miniprogram_npm/@vant/weapp/area/index.js
  63. 6 0
      miniprogram_npm/@vant/weapp/area/index.json
  64. 20 0
      miniprogram_npm/@vant/weapp/area/index.wxml
  65. 8 0
      miniprogram_npm/@vant/weapp/area/index.wxs
  66. 1 0
      miniprogram_npm/@vant/weapp/area/index.wxss
  67. 1 0
      miniprogram_npm/@vant/weapp/button/index.d.ts
  68. 67 0
      miniprogram_npm/@vant/weapp/button/index.js
  69. 7 0
      miniprogram_npm/@vant/weapp/button/index.json
  70. 53 0
      miniprogram_npm/@vant/weapp/button/index.wxml
  71. 39 0
      miniprogram_npm/@vant/weapp/button/index.wxs
  72. 1 0
      miniprogram_npm/@vant/weapp/button/index.wxss
  73. 68 0
      miniprogram_npm/@vant/weapp/calendar/calendar.wxml
  74. 1 0
      miniprogram_npm/@vant/weapp/calendar/components/header/index.d.ts
  75. 45 0
      miniprogram_npm/@vant/weapp/calendar/components/header/index.js
  76. 3 0
      miniprogram_npm/@vant/weapp/calendar/components/header/index.json
  77. 16 0
      miniprogram_npm/@vant/weapp/calendar/components/header/index.wxml
  78. 1 0
      miniprogram_npm/@vant/weapp/calendar/components/header/index.wxss
  79. 6 0
      miniprogram_npm/@vant/weapp/calendar/components/month/index.d.ts
  80. 158 0
      miniprogram_npm/@vant/weapp/calendar/components/month/index.js
  81. 3 0
      miniprogram_npm/@vant/weapp/calendar/components/month/index.json
  82. 39 0
      miniprogram_npm/@vant/weapp/calendar/components/month/index.wxml
  83. 71 0
      miniprogram_npm/@vant/weapp/calendar/components/month/index.wxs
  84. 1 0
      miniprogram_npm/@vant/weapp/calendar/components/month/index.wxss
  85. 1 0
      miniprogram_npm/@vant/weapp/calendar/index.d.ts
  86. 360 0
      miniprogram_npm/@vant/weapp/calendar/index.js
  87. 10 0
      miniprogram_npm/@vant/weapp/calendar/index.json
  88. 25 0
      miniprogram_npm/@vant/weapp/calendar/index.wxml
  89. 37 0
      miniprogram_npm/@vant/weapp/calendar/index.wxs
  90. 1 0
      miniprogram_npm/@vant/weapp/calendar/index.wxss
  91. 12 0
      miniprogram_npm/@vant/weapp/calendar/utils.d.ts
  92. 97 0
      miniprogram_npm/@vant/weapp/calendar/utils.js
  93. 25 0
      miniprogram_npm/@vant/weapp/calendar/utils.wxs
  94. 1 0
      miniprogram_npm/@vant/weapp/card/index.d.ts
  95. 51 0
      miniprogram_npm/@vant/weapp/card/index.js
  96. 6 0
      miniprogram_npm/@vant/weapp/card/index.json
  97. 56 0
      miniprogram_npm/@vant/weapp/card/index.wxml
  98. 1 0
      miniprogram_npm/@vant/weapp/card/index.wxss
  99. 1 0
      miniprogram_npm/@vant/weapp/cell-group/index.d.ts
  100. 0 0
      miniprogram_npm/@vant/weapp/cell-group/index.js

+ 31 - 0
.eslintrc.js

@@ -0,0 +1,31 @@
+/*
+ * Eslint config file
+ * Documentation: https://eslint.org/docs/user-guide/configuring/
+ * Install the Eslint extension before using this feature.
+ */
+module.exports = {
+  env: {
+    es6: true,
+    browser: true,
+    node: true,
+  },
+  ecmaFeatures: {
+    modules: true,
+  },
+  parserOptions: {
+    ecmaVersion: 2018,
+    sourceType: 'module',
+  },
+  globals: {
+    wx: true,
+    App: true,
+    Page: true,
+    getCurrentPages: true,
+    getApp: true,
+    Component: true,
+    requirePlugin: true,
+    requireMiniProgram: true,
+  },
+  // extends: 'eslint:recommended',
+  rules: {},
+}

+ 14 - 0
.gitignore

@@ -0,0 +1,14 @@
+# Windows
+[Dd]esktop.ini
+Thumbs.db
+$RECYCLE.BIN/
+
+# macOS
+.DS_Store
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+
+# Node.js
+node_modules/

+ 34 - 0
app.js

@@ -0,0 +1,34 @@
+import * as httpUtil from "./utils/httpUtil";
+import $checkRes from './utils/checkRes';
+const app = getApp();
+App({
+    onLaunch() {
+        // 展示本地存储能力
+        const logs = wx.getStorageSync('logs') || []
+        logs.unshift(Date.now())
+        wx.setStorageSync('logs', logs)
+        //获取设备顶部窗口的高度(不同设备窗口高度不一样,根据这个来设置自定义导航栏的高度
+        wx.getSystemInfo({
+            success: (res) => {
+                let data = res;
+                data.getMenu = wx.getMenuButtonBoundingClientRect();
+                this.globalData.client = data;
+            }
+        })
+
+    },
+    globalData: {
+        // 用户信息
+        userInfo: {},
+        // 微信用户openid,sessionKey
+        wxInfo: {},
+        // 当前设备信息
+        client: {},
+        // 数据请求接口域名
+        publicUrl: 'http://broadcast.waityou24.cn',
+        //图片请求接口域名
+        fileUrl: "https://broadcast.waityou24.cn",
+    },
+    ...httpUtil,
+    $checkRes
+})

+ 46 - 0
app.json

@@ -0,0 +1,46 @@
+{
+    "pages": [
+        "pages/index/index",
+        "pages/register/index",
+        "pages/home/index",
+        "pages/news/index",
+        "pages/topic/index",
+        "pages/my/index",
+        "pages/test/index",
+        "pages/other/agree",
+        "pages/logs/logs"
+    ],
+    "usingComponents": {
+        "van-sidebar": "@vant/weapp/sidebar/index",
+        "van-sidebar-item": "@vant/weapp/sidebar-item/index",
+        "van-search": "@vant/weapp/search/index",
+        "van-button": "@vant/weapp/button/index",
+        "van-row": "@vant/weapp/row/index",
+        "van-col": "@vant/weapp/col/index",
+        "van-dialog": "@vant/weapp/dialog/index",
+        "van-tab": "@vant/weapp/tab/index",
+        "van-tabs": "@vant/weapp/tabs/index",
+        "van-icon": "@vant/weapp/icon/index",
+        "van-nav-bar": "@vant/weapp/nav-bar/index",
+        "van-tabbar": "@vant/weapp/tabbar/index",
+        "van-tabbar-item": "@vant/weapp/tabbar-item/index",
+        "van-uploader": "@vant/weapp/uploader/index"
+    },
+    "window": {
+        "backgroundTextStyle": "light",
+        "navigationBarBackgroundColor": "#fff",
+        "navigationBarTitleText": "小程序模板",
+        "navigationBarTextStyle": "black",
+        "navigationStyle": "custom"
+    },
+    "style": "v2",
+    "requiredBackgroundModes": [
+        "location"
+    ],
+    "sitemapLocation": "sitemap.json",
+    "permission": {
+        "scope.userLocation": {
+            "desc": "你的位置信息将用于小程序位置接口的效果展示"
+        }
+    }
+}

+ 47 - 0
app.wxss

@@ -0,0 +1,47 @@
+/**app.wxss**/
+.container {
+    width: 100vw;
+    height: 100%;
+    display: flex;
+    flex-direction: column;
+    box-sizing: border-box;
+}
+
+.textOver {
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+}
+
+/* 系统颜色字体配置 */
+page {
+    /* 窗口可用高度 */
+    /* 无头无底 */
+    --oneHeight: 100vh;
+    /* 有头无底 */
+    --twoHeight: 89.4vh;
+    /* 有头有底 */
+    --thrHeight: 83.2vh;
+    /* 可用窗口背景颜色 */
+    --mainColor: #ffffff;
+    /* 导航栏背景颜色 */
+    --headColor: #f1f1f1;
+    /* 底部菜单背景颜色 */
+    --footColor: #f1f1f1;
+    /* 字体大小 */
+    --font18Szie: 18px;
+    --font17Size: 17px;
+    --font16Size: 16px;
+    --font15Size: 15px;
+    --font14Size: 14px;
+    --font13Size: 13px;
+    --font12Size: 12px;
+    /* 颜色 */
+    --f1Color: #f1f1f1;
+    --f9Color: #f9f9f9;
+    --f85Color: #858585;
+    --blackColor: #000000;
+    --whiteColor: #ffffff;
+    --redColor: #ff0000;
+    --blueColor: #0000ff;
+}

+ 37 - 0
commpents/dialog/index.js

@@ -0,0 +1,37 @@
+// commpents/mobile-frame/mobile-main.js
+const app = getApp()
+Component({
+    /**
+     * 组件的属性列表
+     */
+    options: { multipleSlots: true },
+    properties: {
+        dialog: { type: Object, value: {} },
+    },
+
+    // 生命周期函数,可以为函数,或一个在methods段中定义的方法名
+    attached: function () { }, // 此处attached的声明会被lifetimes字段中的声明覆盖
+    ready: function () { },
+    pageLifetimes: {
+        // 组件所在页面的生命周期函数
+        show: function () { },
+        hide: function () { },
+        resize: function () { },
+    },
+    /**
+     * 组件的初始数据
+     */
+    data: {
+
+    },
+    /**
+     * 组件的方法列表
+     */
+    methods: {
+        // 关闭弹框
+        toClose() {
+            this.triggerEvent('toClose')
+        }
+    }
+})
+

+ 4 - 0
commpents/dialog/index.json

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

+ 8 - 0
commpents/dialog/index.wxml

@@ -0,0 +1,8 @@
+<van-dialog use-slot title="{{dialog.title}}" show="{{ dialog.show }}" showConfirmButton="{{false}}">
+    <view class="info">
+        <slot name="info"></slot>
+    </view>
+    <view class="btn">
+        <button type="warn" size="mini" bindtap="toClose">关闭</button>
+    </view>
+</van-dialog>

+ 19 - 0
commpents/dialog/index.wxss

@@ -0,0 +1,19 @@
+.info {
+    float: left;
+    width: 95%;
+    padding: 0 10px;
+    max-height: 300px;
+    overflow-y: auto;
+}
+
+.btn {
+    float: left;
+    width: 100%;
+    text-align: center;
+    margin: 5px 0;
+}
+
+.btn button {
+    font-size: 12px;
+    padding: 0 15px;
+}

+ 111 - 0
commpents/hg-editor/hg-editor.js

@@ -0,0 +1,111 @@
+// components/hg-editor/hg-editor.js
+const app = getApp()
+Component({
+  /**
+   * 组件的属性列表
+   */
+  properties: {
+    /**是否显示工具栏 */
+    showTabBar: {
+      type: 'Boolean',
+      value: true
+    },
+    placeholder: {
+      type: 'String',
+      value: '请输入相关内容'
+    },
+    name: {
+      type: 'String',
+      value: ''
+    },
+  },
+
+  /**
+   * 组件的初始数据
+   */
+  data: {
+
+  },
+
+  /**
+   * 组件的方法列表
+   */
+  methods: {
+    _onEditorReady: async function () {
+      const that = this;
+      that.createSelectorQuery().select('#editor').context(function (res) {
+        that.editorCtx = res.context
+        let html = that.data.name;
+        if (html) {
+          that.editorCtx.setContents({
+            html: html,
+            success: (res) => { },
+            fail: (res) => { console.log(res) }
+          })
+        }
+      }).exec()
+    },
+    //插入图片
+    _addImage: function (event) {
+      let _this = this;
+      wx.chooseImage({
+        count: 1,
+        sizeType: ['compressed'],
+        sourceType: ['album'],
+        success: function (res) {
+          _this._uploadImage(res.tempFilePaths[0]);
+        }
+      });
+    },
+    _uploadImage: function (tempFilePath) {
+      let _this = this;
+      wx.uploadFile({
+        url: `${app.globalData.fileUrl}/files/court/elimg/upload`,
+        filePath: tempFilePath,
+        name: 'file',
+        formData: {},
+        success: (res) => {
+          let arr = JSON.parse(res.data);
+          if (arr.errcode == '0') {
+            _this.editorCtx.insertImage({ src: app.globalData.fileUrl + arr.uri });
+          } else {
+            wx.showToast({ title: `${arr.errmsg}`, icon: 'fail', duration: 2000 })
+          }
+        },
+      })
+    },
+    //设置斜体
+    _addItalic: function () {
+      this.editorCtx.format("italic")
+    },
+    //添加粗体样式
+    _addBold: function () {
+      this.editorCtx.format("bold")
+    },
+    //设置标题
+    _addHeader: function (e) {
+      let headerType = e.currentTarget.dataset.header;
+      this.editorCtx.format("header", headerType)
+    },
+    //设置文字的排列方式
+    _addAlign: function (e) {
+      let alignType = e.currentTarget.dataset.align;
+      this.editorCtx.format("align", alignType);
+    },
+    //设置列表
+    _addList: function (e) {
+      let listType = e.currentTarget.dataset.list;
+      this.editorCtx.format("list", listType);
+    },
+    //撤销
+    _undo: function () {
+      this.editorCtx.undo();
+    },
+    //监控输入
+    _onInputting: function (e) {
+      let html = e.detail.html;
+      let text = e.detail.text;
+      this.triggerEvent("input", { html: html, text: text }, {});
+    }
+  }
+})

+ 4 - 0
commpents/hg-editor/hg-editor.json

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

+ 40 - 0
commpents/hg-editor/hg-editor.wxml

@@ -0,0 +1,40 @@
+<view class="editor-box">
+  <view class="editor-box-header" wx:if="{{showTabBar}}">
+    <view class="operate-box" data-uploadImageURL="{{uploadImageURL}}" bind:tap="_addImage">
+      <text class="iconfont icon-image"></text>
+    </view>
+    <view class="operate-box" bind:tap="_addItalic">
+      <text class="iconfont icon-italic"></text>
+    </view>
+    <view class="operate-box" bind:tap="_addBold">
+      <text class="iconfont icon-bold"></text>
+    </view>
+    <view class="operate-box" data-header="h1" bind:tap="_addHeader">
+      <text class="iconfont icon-h1"></text>
+    </view>
+    <view class="operate-box" data-header="h2" bind:tap="_addHeader">
+      <text class="iconfont icon-h2"></text>
+    </view>
+    <view class="operate-box" data-header="h3" bind:tap="_addHeader">
+      <text class="iconfont icon-h3"></text>
+    </view>
+    <view class="operate-box" data-align="left" bind:tap="_addAlign">
+      <text class="iconfont icon-alignLeft"></text>
+    </view>
+    <view class="operate-box" data-align="right" bind:tap="_addAlign">
+      <text class="iconfont icon-alignRight"></text>
+    </view>
+    <view class="operate-box" data-list="ordered" bind:tap="_addList">
+      <text class="iconfont icon-orderedList"></text>
+    </view>
+    <view class="operate-box" data-list="bullet" bind:tap="_addList">
+      <text class="iconfont icon-unorderedList"></text>
+    </view>
+    <view class="operate-box" bind:tap="_undo">
+      <text class="iconfont icon-undo"></text>
+    </view>
+  </view>
+  <view class="editor-box-content">
+    <editor id="editor" name="{{name}}" placeholder="{{placeholder}}" bind:ready="_onEditorReady" bind:input="_onInputting" show-img-resize="{{true}}"></editor>
+  </view>
+</view>

+ 39 - 0
commpents/hg-editor/hg-editor.wxss

@@ -0,0 +1,39 @@
+/* components/hg-editor/hg-editor.wxss */
+@import "iconfont.wxss";
+
+.editor-box {
+  width: 100%;
+  padding: 0;
+  box-sizing: border-box;
+  background-color: #fff;
+  border:2px solid #f6f6f6;
+}
+
+.editor-box-header,
+.editor-box-content {
+  width: 100%;
+}
+
+.editor-box-header {
+  display: flex;
+  flex-flow: row nowrap;
+  align-items: center;
+  justify-content:flex-start;
+  padding: 20rpx 20rpx;
+  box-sizing: border-box;
+  border-bottom: 2rpx solid #f6f6f6;
+  background-color: #f6f6f6;
+}
+
+.editor-box-header>.operate-box {
+  margin-right: 20rpx;
+  width: 40rpx;
+  height: 40rpx;
+  overflow: hidden;
+  color:gray;
+}
+
+.editor-box-content{
+  padding:20rpx;
+  box-sizing: border-box;
+}

+ 67 - 0
commpents/hg-editor/iconfont.wxss

@@ -0,0 +1,67 @@
+@font-face {
+  font-family: 'iconfont';  /* Project id 2549449 */
+  src: url('//at.alicdn.com/t/font_2549449_hxmflg4qsr6.woff2?t=1621002720450') format('woff2'),
+       url('//at.alicdn.com/t/font_2549449_hxmflg4qsr6.woff?t=1621002720450') format('woff'),
+       url('//at.alicdn.com/t/font_2549449_hxmflg4qsr6.ttf?t=1621002720450') format('truetype');
+}
+
+.iconfont {
+  font-family: "iconfont" !important;
+  font-size: 38rpx;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+.icon-undo:before {
+  content: "\e609";
+}
+
+.icon-hr:before {
+  content: "\e60a";
+}
+
+.icon-h3:before {
+  content: "\e60b";
+}
+
+.icon-quote:before {
+  content: "\e60c";
+}
+
+.icon-bold:before {
+  content: "\e60e";
+}
+
+.icon-orderedList:before {
+  content: "\e612";
+}
+
+.icon-h2:before {
+  content: "\e61a";
+}
+
+.icon-italic:before {
+  content: "\e61c";
+}
+
+.icon-unorderedList:before {
+  content: "\e620";
+}
+
+.icon-alignLeft:before {
+  content: "\e621";
+}
+
+.icon-alignRight:before {
+  content: "\e622";
+}
+
+.icon-h1:before {
+  content: "\e623";
+}
+
+.icon-image:before {
+  content: "\e629";
+}
+

+ 74 - 0
commpents/mobile-frame/foot.js

@@ -0,0 +1,74 @@
+// commpents/mobile-frame/mobile-main.js
+const app = getApp();
+import { system } from "../../utils/dict";
+Component({
+    /**
+     * 组件的属性列表
+     */
+    options: { multipleSlots: true },
+    properties: {
+        frameStyle: { type: Object }
+    },
+    // 生命周期函数,可以为函数,或一个在methods段中定义的方法名
+    attached: function () { }, // 此处attached的声明会被lifetimes字段中的声明覆盖
+    ready: function () { },
+    pageLifetimes: {
+        // 组件所在页面的生命周期函数
+        show: function () { this.search() },
+        hide: function () { },
+        resize: function () { },
+    },
+    /**
+     * 组件的初始数据
+     */
+    data: {
+        // 当前选中菜单
+        active: 0,
+        // 菜单列表
+        menuList: []
+    },
+    /**
+     * 组件的方法列表
+     */
+    methods: {
+        // 跳转
+        tabPath(e) {
+            const that = this;
+            const { index } = e.currentTarget.dataset;
+            that.setData({ active: index });
+            let route = that.data.menuList[index];
+            if (route) that.triggerEvent('tabPath', route)
+        },
+        search() {
+            const that = this;
+            // 获取当前路由地址
+            let pages = getCurrentPages();
+            let currentPage = pages[pages.length - 1];
+            let menu = system.filter((i) => i.type.includes('0'));
+            if (menu) {
+                that.setData({ menuList: menu });
+                let index = menu.findIndex((i) => i.route == currentPage.route);
+                if (index) that.setData({ active: index });
+            }
+            // 监听用户是否登录
+            // wx.getStorage({
+            //     key: 'token',
+            //     success: res => {
+            //         // 获取当前路由地址
+            //         let pages = getCurrentPages();
+            //         let currentPage = pages[pages.length - 1];
+            //         let menu = system.filter((i) => i.type.includes(res.data.type));
+            //         if (menu) {
+            //             that.setData({ menuList: menu });
+            //             let index = menu.findIndex((i) => i.route == currentPage.route);
+            //             if (index) that.setData({ active: index });
+            //         }
+            //     },
+            //     fail: res => {
+            //         return wx.redirectTo({ url: '/pages/login/index', })
+            //     }
+            // })
+        }
+    }
+})
+

+ 4 - 0
commpents/mobile-frame/foot.json

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

+ 23 - 0
commpents/mobile-frame/foot.less

@@ -0,0 +1,23 @@
+.foot {
+    display: flex;
+    justify-content: space-between;
+
+    .list {
+        text-align: center;
+        font-size: 14px;
+        width: 45vw;
+        line-height: 1;
+        padding: 5px 0;
+
+        .image {
+            width: 6vw;
+            height: 6vw;
+            border-radius: 5px;
+        }
+
+        .title {
+            font-size: 14px;
+            color: #000000;
+        }
+    }
+}

+ 7 - 0
commpents/mobile-frame/foot.wxml

@@ -0,0 +1,7 @@
+<view class="foot">
+    <view class="list {{active==index?'active':''}}" wx:for="{{menuList}}" wx:key="item" wx:for-index="index" bindtap="tabPath" data-index="{{index}}">
+        <image mode="aspectFit" class="image" src="{{item.normal}}" wx:if="{{active!=index}}"></image>
+        <image mode="aspectFit" class="image" src="{{item.active}}" wx:else></image>
+        <view class="title" style="color:{{active==index?frameStyle.barActive||'#0C437B':''}};">{{item.title}}</view>
+    </view>
+</view>

+ 20 - 0
commpents/mobile-frame/foot.wxss

@@ -0,0 +1,20 @@
+.foot {
+  display: flex;
+  justify-content: space-between;
+}
+.foot .list {
+  text-align: center;
+  font-size: 14px;
+  width: 45vw;
+  line-height: 1;
+  padding: 5px 0;
+}
+.foot .list .image {
+  width: 6vw;
+  height: 6vw;
+  border-radius: 5px;
+}
+.foot .list .title {
+  font-size: 14px;
+  color: #000000;
+}

+ 38 - 0
commpents/mobile-frame/index.js

@@ -0,0 +1,38 @@
+// commpents/mobile-frame/index.js
+const app = getApp()
+Component({
+    /**
+     * 组件的属性列表
+     */
+    options: { multipleSlots: true },
+    properties: {
+        frameStyle: { type: Object },
+    },
+
+    /**
+     * 组件的初始数据
+     */
+    data: {},
+    // 生命周期函数,可以为函数,或一个在methods段中定义的方法名
+    attached: function () { }, // 此处attached的声明会被lifetimes字段中的声明覆盖
+    ready: function () { },
+    pageLifetimes: {
+        // 组件所在页面的生命周期函数
+        show: function () { },
+        hide: function () { },
+        resize: function () { },
+    },
+
+    /**
+     * 组件的方法列表
+     */
+    methods: {
+        // 返回上一级
+        back() {
+            this.triggerEvent('back', '1')
+        },
+        tabPath(e) {
+            this.triggerEvent('tabPath', e)
+        },
+    }
+})

+ 7 - 0
commpents/mobile-frame/index.json

@@ -0,0 +1,7 @@
+{
+    "component": true,
+    "usingComponents": {
+        "top": "./top",
+        "foot": "./foot"
+    }
+}

+ 38 - 0
commpents/mobile-frame/index.less

@@ -0,0 +1,38 @@
+.body {
+    display: flex;
+    flex-direction: column;
+    width: 100vw;
+    height: 100vh;
+    background-color: #F5F5F5;
+    background-repeat: no-repeat;
+    background-size: 100% 100%;
+
+    .head {
+        background-color: var(--headColor);
+    }
+
+    .info {
+        flex-grow: 1;
+        position: relative;
+
+        .scroll-view {
+            position: absolute;
+            top: 0;
+            left: 0;
+            right: 0;
+            bottom: 0;
+
+            .list-scroll-view {
+                width: 100vw;
+                display: flex;
+                flex-wrap: wrap;
+                align-content: flex-start;
+                justify-content: space-between;
+            }
+        }
+    }
+
+    .foot {
+        background-color: var(--footColor);
+    }
+}

+ 15 - 0
commpents/mobile-frame/index.wxml

@@ -0,0 +1,15 @@
+<view class="body">
+    <view class="head" wx:if="{{frameStyle.useTop}}" class="head">
+        <top frameStyle="{{frameStyle}}" bind:back="back"></top>
+    </view>
+    <view class="info">
+        <scroll-view scroll-y="true" class="scroll-view">
+            <view class="list-scroll-view">
+                <slot name="info"></slot>
+            </view>
+        </scroll-view>
+    </view>
+    <view class="foot" wx:if="{{frameStyle.useBar}}">
+        <foot bind:tabPath="tabPath" frameStyle="{{frameStyle}}"></foot>
+    </view>
+</view>

+ 33 - 0
commpents/mobile-frame/index.wxss

@@ -0,0 +1,33 @@
+.body {
+  display: flex;
+  flex-direction: column;
+  width: 100vw;
+  height: 100vh;
+  background-color: #F5F5F5;
+  background-repeat: no-repeat;
+  background-size: 100% 100%;
+}
+.body .head {
+  background-color: var(--headColor);
+}
+.body .info {
+  flex-grow: 1;
+  position: relative;
+}
+.body .info .scroll-view {
+  position: absolute;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+}
+.body .info .scroll-view .list-scroll-view {
+  width: 100vw;
+  display: flex;
+  flex-wrap: wrap;
+  align-content: flex-start;
+  justify-content: space-between;
+}
+.body .foot {
+  background-color: var(--footColor);
+}

+ 26 - 0
commpents/mobile-frame/top.js

@@ -0,0 +1,26 @@
+// commpents/mobile-frame/top.js
+const app = getApp()
+Component({
+    /**
+     * 组件的属性列表
+     */
+    properties: {
+        frameStyle: { type: Object }
+    },
+    /**
+     * 组件的初始数据
+     */
+    data: {
+        client: app.globalData.client
+    },
+
+    /**
+     * 组件的方法列表
+     */
+    methods: {
+        // 返回上一页面
+        _navback() {
+            this.triggerEvent('back')
+        }
+    }
+})

+ 4 - 0
commpents/mobile-frame/top.json

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

+ 34 - 0
commpents/mobile-frame/top.less

@@ -0,0 +1,34 @@
+.top {
+    float: left;
+    width: 100%;
+
+    .left {
+        float: left;
+        width: 15%;
+        text-align: center;
+        overflow: hidden;
+
+        .back {
+            width: 40rpx;
+            height: 40rpx;
+            position: relative;
+            left: 15px;
+            width: 40rpx;
+            height: 40rpx;
+        }
+    }
+
+    .cen {
+        float: left;
+        width: 70%;
+        text-align: center;
+        font-size: 36rpx;
+        color: #000000;
+        font-weight: 600;
+    }
+
+    .right {
+        float: left;
+        width: 15%;
+    }
+}

+ 7 - 0
commpents/mobile-frame/top.wxml

@@ -0,0 +1,7 @@
+<view class="top" style='height: {{client.statusBarHeight + client.getMenu.height + (client.getMenu.top - client.statusBarHeight)*2}}px;'>
+    <view class="left" style='margin: {{client.getMenu.top}}px 0 0 0;'>
+        <cover-image src='/image/back.png' mode='aspectFill' class="back" bindtap='_navback' wx:if="{{frameStyle.leftArrow}}"></cover-image>
+    </view>
+    <view class="cen" style='margin: {{client.getMenu.top}}px 0 0 0;'>{{frameStyle.name}}</view>
+    <view class="right" style="display: none">右侧</view>
+</view>

+ 28 - 0
commpents/mobile-frame/top.wxss

@@ -0,0 +1,28 @@
+.top {
+  float: left;
+  width: 100%;
+}
+.top .left {
+  float: left;
+  width: 15%;
+  text-align: center;
+  overflow: hidden;
+}
+.top .left .back {
+  position: relative;
+  left: 15px;
+  width: 40rpx;
+  height: 40rpx;
+}
+.top .cen {
+  float: left;
+  width: 70%;
+  text-align: center;
+  font-size: 36rpx;
+  color: #000000;
+  font-weight: 600;
+}
+.top .right {
+  float: left;
+  width: 15%;
+}

+ 37 - 0
commpents/tabs/index.js

@@ -0,0 +1,37 @@
+// commpents/mobile-frame/mobile-main.js
+const app = getApp()
+Component({
+    /**
+     * 组件的属性列表
+     */
+    options: { multipleSlots: true },
+    properties: {
+        tabs: { type: Object },
+    },
+
+    // 生命周期函数,可以为函数,或一个在methods段中定义的方法名
+    attached: function () { }, // 此处attached的声明会被lifetimes字段中的声明覆盖
+    ready: function () { },
+    pageLifetimes: {
+        // 组件所在页面的生命周期函数
+        show: function () { },
+        hide: function () { },
+        resize: function () { },
+    },
+    /**
+     * 组件的初始数据
+     */
+    data: {
+
+    },
+    /**
+     * 组件的方法列表
+     */
+    methods: {
+        // 关闭弹框
+        tabsChange(e) {
+            this.triggerEvent('tabsChange', e.detail)
+        }
+    }
+})
+

+ 4 - 0
commpents/tabs/index.json

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

+ 3 - 0
commpents/tabs/index.wxml

@@ -0,0 +1,3 @@
+<van-tabs active="{{tabs.active}}" bind:change="tabsChange" type="{{tabs.type||'line'}}" color="{{tabs.color||'#024702'}}" duration="{{tabs.duration||'0.3'}}" line-width="{{tabs.linewidth||'40'}}" line-height="{{tabs.lineheight||'3'}}" swipeable="{{true}}" title-active-color="{{activeC||'#024702'}}" title-inactive-color="{{inactiveC||'#666666'}}">
+    <van-tab wx:for="{{tabs.list}}" wx:key="item" title="{{item.title}}" name="{{item.name}}"></van-tab>
+</van-tabs>

+ 0 - 0
commpents/tabs/index.wxss


+ 11 - 0
commpents/tabs/read.md

@@ -0,0 +1,11 @@
+# 选项卡组件使用说明
+## 参数说明
+### active--当前选中标签的标识符
+### type--样式风格,默认值:line,可选值:card
+### color--标签主题色
+### duration--动画时间
+### linewidth--底部条宽度
+### lineheight--底部条高度
+### swipeable--是否开启手势左右滑动切换
+### title-active-color--标题选中态颜色
+

+ 57 - 0
commpents/upload/index.js

@@ -0,0 +1,57 @@
+// commpents/mobile-frame/mobile-main.js
+const app = getApp()
+Component({
+    /**
+     * 组件的属性列表
+     */
+    options: { multipleSlots: true },
+    properties: {
+        list: { type: Array, value: [] },
+        count: { type: Number, value: 1 },
+        previewSize: { type: String, value: '60' }
+    },
+
+    // 生命周期函数,可以为函数,或一个在methods段中定义的方法名
+    attached: function () { }, // 此处attached的声明会被lifetimes字段中的声明覆盖
+    ready: function () { },
+    pageLifetimes: {
+        // 组件所在页面的生命周期函数
+        show: function () { },
+        hide: function () { },
+        resize: function () { },
+    },
+    /**
+     * 组件的初始数据
+     */
+    data: {
+
+    },
+    /**
+     * 组件的方法列表
+     */
+    methods: {
+        // 图片上传
+        imgUpload(event) {
+            const { file } = event.detail;
+            wx.uploadFile({
+                url: `${app.globalData.publicUrl}/files/court/elimg/upload`,
+                filePath: file.url,
+                name: 'file',
+                formData: {},
+                success: (res) => {
+                    let arr = JSON.parse(res.data);
+                    if (res.statusCode == 200) {
+                        this.triggerEvent('imgUpload', { name: arr.name, url: `${app.globalData.publicUrl}` + arr.uri, uri: arr.uri })
+                    } else {
+                        wx.showToast({ title: `${res.errMsg}`, icon: 'fail', duration: 2000 })
+                    }
+                }
+            })
+        },
+        // 图片删除
+        imgDel(e) {
+            this.triggerEvent('imgDel', { file: e.detail.file, index: e.detail.index })
+        }
+    }
+})
+

+ 4 - 0
commpents/upload/index.json

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

+ 0 - 0
commpents/upload/index.less


+ 1 - 0
commpents/upload/index.wxml

@@ -0,0 +1 @@
+<van-uploader file-list="{{list}}" max-count="{{count}}" bind:after-read="imgUpload" bind:delete="imgDel" preview-size="{{previewSize}}" />

+ 1 - 0
commpents/upload/index.wxss

@@ -0,0 +1 @@
+/* commpents/upload/index.wxss */

+ 19 - 0
commpents/upload/read.md

@@ -0,0 +1,19 @@
+# 上传图片组件使用说明
+## 参数
+### 图片存储列表:list
+### 图片上传数量限制:count
+
+## 方法
+### 上传图片---imgUpload
+### 传回父组件参数,图片名称:name,图片完整地址:url,图片地址:uri
+### 父组价接收参数变量:e.detail
+
+### 删除图片---imgDel
+### 传回父组件参数:图片数据:file,图片所在列表下标:index
+### 父组件接收参数变量:e.detail
+
+## 引用组件
+### json:"vanupload": "/commpents/upload/index"
+### 组件使用:<vanupload></vanupload>
+### 参数传值方式:list="{{list}}"
+### 方法传值方式:bind:imgUpload="imgUpload"

二進制
image/back.png


二進制
image/lingdang.png


二進制
image/tabs/contact.png


二進制
image/tabs/contact_1.png


二進制
image/tabs/find.png


二進制
image/tabs/find_1.png


二進制
image/tabs/home.png


二進制
image/tabs/home_1.png


二進制
image/tabs/my.png


二進制
image/tabs/my_1.png


二進制
image/tabs/news.png


二進制
image/tabs/news_1.png


二進制
image/tabs/topic.png


二進制
image/tabs/topic_1.png


二進制
image/wechat.png


+ 1 - 0
miniprogram_npm/@vant/weapp/action-sheet/index.d.ts

@@ -0,0 +1 @@
+export {};

+ 73 - 0
miniprogram_npm/@vant/weapp/action-sheet/index.js

@@ -0,0 +1,73 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var component_1 = require("../common/component");
+var button_1 = require("../mixins/button");
+(0, component_1.VantComponent)({
+    mixins: [button_1.button],
+    props: {
+        show: Boolean,
+        title: String,
+        cancelText: String,
+        description: String,
+        round: {
+            type: Boolean,
+            value: true,
+        },
+        zIndex: {
+            type: Number,
+            value: 100,
+        },
+        actions: {
+            type: Array,
+            value: [],
+        },
+        overlay: {
+            type: Boolean,
+            value: true,
+        },
+        closeOnClickOverlay: {
+            type: Boolean,
+            value: true,
+        },
+        closeOnClickAction: {
+            type: Boolean,
+            value: true,
+        },
+        safeAreaInsetBottom: {
+            type: Boolean,
+            value: true,
+        },
+    },
+    methods: {
+        onSelect: function (event) {
+            var _this = this;
+            var index = event.currentTarget.dataset.index;
+            var _a = this.data, actions = _a.actions, closeOnClickAction = _a.closeOnClickAction, canIUseGetUserProfile = _a.canIUseGetUserProfile;
+            var item = actions[index];
+            if (item) {
+                this.$emit('select', item);
+                if (closeOnClickAction) {
+                    this.onClose();
+                }
+                if (item.openType === 'getUserInfo' && canIUseGetUserProfile) {
+                    wx.getUserProfile({
+                        desc: item.getUserProfileDesc || '  ',
+                        complete: function (userProfile) {
+                            _this.$emit('getuserinfo', userProfile);
+                        },
+                    });
+                }
+            }
+        },
+        onCancel: function () {
+            this.$emit('cancel');
+        },
+        onClose: function () {
+            this.$emit('close');
+        },
+        onClickOverlay: function () {
+            this.$emit('click-overlay');
+            this.onClose();
+        },
+    },
+});

+ 8 - 0
miniprogram_npm/@vant/weapp/action-sheet/index.json

@@ -0,0 +1,8 @@
+{
+  "component": true,
+  "usingComponents": {
+    "van-icon": "../icon/index",
+    "van-popup": "../popup/index",
+    "van-loading": "../loading/index"
+  }
+}

+ 69 - 0
miniprogram_npm/@vant/weapp/action-sheet/index.wxml

@@ -0,0 +1,69 @@
+<wxs src="../wxs/utils.wxs" module="utils" />
+
+<van-popup
+  show="{{ show }}"
+  position="bottom"
+  round="{{ round }}"
+  z-index="{{ zIndex }}"
+  overlay="{{ overlay }}"
+  custom-class="van-action-sheet"
+  safe-area-inset-bottom="{{ safeAreaInsetBottom }}"
+  close-on-click-overlay="{{ closeOnClickOverlay }}"
+  bind:close="onClickOverlay"
+>
+  <view wx:if="{{ title }}" class="van-action-sheet__header">
+    {{ title }}
+    <van-icon
+      name="cross"
+      custom-class="van-action-sheet__close"
+      bind:click="onClose"
+    />
+  </view>
+  <view wx:if="{{ description }}" class="van-action-sheet__description van-hairline--bottom">
+    {{ description }}
+  </view>
+  <view wx:if="{{ actions && actions.length }}">
+    <!-- button外包一层view,防止actions动态变化,导致渲染时button被打散 -->
+    <button
+      wx:for="{{ actions }}"
+      wx:key="index"
+      open-type="{{ item.disabled || item.loading || (canIUseGetUserProfile && item.openType === 'getUserInfo') ? '' : item.openType }}"
+      style="{{ item.color ? 'color: ' + item.color : '' }}"
+      class="{{ utils.bem('action-sheet__item', { disabled: item.disabled || item.loading }) }} {{ item.className || '' }}"
+      hover-class="van-action-sheet__item--hover"
+      data-index="{{ index }}"
+      bindtap="{{ item.disabled || item.loading ? '' : 'onSelect' }}"
+      bindgetuserinfo="onGetUserInfo"
+      bindcontact="onContact"
+      bindgetphonenumber="onGetPhoneNumber"
+      binderror="onError"
+      bindlaunchapp="onLaunchApp"
+      bindopensetting="onOpenSetting"
+      lang="{{ lang }}"
+      session-from="{{ sessionFrom }}"
+      send-message-title="{{ sendMessageTitle }}"
+      send-message-path="{{ sendMessagePath }}"
+      send-message-img="{{ sendMessageImg }}"
+      show-message-card="{{ showMessageCard }}"
+      app-parameter="{{ appParameter }}"
+    >
+      <block wx:if="{{ !item.loading }}">
+        {{ item.name }}
+        <view wx:if="{{ item.subname }}" class="van-action-sheet__subname" >{{ item.subname }}</view>
+      </block>
+      <van-loading wx:else custom-class="van-action-sheet__loading" size="22px" />
+    </button>
+  </view>
+  <slot />
+  <block wx:if="{{ cancelText }}">
+    <view class="van-action-sheet__gap" />
+    <view
+      class="van-action-sheet__cancel"
+      hover-class="van-action-sheet__cancel--hover"
+      hover-stay-time="70"
+      bind:tap="onCancel"
+    >
+      {{ cancelText }}
+    </view>
+  </block>
+</van-popup>

File diff suppressed because it is too large
+ 1 - 0
miniprogram_npm/@vant/weapp/action-sheet/index.wxss


+ 1 - 0
miniprogram_npm/@vant/weapp/area/index.d.ts

@@ -0,0 +1 @@
+export {};

+ 235 - 0
miniprogram_npm/@vant/weapp/area/index.js

@@ -0,0 +1,235 @@
+"use strict";
+var __assign = (this && this.__assign) || function () {
+    __assign = Object.assign || function(t) {
+        for (var s, i = 1, n = arguments.length; i < n; i++) {
+            s = arguments[i];
+            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
+                t[p] = s[p];
+        }
+        return t;
+    };
+    return __assign.apply(this, arguments);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var component_1 = require("../common/component");
+var shared_1 = require("../picker/shared");
+var utils_1 = require("../common/utils");
+var EMPTY_CODE = '000000';
+(0, component_1.VantComponent)({
+    classes: ['active-class', 'toolbar-class', 'column-class'],
+    props: __assign(__assign({}, shared_1.pickerProps), { showToolbar: {
+            type: Boolean,
+            value: true,
+        }, value: {
+            type: String,
+            observer: function (value) {
+                this.code = value;
+                this.setValues();
+            },
+        }, areaList: {
+            type: Object,
+            value: {},
+            observer: 'setValues',
+        }, columnsNum: {
+            type: null,
+            value: 3,
+        }, columnsPlaceholder: {
+            type: Array,
+            observer: function (val) {
+                this.setData({
+                    typeToColumnsPlaceholder: {
+                        province: val[0] || '',
+                        city: val[1] || '',
+                        county: val[2] || '',
+                    },
+                });
+            },
+        } }),
+    data: {
+        columns: [{ values: [] }, { values: [] }, { values: [] }],
+        typeToColumnsPlaceholder: {},
+    },
+    mounted: function () {
+        var _this = this;
+        (0, utils_1.requestAnimationFrame)(function () {
+            _this.setValues();
+        });
+    },
+    methods: {
+        getPicker: function () {
+            if (this.picker == null) {
+                this.picker = this.selectComponent('.van-area__picker');
+            }
+            return this.picker;
+        },
+        onCancel: function (event) {
+            this.emit('cancel', event.detail);
+        },
+        onConfirm: function (event) {
+            var index = event.detail.index;
+            var value = event.detail.value;
+            value = this.parseValues(value);
+            this.emit('confirm', { value: value, index: index });
+        },
+        emit: function (type, detail) {
+            detail.values = detail.value;
+            delete detail.value;
+            this.$emit(type, detail);
+        },
+        parseValues: function (values) {
+            var columnsPlaceholder = this.data.columnsPlaceholder;
+            return values.map(function (value, index) {
+                if (value &&
+                    (!value.code || value.name === columnsPlaceholder[index])) {
+                    return __assign(__assign({}, value), { code: '', name: '' });
+                }
+                return value;
+            });
+        },
+        onChange: function (event) {
+            var _this = this;
+            var _a;
+            var _b = event.detail, index = _b.index, picker = _b.picker, value = _b.value;
+            this.code = value[index].code;
+            (_a = this.setValues()) === null || _a === void 0 ? void 0 : _a.then(function () {
+                _this.$emit('change', {
+                    picker: picker,
+                    values: _this.parseValues(picker.getValues()),
+                    index: index,
+                });
+            });
+        },
+        getConfig: function (type) {
+            var areaList = this.data.areaList;
+            return (areaList && areaList["".concat(type, "_list")]) || {};
+        },
+        getList: function (type, code) {
+            if (type !== 'province' && !code) {
+                return [];
+            }
+            var typeToColumnsPlaceholder = this.data.typeToColumnsPlaceholder;
+            var list = this.getConfig(type);
+            var result = Object.keys(list).map(function (code) { return ({
+                code: code,
+                name: list[code],
+            }); });
+            if (code != null) {
+                // oversea code
+                if (code[0] === '9' && type === 'city') {
+                    code = '9';
+                }
+                result = result.filter(function (item) { return item.code.indexOf(code) === 0; });
+            }
+            if (typeToColumnsPlaceholder[type] && result.length) {
+                // set columns placeholder
+                var codeFill = type === 'province'
+                    ? ''
+                    : type === 'city'
+                        ? EMPTY_CODE.slice(2, 4)
+                        : EMPTY_CODE.slice(4, 6);
+                result.unshift({
+                    code: "".concat(code).concat(codeFill),
+                    name: typeToColumnsPlaceholder[type],
+                });
+            }
+            return result;
+        },
+        getIndex: function (type, code) {
+            var compareNum = type === 'province' ? 2 : type === 'city' ? 4 : 6;
+            var list = this.getList(type, code.slice(0, compareNum - 2));
+            // oversea code
+            if (code[0] === '9' && type === 'province') {
+                compareNum = 1;
+            }
+            code = code.slice(0, compareNum);
+            for (var i = 0; i < list.length; i++) {
+                if (list[i].code.slice(0, compareNum) === code) {
+                    return i;
+                }
+            }
+            return 0;
+        },
+        setValues: function () {
+            var picker = this.getPicker();
+            if (!picker) {
+                return;
+            }
+            var code = this.code || this.getDefaultCode();
+            var provinceList = this.getList('province');
+            var cityList = this.getList('city', code.slice(0, 2));
+            var stack = [];
+            var indexes = [];
+            var columnsNum = this.data.columnsNum;
+            if (columnsNum >= 1) {
+                stack.push(picker.setColumnValues(0, provinceList, false));
+                indexes.push(this.getIndex('province', code));
+            }
+            if (columnsNum >= 2) {
+                stack.push(picker.setColumnValues(1, cityList, false));
+                indexes.push(this.getIndex('city', code));
+                if (cityList.length && code.slice(2, 4) === '00') {
+                    code = cityList[0].code;
+                }
+            }
+            if (columnsNum === 3) {
+                stack.push(picker.setColumnValues(2, this.getList('county', code.slice(0, 4)), false));
+                indexes.push(this.getIndex('county', code));
+            }
+            return Promise.all(stack)
+                .catch(function () { })
+                .then(function () { return picker.setIndexes(indexes); })
+                .catch(function () { });
+        },
+        getDefaultCode: function () {
+            var columnsPlaceholder = this.data.columnsPlaceholder;
+            if (columnsPlaceholder.length) {
+                return EMPTY_CODE;
+            }
+            var countyCodes = Object.keys(this.getConfig('county'));
+            if (countyCodes[0]) {
+                return countyCodes[0];
+            }
+            var cityCodes = Object.keys(this.getConfig('city'));
+            if (cityCodes[0]) {
+                return cityCodes[0];
+            }
+            return '';
+        },
+        getValues: function () {
+            var picker = this.getPicker();
+            if (!picker) {
+                return [];
+            }
+            return this.parseValues(picker.getValues().filter(function (value) { return !!value; }));
+        },
+        getDetail: function () {
+            var values = this.getValues();
+            var area = {
+                code: '',
+                country: '',
+                province: '',
+                city: '',
+                county: '',
+            };
+            if (!values.length) {
+                return area;
+            }
+            var names = values.map(function (item) { return item.name; });
+            area.code = values[values.length - 1].code;
+            if (area.code[0] === '9') {
+                area.country = names[1] || '';
+                area.province = names[2] || '';
+            }
+            else {
+                area.province = names[0] || '';
+                area.city = names[1] || '';
+                area.county = names[2] || '';
+            }
+            return area;
+        },
+        reset: function (code) {
+            this.code = code || '';
+            return this.setValues();
+        },
+    },
+});

+ 6 - 0
miniprogram_npm/@vant/weapp/area/index.json

@@ -0,0 +1,6 @@
+{
+  "component": true,
+  "usingComponents": {
+    "van-picker": "../picker/index"
+  }
+}

+ 20 - 0
miniprogram_npm/@vant/weapp/area/index.wxml

@@ -0,0 +1,20 @@
+<wxs src="./index.wxs" module="computed" />
+
+<van-picker
+  class="van-area__picker"
+  active-class="active-class"
+  toolbar-class="toolbar-class"
+  column-class="column-class"
+  show-toolbar="{{ showToolbar }}"
+  value-key="name"
+  title="{{ title }}"
+  loading="{{ loading }}"
+  columns="{{ computed.displayColumns(columns, columnsNum) }}"
+  item-height="{{ itemHeight }}"
+  visible-item-count="{{ visibleItemCount }}"
+  cancel-button-text="{{ cancelButtonText }}"
+  confirm-button-text="{{ confirmButtonText }}"
+  bind:change="onChange"
+  bind:confirm="onConfirm"
+  bind:cancel="onCancel"
+/>

+ 8 - 0
miniprogram_npm/@vant/weapp/area/index.wxs

@@ -0,0 +1,8 @@
+/* eslint-disable */
+function displayColumns(columns, columnsNum) {
+  return columns.slice(0, +columnsNum);
+}
+
+module.exports = {
+  displayColumns: displayColumns,
+};

+ 1 - 0
miniprogram_npm/@vant/weapp/area/index.wxss

@@ -0,0 +1 @@
+@import '../common/index.wxss';

+ 1 - 0
miniprogram_npm/@vant/weapp/button/index.d.ts

@@ -0,0 +1 @@
+export {};

+ 67 - 0
miniprogram_npm/@vant/weapp/button/index.js

@@ -0,0 +1,67 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var component_1 = require("../common/component");
+var button_1 = require("../mixins/button");
+var version_1 = require("../common/version");
+var mixins = [button_1.button];
+if ((0, version_1.canIUseFormFieldButton)()) {
+    mixins.push('wx://form-field-button');
+}
+(0, component_1.VantComponent)({
+    mixins: mixins,
+    classes: ['hover-class', 'loading-class'],
+    data: {
+        baseStyle: '',
+    },
+    props: {
+        formType: String,
+        icon: String,
+        classPrefix: {
+            type: String,
+            value: 'van-icon',
+        },
+        plain: Boolean,
+        block: Boolean,
+        round: Boolean,
+        square: Boolean,
+        loading: Boolean,
+        hairline: Boolean,
+        disabled: Boolean,
+        loadingText: String,
+        customStyle: String,
+        loadingType: {
+            type: String,
+            value: 'circular',
+        },
+        type: {
+            type: String,
+            value: 'default',
+        },
+        dataset: null,
+        size: {
+            type: String,
+            value: 'normal',
+        },
+        loadingSize: {
+            type: String,
+            value: '20px',
+        },
+        color: String,
+    },
+    methods: {
+        onClick: function (event) {
+            var _this = this;
+            this.$emit('click', event);
+            var _a = this.data, canIUseGetUserProfile = _a.canIUseGetUserProfile, openType = _a.openType, getUserProfileDesc = _a.getUserProfileDesc, lang = _a.lang;
+            if (openType === 'getUserInfo' && canIUseGetUserProfile) {
+                wx.getUserProfile({
+                    desc: getUserProfileDesc || '  ',
+                    lang: lang || 'en',
+                    complete: function (userProfile) {
+                        _this.$emit('getuserinfo', userProfile);
+                    },
+                });
+            }
+        },
+    },
+});

+ 7 - 0
miniprogram_npm/@vant/weapp/button/index.json

@@ -0,0 +1,7 @@
+{
+  "component": true,
+  "usingComponents": {
+    "van-icon": "../icon/index",
+    "van-loading": "../loading/index"
+  }
+}

+ 53 - 0
miniprogram_npm/@vant/weapp/button/index.wxml

@@ -0,0 +1,53 @@
+<wxs src="../wxs/utils.wxs" module="utils" />
+<wxs src="./index.wxs" module="computed" />
+
+<button
+  id="{{ id }}"
+  data-detail="{{ dataset }}"
+  class="custom-class {{ utils.bem('button', [type, size, { block, round, plain, square, loading, disabled, hairline, unclickable: disabled || loading }]) }} {{ hairline ? 'van-hairline--surround' : '' }}"
+  hover-class="van-button--active hover-class"
+  lang="{{ lang }}"
+  form-type="{{ formType }}"
+  style="{{ computed.rootStyle({ plain, color, customStyle }) }}"
+  open-type="{{ disabled || loading || (canIUseGetUserProfile && openType === 'getUserInfo') ? '' : openType }}"
+  business-id="{{ businessId }}"
+  session-from="{{ sessionFrom }}"
+  send-message-title="{{ sendMessageTitle }}"
+  send-message-path="{{ sendMessagePath }}"
+  send-message-img="{{ sendMessageImg }}"
+  show-message-card="{{ showMessageCard }}"
+  app-parameter="{{ appParameter }}"
+  aria-label="{{ ariaLabel }}"
+  bindtap="{{ disabled || loading ? '' : 'onClick' }}"
+  bindgetuserinfo="onGetUserInfo"
+  bindcontact="onContact"
+  bindgetphonenumber="onGetPhoneNumber"
+  binderror="onError"
+  bindlaunchapp="onLaunchApp"
+  bindopensetting="onOpenSetting"
+>
+  <block wx:if="{{ loading }}">
+    <van-loading
+      custom-class="loading-class"
+      size="{{ loadingSize }}"
+      type="{{ loadingType }}"
+      color="{{ computed.loadingColor({ type, color, plain }) }}"
+    />
+    <view wx:if="{{ loadingText }}" class="van-button__loading-text">
+      {{ loadingText }}
+    </view>
+  </block>
+  <block wx:else>
+    <van-icon
+      wx:if="{{ icon }}"
+      size="1.2em"
+      name="{{ icon }}"
+      class-prefix="{{ classPrefix }}"
+      class="van-button__icon"
+      custom-style="line-height: inherit;"
+    />
+    <view class="van-button__text">
+      <slot />
+    </view>
+  </block>
+</button>

+ 39 - 0
miniprogram_npm/@vant/weapp/button/index.wxs

@@ -0,0 +1,39 @@
+/* eslint-disable */
+var style = require('../wxs/style.wxs');
+
+function rootStyle(data) {
+  if (!data.color) {
+    return data.customStyle;
+  }
+
+  var properties = {
+    color: data.plain ? data.color : '#fff',
+    background: data.plain ? null : data.color,
+  };
+
+  // hide border when color is linear-gradient
+  if (data.color.indexOf('gradient') !== -1) {
+    properties.border = 0;
+  } else {
+    properties['border-color'] = data.color;
+  }
+
+  return style([properties, data.customStyle]);
+}
+
+function loadingColor(data) {
+  if (data.plain) {
+    return data.color ? data.color : '#c9c9c9';
+  }
+
+  if (data.type === 'default') {
+    return '#c9c9c9';
+  }
+
+  return '#fff';
+}
+
+module.exports = {
+  rootStyle: rootStyle,
+  loadingColor: loadingColor,
+};

File diff suppressed because it is too large
+ 1 - 0
miniprogram_npm/@vant/weapp/button/index.wxss


+ 68 - 0
miniprogram_npm/@vant/weapp/calendar/calendar.wxml

@@ -0,0 +1,68 @@
+<view class="van-calendar">
+  <header
+    title="{{ title }}"
+    showTitle="{{ showTitle }}"
+    subtitle="{{ subtitle }}"
+    showSubtitle="{{ showSubtitle }}"
+    firstDayOfWeek="{{ firstDayOfWeek }}"
+    bind:click-subtitle="onClickSubtitle"
+  >
+    <slot name="title" slot="title"></slot>
+  </header>
+
+  <scroll-view
+    class="van-calendar__body"
+    scroll-y
+    scroll-into-view="{{ scrollIntoView }}"
+  >
+    <month
+      wx:for="{{ computed.getMonths(minDate, maxDate) }}"
+      wx:key="index"
+      id="month{{ index }}"
+      class="month"
+      data-date="{{ item }}"
+      date="{{ item }}"
+      type="{{ type }}"
+      color="{{ color }}"
+      minDate="{{ minDate }}"
+      maxDate="{{ maxDate }}"
+      showMark="{{ showMark }}"
+      formatter="{{ formatter }}"
+      rowHeight="{{ rowHeight }}"
+      currentDate="{{ currentDate }}"
+      showSubtitle="{{ showSubtitle }}"
+      allowSameDay="{{ allowSameDay }}"
+      showMonthTitle="{{ index !== 0 || !showSubtitle }}"
+      firstDayOfWeek="{{ firstDayOfWeek }}"
+      bind:click="onClickDay"
+    />
+  </scroll-view>
+
+  <view
+    class="{{ utils.bem('calendar__footer', { safeAreaInsetBottom }) }}"
+  >
+    <slot name="footer"></slot>
+  </view>
+
+  <view
+    class="{{ utils.bem('calendar__footer', { safeAreaInsetBottom }) }}"
+  >
+    <van-button
+      wx:if="{{ showConfirm }}"
+      round
+      block
+      type="danger"
+      color="{{ color }}"
+      custom-class="van-calendar__confirm"
+      disabled="{{ computed.getButtonDisabled(type, currentDate) }}"
+      nativeType="text"
+      bind:click="onConfirm"
+    >
+      {{
+        computed.getButtonDisabled(type, currentDate)
+          ? confirmDisabledText
+          : confirmText
+      }}
+    </van-button>
+  </view>
+</view>

+ 1 - 0
miniprogram_npm/@vant/weapp/calendar/components/header/index.d.ts

@@ -0,0 +1 @@
+export {};

+ 45 - 0
miniprogram_npm/@vant/weapp/calendar/components/header/index.js

@@ -0,0 +1,45 @@
+"use strict";
+var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
+    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
+        if (ar || !(i in from)) {
+            if (!ar) ar = Array.prototype.slice.call(from, 0, i);
+            ar[i] = from[i];
+        }
+    }
+    return to.concat(ar || Array.prototype.slice.call(from));
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var component_1 = require("../../../common/component");
+(0, component_1.VantComponent)({
+    props: {
+        title: {
+            type: String,
+            value: '日期选择',
+        },
+        subtitle: String,
+        showTitle: Boolean,
+        showSubtitle: Boolean,
+        firstDayOfWeek: {
+            type: Number,
+            observer: 'initWeekDay',
+        },
+    },
+    data: {
+        weekdays: [],
+    },
+    created: function () {
+        this.initWeekDay();
+    },
+    methods: {
+        initWeekDay: function () {
+            var defaultWeeks = ['日', '一', '二', '三', '四', '五', '六'];
+            var firstDayOfWeek = this.data.firstDayOfWeek || 0;
+            this.setData({
+                weekdays: __spreadArray(__spreadArray([], defaultWeeks.slice(firstDayOfWeek, 7), true), defaultWeeks.slice(0, firstDayOfWeek), true),
+            });
+        },
+        onClickSubtitle: function (event) {
+            this.$emit('click-subtitle', event);
+        },
+    },
+});

+ 3 - 0
miniprogram_npm/@vant/weapp/calendar/components/header/index.json

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

+ 16 - 0
miniprogram_npm/@vant/weapp/calendar/components/header/index.wxml

@@ -0,0 +1,16 @@
+<view class="van-calendar__header">
+  <block wx:if="{{ showTitle }}">
+    <view class="van-calendar__header-title"><slot name="title"></slot></view>
+    <view class="van-calendar__header-title">{{ title }}</view>
+  </block>
+
+  <view wx:if="{{ showSubtitle }}" class="van-calendar__header-subtitle" bind:tap="onClickSubtitle">
+    {{ subtitle }}
+  </view>
+
+  <view class="van-calendar__weekdays">
+    <view wx:for="{{ weekdays }}" wx:key="index" class="van-calendar__weekday">
+      {{ item }}
+    </view>
+  </view>
+</view>

File diff suppressed because it is too large
+ 1 - 0
miniprogram_npm/@vant/weapp/calendar/components/header/index.wxss


+ 6 - 0
miniprogram_npm/@vant/weapp/calendar/components/month/index.d.ts

@@ -0,0 +1,6 @@
+export interface Day {
+    date: Date;
+    type: string;
+    text: number;
+    bottomInfo?: string;
+}

+ 158 - 0
miniprogram_npm/@vant/weapp/calendar/components/month/index.js

@@ -0,0 +1,158 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var component_1 = require("../../../common/component");
+var utils_1 = require("../../utils");
+(0, component_1.VantComponent)({
+    props: {
+        date: {
+            type: null,
+            observer: 'setDays',
+        },
+        type: {
+            type: String,
+            observer: 'setDays',
+        },
+        color: String,
+        minDate: {
+            type: null,
+            observer: 'setDays',
+        },
+        maxDate: {
+            type: null,
+            observer: 'setDays',
+        },
+        showMark: Boolean,
+        rowHeight: null,
+        formatter: {
+            type: null,
+            observer: 'setDays',
+        },
+        currentDate: {
+            type: null,
+            observer: 'setDays',
+        },
+        firstDayOfWeek: {
+            type: Number,
+            observer: 'setDays',
+        },
+        allowSameDay: Boolean,
+        showSubtitle: Boolean,
+        showMonthTitle: Boolean,
+    },
+    data: {
+        visible: true,
+        days: [],
+    },
+    methods: {
+        onClick: function (event) {
+            var index = event.currentTarget.dataset.index;
+            var item = this.data.days[index];
+            if (item.type !== 'disabled') {
+                this.$emit('click', item);
+            }
+        },
+        setDays: function () {
+            var days = [];
+            var startDate = new Date(this.data.date);
+            var year = startDate.getFullYear();
+            var month = startDate.getMonth();
+            var totalDay = (0, utils_1.getMonthEndDay)(startDate.getFullYear(), startDate.getMonth() + 1);
+            for (var day = 1; day <= totalDay; day++) {
+                var date = new Date(year, month, day);
+                var type = this.getDayType(date);
+                var config = {
+                    date: date,
+                    type: type,
+                    text: day,
+                    bottomInfo: this.getBottomInfo(type),
+                };
+                if (this.data.formatter) {
+                    config = this.data.formatter(config);
+                }
+                days.push(config);
+            }
+            this.setData({ days: days });
+        },
+        getMultipleDayType: function (day) {
+            var currentDate = this.data.currentDate;
+            if (!Array.isArray(currentDate)) {
+                return '';
+            }
+            var isSelected = function (date) {
+                return currentDate.some(function (item) { return (0, utils_1.compareDay)(item, date) === 0; });
+            };
+            if (isSelected(day)) {
+                var prevDay = (0, utils_1.getPrevDay)(day);
+                var nextDay = (0, utils_1.getNextDay)(day);
+                var prevSelected = isSelected(prevDay);
+                var nextSelected = isSelected(nextDay);
+                if (prevSelected && nextSelected) {
+                    return 'multiple-middle';
+                }
+                if (prevSelected) {
+                    return 'end';
+                }
+                return nextSelected ? 'start' : 'multiple-selected';
+            }
+            return '';
+        },
+        getRangeDayType: function (day) {
+            var _a = this.data, currentDate = _a.currentDate, allowSameDay = _a.allowSameDay;
+            if (!Array.isArray(currentDate)) {
+                return '';
+            }
+            var startDay = currentDate[0], endDay = currentDate[1];
+            if (!startDay) {
+                return '';
+            }
+            var compareToStart = (0, utils_1.compareDay)(day, startDay);
+            if (!endDay) {
+                return compareToStart === 0 ? 'start' : '';
+            }
+            var compareToEnd = (0, utils_1.compareDay)(day, endDay);
+            if (compareToStart === 0 && compareToEnd === 0 && allowSameDay) {
+                return 'start-end';
+            }
+            if (compareToStart === 0) {
+                return 'start';
+            }
+            if (compareToEnd === 0) {
+                return 'end';
+            }
+            if (compareToStart > 0 && compareToEnd < 0) {
+                return 'middle';
+            }
+            return '';
+        },
+        getDayType: function (day) {
+            var _a = this.data, type = _a.type, minDate = _a.minDate, maxDate = _a.maxDate, currentDate = _a.currentDate;
+            if ((0, utils_1.compareDay)(day, minDate) < 0 || (0, utils_1.compareDay)(day, maxDate) > 0) {
+                return 'disabled';
+            }
+            if (type === 'single') {
+                return (0, utils_1.compareDay)(day, currentDate) === 0 ? 'selected' : '';
+            }
+            if (type === 'multiple') {
+                return this.getMultipleDayType(day);
+            }
+            /* istanbul ignore else */
+            if (type === 'range') {
+                return this.getRangeDayType(day);
+            }
+            return '';
+        },
+        getBottomInfo: function (type) {
+            if (this.data.type === 'range') {
+                if (type === 'start') {
+                    return '开始';
+                }
+                if (type === 'end') {
+                    return '结束';
+                }
+                if (type === 'start-end') {
+                    return '开始/结束';
+                }
+            }
+        },
+    },
+});

+ 3 - 0
miniprogram_npm/@vant/weapp/calendar/components/month/index.json

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

+ 39 - 0
miniprogram_npm/@vant/weapp/calendar/components/month/index.wxml

@@ -0,0 +1,39 @@
+<wxs src="./index.wxs" module="computed"></wxs>
+<wxs src="../../../wxs/utils.wxs" module="utils" />
+
+<view class="van-calendar__month" style="{{ computed.getMonthStyle(visible, date, rowHeight) }}">
+  <view wx:if="{{ showMonthTitle }}" class="van-calendar__month-title">
+    {{ computed.formatMonthTitle(date) }}
+  </view>
+
+  <view wx:if="{{ visible }}" class="van-calendar__days">
+    <view wx:if="{{ showMark }}" class="van-calendar__month-mark">
+      {{ computed.getMark(date) }}
+    </view>
+
+    <view
+      wx:for="{{ days }}"
+      wx:key="index"
+      style="{{ computed.getDayStyle(item.type, index, date, rowHeight, color, firstDayOfWeek) }}"
+      class="{{ utils.bem('calendar__day', [item.type]) }} {{ item.className }}"
+      data-index="{{ index }}"
+      bindtap="onClick"
+    >
+      <view wx:if="{{ item.type === 'selected' }}" class="van-calendar__selected-day" style="width: {{ rowHeight }}px; height: {{ rowHeight }}px; background: {{ color }}">
+        <view wx:if="{{ item.topInfo }}" class="van-calendar__top-info">{{ item.topInfo }}</view>
+        {{ item.text }}
+        <view wx:if="{{ item.bottomInfo }}" class="van-calendar__bottom-info">
+          {{ item.bottomInfo }}
+        </view>
+      </view>
+
+      <view wx:else>
+        <view wx:if="{{ item.topInfo }}" class="van-calendar__top-info">{{ item.topInfo }}</view>
+        {{ item.text }}
+        <view wx:if="{{ item.bottomInfo }}" class="van-calendar__bottom-info">
+          {{ item.bottomInfo }}
+        </view>
+      </view>
+    </view>
+  </view>
+</view>

+ 71 - 0
miniprogram_npm/@vant/weapp/calendar/components/month/index.wxs

@@ -0,0 +1,71 @@
+/* eslint-disable */
+var utils = require('../../utils.wxs');
+
+function getMark(date) {
+  return getDate(date).getMonth() + 1;
+}
+
+var ROW_HEIGHT = 64;
+
+function getDayStyle(type, index, date, rowHeight, color, firstDayOfWeek) {
+  var style = [];
+  var current = getDate(date).getDay() || 7;
+  var offset = current < firstDayOfWeek ? (7 - firstDayOfWeek + current) :
+               current === 7 && firstDayOfWeek === 0 ? 0 :
+               (current - firstDayOfWeek);
+
+  if (index === 0) {
+    style.push(['margin-left', (100 * offset) / 7 + '%']);
+  }
+
+  if (rowHeight !== ROW_HEIGHT) {
+    style.push(['height', rowHeight + 'px']);
+  }
+
+  if (color) {
+    if (
+      type === 'start' ||
+      type === 'end' ||
+      type === 'start-end' ||
+      type === 'multiple-selected' ||
+      type === 'multiple-middle'
+    ) {
+      style.push(['background', color]);
+    } else if (type === 'middle') {
+      style.push(['color', color]);
+    }
+  }
+
+  return style
+    .map(function(item) {
+      return item.join(':');
+    })
+    .join(';');
+}
+
+function formatMonthTitle(date) {
+  date = getDate(date);
+  return date.getFullYear() + '年' + (date.getMonth() + 1) + '月';
+}
+
+function getMonthStyle(visible, date, rowHeight) {
+  if (!visible) {
+    date = getDate(date);
+
+    var totalDay = utils.getMonthEndDay(
+      date.getFullYear(),
+      date.getMonth() + 1
+    );
+    var offset = getDate(date).getDay();
+    var padding = Math.ceil((totalDay + offset) / 7) * rowHeight;
+
+    return 'padding-bottom:' + padding + 'px';
+  }
+}
+
+module.exports = {
+  getMark: getMark,
+  getDayStyle: getDayStyle,
+  formatMonthTitle: formatMonthTitle,
+  getMonthStyle: getMonthStyle
+};

File diff suppressed because it is too large
+ 1 - 0
miniprogram_npm/@vant/weapp/calendar/components/month/index.wxss


+ 1 - 0
miniprogram_npm/@vant/weapp/calendar/index.d.ts

@@ -0,0 +1 @@
+export {};

+ 360 - 0
miniprogram_npm/@vant/weapp/calendar/index.js

@@ -0,0 +1,360 @@
+"use strict";
+var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
+    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
+        if (ar || !(i in from)) {
+            if (!ar) ar = Array.prototype.slice.call(from, 0, i);
+            ar[i] = from[i];
+        }
+    }
+    return to.concat(ar || Array.prototype.slice.call(from));
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var component_1 = require("../common/component");
+var utils_1 = require("./utils");
+var toast_1 = __importDefault(require("../toast/toast"));
+var utils_2 = require("../common/utils");
+var initialMinDate = (0, utils_1.getToday)().getTime();
+var initialMaxDate = (function () {
+    var now = (0, utils_1.getToday)();
+    return new Date(now.getFullYear(), now.getMonth() + 6, now.getDate()).getTime();
+})();
+var getTime = function (date) {
+    return date instanceof Date ? date.getTime() : date;
+};
+(0, component_1.VantComponent)({
+    props: {
+        title: {
+            type: String,
+            value: '日期选择',
+        },
+        color: String,
+        show: {
+            type: Boolean,
+            observer: function (val) {
+                if (val) {
+                    this.initRect();
+                    this.scrollIntoView();
+                }
+            },
+        },
+        formatter: null,
+        confirmText: {
+            type: String,
+            value: '确定',
+        },
+        confirmDisabledText: {
+            type: String,
+            value: '确定',
+        },
+        rangePrompt: String,
+        showRangePrompt: {
+            type: Boolean,
+            value: true,
+        },
+        defaultDate: {
+            type: null,
+            observer: function (val) {
+                this.setData({ currentDate: val });
+                this.scrollIntoView();
+            },
+        },
+        allowSameDay: Boolean,
+        type: {
+            type: String,
+            value: 'single',
+            observer: 'reset',
+        },
+        minDate: {
+            type: Number,
+            value: initialMinDate,
+        },
+        maxDate: {
+            type: Number,
+            value: initialMaxDate,
+        },
+        position: {
+            type: String,
+            value: 'bottom',
+        },
+        rowHeight: {
+            type: null,
+            value: utils_1.ROW_HEIGHT,
+        },
+        round: {
+            type: Boolean,
+            value: true,
+        },
+        poppable: {
+            type: Boolean,
+            value: true,
+        },
+        showMark: {
+            type: Boolean,
+            value: true,
+        },
+        showTitle: {
+            type: Boolean,
+            value: true,
+        },
+        showConfirm: {
+            type: Boolean,
+            value: true,
+        },
+        showSubtitle: {
+            type: Boolean,
+            value: true,
+        },
+        safeAreaInsetBottom: {
+            type: Boolean,
+            value: true,
+        },
+        closeOnClickOverlay: {
+            type: Boolean,
+            value: true,
+        },
+        maxRange: {
+            type: null,
+            value: null,
+        },
+        firstDayOfWeek: {
+            type: Number,
+            value: 0,
+        },
+        readonly: Boolean,
+    },
+    data: {
+        subtitle: '',
+        currentDate: null,
+        scrollIntoView: '',
+    },
+    created: function () {
+        this.setData({
+            currentDate: this.getInitialDate(this.data.defaultDate),
+        });
+    },
+    mounted: function () {
+        if (this.data.show || !this.data.poppable) {
+            this.initRect();
+            this.scrollIntoView();
+        }
+    },
+    methods: {
+        reset: function () {
+            this.setData({ currentDate: this.getInitialDate() });
+            this.scrollIntoView();
+        },
+        initRect: function () {
+            var _this = this;
+            if (this.contentObserver != null) {
+                this.contentObserver.disconnect();
+            }
+            var contentObserver = this.createIntersectionObserver({
+                thresholds: [0, 0.1, 0.9, 1],
+                observeAll: true,
+            });
+            this.contentObserver = contentObserver;
+            contentObserver.relativeTo('.van-calendar__body');
+            contentObserver.observe('.month', function (res) {
+                if (res.boundingClientRect.top <= res.relativeRect.top) {
+                    // @ts-ignore
+                    _this.setData({ subtitle: (0, utils_1.formatMonthTitle)(res.dataset.date) });
+                }
+            });
+        },
+        limitDateRange: function (date, minDate, maxDate) {
+            if (minDate === void 0) { minDate = null; }
+            if (maxDate === void 0) { maxDate = null; }
+            minDate = minDate || this.data.minDate;
+            maxDate = maxDate || this.data.maxDate;
+            if ((0, utils_1.compareDay)(date, minDate) === -1) {
+                return minDate;
+            }
+            if ((0, utils_1.compareDay)(date, maxDate) === 1) {
+                return maxDate;
+            }
+            return date;
+        },
+        getInitialDate: function (defaultDate) {
+            var _this = this;
+            if (defaultDate === void 0) { defaultDate = null; }
+            var _a = this.data, type = _a.type, minDate = _a.minDate, maxDate = _a.maxDate;
+            var now = (0, utils_1.getToday)().getTime();
+            if (type === 'range') {
+                if (!Array.isArray(defaultDate)) {
+                    defaultDate = [];
+                }
+                var _b = defaultDate || [], startDay = _b[0], endDay = _b[1];
+                var start = this.limitDateRange(startDay || now, minDate, (0, utils_1.getPrevDay)(new Date(maxDate)).getTime());
+                var end = this.limitDateRange(endDay || now, (0, utils_1.getNextDay)(new Date(minDate)).getTime());
+                return [start, end];
+            }
+            if (type === 'multiple') {
+                if (Array.isArray(defaultDate)) {
+                    return defaultDate.map(function (date) { return _this.limitDateRange(date); });
+                }
+                return [this.limitDateRange(now)];
+            }
+            if (!defaultDate || Array.isArray(defaultDate)) {
+                defaultDate = now;
+            }
+            return this.limitDateRange(defaultDate);
+        },
+        scrollIntoView: function () {
+            var _this = this;
+            (0, utils_2.requestAnimationFrame)(function () {
+                var _a = _this.data, currentDate = _a.currentDate, type = _a.type, show = _a.show, poppable = _a.poppable, minDate = _a.minDate, maxDate = _a.maxDate;
+                // @ts-ignore
+                var targetDate = type === 'single' ? currentDate : currentDate[0];
+                var displayed = show || !poppable;
+                if (!targetDate || !displayed) {
+                    return;
+                }
+                var months = (0, utils_1.getMonths)(minDate, maxDate);
+                months.some(function (month, index) {
+                    if ((0, utils_1.compareMonth)(month, targetDate) === 0) {
+                        _this.setData({ scrollIntoView: "month".concat(index) });
+                        return true;
+                    }
+                    return false;
+                });
+            });
+        },
+        onOpen: function () {
+            this.$emit('open');
+        },
+        onOpened: function () {
+            this.$emit('opened');
+        },
+        onClose: function () {
+            this.$emit('close');
+        },
+        onClosed: function () {
+            this.$emit('closed');
+        },
+        onClickDay: function (event) {
+            if (this.data.readonly) {
+                return;
+            }
+            var date = event.detail.date;
+            var _a = this.data, type = _a.type, currentDate = _a.currentDate, allowSameDay = _a.allowSameDay;
+            if (type === 'range') {
+                // @ts-ignore
+                var startDay_1 = currentDate[0], endDay = currentDate[1];
+                if (startDay_1 && !endDay) {
+                    var compareToStart = (0, utils_1.compareDay)(date, startDay_1);
+                    if (compareToStart === 1) {
+                        var days_1 = this.selectComponent('.month').data.days;
+                        days_1.some(function (day, index) {
+                            var isDisabled = day.type === 'disabled' &&
+                                getTime(startDay_1) < getTime(day.date) &&
+                                getTime(day.date) < getTime(date);
+                            if (isDisabled) {
+                                (date = days_1[index - 1].date);
+                            }
+                            return isDisabled;
+                        });
+                        this.select([startDay_1, date], true);
+                    }
+                    else if (compareToStart === -1) {
+                        this.select([date, null]);
+                    }
+                    else if (allowSameDay) {
+                        this.select([date, date]);
+                    }
+                }
+                else {
+                    this.select([date, null]);
+                }
+            }
+            else if (type === 'multiple') {
+                var selectedIndex_1;
+                // @ts-ignore
+                var selected = currentDate.some(function (dateItem, index) {
+                    var equal = (0, utils_1.compareDay)(dateItem, date) === 0;
+                    if (equal) {
+                        selectedIndex_1 = index;
+                    }
+                    return equal;
+                });
+                if (selected) {
+                    // @ts-ignore
+                    var cancelDate = currentDate.splice(selectedIndex_1, 1);
+                    this.setData({ currentDate: currentDate });
+                    this.unselect(cancelDate);
+                }
+                else {
+                    // @ts-ignore
+                    this.select(__spreadArray(__spreadArray([], currentDate, true), [date], false));
+                }
+            }
+            else {
+                this.select(date, true);
+            }
+        },
+        unselect: function (dateArray) {
+            var date = dateArray[0];
+            if (date) {
+                this.$emit('unselect', (0, utils_1.copyDates)(date));
+            }
+        },
+        select: function (date, complete) {
+            if (complete && this.data.type === 'range') {
+                var valid = this.checkRange(date);
+                if (!valid) {
+                    // auto selected to max range if showConfirm
+                    if (this.data.showConfirm) {
+                        this.emit([
+                            date[0],
+                            (0, utils_1.getDayByOffset)(date[0], this.data.maxRange - 1),
+                        ]);
+                    }
+                    else {
+                        this.emit(date);
+                    }
+                    return;
+                }
+            }
+            this.emit(date);
+            if (complete && !this.data.showConfirm) {
+                this.onConfirm();
+            }
+        },
+        emit: function (date) {
+            this.setData({
+                currentDate: Array.isArray(date) ? date.map(getTime) : getTime(date),
+            });
+            this.$emit('select', (0, utils_1.copyDates)(date));
+        },
+        checkRange: function (date) {
+            var _a = this.data, maxRange = _a.maxRange, rangePrompt = _a.rangePrompt, showRangePrompt = _a.showRangePrompt;
+            if (maxRange && (0, utils_1.calcDateNum)(date) > maxRange) {
+                if (showRangePrompt) {
+                    (0, toast_1.default)({
+                        context: this,
+                        message: rangePrompt || "\u9009\u62E9\u5929\u6570\u4E0D\u80FD\u8D85\u8FC7 ".concat(maxRange, " \u5929"),
+                    });
+                }
+                this.$emit('over-range');
+                return false;
+            }
+            return true;
+        },
+        onConfirm: function () {
+            var _this = this;
+            if (this.data.type === 'range' &&
+                !this.checkRange(this.data.currentDate)) {
+                return;
+            }
+            wx.nextTick(function () {
+                // @ts-ignore
+                _this.$emit('confirm', (0, utils_1.copyDates)(_this.data.currentDate));
+            });
+        },
+        onClickSubtitle: function (event) {
+            this.$emit('click-subtitle', event);
+        },
+    },
+});

+ 10 - 0
miniprogram_npm/@vant/weapp/calendar/index.json

@@ -0,0 +1,10 @@
+{
+  "component": true,
+  "usingComponents": {
+    "header": "./components/header/index",
+    "month": "./components/month/index",
+    "van-button": "../button/index",
+    "van-popup": "../popup/index",
+    "van-toast": "../toast/index"
+  }
+}

+ 25 - 0
miniprogram_npm/@vant/weapp/calendar/index.wxml

@@ -0,0 +1,25 @@
+<wxs src="./index.wxs" module="computed" />
+<wxs src="../wxs/utils.wxs" module="utils" />
+
+<import src="./calendar.wxml" />
+
+<van-popup
+  wx:if="{{ poppable }}"
+  custom-class="van-calendar__popup--{{ position }}"
+  close-icon-class="van-calendar__close-icon"
+  show="{{ show }}"
+  round="{{ round }}"
+  position="{{ position }}"
+  closeable="{{ showTitle || showSubtitle }}"
+  close-on-click-overlay="{{ closeOnClickOverlay }}"
+  bind:enter="onOpen"
+  bind:close="onClose"
+  bind:after-enter="onOpened"
+  bind:after-leave="onClosed"
+>
+  <include src="./calendar.wxml" />
+</van-popup>
+
+<include wx:else src="./calendar.wxml" />
+
+<van-toast id="van-toast" />

+ 37 - 0
miniprogram_npm/@vant/weapp/calendar/index.wxs

@@ -0,0 +1,37 @@
+/* eslint-disable */
+var utils = require('./utils.wxs');
+
+function getMonths(minDate, maxDate) {
+  var months = [];
+  var cursor = getDate(minDate);
+
+  cursor.setDate(1);
+
+  do {
+    months.push(cursor.getTime());
+    cursor.setMonth(cursor.getMonth() + 1);
+  } while (utils.compareMonth(cursor, getDate(maxDate)) !== 1);
+
+  return months;
+}
+
+function getButtonDisabled(type, currentDate) {
+  if (currentDate == null) {
+    return true;
+  }
+
+  if (type === 'range') {
+    return !currentDate[0] || !currentDate[1];
+  }
+
+  if (type === 'multiple') {
+    return !currentDate.length;
+  }
+
+  return !currentDate;
+}
+
+module.exports = {
+  getMonths: getMonths,
+  getButtonDisabled: getButtonDisabled
+};

File diff suppressed because it is too large
+ 1 - 0
miniprogram_npm/@vant/weapp/calendar/index.wxss


+ 12 - 0
miniprogram_npm/@vant/weapp/calendar/utils.d.ts

@@ -0,0 +1,12 @@
+export declare const ROW_HEIGHT = 64;
+export declare function formatMonthTitle(date: Date): string;
+export declare function compareMonth(date1: Date | number, date2: Date | number): 1 | -1 | 0;
+export declare function compareDay(day1: Date | number, day2: Date | number): 1 | -1 | 0;
+export declare function getDayByOffset(date: Date, offset: number): Date;
+export declare function getPrevDay(date: Date): Date;
+export declare function getNextDay(date: Date): Date;
+export declare function getToday(): Date;
+export declare function calcDateNum(date: [Date, Date]): number;
+export declare function copyDates(dates: Date | Date[]): Date | Date[];
+export declare function getMonthEndDay(year: number, month: number): number;
+export declare function getMonths(minDate: number, maxDate: number): number[];

+ 97 - 0
miniprogram_npm/@vant/weapp/calendar/utils.js

@@ -0,0 +1,97 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.getMonths = exports.getMonthEndDay = exports.copyDates = exports.calcDateNum = exports.getToday = exports.getNextDay = exports.getPrevDay = exports.getDayByOffset = exports.compareDay = exports.compareMonth = exports.formatMonthTitle = exports.ROW_HEIGHT = void 0;
+exports.ROW_HEIGHT = 64;
+function formatMonthTitle(date) {
+    if (!(date instanceof Date)) {
+        date = new Date(date);
+    }
+    return "".concat(date.getFullYear(), "\u5E74").concat(date.getMonth() + 1, "\u6708");
+}
+exports.formatMonthTitle = formatMonthTitle;
+function compareMonth(date1, date2) {
+    if (!(date1 instanceof Date)) {
+        date1 = new Date(date1);
+    }
+    if (!(date2 instanceof Date)) {
+        date2 = new Date(date2);
+    }
+    var year1 = date1.getFullYear();
+    var year2 = date2.getFullYear();
+    var month1 = date1.getMonth();
+    var month2 = date2.getMonth();
+    if (year1 === year2) {
+        return month1 === month2 ? 0 : month1 > month2 ? 1 : -1;
+    }
+    return year1 > year2 ? 1 : -1;
+}
+exports.compareMonth = compareMonth;
+function compareDay(day1, day2) {
+    if (!(day1 instanceof Date)) {
+        day1 = new Date(day1);
+    }
+    if (!(day2 instanceof Date)) {
+        day2 = new Date(day2);
+    }
+    var compareMonthResult = compareMonth(day1, day2);
+    if (compareMonthResult === 0) {
+        var date1 = day1.getDate();
+        var date2 = day2.getDate();
+        return date1 === date2 ? 0 : date1 > date2 ? 1 : -1;
+    }
+    return compareMonthResult;
+}
+exports.compareDay = compareDay;
+function getDayByOffset(date, offset) {
+    date = new Date(date);
+    date.setDate(date.getDate() + offset);
+    return date;
+}
+exports.getDayByOffset = getDayByOffset;
+function getPrevDay(date) {
+    return getDayByOffset(date, -1);
+}
+exports.getPrevDay = getPrevDay;
+function getNextDay(date) {
+    return getDayByOffset(date, 1);
+}
+exports.getNextDay = getNextDay;
+function getToday() {
+    var today = new Date();
+    today.setHours(0, 0, 0, 0);
+    return today;
+}
+exports.getToday = getToday;
+function calcDateNum(date) {
+    var day1 = new Date(date[0]).getTime();
+    var day2 = new Date(date[1]).getTime();
+    return (day2 - day1) / (1000 * 60 * 60 * 24) + 1;
+}
+exports.calcDateNum = calcDateNum;
+function copyDates(dates) {
+    if (Array.isArray(dates)) {
+        return dates.map(function (date) {
+            if (date === null) {
+                return date;
+            }
+            return new Date(date);
+        });
+    }
+    return new Date(dates);
+}
+exports.copyDates = copyDates;
+function getMonthEndDay(year, month) {
+    return 32 - new Date(year, month - 1, 32).getDate();
+}
+exports.getMonthEndDay = getMonthEndDay;
+function getMonths(minDate, maxDate) {
+    var months = [];
+    var cursor = new Date(minDate);
+    cursor.setDate(1);
+    do {
+        months.push(cursor.getTime());
+        cursor.setMonth(cursor.getMonth() + 1);
+    } while (compareMonth(cursor, maxDate) !== 1);
+    return months;
+}
+exports.getMonths = getMonths;

+ 25 - 0
miniprogram_npm/@vant/weapp/calendar/utils.wxs

@@ -0,0 +1,25 @@
+/* eslint-disable */
+function getMonthEndDay(year, month) {
+  return 32 -  getDate(year, month - 1, 32).getDate();
+}
+
+function compareMonth(date1, date2) {
+  date1 = getDate(date1);
+  date2 = getDate(date2);
+
+  var year1 = date1.getFullYear();
+  var year2 = date2.getFullYear();
+  var month1 = date1.getMonth();
+  var month2 = date2.getMonth();
+
+  if (year1 === year2) {
+    return month1 === month2 ? 0 : month1 > month2 ? 1 : -1;
+  }
+
+  return year1 > year2 ? 1 : -1;
+}
+
+module.exports = {
+  getMonthEndDay: getMonthEndDay,
+  compareMonth: compareMonth
+};

+ 1 - 0
miniprogram_npm/@vant/weapp/card/index.d.ts

@@ -0,0 +1 @@
+export {};

+ 51 - 0
miniprogram_npm/@vant/weapp/card/index.js

@@ -0,0 +1,51 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var link_1 = require("../mixins/link");
+var component_1 = require("../common/component");
+(0, component_1.VantComponent)({
+    classes: [
+        'num-class',
+        'desc-class',
+        'thumb-class',
+        'title-class',
+        'price-class',
+        'origin-price-class',
+    ],
+    mixins: [link_1.link],
+    props: {
+        tag: String,
+        num: String,
+        desc: String,
+        thumb: String,
+        title: String,
+        price: {
+            type: String,
+            observer: 'updatePrice',
+        },
+        centered: Boolean,
+        lazyLoad: Boolean,
+        thumbLink: String,
+        originPrice: String,
+        thumbMode: {
+            type: String,
+            value: 'aspectFit',
+        },
+        currency: {
+            type: String,
+            value: '¥',
+        },
+    },
+    methods: {
+        updatePrice: function () {
+            var price = this.data.price;
+            var priceArr = price.toString().split('.');
+            this.setData({
+                integerStr: priceArr[0],
+                decimalStr: priceArr[1] ? ".".concat(priceArr[1]) : '',
+            });
+        },
+        onClickThumb: function () {
+            this.jumpLink('thumbLink');
+        },
+    },
+});

+ 6 - 0
miniprogram_npm/@vant/weapp/card/index.json

@@ -0,0 +1,6 @@
+{
+  "component": true,
+  "usingComponents": {
+    "van-tag": "../tag/index"
+  }
+}

+ 56 - 0
miniprogram_npm/@vant/weapp/card/index.wxml

@@ -0,0 +1,56 @@
+<wxs src="../wxs/utils.wxs" module="utils" />
+
+<view class="custom-class van-card">
+  <view class="{{ utils.bem('card__header', { center: centered }) }}">
+    <view class="van-card__thumb" bind:tap="onClickThumb">
+      <image
+        wx:if="{{ thumb }}"
+        src="{{ thumb }}"
+        mode="{{ thumbMode }}"
+        lazy-load="{{ lazyLoad }}"
+        class="van-card__img thumb-class"
+      />
+      <slot wx:else name="thumb" />
+      <van-tag
+        wx:if="{{ tag }}"
+        mark
+        type="danger"
+        custom-class="van-card__tag"
+      >
+        {{ tag }}
+      </van-tag>
+      <slot wx:else name="tag" />
+    </view>
+
+    <view class="van-card__content {{ utils.bem('card__content', { center: centered }) }}">
+      <view>
+        <view wx:if="{{ title }}" class="van-card__title title-class">{{ title }}</view>
+        <slot wx:else name="title" />
+
+        <view wx:if="{{ desc }}" class="van-card__desc desc-class">{{ desc }}</view>
+        <slot wx:else name="desc" />
+
+        <slot name="tags" />
+      </view>
+
+      <view class="van-card__bottom">
+        <slot name="price-top" />
+        <view wx:if="{{ price || price === 0 }}" class="van-card__price price-class">
+          <text>{{ currency }}</text>
+          <text class="van-card__price-integer">{{ integerStr }}</text>
+          <text class="van-card__price-decimal">{{ decimalStr }}</text>
+        </view>
+        <slot wx:else name="price" />
+        <view wx:if="{{ originPrice || originPrice === 0 }}" class="van-card__origin-price origin-price-class">{{ currency }} {{ originPrice }}</view>
+        <slot wx:else name="origin-price" />
+        <view wx:if="{{ num }}" class="van-card__num num-class">x {{ num }}</view>
+        <slot wx:else  name="num" />
+        <slot name="bottom" />
+      </view>
+    </view>
+  </view>
+
+  <view class="van-card__footer">
+    <slot name="footer" />
+  </view>
+</view>

File diff suppressed because it is too large
+ 1 - 0
miniprogram_npm/@vant/weapp/card/index.wxss


+ 1 - 0
miniprogram_npm/@vant/weapp/cell-group/index.d.ts

@@ -0,0 +1 @@
+export {};

+ 0 - 0
miniprogram_npm/@vant/weapp/cell-group/index.js


Some files were not shown because too many files changed in this diff