From e03417edfeaf52c017e4a5539f3b41ad0204a2f0 Mon Sep 17 00:00:00 2001
From: 闫增涛 <1829501689@qq.com>
Date: 星期二, 05 三月 2024 19:03:51 +0800
Subject: [PATCH] Merge branch 'master' of http://182.92.203.7:2001/r/jsek-applet

---
 pages/goods/details/components/buy-bar/index.wxml           |   61 
 pages/personalCenter/myCollection/index.json                |   10 
 static/video/sea.mp4                                        |    0 
 pages/personalCenter/feedBack/index.js                      |  169 +
 pages/bookExhibitionDetails/index.js                        |   10 
 services/home/home.js                                       |    4 
 static/images/personal/suggestion.png                       |    0 
 services/cart/cart.js                                       |   32 
 pages/personalCenter/myCollection/index.wxss                |  145 +
 pages/personalCenter/certificate/index.wxss                 |    1 
 pages/personalCenter/myOrder/index.js                       |  186 +
 pages/personalCenter/feedBackSubmit/index.js                |   88 
 pages/aboutUs/index.wxml                                    |   31 
 pages/bibliographyList/index.json                           |    9 
 static/images/bibliographyList/download.png                 |    0 
 pages/personalCenter/index.js                               |    4 
 pages/home/home.wxss                                        |   56 
 pages/bookExhibitionDetails/index.wxss                      |   17 
 pages/cart/index.wxml                                       |   67 
 pages/personalCenter/feedBack/index.wxss                    |  104 +
 pages/cart/paymentPage/index.wxss                           |  144 +
 pages/bookExhibitionList/index.wxml                         |   28 
 pages/resourceDetails/index.wxml                            |   13 
 pages/retrievalPage/index.wxml                              |  164 +
 pages/cart/index.js                                         |  366 --
 pages/cart/paymentPage/index.json                           |   10 
 pages/cart/paymentPage/js/weapp.qrcode.js                   | 1281 ++++++++++++
 pages/cart/paymentPage/index.js                             |  200 ++
 pages/bibliographyList/index.wxss                           |   97 
 static/images/bibliographyList/downloadshiftin.png          |    0 
 pages/bibliographyList/index.js                             |  269 ++
 pages/personalCenter/myOrder/index.wxml                     |   76 
 pages/aboutUs/index.json                                    |    7 
 pages/personalCenter/feedBackSubmit/index.wxml              |   27 
 components/goods-card/index.wxss                            |    2 
 pages/personalCenter/feedBackSubmit/index.wxss              |   31 
 static/images/bookExhibitionList/banner.png                 |    0 
 pages/home/home.js                                          |  126 +
 pages/goods/details/components/buy-bar/index.js             |   19 
 pages/retrievalPage/index.json                              |   10 
 pages/bookExhibitionList/index.js                           |   40 
 pages/personalCenter/feedBack/index.json                    |   10 
 pages/resourceDetails/index.js                              |   76 
 pages/bookServices/assort/index.js                          |    4 
 pages/personalCenter/components/user-center-card/index.wxml |    2 
 pages/resourceDetails/index.json                            |    6 
 pages/aboutUs/index.js                                      |  142 +
 pages/personalCenter/myCollection/index.wxml                |   51 
 pages/home/home.wxml                                        |   53 
 pages/retrievalPage/index.js                                |  522 +++++
 pages/aboutUs/index.wxss                                    |   20 
 pages/cart/index.wxss                                       |  176 +
 static/images/default-book-img.png                          |    0 
 pages/personalCenter/myOrder/index.json                     |   12 
 pages/cart/paymentPage/index.wxml                           |   74 
 pages/bookExhibitionList/index.wxss                         |   43 
 pages/resourceDetails/index.wxss                            |   25 
 pages/personalCenter/feedBack/index.wxml                    |   57 
 pages/retrievalPage/index.wxss                              |  289 ++
 app.json                                                    |   10 
 /dev/null                                                   |   68 
 pages/cart/index.json                                       |   11 
 static/images/personal/quxiaoshoucang.png                   |    0 
 pages/personalCenter/myCollection/index.js                  |  171 +
 pages/bibliographyList/index.wxml                           |   84 
 pages/personalCenter/myMassage/index.js                     |    3 
 pages/personalCenter/myOrder/index.wxss                     |  169 +
 67 files changed, 5,381 insertions(+), 601 deletions(-)

diff --git a/app.json b/app.json
index ea01e60..d43ff7c 100644
--- a/app.json
+++ b/app.json
@@ -1,11 +1,17 @@
 {
   "pages": [
+    "pages/resourceDetails/index",
+    "pages/retrievalPage/index",
+    "pages/cart/paymentPage/index",
+    "pages/cart/index",
     "pages/home/home",
+    "pages/aboutUs/index",
     "pages/bookServices/assort/index",
     "pages/bookServices/detail/index",
     "pages/bookServices/list/index",
     "pages/bookExhibitionList/index",
     "pages/bookExhibitionDetails/index",
+    "pages/bibliographyList/index",
     "pages/usercenter/index",
     "pages/usercenter/person-info/index",
     "pages/usercenter/address/list/index",
@@ -15,7 +21,6 @@
     "pages/goods/category/index",
     "pages/goods/search/index",
     "pages/goods/result/index",
-    "pages/cart/index",
     "pages/order/order-confirm/index",
     "pages/order/receipt/index",
     "pages/order/pay-result/index",
@@ -96,7 +101,8 @@
     "backgroundTextStyle": "light",
     "navigationBarBackgroundColor": "#fff",
     "navigationBarTitleText": "浜笀E璇�",
-    "navigationBarTextStyle": "black"
+    "navigationBarTextStyle": "black",
+    " navigationStyle": "custom"
   },
   "sitemapLocation": "sitemap.json",
   "permission": {
diff --git a/components/goods-card/index.wxss b/components/goods-card/index.wxss
index 1326d59..6a3efe2 100644
--- a/components/goods-card/index.wxss
+++ b/components/goods-card/index.wxss
@@ -130,4 +130,4 @@
 
 .spec-for-symbol {
   font-size: 24rpx;
-}
+}
\ No newline at end of file
diff --git a/pages/aboutUs/index.js b/pages/aboutUs/index.js
new file mode 100644
index 0000000..135af2c
--- /dev/null
+++ b/pages/aboutUs/index.js
@@ -0,0 +1,142 @@
+// pages/aboutUs/index.js
+const app = getApp()
+// import drawQrcode from './js/weapp.qrcode'
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    aboutText: null,
+    swiperList: null,
+    current: 1,//杞挱鍥惧弬鏁�
+    autoplay: true, //杞挱鍥惧弬鏁�
+    duration: '500',//杞挱鍥惧弬鏁�
+    interval: 5000,//杞挱鍥惧弬鏁�
+    navigation: { type: 'dots' },//杞挱鍥惧弬鏁�
+    bannerList: [], //杞挱鍥惧垪琛�
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+
+    this.getBanner()
+    this.getAboutText()
+
+
+    // drawQrcode({
+
+    //   width: 200, // 蹇呴』锛屼簩缁寸爜瀹藉害锛屼笌canvas鐨剋idth淇濇寔涓�鑷�
+
+    //   height: 200, // 蹇呴』锛屼簩缁寸爜楂樺害锛屼笌canvas鐨刪eight淇濇寔涓�鑷�
+
+    //   canvasId: 'myQrcode',
+
+    //   background: '#ffffff', //	闈炲繀椤伙紝浜岀淮鐮佽儗鏅鑹诧紝榛樿鍊肩櫧鑹�
+
+    //   foreground: '#000', // 闈炲繀椤伙紝浜岀淮鐮佸墠鏅壊锛岄粯璁ゅ�奸粦鑹� 	'#000000'
+
+    //   // ctx: wx.createCanvasContext('myQrcode'), // 闈炲繀椤伙紝缁樺浘涓婁笅鏂囷紝鍙�氳繃 wx.createCanvasContext('canvasId') 鑾峰彇锛寁1.0.0+鐗堟湰鏀寔
+
+    //   text: '13216549865',  // 蹇呴』锛屼簩缁寸爜鍐呭
+    //   // v1.0.0+鐗堟湰鏀寔鍦ㄤ簩缁寸爜涓婄粯鍒跺浘鐗�
+
+    //   image: {
+    //     // imageResource: '../../images/icon.png', // 鎸囧畾浜岀淮鐮佸皬鍥炬爣
+    //     dx: 70,
+    //     dy: 70,
+    //     dWidth: 60,
+    //     dHeight: 60
+    //   }
+    // })
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚
+   */
+  onReady() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
+   */
+  onShow() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰闅愯棌
+   */
+  onHide() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍗歌浇
+   */
+  onUnload() {
+
+  },
+
+  /**
+   * 椤甸潰鐩稿叧浜嬩欢澶勭悊鍑芥暟--鐩戝惉鐢ㄦ埛涓嬫媺鍔ㄤ綔
+   */
+  onPullDownRefresh() {
+
+  },
+
+  /**
+   * 椤甸潰涓婃媺瑙﹀簳浜嬩欢鐨勫鐞嗗嚱鏁�
+   */
+  onReachBottom() {
+
+  },
+
+  /**
+   * 鐢ㄦ埛鐐瑰嚮鍙充笂瑙掑垎浜�
+   */
+  onShareAppMessage() {
+
+  },
+  getBanner() {
+
+    app.MG.resource.getItem({
+      path: 'jsek_banner\\jsek_aboutUsBanner',
+      paging: { start: 0, size: 9 },
+
+      fields: {
+        jsek_link: []
+      }
+    }).then(res => {
+
+      this.setData({
+        bannerList: res.datas[0].icon,
+        swiperList: res.datas[0].icon
+      })
+      console.log(this.data.bannerList, 789);
+    })
+  },
+  getAboutText() {
+    app.MG.resource.getItem({
+      path: 'jsek_aboutUs',
+      fields: {
+        content: []
+      },
+      coverSize: {
+        width: 750
+      },
+    }).then(res => {
+      console.log(res);
+
+      this.setData({
+        aboutText: res.datas[0].content
+      })
+
+
+    })
+  }
+})
\ No newline at end of file
diff --git a/pages/aboutUs/index.json b/pages/aboutUs/index.json
new file mode 100644
index 0000000..45f3c00
--- /dev/null
+++ b/pages/aboutUs/index.json
@@ -0,0 +1,7 @@
+{
+  "component": true,
+  "usingComponents": {
+    "t-swiper": "tdesign-miniprogram/swiper/swiper",
+    "t-swiper-nav": "tdesign-miniprogram/swiper-nav/swiper-nav"
+  }
+}
\ No newline at end of file
diff --git a/pages/aboutUs/index.wxml b/pages/aboutUs/index.wxml
new file mode 100644
index 0000000..9b311d6
--- /dev/null
+++ b/pages/aboutUs/index.wxml
@@ -0,0 +1,31 @@
+<!--pages/aboutUs/index.wxml-->
+<!-- <text>鍏充簬鎴戜滑</text> -->
+
+
+
+<!-- 浜岀淮鐮佸睍绀� -->
+<!-- <view class="">
+	<canvas style="width: 200px; height: 200px;margin:0 auto" canvas-id="myQrcode"></canvas>
+</view> -->
+
+
+
+
+
+
+<!-- <view class="swiper-wrap">
+  <t-swiper list="{{bannerList}}" current="{{current}}" autoplay="{{autoplay}}" duration="{{duration}}" interval="{{interval}}" navigation="{{navigation}}" />
+</view> -->
+
+
+
+
+
+<view class="aboutUs">
+  <view class="imageBox">
+    <image src="{{swiperList}}" alt="" />
+  </view>
+  <view class="aboutText">
+    <rich-text nodes="{{aboutText}}"></rich-text>
+  </view>
+</view>
\ No newline at end of file
diff --git a/pages/aboutUs/index.wxss b/pages/aboutUs/index.wxss
new file mode 100644
index 0000000..5a434ed
--- /dev/null
+++ b/pages/aboutUs/index.wxss
@@ -0,0 +1,20 @@
+/* pages/aboutUs/index.wxss */
+image {
+  width: 100%;
+  height: 100%;
+}
+
+.imageBox {
+  width: 690rpx;
+  height: 300rpx;
+  margin-bottom: 35rpx;
+}
+
+.aboutUs {
+  margin: 30rpx;
+
+}
+
+.aboutText {
+  padding-bottom: 100rpx;
+}
\ No newline at end of file
diff --git a/pages/bibliographyList/index.js b/pages/bibliographyList/index.js
new file mode 100644
index 0000000..cab19a3
--- /dev/null
+++ b/pages/bibliographyList/index.js
@@ -0,0 +1,269 @@
+// pages/bibliographyList/index.js
+const app = getApp()
+const config =
+  Page({
+
+    /**
+     * 椤甸潰鐨勫垵濮嬫暟鎹�
+     */
+    data: {
+      higherList: [],
+      vocationalList: [],
+      teacherList: [],
+      higherTotal: 0,
+      vocationalTotal: 0,
+      teacherTotal: 0,
+      value: '',
+      BarHeight: '',
+      navBarHeight: ''
+    },
+
+    /**
+     * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+     */
+    onLoad(options) {
+      this.higherGet()
+      this.vocationalGet()
+      this.teacherGet()
+
+
+      //鑾峰彇绯荤粺淇℃伅锛岀姸鎬佹爮楂樺害涓簊ysInfo['statusBarHeight'];
+      let sysInfo = wx.getSystemInfoSync();
+      let menu = wx.getMenuButtonBoundingClientRect(); //鑳跺泭淇℃伅
+      let navBarHeight = (menu.top - sysInfo.statusBarHeight) * 2 + menu.height; // 瀵艰埅鏍忛珮搴� 
+      this.setData({
+        BarHeight: sysInfo.statusBarHeight, navBarHeight: navBarHeight
+      })
+
+
+
+
+
+
+
+    },
+
+    /**
+     * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚
+     */
+    onReady() {
+
+    },
+
+    /**
+     * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
+     */
+    onShow() {
+      console.log(this.data.value);
+    },
+
+    /**
+     * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰闅愯棌
+     */
+    onHide() {
+
+    },
+
+    /**
+     * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍗歌浇
+     */
+    onUnload() {
+
+    },
+
+    /**
+     * 椤甸潰鐩稿叧浜嬩欢澶勭悊鍑芥暟--鐩戝惉鐢ㄦ埛涓嬫媺鍔ㄤ綔
+     */
+    onPullDownRefresh() {
+
+    },
+
+    /**
+     * 椤甸潰涓婃媺瑙﹀簳浜嬩欢鐨勫鐞嗗嚱鏁�
+     */
+    onReachBottom() {
+
+    },
+
+    /**
+     * 鐢ㄦ埛鐐瑰嚮鍙充笂瑙掑垎浜�
+     */
+    onShareAppMessage() {
+
+    },
+    onTabsChange(event) {
+      console.log(`Change tab, tab-panel value is ${event.detail.value}.`);
+    },
+
+    onTabsClick(event) {
+      console.log(`Click tab, tab-panel value is ${event.detail.value}.`);
+    },
+    //楂樼瓑鏁欒偛
+    higherGet(keyword) {
+      let searchObj = {
+        'Name*': keyword,
+        '||author*': keyword,
+        '||isbn*': keyword
+
+      }
+
+      app.MG.resource.getItem({
+        path: 'jsek_biblioClassification\\jsek_bCHigherEducation',
+        queryType: '*',
+        paging: {
+          start: '0',
+          size: '999'
+        },
+        coverSize: {
+          width: 260
+        },
+        fields: {
+          jsek_link: [],
+          content: [],
+          subtitle: [],
+          fileType: [],
+          jsek_resource: [],
+          freeFile: [],
+          ...searchObj,
+        },
+        SysType: 'CmsItem'
+      }).then(res => {
+
+        res.datas.forEach(item => {
+          item.determine = true
+        })
+        console.log(res, 789111);
+        this.setData({
+          higherList: res.datas,
+          higherTotal: res.total
+        })
+        console.log(this.data.higherList, '5555');
+      })
+
+
+    },
+
+    //鏁欏笀鏁欒偛
+    vocationalGet(keyword) {
+      let searchObj = {
+        'Name*': keyword,
+        '||author*': keyword,
+        '||isbn*': keyword
+
+      }
+      app.MG.resource.getItem({
+        path: 'jsek_biblioClassification\\jsek_bCVocationalEducation',
+        queryType: '*',
+        paging: {
+          start: '0',
+          size: '999'
+        },
+        coverSize: {
+          width: 260
+        },
+        fields: {
+          jsek_link: [],
+          content: [],
+          subtitle: [],
+          fileType: [],
+          jsek_resource: [],
+          freeFile: [],
+          ...searchObj
+        },
+        SysType: 'CmsItem'
+      }).then(res => {
+        res.datas.forEach(item => {
+          item.determine = true
+        })
+        this.setData({
+          vocationalList: res.datas,
+          vocationalTotal: res.total
+        })
+
+      })
+    },
+    // 鑱屼笟鏁欒偛
+    teacherGet(keyword) {
+      let searchObj = {
+        'Name*': keyword,
+        '||author*': keyword,
+        '||isbn*': keyword
+
+      }
+      app.MG.resource.getItem({
+        path: 'jsek_biblioClassification\\jsek_bCTeacherEducation',
+        queryType: '*',
+        paging: {
+          start: '0',
+          size: '999'
+        },
+        coverSize: {
+          width: 260
+        },
+        fields: {
+          jsek_link: [],
+          content: [],
+          subtitle: [],
+          fileType: [],
+          jsek_resource: [],
+          freeFile: [],
+          ...searchObj
+        },
+        SysType: 'CmsItem'
+      }).then(res => {
+        res.datas.forEach(item => {
+          item.determine = true
+        })
+        this.setData({
+          teacherList: res.datas,
+          teacherTotal: res.total
+        })
+
+      })
+
+
+    },
+    downloadData(event) {
+      console.log(111);
+      const item = event.currentTarget.dataset.item;
+      // console.log(item.datas.freeFile.Value);
+      const URL = 'http://182.92.203.7:3001/file/api/ApiDownload?md5=' + item.datas.freeFile.Value
+      item.determine = false
+
+      setTimeout(() => {
+        if (URL) {
+          item.determine = true
+        }
+      }, 600)
+      wx.downloadFile({
+        url: URL,
+        success: function (res) {
+          const filePath = res.tempFilePath;
+          wx.openDocument({
+            filePath: filePath,
+            success: function (res) {
+              console.log('鎵撳紑鏂囨。鎴愬姛');
+            },
+            fail: function (res) {
+              console.log('鎵撳紑鏂囨。澶辫触', res);
+            }
+          });
+        },
+        fail: function (res) {
+          console.log('涓嬭浇鏂囦欢澶辫触', res);
+        }
+      });
+    },
+    onSearchSubmit: function (e) {
+      const keyword = e.detail.value;
+      // 澶勭悊鎼滅储閫昏緫锛屼緥濡傚彂閫佹悳绱㈣姹傜瓑
+      console.log('鎼滅储鍏抽敭璇嶏細', keyword);
+      this.higherGet(keyword)
+      this.vocationalGet(keyword)
+      this.teacherGet(keyword)
+    },
+
+
+
+
+  })
\ No newline at end of file
diff --git a/pages/bibliographyList/index.json b/pages/bibliographyList/index.json
new file mode 100644
index 0000000..0edd783
--- /dev/null
+++ b/pages/bibliographyList/index.json
@@ -0,0 +1,9 @@
+{
+  "component": true,
+  "usingComponents": {
+    "t-tabs": "tdesign-miniprogram/tabs/tabs",
+    "t-tab-panel": "tdesign-miniprogram/tab-panel/tab-panel",
+    "t-search": "tdesign-miniprogram/search/search"
+  },
+  "navigationStyle": "custom"
+}
\ No newline at end of file
diff --git a/pages/bibliographyList/index.wxml b/pages/bibliographyList/index.wxml
new file mode 100644
index 0000000..8eee1f6
--- /dev/null
+++ b/pages/bibliographyList/index.wxml
@@ -0,0 +1,84 @@
+<!--pages/bibliographyList/index.wxml-->
+
+<view class="example-search">
+  <t-search model:value="{{value}}" placeholder="璇疯緭鍏ヤ功鐩悕绉�" bind:submit="onSearchSubmit" />
+</view>
+
+
+
+
+<!--鐘舵�佹爮楂樺害 -->
+<!-- <view style="width: 100%; height:{{BarHeight}}px;"></view>
+<view style="width: 70%; height:{{navBarHeight}}px;">
+  <view style="position: relative; padding-top: 10rpx;">
+    <view class="iconfont icon-sousuo search_icones"></view>
+    <input class="nav_input" model:value="{{ name }}" placeholder-class="placeholder_class" maxlength="30" bindfocus="bindfocus" bindconfirm="doSearch" placeholder="杈撳叆鍏呯數绔�" />
+  </view>
+</view> -->
+
+
+
+
+
+
+
+
+
+
+<t-tabs defaultValue="{{0}}" bind:change="onTabsChange" bind:click="onTabsClick" t-class="custom-tabs" t-class-content="custom-panel">
+  <t-tab-panel label="楂樼瓑鏁欒偛({{higherTotal}})" value="0">
+    <view class="outsideHigherBox">
+      <view class="higherBox" wx:for="{{higherList}}" wx:key="index" wx:for-item="item" wx:for-index="index">
+        <view class="outsideHigherImageBox">
+          <image class="higherImageBox" src="{{item.icon}}" mode="" />
+          <view class="downloadIcon" bind:tap="downloadData" data-item="{{item}}">
+
+            <image wx:if="{{determine}}" class="download" src="/static/images/bibliographyList/downloadshiftin.png" mode="" />
+            <image wx:else="" class="downloadshiftin" src="/static/images/bibliographyList/download.png" mode="" />
+          </view>
+        </view>
+
+        <view class="higherTextBox">{{item.name}}</view>
+      </view>
+
+    </view>
+
+  </t-tab-panel>
+  <t-tab-panel label="鑱屼笟鏁欒偛({{vocationalTotal}})" value="1">
+    <view class="outsideHigherBox">
+      <view class="higherBox" wx:for="{{vocationalList}}" wx:key="index" wx:for-item="item" wx:for-index="index">
+        <view class="outsideHigherImageBox">
+          <image class="higherImageBox" src="{{item.icon}}" mode="" />
+          <view class="downloadIcon" bind:tap="downloadData" data-item="{{item}}">
+
+            <image wx:if="{{determine}}" class="download" src="/static/images/bibliographyList/downloadshiftin.png" mode="" />
+            <image wx:else="" class="downloadshiftin" src="/static/images/bibliographyList/download.png" mode="" />
+          </view>
+        </view>
+
+        <view class="higherTextBox">{{item.name}}</view>
+      </view>
+
+    </view>
+
+
+  </t-tab-panel>
+  <t-tab-panel label="鏁欏笀鏁欒偛({{teacherTotal}})" value="2">
+    <view class="outsideHigherBox">
+      <view class="higherBox" wx:for="{{teacherList}}" wx:key="index" wx:for-item="item" wx:for-index="index">
+        <view class="outsideHigherImageBox">
+          <image class="higherImageBox" src="{{item.icon}}" mode="" />
+          <view class="downloadIcon" bind:tap="downloadData" data-item="{{item}}">
+
+            <image wx:if="{{determine}}" class="download" src="/static/images/bibliographyList/downloadshiftin.png" mode="" />
+            <image wx:else="" class="downloadshiftin" src="/static/images/bibliographyList/download.png" mode="" />
+          </view>
+        </view>
+
+        <view class="higherTextBox">{{item.name}}</view>
+      </view>
+
+    </view>
+  </t-tab-panel>
+
+</t-tabs>
\ No newline at end of file
diff --git a/pages/bibliographyList/index.wxss b/pages/bibliographyList/index.wxss
new file mode 100644
index 0000000..6ee6962
--- /dev/null
+++ b/pages/bibliographyList/index.wxss
@@ -0,0 +1,97 @@
+/* pages/bibliographyList/index.wxss */
+/* .custom-tabs {
+  margin-bottom: 32rpx;
+}
+
+.custom-panel {
+  height: 120px;
+} */
+
+.higherBox {
+  width: 220rpx;
+  /* height: 390rpx; */
+  box-shadow: 10rpx 10rpx 10rpx 10rpx rgba(0, 0, 0, 0.08);
+  margin: 30rpx 15rpx;
+}
+
+.outsideHigherBox {
+  display: flex;
+  flex-wrap: wrap;
+}
+
+.higherImageBox {
+  width: 190rpx;
+  height: 255rpx;
+  margin: 15rpx;
+}
+
+.higherTextBox {
+  font-weight: bold;
+  font-size: 25rpx;
+  color: #333333;
+  padding: 15rpx;
+  margin-bottom: 10rpx;
+}
+
+.outsideHigherImageBox {
+
+  position: relative;
+}
+
+.downloadIcon {
+  width: 34rpx;
+  height: 34rpx;
+
+  border-radius: 5rpx 5rpx 5rpx 5rpx;
+  background: rgba(0, 0, 0, 0.3);
+  position: absolute;
+  top: 15rpx;
+  right: 15rpx;
+  padding: 10rpx;
+}
+
+
+.download {
+  /* background-color: #8bc34a; */
+  width: 100%;
+  height: 100%;
+
+}
+
+.downloadshiftin {
+  width: 100%;
+  height: 100%;
+}
+
+.example-search {
+  background-color: #fff;
+  padding: 16rpx 32rpx;
+}
+
+
+.search_icones {
+  position: absolute;
+  font-size: 32rpx;
+  height: 32rpx;
+  width: 32rpx;
+  color: var(--gry-col);
+  top: 0px;
+  bottom: 0px;
+  margin: auto 0;
+  padding-left: 30rpx;
+  padding-top: 10rpx;
+  line-height: 32rpx;
+}
+
+/*杈撳叆妗�*/
+.nav_input {
+  border: 1px solid var(--egry-col);
+  border-radius: 40rpx;
+  padding-left: 72rpx;
+  background-color: var(--whi-col);
+  padding-right: 16rpx;
+  font-size: 28rpx;
+  box-sizing: border-box;
+  line-height: 75rpx;
+  height: 75rpx;
+}
\ No newline at end of file
diff --git a/pages/bookExhibitionDetails/index.js b/pages/bookExhibitionDetails/index.js
index 6ab4e9d..27169f6 100644
--- a/pages/bookExhibitionDetails/index.js
+++ b/pages/bookExhibitionDetails/index.js
@@ -6,11 +6,11 @@
    * 椤甸潰鐨勫垵濮嬫暟鎹�
    */
   data: {
-    bookName: null,
-    bookBeginDate: null,
-    bookCreator: null,
-    bookContent: null,
-    bookImage: null,
+    bookName: '',
+    bookBeginDate: '',
+    bookCreator: '',
+    bookContent: '',
+    bookImage: '',
     bookExhibitionList: []
   },
 
diff --git a/pages/bookExhibitionDetails/index.wxss b/pages/bookExhibitionDetails/index.wxss
index bcd48e4..040d155 100644
--- a/pages/bookExhibitionDetails/index.wxss
+++ b/pages/bookExhibitionDetails/index.wxss
@@ -1,13 +1,13 @@
 /* pages/bookExhibitionDetails/index.wxss */
