YanaDH vor 8 Jahren
Commit
2ad83c82db
100 geänderte Dateien mit 1789 neuen und 0 gelöschten Zeilen
  1. 0 0
      README.md
  2. 3 0
      wechat/.gitignore
  3. 11 0
      wechat/.txt
  4. 184 0
      wechat/api.tpl.js
  5. 541 0
      wechat/app.js
  6. 95 0
      wechat/app.json
  7. 441 0
      wechat/app.wxss
  8. 93 0
      wechat/area-picker/area-picker.js
  9. 26 0
      wechat/area-picker/area-picker.wxml
  10. 66 0
      wechat/area-picker/area-picker.wxss
  11. 58 0
      wechat/commons/copyright/copyright.wxml
  12. 3 0
      wechat/commons/extension/extension.wxml
  13. 34 0
      wechat/commons/extension/extension.wxss
  14. 27 0
      wechat/commons/float-icon/float-icon.wxml
  15. 35 0
      wechat/commons/get-card/get-card.wxml
  16. 100 0
      wechat/commons/get-card/get-card.wxss
  17. 34 0
      wechat/commons/get-coupon/get-coupon.wxml
  18. 38 0
      wechat/commons/navbar/navbar.wxml
  19. BIN
      wechat/images/car.png
  20. BIN
      wechat/images/cart_add.png
  21. BIN
      wechat/images/cart_less.png
  22. BIN
      wechat/images/cart_no_add.png
  23. BIN
      wechat/images/cart_no_less.png
  24. BIN
      wechat/images/clear.png
  25. BIN
      wechat/images/guige.jpg
  26. BIN
      wechat/images/ico-pt-active.png
  27. BIN
      wechat/images/icon-about-us.png
  28. BIN
      wechat/images/icon-address.png
  29. BIN
      wechat/images/icon-balance-ad.png
  30. BIN
      wechat/images/icon-balance-bg.png
  31. BIN
      wechat/images/icon-balance-left.png
  32. BIN
      wechat/images/icon-balance-p.png
  33. BIN
      wechat/images/icon-balance-right.png
  34. BIN
      wechat/images/icon-card-bg.png
  35. BIN
      wechat/images/icon-card-btn.png
  36. BIN
      wechat/images/icon-card-del.png
  37. BIN
      wechat/images/icon-card-qrcode.png
  38. BIN
      wechat/images/icon-card-top.png
  39. BIN
      wechat/images/icon-check.png
  40. BIN
      wechat/images/icon-checked.png
  41. BIN
      wechat/images/icon-clerk.png
  42. BIN
      wechat/images/icon-close.png
  43. BIN
      wechat/images/icon-close2.png
  44. BIN
      wechat/images/icon-close3.png
  45. BIN
      wechat/images/icon-close4.png
  46. BIN
      wechat/images/icon-comment-score-1.active.png
  47. BIN
      wechat/images/icon-comment-score-1.png
  48. BIN
      wechat/images/icon-comment-score-2.active.png
  49. BIN
      wechat/images/icon-comment-score-2.png
  50. BIN
      wechat/images/icon-comment-score-3.active.png
  51. BIN
      wechat/images/icon-comment-score-3.png
  52. BIN
      wechat/images/icon-coupon-index.png
  53. BIN
      wechat/images/icon-coupon-no.png
  54. BIN
      wechat/images/icon-coupon.png
  55. BIN
      wechat/images/icon-delete.png
  56. BIN
      wechat/images/icon-detail-love.png
  57. BIN
      wechat/images/icon-discount.png
  58. BIN
      wechat/images/icon-down.png
  59. BIN
      wechat/images/icon-edit.png
  60. BIN
      wechat/images/icon-favorite-active.png
  61. BIN
      wechat/images/icon-favorite.png
  62. BIN
      wechat/images/icon-group-share.png
  63. BIN
      wechat/images/icon-help.png
  64. BIN
      wechat/images/icon-huodao-selected.png
  65. BIN
      wechat/images/icon-image-picker.png
  66. BIN
      wechat/images/icon-integral-radio-active.png
  67. BIN
      wechat/images/icon-integral-radio.png
  68. BIN
      wechat/images/icon-jiantou-r.png
  69. BIN
      wechat/images/icon-jingxuan.png
  70. BIN
      wechat/images/icon-loading.gif
  71. BIN
      wechat/images/icon-member-bg.png
  72. BIN
      wechat/images/icon-member-level.png
  73. BIN
      wechat/images/icon-member-rights.png
  74. BIN
      wechat/images/icon-miaosha.png
  75. BIN
      wechat/images/icon-notice-jiantou.png
  76. BIN
      wechat/images/icon-notice-title.png
  77. BIN
      wechat/images/icon-notice.png
  78. BIN
      wechat/images/icon-ntegration.png
  79. BIN
      wechat/images/icon-offline.png
  80. BIN
      wechat/images/icon-online-selected.png
  81. BIN
      wechat/images/icon-order-0.png
  82. BIN
      wechat/images/icon-order-1.png
  83. BIN
      wechat/images/icon-order-2.png
  84. BIN
      wechat/images/icon-order-3.png
  85. BIN
      wechat/images/icon-order-4.png
  86. BIN
      wechat/images/icon-pay-right.png
  87. BIN
      wechat/images/icon-pintuan-text.png
  88. BIN
      wechat/images/icon-play.png
  89. BIN
      wechat/images/icon-point-gray.png
  90. BIN
      wechat/images/icon-point-green.png
  91. BIN
      wechat/images/icon-pt-group-bg.png
  92. BIN
      wechat/images/icon-receive-coupon.png
  93. BIN
      wechat/images/icon-search.png
  94. BIN
      wechat/images/icon-service.png
  95. BIN
      wechat/images/icon-share-ant.png
  96. BIN
      wechat/images/icon-share-bank.png
  97. BIN
      wechat/images/icon-share-friend.png
  98. BIN
      wechat/images/icon-share-qrcode.png
  99. BIN
      wechat/images/icon-share-selected.png
  100. BIN
      wechat/images/icon-share-wechat.png

+ 0 - 0
README.md


+ 3 - 0
wechat/.gitignore

xqd
@@ -0,0 +1,3 @@
+api.js
+project.config.json
+ext.json

+ 11 - 0
wechat/.txt

xqd
@@ -0,0 +1,11 @@
+默认字号:11pt
+默认字体颜色:#555
+
+小字号:9pt
+灰色字体颜色:#888
+
+块外线条颜色:#e3e3e3
+块内线条颜色:#eee
+
+主题红色:#ff4544
+绿色:#36ba75

+ 184 - 0
wechat/api.tpl.js

