From 9f1e740e07085a7fc74defe5d63bcc4818aab69e Mon Sep 17 00:00:00 2001
From: yiming <m13691596795@163.com>
Date: 星期四, 29 二月 2024 18:49:37 +0800
Subject: [PATCH] zhang

---
 pages/testLogin/index.wxml                                  |    8 
 pages/personalCenter/myMassage/index.json                   |    3 
 pages/teacherCertification/index.wxml                       |    2 
 pages/personalCenter/myCollection/index.json                |    3 
 pages/personalCenter/activateProduct/index.json             |    3 
 pages/personalCenter/feedBack/index.js                      |   66 
 pages/personalCenter/sampleBooks/index.wxml                 |    2 
 pages/personalCenter/activateProduct/index.wxss             |    1 
 pages/personalCenter/components/user-center-card/index.wxss |   60 
 pages/personalCenter/activateProduct/index.js               |   66 
 services/cart/cart.js                                       |   32 
 pages/personalCenter/index.wxml                             |    2 
 pages/personalCenter/myCollection/index.wxss                |    1 
 pages/personalCenter/certificate/index.wxss                 |    1 
 pages/personalCenter/myOrder/index.js                       |   66 
 pages/personalCenter/feedBackSubmit/index.js                |   66 
 pages/aboutUs/index.wxml                                    |   20 
 pages/bibliographyList/index.json                           |    8 
 pages/personalCenter/myMassage/index.wxss                   |   60 
 pages/personalCenter/publishBooks/index.js                  |   66 
 pages/personalCenter/index.js                               |  200 ++
 pages/personalCenter/myMassage/massageDetail/index.wxss     |   28 
 pages/personalCenter/sampleBooks/index.js                   |   66 
 pages/cart/index.wxml                                       |   37 
 pages/personalCenter/certificate/index.json                 |    3 
 pages/personalCenter/feedBack/index.wxss                    |    1 
 pages/personalCenter/publishBooks/index.wxml                |    2 
 pages/personalCenter/certificate/index.js                   |   66 
 pages/bookExhibitionList/index.wxml                         |    2 
 pages/aboutUs/js/weapp.qrcode.js                            | 1281 ++++++++++++++++++
 static/images/personal/notification1.png                    |    0 
 custom-tab-bar/data.js                                      |    2 
 pages/personalCenter/downloads/index.wxss                   |    1 
 pages/cart/index.js                                         |  345 +---
 pages/teacherCertification/index.json                       |    3 
 pages/personalCenter/publishBooks/index.json                |    3 
 pages/bibliographyList/index.wxss                           |   72 
 pages/personalCenter/myMassage/massageDetail/index.json     |    4 
 pages/bibliographyList/index.js                             |  415 +++--
 pages/personalCenter/myOrder/index.wxml                     |    2 
 pages/aboutUs/index.json                                    |    6 
 pages/personalCenter/feedBackSubmit/index.wxml              |    2 
 components/goods-card/index.wxss                            |    2 
 pages/personalCenter/feedBackSubmit/index.wxss              |    1 
 pages/teacherCertification/index.wxss                       |    1 
 pages/testLogin/index.js                                    |  132 +
 pages/personalCenter/sampleBooks/index.wxss                 |    1 
 pages/bookExhibitionList/index.js                           |   19 
 pages/personalCenter/feedBack/index.json                    |    3 
 pages/personalCenter/activateProduct/index.wxml             |    2 
 pages/personalCenter/components/user-center-card/index.wxml |   33 
 pages/personalCenter/sampleBooks/index.json                 |    3 
 pages/aboutUs/index.js                                      |  141 ++
 pages/personalCenter/myCollection/index.wxml                |    2 
 pages/personalCenter/certificate/index.wxml                 |    2 
 pages/personalCenter/index.wxss                             |    1 
 pages/teacherCertification/index.js                         |   66 
 pages/personalCenter/downloads/index.js                     |   66 
 pages/personalCenter/myMassage/massageDetail/index.wxml     |    8 
 pages/personalCenter/feedBackSubmit/index.json              |    3 
 pages/personalCenter/myMassage/index.wxml                   |   35 
 pages/aboutUs/index.wxss                                    |   20 
 pages/cart/index.wxss                                       |   28 
 pages/testLogin/index.json                                  |    6 
 pages/personalCenter/myOrder/index.json                     |    3 
 pages/personalCenter/index.json                             |    3 
 pages/personalCenter/publishBooks/index.wxss                |    1 
 pages/bookExhibitionList/index.wxss                         |    2 
 pages/personalCenter/feedBack/index.wxml                    |    2 
 pages/personalCenter/downloads/index.json                   |    3 
 pages/personalCenter/downloads/index.wxml                   |    2 
 app.json                                                    |   22 
 /dev/null                                                   |   68 
 pages/cart/index.json                                       |    9 
 pages/personalCenter/myCollection/index.js                  |   66 
 pages/bibliographyList/index.wxml                           |   39 
 pages/personalCenter/myMassage/index.js                     |  155 ++
 pages/personalCenter/myMassage/massageDetail/index.js       |   79 +
 pages/testLogin/index.wxss                                  |    4 
 pages/personalCenter/myOrder/index.wxss                     |    1 
 80 files changed, 3,520 insertions(+), 591 deletions(-)