-.headBox {
-  /* width: 750rpx; */
-  text-align: center;
-
-}
+.headBox {}
 
 .titleBox {
   font-weight: 800;
   font-size: 45rpx;
+  display: flex;
+  justify-content: center;
+  padding: 0 30rpx;
+  /* text-indent: 6%; */
 }
 
 .informationBox {
@@ -51,21 +51,20 @@
   margin: 20rpx;
   background: #FFFFFF;
   box-shadow: 0rpx 0rpx 18rpx 2rpx rgba(0, 0, 0, 0.08);
+  padding: 10rpx;
+  box-sizing: border-box;
 }
 
 .booksImageBox {
   width: 240rpx;
   height: 300rpx;
   margin: 30rpx;
-
 }
 
 .outsideBooksImageBox {
   background: #F5F5F5;
-  width: 300rpx;
+  width: 100%;
   margin: 0 auto;
-  margin-top: 15rpx;
-
 }
 
 .booksTextBox {
diff --git a/pages/bookExhibitionList/index.js b/pages/bookExhibitionList/index.js
index c4d4a70..937d286 100644
--- a/pages/bookExhibitionList/index.js
+++ b/pages/bookExhibitionList/index.js
@@ -8,6 +8,8 @@
    * 椤甸潰鐨勫垵濮嬫暟鎹�
    */
   data: {
+    value: '',
+    keyword: '',
     nameSort: null,
     total: null,
     page: {
@@ -17,7 +19,6 @@
     keynoteValue: null,
     filteredItems: [],
     newValue: null,
-    value: '',
     bookExhibitionList: [],
     sorter: {
       value: 'default',
@@ -138,7 +139,10 @@
     wx.showLoading({
       title: '鍔犺浇涓�...',
     })
-
+    let searchObj = {
+      'Name*': this.data.keyword,
+      '||subtitle*': this.data.keyword
+    }
     // console.log(this.data.keynoteValue);
     let sort = {
       Name: this.data.nameSort || 'Desc'
@@ -149,7 +153,8 @@
       queryType: '*',
       fields: {
         jsek_link: [],
-        'bookClassification*': this.data.keynoteValue || []
+        'bookClassification*': this.data.keynoteValue || [],
+        ...searchObj
       },
       paging: this.data.page,
       sort: sort,
@@ -290,13 +295,32 @@
   },
   onSwapRight() {
     // console.log('xxxxxx');
-    this.data.nameSort = 'Asc'
+    // this.data.nameSort = 'Asc'
+
+
+    if (!this.data.nameSort) {
+      this.setData({
+        nameSort: 'Desc',
+      });
+    } else if (this.data.nameSort == 'Desc') {
+      this.setData({
+        nameSort: 'Asc',
+      });
+    } else if (this.data.nameSort == 'Asc') {
+      this.setData({
+        nameSort: '',
+      });
+    }
+
     this.bookExhibitionGet()
+
   },
   onSwapLeft() {
     this.data.nameSort = 'Desc'
     // console.log('sssssss');
     this.bookExhibitionGet()
+
+
   },
   onBookExhibitionDetails: function (event) {
     const item = event.currentTarget.dataset.item;
@@ -304,5 +328,13 @@
     wx.navigateTo({
       url: '/pages/bookExhibitionDetails/index?id=' + item.id // 鍋囪璺宠浆鍒拌鎯呴〉闈紝骞朵紶閫掍簡id鍙傛暟
     });
+  },
+  // 鎼滅储妗�
+  onSearchSubmit(e) {
+    this.setData({
+      keyword: e.detail.value
+    })
+    console.log(this.data.keyword, 'keyword');
+    this.bookExhibitionGet()
   }
 })
\ No newline at end of file
diff --git a/pages/bookExhibitionList/index.wxml b/pages/bookExhibitionList/index.wxml
index 075544a..2e08782 100644
--- a/pages/bookExhibitionList/index.wxml
+++ b/pages/bookExhibitionList/index.wxml
@@ -5,7 +5,7 @@
 
 
 <view class="example-search">
-  <t-search model:value="{{value}}" placeholder="璇疯緭鍏ュ叧閿瘝/涔︾洰/ISBN/浣滆��" />
+  <t-search model:value="{{value}}" placeholder="璇疯緭鍏ュ叧閿瘝/涔︾洰/ISBN/浣滆��" bind:submit="onSearchSubmit" />
 </view>
 
 
@@ -24,24 +24,26 @@
 
 
   </t-dropdown-menu>
-  <view class="sortBox">
+  <view class="sortBox" bind:tap="onSwapRight">
     <text>鎺掑簭</text>
     <view class="iconBox">
-      <t-icon class="swapRight" name="swap-right" size="48rpx" bind:click="onSwapRight" />
-      <t-icon class="swapLeft" name="swap-right" size="48rpx" bind:click="onSwapLeft" />
+      <t-icon class="swapRight" name="swap-right" size="35rpx" color="{{nameSort == 'Asc' ? '#ff6c00' : ''}}" />
+      <t-icon class="swapLeft" name="swap-right" size="35rpx" color="{{nameSort == 'Desc' ? '#ff6c00' : ''}}" />
     </view>
   </view>
 </view>
 
-<view class="titleBox">
-  <view class="frameBox"></view> <text class="titleTextBox"> 绾夸笂涔﹀睍</text>
-</view>
-<view class="outside">
-
-  <view class="contentBox" wx:for="{{bookExhibitionList}}" wx:key="index" wx:for-item="item" wx:for-index="index" bindtap="onBookExhibitionDetails" data-item="{{item}}">
-    <image wx:if="{{item.icon}}" src="{{item.icon}}" mode="" />
-    <image wx:else="" src="./img/banner.png" mode="" />
-    <view class="textBox"> <text>{{item.name}}</text></view>
+<view class="assembleContent">
+  <view class="titleBox">
+    <view class="frameBox"></view> <text class="titleTextBox"> 绾夸笂涔﹀睍</text>
   </view>
+  <view class="outside">
 
+    <view class="contentBox" wx:for="{{bookExhibitionList}}" wx:key="index" wx:for-item="item" wx:for-index="index" bindtap="onBookExhibitionDetails" data-item="{{item}}">
+      <image wx:if="{{item.icon}}" src="{{item.icon}}" mode="" />
+      <image wx:else="" src="/static/images/bookExhibitionList/banner.png" mode="" />
+      <view class="textBox" title="{{item.name}}"> <text>{{item.name}}</text></view>
+    </view>
+
+  </view>
 </view>
\ No newline at end of file
diff --git a/pages/bookExhibitionList/index.wxss b/pages/bookExhibitionList/index.wxss
index f313307..25095c9 100644
--- a/pages/bookExhibitionList/index.wxss
+++ b/pages/bookExhibitionList/index.wxss
@@ -7,54 +7,54 @@
   flex-wrap: wrap;
   justify-content: space-between;
   margin: 15px;
+
+
 }
 
 .contentBox {
   width: 330rpx;
-  height: 130rpx;
+  /* height: 231rpx; */
   /* border: 1px #000 solid; */
   margin: 10px 0;
+  background-color: #fff;
 
 }
 
 image {
-  width: 100%;
-  height: 85%;
+  width: 327rpx;
+  height: 128rpx;
 }
 
 
 .textBox {
+  width: 280rpx;
+  /* height: 75rpx; */
+  font-size: 25rpx;
 
-  width: 320rpx;
-  font-size: 20rpx;
-  /* display: flex;
-  justify-content: center; */
   overflow: hidden;
   text-overflow: ellipsis;
   display: -webkit-box;
   -webkit-box-orient: vertical;
-  -webkit-line-clamp: 1;
-  text-align: center;
+  -webkit-line-clamp: 2;
+  /* text-align: center; */
+  margin: 20rpx;
 
 }
 
 
 .example-search {
-  width: 300px;
+  /* width: 300px; */
   background-color: #fff;
   /* padding: 16rpx 32rpx; */
 }
 
 .iconBox {
   transform: rotate(90deg);
-  /* margin: 10px;
-  margin-right: 20px; */
-  margin-left: 30rpx;
+  margin-left: 10rpx;
 }
 
 .swapRight {
-  /* margin-right: 10px; */
-
+  height: 20rpx;
 }
 
 .swapLeft {
@@ -62,11 +62,14 @@
 }
 
 .sortBox {
+  color: #999999;
   display: flex;
-  border-bottom: 1px #ededed solid;
+  /* border-bottom: 1px #ededed solid; */
   align-items: center;
   height: 86rpx;
   width: 195rpx;
+  margin-top: 8rpx;
+  font-size: 30rpx;
 }
 
 
@@ -75,6 +78,7 @@
   display: flex;
   margin: 10px;
   margin-left: 0;
+  padding-top: 30rpx;
 }
 
 .frameBox {
@@ -94,9 +98,16 @@
 
 .classification {
   width: 550rpx;
+  /* margin-bottom: 50rpx; */
+
 }
 
 .menuBox {
   display: flex;
+  height: 75rpx;
 
+}
+
+.assembleContent {
+  background-color: #F2F3F8;
 }
\ No newline at end of file
diff --git a/pages/bookServices/assort/index.js b/pages/bookServices/assort/index.js
index dd4b99b..a4a3240 100644
--- a/pages/bookServices/assort/index.js
+++ b/pages/bookServices/assort/index.js
@@ -79,7 +79,9 @@
       sort: { type: 'Asc', field: 'LinkOrder' },
     };
     app.MG.store.getStoreChannelList(query).then((res) => {
+
       const list = res.datas.filter((item) => item.refCode != 'jsek_homepageBookService');
+
       this.setData({
         assortList: list,
       });
@@ -118,6 +120,8 @@
       sort: { type: 'Asc', field: 'LinkOrder' },
     };
     app.MG.store.getStoreChannelList(query).then(async (res) => {
+
+      console.log(res, 'res');
       // 涓�绾у垎绫婚�変腑
       this.setData({
         startCheck: res.datas[0].refCode,
diff --git a/pages/cart/components/cart-bar/index.js b/pages/cart/components/cart-bar/index.js
deleted file mode 100644
index db7736c..0000000
--- a/pages/cart/components/cart-bar/index.js
+++ /dev/null
@@ -1,59 +0,0 @@
-Component({
-  options: {
-    addGlobalClass: true,
-  },
-  /**
-   * 缁勪欢鐨勫睘鎬у垪琛�
-   */
-  properties: {
-    isAllSelected: {
-      type: Boolean,
-      value: false,
-    },
-    totalAmount: {
-      type: Number,
-      value: 1,
-    },
-    totalGoodsNum: {
-      type: Number,
-      value: 0,
-      observer(num) {
-        const isDisabled = num == 0;
-        setTimeout(() => {
-          this.setData({
-            isDisabled,
-          });
-        });
-      },
-    },
-    totalDiscountAmount: {
-      type: Number,
-      value: 0,
-    },
-    bottomHeight: {
-      type: Number,
-      value: 100,
-    },
-    fixed: Boolean,
-  },
-  data: {
-    isDisabled: false,
-  },
-
-  methods: {
-    handleSelectAll() {
-      const { isAllSelected } = this.data;
-      this.setData({
-        isAllSelected: !isAllSelected,
-      });
-      this.triggerEvent('handleSelectAll', {
-        isAllSelected: isAllSelected,
-      });
-    },
-
-    handleToSettle() {
-      if (this.data.isDisabled) return;
-      this.triggerEvent('handleToSettle');
-    },
-  },
-});
diff --git a/pages/cart/components/cart-bar/index.json b/pages/cart/components/cart-bar/index.json
deleted file mode 100644
index c6c4351..0000000
--- a/pages/cart/components/cart-bar/index.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-  "component": true,
-  "usingComponents": {
-    "price": "/components/price/index",
-    "t-icon": "tdesign-miniprogram/icon/icon"
-  }
-}
\ No newline at end of file
diff --git a/pages/cart/components/cart-bar/index.wxml b/pages/cart/components/cart-bar/index.wxml
deleted file mode 100644
index 486a0d5..0000000
--- a/pages/cart/components/cart-bar/index.wxml
+++ /dev/null
@@ -1,31 +0,0 @@
-<view class="cart-bar__placeholder" wx:if="{{fixed}}" />
-<view class="cart-bar {{fixed ? 'cart-bar--fixed' : ''}} flex flex-v-center" style="bottom: {{fixed ? 'calc(' + bottomHeight + 'rpx + env(safe-area-inset-bottom))' : ''}};">
-	<t-icon
-	 size="40rpx"
-	 color="{{isAllSelected ? '#FA4126' : '#BBBBBB'}}"
-	 name="{{isAllSelected ? 'check-circle-filled' : 'circle'}}"
-	 class="cart-bar__check"
-	 catchtap="handleSelectAll"
-	/>
-	<text>鍏ㄩ��</text>
-	<view class="cart-bar__total flex1">
-		<view>
-			<text class="cart-bar__total--bold text-padding-right">鎬昏</text>
-			<price
-			 price="{{totalAmount || '0'}}"
-			 fill="{{false}}"
-			 decimalSmaller
-			 class="cart-bar__total--bold cart-bar__total--price"
-			/>
-			<text class="cart-bar__total--normal">锛堜笉鍚繍璐癸級</text>
-		</view>
-		<view wx:if="{{totalDiscountAmount}}">
-			<text class="cart-bar__total--normal text-padding-right">宸蹭紭鎯�</text>
-			<price class="cart-bar__total--normal" price="{{totalDiscountAmount || '0'}}" fill="{{false}}" />
-		</view>
-	</view>
-	<view catchtap="handleToSettle" class="{{!isDisabled ? '' : 'disabled-btn'}} account-btn" hover-class="{{!isDisabled ? '' : 'hover-btn'}}">
-		鍘荤粨绠�({{totalGoodsNum}})
-	</view>
-</view>
-
diff --git a/pages/cart/components/cart-bar/index.wxss b/pages/cart/components/cart-bar/index.wxss
deleted file mode 100644
index 0e63f60..0000000
--- a/pages/cart/components/cart-bar/index.wxss
+++ /dev/null
@@ -1,80 +0,0 @@
-.cart-bar__placeholder {
-  height: 100rpx;
-}
-.flex {
-  display: flex;
-}
-.flex-v-center {
-  align-items: center;
-}
-.flex1 {
-  flex: 1;
-}
-.algin-bottom {
-  text-align: end;
-}
-.cart-bar--fixed {
-  position: fixed;
-  left: 0;
-  right: 0;
-  z-index: 99;
-  bottom: calc(100rpx + env(safe-area-inset-bottom));
-}
-
-.cart-bar {
-  height: 112rpx;
-  background-color: #fff;
-  border-top: 1rpx solid #e5e5e5;
-  padding: 16rpx 32rpx;
-  box-sizing: border-box;
-  font-size: 24rpx;
-  line-height: 36rpx;
-  color: #333;
-}
-
-.cart-bar .cart-bar__check {
-  margin-right: 12rpx;
-}
-
-.cart-bar .cart-bar__total {
-  margin-left: 24rpx;
-}
-
-.cart-bar .account-btn {
-  width: 192rpx;
-  height: 80rpx;
-  border-radius: 40rpx;
-  background-color: #fa4126;
-  font-size: 28rpx;
-  font-weight: bold;
-  line-height: 80rpx;
-  color: #ffffff;
-  text-align: center;
-}
-.cart-bar .disabled-btn {
-  background-color: #cccccc !important;
-}
-.cart-bar .hover-btn {
-  opacity: 0.5;
-}
-
-.cart-bar__total .cart-bar__total--bold {
-  font-size: 28rpx;
-  line-height: 40rpx;
-  color: #333;
-  font-weight: bold;
-}
-.cart-bar__total .cart-bar__total--normal {
-  font-size: 24rpx;
-  line-height: 32rpx;
-  color: #999;
-}
-
-.cart-bar__total .cart-bar__total--price {
-  color: #fa4126;
-  font-weight: bold;
-}
-
-.text-padding-right {
-  padding-right: 4rpx;
-}
diff --git a/pages/cart/components/cart-empty/index.js b/pages/cart/components/cart-empty/index.js
deleted file mode 100644
index 01cf9c3..0000000
--- a/pages/cart/components/cart-empty/index.js
+++ /dev/null
@@ -1,23 +0,0 @@
-Component({
-  properties: {
-    imgUrl: {
-      type: String,
-      value:
-        'https://cdn-we-retail.ym.tencent.com/miniapp/template/empty-cart.png',
-    },
-    tip: {
-      type: String,
-      value: '璐墿杞︽槸绌虹殑',
-    },
-    btnText: {
-      type: String,
-      value: '鍘婚椤�',
-    },
-  },
-  data: {},
-  methods: {
-    handleClick() {
-      this.triggerEvent('handleClick');
-    },
-  },
-});
diff --git a/pages/cart/components/cart-empty/index.json b/pages/cart/components/cart-empty/index.json
deleted file mode 100644
index b659310..0000000
--- a/pages/cart/components/cart-empty/index.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
-  "component": true,
-  "usingComponents": {
-    "t-image": "/components/webp-image/index"
-  }
-}
\ No newline at end of file
diff --git a/pages/cart/components/cart-empty/index.wxml b/pages/cart/components/cart-empty/index.wxml
deleted file mode 100644
index d0cdd43..0000000
--- a/pages/cart/components/cart-empty/index.wxml
+++ /dev/null
@@ -1,6 +0,0 @@
-<view class="cart-empty">
-	<t-image t-class="cart-img" src="{{imgUrl}}" />
-	<view class="tip">{{tip}}</view>
-	<view class="btn" bind:tap="handleClick">{{btnText}}</view>
-</view>
-
diff --git a/pages/cart/components/cart-empty/index.wxss b/pages/cart/components/cart-empty/index.wxss
deleted file mode 100644
index d074bc3..0000000
--- a/pages/cart/components/cart-empty/index.wxss
+++ /dev/null
@@ -1,33 +0,0 @@
-.cart-empty {
-  padding: 64rpx 0rpx;
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-  box-sizing: border-box;
-  height: calc(100vh - 100rpx);
-  background-color: #f5f5f5;
-}
-.cart-empty .cart-img {
-  width: 160rpx;
-  height: 160rpx;
-  margin-bottom: 24rpx;
-}
-
-.cart-empty .tip {
-  font-size: 28rpx;
-  line-height: 40rpx;
-  color: #999;
-  margin-bottom: 24rpx;
-}
-.cart-empty .btn {
-  width: 240rpx;
-  height: 72rpx;
-  border-radius: 36rpx;
-  text-align: center;
-  line-height: 72rpx;
-  border: 2rpx solid #fa4126;
-  color: #fa4126;
-  background-color: transparent;
-  font-size: 28rpx;
-  font-weight: bold;
-}
diff --git a/pages/cart/components/cart-group/index.js b/pages/cart/components/cart-group/index.js
deleted file mode 100644
index 99a908d..0000000
--- a/pages/cart/components/cart-group/index.js
+++ /dev/null
@@ -1,166 +0,0 @@
-import Toast from 'tdesign-miniprogram/toast/index';
-
-const shortageImg =
-  'https://cdn-we-retail.ym.tencent.com/miniapp/cart/shortage.png';
-
-Component({
-  isSpecsTap: false, // 鏍囪鏈鐐瑰嚮浜嬩欢鏄惁鍥犱负鐐瑰嚮specs瑙﹀彂锛堢敱浜庡簳灞俫oods-card缁勪欢娌℃湁catch specs鐐瑰嚮浜嬩欢锛屽彧鑳藉湪姝ゅ鍔犵姸鎬佹潵閬垮厤鐐瑰嚮specs鏃惰Е鍙戣烦杞晢鍝佽鎯咃級
-  externalClasses: ['wr-class'],
-  properties: {
-    storeGoods: {
-      type: Array,
-      observer(storeGoods) {
-        for (const store of storeGoods) {
-          for (const activity of store.promotionGoodsList) {
-            for (const goods of activity.goodsPromotionList) {
-              goods.specs = goods.specInfo.map((item) => item.specValue); // 鐩墠浠呭睍绀哄晢鍝佸凡閫夎鏍肩殑鍊�
-            }
-          }
-          for (const goods of store.shortageGoodsList) {
-            goods.specs = goods.specInfo.map((item) => item.specValue); // 鐩墠浠呭睍绀哄晢鍝佸凡閫夎鏍肩殑鍊�
-          }
-        }
-
-        this.setData({ _storeGoods: storeGoods });
-      },
-    },
-    invalidGoodItems: {
-      type: Array,
-      observer(invalidGoodItems) {
-        invalidGoodItems.forEach((goods) => {
-          goods.specs = goods.specInfo.map((item) => item.specValue); // 鐩墠浠呭睍绀哄晢鍝佸凡閫夎鏍肩殑鍊�
-        });
-        this.setData({ _invalidGoodItems: invalidGoodItems });
-      },
-    },
-    thumbWidth: { type: null },
-    thumbHeight: { type: null },
-  },
-
-  data: {
-    shortageImg,
-    isShowSpecs: false,
-    currentGoods: {},
-    isShowToggle: false,
-    _storeGoods: [],
-    _invalidGoodItems: [],
-  },
-
-  methods: {
-    // 鍒犻櫎鍟嗗搧
-    deleteGoods(e) {
-      const { goods } = e.currentTarget.dataset;
-      this.triggerEvent('delete', { goods });
-    },
-
-    // 娓呯┖澶辨晥鍟嗗搧
-    clearInvalidGoods() {
-      this.triggerEvent('clearinvalidgoods');
-    },
-
-    // 閫変腑鍟嗗搧
-    selectGoods(e) {
-      const { goods } = e.currentTarget.dataset;
-      this.triggerEvent('selectgoods', {
-        goods,
-        isSelected: !goods.isSelected,
-      });
-    },
-
-    changeQuantity(num, goods) {
-      this.triggerEvent('changequantity', {
-        goods,
-        quantity: num,
-      });
-    },
-    changeStepper(e) {
-      const { value } = e.detail;
-      const { goods } = e.currentTarget.dataset;
-      let num = value;
-      if (value > goods.stack) {
-        num = goods.stack;
-      }
-      this.changeQuantity(num, goods);
-    },
-
-    input(e) {
-      const { value } = e.detail;
-      const { goods } = e.currentTarget.dataset;
-      const num = value;
-      this.changeQuantity(num, goods);
-    },
-
-    overlimit(e) {
-      const text =
-        e.detail.type === 'minus'
-          ? '璇ュ晢鍝佹暟閲忎笉鑳藉噺灏戜簡鍝�'
-          : '鍚屼竴鍟嗗搧鏈�澶氳喘涔�999浠�';
-      Toast({
-        context: this,
-        selector: '#t-toast',
-        message: text,
-      });
-    },
-
-    // 鍘诲噾鍗�/鍐嶉�涢��
-    gotoBuyMore(e) {
-      const { promotion, storeId = '' } = e.currentTarget.dataset;
-      this.triggerEvent('gocollect', { promotion, storeId });
-    },
-
-    // 閫変腑闂ㄥ簵
-    selectStore(e) {
-      const { storeIndex } = e.currentTarget.dataset;
-      const store = this.data.storeGoods[storeIndex];
-      const isSelected = !store.isSelected;
-      if (store.storeStockShortage && isSelected) {
-        Toast({
-          context: this,
-          selector: '#t-toast',
-          message: '閮ㄥ垎鍟嗗搧搴撳瓨涓嶈冻',
-        });
-        return;
-      }
-      this.triggerEvent('selectstore', {
-        store,
-        isSelected,
-      });
-    },
-
-    // 灞曞紑/鏀惰捣鍒囨崲
-    showToggle() {
-      this.setData({
-        isShowToggle: !this.data.isShowToggle,
-      });
-    },
-
-    // 灞曠ず瑙勬牸popup
-    specsTap(e) {
-      this.isSpecsTap = true;
-      const { goods } = e.currentTarget.dataset;
-      this.setData({
-        isShowSpecs: true,
-        currentGoods: goods,
-      });
-    },
-
-    hideSpecsPopup() {
-      this.setData({
-        isShowSpecs: false,
-      });
-    },
-
-    goGoodsDetail(e) {
-      if (this.isSpecsTap) {
-        this.isSpecsTap = false;
-        return;
-      }
-      const { goods } = e.currentTarget.dataset;
-      this.triggerEvent('goodsclick', { goods });
-    },
-
-    gotoCoupons() {
-      wx.navigateTo({ url: '/pages/coupon/coupon-list/index' });
-    },
-  },
-});
diff --git a/pages/cart/components/cart-group/index.json b/pages/cart/components/cart-group/index.json
deleted file mode 100644
index 9b8003d..0000000
--- a/pages/cart/components/cart-group/index.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
-  "component": true,
-  "usingComponents": {
-    "t-toast": "tdesign-miniprogram/toast/toast",
-    "t-icon": "tdesign-miniprogram/icon/icon",
-    "t-stepper": "tdesign-miniprogram/stepper/stepper",
-    "swipeout": "/components/swipeout/index",
-    "goods-card": "../../components/goods-card/index",
-    "specs-popup": "../../components/specs-popup/index"
-  }
-}
\ No newline at end of file
diff --git a/pages/cart/components/cart-group/index.wxml b/pages/cart/components/cart-group/index.wxml
deleted file mode 100644
index 9e3c1d9..0000000
--- a/pages/cart/components/cart-group/index.wxml
+++ /dev/null
@@ -1,152 +0,0 @@
-<wxs src="./index.wxs" module="handlePromotion" />
-<wxs src="./utils.wxs" module="utils" />
-
-<view class="cart-group">
-  <view class="goods-wrap" wx:for="{{_storeGoods}}" wx:for-item="store" wx:for-index="si" wx:key="storeId">
-    <view class="cart-store">
-      <t-icon
-        size="40rpx"
-        color="{{store.isSelected ? '#FA4126' : '#BBBBBB'}}"
-        name="{{store.isSelected ? 'check-circle-filled' : 'circle'}}"
-        class="cart-store__check"
-        bindtap="selectStore"
-        data-store-index="{{si}}"
-      />
-      <view class="cart-store__content">
-        <view class="store-title">
-          <t-icon prefix="wr" size="40rpx" color="#333333" name="store" />
-          <view class="store-name">{{store.storeName}}</view>
-        </view>
-        <view class="get-coupon" catch:tap="gotoCoupons">浼樻儬鍒�</view>
-      </view>
-    </view>
-    <block wx:for="{{store.promotionGoodsList}}" wx:for-item="promotion" wx:for-index="promoindex" wx:key="promoindex">
-      <view
-        class="promotion-wrap"
-        wx:if="{{handlePromotion.hasPromotion(promotion.promotionCode)}}"
-        bindtap="gotoBuyMore"
-        data-promotion="{{promotion}}"
-        data-store-id="{{store.storeId}}"
-      >
-        <view class="promotion-title">
-          <view class="promotion-icon">{{promotion.tag}}</view>
-          <view class="promotion-text">{{promotion.description}}</view>
-        </view>
-        <view class="promotion-action action-btn" hover-class="action-btn--active">
-          <view class="promotion-action-label"> {{promotion.isNeedAddOnShop == 1 ? '鍘诲噾鍗�' : '鍐嶉�涢��'}} </view>
-          <t-icon name="chevron-right" size="32rpx" color="#BBBBBB" />
-        </view>
-      </view>
-      <view
-        class="goods-item"
-        wx:for="{{promotion.goodsPromotionList}}"
-        wx:for-item="goods"
-        wx:for-index="gi"
-        wx:key="extKey"
-      >
-        <swipeout right-width="{{ 72 }}">
-          <view class="goods-item-info">
-            <view class="check-wrap" catchtap="selectGoods" data-goods="{{goods}}">
-              <t-icon
-                size="40rpx"
-                color="{{goods.isSelected ? '#FA4126' : '#BBBBBB'}}"
-                name="{{goods.isSelected ? 'check-circle-filled' : 'circle'}}"
-                class="check"
-              />
-            </view>
-            <view class="goods-sku-info">
-              <goods-card
-                layout="horizontal-wrap"
-                thumb-width="{{thumbWidth}}"
-                thumb-height="{{thumbHeight}}"
-                centered="{{true}}"
-                data="{{goods}}"
-                data-goods="{{goods}}"
-                catchspecs="specsTap"
-                catchclick="goGoodsDetail"
-              >
-                <view slot="thumb-cover" class="stock-mask" wx:if="{{goods.shortageStock || goods.stockQuantity <= 3}}">
-                  浠呭墿{{goods.stockQuantity}}浠�
-                </view>
-                <view slot="append-body" class="goods-stepper">
-                  <view class="stepper-tip" wx:if="{{goods.shortageStock}}">搴撳瓨涓嶈冻</view>
-                  <t-stepper
-                    classname="stepper-info"
-                    value="{{goods.quantity}}"
-                    min="{{1}}"
-                    max="{{999}}"
-                    data-goods="{{goods}}"
-                    data-gi="{{gi}}"
-                    data-si="{{si}}"
-                    catchchange="changeStepper"
-                    catchblur="input"
-                    catchoverlimit="overlimit"
-                    theme="filled"
-                  />
-                </view>
-              </goods-card>
-            </view>
-          </view>
-          <view slot="right" class="swiper-right-del" bindtap="deleteGoods" data-goods="{{goods}}"> 鍒犻櫎 </view>
-        </swipeout>
-      </view>
-      <view
-        class="promotion-line-wrap"
-        wx:if="{{handlePromotion.hasPromotion(promotion.promotionCode) && promoindex != (store.promotionGoodsList.length - 2)}}"
-      >
-        <view class="promotion-line" />
-      </view>
-    </block>
-    <block wx:if="{{store.shortageGoodsList.length>0}}">
-      <view
-        class="goods-item"
-        wx:for="{{store.shortageGoodsList}}"
-        wx:for-item="goods"
-        wx:for-index="gi"
-        wx:key="extKey"
-      >
-        <swipeout right-width="{{ 72 }}">
-          <view class="goods-item-info">
-            <view class="check-wrap">
-              <view class="unCheck-icon" />
-            </view>
-            <view class="goods-sku-info">
-              <goods-card
-                layout="horizontal-wrap"
-                thumb-width="{{thumbWidth}}"
-                thumb-height="{{thumbHeight}}"
-                centered="{{true}}"
-                data="{{goods}}"
-                data-goods="{{goods}}"
-                catchspecs="specsTap"
-                catchclick="goGoodsDetail"
-              >
-                <view slot="thumb-cover" class="no-storage-mask" wx:if="{{goods.stockQuantity <=0}}">
-                  <view class="no-storage-content">鏃犺揣</view>
-                </view>
-              </goods-card>
-            </view>
-          </view>
-          <view slot="right" class="swiper-right-del" bindtap="deleteGoods" data-goods="{{goods}}"> 鍒犻櫎 </view>
-        </swipeout>
-      </view>
-      <view
-        class="promotion-line-wrap"
-        wx:if="{{handlePromotion.hasPromotion(promotion.promotionCode) && promoindex != (store.promotionGoodsList.length - 2)}}"
-      >
-        <view class="promotion-line" />
-      </view>
-    </block>
-  </view>
-</view>
-<specs-popup
-  show="{{isShowSpecs}}"
-  title="{{currentGoods.title || ''}}"
-  price="{{currentGoods.price || ''}}"
-  thumb="{{utils.imgCut(currentGoods.thumb, 180, 180)}}"
-  specs="{{currentGoods.specs || []}}"
-  zIndex="{{999}}"
-  bindclose="hideSpecsPopup"
-/>
-
-<t-toast id="t-toast" />
diff --git a/pages/cart/components/cart-group/index.wxs b/pages/cart/components/cart-group/index.wxs
deleted file mode 100644
index 39f1e0b..0000000
--- a/pages/cart/components/cart-group/index.wxs
+++ /dev/null
@@ -1,5 +0,0 @@
-var hasPromotion = function (code) {
-  return code && code !== 'EMPTY_PROMOTION';
-};
-
-module.exports.hasPromotion = hasPromotion;
diff --git a/pages/cart/components/cart-group/index.wxss b/pages/cart/components/cart-group/index.wxss
deleted file mode 100644
index 641101f..0000000
--- a/pages/cart/components/cart-group/index.wxss
+++ /dev/null
@@ -1,335 +0,0 @@
-.cart-group {
-  border-radius: 8rpx;
-}
-.cart-group .goods-wrap {
-  margin-top: 40rpx;
-  background-color: #fff;
-  border-radius: 8rpx;
-  overflow: hidden;
-}
-.cart-group .goods-wrap:first-of-type {
-  margin-top: 0;
-}
-.cart-group .cart-store {
-  height: 96rpx;
-  background-color: #fff;
-  box-sizing: border-box;
-  display: flex;
-  align-items: center;
-  padding: 0rpx 24rpx 0rpx 36rpx;
-}
-.cart-group .cart-store .cart-store__check {
-  padding: 28rpx 32rpx 28rpx 0rpx;
-}
-.cart-group .cart-store__content {
-  box-sizing: border-box;
-  flex: auto;
-  display: flex;
-  align-items: center;
-  justify-content: space-between;
-}
-.cart-group .cart-store__content .store-title {
-  flex: auto;
-  font-size: 28rpx;
-  line-height: 40rpx;
-  color: #333333;
-  display: flex;
-  align-items: center;
-  font-weight: bold;
-  overflow: hidden;
-}
-
-.cart-group .cart-store__content .store-title .wr-store {
-  font-size: 32rpx;
-}
-.cart-group .cart-store__content .store-title .store-name {
-  overflow: hidden;
-  white-space: nowrap;
-  text-overflow: ellipsis;
-  margin-left: 12rpx;
-}
-.cart-group .cart-store__content .get-coupon {
-  width: 112rpx;
-  height: 40rpx;
-  border-radius: 20rpx;
-  background-color: #ffecf9;
-  line-height: 40rpx;
-  text-align: center;
-  font-size: 26rpx;
-  color: #fa4126;
-}
-
-.cart-group .promotion-wrap {
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-  padding: 0rpx 24rpx 32rpx 36rpx;
-  background-color: #ffffff;
-  font-size: 24rpx;
-  line-height: 36rpx;
-  color: #222427;
-}
-.cart-group .promotion-wrap .promotion-title {
-  font-weight: bold;
-  flex: auto;
-  overflow: hidden;
-  margin-right: 20rpx;
-  display: flex;
-  align-items: center;
-}
-.cart-group .promotion-wrap .promotion-title .promotion-icon {
-  flex: none;
-  font-weight: normal;
-  display: inline-block;
-  padding: 0 8rpx;
-  color: #ffffff;
-  background: #fa4126;
-  font-size: 20rpx;
-  height: 32rpx;
-  line-height: 32rpx;
-  margin-right: 16rpx;
-  border-radius: 16rpx;
-}
-.cart-group .promotion-wrap .promotion-title .promotion-text {
-  flex: auto;
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-}
-.cart-group .promotion-wrap .promotion-action {
-  flex: none;
-  color: #333333;
-}
-.cart-group .promotion-line-wrap {
-  background-color: #fff;
-  height: 2rpx;
-  display: flex;
-  justify-content: flex-end;
-}
-.cart-group .promotion-line-wrap .promotion-line {
-  width: 684rpx;
-  height: 2rpx;
-  background-color: #e6e6e6;
-}
-.cart-group .goods-item-info {
-  display: flex;
-  background-color: #fff;
-  align-items: flex-start;
-}
-.cart-group .goods-item-info .check-wrap {
-  margin-top: 56rpx;
-  padding: 20rpx 28rpx 20rpx 36rpx;
-}
-
-.cart-group .goods-item-info .check-wrap .unCheck-icon {
-  box-sizing: border-box;
-  width: 36rpx;
-  height: 36rpx;
-  border-radius: 20rpx;
-  background: #f5f5f5;
-  border: 2rpx solid #bbbbbb;
-}
-
-.cart-group .goods-item-info .goods-sku-info {
-  padding: 0rpx 32rpx 40rpx 0;
-  flex-grow: 1;
-}
-.cart-group .goods-item-info .goods-sku-info .stock-mask {
-  position: absolute;
-  color: #fff;
-  font-size: 24rpx;
-  bottom: 0rpx;
-  background-color: rgba(0, 0, 0, 0.5);
-  width: 100%;
-  height: 40rpx;
-  line-height: 40rpx;
-  text-align: center;
-}
-.cart-group .goods-item-info .goods-sku-info .goods-stepper {
-  position: absolute;
-  right: 0;
-  bottom: 8rpx;
-}
-.cart-group .goods-item-info .goods-sku-info .goods-stepper .stepper-tip {
-  position: absolute;
-  top: -36rpx;
-  right: 0;
-  height: 28rpx;
-  color: #ff2525;
-  font-size: 20rpx;
-  line-height: 28rpx;
-}
-
-.cart-group .shortage-line {
-  width: 662rpx;
-  height: 2rpx;
-  background-color: #e6e6e6;
-  margin: 0 auto;
-}
-.cart-group .shortage-goods-wrap {
-  background-color: #fff;
-}
-.cart-group .shortage-goods-wrap .shortage-tip-title {
-  height: 72rpx;
-  line-height: 72rpx;
-  padding-left: 28rpx;
-  font-size: 24rpx;
-  color: #999;
-}
-.stepper-info {
-  margin-left: auto;
-}
-.invalid-goods-wrap {
-  background-color: #fff;
-  border-radius: 8rpx;
-  margin-top: 40rpx;
-}
-.invalid-goods-wrap .invalid-head {
-  display: flex;
-  justify-content: space-between;
-  padding: 30rpx 20rpx;
-  font-size: 24rpx;
-  border-bottom: 2rpx solid #f6f6f6;
-}
-.invalid-goods-wrap .invalid-head .invalid-title {
-  color: #333;
-  font-size: 28rpx;
-  font-weight: 600;
-}
-.invalid-goods-wrap .invalid-head .invalid-clear {
-  color: #fa4126;
-}
-.invalid-goods-wrap .toggle {
-  display: flex;
-  height: 80rpx;
-  justify-content: center;
-  align-items: center;
-  font-size: 24rpx;
-  color: #fa4126;
-}
-.invalid-goods-wrap .toggle .m-r-6 {
-  margin-right: 6rpx;
-}
-.invalid-goods-wrap .toggle .top-icon {
-  display: inline-block;
-  width: 0;
-  height: 0;
-  border-left: 10rpx solid transparent;
-  border-right: 10rpx solid transparent;
-  border-bottom: 10rpx solid #fa4126;
-}
-.invalid-goods-wrap .toggle .down-icon {
-  display: inline-block;
-  width: 0;
-  height: 0;
-  border-left: 10rpx solid transparent;
-  border-right: 10rpx solid transparent;
-  border-top: 10rpx solid #fa4126;
-}
-.action-btn {
-  display: flex;
-  align-items: center;
-}
-.action-btn .action-btn-arrow {
-  font-size: 20rpx;
-  margin-left: 8rpx;
-}
-.action-btn--active {
-  opacity: 0.5;
-}
-
-.swiper-right-del {
-  height: calc(100% - 40rpx);
-  width: 144rpx;
-  background-color: #fa4126;
-  font-size: 28rpx;
-  color: white;
-  display: flex;
-  justify-content: center;
-  align-items: center;
-}
-.goods-stepper .stepper {
-  border: none;
-  border-radius: 0;
-  height: auto;
-  width: 168rpx;
-  overflow: visible;
-}
-.goods-stepper .stepper .stepper__minus,
-.goods-stepper .stepper .stepper__plus {
-  width: 44rpx;
-  height: 44rpx;
-  background-color: #f5f5f5;
-}
-.goods-stepper .stepper .stepper__minus--hover,
-.goods-stepper .stepper .stepper__plus--hover {
-  background-color: #f5f5f5;
-}
-.goods-stepper .stepper .stepper__minus .wr-icon,
-.goods-stepper .stepper .stepper__plus .wr-icon {
-  font-size: 24rpx;
-}
-.goods-stepper .stepper .stepper__minus {
-  position: relative;
-}
-.goods-stepper .stepper .stepper__minus::after {
-  position: absolute;
-  display: block;
-  content: ' ';
-  left: -20rpx;
-  right: -5rpx;
-  top: -20rpx;
-  bottom: -20rpx;
-  background-color: transparent;
-}
-.goods-stepper .stepper .stepper__plus {
-  position: relative;
-}
-.goods-stepper .stepper .stepper__plus::after {
-  position: absolute;
-  display: block;
-  content: ' ';
-  left: -5rpx;
-  right: -20rpx;
-  top: -20rpx;
-  bottom: -20rpx;
-  background-color: transparent;
-}
-.goods-stepper .stepper .stepper__input {
-  width: 72rpx;
-  height: 44rpx;
-  background-color: #f5f5f5;
-  font-size: 24rpx;
-  color: #222427;
-  font-weight: 600;
-  border-left: none;
-  border-right: none;
-  min-height: 40rpx;
-  margin: 0 4rpx;
-  display: flex;
-  align-items: center;
-}
-
-.goods-sku-info .no-storage-mask {
-  position: absolute;
-  color: #fff;
-  bottom: 0rpx;
-  left: 0rpx;
-  background-color: rgba(0, 0, 0, 0.1);
-  height: 192rpx;
-  width: 192rpx;
-  border-radius: 8rpx;
-  display: flex;
-  justify-content: center;
-  align-items: center;
-}
-
-.no-storage-mask .no-storage-content {
-  width: 128rpx;
-  height: 128rpx;
-  border-radius: 64rpx;
-  background-color: rgba(0, 0, 0, 0.4);
-  text-align: center;
-  line-height: 128rpx;
-  font-size: 28rpx;
-}
diff --git a/pages/cart/components/cart-group/utils.wxs b/pages/cart/components/cart-group/utils.wxs
deleted file mode 100644
index f887eba..0000000
--- a/pages/cart/components/cart-group/utils.wxs
+++ /dev/null
@@ -1,20 +0,0 @@
-module.exports.slice = function(arr) {
-  return arr.slice(0, 2);
-};
-module.exports.imgCut = function(url, width, height) {
-  if (url && (url.slice(0, 5) === 'http:' || url.slice(0, 6) === 'https:' || url.slice(0, 2) === '//')) {
-    var argsStr = 'imageMogr2/thumbnail/!' + width +  'x' + height + 'r';
-    if (url.indexOf('?') > -1) {
-      url = url + '&' + argsStr;
-    } else {
-      url = url + '?' + argsStr;
-    }
-    if (url.slice(0, 5) === 'http:') {
-      url = 'https://' + url.slice(5)
-    }
-    if (url.slice(0, 2) === '//') {
-      url = 'https:' + url
-    }
-  }
-  return url;
-};
diff --git a/pages/cart/components/goods-card/index.js b/pages/cart/components/goods-card/index.js
deleted file mode 100644
index c59658c..0000000
--- a/pages/cart/components/goods-card/index.js
+++ /dev/null
@@ -1,243 +0,0 @@
-Component({
-  options: {
-    multipleSlots: true, // 鍦ㄧ粍浠跺畾涔夋椂鐨勯�夐」涓惎鐢ㄥslot鏀寔
-    addGlobalClass: true,
-  },
-  intersectionObserverContext: null,
-
-  externalClasses: [
-    'card-class',
-    'title-class',
-    'desc-class',
-    'num-class',
-    'thumb-class',
-    'specs-class',
-    'price-class',
-    'origin-price-class',
-    'price-prefix-class',
-  ],
-
-  properties: {
-    hidden: {
-      // 璁剧疆涓簄ull浠h〃涓嶅仛绫诲瀷杞崲
-      type: null,
-      value: false,
-      observer(hidden) {
-        // null灏辨槸浠h〃娌℃湁璁剧疆锛屾病鏈夎缃殑璇濅笉setData锛岄槻姝㈢鍏堢粍浠惰Е鍙戠殑setHidden鎿嶄綔琚鐩�
-        if (hidden !== null) {
-          this.setHidden(!!hidden);
-        }
-      },
-    },
-    id: {
-      type: String,
-      // `goods-card-88888888`
-      // 涓嶈兘鍦ㄨ繖閲屽啓鐢熸垚閫昏緫锛屽鏋滃湪杩欓噷鍐欙紝閭d箞鍋囪鏈夊涓猤oods-list鏃讹紝浠栦滑灏嗗叡浜繖涓��
-      value: '',
-      observer: (id) => {
-        this.genIndependentID(id);
-        if (this.properties.thresholds?.length) {
-          this.createIntersectionObserverHandle();
-        }
-      },
-    },
-    data: {
-      type: Object,
-      observer(goods) {
-        // 鏈塈D鐨勫晢鍝佹墠娓叉煋
-        if (!goods) {
-          return;
-        }
-
-        /** 鍒掔嚎浠锋槸鍚︽湁鏁� */
-        let isValidityLinePrice = true;
-        // 鍒ゆ柇涓�娆″垝绾夸环鏍兼槸鍚﹀悎鐞�
-        if (
-          goods.originPrice &&
-          goods.price &&
-          goods.originPrice < goods.price
-        ) {
-          isValidityLinePrice = false;
-        }
-
-        // 鏁插畾鎹㈣鏁伴噺榛樿鍊�
-        if (goods.lineClamp === undefined || goods.lineClamp <= 0) {
-          // tag鏁扮粍闀垮害 澶т簬0 涓� 鍙
-          // 鎸囧畾鎹㈣涓�1琛�
-          if ((goods.tags?.length || 0) > 0 && !goods.hideKey?.tags) {
-            goods.lineClamp = 1;
-          } else {
-            goods.lineClamp = 2;
-          }
-        }
-
-        this.setData({ goods, isValidityLinePrice });
-      },
-    },
-    layout: {
-      type: String,
-      value: 'horizontal',
-    },
-    thumbMode: {
-      type: String,
-      value: 'aspectFill',
-    },
-    priceFill: {
-      type: Boolean,
-      value: true,
-    },
-    currency: {
-      type: String,
-      value: '楼',
-    },
-    lazyLoad: {
-      type: Boolean,
-      value: false,
-    },
-    centered: {
-      type: Boolean,
-      value: false,
-    },
-    pricePrefix: {
-      type: String,
-      value: '',
-    },
-    /** 鍏冪礌鍙鐩戞帶闃堝��, 鏁扮粍闀垮害澶т簬0灏卞垱寤� */
-    thresholds: {
-      type: Array,
-      value: [],
-      observer(current) {
-        if (current && current.length) {
-          this.createIntersectionObserverHandle();
-        } else {
-          this.clearIntersectionObserverHandle();
-        }
-      },
-    },
-    specsIconClassPrefix: {
-      type: String,
-      value: 'wr',
-    },
-    specsIcon: {
-      type: String,
-      value: 'expand_more',
-    },
-    addCartIconClassPrefix: {
-      type: String,
-      value: 'wr',
-    },
-    addCartIcon: {
-      type: String,
-      value: 'cart',
-    },
-  },
-
-  data: {
-    hiddenInData: false,
-    independentID: '',
-    goods: { id: '' },
-    /** 淇濊瘉鍒掔嚎浠锋牸涓嶅皬浜庡師浠凤紝鍚﹀垯涓嶆覆鏌撳垝绾夸环 */
-    isValidityLinePrice: false,
-  },
-
-  lifetimes: {
-    ready() {
-      this.init();
-    },
-    detached() {
-      this.clear();
-    },
-  },
-
-  methods: {
-    clickHandle() {
-      this.triggerEvent('click', { goods: this.data.goods });
-    },
-    clickThumbHandle() {
-      this.triggerEvent('thumb', { goods: this.data.goods });
-    },
-    clickSpecsHandle() {
-      this.triggerEvent('specs', { goods: this.data.goods });
-    },
-    clickTagHandle(evt) {
-      const { index } = evt.currentTarget.dataset;
-      this.triggerEvent('tag', { goods: this.data.goods, index });
-    },
-    // 鍔犲叆璐墿杞�
-    addCartHandle(e) {
-      const { id } = e.currentTarget;
-      const { id: cardID } = e.currentTarget.dataset;
-      this.triggerEvent('add-cart', {
-        ...e.detail,
-        id,
-        cardID,
-        goods: this.data.goods,
-      });
-    },
-    genIndependentID(id, cb) {
-      let independentID;
-      if (id) {
-        independentID = id;
-      } else {
-        independentID = `goods-card-${~~(Math.random() * 10 ** 8)}`;
-      }
-      this.setData({ independentID }, cb);
-    },
-
-    init() {
-      const { thresholds, id, hidden } = this.properties;
-      if (hidden !== null) {
-        this.setHidden(!!hidden);
-      }
-
-      this.genIndependentID(id || '', () => {
-        if (thresholds && thresholds.length) {
-          this.createIntersectionObserverHandle();
-        }
-      });
-    },
-
-    clear() {
-      this.clearIntersectionObserverHandle();
-    },
-
-    setHidden(hidden) {
-      this.setData({ hiddenInData: !!hidden });
-    },
-
-    createIntersectionObserverHandle() {
-      if (this.intersectionObserverContext || !this.data.independentID) {
-        return;
-      }
-
-      this.intersectionObserverContext = wx
-        .createIntersectionObserver(this, {
-          thresholds: this.properties.thresholds,
-        })
-        .relativeToViewport();
-
-      this.intersectionObserverContext.observe(
-        `#${this.data.independentID}`,
-        (res) => {
-          this.intersectionObserverCB(res);
-        },
-      );
-    },
-    intersectionObserverCB(ob) {
-      this.triggerEvent('ob', {
-        goods: this.data.goods,
-        context: this.intersectionObserverContext,
-        ob,
-      });
-    },
-    clearIntersectionObserverHandle() {
-      if (this.intersectionObserverContext) {
-        try {
-          this.intersectionObserverContext.disconnect();
-        } catch (e) {}
-
-        this.intersectionObserverContext = null;
-      }
-    },
-  },
-});
diff --git a/pages/cart/components/goods-card/index.json b/pages/cart/components/goods-card/index.json
deleted file mode 100644
index d76303b..0000000
--- a/pages/cart/components/goods-card/index.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
-  "component": true,
-  "usingComponents": {
-    "price": "/components/price/index",
-    "t-tag": "tdesign-miniprogram/tag/tag",
-    "t-image": "/components/webp-image/index",
-    "t-icon": "tdesign-miniprogram/icon/icon"
-  }
-}
\ No newline at end of file
diff --git a/pages/cart/components/goods-card/index.wxml b/pages/cart/components/goods-card/index.wxml
deleted file mode 100644
index df4111f..0000000
--- a/pages/cart/components/goods-card/index.wxml
+++ /dev/null
@@ -1,75 +0,0 @@
-<view
-  id="{{independentID}}"
-  class="wr-goods-card card-class {{ layout }} {{ centered ? 'center' : ''}}"
-  bind:tap="clickHandle"
-  data-goods="{{ goods }}"
-  hidden="{{hiddenInData}}"
->
-	<view class="wr-goods-card__main">
-		<view class="wr-goods-card__thumb thumb-class" bind:tap="clickThumbHandle">
-			<!-- data-src 鏄柟渚垮姞璐姩鐢昏鍙栧浘鐗囩敤鐨� -->
-			<t-image
-			  t-class="wr-goods-card__thumb-com"
-			  wx:if="{{ !!goods.thumb && !goods.hideKey.thumb }}"
-			  src="{{ goods.thumb }}"
-			  mode="{{ thumbMode }}"
-			  lazy-load="{{ lazyLoad }}"
-			/>
-			<slot name="thumb-cover" />
-		</view>
-		<view class="wr-goods-card__body">
-			<view class="wr-goods-card__long_content">
-				<view wx:if="{{ goods.title && !goods.hideKey.title }}" class="wr-goods-card__title title-class" style="-webkit-line-clamp: {{ goods.lineClamp }};">
-					<slot name="before-title" />
-					{{ goods.title }}
-				</view>
-				<slot name="after-title" />
-				<view wx:if="{{ goods.desc && !goods.hideKey.desc }}" class="wr-goods-card__desc desc-class">{{ goods.desc }}</view>
-				<slot name="after-desc" />
-				<view wx:if="{{ goods.specs && goods.specs.length > 0 && !goods.hideKey.specs }}" class="wr-goods-card__specs__desc specs-class" bind:tap="clickSpecsHandle">
-					<view class="wr-goods-card__specs__desc-text">{{ goods.specs }}</view>
-					<t-icon name="chevron-down" size="32rpx" color="#999999" />
-				</view>
-				<view class="goods_tips" wx:if="{{goods.stockQuantity !== 0 && goods.quantity >= goods.stockQuantity}}">搴撳瓨涓嶈冻</view>
-			</view>
-			<view class="wr-goods-card__short_content">
-				<block wx:if="{{goods.stockQuantity !== 0}}">
-					<view wx:if="{{ pricePrefix }}" class="wr-goods-card__price__prefix price-prefix-class">{{ pricePrefix }}</view>
-					<slot name="price-prefix" />
-					<view wx:if="{{ goods.price && !goods.hideKey.price }}" class="wr-goods-card__price">
-						<price
-						  wr-class="price-class"
-						  symbol="{{currency}}"
-						  price="{{goods.price}}"
-						  fill="{{priceFill}}"
-						  decimalSmaller
-						/>
-					</view>
-					<view wx:if="{{ goods.originPrice && !goods.hideKey.originPrice && isValidityLinePrice }}" class="wr-goods-card__origin-price">
-						<price
-						  wr-class="origin-price-class"
-						  symbol="{{currency}}"
-						  price="{{goods.originPrice}}"
-						  fill="{{priceFill}}"
-						/>
-					</view>
-					<slot name="origin-price" />
-					<view wx:if="{{goods.num && !goods.hideKey.num}}" class="wr-goods-card__num num-class">
-						<text class="wr-goods-card__num__prefix">x </text>
-						{{ goods.num }}
-					</view>
-				</block>
-				<block wx:else>
-					<view class="no_storage">
-						<view>璇烽噸鏂伴�夋嫨鍟嗗搧瑙勬牸</view>
-						<view class="no_storage__right">閲嶉��</view>
-					</view>
-				</block>
-			</view>
-			<slot name="append-body" />
-		</view>
-		<slot name="footer" />
-	</view>
-	<slot name="append-card" />
-</view>
-
diff --git a/pages/cart/components/goods-card/index.wxss b/pages/cart/components/goods-card/index.wxss
deleted file mode 100644
index 6a7a4da..0000000
--- a/pages/cart/components/goods-card/index.wxss
+++ /dev/null
@@ -1,260 +0,0 @@
-.wr-goods-card {
-  box-sizing: border-box;
-  font-size: 24rpx;
-}
-/*  */
-.wr-goods-card__main {
-  position: relative;
-  display: flex;
-  padding: 0;
-  background: transparent;
-}
-
-.wr-goods-card.center .wr-goods-card__main {
-  align-items: flex-start;
-  justify-content: center;
-}
-
-.wr-goods-card__thumb {
-  flex-shrink: 0;
-  position: relative;
-  width: 140rpx;
-  height: 140rpx;
-}
-
-.wr-goods-card__thumb-com {
-  width: 192rpx;
-  height: 192rpx;
-  border-radius: 8rpx;
-  overflow: hidden;
-}
-.wr-goods-card__thumb:empty {
-  display: none;
-  margin: 0;
-}
-
-.wr-goods-card__body {
-  display: flex;
-  margin: 0 0 0 20rpx;
-  flex-direction: row;
-  flex: 1 1 auto;
-  min-height: 192rpx;
-}
-
-.wr-goods-card__long_content {
-  display: flex;
-  flex-direction: column;
-  overflow: hidden;
-  flex: 1 1 auto;
-}
-.wr-goods-card__long_content .goods_tips {
-  width: 100%;
-  margin-top: 16rpx;
-  text-align: right;
-  color: #fa4126;
-  font-size: 24rpx;
-  line-height: 32rpx;
-  font-weight: bold;
-}
-.wr-goods-card__title {
-  flex-shrink: 0;
-  font-size: 28rpx;
-  color: #333;
-  line-height: 40rpx;
-  font-weight: 400;
-  display: -webkit-box;
-  -webkit-box-orient: vertical;
-  overflow: hidden;
-  word-break: break-word;
-}
-.wr-goods-card__title__prefix-tags {
-  display: inline-flex;
-}
-.wr-goods-card__title__prefix-tags .prefix-tag {
-  margin: 0 8rpx 0 0;
-}
-.wr-goods-card__desc {
-  font-size: 24rpx;
-  color: #f5f5f5;
-  line-height: 40rpx;
-  display: -webkit-box;
-  -webkit-box-orient: vertical;
-  -webkit-line-clamp: 2;
-  overflow: hidden;
-}
-.wr-goods-card__specs__desc,
-.wr-goods-card__specs__text {
-  font-size: 24rpx;
-  height: 32rpx;
-  line-height: 32rpx;
-  color: #999999;
-  margin: 8rpx 0;
-}
-.wr-goods-card__specs__desc {
-  display: flex;
-  align-self: flex-start;
-  flex-direction: row;
-  background: #f5f5f5;
-  border-radius: 8rpx;
-  padding: 4rpx 8rpx;
-}
-.wr-goods-card__specs__desc-text {
-  height: 100%;
-  max-width: 380rpx;
-  word-break: break-all;
-  overflow: hidden;
-  display: -webkit-box;
-  -webkit-box-orient: vertical;
-  -webkit-line-clamp: 1;
-}
-.wr-goods-card__specs__desc-icon {
-  line-height: inherit;
-  margin-left: 8rpx;
-  font-size: 24rpx;
-  color: #bbb;
-}
-.wr-goods-card__specs__text {
-  display: -webkit-box;
-  -webkit-box-orient: vertical;
-  -webkit-line-clamp: 1;
-  overflow: hidden;
-  text-overflow: ellipsis;
-  word-break: break-all;
-}
-.wr-goods-card__tags {
-  display: flex;
-  flex-direction: row;
-  flex-wrap: wrap;
-  margin: 16rpx 0 0 0;
-}
-.wr-goods-card__tag {
-  color: #fa550f;
-  background: transparent;
-  font-size: 20rpx;
-  border: 1rpx solid #fa550f;
-  padding: 0 8rpx;
-  height: 30rpx;
-  line-height: 30rpx;
-  margin: 0 8rpx 8rpx 0;
-  display: block;
-  overflow: hidden;
-  white-space: nowrap;
-  word-break: keep-all;
-  text-overflow: ellipsis;
-}
-.wr-goods-card__short_content {
-  display: flex;
-  flex-direction: column;
-  justify-content: flex-start;
-  align-items: flex-end;
-  margin: 0 0 0 46rpx;
-}
-.wr-goods-card__price__prefix {
-  order: 0;
-  color: #666;
-  margin: 0;
-}
-.wr-goods-card__price {
-  white-space: nowrap;
-  font-weight: bold;
-  order: 1;
-  color: #fa4126;
-  font-size: 36rpx;
-  margin: 0;
-  line-height: 48rpx;
-}
-.wr-goods-card__origin-price {
-  white-space: nowrap;
-  font-weight: normal;
-  order: 2;
-  color: #aaaaaa;
-  font-size: 24rpx;
-  margin: 0;
-}
-.wr-goods-card__num {
-  white-space: nowrap;
-  order: 4;
-  font-size: 24rpx;
-  color: #999;
-  margin: 20rpx 0 0 auto;
-}
-.wr-goods-card__num__prefix {
-  color: inherit;
-}
-.wr-goods-card__add-cart {
-  order: 3;
-  margin: auto 0 0 auto;
-}
-.wr-goods-card.horizontal-wrap .wr-goods-card__thumb {
-  width: 192rpx;
-  height: 192rpx;
-  border-radius: 8rpx;
-  overflow: hidden;
-}
-.wr-goods-card.horizontal-wrap .wr-goods-card__body {
-  flex-direction: column;
-}
-.wr-goods-card.horizontal-wrap .wr-goods-card__short_content {
-  flex-direction: row;
-  align-items: center;
-  margin: 16rpx 0 0 0;
-}
-
-.wr-goods-card.horizontal-wrap .wr-goods-card__num {
-  margin: 0 0 0 auto;
-}
-.wr-goods-card.vertical .wr-goods-card__main {
-  padding: 0 0 22rpx 0;
-  flex-direction: column;
-}
-.wr-goods-card.vertical .wr-goods-card__thumb {
-  width: 340rpx;
-  height: 340rpx;
-}
-.wr-goods-card.vertical .wr-goods-card__body {
-  margin: 20rpx 20rpx 0 20rpx;
-  flex-direction: column;
-}
-.wr-goods-card.vertical .wr-goods-card__long_content {
-  overflow: hidden;
-}
-.wr-goods-card.vertical .wr-goods-card__title {
-  line-height: 36rpx;
-}
-.wr-goods-card.vertical .wr-goods-card__short_content {
-  margin: 20rpx 0 0 0;
-}
-.wr-goods-card.vertical .wr-goods-card__price {
-  order: 2;
-  color: #fa4126;
-  margin: 20rpx 0 0 0;
-}
-.wr-goods-card.vertical .wr-goods-card__origin-price {
-  order: 1;
-}
-.wr-goods-card.vertical .wr-goods-card__add-cart {
-  position: absolute;
-  bottom: 20rpx;
-  right: 20rpx;
-}
-
-.wr-goods-card__short_content .no_storage {
-  display: flex;
-  align-items: center;
-  justify-content: space-between;
-  height: 40rpx;
-  color: #333;
-  font-size: 24rpx;
-  line-height: 32rpx;
-  width: 100%;
-}
-
-.no_storage .no_storage__right {
-  width: 80rpx;
-  height: 40rpx;
-  border-radius: 20rpx;
-  border: 2rpx solid #fa4126;
-  line-height: 40rpx;
-  text-align: center;
-  color: #fa4126;
-}
diff --git a/pages/cart/components/specs-popup/index.js b/pages/cart/components/specs-popup/index.js
deleted file mode 100644
index 650d2aa..0000000
--- a/pages/cart/components/specs-popup/index.js
+++ /dev/null
@@ -1,72 +0,0 @@
-Component({
-  options: {
-    addGlobalClass: true,
-    multipleSlots: true, // 鍦ㄧ粍浠跺畾涔夋椂鐨勯�夐」涓惎鐢ㄥslot鏀寔
-  },
-
-  properties: {
-    show: {
-      type: Boolean,
-      value: false,
-    },
-    value: {
-      type: String,
-      value: '',
-    },
-    title: {
-      type: String,
-      observer(newVal) {
-        this.setData({ 'goods.title': newVal });
-      },
-    },
-    price: {
-      type: String,
-      value: '',
-      observer(newVal) {
-        this.setData({ 'goods.price': newVal });
-      },
-    },
-    thumb: {
-      type: String,
-      value: '',
-      observer(newVal) {
-        this.setData({ 'goods.thumb': newVal });
-      },
-    },
-    thumbMode: {
-      type: String,
-      value: 'aspectFit',
-    },
-    zIndex: {
-      type: Number,
-      value: 99,
-    },
-    specs: {
-      type: Array,
-      value: [],
-    },
-  },
-
-  data: {
-    goods: {
-      title: '',
-      thumb: '',
-      price: '',
-      hideKey: {
-        originPrice: true,
-        tags: true,
-        specs: true,
-        num: true,
-      },
-    },
-  },
-  methods: {
-    onClose() {
-      this.triggerEvent('close');
-    },
-
-    onCloseOver() {
-      this.triggerEvent('closeover');
-    },
-  },
-});
diff --git a/pages/cart/components/specs-popup/index.json b/pages/cart/components/specs-popup/index.json
deleted file mode 100644
index d59fc6d..0000000
--- a/pages/cart/components/specs-popup/index.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-  "component": true,
-  "usingComponents": {
-    "t-popup": "tdesign-miniprogram/popup/popup",
-    "goods-card": "../../components/goods-card/index"
-  }
-}
\ No newline at end of file
diff --git a/pages/cart/components/specs-popup/index.wxml b/pages/cart/components/specs-popup/index.wxml
deleted file mode 100644
index 4ddcb43..0000000
--- a/pages/cart/components/specs-popup/index.wxml
+++ /dev/null
@@ -1,26 +0,0 @@
-<t-popup
-  close-on-overlay-click="{{true}}"
-  visible="{{show}}"
-  placement="bottom"
-  z-index="{{zIndex}}"
->
-	<view class="specs-popup">
-		<view>
-			<goods-card data="{{goods}}" layout="horizontal-wrap" thumb-mode="{{thumbMode}}" />
-			<view class="section">
-				<view class="title">宸查�夎鏍�</view>
-				<view class="options">
-					<view
-					  wx:for="{{specs}}"
-					  wx:for-item="spec"
-					  wx:key="spec"
-					  class="option"
-					>{{spec}}
-					</view>
-				</view>
-			</view>
-		</view>
-		<view class="bottom-btn" hover-class="bottom-btn--active" bindtap="onClose">鎴戠煡閬撲簡</view>
-	</view>
-</t-popup>
-
diff --git a/pages/cart/components/specs-popup/index.wxss b/pages/cart/components/specs-popup/index.wxss
deleted file mode 100644
index 359c185..0000000
--- a/pages/cart/components/specs-popup/index.wxss
+++ /dev/null
@@ -1,68 +0,0 @@
-.specs-popup {
-  width: 100vw;
-  box-sizing: border-box;
-  padding: 32rpx 32rpx calc(20rpx + env(safe-area-inset-bottom)) 32rpx;
-  max-height: 80vh;
-  display: flex;
-  flex-direction: column;
-  background-color: white;
-  border-radius: 20rpx 20rpx 0 0;
-}
-.specs-popup .section {
-  margin-top: 44rpx;
-  flex: auto;
-  overflow-y: scroll;
-  overflow-x: hidden;
-  -webkit-overflow-scrolling: touch;
-}
-.specs-popup .section .title {
-  font-size: 26rpx;
-  color: #4f5356;
-}
-.specs-popup .section .options {
-  color: #333333;
-  font-size: 24rpx;
-  margin-right: -26rpx;
-}
-.specs-popup .section .options .option {
-  display: inline-block;
-  margin-top: 24rpx;
-  height: 56rpx;
-  line-height: 56rpx;
-  padding: 0 16rpx;
-  border-radius: 8rpx;
-  background-color: #f5f5f5;
-  max-width: 100%;
-  box-sizing: border-box;
-  white-space: nowrap;
-  overflow: hidden;
-  text-overflow: ellipsis;
-}
-.specs-popup .section .options .option:not(:last-child) {
-  margin-right: 26rpx;
-}
-.specs-popup .bottom-btn {
-  margin-top: 42rpx;
-  position: relative;
-  height: 80rpx;
-  line-height: 80rpx;
-  text-align: center;
-  background-color: white;
-  color: #fa4126;
-}
-.specs-popup .bottom-btn--active {
-  opacity: 0.5;
-}
-.specs-popup .bottom-btn::after {
-  display: block;
-  content: ' ';
-  position: absolute;
-  left: 0;
-  top: 0;
-  width: 200%;
-  height: 200%;
-  border: 1px solid #fa4126;
-  border-radius: 80rpx;
-  transform: scale(0.5);
-  transform-origin: left top;
-}
diff --git a/pages/cart/index.js b/pages/cart/index.js
index e710106..db4d31b 100644
--- a/pages/cart/index.js
+++ b/pages/cart/index.js
@@ -1,294 +1,120 @@
-import Dialog from 'tdesign-miniprogram/dialog/index';
-import Toast from 'tdesign-miniprogram/toast/index';
-import { fetchCartGroupData } from '../../services/cart/cart';
+const app = getApp();
+// import { getPublicImage } from '@/assets/js/middleGround/tool.js'
+import { getPublicImage } from '../../assets/js/middleGround/tool';
 
 Page({
   data: {
-    cartGroupData: null,
+    imgUrl: [],
+    shoppingCartData: [],
+    checkAll: false,
+    checkedList: [],
+    selectedCount: 0,
+    totalPrice: 0.00
   },
 
-  // 璋冪敤鑷畾涔塼abbar鐨刬nit鍑芥暟锛屼娇椤甸潰涓巘abbar婵�娲荤姸鎬佷繚鎸佷竴鑷�
-  onShow() {
-    this.getTabBar().init();
+  onLoad(options) {
+    wx.setNavigationBarTitle({
+      title: '璐墿杞�'
+    });
+    this.shoppingCartGet();
   },
 
-  onLoad() {
-    this.refreshData();
-  },
-
-  refreshData() {
-    this.getCartGroupData().then((res) => {
-      let isEmpty = true;
-      const cartGroupData = res.data;
-      // 涓�浜涚粍浠朵腑闇�瑕佺殑瀛楁鍙兘鎺ュ彛骞舵病鏈夎繑鍥烇紝鎴栬�呰繑鍥炵殑鏁版嵁缁撴瀯涓庨鏈熶笉涓�鑷达紝闇�瑕佸湪姝ゅ厛瀵规暟鎹仛涓�浜涘鐞�
-      // 缁熻闂ㄥ簵涓嬪姞璐殑鍟嗗搧鏄惁鍏ㄩ�夈�佹槸鍚﹀瓨鍦ㄧ己璐�/鏃犺揣
-      for (const store of cartGroupData.storeGoods) {
-        store.isSelected = true; // 璇ラ棬搴楀凡鍔犺喘鍟嗗搧鏄惁鍏ㄩ��
-        store.storeStockShortage = false; // 璇ラ棬搴楀凡鍔犺喘鍟嗗搧鏄惁瀛樺湪搴撳瓨涓嶈冻
-        if (!store.shortageGoodsList) {
-          store.shortageGoodsList = []; // 璇ラ棬搴楀凡鍔犺喘鍟嗗搧濡傛灉搴撳瓨涓�0闇�鍗曠嫭鍒嗙粍
-        }
-        for (const activity of store.promotionGoodsList) {
-          activity.goodsPromotionList = activity.goodsPromotionList.filter((goods) => {
-            goods.originPrice = undefined;
-
-            // 缁熻鏄惁鏈夊姞璐暟澶т簬搴撳瓨鏁扮殑鍟嗗搧
-            if (goods.quantity > goods.stockQuantity) {
-              store.storeStockShortage = true;
-            }
-            // 缁熻鏄惁鍏ㄩ��
-            if (!goods.isSelected) {
-              store.isSelected = false;
-            }
-            // 搴撳瓨涓�0锛堟棤璐э級鐨勫晢鍝佸崟鐙垎缁�
-            if (goods.stockQuantity > 0) {
-              return true;
-            }
-            store.shortageGoodsList.push(goods);
-            return false;
-          });
-
-          if (activity.goodsPromotionList.length > 0) {
-            isEmpty = false;
-          }
-        }
-        if (store.shortageGoodsList.length > 0) {
-          isEmpty = false;
-        }
-      }
-      cartGroupData.invalidGoodItems = cartGroupData.invalidGoodItems.map((goods) => {
-        goods.originPrice = undefined;
-        return goods;
-      });
-      cartGroupData.isNotEmpty = !isEmpty;
-      this.setData({ cartGroupData });
+  onDelete(e) {
+    const item = e.currentTarget.dataset.item;
+    app.MG.store.delShoppingCart({
+      ids: [item.id]
+    }).then(res => {
+      this.shoppingCartGet();
+      wx.showToast({ title: '浣犵偣鍑讳簡鍒犻櫎', icon: 'none' });
     });
   },
 
-  findGoods(spuId, skuId) {
-    let currentStore;
-    let currentActivity;
-    let currentGoods;
-    const { storeGoods } = this.data.cartGroupData;
-    for (const store of storeGoods) {
-      for (const activity of store.promotionGoodsList) {
-        for (const goods of activity.goodsPromotionList) {
-          if (goods.spuId === spuId && goods.skuId === skuId) {
-            currentStore = store;
-            currentActivity = currentActivity;
-            currentGoods = goods;
-            return {
-              currentStore,
-              currentActivity,
-              currentGoods,
-            };
-          }
-        }
-      }
-    }
-    return {
-      currentStore,
-      currentActivity,
-      currentGoods,
+  shoppingCartGet() {
+    let query = {
+      start: 0,
+      size: 999,
+      filterList: [],
+      searchList: []
     };
-  },
-
-  // 娉細瀹為檯鍦烘櫙鏃跺簲璇ヨ皟鐢ㄦ帴鍙h幏鍙栬喘鐗╄溅鏁版嵁
-  getCartGroupData() {
-    const { cartGroupData } = this.data;
-    if (!cartGroupData) {
-      return fetchCartGroupData();
-    }
-    return Promise.resolve({ data: cartGroupData });
-  },
-
-  // 閫夋嫨鍗曚釜鍟嗗搧
-  // 娉細瀹為檯鍦烘櫙鏃跺簲璇ヨ皟鐢ㄦ帴鍙f洿鏀归�変腑鐘舵��
-  selectGoodsService({ spuId, skuId, isSelected }) {
-    this.findGoods(spuId, skuId).currentGoods.isSelected = isSelected;
-    return Promise.resolve();
-  },
-
-  // 鍏ㄩ�夐棬搴�
-  // 娉細瀹為檯鍦烘櫙鏃跺簲璇ヨ皟鐢ㄦ帴鍙f洿鏀归�変腑鐘舵��
-  selectStoreService({ storeId, isSelected }) {
-    const currentStore = this.data.cartGroupData.storeGoods.find((s) => s.storeId === storeId);
-    currentStore.isSelected = isSelected;
-    currentStore.promotionGoodsList.forEach((activity) => {
-      activity.goodsPromotionList.forEach((goods) => {
-        goods.isSelected = isSelected;
+    app.MG.store.getShoppingCartProductList(query).then(res => {
+      res.datas.forEach(item => {
+        item.imgUrl = getPublicImage(item.productMonWithLinkDto.product.icon, '', '160');
       });
-    });
-    return Promise.resolve();
-  },
 
-  // 鍔犺喘鏁伴噺鍙樻洿
-  // 娉細瀹為檯鍦烘櫙鏃跺簲璇ヨ皟鐢ㄦ帴鍙�
-  changeQuantityService({ spuId, skuId, quantity }) {
-    this.findGoods(spuId, skuId).currentGoods.quantity = quantity;
-    return Promise.resolve();
-  },
-
-  // 鍒犻櫎鍔犺喘鍟嗗搧
-  // 娉細瀹為檯鍦烘櫙鏃跺簲璇ヨ皟鐢ㄦ帴鍙�
-  deleteGoodsService({ spuId, skuId }) {
-    function deleteGoods(group) {
-      for (const gindex in group) {
-        const goods = group[gindex];
-        if (goods.spuId === spuId && goods.skuId === skuId) {
-          group.splice(gindex, 1);
-          return gindex;
-        }
-      }
-      return -1;
-    }
-    const { storeGoods, invalidGoodItems } = this.data.cartGroupData;
-    for (const store of storeGoods) {
-      for (const activity of store.promotionGoodsList) {
-        if (deleteGoods(activity.goodsPromotionList) > -1) {
-          return Promise.resolve();
-        }
-      }
-      if (deleteGoods(store.shortageGoodsList) > -1) {
-        return Promise.resolve();
-      }
-    }
-    if (deleteGoods(invalidGoodItems) > -1) {
-      return Promise.resolve();
-    }
-    return Promise.reject();
-  },
-
-  // 娓呯┖澶辨晥鍟嗗搧
-  // 娉細瀹為檯鍦烘櫙鏃跺簲璇ヨ皟鐢ㄦ帴鍙�
-  clearInvalidGoodsService() {
-    this.data.cartGroupData.invalidGoodItems = [];
-    return Promise.resolve();
-  },
-
-  onGoodsSelect(e) {
-    const {
-      goods: { spuId, skuId },
-      isSelected,
-    } = e.detail;
-    const { currentGoods } = this.findGoods(spuId, skuId);
-    Toast({
-      context: this,
-      selector: '#t-toast',
-      message: `${isSelected ? '閫夋嫨' : '鍙栨秷'}"${
-        currentGoods.title.length > 5 ? `${currentGoods.title.slice(0, 5)}...` : currentGoods.title
-      }"`,
-      icon: '',
-    });
-    this.selectGoodsService({ spuId, skuId, isSelected }).then(() => this.refreshData());
-  },
-
-  onStoreSelect(e) {
-    const {
-      store: { storeId },
-      isSelected,
-    } = e.detail;
-    this.selectStoreService({ storeId, isSelected }).then(() => this.refreshData());
-  },
-
-  onQuantityChange(e) {
-    const {
-      goods: { spuId, skuId },
-      quantity,
-    } = e.detail;
-    const { currentGoods } = this.findGoods(spuId, skuId);
-    const stockQuantity = currentGoods.stockQuantity > 0 ? currentGoods.stockQuantity : 0; // 閬垮厤鍚庣杩斿洖鐨勬槸-1
-    // 鍔犺喘鏁伴噺瓒呰繃搴撳瓨鏁伴噺
-    if (quantity > stockQuantity) {
-      // 鍔犺喘鏁伴噺绛変簬搴撳瓨鏁伴噺鐨勬儏鍐典笅缁х画鍔犺喘
-      if (currentGoods.quantity === stockQuantity && quantity - stockQuantity === 1) {
-        Toast({
-          context: this,
-          selector: '#t-toast',
-          message: '褰撳墠鍟嗗搧搴撳瓨涓嶈冻',
-        });
-        return;
-      }
-      Dialog.confirm({
-        title: '鍟嗗搧搴撳瓨涓嶈冻',
-        content: `褰撳墠鍟嗗搧搴撳瓨涓嶈冻锛屾渶澶у彲璐拱鏁伴噺涓�${stockQuantity}浠禶,
-        confirmBtn: '淇敼涓烘渶澶у彲璐拱鏁伴噺',
-        cancelBtn: '鍙栨秷',
-      })
-        .then(() => {
-          this.changeQuantityService({
-            spuId,
-            skuId,
-            quantity: stockQuantity,
-          }).then(() => this.refreshData());
-        })
-        .catch(() => {});
-      return;
-    }
-    this.changeQuantityService({ spuId, skuId, quantity }).then(() => this.refreshData());
-  },
-
-  goCollect() {
-    /** 娲诲姩鑲畾鏈変竴涓椿鍔↖D锛岀敤鏉ヨ幏鍙栨椿鍔╞anner锛屾椿鍔ㄥ晢鍝佸垪琛ㄧ瓑 */
-    const promotionID = '123';
-    wx.navigateTo({
-      url: `/pages/promotion-detail/index?promotion_id=${promotionID}`,
-    });
-  },
-
-  goGoodsDetail(e) {
-    const { spuId, storeId } = e.detail.goods;
-    wx.navigateTo({
-      url: `/pages/goods/details/index?spuId=${spuId}&storeId=${storeId}`,
-    });
-  },
-
-  clearInvalidGoods() {
-    // 瀹為檯鍦烘櫙鏃跺簲璇ヨ皟鐢ㄦ帴鍙f竻绌哄け鏁堝晢鍝�
-    this.clearInvalidGoodsService().then(() => this.refreshData());
-  },
-
-  onGoodsDelete(e) {
-    const {
-      goods: { spuId, skuId },
-    } = e.detail;
-    Dialog.confirm({
-      content: '纭鍒犻櫎璇ュ晢鍝佸悧?',
-      confirmBtn: '纭畾',
-      cancelBtn: '鍙栨秷',
-    }).then(() => {
-      this.deleteGoodsService({ spuId, skuId }).then(() => {
-        Toast({ context: this, selector: '#t-toast', message: '鍟嗗搧鍒犻櫎鎴愬姛' });
-        this.refreshData();
+      this.setData({
+        shoppingCartData: res.datas
       });
     });
   },
 
-  onSelectAll(event) {
-    const { isAllSelected } = event?.detail ?? {};
-    Toast({
-      context: this,
-      selector: '#t-toast',
-      message: `${isAllSelected ? '鍙栨秷' : '鐐瑰嚮'}浜嗗叏閫夋寜閽甡,
+  bottomChange(e) {
+    const checked = e.detail.value.length > 0;
+    const items = this.data.shoppingCartData.map(item => {
+      item.checked = checked;
+      return item;
     });
-    // 璋冪敤鎺ュ彛鏀瑰彉鍏ㄩ��
+    this.setData({
+      shoppingCartData: items,
+      checkAll: checked
+    });
+    this.calculateSelectedCount();
+    this.calculateTotalPrice();
   },
 
-  onToSettle() {
-    const goodsRequestList = [];
-    this.data.cartGroupData.storeGoods.forEach((store) => {
-      store.promotionGoodsList.forEach((promotion) => {
-        promotion.goodsPromotionList.forEach((m) => {
-          if (m.isSelected == 1) {
-            goodsRequestList.push(m);
-          }
-        });
-      });
+  HandelItemChange(e) {
+    const { item } = e.target.dataset;
+    const items = this.data.shoppingCartData
+    items.map(eitem => {
+      if (eitem.id == item.id) {
+        eitem.checked = e.detail.checked
+      }
+
+
+    })
+    const data = items.filter(item => item.checked)
+    const checkAll = data.length == this.data.shoppingCartData.length
+
+    this.setData({
+      shoppingCartData: items,
+      checkAll
     });
-    wx.setStorageSync('order.goodsRequestList', JSON.stringify(goodsRequestList));
-    wx.navigateTo({ url: '/pages/order/order-confirm/index?type=cart' });
+    this.calculateSelectedCount();
+    this.calculateTotalPrice();
   },
-  onGotoHome() {
-    wx.switchTab({ url: '/pages/home/home' });
+
+  calculateSelectedCount() {
+    const selectedItems = this.data.shoppingCartData.filter(item => item.checked);
+    const selectedCount = selectedItems.length;
+    this.setData({
+      selectedCount
+    });
   },
+
+  calculateTotalPrice() {
+    const selectedItems = this.data.shoppingCartData.filter(item => item.checked);
+    const totalPrice = selectedItems.reduce((total, item) => total + parseFloat(item.saleMethod.price), 0);
+    this.setData({
+      totalPrice: totalPrice.toFixed(2)
+    });
+  },
+  goPaymentPage() {
+
+
+    const selectedItems = this.data.shoppingCartData.filter(item => item.checked);
+    console.log(selectedItems, 789);
+    const selectedIds = selectedItems.map(item => item.id);
+    console.log('閫変腑鐨勫晢鍝� id:', selectedIds);
+
+    app.MG.store.shoppingCartCreateOrder({ linkIds: selectedIds }).then(res => {
+      console.log(res.orderNumber, 456);
+      const url = '/pages/cart/paymentPage/index?orderNumber=' + res.orderNumber
+      wx.navigateTo({
+        url
+      });
+
+
+    })
+
+
+  }
 });
diff --git a/pages/cart/index.json b/pages/cart/index.json
index 1d2e717..cfbbec2 100644
--- a/pages/cart/index.json
+++ b/pages/cart/index.json
@@ -1,10 +1,9 @@
 {
-  "navigationBarTitleText": "璐墿杞�",
+  "component": true,
   "usingComponents": {
-    "cart-group": "./components/cart-group/index",
-    "cart-empty": "./components/cart-empty/index",
-    "cart-bar": "./components/cart-bar/index",
-    "t-toast": "tdesign-miniprogram/toast/toast",
-    "t-dialog": "tdesign-miniprogram/dialog/dialog"
+    "t-checkbox": "tdesign-miniprogram/checkbox/checkbox",
+    "t-swipe-cell": "tdesign-miniprogram/swipe-cell/swipe-cell",
+    "t-cell": "tdesign-miniprogram/cell/cell",
+    "t-button": "tdesign-miniprogram/button/button"
   }
 }
\ No newline at end of file
diff --git a/pages/cart/index.wxml b/pages/cart/index.wxml
index 8828092..4219ccc 100644
--- a/pages/cart/index.wxml
+++ b/pages/cart/index.wxml
@@ -1,31 +1,38 @@
-<!-- 鍒嗗眰璐墿杞� -->
-<block wx:if="{{cartGroupData.isNotEmpty}}">
-  <cart-group
-    store-goods="{{ cartGroupData.storeGoods }}"
-    invalid-good-items="{{ cartGroupData.invalidGoodItems }}"
-    bindselectgoods="onGoodsSelect"
-    bindselectstore="onStoreSelect"
-    bindchangequantity="onQuantityChange"
-    bindgocollect="goCollect"
-    bindgoodsclick="goGoodsDetail"
-    bindclearinvalidgoods="clearInvalidGoods"
-    binddelete="onGoodsDelete"
-  />
+<view class="outsideContentBox">
+  <!-- <checkbox-group bindchange="HandelItemChange"> -->
+  <t-swipe-cell wx:for="{{shoppingCartData}}" wx:key="index" wx:for-item="item" wx:for-index="index">
+    <!-- <view class="contentBox"> -->
+    <!-- <view class="contentCheckbox">
+          <checkbox value="{{item.id}}" checked="{{item.checked}}"></checkbox>
+        </view> -->
+    <view class="itemWarp">
+      <t-cell bordered="{{false}}" title="{{item.productMonWithLinkDto.product.name}}" description="锟{item.saleMethod.price}}">
+        <view slot="left-icon" class="left-icon">
+          <view class="contentCheckbox">
+            <t-checkbox icon="rectangle" value=" {{item.id}}" data-item="{{item}}" checked="{{item.checked}}" bindchange="HandelItemChange" />
+          </view>
+          <view class="left-image">
+            <image src="{{item.imgUrl}}" class="imageStyle" mode="" />
+          </view>
+        </view>
+      </t-cell>
+    </view>
+    <!-- </view> -->
+    <view slot="right" class="btn delete-btn" bind:tap="onDelete" data-item="{{item}}">鍒犻櫎</view>
+  </t-swipe-cell>
+  <!-- </checkbox-group> -->
+</view>
 
-  <view class="gap" />
-  <!-- 鍟嗗搧灏忚浠ュ強缁撶畻鎸夐挳 -->
-  <cart-bar
-    is-all-selected="{{cartGroupData.isAllSelected}}"
-    total-amount="{{cartGroupData.totalAmount}}"
-    total-goods-num="{{cartGroupData.selectedGoodsCount}}"
-    total-discount-amount="{{cartGroupData.totalDiscountAmount}}"
-    fixed="{{true}}"
-    bottomHeight="{{112}}"
-    bindhandleSelectAll="onSelectAll"
-    bindhandleToSettle="onToSettle"
-  />
-</block>
-<!-- 璐墿杞︾┖鎬� -->
-<cart-empty wx:else bind:handleClick="onGotoHome" />
-<t-toast id="t-toast" />
-<t-dialog id="t-dialog" />
+<view class="bottomBox">
+  <view class="checkGroupBox">
+    <checkbox-group bindchange="bottomChange">
+      <checkbox value="鍏ㄩ��" checked="{{checkAll}}">鍏ㄩ��</checkbox>
+    </checkbox-group>
+  </view>
+  <view class="settlementBox">
+    <view class="totalPrice">鎬讳环:<text class="totalPriceText">锟{totalPrice}}</text></view>
+    <view class="buttonBox">
+      <t-button class="tButtonBox" size="small" shape="round" bind:tap="goPaymentPage">鍘荤粨绠�({{selectedCount}})</t-button>
+    </view>
+  </view>
+</view>
\ No newline at end of file
diff --git a/pages/cart/index.wxss b/pages/cart/index.wxss
index ea19962..35eecdb 100644
--- a/pages/cart/index.wxss
+++ b/pages/cart/index.wxss
@@ -1,13 +1,169 @@
-:host {
-  padding-bottom: 100rpx;
+/* pages/cart/item.wxss */
+.btn-wrapper {
+  height: 100%;
 }
 
-.gap {
-  height: 100rpx;
+.btn {
+  display: inline-flex;
+  justify-content: center;
+  align-items: center;
+  width: 120rpx;
+  height: 100%;
+  color: white;
+}
+
+.delete-btn {
+  background-color: #e34d59;
+}
+
+.edit-btn {
+  background-color: #ed7b2f;
+}
+
+.favor-btn {
+  background-color: #0052d9;
+}
+
+.outsideContentBox {
+  padding: 30rpx;
+  background: #F2F3F8;
+  border-radius: 18rpx 18rpx 18rpx 18rpx;
+  padding-bottom: 230rpx;
+  /* height: 260rpx; */
+}
+
+.bottomBox {
+  background-color: #0052d9;
+  position: fixed;
+  bottom: 0;
+  left: 0;
+  right: 0;
+
+  padding-bottom: 53px;
+  height: 112rpx;
+  background: #FFFFFF;
+  box-shadow: 0rpx -2rpx 0rpx 2rpx rgba(0, 0, 0, 0.08);
+  display: flex;
+  align-items: center;
+}
+
+.checkGroupBox {
+  /* flex: 1; */
+  margin: 0 30rpx;
+  width: 120rpx;
+}
+
+
+
+.settlementBox {
+  /* width: 100%; */
+  display: flex;
+  align-items: center;
+  /* justify-content: space-between; */
+}
+
+.totalPrice {
+  /* margin: 0 50rpx; */
+
+}
+
+.buttonBox {
+
+  /* margin: 0 30rpx; */
+  margin-left: 140rpx;
+}
+
+.tButtonBox {
+  background-color: #FF6C00;
+  width: 200rpx;
+  height: 80rpx;
+}
+
+checkbox .wx-checkbox-input {
+  /* border-radius: 50%; */
+  /* 鍦嗚 */
+  /* width: 46rpx; */
+  /* 鑳屾櫙鐨勫 */
+  /* height: 46rpx; */
+  /* 鑳屾櫙鐨勯珮 */
+  width: 30rpx;
+  height: 30rpx;
+}
+
+/* 閫変腑鍚庣殑 鑳屾櫙鏍峰紡*/
+checkbox .wx-checkbox-input.wx-checkbox-input-checked {
+  border: 1rpx solid #FF6C00;
+  background: #FF6C00;
+}
+
+checkbox .wx-checkbox-input.wx-checkbox-input-checked::before {
+  border-radius: 50%;
+  /* 鍦嗚 */
+  width: 40rpx;
+  /* 閫変腑鍚庡鍕惧ぇ灏忥紝涓嶈瓒呰繃鑳屾櫙鐨勫昂瀵� */
+  height: 40rpx;
+  /* 閫変腑鍚庡鍕惧ぇ灏忥紝涓嶈瓒呰繃鑳屾櫙鐨勫昂瀵� */
+  line-height: 40rpx;
+  text-align: center;
+  font-size: 30rpx;
+  /* 瀵瑰嬀澶у皬 30rpx */
+  color: #fff;
+  /* 瀵瑰嬀棰滆壊 鐧借壊 */
+  background: transparent;
+  transform: translate(-50%, -50%) scale(1);
+  -webkit-transform: translate(-50%, -50%) scale(1);
+}
+
+
+.contentBox {
+  display: flex;
+  align-items: center;
+  background-color: #fff;
+  margin: 30rpx 0;
+  border-radius: 18rpx 18rpx 18rpx 18rpx;
+  height: 260rpx;
+}
+
+.totalPriceText {
+  color: #FF6C00;
+}
+
+.LaelBox {
+  margin: 50rpx;
+}
+
+.itemWarp {
+  margin: 15rpx 0;
+}
+
+.t-cell {
+  border-radius: 18rpx;
+}
+
+.t-cell__left-image {
+  width: 150rpx;
+  height: 210rpx;
+}
+
+
+.contentCheckbox {
+  width: 100rpx;
+}
+
+.left-icon {
+  display: flex;
+  justify-content: flex-start;
+  align-items: center;
+}
+
+.left-image {
+  width: 152rpx;
+  height: 212rpx;
+  background: #FFFFFF;
+  border-radius: 0rpx 0rpx 0rpx 0rpx;
+}
+
+.imageStyle {
   width: 100%;
-}
-
-.t-button {
-  --td-button-default-color: #000;
-  --td-button-primary-text-color: #fa4126;
-}
+  height: 100%;
+}
\ No newline at end of file
diff --git a/pages/cart/paymentPage/index.js b/pages/cart/paymentPage/index.js
new file mode 100644
index 0000000..7a4e351
--- /dev/null
+++ b/pages/cart/paymentPage/index.js
@@ -0,0 +1,200 @@
+// pages/cart/paymentPage/index.js
+const app = getApp()
+import { getPublicImage } from '../../../assets/js/middleGround/tool';
+import drawQrcode from './js/weapp.qrcode'
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    orderNumber: null,
+    navBarHeight: '',
+    barHeight: '',
+    selectedIds: '',
+    purchasedIds: [],
+    productList: [],
+    payPrice: '',
+    drawQrcodeText: 'https://www.baidu.com/',
+    orderGoods: '',
+
+
+    confirmBtn: { content: '纭畾', variant: 'base' },
+    dialogKey: 'false',
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+
+    const systInfo = wx.getSystemInfoSync();
+    const menu = wx.getMenuButtonBoundingClientRect(); // 鑳跺泭淇℃伅
+    const navBarHeight = (menu.top - systInfo.statusBarHeight) * 2 + menu.height; // 瀵艰埅鏍忛珮搴�
+    this.setData({
+      orderNumber: options.orderNumber,
+      navBarHeight: navBarHeight,
+      barHeight: systInfo.statusBarHeight,
+      selectedIds: options.selectedIds
+    })
+    console.log('鎺ユ敹鍒扮殑璁㈠崟鍙�:', this.data.orderNumber);
+
+
+    this.getOrderByOrderNum()
+
+
+
+
+    drawQrcode({
+
+      width: 200, // 蹇呴』锛屼簩缁寸爜瀹藉害锛屼笌canvas鐨剋idth淇濇寔涓�鑷�
+
+      height: 200, // 蹇呴』锛屼簩缁寸爜楂樺害锛屼笌canvas鐨刪eight淇濇寔涓�鑷�
+
+      canvasId: 'myQrcode',
+
+      background: '#ffffff', //	闈炲繀椤伙紝浜岀淮鐮佽儗鏅鑹诧紝榛樿鍊肩櫧鑹�
+
+      foreground: '#2bb15e', // 闈炲繀椤伙紝浜岀淮鐮佸墠鏅壊锛岄粯璁ゅ�奸粦鑹� 	'#000000'
+
+      // ctx: wx.createCanvasContext('myQrcode'), // 闈炲繀椤伙紝缁樺浘涓婁笅鏂囷紝鍙�氳繃 wx.createCanvasContext('canvasId') 鑾峰彇锛寁1.0.0+鐗堟湰鏀寔
+
+      text: this.data.drawQrcodeText,  // 蹇呴』锛屼簩缁寸爜鍐呭
+      // v1.0.0+鐗堟湰鏀寔鍦ㄤ簩缁寸爜涓婄粯鍒跺浘鐗�
+
+      image: {
+        // imageResource: '../../images/icon.png', // 鎸囧畾浜岀淮鐮佸皬鍥炬爣
+        dx: 70,
+        dy: 70,
+        dWidth: 60,
+        dHeight: 60
+      }
+    })
+
+
+
+
+
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚
+   */
+  onReady() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
+   */
+  onShow() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰闅愯棌
+   */
+  onHide() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍗歌浇
+   */
+  onUnload() {
+
+  },
+
+  /**
+   * 椤甸潰鐩稿叧浜嬩欢澶勭悊鍑芥暟--鐩戝惉鐢ㄦ埛涓嬫媺鍔ㄤ綔
+   */
+  onPullDownRefresh() {
+
+  },
+
+  /**
+   * 椤甸潰涓婃媺瑙﹀簳浜嬩欢鐨勫鐞嗗嚱鏁�
+   */
+  onReachBottom() {
+
+  },
+
+  /**
+   * 鐢ㄦ埛鐐瑰嚮鍙充笂瑙掑垎浜�
+   */
+  onShareAppMessage() {
+
+  },
+  goBack() {
+    wx.navigateBack();
+  },
+
+
+  getOrderByOrderNum() {
+    let query = {
+      orderNum: this.data.orderNumber,
+      fields: {
+        content: [],
+        subtitle: [],
+
+
+      }
+    }
+    app.MG.store.getOrderByOrderNum(query).then(res => {
+      this.setData({
+        orderGoods: res.orderNumber
+      })
+      console.log(this.data.orderGoods, 'res.orderNumber');
+
+      console.log(res.payPrice);
+      this.setData({
+        payPrice: res.payPrice.toFixed(2)
+      })
+      res.saleMethodLinks.forEach(item => {
+
+        item.paymentIcon = getPublicImage(item.orderSaleMethod.product.icon)
+
+
+        this.setData({
+          productList: res.saleMethodLinks
+        })
+
+      })
+    })
+  },
+  confirmOrderGet() {
+    let query = {
+      orderNum: this.data.orderGoods
+    }
+    app.MG.store.confirmOrder(query).then(res => {
+      this.makeWeChatQrPayGet()
+    })
+    // 璋冨彇寰俊浜岀淮鐮佹敮浠�
+
+  },
+  // 璋冨彇寰俊浜岀淮鐮佹敮浠�
+  makeWeChatQrPayGet() {
+    let query = {
+      orderNum: this.data.orderGoods
+    }
+    app.MG.store.makeWeChatQrPay(query).then((res) => {
+
+      this.setData({
+        drawQrcodeText: res
+      })
+      this.data.dialogKey = true
+      console.log(this.data.drawQrcodeText, 'drawQrcodeText');
+    })
+  },
+  showDialog(e) {
+    const { key } = e.currentTarget.dataset;
+    this.setData({ [key]: true, dialogKey: key });
+  },
+  closeDialog() {
+    const { dialogKey } = this.data;
+    this.setData({ [dialogKey]: false });
+  },
+
+})
\ No newline at end of file
diff --git a/pages/cart/paymentPage/index.json b/pages/cart/paymentPage/index.json
new file mode 100644
index 0000000..2a32d4b
--- /dev/null
+++ b/pages/cart/paymentPage/index.json
@@ -0,0 +1,10 @@
+{
+  "component": true,
+  
+  "usingComponents": {
+    "t-icon": "tdesign-miniprogram/icon/icon",
+    "t-button": "tdesign-miniprogram/button/button",
+    "t-dialog": "tdesign-miniprogram/dialog/dialog"
+  },
+  "navigationStyle": "custom"
+}
\ No newline at end of file
diff --git a/pages/cart/paymentPage/index.wxml b/pages/cart/paymentPage/index.wxml
new file mode 100644
index 0000000..3490e0e
--- /dev/null
+++ b/pages/cart/paymentPage/index.wxml
@@ -0,0 +1,74 @@
+<!--pages/cart/paymentPage/index.wxml-->
+<view style="width: 100%; height: {{barHeight}}px; "></view>
+<view class="nacigationBar" style="width: 70%; height: {{navBarHeight}}px;">
+  <view>
+    <t-icon name="chevron-left" size="30" data-name="{{item}}" bind:click="goBack" />
+  </view>
+  <view class="navbar-title">鎻愪氦璁㈠崟</view>
+</view>
+
+
+
+
+
+<view class="content">
+
+
+
+
+
+
+  <t-button t-class="wrapper" theme="primary" size="large" variant="outline" data-key="showCloseBtn" bind:tap="showDialog" block>
+    甯﹀叧闂寜閽�
+  </t-button>
+  <t-dialog visible="{{showCloseBtn}}" close-btn bind:confirm="closeDialog" bind:cancel="closeDialog">
+    <view slot="content" class="slotContent">
+      <view class="myQrcodeBox">
+        <canvas style="width: 200px; height: 200px;margin:0 auto" canvas-id="myQrcode"></canvas>
+        <view class="myQrcodeTextBox">寰俊鎵爜鏀粯</view>
+      </view>
+    </view>
+  </t-dialog>
+
+
+
+
+
+  <view class="shoppingCartList">
+    <view class="cartList" wx:for="{{productList}}" wx:key="index" wx:for-item="item" wx:for-index="index">
+      <image src="{{item.paymentIcon }}" mode="" />
+      <view class="cartListContent">
+        <view class="cartListDetails">{{item.orderSaleMethod.product.name}}</view>
+        <view class="textBox">鍥句功鏈嶅姟-鐢靛瓙涔�</view>
+        <view class="priceBox">锟{item.payPrice}}</view>
+
+      </view>
+
+    </view>
+
+
+  </view>
+
+  <view class="priceBreakdown">
+    <view class="priceBreakdownContent">浠锋牸鏄庣粏</view>
+    <view class="amountMoney">
+      <view>鍟嗗搧閲戦</view>
+      <view>锟{payPrice}}</view>
+    </view>
+    <view class="amount">
+      <view>鍚堣锛氾骏{{payPrice}}</view>
+    </view>
+  </view>
+
+
+
+  <view class="interval"></view>
+
+  <view class="paymentBox">
+    <view class="residue">寰呮敮浠橈細<text class="residueTextBox">锟{payPrice}}</text></view>
+    <view>
+      <t-button class="buttonBox" shape="round" bind:tap="confirmOrderGet">寰俊鏀粯</t-button>
+    </view>
+  </view>
+
+</view>
\ No newline at end of file
diff --git a/pages/cart/paymentPage/index.wxss b/pages/cart/paymentPage/index.wxss
new file mode 100644
index 0000000..9159e8f
--- /dev/null
+++ b/pages/cart/paymentPage/index.wxss
@@ -0,0 +1,144 @@
+/* pages/cart/paymentPage/index.wxss */
+.nacigationBar {
+  background-color: #fff;
+  display: flex;
+  align-items: center;
+
+}
+
+.navbar-title {
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  color: #0F1214;
+  font-size: 40rpx;
+  font-weight: bold;
+  margin-bottom: 5rpx;
+}
+
+.content {
+  width: 100%;
+  height: 1250rpx;
+  background-color: #F2F3F8;
+  padding: 40rpx 0;
+  padding-top: 1rpx;
+}
+
+.shoppingCartList {
+  height: 1000rpx;
+  background: #FFFFFF;
+  border-radius: 20px;
+  margin: 30rpx 0;
+}
+
+image {
+  width: 150rpx;
+  height: 210rpx;
+  margin: 30rpx;
+}
+
+.cartListContent {
+  /* margin: 0 auto; */
+}
+
+.cartList {
+  display: flex;
+}
+
+.cartListContent {
+  margin-top: 30rpx;
+}
+
+.cartListDetails {
+  margin-bottom: 50rpx;
+  font-family: PingFang SC, PingFang SC;
+  font-weight: bold;
+  font-size: 29rpx;
+  color: #333333;
+}
+
+.textBox {
+  font-family: PingFang SC, PingFang SC;
+  font-weight: 400;
+  font-size: 25rpx;
+  color: #333333;
+  /* margin: 10rpx 0; */
+  margin-bottom: 20rpx;
+}
+
+.priceBox {
+  font-weight: 500;
+  font-size: 31rpx;
+  color: #0F1214;
+
+}
+
+.priceBreakdown {
+  height: 280rpx;
+  background: #fff;
+  padding: 30rpx;
+
+}
+
+.priceBreakdownContent {
+  font-weight: bold;
+  font-size: 32rpx;
+  color: #0F1214;
+  margin-bottom: 50rpx;
+}
+
+.amountMoney {
+  display: flex;
+  justify-content: space-between;
+  font-weight: 500;
+  font-size: 33rpx;
+  color: #0F1214;
+  border-bottom: 2rpx solid #EDEDED;
+  padding-bottom: 38rpx;
+}
+
+.amount {
+  display: flex;
+  justify-content: flex-end;
+  margin: 30rpx 0;
+}
+
+
+
+.interval {
+  width: 100%;
+  height: 30rpx;
+  background-color: #F2F3F8;
+}
+
+.paymentBox {
+  /* margin-top: 50rpx; */
+  display: flex;
+  justify-content: space-between;
+  padding: 30rpx;
+  align-items: center;
+}
+
+.residue {
+  color: #949494;
+}
+
+.residueTextBox {
+  font-weight: bold;
+  font-size: 38rpx;
+  color: #FF6C00;
+}
+
+.buttonBox {
+  background-color: #FF6C00;
+  border: #fff;
+}
+
+.myQrcodeBox {
+  margin: 30rpx;
+}
+
+.myQrcodeTextBox {
+  text-align: center;
+  margin: 30rpx 0;
+}
\ No newline at end of file
diff --git a/pages/cart/paymentPage/js/weapp.qrcode.js b/pages/cart/paymentPage/js/weapp.qrcode.js
new file mode 100644
index 0000000..2967226
--- /dev/null
+++ b/pages/cart/paymentPage/js/weapp.qrcode.js
@@ -0,0 +1,1281 @@
+/**
+ * weapp.qrcode.js v1.0.0 (https://github.com/yingye/weapp-qrcode#readme)
+ */
+
+(function (global, factory) {
+	typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+	typeof define === 'function' && define.amd ? define(factory) :
+	(global.drawQrcode = factory());
+}(this, (function () { 'use strict';
+
+var hasOwn = Object.prototype.hasOwnProperty;
+var toStr = Object.prototype.toString;
+var defineProperty = Object.defineProperty;
+var gOPD = Object.getOwnPropertyDescriptor;
+
+var isArray = function isArray(arr) {
+	if (typeof Array.isArray === 'function') {
+		return Array.isArray(arr);
+	}
+
+	return toStr.call(arr) === '[object Array]';
+};
+
+var isPlainObject = function isPlainObject(obj) {
+	if (!obj || toStr.call(obj) !== '[object Object]') {
+		return false;
+	}
+
+	var hasOwnConstructor = hasOwn.call(obj, 'constructor');
+	var hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');
+	// Not own constructor property must be Object
+	if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {
+		return false;
+	}
+
+	// Own properties are enumerated firstly, so to speed up,
+	// if last one is own, then all properties are own.
+	var key;
+	for (key in obj) { /**/ }
+
+	return typeof key === 'undefined' || hasOwn.call(obj, key);
+};
+
+// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target
+var setProperty = function setProperty(target, options) {
+	if (defineProperty && options.name === '__proto__') {
+		defineProperty(target, options.name, {
+			enumerable: true,
+			configurable: true,
+			value: options.newValue,
+			writable: true
+		});
+	} else {
+		target[options.name] = options.newValue;
+	}
+};
+
+// Return undefined instead of __proto__ if '__proto__' is not an own property
+var getProperty = function getProperty(obj, name) {
+	if (name === '__proto__') {
+		if (!hasOwn.call(obj, name)) {
+			return void 0;
+		} else if (gOPD) {
+			// In early versions of node, obj['__proto__'] is buggy when obj has
+			// __proto__ as an own property. Object.getOwnPropertyDescriptor() works.
+			return gOPD(obj, name).value;
+		}
+	}
+
+	return obj[name];
+};
+
+var extend = function extend() {
+	var options, name, src, copy, copyIsArray, clone;
+	var target = arguments[0];
+	var i = 1;
+	var length = arguments.length;
+	var deep = false;
+
+	// Handle a deep copy situation
+	if (typeof target === 'boolean') {
+		deep = target;
+		target = arguments[1] || {};
+		// skip the boolean and the target
+		i = 2;
+	}
+	if (target == null || (typeof target !== 'object' && typeof target !== 'function')) {
+		target = {};
+	}
+
+	for (; i < length; ++i) {
+		options = arguments[i];
+		// Only deal with non-null/undefined values
+		if (options != null) {
+			// Extend the base object
+			for (name in options) {
+				src = getProperty(target, name);
+				copy = getProperty(options, name);
+
+				// Prevent never-ending loop
+				if (target !== copy) {
+					// Recurse if we're merging plain objects or arrays
+					if (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {
+						if (copyIsArray) {
+							copyIsArray = false;
+							clone = src && isArray(src) ? src : [];
+						} else {
+							clone = src && isPlainObject(src) ? src : {};
+						}
+
+						// Never move original objects, clone them
+						setProperty(target, { name: name, newValue: extend(deep, clone, copy) });
+
+					// Don't bring in undefined values
+					} else if (typeof copy !== 'undefined') {
+						setProperty(target, { name: name, newValue: copy });
+					}
+				}
+			}
+		}
+	}
+
+	// Return the modified object
+	return target;
+};
+
+//---------------------------------------------------------------------
+// QRCode for JavaScript
+//
+// Copyright (c) 2009 Kazuhiko Arase
+//
+// URL: http://www.d-project.com/
+//
+// Licensed under the MIT license:
+//   http://www.opensource.org/licenses/mit-license.php
+//
+// The word "QR Code" is registered trademark of 
+// DENSO WAVE INCORPORATED
+//   http://www.denso-wave.com/qrcode/faqpatent-e.html
+//
+//---------------------------------------------------------------------
+
+//---------------------------------------------------------------------
+// QR8bitByte
+//---------------------------------------------------------------------
+
+function QR8bitByte(data) {
+  this.mode = QRMode.MODE_8BIT_BYTE;
+  this.data = data;
+}
+
+QR8bitByte.prototype = {
+
+  getLength: function (buffer) {
+    return this.data.length;
+  },
+
+  write: function (buffer) {
+    for (var i = 0; i < this.data.length; i++) {
+      // not JIS ...
+      buffer.put(this.data.charCodeAt(i), 8);
+    }
+  }
+};
+
+//---------------------------------------------------------------------
+// QRCode
+//---------------------------------------------------------------------
+
+function QRCode(typeNumber, errorCorrectLevel) {
+  this.typeNumber = typeNumber;
+  this.errorCorrectLevel = errorCorrectLevel;
+  this.modules = null;
+  this.moduleCount = 0;
+  this.dataCache = null;
+  this.dataList = new Array();
+}
+
+QRCode.prototype = {
+
+  addData: function (data) {
+    var newData = new QR8bitByte(data);
+    this.dataList.push(newData);
+    this.dataCache = null;
+  },
+
+  isDark: function (row, col) {
+    if (row < 0 || this.moduleCount <= row || col < 0 || this.moduleCount <= col) {
+      throw new Error(row + "," + col);
+    }
+    return this.modules[row][col];
+  },
+
+  getModuleCount: function () {
+    return this.moduleCount;
+  },
+
+  make: function () {
+    // Calculate automatically typeNumber if provided is < 1
+    if (this.typeNumber < 1) {
+      var typeNumber = 1;
+      for (typeNumber = 1; typeNumber < 40; typeNumber++) {
+        var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, this.errorCorrectLevel);
+
+        var buffer = new QRBitBuffer();
+        var totalDataCount = 0;
+        for (var i = 0; i < rsBlocks.length; i++) {
+          totalDataCount += rsBlocks[i].dataCount;
+        }
+
+        for (var i = 0; i < this.dataList.length; i++) {
+          var data = this.dataList[i];
+          buffer.put(data.mode, 4);
+          buffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber));
+          data.write(buffer);
+        }
+        if (buffer.getLengthInBits() <= totalDataCount * 8) break;
+      }
+      this.typeNumber = typeNumber;
+    }
+    this.makeImpl(false, this.getBestMaskPattern());
+  },
+
+  makeImpl: function (test, maskPattern) {
+
+    this.moduleCount = this.typeNumber * 4 + 17;
+    this.modules = new Array(this.moduleCount);
+
+    for (var row = 0; row < this.moduleCount; row++) {
+
+      this.modules[row] = new Array(this.moduleCount);
+
+      for (var col = 0; col < this.moduleCount; col++) {
+        this.modules[row][col] = null; //(col + row) % 3;
+      }
+    }
+
+    this.setupPositionProbePattern(0, 0);
+    this.setupPositionProbePattern(this.moduleCount - 7, 0);
+    this.setupPositionProbePattern(0, this.moduleCount - 7);
+    this.setupPositionAdjustPattern();
+    this.setupTimingPattern();
+    this.setupTypeInfo(test, maskPattern);
+
+    if (this.typeNumber >= 7) {
+      this.setupTypeNumber(test);
+    }
+
+    if (this.dataCache == null) {
+      this.dataCache = QRCode.createData(this.typeNumber, this.errorCorrectLevel, this.dataList);
+    }
+
+    this.mapData(this.dataCache, maskPattern);
+  },
+
+  setupPositionProbePattern: function (row, col) {
+
+    for (var r = -1; r <= 7; r++) {
+
+      if (row + r <= -1 || this.moduleCount <= row + r) continue;
+
+      for (var c = -1; c <= 7; c++) {
+
+        if (col + c <= -1 || this.moduleCount <= col + c) continue;
+
+        if (0 <= r && r <= 6 && (c == 0 || c == 6) || 0 <= c && c <= 6 && (r == 0 || r == 6) || 2 <= r && r <= 4 && 2 <= c && c <= 4) {
+          this.modules[row + r][col + c] = true;
+        } else {
+          this.modules[row + r][col + c] = false;
+        }
+      }
+    }
+  },
+
+  getBestMaskPattern: function () {
+
+    var minLostPoint = 0;
+    var pattern = 0;
+
+    for (var i = 0; i < 8; i++) {
+
+      this.makeImpl(true, i);
+
+      var lostPoint = QRUtil.getLostPoint(this);
+
+      if (i == 0 || minLostPoint > lostPoint) {
+        minLostPoint = lostPoint;
+        pattern = i;
+      }
+    }
+
+    return pattern;
+  },
+
+  createMovieClip: function (target_mc, instance_name, depth) {
+
+    var qr_mc = target_mc.createEmptyMovieClip(instance_name, depth);
+    var cs = 1;
+
+    this.make();
+
+    for (var row = 0; row < this.modules.length; row++) {
+
+      var y = row * cs;
+
+      for (var col = 0; col < this.modules[row].length; col++) {
+
+        var x = col * cs;
+        var dark = this.modules[row][col];
+
+        if (dark) {
+          qr_mc.beginFill(0, 100);
+          qr_mc.moveTo(x, y);
+          qr_mc.lineTo(x + cs, y);
+          qr_mc.lineTo(x + cs, y + cs);
+          qr_mc.lineTo(x, y + cs);
+          qr_mc.endFill();
+        }
+      }
+    }
+
+    return qr_mc;
+  },
+
+  setupTimingPattern: function () {
+
+    for (var r = 8; r < this.moduleCount - 8; r++) {
+      if (this.modules[r][6] != null) {
+        continue;
+      }
+      this.modules[r][6] = r % 2 == 0;
+    }
+
+    for (var c = 8; c < this.moduleCount - 8; c++) {
+      if (this.modules[6][c] != null) {
+        continue;
+      }
+      this.modules[6][c] = c % 2 == 0;
+    }
+  },
+
+  setupPositionAdjustPattern: function () {
+
+    var pos = QRUtil.getPatternPosition(this.typeNumber);
+
+    for (var i = 0; i < pos.length; i++) {
+
+      for (var j = 0; j < pos.length; j++) {
+
+        var row = pos[i];
+        var col = pos[j];
+
+        if (this.modules[row][col] != null) {
+          continue;
+        }
+
+        for (var r = -2; r <= 2; r++) {
+
+          for (var c = -2; c <= 2; c++) {
+
+            if (r == -2 || r == 2 || c == -2 || c == 2 || r == 0 && c == 0) {
+              this.modules[row + r][col + c] = true;
+            } else {
+              this.modules[row + r][col + c] = false;
+            }
+          }
+        }
+      }
+    }
+  },
+
+  setupTypeNumber: function (test) {
+
+    var bits = QRUtil.getBCHTypeNumber(this.typeNumber);
+
+    for (var i = 0; i < 18; i++) {
+      var mod = !test && (bits >> i & 1) == 1;
+      this.modules[Math.floor(i / 3)][i % 3 + this.moduleCount - 8 - 3] = mod;
+    }
+
+    for (var i = 0; i < 18; i++) {
+      var mod = !test && (bits >> i & 1) == 1;
+      this.modules[i % 3 + this.moduleCount - 8 - 3][Math.floor(i / 3)] = mod;
+    }
+  },
+
+  setupTypeInfo: function (test, maskPattern) {
+
+    var data = this.errorCorrectLevel << 3 | maskPattern;
+    var bits = QRUtil.getBCHTypeInfo(data);
+
+    // vertical   
+    for (var i = 0; i < 15; i++) {
+
+      var mod = !test && (bits >> i & 1) == 1;
+
+      if (i < 6) {
+        this.modules[i][8] = mod;
+      } else if (i < 8) {
+        this.modules[i + 1][8] = mod;
+      } else {
+        this.modules[this.moduleCount - 15 + i][8] = mod;
+      }
+    }
+
+    // horizontal
+    for (var i = 0; i < 15; i++) {
+
+      var mod = !test && (bits >> i & 1) == 1;
+
+      if (i < 8) {
+        this.modules[8][this.moduleCount - i - 1] = mod;
+      } else if (i < 9) {
+        this.modules[8][15 - i - 1 + 1] = mod;
+      } else {
+        this.modules[8][15 - i - 1] = mod;
+      }
+    }
+
+    // fixed module
+    this.modules[this.moduleCount - 8][8] = !test;
+  },
+
+  mapData: function (data, maskPattern) {
+
+    var inc = -1;
+    var row = this.moduleCount - 1;
+    var bitIndex = 7;
+    var byteIndex = 0;
+
+    for (var col = this.moduleCount - 1; col > 0; col -= 2) {
+
+      if (col == 6) col--;
+
+      while (true) {
+
+        for (var c = 0; c < 2; c++) {
+
+          if (this.modules[row][col - c] == null) {
+
+            var dark = false;
+
+            if (byteIndex < data.length) {
+              dark = (data[byteIndex] >>> bitIndex & 1) == 1;
+            }
+
+            var mask = QRUtil.getMask(maskPattern, row, col - c);
+
+            if (mask) {
+              dark = !dark;
+            }
+
+            this.modules[row][col - c] = dark;
+            bitIndex--;
+
+            if (bitIndex == -1) {
+              byteIndex++;
+              bitIndex = 7;
+            }
+          }
+        }
+
+        row += inc;
+
+        if (row < 0 || this.moduleCount <= row) {
+          row -= inc;
+          inc = -inc;
+          break;
+        }
+      }
+    }
+  }
+
+};
+
+QRCode.PAD0 = 0xEC;
+QRCode.PAD1 = 0x11;
+
+QRCode.createData = function (typeNumber, errorCorrectLevel, dataList) {
+
+  var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectLevel);
+
+  var buffer = new QRBitBuffer();
+
+  for (var i = 0; i < dataList.length; i++) {
+    var data = dataList[i];
+    buffer.put(data.mode, 4);
+    buffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber));
+    data.write(buffer);
+  }
+
+  // calc num max data.
+  var totalDataCount = 0;
+  for (var i = 0; i < rsBlocks.length; i++) {
+    totalDataCount += rsBlocks[i].dataCount;
+  }
+
+  if (buffer.getLengthInBits() > totalDataCount * 8) {
+    throw new Error("code length overflow. (" + buffer.getLengthInBits() + ">" + totalDataCount * 8 + ")");
+  }
+
+  // end code
+  if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {
+    buffer.put(0, 4);
+  }
+
+  // padding
+  while (buffer.getLengthInBits() % 8 != 0) {
+    buffer.putBit(false);
+  }
+
+  // padding
+  while (true) {
+
+    if (buffer.getLengthInBits() >= totalDataCount * 8) {
+      break;
+    }
+    buffer.put(QRCode.PAD0, 8);
+
+    if (buffer.getLengthInBits() >= totalDataCount * 8) {
+      break;
+    }
+    buffer.put(QRCode.PAD1, 8);
+  }
+
+  return QRCode.createBytes(buffer, rsBlocks);
+};
+
+QRCode.createBytes = function (buffer, rsBlocks) {
+
+  var offset = 0;
+
+  var maxDcCount = 0;
+  var maxEcCount = 0;
+
+  var dcdata = new Array(rsBlocks.length);
+  var ecdata = new Array(rsBlocks.length);
+
+  for (var r = 0; r < rsBlocks.length; r++) {
+
+    var dcCount = rsBlocks[r].dataCount;
+    var ecCount = rsBlocks[r].totalCount - dcCount;
+
+    maxDcCount = Math.max(maxDcCount, dcCount);
+    maxEcCount = Math.max(maxEcCount, ecCount);
+
+    dcdata[r] = new Array(dcCount);
+
+    for (var i = 0; i < dcdata[r].length; i++) {
+      dcdata[r][i] = 0xff & buffer.buffer[i + offset];
+    }
+    offset += dcCount;
+
+    var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);
+    var rawPoly = new QRPolynomial(dcdata[r], rsPoly.getLength() - 1);
+
+    var modPoly = rawPoly.mod(rsPoly);
+    ecdata[r] = new Array(rsPoly.getLength() - 1);
+    for (var i = 0; i < ecdata[r].length; i++) {
+      var modIndex = i + modPoly.getLength() - ecdata[r].length;
+      ecdata[r][i] = modIndex >= 0 ? modPoly.get(modIndex) : 0;
+    }
+  }
+
+  var totalCodeCount = 0;
+  for (var i = 0; i < rsBlocks.length; i++) {
+    totalCodeCount += rsBlocks[i].totalCount;
+  }
+
+  var data = new Array(totalCodeCount);
+  var index = 0;
+
+  for (var i = 0; i < maxDcCount; i++) {
+    for (var r = 0; r < rsBlocks.length; r++) {
+      if (i < dcdata[r].length) {
+        data[index++] = dcdata[r][i];
+      }
+    }
+  }
+
+  for (var i = 0; i < maxEcCount; i++) {
+    for (var r = 0; r < rsBlocks.length; r++) {
+      if (i < ecdata[r].length) {
+        data[index++] = ecdata[r][i];
+      }
+    }
+  }
+
+  return data;
+};
+
+//---------------------------------------------------------------------
+// QRMode
+//---------------------------------------------------------------------
+
+var QRMode = {
+  MODE_NUMBER: 1 << 0,
+  MODE_ALPHA_NUM: 1 << 1,
+  MODE_8BIT_BYTE: 1 << 2,
+  MODE_KANJI: 1 << 3
+};
+
+//---------------------------------------------------------------------
+// QRErrorCorrectLevel
+//---------------------------------------------------------------------
+
+var QRErrorCorrectLevel = {
+  L: 1,
+  M: 0,
+  Q: 3,
+  H: 2
+};
+
+//---------------------------------------------------------------------
+// QRMaskPattern
+//---------------------------------------------------------------------
+
+var QRMaskPattern = {
+  PATTERN000: 0,
+  PATTERN001: 1,
+  PATTERN010: 2,
+  PATTERN011: 3,
+  PATTERN100: 4,
+  PATTERN101: 5,
+  PATTERN110: 6,
+  PATTERN111: 7
+};
+
+//---------------------------------------------------------------------
+// QRUtil
+//---------------------------------------------------------------------
+
+var QRUtil = {
+
+  PATTERN_POSITION_TABLE: [[], [6, 18], [6, 22], [6, 26], [6, 30], [6, 34], [6, 22, 38], [6, 24, 42], [6, 26, 46], [6, 28, 50], [6, 30, 54], [6, 32, 58], [6, 34, 62], [6, 26, 46, 66], [6, 26, 48, 70], [6, 26, 50, 74], [6, 30, 54, 78], [6, 30, 56, 82], [6, 30, 58, 86], [6, 34, 62, 90], [6, 28, 50, 72, 94], [6, 26, 50, 74, 98], [6, 30, 54, 78, 102], [6, 28, 54, 80, 106], [6, 32, 58, 84, 110], [6, 30, 58, 86, 114], [6, 34, 62, 90, 118], [6, 26, 50, 74, 98, 122], [6, 30, 54, 78, 102, 126], [6, 26, 52, 78, 104, 130], [6, 30, 56, 82, 108, 134], [6, 34, 60, 86, 112, 138], [6, 30, 58, 86, 114, 142], [6, 34, 62, 90, 118, 146], [6, 30, 54, 78, 102, 126, 150], [6, 24, 50, 76, 102, 128, 154], [6, 28, 54, 80, 106, 132, 158], [6, 32, 58, 84, 110, 136, 162], [6, 26, 54, 82, 110, 138, 166], [6, 30, 58, 86, 114, 142, 170]],
+
+  G15: 1 << 10 | 1 << 8 | 1 << 5 | 1 << 4 | 1 << 2 | 1 << 1 | 1 << 0,
+  G18: 1 << 12 | 1 << 11 | 1 << 10 | 1 << 9 | 1 << 8 | 1 << 5 | 1 << 2 | 1 << 0,
+  G15_MASK: 1 << 14 | 1 << 12 | 1 << 10 | 1 << 4 | 1 << 1,
+
+  getBCHTypeInfo: function (data) {
+    var d = data << 10;
+    while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) {
+      d ^= QRUtil.G15 << QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15);
+    }
+    return (data << 10 | d) ^ QRUtil.G15_MASK;
+  },
+
+  getBCHTypeNumber: function (data) {
+    var d = data << 12;
+    while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) {
+      d ^= QRUtil.G18 << QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18);
+    }
+    return data << 12 | d;
+  },
+
+  getBCHDigit: function (data) {
+
+    var digit = 0;
+
+    while (data != 0) {
+      digit++;
+      data >>>= 1;
+    }
+
+    return digit;
+  },
+
+  getPatternPosition: function (typeNumber) {
+    return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1];
+  },
+
+  getMask: function (maskPattern, i, j) {
+
+    switch (maskPattern) {
+
+      case QRMaskPattern.PATTERN000:
+        return (i + j) % 2 == 0;
+      case QRMaskPattern.PATTERN001:
+        return i % 2 == 0;
+      case QRMaskPattern.PATTERN010:
+        return j % 3 == 0;
+      case QRMaskPattern.PATTERN011:
+        return (i + j) % 3 == 0;
+      case QRMaskPattern.PATTERN100:
+        return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 == 0;
+      case QRMaskPattern.PATTERN101:
+        return i * j % 2 + i * j % 3 == 0;
+      case QRMaskPattern.PATTERN110:
+        return (i * j % 2 + i * j % 3) % 2 == 0;
+      case QRMaskPattern.PATTERN111:
+        return (i * j % 3 + (i + j) % 2) % 2 == 0;
+
+      default:
+        throw new Error("bad maskPattern:" + maskPattern);
+    }
+  },
+
+  getErrorCorrectPolynomial: function (errorCorrectLength) {
+
+    var a = new QRPolynomial([1], 0);
+
+    for (var i = 0; i < errorCorrectLength; i++) {
+      a = a.multiply(new QRPolynomial([1, QRMath.gexp(i)], 0));
+    }
+
+    return a;
+  },
+
+  getLengthInBits: function (mode, type) {
+
+    if (1 <= type && type < 10) {
+
+      // 1 - 9
+
+      switch (mode) {
+        case QRMode.MODE_NUMBER:
+          return 10;
+        case QRMode.MODE_ALPHA_NUM:
+          return 9;
+        case QRMode.MODE_8BIT_BYTE:
+          return 8;
+        case QRMode.MODE_KANJI:
+          return 8;
+        default:
+          throw new Error("mode:" + mode);
+      }
+    } else if (type < 27) {
+
+      // 10 - 26
+
+      switch (mode) {
+        case QRMode.MODE_NUMBER:
+          return 12;
+        case QRMode.MODE_ALPHA_NUM:
+          return 11;
+        case QRMode.MODE_8BIT_BYTE:
+          return 16;
+        case QRMode.MODE_KANJI:
+          return 10;
+        default:
+          throw new Error("mode:" + mode);
+      }
+    } else if (type < 41) {
+
+      // 27 - 40
+
+      switch (mode) {
+        case QRMode.MODE_NUMBER:
+          return 14;
+        case QRMode.MODE_ALPHA_NUM:
+          return 13;
+        case QRMode.MODE_8BIT_BYTE:
+          return 16;
+        case QRMode.MODE_KANJI:
+          return 12;
+        default:
+          throw new Error("mode:" + mode);
+      }
+    } else {
+      throw new Error("type:" + type);
+    }
+  },
+
+  getLostPoint: function (qrCode) {
+
+    var moduleCount = qrCode.getModuleCount();
+
+    var lostPoint = 0;
+
+    // LEVEL1
+
+    for (var row = 0; row < moduleCount; row++) {
+
+      for (var col = 0; col < moduleCount; col++) {
+
+        var sameCount = 0;
+        var dark = qrCode.isDark(row, col);
+
+        for (var r = -1; r <= 1; r++) {
+
+          if (row + r < 0 || moduleCount <= row + r) {
+            continue;
+          }
+
+          for (var c = -1; c <= 1; c++) {
+
+            if (col + c < 0 || moduleCount <= col + c) {
+              continue;
+            }
+
+            if (r == 0 && c == 0) {
+              continue;
+            }
+
+            if (dark == qrCode.isDark(row + r, col + c)) {
+              sameCount++;
+            }
+          }
+        }
+
+        if (sameCount > 5) {
+          lostPoint += 3 + sameCount - 5;
+        }
+      }
+    }
+
+    // LEVEL2
+
+    for (var row = 0; row < moduleCount - 1; row++) {
+      for (var col = 0; col < moduleCount - 1; col++) {
+        var count = 0;
+        if (qrCode.isDark(row, col)) count++;
+        if (qrCode.isDark(row + 1, col)) count++;
+        if (qrCode.isDark(row, col + 1)) count++;
+        if (qrCode.isDark(row + 1, col + 1)) count++;
+        if (count == 0 || count == 4) {
+          lostPoint += 3;
+        }
+      }
+    }
+
+    // LEVEL3
+
+    for (var row = 0; row < moduleCount; row++) {
+      for (var col = 0; col < moduleCount - 6; col++) {
+        if (qrCode.isDark(row, col) && !qrCode.isDark(row, col + 1) && qrCode.isDark(row, col + 2) && qrCode.isDark(row, col + 3) && qrCode.isDark(row, col + 4) && !qrCode.isDark(row, col + 5) && qrCode.isDark(row, col + 6)) {
+          lostPoint += 40;
+        }
+      }
+    }
+
+    for (var col = 0; col < moduleCount; col++) {
+      for (var row = 0; row < moduleCount - 6; row++) {
+        if (qrCode.isDark(row, col) && !qrCode.isDark(row + 1, col) && qrCode.isDark(row + 2, col) && qrCode.isDark(row + 3, col) && qrCode.isDark(row + 4, col) && !qrCode.isDark(row + 5, col) && qrCode.isDark(row + 6, col)) {
+          lostPoint += 40;
+        }
+      }
+    }
+
+    // LEVEL4
+
+    var darkCount = 0;
+
+    for (var col = 0; col < moduleCount; col++) {
+      for (var row = 0; row < moduleCount; row++) {
+        if (qrCode.isDark(row, col)) {
+          darkCount++;
+        }
+      }
+    }
+
+    var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;
+    lostPoint += ratio * 10;
+
+    return lostPoint;
+  }
+
+};
+
+//---------------------------------------------------------------------
+// QRMath
+//---------------------------------------------------------------------
+
+var QRMath = {
+
+  glog: function (n) {
+
+    if (n < 1) {
+      throw new Error("glog(" + n + ")");
+    }
+
+    return QRMath.LOG_TABLE[n];
+  },
+
+  gexp: function (n) {
+
+    while (n < 0) {
+      n += 255;
+    }
+
+    while (n >= 256) {
+      n -= 255;
+    }
+
+    return QRMath.EXP_TABLE[n];
+  },
+
+  EXP_TABLE: new Array(256),
+
+  LOG_TABLE: new Array(256)
+
+};
+
+for (var i = 0; i < 8; i++) {
+  QRMath.EXP_TABLE[i] = 1 << i;
+}
+for (var i = 8; i < 256; i++) {
+  QRMath.EXP_TABLE[i] = QRMath.EXP_TABLE[i - 4] ^ QRMath.EXP_TABLE[i - 5] ^ QRMath.EXP_TABLE[i - 6] ^ QRMath.EXP_TABLE[i - 8];
+}
+for (var i = 0; i < 255; i++) {
+  QRMath.LOG_TABLE[QRMath.EXP_TABLE[i]] = i;
+}
+
+//---------------------------------------------------------------------
+// QRPolynomial
+//---------------------------------------------------------------------
+
+function QRPolynomial(num, shift) {
+
+  if (num.length == undefined) {
+    throw new Error(num.length + "/" + shift);
+  }
+
+  var offset = 0;
+
+  while (offset < num.length && num[offset] == 0) {
+    offset++;
+  }
+
+  this.num = new Array(num.length - offset + shift);
+  for (var i = 0; i < num.length - offset; i++) {
+    this.num[i] = num[i + offset];
+  }
+}
+
+QRPolynomial.prototype = {
+
+  get: function (index) {
+    return this.num[index];
+  },
+
+  getLength: function () {
+    return this.num.length;
+  },
+
+  multiply: function (e) {
+
+    var num = new Array(this.getLength() + e.getLength() - 1);
+
+    for (var i = 0; i < this.getLength(); i++) {
+      for (var j = 0; j < e.getLength(); j++) {
+        num[i + j] ^= QRMath.gexp(QRMath.glog(this.get(i)) + QRMath.glog(e.get(j)));
+      }
+    }
+
+    return new QRPolynomial(num, 0);
+  },
+
+  mod: function (e) {
+
+    if (this.getLength() - e.getLength() < 0) {
+      return this;
+    }
+
+    var ratio = QRMath.glog(this.get(0)) - QRMath.glog(e.get(0));
+
+    var num = new Array(this.getLength());
+
+    for (var i = 0; i < this.getLength(); i++) {
+      num[i] = this.get(i);
+    }
+
+    for (var i = 0; i < e.getLength(); i++) {
+      num[i] ^= QRMath.gexp(QRMath.glog(e.get(i)) + ratio);
+    }
+
+    // recursive call
+    return new QRPolynomial(num, 0).mod(e);
+  }
+};
+
+//---------------------------------------------------------------------
+// QRRSBlock
+//---------------------------------------------------------------------
+
+function QRRSBlock(totalCount, dataCount) {
+  this.totalCount = totalCount;
+  this.dataCount = dataCount;
+}
+
+QRRSBlock.RS_BLOCK_TABLE = [
+
+// L
+// M
+// Q
+// H
+
+// 1
+[1, 26, 19], [1, 26, 16], [1, 26, 13], [1, 26, 9],
+
+// 2
+[1, 44, 34], [1, 44, 28], [1, 44, 22], [1, 44, 16],
+
+// 3
+[1, 70, 55], [1, 70, 44], [2, 35, 17], [2, 35, 13],
+
+// 4    
+[1, 100, 80], [2, 50, 32], [2, 50, 24], [4, 25, 9],
+
+// 5
+[1, 134, 108], [2, 67, 43], [2, 33, 15, 2, 34, 16], [2, 33, 11, 2, 34, 12],
+
+// 6
+[2, 86, 68], [4, 43, 27], [4, 43, 19], [4, 43, 15],
+
+// 7    
+[2, 98, 78], [4, 49, 31], [2, 32, 14, 4, 33, 15], [4, 39, 13, 1, 40, 14],
+
+// 8
+[2, 121, 97], [2, 60, 38, 2, 61, 39], [4, 40, 18, 2, 41, 19], [4, 40, 14, 2, 41, 15],
+
+// 9
+[2, 146, 116], [3, 58, 36, 2, 59, 37], [4, 36, 16, 4, 37, 17], [4, 36, 12, 4, 37, 13],
+
+// 10   
+[2, 86, 68, 2, 87, 69], [4, 69, 43, 1, 70, 44], [6, 43, 19, 2, 44, 20], [6, 43, 15, 2, 44, 16],
+
+// 11
+[4, 101, 81], [1, 80, 50, 4, 81, 51], [4, 50, 22, 4, 51, 23], [3, 36, 12, 8, 37, 13],
+
+// 12
+[2, 116, 92, 2, 117, 93], [6, 58, 36, 2, 59, 37], [4, 46, 20, 6, 47, 21], [7, 42, 14, 4, 43, 15],
+
+// 13
+[4, 133, 107], [8, 59, 37, 1, 60, 38], [8, 44, 20, 4, 45, 21], [12, 33, 11, 4, 34, 12],
+
+// 14
+[3, 145, 115, 1, 146, 116], [4, 64, 40, 5, 65, 41], [11, 36, 16, 5, 37, 17], [11, 36, 12, 5, 37, 13],
+
+// 15
+[5, 109, 87, 1, 110, 88], [5, 65, 41, 5, 66, 42], [5, 54, 24, 7, 55, 25], [11, 36, 12],
+
+// 16
+[5, 122, 98, 1, 123, 99], [7, 73, 45, 3, 74, 46], [15, 43, 19, 2, 44, 20], [3, 45, 15, 13, 46, 16],
+
+// 17
+[1, 135, 107, 5, 136, 108], [10, 74, 46, 1, 75, 47], [1, 50, 22, 15, 51, 23], [2, 42, 14, 17, 43, 15],
+
+// 18
+[5, 150, 120, 1, 151, 121], [9, 69, 43, 4, 70, 44], [17, 50, 22, 1, 51, 23], [2, 42, 14, 19, 43, 15],
+
+// 19
+[3, 141, 113, 4, 142, 114], [3, 70, 44, 11, 71, 45], [17, 47, 21, 4, 48, 22], [9, 39, 13, 16, 40, 14],
+
+// 20
+[3, 135, 107, 5, 136, 108], [3, 67, 41, 13, 68, 42], [15, 54, 24, 5, 55, 25], [15, 43, 15, 10, 44, 16],
+
+// 21
+[4, 144, 116, 4, 145, 117], [17, 68, 42], [17, 50, 22, 6, 51, 23], [19, 46, 16, 6, 47, 17],
+
+// 22
+[2, 139, 111, 7, 140, 112], [17, 74, 46], [7, 54, 24, 16, 55, 25], [34, 37, 13],
+
+// 23
+[4, 151, 121, 5, 152, 122], [4, 75, 47, 14, 76, 48], [11, 54, 24, 14, 55, 25], [16, 45, 15, 14, 46, 16],
+
+// 24
+[6, 147, 117, 4, 148, 118], [6, 73, 45, 14, 74, 46], [11, 54, 24, 16, 55, 25], [30, 46, 16, 2, 47, 17],
+
+// 25
+[8, 132, 106, 4, 133, 107], [8, 75, 47, 13, 76, 48], [7, 54, 24, 22, 55, 25], [22, 45, 15, 13, 46, 16],
+
+// 26
+[10, 142, 114, 2, 143, 115], [19, 74, 46, 4, 75, 47], [28, 50, 22, 6, 51, 23], [33, 46, 16, 4, 47, 17],
+
+// 27
+[8, 152, 122, 4, 153, 123], [22, 73, 45, 3, 74, 46], [8, 53, 23, 26, 54, 24], [12, 45, 15, 28, 46, 16],
+
+// 28
+[3, 147, 117, 10, 148, 118], [3, 73, 45, 23, 74, 46], [4, 54, 24, 31, 55, 25], [11, 45, 15, 31, 46, 16],
+
+// 29
+[7, 146, 116, 7, 147, 117], [21, 73, 45, 7, 74, 46], [1, 53, 23, 37, 54, 24], [19, 45, 15, 26, 46, 16],
+
+// 30
+[5, 145, 115, 10, 146, 116], [19, 75, 47, 10, 76, 48], [15, 54, 24, 25, 55, 25], [23, 45, 15, 25, 46, 16],
+
+// 31
+[13, 145, 115, 3, 146, 116], [2, 74, 46, 29, 75, 47], [42, 54, 24, 1, 55, 25], [23, 45, 15, 28, 46, 16],
+
+// 32
+[17, 145, 115], [10, 74, 46, 23, 75, 47], [10, 54, 24, 35, 55, 25], [19, 45, 15, 35, 46, 16],
+
+// 33
+[17, 145, 115, 1, 146, 116], [14, 74, 46, 21, 75, 47], [29, 54, 24, 19, 55, 25], [11, 45, 15, 46, 46, 16],
+
+// 34
+[13, 145, 115, 6, 146, 116], [14, 74, 46, 23, 75, 47], [44, 54, 24, 7, 55, 25], [59, 46, 16, 1, 47, 17],
+
+// 35
+[12, 151, 121, 7, 152, 122], [12, 75, 47, 26, 76, 48], [39, 54, 24, 14, 55, 25], [22, 45, 15, 41, 46, 16],
+
+// 36
+[6, 151, 121, 14, 152, 122], [6, 75, 47, 34, 76, 48], [46, 54, 24, 10, 55, 25], [2, 45, 15, 64, 46, 16],
+
+// 37
+[17, 152, 122, 4, 153, 123], [29, 74, 46, 14, 75, 47], [49, 54, 24, 10, 55, 25], [24, 45, 15, 46, 46, 16],
+
+// 38
+[4, 152, 122, 18, 153, 123], [13, 74, 46, 32, 75, 47], [48, 54, 24, 14, 55, 25], [42, 45, 15, 32, 46, 16],
+
+// 39
+[20, 147, 117, 4, 148, 118], [40, 75, 47, 7, 76, 48], [43, 54, 24, 22, 55, 25], [10, 45, 15, 67, 46, 16],
+
+// 40
+[19, 148, 118, 6, 149, 119], [18, 75, 47, 31, 76, 48], [34, 54, 24, 34, 55, 25], [20, 45, 15, 61, 46, 16]];
+
+QRRSBlock.getRSBlocks = function (typeNumber, errorCorrectLevel) {
+
+  var rsBlock = QRRSBlock.getRsBlockTable(typeNumber, errorCorrectLevel);
+
+  if (rsBlock == undefined) {
+    throw new Error("bad rs block @ typeNumber:" + typeNumber + "/errorCorrectLevel:" + errorCorrectLevel);
+  }
+
+  var length = rsBlock.length / 3;
+
+  var list = new Array();
+
+  for (var i = 0; i < length; i++) {
+
+    var count = rsBlock[i * 3 + 0];
+    var totalCount = rsBlock[i * 3 + 1];
+    var dataCount = rsBlock[i * 3 + 2];
+
+    for (var j = 0; j < count; j++) {
+      list.push(new QRRSBlock(totalCount, dataCount));
+    }
+  }
+
+  return list;
+};
+
+QRRSBlock.getRsBlockTable = function (typeNumber, errorCorrectLevel) {
+
+  switch (errorCorrectLevel) {
+    case QRErrorCorrectLevel.L:
+      return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];
+    case QRErrorCorrectLevel.M:
+      return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];
+    case QRErrorCorrectLevel.Q:
+      return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];
+    case QRErrorCorrectLevel.H:
+      return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];
+    default:
+      return undefined;
+  }
+};
+
+//---------------------------------------------------------------------
+// QRBitBuffer
+//---------------------------------------------------------------------
+
+function QRBitBuffer() {
+  this.buffer = new Array();
+  this.length = 0;
+}
+
+QRBitBuffer.prototype = {
+
+  get: function (index) {
+    var bufIndex = Math.floor(index / 8);
+    return (this.buffer[bufIndex] >>> 7 - index % 8 & 1) == 1;
+  },
+
+  put: function (num, length) {
+    for (var i = 0; i < length; i++) {
+      this.putBit((num >>> length - i - 1 & 1) == 1);
+    }
+  },
+
+  getLengthInBits: function () {
+    return this.length;
+  },
+
+  putBit: function (bit) {
+
+    var bufIndex = Math.floor(this.length / 8);
+    if (this.buffer.length <= bufIndex) {
+      this.buffer.push(0);
+    }
+
+    if (bit) {
+      this.buffer[bufIndex] |= 0x80 >>> this.length % 8;
+    }
+
+    this.length++;
+  }
+};
+
+// support Chinese
+function utf16to8(str) {
+  var out, i, len, c;
+  out = '';
+  len = str.length;
+  for (i = 0; i < len; i++) {
+    c = str.charCodeAt(i);
+    if (c >= 0x0001 && c <= 0x007F) {
+      out += str.charAt(i);
+    } else if (c > 0x07FF) {
+      out += String.fromCharCode(0xE0 | c >> 12 & 0x0F);
+      out += String.fromCharCode(0x80 | c >> 6 & 0x3F);
+      out += String.fromCharCode(0x80 | c >> 0 & 0x3F);
+    } else {
+      out += String.fromCharCode(0xC0 | c >> 6 & 0x1F);
+      out += String.fromCharCode(0x80 | c >> 0 & 0x3F);
+    }
+  }
+  return out;
+}
+
+function drawQrcode(options) {
+  options = options || {};
+  options = extend(true, {
+    width: 256,
+    height: 256,
+    x: 0,
+    y: 0,
+    typeNumber: -1,
+    correctLevel: QRErrorCorrectLevel.H,
+    background: '#ffffff',
+    foreground: '#000000',
+    image: {
+      imageResource: '',
+      dx: 0,
+      dy: 0,
+      dWidth: 100,
+      dHeight: 100
+    }
+  }, options);
+
+  if (!options.canvasId && !options.ctx) {
+    console.warn('please set canvasId or ctx!');
+    return;
+  }
+
+  createCanvas();
+
+  function createCanvas() {
+    // create the qrcode itself
+    var qrcode = new QRCode(options.typeNumber, options.correctLevel);
+    qrcode.addData(utf16to8(options.text));
+    qrcode.make();
+
+    // get canvas context
+    var ctx;
+    if (options.ctx) {
+      ctx = options.ctx;
+    } else {
+      ctx = options._this ? wx.createCanvasContext && wx.createCanvasContext(options.canvasId, options._this) : wx.createCanvasContext && wx.createCanvasContext(options.canvasId);
+    }
+
+    // compute tileW/tileH based on options.width/options.height
+    var tileW = options.width / qrcode.getModuleCount();
+    var tileH = options.height / qrcode.getModuleCount();
+
+    // draw in the canvas
+    for (var row = 0; row < qrcode.getModuleCount(); row++) {
+      for (var col = 0; col < qrcode.getModuleCount(); col++) {
+        var style = qrcode.isDark(row, col) ? options.foreground : options.background;
+        ctx.setFillStyle(style);
+        var w = Math.ceil((col + 1) * tileW) - Math.floor(col * tileW);
+        var h = Math.ceil((row + 1) * tileW) - Math.floor(row * tileW);
+        ctx.fillRect(Math.round(col * tileW) + options.x, Math.round(row * tileH) + options.y, w, h);
+      }
+    }
+
+    if (options.image.imageResource) {
+      ctx.drawImage(options.image.imageResource, options.image.dx, options.image.dy, options.image.dWidth, options.image.dHeight);
+    }
+
+    ctx.draw(false, function (e) {
+      options.callback && options.callback(e);
+    });
+  }
+}
+
+return drawQrcode;
+
+})));
diff --git a/pages/goods/details/components/buy-bar/index.js b/pages/goods/details/components/buy-bar/index.js
index ae274e2..16d3f33 100644
--- a/pages/goods/details/components/buy-bar/index.js
+++ b/pages/goods/details/components/buy-bar/index.js
@@ -40,6 +40,7 @@
 
   data: {
     fillPrice: false,
+    shoppingCartGetId: null
   },
 
   methods: {
@@ -47,6 +48,24 @@
       const { isStock } = this.properties;
       if (!isStock) return;
       this.triggerEvent('toAddCart');
+      // let query = {
+      //   start: 0,
+      //   size: 999,
+      //   filterList: [],
+      //   searchList: []
+      // }
+      // app.MG.store.getShoppingCartProductList(query).then(res => {
+      //   res.datas.forEach((item) => {
+      //     console.log(item.saleMethod.id, 'item.saleMethod.id');
+      //     this.setData({
+      //       shoppingCartGetId: item.saleMethod.id
+      //     })
+
+      //   })
+      // })
+
+
+
     },
 
     toBuyNow(e) {
diff --git a/pages/goods/details/components/buy-bar/index.wxml b/pages/goods/details/components/buy-bar/index.wxml
index 604afb4..a7aa86c 100644
--- a/pages/goods/details/components/buy-bar/index.wxml
+++ b/pages/goods/details/components/buy-bar/index.wxml
@@ -1,38 +1,29 @@
 <view class="flex soldout flex-center wr-sold-out" wx:if="{{soldout ||  !isStock}}">
-	{{soldout ? '鍟嗗搧宸蹭笅鏋�' : '鍟嗗搧宸插敭棣�'}}
+  {{soldout ? '鍟嗗搧宸蹭笅鏋�' : '鍟嗗搧宸插敭棣�'}}
 </view>
 <view class="footer-cont flex flex-between wr-class">
-	<view class="flex flex-between bottom-operate-left" wx:if="{{jumpArray.length > 0}}">
-		<view
-		  wx:for="{{jumpArray}}"
-		  wx:key="index"
-		  class="icon-warp operate-wrap"
-		  bindtap="toNav"
-		  data-ele="foot_navigation"
-		  data-index="{{index}}"
-		  data-url="{{item.url}}"
-		>
-			<view>
-				<text wx:if="{{shopCartNum > 0 && item.showCartNum}}" class="tag-cart-num">
-					{{shopCartNum > 99 ? '99+' : shopCartNum}}
-				</text>
-				<t-icon prefix="wr" name="{{item.iconName}}" size="40rpx" />
-				<view class="operate-text">{{item.title}}</view>
-			</view>
-		</view>
-	</view>
-	<block wx:if="{{buttonType === 1}}">
-		<view class="flex buy-buttons">
-			<view class="bar-separately {{soldout || !isStock ? 'bar-addCart-disabled' : ''}}" bindtap="toAddCart">
-				鍔犲叆璐墿杞�
-			</view>
-			<view class="bar-buy {{soldout || !isStock ? 'bar-buyNow-disabled' : ''}}" bindtap="toBuyNow">
-				绔嬪嵆璐拱
-			</view>
-		</view>
-	</block>
-	<block wx:if="{{isSlotButton}}">
-		<slot name="buyButton" />
-	</block>
-</view>
-
+  <view class="flex flex-between bottom-operate-left" wx:if="{{jumpArray.length > 0}}">
+    <view wx:for="{{jumpArray}}" wx:key="index" class="icon-warp operate-wrap" bindtap="toNav" data-ele="foot_navigation" data-index="{{index}}" data-url="{{item.url}}">
+      <view>
+        <text wx:if="{{shopCartNum > 0 && item.showCartNum}}" class="tag-cart-num">
+          {{shopCartNum > 99 ? '99+' : shopCartNum}}
+        </text>
+        <t-icon prefix="wr" name="{{item.iconName}}" size="40rpx" />
+        <view class="operate-text">{{item.title}}</view>
+      </view>
+    </view>
+  </view>
+  <block wx:if="{{buttonType === 1}}">
+    <view class="flex buy-buttons">
+      <view class="bar-separately {{soldout || !isStock ? 'bar-addCart-disabled' : ''}}" bindtap="toAddCart">
+        鍔犲叆璐墿杞�
+      </view>
+      <view class="bar-buy {{soldout || !isStock ? 'bar-buyNow-disabled' : ''}}" bindtap="toBuyNow">
+        绔嬪嵆璐拱
+      </view>
+    </view>
+  </block>
+  <block wx:if="{{isSlotButton}}">
+    <slot name="buyButton" />
+  </block>
+</view>
\ No newline at end of file
diff --git a/pages/home/home.js b/pages/home/home.js
index 250f062..4575a24 100644
--- a/pages/home/home.js
+++ b/pages/home/home.js
@@ -24,7 +24,8 @@
     booksList: [],
     readBookList: [], //鏁板瓧闃呰
     textbookList: [], //鏁板瓧鏁欐潗
-    rankingList: []//鎺掕姒�
+    rankingList: [],//鎺掕姒�
+    shoppingCartGetId: []
   },
   onShow() {
     this.getTabBar().init();
@@ -60,7 +61,8 @@
     this.getBookTypeList();
     this.getReadBookList();
     this.getTextbookListList();
-    this.getRankingList()
+    this.getRankingList();
+    this.getShoppingCartList()
   },
   // 鑾峰彇娴嬭瘯鐧诲綍鏃剁殑token
   getTestLoginInfo() {
@@ -181,9 +183,15 @@
   toPages(item) {
     let info = item.target.dataset.info
     if (info.url) {
-      wx.navigateTo({
-        url: info.url
-      })
+      if (info.text == "鍥句功鏈嶅姟") {
+        wx.switchTab({
+          url: info.url
+        })
+      } else {
+        wx.navigateTo({
+          url: info.url
+        })
+      }
     } else {
       wx.showToast({
         title: "寤鸿涓�",
@@ -222,6 +230,7 @@
       })
     })
   },