xqd
@@ -0,0 +1,184 @@
+var _api_root = '{$_api_root}';
+var api = {
+    index: _api_root + 'default/index',
+    default: {
+        store: _api_root + 'default/store',
+        index: _api_root + 'default/index',
+        goods_list: _api_root + 'default/goods-list',
+        cat_list: _api_root + 'default/cat-list',
+        goods: _api_root + 'default/goods',
+        district: _api_root + 'default/district',
+        goods_attr_info: _api_root + "default/goods-attr-info",
+        upload_image: _api_root + "default/upload-image",
+        comment_list: _api_root + "default/comment-list",
+        article_list: _api_root + "default/article-list",
+        article_detail: _api_root + "default/article-detail",
+        video_list: _api_root + "default/video-list",
+        goods_qrcode: _api_root + "default/goods-qrcode",
+        coupon_list: _api_root + "default/coupon-list",
+        topic_list: _api_root + "default/topic-list",
+        topic: _api_root + "default/topic",
+        navbar: _api_root + "default/navbar",
+        navigation_bar_color: _api_root + "default/navigation-bar-color",
+        shop_list: _api_root + "default/shop-list",
+        shop_detail: _api_root + "default/shop-detail",
+        topic_type: _api_root + "default/topic-type",
+        buy_data: _api_root + "default/buy-data",
+    },
+    cart: {
+        list: _api_root + 'cart/list',
+        add_cart: _api_root + 'cart/add-cart',
+        delete: _api_root + 'cart/delete',
+        cart_edit: _api_root + 'cart/cart-edit',
+    },
+    passport: {
+        login: _api_root + 'passport/login',
+        on_login: _api_root + 'passport/on-login',
+    },
+    order: {
+        submit_preview: _api_root + 'order/submit-preview',
+        submit: _api_root + 'order/submit',
+        pay_data: _api_root + 'order/pay-data',
+        list: _api_root + 'order/list',
+        revoke: _api_root + 'order/revoke',
+        confirm: _api_root + 'order/confirm',
+        count_data: _api_root + 'order/count-data',
+        detail: _api_root + 'order/detail',
+        refund_preview: _api_root + 'order/refund-preview',
+        refund: _api_root + 'order/refund',
+        refund_detail: _api_root + 'order/refund-detail',
+        comment_preview: _api_root + 'order/comment-preview',
+        comment: _api_root + 'order/comment',
+        express_detail: _api_root + 'order/express-detail',
+        clerk: _api_root + "order/clerk",
+        clerk_detail: _api_root + 'order/clerk-detail',
+        get_qrcode: _api_root + 'order/get-qrcode',
+        location: _api_root + 'order/location'
+    },
+    user: {
+        address_list: _api_root + 'user/address-list',
+        address_detail: _api_root + 'user/address-detail',
+        address_save: _api_root + 'user/address-save',
+        address_set_default: _api_root + 'user/address-set-default',
+        address_delete: _api_root + 'user/address-delete',
+        save_form_id: _api_root + "user/save-form-id",
+        favorite_add: _api_root + "user/favorite-add",
+        favorite_remove: _api_root + "user/favorite-remove",
+        favorite_list: _api_root + "user/favorite-list",
+        index: _api_root + "user/index",
+        wechat_district: _api_root + "user/wechat-district",
+        add_wechat_address: _api_root + "user/add-wechat-address",
+        topic_favorite: _api_root + "user/topic-favorite",
+        topic_favorite_list: _api_root + "user/topic-favorite-list",
+        member: _api_root + "user/member",
+        card: _api_root + "user/card",
+        card_qrcode: _api_root + "user/card-qrcode",
+        card_clerk: _api_root + "user/card-clerk",
+    },
+    share: {
+        join: _api_root + 'share/join',
+        check: _api_root + 'share/check',
+        get_info: _api_root + 'share/get-info',
+        get_price: _api_root + 'share/get-price',
+        apply: _api_root + 'share/apply',
+        cash_detail: _api_root + 'share/cash-detail',
+        get_qrcode: _api_root + 'share/get-qrcode',
+        shop_share: _api_root + 'share/shop-share',
+        bind_parent: _api_root + 'share/bind-parent',
+        get_team: _api_root + 'share/get-team',
+        get_order: _api_root + 'share/get-order',
+    },
+    coupon: {
+        index: _api_root + 'coupon/index',
+        share_send: _api_root + 'coupon/share-send',
+        receive: _api_root + 'coupon/receive',
+    },
+    miaosha: {
+        list: _api_root + 'miaosha/list',
+        goods_list: _api_root + 'miaosha/goods-list',
+        details: _api_root + 'miaosha/details',
+        submit_preview: _api_root + 'miaosha/submit-preview',
+        submit: _api_root + 'miaosha/submit',
+        pay_data: _api_root + 'miaosha/pay-data',
+        order_list: _api_root + 'miaosha/order-list',
+        order_details: _api_root + 'miaosha/order-details',
+        order_revoke: _api_root + 'miaosha/revoke',
+        express_detail: _api_root + 'miaosha/express-detail',
+        confirm: _api_root + 'miaosha/confirm',
+        comment_preview: _api_root + 'miaosha/comment-preview',
+        comment: _api_root + 'miaosha/comment',
+        refund_preview: _api_root + 'miaosha/refund-preview',
+        refund: _api_root + 'miaosha/refund',
+        refund_detail: _api_root + 'miaosha/refund-detail',
+        comment_list: _api_root + "miaosha/comment-list",
+        goods_qrcode: _api_root + "miaosha/goods-qrcode",
+    },
+    group: {
+        index: _api_root + 'group/index/index',
+        list: _api_root + 'group/index/good-list',
+        details: _api_root + 'group/index/good-details',
+        goods_attr_info: _api_root + "group/index/goods-attr-info",
+        submit_preview: _api_root + 'group/order/submit-preview',
+        submit: _api_root + 'group/order/submit',
+        pay_data: _api_root + 'group/order/pay-data',
+        order: {
+            list: _api_root + 'group/order/list',
+            detail: _api_root + 'group/order/detail',
+            express_detail: _api_root + 'group/order/express-detail',
+            comment_preview: _api_root + 'group/order/comment-preview',
+            comment: _api_root + 'group/order/comment',
+            confirm: _api_root + 'group/order/confirm',
+            goods_qrcode: _api_root + 'group/order/goods-qrcode',
+            get_qrcode: _api_root + 'group/order/get-qrcode',
+            clerk: _api_root + 'group/order/clerk',
+            clerk_order_details: _api_root + 'group/order/clerk-order-details',
+            revoke: _api_root + 'group/order/revoke',
+            refund_preview: _api_root + 'group/order/refund-preview',
+            refund: _api_root + 'group/order/refund',
+            refund_detail: _api_root + 'group/order/refund-detail',
+        },
+        group_info: _api_root + 'group/order/group',
+        comment: _api_root + 'group/index/goods-comment',
+        goods_qrcode: _api_root + 'group/index/goods-qrcode',
+        search: _api_root + 'group/index/search',
+    },
+    book: {
+        index: _api_root + 'book/index/index',
+        list: _api_root + 'book/index/good-list',
+        details: _api_root + 'book/index/good-details',
+        submit_preview: _api_root + 'book/order/submit-preview',
+        submit: _api_root + 'book/order/submit',
+        order_list: _api_root + 'book/order/list',
+        order_cancel: _api_root + 'book/order/cancel',
+        order_pay: _api_root + 'book/order/pay-data',
+        order_details: _api_root + 'book/order/order-details',
+        shop_list: _api_root + 'book/index/shop-list',
+        get_qrcode: _api_root + 'book/order/get-qrcode',
+        clerk: _api_root + 'book/order/clerk',
+        apply_refund: _api_root + 'book/order/apply-refund',
+        comment_preview: _api_root + 'book/order/comment-preview',
+        submit_comment: _api_root + 'book/order/comment',
+        goods_comment: _api_root + 'book/index/goods-comment',
+        goods_qrcode: _api_root + 'book/index/goods-qrcode',
+        clerk_order_details: _api_root + 'book/order/clerk-order-details',
+
+    },
+    quick: {
+      quick: _api_root + 'quick/quick/quick',
+      quick_goods: _api_root + 'quick/quick/quick-goods',
+      quick_car: _api_root + 'quick/quick/quick-car',
+    },
+    fxhb: {
+        open: _api_root + 'fxhb/index/open',
+        open_submit: _api_root + 'fxhb/index/open-submit',
+        detail: _api_root + 'fxhb/index/detail',
+        detail_submit: _api_root + 'fxhb/index/detail-submit',
+    },
+    recharge: {
+        index: _api_root + 'recharge/index',
+        list: _api_root + 'recharge/list',
+        submit: _api_root + 'recharge/submit',
+        record: _api_root + 'recharge/record',
+    },
+};
+module.exports = api;

+ 541 - 0
wechat/app.js

