mead il y a 1 an
Parent
commit
fbad99e25f
100 fichiers modifiés avec 6020 ajouts et 0 suppressions
  1. BIN
      .DS_Store
  2. 131 0
      前端-20230727/app.js
  3. 223 0
      前端-20230727/app.json
  4. 401 0
      前端-20230727/app.wxss
  5. 399 0
      前端-20230727/common.wxss
  6. 387 0
      前端-20230727/icon.wxss
  7. 91 0
      前端-20230727/lib/SEvent.js
  8. 345 0
      前端-20230727/lib/SPage.js
  9. 124 0
      前端-20230727/lib/SRequest.js
  10. 170 0
      前端-20230727/lionfish_comshop/components/actionsheet/actionsheet.js
  11. 4 0
      前端-20230727/lionfish_comshop/components/actionsheet/actionsheet.json
  12. 52 0
      前端-20230727/lionfish_comshop/components/actionsheet/actionsheet.wxml
  13. 0 0
      前端-20230727/lionfish_comshop/components/actionsheet/actionsheet.wxss
  14. 121 0
      前端-20230727/lionfish_comshop/components/ad-alert/index.js
  15. 4 0
      前端-20230727/lionfish_comshop/components/ad-alert/index.json
  16. 16 0
      前端-20230727/lionfish_comshop/components/ad-alert/index.wxml
  17. 40 0
      前端-20230727/lionfish_comshop/components/ad-alert/index.wxss
  18. 18 0
      前端-20230727/lionfish_comshop/components/addCartBtn/index.js
  19. 4 0
      前端-20230727/lionfish_comshop/components/addCartBtn/index.json
  20. 3 0
      前端-20230727/lionfish_comshop/components/addCartBtn/index.wxml
  21. 11 0
      前端-20230727/lionfish_comshop/components/addCartBtn/index.wxss
  22. 108 0
      前端-20230727/lionfish_comshop/components/advimg/index.js
  23. 4 0
      前端-20230727/lionfish_comshop/components/advimg/index.json
  24. 6 0
      前端-20230727/lionfish_comshop/components/advimg/index.wxml
  25. 21 0
      前端-20230727/lionfish_comshop/components/advimg/index.wxss
  26. 29 0
      前端-20230727/lionfish_comshop/components/asideBtn/index.js
  27. 4 0
      前端-20230727/lionfish_comshop/components/asideBtn/index.json
  28. 14 0
      前端-20230727/lionfish_comshop/components/asideBtn/index.wxml
  29. 40 0
      前端-20230727/lionfish_comshop/components/asideBtn/index.wxss
  30. 144 0
      前端-20230727/lionfish_comshop/components/auth/index.js
  31. 7 0
      前端-20230727/lionfish_comshop/components/auth/index.json
  32. 14 0
      前端-20230727/lionfish_comshop/components/auth/index.wxml
  33. 61 0
      前端-20230727/lionfish_comshop/components/auth/index.wxss
  34. 321 0
      前端-20230727/lionfish_comshop/components/behavior/goods.js
  35. 81 0
      前端-20230727/lionfish_comshop/components/button/index.js
  36. 4 0
      前端-20230727/lionfish_comshop/components/button/index.json
  37. 6 0
      前端-20230727/lionfish_comshop/components/button/index.wxml
  38. 127 0
      前端-20230727/lionfish_comshop/components/button/index.wxss
  39. 7 0
      前端-20230727/lionfish_comshop/components/card/index.js
  40. 4 0
      前端-20230727/lionfish_comshop/components/card/index.json
  41. 11 0
      前端-20230727/lionfish_comshop/components/card/index.wxml
  42. 9 0
      前端-20230727/lionfish_comshop/components/card/index.wxss
  43. 21 0
      前端-20230727/lionfish_comshop/components/cartBtn/index.js
  44. 4 0
      前端-20230727/lionfish_comshop/components/cartBtn/index.json
  45. 5 0
      前端-20230727/lionfish_comshop/components/cartBtn/index.wxml
  46. 36 0
      前端-20230727/lionfish_comshop/components/cartBtn/index.wxss
  47. 40 0
      前端-20230727/lionfish_comshop/components/cashon_delivery/index.js
  48. 6 0
      前端-20230727/lionfish_comshop/components/cashon_delivery/index.json
  49. 25 0
      前端-20230727/lionfish_comshop/components/cashon_delivery/index.wxml
  50. 2 0
      前端-20230727/lionfish_comshop/components/cashon_delivery/index.wxss
  51. 85 0
      前端-20230727/lionfish_comshop/components/changeCommunity/index.js
  52. 6 0
      前端-20230727/lionfish_comshop/components/changeCommunity/index.json
  53. 39 0
      前端-20230727/lionfish_comshop/components/changeCommunity/index.wxml
  54. 112 0
      前端-20230727/lionfish_comshop/components/changeCommunity/index.wxss
  55. 105 0
      前端-20230727/lionfish_comshop/components/chooseImage/index.js
  56. 4 0
      前端-20230727/lionfish_comshop/components/chooseImage/index.json
  57. 15 0
      前端-20230727/lionfish_comshop/components/chooseImage/index.wxml
  58. 81 0
      前端-20230727/lionfish_comshop/components/chooseImage/index.wxss
  59. 43 0
      前端-20230727/lionfish_comshop/components/comming-spu-disabled/index.js
  60. 7 0
      前端-20230727/lionfish_comshop/components/comming-spu-disabled/index.json
  61. 20 0
      前端-20230727/lionfish_comshop/components/comming-spu-disabled/index.wxml
  62. 113 0
      前端-20230727/lionfish_comshop/components/comming-spu-disabled/index.wxss
  63. 66 0
      前端-20230727/lionfish_comshop/components/community-item/index.js
  64. 4 0
      前端-20230727/lionfish_comshop/components/community-item/index.json
  65. 18 0
      前端-20230727/lionfish_comshop/components/community-item/index.wxml
  66. 86 0
      前端-20230727/lionfish_comshop/components/community-item/index.wxss
  67. 81 0
      前端-20230727/lionfish_comshop/components/count-down/index.js
  68. 6 0
      前端-20230727/lionfish_comshop/components/count-down/index.json
  69. 7 0
      前端-20230727/lionfish_comshop/components/count-down/index.wxml
  70. 12 0
      前端-20230727/lionfish_comshop/components/count-down/index.wxss
  71. 277 0
      前端-20230727/lionfish_comshop/components/datetimepicker/datetimepicker.js
  72. 4 0
      前端-20230727/lionfish_comshop/components/datetimepicker/datetimepicker.json
  73. 5 0
      前端-20230727/lionfish_comshop/components/datetimepicker/datetimepicker.wxml
  74. 5 0
      前端-20230727/lionfish_comshop/components/datetimepicker/datetimepicker.wxss
  75. 29 0
      前端-20230727/lionfish_comshop/components/dialog/index.js
  76. 7 0
      前端-20230727/lionfish_comshop/components/dialog/index.json
  77. 22 0
      前端-20230727/lionfish_comshop/components/dialog/index.wxml
  78. 46 0
      前端-20230727/lionfish_comshop/components/dialog/index.wxss
  79. 17 0
      前端-20230727/lionfish_comshop/components/distributionItem/index.js
  80. 6 0
      前端-20230727/lionfish_comshop/components/distributionItem/index.json
  81. 13 0
      前端-20230727/lionfish_comshop/components/distributionItem/index.wxml
  82. 65 0
      前端-20230727/lionfish_comshop/components/distributionItem/index.wxss
  83. 64 0
      前端-20230727/lionfish_comshop/components/diy-goods-list/index.js
  84. 4 0
      前端-20230727/lionfish_comshop/components/diy-goods-list/index.json
  85. 3 0
      前端-20230727/lionfish_comshop/components/diy-goods-list/index.wxml
  86. 75 0
      前端-20230727/lionfish_comshop/components/diy-many-goods-list/index.js
  87. 4 0
      前端-20230727/lionfish_comshop/components/diy-many-goods-list/index.json
  88. 14 0
      前端-20230727/lionfish_comshop/components/diy-many-goods-list/index.wxml
  89. 47 0
      前端-20230727/lionfish_comshop/components/diy-many-goods-list/index.wxss
  90. 133 0
      前端-20230727/lionfish_comshop/components/diy-nav/index.js
  91. 4 0
      前端-20230727/lionfish_comshop/components/diy-nav/index.json
  92. 31 0
      前端-20230727/lionfish_comshop/components/diy-nav/index.wxml
  93. 48 0
      前端-20230727/lionfish_comshop/components/diy-nav/index.wxss
  94. 81 0
      前端-20230727/lionfish_comshop/components/diy-pintuan/index.js
  95. 6 0
      前端-20230727/lionfish_comshop/components/diy-pintuan/index.json
  96. 121 0
      前端-20230727/lionfish_comshop/components/diy-pintuan/index.wxml
  97. 243 0
      前端-20230727/lionfish_comshop/components/diy-pintuan/index.wxss
  98. 23 0
      前端-20230727/lionfish_comshop/components/empty/index.js
  99. 4 0
      前端-20230727/lionfish_comshop/components/empty/index.json
  100. 4 0
      前端-20230727/lionfish_comshop/components/empty/index.wxml

BIN
.DS_Store


+ 131 - 0
前端-20230727/app.js

@@ -0,0 +1,131 @@
+var util = require('we7/resource/js/util.js');
+var timeQueue = require('lionfish_comshop/utils/timeQueue');
+require('lionfish_comshop/utils//mixins.js');
+require('/lib/SPage.js')
+
+App({
+  onLaunch: async function (options) {
+    let scene = options.scene || '';
+    this.globalData.scene = scene;
+    console.log('scene:' + scene);
+    var userInfo = wx.getStorageSync("userInfo");
+    this.globalData.userInfo = userInfo;
+    wx.setStorageSync("isparse_formdata", 0);
+    var currentCommunity = wx.getStorageSync("community");
+    this.globalData.hasDefaultCommunity = !!currentCommunity;
+    this.globalData.community = currentCommunity;
+    this.globalData.systemInfo = wx.getSystemInfoSync();
+    var model = this.globalData.systemInfo.model;
+    this.globalData.isIpx = model.indexOf("iPhone X") > -1 || model.indexOf("unknown<iPhone") > -1;
+    this.globalData.timer = new timeQueue.default();
+  },
+  $mixinP:{
+		onLoad(options){
+			console.log("options", options)
+		}
+	},
+  onShow: function () {
+    if(this.globalData.scene!=1154) this.getUpdate();
+  },
+  onHide: function () {
+  },
+  //加载微擎工具类
+  util: util,
+  //用户信息,sessionid是用户是否登录的凭证
+  userInfo: {
+    sessionid: null,
+  },
+  globalData: {
+    systemInfo: {},
+    isIpx: false,
+    userInfo: {},
+    canGetGPS: true,
+    city: {},
+    community: {},
+    location: {},
+    hasDefaultCommunity: true,
+    historyCommunity: [],
+    changedCommunity: false,
+    disUserInfo: {},
+    changeCity: "",
+    timer: 0,
+    formIds: [],
+    community_id: '',
+    placeholdeImg: '',
+    cartNum: 0,
+    cartNumStamp: 0,
+    common_header_backgroundimage: '',
+    appLoadStatus: 1, // 1 正常 0 未登录 2 未选择社区
+    goodsListCarCount: [],
+    typeCateId: 0,
+    navBackUrl: '',
+    isblack: 0,
+    skin: {
+      color: '#ff5344',
+      subColor: '#ed7b3a',
+      lighter: '#fff9f4'
+    },
+    goods_sale_unit: '件',
+    scene: '',
+    indexCateId: ''
+  },
+  getUpdate: function(){
+    if (wx.canIUse("getUpdateManager")) {
+      const updateManager = wx.getUpdateManager();
+      updateManager.onCheckForUpdate(function (res) {
+        res.hasUpdate && (updateManager.onUpdateReady(function () {
+          wx.showModal({
+            title: "更新提示",
+            content: "新版本已经准备好,是否马上重启小程序?",
+            success: function (t) {
+              t.confirm && updateManager.applyUpdate();
+            }
+          });
+        }), updateManager.onUpdateFailed(function () {
+          wx.showModal({
+            title: "已经有新版本了哟~",
+            content: "新版本已经上线啦~,请您删除当前小程序,重新搜索打开哟~"
+          });
+        }));
+      });
+    } else wx.showModal({
+      title: "提示",
+      content: "当前微信版本过低,无法使用该功能,请升级到最新微信版本后重试。"
+    });
+  },
+  getConfig: function() {
+    var token = wx.getStorageSync('token');
+    return new Promise((resolve, reject)=>{
+      util.request({
+        url: 'entry/wxapp/user',
+        data: {
+          controller: 'index.get_firstload_msg',
+          token,
+          m: 'lionfish_comshop'
+        },
+        method: 'post',
+        dataType: 'json',
+        success: function(res) {
+          if(res.data.code==0) {
+            let { new_head_id, default_head_info, isparse_formdata } = res.data;
+            if(!token) isparse_formdata = 0;
+            wx.setStorageSync('isparse_formdata', isparse_formdata);
+
+            if(new_head_id>0&&Object.keys(default_head_info).length) {
+              wx.setStorageSync('community', default_head_info);
+            }
+            resolve(res)
+          } else {
+            reject()
+          }
+        }
+      })
+    })
+  },
+  setShareConfig: function(){
+    wx.showShareMenu({
+      menus: ['shareAppMessage', 'shareTimeline']
+    })
+  },
+  siteInfo: require('siteinfo.js')
+});

+ 223 - 0
前端-20230727/app.json

@@ -0,0 +1,223 @@
+{
+  "pages": [
+    "lionfish_comshop/pages/index/index",
+    "lionfish_comshop/pages/goods/goodsDetail",
+    "lionfish_comshop/pages/order/shopCart",
+    "lionfish_comshop/pages/user/me",
+    "lionfish_comshop/pages/position/community",
+    "lionfish_comshop/pages/position/search",
+    "lionfish_comshop/pages/order/index",
+    "lionfish_comshop/pages/order/order",
+    "lionfish_comshop/pages/order/refunddetail",
+    "lionfish_comshop/pages/user/protocol",
+    "lionfish_comshop/pages/user/articleProtocol",
+    "lionfish_comshop/pages/order/refund",
+    "lionfish_comshop/pages/order/evaluate",
+    "lionfish_comshop/pages/position/cities",
+    "lionfish_comshop/pages/order/placeOrder",
+    "lionfish_comshop/pages/goods/buyRecords",
+    "lionfish_comshop/pages/goods/comment",
+    "lionfish_comshop/pages/supply/recruit",
+    "lionfish_comshop/pages/supply/apply",
+    "lionfish_comshop/pages/web-view",
+    "lionfish_comshop/pages/order/goods_express",
+    "lionfish_comshop/pages/order/shareOrderInfo",
+    "lionfish_comshop/pages/user/coupon",
+    "lionfish_comshop/pages/index/share",
+    "lionfish_comshop/pages/type/index",
+    "lionfish_comshop/pages/user/rechargeDetails",
+    "lionfish_comshop/pages/user/charge",
+    "lionfish_comshop/pages/type/search",
+    "lionfish_comshop/pages/type/result",
+    "lionfish_comshop/pages/goods/industrial",
+    "lionfish_comshop/pages/supply/index",
+    "lionfish_comshop/pages/supply/home",
+    "lionfish_comshop/pages/refund/refundList",
+    "lionfish_comshop/pages/type/details",
+    "lionfish_comshop/pages/user/rule"
+  ],
+  "requiredPrivateInfos":[
+    "chooseAddress",
+    "chooseLocation",
+    "getLocation"
+    ],
+  "window": {
+    "navigationBarTextStyle": "black",
+    "navigationBarTitleText": "",
+    "navigationBarBackgroundColor": "#FFFFFF",
+    "backgroundColor": "#fff"
+  },
+  "tabBar": {
+    "list": [
+      {
+        "pagePath": "lionfish_comshop/pages/index/index",
+        "text": "首页"
+      },
+      {
+        "pagePath": "lionfish_comshop/pages/type/index",
+        "text": "分类"
+      },
+      {
+        "pagePath": "lionfish_comshop/pages/order/shopCart",
+        "text": "购物车"
+      },
+      {
+        "pagePath": "lionfish_comshop/pages/user/me",
+        "text": "我的"
+      }
+    ],
+    "color": "#fff",
+    "selectedColor": "#fff",
+    "backgroundColor": "#fff",
+    "borderStyle": "white"
+  },
+  "networkTimeout": {
+    "request": 20000
+  },
+  "permission": {
+    "scope.userLocation": {
+      "desc": "为了更好的服务您,请授权允许"
+    }
+  },
+  "subPackages": [
+    {
+      "name": "distributionCenter",
+      "root": "lionfish_comshop/distributionCenter",
+      "pages": [
+        "pages/share",
+        "pages/member",
+        "pages/memberInfo",
+        "pages/details",
+        "pages/me",
+        "pages/recruit",
+        "pages/apply",
+        "pages/excharge",
+        "pages/exchargeRecord",
+        "pages/goodsDetails",
+        "pages/fans"
+      ]
+    },
+    {
+      "name": "moduleA",
+      "root": "lionfish_comshop/moduleA",
+      "pages": [
+        "special/index",
+        "special/list",
+        "pin/goodsDetail",
+        "pin/share",
+        "pin/me",
+        "pin/index",
+        "pin/income",
+        "pin/excharge",
+        "pin/exchargeRecord",
+        "vip/upgrade",
+        "score/signin",
+        "score/scoreDetails",
+        "menu/index",
+        "menu/fav",
+        "menu/subcate",
+        "menu/list",
+        "menu/details",
+        "seckill/list",
+        "solitaire/pub",
+        "solitaire/index",
+        "solitaire/details",
+        "video/index",
+        "video/detail",
+        "solitaire/me",
+        "solitaire/groupIndex",
+        "solitaire/addGood",
+        "solitaire/groupDetails",
+        "groupCenter/index",
+        "groupCenter/recruit",
+        "groupCenter/apply",
+        "groupCenter/communityMembers",
+        "groupCenter/distributionList",
+        "groupCenter/settlementList",
+        "groupCenter/settlementDetail",
+        "groupCenter/editInfo",
+        "groupCenter/groupList",
+        "groupCenter/groupDetail",
+        "groupCenter/buyHistory",
+        "groupCenter/pendingDeliveryOrders",
+        "groupCenter/wallet",
+        "groupCenter/cashList",
+        "groupCenter/detailsList",
+        "groupCenter/list",
+        "groupCenter/listDetails",
+        "groupCenter/memberList",
+        "groupCenter/setting",
+        "groupCenter/closure",
+        "groupCenter/addHexiao",
+        "groupCenter/bind_member_hexiao",
+        "groupCenter/goodsManage",
+        "groupCenter/gruopInfo",
+        "groupCenter/headlist",
+        "groupCenter/recommend",
+        "groupCenter/ranking",
+        "coupon/getCoupon",
+        "editUser/index"
+      ]
+    },
+    {
+      "name": "moduleB",
+      "root": "lionfish_comshop/moduleB",
+      "pages": [
+        "index/index",
+        "writeoff/index",
+        "index/auth",
+        "live/index",
+        "writeoff/member",
+        "rider/index",
+        "rider/order",
+        "rider/grab",
+        "supply/index",
+        "live/replay",
+        "supply/goodsManage",
+        "supply/orderManage",
+        "generalmall/index",
+        "supply/moneyManage",
+        "supply/excharge",
+        "supply/exchargeRecord",
+        "supply/orderDetails",
+        "supply/editSku",
+        "rider/census",
+        "rider/me",
+        "rider/excharge",
+        "rider/exchargeRecord",
+        "rider/accountRecord",
+        "writeoff/details",
+        "supply/changePrice",
+        "order/share",
+        "presale/index",
+        "invite/index",
+        "invite/reward",
+        "invite/scoreList",
+        "invite/record",
+        "invite/share",
+        "virtualcard/index",
+        "virtualcard/exchange",
+        "manage/index",
+        "offlineCode/index"
+      ]
+    }
+  ],
+  "preloadRule": {
+    "lionfish_comshop/pages/user/me": {
+      "network": "all",
+      "packages": [
+        "moduleA",
+        "distributionCenter",
+        "moduleB"
+      ]
+    }
+  },
+  "sitemapLocation": "sitemap.json",
+  "usingComponents": {
+    "i-vip-modal": "/lionfish_comshop/components/vipModal/index"
+  },
+  "requiredBackgroundModes": [
+    "audio"
+  ],
+  "usingShopPlugin": true
+}

+ 401 - 0
前端-20230727/app.wxss