+
 
   //绮鹃�夎绋嬪垎绫�
   getCourseTypeListList() {
@@ -329,6 +338,7 @@
   //鍥句功鏈嶅姟
   tabBookClick(item) {
     let info = this.data.bookTypeList[item.detail.value]
+    console.log(info, 123)
     this.getBooksList(info)
   },
   //鏁板瓧闃呰
@@ -378,17 +388,29 @@
   //鑾峰彇鎺掕姒�
   getRankingList() {
     const obj = {
-      storeInfo: app.config.digitalTextbooks,
-      path: 'jsek_homepageDigitalTextbooks',
+      storeInfo: app.config.goodsStore,
+      path: '*',
+      queryType: '*',
       coverSize: {
         width: 150
       },
       paging: {
         start: 0,
-        size: 6
+        size: 10
       },
       fields: {
         author: [],
+      },
+      filterList: [
+        {
+          value: 'Normal',
+          field: 'state'
+        }
+      ],
+      sort: {
+        Name: 'Asc',
+        BaseType: ''
+
       }
     }
     app.MG.store.getProductList(obj).then((res) => {
@@ -397,6 +419,94 @@
       })
     })
   },
+  // 璺宠浆鍥句功璇︽儏
+  goDetail(e) {
+    const { book } = e.currentTarget.dataset;
+    wx.navigateTo({
+      url: `/pages/bookServices/detail/index?id=${book.id}&name=${book.name}`,
+    });
+  },
+  getShoppingCartList() {
+    let query = {
+      start: 0,
+      size: 999,
+      filterList: [],
+      searchList: []
+    }
+    app.MG.store.getShoppingCartProductList(query).then((res) => {
+      let idList = [];
+      res.datas.forEach((item) => {
+        idList.push(item.saleMethod.id)
+      })
+      this.setData({
+        shoppingCartGetId: idList
+      })
+    })
+  },
+  addCart(e) {
+    const { info } = e.currentTarget.dataset;
+    console.log(info)
+    if (wx.getStorageSync(app.config.tokenKey)) {
+      let query = {
+        start: 0,
+        size: 999,
+        filterList: [],
+        searchList: []
+      }
+      try {
+        if (
+          this.data.shoppingCartGetId.includes(
+            info.defaultSaleMethodId
+          )
+        ) {
+          wx.showToast({
+            title: "璇ヤ功宸插湪璐墿杞︼紝璇峰嬁閲嶅娣诲姞绌�",
+            icon: 'none',
+            duration: 1000
+          })
+        } else {
+          let query = {
+            requests: [
+              {
+                saleMethodId: info.defaultSaleMethodId,
+                storeEventId: null,
+                agentCode: '鐢靛瓙涔�'
+              }
+            ]
+          }
+          const addRes = app.MG.store.addShoppingCart(query)
+          if (addRes) {
+            wx.showToast({
+              title: "娣诲姞鎴愬姛",
+              icon: 'success',
+              duration: 1000
+            })
+          }
+          this.getShoppingCartList()
+        }
+      } catch (error) {
+        console.error('鍑洪敊浜嗭細', error)
+      }
+    }
+
+  },
+  onMoreGuide(e) {
+    let type = e.currentTarget.dataset.info
+    console.log(e, 1)
+    if (type == "tushufuwu") {
+      wx.navigateTo({
+        url: '/pages/bookServices/list/index'
+      })
+    } else {
+      wx.showToast({
+        title: "寤鸿涓�",
+        icon: 'none',
+        duration: 2000
+      })
+    }
+
+  },
+
 
   onPageScroll(e) {
     this.setData({
diff --git a/pages/home/home.wxml b/pages/home/home.wxml
index 547af8b..d96f714 100644
--- a/pages/home/home.wxml
+++ b/pages/home/home.wxml
@@ -28,13 +28,13 @@
       <view class="icon">
         <t-image src="/static/images/home/zhuantitaolun.png" mode="heightFix" class="iconImage" />
       </view>
-      <view bindtap="onMoreGuide" class="flex">
+      <view data-info="{{'zhuantitaolun'}}" bindtap="onMoreGuide" class="flex">
         <text class="more">鏇村</text>
         <t-icon name="chevron-right" size="32rpx" color="#ff6d00" />
       </view>
     </view>
     <view class="listBox">
-      <view wx:for="{{specialSubjectList}}" wx:for-item="item" wx:for-index="index" wx:key="index" bindtap="toList" data-info="{{item}}" class="listItemBox">
+      <view wx:for="{{specialSubjectList}}" wx:for-item="item" wx:for-index="index" wx:key="index" class="listItemBox">
         <view class="listItem">
           <view class="specialSubject-img">
             <image src="{{item.icon}}" mode="aspectFill" class="img" />
@@ -57,7 +57,7 @@
       <view class="icon">
         <t-image src="/static/images/home/jingxuankecheng@2x.png" mode="heightFix" class="iconImage" />
       </view>
-      <view bindtap="onMoreGuide" class="flex">
+      <view data-info="{{'jingxuankecheng'}}" bindtap="onMoreGuide" class="flex">
         <text class="more">鏇村</text>
         <t-icon name="chevron-right" size="32rpx" color="#ff6d00" />
       </view>
@@ -69,7 +69,7 @@
     </view>
     <view class="listBox1">
       <view wx:if="{{courseList.length>0}}">
-        <view wx:for="{{courseList}}" wx:for-item="item" wx:for-index="index" wx:key="index" bindtap="toList" data-info="{{item}}" class="listItemBox">
+        <view wx:for="{{courseList}}" wx:for-item="item" wx:for-index="index" wx:key="index" class="listItemBox">
           <view class="listItem flex">
             <view class="specialSubject-img">
               <image src="{{item.icon}}" mode="aspectFill" class="img" />
@@ -83,7 +83,7 @@
               <view class="priceBox flex jc-sb">
                 <text class="price" wx:if="{{item.price == 0}}">鍏嶈垂</text>
                 <text class="price" wx:if="{{item.price !== 0}}">锟{item.price}}</text>
-                <image src="/static/images/home/home-cart.png" mode="aspectFill" class="addCartImg" />
+                <image src="/static/images/home/home-cart.png" mode="aspectFill" class="addCartImg" bind:tap="addCart" data-info="{{item}}" />
               </view>
             </view>
           </view>
@@ -97,7 +97,7 @@
       <view class="icon">
         <t-image src="/static/images/home/tushufuwu@2x.png" mode="heightFix" class="iconImage" />
       </view>
-      <view bindtap="onMoreGuide" class="flex">
+      <view data-info="{{'tushufuwu'}}" bindtap="onMoreGuide" class="flex">
         <text class="more">鏇村</text>
         <t-icon name="chevron-right" size="32rpx" color="#ff6d00" />
       </view>
@@ -109,8 +109,8 @@
     </view>
     <view class="listBox2">
       <view wx:if="{{booksList.length > 0}}" class="flex">
-        <view wx:for="{{booksList}}" wx:for-item="item" wx:for-index="index" wx:key="index" bindtap="toList" data-info="{{item}}" class="booksListItemBox">
-          <view class="listItem">
+        <view wx:for="{{booksList}}" wx:for-item="item" wx:for-index="index" wx:key="index" class="booksListItemBox">
+          <view class="listItem" bind:tap="goDetail" data-book="{{item}}">
             <view class="specialSubject-img">
               <image src="{{item.icon}}" mode="aspectFill" class="img" />
             </view>
@@ -129,13 +129,13 @@
       <view class="icon">
         <t-image src="/static/images/home/shuziyuedu1@2x.png" mode="heightFix" class="iconImage" />
       </view>
-      <view bindtap="onMoreGuide" class="flex">
+      <view data-info="{{'shuziyuedu'}}" bindtap="onMoreGuide" class="flex">
         <text class="more">鏇村</text>
         <t-icon name="chevron-right" size="32rpx" color="#ff6d00" />
       </view>
     </view>
     <view class="listBox2 flex">
-      <view wx:for="{{readBookList}}" wx:for-item="item" wx:for-index="index" wx:key="index" bindtap="toList" data-info="{{item}}" class="booksListItemBox">
+      <view wx:for="{{readBookList}}" wx:for-item="item" wx:for-index="index" wx:key="index" class="booksListItemBox">
         <view class="listItem">
           <view class="specialSubject-img">
             <image src="{{item.icon}}" mode="aspectFill" class="img" />
@@ -151,14 +151,14 @@
       <view class="icon">
         <t-image src="/static/images/home/shuzijiaocai1@2x.png" mode="heightFix" class="iconImage" />
       </view>
-      <view bindtap="onMoreGuide" class="flex">
+      <view data-info="{{'shuzijiaocai'}}" bindtap="onMoreGuide" class="flex">
         <text class="more">鏇村</text>
         <t-icon name="chevron-right" size="32rpx" color="#ff6d00" />
       </view>
     </view>
     <view class="listBox3">
       <view wx:if="{{textbookList.length > 0}}" class="listBox3">
-        <view wx:for="{{textbookList}}" wx:for-item="item" wx:for-index="index" wx:key="index" bindtap="toList" data-info="{{item}}" class="textbooksItemBox">
+        <view wx:for="{{textbookList}}" wx:for-item="item" wx:for-index="index" wx:key="index" class="textbooksItemBox">
           <view class="listItem flex">
             <view class="specialSubject-img">
               <image src="{{item.icon}}" mode="aspectFill" class="img" />
@@ -170,7 +170,7 @@
               <view class="priceBox flex jc-sb">
                 <text class="price" wx:if="{{item.price == 0}}">鍏嶈垂</text>
                 <text class="price" wx:if="{{item.price !== 0}}">锟{item.price}}</text>
-                <image src="/static/images/home/home-cart.png" mode="aspectFill" class="addCartImg" />
+                <image src="/static/images/home/home-cart.png" mode="aspectFill" class="addCartImg" bind:tap="addCart" data-info="{{item}}" />
               </view>
             </view>
           </view>
@@ -184,23 +184,22 @@
       <view class="icon">
         <t-image src="/static/images/home/paihangbang@2x.png" mode="heightFix" class="iconImage" />
       </view>
-      <view bindtap="onMoreGuide" class="flex">
-        <text class="more">鏇村</text>
-        <t-icon name="chevron-right" size="32rpx" color="#ff6d00" />
-      </view>
     </view>
-    <view class="listBox2 rankingList flex">
-      <view wx:for="{{rankingList}}" wx:for-item="item" wx:for-index="index" wx:key="index" bindtap="toList" data-info="{{item}}" class="booksListItemBox">
-        <view class="listItem">
-          <view class="specialSubject-img">
-            <image src="{{item.icon}}" mode="aspectFill" class="img" />
-          </view>
-          <view class="body-info">
-            <view class="name">{{item.name}}</view>
-            <view class="author">{{item.author}}</view>
+    <view class="rankingList">
+      <scroll-view class="srcolbox" scroll-x scroll-with-animation='true'>
+        <view wx:for="{{rankingList}}" wx:for-item="item" wx:for-index="index" wx:key="index" class="booksListItemBox">
+          <view class="listItem" bind:tap="goDetail" data-book="{{item}}">
+            <view class="specialSubject-img">
+              <image src="{{item.icon}}" mode="aspectFill" class="img" wx:if="{{item.icon}}" />
+              <image src="/static/images/default-book-img.png" mode="aspectFill" class="img" wx:else />
+            </view>
+            <view class="body-info">
+              <view class="name">{{item.name}}</view>
+              <view class="author">{{item.author}}</view>
+            </view>
           </view>
         </view>
-      </view>
+      </scroll-view>
     </view>
   </view>
   <load-more list-is-empty="{{!goodsList.length}}" status="{{goodsListLoadStatus}}" bind:retry="onReTry" />
diff --git a/pages/home/home.wxss b/pages/home/home.wxss
index fa02cf0..446c24a 100644
--- a/pages/home/home.wxss
+++ b/pages/home/home.wxss
@@ -201,13 +201,18 @@
 }
 
 .listBox1 .listItemBox {
-  height: 220rpx;
+  height: 210rpx;
   margin-bottom: 30rpx;
 }
 
 .listBox1 .specialSubject-img {
-  width: 400rpx;
-  height: 218rpx;
+  width: 480rpx;
+  height: 210rpx;
+  flex: 1;
+}
+
+.listBox1 .body-info {
+  flex: 1;
 }
 
 .listBox1 .addCartImg,