xqd
@@ -0,0 +1,541 @@
+//app.js
+var util = require('./utils/utils.js');
+var api;
+App({
+    is_on_launch: true,
+    onLaunch: function () {
+        let extConfig = wx.getExtConfigSync ? wx.getExtConfigSync() : {};
+        var uniacid = JSON.stringify(extConfig) != "{}" ? extConfig.uniacid : '20910';
+        this.siteInfo.uniacid = uniacid;
+        this.siteInfo.acid = uniacid;
+        wx.setStorageSync("store_id", uniacid);
+        console.log('uniacid:'+uniacid);
+        
+        this.setApi();
+        api = this.api;
+
+        this.getNavigationBarColor();
+        console.log(wx.getSystemInfoSync());
+        this.getStoreData();
+        this.getCatList();
+    },
+
+    getStoreData: function () {
+        var page = this;
+        this.request({
+            url: api.default.store,
+            success: function (res) {
+                if (res.code == 0) {
+                    wx.setStorageSync("store", res.data.store);
+                    wx.setStorageSync("store_name", res.data.store_name);
+                    wx.setStorageSync("show_customer_service", res.data.show_customer_service);
+                    wx.setStorageSync("contact_tel", res.data.contact_tel);
+                    wx.setStorageSync("share_setting", res.data.share_setting);
+                }
+            },
+            complete: function () {
+                page.login();
+            }
+        });
+    },
+
+    getCatList: function () {
+        this.request({
+            url: api.default.cat_list,
+            success: function (res) {
+                if (res.code == 0) {
+                    var cat_list = res.data.list || [];
+                    wx.setStorageSync("cat_list", cat_list);
+                }
+            }
+        });
+    },
+
+    login: function () {
+        var pages = getCurrentPages();
+        var page = pages[(pages.length - 1)];
+        wx.showLoading({
+            title: "正在登录",
+            mask: true,
+        });
+        wx.login({
+            success: function (res) {
+                if (res.code) {
+                    var code = res.code;
+                    wx.getUserInfo({
+                        success: function (res) {
+                            //console.log(res);
+                            getApp().request({
+                                url: api.passport.login,
+                                method: "post",
+                                data: {
+                                    code: code,
+                                    user_info: res.rawData,
+                                    encrypted_data: res.encryptedData,
+                                    iv: res.iv,
+                                    signature: res.signature
+                                },
+                                success: function (res) {
+                                    wx.hideLoading();
+                                    // console.log(code)
+                                    if (res.code == 0) {
+                                        wx.setStorageSync("access_token", res.data.access_token);
+                                        wx.setStorageSync("user_info", res.data);
+                                        // console.log(res);
+                                        // var parent_id = wx.getStorageSync("parent_id");
+                                        var p = getCurrentPages();
+                                        var parent_id = 0;
+                                        if (p[0].options.user_id != undefined) {
+                                            var parent_id = p[0].options.user_id;
+                                        }
+                                        else if (p[0].options.scene != undefined) {
+                                            var parent_id = p[0].options.scene;
+                                        }
+                                        // console.log(parent_id, p[0].options.scene, p[0].options.user_id);
+                                        getApp().bindParent({
+                                            parent_id: parent_id || 0
+                                        });
+
+                                        if (page == undefined) {
+                                            return;
+
+                                        }
+                                        var loginNoRefreshPage = getApp().loginNoRefreshPage;
+                                        for (var i in loginNoRefreshPage) {
+                                            if (loginNoRefreshPage[i] === page.route)
+                                                return;
+                                        }
+                                        wx.redirectTo({
+                                            url: "/" + page.route + "?" + util.objectToUrlParams(page.options),
+                                            fail: function () {
+                                                wx.switchTab({
+                                                    url: "/" + page.route,
+                                                });
+                                            },
+                                        });
+                                    } else {
+                                        wx.showToast({
+                                            title: res.msg
+                                        });
+                                    }
+                                }
+                            });
+                        },
+                        fail: function (res) {
+                            wx.hideLoading();
+                            getApp().getauth({
+                                content: '需要获取您的用户信息授权,请到小程序设置中打开授权',
+                                cancel: true,
+                                success: function (e) {
+                                    if (e) {
+                                        getApp().login();
+                                    }
+                                },
+                            });
+                        }
+                    });
+                } else {
+                    //console.log(res);
+                }
+
+            }
+        });
+    },
+    request: function (object) {
+        if (!object.data)
+            object.data = {};
+        var access_token = wx.getStorageSync("access_token");
+        if (access_token) {
+            object.data.access_token = access_token;
+        }
+        object.data._uniacid = this.siteInfo.uniacid;
+        object.data._acid = this.siteInfo.acid;
+        wx.request({
+            url: object.url,
+            header: object.header || {
+                'content-type': 'application/x-www-form-urlencoded'
+            },
+            data: object.data || {},
+            method: object.method || "GET",
+            dataType: object.dataType || "json",
+            success: function (res) {
+                if (res.data.code == -1) {
+                    getApp().login();
+                } else {
+                    if (object.success)
+                        object.success(res.data);
+                }
+            },
+            fail: function (res) {
+                console.warn('--- request fail >>>');
+                console.warn(res);
+                console.warn('<<< request fail ---');
+                var app = getApp();
+                if (app.is_on_launch) {
+                    app.is_on_launch = false;
+                    wx.showModal({
+                        title: "网络请求出错",
+                        content: res.errMsg,
+                        showCancel: false,
+                        success: function (res) {
+                            if (res.confirm) {
+                                if (object.fail)
+                                    object.fail(res);
+                            }
+                        }
+                    });
+                } else {
+                    wx.showToast({
+                        title: res.errMsg,
+                        image: "/images/icon-warning.png",
+                    });
+                    if (object.fail)
+                        object.fail(res);
+                }
+            },
+            complete: function (res) {
+                if (res.statusCode != 200) {
+                    console.log('--- request http error >>>');
+                    console.log(res.statusCode);
+                    console.log(res.data);
+                    console.log('<<< request http error ---');
+                }
+                if (object.complete)
+                    object.complete(res);
+            }
+        });
+    },
+    saveFormId: function (form_id) {
+        this.request({
+            url: api.user.save_form_id,
+            data: {
+                form_id: form_id,
+            }
+        });
+    },
+
+    loginBindParent: function (object) {
+        var access_token = wx.getStorageSync("access_token");
+        if (access_token == '') {
+            return true;
+        }
+        getApp().bindParent(object);
+    },
+    bindParent: function (object) {
+        if (object.parent_id == "undefined" || object.parent_id == 0)
+            return;
+        console.log("Try To Bind Parent With User Id:" + object.parent_id);
+        var user_info = wx.getStorageSync("user_info");
+        var share_setting = wx.getStorageSync("share_setting");
+        if (share_setting.level > 0) {
+            var parent_id = object.parent_id;
+            if (parent_id != 0) {
+                getApp().request({
+                    url: api.share.bind_parent,
+                    data: {parent_id: object.parent_id},
+                    success: function (res) {
+                        if (res.code == 0) {
+                            user_info.parent = res.data
+                            wx.setStorageSync('user_info', user_info);
+                        }
+                    }
+                });
+            }
+        }
+    },
+
+    /**
+     * 分享送优惠券
+     * */
+    shareSendCoupon: function (page) {
+        wx.showLoading({
+            mask: true,
+        });
+        if (!page.hideGetCoupon) {
+            page.hideGetCoupon = function (e) {
+                var url = e.currentTarget.dataset.url || false;
+                page.setData({
+                    get_coupon_list: null,
+                });
+                if (url) {
+                    wx.navigateTo({
+                        url: url,
+                    });
+                }
+            };
+        }
+        this.request({
+            url: api.coupon.share_send,
+            success: function (res) {
+                if (res.code == 0) {
+                    page.setData({
+                        get_coupon_list: res.data.list
+                    });
+                }
+            },
+            complete: function () {
+                wx.hideLoading();
+            }
+        });
+    },
+    getauth: function (object) {
+        wx.showModal({
+            title: '是否打开设置页面重新授权',
+            content: object.content,
+            confirmText: '去设置',
+            success: function (e) {
+                if (e.confirm) {
+                    wx.openSetting({
+                        success: function (res) {
+                            if (object.success) {
+                                object.success(res);
+                            }
+                        },
+                        fail: function (res) {
+                            if (object.fail) {
+                                object.fail(res);
+                            }
+                        },
+                        complete: function (res) {
+                            if (object.complete)
+                                object.complete(res);
+                        }
+                    })
+                } else {
+                    if (object.cancel) {
+                        getApp().getauth(object);
+                    }
+                }
+            }
+        })
+    },
+    api: require('api.js'),
+    setApi: function () {
+        var siteroot = this.siteInfo.siteroot;
+        siteroot = siteroot.replace('app/index.php', '');
+        siteroot += 'addons/zjhj_mall/core/web/index.php?store_id=-1&r=api/';
+
+        function getNewApiUri(api) {
+            for (var i in api) {
+                if (typeof api[i] === 'string') {
+                    api[i] = api[i].replace('{$_api_root}', siteroot);
+                } else {
+                    api[i] = getNewApiUri(api[i]);
+                }
+            }
+            return api;
+        }
+
+        this.api = getNewApiUri(this.api);
+        var _index_api_url = this.api.default.index;
+        var _web_root = _index_api_url.substr(0, _index_api_url.indexOf('/index.php'));
+        this.webRoot = _web_root;
+    },
+    webRoot: null,
+    siteInfo : {
+    'uniacid': '-1',
+    'acid': '-1',
+    'version': '1.0.0',
+    'siteroot': 'https://u5.9026.com/app/index.php',
+    },
+    currentPage: null,
+    pageOnLoad: function (page) {
+        this.currentPage = page;
+        console.log('--------pageOnLoad----------');
+        if (typeof  page.openWxapp === 'undefined') {
+            page.openWxapp = this.openWxapp;
+        }
+        if (typeof  page.showToast === 'undefined') {
+            page.showToast = this.pageShowToast;
+        }
+        this.setNavigationBarColor();
+        this.setPageNavbar(page);
+        var app = this;
+        this.currentPage.naveClick = function(e){
+            var page = this;
+            app.navigatorClick(e,page);
+        }
+    },
+    pageOnReady: function (page) {
+        console.log('--------pageOnReady----------');
+
+    },
+    pageOnShow: function (page) {
+        console.log('--------pageOnShow----------');
+
+    },
+    pageOnHide: function (page) {
+        console.log('--------pageOnHide----------');
+
+    },
+    pageOnUnload: function (page) {
+        console.log('--------pageOnUnload----------');
+
+    },
+
+    setPageNavbar: function (page) {
+        console.log('----setPageNavbar----');
+        console.log(page);
+        var navbar = wx.getStorageSync('_navbar');
+
+        if (navbar) {
+            setNavbar(navbar);
+        }
+        this.request({
+            url: api.default.navbar,
+            success: function (res) {
+                if (res.code == 0) {
+                    setNavbar(res.data);
+                    wx.setStorageSync('_navbar', res.data);
+                }
+            }
+        });
+
+        function setNavbar(navbar) {
+            var in_navs = false;
+            var route = page.route || (page.__route__ || null);
+            for (var i in navbar.navs) {
+                if (navbar.navs[i].url === "/" + route) {
+                    navbar.navs[i].active = true;
+                    in_navs = true;
+                } else {
+                    navbar.navs[i].active = false;
+                }
+            }
+            if (!in_navs)
+                return;
+            page.setData({_navbar: navbar});
+        }
+
+    },
+
+    getNavigationBarColor: function () {
+        var app = this;
+        app.request({
+            url: api.default.navigation_bar_color,
+            success: function (res) {
+                if (res.code == 0) {
+                    wx.setStorageSync('_navigation_bar_color', res.data);
+                    app.setNavigationBarColor();
+                }
+            }
+        });
+    },
+
+    setNavigationBarColor: function () {
+        var navigation_bar_color = wx.getStorageSync('_navigation_bar_color');
+        if (navigation_bar_color) {
+            wx.setNavigationBarColor(navigation_bar_color);
+        }
+    },
+
+    //登录成功后不刷新的页面
+    loginNoRefreshPage: [
+        'pages/index/index',
+        //'pages/fxhb/open/open',
+        //'pages/fxhb/detail/detail',
+    ],
+
+    openWxapp: function (e) {
+        console.log('--openWxapp---');
+        if (!e.currentTarget.dataset.url)
+            return;
+        var url = e.currentTarget.dataset.url;
+        url = parseQueryString(url);
+        url.path = url.path ? decodeURIComponent(url.path) : "";
+        console.log("Open New App");
+        console.log(url);
+        wx.navigateToMiniProgram({
+            appId: url.appId,
+            path: url.path,
+            complete: function (e) {
+                console.log(e);
+            }
+        });
+
+        function parseQueryString(url) {
+            var reg_url = /^[^\?]+\?([\w\W]+)$/,
+                reg_para = /([^&=]+)=([\w\W]*?)(&|$|#)/g,
+                arr_url = reg_url.exec(url),
+                ret = {};
+            if (arr_url && arr_url[1]) {
+                var str_para = arr_url[1], result;
+                while ((result = reg_para.exec(str_para)) != null) {
+                    ret[result[1]] = result[2];
+                }
+            }
+            return ret;
+        }
+    },
+
+    pageShowToast: function (e) {
+        console.log('--- pageToast ---');
+        var page = this.currentPage;
+        var duration = e.duration || 2500;
+        var title = e.title || '';
+        var success = e.success || null;
+        var fail = e.fail || null;
+        var complete = e.complete || null;
+        if (page._toast_timer) {
+            clearTimeout(page._toast_timer);
+        }
+        page.setData({
+            _toast: {
+                title: title,
+            },
+        });
+        page._toast_timer = setTimeout(function () {
+            var _toast = page.data._toast;
+            _toast.hide = true;
+            page.setData({
+                _toast: _toast,
+            });
+            if (typeof complete == 'function') {
+                complete();
+            }
+        }, duration);
+    },
+
+    navigatorClick: function (e,page) {
+        var open_type = e.currentTarget.dataset.open_type;
+        if(open_type == 'redirect'){
+            return true;
+        }
+        if (open_type == 'wxapp') {
+            var path = e.currentTarget.dataset.path;
+            var str = path.substr(0,1);
+            if(str != '/'){
+                path = '/' + path;
+            }
+            wx.navigateToMiniProgram({
+                appId: e.currentTarget.dataset.appid,
+                path: path,
+                complete: function (e) {
+                    console.log(e);
+                }
+            });
+        }
+        if(open_type == 'tel'){
+            var contact_tel = e.currentTarget.dataset.tel;
+            wx.makePhoneCall({
+                phoneNumber: contact_tel
+            })
+        }
+        return false;
+
+        function parseQueryString(url) {
+            var reg_url = /^[^\?]+\?([\w\W]+)$/,
+                reg_para = /([^&=]+)=([\w\W]*?)(&|$|#)/g,
+                arr_url = reg_url.exec(url),
+                ret = {};
+            if (arr_url && arr_url[1]) {
+                var str_para = arr_url[1], result;
+                while ((result = reg_para.exec(str_para)) != null) {
+                    ret[result[1]] = result[2];
+                }
+            }
+            return ret;
+        }
+    },
+
+});

+ 95 - 0
wechat/app.json

xqd
@@ -0,0 +1,95 @@
+{
+  "pages": [
+    "pages/index/index",
+    "pages/cart/cart",
+    "pages/goods/goods",
+    "pages/list/list",
+    "pages/user/user",
+    "pages/search/search",
+    "pages/order-submit/order-submit",
+    "pages/order/order",
+    "pages/order-detail/order-detail",
+    "pages/address/address",
+    "pages/address-edit/address-edit",
+    "pages/address-picker/address-picker",
+    "pages/test/test",
+    "pages/favorite/favorite",
+    "pages/order-refund/order-refund",
+    "pages/order-refund-detail/order-refund-detail",
+    "pages/add-share/index",
+    "pages/share/index",
+    "pages/cash/cash",
+    "pages/share-money/share-money",
+    "pages/cash-detail/cash-detail",
+    "pages/share-team/share-team",
+    "pages/share-order/share-order",
+    "pages/share-qrcode/share-qrcode",
+    "pages/order-comment/order-comment",
+    "pages/article-list/article-list",
+    "pages/article-detail/article-detail",
+    "pages/express-detail/express-detail",
+    "pages/cat/cat",
+    "pages/coupon/coupon",
+    "pages/clerk/clerk",
+    "pages/video/video-list",
+    "pages/coupon-list/coupon-list",
+    "pages/topic-list/topic-list",
+    "pages/topic/topic",
+    "pages/member/member",
+    "pages/web/web",
+    "pages/shop/shop",
+    "pages/shop-detail/shop-detail",
+    "pages/card/card",
+    "pages/card-clerk/card-clerk",
+
+    "pages/miaosha/miaosha",
+    "pages/miaosha/details/details",
+    "pages/miaosha/order-submit/order-submit",
+    "pages/miaosha/order/order",
+    "pages/miaosha/order-detail/order-detail",
+    "pages/miaosha/express-detail/express-detail",
+    "pages/miaosha/order-comment/order-comment",
+    "pages/miaosha/order-refund/order-refund",
+    "pages/miaosha/order-refund-detail/order-refund-detail",
+
+    "pages/pt/index/index",
+    "pages/pt/list/list",
+    "pages/pt/details/details",
+    "pages/pt/order-submit/order-submit",
+    "pages/pt/order/order",
+    "pages/pt/order-details/order-details",
+    "pages/pt/group/details",
+    "pages/pt/express-detail/express-detail",
+    "pages/pt/order-comment/order-comment",
+    "pages/pt/comment/comment",
+    "pages/pt/clerk/clerk",
+    "pages/pt/order-refund/order-refund",
+    "pages/pt/order-refund-detail/order-refund-detail",
+    "pages/pt/search/search",
+
+    "pages/book/index/index",
+    "pages/book/details/details",
+    "pages/book/submit/submit",
+    "pages/book/order/order",
+    "pages/book/order/details",
+    "pages/book/shop/shop",
+    "pages/book/clerk/clerk",
+    "pages/book/order-comment/order-comment",
+    "pages/book/comment/comment",
+
+    "pages/fxhb/open/open",
+    "pages/fxhb/detail/detail",
+    "pages/quick-purchase/index/index",
+
+    "pages/balance/balance",
+    "pages/recharge/recharge"
+  ],
+  "window": {
+    "backgroundTextStyle": "light",
+    "navigationBarBackgroundColor": "#fff",
+    "navigationBarTitleText": "Mall",
+    "navigationBarTextStyle": "black",
+    "backgroundColor": "#EFEFF4"
+  },
+  "debug": false
+}

+ 441 - 0
wechat/app.wxss

xqd
@@ -0,0 +1,441 @@
+/**app.wxss**/
+
+@import "/area-picker/area-picker.wxss";
+@import "/commons/extension/extension.wxss";
+
+page {
+    height: 100%;
+    font-size: 11pt;
+    color: #555;
+    background: #EFEFF4;
+    overflow-x: hidden;
+}
+
+page,
+block,
+view,
+scroll-view,
+swiper,
+movable-view,
+icon,
+text,
+progress,
+button,
+checkbox,
+form,
+input,
+label,
+picker,
+picker-view,
+radio,
+slider,
+switch,
+textarea,
+navigator,
+audio,
+image,
+video,
+map,
+canvas,
+contact-button {
+    box-sizing: border-box;
+}
+button{
+    font-size: 11pt;
+    font-family: inherit;
+}
+.flex {
+    display: -webkit-box;
+    display: -webkit-flex;
+    display: flex;
+}
+
+.flex-row {
+    display: -webkit-box;
+    display: -webkit-flex;
+    display: flex;
+
+    -webkit-box-orient: horizontal;
+    -webkit-flex-direction: row;
+    flex-direction: row;
+}
+
+.flex-col{
+    display: -webkit-box;
+    display: -webkit-flex;
+    display: flex;
+
+    -webkit-box-orient: vertical;
+    -webkit-flex-direction: column;
+    flex-direction: column;
+}
+
+.flex-grow-0{
+    min-width: 0;
+    -webkit-box-flex: 0;
+    -webkit-flex-grow: 0;
+    -ms-flex-positive: 0;
+    flex-grow: 0;
+    -webkit-flex-shrink: 0;
+    -ms-flex-negative: 0;
+    flex-shrink: 0;
+}
+.flex-grow-1{
+    min-width: 0;
+    -webkit-box-flex: 1;
+    -webkit-flex-grow: 1;
+    -ms-flex-positive: 1;
+    flex-grow: 1;
+    -webkit-flex-shrink: 1;
+    -ms-flex-negative: 1;
+    flex-shrink: 1;
+}
+
+.flex-x-center{
+    display: -webkit-box;
+    display: -webkit-flex;
+    display: flex;
+
+    -webkit-box-pack: center;
+    -webkit-justify-content: center;
+    -ms-flex-pack: center;
+    justify-content: center;
+}
+.flex-y-center{
+    display: -webkit-box;
+    display: -webkit-flex;
+    display: flex;
+
+    -webkit-box-align: center;
+    -webkit-align-items: center;
+    -ms-flex-align: center;
+    -ms-grid-row-align: center;
+    align-items: center;
+}
+.flex-y-bottom{
+    display: -webkit-box;
+    display: -webkit-flex;
+    display: flex;
+
+    -webkit-box-align: end;
+    -webkit-align-items: flex-end;
+    -ms-flex-align: end;
+    -ms-grid-row-align: flex-end;
+    align-items: flex-end;
+}
+
+
+
+.spinner {
+    margin: 0 auto;
+    width: 100rpx;
+    height: 50rpx;
+    text-align: center;
+    font-size: 10rpx;
+}
+
+.spinner > view {
+    background-color: #8c949a;
+    height: 100%;
+    width: 10rpx;
+    display: inline-block;
+    margin: 0 2rpx;
+    animation: sk-stretchdelay 1.2s infinite ease-in-out;
+}
+
+.spinner .rect2 {
+    animation-delay: -1.1s;
+}
+
+.spinner .rect3 {
+    animation-delay: -1.0s;
+}
+
+.spinner .rect4 {
+    animation-delay: -0.9s;
+}
+
+.spinner .rect5 {
+    animation-delay: -0.8s;
+}
+
+@keyframes sk-stretchdelay {
+    0%, 40%, 100% {
+        transform: scaleY(0.4);
+        -webkit-transform: scaleY(0.4);
+    }  20% {
+           transform: scaleY(1.0);
+           -webkit-transform: scaleY(1.0);
+       }
+}
+
+.copy-text-btn{
+    line-height: normal;
+    height: auto;
+    display: inline-block;
+    font-size: 9pt;
+    color: #888;
+    border: 1rpx solid #ddd;
+    border-radius: 5rpx;
+    padding: 6rpx 12rpx;
+    background-color: #fff !important;
+    box-shadow: none;
+}
+
+.no-data-tip{
+    padding: 150rpx 0;
+    text-align: center;
+    color: #888;
+}
+
+.no-data-tip .no-data-icon{
+    width: 160rpx;
+    height: 160rpx;
+    font-size: 0;
+    border-radius: 9999rpx;
+    background: rgba(0,0,0,.1);
+    margin-left: auto;
+    margin-right: auto;
+    margin-bottom: 32rpx;
+}
+
+.bg-white{
+    background-color: #fff;
+}
+
+.mb-20{
+    margin-bottom: 20rpx;
+}
+
+.mb-10{
+    margin-bottom: 10rpx;
+}
+
+button[plain]{
+    border: none;
+    background: #fff;
+    color: inherit;
+}
+
+.nowrap{
+    white-space: nowrap;
+}
+
+.fs-0{
+    font-size: 0;
+}
+
+.get-coupon{
+    position: fixed;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    background: rgba(0,0,0,.75);
+    z-index: 999;
+}
+.get-coupon .get-coupon-box{
+    position: relative;
+    width: 100%;
+}
+
+.get-coupon .get-coupon-bg{
+    width: 100%;
+    position: absolute;
+    left: 0;
+    top:-210rpx;
+    z-index: -1;
+}
+
+.get-coupon .coupon-list{
+    height: 330rpx;
+    width: 550rpx;
+    margin: 0 auto;
+}
+
+.get-coupon .coupon-item{
+    width: 520rpx;
+    height: 264rpx;
+    margin-bottom: 20rpx;
+    position: relative;
+    color: #fff;
+    padding: 0 40rpx;
+}
+
+
+.get-coupon .coupon-item image{
+    position: absolute;
+    z-index: -1;
+    left: 0;
+    top:0;
+    width: 100%;
+}
+
+.get-coupon .coupon-item:last-child{
+    margin-bottom: 0;
+}
+
+.get-coupon .use-now{
+    display: block;
+    text-align: center;
+    height: 60rpx;
+    line-height: 60rpx;
+    color: #ff4544;
+    background: #fff;
+    border-radius: 6rpx;
+    margin: 15rpx 0;
+    font-size: 9pt;
+}
+
+.fs-sm{
+    font-size: 9pt;
+}
+
+.p-10{
+    padding: 10rpx 10rpx;
+}
+
+.px-24{
+    padding-left: 24rpx;
+    padding-right: 24rpx;
+}
+
+.float-icon{
+    position: fixed;
+    z-index: 20;
+    right: 50rpx;
+    bottom: 50rpx;
+}
+
+.bar-bottom~.float-icon{
+    bottom: 150rpx;
+}
+
+.float-icon .float-icon-btn{
+    display: block;
+    padding: 0;
+    margin: 0;
+    border: none;
+    background: none;
+}
+.float-icon .float-icon-btn:after{
+    display: none;
+}
+
+.float-icon .float-icon-btn:active{
+    opacity: .75;
+}
+
+.float-icon .float-icon-btn image{
+    width: 100rpx;
+    height: 100rpx;
+    display: block;
+}
+
+.w-100{
+    width: 100%;
+}
+
+.h-100{
+    height: 100%;
+}
+
+.wh-100{
+    width: 100%;
+    height: 100%;
+}
+.text-more{
+  width: 100%;
+  overflow: hidden;
+  white-space: nowrap;
+  text-overflow: ellipsis;
+  word-break: break-all;
+}
+
+.navbar{
+    position: fixed;
+    bottom: 0;
+    left: 0;
+    width: 100%;
+    height: 115rpx;
+    background: #fff;
+    color: #555;
+    z-index: 2000;
+    border-top: 1rpx solid rgba(0,0,0,.1);
+    box-sizing: border-box;
+}
+
+.navbar navigator{
+    height: 100%;
+    width: 1%;
+}
+
+.navbar navigator > view{
+    width: 100%;
+    padding-top: 4px;
+}
+
+.navbar .navbar-icon{
+    width: 64rpx;
+    height: 64rpx;
+    display: block;
+    margin: 0 auto;
+}
+
+.navbar .navbar-text{
+    font-size: 8pt;
+    text-align: center;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+    overflow: hidden;
+}
+.navbar + .after-navber{
+    padding-bottom: 115rpx;
+}
+
+.navbar ~ .float-icon,
+.navbar + .after-navber .float-icon {
+    bottom: 170rpx !important;
+}
+
+.hidden{
+    display: none;
+}
+
+.text-more-2 {
+  width: 100%;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  display: -webkit-box;
+  -webkit-line-clamp: 2;
+  -webkit-box-orient: vertical;
+  word-break: break-all;
+}
+
+.no-scroll {
+  height: 100%;
+  overflow-y: hidden;
+}
+
+
+.dial {
+    width: 100rpx;
+    height: 100rpx;
+    border-radius: 10rpx;
+    display: block;
+    margin-bottom: 32rpx;
+}
+
+.navbar button{
+    display: block;
+    padding: 0;
+    border: 0;
+    background: none;
+    margin: 0;
+    width: 100%;
+    line-height: 1.25;
+}
+
+.navbar button::after{
+    display: none;
+}

+ 93 - 0
wechat/area-picker/area-picker.js

xqd
@@ -0,0 +1,93 @@
+var area_picker = {
+    page: null,
+    data: null,
+    old_value: [0, 0, 0],
+    result: [null, null, null],
+    init: function (args) {
+        var picker = this;
+        picker.page = args.page;
+        picker.data = args.data;
+        picker.page.showAreaPicker = function () {
+            picker.page.setData({
+                area_picker_show: true,
+            });
+        };
+        picker.page.hideAreaPicker = function () {
+            picker.page.setData({
+                area_picker_show: false,
+            });
+        };
+
+        var city_list = picker.data[0].list || [];
+        var district_list = [];
+        if (city_list.length > 0)
+            district_list = city_list[0].list || [];
+
+        picker.page.setData({
+            area_picker_province_list: picker.data,
+            area_picker_city_list: city_list,
+            area_picker_district_list: district_list,
+        });
+
+        picker.result[0] = picker.data[0] || null;
+        if (picker.data[0].list) {
+            picker.result[1] = picker.data[0].list[0];
+            if (picker.data[0].list[0].list)
+                picker.result[2] = picker.data[0].list[0].list[0];
+        }
+
+        picker.page.areaPickerChange = function (e) {
+            var province_index = e.detail.value[0];
+            var city_index = e.detail.value[1];
+            var district_index = e.detail.value[2];
+            if (e.detail.value[0] != picker.old_value[0]) {//省份改变
+                city_index = 0;
+                district_index = 0;
+                city_list = picker.data[province_index].list;
+                district_list = city_list[0].list;
+
+                picker.page.setData({
+                    area_picker_city_list: [],
+                    area_picker_district_list: [],
+                });
+                setTimeout(function () {
+                    picker.page.setData({
+                        area_picker_city_list: city_list,
+                        area_picker_district_list: district_list,
+                    });
+                }, 0);
+
+            }
+            if (e.detail.value[1] != picker.old_value[1]) {//城市改变
+                district_index = 0;
+                district_list = picker.data[province_index].list[city_index].list;
+                picker.page.setData({
+                    area_picker_district_list: [],
+                });
+                setTimeout(function () {
+                    picker.page.setData({
+                        area_picker_district_list: district_list,
+                    });
+                }, 0);
+            }
+            if (e.detail.value[2] != picker.old_value[2]) {//区改变
+            }
+            picker.old_value = [province_index, city_index, district_index];
+            picker.result[0] = picker.data[province_index];
+            picker.result[1] = picker.data[province_index].list[city_index];
+            picker.result[2] = picker.data[province_index].list[city_index].list[district_index];
+        };
+
+
+        picker.page.areaPickerConfirm = function () {
+            picker.page.hideAreaPicker();
+            // console.log(1);
+            // console.log(picker.page);
+            // console.log(typeof picker.page.onAreaPickerConfirm);
+            if (picker.page.onAreaPickerConfirm)
+                picker.page.onAreaPickerConfirm(picker.result);
+        };
+        return this;
+    },
+};
+module.exports = area_picker;

+ 26 - 0
wechat/area-picker/area-picker.wxml

xqd
@@ -0,0 +1,26 @@
+<view class="area-picker {{area_picker_show?'active':''}}">
+    <view class="area-picker-bg" bindtap="hideAreaPicker">
+        <scroll-view></scroll-view>
+    </view>
+    <view class="area-picker-body">
+        <scroll-view>
+            <view class="area-picker-top">
+                <text class="area-picker-cancel" bindtap="hideAreaPicker">取消</text>
+                <text class="area-picker-confirm" bindtap="areaPickerConfirm">确认</text>
+            </view>
+            <view class="area-picker-row">
+                <picker-view indicator-style="height: 120rpx" style="width: 100%; height: 500rpx;" bindchange="areaPickerChange">
+                    <picker-view-column>
+                        <view wx:for="{{area_picker_province_list}}" wx:key="index" style="line-height: 100rpx;text-align: center">{{item.name}}</view>
+                    </picker-view-column>
+                    <picker-view-column>
+                        <view wx:for="{{area_picker_city_list}}" wx:key="index" style="line-height: 100rpx;text-align: center">{{item.name}}</view>
+                    </picker-view-column>
+                    <picker-view-column>
+                        <view wx:for="{{area_picker_district_list}}" wx:key="index" style="line-height: 100rpx;text-align: center">{{item.name}}</view>
+                    </picker-view-column>
+                </picker-view>
+            </view>
+        </scroll-view>
+    </view>
+</view>

+ 66 - 0
wechat/area-picker/area-picker.wxss

xqd
@@ -0,0 +1,66 @@
+.area-picker{
+    position: fixed;
+    z-index: 10000;
+    left: 0;
+    top:0;
+    width: 100%;
+    height: 100%;
+    display: flex;
+    flex-direction: column;
+    transform: translateY(100%);
+    transition: 250ms opacity;
+    opacity: 0;
+    background: rgba(0,0,0,.3);
+}
+
+.area-picker.active{
+    transform: translateY(0);
+    opacity: 1;
+}
+
+.area-picker .area-picker-bg{
+    flex-grow: 1;
+    position: relative;
+}
+.area-picker .area-picker-bg > scroll-view{
+    left: 0;
+    top:0;
+    height: 100%;
+    width: 100%;
+    position: absolute;
+}
+.area-picker .area-picker-body{
+    flex-grow: 0;
+    height: 600rpx;
+    background: #fff;
+    transform: translateY(100%);
+    transition: 250ms transform;
+    position: relative;
+}
+
+.area-picker.active .area-picker-body{
+    transform: translateY(0);
+}
+.area-picker .area-picker-body > scroll-view{
+    left: 0;
+    top:0;
+    height: 100%;
+    width: 100%;
+    position: absolute;
+}
+.area-picker .area-picker-cancel,
+.area-picker .area-picker-confirm {
+    display: inline-block;
+    padding: 24rpx;
+    color: #888;
+}
+
+.area-picker .area-picker-confirm{
+    float: right;
+    color: #00aa00;
+}
+
+.area-picker .area-picker-row{
+    width: 100%;
+    height: 500rpx;
+}

+ 58 - 0
wechat/commons/copyright/copyright.wxml

xqd
@@ -0,0 +1,58 @@
+<!-- 优先使用新的版权方案 -->
+<block wx:if="{{copyright&&(copyright.icon||copyright.text)}}">
+    <view wx:if="{{copyright.open_type=='wxapp'}}" style="padding: 24rpx">
+        <view style="text-align: center;font-size: 0;">
+            <image wx:if="{{copyright.icon}}" src="{{copyright.icon}}"
+                   style="height: 60rpx;width: 240rpx"
+                   bindtap="openWxapp"
+                   data-url="{{copyright.url}}"
+                   mode="aspectFit"></image>
+        </view>
+        <view style="text-align: center;line-height: 1">
+            <text wx:if="{{copyright.text}}"
+                  bindtap="openWxapp"
+                  style="color: rgba(0,0,0,.3);font-size: 9pt;"
+                  data-url="{{copyright.url}}">{{copyright.text}}</text>
+        </view>
+    </view>
+    <view wx:elif="{{copyright.open_type=='navigate'}}" style="padding: 24rpx">
+        <view style="text-align: center;font-size: 0;">
+            <navigator url="{{copyright.url}}" style="display: inline-block">
+                <image wx:if="{{copyright.icon}}" src="{{copyright.icon}}"
+                       style="height: 60rpx;width: 240rpx"
+                       mode="aspectFit"></image>
+            </navigator>
+        </view>
+        <view style="text-align: center;line-height: 1">
+            <navigator wx:if="{{copyright.text}}"
+                  style="color: rgba(0,0,0,.3);font-size: 9pt;display: inline-block"
+                  url="{{copyright.url}}">{{copyright.text}}</navigator>
+        </view>
+    </view>
+    <view wx:else style="padding: 24rpx">
+        <view style="text-align: center;font-size: 0;">
+            <image wx:if="{{copyright.icon}}" src="{{copyright.icon}}"
+                   style="height: 60rpx;width: 240rpx"
+                   mode="aspectFit"></image>
+        </view>
+        <view style="text-align: center;line-height: 1">
+            <text wx:if="{{copyright.text}}"
+                  style="color: rgba(0,0,0,.3);font-size: 9pt;">{{copyright.text}}</text>
+        </view>
+    </view>
+</block>
+<block wx:else>
+    <block wx:if="{{store.copyright||store.copyright_pic_url}}">
+        <view class="flex-y-center flex-x-center flex-col" style="padding: 20rpx">
+            <view wx:if="{{store.copyright_pic_url}}">
+                <navigator url="{{store.copyright_url}}">
+                    <image src="{{store.copyright_pic_url}}" style="height: 60rpx;width: 240rpx"
+                           mode="aspectFit"></image>
+                </navigator>
+            </view>
+            <view wx:if="{{store.copyright}}" style="color: rgba(0,0,0,.3);font-size: 9pt;">
+                <navigator url="{{store.copyright_url}}">{{store.copyright}}</navigator>
+            </view>
+        </view>
+    </block>
+</block>

+ 3 - 0
wechat/commons/extension/extension.wxml

xqd
@@ -0,0 +1,3 @@
+<view id="_toast" wx:if="{{_toast}}">
+    <view id="_toast_title" class="{{_toast.hide?'hide':''}}"><text>{{_toast.title}}</text></view>
+</view>

+ 34 - 0
wechat/commons/extension/extension.wxss

xqd
@@ -0,0 +1,34 @@
+#_toast {
+    position: fixed;
+    top: 20%;
+    left: 0;
+    width: 100%;
+    height: 0;
+    background: #ff0;
+    z-index: 10000;
+    padding: 0 120rpx;
+    text-align: center;
+}
+
+#_toast_title {
+    font-size: 11pt;
+    display: inline-block;
+    background: rgba(0, 0, 0, 0.85);
+    color: #fff;
+    margin: 0 auto;
+    padding: 16rpx 32rpx;
+    border-radius: 16rpx;
+    max-height: 60vh;
+    overflow-y: auto;
+    overflow-x: hidden;
+    text-align: left;
+    transition: 150ms;
+    word-break: break-all;
+    box-shadow:0 0 25rpx 5rpx rgba(0, 0, 0, .5);
+
+}
+
+#_toast_title.hide {
+    opacity: 0;
+    visibility: hidden;
+}

