瀏覽代碼

引入支付宝版本的vant

zhangyujun 3 年之前
父節點
當前提交
83143021e0
共有 100 個文件被更改,包括 477 次插入6778 次删除
  1. 296 86
      package-lock.json
  2. 3 0
      package.json
  3. 7 2
      src/App.vue
  4. 17 39
      src/pages.json
  5. 3 3
      src/pages/carVideo/index.vue
  6. 0 439
      src/ttcomponents/button.vue
  7. 0 58
      src/ttcomponents/cell-group.vue
  8. 0 320
      src/ttcomponents/cell.vue
  9. 1 0
      src/ttcomponents/common/demo.js
  10. 6 0
      src/ttcomponents/common/demo.json
  11. 1 0
      src/ttcomponents/common/demo.ttml
  12. 2 0
      src/ttcomponents/common/demo.ttss
  13. 0 174
      src/ttcomponents/common/index.css
  14. 0 0
      src/ttcomponents/dashboard/index.js
  15. 6 0
      src/ttcomponents/dashboard/index.json
  16. 1 0
      src/ttcomponents/dashboard/index.ttml
  17. 1 0
      src/ttcomponents/dashboard/index.ttss
  18. 0 99
      src/ttcomponents/empty.vue
  19. 0 594
      src/ttcomponents/field.vue
  20. 0 126
      src/ttcomponents/icon.vue
  21. 0 92
      src/ttcomponents/info.vue
  22. 0 194
      src/ttcomponents/loading.vue
  23. 0 216
      src/ttcomponents/nav-bar.vue
  24. 0 62
      src/ttcomponents/overlay.vue
  25. 0 288
      src/ttcomponents/popup.vue
  26. 0 115
      src/ttcomponents/price.vue
  27. 0 156
      src/ttcomponents/result.vue
  28. 0 18
      src/ttcomponents/sass/_function.scss
  29. 0 3
      src/ttcomponents/sass/_index.scss
  30. 0 47
      src/ttcomponents/sass/_mixins.scss
  31. 0 235
      src/ttcomponents/sass/_variables.scss
  32. 0 935
      src/ttcomponents/sass/font.scss
  33. 0 43
      src/ttcomponents/sass/hariline.scss
  34. 0 157
      src/ttcomponents/skeleton.vue
  35. 0 204
      src/ttcomponents/sticky.vue
  36. 0 284
      src/ttcomponents/swiper-dot.vue
  37. 0 132
      src/ttcomponents/tab.vue
  38. 0 526
      src/ttcomponents/tabs.vue
  39. 0 198
      src/ttcomponents/tag.vue
  40. 0 116
      src/ttcomponents/transition.vue
  41. 0 430
      src/ttcomponents/uploader.vue
  42. 0 12
      src/ttcomponents/utils/add_unit.js
  43. 0 36
      src/ttcomponents/utils/bem.js
  44. 0 16
      src/ttcomponents/utils/compute_style.js
  45. 0 13
      src/ttcomponents/utils/constants.js
  46. 0 4
      src/ttcomponents/utils/event_bus.js
  47. 0 15
      src/ttcomponents/utils/index.js
  48. 0 220
      src/ttcomponents/utils/mixins.js
  49. 0 37
      src/ttcomponents/utils/touch.js
  50. 0 29
      src/ttcomponents/utils/utils.js
  51. 0 0
      src/ttcomponents/van-action-sheet/demo.js
  52. 8 0
      src/ttcomponents/van-action-sheet/demo.json
  53. 0 0
      src/ttcomponents/van-action-sheet/demo.ttml
  54. 1 0
      src/ttcomponents/van-action-sheet/demo.ttss
  55. 0 0
      src/ttcomponents/van-action-sheet/van-action-sheet.js
  56. 8 0
      src/ttcomponents/van-action-sheet/van-action-sheet.json
  57. 0 0
      src/ttcomponents/van-action-sheet/van-action-sheet.ttml
  58. 15 0
      src/ttcomponents/van-action-sheet/van-action-sheet.ttss
  59. 1 0
      src/ttcomponents/van-button/demo.js
  60. 7 0
      src/ttcomponents/van-button/demo.json
  61. 0 0
      src/ttcomponents/van-button/demo.ttml
  62. 1 0
      src/ttcomponents/van-button/demo.ttss
  63. 0 0
      src/ttcomponents/van-button/van-button.js
  64. 7 0
      src/ttcomponents/van-button/van-button.json
  65. 1 0
      src/ttcomponents/van-button/van-button.ttml
  66. 0 0
      src/ttcomponents/van-button/van-button.ttss
  67. 10 0
      src/ttcomponents/van-cell-group/van-cell-group.js
  68. 0 0
      src/ttcomponents/van-cell-group/van-cell-group.json
  69. 1 0
      src/ttcomponents/van-cell-group/van-cell-group.ttml
  70. 1 0
      src/ttcomponents/van-cell-group/van-cell-group.ttss
  71. 1 0
      src/ttcomponents/van-cell/demo.js
  72. 10 0
      src/ttcomponents/van-cell/demo.json
  73. 0 0
      src/ttcomponents/van-cell/demo.ttml
  74. 1 0
      src/ttcomponents/van-cell/demo.ttss
  75. 0 0
      src/ttcomponents/van-cell/van-cell.js
  76. 2 2
      src/ttcomponents/van-cell/van-cell.json
  77. 1 0
      src/ttcomponents/van-cell/van-cell.ttml
  78. 4 0
      src/ttcomponents/van-cell/van-cell.ttss
  79. 10 0
      src/ttcomponents/van-checkbox-group/van-checkbox-group.js
  80. 1 1
      src/ttcomponents/van-checkbox-group/van-checkbox-group.json
  81. 1 0
      src/ttcomponents/van-checkbox-group/van-checkbox-group.ttml
  82. 0 0
      src/ttcomponents/van-checkbox-group/van-checkbox-group.ttss
  83. 0 0
      src/ttcomponents/van-checkbox/demo.js
  84. 10 0
      src/ttcomponents/van-checkbox/demo.json
  85. 0 0
      src/ttcomponents/van-checkbox/demo.ttml
  86. 1 0
      src/ttcomponents/van-checkbox/demo.ttss
  87. 0 0
      src/ttcomponents/van-checkbox/van-checkbox.js
  88. 2 2
      src/ttcomponents/van-checkbox/van-checkbox.json
  89. 1 0
      src/ttcomponents/van-checkbox/van-checkbox.ttml
  90. 2 0
      src/ttcomponents/van-checkbox/van-checkbox.ttss
  91. 1 0
      src/ttcomponents/van-circle/demo.js
  92. 8 0
      src/ttcomponents/van-circle/demo.json
  93. 0 0
      src/ttcomponents/van-circle/demo.ttml
  94. 1 0
      src/ttcomponents/van-circle/demo.ttss
  95. 0 0
      src/ttcomponents/van-circle/van-circle.js
  96. 4 0
      src/ttcomponents/van-circle/van-circle.json
  97. 1 0
      src/ttcomponents/van-circle/van-circle.ttml
  98. 1 0
      src/ttcomponents/van-circle/van-circle.ttss
  99. 1 0
      src/ttcomponents/van-col/demo.js
  100. 8 0
      src/ttcomponents/van-col/demo.json

+ 296 - 86
package-lock.json

@@ -2740,6 +2740,11 @@
       "integrity": "sha1-3T5mmboyN/A0jNCF5GmHgCBIQvk=",
       "dev": true
     },
+    "@vant/icons": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/@vant/icons/-/icons-1.8.0.tgz",
+      "integrity": "sha512-sKfEUo2/CkQFuERxvkuF6mGQZDKu3IQdj5rV9Fm0weJXtchDSSQ+zt8qPCNUEhh9Y8shy5PzxbvAfOOkCwlCXg=="
+    },
     "@vue/babel-helper-vue-jsx-merge-props": {
       "version": "1.2.1",
       "resolved": "https://registry.npm.taobao.org/@vue/babel-helper-vue-jsx-merge-props/download/@vue/babel-helper-vue-jsx-merge-props-1.2.1.tgz?cache=0&sync_timestamp=1602851122331&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-helper-vue-jsx-merge-props%2Fdownload%2F%40vue%2Fbabel-helper-vue-jsx-merge-props-1.2.1.tgz",
@@ -3028,44 +3033,6 @@
           "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",
@@ -3082,13 +3049,6 @@
             "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",
@@ -3101,25 +3061,6 @@
           "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",
@@ -3134,28 +3075,6 @@
           "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"
-          }
         }
       }
     },
@@ -5441,6 +5360,15 @@
         }
       }
     },
+    "copy-anything": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz",
+      "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==",
+      "dev": true,
+      "requires": {
+        "is-what": "^3.14.1"
+      }
+    },
     "copy-concurrently": {
       "version": "1.0.5",
       "resolved": "https://registry.npm.taobao.org/copy-concurrently/download/copy-concurrently-1.0.5.tgz",
@@ -8076,6 +8004,13 @@
       "integrity": "sha1-Cpf7h2mG6AgcYxFg+PnziRV/AEM=",
       "dev": true
     },
+    "image-size": {
+      "version": "0.5.5",
+      "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
+      "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=",
+      "dev": true,
+      "optional": true
+    },
     "immediate": {
       "version": "3.0.6",
       "resolved": "https://registry.npm.taobao.org/immediate/download/immediate-3.0.6.tgz?cache=0&sync_timestamp=1591712625500&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fimmediate%2Fdownload%2Fimmediate-3.0.6.tgz",
@@ -8545,6 +8480,12 @@
       "resolved": "https://registry.npm.taobao.org/is-utf8/download/is-utf8-0.2.1.tgz",
       "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI="
     },
+    "is-what": {
+      "version": "3.14.1",
+      "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz",
+      "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==",
+      "dev": true
+    },
     "is-windows": {
       "version": "1.0.2",
       "resolved": "https://registry.npm.taobao.org/is-windows/download/is-windows-1.0.2.tgz",
@@ -10781,6 +10722,56 @@
         "launch-editor": "^2.2.1"
       }
     },
+    "less": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/less/-/less-4.1.2.tgz",
+      "integrity": "sha512-EoQp/Et7OSOVu0aJknJOtlXZsnr8XE8KwuzTHOLeVSEx8pVWUICc8Q0VYRHgzyjX78nMEyC/oztWFbgyhtNfDA==",
+      "dev": true,
+      "requires": {
+        "copy-anything": "^2.0.1",
+        "errno": "^0.1.1",
+        "graceful-fs": "^4.1.2",
+        "image-size": "~0.5.0",
+        "make-dir": "^2.1.0",
+        "mime": "^1.4.1",
+        "needle": "^2.5.2",
+        "parse-node-version": "^1.0.1",
+        "source-map": "~0.6.0",
+        "tslib": "^2.3.0"
+      },
+      "dependencies": {
+        "mime": {
+          "version": "1.6.0",
+          "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+          "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+          "dev": true,
+          "optional": true
+        },
+        "tslib": {
+          "version": "2.4.0",
+          "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
+          "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==",
+          "dev": true
+        }
+      }
+    },
+    "less-loader": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-5.0.0.tgz",
+      "integrity": "sha512-bquCU89mO/yWLaUq0Clk7qCsKhsF/TZpJUzETRvJa9KSVEL9SO3ovCvdEHISBhrC81OwC8QSVX7E0bzElZj9cg==",
+      "requires": {
+        "clone": "^2.1.1",
+        "loader-utils": "^1.1.0",
+        "pify": "^4.0.1"
+      },
+      "dependencies": {
+        "clone": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+          "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18="
+        }
+      }
+    },
     "leven": {
       "version": "3.1.0",
       "resolved": "https://registry.npm.taobao.org/leven/download/leven-3.1.0.tgz",
@@ -11445,6 +11436,30 @@
       "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
       "dev": true
     },
+    "needle": {
+      "version": "2.9.1",
+      "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz",
+      "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "debug": "^3.2.6",
+        "iconv-lite": "^0.4.4",
+        "sax": "^1.2.4"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.2.7",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+          "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        }
+      }
+    },
     "negotiator": {
       "version": "0.6.2",
       "resolved": "https://registry.npm.taobao.org/negotiator/download/negotiator-0.6.2.tgz?cache=0&sync_timestamp=1589682752355&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnegotiator%2Fdownload%2Fnegotiator-0.6.2.tgz",
@@ -12090,6 +12105,12 @@
         "lines-and-columns": "^1.1.6"
       }
     },
+    "parse-node-version": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz",
+      "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==",
+      "dev": true
+    },
     "parse5": {
       "version": "5.1.1",
       "resolved": "https://registry.npm.taobao.org/parse5/download/parse5-5.1.1.tgz",
@@ -14172,6 +14193,11 @@
       "dev": true,
       "optional": true
     },
+    "shvl": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/shvl/-/shvl-2.0.3.tgz",
+      "integrity": "sha512-V7C6S9Hlol6SzOJPnQ7qzOVEWUQImt3BNmmzh40wObhla3XOYMe4gGiYzLrJd5TFa+cI2f9LKIRJTTKZSTbWgw=="
+    },
     "side-channel": {
       "version": "1.0.4",
       "resolved": "https://registry.npm.taobao.org/side-channel/download/side-channel-1.0.4.tgz",
@@ -15606,6 +15632,95 @@
         "spdx-expression-parse": "^3.0.0"
       }
     },
+    "vant-weapp-convert-uniapp": {
+      "version": "0.1.0-alpha.17",
+      "resolved": "https://registry.npmjs.org/vant-weapp-convert-uniapp/-/vant-weapp-convert-uniapp-0.1.0-alpha.17.tgz",
+      "integrity": "sha512-DY6jOd3KFOY1fYoPiOlhGxLpYmvOivGSKyYTZbcuIq1jEreC/wIRm5lWVyhclp/zHHotoLz2nlHPOLU9jYRdZQ==",
+      "requires": {
+        "@dcloudio/uni-app-plus": "^2.0.0-alpha-29520201023001",
+        "@dcloudio/uni-h5": "^2.0.0-alpha-29520201023001",
+        "@dcloudio/uni-helper-json": "^1.0.7",
+        "@dcloudio/uni-mp-alipay": "^2.0.0-alpha-29520201023001",
+        "@dcloudio/uni-mp-baidu": "^2.0.0-alpha-29520201023001",
+        "@dcloudio/uni-mp-qq": "^2.0.0-alpha-29520201023001",
+        "@dcloudio/uni-mp-toutiao": "^2.0.0-alpha-29520201023001",
+        "@dcloudio/uni-mp-weixin": "^2.0.0-alpha-29520201023001",
+        "@dcloudio/uni-quickapp-native": "^2.0.0-alpha-29520201023001",
+        "@dcloudio/uni-quickapp-webview": "^2.0.0-alpha-29520201023001",
+        "@dcloudio/uni-stat": "^2.0.0-v3-24020191018001",
+        "@vant/icons": "^1.3.2",
+        "core-js": "^3.6.4",
+        "flyio": "^0.6.2",
+        "regenerator-runtime": "^0.12.1",
+        "shvl": "^2.0.1",
+        "vue": "^2.6.12",
+        "vuex": "^3.5.1"
+      },
+      "dependencies": {
+        "@dcloudio/uni-app-plus": {
+          "version": "2.0.0-alpha-33020211130001",
+          "resolved": "https://registry.npmjs.org/@dcloudio/uni-app-plus/-/uni-app-plus-2.0.0-alpha-33020211130001.tgz",
+          "integrity": "sha512-gVCeU0GM4fi3QzfhaHbXEweEndCsfD/GECLBI0tptxPtmOuK6ow7H26htHnDhOL6uncOaWDbYWow3/Zq6BZNBg=="
+        },
+        "@dcloudio/uni-h5": {
+          "version": "2.0.0-alpha-33020211130001",
+          "resolved": "https://registry.npmjs.org/@dcloudio/uni-h5/-/uni-h5-2.0.0-alpha-33020211130001.tgz",
+          "integrity": "sha512-eqUKOiz/YBjlge150SpyHGkXSZUnAYbfsGZXv8J+iwROto2sD0o9w+XxyU77R9RbdV7zg/HnmKIiW8zMy1ROuA==",
+          "requires": {
+            "base64-arraybuffer": "^0.2.0",
+            "intersection-observer": "^0.7.0",
+            "pako": "^1.0.11",
+            "safe-area-insets": "^1.4.1"
+          }
+        },
+        "@dcloudio/uni-mp-alipay": {
+          "version": "2.0.0-alpha-33020211130001",
+          "resolved": "https://registry.npmjs.org/@dcloudio/uni-mp-alipay/-/uni-mp-alipay-2.0.0-alpha-33020211130001.tgz",
+          "integrity": "sha512-PVRznonn+wwosPt/S/WhVPNoWtCJUVe4B6SOb2uWM57FPtUKb+CmoOSZ8gbcxNaZXQsDTTNQHPx2nbpC4dArRA=="
+        },
+        "@dcloudio/uni-mp-baidu": {
+          "version": "2.0.0-alpha-33020211130001",
+          "resolved": "https://registry.npmjs.org/@dcloudio/uni-mp-baidu/-/uni-mp-baidu-2.0.0-alpha-33020211130001.tgz",
+          "integrity": "sha512-OfDhOhnFFuy7bU8WXWDXHko2JWIcTQkdA1yz9gozFYAHQE1AZPtytW2a/XKjx9JggqkzSfqKcaiGJr847allmA=="
+        },
+        "@dcloudio/uni-mp-qq": {
+          "version": "2.0.0-alpha-33020211130001",
+          "resolved": "https://registry.npmjs.org/@dcloudio/uni-mp-qq/-/uni-mp-qq-2.0.0-alpha-33020211130001.tgz",
+          "integrity": "sha512-LAHsA/WiWo5bHtp3ofgGY3FtgbS3xcoclut8n04OamdU+Vqz6B+W1wUXKjrOKkKe3iQur4wG4TG+5DiGi0EUGA=="
+        },
+        "@dcloudio/uni-mp-toutiao": {
+          "version": "2.0.0-alpha-33020211130001",
+          "resolved": "https://registry.npmjs.org/@dcloudio/uni-mp-toutiao/-/uni-mp-toutiao-2.0.0-alpha-33020211130001.tgz",
+          "integrity": "sha512-SaUkFWX3g55njD5+DmIs5ugTF/WibjYr9XmPG5gvVnWjQh+iqOcWQw60r0bmcljHiinHeUGKXdXIDr9HVmzTzg=="
+        },
+        "@dcloudio/uni-mp-weixin": {
+          "version": "2.0.0-alpha-33020211130001",
+          "resolved": "https://registry.npmjs.org/@dcloudio/uni-mp-weixin/-/uni-mp-weixin-2.0.0-alpha-33020211130001.tgz",
+          "integrity": "sha512-UiQGR1ZnHe2Kdf04XiDLdWnrkdgPqJ4j6HZmmzlrzLefMY3bXVc6xYXTqxK4jCfLa4r729PfiAkftz/QYLZbfw=="
+        },
+        "@dcloudio/uni-quickapp-native": {
+          "version": "2.0.0-alpha-33020211130001",
+          "resolved": "https://registry.npmjs.org/@dcloudio/uni-quickapp-native/-/uni-quickapp-native-2.0.0-alpha-33020211130001.tgz",
+          "integrity": "sha512-RcfSXLXcNmg5kcf6Uo3U2nHPT7rYv19Ri0vaQWfiqMQdRmmrOUYeahm3DOMWWBosySxdyS31RGAvbtMxZw4s4w==",
+          "requires": {
+            "@hap-toolkit/dsl-vue": "0.6.13",
+            "@hap-toolkit/packager": "0.6.13",
+            "@hap-toolkit/server": "0.6.13",
+            "module-alias": "^2.1.0"
+          }
+        },
+        "@dcloudio/uni-quickapp-webview": {
+          "version": "2.0.0-alpha-33020211130001",
+          "resolved": "https://registry.npmjs.org/@dcloudio/uni-quickapp-webview/-/uni-quickapp-webview-2.0.0-alpha-33020211130001.tgz",
+          "integrity": "sha512-VpAqM/ZF7sLc3YGYgEcDFYgf5viYbbxqJFTxJvxJg27QA1o/xI01fZeipdr3TzO2uC2H0N1d72ERBKFlrGwKVA=="
+        },
+        "@dcloudio/uni-stat": {
+          "version": "2.0.0-v3-24020191018001",
+          "resolved": "https://registry.npmjs.org/@dcloudio/uni-stat/-/uni-stat-2.0.0-v3-24020191018001.tgz",
+          "integrity": "sha512-nYBm5pRrYzrj2dKMqucWSF2PwInUMnn3MLHM/ik3gnLUEKSW61rzcY1RPlUwaH7c+Snm6N+bAJzmj3GvlrlVXA=="
+        }
+      }
+    },
     "vary": {
       "version": "1.1.2",
       "resolved": "https://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz",
@@ -15654,6 +15769,101 @@
         "vue-style-loader": "^4.1.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"
+      },
+      "dependencies": {
+        "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
+        },
+        "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.npmjs.org/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.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"
+          }
+        },
+        "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-style-loader": {
       "version": "4.1.3",
       "resolved": "https://registry.npm.taobao.org/vue-style-loader/download/vue-style-loader-4.1.3.tgz",

+ 3 - 0
package.json

@@ -64,6 +64,7 @@
     "crypto-js": "^4.0.0",
     "dayjs": "^1.10.5",
     "flyio": "^0.6.2",
+    "less-loader": "^5.0.0",
     "mockjs": "^1.1.0",
     "node-sass": "^4.14.1",
     "qrcode": "^1.4.4",
@@ -71,6 +72,7 @@
     "regenerator-runtime": "^0.12.1",
     "sass-loader": "^7.3.1",
     "uni-vant": "^1.1.13",
+    "vant-weapp-convert-uniapp": "0.1.0-alpha.17",
     "vue": "^2.6.11",
     "vuex": "^3.2.0"
   },