@@ -217,7 +222,7 @@
 }
 
 .listBox1 .priceBox {
-  margin-top: 14rpx;
+  margin-top: 10rpx;
 }
 
 .listBox2 {
@@ -240,7 +245,7 @@
 }
 
 .listBox2 .specialSubject-img {
-  height: 300rpx;
+  height: 280rpx;
   width: 100%;
   box-shadow: 0px 0px 20rpx 2px #f1f1f1;
 }
@@ -273,7 +278,7 @@
 
 .listBox3 .textbooksItemBox .specialSubject-img {
   width: 190rpx;
-  height: 260rpx;
+  height: 250rpx;
   box-shadow: 0px 0px 20rpx 2px #f1f1f1;
 }
 
@@ -313,4 +318,43 @@
 
 .readList {
   overflow: auto;
+}
+
+.rankingList .listItem {
+  padding: 20rpx 0;
+}
+
+.srcolbox {
+  width: 100%;
+  height: 480rpx;
+  white-space: nowrap;
+}
+
+.srcolbox .booksListItemBox {
+  display: inline-block;
+  width: 188rpx;
+  margin-right: 30rpx;
+}
+
+.rankingList .specialSubject-img {
+  height: 254rpx;
+  width: 100%;
+  box-shadow: 0px 0px 20rpx 2px #f1f1f1;
+}
+
+.rankingList .body-info {
+  padding: 20rpx 0;
+}
+
+.rankingList .author {
+  height: 30rpx;
+  color: #333333;
+  font-weight: bold;
+  line-height: 30rpx;
+  display: -webkit-box;
+  margin-bottom: 10rpx;
+  -webkit-box-orient: vertical;
+  -webkit-line-clamp: 1;
+  overflow: hidden;
+  text-overflow: ellipsis;
 }