+ 27 - 0
wechat/commons/float-icon/float-icon.wxml

xqd
@@ -0,0 +1,27 @@
+<!--
+<movable-area style="height: {{y*2}}rpx;width: {{x*2}}rpx;position:fixed;top:0;left:0;pointer-events:none">
+=======
+<movable-area style="height: {{y}}px;width: {{x}}px;position:fixed;top:0;left:0;pointer-events:none">
+>>>>>>> Stashed changes
+  <movable-view direction="all" class="float-icon" style='width:100rpx;height:100rpx;pointer-events:all;' x='{{x-60}}' y='{{y-60}}'>
+    <button open-type="contact" class="float-icon-btn" style='width:100%;height:100%;'>
+      <image src="/images/icon-service.png" style='width:100%;height:100%;'></image>
+    </button>
+  </movable-view>
+</movable-area>
+-->
+<view direction="all" class="float-icon">
+    <block wx:if='{{store.dial == 1}}'>
+        <view class='dial' bindtap='to_dial' style="background-image:url('{{store.dial_pic}}'); background-size: 100rpx 100rpx;" />
+    </block>
+    <block wx:if='{{store.option.web_service}}'>
+        <navigator url="/pages/web/web?url={{store.option.web_service_url}}" open-type="navigate" hover-class='none'>
+            <image class='dial' src="{{store.option.web_service}}"></image>
+        </navigator>
+    </block>
+    <block wx:if="{{store.show_customer_service && store.show_customer_service==1}}">
+        <button open-type="contact" session-from="{{_user_info.nickname}}|" class="float-icon-btn">
+            <image src="{{store.service}}"></image>
+        </button>
+    </block>
+</view>

