소스 검색

引入vant+uni-app

zhangyujun 3 년 전
부모
커밋
5a876a8098
100개의 변경된 파일2404개의 추가작업 그리고 4560개의 파일을 삭제
  1. 91 95
      package-lock.json
  2. 1 0
      package.json
  3. 439 0
      src/ttcomponents/button.vue
  4. 58 0
      src/ttcomponents/cell-group.vue
  5. 320 0
      src/ttcomponents/cell.vue
  6. 174 0
      src/ttcomponents/common/index.css
  7. 99 0
      src/ttcomponents/empty.vue
  8. 594 0
      src/ttcomponents/field.vue
  9. 126 0
      src/ttcomponents/icon.vue
  10. 92 0
      src/ttcomponents/info.vue
  11. 194 0
      src/ttcomponents/loading.vue
  12. 216 0
      src/ttcomponents/nav-bar.vue
  13. 0 2
      src/ttcomponents/out/$polyfill/api/relations.js
  14. 0 505
      src/ttcomponents/out/$polyfill/api/utils.js
  15. 0 5
      src/ttcomponents/out/$polyfill/component/classSubdirectory/app.js
  16. 0 281
      src/ttcomponents/out/$polyfill/component/classSubdirectory/component.js
  17. 0 98
      src/ttcomponents/out/$polyfill/component/classSubdirectory/page.js
  18. 0 39
      src/ttcomponents/out/$polyfill/component/classSubdirectory/processRelation.js
  19. 0 40
      src/ttcomponents/out/$polyfill/component/classSubdirectory/promise.js
  20. 0 127
      src/ttcomponents/out/$polyfill/component/classSubdirectory/relation.js
  21. 0 81
      src/ttcomponents/out/$polyfill/component/classSubdirectory/selectComponent.js
  22. 0 27
      src/ttcomponents/out/$polyfill/component/classSubdirectory/utils.js
  23. 0 31
      src/ttcomponents/out/$polyfill/component/componentClass.js
  24. 0 1
      src/ttcomponents/out/action-sheet/index.d.ts
  25. 0 62
      src/ttcomponents/out/action-sheet/index.js
  26. 0 8
      src/ttcomponents/out/action-sheet/index.json
  27. 0 101
      src/ttcomponents/out/action-sheet/index.vue
  28. 0 69
      src/ttcomponents/out/action-sheet/index.wxml
  29. 0 0
      src/ttcomponents/out/action-sheet/index.wxss
  30. 0 1
      src/ttcomponents/out/area/index.d.ts
  31. 0 234
      src/ttcomponents/out/area/index.js
  32. 0 6
      src/ttcomponents/out/area/index.json
  33. 0 246
      src/ttcomponents/out/area/index.vue
  34. 0 20
      src/ttcomponents/out/area/index.wxml
  35. 0 8
      src/ttcomponents/out/area/index.wxs
  36. 0 1
      src/ttcomponents/out/area/index.wxss
  37. 0 1
      src/ttcomponents/out/button/index.d.ts
  38. 0 58
      src/ttcomponents/out/button/index.js
  39. 0 7
      src/ttcomponents/out/button/index.json
  40. 0 84
      src/ttcomponents/out/button/index.vue
  41. 0 53
      src/ttcomponents/out/button/index.wxml
  42. 0 39
      src/ttcomponents/out/button/index.wxs
  43. 0 0
      src/ttcomponents/out/button/index.wxss
  44. 0 37
      src/ttcomponents/out/calendar/calendar.vue
  45. 0 65
      src/ttcomponents/out/calendar/calendar.wxml
  46. 0 1
      src/ttcomponents/out/calendar/components/header/index.d.ts
  47. 0 16
      src/ttcomponents/out/calendar/components/header/index.js
  48. 0 3
      src/ttcomponents/out/calendar/components/header/index.json
  49. 0 43
      src/ttcomponents/out/calendar/components/header/index.vue
  50. 0 16
      src/ttcomponents/out/calendar/components/header/index.wxml
  51. 0 1
      src/ttcomponents/out/calendar/components/header/index.wxss
  52. 0 1
      src/ttcomponents/out/calendar/components/month/index.d.ts
  53. 0 157
      src/ttcomponents/out/calendar/components/month/index.js
  54. 0 3
      src/ttcomponents/out/calendar/components/month/index.json
  55. 0 195
      src/ttcomponents/out/calendar/components/month/index.vue
  56. 0 39
      src/ttcomponents/out/calendar/components/month/index.wxml
  57. 0 67
      src/ttcomponents/out/calendar/components/month/index.wxs
  58. 0 0
      src/ttcomponents/out/calendar/components/month/index.wxss
  59. 0 1
      src/ttcomponents/out/calendar/index.d.ts
  60. 0 303
      src/ttcomponents/out/calendar/index.js
  61. 0 10
      src/ttcomponents/out/calendar/index.json
  62. 0 325
      src/ttcomponents/out/calendar/index.vue
  63. 0 25
      src/ttcomponents/out/calendar/index.wxml
  64. 0 37
      src/ttcomponents/out/calendar/index.wxs
  65. 0 1
      src/ttcomponents/out/calendar/index.wxss
  66. 0 17
      src/ttcomponents/out/calendar/utils.d.ts
  67. 0 78
      src/ttcomponents/out/calendar/utils.js
  68. 0 25
      src/ttcomponents/out/calendar/utils.wxs
  69. 0 1
      src/ttcomponents/out/card/index.d.ts
  70. 0 49
      src/ttcomponents/out/card/index.js
  71. 0 6
      src/ttcomponents/out/card/index.json
  72. 0 103
      src/ttcomponents/out/card/index.vue
  73. 0 56
      src/ttcomponents/out/card/index.wxml
  74. 0 0
      src/ttcomponents/out/card/index.wxss
  75. 0 1
      src/ttcomponents/out/cell-group/index.d.ts
  76. 0 10
      src/ttcomponents/out/cell-group/index.js
  77. 0 3
      src/ttcomponents/out/cell-group/index.json
  78. 0 27
      src/ttcomponents/out/cell-group/index.vue
  79. 0 9
      src/ttcomponents/out/cell-group/index.wxml
  80. 0 1
      src/ttcomponents/out/cell-group/index.wxss
  81. 0 1
      src/ttcomponents/out/cell/index.d.ts
  82. 0 38
      src/ttcomponents/out/cell/index.js
  83. 0 6
      src/ttcomponents/out/cell/index.json
  84. 0 73
      src/ttcomponents/out/cell/index.vue
  85. 0 46
      src/ttcomponents/out/cell/index.wxml
  86. 0 17
      src/ttcomponents/out/cell/index.wxs
  87. 0 0
      src/ttcomponents/out/cell/index.wxss
  88. 0 1
      src/ttcomponents/out/checkbox-group/index.d.ts
  89. 0 31
      src/ttcomponents/out/checkbox-group/index.js
  90. 0 3
      src/ttcomponents/out/checkbox-group/index.json
  91. 0 43
      src/ttcomponents/out/checkbox-group/index.vue
  92. 0 1
      src/ttcomponents/out/checkbox-group/index.wxml
  93. 0 1
      src/ttcomponents/out/checkbox-group/index.wxss
  94. 0 1
      src/ttcomponents/out/checkbox/index.d.ts
  95. 0 79
      src/ttcomponents/out/checkbox/index.js
  96. 0 6
      src/ttcomponents/out/checkbox/index.json
  97. 0 99
      src/ttcomponents/out/checkbox/index.vue
  98. 0 31
      src/ttcomponents/out/checkbox/index.wxml
  99. 0 20
      src/ttcomponents/out/checkbox/index.wxs
  100. 0 1
      src/ttcomponents/out/checkbox/index.wxss

+ 91 - 95
package-lock.json

@@ -3028,6 +3028,44 @@
           "integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=",
           "dev": true
         },
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true,
+          "optional": true
+        },
         "globby": {
           "version": "9.2.0",
           "resolved": "https://registry.npm.taobao.org/globby/download/globby-9.2.0.tgz?cache=0&sync_timestamp=1616407139482&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobby%2Fdownload%2Fglobby-9.2.0.tgz",
@@ -3044,6 +3082,13 @@
             "slash": "^2.0.0"
           }
         },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true,
+          "optional": true
+        },
         "hash-sum": {
           "version": "2.0.0",
           "resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-2.0.0.tgz",
@@ -3056,6 +3101,25 @@
           "integrity": "sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw=",
           "dev": true
         },
+        "json5": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
+          "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==",
+          "dev": true,
+          "optional": true
+        },
+        "loader-utils": {
+          "version": "2.0.2",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz",
+          "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^3.0.0",
+            "json5": "^2.1.2"
+          }
+        },
         "slash": {
           "version": "2.0.0",
           "resolved": "https://registry.npm.taobao.org/slash/download/slash-2.0.0.tgz?cache=0&sync_timestamp=1618384508676&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fslash%2Fdownload%2Fslash-2.0.0.tgz",
@@ -3070,6 +3134,28 @@
           "requires": {
             "minipass": "^3.1.1"
           }
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        },
+        "vue-loader-v16": {
+          "version": "npm:vue-loader@16.8.3",
+          "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.8.3.tgz",
+          "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "chalk": "^4.1.0",
+            "hash-sum": "^2.0.0",
+            "loader-utils": "^2.0.0"
+          }
         }
       }
     },
@@ -15231,6 +15317,11 @@
         "which-boxed-primitive": "^1.0.2"
       }
     },
+    "uni-vant": {
+      "version": "1.1.13",
+      "resolved": "https://registry.npmjs.org/uni-vant/-/uni-vant-1.1.13.tgz",
+      "integrity": "sha512-VWeDQkQ2UpgzKPa2lAmXUKwtZtSijU0A4Dbcv7DLA6fmvh8jIl/gCk8hJZe/t+5DdBaFTwcOgovUcK30GqMGsw=="
+    },
     "unicode-canonical-property-names-ecmascript": {
       "version": "1.0.4",
       "resolved": "https://registry.npm.taobao.org/unicode-canonical-property-names-ecmascript/download/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
@@ -15563,101 +15654,6 @@
         "vue-style-loader": "^4.1.0"
       }
     },
-    "vue-loader-v16": {
-      "version": "npm:vue-loader@16.8.3",
-      "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz",
-      "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "chalk": "^4.1.0",
-        "hash-sum": "^2.0.0",
-        "loader-utils": "^2.0.0"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "4.3.0",
-          "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
-          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "color-convert": "^2.0.1"
-          }
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "color-convert": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
-          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "color-name": "~1.1.4"
-          }
-        },
-        "color-name": {
-          "version": "1.1.4",
-          "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
-          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-          "dev": true,
-          "optional": true
-        },
-        "has-flag": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
-          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-          "dev": true,
-          "optional": true
-        },
-        "hash-sum": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-2.0.0.tgz",
-          "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==",
-          "dev": true,
-          "optional": true
-        },
-        "json5": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.1.tgz",
-          "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==",
-          "dev": true,
-          "optional": true
-        },
-        "loader-utils": {
-          "version": "2.0.2",
-          "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.2.tgz",
-          "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "big.js": "^5.2.2",
-            "emojis-list": "^3.0.0",
-            "json5": "^2.1.2"
-          }
-        },
-        "supports-color": {
-          "version": "7.2.0",
-          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
-          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "has-flag": "^4.0.0"
-          }
-        }
-      }
-    },
     "vue-style-loader": {
       "version": "4.1.3",
       "resolved": "https://registry.npm.taobao.org/vue-style-loader/download/vue-style-loader-4.1.3.tgz",

+ 1 - 0
package.json

@@ -70,6 +70,7 @@
     "qs": "^6.10.1",
     "regenerator-runtime": "^0.12.1",
     "sass-loader": "^7.3.1",
+    "uni-vant": "^1.1.13",
     "vue": "^2.6.11",
     "vuex": "^3.2.0"
   },

+ 439 - 0
src/ttcomponents/button.vue

@@ -0,0 +1,439 @@
+<!-- author: ranwawa -->
+<!-- since: 2020/1/5 -->
+<!-- desc: 按钮组件 -->
+<!-- remark:  -->
+<template>
+  <!-- TODO button上的id为啥无法挂载呢?icon上的就可以 -->
+  <button
+    :class="computedClass"
+    :style="computedStyle"
+    :id="customId"
+    hover-class="uv-btn-active hover-class"
+    :type="type"
+    :size="size"
+    :lang="lang"
+    :open-type="openType"
+    :session-from="sessionFrom"
+    :send-message-title="sendMessageTitle"
+    :send-message-path="sendMessagePath"
+    :send-message-img="sendMessageImg"
+    :app-parameter="appParameter"
+    :show-message-card="showMessageCard"
+    @click="handleClick"
+    @getuserinfo="emit('getuserinfo', $event)"
+    @contact="emit('contact', $event)"
+    @getphonenumber="emit('getphonenumber', $event)"
+    @error="emit('error', $event)"
+    @opensetting="emit('opensetting', $event)"
+    @launchapp="emit('launchapp', $event)"
+  >
+    <template v-if="loading">
+      <uv-loading
+        :type="loadingType"
+        :custom-class="loadingClass"
+        :size="loadingSize"
+        :color="computedLoadingColor"
+      />
+      <view v-if="loadingText" class="uv-btn-loading_text">
+        {{ loadingText }}
+      </view>
+    </template>
+    <template v-else>
+      <uv-icon
+        v-if="icon"
+        :name="icon"
+        size="1.2em"
+        custom-style="line-height: inherit;"
+        custom-class="uv-btn-icon"
+      />
+      <!-- the gutter between icon and text -->
+      <view class="uv-btn-text">
+        <slot />
+      </view>
+    </template>
+  </button>
+  <!-- todo 这里有很多小程序的属性需要迁移过来 -->
+  <!--:loading="loading"-->
+  <!--:form-type="formType"-->
+  <!--:hover-top-propagation="hoverTopPropagation"-->
+  <!--:hover-start-time="hoverStartTime"-->
+  <!--:hover-stay-time="hoverStayTime"-->
+</template>
+<script>
+import { bem, baseMixin } from './utils'
+import uvIcon from './icon.vue'
+import uvLoading from './loading.vue'
+
+export default {
+  name: 'UvBtn',
+  components: {
+    uvIcon,
+    uvLoading,
+  },
+  props: {
+    ...baseMixin.props,
+    // 按钮类型
+    type: {
+      type: String,
+      default: 'default',
+      validator(value) {
+        return ['default', 'primary', 'info', 'warning', 'danger'].includes(
+          value,
+        )
+      },
+    },
+    // 按钮颜色
+    color: {
+      type: String,
+      default: '',
+    },
+    // 按钮尺寸
+    size: {
+      type: String,
+      default: 'normal',
+      validator(value) {
+        return ['normal', 'large', 'small', 'mini'].includes(value)
+      },
+    },
+    // 朴素按钮
+    plain: {
+      type: Boolean,
+      default: false,
+    },
+    // 细边框
+    hairline: {
+      type: Boolean,
+      default: false,
+    },
+    // 块级元素
+    block: {
+      type: Boolean,
+      default: false,
+    },
+    // 圆形按钮
+    round: {
+      type: Boolean,
+      default: false,
+    },
+    // 方形按钮
+    square: {
+      type: Boolean,
+      default: false,
+    },
+    // 禁用按钮
+    disabled: {
+      type: Boolean,
+      default: false,
+    },
+    // 图标样式
+    icon: {
+      type: String,
+      default: '',
+    },
+    // 加载状态
+    loading: {
+      type: Boolean,
+      default: false,
+    },
+    // 加载状态提示文字
+    loadingText: {
+      type: String,
+      default: '',
+    },
+    // 加载状态图片
+    loadingType: {
+      type: String,
+      default: 'circular',
+      validate(value) {
+        return ['circular', 'spinner'].includes(value)
+      },
+    },
+    // 自定义加载状态类
+    loadingClass: {
+      type: String,
+      default: '',
+    },
+    // 加载状态大小
+    loadingSize: {
+      type: String,
+      default: '20rpx',
+    },
+    // 返回用户信息的语言
+    lang: {
+      type: String,
+      default: 'en',
+      validator(value) {
+        return ['en', 'zh_TW', 'zh_CN'].includes(value)
+      },
+    },
+    // 开放能力
+    openType: {
+      type: String,
+      default: '',
+      validator(value) {
+        return [
+          '',
+          'contact',
+          'share',
+          'getPhoneNumber',
+          'getUserInfo',
+          'launchApp',
+          'openSetting',
+          'feedback',
+        ].includes(value)
+      },
+    },
+    // todo 会话这几个要测一下具体是啥效果
+    // 会话来源
+    sessionFrom: {
+      type: String,
+      default: '',
+    },
+    // 会话内消息卡片点击跳转小程序路径
+    sendMessagePath: {
+      type: String,
+      default: '',
+    },
+    // 会话内消息卡片图片
+    sendMessageImg: {
+      type: String,
+      default: '',
+    },
+    // 会话内消息卡片标题
+    sendMessageTitle: {
+      type: String,
+      default: '',
+    },
+    // 是否显示会话内消息卡片
+    showMessageCard: {
+      type: Boolean,
+      default: false,
+    },
+    // 打开 APP 时,向 APP 传递的参数
+    appParameter: {
+      type: String,
+      default: '',
+    },
+  },
+  computed: {
+    computedStyle() {
+      const { color } = this
+      let style = ''
+      if (color) {
+        let textColor = color
+        // 非朴素按钮
+        // 边框,背景为设置的颜色
+        // 前景色为白色
+        if (!this.plain) {
+          style = `border-color: ${color}; background: ${color};`
+          textColor = '#fff'
+        }
+        style += `color: ${textColor}; border-color: ${textColor};`
+        /* 渐变色去掉边框 */
+        if (color.indexOf('gradient') !== -1) {
+          style += 'border-width: 0;'
+        }
+      }
+      return `${style}${this.customStyle}`
+    },
+    computedLoadingColor() {
+      return this.type === 'default' ? '#c9c9c9' : 'white'
+    },
+    computedClass() {
+      const {
+        type,
+        size,
+        plain,
+        block,
+        round,
+        square,
+        disabled,
+        loading,
+        hairline,
+      } = this
+      const bemClass = bem('btn', [
+        type,
+        size,
+        {
+          plain,
+          block,
+          round,
+          square,
+          disabled,
+          hairline,
+          unclickable: disabled || loading,
+        },
+      ])
+      return `${bemClass} ${this.customClass} ${
+        hairline ? 'uv-hairline-surround' : ''
+      }`
+    },
+  },
+  methods: {
+    emit(event, { detail }) {
+      this.$emit(event, detail)
+    },
+    handleClick() {
+      if (!this.disabled && !this.loading) {
+        this.$emit('click')
+      }
+    },
+  },
+}
+</script>
+
+<style lang="scss">
+@import 'sass/index';
+@import 'sass/hariline';
+
+// 样式前缀
+$comp: #{$PREFIX}btn;
+$btn-sizes: (
+  /* min-width height padding font-size */ 'large': 100% $button-height-large
+    (0) $font-size-lg,
+  'normal': auto $button-height-normal (0 $button-padding-normal) $font-size-md,
+  'small': $button-min-width-small $button-height-small (0 $padding-xs)
+    $font-size-sm,
+  'mini': $button-min-width-mini $button-height-mini (0) ($font-size-xs)
+);
+$btn-types: (
+  /* border-color background-color color */ 'primary': $primary $primary $white,
+  'info': $info $info $white,
+  'warning': $warning $warning $white,
+  'danger': $danger $danger $white,
+  'default': $border-color ($white) $text-color
+);
+
+@mixin get-plain($class-name, $color) {
+  #{$comp} #{$comp}-plain {
+    background-color: $white;
+
+    &#{$class-name} {
+      color: $color;
+    }
+  }
+}
+
+/* type相关样式 */
+@each $type, $values in $btn-types {
+  $class-name: #{$comp}-#{$type};
+  $bd-color: nth($values, 1);
+  $bg-color: nth($values, 2);
+  $color: nth($values, 3);
+
+  // compatible with weixin button[default]
+  #{$comp}#{$class-name} {
+    border: 1px solid $bd-color;
+    background-color: $bg-color;
+    color: $color;
+  }
+
+  @if $class-name == '#{$comp}-default' {
+    $bg-color: $color;
+  }
+  @include get-plain($class-name, $bg-color);
+}
+
+/* size相关样式 */
+@each $size, $values in $btn-sizes {
+  // compatible with WeiXin button[size=mini]
+  #{$comp}#{$comp}-#{$size} {
+    min-width: nth($values, 1);
+    height: nth($values, 2);
+    padding: nth($values, 3);
+    font-size: nth($values, 4);
+    line-height: nth($values, 2);
+  }
+}
+
+#{$comp} {
+  position: relative;
+  display: inline-flex;
+  align-items: center;
+  justify-content: center;
+  box-sizing: border-box;
+  border-radius: $border-radius-sm;
+  transition: opacity $animation-duration-fast;
+  text-align: center;
+  font-size: $font-size-md;
+  vertical-align: middle;
+  -webkit-appearance: none;
+  -webkit-text-size-adjust: 100%;
+
+  /* 隐藏小程序上面的默认边框 */
+  &::after {
+    border-width: 0;
+    line-height: 20px;
+  }
+
+  /* 点击态 */
+  &::before {
+    position: absolute;
+    top: 50%;
+    left: 50%;
+    width: 100%;
+    height: 100%;
+    content: ' ';
+    transform: translate(-50%, -50%);
+    opacity: 0;
+    border: inherit {
+      color: $black;
+    }
+    border-radius: inherit; /* inherit parent's border radius */
+    background-color: $black;
+  }
+
+  /* uni在h5里面已经实现了active时根据Hover-class添加对应类名 */
+  &-active::before {
+    opacity: 0.15;
+  }
+
+  &-block {
+    display: flex;
+    width: 100%;
+  }
+
+  &-round {
+    border-radius: $border-radius-max;
+  }
+
+  &-square {
+    border-radius: 0;
+  }
+
+  &-unclickable::after {
+    display: none;
+  }
+
+  &-disabled {
+    opacity: $disabled-opacity;
+  }
+
+  &-loading_text {
+    margin-left: $padding-base;
+  }
+
+  &-hairline {
+    padding-top: 1px; // add 1px padding for text vertical align middle
+    border-width: 0;
+
+    &::after {
+      border-width: 1px;
+      border-color: inherit;
+      border-radius: $border-radius-md;
+    }
+
+    &.uv-btn-round::after {
+      border-radius: $border-radius-sm;
+    }
+
+    &.uv-btn-square::after {
+      border-radius: 0;
+    }
+  }
+
+  &-text {
+    margin-left: $button-text-margin-left;
+  }
+}
+</style>