\ No newline at end of file
diff --git a/pages/personalCenter/certificate/index.wxss b/pages/personalCenter/certificate/index.wxss
index e69de29..b13f6f1 100644
--- a/pages/personalCenter/certificate/index.wxss
+++ b/pages/personalCenter/certificate/index.wxss
@@ -0,0 +1 @@
+/* pages/personalCenter/certificate/index.wxss */
\ No newline at end of file
diff --git a/pages/personalCenter/components/user-center-card/index.wxml b/pages/personalCenter/components/user-center-card/index.wxml
index d6af2e3..60d1830 100644
--- a/pages/personalCenter/components/user-center-card/index.wxml
+++ b/pages/personalCenter/components/user-center-card/index.wxml
@@ -4,7 +4,7 @@
     <view class="user-center-card__header" bind:tap="gotoUserEditPage">
       <t-avatar image="{{userInfo.avatarUrl || defaultAvatarUrl}}" class="user-center-card__header__avatar" />
       <view class="user-center-card__header__name">{{'璇风櫥褰�'}}</view>
-      <view class="setting">
+      <view class="setting" bind:tap="gotoUserEditPage">
         <image src="/static/images/personal/setting.png" mode="heightFix" class="img" />
         <text>璁剧疆</text>
       </view>
diff --git a/pages/personalCenter/feedBack/index.js b/pages/personalCenter/feedBack/index.js
index f904417..13d7ca0 100644
--- a/pages/personalCenter/feedBack/index.js
+++ b/pages/personalCenter/feedBack/index.js
@@ -1,10 +1,41 @@
 // pages/personalCenter/feedBack/index.js