+ 35 - 0
wechat/commons/get-card/get-card.wxml

xqd
@@ -0,0 +1,35 @@
+<block wx:if='{{show_card}}'>
+    <view class='get-card flex-x-center flex-y-center'>
+        <view class='card-block'>
+            <image src='/images/icon-card-top.png' style='width:630rpx;height:330rpx;'></image>
+            <view class='card-del flex-x-center flex-y-center' bindtap='cardDel'>
+                <image src='/images/icon-card-del.png'></image>
+            </view>
+            <view class='flex-x-center'>
+                <view class='card-info'>
+                    <view class='flex-x-center card-get'>获得{{goods_card_list.length}}张卡券</view>
+                    <block wx:for='{{goods_card_list}}'>
+                        <block wx:if='{{index<1}}'>
+                            <view class='flex-x-center card-one'>
+                                <view class='card-bg'>
+                                    <view class='card-bg-1 flex-row'>
+                                        <view class='flex-grow-0 flex-y-center'>
+                                            <image src='{{item.pic_url}}' style='width:70rpx;height:70rpx;margin-right:32rpx;'></image>
+                                        </view>
+                                        <view class='flex-grow-1 flex-y-center'>
+                                            <view class='text-more-2'>{{item.content}}</view>
+                                        </view>
+                                    </view>
+                                </view>
+                            </view>
+                        </block>
+                    </block>
+                    <view class='card-text flex-x-center'>卡券将5分钟内放入您的卡包</view>
+                    <view class='flex-x-center card-btn' bindtap='cardTo'>
+                        <image src='/images/icon-card-btn.png'></image>
+                    </view>
+                </view>
+            </view>
+        </view>
+    </view>
+</block>