@@ -0,0 +1,401 @@
+@import "/icon.wxss";
+@import "/common.wxss";
+
+page {
+    background-color: #f6f6f6;
+    font-size: 28rpx;
+    font-weight: 400;
+    color: #333;
+}
+
+.i-load-more {
+    width: 65%;
+    font-size: 24rpx;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    margin: 60rpx auto;
+}
+
+.i-load-more-loading {
+    display: inline-block;
+    margin-right: 24rpx;
+    vertical-align: middle;
+    width: 28rpx;
+    height: 28rpx;
+    background: 0 0;
+    border-radius: 50%;
+    border: 4rpx solid #e9eaec;
+    border-color: #e9eaec #e9eaec #e9eaec #2d8cf0;
+    animation: btn-spin 0.6s linear;
+    animation-iteration-count: infinite;
+}
+
+.i-load-more-tip {
+    display: inline-block;
+    vertical-align: middle;
+    color: #999;
+}
+
+.i-load-more-line {
+    display: flex;
+    border-top: 0;
+}
+
+.i-load-more-line .i-load-more-tip {
+    position: relative;
+    top: -.1em;
+    padding: 0 0.55em;
+}
+
+.i-load-more-empty {
+    width: 8rpx;
+    height: 8rpx;
+    border-radius: 50%;
+    background-color: #e5e5e5;
+    display: inline-block;
+    position: relative;
+    vertical-align: 0;
+    top: -.16em;
+}
+
+@-webkit-keyframes btn-spin {
+    0% {
+        transform: rotate(0);
+    }
+
+    100% {
+        transform: rotate(360deg);
+    }
+}
+
+@keyframes btn-spin {
+    0% {
+        transform: rotate(0);
+    }
+
+    100% {
+        transform: rotate(360deg);
+    }
+}
+
+/**首页规格弹窗begin ***/
+.sku-content {
+    position: fixed;
+    bottom: 0px;
+    z-index: 9999;
+}
+
+.sku-card {
+    width: 750rpx;
+    box-sizing: border-box;
+    border-radius: 30rpx 30rpx 0 0;
+    background: #fff;
+    overflow: hidden;
+    padding: 40rpx 40rpx 0 40rpx;
+    padding-bottom: constant(safe-area-inset-bottom);
+    padding-bottom: env(safe-area-inset-bottom);
+}
+
+.sku-card .close {
+    position: absolute;
+    right: 28rpx;
+    top: 28rpx;
+    width: 40rpx;
+    height: 40rpx;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+}
+
+.sku-card .close image {
+    width: 26rpx;
+    height: 26rpx;
+}
+
+.sku-card .sku-header {
+    display: flex;
+    align-items: flex-start;
+    margin-bottom: 40rpx;
+}
+
+.sku-card .sku-header .sku-img {
+    width: 160rpx;
+    height: 160rpx;
+    border: 1rpx solid #e4e4e4;
+    margin-right: 30rpx;
+}
+
+.sku-card .sku-header .sku-img image {
+    border: none;
+}
+
+.sku-card .sku-header .sku-desc {
+    display: flex;
+    flex-direction: column;
+}
+
+.sku-card .sku-header .sku-desc .sku-title {
+    width: 390rpx;
+    min-height: 60rpx;
+    margin-bottom: 16rpx;
+    color: #444;
+    font-weight: bold;
+    position: relative;
+}
+
+.sku-card .sku-header .sku-desc .sku-title span {
+    position: absolute;
+    width: 390rpx;
+    height: 60rpx;
+    left: 0;
+    top: 0;
+    font-size: 26rpx;
+    line-height: 31rpx;
+    display: -webkit-box;
+    -webkit-box-orient: vertical;
+    -webkit-line-clamp: 2;
+    overflow: hidden;
+    text-overflow: initial;
+    white-space: normal;
+}
+
+.sku-card .sku-header .sku-price {
+    display: flex;
+    align-items: flex-end;
+    margin-bottom: 12rpx;
+    font-size: 24rpx;
+    line-height: 24rpx;
+}
+
+.sku-card .sku-header .sku-price .sale-price {
+    color: #ff5344;
+    margin-right: 12rpx;
+    margin-bottom: -4rpx;
+}
+
+.sku-card .sku-header .sku-price .sale-price span {
+    font-size: 56rpx;
+    line-height: 56rpx;
+    margin-left: 8rpx;
+    font-weight: bold;
+}
+
+.sku-card .sku-header .sku-price .market-price {
+    text-decoration: line-through;
+    color: #999;
+    margin-right: 30rpx;
+}
+
+.sku-card .sku-header .sku-switch-on {
+    font-size: 24rpx;
+    color: #444;
+}
+
+.sku-card .sku-msg {
+    width: 670rpx;
+    margin: 0 auto 60rpx;
+    border-radius: 16rpx;
+    background: linear-gradient(to right, #fff7f0, #fff4ec);
+    display: flex;
+    align-items: flex-start;
+    padding: 20rpx;
+    color: #ca7e57;
+    box-sizing: border-box;
+}
+
+.sku-card .sku-msg .tag {
+    border-radius: 16rpx;
+    border: 1rpx solid #ffa49c;
+    font-size: 20rpx;
+    line-height: 28rpx;
+    font-weight: 500;
+    padding: 0 8rpx;
+    margin-right: 8rpx;
+    color: #ff5344;
+    white-space: nowrap;
+    vertical-align: middle;
+}
+
+.sku-card .sku-msg .sku-activity-msg {
+    color: #ca7e57;
+    font-size: 24rpx;
+    line-height: 32rpx;
+    width: 540rpx;
+    font-weight: 500;
+}
+
+.sku-card .sku-spec {
+    width: 670rpx;
+    margin: 0 auto 40rpx;
+    display: flex;
+    align-items: flex-start;
+}
+
+.sku-card .sku-spec .title {
+    font-size: 26rpx;
+    line-height: 50rpx;
+    margin-right: 8rpx;
+}
+
+.sku-card .sku-spec .spec-list {
+    position: relative;
+    width: 600rpx;
+    display: flex;
+    flex: 1;
+    flex-wrap: wrap;
+    height: 300rpx;
+    align-items: center;
+    justify-self: start;
+}
+
+.sku-card .sku-spec .spec-list .span {
+    display: inline-block;
+    position: relative;
+    height: 46rpx;
+    background: #f6f6f6;
+    border: 2rpx solid #f6f6f6;
+    text-align: center;
+    line-height: 46rpx;
+    font-size: 26rpx;
+    margin: 0 8rpx 20rpx 0;
+    color: #666;
+    border-radius: 46rpx;
+    padding: 0 30rpx;
+    white-space: nowrap;
+}
+
+.sku-card .sku-spec .spec-list .on {
+    border-color: #ffa49c;
+    color: #ff5344;
+    background: #fff;
+}
+
+.sku-card .sku-spec .spec-list .disabled {
+    color: #ccc;
+}
+
+.sku-card .sku-num-content {
+    width: 670rpx;
+    margin: 0 auto 32rpx;
+    display: flex;
+    align-items: center;
+}
+
+.sku-card .sku-num-content .title {
+    width: 80rpx;
+    font-size: 26rpx;
+    line-height: 50rpx;
+}
+
+.sku-card .sku-num-content .msg {
+    width: 420rpx;
+    color: #aaa;
+    font-size: 26rpx;
+    line-height: 50rpx;
+    text-align: right;
+}
+
+.sku-card .sku-num-content .even-num {
+    color: #ff5344;
+    font-size: 20rpx;
+    white-space: nowrap;
+}
+
+.sku-card .sku-confirm {
+    width: 750rpx;
+    height: 96rpx;
+    background: linear-gradient(to right, #ff5041, #ff695c);
+    line-height: 96rpx;
+    text-align: center;
+    color: #fff;
+    font-size: 30rpx;
+    margin: 0 0 0 -40rpx;
+    padding: 0;
+    border-radius: 0;
+    font-weight: bold;
+}
+
+.sku-card button.sku-confirm::after {
+    border: 0;
+}
+
+.sku-card button[disabled].sku-confirm {
+    background: #f6f6f6;
+}
+
+.i-input-number {
+    color: #495060;
+    display: flex;
+    align-items: center;
+    position: relative;
+}
+
+.i-input-number view {
+    width: 48rpx;
+    height: 48rpx;
+    display: inline-block;
+    vertical-align: middle;
+}
+
+.i-input-number view image {
+    width: 48rpx;
+    height: 48rpx;
+}
+
+.i-input-number-minus {
+    border-right: none;
+    border-radius: 4rpx 0 0 4rpx;
+}
+
+.i-input-number-plus {
+    border-left: none;
+    border-radius: 0 4rpx 4rpx 0;
+}
+
+.i-input-number-text {
+    text-align: center;
+    height: 48rpx;
+    width: 66rpx;
+    font-size: 24rpx;
+    line-height: 48rpx;
+    color: #495060;
+    z-index: 0;
+}
+
+/**首页规格弹出end***/
+
+.mask {
+    width: 100%;
+    height: 100%;
+    background: #000;
+    position: fixed;
+    left: 0;
+    top: 0;
+    z-index: 99;
+    line-height: 80rpx;
+    opacity: 0.5;
+}
+
+/* 订单提醒begin */
+.order-notify {
+    position: fixed;
+    left: 0;
+    top: 100rpx;
+    z-index: 200;
+}
+
+/* 订单提醒end */
+
+image {
+    will-change: transform;
+}
+
+.bgDisabled {
+    background: #ccc !important;
+}
+
+/* 安全区域 */
+.safebottom {
+    padding-bottom: env(safe-area-inset-bottom) !important;
+}

Fichier diff supprimé car celui-ci est trop grand
+ 399 - 0
前端-20230727/common.wxss


+ 387 - 0
前端-20230727/icon.wxss

@@ -0,0 +1,387 @@
+@font-face {
+  font-family: 'iconfont';  /* Project id 1377061 */
+  src: url('//at.alicdn.com/t/font_1377061_61msjf6mslj.woff2?t=1623144740367') format('woff2'),
+       url('//at.alicdn.com/t/font_1377061_61msjf6mslj.woff?t=1623144740367') format('woff'),
+       url('//at.alicdn.com/t/font_1377061_61msjf6mslj.ttf?t=1623144740367') format('truetype');
+}
+
+.iconfont {
+  font-family: "iconfont" !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+.icon-time:before {
+  content: "\e669";
+}
+
+.icon-calendar:before {
+  content: "\e62f";
+}
+
+.icon-daifahuo:before {
+  content: "\e663";
+}
+
+.icon-tuihuotubiao-01:before {
+  content: "\e64d";
+}
+
+.icon-peisongzhong:before {
+  content: "\e75e";
+}
+
+.icon-huodaofukuan:before {
+  content: "\e632";
+}
+
+.icon-pintuan:before {
+  content: "\e635";
+}
+
+.icon-rules:before {
+  content: "\e734";
+}
+
+.icon-luxian:before {
+  content: "\e627";
+}
+
+.icon-zhuye1:before {
+  content: "\e654";
+}
+
+.icon-fenxiang1:before {
+  content: "\e62d";
+}
+
+.icon-fenxiang3:before {
+  content: "\e62e";
+}
+
+.icon-gouwudai:before {
+  content: "\e6d8";
+}
+
+.icon-fanhui:before {
+  content: "\e624";
+}
+
+.icon-more:before {
+  content: "\e626";
+}
+
+.icon-off-stock:before {
+  content: "\e621";
+}
+
+.icon-add:before {
+  content: "\e694";
+}
+
+.icon-edit-stock:before {
+  content: "\e622";
+}
+
+.icon-sceen:before {
+  content: "\e645";
+}
+
+.icon-bianji:before {
+  content: "\e658";
+}
+
+.icon-goods-manage:before {
+  content: "\e618";
+}
+
+.icon-money-manage:before {
+  content: "\e619";
+}
+
+.icon-order-manage:before {
+  content: "\e620";
+}
+
+.icon-refund-manage:before {
+  content: "\e668";
+}
+
+.icon-qu:before {
+  content: "\e67d";
+}
+
+.icon-song:before {
+  content: "\e67e";
+}
+
+.icon-ditu1:before {
+  content: "\e610";
+}
+
+.icon-selected:before {
+  content: "\e7a0";
+}
+
+.icon-jian:before {
+  content: "\e666";
+}
+
+.icon-jia:before {
+  content: "\e617";
+}
+
+.icon-laba:before {
+  content: "\e616";
+}
+
+.icon-live:before {
+  content: "\e8ce";
+}
+
+.icon-jielongguanli:before {
+  content: "\e628";
+}
+
+.icon-icon_shoufukuanhexiaoguanli:before {
+  content: "\e874";
+}
+
+.icon-notice:before {
+  content: "\e60d";
+}
+
+.icon-good:before {
+  content: "\e753";
+}
+
+.icon-good-fill:before {
+  content: "\e780";
+}
+
+.icon-pengyouquan1:before {
+  content: "\e60e";
+}
+
+.icon-fenxiang2:before {
+  content: "\e623";
+}
+
+.icon-zhankai:before {
+  content: "\e60a";
+}
+
+.icon-fabu:before {
+  content: "\e9b1";
+}
+
+.icon-shuru:before {
+  content: "\e60b";
+}
+
+.icon-fanhuidingbu:before {
+  content: "\e657";
+}
+
+.icon-goTop:before {
+  content: "\e6de";
+}
+
+.icon-icon-test1:before {
+  content: "\e608";
+}
+
+.icon-gengduo:before {
+  content: "\e607";
+}
+
+.icon-tubiaozhizuomoban:before {
+  content: "\e606";
+}
+
+.icon-xinaixin:before {
+  content: "\e612";
+}
+
+.icon-gouwuche:before {
+  content: "\e604";
+}
+
+.icon-shicai:before {
+  content: "\e677";
+}
+
+.icon-shoucang:before {
+  content: "\e8e0";
+}
+
+.icon-fenlei_:before {
+  content: "\e605";
+}
+
+.icon-wanchenggouxuan2:before {
+  content: "\e63e";
+}
+
+.icon-gou1:before {
+  content: "\e650";
+}
+
+.icon-qiandao:before {
+  content: "\e609";
+}
+
+.icon-huiyuan:before {
+  content: "\e603";
+}
+
+.icon-pintuanzhong:before {
+  content: "\e615";
+}
+
+.icon-pintuanchenggong:before {
+  content: "\e613";
+}
+
+.icon-pintuanshibai:before {
+  content: "\e614";
+}
+
+.icon-wenhao:before {
+  content: "\e6d7";
+}
+
+.icon-gou:before {
+  content: "\e611";
+}
+
+.icon-jiaru:before {
+  content: "\e62c";
+}
+
+.icon-huangguan:before {
+  content: "\e629";
+}
+
+.icon-erweima1:before {
+  content: "\e61f";
+}
+
+.icon-weixinzhifu:before {
+  content: "\e62a";
+}
+
+.icon-guanbi:before {
+  content: "\e601";
+}
+
+.icon-youjiantou:before {
+  content: "\e61e";
+}
+
+.icon-xia:before {
+  content: "\e60f";
+}
+
+.icon-shang:before {
+  content: "\e74c";
+}
+
+.icon-erweima:before {
+  content: "\e61a";
+}
+
+.icon-weizhi-tianchong:before {
+  content: "\e653";
+}
+
+.icon-sousuo:before {
+  content: "\e68f";
+}
+
+.icon-pengyouquan:before {
+  content: "\e61b";
+}
+
+.icon-shouye:before {
+  content: "\e67a";
+}
+
+.icon-xiangceshanchutubiao:before {
+  content: "\e600";
+}
+
+.icon-balance:before {
+  content: "\e696";
+}
+
+.icon-weixin1:before {
+  content: "\e63c";
+}
+
+.icon-sousuo1:before {
+  content: "\e665";
+}
+
+.icon-fenxiang:before {
+  content: "\e667";
+}
+
+.icon-ziyuan:before {
+  content: "\e62b";
+}
+
+.icon-weixin2:before {
+  content: "\e637";
+}
+
+.icon-bofang:before {
+  content: "\e60c";
+}
+
+.icon-rili:before {
+  content: "\e6b6";
+}
+
+.icon-shuoming:before {
+  content: "\e75d";
+}
+
+.icon-kefu:before {
+  content: "\e6a7";
+}
+
+.icon-zhaopian:before {
+  content: "\e66b";
+}
+
+.icon-xiatiao:before {
+  content: "\e625";
+}
+
+.icon-shanchu1:before {
+  content: "\e649";
+}
+
+.icon-wsdzb_zzgzt_dwgl_zbjfgl:before {
+  content: "\e602";
+}
+
+.icon-edit:before {
+  content: "\e61c";
+}
+
+.icon-shuaxin:before {
+  content: "\e70e";
+}
+
+.icon-question:before {
+  content: "\e675";
+}
+
+.icon-xiangce:before {
+  content: "\e61d";
+}
+

+ 91 - 0
前端-20230727/lib/SEvent.js

@@ -0,0 +1,91 @@
+class SEvent {
+  constructor(eventName, isGetEvent) {
+    if (!isGetEvent) {
+      throw 'SEventError:get SEvent instance from SEvent.getEvent!'
+    }
+    this.handlers = []
+    SEvent.events[eventName] = this
+  }
+
+  static getEvent(eventName) {
+    SEvent.events = SEvent.events || {};
+    const keys = Object.keys(SEvent.events)
+    for (const key of keys) {
+      if (key === eventName) {
+        return SEvent.events[key]
+      }
+
+    }
+    return new SEvent(eventName, true)
+  }
+
+  static removeEvent(eventName) {
+    const keys = Object.keys(SEvent.events)
+    for (const key of keys) {
+      if (key === eventName) {
+        SEvent.events[key].handlers = null
+        delete SEvent.events[key]
+      }
+    }
+  }
+
+  static off(listenerId){
+    for(const key of Object.keys(SEvent.events)){
+      for(let i=0; i<SEvent.events[key].handlers.length; i++){
+        if (listenerId === SEvent.events[key].handlers[i].id){
+          SEvent.events[key].handlers.splice(i, 1)
+          break
+        }
+      }
+    }
+  }
+
+  on(handler) {
+    if (handler && typeof (handler) === 'function') {
+      this.handlers.push({
+        id: SEvent.listenerId,
+        handler
+      })
+      return SEvent.listenerId++
+    }
+    return 0
+  }
+
+  once(handler){
+    const originHandler = handler
+    handler = (args) => {
+      originHandler(args)
+      this.off(handler)
+    }
+    this.on(handler)
+  }
+
+  emit(args) {
+    if (!(this.handlers && this.handlers.length)) return
+    let l = this.handlers.length
+    let i = 0
+    while(i < this.handlers.length){
+      this.handlers[i++].handler(...arguments)
+      // 防止删除某些once事件的handler导致length改变
+      if (this.handlers.length == l - 1) {
+        i--
+        l--
+      }
+    }
+  }
+
+  off(handler) {
+    if (!(this.handlers && this.handlers.length)) return
+    for (let i = 0; i < this.handlers.length; i++) {
+      if (this.handlers[i].handler === handler) {
+        this.handlers.splice(i, 1)
+        break
+      }
+    }
+  }
+}
+SEvent.listenerId = 1
+
+module.exports = SEvent
+
+

+ 345 - 0
前端-20230727/lib/SPage.js

@@ -0,0 +1,345 @@
+// 引入事件模块 https://github.com/GravityC/SPage
+const SEvent = require('SEvent.js')
+wx.$event = {
+  on(eventName, handler) {
+    return SEvent.getEvent(eventName).on(handler)
+  },
+  once(eventName, handler) {
+    SEvent.getEvent(eventName).once(handler)
+  },
+  emit(eventName) {
+    const args = Array.from(arguments).slice(1)
+    SEvent.getEvent(eventName).emit(...args)
+  },
+  off(nameOrId, handler) {
+    if(handler && typeof (handler) === 'function'){
+      SEvent.getEvent(nameOrId).off(handler)
+    }else{
+      SEvent.off(nameOrId)
+    }
+  },
+  remove(eventName) {
+    SEvent.removeEvent(eventName)
+  }
+}
+
+// 引入request模块
+const SRequest = require('SRequest.js')
+const $http = new SRequest()
+wx.$http = $http
+wx.$request = $http.request.bind($http)
+wx.$get = $http.get.bind($http)
+wx.$post = $http.post.bind($http)
+wx.$put = $http.put.bind($http)
+wx.$delete = $http.delete.bind($http)
+
+
+/* ----------------------------------------------------------------------------- */
+wx.$pages = {}
+// 获取当前页面实例
+wx.$getCurPage = function() {
+  return getCurrentPages()[getCurrentPages().length - 1]
+}
+
+// 获取当前页面实例对应的页面名
+wx.$getCurPageName = function() {
+  return wx.$getCurPage().$name
+}
+
+// $place与$take,$take调用完即删除引用
+let channel = {}
+wx.$place = function(id, value) {
+  channel[id] = value
+}
+
+wx.$take = function(id) {
+  const v = channel[id]
+  channel[id] = null
+  return v
+}
+
+/**
+ * 封装wx.navigateTo
+ * @url {string} - 跳转路径
+ * @query {object} - 携带参数
+ */
+wx.$route = function(url, query) {
+  const page = getPage(url)
+  query = query || {}
+  query.from = wx.$getCurPageName() // Page || Component
+  // 若page已加载可调用onNavigate方法
+  if (page && page.onNavigate) {
+    page.onNavigate(query)
+  }
+  url = url + '?' + parseQuery(query)
+  wx.navigateTo({
+    url
+  })
+}
+
+// -----------------------------以下是工具函数----------------------
+
+//装饰器
+//@afterOrigin {Boolean} - true:装饰函数在原函数之后触发
+const decorator = function(originFn, decorateFn, afterOrigin) {
+  const origin = originFn
+  originFn = function(args) {
+    if (afterOrigin) {
+      if (origin) origin.call(this, args)
+      decorateFn.call(this, args)
+    } else {
+      decorateFn.call(this, args)
+      if (origin) origin.call(this, args)
+    }
+  }
+  return originFn
+}
+
+// 解析query对象成string
+const parseQuery = function(query) {
+  return Object.keys(query).map(k => `${k}=${query[k]}`).join('&')
+}
+
+// 从url中得到pageName
+const getPageName = function(url) {
+  url = url.includes('?') ? url.split('?')[0] : url
+  const arr = url.split('/')
+  return arr[arr.length - 1]
+}
+
+/**
+ * @str - pageName或者url
+ */
+const getPage = function(str) {
+  const name = str.includes('/') ? getPageName(str) : str
+  return wx.$pages[name]
+}
+
+// 判断是否是空对象
+const isEmpty = function(obj) {
+  return !Object.keys(obj).length
+}
+
+/**
+ * 扩展computed计算属性
+ */
+const extendComputed = function(option) {
+  let page
+  // 为$setData方法响应computed
+  option.$setData = function(obj) {
+    this.setData(obj)
+    page = this // 绑定page实例
+    const needUpdate = calcComputed() // 将需要改变的computed属性添加到接下来要setData的对象中
+    if (!isEmpty(needUpdate)) {
+      this.setData(needUpdate)
+    }
+  }
+
+  const computed = option.computed || {}
+  const computedKeys = Object.keys(computed)
+  let computedCache = {}
+
+  // 计算需更改的计算属性
+  const calcComputed = function(isInit) {
+    const needUpdate = {}
+    const that = isInit ? option : page
+    for (const key of computedKeys) {
+      const value = computed[key].call(that)
+      if (value !== computedCache[key]) needUpdate[key] = computedCache[key] = value
+      if (isInit) option.data[key] = needUpdate[key] // 初始化操作
+    }
+    return needUpdate
+  }
+
+  // 页面unload时清空computedCache
+  option.onUnload = decorator(option.onUnload, function() {
+    computedCache = {}
+  })
+
+  calcComputed(true);
+}
+
+/**
+ * 为所有Page和Component扩展方法
+ */
+const extendFunctions = function(option) {
+  option.$route = wx.$route
+  option.$place = wx.$place
+  option.$take = wx.$take
+  // 封装wx.request
+  option.$request = wx.$request
+  option.$get = wx.$get
+  option.$post = wx.$post
+  option.$put = wx.$put
+  option.$delete = wx.$delete
+  // 事件机制
+  option.$on = function(eventName, handler){
+    this.$listeners = this.$listeners || []
+    this.$listeners.push(wx.$event.on(eventName, handler))
+  }
+  option.$once = wx.$event.once
+  option.$emit = wx.$event.emit
+  option.$off = wx.$event.off
+  option.$remove = wx.$event.remove
+}
+
+/**
+ * -------------扩展App-------------------
+ */
+let initPageObject
+let initCompObject
+const extendApp = function() {
+  const originApp = App
+  App = function(option) {
+    if (option.$mixinP) {
+      initPageObject = option.$mixinP
+    }
+
+    if (option.$mixinC) {
+      initCompObject = option.$mixinC
+    }
+
+    originApp(option)
+  }
+}
+
+/**
+ * -------------扩展Page----------------
+ */
+const extendPage = function() {
+  const originPage = Page
+  Page = function(option) {
+    // 混合app.$mixinP
+    if (initPageObject) {
+      const hooks = ['onLoad', 'onShow', 'onReady', 'onHide', 'onUnload', 'onPullDownRefresh', 'onReachBottom', 'onShareAppMessage', 'onPageScroll', 'onResize', 'onTabItemTap']
+      for (const k in initPageObject) {
+        if (hooks.includes(k)) {
+          option[k] = decorator(option[k], initPageObject[k])
+        } else if (k === 'data') {
+          option.data = Object.assign({}, initPageObject.data, option.data)
+        } else if (!option.hasOwnProperty(k)) {
+          option[k] = initPageObject[k]
+        }
+      }
+    }
+
+    // 若定义了$name, 则添加到wx.$pages中
+    if (option.$name) {
+      wx.$pages[option.$name] = option
+    } else {
+      option.$name = 'unKnow' //此处强行给$name赋值,为了后续区分是Page还是Component
+    }
+
+    // 添加$status属性
+    option.$status = {
+      isFirstShow: true
+    }
+    // 是否已执行过onNavigate函数
+    option.$$isNavigated = false
+
+    // 扩展computed属性
+    extendComputed(option)
+    // 扩展方法
+    extendFunctions(option)
+
+    // 装饰onNavigate
+    option.onNavigate = decorator(option.onNavigate, function(query) {
+      option.$$isNavigated = true
+    })
+
+    // 装饰onLoad
+    option.onLoad = decorator(option.onLoad, function(query) {
+      // 若页面有onNavigate方法但还没运行,则运行onNavigate方法
+      if (option.onNavigate && !option.$$isNavigated) {
+        option.onNavigate(query)
+      }
+    })
+
+    // 装饰onShow
+    option.onShow = decorator(option.onShow, function() {
+      this.$status.isFirstShow = false
+    }, true)
+
+    // 隐藏页面时隐藏标题栏加载动画(坑爹的微信官方bug)
+    option.onHide = decorator(option.onHide, function() {
+      wx.hideNavigationBarLoading()
+    })
+
+    // 装饰onUnload
+    option.onUnload = decorator(option.onUnload, function(){
+      // 卸载本页面的监听器
+      if (this.$listeners && this.$listeners.length) {
+        for (const id of this.$listeners) {
+          wx.$event.off(id)
+        }
+      }
+    })
+
+    //原生Page构造
+    originPage(option)
+  }
+}
+
+/**
+ * --------------------------------------------扩展Component
+ */
+const extendComponent = function() {
+  const originComponent = Component
+  Component = function(option) {
+    option.methods = option.methods || {}
+    // 混合app.$mixinC
+    if (initCompObject) {
+      const mixinObj = ['properties', 'data', 'observers', 'methods', 'options']
+      for (const k in initCompObject) {
+        if (k === 'lifetimes' || k === 'pageLifetimes') {
+          if (!option[k]) {
+            option[k] = initCompObject[k]
+          } else {
+            for (const h in initCompObject[k]) {
+              option[k][h] = decorator(option[k][h], initCompObject[k][h])
+            }
+          }
+        } else if (mixinObj.includes(k)) {
+          option[k] = Object.assign({}, initCompObject[k], option[k])
+        } else if (!option.hasOwnProperty(k)) {
+          option[k] = initCompObject[k]
+        }
+      }
+    }
+    // 扩展computed属性
+    extendComputed(option)
+    // 扩展方法
+    extendFunctions(option.methods)
+
+    option.lifetimes = option.lifetimes || {}
+    // 装饰detached
+    option.lifetimes.detached = decorator(option.lifetimes.detached, function () {
+      // 卸载本组件的监听器
+      if (this.$listeners && this.$listeners.length) {
+        for (const id of this.$listeners) {
+          wx.$event.off(id)
+        }
+      }
+    })
+
+    // 获取当前页面实例
+    option.methods.$getCurPage = wx.$getCurPage
+
+    // 获取当前页面实例对应的页面名
+    option.methods.$getCurPageName = wx.$getCurPageName
+
+    // 重新定义$setData,便于扩展其他功能
+    const originData = option.$setData
+    option.methods.$setData = function(obj) {
+      return originData.call(this, obj)
+    }
+    //原生Component构造
+    originComponent(option)
+  }
+}
+
+module.exports = (function() {
+  extendApp()
+  extendPage()
+  extendComponent()
+}())

+ 124 - 0
前端-20230727/lib/SRequest.js

@@ -0,0 +1,124 @@
+class Interceptor {
+  handlerId = 1
+
+  constructor() {
+    this.id = Interceptor.id++
+    this.handlers = []
+  }
+
+  use(success, fail) {
+    this.handlers.push({
+      id: this.handlerId,
+      success,
+      fail
+    })
+    return this.handlerId++
+  }
+
+  eject(handlerId) {
+    for (let i = 0; i < this.handlers.length; i++) {
+      if (this.handlers[i].id === handlerId) {
+        return this.handlers.splice(i, 1)
+      }
+    }
+  }
+
+  go(config, isSuccess) {
+    if(!isSuccess){
+      return this.handlers[0].fail(config)
+    }else{
+      for (const v of this.handlers) {
+        config = v.success(config)
+      }
+      return config
+    }
+  }
+}
+Interceptor.id = 1
+
+function isHttpSuccess(status){
+  return status >= 200 && status < 300 || status === 304
+}
+
+class SRequest {
+  config = {
+    baseUrl:'',
+    dataType: 'json',
+    responseType: 'text',
+    header: {},
+  }
+
+  constructor(config) {
+    this.config = Object.assign(this.config, config)
+    this.interceptors = {
+      request: new Interceptor(),
+      response: new Interceptor()
+    }
+  }
+
+  request(config) {
+    config = config ? Object.assign({}, this.config, config) : this.config
+    config = this.interceptReq(config, true)
+
+    let { url, method, data, header, dataType, responseType } = config
+    if (!url.startsWith('https://')) {
+      url = config.baseUrl + url
+    }
+    return new Promise((resolve, reject) => {
+      wx.request({
+        url,
+        data,
+        header: header || this.header,
+        method,
+        dataType,
+        responseType,
+        success: res => {
+          if(isHttpSuccess(res.statusCode)){
+            res = this.interceptRes(res, true)
+            resolve(res.data)
+          }else{
+            res = this.interceptRes(res, false)
+            reject(res)
+          }
+        },
+        fail: res => {
+          res = this.interceptRes(res, false)
+          reject(res)
+        },
+      })
+    })
+  }
+  // 遍历请求拦截器
+  interceptReq(config, isSuccess) {
+    return this.interceptors.request.go(config, isSuccess)
+  }
+
+  // 遍历响应拦截器
+  interceptRes(response, isSuccess) {
+    return this.interceptors.response.go(response, isSuccess)
+  }
+
+  get(url, config) {
+    const options = { url, method: 'GET' }
+    Object.assign(options, config || null)
+    return this.request(options)
+  }
+
+  post(url, data, config) {
+    const options = { url, method: 'POST' }
+    Object.assign(options, data ? { data } : null, config || null)
+    return this.request(options)
+  }
+  put(url, data, config) {
+    const options = { url, method: 'PUT' }
+    Object.assign(options, data ? { data } : null, config || null)
+    return this.request(options)
+  }
+  delete(url, config) {
+    const options = { url, method: 'DELETE' }
+    Object.assign(options, config || null)
+    return this.request(options)
+  }
+}
+
+module.exports = SRequest

+ 170 - 0
前端-20230727/lionfish_comshop/components/actionsheet/actionsheet.js

@@ -0,0 +1,170 @@
+module.exports =
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+/******/
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId]) {
+/******/ 			return installedModules[moduleId].exports;
+/******/ 		}
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			i: moduleId,
+/******/ 			l: false,
+/******/ 			exports: {}
+/******/ 		};
+/******/
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ 		// Flag the module as loaded
+/******/ 		module.l = true;
+/******/
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/
+/******/
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+/******/
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+/******/
+/******/ 	// define getter function for harmony exports
+/******/ 	__webpack_require__.d = function(exports, name, getter) {
+/******/ 		if(!__webpack_require__.o(exports, name)) {
+/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ 		}
+/******/ 	};
+/******/
+/******/ 	// define __esModule on exports
+/******/ 	__webpack_require__.r = function(exports) {
+/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ 		}
+/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
+/******/ 	};
+/******/
+/******/ 	// create a fake namespace object
+/******/ 	// mode & 1: value is a module id, require it
+/******/ 	// mode & 2: merge all properties of value into the ns
+/******/ 	// mode & 4: return value when already ns object
+/******/ 	// mode & 8|1: behave like require
+/******/ 	__webpack_require__.t = function(value, mode) {
+/******/ 		if(mode & 1) value = __webpack_require__(value);
+/******/ 		if(mode & 8) return value;
+/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ 		var ns = Object.create(null);
+/******/ 		__webpack_require__.r(ns);
+/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ 		return ns;
+/******/ 	};
+/******/
+/******/ 	// getDefaultExport function for compatibility with non-harmony modules
+/******/ 	__webpack_require__.n = function(module) {
+/******/ 		var getter = module && module.__esModule ?
+/******/ 			function getDefault() { return module['default']; } :
+/******/ 			function getModuleExports() { return module; };
+/******/ 		__webpack_require__.d(getter, 'a', getter);
+/******/ 		return getter;
+/******/ 	};
+/******/
+/******/ 	// Object.prototype.hasOwnProperty.call
+/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+/******/
+/******/
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(__webpack_require__.s = 1);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */,
+/* 1 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Component({
+    options: {
+        multipleSlots: true,
+        addGlobalClass: true
+    },
+    properties: {
+        title: {
+            type: String,
+            value: ''
+        },
+        showCancel: {
+            type: Boolean,
+            value: true
+        },
+        cancelText: {
+            type: String,
+            value: '取消'
+        },
+        maskClass: {
+            type: String,
+            value: ''
+        },
+        extClass: {
+            type: String,
+            value: ''
+        },
+        maskClosable: {
+            type: Boolean,
+            value: true
+        },
+        mask: {
+            type: Boolean,
+            value: true
+        },
+        show: {
+            type: Boolean,
+            value: false
+        },
+        actions: {
+            type: Array,
+            value: [],
+            observer: '_groupChange'
+        }
+    },
+    methods: {
+        _groupChange: function _groupChange(e) {
+            if (e.length > 0 && typeof e[0] !== 'string' && !(e[0] instanceof Array)) {
+                this.setData({
+                    actions: [this.data.actions]
+                });
+            }
+        },
+        buttonTap: function buttonTap(e) {
+            var _e$currentTarget$data = e.currentTarget.dataset,
+                value = _e$currentTarget$data.value,
+                groupindex = _e$currentTarget$data.groupindex,
+                index = _e$currentTarget$data.index;
+
+            this.triggerEvent('actiontap', { value: value, groupindex: groupindex, index: index });
+        },
+        closeActionSheet: function closeActionSheet(e) {
+            var type = e.currentTarget.dataset.type;
+
+            if (this.data.maskClosable || type) {
+                this.setData({
+                    show: false
+                });
+                this.triggerEvent('close');
+            }
+        }
+    }
+});
+
+/***/ })
+/******/ ]);