@@ -91,6 +93,7 @@
     "babel-plugin-import": "^1.11.0",
     "cross-env": "^7.0.2",
     "jest": "^25.4.0",
+    "less": "^4.1.2",
     "mini-types": "*",
     "miniprogram-api-typings": "*",
     "postcss-comment": "^2.0.0",

+ 7 - 2
src/App.vue

@@ -48,9 +48,14 @@ export default {
 };
 </script>
 
-<style>
-@import "/wxcomponents/vant/common/index.wxss";
+<style lang="less">
+/* #ifdef MP-TOUTIAO */
+/* @import 'vant-weapp-convert-uniapp/common/index.less'; */
+/* #endif  */
+/* #ifdef MP-WEIXIN */
+@import "@/wxcomponents/vant/common/index.wxss";
 @import "@/common/css/animation.css";
+/* #endif  */
 
 /*每个页面公共css */
 view {

+ 17 - 39
src/pages.json

@@ -262,6 +262,21 @@
       }
     ]
   },
+  // #ifdef MP-TOUTIAO
+  "easycom": {
+    "autoscan": true,
+    "custom": {
+      "van-button":"vant-weapp-convert-uniapp/components/van-button/van-button",
+      "van-overlay": "vant-weapp-convert-uniapp/components/van-overlay/van-overlay",
+      "van-icon": "vant-weapp-convert-uniapp/components/van-icon/van-icon",
+      "van-transition": "vant-weapp-convert-uniapp/components/van-transition/van-transition",
+      "van-cell": "vant-weapp-convert-uniapp/components/van-cell/van-cell",
+      "van-tab": "vant-weapp-convert-uniapp/components/van-tab/van-tab",
+      "van-tabs": "vant-weapp-convert-uniapp/components/van-cell-tabs/van-cell-tabs"
+
+    }
+  },
+  // #endif
   "globalStyle": {
     "navigationBarTextStyle": "black",
     "navigationBarTitleText": "",
@@ -306,47 +321,10 @@
       "van-grid-item": "wxcomponents/vant/grid-item/index",
       "van-nav-bar": "wxcomponents/vant/nav-bar/index"
     },
-    "a":""
+    "a": ""
     // #endif
     // #ifdef MP-TOUTIAO