+ 100 - 0
wechat/commons/get-card/get-card.wxss

xqd
@@ -0,0 +1,100 @@
+.get-card {
+    width: 100%;
+    height: 100%;
+    position: absolute;
+    left: 0;
+    top: 0;
+    z-index: 2000;
+    background-color: rgba(0, 0, 0, 0.5);
+}
+
+.card-block {
+    margin-top: -140rpx;
+    position: relative;
+}
+
+.card-info {
+    width: 559rpx;
+    border-radius: 0 0 30rpx 30rpx;
+    background-color: #fff;
+    margin-top: -20rpx;
+    padding: 20rpx 0 50rpx 0;
+}
+
+.card-one {
+    width: 100%;
+    height: 164rpx;
+    margin-bottom: 10rpx;
+}
+
+.card-bg {
+    width: 514rpx;
+    height: 164rpx;
+    border-radius: 10rpx;
+    box-shadow: 2rpx 2rpx 30rpx #ddd;
+    padding: 14rpx;
+}
+
+.card-bg-1 {
+    width: 100%;
+    height: 100%;
+    border: 2rpx #ff4544 dashed;
+    border-radius: 10rpx;
+    padding: 0 20rpx;
+}
+
+.card-del {
+    position: absolute;
+    right: 34rpx;
+    top: 224rpx;
+    width: 90rpx;
+    height: 90rpx;
+}
+
+.card-del image{
+    width: 30rpx;
+    height: 30rpx;
+}
+
+.card-text {
+    color: #707070;
+    margin-top: 24rpx;
+    margin-bottom: 34rpx;
+    font-size: 9pt;
+}
+
+.card-text::before {
+    content: ' ';
+    margin-right: 32rpx;
+    width: 50rpx;
+    height: 1rpx;
+    background-color: #707070;
+    overflow: hidden;
+    margin-top: 21rpx;
+}
+
+.card-text::after {
+    content: ' ';
+    margin-left: 32rpx;
+    width: 50rpx;
+    height: 1rpx;
+    background-color: #707070;
+    overflow: hidden;
+    margin-top: 21rpx;
+}
+
+.card-btn {
+    position: relative;
+}
+
+.card-btn image {
+    width: 374rpx;
+    height: 96rpx;
+}
+
+.card-get{
+    margin-top: 4rpx;
+    margin-bottom: 20rpx;
+    color: #ff4544;
+    font-size: 13pt;
+}