+ 4 - 0
前端-20230727/lionfish_comshop/components/actionsheet/actionsheet.json

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

+ 52 - 0
前端-20230727/lionfish_comshop/components/actionsheet/actionsheet.wxml

@@ -0,0 +1,52 @@
+<wxs module="utils">
+    var join = function(a,b) {
+        return a+b
+    };
+    var isNotSlot = function(v) {
+        return typeof v !== 'string'
+    }
+    module.exports = {
+        join: join,
+        isNotSlot: isNotSlot
+    }
+</wxs>
+
+<view wx:if="{{mask}}" class="weui-mask {{show ? '' : 'weui-mask_hidden'}} {{maskClass}}" bindtap="closeActionSheet"></view>
+<view class="weui-actionsheet {{show ? 'weui-actionsheet_toggle' : ''}} {{extClass}}">
+    <!-- 标题 -->
+    <block  wx:if="{{title}}"> 
+        <view class="weui-actionsheet__title">
+            <view class="weui-actionsheet__title-text">{{title}}</view>
+        </view>
+    </block>
+    <slot name="title" wx:else></slot>
+    <view 
+        class="{{ !showCancel && index === actions.length-1 ? 'weui-actionsheet__action' : 'weui-actionsheet__menu' }}"
+        wx:key="index" 
+        wx:for-item="actionItem" 
+        wx:for-index="index"
+        wx:for="{{actions}}"
+    >
+        <block wx:if="{{utils.isNotSlot(actionItem)}}">
+        {{item.type}}
+            <block wx:for="{{actionItem}}" wx:key="value" wx:for-index="actionIndex">
+                <button wx:if="{{item.share}}" class="btn weui-actionsheet__cell {{item.type === 'warn' ? 'weui-actionsheet__cell_warn' : '' }}" open-type="share">{{item.text}}</button>
+                <view
+                    wx:else 
+                    class="weui-actionsheet__cell {{item.type === 'warn' ? 'weui-actionsheet__cell_warn' : '' }}" 
+                    data-groupindex="{{index}}"
+                    data-index="{{actionIndex}}" 
+                    data-value="{{item.value}}"
+                    bindtap="buttonTap"
+                >
+                    {{item.text}}
+                </view>
+            </block>
+        </block>
+        <slot name="{{actionItem}}" wx:else></slot>
+    </view>
+    <!-- 取消按钮 -->
+    <view class="weui-actionsheet__action" wx:if="{{showCancel}}">
+        <view class="weui-actionsheet__cell" data-type="close" id="iosActionsheetCancel" bindtap="closeActionSheet">{{cancelText}}</view>
+    </view>
+</view>

Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
前端-20230727/lionfish_comshop/components/actionsheet/actionsheet.wxss


+ 121 - 0
前端-20230727/lionfish_comshop/components/ad-alert/index.js

@@ -0,0 +1,121 @@
+// lionfish_comshop/components/ad-alert/index.js
+Component({
+  /**
+   * 组件的属性列表
+   * pop_page 投放页面类型:0、商城首页,1、商品分类,2、商城购物车,3、商城个人中心
+   */
+  properties: {
+    pop_page: {
+      type: Number,
+      value: ''
+    }
+  },
+
+  data: {
+    imgheights: [],//所有图片的高度  
+    current:0,
+    visible: false,
+    adv_list: []
+  },
+
+  attached: function() {
+    // this.getData();
+  },
+
+  pageLifetimes: {
+    show: function () {
+      this.getData();
+    }
+  },
+
+  methods: {
+    getData: function(){
+      let token = wx.getStorageSync('token');
+      let pop_page = this.data.pop_page;
+      getApp().util.ProReq('popadv.popadv_list', {token, pop_page}).catch(res=>{
+        console.log(res.popadvs)
+        if(res.popadvs) {
+          let adv_list = res.popadvs.adv_list || [];
+          this.setData({
+            adv_list,
+            visible: adv_list.length>0
+          })
+        }
+      })
+    },
+    imageLoad(e){
+      //当图片载入完毕时
+      var imgwidth = e.detail.width,
+        imgheight = e.detail.height,
+        //宽高比  
+        ratio = imgwidth / imgheight;
+        console.log(imgwidth, imgheight)
+      // 计算的高度值
+      var viewHeight = 600 / ratio;
+      var imgheight = viewHeight;
+      var imgheights = this.data.imgheights;
+      //把每一张图片的对应的高度记录到数组里  
+      imgheights[e.target.dataset.id] = imgheight;
+      console.log('图片的高度:'+imgheights)
+      this.setData({
+        imgheights: imgheights
+      })
+    },
+    bindchange: function (e) {
+      // current 改变时会触发 change 事件
+      this.setData({ current: e.detail.current })
+    },
+    close: function() {
+      this.setData({ visible: false })
+    },
+    popclick: function(e){
+      let idx = e.currentTarget.dataset.idx;
+      if(idx!=='') {
+        let adv_list = this.data.adv_list;
+        let linktype = adv_list[idx].linktype;
+        let url = adv_list[idx].link;
+        let ad_id = adv_list[idx].ad_id;
+        if (linktype == 0) {
+          // 跳转webview
+          wx.navigateTo({
+            url: '/lionfish_comshop/pages/web-view?url=' + encodeURIComponent(url),
+          })
+        } else if (linktype == 1) {
+          let tabUrls = ['/lionfish_comshop/pages/index/index', '/lionfish_comshop/pages/order/shopCart', '/lionfish_comshop/pages/user/me', '/lionfish_comshop/pages/type/index'];
+          if (tabUrls.indexOf(url) != -1) {
+            url && wx.switchTab({ url: url })
+          } else {
+            url && wx.navigateTo({ url: url })
+          }
+        } else if (linktype == 2) {
+          // 跳转小程序
+          let appId = adv_list[idx].appid;
+          appId && wx.navigateToMiniProgram({
+            appId,
+            path: url,
+            extraData: {},
+            envVersion: 'release',
+            success(res) {
+              console.log(`弹窗广告:打开外链 appId:${appId} url:${url} 成功`)
+            },
+            fail(error) {
+              console.log(`弹窗广告:打开外链 appId:${appId} url:${url} 失败`)
+              console.log('失败原因:' + error.errMsg)
+              if(error.errMsg == 'navigateToMiniProgram:fail invalid appid') {
+                wx.showToast({
+                  icon: 'none',
+                  title: 'appid验证失败,请检查!',
+                })
+              }
+            }
+          })
+        }
+        //添加点击量
+        this.addview(ad_id);
+      }
+    },
+    addview: function(id){
+      getApp().util.ProReq('popadv.popadv_click', {id})
+    }
+  }
+})

+ 4 - 0
前端-20230727/lionfish_comshop/components/ad-alert/index.json

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

+ 16 - 0
前端-20230727/lionfish_comshop/components/ad-alert/index.wxml

@@ -0,0 +1,16 @@
+<view class="fixed" wx:if="{{visible&&adv_list.length>0}}">
+  <view class="mask" bindtap="close"></view>
+  <view class="cont">
+    <image wx:if="{{adv_list.length==1}}" class="img" mode="widthFix" src="{{adv_list[0].thumb}}" bindtap="popclick" data-idx='0'></image>
+    <swiper wx:else class="swiper" bindchange="bindchange" style="height:{{imgheights[current]}}rpx;" indicator-dots="true" autoplay="true" interval="3000" duration="500" indicator-active-color="#FFFFFF">
+      <block wx:for="{{adv_list}}" wx:key="id">
+        <swiper-item bindtap="popclick" data-idx='{{index}}'>
+          <image class="img" bindload="imageLoad" data-id='{{index}}' mode="widthFix" src="{{item.thumb}}"></image>
+        </swiper-item>
+      </block>
+    </swiper>
+  </view>
+  <view class="close">
+    <image class="close-img" src="../../images/closePoster.png" bindtap="close"></image>
+  </view>
+</view>

+ 40 - 0
前端-20230727/lionfish_comshop/components/ad-alert/index.wxss

@@ -0,0 +1,40 @@
+.fixed {
+  position: fixed;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  z-index: 1000;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+}
+
+.mask {
+  position: fixed;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  background: rgba(0, 0, 0, 0.6);
+}
+
+.cont {
+  z-index: 1001;
+  width: 80%;
+}
+
+.cont .img {
+  width: 100%;
+}
+
+.close-img {
+  margin-top: 40rpx;
+  width: 60rpx;
+  height: 60rpx;
+}
+
+.swiper {
+  width: 100%;
+}

+ 18 - 0
前端-20230727/lionfish_comshop/components/addCartBtn/index.js

@@ -0,0 +1,18 @@
+Component({
+  externalClasses: ['i-class'],
+  properties: {
+    fontsize: {
+      type: Number,
+      value: 24
+    }
+  },
+  data: {
+    skin: getApp().globalData.skin,
+  },
+
+  attached(){
+    this.setData({
+      skin: getApp().globalData.skin,
+    })
+  }
+})

+ 4 - 0
前端-20230727/lionfish_comshop/components/addCartBtn/index.json

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

+ 3 - 0
前端-20230727/lionfish_comshop/components/addCartBtn/index.wxml

@@ -0,0 +1,3 @@
+<view class="btn i-class" style="background: linear-gradient(to top, {{skin.color}}, {{skin.light}});">
+  <text class="iconfont icon-gouwuche" style="color:#fff;font-size:{{fontsize}}rpx;"></text>
+</view>