diff --git a/app.json b/app.json
index 1232b9f..430bd80 100644
--- a/app.json
+++ b/app.json
@@ -1,6 +1,8 @@
 {
   "pages": [
+    "pages/cart/index",
     "pages/home/home",
+    "pages/aboutUs/index",
     "pages/bookServices/index",
     "pages/bookExhibitionList/index",
     "pages/bookExhibitionDetails/index",
@@ -14,7 +16,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",
@@ -32,7 +33,21 @@
     "pages/order/fill-tracking-no/index",
     "pages/order/delivery-detail/index",
     "pages/order/invoice/index",
-    "pages/usercenter/name-edit/index"
+    "pages/usercenter/name-edit/index",
+    "pages/teacherCertification/index",
+    "pages/personalCenter/index",
+    "pages/personalCenter/myOrder/index",
+    "pages/personalCenter/myCollection/index",
+    "pages/personalCenter/myMassage/index",
+    "pages/personalCenter/myMassage/massageDetail/index",
+    "pages/personalCenter/feedBack/index",
+    "pages/personalCenter/feedBackSubmit/index",
+    "pages/personalCenter/certificate/index",
+    "pages/personalCenter/publishBooks/index",
+    "pages/personalCenter/sampleBooks/index",
+    "pages/personalCenter/downloads/index",
+    "pages/personalCenter/activateProduct/index",
+    "pages/testLogin/index"
   ],
   "tabBar": {
     "custom": true,
@@ -72,7 +87,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/custom-tab-bar/data.js b/custom-tab-bar/data.js
index 7691a71..34da94e 100644
--- a/custom-tab-bar/data.js
+++ b/custom-tab-bar/data.js
@@ -23,6 +23,6 @@
   {
     icon: 'person',
     text: '涓汉涓績',
-    url: 'pages/usercenter/index',
+    url: 'pages/personalCenter/index',
   },
 ];
diff --git a/pages/aboutUs/index.js b/pages/aboutUs/index.js
new file mode 100644
index 0000000..7f5f5f5
--- /dev/null
+++ b/pages/aboutUs/index.js
@@ -0,0 +1,141 @@
+// pages/aboutUs/index.js
+const app = getApp()
+import drawQrcode from './js/weapp.qrcode'
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    aboutText: null,
+    swiperList: null,
+    qrcodeWidth: 0,
+    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 },
+      coverSize: {
+        width: 250
+      },
+      fields: {
+        jsek_link: []
+      }
+    }).then(res => {
+      // console.log(res.datas[0].icon, 'res');
+      this.setData({
+        bannerList: res.datas[0].icon,
+        swiperList: res.datas[0].icon
+      })
+      // console.log(this.data.swiperList);
+    })
+  },
+  getAboutText() {
+    app.MG.resource.getItem({
+      path: 'jsek_aboutUs',
+      fields: {
+        content: []
+      },
+    }).then(res => {
+      console.log(res);
+
+      this.setData({
+        aboutText: res.datas[0].content
+      })
+
+      console.log(this.data.aboutText);
+    })
+  }
+})
\ No newline at end of file
diff --git a/pages/aboutUs/index.json b/pages/aboutUs/index.json
new file mode 100644
index 0000000..81e41cd
--- /dev/null
+++ b/pages/aboutUs/index.json
@@ -0,0 +1,6 @@
+{
+  "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..ef37383
--- /dev/null
+++ b/pages/aboutUs/index.wxml
@@ -0,0 +1,20 @@
+<!--pages/aboutUs/index.wxml-->
+<!-- <text>鍏充簬鎴戜滑</text> -->
+<view class="swiper-wrap">
+  <t-swiper wx:if="{{bannerList.length > 0}}" list="{{bannerList}}" current="{{current}}" autoplay="{{autoplay}}" duration="{{duration}}" interval="{{interval}}" navigation="{{navigation}}" bind:click="navToActivityDetail" />
+</view>
+
+
+<!-- 浜岀淮鐮佸睍绀� -->
+<!-- <view class="">
+	<canvas style="width: 200px; height: 200px;margin:0 auto" canvas-id="myQrcode"></canvas>
+</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/aboutUs/js/weapp.qrcode.js b/pages/aboutUs/js/weapp.qrcode.js
new file mode 100644
index 0000000..2967226
--- /dev/null
+++ b/pages/aboutUs/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/bibliographyList/index.js b/pages/bibliographyList/index.js
index 5edaf82..dfa20f5 100644
--- a/pages/bibliographyList/index.js
+++ b/pages/bibliographyList/index.js
@@ -1,174 +1,267 @@
 // pages/bibliographyList/index.js
 const app = getApp()
-Page({
+const config =
+  Page({
 
-  /**
-   * 椤甸潰鐨勫垵濮嬫暟鎹�
-   */
-  data: {
-    higherList: [],
-    vocationalList: [],
-    teacherList: [],
-    higherTotal: null,
-    vocationalTotal: null,
-    teacherTotal: null
-  },
+    /**
+     * 椤甸潰鐨勫垵濮嬫暟鎹�
+     */
+    data: {
+      higherList: [],
+      vocationalList: [],
+      teacherList: [],
+      higherTotal: null,
+      vocationalTotal: null,
+      teacherTotal: null,
+      value: '',
+      BarHeight: '',
+      navBarHeight: ''
+    },
 
-  /**
-   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
-   */
-  onLoad(options) {
-    this.higherGet()
-    this.vocationalGet()
-    this.teacherGet()
-  },
+    /**
+     * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+     */
+    onLoad(options) {
+      this.higherGet()
+      this.vocationalGet()
+      this.teacherGet()
 
-  /**
-   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚
-   */
-  onReady() {
 
-  },
-
-  /**
-   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
-   */
-  onShow() {
-
-  },
-
-  /**
-   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰闅愯棌
-   */
-  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() {
-    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: []
-      },
-      SysType: 'CmsItem'
-    }).then(res => {
-      console.log(res.total);
+      //鑾峰彇绯荤粺淇℃伅锛岀姸鎬佹爮楂樺害涓簊ysInfo['statusBarHeight'];
+      let sysInfo = wx.getSystemInfoSync();
+      let menu = wx.getMenuButtonBoundingClientRect(); //鑳跺泭淇℃伅
+      let navBarHeight = (menu.top - sysInfo.statusBarHeight) * 2 + menu.height; // 瀵艰埅鏍忛珮搴� 
       this.setData({
-        higherList: res.datas,
-        higherTotal: res.total
-      })
-      console.log(this.data.higherList, '5555');
-    })
-
-
-  },
-
-  //鏁欏笀鏁欒偛
-  vocationalGet() {
-    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: []
-      },
-      SysType: 'CmsItem'
-    }).then(res => {
-      this.setData({
-        vocationalList: res.datas,
-        vocationalTotal: res.total
+        BarHeight: sysInfo.statusBarHeight, navBarHeight: navBarHeight
       })
 
-    })
-  },
-  // 鑱屼笟鏁欒偛
-  teacherGet() {
-    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: []
-      },
-      SysType: 'CmsItem'
-    }).then(res => {
-      this.setData({
-        teacherList: res.datas,
-        teacherTotal: res.total
+
+
+
+
+
+    },
+
+    /**
+     * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚
+     */
+    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
+        })
+
+      })
 
 
-  }
-})
\ No newline at end of file
+    },
+    downloadData(event) {
+      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
index e1e3326..307560a 100644
--- a/pages/bibliographyList/index.json
+++ b/pages/bibliographyList/index.json
@@ -2,6 +2,10 @@
   "component": true,
   "usingComponents": {
     "t-tabs": "tdesign-miniprogram/tabs/tabs",
-    "t-tab-panel": "tdesign-miniprogram/tab-panel/tab-panel"
-  }
+    "t-tab-panel": "tdesign-miniprogram/tab-panel/tab-panel",
+    "t-search": "tdesign-miniprogram/search/search"
+  },
+  "navigationBarTitleText": "涔︾洰",
+  "navigationBarTextStyle": "white",
+  "navigationStyle": "custom"
 }
\ No newline at end of file
diff --git a/pages/bibliographyList/index.wxml b/pages/bibliographyList/index.wxml
index 18f91df..f837d93 100644
--- a/pages/bibliographyList/index.wxml
+++ b/pages/bibliographyList/index.wxml
@@ -1,12 +1,41 @@
 <!--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>
@@ -20,10 +49,10 @@
       <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">
+          <view class="downloadIcon" bind:tap="downloadData" data-item="{{item}}">
 
-            <image class="download" src="/static/images/bibliographyList/download.png" mode="" />
-            <image class="downloadshiftin" src="/static/images/bibliographyList/downloadshiftin.png" mode="" />
+            <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>
 
@@ -39,7 +68,11 @@
       <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>
diff --git a/pages/bibliographyList/index.wxss b/pages/bibliographyList/index.wxss
index a24200b..6ee6962 100644
--- a/pages/bibliographyList/index.wxss
+++ b/pages/bibliographyList/index.wxss
@@ -33,15 +33,65 @@
   margin-bottom: 10rpx;
 }
 
-/* .downloadIcon {
-  width: 430rpx;
-  height: 430rpx;
-  background-color: #000;
-  position: relative;
-  top: 0;
-  left: 0;
-} */
+.outsideHigherImageBox {
 
-/* .download {
-  background-color: #8bc34a;
-} */
\ No newline at end of file
+  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/bookExhibitionList/index.js b/pages/bookExhibitionList/index.js
index c4d4a70..153ccd8 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,
@@ -304,5 +309,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..ef63ba0 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>
 
 
diff --git a/pages/bookExhibitionList/index.wxss b/pages/bookExhibitionList/index.wxss
index f313307..f45445e 100644
--- a/pages/bookExhibitionList/index.wxss
+++ b/pages/bookExhibitionList/index.wxss
@@ -40,7 +40,7 @@
 
 
 .example-search {
-  width: 300px;
+  /* width: 300px; */
   background-color: #fff;
   /* padding: 16rpx 32rpx; */
 }
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..41fcea5 100644
--- a/pages/cart/index.js
+++ b/pages/cart/index.js
@@ -1,294 +1,89 @@
-import Dialog from 'tdesign-miniprogram/dialog/index';
-import Toast from 'tdesign-miniprogram/toast/index';
-import { fetchCartGroupData } from '../../services/cart/cart';
-
+// pages/cart/index.js
+const app = getApp()
 Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
   data: {
-    cartGroupData: null,
+    right: [
+      {
+        text: '缂栬緫',
+        className: 'btn edit-btn',
+      },
+      {
+        text: '鍒犻櫎',
+        className: 'btn delete-btn',
+      },
+    ],
+  },
+  onDelete() {
+    wx.showToast({ title: '浣犵偣鍑讳簡鍒犻櫎', icon: 'none' });
+  },
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+    this.shoppingCartGet()
   },
 
-  // 璋冪敤鑷畾涔塼abbar鐨刬nit鍑芥暟锛屼娇椤甸潰涓巘abbar婵�娲荤姸鎬佷繚鎸佷竴鑷�
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚
+   */
+  onReady() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
+   */
   onShow() {
-    this.getTabBar().init();
+
   },
 
-  onLoad() {
-    this.refreshData();
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰闅愯棌
+   */
+  onHide() {
+
   },
 
-  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;
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍗歌浇
+   */
+  onUnload() {
 
-            // 缁熻鏄惁鏈夊姞璐暟澶т簬搴撳瓨鏁扮殑鍟嗗搧
-            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 });
-    });
   },
 