+ 34 - 0
wechat/commons/get-coupon/get-coupon.wxml

xqd
@@ -0,0 +1,34 @@
+<block wx:if="{{get_coupon_list&&get_coupon_list.length>0}}">
+    <view class="get-coupon flex-y-center flex-x-center">
+        <view class="get-coupon-box" style="overflow: visible">
+            <image mode="widthFix" class="get-coupon-bg" src="/images/img-get-coupon-bg.png"></image>
+            <view class="flex-x-center mb-20">
+                <image src="{{get_coupon_list[0].type==2?'/images/icon-receive-coupon.png':'/images/img-get-coupon-title.png'}}"
+                       style="width: 226rpx;height: 51rpx"></image>
+            </view>
+            <scroll-view class="coupon-list" scroll-y="true">
+                <view wx:for="{{get_coupon_list}}" class="coupon-item flex-y-center">
+                    <image mode="widthFix" src="/images/img-get-coupon-item-bg.png"
+                           style="width: 100%;height: 100%"></image>
+                    <view style="width: 100%">
+                        <view class="flex-row flex-y-center">
+                            <view class="flex-grow-1 flex-row flex-y-bottom">
+                                <view style="line-height: 1">¥</view>
+                                <view style="font-size: 23pt;line-height: .85">{{item.sub_price}}</view>
+                            </view>
+                            <view class="flex-grow-0" style="font-size: 9pt;line-height: 32rpx;">
+                                满{{item.min_price}}元可用
+                            </view>
+                        </view>
+                        <navigator bindtap="hideGetCoupon" class="use-now" data-url="/pages/list/list">立即使用</navigator>
+                        <view style="font-size: 9pt">{{item.desc}}</view>
+                    </view>
+                </view>
+            </scroll-view>
+            <view class='flex-x-center'>
+                <image src='/images/icon-close3.png' style='width:100rpx;height:100rpx;'
+                       bindtap='closeCouponBox'></image>
+            </view>
+        </view>
+    </view>
+</block>