+ 58 - 0
src/ttcomponents/cell-group.vue

@@ -0,0 +1,58 @@
+<template>
+  <view class="cell-group">
+    <view v-if="title" class="uv-cell-group-title">
+      {{ title }}
+    </view>
+    <view
+      class="uv-cell-group"
+      :id="customId"
+      :class="computedClass"
+      :style="customStyle"
+    >
+      <slot />
+    </view>
+  </view>
+</template>
+
+<script>
+import { baseMixin } from './utils'
+
+export default {
+  name: 'UvCellGroup',
+  props: {
+    ...baseMixin.props,
+    // 标题
+    title: {
+      type: String,
+      default: '',
+    },
+    // 上下边框
+    border: {
+      type: Boolean,
+      default: true,
+    },
+  },
+  computed: {
+    computedClass() {
+      const cls = this.border ? ' uv-hairline-top-bottom' : ''
+      console.log(`${this.customClass || ''}${cls}`)
+      return `${this.customClass || ''}${cls}`
+    },
+  },
+}
+</script>
+
+<style scoped lang="scss">
+@import './sass/_index.scss';
+
+$comp: #{$PREFIX}cell-group;
+
+#{$comp} {
+  &-title {
+    padding: $cell-group-title-padding;
+    font-size: $cell-group-title-font-size;
+    line-height: $cell-group-title-line-height;
+    color: $cell-group-title-color;
+  }
+}
+</style>

+ 320 - 0
src/ttcomponents/cell.vue

@@ -0,0 +1,320 @@
+<!-- author: ranwawa -->
+<!-- since: 2020/1/21 -->
+<!-- desc: 单元格组件 -->
+
+<template>
+  <view
+    :class="computedClass"
+    :style="customStyle"
+    :hover-class="computedHoverClass"
+    :id="customId"
+    hover-stay-item="70"
+    @click="handleClick"
+  >
+    <!-- 左侧图标 -->
+    <uv-icon
+      v-if="icon"
+      :name="icon"
+      custom-class="uv-cell_left-icon uv-cell_left-icon-wrap"
+    />
+    <slot v-else name="icon" />
+    <!-- 左侧标题 -->
+    <view :class="titleClass" :style="computedTitleStyle" class="uv-cell-title">
+      <!-- 上面的标题 -->
+      <template v-if="title">
+        {{ title }}
+      </template>
+      <slot v-else name="title" />
+      <!-- 下面的说明 -->
+      <view
+        v-if="computedIsShowLabel"
+        class="uv-cell-label"
+        :class="labelClass"
+      >
+        <slot v-if="useLabelSlot" name="label" />
+        <template v-else-if="label">
+          {{ label }}
+        </template>
+      </view>
+    </view>
+    <!-- 右侧值 -->
+    <view class="uv-cell-value" :class="valueClass">
+      <template v-if="computedIsShowValue">
+        {{ value }}
+      </template>
+      <slot v-else />
+    </view>
+    <!-- 右侧图标 -->
+    <uv-icon
+      v-if="isLink"
+      :name="computedRightIconName"
+      :custom-class="computedRightIconClass"
+    />
+    <slot v-else name="right-icon" />
+    <slot name="extra" />
+  </view>
+</template>
+<script>
+import { baseMixin, bem } from './utils'
+import uvIcon from './icon.vue'
+
+export default {
+  name: 'UvCell',
+  components: {
+    uvIcon,
+  },
+  props: {
+    ...baseMixin.props,
+    // 左侧标题样式类
+    titleClass: {
+      type: String,
+      default: '',
+    },
+    // 描述信息样式类
+    labelClass: {
+      type: String,
+      default: '',
+    },
+    // 右侧内容样式类
+    valueClass: {
+      type: String,
+      default: '',
+    },
+    // 右侧图标样式类
+    rightIconClass: {
+      type: String,
+      default: '',
+    },
+    // 交互样式类
+    hoverClass: {
+      type: String,
+      default: '',
+    },
+    // 左侧图标
+    icon: {
+      type: String,
+      default: '',
+    },
+    // 左侧标题
+    title: {
+      type: String,
+      default: '',
+    },
+    // 标题宽度
+    titleWidth: {
+      type: [String, Number],
+      default: '',
+    },
+    // 标题下描述信息
+    label: {
+      type: String,
+      default: '',
+    },
+    // 是否启用描述信息插槽
+    useLabelSlot: {
+      type: Boolean,
+      default: false,
+    },
+    // 右侧内容
+    value: {
+      type: [String, Number],
+      default: '',
+    },
+    // 是否显示箭头
+    isLink: {
+      type: Boolean,
+      default: false,
+    },
+    // 箭头方向
+    arrowDirection: {
+      type: String,
+      default: '',
+      validate(value) {
+        return ['', 'up', 'down', 'left'].includes(value)
+      },
+    },
+    // 单元格大小
+    size: {
+      type: String,
+      default: '',
+      validate(value) {
+        return ['', 'large'].includes(value)
+      },
+    },
+    // 是否显示必填标记
+    required: {
+      type: Boolean,
+      default: false,
+    },
+    // 内容垂直居中
+    center: {
+      type: Boolean,
+      default: false,
+    },
+    // 下边框
+    border: {
+      type: Boolean,
+      default: true,
+    },
+    // 点击反馈
+    clickable: {
+      type: Boolean,
+      default: false,
+    },
+    // 跳转链接
+    url: {
+      type: String,
+      default: '',
+    },
+    // 跳转方法
+    linkType: {
+      type: String,
+      default: 'navigateTo',
+      validate(value) {
+        return [
+          'navigateTo',
+          'redirectTo',
+          'switchTab',
+          'navigateBack',
+        ].includes(value)
+      },
+    },
+  },
+  computed: {
+    computedClass() {
+      // todo 混合导入的customClass为什么是undefined
+      const {
+        customClass,
+        size,
+        center,
+        required,
+        border,
+        clickable,
+        isLink,
+      } = this
+      const bemClass = bem('cell', [
+        size,
+        {
+          center,
+          required,
+          borderless: !border,
+          clickable: isLink || clickable,
+        },
+      ])
+      return `${customClass ? `${customClass} ` : ''}${bemClass}`
+    },
+    computedHoverClass() {
+      return `uv-cell-hover ${this.hoverClass}`
+    },
+    computedIsShowValue() {
+      return this.value || this.value === 0
+    },
+    computedIsShowLabel() {
+      return this.useLabelSlot || this.label
+    },
+    computedRightIconName() {
+      return this.arrowDirection ? `arrow-${this.arrowDirection}` : 'arrow'
+    },
+    computedTitleStyle() {
+      return this.titleWidth
+        ? `max-width: ${this.titleWidth}; min-width: ${this.titleWidth};`
+        : ''
+    },
+    computedRightIconClass() {
+      return `${this.rightIconClass} uv-cell_right-icon`
+    },
+  },
+  methods: {
+    handleClick(e) {
+      this.$emit('click', e.detail)
+      this.jumpLink()
+    },
+    jumpLink(urlKey = 'url') {
+      const url = this[urlKey]
+      if (url) {
+        uni[this.linkType]({ url })
+      }
+    },
+  },
+}
+</script>
+<style lang="scss" scoped>
+@import './sass/index';
+
+$comp: #{$PREFIX}cell;
+
+#{$comp} {
+  position: relative;
+  display: flex;
+  box-sizing: border-box;
+  width: 100%;
+  padding: $cell-vertical-padding $cell-horizontal-padding;
+  background-color: $cell-background-color;
+  color: $cell-text-color;
+  font-size: $cell-font-size;
+  line-height: $cell-line-height;
+
+  &::after {
+    @include hairline-bottom($border-color, $padding-md);
+  }
+
+  &-borderless::after {
+    display: none;
+  }
+
+  &-label {
+    margin-top: $cell-label-margin-top;
+    color: $cell-label-color;
+    font-size: $cell-label-font-size;
+    line-height: $cell-label-line-height;
+  }
+
+  &-title,
+  &-value {
+    flex: 1;
+
+    &:empty {
+      display: none;
+    }
+  }
+
+  &-value {
+    overflow: hidden;
+    color: $cell-value-color;
+    text-align: right;
+    vertical-align: middle;
+  }
+
+  &-required {
+    overflow: visible;
+
+    &::before {
+      position: absolute;
+      left: $padding-xs;
+      color: $cell-required-color;
+      font-size: $cell-label-font-size;
+      content: '*';
+    }
+  }
+
+  &-center {
+    align-items: center;
+  }
+
+  &-clickable.uv-cell-hover {
+    background-color: $cell-active-color;
+  }
+
+  &-large {
+    padding: {
+      top: $cell-large-vertical-padding;
+      bottom: $cell-large-vertical-padding;
+    }
+
+    #{$comp}-label,
+    #{$comp}-title {
+      font-size: $cell-large-title-font-size;
+    }
+  }
+}
+</style>

+ 174 - 0
src/ttcomponents/common/index.css

@@ -0,0 +1,174 @@
+/* 通用 */
+.uv-ellipsis {
+  overflow: hidden;
+  white-space: nowrap;
+  text-overflow: ellipsis;
+}
+/* 按钮 */
+.uv-btn-icon {
+  display: inline-flex !important;
+  min-width: 1em;
+  vertical-align: top;
+  line-height: inherit !important;
+}
+/* 图标 */
+.uv-icon-info {
+  z-index: 1;
+}
+/* 单元格 */
+.uv-cell-hover {
+  background-color: #f2f3f5;
+}
+.uv-cell_left-icon {
+  vertical-align: middle;
+  line-height: 20px;
+}
+.uv-cell_right-icon {
+  display: inline-flex !important;
+  align-items: center;
+  margin-left: 5px;
+  color: #969799;
+  line-height: 20px;
+}
+.uv-cell_left-icon-wrap,
+.uv-cell_right-icon-wrap {
+  display: flex;
+  align-items: center;
+  height: 24px;
+  font-size: 16px;
+}
+
+.uv-cell_left-icon-wrap {
+  margin-right: 5px;
+}
+/* 输入框 */
+.uv-field-label {
+  white-space: nowrap;
+}
+.uv-field_icon-root {
+  display: flex;
+  align-items: center;
+  min-height: 24px;
+}
+.uv-field_clear-root {
+  color: #c8c9cc;
+}
+.uv-field_icon-container {
+  color: #969799;
+}
+.uv-field_clear-root {
+  flex-shrink: 0;
+  margin-right: -8px;
+  padding: 0 8px;
+  vertical-align: middle;
+  line-height: inherit;
+}
+.uv-field-placeholder {
+  position: absolute;
+  /* 兼容uni-h5 */
+  /* #ifdef MP */
+  top: 0;
+  /* #endif */
+  right: 0;
+  left: 0;
+  pointer-events: none;
+  color: #969799;
+}
+.uv-field-placeholder-error {
+  color: #ee0a24;
+}
+/* 标签栏 */
+.uv-tab_title-info {
+  position: relative !important;
+  top: -1px !important;
+  display: inline-block;
+  transform: translateX(0) !important;
+}
+.uv-tabs-line {
+  position: absolute;
+  z-index: 1;
+  bottom: 0;
+  left: 0;
+  height: 3px;
+  border-radius: 3px;
+  background-color: #ee0a24;
+}
+/* 弹出框 */
+.uv-popup_close-icon {
+  position: absolute !important;
+  z-index: 1;
+  color: #969799;
+  font-size: 18px;
+}
+.uv-popup_close-icon-top-left {
+  top: 16px;
+  left: 16px;
+}
+.uv-popup_close-icon-top-right {
+  top: 16px;
+  right: 16px;
+}
+.uv-popup_close-icon-bottom-left {
+  bottom: 16px;
+  left: 16px;
+}
+.uv-popup_close-icon-bottom-right {
+  right: 16px;
+  bottom: 16px;
+}
+.uv-popup_close-icon:active {
+  opacity: 0.6;
+}
+.uv-uploader-upload-icon {
+  display: inline-block;
+  width: 24px;
+  height: 24px;
+  color: #969799;
+  font-size: 24px;
+}
+.uv-uploader-preview-delete {
+  position: absolute !important;
+  top: 0;
+  right: 0;
+  transform: translate3d(50%, -50%, 0);
+  color: #969799;
+  border-radius: 100%;
+  background-color: #fff;
+  font-size: 18px;
+}
+.uv-uploader-preview-icon {
+  display: inline-block;
+  width: 20px;
+  height: 20px;
+  color: #646566;
+  font-size: 20px;
+}
+/* 遮罩 */
+.uv-overlay {
+  position: fixed;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  background-color: rgba(0, 0, 0, 0.7);
+}
+/* 业务组件-结果页 */
+.uv-result_icon-success {
+  color: #07c160;
+}
+.uv-result_icon-info {
+  color: #1989fa;
+}
+.uv-result_icon-warning {
+  color: #ff976a;
+}
+.uv-result_icon-danger {
+  color: #ee0a24;
+}
+/* nav-bar */
+.uv-icon.uv-nav-tab__arrow {
+  min-width: 1em;
+  margin-right: 8px;
+  color: #1989fa;
+  font-size: 32px !important;
+}

+ 99 - 0
src/ttcomponents/empty.vue

@@ -0,0 +1,99 @@
+<!--
+ * @file 空状态组件
+ * @version 0.0.1
+ * @author 冉娃娃 <274544338@qq.com>
+ * @since 2020/6/26 21:27
+-->
+<template>
+  <view class="uv-empty">
+    <view class="uv-empty__image">
+      <slot v-if="useImageSlot" name="image" />
+      <image v-else :src="computedSrc" mode="aspectFill" />
+    </view>
+    <view class="uv-empty__description">
+      <slot v-if="useDescriptionSlot" name="description" />
+      <template v-else>
+        {{ description }}
+      </template>
+    </view>
+    <view class="uv-empty__bottom">
+      <slot />
+    </view>
+  </view>
+</template>
+
+<script>
+import { baseMixin } from './utils'
+
+const PRESETS = {
+  error: true,
+  search: true,
+  default: true,
+  network: true,
+}
+export default {
+  props: {
+    ...baseMixin.props,
+    image: {
+      type: String,
+      default: 'default',
+    },
+    description: {
+      type: String,
+      default: '',
+    },
+    useImageSlot: {
+      type: Boolean,
+      default: false,
+    },
+    useDescriptionSlot: {
+      type: Boolean,
+      default: false,
+    },
+  },
+  computed: {
+    computedSrc() {
+      const { image } = this
+      if (PRESETS[image]) {
+        return `https://img.yzcdn.cn/vant/empty-image-${image}.png`
+      }
+      return image
+    },
+  },
+}
+</script>
+
+<style lang="scss" scoped>
+@import './sass/index';
+
+.uv-empty {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  box-sizing: border-box;
+  padding: $empty-padding;
+
+  &__image {
+    width: $empty-image-size;
+    height: $empty-image-size;
+
+    image {
+      width: 100%;
+      height: 100%;
+    }
+  }
+
+  &__description {
+    margin-top: $empty-description-margin-top;
+    padding: $empty-description-padding;
+    color: $empty-description-color;
+    font-size: $empty-description-font-size;
+    line-height: $empty-description-line-height;
+  }
+
+  &__bottom {
+    margin-top: $empty-bottom-margin-top;
+  }
+}
+</style>

+ 594 - 0
src/ttcomponents/field.vue