+ 11 - 0
前端-20230727/lionfish_comshop/components/addCartBtn/index.wxss

@@ -0,0 +1,11 @@
+@import "/icon.wxss";
+
+.btn {
+  width: 60rpx;
+  height: 60rpx;
+  border-radius: 50%;
+  background: linear-gradient(to top, #ff5345, #ff8379);
+  display: flex!important;
+  align-items: center;
+  justify-content: center;
+}

+ 108 - 0
前端-20230727/lionfish_comshop/components/advimg/index.js

@@ -0,0 +1,108 @@
+Component({
+  properties: {
+    pos: {
+      type: String,
+      value: 0
+    }
+  },
+  data: {
+    info: '', 
+    ishow: false
+  },
+
+  attached: function(){
+    this.getData();
+  },
+
+  pageLifetimes: {
+    show: function() {
+      console.log('pageLifetimes')
+      this.getData();
+    }
+  },
+  
+  methods: {
+    getData: function() {
+      let that = this;
+      getApp().util.request({
+        url: 'entry/wxapp/index',
+        data: {
+          controller: 'index.get_advimg'
+        },
+        dataType: 'json',
+        success: function (res) {
+          if(res.data.code==0) {
+            let info = res.data.data;
+            let pos = info.pos || [];
+            let ishow = pos.includes(that.data.pos);
+            that.setData({ info, ishow })
+          } else {
+            that.setData({ ishow: false })
+          }
+        }
+      })
+    },
+    goNav: function(){
+      let info = this.data.info;
+      let type = info.linktype;
+      let url = info.link;
+      if (type == 0) {
+        // 跳转webview
+        wx.navigateTo({
+          url: '/lionfish_comshop/pages/web-view?url=' + encodeURIComponent(url),
+        })
+      } else if (type == 1) {
+        if (url.indexOf('lionfish_comshop/pages/index/index') != -1 || url.indexOf('lionfish_comshop/pages/order/shopCart') != -1 || url.indexOf('lionfish_comshop/pages/user/me') != -1 || url.indexOf('lionfish_comshop/pages/type/index') != -1) {
+          url && wx.switchTab({ url })
+        } else {
+          url && wx.navigateTo({ url })
+        }
+      } else if (type == 2) {
+        // 跳转小程序
+        let appId = info.appid;
+        appId && wx.navigateToMiniProgram({
+          appId,
+          path: url,
+          extraData: {},
+          envVersion: 'release',
+          success(res) {
+            // 打开成功
+          },
+          fail(error) {
+            console.log(error)
+          }
+        })
+      } else if (type == 3) {
+        if(this.data.pos==0) {
+          this.triggerEvent("switchType", url);
+        } else {
+          getApp().globalData.indexCateId = url;
+          wx.switchTab({
+            url: '/lionfish_comshop/pages/index/index'
+          })
+        }
+      } else if (type == 4) {
+        //独立分类
+        getApp().globalData.typeCateId = url;
+        wx.switchTab({
+          url: '/lionfish_comshop/pages/type/index'
+        })
+      }else if (type==5){
+        // 跳转小程序
+        let appId = info.appid;
+        appId && wx.navigateToMiniProgram({
+          appId,
+          path: url,
+          extraData: {},
+          envVersion: 'release',
+          success(res) {
+            // 打开成功
+          },
+          fail(error) {
+            console.log(error)
+          }
+        })
+      }
+    }
+  }
+})

+ 4 - 0
前端-20230727/lionfish_comshop/components/advimg/index.json

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

+ 6 - 0
前端-20230727/lionfish_comshop/components/advimg/index.wxml

@@ -0,0 +1,6 @@
+<view class="wrap" wx:if="{{info&&ishow}}">
+  <button class="contact" openType="contact" wx:if="{{info.linktype==5}}">
+    <image class="img" src="{{info.thumb}}" mode="widthFix"></image>
+  </button>
+  <image bindtap="goNav" class="img" src="{{info.thumb}}" mode="widthFix" wx:else></image>
+</view>

+ 21 - 0
前端-20230727/lionfish_comshop/components/advimg/index.wxss

@@ -0,0 +1,21 @@
+.wrap {
+  padding: 0 20rpx;
+  margin: 10rpx 0;
+}
+
+.wrap .img {
+  width: 100%;
+}
+
+.contact {
+  font-size: inherit;
+  line-height: inherit;
+  border-radius: 0;
+  background: transparent;
+  color: inherit;
+  padding: 0;
+}
+
+.contact::after {
+  content: none;
+}

+ 29 - 0
前端-20230727/lionfish_comshop/components/asideBtn/index.js

@@ -0,0 +1,29 @@
+// lionfish_comshop/components/cartBtn/index.js
+Component({
+  externalClasses: ["i-class", "i-icon"],
+  properties: {
+    showHome: {
+      type: Boolean,
+      value: false
+    },
+    showShare: {
+      type: Boolean,
+      value: false
+    },
+    showContact: {
+      type: Boolean,
+      value: false
+    },
+    cartNum: {
+      type: Number,
+      value: 0
+    }
+  },
+
+  methods: {
+    goLink: function (e) {
+      let url = e.currentTarget.dataset.link;
+      wx.switchTab({ url })
+    }
+  }
+})

+ 4 - 0
前端-20230727/lionfish_comshop/components/asideBtn/index.json

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

+ 14 - 0
前端-20230727/lionfish_comshop/components/asideBtn/index.wxml

@@ -0,0 +1,14 @@
+<view class="cart-btn i-class">
+  <button class="icon btn" open-type="share" wx:if="{{showShare}}">
+    <text class="iconfont icon-fenxiang"></text>
+    <view class="name">分享</view>
+  </button>
+  <button class="icon btn" openType="contact" wx:if="{{showContact}}">
+    <text class="iconfont icon-kefu"></text>
+    <view class="name">客服</view>
+  </button>
+  <view class="icon none-btn" bindtap="goLink" data-link="/lionfish_comshop/pages/index/index" wx:if="{{showHome}}">
+    <text class="iconfont icon-shouye"></text>
+    <view class="name">首页</view>
+  </view>
+</view>

+ 40 - 0
前端-20230727/lionfish_comshop/components/asideBtn/index.wxss

@@ -0,0 +1,40 @@
+@import "../../../icon.wxss";
+.cart-btn {
+  position: fixed;
+  right: 30rpx;
+  bottom: 40%;
+  z-index: 100;
+}
+
+.cart-btn .icon {
+  position: relative;
+  width: 80rpx;
+  height: 80rpx;
+  margin-bottom: 20rpx;
+  background: rgba(0, 0, 0, 0.5);
+  border-radius: 50%;
+  text-align: center;
+  color: #fff;
+  box-sizing: border-box;
+  font-size: 20rpx;
+  padding: 10rpx;
+}
+
+.cart-btn .btn.icon {
+  line-height: 1.2;
+  z-index: 100;
+}
+
+.cart-btn .iconfont {
+  font-size: 30rpx;
+  color: #fff;
+}
+
+
+.cart-btn .none-btn.icon .iconfont {
+  font-size: 35rpx;
+}
+
+.cart-btn .none-btn.icon .name {
+  margin-top: -3rpx;
+}

+ 144 - 0
前端-20230727/lionfish_comshop/components/auth/index.js

@@ -0,0 +1,144 @@
+var util = require('../../utils/util.js');
+var wcache = require('../../utils/wcache.js');
+var app = getApp();
+var flag = true;
+
+Component({
+  properties: {
+    needAuth: {
+      type: Boolean,
+      value: false
+    },
+    needPosition: {
+      type: Boolean,
+      value: true
+    },
+    navBackUrl: {
+      type: String,
+      value: '',
+      observer: function (t) {
+        if (t) app.globalData.navBackUrl = t;
+      }
+    }
+  },
+  data: {
+    btnLoading: false,
+    isIpx: false,
+    auth_bg: '',
+    loaded: false
+  },
+  attached: function() {
+    this.getBg();
+    app.globalData.isIpx && this.setData({
+      isIpx: true
+    });
+  },
+  methods: {
+    getBg: function(){
+      let that = this;
+      let auth_bg = wcache.get('auth_bg', false);
+      if (!auth_bg){
+        app.util.request({
+          'url': 'entry/wxapp/index',
+          'data': {
+            controller: 'index.get_auth_bg'
+          },
+          dataType: 'json',
+          success: function (res) {
+            that.setData({ loaded: true })
+            if (res.data.code == 0) {
+              wcache.put('auth_bg', res.data.data, 600);
+              res.data.data && that.setData({ auth_bg: res.data.data })
+            }
+          }
+        })
+      } else {
+        that.setData({ auth_bg, loaded: true })
+      }
+    },
+    bindGetUserInfo: function (t) {
+      var that = this;
+      if (!this.data.btnLoading) {
+        wx.getUserProfile({
+          desc: "获取你的昵称、头像、地区及性别",
+          success: function (msg) {
+            var userInfo = msg.userInfo
+            wx.setStorage({
+              key: "userInfo",
+              data: userInfo
+            })
+            that.setData({ btnLoading: true });
+            util.login_prosime(that.data.needPosition, userInfo).then(function () {
+              console.log("授权成功")
+              that.setData({ btnLoading: false });
+              wx.showToast({
+                title: '登录成功',
+                icon: 'success',
+                duration: 2000
+              })
+              that.triggerEvent("authSuccess");
+              app.globalData.changedCommunity = true;
+              //检查获取位置权限
+              that.data.needPosition && location.getGps();
+            }).catch(function () {
+              that.triggerEvent("cancel");
+              console.log('授权失败');
+            })
+          },
+          fail: ()=>{
+            wx.showToast({
+              title: "授权失败,为了完整体验,获取更多优惠活动,需要您的授权。",
+              icon: "none"
+            });
+            that.triggerEvent("cancel");
+            that.setData({ btnLoading: false });
+          }
+        })
+      }
+    },
+    bindGetUserInfoTwo: function (t) {
+      var that = this;
+      wx.showLoading({ title: '授权中' });
+      if (flag) {
+        flag = false;
+        var n = t.detail;
+        if ("getUserInfo:ok" === n.errMsg) {
+          util.login_prosime().then(function () {
+            console.log("授权成功")
+            wx.hideLoading();
+            flag = true;
+            wx.showToast({
+              title: '登录成功',
+              icon: 'success',
+              duration: 2000
+            })
+            that.triggerEvent("authSuccess");
+          }).catch(function () {
+            flag = true;
+            wx.hideLoading();
+            console.log('授权失败')
+          })
+        } else {
+          wx.hideLoading();
+          wx.showToast({
+            title: "授权失败,为了完整体验,获取更多优惠活动,需要您的授权。",
+            icon: "none"
+          });
+          flag = true;
+        }
+      }
+    }
+    // openSetting: function () {
+    //   location.openSetting().then(function (t) {
+    //     app.globalData.location = {
+    //       lat: t.latitude,
+    //       lng: t.longitude
+    //     };
+    //     app.globalData.community.communityId || wx.redirectTo({
+    //       url: "/lionfish_comshop/pages/position/communities"
+    //     });
+    //     app.globalData.canGetGPS = true;
+    //   });
+    // }
+  }
+});

+ 7 - 0
前端-20230727/lionfish_comshop/components/auth/index.json

@@ -0,0 +1,7 @@
+{
+  "component": true,
+  "usingComponents": {
+    "i-button": "../button/index",
+    "i-router-link": "../router-link/router-link"
+  }
+}

+ 14 - 0
前端-20230727/lionfish_comshop/components/auth/index.wxml

@@ -0,0 +1,14 @@
+<view class="wrap" wx:if="{{needAuth&&loaded}}">
+  <button bindgetuserinfo="bindGetUserInfoTwo" openType="getUserInfo" class='auth_bg' wx:if="{{auth_bg}}" style='background: url({{auth_bg}}) no-repeat top center;background-size: cover;'></button>
+  <block wx:else>
+    <image class='auth-login' mode='widthFix' src="../../images/login.png"></image>
+    <view class='line1'>我们的小程序将获取您的以下权限:</view>
+    <view class='line2'>·获取您的公开信息(昵称和头像等)</view>
+    <view class='line3'>(如未授权,可能无法正常使用该小程序)</view>
+    <i-button bindgetuserinfo="bindGetUserInfo" iClass="confirm" loading="{{btnLoading}}" openType="getUserInfo" wx:if="canIUse">确认授权</i-button>
+    <view class="updateWx" wx:else>请升级微信版本</view>
+  </block>
+</view>
+<view class="container {{isIpx?'pb20 mb20':''}}" wx:else>
+  <slot></slot>
+</view>

+ 61 - 0
前端-20230727/lionfish_comshop/components/auth/index.wxss

@@ -0,0 +1,61 @@
+.mb20 {
+  margin-bottom: 40rpx;
+}
+
+.wrap {
+  position: fixed;
+  width: 100%;
+  height: 100%;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+}
+
+.wrap .auth-login {
+  margin: 100rpx 0 50rpx;
+  width: 550rpx;
+}
+
+.auth_bg {
+  width: 100%;
+  height: 100%;
+  border-radius: 0;
+}
+
+.auth_bg::after {
+  border: 0;
+}
+
+.wrap .line1 {
+  line-height: 50rpx;
+  color: #333;
+  font-size: 30rpx;
+}
+
+.wrap .line2 {
+  line-height: 50rpx;
+  color: #999;
+  font-size: 26rpx;
+}
+
+.wrap .line3 {
+  line-height: 50rpx;
+  color: #333;
+  font-size: 24rpx;
+}
+
+.wrap .confirm {
+  width: 500rpx;
+  height: 90rpx;
+  line-height: 90rpx;
+  margin-top: 40rpx;
+  background: #1aad19;
+  color: #fff;
+  border-radius: 10rpx;
+  font-size: 34rpx;
+  margin-bottom: 40%;
+}
+
+.button-hover {
+  opacity: 0.8;
+}

+ 321 - 0
前端-20230727/lionfish_comshop/components/behavior/goods.js

@@ -0,0 +1,321 @@
+var t = require("../../utils/public");
+var util = require('../../utils/util.js');
+var status = require('../../utils/index.js');
+var app = getApp();
+
+module.exports = Behavior({
+  properties: {
+    spuItem: {
+      type: Object,
+      value: {
+        spuId: "",
+        skuId: "",
+        spuImage: "",
+        spuName: "",
+        endTime: 0,
+        beginTime: "",
+        actPrice: ["", ""],
+        marketPrice: ["", ""],
+        spuCanBuyNum: "",
+        soldNum: "",
+        actId: "",
+        limitMemberNum: "",
+        limitOrderNum: "",
+        serverTime: "",
+        isLimit: false,
+        skuList: [],
+        spuDescribe: "",
+        is_take_fullreduction: 0,
+        label_info: "",
+        car_count: 0
+      },
+      observer: function (t) {
+        let url = `/lionfish_comshop/pages/goods/goodsDetail?id=${t.actId}`;
+        // if (t && t.is_video) url = `/lionfish_comshop/moduleA/video/detail?&id=${t.actId}`;
+        this.setData({ url });
+      }
+    },
+    isPast: {
+      type: Boolean,
+      value: false
+    },
+    actEnd: {
+      type: Boolean,
+      value: false
+    },
+    reduction: {
+      type: Object,
+      value: {
+        full_money: '',
+        full_reducemoney: '',
+        is_open_fullreduction: 0
+      }
+    },
+    isShowListCount: {
+      type: Number,
+      value: 0
+    },
+    changeCarCount: {
+      type: Boolean,
+      value: false,
+      observer: function (t) {
+        if (t) this.setData({ number: this.data.spuItem.car_count || 0 });
+        console.log(this.data)
+      }
+    },
+    needAuth: {
+      type: Boolean,
+      value: false
+    },
+    is_open_vipcard_buy: {
+      type: Number,
+      value: 0
+    },
+    canLevelBuy: {
+      type: Boolean,
+      value: false
+    },
+    isShowListTimer: {
+      type: Boolean,
+      value: true
+    },
+    showPickTime: {
+      type: Boolean,
+      value: false
+    },
+    skin: {
+      type: Object
+    },
+    saleUnit: {
+      type: String
+    },
+    width250: {
+      type: Boolean,
+      value: false
+    },
+    diyInfo: {
+      type: Object,
+      value: {
+        goodsTag: 'default'
+      }
+    }
+  },
+  attached() {
+    this.setData({ placeholdeImg: app.globalData.placeholdeImg})
+  },
+  data: {
+    disabled: false,
+    placeholdeImg: '',
+    number: 0,
+    url: '',
+    canClick: true
+  },
+  ready: function () {
+    this.setData({
+      number: this.data.spuItem.car_count || 0
+    });
+    // console.log(this.data.spuItem)
+  },
+  methods: {
+    openSku: function() {
+      if (this.data.needAuth) {
+        this.triggerEvent("authModal", true);
+        return;
+      }
+      console.log( 'step1');
+      this.setData({
+        stopClick:true,
+        disabled:false
+      })
+      let spuItem = this.data.spuItem;
+      if (this.data.spuItem.skuList.length === void 0) {
+        //   console.log('step2')
+        this.triggerEvent("openSku", {
+          actId:spuItem.actId,
+          skuList: spuItem.skuList,
+          promotionDTO: spuItem.promotionDTO,
+          is_take_vipcard: spuItem.is_take_vipcard,
+          is_mb_level_buy: spuItem.is_mb_level_buy,
+          allData: {
+            spuName: spuItem.spuName,
+            skuImage: spuItem.skuImage,
+            actPrice: spuItem.actPrice,
+            canBuyNum: spuItem.spuCanBuyNum,
+            stock: spuItem.spuCanBuyNum,
+            marketPrice: spuItem.marketPrice,
+            oneday_limit_count: spuItem.oneday_limit_count,
+            total_limit_count: spuItem.total_limit_count,
+            one_limit_count: spuItem.one_limit_count,
+            goods_start_count: spuItem.goods_start_count
+          }
+        });
+      } else {
+        this.addCart({ value: 1, type: "plus" });
+      }
+    },
+    countDownEnd: function() {
+      this.setData({
+        actEnd: true
+      });
+    },
+    submit2: function(e) {
+      (0, t.collectFormIds)(e.detail.formId);
+    },
+    changeNumber: function (t) {
+      var e = t.detail;
+      e && this.addCart(e);
+    },
+    outOfMax: function (t) {
+      var e = t.detail;
+      let { spuCanBuyNum, one_limit_count } = this.data.spuItem;
+      let canBuyNum = spuCanBuyNum<one_limit_count ? spuCanBuyNum: one_limit_count;
+      if(this.data.number >= canBuyNum) {
+        wx.showToast({
+          title: "不能购买更多啦",
+          icon: "none"
+        })
+      }
+    },
+    addCart: function (t) {
+      // {value: 2, type: "plus/minus"}
+      var token = wx.getStorageSync('token');
+      var community = wx.getStorageSync('community');
+      let spuItem = this.data.spuItem;
+      var goods_id = spuItem.actId;
+      var community_id = community.communityId;
+      let { car_count, goods_start_count } = spuItem;
+      let quantity = 1;
+      let number = this.data.number || 0;
+
+      let that = this;
+      if (t.type =='plus'){
+        if(number<goods_start_count) {
+          quantity = goods_start_count-number;
+        }
+        let data = {
+          goods_id,
+          community_id,
+          quantity,
+          sku_str: '',
+          buy_type: 'dan',
+          pin_id: 0,
+          is_just_addcar: 1
+        }
+        util.addCart(data).then(res=>{
+          if(res.showVipModal==1) {
+            let { pop_vipmember_buyimage } = res.data;
+            that.triggerEvent("vipModal", { pop_vipmember_buyimage, showVipModal: true, visible: false });
+          } else {
+            if (res.data.code == 3) {
+              let max_quantity = res.data.max_quantity || '';
+              (max_quantity > 0) && that.setData({ number: that.data.number })
+              wx.showToast({
+                title: res.data.msg,
+                icon: 'none',
+                duration: 2000
+              })
+            } else if (res.data.code == 4) {
+              that.setData({ needAuth: true })
+              that.triggerEvent("authModal", true);
+            } else if (res.data.code == 6 || res.data.code == 7) {
+              let max_quantity = res.data.max_quantity || '';
+              (max_quantity > 0) && that.setData({ number: that.data.number })
+              var msg = res.data.msg;
+              wx.showToast({
+                title: msg,
+                icon: 'none',
+                duration: 2000
+              })
+            } else {
+              that.triggerEvent("changeCartNum", res.data.total);
+              that.setData({ number: res.data.cur_count })
+              wx.showToast({
+                title: "已加入购物车",
+                image: "../../images/addShopCart.png"
+              })
+              status.indexListCarCount(goods_id, res.data.cur_count);
+            }
+          }
+        })
+      } else {
+        console.log('goods_start_count',goods_start_count)
+        console.log('number',number)
+        if(number<=goods_start_count) {
+          quantity = number;
+        }
+        
+        app.util.request({
+          url: 'entry/wxapp/user',
+          data: {
+            controller: 'car.reduce_car_goods',
+            token: token,
+            goods_id: goods_id,
+            community_id: community_id,
+            quantity,
+            sku_str: '',
+            buy_type: 'dan',
+            pin_id: 0,
+            is_just_addcar: 1
+          },
+          dataType: 'json',
+          method: 'POST',
+          success: function (res) {
+            if (res.data.code == 3) {
+              wx.showToast({
+                title: res.data.msg,
+                icon: 'none',
+                duration: 2000
+              })
+            } else if (res.data.code == 4) {
+              if (that.data.needAuth) {
+                that.setData({ needAuth: true })
+                that.triggerEvent("authModal", true);
+                return;
+              }
+            } else {
+              that.triggerEvent("changeCartNum", res.data.total);
+              that.setData({ number: res.data.cur_count })
+              status.indexListCarCount(goods_id, res.data.cur_count);
+            }
+          }
+        })
+      }
+      
+    },
+    goDetails: function(t){
+      if(!this.data.canClick) {
+        return;
+      }
+      let that = this;
+      this.setData({
+        canClick: false
+      });
+      let goodsid = t.currentTarget.dataset.id || '';
+      let img = t.currentTarget.dataset.img || '';
+      let url = '/lionfish_comshop/pages/goods/goodsDetail?id='+goodsid;
+      util.getStorageImage(img).then(res=>{
+        wx.navigateTo({
+          url,
+          complete: function () {
+            setTimeout(function () {
+              that.setData({
+                canClick: true
+              });
+            }, 400);
+          }
+        })
+      }).catch(err=>{
+        wx.navigateTo({
+          url,
+          complete: function () {
+            setTimeout(function () {
+              that.setData({
+                canClick: true
+              });
+            }, 400);
+          }
+        })
+      });
+    }
+  }
+});

+ 81 - 0
前端-20230727/lionfish_comshop/components/button/index.js

@@ -0,0 +1,81 @@
+Component({
+  externalClasses: ["i-class"],
+  properties: {
+    type: {
+      type: String,
+      value: ""
+    },
+    inline: {
+      type: Boolean,
+      value: false
+    },
+    size: {
+      type: String,
+      value: ""
+    },
+    shape: {
+      type: String,
+      value: "square"
+    },
+    disabled: {
+      type: Boolean,
+      value: false
+    },
+    loading: {
+      type: Boolean,
+      value: false
+    },
+    long: {
+      type: Boolean,
+      value: false
+    },
+    openType: String,
+    appParameter: String,
+    hoverStopPropagation: Boolean,
+    hoverStartTime: {
+      type: Number,
+      value: 20
+    },
+    hoverStayTime: {
+      type: Number,
+      value: 140
+    },
+    lang: {
+      type: String,
+      value: "en"
+    },
+    sessionFrom: {
+      type: String,
+      value: ""
+    },
+    sendMessageTitle: String,
+    sendMessagePath: String,
+    sendMessageImg: String,
+    showMessageCard: Boolean,
+    styleStr: {
+      type: String,
+      value: ""
+    }
+  },
+  methods: {
+    handleTap: function () {
+      return !this.data.disabled && (!this.data.loading && void this.triggerEvent("click"));
+    },
+    bindgetuserinfo: function () {
+      var e = (arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}).detail, t = void 0 === e ? {} : e;
+      this.triggerEvent("getuserinfo", t);
+    },
+    bindcontact: function () {
+      var e = (arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}).detail, t = void 0 === e ? {} : e;
+      this.triggerEvent("contact", t);
+    },
+    bindgetphonenumber: function () {
+      var e = (arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}).detail, t = void 0 === e ? {} : e;
+      this.triggerEvent("getphonenumber", t);
+    },
+    binderror: function () {
+      var e = (arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}).detail, t = void 0 === e ? {} : e;
+      this.triggerEvent("error", t);
+    }
+  }
+});