+ 38 - 0
wechat/commons/navbar/navbar.wxml

xqd
@@ -0,0 +1,38 @@
+<block wx:if="{{_navbar && _navbar.navs && _navbar.navs.length>0}}">
+    <view class="navbar flex-row" style="background-image: url({{_navbar.background_image}})">
+        <block wx:for="{{_navbar.navs}}">
+            <navigator class="flex-grow-1 flex-y-center" url="{{item.url}}" open-type="wxapp" wx:if='{{item.open_type == "wxapp"}}' bindtap='naveClick' data-appid='{{item.appid}}' data-path='{{item.path}}' data-open_type='{{item.open_type}}'>
+                <view>
+                    <image class="navbar-icon" src="{{item.active?item.active_icon:item.icon}}"></image>
+                    <view class="navbar-text" style="color: {{item.active?item.active_color:item.color}};">{{item.text}}
+                    </view>
+                </view>
+            </navigator>
+            <navigator class="flex-grow-1 flex-y-center" url="{{item.url}}" open-type="tel" wx:elif='{{item.open_type == "tel"}}' bindtap='naveClick' data-tel='{{item.tel}}' data-open_type='{{item.open_type}}'>
+                <view>
+                    <image class="navbar-icon" src="{{item.active?item.active_icon:item.icon}}"></image>
+                    <view class="navbar-text" style="color: {{item.active?item.active_color:item.color}};">{{item.text}}
+                    </view>
+                </view>
+            </navigator>
+            <block wx:elif='{{item.open_type == "contact"}}'>
+                <view class='flex-grow-1 flex-y-center' style='width:1%;padding-top:8rpx;'>
+                    <view style='width:100%;'>
+                        <button open-type="contact" session-from="{{_user_info.nickname}}|">
+                            <image class="navbar-icon" src="{{item.active?item.active_icon:item.icon}}"></image>
+                            <view class="navbar-text" style="color: {{item.active?item.active_color:item.color}};">{{item.text}}
+                            </view>
+                        </button>
+                    </view>
+                </view>
+            </block>
+            <navigator class="flex-grow-1 flex-y-center" url="{{item.url}}" open-type="redirect" data-open_type='{{item.open_type}}' wx:else>
+                <view>
+                    <image class="navbar-icon" src="{{item.active?item.active_icon:item.icon}}"></image>
+                    <view class="navbar-text" style="color: {{item.active?item.active_color:item.color}};">{{item.text}}
+                    </view>
+                </view>
+            </navigator>
+        </block>
+    </view>
+</block>

BIN
wechat/images/car.png


BIN
wechat/images/cart_add.png


BIN
wechat/images/cart_less.png


BIN
wechat/images/cart_no_add.png


BIN
wechat/images/cart_no_less.png


BIN
wechat/images/clear.png


BIN
wechat/images/guige.jpg


BIN
wechat/images/ico-pt-active.png


BIN
wechat/images/icon-about-us.png


BIN
wechat/images/icon-address.png


BIN
wechat/images/icon-balance-ad.png


BIN
wechat/images/icon-balance-bg.png


BIN
wechat/images/icon-balance-left.png


BIN
wechat/images/icon-balance-p.png


BIN
wechat/images/icon-balance-right.png


BIN
wechat/images/icon-card-bg.png


BIN
wechat/images/icon-card-btn.png


BIN
wechat/images/icon-card-del.png


BIN
wechat/images/icon-card-qrcode.png


BIN
wechat/images/icon-card-top.png


BIN
wechat/images/icon-check.png


BIN
wechat/images/icon-checked.png


BIN
wechat/images/icon-clerk.png


BIN
wechat/images/icon-close.png


BIN
wechat/images/icon-close2.png


BIN
wechat/images/icon-close3.png


BIN
wechat/images/icon-close4.png


BIN
wechat/images/icon-comment-score-1.active.png


BIN
wechat/images/icon-comment-score-1.png


BIN
wechat/images/icon-comment-score-2.active.png


BIN
wechat/images/icon-comment-score-2.png


BIN
wechat/images/icon-comment-score-3.active.png


BIN
wechat/images/icon-comment-score-3.png


BIN
wechat/images/icon-coupon-index.png


BIN
wechat/images/icon-coupon-no.png


BIN
wechat/images/icon-coupon.png


BIN
wechat/images/icon-delete.png


BIN
wechat/images/icon-detail-love.png


BIN
wechat/images/icon-discount.png


BIN
wechat/images/icon-down.png


BIN
wechat/images/icon-edit.png


BIN
wechat/images/icon-favorite-active.png


BIN
wechat/images/icon-favorite.png


BIN
wechat/images/icon-group-share.png


BIN
wechat/images/icon-help.png


BIN
wechat/images/icon-huodao-selected.png


BIN
wechat/images/icon-image-picker.png


BIN
wechat/images/icon-integral-radio-active.png


BIN
wechat/images/icon-integral-radio.png


BIN
wechat/images/icon-jiantou-r.png


BIN
wechat/images/icon-jingxuan.png


BIN
wechat/images/icon-loading.gif


BIN
wechat/images/icon-member-bg.png


BIN
wechat/images/icon-member-level.png


BIN
wechat/images/icon-member-rights.png


BIN
wechat/images/icon-miaosha.png


BIN
wechat/images/icon-notice-jiantou.png


BIN
wechat/images/icon-notice-title.png


BIN
wechat/images/icon-notice.png


BIN
wechat/images/icon-ntegration.png


BIN
wechat/images/icon-offline.png


BIN
wechat/images/icon-online-selected.png


BIN
wechat/images/icon-order-0.png


BIN
wechat/images/icon-order-1.png


BIN
wechat/images/icon-order-2.png


BIN
wechat/images/icon-order-3.png


BIN
wechat/images/icon-order-4.png


BIN
wechat/images/icon-pay-right.png


BIN
wechat/images/icon-pintuan-text.png


BIN
wechat/images/icon-play.png


BIN
wechat/images/icon-point-gray.png


BIN
wechat/images/icon-point-green.png


BIN
wechat/images/icon-pt-group-bg.png


BIN
wechat/images/icon-receive-coupon.png


BIN
wechat/images/icon-search.png


BIN
wechat/images/icon-service.png


BIN
wechat/images/icon-share-ant.png


BIN
wechat/images/icon-share-bank.png


BIN
wechat/images/icon-share-friend.png


BIN
wechat/images/icon-share-qrcode.png


BIN
wechat/images/icon-share-selected.png


BIN
wechat/images/icon-share-wechat.png


Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.