@@ -0,0 +1,594 @@
+<template>
+  <uv-cell
+    :size="size"
+    :icon="leftIcon"
+    :title="label"
+    :title-width="titleWidth"
+    :center="center"
+    :border="border"
+    :is-link="isLink"
+    :required="required"
+    :clickable="clickable"
+    :arrow-direction="arrowDirection"
+    title-class="uv-field-label"
+    :custom-class="customClass"
+    :custom-style="customStyle"
+    :custom-id="customId"
+  >
+    <!-- 左侧图标 -->
+    <view slot="icon" class="uv-field-slot_left-icon">
+      <slot name="left-icon" />
+    </view>
+    <!-- 标题 -->
+    <view slot="title" class="uv-field-slot_label">
+      <slot name="label" />
+    </view>
+    <!-- 主体部分 -->
+    <view :class="computedBodyClass">
+      <textarea
+        v-if="computedIsShowTextarea"
+        :class="computedInputClass"
+        id="textarea"
+        :fixed="fixed"
+        :focus="focus"
+        :value="value"
+        :disable="computedIsDisableInput"
+        :maxlength="maxlength"
+        :placeholder="placeholder"
+        :placeholder-style="placeholderStyle"
+        :placeholder-class="computedPlaceholderClass"
+        :auto-height="autosize"
+        :cursor-spacing="cursorSpacing"
+        :adjust-position="adjustPosition"
+        :show-confirm-bar="showConfirmBar"
+        :hold-keyboard="holdKeyboard"
+        :selection-end="selectionEnd"
+        :selection-start="selectionStart"
+        @input="handleInput"
+        @blur="handleBlur"
+        @focus="handleFocus"
+        @confirm="handleConfirm"
+      />
+      <input
+        v-else
+        :class="computedInputClass"
+        :type="type"
+        :focus="focus"
+        :value="value"
+        :disabled="computedIsDisableInput"
+        :maxlength="maxlength"
+        :placeholder="placeholder"
+        :placeholder-style="placeholderStyle"
+        :placeholder-class="computedPlaceholderClass"
+        :confirm-type="confirmType"
+        :confirm-hold="confirmHold"
+        :hold-keyboard="holdKeyboard"
+        :cursor-spacing="cursorSpacing"
+        :adjust-position="adjustPosition"
+        :selection-end="selectionEnd"
+        :selection-start="selectionStart"
+        :password="computedIsShowPassword"
+        @input="handleInput"
+        @blur="handleBlur"
+        @focus="handleFocus"
+        @confirm="handleConfirm"
+      />
+      <!-- 清空图标 -->
+      <uv-icon
+        v-if="computedIsShowClearIcon"
+        size="32rpx"
+        name="clear"
+        custom-class="van-field_clear-root van-field_icon-root"
+        @touchstart.stop="handleClear"
+      />
+      <!-- 右侧自定义图标 -->
+      <view class="uv-field_icon-container" @click="handleClickRightIcon">
+        <uv-icon
+          v-if="rightIcon"
+          size="32rpx"
+          :name="rightIcon"
+          :custom-class="computedRightIconClass"
+        />
+        <slot v-else name="right-icon" />
+      </view>
+      <!-- 右侧自定义按钮 -->
+      <view class="uv-field-button">
+        <slot name="button" />
+      </view>
+    </view>
+    <!-- 错误文字 -->
+    <view
+      v-if="errorMessage"
+      class="uv-field_error-message"
+      :class="computedErrorClass"
+    >
+      {{ errorMessage }}
+    </view>
+  </uv-cell>
+</template>
+
+<script>
+import uvCell from './cell.vue'
+import uvIcon from './icon.vue'
+import { bem, getSystemInfoSync, baseMixin } from './utils'
+// #ifdef MP-ALIPAY
+import { getCharacterLen } from './utils/utils'
+// #endif
+
+export default {
+  name: 'UvField',
+  // todo 要验证一下,这个最终打包到小程序的js属性里面了么
+  behaviors: ['wx://form-field'],
+  components: {
+    uvCell,
+    uvIcon,
+  },
+  data() {
+    return {
+      // 系统型号
+      // todo 如何测这种依赖方法的属性方法?
+      system: getSystemInfoSync().split(' ').shift().toLowerCase(),
+      focused: false,
+      textareaAutoHeight: false,
+    }
+  },
+  props: {
+    ...baseMixin.props,
+    // cell相关属性
+    // 单元格大小
+    size: {
+      type: String,
+      default: '',
+      validate(value) {
+        return ['', 'large'].includes(value)
+      },
+    },
+    // 左侧图标
+    leftIcon: {
+      type: String,
+      default: '',
+    },
+    // 左侧标题
+    label: {
+      type: String,
+      default: '',
+    },
+    // 标题宽度
+    titleWidth: {
+      type: [String, Number],
+      default: 'min-content',
+    },
+    // 内容垂直居中
+    center: {
+      type: Boolean,
+      default: false,
+    },
+    // 下边框
+    border: {
+      type: Boolean,
+      default: true,
+    },
+    // 是否显示箭头
+    isLink: {
+      type: Boolean,
+      default: false,
+    },
+    // 是否显示必填标记
+    required: {
+      type: Boolean,
+      default: false,
+    },
+    // 点击反馈
+    clickable: {
+      type: Boolean,
+      default: false,
+    },
+    // 箭头方向
+    arrowDirection: {
+      type: String,
+      default: '',
+      validate(value) {
+        return ['', 'up', 'down', 'left'].includes(value)
+      },
+    },
+    // input属性
+    // 输入框类型
+    type: {
+      type: String,
+      default: 'text',
+      validate(value) {
+        return ['number', 'idcard', 'textarea', 'digit', 'password'].includes(
+          value,
+        )
+      },
+    },
+    // 密码框
+    password: {
+      type: Boolean,
+      default: false,
+    },
+    // 输入框样式
+    inputClass: {
+      type: String,
+      default: '',
+    },
+    // 如果 type 为 textarea 且在一个 position:fixed 的区域,需要显示指定属性 fixed 为 true
+    // todo 这是为啥呢
+    fixed: {
+      type: Boolean,
+      default: false,
+    },
+    // 焦点
+    focus: {
+      type: Boolean,
+      default: false,
+    },
+    // 输入值
+    value: {
+      type: String,
+      default: '',
+    },
+    // 禁用状态
+    disabled: {
+      type: Boolean,
+      default: false,
+    },
+    // 只读
+    readonly: {
+      type: Boolean,
+      default: false,
+    },
+    // 最大长度
+    maxlength: {
+      type: Number,
+      default: -1,
+    },
+    // 提示文字
+    placeholder: {
+      type: String,
+      default: '',
+    },
+    // 提示文字样式
+    placeholderStyle: {
+      type: String,
+      default: 'font-size: 28rpx;',
+    },
+    // 自适应高度
+    autosize: {
+      type: Boolean,
+      default: false,
+    },
+    // 输入框聚焦时底部与键盘的距离
+    cursorSpacing: {
+      type: Number,
+      default: 50,
+    },
+    // 键盘弹起时,是否自动上推页面
+    adjustPosition: {
+      type: Boolean,
+      default: true,
+    },
+    // 是否显示键盘上方带有”完成“按钮那一栏,只对 textarea 有效
+    showConfirmBar: {
+      type: Boolean,
+      default: true,
+    },
+    // focus 时,点击页面的时候不收起键盘
+    holdKeyboard: {
+      type: Boolean,
+      default: false,
+    },
+    // 光标起始位置,自动聚集时有效,需与 selection-end 搭配使用
+    selectionStart: {
+      type: Number,
+      default: -1,
+    },
+    // 光标结束位置,自动聚集时有效,需与 selection-start 搭配使用
+    selectionEnd: {
+      type: Number,
+      default: -1,
+    },
+    // 设置键盘右下角按钮的文字,仅在 type='text' 时生效
+    confirmType: {
+      type: String,
+      default: '',
+    },
+    // 点击键盘右下角按钮时是否保持键盘不收起,在 type='textarea' 时无效
+    confirmHold: {
+      type: Boolean,
+      default: false,
+    },
+    // 清除控件
+    clearable: {
+      type: Boolean,
+      default: false,
+    },
+    // 输入框内容对齐方式,可选值为 center right
+    inputAlign: {
+      type: String,
+      default: '',
+      validate(value) {
+        return ['center', 'right'].includes(value)
+      },
+    },
+    // 错误信息
+    errorMessage: {
+      type: String,
+      default: '',
+    },
+    // 是否显示错误信息
+    error: {
+      type: Boolean,
+      default: false,
+    },
+    // 底部错误提示文案对齐方式,可选值为 center right
+    errorMessageAlign: {
+      type: String,
+      default: '',
+      validate(value) {
+        return ['', 'center', 'right'].includes(value)
+      },
+    },
+    // 右侧图标样式
+    rightIconClass: {
+      type: String,
+      default: '',
+    },
+    // 右侧图标
+    rightIcon: {
+      type: String,
+      default: '',
+    },
+  },
+  computed: {
+    computedBodyClass() {
+      const { type, system } = this
+      const param = []
+      if (system === 'ios') {
+        param.push(system)
+      }
+      if (type === 'textarea') {
+        param.push(type)
+      }
+      return bem('field-body', param)
+    },
+    computedIsShowTextarea() {
+      return this.type === 'textarea'
+    },
+    computedInputClass() {
+      const {
+        inputClass,
+        inputAlign,
+        type,
+        disabled,
+        error,
+        textareaAutoHeight,
+      } = this
+      const param = [
+        inputAlign,
+        {
+          disabled,
+          error,
+          'textarea_auto-height': textareaAutoHeight,
+        },
+      ]
+      if (this.computedIsShowTextarea) {
+        param.push(type)
+      }
+      const bemClass = bem('field-input', param)
+      return `${inputClass && `${inputClass} `}${bemClass}`
+    },
+    computedIsDisableInput() {
+      return this.disabled || this.readonly
+    },
+    computedPlaceholderClass() {
+      return bem('field-placeholder', { error: this.error })
+    },
+    computedIsShowPassword() {
+      return this.password || this.type === 'password'
+    },
+    computedIsShowClearIcon() {
+      return this.clearable && this.focused && this.value && !this.readonly
+    },
+    computedRightIconClass() {
+      return `van-field_icon-root${
+        this.rightIconClass && ` ${this.rightIconClass}`
+      }`
+    },
+    computedErrorClass() {
+      const { errorMessageAlign, disabled, error } = this
+      return bem('field_error', [
+        errorMessageAlign,
+        {
+          disabled,
+          error,
+        },
+      ])
+    },
+  },
+  mounted() {
+    this.getTextAreaWidth()
+  },
+  methods: {
+    getTextAreaWidth() {
+      // #ifdef MP-ALIPAY
+      if (!this.computedIsShowTextarea) {
+        return
+      }
+      uni
+        .createSelectorQuery()
+        .select('textarea')
+        .boundingClientRect()
+        .exec((res) => {
+          const [{ width }] = res
+          this.textareaWidthEm = Math.ceil(width / 14)
+        })
+      // #endif
+    },
+    handleInput(e) {
+      const { value = '' } = e.detail || {}
+      // todo 这里加个tick的主要目的是?
+      this.$nextTick(() => {
+        this.emitChange(value)
+      })
+    },
+    handleBlur(e) {
+      const { value = '' } = e.detail || {}
+      this.focused = false
+      this.$emit('blur', value)
+    },
+    handleFocus(e) {
+      const { value = '' } = e.detail || {}
+      this.focused = true
+      this.$emit('focus', value)
+    },
+    handleConfirm(e) {
+      const { value = '' } = e.detail || {}
+      this.$emit('confirm', value)
+    },
+    handleClear() {
+      this.$nextTick(() => {
+        this.emitChange('')
+      })
+    },
+    handleClickRightIcon() {
+      this.$emit('click-icon')
+    },
+    emitChange(e) {
+      this.$emit('input', e)
+      this.$emit('change', e)
+      // #ifdef MP-ALIPAY
+      this.textareaAutoHeight = getCharacterLen(e) > this.textareaWidthEm
+      // #endif
+    },
+  },
+}
+</script>
+
+<style lang="scss" scoped>
+@import './sass/index';
+
+$comp: #{$PREFIX}field;
+
+#{$comp} {
+  font-size: $font-size-md;
+
+  &-body {
+    display: flex;
+    align-items: center;
+
+    &-textarea {
+      line-height: 1.2em;
+      min-height: $cell-line-height;
+    }
+
+    &-textarea.uv-filed-body-ios {
+      margin-top: px2rpx(-4.5);
+    }
+  }
+
+  &-slot {
+    &_label:empty,
+    &_left-icon:empty {
+      display: none;
+    }
+  }
+
+  &-input {
+    position: relative;
+    display: block;
+    box-sizing: border-box;
+    width: 100%;
+    margin: 0;
+    padding: 0;
+    line-height: inherit;
+    text-align: left;
+    background-color: transparent;
+    border: 0;
+    resize: none;
+    color: $field-input-text-color;
+    /* 兼容h5,支付宝小程序 默认是16px */
+    font-size: $font-size-md;
+    height: $cell-line-height;
+    min-height: $cell-line-height;
+
+    &-textarea {
+      height: $field-text-area-min-height;
+      min-height: $field-text-area-min-height;
+      /* #ifdef MP-ALIPAY */
+      /* 支付宝小程序默认是2个em高 */
+      height: 1em !important;
+
+      &.uv-field-input-textarea_auto-height {
+        height: auto !important;
+      }
+
+      /* #endif */
+    }
+
+    &-error {
+      color: $field-input-error-text-color;
+    }
+
+    &-disabled {
+      background-color: transparent;
+      opacity: 1;
+      color: $field-input-disabled-text-color;
+    }
+
+    &-center {
+      text-align: center;
+    }
+
+    &-right {
+      text-align: right;
+    }
+  }
+
+  &_icon-container {
+    line-height: inherit;
+    vertical-align: middle;
+    padding: 0 $padding-xs;
+    margin-right: -$padding-xs;
+  }
+
+  &_icon-container,
+  &-button {
+    flex-shrink: 0;
+  }
+
+  &_icon-container {
+    color: $field-icon-container-color;
+
+    &:empty {
+      display: none;
+    }
+  }
+
+  &-button {
+    padding-left: $padding-xs;
+
+    &:empty {
+      display: none;
+    }
+  }
+
+  &_error {
+    /* #ifdef MP-ALIPAY */
+    // alipay's placeholder has 4px padding-left
+    padding-left: 4px;
+    /* #endif */
+    text-align: left;
+    font-size: $field-error-message-text-font-size;
+    color: $field-error-message-color;
+
+    &-center {
+      text-align: center;
+    }
+
+    &-right {
+      text-align: right;
+    }
+  }
+}
+</style>

+ 126 - 0
src/ttcomponents/icon.vue

@@ -0,0 +1,126 @@
+<!-- author: ranwawa -->
+<!-- since: 2020/1/16 -->
+<!-- desc: 图标 -->
+<!-- remark:  -->
+<template>
+  <view
+    class="uv-icon"
+    :class="customClass"
+    :style="customStyle"
+    :id="customId"
+    @click="$emit('click')"
+    @touchstart="$emit('touchstart', $event)"
+  >
+    <uv-info
+      v-if="isShowInfo"
+      :dot="dot"
+      :info="info"
+      custom-class="uv-icon-info"
+    />
+    <image
+      v-if="isImage"
+      :class="classes"
+      :style="computedStyle"
+      class="van-icon-image"
+      mode="aspectFit"
+      :src="name"
+    />
+    <view v-else :class="classes" :style="computedStyle" />
+  </view>
+</template>
+<script>
+import uvInfo from './info.vue'
+import { addUnit, computeStyle, baseMixin } from './utils'
+
+export default {
+  name: 'UvIcon',
+  components: {
+    uvInfo,
+  },
+  props: {
+    ...baseMixin.props,
+    // 图标名/链接
+    name: {
+      type: String,
+      default: '',
+    },
+    // 右上角小红点
+    dot: {
+      type: Boolean,
+      default: false,
+    },
+    // 右上角文字
+    info: {
+      type: String,
+      default: '',
+    },
+    // 图标颜色
+    color: {
+      type: String,
+      default: 'inherit',
+    },
+    // 尺寸
+    size: {
+      type: [String, Number],
+      default: 'inherit',
+    },
+    // 类前缀
+    classPrefix: {
+      type: String,
+      default: 'van-icon',
+    },
+  },
+  computed: {
+    isShowInfo() {
+      return this.dot || this.info
+    },
+    isImage() {
+      return this.name.indexOf('/') !== -1
+    },
+    classes() {
+      const pre = this.classPrefix
+      const icon = this.isImage ? '' : `${pre}-${this.name}`
+      return `${pre} ${icon}`
+    },
+    computedStyle() {
+      const size = addUnit(this.size)
+      const other = {}
+      if (this.size !== 'inherit') {
+        if (this.isImage) {
+          other.width = size
+          other.height = size
+        } else {
+          other['font-size'] = size
+        }
+      }
+      if (this.color !== 'inherit') {
+        other.color = this.color
+      }
+      return computeStyle(other)
+    },
+  },
+}
+</script>
+<style>
+:host {
+  display: inline-flex;
+  align-items: center;
+  justify-content: center;
+}
+</style>
+<style lang="scss" scoped>
+@import './sass/index';
+/* todo 本地资源会增加首包大小,也无法及时同步 */
+@import './sass/font';
+
+$comp: #{$PREFIX}icon;
+
+#{$comp} {
+  position: relative;
+  display: inline-flex;
+  align-items: center;
+  font-size: $font-size-md;
+  // fix the vertical align with text
+  line-height: 1;
+}
+</style>

+ 92 - 0
src/ttcomponents/info.vue

@@ -0,0 +1,92 @@
+<!-- author: ranwawa -->
+<!-- since: 2020/1/15 -->
+<!-- desc: 提示信息 -->
+<!-- remark: 一般用于新消息通知或状态提示 -->
+<template>
+  <view
+    v-if="isShowUvInfo"
+    :class="classes"
+    :style="customStyle"
+    class="uv-info"
+  >
+    {{ uvInfo }}
+  </view>
+</template>
+<script>
+import { bem, baseMixin } from './utils'
+
+export default {
+  name: 'UvInfo',
+  props: {
+    ...baseMixin.props,
+    // 小红点
+    dot: {
+      type: Boolean,
+      default: false,
+    },
+    // 提示文字
+    info: {
+      type: [String, Number],
+      default: '',
+    },
+    // 自定义样式
+    customStyle: {
+      type: String,
+      default: '',
+    },
+    // 外部样式类
+    customClass: {
+      type: String,
+      default: '',
+    },
+  },
+  computed: {
+    isShowUvInfo() {
+      return this.info !== '' || this.dot
+    },
+    uvInfo() {
+      return this.dot ? '' : this.info
+    },
+    classes() {
+      const bemClass = bem('info', {
+        dot: this.dot,
+      })
+      return `${this.customClass} ${bemClass}`
+    },
+  },
+}
+</script>
+<style lang="scss" scoped>
+@import 'sass/index';
+
+$comp: #{$PREFIX}info;
+
+#{$comp} {
+  position: absolute;
+  top: 0;
+  right: 0;
+  box-sizing: border-box;
+  min-width: $info-size;
+  padding: $info-padding;
+  transform: translate(50%, -50%);
+  transform-origin: 100%;
+  text-align: center;
+  white-space: nowrap;
+  color: $info-color;
+  border: $info-border-width solid $white;
+  border-radius: $info-size;
+  background: $info-background-color;
+  font-family: $info-font-family;
+  font-size: $info-font-size;
+  font-weight: $info-font-weight;
+  line-height: call($info-size - $info-border-width * 2);
+
+  &-dot {
+    width: $info-dot-size;
+    min-width: 0;
+    height: $info-dot-size;
+    border-radius: 100%;
+    background-color: $info-dot-color;
+  }
+}
+</style>

+ 194 - 0
src/ttcomponents/loading.vue

@@ -0,0 +1,194 @@
+<!-- author: ranwawa -->
+<!-- since: 2020/1/16 -->
+<!-- desc: 加载 -->
+<!-- remark: 主要用于用户等待时的提醒 -->
+
+<template>
+  <view :class="classes" class="uv-loading">
+    <view
+      v-if="type === 'circular'"
+      :style="computedStyle"
+      class="uv-loading-icon uv-loading-icon_circular"
+    />
+    <view
+      v-else
+      :style="computedStyle"
+      class="uv-loading-icon uv-loading-icon_spinner"
+    >
+      <view class="uv-loading-icon_dot" />
+      <view class="uv-loading-icon_dot" />
+      <view class="uv-loading-icon_dot" />
+      <view class="uv-loading-icon_dot" />
+      <view class="uv-loading-icon_dot" />
+      <view class="uv-loading-icon_dot" />
+      <view class="uv-loading-icon_dot" />
+      <view class="uv-loading-icon_dot" />
+      <view class="uv-loading-icon_dot" />
+      <view class="uv-loading-icon_dot" />
+      <view class="uv-loading-icon_dot" />
+      <view class="uv-loading-icon_dot" />
+    </view>
+    <view :style="computedTxtStyle" class="uv-loading-text">
+      <slot />
+    </view>
+  </view>
+</template>
+<script>
+import { addUnit, bem, computeStyle, baseMixin } from './utils'
+
+export default {
+  name: 'UvLoading',
+  props: {
+    ...baseMixin.props,
+    // 颜色
+    color: {
+      type: String,
+      default: 'inherit',
+    },
+    // 图标类型
+    type: {
+      type: String,
+      default: 'circular',
+      validator(value) {
+        return ['circular', 'spinner'].includes(value)
+      },
+    },
+    // 图标大小
+    size: {
+      type: [String, Number],
+      default: 30,
+    },
+    // 文本大小
+    textSize: {
+      type: [String, Number],
+      default: 14,
+    },
+    // 是否垂直对齐
+    vertical: {
+      type: Boolean,
+      default: false,
+    },
+    // 自定义类
+    customClass: {
+      type: String,
+      default: '',
+    },
+  },
+  computed: {
+    classes() {
+      const bemClass = bem('loading', {
+        vertical: this.vertical,
+      })
+      return `${this.customClass} ${bemClass}`
+    },
+    computedStyle() {
+      const size = addUnit(this.size)
+      return computeStyle({
+        color: this.color,
+        width: size,
+        height: size,
+      })
+    },
+    computedTxtStyle() {
+      const size = addUnit(this.textSize)
+      return computeStyle({
+        'font-size': size,
+      })
+    },
+  },
+}
+</script>
+<style>
+/* todo 虚拟节点的地方,可能还要做非微信小程序端的兼容 */
+:host {
+  font-size: 0;
+  line-height: 1;
+}
+</style>
+<style lang="scss" scoped>
+@import './sass/index';
+
+$comp: #{$PREFIX}loading;
+
+@keyframes van-rotate {
+  from {
+    transform: rotate(0deg);
+  }
+
+  to {
+    transform: rotate(360deg);
+  }
+}
+
+#{$comp} {
+  display: inline-flex;
+  align-items: center;
+  justify-content: center;
+  color: $loading-spinner-color;
+  font-size: $font-size-md;
+
+  &-icon {
+    position: relative;
+    box-sizing: border-box;
+    width: $loading-spinner-size;
+    max-width: 100%;
+    height: $loading-text-font-size;
+    max-height: 100%;
+    animation: van-rotate $loading-spinner-animation-duration linear infinite;
+
+    &_spinner {
+      animation-timing-function: steps(12);
+    }
+
+    &_circular {
+      border: 1px solid transparent;
+      border-top-color: currentColor;
+      border-radius: 100%;
+    }
+
+    &_dot {
+      position: absolute;
+      top: 0;
+      left: 0;
+      width: 100%;
+      height: 100%;
+
+      &::before {
+        display: block;
+        width: px2rpx(2);
+        height: 25%;
+        margin: 0 auto;
+        content: ' ';
+        border-radius: 40%;
+        background-color: currentColor;
+      }
+
+      @for $i from 1 through 12 {
+        &:nth-child(#{$i}) {
+          transform: rotate($i * 30deg);
+          opacity: 1 - (0.75 / 12) * ($i - 1);
+        }
+      }
+    }
+  }
+
+  &-text {
+    margin-left: $padding-xs;
+    color: $loading-text-color;
+    font-size: $loading-text-font-size;
+    line-height: $loading-text-line-height;
+
+    &:empty {
+      display: none;
+    }
+  }
+
+  &_vertical {
+    flex-direction: column;
+
+    #{$comp}-text {
+      margin: $padding-xs 0 0;
+    }
+  }
+}
+</style>

+ 216 - 0
src/ttcomponents/nav-bar.vue

@@ -0,0 +1,216 @@
+<!--
+ * @file 导航栏
+ * @version 0.0.1
+ * @author 冉娃娃 <274544338@qq.com>
+ * @since 2020/6/24 10:29
+-->
+<template>
+  <view
+    class="uv-nav-bar"
+    :class="computedRootClass"
+    :style="computedRootStyle"
+  >
+    <view class="uv-nav-bar__status" :style="{ height: safeTop }"></view>
+    <view class="uv-nav-bar__wrapper">
+      <view class="uv-nav-bar__left" @click="handleClickLeft">
+        <uv-icon
+          v-if="leftArrow"
+          custom-class="uv-nav-tab__arrow"
+          name="arrow-left"
+        ></uv-icon>
+        <text v-if="leftText" class="uv-nav-bar__text">
+          {{ leftText }}
+        </text>
+        <slot name="left"></slot>
+      </view>
+      <view class="uv-nav-bar__title">
+        {{ title }}
+        <slot name="title"></slot>
+      </view>
+      <view class="uv-nav-bar__right" @click="handleClickRight">
+        <text v-if="rightText" class="uv-nav-bar__text">
+          {{ rightText }}
+        </text>
+        <slot name="right"></slot>
+      </view>
+    </view>
+  </view>
+</template>
+
+<script>
+import UvIcon from './icon.vue'
+import { baseMixin, bem } from './utils'
+
+export default {
+  name: 'navBar',
+  components: {
+    UvIcon,
+  },
+  data() {
+    return {
+      safeTop: 0,
+    }
+  },
+  props: {
+    ...baseMixin.props,
+    leftArrow: {
+      type: Boolean,
+      default: false,
+    },
+    leftText: {
+      type: String,
+      default: '',
+    },
+    title: {
+      type: String,
+      default: '',
+    },
+    rightText: {
+      type: String,
+      default: '',
+    },
+    border: {
+      type: Boolean,
+      default: true,
+    },
+    fixed: {
+      type: Boolean,
+      default: false,
+    },
+    sticky: {
+      type: Boolean,
+      default: false,
+    },
+    placeholder: {
+      type: Boolean,
+      default: false,
+    },
+    zIndex: {
+      type: [String, Number],
+      default: 1,
+    },
+  },
+  computed: {
+    computedRootStyle() {
+      return `z-index: ${this.zIndex}; ${this.customStyle};`
+    },
+    computedRootClass() {
+      const bemClass = bem('nav-bar', {
+        fixed: !this.sticky && this.fixed, // 优先使用sticky
+        border: this.border,
+        sticky: this.sticky,
+      })
+      return `${this.customClass} ${bemClass}`
+    },
+  },
+  created() {
+    this.setSafeArea()
+  },
+  methods: {
+    handleClickLeft() {
+      this.$emit('click-left')
+    },
+    handleClickRight() {
+      this.$emit('click-right')
+    },
+    setSafeArea() {
+      const { top } = this.getSafeArea()
+      this.safeTop = `${top}px`
+      // 这里不能使用rpx,因为小程序胶囊上边距在各尺寸下是固定的px,如果用rpx的法,在大屏会无法对齐
+    },
+    getSafeArea() {
+      const { safeArea } = uni.getSystemInfoSync()
+      return (
+        safeArea || {
+          top: 0, // 安全区域左上角横坐标
+          right: 0, // 安全区域右下角横坐标
+          bottom: 0, // 安全区域左上角纵坐标
+          left: 0, // 安全区域右下角纵坐标
+        }
+      )
+    },
+  },
+}
+</script>
+
+<style lang="scss" scoped>
+@import './sass/index';
+
+$comp: #{$PREFIX}nav-bar;
+#{$comp} {
+  position: relative;
+  z-index: $nav-bar-z-index;
+  background-color: $nav-bar-background-color;
+
+  .van-icon {
+    color: $nav-bar-icon-color;
+  }
+
+  &__wrapper {
+    position: relative;
+    display: flex;
+    align-items: center;
+    height: $nav-bar-height;
+    padding-top: env(safe-area-inset-top);
+    background: inherit;
+    line-height: 1.5;
+    text-align: center;
+    user-select: none;
+  }
+
+  &-fixed {
+    position: fixed;
+  }
+
+  &-sticky {
+    position: sticky;
+  }
+
+  &-fixed,
+  &-sticky {
+    top: 0;
+    left: 0;
+    width: 100%;
+  }
+
+  &-border::after {
+    @include hairline-bottom;
+  }
+
+  &__title {
+    max-width: 60%;
+    margin: 0 auto;
+    font-weight: $font-weight-bold;
+    font-size: $nav-bar-title-font-size;
+  }
+
+  &__left,
+  &__right {
+    position: absolute;
+    top: 0;
+    bottom: 0;
+    display: flex;
+    align-items: center;
+    padding: 0 $padding-md;
+    font-size: $font-size-md;
+    cursor: pointer;
+
+    &:active {
+      opacity: $active-opacity;
+    }
+  }
+
+  &__left {
+    left: 0;
+  }
+
+  &__right {
+    right: 0;
+  }
+
+  &__text {
+    color: $nav-bar-text-color;
+    line-height: 1.5;
+  }
+}
+</style>