-    "usingComponents": {
-      "van-overlay": "/ttcomponents/vant/overlay/index",
-      "van-tabbar": "/ttcomponents/vant/tabbar/index",
-      "van-tabbar-item": "/ttcomponents/vant/tabbar-item/index",
-      "van-search": "/ttcomponents/vant/search/index",
-      "van-icon": "/ttcomponents/vant/icon/index",
-      "van-row": "/ttcomponents/vant/row/index",
-      "van-col": "/ttcomponents/vant/col/index",
-      "van-transition": "/ttcomponents/vant/transition/index",
-      "van-image": "/ttcomponents/vant/image/index",
-      "van-checkbox": "/ttcomponents/vant/checkbox/index",
-      "van-checkbox-group": "/ttcomponents/vant/checkbox-group/index",
-      "van-radio": "/ttcomponents/vant/radio/index",
-      "van-radio-group": "/ttcomponents/vant/radio-group/index",
-      "van-cell": "/ttcomponents/vant/cell/index",
-      "van-cell-group": "/ttcomponents/vant/cell-group/index",
-      "van-switch": "/ttcomponents/vant/switch/index",
-      "van-popup": "/ttcomponents/vant/popup/index",
-      "van-skeleton": "/ttcomponents/vant/skeleton/index",
-      "van-field": "/ttcomponents/vant/field/index",
-      "van-area": "/ttcomponents/vant/area/index",
-      "van-button": "/ttcomponents/vant/button/index",
-      "van-divider": "/ttcomponents/vant/divider/index",
-      "van-count-down": "/ttcomponents/vant/count-down/index",
-      "van-dialog": "/ttcomponents/vant/dialog/index",
-      "van-tab": "/ttcomponents/vant/tab/index",
-      "van-tabs": "/ttcomponents/vant/tabs/index",
-      "van-picker": "/ttcomponents/vant/picker/index",
-      "van-share-sheet": "/ttcomponents/vant/share-sheet/index",
-      "van-index-bar": "/ttcomponents/vant/index-bar/index",
-      "van-index-anchor": "/ttcomponents/vant/index-anchor/index",
-      "van-stepper": "/ttcomponents/vant/stepper/index",
-      "van-sidebar": "/ttcomponents/vant/sidebar/index",
-      "van-sidebar-item": "/ttcomponents/vant/sidebar-item/index",
-      "van-grid": "/ttcomponents/vant/grid/index",
-      "van-grid-item": "/ttcomponents/vant/grid-item/index",
-      "van-nav-bar": "/ttcomponents/vant/nav-bar/index"
-    }
+    "usingComponents": {}
     // #endif
   },
   "condition": {

+ 3 - 3
src/pages/carVideo/index.vue

@@ -385,9 +385,9 @@ export default {
     this.typeList = data;
     this.loading = false;
     this.$store.dispatch("GetInfo");
-    this.$nextTick(() => {
-      this.selectComponent("#tabs").resize();
-    });
+    // this.$nextTick(() => {
+    //   this.selectComponent("#tabs").resize();
+    // });
   },
   methods: {
     changeVehicle(item) {

+ 0 - 439
src/ttcomponents/button.vue

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

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

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

+ 0 - 320
src/ttcomponents/cell.vue

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

+ 1 - 0
src/ttcomponents/common/demo.js

@@ -0,0 +1 @@
+(global["webpackJsonp"]=global["webpackJsonp"]||[]).push([["packages/common/demo"],{"141e":function(n,e,t){"use strict";(function(n){t("6cdc");u(t("66fd"));var e=u(t("ebf0"));function u(n){return n&&n.__esModule?n:{default:n}}n(e.default)}).call(this,t("f266")["createPage"])},"82a2":function(n,e,t){"use strict";t.d(e,"b",(function(){return c})),t.d(e,"c",(function(){return o})),t.d(e,"a",(function(){return u}));var u={demoBlock:function(){return t.e("components/demo-block/demo-block").then(t.bind(null,"e29a"))}},c=function(){var n=this,e=n.$createElement;n._self._c},o=[]},a50b:function(n,e,t){},ab28:function(n,e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var u={};e.default=u},c662:function(n,e,t){"use strict";var u=t("a50b"),c=t.n(u);c.a},dfe8:function(n,e,t){"use strict";t.r(e);var u=t("ab28"),c=t.n(u);for(var o in u)"default"!==o&&function(n){t.d(e,n,(function(){return u[n]}))}(o);e["default"]=c.a},ebf0:function(n,e,t){"use strict";t.r(e);var u=t("82a2"),c=t("dfe8");for(var o in c)"default"!==o&&function(n){t.d(e,n,(function(){return c[n]}))}(o);t("c662");var a,r=t("f0c5"),f=Object(r["a"])(c["default"],u["b"],u["c"],!1,null,null,null,!1,u["a"],a);e["default"]=f.exports}},[["141e","common/runtime","common/vendor"]]]);

+ 6 - 0
src/ttcomponents/common/demo.json

@@ -0,0 +1,6 @@
+{
+  "navigationBarTitleText": "Style",
+  "usingComponents": {
+    "demo-block": "/components/demo-block/demo-block"
+  }
+}

+ 1 - 0
src/ttcomponents/common/demo.ttml

@@ -0,0 +1 @@
+<view class="demo-style _div"><demo-block vue-id="092eabd2-1" title="文字省略" bind:__l="__l" vue-slots="{{['default']}}"><view class="van-ellipsis _div">这是一段最多显示一行的文字,后面的内容会省略</view><view class="van-multi-ellipsis--l2 _div">这是一段最多显示两行的文字,后面的内容会省略。这是一段最多显示两行的文字,后面的内容会省略</view></demo-block><demo-block vue-id="092eabd2-2" title="1px 边框" bind:__l="__l" vue-slots="{{['default']}}"><view class="van-hairline--top _div"></view></demo-block></view>

+ 2 - 0
src/ttcomponents/common/demo.ttss

@@ -0,0 +1,2 @@
+.demo-style .van-ellipsis,
+.demo-style .van-multi-ellipsis--l2{max-width:300px;margin-left:16px;font-size:14px;line-height:18px}.demo-style .van-ellipsis{margin-bottom:16px}.demo-style .van-hairline--top{height:30px;background-color:#fff}.demo-style .van-hairline--top::after{top:5px}

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

@@ -1,174 +0,0 @@
-/* 通用 */
-.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;
-}

文件差異過大導致無法顯示
+ 0 - 0
src/ttcomponents/dashboard/index.js


+ 6 - 0
src/ttcomponents/dashboard/index.json

@@ -0,0 +1,6 @@
+{
+  "navigationBarTitleText": "Vant + Uniapp",
+  "usingComponents": {
+    "demo-home": "/components/demo-home/demo-home"
+  }
+}

+ 1 - 0
src/ttcomponents/dashboard/index.ttml

@@ -0,0 +1 @@
+<demo-home vue-id="a3cc747c-1" list="{{list}}" bind:__l="__l"></demo-home>

+ 1 - 0
src/ttcomponents/dashboard/index.ttss

@@ -0,0 +1 @@
+page{background:#fff}

+ 0 - 99
src/ttcomponents/empty.vue

@@ -1,99 +0,0 @@
-<!--
- * @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>

+ 0 - 594
src/ttcomponents/field.vue

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

+ 0 - 126
src/ttcomponents/icon.vue

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

+ 0 - 92
src/ttcomponents/info.vue

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

+ 0 - 194
src/ttcomponents/loading.vue

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

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

@@ -1,216 +0,0 @@
-<!--
- * @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 - 62
src/ttcomponents/overlay.vue

@@ -1,62 +0,0 @@
-<template>
-  <uv-transition
-    :style="computedStyle"
-    :custom-class="computedCustomClass"
-    :custom-style="computedCustomStyle"
-    :custom-id="customId"
-    :show="show"
-    :duration="duration"
-    @click="handleClick"
-    @touchmove.stop
-  >
-    <slot />
-  </uv-transition>
-</template>
-
-<script>
-import { baseMixin, bem } from './utils'
-import uvTransition from './transition.vue'
-
-export default {
-  name: 'UvOverlay',
-  components: {
-    uvTransition,
-  },
-  props: {
-    ...baseMixin.props,
-    // 是否展示遮罩层
-    show: {
-      type: Boolean,
-      default: false,
-    },
-    // 动画时长,单位秒
-    // todo 这里文档上说的是s,实际用的是ms
-    duration: {
-      type: Number,
-      default: 300,
-    },
-    // z-index 层级
-    zIndex: {
-      type: Number,
-      default: 1,
-    },
-  },
-  computed: {
-    computedStyle() {
-      const { customStyle, zIndex } = this
-      return `z-index: ${zIndex};${customStyle}`
-    },
-    computedCustomClass() {
-      return `uv-overlay ${this.customClass}`
-    },
-    computedCustomStyle() {
-      return `${this.customClass}${this.computedStyle}`
-    },
-  },
-  methods: {
-    handleClick() {
-      this.$emit('click')
-    },
-  },
-}
-</script>

+ 0 - 288
src/ttcomponents/popup.vue

@@ -1,288 +0,0 @@
-<template>
-  <view>
-    <uv-overlay
-      v-if="overlay"
-      :show="show"
-      :z-index="zIndex"
-      :custom-style="overlayStyle"
-      :duration="duration"
-      @click="clickOverlay"
-    />
-    <view
-      v-if="inited"
-      :class="computedRootClass"
-      :style="computedRootStyle"
-      class="uv-popup"
-      :id="customId"
-    >
-      <slot />
-      <uv-icon
-        v-if="closeable"
-        :name="closeIcon"
-        :custom-class="computedIconClass"
-        @click="clickCloseIcon"
-      />
-    </view>
-  </view>
-</template>
-
-<script>
-import { baseMixin, transition, bem, transitionProps } from './utils'
-import uvOverlay from './overlay.vue'
-import uvIcon from './icon.vue'
-
-export default {
-  name: 'UvPopup',
-  components: {
-    uvOverlay,
-    uvIcon,
-  },
-  mixins: [transition],
-  props: {
-    ...baseMixin.props,
-    ...transitionProps,
-    // z-index 层级
-    zIndex: {
-      type: Number,
-      default: 100,
-    },
-    // 是否显示遮罩层
-    overlay: {
-      type: Boolean,
-      default: true,
-    },
-    // 弹出位置,可选值为 top bottom right left
-    position: {
-      type: String,
-      default: 'center',
-      validate(value) {
-        return ['top', 'right', 'bottom', 'left', 'center'].includes(value)
-      },
-    },
-    // 是否显示圆角
-    round: {
-      type: Boolean,
-      default: false,
-    },
-    // 自定义遮罩层样式
-    overlayStyle: {
-      type: String,
-      default: '',
-    },
-    // 是否在点击遮罩层后关闭
-    closeOnClickOverlay: {
-      type: Boolean,
-      default: true,
-    },
-    // 是否显示关闭图标
-    closeable: {
-      type: Boolean,
-      default: false,
-    },
-    // 关闭图标名称或图片链接
-    closeIcon: {
-      type: String,
-      default: 'cross',
-    },
-    // 图标位置
-    closeIconPosition: {
-      type: String,
-      default: 'top-right',
-    },
-    // 是否为 iPhoneX 留出底部安全距离
-    safeAreaInsetBottom: {
-      type: Boolean,
-      default: true,
-    },
-    // 是否留出顶部安全距离(状态栏高度)
-    safeAreaInsetTop: {
-      type: Boolean,
-      default: false,
-    },
-  },
-  computed: {
-    computedRootClass() {
-      const {
-        methodClass,
-        position,
-        round,
-        saveAreaInsetBottom,
-        saveAreaInsetTop,
-      } = this
-      let { customClass } = this
-      customClass = customClass ? `${customClass} ` : ''
-      const bemClass = bem('popup', [
-        position,
-        {
-          round,
-          safe: saveAreaInsetBottom,
-          'safe-top': saveAreaInsetTop,
-        },
-      ])
-      return `${customClass}${methodClass} ${bemClass}`
-    },
-    computedRootStyle() {
-      const { zIndex, customStyle, computedDuration } = this
-      let { display } = this
-      display = display ? '' : 'display: none'
-      return `z-index: ${zIndex}; transition-duration: ${computedDuration}; ${display}${customStyle}`
-    },
-    computedIconClass() {
-      return `uv-popup_close-icon uv-popup_close-icon-${this.closeIconPosition}`
-    },
-  },
-  methods: {
-    clickOverlay() {
-      this.$emit('click-overlay')
-      if (this.closeOnClickOverlay) {
-        this.$emit('close')
-      }
-    },
-    clickCloseIcon() {
-      this.$emit('close')
-    },
-  },
-}
-</script>
-
-<style scoped lang="scss">
-@import './sass/_index.scss';
-
-$comp: #{$PREFIX}popup;
-
-#{$comp} {
-  position: fixed;
-  overflow-y: auto;
-  box-sizing: border-box;
-  max-height: 100%;
-  transition-timing-function: ease;
-  animation: ease both;
-  background-color: $popup-background-color;
-  font-size: $font-size-md;
-  -webkit-overflow-scrolling: touch;
-
-  &-center {
-    top: 50%;
-    left: 50%;
-    transform: translate3d(-50%, -50%, 0);
-
-    .uv-popup-round {
-      border-radius: $popup-round-border-radius;
-    }
-  }
-
-  &-top {
-    top: 0;
-    left: 0;
-    width: 100%;
-  }
-
-  &.uv-popup-round {
-    border-radius: 0 0 $popup-round-border-radius $popup-round-border-radius;
-  }
-
-  &-right {
-    top: 50%;
-    right: 0;
-    transform: translate3d(0, -50%, 0);
-
-    &.uv-popup-round {
-      border-radius: $popup-round-border-radius 0 0 $popup-round-border-radius;
-    }
-  }
-
-  &-bottom {
-    bottom: 0;
-    left: 0;
-    width: 100%;
-
-    &.uv-popup-round {
-      border-radius: $popup-round-border-radius $popup-round-border-radius 0 0;
-    }
-  }
-
-  &-left {
-    top: 50%;
-    left: 0;
-    transform: translate3d(0, -50%, 0);
-
-    &.uv-popup-round {
-      border-radius: 0 $popup-round-border-radius $popup-round-border-radius 0;
-    }
-  }
-
-  &-bottom,
-  &-safe {
-    /* todo 这个constant和env是啥子玩意儿? */
-    /*padding-bottom: constant(safe-area-inset-bottom);*/
-    /*padding-bottom: env(safe-area-inset-bottom);*/
-  }
-
-  &-safeTop {
-    /*padding-top: constant(safe-area-inset-top);*/
-    /*padding-top: env(safe-area-inset-top);*/
-  }
-}
-
-.uv-scale-enter-active,
-.uv-scale-leave-active {
-  transition-property: opacity, transform;
-}
-
-.uv-scale-enter,
-.uv-scale-leave-to {
-  transform: translate3d(-50%, -50%, 0) scale(0.7);
-  opacity: 0;
-}
-
-.uv-fade-enter-active,
-.uv-fade-leave-active {
-  transition-property: opacity;
-}
-
-.uv-fade-enter,
-.uv-fade-leave-to {
-  opacity: 0;
-}
-
-.uv-center-enter-active,
-.uv-center-leave-active {
-  transition-property: opacity;
-}
-
-.uv-center-enter,
-.uv-center-leave-to {
-  opacity: 0;
-}
-
-.uv-bottom-enter-active,
-.uv-bottom-leave-active,
-.uv-top-enter-active,
-.uv-top-leave-active,
-.uv-left-enter-active,
-.uv-left-leave-active,
-.uv-right-enter-active,
-.uv-right-leave-active {
-  transition-property: transform;
-}
-
-.uv-bottom-enter,
-.uv-bottom-leave-to {
-  transform: translate3d(0, 100%, 0);
-}
-
-.uv-top-enter,
-.uv-top-leave-to {
-  transform: translate3d(0, -100%, 0);
-}
-
-.uv-left-enter,
-.uv-left-leave-to {
-  transform: translate3d(-100%, -50%, 0);
-}
-
-.uv-right-enter,
-.uv-right-leave-to {
-  transform: translate3d(100%, -50%, 0);
-}
-</style>

+ 0 - 115
src/ttcomponents/price.vue

@@ -1,115 +0,0 @@
-<!-- @format -->
-
-<!-- author: ranwawa -->
-<!-- since: 2020/3/24 -->
-<!-- desc: 价格 -->
-<template>
-  <view
-    class="uv-price"
-    :class="customClass"
-    :style="computedCustomStyle"
-    @click="$emit('click', amount)"
-  >
-    <text class="uv-price__unit">
-      {{ unit }}
-    </text>
-    <text class="uv-price__integer">
-      {{ inte }}
-    </text>
-    <text class="uv-price__decimal"> .{{ deci }}</text>
-  </view>
-</template>
-<script>
-import { baseMixin, bem } from './utils'
-
-export default {
-  name: 'UvPrice',
-  props: {
-    ...baseMixin.props,
-    unit: {
-      type: String,
-      default: '¥',
-    },
-    amount: {
-      type: [String, Number],
-      default: '0.00',
-    },
-    decimal: {
-      type: Number,
-      default: 2,
-    },
-    size: {
-      type: [String, Number],
-      default: 14,
-    },
-    color: {
-      type: String,
-      default: '',
-    },
-  },
-  data() {
-    return {
-      inte: 0,
-      deci: '00',
-    }
-  },
-  watch: {
-    amount(newValue, oldValue) {
-      if (newValue === oldValue) {
-        return
-      }
-      this.handleAmount(newValue)
-    },
-  },
-  computed: {
-    computedCustomStyle() {
-      const { size } = this
-      const type = typeof size
-      let fontSize
-      if (type === 'string') {
-        fontSize = `${size}px`
-      } else {
-        fontSize = /[a-zA-Z]{2,3}/.test(size) ? size : `${size}px`
-      }
-      const color = this.color ? `color: ${this.color};` : ''
-      return `${this.customStyle}; font-size: ${fontSize}; ${color}`
-    },
-  },
-  mounted() {
-    this.handleAmount(this.amount)
-  },
-  methods: {
-    handleAmount(newValue) {
-      let num = +newValue
-      // eslint-disable-next-line no-self-compare
-      num !== num && (num = 0)
-      // let deci = num % 1;
-      // this.inte = num - deci;
-      // deci = Math.trunc(deci * 10 ** this.decimal);
-      // this.deci = deci;
-      ;[this.inte, this.deci] = num.toFixed(this.decimal).split('.')
-    },
-  },
-}
-</script>
-<style lang="scss" scoped>
-@import './sass/variables';
-
-.uv-price {
-  display: inline-block;
-  color: $price-color;
-  font-size: $price-size;
-  font-weight: bold;
-  line-height: 1;
-  vertical-align: baseline;
-
-  &__unit {
-    display: inline-block;
-    margin-right: $price-unit-margin;
-  }
-
-  &__integer {
-    font-size: 2em;
-  }
-}
-</style>

+ 0 - 156
src/ttcomponents/result.vue

@@ -1,156 +0,0 @@
-<!-- author: ranwawa -->
-<!-- since: 2020/2/24 -->
-<!-- desc: 操作结果 -->
-
-<template>
-  <view
-    :class="customClass"
-    :style="customStyle"
-    class="uv-result"
-    :id="customId"
-  >
-    <slot v-if="useIconSlot" name="icon" />
-    <uv-icon v-else :name="iconName" :custom-class="computedClass" size="66" />
-    <slot v-if="useContentSlot" name="desc" />
-    <template v-else>
-      <view v-if="contentTitle" class="uv-result-title">
-        {{ contentTitle }}
-      </view>
-      <view v-if="contentDesc" class="uv-result-desc">
-        {{ contentDesc }}
-      </view>
-    </template>
-    <slot v-if="useButtonSlot" name="button" />
-    <view v-else class="uv-result__button">
-      <uv-button
-        :type="buttonType"
-        size="large"
-        custom-style="margin-top: 30px;"
-        @click="$emit('click')"
-      >
-        {{ buttonText }}
-      </uv-button>
-    </view>
-  </view>
-</template>
-<script>
-import { RESULT_TYPE } from './utils/constants'
-import { baseMixin, bem } from './utils'
-import uvIcon from './icon.vue'
-import uvButton from './button.vue'
-
-export default {
-  name: 'UvResult',
-  components: {
-    uvIcon,
-    uvButton,
-  },
-  data() {
-    return {
-      iconName: '',
-      buttonType: '',
-    }
-  },
-  props: {
-    ...baseMixin.props,
-    name: {
-      type: String,
-      default: '',
-    },
-    type: {
-      type: String,
-      default: 'success',
-      validate: (value) => RESULT_TYPE.includes(value),
-    },
-    useIconSlot: {
-      type: Boolean,
-      default: false,
-    },
-    useContentSlot: {
-      type: Boolean,
-      default: false,
-    },
-    useButtonSlot: {
-      type: Boolean,
-      default: false,
-    },
-    pageTitle: {
-      type: String,
-      default: '操作成功',
-    },
-    contentTitle: {
-      type: String,
-      default: '操作成功',
-    },
-    contentDesc: {
-      type: String,
-      default: '',
-    },
-    buttonText: {
-      type: String,
-      default: '确定',
-    },
-  },
-  computed: {
-    computedClass() {
-      return bem('result_icon', [this.type])
-    },
-  },
-  watch: {
-    pageTitle: {
-      immediate: true,
-      handler: (title) => uni.setNavigationBarTitle({ title }),
-    },
-    type: {
-      immediate: true,
-      handler(val) {
-        let iconName = val
-        let buttonType = val
-        switch (val) {
-          case RESULT_TYPE[0]:
-            iconName = 'checked'
-            buttonType = 'primary'
-            break
-          case RESULT_TYPE[3]:
-            iconName = 'clear'
-            break
-          default:
-            break
-        }
-        this.iconName = this.name || iconName
-        this.buttonType = buttonType
-      },
-    },
-  },
-}
-</script>
-<style lang="scss" scoped>
-@import './sass/index';
-
-$comp: #{$PREFIX}result;
-
-#{$comp} {
-  display: flex;
-  align-items: center;
-  flex-direction: column;
-  justify-content: center;
-  padding-top: $result-padding-top;
-  font-size: $font-size-md;
-  text-align: center;
-
-  &-title {
-    margin: 15px auto 5px;
-    font-size: $result-title-size;
-    font-weight: bold;
-    line-height: $result-title-line-height;
-  }
-
-  &-desc {
-    color: $gray-7;
-    font-size: $font-size-md;
-  }
-  &__button {
-    width: 100%;
-  }
-}
-</style>

+ 0 - 18
src/ttcomponents/sass/_function.scss

@@ -1,18 +0,0 @@
-// Color contrast
-@function color-yiq($color, $dark: $yiq-text-dark, $light: $yiq-text-light) {
-	$r: red($color);
-	$g: green($color);
-	$b: blue($color);
-
-	$yiq: (($r * 299) + ($g * 587) + ($b * 114)) / 1000;
-
-	@if ($yiq >= $yiq-contrasted-threshold) {
-		@return $dark;
-	} @else {
-		@return $light;
-	}
-}
-
-@function px2rpx($size) {
- @return #{$size * 2}rpx;
-}

+ 0 - 3
src/ttcomponents/sass/_index.scss

@@ -1,3 +0,0 @@
-@import "./function";
-@import "./variables";
-@import "mixins";

+ 0 - 47
src/ttcomponents/sass/_mixins.scss

@@ -1,47 +0,0 @@
-@mixin hairline-common() {
-	position: absolute;
-	box-sizing: border-box;
-	/* cover wechat button:after default transforn-origin */
-	transform-origin: center;
-	content: ' ';
-	pointer-events: none;
-}
-
-@mixin hairline($border-color: #eee) {
-	@include hairline-common;
-
-	top: -50%;
-	right: -50%;
-	bottom: -50%;
-	left: -50%;
-	border: 0 solid $border-color;
-	transform: scale(0.5);
-}
-
-@mixin hairline-bottom($border-color: #eee, $left: 0) {
-	@include hairline-common;
-
-	top: auto;
-	right: 0;
-	bottom: 0;
-	left: $left;
-	border-bottom: 1px solid $border-color;
-	transform: scaleY(0.5);
-}
-
-@mixin multi-ellipsis($lines) {
-	display: -webkit-box;
-	overflow: hidden;
-	text-overflow: ellipsis;
-	-webkit-line-clamp: $lines;
-
-	/* autoprefixer: ignore next */
-	-webkit-box-orient: vertical;
-}
-
-@mixin ellipsis() {
-	overflow: hidden;
-	white-space: nowrap;
-	text-overflow: ellipsis;
-}
-

+ 0 - 235
src/ttcomponents/sass/_variables.scss

@@ -1,235 +0,0 @@
-$black: #000 !default;
-$white: #fff !default;
-$gray-1: #f7f8fa !default;
-$gray-2: #f2f3f5 !default;
-$gray-3: #ebedf0 !default;
-$gray-4: #dcdee0 !default;
-$gray-5: #c8c9cc !default;
-$gray-6: #969799 !default;
-$gray-7: #646566 !default;
-$gray-8: #323233 !default;
-$green: #07c160 !default;
-$blue: #1989fa !default;
-$red: #ee0a24 !default;
-$orange: #ff976a !default;
-$colors: () !default;
-$colors: map-merge(
-  (
-    "blue": $blue,
-    "red": $red,
-    "orange": $orange,
-    "green": $green,
-    "white": $white,
-  ),
-  $colors
-);
-$primary: $green !default;
-$info: $blue !default;
-$danger: $red !default;
-$warning: $orange !default;
-$theme-colors: () !default;
-$theme-colors: map-merge(
-  (
-    "primary": $primary,
-    "info": $info,
-    "warning": $warning,
-    "danger": $danger,
-  ),
-  $theme-colors
-);
-
-// Customize the light and dark text colors for use in our YIQ color contrast function.
-$yiq-text-dark: $gray-8 !default;
-$yiq-text-light: $white !default;
-// The yiq lightness value that determines when the lightness of color changes from "dark" to "light". Acceptable values are between 0 and 255.
-$yiq-contrasted-threshold: 150 !default;
-
-// Cell
-$cell-line-height: px2rpx(24) !default;
-$cell-icon-size: px2rpx(24) !default;
-
-// Border
-$border-color: $gray-3 !default;
-$border-width-base: 1px !default;
-$border-radius-sm: px2rpx(2) !default;
-$border-radius-md: px2rpx(4) !default;
-$border-radius-max: px2rpx(999) !default;
-
-// Component Colors
-$text-color: $gray-8 !default;
-$active-color: $gray-2 !default;
-$active-opacity: 0.7 !default;
-$disabled-opacity: 0.5 !default;
-$background-color: $gray-1 !default;
-$background-color-light: #fafafa !default;
-
-// Font
-$font-size-xs: px2rpx(10) !default;
-$font-size-sm: px2rpx(12) !default;
-$font-size-md: px2rpx(14) !default;
-$font-size-lg: px2rpx(16) !default;
-$font-weight-bold: 500 !default;
-
-// Padding
-$padding-base: 4 !default;
-$padding-xs: px2rpx($padding-base * 2) !default;
-$padding-sm: px2rpx($padding-base * 3) !default;
-$padding-md: px2rpx($padding-base * 4) !default;
-$padding-lg: px2rpx($padding-base * 6) !default;
-$padding-xl: px2rpx($padding-base * 8) !default;
-
-// Animation
-$animation-duration-base: 0.3s !default;
-$animation-duration-fast: 0.2s !default;
-
-// Button
-$button-height-large: px2rpx(50) !default;
-$button-height-normal: px2rpx(44) !default;
-$button-height-small: px2rpx(30) !default;
-$button-height-mini: px2rpx(22) !default;
-$button-min-width-small: px2rpx(60) !default;
-$button-min-width-mini: px2rpx(50) !default;
-$button-padding-normal: px2rpx(50) !default;
-$button-text-margin-left: px2rpx(4) !default;
-
-// Cell
-$cell-font-size: $font-size-md !default;
-$cell-line-height: px2rpx(24) !default;
-$cell-vertical-padding: px2rpx(10) !default;
-$cell-horizontal-padding: $padding-md !default;
-$cell-text-color: $text-color !default;
-$cell-background-color: $white !default;
-$cell-border-color: $border-color !default;
-$cell-active-color: $active-color !default;
-$cell-required-color: $red !default;
-$cell-label-color: $gray-6 !default;
-$cell-label-font-size: $font-size-sm !default;
-$cell-label-line-height: 18px !default;
-$cell-label-margin-top: 3px !default;
-$cell-value-color: $gray-6 !default;
-$cell-icon-size: 16px !default;
-$cell-right-icon-color: $gray-6 !default;
-$cell-large-vertical-padding: $padding-sm !default;
-$cell-large-title-font-size: $font-size-lg !default;
-$cell-large-label-font-size: $font-size-md !default;
-
-// CellGroup
-$cell-group-background-color: $white !default;
-$cell-group-title-color: $gray-6 !default;
-$cell-group-title-padding: $padding-md $padding-md $padding-xs !default;
-$cell-group-title-font-size: $font-size-md !default;
-$cell-group-title-line-height: px2rpx(16) !default;
-
-// Field
-$field-input-text-color: $text-color !default;
-$field-input-error-text-color: $red !default;
-$field-input-disabled-text-color: $gray-6 !default;
-$field-placeholder-text-color: $gray-6 !default;
-$field-clear-icon-color: $gray-5 !default;
-$field-icon-container-color: $gray-6 !default;
-$field-error-message-color: $red !default;
-$field-error-message-text-font-size: $font-size-sm !default;
-$field-text-area-min-height: px2rpx(18) !default;
-
-// Icon
-$info-size: $font-size-lg !default;
-$info-color: $white !default;
-$info-padding: 0 px2rpx(3) !default;
-$info-font-size: $font-size-sm !default;
-$info-font-weight: 500 !default;
-$info-border-width: 1px !default;
-$info-background-color: $red !default;
-$info-dot-color: $red !default;
-$info-dot-size: px2rpx(8) !default;
-$info-font-family: PingFang SC, Helvetica Neue, Arial, sans-serif !default;
-
-// Loading
-$loading-text-color: $gray-6 !default;
-$loading-text-font-size: $font-size-md !default;
-$loading-text-line-height: px2rpx(20) !default;
-$loading-spinner-color: $gray-5 !default;
-$loading-spinner-size: px2rpx(30) !default;
-$loading-spinner-animation-duration: 0.8s !default;
-
-// Popup
-$popup-background-color: $white !default;
-$popup-round-border-radius: px2rpx(20) !default;
-$popup-close-icon-size: $font-size-lg !default;
-$popup-close-icon-color: $gray-6 !default;
-$popup-close-icon-margin: px2rpx(16) !default;
-$popup-close-icon-z-index: 1 !default;
-
-// Result
-$result-padding-top: px2rpx(40) !default;
-$result-title-size: $font-size-lg !default;
-$result-title-line-height: px2rpx(25) !default;
-
-// Swiper-dot
-$swiper-dot-box-bottom: px2rpx(10) !default;
-$swiper-dot-item-width: px2rpx(8) !default;
-$swiper-dot-item-margin: px2rpx(6) !default;
-$swiper-dot-item-radius: px2rpx(100) !default;
-$swiper-dot-default-radius: px2rpx(50) !default;
-$swiper-dot-nav-height: px2rpx(40) !default;
-$swiper-dot-item-size: $font-size-md !default;
-$swiper-dot-item-margin: px2rpx(15) !default;
-$swiper-dot-text-size: $font-size-sm !default;
-
-// Tag
-$tag-margin: px2rpx(2) !default;
-// Uploader
-$uploader-size: px2rpx(80) !default;
-$uploader-icon-size: px2rpx(24) !default;
-$uploader-icon-color: $gray-6 !default;
-$uploader-text-color: $gray-6 !default;
-$uploader-text-font-size: $font-size-sm !default;
-$uploader-upload-border-color: $gray-3 !default;
-$uploader-upload-border-radius: px2rpx(4) !default;
-$uploader-upload-background-color: $white !default;
-$uploader-delete-color: $gray-6 !default;
-$uploader-delete-icon-size: px2rpx(18) !default;
-$uploader-delete-background-color: $white !default;
-$uploader-file-background-color: $background-color !default;
-$uploader-file-icon-size: px2rpx(20) !default;
-$uploader-file-icon-color: $gray-7 !default;
-$uploader-file-name-font-size: $font-size-sm !default;
-$uploader-file-name-text-color: $gray-7 !default;
-$upload-file-name-padding: px2rpx(5) !default;
-
-// Overlay
-$overlay-background-color: rgba(0, 0, 0, 0.7) !default;
-
-// skeleton
-$skeleton-padding: 0 $padding-md !default;
-$skeleton-row-height: px2rpx(16) !default;
-$skeleton-row-background-color: $gray-2 !default;
-$skeleton-row-margin-top: $padding-sm !default;
-$skeleton-avatar-background-color: $gray-2 !default;
-$skeleton-animation-duration: 1.2s !default;
-
-// NavBar
-$nav-bar-height: 92px !default; // 这里不能使用rpx,以防在大屏下高度太高,和小程序右边的胶囊无法对齐
-$nav-bar-background-color: $white !default;
-$nav-bar-arrow-size: px2rpx(16) !default;
-$nav-bar-icon-color: $blue !default;
-$nav-bar-text-color: $blue !default;
-$nav-bar-title-font-size: $font-size-lg !default;
-$nav-bar-title-text-color: $text-color !default;
-$nav-bar-z-index: 1 !default;
-
-// Price
-$price-color: #f05b28 !default;
-$price-size: 24rpx !default;
-$price-unit-margin: 2rpx !default;
-
-// Empty
-$empty-padding: $padding-xl 0 !default;
-$empty-image-size: 320rpx !default;
-$empty-description-margin-top: $padding-md !default;
-$empty-description-padding: 0 120px !default;
-$empty-description-color: $gray-6 !default;
-$empty-description-font-size: 28rpx !default;
-$empty-description-line-height: 40px !default;
-$empty-bottom-margin-top: 48px !default;
-
-$PREFIX: ".uv-";

+ 0 - 935
src/ttcomponents/sass/font.scss

@@ -1,935 +0,0 @@
-/* stylelint-disable selector-pseudo-element-colon-notation */
-@font-face {
-	font-weight: normal;
-	font-family: 'vant-icon';
-	font-style: normal;
-	font-display: auto;
-	src: url('https://img.yzcdn.cn/vant/vant-icon-d3825a.woff2') format('woff2'),
-	url('https://img.yzcdn.cn/vant/vant-icon-d3825a.woff') format('woff'),
-	url('https://img.yzcdn.cn/vant/vant-icon-d3825a.ttf') format('truetype');
-}
-
-.van-icon {
-	position: relative;
-	display: inline-block;
-	font: normal normal normal 14px/1 "vant-icon";
-	font-size: inherit;
-	text-rendering: auto;
-	-webkit-font-smoothing: antialiased;
-
-	&::before {
-		display: inline-block;
-	}
-}
-
-.van-icon-add-o:before {
-	content: "\F000";
-}
-
-.van-icon-add-square:before {
-	content: "\F001";
-}
-
-.van-icon-add:before {
-	content: "\F002";
-}
-
-.van-icon-after-sale:before {
-	content: "\F003";
-}
-
-.van-icon-aim:before {
-	content: "\F004";
-}
-
-.van-icon-alipay:before {
-	content: "\F005";
-}
-
-.van-icon-apps-o:before {
-	content: "\F006";
-}
-
-.van-icon-arrow-down:before {
-	content: "\F007";
-}
-
-.van-icon-arrow-left:before {
-	content: "\F008";
-}
-
-.van-icon-arrow-up:before {
-	content: "\F009";
-}
-
-.van-icon-arrow:before {
-	content: "\F00A";
-}
-
-.van-icon-ascending:before {
-	content: "\F00B";
-}
-
-.van-icon-audio:before {
-	content: "\F00C";
-}
-
-.van-icon-award-o:before {
-	content: "\F00D";
-}
-
-.van-icon-award:before {
-	content: "\F00E";
-}
-
-.van-icon-bag-o:before {
-	content: "\F00F";
-}
-
-.van-icon-bag:before {
-	content: "\F010";
-}
-
-.van-icon-balance-list-o:before {
-	content: "\F011";
-}
-
-.van-icon-balance-list:before {
-	content: "\F012";
-}
-
-.van-icon-balance-o:before {
-	content: "\F013";
-}
-
-.van-icon-balance-pay:before {
-	content: "\F014";
-}
-
-.van-icon-bar-chart-o:before {
-	content: "\F015";
-}
-
-.van-icon-bars:before {
-	content: "\F016";
-}
-
-.van-icon-bell:before {
-	content: "\F017";
-}
-
-.van-icon-bill-o:before {
-	content: "\F018";
-}
-
-.van-icon-bill:before {
-	content: "\F019";
-}
-
-.van-icon-birthday-cake-o:before {
-	content: "\F01A";
-}
-
-.van-icon-bookmark-o:before {
-	content: "\F01B";
-}
-
-.van-icon-bookmark:before {
-	content: "\F01C";
-}
-
-.van-icon-browsing-history-o:before {
-	content: "\F01D";
-}
-
-.van-icon-browsing-history:before {
-	content: "\F01E";
-}
-
-.van-icon-brush-o:before {
-	content: "\F01F";
-}
-
-.van-icon-bulb-o:before {
-	content: "\F020";
-}
-
-.van-icon-bullhorn-o:before {
-	content: "\F021";
-}
-
-.van-icon-calender-o:before {
-	content: "\F022";
-}
-
-.van-icon-card:before {
-	content: "\F023";
-}
-
-.van-icon-cart-circle-o:before {
-	content: "\F024";
-}
-
-.van-icon-cart-circle:before {
-	content: "\F025";
-}
-
-.van-icon-cart-o:before {
-	content: "\F026";
-}
-
-.van-icon-cart:before {
-	content: "\F027";
-}
-
-.van-icon-cash-back-record:before {
-	content: "\F028";
-}
-
-.van-icon-cash-on-deliver:before {
-	content: "\F029";
-}
-
-.van-icon-cashier-o:before {
-	content: "\F02A";
-}
-
-.van-icon-certificate:before {
-	content: "\F02B";
-}
-
-.van-icon-chart-trending-o:before {
-	content: "\F02C";
-}
-
-.van-icon-chat-o:before {
-	content: "\F02D";
-}
-
-.van-icon-chat:before {
-	content: "\F02E";
-}
-
-.van-icon-checked:before {
-	content: "\F02F";
-}
-
-.van-icon-circle:before {
-	content: "\F030";
-}
-
-.van-icon-clear:before {
-	content: "\F031";
-}
-
-.van-icon-clock-o:before {
-	content: "\F032";
-}
-
-.van-icon-clock:before {
-	content: "\F033";
-}
-
-.van-icon-close:before {
-	content: "\F034";
-}
-
-.van-icon-closed-eye:before {
-	content: "\F035";
-}
-
-.van-icon-cluster-o:before {
-	content: "\F036";
-}
-
-.van-icon-cluster:before {
-	content: "\F037";
-}
-
-.van-icon-column:before {
-	content: "\F038";
-}
-
-.van-icon-comment-circle-o:before {
-	content: "\F039";
-}
-
-.van-icon-comment-circle:before {
-	content: "\F03A";
-}
-
-.van-icon-comment-o:before {
-	content: "\F03B";
-}
-
-.van-icon-comment:before {
-	content: "\F03C";
-}
-
-.van-icon-completed:before {
-	content: "\F03D";
-}
-
-.van-icon-contact:before {
-	content: "\F03E";
-}
-
-.van-icon-coupon-o:before {
-	content: "\F03F";
-}
-
-.van-icon-coupon:before {
-	content: "\F040";
-}
-
-.van-icon-credit-pay:before {
-	content: "\F041";
-}
-
-.van-icon-cross:before {
-	content: "\F042";
-}
-
-.van-icon-debit-pay:before {
-	content: "\F043";
-}
-
-.van-icon-delete:before {
-	content: "\F044";
-}
-
-.van-icon-descending:before {
-	content: "\F045";
-}
-
-.van-icon-description:before {
-	content: "\F046";
-}
-
-.van-icon-desktop-o:before {
-	content: "\F047";
-}
-
-.van-icon-diamond-o:before {
-	content: "\F048";
-}
-
-.van-icon-diamond:before {
-	content: "\F049";
-}
-
-.van-icon-discount:before {
-	content: "\F04A";
-}
-
-.van-icon-down:before {
-	content: "\F04B";
-}
-
-.van-icon-ecard-pay:before {
-	content: "\F04C";
-}
-
-.van-icon-edit:before {
-	content: "\F04D";
-}
-
-.van-icon-ellipsis:before {
-	content: "\F04E";
-}
-
-.van-icon-empty:before {
-	content: "\F04F";
-}
-
-.van-icon-envelop-o:before {
-	content: "\F050";
-}
-
-.van-icon-exchange:before {
-	content: "\F051";
-}
-
-.van-icon-expand-o:before {
-	content: "\F052";
-}
-
-.van-icon-expand:before {
-	content: "\F053";
-}
-
-.van-icon-eye-o:before {
-	content: "\F054";
-}
-
-.van-icon-eye:before {
-	content: "\F055";
-}
-
-.van-icon-fail:before {
-	content: "\F056";
-}
-
-.van-icon-failure:before {
-	content: "\F057";
-}
-
-.van-icon-filter-o:before {
-	content: "\F058";
-}
-
-.van-icon-fire-o:before {
-	content: "\F059";
-}
-
-.van-icon-fire:before {
-	content: "\F05A";
-}
-
-.van-icon-flag-o:before {
-	content: "\F05B";
-}
-
-.van-icon-flower-o:before {
-	content: "\F05C";
-}
-
-.van-icon-free-postage:before {
-	content: "\F05D";
-}
-
-.van-icon-friends-o:before {
-	content: "\F05E";
-}
-
-.van-icon-friends:before {
-	content: "\F05F";
-}
-
-.van-icon-gem-o:before {
-	content: "\F060";
-}
-
-.van-icon-gem:before {
-	content: "\F061";
-}
-
-.van-icon-gift-card-o:before {
-	content: "\F062";
-}
-
-.van-icon-gift-card:before {
-	content: "\F063";
-}
-
-.van-icon-gift-o:before {
-	content: "\F064";
-}
-
-.van-icon-gift:before {
-	content: "\F065";
-}
-
-.van-icon-gold-coin-o:before {
-	content: "\F066";
-}
-
-.van-icon-gold-coin:before {
-	content: "\F067";
-}
-
-.van-icon-good-job-o:before {
-	content: "\F068";
-}
-
-.van-icon-good-job:before {
-	content: "\F069";
-}
-
-.van-icon-goods-collect-o:before {
-	content: "\F06A";
-}
-
-.van-icon-goods-collect:before {
-	content: "\F06B";
-}
-
-.van-icon-graphic:before {
-	content: "\F06C";
-}
-
-.van-icon-home-o:before {
-	content: "\F06D";
-}
-
-.van-icon-hot-o:before {
-	content: "\F06E";
-}
-
-.van-icon-hot-sale-o:before {
-	content: "\F06F";
-}
-
-.van-icon-hot-sale:before {
-	content: "\F070";
-}
-
-.van-icon-hot:before {
-	content: "\F071";
-}
-
-.van-icon-hotel-o:before {
-	content: "\F072";
-}
-
-.van-icon-idcard:before {
-	content: "\F073";
-}
-
-.van-icon-info-o:before {
-	content: "\F074";
-}
-
-.van-icon-info:before {
-	content: "\F075";
-}
-
-.van-icon-invition:before {
-	content: "\F076";
-}
-
-.van-icon-label-o:before {
-	content: "\F077";
-}
-
-.van-icon-label:before {
-	content: "\F078";
-}
-
-.van-icon-like-o:before {
-	content: "\F079";
-}
-
-.van-icon-like:before {
-	content: "\F07A";
-}
-
-.van-icon-live:before {
-	content: "\F07B";
-}
-
-.van-icon-location-o:before {
-	content: "\F07C";
-}
-
-.van-icon-location:before {
-	content: "\F07D";
-}
-
-.van-icon-lock:before {
-	content: "\F07E";
-}
-
-.van-icon-logistics:before {
-	content: "\F07F";
-}
-
-.van-icon-manager-o:before {
-	content: "\F080";
-}
-
-.van-icon-manager:before {
-	content: "\F081";
-}
-
-.van-icon-map-marked:before {
-	content: "\F082";
-}
-
-.van-icon-medal-o:before {
-	content: "\F083";
-}
-
-.van-icon-medal:before {
-	content: "\F084";
-}
-
-.van-icon-more-o:before {
-	content: "\F085";
-}
-
-.van-icon-more:before {
-	content: "\F086";
-}
-
-.van-icon-music-o:before {
-	content: "\F087";
-}
-
-.van-icon-music:before {
-	content: "\F088";
-}
-
-.van-icon-new-arrival-o:before {
-	content: "\F089";
-}
-
-.van-icon-new-arrival:before {
-	content: "\F08A";
-}
-
-.van-icon-new-o:before {
-	content: "\F08B";
-}
-
-.van-icon-new:before {
-	content: "\F08C";
-}
-
-.van-icon-newspaper-o:before {
-	content: "\F08D";
-}
-
-.van-icon-notes-o:before {
-	content: "\F08E";
-}
-
-.van-icon-orders-o:before {
-	content: "\F08F";
-}
-
-.van-icon-other-pay:before {
-	content: "\F090";
-}
-
-.van-icon-paid:before {
-	content: "\F091";
-}
-
-.van-icon-passed:before {
-	content: "\F092";
-}
-
-.van-icon-pause-circle-o:before {
-	content: "\F093";
-}
-
-.van-icon-pause-circle:before {
-	content: "\F094";
-}
-
-.van-icon-pause:before {
-	content: "\F095";
-}
-
-.van-icon-peer-pay:before {
-	content: "\F096";
-}
-
-.van-icon-pending-payment:before {
-	content: "\F097";
-}
-
-.van-icon-phone-circle-o:before {
-	content: "\F098";
-}
-
-.van-icon-phone-circle:before {
-	content: "\F099";
-}
-
-.van-icon-phone-o:before {
-	content: "\F09A";
-}
-
-.van-icon-phone:before {
-	content: "\F09B";
-}
-
-.van-icon-photo-o:before {
-	content: "\F09C";
-}
-
-.van-icon-photo:before {
-	content: "\F09D";
-}
-
-.van-icon-photograph:before {
-	content: "\F09E";
-}
-
-.van-icon-play-circle-o:before {
-	content: "\F09F";
-}
-
-.van-icon-play-circle:before {
-	content: "\F0A0";
-}
-
-.van-icon-play:before {
-	content: "\F0A1";
-}
-
-.van-icon-plus:before {
-	content: "\F0A2";
-}
-
-.van-icon-point-gift-o:before {
-	content: "\F0A3";
-}
-
-.van-icon-point-gift:before {
-	content: "\F0A4";
-}
-
-.van-icon-points:before {
-	content: "\F0A5";
-}
-
-.van-icon-printer:before {
-	content: "\F0A6";
-}
-
-.van-icon-qr-invalid:before {
-	content: "\F0A7";
-}
-
-.van-icon-qr:before {
-	content: "\F0A8";
-}
-
-.van-icon-question-o:before {
-	content: "\F0A9";
-}
-
-.van-icon-question:before {
-	content: "\F0AA";
-}
-
-.van-icon-records:before {
-	content: "\F0AB";
-}
-
-.van-icon-refund-o:before {
-	content: "\F0AC";
-}
-
-.van-icon-replay:before {
-	content: "\F0AD";
-}
-
-.van-icon-scan:before {
-	content: "\F0AE";
-}
-
-.van-icon-search:before {
-	content: "\F0AF";
-}
-
-.van-icon-send-gift-o:before {
-	content: "\F0B0";
-}
-
-.van-icon-send-gift:before {
-	content: "\F0B1";
-}
-
-.van-icon-service-o:before {
-	content: "\F0B2";
-}
-
-.van-icon-service:before {
-	content: "\F0B3";
-}
-
-.van-icon-setting-o:before {
-	content: "\F0B4";
-}
-
-.van-icon-setting:before {
-	content: "\F0B5";
-}
-
-.van-icon-share:before {
-	content: "\F0B6";
-}
-
-.van-icon-shop-collect-o:before {
-	content: "\F0B7";
-}
-
-.van-icon-shop-collect:before {
-	content: "\F0B8";
-}
-
-.van-icon-shop-o:before {
-	content: "\F0B9";
-}
-
-.van-icon-shop:before {
-	content: "\F0BA";
-}
-
-.van-icon-shopping-cart-o:before {
-	content: "\F0BB";
-}
-
-.van-icon-shopping-cart:before {
-	content: "\F0BC";
-}
-
-.van-icon-shrink:before {
-	content: "\F0BD";
-}
-
-.van-icon-sign:before {
-	content: "\F0BE";
-}
-
-.van-icon-smile-comment-o:before {
-	content: "\F0BF";
-}
-
-.van-icon-smile-comment:before {
-	content: "\F0C0";
-}
-
-.van-icon-smile-o:before {
-	content: "\F0C1";
-}
-
-.van-icon-smile:before {
-	content: "\F0C2";
-}
-
-.van-icon-star-o:before {
-	content: "\F0C3";
-}
-
-.van-icon-star:before {
-	content: "\F0C4";
-}
-
-.van-icon-stop-circle-o:before {
-	content: "\F0C5";
-}
-
-.van-icon-stop-circle:before {
-	content: "\F0C6";
-}
-
-.van-icon-stop:before {
-	content: "\F0C7";
-}
-
-.van-icon-success:before {
-	content: "\F0C8";
-}
-
-.van-icon-thumb-circle-o:before {
-	content: "\F0C9";
-}
-
-.van-icon-thumb-circle:before {
-	content: "\F0CA";
-}
-
-.van-icon-todo-list-o:before {
-	content: "\F0CB";
-}
-
-.van-icon-todo-list:before {
-	content: "\F0CC";
-}
-
-.van-icon-tosend:before {
-	content: "\F0CD";
-}
-
-.van-icon-tv-o:before {
-	content: "\F0CE";
-}
-
-.van-icon-umbrella-circle:before {
-	content: "\F0CF";
-}
-
-.van-icon-underway-o:before {
-	content: "\F0D0";
-}
-
-.van-icon-underway:before {
-	content: "\F0D1";
-}
-
-.van-icon-upgrade:before {
-	content: "\F0D2";
-}
-
-.van-icon-user-circle-o:before {
-	content: "\F0D3";
-}
-
-.van-icon-user-o:before {
-	content: "\F0D4";
-}
-
-.van-icon-video-o:before {
-	content: "\F0D5";
-}
-
-.van-icon-video:before {
-	content: "\F0D6";
-}
-
-.van-icon-vip-card-o:before {
-	content: "\F0D7";
-}
-
-.van-icon-vip-card:before {
-	content: "\F0D8";
-}
-
-.van-icon-volume-o:before {
-	content: "\F0D9";
-}
-
-.van-icon-volume:before {
-	content: "\F0DA";
-}
-
-.van-icon-wap-home-o:before {
-	content: "\F0DB";
-}
-
-.van-icon-wap-home:before {
-	content: "\F0DC";
-}
-
-.van-icon-wap-nav:before {
-	content: "\F0DD";
-}
-
-.van-icon-warn-o:before {
-	content: "\F0DE";
-}
-
-.van-icon-warning-o:before {
-	content: "\F0DF";
-}
-
-.van-icon-warning:before {
-	content: "\F0E0";
-}
-
-.van-icon-weapp-nav:before {
-	content: "\F0E1";
-}
-
-.van-icon-wechat:before {
-	content: "\F0E2";
-}
-
-.van-icon-youzan-shield:before {
-	content: "\F0E3";
-}

+ 0 - 43
src/ttcomponents/sass/hariline.scss

@@ -1,43 +0,0 @@
-@import "./variables";
-@import "./mixins";
-
-$comp: #{$PREFIX}hairline;
-#{$comp},
-#{$comp}-top,
-#{$comp}-left,
-#{$comp}-right,
-#{$comp}-bottom,
-#{$comp}-top-bottom,
-#{$comp}-surround {
-	position: relative;
-
-	&::after {
-		@include hairline;
-	}
-}
-
-#{$comp} {
-	&-top::after {
-		border-top-width: 1px;
-	}
-
-	&-left::after {
-		border-left-width: 1px;
-	}
-
-	&-right::after {
-		border-right-width: 1px;
-	}
-
-	&-bottom::after {
-		border-bottom-width: 1px;
-	}
-
-	&-top-bottom::after {
-		border-width: 1px 0;
-	}
-
-	&-surround::after {
-		border-width: 1px;
-	}
-}