-  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,
-    };
+  /**
+   * 椤甸潰鐩稿叧浜嬩欢澶勭悊鍑芥暟--鐩戝惉鐢ㄦ埛涓嬫媺鍔ㄤ綔
+   */
+  onPullDownRefresh() {
+
   },
 
-  // 娉細瀹為檯鍦烘櫙鏃跺簲璇ヨ皟鐢ㄦ帴鍙h幏鍙栬喘鐗╄溅鏁版嵁
-  getCartGroupData() {
-    const { cartGroupData } = this.data;
-    if (!cartGroupData) {
-      return fetchCartGroupData();
-    }
-    return Promise.resolve({ data: cartGroupData });
+  /**
+   * 椤甸潰涓婃媺瑙﹀簳浜嬩欢鐨勫鐞嗗嚱鏁�
+   */
+  onReachBottom() {
+
   },
 
-  // 閫夋嫨鍗曚釜鍟嗗搧
-  // 娉細瀹為檯鍦烘櫙鏃跺簲璇ヨ皟鐢ㄦ帴鍙f洿鏀归�変腑鐘舵��
-  selectGoodsService({ spuId, skuId, isSelected }) {
-    this.findGoods(spuId, skuId).currentGoods.isSelected = isSelected;
-    return Promise.resolve();
-  },
+  /**
+   * 鐢ㄦ埛鐐瑰嚮鍙充笂瑙掑垎浜�
+   */
+  onShareAppMessage() {
 
-  // 鍏ㄩ�夐棬搴�
-  // 娉細瀹為檯鍦烘櫙鏃跺簲璇ヨ皟鐢ㄦ帴鍙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;
-      });
-    });
-    return Promise.resolve();
   },