+ 0 - 2
src/ttcomponents/out/$polyfill/api/relations.js

@@ -1,2 +0,0 @@
-module.exports = {
-}

+ 0 - 505
src/ttcomponents/out/$polyfill/api/utils.js

@@ -1,505 +0,0 @@
-
-module.exports = {
-  fnAppClass,
-  browserPath,
-}
-
-function fnAppClass() {
-  const fn = {
-    $data: {},
-    add(key, cb = () => {}) {
-      fn.$data[key] = fn.$data[key] || []
-      fn.$data[key].push(cb)
-      return fn
-    },
-    insert(key, cb = () => {}) {
-      fn.$data[key] = fn.$data[key] || []
-      fn.$data[key].unshift(cb)
-    },
-    getFn(key) {
-      return fn.$data[key]
-    },
-    bind(key, ctx = {}) {
-      fn.$data[key] = fn.$data[key] || []
-      fn.add(key, ctx[key])
-      ctx[key] = function(...params) {
-        const self = this
-        fn.getFn(key)
-          .forEach((cb) => {
-            cb.apply(self, params)
-          })
-      }
-    },
-  }
-  return fn
-}
-
-
-function assertPath(path) {
-  if (typeof path !== 'string') {
-    throw new TypeError(`Path must be a string. Received ${JSON.stringify(path)}`)
-  }
-}
-
-// Resolves . and .. elements in a path with directory names
-function normalizeStringPosix(path, allowAboveRoot) {
-  let res = ''
-  let lastSegmentLength = 0
-  let lastSlash = -1
-  let dots = 0
-  let code
-  for (let i = 0; i <= path.length; ++i) {
-    if (i < path.length) { code = path.charCodeAt(i) } else if (code === 47 /* /*/) { break } else { code = 47 /* /*/ }
-    if (code === 47 /* /*/) {
-      if (lastSlash === i - 1 || dots === 1) {
-        // NOOP
-      } else if (lastSlash !== i - 1 && dots === 2) {
-        if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== 46 /* .*/ || res.charCodeAt(res.length - 2) !== 46 /* .*/) {
-          if (res.length > 2) {
-            const lastSlashIndex = res.lastIndexOf('/')
-            if (lastSlashIndex !== res.length - 1) {
-              if (lastSlashIndex === -1) {
-                res = ''
-                lastSegmentLength = 0
-              } else {
-                res = res.slice(0, lastSlashIndex)
-                lastSegmentLength = res.length - 1 - res.lastIndexOf('/')
-              }
-              lastSlash = i
-              dots = 0
-              continue
-            }
-          } else if (res.length === 2 || res.length === 1) {
-            res = ''
-            lastSegmentLength = 0
-            lastSlash = i
-            dots = 0
-            continue
-          }
-        }
-        if (allowAboveRoot) {
-          if (res.length > 0) { res += '/..' } else { res = '..' }
-          lastSegmentLength = 2
-        }
-      } else {
-        if (res.length > 0) { res += `/${path.slice(lastSlash + 1, i)}` } else { res = path.slice(lastSlash + 1, i) }
-        lastSegmentLength = i - lastSlash - 1
-      }
-      lastSlash = i
-      dots = 0
-    } else if (code === 46 /* .*/ && dots !== -1) {
-      ++dots
-    } else {
-      dots = -1
-    }
-  }
-  return res
-}
-
-function _format(sep, pathObject) {
-  const dir = pathObject.dir || pathObject.root
-  const base = pathObject.base || (pathObject.name || '') + (pathObject.ext || '')
-  if (!dir) {
-    return base
-  }
-  if (dir === pathObject.root) {
-    return dir + base
-  }
-  return dir + sep + base
-}
-
-var posix = {
-  // path.resolve([from ...], to)
-  resolve: function resolve() {
-    let resolvedPath = ''
-    let resolvedAbsolute = false
-    let cwd
-
-    for (let i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {
-      var path
-      if (i >= 0) { path = arguments[i] } else {
-        if (cwd === undefined) { cwd = process.cwd() }
-        path = cwd
-      }
-
-      assertPath(path)
-
-      // Skip empty entries
-      if (path.length === 0) {
-        continue
-      }
-
-      resolvedPath = `${path}/${resolvedPath}`
-      resolvedAbsolute = path.charCodeAt(0) === 47 /* /*/
-    }
-
-    // At this point the path should be resolved to a full absolute path, but
-    // handle relative paths to be safe (might happen when process.cwd() fails)
-
-    // Normalize the path
-    resolvedPath = normalizeStringPosix(resolvedPath, !resolvedAbsolute)
-
-    if (resolvedAbsolute) {
-      if (resolvedPath.length > 0) { return `/${resolvedPath}` }
-      return '/'
-    } else if (resolvedPath.length > 0) {
-      return resolvedPath
-    }
-    return '.'
-  },
-
-  normalize: function normalize(path) {
-    assertPath(path)
-
-    if (path.length === 0) { return '.' }
-
-    const isAbsolute = path.charCodeAt(0) === 47 /* /*/
-    const trailingSeparator = path.charCodeAt(path.length - 1) === 47 /* /*/
-
-    // Normalize the path
-    path = normalizeStringPosix(path, !isAbsolute)
-
-    if (path.length === 0 && !isAbsolute) { path = '.' }
-    if (path.length > 0 && trailingSeparator) { path += '/' }
-
-    if (isAbsolute) { return `/${path}` }
-    return path
-  },
-
-  isAbsolute: function isAbsolute(path) {
-    assertPath(path)
-    return path.length > 0 && path.charCodeAt(0) === 47 /* /*/
-  },
-
-  join: function join(...p) {
-    if (p.length === 0) { return '.' }
-    let joined
-    for (let i = 0; i < p.length; ++i) {
-      const arg = p[i]
-      assertPath(arg)
-      if (arg.length > 0) {
-        if (joined === undefined) { joined = arg } else { joined += `/${arg}` }
-      }
-    }
-    if (joined === undefined) { return '.' }
-    return posix.normalize(joined)
-  },
-
-  relative: function relative(from, to) {
-    assertPath(from)
-    assertPath(to)
-
-    if (from === to) { return '' }
-
-    from = posix.resolve(from)
-    to = posix.resolve(to)
-
-    if (from === to) { return '' }
-
-    // Trim any leading backslashes
-    let fromStart = 1
-    for (; fromStart < from.length; ++fromStart) {
-      if (from.charCodeAt(fromStart) !== 47 /* /*/) { break }
-    }
-    const fromEnd = from.length
-    const fromLen = fromEnd - fromStart
-
-    // Trim any leading backslashes
-    let toStart = 1
-    for (; toStart < to.length; ++toStart) {
-      if (to.charCodeAt(toStart) !== 47 /* /*/) { break }
-    }
-    const toEnd = to.length
-    const toLen = toEnd - toStart
-
-    // Compare paths to find the longest common path from root
-    const length = fromLen < toLen ? fromLen : toLen
-    let lastCommonSep = -1
-    let i = 0
-    for (; i <= length; ++i) {
-      if (i === length) {
-        if (toLen > length) {
-          if (to.charCodeAt(toStart + i) === 47 /* /*/) {
-            // We get here if `from` is the exact base path for `to`.
-            // For example: from='/foo/bar'; to='/foo/bar/baz'
-            return to.slice(toStart + i + 1)
-          } else if (i === 0) {
-            // We get here if `from` is the root
-            // For example: from='/'; to='/foo'
-            return to.slice(toStart + i)
-          }
-        } else if (fromLen > length) {
-          if (from.charCodeAt(fromStart + i) === 47 /* /*/) {
-            // We get here if `to` is the exact base path for `from`.
-            // For example: from='/foo/bar/baz'; to='/foo/bar'
-            lastCommonSep = i
-          } else if (i === 0) {
-            // We get here if `to` is the root.
-            // For example: from='/foo'; to='/'
-            lastCommonSep = 0
-          }
-        }
-        break
-      }
-      const fromCode = from.charCodeAt(fromStart + i)
-      const toCode = to.charCodeAt(toStart + i)
-      if (fromCode !== toCode) { break } else if (fromCode === 47 /* /*/) { lastCommonSep = i }
-    }
-
-    let out = ''
-    // Generate the relative path based on the path difference between `to`
-    // and `from`
-    for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {
-      if (i === fromEnd || from.charCodeAt(i) === 47 /* /*/) {
-        if (out.length === 0) { out += '..' } else { out += '/..' }
-      }
-    }
-
-    // Lastly, append the rest of the destination (`to`) path that comes after
-    // the common path parts
-    if (out.length > 0) { return out + to.slice(toStart + lastCommonSep) }
-    
-    toStart += lastCommonSep
-    if (to.charCodeAt(toStart) === 47 /* /*/) { ++toStart }
-    return to.slice(toStart)
-  },
-
-  _makeLong: function _makeLong(path) {
-    return path
-  },
-
-  dirname: function dirname(path) {
-    assertPath(path)
-    if (path.length === 0) { return '.' }
-    let code = path.charCodeAt(0)
-    const hasRoot = code === 47 /* /*/
-    let end = -1
-    let matchedSlash = true
-    for (let i = path.length - 1; i >= 1; --i) {
-      code = path.charCodeAt(i)
-      if (code === 47 /* /*/) {
-        if (!matchedSlash) {
-          end = i
-          break
-        }
-      } else {
-        // We saw the first non-path separator
-        matchedSlash = false
-      }
-    }
-
-    if (end === -1) { return hasRoot ? '/' : '.' }
-    if (hasRoot && end === 1) { return '//' }
-    return path.slice(0, end)
-  },
-
-  basename: function basename(path, ext) {
-    if (ext !== undefined && typeof ext !== 'string') { throw new TypeError('"ext" argument must be a string') }
-    assertPath(path)
-
-    let start = 0
-    let end = -1
-    let matchedSlash = true
-    let i
-
-    if (ext !== undefined && ext.length > 0 && ext.length <= path.length) {
-      if (ext.length === path.length && ext === path) { return '' }
-      let extIdx = ext.length - 1
-      let firstNonSlashEnd = -1
-      for (i = path.length - 1; i >= 0; --i) {
-        const code = path.charCodeAt(i)
-        if (code === 47 /* /*/) {
-          // If we reached a path separator that was not part of a set of path
-          // separators at the end of the string, stop now
-          if (!matchedSlash) {
-            start = i + 1
-            break
-          }
-        } else {
-          if (firstNonSlashEnd === -1) {
-            // We saw the first non-path separator, remember this index in case
-            // we need it if the extension ends up not matching
-            matchedSlash = false
-            firstNonSlashEnd = i + 1
-          }
-          if (extIdx >= 0) {
-            // Try to match the explicit extension
-            if (code === ext.charCodeAt(extIdx)) {
-              if (--extIdx === -1) {
-                // We matched the extension, so mark this as the end of our path
-                // component
-                end = i
-              }
-            } else {
-              // Extension does not match, so our result is the entire path
-              // component
-              extIdx = -1
-              end = firstNonSlashEnd
-            }
-          }
-        }
-      }
-
-      if (start === end) { end = firstNonSlashEnd } else if (end === -1) { end = path.length }
-      return path.slice(start, end)
-    }
-    for (i = path.length - 1; i >= 0; --i) {
-      if (path.charCodeAt(i) === 47 /* /*/) {
-        // If we reached a path separator that was not part of a set of path
-        // separators at the end of the string, stop now
-        if (!matchedSlash) {
-          start = i + 1
-          break
-        }
-      } else if (end === -1) {
-        // We saw the first non-path separator, mark this as the end of our
-        // path component
-        matchedSlash = false
-        end = i + 1
-      }
-    }
-
-    if (end === -1) { return '' }
-    return path.slice(start, end)
-  },
-
-  extname: function extname(path) {
-    assertPath(path)
-    let startDot = -1
-    let startPart = 0
-    let end = -1
-    let matchedSlash = true
-    // Track the state of characters (if any) we see before our first dot and
-    // after any path separator we find
-    let preDotState = 0
-    for (let i = path.length - 1; i >= 0; --i) {
-      const code = path.charCodeAt(i)
-      if (code === 47 /* /*/) {
-        // If we reached a path separator that was not part of a set of path
-        // separators at the end of the string, stop now
-        if (!matchedSlash) {
-          startPart = i + 1
-          break
-        }
-        continue
-      }
-      if (end === -1) {
-        // We saw the first non-path separator, mark this as the end of our
-        // extension
-        matchedSlash = false
-        end = i + 1
-      }
-      if (code === 46 /* .*/) {
-        // If this is our first dot, mark it as the start of our extension
-        if (startDot === -1) { startDot = i } else if (preDotState !== 1) { preDotState = 1 }
-      } else if (startDot !== -1) {
-        // We saw a non-dot and non-path separator before our dot, so we should
-        // have a good chance at having a non-empty extension
-        preDotState = -1
-      }
-    }
-
-    if (startDot === -1 || end === -1
-        // We saw a non-dot character immediately before the dot
-        || preDotState === 0
-        // The (right-most) trimmed path component is exactly '..'
-        || preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
-      return ''
-    }
-    return path.slice(startDot, end)
-  },
-
-  format: function format(pathObject) {
-    if (pathObject === null || typeof pathObject !== 'object') {
-      throw new TypeError(`The "pathObject" argument must be of type Object. Received type ${typeof pathObject}`)
-    }
-    return _format('/', pathObject)
-  },
-
-  parse: function parse(path) {
-    assertPath(path)
-
-    const ret = { root: '', dir: '', base: '', ext: '', name: '' }
-    if (path.length === 0) { return ret }
-    let code = path.charCodeAt(0)
-    const isAbsolute = code === 47 /* /*/
-    let start
-    if (isAbsolute) {
-      ret.root = '/'
-      start = 1
-    } else {
-      start = 0
-    }
-    let startDot = -1
-    let startPart = 0
-    let end = -1
-    let matchedSlash = true
-    let i = path.length - 1
-
-    // Track the state of characters (if any) we see before our first dot and
-    // after any path separator we find
-    let preDotState = 0
-
-    // Get non-dir info
-    for (; i >= start; --i) {
-      code = path.charCodeAt(i)
-      if (code === 47 /* /*/) {
-        // If we reached a path separator that was not part of a set of path
-        // separators at the end of the string, stop now
-        if (!matchedSlash) {
-          startPart = i + 1
-          break
-        }
-        continue
-      }
-      if (end === -1) {
-        // We saw the first non-path separator, mark this as the end of our
-        // extension
-        matchedSlash = false
-        end = i + 1
-      }
-      if (code === 46 /* .*/) {
-        // If this is our first dot, mark it as the start of our extension
-        if (startDot === -1) { startDot = i } else if (preDotState !== 1) { preDotState = 1 }
-      } else if (startDot !== -1) {
-        // We saw a non-dot and non-path separator before our dot, so we should
-        // have a good chance at having a non-empty extension
-        preDotState = -1
-      }
-    }
-
-    if (startDot === -1 || end === -1
-    // We saw a non-dot character immediately before the dot
-    || preDotState === 0
-    // The (right-most) trimmed path component is exactly '..'
-    || preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
-      if (end !== -1) {
-        if (startPart === 0 && isAbsolute) { ret.base = ret.name = path.slice(1, end) } else { ret.base = ret.name = path.slice(startPart, end) }
-      }
-    } else {
-      if (startPart === 0 && isAbsolute) {
-        ret.name = path.slice(1, startDot)
-        ret.base = path.slice(1, end)
-      } else {
-        ret.name = path.slice(startPart, startDot)
-        ret.base = path.slice(startPart, end)
-      }
-      ret.ext = path.slice(startDot, end)
-    }
-
-    if (startPart > 0) { ret.dir = path.slice(0, startPart - 1) } else if (isAbsolute) { ret.dir = '/' }
-
-    return ret
-  },
-
-  sep: '/',
-  delimiter: ':',
-  win32: null,
-  posix: null,
-}
-
-posix.posix = posix
-
-function browserPath() {
-  return posix
-}

+ 0 - 5
src/ttcomponents/out/$polyfill/component/classSubdirectory/app.js

@@ -1,5 +0,0 @@
-module.exports = {
-  processTransformationApp(_opts, options) {
-    _opts = Object.assign(_opts, options)
-  },
-}

+ 0 - 281
src/ttcomponents/out/$polyfill/component/classSubdirectory/component.js

@@ -1,281 +0,0 @@
-const utils = require('../../api/utils')
-
-const { fnAppClass, browserPath } = utils
-const createNode = require('./relation')
-const processRelationHandle = require('./processRelation')
-
-const posix = browserPath()
-const Relations = require('../../api/relations')
-const SelectComponent = require('./selectComponent')
-
-function getInfo(key, obj) {
-  let val = {}
-  Object.keys(obj)
-    .forEach((item) => {
-      if (key === item) {
-        val = obj[item]
-      } else if (key.indexOf(item) !== -1) {
-        val = obj[item]
-      }
-    })
-  return val
-}
-function processRelations(ctx, relationInfo = {}) {
-  let route = ctx.is
-  route = route.replace(/\/node_modules\/[a-z-]+\/[a-z-]+/, '')
-    
-  if (route[0] === '/') {
-    route = route.substring(1)
-  }
-  const info = getInfo(route, relationInfo)
-  if (info) {
-    processRelationHandle(info, (node) => {
-      if (node.$id === 'saveChildRef0') {
-        ctx[node.$id] = function() {}
-        node.$index = 0
-        node.$route = route
-        createNode.call(ctx, ctx, null, node)
-        return false
-      }
-      ctx[node.$id] = function(ref) {
-        ctx.$antmove = ctx.$antmove || {}
-        if (ctx.$antmove[node.$id] === undefined) {
-          ctx.$antmove[node.$id] = 0
-        } else {
-          ctx.$antmove[node.$id] += 1
-        }
-        this.selectComponentApp.preProcesscomponents(ref)
-        node.$index = ctx.$antmove[node.$id]
-        node.$route = route
-        createNode.call(ctx, ref, null, node)
-      }
-    })
-  } else {
-    console.warn('Missing nodes relation of ', route)
-  }
-}
-
-function processRelationPath(self, relation) {
-  const from = self.is; let
-    to = relation
-  if (to[0] === '.') {
-    to = `../${to}`
-  }
-  const _p = posix.join(from, to)
-  return _p
-}
-function handleRelations() {
-  if (this.props.theRelations) {
-    Object.keys(this.props.theRelations)
-      .forEach((relation) => {
-        const _p = processRelationPath(this, relation)
-        const relationInfo = this.props.theRelations[relation]
-        let nodes = null
-
-        if (relationInfo.type === 'child' || relationInfo.type === 'descendant') {
-          return false
-        }
-        nodes = findRelationNode(this.$node, _p, relationInfo.type, true)
-        if (!nodes || nodes[0] === undefined) {
-          return false
-        }
-
-        nodes.forEach((n) => {
-          if (!n) {
-            // console.error('wrong relation reference of ', relationInfo);
-            // console.error('from: ', this.$node.$self.is, 'to: ', _p);
-            return false
-          }
-          _relationNode.call(this, n, {
-            relationInfo,
-            _p,
-            relation,
-          })
-        })
-      })
-  }
-}
-
-// process node relation callback
-function _relationNode(node, info) {
-  const { relationInfo, relation, _p } = info
-
-  // 触发父级组件的 relations
-  const type = relationInfo.type
-  let parentType = ''
-  if (type === 'parent') {
-    parentType = 'child'
-  } else if (type === 'ancestor') {
-    parentType = 'descendant'
-  }
-
-  const parentCtx = node.$self
-  const childCtx = this
-  if (typeof parentCtx.props.theRelations === 'object') {
-    Object.keys(parentCtx.props.theRelations)
-      .forEach((relation) => {
-        const relationInfo = parentCtx.props.theRelations[relation]
-        if (relationInfo.type === parentType) {
-          _relationNode.call(parentCtx, childCtx.$node, {
-            relationInfo,
-            relation,
-            _p: processRelationPath(parentCtx, relation),
-          })
-
-          return true
-        }
-      })
-  }
-  
-
-  node = node.$self
-  
-  this._storeRelationNodes = this._storeRelationNodes || {}
-  if (this._storeRelationNodes[_p]) {
-    this._storeRelationNodes[_p].push(node)
-  } else {
-    this._storeRelationNodes[_p] = [node]
-  }
-                    
-  if (this._storeRelationNodes[relation]) {
-    this._storeRelationNodes[relation].push(node)
-  } else {
-    this._storeRelationNodes[relation] = [node]
-  }
-  const ctx = this || {}
-  this.getRelationNodes = function(_p) {
-    this._storeRelationNodes = this._storeRelationNodes || {}
-    return this._storeRelationNodes[_p] || []
-  }
-
-  
-  if (typeof relationInfo.linked === 'function') {
-    relationInfo.linked.call(ctx, node)
-  }
-  
-  if (typeof relationInfo.linkChanged === 'function') {
-    const self = this
-    ctx._lifes = ctx._lifes || {}
-    ctx._lifes.didUpdate = ctx._lifes.didUpdate || []
-    ctx._lifes.didUpdate.push(() => {
-      relationInfo.linkChanged.call(self, node)
-    })
-  }
-  if (typeof relationInfo.unlinked === 'function') {
-    const self = this
-    ctx._lifes = ctx._lifes || {}
-    ctx._lifes.didUnmount = ctx._lifes.didUnmount || []
-    ctx._lifes.didUnmount.push(() => {
-      relationInfo.unlinked.call(self, node)
-    })
-  }
-}
-  
-function findRelationNode(node, p, type, isArray = false) {
-  // parent child ancestor descendant
-  const nodes = []
-  const _prcess = {
-    parent(node) {
-      if (!node || !node.$parent) { return }
-      const _p = node.$parent.$self.is || node.$parent.$self.route
-      if (_p === p) {
-        return node.$parent
-      }
-    },
-    child(node) {
-      let _child = null
-      node.$children
-        .forEach((child) => {
-          const _p = child.$self.is
-
-          if (_p === p) {
-            _child = child
-  
-            if (!isArray) {
-              return _child
-            }
-            nodes.push(_child)
-          }
-        })
-      return _child
-    },
-    ancestor(node) {
-      if (!node) { return }
-      let _node = null
-  
-      _node = _prcess.parent(node)
-      if (!_node) {
-        _node = _prcess.ancestor(node.$parent)
-      }
-      return _node
-    },
-    descendant(node) {
-      let _node = null
-      _node = _prcess.child(node)
-  
-      if (!_node) {
-        node.$children
-          .forEach((c) => {
-            _node = _prcess.child(c)
-  
-            if (!_node) {
-              _node = _prcess.descendant(c)
-            }
-          })
-      }
-  
-      return _node
-    },
-  }
-  
-  const ret = _prcess[type](node)
-  
-  if (isArray) {
-    if (type === 'parent' || type === 'ancestor') { return [ret] }
-    return nodes
-  }
-  return ret
-}
-
-module.exports = {
-  processTransformationComponent(_opts, options) {
-    const fnApp = fnAppClass()
-    _opts = Object.assign(_opts, options)
-    const didMount = function() {
-      // process relations, get relation ast
-      const relationAst = createNode.call(this, null, null, null, null, true).mountedHandles
-      relationAst.push(() => {
-        handleRelations.call(this)
-      })
-    }
-    fnApp.add('onInit', function() {
-      this.onPageReady = function(p) {
-        _opts.onPageReady && _opts.onPageReady.call(this, p)
-      }
-    })
-        
-    fnApp.add('didMount', didMount)
-    fnApp.insert('onInit', function() {
-      this.getRelationNodes = function() {
-        return []
-      }
-      this.selectComponentApp = new SelectComponent(this)
-
-      processRelations(this, Relations)
-      this.selectComponentApp.connect()
-    })
-    fnApp.bind('onInit', _opts)
-        
-
-    fnApp.bind('didMount', _opts)
-    fnApp.add('didUnmount', function() {
-      if (this.$node) {
-        this.$node.parent.removeChild(this.$node)
-        const refId = this.$node.$relationNode.$id
-        this.$antmove[refId]--
-      }
-    })
-    fnApp.bind('didUnmount', options.didUnmount)
-  },
-}
-

+ 0 - 98
src/ttcomponents/out/$polyfill/component/classSubdirectory/page.js

@@ -1,98 +0,0 @@
-const Relations = require('../../api/relations')
-const createNode = require('./relation')
-const processRelationHandle = require('./processRelation')
-const { connectNodes } = require('./utils')
-const selectComponent = require('./selectComponent')
-
-
-module.exports = {
-  processTransformationPage(_opts, options) {
-    _opts = Object.assign(_opts, options)
-
-    _opts.onLoad = function(res) {
-      this.selectComponentApp = new selectComponent(this)
-      this.selectComponentApp.connect()
-      // 初始化节点树
-      createNode.call(this, null, null, null, true)
-      processRelations(this, Relations)
-      if (typeof options.data === 'function') {
-        options.data = options.data()
-      }
-
-      if (options.onLoad) {
-        options.onLoad.call(this, res)
-      }
-    }
-
-    _opts.onReady = function(param) {
-      const ast = this.$node.getRootNode()
-      processRelationNodes(ast)
-
-      if (options.onReady) {
-        options.onReady.call(this, param)
-      }
-      ast.isPageReady = true
-    }
-  },
-}
-
-
-function processRelationNodes(ast = {}) {
-  const $nodes = ast.$nodes
-  
-  /**
-     * componentNodes onPageReady
-     */
-  Object.keys($nodes)
-    .forEach((item) => {
-      const node = $nodes[item]
-      connectNodes(node, ast)
-        
-      if (node.$self && typeof node.$self.onPageReady === 'function') {
-        node.$self.onPageReady()
-      }
-    })
-
-  ast.mountedHandles
-    .forEach((fn) => {
-      fn()
-    })
-  ast.mountedHandles = []
-}
-
-
-function processRelations(ctx, relationInfo = {}) {
-  let route = ctx.route
-  route = route.replace(/\/node_modules\/[a-z-]+\/[a-z-]+/, '')
-
-  if (route[0] !== '/') { route = `/${route}` }
-    
-  const info = relationInfo[route] || relationInfo[route.substring(1)]
-  if (info) {
-    processRelationHandle(info, (node) => {
-      const id = node.$id
-      if (id === 'saveChildRef0') {
-        ctx[id] = function() {}
-        node.$index = 0
-        node.$route = route
-        createNode.call(ctx, ctx, null, node)
-        return false
-      }
-      ctx[id] = function(ref) {
-        if (!ref) { return false }
-        ctx.$antmove = ctx.$antmove || {}
-        if (ctx.$antmove[id] === undefined) {
-          ctx.$antmove[id] = 0
-        } else {
-          ctx.$antmove[id] += 1
-        }
-        ctx.selectComponentApp.preProcesscomponents(ref)
-        node.$index = ctx.$antmove[id]
-        node.$route = route
-        createNode.call(ctx, ref, null, node)
-      }
-    })
-  } else {
-    console.warn('Missing nodes relation of ', route)
-  }
-}

+ 0 - 39
src/ttcomponents/out/$polyfill/component/classSubdirectory/processRelation.js

@@ -1,39 +0,0 @@
-class Node {
-  constructor(opts = {}) {
-    this.$id = opts.id
-    this.$opts = opts
-    this.$children = []
-    this.$parent = null
-
-    this.$render = function() {}
-  }
-
-  appendChild(child) {
-    this.$children.push(child)
-    child.$parent = this
-  }
-
-  removeChild(child) {
-    this.$children = this.$children.filter((c) => {
-      return c.$id !== child.$id
-    })
-  }
-}
-
-module.exports = function link(opts = {}, cb) {
-  const node = new Node({
-    id: opts.id,
-  })
-
-  if (typeof cb === 'function') {
-    cb(node)
-  }
-
-  if (Array.isArray(opts.children)) {
-    opts.children.forEach((child) => {
-      node.appendChild(link(child, cb))
-    })
-  }
-
-  return node
-}

+ 0 - 40
src/ttcomponents/out/$polyfill/component/classSubdirectory/promise.js

@@ -1,40 +0,0 @@
-const isArray = Array.isArray
-Promise.all = function(arr) {
-  return new Promise(((resolve, reject) => {
-    if (!isArray(arr)) {
-      return reject(new TypeError('Promise.all accepts an array'))
-    }
-
-    const args = Array.prototype.slice.call(arr)
-    if (args.length === 0) { return resolve([]) }
-    let remaining = args.length
-
-    function res(i, val) {
-      try {
-        if (val && (typeof val === 'object' || typeof val === 'function')) {
-          const then = val.then
-          if (typeof then === 'function') {
-            then.call(
-              val,
-              (val) => {
-                res(i, val)
-              },
-              reject,
-            )
-            return
-          }
-        }
-        args[i] = val
-        if (--remaining === 0) {
-          resolve(args)
-        }
-      } catch (ex) {
-        reject(ex)
-      }
-    }
-
-    for (let i = 0; i < args.length; i++) {
-      res(i, args[i])
-    }
-  }))
-}

+ 0 - 127
src/ttcomponents/out/$polyfill/component/classSubdirectory/relation.js

@@ -1,127 +0,0 @@
-let id = 0
-const { connectNodes } = require('./utils')
-
-let astCache = {}
-function createAstData() {
-  const RelationAst = {
-    $refNodes: {},
-    $nodes: {},
-    $page: null,
-    current: null,
-    createArray: [],
-    destoryArray: [],
-    mountedHandles: [],
-    componentNodes: {},
-  }
-
-  return RelationAst
-}
-function createNode(ctx) {
-  this.$self = ctx
-  ctx.$node = this
-  this.$id = id++
-  this.$children = []
-}
-
-createNode.prototype = {
-  getRootNode() {
-    const ctx = this.$self
-    const cacheId = ctx.$page ? ctx.$page.$id : ctx.$id
-
-    return astCache[cacheId]
-  },
-  setParent(parent) {
-    this.$parent = parent
-    parent.appendChild(this)
-  },
-  appendChildren() {
-    this.$children
-      .forEach((child) => {
-        this.appendChild(child)
-      })
-  },
-  destory() {
-    const index = this.$relationNode.$index
-    this.$parent.$children.splice(index, 1)
-  },
-  appendChild(child) {
-    this.$children.push(child)
-    child.$parent = this
-  },
-  removeChld(child) {
-    this.$children = this.$children
-      .filter((el) => {
-        return el.$id !== child.$id
-      })
-  },
-}
-
-
-module.exports = function(node, cb = () => {}, relationNode, bool = false, _bool = false) {
-  let RelationAst = {}
-  const cacheId = this.$page ? this.$page.$id : this.$id
-  if (_bool) {
-    return astCache[cacheId]
-  }
-    
-  if (bool || !astCache[cacheId]) {
-    astCache[cacheId] = createAstData()
-    return astCache[cacheId]
-  }
-  let _relationData = {}
-  function initData(isComponent = false) {
-    let _ctx = this
-    _relationData = createAstData()
-    if (isComponent) {
-      _ctx = this.$page
-    }
-    _ctx.$antmove = _ctx.$antmove || {}
-    _ctx.$antmove.relationData = _relationData
-    _ctx.$antmove.astCache = astCache
-  }
-  if (!this.$page) {
-    initData.call(this)
-  } else {
-    if (!this.$page.$antmove
-            || !this.$page.$antmove.relationData) {
-      initData.call(this, true)
-    }
-    _relationData = this.$page.$antmove.relationData
-    astCache = this.$page.$antmove.astCache
-  }
-
-  RelationAst = astCache[cacheId]
-  const wrapNode = new createNode(node)
-  const route = relationNode.$route
-
-  RelationAst.$page = wrapNode
-
-  /**
-       * component
-       */
-  wrapNode.$relationNode = relationNode
-  RelationAst.$nodes[node.$id] = wrapNode
-  RelationAst.$refNodes[route] = RelationAst.$refNodes[route] || {}
-  const componentNodes = RelationAst.$refNodes[route]
-  RelationAst.$refNodes[route][relationNode.$id] = RelationAst.$refNodes[route][relationNode.$id] || []
-  componentNodes[relationNode.$id].push(wrapNode)
-
-  if (RelationAst.isPageReady) {
-    setTimeout(() => {
-      connectNodes(wrapNode, RelationAst)
-      RelationAst.mountedHandles
-        .forEach((fn, i) => {
-          if (wrapNode.$parent) {
-            fn()
-          } else {
-            setTimeout(() => {
-              fn()
-            }, 0)
-          }
-        })
-      RelationAst.mountedHandles = []
-    }, 0)
-  }
-  cb && cb(RelationAst)
-  return RelationAst
-}

+ 0 - 81
src/ttcomponents/out/$polyfill/component/classSubdirectory/selectComponent.js

@@ -1,81 +0,0 @@
-function selectComponent(ctx) {
-  this.$ctx = ctx
-  this.$nodes = {}
-  this.$cacheNodes = {}
-}
-
-selectComponent.prototype = {
-  _addComponentNode(className, ctx) {
-    className = `.${className}`
-    const componentNodes = this.$nodes
-    if (componentNodes[className]) {
-      componentNodes[className].push(ctx)
-    } else {
-      componentNodes[className] = [ctx]
-    }
-    this.$cacheNodes[ctx.$id] = { className }
-  },
-  addComponentNodeId(id, ctx) {
-    id = `#${id}`
-    const componentNodes = this.$nodes
-    if (componentNodes[id]) {
-      componentNodes[id].push(ctx)
-    } else {
-      componentNodes[id] = [ctx]
-    }
-    this.$cacheNodes[ctx.$id] = { id }
-  },
-  addComponentNode(className = '', ctx) {
-    const classNameArray = className.split(/\s+/g)
-    classNameArray.forEach((classNameStr) => {
-      this._addComponentNode(classNameStr, ctx)
-    })
-  },
-  selectComponent(className) {
-    const componentNodes = this.$nodes
-    return componentNodes[className] && componentNodes[className][0]
-  },
-  selectComponents(className) {
-    const componentNodes = this.$nodes
-    return componentNodes[className]
-  },
-  preProcesscomponents,
-  connect() {
-    const ctx = this.$ctx
-    const self = this
-    ctx.selectComponent = function(...p) {
-      if (self.selectComponent(...p) && self.selectComponent(...p)._this !== undefined) {
-        return self.selectComponent(...p)._this
-      }
-      return self.selectComponent(...p)
-    }
-    ctx.selectAllComponents = function(...p) {
-      const componentsArr = self.selectComponents(...p)
-      const newArr = []
-      componentsArr.forEach((item) => {
-        if (item._this !== undefined) {
-          newArr.push(item._this)
-        } else {
-          newArr.push(item)
-        }
-      })
-      return newArr
-    }
-  },
-}
-
-function preProcesscomponents(ctx) {
-  const selectorObj = this.$cacheNodes[ctx.$id]
-  selectorObj && Object.keys(selectorObj)
-    .forEach((item) => {
-      this.$nodes[item] = []
-    })
-  if (ctx.props.id) {
-    this.addComponentNodeId(ctx.props.id, ctx)
-  }
-  if (ctx.props.className) {
-    this.addComponentNode(ctx.props.className, ctx)
-  }
-}
-
-module.exports = selectComponent

+ 0 - 27
src/ttcomponents/out/$polyfill/component/classSubdirectory/utils.js

@@ -1,27 +0,0 @@
-module.exports = {
-  connectNodes: function connectNodes(node, ast) {
-    if (!node.$relationNode.$parent) { return false }
-    const parentNodeId = node.$relationNode.$parent.$id
-    const parentNodeRoute = node.$relationNode.$parent.$route
-    const index = node.$relationNode.$parent.$index
-    
-    const refNumbers = (node.$self.props.refNumbers && node.$self.props.refNumbers.length) || 1
-    
-    const parentArray = ast.$refNodes[parentNodeRoute][parentNodeId]
-    let parent = null
-    if (refNumbers > 1) {
-      parentArray.forEach((_parent) => {
-        if (_parent.$children.length !== refNumbers && !parent) {
-          parent = _parent
-          return true
-        }
-      })
-    } else {
-      parent = parentArray[0]
-    }
-    if (parent) {
-      node.setParent(parent)
-    }
-  },
-}
-

+ 0 - 31
src/ttcomponents/out/$polyfill/component/componentClass.js

@@ -1,31 +0,0 @@
-/**
- * type:0 missing
- * type:1 diff
- * 
- */
-const appTransformation = require('./classSubdirectory/app')
-const pageTransformation = require('./classSubdirectory/page')
-const componentTransformation = require('./classSubdirectory/component')
-
-module.exports = function processComponent(type = 'Component') {
-  const core = {
-    App(options = {}) {
-      const _opts = {}
-      appTransformation.processTransformationApp(_opts, options)
-      App(_opts)
-    },
-    Page(options = {}) {
-      const _opts = {}
-      pageTransformation.processTransformationPage(_opts, options)
-      Page(_opts)
-    },
-    Component(options = {}) {
-      const _opts = {}
-      componentTransformation.processTransformationComponent(_opts, options)
-            
-      Component(_opts)
-    },
-  }
-
-  return core[type]
-}

+ 0 - 1
src/ttcomponents/out/action-sheet/index.d.ts

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

+ 0 - 62
src/ttcomponents/out/action-sheet/index.js

@@ -1,62 +0,0 @@
-import { VantComponent } from "../common/component";
-import { button } from "../mixins/button";
-import { openType } from "../mixins/open-type";
-VantComponent({
-    mixins: [button, openType],
-    props: {
-        show: Boolean,
-        title: String,
-        cancelText: String,
-        description: String,
-        round: {
-            type: Boolean,
-            value: true
-        },
-        zIndex: {
-            type: Number,
-            value: 100
-        },
-        actions: {
-            type: Array,
-            value: []
-        },
-        overlay: {
-            type: Boolean,
-            value: true
-        },
-        closeOnClickOverlay: {
-            type: Boolean,
-            value: true
-        },
-        closeOnClickAction: {
-            type: Boolean,
-            value: true
-        },
-        safeAreaInsetBottom: {
-            type: Boolean,
-            value: true
-        }
-    },
-    methods: {
-        onSelect(event) {
-            const { index } = event.currentTarget.dataset;
-            const item = this.data.actions[index];
-            if (item && !item.disabled && !item.loading) {
-                this.$emit("select", item);
-                if (this.data.closeOnClickAction) {
-                    this.onClose();
-                }
-            }
-        },
-        onCancel() {
-            this.$emit("cancel");
-        },
-        onClose() {
-            this.$emit("close");
-        },
-        onClickOverlay() {
-            this.$emit("click-overlay");
-            this.onClose();
-        }
-    }
-});

+ 0 - 8
src/ttcomponents/out/action-sheet/index.json

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

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 101
src/ttcomponents/out/action-sheet/index.vue


+ 0 - 69
src/ttcomponents/out/action-sheet/index.wxml

@@ -1,69 +0,0 @@
-<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.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 }}"
-      bind:tap="onSelect"
-      bindgetuserinfo="bindGetUserInfo"
-      bindcontact="bindContact"
-      bindgetphonenumber="bindGetPhoneNumber"
-      binderror="bindError"
-      bindlaunchapp="bindLaunchApp"
-      bindopensetting="bindOpenSetting"
-      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>

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
src/ttcomponents/out/action-sheet/index.wxss


+ 0 - 1
src/ttcomponents/out/area/index.d.ts

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

+ 0 - 234
src/ttcomponents/out/area/index.js

@@ -1,234 +0,0 @@
-import { VantComponent } from "../common/component";
-import { pickerProps } from "../picker/shared";
-import { requestAnimationFrame } from "../common/utils";
-const EMPTY_CODE = "000000";
-VantComponent({
-    classes: ["active-class", "toolbar-class", "column-class"],
-    props: Object.assign(Object.assign({}, pickerProps), {
-        value: {
-            type: String,
-            observer(value) {
-                this.code = value;
-                this.setValues();
-            }
-        },
-        areaList: {
-            type: Object,
-            value: {},
-            observer: "setValues"
-        },
-        columnsNum: {
-            type: null,
-            value: 3
-        },
-        columnsPlaceholder: {
-            type: Array,
-            observer(val) {
-                this.setData({
-                    typeToColumnsPlaceholder: {
-                        province: val[0] || "",
-                        city: val[1] || "",
-                        county: val[2] || ""
-                    }
-                });
-            }
-        }
-    }),
-    data: {
-        columns: [{ values: [] }, { values: [] }, { values: [] }],
-        typeToColumnsPlaceholder: {}
-    },
-    mounted() {
-        requestAnimationFrame(() => {
-            this.setValues();
-        });
-    },
-    methods: {
-        getPicker() {
-            if (this.picker == null) {
-                this.picker = this.selectComponent(".van-area__picker");
-            }
-            return this.picker;
-        },
-        onCancel(event) {
-            this.emit("cancel", event.detail);
-        },
-        onConfirm(event) {
-            const { index } = event.detail;
-            let { value } = event.detail;
-            value = this.parseValues(value);
-            this.emit("confirm", { value, index });
-        },
-        emit(type, detail) {
-            detail.values = detail.value;
-            delete detail.value;
-            this.$emit(type, detail);
-        },
-        parseValues(values) {
-            const { columnsPlaceholder } = this.data;
-            return values.map((value, index) => {
-                if (
-                    value &&
-                    (!value.code || value.name === columnsPlaceholder[index])
-                ) {
-                    return Object.assign(Object.assign({}, value), {
-                        code: "",
-                        name: ""
-                    });
-                }
-                return value;
-            });
-        },
-        onChange(event) {
-            const { index, picker, value } = event.detail;
-            this.code = value[index].code;
-            this.setValues().then(() => {
-                this.$emit("change", {
-                    picker,
-                    values: this.parseValues(picker.getValues()),
-                    index
-                });
-            });
-        },
-        getConfig(type) {
-            const { areaList } = this.data;
-            return (areaList && areaList[`${type}_list`]) || {};
-        },
-        getList(type, code) {
-            if (type !== "province" && !code) {
-                return [];
-            }
-            const { typeToColumnsPlaceholder } = this.data;
-            const list = this.getConfig(type);
-            let result = Object.keys(list).map(code => ({
-                code,
-                name: list[code]
-            }));
-            if (code != null) {
-                // oversea code
-                if (code[0] === "9" && type === "city") {
-                    code = "9";
-                }
-                result = result.filter(item => item.code.indexOf(code) === 0);
-            }
-            if (typeToColumnsPlaceholder[type] && result.length) {
-                // set columns placeholder
-                const codeFill =
-                    type === "province"
-                        ? ""
-                        : type === "city"
-                        ? EMPTY_CODE.slice(2, 4)
-                        : EMPTY_CODE.slice(4, 6);
-                result.unshift({
-                    code: `${code}${codeFill}`,
-                    name: typeToColumnsPlaceholder[type]
-                });
-            }
-            return result;
-        },
-        getIndex(type, code) {
-            let compareNum = type === "province" ? 2 : type === "city" ? 4 : 6;
-            const list = this.getList(type, code.slice(0, compareNum - 2));
-            // oversea code
-            if (code[0] === "9" && type === "province") {
-                compareNum = 1;
-            }
-            code = code.slice(0, compareNum);
-            for (let i = 0; i < list.length; i++) {
-                if (list[i].code.slice(0, compareNum) === code) {
-                    return i;
-                }
-            }
-            return 0;
-        },
-        setValues() {
-            const picker = this.getPicker();
-            if (!picker) {
-                return;
-            }
-            let code = this.code || this.getDefaultCode();
-            const provinceList = this.getList("province");
-            const cityList = this.getList("city", code.slice(0, 2));
-            const stack = [];
-            const indexes = [];
-            const { columnsNum } = this.data;
-            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;
-                }
-            }
-            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(() => {})
-                .then(() => picker.setIndexes(indexes))
-                .catch(() => {});
-        },
-        getDefaultCode() {
-            const { columnsPlaceholder } = this.data;
-            if (columnsPlaceholder.length) {
-                return EMPTY_CODE;
-            }
-            const countyCodes = Object.keys(this.getConfig("county"));
-            if (countyCodes[0]) {
-                return countyCodes[0];
-            }
-            const cityCodes = Object.keys(this.getConfig("city"));
-            if (cityCodes[0]) {
-                return cityCodes[0];
-            }
-            return "";
-        },
-        getValues() {
-            const picker = this.getPicker();
-            if (!picker) {
-                return [];
-            }
-            return this.parseValues(
-                picker.getValues().filter(value => !!value)
-            );
-        },
-        getDetail() {
-            const values = this.getValues();
-            const area = {
-                code: "",
-                country: "",
-                province: "",
-                city: "",
-                county: ""
-            };
-            if (!values.length) {
-                return area;
-            }
-            const names = values.map(item => item.name);
-            area.code = values[values.length - 1].code;
-            if (area.code[0] === "9") {
-                area.country = names[1] || "";
-                area.province = names[2] || "";
-            } else {
-                area.province = names[0] || "";
-                area.city = names[1] || "";
-                area.county = names[2] || "";
-            }
-            return area;
-        },
-        reset(code) {
-            this.code = code || "";
-            return this.setValues();
-        }
-    }
-});

+ 0 - 6
src/ttcomponents/out/area/index.json

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

+ 0 - 246
src/ttcomponents/out/area/index.vue

@@ -1,246 +0,0 @@
-<template>
-<uni-shadow-root class="vant-area-index"><van-picker class="van-area__picker" active-class="active-class" toolbar-class="toolbar-class" column-class="column-class" show-toolbar 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" @change="onChange" @confirm="onConfirm" @cancel="onCancel"></van-picker></uni-shadow-root>
-</template>
-<wxs src="./index.wxs" module="computed"></wxs>
-<script>
-import VanPicker from '../picker/index.vue'
-global['__wxVueOptions'] = {components:{'van-picker': VanPicker}}
-
-global['__wxRoute'] = 'vant/area/index'
-import { VantComponent } from '../common/component';
-import { pickerProps } from '../picker/shared';
-import { requestAnimationFrame } from '../common/utils';
-const EMPTY_CODE = '000000';
-VantComponent({
-  classes: ['active-class', 'toolbar-class', 'column-class'],
-  props: Object.assign(Object.assign({}, pickerProps), {
-    value: {
-      type: String,
-      observer(value) {
-        this.code = value;
-        this.setValues();
-      },
-    },
-    areaList: {
-      type: Object,
-      value: {},
-      observer: 'setValues',
-    },
-    columnsNum: {
-      type: null,
-      value: 3,
-    },
-    columnsPlaceholder: {
-      type: Array,
-      observer(val) {
-        this.setData({
-          typeToColumnsPlaceholder: {
-            province: val[0] || '',
-            city: val[1] || '',
-            county: val[2] || '',
-          },
-        });
-      },
-    },
-  }),
-  data: {
-    columns: [{ values: [] }, { values: [] }, { values: [] }],
-    typeToColumnsPlaceholder: {},
-  },
-  mounted() {
-    requestAnimationFrame(() => {
-      this.setValues();
-    });
-  },
-  methods: {
-    getPicker() {
-      if (this.picker == null) {
-        this.picker = this.selectComponent('.van-area__picker');
-      }
-      return this.picker;
-    },
-    onCancel(event) {
-      this.emit('cancel', event.detail);
-    },
-    onConfirm(event) {
-      const { index } = event.detail;
-      let { value } = event.detail;
-      value = this.parseValues(value);
-      this.emit('confirm', { value, index });
-    },
-    emit(type, detail) {
-      detail.values = detail.value;
-      delete detail.value;
-      this.$emit(type, detail);
-    },
-    parseValues(values) {
-      const { columnsPlaceholder } = this.data;
-      return values.map((value, index) => {
-        if (
-          value &&
-          (!value.code || value.name === columnsPlaceholder[index])
-        ) {
-          return Object.assign(Object.assign({}, value), {
-            code: '',
-            name: '',
-          });
-        }
-        return value;
-      });
-    },
-    onChange(event) {
-      const { index, picker, value } = event.detail;
-      this.code = value[index].code;
-      this.setValues().then(() => {
-        this.$emit('change', {
-          picker,
-          values: this.parseValues(picker.getValues()),
-          index,
-        });
-      });
-    },
-    getConfig(type) {
-      const { areaList } = this.data;
-      return (areaList && areaList[`${type}_list`]) || {};
-    },
-    getList(type, code) {
-      if (type !== 'province' && !code) {
-        return [];
-      }
-      const { typeToColumnsPlaceholder } = this.data;
-      const list = this.getConfig(type);
-      let result = Object.keys(list).map((code) => ({
-        code,
-        name: list[code],
-      }));
-      if (code != null) {
-        // oversea code
-        if (code[0] === '9' && type === 'city') {
-          code = '9';
-        }
-        result = result.filter((item) => item.code.indexOf(code) === 0);
-      }
-      if (typeToColumnsPlaceholder[type] && result.length) {
-        // set columns placeholder
-        const codeFill =
-          type === 'province'
-            ? ''
-            : type === 'city'
-            ? EMPTY_CODE.slice(2, 4)
-            : EMPTY_CODE.slice(4, 6);
-        result.unshift({
-          code: `${code}${codeFill}`,
-          name: typeToColumnsPlaceholder[type],
-        });
-      }
-      return result;
-    },
-    getIndex(type, code) {
-      let compareNum = type === 'province' ? 2 : type === 'city' ? 4 : 6;
-      const list = this.getList(type, code.slice(0, compareNum - 2));
-      // oversea code
-      if (code[0] === '9' && type === 'province') {
-        compareNum = 1;
-      }
-      code = code.slice(0, compareNum);
-      for (let i = 0; i < list.length; i++) {
-        if (list[i].code.slice(0, compareNum) === code) {
-          return i;
-        }
-      }
-      return 0;
-    },
-    setValues() {
-      const picker = this.getPicker();
-      if (!picker) {
-        return;
-      }
-      let code = this.code || this.getDefaultCode();
-      const provinceList = this.getList('province');
-      const cityList = this.getList('city', code.slice(0, 2));
-      const stack = [];
-      const indexes = [];
-      const { columnsNum } = this.data;
-      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;
-        }
-      }
-      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(() => {})
-        .then(() => picker.setIndexes(indexes))
-        .catch(() => {});
-    },
-    getDefaultCode() {
-      const { columnsPlaceholder } = this.data;
-      if (columnsPlaceholder.length) {
-        return EMPTY_CODE;
-      }
-      const countyCodes = Object.keys(this.getConfig('county'));
-      if (countyCodes[0]) {
-        return countyCodes[0];
-      }
-      const cityCodes = Object.keys(this.getConfig('city'));
-      if (cityCodes[0]) {
-        return cityCodes[0];
-      }
-      return '';
-    },
-    getValues() {
-      const picker = this.getPicker();
-      if (!picker) {
-        return [];
-      }
-      return this.parseValues(picker.getValues().filter((value) => !!value));
-    },
-    getDetail() {
-      const values = this.getValues();
-      const area = {
-        code: '',
-        country: '',
-        province: '',
-        city: '',
-        county: '',
-      };
-      if (!values.length) {
-        return area;
-      }
-      const names = values.map((item) => item.name);
-      area.code = values[values.length - 1].code;
-      if (area.code[0] === '9') {
-        area.country = names[1] || '';
-        area.province = names[2] || '';
-      } else {
-        area.province = names[0] || '';
-        area.city = names[1] || '';
-        area.county = names[2] || '';
-      }
-      return area;
-    },
-    reset(code) {
-      this.code = code || '';
-      return this.setValues();
-    },
-  },
-});
-export default global['__wxComponents']['vant/area/index']
-</script>
-<style platform="mp-weixin">
-@import '../common/index.css';
-</style>

+ 0 - 20
src/ttcomponents/out/area/index.wxml

@@ -1,20 +0,0 @@
-<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
-  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"
-/>

+ 0 - 8
src/ttcomponents/out/area/index.wxs

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

+ 0 - 1
src/ttcomponents/out/area/index.wxss

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

+ 0 - 1
src/ttcomponents/out/button/index.d.ts

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

+ 0 - 58
src/ttcomponents/out/button/index.js

@@ -1,58 +0,0 @@
-import { VantComponent } from "../common/component";
-import { button } from "../mixins/button";
-import { openType } from "../mixins/open-type";
-import { canIUseFormFieldButton } from "../common/version";
-const mixins = [button, openType];
-if (canIUseFormFieldButton()) {
-    mixins.push("wx://form-field-button");
-}
-VantComponent({
-    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() {
-            if (!this.data.loading) {
-                this.$emit("click");
-            }
-        },
-        noop() {}
-    }
-});

+ 0 - 7
src/ttcomponents/out/button/index.json

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

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 84
src/ttcomponents/out/button/index.vue


+ 0 - 53
src/ttcomponents/out/button/index.wxml

@@ -1,53 +0,0 @@
-<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 ? '' : 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 ? 'onClick' : 'noop' }}"
-  bindgetuserinfo="bindGetUserInfo"
-  bindcontact="bindContact"
-  bindgetphonenumber="bindGetPhoneNumber"
-  binderror="bindError"
-  bindlaunchapp="bindLaunchApp"
-  bindopensetting="bindOpenSetting"
->
-  <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>

+ 0 - 39
src/ttcomponents/out/button/index.wxs

@@ -1,39 +0,0 @@
-/* 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,
-};

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
src/ttcomponents/out/button/index.wxss


+ 0 - 37
src/ttcomponents/out/calendar/calendar.vue

@@ -1,37 +0,0 @@
-<template>
-<uni-shadow-root class="vant-calendar-calendar"><view class="van-calendar">
-  <header :title="title" :showTitle="showTitle" :subtitle="subtitle" :showSubtitle="showSubtitle">
-    <slot name="title" slot="title"></slot>
-  </header>
-
-  <scroll-view class="van-calendar__body" scroll-y :scroll-into-view="scrollIntoView">
-    <month v-for="(item,index) in (computed.getMonths(minDate, maxDate))" :key="item.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" @click="onClickDay"></month>
-  </scroll-view>
-
-  <view :class="utils.bem('calendar__footer', { safeAreaInsetBottom })">
-    <slot name="footer"></slot>
-  </view>
-
-  <view :class="utils.bem('calendar__footer', { safeAreaInsetBottom })">
-    <van-button v-if="showConfirm" round block type="danger" :color="color" custom-class="van-calendar__confirm" :disabled="computed.getButtonDisabled(type, currentDate)" nativeType="text" @click="onConfirm">
-      {{
-        computed.getButtonDisabled(type, currentDate)
-          ? confirmDisabledText
-          : confirmText
-      }}
-    </van-button>
-  </view>
-</view></uni-shadow-root>
-</template>
-
-<script>
-
-global['__wxRoute'] = 'vant/calendar/calendar'
-
-Component({})
-
-export default global['__wxComponents']['vant/calendar/calendar']
-</script>
-<style platform="mp-weixin">
-
-</style>

+ 0 - 65
src/ttcomponents/out/calendar/calendar.wxml

@@ -1,65 +0,0 @@
-<view class="van-calendar">
-  <header
-    title="{{ title }}"
-    showTitle="{{ showTitle }}"
-    subtitle="{{ subtitle }}"
-    showSubtitle="{{ showSubtitle }}"
-  >
-    <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 }}"
-      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>

+ 0 - 1
src/ttcomponents/out/calendar/components/header/index.d.ts

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

+ 0 - 16
src/ttcomponents/out/calendar/components/header/index.js

@@ -1,16 +0,0 @@
-import { VantComponent } from "../../../common/component";
-VantComponent({
-    props: {
-        title: {
-            type: String,
-            value: "日期选择"
-        },
-        subtitle: String,
-        showTitle: Boolean,
-        showSubtitle: Boolean
-    },
-    data: {
-        weekdays: ["日", "一", "二", "三", "四", "五", "六"]
-    },
-    methods: {}
-});

+ 0 - 3
src/ttcomponents/out/calendar/components/header/index.json

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

+ 0 - 43
src/ttcomponents/out/calendar/components/header/index.vue

@@ -1,43 +0,0 @@
-<template>
-<uni-shadow-root class="vant-calendar-components-header-index"><view class="van-calendar__header">
-  <block v-if="showTitle">
-    <view class="van-calendar__header-title"><slot name="title"></slot></view>
-    <view class="van-calendar__header-title">{{ title }}</view>
-  </block>
-
-  <view v-if="showSubtitle" class="van-calendar__header-subtitle">
-    {{ subtitle }}
-  </view>
-
-  <view class="van-calendar__weekdays">
-    <view v-for="(item,index) in (weekdays)" :key="item.index" class="van-calendar__weekday">
-      {{ item }}
-    </view>
-  </view>
-</view></uni-shadow-root>
-</template>
-
-<script>
-
-global['__wxRoute'] = 'vant/calendar/components/header/index'
-import { VantComponent } from '../../../common/component';
-VantComponent({
-  props: {
-    title: {
-      type: String,
-      value: '日期选择',
-    },
-    subtitle: String,
-    showTitle: Boolean,
-    showSubtitle: Boolean,
-  },
-  data: {
-    weekdays: ['日', '一', '二', '三', '四', '五', '六'],
-  },
-  methods: {},
-});
-export default global['__wxComponents']['vant/calendar/components/header/index']
-</script>
-<style platform="mp-weixin">
-@import '../../../common/index.css';.van-calendar__header{-webkit-flex-shrink:0;flex-shrink:0;box-shadow:0 2px 10px rgba(125,126,128,.16);box-shadow:var(--calendar-header-box-shadow,0 2px 10px rgba(125,126,128,.16))}.van-calendar__header-subtitle,.van-calendar__header-title{text-align:center;height:44px;height:var(--calendar-header-title-height,44px);font-weight:500;font-weight:var(--font-weight-bold,500);line-height:44px;line-height:var(--calendar-header-title-height,44px)}.van-calendar__header-title+.van-calendar__header-title,.van-calendar__header-title:empty{display:none}.van-calendar__header-title:empty+.van-calendar__header-title{display:block!important}.van-calendar__weekdays{display:-webkit-flex;display:flex}.van-calendar__weekday{-webkit-flex:1;flex:1;text-align:center;font-size:12px;font-size:var(--calendar-weekdays-font-size,12px);line-height:30px;line-height:var(--calendar-weekdays-height,30px)}
-</style>

+ 0 - 16
src/ttcomponents/out/calendar/components/header/index.wxml

@@ -1,16 +0,0 @@
-<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">
-    {{ subtitle }}
-  </view>
-
-  <view class="van-calendar__weekdays">
-    <view wx:for="{{ weekdays }}" wx:key="index" class="van-calendar__weekday">
-      {{ item }}
-    </view>
-  </view>
-</view>

+ 0 - 1
src/ttcomponents/out/calendar/components/header/index.wxss

@@ -1 +0,0 @@
-@import '../../../common/index.wxss';.van-calendar__header{-webkit-flex-shrink:0;flex-shrink:0;box-shadow:0 2px 10px rgba(125,126,128,.16);box-shadow:var(--calendar-header-box-shadow,0 2px 10px rgba(125,126,128,.16))}.van-calendar__header-subtitle,.van-calendar__header-title{text-align:center;height:44px;height:var(--calendar-header-title-height,44px);font-weight:500;font-weight:var(--font-weight-bold,500);line-height:44px;line-height:var(--calendar-header-title-height,44px)}.van-calendar__header-title+.van-calendar__header-title,.van-calendar__header-title:empty{display:none}.van-calendar__header-title:empty+.van-calendar__header-title{display:block!important}.van-calendar__weekdays{display:-webkit-flex;display:flex}.van-calendar__weekday{-webkit-flex:1;flex:1;text-align:center;font-size:12px;font-size:var(--calendar-weekdays-font-size,12px);line-height:30px;line-height:var(--calendar-weekdays-height,30px)}

+ 0 - 1
src/ttcomponents/out/calendar/components/month/index.d.ts

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

+ 0 - 157
src/ttcomponents/out/calendar/components/month/index.js

@@ -1,157 +0,0 @@
-import { VantComponent } from "../../../common/component";
-import {
-    getMonthEndDay,
-    compareDay,
-    getPrevDay,
-    getNextDay
-} from "../../utils";
-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"
-        },
-        allowSameDay: Boolean,
-        showSubtitle: Boolean,
-        showMonthTitle: Boolean
-    },
-    data: {
-        visible: true,
-        days: []
-    },
-    methods: {
-        onClick(event) {
-            const { index } = event.currentTarget.dataset;
-            const item = this.data.days[index];
-            if (item.type !== "disabled") {
-                this.$emit("click", item);
-            }
-        },
-        setDays() {
-            const days = [];
-            const startDate = new Date(this.data.date);
-            const year = startDate.getFullYear();
-            const month = startDate.getMonth();
-            const totalDay = getMonthEndDay(
-                startDate.getFullYear(),
-                startDate.getMonth() + 1
-            );
-            for (let day = 1; day <= totalDay; day++) {
-                const date = new Date(year, month, day);
-                const type = this.getDayType(date);
-                let config = {
-                    date,
-                    type,
-                    text: day,
-                    bottomInfo: this.getBottomInfo(type)
-                };
-                if (this.data.formatter) {
-                    config = this.data.formatter(config);
-                }
-                days.push(config);
-            }
-            this.setData({ days });
-        },
-        getMultipleDayType(day) {
-            const { currentDate } = this.data;
-            if (!Array.isArray(currentDate)) {
-                return "";
-            }
-            const isSelected = date =>
-                currentDate.some(item => compareDay(item, date) === 0);
-            if (isSelected(day)) {
-                const prevDay = getPrevDay(day);
-                const nextDay = getNextDay(day);
-                const prevSelected = isSelected(prevDay);
-                const nextSelected = isSelected(nextDay);
-                if (prevSelected && nextSelected) {
-                    return "multiple-middle";
-                }
-                if (prevSelected) {
-                    return "end";
-                }
-                return nextSelected ? "start" : "multiple-selected";
-            }
-            return "";
-        },
-        getRangeDayType(day) {
-            const { currentDate, allowSameDay } = this.data;
-            if (!Array.isArray(currentDate)) {
-                return;
-            }
-            const [startDay, endDay] = currentDate;
-            if (!startDay) {
-                return;
-            }
-            const compareToStart = compareDay(day, startDay);
-            if (!endDay) {
-                return compareToStart === 0 ? "start" : "";
-            }
-            const compareToEnd = 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";
-            }
-        },
-        getDayType(day) {
-            const { type, minDate, maxDate, currentDate } = this.data;
-            if (compareDay(day, minDate) < 0 || compareDay(day, maxDate) > 0) {
-                return "disabled";
-            }
-            if (type === "single") {
-                return compareDay(day, currentDate) === 0 ? "selected" : "";
-            }
-            if (type === "multiple") {
-                return this.getMultipleDayType(day);
-            }
-            /* istanbul ignore else */
-            if (type === "range") {
-                return this.getRangeDayType(day);
-            }
-        },
-        getBottomInfo(type) {
-            if (this.data.type === "range") {
-                if (type === "start") {
-                    return "开始";
-                }
-                if (type === "end") {
-                    return "结束";
-                }
-                if (type === "start-end") {
-                    return "开始/结束";
-                }
-            }
-        }
-    }
-});

+ 0 - 3
src/ttcomponents/out/calendar/components/month/index.json

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

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 195
src/ttcomponents/out/calendar/components/month/index.vue


+ 0 - 39
src/ttcomponents/out/calendar/components/month/index.wxml

@@ -1,39 +0,0 @@
-<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) }}"
-      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="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>

+ 0 - 67
src/ttcomponents/out/calendar/components/month/index.wxs

@@ -1,67 +0,0 @@
-/* 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) {
-  var style = [];
-  var offset = getDate(date).getDay();
-
-  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 === '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
-};

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
src/ttcomponents/out/calendar/components/month/index.wxss


+ 0 - 1
src/ttcomponents/out/calendar/index.d.ts

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

+ 0 - 303
src/ttcomponents/out/calendar/index.js

@@ -1,303 +0,0 @@
-import { VantComponent } from "../common/component";
-import {
-    ROW_HEIGHT,
-    getNextDay,
-    compareDay,
-    copyDates,
-    calcDateNum,
-    formatMonthTitle,
-    compareMonth,
-    getMonths,
-    getDayByOffset
-} from "./utils";
-import Toast from "../toast/toast";
-import { requestAnimationFrame } from "../common/utils";
-VantComponent({
-    props: {
-        title: {
-            type: String,
-            value: "日期选择"
-        },
-        color: String,
-        show: {
-            type: Boolean,
-            observer(val) {
-                if (val) {
-                    this.initRect();
-                    this.scrollIntoView();
-                }
-            }
-        },
-        formatter: null,
-        confirmText: {
-            type: String,
-            value: "确定"
-        },
-        rangePrompt: String,
-        defaultDate: {
-            type: null,
-            observer(val) {
-                this.setData({ currentDate: val });
-                this.scrollIntoView();
-            }
-        },
-        allowSameDay: Boolean,
-        confirmDisabledText: String,
-        type: {
-            type: String,
-            value: "single",
-            observer: "reset"
-        },
-        minDate: {
-            type: null,
-            value: Date.now()
-        },
-        maxDate: {
-            type: null,
-            value: new Date(
-                new Date().getFullYear(),
-                new Date().getMonth() + 6,
-                new Date().getDate()
-            ).getTime()
-        },
-        position: {
-            type: String,
-            value: "bottom"
-        },
-        rowHeight: {
-            type: null,
-            value: 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
-        }
-    },
-    data: {
-        subtitle: "",
-        currentDate: null,
-        scrollIntoView: ""
-    },
-    created() {
-        this.setData({
-            currentDate: this.getInitialDate()
-        });
-    },
-    mounted() {
-        if (this.data.show || !this.data.poppable) {
-            this.initRect();
-            this.scrollIntoView();
-        }
-    },
-    methods: {
-        reset() {
-            this.setData({ currentDate: this.getInitialDate() });
-            this.scrollIntoView();
-        },
-        initRect() {
-            if (this.contentObserver != null) {
-                this.contentObserver.disconnect();
-            }
-            const contentObserver = this.createIntersectionObserver({
-                thresholds: [0, 0.1, 0.9, 1],
-                observeAll: true
-            });
-            this.contentObserver = contentObserver;
-            contentObserver.relativeTo(".van-calendar__body");
-            contentObserver.observe(".month", res => {
-                if (res.boundingClientRect.top <= res.relativeRect.top) {
-                    // @ts-ignore
-                    this.setData({
-                        subtitle: formatMonthTitle(res.dataset.date)
-                    });
-                }
-            });
-        },
-        getInitialDate() {
-            const { type, defaultDate, minDate } = this.data;
-            if (type === "range") {
-                const [startDay, endDay] = defaultDate || [];
-                return [
-                    startDay || minDate,
-                    endDay || getNextDay(new Date(minDate)).getTime()
-                ];
-            }
-            if (type === "multiple") {
-                return defaultDate || [minDate];
-            }
-            return defaultDate || minDate;
-        },
-        scrollIntoView() {
-            requestAnimationFrame(() => {
-                const {
-                    currentDate,
-                    type,
-                    show,
-                    poppable,
-                    minDate,
-                    maxDate
-                } = this.data;
-                // @ts-ignore
-                const targetDate =
-                    type === "single" ? currentDate : currentDate[0];
-                const displayed = show || !poppable;
-                if (!targetDate || !displayed) {
-                    return;
-                }
-                const months = getMonths(minDate, maxDate);
-                months.some((month, index) => {
-                    if (compareMonth(month, targetDate) === 0) {
-                        this.setData({ scrollIntoView: `month${index}` });
-                        return true;
-                    }
-                    return false;
-                });
-            });
-        },
-        onOpen() {
-            this.$emit("open");
-        },
-        onOpened() {
-            this.$emit("opened");
-        },
-        onClose() {
-            this.$emit("close");
-        },
-        onClosed() {
-            this.$emit("closed");
-        },
-        onClickDay(event) {
-            const { date } = event.detail;
-            const { type, currentDate, allowSameDay } = this.data;
-            if (type === "range") {
-                // @ts-ignore
-                const [startDay, endDay] = currentDate;
-                if (startDay && !endDay) {
-                    const compareToStart = compareDay(date, startDay);
-                    if (compareToStart === 1) {
-                        this.select([startDay, 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") {
-                let selectedIndex;
-                // @ts-ignore
-                const selected = currentDate.some((dateItem, index) => {
-                    const equal = compareDay(dateItem, date) === 0;
-                    if (equal) {
-                        selectedIndex = index;
-                    }
-                    return equal;
-                });
-                if (selected) {
-                    // @ts-ignore
-                    const cancelDate = currentDate.splice(selectedIndex, 1);
-                    this.setData({ currentDate });
-                    this.unselect(cancelDate);
-                } else {
-                    // @ts-ignore
-                    this.select([...currentDate, date]);
-                }
-            } else {
-                this.select(date, true);
-            }
-        },
-        unselect(dateArray) {
-            const date = dateArray[0];
-            if (date) {
-                this.$emit("unselect", copyDates(date));
-            }
-        },
-        select(date, complete) {
-            if (complete && this.data.type === "range") {
-                const valid = this.checkRange(date);
-                if (!valid) {
-                    // auto selected to max range if showConfirm
-                    if (this.data.showConfirm) {
-                        this.emit([
-                            date[0],
-                            getDayByOffset(date[0], this.data.maxRange - 1)
-                        ]);
-                    } else {
-                        this.emit(date);
-                    }
-                    return;
-                }
-            }
-            this.emit(date);
-            if (complete && !this.data.showConfirm) {
-                this.onConfirm();
-            }
-        },
-        emit(date) {
-            const getTime = date =>
-                date instanceof Date ? date.getTime() : date;
-            this.setData({
-                currentDate: Array.isArray(date)
-                    ? date.map(getTime)
-                    : getTime(date)
-            });
-            this.$emit("select", copyDates(date));
-        },
-        checkRange(date) {
-            const { maxRange, rangePrompt } = this.data;
-            if (maxRange && calcDateNum(date) > maxRange) {
-                Toast({
-                    context: this,
-                    message: rangePrompt || `选择天数不能超过 ${maxRange} 天`
-                });
-                return false;
-            }
-            return true;
-        },
-        onConfirm() {
-            if (
-                this.data.type === "range" &&
-                !this.checkRange(this.data.currentDate)
-            ) {
-                return;
-            }
-            setTimeout(() => {
-                // @ts-ignore
-                this.$emit("confirm", copyDates(this.data.currentDate));
-            });
-        }
-    }
-});

+ 0 - 10
src/ttcomponents/out/calendar/index.json

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

+ 0 - 325
src/ttcomponents/out/calendar/index.vue

@@ -1,325 +0,0 @@
-<template>
-<uni-shadow-root class="vant-calendar-index"><van-popup v-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" @enter="onOpen" @close="onClose" @after-enter="onOpened" @after-leave="onClosed">
-  <include src="calendar.wxml"></include>
-</van-popup>
-
-<include v-else src="calendar.wxml"></include>
-
-<van-toast id="van-toast"></van-toast></uni-shadow-root>
-</template>
-<wxs src="./index.wxs" module="computed"></wxs><wxs src="../wxs/utils.wxs" module="utils"></wxs>
-<script>
-
-const __wxTemplateComponentProps = {}
-import __wxTemplateComponent0 from './calendar.vue'
-
-import Header from './components/header/index.vue'
-import Month from './components/month/index.vue'
-import VanButton from '../button/index.vue'
-import VanPopup from '../popup/index.vue'
-import VanToast from '../toast/index.vue'
-global['__wxVueOptions'] = {components:{'header': Header,'month': Month,'van-button': VanButton,'van-popup': VanPopup,'van-toast': VanToast,}}
-
-global['__wxRoute'] = 'vant/calendar/index'
-import { VantComponent } from '../common/component';
-import {
-  ROW_HEIGHT,
-  getNextDay,
-  compareDay,
-  copyDates,
-  calcDateNum,
-  formatMonthTitle,
-  compareMonth,
-  getMonths,
-  getDayByOffset,
-} from './utils';
-import Toast from '../toast/toast';
-import { requestAnimationFrame } from '../common/utils';
-VantComponent({
-  props: {
-    title: {
-      type: String,
-      value: '日期选择',
-    },
-    color: String,
-    show: {
-      type: Boolean,
-      observer(val) {
-        if (val) {
-          this.initRect();
-          this.scrollIntoView();
-        }
-      },
-    },
-    formatter: null,
-    confirmText: {
-      type: String,
-      value: '确定',
-    },
-    rangePrompt: String,
-    defaultDate: {
-      type: null,
-      observer(val) {
-        this.setData({ currentDate: val });
-        this.scrollIntoView();
-      },
-    },
-    allowSameDay: Boolean,
-    confirmDisabledText: String,
-    type: {
-      type: String,
-      value: 'single',
-      observer: 'reset',
-    },
-    minDate: {
-      type: null,
-      value: Date.now(),
-    },
-    maxDate: {
-      type: null,
-      value: new Date(
-        new Date().getFullYear(),
-        new Date().getMonth() + 6,
-        new Date().getDate()
-      ).getTime(),
-    },
-    position: {
-      type: String,
-      value: 'bottom',
-    },
-    rowHeight: {
-      type: null,
-      value: 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,
-    },
-  },
-  data: {
-    subtitle: '',
-    currentDate: null,
-    scrollIntoView: '',
-  },
-  created() {
-    this.setData({
-      currentDate: this.getInitialDate(),
-    });
-  },
-  mounted() {
-    if (this.data.show || !this.data.poppable) {
-      this.initRect();
-      this.scrollIntoView();
-    }
-  },
-  methods: {
-    reset() {
-      this.setData({ currentDate: this.getInitialDate() });
-      this.scrollIntoView();
-    },
-    initRect() {
-      if (this.contentObserver != null) {
-        this.contentObserver.disconnect();
-      }
-      const contentObserver = this.createIntersectionObserver({
-        thresholds: [0, 0.1, 0.9, 1],
-        observeAll: true,
-      });
-      this.contentObserver = contentObserver;
-      contentObserver.relativeTo('.van-calendar__body');
-      contentObserver.observe('.month', (res) => {
-        if (res.boundingClientRect.top <= res.relativeRect.top) {
-          // @ts-ignore
-          this.setData({ subtitle: formatMonthTitle(res.dataset.date) });
-        }
-      });
-    },
-    getInitialDate() {
-      const { type, defaultDate, minDate } = this.data;
-      if (type === 'range') {
-        const [startDay, endDay] = defaultDate || [];
-        return [
-          startDay || minDate,
-          endDay || getNextDay(new Date(minDate)).getTime(),
-        ];
-      }
-      if (type === 'multiple') {
-        return defaultDate || [minDate];
-      }
-      return defaultDate || minDate;
-    },
-    scrollIntoView() {
-      requestAnimationFrame(() => {
-        const {
-          currentDate,
-          type,
-          show,
-          poppable,
-          minDate,
-          maxDate,
-        } = this.data;
-        // @ts-ignore
-        const targetDate = type === 'single' ? currentDate : currentDate[0];
-        const displayed = show || !poppable;
-        if (!targetDate || !displayed) {
-          return;
-        }
-        const months = getMonths(minDate, maxDate);
-        months.some((month, index) => {
-          if (compareMonth(month, targetDate) === 0) {
-            this.setData({ scrollIntoView: `month${index}` });
-            return true;
-          }
-          return false;
-        });
-      });
-    },
-    onOpen() {
-      this.$emit('open');
-    },
-    onOpened() {
-      this.$emit('opened');
-    },
-    onClose() {
-      this.$emit('close');
-    },
-    onClosed() {
-      this.$emit('closed');
-    },
-    onClickDay(event) {
-      const { date } = event.detail;
-      const { type, currentDate, allowSameDay } = this.data;
-      if (type === 'range') {
-        // @ts-ignore
-        const [startDay, endDay] = currentDate;
-        if (startDay && !endDay) {
-          const compareToStart = compareDay(date, startDay);
-          if (compareToStart === 1) {
-            this.select([startDay, 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') {
-        let selectedIndex;
-        // @ts-ignore
-        const selected = currentDate.some((dateItem, index) => {
-          const equal = compareDay(dateItem, date) === 0;
-          if (equal) {
-            selectedIndex = index;
-          }
-          return equal;
-        });
-        if (selected) {
-          // @ts-ignore
-          const cancelDate = currentDate.splice(selectedIndex, 1);
-          this.setData({ currentDate });
-          this.unselect(cancelDate);
-        } else {
-          // @ts-ignore
-          this.select([...currentDate, date]);
-        }
-      } else {
-        this.select(date, true);
-      }
-    },
-    unselect(dateArray) {
-      const date = dateArray[0];
-      if (date) {
-        this.$emit('unselect', copyDates(date));
-      }
-    },
-    select(date, complete) {
-      if (complete && this.data.type === 'range') {
-        const valid = this.checkRange(date);
-        if (!valid) {
-          // auto selected to max range if showConfirm
-          if (this.data.showConfirm) {
-            this.emit([
-              date[0],
-              getDayByOffset(date[0], this.data.maxRange - 1),
-            ]);
-          } else {
-            this.emit(date);
-          }
-          return;
-        }
-      }
-      this.emit(date);
-      if (complete && !this.data.showConfirm) {
-        this.onConfirm();
-      }
-    },
-    emit(date) {
-      const getTime = (date) => (date instanceof Date ? date.getTime() : date);
-      this.setData({
-        currentDate: Array.isArray(date) ? date.map(getTime) : getTime(date),
-      });
-      this.$emit('select', copyDates(date));
-    },
-    checkRange(date) {
-      const { maxRange, rangePrompt } = this.data;
-      if (maxRange && calcDateNum(date) > maxRange) {
-        Toast({
-          context: this,
-          message: rangePrompt || `选择天数不能超过 ${maxRange} 天`,
-        });
-        return false;
-      }
-      return true;
-    },
-    onConfirm() {
-      if (
-        this.data.type === 'range' &&
-        !this.checkRange(this.data.currentDate)
-      ) {
-        return;
-      }
-      setTimeout(() => {
-        // @ts-ignore
-        this.$emit('confirm', copyDates(this.data.currentDate));
-      });
-    },
-  },
-});
-export default global['__wxComponents']['vant/calendar/index']
-</script>
-<style platform="mp-weixin">
-@import '../common/index.css';.van-calendar{display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;height:100%;height:var(--calendar-height,100%);background-color:#fff;background-color:var(--calendar-background-color,#fff)}.van-calendar__close-icon{top:11px}.van-calendar__popup--bottom,.van-calendar__popup--top{height:80%;height:var(--calendar-popup-height,80%)}.van-calendar__popup--left,.van-calendar__popup--right{height:100%}.van-calendar__body{-webkit-flex:1;flex:1;overflow:auto;-webkit-overflow-scrolling:touch}.van-calendar__footer{-webkit-flex-shrink:0;flex-shrink:0;padding:0 16px;padding:0 var(--padding-md,16px)}.van-calendar__footer--safe-area-inset-bottom{padding-bottom:env(safe-area-inset-bottom)}.van-calendar__footer+.van-calendar__footer,.van-calendar__footer:empty{display:none}.van-calendar__footer:empty+.van-calendar__footer{display:block!important}.van-calendar__confirm{height:36px!important;height:var(--calendar-confirm-button-height,36px)!important;margin:7px 0!important;margin:var(--calendar-confirm-button-margin,7px 0)!important;line-height:34px!important;line-height:var(--calendar-confirm-button-line-height,34px)!important}
-</style>

+ 0 - 25
src/ttcomponents/out/calendar/index.wxml

@@ -1,25 +0,0 @@
-<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" />

+ 0 - 37
src/ttcomponents/out/calendar/index.wxs

@@ -1,37 +0,0 @@
-/* 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
-};

+ 0 - 1
src/ttcomponents/out/calendar/index.wxss

@@ -1 +0,0 @@
-@import '../common/index.wxss';.van-calendar{display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;height:100%;height:var(--calendar-height,100%);background-color:#fff;background-color:var(--calendar-background-color,#fff)}.van-calendar__close-icon{top:11px}.van-calendar__popup--bottom,.van-calendar__popup--top{height:80%;height:var(--calendar-popup-height,80%)}.van-calendar__popup--left,.van-calendar__popup--right{height:100%}.van-calendar__body{-webkit-flex:1;flex:1;overflow:auto;-webkit-overflow-scrolling:touch}.van-calendar__footer{-webkit-flex-shrink:0;flex-shrink:0;padding:0 16px;padding:0 var(--padding-md,16px)}.van-calendar__footer--safe-area-inset-bottom{padding-bottom:env(safe-area-inset-bottom)}.van-calendar__footer+.van-calendar__footer,.van-calendar__footer:empty{display:none}.van-calendar__footer:empty+.van-calendar__footer{display:block!important}.van-calendar__confirm{height:36px!important;height:var(--calendar-confirm-button-height,36px)!important;margin:7px 0!important;margin:var(--calendar-confirm-button-margin,7px 0)!important;line-height:34px!important;line-height:var(--calendar-confirm-button-line-height,34px)!important}

+ 0 - 17
src/ttcomponents/out/calendar/utils.d.ts

@@ -1,17 +0,0 @@
-export declare const ROW_HEIGHT = 64;
-export declare function formatMonthTitle(date: Date): string;
-export declare function compareMonth(
-  date1: Date | number,
-  date2: Date | number
-): 0 | 1 | -1;
-export declare function compareDay(
-  day1: Date | number,
-  day2: Date | number
-): 0 | 1 | -1;
-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 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[];

+ 0 - 78
src/ttcomponents/out/calendar/utils.js

@@ -1,78 +0,0 @@
-export const ROW_HEIGHT = 64;
-export function formatMonthTitle(date) {
-    if (!(date instanceof Date)) {
-        date = new Date(date);
-    }
-    return `${date.getFullYear()}年${date.getMonth() + 1}月`;
-}
-export function compareMonth(date1, date2) {
-    if (!(date1 instanceof Date)) {
-        date1 = new Date(date1);
-    }
-    if (!(date2 instanceof Date)) {
-        date2 = new Date(date2);
-    }
-    const year1 = date1.getFullYear();
-    const year2 = date2.getFullYear();
-    const month1 = date1.getMonth();
-    const month2 = date2.getMonth();
-    if (year1 === year2) {
-        return month1 === month2 ? 0 : month1 > month2 ? 1 : -1;
-    }
-    return year1 > year2 ? 1 : -1;
-}
-export function compareDay(day1, day2) {
-    if (!(day1 instanceof Date)) {
-        day1 = new Date(day1);
-    }
-    if (!(day2 instanceof Date)) {
-        day2 = new Date(day2);
-    }
-    const compareMonthResult = compareMonth(day1, day2);
-    if (compareMonthResult === 0) {
-        const date1 = day1.getDate();
-        const date2 = day2.getDate();
-        return date1 === date2 ? 0 : date1 > date2 ? 1 : -1;
-    }
-    return compareMonthResult;
-}
-export function getDayByOffset(date, offset) {
-    date = new Date(date);
-    date.setDate(date.getDate() + offset);
-    return date;
-}
-export function getPrevDay(date) {
-    return getDayByOffset(date, -1);
-}
-export function getNextDay(date) {
-    return getDayByOffset(date, 1);
-}
-export function calcDateNum(date) {
-    const day1 = new Date(date[0]).getTime();
-    const day2 = new Date(date[1]).getTime();
-    return (day2 - day1) / (1000 * 60 * 60 * 24) + 1;
-}
-export function copyDates(dates) {
-    if (Array.isArray(dates)) {
-        return dates.map(date => {
-            if (date === null) {
-                return date;
-            }
-            return new Date(date);
-        });
-    }
-    return new Date(dates);
-}
-export function getMonthEndDay(year, month) {
-    return 32 - new Date(year, month - 1, 32).getDate();
-}
-export function getMonths(minDate, maxDate) {
-    const months = [];
-    const cursor = new Date(minDate);
-    cursor.setDate(1);
-    do {
-        months.push(cursor.getTime());
-        cursor.setMonth(cursor.getMonth() + 1);
-    } while (compareMonth(cursor, maxDate) !== 1);
-    return months;
-}

+ 0 - 25
src/ttcomponents/out/calendar/utils.wxs

@@ -1,25 +0,0 @@
-/* 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
-};

+ 0 - 1
src/ttcomponents/out/card/index.d.ts

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

+ 0 - 49
src/ttcomponents/out/card/index.js

@@ -1,49 +0,0 @@
-import { link } from "../mixins/link";
-import { VantComponent } from "../common/component";
-VantComponent({
-    classes: [
-        "num-class",
-        "desc-class",
-        "thumb-class",
-        "title-class",
-        "price-class",
-        "origin-price-class"
-    ],
-    mixins: [link],
-    props: {
-        tag: String,
-        num: String,
-        desc: String,
-        thumb: String,
-        title: String,
-        price: {
-            type: String,
-            observer: "updatePrice"
-        },
-        centered: Boolean,
-        lazyLoad: Boolean,
-        thumbLink: String,
-        originPrice: String,
-        thumbMode: {
-            type: String,
-            value: "aspectFit"
-        },
-        currency: {
-            type: String,
-            value: "¥"
-        }
-    },
-    methods: {
-        updatePrice() {
-            const { price } = this.data;
-            const priceArr = price.toString().split(".");
-            this.setData({
-                integerStr: priceArr[0],
-                decimalStr: priceArr[1] ? `.${priceArr[1]}` : ""
-            });
-        },
-        onClickThumb() {
-            this.jumpLink("thumbLink");
-        }
-    }
-});

+ 0 - 6
src/ttcomponents/out/card/index.json

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

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 103
src/ttcomponents/out/card/index.vue


+ 0 - 56
src/ttcomponents/out/card/index.wxml

@@ -1,56 +0,0 @@
-<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>

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
src/ttcomponents/out/card/index.wxss


+ 0 - 1
src/ttcomponents/out/cell-group/index.d.ts

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

+ 0 - 10
src/ttcomponents/out/cell-group/index.js

@@ -1,10 +0,0 @@
-import { VantComponent } from "../common/component";
-VantComponent({
-    props: {
-        title: String,
-        border: {
-            type: Boolean,
-            value: true
-        }
-    }
-});

+ 0 - 3
src/ttcomponents/out/cell-group/index.json

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

+ 0 - 27
src/ttcomponents/out/cell-group/index.vue

@@ -1,27 +0,0 @@
-<template>
-<uni-shadow-root class="vant-cell-group-index"><view v-if="title" class="van-cell-group__title">
-  {{ title }}
-</view>
-<view :class="'custom-class van-cell-group '+(border ? 'van-hairline--top-bottom' : '')">
-  <slot></slot>
-</view></uni-shadow-root>
-</template>
-
-<script>
-
-global['__wxRoute'] = 'vant/cell-group/index'
-import { VantComponent } from '../common/component';
-VantComponent({
-  props: {
-    title: String,
-    border: {
-      type: Boolean,
-      value: true,
-    },
-  },
-});
-export default global['__wxComponents']['vant/cell-group/index']
-</script>
-<style platform="mp-weixin">
-@import '../common/index.css';.van-cell-group__title{padding:16px 16px 8px;padding:var(--cell-group-title-padding,16px 16px 8px);font-size:14px;font-size:var(--cell-group-title-font-size,14px);line-height:16px;line-height:var(--cell-group-title-line-height,16px);color:#969799;color:var(--cell-group-title-color,#969799)}
-</style>

+ 0 - 9
src/ttcomponents/out/cell-group/index.wxml

@@ -1,9 +0,0 @@
-<view
-  wx:if="{{ title }}"
-  class="van-cell-group__title"
->
-  {{ title }}
-</view>
-<view class="custom-class van-cell-group {{ border ? 'van-hairline--top-bottom' : '' }}">
-  <slot />
-</view>

+ 0 - 1
src/ttcomponents/out/cell-group/index.wxss

@@ -1 +0,0 @@
-@import '../common/index.wxss';.van-cell-group__title{padding:16px 16px 8px;padding:var(--cell-group-title-padding,16px 16px 8px);font-size:14px;font-size:var(--cell-group-title-font-size,14px);line-height:16px;line-height:var(--cell-group-title-line-height,16px);color:#969799;color:var(--cell-group-title-color,#969799)}

+ 0 - 1
src/ttcomponents/out/cell/index.d.ts

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

+ 0 - 38
src/ttcomponents/out/cell/index.js

@@ -1,38 +0,0 @@
-import { link } from "../mixins/link";
-import { VantComponent } from "../common/component";
-VantComponent({
-    classes: [
-        "title-class",
-        "label-class",
-        "value-class",
-        "right-icon-class",
-        "hover-class"
-    ],
-    mixins: [link],
-    props: {
-        title: null,
-        value: null,
-        icon: String,
-        size: String,
-        label: String,
-        center: Boolean,
-        isLink: Boolean,
-        required: Boolean,
-        clickable: Boolean,
-        titleWidth: String,
-        customStyle: String,
-        arrowDirection: String,
-        useLabelSlot: Boolean,
-        border: {
-            type: Boolean,
-            value: true
-        },
-        titleStyle: String
-    },
-    methods: {
-        onClick(event) {
-            this.$emit("click", event.detail);
-            this.jumpLink();
-        }
-    }
-});

+ 0 - 6
src/ttcomponents/out/cell/index.json

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

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 73
src/ttcomponents/out/cell/index.vue


+ 0 - 46
src/ttcomponents/out/cell/index.wxml

@@ -1,46 +0,0 @@
-<wxs src="../wxs/utils.wxs" module="utils" />
-<wxs src="./index.wxs" module="computed" />
-
-<view
-  class="custom-class {{ utils.bem('cell', [size, { center, required, borderless: !border, clickable: isLink || clickable }]) }}"
-  hover-class="van-cell--hover hover-class"
-  hover-stay-time="70"
-  style="{{ customStyle }}"
-  bind:tap="onClick"
->
-  <van-icon
-    wx:if="{{ icon }}"
-    name="{{ icon }}"
-    class="van-cell__left-icon-wrap"
-    custom-class="van-cell__left-icon"
-  />
-  <slot wx:else name="icon" />
-
-  <view
-    style="{{ computed.titleStyle({ titleWidth, titleStyle }) }}"
-    class="van-cell__title title-class"
-  >
-    <block wx:if="{{ title }}">{{ title }}</block>
-    <slot wx:else name="title" />
-
-    <view wx:if="{{ label || useLabelSlot }}" class="van-cell__label label-class">
-      <slot wx:if="{{ useLabelSlot }}" name="label" />
-      <block wx:elif="{{ label }}">{{ label }}</block>
-    </view>
-  </view>
-
-  <view class="van-cell__value value-class">
-    <block wx:if="{{ value || value === 0 }}">{{ value }}</block>
-    <slot wx:else />
-  </view>
-
-  <van-icon
-    wx:if="{{ isLink }}"
-    name="{{ arrowDirection ? 'arrow' + '-' + arrowDirection : 'arrow' }}"
-    class="van-cell__right-icon-wrap right-icon-class"
-    custom-class="van-cell__right-icon"
-  />
-  <slot wx:else name="right-icon" />
-
-  <slot name="extra" />
-</view>

+ 0 - 17
src/ttcomponents/out/cell/index.wxs

@@ -1,17 +0,0 @@
-/* eslint-disable */
-var style = require('../wxs/style.wxs');
-var addUnit = require('../wxs/add-unit.wxs');
-
-function titleStyle(data) {
-  return style([
-    {
-      'max-width': addUnit(data.titleWidth),
-      'min-width': addUnit(data.titleWidth),
-    },
-    data.titleStyle,
-  ]);
-}
-
-module.exports = {
-  titleStyle: titleStyle,
-};

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
src/ttcomponents/out/cell/index.wxss