+import moment from 'moment'
+const app = getApp();
 Page({
 
   /**
    * 椤甸潰鐨勫垵濮嬫暟鎹�
    */
   data: {
+    active: 0,
+    activeName: "proposition",
+    tabList: [
+      {
+        label: '鍥句功寤鸿',
+        key: 0,
+        value: 'proposition'
+      },
+      {
+        label: '鎰忚鍙嶉',
+        key: 1,
+        value: "feedback"
+      }
+    ],
+    list: [
+      {
+        name: "ceshi",
+      }
+    ],
+    //鍒嗛〉
+    page: 1,
+    limit: 10,
+    pageTotalCount: 0,
+    bottomLoading: false,
+    isMoreData: false,
+    // 杩斿洖椤堕儴
+    isBackTop: false,
+    setScrollValue: 0,
+    skeletonLoding: true,
 
   },
 
@@ -13,6 +44,11 @@
    */
   onLoad(options) {
     console.log(options);
+    // if (this.data.activeName == "proposition") {
+    //   this.getDataList("bookOpinion", false);
+    // } else {
+    //   this.getDataList("feedback", false);
+    // }
   },
 
   /**
@@ -28,14 +64,6 @@
   onShow() {
 
   },
-
-  /**
-   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰闅愯棌
-   */
-  onHide() {
-
-  },
-
   /**
    * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍗歌浇
    */
@@ -43,18 +71,141 @@
 
   },
 
+  tabBookClick(item) {
+    console.log(item, 1)
+    let that = this;
+    let info = this.data.tabList[item.detail.value]
+    that.setData({
+      skeletonLoding: true,
+      active: item.detail.value,
+      activeName: info.value,
+      list: [],
+      page: 1,
+      bottomLoading: false,
+      isMoreData: false,
+    })
+    if (info.value == "proposition") {
+      that.getDataList("bookOpinion", false);
+    } else {
+      that.getDataList("feedback", false);
+    }
+  },
+
+  getDataList(code, isReachBottom) {
+    app.MG.ugc.getTopicMessageList({
+      appRefCode: app.config.appRefCode,
+      topicIdOrRefCode: code,
+      start: this.data.page * this.data.limit - this.data.limit,
+      size: this.data.limit,
+      sort: {
+        type: "Desc",
+        field: "CreateDate"
+      }
+    })
+      .then(res => {
+        try {
+          if (res.datas.length > 0) {
+            // res.datas.forEach((item) => {
+            //   item.title = JSON.parse(item.content).content;
+            //   item.createDate = moment(item.createDate).format("YYYY-MM-DD");
+            //   item.updateDate = moment(item.updateDate).format("YYYY-MM-DD");;
+            //   item.feedBack = item.feedBack ? item.feedBack : "-";
+            // });
+            let dataList = res.datas;
+            //瑙﹀簳鍔犺浇鏂版暟鎹苟淇濈暀鑰佹暟鎹�
+            if (isReachBottom) {
+              dataList = [...this.data.list, ...dataList] //灏嗘柊鏁版嵁鍔犲叆鑰佹暟鎹腑
+            }
+            this.setData({
+              list: dataList,
+              pageTotalCount: res.totalSize,
+              bottomLoading: false,
+              isMoreData: dataList.length > 0 ? false : true,
+              skeletonLoding: false,
+            })
+            console.log(this.data.list, 333)
+          } else {
+            this.setData({
+              skeletonLoding: false,
+            })
+          }
+        } catch (error) {
+          console.log(error)
+        }
+      })
+  },
+
   /**
    * 椤甸潰鐩稿叧浜嬩欢澶勭悊鍑芥暟--鐩戝惉鐢ㄦ埛涓嬫媺鍔ㄤ綔
    */
   onPullDownRefresh() {
-
+    if (this._freshing) return
+    this.setData({
+      page: 1,
+      limit: 10,
+      pageTotalCount: 0,
+      bottomLoading: false,
+      isMoreData: false
+    })
+    this._freshing = true;
+    this.setData({
+      triggered: false,
+    })
+    if (this.data.activeName == "proposition") {
+      this.getDataList("bookOpinion", false);
+    } else {
+      this.getDataList("feedback", false);
+    }
+    this._freshing = false
   },
 
   /**
    * 椤甸潰涓婃媺瑙﹀簳浜嬩欢鐨勫鐞嗗嚱鏁�
    */
   onReachBottom() {
+    this.setData({
+      bottomLoading: true,
+      isMoreData: false
+    })
+    let bool = false;
+    if (this.data.pageTotalCount > this.data.list.length) {
+      bool = true;
+      this.setData({
+        page: this.data.page + 1,
+      })
+    } else {
+      setTimeout(() => {
+        this.setData({
+          bottomLoading: false,
+          isMoreData: true
+        })
+      }, 100)
+      return false;
+    }
+    if (this.data.activeName == "proposition") {
+      this.getDataList("bookOpinion", bool);
+    } else {
+      this.getDataList("feedback", bool);
+    }
+  },
 
+  // 鐩戝惉婊氬姩璺濈
+  onPageScroll(e) {
+    if (e && e.scrollTop >= 1000) {
+      this.setData({
+        isBackTop: true
+      })
+    } else {
+      this.setData({
+        isBackTop: false
+      })
+    }
+  },
+
+  goSubmit() {
+    wx.navigateTo({
+      url: "/pages/personalCenter/feedBackSubmit/index",
+    });
   },
 
   /**
diff --git a/pages/personalCenter/feedBack/index.json b/pages/personalCenter/feedBack/index.json
index 8f9ad0c..07a4e72 100644
--- a/pages/personalCenter/feedBack/index.json
+++ b/pages/personalCenter/feedBack/index.json
@@ -1,4 +1,12 @@
 {
   "navigationBarTitleText": "寤鸿涓庡弽棣�",
-  "usingComponents": {}
+  "usingComponents": {
+    "t-tabs": "tdesign-miniprogram/tabs/tabs",
+    "t-tab-panel": "tdesign-miniprogram/tab-panel/tab-panel",
+    "t-back-top": "tdesign-miniprogram/back-top/back-top",
+    "t-pull-down-refresh": "tdesign-miniprogram/pull-down-refresh/pull-down-refresh",
+    "t-loading": "tdesign-miniprogram/loading/loading",
+    "t-image": "tdesign-miniprogram/image/image",
+    "t-empty": "tdesign-miniprogram/empty/empty"
+  }
 }
\ No newline at end of file
diff --git a/pages/personalCenter/feedBack/index.wxml b/pages/personalCenter/feedBack/index.wxml
index 134e541..2825540 100644
--- a/pages/personalCenter/feedBack/index.wxml
+++ b/pages/personalCenter/feedBack/index.wxml
@@ -1,2 +1,55 @@
-<!--pages/personalCenter/feedBack/index.wxml-->
-<text>pages/personalCenter/feedBack/index.wxml</text>
+<view class="container">
+  <t-tabs t-class="t-tabs" t-class-active="tabs-external__active" t-class-item="tabs-external__item" defaultValue="{{active}}" space-evenly="{{false}}" bind:change="tabBookClick">
+    <t-tab-panel wx:for="{{tabList}}" wx:for-index="index" wx:key="index" label="{{item.label}}" value="{{index}}">
+      <view class="pageInfo">
+        <scroll-view class="scroll content" bind:scroll="onPageScroll" model:scroll-top="{{setScrollValue}}" scroll-y refresher-enabled="{{true}}" lower-threshold="{{200}}" refresher-threshold="{{80}}" refresher-default-style="none" refresher-triggered="{{triggered}}" bindrefresherpulling="{{refresh.onPulling}}" bindrefresherrefresh="onPullDownRefresh" bindscrolltolower="onReachBottom">
+          <view slot="refresher" class="refresh-container">
+            <view class="loading">
+              <t-loading theme="circular" size="40rpx" text="姝e湪鍒锋柊..." class="wrapper" />
+            </view>
+          </view>
+          {{list}}
+          <view class="list">
+            <view wx:if="{{activeName == 'bookOpinion'}}" class="listBox">
+              <view class="content-item" wx:for="{{list}}" wx:for-item="item" wx:for-index="index" wx:key="index">
+                <view class="icon">
+                  <t-image src="{{item.icon}}" mode="heightFix" class="img" />
+                </view>
+                <view class="item-con">
+                  <view class="titleBox">
+                    <view class="item-title">{{item.name}}</view>
+                  </view>
+                </view>
+              </view>
+            </view>
+            <!-- <view wx:if="{{activeName == 'feedback'}}">
+              <view class="content-item" wx:for="{{list}}" wx:for-item="item" wx:for-index="index" wx:key="index">
+                <view class="item-con">
+                  <view class="titleBox">
+                    <view class="item-title">{{item.name}}</view>
+                  </view>
+                </view>
+              </view>
+            </view> -->
+          </view>
+          <view wx:if="{{list.length == 0}}" class="empyt">
+            <t-empty icon="folder-open" description="鏆傛棤鏁版嵁" />
+          </view>
+          <view class="bottom-loading" wx:if="{{bottomLoading}}">
+            <t-loading theme="circular" size="40rpx" text="鍔犺浇涓�..." class="wrapper" />
+          </view>
+          <view class="bottom-loading" style="color: #ccc;font-size: 28rpx;" wx:if="{{isMoreData}}">
+            <text>娌℃湁鏇村浜�</text>
+          </view>
+        </scroll-view>
+      </view>
+    </t-tab-panel>
+  </t-tabs>
+  <view class="submitBox" bindtap="goSubmit" wx:if="{{activeName == 'feedback'}}">
+    <view class="box">
+      <t-image src="/static/images/personal/suggestion.png" mode="heightFix" class="img" />
+      <text>鎴戣鍙嶉</text>
+    </view>
+  </view>
+  <t-back-top theme="round" wx:if="{{isBackTop}}" text="椤堕儴" bind:to-top="onToTop"></t-back-top>
+</view>
\ No newline at end of file
diff --git a/pages/personalCenter/feedBack/index.wxss b/pages/personalCenter/feedBack/index.wxss
index 62d1b32..6e24a8b 100644
--- a/pages/personalCenter/feedBack/index.wxss
+++ b/pages/personalCenter/feedBack/index.wxss
@@ -1 +1,103 @@
-/* pages/personalCenter/feedBack/index.wxss */
\ No newline at end of file
+page {
+  background-color: #f0f2f5;
+  box-sizing: border-box;
+  padding: 0 24rpx;
+}
+
+.t-tabs__track {
+  display: none;
+}
+
+.t-tabs {
+  margin-top: 20rpx;
+  background: none !important;
+}
+
+.t-tabs__wrapper {
+  background: none !important;
+}
+
+.t-tabs__nav :nth-child(1) {
+  border-radius: 30rpx 30rpx 0 0rpx;
+}
+
+.t-tabs__nav :nth-child(2) {
+  border-radius: 0rpx 30rpx 0 30rpx;
+}
+
+.t-tabs__item {
+  flex: 1 !important;
+  background: #E6E8F1;
+  height: 76rpx !important;
+  margin-top: 16rpx;
+  border-radius: 30rpx 0 30rpx 0rpx !important;
+}
+
+.t-tabs__item--active {
+  color: #333 !important;
+  background: #fff;
+  height: 96rpx;
+  font-size: 32rpx;
+  margin-top: 0;
+  height: 96rpx !important;
+  border-radius: 30rpx 30rpx 0 0rpx !important;
+}
+
+.t-tabs__item--active+.t-tabs__item {
+  border-radius: 0 30rpx 0 30rpx !important;
+}
+
+.refresh-container {
+  margin: 0 auto;
+}
+
+.bottom-loading,
+.loading {
+  padding: 20rpx;
+  text-align: center;
+}
+
+.content {
+  height: calc(100vh - env(safe-area-inset-bottom));
+  box-sizing: border-box;
+}
+
+.content-item {
+  background: #fff;
+}
+
+.listBox:nth-child(1) {
+  margin-top: -30rpx;
+  padding-top: 30rpx;
+}
+
+.submitBox {
+  width: 220rpx;
+  height: 80rpx;
+  line-height: 80rpx;
+  background: #ff6d00;
+  color: #fff;
+  border-radius: 50rpx 0 0 50rpx;
+  position: fixed;
+  bottom: 20%;
+  right: 0;
+}
+
+.submitBox .box {
+  display: flex;
+  margin: 0 auto;
+  width: 160rpx;
+  align-items: center;
+  text-align: center;
+  font-size: 28rpx;
+}
+
+.submitBox .img {
+  width: 40rpx;
+  height: 40rpx;
+  margin-right: 10rpx;
+}
+
+.empyt {
+  padding: 200rpx 0;
+}
\ No newline at end of file
diff --git a/pages/personalCenter/feedBackSubmit/index.js b/pages/personalCenter/feedBackSubmit/index.js
index fe4eb7e..0762189 100644
--- a/pages/personalCenter/feedBackSubmit/index.js
+++ b/pages/personalCenter/feedBackSubmit/index.js
@@ -1,11 +1,15 @@
 // pages/personalCenter/feedBackSubmit/index.js
+const app = getApp();
 Page({
 
   /**
    * 椤甸潰鐨勫垵濮嬫暟鎹�
    */
   data: {
-
+    userName: "",
+    mannder: "",
+    content: "",
+    lock: true,
   },
 
   /**
@@ -26,7 +30,6 @@
    * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
    */
   onShow() {
-
   },
 
   /**
@@ -56,11 +59,82 @@
   onReachBottom() {
 
   },
+  bindTnputBlur: function (e) {
+    this.setData({
+      userName: e.detail.value,
+    });
+  },
+  bindTnputBlur1: function (e) {
+    this.setData({
+      mannder: e.detail.value,
+    });
+  },
+  bindTextAreaBlur: function (e) {
+    this.setData({
+      content: e.detail.value,
+    });
+  },
 
-  /**
-   * 鐢ㄦ埛鐐瑰嚮鍙充笂瑙掑垎浜�
-   */
-  onShareAppMessage() {
-
+  submit() {
+    if (this.data.lock) {
+      this.data.lock = false;
+      if (this.data.userName) {
+        if (this.data.mannder) {
+          if (this.data.content) {
+            let submitData = {
+              content: this.data.content,
+              name: this.data.userName,
+              email: "",
+              phone: this.data.mannder
+            };
+            var data = {
+              topicIdOrRefCode: "feedback",
+              name: "鎰忚鍙嶉",
+              content: JSON.stringify(submitData),
+              type: "opinionFeedback",
+              state: "WaitAudit",
+              cmsTypeRefCode: "",
+              newDataListRequest: []
+            };
+            app.MG.ugc.newTopicMessage(data).then(res => {
+              this.data.lock = true;
+              if (res) {
+                wx.showToast({
+                  title: "鎻愪氦鎴愬姛",
+                  icon: 'success',
+                  duration: 1000,
+                  success: function () {
+                    setTimeout(function () {
+                      wx.navigateBack();
+                    }, 1000) //寤惰繜鏃堕棿
+                  }
+                })
+              }
+            });
+          } else {
+            this.data.lock = true;
+            wx.showToast({
+              title: "鍙嶉鍐呭涓嶈兘涓虹┖",
+              icon: 'none',
+              duration: 1000
+            })
+          }
+        } else {
+          this.data.lock = true;
+          wx.showToast({
+            title: "鑱旂郴鏂瑰紡涓嶈兘涓虹┖",
+            icon: 'none',
+            duration: 1000
+          })
+        }
+      } else {
+        this.data.lock = true;
+        wx.showToast({
+          title: "鑱旂郴浜轰笉鑳戒负绌轰笉鑳戒负绌�",
+          icon: 'none',
+          duration: 1000
+        })
+      }
+    }
   }
 })
\ No newline at end of file
diff --git a/pages/personalCenter/feedBackSubmit/index.wxml b/pages/personalCenter/feedBackSubmit/index.wxml
index 675b7b0..b631d1c 100644
--- a/pages/personalCenter/feedBackSubmit/index.wxml
+++ b/pages/personalCenter/feedBackSubmit/index.wxml
@@ -1,2 +1,25 @@
-<!--pages/personalCenter/feedBackSubmit/index.wxml-->
-<text>pages/personalCenter/feedBackSubmit/index.wxml</text>
+<view class="container">
+  <view class="page-body">
+    <view class="from-item">
+      <view class="label"> 鑱旂郴浜猴細 </view>
+      <view class="item-content">
+        <input class="weui-input" name="userName" auto-focus="true" adjust-position="true" value="{{userName}}" placeholder="璇疯緭鍏ヨ仈绯讳汉" bindinput="bindTnputBlur" />
+      </view>
+    </view>
+    <view class="from-item">
+      <view class="label"> 鑱旂郴鏂瑰紡锛� </view>
+      <view class="item-content">
+        <input class="weui-input" name="mannder" auto-focus="true" adjust-position="true" value="{{mannder}}" placeholder="璇疯緭鍏ヨ仈绯绘柟寮�" bindinput="bindTnputBlur1" />
+      </view>
+    </view>
+    <view class="from-item">
+      <view class="label"> 鍙嶉鍐呭锛� </view>
+      <view class="item-content">
+        <textarea name="content" rows="4" cols="52" placeholder="璇疯緭鍏ュ弽棣堝唴瀹�" auto-focus="true" adjust-position="true" value="{{content}}" bindinput="bindTextAreaBlur"></textarea>
+      </view>
+    </view>
+    <view class="btn-area">
+      <button class="submit" bindtap="submit">鎻愪氦</button>
+    </view>
+  </view>
+</view>
\ No newline at end of file
diff --git a/pages/personalCenter/feedBackSubmit/index.wxss b/pages/personalCenter/feedBackSubmit/index.wxss
index 5445ab2..1cd14bb 100644
--- a/pages/personalCenter/feedBackSubmit/index.wxss
+++ b/pages/personalCenter/feedBackSubmit/index.wxss
@@ -1 +1,30 @@
-/* pages/personalCenter/feedBackSubmit/index.wxss */
\ No newline at end of file
+/* pages/personalCenter/feedBackSubmit/index.wxss */
+page {
+  box-sizing: border-box;
+  padding: 0 24rpx;
+}
+
+.page-body {
+  padding: 20rpx;
+  font-size: 28rpx;
+}
+
+.from-item {
+  margin-bottom: 20rpx;
+}
+
+.from-item .label {
+  width: 240rpx;
+  height: 68rpx;
+  line-height: 68rpx;
+}
+
+.from-item .item-content {
+  border: 2rpx solid #D9D9D9;
+  padding: 10rpx;
+}
+
+.submit {
+  background: #ff6c00;
+  color: #fff;
+}
\ No newline at end of file
diff --git a/pages/personalCenter/index.js b/pages/personalCenter/index.js
index 9256f51..2c1760e 100644
--- a/pages/personalCenter/index.js
+++ b/pages/personalCenter/index.js
@@ -59,7 +59,7 @@
   {
     title: '寤鸿涓庡弽棣�',
     icon: '/static/images/personal/feedback.png',
-    url: '/pages/personalCenter/feedback/index',
+    url: '/pages/personalCenter/feedBack/index',
     type: 'feedback',
   }
 ];
@@ -179,7 +179,7 @@
   //鐐瑰嚮鐩綍
   toPages(item) {
     console.log(item)
-    let info = item.target.dataset.info
+    let info = item.currentTarget.dataset.info
     if (info.url) {
       wx.navigateTo({
         url: info.url
diff --git a/pages/personalCenter/myCollection/index.js b/pages/personalCenter/myCollection/index.js
index 358d636..d5bdf97 100644
--- a/pages/personalCenter/myCollection/index.js
+++ b/pages/personalCenter/myCollection/index.js
@@ -1,10 +1,35 @@
+const app = getApp();
 Page({
 
   /**
    * 椤甸潰鐨勫垵濮嬫暟鎹�
    */
   data: {
-
+    active: 0,
+    activeName: "FavoriteBookCity",
+    tabList: [
+      {
+        label: '鍥句功',
+        key: 0,
+        linkType: 'FavoriteBookCity',
+      },
+      {
+        label: '璇剧▼',
+        key: 1,
+        linkType: 'Favoriteclass',
+      }
+    ],
+    list: [],
+    //鍒嗛〉
+    page: 1,
+    limit: 12,
+    pageTotalCount: 0,
+    bottomLoading: false,
+    isMoreData: false,
+    // 杩斿洖椤堕儴
+    isBackTop: false,
+    setScrollValue: 0,
+    skeletonLoding: true,
   },
 
   /**
@@ -12,6 +37,7 @@
    */
   onLoad(options) {
     console.log(options);
+    this.getDataList();
   },
 
   /**
@@ -21,41 +47,142 @@
 
   },
 
-  /**
-   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
-   */
-  onShow() {
-
+  tabBookClick(item) {
+    console.log(item, 1)
+    let that = this;
+    let info = this.data.tabList[item.detail.value]
+    that.setData({
+      skeletonLoding: true,
+      active: item.detail.value,
+      activeName: info.linkType,
+      list: [],
+      page: 1,
+      bottomLoading: false,
+      isMoreData: false,
+    })
+    that.getDataList(false);
   },
-
-  /**
-   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰闅愯棌
-   */
-  onHide() {
-
+  getDataList(isReachBottom) {
+    app.MG.store.getProductList({
+      handelEBooK: true,
+      queryType: "AppUserProductLink",
+      linkType: this.data.activeName,
+      paging: {
+        start: this.data.page * this.data.limit - this.data.limit,
+        size: this.data.limit
+      },
+      fields: {
+        author: []
+      }
+    }).then((res) => {
+      try {
+        if (res.datas.length > 0) {
+          let dataList = res.datas;
+          //瑙﹀簳鍔犺浇鏂版暟鎹苟淇濈暀鑰佹暟鎹�
+          if (isReachBottom) {
+            dataList = [...this.data.list, ...dataList] //灏嗘柊鏁版嵁鍔犲叆鑰佹暟鎹腑
+          }
+          this.setData({
+            list: dataList,
+            pageTotalCount: res.total,
+            bottomLoading: false,
+            isMoreData: dataList.length > 0 ? false : true,
+            skeletonLoding: false,
+            loading: false
+          })
+        } else {
+          this.setData({
+            skeletonLoding: false,
+            loading: false
+          })
+        }
+      } catch (error) {
+        console.log(error)
+      }
+    })
   },
-
-  /**
-   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍗歌浇
-   */
-  onUnload() {
-
-  },
-
   /**
    * 椤甸潰鐩稿叧浜嬩欢澶勭悊鍑芥暟--鐩戝惉鐢ㄦ埛涓嬫媺鍔ㄤ綔
    */
   onPullDownRefresh() {
-
+    if (this._freshing) return
+    this.setData({
+      // list: [],
+      page: 1,
+      limit: 18,
+      pageTotalCount: 0,
+      bottomLoading: false,
+      isMoreData: false
+    })
+    this._freshing = true;
+    this.setData({
+      triggered: false,
+    })
+    this.getDataList(false);
+    this._freshing = false
   },
 
   /**
    * 椤甸潰涓婃媺瑙﹀簳浜嬩欢鐨勫鐞嗗嚱鏁�
    */
   onReachBottom() {
-
+    this.setData({
+      bottomLoading: true,
+      isMoreData: false
+    })
+    let bool = false;
+    if (this.data.pageTotalCount > this.data.list.length) {
+      bool = true;
+      this.setData({
+        page: this.data.page + 1,
+      })
+    } else {
+      setTimeout(() => {
+        this.setData({
+          bottomLoading: false,
+          isMoreData: true
+        })
+      }, 100)
+      return false;
+    }
+    this.getDataList(bool);
   },
 
+  setCoolect(itemData) {
+    let that = this;
+    let info = itemData.currentTarget.dataset.info;
+    wx.showModal({
+      title: '鎻愮ず', //鎻愮ず鐨勬爣棰�
+      content: '纭畾瑕佸彇娑堟敹钘忥紵', //鎻愮ず鐨勫唴瀹�
+      success: function (res) {
+        if (res.confirm) {
+          app.MG.store
+            .delProductLink({
+              productIds: [info.id],
+              linkType: that.data.activeName,
+            })
+            .then(() => {
+              wx.showToast({
+                title: "鏀惰棌宸插彇娑�",
+                icon: 'success',
+                duration: 1000,
+              })
+              this.getDataList(false)
+            });
+        } else if (res.cancel) {
+          console.log('鐢ㄦ埛鐐瑰嚮浜嗗彇娑�')
+        }
+      }
+    })
+  },
+  goBookDetails(itemData) {
+    let info = itemData.currentTarget.dataset.info;
+    // wx.navigateTo({
+    //   url: "/pages/personalCenter/myMassage/massageDetail/index?id=" + info.id,
+    // });
+  },
+
+
   /**
    * 鐢ㄦ埛鐐瑰嚮鍙充笂瑙掑垎浜�
    */
diff --git a/pages/personalCenter/myCollection/index.json b/pages/personalCenter/myCollection/index.json
index c1b3d78..a901f19 100644
--- a/pages/personalCenter/myCollection/index.json
+++ b/pages/personalCenter/myCollection/index.json
@@ -1,4 +1,12 @@
 {
   "navigationBarTitleText": "鎴戠殑鏀惰棌",
-  "usingComponents": {}
+  "usingComponents": {
+    "t-tabs": "tdesign-miniprogram/tabs/tabs",
+    "t-tab-panel": "tdesign-miniprogram/tab-panel/tab-panel",
+    "t-back-top": "tdesign-miniprogram/back-top/back-top",
+    "t-pull-down-refresh": "tdesign-miniprogram/pull-down-refresh/pull-down-refresh",
+    "t-loading": "tdesign-miniprogram/loading/loading",
+    "t-image": "tdesign-miniprogram/image/image",
+    "t-empty": "tdesign-miniprogram/empty/empty"
+  }
 }
\ No newline at end of file
diff --git a/pages/personalCenter/myCollection/index.wxml b/pages/personalCenter/myCollection/index.wxml
index 85d5124..c07d67f 100644
--- a/pages/personalCenter/myCollection/index.wxml
+++ b/pages/personalCenter/myCollection/index.wxml
@@ -1 +1,50 @@
-<text>鎴戠殑鏀惰棌</text>
\ No newline at end of file
+<view class="container">
+  <t-tabs t-class="t-tabs" t-class-active="tabs-external__active" t-class-item="tabs-external__item" defaultValue="{{active}}" space-evenly="{{false}}" bind:change="tabBookClick">
+    <t-tab-panel wx:for="{{tabList}}" wx:for-index="index" wx:key="index" label="{{item.label}}" value="{{index}}">
+      <view class="pageInfo">
+        <scroll-view class="scroll content" bind:scroll="onPageScroll" model:scroll-top="{{setScrollValue}}" scroll-y refresher-enabled="{{true}}" lower-threshold="{{200}}" refresher-threshold="{{80}}" refresher-default-style="none" refresher-triggered="{{triggered}}" bindrefresherpulling="{{refresh.onPulling}}" bindrefresherrefresh="onPullDownRefresh" bindscrolltolower="onReachBottom">
+          <view slot="refresher" class="refresh-container">
+            <view class="loading">
+              <t-loading theme="circular" size="40rpx" text="姝e湪鍒锋柊..." class="wrapper" />
+            </view>
+          </view>
+          <view class="list" wx:if="{{list.length > 0}}">
+            <view wx:if="{{activeName == 'FavoriteBookCity'}}" class="listBox">
+              <view class="content-item" wx:for="{{list}}" wx:for-item="item" wx:for-index="index" wx:key="index">
+                <view class="icon" data-info="{{item}}" bindtap="goBookDetails">
+                  <t-image src="{{item.icon}}" mode="" class="img" />
+                </view>
+                <view class="body-info" data-info="{{item}}" bindtap="goBookDetails">
+                  <view class="name">{{item.name}}</view>
+                  <view class="author">{{item.author}}</view>
+                </view>
+                <view class="currentBtn" data-info="{{item}}" bindtap="setCoolect">
+                  <t-image src="/static/images/personal/quxiaoshoucang.png" mode="heightFix" class="img" />
+                </view>
+              </view>
+            </view>
+            <!-- <view wx:if="{{activeName == 'Favoriteclass'}}">
+              <view class="content-item" wx:for="{{list}}" wx:for-item="item" wx:for-index="index" wx:key="index">
+                <view class="item-con">
+                  <view class="titleBox">
+                    <view class="item-title">{{item.name}}</view>
+                  </view>
+                </view>
+              </view>
+            </view> -->
+          </view>
+          <view wx:if="{{list.length == 0}}" class="empyt">
+            <t-empty icon="folder-open" description="鏆傛棤鏁版嵁" />
+          </view>
+          <view class="bottom-loading" wx:if="{{bottomLoading}}">
+            <t-loading theme="circular" size="40rpx" text="鍔犺浇涓�..." class="wrapper" />
+          </view>
+          <view class="bottom-loading" style="color: #ccc;font-size: 28rpx;" wx:if="{{isMoreData}}">
+            <text>娌℃湁鏇村浜�</text>
+          </view>
+        </scroll-view>
+      </view>
+    </t-tab-panel>
+  </t-tabs>
+  <t-back-top theme="round" wx:if="{{isBackTop}}" text="椤堕儴" bind:to-top="onToTop"></t-back-top>
+</view>
\ No newline at end of file
diff --git a/pages/personalCenter/myCollection/index.wxss b/pages/personalCenter/myCollection/index.wxss
index e69de29..ed8b651 100644
--- a/pages/personalCenter/myCollection/index.wxss
+++ b/pages/personalCenter/myCollection/index.wxss
@@ -0,0 +1,145 @@
+page {
+  background-color: #F2F3F8;
+  box-sizing: border-box;
+}
+
+.t-tabs__track {
+  display: none;
+}
+
+.t-tabs {
+  margin-top: 20rpx;
+  background: none !important;
+}
+
+.t-tabs__wrapper {
+  background: none !important;
+}
+
+.t-tabs__nav :nth-child(1) {
+  border-radius: 30rpx 30rpx 0 0rpx;
+}
+
+.t-tabs__nav :nth-child(2) {
+  border-radius: 0rpx 30rpx 0 30rpx;
+}
+
+.t-tabs__item {
+  flex: 1 !important;
+  background: #E6E8F1;
+  height: 76rpx !important;
+  margin-top: 16rpx;
+  border-radius: 30rpx 0 30rpx 0rpx !important;
+}
+
+.t-tabs__item--active {
+  color: #333 !important;
+  background: #fff;
+  height: 96rpx;
+  font-size: 32rpx;
+  margin-top: 0;
+  height: 96rpx !important;
+  border-radius: 30rpx 30rpx 0 0rpx !important;
+}
+
+.t-tabs__item--active+.t-tabs__item {
+  border-radius: 0 30rpx 0 30rpx !important;
+}
+
+.refresh-container {
+  margin: 0 auto;
+}
+
+.bottom-loading,
+.loading {
+  padding: 20rpx;
+  text-align: center;
+}
+
+.content {
+  height: calc(100vh - env(safe-area-inset-bottom));
+  box-sizing: border-box;
+}
+
+.t-tabs__content {
+  background: #fff !important;
+  margin-top: -30rpx;
+  padding-top: 30rpx;
+}
+
+.listBox {
+  display: flex;
+  flex-flow: row wrap;
+  padding: 30rpx 0;
+}
+
+
+.content-item {
+  width: calc(100%/3 - 40rpx);
+  margin-bottom: 30rpx;
+  margin: 0 20rpx;
+  align-self: stretch;
+  position: relative;
+}
+
+.content-item .icon {
+  height: 300rpx;
+  width: 210rpx;
+  box-shadow: 0px 0px 20rpx 2px rgba(0, 0, 0, 0.16);
+}
+
+.content-item .icon .t-image {
+  width: 100%;
+  height: 100%;
+  object-fit: contain;
+}
+
+.body-info {
+  padding: 20rpx 0;
+}
+
+.body-info .name {
+  font-size: 32rpx;
+  height: 88rpx;
+  color: #333333;
+  font-weight: bold;
+  line-height: 44rpx;
+  display: -webkit-box;
+  margin-bottom: 10rpx;
+  -webkit-box-orient: vertical;
+  -webkit-line-clamp: 2;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+.body-info .author {
+  height: 30rpx;
+  color: #333333;
+  line-height: 30rpx;
+  display: -webkit-box;
+  margin-bottom: 10rpx;
+  -webkit-box-orient: vertical;
+  -webkit-line-clamp: 1;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+.currentBtn {
+  position: absolute;
+  top: 10rpx;
+  right: 10rpx;
+  background: #FF6C00;
+  border-radius: 8rpx;
+  padding: 6rpx;
+  width: 36rpx;
+  height: 36rpx;
+}
+
+.currentBtn .img {
+  width: 100%;
+  height: 100%;
+}
+
+.empyt {
+  padding: 200rpx 0;
+}
\ No newline at end of file
diff --git a/pages/personalCenter/myMassage/index.js b/pages/personalCenter/myMassage/index.js
index 19ad1e3..a4fbd0f 100644
--- a/pages/personalCenter/myMassage/index.js
+++ b/pages/personalCenter/myMassage/index.js
@@ -43,6 +43,7 @@
             res.datas.forEach((item) => {
               item.createDate = moment(item.createDate).format("YYYY-MM-DD HH:mm");
             });
+
             let dataList = res.datas;
 
             //瑙﹀簳鍔犺浇鏂版暟鎹苟淇濈暀鑰佹暟鎹�
@@ -51,7 +52,7 @@
             }
             this.setData({
               list: dataList,
-              pageTotalCount: res.total,
+              pageTotalCount: res.totalSize,
               bottomLoading: false,
               isMoreData: dataList.length > 0 ? false : true,
               skeletonLoding: false,
diff --git a/pages/personalCenter/myOrder/index.js b/pages/personalCenter/myOrder/index.js
index 358d636..4537c2f 100644
--- a/pages/personalCenter/myOrder/index.js
+++ b/pages/personalCenter/myOrder/index.js
@@ -1,10 +1,49 @@
+const app = getApp();
+import moment from 'moment'
+import tool2 from "../../../assets/js/toolClass.js"
+import { getPublicImage } from "../../../assets/js/middleGround/tool.js";
 Page({
 
   /**
    * 椤甸潰鐨勫垵濮嬫暟鎹�
    */
   data: {
-
+    active: 0,
+    activeName: "FavoriteBookCity",
+    tabList: [
+      {
+        label: '鍏ㄩ儴',
+        key: 0,
+        value: 'all',
+      },
+      {
+        label: '寰呮敮浠�',
+        key: 1,
+        value: 'WaitPay',
+      },
+      {
+        label: '宸插畬鎴�',
+        key: 1,
+        value: 'Success',
+      },
+      {
+        label: '宸插彇娑�',
+        key: 1,
+        value: 'Cancel',
+      }
+    ],
+    list: [],
+    //鍒嗛〉
+    page: 1,
+    limit: 12,
+    pageTotalCount: 0,
+    bottomLoading: false,
+    isMoreData: false,
+    // 杩斿洖椤堕儴
+    isBackTop: false,
+    setScrollValue: 0,
+    skeletonLoding: true,
+    queryFilter: []
   },
 
   /**
@@ -12,6 +51,7 @@
    */
   onLoad(options) {
     console.log(options);
+    this.getDataList(false)
   },
 
   /**
@@ -20,40 +60,148 @@
   onReady() {
 
   },
-
-  /**
-   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
-   */
-  onShow() {
-
+  tabBookClick(item) {
+    console.log(item, 1)
+    let that = this;
+    let info = this.data.tabList[item.detail.value]
+    that.setData({
+      skeletonLoding: true,
+      active: item.detail.value,
+      activeName: info.value,
+      queryFilter: info.value == 'all' ? [] : [{ field: 'State', value: info.value }],
+      list: [],
+      page: 1,
+      bottomLoading: false,
+      isMoreData: false,
+    })
+    that.getDataList(false);
   },
 
-  /**
-   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰闅愯棌
-   */
-  onHide() {
+  getDataList(isReachBottom) {
+    const data = {
+      start: this.data.page * this.data.limit - this.data.limit,
+      size: this.data.limit,
+      filterList: this.data.queryFilter,
+      sort: {
+        type: 'Desc',
+        field: 'CreateDate'
+      }
+    }
+    app.MG.store.getUserOrderList(data).then((res) => {
+      try {
+        if (res.datas.length > 0) {
+          res.datas.forEach((item, index) => {
+            item.payPrice = tool2.toDecimal2(item.payPrice)
+            item.createDate = moment(item.createDate).format("YYYY-MM-DD HH:mm:ss");
+            item.finishedDate = moment(item.finishedDate).format("YYYY-MM-DD HH:mm:ss");
+            if (item.state == "Success") {
+              item.colorName = 'success';
+              item.CustomState = "宸插畬鎴�";
+            }
+            if (item.state == "Cancel") {
+              item.colorName = 'cancal';
+              item.CustomState = "宸插彇娑�";
+            }
+            if (item.state == "WaitPay") {
+              item.colorName = 'waitPay';
+              item.CustomState = "寰呮敮浠�";
+            }
+            if (item.state == "WaitDeliver") {
+              item.colorName = 'waitDeliver';
+              item.CustomState = "姝e湪鏀粯";
+            }
+            if (item.state == "GroupPaySuccess") {
+              item.colorName = 'success';
+              item.CustomState = "绛夊緟鎷煎洟"
+            }
+            if (item.state == "ReFounding") {
+              item.colorName = 'ReFounding';
+              item.CustomState = "閫�娆句腑"
+            }
+            if (item.state == "ReFoundFinished") {
+              item.colorName = 'ReFoundFinished';
+              item.CustomState = "閫�娆惧畬鎴�"
+            }
+            let oldlist = [];
+            oldlist = item.saleMethodLinks
+            oldlist.forEach(istrue => {
+              istrue.name = istrue.orderSaleMethod.product.name
+              istrue.payPrice = tool2.toDecimal2(istrue.payPrice)
+              istrue.icon = getPublicImage(istrue.orderSaleMethod.product.icon, "", 400)
+            })
 
+          })
+          let dataList = res.datas;
+          //瑙﹀簳鍔犺浇鏂版暟鎹苟淇濈暀鑰佹暟鎹�
+          if (isReachBottom) {
+            dataList = [...this.data.list, ...dataList] //灏嗘柊鏁版嵁鍔犲叆鑰佹暟鎹腑
+          }
+          this.setData({
+            list: dataList,
+            pageTotalCount: res.total,
+            bottomLoading: false,
+            isMoreData: dataList.length > 0 ? false : true,
+            skeletonLoding: false,
+            loading: false
+          })
+        } else {
+          this.setData({
+            skeletonLoding: false,
+            loading: false
+          })
+        }
+      } catch (error) {
+        console.log(error)
+      }
+    })
   },
 
-  /**
-   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍗歌浇
-   */
-  onUnload() {
-
-  },
 
   /**
    * 椤甸潰鐩稿叧浜嬩欢澶勭悊鍑芥暟--鐩戝惉鐢ㄦ埛涓嬫媺鍔ㄤ綔
    */
   onPullDownRefresh() {
-
+    if (this._freshing) return
+    this.setData({
+      // list: [],
+      page: 1,
+      limit: 18,
+      pageTotalCount: 0,
+      bottomLoading: false,
+      isMoreData: false
+    })
+    this._freshing = true;
+    this.setData({
+      triggered: false,
+    })
+    this.getDataList(false);
+    this._freshing = false
   },
 
   /**
    * 椤甸潰涓婃媺瑙﹀簳浜嬩欢鐨勫鐞嗗嚱鏁�
    */
   onReachBottom() {
-
+    this.setData({
+      bottomLoading: true,
+      isMoreData: false
+    })
+    let bool = false;
+    if (this.data.pageTotalCount > this.data.list.length) {
+      bool = true;
+      this.setData({
+        page: this.data.page + 1,
+      })
+    } else {
+      setTimeout(() => {
+        this.setData({
+          bottomLoading: false,
+          isMoreData: true
+        })
+      }, 100)
+      return false;
+    }
+    this.getDataList(bool);
   },
 
   /**
diff --git a/pages/personalCenter/myOrder/index.json b/pages/personalCenter/myOrder/index.json
index aa73fde..4900e5b 100644
--- a/pages/personalCenter/myOrder/index.json
+++ b/pages/personalCenter/myOrder/index.json
@@ -1,4 +1,14 @@
 {
   "navigationBarTitleText": "鎴戠殑璁㈠崟",
-  "usingComponents": {}
+  "usingComponents": {
+    "t-search": "tdesign-miniprogram/search/search",
+    "t-icon": "tdesign-miniprogram/icon/icon",
+    "t-tabs": "tdesign-miniprogram/tabs/tabs",
+    "t-tab-panel": "tdesign-miniprogram/tab-panel/tab-panel",
+    "t-back-top": "tdesign-miniprogram/back-top/back-top",
+    "t-pull-down-refresh": "tdesign-miniprogram/pull-down-refresh/pull-down-refresh",
+    "t-loading": "tdesign-miniprogram/loading/loading",
+    "t-image": "tdesign-miniprogram/image/image",
+    "t-empty": "tdesign-miniprogram/empty/empty"
+  }
 }
\ No newline at end of file
diff --git a/pages/personalCenter/myOrder/index.wxml b/pages/personalCenter/myOrder/index.wxml
index 2413eb4..5140519 100644
--- a/pages/personalCenter/myOrder/index.wxml
+++ b/pages/personalCenter/myOrder/index.wxml
@@ -1,2 +1,74 @@
-<!--pages/personalCenter/myOrder/index.wxml-->
-<text>pages/personalCenter/myOrder/index.wxml</text>
+<view class="container">
+  <view class="search">
+    <t-search t-class-input="t-search__input" t-class-input-container="t-search__input-container" placeholder="璇疯緭鍏ヨ鍗曠紪鍙�" leftIcon="">
+      <t-icon slot="left-icon" prefix="wr" name="search" size="40rpx" color="#bbb" bind:tap="navToSearchPage" />
+    </t-search>
+  </view>
+  <t-tabs t-class="t-tabs" t-class-active="tabs-external__active" t-class-item="tabs-external__item" defaultValue="{{active}}" space-evenly="{{false}}" bind:change="tabBookClick">
+    <t-tab-panel wx:for="{{tabList}}" wx:for-index="index" wx:key="index" label="{{item.label}}" value="{{index}}">
+      <view class="pageInfo">
+        <scroll-view class="scroll content" bind:scroll="onPageScroll" model:scroll-top="{{setScrollValue}}" scroll-y refresher-enabled="{{true}}" lower-threshold="{{200}}" refresher-threshold="{{80}}" refresher-default-style="none" refresher-triggered="{{triggered}}" bindrefresherpulling="{{refresh.onPulling}}" bindrefresherrefresh="onPullDownRefresh" bindscrolltolower="onReachBottom">
+          <view slot="refresher" class="refresh-container">
+            <view class="loading">
+              <t-loading theme="circular" size="40rpx" text="姝e湪鍒锋柊..." class="wrapper" />
+            </view>
+          </view>
+          <view class="list" wx:if="{{list.length > 0}}">
+            <view class="content-item" wx:for="{{list}}" wx:for-item="items" wx:for-index="index" wx:key="index">
+              <view class="order-cent">
+                <text class="order-cent-one">璁㈠崟鍙�: {{items.orderNumber}}</text>
+                <text class="right {{items.colorName}}">{{items.CustomState}}</text>
+              </view>
+              <view class="order-centent">
+                <view class="bookBox {{items.saleMethodLinks.length == 1 ? 'flex' : ''}}" wx:for="{{items.saleMethodLinks}}" wx:for-item="itemes" wx:for-index="idx" wx:key="idx" bindtap="onOrderDetail" data-info="{{itemes}}">
+                  <view class="leftCon {{items.saleMethodLinks.length == 1 ? 'fl' : ''}}">
+                    <!-- 鑾峰彇鍥剧墖 -->
+                    <image class="purchasedIcon" wx:if="{{itemes.icon}}" src="{{itemes.icon}}" mode="aspectFit" />
+                    <image class="purchasedIcon" wx:else src="/static/images/default-book-img.png" mode="aspectFit" />
+                  </view>
+                  <!-- 鑾峰彇鍚嶇О -->
+                  <view class="rightCon">
+                    <view class="productTitle">{{itemes.name}}</view>
+                    <view>
+                      <text class="typeBox">{{
+                        itemes.orderSaleMethod.type == 'defaultSaleMethod'
+                        ? '鍥句功鏈嶅姟-鐢靛瓙涔�'
+                        : itemes.orderSaleMethod.type == 'createProductSaleMethod' && itemes.orderSaleMethod.cmsItemList == 0 ? '鍥句功鏈嶅姟-缁勫嵎' : '鍥句功鏈嶅姟-浜戝涔�'
+                        }}</text>
+                    </view>
+                    <!-- <text wx:if="{{itemes.payPrice >0}}" class="price">锟{itemes.payPrice}}<text wx:if="{{itemes.oldPrice >0}}" class="oldPrice">(鍘熷畾浠凤細锟{items.oldPrice}})</text></text>
+                    <text wx:else class="freePrice">鍏嶈垂</text> -->
+                    <!-- <text class="productTop"><text>鍒涘缓鏃堕棿</text>锛歿{items.createDate}}</text> -->
+                  </view>
+                </view>
+                <view class="count">
+                  <text wx:if="{{items.saleMethodLinks.length > 1 }}">鍏眥{items.saleMethodLinks.length}}浠�</text>
+                  <text wx:if="{{items.saleMethodLinks.length == 1 }}">锟{items.payPrice}}</text>
+                </view>
+              </view>
+              <view class="order-top">
+                <text class="finishedDate" wx:if="{{items.state == 'Success'}}">{{items.finishedDate}}</text>
+                <text class="order-top-price" wx:if="{{items.state == 'WaitPay'}}">搴斾粯锛�<text class="">锟{items.payPrice}}</text></text>
+                <view class="button-example" wx:if="{{items.state == 'WaitPay'}}">
+                  <button class="button" bindtap="onCancel" data-order-num="{{items.orderNumber}}">鍙栨秷璁㈠崟</button>
+                  <button class="unfollow" bindtap="onPayment" data-order-num="{{items.orderNumber}}">绔嬪嵆鏀粯</button>
+                </view>
+                <view wx:if="{{items.state == 'Cancel'}}" class="button-bottem">鎬昏锛�<text class="price">锟{items.payPrice}}</text> </view>
+              </view>
+            </view>
+          </view>
+          <view wx:if="{{list.length == 0}}" class="empyt">
+            <t-empty icon="folder-open" description="鏆傛棤鏁版嵁" />
+          </view>
+          <view class="bottom-loading" wx:if="{{bottomLoading}}">
+            <t-loading theme="circular" size="40rpx" text="鍔犺浇涓�..." class="wrapper" />
+          </view>
+          <view class="bottom-loading" style="color: #ccc;font-size: 28rpx;" wx:if="{{isMoreData}}">
+            <text>娌℃湁鏇村浜�</text>
+          </view>
+        </scroll-view>
+      </view>
+    </t-tab-panel>
+  </t-tabs>
+  <t-back-top theme="round" wx:if="{{isBackTop}}" text="椤堕儴" bind:to-top="onToTop"></t-back-top>
+</view>
\ No newline at end of file
diff --git a/pages/personalCenter/myOrder/index.wxss b/pages/personalCenter/myOrder/index.wxss
index e69de29..8ac30eb 100644
--- a/pages/personalCenter/myOrder/index.wxss
+++ b/pages/personalCenter/myOrder/index.wxss
@@ -0,0 +1,169 @@
+.t-search__input {
+  font-size: 28rpx !important;
+  color: rgb(116, 116, 116) !important;
+}
+
+.t-search {
+  width: 90%;
+  margin: 0 auto;
+}
+
+.t-search__input-box--square {
+  border-radius: 50rpx !important;
+}
+
+.t-tabs__item {
+  flex: 1 !important;
+}
+
+.t-tabs__track {
+  /* left: 28rpx !important; */
+  background-color: #FF6C00 !important;
+}
+
+.t-tabs__item--active {
+  font-size: 30rpx;
+  color: #FF6C00 !important;
+}
+
+.pageInfo {
+  background: #F2F3F8;
+}
+
+.list {
+  padding: 0 24rpx;
+}
+
+.content-item {
+  background-color: #fff;
+  border-radius: 18rpx;
+  margin-top: 20rpx;
+  padding: 30rpx;
+  box-shadow: 0px 0px 20rpx 2px #f1f1f1;
+}
+
+.order-cent {
+  padding: 10rpx 0;
+}
+
+.right {
+  float: right;
+}
+
+.cancal {
+  color: #949494
+}
+
+.success {
+  color: #1FBC1F
+}
+
+.waitPay {
+  color: #F03939
+}
+
+.price {
+  color: #FF6C00;
+  font-weight: bold;
+}
+
+.order-centent {
+  display: flex;
+  border-bottom: 2rpx solid #EFF0F1;
+}
+
+
+.bookBox {
+  flex: 1;
+  padding: 30rpx 0;
+}
+
+
+
+.bookBox .leftCon {
+  width: 150rpx;
+  height: 210rpx;
+  box-shadow: 0px 0px 20rpx 2px #f1f1f1;
+}
+
+.fl {
+  float: left;
+  margin-right: 20rpx;
+}
+
+.bookBox .leftCon .purchasedIcon {
+  width: 100%;
+  height: 100%;
+  object-fit: contain;
+}
+
+.productTitle {
+  font-size: 32rpx;
+  height: 88rpx;
+  color: #333333;
+  font-weight: bold;
+  line-height: 44rpx;
+  display: -webkit-box;
+  margin-bottom: 30rpx;
+  -webkit-box-orient: vertical;
+  -webkit-line-clamp: 2;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+.flex .rightCon {
+  margin-left: 160rpx;
+}
+
+.rightCon {
+  margin-top: 10rpx;
+  margin-right: 20rpx;
+}
+
+.count {
+  display: flex;
+  align-items: center;
+  margin-left: 30rpx;
+}
+
+.typeBox {
+  background: rgba(255, 108, 0, 0.24);
+  border-radius: 9rpx 9rpx 9rpx 9rpx;
+  padding: 8rpx 20rpx;
+  color: #FF6C00;
+
+}
+
+.order-top {
+  padding-top: 30rpx;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+
+.button-example {
+  display: flex;
+}
+
+.button {
+  background-color: #fff;
+  height: 60rpx;
+  line-height: 60rpx;
+  font-size: 28rpx;
+}
+
+.unfollow {
+  height: 60rpx;
+  line-height: 60rpx;
+  font-size: 28rpx;
+  background: #FF6C00;
+  color: #fff;
+  margin-left: 10rpx;
+  border-color: #FF6C00;
+}
+
+
+.empyt {
+  padding: 200rpx 0;
+  background: #fff;
+}
\ No newline at end of file
diff --git a/pages/resourceDetails/index.js b/pages/resourceDetails/index.js
new file mode 100644
index 0000000..d0aca67
--- /dev/null
+++ b/pages/resourceDetails/index.js
@@ -0,0 +1,76 @@
+// pages/resourceDetails/index.js
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    navBarHeight: '',
+    barHeight: '',
+    vURL: 'http://wxsnsdy.tc.qq.com/105/20210/snsdyvideodownload?filekey=30280201010421301f0201690402534804102ca905ce620b1241b726bc41dcff44e00204012882540400&bizid=1023&hy=SH&fileparam=302c020101042530230204136ffd93020457e3c4ff02024ef202031e8d7f02030f42400204045a320a0201000400'
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+    const systInfo = wx.getSystemInfoSync();
+    const menu = wx.getMenuButtonBoundingClientRect(); // 鑳跺泭淇℃伅
+    const navBarHeight = (menu.top - systInfo.statusBarHeight) * 2 + menu.height; // 瀵艰埅鏍忛珮搴�
+    this.setData({
+
+      navBarHeight: navBarHeight,
+      barHeight: systInfo.statusBarHeight,
+
+    })
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚
+   */
+  onReady() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
+   */
+  onShow() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰闅愯棌
+   */
+  onHide() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍗歌浇
+   */
+  onUnload() {
+
+  },
+
+  /**
+   * 椤甸潰鐩稿叧浜嬩欢澶勭悊鍑芥暟--鐩戝惉鐢ㄦ埛涓嬫媺鍔ㄤ綔
+   */
+  onPullDownRefresh() {
+
+  },
+
+  /**
+   * 椤甸潰涓婃媺瑙﹀簳浜嬩欢鐨勫鐞嗗嚱鏁�
+   */
+  onReachBottom() {
+
+  },
+
+  /**
+   * 鐢ㄦ埛鐐瑰嚮鍙充笂瑙掑垎浜�
+   */
+  onShareAppMessage() {
+
+  }
+})
\ No newline at end of file
diff --git a/pages/resourceDetails/index.json b/pages/resourceDetails/index.json
new file mode 100644
index 0000000..02871f3
--- /dev/null
+++ b/pages/resourceDetails/index.json
@@ -0,0 +1,6 @@
+{
+  "usingComponents": {
+    "t-icon": "tdesign-miniprogram/icon/icon"
+  },
+  "navigationStyle": "custom"
+}
\ No newline at end of file
diff --git a/pages/resourceDetails/index.wxml b/pages/resourceDetails/index.wxml
new file mode 100644
index 0000000..240b234
--- /dev/null
+++ b/pages/resourceDetails/index.wxml
@@ -0,0 +1,13 @@
+<view style="width: 100%; height: {{barHeight}}px; "></view>
+<view class="nacigationBar" style="width: 70%; height: {{navBarHeight}}px;">
+  <view>
+    <t-icon name="chevron-left" size="30" data-name="{{item}}" bind:click="goBack" />
+  </view>
+  <view class="navbar-title">璧勬簮璇︽儏</view>
+</view>
+
+
+
+<view class="videoBox">
+  <video src="{{vURL}}" play-btn-position='center' object-fit='fill' controls enable-play-gesture enable-auto-rotation></video>
+</view>
\ No newline at end of file
diff --git a/pages/resourceDetails/index.wxss b/pages/resourceDetails/index.wxss
new file mode 100644
index 0000000..35232d2
--- /dev/null
+++ b/pages/resourceDetails/index.wxss
@@ -0,0 +1,25 @@
+/* pages/resourceDetails/index.wxss */
+.nacigationBar {
+  background-color: #fff;
+  display: flex;
+  align-items: center;
+
+}
+
+.navbar-title {
+  white-space: nowrap;
+  /* overflow: hidden; */
+  text-overflow: ellipsis;
+  color: #0F1214;
+  font-size: 40rpx;
+  font-weight: bold;
+  margin-bottom: 5rpx;
+}
+
+.videoBox {
+  width: 100%;
+}
+
+.videoBox video {
+  width: 100vw;
+}
\ No newline at end of file
diff --git a/pages/retrievalPage/index.js b/pages/retrievalPage/index.js
new file mode 100644
index 0000000..1e532af
--- /dev/null
+++ b/pages/retrievalPage/index.js
@@ -0,0 +1,522 @@
+// pages/retrievalPage/index.js
+import request from '../../assets/request/index'
+
+import { handleQueryResourceListData } from '../../assets/js/middleGround/tool'
+const app = getApp()
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    tabPanelstyle: 'display:flex;justify-content:center;align-items:center;',
+    navBarHeight: '',
+    barHeight: '',
+    searchVal: '',
+    bookData: [],   //鍥句功
+    bookTotal: 0,
+    courseData: [],  //璇剧▼
+    courseTotal: 0,
+    digitalTextbooksData: [],  //鏁板瓧鏁欐潗
+    digitalTextbooksTotal: 0,
+    seminarData: [], //涓撻鐮旇
+    seminarTotal: 0,
+    biblioClassificationData: [],//涔﹀睍
+    biblioClassificationTotal: 0,
+    bookFairData: [],//涔︾洰
+    bookFairTotal: 0
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+    const systInfo = wx.getSystemInfoSync();
+    const menu = wx.getMenuButtonBoundingClientRect(); // 鑳跺泭淇℃伅
+    const navBarHeight = (menu.top - systInfo.statusBarHeight) * 2 + menu.height; // 瀵艰埅鏍忛珮搴�
+    this.setData({
+
+      navBarHeight: navBarHeight,
+      barHeight: systInfo.statusBarHeight,
+
+    })
+
+
+    this.retrievalPageGet()
+    this.bibliographyGet()
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚
+   */
+  onReady() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
+   */
+  onShow() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰闅愯棌
+   */
+  onHide() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍗歌浇
+   */
+  onUnload() {
+
+  },
+
+  /**
+   * 椤甸潰鐩稿叧浜嬩欢澶勭悊鍑芥暟--鐩戝惉鐢ㄦ埛涓嬫媺鍔ㄤ綔
+   */
+  onPullDownRefresh() {
+
+  },
+
+  /**
+   * 椤甸潰涓婃媺瑙﹀簳浜嬩欢鐨勫鐞嗗嚱鏁�
+   */
+  onReachBottom() {
+
+  },
+
+  /**
+   * 鐢ㄦ埛鐐瑰嚮鍙充笂瑙掑垎浜�
+   */
+  onShareAppMessage() {
+
+  },
+  goBack() {
+    wx.navigateBack();
+  },
+  //鍙栨秷鎸夐挳
+  onCancellation() {
+    this.setData({
+      searchVal: ''
+    })
+    this.retrievalPageGet()
+    this.bibliographyGet()
+  },
+  onTabsChange(event) {
+    console.log(`Change tab, tab-panel searchVal is ${event.detail.searchVal}.`);
+  },
+
+  onTabsClick(event) {
+    console.log(`Click tab, tab-panel searchVal is ${event.detail.searchVal}.`);
+  },
+
+
+  retrievalPageGet() {
+
+    let fields = {
+      liveTime: [],
+      lecturer: [],
+      startTime: [],
+      jsek_link: [],
+      courseLeader: [],
+      affiliatedUnit: [],
+      publishingUnit: [],
+      classHours: [],
+      author: [],
+      subtitle: []
+    }
+    let searchObj = {}
+    if (this.data.searchVal) {
+      searchObj = {
+        'Name*': this.data.searchVal.trim(),
+        '||author*': this.data.searchVal.trim(),
+        '||isbn*': this.data.searchVal.trim(),
+        '||seriesName*': this.data.searchVal.trim()
+      }
+
+    }
+    let url = '/store/api/ApiQueryProductByAppUser'
+    //鍥句功
+    let queryBook = {
+      AccessControl: {
+        Path: '*',
+        StoreRefCode: 'defaultGoodsStore27',
+        Type: '*',
+        LinkType: ''
+      },
+      PageQuery: {
+        Start: 0,
+        Size: 999
+      },
+      SortQuery: [
+        {
+          LinkOrder: 'Desc'
+        }
+      ],
+      CreateDate: [],
+      Description: [],
+      Name: [],
+      Icon: [],
+      RefCode: [],
+      TypeId: [],
+      SysType: [],
+      State: [],
+      Tag: [],
+      BeginDate: [],
+      EndDate: [],
+      ProductLinkInfo: [],
+      AllowDonate: [],
+      ...searchObj,
+      ...fields
+    }
+
+
+    let courseObj = {}
+    if (this.data.searchVal) {
+      courseObj = {
+        'Name*': this.data.searchVal.trim(),
+        '||author*': this.data.searchVal.trim(),
+        '||isbn*': this.data.searchVal.trim(),
+        '||seriesName*': this.data.searchVal.trim()
+      }
+
+    }
+    //璇剧▼
+    let queryCourse = {
+      AccessControl: {
+        Path: '*',
+        StoreRefCode: 'jsek_digitalCourses',
+        Type: '*',
+        LinkType: ''
+      },
+      PageQuery: {
+        Start: 0,
+        Size: 999
+      },
+      SortQuery: [
+        {
+          LinkOrder: 'Desc'
+        }
+      ],
+      CreateDate: [],
+      Description: [],
+      Name: [],
+      Icon: [],
+      RefCode: [],
+      TypeId: [],
+      SysType: [],
+      State: [],
+      Tag: [],
+      BeginDate: [],
+      EndDate: [],
+      ProductLinkInfo: [],
+      AllowDonate: [],
+      ...courseObj,
+      ...fields
+    }
+
+    let digitalTextbooksObj = {}
+    if (this.data.searchVal) {
+      digitalTextbooksObj = {
+        'Name*': this.data.searchVal.trim(),
+        '||author*': this.data.searchVal.trim(),
+        '||isbn*': this.data.searchVal.trim(),
+        '||seriesName*': this.data.searchVal.trim()
+      }
+
+    }
+    // 鏁板瓧鏁欐潗
+    let queryDigitalTextbooks = {
+      AccessControl: {
+        Path: '*',
+        StoreRefCode: 'jsek_digitalTextbooks',
+        Type: '*',
+        LinkType: ''
+      },
+      PageQuery: {
+        Start: 0,
+        Size: 999
+      },
+      SortQuery: [
+        {
+          LinkOrder: 'Desc'
+        }
+      ],
+      CreateDate: [],
+      Description: [],
+      Name: [],
+      Icon: [],
+      RefCode: [],
+      TypeId: [],
+      SysType: [],
+      State: [],
+      Tag: [],
+      BeginDate: [],
+      EndDate: [],
+      ProductLinkInfo: [],
+      AllowDonate: [],
+      ...digitalTextbooksObj,
+      ...fields
+    }
+
+
+    let seminarObj = {}
+    if (this.data.searchVal) {
+      seminarObj = {
+        'Name*': this.data.searchVal.trim(),
+        '||author*': this.data.searchVal.trim(),
+        '||isbn*': this.data.searchVal.trim(),
+        '||seriesName*': this.data.searchVal.trim()
+      }
+
+    }
+    // 涓撻鐮旇
+    let querySeminar = {
+      AccessControl: {
+        Path: '*',
+        StoreRefCode: 'jsek_seminar',
+        Type: '*',
+        LinkType: ''
+      },
+      PageQuery: {
+        Start: 0,
+        Size: 999
+      },
+      SortQuery: [
+        {
+          LinkOrder: 'Desc'
+        }
+      ],
+      CreateDate: [],
+      Description: [],
+      Name: [],
+      Icon: [],
+      RefCode: [],
+      TypeId: [],
+      SysType: [],
+      State: [],
+      Tag: [],
+      BeginDate: [],
+      EndDate: [],
+      ProductLinkInfo: [],
+      AllowDonate: [],
+      ...fields,
+      ...seminarObj
+    }
+    let biblioClassificationObj = {}
+    if (this.data.searchVal) {
+      biblioClassificationObj = {
+        'Name*': this.data.searchVal.trim(),
+        '||author*': this.data.searchVal.trim(),
+        '||isbn*': this.data.searchVal.trim(),
+        '||seriesName*': this.data.searchVal.trim()
+      }
+
+    }
+    //涔﹀睍
+    let queryBiblioClassification = {
+      AccessControl: {
+        Path: '*',
+        StoreRefCode: 'jsek_bookFair',
+        Type: '*',
+        LinkType: ''
+      },
+
+      PageQuery: {
+        Start: 0,
+        Size: 999
+      },
+      SortQuery: [
+        {
+          LinkOrder: 'Desc'
+        }
+      ],
+      CreateDate: [],
+      Description: [],
+      Name: [],
+      Icon: [],
+      RefCode: [],
+      TypeId: [],
+      SysType: [],
+      State: [],
+      Tag: [],
+      BeginDate: [],
+      EndDate: [],
+      ProductLinkInfo: [],
+      AllowDonate: [],
+      content: [],
+      backgroundSelection: [],
+      ...fields,
+      ...biblioClassificationObj
+    }
+    let body = {
+      query: JSON.stringify({
+        Query: [{
+          queryBook: queryBook
+        }, {
+          queryCourse: queryCourse
+        }, {
+          queryDigitalTextbooks: queryDigitalTextbooks
+        }, {
+          querySeminar: querySeminar
+        }, {
+          queryBiblioClassification: queryBiblioClassification
+        }]
+      })
+    }
+    request({
+      url: url,
+      method: 'post',
+      data: body
+    }).then((resp) => {
+      // console.log(resp);
+
+      //鍥句功       0
+      const data1 = resp[0]
+      const datas1 = handleQueryResourceListData({
+        datas: data1.datas,
+        fields
+      })
+      this.setData({
+        bookData: datas1,
+        bookTotal: data1.totalCount
+      })
+
+
+
+
+      //鏁板瓧璇剧▼    1
+      const data2 = resp[1]
+      const datas2 = handleQueryResourceListData({
+        datas: data2.datas,
+        fields
+      })
+      this.setData({
+        courseData: datas2,
+        courseTotal: data2.totalCount
+      })
+
+
+
+      // 鏁板瓧鏁欐潗    2
+      const data3 = resp[2]
+      const datas3 = handleQueryResourceListData({
+        datas: data3.datas,
+        fields
+      })
+      this.setData({
+        digitalTextbooksData: datas3,
+        digitalTextbooksTotal: data3.totalCount
+      })
+
+      // 涓撻鐮旇   3
+
+      const data4 = resp[3]
+      const datas4 = handleQueryResourceListData({
+        datas: data4.datas,
+        fields
+      })
+
+      this.setData({
+        seminarData: datas4,
+        seminarTotal: data4.totalCount
+      })
+      // 涔﹀睍      4
+      const data5 = resp[4]
+      const datas5 = handleQueryResourceListData({
+        datas: data5.datas,
+        fields
+      })
+
+      this.setData({
+        biblioClassificationData: datas5,
+        biblioClassificationTotal: data5.totalCount
+      })
+
+
+
+
+    })
+
+  },
+  bibliographyGet() {
+    let bibliographyObj = {}
+    if (this.data.searchVal) {
+      bibliographyObj = {
+        'Name*': this.data.searchVal.trim(),
+        '||author*': this.data.searchVal.trim(),
+        '||isbn*': this.data.searchVal.trim(),
+        '||seriesName*': this.data.searchVal.trim()
+      }
+
+    }
+    app.MG.resource.getItem({
+      path: 'jsek_biblioClassification',
+      queryType: '*',
+      paging: {
+        start: 0,
+        size: 999
+      },
+      coverSize: {
+        width: 260
+      },
+      fields: {
+        jsek_link: [],
+        content: [],
+        subtitle: [],
+        fileType: [],
+        jsek_resource: [],
+        freeFile: [],
+        ...bibliographyObj
+      },
+      SysType: "CmsItem"
+    }).then(res => {
+      // console.log(res);
+      this.setData({
+        bookFairData: res.datas,
+        bookFairTotal: res.total
+      })
+
+    })
+  },
+  downloadData(event) {
+    console.log(111);
+    const item = event.currentTarget.dataset.item;
+    // console.log(item.datas.freeFile.searchVal);
+    const URL = 'http://182.92.203.7:3001/file/api/ApiDownload?md5=' + item.datas.freeFile.searchVal
+    item.determine = false
+
+    setTimeout(() => {
+      if (URL) {
+        item.determine = true
+      }
+    }, 600)
+    wx.downloadFile({
+      url: URL,
+      success: function (res) {
+        const filePath = res.tempFilePath;
+        wx.openDocument({
+          filePath: filePath,
+          success: function (res) {
+            console.log('鎵撳紑鏂囨。鎴愬姛');
+          },
+          fail: function (res) {
+            console.log('鎵撳紑鏂囨。澶辫触', res);
+          }
+        });
+      },
+      fail: function (res) {
+        console.log('涓嬭浇鏂囦欢澶辫触', res);
+      }
+    });
+  },
+  onSearchSubmit() {
+    console.log(this.data.searchVal);
+    this.retrievalPageGet()
+    this.bibliographyGet()
+  }
+
+})
\ No newline at end of file
diff --git a/pages/retrievalPage/index.json b/pages/retrievalPage/index.json
new file mode 100644
index 0000000..3c65fd8
--- /dev/null
+++ b/pages/retrievalPage/index.json
@@ -0,0 +1,10 @@
+{
+  "component": true,
+  "usingComponents": {
+    "t-icon": "tdesign-miniprogram/icon/icon",
+    "t-search": "tdesign-miniprogram/search/search",
+    "t-tabs": "tdesign-miniprogram/tabs/tabs",
+    "t-tab-panel": "tdesign-miniprogram/tab-panel/tab-panel"
+  },
+  "navigationStyle": "custom"
+}
\ No newline at end of file
diff --git a/pages/retrievalPage/index.wxml b/pages/retrievalPage/index.wxml
new file mode 100644
index 0000000..8e32bfc
--- /dev/null
+++ b/pages/retrievalPage/index.wxml
@@ -0,0 +1,164 @@
+<!--pages/retrievalPage/index.wxml-->
+<view style="width: 100%; height: {{barHeight}}px; "></view>
+<view class="nacigationBar" style="width: 70%; height: {{navBarHeight}}px;">
+  <view>
+    <t-icon name="chevron-left" size="30" data-name="{{item}}" bind:click="goBack" />
+  </view>
+  <view class="navbar-title">妫�绱㈢粨鏋�</view>
+</view>
+
+
+<view class="example-search">
+  <t-search bind:submit="onSearchSubmit" class="searchBox" model:value="{{searchVal}}" placeholder="璇疯緭鍏ュ叧閿瘝/涔﹀悕/ISBN/浣滆��" />
+
+  <view class="cancellation" bind:tap="onCancellation">鍙栨秷</view>
+</view>
+
+
+
+
+<t-tabs defaultValue="{{0}}" bind:change="onTabsChange" bind:click="onTabsClick" t-class="custom-tabs" t-class-content="custom-panel">
+  <t-tab-panel label="鍥句功({{bookTotal}})" value="0">
+    <view class="bookDataBox">
+
+
+      <view class="bookDataForBox" wx:for="{{bookData}}" wx:key="index" wx:for-item="item" wx:for-index="index">
+        <view class="imageBox">
+          <image src="{{item.icon}}" mode="" />
+        </view>
+        <view class="bookDataNmae">
+          {{item.name}}
+        </view>
+        <view class="bookDataAuthor">{{item.author}}</view>
+      </view>
+    </view>
+
+
+
+
+  </t-tab-panel>
+  <t-tab-panel label="璇剧▼({{courseTotal}})" value="1">
+
+
+    <view class="listBox1">
+      <view wx:if="{{courseData.length>0}}">
+        <view wx:for="{{courseData}}" wx:for-item="item" wx:for-index="index" wx:key="index" bindtap="toList" data-info="{{item}}" class="listItemBox">
+          <view class="listItem flex">
+            <view class="specialSubject-img">
+              <image src="{{item.icon}}" mode="aspectFill" class="img" />
+            </view>
+            <view class="body-info">
+              <view class="name">{{item.name}}</view>
+              <view class="flex jc-sb">
+                <text class="author">{{item.courseLeader}}</text>
+                <text>{{item.classHours}}璇炬椂</text>
+              </view>
+              <view class="priceBox flex jc-sb">
+                <text class="price" wx:if="{{item.price == 0}}">鍏嶈垂</text>
+                <text class="price" wx:if="{{item.price !== 0}}">锟{item.price}}</text>
+                <image src="/static/images/home/home-cart.png" mode="aspectFill" class="addCartImg" />
+              </view>
+            </view>
+          </view>
+        </view>
+      </view>
+      <view class="empyt" wx:else>
+        <t-empty icon="folder-open" description="鏆傛棤鏁版嵁" font-size="80" />
+      </view>
+    </view>
+
+
+  </t-tab-panel>
+  <t-tab-panel label="鏁板瓧鏁欐潗({{digitalTextbooksTotal}})" value="2">
+
+
+
+
+    <view class="bookDataBox">
+
+
+      <view class="bookDataForBox" wx:for="{{digitalTextbooksData}}" wx:key="index" wx:for-item="item" wx:for-index="index">
+        <view class="imageBox">
+          <image src="{{item.icon}}" mode="" />
+        </view>
+        <view class="bookDataNmae">
+          {{item.name}}
+        </view>
+        <view class="bookDataAuthor">{{item.author}}</view>
+      </view>
+    </view>
+
+
+
+
+
+
+  </t-tab-panel>
+  <t-tab-panel label="涓撻({{seminarTotal}})" value="3">
+    <view class="listBox">
+      <view wx:for="{{seminarData}}" wx:for-item="item" wx:for-index="index" wx:key="index" bindtap="toList" data-info="{{item}}" class="listItemBox">
+        <view class="listItem">
+          <view class="specialSubject-img">
+            <image src="{{item.icon}}" mode="aspectFill" class="img" />
+          </view>
+          <view class="body-info">
+            <view class="name">{{item.name}}</view>
+            <view class="time" wx:if="{{item.liveTime}}">鐩存挱鏃堕棿锛�<text>{{item.liveTime}}</text></view>
+            <view class="time" wx:if="{{item.startTime}}">寮�鎾椂闂达細<text>{{ item.startTime }}</text></view>
+            <view class="time" wx:if="{{!item.liveTime && !item.startTime}}">寮�鎾椂闂达細<text class="grey">寰呭畾</text></view>
+            <view class="flex jc-sb">
+              <text class="author">{{item.lecturer}}</text>
+              <text class="price" wx:if="{{item.price == 0}}">鍏嶈垂</text>
+              <text class="price" wx:if="{{item.price !== 0}}">锟{item.price}}</text>
+            </view>
+          </view>
+        </view>
+      </view>
+    </view>
+
+
+
+  </t-tab-panel>
+  <t-tab-panel label="涔︾洰({{bookFairTotal}})" value="4">
+
+
+
+
+    <view class="outsideHigherBox">
+      <view class="higherBox" wx:for="{{bookFairData}}" wx:key="index" wx:for-item="item" wx:for-index="index">
+        <view class="outsideHigherImageBox">
+          <image class="higherImageBox" src="{{item.icon}}" mode="" />
+          <view class="downloadIcon" bind:tap="downloadData" data-item="{{item}}">
+
+            <image wx:if="{{determine}}" class="download" src="/static/images/bibliographyList/downloadshiftin.png" mode="" />
+            <image wx:else="" class="downloadshiftin" src="/static/images/bibliographyList/download.png" mode="" />
+          </view>
+        </view>
+
+        <view class="higherTextBox">{{item.name}}</view>
+      </view>
+
+    </view>
+
+
+
+
+
+
+
+
+  </t-tab-panel>
+  <t-tab-panel label="涔﹀睍({{biblioClassificationTotal}})" value="5">
+    <view class="outside">
+      <view class="contentBox" wx:for="{{biblioClassificationData}}" wx:key="index" wx:for-item="item" wx:for-index="index" bindtap="onBookExhibitionDetails" data-item="{{item}}">
+        <image class="bookFairImage" wx:if="{{item.icon}}" src="{{item.icon}}" mode="" />
+        <image class="bookFairImage" wx:else="" src="/static/images/bookExhibitionList/banner.png" mode="" />
+        <view class="textBox" title="{{item.name}}"> <text>{{item.name}}</text></view>
+      </view>
+
+    </view>
+
+
+
+  </t-tab-panel>
+</t-tabs>
\ No newline at end of file
diff --git a/pages/retrievalPage/index.wxss b/pages/retrievalPage/index.wxss
new file mode 100644
index 0000000..1d9cce0
--- /dev/null
+++ b/pages/retrievalPage/index.wxss
@@ -0,0 +1,289 @@
+/* pages/retrievalPage/index.wxss */
+
+.nacigationBar {
+  background-color: #fff;
+  display: flex;
+  align-items: center;
+
+}
+
+.navbar-title {
+  white-space: nowrap;
+  /* overflow: hidden; */
+  text-overflow: ellipsis;
+  color: #0F1214;
+  font-size: 40rpx;
+  font-weight: bold;
+  margin-bottom: 5rpx;
+}
+
+.example-search {
+  background-color: #fff;
+  padding: 16rpx 32rpx;
+  display: flex;
+  align-items: center;
+  /* font-size: 25rpx; */
+  color: #999999;
+}
+
+.searchBox {
+  width: 614rpx;
+  /* margin-right: 20rpx; */
+}
+
+.cancellation {
+  width: 80rpx;
+  margin-left: 15rpx;
+}
+
+
+.custom-tabs {
+  margin-bottom: 32rpx;
+}
+
+.custom-panel {
+  /* height: 120px; */
+}
+
+.imageBox {
+  width: 190rpx;
+  height: 280rpx;
+  box-shadow: 10rpx 10rpx 10rpx 10rpx rgba(0, 0, 0, 0.08);
+}
+
+image {
+  width: 100%;
+  height: 100%;
+}
+
+.bookDataBox {
+  display: flex;
+  flex-wrap: wrap;
+}
+
+.bookDataForBox {
+  width: 190rpx;
+  margin: 30rpx;
+}
+
+.bookDataNmae {
+  margin: 20rpx 0;
+  font-family: PingFang SC, PingFang SC;
+  font-weight: bold;
+  font-size: 25rpx;
+  color: #333333;
+  word-break: break-all;
+  display: -webkit-box;
+  -webkit-line-clamp: 2;
+  -webkit-box-orient: vertical;
+  overflow: hidden;
+
+}
+
+
+
+.bookDataAuthor {
+  font-family: PingFang SC, PingFang SC;
+  font-weight: 400;
+  font-size: 22rpx;
+  color: #333333;
+}
+
+
+.listBox {
+  padding: 20rpx 0;
+  display: flex;
+  flex-flow: row wrap;
+  justify-content: space-between;
+  margin: 20rpx;
+
+}
+
+.listBox .listItemBox {
+  width: 49%;
+  margin-bottom: 50rpx;
+
+}
+
+.listItemBox .listItem {
+  background: #fff;
+  box-sizing: border-box;
+  border-radius: 5px;
+  overflow: hidden;
+  box-shadow: 0px 0px 20rpx 2px #f1f1f1;
+}
+
+
+.listBox .specialSubject-img {
+  width: 100%;
+  height: 120rpx;
+}
+
+.specialSubject-img image {
+  width: 100%;
+  height: 100%;
+  object-fit: contain;
+}
+
+.body-info {
+  padding: 20rpx;
+  font-size: 28rpx;
+}
+
+.body-info .name {
+  font-size: 32rpx;
+  height: 88rpx;
+  color: #333333;
+  font-weight: bold;
+  line-height: 44rpx;
+  display: -webkit-box;
+  margin-bottom: 10rpx;
+  -webkit-box-orient: vertical;
+  -webkit-line-clamp: 2;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+.body-info .time {
+  font-size: 26rpx;
+  margin-bottom: 10rpx;
+}
+
+.body-info .author {
+  font-size: 26rpx;
+  display: flex;
+  justify-content: space-between;
+}
+
+.body-info .price {
+  font-size: 26rpx;
+  color: #ff6d00;
+}
+
+.flex {
+  display: flex;
+}
+
+.jc-sb {
+  justify-content: space-between
+}
+
+
+.listBox1,
+.listBox2 {
+  padding: 50rpx 0;
+}
+
+.listBox1 .listItemBox {
+  height: 220rpx;
+  margin-bottom: 30rpx;
+}
+
+.listBox1 .specialSubject-img {
+  width: 400rpx;
+  height: 218rpx;
+}
+
+.listBox1 .addCartImg,
+.listBox3 .addCartImg {
+  width: 30rpx;
+  height: 30rpx;
+}
+
+.listBox1 .priceBox {
+  margin-top: 14rpx;
+}
+
+.outside {
+  display: flex;
+  flex-wrap: wrap;
+  justify-content: space-between;
+  margin: 15px;
+
+
+}
+
+.contentBox {
+  width: 330rpx;
+  /* height: 231rpx; */
+  /* border: 1px #000 solid; */
+  margin: 10px 0;
+  background-color: #fff;
+
+}
+
+.textBox {
+  width: 280rpx;
+  /* height: 75rpx; */
+  font-size: 25rpx;
+
+  overflow: hidden;
+  text-overflow: ellipsis;
+  display: -webkit-box;
+  -webkit-box-orient: vertical;
+  -webkit-line-clamp: 2;
+  /* text-align: center; */
+  margin: 20rpx;
+
+}
+
+.bookFairImage {
+  width: 327rpx;
+  height: 128rpx;
+}
+
+.outsideHigherBox {
+  display: flex;
+  flex-wrap: wrap;
+}
+
+.higherBox {
+  width: 220rpx;
+  /* height: 390rpx; */
+  box-shadow: 10rpx 10rpx 10rpx 10rpx rgba(0, 0, 0, 0.08);
+  margin: 30rpx 15rpx;
+}
+
+.outsideHigherImageBox {
+
+  position: relative;
+}
+
+.higherImageBox {
+  width: 190rpx;
+  height: 255rpx;
+  margin: 15rpx;
+}
+
+.downloadIcon {
+  width: 34rpx;
+  height: 34rpx;
+
+  border-radius: 5rpx 5rpx 5rpx 5rpx;
+  background: rgba(0, 0, 0, 0.3);
+  position: absolute;
+  top: 15rpx;
+  right: 15rpx;
+  padding: 10rpx;
+}
+
+
+.download {
+  /* background-color: #8bc34a; */
+  width: 100%;
+  height: 100%;
+
+}
+
+.downloadshiftin {
+  width: 100%;
+  height: 100%;
+}
+
+.higherTextBox {
+  font-weight: bold;
+  font-size: 25rpx;
+  color: #333333;
+  padding: 15rpx;
+  margin-bottom: 10rpx;
+}
\ No newline at end of file
diff --git a/services/cart/cart.js b/services/cart/cart.js
index d42f959..5b48a23 100644
--- a/services/cart/cart.js
+++ b/services/cart/cart.js
@@ -1,20 +1,20 @@
-import { config } from '../../config/index';
+// import { config } from '../../config/index';
 
-/** 鑾峰彇璐墿杞ock鏁版嵁 */
-function mockFetchCartGroupData(params) {
-  const { delay } = require('../_utils/delay');
-  const { genCartGroupData } = require('../../model/cart');
+// /** 鑾峰彇璐墿杞ock鏁版嵁 */
+// function mockFetchCartGroupData(params) {
+//   const { delay } = require('../_utils/delay');
+//   const { genCartGroupData } = require('../../model/cart');
 
-  return delay().then(() => genCartGroupData(params));
-}
+//   return delay().then(() => genCartGroupData(params));
+// }
 
-/** 鑾峰彇璐墿杞︽暟鎹� */
-export function fetchCartGroupData(params) {
-  if (config.useMock) {
-    return mockFetchCartGroupData(params);
-  }
+// /** 鑾峰彇璐墿杞︽暟鎹� */
+// export function fetchCartGroupData(params) {
+//   if (config.useMock) {
+//     return mockFetchCartGroupData(params);
+//   }
 
-  return new Promise((resolve) => {
-    resolve('real api');
-  });
-}
+//   return new Promise((resolve) => {
+//     resolve('real api');
+//   });
+// }
diff --git a/services/home/home.js b/services/home/home.js
index 598c2dd..dc57e72 100644
--- a/services/home/home.js
+++ b/services/home/home.js
@@ -9,7 +9,7 @@
           text: '鍥句功鏈嶅姟',
           key: 0,
           icon: '/static/images/home/zhutichuban@2x.png',
-          url: '/pages/bookServices/assort/index.wxml',
+          url: '/pages/bookServices/assort/index',
         },
         {
           text: '鏁板瓧闃呰',
@@ -39,7 +39,7 @@
           text: '绾夸笂涔﹀睍',
           key: 5,
           icon: '/static/images/home/xianshangshuzhan@2x.png',
-          url: '',
+          url: '/pages/bookExhibitionList/index',
         },
         {
           text: '涔︾洰涓嬭浇',
diff --git a/static/images/bibliographyList/download.png b/static/images/bibliographyList/download.png
new file mode 100644
index 0000000..4dce634
--- /dev/null
+++ b/static/images/bibliographyList/download.png
Binary files differ
diff --git a/static/images/bibliographyList/downloadshiftin.png b/static/images/bibliographyList/downloadshiftin.png
new file mode 100644
index 0000000..7838645
--- /dev/null
+++ b/static/images/bibliographyList/downloadshiftin.png
Binary files differ
diff --git a/pages/bookExhibitionList/img/banner.png b/static/images/bookExhibitionList/banner.png
similarity index 100%
rename from pages/bookExhibitionList/img/banner.png
rename to static/images/bookExhibitionList/banner.png
Binary files differ
diff --git a/static/images/default-book-img.png b/static/images/default-book-img.png
new file mode 100644
index 0000000..3ee5005
--- /dev/null
+++ b/static/images/default-book-img.png
Binary files differ
diff --git a/static/images/personal/quxiaoshoucang.png b/static/images/personal/quxiaoshoucang.png
new file mode 100644
index 0000000..c9c6227
--- /dev/null
+++ b/static/images/personal/quxiaoshoucang.png
Binary files differ
diff --git a/static/images/personal/suggestion.png b/static/images/personal/suggestion.png
new file mode 100644
index 0000000..530d7b3
--- /dev/null
+++ b/static/images/personal/suggestion.png
Binary files differ
diff --git a/static/video/sea.mp4 b/static/video/sea.mp4
new file mode 100644
index 0000000..328ebe3
--- /dev/null
+++ b/static/video/sea.mp4
Binary files differ

--
Gitblit v1.9.1