diff --git a/app.js b/app.js
new file mode 100644
index 0000000..1835ef2
--- /dev/null
+++ b/app.js
@@ -0,0 +1,40 @@
+ //app.js
+App({
+
+ release: false,
+ httpUrl: 'http://192.168.0.106:9000',
+
+ globalData: {
+ userInfo: {},
+ openId: null,
+ token: null
+ },
+
+ onLaunch: function () {
+ // 获取全局尺寸的一些配置
+ // var sysInfo = wx.getAccountInfoSync()
+ // if (sysInfo.miniProgram.appId == 'wx9e774103645f5c54') {
+ // this.httpUrl = 'http://192.168.0.106:9000'
+ // } else if (sysInfo.miniProgram.appId == 'wx5371934de00d6215') {
+ // this.httpUrl = 'https://mini.qniao.cn'
+ // }
+ if (this.release) {
+ this.httpUrl = 'https://mini.qniao.cn'
+ } else {
+ this.httpUrl = 'http://192.168.0.106:9000'
+ }
+ wx.getSystemInfo({
+ success: e => {
+ this.globalData.StatusBar = e.statusBarHeight;
+ let custom = wx.getMenuButtonBoundingClientRect();
+ this.globalData.Custom = custom;
+ this.globalData.CustomBar = custom.bottom + custom.top - e.statusBarHeight;
+ let windowHeight = e.windowHeight * (750 / e.windowWidth);
+ let statusBarHeight = this.globalData.CustomBar * (750 / e.windowWidth);
+ this.globalData.fragmentHeight = windowHeight - statusBarHeight
+ // console.log('fragmentHeight>>>' + this.globalData.fragmentHeight + ',windowHeight=' + windowHeight)
+ }
+ })
+ }
+
+})
\ No newline at end of file
diff --git a/app.json b/app.json
new file mode 100644
index 0000000..09d1a98
--- /dev/null
+++ b/app.json
@@ -0,0 +1,23 @@
+{
+ "pages": [
+ "pages/mall/shops/index",
+ "pages/index/index",
+ "pages/mall/search-list/index",
+ "pages/mall/order-list/index",
+ "pages/mall/order-info/index",
+ "pages/mall/order-offer/index",
+ "pages/mall/order-result/index",
+ "pages/mall/order-detail/index",
+ "pages/home/password/index"
+ ],
+ "window": {
+ "navigationBarBackgroundColor": "#009EE0",
+ "navigationBarTitleText": "",
+ "navigationStyle": "custom",
+ "navigationBarTextStyle": "black"
+ },
+ "usingComponents": {
+ "cu-custom": "/colorui/components/cu-custom"
+ },
+ "sitemapLocation": "sitemap.json"
+}
\ No newline at end of file
diff --git a/app.wxss b/app.wxss
new file mode 100644
index 0000000..9b1356f
--- /dev/null
+++ b/app.wxss
@@ -0,0 +1,28 @@
+@import "colorui/main.wxss";
+@import "colorui/icon.wxss";
+@import "colorui/animation.wxss";
+
+/**app.wxss**/
+.scrollPage {
+ height: 100vh;
+}
+
+.flex-center{
+ align-items: center;
+ justify-content: center;
+}
+
+.flex-column {
+ -webkit-box-orient: vertical;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+}
+
+.flex-justify {
+ align-items: center;
+ -webkit-box-pack: justify;
+ -webkit-justify-content: space-between;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+}
\ No newline at end of file
diff --git a/assets/image/icon_address.png b/assets/image/icon_address.png
new file mode 100644
index 0000000..1e25755
Binary files /dev/null and b/assets/image/icon_address.png differ
diff --git a/assets/image/icon_kefu.png b/assets/image/icon_kefu.png
new file mode 100644
index 0000000..97fd7b4
Binary files /dev/null and b/assets/image/icon_kefu.png differ
diff --git a/assets/image/icon_share.png b/assets/image/icon_share.png
new file mode 100644
index 0000000..68316f3
Binary files /dev/null and b/assets/image/icon_share.png differ
diff --git a/assets/image/list_empty.png b/assets/image/list_empty.png
new file mode 100644
index 0000000..fa2da4c
Binary files /dev/null and b/assets/image/list_empty.png differ
diff --git a/assets/image/login_logo.png b/assets/image/login_logo.png
new file mode 100644
index 0000000..3ec1e4d
Binary files /dev/null and b/assets/image/login_logo.png differ
diff --git a/assets/image/me_logo.png b/assets/image/me_logo.png
new file mode 100644
index 0000000..798dfdb
Binary files /dev/null and b/assets/image/me_logo.png differ
diff --git a/assets/raw/ding.mp3 b/assets/raw/ding.mp3
new file mode 100644
index 0000000..19dc907
Binary files /dev/null and b/assets/raw/ding.mp3 differ
diff --git a/colorui/animation.wxss b/colorui/animation.wxss
new file mode 100644
index 0000000..931bb51
--- /dev/null
+++ b/colorui/animation.wxss
@@ -0,0 +1,184 @@
+/*
+ Animation 微动画
+ 基于ColorUI组建库的动画模块 by 文晓港 2019年3月26日19:52:28
+ */
+
+/* css 滤镜 控制黑白底色gif的 */
+.gif-black{
+ mix-blend-mode: screen;
+}
+.gif-white{
+ mix-blend-mode: multiply;
+}
+
+
+/* Animation css */
+[class*=animation-] {
+ animation-duration: .5s;
+ animation-timing-function: ease-out;
+ animation-fill-mode: both
+}
+
+.animation-fade {
+ animation-name: fade;
+ animation-duration: .8s;
+ animation-timing-function: linear
+}
+
+.animation-scale-up {
+ animation-name: scale-up
+}
+
+.animation-scale-down {
+ animation-name: scale-down
+}
+
+.animation-slide-top {
+ animation-name: slide-top
+}
+
+.animation-slide-bottom {
+ animation-name: slide-bottom
+}
+
+.animation-slide-left {
+ animation-name: slide-left
+}
+
+.animation-slide-right {
+ animation-name: slide-right
+}
+
+.animation-shake {
+ animation-name: shake
+}
+
+.animation-reverse {
+ animation-direction: reverse
+}
+
+@keyframes fade {
+ 0% {
+ opacity: 0
+ }
+
+ 100% {
+ opacity: 1
+ }
+}
+
+@keyframes scale-up {
+ 0% {
+ opacity: 0;
+ transform: scale(.2)
+ }
+
+ 100% {
+ opacity: 1;
+ transform: scale(1)
+ }
+}
+
+@keyframes scale-down {
+ 0% {
+ opacity: 0;
+ transform: scale(1.8)
+ }
+
+ 100% {
+ opacity: 1;
+ transform: scale(1)
+ }
+}
+
+@keyframes slide-top {
+ 0% {
+ opacity: 0;
+ transform: translateY(-100%)
+ }
+
+ 100% {
+ opacity: 1;
+ transform: translateY(0)
+ }
+}
+
+@keyframes slide-bottom {
+ 0% {
+ opacity: 0;
+ transform: translateY(100%)
+ }
+
+ 100% {
+ opacity: 1;
+ transform: translateY(0)
+ }
+}
+
+@keyframes shake {
+
+ 0%,
+ 100% {
+ transform: translateX(0)
+ }
+
+ 10% {
+ transform: translateX(-9px)
+ }
+
+ 20% {
+ transform: translateX(8px)
+ }
+
+ 30% {
+ transform: translateX(-7px)
+ }
+
+ 40% {
+ transform: translateX(6px)
+ }
+
+ 50% {
+ transform: translateX(-5px)
+ }
+
+ 60% {
+ transform: translateX(4px)
+ }
+
+ 70% {
+ transform: translateX(-3px)
+ }
+
+ 80% {
+ transform: translateX(2px)
+ }
+
+ 90% {
+ transform: translateX(-1px)
+ }
+}
+
+@keyframes slide-left {
+ 0% {
+ opacity: 0;
+ transform: translateX(-100%)
+ }
+
+ 100% {
+ opacity: 1;
+ transform: translateX(0)
+ }
+}
+
+@keyframes slide-right {
+ 0% {
+ opacity: 0;
+ transform: translateX(100%)
+ }
+
+ 100% {
+ opacity: 1;
+ transform: translateX(0)
+ }
+}
\ No newline at end of file
diff --git a/colorui/components/cu-custom.js b/colorui/components/cu-custom.js
new file mode 100644
index 0000000..5ad8f52
--- /dev/null
+++ b/colorui/components/cu-custom.js
@@ -0,0 +1,58 @@
+const app = getApp();
+Component({
+ /**
+ * 组件的一些选项
+ */
+ options: {
+ addGlobalClass: true,
+ multipleSlots: true
+ },
+ /**
+ * 组件的对外属性
+ */
+ properties: {
+ bgColor: {
+ type: String,
+ default: ''
+ },
+ isCustom: {
+ type: [Boolean, String],
+ default: false
+ },
+ isBack: {
+ type: [Boolean, String],
+ default: false
+ },
+ bgImage: {
+ type: String,
+ default: ''
+ },
+ },
+ /**
+ * 组件的初始数据
+ */
+ data: {
+ StatusBar: app.globalData.StatusBar,
+ CustomBar: app.globalData.CustomBar,
+ Custom: app.globalData.Custom
+ },
+ /**
+ * 组件的方法列表
+ */
+ methods: {
+ BackPage() {
+ if(getCurrentPages().length == 1){
+ this.toHome()
+ } else {
+ wx.navigateBack({
+ delta: 1
+ });
+ }
+ },
+ toHome(){
+ wx.reLaunch({
+ url: '/pages/mall/shops/index',
+ })
+ }
+ }
+})
\ No newline at end of file
diff --git a/colorui/components/cu-custom.json b/colorui/components/cu-custom.json
new file mode 100644
index 0000000..e8cfaaf
--- /dev/null
+++ b/colorui/components/cu-custom.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/colorui/components/cu-custom.wxml b/colorui/components/cu-custom.wxml
new file mode 100644
index 0000000..c248d48
--- /dev/null
+++ b/colorui/components/cu-custom.wxml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/colorui/components/cu-custom.wxss b/colorui/components/cu-custom.wxss
new file mode 100644
index 0000000..07675e2
--- /dev/null
+++ b/colorui/components/cu-custom.wxss
@@ -0,0 +1 @@
+/* colorui/components/cu-custom.wxss */
\ No newline at end of file
diff --git a/colorui/icon.wxss b/colorui/icon.wxss
new file mode 100644
index 0000000..e19a7bb
--- /dev/null
+++ b/colorui/icon.wxss
@@ -0,0 +1,1226 @@
+@keyframes cuIcon-spin {
+ 0% {
+ -webkit-transform: rotate(0);
+ transform: rotate(0);
+ }
+
+ 100% {
+ -webkit-transform: rotate(359deg);
+ transform: rotate(359deg);
+ }
+}
+
+.iconfont-spin {
+ -webkit-animation: cuIcon-spin 2s infinite linear;
+ animation: cuIcon-spin 2s infinite linear;
+ display: inline-block;
+}
+
+.iconfont-pulse {
+ -webkit-animation: cuIcon-spin 1s infinite steps(8);
+ animation: cuIcon-spin 1s infinite steps(8);
+ display: inline-block;
+}
+
+[class*="cuIcon-"] {
+ font-family: "cuIcon";
+ font-size: inherit;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "cuIcon";
+ src: url('//at.alicdn.com/t/font_533566_yfq2d9wdij.eot?t=1545239985831');
+ /* IE9*/
+ src: url('//at.alicdn.com/t/font_533566_yfq2d9wdij.eot?t=1545239985831#iefix') format('embedded-opentype'),
+ /* IE6-IE8 */
+ url('data:application/x-font-woff;charset=utf-8;base64,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') format('woff'),
+ url('//at.alicdn.com/t/font_533566_yfq2d9wdij.ttf?t=1545239985831') format('truetype'),
+ /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
+ url('//at.alicdn.com/t/font_533566_yfq2d9wdij.svg?t=1545239985831#iconfont') format('svg');
+ /* iOS 4.1- */
+}
+
+.cuIcon-appreciate:before {
+ content: "\e644";
+}
+
+.cuIcon-check:before {
+ content: "\e645";
+}
+
+.cuIcon-close:before {
+ content: "\e646";
+}
+
+.cuIcon-edit:before {
+ content: "\e649";
+}
+
+.cuIcon-emoji:before {
+ content: "\e64a";
+}
+
+.cuIcon-favorfill:before {
+ content: "\e64b";
+}
+
+.cuIcon-favor:before {
+ content: "\e64c";
+}
+
+.cuIcon-loading:before {
+ content: "\e64f";
+}
+
+.cuIcon-locationfill:before {
+ content: "\e650";
+}
+
+.cuIcon-location:before {
+ content: "\e651";
+}
+
+.cuIcon-phone:before {
+ content: "\e652";
+}
+
+.cuIcon-roundcheckfill:before {
+ content: "\e656";
+}
+
+.cuIcon-roundcheck:before {
+ content: "\e657";
+}
+
+.cuIcon-roundclosefill:before {
+ content: "\e658";
+}
+
+.cuIcon-roundclose:before {
+ content: "\e659";
+}
+
+.cuIcon-roundrightfill:before {
+ content: "\e65a";
+}
+
+.cuIcon-roundright:before {
+ content: "\e65b";
+}
+
+.cuIcon-search:before {
+ content: "\e65c";
+}
+
+.cuIcon-taxi:before {
+ content: "\e65d";
+}
+
+.cuIcon-timefill:before {
+ content: "\e65e";
+}
+
+.cuIcon-time:before {
+ content: "\e65f";
+}
+
+.cuIcon-unfold:before {
+ content: "\e661";
+}
+
+.cuIcon-warnfill:before {
+ content: "\e662";
+}
+
+.cuIcon-warn:before {
+ content: "\e663";
+}
+
+.cuIcon-camerafill:before {
+ content: "\e664";
+}
+
+.cuIcon-camera:before {
+ content: "\e665";
+}
+
+.cuIcon-commentfill:before {
+ content: "\e666";
+}
+
+.cuIcon-comment:before {
+ content: "\e667";
+}
+
+.cuIcon-likefill:before {
+ content: "\e668";
+}
+
+.cuIcon-like:before {
+ content: "\e669";
+}
+
+.cuIcon-notificationfill:before {
+ content: "\e66a";
+}
+
+.cuIcon-notification:before {
+ content: "\e66b";
+}
+
+.cuIcon-order:before {
+ content: "\e66c";
+}
+
+.cuIcon-samefill:before {
+ content: "\e66d";
+}
+
+.cuIcon-same:before {
+ content: "\e66e";
+}
+
+.cuIcon-deliver:before {
+ content: "\e671";
+}
+
+.cuIcon-evaluate:before {
+ content: "\e672";
+}
+
+.cuIcon-pay:before {
+ content: "\e673";
+}
+
+.cuIcon-send:before {
+ content: "\e675";
+}
+
+.cuIcon-shop:before {
+ content: "\e676";
+}
+
+.cuIcon-ticket:before {
+ content: "\e677";
+}
+
+.cuIcon-back:before {
+ content: "\e679";
+}
+
+.cuIcon-cascades:before {
+ content: "\e67c";
+}
+
+.cuIcon-discover:before {
+ content: "\e67e";
+}
+
+.cuIcon-list:before {
+ content: "\e682";
+}
+
+.cuIcon-more:before {
+ content: "\e684";
+}
+
+.cuIcon-scan:before {
+ content: "\e689";
+}
+
+.cuIcon-settings:before {
+ content: "\e68a";
+}
+
+.cuIcon-questionfill:before {
+ content: "\e690";
+}
+
+.cuIcon-question:before {
+ content: "\e691";
+}
+
+.cuIcon-shopfill:before {
+ content: "\e697";
+}
+
+.cuIcon-form:before {
+ content: "\e699";
+}
+
+.cuIcon-pic:before {
+ content: "\e69b";
+}
+
+.cuIcon-filter:before {
+ content: "\e69c";
+}
+
+.cuIcon-footprint:before {
+ content: "\e69d";
+}
+
+.cuIcon-top:before {
+ content: "\e69e";
+}
+
+.cuIcon-pulldown:before {
+ content: "\e69f";
+}
+
+.cuIcon-pullup:before {
+ content: "\e6a0";
+}
+
+.cuIcon-right:before {
+ content: "\e6a3";
+}
+
+.cuIcon-refresh:before {
+ content: "\e6a4";
+}
+
+.cuIcon-moreandroid:before {
+ content: "\e6a5";
+}
+
+.cuIcon-deletefill:before {
+ content: "\e6a6";
+}
+
+.cuIcon-refund:before {
+ content: "\e6ac";
+}
+
+.cuIcon-cart:before {
+ content: "\e6af";
+}
+
+.cuIcon-qrcode:before {
+ content: "\e6b0";
+}
+
+.cuIcon-remind:before {
+ content: "\e6b2";
+}
+
+.cuIcon-delete:before {
+ content: "\e6b4";
+}
+
+.cuIcon-profile:before {
+ content: "\e6b7";
+}
+
+.cuIcon-home:before {
+ content: "\e6b8";
+}
+
+.cuIcon-cartfill:before {
+ content: "\e6b9";
+}
+
+.cuIcon-discoverfill:before {
+ content: "\e6ba";
+}
+
+.cuIcon-homefill:before {
+ content: "\e6bb";
+}
+
+.cuIcon-message:before {
+ content: "\e6bc";
+}
+
+.cuIcon-addressbook:before {
+ content: "\e6bd";
+}
+
+.cuIcon-link:before {
+ content: "\e6bf";
+}
+
+.cuIcon-lock:before {
+ content: "\e6c0";
+}
+
+.cuIcon-unlock:before {
+ content: "\e6c2";
+}
+
+.cuIcon-vip:before {
+ content: "\e6c3";
+}
+
+.cuIcon-weibo:before {
+ content: "\e6c4";
+}
+
+.cuIcon-activity:before {
+ content: "\e6c5";
+}
+
+.cuIcon-friendaddfill:before {
+ content: "\e6c9";
+}
+
+.cuIcon-friendadd:before {
+ content: "\e6ca";
+}
+
+.cuIcon-friendfamous:before {
+ content: "\e6cb";
+}
+
+.cuIcon-friend:before {
+ content: "\e6cc";
+}
+
+.cuIcon-goods:before {
+ content: "\e6cd";
+}
+
+.cuIcon-selection:before {
+ content: "\e6ce";
+}
+
+.cuIcon-explore:before {
+ content: "\e6d2";
+}
+
+.cuIcon-present:before {
+ content: "\e6d3";
+}
+
+.cuIcon-squarecheckfill:before {
+ content: "\e6d4";
+}
+
+.cuIcon-square:before {
+ content: "\e6d5";
+}
+
+.cuIcon-squarecheck:before {
+ content: "\e6d6";
+}
+
+.cuIcon-round:before {
+ content: "\e6d7";
+}
+
+.cuIcon-roundaddfill:before {
+ content: "\e6d8";
+}
+
+.cuIcon-roundadd:before {
+ content: "\e6d9";
+}
+
+.cuIcon-add:before {
+ content: "\e6da";
+}
+
+.cuIcon-notificationforbidfill:before {
+ content: "\e6db";
+}
+
+.cuIcon-explorefill:before {
+ content: "\e6dd";
+}
+
+.cuIcon-fold:before {
+ content: "\e6de";
+}
+
+.cuIcon-game:before {
+ content: "\e6df";
+}
+
+.cuIcon-redpacket:before {
+ content: "\e6e0";
+}
+
+.cuIcon-selectionfill:before {
+ content: "\e6e1";
+}
+
+.cuIcon-similar:before {
+ content: "\e6e2";
+}
+
+.cuIcon-appreciatefill:before {
+ content: "\e6e3";
+}
+
+.cuIcon-infofill:before {
+ content: "\e6e4";
+}
+
+.cuIcon-info:before {
+ content: "\e6e5";
+}
+
+.cuIcon-forwardfill:before {
+ content: "\e6ea";
+}
+
+.cuIcon-forward:before {
+ content: "\e6eb";
+}
+
+.cuIcon-rechargefill:before {
+ content: "\e6ec";
+}
+
+.cuIcon-recharge:before {
+ content: "\e6ed";
+}
+
+.cuIcon-vipcard:before {
+ content: "\e6ee";
+}
+
+.cuIcon-voice:before {
+ content: "\e6ef";
+}
+
+.cuIcon-voicefill:before {
+ content: "\e6f0";
+}
+
+.cuIcon-friendfavor:before {
+ content: "\e6f1";
+}
+
+.cuIcon-wifi:before {
+ content: "\e6f2";
+}
+
+.cuIcon-share:before {
+ content: "\e6f3";
+}
+
+.cuIcon-wefill:before {
+ content: "\e6f4";
+}
+
+.cuIcon-we:before {
+ content: "\e6f5";
+}
+
+.cuIcon-lightauto:before {
+ content: "\e6f6";
+}
+
+.cuIcon-lightforbid:before {
+ content: "\e6f7";
+}
+
+.cuIcon-lightfill:before {
+ content: "\e6f8";
+}
+
+.cuIcon-camerarotate:before {
+ content: "\e6f9";
+}
+
+.cuIcon-light:before {
+ content: "\e6fa";
+}
+
+.cuIcon-barcode:before {
+ content: "\e6fb";
+}
+
+.cuIcon-flashlightclose:before {
+ content: "\e6fc";
+}
+
+.cuIcon-flashlightopen:before {
+ content: "\e6fd";
+}
+
+.cuIcon-searchlist:before {
+ content: "\e6fe";
+}
+
+.cuIcon-service:before {
+ content: "\e6ff";
+}
+
+.cuIcon-sort:before {
+ content: "\e700";
+}
+
+.cuIcon-down:before {
+ content: "\e703";
+}
+
+.cuIcon-mobile:before {
+ content: "\e704";
+}
+
+.cuIcon-mobilefill:before {
+ content: "\e705";
+}
+
+.cuIcon-copy:before {
+ content: "\e706";
+}
+
+.cuIcon-countdownfill:before {
+ content: "\e707";
+}
+
+.cuIcon-countdown:before {
+ content: "\e708";
+}
+
+.cuIcon-noticefill:before {
+ content: "\e709";
+}
+
+.cuIcon-notice:before {
+ content: "\e70a";
+}
+
+.cuIcon-upstagefill:before {
+ content: "\e70e";
+}
+
+.cuIcon-upstage:before {
+ content: "\e70f";
+}
+
+.cuIcon-babyfill:before {
+ content: "\e710";
+}
+
+.cuIcon-baby:before {
+ content: "\e711";
+}
+
+.cuIcon-brandfill:before {
+ content: "\e712";
+}
+
+.cuIcon-brand:before {
+ content: "\e713";
+}
+
+.cuIcon-choicenessfill:before {
+ content: "\e714";
+}
+
+.cuIcon-choiceness:before {
+ content: "\e715";
+}
+
+.cuIcon-clothesfill:before {
+ content: "\e716";
+}
+
+.cuIcon-clothes:before {
+ content: "\e717";
+}
+
+.cuIcon-creativefill:before {
+ content: "\e718";
+}
+
+.cuIcon-creative:before {
+ content: "\e719";
+}
+
+.cuIcon-female:before {
+ content: "\e71a";
+}
+
+.cuIcon-keyboard:before {
+ content: "\e71b";
+}
+
+.cuIcon-male:before {
+ content: "\e71c";
+}
+
+.cuIcon-newfill:before {
+ content: "\e71d";
+}
+
+.cuIcon-new:before {
+ content: "\e71e";
+}
+
+.cuIcon-pullleft:before {
+ content: "\e71f";
+}
+
+.cuIcon-pullright:before {
+ content: "\e720";
+}
+
+.cuIcon-rankfill:before {
+ content: "\e721";
+}
+
+.cuIcon-rank:before {
+ content: "\e722";
+}
+
+.cuIcon-bad:before {
+ content: "\e723";
+}
+
+.cuIcon-cameraadd:before {
+ content: "\e724";
+}
+
+.cuIcon-focus:before {
+ content: "\e725";
+}
+
+.cuIcon-friendfill:before {
+ content: "\e726";
+}
+
+.cuIcon-cameraaddfill:before {
+ content: "\e727";
+}
+
+.cuIcon-apps:before {
+ content: "\e729";
+}
+
+.cuIcon-paintfill:before {
+ content: "\e72a";
+}
+
+.cuIcon-paint:before {
+ content: "\e72b";
+}
+
+.cuIcon-picfill:before {
+ content: "\e72c";
+}
+
+.cuIcon-refresharrow:before {
+ content: "\e72d";
+}
+
+.cuIcon-colorlens:before {
+ content: "\e6e6";
+}
+
+.cuIcon-markfill:before {
+ content: "\e730";
+}
+
+.cuIcon-mark:before {
+ content: "\e731";
+}
+
+.cuIcon-presentfill:before {
+ content: "\e732";
+}
+
+.cuIcon-repeal:before {
+ content: "\e733";
+}
+
+.cuIcon-album:before {
+ content: "\e734";
+}
+
+.cuIcon-peoplefill:before {
+ content: "\e735";
+}
+
+.cuIcon-people:before {
+ content: "\e736";
+}
+
+.cuIcon-servicefill:before {
+ content: "\e737";
+}
+
+.cuIcon-repair:before {
+ content: "\e738";
+}
+
+.cuIcon-file:before {
+ content: "\e739";
+}
+
+.cuIcon-repairfill:before {
+ content: "\e73a";
+}
+
+.cuIcon-taoxiaopu:before {
+ content: "\e73b";
+}
+
+.cuIcon-weixin:before {
+ content: "\e612";
+}
+
+.cuIcon-attentionfill:before {
+ content: "\e73c";
+}
+
+.cuIcon-attention:before {
+ content: "\e73d";
+}
+
+.cuIcon-commandfill:before {
+ content: "\e73e";
+}
+
+.cuIcon-command:before {
+ content: "\e73f";
+}
+
+.cuIcon-communityfill:before {
+ content: "\e740";
+}
+
+.cuIcon-community:before {
+ content: "\e741";
+}
+
+.cuIcon-read:before {
+ content: "\e742";
+}
+
+.cuIcon-calendar:before {
+ content: "\e74a";
+}
+
+.cuIcon-cut:before {
+ content: "\e74b";
+}
+
+.cuIcon-magic:before {
+ content: "\e74c";
+}
+
+.cuIcon-backwardfill:before {
+ content: "\e74d";
+}
+
+.cuIcon-playfill:before {
+ content: "\e74f";
+}
+
+.cuIcon-stop:before {
+ content: "\e750";
+}
+
+.cuIcon-tagfill:before {
+ content: "\e751";
+}
+
+.cuIcon-tag:before {
+ content: "\e752";
+}
+
+.cuIcon-group:before {
+ content: "\e753";
+}
+
+.cuIcon-all:before {
+ content: "\e755";
+}
+
+.cuIcon-backdelete:before {
+ content: "\e756";
+}
+
+.cuIcon-hotfill:before {
+ content: "\e757";
+}
+
+.cuIcon-hot:before {
+ content: "\e758";
+}
+
+.cuIcon-post:before {
+ content: "\e759";
+}
+
+.cuIcon-radiobox:before {
+ content: "\e75b";
+}
+
+.cuIcon-rounddown:before {
+ content: "\e75c";
+}
+
+.cuIcon-upload:before {
+ content: "\e75d";
+}
+
+.cuIcon-writefill:before {
+ content: "\e760";
+}
+
+.cuIcon-write:before {
+ content: "\e761";
+}
+
+.cuIcon-radioboxfill:before {
+ content: "\e763";
+}
+
+.cuIcon-punch:before {
+ content: "\e764";
+}
+
+.cuIcon-shake:before {
+ content: "\e765";
+}
+
+.cuIcon-move:before {
+ content: "\e768";
+}
+
+.cuIcon-safe:before {
+ content: "\e769";
+}
+
+.cuIcon-activityfill:before {
+ content: "\e775";
+}
+
+.cuIcon-crownfill:before {
+ content: "\e776";
+}
+
+.cuIcon-crown:before {
+ content: "\e777";
+}
+
+.cuIcon-goodsfill:before {
+ content: "\e778";
+}
+
+.cuIcon-messagefill:before {
+ content: "\e779";
+}
+
+.cuIcon-profilefill:before {
+ content: "\e77a";
+}
+
+.cuIcon-sound:before {
+ content: "\e77b";
+}
+
+.cuIcon-sponsorfill:before {
+ content: "\e77c";
+}
+
+.cuIcon-sponsor:before {
+ content: "\e77d";
+}
+
+.cuIcon-upblock:before {
+ content: "\e77e";
+}
+
+.cuIcon-weblock:before {
+ content: "\e77f";
+}
+
+.cuIcon-weunblock:before {
+ content: "\e780";
+}
+
+.cuIcon-my:before {
+ content: "\e78b";
+}
+
+.cuIcon-myfill:before {
+ content: "\e78c";
+}
+
+.cuIcon-emojifill:before {
+ content: "\e78d";
+}
+
+.cuIcon-emojiflashfill:before {
+ content: "\e78e";
+}
+
+.cuIcon-flashbuyfill:before {
+ content: "\e78f";
+}
+
+.cuIcon-text:before {
+ content: "\e791";
+}
+
+.cuIcon-goodsfavor:before {
+ content: "\e794";
+}
+
+.cuIcon-musicfill:before {
+ content: "\e795";
+}
+
+.cuIcon-musicforbidfill:before {
+ content: "\e796";
+}
+
+.cuIcon-card:before {
+ content: "\e624";
+}
+
+.cuIcon-triangledownfill:before {
+ content: "\e79b";
+}
+
+.cuIcon-triangleupfill:before {
+ content: "\e79c";
+}
+
+.cuIcon-roundleftfill-copy:before {
+ content: "\e79e";
+}
+
+.cuIcon-font:before {
+ content: "\e76a";
+}
+
+.cuIcon-title:before {
+ content: "\e82f";
+}
+
+.cuIcon-recordfill:before {
+ content: "\e7a4";
+}
+
+.cuIcon-record:before {
+ content: "\e7a6";
+}
+
+.cuIcon-cardboardfill:before {
+ content: "\e7a9";
+}
+
+.cuIcon-cardboard:before {
+ content: "\e7aa";
+}
+
+.cuIcon-formfill:before {
+ content: "\e7ab";
+}
+
+.cuIcon-coin:before {
+ content: "\e7ac";
+}
+
+.cuIcon-cardboardforbid:before {
+ content: "\e7af";
+}
+
+.cuIcon-circlefill:before {
+ content: "\e7b0";
+}
+
+.cuIcon-circle:before {
+ content: "\e7b1";
+}
+
+.cuIcon-attentionforbid:before {
+ content: "\e7b2";
+}
+
+.cuIcon-attentionforbidfill:before {
+ content: "\e7b3";
+}
+
+.cuIcon-attentionfavorfill:before {
+ content: "\e7b4";
+}
+
+.cuIcon-attentionfavor:before {
+ content: "\e7b5";
+}
+
+.cuIcon-titles:before {
+ content: "\e701";
+}
+
+.cuIcon-icloading:before {
+ content: "\e67a";
+}
+
+.cuIcon-full:before {
+ content: "\e7bc";
+}
+
+.cuIcon-mail:before {
+ content: "\e7bd";
+}
+
+.cuIcon-peoplelist:before {
+ content: "\e7be";
+}
+
+.cuIcon-goodsnewfill:before {
+ content: "\e7bf";
+}
+
+.cuIcon-goodsnew:before {
+ content: "\e7c0";
+}
+
+.cuIcon-medalfill:before {
+ content: "\e7c1";
+}
+
+.cuIcon-medal:before {
+ content: "\e7c2";
+}
+
+.cuIcon-newsfill:before {
+ content: "\e7c3";
+}
+
+.cuIcon-newshotfill:before {
+ content: "\e7c4";
+}
+
+.cuIcon-newshot:before {
+ content: "\e7c5";
+}
+
+.cuIcon-news:before {
+ content: "\e7c6";
+}
+
+.cuIcon-videofill:before {
+ content: "\e7c7";
+}
+
+.cuIcon-video:before {
+ content: "\e7c8";
+}
+
+.cuIcon-exit:before {
+ content: "\e7cb";
+}
+
+.cuIcon-skinfill:before {
+ content: "\e7cc";
+}
+
+.cuIcon-skin:before {
+ content: "\e7cd";
+}
+
+.cuIcon-moneybagfill:before {
+ content: "\e7ce";
+}
+
+.cuIcon-usefullfill:before {
+ content: "\e7cf";
+}
+
+.cuIcon-usefull:before {
+ content: "\e7d0";
+}
+
+.cuIcon-moneybag:before {
+ content: "\e7d1";
+}
+
+.cuIcon-redpacket_fill:before {
+ content: "\e7d3";
+}
+
+.cuIcon-subscription:before {
+ content: "\e7d4";
+}
+
+.cuIcon-loading1:before {
+ content: "\e633";
+}
+
+.cuIcon-github:before {
+ content: "\e692";
+}
+
+.cuIcon-global:before {
+ content: "\e7eb";
+}
+
+.cuIcon-settingsfill:before {
+ content: "\e6ab";
+}
+
+.cuIcon-back_android:before {
+ content: "\e7ed";
+}
+
+.cuIcon-expressman:before {
+ content: "\e7ef";
+}
+
+.cuIcon-evaluate_fill:before {
+ content: "\e7f0";
+}
+
+.cuIcon-group_fill:before {
+ content: "\e7f5";
+}
+
+.cuIcon-play_forward_fill:before {
+ content: "\e7f6";
+}
+
+.cuIcon-deliver_fill:before {
+ content: "\e7f7";
+}
+
+.cuIcon-notice_forbid_fill:before {
+ content: "\e7f8";
+}
+
+.cuIcon-fork:before {
+ content: "\e60c";
+}
+
+.cuIcon-pick:before {
+ content: "\e7fa";
+}
+
+.cuIcon-wenzi:before {
+ content: "\e6a7";
+}
+
+.cuIcon-ellipse:before {
+ content: "\e600";
+}
+
+.cuIcon-qr_code:before {
+ content: "\e61b";
+}
+
+.cuIcon-dianhua:before {
+ content: "\e64d";
+}
+
+.cuIcon-icon:before {
+ content: "\e602";
+}
+
+.cuIcon-loading2:before {
+ content: "\e7f1";
+}
+
+.cuIcon-btn:before {
+ content: "\e601";
+}
diff --git a/colorui/main.wxss b/colorui/main.wxss
new file mode 100644
index 0000000..23a81b4
--- /dev/null
+++ b/colorui/main.wxss
@@ -0,0 +1,2624 @@
+/*
+ ColorUi for MP-weixin v2.1.4 | by 文晓港 2019年4月25日19:15:42
+ 仅供学习交流,如作它用所承受的法律责任一概与作者无关
+ 使用ColorUi开发扩展与插件时,请注明基于ColorUi开发
+
+ (QQ交流群:240787041)
+*/
+
+/* ==================
+ 初始化
+ ==================== */
+
+page {
+ /* Color 可以自定义相关配色 *//* var属性兼容性 --> https://www.caniuse.com/#feat=css-variables *//* 标准色 */
+ --red: #e54d42;
+ --orange: #f37b1d;
+ --yellow: #fbbd08;
+ --olive: #8dc63f;
+ --green: #39b54a;
+ --cyan: #1cbbb4;
+ --blue: #008AFF;
+ --purple: #6739b6;
+ --mauve: #9c26b0;
+ --pink: #e03997;
+ --brown: #a5673f;
+ --grey: #8799a3;
+ --black: #333;
+ --darkGray: #666;
+ --gray: #aaa;
+ --ghostWhite: #f1f1f1;
+ --white: #fff;
+ /* 浅色 */
+ --redLight: #fadbd9;
+ --orangeLight: #fde6d2;
+ --yellowLight: #fef2ce;
+ --oliveLight: #e8f4d9;
+ --greenLight: #d7f0db;
+ --cyanLight: #d2f1f0;
+ --blueLight: #cce6ff;
+ --purpleLight: #e1d7f0;
+ --mauveLight: #ebd4ef;
+ --pinkLight: #f9d7ea;
+ --brownLight: #ede1d9;
+ --greyLight: #e7ebed;
+ /* 渐变色 */
+ --gradualRed: linear-gradient(45deg, #f43f3b, #ec008c);
+ --gradualOrange: linear-gradient(45deg, #ff9700, #ed1c24);
+ --gradualGreen: linear-gradient(45deg, #39b54a, #8dc63f);
+ --gradualPurple: linear-gradient(45deg, #9000ff, #5e00ff);
+ --gradualPink: linear-gradient(45deg, #ec008c, #6739b6);
+ --gradualBlue: linear-gradient(45deg, #009ee0, #009ee0);
+ /* 阴影透明色 */
+ --ShadowSize: 6rpx 6rpx 8rpx;
+ --redShadow: rgba(204, 69, 59, 0.2);
+ --orangeShadow: rgba(217, 109, 26, 0.2);
+ --yellowShadow: rgba(224, 170, 7, 0.2);
+ --oliveShadow: rgba(124, 173, 55, 0.2);
+ --greenShadow: rgba(48, 156, 63, 0.2);
+ --cyanShadow: rgba(28, 187, 180, 0.2);
+ --blueShadow: rgba(0, 102, 204, 0.2);
+ --purpleShadow: rgba(88, 48, 156, 0.2);
+ --mauveShadow: rgba(133, 33, 150, 0.2);
+ --pinkShadow: rgba(199, 50, 134, 0.2);
+ --brownShadow: rgba(140, 88, 53, 0.2);
+ --greyShadow: rgba(114, 130, 138, 0.2);
+ --grayShadow: rgba(114, 130, 138, 0.2);
+ --blackShadow: rgba(26, 26, 26, 0.2);
+ background-color: var(--ghostWhite);
+ font-size: 28rpx;
+ color: var(--black);
+ font-family: Helvetica Neue, Helvetica, sans-serif;
+}
+
+view, scroll-view, swiper, button, input, textarea, label, navigator, image {
+ box-sizing: border-box;
+}
+
+.round {
+ border-radius: 5000rpx;
+}
+
+.radius {
+ border-radius: 6rpx;
+}
+
+/* ==================
+ 图片
+ ==================== */
+
+image {
+ max-width: 100%;
+ display: inline-block;
+ position: relative;
+ z-index: 0;
+}
+
+image.loading::before {
+ content: "";
+ background-color: #f5f5f5;
+ display: block;
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ z-index: -2;
+}
+
+image.loading::after {
+ content: "\e7f1";
+ font-family: "cuIcon";
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 32rpx;
+ height: 32rpx;
+ line-height: 32rpx;
+ right: 0;
+ bottom: 0;
+ z-index: -1;
+ font-size: 32rpx;
+ margin: auto;
+ color: #ccc;
+ -webkit-animation: cuIcon-spin 2s infinite linear;
+ animation: cuIcon-spin 2s infinite linear;
+ display: block;
+}
+
+.response {
+ width: 100%;
+}
+
+/* ==================
+ 边框
+ ==================== */
+
+/* -- 实线 -- */
+
+.solid, .solid-top, .solid-right, .solid-bottom, .solid-left, .solids,
+.solids-top, .solids-right, .solids-bottom, .solids-left, .dashed, .dashed-top,
+.dashed-right, .dashed-bottom, .dashed-left {
+ position: relative;
+}
+
+.solid::after, .solid-top::after, .solid-right::after, .solid-bottom::after,
+.solid-left::after, .solids::after, .solids-top::after, .solids-right::after,
+.solids-bottom::after, .solids-left::after, .dashed::after, .dashed-top::after,
+.dashed-right::after, .dashed-bottom::after, .dashed-left::after {
+ content: " ";
+ width: 200%;
+ height: 200%;
+ position: absolute;
+ top: 0;
+ left: 0;
+ border-radius: inherit;
+ transform: scale(0.5);
+ transform-origin: 0 0;
+ pointer-events: none;
+ box-sizing: border-box;
+}
+
+.solid::after {
+ border: 1rpx solid rgba(0, 0, 0, 0.1);
+}
+
+.solid-top::after {
+ border-top: 1rpx solid rgba(0, 0, 0, 0.1);
+}
+
+.solid-right::after {
+ border-right: 1rpx solid rgba(0, 0, 0, 0.1);
+}
+
+.solid-bottom::after {
+ border-bottom: 1rpx solid rgba(0, 0, 0, 0.1);
+}
+
+.solid-left::after {
+ border-left: 1rpx solid rgba(0, 0, 0, 0.1);
+}
+
+.solids::after {
+ border: 8rpx solid #eee;
+}
+
+.solids-top::after {
+ border-top: 8rpx solid #eee;
+}
+
+.solids-right::after {
+ border-right: 8rpx solid #eee;
+}
+
+.solids-bottom::after {
+ border-bottom: 8rpx solid #eee;
+}
+
+.solids-left::after {
+ border-left: 8rpx solid #eee;
+}
+
+/* -- 虚线 -- */
+
+.dashed::after {
+ border: 1rpx dashed #ddd;
+}
+
+.dashed-top::after {
+ border-top: 1rpx dashed #ddd;
+}
+
+.dashed-right::after {
+ border-right: 1rpx dashed #ddd;
+}
+
+.dashed-bottom::after {
+ border-bottom: 1rpx dashed #ddd;
+}
+
+.dashed-left::after {
+ border-left: 1rpx dashed #ddd;
+}
+
+/* -- 阴影 -- */
+
+.shadow[class*='white'] {
+ --ShadowSize: 0 1rpx 6rpx;
+}
+
+.shadow-lg {
+ --ShadowSize: 0rpx 40rpx 100rpx 0rpx;
+}
+
+.shadow-warp {
+ position: relative;
+ box-shadow: 0 0 10rpx rgba(0, 0, 0, 0.1);
+}
+
+.shadow-warp:before, .shadow-warp:after {
+ position: absolute;
+ content: "";
+ top: 20rpx;
+ bottom: 30rpx;
+ left: 20rpx;
+ width: 50%;
+ box-shadow: 0 30rpx 20rpx rgba(0, 0, 0, 0.2);
+ transform: rotate(-3deg);
+ z-index: -1;
+}
+
+.shadow-warp:after {
+ right: 20rpx;
+ left: auto;
+ transform: rotate(3deg);
+}
+
+.shadow-blur {
+ position: relative;
+}
+
+.shadow-blur::before {
+ content: "";
+ display: block;
+ background: inherit;
+ filter: blur(10rpx);
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ top: 10rpx;
+ left: 10rpx;
+ z-index: -1;
+ opacity: 0.4;
+ transform-origin: 0 0;
+ border-radius: inherit;
+ transform: scale(1, 1);
+}
+
+/* ==================
+ 按钮
+ ==================== */
+
+.cu-btn {
+ position: relative;
+ border: 0rpx;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ box-sizing: border-box;
+ padding: 0 30rpx;
+ font-size: 28rpx;
+ height: 64rpx;
+ line-height: 1;
+ text-align: center;
+ text-decoration: none;
+ overflow: visible;
+ margin-left: initial;
+ transform: translate(0rpx, 0rpx);
+ margin-right: initial;
+}
+
+.cu-btn::after {
+ display: none;
+}
+
+.cu-btn:not([class*="bg-"]) {
+ background-color: #f0f0f0;
+}
+
+.cu-btn[class*="line"] {
+ background-color: transparent;
+}
+
+.cu-btn[class*="line"]::after {
+ content: " ";
+ display: block;
+ width: 200%;
+ height: 200%;
+ position: absolute;
+ top: 0;
+ left: 0;
+ border: 1rpx solid currentColor;
+ transform: scale(0.5);
+ transform-origin: 0 0;
+ box-sizing: border-box;
+ border-radius: 12rpx;
+ z-index: 1;
+ pointer-events: none;
+}
+
+.cu-btn.round[class*="line"]::after {
+ border-radius: 1000rpx;
+}
+
+.cu-btn[class*="lines"]::after {
+ border: 6rpx solid currentColor;
+}
+
+.cu-btn[class*="bg-"]::after {
+ display: none;
+}
+
+.cu-btn.sm {
+ padding: 0 20rpx;
+ font-size: 20rpx;
+ height: 48rpx;
+}
+
+.cu-btn.lg {
+ padding: 0 40rpx;
+ font-size: 32rpx;
+ height: 96rpx;
+}
+
+.cu-btn.icon.sm {
+ width: 48rpx;
+ height: 48rpx;
+}
+
+.cu-btn.icon {
+ width: 64rpx;
+ height: 64rpx;
+ border-radius: 500rpx;
+ padding: 0;
+}
+
+button.icon.lg {
+ width: 80rpx;
+ height: 80rpx;
+}
+
+.cu-btn.shadow-blur::before {
+ top: 4rpx;
+ left: 4rpx;
+ filter: blur(6rpx);
+ opacity: 0.6;
+}
+
+.cu-btn.button-hover {
+ transform: translate(1rpx, 1rpx);
+}
+
+.block {
+ display: block;
+}
+
+.cu-btn.block {
+ display: flex;
+}
+
+.cu-btn[disabled] {
+ opacity: 0.6;
+ color: var(--white);
+}
+
+/* ==================
+ 徽章
+ ==================== */
+
+.cu-tag {
+ font-size: 24rpx;
+ vertical-align: middle;
+ position: relative;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ box-sizing: border-box;
+ padding: 0rpx 16rpx;
+ height: 48rpx;
+ font-family: Helvetica Neue, Helvetica, sans-serif;
+ white-space: nowrap;
+}
+
+.cu-tag:not([class*="bg"]):not([class*="line"]) {
+ background-color: var(--ghostWhite);
+}
+
+.cu-tag[class*="line-"]::after {
+ content: " ";
+ width: 200%;
+ height: 200%;
+ position: absolute;
+ top: 0;
+ left: 0;
+ border: 1rpx solid currentColor;
+ transform: scale(0.5);
+ transform-origin: 0 0;
+ box-sizing: border-box;
+ border-radius: inherit;
+ z-index: 1;
+ pointer-events: none;
+}
+
+.cu-tag.radius[class*="line"]::after {
+ border-radius: 12rpx;
+}
+
+.cu-tag.round[class*="line"]::after {
+ border-radius: 1000rpx;
+}
+
+.cu-tag[class*="line-"]::after {
+ border-radius: 0;
+}
+
+.cu-tag+.cu-tag {
+ margin-left: 10rpx;
+}
+
+.cu-tag.sm {
+ font-size: 20rpx;
+ padding: 0rpx 12rpx;
+ height: 32rpx;
+}
+
+.cu-capsule {
+ display: inline-flex;
+ vertical-align: middle;
+}
+
+.cu-capsule+.cu-capsule {
+ margin-left: 10rpx;
+}
+
+.cu-capsule .cu-tag {
+ margin: 0;
+}
+
+.cu-capsule .cu-tag[class*="line-"]:last-child::after {
+ border-left: 0rpx solid transparent;
+}
+
+.cu-capsule .cu-tag[class*="line-"]:first-child::after {
+ border-right: 0rpx solid transparent;
+}
+
+.cu-capsule.radius .cu-tag:first-child {
+ border-top-left-radius: 6rpx;
+ border-bottom-left-radius: 6rpx;
+}
+
+.cu-capsule.radius .cu-tag:last-child::after,
+.cu-capsule.radius .cu-tag[class*="line-"] {
+ border-top-right-radius: 12rpx;
+ border-bottom-right-radius: 12rpx;
+}
+
+.cu-capsule.round .cu-tag:first-child {
+ border-top-left-radius: 200rpx;
+ border-bottom-left-radius: 200rpx;
+ text-indent: 4rpx;
+}
+
+.cu-capsule.round .cu-tag:last-child::after,
+.cu-capsule.round .cu-tag:last-child {
+ border-top-right-radius: 200rpx;
+ border-bottom-right-radius: 200rpx;
+ text-indent: -4rpx;
+}
+
+.cu-tag.badge {
+ border-radius: 200rpx;
+ position: absolute;
+ top: -10rpx;
+ right: -10rpx;
+ font-size: 20rpx;
+ padding: 0rpx 10rpx;
+ height: 30rpx;
+ color: var(--white);
+}
+
+.cu-tag.badge:not([class*="bg-"]) {
+ background-color: #dd514c;
+}
+
+.cu-tag:empty:not([class*="cuIcon-"]) {
+ padding: 0rpx;
+ width: 16rpx;
+ height: 16rpx;
+ top: -4rpx;
+ right: -4rpx;
+}
+
+.cu-tag[class*="cuIcon-"] {
+ width: 32rpx;
+ height: 32rpx;
+ top: -4rpx;
+ right: -4rpx;
+}
+
+/* ==================
+ 头像
+ ==================== */
+
+.cu-avatar {
+ font-variant: small-caps;
+ margin: 0;
+ padding: 0;
+ display: inline-flex;
+ text-align: center;
+ justify-content: center;
+ align-items: center;
+ background-color: #ccc;
+ color: var(--white);
+ white-space: nowrap;
+ position: relative;
+ width: 64rpx;
+ height: 64rpx;
+ background-size: cover;
+ background-position: center;
+ vertical-align: middle;
+ font-size: 1.5em;
+}
+
+.cu-avatar.sm {
+ width: 48rpx;
+ height: 48rpx;
+ font-size: 1em;
+}
+
+.cu-avatar.lg {
+ width: 96rpx;
+ height: 96rpx;
+ font-size: 2em;
+}
+
+.cu-avatar.xl {
+ width: 128rpx;
+ height: 128rpx;
+ font-size: 2.5em;
+}
+
+.cu-avatar .avatar-text {
+ font-size: 0.4em;
+}
+
+.cu-avatar-group {
+ direction: rtl;
+ unicode-bidi: bidi-override;
+ padding: 0 10rpx 0 40rpx;
+ display: inline-block;
+}
+
+.cu-avatar-group .cu-avatar {
+ margin-left: -30rpx;
+ border: 4rpx solid var(--ghostWhite);
+ vertical-align: middle;
+}
+
+.cu-avatar-group .cu-avatar.sm {
+ margin-left: -20rpx;
+ border: 1rpx solid var(--ghostWhite);
+}
+
+/* ==================
+ 操作条
+ ==================== */
+
+.cu-bar {
+ display: flex;
+ position: relative;
+ align-items: center;
+ min-height: 100rpx;
+ justify-content: space-between;
+}
+
+.cu-bar .action {
+ display: flex;
+ align-items: center;
+ height: 100%;
+ justify-content: center;
+ max-width: 100%;
+}
+
+.cu-bar .action.border-title {
+ position: relative;
+ top: -10rpx;
+}
+
+.cu-bar .action.border-title text[class*="bg-"]:last-child {
+ position: absolute;
+ bottom: -0.5rem;
+ min-width: 2rem;
+ height: 6rpx;
+ left: 0;
+}
+
+.cu-bar .action.sub-title {
+ position: relative;
+ top: -0.2rem;
+}
+
+.cu-bar .action.sub-title text {
+ position: relative;
+ z-index: 1;
+}
+
+.cu-bar .action.sub-title text[class*="bg-"]:last-child {
+ position: absolute;
+ display: inline-block;
+ bottom: -0.2rem;
+ border-radius: 6rpx;
+ width: 100%;
+ height: 0.6rem;
+ left: 0.6rem;
+ opacity: 0.3;
+ z-index: 0;
+}
+
+.cu-bar .action.sub-title text[class*="text-"]:last-child {
+ position: absolute;
+ display: inline-block;
+ bottom: -0.7rem;
+ left: 0.5rem;
+ opacity: 0.2;
+ z-index: 0;
+ text-align: right;
+ font-weight: 900;
+ font-size: 36rpx;
+}
+
+.cu-bar.justify-center .action.border-title text:last-child,
+.cu-bar.justify-center .action.sub-title text:last-child {
+ left: 0;
+ right: 0;
+ margin: auto;
+ text-align: center;
+}
+
+.cu-bar .action:first-child {
+ margin-left: 30rpx;
+ font-size: 30rpx;
+}
+
+.cu-bar .action text.text-cut {
+ text-align: left;
+ width: 100%;
+}
+
+.cu-bar .cu-avatar:first-child {
+ margin-left: 20rpx;
+}
+
+.cu-bar .action:first-child>text[class*="cuIcon-"] {
+ margin-left: -0.3em;
+ margin-right: 0.3em;
+}
+
+.cu-bar .action:last-child {
+ margin-right: 30rpx;
+}
+
+.cu-bar .action>text[class*="cuIcon-"], .cu-bar .action>view[class*="cuIcon-"] {
+ font-size: 36rpx;
+}
+
+.cu-bar .action>text[class*="cuIcon-"]+text[class*="cuIcon-"] {
+ margin-left: 0.5em;
+}
+
+.cu-bar .content {
+ position: absolute;
+ text-align: center;
+ width: calc(100% - 340rpx);
+ left: 0;
+ right: 0;
+ bottom: 0;
+ top: 0;
+ margin: auto;
+ height: 60rpx;
+ font-size: 32rpx;
+ line-height: 60rpx;
+ cursor: none;
+ pointer-events: none;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ overflow: hidden;
+}
+
+.cu-bar.ios .content {
+ bottom: 7px;
+ height: 30px;
+ font-size: 32rpx;
+ line-height: 30px;
+}
+
+.cu-bar.btn-group {
+ justify-content: space-around;
+}
+
+.cu-bar.btn-group button {
+ padding: 20rpx 32rpx;
+}
+
+.cu-bar.btn-group button {
+ flex: 1;
+ margin: 0 20rpx;
+ max-width: 50%;
+}
+
+.cu-bar .search-form {
+ background-color: #f5f5f5;
+ line-height: 64rpx;
+ height: 64rpx;
+ font-size: 24rpx;
+ color: var(--black);
+ flex: 1;
+ display: flex;
+ align-items: center;
+ margin: 0 30rpx;
+}
+
+.cu-bar .search-form+.action {
+ margin-right: 30rpx;
+}
+
+.cu-bar .search-form input {
+ flex: 1;
+ padding-right: 30rpx;
+ height: 64rpx;
+ line-height: 64rpx;
+ font-size: 26rpx;
+ background-color: transparent;
+}
+
+.cu-bar .search-form [class*="cuIcon-"] {
+ margin: 0 0.5em 0 0.8em;
+}
+
+.cu-bar .search-form [class*="cuIcon-"]::before {
+ top: 0rpx;
+}
+
+.cu-bar.fixed, .nav.fixed {
+ position: fixed;
+ width: 100%;
+ top: 0;
+ z-index: 19;
+ box-shadow: 0 1rpx 6rpx rgba(0, 0, 0, 0.1);
+}
+
+.cu-bar.foot {
+ position: fixed;
+ width: 100%;
+ bottom: 0;
+ z-index: 99;
+ box-shadow: 0 -1rpx 6rpx rgba(0, 0, 0, 0.1);
+}
+
+.cu-bar.tabbar {
+ padding: 0;
+ height: calc(100rpx + env(safe-area-inset-bottom) / 2);
+ padding-bottom: calc(env(safe-area-inset-bottom) / 2);
+}
+
+.cu-tabbar-height {
+ min-height: 100rpx;
+ height: calc(100rpx + env(safe-area-inset-bottom) / 2);
+}
+
+.cu-bar.tabbar.shadow {
+ box-shadow: 0 -1rpx 6rpx rgba(0, 0, 0, 0.1);
+}
+
+.cu-bar.tabbar .action {
+ font-size: 22rpx;
+ position: relative;
+ flex: 1;
+ text-align: center;
+ padding: 0;
+ display: block;
+ height: auto;
+ line-height: 1;
+ margin: 0;
+ overflow: initial;
+}
+
+.cu-bar.tabbar.shop .action {
+ width: 140rpx;
+ flex: initial;
+}
+
+.cu-bar.tabbar .action.add-action {
+ position: relative;
+ z-index: 2;
+ padding-top: 50rpx;
+ background-color: inherit;
+}
+
+.cu-bar.tabbar .action.add-action [class*="cuIcon-"] {
+ position: absolute;
+ width: 70rpx;
+ z-index: 2;
+ height: 70rpx;
+ border-radius: 50%;
+ line-height: 70rpx;
+ font-size: 50rpx;
+ top: -35rpx;
+ left: 0;
+ right: 0;
+ margin: auto;
+ padding: 0;
+}
+
+.cu-bar.tabbar .action.add-action::after {
+ content: "";
+ position: absolute;
+ width: 140rpx;
+ height: 140rpx;
+ top: -45rpx;
+ left: 0;
+ right: 0;
+ margin: auto;
+ box-shadow: 0 -3rpx 8rpx rgba(0, 0, 0, 0.08);
+ border-radius: 70rpx;
+ background-color: inherit;
+ z-index: 0;
+}
+
+.cu-bar.tabbar .action.add-action::before {
+ content: "";
+ position: absolute;
+ width: 100rpx;
+ height: 30rpx;
+ bottom: 30rpx;
+ left: 0;
+ right: 0;
+ margin: auto;
+ background-color: inherit;
+ z-index: 1;
+}
+
+.cu-bar.tabbar .btn-group {
+ flex: 1;
+ display: flex;
+ justify-content: space-around;
+ align-items: center;
+ padding: 0 10rpx;
+}
+
+.cu-bar.tabbar button.action::after {
+ border: 0;
+}
+
+.cu-bar.tabbar .action [class*="cuIcon-"] {
+ width: 100rpx;
+ position: relative;
+ display: block;
+ height: auto;
+ margin: 0 auto 10rpx;
+ text-align: center;
+ font-size: 40rpx;
+}
+
+.cu-bar.tabbar .action .cuIcon-cu-image {
+ margin: 0 auto;
+}
+
+.cu-bar.tabbar .action .cuIcon-cu-image image {
+ width: 50rpx;
+ height: 50rpx;
+ display: inline-block;
+}
+
+.cu-bar.tabbar .submit {
+ align-items: center;
+ display: flex;
+ justify-content: center;
+ text-align: center;
+ position: relative;
+ flex: 2;
+ align-self: stretch;
+}
+
+.cu-bar.tabbar .submit:last-child {
+ flex: 2.6;
+}
+
+.cu-bar.tabbar .submit+.submit {
+ flex: 2;
+}
+
+.cu-bar.tabbar.border .action::before {
+ content: " ";
+ width: 200%;
+ height: 200%;
+ position: absolute;
+ top: 0;
+ left: 0;
+ transform: scale(0.5);
+ transform-origin: 0 0;
+ border-right: 1rpx solid rgba(0, 0, 0, 0.1);
+ z-index: 3;
+}
+
+.cu-bar.tabbar.border .action:last-child:before {
+ display: none;
+}
+
+.cu-bar.input {
+ padding-right: 20rpx;
+ background-color: var(--white);
+}
+
+.cu-bar.input input {
+ overflow: initial;
+ line-height: 64rpx;
+ height: 64rpx;
+ min-height: 64rpx;
+ flex: 1;
+ font-size: 30rpx;
+ margin: 0 20rpx;
+}
+
+.cu-bar.input .action {
+ margin-left: 20rpx;
+}
+
+.cu-bar.input .action [class*="cuIcon-"] {
+ font-size: 48rpx;
+}
+
+.cu-bar.input input+.action {
+ margin-right: 20rpx;
+ margin-left: 0rpx;
+}
+
+.cu-bar.input .action:first-child [class*="cuIcon-"] {
+ margin-left: 0rpx;
+}
+
+.cu-custom {
+ display: block;
+ position: relative;
+}
+
+.cu-custom .cu-bar .content {
+ width: calc(100% - 440rpx);
+}
+
+.cu-custom .cu-bar .content image {
+ height: 60rpx;
+ width: 240rpx;
+}
+
+.cu-custom .cu-bar {
+ min-height: 0px;
+ padding-right: 220rpx;
+ box-shadow: 0rpx 0rpx 0rpx;
+ z-index: 99;
+}
+
+.cu-custom .cu-bar .border-custom {
+ position: relative;
+ background: rgba(0, 0, 0, 0.15);
+ border-radius: 1000rpx;
+ height: 30px;
+}
+
+.cu-custom .cu-bar .border-custom::after {
+ content: " ";
+ width: 200%;
+ height: 200%;
+ position: absolute;
+ top: 0;
+ left: 0;
+ border-radius: inherit;
+ transform: scale(0.5);
+ transform-origin: 0 0;
+ pointer-events: none;
+ box-sizing: border-box;
+ border: 1rpx solid var(--white);
+ opacity: 0.5;
+}
+
+.cu-custom .cu-bar .border-custom::before {
+ content: " ";
+ width: 1rpx;
+ height: 110%;
+ position: absolute;
+ top: 22.5%;
+ left: 0;
+ right: 0;
+ margin: auto;
+ transform: scale(0.5);
+ transform-origin: 0 0;
+ pointer-events: none;
+ box-sizing: border-box;
+ opacity: 0.6;
+ background-color: var(--white);
+}
+
+.cu-custom .cu-bar .border-custom text {
+ display: block;
+ flex: 1;
+ margin: auto !important;
+ text-align: center;
+ font-size: 34rpx;
+}
+
+/* ==================
+ 导航栏
+ ==================== */
+
+.nav {
+ white-space: nowrap;
+}
+
+::-webkit-scrollbar {
+ display: none;
+}
+
+.nav .cu-item {
+ height: 90rpx;
+ display: inline-block;
+ line-height: 90rpx;
+ margin: 0 10rpx;
+ padding: 0 20rpx;
+}
+
+.nav .cu-item.cur {
+ border-bottom: 4rpx solid;
+}
+
+/* ==================
+ 时间轴
+ ==================== */
+
+.cu-timeline {
+ display: block;
+ background-color: var(--white);
+}
+
+.cu-timeline .cu-time {
+ width: 120rpx;
+ text-align: center;
+ padding: 20rpx 0;
+ font-size: 26rpx;
+ color: #888;
+ display: block;
+}
+
+.cu-timeline>.cu-item {
+ padding: 24rpx 30rpx 30rpx 90rpx;
+ position: relative;
+ display: block;
+ z-index: 0;
+}
+
+.cu-timeline>.cu-item:not([class*="text-"]) {
+ color: #ccc;
+}
+
+.cu-timeline>.cu-item::after {
+ content: "";
+ display: block;
+ position: absolute;
+ width: 1rpx;
+ background-color: #ddd;
+ left: 60rpx;
+ height: 100%;
+ top: 0;
+ z-index: 8;
+}
+
+.cu-timeline>.cu-item::before {
+ font-family: "cuIcon";
+ display: block;
+ position: absolute;
+ top: 36rpx;
+ z-index: 9;
+ background-color: var(--white);
+ width: 50rpx;
+ height: 50rpx;
+ text-align: center;
+ border: none;
+ line-height: 50rpx;
+ left: 36rpx;
+}
+
+.cu-timeline>.cu-item:not([class*="cuIcon-"])::before {
+ content: "\e763";
+}
+
+.cu-timeline>.cu-item[class*="cuIcon-"]::before {
+ background-color: var(--white);
+ width: 50rpx;
+ height: 50rpx;
+ text-align: center;
+ border: none;
+ line-height: 50rpx;
+ left: 36rpx;
+}
+
+.cu-timeline>.cu-item>.content {
+ padding: 30rpx;
+ border-radius: 6rpx;
+ display: block;
+ line-height: 1.6;
+}
+
+.cu-timeline>.cu-item>.content:not([class*="bg-"]) {
+ /* background-color: var(--ghostWhite); */
+ color: var(--black);
+}
+
+.cu-timeline>.cu-item>.content+.content {
+ margin-top: 20rpx;
+}
+
+/* ==================
+ 卡片
+ ==================== */
+
+.cu-card {
+ display: block;
+ overflow: hidden;
+}
+
+.cu-card>.cu-item {
+ display: block;
+ background-color: var(--white);
+ overflow: hidden;
+ border-radius: 10rpx;
+ margin: 30rpx;
+}
+
+.cu-card>.cu-item.shadow-blur {
+ overflow: initial;
+}
+
+.cu-card.no-card>.cu-item {
+ margin: 0rpx;
+ border-radius: 0rpx;
+}
+
+.cu-card .grid.grid-square {
+ margin-bottom: -20rpx;
+}
+
+.cu-card.case .image {
+ position: relative;
+}
+
+.cu-card.case .image image {
+ width: 100%;
+}
+
+.cu-card.case .image .cu-tag {
+ position: absolute;
+ right: 0;
+ top: 0;
+}
+
+.cu-card.case .image .cu-bar {
+ position: absolute;
+ bottom: 0;
+ width: 100%;
+ background-color: transparent;
+ padding: 0rpx 30rpx;
+}
+
+.cu-card.case.no-card .image {
+ margin: 30rpx 30rpx 0;
+ overflow: hidden;
+ border-radius: 10rpx;
+}
+
+.cu-card.dynamic {
+ display: block;
+}
+
+.cu-card.dynamic>.cu-item {
+ display: block;
+ background-color: var(--white);
+ overflow: hidden;
+}
+
+.cu-card.dynamic>.cu-item>.text-content {
+ padding: 0 30rpx 0;
+ max-height: 6.4em;
+ overflow: hidden;
+ font-size: 30rpx;
+ margin-bottom: 20rpx;
+}
+
+.cu-card.dynamic>.cu-item .square-img {
+ width: 100%;
+ height: 200rpx;
+ border-radius: 6rpx;
+}
+
+.cu-card.dynamic>.cu-item .only-img {
+ width: 100%;
+ height: 320rpx;
+ border-radius: 6rpx;
+}
+
+.cu-card.article {
+ display: block;
+}
+
+.cu-card.article>.cu-item {
+ padding-bottom: 24rpx;
+}
+
+.cu-card.article>.cu-item .title {
+ font-size: 30rpx;
+ font-weight: 900;
+ color: var(--black);
+ line-height: 80rpx;
+ padding: 0 30rpx;
+}
+
+.cu-card.article>.cu-item .content {
+ display: flex;
+ padding: 0 30rpx;
+}
+
+.cu-card.article>.cu-item .content>image {
+ width: 180rpx;
+ height: 180rpx;
+ margin-right: 20rpx;
+ border-radius: 6rpx;
+}
+
+.cu-card.article>.cu-item .content .desc {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+}
+
+.cu-card.article>.cu-item .content .text-content {
+ font-size: 28rpx;
+ color: #888;
+ height: 4.8em;
+ overflow: hidden;
+}
+
+/* ==================
+ 表单
+ ==================== */
+
+.cu-form-group {
+ background-color: var(--white);
+ padding: 1rpx 30rpx;
+ display: flex;
+ align-items: center;
+ min-height: 100rpx;
+ justify-content: space-between;
+}
+
+.cu-form-group+.cu-form-group {
+ border-top: 1rpx solid #eee;
+}
+
+.cu-form-group .title {
+ text-align: justify;
+ /* padding-right: 30rpx; */
+ font-size: 30rpx;
+ position: relative;
+ height: 60rpx;
+ line-height: 60rpx;
+}
+
+.cu-form-group input {
+ flex: 1;
+ font-size: 30rpx;
+ color: #555;
+ padding-right: 20rpx;
+}
+
+.cu-form-group>text[class*="cuIcon-"] {
+ font-size: 36rpx;
+ padding: 0;
+ box-sizing: border-box;
+}
+
+.cu-form-group textarea {
+ margin: 32rpx 0 30rpx;
+ height: 4.6em;
+ width: 100%;
+ line-height: 1.2em;
+ flex: 1;
+ font-size: 28rpx;
+ padding: 0;
+}
+
+.cu-form-group.align-start .title {
+ height: 1em;
+ margin-top: 32rpx;
+ line-height: 1em;
+}
+
+.cu-form-group picker {
+ flex: 1;
+ padding-right: 40rpx;
+ overflow: hidden;
+ position: relative;
+}
+
+.cu-form-group picker .picker {
+ line-height: 100rpx;
+ font-size: 28rpx;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ overflow: hidden;
+ width: 100%;
+ text-align: right;
+}
+
+.cu-form-group picker::after {
+ font-family: "cuIcon";
+ display: block;
+ content: "\e6a3";
+ position: absolute;
+ font-size: 34rpx;
+ color: var(--grey);
+ line-height: 100rpx;
+ width: 60rpx;
+ text-align: center;
+ top: 0;
+ bottom: 0;
+ right: -20rpx;
+ margin: auto;
+}
+
+.cu-form-group textarea[disabled],
+.cu-form-group textarea[disabled] .placeholder {
+ color: transparent;
+}
+
+/* ==================
+ 轮播
+ ==================== */
+
+swiper .a-swiper-dot {
+ display: inline-block;
+ width: 16rpx;
+ height: 16rpx;
+ background: rgba(0, 0, 0, 0.3);
+ border-radius: 50%;
+ vertical-align: middle;
+}
+
+swiper[class*="-dot"] .wx-swiper-dots {
+ display: flex;
+ align-items: center;
+ width: 100%;
+ justify-content: center;
+}
+
+swiper.square-dot .wx-swiper-dot {
+ background-color: var(--white);
+ opacity: 0.4;
+ width: 10rpx;
+ height: 10rpx;
+ border-radius: 20rpx;
+ margin: 0 8rpx !important;
+}
+
+swiper.square-dot .wx-swiper-dot.wx-swiper-dot-active {
+ opacity: 1;
+ width: 30rpx;
+}
+
+swiper.round-dot .wx-swiper-dot {
+ width: 10rpx;
+ height: 10rpx;
+ position: relative;
+ margin: 4rpx 8rpx !important;
+}
+
+swiper.round-dot .wx-swiper-dot.wx-swiper-dot-active::after {
+ content: "";
+ position: absolute;
+ width: 10rpx;
+ height: 10rpx;
+ top: 0rpx;
+ left: 0rpx;
+ right: 0;
+ bottom: 0;
+ margin: auto;
+ background-color: var(--white);
+ border-radius: 20rpx;
+}
+
+swiper.round-dot .wx-swiper-dot.wx-swiper-dot-active {
+ width: 18rpx;
+ height: 18rpx;
+}
+
+.screen-swiper {
+ min-height: 300rpx;
+}
+
+.screen-swiper image, .screen-swiper video, .swiper-item image,
+.swiper-item video {
+ width: 100%;
+ display: block;
+ height: 100%;
+ margin: 0;
+ pointer-events: none;
+}
+
+.card-swiper {
+ height: 420rpx !important;
+}
+
+.card-swiper swiper-item {
+ width: 610rpx !important;
+ left: 70rpx;
+ box-sizing: border-box;
+ padding: 40rpx 0rpx 70rpx;
+ overflow: initial;
+}
+
+.card-swiper swiper-item .swiper-item {
+ width: 100%;
+ display: block;
+ height: 100%;
+ border-radius: 10rpx;
+ transform: scale(0.9);
+ transition: all 0.2s ease-in 0s;
+ overflow: hidden;
+}
+
+.card-swiper swiper-item.cur .swiper-item {
+ transform: none;
+ transition: all 0.2s ease-in 0s;
+}
+
+.tower-swiper {
+ height: 420rpx;
+ position: relative;
+ max-width: 750rpx;
+ overflow: hidden;
+}
+
+.tower-swiper .tower-item {
+ position: absolute;
+ width: 300rpx;
+ height: 380rpx;
+ top: 0;
+ bottom: 0;
+ left: 50%;
+ margin: auto;
+ transition: all 0.2s ease-in 0s;
+ opacity: 1;
+}
+
+.tower-swiper .tower-item.none {
+ opacity: 0;
+}
+
+.tower-swiper .tower-item .swiper-item {
+ width: 100%;
+ height: 100%;
+ border-radius: 6rpx;
+ overflow: hidden;
+}
+/* ==================
+ 加载
+ ==================== */
+.load-spinner {
+ display: block;
+}
+
+.load-spinner::after {
+ content: "";
+ display: block;
+ width: 48rpx;
+ height: 48rpx;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ border: solid 4rpx transparent;
+ border-top-color: inherit;
+ border-left-color: inherit;
+ border-radius: 50%;
+ -webkit-animation: load-progress-spinner 0.4s linear infinite;
+ animation: load-progress-spinner 0.4s linear infinite;
+}
+
+@-webkit-keyframes load-progress-spinner {
+ 0% {
+ -webkit-transform: rotate(0);
+ transform: rotate(0);
+ }
+
+ 100% {
+ -webkit-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+
+@keyframes load-progress-spinner {
+ 0% {
+ -webkit-transform: rotate(0);
+ transform: rotate(0);
+ }
+
+ 100% {
+ -webkit-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+
+/* ==================
+ 步骤条
+ ==================== */
+
+.cu-steps {
+ display: flex;
+}
+
+scroll-view.cu-steps {
+ display: block;
+ white-space: nowrap;
+}
+
+scroll-view.cu-steps .cu-item {
+ display: inline-block;
+}
+
+.cu-steps .cu-item {
+ flex: 1;
+ text-align: center;
+ position: relative;
+ min-width: 100rpx;
+}
+
+.cu-steps .cu-item:not([class*="text-"]) {
+ color: var(--grey);
+}
+
+.cu-steps .cu-item [class*="cuIcon-"],
+.cu-steps .cu-item .num {
+ display: block;
+ font-size: 50rpx;
+ line-height: 40rpx;
+}
+
+.cu-steps .cu-item::before,
+.cu-steps .cu-item::after,
+.cu-steps.steps-arrow .cu-item::before,
+.cu-steps.steps-arrow .cu-item::after {
+ content: "";
+ display: block;
+ position: absolute;
+ height: 0px;
+ width: calc(100% - 80rpx);
+ border-bottom: 1px solid #ccc;
+ left: calc(0px - (100% - 40rpx) / 2);
+ top: 18rpx;
+ z-index: 0;
+}
+
+.cu-steps.steps-arrow .cu-item::before,
+.cu-steps.steps-arrow .cu-item::after {
+ content: "\e6a3";
+ font-family: "cuIcon";
+ height: 30rpx;
+ border-bottom-width: 0px;
+ line-height: 30rpx;
+ top: 0;
+ bottom: 0;
+ margin: auto;
+ color: #ccc;
+}
+
+.cu-steps.steps-bottom .cu-item::before,
+.cu-steps.steps-bottom .cu-item::after {
+ bottom: 40rpx;
+ top: initial;
+}
+
+.cu-steps .cu-item::after {
+ border-bottom: 1px solid currentColor;
+ width: 0px;
+ transition: all 0.3s ease-in-out 0s;
+}
+
+.cu-steps .cu-item[class*="text-"]::after {
+ width: calc(100% - 40rpx);
+ color: currentColor;
+}
+
+.cu-steps .cu-item:first-child::before,
+.cu-steps .cu-item:first-child::after {
+ display: none;
+}
+
+.cu-steps .cu-item .num {
+ width: 40rpx;
+ height: 40rpx;
+ border-radius: 50%;
+ line-height: 40rpx;
+ margin: 20rpx auto;
+ font-size: 24rpx;
+ border: 1px solid currentColor;
+ position: relative;
+ overflow: hidden;
+}
+
+.cu-steps .cu-item[class*="text-"] .num {
+ background-color: currentColor;
+}
+
+.cu-steps .cu-item .num::before,
+.cu-steps .cu-item .num::after {
+ content: attr(data-index);
+ position: absolute;
+ left: 0;
+ right: 0;
+ top: 0;
+ bottom: 0;
+ margin: auto;
+ transition: all 0.3s ease-in-out 0s;
+ transform: translateY(0rpx);
+}
+
+.cu-steps .cu-item[class*="text-"] .num::before {
+ transform: translateY(-40rpx);
+ color: var(--white);
+}
+
+.cu-steps .cu-item .num::after {
+ transform: translateY(40rpx);
+ color: var(--white);
+ transition: all 0.3s ease-in-out 0s;
+}
+
+.cu-steps .cu-item[class*="text-"] .num::after {
+ content: "\e645";
+ font-family: "cuIcon";
+ color: var(--white);
+ transform: translateY(0rpx);
+}
+
+.cu-steps .cu-item[class*="text-"] .num.err::after {
+ content: "\e646";
+}
+/* ==================
+ 布局
+ ==================== */
+
+/* -- flex弹性布局 -- */
+
+.flex {
+ display: flex;
+}
+
+.flex-direction {
+ flex-direction: column;
+}
+
+.flex-wrap {
+ flex-wrap: wrap;
+}
+
+.align-start {
+ align-items: flex-start;
+}
+
+.align-end {
+ align-items: flex-end;
+}
+
+.align-center {
+ align-items: center;
+}
+
+.align-stretch {
+ align-items: stretch;
+}
+
+.self-start {
+ align-self: flex-start;
+}
+
+.self-center {
+ align-self: flex-center;
+}
+
+.self-end {
+ align-self: flex-end;
+}
+
+.self-stretch {
+ align-self: stretch;
+}
+
+.align-stretch {
+ align-items: stretch;
+}
+
+.justify-start {
+ justify-content: flex-start;
+}
+
+.justify-end {
+ justify-content: flex-end;
+}
+
+.justify-center {
+ justify-content: center;
+}
+
+.justify-between {
+ justify-content: space-between;
+}
+
+.justify-around {
+ justify-content: space-around;
+}
+
+/* grid布局 */
+
+.grid {
+ display: flex;
+ flex-wrap: wrap;
+}
+
+.grid.grid-square {
+ overflow: hidden;
+}
+
+.grid.grid-square .cu-tag {
+ position: absolute;
+ right: 0;
+ top: 0;
+ border-bottom-left-radius: 6rpx;
+ padding: 6rpx 12rpx;
+ height: auto;
+ background-color: rgba(0, 0, 0, 0.5);
+}
+
+.grid.grid-square>view>text[class*="cuIcon-"] {
+ font-size: 52rpx;
+ position: absolute;
+ color: var(--grey);
+ margin: auto;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ flex-direction: column;
+}
+
+.grid.grid-square>view {
+ margin-right: 20rpx;
+ margin-bottom: 20rpx;
+ border-radius: 6rpx;
+ position: relative;
+ overflow: hidden;
+}
+
+.grid.grid-square>view.bg-img image {
+ width: 100%;
+ height: 100%;
+ position: absolute;
+}
+
+.grid.col-1.grid-square>view {
+ padding-bottom: 100%;
+ height: 0;
+ margin-right: 0;
+}
+
+.grid.col-2.grid-square>view {
+ padding-bottom: calc((100% - 20rpx)/2);
+ height: 0;
+ width: calc((100% - 20rpx)/2);
+}
+
+.grid.col-3.grid-square>view {
+ padding-bottom: calc((100% - 40rpx)/3);
+ height: 0;
+ width: calc((100% - 40rpx)/3);
+}
+
+.grid.col-4.grid-square>view {
+ padding-bottom: calc((100% - 60rpx)/4);
+ height: 0;
+ width: calc((100% - 60rpx)/4);
+}
+
+.grid.col-5.grid-square>view {
+ padding-bottom: calc((100% - 80rpx)/5);
+ height: 0;
+ width: calc((100% - 80rpx)/5);
+}
+
+.grid.col-2.grid-square>view:nth-child(2n),
+.grid.col-3.grid-square>view:nth-child(3n),
+.grid.col-4.grid-square>view:nth-child(4n),
+.grid.col-5.grid-square>view:nth-child(5n) {
+ margin-right: 0;
+}
+
+.grid.col-1>view {
+ width: 100%;
+}
+
+.grid.col-2>view {
+ width: 50%;
+}
+
+.grid.col-3>view {
+ width: 33.33%;
+}
+
+.grid.col-4>view {
+ width: 25%;
+}
+
+.grid.col-5>view {
+ width: 20%;
+}
+
+/* -- 内外边距 -- */
+
+.margin-top-sm {
+ margin-top: 20rpx;
+}
+
+.margin-top {
+ margin-top: 30rpx;
+}
+
+.padding-0 {
+ padding: 0;
+}
+
+.padding-xs {
+ padding: 10rpx;
+}
+
+.padding-sm {
+ padding: 20rpx;
+}
+
+.padding {
+ padding: 30rpx;
+}
+
+.padding-lg {
+ padding: 40rpx;
+}
+
+.padding-xl {
+ padding: 50rpx;
+}
+
+.padding-top-xs {
+ padding-top: 10rpx;
+}
+
+.padding-top-sm {
+ padding-top: 20rpx;
+}
+
+.padding-top {
+ padding-top: 30rpx;
+}
+
+.padding-right {
+ padding-right: 30rpx;
+}
+
+.padding-bottom {
+ padding-bottom: 30rpx;
+}
+
+.padding-left {
+ padding-left: 30rpx;
+}
+
+/* ==================
+ 背景
+ ==================== */
+
+.line-red::after, .lines-red::after {
+ border-color: var(--red);
+}
+
+.line-orange::after, .lines-orange::after {
+ border-color: var(--orange);
+}
+
+.line-yellow::after, .lines-yellow::after {
+ border-color: var(--yellow);
+}
+
+.line-olive::after, .lines-olive::after {
+ border-color: var(--olive);
+}
+
+.line-green::after, .lines-green::after {
+ border-color: var(--green);
+}
+
+.line-cyan::after, .lines-cyan::after {
+ border-color: var(--cyan);
+}
+
+.line-blue::after, .lines-blue::after {
+ border-color: var(--blue);
+}
+
+.line-purple::after, .lines-purple::after {
+ border-color: var(--purple);
+}
+
+.line-mauve::after, .lines-mauve::after {
+ border-color: var(--mauve);
+}
+
+.line-pink::after, .lines-pink::after {
+ border-color: var(--pink);
+}
+
+.line-brown::after, .lines-brown::after {
+ border-color: var(--brown);
+}
+
+.line-grey::after, .lines-grey::after {
+ border-color: var(--grey);
+}
+
+.line-gray::after, .lines-gray::after {
+ border-color: var(--gray);
+}
+
+.line-black::after, .lines-black::after {
+ border-color: var(--black);
+}
+
+.line-white::after, .lines-white::after {
+ border-color: var(--white);
+}
+
+.bg-red {
+ background-color: var(--red);
+ color: var(--white);
+}
+
+.bg-orange {
+ background-color: var(--orange);
+ color: var(--white);
+}
+
+.bg-yellow {
+ background-color: var(--yellow);
+ color: var(--black);
+}
+
+.bg-olive {
+ background-color: var(--olive);
+ color: var(--white);
+}
+
+.bg-green {
+ background-color: var(--green);
+ color: var(--white);
+}
+
+.bg-cyan {
+ background-color: var(--cyan);
+ color: var(--white);
+}
+
+.bg-blue {
+ background-color: var(--blue);
+ color: var(--white);
+}
+
+.bg-purple {
+ background-color: var(--purple);
+ color: var(--white);
+}
+
+.bg-mauve {
+ background-color: var(--mauve);
+ color: var(--white);
+}
+
+.bg-pink {
+ background-color: var(--pink);
+ color: var(--white);
+}
+
+.bg-brown {
+ background-color: var(--brown);
+ color: var(--white);
+}
+
+.bg-grey {
+ background-color: var(--grey);
+ color: var(--white);
+}
+
+.bg-gray {
+ background-color: #f0f0f0;
+ color: var(--black);
+}
+
+.bg-black {
+ background-color: var(--black);
+ color: var(--white);
+}
+
+.bg-white {
+ background-color: var(--white);
+ color: var(--darkGray);
+}
+
+.bg-shadeTop {
+ background-image: linear-gradient(rgba(0, 0, 0, 1), rgba(0, 0, 0, 0.01));
+ color: var(--white);
+}
+
+.bg-shadeBottom {
+ background-image: linear-gradient(rgba(0, 0, 0, 0.01), rgba(0, 0, 0, 1));
+ color: var(--white);
+}
+
+.bg-red.light {
+ color: var(--red);
+ background-color: var(--redLight);
+}
+
+.bg-orange.light {
+ color: var(--orange);
+ background-color: var(--orangeLight);
+}
+
+.bg-yellow.light {
+ color: var(--yellow);
+ background-color: var(--yellowLight);
+}
+
+.bg-olive.light {
+ color: var(--olive);
+ background-color: var(--oliveLight);
+}
+
+.bg-green.light {
+ color: var(--green);
+ background-color: var(--greenLight);
+}
+
+.bg-cyan.light {
+ color: var(--cyan);
+ background-color: var(--cyanLight);
+}
+
+.bg-blue.light {
+ color: var(--blue);
+ background-color: var(--blueLight);
+}
+
+.bg-purple.light {
+ color: var(--purple);
+ background-color: var(--purpleLight);
+}
+
+.bg-mauve.light {
+ color: var(--mauve);
+ background-color: var(--mauveLight);
+}
+
+.bg-pink.light {
+ color: var(--pink);
+ background-color: var(--pinkLight);
+}
+
+.bg-brown.light {
+ color: var(--brown);
+ background-color: var(--brownLight);
+}
+
+.bg-grey.light {
+ color: var(--grey);
+ background-color: var(--greyLight);
+}
+
+.bg-gradual-red {
+ background-image: var(--gradualRed);
+ color: var(--white);
+}
+
+.bg-gradual-orange {
+ background-image: var(--gradualOrange);
+ color: var(--white);
+}
+
+.bg-gradual-green {
+ background-image: var(--gradualGreen);
+ color: var(--white);
+}
+
+.bg-gradual-purple {
+ background-image: var(--gradualPurple);
+ color: var(--white);
+}
+
+.bg-gradual-pink {
+ background-image: var(--gradualPink);
+ color: var(--white);
+}
+
+.bg-gradual-blue {
+ background-image: var(--gradualBlue);
+ color: var(--white);
+}
+
+.shadow[class*="-red"] {
+ box-shadow: var(--ShadowSize) var(--redShadow);
+}
+
+.shadow[class*="-orange"] {
+ box-shadow: var(--ShadowSize) var(--orangeShadow);
+}
+
+.shadow[class*="-yellow"] {
+ box-shadow: var(--ShadowSize) var(--yellowShadow);
+}
+
+.shadow[class*="-olive"] {
+ box-shadow: var(--ShadowSize) var(--oliveShadow);
+}
+
+.shadow[class*="-green"] {
+ box-shadow: var(--ShadowSize) var(--greenShadow);
+}
+
+.shadow[class*="-cyan"] {
+ box-shadow: var(--ShadowSize) var(--cyanShadow);
+}
+
+.shadow[class*="-blue"] {
+ box-shadow: var(--ShadowSize) var(--blueShadow);
+}
+
+.shadow[class*="-purple"] {
+ box-shadow: var(--ShadowSize) var(--purpleShadow);
+}
+
+.shadow[class*="-mauve"] {
+ box-shadow: var(--ShadowSize) var(--mauveShadow);
+}
+
+.shadow[class*="-pink"] {
+ box-shadow: var(--ShadowSize) var(--pinkShadow);
+}
+
+.shadow[class*="-brown"] {
+ box-shadow: var(--ShadowSize) var(--brownShadow);
+}
+
+.shadow[class*="-grey"] {
+ box-shadow: var(--ShadowSize) var(--greyShadow);
+}
+
+.shadow[class*="-gray"] {
+ box-shadow: var(--ShadowSize) var(--grayShadow);
+}
+
+.shadow[class*="-black"] {
+ box-shadow: var(--ShadowSize) var(--blackShadow);
+}
+
+.shadow[class*="-white"] {
+ box-shadow: var(--ShadowSize) var(--blackShadow);
+}
+
+.text-shadow[class*="-red"] {
+ text-shadow: var(--ShadowSize) var(--redShadow);
+}
+
+.text-shadow[class*="-orange"] {
+ text-shadow: var(--ShadowSize) var(--orangeShadow);
+}
+
+.text-shadow[class*="-yellow"] {
+ text-shadow: var(--ShadowSize) var(--yellowShadow);
+}
+
+.text-shadow[class*="-olive"] {
+ text-shadow: var(--ShadowSize) var(--oliveShadow);
+}
+
+.text-shadow[class*="-green"] {
+ text-shadow: var(--ShadowSize) var(--greenShadow);
+}
+
+.text-shadow[class*="-cyan"] {
+ text-shadow: var(--ShadowSize) var(--cyanShadow);
+}
+
+.text-shadow[class*="-blue"] {
+ text-shadow: var(--ShadowSize) var(--blueShadow);
+}
+
+.text-shadow[class*="-purple"] {
+ text-shadow: var(--ShadowSize) var(--purpleShadow);
+}
+
+.text-shadow[class*="-mauve"] {
+ text-shadow: var(--ShadowSize) var(--mauveShadow);
+}
+
+.text-shadow[class*="-pink"] {
+ text-shadow: var(--ShadowSize) var(--pinkShadow);
+}
+
+.text-shadow[class*="-brown"] {
+ text-shadow: var(--ShadowSize) var(--brownShadow);
+}
+
+.text-shadow[class*="-grey"] {
+ text-shadow: var(--ShadowSize) var(--greyShadow);
+}
+
+.text-shadow[class*="-gray"] {
+ text-shadow: var(--ShadowSize) var(--grayShadow);
+}
+
+.text-shadow[class*="-black"] {
+ text-shadow: var(--ShadowSize) var(--blackShadow);
+}
+
+.bg-img {
+ background-size: cover;
+ background-position: center;
+ background-repeat: no-repeat;
+}
+
+.bg-mask {
+ background-color: var(--black);
+ position: relative;
+}
+
+.bg-mask::after {
+ content: "";
+ border-radius: inherit;
+ width: 100%;
+ height: 100%;
+ display: block;
+ background-color: rgba(0, 0, 0, 0.4);
+ position: absolute;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ top: 0;
+}
+
+.bg-mask view, .bg-mask cover-view {
+ z-index: 5;
+ position: relative;
+}
+
+.bg-video {
+ position: relative;
+}
+
+.bg-video video {
+ display: block;
+ height: 100%;
+ width: 100%;
+ -o-object-fit: cover;
+ object-fit: cover;
+ position: absolute;
+ top: 0;
+ z-index: 0;
+ pointer-events: none;
+}
+
+/* ==================
+ 文本
+ ==================== */
+
+.text-xs {
+ font-size: 20rpx;
+}
+
+.text-sm {
+ font-size: 24rpx;
+}
+
+.text-df {
+ font-size: 28rpx;
+}
+
+.text-sg {
+ font-size: 30rpx;
+}
+
+.text-lg {
+ font-size: 32rpx;
+}
+
+.text-xl {
+ font-size: 36rpx;
+}
+
+.text-xxl {
+ font-size: 44rpx;
+}
+
+.text-sl {
+ font-size: 80rpx;
+}
+
+.text-xsl {
+ font-size: 120rpx;
+}
+
+.text-Abc {
+ text-transform: Capitalize;
+}
+
+.text-ABC {
+ text-transform: Uppercase;
+}
+
+.text-abc {
+ text-transform: Lowercase;
+}
+
+.text-price::before {
+ content: "¥";
+ font-size: 80%;
+ margin-right: 4rpx;
+}
+
+.text-cut {
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ overflow: hidden;
+}
+
+.text-bold {
+ font-weight: bold;
+}
+
+.text-center {
+ text-align: center;
+}
+
+.text-content {
+ line-height: 1.6;
+}
+
+.text-left {
+ text-align: left;
+}
+
+.text-right {
+ text-align: right;
+}
+
+.text-red, .line-red, .lines-red {
+ color: var(--red);
+}
+
+.text-orange, .line-orange, .lines-orange {
+ color: var(--orange);
+}
+
+.text-yellow, .line-yellow, .lines-yellow {
+ color: var(--yellow);
+}
+
+.text-olive, .line-olive, .lines-olive {
+ color: var(--olive);
+}
+
+.text-green, .line-green, .lines-green {
+ color: var(--green);
+}
+
+.text-cyan, .line-cyan, .lines-cyan {
+ color: var(--cyan);
+}
+
+.text-blue, .line-blue, .lines-blue {
+ color: var(--blue);
+}
+
+.text-purple, .line-purple, .lines-purple {
+ color: var(--purple);
+}
+
+.text-mauve, .line-mauve, .lines-mauve {
+ color: var(--mauve);
+}
+
+.text-pink, .line-pink, .lines-pink {
+ color: var(--pink);
+}
+
+.text-brown, .line-brown, .lines-brown {
+ color: var(--brown);
+}
+
+.text-grey, .line-grey, .lines-grey {
+ color: var(--grey);
+}
+
+.text-gray, .line-gray, .lines-gray {
+ color: var(--gray);
+}
+
+.text-black, .line-black, .lines-black {
+ color: var(--black);
+}
+
+.text-white, .line-white, .lines-white {
+ color: var(--white);
+}
+
+.list-empty {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+}
+
+.img-empty {
+ width: 280rpx;
+ height: 280rpx;
+}
+
+.text-empty {
+ /* margin-top: 48rpx; */
+ font-size: 30rpx;
+ color: #666;
+ text-align: center;
+}
+
+.input-grey {
+ color: #888;
+}
+
+.font14 {
+ font-size: 28rpx;
+}
+
+.cate_item {
+ min-height: 80rpx;
+ background-color: #eee;
+ border-radius: 8rpx;
+ margin: 0 24rpx;
+}
+
+.margin-b {
+ margin-bottom: 16rpx;
+}
+
+.flex-sub {
+ flex: 1;
+}
+
+.wux-prompt {
+ display: -ms-flexbox;
+ display: flex;
+ height: 100%;
+ -ms-flex-align: center;
+ align-items: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ color: #939393;
+ background-color: #f2f3f4;
+}
+
+.offer-icon {
+ height: 6.8em;
+ border: 1rpx solid #f3f3f3;
+}
+
+.icon--refresher {
+ width: 40rpx;
+ height: 40rpx;
+ display: inline-block;
+ vertical-align: middle;
+ animation: loading 1s steps(12, end) infinite;
+ background: transparent url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iMTIwIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgxMDB2MTAwSDB6Ii8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTlFOUU5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTMwKSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iIzk4OTY5NyIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgzMCAxMDUuOTggNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjOUI5OTlBIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDYwIDc1Ljk4IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0EzQTFBMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSg5MCA2NSA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNBQkE5QUEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoMTIwIDU4LjY2IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0IyQjJCMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgxNTAgNTQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjQkFCOEI5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDE4MCA1MCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDMkMwQzEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTE1MCA0NS45OCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDQkNCQ0IiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTEyMCA0MS4zNCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNEMkQyRDIiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTkwIDM1IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0RBREFEQSIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgtNjAgMjQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTJFMkUyIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKC0zMCAtNS45OCA2NSkiLz48L3N2Zz4=) no-repeat;
+ background-size: 100%;
+}
+
+@keyframes loading {
+ 0% {
+ transform: rotate3d(0, 0, 1, 0deg);
+ }
+
+ 100% {
+ transform: rotate3d(0, 0, 1, 360deg);
+ }
+}
+
+
+.customer-box-blue {
+ border: 1px solid #009ddf;
+ width: 80rpx;
+ height: 80rpx;
+ -webkit-box-orient: vertical;
+ -webkit-flex-direction: column;
+ flex-direction: column;
+ align-items: center;
+ border-radius: 4px;
+}
+
+.customer-box-green {
+ border: 1px solid #0ec1ba;
+ width: 80rpx;
+ height: 80rpx;
+ -webkit-box-orient: vertical;
+ -webkit-flex-direction: column;
+ flex-direction: column;
+ align-items: center;
+ border-radius: 4px;
+}
+
+.customer-box-tree {
+ border: 1px solid #3bdd79;
+ width: 80rpx;
+ height: 80rpx;
+ -webkit-box-orient: vertical;
+ -webkit-flex-direction: column;
+ flex-direction: column;
+ align-items: center;
+ border-radius: 4px;
+}
+
+.customer-text-blue {
+ border-radius: 2px 2px 0px 0px;
+ background-color: #009ddf;
+ width: 100%;
+ text-align: center;
+ font-size: 20px;
+ color: white;
+ font-weight: bold;
+}
+
+.customer-text-green {
+ border-radius: 2px 2px 0px 0px;
+ background-color: #0ec1ba;
+ width: 100%;
+ text-align: center;
+ font-size: 20px;
+ color: white;
+ font-weight: bold;
+}
+
+.customer-text-tree {
+ border-radius: 2px 2px 0px 0px;
+ background-color: #3bdd79;
+ width: 100%;
+ text-align: center;
+ font-size: 20px;
+ color: white;
+ font-weight: bold;
+}
+
+.customer-type-blue{
+ text-align: center;
+ font-size: 28rpx;
+ color: #009ddf
+}
+
+.customer-type-green{
+ text-align: center;
+ font-size: 28rpx;
+ color: #0ec1ba;
+}
+
+.customer-type-tree{
+ text-align: center;
+ font-size: 28rpx;
+ color: #3bdd79;
+}
\ No newline at end of file
diff --git a/components/animation-group/index.js b/components/animation-group/index.js
new file mode 100644
index 0000000..f485fee
--- /dev/null
+++ b/components/animation-group/index.js
@@ -0,0 +1,382 @@
+import baseComponent from '../helpers/baseComponent'
+import styleToCssString from '../helpers/styleToCssString'
+
+const ENTER = 'enter'
+const ENTERING = 'entering'
+const ENTERED = 'entered'
+const EXIT = 'exit'
+const EXITING = 'exiting'
+const EXITED = 'exited'
+const UNMOUNTED = 'unmounted'
+
+const TRANSITION = 'transition'
+const ANIMATION = 'animation'
+
+const TIMEOUT = 1000 / 60
+
+const defaultClassNames = {
+ enter: '', // 进入过渡的开始状态,在过渡过程完成之后移除
+ enterActive: '', // 进入过渡的结束状态,在过渡过程完成之后移除
+ enterDone: '', // 进入过渡的完成状态
+ exit: '', // 离开过渡的开始状态,在过渡过程完成之后移除
+ exitActive: '', // 离开过渡的结束状态,在过渡过程完成之后移除
+ exitDone: '', // 离开过渡的完成状态
+}
+
+baseComponent({
+ properties: {
+ // 触发组件进入或离开过渡的状态
+ in: {
+ type: Boolean,
+ value: false,
+ observer(newVal) {
+ if (this.data.isMounting) {
+ this.updated(newVal)
+ }
+ },
+ },
+ // 过渡的类名
+ classNames: {
+ type: null,
+ value: defaultClassNames,
+ },
+ // 过渡持续时间
+ duration: {
+ type: null,
+ value: null,
+ },
+ // 过渡动效的类型
+ type: {
+ type: String,
+ value: TRANSITION,
+ },
+ // 首次挂载时是否触发进入过渡
+ appear: {
+ type: Boolean,
+ value: false,
+ },
+ // 是否启用进入过渡
+ enter: {
+ type: Boolean,
+ value: true,
+ },
+ // 是否启用离开过渡
+ exit: {
+ type: Boolean,
+ value: true,
+ },
+ // 首次进入过渡时是否懒挂载组件
+ mountOnEnter: {
+ type: Boolean,
+ value: true,
+ },
+ // 离开过渡完成时是否卸载组件
+ unmountOnExit: {
+ type: Boolean,
+ value: true,
+ },
+ // 自定义类名
+ wrapCls: {
+ type: String,
+ value: '',
+ },
+ // 自定义样式
+ wrapStyle: {
+ type: [String, Object],
+ value: '',
+ observer(newVal) {
+ this.setData({
+ extStyle: styleToCssString(newVal),
+ })
+ },
+ },
+ disableScroll: {
+ type: Boolean,
+ value: false,
+ },
+ },
+ data: {
+ animateCss: '', // 动画样式
+ animateStatus: EXITED, // 动画状态,可选值 entering、entered、exiting、exited
+ isMounting: false, // 是否首次挂载
+ extStyle: '', // 组件样式
+ },
+ methods: {
+ /**
+ * 监听过渡或动画的回调函数
+ */
+ addEventListener() {
+ const { animateStatus } = this.data
+ const { enter, exit } = this.getTimeouts()
+
+ if (animateStatus === ENTERING && !enter && this.data.enter) {
+ this.performEntered()
+ }
+
+ if (animateStatus === EXITING && !exit && this.data.exit) {
+ this.performExited()
+ }
+ },
+ /**
+ * 会在 WXSS transition 或 wx.createAnimation 动画结束后触发
+ */
+ onTransitionEnd() {
+ if (this.data.type === TRANSITION) {
+ this.addEventListener()
+ }
+ },
+ /**
+ * 会在一个 WXSS animation 动画完成时触发
+ */
+ onAnimationEnd() {
+ if (this.data.type === ANIMATION) {
+ this.addEventListener()
+ }
+ },
+ /**
+ * 更新组件状态
+ * @param {String} nextStatus 下一状态,ENTERING 或 EXITING
+ * @param {Boolean} mounting 是否首次挂载
+ */
+ updateStatus(nextStatus, mounting = false) {
+ if (nextStatus !== null) {
+ this.cancelNextCallback()
+ this.isAppearing = mounting
+
+ if (nextStatus === ENTERING) {
+ this.performEnter()
+ } else {
+ this.performExit()
+ }
+ }
+ },
+ /**
+ * 进入过渡
+ */
+ performEnter() {
+ const { className, activeClassName } = this.getClassNames(ENTER)
+ const { enter } = this.getTimeouts()
+ const enterParams = {
+ animateStatus: ENTER,
+ animateCss: className,
+ }
+ const enteringParams = {
+ animateStatus: ENTERING,
+ animateCss: `${className} ${activeClassName}`,
+ }
+
+ // 若已禁用进入过渡,则更新状态至 ENTERED
+ if (!this.isAppearing && !this.data.enter) {
+ return this.performEntered()
+ }
+
+ // 第一阶段:设置进入过渡的开始状态,并触发 ENTER 事件
+ // 第二阶段:延迟一帧后,设置进入过渡的结束状态,并触发 ENTERING 事件
+ // 第三阶段:若已设置过渡的持续时间,则延迟指定时间后触发进入过渡完成 performEntered,否则等待触发 onTransitionEnd 或 onAnimationEnd
+ this.safeSetData(enterParams, () => {
+ this.triggerEvent('change', { animateStatus: ENTER })
+ this.triggerEvent(ENTER, { isAppearing: this.isAppearing })
+
+ // 由于有些时候不能正确的触发动画完成的回调,具体原因未知
+ // 所以采用延迟一帧的方式来确保可以触发回调
+ this.delayHandler(TIMEOUT, () => {
+ this.safeSetData(enteringParams, () => {
+ this.triggerEvent('change', { animateStatus: ENTERING })
+ this.triggerEvent(ENTERING, { isAppearing: this.isAppearing })
+
+ if (enter) {
+ this.delayHandler(enter, this.performEntered)
+ }
+ })
+ })
+ })
+ },
+ /**
+ * 进入过渡完成
+ */
+ performEntered() {
+ const { doneClassName } = this.getClassNames(ENTER)
+ const enteredParams = {
+ animateStatus: ENTERED,
+ animateCss: doneClassName,
+ }
+
+ // 第三阶段:设置进入过渡的完成状态,并触发 ENTERED 事件
+ this.safeSetData(enteredParams, () => {
+ this.triggerEvent('change', { animateStatus: ENTERED })
+ this.triggerEvent(ENTERED, { isAppearing: this.isAppearing })
+ })
+ },
+ /**
+ * 离开过渡
+ */
+ performExit() {
+ const { className, activeClassName } = this.getClassNames(EXIT)
+ const { exit } = this.getTimeouts()
+ const exitParams = {
+ animateStatus: EXIT,
+ animateCss: className,
+ }
+ const exitingParams = {
+ animateStatus: EXITING,
+ animateCss: `${className} ${activeClassName}`,
+ }
+
+ // 若已禁用离开过渡,则更新状态至 EXITED
+ if (!this.data.exit) {
+ return this.performExited()
+ }
+
+ // 第一阶段:设置离开过渡的开始状态,并触发 EXIT 事件
+ // 第二阶段:延迟一帧后,设置离开过渡的结束状态,并触发 EXITING 事件
+ // 第三阶段:若已设置过渡的持续时间,则延迟指定时间后触发离开过渡完成 performExited,否则等待触发 onTransitionEnd 或 onAnimationEnd
+ this.safeSetData(exitParams, () => {
+ this.triggerEvent('change', { animateStatus: EXIT })
+ this.triggerEvent(EXIT)
+
+ this.delayHandler(TIMEOUT, () => {
+ this.safeSetData(exitingParams, () => {
+ this.triggerEvent('change', { animateStatus: EXITING })
+ this.triggerEvent(EXITING)
+
+ if (exit) {
+ this.delayHandler(exit, this.performExited)
+ }
+ })
+ })
+ })
+ },
+ /**
+ * 离开过渡完成
+ */
+ performExited() {
+ const { doneClassName } = this.getClassNames(EXIT)
+ const exitedParams = {
+ animateStatus: EXITED,
+ animateCss: doneClassName,
+ }
+
+ // 第三阶段:设置离开过渡的完成状态,并触发 EXITED 事件
+ this.safeSetData(exitedParams, () => {
+ this.triggerEvent('change', { animateStatus: EXITED })
+ this.triggerEvent(EXITED)
+
+ // 判断离开过渡完成时是否卸载组件
+ if (this.data.unmountOnExit) {
+ this.setData({ animateStatus: UNMOUNTED }, () => {
+ this.triggerEvent('change', { animateStatus: UNMOUNTED })
+ })
+ }
+ })
+ },
+ /**
+ * 获取指定状态下的类名
+ * @param {String} type 过渡类型,enter 或 exit
+ */
+ getClassNames(type) {
+ const { classNames } = this.data
+ const className = typeof classNames !== 'string' ? classNames[type] : `${classNames}-${type}`
+ const activeClassName = typeof classNames !== 'string' ? classNames[`${type}Active`] : `${classNames}-${type}-active`
+ const doneClassName = typeof classNames !== 'string' ? classNames[`${type}Done`] : `${classNames}-${type}-done`
+
+ return {
+ className,
+ activeClassName,
+ doneClassName,
+ }
+ },
+ /**
+ * 获取过渡持续时间
+ */
+ getTimeouts() {
+ const { duration } = this.data
+
+ if (duration !== null && typeof duration === 'object') {
+ return {
+ enter: duration.enter,
+ exit: duration.exit,
+ }
+ } else if (typeof duration === 'number') {
+ return {
+ enter: duration,
+ exit: duration,
+ }
+ }
+
+ return {}
+ },
+ /**
+ * 属性值 in 被更改时的响应函数
+ * @param {Boolean} newVal 触发组件进入或离开过渡的状态
+ */
+ updated(newVal) {
+ let { animateStatus } = this.pendingData || this.data
+ let nextStatus = null
+
+ if (newVal) {
+ if (animateStatus === UNMOUNTED) {
+ animateStatus = EXITED
+ this.setData({ animateStatus: EXITED }, () => {
+ this.triggerEvent('change', { animateStatus: EXITED })
+ })
+ }
+ if (animateStatus !== ENTER && animateStatus !== ENTERING && animateStatus !== ENTERED) {
+ nextStatus = ENTERING
+ }
+ } else {
+ if (animateStatus === ENTER || animateStatus === ENTERING || animateStatus === ENTERED) {
+ nextStatus = EXITING
+ }
+ }
+
+ this.updateStatus(nextStatus)
+ },
+ /**
+ * 延迟一段时间触发回调
+ * @param {Number} timeout 延迟时间
+ * @param {Function} handler 回调函数
+ */
+ delayHandler(timeout, handler) {
+ if (timeout) {
+ this.setNextCallback(handler)
+ setTimeout(this.nextCallback, timeout)
+ }
+ },
+ /**
+ * 点击事件
+ */
+ onTap() {
+ this.triggerEvent('click')
+ },
+ /**
+ * 阻止移动触摸
+ */
+ noop() {},
+ },
+ attached() {
+ let animateStatus = null
+ let appearStatus = null
+
+ if (this.data.in) {
+ if (this.data.appear) {
+ animateStatus = EXITED
+ appearStatus = ENTERING
+ } else {
+ animateStatus = ENTERED
+ }
+ } else {
+ if (this.data.unmountOnExit || this.data.mountOnEnter) {
+ animateStatus = UNMOUNTED
+ } else {
+ animateStatus = EXITED
+ }
+ }
+
+ // 由于小程序组件首次挂载时 observer 事件总是优先于 attached 事件
+ // 所以使用 isMounting 来强制优先触发 attached 事件
+ this.safeSetData({ animateStatus, isMounting: true }, () => {
+ this.triggerEvent('change', { animateStatus })
+ this.updateStatus(appearStatus, true)
+ })
+ },
+})
diff --git a/components/animation-group/index.json b/components/animation-group/index.json
new file mode 100644
index 0000000..fba482a
--- /dev/null
+++ b/components/animation-group/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
\ No newline at end of file
diff --git a/components/animation-group/index.wxml b/components/animation-group/index.wxml
new file mode 100644
index 0000000..707dce9
--- /dev/null
+++ b/components/animation-group/index.wxml
@@ -0,0 +1,3 @@
+
+
+
diff --git a/components/animation-group/index.wxss b/components/animation-group/index.wxss
new file mode 100644
index 0000000..ac89862
--- /dev/null
+++ b/components/animation-group/index.wxss
@@ -0,0 +1,206 @@
+.wux-animate--fadeIn-enter {
+ transition: opacity .3s;
+ opacity: 0
+}
+.wux-animate--fadeIn-enter-active,
+.wux-animate--fadeIn-enter-done {
+ opacity: 1
+}
+.wux-animate--fadeIn-exit {
+ transition: opacity .3s;
+ opacity: 1
+}
+.wux-animate--fadeIn-exit-active,
+.wux-animate--fadeIn-exit-done {
+ opacity: 0
+}
+.wux-animate--fadeInDown-enter {
+ transition: opacity .3s,transform .3s;
+ opacity: 0;
+ transform: translate3d(0,-100%,0)
+}
+.wux-animate--fadeInDown-enter-active,
+.wux-animate--fadeInDown-enter-done {
+ opacity: 1;
+ transform: none
+}
+.wux-animate--fadeInDown-exit {
+ transition: opacity .3s,transform .3s;
+ opacity: 1;
+ transform: none
+}
+.wux-animate--fadeInDown-exit-active,
+.wux-animate--fadeInDown-exit-done {
+ opacity: 0;
+ transform: translate3d(0,-100%,0)
+}
+.wux-animate--fadeInLeft-enter {
+ transition: opacity .3s,transform .3s;
+ opacity: 0;
+ transform: translate3d(-100%,0,0)
+}
+.wux-animate--fadeInLeft-enter-active,
+.wux-animate--fadeInLeft-enter-done {
+ opacity: 1;
+ transform: none
+}
+.wux-animate--fadeInLeft-exit {
+ transition: opacity .3s,transform .3s;
+ opacity: 1;
+ transform: none
+}
+.wux-animate--fadeInLeft-exit-active,
+.wux-animate--fadeInLeft-exit-done {
+ opacity: 0;
+ transform: translate3d(-100%,0,0)
+}
+.wux-animate--fadeInRight-enter {
+ transition: opacity .3s,transform .3s;
+ opacity: 0;
+ transform: translate3d(100%,0,0)
+}
+.wux-animate--fadeInRight-enter-active,
+.wux-animate--fadeInRight-enter-done {
+ opacity: 1;
+ transform: none
+}
+.wux-animate--fadeInRight-exit {
+ transition: opacity .3s,transform .3s;
+ opacity: 1;
+ transform: none
+}
+.wux-animate--fadeInRight-exit-active,
+.wux-animate--fadeInRight-exit-done {
+ opacity: 0;
+ transform: translate3d(100%,0,0)
+}
+.wux-animate--fadeInUp-enter {
+ transition: opacity .3s,transform .3s;
+ opacity: 0;
+ transform: translate3d(0,100%,0)
+}
+.wux-animate--fadeInUp-enter-active,
+.wux-animate--fadeInUp-enter-done {
+ opacity: 1;
+ transform: none
+}
+.wux-animate--fadeInUp-exit {
+ transition: opacity .3s,transform .3s;
+ opacity: 1;
+ transform: none
+}
+.wux-animate--fadeInUp-exit-active,
+.wux-animate--fadeInUp-exit-done {
+ opacity: 0;
+ transform: translate3d(0,100%,0)
+}
+.wux-animate--slideInUp-enter {
+ transition: transform .3s;
+ transform: translate3d(0,100%,0);
+ visibility: visible
+}
+.wux-animate--slideInUp-enter-active,
+.wux-animate--slideInUp-enter-done {
+ transform: translateZ(0)
+}
+.wux-animate--slideInUp-exit {
+ transition: transform .3s;
+ transform: translateZ(0)
+}
+.wux-animate--slideInUp-exit-active,
+.wux-animate--slideInUp-exit-done {
+ transform: translate3d(0,100%,0);
+ visibility: visible
+}
+.wux-animate--slideInDown-enter {
+ transition: transform .3s;
+ transform: translate3d(0,-100%,0);
+ visibility: visible
+}
+.wux-animate--slideInDown-enter-active,
+.wux-animate--slideInDown-enter-done {
+ transform: translateZ(0)
+}
+.wux-animate--slideInDown-exit {
+ transition: transform .3s;
+ transform: translateZ(0)
+}
+.wux-animate--slideInDown-exit-active,
+.wux-animate--slideInDown-exit-done {
+ transform: translate3d(0,-100%,0);
+ visibility: visible
+}
+.wux-animate--slideInLeft-enter {
+ transition: transform .3s;
+ transform: translate3d(-100%,0,0);
+ visibility: visible
+}
+.wux-animate--slideInLeft-enter-active,
+.wux-animate--slideInLeft-enter-done {
+ transform: translateZ(0)
+}
+.wux-animate--slideInLeft-exit {
+ transition: transform .3s;
+ transform: translateZ(0)
+}
+.wux-animate--slideInLeft-exit-active,
+.wux-animate--slideInLeft-exit-done {
+ transform: translate3d(-100%,0,0);
+ visibility: visible
+}
+.wux-animate--slideInRight-enter {
+ transition: transform .3s;
+ transform: translate3d(100%,0,0);
+ visibility: visible
+}
+.wux-animate--slideInRight-enter-active,
+.wux-animate--slideInRight-enter-done {
+ transform: none
+}
+.wux-animate--slideInRight-exit {
+ transition: transform .3s;
+ transform: none
+}
+.wux-animate--slideInRight-exit-active,
+.wux-animate--slideInRight-exit-done {
+ transform: translate3d(100%,0,0);
+ visibility: visible
+}
+.wux-animate--zoom-enter {
+ transition: all .3s cubic-bezier(.215,.61,.355,1);
+ opacity: .01;
+ transform: scale(.75)
+}
+.wux-animate--zoom-enter-active,
+.wux-animate--zoom-enter-done {
+ opacity: 1;
+ transform: none
+}
+.wux-animate--zoom-exit {
+ transition: all .25s linear;
+ transform: none
+}
+.wux-animate--zoom-exit-active,
+.wux-animate--zoom-exit-done {
+ opacity: .01;
+ transform: scale(.75)
+}
+.wux-animate--punch-enter {
+ transition: all .3s cubic-bezier(.215,.61,.355,1);
+ opacity: .01;
+ transform: scale(1.35)
+}
+.wux-animate--punch-enter-active,
+.wux-animate--punch-enter-done {
+ opacity: 1;
+ transform: none
+}
+.wux-animate--punch-exit {
+ transition: all .25s linear;
+ transform: none
+}
+.wux-animate--punch-exit-active,
+.wux-animate--punch-exit-done {
+ opacity: .01;
+ transform: scale(1.35)
+}
\ No newline at end of file
diff --git a/components/backdrop/index.js b/components/backdrop/index.js
new file mode 100644
index 0000000..cf43b99
--- /dev/null
+++ b/components/backdrop/index.js
@@ -0,0 +1,62 @@
+import baseComponent from '../helpers/baseComponent'
+
+baseComponent({
+ properties: {
+ prefixCls: {
+ type: String,
+ value: 'wux-backdrop',
+ },
+ transparent: {
+ type: Boolean,
+ value: false,
+ },
+ zIndex: {
+ type: Number,
+ value: 1000,
+ },
+ classNames: {
+ type: null,
+ value: 'wux-animate--fadeIn',
+ },
+ },
+ computed: {
+ classes: ['prefixCls, transparent', function(prefixCls, transparent) {
+ const wrap = transparent ? `${prefixCls}--transparent` : prefixCls
+
+ return {
+ wrap,
+ }
+ }],
+ },
+ methods: {
+ /**
+ * 保持锁定
+ */
+ retain() {
+ if (typeof this.backdropHolds !== 'number' || !this.backdropHolds) {
+ this.backdropHolds = 0
+ }
+
+ this.backdropHolds = this.backdropHolds + 1
+
+ if (this.backdropHolds === 1) {
+ this.setData({ in: true })
+ }
+ },
+ /**
+ * 释放锁定
+ */
+ release() {
+ if (this.backdropHolds === 1) {
+ this.setData({ in: false })
+ }
+ this.backdropHolds = Math.max(0, this.backdropHolds - 1)
+ },
+ /**
+ * 点击事件
+ */
+ onClick() {
+ this.triggerEvent('click')
+ },
+ },
+})
diff --git a/components/backdrop/index.json b/components/backdrop/index.json
new file mode 100644
index 0000000..9b9e7ab
--- /dev/null
+++ b/components/backdrop/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "wux-animation-group": "../animation-group/index"
+ }
+}
\ No newline at end of file
diff --git a/components/backdrop/index.wxml b/components/backdrop/index.wxml
new file mode 100644
index 0000000..2ee499a
--- /dev/null
+++ b/components/backdrop/index.wxml
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/components/backdrop/index.wxss b/components/backdrop/index.wxss
new file mode 100644
index 0000000..be44d1b
--- /dev/null
+++ b/components/backdrop/index.wxss
@@ -0,0 +1,15 @@
+.wux-backdrop {
+ background: rgba(0,0,0,.4)
+}
+.wux-backdrop,
+.wux-backdrop--transparent {
+ position: fixed;
+ z-index: 1000;
+ top: 0;
+ right: 0;
+ left: 0;
+ bottom: 0
+}
+.wux-backdrop--transparent {
+ background: 0 0
+}
\ No newline at end of file
diff --git a/components/button/index.js b/components/button/index.js
new file mode 100644
index 0000000..7eb2f7a
--- /dev/null
+++ b/components/button/index.js
@@ -0,0 +1,146 @@
+import baseComponent from '../helpers/baseComponent'
+import classNames from '../helpers/classNames'
+
+baseComponent({
+ properties: {
+ prefixCls: {
+ type: String,
+ value: 'wux-button',
+ },
+ type: {
+ type: String,
+ value: 'stable',
+ },
+ clear: {
+ type: Boolean,
+ value: false,
+ },
+ round: {
+ type: Boolean,
+ value: false,
+ },
+ block: {
+ type: Boolean,
+ value: false,
+ },
+ full: {
+ type: Boolean,
+ value: false,
+ },
+ outline: {
+ type: Boolean,
+ value: false,
+ },
+ bordered: {
+ type: Boolean,
+ value: true,
+ },
+ size: {
+ type: String,
+ value: 'default',
+ },
+ disabled: {
+ type: Boolean,
+ value: false,
+ },
+ loading: {
+ type: Boolean,
+ value: false,
+ },
+ formType: {
+ type: String,
+ value: '',
+ },
+ openType: {
+ type: String,
+ value: '',
+ },
+ hoverClass: {
+ type: String,
+ value: 'default',
+ },
+ hoverStopPropagation: {
+ type: Boolean,
+ value: false,
+ },
+ hoverStartTime: {
+ type: Number,
+ value: 20,
+ },
+ hoverStayTime: {
+ type: Number,
+ value: 70,
+ },
+ lang: {
+ type: String,
+ value: 'en',
+ },
+ sessionFrom: {
+ type: String,
+ value: '',
+ },
+ sendMessageTitle: {
+ type: String,
+ value: '',
+ },
+ sendMessagePath: {
+ type: String,
+ value: '',
+ },
+ sendMessageImg: {
+ type: String,
+ value: '',
+ },
+ showMessageCard: {
+ type: Boolean,
+ value: false,
+ },
+ appParameter: {
+ type: String,
+ value: '',
+ },
+ },
+ computed: {
+ classes: ['prefixCls, hoverClass, type, size, block, full, clear, outline, round, bordered, disabled', function (prefixCls, hoverClass, type, size, block, full, clear, outline, round, bordered, disabled) {
+ const wrap = classNames(prefixCls, {
+ [`${prefixCls}--${type}`]: type,
+ [`${prefixCls}--${size}`]: size,
+ [`${prefixCls}--block`]: block,
+ [`${prefixCls}--full`]: full,
+ [`${prefixCls}--clear`]: clear,
+ [`${prefixCls}--round`]: round,
+ [`${prefixCls}--outline`]: outline,
+ [`${prefixCls}--bordered`]: bordered,
+ [`${prefixCls}--disabled`]: disabled,
+ })
+ const hover = hoverClass && hoverClass !== 'default' ? hoverClass : `${prefixCls}--hover`
+
+ return {
+ wrap,
+ hover,
+ }
+ }],
+ },
+ methods: {
+ onTap() {
+ if (!this.data.disabled && !this.data.loading) {
+ this.triggerEvent('click')
+ }
+ },
+ bindgetuserinfo(e) {
+ this.triggerEvent('getuserinfo', e.detail)
+ },
+ bindcontact(e) {
+ this.triggerEvent('contact', e.detail)
+ },
+ bindgetphonenumber(e) {
+ this.triggerEvent('getphonenumber', e.detail)
+ },
+ bindopensetting(e) {
+ this.triggerEvent('opensetting', e.detail)
+ },
+ onError(e) {
+ this.triggerEvent('error', e.detail)
+ },
+ },
+})
diff --git a/components/button/index.json b/components/button/index.json
new file mode 100644
index 0000000..fba482a
--- /dev/null
+++ b/components/button/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
\ No newline at end of file
diff --git a/components/button/index.wxml b/components/button/index.wxml
new file mode 100644
index 0000000..84ff468
--- /dev/null
+++ b/components/button/index.wxml
@@ -0,0 +1,26 @@
+
diff --git a/components/button/index.wxss b/components/button/index.wxss
new file mode 100644
index 0000000..9378f28
--- /dev/null
+++ b/components/button/index.wxss
@@ -0,0 +1,356 @@
+.wux-button {
+ color: inherit!important;
+ background: 0 0!important;
+ font-weight: 400;
+ text-decoration: none;
+ overflow: visible;
+ width: auto!important;
+ -webkit-tap-highlight-color: transparent;
+ position: relative;
+ display: inline-block;
+ box-sizing: border-box;
+ margin: 0;
+ padding: 0 24rpx;
+ min-width: 104rpx;
+ min-height: 88rpx!important;
+ border: none;
+ border-radius: 8rpx;
+ vertical-align: middle;
+ text-align: center;
+ text-overflow: ellipsis;
+ font-size: 32rpx;
+ line-height: 84rpx;
+ cursor: pointer
+}
+.wux-button:after {
+ display: block;
+ position: static;
+ top: auto;
+ left: auto;
+ width: auto;
+ height: auto;
+ border: none;
+ border-radius: 0;
+ transform: none;
+ transform-origin: 0 0
+}
+.wux-button:after {
+ content: " ";
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ top: -12rpx;
+ right: -12rpx;
+ bottom: -12rpx;
+ left: -12rpx;
+ border: none;
+ transform: none;
+ transform-origin: 0 0;
+ box-sizing: border-box;
+ border-radius: 0
+}
+.wux-button--bordered {
+ border: 2rpx solid transparent
+}
+.wux-button--disabled {
+ opacity: .4!important
+}
+.wux-button--small {
+ padding: 4rpx 8rpx 2rpx;
+ min-width: 56rpx;
+ min-height: 60rpx!important;
+ font-size: 24rpx;
+ line-height: 52rpx
+}
+.wux-button--large {
+ padding: 0 32rpx;
+ min-width: 136rpx;
+ min-height: 118rpx!important;
+ font-size: 40rpx;
+ line-height: 106rpx
+}
+.wux-button--block,
+.wux-button--full {
+ width: 100%!important;
+ margin-top: 20rpx;
+ margin-bottom: 20rpx
+}
+.wux-button--block {
+ display: block;
+ clear: both
+}
+.wux-button--block:after {
+ clear: both
+}
+.wux-button--full {
+ display: block;
+ margin-right: 0!important;
+ margin-left: 0!important;
+ border-right-width: 0;
+ border-left-width: 0;
+ border-radius: 0
+}
+.wux-button--outline.wux-button--hover {
+ color: #fff!important
+}
+.wux-button--light,
+.wux-button--light--disabled {
+ border-color: transparent!important;
+ background-color: #fff!important;
+ color: #fff!important
+}
+.wux-button--light.wux-button--outline,
+.wux-button--light.wux-button--outline.wux-button--disabled {
+ border-color: #fff!important;
+ background-color: transparent!important;
+ color: #fff!important
+}
+.wux-button--light.wux-button--clear,
+.wux-button--light.wux-button--clear.wux-button--disabled {
+ background-color: transparent!important;
+ color: #e6e6e6!important
+}
+.wux-button--light.wux-button--clear.wux-button--hover {
+ background-color: rgba(0,0,0,0)!important;
+ color: #fff!important
+}
+.wux-button--light.wux-button--hover {
+ background-color: #e6e6e6!important;
+ color: #fff!important
+}
+.wux-button--stable,
+.wux-button--stable--disabled {
+ border-color: transparent!important;
+ background-color: #f8f8f8!important;
+ color: #fff!important
+}
+.wux-button--stable.wux-button--outline,
+.wux-button--stable.wux-button--outline.wux-button--disabled {
+ border-color: #f8f8f8!important;
+ background-color: transparent!important;
+ color: #f8f8f8!important
+}
+.wux-button--stable.wux-button--clear,
+.wux-button--stable.wux-button--clear.wux-button--disabled {
+ background-color: transparent!important;
+ color: #dfdfdf!important
+}
+.wux-button--stable.wux-button--clear.wux-button--hover {
+ background-color: rgba(0,0,0,0)!important;
+ color: #f8f8f8!important
+}
+.wux-button--stable.wux-button--hover {
+ background-color: #dfdfdf!important;
+ color: #fff!important
+}
+.wux-button--positive,
+.wux-button--positive--disabled {
+ border-color: transparent!important;
+ background-color: #008AFF!important;
+ color: #fff!important
+}
+.wux-button--positive.wux-button--outline,
+.wux-button--positive.wux-button--outline.wux-button--disabled {
+ border-color: #008AFF!important;
+ background-color: transparent!important;
+ color: #008AFF!important
+}
+.wux-button--positive.wux-button--clear,
+.wux-button--positive.wux-button--clear.wux-button--disabled {
+ background-color: transparent!important;
+ color: #0c60ee!important
+}
+.wux-button--positive.wux-button--clear.wux-button--hover {
+ background-color: rgba(0,0,0,0)!important;
+ color: #008AFF!important
+}
+.wux-button--positive.wux-button--hover {
+ background-color: #0c60ee!important;
+ color: #fff!important
+}
+.wux-button--calm,
+.wux-button--calm--disabled {
+ border-color: transparent!important;
+ background-color: #11c1f3!important;
+ color: #fff!important
+}
+.wux-button--calm.wux-button--outline,
+.wux-button--calm.wux-button--outline.wux-button--disabled {
+ border-color: #11c1f3!important;
+ background-color: transparent!important;
+ color: #11c1f3!important
+}
+.wux-button--calm.wux-button--clear,
+.wux-button--calm.wux-button--clear.wux-button--disabled {
+ background-color: transparent!important;
+ color: #0a9dc7!important
+}
+.wux-button--calm.wux-button--clear.wux-button--hover {
+ background-color: rgba(0,0,0,0)!important;
+ color: #11c1f3!important
+}
+.wux-button--calm.wux-button--hover {
+ background-color: #0a9dc7!important;
+ color: #fff!important
+}
+.wux-button--assertive,
+.wux-button--assertive--disabled {
+ border-color: transparent!important;
+ background-color: #ef473a!important;
+ color: #fff!important
+}
+.wux-button--assertive.wux-button--outline,
+.wux-button--assertive.wux-button--outline.wux-button--disabled {
+ border-color: #ef473a!important;
+ background-color: transparent!important;
+ color: #ef473a!important
+}
+.wux-button--assertive.wux-button--clear,
+.wux-button--assertive.wux-button--clear.wux-button--disabled {
+ background-color: transparent!important;
+ color: #e42112!important
+}
+.wux-button--assertive.wux-button--clear.wux-button--hover {
+ background-color: rgba(0,0,0,0)!important;
+ color: #ef473a!important
+}
+.wux-button--assertive.wux-button--hover {
+ background-color: #e42112!important;
+ color: #fff!important
+}
+.wux-button--balanced,
+.wux-button--balanced--disabled {
+ border-color: transparent!important;
+ background-color: #33cd5f!important;
+ color: #fff!important
+}
+.wux-button--balanced.wux-button--outline,
+.wux-button--balanced.wux-button--outline.wux-button--disabled {
+ border-color: #33cd5f!important;
+ background-color: transparent!important;
+ color: #33cd5f!important
+}
+.wux-button--balanced.wux-button--clear,
+.wux-button--balanced.wux-button--clear.wux-button--disabled {
+ background-color: transparent!important;
+ color: #28a54c!important
+}
+.wux-button--balanced.wux-button--clear.wux-button--hover {
+ background-color: rgba(0,0,0,0)!important;
+ color: #33cd5f!important
+}
+.wux-button--balanced.wux-button--hover {
+ background-color: #28a54c!important;
+ color: #fff!important
+}
+.wux-button--energized,
+.wux-button--energized--disabled {
+ border-color: transparent!important;
+ background-color: #ffc900!important;
+ color: #fff!important
+}
+.wux-button--energized.wux-button--outline,
+.wux-button--energized.wux-button--outline.wux-button--disabled {
+ border-color: #ffc900!important;
+ background-color: transparent!important;
+ color: #ffc900!important
+}
+.wux-button--energized.wux-button--clear,
+.wux-button--energized.wux-button--clear.wux-button--disabled {
+ background-color: transparent!important;
+ color: #cca100!important
+}
+.wux-button--energized.wux-button--clear.wux-button--hover {
+ background-color: rgba(0,0,0,0)!important;
+ color: #ffc900!important
+}
+.wux-button--energized.wux-button--hover {
+ background-color: #cca100!important;
+ color: #fff!important
+}
+.wux-button--royal,
+.wux-button--royal--disabled {
+ border-color: transparent!important;
+ background-color: #886aea!important;
+ color: #fff!important
+}
+.wux-button--royal.wux-button--outline,
+.wux-button--royal.wux-button--outline.wux-button--disabled {
+ border-color: #886aea!important;
+ background-color: transparent!important;
+ color: #886aea!important
+}
+.wux-button--royal.wux-button--clear,
+.wux-button--royal.wux-button--clear.wux-button--disabled {
+ background-color: transparent!important;
+ color: #643de4!important
+}
+.wux-button--royal.wux-button--clear.wux-button--hover {
+ background-color: rgba(0,0,0,0)!important;
+ color: #886aea!important
+}
+.wux-button--royal.wux-button--hover {
+ background-color: #643de4!important;
+ color: #fff!important
+}
+.wux-button--dark,
+.wux-button--dark--disabled {
+ border-color: transparent!important;
+ background-color: #444!important;
+ color: #fff!important
+}
+.wux-button--dark.wux-button--outline,
+.wux-button--dark.wux-button--outline.wux-button--disabled {
+ border-color: #444!important;
+ background-color: transparent!important;
+ color: #444!important
+}
+.wux-button--dark.wux-button--clear,
+.wux-button--dark.wux-button--clear.wux-button--disabled {
+ background-color: transparent!important;
+ color: #2b2b2b!important
+}
+.wux-button--dark.wux-button--clear.wux-button--hover {
+ background-color: rgba(0,0,0,0)!important;
+ color: #444!important
+}
+.wux-button--dark.wux-button--hover {
+ background-color: #2b2b2b!important;
+ color: #fff!important
+}
+.wux-button--light {
+ border-color: transparent!important;
+ background-color: #fff!important;
+ color: #444!important
+}
+.wux-button--light.wux-button--outline {
+ border-color: #ddd!important;
+ background-color: transparent!important;
+ color: #ddd!important
+}
+.wux-button--light.wux-button--clear.wux-button--hover {
+ background-color: rgba(0,0,0,0)!important;
+ color: #ddd!important
+}
+.wux-button--light.wux-button--hover {
+ background-color: #e6e6e6!important;
+ color: #fff!important
+}
+.wux-button--stable {
+ border-color: transparent!important;
+ background-color: #f8f8f8!important;
+ color: #444!important
+}
+.wux-button--stable.wux-button--outline {
+ border-color: #b2b2b2!important;
+ background-color: transparent!important;
+ color: #b2b2b2!important
+}
+.wux-button--stable.wux-button--clear.wux-button--hover {
+ background-color: rgba(0,0,0,0)!important;
+ color: #b2b2b2!important
+}
+.wux-button--stable.wux-button--hover {
+ background-color: #dfdfdf!important;
+ color: #fff!important
+}
\ No newline at end of file
diff --git a/components/cell-group/index.js b/components/cell-group/index.js
new file mode 100644
index 0000000..d38f06c
--- /dev/null
+++ b/components/cell-group/index.js
@@ -0,0 +1,68 @@
+import baseComponent from '../helpers/baseComponent'
+import classNames from '../helpers/classNames'
+
+baseComponent({
+ options: {
+ multipleSlots: false,
+ },
+ relations: {
+ '../cell/index': {
+ type: 'descendant',
+ observer() {
+ this.debounce(this.updateIsLastElement)
+ },
+ },
+ },
+ properties: {
+ prefixCls: {
+ type: String,
+ value: 'wux-cell-group',
+ },
+ title: {
+ type: String,
+ value: '',
+ },
+ label: {
+ type: String,
+ value: '',
+ },
+ },
+ computed: {
+ classes: ['prefixCls', function(prefixCls) {
+ const wrap = classNames(prefixCls)
+ const hd = `${prefixCls}__hd`
+ const bd = `${prefixCls}__bd`
+ const ft = `${prefixCls}__ft`
+
+ return {
+ wrap,
+ hd,
+ bd,
+ ft,
+ }
+ }],
+ },
+ methods: {
+ updateIsLastElement() {
+ const elements = this.getRelationNodes('../cell/index')
+ if (elements.length > 0) {
+ const lastIndex = elements.length - 1
+ elements.forEach((element, index) => {
+ element.updateIsLastElement(index === lastIndex)
+ })
+ }
+ },
+ getBoundingClientRect(callback) {
+ const className = `.${this.data.prefixCls}`
+ wx
+ .createSelectorQuery()
+ .in(this)
+ .select(className)
+ .boundingClientRect((rect) => {
+ if (!rect) return
+ callback.call(this, rect.height)
+ })
+ .exec()
+ },
+ },
+})
diff --git a/components/cell-group/index.json b/components/cell-group/index.json
new file mode 100644
index 0000000..fba482a
--- /dev/null
+++ b/components/cell-group/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
\ No newline at end of file
diff --git a/components/cell-group/index.wxml b/components/cell-group/index.wxml
new file mode 100644
index 0000000..1c465b0
--- /dev/null
+++ b/components/cell-group/index.wxml
@@ -0,0 +1,7 @@
+
+ {{ title }}
+
+
+
+ {{ label }}
+
diff --git a/components/cell-group/index.wxss b/components/cell-group/index.wxss
new file mode 100644
index 0000000..cd372a4
--- /dev/null
+++ b/components/cell-group/index.wxss
@@ -0,0 +1,31 @@
+.wux-cell-group__hd {
+ padding: 30rpx 30rpx 18rpx;
+ font-size: 28rpx;
+ color: #888;
+ width: 100%;
+ box-sizing: border-box
+}
+.wux-cell-group__bd {
+ position: relative;
+ background-color: #fff
+}
+.wux-cell-group__bd:after {
+ content: " ";
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 200%;
+ height: 200%;
+ transform: scale(.5);
+ transform-origin: 0 0;
+ pointer-events: none;
+ box-sizing: border-box;
+ /* border: 0 solid #d9d9d9;
+ border-top-width: 1rpx;
+ border-bottom-width: 1rpx */
+}
+.wux-cell-group__ft {
+ padding: 18rpx 30rpx 30rpx;
+ font-size: 28rpx;
+ color: #888
+}
\ No newline at end of file
diff --git a/components/cell/index.js b/components/cell/index.js
new file mode 100644
index 0000000..0283f93
--- /dev/null
+++ b/components/cell/index.js
@@ -0,0 +1,187 @@
+import baseComponent from '../helpers/baseComponent'
+import classNames from '../helpers/classNames'
+import eventsMixin from '../helpers/eventsMixin'
+
+const defaultEvents = {
+ onClick() {},
+ onError() {},
+}
+
+baseComponent({
+ behaviors: [eventsMixin({ defaultEvents })],
+ relations: {
+ '../cell-group/index': {
+ type: 'ancestor',
+ },
+ '../picker/index': {
+ type: 'parent',
+ },
+ '../date-picker/index': {
+ type: 'parent',
+ },
+ '../popup-select/index': {
+ type: 'parent',
+ },
+ },
+ properties: {
+ prefixCls: {
+ type: String,
+ value: 'wux-cell',
+ },
+ disabled: {
+ type: Boolean,
+ value: false,
+ },
+ hoverClass: {
+ type: String,
+ value: 'default',
+ },
+ hoverStopPropagation: {
+ type: Boolean,
+ value: false,
+ },
+ hoverStartTime: {
+ type: Number,
+ value: 20,
+ },
+ hoverStayTime: {
+ type: Number,
+ value: 70,
+ },
+ lang: {
+ type: String,
+ value: 'en',
+ },
+ sessionFrom: {
+ type: String,
+ value: '',
+ },
+ sendMessageTitle: {
+ type: String,
+ value: '',
+ },
+ sendMessagePath: {
+ type: String,
+ value: '',
+ },
+ sendMessageImg: {
+ type: String,
+ value: '',
+ },
+ showMessageCard: {
+ type: Boolean,
+ value: false,
+ },
+ appParameter: {
+ type: String,
+ value: '',
+ },
+ thumb: {
+ type: String,
+ value: '',
+ },
+ title: {
+ type: String,
+ value: '',
+ },
+ label: {
+ type: String,
+ value: '',
+ },
+ extra: {
+ type: String,
+ value: '',
+ },
+ isLink: {
+ type: Boolean,
+ value: false,
+ },
+ openType: {
+ type: String,
+ value: 'navigateTo',
+ },
+ url: {
+ type: String,
+ value: '',
+ },
+ delta: {
+ type: Number,
+ value: 1,
+ },
+ },
+ data: {
+ isLast: false,
+ },
+ computed: {
+ classes: ['prefixCls, hoverClass, isLast, isLink, disabled', function(prefixCls, hoverClass, isLast, isLink, disabled) {
+ const wrap = classNames(prefixCls, {
+ [`${prefixCls}--last`]: isLast,
+ [`${prefixCls}--access`]: isLink,
+ [`${prefixCls}--disabled`]: disabled,
+ })
+ const hd = `${prefixCls}__hd`
+ const thumb = `${prefixCls}__thumb`
+ const bd = `${prefixCls}__bd`
+ const text = `${prefixCls}__text`
+ const desc = `${prefixCls}__desc`
+ const ft = `${prefixCls}__ft`
+ const hover = hoverClass && hoverClass !== 'default' ? hoverClass : `${prefixCls}--hover`
+
+ return {
+ wrap,
+ hd,
+ thumb,
+ bd,
+ text,
+ desc,
+ ft,
+ hover,
+ }
+ }],
+ },
+ methods: {
+ onTap() {
+ if (!this.data.disabled) {
+ this.triggerEvent('click')
+ this.linkTo()
+ }
+ },
+ bindgetuserinfo(e) {
+ this.triggerEvent('getuserinfo', e.detail)
+ },
+ bindcontact(e) {
+ this.triggerEvent('contact', e.detail)
+ },
+ bindgetphonenumber(e) {
+ this.triggerEvent('getphonenumber', e.detail)
+ },
+ bindopensetting(e) {
+ this.triggerEvent('opensetting', e.detail)
+ },
+ onError(e) {
+ this.triggerEvent('error', e.detail)
+ },
+ linkTo() {
+ const { url, isLink, openType, delta } = this.data
+ const navigate = [
+ 'navigateTo',
+ 'redirectTo',
+ 'switchTab',
+ 'navigateBack',
+ 'reLaunch',
+ ]
+
+ // openType 属性可选值为 navigateTo、redirectTo、switchTab、navigateBack、reLaunch
+ if (!isLink || !url || !navigate.includes(openType)) {
+ return false
+ } else if (openType === 'navigateBack') {
+ return wx[openType].call(wx, { delta })
+ } else {
+ return wx[openType].call(wx, { url })
+ }
+ },
+ updateIsLastElement(isLast) {
+ this.setData({ isLast })
+ },
+ },
+})
diff --git a/components/cell/index.json b/components/cell/index.json
new file mode 100644
index 0000000..fba482a
--- /dev/null
+++ b/components/cell/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
\ No newline at end of file
diff --git a/components/cell/index.wxml b/components/cell/index.wxml
new file mode 100644
index 0000000..9043277
--- /dev/null
+++ b/components/cell/index.wxml
@@ -0,0 +1,42 @@
+
diff --git a/components/cell/index.wxss b/components/cell/index.wxss
new file mode 100644
index 0000000..fc30b7f
--- /dev/null
+++ b/components/cell/index.wxss
@@ -0,0 +1,98 @@
+.wux-cell {
+ margin: 0;
+ border-radius: 0;
+ color: inherit!important;
+ background: 0 0!important;
+ font-size: inherit;
+ font-weight: 400;
+ line-height: inherit;
+ text-align: inherit;
+ text-decoration: none;
+ overflow: visible;
+ min-height: 100rpx!important;
+ width: auto!important;
+ box-sizing: border-box;
+ -webkit-tap-highlight-color: transparent;
+ padding: 20rpx 30rpx;
+ position: relative;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-align: center;
+ align-items: center;
+ background: #fff
+}
+.wux-cell:after {
+ display: block;
+ position: static;
+ top: auto;
+ left: auto;
+ width: auto;
+ height: auto;
+ border: none;
+ border-radius: 0;
+ transform: none;
+ transform-origin: 0 0
+}
+.wux-cell:after {
+ content: " ";
+ position: absolute;
+ bottom: 0;
+ right: 0;
+ height: 1rpx;
+ border-bottom: 1rpx solid #d9d9d9;
+ color: #d9d9d9;
+ transform-origin: 0 100%;
+ transform: scaleY(.5);
+ left: 30rpx
+}
+.wux-cell--last:after {
+ display: none
+}
+.wux-cell--hover {
+ background-color: #ececec!important
+}
+.wux-cell--disabled {
+ opacity: .3
+}
+.wux-cell__thumb {
+ display: block;
+ width: 40rpx;
+ height: 40rpx;
+ margin-right: 10rpx
+}
+.wux-cell__bd {
+ -ms-flex: 1;
+ flex: 1
+}
+.wux-cell__text {
+ text-align: left
+}
+.wux-cell__desc {
+ text-align: left;
+ line-height: 1.2;
+ font-size: 24rpx;
+ color: grey
+}
+.wux-cell__ft {
+ text-align: right;
+ color: grey
+}
+.wux-cell--access .wux-cell__ft {
+ padding-right: 26rpx;
+ position: relative
+}
+.wux-cell--access .wux-cell__ft:after {
+ content: " ";
+ display: inline-block;
+ height: 16rpx;
+ width: 16rpx;
+ border-width: 2rpx 2rpx 0 0;
+ border-color: #999999;
+ border-style: solid;
+ transform: matrix(.71,.71,-.71,.71,0,0);
+ top: -4rpx;
+ position: absolute;
+ top: 50%;
+ margin-top: -8rpx;
+ right: 4rpx
+}
\ No newline at end of file
diff --git a/components/dialog/index.js b/components/dialog/index.js
new file mode 100644
index 0000000..0eeee51
--- /dev/null
+++ b/components/dialog/index.js
@@ -0,0 +1,264 @@
+import baseComponent from '../helpers/baseComponent'
+import classNames from '../helpers/classNames'
+
+const defaults = {
+ prefixCls: 'wux-dialog',
+ title: '',
+ content: '',
+ buttons: [],
+ verticalButtons: !1,
+ resetOnClose: false,
+ closable: false,
+ mask: true,
+ maskClosable: true,
+ zIndex: 1000,
+}
+
+const defaultOptions = {
+ onCancel() {},
+ cancelText: '取消',
+ cancelType: 'default',
+ onConfirm() {},
+ confirmText: '确定',
+ confirmType: 'primary',
+}
+
+baseComponent({
+ useFunc: true,
+ data: defaults,
+ computed: {
+ classes: ['prefixCls, buttons, verticalButtons', function(prefixCls, btns, verticalButtons) {
+ const prompt = `${prefixCls}__prompt`
+ const input = `${prefixCls}__input`
+ const buttons = classNames(`${prefixCls}__buttons`, {
+ [`${prefixCls}__buttons--${verticalButtons ? 'vertical' : 'horizontal'}`]: true,
+ })
+ const button = btns.map((button) => {
+ const wrap = classNames(`${prefixCls}__button`, {
+ [`${prefixCls}__button--${button.type || 'default'}`]: button.type || 'default',
+ [`${prefixCls}__button--bold`]: button.bold,
+ [`${prefixCls}__button--disabled`]: button.disabled,
+ [`${button.className}`]: button.className,
+ })
+ const hover = button.hoverClass && button.hoverClass !== 'default' ? button.hoverClass : `${prefixCls}__button--hover`
+
+ return {
+ wrap,
+ hover,
+ }
+ })
+
+ return {
+ prompt,
+ input,
+ buttons,
+ button,
+ }
+ }],
+ },
+ methods: {
+ /**
+ * 组件关闭时重置其内部数据
+ */
+ onClosed() {
+ if (this.data.resetOnClose) {
+ const params = {
+ ...this.$$mergeOptionsToData(defaults),
+ prompt: null,
+ }
+
+ this.$$setData(params)
+ }
+ },
+ /**
+ * 点击 x 或 mask 回调
+ */
+ onClose() {
+ this.hide()
+ },
+ /**
+ * 隐藏
+ */
+ hide(cb) {
+ this.$$setData({ in: false })
+ if (typeof cb === 'function') {
+ cb.call(this)
+ }
+ },
+ /**
+ * 显示
+ */
+ show(opts = {}) {
+ const options = this.$$mergeOptionsAndBindMethods(Object.assign({}, defaults, opts))
+ this.$$setData({ in: true, ...options })
+ this.originalButtons = options.buttons
+ return this.hide.bind(this)
+ },
+ /**
+ * 触发事件
+ */
+ runCallbacks(e, method) {
+ const { index } = e.currentTarget.dataset
+ const button = this.originalButtons[index]
+
+ if (!button.disabled) {
+ this.hide(() => typeof button[method] === 'function' && button[method](e))
+ }
+ },
+ /**
+ * 按钮点击事件
+ */
+ buttonTapped(e) {
+ this.runCallbacks(e, 'onTap')
+ },
+ /**
+ * 用户点击该按钮时,会返回获取到的用户信息,回调的detail数据与wx.getUserInfo返回的一致,open-type="getUserInfo"时有效
+ */
+ bindgetuserinfo(e) {
+ this.runCallbacks(e, 'onGetUserInfo')
+ },
+ /**
+ * 客服消息回调,open-type="contact"时有效
+ */
+ bindcontact(e) {
+ this.runCallbacks(e, 'onContact')
+ },
+ /**
+ * 获取用户手机号回调,open-type=getPhoneNumber时有效
+ */
+ bindgetphonenumber(e) {
+ this.runCallbacks(e, 'onGotPhoneNumber')
+ },
+ /**
+ * 在打开授权设置页后回调,open-type=openSetting时有效
+ */
+ bindopensetting(e) {
+ this.runCallbacks(e, 'onOpenSetting')
+ },
+ /**
+ * 当使用开放能力时,发生错误的回调,open-type=launchApp时有效
+ */
+ onError(e) {
+ this.runCallbacks(e, 'onError')
+ },
+ /**
+ * 当键盘输入时,触发 input 事件
+ */
+ bindinput(e) {
+ this.$$setData({
+ 'prompt.response': e.detail.value,
+ })
+ },
+ /**
+ * 显示dialog组件
+ * @param {Object} opts 配置项
+ * @param {String} opts.title 提示标题
+ * @param {String} opts.content 提示文本
+ * @param {Boolean} opts.verticalButtons 是否显示垂直按钮布局
+ * @param {Array} opts.buttons 按钮
+ * @param {String} opts.buttons.text 按钮的文字
+ * @param {String} opts.buttons.type 按钮的类型
+ * @param {Boolean} opts.buttons.bold 是否加粗按钮的文字
+ * @param {Function} opts.buttons.onTap 按钮的点击事件
+ */
+ open(opts = {}) {
+ return this.show(opts)
+ },
+ /**
+ * 显示dialog组件
+ * @param {Object} opts 配置项
+ * @param {String} opts.title 提示标题
+ * @param {String} opts.content 提示文本
+ * @param {String} opts.confirmText 确定按钮的文字,默认为"确定"
+ * @param {String} opts.confirmType 确定按钮的类型
+ * @param {Function} opts.onConfirm 确定按钮的点击事件
+ */
+ alert(opts = {}) {
+ return this.open(Object.assign({
+ buttons: [{
+ text: opts.confirmText || defaultOptions.confirmText,
+ type: opts.confirmType || defaultOptions.confirmType,
+ onTap: (e) => {
+ typeof opts.onConfirm === 'function' && opts.onConfirm(e)
+ },
+ }, ],
+ }, opts))
+ },
+ /**
+ * 显示dialog组件
+ * @param {Object} opts 配置项
+ * @param {String} opts.title 提示标题
+ * @param {String} opts.content 提示文本
+ * @param {String} opts.confirmText 确定按钮的文字,默认为"确定"
+ * @param {String} opts.confirmType 确定按钮的类型
+ * @param {Function} opts.onConfirm 确定按钮的点击事件
+ * @param {String} opts.cancelText 取消按钮的文字,默认为"取消"
+ * @param {String} opts.cancelType 取消按钮的类型
+ * @param {Function} opts.onCancel 取消按钮的点击事件
+ */
+ confirm(opts = {}) {
+ return this.open(Object.assign({
+ buttons: [{
+ text: opts.cancelText || defaultOptions.cancelText,
+ type: opts.cancelType || defaultOptions.cancelType,
+ onTap: (e) => {
+ typeof opts.onCancel === 'function' && opts.onCancel(e)
+ },
+ },
+ {
+ text: opts.confirmText || defaultOptions.confirmText,
+ type: opts.confirmType || defaultOptions.confirmType,
+ onTap: (e) => {
+ typeof opts.onConfirm === 'function' && opts.onConfirm(e)
+ },
+ },
+ ],
+ }, opts))
+ },
+ /**
+ * 显示dialog组件
+ * @param {Object} opts 配置项
+ * @param {String} opts.title 提示标题
+ * @param {String} opts.content 提示文本
+ * @param {String} opts.fieldtype input 的类型,有效值:text, number, idcard, digit
+ * @param {Boolean} opts.password 是否是密码类型
+ * @param {String} opts.defaultText 默认值
+ * @param {String} opts.placeholder 输入框为空时占位符
+ * @param {Number} opts.maxlength 最大输入长度,设置为 -1 的时候不限制最大长度
+ * @param {String} opts.confirmText 确定按钮的文字,默认为"确定"
+ * @param {String} opts.confirmType 确定按钮的类型
+ * @param {Function} opts.onConfirm 确定按钮的点击事件
+ * @param {String} opts.cancelText 取消按钮的文字,默认为"取消"
+ * @param {String} opts.cancelType 取消按钮的类型
+ * @param {Function} opts.onCancel 取消按钮的点击事件
+ */
+ prompt(opts = {}) {
+ const prompt = {
+ fieldtype: opts.fieldtype ? opts.fieldtype : 'text',
+ password: !!opts.password,
+ response: opts.defaultText ? opts.defaultText : '',
+ placeholder: opts.placeholder ? opts.placeholder : '',
+ maxlength: opts.maxlength ? parseInt(opts.maxlength) : '',
+ }
+
+ return this.open(Object.assign({
+ prompt: prompt,
+ buttons: [{
+ text: opts.cancelText || defaultOptions.cancelText,
+ type: opts.cancelType || defaultOptions.cancelType,
+ onTap: (e) => {
+ typeof opts.onCancel === 'function' && opts.onCancel(e)
+ },
+ },
+ {
+ text: opts.confirmText || defaultOptions.confirmText,
+ type: opts.confirmType || defaultOptions.confirmType,
+ onTap: (e) => {
+ typeof opts.onConfirm === 'function' && opts.onConfirm(e, this.data.prompt.response)
+ },
+ },
+ ],
+ }, opts))
+ },
+ },
+})
diff --git a/components/dialog/index.json b/components/dialog/index.json
new file mode 100644
index 0000000..8d120df
--- /dev/null
+++ b/components/dialog/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "wux-popup": "../popup/index"
+ }
+}
\ No newline at end of file
diff --git a/components/dialog/index.wxml b/components/dialog/index.wxml
new file mode 100644
index 0000000..928aed7
--- /dev/null
+++ b/components/dialog/index.wxml
@@ -0,0 +1,56 @@
+
+ {{ title }}
+
+ {{ content }}
+
+
+
+
+
+
+
+
+
+
diff --git a/components/dialog/index.wxss b/components/dialog/index.wxss
new file mode 100644
index 0000000..2b73358
--- /dev/null
+++ b/components/dialog/index.wxss
@@ -0,0 +1,115 @@
+.wux-dialog__button {
+ padding: 0;
+ margin: 0;
+ border-radius: 0;
+ background: 0 0!important;
+ font-size: inherit;
+ font-weight: 400;
+ line-height: inherit;
+ text-align: inherit;
+ text-decoration: none;
+ overflow: visible;
+ min-height: 0!important;
+ width: auto!important;
+ box-sizing: border-box;
+ -webkit-tap-highlight-color: transparent;
+ display: block;
+ -ms-flex: 1;
+ flex: 1;
+ color: #33cd5f!important;
+ position: relative
+}
+.wux-dialog__button:after {
+ display: block;
+ position: static;
+ top: auto;
+ left: auto;
+ width: auto;
+ height: auto;
+ border: none;
+ border-radius: 0;
+ transform: none;
+ transform-origin: 0 0
+}
+.wux-dialog__button--default {
+ color: #353535!important
+}
+.wux-dialog__button--primary {
+ color: #009ddf!important
+}
+.wux-dialog__button--bold {
+ font-weight: 500!important
+}
+.wux-dialog__button--hover {
+ background-color: #ececec!important
+}
+.wux-dialog__button--disabled {
+ opacity: .3
+}
+.wux-dialog__prompt {
+ position: relative;
+ margin-top: 20rpx
+}
+.wux-dialog__prompt:after {
+ content: " ";
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 200%;
+ height: 200%;
+ transform: scale(.5);
+ transform-origin: 0 0;
+ pointer-events: none;
+ box-sizing: border-box;
+ border: 0 solid #d5d5d6;
+ border-top-width: 2rpx;
+ border-right-width: 2rpx;
+ border-bottom-width: 2rpx;
+ border-left-width: 2rpx;
+ border-radius: 12rpx
+}
+.wux-dialog__input {
+ padding: 8rpx 12rpx;
+ height: 72rpx;
+ line-height: 1;
+ width: 100%;
+ text-align: left;
+ box-sizing: border-box
+}
+.wux-dialog__buttons {
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex: 1;
+ flex: 1
+}
+.wux-dialog__buttons--horizontal .wux-dialog__button:after {
+ content: " ";
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 2rpx;
+ bottom: 0;
+ border-left: 2rpx solid #d5d5d6;
+ color: #d5d5d6;
+ transform-origin: 0 0;
+ transform: scaleX(.5)
+}
+.wux-dialog__buttons--horizontal .wux-dialog__button:first-child:after {
+ display: none
+}
+.wux-dialog__buttons--vertical {
+ display: block;
+ height: auto
+}
+.wux-dialog__buttons--vertical .wux-dialog__button:after {
+ content: " ";
+ position: absolute;
+ left: 0;
+ top: 0;
+ right: 0;
+ height: 2rpx;
+ border-top: 2rpx solid #d5d5d6;
+ color: #d5d5d6;
+ transform-origin: 0 0;
+ transform: scaleY(.5)
+}
\ No newline at end of file
diff --git a/components/divider/index.js b/components/divider/index.js
new file mode 100644
index 0000000..c86b8ca
--- /dev/null
+++ b/components/divider/index.js
@@ -0,0 +1,42 @@
+import baseComponent from '../helpers/baseComponent'
+import classNames from '../helpers/classNames'
+
+baseComponent({
+ properties: {
+ prefixCls: {
+ type: String,
+ value: 'wux-divider',
+ },
+ position: {
+ type: String,
+ value: 'center',
+ },
+ dashed: {
+ type: Boolean,
+ value: false,
+ },
+ text: {
+ type: String,
+ value: '',
+ },
+ showText: {
+ type: Boolean,
+ value: true,
+ },
+ },
+ computed: {
+ classes: ['prefixCls, dashed, showText, position', function(prefixCls, dashed, showText, position) {
+ const wrap = classNames(prefixCls, {
+ [`${prefixCls}--dashed`]: dashed,
+ [`${prefixCls}--text`]: showText,
+ [`${prefixCls}--text-${position}`]: showText && position,
+ })
+ const text = `${prefixCls}__text`
+
+ return {
+ wrap,
+ text,
+ }
+ }],
+ },
+})
diff --git a/components/divider/index.json b/components/divider/index.json
new file mode 100644
index 0000000..fba482a
--- /dev/null
+++ b/components/divider/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
\ No newline at end of file
diff --git a/components/divider/index.wxml b/components/divider/index.wxml
new file mode 100644
index 0000000..ed49e3d
--- /dev/null
+++ b/components/divider/index.wxml
@@ -0,0 +1,6 @@
+
+
+ {{ text }}
+
+
+
\ No newline at end of file
diff --git a/components/divider/index.wxss b/components/divider/index.wxss
new file mode 100644
index 0000000..0f637b9
--- /dev/null
+++ b/components/divider/index.wxss
@@ -0,0 +1,53 @@
+.wux-divider {
+ display: block;
+ height: 2rpx;
+ width: 100%;
+ margin: 30rpx 0;
+ clear: both;
+ border-top: 2rpx solid #e8e8e8
+}
+.wux-divider--text {
+ display: table;
+ white-space: nowrap;
+ text-align: center;
+ background: 0 0;
+ font-weight: 500;
+ color: rgba(0,0,0,.85);
+ font-size: 32rpx;
+ border-top: none!important
+}
+.wux-divider--text:after,
+.wux-divider--text:before {
+ content: '';
+ display: table-cell;
+ position: relative;
+ top: 50%;
+ width: 50%;
+ border-top-width: 2rpx;
+ border-top-style: solid;
+ border-top-color: #e8e8e8;
+ transform: translateY(50%)
+}
+.wux-divider--dashed {
+ border-top: 2rpx dashed #e8e8e8
+}
+.wux-divider--dashed.wux-divider--text:after,
+.wux-divider--dashed.wux-divider--text:before {
+ border-top-style: dashed
+}
+.wux-divider--text-left:before {
+ width: 5%
+}
+.wux-divider--text-left:after {
+ width: 95%
+}
+.wux-divider--text-right:before {
+ width: 95%
+}
+.wux-divider--text-right:after {
+ width: 5%
+}
+.wux-divider__text {
+ display: inline-block;
+ padding: 0 30rpx
+}
\ No newline at end of file
diff --git a/components/helpers/arrayTreeFilter.js b/components/helpers/arrayTreeFilter.js
new file mode 100644
index 0000000..368a7c3
--- /dev/null
+++ b/components/helpers/arrayTreeFilter.js
@@ -0,0 +1 @@
+"use strict";function arrayTreeFilter(e,r,t){(t=t||{}).childrenKeyName=t.childrenKeyName||"children";var a=e||[],l=[],i=0;do{var d=a.filter(function(e){return r(e,i)})[0];if(!d)break;l.push(d),a=d[t.childrenKeyName]||[],i+=1}while(0=").concat(libVersion," 后重试。")});var baseComponent=function(e){var r=0
diff --git a/components/icon/index.wxss b/components/icon/index.wxss
new file mode 100644
index 0000000..8dced69
--- /dev/null
+++ b/components/icon/index.wxss
@@ -0,0 +1,2820 @@
+/*!
+ Ionicons, v4.3.0
+ Github: http://ionicons.com/
+ Convert to base64: https://transfonter.org/
+*/
+/*!
+ Ionicons, v4.3.0
+ Created by Ben Sperry for the Ionic Framework, http://ionicons.com/
+ https://twitter.com/benjsperry https://twitter.com/ionicframework
+ MIT License: https://github.com/driftyco/ionicons
+
+ Android-style icons originally built by Google’s
+ Material Design Icons: https://github.com/google/material-design-icons
+ used under CC BY http://creativecommons.org/licenses/by/4.0/
+ Modified icons to fit ionicon’s grid from original.
+*/
+@font-face {
+ font-family: Ionicons;
+ src: url(data:application/font-sfnt;charset=utf-8;base64,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AcAAAAEeAAABwP/+AYAAAAGgAAABoAAAASAAAAGAAAABwAAAAaAAAAGwAAABwAAAAYAAAAHA//sBIAAAAWAAAAGgAAABQAAAAYAAAAGAAAABwAAAAYAAAAGgAAAB2AAAAUAAAAGAAAABwAAAAaAAAAHAAAABoAAAAaAAAAGAAAABgAAAAaAAAAGgAAABgAAAAYAAAAGgAAABoAAAASoAAAGgAAAB4AAAAcAAAAHAAAAB4AAAAeAAAAHgAAAB4AAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAGAAAABgAAAAYAAAAHAAAAB4P/7AaAAAAHAAAABgAAAAaAAAAFQAAABgAAAAaAAAAHAAAABwAAAAcAAAAGgAAABQAAAAgAAAAFAAAABoAAAAWAAAAGAAAABgAAAAcAAAAHAAAABwAAAASAAAAGgAAABQAAAAYD/+wFAAAABQAAAAMAAAAGAAAABgAAAAcAAAAHAAAABoAAAAcAAAAFAAAABwAAAAcAAAAGAAAABgAAAAYAAAAHAAAABoAAAAYAAAAHA//4Bnv/+AaAAAAGAAAABoAAAAaAAAAGgAAABAAAAAaAAAAFAAAABgAAAAcD//wGgAAABoAAAADAAAAHAAAABoAAAAUAAAAIAAAABQAAAAYAAAAFgAAABwAAAAUAAAAGgAAABoAAAAWAAAAHAAAABwAAAAaAAAACoAAABgAAAAaAAAAGYAAABoAAAAcAAAAGAAAABmAAAAUAAAAEAAAABmgAAAcAAAAGAAAABwAAAAQAAAAGAAAABQAAAAWwAAAFgAAABYAAAAcAAAAGgAAABgAAAAcAAAAHAAAABoAAAAcAAAAHAAAABQAAAAaD/+QHAAAAB4AAAAYAAAAHAAAABIAAAAaAAAAHAAAABQAAAAYAAAAHAAAABQAAAAYAAAAIAAAABgAAAAcD/+gFAAAABwAAAAaAAAAGAAAABwAAAAaAAAAHAAAABoAAAAX8AAAGgAAABoAAAAaAAAAHAAAABpAAAAcAAAAFgAAABoAAAAUAAAAFAAAABgAAAAaAAAAGfAAABwAAAAcAAAAHAAAABwAAAAYAAAAGgAAABoAAAAcAAAAGAAAABoAAAAaD//QGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGcAAABoAAAAYAAAAGAAAABlAAAAZQAAAGUAAABYAAA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VlxWgleeWDhY/ll+WbRZ5FoIWkJarlsaW4xcDlxCXHhc4F1GXYpdrF4QXnRenl9yX6hf+GBEYJRgtGDIYP5hMmFQYZBh6mI6YnBimmLOYuRi+mMSYx5jNmNCY1pjZmN+Y4pjnmPGY+xkEmQ6ZE5kzGUCZTBlcmZGZn5m1mb+ZyRnRGeIaFxotGjaaTJpVGnwahhqLmpmarBq1mr6ayBrZGuOa7hsCmw0bIJssmzgbRhu2G8Eb0Zv1HAYcEJwhHC4cORxEnE6cWJxjnGqcbxx9nKGcqxyxnLwcxpzcnPWdAB0OnRkdIR01HUEdSx1WHVydhJ2OnZkdrJ27HcQd3x3qHf8eCB4PHiGeKJ4yHkgeXZ5oHnIeeZ6Bnoeelp6bnqgesZ7FntCe1R7gnvAfAB8/H0ofWZ9dn2cfeR+Dn4sfnx+ln72fx5/en/SgCqAjIC4gXKBwIIEglqCloK8gt6DMINgg4iDnIPSg/iEXoSghL6E0IT+hSaFnoXYhgCGLoZOhoqGxIcChz6Hloe4h96IDIhKiHqIqIjIiPyJNolQiZ6JyIoAihyKOorIiuyLBIswi0KLeIu6i+KMCow4jGSMuo0QjSyNjI3ujgCOhI7AjuqPBo8oj0qPho+uj9SP8pBMkGqQkJDAkRiRiJGWkayR0pH8kjSSWpKWktKS7JMKkzKTaJPQlAiUIpRKlGKUbpSOlKyUwpTwlQiVIJVilXSVsJYAljyWVpaClpKW+pcOl0aXZJeIl5yXsJgWmHSYmJi0mNyZEJkmmUKZdJm0mfqaFJpmmpaawJrqmySbTJtym56byJwEnCqcdpzCnRSdNJ1MnWSdup3+nhqeUJ5ynoKexJ70nwyfMJ9In5iftp/8oGignqDcoPqhGKE2oVShqKIco8ykSqSepOKlKKVspaCmJqZ4psqnGKdUp3qoUqiEqMqpKqlwqZap7KoQq7SsXqzurVCtlq3WrhCuXK6Crs6vXq+Sr8SwCLEasVSx5rIoslCygLLKsyKzOrOus/K0QrSOtO61KLVWtYi11rXutli2prbKt064FLhuuKC41rkMuSS5VLmaudq6Orp0uqC63Ltou4y74rwMvGi8zL1AvZS+AL44vpC/Kr9uv66/zsASwErAeMCqAAIAEQAAAJkBVQADAAcALrEBAC88sgcEAO0ysQYF3DyyAwIA7TIAsQMALzyyBQQA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cmdlIDIuMCA6IElvbmljb25zIDogMTQtNi0yMDE4AABJAG8AbgBpAGMAbwBuAHMAAElvbmljb25zAABWAGUAcgBzAGkAbwBuACAAMAAwADEALgAwADAAMAAgAABWZXJzaW9uIDAwMS4wMDAgAABJAG8AbgBpAGMAbwBuAHMAAElvbmljb25zAAACAAAAAAAA/8AAGQAAAAAAAAAAAAAAAAAAAAAAAAAAArsAAAABAAIBAgEDAQQBBQEGAQcBCAEJAQoBCwEMAQ0BDgEPARABEQESARMBFAEVARYBFwEYARkBGgEbARwBHQEeAR8BIAEhASIBIwEkASUBJgEnASgBKQEqASsBLAEtAS4BLwEwATEBMgEzATQBNQE2ATcBOAE5AToBOwE8AT0BPgE/AUABQQFCAUMBRAFFAUYBRwFIAUkBSgFLAUwBTQFOAU8BUAFRAVIBUwFUAVUBVgFXAVgBWQFaAVsBXAFdAV4BXwFgAWEBYgFjAWQBZQFmAWcBaAFpAWoBawFsAW0BbgFvAXABcQFyAXMBdAF1AXYBdwF4AXkBegF7AXwBfQF+AX8BgAGBAYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4BjwGQAZEBkgGTAZQBlQGWAZcBmAGZAZoBmwGcAZ0BngGfAaABoQGiAaMBpAGlAaYBpwGoAakBqgGrAawBrQGuAa8BsAGxAbIBswG0AbUBtgG3AbgBuQG6AbsBvAG9Ab4BvwHAAcEBwgHDAcQBxQHGAccByAHJAcoBywHMAc0BzgHPAdAB0QHSAdMB1AHVAdYB1wHYAdkB2gHbAdwB3QHeAd8B4AHhAeIB4wHkAeUB5gHnAegB6QHqAesB7AHtAe4B7wHwAfEB8gHzAfQB9QH2AfcB+AH5AfoB+wH8Af0B/gH/AgACAQICAgMCBAIFAgYCBwIIAgkCCgILAgwCDQIOAg8CEAIRAhICEwIUAhUCFgIXAhgCGQIaAhsCHAIdAh4CHwIgAiECIgIjAiQCJQImAicCKAIpAioCKwIsAi0CLgIvAjACMQIyAjMCNAI1AjYCNwI4AjkCOgI7AjwCPQI+Aj8CQAJBAkICQwJEAkUCRgJHAkgCSQJKAksCTAJNAk4CTwJQAlECUgJTAlQCVQJWAlcCWAJZAloCWwJcAl0CXgJfAmACYQJiAmMCZAJlAmYCZwJoAmkCagJrAmwCbQJuAm8CcAJxAnICcwJ0AnUCdgJ3AngCeQJ6AnsCfAJ9An4CfwKAAoECggKDAoQChQKGAocCiAKJAooCiwKMAo0CjgKPApACkQKSApMClAKVApYClwKYApkCmgKbApwCnQKeAp8CoAKhAqICowKkAqUCpgKnAqgCqQKqAqsCrAKtAq4CrwKwArECsgKzArQCtQK2ArcCuAK5AroCuwK8Ar0CvgK/AsACwQLCAsMCxALFAsYCxwLIAskCygLLAswCzQLOAs8C0ALRAtIC0wLUAtUC1gLXAtgC2QLaAtsC3ALdAt4C3wLgAuEC4gLjAuQC5QLmAucC6ALpAuoC6wLsAu0C7gLvAvAC8QLyAvMC9AL1AvYC9wL4AvkC+gL7AvwC/QL+Av8DAAMBAwIDAwMEAwUDBgMHAwgDCQMKAwsDDAMNAw4DDwMQAxEDEgMTAxQDFQMWAxcDGAMZAxoDGwMcAx0DHgMfAyADIQMiAyMDJAMlAyYDJwMoAykDKgMrAywDLQMuAy8DMAMxAzIDMwM0AzUDNgM3AzgDOQM6AzsDPAM9Az4DPwNAA0EDQgNDA0QDRQNGA0cDSANJA0oDSwNMA00DTgNPA1ADUQNSA1MDVANVA1YDVwNYA1kDWgNbA1wDXQNeA18DYANhA2IDYwNkA2UDZgNnA2gDaQNqA2sDbANtA24DbwNwA3EDcgNzA3QDdQN2A3cDeAN5A3oDewN8A30DfgN/A4ADgQOCA4MDhAOFA4YDhwOIA4kDigOLA4wDjQOOA48DkAORA5IDkwOUA5UDlgOXA5gDmQOaA5sDnAOdA54DnwOgA6EDogOjA6QDpQOmA6cDqAOpA6oDqwOsA60DrgOvA7ADsQOyA7MDtAO1A7YDtwO4A7kHdW5pRjEwMAd1bmlGMTAxB3VuaUYxMDIHdW5pRjEwMwd1bmlGMTA0B3VuaUYxMDUHdW5pRjEwNgd1bmlGMTA3B3VuaUYxMDgHdW5pRjEwOQd1bmlGMTBBB3VuaUYxMEIHdW5pRjEwQwd1bmlGMTBEB3VuaUYxMEUHdW5pRjEwRgd1bmlGMTEwB3VuaUYxMTEHdW5pRjExMgd1bmlGMTEzB3VuaUYxMTQHdW5pRjExNQd1bmlGMTE2B3VuaUYxMTcHdW5pRjExOAd1bmlGMTE5B3VuaUYxMUEHdW5pRjExQgd1bmlGMTFDB3VuaUYxMUQHdW5pRjExRQd1bmlGMTFGB3VuaUYxMjAHdW5pRjEyMQd1bmlGMTIyB3VuaUYxMjMHdW5pRjEyNAd1bmlGMTI1B3VuaUYxMjYHdW5pRjEyNwd1bmlGMTI4B3VuaUYxMjkHdW5pRjEyQQd1bmlGMTJCB3VuaUYxMkMHdW5pRjEyRAd1bmlGMTJFB3VuaUYxMkYHdW5pRjEzMAd1bmlGMTMxB3VuaUYxMzIHdW5pRjEzMwd1bmlGMTM0B3VuaUYxMzUHdW5pRjEzNgd1bmlGMTM3B3VuaUYxMzgHdW5pRjEzOQd1bmlGMTNBB3VuaUYxM0IHdW5pRjEzQwd1bmlGMTNEB3VuaUYxM0UHdW5pRjEzRgd1bmlGMTQwB3VuaUYxNDEHdW5pRjE0Mgd1bmlGMTQzB3VuaUYxNDQHdW5pRjE0NQd1bmlGMTQ2B3VuaUYxNDcHdW5pRjE0OAd1bmlGMTQ5B3VuaUYxNEEHdW5pRjE0Qgd1bmlGMTRDB3VuaUYxNEQHdW5pRjE0RQd1bmlGMTRGB3VuaUYxNTAHdW5pRjE1MQd1bmlGMTUyB3VuaUYxNTMHdW5pRjE1NAd1bmlGMTU1B3VuaUYxNTYHdW5pRjE1Nwd1bmlGMTU4B3VuaUYxNTkHdW5pRjE1QQd1bmlGMTVCB3VuaUYxNUMHdW5pRjE1RAd1bmlGMTVFB3VuaUYxNUYHdW5pRjE2MAd1bmlGMTYxB3VuaUYxNjIHdW5pRjE2Mwd1bmlGMTY0B3VuaUYxNjUHdW5pRjE2Ngd1bmlGMTY3B3VuaUYxNjgHdW5pRjE2OQd1bmlGMTZBB3VuaUYxNkIHdW5pRjE2Qwd1bmlGMTZEB3VuaUYxNkUHdW5pRjE2Rgd1bmlGMTcwB3VuaUYxNzEHdW5pRjE3Mgd1bmlGMTczB3VuaUYxNzQHdW5pRjE3NQd1bmlGMTc2B3VuaUYxNzcHdW5pRjE3OAd1bmlGMTc5B3VuaUYxN0EHdW5pRjE3Qgd1bmlGMTdDB3VuaUYxN0QHdW5pRjE3RQd1bmlGMTdGB3VuaUYxODAHdW5pRjE4MQd1bmlGMTgyB3VuaUYxODMHdW5pRjE4NAd1bmlGMTg1B3VuaUYxODYHdW5pRjE4Nwd1bmlGMTg4B3VuaUYxODkHdW5pRjE4QQd1bmlGMThCB3VuaUYxOEMHdW5pRjE4RAd1bmlGMThFB3VuaUYxOEYHdW5pRjE5MAd1bmlGMTkxB3VuaUYxOTIHdW5pRjE5Mwd1bmlGMTk0B3VuaUYxOTUHdW5pRjE5Ngd1bmlGMTk3B3VuaUYxOTgHdW5pRjE5OQd1bmlGMTlBB3VuaUYxOUIHdW5pRjE5Qwd1bmlGMTlEB3VuaUYxOUUHdW5pRjE5Rgd1bmlGMUEwB3VuaUYxQTEHdW5pRjFBMgd1bmlGMUEzB3VuaUYxQTQHdW5pRjFBNQd1bmlGMUE2B3VuaUYxQTcHdW5pRjFBOAd1bmlGMUE5B3VuaUYxQUEHdW5pRjFBQgd1bmlGMUFDB3VuaUYxQUUHdW5pRjFCMAd1bmlGMUIxB3VuaUYxQjIHdW5pRjFCNAd1bmlGMUI2B3VuaUYxQjgHdW5pRjFCOQd1bmlGMUJCB3VuaUYxQkQHdW5pRjFCRgd1bmlGMUMxB3VuaUYxQzMHdW5pRjFDNgd1bmlGMUM4B3VuaUYxQzkHdW5pRjFDQgd1bmlGMUQxB3VuaUYxRDMHdW5pRjFENQd1bmlGMUQ3B3VuaUYxRDkHdW5pRjFEQgd1bmlGMUREB3VuaUYxREYHdW5pRjFFMQd1bmlGMUUyB3VuaUYxRTMHdW5pRjFFNQd1bmlGMUU3B3VuaUYxRUIHdW5pRjFFRAd1bmlGMUVGB3VuaUYxRjEHdW5pRjFGMwd1bmlGMUY1B3VuaUYxRjYHdW5pRjFGNwd1bmlGMUY5B3VuaUYxRkEHdW5pRjFGQgd1bmlGMUZDB3VuaUYxRkQHdW5pRjFGRQd1bmlGMUZGB3VuaUYyMDEHdW5pRjIwMgd1bmlGMjAzB3VuaUYyMDUHdW5pRjIwNwd1bmlGMjA5B3VuaUYyMEMHdW5pRjIwRgd1bmlGMjExB3VuaUYyMTMHdW5pRjIxNQd1bmlGMjE3B3VuaUYyMTgHdW5pRjIxQQd1bmlGMjFDB3VuaUYyMUUHdW5pRjIxRgd1bmlGMjIxB3VuaUYyMjIHdW5pRjIyMwd1bmlGMjI1B3VuaUYyMjcHdW5pRjIyOAd1bmlGMjI5B3VuaUYyMkEHdW5pRjIyQgd1bmlGMjJEB3VuaUYyMkUHdW5pRjIyRgd1bmlGMjMwB3VuaUYyMzEHdW5pRjIzMgd1bmlGMjMzB3VuaUYyMzQHdW5pRjIzNQd1bmlGMjM2B3VuaUYyMzcHdW5pRjIzOAd1bmlGMjM5B3VuaUYyM0EHdW5pRjIzQgd1bmlGMjNDB3VuaUYyM0QHdW5pRjIzRQd1bmlGMjNGB3VuaUYyNDAHdW5pRjI0MQd1bmlGMjQyB3VuaUYyNDMHdW5pRjI0NAd1bmlGMjQ1B3VuaUYyNDYHdW5pRjI0Nwd1bmlGMjQ4B3VuaUYyNDkHdW5pRjI0QQd1bmlGMjRCB3VuaUYyNEMHdW5pRjI0RAd1bmlGMjRFB3VuaUYyNTAHdW5pRjI1Mgd1bmlGMjU0B3VuaUYyNTYHdW5pRjI1OAd1bmlGMjU5B3VuaUYyNUEHdW5pRjI1Qgd1bmlGMjVEB3VuaUYyNUYHdW5pRjI2MQd1bmlGMjYzB3VuaUYyNjQHdW5pRjI2Ngd1bmlGMjY4B3VuaUYyNjkHdW5pRjI2Qgd1bmlGMjZEB3VuaUYyNkYHdW5pRjI3MQd1bmlGMjcyB3VuaUYyNzMHdW5pRjI3NAd1bmlGMjc1B3VuaUYyNzYHdW5pRjI3Nwd1bmlGMjc4B3VuaUYyNzkHdW5pRjI3QQd1bmlGMjdCB3VuaUYyN0MHdW5pRjI3RAd1bmlGMjdFB3VuaUYyN0YHdW5pRjI4MAd1bmlGMjgxB3VuaUYyODIHdW5pRjI4Mwd1bmlGMjg0B3VuaUYyODUHdW5pRjI4Ngd1bmlGMjg3B3VuaUYyODgHdW5pRjI4OQd1bmlGMjhBB3VuaUYyOEIHdW5pRjI4Qwd1bmlGMjhEB3VuaUYyOEUHdW5pRjI4Rgd1bmlGMjkwB3VuaUYyOTEHdW5pRjI5Mgd1bmlGMjkzB3VuaUYyOTQHdW5pRjI5NQd1bmlGMjk2B3VuaUYyOTcHdW5pRjI5OAd1bmlGMjk5B3VuaUYyOUEHdW5pRjI5Qgd1bmlGMjlDB3VuaUYyOUQHdW5pRjI5RQd1bmlGMjlGB3VuaUYyQTAHdW5pRjJBMQd1bmlGMkEyB3VuaUYyQTMHdW5pRjJBNAd1bmlGMkE1B3VuaUYyQTYHdW5pRjJBNwd1bmlGMkE4B3VuaUYyQTkHdW5pRjJBQQd1bmlGMkFCB3VuaUYyQUMHdW5pRjJBRAd1bmlGMkFFB3VuaUYyQUYHdW5pRjJCMAd1bmlGMkIxB3VuaUYyQjIHdW5pRjJCMwd1bmlGMkI0B3VuaUYyQjUHdW5pRjJCNgd1bmlGMkI3B3VuaUYyQjgHdW5pRjJCOQd1bmlGMkJBB3VuaUYyQkIHdW5pRjJCQwd1bmlGMkJEB3VuaUYyQkUHdW5pRjJCRgd1bmlGMkMwB3VuaUYyQzIHdW5pRjJDMwd1bmlGMkM0B3VuaUYyQzUHdW5pRjJDNgd1bmlGMkM3B3VuaUYyQzgHdW5pRjJDOQd1bmlGMkNBB3VuaUYyQ0IHdW5pRjJDQwd1bmlGMkNEB3VuaUYyQ0UHdW5pRjJDRgd1bmlGMkQwB3VuaUYyRDEHdW5pRjJEMgd1bmlGMkQzB3VuaUYyRDQHdW5pRjJENQd1bmlGMkQ2B3VuaUYyRDcHdW5pRjJEOAd1bmlGMkQ5B3VuaUYyREEHdW5pRjJEQgd1bmlGMkRDB3VuaUYyREQHdW5pRjJERQd1bmlGMkRGB3VuaUYyRTAHdW5pRjJFMQd1bmlGMkUyB3VuaUYyRTMHdW5pRjJFNAd1bmlGMkU1B3VuaUYyRTYHdW5pRjJFNwd1bmlGMkU4B3VuaUYyRTkHdW5pRjJFQQd1bmlGMkVCB3VuaUYyRUMHdW5pRjJFRAd1bmlGMkVFB3VuaUYyRUYHdW5pRjJGMAd1bmlGMkYxB3VuaUYyRjIHdW5pRjJGMwd1bmlGMkY0B3VuaUYyRjUHdW5pRjJGNgd1bmlGMkY3B3VuaUYyRkEHdW5pRjJGQgd1bmlGMkZDB3VuaUYyRkQHdW5pRjJGRQd1bmlGMkZGB3VuaUYzMDAHdW5pRjMwMQd1bmlGMzAyB3VuaUYzMDMHdW5pRjMwNAd1bmlGMzA1B3VuaUYzMDYHdW5pRjMwOAd1bmlGMzA5B3VuaUYzMEEHdW5pRjMwQgd1bmlGMzBDB3VuaUYzMEQHdW5pRjMwRQd1bmlGMzBGB3VuaUYzMTAHdW5pRjMxMQd1bmlGMzEyB3VuaUYzMTUHdW5pRjMxNgd1bmlGMzE3B3VuaUYzMTgHdW5pRjMxOQd1bmlGMzFBB3VuaUYzMUIHdW5pRjMxQwd1bmlGMzFEB3VuaUYzMUUHdW5pRjMxRgd1bmlGMzIwB3VuaUYzMjEHdW5pRjMyMgd1bmlGMzIzB3VuaUYzMjQHdW5pRjMyNQd1bmlGMzI2B3VuaUYzMjcHdW5pRjMyOAd1bmlGMzI5B3VuaUYzMkEHdW5pRjMyQgd1bmlGMzJDB3VuaUYzMkQHdW5pRjMyRQd1bmlGMzJGB3VuaUYzMzAHdW5pRjMzMQd1bmlGMzMyB3VuaUYzMzMHdW5pRjMzNAd1bmlGMzM2B3VuaUYzMzcHdW5pRjMzOAd1bmlGMzM5B3VuaUYzM0EHdW5pRjMzQgd1bmlGMzNDB3VuaUYzM0QHdW5pRjMzRQd1bmlGMzNGB3VuaUYzNDAHdW5pRjM0MQd1bmlGMzQyB3VuaUYzNDMHdW5pRjM0NAd1bmlGMzQ1B3VuaUYzNDYHdW5pRjM0Nwd1bmlGMzQ4B3VuaUYzNDkHdW5pRjM0QQd1bmlGMzRCB3VuaUYzNEMHdW5pRjM0RAd1bmlGMzRFB3VuaUYzNEYHdW5pRjM1NAd1bmlGMzU2B3VuaUYzNTcHdW5pRjM1OAd1bmlGMzU5B3VuaUYzNUEHdW5pRjM1Qgd1bmlGMzVDB3VuaUYzNUQHdW5pRjM1RQd1bmlGMzVGB3VuaUYzNjAHdW5pRjM2MQd1bmlGMzYyB3VuaUYzNjMHdW5pRjM2NAd1bmlGMzY1B3VuaUYzNjYHdW5pRjM2Nwd1bmlGMzY4B3VuaUYzNjkHdW5pRjM2QQd1bmlGMzZCB3VuaUYzNkMHdW5pRjM2RAd1bmlGMzZFB3VuaUYzNkYHdW5pRjM3MAd1bmlGMzcxB3VuaUYzNzIHdW5pRjM3Mwd1bmlGMzc0B3VuaUYzNzUHdW5pRjM3Ngd1bmlGMzc3B3VuaUYzNzgHdW5pRjM3OQd1bmlGMzdBB3VuaUYzN0IHdW5pRjM3Qwd1bmlGMzdEB3VuaUYzN0UHdW5pRjM3Rgd1bmlGMzgwB3VuaUYzODEHdW5pRjM4Mgd1bmlGMzgzB3VuaUYzODQHdW5pRjM4NQd1bmlGMzg2B3VuaUYzODcHdW5pRjM4OAd1bmlGMzg5B3VuaUYzOEEHdW5pRjM4Qgd1bmlGMzhDB3VuaUYzOEQHdW5pRjM4RQd1bmlGMzhGB3VuaUYzOTAHdW5pRjM5MQd1bmlGMzkyB3VuaUYzOTMHdW5pRjM5NAd1bmlGMzk1B3VuaUYzOTYHdW5pRjM5Nwd1bmlGMzk4B3VuaUYzOTkHdW5pRjM5QQd1bmlGMzlCB3VuaUYzOUMHdW5pRjM5RAd1bmlGMzlFB3VuaUYzOUYHdW5pRjNBMQd1bmlGM0EyB3VuaUYzQTQHdW5pRjNBNQd1bmlGM0E2B3VuaUYzQTcHdW5pRjNBOAd1bmlGM0E5B3VuaUYzQUEHdW5pRjNDOAd1bmlGM0NBB3VuaUYzQ0UHdW5pRjNDRgd1bmlGM0QwB3VuaUYzRDEHdW5pRjNEOAd1bmlGM0RBB3VuaUYzREMHdW5pRjNERQd1bmlGM0UwB3VuaUYzRTQHdW5pRjNFOAd1bmlGM0VBB3VuaUYzRUUHdW5pRjNGMAd1bmlGM0YyB3VuaUYzRjQHdW5pRjNGNgd1bmlGM0Y4B3VuaUYzRkEHdW5pRjNGRgd1bmlGNDAzB3VuaUY0MDYHdW5pRjQwOAd1bmlGNDA5B3VuaUY0MEIHdW5pRjQwQwd1bmlGNDBFB3VuaUY0MTAHdW5pRjQxMgd1bmlGNDE0B3VuaUY0MTYHdW5pRjQxQQd1bmlGNDFDB3VuaUY0MUUHdW5pRjQyMAd1bmlGNDI1B3VuaUY0MjcHdW5pRjQyOQd1bmlGNDJCB3VuaUY0MkQHdW5pRjQyRgd1bmlGNDMxB3VuaUY0MzMHdW5pRjQzNQd1bmlGNDM3B3VuaUY0M0YHdW5pRjQ0Mwd1bmlGNDQ2B3VuaUY0NDgHdW5pRjQ0QQd1bmlGNDREB3VuaUY0NTAHdW5pRjQ1NAd1bmlGNDVDB3VuaUY0NUUHdW5pRjQ1Rgd1bmlGNDYxB3VuaUY0NjgHdW5pRjQ2Qgd1bmlGNDZDB3VuaUY0NkUHdW5pRjQ3MAd1bmlGNDcyB3VuaUY0NzgHdW5pRjQ3QQd1bmlGNDdDB3VuaUY0N0UHdW5pRjQ4Mgd1bmlGNDg0B3VuaUY0ODYHdW5pRjQ4OAd1bmlGNDhEB3VuaUY0OEYHdW5pRjQ5Mwd1bmlGNDk1B3VuaUY0OTcHdW5pRjQ5OQd1bmlGNDlDB3VuaUY0OUYHdW5pRjRBMQd1bmlGNEEzB3VuaUY0QTUHdW5pRjRBNwd1bmlGNEE5B3VuaUY0QjAHdW5pRjRCMQd1bmlGNEIyB3VuaUY0QjMHdW5pRjRCNQd1bmlGNEI3B3VuaUY0QkIHdW5pRjRCRAd1bmlGNEJGB3VuaUY0QzEHdW5pRjRDNQd1bmlGNEM3B3VuaUY0Q0QAAAAB//8AAgAAAAEAAAAA0ywqSAAAAADXSCMpAAAAANdIIyo=) format("truetype");
+ font-weight: 400;
+ font-style: normal
+}
+.ion,
+.ion-ios-add-circle-outline:before,
+.ion-ios-add-circle:before,
+.ion-ios-add:before,
+.ion-ios-airplane:before,
+.ion-ios-alarm:before,
+.ion-ios-albums:before,
+.ion-ios-alert:before,
+.ion-ios-american-football:before,
+.ion-ios-analytics:before,
+.ion-ios-aperture:before,
+.ion-ios-apps:before,
+.ion-ios-appstore:before,
+.ion-ios-archive:before,
+.ion-ios-arrow-back:before,
+.ion-ios-arrow-down:before,
+.ion-ios-arrow-dropdown-circle:before,
+.ion-ios-arrow-dropdown:before,
+.ion-ios-arrow-dropleft-circle:before,
+.ion-ios-arrow-dropleft:before,
+.ion-ios-arrow-dropright-circle:before,
+.ion-ios-arrow-dropright:before,
+.ion-ios-arrow-dropup-circle:before,
+.ion-ios-arrow-dropup:before,
+.ion-ios-arrow-forward:before,
+.ion-ios-arrow-round-back:before,
+.ion-ios-arrow-round-down:before,
+.ion-ios-arrow-round-forward:before,
+.ion-ios-arrow-round-up:before,
+.ion-ios-arrow-up:before,
+.ion-ios-at:before,
+.ion-ios-attach:before,
+.ion-ios-backspace:before,
+.ion-ios-barcode:before,
+.ion-ios-baseball:before,
+.ion-ios-basket:before,
+.ion-ios-basketball:before,
+.ion-ios-battery-charging:before,
+.ion-ios-battery-dead:before,
+.ion-ios-battery-full:before,
+.ion-ios-beaker:before,
+.ion-ios-bed:before,
+.ion-ios-beer:before,
+.ion-ios-bicycle:before,
+.ion-ios-bluetooth:before,
+.ion-ios-boat:before,
+.ion-ios-body:before,
+.ion-ios-bonfire:before,
+.ion-ios-book:before,
+.ion-ios-bookmark:before,
+.ion-ios-bookmarks:before,
+.ion-ios-bowtie:before,
+.ion-ios-briefcase:before,
+.ion-ios-browsers:before,
+.ion-ios-brush:before,
+.ion-ios-bug:before,
+.ion-ios-build:before,
+.ion-ios-bulb:before,
+.ion-ios-bus:before,
+.ion-ios-business:before,
+.ion-ios-cafe:before,
+.ion-ios-calculator:before,
+.ion-ios-calendar:before,
+.ion-ios-call:before,
+.ion-ios-camera:before,
+.ion-ios-car:before,
+.ion-ios-card:before,
+.ion-ios-cart:before,
+.ion-ios-cash:before,
+.ion-ios-cellular:before,
+.ion-ios-chatboxes:before,
+.ion-ios-chatbubbles:before,
+.ion-ios-checkbox-outline:before,
+.ion-ios-checkbox:before,
+.ion-ios-checkmark-circle-outline:before,
+.ion-ios-checkmark-circle:before,
+.ion-ios-checkmark:before,
+.ion-ios-clipboard:before,
+.ion-ios-clock:before,
+.ion-ios-close-circle-outline:before,
+.ion-ios-close-circle:before,
+.ion-ios-close:before,
+.ion-ios-cloud-circle:before,
+.ion-ios-cloud-done:before,
+.ion-ios-cloud-download:before,
+.ion-ios-cloud-outline:before,
+.ion-ios-cloud-upload:before,
+.ion-ios-cloud:before,
+.ion-ios-cloudy-night:before,
+.ion-ios-cloudy:before,
+.ion-ios-code-download:before,
+.ion-ios-code-working:before,
+.ion-ios-code:before,
+.ion-ios-cog:before,
+.ion-ios-color-fill:before,
+.ion-ios-color-filter:before,
+.ion-ios-color-palette:before,
+.ion-ios-color-wand:before,
+.ion-ios-compass:before,
+.ion-ios-construct:before,
+.ion-ios-contact:before,
+.ion-ios-contacts:before,
+.ion-ios-contract:before,
+.ion-ios-contrast:before,
+.ion-ios-copy:before,
+.ion-ios-create:before,
+.ion-ios-crop:before,
+.ion-ios-cube:before,
+.ion-ios-cut:before,
+.ion-ios-desktop:before,
+.ion-ios-disc:before,
+.ion-ios-document:before,
+.ion-ios-done-all:before,
+.ion-ios-download:before,
+.ion-ios-easel:before,
+.ion-ios-egg:before,
+.ion-ios-exit:before,
+.ion-ios-expand:before,
+.ion-ios-eye-off:before,
+.ion-ios-eye:before,
+.ion-ios-fastforward:before,
+.ion-ios-female:before,
+.ion-ios-filing:before,
+.ion-ios-film:before,
+.ion-ios-finger-print:before,
+.ion-ios-fitness:before,
+.ion-ios-flag:before,
+.ion-ios-flame:before,
+.ion-ios-flash-off:before,
+.ion-ios-flash:before,
+.ion-ios-flashlight:before,
+.ion-ios-flask:before,
+.ion-ios-flower:before,
+.ion-ios-folder-open:before,
+.ion-ios-folder:before,
+.ion-ios-football:before,
+.ion-ios-funnel:before,
+.ion-ios-gift:before,
+.ion-ios-git-branch:before,
+.ion-ios-git-commit:before,
+.ion-ios-git-compare:before,
+.ion-ios-git-merge:before,
+.ion-ios-git-network:before,
+.ion-ios-git-pull-request:before,
+.ion-ios-glasses:before,
+.ion-ios-globe:before,
+.ion-ios-grid:before,
+.ion-ios-hammer:before,
+.ion-ios-hand:before,
+.ion-ios-happy:before,
+.ion-ios-headset:before,
+.ion-ios-heart-dislike:before,
+.ion-ios-heart-empty:before,
+.ion-ios-heart-half:before,
+.ion-ios-heart:before,
+.ion-ios-help-buoy:before,
+.ion-ios-help-circle-outline:before,
+.ion-ios-help-circle:before,
+.ion-ios-help:before,
+.ion-ios-home:before,
+.ion-ios-hourglass:before,
+.ion-ios-ice-cream:before,
+.ion-ios-image:before,
+.ion-ios-images:before,
+.ion-ios-infinite:before,
+.ion-ios-information-circle-outline:before,
+.ion-ios-information-circle:before,
+.ion-ios-information:before,
+.ion-ios-jet:before,
+.ion-ios-journal:before,
+.ion-ios-key:before,
+.ion-ios-keypad:before,
+.ion-ios-laptop:before,
+.ion-ios-leaf:before,
+.ion-ios-link:before,
+.ion-ios-list-box:before,
+.ion-ios-list:before,
+.ion-ios-locate:before,
+.ion-ios-lock:before,
+.ion-ios-log-in:before,
+.ion-ios-log-out:before,
+.ion-ios-magnet:before,
+.ion-ios-mail-open:before,
+.ion-ios-mail-unread:before,
+.ion-ios-mail:before,
+.ion-ios-male:before,
+.ion-ios-man:before,
+.ion-ios-map:before,
+.ion-ios-medal:before,
+.ion-ios-medical:before,
+.ion-ios-medkit:before,
+.ion-ios-megaphone:before,
+.ion-ios-menu:before,
+.ion-ios-mic-off:before,
+.ion-ios-mic:before,
+.ion-ios-microphone:before,
+.ion-ios-moon:before,
+.ion-ios-more:before,
+.ion-ios-move:before,
+.ion-ios-musical-note:before,
+.ion-ios-musical-notes:before,
+.ion-ios-navigate:before,
+.ion-ios-notifications-off:before,
+.ion-ios-notifications-outline:before,
+.ion-ios-notifications:before,
+.ion-ios-nuclear:before,
+.ion-ios-nutrition:before,
+.ion-ios-open:before,
+.ion-ios-options:before,
+.ion-ios-outlet:before,
+.ion-ios-paper-plane:before,
+.ion-ios-paper:before,
+.ion-ios-partly-sunny:before,
+.ion-ios-pause:before,
+.ion-ios-paw:before,
+.ion-ios-people:before,
+.ion-ios-person-add:before,
+.ion-ios-person:before,
+.ion-ios-phone-landscape:before,
+.ion-ios-phone-portrait:before,
+.ion-ios-photos:before,
+.ion-ios-pie:before,
+.ion-ios-pin:before,
+.ion-ios-pint:before,
+.ion-ios-pizza:before,
+.ion-ios-planet:before,
+.ion-ios-play-circle:before,
+.ion-ios-play:before,
+.ion-ios-podium:before,
+.ion-ios-power:before,
+.ion-ios-pricetag:before,
+.ion-ios-pricetags:before,
+.ion-ios-print:before,
+.ion-ios-pulse:before,
+.ion-ios-qr-scanner:before,
+.ion-ios-quote:before,
+.ion-ios-radio-button-off:before,
+.ion-ios-radio-button-on:before,
+.ion-ios-radio:before,
+.ion-ios-rainy:before,
+.ion-ios-recording:before,
+.ion-ios-redo:before,
+.ion-ios-refresh-circle:before,
+.ion-ios-refresh:before,
+.ion-ios-remove-circle-outline:before,
+.ion-ios-remove-circle:before,
+.ion-ios-remove:before,
+.ion-ios-reorder:before,
+.ion-ios-repeat:before,
+.ion-ios-resize:before,
+.ion-ios-restaurant:before,
+.ion-ios-return-left:before,
+.ion-ios-return-right:before,
+.ion-ios-reverse-camera:before,
+.ion-ios-rewind:before,
+.ion-ios-ribbon:before,
+.ion-ios-rocket:before,
+.ion-ios-rose:before,
+.ion-ios-sad:before,
+.ion-ios-save:before,
+.ion-ios-school:before,
+.ion-ios-search:before,
+.ion-ios-send:before,
+.ion-ios-settings:before,
+.ion-ios-share-alt:before,
+.ion-ios-share:before,
+.ion-ios-shirt:before,
+.ion-ios-shuffle:before,
+.ion-ios-skip-backward:before,
+.ion-ios-skip-forward:before,
+.ion-ios-snow:before,
+.ion-ios-speedometer:before,
+.ion-ios-square-outline:before,
+.ion-ios-square:before,
+.ion-ios-star-half:before,
+.ion-ios-star-outline:before,
+.ion-ios-star:before,
+.ion-ios-stats:before,
+.ion-ios-stopwatch:before,
+.ion-ios-subway:before,
+.ion-ios-sunny:before,
+.ion-ios-swap:before,
+.ion-ios-switch:before,
+.ion-ios-sync:before,
+.ion-ios-tablet-landscape:before,
+.ion-ios-tablet-portrait:before,
+.ion-ios-tennisball:before,
+.ion-ios-text:before,
+.ion-ios-thermometer:before,
+.ion-ios-thumbs-down:before,
+.ion-ios-thumbs-up:before,
+.ion-ios-thunderstorm:before,
+.ion-ios-time:before,
+.ion-ios-timer:before,
+.ion-ios-today:before,
+.ion-ios-train:before,
+.ion-ios-transgender:before,
+.ion-ios-trash:before,
+.ion-ios-trending-down:before,
+.ion-ios-trending-up:before,
+.ion-ios-trophy:before,
+.ion-ios-tv:before,
+.ion-ios-umbrella:before,
+.ion-ios-undo:before,
+.ion-ios-unlock:before,
+.ion-ios-videocam:before,
+.ion-ios-volume-high:before,
+.ion-ios-volume-low:before,
+.ion-ios-volume-mute:before,
+.ion-ios-volume-off:before,
+.ion-ios-walk:before,
+.ion-ios-wallet:before,
+.ion-ios-warning:before,
+.ion-ios-watch:before,
+.ion-ios-water:before,
+.ion-ios-wifi:before,
+.ion-ios-wine:before,
+.ion-ios-woman:before,
+.ion-logo-android:before,
+.ion-logo-angular:before,
+.ion-logo-apple:before,
+.ion-logo-bitbucket:before,
+.ion-logo-bitcoin:before,
+.ion-logo-buffer:before,
+.ion-logo-chrome:before,
+.ion-logo-closed-captioning:before,
+.ion-logo-codepen:before,
+.ion-logo-css3:before,
+.ion-logo-designernews:before,
+.ion-logo-dribbble:before,
+.ion-logo-dropbox:before,
+.ion-logo-euro:before,
+.ion-logo-facebook:before,
+.ion-logo-flickr:before,
+.ion-logo-foursquare:before,
+.ion-logo-freebsd-devil:before,
+.ion-logo-game-controller-a:before,
+.ion-logo-game-controller-b:before,
+.ion-logo-github:before,
+.ion-logo-google:before,
+.ion-logo-googleplus:before,
+.ion-logo-hackernews:before,
+.ion-logo-html5:before,
+.ion-logo-instagram:before,
+.ion-logo-ionic:before,
+.ion-logo-ionitron:before,
+.ion-logo-javascript:before,
+.ion-logo-linkedin:before,
+.ion-logo-markdown:before,
+.ion-logo-model-s:before,
+.ion-logo-no-smoking:before,
+.ion-logo-nodejs:before,
+.ion-logo-npm:before,
+.ion-logo-octocat:before,
+.ion-logo-pinterest:before,
+.ion-logo-playstation:before,
+.ion-logo-polymer:before,
+.ion-logo-python:before,
+.ion-logo-reddit:before,
+.ion-logo-rss:before,
+.ion-logo-sass:before,
+.ion-logo-skype:before,
+.ion-logo-slack:before,
+.ion-logo-snapchat:before,
+.ion-logo-steam:before,
+.ion-logo-tumblr:before,
+.ion-logo-tux:before,
+.ion-logo-twitch:before,
+.ion-logo-twitter:before,
+.ion-logo-usd:before,
+.ion-logo-vimeo:before,
+.ion-logo-vk:before,
+.ion-logo-whatsapp:before,
+.ion-logo-windows:before,
+.ion-logo-wordpress:before,
+.ion-logo-xbox:before,
+.ion-logo-xing:before,
+.ion-logo-yahoo:before,
+.ion-logo-yen:before,
+.ion-logo-youtube:before,
+.ion-md-add-circle-outline:before,
+.ion-md-add-circle:before,
+.ion-md-add:before,
+.ion-md-airplane:before,
+.ion-md-alarm:before,
+.ion-md-albums:before,
+.ion-md-alert:before,
+.ion-md-american-football:before,
+.ion-md-analytics:before,
+.ion-md-aperture:before,
+.ion-md-apps:before,
+.ion-md-appstore:before,
+.ion-md-archive:before,
+.ion-md-arrow-back:before,
+.ion-md-arrow-down:before,
+.ion-md-arrow-dropdown-circle:before,
+.ion-md-arrow-dropdown:before,
+.ion-md-arrow-dropleft-circle:before,
+.ion-md-arrow-dropleft:before,
+.ion-md-arrow-dropright-circle:before,
+.ion-md-arrow-dropright:before,
+.ion-md-arrow-dropup-circle:before,
+.ion-md-arrow-dropup:before,
+.ion-md-arrow-forward:before,
+.ion-md-arrow-round-back:before,
+.ion-md-arrow-round-down:before,
+.ion-md-arrow-round-forward:before,
+.ion-md-arrow-round-up:before,
+.ion-md-arrow-up:before,
+.ion-md-at:before,
+.ion-md-attach:before,
+.ion-md-backspace:before,
+.ion-md-barcode:before,
+.ion-md-baseball:before,
+.ion-md-basket:before,
+.ion-md-basketball:before,
+.ion-md-battery-charging:before,
+.ion-md-battery-dead:before,
+.ion-md-battery-full:before,
+.ion-md-beaker:before,
+.ion-md-bed:before,
+.ion-md-beer:before,
+.ion-md-bicycle:before,
+.ion-md-bluetooth:before,
+.ion-md-boat:before,
+.ion-md-body:before,
+.ion-md-bonfire:before,
+.ion-md-book:before,
+.ion-md-bookmark:before,
+.ion-md-bookmarks:before,
+.ion-md-bowtie:before,
+.ion-md-briefcase:before,
+.ion-md-browsers:before,
+.ion-md-brush:before,
+.ion-md-bug:before,
+.ion-md-build:before,
+.ion-md-bulb:before,
+.ion-md-bus:before,
+.ion-md-business:before,
+.ion-md-cafe:before,
+.ion-md-calculator:before,
+.ion-md-calendar:before,
+.ion-md-call:before,
+.ion-md-camera:before,
+.ion-md-car:before,
+.ion-md-card:before,
+.ion-md-cart:before,
+.ion-md-cash:before,
+.ion-md-cellular:before,
+.ion-md-chatboxes:before,
+.ion-md-chatbubbles:before,
+.ion-md-checkbox-outline:before,
+.ion-md-checkbox:before,
+.ion-md-checkmark-circle-outline:before,
+.ion-md-checkmark-circle:before,
+.ion-md-checkmark:before,
+.ion-md-clipboard:before,
+.ion-md-clock:before,
+.ion-md-close-circle-outline:before,
+.ion-md-close-circle:before,
+.ion-md-close:before,
+.ion-md-cloud-circle:before,
+.ion-md-cloud-done:before,
+.ion-md-cloud-download:before,
+.ion-md-cloud-outline:before,
+.ion-md-cloud-upload:before,
+.ion-md-cloud:before,
+.ion-md-cloudy-night:before,
+.ion-md-cloudy:before,
+.ion-md-code-download:before,
+.ion-md-code-working:before,
+.ion-md-code:before,
+.ion-md-cog:before,
+.ion-md-color-fill:before,
+.ion-md-color-filter:before,
+.ion-md-color-palette:before,
+.ion-md-color-wand:before,
+.ion-md-compass:before,
+.ion-md-construct:before,
+.ion-md-contact:before,
+.ion-md-contacts:before,
+.ion-md-contract:before,
+.ion-md-contrast:before,
+.ion-md-copy:before,
+.ion-md-create:before,
+.ion-md-crop:before,
+.ion-md-cube:before,
+.ion-md-cut:before,
+.ion-md-desktop:before,
+.ion-md-disc:before,
+.ion-md-document:before,
+.ion-md-done-all:before,
+.ion-md-download:before,
+.ion-md-easel:before,
+.ion-md-egg:before,
+.ion-md-exit:before,
+.ion-md-expand:before,
+.ion-md-eye-off:before,
+.ion-md-eye:before,
+.ion-md-fastforward:before,
+.ion-md-female:before,
+.ion-md-filing:before,
+.ion-md-film:before,
+.ion-md-finger-print:before,
+.ion-md-fitness:before,
+.ion-md-flag:before,
+.ion-md-flame:before,
+.ion-md-flash-off:before,
+.ion-md-flash:before,
+.ion-md-flashlight:before,
+.ion-md-flask:before,
+.ion-md-flower:before,
+.ion-md-folder-open:before,
+.ion-md-folder:before,
+.ion-md-football:before,
+.ion-md-funnel:before,
+.ion-md-gift:before,
+.ion-md-git-branch:before,
+.ion-md-git-commit:before,
+.ion-md-git-compare:before,
+.ion-md-git-merge:before,
+.ion-md-git-network:before,
+.ion-md-git-pull-request:before,
+.ion-md-glasses:before,
+.ion-md-globe:before,
+.ion-md-grid:before,
+.ion-md-hammer:before,
+.ion-md-hand:before,
+.ion-md-happy:before,
+.ion-md-headset:before,
+.ion-md-heart-dislike:before,
+.ion-md-heart-empty:before,
+.ion-md-heart-half:before,
+.ion-md-heart:before,
+.ion-md-help-buoy:before,
+.ion-md-help-circle-outline:before,
+.ion-md-help-circle:before,
+.ion-md-help:before,
+.ion-md-home:before,
+.ion-md-hourglass:before,
+.ion-md-ice-cream:before,
+.ion-md-image:before,
+.ion-md-images:before,
+.ion-md-infinite:before,
+.ion-md-information-circle-outline:before,
+.ion-md-information-circle:before,
+.ion-md-information:before,
+.ion-md-jet:before,
+.ion-md-journal:before,
+.ion-md-key:before,
+.ion-md-keypad:before,
+.ion-md-laptop:before,
+.ion-md-leaf:before,
+.ion-md-link:before,
+.ion-md-list-box:before,
+.ion-md-list:before,
+.ion-md-locate:before,
+.ion-md-lock:before,
+.ion-md-log-in:before,
+.ion-md-log-out:before,
+.ion-md-magnet:before,
+.ion-md-mail-open:before,
+.ion-md-mail-unread:before,
+.ion-md-mail:before,
+.ion-md-male:before,
+.ion-md-man:before,
+.ion-md-map:before,
+.ion-md-medal:before,
+.ion-md-medical:before,
+.ion-md-medkit:before,
+.ion-md-megaphone:before,
+.ion-md-menu:before,
+.ion-md-mic-off:before,
+.ion-md-mic:before,
+.ion-md-microphone:before,
+.ion-md-moon:before,
+.ion-md-more:before,
+.ion-md-move:before,
+.ion-md-musical-note:before,
+.ion-md-musical-notes:before,
+.ion-md-navigate:before,
+.ion-md-notifications-off:before,
+.ion-md-notifications-outline:before,
+.ion-md-notifications:before,
+.ion-md-nuclear:before,
+.ion-md-nutrition:before,
+.ion-md-open:before,
+.ion-md-options:before,
+.ion-md-outlet:before,
+.ion-md-paper-plane:before,
+.ion-md-paper:before,
+.ion-md-partly-sunny:before,
+.ion-md-pause:before,
+.ion-md-paw:before,
+.ion-md-people:before,
+.ion-md-person-add:before,
+.ion-md-person:before,
+.ion-md-phone-landscape:before,
+.ion-md-phone-portrait:before,
+.ion-md-photos:before,
+.ion-md-pie:before,
+.ion-md-pin:before,
+.ion-md-pint:before,
+.ion-md-pizza:before,
+.ion-md-planet:before,
+.ion-md-play-circle:before,
+.ion-md-play:before,
+.ion-md-podium:before,
+.ion-md-power:before,
+.ion-md-pricetag:before,
+.ion-md-pricetags:before,
+.ion-md-print:before,
+.ion-md-pulse:before,
+.ion-md-qr-scanner:before,
+.ion-md-quote:before,
+.ion-md-radio-button-off:before,
+.ion-md-radio-button-on:before,
+.ion-md-radio:before,
+.ion-md-rainy:before,
+.ion-md-recording:before,
+.ion-md-redo:before,
+.ion-md-refresh-circle:before,
+.ion-md-refresh:before,
+.ion-md-remove-circle-outline:before,
+.ion-md-remove-circle:before,
+.ion-md-remove:before,
+.ion-md-reorder:before,
+.ion-md-repeat:before,
+.ion-md-resize:before,
+.ion-md-restaurant:before,
+.ion-md-return-left:before,
+.ion-md-return-right:before,
+.ion-md-reverse-camera:before,
+.ion-md-rewind:before,
+.ion-md-ribbon:before,
+.ion-md-rocket:before,
+.ion-md-rose:before,
+.ion-md-sad:before,
+.ion-md-save:before,
+.ion-md-school:before,
+.ion-md-search:before,
+.ion-md-send:before,
+.ion-md-settings:before,
+.ion-md-share-alt:before,
+.ion-md-share:before,
+.ion-md-shirt:before,
+.ion-md-shuffle:before,
+.ion-md-skip-backward:before,
+.ion-md-skip-forward:before,
+.ion-md-snow:before,
+.ion-md-speedometer:before,
+.ion-md-square-outline:before,
+.ion-md-square:before,
+.ion-md-star-half:before,
+.ion-md-star-outline:before,
+.ion-md-star:before,
+.ion-md-stats:before,
+.ion-md-stopwatch:before,
+.ion-md-subway:before,
+.ion-md-sunny:before,
+.ion-md-swap:before,
+.ion-md-switch:before,
+.ion-md-sync:before,
+.ion-md-tablet-landscape:before,
+.ion-md-tablet-portrait:before,
+.ion-md-tennisball:before,
+.ion-md-text:before,
+.ion-md-thermometer:before,
+.ion-md-thumbs-down:before,
+.ion-md-thumbs-up:before,
+.ion-md-thunderstorm:before,
+.ion-md-time:before,
+.ion-md-timer:before,
+.ion-md-today:before,
+.ion-md-train:before,
+.ion-md-transgender:before,
+.ion-md-trash:before,
+.ion-md-trending-down:before,
+.ion-md-trending-up:before,
+.ion-md-trophy:before,
+.ion-md-tv:before,
+.ion-md-umbrella:before,
+.ion-md-undo:before,
+.ion-md-unlock:before,
+.ion-md-videocam:before,
+.ion-md-volume-high:before,
+.ion-md-volume-low:before,
+.ion-md-volume-mute:before,
+.ion-md-volume-off:before,
+.ion-md-walk:before,
+.ion-md-wallet:before,
+.ion-md-warning:before,
+.ion-md-watch:before,
+.ion-md-water:before,
+.ion-md-wifi:before,
+.ion-md-wine:before,
+.ion-md-woman:before,
+.ionicons {
+ display: inline-block;
+ font-family: Ionicons;
+ speak: none;
+ font-style: normal;
+ font-weight: 400;
+ font-variant: normal;
+ text-transform: none;
+ text-rendering: auto;
+ line-height: 1;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale
+}
+.ion-ios-add:before {
+ content: "\f102"
+}
+.ion-ios-add-circle:before {
+ content: "\f101"
+}
+.ion-ios-add-circle-outline:before {
+ content: "\f100"
+}
+.ion-ios-airplane:before {
+ content: "\f137"
+}
+.ion-ios-alarm:before {
+ content: "\f3c8"
+}
+.ion-ios-albums:before {
+ content: "\f3ca"
+}
+.ion-ios-alert:before {
+ content: "\f104"
+}
+.ion-ios-american-football:before {
+ content: "\f106"
+}
+.ion-ios-analytics:before {
+ content: "\f3ce"
+}
+.ion-ios-aperture:before {
+ content: "\f108"
+}
+.ion-ios-apps:before {
+ content: "\f10a"
+}
+.ion-ios-appstore:before {
+ content: "\f10c"
+}
+.ion-ios-archive:before {
+ content: "\f10e"
+}
+.ion-ios-arrow-back:before {
+ content: "\f3cf"
+}
+.ion-ios-arrow-down:before {
+ content: "\f3d0"
+}
+.ion-ios-arrow-dropdown:before {
+ content: "\f110"
+}
+.ion-ios-arrow-dropdown-circle:before {
+ content: "\f125"
+}
+.ion-ios-arrow-dropleft:before {
+ content: "\f112"
+}
+.ion-ios-arrow-dropleft-circle:before {
+ content: "\f129"
+}
+.ion-ios-arrow-dropright:before {
+ content: "\f114"
+}
+.ion-ios-arrow-dropright-circle:before {
+ content: "\f12b"
+}
+.ion-ios-arrow-dropup:before {
+ content: "\f116"
+}
+.ion-ios-arrow-dropup-circle:before {
+ content: "\f12d"
+}
+.ion-ios-arrow-forward:before {
+ content: "\f3d1"
+}
+.ion-ios-arrow-round-back:before {
+ content: "\f117"
+}
+.ion-ios-arrow-round-down:before {
+ content: "\f118"
+}
+.ion-ios-arrow-round-forward:before {
+ content: "\f119"
+}
+.ion-ios-arrow-round-up:before {
+ content: "\f11a"
+}
+.ion-ios-arrow-up:before {
+ content: "\f3d8"
+}
+.ion-ios-at:before {
+ content: "\f3da"
+}
+.ion-ios-attach:before {
+ content: "\f11b"
+}
+.ion-ios-backspace:before {
+ content: "\f11d"
+}
+.ion-ios-barcode:before {
+ content: "\f3dc"
+}
+.ion-ios-baseball:before {
+ content: "\f3de"
+}
+.ion-ios-basket:before {
+ content: "\f11f"
+}
+.ion-ios-basketball:before {
+ content: "\f3e0"
+}
+.ion-ios-battery-charging:before {
+ content: "\f120"
+}
+.ion-ios-battery-dead:before {
+ content: "\f121"
+}
+.ion-ios-battery-full:before {
+ content: "\f122"
+}
+.ion-ios-beaker:before {
+ content: "\f124"
+}
+.ion-ios-bed:before {
+ content: "\f139"
+}
+.ion-ios-beer:before {
+ content: "\f126"
+}
+.ion-ios-bicycle:before {
+ content: "\f127"
+}
+.ion-ios-bluetooth:before {
+ content: "\f128"
+}
+.ion-ios-boat:before {
+ content: "\f12a"
+}
+.ion-ios-body:before {
+ content: "\f3e4"
+}
+.ion-ios-bonfire:before {
+ content: "\f12c"
+}
+.ion-ios-book:before {
+ content: "\f3e8"
+}
+.ion-ios-bookmark:before {
+ content: "\f12e"
+}
+.ion-ios-bookmarks:before {
+ content: "\f3ea"
+}
+.ion-ios-bowtie:before {
+ content: "\f130"
+}
+.ion-ios-briefcase:before {
+ content: "\f3ee"
+}
+.ion-ios-browsers:before {
+ content: "\f3f0"
+}
+.ion-ios-brush:before {
+ content: "\f132"
+}
+.ion-ios-bug:before {
+ content: "\f134"
+}
+.ion-ios-build:before {
+ content: "\f136"
+}
+.ion-ios-bulb:before {
+ content: "\f138"
+}
+.ion-ios-bus:before {
+ content: "\f13a"
+}
+.ion-ios-business:before {
+ content: "\f1a3"
+}
+.ion-ios-cafe:before {
+ content: "\f13c"
+}
+.ion-ios-calculator:before {
+ content: "\f3f2"
+}
+.ion-ios-calendar:before {
+ content: "\f3f4"
+}
+.ion-ios-call:before {
+ content: "\f13e"
+}
+.ion-ios-camera:before {
+ content: "\f3f6"
+}
+.ion-ios-car:before {
+ content: "\f140"
+}
+.ion-ios-card:before {
+ content: "\f142"
+}
+.ion-ios-cart:before {
+ content: "\f3f8"
+}
+.ion-ios-cash:before {
+ content: "\f144"
+}
+.ion-ios-cellular:before {
+ content: "\f13d"
+}
+.ion-ios-chatboxes:before {
+ content: "\f3fa"
+}
+.ion-ios-chatbubbles:before {
+ content: "\f146"
+}
+.ion-ios-checkbox:before {
+ content: "\f148"
+}
+.ion-ios-checkbox-outline:before {
+ content: "\f147"
+}
+.ion-ios-checkmark:before {
+ content: "\f3ff"
+}
+.ion-ios-checkmark-circle:before {
+ content: "\f14a"
+}
+.ion-ios-checkmark-circle-outline:before {
+ content: "\f149"
+}
+.ion-ios-clipboard:before {
+ content: "\f14c"
+}
+.ion-ios-clock:before {
+ content: "\f403"
+}
+.ion-ios-close:before {
+ content: "\f406"
+}
+.ion-ios-close-circle:before {
+ content: "\f14e"
+}
+.ion-ios-close-circle-outline:before {
+ content: "\f14d"
+}
+.ion-ios-cloud:before {
+ content: "\f40c"
+}
+.ion-ios-cloud-circle:before {
+ content: "\f152"
+}
+.ion-ios-cloud-done:before {
+ content: "\f154"
+}
+.ion-ios-cloud-download:before {
+ content: "\f408"
+}
+.ion-ios-cloud-outline:before {
+ content: "\f409"
+}
+.ion-ios-cloud-upload:before {
+ content: "\f40b"
+}
+.ion-ios-cloudy:before {
+ content: "\f410"
+}
+.ion-ios-cloudy-night:before {
+ content: "\f40e"
+}
+.ion-ios-code:before {
+ content: "\f157"
+}
+.ion-ios-code-download:before {
+ content: "\f155"
+}
+.ion-ios-code-working:before {
+ content: "\f156"
+}
+.ion-ios-cog:before {
+ content: "\f412"
+}
+.ion-ios-color-fill:before {
+ content: "\f159"
+}
+.ion-ios-color-filter:before {
+ content: "\f414"
+}
+.ion-ios-color-palette:before {
+ content: "\f15b"
+}
+.ion-ios-color-wand:before {
+ content: "\f416"
+}
+.ion-ios-compass:before {
+ content: "\f15d"
+}
+.ion-ios-construct:before {
+ content: "\f15f"
+}
+.ion-ios-contact:before {
+ content: "\f41a"
+}
+.ion-ios-contacts:before {
+ content: "\f161"
+}
+.ion-ios-contract:before {
+ content: "\f162"
+}
+.ion-ios-contrast:before {
+ content: "\f163"
+}
+.ion-ios-copy:before {
+ content: "\f41c"
+}
+.ion-ios-create:before {
+ content: "\f165"
+}
+.ion-ios-crop:before {
+ content: "\f41e"
+}
+.ion-ios-cube:before {
+ content: "\f168"
+}
+.ion-ios-cut:before {
+ content: "\f16a"
+}
+.ion-ios-desktop:before {
+ content: "\f16c"
+}
+.ion-ios-disc:before {
+ content: "\f16e"
+}
+.ion-ios-document:before {
+ content: "\f170"
+}
+.ion-ios-done-all:before {
+ content: "\f171"
+}
+.ion-ios-download:before {
+ content: "\f420"
+}
+.ion-ios-easel:before {
+ content: "\f173"
+}
+.ion-ios-egg:before {
+ content: "\f175"
+}
+.ion-ios-exit:before {
+ content: "\f177"
+}
+.ion-ios-expand:before {
+ content: "\f178"
+}
+.ion-ios-eye:before {
+ content: "\f425"
+}
+.ion-ios-eye-off:before {
+ content: "\f17a"
+}
+.ion-ios-fastforward:before {
+ content: "\f427"
+}
+.ion-ios-female:before {
+ content: "\f17b"
+}
+.ion-ios-filing:before {
+ content: "\f429"
+}
+.ion-ios-film:before {
+ content: "\f42b"
+}
+.ion-ios-finger-print:before {
+ content: "\f17c"
+}
+.ion-ios-fitness:before {
+ content: "\f1ab"
+}
+.ion-ios-flag:before {
+ content: "\f42d"
+}
+.ion-ios-flame:before {
+ content: "\f42f"
+}
+.ion-ios-flash:before {
+ content: "\f17e"
+}
+.ion-ios-flash-off:before {
+ content: "\f12f"
+}
+.ion-ios-flashlight:before {
+ content: "\f141"
+}
+.ion-ios-flask:before {
+ content: "\f431"
+}
+.ion-ios-flower:before {
+ content: "\f433"
+}
+.ion-ios-folder:before {
+ content: "\f435"
+}
+.ion-ios-folder-open:before {
+ content: "\f180"
+}
+.ion-ios-football:before {
+ content: "\f437"
+}
+.ion-ios-funnel:before {
+ content: "\f182"
+}
+.ion-ios-gift:before {
+ content: "\f191"
+}
+.ion-ios-git-branch:before {
+ content: "\f183"
+}
+.ion-ios-git-commit:before {
+ content: "\f184"
+}
+.ion-ios-git-compare:before {
+ content: "\f185"
+}
+.ion-ios-git-merge:before {
+ content: "\f186"
+}
+.ion-ios-git-network:before {
+ content: "\f187"
+}
+.ion-ios-git-pull-request:before {
+ content: "\f188"
+}
+.ion-ios-glasses:before {
+ content: "\f43f"
+}
+.ion-ios-globe:before {
+ content: "\f18a"
+}
+.ion-ios-grid:before {
+ content: "\f18c"
+}
+.ion-ios-hammer:before {
+ content: "\f18e"
+}
+.ion-ios-hand:before {
+ content: "\f190"
+}
+.ion-ios-happy:before {
+ content: "\f192"
+}
+.ion-ios-headset:before {
+ content: "\f194"
+}
+.ion-ios-heart:before {
+ content: "\f443"
+}
+.ion-ios-heart-dislike:before {
+ content: "\f13f"
+}
+.ion-ios-heart-empty:before {
+ content: "\f19b"
+}
+.ion-ios-heart-half:before {
+ content: "\f19d"
+}
+.ion-ios-help:before {
+ content: "\f446"
+}
+.ion-ios-help-buoy:before {
+ content: "\f196"
+}
+.ion-ios-help-circle:before {
+ content: "\f198"
+}
+.ion-ios-help-circle-outline:before {
+ content: "\f197"
+}
+.ion-ios-home:before {
+ content: "\f448"
+}
+.ion-ios-hourglass:before {
+ content: "\f103"
+}
+.ion-ios-ice-cream:before {
+ content: "\f19a"
+}
+.ion-ios-image:before {
+ content: "\f19c"
+}
+.ion-ios-images:before {
+ content: "\f19e"
+}
+.ion-ios-infinite:before {
+ content: "\f44a"
+}
+.ion-ios-information:before {
+ content: "\f44d"
+}
+.ion-ios-information-circle:before {
+ content: "\f1a0"
+}
+.ion-ios-information-circle-outline:before {
+ content: "\f19f"
+}
+.ion-ios-jet:before {
+ content: "\f1a5"
+}
+.ion-ios-journal:before {
+ content: "\f189"
+}
+.ion-ios-key:before {
+ content: "\f1a7"
+}
+.ion-ios-keypad:before {
+ content: "\f450"
+}
+.ion-ios-laptop:before {
+ content: "\f1a8"
+}
+.ion-ios-leaf:before {
+ content: "\f1aa"
+}
+.ion-ios-link:before {
+ content: "\f22a"
+}
+.ion-ios-list:before {
+ content: "\f454"
+}
+.ion-ios-list-box:before {
+ content: "\f143"
+}
+.ion-ios-locate:before {
+ content: "\f1ae"
+}
+.ion-ios-lock:before {
+ content: "\f1b0"
+}
+.ion-ios-log-in:before {
+ content: "\f1b1"
+}
+.ion-ios-log-out:before {
+ content: "\f1b2"
+}
+.ion-ios-magnet:before {
+ content: "\f1b4"
+}
+.ion-ios-mail:before {
+ content: "\f1b8"
+}
+.ion-ios-mail-open:before {
+ content: "\f1b6"
+}
+.ion-ios-mail-unread:before {
+ content: "\f145"
+}
+.ion-ios-male:before {
+ content: "\f1b9"
+}
+.ion-ios-man:before {
+ content: "\f1bb"
+}
+.ion-ios-map:before {
+ content: "\f1bd"
+}
+.ion-ios-medal:before {
+ content: "\f1bf"
+}
+.ion-ios-medical:before {
+ content: "\f45c"
+}
+.ion-ios-medkit:before {
+ content: "\f45e"
+}
+.ion-ios-megaphone:before {
+ content: "\f1c1"
+}
+.ion-ios-menu:before {
+ content: "\f1c3"
+}
+.ion-ios-mic:before {
+ content: "\f461"
+}
+.ion-ios-mic-off:before {
+ content: "\f45f"
+}
+.ion-ios-microphone:before {
+ content: "\f1c6"
+}
+.ion-ios-moon:before {
+ content: "\f468"
+}
+.ion-ios-more:before {
+ content: "\f1c8"
+}
+.ion-ios-move:before {
+ content: "\f1cb"
+}
+.ion-ios-musical-note:before {
+ content: "\f46b"
+}
+.ion-ios-musical-notes:before {
+ content: "\f46c"
+}
+.ion-ios-navigate:before {
+ content: "\f46e"
+}
+.ion-ios-notifications:before {
+ content: "\f1d3"
+}
+.ion-ios-notifications-off:before {
+ content: "\f1d1"
+}
+.ion-ios-notifications-outline:before {
+ content: "\f133"
+}
+.ion-ios-nuclear:before {
+ content: "\f1d5"
+}
+.ion-ios-nutrition:before {
+ content: "\f470"
+}
+.ion-ios-open:before {
+ content: "\f1d7"
+}
+.ion-ios-options:before {
+ content: "\f1d9"
+}
+.ion-ios-outlet:before {
+ content: "\f1db"
+}
+.ion-ios-paper:before {
+ content: "\f472"
+}
+.ion-ios-paper-plane:before {
+ content: "\f1dd"
+}
+.ion-ios-partly-sunny:before {
+ content: "\f1df"
+}
+.ion-ios-pause:before {
+ content: "\f478"
+}
+.ion-ios-paw:before {
+ content: "\f47a"
+}
+.ion-ios-people:before {
+ content: "\f47c"
+}
+.ion-ios-person:before {
+ content: "\f47e"
+}
+.ion-ios-person-add:before {
+ content: "\f1e1"
+}
+.ion-ios-phone-landscape:before {
+ content: "\f1e2"
+}
+.ion-ios-phone-portrait:before {
+ content: "\f1e3"
+}
+.ion-ios-photos:before {
+ content: "\f482"
+}
+.ion-ios-pie:before {
+ content: "\f484"
+}
+.ion-ios-pin:before {
+ content: "\f1e5"
+}
+.ion-ios-pint:before {
+ content: "\f486"
+}
+.ion-ios-pizza:before {
+ content: "\f1e7"
+}
+.ion-ios-planet:before {
+ content: "\f1eb"
+}
+.ion-ios-play:before {
+ content: "\f488"
+}
+.ion-ios-play-circle:before {
+ content: "\f113"
+}
+.ion-ios-podium:before {
+ content: "\f1ed"
+}
+.ion-ios-power:before {
+ content: "\f1ef"
+}
+.ion-ios-pricetag:before {
+ content: "\f48d"
+}
+.ion-ios-pricetags:before {
+ content: "\f48f"
+}
+.ion-ios-print:before {
+ content: "\f1f1"
+}
+.ion-ios-pulse:before {
+ content: "\f493"
+}
+.ion-ios-qr-scanner:before {
+ content: "\f1f3"
+}
+.ion-ios-quote:before {
+ content: "\f1f5"
+}
+.ion-ios-radio:before {
+ content: "\f1f9"
+}
+.ion-ios-radio-button-off:before {
+ content: "\f1f6"
+}
+.ion-ios-radio-button-on:before {
+ content: "\f1f7"
+}
+.ion-ios-rainy:before {
+ content: "\f495"
+}
+.ion-ios-recording:before {
+ content: "\f497"
+}
+.ion-ios-redo:before {
+ content: "\f499"
+}
+.ion-ios-refresh:before {
+ content: "\f49c"
+}
+.ion-ios-refresh-circle:before {
+ content: "\f135"
+}
+.ion-ios-remove:before {
+ content: "\f1fc"
+}
+.ion-ios-remove-circle:before {
+ content: "\f1fb"
+}
+.ion-ios-remove-circle-outline:before {
+ content: "\f1fa"
+}
+.ion-ios-reorder:before {
+ content: "\f1fd"
+}
+.ion-ios-repeat:before {
+ content: "\f1fe"
+}
+.ion-ios-resize:before {
+ content: "\f1ff"
+}
+.ion-ios-restaurant:before {
+ content: "\f201"
+}
+.ion-ios-return-left:before {
+ content: "\f202"
+}
+.ion-ios-return-right:before {
+ content: "\f203"
+}
+.ion-ios-reverse-camera:before {
+ content: "\f49f"
+}
+.ion-ios-rewind:before {
+ content: "\f4a1"
+}
+.ion-ios-ribbon:before {
+ content: "\f205"
+}
+.ion-ios-rocket:before {
+ content: "\f14b"
+}
+.ion-ios-rose:before {
+ content: "\f4a3"
+}
+.ion-ios-sad:before {
+ content: "\f207"
+}
+.ion-ios-save:before {
+ content: "\f1a6"
+}
+.ion-ios-school:before {
+ content: "\f209"
+}
+.ion-ios-search:before {
+ content: "\f4a5"
+}
+.ion-ios-send:before {
+ content: "\f20c"
+}
+.ion-ios-settings:before {
+ content: "\f4a7"
+}
+.ion-ios-share:before {
+ content: "\f211"
+}
+.ion-ios-share-alt:before {
+ content: "\f20f"
+}
+.ion-ios-shirt:before {
+ content: "\f213"
+}
+.ion-ios-shuffle:before {
+ content: "\f4a9"
+}
+.ion-ios-skip-backward:before {
+ content: "\f215"
+}
+.ion-ios-skip-forward:before {
+ content: "\f217"
+}
+.ion-ios-snow:before {
+ content: "\f218"
+}
+.ion-ios-speedometer:before {
+ content: "\f4b0"
+}
+.ion-ios-square:before {
+ content: "\f21a"
+}
+.ion-ios-square-outline:before {
+ content: "\f15c"
+}
+.ion-ios-star:before {
+ content: "\f4b3"
+}
+.ion-ios-star-half:before {
+ content: "\f4b1"
+}
+.ion-ios-star-outline:before {
+ content: "\f4b2"
+}
+.ion-ios-stats:before {
+ content: "\f21c"
+}
+.ion-ios-stopwatch:before {
+ content: "\f4b5"
+}
+.ion-ios-subway:before {
+ content: "\f21e"
+}
+.ion-ios-sunny:before {
+ content: "\f4b7"
+}
+.ion-ios-swap:before {
+ content: "\f21f"
+}
+.ion-ios-switch:before {
+ content: "\f221"
+}
+.ion-ios-sync:before {
+ content: "\f222"
+}
+.ion-ios-tablet-landscape:before {
+ content: "\f223"
+}
+.ion-ios-tablet-portrait:before {
+ content: "\f24e"
+}
+.ion-ios-tennisball:before {
+ content: "\f4bb"
+}
+.ion-ios-text:before {
+ content: "\f250"
+}
+.ion-ios-thermometer:before {
+ content: "\f252"
+}
+.ion-ios-thumbs-down:before {
+ content: "\f254"
+}
+.ion-ios-thumbs-up:before {
+ content: "\f256"
+}
+.ion-ios-thunderstorm:before {
+ content: "\f4bd"
+}
+.ion-ios-time:before {
+ content: "\f4bf"
+}
+.ion-ios-timer:before {
+ content: "\f4c1"
+}
+.ion-ios-today:before {
+ content: "\f14f"
+}
+.ion-ios-train:before {
+ content: "\f258"
+}
+.ion-ios-transgender:before {
+ content: "\f259"
+}
+.ion-ios-trash:before {
+ content: "\f4c5"
+}
+.ion-ios-trending-down:before {
+ content: "\f25a"
+}
+.ion-ios-trending-up:before {
+ content: "\f25b"
+}
+.ion-ios-trophy:before {
+ content: "\f25d"
+}
+.ion-ios-tv:before {
+ content: "\f115"
+}
+.ion-ios-umbrella:before {
+ content: "\f25f"
+}
+.ion-ios-undo:before {
+ content: "\f4c7"
+}
+.ion-ios-unlock:before {
+ content: "\f261"
+}
+.ion-ios-videocam:before {
+ content: "\f4cd"
+}
+.ion-ios-volume-high:before {
+ content: "\f11c"
+}
+.ion-ios-volume-low:before {
+ content: "\f11e"
+}
+.ion-ios-volume-mute:before {
+ content: "\f263"
+}
+.ion-ios-volume-off:before {
+ content: "\f264"
+}
+.ion-ios-walk:before {
+ content: "\f266"
+}
+.ion-ios-wallet:before {
+ content: "\f18b"
+}
+.ion-ios-warning:before {
+ content: "\f268"
+}
+.ion-ios-watch:before {
+ content: "\f269"
+}
+.ion-ios-water:before {
+ content: "\f26b"
+}
+.ion-ios-wifi:before {
+ content: "\f26d"
+}
+.ion-ios-wine:before {
+ content: "\f26f"
+}
+.ion-ios-woman:before {
+ content: "\f271"
+}
+.ion-logo-android:before {
+ content: "\f225"
+}
+.ion-logo-angular:before {
+ content: "\f227"
+}
+.ion-logo-apple:before {
+ content: "\f229"
+}
+.ion-logo-bitbucket:before {
+ content: "\f193"
+}
+.ion-logo-bitcoin:before {
+ content: "\f22b"
+}
+.ion-logo-buffer:before {
+ content: "\f22d"
+}
+.ion-logo-chrome:before {
+ content: "\f22f"
+}
+.ion-logo-closed-captioning:before {
+ content: "\f105"
+}
+.ion-logo-codepen:before {
+ content: "\f230"
+}
+.ion-logo-css3:before {
+ content: "\f231"
+}
+.ion-logo-designernews:before {
+ content: "\f232"
+}
+.ion-logo-dribbble:before {
+ content: "\f233"
+}
+.ion-logo-dropbox:before {
+ content: "\f234"
+}
+.ion-logo-euro:before {
+ content: "\f235"
+}
+.ion-logo-facebook:before {
+ content: "\f236"
+}
+.ion-logo-flickr:before {
+ content: "\f107"
+}
+.ion-logo-foursquare:before {
+ content: "\f237"
+}
+.ion-logo-freebsd-devil:before {
+ content: "\f238"
+}
+.ion-logo-game-controller-a:before {
+ content: "\f13b"
+}
+.ion-logo-game-controller-b:before {
+ content: "\f181"
+}
+.ion-logo-github:before {
+ content: "\f239"
+}
+.ion-logo-google:before {
+ content: "\f23a"
+}
+.ion-logo-googleplus:before {
+ content: "\f23b"
+}
+.ion-logo-hackernews:before {
+ content: "\f23c"
+}
+.ion-logo-html5:before {
+ content: "\f23d"
+}
+.ion-logo-instagram:before {
+ content: "\f23e"
+}
+.ion-logo-ionic:before {
+ content: "\f150"
+}
+.ion-logo-ionitron:before {
+ content: "\f151"
+}
+.ion-logo-javascript:before {
+ content: "\f23f"
+}
+.ion-logo-linkedin:before {
+ content: "\f240"
+}
+.ion-logo-markdown:before {
+ content: "\f241"
+}
+.ion-logo-model-s:before {
+ content: "\f153"
+}
+.ion-logo-no-smoking:before {
+ content: "\f109"
+}
+.ion-logo-nodejs:before {
+ content: "\f242"
+}
+.ion-logo-npm:before {
+ content: "\f195"
+}
+.ion-logo-octocat:before {
+ content: "\f243"
+}
+.ion-logo-pinterest:before {
+ content: "\f244"
+}
+.ion-logo-playstation:before {
+ content: "\f245"
+}
+.ion-logo-polymer:before {
+ content: "\f15e"
+}
+.ion-logo-python:before {
+ content: "\f246"
+}
+.ion-logo-reddit:before {
+ content: "\f247"
+}
+.ion-logo-rss:before {
+ content: "\f248"
+}
+.ion-logo-sass:before {
+ content: "\f249"
+}
+.ion-logo-skype:before {
+ content: "\f24a"
+}
+.ion-logo-slack:before {
+ content: "\f10b"
+}
+.ion-logo-snapchat:before {
+ content: "\f24b"
+}
+.ion-logo-steam:before {
+ content: "\f24c"
+}
+.ion-logo-tumblr:before {
+ content: "\f24d"
+}
+.ion-logo-tux:before {
+ content: "\f2ae"
+}
+.ion-logo-twitch:before {
+ content: "\f2af"
+}
+.ion-logo-twitter:before {
+ content: "\f2b0"
+}
+.ion-logo-usd:before {
+ content: "\f2b1"
+}
+.ion-logo-vimeo:before {
+ content: "\f2c4"
+}
+.ion-logo-vk:before {
+ content: "\f10d"
+}
+.ion-logo-whatsapp:before {
+ content: "\f2c5"
+}
+.ion-logo-windows:before {
+ content: "\f32f"
+}
+.ion-logo-wordpress:before {
+ content: "\f330"
+}
+.ion-logo-xbox:before {
+ content: "\f34c"
+}
+.ion-logo-xing:before {
+ content: "\f10f"
+}
+.ion-logo-yahoo:before {
+ content: "\f34d"
+}
+.ion-logo-yen:before {
+ content: "\f34e"
+}
+.ion-logo-youtube:before {
+ content: "\f34f"
+}
+.ion-md-add:before {
+ content: "\f273"
+}
+.ion-md-add-circle:before {
+ content: "\f272"
+}
+.ion-md-add-circle-outline:before {
+ content: "\f158"
+}
+.ion-md-airplane:before {
+ content: "\f15a"
+}
+.ion-md-alarm:before {
+ content: "\f274"
+}
+.ion-md-albums:before {
+ content: "\f275"
+}
+.ion-md-alert:before {
+ content: "\f276"
+}
+.ion-md-american-football:before {
+ content: "\f277"
+}
+.ion-md-analytics:before {
+ content: "\f278"
+}
+.ion-md-aperture:before {
+ content: "\f279"
+}
+.ion-md-apps:before {
+ content: "\f27a"
+}
+.ion-md-appstore:before {
+ content: "\f27b"
+}
+.ion-md-archive:before {
+ content: "\f27c"
+}
+.ion-md-arrow-back:before {
+ content: "\f27d"
+}
+.ion-md-arrow-down:before {
+ content: "\f27e"
+}
+.ion-md-arrow-dropdown:before {
+ content: "\f280"
+}
+.ion-md-arrow-dropdown-circle:before {
+ content: "\f27f"
+}
+.ion-md-arrow-dropleft:before {
+ content: "\f282"
+}
+.ion-md-arrow-dropleft-circle:before {
+ content: "\f281"
+}
+.ion-md-arrow-dropright:before {
+ content: "\f284"
+}
+.ion-md-arrow-dropright-circle:before {
+ content: "\f283"
+}
+.ion-md-arrow-dropup:before {
+ content: "\f286"
+}
+.ion-md-arrow-dropup-circle:before {
+ content: "\f285"
+}
+.ion-md-arrow-forward:before {
+ content: "\f287"
+}
+.ion-md-arrow-round-back:before {
+ content: "\f288"
+}
+.ion-md-arrow-round-down:before {
+ content: "\f289"
+}
+.ion-md-arrow-round-forward:before {
+ content: "\f28a"
+}
+.ion-md-arrow-round-up:before {
+ content: "\f28b"
+}
+.ion-md-arrow-up:before {
+ content: "\f28c"
+}
+.ion-md-at:before {
+ content: "\f28d"
+}
+.ion-md-attach:before {
+ content: "\f28e"
+}
+.ion-md-backspace:before {
+ content: "\f28f"
+}
+.ion-md-barcode:before {
+ content: "\f290"
+}
+.ion-md-baseball:before {
+ content: "\f291"
+}
+.ion-md-basket:before {
+ content: "\f292"
+}
+.ion-md-basketball:before {
+ content: "\f293"
+}
+.ion-md-battery-charging:before {
+ content: "\f294"
+}
+.ion-md-battery-dead:before {
+ content: "\f295"
+}
+.ion-md-battery-full:before {
+ content: "\f296"
+}
+.ion-md-beaker:before {
+ content: "\f297"
+}
+.ion-md-bed:before {
+ content: "\f160"
+}
+.ion-md-beer:before {
+ content: "\f298"
+}
+.ion-md-bicycle:before {
+ content: "\f299"
+}
+.ion-md-bluetooth:before {
+ content: "\f29a"
+}
+.ion-md-boat:before {
+ content: "\f29b"
+}
+.ion-md-body:before {
+ content: "\f29c"
+}
+.ion-md-bonfire:before {
+ content: "\f29d"
+}
+.ion-md-book:before {
+ content: "\f29e"
+}
+.ion-md-bookmark:before {
+ content: "\f29f"
+}
+.ion-md-bookmarks:before {
+ content: "\f2a0"
+}
+.ion-md-bowtie:before {
+ content: "\f2a1"
+}
+.ion-md-briefcase:before {
+ content: "\f2a2"
+}
+.ion-md-browsers:before {
+ content: "\f2a3"
+}
+.ion-md-brush:before {
+ content: "\f2a4"
+}
+.ion-md-bug:before {
+ content: "\f2a5"
+}
+.ion-md-build:before {
+ content: "\f2a6"
+}
+.ion-md-bulb:before {
+ content: "\f2a7"
+}
+.ion-md-bus:before {
+ content: "\f2a8"
+}
+.ion-md-business:before {
+ content: "\f1a4"
+}
+.ion-md-cafe:before {
+ content: "\f2a9"
+}
+.ion-md-calculator:before {
+ content: "\f2aa"
+}
+.ion-md-calendar:before {
+ content: "\f2ab"
+}
+.ion-md-call:before {
+ content: "\f2ac"
+}
+.ion-md-camera:before {
+ content: "\f2ad"
+}
+.ion-md-car:before {
+ content: "\f2b2"
+}
+.ion-md-card:before {
+ content: "\f2b3"
+}
+.ion-md-cart:before {
+ content: "\f2b4"
+}
+.ion-md-cash:before {
+ content: "\f2b5"
+}
+.ion-md-cellular:before {
+ content: "\f164"
+}
+.ion-md-chatboxes:before {
+ content: "\f2b6"
+}
+.ion-md-chatbubbles:before {
+ content: "\f2b7"
+}
+.ion-md-checkbox:before {
+ content: "\f2b9"
+}
+.ion-md-checkbox-outline:before {
+ content: "\f2b8"
+}
+.ion-md-checkmark:before {
+ content: "\f2bc"
+}
+.ion-md-checkmark-circle:before {
+ content: "\f2bb"
+}
+.ion-md-checkmark-circle-outline:before {
+ content: "\f2ba"
+}
+.ion-md-clipboard:before {
+ content: "\f2bd"
+}
+.ion-md-clock:before {
+ content: "\f2be"
+}
+.ion-md-close:before {
+ content: "\f2c0"
+}
+.ion-md-close-circle:before {
+ content: "\f2bf"
+}
+.ion-md-close-circle-outline:before {
+ content: "\f166"
+}
+.ion-md-cloud:before {
+ content: "\f2c9"
+}
+.ion-md-cloud-circle:before {
+ content: "\f2c2"
+}
+.ion-md-cloud-done:before {
+ content: "\f2c3"
+}
+.ion-md-cloud-download:before {
+ content: "\f2c6"
+}
+.ion-md-cloud-outline:before {
+ content: "\f2c7"
+}
+.ion-md-cloud-upload:before {
+ content: "\f2c8"
+}
+.ion-md-cloudy:before {
+ content: "\f2cb"
+}
+.ion-md-cloudy-night:before {
+ content: "\f2ca"
+}
+.ion-md-code:before {
+ content: "\f2ce"
+}
+.ion-md-code-download:before {
+ content: "\f2cc"
+}
+.ion-md-code-working:before {
+ content: "\f2cd"
+}
+.ion-md-cog:before {
+ content: "\f2cf"
+}
+.ion-md-color-fill:before {
+ content: "\f2d0"
+}
+.ion-md-color-filter:before {
+ content: "\f2d1"
+}
+.ion-md-color-palette:before {
+ content: "\f2d2"
+}
+.ion-md-color-wand:before {
+ content: "\f2d3"
+}
+.ion-md-compass:before {
+ content: "\f2d4"
+}
+.ion-md-construct:before {
+ content: "\f2d5"
+}
+.ion-md-contact:before {
+ content: "\f2d6"
+}
+.ion-md-contacts:before {
+ content: "\f2d7"
+}
+.ion-md-contract:before {
+ content: "\f2d8"
+}
+.ion-md-contrast:before {
+ content: "\f2d9"
+}
+.ion-md-copy:before {
+ content: "\f2da"
+}
+.ion-md-create:before {
+ content: "\f2db"
+}
+.ion-md-crop:before {
+ content: "\f2dc"
+}
+.ion-md-cube:before {
+ content: "\f2dd"
+}
+.ion-md-cut:before {
+ content: "\f2de"
+}
+.ion-md-desktop:before {
+ content: "\f2df"
+}
+.ion-md-disc:before {
+ content: "\f2e0"
+}
+.ion-md-document:before {
+ content: "\f2e1"
+}
+.ion-md-done-all:before {
+ content: "\f2e2"
+}
+.ion-md-download:before {
+ content: "\f2e3"
+}
+.ion-md-easel:before {
+ content: "\f2e4"
+}
+.ion-md-egg:before {
+ content: "\f2e5"
+}
+.ion-md-exit:before {
+ content: "\f2e6"
+}
+.ion-md-expand:before {
+ content: "\f2e7"
+}
+.ion-md-eye:before {
+ content: "\f2e9"
+}
+.ion-md-eye-off:before {
+ content: "\f2e8"
+}
+.ion-md-fastforward:before {
+ content: "\f2ea"
+}
+.ion-md-female:before {
+ content: "\f2eb"
+}
+.ion-md-filing:before {
+ content: "\f2ec"
+}
+.ion-md-film:before {
+ content: "\f2ed"
+}
+.ion-md-finger-print:before {
+ content: "\f2ee"
+}
+.ion-md-fitness:before {
+ content: "\f1ac"
+}
+.ion-md-flag:before {
+ content: "\f2ef"
+}
+.ion-md-flame:before {
+ content: "\f2f0"
+}
+.ion-md-flash:before {
+ content: "\f2f1"
+}
+.ion-md-flash-off:before {
+ content: "\f169"
+}
+.ion-md-flashlight:before {
+ content: "\f16b"
+}
+.ion-md-flask:before {
+ content: "\f2f2"
+}
+.ion-md-flower:before {
+ content: "\f2f3"
+}
+.ion-md-folder:before {
+ content: "\f2f5"
+}
+.ion-md-folder-open:before {
+ content: "\f2f4"
+}
+.ion-md-football:before {
+ content: "\f2f6"
+}
+.ion-md-funnel:before {
+ content: "\f2f7"
+}
+.ion-md-gift:before {
+ content: "\f199"
+}
+.ion-md-git-branch:before {
+ content: "\f2fa"
+}
+.ion-md-git-commit:before {
+ content: "\f2fb"
+}
+.ion-md-git-compare:before {
+ content: "\f2fc"
+}
+.ion-md-git-merge:before {
+ content: "\f2fd"
+}
+.ion-md-git-network:before {
+ content: "\f2fe"
+}
+.ion-md-git-pull-request:before {
+ content: "\f2ff"
+}
+.ion-md-glasses:before {
+ content: "\f300"
+}
+.ion-md-globe:before {
+ content: "\f301"
+}
+.ion-md-grid:before {
+ content: "\f302"
+}
+.ion-md-hammer:before {
+ content: "\f303"
+}
+.ion-md-hand:before {
+ content: "\f304"
+}
+.ion-md-happy:before {
+ content: "\f305"
+}
+.ion-md-headset:before {
+ content: "\f306"
+}
+.ion-md-heart:before {
+ content: "\f308"
+}
+.ion-md-heart-dislike:before {
+ content: "\f167"
+}
+.ion-md-heart-empty:before {
+ content: "\f1a1"
+}
+.ion-md-heart-half:before {
+ content: "\f1a2"
+}
+.ion-md-help:before {
+ content: "\f30b"
+}
+.ion-md-help-buoy:before {
+ content: "\f309"
+}
+.ion-md-help-circle:before {
+ content: "\f30a"
+}
+.ion-md-help-circle-outline:before {
+ content: "\f16d"
+}
+.ion-md-home:before {
+ content: "\f30c"
+}
+.ion-md-hourglass:before {
+ content: "\f111"
+}
+.ion-md-ice-cream:before {
+ content: "\f30d"
+}
+.ion-md-image:before {
+ content: "\f30e"
+}
+.ion-md-images:before {
+ content: "\f30f"
+}
+.ion-md-infinite:before {
+ content: "\f310"
+}
+.ion-md-information:before {
+ content: "\f312"
+}
+.ion-md-information-circle:before {
+ content: "\f311"
+}
+.ion-md-information-circle-outline:before {
+ content: "\f16f"
+}
+.ion-md-jet:before {
+ content: "\f315"
+}
+.ion-md-journal:before {
+ content: "\f18d"
+}
+.ion-md-key:before {
+ content: "\f316"
+}
+.ion-md-keypad:before {
+ content: "\f317"
+}
+.ion-md-laptop:before {
+ content: "\f318"
+}
+.ion-md-leaf:before {
+ content: "\f319"
+}
+.ion-md-link:before {
+ content: "\f22e"
+}
+.ion-md-list:before {
+ content: "\f31b"
+}
+.ion-md-list-box:before {
+ content: "\f31a"
+}
+.ion-md-locate:before {
+ content: "\f31c"
+}
+.ion-md-lock:before {
+ content: "\f31d"
+}
+.ion-md-log-in:before {
+ content: "\f31e"
+}
+.ion-md-log-out:before {
+ content: "\f31f"
+}
+.ion-md-magnet:before {
+ content: "\f320"
+}
+.ion-md-mail:before {
+ content: "\f322"
+}
+.ion-md-mail-open:before {
+ content: "\f321"
+}
+.ion-md-mail-unread:before {
+ content: "\f172"
+}
+.ion-md-male:before {
+ content: "\f323"
+}
+.ion-md-man:before {
+ content: "\f324"
+}
+.ion-md-map:before {
+ content: "\f325"
+}
+.ion-md-medal:before {
+ content: "\f326"
+}
+.ion-md-medical:before {
+ content: "\f327"
+}
+.ion-md-medkit:before {
+ content: "\f328"
+}
+.ion-md-megaphone:before {
+ content: "\f329"
+}
+.ion-md-menu:before {
+ content: "\f32a"
+}
+.ion-md-mic:before {
+ content: "\f32c"
+}
+.ion-md-mic-off:before {
+ content: "\f32b"
+}
+.ion-md-microphone:before {
+ content: "\f32d"
+}
+.ion-md-moon:before {
+ content: "\f32e"
+}
+.ion-md-more:before {
+ content: "\f1c9"
+}
+.ion-md-move:before {
+ content: "\f331"
+}
+.ion-md-musical-note:before {
+ content: "\f332"
+}
+.ion-md-musical-notes:before {
+ content: "\f333"
+}
+.ion-md-navigate:before {
+ content: "\f334"
+}
+.ion-md-notifications:before {
+ content: "\f338"
+}
+.ion-md-notifications-off:before {
+ content: "\f336"
+}
+.ion-md-notifications-outline:before {
+ content: "\f337"
+}
+.ion-md-nuclear:before {
+ content: "\f339"
+}
+.ion-md-nutrition:before {
+ content: "\f33a"
+}
+.ion-md-open:before {
+ content: "\f33b"
+}
+.ion-md-options:before {
+ content: "\f33c"
+}
+.ion-md-outlet:before {
+ content: "\f33d"
+}
+.ion-md-paper:before {
+ content: "\f33f"
+}
+.ion-md-paper-plane:before {
+ content: "\f33e"
+}
+.ion-md-partly-sunny:before {
+ content: "\f340"
+}
+.ion-md-pause:before {
+ content: "\f341"
+}
+.ion-md-paw:before {
+ content: "\f342"
+}
+.ion-md-people:before {
+ content: "\f343"
+}
+.ion-md-person:before {
+ content: "\f345"
+}
+.ion-md-person-add:before {
+ content: "\f344"
+}
+.ion-md-phone-landscape:before {
+ content: "\f346"
+}
+.ion-md-phone-portrait:before {
+ content: "\f347"
+}
+.ion-md-photos:before {
+ content: "\f348"
+}
+.ion-md-pie:before {
+ content: "\f349"
+}
+.ion-md-pin:before {
+ content: "\f34a"
+}
+.ion-md-pint:before {
+ content: "\f34b"
+}
+.ion-md-pizza:before {
+ content: "\f354"
+}
+.ion-md-planet:before {
+ content: "\f356"
+}
+.ion-md-play:before {
+ content: "\f357"
+}
+.ion-md-play-circle:before {
+ content: "\f174"
+}
+.ion-md-podium:before {
+ content: "\f358"
+}
+.ion-md-power:before {
+ content: "\f359"
+}
+.ion-md-pricetag:before {
+ content: "\f35a"
+}
+.ion-md-pricetags:before {
+ content: "\f35b"
+}
+.ion-md-print:before {
+ content: "\f35c"
+}
+.ion-md-pulse:before {
+ content: "\f35d"
+}
+.ion-md-qr-scanner:before {
+ content: "\f35e"
+}
+.ion-md-quote:before {
+ content: "\f35f"
+}
+.ion-md-radio:before {
+ content: "\f362"
+}
+.ion-md-radio-button-off:before {
+ content: "\f360"
+}
+.ion-md-radio-button-on:before {
+ content: "\f361"
+}
+.ion-md-rainy:before {
+ content: "\f363"
+}
+.ion-md-recording:before {
+ content: "\f364"
+}
+.ion-md-redo:before {
+ content: "\f365"
+}
+.ion-md-refresh:before {
+ content: "\f366"
+}
+.ion-md-refresh-circle:before {
+ content: "\f228"
+}
+.ion-md-remove:before {
+ content: "\f368"
+}
+.ion-md-remove-circle:before {
+ content: "\f367"
+}
+.ion-md-remove-circle-outline:before {
+ content: "\f176"
+}
+.ion-md-reorder:before {
+ content: "\f369"
+}
+.ion-md-repeat:before {
+ content: "\f36a"
+}
+.ion-md-resize:before {
+ content: "\f36b"
+}
+.ion-md-restaurant:before {
+ content: "\f36c"
+}
+.ion-md-return-left:before {
+ content: "\f36d"
+}
+.ion-md-return-right:before {
+ content: "\f36e"
+}
+.ion-md-reverse-camera:before {
+ content: "\f36f"
+}
+.ion-md-rewind:before {
+ content: "\f370"
+}
+.ion-md-ribbon:before {
+ content: "\f371"
+}
+.ion-md-rocket:before {
+ content: "\f179"
+}
+.ion-md-rose:before {
+ content: "\f372"
+}
+.ion-md-sad:before {
+ content: "\f373"
+}
+.ion-md-save:before {
+ content: "\f1a9"
+}
+.ion-md-school:before {
+ content: "\f374"
+}
+.ion-md-search:before {
+ content: "\f375"
+}
+.ion-md-send:before {
+ content: "\f376"
+}
+.ion-md-settings:before {
+ content: "\f377"
+}
+.ion-md-share:before {
+ content: "\f379"
+}
+.ion-md-share-alt:before {
+ content: "\f378"
+}
+.ion-md-shirt:before {
+ content: "\f37a"
+}
+.ion-md-shuffle:before {
+ content: "\f37b"
+}
+.ion-md-skip-backward:before {
+ content: "\f37c"
+}
+.ion-md-skip-forward:before {
+ content: "\f37d"
+}
+.ion-md-snow:before {
+ content: "\f37e"
+}
+.ion-md-speedometer:before {
+ content: "\f37f"
+}
+.ion-md-square:before {
+ content: "\f381"
+}
+.ion-md-square-outline:before {
+ content: "\f380"
+}
+.ion-md-star:before {
+ content: "\f384"
+}
+.ion-md-star-half:before {
+ content: "\f382"
+}
+.ion-md-star-outline:before {
+ content: "\f383"
+}
+.ion-md-stats:before {
+ content: "\f385"
+}
+.ion-md-stopwatch:before {
+ content: "\f386"
+}
+.ion-md-subway:before {
+ content: "\f387"
+}
+.ion-md-sunny:before {
+ content: "\f388"
+}
+.ion-md-swap:before {
+ content: "\f389"
+}
+.ion-md-switch:before {
+ content: "\f38a"
+}
+.ion-md-sync:before {
+ content: "\f38b"
+}
+.ion-md-tablet-landscape:before {
+ content: "\f38c"
+}
+.ion-md-tablet-portrait:before {
+ content: "\f38d"
+}
+.ion-md-tennisball:before {
+ content: "\f38e"
+}
+.ion-md-text:before {
+ content: "\f38f"
+}
+.ion-md-thermometer:before {
+ content: "\f390"
+}
+.ion-md-thumbs-down:before {
+ content: "\f391"
+}
+.ion-md-thumbs-up:before {
+ content: "\f392"
+}
+.ion-md-thunderstorm:before {
+ content: "\f393"
+}
+.ion-md-time:before {
+ content: "\f394"
+}
+.ion-md-timer:before {
+ content: "\f395"
+}
+.ion-md-today:before {
+ content: "\f17d"
+}
+.ion-md-train:before {
+ content: "\f396"
+}
+.ion-md-transgender:before {
+ content: "\f397"
+}
+.ion-md-trash:before {
+ content: "\f398"
+}
+.ion-md-trending-down:before {
+ content: "\f399"
+}
+.ion-md-trending-up:before {
+ content: "\f39a"
+}
+.ion-md-trophy:before {
+ content: "\f39b"
+}
+.ion-md-tv:before {
+ content: "\f17f"
+}
+.ion-md-umbrella:before {
+ content: "\f39c"
+}
+.ion-md-undo:before {
+ content: "\f39d"
+}
+.ion-md-unlock:before {
+ content: "\f39e"
+}
+.ion-md-videocam:before {
+ content: "\f39f"
+}
+.ion-md-volume-high:before {
+ content: "\f123"
+}
+.ion-md-volume-low:before {
+ content: "\f131"
+}
+.ion-md-volume-mute:before {
+ content: "\f3a1"
+}
+.ion-md-volume-off:before {
+ content: "\f3a2"
+}
+.ion-md-walk:before {
+ content: "\f3a4"
+}
+.ion-md-wallet:before {
+ content: "\f18f"
+}
+.ion-md-warning:before {
+ content: "\f3a5"
+}
+.ion-md-watch:before {
+ content: "\f3a6"
+}
+.ion-md-water:before {
+ content: "\f3a7"
+}
+.ion-md-wifi:before {
+ content: "\f3a8"
+}
+.ion-md-wine:before {
+ content: "\f3a9"
+}
+.ion-md-woman:before {
+ content: "\f3aa"
+}
\ No newline at end of file
diff --git a/components/image/index.js b/components/image/index.js
new file mode 100644
index 0000000..7d596dd
--- /dev/null
+++ b/components/image/index.js
@@ -0,0 +1,153 @@
+import baseComponent from '../helpers/baseComponent'
+import classNames from '../helpers/classNames'
+
+const EMPTY = 'empty'
+const LOADING = 'loading'
+const LOADED = 'loaded'
+const ERROR = 'error'
+const UNMOUNTED = 'unmounted'
+
+const calcStyle = (value) => typeof value === 'number' ? `${value}px` : value
+
+baseComponent({
+ properties: {
+ prefixCls: {
+ type: String,
+ value: 'wux-image',
+ },
+ src: {
+ type: String,
+ value: '',
+ },
+ mode: {
+ type: String,
+ value: 'aspectFill',
+ },
+ lazyLoad: {
+ type: Boolean,
+ value: true,
+ },
+ shape: {
+ type: String,
+ value: 'normal',
+ },
+ width: {
+ type: null,
+ value: 300,
+ },
+ height: {
+ type: null,
+ value: 225,
+ },
+ unmountOnEmpty: {
+ type: Boolean,
+ value: false,
+ },
+ unmountOnError: {
+ type: Boolean,
+ value: false,
+ },
+ empty: {
+ type: String,
+ value: '',
+ },
+ loading: {
+ type: String,
+ value: '',
+ },
+ error: {
+ type: String,
+ value: '',
+ },
+ },
+ data: {
+ status: '',
+ },
+ computed: {
+ classes: ['prefixCls, shape, mode, status, empty, loading, error', function(prefixCls, shape, mode, status, empty, loading, error) {
+ const wrap = classNames(prefixCls, {
+ [`${prefixCls}--${shape}`]: shape,
+ [`${prefixCls}--${mode}`]: mode,
+ [`${prefixCls}--${status}`]: status,
+ })
+ const inner = `${prefixCls}__inner`
+ const thumb = `${prefixCls}__thumb`
+ const mask = classNames(`${prefixCls}__mask`, {
+ [`${prefixCls}__mask--text`]: empty || loading || error,
+ })
+ const text = `${prefixCls}__text`
+
+ return {
+ wrap,
+ inner,
+ thumb,
+ mask,
+ text,
+ }
+ }],
+ },
+ observers: {
+ src(newVal) {
+ this.updated(newVal)
+ },
+ ['width, height'](...args) {
+ this.updateStyle(...args)
+ },
+ },
+ methods: {
+ /**
+ * 更新资源地址
+ */
+ updated(src) {
+ this.updateStatus(!!src ? LOADING : this.data.unmountOnEmpty ? UNMOUNTED : EMPTY)
+ },
+ /**
+ * 更新组件样式
+ */
+ updateStyle(width, height) {
+ const style = `width: ${calcStyle(width)}; height: ${calcStyle(height)}`
+
+ this.setData({
+ style,
+ })
+ },
+ /**
+ * 更新组件状态
+ */
+ updateStatus(status) {
+ if (this.data.status !== status) {
+ this.setData({
+ status,
+ })
+ }
+
+ this.triggerEvent('change', { status })
+ },
+ /**
+ * 资源加载完成时的回调函数
+ */
+ onLoad(e) {
+ this.updateStatus(LOADED)
+ this.triggerEvent('load', { ...e.detail, status: LOADED })
+ },
+ /**
+ * 资源加载失败时的回调函数
+ */
+ onError(e) {
+ const status = this.data.unmountOnError ? UNMOUNTED : ERROR
+ this.updateStatus(status)
+ this.triggerEvent('error', { ...e.detail, status })
+ },
+ /**
+ * 点击事件
+ */
+ onTap(e) {
+ this.triggerEvent('click', { ...e.detail, status: this.data.status })
+ },
+ },
+ attached() {
+ const { width, height, src } = this.data
+ this.updateStyle(width, height)
+ this.updated(src)
+ },
+})
diff --git a/components/image/index.json b/components/image/index.json
new file mode 100644
index 0000000..fba482a
--- /dev/null
+++ b/components/image/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
\ No newline at end of file
diff --git a/components/image/index.wxml b/components/image/index.wxml
new file mode 100644
index 0000000..46eca3b
--- /dev/null
+++ b/components/image/index.wxml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+ {{ empty }}
+
+
+
+
+
+ {{ loading }}
+
+
+
+
+
+ {{ error }}
+
+
+
+
+
\ No newline at end of file
diff --git a/components/image/index.wxss b/components/image/index.wxss
new file mode 100644
index 0000000..026bb82
--- /dev/null
+++ b/components/image/index.wxss
@@ -0,0 +1,87 @@
+.wux-image {
+ position: relative;
+ overflow: hidden;
+ display: -ms-flexbox;
+ display: flex;
+ box-sizing: border-box
+}
+.wux-image--rounded {
+ border-radius: 8rpx
+}
+.wux-image--circle {
+ border-radius: 50%
+}
+.wux-image--thumbnail {
+ background-color: #fff;
+ border-radius: 8rpx
+}
+.wux-image--thumbnail:after {
+ content: " ";
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 200%;
+ height: 200%;
+ transform: scale(.5);
+ transform-origin: 0 0;
+ pointer-events: none;
+ box-sizing: border-box;
+ border: 0 solid #d9d9d9;
+ border-width: 2rpx;
+ border-radius: 16rpx
+}
+.wux-image--thumbnail .wux-image__inner,
+.wux-image--thumbnail .wux-image__mask {
+ top: 8rpx;
+ right: 8rpx;
+ bottom: 8rpx;
+ left: 8rpx;
+ width: calc(100% - 16rpx)!important;
+ height: calc(100% - 16rpx)!important
+}
+.wux-image--widthFix .wux-image__inner {
+ position: relative
+}
+.wux-image image,
+.wux-image__thumb {
+ display: inline-block;
+ overflow: hidden;
+ width: 100%;
+ height: 100%;
+ vertical-align: middle
+}
+.wux-image__inner {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 10;
+ width: 100%;
+ height: 100%;
+ opacity: 0
+}
+.wux-image--loaded .wux-image__inner {
+ opacity: 1
+}
+.wux-image__mask {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 20
+}
+.wux-image__mask--text {
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-align: center;
+ align-items: center;
+ -ms-flex-pack: center;
+ justify-content: center
+}
+.wux-image__text {
+ color: #373a3c;
+ text-align: center;
+ padding: 20rpx
+}
\ No newline at end of file
diff --git a/components/index.js b/components/index.js
new file mode 100644
index 0000000..9d91fcf
--- /dev/null
+++ b/components/index.js
@@ -0,0 +1,20 @@
+/**
+ * 使用选择器选择组件实例节点,返回匹配到的第一个组件实例对象
+ * @param {String} selector 节点选择器
+ * @param {Object} ctx 页面栈或组件的实例,默认为当前页面栈实例
+ */
+const getCtx = (selector, ctx = getCurrentPages()[getCurrentPages().length - 1]) => {
+ const componentCtx = ctx.selectComponent(selector)
+ if (!componentCtx) {
+ throw new Error('无法找到对应的组件,请按文档说明使用组件')
+ }
+ return componentCtx
+}
+
+const $wuxBackdrop = (selector = '#wux-backdrop', ctx) => getCtx(selector, ctx)
+const $wuxDialog = (selector = '#wux-dialog', ctx) => getCtx(selector, ctx)
+
+export {
+ $wuxBackdrop,
+ $wuxDialog
+}
diff --git a/components/input-number/index.js b/components/input-number/index.js
new file mode 100644
index 0000000..9262d2b
--- /dev/null
+++ b/components/input-number/index.js
@@ -0,0 +1,287 @@
+import baseComponent from '../helpers/baseComponent'
+import classNames from '../helpers/classNames'
+import eventsMixin from '../helpers/eventsMixin'
+import NP from './utils'
+
+const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || Math.pow(2, 53) - 1
+
+const toNumberWhenUserInput = (num) => {
+ if (/\.\d*0$/.test(num) || num.length > 16) {
+ return num
+ }
+
+ if (isNaN(num)) {
+ return num
+ }
+
+ return Number(num)
+}
+
+const getValidValue = (value, min, max) => {
+ let val = parseFloat(value)
+
+ if (isNaN(val)) {
+ return value
+ }
+
+ if (val < min) {
+ val = min
+ }
+
+ if (val > max) {
+ val = max
+ }
+
+ return val
+}
+
+const defaultEvents = {
+ onChange() {},
+ onFocus() {},
+ onBlur() {},
+}
+
+baseComponent({
+ behaviors: [eventsMixin({ defaultEvents })],
+ externalClasses: ['wux-sub-class', 'wux-input-class', 'wux-add-class'],
+ relations: {
+ '../field/index': {
+ type: 'ancestor',
+ },
+ },
+ properties: {
+ prefixCls: {
+ type: String,
+ value: 'wux-input-number',
+ },
+ shape: {
+ type: String,
+ value: 'square',
+ },
+ min: {
+ type: Number,
+ value: -MAX_SAFE_INTEGER,
+ },
+ max: {
+ type: Number,
+ value: MAX_SAFE_INTEGER,
+ },
+ step: {
+ type: Number,
+ value: 1,
+ },
+ defaultValue: {
+ type: Number,
+ value: 0,
+ },
+ value: {
+ type: Number,
+ value: 0,
+ },
+ disabled: {
+ type: Boolean,
+ value: true,
+ },
+ longpress: {
+ type: Boolean,
+ value: false,
+ },
+ color: {
+ type: String,
+ value: 'balanced',
+ },
+ controlled: {
+ type: Boolean,
+ value: false,
+ },
+ },
+ data: {
+ inputValue: 0,
+ disabledMin: false,
+ disabledMax: false,
+ },
+ computed: {
+ classes: ['prefixCls, shape, color, disabledMin, disabledMax', function(prefixCls, shape, color, disabledMin, disabledMax) {
+ const wrap = classNames(prefixCls, {
+ [`${prefixCls}--${shape}`]: shape,
+ })
+ const sub = classNames(`${prefixCls}__selector`, {
+ [`${prefixCls}__selector--sub`]: true,
+ [`${prefixCls}__selector--${color}`]: color,
+ [`${prefixCls}__selector--disabled`]: disabledMin,
+ })
+ const add = classNames(`${prefixCls}__selector`, {
+ [`${prefixCls}__selector--add`]: true,
+ [`${prefixCls}__selector--${color}`]: color,
+ [`${prefixCls}__selector--disabled`]: disabledMax,
+ })
+ const icon = `${prefixCls}__icon`
+ const input = `${prefixCls}__input`
+
+ return {
+ wrap,
+ sub,
+ add,
+ icon,
+ input,
+ }
+ }],
+ },
+ observers: {
+ value(newVal) {
+ if (this.data.controlled) {
+ this.setValue(newVal, false)
+ }
+ },
+ 'inputValue, min, max'(inputValue, min, max) {
+ const disabledMin = inputValue <= min
+ const disabledMax = inputValue >= max
+
+ this.setData({
+ disabledMin,
+ disabledMax,
+ })
+ },
+ },
+ methods: {
+ /**
+ * 更新值
+ */
+ updated(inputValue) {
+ if (this.hasFieldDecorator) return
+ if (this.data.inputValue !== inputValue) {
+ this.setData({ inputValue })
+ }
+ },
+ /**
+ * 设置值
+ */
+ setValue(value, runCallbacks = true) {
+ const { min, max } = this.data
+ const inputValue = NP.strip(getValidValue(value, min, max))
+
+ this.updated(inputValue)
+
+ if (runCallbacks) {
+ this.triggerEvent('change', { value: inputValue })
+ }
+ },
+ /**
+ * 数字计算函数
+ */
+ calculation(type, isLoop) {
+ const {
+ disabledMax,
+ disabledMin,
+ inputValue,
+ step,
+ longpress,
+ controlled,
+ } = this.data
+
+ // add
+ if (type === 'add') {
+ if (disabledMax) return
+ this.setValue(NP.plus(inputValue, step))
+ }
+
+ // sub
+ if (type === 'sub') {
+ if (disabledMin) return
+ this.setValue(NP.minus(inputValue, step))
+ }
+
+ // longpress
+ if (longpress && isLoop) {
+ this.timeout = setTimeout(() => this.calculation(type, isLoop), 100)
+ }
+ },
+ /**
+ * 当键盘输入时,触发 input 事件
+ */
+ onInput(e) {
+ this.clearInputTimer()
+ this.inputTime = setTimeout(() => {
+ const value = toNumberWhenUserInput(e.detail.value)
+ this.setValue(value)
+ }, 300)
+ },
+ /**
+ * 输入框聚焦时触发
+ */
+ onFocus(e) {
+ this.triggerEvent('focus', e.detail)
+ },
+ /**
+ * 输入框失去焦点时触发
+ */
+ onBlur(e) {
+ // always set input value same as value
+ this.setData({
+ inputValue: this.data.inputValue,
+ })
+
+ this.triggerEvent('blur', e.detail)
+ },
+ /**
+ * 手指触摸后,超过350ms再离开
+ */
+ onLongpress(e) {
+ const { type } = e.currentTarget.dataset
+ const { longpress } = this.data
+ if (longpress) {
+ this.calculation(type, true)
+ }
+ },
+ /**
+ * 手指触摸后马上离开
+ */
+ onTap(e) {
+ const { type } = e.currentTarget.dataset
+ const { longpress } = this.data
+ if (!longpress || longpress && !this.timeout) {
+ this.calculation(type, false)
+ }
+ },
+ /**
+ * 手指触摸动作结束
+ */
+ onTouchEnd() {
+ this.clearTimer()
+ },
+ /**
+ * 手指触摸动作被打断,如来电提醒,弹窗
+ */
+ onTouchCancel() {
+ this.clearTimer()
+ },
+ /**
+ * 清除长按的定时器
+ */
+ clearTimer() {
+ if (this.timeout) {
+ clearTimeout(this.timeout)
+ this.timeout = null
+ }
+ },
+ /**
+ * 清除输入框的定时器
+ */
+ clearInputTimer() {
+ if (this.inputTime) {
+ clearTimeout(this.inputTime)
+ this.inputTime = null
+ }
+ },
+ },
+ attached() {
+ const { defaultValue, value, controlled } = this.data
+ const inputValue = controlled ? value : defaultValue
+
+ this.setValue(inputValue, false)
+ },
+ detached() {
+ this.clearTimer()
+ this.clearInputTimer()
+ },
+})
diff --git a/components/input-number/index.json b/components/input-number/index.json
new file mode 100644
index 0000000..6505d1c
--- /dev/null
+++ b/components/input-number/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "wux-icon": "../icon/index"
+ }
+}
\ No newline at end of file
diff --git a/components/input-number/index.wxml b/components/input-number/index.wxml
new file mode 100644
index 0000000..b2d6580
--- /dev/null
+++ b/components/input-number/index.wxml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/input-number/index.wxss b/components/input-number/index.wxss
new file mode 100644
index 0000000..4a5c4af
--- /dev/null
+++ b/components/input-number/index.wxss
@@ -0,0 +1,118 @@
+.wux-input-number {
+ position: relative;
+ display: -ms-flexbox;
+ display: flex
+}
+.wux-input-number__input {
+ width: 96rpx;
+ height: 52rpx;
+ font-size: 32rpx;
+ line-height: 52rpx;
+ color: #666;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ border: 2rpx solid #ececec;
+ padding: 6rpx 0;
+ text-align: center;
+ min-height: inherit;
+ box-sizing: border-box
+}
+.wux-input-number__selector {
+ width: 68rpx;
+ height: 52rpx;
+ font-size: 48rpx;
+ line-height: 52rpx;
+ color: #33cd5f;
+ border: 2rpx solid #ececec;
+ box-sizing: border-box;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-align: center;
+ align-items: center;
+ -ms-flex-pack: center;
+ justify-content: center
+}
+.wux-input-number__selector--disabled {
+ color: #ccc!important
+}
+.wux-input-number__selector--sub {
+ border-right: none;
+ padding: 6rpx 20rpx;
+ border-radius: 4rpx 0 0 4rpx
+}
+.wux-input-number__selector--add {
+ border-left: none;
+ padding: 6rpx 16rpx;
+ border-radius: 0 4rpx 4rpx 0
+}
+.wux-input-number__icon {
+ font-size: inherit!important;
+ vertical-align: middle;
+ line-height: inherit
+}
+.wux-input-number--circle .wux-input-number__input {
+ border-color: transparent
+}
+.wux-input-number--circle .wux-input-number__selector {
+ width: 52rpx;
+ border-radius: 50%;
+ border: 2rpx solid #33cd5f
+}
+.wux-input-number--circle .wux-input-number__selector--disabled {
+ border-color: #ccc!important
+}
+.wux-input-number .wux-input-number__selector--light {
+ color: #ddd
+}
+.wux-input-number--circle .wux-input-number__selector--light {
+ border-color: #ddd
+}
+.wux-input-number .wux-input-number__selector--stable {
+ color: #b2b2b2
+}
+.wux-input-number--circle .wux-input-number__selector--stable {
+ border-color: #b2b2b2
+}
+.wux-input-number .wux-input-number__selector--positive {
+ color: #387ef5
+}
+.wux-input-number--circle .wux-input-number__selector--positive {
+ border-color: #387ef5
+}
+.wux-input-number .wux-input-number__selector--calm {
+ color: #11c1f3
+}
+.wux-input-number--circle .wux-input-number__selector--calm {
+ border-color: #11c1f3
+}
+.wux-input-number .wux-input-number__selector--assertive {
+ color: #ef473a
+}
+.wux-input-number--circle .wux-input-number__selector--assertive {
+ border-color: #ef473a
+}
+.wux-input-number .wux-input-number__selector--balanced {
+ color: #33cd5f
+}
+.wux-input-number--circle .wux-input-number__selector--balanced {
+ border-color: #33cd5f
+}
+.wux-input-number .wux-input-number__selector--energized {
+ color: #ffc900
+}
+.wux-input-number--circle .wux-input-number__selector--energized {
+ border-color: #ffc900
+}
+.wux-input-number .wux-input-number__selector--royal {
+ color: #886aea
+}
+.wux-input-number--circle .wux-input-number__selector--royal {
+ border-color: #886aea
+}
+.wux-input-number .wux-input-number__selector--dark {
+ color: #444
+}
+.wux-input-number--circle .wux-input-number__selector--dark {
+ border-color: #444
+}
\ No newline at end of file
diff --git a/components/input-number/utils.js b/components/input-number/utils.js
new file mode 100644
index 0000000..4b0ae76
--- /dev/null
+++ b/components/input-number/utils.js
@@ -0,0 +1,135 @@
+/**
+ * https://github.com/nefe/number-precision
+ */
+
+'use strict';
+
+Object.defineProperty(exports, '__esModule', { value: true });
+
+/**
+ * @desc 解决浮动运算问题,避免小数点后产生多位数和计算精度损失。
+ * 问题示例:2.3 + 2.4 = 4.699999999999999,1.0 - 0.9 = 0.09999999999999998
+ */
+/**
+ * 把错误的数据转正
+ * strip(0.09999999999999998)=0.1
+ */
+function strip(num, precision) {
+ if (precision === void 0) { precision = 12; }
+ return +parseFloat(num.toPrecision(precision));
+}
+/**
+ * Return digits length of a number
+ * @param {*number} num Input number
+ */
+function digitLength(num) {
+ // Get digit length of e
+ var eSplit = num.toString().split(/[eE]/);
+ var len = (eSplit[0].split('.')[1] || '').length - (+(eSplit[1] || 0));
+ return len > 0 ? len : 0;
+}
+/**
+ * 把小数转成整数,支持科学计数法。如果是小数则放大成整数
+ * @param {*number} num 输入数
+ */
+function float2Fixed(num) {
+ if (num.toString().indexOf('e') === -1) {
+ return Number(num.toString().replace('.', ''));
+ }
+ var dLen = digitLength(num);
+ return dLen > 0 ? strip(num * Math.pow(10, dLen)) : num;
+}
+/**
+ * 检测数字是否越界,如果越界给出提示
+ * @param {*number} num 输入数
+ */
+function checkBoundary(num) {
+ if (_boundaryCheckingState) {
+ if (num > Number.MAX_SAFE_INTEGER || num < Number.MIN_SAFE_INTEGER) {
+ console.warn(num + " is beyond boundary when transfer to integer, the results may not be accurate");
+ }
+ }
+}
+/**
+ * 精确乘法
+ */
+function times(num1, num2) {
+ var others = [];
+ for (var _i = 2; _i < arguments.length; _i++) {
+ others[_i - 2] = arguments[_i];
+ }
+ if (others.length > 0) {
+ return times.apply(void 0, [times(num1, num2), others[0]].concat(others.slice(1)));
+ }
+ var num1Changed = float2Fixed(num1);
+ var num2Changed = float2Fixed(num2);
+ var baseNum = digitLength(num1) + digitLength(num2);
+ var leftValue = num1Changed * num2Changed;
+ checkBoundary(leftValue);
+ return leftValue / Math.pow(10, baseNum);
+}
+/**
+ * 精确加法
+ */
+function plus(num1, num2) {
+ var others = [];
+ for (var _i = 2; _i < arguments.length; _i++) {
+ others[_i - 2] = arguments[_i];
+ }
+ if (others.length > 0) {
+ return plus.apply(void 0, [plus(num1, num2), others[0]].concat(others.slice(1)));
+ }
+ var baseNum = Math.pow(10, Math.max(digitLength(num1), digitLength(num2)));
+ return (times(num1, baseNum) + times(num2, baseNum)) / baseNum;
+}
+/**
+ * 精确减法
+ */
+function minus(num1, num2) {
+ var others = [];
+ for (var _i = 2; _i < arguments.length; _i++) {
+ others[_i - 2] = arguments[_i];
+ }
+ if (others.length > 0) {
+ return minus.apply(void 0, [minus(num1, num2), others[0]].concat(others.slice(1)));
+ }
+ var baseNum = Math.pow(10, Math.max(digitLength(num1), digitLength(num2)));
+ return (times(num1, baseNum) - times(num2, baseNum)) / baseNum;
+}
+/**
+ * 精确除法
+ */
+function divide(num1, num2) {
+ var others = [];
+ for (var _i = 2; _i < arguments.length; _i++) {
+ others[_i - 2] = arguments[_i];
+ }
+ if (others.length > 0) {
+ return divide.apply(void 0, [divide(num1, num2), others[0]].concat(others.slice(1)));
+ }
+ var num1Changed = float2Fixed(num1);
+ var num2Changed = float2Fixed(num2);
+ checkBoundary(num1Changed);
+ checkBoundary(num2Changed);
+ return times((num1Changed / num2Changed), Math.pow(10, digitLength(num2) - digitLength(num1)));
+}
+/**
+ * 四舍五入
+ */
+function round(num, ratio) {
+ var base = Math.pow(10, ratio);
+ return divide(Math.round(times(num, base)), base);
+}
+var _boundaryCheckingState = true;
+/**
+ * 是否进行边界检查,默认开启
+ * @param flag 标记开关,true 为开启,false 为关闭,默认为 true
+ */
+function enableBoundaryChecking(flag) {
+ if (flag === void 0) { flag = true; }
+ _boundaryCheckingState = flag;
+}
+
+var index = { strip: strip, plus: plus, minus: minus, times: times, divide: divide, round: round, digitLength: digitLength, float2Fixed: float2Fixed, enableBoundaryChecking: enableBoundaryChecking };
+
+export default index;
diff --git a/components/password-box/index.js b/components/password-box/index.js
new file mode 100644
index 0000000..caf8421
--- /dev/null
+++ b/components/password-box/index.js
@@ -0,0 +1,78 @@
+// components/password-box.js
+Component({
+ /**
+ * 组件的属性列表
+ */
+ properties: {
+ // 输入框的数量
+ inputLength: {
+ type: Number,
+ value: 6
+ },
+ // 单个输入框的宽度
+ inputWidth: {
+ type: String,
+ value: '100rpx'
+ },
+ inputHeight: {
+ type: String,
+ value: '100rpx'
+ },
+ // 是否显示输入的值,默认隐藏
+ showValue: {
+ type: Boolean,
+ value: false
+ }
+ },
+
+ /**
+ * 组件的初始数据
+ */
+ data: {
+ // input是否获取焦点
+ inputFocus: false,
+ // 初始input值为空
+ currentValue: ''
+ },
+
+ /**
+ * 组件的方法列表
+ */
+ methods: {
+ // 设置当前的值
+ _setCurrentValue(e) {
+ // 在此处判断满6(inputLength)位,把值返回给上级父组件或页面
+ let currentValue = e.detail.value
+ // 改变时,派发一个事件,如果父组件或页面中需要实时获取改变后的值,可以监听这个事件。
+ this.triggerEvent('change', e.detail.value)
+
+ this.setData({
+ currentValue
+ })
+ if (currentValue.length >= this.data.inputLength) {
+ this._complate()
+ }
+ },
+ // 点击伪装的input时,让隐藏的input获得焦点
+ _focusInput() {
+ this.setData({
+ inputFocus: true
+ })
+ },
+ _complate() {
+ this.triggerEvent('inputComplate', this.data.currentValue)
+ },
+ // 提供给外部调用的方法,显示/隐藏密码。接收一个参数,可以显性修改展示的状态。
+ toggleValue(state) {
+ this.setData({
+ showValue: state != undefined ? state : !this.data.showValue
+ })
+ },
+ // 清除input当前的值
+ clearCurrentValue() {
+ this.setData({
+ currentValue: ''
+ })
+ }
+ }
+})
\ No newline at end of file
diff --git a/components/password-box/index.json b/components/password-box/index.json
new file mode 100644
index 0000000..e8cfaaf
--- /dev/null
+++ b/components/password-box/index.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/components/password-box/index.wxml b/components/password-box/index.wxml
new file mode 100644
index 0000000..92fc1d9
--- /dev/null
+++ b/components/password-box/index.wxml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+ {{currentValue.length>=index+1?currentValue[index]:''}}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/password-box/index.wxss b/components/password-box/index.wxss
new file mode 100644
index 0000000..c89997d
--- /dev/null
+++ b/components/password-box/index.wxss
@@ -0,0 +1,73 @@
+/* components/password-box.wxss */
+.password-box .password-wrapper {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+.password-box .password-item {
+ position: relative;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+.password-box .password-item::after {
+ display: block;
+ content: '';
+ position: absolute;
+ top: 0;
+ left: 0;
+ border-left: 2px solid #999;
+ border-top: 2px solid #999;
+ border-bottom: 2px solid #999;
+ border-spacing: 0;
+ box-sizing: border-box;
+ width: 200%;
+ height: 200%;
+ border-radius: 0rpx;
+ transform: scale(0.5);
+ transform-origin: left top;
+}
+
+.password-box .password-item-last {
+ position: relative;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+.password-box .password-item-last::after {
+ display: block;
+ content: '';
+ position: absolute;
+ top: 0;
+ left: 0;
+ border-left: 2px solid #999;
+ border-top: 2px solid #999;
+ border-right: 2px solid #999;
+ border-bottom: 2px solid #999;
+ border-spacing: 0;
+ box-sizing: border-box;
+ width: 200%;
+ height: 200%;
+ border-radius: 0rpx;
+ transform: scale(0.5);
+ transform-origin: left top;
+}
+
+.password-box .password-item + .password-item {
+ margin-left: -1rpx;
+}
+.password-box .password-wrapper .hidden {
+ width: 36rpx;
+ height: 36rpx;
+ border-radius: 50%;
+ background: #999;
+}
+.password-box .password-wrapper .show {
+ color: #333333;
+ font-size: 48rpx;
+}
+.password-box .hidden-input {
+ width: 0;
+ height: 0;
+ min-height: 0;
+}
\ No newline at end of file
diff --git a/components/popup/index.js b/components/popup/index.js
new file mode 100644
index 0000000..32a10b9
--- /dev/null
+++ b/components/popup/index.js
@@ -0,0 +1,193 @@
+import baseComponent from '../helpers/baseComponent'
+import classNames from '../helpers/classNames'
+import styleToCssString from '../helpers/styleToCssString'
+import { $wuxBackdrop } from '../../utils/index'
+
+baseComponent({
+ useSafeArea: true,
+ externalClasses: ['wux-content-class', 'wux-header-class', 'wux-body-class', 'wux-footer-class', 'wux-close-class'],
+ properties: {
+ prefixCls: {
+ type: String,
+ value: 'wux-popup',
+ },
+ animationPrefixCls: {
+ type: String,
+ value: 'wux-animate',
+ },
+ title: {
+ type: String,
+ value: '',
+ },
+ content: {
+ type: String,
+ value: '',
+ },
+ extra: {
+ type: String,
+ value: '',
+ },
+ position: {
+ type: String,
+ value: 'center',
+ observer: 'getTransitionName',
+ },
+ wrapStyle: {
+ type: [String, Object],
+ value: '',
+ observer(newVal) {
+ this.setData({
+ extStyle: styleToCssString(newVal),
+ })
+ },
+ },
+ closable: {
+ type: Boolean,
+ value: false,
+ },
+ mask: {
+ type: Boolean,
+ value: true,
+ },
+ maskClosable: {
+ type: Boolean,
+ value: true,
+ },
+ visible: {
+ type: Boolean,
+ value: false,
+ observer: 'setPopupVisible',
+ },
+ zIndex: {
+ type: Number,
+ value: 1000,
+ },
+ hasHeader: {
+ type: Boolean,
+ value: true,
+ },
+ hasFooter: {
+ type: Boolean,
+ value: true,
+ },
+ mountOnEnter: {
+ type: Boolean,
+ value: true,
+ },
+ unmountOnExit: {
+ type: Boolean,
+ value: true,
+ },
+ },
+ data: {
+ transitionName: '',
+ popupVisible: false,
+ extStyle: '',
+ },
+ computed: {
+ classes: ['prefixCls, position, safeAreaConfig, isIPhoneX', function(prefixCls, position, safeAreaConfig, isIPhoneX) {
+ const wrap = classNames(`${prefixCls}-position`, {
+ [`${prefixCls}-position--${position}`]: position,
+ [`${prefixCls}-position--is-iphonex`]: safeAreaConfig.bottom && isIPhoneX,
+ })
+ const content = `${prefixCls}__content`
+ const hd = `${prefixCls}__hd`
+ const title = `${prefixCls}__title`
+ const bd = `${prefixCls}__bd`
+ const ft = `${prefixCls}__ft`
+ const extra = `${prefixCls}__extra`
+ const close = `${prefixCls}__close`
+ const x = `${prefixCls}__close-x`
+
+ return {
+ wrap,
+ content,
+ hd,
+ title,
+ bd,
+ ft,
+ extra,
+ close,
+ x,
+ }
+ }],
+ },
+ methods: {
+ /**
+ * 点击关闭按钮事件
+ */
+ close() {
+ this.triggerEvent('close')
+ },
+ /**
+ * 点击蒙层事件
+ */
+ onMaskClick() {
+ if (this.data.maskClosable) {
+ this.close()
+ }
+ },
+ /**
+ * 组件关闭后的回调函数
+ */
+ onExited() {
+ this.triggerEvent('closed')
+ },
+ /**
+ * 获取过渡的类名
+ */
+ getTransitionName(value = this.data.position) {
+ const { animationPrefixCls } = this.data
+ let transitionName = ''
+
+ switch (value) {
+ case 'top':
+ transitionName = `${animationPrefixCls}--slideInDown`
+ break
+ case 'right':
+ transitionName = `${animationPrefixCls}--slideInRight`
+ break
+ case 'bottom':
+ transitionName = `${animationPrefixCls}--slideInUp`
+ break
+ case 'left':
+ transitionName = `${animationPrefixCls}--slideInLeft`
+ break
+ default:
+ transitionName = `${animationPrefixCls}--fadeIn`
+ break
+ }
+
+ this.setData({ transitionName })
+ },
+ /**
+ * 设置 popup 组件的显示隐藏
+ */
+ setPopupVisible(popupVisible) {
+ if (this.data.popupVisible !== popupVisible) {
+ this.setData({ popupVisible })
+ this.setBackdropVisible(popupVisible)
+ if(popupVisible){
+ this.triggerEvent('show')
+ }
+ }
+ },
+ /**
+ * 设置 backdrop 组件的显示隐藏
+ */
+ setBackdropVisible(visible) {
+ if (this.data.mask && this.$wuxBackdrop) {
+ this.$wuxBackdrop[visible ? 'retain' : 'release']()
+ }
+ },
+ },
+ created() {
+ if (this.data.mask) {
+ this.$wuxBackdrop = $wuxBackdrop('#wux-backdrop', this)
+ }
+ },
+ attached() {
+ this.setPopupVisible(this.data.visible)
+ this.getTransitionName()
+ },
+})
diff --git a/components/popup/index.json b/components/popup/index.json
new file mode 100644
index 0000000..34b34c1
--- /dev/null
+++ b/components/popup/index.json
@@ -0,0 +1,7 @@
+{
+ "component": true,
+ "usingComponents": {
+ "wux-animation-group": "../animation-group/index",
+ "wux-backdrop": "../backdrop/index"
+ }
+}
\ No newline at end of file
diff --git a/components/popup/index.wxml b/components/popup/index.wxml
new file mode 100644
index 0000000..cacb404
--- /dev/null
+++ b/components/popup/index.wxml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+ {{ content }}
+
+
+
+
+
+
+
+
+
diff --git a/components/popup/index.wxss b/components/popup/index.wxss
new file mode 100644
index 0000000..eaba04a
--- /dev/null
+++ b/components/popup/index.wxss
@@ -0,0 +1,114 @@
+.wux-popup {
+ position: fixed;
+ z-index: 1000;
+ width: 80%;
+ max-width: 600rpx
+}
+.wux-popup-position.wux-popup-position--center .wux-popup {
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%,-50%)
+}
+.wux-popup-position.wux-popup-position--center .wux-popup__content {
+ border-radius: 6rpx
+}
+.wux-popup-position.wux-popup-position--center .wux-popup__hd {
+ padding: 1.3em 1.6em .5em
+}
+.wux-popup-position.wux-popup-position--center .wux-popup__bd {
+ padding: 0 1.6em .8em
+}
+.wux-popup-position.wux-popup-position--center .wux-popup__ft:after {
+ content: " ";
+ position: absolute;
+ left: 0;
+ top: 0;
+ right: 0;
+ height: 2rpx;
+ border-top: 2rpx solid #d5d5d6;
+ color: #d5d5d6;
+ transform-origin: 0 0;
+ transform: scaleY(.5)
+}
+.wux-popup-position.wux-popup-position--top .wux-popup {
+ position: fixed;
+ left: 0;
+ top: 0;
+ width: 100%;
+ max-width: 100%
+}
+.wux-popup-position.wux-popup-position--right .wux-popup {
+ position: fixed;
+ top: 0;
+ right: 0;
+ width: 80%;
+ max-width: 100%;
+ height: 100%;
+ max-height: 100%
+}
+.wux-popup-position.wux-popup-position--bottom .wux-popup {
+ position: fixed;
+ left: 0;
+ bottom: 0;
+ width: 100%;
+ max-width: 100%
+}
+.wux-popup-position.wux-popup-position--left .wux-popup {
+ position: fixed;
+ left: 0;
+ top: 0;
+ width: 80%;
+ max-width: 100%;
+ height: 100%;
+ max-height: 100%
+}
+.wux-popup-position.wux-popup-position--is-iphonex .wux-popup__content {
+ padding-bottom: 68rpx
+}
+.wux-popup__content {
+ position: relative;
+ background-color: #fff;
+ border: 0;
+ background-clip: padding-box;
+ height: 100%;
+ text-align: center;
+ overflow: hidden
+}
+.wux-popup__title {
+ font-weight: 400;
+ font-size: 36rpx
+}
+.wux-popup__bd {
+ min-height: 80rpx;
+ font-size: 30rpx;
+ line-height: 1.3;
+ word-wrap: break-word;
+ word-break: break-all;
+ color: #999
+}
+.wux-popup__ft {
+ position: relative;
+ line-height: 96rpx;
+ font-size: 36rpx;
+ display: -ms-flexbox;
+ display: flex
+}
+.wux-popup__close {
+ border: 0;
+ padding: 6rpx;
+ background-color: transparent;
+ outline: 0;
+ position: absolute;
+ top: 12rpx;
+ right: 12rpx;
+ height: 42rpx;
+ width: 42rpx
+}
+.wux-popup__close-x {
+ display: inline-block;
+ width: 30rpx;
+ height: 30rpx;
+ background-repeat: no-repeat;
+ background-size: cover;
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='30' height='30' viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='%23888' fill-rule='evenodd'%3E%3Cpath d='M1.414 0l28.284 28.284-1.414 1.414L0 1.414z'/%3E%3Cpath d='M28.284 0L0 28.284l1.414 1.414L29.698 1.414z'/%3E%3C/g%3E%3C/svg%3E")
+}
\ No newline at end of file
diff --git a/components/refresh-view/index.js b/components/refresh-view/index.js
new file mode 100644
index 0000000..4c0f0b9
--- /dev/null
+++ b/components/refresh-view/index.js
@@ -0,0 +1,56 @@
+// 使用的时候,用本组件包裹可以触发下拉刷新的内容。enablePullDownRefresh需要设置为false。
+Component({
+ properties: {
+ refreshed: { // 必选,通知本组件收起
+ type: Boolean,
+ value: false,
+ },
+ refreshing: { // 可选,通知本组件直接进入refreshing状态
+ type: Boolean,
+ value: false,
+ },
+ distMax: { // 可选,可以下拉的最大高度,回弹的高度为最大高度的75%
+ type: Number,
+ value: 45,
+ },
+ color: { // 可选,圆弧颜色
+ type: String,
+ value: "#000",
+ },
+ backgroundColor: { // 可选,背景颜色
+ type: String,
+ value: "#fff",
+ },
+ type: {
+ type: Number,
+ value: 0
+ }
+ },
+ data: {
+ reachTop: false,
+ },
+ methods: {
+ initObserver() {
+ this.observer = this.createIntersectionObserver()
+ this.observer.relativeToViewport().observe(".intersection-dot", (res) => {
+ if (res.intersectionRatio > 0) {
+ this.setData({ reachTop: true, })
+ } else {
+ this.setData({ reachTop: false,})
+ }
+ })
+ },
+ clearObserver() {
+ if (this.observer) {
+ this.observer.disconnect()
+ this.observer = null
+ }
+ },
+ },
+ ready() {
+ this.initObserver()
+ },
+ detached() {
+ this.clearObserver()
+ },
+})
diff --git a/components/refresh-view/index.json b/components/refresh-view/index.json
new file mode 100644
index 0000000..a89ef4d
--- /dev/null
+++ b/components/refresh-view/index.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
diff --git a/components/refresh-view/index.wxml b/components/refresh-view/index.wxml
new file mode 100644
index 0000000..eda6570
--- /dev/null
+++ b/components/refresh-view/index.wxml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/refresh-view/index.wxs b/components/refresh-view/index.wxs
new file mode 100644
index 0000000..224f3a8
--- /dev/null
+++ b/components/refresh-view/index.wxs
@@ -0,0 +1,158 @@
+// 文档:https://developers.weixin.qq.com/miniprogram/dev/framework/view/interactive-animation.html
+
+/* eslint-disable */
+function calcResistance(distExtra, distMax) {
+ return Math.min(1, distExtra / distMax / 1.2) * Math.min(distMax, distExtra)
+}
+
+function touchStart(e, ins) {
+ var dataset = e.instance.getDataset()
+ var state = e.instance.getState()
+ state.distMax = dataset.distMax
+ state.type = dataset.type
+ state.distThreshold = state.distMax * 0.75
+ state.reachTop = dataset.reachTop
+ state.status = state.status || "pending" // pending、pulling、releasing、refreshing
+
+ if (state.status === "pending" && state.reachTop) {
+ state.startPulling = true
+ state.pullStartX = e.touches[0].clientX
+ state.pullStartY = e.touches[0].clientY
+ state.distance = 0
+
+ state.component = state.component || ins.selectComponent(".refresh-wrap")
+ state.component.removeClass("transition")
+ state.component.removeClass("animation")
+ state.component.removeClass("fadeout")
+ state.component.setStyle({
+ top: (state.distance * 2 - 20) + "rpx",
+ opacity: 0,
+ transform: "rotate(0)",
+ "-webkit-transform": "rotate(0)"
+ })
+ }
+}
+
+function touchMove(e, ins) {
+ var state = e.instance.getState()
+ if (!state.startPulling || state.status === "refreshing") {
+ return true
+ }
+ state.pullMoveX = e.touches[0].clientX
+ state.pullMoveY = e.touches[0].clientY
+ if (state.status === "pending") {
+ state.status = "pulling"
+ }
+ var distExtraX = state.pullMoveX - state.pullStartX
+ var distExtraY = state.pullMoveY - state.pullStartY
+ if (distExtraY > 0 && Math.abs(distExtraY) >= Math.abs(distExtraX)) {
+ state.distance = calcResistance(distExtraY, state.distMax)
+ state.component.setStyle({
+ top: setop(state.distance, state.type),
+ opacity: Math.min(1, state.distance / state.distThreshold),
+ transform: "rotate(" + (245 * state.distance / state.distMax) + "deg)",
+ "-webkit-transform": "rotate(" + (245 * state.distance / state.distMax) + "deg)"
+ })
+
+ if (state.status === "pulling" && state.distance > state.distThreshold) {
+ state.status = "releasing"
+ }
+ if (state.status === "releasing" && state.distance < state.distThreshold) {
+ state.status = "pulling"
+ }
+ return false
+ }
+ return true
+}
+
+function touchEnd(e, ins) {
+ var state = e.instance.getState()
+
+ if (!state.startPulling || state.status === "refreshing") {
+ return
+ }
+ state.startPulling = false
+ if (state.status === "releasing" && state.distance > state.distThreshold) {
+ state.status = "refreshing"
+ state.distance = state.distThreshold
+
+ state.component.addClass("animation")
+ state.component.setStyle({
+ top: setop(state.distance, state.type),
+ opacity: Math.min(1, state.distance / state.distThreshold),
+ })
+
+ ins.triggerEvent("refresh")
+ } else {
+ reset(state)
+ }
+}
+
+function reset(state) {
+ state.status = "pending"
+ state.startPulling = false
+ state.distance = 0
+ state.component.addClass("transition")
+ state.component.setStyle({
+ top: setop(state.distance, state.type),
+ opacity: 0,
+ transform: "rotate(0)",
+ "-webkit-transform": "rotate(0)"
+ })
+}
+
+function onRefreshed(newValue, oldValue, ins, itemIns) {
+ if (newValue) {
+ var state = itemIns.getState()
+ state.status = "pending"
+ state.startPulling = false
+
+ var component = state.component || ins.selectComponent(".refresh-wrap")
+ component.removeClass("animation")
+ component.addClass("fadeout")
+ component.setStyle({
+ top: (state.distance * 2 - (state.type? 12 : 30)) + "rpx",
+ opacity: 0,
+ transform: "scale(0)",
+ "-webkit-transform": "rotate(0)"
+ })
+ }
+}
+
+function setop(distance, type){
+ var top = (distance * 2 + (type == 0 ? 120 : -30)) + "rpx"
+ return top
+}
+
+function onRefreshing(newValue, oldValue, ins, itemIns) {
+ if (newValue) {
+ var dataset = itemIns.getDataset()
+ var state = itemIns.getState()
+ state.distMax = state.distMax || dataset.distMax
+ state.distThreshold = state.distThreshold || state.distMax * 0.75
+
+ state.status = "refreshing"
+ state.distance = state.distThreshold
+ state.startPulling = false
+ state.component = state.component || ins.selectComponent(".refresh-wrap")
+
+ state.component.removeClass("transition")
+ state.component.removeClass("fadeout")
+ state.component.addClass("animation")
+ state.component.setStyle({
+ top: setop(state.distance, state.type),
+ opacity: 1,
+ transition: "none",
+ })
+ // ins.triggerEvent("refresh")
+ }
+}
+
+module.exports = {
+ touchStart: touchStart,
+ touchMove: touchMove,
+ touchEnd: touchEnd,
+ onRefreshed: onRefreshed,
+ onRefreshing: onRefreshing,
+}
+/* eslint-enable */
diff --git a/components/refresh-view/index.wxss b/components/refresh-view/index.wxss
new file mode 100644
index 0000000..8a665b4
--- /dev/null
+++ b/components/refresh-view/index.wxss
@@ -0,0 +1,68 @@
+@keyframes rolling {
+ 0% {
+ transform: rotate(135deg);
+ }
+ 100% {
+ transform: rotate(495deg);
+ }
+}
+@keyframes fadeout {
+ 0% {
+ opacity: 1;
+ transform: rotate(135deg) scale(1);
+ }
+ 100% {
+ opacity: 0;
+ transform: rotate(135deg) scale(0);
+ }
+}
+.refresh-wrap {
+ position: fixed;
+ width: 42px;
+ height: 42px;
+ left: 50%;
+ margin-left: -21px;
+ top: 50px;
+ z-index: 88;
+ background-color: #fff;
+ border-radius: 50%;
+ box-shadow: 0 0 6px 1px #ccc;
+ opacity: 0;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+.refresh-wrap.transition {
+ transition: top 0.3s ease-in-out, opacity 0.3s ease-in-out, transform 0.3s ease-in-out;
+}
+.refresh-wrap.animation {
+ transition: top 0.3s ease-in-out, opacity 0.3s ease-in-out;
+ animation: rolling 0.6s linear infinite;
+}
+.refresh-wrap.fadeout {
+ animation: fadeout 0.3s ease-in-out;
+}
+.refresh-wrap .refresh {
+ box-sizing: border-box;
+ width: 24px;
+ height: 24px;
+ border-radius: 50%;
+ border: 3px solid #000;
+ border-top-color: transparent !important;
+}
+.refresh-wrap.fadeout .refresh {
+ opacity: 0;
+}
+.wrap {
+ width: 100%;
+ height: 100%;
+ position: relative;
+}
+.wrap .intersection-dot {
+ position: absolute;
+ width: 10px;
+ height: 10px;
+ left: 0;
+ top: 0;
+ visibility: hidden;
+}
diff --git a/components/result/index.js b/components/result/index.js
new file mode 100644
index 0000000..8323ffc
--- /dev/null
+++ b/components/result/index.js
@@ -0,0 +1,110 @@
+import baseComponent from '../helpers/baseComponent'
+import classNames from '../helpers/classNames'
+
+const defaultIcon = {
+ type: 'success',
+ size: 93,
+ color: '#33cd5f',
+}
+
+const getIcon = (icon) => {
+ if (icon !== null && typeof icon === 'object') {
+ return Object.assign({}, defaultIcon, icon)
+ } else if (typeof icon === 'string') {
+ return Object.assign({}, defaultIcon, {
+ type: icon,
+ })
+ }
+ return defaultIcon
+}
+
+baseComponent({
+ properties: {
+ prefixCls: {
+ type: String,
+ value: 'wux-result',
+ },
+ icon: {
+ type: null,
+ value: defaultIcon,
+ observer(newVal) {
+ this.setData({
+ resultIcon: getIcon(newVal),
+ })
+ },
+ },
+ title: {
+ type: String,
+ value: '',
+ },
+ label: {
+ type: String,
+ value: '',
+ },
+ buttons: {
+ type: Array,
+ value: [],
+ },
+ extra: {
+ type: String,
+ value: '',
+ },
+ fixed: {
+ type: Boolean,
+ value: false,
+ },
+ },
+ data: {
+ resultIcon: null,
+ },
+ computed: {
+ classes: ['prefixCls, fixed', function(prefixCls, fixed) {
+ const wrap = classNames(prefixCls, {
+ [`${prefixCls}--fixed`]: fixed,
+ })
+ const hd = `${prefixCls}__hd`
+ const icon = `${prefixCls}__icon`
+ const bd = `${prefixCls}__bd`
+ const title = `${prefixCls}__title`
+ const desc = `${prefixCls}__desc`
+ const buttons = `${prefixCls}__buttons`
+ const ft = `${prefixCls}__ft`
+
+ return {
+ wrap,
+ hd,
+ icon,
+ bd,
+ title,
+ desc,
+ buttons,
+ ft,
+ }
+ }],
+ },
+ methods: {
+ onClick(e) {
+ this.triggerEvent('click', e.currentTarget.dataset)
+ },
+ bindgetuserinfo(e) {
+ this.triggerEvent('getuserinfo', {...e.detail, ...e.currentTarget.dataset })
+ },
+ bindcontact(e) {
+ this.triggerEvent('contact', {...e.detail, ...e.currentTarget.dataset })
+ },
+ bindgetphonenumber(e) {
+ this.triggerEvent('getphonenumber', {...e.detail, ...e.currentTarget.dataset })
+ },
+ bindopensetting(e) {
+ this.triggerEvent('opensetting', {...e.detail, ...e.currentTarget.dataset })
+ },
+ onError(e) {
+ this.triggerEvent('error', {...e.detail, ...e.currentTarget.dataset })
+ },
+ },
+ attached() {
+ this.setData({
+ resultIcon: getIcon(this.data.icon),
+ })
+ },
+})
diff --git a/components/result/index.json b/components/result/index.json
new file mode 100644
index 0000000..8d5655a
--- /dev/null
+++ b/components/result/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "wux-button": "../button/index"
+ }
+}
\ No newline at end of file
diff --git a/components/result/index.wxml b/components/result/index.wxml
new file mode 100644
index 0000000..eaece98
--- /dev/null
+++ b/components/result/index.wxml
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
+
+ {{ title }}
+ {{ label }}
+
+
+
+ {{ button.text }}
+
+
+
+
+
+
+
+ {{ extra }}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/result/index.wxss b/components/result/index.wxss
new file mode 100644
index 0000000..0034e9d
--- /dev/null
+++ b/components/result/index.wxss
@@ -0,0 +1,36 @@
+.wux-result {
+ padding-top: 0;
+ text-align: center
+}
+.wux-result__bd {
+ padding: 60rpx 40rpx
+}
+.wux-result__icon {
+ padding-top: 72rpx;
+ text-align: center
+}
+.wux-result__title {
+ margin-bottom: 10rpx;
+ font-weight: 400;
+ font-size: 40rpx
+}
+.wux-result__desc {
+ font-size: 28rpx;
+ color: grey
+}
+.wux-result__buttons {
+ margin-top: 60rpx
+}
+.wux-result__ft {
+ font-size: 28rpx;
+ color: grey
+}
+.wux-result--fixed .wux-result__ft {
+ position: fixed;
+ left: 0;
+ bottom: 0;
+ width: 100%;
+ padding: 30rpx;
+ text-align: center;
+ box-sizing: border-box
+}
\ No newline at end of file
diff --git a/components/step/index.js b/components/step/index.js
new file mode 100644
index 0000000..81fe7ed
--- /dev/null
+++ b/components/step/index.js
@@ -0,0 +1,88 @@
+import baseComponent from '../helpers/baseComponent'
+import classNames from '../helpers/classNames'
+
+const defaultStatus = ['wait', 'process', 'finish', 'error']
+const defaultIcon = 'ios-checkmark'
+
+baseComponent({
+ relations: {
+ '../steps/index': {
+ type: 'parent',
+ },
+ },
+ properties: {
+ prefixCls: {
+ type: String,
+ value: 'wux-step',
+ },
+ status: {
+ type: String,
+ value: '',
+ },
+ title: {
+ type: String,
+ value: '',
+ },
+ content: {
+ type: String,
+ value: '',
+ },
+ icon: {
+ type: String,
+ value: '',
+ },
+ },
+ data: {
+ width: '100%',
+ length: 1,
+ index: 0,
+ current: 0,
+ direction: 'horizontal',
+ },
+ computed: {
+ classes: ['prefixCls, direction', function(prefixCls, direction) {
+ const wrap = classNames(prefixCls, {
+ [`${prefixCls}--${direction}`]: direction,
+ })
+ const hd = `${prefixCls}__hd`
+ const icon = `${prefixCls}__icon`
+ const thumb = `${prefixCls}__thumb`
+ const bd = `${prefixCls}__bd`
+ const title = `${prefixCls}__title`
+ const content = `${prefixCls}__content`
+ const ft = `${prefixCls}__ft`
+
+ return {
+ wrap,
+ hd,
+ icon,
+ thumb,
+ bd,
+ title,
+ content,
+ ft,
+ }
+ }],
+ },
+ methods: {
+ updateCurrent(opts = {}) {
+ const width = opts.direction === 'horizontal' ? 100 / opts.length + '%' : '100%'
+ const index = defaultStatus.indexOf(this.data.status)
+ const hasIcon = opts.index < opts.current || this.data.icon
+ const thumb = this.data.icon || defaultIcon
+ const suffix = index !== -1 ? defaultStatus[index] : opts.index < opts.current ? 'finish' : opts.index === opts.current ? 'process' : ''
+ const className = `${this.data.prefixCls}--${suffix}`
+ const options = Object.assign({
+ width,
+ className,
+ hasIcon,
+ thumb,
+ }, opts)
+
+ this.setData(options)
+ },
+ },
+ attached() {
+ this.updateCurrent(this.data)
+ },
+})
diff --git a/components/step/index.json b/components/step/index.json
new file mode 100644
index 0000000..b4d3fc7
--- /dev/null
+++ b/components/step/index.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": { }
+}
\ No newline at end of file
diff --git a/components/step/index.wxml b/components/step/index.wxml
new file mode 100644
index 0000000..53fca1b
--- /dev/null
+++ b/components/step/index.wxml
@@ -0,0 +1,21 @@
+
+
+ {{ index + 1 }}
+
+
+
+
+ {{ title }}
+
+
+
+
+
+ {{ content }}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/step/index.wxss b/components/step/index.wxss
new file mode 100644
index 0000000..381d2bf
--- /dev/null
+++ b/components/step/index.wxss
@@ -0,0 +1,122 @@
+.wux-step {
+ font-size: 0;
+ position: relative;
+ display: inline-block;
+ box-sizing: border-box;
+ padding: 0 10rpx;
+ vertical-align: top
+}
+.wux-step--vertical {
+ padding-bottom: 60rpx
+}
+.wux-step--vertical .wux-step__hd {
+ float: left
+}
+.wux-step--vertical .wux-step__bd {
+ overflow: hidden;
+ display: block;
+ margin-left: 80rpx;
+ margin-top: 0;
+ text-align: left;
+ clear: inherit
+}
+.wux-step--vertical .wux-step__ft {
+ position: absolute;
+ left: 40rpx;
+ top: 0;
+ height: 100%;
+ width: 2rpx;
+ padding: 60rpx 0 8rpx;
+ margin-left: 0
+}
+.wux-step--vertical .wux-step__ft:after {
+ width: 2rpx;
+ height: 100%
+}
+.wux-step__ft {
+ position: absolute;
+ left: 50%;
+ width: 100%;
+ top: 24rpx;
+ padding: 0 48rpx;
+ margin-left: 6rpx;
+ box-sizing: border-box
+}
+.wux-step__ft:after {
+ content: "";
+ display: inline-block;
+ background: #ddd;
+ height: 2rpx;
+ border-radius: 2rpx;
+ width: 100%;
+ transition: background .3s;
+ position: relative;
+ left: -4rpx
+}
+.wux-step__icon {
+ box-sizing: border-box;
+ font-size: 24rpx;
+ width: 48rpx;
+ height: 100%;
+ border-radius: 50%;
+ background: #fff;
+ position: relative;
+ z-index: 2;
+ margin: 0 auto;
+ border: #e9eaec solid 2rpx;
+ margin-left: 2px
+}
+.wux-step__thumb {
+ width: 100%;
+ height: 100%;
+ display: inline-block;
+ overflow: hidden
+}
+.wux-step--process .wux-step__icon {
+ border: #009ee0 solid 2rpx;
+ color: #fff;
+ background: #009ee0
+}
+.wux-step--wait .wux-step__icon {
+ border: #e9eaec solid 2rpx;
+ color: #e9eaec
+}
+.wux-step--wait .wux-step__ft:after {
+ background: #009ee0
+}
+.wux-step--finish .wux-step__icon {
+ border: #009ee0 solid 2rpx;
+ color: #009ee0
+}
+.wux-step--finish .wux-step__ft:after {
+ background: #009ee0
+}
+.wux-step--error .wux-step__icon {
+ border: #ef473a solid 2rpx;
+ color: #ef473a
+}
+.wux-step--error .wux-step__ft:after {
+ background: #ef473a
+}
+.wux-step__hd {
+ width: auto;
+ height: 48rpx;
+ line-height: 48rpx;
+ text-align: center;
+ box-sizing: border-box
+}
+.wux-step__bd {
+ margin-top: 20rpx;
+ text-align: center;
+ clear: both
+}
+.wux-step__title {
+ font-size: 32rpx;
+ font-weight: 700;
+ color: #000
+}
+.wux-step__content {
+ font-size: 24rpx;
+ margin-top: 6rpx;
+ color: #b2b2b2
+}
\ No newline at end of file
diff --git a/components/steps/index.js b/components/steps/index.js
new file mode 100644
index 0000000..5cd2466
--- /dev/null
+++ b/components/steps/index.js
@@ -0,0 +1,49 @@
+import baseComponent from '../helpers/baseComponent'
+import classNames from '../helpers/classNames'
+
+baseComponent({
+ relations: {
+ '../step/index': {
+ type: 'child',
+ observer() {
+ this.debounce(this.updateCurrent)
+ },
+ },
+ },
+ properties: {
+ prefixCls: {
+ type: String,
+ value: 'wux-steps',
+ },
+ current: {
+ type: Number,
+ value: 0,
+ observer: 'updateCurrent',
+ },
+ // status: {
+ // type: String,
+ // value: '',
+ // },
+ direction: {
+ type: String,
+ value: 'horizontal',
+ },
+ },
+ methods: {
+ updateCurrent() {
+ const elements = this.getRelationNodes('../step/index')
+ const { current, direction } = this.data
+
+ if (elements.length > 0) {
+ elements.forEach((element, index) => {
+ element.updateCurrent({
+ length: elements.length,
+ index,
+ current,
+ direction,
+ })
+ })
+ }
+ }
+ }
+})
diff --git a/components/steps/index.json b/components/steps/index.json
new file mode 100644
index 0000000..fba482a
--- /dev/null
+++ b/components/steps/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
\ No newline at end of file
diff --git a/components/steps/index.wxml b/components/steps/index.wxml
new file mode 100644
index 0000000..2779365
--- /dev/null
+++ b/components/steps/index.wxml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/components/steps/index.wxss b/components/steps/index.wxss
new file mode 100644
index 0000000..ab579db
--- /dev/null
+++ b/components/steps/index.wxss
@@ -0,0 +1,4 @@
+.wux-steps {
+ position: relative;
+ width: 100%
+}
\ No newline at end of file
diff --git a/components/tab/index.js b/components/tab/index.js
new file mode 100644
index 0000000..4238d9b
--- /dev/null
+++ b/components/tab/index.js
@@ -0,0 +1,126 @@
+Component({
+ properties: {
+ // 数据源
+ tabData: {
+ type: Array,
+ value: [],
+ observer: "dataChange"
+ },
+ // 是否可以超出滚动
+ tabCur: {
+ type: Number,
+ value: 0,
+ observer: "tabCurChange"
+ },
+ // 是否可以超出滚动
+ scroll: {
+ type: Boolean,
+ value: false
+ },
+ // tab高度
+ size: {
+ type: Number,
+ value: 90,
+ observer: "sizeChange"
+ },
+ // 颜色
+ color: {
+ type: String,
+ value: ""
+ }
+ },
+ data: {
+ /* 未渲染数据 */
+ windowWidth: 0, // 屏幕宽度
+ tabItems: [], // 所有 tab 节点信息
+
+ /* 渲染数据 */
+ scrolling: true, // 控制 scroll-view 滚动以在异步加载数据的时候能正确获得 dom 信息
+ needTransition: false, // 下划线是否需要过渡动画
+ translateX: 0, // 下划 line 的左边距离
+ lineWidth: 0, // 下划 line 宽度
+ scrollLeft: 0, // scroll-view 左边滚动距离
+ },
+ methods: {
+ /**
+ * 切换菜单
+ */
+ toggleTab(e) {
+ this.triggerEvent('change', {index: e.currentTarget.dataset.index});
+ this.scrollByIndex(e.currentTarget.dataset.index);
+ },
+ /**
+ * 滑动到指定位置
+ * @param tabCur: 当前激活的tabItem的索引
+ * @param needTransition: 下划线是否需要过渡动画, 第一次进来应设置为false
+ */
+ scrollByIndex(tabCur, needTransition = true) {
+ let item = this.data.tabItems[tabCur];
+ if (!item) return;
+ let itemWidth = item.width || 0,
+ itemLeft = item.left || 0;
+
+ this.setData({needTransition: needTransition});
+
+ if (this.data.scroll) { // 超出滚动的情况
+ // 保持滚动后当前 item '尽可能' 在屏幕中间
+ let scrollLeft = itemLeft - (this.data.windowWidth - itemWidth) / 2;
+
+ this.setData({
+ tabCur: tabCur,
+ scrollLeft: scrollLeft,
+ translateX: itemLeft,
+ lineWidth: itemWidth
+ });
+ } else { // 不超出滚动的情况
+ this.setData({
+ tabCur: tabCur,
+ translateX: itemLeft,
+ lineWidth: itemWidth
+ });
+ }
+ },
+ /**
+ * 监听数据变化, 如果改变重新初始化参数
+ */
+ dataChange(newVal, oldVal) {
+ this.setData({
+ scrolling: false
+ });
+ // 异步加载数据时候, 延迟执行 init 方法, 防止基础库 2.7.1 版本及以下无法正确获取 dom 信息
+ setTimeout(() => this.init(), 10);
+ },
+ /**
+ * 监听 tabCur 变化, 做对应处理
+ */
+ tabCurChange(newVal, oldVal) {
+ this.scrollByIndex(newVal);
+ },
+ /**
+ * 监听 tab 高度变化, 最小值为80rpx
+ */
+ sizeChange(newVal, oldVal) {
+ if (newVal <= 80) {
+ this.setData({size: 80});
+ }
+ },
+ /**
+ * 初始化函数
+ */
+ init() {
+ const {windowWidth} = wx.getSystemInfoSync();
+ this.setData({windowWidth: windowWidth || 375});
+
+ this.createSelectorQuery().selectAll(".tabs__item-child").boundingClientRect((res) => {
+ this.setData({
+ scrolling: true,
+ tabItems: res
+ });
+ this.scrollByIndex(this.data.tabCur, false);
+ }).exec();
+ }
+ },
+ ready() {
+ this.init();
+ }
+});
diff --git a/components/tab/index.json b/components/tab/index.json
new file mode 100644
index 0000000..6a1b9ce
--- /dev/null
+++ b/components/tab/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/components/tab/index.wxml b/components/tab/index.wxml
new file mode 100644
index 0000000..8704397
--- /dev/null
+++ b/components/tab/index.wxml
@@ -0,0 +1,10 @@
+
+
+
+
+ {{item}}
+
+
+
+
+
\ No newline at end of file
diff --git a/components/tab/index.wxss b/components/tab/index.wxss
new file mode 100644
index 0000000..86c83db
--- /dev/null
+++ b/components/tab/index.wxss
@@ -0,0 +1,56 @@
+.scroll-view {
+ width: 100%;
+ height: 90rpx;
+ overflow: hidden;
+}
+
+.tabs-wrap {
+ padding-bottom: 20rpx;
+}
+
+.tabs {
+ position: relative;
+ height: 90rpx;
+ color: #999999;
+ display: flex;
+}
+.tabs--scroll {
+ white-space: nowrap !important;
+ display: block !important;
+}
+.tabs--scroll .tabs__item {
+ flex: initial !important;
+ text-align: initial !important;
+ display: inline-block !important;
+ padding: 0 30rpx;
+}
+.tabs--scroll .tabs__item-child {
+ display: block !important;
+}
+.tabs__item {
+ flex: 1;
+ text-align: center;
+ height: 90rpx;
+ line-height: 90rpx;
+ padding: 0 10rpx;
+ box-sizing: border-box;
+ transition: color 0.3s ease-in-out;
+}
+.tabs__item--cur {
+ color: #008AFF;
+}
+.tabs__item-child {
+ display: inline-block;
+}
+.tabs__line {
+ position: absolute;
+ left: 0;
+ bottom: 0;
+ background-color: #008AFF;
+ height: 4rpx;
+ width: 0rpx;
+ display: inline-block;
+}
+.tabs__line.transition {
+ transition: width 0.3s, transform 0.3s;
+}
diff --git a/components/tag/index.js b/components/tag/index.js
new file mode 100644
index 0000000..9bba1e8
--- /dev/null
+++ b/components/tag/index.js
@@ -0,0 +1,127 @@
+import baseComponent from '../helpers/baseComponent'
+import classNames from '../helpers/classNames'
+
+/**
+ * 判断是否预设的颜色值
+ * @param {String} color 颜色值
+ */
+const isPresetColor = (color) => {
+ if (!color) {
+ return false
+ }
+ return (/^(pink|red|yellow|orange|cyan|green|blue|purple|geekblue|magenta|volcano|gold|lime)(-inverse)?$/.test(color))
+}
+
+baseComponent({
+ properties: {
+ prefixCls: {
+ type: String,
+ value: 'wux-tag',
+ },
+ hoverClass: {
+ type: String,
+ value: 'default',
+ },
+ color: {
+ type: String,
+ value: '',
+ observer: 'updateStyle',
+ },
+ closable: {
+ type: Boolean,
+ value: false,
+ },
+ defaultVisible: {
+ type: Boolean,
+ value: true,
+ },
+ visible: {
+ type: Boolean,
+ value: true,
+ observer(newVal) {
+ if (this.data.controlled) {
+ this.updated(newVal)
+ }
+ },
+ },
+ controlled: {
+ type: Boolean,
+ value: false,
+ },
+ },
+ data: {
+ className: '',
+ tagStyle: '',
+ tagVisible: true,
+ },
+ computed: {
+ classes: ['prefixCls, hoverClass', function(prefixCls, hoverClass) {
+ const wrap = classNames(prefixCls)
+ const icon = `${prefixCls}__icon`
+ const hover = hoverClass && hoverClass !== 'default' ? hoverClass : `${prefixCls}--hover`
+
+ return {
+ wrap,
+ icon,
+ hover,
+ }
+ }],
+ },
+ methods: {
+ /**
+ * 控制组件显示或隐藏
+ */
+ updated(tagVisible) {
+ if (this.data.tagVisible !== tagVisible) {
+ this.setData({
+ tagVisible,
+ })
+ }
+ },
+ /**
+ * 更新组件样式
+ */
+ updateStyle(color) {
+ const { prefixCls } = this.data
+ const isPreset = isPresetColor(color)
+ const className = isPreset ? `${prefixCls}--${color}` : ''
+ const tagStyle = !isPreset ? `background-color: ${color}; color: #fff` : ''
+
+ this.setData({
+ className,
+ tagStyle,
+ })
+ },
+ /**
+ * 显示隐藏的回调
+ */
+ onChange(tagVisible) {
+ if (!this.data.controlled) {
+ this.updated(tagVisible)
+ }
+
+ this.triggerEvent('change', { value: tagVisible })
+ },
+ /**
+ * 点击事件
+ */
+ onClick() {
+ this.triggerEvent('click')
+ },
+ /**
+ * 关闭时触发的回调函数
+ */
+ onClose() {
+ if (this.data.closable) {
+ this.triggerEvent('close')
+ this.onChange(false)
+ }
+ },
+ },
+ attached() {
+ const { defaultVisible, visible, controlled } = this.data
+ const tagVisible = controlled ? visible : defaultVisible
+
+ this.updated(tagVisible)
+ },
+})
diff --git a/components/tag/index.json b/components/tag/index.json
new file mode 100644
index 0000000..fba482a
--- /dev/null
+++ b/components/tag/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
\ No newline at end of file
diff --git a/components/tag/index.wxml b/components/tag/index.wxml
new file mode 100644
index 0000000..ded1687
--- /dev/null
+++ b/components/tag/index.wxml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/components/tag/index.wxss b/components/tag/index.wxss
new file mode 100644
index 0000000..1a12a1d
--- /dev/null
+++ b/components/tag/index.wxss
@@ -0,0 +1,169 @@
+.wux-tag {
+ font-family: Monospaced Number,Chinese Quote,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif;
+ font-size: 28rpx;
+ line-height: 1.5;
+ color: rgba(0,0,0,.65);
+ box-sizing: border-box;
+ margin: 0;
+ padding: 0;
+ list-style: none;
+ display: -ms-inline-flexbox;
+ display: inline-flex;
+ -ms-flex-align: center;
+ align-items: center;
+ line-height: 40rpx;
+ height: 50rpx;
+ padding: 4rpx 24rpx;
+ border-radius: 8rpx;
+ border: 2rpx solid #d9d9d9;
+ background: #fafafa;
+ font-size: 26rpx;
+ transition: all .3s cubic-bezier(.215,.61,.355,1);
+ opacity: 1;
+ margin-right: 16rpx;
+ cursor: pointer;
+ white-space: nowrap
+}
+.wux-tag--hover {
+ opacity: .85
+}
+.wux-tag--pink {
+ color: #eb2f96;
+ background: #fff0f6;
+ border-color: #ffadd2
+}
+.wux-tag--pink-inverse {
+ background: #eb2f96;
+ border-color: #eb2f96;
+ color: #fff
+}
+.wux-tag--magenta {
+ color: #eb2f96;
+ background: #fff0f6;
+ border-color: #ffadd2
+}
+.wux-tag--magenta-inverse {
+ background: #eb2f96;
+ border-color: #eb2f96;
+ color: #fff
+}
+.wux-tag--red {
+ color: #f5222d;
+ background: #fff1f0;
+ border-color: #ffa39e
+}
+.wux-tag--red-inverse {
+ background: #f5222d;
+ border-color: #f5222d;
+ color: #fff
+}
+.wux-tag--volcano {
+ color: #fa541c;
+ background: #fff2e8;
+ border-color: #ffbb96
+}
+.wux-tag--volcano-inverse {
+ background: #fa541c;
+ border-color: #fa541c;
+ color: #fff
+}
+.wux-tag--orange {
+ color: #fa8c16;
+ background: #fff7e6;
+ border-color: #ffd591
+}
+.wux-tag--orange-inverse {
+ background: #fa8c16;
+ border-color: #fa8c16;
+ color: #fff
+}
+.wux-tag--yellow {
+ color: #fadb14;
+ background: #feffe6;
+ border-color: #fffb8f
+}
+.wux-tag--yellow-inverse {
+ background: #fadb14;
+ border-color: #fadb14;
+ color: #fff
+}
+.wux-tag--gold {
+ color: #faad14;
+ background: #fffbe6;
+ border-color: #ffe58f
+}
+.wux-tag--gold-inverse {
+ background: #faad14;
+ border-color: #faad14;
+ color: #fff
+}
+.wux-tag--cyan {
+ color: #13c2c2;
+ background: #e6fffb;
+ border-color: #87e8de
+}
+.wux-tag--cyan-inverse {
+ background: #13c2c2;
+ border-color: #13c2c2;
+ color: #fff
+}
+.wux-tag--lime {
+ color: #a0d911;
+ background: #fcffe6;
+ border-color: #eaff8f
+}
+.wux-tag--lime-inverse {
+ background: #a0d911;
+ border-color: #a0d911;
+ color: #fff
+}
+.wux-tag--green {
+ color: #52c41a;
+ background: #f6ffed;
+ border-color: #b7eb8f
+}
+.wux-tag--green-inverse {
+ background: #52c41a;
+ border-color: #52c41a;
+ color: #fff
+}
+.wux-tag--blue {
+ color: #1890ff;
+ background: #e6f7ff;
+ border-color: #91d5ff
+}
+.wux-tag--blue-inverse {
+ background: #1890ff;
+ border-color: #1890ff;
+ color: #fff
+}
+.wux-tag--geekblue {
+ color: #2f54eb;
+ background: #f0f5ff;
+ border-color: #adc6ff
+}
+.wux-tag--geekblue-inverse {
+ background: #2f54eb;
+ border-color: #2f54eb;
+ color: #fff
+}
+.wux-tag--purple {
+ color: #722ed1;
+ background: #f9f0ff;
+ border-color: #d3adf7
+}
+.wux-tag--purple-inverse {
+ background: #722ed1;
+ border-color: #722ed1;
+ color: #fff
+}
+.wux-tag__icon {
+ display: inline-block;
+ width: 24rpx;
+ height: 24rpx;
+ margin-left: 14rpx;
+ background-repeat: no-repeat;
+ background-position: 0 0;
+ background-size: contain;
+ background-image: url('data:image/svg+xml;charset=utf-8,')
+}
\ No newline at end of file
diff --git a/pages/home/index/index.js b/pages/home/index/index.js
new file mode 100644
index 0000000..a3be9f0
--- /dev/null
+++ b/pages/home/index/index.js
@@ -0,0 +1,61 @@
+// pages/stock/index.js
+const request = require('../../../utils/request');//导入模块
+const util = require('../../../utils/util');
+const event = require('../../../utils/event.js')
+const app = getApp()
+
+Component({
+ options: {
+ addGlobalClass: true,
+ multipleSlots: true
+ },
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ firstShow: false,
+ token: app.globalData.token,
+ userInfo: {},
+ hasUserInfo: false,
+ canIUse: wx.canIUse('button.open-type.getUserInfo')
+ },
+ lifetimes: {
+ // 生命周期函数,可以为函数,或一个在methods段中定义的方法名
+ attached: function () {
+ event.on('EventMessage', this, this.onEvent)
+ },
+ detached: function () {
+ event.remove('EventMessage', this)
+ }
+ },
+ methods: {
+ // resume的处理;
+ onRestart: function () {
+ if (!this.data.firstShow) {
+ this.setData({ token: app.globalData.token })
+ }
+ this.fetchUserInfo()
+ this.data.firstShow = true
+ },
+
+ onEvent: function (message) {
+ console.log('home>>index>>onEvent', message)
+ if(message.what == 1 && util.isEmpty(this.data.token)){
+ this.setData({ token: app.globalData.token })
+ }
+ },
+
+ onGotPhoneNumber: function (e) {
+ request.loginWechat(e.detail).then(data => {
+ wx.navigateTo({
+ url: '/pages/mall/order-list/index?index=0'
+ })
+ })
+ },
+
+ fetchUserInfo: function () {
+
+ }
+
+ }
+})
\ No newline at end of file
diff --git a/pages/home/index/index.json b/pages/home/index/index.json
new file mode 100644
index 0000000..a9009f5
--- /dev/null
+++ b/pages/home/index/index.json
@@ -0,0 +1,8 @@
+{
+ "component": true,
+ "usingComponents": {
+ "wux-button": "/components/button/index",
+ "wux-cell-group": "/components/cell-group/index",
+ "wux-cell": "/components/cell/index"
+ }
+}
\ No newline at end of file
diff --git a/pages/home/index/index.wxml b/pages/home/index/index.wxml
new file mode 100644
index 0000000..63cab18
--- /dev/null
+++ b/pages/home/index/index.wxml
@@ -0,0 +1,36 @@
+
+ 我的
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/home/index/index.wxss b/pages/home/index/index.wxss
new file mode 100644
index 0000000..3b7559d
--- /dev/null
+++ b/pages/home/index/index.wxss
@@ -0,0 +1,30 @@
+/* pages/home/index.wxss */
+
+.header-bg {
+ margin-top: 0px;
+ width: 100%;
+ height: 80px;
+ background:linear-gradient(314deg,rgba(50,107,250,1) 0%,rgba(0,138,255,1) 100%);
+ border-bottom-left-radius: 64rpx;
+ border-bottom-right-radius: 64rpx;
+}
+
+.content-box {
+ margin-top: -70px;
+}
+
+.header-box {
+ width: 100%;
+ background: rgba(255, 255, 255, 1);
+ box-shadow: 0px 0px 15px -6px rgba(0, 0, 0, 0.32);
+ border-radius: 6px;
+}
+
+.userinfo-avatar {
+ overflow:hidden;
+ width: 120rpx;
+ height: 120rpx;
+ border-radius: 12rpx;
+ border: 2px solid #fff;
+ box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.2);
+}
\ No newline at end of file
diff --git a/pages/home/password/index.js b/pages/home/password/index.js
new file mode 100644
index 0000000..e8c2927
--- /dev/null
+++ b/pages/home/password/index.js
@@ -0,0 +1,56 @@
+// pages/home/password/index.js
+import $wuxCountDown from '../../../utils/countdown/index'
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ second: null,
+ pwdType: 'password',
+ pwd_icon: 'attention'
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad: function (options) {
+
+ },
+
+ BindPwd: function (e) {
+ this.setData({ password: e.detail.value })
+ },
+
+ changePwd: function (e) {
+ if (this.data.pwdType === 'password') {
+ this.setData({ pwdType: 'text' })
+ this.setData({ pwd_icon: 'attentionforbid' })
+ } else {
+ this.setData({ pwdType: 'password' })
+ this.setData({ pwd_icon: 'attention' })
+ }
+ },
+
+ fetchCode: function (e) {
+ if (this.second && this.second.interval) return !1
+ this.second = new $wuxCountDown({
+ date: +(new Date) + 60000,
+ onEnd() {
+ this.setData({
+ second: '重新获取验证码',
+ })
+ },
+ render(date) {
+ const sec = this.leadingZeros(date.sec, 2) + ' 秒 '
+ date.sec !== 0 && this.setData({ second: sec, })
+ },
+ })
+ },
+
+
+ resetPassword: function (e) {
+
+ }
+})
\ No newline at end of file
diff --git a/pages/home/password/index.json b/pages/home/password/index.json
new file mode 100644
index 0000000..353a2e4
--- /dev/null
+++ b/pages/home/password/index.json
@@ -0,0 +1,5 @@
+{
+ "usingComponents": {
+ "wux-button": "/components/button/index"
+ }
+}
\ No newline at end of file
diff --git a/pages/home/password/index.wxml b/pages/home/password/index.wxml
new file mode 100644
index 0000000..27c7d32
--- /dev/null
+++ b/pages/home/password/index.wxml
@@ -0,0 +1,25 @@
+
+
+ 返回
+ 密码重置
+
+
+
+
+
+
+
+
+
+
+ {{ second || '获取验证码' }}
+
+
+
+
+
+
+
+ 确定
+
+
diff --git a/pages/home/password/index.wxss b/pages/home/password/index.wxss
new file mode 100644
index 0000000..7eae635
--- /dev/null
+++ b/pages/home/password/index.wxss
@@ -0,0 +1,6 @@
+/* pages/home/password/index.wxss */
+.content-box {
+ background-color: #fff;
+ margin: 30rpx;
+ border-radius: 10rpx
+}
diff --git a/pages/index/index.js b/pages/index/index.js
new file mode 100644
index 0000000..c801249
--- /dev/null
+++ b/pages/index/index.js
@@ -0,0 +1,87 @@
+const app = getApp()
+const util = require('../../utils/util');
+const event = require('../../utils/event.js')
+
+Page({
+ data: {
+ TabList: [
+ { index: 0, value: 'message', icon: 'messagefill', name: '消息' },
+ { index: 1, value: 'task', icon: 'deliver_fill', badge: 0, name: '任务' },
+ { index: 2, value: 'home', icon: 'myfill', badge: 0, name: '我的' }
+ ],
+ pageIndex: 1
+ },
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad: function (options) {
+ this.checkLogin()
+ event.on('EventMessage', this, this.onEvent)
+ },
+ //事件处理函数
+ onNavChange(e) {
+ // 处理用户的登录校验
+ this.setData({ pageIndex: Number(e.currentTarget.dataset.tab) })
+ var pageView = this.selectComponent('#' + this.data.TabList[this.data.pageIndex].value);
+ pageView.onRestart()
+ },
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow: function () {
+ var pageView = this.selectComponent('#' + this.data.TabList[this.data.pageIndex].value);
+ if (pageView) {
+ pageView.onRestart()
+ }
+ },
+ onEvent: function (message) {
+
+ },
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload: function () {
+ event.remove('EventMessage', this)
+ },
+
+ // 进行登录,同时获取到openId,为下一步的微信登录做准备,
+ checkLogin: function () {
+ wx.login({
+ success: res => {
+ wx.request({
+ url: app.httpUrl + '/user-centre/wx/bxe/session',
+ data: { code: res.code },
+ method: 'POST',
+ success: function (result) {
+ if (result.data.code != 0) {
+ event.emit('EventMessage', { what: 1, desc: 'Login' })
+ return
+ }
+ app.globalData.openId = result.data.data.openid
+ // /commonLogin/login通用登录
+ wx.request({
+ url: app.httpUrl + '/user-centre/commonLogin/login',
+ data: { openid: app.globalData.openId },
+ method: 'POST',
+ success: function (result) {
+ if (result.data.code == 0 && result.data.data.token) {
+ app.globalData.token = result.data.data.token
+ }
+ },
+ complete: function () {
+ event.emit('EventMessage', { what: 1, desc: 'Login' })
+ }
+ })
+ },
+ fail: function () {
+ event.emit('EventMessage', { what: 1, desc: 'Login' })
+ }
+ })
+ },
+ fail: function () {
+ event.emit('EventMessage', { what: 1, desc: 'Login' })
+ }
+ })
+ },
+
+})
diff --git a/pages/index/index.json b/pages/index/index.json
new file mode 100644
index 0000000..9ce5d77
--- /dev/null
+++ b/pages/index/index.json
@@ -0,0 +1,8 @@
+{
+ "disableScroll": true,
+ "usingComponents": {
+ "message": "/pages/message/index",
+ "task": "/pages/mall/index/index",
+ "home": "/pages/home/index/index"
+ }
+}
\ No newline at end of file
diff --git a/pages/index/index.wxml b/pages/index/index.wxml
new file mode 100644
index 0000000..06ab00c
--- /dev/null
+++ b/pages/index/index.wxml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+ {{item.badge>99?"99+":item.badge}}
+
+
+ {{item.name}}
+
+
\ No newline at end of file
diff --git a/pages/index/index.wxss b/pages/index/index.wxss
new file mode 100644
index 0000000..e69de29
diff --git a/pages/login/index.js b/pages/login/index.js
new file mode 100644
index 0000000..51d72b6
--- /dev/null
+++ b/pages/login/index.js
@@ -0,0 +1,203 @@
+//获取应用实例
+const md5 = require('../../utils/md5');
+const request = require('../../utils/request');//导入模块
+const util = require('../../utils/util');
+const app = getApp()
+const header = { 'content-type': 'application/x-www-form-urlencoded' }
+import $wuxCountDown from '../../utils/countdown/index'
+
+Page({
+ data: {
+ userInfo: {},
+ pwdType: 'password',
+ mobile: '',
+ password: '',
+ code: '',
+ pwd_icon: 'attention',
+ type: 1,
+ openId: '',
+ second: null,
+ },
+ onLoad: function (options) {
+ if (options.mobile) {
+ this.setData({ mobile: options.mobile })
+ }
+ if (options.openId) {
+ this.setData({ openId: options.openId })
+ }
+ this.checkLogin()
+ },
+ // 登录
+ checkLogin: function () {
+ // 发送 res.code 到后台换取 openId, sessionKey, unionId
+ wx.showLoading({ title: '登录中', mask: true })
+ var _this = this
+ wx.login({
+ success: res => {
+ request.post('/warehouse/wxa/auth/session', { code: res.code, state: 5, type: 1 }, header).then(result => {
+ _this.setData({ openId: result.response.openid })
+ request.post('/warehouse/wxa/auth/login', { openid: result.response.openid, type: 1 }, header).then(result => {
+ _this.doLoginResponse(result)
+ }).catch(error => {
+ wx.hideLoading()
+ })
+ }).catch(error => {
+ wx.hideLoading()
+ })
+ }
+ })
+ },
+ changePwd: function () {
+ if (this.data.pwdType === 'password') {
+ this.setData({ pwdType: 'text' })
+ this.setData({ pwd_icon: 'attentionforbid' })
+ } else {
+ this.setData({ pwdType: 'password' })
+ this.setData({ pwd_icon: 'attention' })
+ }
+ },
+ bindMobile: function (e) {
+ this.setData({ mobile: e.detail.value })
+ },
+ bindPwd: function (e) {
+ this.setData({ password: e.detail.value })
+ },
+ bindCode: function (e) {
+ this.setData({ code: e.detail.value })
+ },
+ loginForm: function () {
+ wx.redirectTo({ url: '/pages/index/index' })
+ if (!(/^1\d{10}$/.test(this.data.mobile)) || this.data.mobile.length < 11) {
+ wx.showToast({ title: '请输入11位手机号码', icon: 'none' });
+ return
+ }
+ if (this.data.password.length < 1 && this.data.type == 1) {
+ wx.showToast({ title: '请输入密码', icon: 'none' });
+ return
+ }
+ if (this.data.code.length < 1 && this.data.type == 0) {
+ wx.showToast({ title: '请输入验证码', icon: 'none' });
+ return
+ }
+ if (!(/^[A-Za-z0-9]{6,20}$/.test(this.data.password)) || this.data.password.length < 6) {
+ wx.showToast({ title: '密码长度必须为6-20位且只能包含数字英文', icon: 'none' });
+ return
+ }
+ wx.showLoading({ title: '登录中', mask: true })
+ if (app.globalData.openId){
+ let data = {
+ mobile: _this.data.mobile,
+ openid: _this.data.openId,
+ password: md5.hexMD5(_this.data.password).toUpperCase(),
+ type: 1
+ }
+ request.post('/wxa/auth/mobile/bind', data, header).then(result => {
+ this.doLoginResponse(result)
+ }).catch(error => {
+ wx.hideLoading()
+ })
+ } else {
+ var _this = this
+ wx.login({
+ success: res => {
+ request.post('/wxa/auth/session', { code: res.code, state: 5 }, header).then(result => {
+ _this.setData({ openId: result.response.openid })
+ let data = {
+ mobile: _this.data.mobile,
+ openid: result.response.openid,
+ password: md5.hexMD5(_this.data.password).toUpperCase(),
+ type: 1
+ }
+ request.post('/wxa/auth/mobile/bind', data, header).then(result => {
+ _this.doLoginResponse(result)
+ }).catch(error => {
+ wx.hideLoading()
+ })
+ }).catch(error => {
+ wx.hideLoading()
+ })
+ }
+ })
+ }
+ },
+ doLoginResponse: function (result) {
+ if (result.code == 0) {
+ app.globalData.token = result.response.token
+ if (app.globalData.userInfo) {
+ app.globalData.userInfo = { ...app.globalData.userInfo, ...result.response }
+ } else {
+ app.globalData.userInfo = result.response
+ }
+ if (getCurrentPages().length == 1){
+ wx.redirectTo({ url: '/pages/index/index' })
+ } else {
+ wx.navigateBack()
+ }
+ } else {
+ wx.showToast({ title: result.data.msg, icon: 'none' });
+ }
+ },
+ changeType: function(){
+ if(this.data.type == 1){
+ this.setData({type: 0})
+ } else {
+ this.setData({ type: 1 })
+ }
+ },
+ // 仅仅是获取手机号码...
+ onGotPhoneNumber: function(e) {
+ var form = e.detail
+ if(app.globalData.openId){
+ form.openid = app.globalData.openId
+ // /login/h5/phoneinfo 小程序获取授权手机号接口
+ request.post('/login/h5/phoneinfo', form, header).then(result => {
+ this.setData({ mobile: result.data.phoneNumber })
+ }).catch(error => {
+ util.showToast('获取手机失败')
+ })
+ } else {
+ wx.login({
+ success: res => {
+ request.post('/login/h5/session', { code: res.code, state: 5 }, header).then(result => {
+ app.globalData.openId = result.data.openid
+ form.openid = app.globalData.openId
+ request.post('/login/h5/phoneinfo', form, header).then(result => {
+ this.setData({ mobile: result.data.phoneNumber })
+ }).catch(error => {
+ util.showToast('获取手机失败')
+ })
+ }).catch(error => {
+ util.showToast('获取手机失败')
+ })
+ }
+ })
+ }
+ },
+ fetchCode: function(e){
+ if (!(/^1\d{10}$/.test(this.data.mobile)) || this.data.mobile.length < 11) {
+ wx.showToast({ title: '请输入11位手机号码', icon: 'none' });
+ return
+ }
+ if (this.second && this.second.interval) return !1
+ wx.showLoading({ title: '正在获取', mask: true })
+ // /login/h5/mobile/send_sms_code 发送验证码
+ request.post('/login/h5/mobile/send_sms_code?mobile=' + this.data.mobile).then(result => {
+ wx.hideLoading()
+ util.showToast('验证码已经发送')
+ this.second = new $wuxCountDown({
+ date: +(new Date) + 60000,
+ onEnd() {
+ this.setData({ second: '重新获取验证码' })
+ },
+ render(date) {
+ const sec = this.leadingZeros(date.sec, 2) + ' 秒 '
+ date.sec !== 0 && this.setData({ second: sec, })
+ },
+ })
+ }).catch(error => {
+ wx.hideLoading()
+ util.showToast(error)
+ })
+ }
+
+})
diff --git a/pages/login/index.json b/pages/login/index.json
new file mode 100644
index 0000000..353a2e4
--- /dev/null
+++ b/pages/login/index.json
@@ -0,0 +1,5 @@
+{
+ "usingComponents": {
+ "wux-button": "/components/button/index"
+ }
+}
\ No newline at end of file
diff --git a/pages/login/index.wxml b/pages/login/index.wxml
new file mode 100644
index 0000000..ca897bf
--- /dev/null
+++ b/pages/login/index.wxml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ second || '获取验证码' }}
+
+
+
+ 登录
+
+
+
\ No newline at end of file
diff --git a/pages/login/index.wxss b/pages/login/index.wxss
new file mode 100644
index 0000000..04fdd76
--- /dev/null
+++ b/pages/login/index.wxss
@@ -0,0 +1,17 @@
+/* pages/login/index.wxss */
+.header-box {
+ width: 100%;
+ height: 480rpx;
+ background-color: #009ddf;
+}
+
+.content-box {
+ background-color: #fff;
+ margin:-150rpx 32rpx 0rpx 32rpx;
+ border-radius: 10rpx
+}
+
+.box-input{
+ margin-left:18rpx;
+ font-size: 32rpx
+}
diff --git a/pages/mall/index.wxs b/pages/mall/index.wxs
new file mode 100644
index 0000000..8e1587f
--- /dev/null
+++ b/pages/mall/index.wxs
@@ -0,0 +1,241 @@
+function orderStatus(status) {
+ if (status == 2) {
+ return '已完成'
+ } else if (status == 3) {
+ return '已取消'
+ } else if (status == 4) {
+ return '待调度'
+ } else if (status == 5) {
+ return '待装货'
+ } else if (status == 6) {
+ return '待验货'
+ } else if (status == 7) {
+ return '待入库'
+ } else if (status == 8) {
+ return '已入库'
+ }
+ return ''
+}
+
+function customerType(type) {
+ if (type == 0) {
+ return 'A'
+ } else if (type == 1) {
+ return 'B'
+ } else if (type == 2) {
+ return 'C'
+ }
+ return ''
+}
+
+function colorType(type) {
+ if (type == 0) {
+ return 'blue'
+ } else if (type == 1) {
+ return 'green'
+ } else if (type == 2) {
+ return 'tree'
+ }
+ return ''
+}
+
+function formatePrice(price) {
+ return Number(parseFloat(price) / 100).toFixed(2)
+}
+
+function formateWeight(weight) {
+ return Number(parseFloat(weight) / 1000).toFixed(3)
+}
+
+function deductMoney(money) {
+ if (money < 0) {
+ return '待定'
+ } else if (money === 0) {
+ return money
+ }
+ return (money / 100).toFixed(2)
+}
+
+function deductStatus(deductionStatus) {
+ switch (deductionStatus) {
+ case 0:
+ return '【待客户确认】'
+ case 1:
+ return '【客户同意】'
+ case -1:
+ return '【客户拒绝】'
+ }
+}
+
+function orderDate(order) {
+ if (order.orderStatus == 4) {
+ return '下单日期:' + order.orderDate
+ } else if (order.orderStatus == 5) {
+ return '调度日期' + order.schedulingCreateDate
+ } else if (order.orderStatus == 6) {
+ return '装货日期:' + order.shippingDate
+ } else if (order.orderStatus == 7 || order.orderStatus == 8 || order.orderStatus == 2) {
+ return '验货日期:' + order.inspectionDate
+ }
+ return ''
+}
+
+function isInspectable(order, centerId) {
+ if (!order) {
+ return false
+ }
+ if (order.orderStatus === 6) {
+ if (centerId === 1) {
+ return true
+ }
+ return Number(order.destinationOperationCenterId) === centerId
+ }
+ return false
+}
+
+function isStockinable(order, centerId) {
+ if (!order) {
+ return false
+ }
+ if (order.orderStatus === 7) {
+ if (centerId === 1) {
+ return true
+ }
+ return Number(order.destinationOperationCenterId) === centerId
+ }
+ return false
+}
+
+function canHandle(order, centerId) {
+ if (order.inspectionId > 0 && order.deductMoney == -1) {
+ if (centerId === 1) {
+ return true
+ }
+ return Number(order.destinationOperationCenterId) === centerId
+ }
+ return false
+}
+
+function isAbnormalable(order, centerId) {
+ if (order.orderStatus === 6) {
+ if (centerId === 1) {
+ return true
+ }
+ return Number(order.destinationOperationCenterId) === centerId
+ }
+ return false
+}
+
+function isEmpty(val) {
+ return typeof val === 'undefined' || val === '' || val === null
+}
+
+function formateOrderDate(datetime) {
+ if (isEmpty(datetime)) {
+ return ''
+ }
+ var date = getDate(datetime.trim())
+ var today = getDate()
+ var dayCode = 24 * 60 * 60 * 1000
+ console.log((date.getTime() - today.getTime()) / dayCode)
+ var week = ''
+ if (date.getTime() === today.getTime()) {
+ week = '(今天)'
+ } else if (date.getTime() === today.getTime() + dayCode) {
+ week = '(明天)'
+ } else if (date.getTime() === today.getTime() - dayCode) {
+ week = '(昨天)'
+ } else if (date.getTime() === today.getTime() + dayCode * 2) {
+ week = '(后天)'
+ } else {
+ week = ['(周日)', '(周一)', '(周二)', '(周三)', '(周四)', '(周五)', '(周六)'][date.getDay()]
+ }
+ if (isEmpty(week)) {
+ week = ''
+ }
+ return datetime + week
+}
+
+function getCateName(item) {
+ if (!item.categoriesName){
+ return ''
+ }
+ if (item.categoriesName.toString().length < 10) {
+ return item.categoriesName
+ }
+ return item.categoriesName.substring(0, 10) + '...'
+}
+
+function handleWeight(weight) {
+ if (!weight) {
+ return ''
+ }
+ return '折算重量:' + Number(weight / 1000).toFixed(3) + '吨'
+}
+
+/**
+ * 4: 'green',
+ 5: 'green',
+ 6: 'green',
+ 7: 'green',
+ 8: 'green',
+ 0: 'grey',
+ 1: 'green',
+ 2: 'grey',
+ 3: 'grey'
+ */
+function orderStatusColor(status) {
+ if (status == 4) {
+ return 'yellow'
+ } else if (status == 5) {
+ return 'yellow'
+ } else if (status == 6) {
+ return 'yellow'
+ } else if (status == 7) {
+ return 'yellow'
+ } else if (status == 8) {
+ return 'yellow'
+ } else if (status == 0) {
+ return 'gray'
+ } else if (status == 1) {
+ return 'gray'
+ } else if (status == 2) {
+ return 'blue'
+ } else if (status == 3) {
+ return 'gray'
+ }
+ return ''
+}
+
+function getGuidePrice(cateId, cateList) {
+ for (var i = 0; i < cateList.length; i++) {
+ if (parseInt(cateId) == parseInt(cateList[i].value)) {
+ return '今日指导价:¥' + formatePrice(cateList[i].price) + '元/kg'
+ }
+ }
+ return ''
+}
+
+function offesWeight(offsetWeight, totalWeight) {
+ return offsetWeight > 0.01 * totalWeight
+}
+
+module.exports = {
+ orderStatus: orderStatus,
+ customerType: customerType,
+ colorType: colorType,
+ formatePrice: formatePrice,
+ deductMoney: deductMoney,
+ deductStatus: deductStatus,
+ orderDate: orderDate,
+ isInspectable: isInspectable,
+ canHandle: canHandle,
+ formateWeight: formateWeight,
+ formateOrderDate: formateOrderDate,
+ getCateName: getCateName,
+ handleWeight: handleWeight,
+ orderStatusColor: orderStatusColor,
+ getGuidePrice: getGuidePrice,
+ isStockinable: isStockinable,
+ offesWeight: offesWeight
+}
\ No newline at end of file
diff --git a/pages/mall/index/index.js b/pages/mall/index/index.js
new file mode 100644
index 0000000..559d252
--- /dev/null
+++ b/pages/mall/index/index.js
@@ -0,0 +1,147 @@
+// pages/message/index.js
+const request = require('../../../utils/request'); //导入模块
+const util = require('../../../utils/util');
+const event = require('../../../utils/event.js')
+const float = require('../../../utils/floatObj');
+const app = getApp()
+const formate = 'Y-M-D'
+
+Component({
+ options: {
+ addGlobalClass: true,
+ multipleSlots: true
+ },
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ height: app.globalData.fragmentHeight - 100,
+ CustomBar: app.globalData.CustomBar,
+ tabs: ['待出车', '进行中', '已完成', '进行中', '已完成', '进行中', '已完成', '进行中', '已完成'],
+ loading: true,
+ finished: false,
+ requesting: false,
+ cheapList: [],
+ taskList: [],
+ form: {
+ pageSize: 10,
+ pageNum: 1
+ },
+ token: null
+ },
+
+ lifetimes: {
+ // 生命周期函数,可以为函数,或一个在methods段中定义的方法名
+ attached: function () {
+ this.setData({
+ height: app.globalData.fragmentHeight - 100,
+ CustomBar: app.globalData.CustomBar
+ })
+ event.on('EventMessage', this, this.onEvent)
+ },
+
+ detached: function () {
+ event.remove('EventMessage', this)
+ }
+ },
+
+ methods: {
+
+ onRestart: function () {
+ if (!this.data.firstShow) {
+ this.setData({
+ token: app.globalData.token
+ })
+ this.fetchCheapList()
+ this.fetchTaskList()
+ }
+ this.data.firstShow = true
+ },
+
+ onEvent: function (message) {
+ console.log('mall>>index>>onEvent', message)
+ if(message.what == 1 && util.isEmpty(this.data.token)){
+ // this.setData({ token: app.globalData.token })
+ }
+ },
+
+ onRefresh: function () {
+ if (this.data.loading || this.data.requesting) {
+ this.setData({
+ requesting: false
+ })
+ return
+ }
+ this.setData({
+ ['form.pageNum']: 1,
+ finished: false
+ })
+
+ this.fetchTaskList()
+ },
+
+ fetchCheapList: function () {
+ request.get('/bxe-mall/product/cheapList').then(result => {
+ //成功回调
+ this.setData({ loading: false, cheapList: result.data })
+ console.log(this.data.cheapList.length > 0)
+ }).catch(err => {
+ //异常回调
+ this.setData({ loading: false })
+ util.showToast(err)
+ })
+ },
+
+ fetchTaskList: function () {
+ if (this.data.requesting || this.data.finished) {
+ return
+ }
+ if (this.data.form.pageNum == 1 && this.data.taskList.length == 0) {
+ this.setData({ loading: true })
+ }
+ this.data.requesting = true
+ // /product/cheapList特价产品列表
+ request.get('/bxe-mall/product/groupList', this.data.form).then(result => {
+ //成功回调
+ this.setData({ requesting: false, loading: false })
+ if (result.data.records.length) {
+ var respList = result.data.records
+ let nowList = `taskList[${this.data.taskList.length}]`
+ var num = this.data.form.pageNum
+ var finished = this.data.form.pageNum >= result.data.pages
+ this.setData({
+ [nowList]: respList,
+ total: result.data.total,
+ ['form.pageNum']: (num + 1),
+ finished
+ })
+ }
+ }).catch(err => {
+ //异常回调
+ this.setData({ requesting: false, loading: false })
+ util.showToast(err)
+ })
+ },
+
+ searchList: function (e) {
+ wx.navigateTo({
+ url: '/pages/mall/search-list/index'
+ })
+ },
+
+ lookGroupItem: function (e) {
+ var item = this.data.taskList[e.currentTarget.dataset.page][e.currentTarget.dataset.index]
+ wx.navigateTo({
+ url: '/pages/mall/order-info/index?id=' + item.id
+ })
+ },
+
+ lookCheapItem: function (e) {
+ var item = this.data.cheapList[e.currentTarget.dataset.index]
+ wx.navigateTo({
+ url: '/pages/mall/order-info/index?id=' + item.id
+ })
+ }
+ }
+
+})
\ No newline at end of file
diff --git a/pages/mall/index/index.json b/pages/mall/index/index.json
new file mode 100644
index 0000000..1e25143
--- /dev/null
+++ b/pages/mall/index/index.json
@@ -0,0 +1,9 @@
+{
+ "component": true,
+ "usingComponents": {
+ "refresh-view": "/components/refresh-view/index",
+ "wux-button": "/components/button/index",
+ "wux-tab": "/components/tab/index",
+ "wux-divider": "/components/divider/index"
+ }
+}
\ No newline at end of file
diff --git a/pages/mall/index/index.wxml b/pages/mall/index/index.wxml
new file mode 100644
index 0000000..3381021
--- /dev/null
+++ b/pages/mall/index/index.wxml
@@ -0,0 +1,83 @@
+
+
+
+
+ 原纸商城
+
+
+
+
+
+ 加载中...
+
+
+
+ 暂无数据
+
+
+
+
+
+
+
+
+
+
+
+
+ 特价
+ 专区
+
+ 限时限量 售完即止
+
+
+
+
+
+ {{item.name}}
+ {{item.viewNum}}浏览
+
+ {{item.summary}}
+
+ ¥{{item.price}}
+ 库存:{{item.stockNumber}}件
+
+
+
+
+
+
+
+ 团购
+ 专区
+
+ 大厂品牌 质量保证
+
+
+
+
+
+
+
+ {{item.name}}
+ 已拼{{item.soldNum}}件
+
+ {{item.summary}}
+
+ ¥{{item.price}}
+ 库存:{{item.stockNumber}}件
+
+
+
+
+
+
+
+
+
+ {{finished?'到底了':'加载中...'}}
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/mall/index/index.wxss b/pages/mall/index/index.wxss
new file mode 100644
index 0000000..e190e80
--- /dev/null
+++ b/pages/mall/index/index.wxss
@@ -0,0 +1,127 @@
+/* pages/message/index.wxss */
+
+.swiper-image{
+ height: 120px;
+ border-radius: 6px;
+ width: 100%;
+}
+
+.search-form {
+ background-color: #f5f5f5;
+ line-height: 64rpx;
+ height: 64rpx;
+ font-size: 24rpx;
+ color: var(--black);
+ flex: 1;
+ display: flex;
+ align-items: center;
+ margin: 0 30rpx;
+}
+
+.search-form+.action {
+ margin-right: 30rpx;
+}
+
+.search-form input {
+ flex: 1;
+ padding-right: 30rpx;
+ height: 64rpx;
+ line-height: 64rpx;
+ font-size: 26rpx;
+ background-color: transparent;
+}
+
+.cu-bar .search-form [class*="cuIcon-"] {
+ margin: 0 0.5em 0 0.8em;
+}
+
+.cu-bar .search-form [class*="cuIcon-"]::before {
+ top: 0rpx;
+}
+
+.nav-li {
+ padding: 24rpx;
+ border-radius: 12rpx;
+ background-color: #008AFF;
+ box-shadow: 0px 8px 36px -11px rgba(0, 138, 255, 0.5);
+ width: 100%;
+ margin: 24rpx 0rpx;
+ align-items: center;
+}
+
+.shadow {
+ width: 36px;
+ height: 25px;
+ font-size: 18px;
+ font-family: PingFang-SC-Medium, PingFang-SC;
+ font-weight: 500;
+ color: rgba(255, 255, 255, 1);
+ line-height: 25px;
+ text-shadow: 0px 2px 4px rgba(0, 0, 0, 0.3);
+}
+
+.v-driver {
+ width: 1px;
+ height: 16px;
+ background: rgba(208, 208, 208, 1);
+ border-radius: 1px;
+ margin: 0rpx 24rpx;
+}
+
+.nav-title {
+ font-size: 14px;
+ font-family: PingFang-SC-Regular, PingFang-SC;
+ font-weight: 400;
+ color: rgba(208, 208, 208, 1);
+}
+
+.content {
+ background: rgba(255, 255, 255, 1);
+ border-radius: 6px;
+}
+
+.page-icon {
+ height: 240rpx;
+ width: 240rpx;
+ border-top-left-radius: 12rpx;
+ border-bottom-left-radius: 12rpx;
+}
+
+.page-name {
+ font-size: 16px;
+ font-family: PingFang-SC-Medium, PingFang-SC;
+ font-weight: 500;
+ color: rgba(51, 51, 51, 1);
+ line-height: 22px;
+}
+
+.page-num {
+ margin-top: 8rpx;
+ font-size: 10px;
+ font-family: PingFang-SC-Regular, PingFang-SC;
+ font-weight: 400;
+ color: rgba(51, 51, 51, 1);
+}
+
+.page-btn {
+ height: 27px;
+ background: rgba(255, 66, 43, 1);
+ box-shadow: 0px 4px 14px -6px rgba(255, 43, 45, 0.8);
+ color: white;
+ font-size: 12px;
+}
+
+.page-price {
+ font-size: 16px;
+ font-family: DINAlternate-Bold, DINAlternate;
+ font-weight: bold;
+ color: rgba(255, 66, 43, 1);
+}
+
+.page-stock {
+ font-size: 10px;
+ font-family: PingFang-SC-Regular, PingFang-SC;
+ font-weight: 400;
+ color: rgba(153, 153, 153, 1);
+ line-height: 14px;
+}
\ No newline at end of file
diff --git a/pages/mall/order-detail/index.js b/pages/mall/order-detail/index.js
new file mode 100644
index 0000000..f0dbd09
--- /dev/null
+++ b/pages/mall/order-detail/index.js
@@ -0,0 +1,142 @@
+// pages/task/task-detail/index.js
+import { $wuxDialog } from '../../../components/index'
+const request = require('../../../utils/request'); //导入模块
+const util = require('../../../utils/util');
+const float = require('../../../utils/floatObj');
+const event = require('../../../utils/event.js')
+const app = getApp()
+
+Page({
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ form: {
+ payType: 1,
+ },
+ addressInfo: null
+ },
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad: function (options) {
+ event.on('EventMessage', this, this.onEvent)
+ if (options.json) {
+ var form = JSON.parse(options.json)
+ form.payType = 1
+ // form.totalPrice = float.accAdd(float.accMul(form.unitPrice, form.number), form.dividePrice)
+ form.totalPrice = float.accMul(form.unitPrice, form.number)
+ this.setData({
+ form: form
+ })
+ }
+ },
+ // 事件处理
+ onEvent: function (message) {
+ console.log('mall>>offer>>onEvent', message)
+ if (message.what == 10 && message.arg == 1) {
+ wx.navigateBack()
+ }
+ },
+
+ chooseAddress() {
+ wx.chooseAddress({
+ success: (res) => {
+ this.setData({
+ addressInfo: res
+ })
+ }
+ })
+ },
+
+ checkMode: function (e) {
+ this.setData({
+ ['form.payType']: e.currentTarget.dataset.index
+ })
+ },
+
+ showDialog: function (e) {
+ var that = this
+ $wuxDialog().open({
+ resetOnClose: true,
+ title: '温馨提示',
+ content: '跳过确认事宜之后,没有确认的事项将不在记录,同时意味着您已经装货入仓了,确定跳过?',
+ buttons: [{
+ text: '取消',
+ }, {
+ text: '确定',
+ type: 'primary',
+ onTap(e) {
+ that.setData({
+ step: steps.length + 1
+ })
+ }
+ }]
+ })
+ },
+
+ offerProject: function (e) {
+ if (!this.data.addressInfo) {
+ util.showToast('请选择收货地址')
+ return
+ }
+ if (Number(this.data.form.payType) == 1) {
+ // 微信支付
+ wx.requestPayment({
+ 'timeStamp': '',
+ 'nonceStr': '',
+ 'package': '',
+ 'signType': 'MD5',
+ 'paySign': '',
+ 'success': function (res) {
+
+ },
+ 'fail': function (res) {
+
+ },
+ 'complete': function (res) {
+
+ }
+ })
+ } else {
+ this.postOrder(0)
+ }
+ },
+ // 创建订单
+ postOrder: function(realPrice){
+ var data = {}
+ data.productId = Number(this.data.form.productId)
+ data.skuId = this.data.form.skuId
+ data.number = this.data.form.number
+ data.sellMode = Number(this.data.form.sellMode)
+ data.payType = Number(this.data.form.payType)
+ data.realPrice = realPrice
+ data.unitPrice = this.data.form.unitPrice
+ data.totalPrice = this.data.form.totalPrice
+ data.mobile = this.data.addressInfo.telNumber
+ data.realName = this.data.addressInfo.userName
+ data.address = this.data.addressInfo.provinceName + this.data.addressInfo.cityName + this.data.addressInfo.countyName + this.data.addressInfo.detailInfo
+ // /product/{id}产品详情
+ wx.showLoading({
+ title: '加载中',
+ mask: true
+ })
+ request.post('/bxe-mall/order', data).then(result => {
+ //成功回调
+ wx.hideLoading()
+ wx.navigateTo({
+ url: '/pages/mall/order-result/index?type=1'
+ })
+ }).catch(err => {
+ //异常回调
+ wx.hideLoading()
+ wx.navigateTo({
+ url: '/pages/mall/order-result/index?type=0&message=' + err
+ })
+ })
+ },
+ // event的unregister
+ onUnload: function () {
+ event.remove('EventMessage', this)
+ }
+})
\ No newline at end of file
diff --git a/pages/mall/order-detail/index.json b/pages/mall/order-detail/index.json
new file mode 100644
index 0000000..7059070
--- /dev/null
+++ b/pages/mall/order-detail/index.json
@@ -0,0 +1,6 @@
+{
+ "usingComponents": {
+ "wux-dialog": "/components/dialog/index",
+ "wux-button": "/components/button/index"
+ }
+}
\ No newline at end of file
diff --git a/pages/mall/order-detail/index.wxml b/pages/mall/order-detail/index.wxml
new file mode 100644
index 0000000..f046c66
--- /dev/null
+++ b/pages/mall/order-detail/index.wxml
@@ -0,0 +1,92 @@
+
+
+
+ 返回
+ 订单详情
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/mall/order-detail/index.wxss b/pages/mall/order-detail/index.wxss
new file mode 100644
index 0000000..75ba20a
--- /dev/null
+++ b/pages/mall/order-detail/index.wxss
@@ -0,0 +1,78 @@
+/* pages/task/task-detail/index.wxss */
+
+.margin-top {
+ margin-top: 32rpx;
+}
+
+.header-box {
+ width: 100%;
+ background: rgba(255, 255, 255, 1);
+ box-shadow: 0px 0px 15px -6px rgba(0, 0, 0, 0.32);
+ border-radius: 6px;
+}
+
+.item_border {
+ border-bottom: 1px solid #D0D0D0;
+ padding-bottom: 18rpx;
+}
+
+.offer-label {
+ font-size: 12px;
+ font-family: PingFang-SC-Regular, PingFang-SC;
+ font-weight: 400;
+ color: rgba(208, 208, 208, 1);
+ line-height: 17px;
+}
+
+.offer-val {
+ font-size: 12px;
+ font-family: PingFang-SC-Regular, PingFang-SC;
+ font-weight: 400;
+ color: rgba(208, 208, 208, 1);
+ line-height: 17px;
+}
+
+.page-icon {
+ height: 120rpx;
+ width: 120rpx;
+ border-radius: 12rpx;
+}
+
+.page-name {
+ font-size: 16px;
+ font-family: PingFang-SC-Medium, PingFang-SC;
+ font-weight: 500;
+ color: rgba(51, 51, 51, 1);
+ line-height: 22px;
+}
+
+.page-num {
+ margin-top: 8rpx;
+ font-size: 10px;
+ font-family: PingFang-SC-Regular, PingFang-SC;
+ font-weight: 400;
+ color: rgba(51, 51, 51, 1);
+}
+
+.offer-hint {
+ font-size: 12px;
+ font-family: PingFang-SC-Regular, PingFang-SC;
+ font-weight: 400;
+ color: rgba(208, 208, 208, 1);
+ line-height: 17px;
+}
+
+.offer-btn {
+ width:150px;
+ height:45px;
+ background: linear-gradient(312deg, rgba(38, 125, 214, 1) 0%, rgba(0, 138, 255, 1) 100%);
+ box-shadow: 0px 10px 13px -8px rgba(35, 126, 217, 0.53);
+ border-radius: 23px;
+ color: white;
+ font-size: 32rpx;
+ margin-left: 32rpx;
+}
+
+button::after {
+ border: none;
+}
\ No newline at end of file
diff --git a/pages/mall/order-info/index.js b/pages/mall/order-info/index.js
new file mode 100644
index 0000000..a603fee
--- /dev/null
+++ b/pages/mall/order-info/index.js
@@ -0,0 +1,211 @@
+// pages/order/order-info/index.js
+const request = require('../../../utils/request'); //导入模块
+const util = require('../../../utils/util');
+const float = require('../../../utils/floatObj');
+const event = require('../../../utils/event.js')
+const app = getApp()
+
+Page({
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ token: app.globalData.token,
+ backStr: '返回',
+ orderInfo: null,
+ sukList: [],
+ form: {
+ productId: null,
+ skuId: null,
+ number: 1,
+ unitPrice: 0
+ },
+ skuJson: '',
+ amount: null
+ },
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad: function (options) {
+ this.setData({ token: app.globalData.token })
+ event.on('EventMessage', this, this.onEvent)
+ if (options.id) {
+ wx.showLoading({
+ title: '加载中',
+ mask: true
+ })
+ // /product/{id}产品详情
+ request.get('/bxe-mall/product/' + options.id).then(result => {
+ //成功回调
+ this.setData({
+ ['form.productId']: options.id,
+ orderInfo: result.data
+ })
+ wx.hideLoading()
+ }).catch(err => {
+ //异常回调
+ wx.hideLoading()
+ util.showToast(err)
+ })
+ }
+ if(getCurrentPages().length == 1){
+ this.setData({
+ backStr: '首页'
+ })
+ }
+ },
+ // 事件处理
+ onEvent: function (message) {
+ console.log('mall>>order>>onEvent', message)
+ if(message.what == 1 && util.isEmpty(this.data.token)){
+ this.setData({ token: app.globalData.token })
+ } else if(message.what == 10 && message.arg == 1){
+ wx.navigateBack()
+ }
+ },
+ // phone: function (e) {
+ // var mobile = e.currentTarget.dataset.index
+ // if (util.checkPhone(mobile)) {
+ // wx.makePhoneCall({
+ // phoneNumber: mobile
+ // })
+ // }
+ // },
+ // 图片查看
+ viewImage: function (e) {
+ wx.previewImage({
+ urls: this.data.orderInfo.imgList,
+ current: e.currentTarget.dataset.url
+ });
+ },
+ tagClick: function (e) {
+ var sukId = e.currentTarget.dataset.suk
+ var id = e.currentTarget.dataset.index
+ var attributeList = this.data.orderInfo.attributeList
+ for (let i = 0; i < attributeList.length; i++) {
+ if (attributeList[i].id == sukId) {
+ for (let k = 0; k < attributeList[i].values.length; k++) {
+ const element = attributeList[i].values[k];
+ element.select = false
+ if (element.id == id) {
+ element.select = true
+ }
+ }
+ }
+ }
+ if (this.data.sukList.length == 0) {
+ this.data.sukList.push({
+ skuId: sukId,
+ id: id
+ })
+ this.setData({
+ ['orderInfo.attributeList']: attributeList
+ })
+ } else {
+ for (let index = 0; index < this.data.sukList.length; index++) {
+ const element = this.data.sukList[index];
+ if (element.skuId == sukId) {
+ this.data.sukList[index].id = id
+ this.setData({
+ ['orderInfo.attributeList']: attributeList
+ })
+ return
+ }
+ }
+ this.data.sukList.push({
+ skuId: sukId,
+ id: id
+ })
+ this.setData({
+ ['orderInfo.attributeList']: attributeList
+ })
+ if (this.data.sukList.length == this.data.orderInfo.attributeList.length) {
+ var match = {}
+ for (let index = 0; index < this.data.sukList.length; index++) {
+ const element = this.data.sukList[index];
+ match[element.skuId] = element.id
+
+ }
+ this.data.skuJson = JSON.stringify(match)
+ this.data.skuJson = this.data.skuJson.substring(1, this.data.skuJson.length - 1)
+ this.onNumChange(null)
+ }
+ }
+ },
+ // 数量变化的函数监听
+ onNumChange: function (e) {
+ if (e) {
+ this.setData({
+ ['form.number']: e.detail.value
+ })
+ // 如果查询到了价格,进行价格计算
+ if(this.data.form.unitPrice){
+ this.setData({
+ amount: float.accMul(this.data.form.unitPrice, this.data.form.number)
+ })
+ }
+ } else if (this.data.sukList.length == this.data.orderInfo.attributeList.length) {
+ // 根据规格,克重,以及其他筛选价格
+ for (let index = 0; index < this.data.orderInfo.skuList.length; index++) {
+ const element = this.data.orderInfo.skuList[index];
+ if(JSON.stringify(element).indexOf(this.data.skuJson) >= 0){
+ this.data.form.unitPrice = Number(element.price)
+ this.data.form.dividePrice = Number(element.dividePrice)
+ this.data.form.skuId = element.id
+ }
+ }
+ // 如果查询到了价格,进行价格计算
+ if(this.data.form.unitPrice){
+ this.setData({
+ amount: float.accMul(this.data.form.unitPrice, this.data.form.number)
+ })
+ }
+ }
+ },
+ // 进入支付流程
+ offerProject: function (e) {
+ var attributeList = this.data.orderInfo.attributeList
+ for (let i = 0; i < attributeList.length; i++) {
+ var toast = '请选择' + attributeList[i].name
+ for (let k = 0; k < attributeList[i].values.length; k++) {
+ const element = attributeList[i].values[k];
+ if (element.select) {
+ toast = ''
+ break
+ }
+ }
+ if (!util.isEmpty(toast)) {
+ util.showToast(toast)
+ return
+ }
+ }
+ this.data.form.summary = this.data.orderInfo.summary
+ this.data.form.sellMode = this.data.orderInfo.sellMode
+ this.data.form.name = this.data.orderInfo.name
+ this.data.form.litimgUrl = this.data.orderInfo.litimgUrl
+ this.data.form.unit = this.data.orderInfo.unit
+ wx.navigateTo({
+ url: '/pages/mall/order-offer/index?json=' + JSON.stringify(this.data.form)
+ })
+ },
+ // 就行登录流程;然后进入下一步的支付操作
+ onGotPhoneNumber: function(e){
+ request.loginWechat(e.detail).then(data => {
+ this.offerProject()
+ })
+ },
+ onShareAppMessage: function() {
+ return {
+ title: this.data.orderInfo.name,
+ path: '/pages/mall/order-info/index?id=' + this.data.orderInfo.id,
+ imageUrl: this.data.orderInfo.litimgUrl,
+ success: function(res) {
+ console.log(res)
+ }
+ }
+ },
+ // event的unregister
+ onUnload: function(){
+ event.remove('EventMessage', this)
+ }
+})
\ No newline at end of file
diff --git a/pages/mall/order-info/index.json b/pages/mall/order-info/index.json
new file mode 100644
index 0000000..9840c5f
--- /dev/null
+++ b/pages/mall/order-info/index.json
@@ -0,0 +1,6 @@
+{
+ "usingComponents": {
+ "wux-tag": "/components/tag/index",
+ "wux-input-number": "/components/input-number/index"
+}
+}
\ No newline at end of file
diff --git a/pages/mall/order-info/index.wxml b/pages/mall/order-info/index.wxml
new file mode 100644
index 0000000..1ea2a01
--- /dev/null
+++ b/pages/mall/order-info/index.wxml
@@ -0,0 +1,70 @@
+
+
+ {{backStr}}
+ 商品详情
+
+
+
+
+
+
+
+
+
+
+ ¥{{orderInfo.price}}
+ 库存{{orderInfo.stockNumber}}件
+
+
+ {{orderInfo.viewNum}} 浏览
+
+
+
+
+ {{orderInfo.name}}
+
+
+ 选择{{sukItem.name}}
+
+
+ {{item.val}}
+ {{item.val}}
+
+
+
+
+
+
+ 购买数量
+
+
+
+
+ 商品描述
+ {{orderInfo.summary}}
+
+
+
+
+
+ 送货说明
+ {{orderInfo.summary}}
+
+
+
+
+
+
+
+ 合计:
+ ¥{{amount}}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/mall/order-info/index.wxs b/pages/mall/order-info/index.wxs
new file mode 100644
index 0000000..c4527a7
--- /dev/null
+++ b/pages/mall/order-info/index.wxs
@@ -0,0 +1,148 @@
+function getDispatchDetailByIndex(form, index) {
+ if (index === 5) {
+ if (!isEmpty(form.schedulingNotesVehicleVos) && form.schedulingNotesVehicleVos.length >= 1) {
+ var centerName = '外部'
+ if (!isEmpty(form.schedulingNotesVehicleVos[0].vehicleOperationCenterName)) {
+ centerName = form.schedulingNotesVehicleVos[0].vehicleOperationCenterName.replace('工厂', '')
+ }
+ return '[' + centerName + ']' + form.schedulingNotesVehicleVos[0].driver
+ }
+ } else if (index === 6) {
+ if (!isEmpty(form.schedulingNotesVehicleVos) && form.schedulingNotesVehicleVos.length >= 1) {
+ return form.schedulingNotesVehicleVos[0].phone
+ }
+ } else if (index === 7) {
+ if (!isEmpty(form.schedulingNotesVehicleVos) && form.schedulingNotesVehicleVos.length >= 1) {
+ return form.schedulingNotesVehicleVos[0].plateNumber
+ }
+ } else if (index === 8) {
+ if (!isEmpty(form.schedulingNotesVehicleVos) && form.schedulingNotesVehicleVos.length >= 1) {
+ return (form.schedulingNotesVehicleVos[0].wheelBase / 10 ).toFixed(1)
+ }
+ } else if (index === 9) {
+ if (!isEmpty(form.schedulingNotesVehicleVos) && form.schedulingNotesVehicleVos.length >= 2) {
+ var wai = ''
+ if (form.schedulingNotesVehicleVos[1].isSelfSupport !== 1 ) {
+ wai = '/外'
+ }
+ return (
+ form.schedulingNotesVehicleVos[1].plateNumber +
+ '(' + getTruckString(form.schedulingNotesVehicleVos[1].vehicleType) + ')' + wai
+ )
+ }
+ } else if (index === 10) {
+ if (!isEmpty(form.schedulingNotesVehicleVos) && form.schedulingNotesVehicleVos.length >= 2) {
+ return form.schedulingNotesVehicleVos[1].driver
+ }
+ } else if (index === 11) {
+ if (!isEmpty(form.schedulingNotesVehicleVos) && form.schedulingNotesVehicleVos.length > 2) {
+ var wai2 = ''
+ if (form.schedulingNotesVehicleVos[2].isSelfSupport !== 1) {
+ wai2 = '/外'
+ }
+ return (
+ form.schedulingNotesVehicleVos[2].plateNumber +
+ '(' + getTruckString(form.schedulingNotesVehicleVos[2].vehicleType) + ')' + wai2
+ )
+ }
+ } else if (index === 12) {
+ if (!isEmpty(form.schedulingNotesVehicleVos) && form.schedulingNotesVehicleVos.length > 2) {
+ return form.schedulingNotesVehicleVos[2].driver
+ }
+ } else if (index === 13) {
+ var loaderString = ''
+ if (!isEmpty(form.loaders)) {
+ for (var i = 0; i < form.loaders.length; i++) {
+ if (isEmpty(loaderString)) {
+ loaderString += toLoaderString( form.loaders[i])
+ } else {
+ loaderString += ';' + toLoaderString(form.loaders[i])
+ }
+ }
+ }
+ return loaderString
+ }
+ return ''
+}
+
+function isEmpty(val) {
+ return typeof val === 'undefined' || val === '' || val === null
+}
+
+function getTruckString(type){
+ if (type == 1) {
+ return '抱车'
+ } else if (type == 2) {
+ return '铲车'
+ } else if (type == 3) {
+ return '叉拖车'
+ } else if (type == 4) {
+ return '货车'
+ }
+ return ''
+}
+
+function toLoaderString(loader) {
+ var ldString = ''
+ var centerName = '外部'
+ if (!isEmpty(loader.operationCenterName)) {
+ centerName = loader.operationCenterName.replace('工厂', '')
+ }
+ ldString += '[' + centerName + ']'
+ if (!isEmpty(loader.name)) {
+ ldString += loader.name
+ }
+ if (loader.isEmployee === 0) {
+ ldString += '/外'
+ }
+ return ldString
+}
+
+function showLayoutByIndex(form, index){
+ if (index === 1) {
+ if (!isEmpty(form.schedulingNotesVehicleVos) && form.schedulingNotesVehicleVos.length >= 2) {
+ return ( form.schedulingNotesVehicleVos[1].vehicleType === 1 || form.schedulingNotesVehicleVos[1].vehicleType === 2)
+ }
+ } else if (index === 2) {
+ if (!isEmpty(form.schedulingNotesVehicleVos) && form.schedulingNotesVehicleVos.length >= 3) {
+ return (form.schedulingNotesVehicleVos[2].vehicleType === 3 )
+ }
+ } else if (index === 3) {
+ if (!isEmpty(form.loaders) && form.loaders.length >= 1) {
+ return true
+ }
+ }
+ return false
+}
+
+function getSchedulingDate(form){
+ if (isEmpty(form.schedulingDate)) {
+ return ''
+ }
+ var date = getDate(form.schedulingDate.trim())
+ var today = getDate()
+ var dayCode = 24 * 60 * 60 * 1000
+ console.log((date.getTime() - today.getTime()) / dayCode)
+ var week = ''
+ if (date.getTime() === today.getTime()) {
+ week = '(今天)'
+ } else if (date.getTime() === today.getTime() + dayCode) {
+ week = '(明天)'
+ } else if (date.getTime() === today.getTime() - dayCode) {
+ week = '(昨天)'
+ } else if (date.getTime() === today.getTime() + dayCode * 2) {
+ week = '(后天)'
+ } else {
+ week = ['(周日)', '(周一)', '(周二)', '(周三)', '(周四)', '(周五)', '(周六)'][date.getDay()]
+ }
+ if (isEmpty(week)) {
+ week = ''
+ }
+ return form.schedulingDate + week
+}
+
+module.exports = {
+ getSchedulingDate: getSchedulingDate,
+ getDispatchDetailByIndex: getDispatchDetailByIndex,
+ showLayoutByIndex: showLayoutByIndex
+}
\ No newline at end of file
diff --git a/pages/mall/order-info/index.wxss b/pages/mall/order-info/index.wxss
new file mode 100644
index 0000000..f599e63
--- /dev/null
+++ b/pages/mall/order-info/index.wxss
@@ -0,0 +1,39 @@
+/* pages/order/order-info/index.wxss */
+.margin-top {
+ margin-top: 18rpx;
+}
+
+.swiper {
+ height: 450rpx;
+}
+
+.detail-price {
+ font-size: 14px;
+ font-family: DINAlternate-Bold, DINAlternate;
+ font-weight: bold;
+ color: rgba(255, 66, 43, 1);
+ line-height: 20px;
+}
+
+.text-name {
+ font-size: 16px;
+ font-family: PingFang-SC-Medium, PingFang-SC;
+ font-weight: 500;
+ color: rgba(51, 51, 51, 1);
+ line-height: 22px;
+}
+
+.offer-btn {
+ width: 150px;
+ height: 45px;
+ background: linear-gradient(312deg, rgba(38, 125, 214, 1) 0%, rgba(0, 138, 255, 1) 100%);
+ box-shadow: 0px 10px 13px -8px rgba(35, 126, 217, 0.53);
+ border-radius: 23px;
+ color: white;
+ font-size: 32rpx;
+ margin-left: 32rpx;
+}
+
+button::after {
+ border: none;
+}
\ No newline at end of file
diff --git a/pages/mall/order-list/index.js b/pages/mall/order-list/index.js
new file mode 100644
index 0000000..a3fa47a
--- /dev/null
+++ b/pages/mall/order-list/index.js
@@ -0,0 +1,42 @@
+// pages/order/order-list/index.js
+const event = require('../../../utils/event.js')
+const app = getApp()
+
+Page({
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ height: app.globalData.fragmentHeight - 80,
+ index: 1,
+ tabs: ['待出车', '进行中', '已完成', '进行中', '已完成', '进行中', '已完成', '进行中', '已完成'],
+ loading: true,
+ finished: false,
+ requesting: false,
+ taskList: [],
+ form: {
+ pageSize: 10,
+ pageNum: 1
+ },
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad: function (options) {
+ this.setData({
+ height: app.globalData.fragmentHeight - 80,
+ CustomBar: app.globalData.CustomBar,
+ index: Number(options.index)
+ })
+ },
+
+ onTabChange: function (e) {
+ if(this.data.index == Number(e.detail.index)){
+ return
+ }
+ this.data.index = Number(e.detail.index)
+ console.log(e.detail.index)
+ }
+
+})
\ No newline at end of file
diff --git a/pages/mall/order-list/index.json b/pages/mall/order-list/index.json
new file mode 100644
index 0000000..43c16dd
--- /dev/null
+++ b/pages/mall/order-list/index.json
@@ -0,0 +1,5 @@
+{
+ "usingComponents": {
+ "wux-tab": "/components/tab/index"
+ }
+}
\ No newline at end of file
diff --git a/pages/mall/order-list/index.wxml b/pages/mall/order-list/index.wxml
new file mode 100644
index 0000000..3122616
--- /dev/null
+++ b/pages/mall/order-list/index.wxml
@@ -0,0 +1,75 @@
+
+
+ 返回
+ 全部订单
+
+
+
+
+
+
+
+
+
+
+ 加载中...
+
+
+
+ 暂无消息
+
+
+
+
+
+
+ {{order.getCateName(item)}}
+ (共{{ item.cateNum }}个)
+
+
+ {{item.orderStatusStr}}
+
+
+
+ 预估重量(吨):{{order.formateWeight(item.estimateWeight)}}
+ 预估金额(元):{{order.formatePrice(item.estimatePrice)}}
+
+
+ 下单时间:{{item.createTime}}
+
+ 查看详情
+
+
+
+
+
+
+
+ {{finished?'已经全部加载':'加载中...'}}
+
+
+
\ No newline at end of file
diff --git a/pages/mall/order-list/index.wxss b/pages/mall/order-list/index.wxss
new file mode 100644
index 0000000..7709664
--- /dev/null
+++ b/pages/mall/order-list/index.wxss
@@ -0,0 +1 @@
+/* pages/order/order-list/index.wxss */
\ No newline at end of file
diff --git a/pages/mall/order-offer/index.js b/pages/mall/order-offer/index.js
new file mode 100644
index 0000000..f0dbd09
--- /dev/null
+++ b/pages/mall/order-offer/index.js
@@ -0,0 +1,142 @@
+// pages/task/task-detail/index.js
+import { $wuxDialog } from '../../../components/index'
+const request = require('../../../utils/request'); //导入模块
+const util = require('../../../utils/util');
+const float = require('../../../utils/floatObj');
+const event = require('../../../utils/event.js')
+const app = getApp()
+
+Page({
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ form: {
+ payType: 1,
+ },
+ addressInfo: null
+ },
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad: function (options) {
+ event.on('EventMessage', this, this.onEvent)
+ if (options.json) {
+ var form = JSON.parse(options.json)
+ form.payType = 1
+ // form.totalPrice = float.accAdd(float.accMul(form.unitPrice, form.number), form.dividePrice)
+ form.totalPrice = float.accMul(form.unitPrice, form.number)
+ this.setData({
+ form: form
+ })
+ }
+ },
+ // 事件处理
+ onEvent: function (message) {
+ console.log('mall>>offer>>onEvent', message)
+ if (message.what == 10 && message.arg == 1) {
+ wx.navigateBack()
+ }
+ },
+
+ chooseAddress() {
+ wx.chooseAddress({
+ success: (res) => {
+ this.setData({
+ addressInfo: res
+ })
+ }
+ })
+ },
+
+ checkMode: function (e) {
+ this.setData({
+ ['form.payType']: e.currentTarget.dataset.index
+ })
+ },
+
+ showDialog: function (e) {
+ var that = this
+ $wuxDialog().open({
+ resetOnClose: true,
+ title: '温馨提示',
+ content: '跳过确认事宜之后,没有确认的事项将不在记录,同时意味着您已经装货入仓了,确定跳过?',
+ buttons: [{
+ text: '取消',
+ }, {
+ text: '确定',
+ type: 'primary',
+ onTap(e) {
+ that.setData({
+ step: steps.length + 1
+ })
+ }
+ }]
+ })
+ },
+
+ offerProject: function (e) {
+ if (!this.data.addressInfo) {
+ util.showToast('请选择收货地址')
+ return
+ }
+ if (Number(this.data.form.payType) == 1) {
+ // 微信支付
+ wx.requestPayment({
+ 'timeStamp': '',
+ 'nonceStr': '',
+ 'package': '',
+ 'signType': 'MD5',
+ 'paySign': '',
+ 'success': function (res) {
+
+ },
+ 'fail': function (res) {
+
+ },
+ 'complete': function (res) {
+
+ }
+ })
+ } else {
+ this.postOrder(0)
+ }
+ },
+ // 创建订单
+ postOrder: function(realPrice){
+ var data = {}
+ data.productId = Number(this.data.form.productId)
+ data.skuId = this.data.form.skuId
+ data.number = this.data.form.number
+ data.sellMode = Number(this.data.form.sellMode)
+ data.payType = Number(this.data.form.payType)
+ data.realPrice = realPrice
+ data.unitPrice = this.data.form.unitPrice
+ data.totalPrice = this.data.form.totalPrice
+ data.mobile = this.data.addressInfo.telNumber
+ data.realName = this.data.addressInfo.userName
+ data.address = this.data.addressInfo.provinceName + this.data.addressInfo.cityName + this.data.addressInfo.countyName + this.data.addressInfo.detailInfo
+ // /product/{id}产品详情
+ wx.showLoading({
+ title: '加载中',
+ mask: true
+ })
+ request.post('/bxe-mall/order', data).then(result => {
+ //成功回调
+ wx.hideLoading()
+ wx.navigateTo({
+ url: '/pages/mall/order-result/index?type=1'
+ })
+ }).catch(err => {
+ //异常回调
+ wx.hideLoading()
+ wx.navigateTo({
+ url: '/pages/mall/order-result/index?type=0&message=' + err
+ })
+ })
+ },
+ // event的unregister
+ onUnload: function () {
+ event.remove('EventMessage', this)
+ }
+})
\ No newline at end of file
diff --git a/pages/mall/order-offer/index.json b/pages/mall/order-offer/index.json
new file mode 100644
index 0000000..7059070
--- /dev/null
+++ b/pages/mall/order-offer/index.json
@@ -0,0 +1,6 @@
+{
+ "usingComponents": {
+ "wux-dialog": "/components/dialog/index",
+ "wux-button": "/components/button/index"
+ }
+}
\ No newline at end of file
diff --git a/pages/mall/order-offer/index.wxml b/pages/mall/order-offer/index.wxml
new file mode 100644
index 0000000..ed3261f
--- /dev/null
+++ b/pages/mall/order-offer/index.wxml
@@ -0,0 +1,92 @@
+
+
+
+ 返回
+ 确认订单
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/mall/order-offer/index.wxss b/pages/mall/order-offer/index.wxss
new file mode 100644
index 0000000..75ba20a
--- /dev/null
+++ b/pages/mall/order-offer/index.wxss
@@ -0,0 +1,78 @@
+/* pages/task/task-detail/index.wxss */
+
+.margin-top {
+ margin-top: 32rpx;
+}
+
+.header-box {
+ width: 100%;
+ background: rgba(255, 255, 255, 1);
+ box-shadow: 0px 0px 15px -6px rgba(0, 0, 0, 0.32);
+ border-radius: 6px;
+}
+
+.item_border {
+ border-bottom: 1px solid #D0D0D0;
+ padding-bottom: 18rpx;
+}
+
+.offer-label {
+ font-size: 12px;
+ font-family: PingFang-SC-Regular, PingFang-SC;
+ font-weight: 400;
+ color: rgba(208, 208, 208, 1);
+ line-height: 17px;
+}
+
+.offer-val {
+ font-size: 12px;
+ font-family: PingFang-SC-Regular, PingFang-SC;
+ font-weight: 400;
+ color: rgba(208, 208, 208, 1);
+ line-height: 17px;
+}
+
+.page-icon {
+ height: 120rpx;
+ width: 120rpx;
+ border-radius: 12rpx;
+}
+
+.page-name {
+ font-size: 16px;
+ font-family: PingFang-SC-Medium, PingFang-SC;
+ font-weight: 500;
+ color: rgba(51, 51, 51, 1);
+ line-height: 22px;
+}
+
+.page-num {
+ margin-top: 8rpx;
+ font-size: 10px;
+ font-family: PingFang-SC-Regular, PingFang-SC;
+ font-weight: 400;
+ color: rgba(51, 51, 51, 1);
+}
+
+.offer-hint {
+ font-size: 12px;
+ font-family: PingFang-SC-Regular, PingFang-SC;
+ font-weight: 400;
+ color: rgba(208, 208, 208, 1);
+ line-height: 17px;
+}
+
+.offer-btn {
+ width:150px;
+ height:45px;
+ background: linear-gradient(312deg, rgba(38, 125, 214, 1) 0%, rgba(0, 138, 255, 1) 100%);
+ box-shadow: 0px 10px 13px -8px rgba(35, 126, 217, 0.53);
+ border-radius: 23px;
+ color: white;
+ font-size: 32rpx;
+ margin-left: 32rpx;
+}
+
+button::after {
+ border: none;
+}
\ No newline at end of file
diff --git a/pages/mall/order-result/index.js b/pages/mall/order-result/index.js
new file mode 100644
index 0000000..af9d7fa
--- /dev/null
+++ b/pages/mall/order-result/index.js
@@ -0,0 +1,53 @@
+// pages/mall/order-result/index.js
+const event = require('../../../utils/event.js')
+
+Page({
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ icon: {
+ type: 'success',
+ color: '#008AFF',
+ },
+ buttons: [{
+ type: 'positive',
+ block: true,
+ text: '返回',
+ }],
+ title: '支付成功',
+ label: '订单提交成功',
+ message: '订单状态返回我的订单查看',
+ type: 0
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad: function (options) {
+ this.data.type = Number(options.type)
+ if(this.data.type == 0){
+ var msg = '订单状态返回我的订单查看'
+ if(options.message){
+ msg = options.message
+ }
+ this.setData({
+ ['icon.type']: 'warn',
+ ['icon.color']: '#ef473a',
+ ['buttons[0].type']: 'light',
+ title: '支付失败',
+ label: '订单提交失败',
+ message: msg
+ })
+ }
+ },
+
+ onClick: function(e) {
+ wx.navigateBack()
+ },
+ // 离开之前发送支付结果的消息
+ onUnload: function () {
+ event.emit('EventMessage', { what: 10, arg: Number(this.data.type), desc: 'Offer' })
+ }
+
+})
\ No newline at end of file
diff --git a/pages/mall/order-result/index.json b/pages/mall/order-result/index.json
new file mode 100644
index 0000000..aa64943
--- /dev/null
+++ b/pages/mall/order-result/index.json
@@ -0,0 +1,5 @@
+{
+ "usingComponents": {
+ "wux-result": "/components/result/index"
+ }
+}
\ No newline at end of file
diff --git a/pages/mall/order-result/index.wxml b/pages/mall/order-result/index.wxml
new file mode 100644
index 0000000..87da27f
--- /dev/null
+++ b/pages/mall/order-result/index.wxml
@@ -0,0 +1,7 @@
+
+
+ 返回
+ {{title}}
+
+
+
\ No newline at end of file
diff --git a/pages/mall/order-result/index.wxss b/pages/mall/order-result/index.wxss
new file mode 100644
index 0000000..2c9d951
--- /dev/null
+++ b/pages/mall/order-result/index.wxss
@@ -0,0 +1 @@
+/* pages/mall/order-result/index.wxss */
\ No newline at end of file
diff --git a/pages/mall/search-list/index.js b/pages/mall/search-list/index.js
new file mode 100644
index 0000000..e7ab9b5
--- /dev/null
+++ b/pages/mall/search-list/index.js
@@ -0,0 +1,181 @@
+// pages/message/index.js
+const request = require('../../../utils/request'); //导入模块
+const util = require('../../../utils/util');
+const event = require('../../../utils/event.js')
+const float = require('../../../utils/floatObj');
+const app = getApp()
+const formate = 'Y-M-D'
+
+Page({
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ height: app.globalData.fragmentHeight,
+ CustomBar: app.globalData.CustomBar,
+ finished: false,
+ requesting: false,
+ rearchStringList: [],
+ taskList: [],
+ form: {
+ name: '',
+ pageSize: 10,
+ pageNum: 1
+ },
+ clearClick: false,
+ focus: true
+ },
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad: function (options) {
+ this.setData({
+ height: app.globalData.fragmentHeight - 100,
+ CustomBar: app.globalData.CustomBar,
+ })
+ var that = this
+ wx.getStorage({
+ key: 'mall-search',
+ success (res) {
+ that.setData({
+ rearchStringList: res.data.split(',')
+ })
+ }
+ })
+ },
+
+ onEvent: function (message) {
+ console.log('index.onEvent', message)
+ },
+
+ bindSearch: function (e) {
+ var word = e.detail.value
+ if(this.data.clearClick && util.isEmpty(this.data.form.name)){
+ this.data.clearClick = false
+ this.setData({ focus: true })
+ return
+ }
+ if(word.indexOf(',') >= 0){
+ word = word.replace(',', '')
+ }
+ this.setData({ ['form.name']: word })
+ },
+
+ bindFocus: function (e) {
+ this.setData({ focus: true })
+ },
+
+ clearHistory: function (e) {
+ var that = this
+ wx.removeStorage({
+ key: 'mall-search',
+ success (res) {
+ that.setData({
+ rearchStringList: []
+ })
+ }
+ })
+ },
+
+ clearInput: function (e) {
+ this.data.clearClick = true
+ this.setData({ ['form.name']: '', focus: true })
+ var that = this
+ setTimeout(function () {
+ that.data.clearClick = false
+ }, 100);
+ },
+
+ startSearch: function (e) {
+ if(util.isEmpty(this.data.form.name)){
+ util.showToast('请输入要搜索的关键字')
+ return
+ }
+ this.setData({
+ taskList: [],
+ ['form.pageNum']: 1,
+ finished: false
+ })
+ this.fetchTaskList()
+ },
+
+ fetchTaskList: function () {
+ if (this.data.requesting || this.data.finished) {
+ return
+ }
+ this.data.requesting = true
+ wx.showLoading({ title: '搜索中', mask: true })
+ // /product/list产品列表
+ request.get('/bxe-mall/product/list', this.data.form).then(result => {
+ //成功回调
+ this.data.requesting = false
+ this.setData({ focus: false })
+ if (result.data.records.length) {
+ var respList = result.data.records
+ let nowList = `taskList[${this.data.taskList.length}]`
+ var num = this.data.form.pageNum
+ var finished = this.data.form.pageNum >= result.data.pages
+ var strList = this.data.rearchStringList
+ if(strList.indexOf(this.data.form.name) < 0){
+ strList.splice(0, 0, this.data.form.name)
+ }
+ this.setData({
+ rearchStringList: strList,
+ [nowList]: respList,
+ total: result.data.total,
+ ['form.pageNum']: (num + 1),
+ finished
+ })
+ } else {
+ var strList = this.data.rearchStringList
+ if(strList.indexOf(this.data.form.name) < 0){
+ strList.splice(0, 0, this.data.form.name)
+ }
+ this.setData({
+ rearchStringList: strList,
+ focus: false
+ })
+ }
+ wx.hideLoading()
+ }).catch(err => {
+ //异常回调
+ wx.hideLoading()
+ this.data.requesting = false
+ console.log()
+ var strList = this.data.rearchStringList
+ if(strList.indexOf(this.data.form.name) < 0){
+ strList.splice(0, 0, this.data.form.name)
+ }
+ this.setData({
+ rearchStringList: strList,
+ focus: false
+ })
+ util.showToast(err)
+ });
+ },
+
+ tagClick: function (e) {
+ this.setData({
+ ['form.name']: this.data.rearchStringList[e.currentTarget.dataset.index]
+ })
+ this.startSearch(null)
+ },
+
+ lookItem: function (e) {
+ var item = this.data.taskList[e.currentTarget.dataset.page][e.currentTarget.dataset.index]
+ wx.navigateTo({
+ url: '/pages/mall/order-info/index?id=' + item.id
+ })
+ },
+
+ onUnload() {
+ if(this.data.rearchStringList.length){
+ try {
+ wx.setStorageSync('mall-search', this.data.rearchStringList.toString())
+ } catch (e) {
+
+ }
+ }
+ }
+
+})
\ No newline at end of file
diff --git a/pages/mall/search-list/index.json b/pages/mall/search-list/index.json
new file mode 100644
index 0000000..6879cd9
--- /dev/null
+++ b/pages/mall/search-list/index.json
@@ -0,0 +1,7 @@
+{
+ "usingComponents": {
+ "refresh-view": "/components/refresh-view/index",
+ "wux-button": "/components/button/index",
+ "wux-tab": "/components/tab/index"
+ }
+}
\ No newline at end of file
diff --git a/pages/mall/search-list/index.wxml b/pages/mall/search-list/index.wxml
new file mode 100644
index 0000000..18fbf64
--- /dev/null
+++ b/pages/mall/search-list/index.wxml
@@ -0,0 +1,60 @@
+
+
+
+ 返回
+ 原纸商城
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索历史
+
+
+
+
+ {{item}}
+
+
+
+
+
+ 暂无数据
+
+
+
+
+
+
+
+ {{item.name}}
+ 已拼{{item.soldNum}}件
+
+ {{item.summary}}
+
+ ¥{{item.price}}
+ 库存:{{item.stockNumber}}件
+
+
+
+
+
+
+
+
+ {{finished?'':'加载中...'}}
+
+
+
+
\ No newline at end of file
diff --git a/pages/mall/search-list/index.wxss b/pages/mall/search-list/index.wxss
new file mode 100644
index 0000000..634c21f
--- /dev/null
+++ b/pages/mall/search-list/index.wxss
@@ -0,0 +1,86 @@
+/* pages/message/index.wxss */
+
+.search-form {
+ background-color: #f5f5f5;
+ line-height: 64rpx;
+ height: 64rpx;
+ font-size: 24rpx;
+ color: var(--black);
+ flex: 1;
+ display: flex;
+ align-items: center;
+ margin: 0 30rpx;
+}
+
+.search-form+.action {
+ margin-right: 30rpx;
+}
+
+.search-form input {
+ flex: 1;
+ padding-right: 30rpx;
+ height: 64rpx;
+ line-height: 64rpx;
+ font-size: 26rpx;
+ background-color: transparent;
+}
+
+.cu-bar .search-form [class*="cuIcon-"] {
+ margin: 0 0.5em 0 0.8em;
+}
+
+.cu-bar .search-form [class*="cuIcon-"]::before {
+ top: 0rpx;
+}
+
+.content {
+ margin-top: 24rpx;
+ background: rgba(255, 255, 255, 1);
+ border-radius: 6px;
+}
+
+.page-icon {
+ height: 240rpx;
+ width: 240rpx;
+ border-top-left-radius: 12rpx;
+ border-bottom-left-radius: 12rpx;
+}
+
+.page-name {
+ font-size: 16px;
+ font-family: PingFang-SC-Medium, PingFang-SC;
+ font-weight: 500;
+ color: rgba(51, 51, 51, 1);
+ line-height: 22px;
+}
+
+.page-num {
+ margin-top: 8rpx;
+ font-size: 10px;
+ font-family: PingFang-SC-Regular, PingFang-SC;
+ font-weight: 400;
+ color: rgba(51, 51, 51, 1);
+}
+
+.page-btn {
+ height: 27px;
+ background: rgba(255, 66, 43, 1);
+ box-shadow: 0px 4px 14px -6px rgba(255, 43, 45, 0.8);
+ color: white;
+ font-size: 12px;
+}
+
+.page-price {
+ font-size: 16px;
+ font-family: DINAlternate-Bold, DINAlternate;
+ font-weight: bold;
+ color: rgba(255, 66, 43, 1);
+}
+
+.page-stock {
+ font-size: 10px;
+ font-family: PingFang-SC-Regular, PingFang-SC;
+ font-weight: 400;
+ color: rgba(153, 153, 153, 1);
+ line-height: 14px;
+}
diff --git a/pages/mall/shops/index.js b/pages/mall/shops/index.js
new file mode 100644
index 0000000..eda180a
--- /dev/null
+++ b/pages/mall/shops/index.js
@@ -0,0 +1,128 @@
+// pages/mall/shops/index.js
+const request = require('../../../utils/request'); //导入模块
+const util = require('../../../utils/util');
+const event = require('../../../utils/event.js')
+const app = getApp()
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ height: app.globalData.fragmentHeight - 100,
+ CustomBar: app.globalData.CustomBar,
+ tabs: ['待出车', '进行中', '已完成', '进行中', '已完成', '进行中', '已完成', '进行中', '已完成'],
+ loading: true,
+ finished: false,
+ requesting: false,
+ cheapList: [],
+ taskList: [],
+ form: {
+ pageSize: 10,
+ pageNum: 1
+ },
+ token: null
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad: function (options) {
+ this.setData({
+ height: app.globalData.fragmentHeight,
+ CustomBar: app.globalData.CustomBar
+ })
+ event.on('EventMessage', this, this.onEvent)
+ },
+
+ onEvent: function (message) {
+ console.log('mall>>index>>onEvent', message)
+ if(message.what == 1 && util.isEmpty(this.data.token)){
+ // this.setData({ token: app.globalData.token })
+ }
+ },
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady: function () {
+ if (!this.data.firstShow) {
+ this.setData({
+ token: app.globalData.token
+ })
+ this.fetchCheapList()
+ this.fetchTaskList()
+ }
+ },
+
+ fetchCheapList: function () {
+ request.get('/bxe-mall/product/cheapList').then(result => {
+ //成功回调
+ this.setData({ loading: false, cheapList: result.data })
+ console.log(this.data.cheapList.length > 0)
+ }).catch(err => {
+ //异常回调
+ this.setData({ loading: false })
+ util.showToast(err)
+ })
+ },
+
+ fetchTaskList: function () {
+ if (this.data.requesting || this.data.finished) {
+ return
+ }
+ if (this.data.form.pageNum == 1 && this.data.taskList.length == 0) {
+ this.setData({ loading: true })
+ }
+ this.data.requesting = true
+ // /product/cheapList特价产品列表
+ request.get('/bxe-mall/product/groupList', this.data.form).then(result => {
+ //成功回调
+ this.setData({ requesting: false, loading: false })
+ if (result.data.records.length) {
+ var respList = result.data.records
+ let nowList = `taskList[${this.data.taskList.length}]`
+ var num = this.data.form.pageNum
+ var finished = this.data.form.pageNum >= result.data.pages
+ this.setData({
+ [nowList]: respList,
+ total: result.data.total,
+ ['form.pageNum']: (num + 1),
+ finished
+ })
+ }
+ }).catch(err => {
+ //异常回调
+ this.setData({ requesting: false, loading: false })
+ util.showToast(err)
+ })
+ },
+
+ searchList: function (e) {
+ wx.navigateTo({
+ url: '/pages/mall/search-list/index'
+ })
+ },
+
+ lookGroupItem: function (e) {
+ var item = this.data.taskList[e.currentTarget.dataset.page][e.currentTarget.dataset.index]
+ wx.navigateTo({
+ url: '/pages/mall/order-info/index?id=' + item.id
+ })
+ },
+
+ lookCheapItem: function (e) {
+ var item = this.data.cheapList[e.currentTarget.dataset.index]
+ wx.navigateTo({
+ url: '/pages/mall/order-info/index?id=' + item.id
+ })
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload: function () {
+ event.remove('EventMessage', this)
+ }
+
+})
\ No newline at end of file
diff --git a/pages/mall/shops/index.json b/pages/mall/shops/index.json
new file mode 100644
index 0000000..5d9b2c2
--- /dev/null
+++ b/pages/mall/shops/index.json
@@ -0,0 +1,8 @@
+{
+ "usingComponents": {
+ "refresh-view": "/components/refresh-view/index",
+ "wux-button": "/components/button/index",
+ "wux-tab": "/components/tab/index",
+ "wux-divider": "/components/divider/index"
+ }
+}
\ No newline at end of file
diff --git a/pages/mall/shops/index.wxml b/pages/mall/shops/index.wxml
new file mode 100644
index 0000000..2014cbb
--- /dev/null
+++ b/pages/mall/shops/index.wxml
@@ -0,0 +1,81 @@
+
+
+ 原纸商城
+
+
+
+
+
+ 加载中...
+
+
+
+ 暂无数据
+
+
+
+
+
+
+
+
+
+
+
+
+ 特价
+ 专区
+
+ 限时限量 售完即止
+
+
+
+
+
+ {{item.name}}
+ {{item.viewNum}} 浏览
+
+ {{item.summary}}
+
+ ¥{{item.price}}
+ 库存:{{item.stockNumber}}件
+
+
+
+
+
+
+
+ 团购
+ 专区
+
+ 大厂品牌 质量保证
+
+
+
+
+
+
+
+ {{item.name}}
+ 已拼{{item.soldNum}}件
+
+ {{item.summary}}
+
+ ¥{{item.price}}
+ 库存:{{item.stockNumber}}件
+
+
+
+
+
+
+
+
+
+ {{finished?'到底了':'加载中...'}}
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/mall/shops/index.wxss b/pages/mall/shops/index.wxss
new file mode 100644
index 0000000..5fc1a13
--- /dev/null
+++ b/pages/mall/shops/index.wxss
@@ -0,0 +1,127 @@
+/* pages/mall/shops/index.wxss */
+
+.swiper-image{
+ height: 120px;
+ border-radius: 6px;
+ width: 100%;
+}
+
+.search-form {
+ background-color: #f5f5f5;
+ line-height: 64rpx;
+ height: 64rpx;
+ font-size: 24rpx;
+ color: var(--black);
+ flex: 1;
+ display: flex;
+ align-items: center;
+ margin: 0 30rpx;
+}
+
+.search-form+.action {
+ margin-right: 30rpx;
+}
+
+.search-form input {
+ flex: 1;
+ padding-right: 30rpx;
+ height: 64rpx;
+ line-height: 64rpx;
+ font-size: 26rpx;
+ background-color: transparent;
+}
+
+.cu-bar .search-form [class*="cuIcon-"] {
+ margin: 0 0.5em 0 0.8em;
+}
+
+.cu-bar .search-form [class*="cuIcon-"]::before {
+ top: 0rpx;
+}
+
+.nav-li {
+ padding: 24rpx;
+ border-radius: 12rpx;
+ background-color: #008AFF;
+ box-shadow: 0px 8px 36px -11px rgba(0, 138, 255, 0.5);
+ width: 100%;
+ margin: 24rpx 0rpx;
+ align-items: center;
+}
+
+.shadow {
+ width: 36px;
+ height: 25px;
+ font-size: 18px;
+ font-family: PingFang-SC-Medium, PingFang-SC;
+ font-weight: 500;
+ color: rgba(255, 255, 255, 1);
+ line-height: 25px;
+ text-shadow: 0px 2px 4px rgba(0, 0, 0, 0.3);
+}
+
+.v-driver {
+ width: 1px;
+ height: 16px;
+ background: rgba(208, 208, 208, 1);
+ border-radius: 1px;
+ margin: 0rpx 24rpx;
+}
+
+.nav-title {
+ font-size: 14px;
+ font-family: PingFang-SC-Regular, PingFang-SC;
+ font-weight: 400;
+ color: rgba(208, 208, 208, 1);
+}
+
+.content {
+ background: rgba(255, 255, 255, 1);
+ border-radius: 6px;
+}
+
+.page-icon {
+ height: 240rpx;
+ width: 240rpx;
+ border-top-left-radius: 12rpx;
+ border-bottom-left-radius: 12rpx;
+}
+
+.page-name {
+ font-size: 16px;
+ font-family: PingFang-SC-Medium, PingFang-SC;
+ font-weight: 500;
+ color: rgba(51, 51, 51, 1);
+ line-height: 22px;
+}
+
+.page-num {
+ margin-top: 8rpx;
+ font-size: 10px;
+ font-family: PingFang-SC-Regular, PingFang-SC;
+ font-weight: 400;
+ color: rgba(51, 51, 51, 1);
+}
+
+.page-btn {
+ height: 27px;
+ background: rgba(255, 66, 43, 1);
+ box-shadow: 0px 4px 14px -6px rgba(255, 43, 45, 0.8);
+ color: white;
+ font-size: 12px;
+}
+
+.page-price {
+ font-size: 16px;
+ font-family: DINAlternate-Bold, DINAlternate;
+ font-weight: bold;
+ color: rgba(255, 66, 43, 1);
+}
+
+.page-stock {
+ font-size: 10px;
+ font-family: PingFang-SC-Regular, PingFang-SC;
+ font-weight: 400;
+ color: rgba(153, 153, 153, 1);
+ line-height: 14px;
+}
\ No newline at end of file
diff --git a/pages/message/index.js b/pages/message/index.js
new file mode 100644
index 0000000..ccb9ff7
--- /dev/null
+++ b/pages/message/index.js
@@ -0,0 +1,114 @@
+// pages/message/index.js
+const request = require('../../utils/request');//导入模块
+const util = require('../../utils/util');
+const float = require('../../utils/floatObj');
+const app = getApp()
+const formate = 'Y-M-D'
+
+Component({
+ options: {
+ addGlobalClass: true,
+ multipleSlots: true
+ },
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ height: app.globalData.fragmentHeight - 100,
+ loading: true,
+ finished: false,
+ requesting: false,
+ messageList: [],
+ form: {
+ pageSize: 10,
+ pageNum: 1
+ },
+ },
+ methods: {
+ onRestart: function () {
+ if (!this.data.firstShow) {
+ console.log('message-->onRestart>>>')
+ this.fetchMessageList()
+ }
+ this.setData({ firstShow: true })
+ },
+ onRefresh: function () {
+ this.setData({ ['form.pageNum']: 1, finished: false })
+ this.fetchMessageList()
+ },
+ fetchMessageList: function () {
+ if (this.data.requesting || this.data.finished) {
+ return
+ }
+ if (this.data.form.pageNum == 1 && this.data.messageList.length == 0) {
+ this.setData({ loading: true })
+ }
+ this.setData({ requesting: true })
+ wx.showLoading({ title: '加载中', mask: true })
+ // /message/h5/message_list 消息列表
+ request.get('/message/h5/message_list', this.data.form).then(data => {
+ //成功回调
+ this.setData({ requesting: false, loading: false })
+ wx.hideLoading()
+ if (data.data.records) {
+ var respList = data.data.records
+ var lastTipsTime = ''
+ if (this.data.messageList.length > 0) {
+ lastTipsTime = util.formatDate(new Date(this.data.messageList.slice(-1).createTime), formate)
+ if (lastTipsTime.length > 10) {
+ lastTipsTime = lastTipsTime.substring(0, 10)
+ }
+ }
+ for (let i = 0; i < respList.length; i++) {
+ if (util.isEmpty(lastTipsTime)) {
+ lastTipsTime = util.formatDate(new Date(respList[i].createTime), formate)
+ if (lastTipsTime.length > 10) {
+ lastTipsTime = lastTipsTime.substring(0, 10)
+ }
+ respList[i].tipsTime = lastTipsTime
+ } else {
+ var itemTime = util.formatDate(new Date(respList[i].createTime), formate)
+ if (itemTime.length > 10) {
+ itemTime = itemTime.substring(0, 10)
+ }
+ if (lastTipsTime !== itemTime) {
+ respList[i].tipsTime = itemTime
+ }
+ lastTipsTime = itemTime
+ }
+ }
+ if (this.data.form.pageNum > 1) {
+ this.setData({ messageList: this.data.messageList.concat(respList) })
+ } else {
+ this.setData({ total: data.data.total, messageList: respList })
+ }
+ if (this.data.form.pageNum >= data.data.pages) {
+ // 已经是最后一页了,不需要再触发滚动加载了
+ this.setData({ finished: true })
+ } else {
+ var num = this.data.form.pageNum
+ this.setData({ ['form.pageNum']: (num + 1), finished: false })
+ }
+ }
+ }).catch(err => {
+ //异常回调
+ this.setData({ requesting: false, loading: false })
+ wx.hideLoading()
+ util.showToast(err)
+ });
+ },
+ lookMessage: function (e) {
+ var item = this.data.messageList[e.currentTarget.dataset.index]
+ this.readMessage(item.id, e.currentTarget.dataset.index)
+ wx.navigateTo({ url: '/pages/order/order-info/index?id=' + item.scene })
+ },
+ readMessage: function (id, index) {
+ // /message/h5/read 设置已读
+ request.put('/message/h5/read/' + id).then(data => {
+ this.setData({ ['messageList[' + index + '].readStatus']: 1 })
+ })
+ }
+ }
+
+
+})
\ No newline at end of file
diff --git a/pages/message/index.json b/pages/message/index.json
new file mode 100644
index 0000000..6922df7
--- /dev/null
+++ b/pages/message/index.json
@@ -0,0 +1,7 @@
+{
+ "component": true,
+ "usingComponents": {
+ "refresh-view": "/components/refresh-view/index",
+ "wux-button": "/components/button/index"
+ }
+}
\ No newline at end of file
diff --git a/pages/message/index.wxml b/pages/message/index.wxml
new file mode 100644
index 0000000..b7dcaec
--- /dev/null
+++ b/pages/message/index.wxml
@@ -0,0 +1,49 @@
+
+
+
+ 消息
+
+
+
+
+
+ 加载中...
+
+
+
+ 暂无消息
+
+
+
+
+ {{item.tipsTime}}
+
+
+
+ {{cloud.mssageTitle(item.type)}}
+ {{cloud.formatDate(item.createTime)}}
+
+
+ 查看详情
+
+
+
+
+ {{item.content}}
+
+ 消息状态:
+ 未读
+ 已读
+
+
+
+
+
+
+
+ {{finished?'已经全部加载':'加载中...'}}
+
+
+
+
\ No newline at end of file
diff --git a/pages/message/index.wxs b/pages/message/index.wxs
new file mode 100644
index 0000000..52b0a5e
--- /dev/null
+++ b/pages/message/index.wxs
@@ -0,0 +1,81 @@
+
+function formatDate(time) {
+ var date = getDate(time)
+ var format = 'Y-M-D h:m:s'
+ var formateArr = ['Y', 'M', 'D', 'h', 'm', 's'];
+ var returnArr = [];
+ returnArr.push(date.getFullYear());
+ returnArr.push(formatNumber(date.getMonth() + 1));
+ returnArr.push(formatNumber(date.getDate()));
+ returnArr.push(formatNumber(date.getHours()));
+ returnArr.push(formatNumber(date.getMinutes()));
+ returnArr.push(formatNumber(date.getSeconds()));
+ for (var i = 0; i < returnArr.length; i++) {
+ format = format.replace(formateArr[i], returnArr[i]);
+ }
+ return format;
+}
+
+function formatNumber(n) {
+ n = n.toString()
+ return n[1] ? n : '0' + n
+}
+
+function description(taglist) {
+ if(!taglist || !taglist.length){
+ return ''
+ }
+ return taglist.toString()
+}
+
+function offerStatus(status) {
+ if(status == 0){
+ return '选标中'
+ } else if (status == 1) {
+ return '未中标'
+ } else if (status == 2) {
+ return '已中标'
+ } else if (status == 3) {
+ return '取消'
+ } else if (status == 4) {
+ return '已关闭'
+ }
+ return ''
+}
+
+function offerCollor(status) {
+ if (status == 0) {
+ return 'text-black'
+ } else if (status == 1) {
+ return 'text-grey'
+ } else if (status == 2) {
+ return 'text-blue'
+ } else if (status == 3) {
+ return 'text-red'
+ } else if (status == 4) {
+ return 'text-red'
+ }
+ return 'text-blue'
+}
+
+function mssageTitle(type){
+ if (type == 'bidOrder') {
+ return '报价通知'
+ } else if (type == 'demand') {
+ return '项目通知'
+ }
+ return '调度通知'
+}
+
+function formatPrice(price) {
+ return Number(parseFloat(price) / 100).toFixed(2)
+}
+
+module.exports = {
+ formatDate: formatDate,
+ description: description,
+ offerStatus: offerStatus,
+ offerCollor: offerCollor,
+ mssageTitle: mssageTitle,
+ formatPrice: formatPrice
+}
\ No newline at end of file
diff --git a/pages/message/index.wxss b/pages/message/index.wxss
new file mode 100644
index 0000000..7a10986
--- /dev/null
+++ b/pages/message/index.wxss
@@ -0,0 +1,20 @@
+/* pages/message/index.wxss */
+
+.message-item {
+ background-color: #fff;
+ border-radius: 10rpx;
+ margin: 18rpx;
+ padding: 30rpx
+}
+
+.time-tip{
+ margin-top:24rpx;
+ text-align: center;
+ height:40rpx
+}
+
+.button-sp-area {
+ margin: 20px auto 0;
+ width: 25%;
+ text-align: center;
+}
\ No newline at end of file
diff --git a/project.config.json b/project.config.json
new file mode 100644
index 0000000..bd51613
--- /dev/null
+++ b/project.config.json
@@ -0,0 +1,55 @@
+{
+ "description": "项目配置文件",
+ "packOptions": {
+ "ignore": []
+ },
+ "setting": {
+ "urlCheck": false,
+ "es6": true,
+ "enhance": true,
+ "postcss": true,
+ "preloadBackgroundData": false,
+ "minified": true,
+ "newFeature": true,
+ "coverView": true,
+ "autoAudits": false,
+ "showShadowRootInWxmlPanel": true,
+ "scopeDataCheck": false,
+ "checkInvalidKey": true,
+ "checkSiteMap": true,
+ "uploadWithSourceMap": true,
+ "babelSetting": {
+ "ignore": [],
+ "disablePlugins": [],
+ "outputPath": ""
+ }
+ },
+ "compileType": "miniprogram",
+ "libVersion": "2.10.4",
+ "appid": "wx9e774103645f5c54",
+ "projectname": "Recycler-Driver-Mini",
+ "debugOptions": {
+ "hidedInDevtools": []
+ },
+ "isGameTourist": false,
+ "simulatorType": "wechat",
+ "simulatorPluginLibVersion": {},
+ "condition": {
+ "search": {
+ "current": -1,
+ "list": []
+ },
+ "conversation": {
+ "current": -1,
+ "list": []
+ },
+ "game": {
+ "currentL": -1,
+ "list": []
+ },
+ "miniprogram": {
+ "current": -1,
+ "list": []
+ }
+ }
+}
\ No newline at end of file
diff --git a/sitemap.json b/sitemap.json
new file mode 100644
index 0000000..ca02add
--- /dev/null
+++ b/sitemap.json
@@ -0,0 +1,7 @@
+{
+ "desc": "关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html",
+ "rules": [{
+ "action": "allow",
+ "page": "*"
+ }]
+}
\ No newline at end of file
diff --git a/utils/countdown/index.js b/utils/countdown/index.js
new file mode 100644
index 0000000..6b37e9e
--- /dev/null
+++ b/utils/countdown/index.js
@@ -0,0 +1 @@
+"use strict";function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function _defineProperties(t,e){for(var n=0;nn?t:(Array(n+1).join("0")+t).substr(-n)}},{key:"update",value:function(t){return this.options.date="object"!=typeof t?new Date(t):t,this.render(),this}},{key:"stop",value:function(){return this.interval&&(clearInterval(this.interval),this.interval=!1),this}},{key:"render",value:function(){return this.options.render(this.getDiffDate()),this}},{key:"start",value:function(){var t=this;return!this.interval&&(this.render(),this.options.refresh&&(this.interval=setInterval(function(){t.render()},this.options.refresh)),this)}},{key:"updateOffset",value:function(t){return this.options.offset=t,this}},{key:"restart",value:function(t){var e=0this.endVal,this.frameVal=this.startVal,this.decimals=Math.max(0,this.decimals||0),this.dec=Math.pow(10,this.decimals),this.duration=1e3*Number(this.duration)||2e3,this.printValue(this.formattingFn(this.startVal))}},{key:"setDefaultOptions",value:function(){return{useEasing:!0,useGrouping:!0,separator:",",decimal:".",easingFn:null,formattingFn:null,printValue:function(t){}}}},{key:"mergeOptions",value:function(t){var i=this.setDefaultOptions();for(var s in i)i.hasOwnProperty(s)&&(this.options[s]=void 0!==t[s]?t[s]:i[s],"function"==typeof this.options[s]&&(this.options[s]=this.options[s].bind(this)));""===this.options.separator&&(this.options.useGrouping=!1),this.options.prefix||(this.options.prefix=""),this.options.suffix||(this.options.suffix=""),this.easingFn=this.options.easingFn?this.options.easingFn:this.easeOutExpo,this.formattingFn=this.options.formattingFn?this.options.formattingFn:this.formatNumber,this.printValue=this.options.printValue?this.options.printValue:function(){}}},{key:"requestAnimationFrame",value:function(t){var i=this,s=(new Date).getTime(),a=Math.max(0,16-(s-this.lastTime)),e=setTimeout(function(){t.bind(i)(s+a)},a);return this.lastTime=s+a,e}},{key:"cancelAnimationFrame",value:function(t){clearTimeout(t)}},{key:"formatNumber",value:function(t){var i,s,a,e;if(t=t.toFixed(this.decimals),s=(i=(t+="").split("."))[0],a=1this.endVal?this.endVal:this.frameVal,this.frameVal=Math.round(this.frameVal*this.dec)/this.dec,this.printValue(this.formattingFn(this.frameVal)),ithis.endVal,this.rAF=this.requestAnimationFrame(this.count)}}]),r}(),_default=CountUp;exports.default=_default;
\ No newline at end of file
diff --git a/utils/event.js b/utils/event.js
new file mode 100644
index 0000000..2e9febc
--- /dev/null
+++ b/utils/event.js
@@ -0,0 +1,35 @@
+var events = {};
+
+function on(name, self, callback) {
+ var tuple = [self, callback];
+ var callbacks = events[name];
+ if (Array.isArray(callbacks)) {
+ callbacks.push(tuple);
+ } else {
+ events[name] = [tuple];
+ }
+}
+
+function remove(name, self) {
+ var callbacks = events[name];
+ if (Array.isArray(callbacks)) {
+ events[name] = callbacks.filter((tuple) => {
+ return tuple[0] != self;
+ })
+ }
+}
+
+function emit(name, data) {
+ var callbacks = events[name];
+ if (Array.isArray(callbacks)) {
+ callbacks.map((tuple) => {
+ var self = tuple[0];
+ var callback = tuple[1];
+ callback.call(self, data);
+ })
+ }
+}
+
+exports.on = on;
+exports.remove = remove;
+exports.emit = emit;
\ No newline at end of file
diff --git a/utils/floatObj.js b/utils/floatObj.js
new file mode 100644
index 0000000..14ed2d0
--- /dev/null
+++ b/utils/floatObj.js
@@ -0,0 +1,144 @@
+function accAdd(num1, num2) { // 加法
+ num1 = Number(num1)
+ num2 = Number(num2)
+ let dec1, dec2
+ try { dec1 = countDecimals(num1) + 1 } catch (e) { dec1 = 0 }
+ try { dec2 = countDecimals(num2) + 1 } catch (e) { dec2 = 0 }
+ const times = Math.pow(10, Math.max(dec1, dec2))
+ // let result = (num1 * times + num2 * times) / times
+ const result = (accMul(num1, times) + accMul(num2, times)) / times
+ return getCorrectResult('add', num1, num2, result)
+ // return result
+}
+
+function accSub(num1, num2) { // 减法
+ num1 = Number(num1)
+ num2 = Number(num2)
+ let dec1, dec2
+ try { dec1 = countDecimals(num1) + 1 } catch (e) { dec1 = 0 }
+ try { dec2 = countDecimals(num2) + 1 } catch (e) { dec2 = 0 }
+ const times = Math.pow(10, Math.max(dec1, dec2))
+ // let result = Number(((num1 * times - num2 * times) / times)
+ const result = Number((accMul(num1, times) - accMul(num2, times)) / times)
+ return getCorrectResult('sub', num1, num2, result)
+ // return result
+}
+
+function accDiv(num1, num2) { // 除法
+ num1 = Number(num1)
+ num2 = Number(num2)
+ let t1 = 0
+ let t2 = 0
+ try { t1 = countDecimals(num1) } catch (e) { console.log(e) }
+ try { t2 = countDecimals(num2) } catch (e) { console.log(e) }
+ const dec1 = convertToInt(num1)
+ const dec2 = convertToInt(num2)
+ const result = accMul((dec1 / dec2), Math.pow(10, t2 - t1))
+ return getCorrectResult('div', num1, num2, result)
+ // return result
+}
+
+function accMul(num1, num2) { // 乘法
+ num1 = Number(num1)
+ num2 = Number(num2)
+ let times = 0
+ const s1 = num1.toString()
+ const s2 = num2.toString()
+ try { times += countDecimals(s1) } catch (e) { console.log(e) }
+ try { times += countDecimals(s2) } catch (e) { console.log(e) }
+ const result = convertToInt(s1) * convertToInt(s2) / Math.pow(10, times)
+ return getCorrectResult('mul', num1, num2, result)
+ // return result
+}
+
+function countDecimals(num) {
+ var len = 0
+ try {
+ num = Number(num)
+ let str = num.toString().toUpperCase()
+ if (str.split('E').length === 2) { // scientific notation
+ let isDecimal = false
+ if (str.split('.').length === 2) {
+ str = str.split('.')[1]
+ if (parseInt(str.split('E')[0]) !== 0) {
+ isDecimal = true
+ }
+ }
+ const x = str.split('E')
+ if (isDecimal) {
+ len = x[0].length
+ }
+ len -= parseInt(x[1])
+ } else if (str.split('.').length === 2) { // decimal
+ if (parseInt(str.split('.')[1]) !== 0) {
+ len = str.split('.')[1].length
+ }
+ }
+ } catch (e) {
+ throw e
+ } finally {
+ if (isNaN(len) || len < 0) {
+ len = 0
+ }
+ // return len
+ }
+ return len
+}
+
+function convertToInt(num) {
+ num = Number(num)
+ let newNum = num
+ const times = countDecimals(num)
+ const temp_num = num.toString().toUpperCase()
+ if (temp_num.split('E').length === 2) {
+ newNum = Math.round(num * Math.pow(10, times))
+ } else {
+ newNum = Number(temp_num.replace('.', ''))
+ }
+ return newNum
+}
+
+function getCorrectResult(type, num1, num2, result) {
+ let temp_result = 0
+ switch (type) {
+ case 'add':
+ temp_result = num1 + num2
+ break
+ case 'sub':
+ temp_result = num1 - num2
+ break
+ case 'div':
+ temp_result = num1 / num2
+ break
+ case 'mul':
+ temp_result = num1 * num2
+ break
+ }
+ if (Math.abs(result - temp_result) > 1) {
+ return temp_result
+ }
+ return result
+}
+
+function checkWeight(input) {
+ return input.replace(/[^\d]/gi, '')
+}
+
+function showWeight(input) {
+ return accDiv(input, 1000).toFixed(3)
+}
+
+function checkSumWeight(input) {
+ return input.replace(/[^\d.]/gi, '')
+}
+
+module.exports = {
+ accAdd: accAdd,
+ accSub: accSub,
+ accDiv: accDiv,
+ accMul: accMul,
+ checkWeight: checkWeight,
+ checkSumWeight: checkSumWeight,
+ convertToInt: convertToInt,
+ showWeight: showWeight
+}
diff --git a/utils/index.js b/utils/index.js
new file mode 100644
index 0000000..84e508f
--- /dev/null
+++ b/utils/index.js
@@ -0,0 +1 @@
+"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"$wuxCountDown",{enumerable:!0,get:function(){return _index.default}}),Object.defineProperty(exports,"$wuxCountUp",{enumerable:!0,get:function(){return _index2.default}}),exports.$stopWuxLoader=exports.$stopWuxRefresher=exports.$startWuxRefresher=exports.$wuxCalendar=exports.$wuxSelect=exports.$wuxKeyBoard=exports.$wuxNotification=exports.$wuxGallery=exports.$wuxToptips=exports.$wuxForm=exports.$wuxDialog=exports.$wuxLoading=exports.$wuxToast=exports.$wuxBackdrop=exports.$wuxActionSheet=void 0;var _index=_interopRequireDefault(require("./countdown/index")),_index2=_interopRequireDefault(require("./countup/index"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}var getCtx=function(e,t){var r=(1> 16) + (y >> 16) + (lsw >> 16)
+ return (msw << 16) | (lsw & 0xFFFF)
+}
+
+/*
+ * Bitwise rotate a 32-bit number to the left.
+ */
+function rol(num, cnt) {
+ return (num << cnt) | (num >>> (32 - cnt))
+}
+
+/*
+ * These functions implement the four basic operations the algorithm uses.
+ */
+function cmn(q, a, b, x, s, t) {
+ return safe_add(rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
+}
+function ff(a, b, c, d, x, s, t) {
+ return cmn((b & c) | ((~b) & d), a, b, x, s, t)
+}
+function gg(a, b, c, d, x, s, t) {
+ return cmn((b & d) | (c & (~d)), a, b, x, s, t)
+}
+function hh(a, b, c, d, x, s, t) {
+ return cmn(b ^ c ^ d, a, b, x, s, t)
+}
+function ii(a, b, c, d, x, s, t) {
+ return cmn(c ^ (b | (~d)), a, b, x, s, t)
+}
+
+/*
+ * Calculate the MD5 of an array of little-endian words, producing an array
+ * of little-endian words.
+ */
+function coreMD5(x) {
+ var a = 1732584193
+ var b = -271733879
+ var c = -1732584194
+ var d = 271733878
+
+ for (var i = 0; i < x.length; i += 16) {
+ var olda = a
+ var oldb = b
+ var oldc = c
+ var oldd = d
+
+ a = ff(a, b, c, d, x[i + 0], 7, -680876936)
+ d = ff(d, a, b, c, x[i + 1], 12, -389564586)
+ c = ff(c, d, a, b, x[i + 2], 17, 606105819)
+ b = ff(b, c, d, a, x[i + 3], 22, -1044525330)
+ a = ff(a, b, c, d, x[i + 4], 7, -176418897)
+ d = ff(d, a, b, c, x[i + 5], 12, 1200080426)
+ c = ff(c, d, a, b, x[i + 6], 17, -1473231341)
+ b = ff(b, c, d, a, x[i + 7], 22, -45705983)
+ a = ff(a, b, c, d, x[i + 8], 7, 1770035416)
+ d = ff(d, a, b, c, x[i + 9], 12, -1958414417)
+ c = ff(c, d, a, b, x[i + 10], 17, -42063)
+ b = ff(b, c, d, a, x[i + 11], 22, -1990404162)
+ a = ff(a, b, c, d, x[i + 12], 7, 1804603682)
+ d = ff(d, a, b, c, x[i + 13], 12, -40341101)
+ c = ff(c, d, a, b, x[i + 14], 17, -1502002290)
+ b = ff(b, c, d, a, x[i + 15], 22, 1236535329)
+
+ a = gg(a, b, c, d, x[i + 1], 5, -165796510)
+ d = gg(d, a, b, c, x[i + 6], 9, -1069501632)
+ c = gg(c, d, a, b, x[i + 11], 14, 643717713)
+ b = gg(b, c, d, a, x[i + 0], 20, -373897302)
+ a = gg(a, b, c, d, x[i + 5], 5, -701558691)
+ d = gg(d, a, b, c, x[i + 10], 9, 38016083)
+ c = gg(c, d, a, b, x[i + 15], 14, -660478335)
+ b = gg(b, c, d, a, x[i + 4], 20, -405537848)
+ a = gg(a, b, c, d, x[i + 9], 5, 568446438)
+ d = gg(d, a, b, c, x[i + 14], 9, -1019803690)
+ c = gg(c, d, a, b, x[i + 3], 14, -187363961)
+ b = gg(b, c, d, a, x[i + 8], 20, 1163531501)
+ a = gg(a, b, c, d, x[i + 13], 5, -1444681467)
+ d = gg(d, a, b, c, x[i + 2], 9, -51403784)
+ c = gg(c, d, a, b, x[i + 7], 14, 1735328473)
+ b = gg(b, c, d, a, x[i + 12], 20, -1926607734)
+
+ a = hh(a, b, c, d, x[i + 5], 4, -378558)
+ d = hh(d, a, b, c, x[i + 8], 11, -2022574463)
+ c = hh(c, d, a, b, x[i + 11], 16, 1839030562)
+ b = hh(b, c, d, a, x[i + 14], 23, -35309556)
+ a = hh(a, b, c, d, x[i + 1], 4, -1530992060)
+ d = hh(d, a, b, c, x[i + 4], 11, 1272893353)
+ c = hh(c, d, a, b, x[i + 7], 16, -155497632)
+ b = hh(b, c, d, a, x[i + 10], 23, -1094730640)
+ a = hh(a, b, c, d, x[i + 13], 4, 681279174)
+ d = hh(d, a, b, c, x[i + 0], 11, -358537222)
+ c = hh(c, d, a, b, x[i + 3], 16, -722521979)
+ b = hh(b, c, d, a, x[i + 6], 23, 76029189)
+ a = hh(a, b, c, d, x[i + 9], 4, -640364487)
+ d = hh(d, a, b, c, x[i + 12], 11, -421815835)
+ c = hh(c, d, a, b, x[i + 15], 16, 530742520)
+ b = hh(b, c, d, a, x[i + 2], 23, -995338651)
+
+ a = ii(a, b, c, d, x[i + 0], 6, -198630844)
+ d = ii(d, a, b, c, x[i + 7], 10, 1126891415)
+ c = ii(c, d, a, b, x[i + 14], 15, -1416354905)
+ b = ii(b, c, d, a, x[i + 5], 21, -57434055)
+ a = ii(a, b, c, d, x[i + 12], 6, 1700485571)
+ d = ii(d, a, b, c, x[i + 3], 10, -1894986606)
+ c = ii(c, d, a, b, x[i + 10], 15, -1051523)
+ b = ii(b, c, d, a, x[i + 1], 21, -2054922799)
+ a = ii(a, b, c, d, x[i + 8], 6, 1873313359)
+ d = ii(d, a, b, c, x[i + 15], 10, -30611744)
+ c = ii(c, d, a, b, x[i + 6], 15, -1560198380)
+ b = ii(b, c, d, a, x[i + 13], 21, 1309151649)
+ a = ii(a, b, c, d, x[i + 4], 6, -145523070)
+ d = ii(d, a, b, c, x[i + 11], 10, -1120210379)
+ c = ii(c, d, a, b, x[i + 2], 15, 718787259)
+ b = ii(b, c, d, a, x[i + 9], 21, -343485551)
+
+ a = safe_add(a, olda)
+ b = safe_add(b, oldb)
+ c = safe_add(c, oldc)
+ d = safe_add(d, oldd)
+ }
+ return [a, b, c, d]
+}
+
+/*
+ * Convert an array of little-endian words to a hex string.
+ */
+function binl2hex(binarray) {
+ var hex_tab = "0123456789abcdef"
+ var str = ""
+ for (var i = 0; i < binarray.length * 4; i++) {
+ str += hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8 + 4)) & 0xF) +
+ hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8)) & 0xF)
+ }
+ return str
+}
+
+/*
+ * Convert an array of little-endian words to a base64 encoded string.
+ */
+function binl2b64(binarray) {
+ var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
+ var str = ""
+ for (var i = 0; i < binarray.length * 32; i += 6) {
+ str += tab.charAt(((binarray[i >> 5] << (i % 32)) & 0x3F) |
+ ((binarray[i >> 5 + 1] >> (32 - i % 32)) & 0x3F))
+ }
+ return str
+}
+
+/*
+ * Convert an 8-bit character string to a sequence of 16-word blocks, stored
+ * as an array, and append appropriate padding for MD4/5 calculation.
+ * If any of the characters are >255, the high byte is silently ignored.
+ */
+function str2binl(str) {
+ var nblk = ((str.length + 8) >> 6) + 1 // number of 16-word blocks
+ var blks = new Array(nblk * 16)
+ for (var i = 0; i < nblk * 16; i++) blks[i] = 0
+ for (var i = 0; i < str.length; i++)
+ blks[i >> 2] |= (str.charCodeAt(i) & 0xFF) << ((i % 4) * 8)
+ blks[i >> 2] |= 0x80 << ((i % 4) * 8)
+ blks[nblk * 16 - 2] = str.length * 8
+ return blks
+}
+
+/*
+ * Convert a wide-character string to a sequence of 16-word blocks, stored as
+ * an array, and append appropriate padding for MD4/5 calculation.
+ */
+function strw2binl(str) {
+ var nblk = ((str.length + 4) >> 5) + 1 // number of 16-word blocks
+ var blks = new Array(nblk * 16)
+ for (var i = 0; i < nblk * 16; i++) blks[i] = 0
+ for (var i = 0; i < str.length; i++)
+ blks[i >> 1] |= str.charCodeAt(i) << ((i % 2) * 16)
+ blks[i >> 1] |= 0x80 << ((i % 2) * 16)
+ blks[nblk * 16 - 2] = str.length * 16
+ return blks
+}
+
+/*
+ * External interface
+ */
+function hexMD5(str) { return binl2hex(coreMD5(str2binl(str))) }
+function hexMD5w(str) { return binl2hex(coreMD5(strw2binl(str))) }
+function b64MD5(str) { return binl2b64(coreMD5(str2binl(str))) }
+function b64MD5w(str) { return binl2b64(coreMD5(strw2binl(str))) }
+/* Backward compatibility */
+function calcMD5(str) { return binl2hex(coreMD5(str2binl(str))) }
+module.exports = {
+ hexMD5: hexMD5
+}
\ No newline at end of file
diff --git a/utils/request.js b/utils/request.js
new file mode 100644
index 0000000..3b13421
--- /dev/null
+++ b/utils/request.js
@@ -0,0 +1,226 @@
+// const socketHttp = "wss://*****.com/wss"
+const event = require('./event.js')
+const util = require('./util.js')
+const app = getApp()
+const header = {
+ 'content-type': 'application/x-www-form-urlencoded'
+}
+
+function fun(url, method, data, header) {
+ data = data || {}
+ header = header || {
+ 'user-token': app.globalData.token
+ }
+ let promise = new Promise(function (resolve, reject) {
+ wx.request({
+ url: app.httpUrl + url,
+ header: header,
+ data: data,
+ method: method,
+ success: function (result) {
+ if (typeof result.data === "object") {
+ if (result.data.code === 0) {
+ resolve(result.data)
+ } else if (result.data.code === 666) {
+ app.globalData.token = null
+ event.emit('EventMessage', {
+ what: 666,
+ desc: 'Logout'
+ })
+ resolve(result.data)
+ } else {
+ var msg = '数据错误'
+ if (result.data.message) {
+ msg = result.data.message
+ }
+ reject(msg)
+ }
+ } else {
+ reject('网络异常')
+ }
+ },
+ fail: function (err) {
+ reject('网络异常')
+ }
+ })
+ })
+ return promise
+}
+
+function upload(url, name, filePath) {
+ let header = {
+ 'token': app.globalData.token
+ }
+ let promise = new Promise(function (resolve, reject) {
+ wx.uploadFile({
+ url: app.httpUrl + url,
+ filePath: filePath,
+ name: name,
+ header: header,
+ success: function (res) {
+ resolve(res)
+ },
+ fail: reject
+ })
+ })
+ return promise
+}
+
+function loginByOpenId(form, resolve, reject) {
+ wx.request({
+ url: app.httpUrl + '/user-centre/commonLogin/login',
+ data: form,
+ method: 'POST',
+ success: function (result) {
+ if (result.data.code == 0 && result.data.data.token) {
+ app.globalData.token = result.data.data.token
+ wx.showToast({
+ title: '登录成功',
+ icon: "none"
+ })
+ event.emit('EventMessage', {
+ what: 1,
+ desc: 'Login'
+ })
+ resolve(result.data)
+ } else {
+ wx.hideLoading()
+ wx.showToast({
+ title: '登录失败,请稍后再试',
+ icon: "none"
+ })
+ reject
+ }
+ },
+ fail: function () {
+ reject
+ },
+ })
+}
+
+function bindPhone(form, resolve, reject) {
+ // 获取手机号码
+ wx.request({
+ url: app.httpUrl + '/user-centre/wx/phone',
+ data: form,
+ method: 'POST',
+ success: function (result) {
+ // 绑定手机号码,进行登录
+ if (result.data.code != 0) {
+ wx.hideLoading()
+ wx.showToast({
+ title: '登录失败,请稍后再试',
+ icon: "none"
+ })
+ reject
+ return
+ }
+ var data = {
+ openid: form.openid,
+ phone: result.data.data.phoneNumber
+ }
+ loginByOpenId(data, resolve, reject)
+ },
+ fail: function (phoneResp) {
+ wx.hideLoading()
+ wx.showToast({
+ title: '登录失败,请稍后再试',
+ icon: "none"
+ })
+ reject
+ }
+ })
+}
+
+// 通过微信的方式登录,onGotPhoneNumber中统一处理
+function loginWechat(form) {
+ let promise = new Promise(function (resolve, reject) {
+ if (!form.encryptedData) {
+ wx.showToast({
+ title: '授权被拒绝,登录失败',
+ icon: "none"
+ })
+ reject
+ return
+ }
+ wx.showLoading({
+ title: '登录中',
+ mask: true
+ })
+ if (app.globalData.openId) {
+ // 如果已经获取到了openId
+ form.openid = app.globalData.openId
+ if (!util.isEmpty(form.phone)) {
+ loginByOpenId(form, resolve, reject)
+ } else {
+ bindPhone(form, resolve, reject)
+ }
+ } else {
+ // 没有获取到openId,获取之后进行登录
+ wx.login({
+ success: res => {
+ // 获取openId
+ wx.request({
+ url: app.httpUrl + '/user-centre/wx/bxe/session',
+ data: {
+ code: res.code
+ },
+ method: 'POST',
+ success: function (result) {
+ console.log(result.data)
+ if (result.data.code == 0) {
+ app.globalData.openId = result.data.data.openid
+ form.openid = app.globalData.openId
+ // 获取手机号码
+ bindPhone(form, resolve, reject)
+ } else {
+ wx.hideLoading()
+ wx.showToast({
+ title: '登录失败,请稍后再试',
+ icon: "none"
+ })
+ reject
+ }
+ },
+ fail: function (sessionResp) {
+ wx.hideLoading()
+ wx.showToast({
+ title: '登录失败,请稍后再试',
+ icon: "none"
+ })
+ reject
+ }
+ })
+ },
+ fail: function (loginResp) {
+ wx.hideLoading()
+ wx.showToast({
+ title: '登录失败,请稍后再试',
+ icon: "none"
+ })
+ reject
+ }
+ })
+ }
+ })
+ return promise
+}
+
+module.exports = {
+ "get": function (url, data, header) {
+ return fun(url, "GET", data, header)
+ },
+ "post": function (url, data, header) {
+ return fun(url, "POST", data, header)
+ },
+ "put": function (url, data, header) {
+ return fun(url, "PUT", data, header)
+ },
+ "delete": function (url, data, header) {
+ return fun(url, "DELETE", data, header)
+ },
+ upload: function (url, name, filePath) {
+ return upload(url, name, filePath)
+ },
+ loginWechat: loginWechat
+}
\ No newline at end of file
diff --git a/utils/util.js b/utils/util.js
new file mode 100644
index 0000000..29dcb97
--- /dev/null
+++ b/utils/util.js
@@ -0,0 +1,127 @@
+const formatTime = date => {
+ const year = date.getFullYear()
+ const month = date.getMonth() + 1
+ const day = date.getDate()
+ const hour = date.getHours()
+ const minute = date.getMinutes()
+ const second = date.getSeconds()
+ return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
+}
+
+const formatNumber = n => {
+ n = n.toString()
+ return n[1] ? n : '0' + n
+}
+
+function beforeDay(day, format) {
+ var date = new Date()
+ var formateArr = ['Y', 'M', 'D', 'h', 'm', 's'];
+ var returnArr = [];
+ returnArr.push(date.getFullYear());
+ returnArr.push(formatNumber(date.getMonth() + 1));
+ returnArr.push(formatNumber(date.getDate() - day));
+ returnArr.push(formatNumber(date.getHours()));
+ returnArr.push(formatNumber(date.getMinutes()));
+ returnArr.push(formatNumber(date.getSeconds()));
+ for (var i in returnArr) {
+ format = format.replace(formateArr[i], returnArr[i]);
+ }
+ return format;
+}
+
+function formatDate(date, format) {
+ var formateArr = ['Y', 'M', 'D', 'h', 'm', 's'];
+ var returnArr = [];
+ returnArr.push(date.getFullYear());
+ returnArr.push(formatNumber(date.getMonth() + 1));
+ returnArr.push(formatNumber(date.getDate()));
+ returnArr.push(formatNumber(date.getHours()));
+ returnArr.push(formatNumber(date.getMinutes()));
+ returnArr.push(formatNumber(date.getSeconds()));
+ for (var i in returnArr) {
+ format = format.replace(formateArr[i], returnArr[i]);
+ }
+ return format;
+}
+
+function json2Form(json) {
+ var str = [];
+ for (var p in json) {
+ str.push(encodeURIComponent(p) + "=" + encodeURIComponent(json[p]));
+ }
+ return str.join("&");
+}
+
+function isEmpty(val) {
+ return typeof val === 'undefined' || val === '' || val === null
+}
+
+function showTip(content) {
+ wx.showModal({
+ content: content,
+ showCancel: false
+ })
+}
+
+function showToast(content) {
+ if(isEmpty(content)){
+ return
+ }
+ wx.showToast({ title: content, icon: 'none' });
+}
+
+function extend(obj) {
+ var o = {},
+ attr = Array.prototype.slice.call(arguments).slice(1);
+ attr.forEach(function (val, index) {
+ if (val in obj) { o[val] = obj[val]; }
+ });
+ return o;
+}
+
+function playDing() {
+ const innerAudioContext = wx.createInnerAudioContext();//新建一个createInnerAudioContext();
+ innerAudioContext.autoplay = true;//音频自动播放设置
+ innerAudioContext.src = '/assets/raw/ptt_playfinish.mp3';//链接到音频的地址
+ innerAudioContext.onPlay(() => { });//播放音效
+ innerAudioContext.onError((res) => {//打印错误
+ console.log(res.errMsg);//错误信息
+ console.log(res.errCode);//错误码
+ })
+}
+
+function showBackToast(content) {
+ if (isEmpty(content)) {
+ return
+ }
+ wx.showToast({
+ title: content,
+ icon: 'none',
+ duration: 1000,
+ success: function () {
+ setTimeout(function () {
+ wx.navigateBack()
+ }, 1000)
+ }
+ })
+}
+
+/* 验证手机号 */
+function checkPhone(phone) {
+ var re = /^1\d{10}$/
+ return re.test(phone) && phone.length === 11
+}
+
+module.exports = {
+ isEmpty: isEmpty,
+ extend: extend,
+ formatTime: formatTime,
+ beforeDay: beforeDay,
+ formatDate: formatDate,
+ json2Form: json2Form,
+ showToast: showToast,
+ showTip: showTip,
+ playDing: playDing,
+ showBackToast: showBackToast,
+ checkPhone: checkPhone
+}
\ No newline at end of file