+ 4 - 0
前端-20230727/lionfish_comshop/components/button/index.json

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

+ 6 - 0
前端-20230727/lionfish_comshop/components/button/index.wxml

@@ -0,0 +1,6 @@
+<button appParameter="{{appParameter}}" bindcontact="bindcontact" binderror="binderror" bindgetphonenumber="bindgetphonenumber" bindgetuserinfo="bindgetuserinfo" catchtap="handleTap" class="i-class i-btn {{long?'i-btn-long':''}} {{'i-btn-'+size}} {{'i-btn-'+type}} {{'i-btn-'+shape}} {{loading?'i-btn-loading':''}} {{disabled?'i-btn-disabled':''}} {{inline?'i-btn-inline':''}}"
+  hoverClass="i-btn-hover" hoverStartTime="{{hoverStartTime}}" hoverStayTime="{{hoverStayTime}}" hoverStopPropagation="{{hoverStopPropagation}}" openType="{{openType}}" plain="true" sendMessageImg="{{sendMessageImg}}" sendMessagePath="{{sendMessagePath}}"
+  sendMessageTitle="{{sendMessageTitle}}" sessionFrom="{{sessionFrom}}" showMessageCard="{{showMessageCard}}" style="{{styleStr}}">
+  <view class="i-btn-loading-inner" wx:if="{{loading}}"></view>
+  <slot></slot>
+</button>

+ 127 - 0
前端-20230727/lionfish_comshop/components/button/index.wxss

@@ -0,0 +1,127 @@
+.i-btn {
+  text-align: center;
+  vertical-align: middle;
+  touch-action: manipulation;
+  cursor: pointer;
+  background-image: none;
+  white-space: nowrap;
+  user-select: none;
+  font-size: 28rpx;
+  border-radius: 4rpx;
+  border: 0 !important;
+  position: relative;
+  text-decoration: none;
+  height: 88rpx;
+  line-height: 88rpx;
+  background: #f7f7f7;
+  color: #495060;
+  margin: 20rpx;
+}
+
+.i-btn-hover {
+  opacity: 0.7;
+}
+
+.i-btn-long {
+  border-radius: 0;
+  margin: 0;
+  box-shadow: none;
+}
+
+.i-btn-large {
+  height: 96rpx;
+  line-height: 96rpx;
+}
+
+.i-btn-small {
+  height: 80rpx;
+  line-height: 80rpx;
+}
+
+.i-btn-primary {
+  color: #fff;
+  background: #2d8cf0;
+}
+
+.i-btn-ghost {
+  background: #fff;
+  color: #495060;
+}
+
+.i-btn-success {
+  color: #fff;
+  background: #19be6b;
+}
+
+.i-btn-warning {
+  color: #fff;
+  background: #f90;
+}
+
+.i-btn-error {
+  color: #fff;
+  background: #ed3f14;
+}
+
+.i-btn-info {
+  color: #fff;
+  background: #2db7f5;
+}
+
+.i-btn-circle {
+  border-radius: 88rpx;
+}
+
+.i-btn-large.i-btn-circle {
+  border-radius: 96rpx;
+}
+
+.i-btn-small.i-btn-circle {
+  border-radius: 80rpx;
+}
+
+.i-btn-loading {
+  opacity: 0.6;
+}
+
+.i-btn-loading-inner {
+  display: inline-block;
+  margin-right: 24rpx;
+  vertical-align: middle;
+  width: 28rpx;
+  height: 28rpx;
+  background: 0 0;
+  border: 4rpx solid #e9eaec;
+  border-color: #e9eaec #e9eaec #e9eaec #2d8cf0;
+  border-radius: 50%;
+  animation: btn-spin 0.6s linear;
+  animation-iteration-count: infinite;
+}
+
+.i-btn-disabled {
+  opacity: 0.9;
+}
+
+.i-btn-inline {
+  display: inline-block;
+}
+
+@-webkit-keyframes btn-spin {
+  0% {
+    transform: rotate(0);
+  }
+
+  100% {
+    transform: rotate(360deg);
+  }
+}
+
+@keyframes btn-spin {
+  0% {
+    transform: rotate(0);
+  }
+
+  100% {
+    transform: rotate(360deg);
+  }
+}

+ 7 - 0
前端-20230727/lionfish_comshop/components/card/index.js

@@ -0,0 +1,7 @@
+// lionfish_comshop/components/cart/index.js
+Component({
+  options: {
+    multipleSlots: true
+  },
+  externalClasses: ["i-class", "i-card-header", "i-card-body", "i-card-footer"]
+})

+ 4 - 0
前端-20230727/lionfish_comshop/components/card/index.json

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

+ 11 - 0
前端-20230727/lionfish_comshop/components/card/index.wxml

@@ -0,0 +1,11 @@
+<view class="i-class i-card">
+  <view class="i-card-header">
+    <slot name="header"></slot>
+  </view>
+  <view class="i-card-body">
+    <slot name="content"></slot>
+  </view>
+  <view class="i-card-footer">
+    <slot name="footer"></slot>
+  </view>
+</view>

+ 9 - 0
前端-20230727/lionfish_comshop/components/card/index.wxss

@@ -0,0 +1,9 @@
+.i-card {
+  width: 710rpx;
+  border-radius: 20rpx;
+  background: #fff;
+  box-shadow: 0 0 40rpx 0 rgba(0, 0, 0, 0.05);
+  display: flex;
+  flex-direction: column;
+  overflow: hidden;
+}

+ 21 - 0
前端-20230727/lionfish_comshop/components/cartBtn/index.js

@@ -0,0 +1,21 @@
+// lionfish_comshop/components/fixed-cart/index.js
+Component({
+  externalClasses: ["i-class"],
+  properties: {
+    cartNum: {
+      type: Number,
+      default: 0
+    }
+  },
+
+  /**
+   * 组件的方法列表
+   */
+  methods: {
+    goCart: function () {
+      wx.switchTab({
+        url: '/lionfish_comshop/pages/order/shopCart',
+      })
+    }
+  }
+})

+ 4 - 0
前端-20230727/lionfish_comshop/components/cartBtn/index.json

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

+ 5 - 0
前端-20230727/lionfish_comshop/components/cartBtn/index.wxml

@@ -0,0 +1,5 @@
+<view class="cart i-class" bindtap="goCart">
+  <image class="img" src="../../images/icon-tab-shop.png"></image>
+  <text>购物车</text>
+  <text class="num" wx:if="{{cartNum>0}}">{{cartNum}}</text>
+</view>

+ 36 - 0
前端-20230727/lionfish_comshop/components/cartBtn/index.wxss

@@ -0,0 +1,36 @@
+.cart {
+  position: fixed;
+  left: 30rpx;
+  bottom: 80rpx;
+  width: 120rpx;
+  height: 120rpx;
+  border-radius: 50%;
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+  align-items: center;
+  line-height: 1;
+  font-size: 24rpx;
+  background: linear-gradient(45deg, #fdd225 0%, #feb600 100%);
+  color: #000;
+  z-index: 100;
+}
+
+.cart .img {
+  width: 54rpx;
+  height: 54rpx;
+}
+
+.cart .num {
+  color: #fff;
+  background-color: #ff5041;
+  position: absolute;
+  top: -15rpx;
+  right: -15rpx;
+  min-width: 54rpx;
+  height: 54rpx;
+  line-height: 54rpx;
+  border-radius: 54rpx;
+  text-align: center;
+  font-size: 26rpx;
+}

+ 40 - 0
前端-20230727/lionfish_comshop/components/cashon_delivery/index.js

@@ -0,0 +1,40 @@
+// lionfish_comshop/components/cashon_delivery/index.js
+Component({
+  /**
+   * 组件的属性列表
+   */
+  properties: {
+    paymentCode: {
+      type: String,
+      value: ""
+    },
+    codeImg: {
+      type: String,
+      value: ""
+    }
+  },
+
+  /**
+   * 组件的初始数据
+   */
+  data: {
+    showTipDialog: false,
+    showImgDialog: false
+  },
+
+  /**
+   * 组件的方法列表
+   */
+  methods: {
+    handleTipDialog() {
+      this.setData({
+        showTipDialog: !this.data.showTipDialog
+      })
+    },
+    handleImgDialog() {
+      this.setData({
+        showImgDialog: !this.data.showImgDialog
+      })
+    }
+  }
+})

+ 6 - 0
前端-20230727/lionfish_comshop/components/cashon_delivery/index.json

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

+ 25 - 0
前端-20230727/lionfish_comshop/components/cashon_delivery/index.wxml

@@ -0,0 +1,25 @@
+<view class="i-flex" wx:if="{{paymentCode=='cashon_delivery'}}">
+  <view class="red u-font-24 u-m-r-10" wx:if="{{codeImg}}" bindtap="handleImgDialog">出示收款码</view>
+  <view class="red u-font-24 u-m-r-10" wx:else>暂无收款码,请线下收款</view>
+  <text class="iconfont icon-shuoming text-dark fsz-28" bindtap="handleTipDialog"></text>
+</view>
+
+<i-modal scrollUp="{{false}}" visible="{{showTipDialog}}">
+  <view class="rule-modal bg-f w90p rounded">
+    <view class="fsz-30 weight border-bottom text-center py10">收款码</view>
+		<view class="p15 border-bottom fsz-28 line-height">
+			该订单为 “货到付款” 支付方式,用户订单签收的时候请出示“收款码”进行收款,或者其他方式收款,提前沟通确认,防止订单出错。
+		</view>
+    <view class="fsz-30 bule text-center py10" bindtap="handleTipDialog">知道了</view>
+  </view>
+</i-modal>
+
+<i-modal scrollUp="{{false}}" visible="{{showImgDialog}}">
+  <view class="rule-modal bg-f w90p rounded">
+    <view class="fsz-30 weight border-bottom text-center py10">收款码</view>
+		<view class="p15 border-bottom fsz-28 line-height text-center">
+			<image src="{{codeImg}}" style="width: 480rpx;height:480rpx;"></image>
+		</view>
+    <view class="fsz-30 bule text-center py10" bindtap="handleImgDialog">关闭</view>
+  </view>
+</i-modal>

+ 2 - 0
前端-20230727/lionfish_comshop/components/cashon_delivery/index.wxss

@@ -0,0 +1,2 @@
+@import "../../../common.wxss";
+@import "../../../icon.wxss";

+ 85 - 0
前端-20230727/lionfish_comshop/components/changeCommunity/index.js

@@ -0,0 +1,85 @@
+Component({
+  properties: {
+    changeCommunity: {
+      type: Object,
+      value: {}
+    },
+    community: {
+      type: Object,
+      value: {}
+    },
+    visible: {
+      type: Boolean,
+      value: false
+    },
+    canChange: {
+      type: Boolean,
+      value: true
+    },
+    groupInfo: {
+      type: Object,
+      value: {
+        group_name: '社区',
+        owner_name: '团长'
+      }
+    },
+    cancelFn: {
+      type: Boolean,
+      value: false
+    }
+  },
+
+  attached() {
+    this.countDistance()
+  },
+
+  methods: {
+    countDistance: function () {
+      let that = this;
+      wx.getLocation({
+        type: 'wgs84',
+        success(res) {
+          let {changeCommunity, community} = that.data;
+          const latitude = res.latitude;
+          const longitude = res.longitude;
+          let lat1 = community.lat || '';
+          let lon1 = community.lon || '';
+          let lat2 = changeCommunity.lat || '';
+          let lon2 = community.lon || '';
+          if(lat1 && lon1 && lat2 && lon2) {
+            let distance1 = that.getDistance(latitude, longitude, lat1, lon1);
+            let distance2 = that.getDistance(latitude, longitude, lat2, lon2);
+            community.distance = "距您"+distance1.toFixed(2)+"km";
+            changeCommunity.distance = "距您"+distance2.toFixed(2)+"km";
+            that.setData({ community, changeCommunity })
+          }
+        }
+      })
+    },
+    getDistance: function (lat1, lng1, lat2, lng2) {
+      var radLat1 = lat1 * Math.PI / 180.0;
+      var radLat2 = lat2 * Math.PI / 180.0;
+      var a = radLat1 - radLat2;
+      var b = lng1 * Math.PI / 180.0 - lng2 * Math.PI / 180.0;
+      var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) +
+        Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
+      s = s * 6378.137;
+      s = Math.round(s * 10000) / 10000;
+      return s;
+    },
+    switchCommunity: function (e) {
+      let type = e.currentTarget.dataset.type;
+      if (type == 0 || !this.data.canChange) {
+        this.closeModal();
+      } else {
+        this.data.canChange && this.triggerEvent('changeComunity'), getApp().globalData.goodsListCarCount = [];
+      }
+    },
+    closeModal: function () {
+      this.data.cancelFn && this.triggerEvent('noChange');
+      this.setData({
+        visible: false
+      })
+    }
+  }
+})

+ 6 - 0
前端-20230727/lionfish_comshop/components/changeCommunity/index.json

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

+ 39 - 0
前端-20230727/lionfish_comshop/components/changeCommunity/index.wxml

@@ -0,0 +1,39 @@
+  <!-- 小区确认begin -->
+  <i-modal scrollUp="{{false}}" visible="{{visible&&canChange}}">
+    <view class="community-box">
+      <view class="community-content">
+        <view class="community-content-title">
+          分享{{groupInfo.owner_name}}与当前{{groupInfo.owner_name}}不一致,<block wx:if="{{canChange}}">请选择</block><block wx:else>因为设置无法切换{{groupInfo.owner_name}},所以仍绑定之前{{groupInfo.owner_name}}。</block>
+        </view>
+        <view class="community-content-tip">
+          <view class="item" bindtap="switchCommunity" data-type="1">
+            <view class="item-l">
+              <image class="img" src="{{changeCommunity.disUserHeadImg}}"></image>
+              <view class="type">分享{{groupInfo.owner_name}}</view>
+            </view>
+            <view class="item-r">
+              <view class="name">{{changeCommunity.communityName}} <text wx:if="{{changeCommunity.distance}}" class="distance">{{changeCommunity.distance}}</text></view>
+              <view class="address">{{changeCommunity.fullAddress}}</view>
+            </view>
+            <view class="item-ft">
+              <image mode="widthFix" class="img" src="../../images/community-right-arrow.png"></image>
+            </view>
+          </view>
+          <view class="item" bindtap="switchCommunity" data-type="0" wx:if="{{community&&community.communityName}}">
+            <view class="item-l">
+              <image class="img" src="{{community.disUserHeadImg}}"></image>
+              <view class="type green">原{{groupInfo.owner_name}}</view>
+            </view>
+            <view class="item-r">
+              <view class="name">{{community.communityName}} <text class="distance" wx:if="{{community.distance}}">{{community.distance}}</text></view>
+              <view class="address">{{community.fullAddress}}</view>
+            </view>
+            <view class="item-ft">
+              <image mode="widthFix" class="img" src="../../images/community-right-arrow.png"></image>
+            </view>
+          </view>
+        </view>
+      </view>
+    </view>
+  </i-modal>
+  <!-- 小区确认end -->

+ 112 - 0
前端-20230727/lionfish_comshop/components/changeCommunity/index.wxss

@@ -0,0 +1,112 @@
+.community-box {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+}
+
+.community-content {
+  width: 620rpx;
+  background: #fff;
+  border-radius: 10rpx;
+  position: relative;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: flex-start;
+  margin: 30px auto;
+  overflow: hidden;
+  z-index: 1001;
+}
+
+.community-content-title {
+  position: relative;
+  font-size: 30rpx;
+  width: 100%;
+  box-sizing: border-box;
+  text-align: center;
+  padding: 20rpx;
+}
+
+.community-content-change {
+  color: #44abf7;
+  margin-left: 15rpx;
+}
+
+.community-content-tip {
+  color: #666;
+  font-size: 32rpx;
+  line-height: 1.6;
+  padding: 20rpx;
+}
+
+.community-content-tip .item {
+  border: 1rpx solid #ccc;
+  padding: 10rpx;
+  margin-bottom: 20rpx;
+  border-radius: 10rpx;
+}
+
+.community-content-tip .item-l {
+  min-width: 110rpx;
+  max-width: 150rpx;
+  text-align: center;
+}
+
+.community-content-tip .item-l .type {
+  font-size: 24rpx;
+  background-color: #f75451;
+  color: #fff;
+  border-radius: 3px;
+  padding: 3rpx 5rpx;
+}
+
+.community-content-tip .item-l .type.green {
+  background-color: green;
+}
+
+.community-content-tip .item-r {
+  flex: 1;
+  margin-left: 5px;
+}
+
+.community-content-tip .item-ft {
+  width: 20rpx;
+}
+
+.community-content-tip .item-ft .img {
+  width: 20rpx;
+}
+
+.community-content-tip .item {
+  display: flex;
+  align-items: center;
+}
+
+.community-content-tip .img {
+  width: 80rpx;
+  height: 80rpx;
+  border-radius: 50%;
+}
+
+.community-content-tip .name {
+  font-weight: bold;
+  color: #333;
+}
+
+.community-content-tip .address {
+  color: #999;
+  font-size: 28rpx;
+}
+
+.community-box .closeBtn {
+  width: 80rpx;
+  height: 80rpx;
+  margin: 0 auto;
+}
+
+.distance {
+  font-size: 24rpx;
+  color: #f75451;
+  font-weight: normal;
+}

+ 105 - 0
前端-20230727/lionfish_comshop/components/chooseImage/index.js

@@ -0,0 +1,105 @@
+function e(e, t, a) {
+  return t in e ? Object.defineProperty(e, t, {
+    value: a,
+    enumerable: !0,
+    configurable: !0,
+    writable: !0
+  }) : e[t] = a, e;
+}
+
+var t = [],
+  a = 0,
+  r = [];
+
+var app = getApp();
+
+Component({
+  properties: {
+    imgMax: {
+      type: Number,
+      value: 0
+    },
+    token: String,
+    key: {
+      type: String,
+      value: "wx-upload"
+    }
+  },
+  data: {
+    imgGroup: [],
+    progressList: []
+  },
+  methods: {
+    addImg: function() {
+      var s = this,
+        i = this.data.imgGroup;
+      wx.chooseImage({
+        count: this.data.imgMax - i.length,
+        success: function(n) {
+          s.triggerEvent("on-chooseImage", {key: s.data.key}), (i = i.concat(n.tempFilePaths)).length > s.data.imgMax && i.splice(s.data.imgMax),
+            s.setData({
+              imgGroup: i
+            });
+          var o = n.tempFilePaths.length;
+          a = i.length;
+          for (var g = 0; g < n.tempFilePaths.length; g++) ! function(i) {
+            var g = n.tempFilePaths[i].split(".")[n.tempFilePaths[i].split(".").length - 1],
+              l = new Date().getTime(),
+              p = Math.round(1e6 * Math.random());
+            r[i + a - o] = wx.uploadFile({
+              url: app.util.url('entry/wxapp/index', {
+                'm': 'lionfish_comshop',
+                'controller': 'goods.doPageUpload'
+              }),
+              filePath: n.tempFilePaths[i],
+              name: "upfile",
+              header: {
+                "Content-Type": "multipart/form-data"
+              },
+              formData: {
+                token: s.data.token,
+                key: s.data.key + "-" + l + "-" + p + "." + g
+              },
+              success: function(r) {
+                t[i + a - o] = JSON.parse(r.data).image_o, s.setData(e({}, "progressList[" + (i + a - o) + "]", 100)),
+                  s.triggerEvent("on-changeImage", {
+                    value: t,
+                    len: a,
+                    key: s.data.key
+                  });
+              }
+            }), r[i + a - o].onProgressUpdate(function(t) {
+              var r = t.progress;
+              s.setData(e({}, "progressList[" + (i + a - o) + "]", r));
+            });
+          }(g);
+        }
+      });
+    },
+    remove: function(e) {
+      var s = e.currentTarget.dataset.idx,
+        i = this.data.imgGroup,
+        n = this.data.progressList;
+      n[s] < 100 && r[s].abort(), i.splice(s, 1), r.splice(s, 1), n.splice(s, 1), t.splice(s, 1),
+        a = i.length, this.setData({
+          imgGroup: i,
+          progressList: n
+        }), this.triggerEvent("on-changeImage", {
+          value: t,
+          len: a,
+          key: this.data.key
+        });
+    },
+    bigImg: function(e) {
+      var t = e.currentTarget.dataset.src,
+        a = e.currentTarget.dataset.list;
+      wx.previewImage({
+        current: t,
+        urls: a
+      });
+    }
+  },
+  detached: function() {
+    console.log("detached"), t = [], a = 0, r = [];
+  }
+});