+  shoppingCartGet() {
 
-  // 鍔犺喘鏁伴噺鍙樻洿
-  // 娉細瀹為檯鍦烘櫙鏃跺簲璇ヨ皟鐢ㄦ帴鍙�
-  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();
-      });
-    });
-  },
-
-  onSelectAll(event) {
-    const { isAllSelected } = event?.detail ?? {};
-    Toast({
-      context: this,
-      selector: '#t-toast',
-      message: `${isAllSelected ? '鍙栨秷' : '鐐瑰嚮'}浜嗗叏閫夋寜閽甡,
-    });
-    // 璋冪敤鎺ュ彛鏀瑰彉鍏ㄩ��
-  },
-
-  onToSettle() {
-    const goodsRequestList = [];
-    this.data.cartGroupData.storeGoods.forEach((store) => {
-      store.promotionGoodsList.forEach((promotion) => {
-        promotion.goodsPromotionList.forEach((m) => {
-          if (m.isSelected == 1) {
-            goodsRequestList.push(m);
-          }
-        });
-      });
-    });
-    wx.setStorageSync('order.goodsRequestList', JSON.stringify(goodsRequestList));
-    wx.navigateTo({ url: '/pages/order/order-confirm/index?type=cart' });
-  },
-  onGotoHome() {
-    wx.switchTab({ url: '/pages/home/home' });
-  },
-});
+    app.MG.store.getShoppingCartProductList({
+      start: 0,
+      size: 999,
+      filterList: [],
+      searchList: []
+    }).then(res => {
+      console.log(res);
+    })
+  }
+})
\ No newline at end of file
diff --git a/pages/cart/index.json b/pages/cart/index.json
index 1d2e717..03de311 100644
--- a/pages/cart/index.json
+++ b/pages/cart/index.json
@@ -1,10 +1,7 @@
 {
-  "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-swipe-cell": "tdesign-miniprogram/swipe-cell/swipe-cell",
+    "t-cell": "tdesign-miniprogram/cell/cell"
   }
 }
\ No newline at end of file
diff --git a/pages/cart/index.wxml b/pages/cart/index.wxml
index 8828092..8ffcb80 100644
--- a/pages/cart/index.wxml
+++ b/pages/cart/index.wxml
@@ -1,31 +1,6 @@
-<!-- 鍒嗗眰璐墿杞� -->
-<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="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" />
+<!--pages/cart/index.wxml-->
+<text>璐墿杞�</text>
+<t-swipe-cell>
+  <t-cell bordered="{{false}}" title="宸︽粦澶у垪琛�" description="涓�娈靛緢闀垮緢闀跨殑鍐呭鏂囧瓧" note="杈呭姪淇℃伅" image="https://tdesign.gtimg.com/mobile/demos/avatar1.png" />
+  <view slot="right" class="btn delete-btn" bind:tap="onDelete">鍒犻櫎</view>
+</t-swipe-cell>
\ No newline at end of file
diff --git a/pages/cart/index.wxss b/pages/cart/index.wxss
index ea19962..8c1e525 100644
--- a/pages/cart/index.wxss
+++ b/pages/cart/index.wxss
@@ -1,13 +1,25 @@
-:host {
-  padding-bottom: 100rpx;
+/* pages/cart/item.wxss */
+.btn-wrapper {
+  height: 100%;
 }
 
-.gap {
-  height: 100rpx;
-  width: 100%;
+.btn {
+  display: inline-flex;
+  justify-content: center;
+  align-items: center;
+  width: 120rpx;
+  height: 100%;
+  color: white;
 }
 
-.t-button {
-  --td-button-default-color: #000;
-  --td-button-primary-text-color: #fa4126;
+.delete-btn {
+  background-color: #e34d59;
 }
+
+.edit-btn {
+  background-color: #ed7b2f;
+}
+
+.favor-btn {
+  background-color: #0052d9;
+}
\ No newline at end of file
diff --git a/pages/personalCenter/activateProduct/index.js b/pages/personalCenter/activateProduct/index.js
new file mode 100644
index 0000000..7db447e
--- /dev/null
+++ b/pages/personalCenter/activateProduct/index.js
@@ -0,0 +1,66 @@
+// pages/personalCenter/activateProduct/index.js
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚
+   */
+  onReady() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
+   */
+  onShow() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰闅愯棌
+   */
+  onHide() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍗歌浇
+   */
+  onUnload() {
+
+  },
+
+  /**
+   * 椤甸潰鐩稿叧浜嬩欢澶勭悊鍑芥暟--鐩戝惉鐢ㄦ埛涓嬫媺鍔ㄤ綔
+   */
+  onPullDownRefresh() {
+
+  },
+
+  /**
+   * 椤甸潰涓婃媺瑙﹀簳浜嬩欢鐨勫鐞嗗嚱鏁�
+   */
+  onReachBottom() {
+
+  },
+
+  /**
+   * 鐢ㄦ埛鐐瑰嚮鍙充笂瑙掑垎浜�
+   */
+  onShareAppMessage() {
+
+  }
+})
\ No newline at end of file
diff --git a/pages/personalCenter/activateProduct/index.json b/pages/personalCenter/activateProduct/index.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/personalCenter/activateProduct/index.json
@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/personalCenter/activateProduct/index.wxml b/pages/personalCenter/activateProduct/index.wxml
new file mode 100644
index 0000000..880b74d
--- /dev/null
+++ b/pages/personalCenter/activateProduct/index.wxml
@@ -0,0 +1,2 @@
+<!--pages/personalCenter/activateProduct/index.wxml-->
+<text>pages/personalCenter/activateProduct/index.wxml</text>
diff --git a/pages/personalCenter/activateProduct/index.wxss b/pages/personalCenter/activateProduct/index.wxss
new file mode 100644
index 0000000..d2baa87
--- /dev/null
+++ b/pages/personalCenter/activateProduct/index.wxss
@@ -0,0 +1 @@
+/* pages/personalCenter/activateProduct/index.wxss */
\ No newline at end of file
diff --git a/pages/personalCenter/certificate/index.js b/pages/personalCenter/certificate/index.js
new file mode 100644
index 0000000..9f7a333
--- /dev/null
+++ b/pages/personalCenter/certificate/index.js
@@ -0,0 +1,66 @@
+// pages/personalCenter/certificate/index.js
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚
+   */
+  onReady() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
+   */
+  onShow() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰闅愯棌
+   */
+  onHide() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍗歌浇
+   */
+  onUnload() {
+
+  },
+
+  /**
+   * 椤甸潰鐩稿叧浜嬩欢澶勭悊鍑芥暟--鐩戝惉鐢ㄦ埛涓嬫媺鍔ㄤ綔
+   */
+  onPullDownRefresh() {
+
+  },
+
+  /**
+   * 椤甸潰涓婃媺瑙﹀簳浜嬩欢鐨勫鐞嗗嚱鏁�
+   */
+  onReachBottom() {
+
+  },
+
+  /**
+   * 鐢ㄦ埛鐐瑰嚮鍙充笂瑙掑垎浜�
+   */
+  onShareAppMessage() {
+
+  }
+})
\ No newline at end of file
diff --git a/pages/personalCenter/certificate/index.json b/pages/personalCenter/certificate/index.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/personalCenter/certificate/index.json
@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/personalCenter/certificate/index.wxml b/pages/personalCenter/certificate/index.wxml
new file mode 100644
index 0000000..a960ce8
--- /dev/null
+++ b/pages/personalCenter/certificate/index.wxml
@@ -0,0 +1,2 @@
+<!--pages/personalCenter/certificate/index.wxml-->
+<text>pages/personalCenter/certificate/index.wxml</text>
diff --git a/pages/personalCenter/certificate/index.wxss b/pages/personalCenter/certificate/index.wxss
new file mode 100644
index 0000000..b13f6f1
--- /dev/null
+++ 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
new file mode 100644
index 0000000..d6af2e3
--- /dev/null
+++ b/pages/personalCenter/components/user-center-card/index.wxml
@@ -0,0 +1,33 @@
+<view class="user-center-card">
+  <!-- 鏈櫥褰曠殑鎯呭喌 -->
+  <block wx:if="{{currAuthStep === AuthStepType.ONE}}">
+    <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">
+        <image src="/static/images/personal/setting.png" mode="heightFix" class="img" />
+        <text>璁剧疆</text>
+      </view>
+    </view>
+  </block>
+  <!-- 宸茬櫥褰曚絾鏈巿鏉冪敤鎴蜂俊鎭儏鍐� -->
+  <block wx:if="{{currAuthStep === AuthStepType.TWO}}">
+    <view class="user-center-card__header">
+      <t-avatar image="{{userInfo.avatarUrl || defaultAvatarUrl}}" class="user-center-card__header__avatar" />
+      <view class="user-center-card__header__name">{{userInfo.nickName || '寰俊鐢ㄦ埛'}}</view>
+      <!-- 闇�瑕佹巿鏉冪敤鎴蜂俊鎭紝閫氳繃slot娣诲姞寮圭獥 -->
+      <view class="user-center-card__header__transparent" wx:if="{{isNeedGetUserInfo}}">
+        <slot name="getUserInfo" />
+      </view>
+      <!-- 涓嶉渶瑕佹巿鏉冪敤鎴蜂俊鎭紝浠嶇劧瑙﹀彂gotoUserEditPage浜嬩欢 -->
+      <view class="user-center-card__header__transparent" bind:tap="gotoUserEditPage" wx:else></view>
+    </view>
+  </block>
+  <!-- 宸茬櫥褰曚笖宸茬粡鎺堟潈鐢ㄦ埛淇℃伅鐨勬儏鍐� -->
+  <block wx:if="{{currAuthStep === AuthStepType.THREE}}">
+    <view class="user-center-card__header" bind:tap="gotoUserEditPage">
+      <t-avatar t-class="avatar" mode="aspectFill" class="user-center-card__header__avatar" image="{{userInfo.avatarUrl || defaultAvatarUrl}}" />
+      <view class="user-center-card__header__name">{{userInfo.nickName || '寰俊鐢ㄦ埛'}}</view>
+    </view>
+  </block>
+</view>
\ No newline at end of file
diff --git a/pages/personalCenter/components/user-center-card/index.wxss b/pages/personalCenter/components/user-center-card/index.wxss
new file mode 100644
index 0000000..4bb493f
--- /dev/null
+++ b/pages/personalCenter/components/user-center-card/index.wxss
@@ -0,0 +1,60 @@
+.user-center-card {
+  background-image: url('https://cdn-we-retail.ym.tencent.com/miniapp/template/user-center-bg-v1.png');
+  background-size: cover;
+  background-repeat: no-repeat;
+  padding: 0 24rpx;
+}
+
+.user-center-card__header {
+  margin-top: 160rpx;
+  margin-bottom: 30rpx;
+  margin-left: 20rpx;
+  height: 96rpx;
+  line-height: 48rpx;
+  display: flex;
+  justify-content: flex-start;
+  align-items: center;
+  color: #333;
+  position: relative;
+}
+
+.user-center-card__header__avatar {
+  width: 96rpx;
+  height: 96rpx;
+  border-radius: 48rpx;
+  overflow: hidden;
+}
+
+.user-center-card__header__name {
+  font-size: 36rpx;
+  line-height: 48rpx;
+  color: #333;
+  font-weight: bold;
+  margin-left: 24rpx;
+  margin-right: 16rpx;
+}
+
+.user-center-card__header__transparent {
+  position: absolute;
+  left: 0;
+  top: 0;
+  background-color: transparent;
+  height: 100%;
+  width: 100%;
+}
+
+.user-center-card__icon {
+  line-height: 96rpx;
+}
+
+.setting {
+  margin-left: auto;
+  display: flex;
+  align-items: center;
+}
+
+.setting .img {
+  height: 34rpx;
+  width: 34rpx;
+  margin-right: 10rpx;
+}
\ No newline at end of file
diff --git a/pages/personalCenter/downloads/index.js b/pages/personalCenter/downloads/index.js
new file mode 100644
index 0000000..2e5078a
--- /dev/null
+++ b/pages/personalCenter/downloads/index.js
@@ -0,0 +1,66 @@
+// pages/personalCenter/downloads/index.js
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚
+   */
+  onReady() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
+   */
+  onShow() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰闅愯棌
+   */
+  onHide() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍗歌浇
+   */
+  onUnload() {
+
+  },
+
+  /**
+   * 椤甸潰鐩稿叧浜嬩欢澶勭悊鍑芥暟--鐩戝惉鐢ㄦ埛涓嬫媺鍔ㄤ綔
+   */
+  onPullDownRefresh() {
+
+  },
+
+  /**
+   * 椤甸潰涓婃媺瑙﹀簳浜嬩欢鐨勫鐞嗗嚱鏁�
+   */
+  onReachBottom() {
+
+  },
+
+  /**
+   * 鐢ㄦ埛鐐瑰嚮鍙充笂瑙掑垎浜�
+   */
+  onShareAppMessage() {
+
+  }
+})
\ No newline at end of file
diff --git a/pages/personalCenter/downloads/index.json b/pages/personalCenter/downloads/index.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/personalCenter/downloads/index.json
@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/personalCenter/downloads/index.wxml b/pages/personalCenter/downloads/index.wxml
new file mode 100644
index 0000000..b64266a
--- /dev/null
+++ b/pages/personalCenter/downloads/index.wxml
@@ -0,0 +1,2 @@
+<!--pages/personalCenter/downloads/index.wxml-->
+<text>pages/personalCenter/downloads/index.wxml</text>
diff --git a/pages/personalCenter/downloads/index.wxss b/pages/personalCenter/downloads/index.wxss
new file mode 100644
index 0000000..f73c53a
--- /dev/null
+++ b/pages/personalCenter/downloads/index.wxss
@@ -0,0 +1 @@
+/* pages/personalCenter/downloads/index.wxss */
\ No newline at end of file
diff --git a/pages/personalCenter/feedBack/index.js b/pages/personalCenter/feedBack/index.js
new file mode 100644
index 0000000..9e4b25b
--- /dev/null
+++ b/pages/personalCenter/feedBack/index.js
@@ -0,0 +1,66 @@
+// pages/personalCenter/feedBack/index.js
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚
+   */
+  onReady() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
+   */
+  onShow() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰闅愯棌
+   */
+  onHide() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍗歌浇
+   */
+  onUnload() {
+
+  },
+
+  /**
+   * 椤甸潰鐩稿叧浜嬩欢澶勭悊鍑芥暟--鐩戝惉鐢ㄦ埛涓嬫媺鍔ㄤ綔
+   */
+  onPullDownRefresh() {
+
+  },
+
+  /**
+   * 椤甸潰涓婃媺瑙﹀簳浜嬩欢鐨勫鐞嗗嚱鏁�
+   */
+  onReachBottom() {
+
+  },
+
+  /**
+   * 鐢ㄦ埛鐐瑰嚮鍙充笂瑙掑垎浜�
+   */
+  onShareAppMessage() {
+
+  }
+})
\ No newline at end of file
diff --git a/pages/personalCenter/feedBack/index.json b/pages/personalCenter/feedBack/index.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/personalCenter/feedBack/index.json
@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/personalCenter/feedBack/index.wxml b/pages/personalCenter/feedBack/index.wxml
new file mode 100644
index 0000000..134e541
--- /dev/null
+++ b/pages/personalCenter/feedBack/index.wxml
@@ -0,0 +1,2 @@
+<!--pages/personalCenter/feedBack/index.wxml-->
+<text>pages/personalCenter/feedBack/index.wxml</text>
diff --git a/pages/personalCenter/feedBack/index.wxss b/pages/personalCenter/feedBack/index.wxss
new file mode 100644
index 0000000..62d1b32
--- /dev/null
+++ b/pages/personalCenter/feedBack/index.wxss
@@ -0,0 +1 @@
+/* pages/personalCenter/feedBack/index.wxss */
\ No newline at end of file
diff --git a/pages/personalCenter/feedBackSubmit/index.js b/pages/personalCenter/feedBackSubmit/index.js
new file mode 100644
index 0000000..545c533
--- /dev/null
+++ b/pages/personalCenter/feedBackSubmit/index.js
@@ -0,0 +1,66 @@
+// pages/personalCenter/feedBackSubmit/index.js
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚
+   */
+  onReady() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
+   */
+  onShow() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰闅愯棌
+   */
+  onHide() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍗歌浇
+   */
+  onUnload() {
+
+  },
+
+  /**
+   * 椤甸潰鐩稿叧浜嬩欢澶勭悊鍑芥暟--鐩戝惉鐢ㄦ埛涓嬫媺鍔ㄤ綔
+   */
+  onPullDownRefresh() {
+
+  },
+
+  /**
+   * 椤甸潰涓婃媺瑙﹀簳浜嬩欢鐨勫鐞嗗嚱鏁�
+   */
+  onReachBottom() {
+
+  },
+
+  /**
+   * 鐢ㄦ埛鐐瑰嚮鍙充笂瑙掑垎浜�
+   */
+  onShareAppMessage() {
+
+  }
+})
\ No newline at end of file
diff --git a/pages/personalCenter/feedBackSubmit/index.json b/pages/personalCenter/feedBackSubmit/index.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/personalCenter/feedBackSubmit/index.json
@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/personalCenter/feedBackSubmit/index.wxml b/pages/personalCenter/feedBackSubmit/index.wxml
new file mode 100644
index 0000000..675b7b0
--- /dev/null
+++ b/pages/personalCenter/feedBackSubmit/index.wxml
@@ -0,0 +1,2 @@
+<!--pages/personalCenter/feedBackSubmit/index.wxml-->
+<text>pages/personalCenter/feedBackSubmit/index.wxml</text>
diff --git a/pages/personalCenter/feedBackSubmit/index.wxss b/pages/personalCenter/feedBackSubmit/index.wxss
new file mode 100644
index 0000000..5445ab2
--- /dev/null
+++ b/pages/personalCenter/feedBackSubmit/index.wxss
@@ -0,0 +1 @@
+/* pages/personalCenter/feedBackSubmit/index.wxss */
\ No newline at end of file
diff --git a/pages/personalCenter/index.js b/pages/personalCenter/index.js
new file mode 100644
index 0000000..1405558
--- /dev/null
+++ b/pages/personalCenter/index.js
@@ -0,0 +1,200 @@
+const app = getApp()
+const menuData = [
+  {
+    title: '鎴戠殑璁㈠崟',
+    icon: '/static/images/personal/order.png',
+    url: '/pages/personalCenter/myOrder/index',
+    type: 'order',
+  },
+  {
+    title: '婵�娲诲晢鍝�',
+    icon: '/static/images/personal/jihuo.png',
+    url: '/pages/personalCenter/activateProduct/index',
+    type: 'activateProduct',
+  },
+  {
+    title: '鎴戠殑璇佷功',
+    icon: '/static/images/personal/certificate.png',
+    url: '/pages/personalCenter/certificate/index',
+    type: 'certificate',
+  },
+  {
+    title: '鎴戠殑鏀惰棌',
+    icon: '/static/images/personal/wodeshoucang.png',
+    url: '/pages/personalCenter/myCollection/index',
+    type: 'collection',
+  },
+  {
+    title: '鎴戠殑涓嬭浇',
+    icon: '/static/images/personal/download.png',
+    url: '/pages/personalCenter/downloads/index',
+    type: 'download',
+  },
+  {
+    title: '鏍蜂功鐢宠',
+    icon: '/static/images/personal/yangshushenqing.png',
+    url: '/pages/personalCenter/sampleBooks/index',
+    type: 'sampleBook',
+  },
+  {
+    title: '鍑轰功鐢宠',
+    icon: '/static/images/personal/chushu.png',
+    url: '/pages/personalCenter/publishBooks/index',
+    type: 'publishBooks',
+  },
+  {
+    title: '鎴戠殑涓婁紶',
+    icon: '/static/images/personal/upload.png',
+    url: '',
+    type: 'upload',
+  }
+];
+const moreMenu = [
+  {
+    title: '鎴戠殑娑堟伅',
+    icon: '/static/images/personal/notification.png',
+    url: '/pages/personalCenter/myMassage/index',
+    type: 'message',
+  },
+  {
+    title: '寤鸿涓庡弽棣�',
+    icon: '/static/images/personal/feedback.png',
+    url: '/pages/personalCenter/feedback/index',
+    type: 'feedback',
+  }
+];
+const moreMenu1 = [
+  {
+    title: '鍏充簬鎴戜滑',
+    icon: '/static/images/personal/about.png',
+    url: '',
+    type: 'aboutUs',
+  },
+  {
+    title: '鑱旂郴鎴戜滑',
+    icon: '/static/images/personal/contact.png',
+    url: '',
+    type: 'contact',
+  }
+];
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    show: false,
+    userInfo: {
+      avatarUrl:
+        'https://we-retail-static-1300977798.cos.ap-guangzhou.myqcloud.com/retail-ui/components-exp/avatar/avatar-1.jpg',
+      nickName: 'TDesign',
+      phoneNumber: '13438358888',
+    },
+    currAuthStep: 1,
+    teacherState: {
+      state: '',
+      reasonTxt: '',
+    },
+    integral: 0,
+    menuData,
+    moreMenu,
+    moreMenu1
+  },
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+  },
+
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
+   */
+  onShow() {
+    if (wx.getStorageSync(app.config.userInfoKey)) {
+      this.setData({
+        show: true,
+        userInfo: JSON.parse(wx.getStorageSync(app.config.userInfoKey))
+      })
+
+      if (typeof this.getTabBar === 'function' && this.getTabBar()) {
+        this.getTabBar().setData({
+          selected: 4 //杩欎釜鏁板瓧鏄綋鍓嶉〉闈㈠湪tabBar涓璴ist鏁扮粍鐨勭储寮�
+        })
+      }
+      this.getTeacherInfo()
+    } else {
+      wx.navigateTo({
+        url: "/pages/testLogin/index",
+      });
+    }
+  },
+  /**
+ * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰闅愯棌
+ */
+  onHide() {
+    this.setData({
+      show: false
+    })
+  },
+  /**
+   * 椤甸潰鐩稿叧浜嬩欢澶勭悊鍑芥暟--鐩戝惉鐢ㄦ埛涓嬫媺鍔ㄤ綔
+   */
+  onPullDownRefresh() {
+    this.init();
+  },
+  /**
+   * 椤甸潰涓婃媺瑙﹀簳浜嬩欢鐨勫鐞嗗嚱鏁�
+   */
+  onReachBottom() {
+  },
+  //鏁欏笀淇℃伅
+  getTeacherInfo() {
+    const data = {
+      start: 0,
+      size: 10,
+      topicIdOrRefCode: 'teacherRoleApproval',
+      appRefCode: app.config.appRefCode,
+      sort: {
+        type: 'Desc',
+        field: 'CreateDate'
+      }
+    }
+    app.MG.ugc.getTopicMessageList(data).then((res) => {
+      console.log(this.data.userInfo, "userInfo")
+      const resData = res.datas.find((i) => i.appUserCreator.userId == this.data.userInfo.userId)
+      if (resData) {
+        this.setData({
+          teacherState: {
+            state: resData.state,
+            reasonTxt: resData.feedBack != null ? JSON.parse(resData.feedBack).reason : ''
+          }
+        })
+      }
+    })
+  },
+
+  //鐐瑰嚮鐩綍
+  toPages(item) {
+    console.log(item)
+    let info = item.target.dataset.info
+    if (info.url) {
+      wx.navigateTo({
+        url: info.url
+      })
+    } else {
+      wx.showToast({
+        title: "寤鸿涓�",
+        icon: 'none',
+        duration: 2000
+      })
+    }
+  },
+
+  /**
+   * 鐢ㄦ埛鐐瑰嚮鍙充笂瑙掑垎浜�
+   */
+  onShareAppMessage() {
+
+  }
+})
\ No newline at end of file
diff --git a/pages/personalCenter/index.json b/pages/personalCenter/index.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/personalCenter/index.json
@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/personalCenter/index.wxml b/pages/personalCenter/index.wxml
new file mode 100644
index 0000000..d93ae03
--- /dev/null
+++ b/pages/personalCenter/index.wxml
@@ -0,0 +1,2 @@
+<!--pages/personalCenter/index.wxml-->
+<text>pages/personalCenter/index.wxml</text>
diff --git a/pages/personalCenter/index.wxss b/pages/personalCenter/index.wxss
new file mode 100644
index 0000000..0387fff
--- /dev/null
+++ b/pages/personalCenter/index.wxss
@@ -0,0 +1 @@
+/* pages/personalCenter/index.wxss */
\ No newline at end of file
diff --git a/pages/personalCenter/myCollection/index.js b/pages/personalCenter/myCollection/index.js
new file mode 100644
index 0000000..93fc08e
--- /dev/null
+++ b/pages/personalCenter/myCollection/index.js
@@ -0,0 +1,66 @@
+// pages/personalCenter/myCollection/index.js
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚
+   */
+  onReady() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
+   */
+  onShow() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰闅愯棌
+   */
+  onHide() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍗歌浇
+   */
+  onUnload() {
+
+  },
+
+  /**
+   * 椤甸潰鐩稿叧浜嬩欢澶勭悊鍑芥暟--鐩戝惉鐢ㄦ埛涓嬫媺鍔ㄤ綔
+   */
+  onPullDownRefresh() {
+
+  },
+
+  /**
+   * 椤甸潰涓婃媺瑙﹀簳浜嬩欢鐨勫鐞嗗嚱鏁�
+   */
+  onReachBottom() {
+
+  },
+
+  /**
+   * 鐢ㄦ埛鐐瑰嚮鍙充笂瑙掑垎浜�
+   */
+  onShareAppMessage() {
+
+  }
+})
\ No newline at end of file
diff --git a/pages/personalCenter/myCollection/index.json b/pages/personalCenter/myCollection/index.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/personalCenter/myCollection/index.json
@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/personalCenter/myCollection/index.wxml b/pages/personalCenter/myCollection/index.wxml
new file mode 100644
index 0000000..c7503c3
--- /dev/null
+++ b/pages/personalCenter/myCollection/index.wxml
@@ -0,0 +1,2 @@
+<!--pages/personalCenter/myCollection/index.wxml-->
+<text>pages/personalCenter/myCollection/index.wxml</text>
diff --git a/pages/personalCenter/myCollection/index.wxss b/pages/personalCenter/myCollection/index.wxss
new file mode 100644
index 0000000..c6a2567
--- /dev/null
+++ b/pages/personalCenter/myCollection/index.wxss
@@ -0,0 +1 @@
+/* pages/personalCenter/myCollection/index.wxss */
\ No newline at end of file
diff --git a/pages/personalCenter/myMassage/index.js b/pages/personalCenter/myMassage/index.js
new file mode 100644
index 0000000..b6c2b58
--- /dev/null
+++ b/pages/personalCenter/myMassage/index.js
@@ -0,0 +1,155 @@
+import moment from 'moment'
+const app = getApp();
+Page({
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    list: [],
+    //鍒嗛〉
+    page: 1,
+    limit: 10,
+    pageTotalCount: 0,
+    bottomLoading: false,
+    isMoreData: false,
+    // 杩斿洖椤堕儴
+    isBackTop: false,
+    setScrollValue: 0,
+    skeletonLoding: true,
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+    this.getDataList(false);
+  },
+
+  getDataList(isReachBottom) {
+    app.MG.app.getAppMessageList({
+      appRefCode: app.config.appRefCode,
+      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.createDate = moment(item.createDate).format("YYYY-MM-DD HH:mm");
+            });
+            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,
+            })
+          } else {
+            this.setData({
+              skeletonLoding: false,
+            })
+          }
+        } catch (error) {
+          console.log(error)
+        }
+      })
+  },
+
+  toList(itemData) {
+    let info = itemData.currentTarget.dataset.info;
+    wx.navigateTo({
+      url: "/pages/personalCenter/myMassage/massageDetail/index?id=" + info.id,
+    });
+  },
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚
+   */
+  onReady() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
+   */
+  onShow() {
+
+  },
+
+  /**
+   * 椤甸潰鐩稿叧浜嬩欢澶勭悊鍑芥暟--鐩戝惉鐢ㄦ埛涓嬫媺鍔ㄤ綔
+   */
+  onPullDownRefresh() {
+    if (this._freshing) return
+    this.setData({
+      page: 1,
+      limit: 10,
+      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);
+
+  },
+
+  // 鐩戝惉婊氬姩璺濈
+  onPageScroll(e) {
+    if (e && e.scrollTop >= 1000) {
+      this.setData({
+        isBackTop: true
+      })
+    } else {
+      this.setData({
+        isBackTop: false
+      })
+    }
+  },
+
+  /**
+   * 鐢ㄦ埛鐐瑰嚮鍙充笂瑙掑垎浜�
+   */
+  onShareAppMessage() {
+
+  }
+})
\ No newline at end of file
diff --git a/pages/personalCenter/myMassage/index.json b/pages/personalCenter/myMassage/index.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/personalCenter/myMassage/index.json
@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/personalCenter/myMassage/index.wxml b/pages/personalCenter/myMassage/index.wxml
new file mode 100644
index 0000000..5a96715
--- /dev/null
+++ b/pages/personalCenter/myMassage/index.wxml
@@ -0,0 +1,35 @@
+<view class="container" wx:if="{{!skeletonLoding}}">
+  <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="pageInfo" wx:if="{{list.length > 0}}">
+      <view class="content-item" wx:for="{{list}}" wx:for-item="item" wx:for-index="index" wx:key="index">
+        <view class="icon">
+          <t-image src="/static/images/personal/notification1.png" mode="heightFix" class="img" />
+        </view>
+        <view class="item-con" data-info="{{item}}" bindtap="toList">
+          <view class="titleBox">
+            <view class="item-title">{{item.name}}</view>
+            <view class="createDate">{{item.createDate}}</view>
+          </view>
+          <view class="description">
+            {{item.description}}
+          </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>
+  <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/myMassage/index.wxss b/pages/personalCenter/myMassage/index.wxss
new file mode 100644
index 0000000..2848b48
--- /dev/null
+++ b/pages/personalCenter/myMassage/index.wxss
@@ -0,0 +1,60 @@
+.pageInfo {
+  padding: 40rpx 20rpx;
+}
+
+.content-item {
+  padding: 20rpx 0;
+  border-bottom: 1px solid #EDEDED;
+  display: flex;
+}
+
+.content-item .icon {
+  width: 58rpx;
+  height: 58rpx;
+}
+
+.content-item .icon .img {
+  width: 100%;
+  height: 100%;
+}
+
+.item-con {
+  flex: 1;
+  margin-left: 30rpx;
+}
+
+.titleBox {
+  display: flex;
+  justify-content: space-between
+}
+
+.titleBox .item-title {
+  font-weight: bold;
+}
+
+.createDate {
+  font-size: 24rpx;
+  color: #949494;
+}
+
+.description {
+  font-size: 24rpx;
+  height: 88rpx;
+  line-height: 40rpx;
+  display: -webkit-box;
+  margin-top: 20rpx;
+  -webkit-box-orient: vertical;
+  -webkit-line-clamp: 2;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+.refresh-container {
+  margin: 0 auto;
+}
+
+.bottom-loading,
+.loading {
+  padding: 20rpx;
+  text-align: center;
+}
\ No newline at end of file
diff --git a/pages/personalCenter/myMassage/massageDetail/index.js b/pages/personalCenter/myMassage/massageDetail/index.js
new file mode 100644
index 0000000..e8ed824
--- /dev/null
+++ b/pages/personalCenter/myMassage/massageDetail/index.js
@@ -0,0 +1,79 @@
+const app = getApp();
+import moment from 'moment'
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    dataInfo: {}
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+    this.getDataInfo(options.id)
+  },
+  getDataInfo(id) {
+    app.MG.app.getMessage({
+      messageId: id
+    })
+      .then(res => {
+        res.createDate = moment(res.createDate).format("YYYY-MM-DD HH:mm");
+        this.setData({
+          dataInfo: res,
+        })
+
+      })
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚
+   */
+  onReady() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
+   */
+  onShow() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰闅愯棌
+   */
+  onHide() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍗歌浇
+   */
+  onUnload() {
+
+  },
+
+  /**
+   * 椤甸潰鐩稿叧浜嬩欢澶勭悊鍑芥暟--鐩戝惉鐢ㄦ埛涓嬫媺鍔ㄤ綔
+   */
+  onPullDownRefresh() {
+
+  },
+
+  /**
+   * 椤甸潰涓婃媺瑙﹀簳浜嬩欢鐨勫鐞嗗嚱鏁�
+   */
+  onReachBottom() {
+
+  },
+
+  /**
+   * 鐢ㄦ埛鐐瑰嚮鍙充笂瑙掑垎浜�
+   */
+  onShareAppMessage() {
+
+  }
+})
\ No newline at end of file
diff --git a/pages/personalCenter/myMassage/massageDetail/index.json b/pages/personalCenter/myMassage/massageDetail/index.json
new file mode 100644
index 0000000..211820b
--- /dev/null
+++ b/pages/personalCenter/myMassage/massageDetail/index.json
@@ -0,0 +1,4 @@
+{
+  "navigationBarTitleText": "鎴戠殑娑堟伅",
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/personalCenter/myMassage/massageDetail/index.wxml b/pages/personalCenter/myMassage/massageDetail/index.wxml
new file mode 100644
index 0000000..80216eb
--- /dev/null
+++ b/pages/personalCenter/myMassage/massageDetail/index.wxml
@@ -0,0 +1,8 @@
+<view class="container">
+  <view>
+    <view class="name">{{dataInfo.name}}</view>
+    <view class="createDate">{{dataInfo.createDate}}</view>
+    <view class="description">{{dataInfo.description}}</view>
+    <rich-text space="emsp" nodes="{{dataInfo.content}}" class="content" />
+  </view>
+</view>
\ No newline at end of file
diff --git a/pages/personalCenter/myMassage/massageDetail/index.wxss b/pages/personalCenter/myMassage/massageDetail/index.wxss
new file mode 100644
index 0000000..67696db
--- /dev/null
+++ b/pages/personalCenter/myMassage/massageDetail/index.wxss
@@ -0,0 +1,28 @@
+.container {
+  padding: 20rpx;
+}
+
+.name {
+  text-align: center;
+  font-size: 32rpx;
+  font-weight: bold;
+}
+
+.createDate {
+  margin-top: 20rpx;
+  color: #999;
+  text-align: center;
+  font-size: 28rpx;
+}
+
+.description {
+  padding: 30rpx 0;
+  color: #999;
+  font-size: 28rpx;
+  line-height: 40rpx;
+}
+
+.content {
+  font-size: 28rpx;
+  line-height: 40rpx;
+}
\ No newline at end of file
diff --git a/pages/personalCenter/myOrder/index.js b/pages/personalCenter/myOrder/index.js
new file mode 100644
index 0000000..b7ca12c
--- /dev/null
+++ b/pages/personalCenter/myOrder/index.js
@@ -0,0 +1,66 @@
+// pages/personalCenter/myOrder/index.js
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚
+   */
+  onReady() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
+   */
+  onShow() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰闅愯棌
+   */
+  onHide() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍗歌浇
+   */
+  onUnload() {
+
+  },
+
+  /**
+   * 椤甸潰鐩稿叧浜嬩欢澶勭悊鍑芥暟--鐩戝惉鐢ㄦ埛涓嬫媺鍔ㄤ綔
+   */
+  onPullDownRefresh() {
+
+  },
+
+  /**
+   * 椤甸潰涓婃媺瑙﹀簳浜嬩欢鐨勫鐞嗗嚱鏁�
+   */
+  onReachBottom() {
+
+  },
+
+  /**
+   * 鐢ㄦ埛鐐瑰嚮鍙充笂瑙掑垎浜�
+   */
+  onShareAppMessage() {
+
+  }
+})
\ No newline at end of file
diff --git a/pages/personalCenter/myOrder/index.json b/pages/personalCenter/myOrder/index.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/personalCenter/myOrder/index.json
@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/personalCenter/myOrder/index.wxml b/pages/personalCenter/myOrder/index.wxml
new file mode 100644
index 0000000..2413eb4
--- /dev/null
+++ b/pages/personalCenter/myOrder/index.wxml
@@ -0,0 +1,2 @@
+<!--pages/personalCenter/myOrder/index.wxml-->
+<text>pages/personalCenter/myOrder/index.wxml</text>
diff --git a/pages/personalCenter/myOrder/index.wxss b/pages/personalCenter/myOrder/index.wxss
new file mode 100644
index 0000000..de4ba68
--- /dev/null
+++ b/pages/personalCenter/myOrder/index.wxss
@@ -0,0 +1 @@
+/* pages/personalCenter/myOrder/index.wxss */
\ No newline at end of file
diff --git a/pages/personalCenter/publishBooks/index.js b/pages/personalCenter/publishBooks/index.js
new file mode 100644
index 0000000..8036f4a
--- /dev/null
+++ b/pages/personalCenter/publishBooks/index.js
@@ -0,0 +1,66 @@
+// pages/personalCenter/publishBooks/index.js
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚
+   */
+  onReady() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
+   */
+  onShow() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰闅愯棌
+   */
+  onHide() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍗歌浇
+   */
+  onUnload() {
+
+  },
+
+  /**
+   * 椤甸潰鐩稿叧浜嬩欢澶勭悊鍑芥暟--鐩戝惉鐢ㄦ埛涓嬫媺鍔ㄤ綔
+   */
+  onPullDownRefresh() {
+
+  },
+
+  /**
+   * 椤甸潰涓婃媺瑙﹀簳浜嬩欢鐨勫鐞嗗嚱鏁�
+   */
+  onReachBottom() {
+
+  },
+
+  /**
+   * 鐢ㄦ埛鐐瑰嚮鍙充笂瑙掑垎浜�
+   */
+  onShareAppMessage() {
+
+  }
+})
\ No newline at end of file
diff --git a/pages/personalCenter/publishBooks/index.json b/pages/personalCenter/publishBooks/index.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/personalCenter/publishBooks/index.json
@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/personalCenter/publishBooks/index.wxml b/pages/personalCenter/publishBooks/index.wxml
new file mode 100644
index 0000000..0fb8c8b
--- /dev/null
+++ b/pages/personalCenter/publishBooks/index.wxml
@@ -0,0 +1,2 @@
+<!--pages/personalCenter/publishBooks/index.wxml-->
+<text>pages/personalCenter/publishBooks/index.wxml</text>
diff --git a/pages/personalCenter/publishBooks/index.wxss b/pages/personalCenter/publishBooks/index.wxss
new file mode 100644
index 0000000..a9a43b0
--- /dev/null
+++ b/pages/personalCenter/publishBooks/index.wxss
@@ -0,0 +1 @@
+/* pages/personalCenter/publishBooks/index.wxss */
\ No newline at end of file
diff --git a/pages/personalCenter/sampleBooks/index.js b/pages/personalCenter/sampleBooks/index.js
new file mode 100644
index 0000000..ff7d82d
--- /dev/null
+++ b/pages/personalCenter/sampleBooks/index.js
@@ -0,0 +1,66 @@
+// pages/personalCenter/sampleBooks/index.js
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚
+   */
+  onReady() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
+   */
+  onShow() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰闅愯棌
+   */
+  onHide() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍗歌浇
+   */
+  onUnload() {
+
+  },
+
+  /**
+   * 椤甸潰鐩稿叧浜嬩欢澶勭悊鍑芥暟--鐩戝惉鐢ㄦ埛涓嬫媺鍔ㄤ綔
+   */
+  onPullDownRefresh() {
+
+  },
+
+  /**
+   * 椤甸潰涓婃媺瑙﹀簳浜嬩欢鐨勫鐞嗗嚱鏁�
+   */
+  onReachBottom() {
+
+  },
+
+  /**
+   * 鐢ㄦ埛鐐瑰嚮鍙充笂瑙掑垎浜�
+   */
+  onShareAppMessage() {
+
+  }
+})
\ No newline at end of file
diff --git a/pages/personalCenter/sampleBooks/index.json b/pages/personalCenter/sampleBooks/index.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/personalCenter/sampleBooks/index.json
@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/personalCenter/sampleBooks/index.wxml b/pages/personalCenter/sampleBooks/index.wxml
new file mode 100644
index 0000000..d4eb5c9
--- /dev/null
+++ b/pages/personalCenter/sampleBooks/index.wxml
@@ -0,0 +1,2 @@
+<!--pages/personalCenter/sampleBooks/index.wxml-->
+<text>pages/personalCenter/sampleBooks/index.wxml</text>
diff --git a/pages/personalCenter/sampleBooks/index.wxss b/pages/personalCenter/sampleBooks/index.wxss
new file mode 100644
index 0000000..73a1729
--- /dev/null
+++ b/pages/personalCenter/sampleBooks/index.wxss
@@ -0,0 +1 @@
+/* pages/personalCenter/sampleBooks/index.wxss */
\ No newline at end of file
diff --git a/pages/teacherCertification/index.js b/pages/teacherCertification/index.js
new file mode 100644
index 0000000..09555f3
--- /dev/null
+++ b/pages/teacherCertification/index.js
@@ -0,0 +1,66 @@
+// pages/teacherCertification/index.js
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚
+   */
+  onReady() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
+   */
+  onShow() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰闅愯棌
+   */
+  onHide() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍗歌浇
+   */
+  onUnload() {
+
+  },
+
+  /**
+   * 椤甸潰鐩稿叧浜嬩欢澶勭悊鍑芥暟--鐩戝惉鐢ㄦ埛涓嬫媺鍔ㄤ綔
+   */
+  onPullDownRefresh() {
+
+  },
+
+  /**
+   * 椤甸潰涓婃媺瑙﹀簳浜嬩欢鐨勫鐞嗗嚱鏁�
+   */
+  onReachBottom() {
+
+  },
+
+  /**
+   * 鐢ㄦ埛鐐瑰嚮鍙充笂瑙掑垎浜�
+   */
+  onShareAppMessage() {
+
+  }
+})
\ No newline at end of file
diff --git a/pages/teacherCertification/index.json b/pages/teacherCertification/index.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/teacherCertification/index.json
@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/teacherCertification/index.wxml b/pages/teacherCertification/index.wxml
new file mode 100644
index 0000000..ffa6ee5
--- /dev/null
+++ b/pages/teacherCertification/index.wxml
@@ -0,0 +1,2 @@
+<!--pages/teacherCertification/index.wxml-->
+<text>pages/teacherCertification/index.wxml</text>
diff --git a/pages/teacherCertification/index.wxss b/pages/teacherCertification/index.wxss
new file mode 100644
index 0000000..a28030d
--- /dev/null
+++ b/pages/teacherCertification/index.wxss
@@ -0,0 +1 @@
+/* pages/teacherCertification/index.wxss */
\ No newline at end of file
diff --git a/pages/testLogin/index.js b/pages/testLogin/index.js
new file mode 100644
index 0000000..e402ac9
--- /dev/null
+++ b/pages/testLogin/index.js
@@ -0,0 +1,132 @@
+// pages/testLogin/index.js
+const app = getApp();
+
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    textName: "18892081234",
+    textPassword: "xA123456",
+    loading: false,
+    userInfo: {
+      name: "",
+      icon: ""
+    }
+  },
+
+  // 鐧诲綍
+  onLogin() {
+    this.setData({
+      loading: true
+    })
+    const data = {
+      loginName: this.data.textName,
+      password: this.data.textPassword,
+      appRefCode: app.config.appRefCode,
+      platform: "Mobile",
+    };
+    app.MG.identity.loginByPassword(data).then(res => {
+      if (res && res.status == "Ok") {
+        this.setData({
+          loginInfo: JSON.stringify(res)
+        })
+        wx.setStorageSync(app.config.tokenKey, res.token);
+        this.getUserInfo()
+      } else {
+        wx.showToast({
+          title: res.message || "鎵嬫満鍙锋垨瀵嗙爜閿欒",
+          icon: "error",
+          duration: 2000
+        })
+      }
+    });
+  },
+
+  // 鑾峰彇鐢ㄦ埛淇℃伅
+  // 鑾峰彇鐧诲綍鐢ㄦ埛韬唤
+  getUserInfo() {
+    app.MG.identity.getCurrentAppUser().then(res => {
+      // 鐢ㄦ埛淇℃伅浼樺厛绾э細鏁欏笀璁よ瘉 > 寰俊 > 瀛︾敓锛堟敞鍐屾椂榛樿锛�
+      if (res) {
+        console.log(res, "user");
+        let defaultUser = {};
+        let secretData = res.secretList.find(i => i.type == 'LoginNameAndPassword')
+        let WeChatInfo = res.infoList.find((item) => item.type === "WeChat");
+        if (WeChatInfo) {
+          defaultUser = {
+            nickName: WeChatInfo.name,
+            avatarUrl: WeChatInfo.icon,
+            userId: res.userId
+          }
+        }
+        if (secretData) {
+          defaultUser = {
+            nickName: secretData.credential,
+            avatarUrl: "../../static/images/index/tab.png",
+            userId: res.userId
+          }
+        }
+
+        this.setData({
+          userInfo: defaultUser,
+          loading: false
+        })
+        wx.setStorageSync(app.config.userInfoKey, JSON.stringify(this.data.userInfo));
+      }
+      wx.switchTab({
+        url: '/pages/home/home'
+      })
+    });
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚
+   */
+  onReady() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
+   */
+  onShow() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰闅愯棌
+   */
+  onHide() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍗歌浇
+   */
+  onUnload() {
+
+  },
+
+  /**
+   * 椤甸潰鐩稿叧浜嬩欢澶勭悊鍑芥暟--鐩戝惉鐢ㄦ埛涓嬫媺鍔ㄤ綔
+   */
+  onPullDownRefresh() {
+
+  },
+
+  /**
+   * 椤甸潰涓婃媺瑙﹀簳浜嬩欢鐨勫鐞嗗嚱鏁�
+   */
+  onReachBottom() {
+
+  }
+})
\ No newline at end of file
diff --git a/pages/testLogin/index.json b/pages/testLogin/index.json
new file mode 100644
index 0000000..fd16c3b
--- /dev/null
+++ b/pages/testLogin/index.json
@@ -0,0 +1,6 @@
+{
+  "usingComponents": {
+    "t-input": "tdesign-miniprogram/input/input",
+    "t-button": "tdesign-miniprogram/button/button"
+  }
+}
\ No newline at end of file
diff --git a/pages/testLogin/index.wxml b/pages/testLogin/index.wxml
new file mode 100644
index 0000000..b538be0
--- /dev/null
+++ b/pages/testLogin/index.wxml
@@ -0,0 +1,8 @@
+<!--pages/testLogin/index.wxml-->
+<view>
+  <t-input label="鐢ㄦ埛璐﹀彿" placeholder="璇疯緭鍏ョ敤鎴峰悕" model:value="{{textName}}" suffixIcon="{{ { name: 'user-avatar', ariaLabel: '閫氳褰�' } }}"></t-input>
+  <t-input label="鐢ㄦ埛瀵嗙爜" placeholder="璇疯緭鍏ュ瘑鐮�" type="password" model:value="{{textPassword}}" clearable />
+</view>
+<view class="button-example">
+  <t-button theme="primary" loading="{{loading}}"  bindtap="onLogin" size="large" block>绔嬪嵆鐧诲綍</t-button>
+</view>
\ No newline at end of file
diff --git a/pages/testLogin/index.wxss b/pages/testLogin/index.wxss
new file mode 100644
index 0000000..7eb603b
--- /dev/null
+++ b/pages/testLogin/index.wxss
@@ -0,0 +1,4 @@
+/* pages/testLogin/index.wxss */
+.button-example {
+  margin: 60rpx 32rpx;
+}
\ 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/static/images/personal/notification1.png b/static/images/personal/notification1.png
new file mode 100644
index 0000000..8132730
--- /dev/null
+++ b/static/images/personal/notification1.png
Binary files differ

--
Gitblit v1.9.1