+ 0 - 157
src/ttcomponents/skeleton.vue

@@ -1,157 +0,0 @@
-<!--
- * @file 骨架屏组件
- * @version 0.0.1
- * @author 冉娃娃 <274544338@qq.com>
- * @since 2020/6/15 11:23
--->
-<template>
-  <view class="uv-skeleton">
-    <view v-if="loading" :class="computedClass" :style="customStyle">
-      <view
-        v-if="avatar"
-        :class="computedAvatarClass"
-        :style="computedAvatarStyle"
-      />
-      <view class="uv-skeleton__content">
-        <view
-          v-if="title"
-          class="uv-skeleton__title"
-          :style="'width:' + titleWidth"
-        />
-        <view
-          v-for="(item, index) in row"
-          :key="index"
-          class="uv-skeleton__row"
-          :style="'width:' + (computedIsArray ? rowWidth[index] : rowWidth)"
-        />
-      </view>
-    </view>
-    <view v-else class="uv-skeleton__content">
-      <slot />
-    </view>
-  </view>
-</template>
-
-<script>
-import { baseMixin, bem } from './utils'
-
-export default {
-  name: 'UvSkeleton',
-  props: {
-    ...baseMixin.props,
-    row: {
-      type: Number,
-      default: 0,
-    },
-    title: {
-      type: Boolean,
-      default: false,
-    },
-    avatar: {
-      type: Boolean,
-      default: false,
-    },
-    loading: {
-      type: Boolean,
-      default: true,
-    },
-    animate: {
-      type: Boolean,
-      default: true,
-    },
-    avatarSize: {
-      type: String,
-      default: '64rpx',
-    },
-    avatarShape: {
-      type: String,
-      default: 'round',
-    },
-    titleWidth: {
-      type: String,
-      default: '40%',
-    },
-    rowWidth: {
-      type: [String, Array],
-      default: '100%',
-    },
-  },
-  computed: {
-    computedClass() {
-      const { animate, customClass } = this
-      const bemClass = bem('skeleton', [{ animate }])
-      return `${bemClass} ${customClass}`
-    },
-    computedAvatarClass() {
-      return bem('skeleton__avatar', [this.avatarShape])
-    },
-    computedIsArray() {
-      return this.rowWidth instanceof Array
-    },
-    computedAvatarStyle() {
-      return `width:${this.avatarSize}; height:${this.avatarSize}`
-    },
-  },
-}
-</script>
-
-<style lang="scss" scoped>
-@import './sass/index';
-
-$comp: #{$PREFIX}skeleton;
-#{$comp} {
-  display: flex;
-  box-sizing: border-box;
-  width: 100%;
-  padding: $skeleton-padding;
-
-  &__avatar {
-    flex-shrink: 0;
-    margin-right: $padding-md;
-    background-color: $skeleton-avatar-background-color;
-
-    &-round {
-      border-radius: 100%;
-    }
-  }
-
-  &__content {
-    flex: 1;
-  }
-
-  &__avatar + &__content {
-    padding-top: $padding-xs;
-  }
-
-  &__row,
-  &__title {
-    height: $skeleton-row-height;
-    background-color: $skeleton-row-background-color;
-  }
-
-  &__title {
-    margin: 0;
-  }
-
-  &__row {
-    &:not(:first-child) {
-      margin-top: $skeleton-row-margin-top;
-    }
-  }
-
-  &__title + &__row {
-    margin-top: px2rpx(20);
-  }
-
-  &-animate {
-    animation: uv-skeleton-blink $skeleton-animation-duration ease-in-out
-      infinite;
-  }
-
-  @keyframes uv-skeleton-blink {
-    50% {
-      opacity: 0.6;
-    }
-  }
-}
-</style>

+ 0 - 204
src/ttcomponents/sticky.vue

@@ -1,204 +0,0 @@
-<template>
-  <view
-    :class="customClass"
-    :style="computedRootStyle"
-    class="uv-sticky"
-    :id="customId"
-  >
-    <view :class="computedWrapClass" :style="computedWrapStyle">
-      <slot />
-    </view>
-  </view>
-</template>
-
-<script>
-import { baseMixin, bem, getRect } from './utils'
-// clip from this.data as it will throw an observe bug in vue
-const OBSERVER = {
-  contentObserver: null,
-  containerObserver: null,
-}
-const ROOT_ELEMENT = '.uv-sticky'
-export default {
-  name: 'UvSticky',
-  mixins: [getRect],
-  data() {
-    return {
-      height: 0,
-      fixed: false,
-      wrapStyle: '',
-      containerStyle: '',
-      windowTop: uni.getSystemInfoSync().windowTop,
-    }
-  },
-  props: {
-    ...baseMixin.props,
-    // 吸顶时与顶部的距离,单位px
-    offsetTop: {
-      type: Number,
-      default: 0,
-    },
-    // 吸顶时的 z-index
-    zIndex: {
-      type: Number,
-      default: 99,
-    },
-    // todo 这个是干什么用的?
-    // 一个函数,返回容器对应的 NodesRef 节点
-    container: {
-      type: Function,
-      default: null,
-    },
-    // 是否禁用固定功能
-    disabled: {
-      type: Boolean,
-      default: false,
-    },
-  },
-  computed: {
-    computedRootStyle() {
-      return `${this.customStyle}${this.containerStyle}`
-    },
-    computedWrapClass() {
-      return bem('sticky-wrap', { fixed: this.fixed })
-    },
-    computedWrapStyle() {
-      return this.wrapStyle
-    },
-  },
-  mounted() {
-    this.initObserver()
-  },
-  watch: {
-    offsetTop() {
-      this.observeContent()
-    },
-    container() {
-      if (this.height) {
-        this.observeContainer()
-      }
-    },
-    fixed() {
-      this.$nextTick(() => {
-        this.setStyle()
-      })
-    },
-    disabled(newValue) {
-      if (newValue) {
-        this.disconnectObserver()
-      } else {
-        this.initObserver()
-      }
-    },
-  },
-  methods: {
-    async initObserver() {
-      if (this.disabled) {
-        return
-      }
-      this.disconnectObserver()
-      const rect = await this.getRect(ROOT_ELEMENT)
-      this.height = rect.height
-      this.$nextTick(() => {
-        this.observeContent()
-        this.observeContainer()
-      })
-    },
-    disconnectObserver(observerName) {
-      if (observerName && this[observerName]) {
-        this[observerName].disconnect()
-      } else {
-        if (this.contentObserver) {
-          this.contentObserver.disconnect()
-        }
-        if (this.containerObserver) {
-          this.containerObserver.disconnect()
-        }
-      }
-    },
-    createObserver(observerName, top) {
-      this.disconnectObserver(observerName)
-      // todo 传入this后,会在h5下报错
-      const observer = uni.createIntersectionObserver(
-        // #ifdef MP
-        this,
-        // #endif
-        { thresholds: [0, 1] },
-      )
-      OBSERVER[observerName] = observer
-      observer
-        .relativeToViewport({ top: top - (this.windowTop || 0) })
-        .observe(ROOT_ELEMENT, (res) => {
-          this.setFixed(res.boundingClientRect.top)
-        })
-    },
-    observeContent() {
-      if (this.disabled) {
-        return
-      }
-      const { offsetTop } = this
-      this.createObserver('contentObserver', -offsetTop)
-    },
-    async observeContainer() {
-      if (this.disabled) {
-        return
-      }
-      if (typeof this.container !== 'function') {
-        return
-      }
-      const { height } = this
-      const rect = await this.getContainerRect()
-      this.containerHeight = rect.height
-      this.createObserver('containerObserver', this.containerHeight - height)
-    },
-    getContainerRect() {
-      const nodesRef = this.container()
-      return new Promise((resolve) => {
-        nodesRef.boundingClientRect(resolve).exact()
-      })
-    },
-    setFixed(top) {
-      const { offsetTop, height, containerHeight } = this
-      // todo 这一坨后面再来细究
-      const fixed =
-        containerHeight && height
-          ? top > height - containerHeight && top < offsetTop
-          : top < offsetTop
-      this.fixed = fixed
-      this.$emit('scroll', {
-        scrollTop: top,
-        isFixed: fixed,
-      })
-    },
-    setStyle() {
-      const { offsetTop, height, fixed, zIndex, windowTop } = this
-      this.wrapStyle = ''
-      this.containerStyle = ''
-      if (fixed) {
-        this.wrapStyle = `top: ${offsetTop + (windowTop || 0)}px;`
-        this.containerStyle = `height: ${height}px; z-index: ${zIndex};`
-      }
-    },
-  },
-  destroyed() {
-    this.disconnectObserver()
-  },
-}
-</script>
-
-<style scoped lang="scss">
-@import './sass/_index.scss';
-
-$comp: #{$PREFIX}sticky;
-
-#{$comp} {
-  position: relative;
-  font-size: $font-size-md;
-
-  &-wrap-fixed {
-    position: fixed;
-    right: 0;
-    left: 0;
-  }
-}
-</style>

+ 0 - 284
src/ttcomponents/swiper-dot.vue

@@ -1,284 +0,0 @@
-<!-- author: ranwawa -->
-<!-- since: 2020/2/14 -->
-<!-- desc:  -->
-<!-- remark:  -->
-<!-- eslint-disable max-len -->
-<template>
-  <view class="uv-swiper__warp">
-    <slot />
-    <view
-      v-if="mode === 'default'"
-      :style="{ bottom: dots.bottom + 'rpx' }"
-      class="uv-swiper__dots-box"
-    >
-      <view
-        v-for="(item, index) in info"
-        :key="index"
-        :style="{
-          width: (index === current ? dots.width * 2 : dots.width) + 'rpx',
-          height: dots.width / 3 + 'rpx',
-          'background-color':
-            index !== current
-              ? dots.backgroundColor
-              : dots.selectedBackgroundColor,
-          'border-radius': '0',
-        }"
-        class="uv-swiper__dots-item uv-swiper__dots-bar"
-      />
-    </view>
-    <view
-      v-else-if="mode === 'dot'"
-      :style="{ bottom: dots.bottom + 'rpx' }"
-      class="uv-swiper__dots-box"
-    >
-      <view
-        v-for="(item, index) in info"
-        :key="index"
-        :style="{
-          width: dots.width + 'rpx',
-          height: dots.height + 'rpx',
-          'background-color':
-            index !== current
-              ? dots.backgroundColor
-              : dots.selectedBackgroundColor,
-          border: index !== current ? dots.border : dots.selectedBorder,
-        }"
-        class="uv-swiper__dots-item"
-      />
-    </view>
-    <view
-      v-else-if="mode === 'round'"
-      :style="{ bottom: dots.bottom + 'rpx' }"
-      class="uv-swiper__dots-box"
-    >
-      <view
-        v-for="(item, index) in info"
-        :key="index"
-        :class="[index === current && 'uv-swiper__dots-long']"
-        :style="{
-          width: (index === current ? dots.width * 3 : dots.width) + 'rpx',
-          height: dots.height + 'rpx',
-          'background-color':
-            index !== current
-              ? dots.backgroundColor
-              : dots.selectedBackgroundColor,
-          border: index !== current ? dots.border : dots.selectedBorder,
-        }"
-        class="uv-swiper__dots-item"
-      />
-    </view>
-    <view
-      v-else-if="mode === 'nav'"
-      :style="{ 'background-color': dotsStyles.backgroundColor, bottom: '0' }"
-      class="uv-swiper__dots-box uv-swiper__dots-nav"
-    >
-      <text
-        :style="{ color: dotsStyles.color }"
-        class="uv-swiper__dots-nav-item"
-      >
-        {{ current + 1 + '/' + info.length }}
-        {{ info[current][field] ? ' ' + info[current][field] : '' }}
-      </text>
-    </view>
-    <view
-      v-else-if="mode === 'indexes'"
-      :style="{ bottom: dots.bottom + 'rpx' }"
-      class="uv-swiper__dots-box"
-    >
-      <view
-        v-for="(item, index) in info"
-        :key="index"
-        :style="{
-          width: dots.width + 'rpx',
-          height: dots.height + 'rpx',
-          color: index === current ? dots.selectedColor : dots.color,
-          'background-color':
-            index !== current
-              ? dots.backgroundColor
-              : dots.selectedBackgroundColor,
-          border: index !== current ? dots.border : dots.selectedBorder,
-        }"
-        class="uv-swiper__dots-item uv-swiper__dots-indexes"
-      >
-        <text class="uv-swiper__dots-indexes-text">{{ index + 1 }}</text>
-      </view>
-    </view>
-  </view>
-</template>
-
-<script>
-import { baseMixin } from './utils'
-/**
- * SwiperDot 轮播图指示点
- * @description 自定义轮播图指示点
- * @tutorial https://ext.dcloud.net.cn/plugin?id=284
- * @property {Number} current 当前指示点索引,必须是通过 `swiper` 的 `change` 事件获取到的 `e.detail.current`
- * @property {String} mode = [default|round|nav|indexes] 指示点的类型
- *  @value default 默认指示点
- *  @value round 圆形指示点
- *  @value nav 条形指示点
- *  @value indexes 索引指示点
- * @property {String} field mode 为 nav 时,显示的内容字段(mode = nav 时必填)
- * @property {String} info 轮播图的数据,通过数组长度决定指示点个数
- * @property {Object} dotsStyles 指示点样式
- * @event {Function} clickItem 组件触发点击事件时触发,e={currentIndex}
- */
-export default {
-  name: 'UvSwiperDot',
-  props: {
-    ...baseMixin.props,
-    info: {
-      type: Array,
-      default() {
-        return []
-      },
-    },
-    current: {
-      type: Number,
-      default: 0,
-    },
-    dotsStyles: {
-      type: Object,
-      default() {
-        return {}
-      },
-    },
-    // 类型 :default(默认) indexes long nav
-    mode: {
-      type: String,
-      default: 'default',
-      validate: (value) =>
-        ['default', 'round', 'nav', 'indexes'].includes(value),
-    },
-    // 只在 nav 模式下生效,变量名称
-    field: {
-      type: String,
-      default: '',
-    },
-  },
-  data() {
-    return {
-      dots: {
-        width: 16,
-        height: 16,
-        bottom: 20,
-        color: '#fff',
-        backgroundColor: 'rgba(0, 0, 0, .3)',
-        border: '1px rgba(0, 0, 0, .3) solid',
-        selectedBackgroundColor: '#333',
-        selectedBorder: '1px rgba(0, 0, 0, .9) solid',
-      },
-    }
-  },
-  watch: {
-    dotsStyles(newVal) {
-      this.dots = Object.assign(this.dots, this.dotsStyles)
-    },
-    mode(newVal) {
-      if (newVal === 'indexes') {
-        this.dots.width = 40
-        this.dots.height = 40
-      } else {
-        this.dots.width = 16
-        this.dots.height = 16
-      }
-    },
-  },
-  created() {
-    if (this.mode === 'indexes') {
-      this.dots.width = 40
-      this.dots.height = 40
-    }
-    this.dots = Object.assign(this.dots, this.dotsStyles)
-  },
-}
-</script>
-
-<style lang="scss" scoped>
-@import './sass/_index.scss';
-
-$comp: #{$PREFIX}swiper;
-
-#{$comp} {
-  font-size: $font-size-md;
-  &__warp {
-    /* #ifndef APP-NVUE */
-    position: relative;
-    /* #endif */
-    display: flex;
-    overflow: hidden;
-    flex: 1;
-    flex-direction: column;
-  }
-
-  &__dots-box {
-    position: absolute;
-    right: 0;
-    bottom: $swiper-dot-box-bottom;
-    left: 0;
-    /* #ifndef APP-NVUE */
-    display: flex;
-    /* #endif */
-    align-items: center;
-    flex: 1;
-    flex-direction: row;
-    justify-content: center;
-  }
-
-  &__dots-item {
-    width: $swiper-dot-item-width;
-    margin-left: $swiper-dot-item-margin;
-    border-radius: $swiper-dot-item-radius;
-    background-color: rgba(0, 0, 0, 0.4);
-    // transition: width 0.2s linear;  不要取消注释,不然会不能变色
-  }
-
-  &__dots-item:first-child {
-    margin: 0;
-  }
-
-  &__dots-default {
-    border-radius: $swiper-dot-item-radius;
-  }
-
-  &__dots-long {
-    border-radius: $swiper-dot-default-radius;
-  }
-
-  &__dots-bar {
-    border-radius: $swiper-dot-default-radius;
-  }
-
-  &__dots-nav {
-    bottom: 0;
-    display: flex;
-    /* #ifndef APP-NVUE */
-    align-items: center;
-    /* #endif */
-    flex: 1;
-    flex-direction: row;
-    justify-content: flex-start;
-    height: $swiper-dot-nav-height;
-    background-color: rgba(0, 0, 0, 0.2);
-  }
-
-  &__dots-nav-item {
-    margin: 0 $swiper-dot-item-margin;
-    color: #fff;
-    font-size: $swiper-dot-item-size;
-  }
-
-  &__dots-indexes {
-    /* #ifndef APP-NVUE */
-    display: flex;
-    /* #endif */
-    align-items: center;
-    justify-content: center;
-
-    &-text {
-      color: #fff;
-      font-size: $swiper-dot-text-size;
-    }
-  }
-}
-</style>

+ 0 - 132
src/ttcomponents/tab.vue

@@ -1,132 +0,0 @@
-<template>
-  <view v-show="shouldShow" class="uv-tab-pane" :id="customId">
-    {{ index }}
-    <slot v-if="shouldRender" />
-  </view>
-</template>
-
-<script>
-import { baseMixin, eventBus, bem, pick } from './utils'
-
-export default {
-  name: 'UvTab',
-  data() {
-    return {
-      index: 0,
-      inited: false,
-      active: false,
-      shouldShow: true,
-      shouldRender: true,
-    }
-  },
-  props: {
-    ...baseMixin.props,
-    // 标签名称,作为匹配的标识符
-    name: {
-      type: [String, Number],
-      default: '',
-    },
-    // 标题
-    title: {
-      type: String,
-      default: '',
-    },
-    // 是否禁用标签
-    disabled: {
-      type: Boolean,
-      default: false,
-    },
-    // 是否显示小红点
-    dot: {
-      type: Boolean,
-      default: false,
-    },
-    // 图标右上角提示信息
-    info: {
-      type: [String, Number],
-      default: '',
-    },
-    // 自定义标题样式
-    titleStyle: {
-      type: String,
-      default: '',
-    },
-  },
-  computed: {
-    computedClass() {
-      const { active } = this
-      return bem('tab-pane', {
-        active,
-        inactive: !active,
-      })
-    },
-  },
-  watch: {
-    name: () => this.update(),
-    title: () => this.update(),
-    disabled: () => this.update(),
-    dot: () => this.update(),
-    info: () => this.update(),
-  },
-  mounted() {
-    eventBus.$emit(
-      'linkedTab',
-      this,
-      // pick(this, [
-      //   ...Object.keys(this.$data),
-      //   ...Object.keys(this.$props),
-      // ]),
-    )
-  },
-  methods: {
-    getComputedName() {
-      return this.name !== '' ? this.name : this.index
-    },
-    update() {
-      eventBus.$emit('updateTabs')
-    },
-    updateRender(active, parent) {
-      const { lazyRender, animated } = parent
-      this.inited = this.inited || active
-      this.active = active
-      this.shouldRender = this.inited || !lazyRender
-      this.shouldShow = active || animated
-    },
-  },
-  destroyed() {
-    eventBus.$emit('unLinkTab', this.index)
-  },
-}
-</script>
-
-<style scoped lang="scss">
-@import './sass/_index.scss';
-
-$comp: #{$PREFIX}tab;
-
-:host {
-  flex-shrink: 0;
-  box-sizing: border-box;
-  width: 100%;
-}
-
-#{$comp} {
-  font-size: $font-size-md;
-  &-pane {
-    box-sizing: border-box;
-    overflow-y: auto;
-    -webkit-overflow-scrolling: touch;
-
-    /* todo 这两个css属性有区别吗? */
-    // 感觉效果是一样的啊
-    &-active {
-      height: auto;
-    }
-
-    &-inactive {
-      height: 0;
-      overflow: visible;
-    }
-  }
-}
-</style>

+ 0 - 526
src/ttcomponents/tabs.vue

@@ -1,526 +0,0 @@
-<template>
-  <view :class="computedRootClass" :id="customId">
-    <uv-sticky
-      :disabled="sticky"
-      :z-index="zIndex"
-      :offset-top="offsetTop"
-      :container="container"
-      @scroll="handleTouchScroll"
-    >
-      <view :class="computedWrapClass">
-        <slot name="nav-left" />
-        <scroll-view
-          :class="computedScrollClass"
-          :style="computedScrollStyle"
-          :scroll-x="scrollable"
-          scroll-with-animation
-          :scroll-left="scrollLeft"
-        >
-          <view :class="computedNavClass">
-            <view
-              v-if="type === 'line'"
-              :style="lineStyle"
-              class="uv-tabs-line"
-            ></view>
-            <view
-              v-for="(item, index) in computedTabs"
-              :key="index"
-              :class="computedTabClass + methodTabClass(index, item.disabled)"
-              :style="'' + methodTabStyle(index)"
-              @click="handleClick(index)"
-            >
-              <view
-                :class="{ 'uv-ellipsis': ellipsis }"
-                :style="item.titleStyle"
-              >
-                {{ item.title }}
-                <uv-info
-                  v-if="item.info !== null || item.dot"
-                  :info="item.info"
-                  :dot="item.dot"
-                  custom-class="uv-tab_title-info"
-                />
-              </view>
-            </view>
-          </view>
-        </scroll-view>
-        <slot name="nav-right" />
-      </view>
-    </uv-sticky>
-    <!-- 内容区域 -->
-    <!-- todo 这两个节点能否合并为一个节点 -->
-    <view
-      class="uv-tabs-content"
-      @touchstart="handleTouch($event, 'start')"
-      @touchmove="handleTouch($event, 'move')"
-      @touchend="handleTouch($event, 'end')"
-      @touchcancel="handleTouch($event, 'end')"
-    >
-      <view
-        :class="{ 'uv-tabs-track-animated': animated }"
-        :style="computedTrackStyle"
-        class="uv-tabs-track"
-      >
-        <slot />
-      </view>
-    </view>
-  </view>
-</template>
-
-<script>
-import {
-  eventBus,
-  baseMixin,
-  Touch,
-  bem,
-  pick,
-  addUnit,
-  getRect,
-} from './utils'
-import uvSticky from './sticky.vue'
-import uvInfo from './info.vue'
-
-const touch = new Touch()
-export default {
-  name: 'UvTabs',
-  components: {
-    uvInfo,
-    uvSticky,
-  },
-  mixins: [getRect],
-  data() {
-    return {
-      container: null,
-      currentIndex: 0,
-      tabs: [],
-      computedTabs: [],
-      children: [],
-      scrollable: false,
-      scrollLeft: 0,
-      lineStyle: '',
-    }
-  },
-  props: {
-    ...baseMixin.props,
-    // 是否开启手势滑动切换
-    swipeable: {
-      type: Boolean,
-      default: false,
-    },
-    // 样式风格,可选值为card
-    type: {
-      type: String,
-      default: 'line',
-      validate: (value) => ['line', 'card'].includes(value),
-    },
-    // 标签颜色
-    color: {
-      type: String,
-      default: '',
-    },
-    // 是否展示外边框,仅在line风格下生效
-    border: {
-      type: Boolean,
-      default: true,
-    },
-    // 底部条宽度 (px)
-    lineWidth: {
-      type: [String, Number],
-      default: -1,
-    },
-    // 底部条高度 (px)
-    lineHeight: {
-      type: [String, Number],
-      default: '3px',
-    },
-    // 动画时间 (单位秒)
-    duration: {
-      type: Number,
-      default: 0.3,
-    },
-    titleActiveColor: {
-      type: String,
-      default: '',
-    },
-    titleInActiveColor: {
-      type: String,
-      default: '',
-    },
-    // 当前选中标签的标识符
-    active: {
-      type: [String, Number],
-      default: 0,
-    },
-    // 是否省略过长的标题文字
-    ellipsis: {
-      type: Boolean,
-      default: true,
-    },
-    // 是否使用动画切换 Tabs
-    animated: {
-      type: Boolean,
-      default: false,
-    },
-    // 标签栏样式类
-    navClass: {
-      type: String,
-      default: '',
-    },
-    // 标签样式类
-    tabClass: {
-      type: String,
-      default: '',
-    },
-    // 标签激活态样式类
-    tabActiveClass: {
-      type: String,
-      default: '',
-    },
-    // uv-sticky相关属性
-    // 是否使用粘性定位布局
-    sticky: {
-      type: Boolean,
-      default: false,
-    },
-    // z-index层级
-    zIndex: {
-      type: Number,
-      default: 1,
-    },
-    // 距离顶部多高开始吸顶
-    offsetTop: {
-      type: Number,
-      default: 0,
-    },
-  },
-  computed: {
-    computedRootClass() {
-      const { type } = this
-      return `${this.customClass} ${bem('tabs', [type])}`
-    },
-    computedWrapClass() {
-      const bemClass = bem('tabs-wrap', { scrollable: this.scrollable })
-      const otherClass =
-        this.type === 'line' && this.border ? 'uv-hairline-top-bottom' : ''
-      return `${bemClass} ${otherClass}`
-    },
-    computedScrollClass() {
-      return bem('tabs-scroll', [this.type])
-    },
-    computedScrollStyle() {
-      return this.color ? `border-color: ${this.color};` : ''
-    },
-    computedNavClass() {
-      return `${this.navClass} ${bem('tabs-nav', [this.type])}`
-    },
-    computedTabClass() {
-      const { ellipsis, tabClass } = this
-      const bemCls = bem('tab', { complete: !ellipsis })
-      const tabCls = tabClass && `${tabClass} `
-      const ellipsisCls = ellipsis && 'uv-ellipsis '
-      return `${tabCls}${ellipsisCls}${bemCls}`
-    },
-    computedLineStyle() {
-      if (this.type !== 'line') {
-        return ''
-      }
-      const { color, duration, currentIndex, lineWidth, lineHeight } = this
-      return ''
-    },
-    computedTrackStyle() {
-      if (!this.animate) {
-        return ''
-      }
-      const { duration, currentIndex } = this
-      return `transform: translateX(${
-        -100 * currentIndex
-      }%); transition-duration: ${duration}s`
-    },
-  },
-  watch: {
-    active(newValue) {
-      if (newValue !== this.getCurrentName()) {
-        this.setCurrentIndexByName(newValue)
-      }
-    },
-  },
-  created() {
-    eventBus.$on('updateTabs', this.updateTabs())
-    eventBus.$on('linkedTab', (tab) => {
-      try {
-        const index = this.tabs.length
-        tab.index = index
-        this.tabs[index] = tab
-        this.computedTabs.push(
-          pick(tab, [...Object.keys(tab.$data), ...Object.keys(tab.$props)]),
-        )
-      } catch (e) {
-        console.error(e)
-      }
-    })
-    eventBus.$on('unLinkedTab', (tab) => {})
-  },
-  mounted() {
-    // this.container = uni.createSelectorQuery().select('.uv-tabs');
-    this.setLine(true)
-    this.setTrack()
-    this.scrollIntoView()
-  },
-  methods: {
-    async setLine(skipTransition) {
-      if (this.type !== 'line') {
-        return
-      }
-      const { color, duration, currentIndex, lineWidth, lineHeight } = this
-      const rects = await this.getRect('.uv-tab', true)
-      const rect = rects[currentIndex]
-      if (!rect) {
-        return
-      }
-      const width = lineWidth !== -1 ? lineWidth : rect.width / 2
-      const height =
-        lineHeight !== -1
-          ? `height: ${addUnit(lineHeight)}; border-radius: ${addUnit(
-              lineHeight,
-            )};`
-          : ''
-      let left = rects
-        .slice(0, currentIndex)
-        .reduce((prev, curr) => prev + curr.width, 0)
-      left += (rect.width - width) / 2
-      const transition = skipTransition
-        ? ''
-        : `transition-duration: ${duration}s`
-      this.lineStyle = `
-        ${height}
-        width: ${addUnit(width)};
-        background-color: ${color};
-        transform: translateX(${left}px);
-        ${transition}
-      `
-      console.log(this.lineStyle, 123)
-    },
-    setTrack() {},
-    scrollIntoView() {},
-    updateTabs() {},
-    getCurrentName() {
-      const activeTab = this.children[this.currentIndex]
-      if (activeTab) {
-        return activeTab.getComputedName()
-      }
-      return ''
-    },
-    handleTouch(e, m) {
-      if (this.swipeable) {
-        const method = `handleTouch${m}`
-        this[method](e.touches[0])
-      }
-    },
-    handleTouchStart(point) {
-      touch.setStartPoint(point)
-    },
-    handleTouchMove() {},
-    handleTouchEnd(point) {
-      const { directionH } = touch.getDirection(point)
-      const { currentIndex, tabs } = this
-      // todo 这里和有赞是反的,得验证一下
-      switch (directionH) {
-        case 'right':
-          if (currentIndex < tabs.length - 1) {
-            this.setCurrentIndex(currentIndex + 1)
-          }
-          break
-        case 'left':
-          if (currentIndex > 0) {
-            this.setCurrentIndex(currentIndex - 1)
-          }
-          break
-        default:
-          break
-      }
-    },
-    handleTouchScroll(e) {
-      this.$emit('scroll', e.detail)
-    },
-    handleClick(index) {
-      const child = this.children[index]
-      if (child.disabled) {
-        this.$emit('disable')
-      } else {
-        this.setCurrentIndex(index)
-        this.$nextTick(() => this.$emit('click'))
-      }
-    },
-    setCurrentIndex(currentIndex) {
-      const { children = [] } = this
-      if (
-        typeof currentIndex !== 'number' ||
-        currentIndex >= children.length ||
-        currentIndex < 0
-      ) {
-        return
-      }
-      if (currentIndex === this.currentIndex) {
-        return
-      }
-      children.forEach((item, index) => {
-        const active = index === currentIndex
-        if (active !== item.data.active || !item.inited) {
-          item.updateRender(active, this)
-        }
-      })
-      const shouldEmitChange = this.currentIndex !== null
-      this.currentIndex = currentIndex
-      this.nextTick(() => {
-        this.setLine()
-        this.setTrack()
-        this.scrollIntoView()
-        // todo 官方是trigger而非triggerEvent
-        this.$emit('input')
-        if (shouldEmitChange) {
-          this.$emit('change')
-        }
-      })
-    },
-    methodTabClass(index, disabled) {
-      const cls = []
-      if (index === this.currentIndex) {
-        cls.push(this.tabActiveClass)
-        cls.push('uv-tab-active')
-      }
-      if (disabled) {
-        cls.push('uv-tab-disabled')
-      }
-      return cls.join(' ')
-    },
-    methodTabStyle(index) {
-      const {
-        ellipsis,
-        color,
-        type,
-        disabled,
-        titleActiveColor,
-        titleInactiveColor,
-        swipeThreshold,
-        scrollable,
-        currentIndex,
-      } = this
-      const styles = []
-      const isCard = type === 'card'
-      const titleColor =
-        index === currentIndex ? titleActiveColor : titleInactiveColor
-      if (color && isCard) {
-        styles.push(`border-color: ${color};`)
-        if (!disabled) {
-          if (this.active) {
-            styles.push(`background-color: ${color}`)
-          } else {
-            styles.push(`color: ${color}`)
-          }
-        }
-      }
-      if (titleColor) {
-        styles.push(`color: ${titleColor};`)
-      }
-      if (scrollable && ellipsis) {
-        styles.push(`flex-basis: ${88 / swipeThreshold}%;`)
-      }
-      return styles.join(';')
-    },
-  },
-}
-</script>
-
-<style scoped lang="scss">
-@import './sass/_index.scss';
-
-$comp: #{$PREFIX}tabs;
-
-#{$comp} {
-  position: relative;
-  -webkit-tap-highlight-color: transparent;
-  font-size: $font-size-md;
-
-  &-wrap {
-    display: flex;
-    overflow: hidden;
-
-    &-scrollable {
-      .uv-tab {
-        flex: 0 0 22%;
-      }
-    }
-  }
-
-  &-scroll {
-    background-color: $tabs-nav-background-color;
-
-    &-line {
-      box-sizing: content-box;
-      height: calc(
-        100% + 15px
-      ); /* 15px padding to hide scrollbar in mobile safari */
-    }
-
-    &-card {
-      margin: 0 $padding-md;
-    }
-  }
-
-  &-nav {
-    position: relative;
-    display: flex;
-    user-select: none;
-
-    &-card {
-      box-sizing: border-box;
-      height: $tabs-card-height;
-      border: $border-width-base solid $tabs-default-color;
-      border-radius: $border-radius-sm;
-
-      .van-tab {
-        color: $tabs-default-color;
-        border-right: $border-width-base solid $tabs-default-color;
-        /*line-height: calc($tabs-card-height - 2 * $border-width-base);*/
-
-        &:last-child {
-          border-right: none;
-        }
-
-        &.van-tab--active {
-          color: $white;
-          background-color: $tabs-default-color;
-        }
-
-        &-disabled {
-          color: $tab-disabled-text-color;
-        }
-      }
-    }
-  }
-
-  &-line-wrap {
-    /* todo 这个应该无用吧*/
-    height: $tabs-line-height;
-  }
-
-  &-track {
-    position: relative;
-    width: 100%;
-    height: 100%;
-
-    &-animated {
-      display: flex;
-      transition-property: transform;
-    }
-  }
-
-  &-content {
-    overflow: hidden;
-  }
-
-  &-card-wrap {
-    height: $tabs-card-height;
-  }
-}
-</style>

+ 0 - 198
src/ttcomponents/tag.vue

@@ -1,198 +0,0 @@
-<template>
-  <view :id="customId" :class="computedClass" :style="computedStyle">
-    <slot />
-    <uv-icon
-      v-if="closeable"
-      name="cross"
-      custom-class="uv-tag-close"
-      @click="handleClick"
-    />
-  </view>
-</template>
-
-<script>
-import { baseMixin, bem, computeStyle } from './utils'
-import uvIcon from './icon.vue'
-
-const TYPE_LIST = ['default', 'primary', 'success', 'danger', 'warning']
-const SIZE_LIST = ['', 'medium', 'large']
-export default {
-  name: 'UvTag',
-  components: {
-    uvIcon,
-  },
-  props: {
-    ...baseMixin.props,
-    // 类型
-    type: {
-      type: String,
-      default: 'default',
-      validate: (value) => TYPE_LIST.includes(value),
-    },
-    // 大小
-    size: {
-      type: String,
-      default: '',
-      validate: (value) => SIZE_LIST.includes(value),
-    },
-    // 标签颜色
-    color: {
-      type: String,
-      default: '',
-    },
-    // 是否为空心样式
-    plain: {
-      type: Boolean,
-      default: false,
-    },
-    // 是否为圆角样式
-    round: {
-      type: Boolean,
-      default: false,
-    },
-    // 是否为标记样式
-    mark: {
-      type: Boolean,
-      default: false,
-    },
-    // 文本颜色,优先级高于color属性
-    textColor: {
-      type: String,
-      default: '',
-    },
-    // 可关闭标签
-    closeable: {
-      type: Boolean,
-      default: false,
-    },
-  },
-  computed: {
-    computedClass() {
-      const { type, size, mark, plain, round, customClass } = this
-      const bemClass = bem('tag', [type, size, { mark, plain, round }])
-      return `${customClass} ${bemClass} ${plain ? 'uv-hairline-surround' : ''}`
-    },
-    computedStyle() {
-      const { color, plain, textColor, customStyle } = this
-      const style = {
-        'background-color': color && !plain ? color : '',
-        color: textColor || (color && plain) ? textColor || color : '',
-      }
-      console.log(`${customStyle} ${computeStyle(style)}`)
-      return `${customStyle} ${computeStyle(style)}`
-    },
-  },
-  methods: {
-    handleClick() {
-      this.$emit('close')
-    },
-  },
-}
-</script>
-
-<style scoped lang="scss">
-@import './sass/_index.scss';
-
-// Tag
-$tag-padding: 0.2em 0.5em;
-$tag-font-size: $font-size-xs;
-$tag-medium-font-size: $font-size-sm;
-$tag-large-font-size: $font-size-md;
-$tag-text-color: $white;
-$tag-border-radius: 0.2em;
-$tag-round-border-radius: $border-radius-max;
-$tag-dander-color: $red;
-$tag-primary-color: $blue;
-$tag-success-color: $green;
-$tag-warning-color: $orange;
-$tag-default-color: $gray-6;
-$tag-plain-background-color: $white;
-$comp: #{$PREFIX}tag;
-
-#{$comp} {
-  display: inline-flex;
-  align-items: center;
-  line-height: normal;
-  padding: $tag-padding;
-  color: $tag-text-color;
-  font-size: $tag-font-size;
-  border-radius: $tag-border-radius;
-
-  &::after {
-    border-color: currentColor;
-    border-radius: $tag-border-radius * 2;
-  }
-
-  &-default {
-    background-color: $tag-default-color;
-
-    &.uv-tag-plain {
-      color: $tag-default-color;
-    }
-  }
-
-  &-danger {
-    background-color: $tag-dander-color;
-
-    &.uv-tag-plain {
-      color: $tag-dander-color;
-    }
-  }
-
-  &-primary {
-    background-color: $tag-primary-color;
-
-    &.uv-tag-plain {
-      color: $tag-primary-color;
-    }
-  }
-
-  &-success {
-    background-color: $tag-success-color;
-
-    &.uv-tag-plain {
-      color: $tag-success-color;
-    }
-  }
-
-  &-warning {
-    background-color: $tag-warning-color;
-
-    &.uv-tag-plain {
-      color: $tag-warning-color;
-    }
-  }
-
-  &-plain {
-    background-color: $tag-plain-background-color;
-  }
-
-  &-mark {
-    padding-right: 0.7em;
-
-    &,
-    &::after {
-      border-radius: 0 $tag-round-border-radius $tag-round-border-radius 0;
-    }
-  }
-
-  &-round {
-    &,
-    &::after {
-      border-radius: $tag-round-border-radius;
-    }
-  }
-
-  &-medium {
-    font-size: $tag-medium-font-size;
-  }
-
-  &-large {
-    font-size: $tag-large-font-size;
-  }
-
-  &-close {
-    margin-left: $tag-margin;
-  }
-}
-</style>

+ 0 - 116
src/ttcomponents/transition.vue

@@ -1,116 +0,0 @@
-<template>
-  <view
-    class="uv-transition"
-    :id="customId"
-    :style="computedStyle"
-    :class="computedRootClass"
-    @transitionend="handleTransitionEnd"
-    @click="$emit('click')"
-  >
-    <slot />
-  </view>
-</template>
-
-<script>
-import { baseMixin, transition, transitionProps } from './utils'
-
-export default {
-  name: 'UvTransition',
-  mixins: [transition],
-  props: {
-    ...baseMixin.props,
-    ...transitionProps,
-  },
-}
-</script>
-
-<style scoped lang="scss">
-@import './sass/_index.scss';
-
-$comp: #{$PREFIX}transition;
-
-#{$comp} {
-  transition-property: opacity, transform;
-  transition-timing-function: ease;
-}
-
-#{$PREFIX}fade {
-  &-enter-active,
-  &-leave-active {
-    transition-property: opacity;
-  }
-
-  &-enter,
-  &-leave-to {
-    opacity: 0;
-  }
-
-  &-up-enter-active,
-  &-up-leave-active,
-  &-down-enter-active,
-  &-down-leave-active,
-  &-left-enter-active,
-  &-left-leave-active,
-  &-right-enter-active,
-  &-right-leave-active {
-    transition-property: opacity, transform;
-  }
-
-  &-up-enter,
-  &-up-leave-to {
-    transform: translate3d(0, 100%, 0);
-    opacity: 0;
-  }
-
-  &-down-enter,
-  &-down-leave-to {
-    transform: translate3d(0, -100%, 0);
-    opacity: 0;
-  }
-
-  &-left-enter,
-  &-left-leave-to {
-    transform: translate3d(-100%, 0, 0);
-    opacity: 0;
-  }
-
-  &-right-enter,
-  &-right-leave-to {
-    transform: translate3d(100%, 0, 0);
-    opacity: 0;
-  }
-}
-
-#{$PREFIX}slide {
-  &-up-enter-active,
-  &-up-leave-active,
-  &-down-enter-active,
-  &-down-leave-active,
-  &-left-enter-active,
-  &-left-leave-active,
-  &-right-enter-active,
-  &-right-leave-active {
-    transition-property: transform;
-  }
-
-  &-up-enter,
-  &-up-leave-to {
-    transform: translate3d(0, 100%, 0);
-  }
-
-  &-down-enter,
-  &-down-leave-to {
-    transform: translate3d(0, -100%, 0);
-  }
-
-  &-left-enter,
-  &-left-leave-to {
-    transform: translate3d(-100%, 0, 0);
-  }
-
-  &-right-enter,
-  &-right-leave-to {
-    transform: translate3d(100%, 0, 0);
-  }
-}
-</style>

+ 0 - 430
src/ttcomponents/uploader.vue

@@ -1,430 +0,0 @@
-<!-- author: ranwawa -->
-<!-- since: 2020/2/12 -->
-<!-- desc:  -->
-<!-- remark:  -->
-<template>
-  <view class="uv-uploader">
-    <!-- 预览样式 -->
-    <template v-if="previewImage">
-      <view
-        v-for="(item, index) in lists"
-        :key="index"
-        class="uv-uploader-preview"
-      >
-        <!-- 图片 -->
-        <image
-          v-if="item.isImage"
-          :style="computedFileStyle"
-          class="uv-uploader-preview-image"
-          :mode="imageFit"
-          :src="item.showSrc"
-          :alt="item.showAlt"
-          @click="doPreview(item.showSrc)"
-        />
-        <!-- 视频/文件 -->
-        <view v-else :style="computedFileStyle" class="uv-uploader-file">
-          <!-- 文件图标 -->
-          <uv-icon name="description" custom-class="uv-uploader-file-icon" />
-          <!-- 文件名 -->
-          <text class="uv-uploader-file-name uv-ellipsis">
-            {{ item.showFileName }}
-          </text>
-        </view>
-        <!-- 删除按钮 -->
-        <uv-icon
-          v-if="deleteable"
-          name="clear"
-          custom-class="uv-uploader-preview-delete"
-          @click="deleteItem(index)"
-        />
-      </view>
-    </template>
-    <!-- 上传样式 -->
-    <template v-if="computedShowUpload">
-      <!-- 自定义上传样式 -->
-      <view class="uv-uploader-slot" @click="startUpload">
-        <slot />
-      </view>
-      <!-- 默认上传样式 -->
-      <view
-        :style="computedFileStyle"
-        class="uv-uploader-upload"
-        @click="startUpload"
-      >
-        <uv-icon name="plus" custom-class="uv-uploader-upload-icon" />
-        <text v-if="uploadText" class="uv-uploader-upload-text">
-          {{ uploadText }}
-        </text>
-      </view>
-    </template>
-  </view>
-</template>
-<script>
-import uvIcon from './icon.vue'
-import { addUnit, baseMixin } from './utils'
-
-function adaptorGetDefaultMethod() {
-  let method = 'chooseImage'
-  // #ifdef MP-WEIXIN || MP-QQ
-  method = 'chooseMessageFile'
-  // #endif
-  return method
-}
-function adaptorCheckImageType(item) {
-  let prefix = 'http://tmp'
-  // #ifdef H5
-  prefix = 'blob'
-  // #endif
-  return item.path.indexOf(prefix) === 0
-}
-export default {
-  name: 'UvUploader',
-  components: {
-    uvIcon,
-  },
-  data() {
-    return {}
-  },
-  props: {
-    ...baseMixin.props,
-    previewImage: {
-      type: Boolean,
-      default: true,
-    },
-    // 是否展示删除按钮
-    deleteable: {
-      type: Boolean,
-      default: true,
-    },
-    // 览图和上传区域的尺寸,默认单位为px
-    previewSize: {
-      type: [String, Number],
-      default: '160rpx',
-    },
-    // 预览图裁剪模式,可选值参考小程序image组件的mode属性
-    imageFit: {
-      type: String,
-      default: 'scaleToFill',
-    },
-    // 上传区域文字提示
-    uploadText: {
-      type: String,
-      default: '',
-    },
-    // 是否禁用文件上传
-    disabled: {
-      type: Boolean,
-      default: false,
-    },
-    // 标识符,可以在回调函数的第二项参数中获取
-    name: {
-      type: String,
-      default: '',
-    },
-    // 接受的文件类型
-    accept: {
-      type: String,
-      default: 'image',
-      validate(value) {
-        return ['all', 'image', 'file', 'video'].includes(value)
-      },
-    },
-    // 所选的图片的尺寸, 当accept为image类型时设置所选图片的尺寸可选值为original compressed
-    sizeType: {
-      type: Array,
-      default: () => ['original', 'compressed'],
-      validate(value) {
-        return value.includes('original') || value.includes('compressed')
-      },
-    },
-    // 是否在点击预览图后展示全屏图片预览
-    previewFullImage: {
-      type: Boolean,
-      default: true,
-    },
-    // 是否开启图片多选,部分安卓机型不支持
-    multiple: {
-      type: Boolean,
-      default: false,
-    },
-    // 图片或者视频选取模式,当accept为image类型时设置capture可选值为camera可以直接调起摄像头
-    capture: {
-      type: Array,
-      default: () => ['album', 'camera'],
-      validate(value) {
-        return value.includes('album') || value.includes('camera')
-      },
-    },
-    // 文件大小限制,单位为byte
-    maxSize: {
-      type: Number,
-      default: -1,
-      validate: (value) => value === -1 || value > 0,
-    },
-    // 文件上传数量限制
-    maxCount: {
-      type: Number,
-      default: 100,
-      validate: (value) => value <= 100,
-    },
-    // 是否开启文件读取前事件
-    useBeforeRead: {
-      type: Boolean,
-      default: false,
-    },
-    // 当 accept 为 video 时生效,可选值为 back front
-    camera: {
-      type: String,
-      default: 'back',
-      validate(value) {
-        return ['back', 'front'].includes(value)
-      },
-    },
-    // 当 accept 为 video 时生效,是否压缩视频,默认为true
-    compressed: {
-      type: Boolean,
-      default: true,
-    },
-    // max-duration
-    maxDuration: {
-      type: Number,
-      default: 60,
-    },
-    // 预览图列表
-    fileList: {
-      type: Array,
-      default: () => [],
-    },
-  },
-  computed: {
-    computedFileStyle() {
-      const size = addUnit(this.previewSize)
-      return ` width: ${size}; height: ${size}; `
-    },
-    computedShowUpload() {
-      return this.lists.length < this.maxCount
-    },
-    lists() {
-      return this.fileList.map((item, index) => {
-        item.showSrc = item.url || item.path
-        item.showAlt = item.name || `图片${index}`
-        item.showFileName = item.name || item.showSrc
-        let { isImage } = item
-        if (typeof isImage === 'undefined') {
-          isImage = adaptorCheckImageType(item)
-        }
-        return {
-          ...item,
-          isImage,
-        }
-      })
-    },
-  },
-  methods: {
-    deleteItem(index) {
-      this.$emit('delete', {
-        index,
-        name: this.name,
-      })
-    },
-    doPreview(url) {
-      if (!this.previewFullImage) {
-        return
-      }
-      const images = this.lists
-        .filter((item) => item.isImage)
-        .map((item) => item.url || item.path)
-      this.$emit('click-preview', {
-        url,
-        name: this.name,
-      })
-      uni
-        .previewImage({
-          urls: images,
-          current: url,
-        })
-        .then(([err, data]) => {
-          if (err) {
-            throw err
-          }
-        })
-        .catch((err) => console.error(err))
-    },
-    startUpload() {
-      if (this.disabled) {
-        return
-      }
-      const {
-        name = '',
-        accept,
-        maxSize,
-        multiple,
-        useBeforeRead = false, // 是否定义了 beforeRead
-      } = this
-      this.chooseFile()
-        .then(([err, data]) => {
-          if (err) {
-            throw err
-          } else {
-            const file = this.getFileInfo(accept, data, multiple)
-            if (!this.checkFileSize(file, maxSize)) {
-              this.$emit('oversize', { name, file })
-            } else {
-              const emitAfterRead = () =>
-                this.$emit('after-read', { file, name })
-              if (useBeforeRead) {
-                this.$emit('before-read', {
-                  file,
-                  name,
-                  callback: (res) => (res ? emitAfterRead() : ''),
-                })
-              } else {
-                emitAfterRead()
-              }
-            }
-          }
-        })
-        .catch((err) => console.error(err))
-    },
-    chooseFile() {
-      const {
-        capture: sourceType,
-        maxCount,
-        multiple,
-        accept,
-        sizeType,
-        lists,
-        camera,
-        compressed,
-        maxDuration,
-      } = this
-      let chooseFile = null
-      const newMaxCount = maxCount - lists.length
-      switch (accept) {
-        case 'image': {
-          // eslint-disable-next-line no-nested-ternary
-          const count = multiple ? (newMaxCount > 9 ? 9 : newMaxCount) : 1
-          chooseFile = uni.chooseImage({
-            count,
-            sizeType,
-            sourceType,
-          })
-          break
-        }
-        case 'video': {
-          chooseFile = uni.chooseVideo({
-            sourceType,
-            compressed,
-            maxDuration,
-            camera,
-          })
-          break
-        }
-        default: {
-          const count = multiple ? newMaxCount : 1
-          uni[adaptorGetDefaultMethod()]({
-            count,
-            type: 'file',
-          })
-          break
-        }
-      }
-      return chooseFile
-    },
-    getFileInfo(accept, data, multiple) {
-      let file = null
-      if (accept === 'video') {
-        file = {
-          path: data.tempFilePath,
-          ...data,
-        }
-      } else {
-        file = multiple ? data.tempFiles : data.tempFiles[0]
-      }
-      return file
-    },
-    checkFileSize(file, maxSize) {
-      if (maxSize === -1) {
-        return true
-      }
-      return file instanceof Array
-        ? file.every((ele) => ele.size <= maxSize)
-        : file.size <= maxSize
-    },
-  },
-}
-</script>
-<style lang="scss" scoped>
-@import 'sass/index';
-@import 'sass/hariline';
-
-$comp: #{$PREFIX}uploader;
-#{$comp} {
-  position: relative;
-  display: inline-flex;
-  flex-wrap: wrap;
-  font-size: $font-size-md;
-
-  &-slot:empty {
-    display: none;
-  }
-
-  &-slot:not(:empty) + &-upload {
-    display: none !important;
-  }
-
-  &-upload {
-    position: relative;
-    display: flex;
-    align-items: center;
-    flex-direction: column;
-    justify-content: center;
-    box-sizing: border-box;
-    width: $uploader-size;
-    height: $uploader-size;
-    margin: 0 $padding-xs $padding-xs 0;
-    border: 1px dashed $uploader-upload-border-color;
-    border-radius: $uploader-upload-border-radius;
-    background-color: $uploader-upload-background-color;
-  }
-
-  &-text {
-    margin-top: $padding-xs;
-    color: $uploader-text-color;
-    font-size: $uploader-text-font-size;
-  }
-
-  &-preview {
-    position: relative;
-    margin: 0 $padding-xs $padding-xs 0;
-
-    &-image {
-      display: block;
-      width: $uploader-size;
-      height: $uploader-size;
-      border-radius: $uploader-upload-border-radius;
-    }
-  }
-
-  &-file {
-    display: flex;
-    align-items: center;
-    flex-direction: column;
-    justify-content: center;
-    width: $uploader-size;
-    height: $uploader-size;
-    border-radius: $uploader-upload-border-radius;
-    background-color: $uploader-file-background-color;
-
-    &-name {
-      box-sizing: border-box;
-      width: 100%;
-      margin-top: $padding-xs;
-      padding: 0 px2rpx(5);
-      text-align: center;
-      color: $uploader-file-name-text-color;
-      font-size: $uploader-file-name-font-size;
-    }
-  }
-}
-</style>

+ 0 - 12
src/ttcomponents/utils/add_unit.js

@@ -1,12 +0,0 @@
-/**
- * @author 冉娃娃
- * @since 2020/1/16
- * @desc 计算单位
- * @remark
- */
-
-const REGEXP = new RegExp(/^\d+(\.\d+)?$/);
-function addUnit(value) {
-  return REGEXP.test(`${value}`) ? `${value}px` : value;
-}
-export default addUnit;

+ 0 - 36
src/ttcomponents/utils/bem.js

@@ -1,36 +0,0 @@
-/**
- * @author 冉娃娃
- * @since 2020/1/5
- * @desc 计算组件的class属性
- * @remark
- */
-const PREFIX = 'uv-';
-function join(name, mods) {
-  name = PREFIX + name;
-  mods = mods.map((mod) => `${name}-${mod}`);
-  mods.unshift(name);
-  return mods.join(' ');
-}
-function traversing(mods, conf) {
-  if (!conf) {
-    return;
-  }
-  if (typeof conf === 'string' || typeof conf === 'number') {
-    mods.push(conf);
-  } else if (Array.isArray(conf)) {
-    conf.forEach((item) => traversing(mods, item));
-  } else if (typeof conf === 'object') {
-    Object
-      .keys(conf)
-      .forEach((key) => conf[key] && mods.push(key));
-  }
-}
-function bem(name, conf) {
-  const mods = [];
-  traversing(mods, conf);
-  return join(name, mods);
-}
-export {
-  // eslint-disable-next-line import/prefer-default-export
-  bem,
-};

+ 0 - 16
src/ttcomponents/utils/compute_style.js

@@ -1,16 +0,0 @@
-/**
- * @author 冉娃娃
- * @since 2020/1/16
- * @desc 计算样式
- * @remark
- */
-
-function computeStyle(obj) {
-  // todo 这里应该换成reduce,减少一次循环
-  return Object
-    .entries(obj)
-    .filter(([, val]) => val)
-    .map(([key, val]) => `${key}: ${val};`)
-    .join('');
-}
-export default computeStyle;

+ 0 - 13
src/ttcomponents/utils/constants.js

@@ -1,13 +0,0 @@
-/**
- * @author 冉娃娃
- * @since 2020/2/24
- * @desc 常量
- * @remark
- */
-
-const RESULT_TYPE = ['success', 'info', 'warning', 'danger'];
-const OHTER_TYPE = [];
-export {
-  OHTER_TYPE,
-  RESULT_TYPE,
-};

+ 0 - 4
src/ttcomponents/utils/event_bus.js

@@ -1,4 +0,0 @@
-import Vue from 'vue';
-
-const vue = new Vue();
-export default vue;

+ 0 - 15
src/ttcomponents/utils/index.js

@@ -1,15 +0,0 @@
-/**
- * @author 冉娃娃
- * @since 2020/1/16
- * @desc 集中导出公共方法
- * @remark
- */
-import Touch from './touch'
-import addUnit from './add_unit'
-import eventBus from './event_bus'
-import computeStyle from './compute_style'
-
-export { bem } from './bem'
-export { getSystemInfoSync, pick } from './utils'
-export * from './mixins'
-export { Touch, addUnit, eventBus, computeStyle }

+ 0 - 220
src/ttcomponents/utils/mixins.js

@@ -1,220 +0,0 @@
-/**
- * @author 冉娃娃
- * @since 2020/1/17
- * @desc 公共组件方法
- * @remark
- */
-const baseMixin = {
-  props: {
-    // 标识符
-    customId: {
-      type: String,
-      default: '',
-    },
-    // 自定义样式
-    customStyle: {
-      type: String,
-      default: '',
-    },
-    // 自定义类名
-    customClass: {
-      type: String,
-      default: '',
-    },
-  },
-}
-const transitionProps = {
-  // 动画类型
-  name: {
-    type: String,
-    default: 'fade',
-    validate(value) {
-      return [
-        'fade',
-        'fade-up',
-        'fade-right',
-        'fade-down',
-        'fade-left',
-        'slide-up',
-        'slide-right',
-        'slide-bottom',
-        'slide-left',
-      ].includes(value)
-    },
-  },
-  // 是否展示组件
-  show: {
-    type: Boolean,
-    default: false,
-  },
-  // duration
-  duration: {
-    type: [Number, Object],
-    default: 300,
-  },
-  enterClass: {
-    type: String,
-    default: '',
-  },
-  // todo 下面这些属性还未整合到具体的类名当中
-  enterActiveClass: {
-    type: String,
-    default: '',
-  },
-  enterToClass: {
-    type: String,
-    default: '',
-  },
-  leaveClass: {
-    type: String,
-    default: '',
-  },
-  leaveActiveClass: {
-    type: String,
-    default: '',
-  },
-  leaveToClass: {
-    type: String,
-    default: '',
-  },
-}
-const getRect = {
-  methods: {
-    getRect(selector, all) {
-      return new Promise((resolve) => {
-        const query = uni.createSelectorQuery().in(this)
-        const method = all ? 'selectAll' : 'select'
-        query[method](selector)
-          .boundingClientRect((rect) => resolve(rect))
-          .exec()
-      })
-    },
-  },
-}
-// todo 这一坨的原理还没完全搞透彻,要结合事件循环中的微任务和宏任务
-// 还要结合vue的渲染机制来理解
-function later() {
-  return new Promise((resolve) => {
-    setTimeout(() => {
-      resolve()
-    }, 8)
-  })
-}
-const transition = {
-  data() {
-    return {
-      type: '',
-      inited: false,
-      display: false,
-      methodClass: '',
-      enterFunc: {
-        before: () => {
-          this.status = 'enter'
-          this.$emit('before-enter')
-        },
-        ing: () => {
-          this.$emit('enter')
-          this.checkStatus('enter')
-          this.methodClass = this.computedNameClasses.enter
-          this.inited = true
-          this.display = true
-        },
-        to: () => {
-          this.checkStatus('enter')
-          this.transitionEnded = false
-          this.methodClass = this.computedNameClasses['enter-to']
-        },
-      },
-      leaveFunc: {
-        before: () => {
-          this.status = 'leave'
-          this.$emit('before-leave')
-        },
-        ing: () => {
-          this.checkStatus('leave')
-          this.$emit('leave')
-          this.methodClass = this.computedNameClasses.leave
-        },
-        to: () => {
-          this.checkStatus('leave')
-          this.transitionEnded = false
-          setTimeout(this.handleTransitionEnd, this.computedDuration)
-          this.methodClass = this.computedNameClasses['leave-to']
-        },
-      },
-    }
-  },
-  computed: {
-    computedRootClass() {
-      return `${this.methodClass} ${this.customClass}`
-    },
-    computedNameClasses() {
-      const { name } = this
-      return {
-        enter: `uv-${name}-enter uv-${name}-enter-active enter-class enter-active-class`,
-        'enter-to': `uv-${name}-enter-to uv-${name}-enter-active enter-to-class enter-active-class`,
-        leave: `uv-${name}-leave uv-${name}-leave-active leave-class leave-active-class`,
-        'leave-to': `uv-${name}-leave-to uv-${name}-leave-active leave-to-class leave-active-class`,
-      }
-    },
-    computedDuration() {
-      const { duration } = this
-      return typeof duration === 'number' ? duration : duration.enter
-    },
-    computedStyle() {
-      const { computedDuration, display, customStyle } = this
-      return `transition-duration: ${computedDuration}ms;${
-        display ? '' : 'display: none;'
-      }${customStyle}`
-    },
-  },
-  watch: {
-    show(newValue) {
-      if (newValue) {
-        this.enter()
-      } else {
-        this.leave()
-      }
-    },
-  },
-  mounted() {
-    if (this.show) {
-      this.enter()
-    }
-  },
-  methods: {
-    async enter() {
-      this.enterFunc.before()
-      await later()
-      this.enterFunc.ing()
-      await later()
-      this.enterFunc.to()
-    },
-    async leave() {
-      if (!this.display) {
-        return
-      }
-      this.leaveFunc.before()
-      await later()
-      this.leaveFunc.ing()
-      await later()
-      this.leaveFunc.to()
-    },
-    handleTransitionEnd() {
-      if (this.transitionEnded) {
-        return
-      }
-      this.transitionEnded = true
-      this.$emit(`after-${this.name}`)
-      if (!this.show && this.display) {
-        this.display = false
-      }
-    },
-    checkStatus(status) {
-      if (status !== this.status) {
-        throw new Error(`incongruent status: ${status}`)
-      }
-    },
-  },
-}
-export { getRect, baseMixin, transition, transitionProps }

+ 0 - 37
src/ttcomponents/utils/touch.js

@@ -1,37 +0,0 @@
-export default class Touch {
-  // #DISTANCE = 50;
-  //
-  // startX = 0;
-  //
-  // startY = 0;
-  //
-  // setStartPoint(point) {
-  //   const { clientX, clientY } = point;
-  //   this.startX = clientX;
-  //   this.startY = clientY;
-  // }
-  //
-  // getMoveDistance(clientX, clientY) {
-  //   return {
-  //     deltaX: clientX - this.startX,
-  //     deltaY: clientY - this.startY,
-  //   };
-  // }
-  //
-  // getDirection(point) {
-  //   const { clientX, clientY } = point;
-  //   const { deltaX, deltaY } = this.getMoveDistance(clientX, clientY);
-  //   let directionH = '';
-  //   let directionV = '';
-  //   if (Math.abs(deltaX) > this.#DISTANCE) {
-  //     directionH = clientX > this.startX ? 'right' : 'left';
-  //   }
-  //   if (Math.abs(deltaY) > this.#DISTANCE) {
-  //     directionV = clientY > this.startY ? 'top' : 'bottom';
-  //   }
-  //   return {
-  //     directionH,
-  //     directionV,
-  //   };
-  // }
-}

+ 0 - 29
src/ttcomponents/utils/utils.js

@@ -1,29 +0,0 @@
-let systemInfo = null;
-function getSystemInfoSync() {
-  if (systemInfo === null) {
-    systemInfo = uni.getSystemInfoSync().system;
-  }
-  return systemInfo;
-}
-function pick(obj, arr) {
-  const newObj = {};
-  arr.forEach((key) => {
-    newObj[key] = obj[key];
-  });
-  return newObj;
-}
-function getCharacterLen(val) {
-  let len = 0;
-  let i = val.length;
-  // eslint-disable-next-line no-plusplus
-  while (--i >= 0) {
-    const length = val.charCodeAt(i);
-    len += ((length >= 0 && length <= 128) ? 0.5 : 1);
-  }
-  return len;
-}
-export {
-  getSystemInfoSync,
-  getCharacterLen,
-  pick,
-};

文件差異過大導致無法顯示
+ 0 - 0
src/ttcomponents/van-action-sheet/demo.js


+ 8 - 0
src/ttcomponents/van-action-sheet/demo.json

@@ -0,0 +1,8 @@
+{
+  "navigationBarTitleText": "ActionSheet 上拉菜单",
+  "usingComponents": {
+    "demo-block": "/components/demo-block/demo-block",
+    "van-button": "/packages/van-button/van-button",
+    "van-action-sheet": "/packages/van-action-sheet/van-action-sheet"
+  }
+}

文件差異過大導致無法顯示
+ 0 - 0
src/ttcomponents/van-action-sheet/demo.ttml


+ 1 - 0
src/ttcomponents/van-action-sheet/demo.ttss

@@ -0,0 +1 @@
+.content{padding:20px}

文件差異過大導致無法顯示
+ 0 - 0
src/ttcomponents/van-action-sheet/van-action-sheet.js


+ 8 - 0
src/ttcomponents/van-action-sheet/van-action-sheet.json

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

文件差異過大導致無法顯示
+ 0 - 0
src/ttcomponents/van-action-sheet/van-action-sheet.ttml


+ 15 - 0
src/ttcomponents/van-action-sheet/van-action-sheet.ttss

@@ -0,0 +1,15 @@
+.van-hairline,
+.van-hairline--top,
+.van-hairline--left,
+.van-hairline--right,
+.van-hairline--bottom,
+.van-hairline--top-bottom,
+.van-hairline--surround{position:relative}.van-hairline::after,
+.van-hairline--top::after,
+.van-hairline--left::after,
+.van-hairline--right::after,
+.van-hairline--bottom::after,
+.van-hairline--top-bottom::after,
+.van-hairline--surround::after{position:absolute;box-sizing:border-box;-webkit-transform-origin:center;transform-origin:center;content:" ";pointer-events:none;top:-50%;right:-50%;bottom:-50%;left:-50%;border:0 solid #ebedf0;-webkit-transform:scale(.5);transform:scale(.5)}.van-hairline--top::after{border-top-width:1px}.van-hairline--left::after{border-left-width:1px}.van-hairline--right::after{border-right-width:1px}.van-hairline--bottom::after{border-bottom-width:1px}.van-hairline--top-bottom::after{border-width:1px 0}.van-hairline--surround::after{border-width:1px}.van-action-sheet{max-height:90% !important;max-height:var(--action-sheet-max-height,90%) !important;color:#323233;color:var(--action-sheet-item-text-color,#323233)}.van-action-sheet__item,
+.van-action-sheet__cancel{text-align:center;border:none;font-size:16px;font-size:var(--action-sheet-item-font-size,16px);line-height:50px;line-height:var(--action-sheet-item-height,50px);background-color:#fff;background-color:var(--action-sheet-item-background,#fff)}.van-action-sheet__item--hover,
+.van-action-sheet__cancel--hover{background-color:#f2f3f5;background-color:var(--active-color,#f2f3f5)}.van-action-sheet__cancel::before{display:block;content:" ";height:8px;height:var(--action-sheet-cancel-padding-top,8px);background-color:#f7f8fa;background-color:var(--action-sheet-cancel-padding-color,#f7f8fa)}.van-action-sheet__item--disabled{color:#c8c9cc;color:var(--action-sheet-item-disabled-text-color,#c8c9cc)}.van-action-sheet__item--disabled.van-action-sheet__item--hover{background-color:#fff;background-color:var(--action-sheet-item-background,#fff)}.van-action-sheet__subname{margin-left:4px;margin-left:var(--padding-base,4px);font-size:12px;font-size:var(--action-sheet-subname-font-size,12px);color:#646566;color:var(--action-sheet-subname-color,#646566)}.van-action-sheet__header{text-align:center;font-weight:500;font-weight:var(--font-weight-bold,500);font-size:16px;font-size:var(--action-sheet-header-font-size,16px);line-height:44px;line-height:var(--action-sheet-header-height,44px)}.van-action-sheet__description{text-align:center;padding:16px;padding:var(--padding-md,16px);color:#646566;color:var(--action-sheet-description-color,#646566);font-size:14px;font-size:var(--action-sheet-description-font-size,14px);line-height:20px;line-height:var(--action-sheet-description-line-height,20px)}.van-action-sheet__close{position:absolute !important;top:0;right:0;line-height:inherit !important;padding:0 12px;padding:var(--action-sheet-close-icon-padding,0 12px);font-size:18px !important;font-size:var(--action-sheet-close-icon-size,18px) !important;color:#969799;color:var(--action-sheet-close-icon-color,#969799)}.van-action-sheet__loading{display:-webkit-box !important;display:-webkit-flex !important;display:flex !important;height:50px;height:var(--action-sheet-item-height,50px)}

+ 1 - 0
src/ttcomponents/van-button/demo.js

@@ -0,0 +1 @@
+(global["webpackJsonp"]=global["webpackJsonp"]||[]).push([["packages/van-button/demo"],{"0286":function(n,t,e){"use strict";(function(n){e("6cdc");u(e("66fd"));var t=u(e("370e"));function u(n){return n&&n.__esModule?n:{default:n}}n(t.default)}).call(this,e("f266")["createPage"])},"0f35":function(n,t,e){"use strict";e.r(t);var u=e("f304"),o=e.n(u);for(var c in u)"default"!==c&&function(n){e.d(t,n,(function(){return u[n]}))}(c);t["default"]=o.a},"2de1":function(n,t,e){},"2e7d":function(n,t,e){"use strict";var u=e("2de1"),o=e.n(u);o.a},"370e":function(n,t,e){"use strict";e.r(t);var u=e("f1c0"),o=e("0f35");for(var c in o)"default"!==c&&function(n){e.d(t,n,(function(){return o[n]}))}(c);e("2e7d");var r,a=e("f0c5"),f=Object(a["a"])(o["default"],u["b"],u["c"],!1,null,null,null,!1,u["a"],r);t["default"]=f.exports},f1c0:function(n,t,e){"use strict";e.d(t,"b",(function(){return o})),e.d(t,"c",(function(){return c})),e.d(t,"a",(function(){return u}));var u={demoBlock:function(){return e.e("components/demo-block/demo-block").then(e.bind(null,"e29a"))},vanButton:function(){return Promise.all([e.e("common/vendor"),e.e("packages/van-button/van-button")]).then(e.bind(null,"9e06"))}},o=function(){var n=this,t=n.$createElement;n._self._c},c=[]},f304:function(n,t,e){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var u={};t.default=u}},[["0286","common/runtime","common/vendor"]]]);

+ 7 - 0
src/ttcomponents/van-button/demo.json

@@ -0,0 +1,7 @@
+{
+  "navigationBarTitleText": "Button 按钮",
+  "usingComponents": {
+    "demo-block": "/components/demo-block/demo-block",
+    "van-button": "/packages/van-button/van-button"
+  }
+}

文件差異過大導致無法顯示
+ 0 - 0
src/ttcomponents/van-button/demo.ttml


+ 1 - 0
src/ttcomponents/van-button/demo.ttss

@@ -0,0 +1 @@
+.row{height:44px;margin-bottom:15px}

文件差異過大導致無法顯示
+ 0 - 0
src/ttcomponents/van-button/van-button.js


+ 7 - 0
src/ttcomponents/van-button/van-button.json

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

+ 1 - 0
src/ttcomponents/van-button/van-button.ttml

@@ -0,0 +1 @@
+<button class="{{(buttonClass)}}" style="{{(buttonStyle)}}" id="{{id}}" data-detail="{{dataset}}" hover-class="{{btnHoverClass}}" lang="{{lang}}" form-type="{{formType}}" 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}}" data-event-opts="{{[['tap',[['onClick',['$event']]]],['getuserinfo',[['bindGetUserInfo',['$event']]]],['contact',[['bindContact',['$event']]]],['getphonenumber',[['bindGetPhoneNumber',['$event']]]],['error',[['bindError',['$event']]]],['launchapp',[['bindLaunchApp',['$event']]]],['opensetting',[['bindOpenSetting',['$event']]]]]}}" bindtap="__e" bindgetuserinfo="__e" bindcontact="__e" bindgetphonenumber="__e" binderror="__e" bindlaunchapp="__e" bindopensetting="__e"><block tt:if="{{loading}}"><block><van-loading vue-id="500e5d6a-1" custom-class="{{loadingCustomClass}}" size="{{loadingSize}}" type="{{loadingType}}" color="{{$root.m0}}" bind:__l="__l"></van-loading><block tt:if="{{loadingText}}"><view class="van-button__loading-text">{{''+loadingText+''}}</view></block></block></block><block tt:else><block><block tt:if="{{icon}}"><van-icon class="van-button__icon" vue-id="500e5d6a-2" size="1.2em" name="{{icon}}" class-prefix="{{classPrefix}}" custom-class="van-button__icon" custom-style="line-height: inherit;" bind:__l="__l"></van-icon></block><view class="van-button__text"><slot></slot></view></block></block></button>

文件差異過大導致無法顯示
+ 0 - 0
src/ttcomponents/van-button/van-button.ttss


+ 10 - 0
src/ttcomponents/van-cell-group/van-cell-group.js

@@ -0,0 +1,10 @@
+(global["webpackJsonp"]=global["webpackJsonp"]||[]).push([["packages/van-cell-group/van-cell-group"],{"052b":function(t,n,e){"use strict";var a;e.d(n,"b",(function(){return r})),e.d(n,"c",(function(){return u})),e.d(n,"a",(function(){return a}));var r=function(){var t=this,n=t.$createElement;t._self._c},u=[]},"0b26":function(t,n,e){},5707:function(t,n,e){"use strict";var a=e("0b26"),r=e.n(a);r.a},"875e":function(t,n,e){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=void 0;var a=e("a17f"),r=(0,a.VantComponent)({props:{title:String,border:{type:Boolean,default:!0}},computed:{groupClass:function(){var t=this.customClass,n=this.border;return"custom-class ".concat(t," van-cell-group ").concat(n?"van-hairline--top-bottom":"")}}});n.default=r},a0ae:function(t,n,e){"use strict";e.r(n);var a=e("875e"),r=e.n(a);for(var u in a)"default"!==u&&function(t){e.d(n,t,(function(){return a[t]}))}(u);n["default"]=r.a},df3e:function(t,n,e){"use strict";e.r(n);var a=e("052b"),r=e("a0ae");for(var u in r)"default"!==u&&function(t){e.d(n,t,(function(){return r[t]}))}(u);e("5707");var o,c=e("f0c5"),l=Object(c["a"])(r["default"],a["b"],a["c"],!1,null,null,null,!1,a["a"],o);n["default"]=l.exports}}]);
+;(global["webpackJsonp"] = global["webpackJsonp"] || []).push([
+    'packages/van-cell-group/van-cell-group-create-component',
+    {
+        'packages/van-cell-group/van-cell-group-create-component':(function(module, exports, __webpack_require__){
+            __webpack_require__('f266')['createComponent'](__webpack_require__("df3e"))
+        })
+    },
+    [['packages/van-cell-group/van-cell-group-create-component']]
+]);

+ 0 - 0
src/ttcomponents/vant/empty/index.json → src/ttcomponents/van-cell-group/van-cell-group.json


+ 1 - 0
src/ttcomponents/van-cell-group/van-cell-group.ttml

@@ -0,0 +1 @@
+<view><block tt:if="{{title}}"><view class="van-cell-group__title">{{''+title+''}}</view></block><view class="{{(groupClass)}}"><slot></slot></view></view>

+ 1 - 0
src/ttcomponents/van-cell-group/van-cell-group.ttss

@@ -0,0 +1 @@
+.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)}

+ 1 - 0
src/ttcomponents/van-cell/demo.js

@@ -0,0 +1 @@
+(global["webpackJsonp"]=global["webpackJsonp"]||[]).push([["packages/van-cell/demo"],{"1b5d":function(n,e,t){},"1e6d":function(n,e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var o={};e.default=o},"52f3":function(n,e,t){"use strict";(function(n){t("6cdc");o(t("66fd"));var e=o(t("9d32"));function o(n){return n&&n.__esModule?n:{default:n}}n(e.default)}).call(this,t("f266")["createPage"])},"6f09":function(n,e,t){"use strict";t.r(e);var o=t("1e6d"),c=t.n(o);for(var a in o)"default"!==a&&function(n){t.d(e,n,(function(){return o[n]}))}(a);e["default"]=c.a},8094:function(n,e,t){"use strict";var o=t("1b5d"),c=t.n(o);c.a},8393:function(n,e,t){"use strict";t.d(e,"b",(function(){return c})),t.d(e,"c",(function(){return a})),t.d(e,"a",(function(){return o}));var o={demoBlock:function(){return t.e("components/demo-block/demo-block").then(t.bind(null,"e29a"))},vanCellGroup:function(){return Promise.all([t.e("common/vendor"),t.e("packages/van-cell-group/van-cell-group")]).then(t.bind(null,"df3e"))},vanCell:function(){return Promise.all([t.e("common/vendor"),t.e("packages/van-cell/van-cell")]).then(t.bind(null,"8f3b"))},vanTag:function(){return Promise.all([t.e("common/vendor"),t.e("packages/van-tag/van-tag")]).then(t.bind(null,"344c"))},vanIcon:function(){return Promise.all([t.e("common/vendor"),t.e("packages/van-icon/van-icon")]).then(t.bind(null,"4817"))}},c=function(){var n=this,e=n.$createElement;n._self._c},a=[]},"9d32":function(n,e,t){"use strict";t.r(e);var o=t("8393"),c=t("6f09");for(var a in c)"default"!==a&&function(n){t.d(e,n,(function(){return c[n]}))}(a);t("8094");var u,l=t("f0c5"),r=Object(l["a"])(c["default"],o["b"],o["c"],!1,null,null,null,!1,o["a"],u);e["default"]=r.exports}},[["52f3","common/runtime","common/vendor"]]]);

+ 10 - 0
src/ttcomponents/van-cell/demo.json

@@ -0,0 +1,10 @@
+{
+  "navigationBarTitleText": "Cell 单元格",
+  "usingComponents": {
+    "demo-block": "/components/demo-block/demo-block",
+    "van-cell-group": "/packages/van-cell-group/van-cell-group",
+    "van-cell": "/packages/van-cell/van-cell",
+    "van-tag": "/packages/van-tag/van-tag",
+    "van-icon": "/packages/van-icon/van-icon"
+  }
+}

文件差異過大導致無法顯示
+ 0 - 0
src/ttcomponents/van-cell/demo.ttml


+ 1 - 0
src/ttcomponents/van-cell/demo.ttss

@@ -0,0 +1 @@
+.title{margin-right:5px;display:inline-block;vertical-align:middle}

文件差異過大導致無法顯示
+ 0 - 0
src/ttcomponents/van-cell/van-cell.js


+ 2 - 2
src/ttcomponents/vant/cell/index.json → src/ttcomponents/van-cell/van-cell.json

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

+ 1 - 0
src/ttcomponents/van-cell/van-cell.ttml

@@ -0,0 +1 @@
+<view class="{{(('custom-class')+' '+cellClass)}}" style="{{(customStyle)}}" hover-class="{{selfHoverClass}}" hover-stay-time="70" data-event-opts="{{[['tap',[['onClick',['$event']]]]]}}" bindtap="__e"><block tt:if="{{icon}}"><van-icon class="van-cell__left-icon-wrap" vue-id="543626ac-1" name="{{icon}}" custom-class="van-cell__left-icon-wrap van-cell__left-icon" bind:__l="__l"></van-icon></block><block tt:else><slot name="icon"></slot></block><view class="{{(('van-cell__title title-class')+' '+titleClass)}}" style="{{((titleWidth?'max-width:'+titleWidth+';min-width:'+titleWidth+';':'')+titleStyle)}}"><block tt:if="{{title}}"><block>{{title}}</block></block><block tt:else><slot name="title"></slot></block><block tt:if="{{label||useLabelSlot}}"><view class="{{(('van-cell__label label-class')+' '+labelClass)}}"><block tt:if="{{useLabelSlot}}"><slot name="label"></slot></block><block tt:else><block tt:if="{{label}}"><block>{{label}}</block></block></block></view></block></view><view class="{{(('van-cell__value value-class')+' '+valueClass)}}"><block tt:if="{{value||value===0}}"><block>{{value}}</block></block><block tt:else><slot></slot></block></view><block tt:if="{{isLink}}"><van-icon class="{{(selfRightIconClass)}}" vue-id="543626ac-2" name="{{arrowDirection?'arrow'+'-'+arrowDirection:'arrow'}}" custom-class="{{selfRightIconClass}}" bind:__l="__l"></van-icon></block><block tt:else><slot name="right-icon"></slot></block><slot name="extra"></slot></view>

+ 4 - 0
src/ttcomponents/van-cell/van-cell.ttss

@@ -0,0 +1,4 @@
+.van-cell{position:relative;display:-webkit-box;display:-webkit-flex;display:flex;box-sizing:border-box;width:100%;padding:10px 16px;padding:var(--cell-vertical-padding,10px) var(--cell-horizontal-padding,16px);font-size:14px;font-size:var(--cell-font-size,14px);line-height:24px;line-height:var(--cell-line-height,24px);color:#323233;color:var(--cell-text-color,#323233);background-color:#fff;background-color:var(--cell-background-color,#fff)}.van-cell::after{position:absolute;box-sizing:border-box;-webkit-transform-origin:center;transform-origin:center;content:" ";pointer-events:none;right:16px;bottom:0;left:16px;border-bottom:1px solid #ebedf0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.van-cell--borderless::after{display:none}.van-cell-group{background-color:#fff;background-color:var(--cell-background-color,#fff)}.van-cell__label{margin-top:3px;margin-top:var(--cell-label-margin-top,3px);font-size:12px;font-size:var(--cell-label-font-size,12px);line-height:18px;line-height:var(--cell-label-line-height,18px);color:#969799;color:var(--cell-label-color,#969799)}.van-cell__value{overflow:hidden;text-align:right;vertical-align:middle;color:#969799;color:var(--cell-value-color,#969799)}.van-cell__title,
+.van-cell__value{-webkit-box-flex:1;-webkit-flex:1;flex:1}.van-cell__title:empty,
+.van-cell__value:empty{display:none}.van-cell__left-icon-wrap,
+.van-cell__right-icon-wrap{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;height:24px;height:var(--cell-line-height,24px);font-size:16px;font-size:var(--cell-icon-size,16px)}.van-cell__left-icon-wrap{margin-right:5px}.van-cell__right-icon-wrap{margin-left:5px;color:#969799;color:var(--cell-right-icon-color,#969799)}.van-cell__left-icon{vertical-align:middle;line-height:24px;line-height:var(--cell-line-height,24px)}.van-cell__right-icon{line-height:24px;line-height:var(--cell-line-height,24px)}.van-cell--clickable.van-cell--hover{background-color:#f2f3f5;background-color:var(--cell-active-color,#f2f3f5)}.van-cell--required{overflow:visible}.van-cell--required::before{position:absolute;content:"*";left:8px;left:var(--padding-xs,8px);font-size:14px;font-size:var(--cell-font-size,14px);color:#ee0a24;color:var(--cell-required-color,#ee0a24)}.van-cell--center{-webkit-box-align:center;-webkit-align-items:center;align-items:center}.van-cell--large{padding-top:12px;padding-top:var(--cell-large-vertical-padding,12px);padding-bottom:12px;padding-bottom:var(--cell-large-vertical-padding,12px)}.van-cell--large .van-cell__title{font-size:16px;font-size:var(--cell-large-title-font-size,16px)}.van-cell--large .van-cell__value{font-size:16px;font-size:var(--cell-large-value-font-size,16px)}.van-cell--large .van-cell__label{font-size:14px;font-size:var(--cell-large-label-font-size,14px)}

+ 10 - 0
src/ttcomponents/van-checkbox-group/van-checkbox-group.js

@@ -0,0 +1,10 @@
+(global["webpackJsonp"]=global["webpackJsonp"]||[]).push([["packages/van-checkbox-group/van-checkbox-group"],{1174:function(n,t,e){"use strict";e.r(t);var a=e("522f"),u=e.n(a);for(var i in a)"default"!==i&&function(n){e.d(t,n,(function(){return a[n]}))}(i);t["default"]=u.a},"2bbf":function(n,t,e){},"522f":function(n,t,e){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var a=e("a17f"),u=e("5826"),i=e("f22a"),r=(0,a.VantComponent)({mixins:[(0,i.ParentMixin)("vanCheckboxGroup")],props:{max:[Number,String],value:{type:Array,default:function(){return[]}},disabled:{type:Boolean,default:!1}},watch:{value:function(){this.updateChildren()},disabled:function(){this.updateChildren()}},methods:{updateChildren:function(){var n=this;this.$nextTick((function(){var t=(0,u.getComponentByOptionsName)(n,"VanCheckbox");t.forEach((function(t){n.updateChild(t)}))}))},updateChild:function(n){var t=this.value,e=this.disabled;n.currentValue=-1!==t.indexOf(n.name),n.parentDisabled=e}}});t.default=r},"8ebc3":function(n,t,e){"use strict";var a=e("2bbf"),u=e.n(a);u.a},dc22:function(n,t,e){"use strict";var a;e.d(t,"b",(function(){return u})),e.d(t,"c",(function(){return i})),e.d(t,"a",(function(){return a}));var u=function(){var n=this,t=n.$createElement;n._self._c},i=[]},f6ba:function(n,t,e){"use strict";e.r(t);var a=e("dc22"),u=e("1174");for(var i in u)"default"!==i&&function(n){e.d(t,n,(function(){return u[n]}))}(i);e("8ebc3");var r,c=e("f0c5"),o=Object(c["a"])(u["default"],a["b"],a["c"],!1,null,null,null,!1,a["a"],r);t["default"]=o.exports}}]);
+;(global["webpackJsonp"] = global["webpackJsonp"] || []).push([
+    'packages/van-checkbox-group/van-checkbox-group-create-component',
+    {
+        'packages/van-checkbox-group/van-checkbox-group-create-component':(function(module, exports, __webpack_require__){
+            __webpack_require__('f266')['createComponent'](__webpack_require__("f6ba"))
+        })
+    },
+    [['packages/van-checkbox-group/van-checkbox-group-create-component']]
+]);

+ 1 - 1
src/ttcomponents/vant/divider/index.json → src/ttcomponents/van-checkbox-group/van-checkbox-group.json

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

+ 1 - 0
src/ttcomponents/van-checkbox-group/van-checkbox-group.ttml

@@ -0,0 +1 @@
+<view class="_div"><slot></slot></view>

+ 0 - 0
src/ttcomponents/vant/common/style/mixins/clearfix.css → src/ttcomponents/van-checkbox-group/van-checkbox-group.ttss


文件差異過大導致無法顯示
+ 0 - 0
src/ttcomponents/van-checkbox/demo.js


+ 10 - 0
src/ttcomponents/van-checkbox/demo.json

@@ -0,0 +1,10 @@
+{
+  "navigationBarTitleText": "Checkbox 复选框",
+  "usingComponents": {
+    "demo-block": "/components/demo-block/demo-block",
+    "van-checkbox": "/packages/van-checkbox/van-checkbox",
+    "van-checkbox-group": "/packages/van-checkbox-group/van-checkbox-group",
+    "van-cell-group": "/packages/van-cell-group/van-cell-group",
+    "van-cell": "/packages/van-cell/van-cell"
+  }
+}

文件差異過大導致無法顯示
+ 0 - 0
src/ttcomponents/van-checkbox/demo.ttml


+ 1 - 0
src/ttcomponents/van-checkbox/demo.ttss

@@ -0,0 +1 @@
+.demo-checkbox-group{margin:10px 0 0 20px}.demo-checkbox{margin:10px 0 0 20px}.value-class{-webkit-box-flex:0 !important;-webkit-flex:none !important;flex:none !important}.van-cell__value{-webkit-box-flex:0 !important;-webkit-flex:none !important;flex:none !important}.icon{width:20px}

文件差異過大導致無法顯示
+ 0 - 0
src/ttcomponents/van-checkbox/van-checkbox.js


+ 2 - 2
src/ttcomponents/vant/area/index.json → src/ttcomponents/van-checkbox/van-checkbox.json

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

+ 1 - 0
src/ttcomponents/van-checkbox/van-checkbox.ttml

@@ -0,0 +1 @@
+<view class="{{(checkboxClass)}}"><view data-event-opts="{{[['tap',[['onIconClick',['$event']]]]]}}" class="van-checkbox__icon-wrap" bindtap="__e"><block tt:if="{{useIconSlot}}"><slot name="icon"></slot></block><block tt:else><van-icon class="{{(currentIconClass)}}" style="{{(iconStyle)}}" vue-id="56c0b88a-1" name="success" size="0.8em" custom-class="{{currentIconClass}}" custom-style="{{iconStyle}}" bind:__l="__l"></van-icon></block></view><view data-event-opts="{{[['tap',[['onClickLabel',['$event']]]]]}}" class="{{(currentLabelClass)}}" bindtap="__e"><slot></slot></view></view>

+ 2 - 0
src/ttcomponents/van-checkbox/van-checkbox.ttss

@@ -0,0 +1,2 @@
+.van-checkbox{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-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-box-flex:0;-webkit-flex:none;flex:none}.van-checkbox__icon{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;box-sizing:border-box;width:1em;height:1em;color:transparent;text-align:center;-webkit-transition-property:color,border-color,background-color;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);-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-duration:var(--checkbox-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}

+ 1 - 0
src/ttcomponents/van-circle/demo.js

@@ -0,0 +1 @@
+(global["webpackJsonp"]=global["webpackJsonp"]||[]).push([["packages/van-circle/demo"],{1852:function(n,e,t){"use strict";t.d(e,"b",(function(){return o})),t.d(e,"c",(function(){return u})),t.d(e,"a",(function(){return c}));var c={demoBlock:function(){return t.e("components/demo-block/demo-block").then(t.bind(null,"e29a"))},vanCircle:function(){return Promise.all([t.e("common/vendor"),t.e("packages/van-circle/van-circle")]).then(t.bind(null,"e091"))},vanButton:function(){return Promise.all([t.e("common/vendor"),t.e("packages/van-button/van-button")]).then(t.bind(null,"9e06"))}},o=function(){var n=this,e=n.$createElement;n._self._c},u=[]},6921:function(n,e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var c=function(n){return Math.min(Math.max(n,0),100)},o={data:function(){return{value:25,gradientColor:{"0%":"#ffd01e","100%":"#ee0a24"},color:"#fa541c",colorList:["#fa541c","#13c2c2","#722ed1","#eb2f96"]}},methods:{run:function(n){this.value=c(this.value+=n)},changeColor:function(n){this.color=n}}};e.default=o},"82c5":function(n,e,t){"use strict";t.r(e);var c=t("1852"),o=t("a0c7");for(var u in o)"default"!==u&&function(n){t.d(e,n,(function(){return o[n]}))}(u);t("f019");var a,r=t("f0c5"),i=Object(r["a"])(o["default"],c["b"],c["c"],!1,null,null,null,!1,c["a"],a);e["default"]=i.exports},8727:function(n,e,t){"use strict";(function(n){t("6cdc");c(t("66fd"));var e=c(t("82c5"));function c(n){return n&&n.__esModule?n:{default:n}}n(e.default)}).call(this,t("f266")["createPage"])},a0c7:function(n,e,t){"use strict";t.r(e);var c=t("6921"),o=t.n(c);for(var u in c)"default"!==u&&function(n){t.d(e,n,(function(){return c[n]}))}(u);e["default"]=o.a},d4d8:function(n,e,t){},f019:function(n,e,t){"use strict";var c=t("d4d8"),o=t.n(c);o.a}},[["8727","common/runtime","common/vendor"]]]);

+ 8 - 0
src/ttcomponents/van-circle/demo.json

@@ -0,0 +1,8 @@
+{
+  "navigationBarTitleText": "Circle 进度条",
+  "usingComponents": {
+    "demo-block": "/components/demo-block/demo-block",
+    "van-circle": "/packages/van-circle/van-circle",
+    "van-button": "/packages/van-button/van-button"
+  }
+}

文件差異過大導致無法顯示
+ 0 - 0
src/ttcomponents/van-circle/demo.ttml


+ 1 - 0
src/ttcomponents/van-circle/demo.ttss

@@ -0,0 +1 @@
+.van-circle{margin:5px 10px 20px}.van-button{margin-left:10px}

文件差異過大導致無法顯示
+ 0 - 0
src/ttcomponents/van-circle/van-circle.js


+ 4 - 0
src/ttcomponents/van-circle/van-circle.json

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

+ 1 - 0
src/ttcomponents/van-circle/van-circle.ttml

@@ -0,0 +1 @@
+<view class="van-circle"><canvas class="van-circle__canvas" style="{{'width:'+(size+'px')+';'+('height:'+(size+'px')+';')}}" canvas-id="{{circleId}}"></canvas><block tt:if="{{!text}}"><view class="van-circle__text"><slot></slot></view></block><block tt:else><cover-view class="van-circle__text">{{text}}</cover-view></block></view>

+ 1 - 0
src/ttcomponents/van-circle/van-circle.ttss

@@ -0,0 +1 @@
+.van-circle{position:relative;display:inline-block;text-align:center}.van-circle__text{position:absolute;top:50%;left:0;width:100%;-webkit-transform:translateY(-50%);transform:translateY(-50%);background-color:initial;color:#323233;color:var(--circle-text-color,#323233)}

+ 1 - 0
src/ttcomponents/van-col/demo.js

@@ -0,0 +1 @@
+(global["webpackJsonp"]=global["webpackJsonp"]||[]).push([["packages/van-col/demo"],{"00c3":function(n,e,t){},"0f85":function(n,e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var o={};e.default=o},"7e12":function(n,e,t){"use strict";t.d(e,"b",(function(){return c})),t.d(e,"c",(function(){return u})),t.d(e,"a",(function(){return o}));var o={demoBlock:function(){return t.e("components/demo-block/demo-block").then(t.bind(null,"e29a"))},vanRow:function(){return Promise.all([t.e("common/vendor"),t.e("packages/van-row/van-row")]).then(t.bind(null,"92f3"))},vanCol:function(){return Promise.all([t.e("common/vendor"),t.e("packages/van-col/van-col")]).then(t.bind(null,"c785"))}},c=function(){var n=this,e=n.$createElement;n._self._c},u=[]},"97a4":function(n,e,t){"use strict";t.r(e);var o=t("0f85"),c=t.n(o);for(var u in o)"default"!==u&&function(n){t.d(e,n,(function(){return o[n]}))}(u);e["default"]=c.a},a39f:function(n,e,t){"use strict";(function(n){t("6cdc");o(t("66fd"));var e=o(t("c9f9"));function o(n){return n&&n.__esModule?n:{default:n}}n(e.default)}).call(this,t("f266")["createPage"])},c9f9:function(n,e,t){"use strict";t.r(e);var o=t("7e12"),c=t("97a4");for(var u in c)"default"!==u&&function(n){t.d(e,n,(function(){return c[n]}))}(u);t("df26");var a,r=t("f0c5"),f=Object(r["a"])(c["default"],o["b"],o["c"],!1,null,null,null,!1,o["a"],a);e["default"]=f.exports},df26:function(n,e,t){"use strict";var o=t("00c3"),c=t.n(o);c.a}},[["a39f","common/runtime","common/vendor"]]]);

+ 8 - 0
src/ttcomponents/van-col/demo.json

@@ -0,0 +1,8 @@
+{
+  "navigationBarTitleText": "Layout 布局",
+  "usingComponents": {
+    "demo-block": "/components/demo-block/demo-block",
+    "van-row": "/packages/van-row/van-row",
+    "van-col": "/packages/van-col/van-col"
+  }
+}

部分文件因文件數量過多而無法顯示