+ 4 - 0
前端-20230727/lionfish_comshop/components/chooseImage/index.json

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

+ 15 - 0
前端-20230727/lionfish_comshop/components/chooseImage/index.wxml

@@ -0,0 +1,15 @@
+<view class="img-group">
+  <view class="img-item" wx:if="{{imgGroup.length}}" wx:for="{{imgGroup}}" wx:key="id">
+    <view bindtap="remove" class="close" data-idx="{{index}}">
+      <image class='closeImg' src="../../images/img-close.png"></image>
+    </view>
+    <image class="img" bindtap="bigImg" data-list="{{imgGroup}}" data-src="{{item}}" mode="aspectFill" src="{{item}}"></image>
+    <view class="progress {{progressList[index]===100?'hide-progress':''}}">
+      <text class="span" style="width: {{progressList[index]}}%;"></text>
+    </view>
+  </view>
+  <view bindtap="addImg" class="img-item img-add" wx:if="{{imgGroup.length<imgMax}}">
+    <image class="cameraImg" src="../../images/icon-camera.png"></image>
+    <text>{{imgGroup.length?imgGroup.length+'/'+imgMax:'上传图片'}}</text>
+  </view>
+</view>

+ 81 - 0
前端-20230727/lionfish_comshop/components/chooseImage/index.wxss

@@ -0,0 +1,81 @@
+.img-group {
+  display: flex;
+  flex-wrap: wrap;
+  font-size: 24rpx;
+  margin-top: 30rpx;
+}
+
+.img-group .img-item {
+  margin: 0 6rpx;
+  width: 150rpx;
+  height: 150rpx;
+  position: relative;
+  box-sizing: border-box;
+}
+
+.img-group .img-item .img {
+  width: 150rpx;
+  height: 150rpx;
+}
+
+.img-group .img-item .progress {
+  position: absolute;
+  left: 16rpx;
+  bottom: 20rpx;
+  width: 120rpx;
+  height: 16rpx;
+  border-radius: 20rpx;
+  border: 2rpx solid #ddd;
+  display: flex;
+  align-items: center;
+}
+
+.img-group .img-item .progress .span {
+  height: 8rpx;
+  width: 0;
+  max-width: 112rpx;
+  border-radius: 12rpx;
+  position: absolute;
+  left: 4rpx;
+  top: 4rpx;
+  background: #f5f5f5;
+}
+
+.img-group .img-item .hide-progress {
+  opacity: 0;
+}
+
+.img-group .img-item .close {
+  width: 32rpx;
+  height: 32rpx;
+  position: absolute;
+  right: -8rpx;
+  top: -8rpx;
+  z-index: 1;
+}
+
+.img-group .img-item .closeImg {
+  height: 100%;
+  width: 100%;
+  font-size: 40rpx;
+  color: #a0a0a0;
+}
+
+.img-group .img-add {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  flex-direction: column;
+  border: 2rpx dashed #dedede;
+  color: #bcbcbc;
+}
+
+.img-group .img-add .cameraImg {
+  width: 44rpx;
+  height: 44rpx;
+  color: #cdcdcd;
+  margin-bottom: 8rpx;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+}

+ 43 - 0
前端-20230727/lionfish_comshop/components/comming-spu-disabled/index.js

@@ -0,0 +1,43 @@
+var e = require("../../utils/timeFormat");
+
+Component({
+  properties: {
+    spuItem: {
+      type: Object,
+      value: {
+        spuImage: "",
+        spuName: "",
+        endTime: "",
+        beginTime: "",
+        actPrice: [],
+        marketPrice: [],
+        desc: "新鲜自然 唇齿留香",
+        surplusNum: 0,
+        soldNum: 0,
+        limitOrderNum: 0,
+        limitMemberNum: 0,
+        serverTime: 0,
+        skuImage: ""
+      },
+      observer: function (m) {
+        if (m) {
+          var i = (0, e.formatTime)(new Date(1 * m.endTime)), r = (0, e.getBeginTime)(m.beginTime, m.serverTime), t = (0,
+            e.formatNumber)(i.month) + "月" + (0, e.formatNumber)(i.day) + "日 " + (0, e.formatNumber)(i.hour) + ":" + (0,
+              e.formatNumber)(i.minute);
+          this.setData({
+            formatBeginTime: r,
+            endTime: t
+          });
+        }
+      }
+    },
+    isPast: {
+      type: Boolean,
+      value: false
+    }
+  },
+  data: {
+    formatBeginTime: "",
+    endTime: ""
+  }
+});

+ 7 - 0
前端-20230727/lionfish_comshop/components/comming-spu-disabled/index.json

@@ -0,0 +1,7 @@
+{
+  "component": true,
+  "usingComponents": {
+    "i-img": "../img/index",
+    "i-router-link": "../router-link/router-link"
+  }
+}

+ 20 - 0
前端-20230727/lionfish_comshop/components/comming-spu-disabled/index.wxml

@@ -0,0 +1,20 @@
+<navigator class="comming-spu-content" url="/lionfish_comshop/pages/goods/goodsDetail?id={{spuItem.actId}}">
+  <i-img class="spu-img-content" defaultImage="../../images/index-comming-goods-bitmap.png" height="120" iClass="spu-img" loadImage="{{spuItem.skuImage}}" width="120"></i-img>
+  <view class="spu-name">
+    <text class='span'>{{spuItem.spuName}}</text>
+  </view>
+  <view class="spu-desc" wx:if="{{isPast}}">结束时间 {{endTime}}</view>
+  <view class="spu-desc" wx:else>{{formatBeginTime}}{{spuItem.limitOrderNum>-1||spuItem.limitMemberNum>-1?' | 限购':''}}</view>
+  <view class="spu-price">
+    <view class="sale-price">
+      <text class='span'>¥{{spuItem.actPrice[0]}}</text>.{{spuItem.actPrice[1]}}
+    </view>
+    <view class="market-price">¥{{spuItem.marketPrice[0]}}.{{spuItem.marketPrice[1]}}</view>
+  </view>
+  <view class="mask" wx:if="{{isPast}}">
+    <view class="toast">已结束</view>
+  </view>
+  <view class="icon-shop" wx:if="{{isPast}}">
+    <image class='img' src="../../images/icon-add-shopCart-disabled.png"></image>
+  </view>
+</navigator>

+ 113 - 0
前端-20230727/lionfish_comshop/components/comming-spu-disabled/index.wxss