+ 0 - 1
src/ttcomponents/out/checkbox-group/index.d.ts

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

+ 0 - 31
src/ttcomponents/out/checkbox-group/index.js

@@ -1,31 +0,0 @@
-import { useChildren } from "../common/relation";
-import { VantComponent } from "../common/component";
-VantComponent({
-    field: true,
-    relation: useChildren("checkbox", function(target) {
-        this.updateChild(target);
-    }),
-    props: {
-        max: Number,
-        value: {
-            type: Array,
-            observer: "updateChildren"
-        },
-        disabled: {
-            type: Boolean,
-            observer: "updateChildren"
-        }
-    },
-    methods: {
-        updateChildren() {
-            this.children.forEach(child => this.updateChild(child));
-        },
-        updateChild(child) {
-            const { value, disabled } = this.data;
-            child.setData({
-                value: value.indexOf(child.data.name) !== -1,
-                parentDisabled: disabled
-            });
-        }
-    }
-});

+ 0 - 3
src/ttcomponents/out/checkbox-group/index.json

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

+ 0 - 43
src/ttcomponents/out/checkbox-group/index.vue

@@ -1,43 +0,0 @@
-<template>
-<uni-shadow-root class="vant-checkbox-group-index"><slot></slot></uni-shadow-root>
-</template>
-
-<script>
-
-global['__wxRoute'] = 'vant/checkbox-group/index'
-import { useChildren } from '../common/relation';
-import { VantComponent } from '../common/component';
-VantComponent({
-  field: true,
-  relation: useChildren('checkbox', function (target) {
-    this.updateChild(target);
-  }),
-  props: {
-    max: Number,
-    value: {
-      type: Array,
-      observer: 'updateChildren',
-    },
-    disabled: {
-      type: Boolean,
-      observer: 'updateChildren',
-    },
-  },
-  methods: {
-    updateChildren() {
-      this.children.forEach((child) => this.updateChild(child));
-    },
-    updateChild(child) {
-      const { value, disabled } = this.data;
-      child.setData({
-        value: value.indexOf(child.data.name) !== -1,
-        parentDisabled: disabled,
-      });
-    },
-  },
-});
-export default global['__wxComponents']['vant/checkbox-group/index']
-</script>
-<style platform="mp-weixin">
-@import '../common/index.css';
-</style>

+ 0 - 1
src/ttcomponents/out/checkbox-group/index.wxml

@@ -1 +0,0 @@
-<slot />

+ 0 - 1
src/ttcomponents/out/checkbox-group/index.wxss

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

+ 0 - 1
src/ttcomponents/out/checkbox/index.d.ts

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

+ 0 - 79
src/ttcomponents/out/checkbox/index.js

@@ -1,79 +0,0 @@
-import { useParent } from "../common/relation";
-import { VantComponent } from "../common/component";
-function emit(target, value) {
-    target.$emit("input", value);
-    target.$emit("change", value);
-}
-VantComponent({
-    field: true,
-    relation: useParent("checkbox-group"),
-    classes: ["icon-class", "label-class"],
-    props: {
-        value: Boolean,
-        disabled: Boolean,
-        useIconSlot: Boolean,
-        checkedColor: String,
-        labelPosition: {
-            type: String,
-            value: "right"
-        },
-        labelDisabled: Boolean,
-        shape: {
-            type: String,
-            value: "round"
-        },
-        iconSize: {
-            type: null,
-            value: 20
-        }
-    },
-    data: {
-        parentDisabled: false
-    },
-    methods: {
-        emitChange(value) {
-            if (this.parent) {
-                this.setParentValue(this.parent, value);
-            } else {
-                emit(this, value);
-            }
-        },
-        toggle() {
-            const { parentDisabled, disabled, value } = this.data;
-            if (!disabled && !parentDisabled) {
-                this.emitChange(!value);
-            }
-        },
-        onClickLabel() {
-            const {
-                labelDisabled,
-                parentDisabled,
-                disabled,
-                value
-            } = this.data;
-            if (!disabled && !labelDisabled && !parentDisabled) {
-                this.emitChange(!value);
-            }
-        },
-        setParentValue(parent, value) {
-            const parentValue = parent.data.value.slice();
-            const { name } = this.data;
-            const { max } = parent.data;
-            if (value) {
-                if (max && parentValue.length >= max) {
-                    return;
-                }
-                if (parentValue.indexOf(name) === -1) {
-                    parentValue.push(name);
-                    emit(parent, parentValue);
-                }
-            } else {
-                const index = parentValue.indexOf(name);
-                if (index !== -1) {
-                    parentValue.splice(index, 1);
-                    emit(parent, parentValue);
-                }
-            }
-        }
-    }
-});

+ 0 - 6
src/ttcomponents/out/checkbox/index.json

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

+ 0 - 99
src/ttcomponents/out/checkbox/index.vue

@@ -1,99 +0,0 @@
-<template>
-<uni-shadow-root class="vant-checkbox-index"><view class="van-checkbox custom-class">
-  <view v-if="labelPosition === 'left'" :class="'label-class '+(utils.bem('checkbox__label', [labelPosition, { disabled: disabled || parentDisabled }]))" @click="onClickLabel">
-    <slot></slot>
-  </view>
-  <view class="van-checkbox__icon-wrap" @click="toggle">
-    <slot v-if="useIconSlot" name="icon"></slot>
-    <van-icon v-else name="success" size="0.8em" :class="utils.bem('checkbox__icon', [shape, { disabled: disabled || parentDisabled, checked: value }])" :style="computed.iconStyle(checkedColor, value, disabled, parentDisabled, iconSize)" custom-class="icon-class" custom-style="line-height: 1.25em;"></van-icon>
-  </view>
-  <view v-if="labelPosition === 'right'" :class="'label-class '+(utils.bem('checkbox__label', [labelPosition, { disabled: disabled || parentDisabled }]))" @click="onClickLabel">
-    <slot></slot>
-  </view>
-</view></uni-shadow-root>
-</template>
-<wxs src="../wxs/utils.wxs" module="utils"></wxs><wxs src="./index.wxs" module="computed"></wxs>
-<script>
-import VanIcon from '../icon/index.vue'
-global['__wxVueOptions'] = {components:{'van-icon': VanIcon}}
-
-global['__wxRoute'] = 'vant/checkbox/index'
-import { useParent } from '../common/relation';
-import { VantComponent } from '../common/component';
-function emit(target, value) {
-  target.$emit('input', value);
-  target.$emit('change', value);
-}
-VantComponent({
-  field: true,
-  relation: useParent('checkbox-group'),
-  classes: ['icon-class', 'label-class'],
-  props: {
-    value: Boolean,
-    disabled: Boolean,
-    useIconSlot: Boolean,
-    checkedColor: String,
-    labelPosition: {
-      type: String,
-      value: 'right',
-    },
-    labelDisabled: Boolean,
-    shape: {
-      type: String,
-      value: 'round',
-    },
-    iconSize: {
-      type: null,
-      value: 20,
-    },
-  },
-  data: {
-    parentDisabled: false,
-  },
-  methods: {
-    emitChange(value) {
-      if (this.parent) {
-        this.setParentValue(this.parent, value);
-      } else {
-        emit(this, value);
-      }
-    },
-    toggle() {
-      const { parentDisabled, disabled, value } = this.data;
-      if (!disabled && !parentDisabled) {
-        this.emitChange(!value);
-      }
-    },
-    onClickLabel() {
-      const { labelDisabled, parentDisabled, disabled, value } = this.data;
-      if (!disabled && !labelDisabled && !parentDisabled) {
-        this.emitChange(!value);
-      }
-    },
-    setParentValue(parent, value) {
-      const parentValue = parent.data.value.slice();
-      const { name } = this.data;
-      const { max } = parent.data;
-      if (value) {
-        if (max && parentValue.length >= max) {
-          return;
-        }
-        if (parentValue.indexOf(name) === -1) {
-          parentValue.push(name);
-          emit(parent, parentValue);
-        }
-      } else {
-        const index = parentValue.indexOf(name);
-        if (index !== -1) {
-          parentValue.splice(index, 1);
-          emit(parent, parentValue);
-        }
-      }
-    },
-  },
-});
-export default global['__wxComponents']['vant/checkbox/index']
-</script>
-<style platform="mp-weixin">
-@import '../common/index.css';.van-checkbox{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;overflow:hidden;-webkit-user-select:none;user-select:none}.van-checkbox__icon-wrap,.van-checkbox__label{line-height:20px;line-height:var(--checkbox-size,20px)}.van-checkbox__icon-wrap{-webkit-flex:none;flex:none}.van-checkbox__icon{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;box-sizing:border-box;width:1em;height:1em;color:transparent;text-align:center;transition-property:color,border-color,background-color;font-size:20px;font-size:var(--checkbox-size,20px);border:1px solid #c8c9cc;border:1px solid var(--checkbox-border-color,#c8c9cc);transition-duration:.2s;transition-duration:var(--checkbox-transition-duration,.2s)}.van-checkbox__icon--round{border-radius:100%}.van-checkbox__icon--checked{color:#fff;color:var(--white,#fff);background-color:#1989fa;background-color:var(--checkbox-checked-icon-color,#1989fa);border-color:#1989fa;border-color:var(--checkbox-checked-icon-color,#1989fa)}.van-checkbox__icon--disabled{background-color:#ebedf0;background-color:var(--checkbox-disabled-background-color,#ebedf0);border-color:#c8c9cc;border-color:var(--checkbox-disabled-icon-color,#c8c9cc)}.van-checkbox__icon--disabled.van-checkbox__icon--checked{color:#c8c9cc;color:var(--checkbox-disabled-icon-color,#c8c9cc)}.van-checkbox__label{word-wrap:break-word;margin-left:10px;margin-left:var(--checkbox-label-margin,10px);color:#323233;color:var(--checkbox-label-color,#323233)}.van-checkbox__label--left{float:left;margin:0 10px 0 0;margin:0 var(--checkbox-label-margin,10px) 0 0}.van-checkbox__label--disabled{color:#c8c9cc;color:var(--checkbox-disabled-label-color,#c8c9cc)}.van-checkbox__label:empty{margin:0}
-</style>

+ 0 - 31
src/ttcomponents/out/checkbox/index.wxml

@@ -1,31 +0,0 @@
-<wxs src="../wxs/utils.wxs" module="utils" />
-<wxs src="./index.wxs" module="computed" />
-
-<view class="van-checkbox custom-class">
-  <view
-    wx:if="{{ labelPosition === 'left' }}"
-    class="label-class {{ utils.bem('checkbox__label', [labelPosition, { disabled: disabled || parentDisabled }]) }}"
-    bindtap="onClickLabel"
-  >
-    <slot />
-  </view>
-  <view class="van-checkbox__icon-wrap" bindtap="toggle">
-    <slot wx:if="{{ useIconSlot }}" name="icon" />
-    <van-icon
-      wx:else
-      name="success"
-      size="0.8em"
-      class="{{ utils.bem('checkbox__icon', [shape, { disabled: disabled || parentDisabled, checked: value }]) }}"
-      style="{{ computed.iconStyle(checkedColor, value, disabled, parentDisabled, iconSize) }}"
-      custom-class="icon-class"
-      custom-style="line-height: 1.25em;"
-    />
-  </view>
-  <view
-    wx:if="{{ labelPosition === 'right' }}"
-    class="label-class {{ utils.bem('checkbox__label', [labelPosition, { disabled: disabled || parentDisabled }]) }}"
-    bindtap="onClickLabel"
-  >
-    <slot />
-  </view>
-</view>

+ 0 - 20
src/ttcomponents/out/checkbox/index.wxs

@@ -1,20 +0,0 @@
-/* eslint-disable */
-var style = require('../wxs/style.wxs');
-var addUnit = require('../wxs/add-unit.wxs');
-
-function iconStyle(checkedColor, value, disabled, parentDisabled, iconSize) {
-  var styles = {
-    'font-size': addUnit(iconSize),
-  };
-
-  if (checkedColor && value && !disabled && !parentDisabled) {
-    styles['border-color'] = checkedColor;
-    styles['background-color'] = checkedColor;
-  }
-
-  return style(styles);
-}
-
-module.exports = {
-  iconStyle: iconStyle,
-};

+ 0 - 1
src/ttcomponents/out/checkbox/index.wxss

@@ -1 +0,0 @@
-@import '../common/index.wxss';.van-checkbox{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;overflow:hidden;-webkit-user-select:none;user-select:none}.van-checkbox__icon-wrap,.van-checkbox__label{line-height:20px;line-height:var(--checkbox-size,20px)}.van-checkbox__icon-wrap{-webkit-flex:none;flex:none}.van-checkbox__icon{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;box-sizing:border-box;width:1em;height:1em;color:transparent;text-align:center;transition-property:color,border-color,background-color;font-size:20px;font-size:var(--checkbox-size,20px);border:1px solid #c8c9cc;border:1px solid var(--checkbox-border-color,#c8c9cc);transition-duration:.2s;transition-duration:var(--checkbox-transition-duration,.2s)}.van-checkbox__icon--round{border-radius:100%}.van-checkbox__icon--checked{color:#fff;color:var(--white,#fff);background-color:#1989fa;background-color:var(--checkbox-checked-icon-color,#1989fa);border-color:#1989fa;border-color:var(--checkbox-checked-icon-color,#1989fa)}.van-checkbox__icon--disabled{background-color:#ebedf0;background-color:var(--checkbox-disabled-background-color,#ebedf0);border-color:#c8c9cc;border-color:var(--checkbox-disabled-icon-color,#c8c9cc)}.van-checkbox__icon--disabled.van-checkbox__icon--checked{color:#c8c9cc;color:var(--checkbox-disabled-icon-color,#c8c9cc)}.van-checkbox__label{word-wrap:break-word;margin-left:10px;margin-left:var(--checkbox-label-margin,10px);color:#323233;color:var(--checkbox-label-color,#323233)}.van-checkbox__label--left{float:left;margin:0 10px 0 0;margin:0 var(--checkbox-label-margin,10px) 0 0}.van-checkbox__label--disabled{color:#c8c9cc;color:var(--checkbox-disabled-label-color,#c8c9cc)}.van-checkbox__label:empty{margin:0}

이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.