@@ -0,0 +1,113 @@
+.icon-shop {
+  position: absolute;
+  right: 20rpx;
+  bottom: 20rpx;
+  width: 54rpx;
+  height: 54rpx;
+}
+
+.icon-shop .img {
+  width: 54rpx;
+  height: 54rpx;
+}
+
+.mask {
+  width: 348rpx;
+  height: 240rpx;
+  position: absolute;
+  left: 0;
+  top: 30rpx;
+  background: rgba(255, 255, 255, 0.5);
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+
+.mask .toast {
+  width: 196rpx;
+  height: 60rpx;
+  background: rgba(0, 0, 0, 0.5);
+  border-radius: 10rpx;
+  text-align: center;
+  line-height: 60rpx;
+  color: #fff;
+  font-weight: bold;
+  font-size: 28rpx;
+}
+
+.spu-img {
+  width: 240rpx;
+  height: 240rpx;
+  border-radius: 10rpx;
+}
+
+.comming-spu-content {
+  width: 348rpx;
+  height: 452rpx;
+  border-radius: 20rpx;
+  background: #fff;
+  box-sizing: border-box;
+  padding: 30rpx 26rpx 30rpx 26rpx;
+  box-shadow: 0 0 40rpx rgba(0, 0, 0, 0.05);
+  position: relative;
+}
+
+.comming-spu-content .spu-img-content {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  width: 296rpx;
+  height: 240rpx;
+  margin: 0 auto 34rpx;
+}
+
+.comming-spu-content .spu-name {
+  font-size: 28rpx;
+  line-height: 28rpx;
+  height: 36rpx;
+  color: #444;
+  margin-bottom: 16rpx;
+  font-weight: 500;
+  position: relative;
+}
+
+.comming-spu-content .spu-name .span {
+  width: 100%;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  position: absolute;
+  left: 0;
+  top: -4rpx;
+  line-height: 36rpx;
+}
+
+.comming-spu-content .spu-desc {
+  color: #ffab20;
+  font-size: 24rpx;
+  line-height: 24rpx;
+  margin-bottom: 14rpx;
+}
+
+.comming-spu-content .spu-price {
+  display: flex;
+  align-items: flex-end;
+  font-size: 20rpx;
+}
+
+.comming-spu-content .spu-price .sale-price {
+  color: #ff5344;
+  margin-right: 8rpx;
+}
+
+.comming-spu-content .spu-price .sale-price .span {
+  font-size: 40rpx;
+  line-height: 40rpx;
+  margin-left: 4rpx;
+  font-weight: 500;
+}
+
+.comming-spu-content .spu-price .market-price {
+  text-decoration: line-through;
+  color: #999;
+}

+ 66 - 0
前端-20230727/lionfish_comshop/components/community-item/index.js

@@ -0,0 +1,66 @@
+var utils = require("../../utils/index");
+var location = require("../../utils/Location");
+var app = getApp();
+
+Component({
+  /**
+   * 组件的属性列表
+   */
+  properties: {
+    item: {
+      type: Object,
+      value: {
+        rest: 0
+      }
+    },
+    city: Object,
+    isOld: {
+      type: Boolean,
+      value: false
+    },
+    groupInfo: {
+      type: Object,
+      value: {
+        group_name: '社区',
+        owner_name: '团长'
+      }
+    },
+    hiddenDetails: {
+      type: Number,
+      value: 0
+    },
+    skin: {
+      type: Object
+    }
+  },
+
+  /**
+   * 组件的方法列表
+   */
+  methods: {
+    chooseCommunity: function (event) {
+      var community = event.currentTarget.dataset.val;
+      if ("火星社区" !== community.communityName || community.communityId) {
+        var disUserHeadImg = community.disUserHeadImg || community.headImg || "", 
+          disUserName = community.disUserName || community.realName || "", 
+          data = {
+            communityId: community.communityId,
+            communityName: community.communityName,
+            disUserName: disUserName,
+            disUserHeadImg: disUserHeadImg,
+            communityAddress: community.communityAddress,
+            distance: community.distance,
+            fullAddress: community.fullAddress || community.communityAddress,
+            lat: community.lat,
+            lon: community.lon
+          }, 
+          city = this.data.city;
+        (0, utils.changeCommunity)(data, city);
+      } else {
+        location.openSetting(app).then(function () {
+          location.checkGPS(app, function () { });
+        });
+      }
+    }
+  }
+})

+ 4 - 0
前端-20230727/lionfish_comshop/components/community-item/index.json

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

+ 18 - 0
前端-20230727/lionfish_comshop/components/community-item/index.wxml

@@ -0,0 +1,18 @@
+<view bindtap="chooseCommunity" class="community-item i-class" data-val="{{item}}">
+  <view class="group-img">
+    <image class="group-head" src="{{item.headImg||item.disUserHeadImg}}" wx:if="{{item.headImg||item.disUserHeadImg}}"></image>
+    <image class="group-head" src="../../images/head-bitmap.png" wx:else></image>
+    <text class="rest" wx:if="{{item.rest==1}}">休息中</text>
+  </view>
+  <view class="item-center">
+    <view class="community-title">
+      <text class='span'>{{item.communityName}}</text>
+      <text class='em' wx:if="{{!isOld&&item.distance}}" style="color:{{skin.color}}">距离{{item.distance}}</text>
+    </view>
+    <view class="group-master">
+      {{groupInfo.owner_name}}:{{item.realName||item.disUserName}}
+      <image class="right-arrow" src="../../images/community-right-arrow.png"></image>
+    </view>
+    <view class="community-address" wx:if="{{hiddenDetails==0}}">{{item.fullAddress||item.communityAddress}}</view>
+  </view>
+</view>

+ 86 - 0
前端-20230727/lionfish_comshop/components/community-item/index.wxss

@@ -0,0 +1,86 @@
+.community-item {
+  box-sizing: border-box;
+  display: flex;
+  padding: 60rpx 30rpx;
+}
+
+.community-item .group-head {
+  width: 80rpx;
+  height: 80rpx;
+  border-radius: 80rpx;
+}
+
+.community-item .community-title {
+  font-size: 32rpx;
+  line-height: 32rpx;
+  height: 32rpx;
+  width: 520rpx;
+  margin-bottom: 20rpx;
+  display: flex;
+  justify-content: space-between;
+  align-items: flex-end;
+}
+
+.community-item .community-title .span {
+  color: #444;
+  font-weight: 500;
+}
+
+.community-item .community-title .em {
+  color: #ff5344;
+  font-size: 26rpx;
+  line-height: 26rpx;
+  white-space: nowrap;
+}
+
+.community-item .community-address {
+  font-size: 26rpx;
+  line-height: 34rpx;
+  color: #666;
+  width: 520rpx;
+  display: -webkit-box;
+  -webkit-box-orient: vertical;
+  -webkit-line-clamp: 2;
+  overflow: hidden;
+  text-overflow: initial;
+  white-space: normal;
+  /* margin-bottom: 6rpx; */
+}
+
+.community-item .group-master {
+  width: 560rpx;
+  font-size: 26rpx;
+  line-height: 26rpx;
+  color: #aaa;
+  position: relative;
+  margin-bottom: 6rpx;
+}
+
+.community-item .group-master .right-arrow {
+  position: absolute;
+  right: 0;
+  top: 0;
+  width: 14rpx;
+  height: 28rpx;
+}
+
+.group-img {
+  position: relative;
+  width: 80rpx;
+  height: 80rpx;
+  border-radius: 80rpx;
+  margin-right: 20rpx;
+  overflow: hidden;
+}
+
+.rest {
+  position: absolute;
+  left: 0;
+  bottom: 8rpx;
+  right: 0;
+  font-size: 18rpx;
+  background: rgba(255, 83, 68, 0.8);
+  text-align: center;
+  color: #fff;
+  padding: 2rpx 0 3rpx;
+}

+ 81 - 0
前端-20230727/lionfish_comshop/components/count-down/index.js

@@ -0,0 +1,81 @@
+var t = require("../../utils/timeFormat");
+
+Component({
+  properties: {
+    target: {
+      type: String,
+      observer: function(t) {
+        this.init(t);
+      }
+    },
+    showDay: Boolean,
+    beginTime: String,
+    callback: String,
+    format: Array,
+    clearTimer: {
+      type: Boolean,
+      observer: function (t) {
+        t&&clearTimeout(this.data.timer);
+      }
+    }
+  },
+  externalClasses: ["countdown-class", "item-class"],
+  data: {
+    time: {
+      day: "0",
+      second: "00",
+      minute: "00",
+      hour: "00"
+    },
+    resultFormat: [],
+    changeFormat: false,
+    timeStamp: 0,
+    timer: null
+  },
+  methods: {
+    init: function(t) {
+      var e = {
+        day: "0",
+        second: "00",
+        minute: "00",
+        hour: "00"
+      };
+      if (t - new Date().getTime() <= 0) return this.setData({
+        time: e
+      }), void this.triggerEvent("callback");
+      this.interval(t);
+    },
+    interval: function(e) {
+      var a = this,
+        i = e - new Date().getTime();
+      if (i <= 0) return clearTimeout(this.data.timer), this.triggerEvent("callback"),
+        void this.setData({
+          time: {
+            day: "0",
+            second: "00",
+            minute: "00",
+            hour: "00"
+          }
+        });
+      var r = Math.ceil(i / 1000),
+        n = parseInt(r / 86400),
+        o = r % 86400,
+        s = (0, t.formatNumber)(parseInt(o / 3600));
+      o %= 3600;
+      var m = {
+        day: n,
+        hour: s,
+        minute: (0, t.formatNumber)(parseInt(o / 60)),
+        second: (0, t.formatNumber)(o % 60)
+      };
+      this.setData({
+        time: m
+      }), this.data.timer = setTimeout(function() {
+        a.interval(e);
+      }, 1000);
+    }
+  },
+  detached: function() {
+    clearTimeout(this.data.timer);
+  }
+});

+ 6 - 0
前端-20230727/lionfish_comshop/components/count-down/index.json

@@ -0,0 +1,6 @@
+{
+  "component": true,
+  "usingComponents": {
+    "routerLink": "../router-link/router-link"
+  }
+}

+ 7 - 0
前端-20230727/lionfish_comshop/components/count-down/index.wxml

@@ -0,0 +1,7 @@
+<view class="countdown-class i-count-down">
+  <slot></slot>
+  <em class="em" wx:if="{{showDay&&time.day>0}}">{{time.day}}天</em>
+  <text class="item-class">{{time.hour}}</text>:
+  <text class="item-class">{{time.minute}}</text>:
+  <text class="item-class">{{time.second}}</text>
+</view>

+ 12 - 0
前端-20230727/lionfish_comshop/components/count-down/index.wxss

@@ -0,0 +1,12 @@
+.i-count-down {
+  white-space: nowrap;
+}
+
+.em {
+  margin-right: 12rpx;
+}
+
+.item-class {
+  display: inline-block;
+  margin: 0 4rpx;
+}

+ 277 - 0
前端-20230727/lionfish_comshop/components/datetimepicker/datetimepicker.js

@@ -0,0 +1,277 @@
+// components/datatimepicker/datatimepicker.js
+
+Component({
+  behaviors: ['wx://form-field'],
+  externalClasses: ["i-class"],
+  properties: {
+    format: {
+      type: String
+    },
+    name: {
+      type: String
+    },
+    placeholder: {
+      type: String
+    }
+  },
+  data: {},
+  lifetimes: {
+    attached: function() {
+      //当前时间 年月日 时分秒
+      const date = new Date()
+      const curYear = date.getFullYear()
+      const curMonth = date.getMonth() + 1
+      const curDay = date.getDate()
+      const curHour = date.getHours()
+      const curMinute = date.getMinutes()
+      const curSecond = date.getSeconds()
+
+      //初始化时间选择轴
+      this.setData({
+        chooseYear: curYear
+      })
+      this.initColumn(curMonth);
+      if(curMonth==2) this.setData({ days: this.data.multiArray[2] })
+
+      //不足两位的前面好补0 因为后面要获取在时间轴上的索引 时间轴初始化的时候都是两位
+      var showMonth = curMonth < 10 ? ('0' + curMonth) : curMonth
+      var showDay = curDay < 10 ? ('0' + curDay) : curDay
+      var showHour = curHour < 10 ? ('0' + curHour) : curHour
+      var showMinute = curMinute < 10 ? ('0' + curMinute) : curMinute
+      var showSecond = curSecond < 10 ? ('0' + curSecond) : curSecond
+
+      //当前时间在picker列上面的索引 为了当打开时间选择轴时选中当前的时间
+      var indexYear = this.data.years.indexOf(curYear + '')
+      var indexMonth = this.data.months.indexOf(showMonth + '')
+      var indexDay = this.data.days.indexOf(showDay + '')
+      var indexHour = this.data.hours.indexOf(showHour + '')
+      var indexMinute = this.data.minutes.indexOf(showMinute + '')
+      var indexSecond = this.data.seconds.indexOf(showSecond + '')
+
+      var multiIndex = []
+      var multiArray = []
+      var value = ''
+
+      var format = this.properties.format;
+      if (format == 'yyyy-MM-dd') {
+        multiIndex = [indexYear, indexMonth, indexDay]
+        value = `${curYear}-${showMonth}-${showDay}`
+        multiArray = [this.data.years, this.data.months, this.data.days]
+      }
+      if (format == 'HH:mm:ss') {
+        multiIndex = [indexHour, indexMinute, indexSecond]
+        value = `${showHour}:${showMinute}:${showSecond}`
+        multiArray = [this.data.hours, this.data.minutes, this.data.seconds]
+      }
+      if (format == 'yyyy-MM-dd HH:mm') {
+        multiIndex = [indexYear, indexMonth, indexDay, indexHour, indexMinute]
+        value = `${curYear}-${showMonth}-${showDay} ${showHour}:${showMinute}`
+        multiArray = [this.data.years, this.data.months, this.data.days, this.data.hours, this.data.minutes]
+      }
+      if (format == 'yyyy-MM-dd HH:mm:ss') {
+        multiIndex = [indexYear, indexMonth, indexDay, indexHour, indexMinute, indexSecond]
+        value = `${curYear}-${showMonth}-${showDay} ${showHour}:${showMinute}:${showSecond}`
+        multiArray = [this.data.years, this.data.months, this.data.days, this.data.hours, this.data.minutes, this.data.seconds]
+
+      }
+      this.setData({
+        // value, // 初始时间
+        multiIndex,
+        multiArray,
+        curMonth,
+        chooseYear: curYear,
+      })
+    }
+  },
+  /**
+   * 组件的方法列表
+   */
+  methods: {
+    //获取时间日期
+    bindPickerChange: function(e) {
+      this.setData({
+        multiIndex: e.detail.value
+      })
+      const index = this.data.multiIndex
+      var format = this.properties.format
+      var showTime = ''
+
+      if (format == 'yyyy-MM-dd') {
+        const year = this.data.multiArray[0][index[0]]
+        const month = this.data.multiArray[1][index[1]]
+        const day = this.data.multiArray[2][index[2]]
+        showTime = `${year}-${month}-${day}`
+      }
+      if (format == 'HH:mm:ss') {
+        const hour = this.data.multiArray[0][index[0]]
+        const minute = this.data.multiArray[1][index[1]]
+        const second = this.data.multiArray[2][index[2]]
+        showTime = `${hour}:${minute}:${second}`
+      }
+      if (format == 'yyyy-MM-dd HH:mm') {
+        const year = this.data.multiArray[0][index[0]]
+        const month = this.data.multiArray[1][index[1]]
+        const day = this.data.multiArray[2][index[2]]
+        const hour = this.data.multiArray[3][index[3]]
+        const minute = this.data.multiArray[4][index[4]]
+        showTime = `${year}-${month}-${day} ${hour}:${minute}`
+      }
+      if (format == 'yyyy-MM-dd HH:mm:ss') {
+        const year = this.data.multiArray[0][index[0]]
+        const month = this.data.multiArray[1][index[1]]
+        const day = this.data.multiArray[2][index[2]]
+        const hour = this.data.multiArray[3][index[3]]
+        const minute = this.data.multiArray[4][index[4]]
+        const second = this.data.multiArray[5][index[5]]
+        showTime = `${year}-${month}-${day} ${hour}:${minute}:${second}`
+      }
+      this.setData({
+        value: showTime
+      })
+      this.triggerEvent('dateTimePicker', showTime)
+    },
+    //初始化时间选择轴
+    initColumn(curMonth) {
+      const years = []
+      const months = []
+      const days = []
+      const hours = []
+      const minutes = []
+      const seconds = []
+      for (let i = 2019; i <= 2099; i++) {
+        years.push(i + '')
+      }
+      for (let i = 1; i <= 12; i++) {
+        if (i < 10) {
+          i = "0" + i;
+        }
+        months.push(i + '')
+      }
+
+      if (curMonth == 1 || curMonth == 3 || curMonth == 5 || curMonth == 7 || curMonth == 8 || curMonth == 10 || curMonth == 12) {
+        for (let i = 1; i <= 31; i++) {
+          if (i < 10) {
+            i = "0" + i;
+          }
+          days.push(i + '')
+        }
+      }
+      if (curMonth == 4 || curMonth == 6 || curMonth == 9 || curMonth == 11) {
+        for (let i = 1; i <= 30; i++) {
+          if (i < 10) {
+            i = "0" + i;
+          }
+          days.push(i + '')
+        }
+      }
+      if (curMonth == 2) {
+        this.setFebDays()
+      }
+      for (let i = 0; i <= 23; i++) {
+        if (i < 10) {
+          i = "0" + i;
+        }
+        hours.push(i + '')
+      }
+      for (let i = 0; i <= 59; i++) {
+        if (i < 10) {
+          i = "0" + i;
+        }
+        minutes.push(i + '')
+      }
+      for (let i = 0; i <= 59; i++) {
+        if (i < 10) {
+          i = "0" + i;
+        }
+        seconds.push(i + '')
+      }
+      this.setData({
+        years,
+        months,
+        days,
+        hours,
+        minutes,
+        seconds
+      })
+    },
+
+    /**
+     * 列改变时触发
+     */
+    bindPickerColumnChange: function(e) {
+      //获取年份 用于计算改年的2月份为平年还是闰年
+      if (e.detail.column == 0 && this.properties.format != 'HH:mm:ss') {
+        var chooseYear = this.data.multiArray[e.detail.column][e.detail.value];
+        this.setData({
+          chooseYear
+        })
+        if (this.data.curMonth == '02' || this.data.chooseMonth == '02') {
+          this.setFebDays()
+        }
+      }
+      //当前第二为月份时需要初始化当月的天数
+      if (e.detail.column == 1 && this.properties.format != 'HH:mm:ss') {
+        let num = parseInt(this.data.multiArray[e.detail.column][e.detail.value]);
+        let temp = [];
+        if (num == 1 || num == 3 || num == 5 || num == 7 || num == 8 || num == 10 || num == 12) { //31天的月份
+          for (let i = 1; i <= 31; i++) {
+            if (i < 10) {
+              i = "0" + i;
+            }
+            temp.push("" + i);
+          }
+          this.setData({
+            ['multiArray[2]']: temp
+          });
+        } else if (num == 4 || num == 6 || num == 9 || num == 11) { //30天的月份
+          for (let i = 1; i <= 30; i++) {
+            if (i < 10) {
+              i = "0" + i;
+            }
+            temp.push("" + i);
+          }
+          this.setData({
+            ['multiArray[2]']: temp
+          });
+        } else if (num == 2) { //2月份天数
+          this.setFebDays()
+        }
+      }
+      var data = {
+        multiArray: this.data.multiArray,
+        multiIndex: this.data.multiIndex
+      };
+      data.multiIndex[e.detail.column] = e.detail.value;
+      this.setData(data);
+    },
+    //计算二月份天数
+    setFebDays() {
+      let year = parseInt(this.data.chooseYear);
+      let temp = [];
+      if (year % (year % 100 ? 4 : 400) ? false : true) {
+        for (let i = 1; i <= 29; i++) {
+          if (i < 10) {
+            i = "0" + i;
+          }
+          temp.push("" + i);
+        }
+        this.setData({
+          ['multiArray[2]']: temp,
+          chooseMonth: '02'
+
+        });
+      } else {
+        for (let i = 1; i <= 28; i++) {
+          if (i < 10) {
+            i = "0" + i;
+          }
+          temp.push("" + i);
+        }
+        this.setData({
+          ['multiArray[2]']: temp,
+          chooseMonth: '02'
+        });
+      }
+    }
+  },
+})

+ 4 - 0
前端-20230727/lionfish_comshop/components/datetimepicker/datetimepicker.json

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

+ 5 - 0
前端-20230727/lionfish_comshop/components/datetimepicker/datetimepicker.wxml

@@ -0,0 +1,5 @@
+<view class="item-value i-class">
+  <picker mode="multiSelector" bindchange="bindPickerChange" bindcolumnchange="bindPickerColumnChange" value="{{multiIndex}}" range="{{multiArray}}">
+    <input disabled="{{true}}" value='{{value}}' name='{{name}}' placeholder="{{placeholder}}" />
+  </picker>
+</view>

+ 5 - 0
前端-20230727/lionfish_comshop/components/datetimepicker/datetimepicker.wxss

@@ -0,0 +1,5 @@
+.item-value {
+  text-align: right;
+  font-size: 26rpx;
+  position: relative;
+}

+ 29 - 0
前端-20230727/lionfish_comshop/components/dialog/index.js

@@ -0,0 +1,29 @@
+Component({
+  externalClasses: ["i-class", "i-btn"],
+  properties: {
+    visible: {
+      type: Boolean,
+      value: false
+    },
+    text: String,
+    confirmText: {
+      type: String,
+      value: "确定"
+    },
+    showCancel: {
+      type: Boolean,
+      value: true
+    }
+  },
+  methods: {
+    confirm: function () {
+      this.triggerEvent("confirm");
+    },
+    cancel: function () {
+      this.triggerEvent("cancel");
+    },
+    close: function () {
+      this.triggerEvent("cancel");
+    }
+  }
+});

+ 7 - 0
前端-20230727/lionfish_comshop/components/dialog/index.json

@@ -0,0 +1,7 @@
+{
+  "component": true,
+  "usingComponents": {
+    "i-modal": "../modal/index",
+    "i-button": "../button/index"
+  }
+}

+ 22 - 0
前端-20230727/lionfish_comshop/components/dialog/index.wxml

@@ -0,0 +1,22 @@
+<i-modal bindtap="close" class="dialog" scrollUp="{{false}}" visible="{{visible}}">
+  <view class="dialog-content">
+    <view class="text i-class" wx:if="{{text}}">{{text}}</view>
+    <view wx:el>
+      <slot></slot>
+    </view>
+    <view class="button-group">
+      <block wx:if="{{showCancel}}">
+        <i-button catchtap="cancel" iClass="left-btn">
+          <view>取消</view>
+        </i-button>
+        <view class="split-line"></view>
+        <i-button catchtap="confirm" iClass="right-btn">
+          <view>{{confirmText}}</view>
+        </i-button>
+      </block>
+      <block wx:else>
+        <view catchtap="confirm" class="r-btn i-btn">{{confirmText}}</view>
+      </block>
+    </view>
+  </view>
+</i-modal>

+ 46 - 0
前端-20230727/lionfish_comshop/components/dialog/index.wxss

@@ -0,0 +1,46 @@
+.dialog-content {
+  width: 540rpx;
+  height: 208rpx;
+  border-radius: 30rpx;
+  background: #fff;
+}
+
+.dialog-content .text {
+  height: 120rpx;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  border-bottom: 2rpx solid #d2d2d2;
+}
+
+.dialog-content .button-group {
+  display: flex;
+}
+
+.dialog-content .left-btn, .dialog-content .right-btn {
+  width: 270rpx;
+  height: 88rpx;
+  text-align: center;
+  line-height: 88rpx;
+  font-size: 36rpx;
+  color: #0076ff;
+  margin: 0;
+  padding: 0;
+}
+
+.dialog-content .split-line {
+  width: 0;
+  height: 88rpx;
+  border-right: 2rpx solid #d2d2d2;
+}
+
+.dialog-content .r-btn {
+  width: 540rpx;
+  height: 88rpx;
+  text-align: center;
+  line-height: 88rpx;
+  font-size: 36rpx;
+  color: #0076ff;
+  margin: 0;
+  padding: 0;
+}

+ 17 - 0
前端-20230727/lionfish_comshop/components/distributionItem/index.js

@@ -0,0 +1,17 @@
+var timeFormat = require("../../utils/timeFormat");
+
+Component({
+  properties: {
+    item: {
+      type: Object,
+      observer: function (val) {
+        var obj = val;
+        var cTime = obj.createTime;
+        null === cTime ? cTime = (0, timeFormat.formatYMD)(new Date()) : cTime = (0,
+          timeFormat.formatYMD)(new Date(parseInt(cTime))), this.setData({
+            item: obj
+          });
+      }
+    }
+  }
+});

+ 6 - 0
前端-20230727/lionfish_comshop/components/distributionItem/index.json

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

+ 13 - 0
前端-20230727/lionfish_comshop/components/distributionItem/index.wxml

@@ -0,0 +1,13 @@
+<view class="item">
+    <view class="distributionNum">
+        <text class="distributionTime">{{item.createTime}}</text>
+        <text class="statusName">{{item.disStatusName}}</text>
+    </view>
+    <view class="spu">
+        <component-img class="goodsImg" defaultImage="../../images/placeholder-refund.png" height="60" loadImage="{{item.goodsImage}}" width="60"></component-img>
+        <view class="detail">
+            <view class="goodsName">{{item.spuName}}</view>
+            <view class="commission">团单金额 ¥{{item.totalAmount/100}} | 佣金 ¥{{item.orderCommission/100}}</view>
+        </view>
+    </view>
+</view>

+ 65 - 0
前端-20230727/lionfish_comshop/components/distributionItem/index.wxss

@@ -0,0 +1,65 @@
+.item {
+  background: #fff;
+  overflow: hidden;
+  border-top-left-radius: 20rpx;
+  border-top-right-radius: 20rpx;
+}
+
+.distributionNum {
+  height: 80rpx;
+  font-size: 26rpx;
+  color: #333;
+  padding: 0 30rpx;
+  border-top-left-radius: 20rpx;
+  border-top-right-radius: 20rpx;
+  border-bottom: 2rpx solid #e4e4e4;
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+}
+
+.distributionNum .distributionTime {
+  font-size: 24rpx;
+  color: #666;
+}
+
+.distributionNum .statusName {
+  font-size: 26rpx;
+  color: #fe8464;
+}
+
+.spu {
+  padding: 20rpx 30rpx;
+  display: flex;
+  justify-content: flex-start;
+}
+
+.spu .goodsImg {
+  height: 120rpx;
+  margin-right: 30rpx;
+}
+
+.spu .detail {
+  font-size: 28rpx;
+  color: #333;
+}
+
+.spu .detail .goodsName {
+  color: #333;
+  font-size: 28rpx;
+  line-height: 40rpx;
+  height: 80rpx;
+  width: 540rpx;
+  display: -webkit-box;
+  -webkit-box-orient: vertical;
+  -webkit-line-clamp: 2;
+  overflow: hidden;
+  text-overflow: initial;
+  white-space: normal;
+}
+
+.spu .detail .commission {
+  font-size: 24rpx;
+  color: #999;
+  line-height: 40rpx;
+}

+ 64 - 0
前端-20230727/lionfish_comshop/components/diy-goods-list/index.js

@@ -0,0 +1,64 @@
+var app = getApp();
+
+Component({
+  properties: {
+    value: {
+      type: Object,
+      value: {}
+    },
+    idx: {
+      type: Number,
+      value: 0
+    }
+  },
+
+  data: {
+    // list: [],
+    _lock: false
+  },
+
+  attached: function() {
+    this.setData({_lock: true },()=>{
+      this.getGoodsList();
+    })
+  },
+
+  pageLifetimes: {
+    show: function () {
+      this.data._lock || this.getGoodsList();
+    }
+  },
+
+  methods: {
+    getGoodsList() {
+      var token = wx.getStorageSync('token');
+      var that = this;
+      var cur_community = wx.getStorageSync('community');
+      let value = this.data.value;
+      let sources = value.sources;
+      let params = {};
+      if(sources=='category') {
+        params.gid = value.categoryId;
+        params.is_random = 0;
+      } else {
+        params.is_random = 1;
+      }
+      app.util.request({
+        url: 'entry/wxapp/index',
+        data: {
+          controller: 'index.load_gps_goodslist',
+          token,
+          pageNum: 1,
+          head_id: cur_community.communityId || '',
+          per_page: value.goodsCount,
+          ...params
+        },
+        dataType: 'json',
+        success: function (res) {
+          that.setData({ _lock: false })
+          that.triggerEvent('diyGoodsList', { id: that.data.idx, data: res.data });
+        }
+      })
+    }
+  }
+})

+ 4 - 0
前端-20230727/lionfish_comshop/components/diy-goods-list/index.json

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

+ 3 - 0
前端-20230727/lionfish_comshop/components/diy-goods-list/index.wxml

@@ -0,0 +1,3 @@
+<view class="goods-list" style="{{'background-color:'+(value.backgroundColor)+';'+('margin-top:'+(value.marginTop*2+'rpx')+';')}}">
+  <slot></slot>
+</view>

+ 75 - 0
前端-20230727/lionfish_comshop/components/diy-many-goods-list/index.js

@@ -0,0 +1,75 @@
+var app = getApp();
+
+Component({
+  properties: {
+    value: {
+      type: Object,
+      value: {}
+    },
+    idx: {
+      type: Number,
+      value: 0
+    }
+  },
+
+  data: {
+    // list: [],
+    _lock: false,
+    current: 0
+  },
+
+  attached: function() {
+    this.setData({_lock: true },()=>{
+      this.getGoodsList();
+    })
+  },
+
+  pageLifetimes: {
+    show: function () {
+      this.data._lock || this.getGoodsList();
+    }
+  },
+
+  methods: {
+    getGoodsList() {
+      var token = wx.getStorageSync('token');
+      var that = this;
+      var cur_community = wx.getStorageSync('community');
+      let { current, value } = this.data;
+      let vlist = value.list;
+      let sources = vlist[current].sources;
+      let params = {};
+      if(sources=='category') {
+        params.gid = vlist[current].categoryId;
+        params.is_random = 0;
+      } else {
+        params.is_random = 1;
+      }
+      app.util.request({
+        url: 'entry/wxapp/index',
+        data: {
+          controller: 'index.load_gps_goodslist',
+          token,
+          pageNum: 1,
+          head_id: cur_community.communityId || '',
+          per_page: 20 || value.goodsCount,
+          ...params
+        },
+        dataType: 'json',
+        success: function (res) {
+          console.log('many_goods_list')
+          that.setData({ _lock: false })
+          that.triggerEvent('diyGoodsList', { id: that.data.idx, data: res.data });
+        }
+      })
+    },
+    changeCate(e) {
+      let idx = e.currentTarget.dataset.idx;
+      this.setData({
+        current: idx
+      },()=>{
+        this.getGoodsList();
+      })
+    }
+  }
+})

+ 4 - 0
前端-20230727/lionfish_comshop/components/diy-many-goods-list/index.json

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

+ 14 - 0
前端-20230727/lionfish_comshop/components/diy-many-goods-list/index.wxml

@@ -0,0 +1,14 @@
+<view class="goods-list" style="{{'background-color:'+(value.backgroundColor)+';'+('margin-top:'+(value.marginTop*2+'rpx')+';')}}">
+  <scroll-view scrollWithAnimation scroll-x="true" scroll-y="false" class="tabs__navs">
+    <view class="navlist">
+      <block wx:for="{{value.list}}" wx:key="index">
+        <view class="split-line" wx:if="{{index!=0}}"></view>
+        <view class="item {{index==current?'active':''}}" data-idx="{{index}}" bindtap="changeCate">
+          <view class="name">{{item.title}}</view>
+          <view class="tag">{{item.desc}}</view>
+        </view>
+      </block>
+    </view>
+  </scroll-view>
+  <slot></slot>
+</view>

+ 47 - 0
前端-20230727/lionfish_comshop/components/diy-many-goods-list/index.wxss

@@ -0,0 +1,47 @@
+.navlist {
+  position: relative;
+  display: flex;
+  flex-direction: row;
+  flex-wrap: nowrap;
+  align-items: center;
+  margin-left: 20rpx;
+  margin-right: 20rpx;
+  margin-bottom: 20rpx;
+}
+
+.navlist .item {
+  width: 120rpx;
+  flex-shrink: 0;
+  text-align: center;
+}
+
+.navlist .item .name {
+  font-size: 32rpx;
+  color: #303133;
+  line-height: 1;
+}
+
+.navlist .item .tag {
+  font-size: 24rpx;
+  color: #909399;
+  margin-top: 10rpx;
+  line-height: 36rpx;
+}
+
+.navlist .item.active .name {
+  font-weight: bold;
+}
+
+.navlist .item.active .tag {
+  background: rgb(255, 69, 68);
+  color: #FFFFFF;
+  border-radius: 20rpx;
+}
+
+.split-line {
+  width: 1rpx;
+  height: 30rpx;
+  background-color: #E5E5E5;
+  margin-right: calc((100% - 121rpx * 4) / 6);
+  margin-left: calc((100% - 121rpx * 4) / 6);
+}

+ 133 - 0
前端-20230727/lionfish_comshop/components/diy-nav/index.js

@@ -0,0 +1,133 @@
+var util = require('../../utils/util.js');
+var app = getApp();
+Component({
+  /**
+   * 组件的属性列表
+   */
+  properties: {
+    list: {
+      type: Object,
+      value: {},
+      observer: function (t) {
+        if(t.selectedTemplate=="imageNavigation") {
+          let num = t.showType*2;
+          let len = t.list.length;
+          let number = Math.ceil(len/num);
+          let isSwiper = false;
+          if(number>1) {
+            isSwiper = true;
+          }
+          let newlist = this.chunk(t.list, num);
+          this.setData({ isSwiper, number, newlist })
+        }
+      }
+    },
+    skin: {
+      type: Object
+    },
+  },
+
+  /**
+   * 组件的初始数据
+   */
+  data: {
+    isSwiper: false,
+    number: 0,
+    newlist: [],
+    current: 0,
+    swiperHeight: 0
+  },
+
+  attached() {
+    this.getCurH()
+  },
+
+  /**
+   * 组件的方法列表
+   */
+  methods: {
+    chunk: function(array, size) {
+      var result = [];
+      for (var x = 0; x < Math.ceil(array.length / size); x++) {
+          var start = x * size;
+          var end = start + size;
+          result.push(array.slice(start, end));
+      }
+      return result;
+    },
+    getCurH() {
+      let current = this.data.current;
+      let that = this;
+      const query = wx.createSelectorQuery().in(this);
+      query.select('#nav_'+current).boundingClientRect(function (rect) {
+        rect&&that.setData({ swiperHeight: rect.height })
+      }).exec();
+    },
+    goDiysliderUrl: function(t) {
+      let link = t.currentTarget.dataset.link;
+      let needAuth = this.data.needAuth;
+  
+      if (Object.keys(link).length > 0) {
+        let type = link.parents;
+        if (util.checkRedirectTo(link.wap_url, needAuth)) {
+          this.authModal();
+          return;
+        }
+        switch(type) {
+          case "WEBVIEW":
+            let url = link.wap_url;
+            url && wx.navigateTo({ url: '/lionfish_comshop/pages/web-view?url=' + encodeURIComponent(url) });
+            break;
+          case "MALL_LINK":
+            url = link.wap_url;
+            if (url.indexOf('lionfish_comshop/pages/index/index') != -1 || url.indexOf('lionfish_comshop/pages/order/shopCart') != -1 || url.indexOf('lionfish_comshop/pages/user/me') != -1 || url.indexOf('lionfish_comshop/pages/type/index') != -1) {
+              url && wx.switchTab({ url })
+            } else {
+              url && wx.navigateTo({ url })
+            }
+            break;
+          case "OTHER_APPLET":
+            // 跳转小程序
+            let appId = link.appid;
+            let path = link.wap_url;
+            appId && wx.navigateToMiniProgram({
+              appId,
+              path,
+              extraData: {},
+              envVersion: 'release',
+              success(res) {},
+              fail(error) {  wx.showModal({ title: "提示", content: error.errMsg, showCancel: false }) }
+            })
+            break;
+          case "CUSTOM_LINK":
+            url = link.wap_url;
+            if (url.indexOf('lionfish_comshop/pages/index/index') != -1 || url.indexOf('lionfish_comshop/pages/order/shopCart') != -1 || url.indexOf('lionfish_comshop/pages/user/me') != -1 || url.indexOf('lionfish_comshop/pages/type/index') != -1) {
+              url && wx.switchTab({ url })
+            } else {
+              url && wx.navigateTo({ url })
+            }
+            break;
+          case "GOODS_CATEGORY":
+            //独立分类
+            let cateId = link.id;
+            app.globalData.typeCateId = cateId;
+            wx.switchTab({
+              url: '/lionfish_comshop/pages/type/index'
+            })
+            break;
+          default:
+            url = link.wap_url;
+            url && wx.navigateTo({ url })
+            break;
+        }
+      }
+    },
+    onCurrent(e) {
+      this.setData({
+        current: e.detail.current
+      }, ()=>{
+        this.getCurH()
+      })
+    }
+  }
+})

+ 4 - 0
前端-20230727/lionfish_comshop/components/diy-nav/index.json

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

+ 31 - 0
前端-20230727/lionfish_comshop/components/diy-nav/index.wxml

@@ -0,0 +1,31 @@
+<view style="margin: {{list.marginTop*2}}rpx 20rpx 0;color: {{list.textColor}};border-radius:10rpx;overflow: hidden;">
+  <block wx:if="{{isSwiper}}">
+    <swiper bindchange="onCurrent" style="height:{{swiperHeight}}px;">
+      <swiper-item class="navigation-text" wx:for='{{number}}' wx:key="index">
+        <view id="nav_{{index}}" class="szy-icon-group col-{{list.showType?list.showType:4}} {{list.navRadius}}" style="{{list.backgroundColor?'background:'+list.backgroundColor+';':''}}">
+          <block wx:for='{{newlist[index]}}' wx:for-item='navItem' wx:for-index='idx' wx:key="nav">
+            <view url="{{navItem.linkurl}}" class="szy-icon-col" bindtap="goDiysliderUrl" data-link="{{navItem.link}}">
+              <view wx:if="{{list.selectedTemplate=='imageNavigation'}}">
+                <image class="nav-img" src='{{navItem.imageUrl}}'></image>
+              </view>
+              <view class="nav-name text-overflow1 u-font-26">{{navItem.title}}</view>
+            </view>
+          </block>
+        </view>
+      </swiper-item>
+    </swiper>
+    <view class="navigation-indicator">
+      <view wx:for='{{number}}' wx:key="index" class="item" style="background: {{current==index?skin.color:''}};"></view>
+    </view>
+  </block>
+  <view wx:else class="szy-icon-group col-{{list.showType?list.showType:4}} {{list.navRadius}}" style="{{list.backgroundColor?'background:'+list.backgroundColor+';':''}}">
+    <block wx:for='{{list.list}}' wx:for-item='navItem' wx:for-index='idx' wx:key="nav">
+      <view url="{{navItem.linkurl}}" class="szy-icon-col" bindtap="goDiysliderUrl" data-link="{{navItem.link}}">
+        <view wx:if="{{list.selectedTemplate=='imageNavigation'}}">
+          <image class="nav-img" src='{{navItem.imageUrl}}'></image>
+        </view>
+        <view class="nav-name text-overflow1 u-font-26">{{navItem.title}}</view>
+      </view>
+    </block>
+  </view>
+</view>

+ 48 - 0
前端-20230727/lionfish_comshop/components/diy-nav/index.wxss

@@ -0,0 +1,48 @@
+.szy-icon-group {
+  display: flex;
+  flex-wrap: wrap;
+  padding: 0 5px;
+}
+
+.szy-icon-col {
+  text-align: center;
+  display: inline-block;
+  box-sizing: border-box;
+  padding: 8px 5px;
+}
+
+.col-3 .szy-icon-col {
+  width: 33.33%;
+}
+
+.col-4 .szy-icon-col {
+  width: 25%;
+}
+
+.col-5 .szy-icon-col {
+  width: 20%;
+}
+
+.szy-icon-col .nav-img {
+  width: 86rpx;
+  height: 86rpx;
+}
+
+.szy-icon-group.fillet .nav-img {
+  border-radius: 50%;
+}
+
+.navigation-indicator {
+  text-align: center;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  margin: 10rpx 0 20rpx;
+}
+
+.navigation-indicator .item {
+  width: 30rpx;
+  height: 6rpx;
+  background: #cccccc;
+  margin: 0 5rpx;
+}

+ 81 - 0
前端-20230727/lionfish_comshop/components/diy-pintuan/index.js

@@ -0,0 +1,81 @@
+var app = getApp();
+
+Component({
+  /**
+   * 组件的属性列表
+   */
+  properties: {
+    refresh: {
+      type: Boolean,
+      value: false,
+      observer: function (t) {
+        if (t) this.setData({ list: [] }), this.getPinList();
+      }
+    },
+    diyInfo: {
+      type: Object,
+      observer: function (t) {
+        if (t) {
+          let list = t.list || [];
+          list.forEach((item, index)=>{
+            if(item.imageUrl.indexOf('http')==-1) {
+              list[index].imageUrl = t.host + item.imageUrl;
+            }
+          })
+          this.setData({ style: t.style*1-1, styleList: list });
+        }
+      }
+    },
+    skin: {
+      type: Object
+    }
+  },
+
+  data: {
+    style: 0,
+    list: [],
+    styleList: [],
+    placeholdeImg: app.globalData.placeholdeImg
+  },
+
+  attached() {
+    this.getPinList();
+  },
+
+  /**
+   * 组件的方法列表
+   */
+  methods: {
+    getPinList: function () {
+      let that = this;
+      var community = wx.getStorageSync('community');
+      let head_id = community.communityId || '';
+      var token = wx.getStorageSync('token');
+      app.util.request({
+        url: 'entry/wxapp/index',
+        data: {
+          controller: 'group.get_pintuan_list',
+          is_index: 1,
+          head_id,
+          token
+        },
+        dataType: 'json',
+        success: function (res) {
+          if (res.data.code == 0) {
+            let pinList = {};
+            let { list, pintuan_index_coming_img, pintuan_index_show } = res.data;
+            pinList.list = list || [];
+            pinList.img = pintuan_index_coming_img || '';
+            pinList.show = pintuan_index_show || 0;
+            that.setData({ pinList })
+            console.log('pinList', pinList)
+          }
+        }
+      })
+    },
+    goLink: function(event) {
+      let url = event.currentTarget.dataset.link;
+      url && wx.navigateTo({ url })
+    }
+  }
+})

+ 6 - 0
前端-20230727/lionfish_comshop/components/diy-pintuan/index.json

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

+ 121 - 0
前端-20230727/lionfish_comshop/components/diy-pintuan/index.wxml

@@ -0,0 +1,121 @@
+<block wx:if="{{diyInfo.style==1}}">
+  <view class='pin-spec' style="{{('margin-top:'+(diyInfo.marginTop*2+'rpx')+';')}}" wx:if="{{pinList.list&&pinList.list.length}}">
+    <image class="pin-spec-img" mode="widthFix" src="{{diyInfo.list[style].imageUrl}}"
+      wx:if="{{diyInfo.list[diyInfo.style-1].imageUrl}}" bindtap="goLink" data-link="/lionfish_comshop/moduleA/pin/index"></image>
+    <scroll-view class='pin-spec-scroll' scroll-x>
+      <view class='pin-spec-wrap'>
+        <view class="pin-spec-item" wx:for="{{pinList.list}}" wx:key="actId" bindtap="goLink" data-link="/lionfish_comshop/moduleA/pin/goodsDetail?id={{item.actId}}">
+          <i-img defaultImage="../../images/placeholder-refund.png" height="200" width="200" iClass="pin-img"
+            loadImage="{{item.skuImage}}"></i-img>
+          <view wx:if="{{item.label_info && item.label_info.type==0}}" class='item-tag'>
+            <image class='item-tag-bg' mode='widthFix' src="../../images/tag.png"></image>
+            <view class='tag-name {{item.label_info.len==2?"two-word":""}}'>{{item.label_info.tagcontent}}</view>
+          </view>
+          <view wx:if="{{item.label_info && item.label_info.type==1}}" class='item-tag'
+            style='background:url({{item.label_info.tagcontent}}) no-repeat left top;background-size: 100%;'></view>
+          <view class="act-end" wx:if="{{item.spuCanBuyNum==0}}">已抢光</view>
+          <view class='title'>{{item.spuName}}</view>
+          <text class="pin-tag" style="border-color:{{skin.color}};color:{{skin.color}}">{{item.pin_count}}人团</text>
+          <view class='new-bot'>
+            <view class='price'>¥{{item.actPrice[0]}}{{item.actPrice[1] ? '.' : ''}}{{item.actPrice[1]}}</view>
+            <view class="market-price">¥{{item.marketPrice[0]}}{{item.marketPrice[1] ? '.' : ''}}{{item.marketPrice[1]}}</view>
+          </view>
+        </view>
+      </view>
+    </scroll-view>
+  </view>
+</block>
+
+<block wx:elif="{{diyInfo.style==2}}">
+  <view class='pin-spec u-p-30' style="{{('margin-top:'+(diyInfo.marginTop*2+'rpx')+';')}}" wx:if="{{pinList.list&&pinList.list.length}}">
+    <view class="i-flex i-flex-spb" bindtap="goLink" data-link="/lionfish_comshop/moduleA/pin/index">
+      <image src="{{styleList[1].imageUrl}}" class="pin-s2-tit"></image>
+      <view class="u-font-24" style="color:#909399;">
+        <text>更多拼团</text>
+        <text class="iconfont icon-youjiantou fsz-22"></text>
+      </view>
+    </view>
+    <view class="pin-s2">
+      <view wx:for="{{pinList.list}}" wx:key="id" class="i-flex pin-s2-item" style="height: 250rpx;" bindtap="goLink" data-link="/lionfish_comshop/moduleA/pin/goodsDetail?id={{item.actId}}">
+        <view class="pos-r u-m-t-25">
+          <i-img defaultImage="../../images/placeholder-refund.png" height="200" width="200" iClass="pin-img" loadImage="{{item.skuImage}}"></i-img>
+          <view wx:if="{{item.label_info&&item.label_info.type==0}}" class='item-tag'>
+            <image class='item-tag-bg' mode='widthFix' src="../../images/tag.png"></image>
+            <view class='tag-name {{item.label_info.len==2?"two-word":""}}'>{{item.label_info.tagcontent}}</view>
+          </view>
+          <view wx:if="{{item.label_info && item.label_info.type==1}}" class='item-tag'
+            style='background:url({{item.label_info.tagcontent}}) no-repeat left top;background-size: 100%;'></view>
+          <view class="act-end" wx:if="{{item.spuCanBuyNum==0}}">已抢光</view>
+        </view>
+        <view class="i-flex-item u-m-l-20 u-p-b-25 u-p-t-25 pin-s2-item-r">
+          <view class="top">
+            <view class='title'>{{item.spuName}}</view>
+            <view class="label i-flex">
+              <view class="label-person tag" style="border-color:{{skin.color}};color:{{skin.color}}">
+                <text class="iconfont icon-pintuan fsz-22"></text>
+                <text class="label-name">{{item.pin_count}}人团</text>
+              </view>
+              <view class="label-num tag" style="border-color:{{skin.color}};color:{{skin.color}}">
+                <text class="label-name">已拼{{item.soldNum}}件</text>
+              </view>
+            </view>
+          </view>
+          <view class='bot i-flex i-i-flex-spb'>
+            <view class="content-price i-flex-item">
+              <view class='price'>¥<text class="u-font-32 u-m-r-10">{{item.actPrice[0]}}{{item.actPrice[1] ? '.' : ''}}{{item.actPrice[1]}}</text></view>
+              <view class="content-num">¥{{item.marketPrice[0]}}{{item.marketPrice[1] ? '.' : ''}}{{item.marketPrice[1]}}</view>
+            </view>
+            <view class="pin-s2-btn">去拼团</view>
+          </view>
+        </view>
+      </view>
+    </view>
+  </view>
+</block>
+
+<block wx:elif="{{diyInfo.style==3}}">
+  <view class='pin-spec u-p-30' style="{{('margin-top:'+(diyInfo.marginTop*2+'rpx')+';')}}" wx:if="{{pinList.list&&pinList.list.length}}">
+    <view class="text-center">
+      <image src="{{styleList[2].imageUrl}}" class="pin-s3-tit"></image>
+    </view>
+    <view class="pin-s2">
+      <view wx:for="{{pinList.list}}" wx:key="id" class="i-flex pin-s2-item" style="height: 250rpx;" bindtap="goLink" data-link="/lionfish_comshop/moduleA/pin/goodsDetail?id={{item.actId}}">
+        <view class="pos-r u-m-t-25">
+          <i-img defaultImage="../../images/placeholder-refund.png" height="200" width="200" iClass="pin-img" loadImage="{{item.skuImage}}"></i-img>
+          <view wx:if="{{item.label_info&&item.label_info.type==0}}" class='item-tag'>
+            <image class='item-tag-bg' mode='widthFix' src="../../images/tag.png"></image>
+            <view class='tag-name {{item.label_info.len==2?"two-word":""}}'>{{item.label_info.tagcontent}}</view>
+          </view>
+          <view wx:if="{{item.label_info && item.label_info.type==1}}" class='item-tag'
+            style='background:url({{item.label_info.tagcontent}}) no-repeat left top;background-size: 100%;'></view>
+          <view class="act-end" wx:if="{{item.spuCanBuyNum==0}}">已抢光</view>
+        </view>
+        <view class="i-flex-item u-m-l-20 u-p-b-25 u-p-t-25 pin-s2-item-r">
+          <view class="top">
+            <view class='title'>{{item.spuName}}</view>
+            <view class="label i-flex">
+              <view class="label-person tag" style="border-color:{{skin.color}};color:{{skin.color}}">
+                <text class="iconfont icon-pintuan fsz-22"></text>
+                <text class="label-name">{{item.pin_count}}人团</text>
+              </view>
+              <view class="label-num tag" style="border-color:{{skin.color}};color:{{skin.color}}">
+                <text class="label-name">已拼{{item.soldNum}}件</text>
+              </view>
+            </view>
+          </view>
+          <view class='bot i-flex i-i-flex-spb'>
+            <view class="content-price i-flex-item">
+              <view class='price'>¥<text class="u-font-32 u-m-r-10">{{item.actPrice[0]}}{{item.actPrice[1] ? '.' : ''}}{{item.actPrice[1]}}</text></view>
+              <view class="content-num">¥{{item.marketPrice[0]}}{{item.marketPrice[1] ? '.' : ''}}{{item.marketPrice[1]}}</view>
+            </view>
+            <view class="pin-s2-btn">去拼团</view>
+          </view>
+        </view>
+      </view>
+    </view>
+    <view class="u-font-24 border-top u-p-t-30 text-center" style="color:#909399;" bindtap="goLink" data-link="/lionfish_comshop/moduleA/pin/index">
+        <text>更多拼团</text>
+        <text class="iconfont icon-youjiantou fsz-22"></text>
+      </view>
+  </view>
+</block>

+ 243 - 0
前端-20230727/lionfish_comshop/components/diy-pintuan/index.wxss

@@ -0,0 +1,243 @@
+@import "/icon.wxss";
+@import "/common.wxss";
+
+.pin-spec {
+  position: relative;
+  background: #fff;
+  margin: 20rpx;
+  border-radius: 10rpx;
+  overflow: hidden;
+}
+
+.pin-spec-img {
+  width: 100%;
+  vertical-align: top;
+  border-radius: 10rpx 10rpx 0 0;
+}
+
+.pin-spec-scroll {
+  max-height: 380rpx;
+}
+
+.pin-spec-wrap {
+  position: relative;
+  display: flex;
+  flex-direction: row;
+  flex-wrap: nowrap;
+}
+
+.pin-spec-item {
+  position: relative;
+  width: 240rpx;
+  box-sizing: border-box;
+  padding: 20rpx;
+  font-size: 28rpx;
+}
+
+.pin-spec-item .pin-img {
+  width: 200rpx;
+  height: 200rpx;
+  margin-bottom: 20rpx;
+}
+
+.pin-spec-item .title {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+
+.pin-spec-item .new-bot {
+  margin-top: 10rpx;
+  display: flex;
+  align-items: center;
+}
+
+.pin-spec-item .price {
+  color: #ff5041;
+}
+
+.pin-spec-item .act-end {
+  position: absolute;
+  height: 60rpx;
+  border-radius: 10rpx;
+  background: rgba(0, 0, 0, 0.5);
+  color: #fff;
+  font-size: 28rpx;
+  text-align: center;
+  line-height: 60rpx;
+  left: 50%;
+  top: 80rpx;
+  padding: 0 12rpx;
+  transform: translateX(-50%);
+}
+
+.pin-spec-item .market-price {
+  text-decoration: line-through;
+  color: #999;
+  font-size: 22rpx;
+  margin-left: 10rpx;
+}
+
+.pin-spec-item .pin-tag {
+  display: inline-block;
+  font-size: 22rpx;
+  padding: 0 6rpx;
+  margin-right: 10rpx;
+  border: 0.1rpx solid #ff5344;
+  vertical-align: middle;
+  color: #ff5344;
+  border-radius: 4rpx;
+}
+
+/* 标签 */
+
+.pin-spec .item-tag {
+  position: absolute;
+  left: 20rpx;
+  top: 20rpx;
+  width: 54rpx;
+  height: 62rpx;
+  z-index: 1;
+  color: #fff;
+  text-align: center;
+}
+
+.item-tag-bg {
+  position: absolute;
+  left: 0;
+  top: 0;
+  width: 54rpx;
+  height: 62rpx;
+  z-index: 0;
+}
+
+.pin-spec .item-tag .tag-name {
+  position: relative;
+  padding-top: 6rpx;
+  font-size: 20rpx;
+  line-height: 1;
+  font-weight: 600;
+  z-index: 1;
+}
+
+.pin-spec .item-tag .tag-name.two-word {
+  font-size: 22rpx;
+  padding-top: 14rpx;
+}
+
+.pin-s2-tit {
+  width: 240rpx;
+  height: 70rpx;
+  line-height: 70rpx;
+}
+
+.pin-s2 .pin-img {
+  width: 200rpx;
+  height: 200rpx;
+  margin-bottom: 0;
+}
+
+.pin-s2 .act-end {
+  position: absolute;
+  height: 60rpx;
+  border-radius: 10rpx;
+  background: rgba(0, 0, 0, 0.5);
+  color: #fff;
+  font-size: 24rpx;
+  text-align: center;
+  line-height: 60rpx;
+  left: 50%;
+  top: 80rpx;
+  padding: 0 12rpx;
+  transform: translateX(-50%);
+}
+
+.pin-s2 .title {
+  height: 64rpx;
+}
+
+.pin-s2 .label {
+  padding: 4rpx 12rpx 6rpx;
+  line-height: 1;
+  font-size: 75%;
+  font-weight: 700;
+  color: #fff;
+  text-align: center;
+  white-space: nowrap;
+}
+
+.pin-s2 .label .tag {
+  height: 30rpx;
+  line-height: 30rpx;
+  border: 1rpx solid #FF4544;
+  border-radius: 4rpx;
+  margin-right: 10rpx;
+}
+
+.pin-s2 .label .tag.label-person .iconfont {
+  display: inline-block;
+  width: 30rpx;
+  height: 30rpx;
+  background-color: #FF4544;
+  font-size: 18rpx;
+  color: #FFFFFF;
+  text-align: center;
+}
+
+.pin-s2 .label .label-name {
+  font-size: 20rpx;
+  padding: 0 10rpx;
+  color: #FF4544;
+}
+
+.pin-s2 .bot {
+  line-height: 1;
+}
+
+.pin-s2 .bot .content-price {
+  display: flex;
+  align-items: flex-end;
+  font-size: 24rpx;
+  color: #FF4544;
+  margin-top: 20rpx;
+  height: 32rpx;
+  font-weight: 600;
+}
+
+.content-num {
+  font-weight: 500;
+  margin-top: 0;
+  font-size: 24rpx;
+  line-height: 24rpx;
+  color: #909399;
+  text-decoration: line-through;
+}
+
+.pin-s2-item-r {
+  display: flex;
+  flex-direction: column;
+  justify-content: space-between;
+  border-bottom: 1rpx solid #EEEEEE;
+}
+
+.pin-s2 .pin-s2-item:last-child .pin-s2-item-r {
+  border-bottom: 0;
+}
+
+.pin-s2-btn {
+  background-color: #FF4544;
+  width: 160rpx;
+  height: 50rpx;
+  line-height: 50rpx;
+  text-align: center;
+  border-radius: 50rpx;
+  font-size: 28rpx;
+  color: #FFFFFF;
+}
+
+.pin-s3-tit {
+  width: 348rpx;
+  height: 74rpx;
+  text-align: center;
+  line-height: 74rpx;
+}

+ 23 - 0
前端-20230727/lionfish_comshop/components/empty/index.js

@@ -0,0 +1,23 @@
+// lionfish_comshop/components/empty/index.js
+Component({
+  /**
+   * 组件的属性列表
+   */
+  properties: {
+
+  },
+
+  /**
+   * 组件的初始数据
+   */
+  data: {
+
+  },
+
+  /**
+   * 组件的方法列表
+   */
+  methods: {
+
+  }
+})

+ 4 - 0
前端-20230727/lionfish_comshop/components/empty/index.json

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

+ 4 - 0
前端-20230727/lionfish_comshop/components/empty/index.wxml

@@ -0,0 +1,4 @@
+<view class="none-rush-list">
+  <image class="img-block" src="../../images/icon-index-empty.png"></image>
+  <view class="h1"><slot></slot></view>
+</view>

Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff