Ver Fonte

修改部分页面

839877316@qq.com há 6 meses atrás
pai
commit
1de4fcb17a
100 ficheiros alterados com 1177 adições e 24384 exclusões
  1. 1 1
      common/config.js
  2. 120 120
      manifest.json
  3. 0 262
      packageOrder/pages/after-sale/index.vue
  4. 0 877
      packageOrder/pages/detail/index.vue
  5. 0 474
      packageOrder/pages/list/index.vue
  6. 0 692
      packageOrder/pages/list/record.vue
  7. 0 377
      packageOrder/pages/logistics/index.vue
  8. 0 396
      packageOrder/pages/payment/index.vue
  9. 0 180
      packageOrder/pages/score/index.vue
  10. 0 162
      packageOrder/pages/score/product-score.vue
  11. 0 166
      packageShop/pages/address-edit/index.vue
  12. 0 178
      packageShop/pages/address/index.vue
  13. 0 78
      packageShop/pages/article/detail.vue
  14. 0 684
      packageShop/pages/cart/index.vue
  15. 0 945
      packageShop/pages/detail/index.vue
  16. 0 224
      packageShop/pages/score/index.vue
  17. 0 166
      packageShop/pages/search/index.vue
  18. 0 917
      packageShop/pages/search/product-list.vue
  19. 0 487
      packageShop/pages/settle/index.vue
  20. 0 165
      packageUser/pages/about/index.vue
  21. 0 205
      packageUser/pages/address/edit.vue
  22. 0 195
      packageUser/pages/address/list.vue
  23. 0 867
      packageUser/pages/collect/index.vue
  24. 0 223
      packageUser/pages/feedback/index.vue
  25. 0 106
      packageUser/pages/language/index.vue
  26. 0 570
      packageUser/pages/level/index.vue
  27. 0 260
      packageUser/pages/register/index.vue
  28. 0 1044
      packageUser/pages/share/index.vue
  29. 0 1118
      packageUser/pages/team/index.vue
  30. 0 98
      packageUser/pages/user-info/account-change.vue
  31. 0 186
      packageUser/pages/user-info/birthday-change.vue
  32. 0 323
      packageUser/pages/user-info/index.vue
  33. 0 118
      packageUser/pages/user-info/sex-change.vue
  34. 60 202
      pages.json
  35. 462 0
      pages/index/index.vue
  36. 0 2454
      pages/index/indexNew.vue
  37. 0 576
      pages/order/after-progress.vue
  38. 0 315
      pages/order/after.vue
  39. 0 439
      pages/order/detail.vue
  40. 0 255
      pages/order/history-after.vue
  41. 0 427
      pages/order/list.vue
  42. 0 109
      pages/order/logistics.vue
  43. 0 359
      pages/order/payment.vue
  44. 0 217
      pages/order/score.vue
  45. 0 166
      pages/order/search.vue
  46. 0 145
      pages/order/update-address.vue
  47. 0 505
      pages/search/index.vue
  48. 0 958
      pages/shop/product-type-list.vue
  49. 119 1685
      pages/tabbar/my.vue
  50. 0 23
      pages/tabbar/social.vue
  51. 0 0
      pages/tabbar/visitor.vue
  52. 0 94
      pages/user/about-us.vue
  53. 0 94
      pages/user/account-change.vue
  54. 0 181
      pages/user/birthday-change.vue
  55. 0 952
      pages/user/feedback.vue
  56. 0 194
      pages/user/forget-password.vue
  57. 0 135
      pages/user/language.vue
  58. 0 200
      pages/user/register.vue
  59. 0 37
      pages/user/set-avatar.vue
  60. 0 118
      pages/user/sex-change.vue
  61. 0 203
      pages/user/sign.vue
  62. 0 258
      pages/user/userInfo-change.vue
  63. 143 140
      pagesA/public/login.vue
  64. 132 0
      pagesA/public/phone-login.vue
  65. 4 4
      pagesA/public/richtext.vue
  66. 136 75
      pagesA/user/index.vue
  67. BIN
      static/images/apply.png
  68. BIN
      static/images/behalf.png
  69. BIN
      static/images/bg.png
  70. BIN
      static/images/bluetooth.png
  71. BIN
      static/images/cart1.png
  72. BIN
      static/images/dengji.png
  73. BIN
      static/images/dfh1.png
  74. BIN
      static/images/dfk1.png
  75. BIN
      static/images/dizhi.png
  76. BIN
      static/images/dsh2.png
  77. BIN
      static/images/empty.png
  78. BIN
      static/images/fenxiang.png
  79. BIN
      static/images/fh.png
  80. BIN
      static/images/gift.png
  81. BIN
      static/images/gouwuche.png
  82. BIN
      static/images/hot.png
  83. BIN
      static/images/img.png
  84. BIN
      static/images/level.png
  85. BIN
      static/images/level1.png
  86. BIN
      static/images/level2.png
  87. BIN
      static/images/level3.png
  88. BIN
      static/images/login.png
  89. BIN
      static/images/logo.png
  90. BIN
      static/images/order/daifahuo.png
  91. BIN
      static/images/order/daifukuan.png
  92. BIN
      static/images/order/daipingjia.png
  93. BIN
      static/images/order/daishouhuo.png
  94. BIN
      static/images/order/wuliu.png
  95. BIN
      static/images/order/yiwancheng.png
  96. BIN
      static/images/pet.png
  97. BIN
      static/images/pj1.png
  98. BIN
      static/images/ruzhu.png
  99. BIN
      static/images/search.png
  100. BIN
      static/images/sh1.png

+ 1 - 1
common/config.js

@@ -17,7 +17,7 @@ const config = {
 		copyright: '',
 		domain: 'http://192.168.0.118:8088'
 	},
-	shareImg: "https://ndtk.tos-cn-guangzhou.volces.com/uploads/156adea827104e38ae0e25ec4701ecfe.jpg",
+	shareImg: "/static/images/logo.png",
 	initShare: {
 		user_poster_bg: 'http://abinmalm.oss-cn-shenzhen.aliyuncs.com/upload/20220423/66daf320d638427560b55d63b3b86277.jpg',
 		goods_poster_bg: 'http://abinmalm.oss-cn-shenzhen.aliyuncs.com/upload/20220423/ad95ddb2541e775d0f356800b3458120.jpg',

+ 120 - 120
manifest.json

@@ -1,121 +1,121 @@
 {
-    "name" : "hjmy-app",
-    "appid" : "__UNI__68AB107",
-    "description" : "",
-    "versionName" : "1.0.1",
-    "versionCode" : "100",
-    "transformPx" : false,
-    /* 5+App特有相关 */
-    "app-plus" : {
-        "usingComponents" : true,
-        "nvueStyleCompiler" : "uni-app",
-        "compilerVersion" : 3,
-        "splashscreen" : {
-            "alwaysShowBeforeRender" : true,
-            "waiting" : true,
-            "autoclose" : true,
-            "delay" : 0
-        },
-        /* 模块配置 */
-        "modules" : {
-            "Bluetooth" : {},
-            "Camera" : {},
-            "VideoPlayer" : {},
-            "Payment" : {}
-        },
-        /* 应用发布信息 */
-        "distribute" : {
-            /* android打包配置 */
-            "android" : {
-                "permissions" : [
-                    "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
-                    "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
-                    "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
-                    "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
-                    "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
-                    "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
-                    "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
-                    "<uses-permission android:name=\"android.permission.CAMERA\"/>",
-                    "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
-                    "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
-                    "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
-                    "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
-                    "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
-                    "<uses-feature android:name=\"android.hardware.camera\"/>",
-                    "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
-                ]
-            },
-            /* ios打包配置 */
-            "ios" : {
-                "dSYMs" : false
-            },
-            /* SDK配置 */
-            "sdkConfigs" : {
-                "payment" : {},
-                "push" : {
-                    "unipush" : {}
-                }
-            },
-            "icons" : {
-                "android" : {
-                    "hdpi" : "unpackage/res/icons/72x72.png",
-                    "xhdpi" : "unpackage/res/icons/96x96.png",
-                    "xxhdpi" : "unpackage/res/icons/144x144.png",
-                    "xxxhdpi" : "unpackage/res/icons/192x192.png"
-                },
-                "ios" : {
-                    "appstore" : "unpackage/res/icons/1024x1024.png",
-                    "ipad" : {
-                        "app" : "unpackage/res/icons/76x76.png",
-                        "app@2x" : "unpackage/res/icons/152x152.png",
-                        "notification" : "unpackage/res/icons/20x20.png",
-                        "notification@2x" : "unpackage/res/icons/40x40.png",
-                        "proapp@2x" : "unpackage/res/icons/167x167.png",
-                        "settings" : "unpackage/res/icons/29x29.png",
-                        "settings@2x" : "unpackage/res/icons/58x58.png",
-                        "spotlight" : "unpackage/res/icons/40x40.png",
-                        "spotlight@2x" : "unpackage/res/icons/80x80.png"
-                    },
-                    "iphone" : {
-                        "app@2x" : "unpackage/res/icons/120x120.png",
-                        "app@3x" : "unpackage/res/icons/180x180.png",
-                        "notification@2x" : "unpackage/res/icons/40x40.png",
-                        "notification@3x" : "unpackage/res/icons/60x60.png",
-                        "settings@2x" : "unpackage/res/icons/58x58.png",
-                        "settings@3x" : "unpackage/res/icons/87x87.png",
-                        "spotlight@2x" : "unpackage/res/icons/80x80.png",
-                        "spotlight@3x" : "unpackage/res/icons/120x120.png"
-                    }
-                }
-            }
-        }
-    },
-    /* 快应用特有相关 */
-    "quickapp" : {},
-    /* 小程序特有相关 */
-    "mp-weixin" : {
-        "appid" : "wx13733f809956c2c1",
-        "setting" : {
-            "urlCheck" : false
-        },
-        "usingComponents" : true,
-        // 添加这一行
-        "requiredPrivateInfos" : [ "chooseAddress" ]
-    },
-    "mp-alipay" : {
-        "usingComponents" : true
-    },
-    "mp-baidu" : {
-        "usingComponents" : true
-    },
-    "mp-toutiao" : {
-        "usingComponents" : true
-    },
-    "uniStatistics" : {
-        "enable" : false
-    },
-    "vueVersion" : "3",
-    "h5" : {
-        "title" : "宏匠唐卡"
-    }
-}
+	"name": "hjmy-app",
+	"appid": "__UNI__68AB107",
+	"description": "",
+	"versionName": "1.0.1",
+	"versionCode": "100",
+	"transformPx": false,
+	/* 5+App特有相关 */
+	"app-plus": {
+		"usingComponents": true,
+		"nvueStyleCompiler": "uni-app",
+		"compilerVersion": 3,
+		"splashscreen": {
+			"alwaysShowBeforeRender": true,
+			"waiting": true,
+			"autoclose": true,
+			"delay": 0
+		},
+		/* 模块配置 */
+		"modules": {
+			"Bluetooth": {},
+			"Camera": {},
+			"VideoPlayer": {},
+			"Payment": {}
+		},
+		/* 应用发布信息 */
+		"distribute": {
+			/* android打包配置 */
+			"android": {
+				"permissions": [
+					"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
+					"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
+					"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
+					"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
+					"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
+					"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
+					"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
+					"<uses-permission android:name=\"android.permission.CAMERA\"/>",
+					"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
+					"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
+					"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
+					"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
+					"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
+					"<uses-feature android:name=\"android.hardware.camera\"/>",
+					"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
+				]
+			},
+			/* ios打包配置 */
+			"ios": {
+				"dSYMs": false
+			},
+			/* SDK配置 */
+			"sdkConfigs": {
+				"payment": {},
+				"push": {
+					"unipush": {}
+				}
+			},
+			"icons": {
+				"android": {
+					"hdpi": "unpackage/res/icons/72x72.png",
+					"xhdpi": "unpackage/res/icons/96x96.png",
+					"xxhdpi": "unpackage/res/icons/144x144.png",
+					"xxxhdpi": "unpackage/res/icons/192x192.png"
+				},
+				"ios": {
+					"appstore": "unpackage/res/icons/1024x1024.png",
+					"ipad": {
+						"app": "unpackage/res/icons/76x76.png",
+						"app@2x": "unpackage/res/icons/152x152.png",
+						"notification": "unpackage/res/icons/20x20.png",
+						"notification@2x": "unpackage/res/icons/40x40.png",
+						"proapp@2x": "unpackage/res/icons/167x167.png",
+						"settings": "unpackage/res/icons/29x29.png",
+						"settings@2x": "unpackage/res/icons/58x58.png",
+						"spotlight": "unpackage/res/icons/40x40.png",
+						"spotlight@2x": "unpackage/res/icons/80x80.png"
+					},
+					"iphone": {
+						"app@2x": "unpackage/res/icons/120x120.png",
+						"app@3x": "unpackage/res/icons/180x180.png",
+						"notification@2x": "unpackage/res/icons/40x40.png",
+						"notification@3x": "unpackage/res/icons/60x60.png",
+						"settings@2x": "unpackage/res/icons/58x58.png",
+						"settings@3x": "unpackage/res/icons/87x87.png",
+						"spotlight@2x": "unpackage/res/icons/80x80.png",
+						"spotlight@3x": "unpackage/res/icons/120x120.png"
+					}
+				}
+			}
+		}
+	},
+	/* 快应用特有相关 */
+	"quickapp": {},
+	/* 小程序特有相关 */
+	"mp-weixin": {
+		"appid": "wx13733f809956c2c1",
+		"setting": {
+			"urlCheck": false
+		},
+		"usingComponents": true,
+		// 添加这一行
+		"requiredPrivateInfos": ["chooseAddress"]
+	},
+	"mp-alipay": {
+		"usingComponents": true
+	},
+	"mp-baidu": {
+		"usingComponents": true
+	},
+	"mp-toutiao": {
+		"usingComponents": true
+	},
+	"uniStatistics": {
+		"enable": false
+	},
+	"vueVersion": "3",
+	"h5": {
+		"title": "知己访客"
+	}
+}

+ 0 - 262
packageOrder/pages/after-sale/index.vue

@@ -1,262 +0,0 @@
-<template>
-  <view class="after-sale">
-    <!-- 商品信息 -->
-    <view class="product-info">
-      <image :src="product.image" mode="aspectFill" class="product-image"></image>
-      <view class="product-detail">
-        <view class="product-name">{{product.name}}</view>
-        <view class="product-spec">{{product.spec}}</view>
-        <view class="product-price">¥{{product.price}}</view>
-      </view>
-    </view>
-    
-    <!-- 售后表单 -->
-    <view class="form-section">
-      <u-form :model="form" ref="form">
-        <u-form-item label="售后类型" prop="type" required>
-          <u-radio-group v-model="form.type">
-            <u-radio 
-              v-for="(item, index) in typeOptions" 
-              :key="index"
-              :name="item.value"
-              :label="item.label">
-            </u-radio>
-          </u-radio-group>
-        </u-form-item>
-        
-        <u-form-item label="申请原因" prop="reason" required>
-          <u-select
-            v-model="form.reason"
-            :list="reasonOptions"
-            placeholder="请选择申请原因">
-          </u-select>
-        </u-form-item>
-        
-        <u-form-item label="问题描述" prop="description" required>
-          <u-textarea
-            v-model="form.description"
-            placeholder="请详细描述您遇到的问题"
-            count
-            maxlength="500">
-          </u-textarea>
-        </u-form-item>
-        
-        <u-form-item label="上传凭证">
-          <u-upload
-            :fileList="form.images"
-            @afterRead="afterRead"
-            @delete="deletePic"
-            name="1"
-            multiple
-            maxCount="9">
-          </u-upload>
-        </u-form-item>
-        
-        <u-form-item label="联系人" prop="contact" required>
-          <u-input v-model="form.contact" placeholder="请输入联系人姓名" />
-        </u-form-item>
-        
-        <u-form-item label="手机号码" prop="phone" required>
-          <u-input v-model="form.phone" placeholder="请输入手机号码" type="number" maxlength="11" />
-        </u-form-item>
-      </u-form>
-    </view>
-    
-    <!-- 提交按钮 -->
-    <view class="submit-btn">
-      <u-button type="primary" @click="submit" color="#D93025">提交申请</u-button>
-    </view>
-  </view>
-</template>
-
-<script>
-export default {
-  data() {
-    return {
-      orderId: '',
-      productId: '',
-      product: {
-        image: '',
-        name: '',
-        spec: '',
-        price: ''
-      },
-      form: {
-        type: 'refund',
-        reason: '',
-        description: '',
-        images: [],
-        contact: '',
-        phone: ''
-      },
-      typeOptions: [
-        { label: '仅退款', value: 'refund' },
-        { label: '退货退款', value: 'return' }
-      ],
-      reasonOptions: [
-        { label: '商品质量问题', value: 'quality' },
-        { label: '商品损坏', value: 'damaged' },
-        { label: '商品与描述不符', value: 'mismatch' },
-        { label: '收到错误商品', value: 'wrong' },
-        { label: '其他原因', value: 'other' }
-      ],
-      rules: {
-        type: [{
-          required: true,
-          message: '请选择售后类型',
-          trigger: ['change']
-        }],
-        reason: [{
-          required: true,
-          message: '请选择申请原因',
-          trigger: ['change']
-        }],
-        description: [{
-          required: true,
-          message: '请输入问题描述',
-          trigger: ['blur']
-        }],
-        contact: [{
-          required: true,
-          message: '请输入联系人姓名',
-          trigger: ['blur']
-        }],
-        phone: [{
-          required: true,
-          message: '请输入手机号码',
-          trigger: ['blur']
-        }, {
-          pattern: /^1[3-9]\d{9}$/,
-          message: '请输入正确的手机号码',
-          trigger: ['blur']
-        }]
-      }
-    }
-  },
-  onLoad(options) {
-    this.orderId = options.orderId
-    this.productId = options.productId
-    this.getProductInfo()
-  },
-  methods: {
-    async getProductInfo() {
-      try {
-        const res = await this.$api.product.detail(this.productId)
-        this.product = res.data
-      } catch (e) {
-        this.$u.toast('获取商品信息失败')
-      }
-    },
-    async afterRead(event) {
-      const { file } = event
-      const uploadPromises = (Array.isArray(file) ? file : [file]).map(item => {
-        return this.uploadFilePromise(item)
-      })
-
-      try {
-        const urls = await Promise.all(uploadPromises)
-        this.form.images = [...this.form.images, ...urls]
-      } catch (e) {
-        this.$u.toast('上传图片失败')
-      }
-    },
-    uploadFilePromise(file) {
-      return new Promise((resolve, reject) => {
-        uni.uploadFile({
-          url: this.$api.common.uploadUrl,
-          filePath: file.url,
-          name: 'file',
-          success: (res) => {
-            const data = JSON.parse(res.data)
-            resolve(data.url)
-          },
-          fail: reject
-        })
-      })
-    },
-    deletePic(event) {
-      const index = event.index
-      this.form.images.splice(index, 1)
-    },
-    async submit() {
-      try {
-        await this.$refs.form.validate()
-        await this.$api.order.afterSale({
-          orderId: this.orderId,
-          productId: this.productId,
-          ...this.form
-        })
-        this.$u.toast('提交成功')
-        setTimeout(() => {
-          uni.navigateBack()
-        }, 1500)
-      } catch (e) {
-        if (e.errors) return
-        this.$u.toast('提交失败')
-      }
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.after-sale {
-  min-height: 100vh;
-  background: #f5f5f5;
-  padding-bottom: 120rpx;
-  
-  .product-info {
-    background: #fff;
-    padding: 30rpx;
-    display: flex;
-    margin-bottom: 20rpx;
-    
-    .product-image {
-      width: 160rpx;
-      height: 160rpx;
-      border-radius: 8rpx;
-      margin-right: 20rpx;
-    }
-    
-    .product-detail {
-      flex: 1;
-      
-      .product-name {
-        font-size: 28rpx;
-        color: #333;
-        margin-bottom: 10rpx;
-      }
-      
-      .product-spec {
-        font-size: 24rpx;
-        color: #999;
-        margin-bottom: 20rpx;
-      }
-      
-      .product-price {
-        font-size: 32rpx;
-        color: #D93025;
-        font-weight: bold;
-      }
-    }
-  }
-  
-  .form-section {
-    background: #fff;
-    padding: 30rpx;
-    
-    :deep(.u-form-item) {
-      padding: 20rpx 0;
-    }
-  }
-  
-  .submit-btn {
-    position: fixed;
-    left: 0;
-    right: 0;
-    bottom: 0;
-    padding: 20rpx 40rpx;
-    background: #fff;
-  }
-}
-</style> 

+ 0 - 877
packageOrder/pages/detail/index.vue

@@ -1,877 +0,0 @@
-<template>
-	<view class="order-detail">
-		<!-- 订单状态 -->
-		<view class="status-section" :class="getStatusClass()">
-			<view class="status-bg-pattern"></view>
-			<view class="logistics-btn" v-if="[3,4].includes(order.status) && order.expressCode">
-				<button class="custom-logistics-btn" @click="viewLogistics">
-					<image src="/static/images/order/wuliu.png" mode="aspectFit" class="logistics-icon"></image>
-					<text>查看物流</text>
-				</button>
-			</view>
-			<view class="status-content">
-				<view class="status-icon">
-					<image :src="getStatusImage()" mode="aspectFit" class="status-img"></image>
-				</view>
-				<view class="status-info">
-					<view class="status-text">{{getStatusText()}}</view>
-					<view class="status-desc">{{getStatusDesc()}}</view>
-				</view>
-			</view>
-		</view>
-
-		<!-- 收货地址和物流信息 -->
-		<view class="address-section">
-			<view class="section-header">
-				<view class="header-icon">
-					<uni-icons type="map-pin-ellipse" size="25" color="#a4d5d9"></uni-icons>
-				</view>
-				<text class="header-text">收货信息</text>
-			</view>
-			<view class="address-content">
-				<view class="user-info">
-					<text class="name">{{order.name}}</text>
-					<text class="phone">{{order.mobile}}</text>
-				</view>
-				<view class="address">
-					{{order.province}}{{order.city}}{{order.area}}{{order.address}}
-				</view>
-				<!-- 物流信息 -->
-				<view class="logistics-info" v-if="order.expressCompany && order.expressCode">
-					<view class="divider"></view>
-					<view class="logistics-item">
-						<text class="label">快递公司</text>
-						<text class="value">{{order.expressCompany}}</text>
-					</view>
-					<view class="logistics-item">
-						<text class="label">快递单号</text>
-						<view class="value-copy">
-							<text class="value">{{order.expressCode}}</text>
-							<button class="copy-btn" @click="copyExpressCode">复制</button>
-						</view>
-					</view>
-					<view class="logistics-item" v-if="order.shipTime">
-						<text class="label">发货时间</text>
-						<text class="value">{{order.shipTime}}</text>
-					</view>
-				</view>
-			</view>
-		</view>
-
-		<!-- 商品信息 -->
-		<view class="product-section">
-			<view class="section-header">
-				<view class="header-icon">
-					<uni-icons type="gift-filled" size="25" color="#a4d5d9"></uni-icons>
-				</view>
-				<text class="header-text">商品信息</text>
-			</view>
-			<view class="product-list">
-				<view v-for="(item, index) in orderListVos" :key="index" class="product-item">
-					<view class="product-image-wrapper" @tap="goDetail(item)">
-						<image :src="item.productImage" mode="aspectFill" class="product-image"></image>
-					</view>
-					<view class="product-info" @tap="goDetail(item)">
-						<view class="product-name">{{item.productName}}</view>
-						<view class="product-spec" v-if="item.skuName">{{item.skuName}}</view>
-						<view class="product-price-count">
-							<view class="price-info">
-								<text class="price">¥{{item.unitPrice}}</text>
-								<text class="subtotal">小计:¥{{item.subtotalAmount}}</text>
-							</view>
-							<text class="count">x{{item.quantity}}</text>
-						</view>
-					</view>
-				</view>
-			</view>
-		</view>
-
-
-		<!-- 金额信息 -->
-		<view class="amount-section">
-			<view class="section-header">
-				<view class="header-icon">
-					<u-icon name="file-text-fill" size="25" color="#a4d5d9"></u-icon>
-				</view>
-				<text class="header-text">金额信息</text>
-			</view>
-			<view class="amount-content">
-				<view class="amount-item">
-					<text>商品总额</text>
-					<text class="price">¥{{getTotalProductPrice()}}</text>
-				</view>
-				<view class="amount-item total">
-					<text>实付款</text>
-					<text class="price">¥{{order.paymentPrice}}</text>
-				</view>
-			</view>
-		</view>
-		<!-- 订单信息 -->
-		<view class="order-info">
-			<view class="section-header">
-				<view class="header-icon">
-					<uni-icons type="calendar-filled" size="25" color="#a4d5d9"></uni-icons>
-				</view>
-				<text class="header-text">订单信息</text>
-			</view>
-			<view class="info-content">
-				<view class="info-item">
-					<text class="label">订单编号:</text>
-					<text class="value">{{order.orderCode}}</text>
-				</view>
-				<view class="info-item">
-					<text class="label">创建时间:</text>
-					<text class="value">{{order.createTime}}</text>
-				</view>
-				<view class="info-item">
-					<text class="label">支付方式:</text>
-					<text class="value">微信支付</text>
-				</view>
-				<view class="info-item" v-if="order.payTime">
-					<text class="label">支付时间:</text>
-					<text class="value">{{order.payTime}}</text>
-				</view>
-				<view class="info-item" v-if="order.shipTime">
-					<text class="label">发货时间:</text>
-					<text class="value">{{order.shipTime}}</text>
-				</view>
-				<view class="info-item" v-if="order.confirmTime">
-					<text class="label">确认收货:</text>
-					<text class="value">{{order.confirmTime}}</text>
-				</view>
-				<view class="info-item" v-if="order.remark">
-					<text class="label">订单备注:</text>
-					<text class="value">{{order.remark}}</text>
-				</view>
-			</view>
-		</view>
-
-
-
-		<!-- 底部按钮 -->
-		<view class="bottom-btns">
-			<template v-if="order.status === 1">
-				<u-button type="primary" size="large" @click="cancelOrder" color="#999"
-					class="action-btn">取消订单</u-button>
-				<u-button type="primary" size="large" @click="payOrder" color="#D93025"
-					class="action-btn primary">立即支付</u-button>
-			</template>
-
-			<template v-if="order.status === 2">
-				<!-- 待发货状态不显示任何按钮 -->
-			</template>
-
-			<template v-if="order.status === 3">
-				<u-button type="primary" size="large" @click="confirmReceive" color="#D93025"
-					class="action-btn primary">确认收货</u-button>
-			</template>
-
-			<template v-if="order.status === 4">
-				<u-button type="primary" size="large" @click="goToScore" color="#FF9500" class="action-btn"
-					v-if="!order.isEvaluate">评价</u-button>
-				<u-button type="primary" size="large" @click="buyAgain" color="#007AFF"
-					class="action-btn">再次购买</u-button>
-
-			</template>
-		</view>
-	</view>
-</template>
-
-<script>
-	import {
-		orderDetail,
-		confirmReceipt,
-		cancelOrder
-	} from '@/config/api.js';
-	export default {
-		data() {
-			return {
-				orderId: '',
-				order: {
-					id: '',
-					createTime: '',
-					status: 1,
-					orderCode: '',
-					payCode: '',
-					remark: '',
-					paymentPrice: 0,
-					payType: 1,
-					payTime: '',
-					addressId: '',
-					name: '',
-					mobile: '',
-					province: '',
-					city: '',
-					area: '',
-					address: '',
-					expressCompany: '',
-					expressCode: '',
-					shipTime: '',
-					confirmTime: '',
-					isAfter: 0,
-					isEvaluate: 0
-				},
-				orderListVos: []
-			}
-		},
-		onLoad(options) {
-			if (options.id) {
-				this.orderId = options.id
-				this.getOrderDetail()
-			}
-		},
-		methods: {
-			async getOrderDetail() {
-				try {
-					const res = await orderDetail({
-						id: this.orderId
-					})
-					if (res.success && res.data) {
-						this.order = res.data.order
-						this.orderListVos = res.data.orderListVos || []
-					}
-				} catch (e) {
-					this.$u.toast('获取订单详情失败')
-				}
-			},
-
-			// 获取状态文本
-			getStatusText() {
-				const statusMap = {
-					1: '待付款',
-					2: '待发货',
-					3: '待收货',
-					4: '已完成'
-				}
-				return statusMap[this.order.status] || '未知状态'
-			},
-
-			// 获取状态描述
-			getStatusDesc() {
-				const descMap = {
-					1: '请尽快完成支付,超时订单将自动取消',
-					2: '商家正在为您准备商品,请耐心等待',
-					3: '商品正在配送中,请注意查收',
-					4: '订单已完成,感谢您的购买'
-				}
-				return descMap[this.order.status] || ''
-			},
-
-			// 获取状态图片
-			getStatusImage() {
-				const imageMap = {
-					1: '/static/images/order/daifukuan.png',
-					2: '/static/images/order/daifahuo.png',
-					3: '/static/images/order/daishouhuo.png',
-					4: '/static/images/order/yiwancheng.png'
-				}
-				return imageMap[this.order.status] || imageMap[1]
-			},
-
-			// 获取状态样式类
-			getStatusClass() {
-				const classMap = {
-					1: 'status-waiting',
-					2: 'status-processing',
-					3: 'status-shipping',
-					4: 'status-completed'
-				}
-				return classMap[this.order.status] || 'status-waiting'
-			},
-
-
-
-			// 计算商品总价
-			getTotalProductPrice() {
-				try {
-					const total = this.orderListVos.reduce((sum, item) => {
-						const amount = parseFloat(item.subtotalAmount) || 0;
-						return sum + amount;
-					}, 0);
-					return total.toFixed(2);
-				} catch (e) {
-					return '0.00';
-				}
-			},
-
-			async cancelOrder() {
-				try {
-					// 确认对话框
-					const result = await new Promise((resolve) => {
-						uni.showModal({
-							title: '提示',
-							content: '确定要取消这个订单吗?',
-							confirmText: '确定',
-							cancelText: '取消',
-							success: (res) => {
-								resolve(res.confirm);
-							}
-						});
-					});
-
-					if (!result) {
-						return;
-					}
-
-					// 调用取消订单接口
-					const response = await cancelOrder({
-						id: this.orderId
-					});
-
-					if (response.code === 200) {
-						this.$u.toast('取消订单成功');
-						// 重新获取订单详情
-						this.getOrderDetail();
-					} else {
-						this.$u.toast(response.msg || '取消订单失败');
-					}
-				} catch (e) {
-					console.error('取消订单失败:', e);
-					this.$u.toast('取消订单失败');
-				}
-			},
-			payOrder() {
-				uni.navigateTo({
-					url: '/packageOrder/pages/payment/index?id=' + this.orderId
-				})
-			},
-			viewLogistics() {
-				uni.navigateTo({
-					url: '/packageOrder/pages/logistics/index?id=' + this.orderId
-				})
-			},
-			async confirmReceive() {
-				try {
-					let res = await confirmReceipt({
-						id: this.orderId
-					})
-					if (res.code == 200) {
-
-						uni.showToast({
-							title: "确认收货成功",
-							icon: 'success',
-							duration: 1000
-						})
-						setTimeout(() => {
-							this.getOrderDetail()
-						}, 500)
-					}
-
-				} catch (e) {
-					this.$u.toast('确认收货失败')
-				}
-			},
-			goToScore() {
-				uni.navigateTo({
-					url: '/packageOrder/pages/score/index?orderId=' + this.order.id
-				})
-			},
-			buyAgain() {
-				const product = this.orderListVos[0]
-				uni.navigateTo({
-					url: '/packageShop/pages/detail/index?id=' + product.productId
-				})
-			},
-			goDetail(item) {
-				uni.navigateTo({
-					url: '/packageShop/pages/detail/index?id=' + item.productId
-				})
-			},
-			async deleteOrder() {
-				try {
-					await this.$api.order.delete(this.orderId)
-					this.$u.toast('删除订单成功')
-					uni.navigateBack()
-				} catch (e) {
-					this.$u.toast('删除订单失败')
-				}
-			},
-
-			// 复制快递单号
-			copyExpressCode() {
-				uni.setClipboardData({
-					data: this.order.expressCode,
-					success: () => {
-						uni.showToast({
-							title: '复制成功',
-							icon: 'success',
-							duration: 1500
-						})
-					}
-				})
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	.order-detail {
-		min-height: 100vh;
-		background: linear-gradient(180deg, #f8f9fa 0%, #ffffff 100%);
-		padding-bottom: 160rpx;
-
-		.status-section {
-			padding: 60rpx 30rpx;
-			position: relative;
-			overflow: hidden;
-
-			.logistics-btn {
-				position: absolute;
-				top: 20rpx;
-				right: 20rpx;
-				z-index: 2;
-
-				.custom-logistics-btn {
-					background: rgba(255, 255, 255, 0.9);
-					border: none;
-					padding: 16rpx 32rpx;
-					border-radius: 40rpx;
-					font-size: 28rpx;
-					display: flex;
-					align-items: center;
-					color: #333;
-					font-weight: 500;
-					box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.15);
-					transition: all 0.3s ease;
-
-					.logistics-icon {
-						width: 36rpx;
-						height: 36rpx;
-						margin-right: 8rpx;
-					}
-
-					&:active {
-						transform: scale(0.95);
-						background: rgba(255, 255, 255, 1);
-					}
-				}
-			}
-
-			&::before {
-				content: '';
-				position: absolute;
-				top: 0;
-				left: 0;
-				right: 0;
-				bottom: 0;
-				background: linear-gradient(135deg, rgba(255, 255, 255, 0.1) 0%, rgba(255, 255, 255, 0.05) 100%);
-			}
-
-			&.status-waiting {
-				background: linear-gradient(135deg, #FF6B6B 0%, #D93025 100%);
-			}
-
-			&.status-processing {
-				background: linear-gradient(135deg, #4ECDC4 0%, #44A08D 100%);
-			}
-
-			&.status-shipping {
-				background: linear-gradient(135deg, #45B7D1 0%, #96C93D 100%);
-			}
-
-			&.status-completed {
-				background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
-			}
-
-			.status-bg-pattern {
-				position: absolute;
-				top: 0;
-				left: 0;
-				width: 100%;
-				height: 100%;
-				background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMDAwIiBoZWlnaHQ9IjEwMDAiPgo8cmVjdCB3aWR0aD0iMTAwMCIgaGVpZ2h0PSIxMDAwIiBmaWxsPSIjZmZmIi8+Cjwvc3ZnPgo=');
-				background-size: 200% 200%;
-				opacity: 0.1;
-				z-index: -1;
-			}
-
-			.status-content {
-				position: relative;
-				z-index: 1;
-				display: flex;
-				align-items: center;
-				color: #fff;
-
-				.status-icon {
-					margin-right: 30rpx;
-					width: 120rpx;
-					height: 120rpx;
-					display: flex;
-					align-items: center;
-					justify-content: center;
-
-					.status-img {
-						width: 100%;
-						height: 100%;
-					}
-				}
-
-				.status-info {
-					flex: 1;
-
-					.status-text {
-						font-size: 40rpx;
-						font-weight: bold;
-						margin-bottom: 10rpx;
-					}
-
-					.status-desc {
-						font-size: 26rpx;
-						opacity: 0.9;
-						line-height: 1.4;
-					}
-				}
-			}
-		}
-
-		.section-header {
-			display: flex;
-			align-items: center;
-			margin-bottom: 20rpx;
-
-			.header-icon {
-				margin-right: 15rpx;
-			}
-
-			.header-text {
-				font-size: 32rpx;
-				font-weight: bold;
-				color: #333;
-				margin-left: 15rpx;
-			}
-		}
-
-		.address-section {
-			background: #fff;
-			padding: 30rpx;
-			margin: 20rpx;
-			border-radius: 20rpx;
-			box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.08);
-			border: 1rpx solid rgba(217, 48, 37, 0.1);
-
-			.address-content {
-				.user-info {
-					margin-bottom: 15rpx;
-
-					.name {
-						font-size: 32rpx;
-						font-weight: bold;
-						color: #333;
-						margin-right: 20rpx;
-					}
-
-					.phone {
-						font-size: 28rpx;
-						color: #666;
-					}
-				}
-
-				.address {
-					font-size: 28rpx;
-					color: #333;
-					line-height: 1.5;
-					margin-bottom: 20rpx;
-				}
-
-				.logistics-info {
-					.divider {
-						height: 1rpx;
-						background: #f0f0f0;
-						margin: 20rpx 0;
-					}
-
-					.logistics-item {
-						display: flex;
-						align-items: center;
-						margin-bottom: 16rpx;
-
-						&:last-child {
-							margin-bottom: 0;
-						}
-
-						.label {
-							width: 140rpx;
-							font-size: 26rpx;
-							color: #666;
-						}
-
-						.value {
-							flex: 1;
-							font-size: 26rpx;
-							color: #333;
-						}
-
-						.value-copy {
-							flex: 1;
-							display: flex;
-							align-items: center;
-							justify-content: space-between;
-
-							.value {
-								flex: 1;
-								margin-right: 20rpx;
-							}
-
-							.copy-btn {
-								font-size: 24rpx;
-								color: #007AFF;
-								background: rgba(0, 122, 255, 0.1);
-								padding: 6rpx 20rpx;
-								border-radius: 30rpx;
-								border: none;
-								line-height: 1.5;
-
-								&:active {
-									background: rgba(0, 122, 255, 0.2);
-								}
-							}
-						}
-					}
-				}
-			}
-		}
-
-		.product-section {
-			background: #fff;
-			padding: 30rpx;
-			margin: 0 20rpx 20rpx;
-			border-radius: 20rpx;
-			box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.08);
-			border: 1rpx solid rgba(0, 0, 0, 0.05);
-
-			.product-list {
-				.product-item {
-					display: flex;
-					padding: 25rpx 0;
-					border-bottom: 1rpx solid #f0f0f0;
-
-					&:last-child {
-						border-bottom: none;
-					}
-
-					.product-image-wrapper {
-						width: 180rpx;
-						height: 180rpx;
-						border-radius: 16rpx;
-						overflow: hidden;
-						margin-right: 25rpx;
-						box-shadow: 0 4rpx 15rpx rgba(0, 0, 0, 0.15);
-						position: relative;
-
-						&::after {
-							content: '';
-							position: absolute;
-							top: 0;
-							left: 0;
-							right: 0;
-							bottom: 0;
-							background: linear-gradient(45deg, transparent 30%, rgba(255, 255, 255, 0.1) 50%, transparent 70%);
-							pointer-events: none;
-						}
-					}
-
-					.product-image {
-						width: 100%;
-						height: 100%;
-					}
-
-					.product-info {
-						flex: 1;
-						display: flex;
-						flex-direction: column;
-						justify-content: space-between;
-
-						.product-name {
-							font-size: 30rpx;
-							color: #333;
-							font-weight: 500;
-							line-height: 1.4;
-							margin-bottom: 10rpx;
-						}
-
-						.product-spec {
-							font-size: 24rpx;
-							color: #666;
-							background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);
-							padding: 6rpx 12rpx;
-							border-radius: 12rpx;
-							border: 1rpx solid rgba(0, 0, 0, 0.05);
-						}
-
-						.product-price-count {
-							display: flex;
-							justify-content: space-between;
-							align-items: flex-end;
-
-							.price-info {
-								display: flex;
-								flex-direction: column;
-								align-items: flex-start;
-								flex: 1;
-							}
-
-							.price {
-								font-size: 34rpx;
-								color: #D93025;
-								font-weight: bold;
-								margin-bottom: 8rpx;
-							}
-
-							.subtotal {
-								font-size: 24rpx;
-								color: #666;
-								background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);
-								padding: 4rpx 8rpx;
-								border-radius: 8rpx;
-							}
-
-							.count {
-								font-size: 26rpx;
-								color: #666;
-								background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);
-								padding: 8rpx 16rpx;
-								border-radius: 16rpx;
-								white-space: nowrap;
-								border: 1rpx solid rgba(0, 0, 0, 0.05);
-								font-weight: 500;
-							}
-						}
-					}
-				}
-			}
-		}
-
-		.logistics-section {
-			background: #fff;
-			padding: 30rpx;
-			margin: 0 20rpx 20rpx;
-			border-radius: 20rpx;
-			box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.08);
-			border: 1rpx solid rgba(0, 122, 255, 0.1);
-
-			.logistics-content {
-				.logistics-item {
-					display: flex;
-					margin-bottom: 15rpx;
-
-					&:last-child {
-						margin-bottom: 0;
-					}
-
-					.label {
-						width: 160rpx;
-						font-size: 28rpx;
-						color: #666;
-					}
-
-					.value {
-						flex: 1;
-						font-size: 28rpx;
-						color: #333;
-					}
-				}
-			}
-		}
-
-		.order-info {
-			background: #fff;
-			padding: 30rpx;
-			margin: 0 20rpx;
-			border-radius: 20rpx;
-			box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.08);
-			border: 1rpx solid rgba(0, 0, 0, 0.05);
-
-			.info-content {
-				.info-item {
-					display: flex;
-					margin-bottom: 20rpx;
-
-					&:last-child {
-						margin-bottom: 0;
-					}
-
-					.label {
-						width: 160rpx;
-						font-size: 28rpx;
-						color: #666;
-					}
-
-					.value {
-						flex: 1;
-						font-size: 28rpx;
-						color: #646464;
-					}
-				}
-			}
-		}
-
-		.amount-section {
-			background: #fff;
-			padding: 30rpx;
-			margin: 0 20rpx 20rpx;
-			border-radius: 20rpx;
-			box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.08);
-			border: 1rpx solid rgba(217, 48, 37, 0.1);
-
-			.amount-content {
-				.amount-item {
-					display: flex;
-					justify-content: space-between;
-					margin-bottom: 20rpx;
-					font-size: 28rpx;
-					color: #666;
-
-					&.total {
-						margin-top: 30rpx;
-						padding-top: 30rpx;
-						border-top: 1rpx solid #f0f0f0;
-						color: #333;
-						font-weight: bold;
-						font-size: 32rpx;
-					}
-
-					.price {
-						color: #D93025;
-						font-weight: bold;
-					}
-				}
-			}
-		}
-
-		.bottom-btns {
-			position: fixed;
-			left: 0;
-			right: 0;
-			bottom: 0;
-			background: #fff;
-			padding: 30rpx;
-			display: flex;
-			justify-content: space-between;
-			gap: 20rpx;
-			box-shadow: 0 -8rpx 30rpx rgba(0, 0, 0, 0.12);
-			border-top: 1rpx solid #f0f0f0;
-
-			.action-btn {
-				flex: 1;
-				border-radius: 50rpx;
-				font-weight: 600;
-				font-size: 32rpx;
-				height: 88rpx;
-				line-height: 88rpx;
-				box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.15);
-				transition: all 0.3s ease;
-
-				&:active {
-					transform: translateY(2rpx);
-					box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.2);
-				}
-			}
-
-			.primary {
-				background: linear-gradient(135deg, #D93025 0%, #FF6B6B 100%);
-				color: #fff;
-				box-shadow: 0 4rpx 15rpx rgba(217, 48, 37, 0.3);
-			}
-		}
-	}
-</style>

+ 0 - 474
packageOrder/pages/list/index.vue

@@ -1,474 +0,0 @@
-<template>
-	<view class="bg">
-		<u-sticky>
-			<view class="pad-t-10 ">
-				<view class="flex-items bg-white pad-16" @tap="goSearch">
-					<uni-icons type="search" color="#a8a8a8" size="28"></uni-icons>
-
-					<view v-if="params.orderCode" class="font28">
-						{{params.orderCode}}
-					</view>
-					<view class="font-gray font28" v-else>
-						请输入订单号或商品名称
-					</view>
-				</view>
-			</view>
-			<view class="bg-white">
-				<u-tabs :current="current" lineWidth="30" :list="tabList" @click="tabClick"></u-tabs>
-			</view>
-		</u-sticky>
-		<view v-if="orderList.length>0">
-			<view v-for="(item,index) in orderList" :key="index">
-				<view class="info-region">
-					<view @tap="goDetail(item)">
-						<view class="flex-items flex-sp-between mar-b-20 mar-lr-12">
-							<view>
-								订单号:{{item.orderCode}}
-							</view>
-							<view v-if="item.isAfter==0||item.isAfter==3">
-								<text class="fukuan" v-if="item.status==1">
-									待付款
-								</text>
-								<text class="daifahuo" v-if="item.status==2">
-									待发货
-								</text>
-								<text class="shouhuo" v-if="item.status==3">
-									待收货
-								</text>
-								<text class="pingjia mar-r-10" v-if="item.status==4&&item.isEvaluate==0">
-									待评价
-								</text>
-								<text class="wancheng" v-if="item.status==4">
-									已完成
-								</text>
-							</view>
-
-
-						</view>
-						<view class="flex">
-							<view>
-								<image class=" mar-l-20 img" :src="item.images" mode="aspectFit"></image>
-							</view>
-							<view class="mar-l-20 mar-r-20">
-								<view class="font32 pad-b-10 ">
-									{{item.productName}}
-								</view>
-								<view class="pad-t-10 font-gray font26"
-									v-if="item.productCount && item.productCount > 1">
-									共{{item.productCount}}件商品
-								</view>
-								<view class="pad-t-20 font-gray">
-									规格: {{item.skuName}}
-								</view>
-							</view>
-						</view>
-						<text class="flex-end font-red font28 font-bold mar-r-10">
-							实付款 ¥{{item.paymentPrice}}
-						</text>
-					</view>
-					<view>
-						<view v-if="item.isAfter===0||item.isAfter===0">
-							<!-- 待付款状态 -->
-							<view v-if="item.status === 1" class="flex-items flex-end">
-								<view class=" mar-t-20 mar-r-10">
-									<view class="buyBtn" @click="payOrder(item)">
-										去付款
-									</view>
-								</view>
-								<view class=" mar-t-20 mar-r-10">
-									<view class="cancelBtn" @click="cancelOrder(item)">
-										取消订单
-									</view>
-								</view>
-							</view>
-							<!-- 待发货状态 -->
-							<view v-if="item.status === 2" class="flex-items flex-end">
-
-								<view class=" mar-t-20 mar-r-10" v-if="item.status === 2">
-									<view class="buyBtn" @click="onceOrder(item)">
-										再来一单
-									</view>
-								</view>
-							</view>
-
-							<!-- 待收货状态 -->
-							<view v-if="item.status === 3" class="flex-items flex-end">
-								<view class=" mar-t-20 mar-r-10">
-									<view class="cancelBtn" @click="logistics(item)">
-										查看物流
-									</view>
-								</view>
-
-								<view class=" mar-t-20 mar-r-10">
-									<view class="buyBtn" @click="confirmReceiptDialog(item)">
-										确认收货
-									</view>
-								</view>
-							</view>
-
-							<!-- 已完成状态 -->
-							<view v-if="item.status === 4" class="flex-items flex-end">
-								<view class=" mar-t-20 mar-r-10">
-									<view class="cancelBtn" @click="goScore(item)" v-if="item.isEvaluate==0">
-										评价
-									</view>
-								</view>
-
-								<view class=" mar-t-20 mar-r-10">
-									<view class="buyBtn" @click="onceOrder(item)">
-										再来一单
-									</view>
-								</view>
-							</view>
-
-						</view>
-
-						<!-- 售后中状态 -->
-						<view class=" flex-items flex-end mar-t-20 mar-r-10" v-if="item.isAfter === 1">
-							<view class="cancelBtn" @click="checkAfterSaleStatus(item)">
-								售后进度
-							</view>
-						</view>
-						<!-- 售后完成状态 -->
-						<view class=" flex-items flex-end mar-t-20 mar-r-10" v-if="item.isAfter === 2">
-							<view class="cancelBtn" @click="checkAfterSaleStatus(item)">
-								售后详情
-							</view>
-						</view>
-					</view>
-				</view>
-			</view>
-		</view>
-		<view v-else>
-			<view class="flex-items-plus">
-				<image src="@/static/images/empty.png" class="empty "></image>
-			</view>
-			<view class="font28 font-gray flex-items-plus">
-				数据为空
-			</view>
-		</view>
-		<u-toast ref="uToast"></u-toast>
-		<uni-popup ref="dialog" type="dialog">
-			<uni-popup-dialog type="warn" cancelText="取消" confirmText="确认" title="提示" content="确认收货?"
-				@confirm="confirmReceipt()"></uni-popup-dialog>
-		</uni-popup>
-	</view>
-</template>
-
-<script>
-	import CustomToast from '@/uni_modules/custom-components/components/custom-toast/custom-toast.vue';
-	import {
-		getOrderList,
-		confirmReceipt,
-		cancelOrder
-	} from '@/config/api.js';
-
-	export default {
-		components: {
-			CustomToast
-		},
-		data() {
-			return {
-				current: 0,
-				searchKey: "",
-				tabList: [{
-						name: '全部'
-					},
-					{
-						name: '待付款'
-					},
-					{
-						name: '待发货'
-					},
-					{
-						name: '待收货'
-					},
-					{
-						name: '已完成'
-					},
-
-					{
-						name: '待评价'
-					}
-				],
-				orderList: [],
-				isFirstLoad: true,
-				params: {
-					current: 1,
-					size: 10,
-					status: "",
-					isAfter: "",
-					isEvaluate: "",
-					type: "",
-					orderCode: ""
-				},
-				form: {},
-			};
-		},
-		onLoad(op) {
-			if (op.serachKey) {
-				this.params.orderCode = op.serachKey;
-			}
-			console.log(op);
-			if (op.status && op.status != 0) {
-				this.params.status = op.status;
-				this.current = op.status;
-			}
-			if (op.isAfter) {
-				this.params.isAfter = op.isAfter;
-				this.current = 5;
-			}
-			if (op.isEvaluate) {
-				this.params.isEvaluate = op.isEvaluate;
-				this.current = 6;
-			}
-			this.getList();
-			setTimeout(() => {
-				this.isFirstLoad = false;
-			}, 1000)
-		},
-		onPullDownRefresh() {
-			this.reset()
-			uni.stopPullDownRefresh();
-		},
-		onShow() {
-			console.log(this.isFirstLoad, "11")
-			if (!this.isFirstLoad) {
-
-				this.getList();
-			}
-		},
-		methods: {
-
-			goScore(item) {
-				this.isFirstLoad = false
-				this.$route('/packageOrder/pages/score/index?orderId=' + item.id)
-			},
-			reset() {
-				this.orderList = [];
-				this.params.current = 1;
-				this.getList();
-			},
-			after(item) {
-				this.$route('/packageOrder/pages/after-sale/index?id=' + item.id);
-			},
-			logistics(item) {
-				this.$route('/packageOrder/pages/logistics/index?expressCode=' + item.expressCode);
-			},
-			onceOrder(item) {
-				this.$route('/packageShop/pages/detail/index?skuId=' + item.skuId + '&id=' + item.productId);
-			},
-			goSearch() {
-				this.$route('/packageShop/pages/search/index?type=2');
-			},
-			goDetail(item) {
-				this.$route('/packageOrder/pages/detail/index?id=' + item.id);
-			},
-			tabClick(item) {
-				console.log(item);
-				if (item.index == 5) {
-					this.params.isEvaluate = 0;
-					this.params.isAfter = ""
-					this.params.status = ""
-				} else {
-					this.params.status = item.index;
-					this.params.isAfter = ""
-					this.params.isEvaluate = ""
-				}
-				this.getList();
-			},
-			getList() {
-				getOrderList(this.params).then((res) => {
-					this.orderList = res.data.records;
-				});
-			},
-			payOrder(item) {
-				this.$route('/packageOrder/pages/payment/index?orderId=' + item.id);
-			},
-			async cancelOrder(item) {
-				try {
-					// 确认对话框
-					const result = await new Promise((resolve) => {
-						uni.showModal({
-							title: '提示',
-							content: '确定要取消订单:' + item.orderCode + ' 吗?',
-							confirmText: '确定',
-							cancelText: '取消',
-							success: (res) => {
-								resolve(res.confirm);
-							}
-						});
-					});
-
-					if (!result) {
-						return;
-					}
-
-					// 调用取消订单接口
-					const response = await cancelOrder({
-						id: item.id
-					});
-
-					if (response.code === 200) {
-						this.showToast('取消订单成功');
-						// 重新获取订单列表
-						this.reset();
-					} else {
-						this.showToast(response.msg || '取消订单失败');
-					}
-				} catch (e) {
-					console.error('取消订单失败:', e);
-					this.showToast('取消订单失败');
-				}
-			},
-			confirmReceiptDialog(item) {
-				this.$refs.dialog.open()
-				this.form = item
-			},
-			showToast(text) {
-				this.$refs.uToast.show({
-					type: 'success',
-					message: text
-				})
-			},
-			confirmReceipt() {
-				confirmReceipt(this.form).then((res) => {
-					if (res.code == 200) {
-						this.$refs.dialog.close()
-						this.showToast('操作成功')
-						this.reset()
-					}
-				})
-			},
-			checkAfterSaleStatus(item) {
-				this.$route('/packageOrder/pages/after-sale/index?orderId=' + item.id);
-			}
-		}
-	};
-</script>
-
-<style lang="scss">
-	.bg {
-		min-height: 100vh;
-		padding-bottom: 20rpx;
-	}
-
-	.info-region {
-		box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
-		border-radius: 15rpx;
-		width: 720rpx;
-		height: auto;
-		padding: 15rpx;
-		background-color: white;
-		margin-top: 10rpx;
-		margin-bottom: 20rpx;
-		margin-left: 15rpx;
-	}
-
-	.img {
-		border-radius: 20rpx;
-		width: 200rpx;
-		height: 200rpx;
-	}
-
-	.daifahuo {
-		color: #ffffff;
-		background-color: #e2c696;
-		padding: 4rpx 10rpx 4rpx 10rpx;
-		border-radius: 20rpx;
-	}
-
-	.fukuan {
-		color: #ffffff;
-		background-color: #e29c6d;
-		padding: 4rpx 10rpx 4rpx 10rpx;
-		border-radius: 20rpx;
-	}
-
-	.shouhuo {
-		color: #ffffff;
-		background-color: #e2d972;
-		padding: 4rpx 10rpx 4rpx 10rpx;
-		border-radius: 20rpx;
-	}
-
-	.wancheng {
-		color: #ffffff;
-		background-color: #83e25a;
-		padding: 4rpx 10rpx 4rpx 10rpx;
-		border-radius: 20rpx;
-	}
-
-	.pingjia {
-		color: #ffffff;
-		background-color: #e0e2d9;
-		padding: 4rpx 10rpx 4rpx 10rpx;
-		border-radius: 20rpx;
-	}
-
-	.shouhou {
-		color: #ffffff;
-		background-color: #e23e3e;
-		padding: 4rpx 10rpx 4rpx 10rpx;
-		border-radius: 20rpx;
-	}
-
-	.buyBtn {
-		font-size: 30rpx;
-		width: 160rpx;
-		height: 50rpx;
-		text-align: center;
-		line-height: 50rpx;
-		border-radius: 36rpx;
-		color: #fff;
-		background: #E2A28A;
-	}
-
-	.cancelBtn {
-		font-size: 30rpx;
-		width: 160rpx;
-		height: 50rpx;
-		text-align: center;
-		line-height: 50rpx;
-		border-radius: 36rpx;
-		color: #666666;
-		background: #f5f5f5;
-	}
-
-	.empty {
-		width: 400rpx;
-		height: 400rpx;
-		margin-top: 200rpx;
-	}
-
-	.nav-back {
-		position: fixed;
-		left: 30rpx;
-		top: calc(var(--status-bar-height) + 20rpx);
-		z-index: 100;
-
-		.back-btn {
-			width: 80rpx;
-			height: 80rpx;
-			background: rgba(255, 255, 255, 0.8);
-			border: 1rpx solid rgba(0, 0, 0, 0.1);
-			border-radius: 50%;
-			display: flex;
-			align-items: center;
-			justify-content: center;
-			transition: all 0.3s ease;
-			box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.1);
-
-			&:active {
-				transform: scale(0.95);
-				box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.15);
-			}
-		}
-
-		.back-icon {
-			font-family: "iconfont";
-			font-size: 36rpx;
-			color: #333;
-		}
-	}
-</style>

+ 0 - 692
packageOrder/pages/list/record.vue

@@ -1,692 +0,0 @@
-<template>
-	<view class="container">
-		<!-- 用户信息 -->
-		<view class="user-info">
-			<image class="user-avatar" :src="statistics.avatar || '/static/images/avatar.png'" mode="aspectFill"></image>
-			<view class="user-name">{{ statistics.nickName || '用户' }}的订单记录</view>
-		</view>
-
-		<!-- 时间筛选 -->
-		<view class="time-filter">
-			<view class="filter-tabs">
-				<view class="tab-item" :class="{ active: currentTimeFilter === index }"
-					v-for="(item, index) in timeFilterOptions" :key="index" @tap="selectTimeFilter(index)">
-					{{ item.name }}
-				</view>
-			</view>
-
-			<!-- 自定义时间范围 -->
-			<view v-if="currentTimeFilter === 2" class="custom-time">
-				<view class="time-row">
-					<text class="label">开始时间:</text>
-					<picker mode="date" :value="customStartTime" @change="onStartTimeChange">
-						<view class="time-picker">{{ customStartTime || '请选择' }}</view>
-					</picker>
-				</view>
-				<view class="time-row">
-					<text class="label">结束时间:</text>
-					<picker mode="date" :value="customEndTime" @change="onEndTimeChange">
-						<view class="time-picker">{{ customEndTime || '请选择' }}</view>
-					</picker>
-				</view>
-			</view>
-		</view>
-
-		<!-- 统计卡片 -->
-		<view class="statistics-cards">
-			<view class="card-row">
-				<view class="stat-card">
-					<view class="card-value">{{ statistics.totalOrderCount || 0 }}</view>
-					<view class="card-label">总订单数</view>
-				</view>
-				<view class="stat-card">
-					<view class="card-value">{{ statistics.totalProductCount || 0 }}</view>
-					<view class="card-label">总商品数</view>
-				</view>
-			</view>
-
-			<view class="card-row">
-				<view class="stat-card">
-					<view class="card-value">¥{{ statistics.totalAmount || '0.00' }}</view>
-					<view class="card-label">总金额</view>
-				</view>
-				<view class="stat-card">
-					<view class="card-value">¥{{ statistics.paidAmount || '0.00' }}</view>
-					<view class="card-label">已付金额</view>
-				</view>
-			</view>
-
-			<view class="card-row">
-				<view class="stat-card">
-					<view class="card-value">¥{{ statistics.averageOrderAmount || '0.00' }}</view>
-					<view class="card-label">平均订单金额</view>
-				</view>
-				<view class="stat-card">
-					<view class="card-value">
-						{{ statistics.latestOrderTime ? formatTime(statistics.latestOrderTime) : '无' }}</view>
-					<view class="card-label">最近下单时间</view>
-				</view>
-			</view>
-		</view>
-
-		<!-- 订单状态统计 -->
-		<view class="status-statistics">
-			<view class="section-title">订单状态分布</view>
-			<view class="status-grid">
-				<view class="status-item">
-					<view class="status-count">{{ statistics.pendingPaymentCount || 0 }}</view>
-					<view class="status-label">待付款</view>
-				</view>
-				<view class="status-item">
-					<view class="status-count">{{ statistics.pendingShipmentCount || 0 }}</view>
-					<view class="status-label">待发货</view>
-				</view>
-				<view class="status-item">
-					<view class="status-count">{{ statistics.pendingReceiptCount || 0 }}</view>
-					<view class="status-label">待收货</view>
-				</view>
-				<view class="status-item">
-					<view class="status-count">{{ statistics.completedCount || 0 }}</view>
-					<view class="status-label">已完成</view>
-				</view>
-			</view>
-		</view>
-
-		<!-- 订单列表 -->
-		<view class="order-section">
-			<view class="section-title">订单记录</view>
-			<view v-if="orderList.length > 0" class="order-list">
-				<view v-for="(item, index) in orderList" :key="index" class="order-item" @tap="goOrderDetail(item)">
-					<view class="order-header">
-						<view class="order-code">订单号: {{ item.orderCode }}</view>
-						<view class="order-status" :class="getStatusClass(item.status, item.isAfter)">
-							{{ getStatusText(item.status, item.isAfter, item.isEvaluate) }}
-						</view>
-					</view>
-					<view class="order-content">
-						<image class="product-image" :src="item.images" mode="aspectFit"></image>
-						<view class="product-info">
-							<view class="product-name">{{ item.productName }}</view>
-							<view class="product-spec">规格: {{ item.skuName }}</view>
-							<view class="product-count">数量: {{ item.count }}</view>
-						</view>
-						<view class="order-price">
-							<view class="price">¥{{ item.paymentPrice }}</view>
-						</view>
-					</view>
-					<view class="order-time">下单时间: {{ formatTime(item.createTime) }}</view>
-				</view>
-			</view>
-			<view v-else class="empty-state">
-				<image src="@/static/images/empty.png" class="empty-image"></image>
-				<view class="empty-text">暂无订单记录</view>
-			</view>
-		</view>
-
-		<!-- 加载更多 -->
-		<view v-if="orderList.length > 0 && hasMore" class="load-more" @tap="loadMore">
-			<view class="load-text">加载更多</view>
-		</view>
-
-		<view v-if="loading" class="loading">
-			<uni-load-more status="loading"></uni-load-more>
-		</view>
-	</view>
-</template>
-
-<script>
-	import {
-		getMemberOrderStatistics,
-		getMemberOrderList
-	} from '@/config/api.js';
-
-	export default {
-		data() {
-			return {
-				memberId: '', // 用户ID
-				currentTimeFilter: 1, // 当前选中的时间筛选(0: 上个月, 1: 这个月, 2: 自定义)
-				timeFilterOptions: [{
-						name: '上个月'
-					},
-					{
-						name: '这个月'
-					},
-					{
-						name: '自定义'
-					}
-				],
-				customStartTime: '',
-				customEndTime: '',
-				statistics: {}, // 统计数据
-				orderList: [], // 订单列表
-				loading: false,
-				hasMore: true,
-				params: {
-					current: 1,
-					size: 10,
-					status: "",
-					isAfter: "",
-					isEvaluate: "",
-					orderCode: ""
-				}
-			}
-		},
-		onLoad(options) {
-			if (options.memberId) {
-				this.memberId = options.memberId;
-				this.loadStatistics();
-				this.loadOrderList();
-			}
-		},
-		onPullDownRefresh() {
-			this.refreshData();
-			uni.stopPullDownRefresh();
-		},
-		onReachBottom() {
-			if (this.hasMore && !this.loading) {
-				this.loadMore();
-			}
-		},
-		methods: {
-			goBack() {
-				uni.navigateBack();
-			},
-
-			// 选择时间筛选
-			selectTimeFilter(index) {
-				this.currentTimeFilter = index;
-				if (index !== 2) {
-					this.customStartTime = '';
-					this.customEndTime = '';
-				}
-				this.loadStatistics();
-				this.refreshOrderList();
-			},
-
-			// 开始时间选择
-			onStartTimeChange(e) {
-				this.customStartTime = e.detail.value;
-				if (this.customEndTime) {
-					this.loadStatistics();
-					this.refreshOrderList();
-				}
-			},
-
-			// 结束时间选择
-			onEndTimeChange(e) {
-				this.customEndTime = e.detail.value;
-				if (this.customStartTime) {
-					this.loadStatistics();
-					this.refreshOrderList();
-				}
-			},
-
-			// 获取时间范围
-			getTimeRange() {
-				const now = new Date();
-				let startTime = '';
-				let endTime = '';
-
-				if (this.currentTimeFilter === 0) {
-					// 上个月
-					const lastMonth = new Date(now.getFullYear(), now.getMonth() - 1, 1);
-					const lastMonthEnd = new Date(now.getFullYear(), now.getMonth(), 0);
-					startTime = this.formatDate(lastMonth);
-					endTime = this.formatDate(lastMonthEnd);
-				} else if (this.currentTimeFilter === 1) {
-					// 这个月
-					const thisMonthStart = new Date(now.getFullYear(), now.getMonth(), 1);
-					startTime = this.formatDate(thisMonthStart);
-					endTime = this.formatDate(now);
-				} else if (this.currentTimeFilter === 2) {
-					// 自定义
-					startTime = this.customStartTime;
-					endTime = this.customEndTime;
-				}
-
-				return {
-					startTime,
-					endTime
-				};
-			},
-
-			// 加载统计数据
-			async loadStatistics() {
-				if (!this.memberId) return;
-
-				const {
-					startTime,
-					endTime
-				} = this.getTimeRange();
-				const params = {
-					memberId: this.memberId,
-					startTime,
-					endTime
-				};
-
-				try {
-					const res = await getMemberOrderStatistics(params);
-					if (res.code === 200) {
-						this.statistics = res.data || {};
-					}
-				} catch (error) {
-					console.error('加载统计数据失败:', error);
-				}
-			},
-
-			// 刷新订单列表
-			refreshOrderList() {
-				this.params.current = 1;
-				this.orderList = [];
-				this.hasMore = true;
-				this.loadOrderList();
-			},
-
-			// 加载订单列表
-			async loadOrderList() {
-				if (this.loading || !this.hasMore) return;
-
-				this.loading = true;
-
-				try {
-					// 获取时间范围
-					const { startTime, endTime } = this.getTimeRange();
-					
-					// 设置用户ID查询条件和时间筛选
-					const orderParams = {
-						...this.params,
-						memberId: this.memberId,
-						startTime: startTime,
-						endTime: endTime
-					};
-
-					const res = await getMemberOrderList(orderParams);
-					if (res.code === 200) {
-						const newOrders = res.data.records || [];
-						if (this.params.current === 1) {
-							this.orderList = newOrders;
-						} else {
-							this.orderList = [...this.orderList, ...newOrders];
-						}
-
-						this.hasMore = newOrders.length >= this.params.size;
-					}
-				} catch (error) {
-					console.error('加载订单列表失败:', error);
-					uni.showToast({
-						title: '加载失败',
-						icon: 'none'
-					});
-				} finally {
-					this.loading = false;
-				}
-			},
-
-			// 加载更多
-			loadMore() {
-				this.params.current++;
-				this.loadOrderList();
-			},
-
-			// 刷新数据
-			refreshData() {
-				this.loadStatistics();
-				this.refreshOrderList();
-			},
-
-			// 跳转到订单详情
-			goOrderDetail(item) {
-				uni.navigateTo({
-					url: `/packageOrder/pages/detail/index?id=${item.id}`
-				});
-			},
-
-			// 获取订单状态样式
-			getStatusClass(status, isAfter) {
-				if (isAfter > 0) return 'status-after';
-				if (status === 1) return 'status-pending';
-				if (status === 2) return 'status-paid';
-				if (status === 3) return 'status-shipped';
-				if (status === 4) return 'status-completed';
-				return '';
-			},
-
-			// 获取订单状态文本
-			getStatusText(status, isAfter, isEvaluate) {
-				if (isAfter === 1) return '售后中';
-				if (isAfter === 2) return '售后完成';
-				if (isAfter === 3) return '售后拒绝';
-				if (status === 1) return '待付款';
-				if (status === 2) return '待发货';
-				if (status === 3) return '待收货';
-				if (status === 4) {
-					if (isEvaluate === 0) return '待评价';
-					return '已完成';
-				}
-				return '未知状态';
-			},
-
-			// 格式化日期
-			formatDate(date) {
-				const year = date.getFullYear();
-				const month = String(date.getMonth() + 1).padStart(2, '0');
-				const day = String(date.getDate()).padStart(2, '0');
-				return `${year}-${month}-${day}`;
-			},
-
-			// 格式化时间
-			formatTime(timeStr) {
-				if (!timeStr) return '';
-				const date = new Date(timeStr);
-				return `${date.getMonth() + 1}-${date.getDate()} ${String(date.getHours()).padStart(2, '0')}:${String(date.getMinutes()).padStart(2, '0')}`;
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	.container {
-		min-height: 100vh;
-		background-color: #f5f5f5;
-		padding-bottom: 40rpx;
-	}
-
-	// 用户信息
-	.user-info {
-		background: #fff;
-		padding: 40rpx 30rpx;
-		display: flex;
-		align-items: center;
-		margin-bottom: 20rpx;
-
-		.user-avatar {
-			width: 100rpx;
-			height: 100rpx;
-			border-radius: 50%;
-			margin-right: 20rpx;
-		}
-
-		.user-name {
-			font-size: 34rpx;
-			font-weight: 600;
-			color: #333;
-		}
-	}
-
-	// 时间筛选
-	.time-filter {
-		margin-top: 0;
-		background: #fff;
-		padding: 30rpx;
-		margin-bottom: 20rpx;
-
-		.filter-tabs {
-			display: flex;
-			border-radius: 10rpx;
-			overflow: hidden;
-			border: 2rpx solid #7C9DC3;
-
-			.tab-item {
-				flex: 1;
-				text-align: center;
-				padding: 20rpx 0;
-				font-size: 28rpx;
-				background: #fff;
-				color: #7C9DC3;
-				transition: all 0.3s;
-
-				&.active {
-					background: #7C9DC3;
-					color: #fff;
-				}
-			}
-		}
-
-		.custom-time {
-			margin-top: 30rpx;
-
-			.time-row {
-				display: flex;
-				align-items: center;
-				margin-bottom: 20rpx;
-
-				.label {
-					width: 160rpx;
-					font-size: 28rpx;
-					color: #666;
-				}
-
-				.time-picker {
-					flex: 1;
-					padding: 20rpx;
-					background: #f8f8f8;
-					border-radius: 8rpx;
-					font-size: 28rpx;
-					color: #333;
-				}
-			}
-		}
-	}
-
-	// 统计卡片
-	.statistics-cards {
-		background: #fff;
-		padding: 30rpx;
-		margin-bottom: 20rpx;
-
-		.card-row {
-			display: flex;
-			justify-content: space-between;
-			margin-bottom: 30rpx;
-
-			&:last-child {
-				margin-bottom: 0;
-			}
-
-			.stat-card {
-				flex: 1;
-				text-align: center;
-				padding: 30rpx 20rpx;
-				background: linear-gradient(135deg, #7C9DC3 0%, #9DBAD9 100%);
-				border-radius: 12rpx;
-				margin: 0 10rpx;
-
-				&:first-child {
-					margin-left: 0;
-				}
-
-				&:last-child {
-					margin-right: 0;
-				}
-
-				.card-value {
-					font-size: 40rpx;
-					font-weight: bold;
-					color: #fff;
-					margin-bottom: 10rpx;
-				}
-
-				.card-label {
-					font-size: 24rpx;
-					color: rgba(255, 255, 255, 0.9);
-				}
-			}
-		}
-	}
-
-	// 订单状态统计
-	.status-statistics {
-		background: #fff;
-		padding: 30rpx;
-		margin-bottom: 20rpx;
-
-		.section-title {
-			font-size: 32rpx;
-			font-weight: 600;
-			color: #333;
-			margin-bottom: 30rpx;
-		}
-
-		.status-grid {
-			display: flex;
-			justify-content: space-between;
-
-			.status-item {
-				flex: 1;
-				text-align: center;
-				padding: 20rpx 10rpx;
-
-				.status-count {
-					font-size: 36rpx;
-					font-weight: bold;
-					color: #7C9DC3;
-					margin-bottom: 8rpx;
-				}
-
-				.status-label {
-					font-size: 24rpx;
-					color: #666;
-				}
-			}
-		}
-	}
-
-	// 订单列表
-	.order-section {
-		background: #fff;
-		padding: 30rpx;
-
-		.section-title {
-			font-size: 32rpx;
-			font-weight: 600;
-			color: #333;
-			margin-bottom: 30rpx;
-		}
-
-		.order-list {
-			.order-item {
-				border: 2rpx solid #f0f0f0;
-				border-radius: 12rpx;
-				padding: 30rpx;
-				margin-bottom: 20rpx;
-				background: #fff;
-
-				.order-header {
-					display: flex;
-					justify-content: space-between;
-					align-items: center;
-					margin-bottom: 20rpx;
-
-					.order-code {
-						font-size: 28rpx;
-						color: #666;
-					}
-
-					.order-status {
-						padding: 8rpx 16rpx;
-						border-radius: 20rpx;
-						font-size: 24rpx;
-						color: #fff;
-
-						&.status-pending {
-							background: #FFB98B;
-						}
-
-						&.status-paid {
-							background: #7C9DC3;
-						}
-
-						&.status-shipped {
-							background: #8BC4D9;
-						}
-
-						&.status-completed {
-							background: #92C3A9;
-						}
-
-						&.status-after {
-							background: #D99595;
-						}
-					}
-				}
-
-				.order-content {
-					display: flex;
-					align-items: center;
-					margin-bottom: 15rpx;
-
-					.product-image {
-						width: 120rpx;
-						height: 120rpx;
-						border-radius: 8rpx;
-						margin-right: 20rpx;
-					}
-
-					.product-info {
-						flex: 1;
-
-						.product-name {
-							font-size: 30rpx;
-							color: #333;
-							margin-bottom: 10rpx;
-							font-weight: 500;
-						}
-
-						.product-spec,
-						.product-count {
-							font-size: 24rpx;
-							color: #666;
-							margin-bottom: 5rpx;
-						}
-					}
-
-					.order-price {
-						.price {
-							font-size: 32rpx;
-							font-weight: bold;
-							color: #7C9DC3;
-						}
-					}
-				}
-
-				.order-time {
-					font-size: 24rpx;
-					color: #999;
-					text-align: right;
-				}
-			}
-		}
-
-		.empty-state {
-			text-align: center;
-			padding: 100rpx 0;
-
-			.empty-image {
-				width: 300rpx;
-				height: 300rpx;
-				margin-bottom: 30rpx;
-			}
-
-			.empty-text {
-				font-size: 28rpx;
-				color: #999;
-			}
-		}
-	}
-
-	// 加载更多
-	.load-more {
-		text-align: center;
-		padding: 30rpx;
-
-		.load-text {
-			font-size: 28rpx;
-			color: #666;
-		}
-	}
-
-	.loading {
-		text-align: center;
-		padding: 30rpx;
-	}
-</style>

+ 0 - 377
packageOrder/pages/logistics/index.vue

@@ -1,377 +0,0 @@
-<template>
-	<view class="">
-		<!-- 物流头部信息 -->
-		<view class="logistics-header">
-			<view>
-				<view class="company-info mar-b-16">
-					<u-icon name="car" size="25" color="#8b8b8b" class="logistics-header-icon"></u-icon>
-					<text class="label">物流公司:</text>
-					<text class="value">{{ order.expressCompany  ||'-'}}</text>
-				</view>
-				<view class="tracking-info mar-b-16">
-					<u-icon name="order" size="25" color="#8b8b8b" class="logistics-header-icon"></u-icon>
-					<text class="label">单号:</text>
-					<text class="value">{{ order.expressCode  ||'-'}}</text>
-					<text class="copy-btn" v-if="order.expressCode" @tap="copyContent">复制</text>
-				</view>
-				<view class="company-info mar-b-16 ">
-					<u-icon name="coupon" size="25" color="#8b8b8b" class="logistics-header-icon"></u-icon>
-
-					<text class="label">发货备注:</text>
-					<text class="value">{{ order.deliveryRemark ||'-'}}</text>
-				</view>
-			</view>
-		</view>
-
-
-		<!-- 物流轨迹列表 -->
-		<view class="logistics-trace" :key="stepsKey">
-			<template v-if="logisticsList && logisticsList.length">
-				<uni-steps :options="logisticsList" direction="column" :active="0"></uni-steps>
-			</template>
-			<template v-else>
-				<view class="no-data">暂无物流信息</view>
-			</template>
-		</view>
-
-	</view>
-</template>
-
-<script>
-	import {
-		queryExpress,
-		orderDetail
-	} from '@/config/api.js'
-
-	export default {
-		data() {
-			return {
-				stepsKey: 0,
-				logisticsCompany: '',
-				logisticsNumber: '',
-				logisticsList: [],
-				order: {},
-				stats: null,
-				orderId: "",
-			};
-		},
-		methods: {
-			copyContent() {
-				uni.setClipboardData({
-					data: this.logisticsNumber,
-					success: () => {
-						uni.showToast({
-							title: '复制成功',
-							icon: 'none'
-						});
-					}
-				});
-			},
-			async getLogisticsInfo() {
-				try {
-					const params = {
-						number: this.order.expressCode
-					};
-
-					// 如果是顺丰快递,使用lastFour字段
-					if (this.order.expressCompany === '顺丰快递' && this.order.lastFour) {
-						params.mobile = this.order.lastFour;
-					}
-
-					const res = await queryExpress(params);
-					if (res.code === 200) {
-						const data = JSON.parse(res.data).data;
-						console.log("res", res)
-						this.logisticsCompany = data.expressCompanyName;
-						// 转换物流轨迹数据格式为uview-plus steps所需格式
-						if (data.logisticsTraceDetails && Array.isArray(data.logisticsTraceDetails)) {
-							this.logisticsList = data.logisticsTraceDetails.reverse().map(item => ({
-								title: item.desc || '',
-								desc: item.time ? this.formatTimestamp(item.time) : ''
-							}));
-							this.stepsKey++
-						} else {
-							this.logisticsList = [];
-						}
-					} else {
-						this.logisticsList = [];
-						uni.showToast({
-							title: '获取物流信息失败',
-							icon: 'none'
-						});
-					}
-				} catch (e) {
-					this.logisticsList = [];
-					uni.showToast({
-						title: '获取物流信息失败',
-						icon: 'none'
-					});
-				}
-			},
-			formatTimestamp(timestamp) {
-				const date = new Date(Number(timestamp));
-				const year = date.getFullYear();
-				const month = String(date.getMonth() + 1).padStart(2, '0');
-				const day = String(date.getDate()).padStart(2, '0');
-				const hours = String(date.getHours()).padStart(2, '0');
-				const minutes = String(date.getMinutes()).padStart(2, '0');
-				return `${year}-${month}-${day} ${hours}:${minutes}`;
-			},
-			previewImage(current, urls) {
-				uni.previewImage({
-					current,
-					urls
-				});
-			},
-			async getDeliveryStats() {
-				try {
-					const res = await deliveryStats({
-						workOrderId: this.order.id
-					});
-					if (res.code === 200) {
-						this.stats = res.data;
-					} else {
-						uni.showToast({
-							title: '获取发货统计信息失败',
-							icon: 'none'
-						});
-					}
-				} catch (e) {
-					uni.showToast({
-						title: '获取发货统计信息失败',
-						icon: 'none'
-					});
-				}
-			},
-			goToDeliverRecord() {
-				uni.navigateTo({
-					url: `/pagesA/production/deliver-record?workOrderId=${this.order.id}`
-				});
-			},
-			async getOrderDetail() {
-				try {
-					const res = await orderDetail({
-						id: this.orderId
-					})
-					if (res.success && res.data) {
-						this.order = res.data.order
-						this.orderListVos = res.data.orderListVos || []
-						this.getLogisticsInfo();
-					}
-				} catch (e) {
-					this.$u.toast('获取订单详情失败')
-				}
-			},
-		},
-		onLoad(op) {
-			this.orderId = op.id;
-			this.getOrderDetail()
-		}
-	};
-</script>
-
-<style scoped>
-	.contact-section {
-		position: fixed;
-		left: 0;
-		right: 0;
-		bottom: 0;
-		background: #fff;
-		padding: 20rpx 30rpx;
-		display: flex;
-		justify-content: space-around;
-
-		.contact-item {
-			display: flex;
-			flex-direction: column;
-			align-items: center;
-			padding: 20rpx;
-
-			text {
-				font-size: 24rpx;
-				color: #666;
-				margin-top: 10rpx;
-			}
-		}
-	}
-
-	.container {
-		padding: 20rpx;
-		background-color: #f8f8f8;
-	}
-
-	.logistics-header {
-		background-color: #ffffff;
-		border-radius: 10rpx;
-		padding: 32rpx;
-		box-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.1);
-		margin-bottom: 20rpx;
-	}
-
-	.company-info,
-	.tracking-info {
-		display: flex;
-		align-items: center;
-	}
-
-	.label {
-		color: #666;
-		font-size: 28rpx;
-		margin-right: 10rpx;
-	}
-
-	.value {
-		color: #333;
-		font-size: 28rpx;
-		font-weight: 500;
-	}
-
-	.copy-btn {
-		background: #229fff;
-		color: #fff;
-		border-radius: 20rpx;
-		padding: 6rpx 22rpx;
-		font-size: 26rpx;
-		margin-left: 8rpx;
-		box-shadow: 0 2rpx 6rpx rgba(34, 159, 255, 0.08);
-		cursor: pointer;
-		transition: background 0.2s;
-	}
-
-	.copy-btn:active {
-		background-color: #e5e5e5;
-	}
-
-	.logistics-trace {
-		min-height: calc(100vh - 20rpx - 32rpx - 20rpx - 20rpx);
-		/* 减去容器内边距、头部内边距、头部底部外边距和自身内边距 */
-		background-color: #ffffff;
-		border-radius: 10rpx;
-		padding: 20rpx;
-		box-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.1);
-	}
-
-	.steps-item {
-		padding: 20rpx 0;
-	}
-
-	.steps-title {
-		font-size: 28rpx;
-		color: #333;
-		margin-bottom: 10rpx;
-	}
-
-	.steps-time {
-		font-size: 24rpx;
-		color: #999;
-	}
-
-	.no-data {
-		text-align: center;
-		padding: 40rpx;
-		color: #999;
-		font-size: 28rpx;
-	}
-
-	.goods-photos {
-		padding: 20rpx;
-		background-color: #fff;
-		border-radius: 12rpx;
-	}
-
-	.photo-section {
-		margin-bottom: 30rpx;
-		display: flex;
-		flex-direction: column;
-	}
-
-	.photo-section:last-child {
-		margin-bottom: 0;
-	}
-
-	.photo-section .section-title {
-		font-size: 28rpx;
-		color: #333;
-		font-weight: bold;
-		margin-bottom: 20rpx;
-	}
-
-	.photo-section .photo-grid {
-		display: flex;
-		flex-wrap: nowrap;
-		gap: 20rpx;
-		overflow-x: auto;
-		padding-bottom: 10rpx;
-	}
-
-	.photo-section .photo-grid .photo-item {
-		width: 200rpx;
-		height: 200rpx;
-		flex-shrink: 0;
-		border-radius: 8rpx;
-		background-color: #f5f5f5;
-	}
-
-	.delivery-stats {
-		background-color: #ffffff;
-		border-radius: 10rpx;
-		padding: 20rpx;
-		box-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.1);
-		margin-bottom: 20rpx;
-	}
-
-	.stats-header {
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-		padding-bottom: 20rpx;
-		border-bottom: 1rpx solid #eee;
-	}
-
-	.stats-title {
-		font-size: 30rpx;
-		font-weight: bold;
-		color: #333;
-	}
-
-	.stats-content {
-		padding-top: 20rpx;
-		display: grid;
-		grid-template-columns: repeat(2, 1fr);
-		gap: 20rpx;
-	}
-
-	.stats-item {
-		display: flex;
-		flex-direction: column;
-		align-items: center;
-		padding: 10rpx;
-	}
-
-	.stats-label {
-		color: #666;
-		font-size: 26rpx;
-		margin-bottom: 8rpx;
-	}
-
-	.stats-value {
-		color: #229fff;
-		font-size: 32rpx;
-		font-weight: bold;
-	}
-
-	.record-btn {
-		display: flex;
-		align-items: center;
-		background: #ecf5ff;
-		padding: 10rpx 20rpx;
-		border-radius: 30rpx;
-		cursor: pointer;
-	}
-
-	.record-btn text {
-		color: #229fff;
-		font-size: 26rpx;
-		margin-left: 8rpx;
-	}
-</style>

+ 0 - 396
packageOrder/pages/payment/index.vue

@@ -1,396 +0,0 @@
-<template>
-	<view class="payment-container">
-		<!-- 收货地址 -->
-		<view class="address-section">
-			<view class="address-content" v-if="orderInfo">
-				<view class="contact-info">
-					<text class="name">{{orderInfo.name}}</text>
-					<text class="phone">{{orderInfo.mobile}}</text>
-				</view>
-				<view class="address-detail">
-					{{orderInfo.province}}{{orderInfo.city}}{{orderInfo.area}}{{orderInfo.address}}
-				</view>
-			</view>
-		</view>
-
-		<!-- 商品信息 -->
-		<view class="goods-section">
-			<view class="goods-title">商品信息</view>
-			<view class="goods-item" v-for="(item, index) in orderDetails" :key="index">
-				<image :src="item.productImage" mode="aspectFill" class="goods-img"></image>
-				<view class="goods-info">
-					<view class="goods-name">{{item.productName}}</view>
-					<view class="goods-spec">{{item.skuName}}</view>
-					<view class="price-num">
-						<text class="price">¥{{item.unitPrice}}</text>
-						<text class="num">x{{item.quantity}}</text>
-					</view>
-				</view>
-			</view>
-		</view>
-
-		<!-- 支付方式 -->
-		<view class="pay-section">
-			<view class="pay-title">支付方式</view>
-			<view class="pay-method">
-				<view class="method-item">
-					<image src="/static/images/wxpay.png" mode="aspectFit" class="pay-icon"></image>
-					<text>微信支付</text>
-				</view>
-			</view>
-		</view>
-
-		<!-- 订单金额信息 -->
-		<view class="amount-section">
-			<view class="amount-item">
-				<text>商品总价</text>
-				<text>¥{{orderInfo.paymentPrice}}</text>
-			</view>
-			<view class="amount-item total">
-				<text>实付金额</text>
-				<text class="total-price">¥{{orderInfo.paymentPrice}}</text>
-			</view>
-		</view>
-
-		<!-- 底部支付按钮 -->
-		<view class="footer">
-			<view class="total-section">
-				<text>实付金额:</text>
-				<text class="total-price">¥{{orderInfo.paymentPrice}}</text>
-			</view>
-			<view class="pay-btn" @click="handlePay">
-				立即支付
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	import {
-		getOrderPayDetail,
-		getWxPayParams
-	} from '@/config/api.js';
-
-	export default {
-		data() {
-			return {
-				orderId: '',
-				orderInfo: {},
-				orderDetails: []
-			}
-		},
-		onLoad(options) {
-			if (options.orderId) {
-				console.log(this.orderId, "ORDER")
-				this.orderId = options.orderId;
-				this.getOrderDetail();
-			} else {
-				uni.showToast({
-					title: '订单参数错误',
-					icon: 'none'
-				});
-				setTimeout(() => {
-					uni.navigateBack();
-				}, 1500);
-			}
-		},
-		methods: {
-			// 获取订单详情
-			async getOrderDetail() {
-				try {
-					uni.showLoading({
-						title: '加载中...'
-					});
-
-					const res = await getOrderPayDetail(this.orderId);
-					if (res.code === 200 && res.data) {
-						this.orderInfo = res.data.orderInfo.order;
-						this.orderDetails = res.data.orderDetails;
-
-						// 如果订单状态不是待付款,提示并返回
-						if (this.orderInfo.status !== 1) {
-							uni.showToast({
-								title: '订单状态已改变',
-								icon: 'none'
-							});
-							setTimeout(() => {
-								uni.navigateBack();
-							}, 1500);
-						}
-					} else {
-						uni.showToast({
-							title: res.msg || '获取订单信息失败',
-							icon: 'none'
-						});
-					}
-				} catch (e) {
-					console.error('获取订单详情失败:', e);
-					uni.showToast({
-						title: '获取订单信息失败',
-						icon: 'none'
-					});
-				} finally {
-					uni.hideLoading();
-				}
-			},
-
-			// 处理支付
-			async handlePay() {
-				if (!this.orderInfo) {
-					return uni.showToast({
-						title: '订单信息错误',
-						icon: 'none'
-					});
-				}
-
-				try {
-					// 调用后端获取支付参数
-					const payRes = await getWxPayParams(this.orderId);
-					if (payRes.code !== 200 || !payRes.data) {
-						throw new Error(payRes.msg || '获取支付参数失败');
-					}
-
-					// 调起微信支付
-					uni.requestPayment({
-						provider: 'wxpay',
-						timeStamp: payRes.data.timestamp,
-						nonceStr: payRes.data.noncestr,
-						package: payRes.data.package,
-						signType: payRes.data.signType,
-						paySign: payRes.data.sign,
-						success: (res) => {
-							uni.showToast({
-								title: '支付成功',
-								icon: 'success'
-							});
-							// 支付成功后跳转到订单列表
-							setTimeout(() => {
-								uni.redirectTo({
-									url: '/packageOrder/pages/list/index?status=2'
-								});
-							}, 1500);
-						},
-						fail: (err) => {
-							console.error('支付失败:', err);
-							uni.showToast({
-								title: '支付失败',
-								icon: 'none'
-							});
-							setTimeout(() => {
-								uni.redirectTo({
-									url: '/packageOrder/pages/list/index?status=1'
-								});
-							}, 1000);
-						}
-					});
-				} catch (e) {
-					console.error('支付异常:', e);
-					uni.showToast({
-						title: e.message || '支付失败',
-						icon: 'none'
-					});
-				}
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-	.payment-container {
-		min-height: 100vh;
-		background-color: #f8f8f8;
-		padding-bottom: 120rpx;
-	}
-
-	.address-section {
-		background-color: #fff;
-		padding: 30rpx;
-		margin-bottom: 20rpx;
-
-		.address-content {
-			.contact-info {
-				margin-bottom: 10rpx;
-
-				.name {
-					font-size: 32rpx;
-					font-weight: bold;
-					margin-right: 20rpx;
-				}
-
-				.phone {
-					font-size: 28rpx;
-					color: #666;
-				}
-			}
-
-			.address-detail {
-				font-size: 28rpx;
-				color: #333;
-				line-height: 1.4;
-			}
-		}
-	}
-
-	.goods-section {
-		background-color: #fff;
-		margin-bottom: 20rpx;
-
-		.goods-title {
-			font-size: 32rpx;
-			font-weight: bold;
-			padding: 30rpx;
-			border-bottom: 1rpx solid #f5f5f5;
-		}
-
-		.goods-item {
-			display: flex;
-			padding: 30rpx;
-			border-bottom: 1rpx solid #f5f5f5;
-
-			.goods-img {
-				width: 160rpx;
-				height: 160rpx;
-				border-radius: 8rpx;
-				margin-right: 20rpx;
-			}
-
-			.goods-info {
-				flex: 1;
-
-				.goods-name {
-					font-size: 28rpx;
-					color: #333;
-					margin-bottom: 10rpx;
-				}
-
-				.goods-spec {
-					font-size: 24rpx;
-					color: #999;
-					margin-bottom: 20rpx;
-				}
-
-				.price-num {
-					display: flex;
-					justify-content: space-between;
-					align-items: center;
-
-					.price {
-						font-size: 32rpx;
-						color: #ff4b4b;
-						font-weight: bold;
-					}
-
-					.num {
-						font-size: 28rpx;
-						color: #999;
-					}
-				}
-			}
-		}
-	}
-
-	.pay-section {
-		background-color: #fff;
-		margin-bottom: 20rpx;
-
-		.pay-title {
-			font-size: 32rpx;
-			font-weight: bold;
-			padding: 30rpx;
-			border-bottom: 1rpx solid #f5f5f5;
-		}
-
-		.pay-method {
-			padding: 30rpx;
-
-			.method-item {
-				display: flex;
-				align-items: center;
-
-				.pay-icon {
-					width: 48rpx;
-					height: 48rpx;
-					margin-right: 20rpx;
-				}
-
-				text {
-					font-size: 28rpx;
-					color: #333;
-				}
-			}
-		}
-	}
-
-	.amount-section {
-		background-color: #fff;
-		padding: 30rpx;
-
-		.amount-item {
-			display: flex;
-			justify-content: space-between;
-			margin-bottom: 20rpx;
-
-			text {
-				font-size: 28rpx;
-				color: #666;
-			}
-
-			&.total {
-				margin-top: 30rpx;
-				border-top: 1rpx solid #f5f5f5;
-				padding-top: 30rpx;
-
-				text {
-					font-size: 32rpx;
-					color: #333;
-					font-weight: bold;
-
-					&.total-price {
-						color: #ff4b4b;
-					}
-				}
-			}
-		}
-	}
-
-	.footer {
-		position: fixed;
-		left: 0;
-		right: 0;
-		bottom: 0;
-		height: 100rpx;
-		background-color: #fff;
-		display: flex;
-		align-items: center;
-		padding: 0rpx 30rpx;
-		box-shadow: 0 -2rpx 10rpx rgba(0, 0, 0, 0.05);
-
-		.total-section {
-			flex: 1;
-
-			text {
-				font-size: 28rpx;
-				color: #333;
-
-				&.total-price {
-					font-size: 36rpx;
-					color: #ff4b4b;
-					font-weight: bold;
-				}
-			}
-		}
-
-		.pay-btn {
-			width: 240rpx;
-			height: 80rpx;
-			background-color: #F95B5B;
-			color: #fff;
-			font-size: 32rpx;
-			font-weight: bold;
-			border-radius: 40rpx;
-			display: flex;
-			align-items: center;
-			justify-content: center;
-		}
-	}
-</style>

+ 0 - 180
packageOrder/pages/score/index.vue

@@ -1,180 +0,0 @@
-<template>
-	<view>
-		<!-- 表单区域 -->
-		<view class="form-container region mar-t-10">
-			<view class="form-item">
-				<view class="form-label">评分</view>
-				<uni-rate size="30" v-model="score.score" />
-			</view>
-
-			<view class="form-item">
-				<view class="form-label">评价内容</view>
-				<view class="textarea-container">
-					<textarea style="width: 100%;" v-model="score.content" placeholder="请详细描述申请说明(选填)"
-						class="form-textarea" :maxlength="maxLength"></textarea>
-					<view class="char-count">
-						您还可以输入{{ remainingChars }} 字
-					</view>
-				</view>
-			</view>
-
-			<!-- 上传凭证 -->
-			<!-- 媒体上传 -->
-			<view class="upload-section">
-				<text class="section-title">图片上传</text>
-				<media-uploader v-model="mediaList" :maxCount="9" mediaType="image" :media="false"
-					:uploadUrl="uploadUrl" :token="token" @change="handleMediaChange" />
-			</view>
-		</view>
-
-		<!-- 提交按钮 -->
-		<button class="submit-button" @click="submitForm('customForm')">提交评价</button>
-	</view>
-</template>
-
-<script>
-	import {
-		UPLOAD_URL
-	} from '@/common/config.js';
-	import store from '@/store';
-	import MediaUploader from '@/components/MediaUploader.vue';
-	import {
-		saveScore
-	} from '@/config/api.js';
-
-	export default {
-		components: {
-			MediaUploader
-		},
-		data() {
-			return {
-				mediaList: [], // 媒体文件列表
-				uploadUrl: UPLOAD_URL, // 上传地址
-				token: "",
-				score: {
-					imgList: [],
-					score: 5,
-					content: ""
-				},
-				token: '',
-				imageValue: [],
-				fileList: [],
-				images: [],
-				orderId: "",
-				maxLength: 200, // 最大字数
-			};
-		},
-		computed: {
-			// 计算剩余字数
-			remainingChars() {
-				return this.maxLength - this.score.content.length;
-			}
-		},
-		onLoad(op) {
-			this.orderId = op.orderId;
-			this.token = uni.getStorageSync('access_token');
-		},
-		methods: {
-			// 处理媒体文件变化
-			handleMediaChange(list) {
-				console.log('媒体列表变化:', list);
-				// list 中的每个项目都包含 url 和 type (image/video)
-				this.mediaList = list;
-				// 更新 score.imgList,只包含图片类型的URL
-				this.score.imgList = list
-					.filter(item => item.type === 'image')
-					.map(item => item.url);
-			},
-
-			// 提交表单
-			submitForm() {
-				this.score.images = this.score.imgList.join(',');
-				this.score.orderId = this.orderId
-				saveScore(this.score).then((res) => {
-					if (res.code == 200) {
-
-						uni.showToast({
-							title: '评价成功',
-							icon: 'success'
-						});
-						setTimeout(() => {
-							uni.navigateBack({
-								delta: 1
-							})
-						}, 1000)
-					}
-				})
-
-			}
-		}
-	}
-</script>
-
-<style scoped>
-	.page-title {
-		font-size: 36rpx;
-		font-weight: bold;
-		text-align: center;
-		padding: 20rpx 0;
-		color: #333;
-	}
-
-	.form-container {
-		padding: 20rpx;
-	}
-
-	.form-item {
-
-		margin-bottom: 20rpx;
-	}
-
-	.form-label {
-		font-size: 28rpx;
-		color: #666;
-		margin-bottom: 10rpx;
-	}
-
-	.textarea-container {
-		position: relative;
-	}
-
-	.form-textarea {
-		border: 1px solid #ccc;
-		border-radius: 5rpx;
-		padding: 10rpx;
-		font-size: 28rpx;
-		height: 150rpx;
-		resize: none;
-	}
-
-	.char-count {
-		position: absolute;
-		bottom: 10rpx;
-		right: 10rpx;
-		font-size: 24rpx;
-		color: #999;
-	}
-
-	.upload-container {
-		margin-top: 10rpx;
-	}
-
-	.submit-button {
-		background-color: #F95B5B;
-		color: #fff;
-		font-size: 32rpx;
-		padding: 5rpx;
-		border-radius: 10rpx;
-		margin-left: 30rpx;
-		margin-right: 30rpx;
-		text-align: center;
-		margin-top: 30rpx;
-	}
-
-	.videoUpload {
-		border: 1rpx solid #999;
-
-		height: 200rpx;
-		width: 200rpx;
-	}
-</style>

+ 0 - 162
packageOrder/pages/score/product-score.vue

@@ -1,162 +0,0 @@
-<template>
-	<view class="evaluation-list">
-		<view class="flex-items mar-t-10 mar-b-32">
-			<view class="selectBg"
-				:style="selectValue==item.value ? {backgroundColor: '#F2D0A2' } : {backgroundColor: '#ebebeb' }"
-				v-for="(item, index) in select" :key="index" @click="selectRadio(item,index)">
-				<view class="font28">
-					{{item.label}}
-				</view>
-			</view>
-		</view>
-
-		<!-- 评价列表 -->
-		<view class="evaluation-item" v-for="(item, index) in scoreList" :key="index">
-			<!-- 用户信息 -->
-			<view class="user-info">
-				<image :src="item.avatar||'../../../static/images/avatar.png'" class="user-avatar"></image>
-				<view class="user-details">
-					<view class="user-name">{{ item.account }}</view>
-					<uni-rate activeColor="#E2A28A" size="16" :value="item.score" allow-half />
-				</view>
-				<view class="evaluation-date">{{ item.createTime }}</view>
-			</view>
-			<!-- 评价内容 -->
-			<view class="evaluation-content">{{ item.content }}</view>
-			<!-- 评价图片 -->
-			<view class="evaluation-images">
-				<view v-for="(img, imgIndex) in item.imgList" :key="imgIndex">
-					<image v-if="img" :src="img" class="evaluation-image" mode="aspectFit"
-						@click="previewImage(item.imgList, imgIndex)">
-					</image>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	import {
-		scoreList
-	} from '@/config/api.js';
-	export default {
-		data() {
-			return {
-				selectValue: 1,
-				select: [{
-						label: "全部",
-						value: 1
-					},
-					{
-						label: "图片",
-						value: 2
-					}
-				],
-				params: {
-					current: 1,
-					size: 10,
-					productId: "",
-					images: 1
-				},
-				scoreList: []
-			};
-		},
-		onLoad(op) {
-			this.params.productId = op.productId;
-			this.getScoreList();
-		},
-		methods: {
-			selectRadio(item, index) {
-				this.selectValue = item.value;
-				this.params.images = this.selectValue;
-				this.getScoreList();
-			},
-			getScoreList() {
-				uni.showLoading({
-					title: '加载中...',
-					mask: true
-				});
-				scoreList(this.params).then((res) => {
-					this.scoreList = res.data.records;
-					this.scoreList.forEach(item => {
-						item.imgList = item.images.split(",");
-					});
-					uni.hideLoading();
-				});
-			},
-			// 预览图片
-			previewImage(imgList, currentIndex) {
-				uni.previewImage({
-					current: currentIndex, // 当前图片的索引
-					urls: imgList // 预览的图片列表
-				});
-			}
-		}
-	};
-</script>
-
-<style scoped>
-	.selectBg {
-		margin-right: 30rpx;
-		padding: 10px;
-		font-size: 28rpx;
-		border-radius: 5px;
-	}
-
-	.evaluation-list {
-		padding: 15px;
-		background-color: white;
-		min-height: 100vh;
-	}
-
-	.evaluation-item {
-		margin-bottom: 20px;
-		border-bottom: 1px solid #eee;
-		padding-bottom: 20px;
-	}
-
-	.user-info {
-		display: flex;
-		align-items: center;
-		margin-bottom: 10px;
-	}
-
-	.user-avatar {
-		width: 40px;
-		height: 40px;
-		border-radius: 50%;
-		margin-right: 10px;
-	}
-
-	.user-details {
-		flex: 1;
-	}
-
-	.user-name {
-		font-size: 14px;
-		font-weight: bold;
-	}
-
-	.evaluation-date {
-		font-size: 12px;
-		color: #999;
-	}
-
-	.evaluation-content {
-		font-size: 14px;
-		margin-bottom: 10px;
-	}
-
-	.evaluation-images {
-		display: flex;
-		flex-wrap: wrap;
-	}
-
-	.evaluation-image {
-		width: 80px;
-		height: 80px;
-		margin-right: 10px;
-		margin-bottom: 10px;
-		cursor: pointer;
-	}
-</style>

+ 0 - 166
packageShop/pages/address-edit/index.vue

@@ -1,166 +0,0 @@
-<template>
-  <view class="address-edit">
-    <u-form :model="form" ref="form">
-      <u-form-item label="收货人" prop="name" required>
-        <u-input v-model="form.name" placeholder="请输入收货人姓名" />
-      </u-form-item>
-      
-      <u-form-item label="手机号码" prop="phone" required>
-        <u-input v-model="form.phone" placeholder="请输入手机号码" type="number" maxlength="11" />
-      </u-form-item>
-      
-      <u-form-item label="所在地区" prop="region" required @click="showRegionPicker = true">
-        <view class="region-select">
-          <text v-if="form.province">{{form.province + form.city + form.district}}</text>
-          <text v-else class="placeholder">请选择所在地区</text>
-          <u-icon name="arrow-right"></u-icon>
-        </view>
-      </u-form-item>
-      
-      <u-form-item label="详细地址" prop="address" required>
-        <u-textarea v-model="form.address" placeholder="请输入详细地址信息" />
-      </u-form-item>
-      
-      <u-form-item>
-        <u-switch v-model="form.isDefault" activeColor="#D93025">
-          <text slot="label" class="switch-label">设为默认地址</text>
-        </u-switch>
-      </u-form-item>
-    </u-form>
-
-    <view class="submit-btn">
-      <u-button type="primary" @click="submit" color="#D93025">保存</u-button>
-    </view>
-
-    <u-picker
-      :show="showRegionPicker"
-      :columns="regionColumns"
-      @confirm="confirmRegion"
-      @cancel="showRegionPicker = false"
-      title="选择地区">
-    </u-picker>
-  </view>
-</template>
-
-<script>
-export default {
-  data() {
-    return {
-      form: {
-        name: '',
-        phone: '',
-        province: '',
-        city: '',
-        district: '',
-        address: '',
-        isDefault: false
-      },
-      showRegionPicker: false,
-      regionColumns: [
-        // 这里需要接入省市区数据
-        // 可以使用第三方包或者自行维护数据
-      ],
-      rules: {
-        name: [{
-          required: true,
-          message: '请输入收货人姓名',
-          trigger: ['blur', 'change']
-        }],
-        phone: [{
-          required: true,
-          message: '请输入手机号码',
-          trigger: ['blur', 'change']
-        }, {
-          pattern: /^1[3-9]\d{9}$/,
-          message: '请输入正确的手机号码',
-          trigger: ['blur', 'change']
-        }],
-        region: [{
-          required: true,
-          message: '请选择所在地区',
-          trigger: ['blur', 'change']
-        }],
-        address: [{
-          required: true,
-          message: '请输入详细地址',
-          trigger: ['blur', 'change']
-        }]
-      }
-    }
-  },
-  onLoad(options) {
-    if (options.id) {
-      this.getAddressDetail(options.id)
-    }
-  },
-  methods: {
-    async getAddressDetail(id) {
-      try {
-        const res = await this.$api.address.detail(id)
-        Object.assign(this.form, res.data)
-      } catch (e) {
-        this.$u.toast('获取地址信息失败')
-      }
-    },
-    confirmRegion(e) {
-      const [province, city, district] = e.value
-      this.form.province = province
-      this.form.city = city
-      this.form.district = district
-      this.showRegionPicker = false
-    },
-    async submit() {
-      try {
-        await this.$refs.form.validate()
-        const api = this.form.id ? 'update' : 'add'
-        await this.$api.address[api](this.form)
-        this.$u.toast(this.form.id ? '修改成功' : '添加成功')
-        setTimeout(() => {
-          uni.navigateBack()
-        }, 1500)
-      } catch (e) {
-        if (e.errors) return
-        this.$u.toast(this.form.id ? '修改失败' : '添加失败')
-      }
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.address-edit {
-  min-height: 100vh;
-  background: #f5f5f5;
-  padding: 20rpx;
-  
-  :deep(.u-form) {
-    background: #fff;
-    border-radius: 12rpx;
-    padding: 20rpx;
-    
-    .u-form-item {
-      padding: 20rpx 0;
-    }
-  }
-  
-  .region-select {
-    display: flex;
-    align-items: center;
-    justify-content: space-between;
-    
-    .placeholder {
-      color: #c0c4cc;
-    }
-  }
-  
-  .switch-label {
-    font-size: 28rpx;
-    margin-right: 20rpx;
-  }
-  
-  .submit-btn {
-    margin-top: 40rpx;
-    padding: 0 20rpx;
-  }
-}
-</style> 

+ 0 - 178
packageShop/pages/address/index.vue

@@ -1,178 +0,0 @@
-<template>
-  <view class="address-container">
-    <u-empty v-if="addressList.length === 0" mode="address" icon="/static/images/empty/address.png">
-      <view class="empty-tips">暂无收货地址</view>
-    </u-empty>
-    
-    <view v-else class="address-list">
-      <view v-for="(item, index) in addressList" :key="index" class="address-item">
-        <view class="address-info" @click="selectAddress(item)">
-          <view class="user-info">
-            <text class="name">{{item.name}}</text>
-            <text class="phone">{{item.phone}}</text>
-            <text v-if="item.isDefault" class="default-tag">默认</text>
-          </view>
-          <view class="address-detail">{{item.province}}{{item.city}}{{item.district}}{{item.address}}</view>
-        </view>
-        <view class="operation">
-          <view class="edit" @click="editAddress(item)">
-            <u-icon name="edit-pen" size="40rpx"></u-icon>
-          </view>
-          <view class="delete" @click="deleteAddress(item)">
-            <u-icon name="trash" size="40rpx"></u-icon>
-          </view>
-        </view>
-      </view>
-    </view>
-
-    <view class="add-btn">
-      <u-button type="primary" text="新增收货地址" @click="addAddress" color="#D93025"></u-button>
-    </view>
-
-    <u-modal
-      :show="showDeleteModal"
-      @confirm="confirmDelete"
-      @cancel="showDeleteModal = false"
-      title="删除确认"
-      content="确定要删除该收货地址吗?"
-      showCancelButton>
-    </u-modal>
-  </view>
-</template>
-
-<script>
-export default {
-  data() {
-    return {
-      addressList: [],
-      showDeleteModal: false,
-      currentAddress: null
-    }
-  },
-  onShow() {
-    this.getAddressList()
-  },
-  methods: {
-    async getAddressList() {
-      try {
-        const res = await this.$api.address.list()
-        this.addressList = res.data || []
-      } catch (e) {
-        this.$u.toast('获取地址列表失败')
-      }
-    },
-    addAddress() {
-      uni.navigateTo({
-        url: '/packageShop/pages/address-edit/index'
-      })
-    },
-    editAddress(item) {
-      uni.navigateTo({
-        url: '/packageShop/pages/address-edit/index?id=' + item.id
-      })
-    },
-    deleteAddress(item) {
-      this.currentAddress = item
-      this.showDeleteModal = true
-    },
-    async confirmDelete() {
-      if (!this.currentAddress) return
-      try {
-        await this.$api.address.delete(this.currentAddress.id)
-        this.$u.toast('删除成功')
-        this.getAddressList()
-      } catch (e) {
-        this.$u.toast('删除失败')
-      }
-      this.showDeleteModal = false
-      this.currentAddress = null
-    },
-    selectAddress(item) {
-      const pages = getCurrentPages()
-      const prevPage = pages[pages.length - 2]
-      if (prevPage && prevPage.$vm.setSelectedAddress) {
-        prevPage.$vm.setSelectedAddress(item)
-        uni.navigateBack()
-      }
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.address-container {
-  min-height: 100vh;
-  background: #f5f5f5;
-  padding-bottom: 120rpx;
-  
-  .address-list {
-    padding: 20rpx;
-    
-    .address-item {
-      background: #fff;
-      border-radius: 12rpx;
-      padding: 30rpx;
-      margin-bottom: 20rpx;
-      
-      .address-info {
-        .user-info {
-          margin-bottom: 16rpx;
-          
-          .name {
-            font-size: 32rpx;
-            font-weight: bold;
-            margin-right: 20rpx;
-          }
-          
-          .phone {
-            font-size: 28rpx;
-            color: #666;
-          }
-          
-          .default-tag {
-            background: #D93025;
-            color: #fff;
-            font-size: 20rpx;
-            padding: 4rpx 12rpx;
-            border-radius: 4rpx;
-            margin-left: 20rpx;
-          }
-        }
-        
-        .address-detail {
-          font-size: 28rpx;
-          color: #333;
-          line-height: 1.4;
-        }
-      }
-      
-      .operation {
-        display: flex;
-        justify-content: flex-end;
-        margin-top: 20rpx;
-        border-top: 1rpx solid #eee;
-        padding-top: 20rpx;
-        
-        .edit, .delete {
-          padding: 10rpx 20rpx;
-        }
-      }
-    }
-  }
-  
-  .add-btn {
-    position: fixed;
-    bottom: 0;
-    left: 0;
-    right: 0;
-    padding: 20rpx 40rpx;
-    background: #fff;
-  }
-  
-  .empty-tips {
-    font-size: 28rpx;
-    color: #999;
-    margin-top: 20rpx;
-  }
-}
-</style> 

+ 0 - 78
packageShop/pages/article/detail.vue

@@ -1,78 +0,0 @@
-<template>
-  <view class="article-container">
-    <!-- 标题 -->
-    <view class="article-title">{{title}}</view>
-    <!-- 时间 -->
-    <view class="article-time">{{updateTime}}</view>
-    <!-- 富文本内容展示 -->
-    <rich-text :nodes="content"></rich-text>
-  </view>
-</template>
-
-<script>
-import { indexmenuDetail } from '@/config/api.js';
-
-export default {
-  data() {
-    return {
-      content: '', // 富文本内容
-      title: '', // 文章标题
-      updateTime: '', // 更新时间
-      id: '' // 文章ID
-    }
-  },
-  
-  onLoad(options) {
-    if (options.id) {
-      this.id = options.id;
-      this.getArticleDetail();
-    }
-  },
-  
-  methods: {
-    // 获取文章详情
-    getArticleDetail() {
-      indexmenuDetail(this.id).then(res => {
-        if (res.code === 200) {
-          const detail = res.data;
-          this.title = detail.title;
-          this.content = detail.context;
-          this.updateTime = detail.updateTime;
-        } else {
-          uni.showToast({
-            title: res.msg || '获取文章详情失败',
-            icon: 'none'
-          });
-        }
-      }).catch(err => {
-        console.error('获取文章详情失败:', err);
-        uni.showToast({
-          title: '获取文章详情失败',
-          icon: 'none'
-        });
-      });
-    }
-  }
-}
-</script>
-
-<style lang="scss">
-.article-container {
-  padding: 30rpx;
-  background: #fff;
-  min-height: 100vh;
-}
-
-.article-title {
-  font-size: 36rpx;
-  font-weight: bold;
-  color: #333;
-  margin-bottom: 20rpx;
-}
-
-.article-time {
-  font-size: 24rpx;
-  color: #999;
-  margin-bottom: 30rpx;
-}
-</style> 

+ 0 - 684
packageShop/pages/cart/index.vue

@@ -1,684 +0,0 @@
-<template>
-	<view class="cart-container">
-		<!-- 添加动画小球 -->
-		<view class="cart-ball" :class="{ active: ballShow }" :style="ballStyle" v-show="ballShow">
-			<view class="inner"></view>
-		</view>
-		<!-- 顶部导航栏 -->
-		<view class="cart-header">
-			<text class="header-title"></text>
-			<text class="manage-btn" @tap="toggleManageMode">{{isManageMode ? '完成' : '管理'}}</text>
-		</view>
-
-		<!-- 购物车为空时显示 -->
-		<view class="empty-cart" v-if="list.length === 0">
-			<image src="/static/empty-cart.png" mode="aspectFit"></image>
-			<view class="flex-items-plus">
-				<image src="/static/images/empty.png" class="empty"></image>
-			</view>
-			<view class="empty-text">购物车是空的</view>
-			<button class="go-shopping-btn" @tap="goShopping">去逛逛</button>
-		</view>
-
-		<!-- 购物车有商品时显示 -->
-		<view class="cart-content" v-else>
-			<!-- 商品列表 -->
-			<view class="cart-list">
-				<view class="cart-item" :class="{ 'out-of-stock': !item.stock || item.stock <= 0 }" v-for="(item, index) in list" :key="index">
-					<checkbox :checked="item.selected" @tap="toggleSelect(index)" :color="'#ff6b81'"></checkbox>
-					<view class="item-content" @tap="goToProductDetail(item)">
-						<image :src="item.images" mode="aspectFill"></image>
-						<view class="item-info">
-							<view class="title">{{item.productName}}</view>
-							<view class="sku-name">
-								<text>
-									规格:
-								</text>
-								<text>
-									{{item.skuName}}
-								</text>
-							</view>
-							<view class="stock-info">
-								<text class="stock-text">库存:{{item.stock || 0}}件</text>
-								<text class="stock-warning" v-if="!item.stock || item.stock <= 0">(库存不足)</text>
-							</view>
-							<view class="price-quantity">
-								<text class="price">¥{{item.price}}</text>
-								<view class="quantity-control" v-if="!isManageMode" @tap.stop="">
-									<text class="minus" @tap="decreaseQuantity(index)">-</text>
-									<input type="number" v-model="item.count" @blur="updateQuantity(index)" />
-									<text class="plus" 
-										:class="{ 'disabled': !item.stock || item.stock <= 0 || item.count >= item.stock }"
-										@tap="increaseQuantity(index)">+</text>
-								</view>
-							</view>
-						</view>
-					</view>
-					<view class="delete-icon" @tap="deleteItem(index)" v-if="!isManageMode">
-						<uni-icons type="close" size="28"></uni-icons>
-					</view>
-				</view>
-			</view>
-
-			<!-- 底部结算栏 -->
-			<view class="cart-footer">
-				<view class="select-all">
-					<checkbox :checked="isAllSelected" @tap="toggleSelectAll" :color="'#ff6b81'"></checkbox>
-					<text>全选</text>
-				</view>
-				<view class="right-section" v-if="!isManageMode">
-					<view class="total-info">
-						<text>合计:</text>
-						<text class="total-price">¥{{totalPrice}}</text>
-					</view>
-					<button class="checkout-btn" @tap="checkout">结算({{selectedCount}})</button>
-				</view>
-				<view class="right-section" v-else>
-					<view class="total-info">
-						<text>已选:</text>
-						<text class="selected-count">{{selectedCount}}件</text>
-					</view>
-					<button class="delete-btn delete-btn-outline" @tap="batchDelete">删除</button>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	import {
-		productCartList,
-		productCartCount,
-		productCartSave,
-		productCartRemoveIds,
-		saveCartOrder,
-		productCartTotalPrice
-	} from '../../../config/api.js';
-	import {
-		mapGetters
-	} from 'vuex';
-
-	export default {
-		computed: {
-			...mapGetters(['isLogin'])
-		},
-		data() {
-			return {
-				list: [], // 购物车商品列表
-				isLoading: false, // 是否正在加载
-				noMoreData: false, // 是否没有更多数据
-				isManageMode: false, // 是否为管理模式
-				params: {
-					current: 1,
-					size: 10
-				},
-				totalPrice: '0.00', // 购物车总价
-				// 添加小球动画相关数据
-				ballShow: false,
-				ballStyle: {
-					left: '0px',
-					top: '0px'
-				}
-			}
-		},
-		computed: {
-			// 是否全选
-			isAllSelected() {
-				return this.list.length > 0 && this.list.every(item => item.selected);
-			},
-			// 已选商品数量
-			selectedCount() {
-				return this.list.filter(item => item.selected).length;
-			},
-			// 计算当前总价
-			currentTotalPrice() {
-				return this.list.reduce((total, item) => {
-					if (item.selected) {
-						return total + (Number(item.price) * Number(item.count));
-					}
-					return total;
-				}, 0).toFixed(2);
-			}
-		},
-		onShow() {
-			// // 页面显示时获取购物车数据
-			// if (this.isLogin) {
-			this.getList()
-			// } else {
-			// 	this.$Router.push({
-			// 		path: '/pages/user/login'
-			// 	})
-			// }
-		},
-		onReachBottom() {
-			if (!this.isLoading && !this.noMoreData) {
-				this.getList();
-			}
-		},
-		methods: {
-			// 获取购物车列表
-			async getList() {
-				if (this.isLoading) return;
-				this.isLoading = true;
-
-				try {
-					const res = await productCartList(this.params);
-					if (res.code === 200) {
-						const records = res.data.records || [];
-						records.forEach(item => {
-							item.selected = false; // 添加选中状态属性
-						});
-
-						if (this.params.current === 1) {
-							this.list = records;
-						} else {
-							this.list = [...this.list, ...records];
-						}
-
-						this.noMoreData = records.length < this.params.size;
-						this.params.current++;
-
-						// 获取购物车总价
-						this.getTotalPrice();
-					}
-				} catch (error) {
-					console.error('获取购物车列表失败:', error);
-					uni.$u.toast('获取购物车列表失败');
-				} finally {
-					this.isLoading = false;
-				}
-			},
-
-			// 获取购物车总价
-			async getTotalPrice() {
-				try {
-					// 由于我们现在基于选中状态计算价格,直接使用计算属性
-					this.totalPrice = this.currentTotalPrice;
-				} catch (error) {
-					console.error('获取购物车总价失败:', error);
-				}
-			},
-
-			// Toggle manage mode
-			toggleManageMode() {
-				this.isManageMode = !this.isManageMode;
-				// Reset selection when exiting manage mode
-				if (!this.isManageMode) {
-					this.list.forEach(item => item.selected = false);
-				}
-			},
-
-			// Batch delete selected items
-			async batchDelete() {
-				const selectedItems = this.list.filter(item => item.selected);
-				if (selectedItems.length === 0) {
-					uni.showToast({
-						title: '请选择要删除的商品',
-						icon: 'none'
-					});
-					return;
-				}
-
-				uni.showModal({
-					title: '提示',
-					content: '确定要删除选中的商品吗?',
-					success: async (res) => {
-						if (res.confirm) {
-							try {
-								const ids = selectedItems.map(item => item.id).join(',');
-								const res = await productCartRemoveIds(ids);
-								if (res.code === 200) {
-									// Remove deleted items from list
-									this.list = this.list.filter(item => !item.selected);
-									// 更新前端总价
-									this.totalPrice = this.currentTotalPrice;
-									uni.$u.toast('删除成功');
-									// Exit manage mode if no items left
-									if (this.list.length === 0) {
-										this.isManageMode = false;
-									}
-								}
-							} catch (error) {
-								console.error('批量删除失败:', error);
-								uni.$u.toast('删除失败');
-							}
-						}
-					}
-				});
-			},
-
-			// Toggle select item
-			toggleSelect(index) {
-				this.list[index].selected = !this.list[index].selected;
-				this.totalPrice = this.currentTotalPrice;
-			},
-
-			// Toggle select all
-			toggleSelectAll() {
-				const newStatus = !this.isAllSelected;
-				this.list.forEach(item => {
-					item.selected = newStatus;
-				});
-				this.totalPrice = this.currentTotalPrice;
-			},
-
-			// Delete single item
-			async deleteItem(index) {
-				uni.showModal({
-					title: '提示',
-					content: '确定要删除这个商品吗?',
-					success: async (res) => {
-						if (res.confirm) {
-							try {
-								const response = await productCartRemoveIds(this.list[index].id);
-								if (response.code === 200) {
-									// Remove item from list
-									this.list.splice(index, 1);
-									// 更新前端总价
-									this.totalPrice = this.currentTotalPrice;
-									uni.$u.toast('删除成功');
-								}
-							} catch (error) {
-								console.error('删除失败:', error);
-								uni.$u.toast('删除失败');
-							}
-						}
-					}
-				});
-			},
-
-			// Increase quantity
-			async increaseQuantity(index) {
-				const item = this.list[index];
-				const newCount = Number(item.count) + 1;
-				
-				// 检查库存
-				if (!item.stock || item.stock <= 0) {
-					uni.$u.toast('该商品库存不足');
-					return;
-				}
-				
-				if (newCount > item.stock) {
-					uni.$u.toast(`该商品库存仅剩${item.stock}件`);
-					return;
-				}
-				
-				await this.updateItemQuantity(index, newCount);
-			},
-
-			// Decrease quantity
-			async decreaseQuantity(index) {
-				const item = this.list[index];
-				if (Number(item.count) > 1) {
-					const newCount = Number(item.count) - 1;
-					await this.updateItemQuantity(index, newCount);
-				}
-			},
-
-			// Update quantity
-			async updateQuantity(index) {
-				const item = this.list[index];
-				const newCount = Number(item.count);
-				
-				if (newCount < 1) {
-					item.count = 1;
-					return;
-				}
-				
-				// 检查库存
-				if (!item.stock || item.stock <= 0) {
-					uni.$u.toast('该商品库存不足');
-					item.count = 0;
-					return;
-				}
-				
-				if (newCount > item.stock) {
-					uni.$u.toast(`该商品库存仅剩${item.stock}件,已调整为最大可购买数量`);
-					item.count = item.stock;
-					await this.updateItemQuantity(index, item.stock);
-					return;
-				}
-				
-				await this.updateItemQuantity(index, newCount);
-			},
-
-			// Update item quantity in backend
-			async updateItemQuantity(index, newCount) {
-				const item = this.list[index];
-				try {
-					const res = await productCartSave({
-						id: item.id,
-						count: newCount
-					});
-					if (res.code === 200) {
-						// Update item count
-						item.count = newCount;
-						// Update total price
-						this.getTotalPrice();
-					}
-				} catch (error) {
-					console.error('更新数量失败:', error);
-					uni.$u.toast('更新数量失败');
-				}
-			},
-
-			// Go shopping
-			goShopping() {
-				uni.switchTab({
-					url: '/pages/shop/product-type-list'
-				})
-			},
-
-			// 跳转到商品详情页
-			goToProductDetail(item) {
-				if (item.productId) {
-					uni.navigateTo({
-						url: `/packageShop/pages/detail/index?id=${item.productId}`
-					});
-				}
-			},
-
-			// Checkout
-			checkout() {
-				const selectedItems = this.list.filter(item => item.selected);
-				if (selectedItems.length === 0) {
-					uni.showToast({
-						title: '请选择要结算的商品',
-						icon: 'none'
-					});
-					return;
-				}
-
-				// 检查选中商品的库存
-				for (let item of selectedItems) {
-					if (!item.stock || item.stock <= 0) {
-						uni.showToast({
-							title: `商品"${item.productName}"库存不足,请先删除或更换`,
-							icon: 'none',
-							duration: 3000
-						});
-						return;
-					}
-					
-					if (Number(item.count) > item.stock) {
-						uni.showToast({
-							title: `商品"${item.productName}"数量超出库存,库存仅剩${item.stock}件`,
-							icon: 'none',
-							duration: 3000
-						});
-						return;
-					}
-				}
-
-				// 跳转到结算页面
-				uni.navigateTo({
-					url: `/packageShop/pages/settle/index?items=${encodeURIComponent(JSON.stringify(selectedItems))}`
-				});
-			}
-		}
-	}
-</script>
-
-<style>
-	.cart-container {
-		min-height: 100vh;
-		background-color: #f8f8f8;
-		padding-bottom: 120rpx;
-	}
-
-	.cart-header {
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-		padding: 20rpx 30rpx;
-		background-color: #fff;
-	}
-
-	.header-title {
-		font-size: 32rpx;
-		font-weight: bold;
-	}
-
-	.manage-btn {
-		font-size: 28rpx;
-		color: #666;
-	}
-
-	.empty-cart {
-		display: flex;
-		flex-direction: column;
-		align-items: center;
-		padding-top: 200rpx;
-	}
-
-	.empty-cart image {
-		width: 200rpx;
-		height: 200rpx;
-		margin-bottom: 30rpx;
-	}
-
-	.empty-text {
-		font-size: 28rpx;
-		color: #999;
-		margin-bottom: 40rpx;
-	}
-
-	.go-shopping-btn {
-		width: 240rpx;
-		height: 80rpx;
-		line-height: 80rpx;
-		text-align: center;
-		background-color: #F95B5B;
-		color: #fff;
-		border-radius: 40rpx;
-		font-size: 28rpx;
-	}
-
-	.cart-list {
-		padding: 20rpx;
-	}
-
-	.cart-item {
-		display: flex;
-		align-items: center;
-		background-color: #fff;
-		padding: 20rpx;
-		margin-bottom: 20rpx;
-		border-radius: 12rpx;
-	}
-
-	.cart-item.out-of-stock {
-		background-color: #f9f9f9;
-		opacity: 0.8;
-	}
-
-	.cart-item.out-of-stock .item-content image {
-		opacity: 0.6;
-	}
-
-	.item-content {
-		display: flex;
-		flex: 1;
-		margin-left: 20rpx;
-		cursor: pointer;
-	}
-
-	.item-content:active {
-		opacity: 0.8;
-	}
-
-	.item-content image {
-		width: 160rpx;
-		height: 160rpx;
-		border-radius: 8rpx;
-	}
-
-	.item-info {
-		flex: 1;
-		margin-left: 20rpx;
-	}
-
-	.title {
-		font-size: 28rpx;
-		color: #333;
-		margin-bottom: 10rpx;
-	}
-
-	.sku-name {
-		font-size: 24rpx;
-		color: #999;
-		margin-bottom: 10rpx;
-	}
-
-	.stock-info {
-		font-size: 24rpx;
-		margin-bottom: 20rpx;
-	}
-
-	.stock-text {
-		color: #666;
-	}
-
-	.stock-warning {
-		color: #ff6b81;
-		font-weight: bold;
-	}
-
-	.price-quantity {
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-	}
-
-	.price {
-		font-size: 32rpx;
-		color: #ff6b81;
-		font-weight: bold;
-	}
-
-	.quantity-control {
-		display: flex;
-		align-items: center;
-		border: 1rpx solid #eee;
-		border-radius: 6rpx;
-	}
-
-	.minus,
-	.plus {
-		width: 60rpx;
-		height: 60rpx;
-		line-height: 60rpx;
-		text-align: center;
-		font-size: 36rpx;
-		color: #666;
-	}
-
-	.plus.disabled {
-		color: #ccc;
-		background-color: #f5f5f5;
-	}
-
-	.quantity-control input {
-		width: 80rpx;
-		height: 60rpx;
-		text-align: center;
-		font-size: 28rpx;
-		border-left: 1rpx solid #eee;
-		border-right: 1rpx solid #eee;
-	}
-
-	.delete-icon {
-		padding: 20rpx;
-	}
-
-	.cart-footer {
-		position: fixed;
-		bottom: 0;
-		left: 0;
-		right: 0;
-		height: 100rpx;
-		background-color: #fff;
-		display: flex;
-		align-items: center;
-		padding: 0 30rpx;
-		box-shadow: 0 -2rpx 10rpx rgba(0, 0, 0, 0.05);
-	}
-
-	.select-all {
-		display: flex;
-		align-items: center;
-	}
-
-	.select-all text {
-		font-size: 28rpx;
-		color: #333;
-		margin-left: 10rpx;
-	}
-
-	.right-section {
-		flex: 1;
-		display: flex;
-		justify-content: flex-end;
-		align-items: center;
-	}
-
-	.total-info {
-		margin-right: 30rpx;
-	}
-
-	.total-price {
-		font-size: 36rpx;
-		color: #ff6b81;
-		font-weight: bold;
-	}
-
-	.checkout-btn {
-		width: 200rpx;
-		height: 80rpx;
-		line-height: 80rpx;
-		text-align: center;
-		background-color: #F95B5B;
-		color: #fff;
-		border-radius: 40rpx;
-		font-size: 28rpx;
-	}
-
-	.delete-btn {
-		width: 200rpx;
-		height: 80rpx;
-		line-height: 80rpx;
-		text-align: center;
-		background-color: #ff6b81;
-		color: #fff;
-		border-radius: 40rpx;
-		font-size: 28rpx;
-	}
-
-	.delete-btn-outline {
-		background-color: #fff;
-		color: #ff6b81;
-		border: 1rpx solid #ff6b81;
-	}
-
-	/* 购物车动画小球样式 */
-	.cart-ball {
-		position: fixed;
-		left: -18px;
-		top: 0;
-		z-index: 999;
-		transition: all 0.4s cubic-bezier(0.49, -0.29, 0.75, 0.41);
-		opacity: 0;
-	}
-
-	.cart-ball.active {
-		opacity: 1;
-	}
-
-	.cart-ball .inner {
-		width: 16px;
-		height: 16px;
-		border-radius: 50%;
-		background-color: #ff6b81;
-		transition: all 0.4s linear;
-	}
-</style>

+ 0 - 945
packageShop/pages/detail/index.vue

@@ -1,945 +0,0 @@
-<!-- 商品的详情页 -->
-<template>
-	<view class="">
-		<u-navbar leftIconColor="#888888" autoBack :bgColor="bgColor" :title="navTitle"
-			titleStyle="color: #000000"></u-navbar>
-		<!-- 添加动画小球 -->
-		<view class="cart-ball" :class="{ active: ballShow }" :style="ballStyle" v-show="ballShow">
-			<view class="inner"></view>
-		</view>
-		<!-- 产品主图轮播 -->
-		<swiper class="swiper" :style="{height: '750rpx'}" :indicator-dots="true" :autoplay="true" :interval="3500"
-			@change="e => (currentNum = e.detail.current)">
-			<swiper-item v-for="(item, index) in imageList" :key="index">
-				<image :src="item" mode="aspectFill" style="width: 100%; height: 100%;"></image>
-			</swiper-item>
-		</swiper>
-
-		<!-- 商品信息 -->
-		<view class="product-info">
-			<view class="product-main">
-				<!-- 价格区域 -->
-				<view class="price-section">
-					<text class="current-price">¥{{detail.price}}</text>
-					<text class="price-suffix" v-if="skuNum != 0">起</text>
-					<text class="original-price">¥{{detail.originalPrice}}</text>
-				</view>
-
-				<!-- 商品名称 -->
-				<text class="product-name">{{detail.name}}</text>
-
-				<!-- 销量库存信息 -->
-				<view class="product-stats">
-					<text class="stat-item">销量 {{detail.salesTotal}}件</text>
-					<view class="divider"></view>
-					<text class="stat-item">剩余 {{detail.stock}}件</text>
-				</view>
-			</view>
-
-			<!-- 分享按钮 -->
-			<view class="share-section">
-				<button open-type="share" class="share-btn">
-					<u-icon name="share" size="22" label="分享" labelPos="bottom" labelSize="12"></u-icon>
-				</button>
-			</view>
-		</view>
-
-		<!-- 商品属性 -->
-		<view class="productStats">
-			<view class="mar-b-30">
-				<text class="font28">服务</text>
-				<text class="font28 font-666 mar-lr-32 flex-1">快递:免运费</text>
-			</view>
-			<view @click="skuPopUp">
-				<view class="mar-b-20 flex-items flex-sp-between">
-					<view>
-						<text class="font28">选择</text>
-						<text class="font28 font-666 mar-lr-32 flex-1">规格</text>
-					</view>
-					<view class="mar-r-8">
-						<view class="flex-items">
-							<view class="guige">
-								共{{skuNum}}种规格可选
-							</view>
-							<uni-icons color="#d0d7df" type="right" size="20"></uni-icons>
-						</view>
-					</view>
-				</view>
-				<view class="mar-b-30 mar-lr-64 flex-items">
-					<view v-for="(item,index) in detail.sku">
-						<image class="skuImg" :src="item.skuImage" mode="aspectFit"></image>
-					</view>
-				</view>
-			</view>
-
-			<view>
-				<text class="font28">参数</text>
-				<text class="font28 font-666 mar-lr-32 flex-1">{{detail.parameter}}</text>
-			</view>
-		</view>
-
-		<!-- 评价 -->
-		<view class="productStats" @click="goScore">
-			<view class="flex-items flex-sp-between">
-				<view class="font30 font-bold">
-					评价 ({{scoreList.length}})
-				</view>
-				<view class="mar-r-16">
-					<uni-icons color="#d0d7df" type="right" size="20"></uni-icons>
-				</view>
-			</view>
-
-			<view class="mar-b-30 mar-t-40" v-for="(item,index) in scoreList" :key="index">
-				<view class="flex-items flex-sp-between">
-					<view class="flex-items">
-						<view class="mar-r-14">
-							<image class="avatar" :src="item.avatar||'../../../static/images/avatar.png'"
-								mode="aspectFill">
-							</image>
-						</view>
-						<view class="font28">
-							{{item.account}}
-							<uni-rate activeColor="#E2A28A" size="16" :value="item.score" allow-half />
-						</view>
-					</view>
-					<view class="font-gray mar-r-14">
-						{{item.scoreTime}}
-					</view>
-				</view>
-				<view class="mar-t-30 font28 mar-l-80">
-					{{item.content}}
-				</view>
-				<view class="flex-items mar-l-80">
-					<view class="mar-t-30 font28 mar-r-14" v-for="(item,index) in item.imgList">
-						<image v-if="item&&index<3" class="scoreImg" :src="item" mode="aspectFit"></image>
-					</view>
-				</view>
-			</view>
-		</view>
-
-		<!-- 详情和规格 -->
-		<view class="bg-white font32 pad-32 text-align font-gray">
-			—— 商品详情 ——
-		</view>
-		<view class="bg-white">
-			<u-parse :content="detail.context" :tagStyle="style"></u-parse>
-		</view>
-		<view class="height104"></view>
-
-		<!-- 底部操作栏 -->
-		<view class="navigation">
-			<view class="flex">
-				<view class="left">
-					<view class="item" @tap="goOrder">
-						<u-icon name="order" size="22"></u-icon>
-						<view class="text u-line-1">订单</view>
-					</view>
-					<view class="item" @tap="goCart">
-						<view class="cart-icon-wrapper">
-							<u-icon name="shopping-cart" size="24"></u-icon>
-							<view class="cart-badge" v-if="cartCount > 0">{{cartCount}}</view>
-						</view>
-						<view class="text u-line-1">购物车</view>
-					</view>
-					<view class="item" @click="handlerCollect">
-						<u-icon :name="isCollect? 'star-fill' :'star'" :color="isCollect? '#F95B5B' : ''"
-							size="22"></u-icon>
-						<view class="text u-line-1">收藏</view>
-					</view>
-				</view>
-				<view class="right">
-					<view class="cart cartBtn u-line-1" :class="{ 'disabled': !detail.stock || detail.stock <= 0 }"
-						@click="addCart">加入购物车</view>
-					<view class="buy buyBtn u-line-1" :class="{ 'disabled': !detail.stock || detail.stock <= 0 }"
-						@click="goPay">立即购买</view>
-				</view>
-			</view>
-
-			<!-- 规格选择弹窗 -->
-			<uni-popup borderRadius="20rpx 20rpx 0 0" ref="popup" background-color="#fff">
-				<view class="popup">
-					<view class="flex-items">
-						<view>
-							<image class="prpupImg" :src="skuSelect.skuImage" mode="aspectFit"
-								@click="previewImage(skuSelect.skuImage)"></image>
-						</view>
-						<view class="mar-l-20">
-							<view class="font32 pad-b-24">
-								{{detail.name}}
-							</view>
-							<view class="pad-t-10">
-								<text class="font40 font-red font-bold">¥{{skuSelect.price}}</text>
-							</view>
-							<view class="pad-t-15">
-								<text class="font28 font-gray">剩余{{skuSelect.skuStock}}件</text>
-							</view>
-						</view>
-					</view>
-					<!-- 线条 -->
-					<view class="gray-line mar-tb-8"></view>
-					<view class="font38 font-bold mar-tb-20">
-						请选择规格
-					</view>
-					<view class="flex-container">
-						<view class="hotBg"
-							:style="selectId==item.id ? {backgroundColor: '#F2D0A2' } : {backgroundColor: '#ebebeb' }"
-							v-for="(item, index) in detail.sku" :key="index" @click="selectRadio(item,index)">
-							<view class="font28 ">
-								{{item.skuName}}
-							</view>
-						</view>
-					</view>
-
-					<view class="flex-items flex-sp-between mar-b-60">
-						<view class="mar-l-16 font32">
-							购买数量
-						</view>
-						<view class="mar-r-16">
-							<u-number-box v-model="count"></u-number-box>
-						</view>
-						<button class="fixed-button" @click="goSettle">{{popupText}}</button>
-					</view>
-				</view>
-			</uni-popup>
-			<u-safe-bottom></u-safe-bottom>
-		</view>
-	</view>
-</template>
-
-<script>
-	import {
-		mapMutations,
-		mapActions,
-		mapGetters
-	} from 'vuex';
-	import {
-		productCartCount,
-		productDetail,
-		productAddCollect,
-		productClearCollect,
-		scoreList,
-		productCartSave
-	} from '../../../config/api.js';
-	import {
-		MAIN_COLOR
-	} from '../../../common/config.js'
-	export default {
-		computed: {
-			...mapGetters(['isLogin']),
-			navTitle() {
-				return this.bgColor !== 'transparent' ? '商品详情' : ''
-			},
-			navIconColor() {
-				return this.bgColor !== 'transparent' ? '#FFFFFF' : '#cecece'
-			}
-		},
-		data() {
-			return {
-				count: 1,
-				skuNum: 0,
-				popupText: "立即购买",
-				selectId: "",
-				skuSelect: {},
-				bgColor: 'transparent',
-				currentSkuText: '',
-				currentNum: 0,
-				buyType: 'sku',
-				params: {
-					current: 1,
-					size: 2,
-					productId: "",
-					images: 1
-				},
-				imgList: [],
-				isCollect: false,
-				list: ['商品详情'],
-				curNow: 0,
-				radios: [],
-				detail: {},
-				imageList: [],
-				scoreList: [],
-				user: {},
-				cartCount: 0,
-				style: {
-					img: 'width: 100%; vertical-align: top;',
-				},
-				showShare: false,
-				ballShow: false,
-				ballStyle: {
-					left: '0px',
-					top: '0px'
-				}
-			};
-		},
-		onPageScroll(e) {
-			if (e.scrollTop >= 100) {
-				this.bgColor = "#FFF"
-			} else {
-				this.bgColor = 'transparent'
-			}
-		},
-		onLoad(opt) {
-			this.params.productId = opt.id
-			this.getDetail(this.params.productId)
-			this.getScoreList()
-			if (this.isLogin) {
-				this.getCartCount()
-			}
-			setTimeout(() => {
-				if (opt.skuId) {
-					this.onceOrder(opt.skuId)
-				}
-			}, 300)
-		},
-		// 分享功能
-		onShareAppMessage() {
-			return {
-				title: this.detail.name || '商品详情',
-				path: `/packageShop/pages/detail/index?id=${this.params.productId}`,
-				imageUrl: this.imageList && this.imageList.length > 0 ? this.imageList[0] : ''
-			}
-		},
-		methods: {
-			goCart() {
-				if (!this.isLogin) {
-					uni.navigateTo({
-						url: '/packageUser/pages/login/index'
-					});
-					return;
-				}
-				this.$route('/packageShop/pages/cart/index')
-			},
-			goOrder() {
-				if (!this.isLogin) {
-					uni.navigateTo({
-						url: '/packageUser/pages/login/index'
-					});
-					return;
-				}
-				this.$route('/packageOrder/pages/list/index?status=0')
-			},
-			getCartCount() {
-				if (!this.isLogin) return;
-				productCartCount().then((res) => {
-					this.cartCount = res.data
-				})
-			},
-			goSettle() {
-				if (this.buyType === 'buy') {
-					if (!this.skuSelect || !this.skuSelect.id) {
-						return uni.$u.toast('请选择商品规格');
-					}
-					// 检查选中规格的库存
-					if (!this.skuSelect.skuStock || this.skuSelect.skuStock <= 0) {
-						return uni.$u.toast('该规格库存不足,无法购买');
-					}
-					// 检查购买数量是否超过库存
-					if (this.count > this.skuSelect.skuStock) {
-						return uni.$u.toast(`该规格仅剩${this.skuSelect.skuStock}件,请调整购买数量`);
-					}
-					if (!this.isLogin) {
-						uni.navigateTo({
-							url: '/packageUser/pages/login/index'
-						});
-						return;
-					}
-					this.skuSelect.count = this.count;
-					this.skuSelect.productName = this.detail.name;
-					const sku = JSON.stringify(this.skuSelect);
-					uni.navigateTo({
-						url: `/packageShop/pages/settle/index?sku=${encodeURIComponent(sku)}`,
-					});
-				} else {
-					if (!this.skuSelect || !this.skuSelect.id) {
-						return uni.$u.toast('请选择商品规格');
-					}
-					// 检查选中规格的库存
-					if (!this.skuSelect.skuStock || this.skuSelect.skuStock <= 0) {
-						return uni.$u.toast('该规格库存不足,无法加入购物车');
-					}
-					// 检查购买数量是否超过库存
-					if (this.count > this.skuSelect.skuStock) {
-						return uni.$u.toast(`该规格仅剩${this.skuSelect.skuStock}件,请调整数量`);
-					}
-					if (!this.isLogin) {
-						uni.navigateTo({
-							url: '/packageUser/pages/login/index'
-						});
-						return;
-					}
-					productCartSave({
-						skuId: this.skuSelect.id,
-						count: this.count
-					}).then((res) => {
-						if (res.code == 200) {
-							this.startAddCartAnim();
-							this.$refs.popup.close();
-							this.getCartCount();
-							uni.$u.toast("加入购物车成功");
-						}
-					})
-				}
-			},
-			goScore() {
-				this.$route('/packageOrder/pages/score/product-score?productId=' + this.params.productId)
-			},
-			skuPopUp(buyType) {
-				this.$refs.popup.open("bottom")
-				this.buyType = buyType;
-				this.skuSelect = this.detail.sku[0]
-				this.selectId = this.skuSelect.id
-			},
-			onceOrder(skuId) {
-				console.log(skuId, "skuid")
-				this.$refs.popup.open("bottom");
-				this.buyType = "buy";
-				const matchedSku = this.detail.sku.find(item => item.id === skuId);
-				if (matchedSku) {
-					this.skuSelect = matchedSku;
-					this.selectId = this.skuSelect.id;
-				} else {
-					uni.$u.toast("该规格已下架")
-				}
-			},
-			getScoreList() {
-				scoreList(this.params).then((res) => {
-					this.scoreList = res.data.records
-					this.scoreList.forEach(item => {
-						item.imgList = item.images.split(",")
-					})
-				})
-			},
-			async getDetail(id) {
-				uni.showLoading({
-					title: '加载中...',
-					mask: true
-				});
-				try {
-					const res = await productDetail({
-						id
-					})
-					if (res.code === 200) {
-						this.detail = res.data
-						this.skuNum = this.detail.sku.length
-						this.imageList = res.data.carouselImg.split(",");
-						this.isCollect = res.data.isCollect
-					} else if (res.code === 401) {
-						uni.navigateTo({
-							url: '/packageUser/pages/login/index'
-						});
-					}
-				} catch (e) {
-					console.error('获取商品详情失败:', e);
-					if (e.code === 401) {
-						uni.navigateTo({
-							url: '/packageUser/pages/login/index'
-						});
-					} else {
-						uni.$u.toast('获取商品详情失败');
-					}
-				}
-				uni.hideLoading()
-			},
-			navigationTo(routerName) {
-				if (routerName) {
-					this.$route(routerName);
-				}
-			},
-			async handlerCollect() {
-				if (this.isCollect) {
-					try {
-						await productClearCollect({
-							productId: this.params.productId
-						})
-						this.$u.toast('取消收藏成功!')
-						this.isCollect = !this.isCollect
-					} catch (e) {
-						this.$u.toast('取消收藏失败!')
-					}
-				} else {
-					try {
-						await productAddCollect({
-							productId: this.params.productId
-						})
-						this.$u.toast('收藏成功!')
-						this.isCollect = !this.isCollect
-					} catch (e) {
-						this.$u.toast('收藏失败!')
-					}
-				}
-			},
-			addCart() {
-				// 检查商品总库存
-				if (!this.detail.stock || this.detail.stock <= 0) {
-					return uni.$u.toast('商品库存不足,暂不能加入购物车');
-				}
-				this.skuPopUp('cart')
-				this.popupText = "加入购物车"
-			},
-			goPay() {
-				// 检查商品总库存
-				if (!this.detail.stock || this.detail.stock <= 0) {
-					return uni.$u.toast('商品库存不足,暂不能购买');
-				}
-				this.skuPopUp('buy')
-				this.popupText = "立即购买"
-			},
-			sectionChange(index) {
-				this.curNow = index;
-			},
-			selectRadio(item, index) {
-				this.selectId = item.id;
-				this.skuSelect = this.detail.sku[index]
-			},
-			// 预览图片
-			previewImage(imageSrc) {
-				uni.previewImage({
-					urls: [imageSrc],
-					current: imageSrc
-				});
-			},
-			startAddCartAnim() {
-				const query = uni.createSelectorQuery();
-				query.select('.prpupImg').boundingClientRect();
-				query.select('.cart-icon-wrapper').boundingClientRect();
-				query.exec(([productRect, cartRect]) => {
-					if (productRect && cartRect) {
-						const startX = productRect.left + productRect.width / 2;
-						const startY = productRect.top + productRect.height / 2;
-
-						this.ballStyle = {
-							left: startX + 'px',
-							top: startY + 'px'
-						}
-
-						this.ballShow = true;
-
-						setTimeout(() => {
-							this.ballStyle = {
-								left: cartRect.left + cartRect.width / 2 + 'px',
-								top: cartRect.top + cartRect.height / 2 + 'px'
-							}
-
-							setTimeout(() => {
-								this.ballShow = false;
-							}, 450);
-						}, 50);
-					}
-				});
-			},
-		}
-	};
-</script>
-
-<style lang="scss">
-	.popup {
-		position: relative;
-		padding: 30rpx;
-		padding-bottom: 120rpx;
-		/* 给底部按钮留出空间 */
-		background-color: #fff;
-	}
-
-	.prpupImg {
-		border-radius: 20rpx;
-		width: 220rpx;
-		height: 220rpx;
-		cursor: pointer;
-		transition: transform 0.2s ease;
-	}
-
-	.prpupImg:active {
-		transform: scale(0.95);
-	}
-
-	.guige {
-		background-color: #F5F5F5;
-		padding: 10rpx;
-		border-radius: 15rpx;
-	}
-
-	.skuImg {
-		width: 60rpx;
-		height: 60rpx;
-		margin-right: 30rpx;
-	}
-
-	.productStats {
-		margin: 25rpx 15rpx 25rpx 15rpx;
-		border-radius: 20rpx;
-		padding: 32rpx;
-		background-color: #FFFFFF;
-	}
-
-	.vertical-line {
-		margin-left: 20rpx;
-		margin-right: 20rpx;
-		width: 1px;
-		height: 20rpx;
-		background-color: #a8a8a8;
-	}
-
-	.productInfo {
-		background-color: white;
-		padding: 20rpx;
-		margin: 25rpx 15rpx 25rpx 15rpx;
-		border-radius: 20rpx;
-	}
-
-	/* 新的商品信息样式 */
-	.product-info {
-		background-color: #ffffff;
-		padding: 32rpx 24rpx;
-		margin: 24rpx 16rpx;
-		border-radius: 24rpx;
-		box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.06);
-		display: flex;
-		align-items: flex-start;
-		justify-content: space-between;
-	}
-
-	.product-main {
-		flex: 1;
-		margin-right: 24rpx;
-	}
-
-	.price-section {
-		display: flex;
-		align-items: baseline;
-		margin-bottom: 16rpx;
-	}
-
-	.current-price {
-		font-size: 48rpx;
-		font-weight: bold;
-		color: #ff4757;
-		margin-right: 8rpx;
-	}
-
-	.price-suffix {
-		font-size: 28rpx;
-		font-weight: bold;
-		color: #ff4757;
-		margin-right: 16rpx;
-	}
-
-	.original-price {
-		font-size: 28rpx;
-		color: #999999;
-		text-decoration: line-through;
-	}
-
-	.product-name {
-		font-size: 34rpx;
-		font-weight: bold;
-		color: #333333;
-		line-height: 1.4;
-		margin-bottom: 16rpx;
-		display: -webkit-box;
-		-webkit-box-orient: vertical;
-		-webkit-line-clamp: 2;
-		overflow: hidden;
-	}
-
-	.product-stats {
-		display: flex;
-		align-items: center;
-	}
-
-	.stat-item {
-		font-size: 25rpx;
-		color: #666666;
-	}
-
-	.divider {
-		width: 2rpx;
-		height: 24rpx;
-		background-color: #e0e0e0;
-		margin: 0 16rpx;
-	}
-
-	.share-section {
-		flex-shrink: 0;
-	}
-
-	.share-btn {
-		background: #ffffff;
-		border: 2rpx solid #f0f0f0;
-		border-radius: 20rpx;
-		padding: 0;
-		transition: all 0.25s ease;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		width: 80rpx;
-		height: 80rpx;
-		box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.08);
-		position: relative;
-	}
-
-	.share-btn::after {
-		content: '';
-		position: absolute;
-		top: -2rpx;
-		left: -2rpx;
-		right: -2rpx;
-		bottom: -2rpx;
-		background: linear-gradient(45deg, #667eea, #764ba2, #f093fb, #f5576c);
-		border-radius: 20rpx;
-		z-index: -1;
-		opacity: 0;
-		transition: opacity 0.25s ease;
-	}
-
-	.share-btn:active::after {
-		opacity: 1;
-	}
-
-	.share-btn:active {
-		transform: scale(0.92);
-		box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.15);
-		border-color: transparent;
-	}
-
-	.share-btn .u-icon {
-		color: #666666;
-		transition: all 0.25s ease;
-		font-size: 24rpx;
-	}
-
-	.share-btn:active .u-icon {
-		color: #ffffff;
-		transform: rotate(15deg) scale(1.1);
-	}
-
-	.swiper {
-		width: 100%;
-		position: relative;
-	}
-
-	.navigation {
-		position: fixed;
-		bottom: 0;
-		width: 100%;
-		border: solid 2rpx #f2f2f2;
-		background-color: #ffffff;
-		padding: 16rpx 0;
-
-		.flex {
-			display: flex;
-			flex-direction: row;
-
-			.left {
-				width: 40%;
-				display: flex;
-				font-size: 20rpx;
-				justify-content: space-around;
-
-				.item {
-					display: flex;
-					flex-direction: column;
-					justify-content: center;
-					align-items: center;
-					flex: 1;
-
-					.tabbar-slot-icon {
-						width: 44rpx;
-						height: 44rpx;
-						margin: 0 auto;
-					}
-				}
-			}
-
-			.right {
-				width: 60%;
-				display: flex;
-				font-size: 28rpx;
-				align-items: center;
-
-				.cartBtn {
-					width: 210rpx;
-					height: 72rpx;
-					font-size: 28rpx;
-					text-align: center;
-					line-height: 72rpx;
-					border-radius: 36rpx 0rpx 0rpx 36rpx;
-					color: #ffffff;
-				}
-
-				.buyBtn {
-					font-size: 28rpx;
-					width: 210rpx;
-					height: 72rpx;
-					text-align: center;
-					line-height: 72rpx;
-					border-radius: 0rpx 36rpx 36rpx 0rpx;
-					color: #ffffff;
-				}
-
-				.buy {
-					background: #F95B5B
-				}
-
-				.cart {
-					background: #F9AE5B
-				}
-
-				.disabled {
-					background: #cccccc !important;
-					color: #999999 !important;
-					cursor: not-allowed;
-				}
-			}
-		}
-	}
-
-	.gray-line {
-		height: 1px;
-		background-color: #f9f9f9;
-		width: 100%;
-	}
-
-	.flex-container {
-		display: flex;
-		flex-wrap: wrap;
-		margin-bottom: 30rpx;
-	}
-
-	.hotBg {
-		margin-bottom: 10rpx;
-		margin-right: 30rpx;
-		padding: 10px;
-		font-size: 28rpx;
-		border-radius: 5px;
-	}
-
-	.selected {
-		background-color: orange;
-	}
-
-	.fixed-button {
-		position: fixed;
-		bottom: 0;
-		left: 0;
-		width: 100%;
-		padding: 15rpx;
-		background-color: #F95B5B;
-		color: white;
-		border: none;
-	}
-
-	.avatar {
-		width: 70rpx;
-		height: 70rpx;
-		border-radius: 50%;
-		overflow: hidden;
-	}
-
-	.scoreImg {
-		width: 150rpx;
-		height: 150rpx;
-	}
-
-	.cart-icon-wrapper {
-		position: relative;
-		display: inline-block;
-	}
-
-	.cart-badge {
-		position: absolute;
-		top: -10rpx;
-		right: -10rpx;
-		background-color: #FF4B4B;
-		color: #fff;
-		font-size: 20rpx;
-		padding: 2rpx 8rpx;
-		border-radius: 20rpx;
-		min-width: 28rpx;
-		height: 28rpx;
-		text-align: center;
-		line-height: 28rpx;
-	}
-
-	.cart-ball {
-		position: fixed;
-		z-index: 999;
-		pointer-events: none;
-		transition: all 0.45s cubic-bezier(0.49, -0.29, 0.75, 0.41);
-
-		.inner {
-			width: 16px;
-			height: 16px;
-			border-radius: 50%;
-			background: #ff6b81;
-			transition: all 0.45s linear;
-		}
-	}
-
-	.cart-ball.active .inner {
-		animation: ball-circular 0.45s linear;
-	}
-
-	@keyframes ball-circular {
-		0% {
-			transform: scale(1);
-		}
-
-		50% {
-			transform: scale(0.8);
-		}
-
-		100% {
-			transform: scale(0.5);
-		}
-	}
-
-	.custom-share-btn {
-		background: #ffffff;
-		border: 2rpx solid #e3e3e3;
-		border-radius: 20rpx;
-		padding: 0;
-		transition: all 0.25s ease;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		width: 80rpx;
-		height: 80rpx;
-		box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.08);
-		position: relative;
-	}
-
-	.custom-share-btn::after {
-		content: '';
-		position: absolute;
-		top: -2rpx;
-		left: -2rpx;
-		right: -2rpx;
-		bottom: -2rpx;
-		background: linear-gradient(45deg, #667eea, #764ba2, #f093fb, #f5576c);
-		border-radius: 20rpx;
-		z-index: -1;
-		opacity: 0;
-		transition: opacity 0.25s ease;
-	}
-
-	.custom-share-btn:active::after {
-		opacity: 1;
-	}
-
-	.custom-share-btn:active {
-		transform: scale(0.92);
-		box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.15);
-		border-color: transparent;
-	}
-
-	.custom-share-btn .u-icon {
-		color: #666666;
-		transition: all 0.25s ease;
-		font-size: 24rpx;
-	}
-
-	.custom-share-btn:active .u-icon {
-		color: #ffffff;
-		transform: rotate(15deg) scale(1.1);
-	}
-</style>

+ 0 - 224
packageShop/pages/score/index.vue

@@ -1,224 +0,0 @@
-<template>
-  <view class="score-container">
-    <view class="product-info">
-      <image :src="product.image" mode="aspectFill" class="product-image"></image>
-      <view class="product-detail">
-        <view class="product-name">{{product.name}}</view>
-        <view class="product-price">¥{{product.price}}</view>
-      </view>
-    </view>
-
-    <view class="score-form">
-      <view class="score-item">
-        <view class="label">商品评分</view>
-        <u-rate v-model="form.score" count="5" activeColor="#D93025"></u-rate>
-      </view>
-
-      <view class="content-item">
-        <u-textarea
-          v-model="form.content"
-          placeholder="请输入评价内容,分享您的使用体验"
-          height="200"
-          count
-          maxlength="500">
-        </u-textarea>
-      </view>
-
-      <view class="upload-item">
-        <view class="label">上传图片</view>
-        <u-upload
-          :fileList="form.images"
-          @afterRead="afterRead"
-          @delete="deletePic"
-          name="1"
-          multiple
-          maxCount="9">
-        </u-upload>
-      </view>
-
-      <view class="anonymous-item">
-        <text>匿名评价</text>
-        <u-switch v-model="form.isAnonymous" activeColor="#D93025"></u-switch>
-      </view>
-    </view>
-
-    <view class="submit-btn">
-      <u-button type="primary" @click="submit" color="#D93025">提交评价</u-button>
-    </view>
-  </view>
-</template>
-
-<script>
-export default {
-  data() {
-    return {
-      orderId: '',
-      productId: '',
-      product: {
-        image: '',
-        name: '',
-        price: ''
-      },
-      form: {
-        score: 5,
-        content: '',
-        images: [],
-        isAnonymous: false
-      }
-    }
-  },
-  onLoad(options) {
-    this.orderId = options.orderId
-    this.productId = options.productId
-    this.getProductInfo()
-  },
-  methods: {
-    async getProductInfo() {
-      try {
-        const res = await this.$api.product.detail(this.productId)
-        this.product = res.data
-      } catch (e) {
-        this.$u.toast('获取商品信息失败')
-      }
-    },
-    async afterRead(event) {
-      const { file } = event
-      // 当设置 multiple 为 true 时, file 为数组格式
-      const uploadPromises = (Array.isArray(file) ? file : [file]).map(item => {
-        return this.uploadFilePromise(item)
-      })
-
-      try {
-        const urls = await Promise.all(uploadPromises)
-        this.form.images = [...this.form.images, ...urls]
-      } catch (e) {
-        this.$u.toast('上传图片失败')
-      }
-    },
-    uploadFilePromise(file) {
-      return new Promise((resolve, reject) => {
-        uni.uploadFile({
-          url: this.$api.common.uploadUrl,
-          filePath: file.url,
-          name: 'file',
-          success: (res) => {
-            const data = JSON.parse(res.data)
-            resolve(data.url)
-          },
-          fail: reject
-        })
-      })
-    },
-    deletePic(event) {
-      const index = event.index
-      this.form.images.splice(index, 1)
-    },
-    async submit() {
-      if (!this.form.content.trim()) {
-        return this.$u.toast('请输入评价内容')
-      }
-
-      try {
-        await this.$api.order.submitScore({
-          orderId: this.orderId,
-          productId: this.productId,
-          ...this.form
-        })
-        this.$u.toast('评价成功')
-        setTimeout(() => {
-          uni.navigateBack()
-        }, 1500)
-      } catch (e) {
-        this.$u.toast('评价失败')
-      }
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.score-container {
-  min-height: 100vh;
-  background: #f5f5f5;
-  padding-bottom: 120rpx;
-
-  .product-info {
-    background: #fff;
-    padding: 20rpx;
-    display: flex;
-    align-items: center;
-    margin-bottom: 20rpx;
-
-    .product-image {
-      width: 160rpx;
-      height: 160rpx;
-      border-radius: 8rpx;
-      margin-right: 20rpx;
-    }
-
-    .product-detail {
-      flex: 1;
-
-      .product-name {
-        font-size: 28rpx;
-        color: #333;
-        margin-bottom: 10rpx;
-      }
-
-      .product-price {
-        font-size: 32rpx;
-        color: #D93025;
-        font-weight: bold;
-      }
-    }
-  }
-
-  .score-form {
-    background: #fff;
-    padding: 20rpx;
-
-    .score-item {
-      display: flex;
-      align-items: center;
-      margin-bottom: 30rpx;
-
-      .label {
-        font-size: 28rpx;
-        color: #333;
-        margin-right: 20rpx;
-      }
-    }
-
-    .content-item {
-      margin-bottom: 30rpx;
-    }
-
-    .upload-item {
-      margin-bottom: 30rpx;
-
-      .label {
-        font-size: 28rpx;
-        color: #333;
-        margin-bottom: 20rpx;
-      }
-    }
-
-    .anonymous-item {
-      display: flex;
-      align-items: center;
-      justify-content: space-between;
-      font-size: 28rpx;
-      color: #333;
-    }
-  }
-
-  .submit-btn {
-    position: fixed;
-    bottom: 0;
-    left: 0;
-    right: 0;
-    padding: 20rpx 40rpx;
-    background: #fff;
-  }
-}
-</style> 

+ 0 - 166
packageShop/pages/search/index.vue

@@ -1,166 +0,0 @@
-<template>
-	<view>
-		<view class="flex-items mar-t-20">
-			<view class="mar-r-20">
-				<!-- <uni-icons @tap="back" type="left" color="#545454" size="30"></uni-icons> -->
-			</view>
-			<view class="search-box mar-r-20">
-				<input confirm-type="search" class="search-input" focus type="text" placeholder="请输入搜索内容"
-					v-model="historySearch.name" />
-				<uni-icons @tap="clear" v-if="historySearch.name" type="closeempty" color="#545454" size="20"
-					class="mar-r-20"></uni-icons>
-				<button class="search-button" @click="onSearchClick">搜索</button>
-			</view>
-		</view>
-		<view class="flex-items-between pad-32">
-			<view class="font28 font-bold">
-				历史搜索
-			</view>
-			<uni-icons @tap="delSearch" type="trash" size="26"></uni-icons>
-		</view>
-		<view class="pad-lr-32">
-			<view class="search-container">
-				<view v-for="(item, index) in historySearchList" :key="index" class="search-item">
-					<view class="searchBg mar-b-16" @tap="onHistorySearch(item.name)">
-						{{ item.name }}
-					</view>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	import {
-		delHistorySearch,
-		submitHistorySearch,
-		getHistorySearchList
-	} from '@/config/api.js';
-	import {
-		MAIN_COLOR
-	} from '@/common/config.js'
-
-	export default {
-		data() {
-			return {
-				bgColor: 'transparent',
-				statusBarHeight: 0, // 状态栏高度
-				historySearch: {
-					name: "",
-					type: ""
-				},
-				historySearchList: [],
-			}
-		},
-		onLoad(op) {
-			console.log(op.searchKey)
-			this.historySearch.type = op.type
-			if (op.searchKey) {
-				console.log(op.searchKey)
-				this.historySearch.name = op.searchKey
-			}
-			// 获取设备信息,包括状态栏高度
-			const systemInfo = uni.getSystemInfoSync();
-			this.statusBarHeight = systemInfo.statusBarHeight;
-			this.getSearch();
-		},
-		methods: {
-			clear() {
-				this.historySearch.name = ""
-			},
-			onHistorySearch(name) {
-				this.historySearch.name = name
-				if (this.historySearch.type == 2) {
-					this.$route('/packageOrder/pages/list/index?serachKey=' + this.historySearch.name)
-				}
-				if (this.historySearch.type == 1) {
-					this.$route('/packageShop/pages/search/product-list?serachKey=' + this.historySearch.name)
-				}
-			},
-			back() {
-				uni.navigateBack({
-					delta: 1
-				})
-			},
-			getSearch() {
-				getHistorySearchList({
-					type: this.historySearch.type
-				}).then((res) => {
-					this.historySearchList = res.data
-				})
-			},
-			delSearch() {
-				delHistorySearch().then((res) => {
-					this.getSearch()
-				})
-			},
-			onSearchClick() {
-				console.log(this.historySearch.type)
-				// 执行搜索操作
-				submitHistorySearch(this.historySearch)
-				if (this.historySearch.type == 2) {
-					this.$route('/packageOrder/pages/list/index?serachKey=' + this.historySearch.name)
-				}
-				if (this.historySearch.type == 1) {
-					this.$route('/packageShop/pages/search/product-list?serachKey=' + this.historySearch.name)
-				}
-			}
-		}
-	}
-</script>
-
-<style>
-	.search-container {
-		display: flex;
-		flex-wrap: wrap;
-	}
-
-	.search-item {
-		margin-right: 10rpx;
-		margin-bottom: 10rpx;
-	}
-
-	.searchBg {
-		background-color: #d8d8d8;
-		padding: 8rpx 12rpx;
-		border-radius: 10rpx;
-		font-size: 14px;
-		color: #333;
-	}
-
-	.search-box {
-		display: flex;
-		align-items: center;
-		border-radius: 20rpx;
-		background-color: #f0f0f0;
-		padding: 10rpx 20rpx;
-		width: 100%;
-		/* Ensure it takes full width */
-	}
-
-	.search-input {
-		flex: 1;
-		border: none;
-		outline: none;
-		font-size: 14px;
-		color: #999;
-		background-color: #f0f0f0;
-		border-radius: 20rpx;
-		padding: 8rpx 12rpx;
-		width: 100%;
-	}
-
-	.search-button {
-		background-color: #f27c22;
-		/* 橘色背景 */
-		color: white;
-		border: none;
-		padding: 0rpx 30rpx 0rpx 30rpx;
-		border-radius: 20rpx;
-		margin-left: 10rpx;
-		font-size: 14px;
-		cursor: pointer;
-		white-space: nowrap;
-		/* Prevent text overflow */
-	}
-</style>

+ 0 - 917
packageShop/pages/search/product-list.vue

@@ -1,917 +0,0 @@
-<template>
-	<view class="container">
-		<view class="page-container">
-
-
-			<!-- 主要内容区域 -->
-			<view class="main-content">
-
-				<!-- 右侧商品列表 -->
-				<view class="product-list">
-					<!-- 搜索框 -->
-					<view class="search-section">
-						<view class="search-bar">
-							<view class="search-icon-wrapper">
-								<image class="search-icon" src="/static/images/search.png"></image>
-							</view>
-							<input class="search-input" v-model="params.name" placeholder="搜索唐卡"
-								@confirm="onSearchConfirm" />
-							<view class="search-btn" @click="onSearchConfirm">
-								<text class="search-btn-text">搜索</text>
-							</view>
-						</view>
-					</view>
-
-					<!-- 筛选栏 -->
-					<view class="filter-bar">
-						<view class="filter-item" :class="{ 'active': activeFilter === 'all' }"
-							@click="switchFilter('all')">
-							<text class="filter-text">全部商品</text>
-						</view>
-						<view class="filter-item" :class="{ 'active': activeFilter.includes('price') }"
-							@click="toggleSort('price')">
-							<text class="filter-text">价格排序</text>
-							<view class="arrow-container">
-								<text class="arrow up" :class="{ 'active': activeFilter === 'price_asc' }">▲</text>
-								<text class="arrow down" :class="{ 'active': activeFilter === 'price_desc' }">▼</text>
-							</view>
-						</view>
-						<view class="filter-item" :class="{ 'active': activeFilter.includes('sales') }"
-							@click="toggleSort('sales')">
-							<text class="filter-text">销量排序</text>
-							<view class="arrow-container">
-								<text class="arrow up" :class="{ 'active': activeFilter === 'sales_asc' }">▲</text>
-								<text class="arrow down" :class="{ 'active': activeFilter === 'sales_desc' }">▼</text>
-							</view>
-						</view>
-					</view>
-
-					<scroll-view :scroll-top="scrollTop" scroll-y="true" class="scroll-Y" @scrolltolower="lower">
-						<view v-if="goodsList.length > 0" class="goods-container">
-							<view class="goods-grid">
-								<view v-for="(product, index) in goodsList" :key="index" class="product-card"
-									@click="detail(product.id)">
-									<view class="product-image-container">
-										<image class="product-image" :src="product.images" mode="aspectFill"></image>
-										<view class="product-badge" v-if="product.salesTotal > 100">热销</view>
-									</view>
-									<view class="product-content">
-										<view class="product-name">{{ product.name }}</view>
-										<view class="product-meta">
-											<view class="meta-info">
-												<view class="rating" v-if="product.productAvg">
-													<text class="rating-star">★</text>
-													<text class="rating-value">{{ product.productAvg }}</text>
-												</view>
-											</view>
-											<view class="sales-info">
-												<text class="sales-count">已售 {{ product.salesTotal }} 件</text>
-											</view>
-										</view>
-										<view class="product-footer">
-											<view class="price-section">
-												<text class="price-symbol">¥</text>
-												<text class="price-value">{{ product.price }}</text>
-												<text class="original-price"
-													v-if="product.originalPrice">¥{{ product.originalPrice }}</text>
-											</view>
-											<view class="buy-btn" @click.stop="detail(product.id)">
-												<text class="buy-text">购买</text>
-											</view>
-										</view>
-									</view>
-								</view>
-							</view>
-						</view>
-						<view v-else class="empty-state">
-							<view class="empty-icon">☸</view>
-							<text class="empty-text">暂无商品</text>
-							<text class="empty-subtext">敬请期待更多精美唐卡</text>
-						</view>
-						<!-- 加载状态 -->
-						<view v-if="isLoading" class="loading-tip">
-							<view class="loading-icon">☸</view>
-							<text class="loading-text">加载中...</text>
-						</view>
-						<view v-if="!isLoading && noMoreData" class="no-more-tip">
-							<view class="no-more-decoration">
-								<view class="decoration-line"></view>
-								<text class="decoration-text">—— 已加载全部商品 ——</text>
-								<view class="decoration-line"></view>
-							</view>
-						</view>
-					</scroll-view>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	import {
-		productList,
-	} from '@/config/api.js';
-	export default {
-		data() {
-			return {
-				scrollTop: 0,
-				goodsList: [],
-				isLoading: false, // 是否正在加载
-				noMoreData: false, // 是否没有更多数据
-				params: {
-					current: 1,
-					size: 10,
-					categoriesId: "",
-					name: "",
-					sort: "",
-					arrow: "",
-				}, //请求参数
-				activeFilter: 'all'
-			};
-		},
-
-		onLoad(op) {
-			this.params.name = op.serachKey
-			console.log(op, "name")
-			this.init()
-		},
-		methods: {
-			detail(id) {
-				uni.navigateTo({
-					url: '/packageShop/pages/detail/index?id=' + id
-				});
-			},
-			lower() {
-				if (!this.isLoading && !this.noMoreData) {
-					this.loadGoods();
-				}
-			},
-			async loadGoods() {
-				this.isLoading = true;
-				try {
-					// 搜索页面不需要分类ID,直接使用搜索关键词
-					const response = await productList(this.params);
-					uni.hideLoading();
-
-					// 过滤并处理商品数据
-					const newGoods = response.data.records.filter(item => item.shelfLife === 1).map(item => ({
-						...item,
-						productAvg: item.productAvg || 5.0
-					}));
-
-					if (newGoods.length === 0) {
-						this.noMoreData = true;
-					} else {
-						this.goodsList = this.params.current === 1 ? newGoods : [...this.goodsList, ...newGoods];
-						this.params.current++;
-					}
-				} catch (error) {
-					console.error('加载商品数据失败:', error);
-					uni.showToast({
-						title: '加载失败,请重试',
-						icon: 'none'
-					});
-				} finally {
-					this.isLoading = false;
-				}
-			},
-			init() {
-				// 直接加载商品,不需要分类
-				this.loadGoods();
-			},
-
-
-
-			switchFilter(filter) {
-				this.activeFilter = filter;
-				this.resetParams()
-				this.loadGoods()
-			},
-			resetParams() {
-				this.params.arrow = ""
-				this.params.current = 1
-				this.params.sort = ""
-				this.goodsList = []
-				// 保留搜索关键词,不清空 params.name
-			},
-			toggleSort(filter) {
-				this.resetParams()
-				if (this.activeFilter === `${filter}_asc`) {
-					if (filter == "price") {
-						this.params.sort = 1
-					} else {
-						this.params.sort = 2
-					}
-					this.params.arrow = 2
-					this.activeFilter = `${filter}_desc`;
-				} else {
-					this.activeFilter = `${filter}_asc`;
-					if (filter == "price") {
-						this.params.sort = 1
-					} else {
-						this.params.sort = 2
-					}
-					this.params.arrow = 1
-				}
-				this.loadGoods()
-			},
-
-			onSearchConfirm() {
-				// 确认搜索时重新加载商品
-				this.resetParams();
-				this.loadGoods();
-			}
-		}
-	};
-</script>
-
-<style lang="scss" scoped>
-	.container {
-		min-height: 100vh;
-		background: linear-gradient(135deg, #F5E6D3 0%, #E2D1C3 100%);
-		position: relative;
-	}
-
-	.container::before {
-		content: '';
-		position: fixed;
-		top: 0;
-		left: 0;
-		right: 0;
-		bottom: 0;
-		background-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><defs><pattern id="tibetan" width="20" height="20" patternUnits="userSpaceOnUse"><path d="M0 0h20v20H0z" fill="none"/><path d="M10 2a2 2 0 110 4 2 2 0 010-4zm8 8a2 2 0 110 4 2 2 0 010-4zm-16 0a2 2 0 110 4 2 2 0 010-4zm8 8a2 2 0 110 4 2 2 0 010-4z" fill="%23A67C52" opacity="0.1"/></pattern></defs><rect width="100" height="100" fill="url(%23tibetan)"/></svg>');
-		opacity: 0.15;
-		pointer-events: none;
-		z-index: 0;
-	}
-
-	.page-container {
-		position: relative;
-		z-index: 1;
-		height: 100vh;
-		display: flex;
-		flex-direction: column;
-	}
-
-	/* 页面标题 */
-	.page-header {
-		background: linear-gradient(135deg, #8B4513 0%, #654321 100%);
-		padding: 40rpx 30rpx 30rpx;
-		position: relative;
-		overflow: hidden;
-	}
-
-	.page-header::before {
-		content: '';
-		position: absolute;
-		top: 0;
-		left: 0;
-		right: 0;
-		bottom: 0;
-		background: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><defs><pattern id="endless-knot" width="50" height="50" patternUnits="userSpaceOnUse"><path d="M25 10 L40 10 L40 40 L10 40 L10 25 L25 25 Z" fill="none" stroke="rgba(255,255,255,0.1)" stroke-width="2"/></pattern></defs><rect width="100" height="100" fill="url(%23endless-knot)"/></svg>');
-		opacity: 0.2;
-	}
-
-	.header-content {
-		position: relative;
-		z-index: 1;
-		text-align: center;
-	}
-
-	.title-section {
-		margin-bottom: 16rpx;
-	}
-
-	.page-title {
-		font-size: 48rpx;
-		font-weight: 700;
-		color: #FFD700;
-		text-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.3);
-		letter-spacing: 4rpx;
-	}
-
-	.title-decoration {
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		margin-top: 16rpx;
-		gap: 20rpx;
-	}
-
-	.decoration-line {
-		width: 60rpx;
-		height: 2rpx;
-		background: linear-gradient(90deg, #FFD700, #FFA500);
-	}
-
-	.decoration-symbol {
-		color: #FFD700;
-		font-size: 28rpx;
-		opacity: 0.8;
-	}
-
-	.subtitle {
-		font-size: 26rpx;
-		color: rgba(255, 215, 0, 0.8);
-		font-weight: 300;
-		letter-spacing: 1rpx;
-	}
-
-	/* 主要内容区域 */
-	.main-content {
-		flex: 1;
-		display: flex;
-		background: rgba(255, 248, 231, 0.3);
-	}
-
-	/* 左侧分类栏 */
-	.category-list {
-		width: 200rpx;
-		background: rgba(255, 248, 231, 0.95);
-		border-right: 2rpx solid rgba(139, 69, 19, 0.1);
-		backdrop-filter: blur(10rpx);
-	}
-
-	.category-item {
-		display: flex;
-		flex-direction: column;
-		align-items: center;
-		padding: 30rpx 20rpx;
-		position: relative;
-		transition: all 0.3s ease;
-		border-bottom: 1rpx solid rgba(139, 69, 19, 0.05);
-
-		&:active {
-			transform: scale(0.95);
-		}
-
-		&.active {
-			background: linear-gradient(135deg, rgba(139, 69, 19, 0.1) 0%, rgba(101, 67, 33, 0.1) 100%);
-			border-right: 4rpx solid #8B4513;
-
-			.category-name {
-				color: #8B4513;
-				font-weight: 600;
-			}
-
-			.category-icon {
-				background: linear-gradient(135deg, #8B4513 0%, #654321 100%);
-				border-color: #FFD700;
-				box-shadow: 0 4rpx 12rpx rgba(139, 69, 19, 0.3);
-			}
-
-			.category-image {
-				transform: scale(1.1);
-				filter: brightness(1.1) contrast(1.1);
-			}
-
-			.icon-symbol {
-				color: #FFD700;
-			}
-		}
-	}
-
-	.category-icon {
-		width: 80rpx;
-		height: 80rpx;
-		background: rgba(139, 69, 19, 0.1);
-		border: 2rpx solid rgba(139, 69, 19, 0.2);
-		border-radius: 50%;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		margin-bottom: 16rpx;
-		transition: all 0.3s ease;
-		position: relative;
-		overflow: hidden;
-	}
-
-	.category-image {
-		width: 100%;
-		height: 100%;
-		border-radius: 50%;
-		transition: all 0.3s ease;
-	}
-
-	.icon-symbol {
-		font-size: 32rpx;
-		color: #8B4513;
-		transition: all 0.3s ease;
-	}
-
-	.category-name {
-		font-size: 26rpx;
-		color: #A67C52;
-		font-weight: 500;
-		text-align: center;
-		line-height: 1.3;
-		transition: all 0.3s ease;
-	}
-
-	.active-indicator {
-		position: absolute;
-		right: 0;
-		top: 50%;
-		transform: translateY(-50%);
-		width: 6rpx;
-		height: 40rpx;
-		background: linear-gradient(135deg, #8B4513 0%, #654321 100%);
-		border-radius: 4rpx 0 0 4rpx;
-		box-shadow: 0 0 8rpx rgba(139, 69, 19, 0.4);
-	}
-
-	.category-glow {
-		position: absolute;
-		top: 0;
-		left: 0;
-		right: 0;
-		bottom: 0;
-		background: linear-gradient(135deg, rgba(255, 215, 0, 0.1) 0%, rgba(255, 165, 0, 0.1) 100%);
-		border-radius: 12rpx;
-		pointer-events: none;
-		animation: glowPulse 2s ease-in-out infinite;
-	}
-
-	@keyframes glowPulse {
-		0% {
-			opacity: 0.3;
-			transform: scale(1);
-		}
-
-		50% {
-			opacity: 0.6;
-			transform: scale(1.02);
-		}
-
-		100% {
-			opacity: 0.3;
-			transform: scale(1);
-		}
-	}
-
-	/* 右侧商品列表 */
-	.product-list {
-		flex: 1;
-		display: flex;
-		flex-direction: column;
-		background: rgba(255, 248, 231, 0.2);
-	}
-
-	/* 搜索框 */
-	.search-section {
-		padding: 24rpx 20rpx;
-		background: rgba(255, 248, 231, 0.95);
-		border-bottom: 2rpx solid rgba(139, 69, 19, 0.1);
-		backdrop-filter: blur(10rpx);
-	}
-
-	.search-bar {
-		display: flex;
-		align-items: center;
-		background: rgba(255, 248, 231, 0.95);
-		border: 2rpx solid rgba(139, 69, 19, 0.2);
-		border-radius: 32rpx;
-		padding: 16rpx 24rpx;
-		box-shadow: 0 4rpx 16rpx rgba(139, 69, 19, 0.15);
-		backdrop-filter: blur(10rpx);
-		transition: all 0.3s ease;
-		position: relative;
-	}
-
-	.search-bar::before {
-		content: '';
-		position: absolute;
-		top: 2rpx;
-		left: 2rpx;
-		right: 2rpx;
-		bottom: 2rpx;
-		border: 1rpx solid rgba(139, 69, 19, 0.1);
-		border-radius: 30rpx;
-		pointer-events: none;
-	}
-
-	// .search-bar:active {
-	// 	transform: scale(0.98);
-	// 	box-shadow: 0 2rpx 8rpx rgba(139, 69, 19, 0.2);
-	// }
-
-	.search-icon-wrapper {
-		width: 32rpx;
-		height: 32rpx;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		margin-right: 12rpx;
-	}
-
-	.search-icon {
-		width: 28rpx;
-		height: 28rpx;
-		opacity: 0.6;
-	}
-
-	.search-input {
-		font-size: 26rpx;
-		color: #8B4513;
-		flex: 1;
-		background: transparent;
-		border: none;
-		outline: none;
-	}
-
-	.search-input::placeholder {
-		color: #A67C52;
-		opacity: 0.8;
-	}
-
-	.search-btn {
-		background: linear-gradient(135deg, #8B4513 0%, #654321 100%);
-		border-radius: 24rpx;
-		padding: 12rpx 20rpx;
-		margin-left: 12rpx;
-		box-shadow: 0 4rpx 12rpx rgba(139, 69, 19, 0.3);
-		transition: all 0.3s ease;
-		cursor: pointer;
-	}
-
-	.search-btn:active {
-		transform: scale(0.95);
-		box-shadow: 0 2rpx 8rpx rgba(139, 69, 19, 0.4);
-	}
-
-	.search-btn-text {
-		color: #FFD700;
-		font-size: 24rpx;
-		font-weight: 600;
-		letter-spacing: 2rpx;
-	}
-
-	/* 筛选栏 */
-	.filter-bar {
-		padding: 24rpx 20rpx;
-		background: rgba(255, 248, 231, 0.95);
-		display: flex;
-		justify-content: space-around;
-		border-bottom: 2rpx solid rgba(139, 69, 19, 0.1);
-		backdrop-filter: blur(10rpx);
-	}
-
-	.filter-item {
-		display: flex;
-		align-items: center;
-		padding: 12rpx 20rpx;
-		border-radius: 20rpx;
-		transition: all 0.3s ease;
-		position: relative;
-
-		&:active {
-			transform: scale(0.95);
-		}
-
-		&.active {
-			background: linear-gradient(135deg, #8B4513 0%, #654321 100%);
-			box-shadow: 0 4rpx 12rpx rgba(139, 69, 19, 0.3);
-
-			.filter-text {
-				color: #FFD700;
-				font-weight: 600;
-			}
-
-			.arrow {
-				color: #FFD700;
-			}
-		}
-	}
-
-	.filter-text {
-		font-size: 26rpx;
-		color: #8B4513;
-		font-weight: 500;
-		transition: all 0.3s ease;
-	}
-
-	.arrow-container {
-		display: flex;
-		flex-direction: column;
-		margin-left: 8rpx;
-	}
-
-	.arrow {
-		font-size: 18rpx;
-		line-height: 1;
-		color: #A67C52;
-		transition: all 0.3s ease;
-
-		&.active {
-			color: #FFD700;
-		}
-	}
-
-	/* 商品列表 */
-	.scroll-Y {
-		flex: 1;
-	}
-
-	.goods-container {
-		padding: 20rpx;
-	}
-
-	.goods-grid {
-		display: grid;
-		grid-template-columns: 1fr 1fr;
-		gap: 20rpx;
-	}
-
-	.product-card {
-		background: rgba(255, 248, 231, 0.95);
-		border: 1rpx solid rgba(139, 69, 19, 0.1);
-		border-radius: 20rpx;
-		overflow: hidden;
-		box-shadow: 0 8rpx 32rpx rgba(139, 69, 19, 0.08);
-		backdrop-filter: blur(10rpx);
-		transition: all 0.3s ease;
-		position: relative;
-		width: 100%;
-	}
-
-	.product-card::before {
-		content: '';
-		position: absolute;
-		top: 10rpx;
-		left: 10rpx;
-		right: 10rpx;
-		bottom: 10rpx;
-		border: 1rpx solid rgba(139, 69, 19, 0.1);
-		border-radius: 16rpx;
-		pointer-events: none;
-		z-index: 1;
-	}
-
-	.product-card:active {
-		transform: translateY(-4rpx);
-		box-shadow: 0 12rpx 40rpx rgba(139, 69, 19, 0.12);
-	}
-
-	.product-image-container {
-		position: relative;
-		width: 100%;
-		height: 300rpx;
-		overflow: hidden;
-	}
-
-	.product-image {
-		width: 100%;
-		height: 100%;
-		transition: transform 0.3s ease;
-	}
-
-	.product-card:active .product-image {
-		transform: scale(1.05);
-	}
-
-	.product-badge {
-		position: absolute;
-		top: 16rpx;
-		right: 16rpx;
-		background: linear-gradient(135deg, #8B4513 0%, #654321 100%);
-		border: 1rpx solid #FFD700;
-		color: #FFD700;
-		font-size: 22rpx;
-		padding: 6rpx 12rpx;
-		border-radius: 12rpx;
-		font-weight: 500;
-		z-index: 2;
-	}
-
-	.product-content {
-		padding: 16rpx;
-		position: relative;
-		z-index: 2;
-	}
-
-	.product-name {
-		font-size: 26rpx;
-		color: #8B4513;
-		font-weight: 600;
-		line-height: 1.3;
-		margin-bottom: 8rpx;
-		display: -webkit-box;
-		-webkit-line-clamp: 2;
-		-webkit-box-orient: vertical;
-		overflow: hidden;
-	}
-
-	.product-desc {
-		font-size: 24rpx;
-		color: #A67C52;
-		margin-bottom: 16rpx;
-		display: -webkit-box;
-		-webkit-line-clamp: 2;
-		-webkit-box-orient: vertical;
-		overflow: hidden;
-		line-height: 1.4;
-	}
-
-	.product-meta {
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-		margin-bottom: 12rpx;
-	}
-
-	.meta-info {
-		display: flex;
-		align-items: center;
-		gap: 16rpx;
-	}
-
-	.update-time {
-		font-size: 22rpx;
-		color: #999;
-	}
-
-	.rating {
-		display: flex;
-		align-items: center;
-		gap: 4rpx;
-	}
-
-	.rating-star {
-		color: #FFD700;
-		font-size: 20rpx;
-	}
-
-	.rating-value {
-		font-size: 20rpx;
-		color: #8B4513;
-		font-weight: 500;
-	}
-
-	.sales-info {
-		text-align: right;
-	}
-
-	.sales-count {
-		font-size: 20rpx;
-		color: #999;
-	}
-
-	.product-footer {
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-	}
-
-	.price-section {
-		display: flex;
-		align-items: baseline;
-		gap: 4rpx;
-	}
-
-	.price-symbol {
-		font-size: 24rpx;
-		color: #8B4513;
-		font-weight: 600;
-	}
-
-	.price-value {
-		font-size: 28rpx;
-		color: #8B4513;
-		font-weight: 700;
-	}
-
-	.original-price {
-		font-size: 24rpx;
-		color: #999;
-		text-decoration: line-through;
-		margin-left: 8rpx;
-	}
-
-	.buy-btn {
-		background: linear-gradient(135deg, #8B4513 0%, #654321 100%);
-		padding: 12rpx 18rpx;
-		border-radius: 16rpx;
-		border: 1rpx solid #FFD700;
-		box-shadow: 0 4rpx 12rpx rgba(139, 69, 19, 0.3);
-		transition: all 0.3s ease;
-	}
-
-	.buy-btn:active {
-		transform: scale(0.95);
-		box-shadow: 0 2rpx 8rpx rgba(139, 69, 19, 0.4);
-	}
-
-	.buy-text {
-		font-size: 23rpx;
-		color: #FFD700;
-		font-weight: 500;
-	}
-
-	/* 空状态 */
-	.empty-state {
-		display: flex;
-		flex-direction: column;
-		align-items: center;
-		padding: 120rpx 40rpx;
-		text-align: center;
-	}
-
-	.empty-icon {
-		font-size: 120rpx;
-		color: rgba(139, 69, 19, 0.3);
-		margin-bottom: 24rpx;
-	}
-
-	.empty-text {
-		font-size: 32rpx;
-		color: #8B4513;
-		font-weight: 600;
-		margin-bottom: 12rpx;
-	}
-
-	.empty-subtext {
-		font-size: 26rpx;
-		color: #A67C52;
-	}
-
-	/* 加载状态 */
-	.loading-tip {
-		display: flex;
-		flex-direction: column;
-		align-items: center;
-		padding: 60rpx 40rpx;
-	}
-
-	.loading-icon {
-		font-size: 48rpx;
-		color: #8B4513;
-		margin-bottom: 16rpx;
-		animation: rotate 2s linear infinite;
-	}
-
-	@keyframes rotate {
-		from {
-			transform: rotate(0deg);
-		}
-
-		to {
-			transform: rotate(360deg);
-		}
-	}
-
-	.loading-text {
-		font-size: 26rpx;
-		color: #8B4513;
-	}
-
-	.no-more-tip {
-		padding: 40rpx;
-	}
-
-	.no-more-decoration {
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		gap: 20rpx;
-	}
-
-	.decoration-line {
-		width: 80rpx;
-		height: 1rpx;
-		background: linear-gradient(90deg, transparent, #8B4513, transparent);
-	}
-
-	.decoration-text {
-		font-size: 24rpx;
-		color: #A67C52;
-	}
-
-	/* 响应式设计 */
-	@media (max-width: 750rpx) {
-		.category-list {
-			width: 160rpx;
-		}
-
-		.category-item {
-			padding: 24rpx 16rpx;
-		}
-
-		.category-icon {
-			width: 60rpx;
-			height: 60rpx;
-		}
-
-		.category-image {
-			width: 100%;
-			height: 100%;
-		}
-
-		.icon-symbol {
-			font-size: 24rpx;
-		}
-
-		.category-name {
-			font-size: 22rpx;
-		}
-	}
-</style>

+ 0 - 487
packageShop/pages/settle/index.vue

@@ -1,487 +0,0 @@
-<!-- 结算页面 -->
-<template>
-	<view class="container">
-		<!-- <u-navbar title="确认订单" autoBack></u-navbar> -->
-
-		<!-- 收货地址 -->
-		<view class="address-section" @click="chooseWxAddress">
-			<template v-if="address">
-				<view class="address-content">
-					<view class="info">
-						<text class="name">{{address.userName}}</text>
-						<text class="phone">{{address.telNumber}}</text>
-					</view>
-					<view class="address">
-						{{address.provinceName}}{{address.cityName}}{{address.countyName}}{{address.detailInfo}}
-					</view>
-				</view>
-			</template>
-			<template v-else>
-				<view class="address-empty">
-					<text>请选择收货地址</text>
-					<u-icon name="arrow-right" color="#999"></u-icon>
-				</view>
-			</template>
-		</view>
-
-		<!-- 商品信息 -->
-		<view class="goods-section" v-if="sku">
-			<view class="goods-item" v-for="(item, index) in Array.isArray(sku) ? sku : [sku]" :key="index">
-				<image :src="item.skuImage" mode="aspectFill" class="goods-img"></image>
-				<view class="goods-info">
-					<view class="goods-name">{{item.productName}}</view>
-					<view class="goods-spec">{{item.skuName}}</view>
-					<view class="price-quantity">
-						<text class="price">¥{{item.price}}</text>
-						<text class="quantity">x{{item.count}}</text>
-					</view>
-				</view>
-			</view>
-		</view>
-
-		<!-- 空状态 -->
-		<view class="empty-state" v-else>
-			<text>商品信息不存在</text>
-		</view>
-
-		<!-- 支付方式 -->
-		<view class="payment-section">
-			<view class="section-title">支付方式</view>
-			<view class="payment-list">
-				<view class="payment-item" @click="selectPayment('wxpay')" :class="{active: paymentMethod === 'wxpay'}">
-					<view class="left">
-						<image src="/static/images/wxpay.png" mode="aspectFit" class="payment-icon"></image>
-						<text>微信支付</text>
-					</view>
-					<u-icon v-if="paymentMethod === 'wxpay'" name="checkmark" color="#F95B5B"></u-icon>
-				</view>
-			</view>
-		</view>
-
-		<!-- 订单金额 -->
-		<view class="amount-section">
-			<view class="amount-item">
-				<text>商品金额</text>
-				<text class="price">¥{{totalProductAmount}}</text>
-			</view>
-			<view class="amount-item">
-				<text>运费</text>
-				<text class="price">¥{{freightAmount}}</text>
-			</view>
-			<view class="amount-item total">
-				<text>实付款</text>
-				<text class="price">¥{{totalAmount}}</text>
-			</view>
-		</view>
-
-		<!-- 底部提交栏 -->
-		<view class="submit-bar">
-			<view class="total-amount">
-				<text>合计:</text>
-				<text class="price">¥{{totalAmount}}</text>
-			</view>
-			<button class="submit-btn" @click="submitOrder" :loading="submitting" :disabled="submitting">
-				{{submitting ? '提交中...' : '提交订单'}}
-			</button>
-		</view>
-	</view>
-</template>
-
-<script>
-	import {
-		mapGetters
-	} from 'vuex';
-	import {
-		submitOrder,
-		saveCartOrder
-	} from '../../../config/api.js';
-
-	export default {
-		data() {
-			return {
-				sku: null,
-				address: null,
-				paymentMethod: 'wxpay',
-				submitting: false,
-				freightAmount: 0,
-				isFromCart: false
-			}
-		},
-		computed: {
-			...mapGetters(['isLogin']),
-			totalProductAmount() {
-				if (!this.sku) return 0;
-				if (Array.isArray(this.sku)) {
-					return this.sku.reduce((total, item) => total + (item.price * item.count), 0);
-				}
-				return this.sku.price * this.sku.count;
-			},
-			totalAmount() {
-				return this.totalProductAmount + this.freightAmount;
-			}
-		},
-		onLoad(options) {
-			if (options.sku) {
-				try {
-					this.sku = JSON.parse(decodeURIComponent(options.sku));
-					this.isFromCart = false;
-				} catch (error) {
-					console.error('解析商品数据失败:', error);
-					uni.showToast({
-						title: '商品数据错误',
-						icon: 'none'
-					});
-					setTimeout(() => {
-						uni.navigateBack();
-					}, 1500);
-				}
-			} else if (options.items) {
-				try {
-					const items = JSON.parse(decodeURIComponent(options.items));
-					this.isFromCart = true;
-					// 将购物车商品数据转换为结算页面需要的格式
-					this.sku = items.map(item => ({
-						id: item.id,
-						skuId: item.skuId,
-						skuImage: item.images,
-						productName: item.productName,
-						skuName: item.skuName,
-						price: item.price,
-						count: item.count
-					}));
-				} catch (error) {
-					console.error('解析购物车数据失败:', error);
-					uni.showToast({
-						title: '商品数据错误',
-						icon: 'none'
-					});
-					setTimeout(() => {
-						uni.navigateBack();
-					}, 1500);
-				}
-			} else {
-				uni.showToast({
-					title: '商品数据不存在',
-					icon: 'none'
-				});
-				setTimeout(() => {
-					uni.navigateBack();
-				}, 1500);
-			}
-		},
-		methods: {
-			// 选择微信收货地址
-			chooseWxAddress() {
-				uni.chooseAddress({
-					success: (res) => {
-						this.address = res;
-					},
-					fail: (err) => {
-						console.error('获取收货地址失败:', err);
-						if (err.errMsg.includes('auth deny')) {
-							uni.showModal({
-								title: '提示',
-								content: '需要您的授权才能获取收货地址,是否前往设置?',
-								success: (res) => {
-									if (res.confirm) {
-										uni.openSetting();
-									}
-								}
-							});
-						} else {
-							uni.$u.toast('获取收货地址失败');
-						}
-					}
-				});
-			},
-			// 选择支付方式
-			selectPayment(method) {
-				this.paymentMethod = method;
-			},
-			// 提交订单
-			async submitOrder() {
-				if (!this.address) {
-					return uni.$u.toast('请选择收货地址');
-				}
-
-				if (this.submitting) return;
-				this.submitting = true;
-
-				try {
-					if (this.isFromCart) {
-						// 购物车批量下单
-						const orderList = this.sku.map(item => ({
-							province: this.address.provinceName,
-							city: this.address.cityName,
-							area: this.address.countyName,
-							address: this.address.detailInfo,
-							mobile: this.address.telNumber,
-							name: this.address.userName,
-							skuId: item.skuId,
-							count: item.count,
-							payType: this.paymentMethod === 'wxpay' ? 1 : 2
-						}));
-
-						const res = await saveCartOrder(orderList);
-						if (res.code === 200) {
-							// 跳转到支付页面
-							uni.navigateTo({
-								url: `/packageOrder/pages/payment/index?orderId=${res.data.id}`
-							});
-						} else {
-							uni.$u.toast(res.msg || '提交订单失败');
-						}
-					} else {
-						// 单个商品下单
-						const orderData = {
-							mobile: this.address.telNumber,
-							name: this.address.userName,
-							province: this.address.provinceName,
-							city: this.address.cityName,
-							area: this.address.countyName,
-							address: this.address.detailInfo,
-							postalCode: this.address.postalCode,
-							skuId: this.sku.id,
-							count: this.sku.count,
-							paymentMethod: this.paymentMethod
-						};
-
-						const res = await submitOrder(orderData);
-						if (res.code === 200) {
-							// 跳转到支付页面
-							uni.navigateTo({
-								url: `/packageOrder/pages/payment/index?orderId=${res.data.id}`
-							});
-						} else {
-							uni.$u.toast(res.msg || '提交订单失败');
-						}
-					}
-				} catch (error) {
-					console.error('提交订单失败:', error);
-					uni.$u.toast('提交订单失败,请重试');
-				} finally {
-					this.submitting = false;
-				}
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-	.container {
-		min-height: 100vh;
-		background-color: #f5f5f5;
-		padding-bottom: 120rpx;
-	}
-
-	.address-section {
-		background-color: #fff;
-		margin: 20rpx;
-		padding: 30rpx;
-		border-radius: 12rpx;
-
-		.address-content {
-			.info {
-				margin-bottom: 20rpx;
-
-				.name {
-					font-size: 32rpx;
-					font-weight: bold;
-					margin-right: 20rpx;
-				}
-
-				.phone {
-					font-size: 28rpx;
-					color: #666;
-				}
-			}
-
-			.address {
-				font-size: 28rpx;
-				color: #333;
-			}
-		}
-
-		.address-empty {
-			display: flex;
-			align-items: center;
-			justify-content: space-between;
-			font-size: 28rpx;
-			color: #999;
-		}
-	}
-
-	.goods-section {
-		background-color: #fff;
-		margin: 20rpx;
-		padding: 30rpx;
-		border-radius: 12rpx;
-
-		.goods-item {
-			display: flex;
-
-			.goods-img {
-				width: 160rpx;
-				height: 160rpx;
-				border-radius: 8rpx;
-				margin-bottom: 10rpx;
-			}
-
-			.goods-info {
-				flex: 1;
-				margin-left: 20rpx;
-
-				.goods-name {
-					font-size: 28rpx;
-					color: #333;
-					margin-bottom: 10rpx;
-				}
-
-				.goods-spec {
-					font-size: 24rpx;
-					color: #999;
-					margin-bottom: 20rpx;
-				}
-
-				.price-quantity {
-					display: flex;
-					justify-content: space-between;
-					align-items: center;
-
-					.price {
-						font-size: 32rpx;
-						color: #F95B5B;
-						font-weight: bold;
-					}
-
-					.quantity {
-						font-size: 26rpx;
-						color: #999;
-					}
-				}
-			}
-		}
-	}
-
-	.payment-section {
-		background-color: #fff;
-		margin: 20rpx;
-		padding: 30rpx;
-		border-radius: 12rpx;
-
-		.section-title {
-			font-size: 28rpx;
-			color: #333;
-			margin-bottom: 20rpx;
-		}
-
-		.payment-item {
-			display: flex;
-			justify-content: space-between;
-			align-items: center;
-			padding: 20rpx 0;
-
-			&.active {
-				.left {
-					text {
-						color: #F95B5B;
-					}
-				}
-			}
-
-			.left {
-				display: flex;
-				align-items: center;
-
-				.payment-icon {
-					width: 40rpx;
-					height: 40rpx;
-					margin-right: 20rpx;
-				}
-
-				text {
-					font-size: 28rpx;
-					color: #333;
-				}
-			}
-		}
-	}
-
-	.amount-section {
-		background-color: #fff;
-		margin: 20rpx;
-		padding: 30rpx;
-		border-radius: 12rpx;
-
-		.amount-item {
-			display: flex;
-			justify-content: space-between;
-			margin-bottom: 20rpx;
-			font-size: 28rpx;
-			color: #666;
-
-			&.total {
-				margin-top: 20rpx;
-				padding-top: 20rpx;
-				border-top: 1px solid #f5f5f5;
-				color: #333;
-				font-weight: bold;
-
-				.price {
-					color: #F95B5B;
-					font-size: 32rpx;
-				}
-			}
-
-			.price {
-				color: #333;
-			}
-		}
-	}
-
-	.submit-bar {
-		position: fixed;
-		bottom: 0;
-		left: 0;
-		right: 0;
-		height: 100rpx;
-		background-color: #fff;
-		display: flex;
-		align-items: center;
-		padding: 0 30rpx;
-		box-shadow: 0 -2rpx 10rpx rgba(0, 0, 0, 0.05);
-
-		.total-amount {
-			flex: 1;
-			font-size: 28rpx;
-
-			.price {
-				color: #F95B5B;
-				font-size: 36rpx;
-				font-weight: bold;
-			}
-		}
-
-		.submit-btn {
-			width: 240rpx;
-			height: 72rpx;
-			line-height: 72rpx;
-			background-color: #F95B5B;
-			color: #fff;
-			font-size: 28rpx;
-			border-radius: 36rpx;
-			text-align: center;
-
-			&[disabled] {
-				background-color: #ccc;
-			}
-		}
-	}
-
-	.empty-state {
-		text-align: center;
-		padding: 40rpx;
-		color: #999;
-		font-size: 28rpx;
-	}
-</style>

+ 0 - 165
packageUser/pages/about/index.vue

@@ -1,165 +0,0 @@
-<template>
-	<view class="about-page">
-		<view class="header">
-			<image class="logo" src="/static/images/logo/c1f9fb42be9c750950c8d7e89a68eba.jpg" mode="aspectFit"></image>
-			<text class="app-name">七指堂商城</text>
-			<text class="version">版本 1.0.0</text>
-		</view>
-		
-		<view class="content">
-			<view class="section">
-				<text class="title">关于我们</text>
-				<text class="text">七指堂商城是一家专注于提供优质商品和服务的电商平台。我们致力于为用户提供优质的购物体验,让每一位用户都能买到称心如意的商品。</text>
-			</view>
-			
-			<view class="section">
-				<text class="title">联系我们</text>
-				<view class="contact-item">
-					<text class="label">客服电话:</text>
-					<text class="value" @tap="makeCall">400-123-4567</text>
-				</view>
-				<view class="contact-item">
-					<text class="label">商务合作:</text>
-					<text class="value">business@qizhitang.com</text>
-				</view>
-				<view class="contact-item">
-					<text class="label">公司地址:</text>
-					<text class="value">广东省广州市天河区科韵路XX号</text>
-				</view>
-			</view>
-			
-			<view class="links">
-				<view class="link-item" @tap="goToPrivacy">
-					<text>隐私政策</text>
-					<text class="iconfont arrow">&#xe685;</text>
-				</view>
-				<view class="link-item" @tap="goToService">
-					<text>服务协议</text>
-					<text class="iconfont arrow">&#xe685;</text>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-export default {
-	methods: {
-		makeCall() {
-			uni.makePhoneCall({
-				phoneNumber: '4001234567'
-			});
-		},
-		
-		goToPrivacy() {
-			uni.navigateTo({
-				url: '/packageUser/pages/article/detail?type=privacy'
-			});
-		},
-		
-		goToService() {
-			uni.navigateTo({
-				url: '/packageUser/pages/article/detail?type=service'
-			});
-		}
-	}
-}
-</script>
-
-<style lang="scss" scoped>
-.about-page {
-	min-height: 100vh;
-	background: #f5f5f5;
-}
-
-.header {
-	display: flex;
-	flex-direction: column;
-	align-items: center;
-	padding: 60rpx 0;
-	background: #fff;
-	
-	.logo {
-		width: 160rpx;
-		height: 160rpx;
-		border-radius: 40rpx;
-	}
-	
-	.app-name {
-		font-size: 36rpx;
-		font-weight: bold;
-		color: #333;
-		margin-top: 20rpx;
-	}
-	
-	.version {
-		font-size: 24rpx;
-		color: #999;
-		margin-top: 10rpx;
-	}
-}
-
-.content {
-	margin-top: 20rpx;
-	
-	.section {
-		background: #fff;
-		padding: 30rpx;
-		margin-bottom: 20rpx;
-		
-		.title {
-			font-size: 32rpx;
-			font-weight: bold;
-			color: #333;
-			margin-bottom: 20rpx;
-		}
-		
-		.text {
-			font-size: 28rpx;
-			color: #666;
-			line-height: 1.6;
-		}
-		
-		.contact-item {
-			display: flex;
-			margin-top: 16rpx;
-			
-			.label {
-				font-size: 28rpx;
-				color: #333;
-			}
-			
-			.value {
-				font-size: 28rpx;
-				color: #666;
-			}
-		}
-	}
-	
-	.links {
-		background: #fff;
-		
-		.link-item {
-			display: flex;
-			align-items: center;
-			justify-content: space-between;
-			padding: 30rpx;
-			border-bottom: 1px solid #eee;
-			
-			text {
-				font-size: 28rpx;
-				color: #333;
-			}
-			
-			.arrow {
-				color: #999;
-				transform: rotate(180deg);
-			}
-			
-			&:last-child {
-				border-bottom: none;
-			}
-		}
-	}
-}
-</style> 

+ 0 - 205
packageUser/pages/address/edit.vue

@@ -1,205 +0,0 @@
-<template>
-  <view class="address-edit">
-    <u-form :model="form" ref="form" :rules="rules">
-      <u-form-item label="收货人" prop="name" required>
-        <u-input v-model="form.name" placeholder="请输入收货人姓名" />
-      </u-form-item>
-      
-      <u-form-item label="手机号码" prop="phone" required>
-        <u-input v-model="form.phone" placeholder="请输入手机号码" type="number" maxlength="11" />
-      </u-form-item>
-      
-      <u-form-item label="所在地区" prop="region" required @click="showRegionPicker = true">
-        <view class="region-select">
-          <text v-if="form.province">{{form.province + form.city + form.district}}</text>
-          <text v-else class="placeholder">请选择所在地区</text>
-          <u-icon name="arrow-right"></u-icon>
-        </view>
-      </u-form-item>
-      
-      <u-form-item label="详细地址" prop="address" required>
-        <u-textarea v-model="form.address" placeholder="请输入详细地址信息" />
-      </u-form-item>
-      
-      <u-form-item>
-        <u-switch v-model="form.isDefault" activeColor="#F95B5B">
-          <text slot="label" class="switch-label">设为默认地址</text>
-        </u-switch>
-      </u-form-item>
-    </u-form>
-
-    <view class="submit-btn">
-      <u-button type="primary" @click="submit" color="#F95B5B">保存</u-button>
-      <u-button v-if="form.id" @click="deleteAddress" type="error">删除</u-button>
-    </view>
-
-    <u-picker
-      :show="showRegionPicker"
-      :columns="regionColumns"
-      @confirm="confirmRegion"
-      @cancel="showRegionPicker = false"
-      title="选择地区">
-    </u-picker>
-    
-    <u-modal
-      :show="showDeleteModal"
-      @confirm="confirmDelete"
-      @cancel="showDeleteModal = false"
-      title="删除确认"
-      content="确定要删除该收货地址吗?"
-      showCancelButton>
-    </u-modal>
-  </view>
-</template>
-
-<script>
-import { addressDetail, addressDel, addressSubmit } from '../../../config/api.js';
-
-export default {
-  data() {
-    return {
-      form: {
-        name: '',
-        phone: '',
-        province: '',
-        city: '',
-        district: '',
-        address: '',
-        isDefault: false
-      },
-      showRegionPicker: false,
-      showDeleteModal: false,
-      regionColumns: [
-        // 这里需要接入省市区数据
-        // 可以使用第三方包或者自行维护数据
-      ],
-      rules: {
-        name: [{
-          required: true,
-          message: '请输入收货人姓名',
-          trigger: ['blur', 'change']
-        }],
-        phone: [{
-          required: true,
-          message: '请输入手机号码',
-          trigger: ['blur', 'change']
-        }, {
-          pattern: /^1[3-9]\d{9}$/,
-          message: '请输入正确的手机号码',
-          trigger: ['blur', 'change']
-        }],
-        region: [{
-          required: true,
-          message: '请选择所在地区',
-          trigger: ['blur', 'change']
-        }],
-        address: [{
-          required: true,
-          message: '请输入详细地址',
-          trigger: ['blur', 'change']
-        }]
-      }
-    }
-  },
-  onLoad(options) {
-    if (options.id) {
-      this.getAddressDetail(options.id)
-    }
-  },
-  methods: {
-    async getAddressDetail(id) {
-      try {
-        const res = await addressDetail({ id })
-        if (res.code === 200 && res.data) {
-          this.form = res.data
-        }
-      } catch (e) {
-        uni.$u.toast('获取地址信息失败')
-      }
-    },
-    confirmRegion(e) {
-      const [province, city, district] = e.value
-      this.form.province = province
-      this.form.city = city
-      this.form.district = district
-      this.showRegionPicker = false
-    },
-    deleteAddress() {
-      this.showDeleteModal = true
-    },
-    async confirmDelete() {
-      try {
-        const res = await addressDel({
-          ids: this.form.id
-        })
-        if (res.code === 200) {
-          uni.$u.toast('删除成功')
-          setTimeout(() => {
-            uni.navigateBack()
-          }, 1500)
-        }
-      } catch (e) {
-        uni.$u.toast('删除失败')
-      }
-      this.showDeleteModal = false
-    },
-    async submit() {
-      try {
-        await this.$refs.form.validate()
-        const res = await addressSubmit(this.form)
-        if (res.code === 200) {
-          uni.$u.toast(this.form.id ? '修改成功' : '添加成功')
-          setTimeout(() => {
-            uni.navigateBack()
-          }, 1500)
-        }
-      } catch (e) {
-        if (e.errors) return
-        uni.$u.toast(this.form.id ? '修改失败' : '添加失败')
-      }
-    }
-  }
-}
-</script>
-
-<style lang="scss">
-.address-edit {
-  min-height: 100vh;
-  background: #f5f5f5;
-  padding: 20rpx;
-  
-  :deep(.u-form) {
-    background: #fff;
-    border-radius: 12rpx;
-    padding: 20rpx;
-    
-    .u-form-item {
-      padding: 20rpx 0;
-    }
-  }
-  
-  .region-select {
-    display: flex;
-    align-items: center;
-    justify-content: space-between;
-    
-    .placeholder {
-      color: #c0c4cc;
-    }
-  }
-  
-  .switch-label {
-    font-size: 28rpx;
-    margin-right: 20rpx;
-  }
-  
-  .submit-btn {
-    margin-top: 40rpx;
-    padding: 0 20rpx;
-    
-    .u-button {
-      margin-bottom: 20rpx;
-    }
-  }
-}
-</style> 

+ 0 - 195
packageUser/pages/address/list.vue

@@ -1,195 +0,0 @@
-<template>
-  <view class="address-container">
-    <u-empty v-if="addressList.length === 0" mode="address" icon="/static/images/empty/address.png">
-      <view class="empty-tips">暂无收货地址</view>
-    </u-empty>
-    
-    <view v-else class="address-list">
-      <view v-for="(item, index) in addressList" :key="index" class="address-item">
-        <view class="address-info" @click="selectAddress(item)">
-          <view class="user-info">
-            <text class="name">{{item.name}}</text>
-            <text class="phone">{{item.phone}}</text>
-            <text v-if="item.isDefault" class="default-tag">默认</text>
-          </view>
-          <view class="address-detail">{{item.province}}{{item.city}}{{item.district}}{{item.address}}</view>
-        </view>
-        <view class="operation">
-          <view class="edit" @click="editAddress(item)">
-            <u-icon name="edit-pen" size="40rpx"></u-icon>
-          </view>
-          <view class="delete" @click="deleteAddress(item)">
-            <u-icon name="trash" size="40rpx"></u-icon>
-          </view>
-        </view>
-      </view>
-    </view>
-
-    <view class="add-btn">
-      <u-button type="primary" text="新增收货地址" @click="addAddress" color="#F95B5B"></u-button>
-    </view>
-
-    <u-modal
-      :show="showDeleteModal"
-      @confirm="confirmDelete"
-      @cancel="showDeleteModal = false"
-      title="删除确认"
-      content="确定要删除该收货地址吗?"
-      showCancelButton>
-    </u-modal>
-  </view>
-</template>
-
-<script>
-import { addressList, addressDel } from '../../../config/api.js';
-
-export default {
-  data() {
-    return {
-      addressList: [],
-      showDeleteModal: false,
-      currentAddress: null,
-      isSelect: false
-    }
-  },
-  onLoad(options) {
-    if (options.select) {
-      this.isSelect = true
-    }
-  },
-  onShow() {
-    this.getAddressList()
-  },
-  methods: {
-    async getAddressList() {
-      try {
-        const res = await addressList()
-        if (res.code === 200) {
-          this.addressList = res.data || []
-        }
-      } catch (e) {
-        uni.$u.toast('获取地址列表失败')
-      }
-    },
-    addAddress() {
-      uni.navigateTo({
-        url: '/packageUser/pages/address/edit'
-      })
-    },
-    editAddress(item) {
-      uni.navigateTo({
-        url: '/packageUser/pages/address/edit?id=' + item.id
-      })
-    },
-    deleteAddress(item) {
-      this.currentAddress = item
-      this.showDeleteModal = true
-    },
-    async confirmDelete() {
-      if (!this.currentAddress) return
-      try {
-        const res = await addressDel({
-          ids: this.currentAddress.id
-        })
-        if (res.code === 200) {
-          uni.$u.toast('删除成功')
-          this.getAddressList()
-        }
-      } catch (e) {
-        uni.$u.toast('删除失败')
-      }
-      this.showDeleteModal = false
-      this.currentAddress = null
-    },
-    selectAddress(item) {
-      if (!this.isSelect) return
-      
-      const pages = getCurrentPages()
-      const prevPage = pages[pages.length - 2]
-      
-      if (prevPage && prevPage.$vm.setSelectedAddress) {
-        prevPage.$vm.setSelectedAddress(item)
-        uni.navigateBack()
-      }
-    }
-  }
-}
-</script>
-
-<style lang="scss">
-.address-container {
-  min-height: 100vh;
-  background: #f5f5f5;
-  padding-bottom: 120rpx;
-  
-  .address-list {
-    padding: 20rpx;
-    
-    .address-item {
-      background: #fff;
-      border-radius: 12rpx;
-      padding: 30rpx;
-      margin-bottom: 20rpx;
-      
-      .address-info {
-        .user-info {
-          margin-bottom: 16rpx;
-          
-          .name {
-            font-size: 32rpx;
-            font-weight: bold;
-            margin-right: 20rpx;
-          }
-          
-          .phone {
-            font-size: 28rpx;
-            color: #666;
-          }
-          
-          .default-tag {
-            background: #F95B5B;
-            color: #fff;
-            font-size: 20rpx;
-            padding: 4rpx 12rpx;
-            border-radius: 4rpx;
-            margin-left: 20rpx;
-          }
-        }
-        
-        .address-detail {
-          font-size: 28rpx;
-          color: #333;
-          line-height: 1.4;
-        }
-      }
-      
-      .operation {
-        display: flex;
-        justify-content: flex-end;
-        margin-top: 20rpx;
-        border-top: 1rpx solid #eee;
-        padding-top: 20rpx;
-        
-        .edit, .delete {
-          padding: 10rpx 20rpx;
-        }
-      }
-    }
-  }
-  
-  .add-btn {
-    position: fixed;
-    bottom: 0;
-    left: 0;
-    right: 0;
-    padding: 20rpx 40rpx;
-    background: #fff;
-  }
-  
-  .empty-tips {
-    font-size: 28rpx;
-    color: #999;
-    margin-top: 20rpx;
-  }
-}
-</style> 

+ 0 - 867
packageUser/pages/collect/index.vue

@@ -1,867 +0,0 @@
-<template>
-	<view class="collect-page">
-
-
-		<!-- 搜索栏 -->
-		<view class="search-section">
-			<view class="search-container">
-				<u-search v-model="searchKeyword" placeholder="搜索收藏的商品" :showAction="true" actionText="搜索"
-					@search="handleSearch" @custom="handleSearch" :clearabled="true" @clear="handleClear"></u-search>
-			</view>
-			<!-- 批量操作栏 -->
-			<view v-if="collectList.length > 0" class="batch-actions">
-				<view class="batch-info">
-					<text class="batch-text">共 {{ collectList.length }} 件收藏商品</text>
-				</view>
-				<view class="batch-buttons">
-					<view class="batch-btn" @click="selectAll">
-						<text class="batch-btn-text">{{ isAllSelected ? '取消全选' : '全选' }}</text>
-					</view>
-					<view v-if="selectedItems.length > 0" class="batch-btn delete-btn" @click="batchCancelCollect">
-						<text class="batch-btn-text">取消收藏({{ selectedItems.length }})</text>
-					</view>
-				</view>
-			</view>
-		</view>
-
-		<!-- 商品列表 -->
-		<scroll-view class="product-list" scroll-y @scrolltolower="loadMore" :refresher-enabled="true"
-			:refresher-triggered="isRefreshing" @refresherrefresh="onRefresh">
-			<!-- 商品卡片 -->
-			<view v-if="collectList.length > 0" class="product-container">
-				<view v-for="(item, index) in collectList" :key="item.id" class="product-card"
-					@click="goToDetail(item.id)">
-					<!-- 选择框 -->
-					<view class="select-checkbox" :class="{ 'selected': selectedItems.includes(item.id) }"
-						@click.stop="toggleSelect(item.id)">
-						<view v-if="selectedItems.includes(item.id)" class="checkmark">✓</view>
-					</view>
-
-					<!-- 商品图片 -->
-					<view class="product-image-container">
-						<image :src="item.images" mode="aspectFill" class="product-image" @error="handleImageError">
-						</image>
-						<!-- 取消收藏按钮 -->
-						<view class="collect-btn" @click.stop="cancelCollect(item, index)">
-							<u-icon name="heart-fill" size="24" color="#FF4B4B"></u-icon>
-						</view>
-					</view>
-
-					<!-- 商品信息 -->
-					<view class="product-info">
-						<view class="product-name">{{ item.name }}</view>
-						<view class="product-desc" v-if="item.description">{{ item.description }}</view>
-
-						<!-- 商品评分和销量 -->
-						<view class="product-meta">
-							<view class="rating-section" v-if="item.productAvg">
-								<u-rate :value="item.productAvg" readonly allowHalf size="12"
-									activeColor="#FFD700"></u-rate>
-								<text class="rating-text">{{ item.productAvg }}</text>
-							</view>
-							<view class="sales-info">
-								<text class="sales-text">已售{{ item.salesTotal || 0 }}件</text>
-							</view>
-						</view>
-
-						<!-- 价格区域 -->
-						<view class="price-section">
-							<view class="price-info">
-								<text class="price-symbol">¥</text>
-								<text class="price-value">{{ item.price }}</text>
-								<text class="original-price"
-									v-if="item.originalPrice && item.originalPrice > item.price">
-									¥{{ item.originalPrice }}
-								</text>
-							</view>
-							<view class="action-buttons">
-								<view class="buy-btn" @click.stop="goToDetail(item.id)">
-									<text class="buy-text">立即购买</text>
-								</view>
-							</view>
-						</view>
-					</view>
-				</view>
-			</view>
-
-			<!-- 空状态 -->
-			<view v-else-if="!isLoading" class="empty-state">
-				<u-empty mode="favor" icon="/static/images/empty.png" text="暂无收藏商品">
-					<view class="empty-tips">
-						<text class="tips-text">快去收藏喜欢的商品吧</text>
-						<view class="go-shop-btn" @click="goToShop">
-							<text class="btn-text">去逛逛</text>
-						</view>
-					</view>
-				</u-empty>
-			</view>
-
-			<!-- 网络错误状态 -->
-			<view v-else-if="networkError" class="error-state">
-				<u-empty mode="wifi" icon="/static/images/empty.png" text="网络连接失败">
-					<view class="error-tips">
-						<text class="error-text">请检查网络连接后重试</text>
-						<view class="retry-btn" @click="retryLoad">
-							<text class="retry-text">重新加载</text>
-						</view>
-					</view>
-				</u-empty>
-			</view>
-
-			<!-- 加载状态 -->
-			<view v-if="isLoading && collectList.length === 0" class="loading-state">
-				<u-loading-icon mode="spinner" size="28"></u-loading-icon>
-				<text class="loading-text">加载中...</text>
-			</view>
-
-			<!-- 加载更多状态 -->
-			<view v-if="collectList.length > 0" class="load-more-state">
-				<view v-if="isLoading" class="loading-more">
-					<u-loading-icon mode="spinner" size="20"></u-loading-icon>
-					<text class="loading-more-text">加载中...</text>
-				</view>
-				<view v-else-if="!hasMore" class="no-more">
-					<text class="no-more-text">—— 已加载全部收藏 ——</text>
-				</view>
-			</view>
-		</scroll-view>
-	</view>
-</template>
-
-<script>
-	import {
-		productCollectList,
-		productClearCollect
-	} from '@/config/api.js';
-
-	export default {
-		data() {
-			return {
-				bgColor: '#ffffff',
-				collectList: [], // 收藏商品列表
-				searchKeyword: '', // 搜索关键词
-				isLoading: false, // 是否正在加载
-				isRefreshing: false, // 是否正在刷新
-				hasMore: true, // 是否还有更多数据
-				selectedItems: [], // 选中的商品ID列表
-				networkError: false, // 网络错误状态
-				params: {
-					current: 1, // 当前页码
-					size: 10, // 每页数量
-					name: '' // 商品名称搜索
-				}
-			}
-		},
-		onLoad() {
-			uni.showLoading({
-				title: '加载中...'
-			})
-			this.getCollectList().finally(() => {
-				uni.hideLoading()
-			})
-		},
-		onShow() {
-			// 页面显示时刷新数据
-			this.refreshData()
-		},
-		onShareAppMessage() {
-			return {
-				title: '我的收藏',
-				path: '/packageUser/pages/collect/index'
-			}
-		},
-		onShareTimeline() {
-			return {
-				title: '我的收藏'
-			}
-		},
-		computed: {
-			// 是否全选
-			isAllSelected() {
-				return this.collectList.length > 0 && this.selectedItems.length === this.collectList.length
-			}
-		},
-		methods: {
-			// 获取收藏列表
-			async getCollectList(isLoadMore = false) {
-				if (this.isLoading) return
-
-				this.isLoading = true
-				this.networkError = false
-
-				try {
-					// 根据API定义,productCollectList是POST请求,需要传递参数
-					const params = {
-						current: this.params.current,
-						size: this.params.size,
-						name: this.params.name
-					}
-
-					const res = await productCollectList(params)
-
-					if (res.code === 200) {
-						// 处理返回的数据结构
-						let newList = []
-						if (res.data && res.data.records) {
-							// 分页数据结构
-							newList = res.data.records
-						} else if (Array.isArray(res.data)) {
-							// 直接数组结构
-							newList = res.data
-						} else if (res.data && Array.isArray(res.data.list)) {
-							// 其他可能的数据结构
-							newList = res.data.list
-						}
-
-						// 确保newList是数组
-						if (!Array.isArray(newList)) {
-							newList = []
-						}
-
-						if (isLoadMore) {
-							this.collectList = [...this.collectList, ...newList]
-						} else {
-							this.collectList = newList
-						}
-
-						// 判断是否还有更多数据
-						this.hasMore = newList.length === this.params.size
-					} else {
-						uni.showToast({
-							title: res.msg || '获取收藏列表失败',
-							icon: 'none'
-						})
-					}
-				} catch (error) {
-					console.error('获取收藏列表失败:', error)
-					this.networkError = true
-					uni.showToast({
-						title: '网络错误,请重试',
-						icon: 'none'
-					})
-				} finally {
-					this.isLoading = false
-					this.isRefreshing = false
-				}
-			},
-
-			// 搜索处理
-			handleSearch() {
-				this.params.name = this.searchKeyword
-				this.params.current = 1
-				this.hasMore = true
-				this.selectedItems = [] // 清空选中状态
-				this.getCollectList()
-			},
-
-			// 清除搜索
-			handleClear() {
-				this.searchKeyword = ''
-				this.params.name = ''
-				this.params.current = 1
-				this.hasMore = true
-				this.selectedItems = [] // 清空选中状态
-				this.getCollectList()
-			},
-
-			// 取消收藏
-			async cancelCollect(item, index) {
-				uni.showModal({
-					title: '提示',
-					content: '确定要取消收藏这个商品吗?',
-					success: async (res) => {
-						if (res.confirm) {
-							try {
-								const params = {
-									productId: item.id
-								}
-
-								const result = await productClearCollect(params)
-
-								if (result.code === 200) {
-									// 从列表中移除
-									this.collectList.splice(index, 1)
-
-									uni.showToast({
-										title: '已取消收藏',
-										icon: 'success'
-									})
-
-									// 如果列表为空,刷新数据
-									if (this.collectList.length === 0) {
-										this.refreshData()
-									}
-								} else {
-									uni.showToast({
-										title: result.msg || '取消收藏失败',
-										icon: 'none'
-									})
-								}
-							} catch (error) {
-								console.error('取消收藏失败:', error)
-								uni.showToast({
-									title: '网络错误,请重试',
-									icon: 'none'
-								})
-							}
-						}
-					}
-				})
-			},
-
-			// 加载更多
-			loadMore() {
-				if (this.isLoading || !this.hasMore) return
-
-				this.params.current++
-				this.getCollectList(true)
-			},
-
-			// 下拉刷新
-			async onRefresh() {
-				this.isRefreshing = true
-				this.params.current = 1
-				this.hasMore = true
-				await this.getCollectList()
-			},
-
-			// 刷新数据
-			refreshData() {
-				this.params.current = 1
-				this.hasMore = true
-				this.selectedItems = [] // 清空选中状态
-				this.getCollectList()
-			},
-
-			// 跳转到商品详情
-			goToDetail(productId) {
-				uni.navigateTo({
-					url: `/packageShop/pages/detail/index?id=${productId}`
-				})
-			},
-
-			// 跳转到商城
-			goToShop() {
-				uni.switchTab({
-					url: '/pages/shop/product-type-list'
-				})
-			},
-
-			// 图片加载错误处理
-			handleImageError() {
-				// 可以设置默认图片
-				console.log('图片加载失败')
-			},
-
-			// 重试加载
-			retryLoad() {
-				this.networkError = false
-				this.refreshData()
-			},
-
-			// 切换选择状态
-			toggleSelect(productId) {
-				const index = this.selectedItems.indexOf(productId)
-				if (index > -1) {
-					this.selectedItems.splice(index, 1)
-				} else {
-					this.selectedItems.push(productId)
-				}
-			},
-
-			// 全选/取消全选
-			selectAll() {
-				if (this.isAllSelected) {
-					this.selectedItems = []
-				} else {
-					this.selectedItems = this.collectList.map(item => item.id)
-				}
-			},
-
-			// 批量取消收藏
-			async batchCancelCollect() {
-				if (this.selectedItems.length === 0) {
-					uni.showToast({
-						title: '请选择要取消收藏的商品',
-						icon: 'none'
-					})
-					return
-				}
-
-				uni.showModal({
-					title: '提示',
-					content: `确定要取消收藏选中的 ${this.selectedItems.length} 件商品吗?`,
-					success: async (res) => {
-						if (res.confirm) {
-							try {
-								uni.showLoading({
-									title: '处理中...'
-								})
-
-								// 逐个取消收藏
-								const promises = this.selectedItems.map(productId => {
-									return productClearCollect({
-										productId
-									})
-								})
-
-								await Promise.all(promises)
-
-								// 从列表中移除选中的商品
-								this.collectList = this.collectList.filter(item =>
-									!this.selectedItems.includes(item.id)
-								)
-
-								// 清空选中列表
-								this.selectedItems = []
-
-								uni.hideLoading()
-								uni.showToast({
-									title: '批量取消收藏成功',
-									icon: 'success'
-								})
-
-								// 如果列表为空,刷新数据
-								if (this.collectList.length === 0) {
-									this.refreshData()
-								}
-							} catch (error) {
-								uni.hideLoading()
-								console.error('批量取消收藏失败:', error)
-								uni.showToast({
-									title: '批量操作失败,请重试',
-									icon: 'none'
-								})
-							}
-						}
-					}
-				})
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	.collect-page {
-		min-height: 100vh;
-		background-color: #f5f5f5;
-	}
-
-	.search-section {
-		padding: 20rpx;
-		background-color: #fff;
-		border-bottom: 1rpx solid #eee;
-	}
-
-	.search-container {
-		background-color: #f8f8f8;
-		border-radius: 20rpx;
-		overflow: hidden;
-	}
-
-	.batch-actions {
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-		padding: 20rpx 0;
-		border-top: 1rpx solid #eee;
-		margin-top: 20rpx;
-	}
-
-	.batch-info {
-		flex: 1;
-	}
-
-	.batch-text {
-		font-size: 26rpx;
-		color: #666;
-	}
-
-	.batch-buttons {
-		display: flex;
-		gap: 20rpx;
-	}
-
-	.batch-btn {
-		padding: 12rpx 24rpx;
-		border-radius: 20rpx;
-		background-color: #f0f0f0;
-		transition: all 0.3s ease;
-	}
-
-	.batch-btn:active {
-		transform: scale(0.95);
-	}
-
-	.batch-btn-text {
-		font-size: 24rpx;
-		color: #333;
-	}
-
-	.delete-btn {
-		background-color: #FFE6E6;
-	}
-
-	.delete-btn .batch-btn-text {
-		color: #FF4B4B;
-	}
-
-	.product-list {
-		flex: 1;
-		height: calc(100vh - 200rpx);
-	}
-
-	.product-container {
-		padding: 20rpx;
-	}
-
-	.product-card {
-		background-color: #fff;
-		border-radius: 16rpx;
-		margin-bottom: 20rpx;
-		overflow: hidden;
-		box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.05);
-		transition: all 0.3s ease;
-		position: relative;
-	}
-
-	/* 移除商品卡片的选中状态样式,只保留选择框的选中状态 */
-
-	.select-checkbox {
-		position: absolute;
-		top: 20rpx;
-		left: 20rpx;
-		z-index: 10;
-		width: 40rpx;
-		height: 40rpx;
-		background-color: rgba(255, 255, 255, 0.9);
-		border-radius: 50%;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		backdrop-filter: blur(10rpx);
-		box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1);
-		transition: all 0.3s ease;
-		border: 2rpx solid #ccc;
-	}
-
-	.select-checkbox:active {
-		transform: scale(0.9);
-	}
-
-	.select-checkbox.selected {
-		border-color: #FF4B4B;
-		background-color: #FF4B4B;
-	}
-
-	.checkmark {
-		color: #fff;
-		font-size: 20rpx;
-		font-weight: bold;
-		line-height: 1;
-	}
-
-	.product-card:active {
-		transform: scale(0.98);
-		box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1);
-	}
-
-	.product-image-container {
-		position: relative;
-		width: 100%;
-		height: 400rpx;
-		overflow: hidden;
-	}
-
-	.product-image {
-		width: 100%;
-		height: 100%;
-		transition: transform 0.3s ease;
-	}
-
-	.product-card:active .product-image {
-		transform: scale(1.05);
-	}
-
-	.collect-btn {
-		position: absolute;
-		top: 20rpx;
-		right: 20rpx;
-		width: 60rpx;
-		height: 60rpx;
-		background-color: rgba(255, 255, 255, 0.9);
-		border-radius: 50%;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		backdrop-filter: blur(10rpx);
-		box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.1);
-		transition: all 0.3s ease;
-	}
-
-	.collect-btn:active {
-		transform: scale(0.9);
-		background-color: rgba(255, 255, 255, 1);
-	}
-
-	.product-info {
-		padding: 24rpx;
-	}
-
-	.product-name {
-		font-size: 30rpx;
-		color: #333;
-		font-weight: 600;
-		line-height: 1.4;
-		margin-bottom: 12rpx;
-		display: -webkit-box;
-		-webkit-line-clamp: 2;
-		-webkit-box-orient: vertical;
-		overflow: hidden;
-		writing-mode: horizontal-tb;
-		text-orientation: mixed;
-	}
-
-	.product-desc {
-		font-size: 24rpx;
-		color: #666;
-		margin-bottom: 16rpx;
-		display: -webkit-box;
-		-webkit-line-clamp: 2;
-		-webkit-box-orient: vertical;
-		overflow: hidden;
-		line-height: 1.4;
-		writing-mode: horizontal-tb;
-		text-orientation: mixed;
-	}
-
-	.product-meta {
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-		margin-bottom: 20rpx;
-	}
-
-	.rating-section {
-		display: flex;
-		align-items: center;
-		gap: 8rpx;
-	}
-
-	.rating-text {
-		font-size: 22rpx;
-		color: #666;
-		writing-mode: horizontal-tb;
-		text-orientation: mixed;
-	}
-
-	.sales-info {
-		text-align: right;
-		display: flex;
-		align-items: center;
-		justify-content: flex-end;
-	}
-
-	.sales-text {
-		font-size: 22rpx;
-		color: #999;
-		white-space: nowrap;
-		writing-mode: horizontal-tb;
-		text-orientation: mixed;
-	}
-
-	.price-section {
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-	}
-
-	.price-info {
-		display: flex;
-		align-items: baseline;
-		gap: 4rpx;
-	}
-
-	.price-symbol {
-		font-size: 24rpx;
-		color: #FF4B4B;
-		font-weight: 600;
-		writing-mode: horizontal-tb;
-		text-orientation: mixed;
-	}
-
-	.price-value {
-		font-size: 36rpx;
-		color: #FF4B4B;
-		font-weight: 700;
-		writing-mode: horizontal-tb;
-		text-orientation: mixed;
-	}
-
-	.original-price {
-		font-size: 24rpx;
-		color: #999;
-		text-decoration: line-through;
-		margin-left: 8rpx;
-		writing-mode: horizontal-tb;
-		text-orientation: mixed;
-	}
-
-	.action-buttons {
-		display: flex;
-		gap: 12rpx;
-	}
-
-	.buy-btn {
-		background: linear-gradient(135deg, #FF4B4B 0%, #FF6B6B 100%);
-		border-radius: 20rpx;
-		padding: 12rpx 24rpx;
-		transition: all 0.3s ease;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		min-width: 80rpx;
-		height: 60rpx;
-	}
-
-	.buy-btn:active {
-		transform: scale(0.95);
-		background: linear-gradient(135deg, #E63939 0%, #E65959 100%);
-	}
-
-	.buy-text {
-		color: #fff;
-		font-size: 24rpx;
-		font-weight: 600;
-		white-space: nowrap;
-		writing-mode: horizontal-tb;
-		text-orientation: mixed;
-	}
-
-	.empty-state {
-		padding: 100rpx 40rpx;
-		text-align: center;
-	}
-
-	.empty-tips {
-		margin-top: 30rpx;
-	}
-
-	.tips-text {
-		font-size: 28rpx;
-		color: #999;
-		display: block;
-		margin-bottom: 30rpx;
-	}
-
-	.go-shop-btn {
-		background: linear-gradient(135deg, #FF4B4B 0%, #FF6B6B 100%);
-		border-radius: 25rpx;
-		padding: 16rpx 40rpx;
-		display: inline-block;
-		transition: all 0.3s ease;
-	}
-
-	.go-shop-btn:active {
-		transform: scale(0.95);
-	}
-
-	.btn-text {
-		color: #fff;
-		font-size: 28rpx;
-		font-weight: 600;
-	}
-
-	.error-state {
-		padding: 100rpx 40rpx;
-		text-align: center;
-	}
-
-	.error-tips {
-		margin-top: 30rpx;
-	}
-
-	.error-text {
-		font-size: 28rpx;
-		color: #999;
-		display: block;
-		margin-bottom: 30rpx;
-	}
-
-	.retry-btn {
-		background: linear-gradient(135deg, #007AFF 0%, #5AC8FA 100%);
-		border-radius: 25rpx;
-		padding: 16rpx 40rpx;
-		display: inline-block;
-		transition: all 0.3s ease;
-	}
-
-	.retry-btn:active {
-		transform: scale(0.95);
-	}
-
-	.retry-text {
-		color: #fff;
-		font-size: 28rpx;
-		font-weight: 600;
-	}
-
-	.loading-state {
-		padding: 100rpx 40rpx;
-		text-align: center;
-		display: flex;
-		flex-direction: column;
-		align-items: center;
-		gap: 20rpx;
-	}
-
-	.loading-text {
-		font-size: 28rpx;
-		color: #999;
-	}
-
-	.load-more-state {
-		padding: 40rpx 20rpx;
-		text-align: center;
-	}
-
-	.loading-more {
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		gap: 12rpx;
-	}
-
-	.loading-more-text {
-		font-size: 24rpx;
-		color: #999;
-	}
-
-	.no-more {
-		text-align: center;
-	}
-
-	.no-more-text {
-		font-size: 24rpx;
-		color: #999;
-		position: relative;
-	}
-
-	.no-more-text::before,
-	.no-more-text::after {
-		content: '';
-		position: absolute;
-		top: 50%;
-		width: 60rpx;
-		height: 1rpx;
-		background-color: #ddd;
-	}
-
-	.no-more-text::before {
-		left: -80rpx;
-	}
-
-	.no-more-text::after {
-		right: -80rpx;
-	}
-</style>

+ 0 - 223
packageUser/pages/feedback/index.vue

@@ -1,223 +0,0 @@
-<template>
-	<view class="feedback-page">
-		<view class="header">
-			<text class="title">意见反馈</text>
-		</view>
-		
-		<view class="form-section">
-			<textarea class="feedback-input" 
-				v-model="content" 
-				placeholder="请输入您的宝贵意见,我们会认真查看并及时处理..."
-				:maxlength="500"
-			></textarea>
-			<view class="word-count">{{content.length}}/500</view>
-			
-			<view class="image-upload">
-				<view class="title">图片上传(选填)</view>
-				<view class="image-list">
-					<view class="image-item" v-for="(item, index) in images" :key="index">
-						<image :src="item" mode="aspectFill"></image>
-						<view class="delete-btn" @tap="deleteImage(index)">×</view>
-					</view>
-					<view class="upload-btn" @tap="chooseImage" v-if="images.length < 4">
-						<text class="iconfont">&#xe685;</text>
-						<text>上传图片</text>
-					</view>
-				</view>
-			</view>
-			
-			<view class="contact-input">
-				<input type="text" v-model="contact" placeholder="请留下您的联系方式(选填)" />
-			</view>
-			
-			<button class="submit-btn" @tap="handleSubmit">提交反馈</button>
-		</view>
-	</view>
-</template>
-
-<script>
-export default {
-	data() {
-		return {
-			content: '',
-			images: [],
-			contact: ''
-		}
-	},
-	methods: {
-		// 选择图片
-		chooseImage() {
-			uni.chooseImage({
-				count: 4 - this.images.length,
-				success: (res) => {
-					this.images = [...this.images, ...res.tempFilePaths];
-				}
-			});
-		},
-		
-		// 删除图片
-		deleteImage(index) {
-			this.images.splice(index, 1);
-		},
-		
-		// 提交反馈
-		handleSubmit() {
-			if (!this.content) {
-				uni.showToast({
-					title: '请输入反馈内容',
-					icon: 'none'
-				});
-				return;
-			}
-			
-			uni.showLoading({
-				title: '提交中...'
-			});
-			
-			// TODO: 调用提交反馈接口
-			setTimeout(() => {
-				uni.hideLoading();
-				uni.showToast({
-					title: '提交成功',
-					icon: 'success'
-				});
-				
-				setTimeout(() => {
-					uni.navigateBack();
-				}, 1500);
-			}, 1000);
-		}
-	}
-}
-</script>
-
-<style lang="scss" scoped>
-.feedback-page {
-	min-height: 100vh;
-	background: #f5f5f5;
-}
-
-.header {
-	background: #fff;
-	padding: 20rpx 30rpx;
-	
-	.title {
-		font-size: 32rpx;
-		font-weight: bold;
-		color: #333;
-	}
-}
-
-.form-section {
-	margin-top: 20rpx;
-	padding: 30rpx;
-	background: #fff;
-	
-	.feedback-input {
-		width: 100%;
-		height: 300rpx;
-		padding: 20rpx;
-		font-size: 28rpx;
-		color: #333;
-		background: #f8f8f8;
-		border-radius: 12rpx;
-	}
-	
-	.word-count {
-		text-align: right;
-		font-size: 24rpx;
-		color: #999;
-		margin-top: 10rpx;
-	}
-	
-	.image-upload {
-		margin-top: 40rpx;
-		
-		.title {
-			font-size: 28rpx;
-			color: #333;
-			margin-bottom: 20rpx;
-		}
-		
-		.image-list {
-			display: flex;
-			flex-wrap: wrap;
-			
-			.image-item {
-				position: relative;
-				width: 160rpx;
-				height: 160rpx;
-				margin-right: 20rpx;
-				margin-bottom: 20rpx;
-				
-				image {
-					width: 100%;
-					height: 100%;
-					border-radius: 8rpx;
-				}
-				
-				.delete-btn {
-					position: absolute;
-					right: -10rpx;
-					top: -10rpx;
-					width: 40rpx;
-					height: 40rpx;
-					line-height: 40rpx;
-					text-align: center;
-					background: rgba(0, 0, 0, 0.5);
-					color: #fff;
-					border-radius: 50%;
-				}
-			}
-			
-			.upload-btn {
-				width: 160rpx;
-				height: 160rpx;
-				display: flex;
-				flex-direction: column;
-				align-items: center;
-				justify-content: center;
-				background: #f8f8f8;
-				border-radius: 8rpx;
-				
-				.iconfont {
-					font-size: 48rpx;
-					color: #999;
-					margin-bottom: 10rpx;
-				}
-				
-				text {
-					font-size: 24rpx;
-					color: #999;
-				}
-			}
-		}
-	}
-	
-	.contact-input {
-		margin-top: 40rpx;
-		
-		input {
-			width: 100%;
-			height: 88rpx;
-			padding: 0 20rpx;
-			font-size: 28rpx;
-			color: #333;
-			background: #f8f8f8;
-			border-radius: 12rpx;
-		}
-	}
-	
-	.submit-btn {
-		width: 100%;
-		height: 88rpx;
-		line-height: 88rpx;
-		text-align: center;
-		background: #D93025;
-		color: #fff;
-		font-size: 32rpx;
-		border-radius: 44rpx;
-		margin-top: 60rpx;
-	}
-}
-</style> 

+ 0 - 106
packageUser/pages/language/index.vue

@@ -1,106 +0,0 @@
-<template>
-	<view class="language-page">
-		<view class="header">
-			<text class="title">语言设置</text>
-		</view>
-		
-		<view class="language-list">
-			<view class="language-item" 
-				v-for="(item, index) in languages" 
-				:key="index"
-				@tap="selectLanguage(item.value)"
-			>
-				<text>{{item.label}}</text>
-				<text class="iconfont check" v-if="currentLang === item.value">&#xe685;</text>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-export default {
-	data() {
-		return {
-			currentLang: 'zh-CN',
-			languages: [
-				{ label: '简体中文', value: 'zh-CN' },
-				{ label: '繁體中文', value: 'zh-TW' },
-				{ label: 'English', value: 'en-US' }
-			]
-		}
-	},
-	onLoad() {
-		// 获取当前语言设置
-		const lang = uni.getStorageSync('language') || 'zh-CN';
-		this.currentLang = lang;
-	},
-	methods: {
-		selectLanguage(lang) {
-			if (lang === this.currentLang) return;
-			
-			uni.showModal({
-				title: '提示',
-				content: '切换语言需要重启应用,是否继续?',
-				success: (res) => {
-					if (res.confirm) {
-						// 保存语言设置
-						uni.setStorageSync('language', lang);
-						this.currentLang = lang;
-						
-						// 重启应用
-						setTimeout(() => {
-							uni.reLaunch({
-								url: '/pages/index/indexNew'
-							});
-						}, 1500);
-					}
-				}
-			});
-		}
-	}
-}
-</script>
-
-<style lang="scss" scoped>
-.language-page {
-	min-height: 100vh;
-	background: #f5f5f5;
-}
-
-.header {
-	background: #fff;
-	padding: 20rpx 30rpx;
-	
-	.title {
-		font-size: 32rpx;
-		font-weight: bold;
-		color: #333;
-	}
-}
-
-.language-list {
-	margin-top: 20rpx;
-	background: #fff;
-	
-	.language-item {
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-		padding: 30rpx;
-		border-bottom: 1px solid #eee;
-		
-		text {
-			font-size: 28rpx;
-			color: #333;
-		}
-		
-		.check {
-			color: #D93025;
-		}
-		
-		&:last-child {
-			border-bottom: none;
-		}
-	}
-}
-</style> 

+ 0 - 570
packageUser/pages/level/index.vue

@@ -1,570 +0,0 @@
-<template>
-	<view class="level-center">
-		<!-- 用户当前等级信息 -->
-		<view class="user-level-info">
-			<view class="level-header">
-				<view class="level-left">
-					<view class="level-title">{{currentLevel.name}}</view>
-					<view class="level-desc">距离下一个等级 <text class="next-level">{{nextLevel.name}}</text></view>
-				</view>
-				<view class="level-right" @click="goToOrderHistory">
-					<view class="order-history">
-						<u-icon name="clock" size="40" color="#fff"></u-icon>
-						<text>购买记录</text>
-					</view>
-				</view>
-			</view>
-
-			<!-- 会员权益卡片 -->
-
-		</view>
-
-		<!-- 等级进度条 -->
-		<view class="level-progress">
-			<view class="progress-header">
-				<text class="progress-title">升级进度</text>
-				<text class="progress-percent">{{progressPercentage}}%</text>
-			</view>
-			<view class="progress-bar">
-				<view class="progress-inner" :style="{width: progressPercentage + '%'}">
-					<view class="progress-dot"></view>
-				</view>
-			</view>
-			<view class="level-points">
-				<view class="current-points">
-					<text class="point-label">已购买商品</text>
-					<text class="point-value">{{currentBuyCount}}个</text>
-				</view>
-				<view class="next-level-points">
-					<text class="point-label">还需购买</text>
-					<text class="point-value highlight">{{remainingCount}}个</text>
-				</view>
-			</view>
-		</view>
-
-		<!-- 等级图标展示 -->
-		<view class="level-icons">
-			<view v-for="(level, index) in levels" :key="index" class="level-icon-item"
-				:class="{'active': currentLevelIndex >= index}">
-				<view class="level-icon-wrapper" :class="[level.effect]">
-					<image :src="level.icon" mode="aspectFit" class="level-icon"
-						:style="level.color ? {filter: 'drop-shadow(0 0 3px '+level.color+') brightness(1.1)', fill: level.color} : ''">
-					</image>
-				</view>
-				<text class="level-name" :style="level.color ? {color: level.color} : ''">{{level.name}}</text>
-			</view>
-		</view>
-
-		<!-- 等级说明 -->
-		<view class="level-description">
-			<view class="desc-header">
-				<text class="desc-title">等级说明</text>
-				<text class="desc-subtitle">会员等级越高 优惠越多</text>
-			</view>
-			
-			<!-- 等级计算规则说明 -->
-			<view class="level-rule-notice">
-				<view class="rule-icon">
-					<u-icon name="info-circle" size="32" color="#8B5CF6"></u-icon>
-				</view>
-				<view class="rule-content">
-					<view class="rule-title">等级计算规则</view>
-					<view class="rule-text">您的会员等级将在每月1号根据上个月的购买商品数量进行更新,购买数量越多等级越高</view>
-				</view>
-			</view>
-			
-			<view class="desc-list">
-				<view class="desc-item" v-for="(level, index) in levels" :key="index">
-					<view class="desc-left">
-						<view class="desc-level">{{level.name}}</view>
-						<view class="desc-benefits">{{level.benefits}}</view>
-					</view>
-					<view class="desc-right">
-						<view class="desc-requirement">购买商品数达到 <text class="highlight">{{level.requirement}}</text> 个
-						</view>
-					</view>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	import {
-		countPaidProducts
-	} from '@/config/api';
-	export default {
-		data() {
-			return {
-				currentBuyCount: 0, // 当前购买数量,从接口获取
-				levels: [{
-						name: '普通会员',
-						requirement: 0,
-						icon: '/static/images/level.png',
-						color: '',
-						effect: ''
-					},
-					{
-						name: 'S级会员',
-						requirement: 20,
-						icon: '/static/images/level1.png',
-						color: '#FFB800',
-						effect: 'level-effect-s'
-					},
-					{
-						name: 'SS级会员',
-						requirement: 40,
-						icon: '/static/images/level2.png',
-						color: '#FF6B6B',
-						effect: 'level-effect-ss'
-					},
-					{
-						name: 'SSS级会员',
-						requirement: 55,
-						icon: '/static/images/level3.png',
-						color: '#8B5CF6',
-						effect: 'level-effect-sss'
-					}
-				]
-			}
-		},
-		computed: {
-			currentLevelIndex() {
-				for (let i = this.levels.length - 1; i >= 0; i--) {
-					if (this.currentBuyCount >= this.levels[i].requirement) {
-						return i;
-					}
-				}
-				return 0;
-			},
-			currentLevel() {
-				return this.levels[this.currentLevelIndex];
-			},
-			nextLevel() {
-				return this.levels[Math.min(this.currentLevelIndex + 1, this.levels.length - 1)];
-			},
-			remainingCount() {
-				if (this.currentLevelIndex === this.levels.length - 1) {
-					return 0;
-				}
-				return this.nextLevel.requirement - this.currentBuyCount;
-			},
-			progressPercentage() {
-				if (this.currentLevelIndex === this.levels.length - 1) {
-					return 100;
-				}
-				const currentRange = this.nextLevel.requirement - this.currentLevel.requirement;
-				const currentProgress = this.currentBuyCount - this.currentLevel.requirement;
-				return Math.min(Math.floor((currentProgress / currentRange) * 100), 100);
-			}
-		},
-		onLoad() {
-			this.getCurrentBuyCount();
-		},
-		methods: {
-			// 获取当前用户购买商品数量
-			async getCurrentBuyCount() {
-				try {
-					const res = await countPaidProducts();
-					if (res.code === 200 && res.data !== null) {
-						this.currentBuyCount = res.data.productCount;
-					}
-				} catch (error) {
-					console.error('获取购买商品数量失败:', error);
-					// 如果接口调用失败,保持默认值
-				}
-			},
-			goToOrderHistory() {
-				uni.navigateTo({
-					url: '/packageOrder/pages/list/index'
-				});
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	.level-center {
-		padding: 20rpx;
-		background-color: #f5f5f5;
-		min-height: 100vh;
-
-		.user-level-info {
-			background: linear-gradient(135deg, #8B5CF6 0%, #6366F1 100%);
-			padding: 30rpx;
-			border-radius: 20rpx;
-			color: #fff;
-			margin-bottom: 30rpx;
-			box-shadow: 0 4rpx 20rpx rgba(99, 102, 241, 0.2);
-
-			.level-header {
-				display: flex;
-				justify-content: space-between;
-				align-items: flex-start;
-				margin-bottom: 30rpx;
-
-				.level-left {
-					.level-title {
-						font-size: 44rpx;
-						font-weight: bold;
-						margin-bottom: 10rpx;
-					}
-
-					.level-desc {
-						font-size: 28rpx;
-						opacity: 0.9;
-
-						.next-level {
-							color: #FFD700;
-							font-weight: bold;
-						}
-					}
-				}
-
-				.level-right {
-					.order-history {
-						display: flex;
-						flex-direction: column;
-						align-items: center;
-						background: rgba(255, 255, 255, 0.1);
-						padding: 10rpx 20rpx;
-						border-radius: 12rpx;
-
-						text {
-							font-size: 24rpx;
-							margin-top: 6rpx;
-						}
-					}
-				}
-			}
-
-			.level-benefits {
-				display: flex;
-				justify-content: space-around;
-				margin-top: 20rpx;
-				background: rgba(255, 255, 255, 0.1);
-				border-radius: 16rpx;
-				padding: 20rpx 0;
-
-				.benefit-item {
-					display: flex;
-					flex-direction: column;
-					align-items: center;
-
-					.benefit-value {
-						font-size: 32rpx;
-						font-weight: bold;
-						margin-bottom: 6rpx;
-					}
-
-					.benefit-label {
-						font-size: 24rpx;
-						opacity: 0.8;
-					}
-				}
-			}
-		}
-
-		.level-progress {
-			background-color: #fff;
-			padding: 30rpx;
-			border-radius: 20rpx;
-			margin-bottom: 30rpx;
-			box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.05);
-
-			.progress-header {
-				display: flex;
-				justify-content: space-between;
-				align-items: center;
-				margin-bottom: 20rpx;
-
-				.progress-title {
-					font-size: 28rpx;
-					color: #333;
-					font-weight: bold;
-				}
-
-				.progress-percent {
-					font-size: 28rpx;
-					color: #8B5CF6;
-					font-weight: bold;
-				}
-			}
-
-			.progress-bar {
-				height: 16rpx;
-				background-color: #E5E7EB;
-				border-radius: 8rpx;
-				overflow: hidden;
-				margin-bottom: 20rpx;
-				position: relative;
-
-				.progress-inner {
-					height: 100%;
-					background: linear-gradient(to right, #8B5CF6, #6366F1);
-					border-radius: 8rpx;
-					transition: width 0.3s;
-					position: relative;
-
-					.progress-dot {
-						position: absolute;
-						right: -6rpx;
-						top: 50%;
-						transform: translateY(-50%);
-						width: 12rpx;
-						height: 12rpx;
-						background: #fff;
-						border-radius: 50%;
-						box-shadow: 0 0 10rpx rgba(139, 92, 246, 0.5);
-					}
-				}
-			}
-
-			.level-points {
-				display: flex;
-				justify-content: space-between;
-				font-size: 24rpx;
-
-				.current-points,
-				.next-level-points {
-					display: flex;
-					flex-direction: column;
-					align-items: flex-start;
-
-					.point-label {
-						color: #666;
-						margin-bottom: 4rpx;
-					}
-
-					.point-value {
-						font-size: 28rpx;
-						font-weight: bold;
-						color: #333;
-
-						&.highlight {
-							color: #FF6B6B;
-						}
-					}
-				}
-			}
-		}
-
-		.level-icons {
-			display: flex;
-			justify-content: space-between;
-			align-items: center;
-			background-color: #fff;
-			padding: 30rpx;
-			border-radius: 20rpx;
-			margin-bottom: 30rpx;
-
-			.level-icon-item {
-				display: flex;
-				flex-direction: column;
-				align-items: center;
-				opacity: 0.5;
-
-				&.active {
-					opacity: 1;
-				}
-
-				.level-icon-wrapper {
-					width: 90rpx;
-					height: 90rpx;
-					display: flex;
-					align-items: center;
-					justify-content: center;
-					margin-bottom: 10rpx;
-					position: relative;
-
-					&.level-effect-s {
-						&::before {
-							content: '';
-							position: absolute;
-							width: 110%;
-							height: 110%;
-							border-radius: 50%;
-							border: 2rpx solid rgba(255, 184, 0, 0.3);
-							animation: borderPulse 1.5s ease-in-out infinite;
-						}
-					}
-
-					&.level-effect-ss {
-						&::before {
-							content: '';
-							position: absolute;
-							width: 115%;
-							height: 115%;
-							border-radius: 50%;
-							background: linear-gradient(45deg,
-									rgba(255, 107, 107, 0.1) 0%,
-									rgba(255, 107, 107, 0.2) 50%,
-									rgba(255, 107, 107, 0.1) 100%);
-							animation: shine 2s linear infinite;
-						}
-					}
-
-					&.level-effect-sss {
-						&::before {
-							content: '';
-							position: absolute;
-							width: 120%;
-							height: 120%;
-							border-radius: 50%;
-							background: linear-gradient(135deg,
-									rgba(139, 92, 246, 0.1) 0%,
-									rgba(139, 92, 246, 0.2) 50%,
-									rgba(139, 92, 246, 0.1) 100%);
-							animation: shine 1.5s linear infinite;
-						}
-					}
-
-					.level-icon {
-						width: 70rpx;
-						height: 70rpx;
-						position: relative;
-						z-index: 1;
-					}
-				}
-
-				@keyframes borderPulse {
-					0% {
-						transform: scale(1);
-						opacity: 0.6;
-					}
-
-					50% {
-						transform: scale(1.1);
-						opacity: 0.3;
-					}
-
-					100% {
-						transform: scale(1);
-						opacity: 0.6;
-					}
-				}
-
-				@keyframes shine {
-					0% {
-						transform: rotate(0deg);
-						opacity: 0.3;
-					}
-
-					50% {
-						opacity: 0.5;
-					}
-
-					100% {
-						transform: rotate(360deg);
-						opacity: 0.3;
-					}
-				}
-
-				.level-name {
-					font-size: 24rpx;
-					color: #666;
-				}
-			}
-		}
-
-		.level-description {
-			background-color: #fff;
-			padding: 30rpx;
-			border-radius: 20rpx;
-			box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.05);
-
-			.level-rule-notice {
-				display: flex;
-				align-items: flex-start;
-				background: linear-gradient(135deg, rgba(139, 92, 246, 0.05) 0%, rgba(99, 102, 241, 0.05) 100%);
-				border: 2rpx solid rgba(139, 92, 246, 0.1);
-				border-radius: 16rpx;
-				padding: 24rpx;
-				margin-bottom: 30rpx;
-
-				.rule-icon {
-					margin-right: 16rpx;
-					margin-top: 4rpx;
-					flex-shrink: 0;
-				}
-
-				.rule-content {
-					flex: 1;
-
-					.rule-title {
-						font-size: 28rpx;
-						font-weight: bold;
-						color: #8B5CF6;
-						margin-bottom: 8rpx;
-					}
-
-					.rule-text {
-						font-size: 26rpx;
-						color: #666;
-						line-height: 1.5;
-					}
-				}
-			}
-
-			.desc-header {
-				display: flex;
-				justify-content: space-between;
-				align-items: center;
-				margin-bottom: 30rpx;
-				padding-bottom: 20rpx;
-				border-bottom: 2rpx solid #f5f5f5;
-
-				.desc-title {
-					font-size: 32rpx;
-					font-weight: bold;
-					color: #333;
-				}
-
-				.desc-subtitle {
-					font-size: 24rpx;
-					color: #666;
-				}
-			}
-
-			.desc-list {
-				.desc-item {
-					display: flex;
-					justify-content: space-between;
-					align-items: center;
-					padding: 24rpx 0;
-					border-bottom: 1px solid #f5f5f5;
-
-					&:last-child {
-						border-bottom: none;
-					}
-
-					.desc-left {
-						.desc-level {
-							font-size: 28rpx;
-							color: #333;
-							font-weight: bold;
-							margin-bottom: 6rpx;
-						}
-
-						.desc-benefits {
-							font-size: 24rpx;
-							color: #666;
-						}
-					}
-
-					.desc-right {
-						.desc-requirement {
-							font-size: 26rpx;
-							color: #666;
-
-							.highlight {
-								color: #8B5CF6;
-								font-weight: bold;
-							}
-						}
-					}
-				}
-			}
-		}
-	}
-</style>

+ 0 - 260
packageUser/pages/register/index.vue

@@ -1,260 +0,0 @@
-<template>
-	<view class="register-page">
-		<!-- 状态栏占位 -->
-		<view class="status-bar"></view>
-		
-		<!-- 返回按钮 -->
-		<view class="nav-back" @click="goBack">
-			<text class="back-icon">&#xe685;</text>
-		</view>
-		
-		<!-- 页面标题 -->
-		<view class="header">
-			<text class="title">注册账号</text>
-		</view>
-		
-		<!-- 注册表单 -->
-		<view class="form-section">
-			<view class="form-item">
-				<input type="text" v-model="form.phone" placeholder="请输入手机号" />
-			</view>
-			<view class="form-item code-item">
-				<input type="text" v-model="form.code" placeholder="请输入验证码" />
-				<button class="code-btn" :disabled="counting" @tap="getCode">
-					{{counting ? `${counter}s后重新获取` : '获取验证码'}}
-				</button>
-			</view>
-			<view class="form-item">
-				<input type="password" v-model="form.password" placeholder="请设置密码" />
-			</view>
-			
-			<button class="submit-btn" @tap="handleSubmit">注册</button>
-			
-			<view class="agreement">
-				<checkbox :checked="isAgree" @tap="toggleAgreement"></checkbox>
-				<text class="agreement-text">
-					注册即代表您已同意
-					<text class="link" @tap="goToPrivacy">《隐私政策》</text>
-					和
-					<text class="link" @tap="goToService">《服务协议》</text>
-				</text>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-export default {
-	data() {
-		return {
-			form: {
-				phone: '',
-				code: '',
-				password: ''
-			},
-			isAgree: false,
-			counting: false,
-			counter: 60
-		}
-	},
-	methods: {
-		// 返回上一页
-		goBack() {
-			uni.navigateBack();
-		},
-		
-		// 获取验证码
-		getCode() {
-			if (!this.form.phone) {
-				uni.showToast({
-					title: '请输入手机号',
-					icon: 'none'
-				});
-				return;
-			}
-			
-			// 开始倒计时
-			this.counting = true;
-			this.counter = 60;
-			const timer = setInterval(() => {
-				this.counter--;
-				if (this.counter <= 0) {
-					clearInterval(timer);
-					this.counting = false;
-				}
-			}, 1000);
-			
-			// TODO: 调用发送验证码接口
-			uni.showToast({
-				title: '验证码已发送',
-				icon: 'success'
-			});
-		},
-		
-		// 切换协议同意状态
-		toggleAgreement() {
-			this.isAgree = !this.isAgree;
-		},
-		
-		// 提交注册
-		handleSubmit() {
-			if (!this.isAgree) {
-				uni.showToast({
-					title: '请先同意用户协议和隐私政策',
-					icon: 'none'
-				});
-				return;
-			}
-			
-			if (!this.form.phone || !this.form.code || !this.form.password) {
-				uni.showToast({
-					title: '请填写完整信息',
-					icon: 'none'
-				});
-				return;
-			}
-			
-			// TODO: 调用注册接口
-			uni.showLoading({
-				title: '注册中...'
-			});
-			
-			setTimeout(() => {
-				uni.hideLoading();
-				uni.showToast({
-					title: '注册成功',
-					icon: 'success'
-				});
-				
-				// 注册成功后跳转到登录页
-				setTimeout(() => {
-					uni.navigateTo({
-						url: '/pages/user/login'
-					});
-				}, 1500);
-			}, 1000);
-		},
-		
-		// 跳转到隐私政策
-		goToPrivacy() {
-			uni.navigateTo({
-				url: '/packageUser/pages/article/detail?type=privacy'
-			});
-		},
-		
-		// 跳转到服务协议
-		goToService() {
-			uni.navigateTo({
-				url: '/packageUser/pages/article/detail?type=service'
-			});
-		}
-	}
-}
-</script>
-
-<style lang="scss" scoped>
-.register-page {
-	min-height: 100vh;
-	background: #fff;
-	padding-bottom: env(safe-area-inset-bottom);
-}
-
-.status-bar {
-	height: var(--status-bar-height);
-	width: 100%;
-}
-
-.nav-back {
-	position: fixed;
-	left: 30rpx;
-	top: calc(var(--status-bar-height) + 20rpx);
-	z-index: 100;
-	
-	.back-icon {
-		font-family: "iconfont";
-		font-size: 40rpx;
-		color: #333;
-	}
-}
-
-.header {
-	padding: 60rpx 40rpx;
-	
-	.title {
-		font-size: 48rpx;
-		font-weight: bold;
-		color: #333;
-	}
-}
-
-.form-section {
-	padding: 0 40rpx;
-	
-	.form-item {
-		border-bottom: 1px solid #eee;
-		padding: 20rpx 0;
-		margin-bottom: 20rpx;
-		
-		input {
-			font-size: 32rpx;
-			color: #333;
-		}
-	}
-	
-	.code-item {
-		display: flex;
-		align-items: center;
-		
-		input {
-			flex: 1;
-		}
-		
-		.code-btn {
-			width: 200rpx;
-			height: 60rpx;
-			line-height: 60rpx;
-			font-size: 24rpx;
-			color: #fff;
-			background: #D93025;
-			border-radius: 30rpx;
-			margin-left: 20rpx;
-			
-			&[disabled] {
-				background: #ccc;
-			}
-		}
-	}
-	
-	.submit-btn {
-		width: 100%;
-		height: 88rpx;
-		line-height: 88rpx;
-		background: #D93025;
-		color: #fff;
-		font-size: 32rpx;
-		border-radius: 44rpx;
-		margin-top: 60rpx;
-	}
-	
-	.agreement {
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		margin-top: 40rpx;
-		
-		checkbox {
-			transform: scale(0.7);
-		}
-		
-		.agreement-text {
-			font-size: 24rpx;
-			color: #666;
-			margin-left: 8rpx;
-			
-			.link {
-				color: #D93025;
-			}
-		}
-	}
-}
-</style> 

+ 0 - 1044
packageUser/pages/share/index.vue

@@ -1,1044 +0,0 @@
-<template>
-	<view class="page">
-		<!-- 顶部背景装饰 -->
-		<view class="bg-decoration">
-			<view class="bg-circle bg-circle-1"></view>
-			<view class="bg-circle bg-circle-2"></view>
-			<view class="bg-circle bg-circle-3"></view>
-		</view>
-
-		<!-- 顶部标题 -->
-		<view class="header">
-			<view class="header-icon">
-				<image class="icon-gift" src="/static/images/gift.png" mode="aspectFit"></image>
-			</view>
-			<text class="title">邀请好友</text>
-			<text class="subtitle">邀请好友加入,共享收益好礼</text>
-			<view class="title-decoration"></view>
-		</view>
-
-		<!-- 邀请方式切换 -->
-		<view class="tabs-container">
-			<view class="tabs">
-				<view class="tab" :class="{'active': activeMethod === 'wechat'}" @click="selectMethod('wechat')">
-					<uni-icons class="tab-icon" type="weixin" size="20"></uni-icons>
-					<text class="tab-text">微信分享</text>
-				</view>
-				<view class="tab" :class="{'active': activeMethod === 'account'}" @click="selectMethod('account')">
-					<uni-icons class="tab-icon" type="person" size="20"></uni-icons>
-					<text class="tab-text">用户名邀请</text>
-				</view>
-				<view class="tab-slider" :class="{'slide-right': activeMethod === 'account'}"></view>
-			</view>
-		</view>
-
-		<!-- 账号邀请 -->
-		<view class="content animate-fade-in" v-if="activeMethod === 'account'">
-			<view class="search-card">
-				<view class="search-header">
-					<view class="search-title">
-						<uni-icons type="search" size="18"></uni-icons>
-						<text class="search-title-text">搜索好友</text>
-					</view>
-				</view>
-				<view class="search-box">
-					<view class="search-input-wrapper">
-						<text class="search-prefix-icon">@</text>
-						<input class="search-input" v-model="accountInput" placeholder="请输入好友用户名"
-							@input="onAccountInput" />
-					</view>
-					<button class="search-btn" @click="searchUser" :disabled="!accountInput.trim()">
-						<text class="btn-text">搜索</text>
-					</button>
-				</view>
-			</view>
-
-			<view class="user-result-card animate-slide-up" v-if="searchedUser">
-				<view class="user-result">
-					<view class="avatar-wrapper">
-						<image class="avatar" :src="searchedUser.avatar || '/static/images/avatar.png'"
-							mode="aspectFill"></image>
-						<view class="avatar-border"></view>
-					</view>
-					<view class="info">
-						<text class="name">{{ searchedUser.account }}</text>
-					</view>
-					<button class="invite-btn" @click="sendInviteByAccount">
-						<uni-icons class="invite-icon" type="email" size="14" color="#fff"></uni-icons>
-						<text class="invite-text">邀请</text>
-					</button>
-				</view>
-			</view>
-		</view>
-
-		<!-- 微信分享 -->
-		<view class="content animate-fade-in" v-if="activeMethod === 'wechat'">
-			<view class="share-card">
-				<view class="share-bg">
-					<view class="share-bg-circle"></view>
-				</view>
-				<view class="share-content">
-					<view class="share-icon-wrapper">
-						<view class="share-icon">🚀</view>
-						<view class="share-icon-bg"></view>
-					</view>
-					<text class="share-title">分享给好友</text>
-					<text class="share-desc">通过微信分享邀请链接,让更多朋友加入</text>
-					<button class="share-btn" open-type="share">
-						<uni-icons class="share-btn-icon" type="redo" size="18" color="#fff"></uni-icons>
-						<text class="share-btn-text">立即分享</text>
-					</button>
-				</view>
-			</view>
-		</view>
-
-		<!-- 邀请记录 -->
-		<view class="records-card">
-			<view class="records-header">
-				<view class="records-title-wrapper">
-					<uni-icons class="records-icon" type="list" size="18"></uni-icons>
-					<text class="records-title">邀请记录</text>
-				</view>
-				<view class="records-count-wrapper">
-					<text class="records-count">{{ inviteRecords.length }}</text>
-					<text class="records-unit">人</text>
-				</view>
-			</view>
-
-			<view class="records-list" v-if="inviteRecords.length > 0">
-				<view class="record-item animate-slide-in" v-for="(record, index) in inviteRecords" :key="index"
-					:style="{ 'animation-delay': (index * 0.1) + 's' }">
-					<view class="record-avatar-wrapper">
-						<image class="record-avatar" :src="record.avatar || '/static/images/avatar.png'"
-							mode="aspectFill"></image>
-						<view class="record-avatar-border"></view>
-					</view>
-					<view class="record-info">
-						<text class="record-name">{{ record.account }}</text>
-						<view class="record-meta">
-							<text class="record-time">{{ formatTime(record.createTime) }}</text>
-							<text class="record-type"
-								v-if="record.invitationType">{{ getInvitationTypeText(record.invitationType) }}</text>
-						</view>
-					</view>
-					<view class="record-status-wrapper">
-						<view class="status-dot" :class="getStatusClass(record.status)"></view>
-						<text class="record-status">{{ record.status }}</text>
-					</view>
-				</view>
-			</view>
-
-			<view class="empty1" v-else>
-				<view class="flex-items-plus">
-					<image src="@/static/images/empty.png" class="empty "></image>
-				</view>
-				<view class="empty-text">暂无邀请记录</view>
-				<view class="empty-desc">快去邀请好友加入吧</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	import {
-		findByAccount,
-		sendInvitation,
-		getMyInvitations
-	} from '@/config/api.js'
-	import {
-		shareImg
-	} from '@/common/config.js'
-	export default {
-		data() {
-			return {
-				activeMethod: 'wechat', // 当前选择的邀请方式,默认为微信分享
-				accountInput: '', // 账号输入
-				searchedUser: null, // 搜索到的用户
-				inviteRecords: [], // 邀请记录
-				userInfo: {} // 当前用户信息
-			}
-		},
-
-		onLoad() {
-			this.getUserInfo()
-			this.getInviteRecords()
-		},
-
-		// 微信小程序分享配置
-		onShareAppMessage() {
-			const userInfo = uni.getStorageSync('user') || {}
-			console.log(userInfo, "分享用户信息")
-			return {
-				title: `${userInfo.account || '好友'}邀请您加入`,
-				path: `/pages/index/indexNew?inviter=${userInfo.id ||userInfo.user_id|| ''}`,
-				imageUrl: shareImg // 分享图片,需要添加
-			}
-		},
-
-		methods: {
-			// 获取用户信息
-			getUserInfo() {
-				this.userInfo = uni.getStorageSync('user') || {}
-			},
-
-			// 选择邀请方式
-			selectMethod(method) {
-				this.activeMethod = method
-				if (method === 'account') {
-					this.searchedUser = null
-					this.accountInput = ''
-				}
-			},
-
-			// 账号输入处理
-			onAccountInput(e) {
-				this.accountInput = e.detail.value
-				if (!this.accountInput.trim()) {
-					this.searchedUser = null
-				}
-			},
-
-			// 搜索用户
-			async searchUser() {
-				if (!this.accountInput.trim()) {
-					uni.showToast({
-						title: '请输入用户名',
-						icon: 'none'
-					})
-					return
-				}
-
-				try {
-					uni.showLoading({
-						title: '搜索中...'
-					})
-
-					const res = await findByAccount(this.accountInput.trim())
-
-					if (res.code === 200) {
-						this.searchedUser = res.data
-					} else {
-						this.searchedUser = null
-						uni.showToast({
-							title: res.msg || '用户不存在',
-							icon: 'none'
-						})
-					}
-				} catch (error) {
-					console.error('搜索用户失败:', error)
-					uni.showToast({
-						title: error.msg,
-						icon: 'none'
-					})
-				} finally {
-					uni.hideLoading()
-				}
-			},
-
-			// 通过账号发送邀请
-			async sendInviteByAccount() {
-				if (!this.searchedUser) {
-					return
-				}
-
-				try {
-					uni.showLoading({
-						title: '发送邀请中...'
-					})
-
-					const res = await sendInvitation(this.searchedUser.id)
-
-					if (res.code === 200) {
-						uni.showToast({
-							title: '邀请发送成功',
-							icon: 'success'
-						})
-
-						// 重新获取邀请记录
-						this.getInviteRecords()
-
-						// 清空搜索结果
-						this.searchedUser = null
-						this.accountInput = ''
-					} else {
-						uni.showToast({
-							title: res.msg || '邀请发送失败',
-							icon: 'none'
-						})
-					}
-				} catch (error) {
-					console.error('发送邀请失败:', error)
-					uni.showToast({
-						title: error.msg,
-						icon: 'none'
-					})
-				} finally {
-					uni.hideLoading()
-				}
-			},
-
-			// 获取邀请记录
-			async getInviteRecords() {
-				try {
-					const res = await getMyInvitations()
-
-					if (res.code === 200) {
-						this.inviteRecords = res.data || []
-					}
-				} catch (error) {
-					console.error('获取邀请记录失败:', error)
-				}
-			},
-
-			// 格式化时间
-			formatTime(time) {
-				if (!time) return ''
-				const date = new Date(time)
-				const now = new Date()
-				const diff = now.getTime() - date.getTime()
-				const days = Math.floor(diff / (1000 * 60 * 60 * 24))
-
-				if (days === 0) {
-					return '今天'
-				} else if (days === 1) {
-					return '昨天'
-				} else if (days < 7) {
-					return `${days}天前`
-				} else {
-					return date.toLocaleDateString()
-				}
-			},
-
-			// 获取邀请类型文字
-			getInvitationTypeText(type) {
-				switch (type) {
-					case 1:
-						return '用户名邀请'
-					case 2:
-						return '微信分享'
-					default:
-						return '未知类型'
-				}
-			},
-
-			// 获取状态样式类
-			getStatusClass(status) {
-				switch (status) {
-					case '已接受':
-						return 'status-accepted'
-					case '已拒绝':
-						return 'status-rejected'
-					case '待处理':
-					default:
-						return 'status-pending'
-				}
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	/* 页面主体 */
-	.page {
-		min-height: 100vh;
-		background: linear-gradient(135deg, #e8f2ff 0%, #f0f4ff 100%);
-		position: relative;
-		overflow: hidden;
-	}
-
-	/* 背景装饰 */
-	.bg-decoration {
-		position: absolute;
-		top: 0;
-		left: 0;
-		width: 100%;
-		height: 100%;
-		pointer-events: none;
-		z-index: 0;
-	}
-
-	.bg-circle {
-		position: absolute;
-		border-radius: 50%;
-		background: rgba(255, 255, 255, 0.6);
-		animation: float 6s ease-in-out infinite;
-	}
-
-	.bg-circle-1 {
-		width: 200rpx;
-		height: 200rpx;
-		top: 10%;
-		right: -100rpx;
-		animation-delay: 0s;
-	}
-
-	.bg-circle-2 {
-		width: 150rpx;
-		height: 150rpx;
-		top: 30%;
-		left: -75rpx;
-		animation-delay: 2s;
-	}
-
-	.bg-circle-3 {
-		width: 100rpx;
-		height: 100rpx;
-		top: 60%;
-		right: 20rpx;
-		animation-delay: 4s;
-	}
-
-	@keyframes float {
-
-		0%,
-		100% {
-			transform: translateY(0px);
-		}
-
-		50% {
-			transform: translateY(-20rpx);
-		}
-	}
-
-	/* 头部区域 */
-	.header {
-		text-align: center;
-		padding: 80rpx 24rpx 60rpx;
-		position: relative;
-		z-index: 1;
-	}
-
-	.header-icon {
-		margin-bottom: 20rpx;
-	}
-
-	.icon-gift {
-		width: 80rpx;
-		height: 80rpx;
-		display: block;
-		margin: 0 auto;
-		animation: bounce 2s infinite;
-	}
-
-	@keyframes bounce {
-
-		0%,
-		20%,
-		50%,
-		80%,
-		100% {
-			transform: translateY(0);
-		}
-
-		40% {
-			transform: translateY(-10rpx);
-		}
-
-		60% {
-			transform: translateY(-5rpx);
-		}
-	}
-
-	.title {
-		display: block;
-		font-size: 48rpx;
-		font-weight: 700;
-		color: #4a5568;
-		margin-bottom: 20rpx;
-		text-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.1);
-	}
-
-	.subtitle {
-		font-size: 28rpx;
-		color: #718096;
-		margin-bottom: 30rpx;
-	}
-
-	.title-decoration {
-		width: 100rpx;
-		height: 4rpx;
-		background: linear-gradient(90deg, #a0aec0, transparent);
-		margin: 0 auto;
-		border-radius: 2rpx;
-	}
-
-	/* 标签容器 */
-	.tabs-container {
-		padding: 0 24rpx;
-		margin-bottom: 40rpx;
-		position: relative;
-		z-index: 1;
-	}
-
-	.tabs {
-		display: flex;
-		background: rgba(255, 255, 255, 0.95);
-		border-radius: 50rpx;
-		padding: 8rpx;
-		box-shadow: 0 8rpx 32rpx rgba(0, 0, 0, 0.1);
-		backdrop-filter: blur(10rpx);
-		position: relative;
-	}
-
-	.tab {
-		flex: 1;
-		text-align: center;
-		padding: 20rpx 0;
-		border-radius: 42rpx;
-		transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-		position: relative;
-		z-index: 2;
-		cursor: pointer;
-	}
-
-	.tab-icon {
-		display: block;
-		margin-bottom: 6rpx;
-	}
-
-	.tab-text {
-		font-size: 26rpx;
-		color: #666;
-		font-weight: 500;
-	}
-
-	.tab.active .tab-text {
-		color: #fff;
-		font-weight: 600;
-	}
-
-	.tab.active .tab-icon {
-		color: #fff;
-	}
-
-	.tab-slider {
-		position: absolute;
-		top: 8rpx;
-		left: 8rpx;
-		width: calc(50% - 8rpx);
-		height: calc(100% - 16rpx);
-		background: linear-gradient(135deg, #90cdf4, #a2b5f0);
-		border-radius: 42rpx;
-		transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-		z-index: 1;
-		box-shadow: 0 4rpx 16rpx rgba(144, 205, 244, 0.3);
-	}
-
-	.tab-slider.slide-right {
-		transform: translateX(100%);
-	}
-
-	/* 内容区域 */
-	.content {
-		padding: 0 24rpx;
-		margin-bottom: 40rpx;
-		position: relative;
-		z-index: 1;
-	}
-
-	/* 动画效果 */
-	.animate-fade-in {
-		animation: fadeIn 0.5s ease-out;
-	}
-
-	.animate-slide-up {
-		animation: slideUp 0.5s ease-out;
-	}
-
-	.animate-slide-in {
-		animation: slideIn 0.5s ease-out both;
-	}
-
-	@keyframes fadeIn {
-		from {
-			opacity: 0;
-			transform: translateY(20rpx);
-		}
-
-		to {
-			opacity: 1;
-			transform: translateY(0);
-		}
-	}
-
-	@keyframes slideUp {
-		from {
-			opacity: 0;
-			transform: translateY(40rpx);
-		}
-
-		to {
-			opacity: 1;
-			transform: translateY(0);
-		}
-	}
-
-	@keyframes slideIn {
-		from {
-			opacity: 0;
-			transform: translateX(-30rpx);
-		}
-
-		to {
-			opacity: 1;
-			transform: translateX(0);
-		}
-	}
-
-	/* 搜索卡片 */
-	.search-card {
-		background: rgba(255, 255, 255, 0.95);
-		border-radius: 24rpx;
-		padding: 32rpx;
-		margin-bottom: 24rpx;
-		box-shadow: 0 8rpx 32rpx rgba(0, 0, 0, 0.1);
-		backdrop-filter: blur(10rpx);
-	}
-
-	.search-header {
-		margin-bottom: 24rpx;
-	}
-
-	.search-title {
-		display: flex;
-		align-items: center;
-		gap: 8rpx;
-	}
-
-	.search-title-text {
-		font-size: 32rpx;
-		font-weight: 600;
-		color: #333;
-	}
-
-	.search-box {
-		display: flex;
-		gap: 16rpx;
-		align-items: center;
-	}
-
-	.search-input-wrapper {
-		flex: 1;
-		display: flex;
-		align-items: center;
-		background: #f8f9fa;
-		border-radius: 16rpx;
-		padding: 0 20rpx;
-		height: 80rpx;
-		border: 2rpx solid transparent;
-		transition: all 0.3s ease;
-	}
-
-	.search-input-wrapper:focus-within {
-		border-color: #90cdf4;
-		box-shadow: 0 0 0 4rpx rgba(144, 205, 244, 0.1);
-	}
-
-	.search-prefix-icon {
-		font-size: 32rpx;
-		color: #999;
-		margin-right: 12rpx;
-		font-weight: 600;
-	}
-
-	.search-input {
-		flex: 1;
-		height: 100%;
-		border: none;
-		background: transparent;
-		font-size: 28rpx;
-		color: #333;
-	}
-
-	.search-btn {
-		height: 80rpx;
-		padding: 0 32rpx;
-		background: linear-gradient(135deg, #90cdf4, #a2b5f0);
-		color: #fff;
-		border: none;
-		border-radius: 16rpx;
-		font-size: 28rpx;
-		font-weight: 600;
-		box-shadow: 0 4rpx 16rpx rgba(144, 205, 244, 0.2);
-		transition: all 0.3s ease;
-	}
-
-	.search-btn:active {
-		transform: translateY(2rpx);
-		box-shadow: 0 2rpx 8rpx rgba(144, 205, 244, 0.2);
-	}
-
-	.search-btn[disabled] {
-		background: #ccc;
-		box-shadow: none;
-	}
-
-	/* 用户结果卡片 */
-	.user-result-card {
-		background: rgba(255, 255, 255, 0.95);
-		border-radius: 24rpx;
-		padding: 32rpx;
-		box-shadow: 0 8rpx 32rpx rgba(0, 0, 0, 0.1);
-		backdrop-filter: blur(10rpx);
-	}
-
-	.user-result {
-		display: flex;
-		align-items: center;
-	}
-
-	.avatar-wrapper {
-		position: relative;
-		margin-right: 24rpx;
-	}
-
-	.avatar {
-		width: 80rpx;
-		height: 80rpx;
-		border-radius: 50%;
-	}
-
-	.avatar-border {
-		position: absolute;
-		top: -4rpx;
-		left: -4rpx;
-		width: 88rpx;
-		height: 88rpx;
-		border-radius: 50%;
-		border: 2rpx solid #90cdf4;
-		opacity: 0.4;
-	}
-
-	.info {
-		flex: 1;
-		display: flex;
-		flex-direction: column;
-		gap: 8rpx;
-	}
-
-	.name {
-		font-size: 32rpx;
-		font-weight: 600;
-		color: #333;
-	}
-
-	.account {
-		font-size: 26rpx;
-		color: #999;
-	}
-
-	.invite-btn {
-		display: flex;
-		align-items: center;
-		gap: 8rpx;
-		height: 64rpx;
-		padding: 0 24rpx;
-		background: linear-gradient(135deg, #81c995, #a2d2a4);
-		color: #fff;
-		border: none;
-		border-radius: 32rpx;
-		font-size: 26rpx;
-		font-weight: 600;
-		box-shadow: 0 4rpx 16rpx rgba(129, 201, 149, 0.2);
-		transition: all 0.3s ease;
-	}
-
-	.invite-btn:active {
-		transform: translateY(2rpx);
-	}
-
-	.invite-icon {
-		margin-right: 4rpx;
-	}
-
-	/* 分享卡片 */
-	.share-card {
-		background: rgba(255, 255, 255, 0.95);
-		border-radius: 24rpx;
-		overflow: hidden;
-		position: relative;
-		box-shadow: 0 8rpx 32rpx rgba(0, 0, 0, 0.1);
-		backdrop-filter: blur(10rpx);
-	}
-
-	.share-bg {
-		position: absolute;
-		top: 0;
-		left: 0;
-		width: 100%;
-		height: 100%;
-		overflow: hidden;
-	}
-
-	.share-bg-circle {
-		position: absolute;
-		width: 200rpx;
-		height: 200rpx;
-		background: linear-gradient(135deg, rgba(144, 205, 244, 0.1), rgba(162, 181, 240, 0.1));
-		border-radius: 50%;
-		top: -50rpx;
-		right: -50rpx;
-	}
-
-	.share-content {
-		padding: 60rpx 32rpx;
-		text-align: center;
-		position: relative;
-		z-index: 1;
-	}
-
-	.share-icon-wrapper {
-		position: relative;
-		display: inline-block;
-		margin-bottom: 32rpx;
-	}
-
-	.share-icon {
-		font-size: 80rpx;
-		position: relative;
-		z-index: 2;
-	}
-
-	.share-icon-bg {
-		position: absolute;
-		top: 50%;
-		left: 50%;
-		transform: translate(-50%, -50%);
-		width: 120rpx;
-		height: 120rpx;
-		background: linear-gradient(135deg, rgba(144, 205, 244, 0.15), rgba(162, 181, 240, 0.15));
-		border-radius: 50%;
-		z-index: 1;
-	}
-
-	.share-title {
-		display: block;
-		font-size: 36rpx;
-		font-weight: 600;
-		color: #333;
-		margin-bottom: 16rpx;
-	}
-
-	.share-desc {
-		display: block;
-		font-size: 28rpx;
-		color: #666;
-		margin-bottom: 48rpx;
-		line-height: 1.5;
-	}
-
-	.share-btn {
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		gap: 12rpx;
-		width: 320rpx;
-		height: 80rpx;
-		background: linear-gradient(135deg, #90cdf4, #a2b5f0);
-		color: #fff;
-		border: none;
-		border-radius: 40rpx;
-		font-size: 30rpx;
-		font-weight: 600;
-		margin: 0 auto;
-		box-shadow: 0 6rpx 24rpx rgba(144, 205, 244, 0.25);
-		transition: all 0.3s ease;
-	}
-
-	.share-btn:active {
-		transform: translateY(2rpx);
-	}
-
-	.share-btn-icon {
-		margin-right: 8rpx;
-	}
-
-	/* 邀请记录卡片 */
-	.records-card {
-		background: rgba(255, 255, 255, 0.95);
-		border-radius: 24rpx;
-		padding: 32rpx;
-		margin: 0 24rpx 40rpx;
-		box-shadow: 0 8rpx 32rpx rgba(0, 0, 0, 0.1);
-		backdrop-filter: blur(10rpx);
-		position: relative;
-		z-index: 1;
-	}
-
-	.records-header {
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-		padding-bottom: 24rpx;
-		margin-bottom: 24rpx;
-		border-bottom: 2rpx solid #f0f0f0;
-	}
-
-	.records-title-wrapper {
-		display: flex;
-		align-items: center;
-		gap: 12rpx;
-	}
-
-	.records-icon {
-		margin-right: 8rpx;
-	}
-
-	.records-title {
-		font-size: 32rpx;
-		font-weight: 600;
-		color: #333;
-	}
-
-	.records-count-wrapper {
-		display: flex;
-		align-items: center;
-		gap: 4rpx;
-	}
-
-	.records-count {
-		font-size: 32rpx;
-		font-weight: 700;
-		color: #90cdf4;
-	}
-
-	.records-unit {
-		font-size: 24rpx;
-		color: #999;
-	}
-
-	.records-list {
-		display: flex;
-		flex-direction: column;
-		gap: 20rpx;
-	}
-
-	.record-item {
-		display: flex;
-		align-items: center;
-		padding: 24rpx;
-		background: #f8f9fa;
-		border-radius: 16rpx;
-		transition: all 0.3s ease;
-	}
-
-	.record-item:hover {
-		background: #f0f1f5;
-		transform: translateX(8rpx);
-	}
-
-	.record-avatar-wrapper {
-		position: relative;
-		margin-right: 20rpx;
-	}
-
-	.record-avatar {
-		width: 60rpx;
-		height: 60rpx;
-		border-radius: 50%;
-	}
-
-	.record-avatar-border {
-		position: absolute;
-		top: -2rpx;
-		left: -2rpx;
-		width: 64rpx;
-		height: 64rpx;
-		border-radius: 50%;
-		border: 2rpx solid #90cdf4;
-		opacity: 0.3;
-	}
-
-	.record-info {
-		flex: 1;
-		display: flex;
-		flex-direction: column;
-		gap: 6rpx;
-	}
-
-	.record-name {
-		font-size: 28rpx;
-		color: #333;
-		font-weight: 600;
-	}
-
-	.record-meta {
-		display: flex;
-		flex-direction: column;
-		gap: 4rpx;
-	}
-
-	.record-time {
-		font-size: 24rpx;
-		color: #999;
-	}
-
-	.record-type {
-		font-size: 22rpx;
-		color: #666;
-		background: rgba(144, 205, 244, 0.1);
-		padding: 2rpx 8rpx;
-		border-radius: 8rpx;
-		align-self: flex-start;
-	}
-
-	.record-status-wrapper {
-		display: flex;
-		align-items: center;
-		gap: 8rpx;
-	}
-
-	.status-dot {
-		width: 12rpx;
-		height: 12rpx;
-		border-radius: 50%;
-		transition: all 0.3s ease;
-	}
-
-	.status-dot.status-pending {
-		background: #ffb366;
-	}
-
-	.status-dot.status-accepted {
-		background: #81c995;
-	}
-
-	.status-dot.status-rejected {
-		background: #ff6b6b;
-	}
-
-	.record-status {
-		font-size: 24rpx;
-		color: #81c995;
-		font-weight: 600;
-	}
-
-	/* 空状态 */
-	.empty1 {
-		text-align: center;
-		padding: 80rpx 0;
-	}
-
-	.flex-items-plus {
-		display: flex;
-		justify-content: center;
-		margin-bottom: 24rpx;
-		opacity: 0.5;
-	}
-
-	button::after {
-		border: none;
-	}
-
-	.empty-text {
-		font-size: 28rpx;
-		color: #999;
-		margin-bottom: 12rpx;
-		font-weight: 500;
-	}
-
-	.empty-desc {
-		font-size: 24rpx;
-		color: #ccc;
-	}
-</style>

+ 0 - 1118
packageUser/pages/team/index.vue

@@ -1,1118 +0,0 @@
-<template>
-	<view class="team-container">
-		<!-- 团队数据概览 -->
-		<view class="team-overview">
-			<view class="overview-card">
-				<view class="card-header">
-					<text class="card-title">团队总览</text>
-				</view>
-				<view class="stats-grid">
-					<view class="stat-item primary">
-						<view class="stat-icon">
-							<u-icon name="account" size="36" color="#8B5CF6"></u-icon>
-						</view>
-						<view class="stat-content">
-							<text class="stat-value">{{teamData.level1Count}}</text>
-							<text class="stat-label">直属下级</text>
-						</view>
-					</view>
-					<view class="stat-item secondary">
-						<view class="stat-icon">
-							<u-icon name="account-fill" size="36" color="#6366F1"></u-icon>
-						</view>
-						<view class="stat-content">
-							<text class="stat-value">{{teamData.level2Count}}</text>
-							<text class="stat-label">间接下级</text>
-						</view>
-					</view>
-					<view class="stat-item success">
-						<view class="stat-icon">
-							<u-icon name="shopping-cart" size="36" color="#10B981"></u-icon>
-						</view>
-						<view class="stat-content">
-							<text class="stat-value">{{teamData.totalBuyCount}}</text>
-							<text class="stat-label">总购买数</text>
-						</view>
-					</view>
-					<view class="stat-item warning">
-						<view class="stat-icon">
-							<u-icon name="rmb-circle" size="36" color="#F59E0B"></u-icon>
-						</view>
-						<view class="stat-content">
-							<text class="stat-value">¥{{teamData.totalAmount}}</text>
-							<text class="stat-label">总金额</text>
-						</view>
-					</view>
-				</view>
-			</view>
-		</view>
-
-		<!-- 团队成员列表 -->
-		<view class="team-list">
-			<view class="list-header">
-				<view class="header-left">
-					<text class="header-title">我的团队</text>
-				</view>
-				<view class="header-right">
-					<view class="count-display">
-						<text class="total-count">共{{teamData.totalCount}}人</text>
-						<view class="level-indicators">
-							<view class="level-indicator" v-if="teamData.level1Count > 0">
-								<view class="indicator-dot level-1"></view>
-								<text>{{teamData.level1Count}}人(1级)</text>
-							</view>
-							<view class="level-indicator" v-if="teamData.level2Count > 0">
-								<view class="indicator-dot level-2"></view>
-								<text>{{teamData.level2Count}}人(2级)</text>
-							</view>
-						</view>
-					</view>
-				</view>
-			</view>
-
-			<!-- 树形结构展示 -->
-			<view class="team-tree">
-				<!-- 根节点(我) -->
-				<view class="tree-node root-node" :data-level="0">
-					<view class="node-content" @click="toggleNode('root')">
-						<view class="node-info">
-							<view class="avatar-wrapper">
-								<image class="avatar" :src="'/static/images/avatar.png'" mode="aspectFill"></image>
-								<view class="avatar-tag root-tag">我</view>
-							</view>
-							<view class="info">
-								<text class="name">我的账号</text>
-								<text class="level">{{getLevelText(user.level || 0)}}</text>
-								<!-- 个人购买统计 -->
-								<view class="personal-stats"
-									v-if="personalStats.productCount > 0 || personalStats.totalAmount > 0">
-									<text class="stat">购买{{personalStats.productCount}}件</text>
-									<text class="stat">金额¥{{personalStats.totalAmount}}</text>
-								</view>
-								<view class="team-summary" v-if="teamData.totalCount > 0">
-									<text class="summary-text">团队{{teamData.totalCount}}人</text>
-								</view>
-							</view>
-						</view>
-						<view class="node-actions">
-							<view class="expand-info" v-if="teamData.level1Count > 0">
-								<text class="member-preview">{{teamData.level1Count}}个直属</text>
-							</view>
-							<view class="btn-order1" @click.stop="viewOrders(user.id)">
-								<text>我的订单</text>
-							</view>
-							<view class="expand-icon" :class="{ 'expanded': expandedNodes.root }">
-								<u-icon :name="expandedNodes.root ? 'arrow-up' : 'arrow-down'" size="28"
-									:color="expandedNodes.root ? '#8B5CF6' : '#64748b'"></u-icon>
-							</view>
-						</view>
-					</view>
-
-					<!-- 子节点 -->
-					<view class="children level-1-children" v-if="expandedNodes.root && teamData.members.length > 0">
-						<view class="tree-node level-1-node" v-for="(member, index) in teamData.members"
-							:key="member.id" :data-level="1">
-							<view class="node-content" @click="toggleNode(member.id)">
-								<view class="node-info">
-									<view class="avatar-wrapper">
-										<image class="avatar" :src="member.avatar || '/static/images/avatar.png'"
-											mode="aspectFill"></image>
-										<view class="level-badge level-1">L1</view>
-									</view>
-									<view class="info">
-										<text class="name">{{member.account}}</text>
-										<text class="level">{{getLevelText(member.level)}}</text>
-										<view class="member-stats">
-											<text class="stat">购买{{member.buyCount || 0}}件</text>
-											<text class="stat">金额¥{{formatAmount(member.amount)}}</text>
-										</view>
-										<view class="team-summary" v-if="member.hasChildren">
-											<text class="summary-text">有下级团队</text>
-										</view>
-									</view>
-								</view>
-								<view class="node-actions">
-									<view class="action-buttons">
-										<view class="btn-order" @click.stop="viewOrders(member.id)">
-											<u-icon name="list" size="22" color="#8B5CF6"></u-icon>
-											<text>订单</text>
-										</view>
-										<!-- <view class="member-preview" v-if="member.hasChildren">
-											<view class="preview-indicator">
-												<u-icon name="arrow-right" size="16" color="#6366F1"></u-icon>
-											</view>
-											<text class="preview-label">有下级</text>
-										</view> -->
-									</view>
-									<view class="expand-icon" v-if="member.hasChildren"
-										:class="{ 'expanded': expandedNodes[member.id] }">
-										<u-icon :name="expandedNodes[member.id] ? 'arrow-up' : 'arrow-down'" size="26"
-											:color="expandedNodes[member.id] ? '#8B5CF6' : '#64748b'"></u-icon>
-									</view>
-								</view>
-							</view>
-
-							<!-- 孙节点 -->
-							<view class="children level-2-children"
-								v-if="expandedNodes[member.id] && member.children && member.children.length > 0">
-								<view class="tree-node level-2-node" v-for="(child, childIndex) in member.children"
-									:key="child.id" :data-level="2">
-									<view class="node-content">
-										<view class="node-info">
-											<view class="avatar-wrapper">
-												<image class="avatar" :src="child.avatar || '/static/images/avatar.png'"
-													mode="aspectFill"></image>
-												<view class="level-badge level-2">L2</view>
-											</view>
-											<view class="info">
-												<text class="name">{{child.account}}</text>
-												<text class="level">{{getLevelText(child.level)}}</text>
-												<view class="member-stats">
-													<text class="stat">购买{{child.buyCount || 0}}件</text>
-													<text class="stat">金额¥{{formatAmount(child.amount)}}</text>
-												</view>
-											</view>
-										</view>
-										<view class="node-actions">
-											<view class="action-buttons">
-												<view class="btn-order" @click.stop="viewOrders(child.id)">
-													<u-icon name="list" size="20" color="#8B5CF6"></u-icon>
-													<text>订单</text>
-												</view>
-											</view>
-										</view>
-									</view>
-								</view>
-							</view>
-						</view>
-					</view>
-				</view>
-
-				<view v-if="teamData.members.length === 0" class="empty-state">
-					<view class="empty-content">
-						<view class="flex-items-plus">
-							<image src="@/static/images/empty.png" class="empty"></image>
-						</view>
-						<text class="empty-title">暂无团队成员</text>
-						<text class="empty-desc">您还没有团队成员,快去邀请朋友加入吧!</text>
-						<view class="empty-actions">
-							<view class="action-button primary" @click="inviteFriends">
-								<u-icon name="plus" size="24" color="#fff"></u-icon>
-								<text>邀请好友</text>
-							</view>
-							<view class="action-button secondary" @click="refreshData">
-								<u-icon name="reload" size="24" color="#8B5CF6"></u-icon>
-								<text>刷新数据</text>
-							</view>
-						</view>
-					</view>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	import {
-		getMemberlazyList,
-		memberDetail,
-		teamStatistics,
-		countPaidProducts
-	} from '@/config/api';
-
-	export default {
-		data() {
-			return {
-				expandedNodes: {
-					root: true // 默认展开根节点
-				},
-				user: {},
-				personalStats: {
-					productCount: 0,
-					totalAmount: '0.00'
-				},
-				teamData: {
-					level1Count: 0,
-					level2Count: 0,
-					totalBuyCount: 0,
-					totalAmount: '0.00',
-					totalCount: 0,
-					members: []
-				}
-			}
-		},
-		onLoad() {
-			this.getMember()
-			this.getTeamStatistics()
-			this.getPersonalStats()
-		},
-		methods: {
-			getMember() {
-				memberDetail().then((res) => {
-					this.user = res.data
-					this.getTeamData()
-				})
-			},
-
-			async getPersonalStats() {
-				try {
-					const response = await countPaidProducts()
-					if (response.success && response.data) {
-						const data = response.data
-						this.personalStats.productCount = parseInt(data.productCount) || 0
-						this.personalStats.totalAmount = parseFloat(data.totalAmount || 0).toFixed(2)
-					}
-				} catch (error) {
-					console.error('获取个人购买统计数据失败:', error)
-				}
-			},
-
-			async getTeamStatistics() {
-				try {
-					const response = await teamStatistics()
-					if (response.success && response.data) {
-						const data = response.data
-						this.teamData.totalCount = parseInt(data.totalTeamMembers) || 0
-						this.teamData.level1Count = parseInt(data.directSubordinates) || 0
-						this.teamData.level2Count = parseInt(data.secondLevelSubordinates) || 0
-						this.teamData.totalBuyCount = parseInt(data.totalPurchaseCount) || 0
-
-						const amount = data.totalOrderAmount
-						if (amount !== null && amount !== undefined && amount !== '') {
-							this.teamData.totalAmount = parseFloat(amount).toFixed(2)
-						} else {
-							this.teamData.totalAmount = '0.00'
-						}
-					}
-				} catch (error) {
-					console.error('获取团队统计数据失败:', error)
-				}
-			},
-
-			async getTeamData() {
-				try {
-					const response = await getMemberlazyList({
-						id: this.user.id
-					})
-
-					if (response.success && response.data) {
-						// 后端已经返回树形结构,直接使用
-						this.teamData.members = response.data;
-
-						// 更新统计数据
-						this.updateTeamStats();
-
-						// 默认展开所有有子节点的成员
-						this.expandAllNodes();
-					}
-				} catch (error) {
-					console.error('获取团队数据失败:', error)
-					uni.showToast({
-						title: '获取团队数据失败',
-						icon: 'none'
-					})
-				}
-			},
-
-			buildTreeStructure(flatData) {
-				if (!flatData || flatData.length === 0) return [];
-
-				console.log('开始构建树形结构,原始数据:', flatData);
-				console.log('当前用户ID:', this.user.id);
-
-				// 数据预处理
-				const processedData = flatData.map(member => ({
-					...member,
-					buyCount: member.buyCount || 0,
-					amount: member.amount || 0,
-					hasChildren: member.hasChildren || false,
-					children: []
-				}));
-
-				console.log('预处理后的数据:', processedData);
-
-				// 创建ID映射
-				const memberMap = {};
-				processedData.forEach(member => {
-					memberMap[member.id] = member;
-				});
-
-				console.log('成员ID映射:', memberMap);
-
-				// 构建树形结构
-				const treeData = [];
-				const level1Members = [];
-				const level2Members = [];
-
-				processedData.forEach(member => {
-					console.log(
-						`处理成员: ${member.account}, ID: ${member.id}, parentId: ${member.parentId}, hasChildren: ${member.hasChildren}`
-					);
-
-					// 判断是否为一级成员(直接下级)
-					if (!member.parentId || member.parentId === this.user.id) {
-						level1Members.push(member);
-						treeData.push(member);
-						console.log(`添加一级成员: ${member.account}`);
-					} else {
-						// 二级成员,添加到父级的children中
-						level2Members.push(member);
-						const parent = memberMap[member.parentId];
-						if (parent) {
-							if (!parent.children) {
-								parent.children = [];
-							}
-							parent.children.push(member);
-							parent.hasChildren = true;
-							console.log(`将二级成员 ${member.account} 添加到父级 ${parent.account} 的children中`);
-						} else {
-							console.log(`警告: 找不到父级成员 ${member.parentId},无法添加二级成员 ${member.account}`);
-						}
-					}
-				});
-
-				console.log('一级成员数量:', level1Members.length);
-				console.log('二级成员数量:', level2Members.length);
-				console.log('构建的树形结构:', treeData);
-
-				return treeData;
-			},
-
-			updateTeamStats() {
-				let level1Count = 0;
-				let level2Count = 0;
-				let totalBuyCount = 0;
-				let totalAmount = 0;
-
-				this.teamData.members.forEach(member => {
-					level1Count++;
-					totalBuyCount += parseInt(member.buyCount) || 0;
-					totalAmount += parseFloat(member.amount) || 0;
-
-					if (member.children && member.children.length > 0) {
-						level2Count += member.children.length;
-						member.children.forEach(child => {
-							totalBuyCount += parseInt(child.buyCount) || 0;
-							totalAmount += parseFloat(child.amount) || 0;
-						});
-					}
-				});
-
-				// 更新统计数据
-				this.teamData.level1Count = level1Count;
-				this.teamData.level2Count = level2Count;
-				this.teamData.totalCount = level1Count + level2Count;
-				this.teamData.totalBuyCount = totalBuyCount;
-				this.teamData.totalAmount = totalAmount.toFixed(2);
-			},
-
-			toggleNode(nodeId) {
-				const isExpanding = !this.expandedNodes[nodeId];
-
-				this.$set(this.expandedNodes, nodeId, isExpanding);
-
-				if (nodeId === 'root') return;
-
-				const member = this.findMemberById(nodeId);
-				if (!member) return;
-
-				if (isExpanding && member.children && member.children.length > 0) {
-					uni.showToast({
-						title: `展开${member.children.length}个下级`,
-						icon: 'success',
-						duration: 1000
-					});
-				}
-			},
-
-			findMemberById(id) {
-				const searchInMembers = (members) => {
-					for (const member of members) {
-						if (member.id === id) return member;
-						if (member.children && member.children.length > 0) {
-							const found = searchInMembers(member.children);
-							if (found) return found;
-						}
-					}
-					return null;
-				};
-				return searchInMembers(this.teamData.members);
-			},
-
-			getLevelText(level) {
-				const levelMap = {
-					0: '普通会员',
-					1: 'S级会员',
-					2: 'SS级会员',
-					3: 'SSS级会员'
-				}
-				return levelMap[level] || '普通会员'
-			},
-
-			formatAmount(amount) {
-				const numAmount = parseFloat(amount) || 0
-				return numAmount.toFixed(2)
-			},
-
-			viewOrders(memberId) {
-				uni.navigateTo({
-					url: `/packageOrder/pages/list/record?memberId=${memberId}`
-				})
-			},
-
-			inviteFriends() {
-				this.$route('/packageUser/pages/share/index')
-			},
-
-			// 默认展开所有有子节点的成员
-			expandAllNodes() {
-				this.teamData.members.forEach(member => {
-					if (member.hasChildren && member.children && member.children.length > 0) {
-						this.$set(this.expandedNodes, member.id, true);
-					}
-				});
-			},
-
-			refreshData() {
-				uni.showLoading({
-					title: '刷新中...'
-				});
-
-				this.teamData = {
-					level1Count: 0,
-					level2Count: 0,
-					totalBuyCount: 0,
-					totalAmount: '0.00',
-					totalCount: 0,
-					members: []
-				};
-
-				Promise.all([
-					this.getTeamStatistics(),
-					this.getTeamData(),
-					this.getPersonalStats()
-				]).finally(() => {
-					uni.hideLoading();
-					uni.showToast({
-						title: '刷新完成',
-						icon: 'success'
-					});
-				});
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	.team-container {
-		min-height: 100vh;
-		background: #f8fafc;
-		padding: 20rpx;
-
-		.team-overview {
-			margin-bottom: 20rpx;
-
-			.overview-card {
-				background: #ffffff;
-				border-radius: 16rpx;
-				padding: 30rpx;
-				box-shadow: 0 2rpx 16rpx rgba(0, 0, 0, 0.06);
-				border: 1rpx solid #e5e7eb;
-
-				.card-header {
-					display: flex;
-					justify-content: space-between;
-					align-items: center;
-					margin-bottom: 30rpx;
-					padding-bottom: 20rpx;
-					border-bottom: 1rpx solid #f3f4f6;
-
-					.card-title {
-						font-size: 36rpx;
-						font-weight: 600;
-						color: #111827;
-					}
-				}
-
-				.stats-grid {
-					display: grid;
-					grid-template-columns: repeat(2, 1fr);
-					gap: 20rpx;
-
-					.stat-item {
-						display: flex;
-						align-items: center;
-						padding: 24rpx;
-						border-radius: 16rpx;
-						transition: all 0.3s ease;
-
-						&.primary {
-							background: #f8fafc;
-							border: 1rpx solid #e2e8f0;
-						}
-
-						&.secondary {
-							background: #f1f5f9;
-							border: 1rpx solid #d1d5db;
-						}
-
-						&.success {
-							background: #f0fdf4;
-							border: 1rpx solid #bbf7d0;
-						}
-
-						&.warning {
-							background: #fefce8;
-							border: 1rpx solid #fde047;
-						}
-
-						.stat-icon {
-							margin-right: 16rpx;
-							padding: 12rpx;
-							background: #ffffff;
-							border-radius: 12rpx;
-							box-shadow: 0 1rpx 3rpx rgba(0, 0, 0, 0.1);
-						}
-
-						.stat-content {
-							flex: 1;
-
-							.stat-value {
-								font-size: 32rpx;
-								font-weight: 600;
-								color: #111827;
-								margin-bottom: 4rpx;
-								display: block;
-							}
-
-							.stat-label {
-								font-size: 24rpx;
-								color: #6b7280;
-							}
-						}
-					}
-				}
-			}
-		}
-
-		.team-list {
-			background: #ffffff;
-			border-radius: 16rpx;
-			padding: 30rpx;
-			box-shadow: 0 2rpx 16rpx rgba(0, 0, 0, 0.06);
-			border: 1rpx solid #e5e7eb;
-
-			.list-header {
-				display: flex;
-				justify-content: space-between;
-				align-items: flex-start;
-				padding: 0 0 30rpx;
-				border-bottom: 1rpx solid #f3f4f6;
-				margin-bottom: 30rpx;
-
-				.header-left {
-					.header-title {
-						font-size: 36rpx;
-						font-weight: 600;
-						color: #111827;
-					}
-				}
-
-				.header-right {
-					text-align: right;
-
-					.count-display {
-						.total-count {
-							font-size: 28rpx;
-							color: #111827;
-							font-weight: 600;
-							margin-bottom: 8rpx;
-							display: block;
-						}
-
-						.level-indicators {
-							display: flex;
-							flex-direction: column;
-							gap: 6rpx;
-
-							.level-indicator {
-								display: flex;
-								align-items: center;
-								gap: 8rpx;
-								font-size: 22rpx;
-								color: #6b7280;
-
-								.indicator-dot {
-									width: 8rpx;
-									height: 8rpx;
-									border-radius: 50%;
-
-									&.level-1 {
-										background: #3b82f6;
-									}
-
-									&.level-2 {
-										background: #6b7280;
-									}
-								}
-							}
-						}
-					}
-				}
-			}
-
-			.team-tree {
-				padding: 20rpx;
-
-				.tree-node {
-					position: relative;
-					margin-bottom: 16rpx;
-
-					&[data-level="0"] {
-						z-index: 10;
-					}
-
-					&[data-level="1"] {
-						margin-left: 40rpx;
-						z-index: 9;
-					}
-
-					&[data-level="2"] {
-						margin-left: 80rpx;
-						z-index: 8;
-					}
-
-					&.root-node {
-						margin-left: 0;
-
-						.node-content {
-							background: #f8fafc;
-							border-radius: 16rpx;
-							padding: 30rpx;
-							box-shadow: 0 2rpx 12rpx rgba(59, 130, 246, 0.08);
-							transition: all 0.3s ease;
-							border: 1rpx solid #e2e8f0;
-							position: relative;
-							overflow: hidden;
-
-							&:active {
-								transform: scale(0.98);
-							}
-						}
-					}
-
-					.personal-stats {
-						display: flex;
-						flex-wrap: nowrap;
-						gap: 8rpx;
-						margin-top: 8rpx;
-						margin-bottom: 8rpx;
-
-						.stat {
-							font-size: 20rpx;
-							color: #6b7280;
-							background: #f9fafb;
-							padding: 4rpx 10rpx;
-							border-radius: 8rpx;
-							display: flex;
-							align-items: center;
-							gap: 4rpx;
-							white-space: nowrap;
-							border: 1rpx solid #e5e7eb;
-
-							&::before {
-								content: '';
-								width: 4rpx;
-								height: 4rpx;
-								background: #3b82f6;
-								border-radius: 50%;
-								flex-shrink: 0;
-							}
-						}
-					}
-
-					.node-content {
-						display: flex;
-						justify-content: space-between;
-						align-items: flex-start;
-						background: #fff;
-						border-radius: 16rpx;
-						padding: 20rpx;
-						border: 1rpx solid #e5e7eb;
-						transition: all 0.3s ease;
-						position: relative;
-						overflow: hidden;
-						box-shadow: 0 1rpx 3rpx rgba(0, 0, 0, 0.1);
-
-						&:active {
-							transform: scale(0.98);
-						}
-
-						.node-info {
-							display: flex;
-							align-items: flex-start;
-							flex: 1;
-							min-width: 0;
-
-							.avatar-wrapper {
-								position: relative;
-								margin-right: 16rpx;
-								flex-shrink: 0;
-
-								.avatar {
-									width: 64rpx;
-									height: 64rpx;
-									border-radius: 50%;
-									background-color: #f9fafb;
-									border: 1rpx solid #e5e7eb;
-								}
-
-								.avatar-tag,
-								.root-tag {
-									position: absolute;
-									bottom: -4rpx;
-									right: -4rpx;
-									background: #3b82f6;
-									color: #fff;
-									font-size: 18rpx;
-									padding: 2rpx 8rpx;
-									border-radius: 8rpx;
-									border: 1rpx solid #fff;
-									font-weight: 600;
-								}
-
-								.level-badge {
-									position: absolute;
-									top: -8rpx;
-									left: -8rpx;
-									font-size: 16rpx;
-									padding: 2rpx 6rpx;
-									border-radius: 6rpx;
-									color: #fff;
-									font-weight: bold;
-									border: 1rpx solid #fff;
-
-									&.level-1 {
-										background: #3b82f6;
-									}
-
-									&.level-2 {
-										background: #6b7280;
-									}
-								}
-							}
-
-							.info {
-								flex: 1;
-								min-width: 0;
-
-								.name {
-									font-size: 28rpx;
-									color: #111827;
-									font-weight: 600;
-									margin-bottom: 6rpx;
-									width: 100%;
-									display: block;
-									white-space: nowrap;
-									overflow: hidden;
-									text-overflow: ellipsis;
-									max-width: 300rpx;
-								}
-
-								.level {
-									font-size: 22rpx;
-									color: #6b7280;
-									margin-bottom: 8rpx;
-									display: flex;
-									align-items: center;
-									gap: 6rpx;
-
-									&::before {
-										content: '';
-										width: 6rpx;
-										height: 6rpx;
-										background: #3b82f6;
-										border-radius: 50%;
-										flex-shrink: 0;
-									}
-								}
-
-								.member-stats {
-									display: flex;
-									white-space: nowrap;
-									flex-wrap: nowrap;
-									gap: 8rpx;
-									margin-bottom: 8rpx;
-
-									.stat {
-										white-space: nowrap;
-										flex-wrap: nowrap;
-										font-size: 20rpx;
-										color: #6b7280;
-										background: #f9fafb;
-										padding: 4rpx 10rpx;
-										border-radius: 8rpx;
-										display: flex;
-										align-items: center;
-										gap: 4rpx;
-										white-space: nowrap;
-										border: 1rpx solid #e5e7eb;
-
-										&::before {
-											content: '';
-											width: 4rpx;
-											height: 4rpx;
-											background: #3b82f6;
-											border-radius: 50%;
-											flex-shrink: 0;
-										}
-									}
-								}
-
-								.team-summary {
-									display: flex;
-									gap: 12rpx;
-
-									.summary-text {
-										font-size: 20rpx;
-										color: #6b7280;
-										background: rgba(107, 114, 128, 0.1);
-										padding: 4rpx 10rpx;
-										border-radius: 8rpx;
-										border: 1rpx solid rgba(107, 114, 128, 0.2);
-										font-weight: 500;
-									}
-								}
-							}
-						}
-
-						.node-actions {
-							display: flex;
-							align-items: center;
-							gap: 12rpx;
-							flex-shrink: 0;
-
-							.action-buttons {
-								display: flex;
-								align-items: center;
-								gap: 10rpx;
-
-								.btn-order {
-									display: flex;
-									align-items: center;
-									gap: 4rpx;
-									background: rgba(59, 130, 246, 0.1);
-									padding: 8rpx 12rpx;
-									border-radius: 8rpx;
-									transition: all 0.2s ease;
-									border: 1rpx solid rgba(59, 130, 246, 0.2);
-
-									&:active {
-										transform: scale(0.95);
-										background: rgba(59, 130, 246, 0.15);
-									}
-
-									text {
-										font-size: 20rpx;
-										color: #3b82f6;
-										font-weight: 500;
-									}
-								}
-
-								.member-preview {
-									display: flex;
-									flex-direction: column;
-									align-items: center;
-									text-align: center;
-
-									.preview-label {
-										font-size: 18rpx;
-										color: #6b7280;
-									}
-								}
-							}
-
-							.expand-icon {
-								background: rgba(107, 114, 128, 0.1);
-								padding: 8rpx;
-								border-radius: 8rpx;
-								transition: all 0.3s ease;
-
-								&.expanded {
-									background: rgba(59, 130, 246, 0.1);
-									transform: rotate(180deg);
-								}
-							}
-						}
-					}
-
-					.children {
-						margin-top: 12rpx;
-						position: relative;
-
-						&.level-1-children {
-							padding-left: 20rpx;
-							border-left: 2rpx solid rgba(59, 130, 246, 0.2);
-						}
-
-						&.level-2-children {
-							border-left: 2rpx solid rgba(107, 114, 128, 0.2);
-						}
-
-						&::before {
-							content: '';
-							position: absolute;
-							left: -5rpx;
-							top: 0;
-							width: 8rpx;
-							height: 8rpx;
-							border-radius: 50%;
-							background: rgba(59, 130, 246, 0.4);
-						}
-
-						.level-2-children::before {
-							background: rgba(107, 114, 128, 0.4);
-						}
-					}
-
-					&.level-1-node .node-content {
-						background: #f8fafc;
-						border: 1rpx solid rgba(59, 130, 246, 0.15);
-
-						.avatar-wrapper .avatar {
-							width: 60rpx;
-							height: 60rpx;
-						}
-
-						.info .name {
-							font-size: 26rpx;
-						}
-					}
-
-					&.level-2-node .node-content {
-						background: #f1f5f9;
-						border: 1rpx solid rgba(107, 114, 128, 0.15);
-
-						.avatar-wrapper .avatar {
-							width: 56rpx;
-							height: 56rpx;
-						}
-
-						.info .name {
-							font-size: 24rpx;
-						}
-
-						.member-stats .stat {
-							font-size: 18rpx;
-						}
-					}
-				}
-			}
-		}
-
-		.empty-state {
-			padding: 80rpx 40rpx;
-
-			.empty-content {
-				text-align: center;
-
-				.empty-title {
-					font-size: 32rpx;
-					color: #111827;
-					font-weight: 600;
-					margin-bottom: 16rpx;
-					display: block;
-				}
-
-				.empty-desc {
-					font-size: 26rpx;
-					color: #6b7280;
-					margin-bottom: 40rpx;
-					display: block;
-					line-height: 1.5;
-				}
-
-				.empty-actions {
-					display: flex;
-					justify-content: center;
-					gap: 20rpx;
-
-					.action-button {
-						display: flex;
-						align-items: center;
-						gap: 8rpx;
-						padding: 16rpx 24rpx;
-						border-radius: 12rpx;
-						transition: all 0.3s ease;
-
-						&.primary {
-							background: #3b82f6;
-							color: #fff;
-							box-shadow: 0 2rpx 8rpx rgba(59, 130, 246, 0.2);
-
-							&:active {
-								transform: scale(0.95);
-								box-shadow: 0 1rpx 4rpx rgba(59, 130, 246, 0.2);
-							}
-
-							text {
-								color: #fff;
-								font-size: 24rpx;
-								font-weight: 600;
-							}
-						}
-
-						&.secondary {
-							background: rgba(59, 130, 246, 0.1);
-							border: 1rpx solid rgba(59, 130, 246, 0.2);
-
-							&:active {
-								transform: scale(0.95);
-								background: rgba(59, 130, 246, 0.15);
-							}
-
-							text {
-								color: #3b82f6;
-								font-size: 24rpx;
-								font-weight: 500;
-							}
-						}
-					}
-				}
-			}
-		}
-
-		.flex-items-plus {
-			display: flex;
-			justify-content: center;
-			align-items: center;
-		}
-
-		.empty {
-			width: 200rpx;
-			height: 200rpx;
-		}
-	}
-
-	.btn-order1 {
-		display: flex;
-		align-items: center;
-		gap: 4rpx;
-		background: rgba(59, 130, 246, 0.1);
-		padding: 8rpx 12rpx;
-		border-radius: 8rpx;
-		transition: all 0.2s ease;
-		border: 1rpx solid rgba(59, 130, 246, 0.2);
-
-		&:active {
-			transform: scale(0.95);
-			background: rgba(59, 130, 246, 0.15);
-		}
-
-		text {
-			font-size: 20rpx;
-			color: #3b82f6;
-			font-weight: 500;
-		}
-	}
-</style>

+ 0 - 98
packageUser/pages/user-info/account-change.vue

@@ -1,98 +0,0 @@
-<template>
-	<view class="page-container">
-		<view class="font40 font-bold text-align   pad-t-40 mar-b-50">
-			昵称
-		</view>
-		<view class="inputBg ">
-			<input v-model="user.nickName" placeholder="请输入昵称" />
-			<view class="clear-button" @click="clearInput" v-if=" user.nickName">
-				×
-			</view>
-		</view>
-		<button class="saveBtn" style="background-color: #007aff;" type="primary" @click="save">保存</button>
-	</view>
-</template>
-
-<script>
-	import {
-		memberUpdate,
-		memberDetail
-	} from '@/config/api.js';
-	export default {
-		data() {
-			return {
-				user: {
-					nickName: ""
-				}
-			}
-		},
-		methods: {
-			clearInput() {
-				this.user.nickName = ""
-			},
-			save() {
-				console.log(this.user.nickName)
-				console.log(this.user.account)
-				memberUpdate(this.user).then((res) => {
-					if (res.code == 200) {
-						uni.$u.toast("操作成功")
-						uni.navigateBack({
-							delta: 1 // delta 表示返回的页面数,1 表示返回上一页
-						});
-						uni.setStorageSync('user', null)
-						console.log(12)
-					}
-				})
-			},
-			async detail() {
-				const data = await memberDetail()
-				if (data.code == 200) {
-					this.user = data.data
-				}
-			},
-		},
-		onLoad(op) {
-			console.log(op, "op")
-			this.user = op
-			this.detail()
-		}
-	}
-</script>
-
-<style>
-	.page-container {
-
-		background-color: #FFFFFF;
-		/* 设置页面背景色为白色 */
-		min-height: 100vh;
-		/* 确保背景色覆盖整个可视区域 */
-	}
-
-	.inputBg {
-		background-color: #f3f3f3;
-		width: 700rpx;
-		margin-left: 25rpx;
-		border-radius: 40rpx;
-		font-size: 38rpx;
-		padding: 20rpx;
-		position: relative;
-	}
-
-	.saveBtn {
-		margin-top: 50rpx;
-		width: 700rpx;
-		margin-left: 25rpx;
-		border-radius: 10rpx;
-	}
-
-	.clear-button {
-		position: absolute;
-		right: 10px;
-		top: 50%;
-		transform: translateY(-50%);
-		font-size: 20px;
-		margin-right: 10rpx;
-		color: #999;
-		cursor: pointer;
-	}
-</style>

+ 0 - 186
packageUser/pages/user-info/birthday-change.vue

@@ -1,186 +0,0 @@
-<template>
-	<view class="Date">
-		<view class="content">
-			<!-- 顶部标题 -->
-			<view class="top-title">出生日期</view>
-			<picker-view :value="value" :indicator-style="indicatorStyle" @change="bindChange" class="picker-view">
-				<picker-view-column>
-					<view class="item" v-for="(item,index) in years" :key="index">{{item}}年</view>
-				</picker-view-column>
-				<picker-view-column>
-					<view class="item" v-for="(item,index) in months" :key="index">{{item}}月</view>
-				</picker-view-column>
-				<picker-view-column>
-					<view class="item" v-for="(item,index) in days" :key="index">{{item}}日</view>
-				</picker-view-column>
-			</picker-view>
-			<!-- 底部保存按钮 -->
-		</view>
-		<button class="save-button" @click="ack">保存</button>
-	</view>
-</template>
-
-<script>
-	import {
-		memberUpdate,
-		memberDetail
-	} from '@/config/api.js';
-	export default {
-		props: {
-			selectedDate: {
-				type: String,
-				default: "",
-			},
-		},
-		data() {
-			return {
-				user: {},
-				years: [],
-				year: '',
-				months: [],
-				month: '',
-				days: [],
-				day: '',
-				value: [],
-				indicatorStyle: 'height: 50px;'
-			}
-		},
-		mounted() {
-			const date = new Date();
-			const year = date.getFullYear();
-			const month = date.getMonth() + 1;
-			const day = date.getDate();
-			const selectedYear = new Date(this.selectedDate).getFullYear() || year;
-			const selectedMonth = new Date(this.selectedDate).getMonth() + 1 || month;
-			const selectedDay = new Date(this.selectedDate).getDate() || day;
-			setTimeout(() => {
-				this.value = [this.years.indexOf(selectedYear), selectedMonth - 1, selectedDay - 1];
-				this.year = selectedYear;
-				this.month = selectedMonth < 10 ? `0${selectedMonth}` : selectedMonth;
-				this.day = selectedDay < 10 ? `0${selectedDay}` : selectedDay;
-			}, 0);
-		},
-		created() {
-			this.init();
-		},
-		onLoad(op) {
-			this.detail();
-		},
-		methods: {
-			async detail() {
-				const data = await memberDetail();
-				if (data.code == 200) {
-					this.user = data.data;
-				}
-			},
-			init() {
-				const date = new Date();
-				const year = date.getFullYear();
-				const month = date.getMonth() + 1;
-				const day = date.getDate();
-
-				// 生成年份范围(例如从 1900 年到当前年份)
-				const years = [];
-				const startYear = 1900; // 你可以根据需要调整起始年份
-				for (let i = startYear; i <= year; i++) {
-					years.push(i);
-				}
-
-				// 生成月份范围(1 到 12)
-				const months = [];
-				for (let i = 1; i <= 12; i++) {
-					months.push(i);
-				}
-
-				// 更新数据
-				this.years = years;
-				this.months = months;
-				this.getDays(year, month);
-			},
-			getDays(year, month) {
-				const day = new Date(year, month, 0).getDate();
-				const days = [];
-				for (let i = 1; i <= day; i++) {
-					days.push(i);
-				}
-				this.days = days;
-			},
-			bindChange: function(e) {
-				const val = e.detail.value;
-				this.year = this.years[val[0]];
-				this.month = this.months[val[1]];
-				this.day = this.days[val[2]];
-
-				// 切换年份或月份时,更新天数
-				this.getDays(this.year, this.month);
-			},
-			esc() {
-				this.$emit('popType', false);
-			},
-			ack() {
-				const date = new Date(this.year, this.month - 1, this.day);
-				const formattedDate = `${this.year}-${this.month}-${this.day}`; // 手动格式化日期
-				console.log(formattedDate);
-				this.user.birthday = formattedDate;
-				memberUpdate(this.user).then((res) => {
-					if (res.code == 200) {
-						uni.$u.toast("操作成功");
-						uni.navigateBack({
-							delta: 1 // delta 表示返回的页面数,1 表示返回上一页
-						});
-						uni.setStorageSync('user', null)
-					}
-				});
-			},
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	.Date {
-		background-color: white;
-		padding: 30px;
-		min-height: 100vh;
-
-		.content {
-			width: 100%;
-			/* 内容区域宽度 */
-			background: #FFFFFF;
-			padding: 20px;
-			display: flex;
-			flex-direction: column;
-
-			.top-title {
-				text-align: center;
-				font-size: 40rpx;
-				font-weight: bold;
-				margin-bottom: 20px;
-			}
-
-			.picker-view {
-				width: 100%;
-				height: 200px;
-				/* 选择器高度 */
-				margin-bottom: 20px;
-			}
-
-			.item {
-				line-height: 30px;
-				font-size: 32rpx;
-				text-align: center;
-			}
-
-
-		}
-	}
-
-	.save-button {
-		background-color: #007aff;
-		color: white;
-		margin-top: 50rpx;
-		border: none;
-		border-radius: 10rpx;
-		padding: 10rpx;
-		font-size: 16px;
-	}
-</style>

+ 0 - 323
packageUser/pages/user-info/index.vue

@@ -1,323 +0,0 @@
-<template>
-	<view>
-		<!-- 头像区域 -->
-		<view class="avatar-region">
-			<view class="flex-items">
-				<view class="font32 mar-l-20">
-					头像
-				</view>
-				<view class="mar-l-auto mar-r-20">
-					<u-upload :fileList="fileList" @afterRead="afterRead" @delete="deletePic" name="1" :maxCount="1">
-						<view class="flex-items">
-							<image class="avatar" :src="user.avatar||'../../../static/images/avatar.png'"
-								mode="aspectFill">
-							</image>
-							<uni-icons color="#d0d7df" type="right" size="30"></uni-icons>
-						</view>
-					</u-upload>
-				</view>
-			</view>
-		</view>
-		<!-- 基本信息区域 -->
-		<view class="info-region">
-			<view class="font-gray mar-l-20 mar-b-30">
-				基本信息
-			</view>
-			<view class="flex-items mar-b-50">
-				<view class="font32 mar-l-20">
-					昵称
-				</view>
-				<view class="mar-l-auto mar-r-20" @click="changeAccount">
-					<view class="flex-items">
-						<view class="font32 font-gray">
-							{{user.account}}
-						</view>
-						<view>
-							<uni-icons color="#d0d7df" type="right" size="20"></uni-icons>
-						</view>
-					</view>
-				</view>
-			</view>
-			<view class="flex-items mar-b-50" @click="changeBirthday">
-				<view class="font32 mar-l-20 ">
-					生日
-				</view>
-				<view class="mar-l-auto mar-r-20">
-					<view class="flex-items">
-						<view class="font32 font-gray">
-							{{user.birthday}}
-						</view>
-						<uni-icons color="#d0d7df" type="right" size="20"></uni-icons>
-					</view>
-				</view>
-			</view>
-			<view class="flex-items mar-b-50" @click="changeSex">
-				<view class="font32 mar-l-20 ">
-					性别
-				</view>
-				<view class="mar-l-auto mar-r-20">
-					<view class="flex-items">
-						<view class="font32 font-gray" v-if="user.sex==0">
-							女
-						</view>
-						<view class="font32  font-gray" v-if="user.sex==1">
-							男
-						</view>
-						<view class="font32 font-gray " v-if="user.sex==2">
-							其他
-						</view>
-						<uni-icons color="#d0d7df" type="right" size="20"></uni-icons>
-					</view>
-				</view>
-			</view>
-			<view class="flex-items mar-b-50">
-				<view class="font32 mar-l-20 ">
-					上级昵称
-				</view>
-				<view class="mar-l-auto mar-r-20">
-					<view class="flex-items">
-
-
-						<view class="font32 font-gray ">
-							{{user.parentAccount||'-'}}
-						</view>
-					</view>
-				</view>
-			</view>
-			<view class="flex-items mar-b-50" @tap="goLevelPath">
-				<view class="font32 mar-l-20 ">
-					会员等级
-				</view>
-				<view class="mar-l-auto mar-r-20">
-					<view class="flex-items">
-
-
-						<view class="font32 font-gray ">
-							<text v-if="user.level == '0'">普通会员</text>
-							<text v-else-if="user.level == '1'">S级会员</text>
-							<text v-else-if="user.level == '2'">SS级会员</text>
-							<text v-else-if="user.level == '3'">SSS级会员</text>
-							<uni-icons color="#d0d7df" type="right" size="20"></uni-icons>
-						</view>
-					</view>
-				</view>
-			</view>
-			<view class="flex-items mar-b-50" @tap="goAgentPath">
-				<view class="font32 mar-l-20 ">
-					代理等级
-				</view>
-				<view class="mar-l-auto mar-r-20">
-					<view class="flex-items">
-						<view class="font32 font-gray ">
-							<text v-if="user.agent == 2">荣耀代理</text>
-							<text v-else-if="user.agent == 3">超凡代理</text>
-							<text v-else>无</text>
-							<uni-icons color="#d0d7df" type="right" size="20"></uni-icons>
-						</view>
-					</view>
-				</view>
-			</view>
-
-			<!-- <view class="flex-items mar-b-20">
-				<view class="font32 mar-l-20 ">
-					国家/地区
-				</view>
-				<view class="mar-l-auto mar-r-20">
-					<view class="flex-items">
-						<view class="font32 font-gray">
-							{{user.nation}}
-						</view>
-						<uni-icons color="#d0d7df" type="right" size="20"></uni-icons>
-					</view>
-				</view>
-			</view> -->
-
-		</view>
-		<view class=" flex-center">
-			<!-- <button class="loginBtn" style="background-color: #3C86F7;" type="primary"
-				@click="handlerLogout">退出登录</button> -->
-			<button @click="handlerLogout" class="logout-button">
-				退出登录
-			</button>
-		</view>
-
-	</view>
-</template>
-
-<script>
-	import {
-		memberDetail,
-		memberUpdate
-	} from '@/config/api';
-
-	import {
-		mapMutations,
-		mapActions,
-		mapGetters
-	} from 'vuex';
-	import {
-		UPLOAD_URL
-	} from '@/common/config.js'
-	export default {
-		data() {
-			return {
-				fileList: [],
-				user: {},
-				token: "",
-			};
-		},
-		computed: {
-			...mapGetters(['userInfo'])
-		},
-		onLoad() {
-			this.token = uni.getStorageSync('access_token')
-		},
-		onShow() {
-			this.detail()
-			console.log(this.user)
-		},
-
-		methods: {
-			...mapActions(['logout']),
-			goAgentPath() {
-				uni.showModal({
-					title: '升级/续费代理',
-					content: '购买代理套餐即可升级或续费代理,\n立即前往?',
-					success: (res) => {
-						if (res.confirm) {
-							// 这里可以跳转到代理升级页面
-							this.$route('/packageShop/pages/search/product-list?serachKey=' + "代理")
-						}
-					}
-				});
-			},
-			goLevelPath() {
-				this.$route('/packageUser/pages/level/index')
-			},
-			handlerLogout() {
-				this.logout()
-				uni.$u.toast("退出登录")
-				uni.navigateBack({
-					delta: 1 // delta 表示返回的页面数,1 表示返回上一页
-				});
-			},
-			changeSex() {
-				this.$route('/packageUser/pages/user-info/sex-change?id=' + this.user.sex + '&id=' + this.user.id)
-			},
-
-			changeAccount() {
-				this.$route('/packageUser/pages/user-info/account-change?id=' + this.user.account + '&id=' + this.user.id)
-			},
-			changeBirthday() {
-				this.$route('/packageUser/pages/user-info/birthday-change?account=' + this.user.birthdat + '&id=' + this
-					.user.id)
-			},
-			// 删除图片
-			deletePic(event) {
-				this.fileList.splice(event.index, 1)
-			},
-			// 新增图片
-			async afterRead(event) {
-				// 当设置 mutiple 为 true 时, file 为数组格式,否则为对象格式
-				let lists = [].concat(event.file)
-				console.log(lists, "list")
-				let fileListLen = this.fileList.length
-				for (let i = 0; i < lists.length; i++) {
-					const result = await this.uploadFilePromise(lists[i].thumb)
-					this.user.avatar = result.data.link
-					let item = this.fileList[fileListLen]
-				}
-				memberUpdate(this.user)
-			},
-			uploadFilePromise(url) {
-				return new Promise((resolve, reject) => {
-					let a = uni.uploadFile({
-						url: UPLOAD_URL,
-						filePath: url,
-						header: {
-							"Blade-Auth": this.token
-						},
-						name: 'file',
-						formData: {
-							user: 'test'
-						},
-						success: (res) => {
-							resolve(JSON.parse(res.data))
-						}
-					});
-				})
-			},
-			async detail() {
-				const data = await memberDetail()
-				if (data.code == 200) {
-					this.user = data.data
-					uni.setStorageSync('user', this.user)
-				}
-			},
-			goPage() {
-				// this.$Router.push({ path: '/pages/user/set-avatar' });
-			}
-		},
-
-	};
-</script>
-
-<style>
-	.arrow {
-		width: 32rpx;
-		height: 32rpx;
-		margin-top: 13rpx;
-	}
-
-	.h28 {
-		height: 56rpx;
-	}
-
-	.avatar-region {
-		box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
-		border-radius: 40rpx;
-		width: 700rpx;
-		height: auto;
-		padding-bottom: 30rpx;
-		padding-top: 30rpx;
-		background-color: white;
-		margin-top: 30rpx;
-		margin-bottom: 30rpx;
-		margin-left: 25rpx;
-	}
-
-	.info-region {
-		box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
-		border-radius: 40rpx;
-		width: 700rpx;
-		height: auto;
-		padding-bottom: 30rpx;
-		padding-top: 30rpx;
-		background-color: white;
-		margin-top: 30rpx;
-		margin-bottom: 30rpx;
-		margin-left: 25rpx;
-	}
-
-	.avatar-container {
-		margin-left: 50rpx;
-		margin-right: 50rpx;
-	}
-
-	.avatar {
-		width: 130rpx;
-		height: 130rpx;
-		border-radius: 50%;
-		overflow: hidden;
-	}
-
-	.logout-button {
-		width: 686rpx;
-		height: 88rpx;
-		background: #FF4748;
-		border-radius: 44rpx;
-		font-size: 32rpx;
-		color: #FFFFFF;
-		margin-top: 100rpx;
-	}
-</style>

+ 0 - 118
packageUser/pages/user-info/sex-change.vue

@@ -1,118 +0,0 @@
-<template>
-	<view class="gender-selection-page">
-		<!-- 页面标题 -->
-		<view class="title">请选择您的性别</view>
-		<!-- 性别选项 -->
-		<view class="gender-options">
-			<view class="gender-option" :class="{ 'selected': selectedGender === 1}" @click="selectGender(1)">
-				男性
-			</view>
-			<view class="gender-option" :class="{ 'selected': selectedGender ===0 }" @click="selectGender(0)">
-				女性
-			</view>
-
-		</view>
-		<!-- 确认按钮 -->
-		<button class="save-button" @click="ack">保存</button>
-	</view>
-</template>
-
-<script>
-	import {
-		memberUpdate,
-		memberDetail
-	} from '@/config/api.js';
-	export default {
-		data() {
-			return {
-				// 存储选中的性别,初始值为空
-				selectedGender: '',
-				user: {}
-			};
-		},
-		onLoad(op) {
-			this.detail()
-
-		},
-		methods: {
-			async detail() {
-				const data = await memberDetail()
-				if (data.code == 200) {
-					this.user = data.data
-					this.selectedGender = this.user.sex
-				}
-			},
-			// 选择性别
-			selectGender(gender) {
-				this.selectedGender = gender;
-			},
-			ack() {
-				this.user.sex = this.selectedGender
-				memberUpdate(this.user).then((res) => {
-					if (res.code == 200) {
-						uni.$u.toast("操作成功")
-						uni.navigateBack({
-							delta: 1 // delta 表示返回的页面数,1 表示返回上一页
-						});
-						uni.setStorageSync('user', null)
-						console.log(12)
-					}
-				})
-			},
-
-		}
-	};
-</script>
-
-<style scoped>
-	.gender-selection-page {
-		padding: 30px;
-		background-color: white;
-		min-height: 100vh;
-		text-align: center;
-	}
-
-	.title {
-		font-size: 20px;
-		font-weight: bold;
-		margin-bottom: 20px;
-	}
-
-	.gender-options {
-		display: flex;
-		justify-content: center;
-		margin-bottom: 20px;
-		flex-wrap: nowrap;
-	}
-
-	.gender-option {
-		width: 100px;
-		padding: 10px 20px;
-		border: 1px solid #ccc;
-		margin: 0 10px;
-		cursor: pointer;
-		border-radius: 5px;
-		box-sizing: border-box;
-		/* 明确设置高度 */
-		height: 40px;
-		line-height: 20px;
-		/* 使文字垂直居中 */
-	}
-
-	.gender-option.selected {
-		background-color: #007aff;
-		color: white;
-		border-color: #007aff;
-		/* 确保边框颜色与背景颜色一致 */
-	}
-
-	.save-button {
-		background-color: #007aff;
-		color: white;
-		margin-top: 50rpx;
-		border: none;
-		border-radius: 10rpx;
-		padding: 10rpx;
-		font-size: 16px;
-	}
-</style>

+ 60 - 202
pages.json

@@ -11,11 +11,9 @@
 
 	"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
 		{
-			"path": "pages/index/indexNew",
+			"path": "pages/index/index",
 			"style": {
-				"navigationBarTitleText": "首页",
-				"navigationStyle": "custom",
-				"navigationBarBackgroundColor": "#ffffff",
+				"navigationBarTitleText": "我的任务",
 				"enablePullDownRefresh": true
 			}
 		},
@@ -27,231 +25,91 @@
 			"meta": {
 				"auth": false
 			}
-		},
-		{
-			"path": "pages/shop/product-type-list",
+		}, {
+			"path": "pages/tabbar/visitor",
 			"style": {
-				"navigationBarBackgroundColor": "#ffffff",
-				"navigationBarTitleText": "全部商品"
+				"navigationBarTitleText": "访客中心"
+			},
+			"meta": {
+				"auth": false
 			}
 		}
+
 	],
-	"tabBar": {
-		"color": "#999999",
-		"selectedColor": "#292C35",
-		"borderStyle": "white",
-		"backgroundColor": "#FFFFFF",
-		"list": [
-			// {
-			// 	"pagePath": "pages/index/index-copy",
-			// 	"text": "%index.home%"
-			// },
-			{
-				"pagePath": "pages/index/indexNew",
-				"iconPath": "/static/tabbar/home.png",
-				"selectedIconPath": "/static/tabbar/home-select.png",
-				"text": "首页"
-			},
-			{
-				"pagePath": "pages/shop/product-type-list",
-				"iconPath": "/static/tabbar/shop.png",
-				"selectedIconPath": "/static/tabbar/shop-select.png",
-				"text": "分类"
-			},
-			{
-				"pagePath": "pages/tabbar/my",
-				"iconPath": "/static/tabbar/my.png",
-				"selectedIconPath": "/static/tabbar/my-select.png",
-				"text": "个人中心"
-			}
-		]
-	},
-	"globalStyle": {
-		"navigationBarTextStyle": "black",
-		"navigationBarTitleText": "uni-app",
-		"navigationBarBackgroundColor": "#F8F8F8",
-		"backgroundColor": "#F8F8F8"
+	"preloadRule": {
+		"pages/index/index": {
+			"network": "all",
+			"packages": ["pagesA"]
+		}
 	},
 	"subPackages": [{
-			"root": "packageUser",
+			"root": "pagesA",
 			"pages": [{
-					"path": "pages/login/index",
+					"path": "public/login",
 					"style": {
 						"navigationBarTitleText": "登录",
 						"navigationStyle": "custom"
 					}
 				},
 				{
-					"path": "pages/register/index",
-					"style": {
-						"navigationBarTitleText": "注册"
-					}
-				},
-				{
-					"path": "pages/collect/index",
-					"style": {
-						"navigationBarTitleText": "收藏"
-					}
-				},
-				{
-					"path": "pages/level/index",
-					"style": {
-						"navigationBarTitleText": "等级中心"
-					}
-				},
-				{
-					"path": "pages/team/index",
-					"style": {
-						"navigationBarTitleText": "我的团队"
-					}
-				},
-				{
-					"path": "pages/user-info/index",
-					"style": {
-						"navigationBarTitleText": "个人信息"
-					}
-				},
-				{
-					"path": "pages/user-info/account-change",
-					"style": {
-						"navigationBarTitleText": "修改昵称"
-					}
-				},
-				{
-					"path": "pages/share/index",
-					"style": {
-						"navigationBarTitleText": "邀请"
-					}
-				},
-				{
-					"path": "pages/user-info/sex-change",
-					"style": {
-						"navigationBarTitleText": "修改性别"
-					}
-				},
-				{
-					"path": "pages/user-info/birthday-change",
-					"style": {
-						"navigationBarTitleText": "修改生日"
-					}
-				},
-				{
-					"path": "pages/richtext/index",
-					"style": {
-						"navigationBarTitleText": "协议"
-					}
-				}
-
-			]
-		},
-		{
-			"root": "packageShop",
-			"pages": [{
-					"path": "pages/cart/index",
-					"style": {
-						"navigationBarTitleText": "购物车"
-					}
-				},
-				{
-					"path": "pages/search/index",
-					"style": {
-						"navigationBarTitleText": "搜索"
-					}
-				},
-				{
-					"path": "pages/search/product-list",
-					"style": {
-						"navigationBarTitleText": "商品列表"
-					}
-				},
-				{
-					"path": "pages/article/detail",
-					"style": {
-						"navigationBarTitleText": "文章详情"
-					}
-				},
-
-				{
-					"path": "pages/detail/index",
-					"style": {
-						"navigationStyle": "custom"
-					}
-				},
-				{
-					"path": "pages/settle/index",
-					"style": {
-						"navigationBarTitleText": "确认订单"
-					}
-				}
-			]
-		},
-		{
-			"root": "packageOrder",
-			"pages": [{
-					"path": "pages/list/index",
-					"style": {
-						"navigationBarTitleText": "订单列表",
-						"enablePullDownRefresh": true
-					}
-				}, {
-					"path": "pages/list/record",
-					"style": {
-						"navigationBarTitleText": "订单记录",
-						"enablePullDownRefresh": true
-					}
-				},
-				{
-					"path": "pages/score/index",
-					"style": {
-						"navigationBarTitleText": "商品评价"
-					}
-				},
-				{
-					"path": "pages/score/product-score",
-					"style": {
-						"navigationBarTitleText": "商品评价"
-					}
-				},
-				{
-					"path": "pages/detail/index",
-					"style": {
-						"navigationBarTitleText": "订单详情"
-					}
-				},
-				{
-					"path": "pages/payment/index",
+					"path": "public/richtext",
 					"style": {
-						"navigationBarTitleText": "订单支付"
+						"navigationBarTitleText": "用户协议和隐私政策"
 					}
 				},
 				{
-					"path": "pages/logistics/index",
+					"path": "public/phone-login",
 					"style": {
-						"navigationBarTitleText": "物流查询"
+						"navigationBarTitleText": "手机登录"
 					}
 				},
 				{
-					"path": "pages/after-sale/index",
+					"path": "user/index",
 					"style": {
-						"navigationBarTitleText": "售后服务"
+						"navigationBarTitleText": "用户信息"
 					}
 				}
 			]
 		}
 
+
 	],
-	"preloadRule": {
-		"pages/index/indexNew": {
-			"network": "all",
-			"packages": ["packageShop"]
-		},
-		"pages/shop/product-type-list": {
-			"network": "all",
-			"packages": ["packageShop", "packageOrder"]
-		},
-		"pages/tabbar/my": {
-			"network": "all",
-			"packages": ["packageUser"]
-		}
+	"tabBar": {
+		"color": "#999999",
+		"selectedColor": "#292C35",
+		"borderStyle": "white",
+		"backgroundColor": "#FFFFFF",
+		"list": [
+			// {
+			// 	"pagePath": "pages/index/index-copy",
+			// 	"text": "%index.home%"
+			// },
+			{
+				"pagePath": "pages/index/index",
+				"iconPath": "/static/tabbar/task.png",
+				"selectedIconPath": "/static/tabbar/task-select.png",
+				"text": "我的任务"
+			},
+			{
+				"pagePath": "pages/tabbar/visitor",
+				"iconPath": "/static/tabbar/record.png",
+				"selectedIconPath": "/static/tabbar/record-select.png",
+				"text": "访客记录"
+			},
+			{
+				"pagePath": "pages/tabbar/my",
+				"iconPath": "/static/tabbar/my.png",
+				"selectedIconPath": "/static/tabbar/my-select.png",
+				"text": "个人信息"
+			}
+		]
+	},
+	"globalStyle": {
+		"navigationBarTextStyle": "white",
+		"navigationBarTitleText": "uni-app",
+		"navigationBarBackgroundColor": "#363636",
+		"backgroundColor": "#363636"
 	}
+
+
 }

+ 462 - 0
pages/index/index.vue

@@ -0,0 +1,462 @@
+<template>
+	<view class="container">
+		<!-- Visit list -->
+		<scroll-view scroll-y class="visit-list" @scrolltolower="onReachBottom">
+			<view class="visit-item" v-for="(item, index) in taskList" :key="index">
+				<view class="visit-date">
+					<text class="date-num">{{item.date}}</text>
+					<text class="date-month">{{item.year}}</text>
+				</view>
+				<view class="visit-content">
+					<view class="visit-header">
+						<view class="visitor-info">
+							<text class="visitor-label">对接人 </text>
+							<text class="visitor-name">{{item.visitorName}}</text>
+						</view>
+						<text class="visit-status">{{item.status}}</text>
+					</view>
+					<view class="visit-desc">{{item.description}}</view>
+					<view class="visit-time">
+						<u-icon name="clock" size="12" color="#999"></u-icon>
+						<text>{{item.time}}</text>
+					</view>
+				</view>
+			</view>
+
+			<!-- Loading more -->
+			<u-loadmore :status="loadMoreStatus" />
+		</scroll-view>
+
+		<!-- Floating button -->
+		<view class="floating-button" @click="showApplyPopup">
+			<text class="floating-text">申请<br>访问</text>
+		</view>
+
+		<!-- Application method popup -->
+		<uni-popup ref="popup" type="center" border-radius="16rpx">
+			<view class="popup-content">
+				<view class="popup-title">
+					选择申请方式
+					<text class="close-icon" @click="closePopup">×</text>
+				</view>
+				<view class="apply-methods">
+					<view class="method-item" @click="handleApply('self')">
+						<view class="method-icon green-bg">
+							<image src="/static/images/apply.png" mode="aspectFit"></image>
+						</view>
+						<text class="font-bold">发起申请</text>
+					</view>
+					<view class="method-item" @click="handleApply('proxy')">
+						<view class="method-icon orange-bg">
+							<image src="/static/images/behalf.png" mode="aspectFit"></image>
+						</view>
+						<text class="font-bold">代客申请</text>
+					</view>
+				</view>
+			</view>
+		</uni-popup>
+	</view>
+</template>
+
+<script>
+	import {
+		orderList,
+	} from '@/config/api.js';
+	import {
+		mapGetters,
+		mapActions
+	} from 'vuex';
+	import {
+		shareImg
+	} from '@/common/config.js'
+	export default {
+		data() {
+			return {
+				taskList: [],
+				loadMoreStatus: 'loadmore', // loadmore, loading, nomore
+				params: {
+					current: 1,
+					size: 10,
+				},
+				hasMore: true
+			}
+		},
+		computed: {
+			...mapGetters(['isLogin'])
+		},
+		onLoad(options) {
+			this.getList();
+		},
+		// 微信小程序分享配置
+		onShareAppMessage() {
+			return {
+				title: `邀请您加入知己访客`,
+				path: `/pages/index/index`,
+				imageUrl: shareImg // 分享图片,需要添加
+			}
+		},
+		onShareTimeline(res) {
+			let that = this;
+			let shareInfo = store.state.vuex_shareInfo;
+			let query = shareInfo.query;
+			//携带当前页面资源ID参数
+			let currentPage = getCurrentPages()[getCurrentPages().length - 1];
+			let options = currentPage.options;
+			if (JSON.stringify(options) != '{}' && options.id) {
+				query += `&id=${options.id}`;
+			}
+
+			return {
+				title: shareInfo.title,
+				query: query,
+				imageUrl: shareImg,
+				success(res) {
+					uni.showToast({
+						title: '分享成功'
+					})
+				},
+				fail(res) {
+					uni.showToast({
+						title: '分享失败',
+						icon: 'none'
+					})
+				},
+			}
+		},
+		onShow() {
+			// #ifdef H5
+			this.login()
+			// #endif
+
+		},
+
+
+		onPullDownRefresh() {
+			this.refresh()
+			uni.stopPullDownRefresh();
+		},
+
+
+		methods: {
+			...mapActions(['setToken', 'setUserInfo']),
+
+			// Refresh list
+			refresh() {
+				this.taskList = []
+				this.params.current = 1
+				this.hasMore = true
+				this.loadMoreStatus = 'loadmore'
+				this.getList()
+			},
+
+			// Handle reaching bottom of scroll
+			onReachBottom() {
+				if (!this.hasMore || this.loadMoreStatus === 'loading') return
+
+				this.params.current++
+				this.getList(true)
+			},
+
+			// Show apply popup
+			showApplyPopup() {
+				console.log('显示申请弹窗');
+				this.$refs.popup.open()
+			},
+
+			// Close popup
+			closePopup() {
+				this.$refs.popup.close()
+			},
+
+			// Handle apply method selection
+			handleApply(type) {
+				console.log('选择申请方式:', type);
+				this.$refs.popup.close()
+				if (type === 'self') {
+					uni.showToast({
+						title: '跳转到发起申请页面',
+						icon: 'none'
+					});
+					// uni.navigateTo({
+					// 	url: '/pagesA/public/visit-apply'
+					// })
+				} else {
+					uni.showToast({
+						title: '跳转到代客申请页面',
+						icon: 'none'
+					});
+					// uni.navigateTo({
+					// 	url: '/pagesA/public/proxy-visit-apply'
+					// })
+				}
+			},
+
+			// Login method
+			login() {
+				let params = {
+					username: "USER082927",
+					grant_type: "web",
+					memberId: "1957060037088083973"
+				}
+				userLogin(params).then((loginData) => {
+					uni.setStorageSync('access_token', loginData.access_token);
+					uni.setStorageSync('refresh_token', loginData.refresh_token);
+					uni.setStorageSync('user', loginData);
+
+					this.$store.commit('isLogin', true);
+					this.$store.commit('refresh_token', loginData.refresh_token);
+				})
+			},
+
+			// Get visit list with mock data
+			getList(loadMore = false) {
+				if (!loadMore) {
+					uni.showLoading({
+						title: '加载中...'
+					});
+				}
+
+				this.loadMoreStatus = 'loading'
+
+				// 模拟接口延迟
+				setTimeout(() => {
+					// 模拟数据
+					const mockData = Array(10).fill(0).map((_, index) => {
+						const currentIndex = (this.params.current - 1) * 10 + index;
+						const date = new Date();
+						date.setDate(date.getDate() - currentIndex); // 每条数据日期递减
+
+						const statusList = ['待审核', '已通过', '已拒绝'];
+						const descList = [
+							'我是访问事由我是访问事由我是访问事由...',
+							'需要进行业务对接商谈...',
+							'产品展示与技术交流...',
+							'项目合作洽谈...'
+						];
+
+						return {
+							id: currentIndex,
+							visitorName: `范海洋${currentIndex + 1}`,
+							createTime: date,
+							status: statusList[Math.floor(Math.random() * statusList.length)],
+							description: descList[Math.floor(Math.random() * descList.length)]
+						};
+					});
+
+					const list = mockData.map(item => ({
+						...item,
+						date: this.$u.timeFormat(item.createTime, 'DD'),
+						year: this.$u.timeFormat(item.createTime, 'YYYY/MM'),
+						time: this.$u.timeFormat(item.createTime, 'hh:mm')
+					}));
+
+					if (loadMore) {
+						this.taskList = [...this.taskList, ...list];
+					} else {
+						this.taskList = list;
+					}
+
+					// 模拟总共有5页数据
+					this.hasMore = this.params.current < 5;
+					this.loadMoreStatus = this.hasMore ? 'loadmore' : 'nomore';
+
+					if (!loadMore) {
+						uni.hideLoading();
+					}
+				}, 500); // 增加500ms延迟模拟网络请求
+			},
+
+		},
+	}
+</script>
+
+<style lang="scss" scoped>
+	.container {
+		min-height: 100vh;
+		background-color: #f5f5f5;
+	}
+
+	.visit-list {
+		height: 100vh;
+	}
+
+	.visit-item {
+		background-color: #fff;
+		margin: 16rpx 20rpx;
+		border-radius: 16rpx;
+		padding: 24rpx;
+		display: flex;
+		align-items: flex-start;
+		box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.05);
+	}
+
+	.visit-date {
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		margin-right: 24rpx;
+		min-width: 80rpx;
+
+		.date-num {
+			font-size: 48rpx;
+			font-weight: bold;
+			color: #333;
+			line-height: 1;
+		}
+
+		.date-month {
+			font-size: 24rpx;
+			color: #999;
+			margin-top: 4rpx;
+		}
+	}
+
+	.visit-content {
+		flex: 1;
+
+		.visit-header {
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			margin-bottom: 12rpx;
+
+			.visitor-info {
+				display: flex;
+				align-items: center;
+
+				.visitor-label {
+					margin-right: 10rpx;
+					font-size: 32rpx;
+					color: #333;
+					font-weight: normal;
+				}
+
+				.visitor-name {
+					font-size: 36rpx;
+					color: #333;
+					font-weight: bold;
+				}
+			}
+
+			.visit-status {
+				font-size: 28rpx;
+				color: #4CAF50;
+				background-color: rgba(76, 175, 80, 0.1);
+				padding: 4rpx 12rpx;
+				border-radius: 12rpx;
+			}
+		}
+
+		.visit-desc {
+			color: #666;
+			font-size: 28rpx;
+			line-height: 1.4;
+			margin-bottom: 12rpx;
+		}
+
+		.visit-time {
+			display: flex;
+			align-items: center;
+			gap: 8rpx;
+
+			text {
+				color: #999;
+				font-size: 24rpx;
+			}
+		}
+	}
+
+	.floating-button {
+		position: fixed;
+		bottom: 120rpx;
+		right: 40rpx;
+		width: 120rpx;
+		height: 120rpx;
+		background-color: #FF6B00;
+		border-radius: 16rpx;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		box-shadow: 0 8rpx 20rpx rgba(255, 107, 0, 0.3);
+		z-index: 999;
+
+		.floating-text {
+			color: #fff;
+			font-size: 28rpx;
+			text-align: center;
+			line-height: 1.2;
+		}
+	}
+
+	.popup-content {
+		width: 600rpx;
+		padding: 70rpx 40rpx;
+		background-color: #fff;
+		border-radius: 16rpx;
+
+		.popup-title {
+			font-size: 36rpx;
+			color: #333;
+			text-align: center;
+			position: relative;
+			margin-bottom: 60rpx;
+			font-weight: 500;
+
+			.close-icon {
+				position: absolute;
+				right: 0;
+				top: 50%;
+				transform: translateY(-50%);
+				font-size: 50rpx;
+				color: #999;
+				width: 60rpx;
+				height: 60rpx;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+			}
+		}
+
+		.apply-methods {
+			display: flex;
+			justify-content: space-around;
+			padding: 0 20rpx;
+
+			.method-item {
+				display: flex;
+				flex-direction: column;
+				align-items: center;
+				gap: 30rpx;
+				cursor: pointer;
+
+				.method-icon {
+					width: 120rpx;
+					height: 120rpx;
+					border-radius: 20rpx;
+					display: flex;
+					align-items: center;
+					justify-content: center;
+
+					image {
+						width: 80rpx;
+						height: 80rpx;
+					}
+
+					&.green-bg {
+						background-color: #39833b;
+					}
+
+					&.orange-bg {
+						background-color: #FF6B00;
+					}
+				}
+
+				text {
+					font-size: 32rpx;
+					color: #333;
+					font-weight: 500;
+				}
+			}
+		}
+	}
+</style>

+ 0 - 2454
pages/index/indexNew.vue

@@ -1,2454 +0,0 @@
-<template>
-	<view class="container">
-		<!-- 固定顶部导航栏 -->
-		<view class="fixed-header" :class="{'show-fixed': showFixed}">
-			<view class="status_bar" :style="{height: statusBarHeight + 'px'}">
-				<view class="top_view"></view>
-			</view>
-			<view class="nav-content">
-				<view class="left-section">
-					<view class="logo-container">
-						<image class="logo-image"
-							src="https://ndtk.tos-cn-guangzhou.volces.com/uploads/156adea827104e38ae0e25ec4701ecfe.jpg"
-							mode="aspectFit"></image>
-						<text class="logo-text">宏匠</text>
-					</view>
-				</view>
-				<view class="right-section">
-					<view class="fixed-search-bar" @click="goSearch">
-						<view class="search-icon-wrapper">
-							<image class="search-icon" src="/static/images/search.png"></image>
-						</view>
-						<view class="search-input">搜索</view>
-					</view>
-				</view>
-			</view>
-		</view>
-
-		<!-- 原始顶部导航栏 -->
-		<view class="header">
-			<view class="status_bar" :style="{height: statusBarHeight + 'px'}">
-				<view class="top_view"></view>
-			</view>
-			<view class="header-content">
-				<view class="logo-section">
-					<view class="logo-container">
-						<image class="logo-image"
-							src="https://ndtk.tos-cn-guangzhou.volces.com/uploads/156adea827104e38ae0e25ec4701ecfe.jpg"
-							mode="aspectFit"></image>
-						<text class="logo-text">宏匠</text>
-					</view>
-					<view class="sub-title">传承千年唐卡艺术</view>
-				</view>
-				<view class="search-bar" @click="goSearch">
-					<view class="search-icon-wrapper">
-						<image class="search-icon" src="/static/images/search.png"></image>
-					</view>
-					<view class="search-input">寻找心仪的唐卡</view>
-				</view>
-			</view>
-		</view>
-
-		<!-- 轮播图 -->
-		<view class="swiper-section">
-			<view class="swiper-container">
-				<swiper class="swiper" :indicator-dots="true" :autoplay="true" :interval="4000" :duration="800"
-					indicator-color="rgba(139,69,19,0.3)" indicator-active-color="#8B4513">
-					<swiper-item v-for="(item, index) in bannerList" :key="index" @click="handleBannerClick(item)">
-						<image class="swiper-image" :src="item.image" mode="aspectFill"></image>
-					</swiper-item>
-				</swiper>
-			</view>
-		</view>
-
-		<!-- 爆款产品 -->
-		<view class="hot-section">
-			<view class="hot-header">
-				<text class="hot-title">🔥 爆款唐卡</text>
-				<view class="hot-decoration"></view>
-			</view>
-			<view class="hot-grid">
-				<view class="hot-item" v-for="(item, index) in menuList" :key="index" @click="goCategory(item)">
-					<view class="hot-icon-wrapper">
-						<image class="hot-icon" :src="item.image" mode="aspectFit"></image>
-						<view class="hot-badge">热</view>
-						<view class="hot-glow"></view>
-					</view>
-					<text class="hot-name">{{item.title}}</text>
-				</view>
-			</view>
-		</view>
-
-		<!-- 成为代理商品 -->
-		<view class="product-section agent-section">
-			<view class="section-header">
-				<view class="section-title">
-					<text class="title-text">代理专享</text>
-					<view class="title-decoration">
-						<view class="decoration-line"></view>
-						<image class="decoration-symbol" src="/static/images/zhuwang.png" mode="aspectFit"></image>
-						<view class="decoration-line"></view>
-					</view>
-				</view>
-				<view class="section-subtitle">传承千年工艺,开启艺术创业之路</view>
-			</view>
-
-			<view class="product-list">
-				<view class="product-item agent-item" v-for="(item, index) in agentProducts" :key="index"
-					@click="goDetail(item.id)">
-					<view class="product-image-container">
-						<image class="product-image" :src="item.images" mode="aspectFill"></image>
-						<view class="agent-badge">代理专享</view>
-					</view>
-					<view class="product-content">
-						<view class="product-name">{{item.name}}</view>
-						<view class="product-meta">
-							<view class="update-time">{{item.spec}}</view>
-							<view class="sold-count">已售{{item.soldCount}}件</view>
-						</view>
-						<view class="product-footer">
-							<view class="price-section">
-								<text class="price-symbol">¥</text>
-								<text class="price-value">{{item.price}}</text>
-							</view>
-							<view class="buy-btn agent-btn" @click.stop="goDetail(item.id)">
-								<text class="buy-text">申请代理</text>
-							</view>
-						</view>
-					</view>
-				</view>
-			</view>
-		</view>
-
-		<!-- 精选商品 -->
-		<view class="product-section selected-section">
-			<view class="section-header">
-				<view class="section-title">
-					<text class="title-text">精选唐卡</text>
-					<view class="title-decoration">
-						<view class="decoration-line"></view>
-						<image class="decoration-symbol" src="/static/images/zhuwang.png" mode="aspectFit"></image>
-						<view class="decoration-line"></view>
-					</view>
-				</view>
-				<view class="section-subtitle">匠心之作,艺术臻品</view>
-			</view>
-
-			<view class="selected-product-grid">
-				<view class="selected-product-card" v-for="(item, index) in selectedProducts" :key="index"
-					@click="goDetail(item.id)">
-					<view class="selected-product-image-wrapper">
-						<image class="selected-product-image" :src="item.images" mode="aspectFill"></image>
-						<view class="selected-product-badge" v-if="item.soldCount > 100">热销</view>
-					</view>
-					<view class="selected-product-info">
-						<view class="selected-product-name">{{item.name}}</view>
-						<view class="selected-product-desc">{{item.spec}}</view>
-						<view class="selected-product-meta">
-							<view class="rating">
-								<text class="rating-star">★</text>
-								<text class="rating-value">{{ item.productAvg.toFixed(1) }}</text>
-							</view>
-							<view class="selected-sold-count">已售{{item.soldCount}}件</view>
-						</view>
-						<view class="selected-product-footer">
-							<view class="selected-price-section">
-								<text class="selected-price-symbol">¥</text>
-								<text class="selected-price-value">{{item.price}}</text>
-							</view>
-							<view class="selected-buy-btn" @click.stop="goDetail(item.id)">
-								<text class="selected-buy-text">立即购买</text>
-							</view>
-						</view>
-					</view>
-				</view>
-			</view>
-
-			<!-- 加载更多按钮 -->
-			<view class="load-more-section" v-if="selectedHasMore && selectedProducts.length > 0">
-				<view class="load-more-btn" @click="loadMoreSelectedProducts" :class="{'loading': isLoading}">
-					<text v-if="!isLoading">查看更多</text>
-					<text v-else>加载中...</text>
-				</view>
-			</view>
-
-			<!-- 没有更多数据提示 -->
-			<view class="no-more-tip" v-if="!selectedHasMore && selectedProducts.length > 0">
-				<text>~ 已经到底啦 ~</text>
-			</view>
-		</view>
-
-		<!-- 底部装饰 -->
-		<view class="bottom-decoration">
-			<view class="decoration-pattern"></view>
-		</view>
-
-		<!-- 邀请弹框 -->
-		<view class="invitation-modal" v-if="showInvitationModal" @click="closeInvitationModal">
-			<view class="modal-content" @click.stop="">
-				<view class="modal-header">
-					<text class="modal-title">🎉 邀请通知</text>
-					<view class="close-btn" @click="closeInvitationModal">✕</view>
-				</view>
-
-				<view class="modal-body">
-					<view class="inviter-info">
-						<image class="inviter-avatar" :src="inviterInfo.avatar || '/static/images/avatar.png'"
-							mode="aspectFill"></image>
-						<view class="inviter-details">
-							<text class="inviter-name">{{ inviterInfo.account || '好友' }}</text>
-							<text class="inviter-desc">邀请您成为下级用户</text>
-						</view>
-					</view>
-
-					<view class="invitation-desc">
-						<text class="desc-text" v-if="isLogin">接受邀请后,您将成为该用户的下级。</text>
-						<text class="desc-text" v-else>接受邀请后,您将成为该用户的下级。请先登录以完成邀请接受。</text>
-					</view>
-				</view>
-
-				<view class="modal-footer">
-					<button class="reject-btn" @click="rejectInvitation">拒绝</button>
-					<button class="accept-btn" @click="acceptInvitation">
-						<text v-if="isLogin">接受邀请</text>
-						<text v-else>登录并接受</text>
-					</button>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	import {
-		carouselQueryAll,
-		wxLogin,
-		getIndexMenu,
-		getNewProducts,
-		getAgentProducts,
-		getSelectedProducts,
-		userLogin,
-		getMemberDetail,
-		getIndexMemberDetail,
-		acceptInvitation,
-		rejectInvitation,
-		getPendingInvitations
-	} from '@/config/api.js';
-	import {
-		mapGetters,
-		mapActions
-	} from 'vuex';
-	import {
-		shareImg
-	} from '@/common/config.js'
-	export default {
-		data() {
-			return {
-				bannerList: [],
-				menuList: [],
-				agentProducts: [], // 代理商品列表
-				selectedProducts: [], // 精选商品列表
-				selectedParams: {
-					current: 1,
-					size: 6,
-					name: ''
-				},
-				selectedTotal: 0, // 精选商品总数
-				selectedHasMore: true, // 是否还有更多精选商品
-				params: {
-					current: 1,
-					size: 10,
-					name: '',
-					sort: '',
-					arrow: ''
-				},
-				isLoading: false, // 是否正在加载
-				noMoreData: false, // 是否没有更多数据
-				showFixed: false, // 是否显示固定顶部
-				scrollTop: 0, // 当前滚动位置
-				statusBarHeight: 0,
-				// 邀请相关
-				showInvitationModal: false, // 是否显示邀请弹框
-				inviterInfo: {}, // 邀请人信息
-				inviterId: null, // 邀请人ID
-				hasProcessedUrlInvitation: false, // 是否已处理URL中的邀请
-			}
-		},
-		computed: {
-			...mapGetters(['isLogin'])
-		},
-		onLoad(options) {
-			// 获取状态栏高度
-			const systemInfo = uni.getSystemInfoSync();
-			this.statusBarHeight = systemInfo.statusBarHeight;
-			// 计算导航栏总高度 (状态栏 + 导航栏实际高度)
-			this.navTotalHeight = this.statusBarHeight + 90; // 状态栏 + 导航栏高度
-
-			// 处理邀请参数
-			console.log('页面加载参数:', options);
-			if (options.inviter) {
-				console.log('发现邀请人ID:', options.inviter);
-				this.inviterId = options.inviter;
-			}
-
-			this.refresh();
-		},
-		// 微信小程序分享配置
-		onShareAppMessage() {
-			return {
-				title: `邀请您加入宏匠唐卡`,
-				path: `/pages/index/indexNew`,
-				imageUrl: shareImg // 分享图片,需要添加
-			}
-		},
-		onShareTimeline(res) {
-			let that = this;
-			let shareInfo = store.state.vuex_shareInfo;
-			let query = shareInfo.query;
-			//携带当前页面资源ID参数
-			let currentPage = getCurrentPages()[getCurrentPages().length - 1];
-			let options = currentPage.options;
-			if (JSON.stringify(options) != '{}' && options.id) {
-				query += `&id=${options.id}`;
-			}
-
-			return {
-				title: shareInfo.title,
-				query: query,
-				imageUrl: shareImg,
-				success(res) {
-					uni.showToast({
-						title: '分享成功'
-					})
-				},
-				fail(res) {
-					uni.showToast({
-						title: '分享失败',
-						icon: 'none'
-					})
-				},
-				complete() {}
-			}
-		},
-		onShow() {
-			console.log('onShow 触发,当前 inviterId =', this.inviterId);
-			// #ifdef H5
-			this.login()
-			// #endif
-
-			// 检查是否有邀请
-			this.checkInvitation();
-		},
-
-		onReady() {
-			console.log('onReady 触发,当前 inviterId =', this.inviterId);
-			// 页面渲染完成后也检查一次邀请,确保弹框能正常显示
-			setTimeout(() => {
-				console.log('onReady 延时触发 checkInvitation,当前 inviterId =', this.inviterId);
-				this.checkInvitation();
-			}, 500);
-		},
-		onPullDownRefresh() {
-			this.refresh()
-			uni.stopPullDownRefresh();
-		},
-		onPageScroll(e) {
-			// 获取当前滚动位置
-			this.scrollTop = e.scrollTop;
-			// 当滚动超过200时显示固定顶部
-			this.showFixed = this.scrollTop > 200;
-		},
-
-		methods: {
-
-			...mapActions(['setToken', 'setUserInfo']),
-			refresh() {
-				this.getShufflingList();
-				this.getMenuList();
-				this.getProductList();
-			},
-			// 获取菜单列表
-			getMenuList() {
-				getIndexMenu().then(res => {
-					if (res.code === 200) {
-						// 按sort字段排序
-						console.log(res.data)
-						this.menuList = res.data.sort((a, b) => a.sort - b.sort);
-					}
-				})
-			},
-
-			getShufflingList() {
-				carouselQueryAll().then(res => {
-					if (res.code === 200) {
-						this.bannerList = res.data;
-					}
-				});
-			},
-
-			goSearch() {
-				uni.navigateTo({
-					url: '/packageShop/pages/search/index?type=1'
-				});
-			},
-			login() {
-				let params = {
-					username: "USER082927",
-					grant_type: "web",
-					memberId: "1957060037088083973"
-
-				}
-				userLogin(params).then((loginData) => {
-					uni.setStorageSync('access_token', loginData.access_token);
-					uni.setStorageSync('refresh_token', loginData.refresh_token);
-					uni.setStorageSync('user', loginData);
-
-					this.$store.commit('isLogin', true);
-					this.$store.commit('refresh_token', loginData.refresh_token);
-				})
-			},
-			goCategory(item) {
-				if (!item) return;
-
-				switch (item.dataType) {
-					case 0: // 普通页面路径
-						if (item.path) {
-							uni.navigateTo({
-								url: item.path
-							});
-						}
-						break;
-
-					case 1: // 文章内容
-						if (item.id) {
-							uni.navigateTo({
-								url: '/packageShop/pages/article/detail?id=' + item.id
-							});
-						}
-						break;
-
-					case 2: // 底部导航栏路径
-						if (item.path) {
-							uni.switchTab({
-								url: item.path
-							});
-						}
-						break;
-
-					default:
-						console.log('未知的跳转类型');
-				}
-			},
-
-			handleBannerClick(item) {
-				if (item.path) {
-					uni.navigateTo({
-						url: item.path
-					});
-				}
-			},
-
-			handleLogin() {
-				uni.navigateTo({
-					url: '/packageUser/pages/login/index'
-				});
-			},
-
-			/**
-			 * 加载代理商品列表
-			 */
-			loadAgentProducts() {
-				getAgentProducts({}).then(res => {
-					if (res.code === 200) {
-						// 处理代理商品数据
-						this.agentProducts = res.data.filter(item => item.shelfLife === 1).map(item => ({
-							id: item.id,
-							images: item.images,
-							name: item.name,
-							spec: `库存:${item.stock}`,
-							updateTime: item.updateTime.split(' ')[0].replace(/-/g, '月').substring(5) +
-								'日',
-							price: item.price,
-							soldCount: item.salesTotal,
-							productType: item.productType,
-							productAvg: parseFloat(item.productAvg) || 0
-						}));
-					} else {
-						uni.showToast({
-							title: res.msg || '获取代理商品失败',
-							icon: 'none'
-						});
-					}
-				}).catch(err => {
-					console.error('获取代理商品失败:', err);
-					uni.showToast({
-						title: '获取代理商品失败',
-						icon: 'none'
-					});
-				});
-			},
-
-			/**
-			 * 加载精选唐卡商品列表
-			 */
-			loadSelectedProducts(loadMore = false) {
-				if (!loadMore) {
-					uni.showLoading({
-						title: '加载中...'
-					});
-				}
-
-				getSelectedProducts(this.selectedParams).then(res => {
-					if (res.code === 200) {
-						const productList = res.data.records.filter(item => item.shelfLife === 1).map(item => ({
-							id: item.id,
-							images: item.images,
-							name: item.name,
-							spec: `库存:${item.stock}`,
-							updateTime: item.updateTime.split(' ')[0].replace(/-/g, '月').substring(5) +
-								'日',
-							price: item.price,
-							soldCount: item.salesTotal,
-							productType: item.productType,
-							productAvg: parseFloat(item.productAvg) || 0
-						}));
-
-						if (loadMore) {
-							// 加载更多,追加数据
-							this.selectedProducts = [...this.selectedProducts, ...productList];
-						} else {
-							// 初始加载或刷新
-							this.selectedProducts = productList;
-						}
-
-						// 更新分页信息
-						this.selectedTotal = res.data.total;
-						this.selectedHasMore = this.selectedParams.current < res.data.pages;
-					} else {
-						uni.showToast({
-							title: res.msg || '获取精选商品失败',
-							icon: 'none'
-						});
-					}
-				}).catch(err => {
-					console.error('获取精选商品失败:', err);
-					uni.showToast({
-						title: '获取精选商品失败',
-						icon: 'none'
-					});
-				}).finally(() => {
-					if (!loadMore) {
-						uni.hideLoading();
-					}
-				});
-			},
-
-			/**
-			 * 加载更多精选商品
-			 */
-			loadMoreSelectedProducts() {
-				if (!this.selectedHasMore || this.isLoading) {
-					return;
-				}
-
-				this.isLoading = true;
-				this.selectedParams.current++;
-				this.loadSelectedProducts(true);
-
-				setTimeout(() => {
-					this.isLoading = false;
-				}, 1000);
-			},
-
-			/**
-			 * 获取商品列表(入口方法)
-			 */
-			getProductList() {
-				// 并行加载代理商品和精选商品
-				this.loadAgentProducts();
-				this.loadSelectedProducts();
-			},
-
-			// 跳转到商品详情页
-			goDetail(id) {
-				uni.navigateTo({
-					url: '/packageShop/pages/detail/index?id=' + id
-				});
-			},
-
-			// 检查邀请
-			async checkInvitation() {
-				console.log('开始检查邀请, inviterId:', this.inviterId);
-
-				// 1. 优先检查URL参数中的邀请人ID(分享链接方式)
-				if (this.inviterId && !this.hasProcessedUrlInvitation) {
-					console.log('处理URL中的邀请人ID:', this.inviterId);
-					const urlInviterId = this.inviterId;
-					this.hasProcessedUrlInvitation = true; // 标记已处理,避免重复处理
-					await this.showInvitationDialog(urlInviterId, 'share');
-					return; // 处理了分享链接邀请就不再检查其他邀请
-				}
-
-				// 2. 检查本地存储中是否有待处理的邀请
-				const pendingInvitation = uni.getStorageSync('pendingInvitation');
-				console.log('本地存储的待处理邀请:', pendingInvitation);
-				if (pendingInvitation && pendingInvitation.inviterId) {
-					await this.showInvitationDialog(pendingInvitation.inviterId, 'local');
-					uni.removeStorageSync('pendingInvitation');
-					return;
-				}
-
-				// 3. 查询后端是否有待处理的邀请记录(账号邀请方式)
-				await this.checkPendingInvitationsFromServer();
-			},
-
-			// 查询后端待处理邀请记录
-			async checkPendingInvitationsFromServer() {
-				try {
-					// 获取当前用户信息
-					const currentUser = uni.getStorageSync('user');
-
-					console.log('当前用户信息:', currentUser ? currentUser.account : '未登录'); // 调试日志
-					if (!currentUser || !currentUser.account) {
-						console.log('用户未登录,跳过查询后端邀请');
-						return;
-					}
-
-					// 检查是否已有推荐人
-					if (currentUser.parentId) {
-						console.log('用户已有推荐人,跳过查询邀请', currentUser);
-						return;
-					}
-
-					console.log('查询后端待处理邀请记录...');
-					const res = await getPendingInvitations();
-
-					if (res.code === 200 && res.data && res.data.length > 0) {
-						console.log('发现待处理邀请:', res.data);
-						// 取第一个待处理的邀请(按时间倒序,最新的在前面)
-						const latestInvitation = res.data[0];
-						await this.showInvitationDialog(latestInvitation.inviterId, 'server', latestInvitation);
-					} else {
-						console.log('没有待处理的邀请记录');
-					}
-				} catch (error) {
-					console.error('查询待处理邀请失败:', error);
-				}
-			},
-
-			// 显示邀请弹框
-			async showInvitationDialog(inviterId, source = 'unknown', invitationData = null) {
-				try {
-					console.log(`显示邀请弹框 - 来源: ${source}, 邀请人ID: ${inviterId}`);
-
-					// 获取当前用户信息
-					const currentUser = uni.getStorageSync('user');
-					console.log('当前用户信息:', currentUser); // 调试日志
-
-					// 检查用户是否已有推荐人(仅在用户已登录时检查)
-					if (currentUser && currentUser.account && currentUser.parentId) {
-						console.log('用户已有推荐人,不显示邀请弹框');
-						return; // 已有推荐人,不显示邀请弹框
-					}
-
-					// 如果用户未登录,保存邀请信息到本地存储,但仍然显示邀请弹框
-					if (!currentUser || !currentUser.account) {
-						console.log('用户未登录,保存邀请信息到本地存储并显示邀请弹框');
-						uni.setStorageSync('pendingInvitation', {
-							inviterId
-						});
-					}
-
-					// 先设置邀请者ID,确保后续操作能够使用
-					this.inviterId = inviterId;
-					console.log('设置 this.inviterId =', this.inviterId);
-
-					// 如果是从服务器查询的邀请,直接使用已有的邀请人信息
-					if (source === 'server' && invitationData) {
-						this.inviterInfo = {
-							id: invitationData.inviterId,
-							account: invitationData.inviterAccount,
-							avatar: invitationData.inviterAvatar
-						};
-						this.showInvitationModal = true;
-						console.log('显示邀请弹框成功 (server)');
-						return;
-					}
-
-					// 其他情况需要查询邀请人信息
-					const res = await getMemberDetail(inviterId);
-
-					if (res.code === 200) {
-						this.inviterInfo = res.data;
-						this.showInvitationModal = true;
-						console.log('显示邀请弹框成功 (api success)');
-					} else {
-						console.log('获取邀请人信息失败:', res.msg);
-						// 即使获取邀请人信息失败,也显示一个默认的邀请弹框
-						this.inviterInfo = {
-							id: inviterId,
-							account: '好友',
-							avatar: '/static/images/avatar.png'
-						};
-						this.showInvitationModal = true;
-						console.log('使用默认信息显示邀请弹框 (api failed)');
-					}
-				} catch (error) {
-					console.error('获取邀请人信息失败:', error);
-					// 出现错误时也显示一个默认的邀请弹框
-					this.inviterInfo = {
-						id: inviterId,
-						account: '好友',
-						avatar: '/static/images/avatar.png'
-					};
-					this.inviterId = inviterId;
-					this.showInvitationModal = true;
-					console.log('使用默认信息显示邀请弹框 (error)');
-				}
-			},
-
-			// 接受邀请
-			async acceptInvitation() {
-				try {
-					console.log('开始接受邀请,当前 this.inviterId =', this.inviterId);
-
-					// 检查用户是否已登录
-					const currentUser = uni.getStorageSync('user');
-					console.log(currentUser, "当前用户信息")
-					if (!currentUser || !currentUser.account) {
-						// 用户未登录,跳转到登录页面
-						console.log('用户未登录,跳转到登录页面,保存 inviterId =', this.inviterId);
-						uni.showToast({
-							title: '请先登录',
-							icon: 'none'
-						});
-
-						// 保存邀请信息,登录后继续处理
-						uni.setStorageSync('pendingInvitation', {
-							inviterId: this.inviterId
-						});
-
-						// 关闭弹框
-						this.closeInvitationModal();
-
-						// 跳转到登录页面
-						setTimeout(() => {
-							uni.navigateTo({
-								url: '/packageUser/pages/login/index'
-							});
-						}, 500);
-						return;
-					}
-
-					// 用户已登录,直接处理邀请
-					console.log('用户已登录,准备调用 acceptInvitation API,inviterId =', this.inviterId);
-
-					if (!this.inviterId) {
-						console.error('邀请者ID为空,无法接受邀请');
-						uni.showToast({
-							title: '邀请信息错误',
-							icon: 'none'
-						});
-						return;
-					}
-
-					uni.showLoading({
-						title: '处理中...'
-					});
-					console.log('调用 acceptInvitation API,参数 inviterId =', this.inviterId);
-					const res = await acceptInvitation(this.inviterId);
-
-					if (res.code === 200) {
-						// 先隐藏加载遮罩
-						uni.hideLoading();
-
-						// 更新本地用户信息
-						const userInfo = uni.getStorageSync('user') || {};
-						userInfo.parentId = this.inviterId;
-						uni.setStorageSync('user', userInfo);
-
-						// 成功接受邀请后清空邀请ID
-						this.closeInvitationModal(true);
-
-						// 延迟显示成功提示,确保弹框关闭后再显示
-						setTimeout(() => {
-							this.showSuccessMessage();
-						}, 200);
-					} else {
-						uni.hideLoading();
-						setTimeout(() => {
-							uni.showToast({
-								title: res.msg || '操作失败',
-								icon: 'none',
-								duration: 2000,
-								mask: true
-							});
-						}, 100);
-					}
-				} catch (error) {
-					console.error('接受邀请失败:', error);
-					uni.hideLoading();
-					setTimeout(() => {
-						uni.showToast({
-							title: '操作失败',
-							icon: 'none',
-							duration: 2000,
-							mask: true
-						});
-					}, 100);
-				}
-			},
-
-			// 拒绝邀请
-			async rejectInvitation() {
-				try {
-					// 先隐藏邀请弹框,避免z-index冲突
-					const tempInviterId = this.inviterId;
-					const tempInviterInfo = this.inviterInfo;
-					this.showInvitationModal = false;
-
-					const res = await uni.showModal({
-						title: '确认拒绝',
-						content: '确定要拒绝这个邀请吗?'
-					});
-
-					if (res.confirm) {
-						uni.showLoading({
-							title: '处理中...'
-						});
-
-						const result = await rejectInvitation(tempInviterId);
-
-						if (result.code === 200) {
-							uni.showToast({
-								title: '已拒绝邀请',
-								icon: 'success'
-							});
-						} else {
-							uni.showToast({
-								title: result.msg || '操作失败',
-								icon: 'none'
-							});
-						}
-
-						// 拒绝成功后清除数据
-						this.closeInvitationModal(true);
-					} else {
-						// 用户取消拒绝,恢复邀请弹框
-						this.inviterId = tempInviterId;
-						this.inviterInfo = tempInviterInfo;
-						this.showInvitationModal = true;
-					}
-				} catch (error) {
-					console.error('拒绝邀请失败:', error);
-					uni.showToast({
-						title: '操作失败',
-						icon: 'none'
-					});
-				} finally {
-					uni.hideLoading();
-				}
-			},
-
-			// 显示成功消息(针对手机端优化)
-			showSuccessMessage() {
-				console.log('显示邀请接受成功消息');
-
-				// 获取系统信息判断环境
-				const systemInfo = uni.getSystemInfoSync();
-				console.log('当前环境:', systemInfo.platform);
-
-				// 优先尝试使用 showToast
-				try {
-					uni.showToast({
-						title: '邀请接受成功',
-						icon: 'success',
-						duration: 2500,
-						mask: true,
-						success: () => {
-							console.log('showToast 成功显示');
-
-						},
-						fail: (err) => {
-							console.error('showToast 失败:', err);
-							// 如果 showToast 失败,则使用 showModal 作为备选
-							this.showSuccessModal();
-						}
-					});
-				} catch (error) {
-					console.error('showToast 异常:', error);
-					// 异常情况下使用 showModal
-					this.showSuccessModal();
-				}
-			},
-
-			// 备选成功提示方法
-			showSuccessModal() {
-				console.log('使用 showModal 显示成功消息');
-				uni.showModal({
-					title: '成功',
-					content: '邀请接受成功!',
-					showCancel: false,
-					confirmText: '知道了',
-					success: (res) => {
-						console.log('showModal 成功显示');
-						try {
-							uni.vibrateShort({});
-						} catch (e) {
-							console.log('振动反馈不支持或失败');
-						}
-					}
-				});
-			},
-
-			// 关闭邀请弹框
-			closeInvitationModal(clearInviterId = false) {
-				this.showInvitationModal = false;
-				this.inviterInfo = {};
-				if (clearInviterId) {
-					this.inviterId = null;
-				}
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-	.status_bar {
-		height: var(--status-bar-height);
-		width: 100%;
-	}
-
-
-
-	.top_view {
-		height: var(--status-bar-height);
-		width: 100%;
-		position: fixed;
-		top: 0;
-		z-index: 999;
-	}
-
-	.container {
-		min-height: 100vh;
-		background: linear-gradient(135deg, #F5E6D3 0%, #E2D1C3 100%);
-		position: relative;
-	}
-
-	.container::before {
-		content: '';
-		position: fixed;
-		top: 0;
-		left: 0;
-		right: 0;
-		bottom: 0;
-		background:
-			radial-gradient(circle at 25% 25%, rgba(255, 215, 0, 0.15) 0%, transparent 25%),
-			radial-gradient(circle at 75% 75%, rgba(139, 69, 19, 0.1) 0%, transparent 25%),
-			radial-gradient(circle at 50% 50%, rgba(255, 215, 0, 0.08) 0%, transparent 30%);
-		pointer-events: none;
-		z-index: 0;
-		animation: mysticOrbs 12s ease-in-out infinite;
-	}
-
-	.container::after {
-		content: '';
-		position: fixed;
-		top: 0;
-		left: 0;
-		right: 0;
-		bottom: 0;
-		background-image:
-			url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><defs><pattern id="mystic" width="40" height="40" patternUnits="userSpaceOnUse"><circle cx="20" cy="20" r="1" fill="%23A67C52" opacity="0.1"/><circle cx="10" cy="10" r="0.5" fill="%23FFD700" opacity="0.08"/><circle cx="30" cy="30" r="0.5" fill="%23FFD700" opacity="0.08"/></pattern></defs><rect width="100" height="100" fill="url(%23mystic)"/></svg>');
-		opacity: 0.2;
-		pointer-events: none;
-		z-index: 0;
-		animation: mysticPattern 18s linear infinite;
-	}
-
-	/* 顶部导航栏 */
-	.header {
-		background: linear-gradient(135deg, #9C6644 0%, #7E4F2D 100%);
-		padding: 0;
-		position: relative;
-		overflow: hidden;
-		border-bottom: 1rpx solid rgba(255, 215, 0, 0.1);
-	}
-
-	.fixed-header {
-		background: linear-gradient(135deg, #9C6644 0%, #7E4F2D 100%);
-		position: fixed;
-		top: 0;
-		left: 0;
-		right: 0;
-		z-index: 100;
-		transform: translateY(-100%);
-		transition: transform 0.3s ease-in-out;
-		overflow: hidden;
-		box-shadow: 0 4rpx 20rpx rgba(156, 102, 68, 0.3);
-		border-bottom: 1rpx solid rgba(255, 215, 0, 0.1);
-	}
-
-	.fixed-header.show-fixed {
-		transform: translateY(0);
-	}
-
-	.fixed-header::before {
-		content: '';
-		position: absolute;
-		top: -50%;
-		left: -50%;
-		right: -50%;
-		bottom: -50%;
-		background:
-			radial-gradient(circle at 30% 50%, rgba(255, 215, 0, 0.25) 0%, transparent 60%),
-			radial-gradient(circle at 70% 50%, rgba(255, 215, 0, 0.2) 0%, transparent 60%),
-			radial-gradient(circle at 50% 30%, rgba(255, 215, 0, 0.15) 0%, transparent 50%);
-		opacity: 0.9;
-		animation: headerAura 15s ease-in-out infinite;
-		transform-origin: center;
-	}
-
-	.fixed-header::after {
-		content: '';
-		position: absolute;
-		top: 0;
-		left: 0;
-		right: 0;
-		bottom: 0;
-		background-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><defs><pattern id="sacred" width="40" height="40" patternUnits="userSpaceOnUse"><path d="M20 5 L35 20 L20 35 L5 20 Z" fill="none" stroke="rgba(255,215,0,0.15)" stroke-width="1"/></pattern></defs><rect width="100" height="100" fill="url(%23sacred)"/></svg>');
-		opacity: 0.4;
-		animation: sacredPattern 15s linear infinite;
-		pointer-events: none;
-	}
-
-	.nav-content {
-		height: 90rpx;
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-		padding: 0 24rpx;
-		position: relative;
-		z-index: 1;
-	}
-
-	.left-section {
-		flex: 1;
-		display: flex;
-		align-items: center;
-	}
-
-	.logo-container {
-		display: flex;
-		align-items: center;
-		margin-left: 24rpx;
-		flex-shrink: 0;
-		white-space: nowrap;
-	}
-
-	.logo-image {
-		height: 60rpx;
-		width: 60rpx;
-		position: relative;
-		z-index: 1;
-		border-radius: 50%;
-		display: block;
-		border: 2rpx solid rgba(255, 215, 0, 0.3);
-	}
-
-	.logo-text {
-		font-size: 36rpx;
-		color: #FFD700;
-		font-weight: 600;
-		font-family: 'KaiTi', '楷体', serif;
-		margin-left: 12rpx;
-		letter-spacing: 2rpx;
-		text-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.2);
-		white-space: nowrap;
-	}
-
-	.right-section {
-		flex: 2;
-		display: flex;
-		align-items: center;
-		justify-content: flex-end;
-		padding-right: 200rpx;
-		/* 增加右侧padding,为胶囊按钮预留更多空间 */
-	}
-
-	.fixed-search-bar {
-		width: 300rpx;
-		/* 限制搜索框宽度 */
-		height: 64rpx;
-		display: flex;
-		align-items: center;
-		background: rgba(255, 248, 231, 0.95);
-		border: 2rpx solid rgba(139, 69, 19, 0.2);
-		border-radius: 32rpx;
-		padding: 0 20rpx;
-		box-shadow: 0 4rpx 16rpx rgba(139, 69, 19, 0.15);
-		backdrop-filter: blur(10rpx);
-		transition: all 0.3s ease;
-		position: relative;
-		margin-right: 20rpx;
-		/* 添加右侧间距 */
-	}
-
-	.fixed-search-bar::before {
-		content: '';
-		position: absolute;
-		top: 2rpx;
-		left: 2rpx;
-		right: 2rpx;
-		bottom: 2rpx;
-		border: 1rpx solid rgba(139, 69, 19, 0.1);
-		border-radius: 30rpx;
-		pointer-events: none;
-	}
-
-	.fixed-search-bar:active {
-		transform: scale(0.98);
-		box-shadow: 0 2rpx 8rpx rgba(139, 69, 19, 0.2);
-	}
-
-	.search-icon-wrapper {
-		width: 32rpx;
-		height: 32rpx;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		margin-right: 12rpx;
-	}
-
-	.search-icon {
-		width: 28rpx;
-		height: 28rpx;
-		opacity: 0.6;
-	}
-
-	.search-input {
-		font-size: 26rpx;
-		color: #A67C52;
-		flex: 1;
-	}
-
-	.header::before {
-		content: '';
-		position: absolute;
-		top: -50%;
-		left: -50%;
-		right: -50%;
-		bottom: -50%;
-		background:
-			radial-gradient(circle at 30% 50%, rgba(255, 215, 0, 0.2) 0%, transparent 60%),
-			radial-gradient(circle at 70% 50%, rgba(255, 215, 0, 0.15) 0%, transparent 60%),
-			radial-gradient(circle at 50% 30%, rgba(255, 215, 0, 0.1) 0%, transparent 50%);
-		opacity: 0.8;
-		animation: headerAura 15s ease-in-out infinite;
-		transform-origin: center;
-	}
-
-	.header::after {
-		content: '';
-		position: absolute;
-		top: 0;
-		left: 0;
-		right: 0;
-		bottom: 0;
-		background-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><defs><pattern id="sacred" width="30" height="30" patternUnits="userSpaceOnUse"><path d="M15 5 L25 15 L15 25 L5 15 Z" fill="none" stroke="rgba(255,215,0,0.1)" stroke-width="1"/></pattern></defs><rect width="100" height="100" fill="url(%23sacred)"/></svg>');
-		opacity: 0.3;
-		animation: sacredPattern 15s linear infinite;
-		pointer-events: none;
-	}
-
-	.header-content {
-		position: relative;
-		z-index: 1;
-		padding: 0rpx 30rpx 30rpx;
-	}
-
-	.logo-section {
-		margin-bottom: 20rpx;
-		width: 100%;
-		display: flex;
-		flex-direction: column;
-		align-items: flex-start;
-	}
-
-	.logo-section .logo-container {
-		display: flex;
-		align-items: center;
-		justify-content: flex-start;
-		margin-bottom: 12rpx;
-		margin-left: 24rpx;
-	}
-
-	.logo-section .logo-image {
-		height: 80rpx;
-		width: 80rpx;
-		border-radius: 50%;
-		display: block;
-		object-fit: cover;
-		border: 2rpx solid rgba(255, 215, 0, 0.3);
-		box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.1);
-	}
-
-	.logo-section .logo-text {
-		font-size: 48rpx;
-		font-family: 'KaiTi', '楷体', serif;
-		white-space: nowrap;
-		color: #FFD700;
-		font-weight: 700;
-		margin-left: 16rpx;
-		letter-spacing: 3rpx;
-		text-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.2);
-	}
-
-	.sub-title {
-		font-size: 28rpx;
-		color: rgba(255, 215, 0, 0.8);
-		margin-top: 12rpx;
-		font-weight: 300;
-		letter-spacing: 1rpx;
-		margin-left: 24rpx;
-	}
-
-	.search-bar {
-		display: flex;
-		align-items: center;
-		background: rgba(255, 248, 231, 0.95);
-		border: 2rpx solid rgba(139, 69, 19, 0.2);
-		border-radius: 50rpx;
-		padding: 20rpx 30rpx;
-		box-shadow: 0 8rpx 32rpx rgba(139, 69, 19, 0.15);
-		backdrop-filter: blur(10rpx);
-		transition: all 0.3s ease;
-		position: relative;
-	}
-
-	.search-bar::before {
-		content: '';
-		position: absolute;
-		top: 4rpx;
-		left: 4rpx;
-		right: 4rpx;
-		bottom: 4rpx;
-		border: 1rpx solid rgba(139, 69, 19, 0.1);
-		border-radius: 46rpx;
-		pointer-events: none;
-	}
-
-	.search-bar:active {
-		transform: scale(0.98);
-		box-shadow: 0 4rpx 16rpx rgba(139, 69, 19, 0.2);
-	}
-
-	.search-icon-wrapper {
-		width: 48rpx;
-		height: 48rpx;
-		background: linear-gradient(135deg, #8B4513 0%, #654321 100%);
-		border-radius: 50%;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		margin-right: 16rpx;
-		box-shadow: 0 4rpx 12rpx rgba(139, 69, 19, 0.3);
-	}
-
-	.search-icon {
-		width: 28rpx;
-		height: 28rpx;
-		filter: brightness(0) invert(1);
-	}
-
-	.search-input {
-		flex: 1;
-		font-size: 30rpx;
-		color: #8B4513;
-		font-weight: 400;
-	}
-
-	/* 轮播图 */
-	.swiper-section {
-		margin: 20rpx 20rpx 0;
-		position: relative;
-	}
-
-	.swiper-container {
-		border-radius: 20rpx;
-		overflow: hidden;
-		box-shadow: 0 8rpx 24rpx rgba(139, 69, 19, 0.12);
-		position: relative;
-	}
-
-	.swiper-container::before {
-		content: '';
-		position: absolute;
-		top: 4rpx;
-		left: 4rpx;
-		right: 4rpx;
-		bottom: 4rpx;
-		border: 1rpx solid rgba(255, 215, 0, 0.2);
-		border-radius: 16rpx;
-		pointer-events: none;
-		z-index: 2;
-	}
-
-	.swiper {
-		width: 100%;
-		height: 280rpx;
-	}
-
-	.swiper-image {
-		width: 100%;
-		height: 100%;
-	}
-
-	/* 分类导航 */
-	.category-section {
-		margin: 20rpx 20rpx;
-		background: rgba(255, 248, 231, 0.9);
-		border: 1rpx solid rgba(139, 69, 19, 0.1);
-		border-radius: 20rpx;
-		padding: 24rpx 20rpx;
-		box-shadow: 0 8rpx 32rpx rgba(139, 69, 19, 0.08);
-		backdrop-filter: blur(10rpx);
-		position: relative;
-	}
-
-	.category-section::before {
-		content: '';
-		position: absolute;
-		top: 10rpx;
-		left: 10rpx;
-		right: 10rpx;
-		bottom: 10rpx;
-		border: 1rpx solid rgba(139, 69, 19, 0.1);
-		border-radius: 20rpx;
-		pointer-events: none;
-	}
-
-	.category-header {
-		text-align: center;
-		margin-bottom: 30rpx;
-		position: relative;
-	}
-
-	.category-title {
-		font-size: 32rpx;
-		font-weight: 700;
-		color: #8B4513;
-		position: relative;
-		display: inline-block;
-		padding: 0 40rpx;
-	}
-
-	.category-title::before,
-	.category-title::after {
-		content: '❈';
-		color: #8B4513;
-		opacity: 0.6;
-		font-size: 24rpx;
-		position: absolute;
-		top: 50%;
-		transform: translateY(-50%);
-	}
-
-	.category-title::before {
-		left: 0;
-	}
-
-	.category-title::after {
-		right: 0;
-	}
-
-	.category-decoration {
-		width: 100rpx;
-		height: 2rpx;
-		background: linear-gradient(90deg, transparent, #8B4513, transparent);
-		margin: 16rpx auto 0;
-	}
-
-	.category-grid {
-		display: grid;
-		grid-template-columns: repeat(4, 1fr);
-		gap: 20rpx;
-		position: relative;
-		z-index: 1;
-	}
-
-	.category-item {
-		display: flex;
-		flex-direction: column;
-		align-items: center;
-		transition: all 0.3s ease;
-	}
-
-	.category-item:active {
-		transform: scale(0.95);
-	}
-
-	.category-icon-wrapper {
-		width: 100rpx;
-		height: 100rpx;
-		background: linear-gradient(135deg, #8B4513 0%, #654321 100%);
-		border: 2rpx solid #FFD700;
-		border-radius: 50%;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		margin-bottom: 12rpx;
-		box-shadow: 0 8rpx 24rpx rgba(139, 69, 19, 0.3);
-		transition: all 0.3s ease;
-	}
-
-	.category-item:active .category-icon-wrapper {
-		transform: scale(0.9);
-		box-shadow: 0 4rpx 12rpx rgba(139, 69, 19, 0.4);
-	}
-
-	.category-icon {
-		width: 100rpx;
-		height: 100rpx;
-		border-radius: 50%;
-	}
-
-	.category-name {
-		font-size: 24rpx;
-		color: #8B4513;
-		font-weight: 500;
-		text-align: center;
-	}
-
-	/* 爆款产品 */
-	.hot-section {
-		margin: 20rpx 20rpx;
-		background: linear-gradient(135deg, rgba(255, 248, 231, 0.95) 0%, rgba(255, 235, 205, 0.95) 100%);
-		border: 2rpx solid rgba(139, 69, 19, 0.15);
-		border-radius: 24rpx;
-		padding: 30rpx 20rpx;
-		box-shadow: 0 12rpx 40rpx rgba(139, 69, 19, 0.12);
-		backdrop-filter: blur(10rpx);
-		position: relative;
-		overflow: hidden;
-	}
-
-	.hot-section::before {
-		content: '';
-		position: absolute;
-		top: 0;
-		left: 0;
-		right: 0;
-		bottom: 0;
-		background: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><defs><pattern id="hot-pattern" width="20" height="20" patternUnits="userSpaceOnUse"><circle cx="10" cy="10" r="1" fill="%23A67C52" opacity="0.1"/></pattern></defs><rect width="100" height="100" fill="url(%23hot-pattern)"/></svg>');
-		opacity: 0.3;
-		pointer-events: none;
-	}
-
-	.hot-header {
-		text-align: center;
-		margin-bottom: 30rpx;
-		position: relative;
-		z-index: 1;
-	}
-
-	.hot-title {
-		font-size: 36rpx;
-		font-weight: 700;
-		color: #8B4513;
-		text-shadow: 0 2rpx 4rpx rgba(139, 69, 19, 0.2);
-		position: relative;
-		display: inline-block;
-		padding: 0 40rpx;
-		animation: hotTitleGlow 3s ease-in-out infinite;
-	}
-
-	.hot-title::before,
-	.hot-title::after {
-		content: '❈';
-		color: #8B4513;
-		opacity: 0.6;
-		font-size: 24rpx;
-		position: absolute;
-		top: 50%;
-		transform: translateY(-50%);
-	}
-
-	.hot-title::before {
-		left: 0;
-	}
-
-	.hot-title::after {
-		right: 0;
-	}
-
-	.hot-decoration {
-		width: 100rpx;
-		height: 2rpx;
-		background: linear-gradient(90deg, transparent, #8B4513, transparent);
-		margin: 16rpx auto 0;
-	}
-
-	.hot-grid {
-		display: grid;
-		grid-template-columns: repeat(4, 1fr);
-		gap: 20rpx;
-		position: relative;
-		z-index: 1;
-	}
-
-	.hot-item {
-		display: flex;
-		flex-direction: column;
-		align-items: center;
-		transition: all 0.3s ease;
-	}
-
-	.hot-item:active {
-		transform: scale(0.95);
-	}
-
-	.hot-icon-wrapper {
-		width: 120rpx;
-		height: 120rpx;
-		background: linear-gradient(135deg, #8B4513 0%, #654321 100%);
-		border: 3rpx solid #FFD700;
-		border-radius: 50%;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		margin-bottom: 12rpx;
-		box-shadow: 0 8rpx 24rpx rgba(139, 69, 19, 0.3);
-		transition: all 0.3s ease;
-		position: relative;
-		overflow: hidden;
-		animation: mysticPulse 3s ease-in-out infinite;
-	}
-
-	.hot-icon-wrapper::before {
-		content: '';
-		position: absolute;
-		top: -50%;
-		left: -50%;
-		width: 200%;
-		height: 200%;
-		background: conic-gradient(from 0deg,
-				transparent 0deg,
-				rgba(255, 215, 0, 0.1) 45deg,
-				rgba(255, 215, 0, 0.3) 90deg,
-				rgba(255, 215, 0, 0.1) 135deg,
-				transparent 180deg,
-				rgba(255, 215, 0, 0.05) 225deg,
-				rgba(255, 215, 0, 0.2) 270deg,
-				rgba(255, 215, 0, 0.05) 315deg,
-				transparent 360deg);
-		transform: rotate(0deg);
-		transition: all 0.3s ease;
-		animation: mysticRotate 6s ease-in-out infinite;
-	}
-
-	.hot-item:active .hot-icon-wrapper {
-		transform: scale(0.9);
-		box-shadow: 0 4rpx 12rpx rgba(139, 69, 19, 0.4);
-		animation: hotClick 0.3s ease-out;
-	}
-
-	.hot-item:active .hot-icon-wrapper::before {
-		transform: rotate(45deg) translateX(100%);
-	}
-
-	.hot-glow {
-		position: absolute;
-		top: 50%;
-		left: 50%;
-		width: 140rpx;
-		height: 140rpx;
-		background: radial-gradient(circle,
-				rgba(255, 215, 0, 0.4) 0%,
-				rgba(255, 215, 0, 0.2) 30%,
-				rgba(255, 215, 0, 0.1) 60%,
-				transparent 80%);
-		border-radius: 50%;
-		transform: translate(-50%, -50%);
-		animation: hotGlow 3s ease-in-out infinite alternate;
-		pointer-events: none;
-		z-index: 0;
-		filter: blur(2rpx);
-	}
-
-	@keyframes mysticPulse {
-		0% {
-			box-shadow: 0 8rpx 24rpx rgba(139, 69, 19, 0.3);
-			transform: scale(1);
-		}
-
-		25% {
-			box-shadow: 0 8rpx 24rpx rgba(139, 69, 19, 0.3), 0 0 20rpx rgba(255, 215, 0, 0.3);
-			transform: scale(1.02);
-		}
-
-		50% {
-			box-shadow: 0 8rpx 24rpx rgba(139, 69, 19, 0.3), 0 0 30rpx rgba(255, 215, 0, 0.5);
-			transform: scale(1.05);
-		}
-
-		75% {
-			box-shadow: 0 8rpx 24rpx rgba(139, 69, 19, 0.3), 0 0 25rpx rgba(255, 215, 0, 0.4);
-			transform: scale(1.03);
-		}
-
-		100% {
-			box-shadow: 0 8rpx 24rpx rgba(139, 69, 19, 0.3);
-			transform: scale(1);
-		}
-	}
-
-	@keyframes mysticRotate {
-		0% {
-			transform: rotate(0deg);
-		}
-
-		25% {
-			transform: rotate(90deg);
-		}
-
-		50% {
-			transform: rotate(180deg);
-		}
-
-		75% {
-			transform: rotate(270deg);
-		}
-
-		100% {
-			transform: rotate(360deg);
-		}
-	}
-
-	@keyframes hotGlow {
-		0% {
-			opacity: 0.4;
-			transform: translate(-50%, -50%) scale(0.9);
-		}
-
-		50% {
-			opacity: 0.7;
-			transform: translate(-50%, -50%) scale(1.1);
-		}
-
-		100% {
-			opacity: 0.5;
-			transform: translate(-50%, -50%) scale(1.0);
-		}
-	}
-
-	@keyframes hotClick {
-		0% {
-			transform: scale(1);
-		}
-
-		50% {
-			transform: scale(0.85);
-		}
-
-		100% {
-			transform: scale(0.9);
-		}
-	}
-
-	@keyframes hotTitleGlow {
-
-		0%,
-		100% {
-			text-shadow: 0 2rpx 4rpx rgba(139, 69, 19, 0.2);
-		}
-
-		50% {
-			text-shadow: 0 2rpx 4rpx rgba(139, 69, 19, 0.2), 0 0 10rpx rgba(255, 215, 0, 0.6);
-		}
-	}
-
-	@keyframes mysticOrbs {
-
-		0%,
-		100% {
-			transform: scale(1) rotate(0deg);
-		}
-
-		25% {
-			transform: scale(1.1) rotate(90deg);
-		}
-
-		50% {
-			transform: scale(0.9) rotate(180deg);
-		}
-
-		75% {
-			transform: scale(1.05) rotate(270deg);
-		}
-	}
-
-	@keyframes mysticPattern {
-		0% {
-			transform: translateX(0px) translateY(0px);
-		}
-
-		100% {
-			transform: translateX(-40px) translateY(-40px);
-		}
-	}
-
-	@keyframes headerAura {
-		0% {
-			transform: scale(1) rotate(0deg);
-			opacity: 0.8;
-		}
-
-		25% {
-			transform: scale(1.1) rotate(5deg);
-			opacity: 0.9;
-		}
-
-		50% {
-			transform: scale(1.15) rotate(0deg);
-			opacity: 1;
-		}
-
-		75% {
-			transform: scale(1.1) rotate(-5deg);
-			opacity: 0.9;
-		}
-
-		100% {
-			transform: scale(1) rotate(0deg);
-			opacity: 0.8;
-		}
-	}
-
-	@keyframes sacredPattern {
-		0% {
-			transform: translateX(0px) translateY(0px) rotate(0deg);
-		}
-
-		100% {
-			transform: translateX(-30px) translateY(-30px) rotate(360deg);
-		}
-	}
-
-	.hot-icon {
-		width: 80rpx;
-		height: 80rpx;
-		border-radius: 50%;
-		z-index: 1;
-		position: relative;
-	}
-
-	.hot-badge {
-		position: absolute;
-		top: 5rpx;
-		right: 8rpx;
-		background: linear-gradient(135deg, #FF6B35 0%, #FF9A56 100%);
-		color: #fff;
-		font-size: 18rpx;
-		padding: 4rpx 8rpx;
-		border-radius: 10rpx;
-		font-weight: 600;
-		z-index: 2;
-		box-shadow: 0 2rpx 8rpx rgba(255, 107, 53, 0.4);
-		border: 1rpx solid rgba(255, 255, 255, 0.3);
-	}
-
-	.hot-name {
-		font-size: 24rpx;
-		color: #8B4513;
-		font-weight: 500;
-		text-align: center;
-		line-height: 1.3;
-	}
-
-	/* 商品区域通用样式 */
-	.product-section {
-		margin: 0 20rpx 40rpx;
-	}
-
-	.section-header {
-		text-align: center;
-		margin-bottom: 30rpx;
-		position: relative;
-		padding: 30rpx 0;
-	}
-
-	.section-header::before,
-	.section-header::after {
-		content: '';
-		position: absolute;
-		height: 2rpx;
-		width: 60rpx;
-		background: linear-gradient(90deg, transparent, #8B4513, transparent);
-		top: 50%;
-		transform: translateY(-50%);
-	}
-
-	.section-header::before {
-		left: 20%;
-	}
-
-	.section-header::after {
-		right: 20%;
-	}
-
-	.section-title {
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		margin-bottom: 12rpx;
-	}
-
-	.title-text {
-		font-size: 36rpx;
-		font-weight: 700;
-		color: #8B4513;
-		margin: 0 20rpx;
-		position: relative;
-		display: inline-block;
-	}
-
-	.title-decoration {
-		display: flex;
-		align-items: center;
-		gap: 10rpx;
-	}
-
-	.decoration-line {
-		width: 40rpx;
-		height: 2rpx;
-		background: linear-gradient(90deg, #8B4513, #654321);
-	}
-
-	.decoration-symbol {
-		width: 30rpx;
-		height: 30rpx;
-		opacity: 0.8;
-	}
-
-	.section-subtitle {
-		font-size: 26rpx;
-		color: #A67C52;
-		font-weight: 300;
-	}
-
-	/* 代理商品列表 */
-	.agent-section {
-		background: rgba(255, 248, 231, 0.5);
-		border-radius: 24rpx;
-		padding: 20rpx;
-		margin: 0 20rpx 40rpx;
-		border: 1rpx solid rgba(139, 69, 19, 0.1);
-	}
-
-	.product-list {
-		display: grid;
-		grid-template-columns: repeat(2, 1fr);
-		gap: 20rpx;
-	}
-
-	.product-item {
-		background: rgba(255, 248, 231, 0.95);
-		border: 1rpx solid rgba(139, 69, 19, 0.1);
-		border-radius: 20rpx;
-		overflow: hidden;
-		box-shadow: 0 8rpx 32rpx rgba(139, 69, 19, 0.08);
-		backdrop-filter: blur(10rpx);
-		transition: all 0.3s ease;
-		position: relative;
-	}
-
-	.product-item::before {
-		content: '';
-		position: absolute;
-		top: 10rpx;
-		left: 10rpx;
-		right: 10rpx;
-		bottom: 10rpx;
-		border: 1rpx solid rgba(139, 69, 19, 0.1);
-		border-radius: 16rpx;
-		pointer-events: none;
-		z-index: 1;
-	}
-
-	.product-item:active {
-		transform: translateY(-4rpx);
-		box-shadow: 0 12rpx 40rpx rgba(139, 69, 19, 0.12);
-	}
-
-	.product-image-container {
-		position: relative;
-		width: 100%;
-		height: 280rpx;
-		overflow: hidden;
-	}
-
-	.product-image {
-		width: 100%;
-		height: 100%;
-		transition: transform 0.3s ease;
-	}
-
-	.product-item:active .product-image {
-		transform: scale(1.05);
-	}
-
-	.agent-badge {
-		position: absolute;
-		top: 16rpx;
-		right: 16rpx;
-		background: linear-gradient(135deg, #FFD700 0%, #FFA500 100%);
-		color: #8B4513;
-		font-size: 22rpx;
-		padding: 6rpx 12rpx;
-		border-radius: 12rpx;
-		font-weight: 600;
-		border: 1rpx solid rgba(255, 255, 255, 0.3);
-		z-index: 2;
-	}
-
-	.product-content {
-		padding: 20rpx;
-		position: relative;
-		z-index: 2;
-	}
-
-	.product-name {
-		font-size: 28rpx;
-		color: #8B4513;
-		font-weight: 600;
-		line-height: 1.4;
-		margin-bottom: 8rpx;
-		display: -webkit-box;
-		-webkit-line-clamp: 2;
-		-webkit-box-orient: vertical;
-		overflow: hidden;
-	}
-
-	.product-desc {
-		font-size: 24rpx;
-		color: #A67C52;
-		margin-bottom: 12rpx;
-	}
-
-	.product-meta {
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-		margin-bottom: 16rpx;
-	}
-
-	.update-time {
-		font-size: 22rpx;
-		color: #999;
-	}
-
-	.sold-count {
-		font-size: 22rpx;
-		color: #999;
-	}
-
-	.product-footer {
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-	}
-
-	.price-section {
-		display: flex;
-		align-items: baseline;
-	}
-
-	.price-symbol {
-		font-size: 24rpx;
-		color: #8B4513;
-		font-weight: 600;
-	}
-
-	.price-value {
-		font-size: 32rpx;
-		color: #8B4513;
-		font-weight: 700;
-	}
-
-	.buy-btn {
-		background: linear-gradient(135deg, #8B4513 0%, #654321 100%);
-		padding: 12rpx 20rpx;
-		border-radius: 20rpx;
-		border: 1rpx solid #FFD700;
-		box-shadow: 0 4rpx 12rpx rgba(139, 69, 19, 0.3);
-		transition: all 0.3s ease;
-	}
-
-	.agent-btn {
-		background: linear-gradient(135deg, #8B4513 0%, #654321 100%);
-		border: 1rpx solid #FFD700;
-		box-shadow: 0 4rpx 12rpx rgba(139, 69, 19, 0.3);
-	}
-
-	.buy-btn:active {
-		transform: scale(0.95);
-		box-shadow: 0 2rpx 8rpx rgba(139, 69, 19, 0.4);
-	}
-
-	.agent-btn:active {
-		box-shadow: 0 2rpx 8rpx rgba(139, 69, 19, 0.4);
-	}
-
-	.buy-text {
-		font-size: 24rpx;
-		color: #FFD700;
-		font-weight: 500;
-	}
-
-	/* 精选商品网格 */
-	.selected-section {
-		background: rgba(255, 248, 231, 0.3);
-		border-radius: 24rpx;
-		padding: 20rpx;
-		margin: 0 20rpx 40rpx;
-		border: 1rpx solid rgba(139, 69, 19, 0.1);
-	}
-
-	.selected-product-grid {
-		display: grid;
-		grid-template-columns: repeat(2, 1fr);
-		gap: 20rpx;
-	}
-
-	.selected-product-card {
-		background: rgba(255, 248, 231, 0.95);
-		border: 1rpx solid rgba(139, 69, 19, 0.1);
-		border-radius: 20rpx;
-		overflow: hidden;
-		box-shadow: 0 8rpx 32rpx rgba(139, 69, 19, 0.08);
-		backdrop-filter: blur(10rpx);
-		transition: all 0.3s ease;
-		position: relative;
-	}
-
-	.selected-product-card::before {
-		content: '';
-		position: absolute;
-		top: 10rpx;
-		left: 10rpx;
-		right: 10rpx;
-		bottom: 10rpx;
-		border: 1rpx solid rgba(139, 69, 19, 0.1);
-		border-radius: 16rpx;
-		pointer-events: none;
-		z-index: 1;
-	}
-
-	.selected-product-card:active {
-		transform: translateY(-4rpx);
-		box-shadow: 0 12rpx 40rpx rgba(139, 69, 19, 0.12);
-	}
-
-	.selected-product-image-wrapper {
-		position: relative;
-		width: 100%;
-		height: 280rpx;
-		overflow: hidden;
-	}
-
-	.selected-product-image {
-		width: 100%;
-		height: 100%;
-		transition: transform 0.3s ease;
-	}
-
-	.selected-product-card:active .selected-product-image {
-		transform: scale(1.05);
-	}
-
-	.selected-product-badge {
-		position: absolute;
-		top: 16rpx;
-		right: 16rpx;
-		background: linear-gradient(135deg, #8B4513 0%, #654321 100%);
-		border: 1rpx solid #FFD700;
-		color: #FFD700;
-		font-size: 22rpx;
-		padding: 6rpx 12rpx;
-		border-radius: 12rpx;
-		font-weight: 500;
-		z-index: 2;
-	}
-
-	.selected-product-info {
-		padding: 20rpx;
-		position: relative;
-		z-index: 2;
-	}
-
-	.selected-product-name {
-		font-size: 28rpx;
-		color: #8B4513;
-		font-weight: 600;
-		line-height: 1.4;
-		margin-bottom: 8rpx;
-		display: -webkit-box;
-		-webkit-line-clamp: 2;
-		-webkit-box-orient: vertical;
-		overflow: hidden;
-	}
-
-	.selected-product-desc {
-		font-size: 24rpx;
-		color: #A67C52;
-		margin-bottom: 12rpx;
-	}
-
-	.selected-product-meta {
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-		margin-bottom: 16rpx;
-	}
-
-	.rating {
-		display: flex;
-		align-items: center;
-		gap: 4rpx;
-	}
-
-	.rating-star {
-		font-size: 24rpx;
-		color: #FFD700;
-	}
-
-	.rating-value {
-		font-size: 22rpx;
-		color: #666;
-		font-weight: 500;
-	}
-
-	.selected-sold-count {
-		font-size: 22rpx;
-		color: #999;
-	}
-
-	.selected-product-footer {
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-	}
-
-	.selected-price-section {
-		display: flex;
-		align-items: baseline;
-	}
-
-	.selected-price-symbol {
-		font-size: 24rpx;
-		color: #8B4513;
-		font-weight: 600;
-	}
-
-	.selected-price-value {
-		font-size: 32rpx;
-		color: #8B4513;
-		font-weight: 700;
-	}
-
-	.selected-buy-btn {
-		background: linear-gradient(135deg, #8B4513 0%, #654321 100%);
-		padding: 12rpx 20rpx;
-		border-radius: 20rpx;
-		border: 1rpx solid #FFD700;
-		box-shadow: 0 4rpx 12rpx rgba(139, 69, 19, 0.3);
-		transition: all 0.3s ease;
-	}
-
-	.selected-buy-btn:active {
-		transform: scale(0.95);
-		box-shadow: 0 2rpx 8rpx rgba(139, 69, 19, 0.4);
-	}
-
-	.selected-buy-text {
-		font-size: 24rpx;
-		color: #FFD700;
-		font-weight: 500;
-	}
-
-	/* 底部装饰 */
-	.bottom-decoration {
-		height: 60rpx;
-		background: linear-gradient(135deg, #8B4513 0%, #654321 100%);
-		margin: 0 20rpx;
-		border-radius: 20rpx 20rpx 0 0;
-		opacity: 0.1;
-		position: relative;
-		overflow: hidden;
-	}
-
-	.bottom-decoration::before {
-		content: '';
-		position: absolute;
-		top: 0;
-		left: 0;
-		right: 0;
-		bottom: 0;
-		background: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><defs><pattern id="endless-knot-bottom" width="20" height="20" patternUnits="userSpaceOnUse"><path d="M10 0L20 10L10 20L0 10z" fill="none" stroke="rgba(255,215,0,0.1)" stroke-width="1"/></pattern></defs><rect width="100" height="100" fill="url(%23endless-knot-bottom)"/></svg>');
-		opacity: 0.2;
-	}
-
-	/* 邀请弹框样式 */
-	.invitation-modal {
-		position: fixed;
-		top: 0;
-		left: 0;
-		right: 0;
-		bottom: 0;
-		background: rgba(0, 0, 0, 0.6);
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		z-index: 99999;
-		backdrop-filter: blur(5rpx);
-	}
-
-	.modal-content {
-		width: 600rpx;
-		max-width: 90vw;
-		background: linear-gradient(135deg, rgba(255, 248, 231, 0.98) 0%, rgba(255, 235, 205, 0.98) 100%);
-		border-radius: 24rpx;
-		overflow: hidden;
-		box-shadow: 0 20rpx 60rpx rgba(139, 69, 19, 0.3);
-		border: 2rpx solid rgba(255, 215, 0, 0.3);
-		position: relative;
-		animation: modalSlideIn 0.3s ease-out;
-	}
-
-	.modal-content::before {
-		content: '';
-		position: absolute;
-		top: 0;
-		left: 0;
-		right: 0;
-		bottom: 0;
-		background: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><defs><pattern id="modal-pattern" width="30" height="30" patternUnits="userSpaceOnUse"><circle cx="15" cy="15" r="1" fill="%23A67C52" opacity="0.1"/></pattern></defs><rect width="100" height="100" fill="url(%23modal-pattern)"/></svg>');
-		opacity: 0.3;
-		pointer-events: none;
-	}
-
-	.modal-header {
-		background: linear-gradient(135deg, #9C6644 0%, #7E4F2D 100%);
-		padding: 30rpx;
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-		position: relative;
-		z-index: 1;
-	}
-
-	.modal-title {
-		font-size: 32rpx;
-		font-weight: 700;
-		color: #FFD700;
-		text-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.2);
-	}
-
-	.close-btn {
-		width: 48rpx;
-		height: 48rpx;
-		background: rgba(255, 255, 255, 0.2);
-		border-radius: 50%;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		font-size: 24rpx;
-		color: #FFD700;
-		font-weight: 600;
-		transition: all 0.3s ease;
-	}
-
-	.close-btn:active {
-		background: rgba(255, 255, 255, 0.3);
-		transform: scale(0.9);
-	}
-
-	.modal-body {
-		padding: 40rpx 30rpx;
-		position: relative;
-		z-index: 1;
-	}
-
-	.inviter-info {
-		display: flex;
-		align-items: center;
-		margin-bottom: 30rpx;
-		background: rgba(255, 255, 255, 0.8);
-		border-radius: 20rpx;
-		padding: 24rpx;
-		box-shadow: 0 4rpx 16rpx rgba(139, 69, 19, 0.1);
-	}
-
-	.inviter-avatar {
-		width: 100rpx;
-		height: 100rpx;
-		border-radius: 50%;
-		margin-right: 20rpx;
-		border: 3rpx solid #FFD700;
-		box-shadow: 0 4rpx 12rpx rgba(255, 215, 0, 0.3);
-	}
-
-	.inviter-details {
-		flex: 1;
-		display: flex;
-		flex-direction: column;
-	}
-
-	.inviter-name {
-		font-size: 32rpx;
-		font-weight: 700;
-		color: #8B4513;
-		margin-bottom: 8rpx;
-	}
-
-	.inviter-desc {
-		font-size: 26rpx;
-		color: #A67C52;
-	}
-
-	.invitation-desc {
-		background: rgba(255, 255, 255, 0.6);
-		border-radius: 16rpx;
-		padding: 24rpx;
-		border-left: 4rpx solid #8B4513;
-	}
-
-	.desc-text {
-		font-size: 26rpx;
-		color: #666;
-		line-height: 1.6;
-	}
-
-	.modal-footer {
-		padding: 0 30rpx 30rpx;
-		display: flex;
-		gap: 20rpx;
-		position: relative;
-		z-index: 1;
-	}
-
-	.reject-btn,
-	.accept-btn {
-		flex: 1;
-		height: 80rpx;
-		border-radius: 40rpx;
-		font-size: 28rpx;
-		font-weight: 600;
-		border: none;
-		transition: all 0.3s ease;
-		box-shadow: 0 4rpx 16rpx rgba(139, 69, 19, 0.2);
-	}
-
-	.reject-btn {
-		background: rgba(255, 255, 255, 0.9);
-		color: #999;
-		border: 2rpx solid rgba(153, 153, 153, 0.3);
-	}
-
-	.reject-btn:active {
-		background: rgba(255, 255, 255, 0.7);
-		transform: scale(0.98);
-	}
-
-	.accept-btn {
-		background: linear-gradient(135deg, #8B4513 0%, #654321 100%);
-		color: #FFD700;
-		border: 2rpx solid #FFD700;
-		box-shadow: 0 4rpx 16rpx rgba(139, 69, 19, 0.3), 0 0 20rpx rgba(255, 215, 0, 0.2);
-	}
-
-	.accept-btn:active {
-		transform: scale(0.98);
-		box-shadow: 0 2rpx 8rpx rgba(139, 69, 19, 0.4);
-	}
-
-	@keyframes modalSlideIn {
-		0% {
-			opacity: 0;
-			transform: scale(0.8) translateY(-50rpx);
-		}
-
-		100% {
-			opacity: 1;
-			transform: scale(1) translateY(0);
-		}
-	}
-
-	/* 响应式设计 */
-	@media (max-width: 750rpx) {
-		.selected-product-grid {
-			grid-template-columns: 1fr;
-		}
-
-		.category-grid {
-			grid-template-columns: repeat(3, 1fr);
-		}
-
-		.category-item {
-			width: 120rpx;
-		}
-
-		.modal-content {
-			width: 90vw;
-		}
-
-		.modal-footer {
-			flex-direction: column;
-		}
-
-		.reject-btn,
-		.accept-btn {
-			width: 100%;
-		}
-	}
-
-	/* 加载更多按钮样式 */
-	.load-more-section {
-		display: flex;
-		justify-content: center;
-		padding: 40rpx 20rpx;
-	}
-
-	.load-more-btn {
-		background: linear-gradient(135deg, #8B4513, #A0522D);
-		color: white;
-		padding: 24rpx 60rpx;
-		border-radius: 50rpx;
-		font-size: 28rpx;
-		font-weight: 600;
-		box-shadow: 0 8rpx 24rpx rgba(139, 69, 19, 0.2);
-		transition: all 0.3s ease;
-		text-align: center;
-		min-width: 200rpx;
-	}
-
-	.load-more-btn.loading {
-		background: linear-gradient(135deg, #999, #bbb);
-		color: #666;
-	}
-
-	.load-more-btn:active {
-		transform: translateY(2rpx);
-		box-shadow: 0 4rpx 12rpx rgba(139, 69, 19, 0.3);
-	}
-
-	/* 没有更多数据提示样式 */
-	.no-more-tip {
-		display: flex;
-		justify-content: center;
-		padding: 30rpx 20rpx;
-		color: #999;
-		font-size: 26rpx;
-	}
-</style>

+ 0 - 576
pages/order/after-progress.vue

@@ -1,576 +0,0 @@
-<template>
-	<view>
-		<view class="mar-t-10">
-
-		</view>
-		<CustomToast ref="customToast" />
-		<view class="region mar-t-20" v-if="order.isAfter!=3">
-			<view>
-				<uni-steps active-color="#e29c6d" :options="list1" :active="active" :key="activeKey"
-					v-if="orderAfter.type==1" />
-				<uni-steps active-color="#e29c6d" :options="list2" :active="active" :key="activeKey"
-					v-if="orderAfter.type==2" />
-			</view>
-		</view>
-
-		<view class="region pad-24">
-			<view v-if="orderAfter.status==1">
-				<view class="font38 font-bold ">
-					请寄回商品
-				</view>
-				<view class="mar-tb-20 font28">
-					商家已同意退款,请您在
-					<text class="font-red font28 pad-lr-10">
-						{{remainingTime}}
-					</text>
-					内寄回商品
-				</view>
-				<view class="flex  flex-sp-between mar-t-20 ">
-					<view class="nowrap mar-r-20 ">
-						商家地址信息
-					</view>
-					<view>
-						<view class="flex-end">
-							<text>
-								{{merchantAddress.name}}
-							</text>
-							<text>
-								{{merchantAddress.mobile}}
-							</text>
-						</view>
-						<view>
-							{{merchantAddress.address}}
-						</view>
-					</view>
-				</view>
-				<view class="flex-end mar-t-20">
-					<text class="font-blue " @tap="copyContent">复制</text>
-				</view>
-				<view class="gray-line mar-tb-8"></view>
-			</view>
-			<view class="font38 font-bold " v-if="orderAfter.status==0">
-				请等待商家审核
-			</view>
-			<view class="font38 font-bold " v-if="orderAfter.status==1">
-				请寄回商品
-			</view>
-			<view class="font38 font-bold " v-if="orderAfter.status==2">
-				等待商家退款
-			</view>
-			<view v-if="orderAfter.status==3">
-				<view class="flex-items-plus">
-					<uni-icons color="#63b43d" type="checkbox-filled" size="30"></uni-icons>
-					<view class="font38 font-bold ">
-						退款完成
-					</view>
-				</view>
-				<view class="text-align mar-t-10">
-					钱款{{orderAfter.afterPrice}}元已退回到你**账户
-				</view>
-			</view>
-
-			<view @tap="checkAfterSaleStatus" class="flex-items-between">
-				<view>
-
-					<view v-if="orderAfter.status==4">
-						<view class="font-red">
-							售后已关闭
-						</view>
-						<view class="font38 font-bold ">
-							商家审核不通过
-						</view>
-						<view class="font28">
-							原因:{{orderAfter.approveRemark}}
-						</view>
-					</view>
-					<view v-if="orderAfter.status==5">
-						<view class="font-red">
-							售后已关闭
-						</view>
-						<view class="font38 font-bold ">
-							商家不同意退款
-						</view>
-						<view class="font28">
-							原因:{{orderAfter.approveRemark}}
-						</view>
-					</view>
-					<view v-if="orderAfter.status==6">
-						<view class="font-red">
-							售后已关闭
-						</view>
-						<view class="font38 font-bold ">
-							您已取消售后
-						</view>
-
-					</view>
-				</view>
-
-			</view>
-
-			<view class="flex-items-between mar-t-20">
-				<view>
-					<view class="font28" v-if="order.isAfter==1&&(orderAfter.status==1||orderAfter.status==2)">
-						我已寄出
-					</view>
-					<view class="font-gray" v-if="order.isAfter==1&&(orderAfter.status==1)">
-						填写物流单号
-					</view>
-				</view>
-				<view>
-					<text class="copy-btn " @tap="logistics"
-						v-if="orderAfter.status==2||orderAfter.status==3">查询物流</text>
-					<text class="copy-btn " @tap="showExpressNumberPopup" v-if="orderAfter.status==1">填写单号</text>
-				</view>
-			</view>
-		</view>
-
-		<view class="region2">
-			<view class="font32 pad-16 ">
-				退货信息
-			</view>
-			<view class="flex-items">
-				<view>
-					<image class=" mar-l-20 productImg" :src="orderAfter.productImg" mode="cover"></image>
-				</view>
-				<view class="mar-l-20 mar-r-20">
-					<view class="font28 pad-b-10 ">
-						{{orderAfter.productName}}
-					</view>
-					<view class="pad-tb-16 font-gray">
-						<text class="font28">
-							规格: {{orderAfter.skuName}}
-						</text>
-					</view>
-				</view>
-			</view>
-
-			<view class="flex-items-between pad-24">
-				<view>
-					退货件数
-				</view>
-				<view>
-					{{orderAfter.count}}件
-				</view>
-			</view>
-			<view class="flex-items-between pad-24">
-				<view>
-					退款金额
-				</view>
-				<view>
-					{{orderAfter.afterPrice}}
-				</view>
-			</view>
-			<view class="flex-items-between pad-24">
-				<view>
-					退货类型
-				</view>
-				<view>
-					{{orderAfter.type==1?'退货退款':'仅退款'}}
-				</view>
-			</view>
-			<view class="flex-items-between pad-24">
-				<view>
-					退货原因
-				</view>
-				<view>
-					{{reasonRange[orderAfter.reason].text}}
-				</view>
-			</view>
-			<view class="flex-items-between pad-24">
-				<view>
-					申请时间
-				</view>
-				<view>
-					{{orderAfter.createTime}}
-				</view>
-			</view>
-			<view class="flex-items-between pad-24">
-				<view>
-					订单编号
-				</view>
-				<view>
-					{{orderAfter.orderCode}}
-				</view>
-			</view>
-			<view class="pad-24">
-				<view>
-					凭证
-				</view>
-				<view class="image-item mar-tb-16">
-					<view v-for="(image, imageIndex) in imagesList" :key="imageIndex" class="mar-r-20 "
-						v-if="imagesList.length>0">
-						<image @tap="detailPreviewImage(imageIndex)" :src="image" class="images">
-						</image>
-					</view>
-				</view>
-			</view>
-		</view>
-
-		<uni-popup ref="dialog" type="dialog">
-			<uni-popup-dialog type="warn" cancelText="取消" confirmText="确认" title="提示" content="确认要取消退货?"
-				@confirm="cancel()"></uni-popup-dialog>
-		</uni-popup>
-		<!-- 底部弹窗 -->
-		<uni-popup ref="expressNumberPopup" borderRadius="20rpx 20rpx 0 0 " background-color="#fff">
-			<view class="popup-content">
-				<view class="popup-title">填写物流单号</view>
-				<input v-model="orderAfter.expressCode" focus class="popup-input" placeholder="请输入物流单号" />
-				<view class="popup-buttons">
-					<button class="popup-cancel" @click="hideExpressNumberPopup">取消</button>
-					<button class="popup-confirm" @click="submitExpressNumber">确定</button>
-				</view>
-			</view>
-		</uni-popup>
-		<view class="navigation">
-			<view class="flex-items-between">
-				<view class="mar-l-20" @click="$Router.pushTab({name: 'index'})">
-					<u-icon name="chat" color="#F95B5B" size="22"></u-icon>
-					<view>客服</view>
-				</view>
-
-				<view class="flex-items">
-					<button class="grayBut mar-r-20 " @click="onCancelAfter" v-if="order.isAfter==1">取消售后</button>
-					<button class="grayBut mar-r-20 " @click="submitAfterSale " v-if="order.isAfter==3">再次申请售后</button>
-					<button class="grayBut mar-r-20" @click="afterRecord" v-if="historyDetail!=1">售后记录</button>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	import {
-		merchantAddressDetail,
-		orderDetail,
-		orderAfterDetail,
-		orderAfterDetailById,
-		updateExpressCode,
-		cancelAfter
-	} from '../../config/api.js';
-	import CustomToast from '../../components/CustomToast.vue';
-
-	export default {
-		components: {
-			CustomToast,
-		},
-		data() {
-			return {
-				activeKey: 0,
-				remainingTime: "", // 剩余时间
-				merchantAddress: {},
-				active: 0,
-				imagesList: [],
-				order: {},
-				orderAfter: {
-					reason: 0,
-					expressCode: ""
-				},
-				list1: [{
-					title: '商家审核'
-				}, {
-					title: '寄回商品'
-				}, {
-					title: '商家退款'
-				}, {
-					title: '退款完成'
-				}],
-				list2: [{
-					title: '商家审核'
-				}, {
-					title: '退款完成'
-				}],
-				orderId: "",
-				historyDetail: "",
-				reasonRange: [{
-						value: 1,
-						text: "不喜欢,效果不好"
-					},
-					{
-						value: 2,
-						text: "不想要了"
-					},
-					{
-						value: 3,
-						text: "材质与商品描述不符"
-					},
-					{
-						value: 4,
-						text: "大小尺寸与商品描述不符"
-					},
-					{
-						value: 5,
-						text: "安装质量问题"
-					},
-					{
-						value: 6,
-						text: "做工瑕疵"
-					},
-					{
-						value: 7,
-						text: "颜色、款式、图案与描述不符"
-					},
-					{
-						value: 8,
-						text: "商品破损或污渍"
-					},
-					{
-						value: 9,
-						text: "其他原因"
-					},
-				],
-			}
-		},
-		onLoad(op) {
-			if (op.orderId) {
-				this.orderId = op.orderId
-				this.getDetail()
-				this.getOrderDetail()
-			}
-			if (op.id) {
-				this.getDetailById(op.id)
-			}
-			if (op.historyDetail) {
-				this.historyDetail = op.historyDetail
-			}
-			this.getAddress()
-		},
-		methods: {
-			getOrderDetail() {
-				orderDetail({
-					id: this.orderId
-				}).then((res) => {
-					this.order = res.data
-				})
-			},
-			afterRecord() {
-				this.$route('/pages/order/history-after?orderId=' + this.orderId);
-			},
-			submitAfterSale() {
-				this.$route('/pages/order/after?id=' + this.orderId);
-			},
-			detailPreviewImage(currentIndex) {
-				uni.previewImage({
-					current: this.imagesList[currentIndex], // 当前显示图片的链接
-					urls: this.imagesList // 需要预览的图片链接列表
-				});
-			},
-			// 计算并格式化倒计时
-			formatRemainingTime() {
-				const currentTime = new Date(); // 当前时间
-				const createTime = new Date(this.orderAfter.createTime.replace(/-/g, '/')); // 转换为 Date 对象
-				const deadline = new Date(createTime.getTime() + 7 * 24 * 60 * 60 * 1000); // 7天后的截止时间
-				console.log("currentTime", currentTime);
-				console.log("createTime", createTime);
-				console.log("deadline", deadline);
-
-				let remainingTime = deadline - currentTime; // 剩余时间(毫秒)
-
-				if (remainingTime <= 0) {
-					this.remainingTime = "已超过退货期限";
-					clearInterval(this.timer); // 清除定时器
-					return;
-				}
-
-				// 计算剩余天、小时和分钟
-				const days = Math.floor(remainingTime / (1000 * 60 * 60 * 24));
-				const hours = Math.floor((remainingTime % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
-				const minutes = Math.floor((remainingTime % (1000 * 60 * 60)) / (1000 * 60));
-				this.remainingTime = `${days}天${hours}小时${minutes}分钟`;
-			},
-			onCancelAfter() {
-				this.$refs.dialog.open()
-			},
-			cancel() {
-				cancelAfter({
-					id: this.orderAfter.id
-				}).then((res) => {
-					if (res.code == 200) {
-						this.$refs.customToast.showToast('操作成功');
-						this.$refs.dialog.close()
-						setTimeout(() => {
-							uni.navigateBack({
-								delta: 1
-							})
-						}, 1000)
-
-					}
-				})
-			},
-			// 启动倒计时
-			startCountdown() {
-				this.formatRemainingTime(); // 初始化倒计时
-
-				// 每分钟更新一次倒计时
-				this.timer = setInterval(() => {
-					this.formatRemainingTime();
-				}, 60000); // 每分钟更新一次
-			},
-
-			logistics() {
-				this.$route('/pages/order/logistics?expressCode=' + this.orderAfter.expressCode);
-			},
-			showExpressNumberPopup() {
-				this.$refs.expressNumberPopup.open("bottom");
-			},
-			hideExpressNumberPopup() {
-				this.$refs.expressNumberPopup.close();
-			},
-			submitExpressNumber() {
-				if (this.orderAfter.expressCode) {
-					updateExpressCode(this.orderAfter).then((res) => {
-						if (res.code == 200) {
-							this.$refs.customToast.showToast('提交成功');
-							this.getDetail();
-							this.hideExpressNumberPopup();
-						}
-					});
-				} else {
-					uni.showToast({
-						title: '请输入物流单号',
-						icon: 'none'
-					});
-				}
-			},
-			copyContent() {
-				uni.setClipboardData({
-					data: this.merchantAddress.address + " " + this.merchantAddress.mobile + " " + this
-						.merchantAddress.name,
-					success() {
-						// 复制成功的提示
-						uni.showToast({
-							title: '复制成功',
-							icon: 'success'
-						});
-					},
-				});
-			},
-			getDetail() {
-				orderAfterDetail({
-					orderId: this.orderId
-				}).then((res) => {
-					this.orderAfter = res.data
-					this.imagesList = this.orderAfter.images.split(',');
-					this.active = this.orderAfter.status
-					this.activeKey = Date.now(); // 更新 activeKey
-					this.$set(this, "active", this.orderAfter.status)
-					if (this.orderAfter.status == 1) {
-						this.startCountdown(); // 启动倒计时
-					}
-				})
-			},
-			getDetailById(id) {
-				orderAfterDetailById({
-					id: id
-				}).then((res) => {
-					this.orderAfter = res.data
-					this.orderId = this.orderAfter.orderId
-					this.getOrderDetail()
-					this.imagesList = this.orderAfter.images.split(',');
-					this.active = this.orderAfter.status
-					this.activeKey = Date.now(); // 更新 activeKey
-					this.$set(this, "active", this.orderAfter.status)
-					if (this.orderAfter.status == 1) {
-						this.startCountdown(); // 启动倒计时
-					}
-				})
-			},
-			getAddress() {
-				merchantAddressDetail().then((res) => {
-					this.merchantAddress = res.data
-				})
-			}
-		}
-	}
-</script>
-<style>
-	.navigation {
-		position: fixed;
-		bottom: 0;
-		width: 100%;
-		border: solid 2rpx #f2f2f2;
-		background-color: #ffffff;
-		padding: 16rpx 0;
-	}
-
-	button::after {
-		border: none;
-	}
-
-	.copy-btn {
-		background-color: #ffffff;
-		border: 1px solid #999999;
-		color: #333333;
-		padding: 5rpx 10rpx;
-		/* 减少按钮的内边距 */
-		border-radius: 8rpx;
-		font-size: 28rpx;
-	}
-
-	.productImg {
-		border-radius: 20rpx;
-		width: 120rpx;
-		height: 120rpx;
-	}
-
-	.grayBut {
-		background-color: #f2f2f2;
-		padding: 5rpx 30rpx 5rpx 30rpx;
-		font-size: 26rpx;
-		color: #1b1b1b;
-	}
-
-	.popup-content {
-		padding: 20rpx;
-	}
-
-	.popup-title {
-		font-size: 32rpx;
-		font-weight: bold;
-		text-align: center;
-		margin-bottom: 20rpx;
-	}
-
-	.popup-input {
-		border: 1px solid #ccc;
-		border-radius: 8rpx;
-		margin-bottom: 20rpx;
-		height: 80rpx;
-	}
-
-	.popup-buttons {
-		display: flex;
-		justify-content: space-around;
-	}
-
-	.popup-cancel,
-	.popup-confirm {
-		padding: 10rpx 30rpx;
-		border-radius: 8rpx;
-		font-size: 28rpx;
-	}
-
-	.popup-cancel {
-		background-color: #f2f2f2;
-		color: #333;
-		width: 40%;
-	}
-
-	.popup-confirm {
-		background-color: #e29c6d;
-		color: #fff;
-		width: 40%;
-	}
-
-	.image-item {
-		margin-bottom: 10rpx;
-		display: flex;
-		/* 设置子元素垂直排列 */
-		align-items: center;
-		/* 水平居中对齐子元素 */
-	}
-
-	.images {
-		width: 100rpx;
-		height: 100rpx;
-	}
-</style>

+ 0 - 315
pages/order/after.vue

@@ -1,315 +0,0 @@
-<template>
-	<view>
-		<CustomToast ref="customToast" />
-		<!-- 页面标题 -->
-		<view class="flex-items region mar-t-10">
-			<view>
-				<image class=" mar-l-20 productImg" :src="order.images" mode="cover"></image>
-			</view>
-			<view class="mar-l-20 mar-r-20">
-				<view class="font28 pad-b-10 ">
-					{{order.productName}}
-				</view>
-				<view class="pad-tb-16 font-gray">
-					<text>
-						规格: {{order.skuName}}
-					</text>
-					<text class="mar-l-20">
-						x{{order.count}}
-					</text>
-				</view>
-
-				<view class="mar-r-16">
-				</view>
-			</view>
-		</view>
-		<view class="region1">
-			<uni-forms class="pad-16" ref="customForm" :rules="customRules" labelWidth="80px" :modelValue="after">
-				<uni-forms-item label="申请类型" required name="type">
-					<uni-data-select v-model="after.type" placeholder="请选择申请类型" :localdata="typeRange">
-					</uni-data-select>
-				</uni-forms-item>
-				<uni-forms-item label="申请原因" required name="reason">
-					<uni-data-select v-model="after.reason" placeholder="请选择申请原因" :localdata="reasonRange">
-					</uni-data-select>
-				</uni-forms-item>
-			</uni-forms>
-		</view>
-		<view class="region pad-16">
-			<view class="flex-items-between">
-				<view>
-					退货数量(本次可申请{{order.count}}件)
-				</view>
-				<view>
-					<uni-number-box v-model="after.count" :min="1" :max="order.count" />
-				</view>
-			</view>
-			<view class="flex-items-between mar-t-20">
-				<view>
-					退款金额
-				</view>
-				<view>
-					<text class=" font-red font32 font-bold">
-						¥{{order.unitPrice*after.count}}
-					</text>
-				</view>
-			</view>
-		</view>
-		<!-- 表单区域 -->
-		<view class="form-container region">
-			<!-- 申请说明 -->
-			<view class="form-item">
-				<view class="form-label">申请说明</view>
-				<view class="textarea-container">
-					<textarea style="width: 100%;" v-model="after.remark" placeholder="请详细描述申请说明(选填)"
-						class="form-textarea" :maxlength="maxLength"></textarea>
-					<view class="char-count">
-						您还可以输入{{ remainingChars }} 字
-					</view>
-				</view>
-			</view>
-
-			<!-- 上传凭证 -->
-			<view class="form-item">
-				<view class="form-label">上传凭证(可选)</view>
-				<view class="upload-container">
-					<uni-file-picker @delete="delFile" v-model="imageValue" fileMediatype="image" mode="grid"
-						@select="select" />
-				</view>
-			</view>
-		</view>
-
-		<!-- 提交按钮 -->
-		<button class="submit-button" @click="submitForm('customForm')">提交申请</button>
-	</view>
-</template>
-
-<script>
-	import CustomToast from '../../components/CustomToast.vue';
-
-	import {
-		UPLOAD_URL
-	} from '../../common/config.js';
-	import {
-		orderDetail,
-		submitOrderAfter
-	} from '../../config/api.js';
-
-	export default {
-		components: {
-			CustomToast,
-		},
-		data() {
-			return {
-				typeRange: [{
-						value: 1,
-						text: "退货退款"
-					},
-					{
-						value: 2,
-						text: "仅退款"
-					},
-				],
-				reasonRange: [{
-						value: 1,
-						text: "不喜欢,效果不好"
-					},
-					{
-						value: 2,
-						text: "不想要了"
-					},
-					{
-						value: 3,
-						text: "材质与商品描述不符"
-					},
-					{
-						value: 4,
-						text: "大小尺寸与商品描述不符"
-					},
-					{
-						value: 5,
-						text: "安装质量问题"
-					},
-					{
-						value: 6,
-						text: "做工瑕疵"
-					},
-					{
-						value: 7,
-						text: "颜色、款式、图案与描述不符"
-					},
-					{
-						value: 8,
-						text: "商品破损或污渍"
-					},
-					{
-						value: 9,
-						text: "其他原因"
-					},
-				],
-				after: {
-					imgList: [],
-					reason: '',
-					remark: "",
-					count: 1
-				},
-				customRules: {
-					type: {
-						rules: [{
-							required: true,
-							errorMessage: '请选择申请类型'
-						}]
-					},
-					reason: {
-						rules: [{
-							required: true,
-							errorMessage: '请选择申请原因'
-						}]
-					},
-				},
-				token: '',
-				imageValue: [],
-				fileList: [],
-				orderNumber: '',
-				reason: '',
-				images: [],
-				contactName: '',
-				contactPhone: '',
-				orderId: "",
-				order: {},
-				maxLength: 200, // 最大字数
-			};
-		},
-		computed: {
-			// 计算剩余字数
-			remainingChars() {
-				return this.maxLength - this.after.remark.length;
-			}
-		},
-		onLoad(op) {
-			this.orderId = op.id;
-			this.getOrderDetail();
-			this.token = uni.getStorageSync('access_token');
-		},
-		methods: {
-			delFile(e) {
-				this.after.imgList.splice(e.index, 1); // 删除对应 index 的附件
-			},
-			getOrderDetail() {
-				orderDetail({
-					id: this.orderId
-				}).then((res) => {
-					this.order = res.data;
-				});
-			},
-			// 获取选择的文件
-			async select(e) {
-				let list = [].concat(e.tempFiles);
-				for (let i = 0; i < list.length; i++) {
-					const result = await this.uploadFilePromise(list[i].url);
-					this.after.imgList.push(result.data.link);
-				}
-			},
-			uploadFilePromise(url) {
-				return new Promise((resolve, reject) => {
-					uni.uploadFile({
-						url: UPLOAD_URL,
-						filePath: url,
-						header: {
-							"Blade-Auth": this.token
-						},
-						name: 'file',
-						formData: {
-							user: 'test'
-						},
-						success: (res) => {
-							resolve(JSON.parse(res.data));
-						}
-					});
-				});
-			},
-			// 提交表单
-			submitForm(ref) {
-				this.$refs[ref].validate().then(res => {
-					this.after.images = this.after.imgList.join(',');
-					this.after.orderId = this.orderId
-					submitOrderAfter(this.after).then((res) => {
-						if (res.code == 200) {
-							this.$refs.customToast.showToast('申请提交成功');
-							setTimeout(() => {
-								uni.navigateBack({
-									delta: 1
-								})
-							}, 1000)
-						}
-
-
-					})
-				})
-
-			}
-		}
-	}
-</script>
-
-<style scoped>
-	.page-title {
-		font-size: 36rpx;
-		font-weight: bold;
-		text-align: center;
-		padding: 20rpx 0;
-		color: #333;
-	}
-
-	.form-container {
-		padding: 20rpx;
-	}
-
-	.form-item {
-
-		margin-bottom: 20rpx;
-	}
-
-	.form-label {
-		font-size: 28rpx;
-		color: #666;
-		margin-bottom: 10rpx;
-	}
-
-	.textarea-container {
-		position: relative;
-	}
-
-	.form-textarea {
-		border: 1px solid #ccc;
-		border-radius: 5rpx;
-		padding: 10rpx;
-		font-size: 28rpx;
-		height: 150rpx;
-		resize: none;
-	}
-
-	.char-count {
-		position: absolute;
-		bottom: 10rpx;
-		right: 10rpx;
-		font-size: 24rpx;
-		color: #999;
-	}
-
-	.upload-container {
-		margin-top: 10rpx;
-	}
-
-	.submit-button {
-		background-color: #F95B5B;
-		color: #fff;
-		font-size: 32rpx;
-		padding: 5rpx;
-		border-radius: 10rpx;
-		margin-left: 30rpx;
-		margin-right: 30rpx;
-		text-align: center;
-		margin-top: 30rpx;
-	}
-</style>

+ 0 - 439
pages/order/detail.vue

@@ -1,439 +0,0 @@
-<template>
-	<view>
-		<CustomToast ref="customToast" />
-		<view class="region  pad-24 mar-t-10" v-if="order.isAfter==3">
-			<view @tap="checkAfterSaleStatus" class="flex-items-between">
-				<view>
-					<view class="font-red">
-						售后已关闭
-					</view>
-					<view v-if="orderAfter.status==4">
-						<view class="font38 font-bold ">
-							商家审核不通过
-						</view>
-						<view class="font28">
-							原因:{{orderAfter.approveRemark}}
-						</view>
-					</view>
-					<view v-if="orderAfter.status==5">
-						<view class="font38 font-bold ">
-							商家不同意退款
-						</view>
-						<view class="font28">
-							原因:{{orderAfter.approveRemark}}
-						</view>
-					</view>
-					<view v-if="orderAfter.status==6">
-						<view class="font38 font-bold ">
-							您已取消售后
-						</view>
-
-					</view>
-				</view>
-				<uni-icons color="#a8aeb4" type="right" size="20"></uni-icons>
-			</view>
-		</view>
-		<view class="region pad-24 mar-t-10">
-			<view v-if="order.isAfter==0||order.isAfter==3">
-				<!-- 待付款状态 -->
-				<view v-if="order.status==1">
-					<view class="font38 font-bold ">
-						订单待付款,点击立即付款
-					</view>
-				</view>
-				<!-- 待发货状态 -->
-				<view v-if="order.status==2" class="flex-items-plus ">
-					<uni-icons color="#63b43d" type="checkbox-filled" size="30"></uni-icons>
-					<view class="font34 font-bold">
-						买家已付款
-					</view>
-				</view>
-				<!-- 待收货状态 -->
-				<view v-if="order.status==3" class="flex-items-between" @tap="checkLogistics">
-					<view class="font34 font-bold ">
-						订单已发货,点击查看物流
-					</view>
-					<uni-icons color="#a8aeb4" type="right" size="20"></uni-icons>
-				</view>
-				<!-- 已完成状态 -->
-				<view v-if="order.status==4">
-					<!-- 是否已评价  0否,1是-->
-					<view class="flex-items-between ">
-						<view class="flex-items">
-							<uni-icons color="#63b43d" type="checkbox-filled" size="30"></uni-icons>
-							<view class="font34 font-bold">
-								订单已完成
-							</view>
-						</view>
-						<view class="flex-items font-blue font28" @tap="goScore" v-if="order.isEvaluate==0">
-							去评价
-							<uni-icons color="#646464" type="right" size="20"></uni-icons>
-						</view>
-					</view>
-
-				</view>
-
-			</view>
-			<view v-if="order.isAfter==1">
-				<!-- 售后状态 -->
-				<view class="flex-items-between mar-t-10" @tap="checkAfterSaleStatus">
-					<view class="font38 font-bold " v-if="orderAfter.status==0">
-						售后已提交,请等待商家审核
-					</view>
-					<view class="font38 font-bold " v-if="orderAfter.status==1">
-						商家已审核通过,请寄回商品
-					</view>
-					<view class="font38 font-bold " v-if="orderAfter.status==2">
-						商品已寄出,等待商家退款
-					</view>
-					<view>
-						<uni-icons color="#7f8388" type="right" size="20"></uni-icons>
-					</view>
-				</view>
-			</view>
-			<view v-if="order.isAfter==2">
-				<view v-if="orderAfter.status==3">
-					<view class="flex-items-plus">
-						<uni-icons color="#63b43d" type="checkbox-filled" size="30"></uni-icons>
-						<view class="font38 font-bold ">
-							售后完成
-						</view>
-					</view>
-					<view class="text-align mar-t-10">
-						钱款{{orderAfter.afterPrice}}元已退回到你**账户
-					</view>
-				</view>
-			</view>
-		</view>
-		<view class="region pad-24 mar-t-10">
-			<view class="flex-items-between">
-				<view class="flex-items">
-					<uni-icons type="location" size="30"></uni-icons>
-					<view class="font-bold">
-						{{order.province}}{{order.city}}{{order.area}}{{order.address}}
-					</view>
-				</view>
-				<view class="font-blue" @tap="updateAddress"
-					v-if="(order.isAfter==0||order.isAfter==3)&&order.status==2">
-					修改>
-				</view>
-			</view>
-
-			<view class="mar-t-10 mar-l-40">
-				{{order.name}} {{order.mobile}}
-			</view>
-		</view>
-		<view class="gray-line"></view>
-		<view class="pad-24 region">
-			<view class="flex-items " @tap="goProduct">
-				<view>
-					<image class=" mar-l-20 productImg" :src="order.images" mode="cover"></image>
-				</view>
-				<view class="mar-l-20 mar-r-20">
-					<view class="font28 pad-b-10 ">
-						{{order.productName}}
-					</view>
-					<view class="pad-tb-16 font-gray">
-						<text>
-							规格: {{order.skuName}}
-						</text>
-						<text class="mar-l-20">
-							x{{order.count}}
-						</text>
-					</view>
-					<view class="pad-t-10  ">
-						<text class=" font-red font32 font-bold">
-							¥{{order.paymentPrice}}
-						</text>
-					</view>
-					<view class="mar-r-16">
-					</view>
-				</view>
-			</view>
-			<view class="gray-line"></view>
-			<view class="pad-24">
-				<view class="flex-items-between">
-					<text>
-						商品总价
-					</text>
-					<text>
-						{{order.paymentPrice}}
-					</text>
-				</view>
-				<view class="flex-items-between mar-t-40">
-					<text>
-						运费
-					</text>
-					<text>
-						0
-					</text>
-				</view>
-				<view class="flex-items-between mar-t-40">
-					<text>
-						实付款
-					</text>
-					<text>
-						{{order.paymentPrice}}
-					</text>
-				</view>
-				<view class="flex-items-between mar-t-40">
-					<text>
-						订单编号
-					</text>
-					<text>
-						{{order.orderCode}}
-					</text>
-				</view>
-				<!-- <view class="flex-items-between mar-t-40">
-					<text>
-						收货信息
-					</text>
-					<view>
-						<view>
-							{{order.province}}{{order.city}}{{order.area}}{{order.address}}
-						</view>
-						<view class="mar-t-10">
-							{{order.mobile}} {{order.name}}
-						</view>
-
-					</view>
-				</view> -->
-				<view class="flex-items-between mar-t-40">
-					<text>
-						创建时间
-					</text>
-					<text>
-						{{order.createTime}}
-					</text>
-				</view>
-				<view class="flex-items-between mar-t-40">
-					<text>
-						付款时间
-					</text>
-					<text>
-						{{order.payTime}}
-					</text>
-				</view>
-				<view class="flex-items-between mar-t-40" v-if="order.status==3||order.status==4">
-					<text>
-						发货时间
-					</text>
-					<text>
-						{{order.shipTime}}
-					</text>
-				</view>
-				<view class="flex-items-between mar-t-40" v-if="order.status==4">
-					<text>
-						成交时间
-					</text>
-					<text>
-						{{order.confirmTime}}
-					</text>
-				</view>
-			</view>
-		</view>
-		<view class="navigation">
-			<view class="flex-items-between">
-				<view class="mar-l-20" @click="$Router.pushTab({name: 'index'})">
-					<u-icon name="chat" color="#F95B5B" size="22"></u-icon>
-					<view>客服</view>
-				</view>
-				<view>
-					<view v-if="order.isAfter==0||order.isAfter==3">
-						<!-- 待付款状态 -->
-						<view class="flex-items" v-if="order.status === 1">
-							<button class="grayBut mar-r-20" @click="cancelOrder">取消订单</button>
-							<button class="orgBut mar-r-20" @click="payOrder">去付款</button>
-						</view>
-
-						<!-- 待发货状态 -->
-						<view class="flex-items" v-if="order.status === 2">
-							<button class="grayBut mar-r-20" @click="submitAfterSale">申请售后</button>
-							<button class="orgBut mar-r-20" @click="onceAgainOrder">再来一单</button>
-						</view>
-
-						<!-- 待收货状态 -->
-						<view class="flex-items" v-if="order.status === 3">
-							<button class="grayBut mar-r-20" @click="submitAfterSale">申请售后</button>
-							<button class="grayBut mar-r-20" @click="checkLogistics">查看物流</button>
-							<button class="orgBut mar-r-20" @click="confirmReceiptDialog">确认收货</button>
-						</view>
-
-						<!-- 已完成状态 -->
-						<view class="flex-items" v-if="order.status === 4">
-							<button class="grayBut mar-r-20" @click="deleteOrder">删除订单</button>
-							<button class="grayBut mar-r-20" @click="submitAfterSale">申请售后</button>
-							<button class="orgBut mar-r-20" @click="onceAgainOrder">再来一单</button>
-						</view>
-					</view>
-
-					<!-- 售后中状态 -->
-					<view v-if="order.isAfter === 1" class="flex-items">
-						<button class="grayBut mar-r-20" @click="onCancelAfter">取消售后</button>
-						<button class="orgBut mar-r-20" @click="checkAfterSaleStatus">查看售后进度</button>
-					</view>
-
-					<!-- 售后完成状态 -->
-					<view v-if="order.isAfter === 2" class="flex-items">
-						<button class="grayBut mar-r-20" @click="checkAfterSaleStatus">售后详情</button>
-						<button class="orgBut mar-r-20" @click="onceAgainOrder">再来一单</button>
-					</view>
-
-				</view>
-			</view>
-		</view>
-		<uni-popup ref="dialog" type="dialog">
-			<uni-popup-dialog type="warn" cancelText="取消" confirmText="确认" title="提示" content="确认要取消售后?"
-				@confirm="cancel()"></uni-popup-dialog>
-		</uni-popup>
-		<uni-popup ref="dialog" type="dialog">
-			<uni-popup-dialog type="warn" cancelText="取消" confirmText="确认" title="提示" content="确认收货?"
-				@confirm="confirmReceipt()"></uni-popup-dialog>
-		</uni-popup>
-	</view>
-</template>
-
-<script>
-	import {
-		orderDetail,
-		cancelAfter,
-		orderAfterDetail,
-		confirmReceipt
-	} from '../../config/api.js';
-	import CustomToast from '../../components/CustomToast.vue';
-	export default {
-		components: {
-			CustomToast,
-		},
-		data() {
-			return {
-				orderAfter: {},
-				orderId: "",
-				order: {},
-				form: {},
-				isFirstLoad: true, // 新增标志位,用于判断是否是首次加载
-			};
-		},
-		methods: {
-			goScore() {
-				this.$route('/pages/order/score?orderId=' + this.order.id)
-			},
-			updateAddress() {
-				this.$route('/pages/order/update-address?orderId=' + this.order.id)
-			},
-			cancel() {
-				cancelAfter({
-					id: this.orderAfter.id
-				}).then((res) => {
-					if (res.code == 200) {
-						this.$refs.customToast.showToast('操作成功');
-						this.$refs.dialog.close()
-						this.getOrderDetail();
-					}
-				})
-			},
-			onCancelAfter() {
-				this.$refs.dialog.open()
-			},
-			goProduct() {
-				this.$route('/packageShop/pages/detail/index?id=' + this.order.productId)
-			},
-			getOrderDetail() {
-				orderDetail({
-					id: this.orderId
-				}).then((res) => {
-					this.order = res.data;
-					this.getAfterDetail()
-				});
-			},
-			getAfterDetail() {
-				orderAfterDetail({
-					orderId: this.orderId
-				}).then((res) => {
-					this.orderAfter = res.data
-				})
-			},
-			cancelOrder() {
-				console.log('取消订单,订单号:', this.order.orderCode);
-			},
-			payOrder() {
-				// 跳转到支付页面
-				this.$route('/pages/order/payment?orderId=' + this.order.id);
-			},
-			submitAfterSale() {
-				this.$route('/pages/order/after?id=' + this.order.id);
-			},
-
-			checkLogistics() {
-				this.$route('/pages/order/logistics?expressCode=' + this.order.expressCode);
-			},
-			confirmReceiptDialog() {
-				this.$refs.dialog.open()
-				this.form = this.order
-			},
-			confirmReceipt() {
-				confirmReceipt(this.form).then((res) => {
-					if (res.code == 200) {
-						this.$refs.dialog.close()
-						this.$refs.customToast.showToast('操作成功');
-						this.getOrderDetail()
-					}
-				})
-			},
-			deleteOrder() {
-				console.log('删除订单,订单号:', this.order.orderCode);
-			},
-			addToCart() {
-				console.log('加入购物车,订单号:', this.order.orderCode);
-			},
-			onceAgainOrder() {
-				console.log('再来一单,订单号:', this.order.orderCode);
-			},
-			checkAfterSaleStatus() {
-				this.$route('/pages/order/after-progress?id=' + this.orderAfter.id);
-			}
-		},
-		onLoad(op) {
-			this.orderId = op.id;
-			this.getOrderDetail();
-			setTimeout(() => {
-				this.isFirstLoad = false; // 首次加载完成,将标志位设为 false
-			}, 1000)
-		},
-		onShow() {
-			if (!this.isFirstLoad) {
-				// 如果不是首次加载,再调用  方法
-				this.getOrderDetail();
-			}
-		}
-	};
-</script>
-
-<style>
-	.navigation {
-		position: fixed;
-		bottom: 0;
-		width: 100%;
-		border: solid 2rpx #f2f2f2;
-		background-color: #ffffff;
-		padding: 16rpx 0;
-	}
-
-	.grayBut {
-		background-color: #f2f2f2;
-		padding: 5rpx 30rpx 5rpx 30rpx;
-		font-size: 26rpx;
-		color: #1b1b1b;
-	}
-
-	.orgBut {
-		background-color: #F95B5B;
-		padding: 5rpx 30rpx 5rpx 30rpx;
-		font-size: 26rpx;
-		color: #ffffff;
-	}
-
-	button::after {
-		border: none;
-	}
-</style>

+ 0 - 255
pages/order/history-after.vue

@@ -1,255 +0,0 @@
-<template>
-	<view class="bg">
-		<view v-if="orderList.length>0">
-			<view v-for="(item,index) in orderList" :key="index">
-				<view class="info-region">
-					<view>
-						<view class="flex-items flex-sp-between mar-b-20 mar-lr-12">
-							<view>
-								订单号:{{item.orderCode}}
-							</view>
-
-						</view>
-						<view class="flex">
-							<view>
-								<image class=" mar-l-20 img" :src="item.productImg" mode="aspectFit"></image>
-							</view>
-							<view class="mar-l-20 mar-r-20">
-								<view class="font32 pad-b-10 ">
-									{{item.productName}}
-								</view>
-								<view class="pad-t-20 font-gray">
-									规格: {{item.skuName}}
-								</view>
-								<view class="pad-t-10 font-gray">
-									退货类型:
-									{{item.type==1?'退货退款':'仅退款'}}
-								</view>
-								<view class="pad-t-10 font-gray">
-									退货原因:{{reasonRange[item.reason].text}}
-								</view>
-							</view>
-						</view>
-
-
-						<text class="flex-end font-red font28 font-bold mar-r-10">
-							退款金额 ¥{{item.afterPrice}}
-						</text>
-					</view>
-
-
-					<!-- 售后中状态 -->
-					<view class=" flex-items flex-end mar-t-20 mar-r-10">
-						<view class="cancelBtn" @click="checkAfterSaleStatus(item)">
-							查看详情
-						</view>
-					</view>
-				</view>
-			</view>
-		</view>
-		<view v-else>
-			<view class="flex-items-plus">
-				<image src="../../static/images/empty.png" class="empty "></image>
-			</view>
-			<view class="font28 font-gray flex-items-plus">
-				数据为空
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	import {
-		getAfterList
-	} from '../../config/api.js';
-
-	export default {
-		components: {},
-		data() {
-			return {
-				typeRange: [{
-						value: 1,
-						text: "退货退款"
-					},
-					{
-						value: 2,
-						text: "仅退款"
-					},
-				],
-				reasonRange: [{
-						value: 1,
-						text: "不喜欢,效果不好"
-					},
-					{
-						value: 2,
-						text: "不想要了"
-					},
-					{
-						value: 3,
-						text: "材质与商品描述不符"
-					},
-					{
-						value: 4,
-						text: "大小尺寸与商品描述不符"
-					},
-					{
-						value: 5,
-						text: "安装质量问题"
-					},
-					{
-						value: 6,
-						text: "做工瑕疵"
-					},
-					{
-						value: 7,
-						text: "颜色、款式、图案与描述不符"
-					},
-					{
-						value: 8,
-						text: "商品破损或污渍"
-					},
-					{
-						value: 9,
-						text: "其他原因"
-					},
-				],
-				current: 0,
-				orderId: "",
-				orderList: [],
-				params: {
-					current: 1,
-					size: 10,
-					status: "",
-					isAfter: "",
-					type: "",
-					orderId: ""
-
-				}
-			};
-		},
-		onLoad(op) {
-			this.params.orderId = op.orderId
-			this.getList();
-
-		},
-		onPullDownRefresh() {
-			this.orderList = [];
-			this.params.current = 1;
-			this.getList();
-			uni.stopPullDownRefresh();
-		},
-		methods: {
-			goDetail(item) {
-				this.$route('/pages/order/detail?id=' + item.id);
-			},
-			checkAfterSaleStatus(item) {
-				// 实现查看售后进度逻辑
-				this.$route('/pages/order/after-progress?id=' + item.id + "&historyDetail=1");
-			},
-			// 订单列表
-			getList() {
-				getAfterList(this.params).then((res) => {
-					this.orderList = res.data.records;
-				});
-			},
-		}
-	};
-</script>
-
-<style lang="scss">
-	.bg {
-		min-height: 100vh;
-		padding-bottom: 20rpx;
-		// background: linear-gradient(135deg, #f8ffee 0%, #fffff6 100%);
-	}
-
-	.info-region {
-		/* 阴影效果 */
-		box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
-		border-radius: 15rpx;
-		width: 720rpx;
-		height: auto;
-		padding: 15rpx;
-		background-color: white;
-		margin-top: 10rpx;
-		margin-bottom: 20rpx;
-		margin-left: 15rpx;
-	}
-
-	.img {
-		border-radius: 20rpx;
-		width: 200rpx;
-		height: 200rpx;
-	}
-
-	.daifahuo {
-		color: #ffffff;
-		background-color: #e2c696;
-		padding: 4rpx 10rpx 4rpx 10rpx;
-		border-radius: 20rpx;
-	}
-
-	.fukuan {
-		color: #ffffff;
-		background-color: #e29c6d;
-		padding: 4rpx 10rpx 4rpx 10rpx;
-		border-radius: 20rpx;
-	}
-
-	.shouhuo {
-		color: #ffffff;
-		background-color: #e2d972;
-		padding: 4rpx 10rpx 4rpx 10rpx;
-		border-radius: 20rpx;
-	}
-
-	.wancheng {
-		color: #ffffff;
-		background-color: #83e25a;
-		padding: 4rpx 10rpx 4rpx 10rpx;
-		border-radius: 20rpx;
-	}
-
-	.pingjia {
-		color: #ffffff;
-		background-color: #e0e2d9;
-		padding: 4rpx 10rpx 4rpx 10rpx;
-		border-radius: 20rpx;
-	}
-
-	.shouhou {
-		color: #ffffff;
-		background-color: #e23e3e;
-		padding: 4rpx 10rpx 4rpx 10rpx;
-		border-radius: 20rpx;
-	}
-
-	.buyBtn {
-		font-size: 30rpx;
-		width: 160rpx;
-		height: 50rpx;
-		text-align: center;
-		line-height: 50rpx;
-		border-radius: 36rpx;
-		color: #fff;
-		background: #E2A28A;
-	}
-
-	.cancelBtn {
-		font-size: 30rpx;
-		width: 160rpx;
-		height: 50rpx;
-		text-align: center;
-		line-height: 50rpx;
-		border-radius: 36rpx;
-		color: #6a6a6a;
-		background: #e2e2e2;
-	}
-
-	.custom-easyinput {
-		border: none;
-		/* 取消边框 */
-		outline: none;
-		/* 取消聚焦时的轮廓线 */
-	}
-</style>

+ 0 - 427
pages/order/list.vue

@@ -1,427 +0,0 @@
-<template>
-	<view class="bg">
-		<u-sticky>
-			<view class="pad-t-10 ">
-				<view class="flex-items bg-white pad-16" @tap="goSearch">
-					<uni-icons type="search" color="#a8a8a8" size="28"></uni-icons>
-
-					<view v-if="params.orderCode" class="font28">
-						{{params.orderCode}}
-					</view>
-					<view class="font-gray font28" v-else>
-						请输入订单号或商品名称
-					</view>
-				</view>
-			</view>
-			<view class="bg-white">
-				<u-tabs :current="current" lineWidth="30" :list="tabList" @click="tabClick"></u-tabs>
-			</view>
-		</u-sticky>
-		<view v-if="orderList.length>0">
-			<view v-for="(item,index) in orderList" :key="index">
-				<view class="info-region">
-					<view @tap="goDetail(item)">
-						<view class="flex-items flex-sp-between mar-b-20 mar-lr-12">
-							<view>
-								订单号:{{item.orderCode}}
-							</view>
-							<view v-if="item.isAfter==0||item.isAfter==3">
-								<text class="fukuan" v-if="item.status==1">
-									待付款
-								</text>
-								<text class="daifahuo" v-if="item.status==2">
-									待发货
-								</text>
-								<text class="shouhuo" v-if="item.status==3">
-									待收货
-								</text>
-								<text class="pingjia mar-r-10" v-if="item.status==4&&item.isEvaluate==0">
-									待评价
-								</text>
-								<text class="wancheng" v-if="item.status==4">
-									已完成
-								</text>
-							</view>
-							<text class="shouhou" v-if="item.isAfter==1">
-								售后中
-							</text>
-							<text class="pingjia" v-if="item.isAfter==2">
-								售后完成
-							</text>
-
-						</view>
-						<view class="flex">
-							<view>
-								<image class=" mar-l-20 img" :src="item.images" mode="aspectFit"></image>
-							</view>
-							<view class="mar-l-20 mar-r-20">
-								<view class="font32 pad-b-10 ">
-									{{item.productName}}
-								</view>
-								<view class="pad-t-20 font-gray">
-									规格: {{item.skuName}}
-								</view>
-							</view>
-						</view>
-						<text class="flex-end font-red font28 font-bold mar-r-10">
-							实付款 ¥{{item.paymentPrice}}
-						</text>
-					</view>
-					<view>
-						<view v-if="item.isAfter===0||item.isAfter===0">
-							<!-- 待付款状态 -->
-							<view v-if="item.status === 1" class="flex-items flex-end">
-								<view class=" mar-t-20 mar-r-10">
-									<view class="buyBtn" @click="payOrder(item)">
-										去付款
-									</view>
-								</view>
-								<view class=" mar-t-20 mar-r-10">
-									<view class="cancelBtn" @click="cancelOrder(item)">
-										取消订单
-									</view>
-								</view>
-							</view>
-							<!-- 待发货状态 -->
-							<view v-if="item.status === 2" class="flex-items flex-end">
-								<view class=" mar-t-20 mar-r-10">
-									<view class="cancelBtn" @click="after(item)">
-										申请售后
-									</view>
-								</view>
-								<view class=" mar-t-20 mar-r-10" v-if="item.status === 2">
-									<view class="buyBtn" @click="onceOrder(item)">
-										再来一单
-									</view>
-								</view>
-							</view>
-
-							<!-- 待收货状态 -->
-							<view v-if="item.status === 3" class="flex-items flex-end">
-								<view class=" mar-t-20 mar-r-10">
-									<view class="cancelBtn" @click="logistics(item)">
-										查看物流
-									</view>
-								</view>
-								<view class=" mar-t-20 mar-r-10">
-									<view class="cancelBtn" @click="after(item)">
-										申请售后
-									</view>
-								</view>
-								<view class=" mar-t-20 mar-r-10">
-									<view class="buyBtn" @click="confirmReceiptDialog(item)">
-										确认收货
-									</view>
-								</view>
-							</view>
-
-							<!-- 已完成状态 -->
-							<view v-if="item.status === 4" class="flex-items flex-end">
-								<view class=" mar-t-20 mar-r-10">
-									<view class="cancelBtn" @click="goScore(item)" v-if="item.isEvaluate==0">
-										评价
-									</view>
-								</view>
-								<view class=" mar-t-20 mar-r-10">
-									<view class="cancelBtn" @click="after(item)">
-										申请售后
-									</view>
-								</view>
-								<view class=" mar-t-20 mar-r-10">
-									<view class="buyBtn" @click="onceOrder(item)">
-										再来一单
-									</view>
-								</view>
-							</view>
-
-						</view>
-
-						<!-- 售后中状态 -->
-						<view class=" flex-items flex-end mar-t-20 mar-r-10" v-if="item.isAfter === 1">
-							<view class="cancelBtn" @click="checkAfterSaleStatus(item)">
-								售后进度
-							</view>
-						</view>
-						<!-- 售后完成状态 -->
-						<view class=" flex-items flex-end mar-t-20 mar-r-10" v-if="item.isAfter === 2">
-							<view class="cancelBtn" @click="checkAfterSaleStatus(item)">
-								售后详情
-							</view>
-						</view>
-					</view>
-				</view>
-			</view>
-		</view>
-		<view v-else>
-			<view class="flex-items-plus">
-				<image src="../../static/images/empty.png" class="empty "></image>
-			</view>
-			<view class="font28 font-gray flex-items-plus">
-				数据为空
-			</view>
-		</view>
-		<CustomToast ref="customToast" />
-		<uni-popup ref="dialog" type="dialog">
-			<uni-popup-dialog type="warn" cancelText="取消" confirmText="确认" title="提示" content="确认收货?"
-				@confirm="confirmReceipt()"></uni-popup-dialog>
-		</uni-popup>
-	</view>
-</template>
-
-<script>
-	import CustomToast from '../../components/CustomToast.vue';
-	import {
-		getOrderList,
-		confirmReceipt
-	} from '../../config/api.js';
-
-	export default {
-		components: {
-			CustomToast,
-		},
-		data() {
-			return {
-				current: 0,
-				searchKey: "",
-				tabList: [{
-						name: '全部'
-					},
-					{
-						name: '待付款'
-					},
-					{
-						name: '待发货'
-					},
-					{
-						name: '待收货'
-					},
-					{
-						name: '已完成'
-					},
-					{
-						name: '售后'
-					},
-					{
-						name: '待评价'
-					}
-				],
-				orderList: [],
-				isFirstLoad: true, // 新增标志位,用于判断是否是首次加载
-				params: {
-					current: 1,
-					size: 10,
-					status: "",
-					isAfter: "",
-					isEvaluate: "",
-					type: "",
-					orderCode: ""
-				},
-				form: {},
-			};
-		},
-		onLoad(op) {
-			if (op.serachKey) {
-				this.params.orderCode = op.serachKey;
-			}
-			console.log(op);
-			if (op.status && op.status != 0) {
-				this.params.status = op.status;
-				this.current = op.status;
-			}
-			if (op.isAfter) {
-				this.params.isAfter = op.isAfter;
-				this.current = 5;
-			}
-			if (op.isEvaluate) {
-				this.params.isEvaluate = op.isEvaluate;
-				this.current = 6;
-			}
-			this.getList();
-			setTimeout(() => {
-				this.isFirstLoad = false; // 首次加载完成,将标志位设为 false
-			}, 1000)
-		},
-		onPullDownRefresh() {
-			this.reset()
-			uni.stopPullDownRefresh();
-		},
-		onShow() {
-			if (!this.isFirstLoad) {
-				// 如果不是首次加载,再调用 getList 方法
-				this.getList();
-			}
-		},
-		methods: {
-			goScore(item) {
-				this.$route('/pages/order/score?orderId=' + item.id)
-			},
-			reset() {
-				this.orderList = [];
-				this.params.current = 1;
-				this.getList();
-			},
-			after(item) {
-				this.$route('/pages/order/after?id=' + item.id);
-			},
-			logistics(item) {
-				this.$route('/pages/order/logistics?expressCode=' + item.expressCode);
-			},
-			onceOrder(item) {
-				console.log(item, "item");
-				this.$route('/packageShop/pages/detail/index?skuId=' + item.skuId + '&id=' + item.productId);
-			},
-			goSearch() {
-				this.$route('/pages/order/search?type=2');
-			},
-			goDetail(item) {
-				this.$route('/pages/order/detail?id=' + item.id);
-			},
-			tabClick(item) {
-				console.log(item);
-				if (item.index == 6) {
-					this.params.isEvaluate = 0;
-					this.params.isAfter = ""
-					this.params.status = ""
-				} else if (item.index == 5) {
-					this.params.isAfter = 1
-					this.params.status = ""
-					this.params.isEvaluate = ""
-				} else {
-					this.params.status = item.index;
-					this.params.isAfter = ""
-					this.params.isEvaluate = ""
-				}
-				this.getList();
-			},
-			// 订单列表
-			getList() {
-				getOrderList(this.params).then((res) => {
-					this.orderList = res.data.records;
-				});
-			},
-			payOrder(item) {
-				// 跳转到支付页面
-				this.$route('/pages/order/payment?orderId=' + item.id);
-			},
-			cancelOrder(item) {
-				// 实现取消订单逻辑
-				console.log('取消订单,订单号:', item.orderCode);
-			},
-			confirmReceiptDialog(item) {
-				this.$refs.dialog.open()
-				this.form = item
-			},
-			confirmReceipt() {
-				confirmReceipt(this.form).then((res) => {
-					if (res.code == 200) {
-						this.$refs.dialog.close()
-						this.$refs.customToast.showToast('操作成功');
-						this.reset()
-					}
-				})
-			},
-			checkAfterSaleStatus(item) {
-				// 实现查看售后进度逻辑
-				this.$route('/pages/order/after-progress?orderId=' + item.id);
-			}
-		}
-	};
-</script>
-
-<style lang="scss">
-	.bg {
-		min-height: 100vh;
-		padding-bottom: 20rpx;
-		// background: linear-gradient(135deg, #f8ffee 0%, #fffff6 100%);
-	}
-
-	.info-region {
-		/* 阴影效果 */
-		box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
-		border-radius: 15rpx;
-		width: 720rpx;
-		height: auto;
-		padding: 15rpx;
-		background-color: white;
-		margin-top: 10rpx;
-		margin-bottom: 20rpx;
-		margin-left: 15rpx;
-	}
-
-	.img {
-		border-radius: 20rpx;
-		width: 200rpx;
-		height: 200rpx;
-	}
-
-	.daifahuo {
-		color: #ffffff;
-		background-color: #e2c696;
-		padding: 4rpx 10rpx 4rpx 10rpx;
-		border-radius: 20rpx;
-	}
-
-	.fukuan {
-		color: #ffffff;
-		background-color: #e29c6d;
-		padding: 4rpx 10rpx 4rpx 10rpx;
-		border-radius: 20rpx;
-	}
-
-	.shouhuo {
-		color: #ffffff;
-		background-color: #e2d972;
-		padding: 4rpx 10rpx 4rpx 10rpx;
-		border-radius: 20rpx;
-	}
-
-	.wancheng {
-		color: #ffffff;
-		background-color: #83e25a;
-		padding: 4rpx 10rpx 4rpx 10rpx;
-		border-radius: 20rpx;
-	}
-
-	.pingjia {
-		color: #ffffff;
-		background-color: #e0e2d9;
-		padding: 4rpx 10rpx 4rpx 10rpx;
-		border-radius: 20rpx;
-	}
-
-	.shouhou {
-		color: #ffffff;
-		background-color: #e23e3e;
-		padding: 4rpx 10rpx 4rpx 10rpx;
-		border-radius: 20rpx;
-	}
-
-	.buyBtn {
-		font-size: 30rpx;
-		width: 160rpx;
-		height: 50rpx;
-		text-align: center;
-		line-height: 50rpx;
-		border-radius: 36rpx;
-		color: #fff;
-		background: #E2A28A;
-	}
-
-	.cancelBtn {
-		font-size: 30rpx;
-		width: 160rpx;
-		height: 50rpx;
-		text-align: center;
-		line-height: 50rpx;
-		border-radius: 36rpx;
-		color: #6a6a6a;
-		background: #e2e2e2;
-	}
-
-	.custom-easyinput {
-		border: none;
-		/* 取消边框 */
-		outline: none;
-		/* 取消聚焦时的轮廓线 */
-	}
-</style>

+ 0 - 109
pages/order/logistics.vue

@@ -1,109 +0,0 @@
-<template>
-	<view class="container">
-		<!-- 物流头部信息 -->
-		<view class="logistics-header">
-
-			<view class="flex-items-between">
-				<view class="font28">物流公司: {{ logisticsCompany }}</view>
-				<view>
-					<text class="font28 mar-r-10">单号: {{ logisticsNumber }}</text>
-					<text class="copy-btn" @tap="copyContent">复制</text>
-				</view>
-
-
-			</view>
-		</view>
-		<!-- 物流轨迹列表 -->
-		<view class="logistics-trace">
-			<uni-steps :options="logisticsList" direction="column" :active="0"></uni-steps>
-		</view>
-
-
-	</view>
-</template>
-
-<script>
-	export default {
-		data() {
-			return {
-				logisticsCompany: '顺丰速运',
-				logisticsNumber: '',
-				logisticsList: [{
-						desc: '2025-03-25 10:00:00',
-						title: '【深圳转运中心】已发出,下一站【北京转运中心】'
-					},
-					{
-						desc: '2025-03-24 15:30:00',
-						title: '【深圳站点】已收件'
-					},
-					{
-						desc: '2025-03-24 13:00:00',
-						title: '卖家已发货'
-					}
-				]
-			};
-		},
-		methods: {
-			copyContent() {
-				uni.setClipboardData({
-					data: this.logisticsNumber,
-					success: () => {
-						uni.showToast({
-							title: '复制成功',
-							icon: 'none'
-						});
-					}
-				});
-			}
-		},
-		onLoad(op) {
-			this.logisticsNumber = op.expressCode
-		}
-	};
-</script>
-
-<style scoped>
-	.container {
-		padding: 20rpx;
-		background-color: #f8f8f8;
-	}
-
-	.logistics-header {
-		background-color: #ffffff;
-		border-radius: 10rpx;
-		padding: 32rpx;
-		box-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.1);
-		margin-bottom: 20rpx;
-	}
-
-	.company-logo {
-		width: 80rpx;
-		height: 80rpx;
-		margin-right: 20rpx;
-	}
-
-	.company-logo image {
-		width: 100%;
-		height: 100%;
-	}
-
-
-	.logistics-trace {
-		min-height: calc(100vh - 20rpx - 32rpx - 20rpx - 20rpx);
-		/* 减去容器内边距、头部内边距、头部底部外边距和自身内边距 */
-		background-color: #ffffff;
-		border-radius: 10rpx;
-		padding: 20rpx;
-		box-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.1);
-	}
-
-	.copy-btn {
-		background-color: #ffffff;
-		border: 1px solid #999999;
-		color: #333333;
-		padding: 5rpx 10rpx;
-		/* 减少按钮的内边距 */
-		border-radius: 8rpx;
-		font-size: 28rpx;
-	}
-</style>

+ 0 - 359
pages/order/payment.vue

@@ -1,359 +0,0 @@
-<template>
-	<view class="payment-container">
-		<!-- 收货地址 -->
-		<view class="address-section">
-			<view class="address-content" v-if="orderInfo">
-				<view class="contact-info">
-					<text class="name">{{orderInfo.name}}</text>
-					<text class="phone">{{orderInfo.mobile}}</text>
-				</view>
-				<view class="address-detail">
-					{{orderInfo.province}}{{orderInfo.city}}{{orderInfo.area}}{{orderInfo.address}}
-				</view>
-			</view>
-		</view>
-
-		<!-- 商品信息 -->
-		<view class="goods-section">
-			<view class="goods-title">商品信息</view>
-			<view class="goods-item" v-for="(item, index) in orderDetails" :key="index">
-				<image :src="item.productImage" mode="aspectFill" class="goods-img"></image>
-				<view class="goods-info">
-					<view class="goods-name">{{item.productName}}</view>
-					<view class="goods-spec">{{item.skuName}}</view>
-					<view class="price-num">
-						<text class="price">¥{{item.unitPrice}}</text>
-						<text class="num">x{{item.quantity}}</text>
-					</view>
-				</view>
-			</view>
-		</view>
-
-		<!-- 支付方式 -->
-		<view class="pay-section">
-			<view class="pay-title">支付方式</view>
-			<view class="pay-method">
-				<view class="method-item">
-					<image src="/static/images/wxpay.png" mode="aspectFit" class="pay-icon"></image>
-					<text>微信支付</text>
-				</view>
-			</view>
-		</view>
-
-		<!-- 订单金额信息 -->
-		<view class="amount-section">
-			<view class="amount-item">
-				<text>商品总价</text>
-				<text>¥{{orderInfo.paymentPrice}}</text>
-			</view>
-			<view class="amount-item total">
-				<text>实付金额</text>
-				<text class="total-price">¥{{orderInfo.paymentPrice}}</text>
-			</view>
-		</view>
-
-		<!-- 底部支付按钮 -->
-		<view class="footer">
-			<view class="total-section">
-				<text>实付金额:</text>
-				<text class="total-price">¥{{orderInfo.paymentPrice}}</text>
-			</view>
-			<view class="pay-btn" @click="handlePay">
-				立即支付
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	import {
-		getOrderPayDetail,
-		getWxPayParams
-	} from '@/config/api.js';
-
-	export default {
-		data() {
-			return {
-				orderId: '',
-				orderInfo: null,
-				orderDetails: []
-			}
-		},
-		onLoad(options) {
-			if (options.orderId) {
-				this.orderId = options.orderId;
-				this.getOrderDetail();
-			} else {
-				uni.showToast({
-					title: '订单参数错误',
-					icon: 'none'
-				});
-				setTimeout(() => {
-					uni.navigateBack();
-				}, 1500);
-			}
-		},
-		methods: {
-			// 获取订单详情
-			async getOrderDetail() {
-				try {
-					uni.showLoading({
-						title: '加载中...'
-					});
-					
-					const res = await getOrderPayDetail(this.orderId);
-					if (res.code === 200 && res.data) {
-						this.orderInfo = res.data.orderInfo;
-						this.orderDetails = res.data.orderDetails;
-						
-						// 如果订单状态不是待付款,提示并返回
-						if (this.orderInfo.status !== 1) {
-							uni.showToast({
-								title: '订单状态已改变',
-								icon: 'none'
-							});
-							setTimeout(() => {
-								uni.navigateBack();
-							}, 1500);
-						}
-					} else {
-						uni.showToast({
-							title: res.msg || '获取订单信息失败',
-							icon: 'none'
-						});
-					}
-				} catch (e) {
-					console.error('获取订单详情失败:', e);
-					uni.showToast({
-						title: '获取订单信息失败',
-						icon: 'none'
-					});
-				} finally {
-					uni.hideLoading();
-				}
-			},
-			
-			// 处理支付
-			async handlePay() {
-				if (!this.orderInfo) {
-					return uni.showToast({
-						title: '订单信息错误',
-						icon: 'none'
-					});
-				}
-				
-				try {
-					// 调用后端获取支付参数
-					const payRes = await getWxPayParams(this.orderId);
-					if (payRes.code !== 200 || !payRes.data) {
-						throw new Error(payRes.msg || '获取支付参数失败');
-					}
-					
-					// 调起微信支付
-					uni.requestPayment({
-						provider: 'wxpay',
-						timeStamp: payRes.data.timestamp,
-						nonceStr: payRes.data.noncestr,
-						package: payRes.data.package,
-						signType: payRes.data.signType,
-						paySign: payRes.data.sign,
-						success: (res) => {
-							uni.showToast({
-								title: '支付成功',
-								icon: 'success'
-							});
-							// 支付成功后跳转到订单列表
-							setTimeout(() => {
-								uni.redirectTo({
-									url: '/pages/order/list?status=2'
-								});
-							}, 1500);
-						},
-						fail: (err) => {
-							console.error('支付失败:', err);
-							uni.showToast({
-								title: '支付失败',
-								icon: 'none'
-							});
-						}
-					});
-				} catch (e) {
-					console.error('支付异常:', e);
-					uni.showToast({
-						title: e.message || '支付失败',
-						icon: 'none'
-					});
-				}
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-	.payment-container {
-		min-height: 100vh;
-		background-color: #f8f8f8;
-		padding-bottom: 120rpx;
-	}
-	
-	.address-section {
-		background-color: #fff;
-		padding: 30rpx;
-		margin-bottom: 20rpx;
-		
-		.address-content {
-			.contact-info {
-				margin-bottom: 10rpx;
-				
-				.name {
-					margin-right: 20rpx;
-					font-weight: bold;
-				}
-				
-				.phone {
-					color: #666;
-				}
-			}
-			
-			.address-detail {
-				color: #333;
-				font-size: 28rpx;
-			}
-		}
-	}
-	
-	.goods-section {
-		background-color: #fff;
-		padding: 30rpx;
-		margin-bottom: 20rpx;
-		
-		.goods-title {
-			font-size: 32rpx;
-			font-weight: bold;
-			margin-bottom: 20rpx;
-		}
-		
-		.goods-item {
-			display: flex;
-			margin-bottom: 20rpx;
-			
-			.goods-img {
-				width: 160rpx;
-				height: 160rpx;
-				margin-right: 20rpx;
-				border-radius: 8rpx;
-			}
-			
-			.goods-info {
-				flex: 1;
-				
-				.goods-name {
-					font-size: 28rpx;
-					margin-bottom: 10rpx;
-				}
-				
-				.goods-spec {
-					font-size: 24rpx;
-					color: #666;
-					margin-bottom: 10rpx;
-				}
-				
-				.price-num {
-					display: flex;
-					justify-content: space-between;
-					
-					.price {
-						color: #ff4d4f;
-						font-weight: bold;
-					}
-					
-					.num {
-						color: #666;
-					}
-				}
-			}
-		}
-	}
-	
-	.pay-section {
-		background-color: #fff;
-		padding: 30rpx;
-		margin-bottom: 20rpx;
-		
-		.pay-title {
-			font-size: 32rpx;
-			font-weight: bold;
-			margin-bottom: 20rpx;
-		}
-		
-		.method-item {
-			display: flex;
-			align-items: center;
-			
-			.pay-icon {
-				width: 40rpx;
-				height: 40rpx;
-				margin-right: 20rpx;
-			}
-		}
-	}
-	
-	.amount-section {
-		background-color: #fff;
-		padding: 30rpx;
-		
-		.amount-item {
-			display: flex;
-			justify-content: space-between;
-			margin-bottom: 20rpx;
-			font-size: 28rpx;
-			
-			&.total {
-				margin-top: 20rpx;
-				padding-top: 20rpx;
-				border-top: 1px solid #eee;
-				
-				.total-price {
-					color: #ff4d4f;
-					font-weight: bold;
-					font-size: 32rpx;
-				}
-			}
-		}
-	}
-	
-	.footer {
-		position: fixed;
-		bottom: 0;
-		left: 0;
-		right: 0;
-		height: 100rpx;
-		background-color: #fff;
-		display: flex;
-		align-items: center;
-		padding: 0 30rpx;
-		box-shadow: 0 -2rpx 10rpx rgba(0,0,0,0.05);
-		
-		.total-section {
-			flex: 1;
-			
-			.total-price {
-				color: #ff4d4f;
-				font-weight: bold;
-				font-size: 36rpx;
-			}
-		}
-		
-		.pay-btn {
-			width: 240rpx;
-			height: 80rpx;
-			background-color: #ff4d4f;
-			color: #fff;
-			display: flex;
-			align-items: center;
-			justify-content: center;
-			border-radius: 40rpx;
-			font-size: 32rpx;
-		}
-	}
-</style> 

+ 0 - 217
pages/order/score.vue

@@ -1,217 +0,0 @@
-<template>
-	<view>
-		<!-- 表单区域 -->
-		<view class="form-container region mar-t-10">
-			<view class="form-item">
-				<view class="form-label">评分</view>
-				<uni-rate size="30" v-model="score.score" />
-			</view>
-
-			<view class="form-item">
-				<view class="form-label">评价内容</view>
-				<view class="textarea-container">
-					<textarea style="width: 100%;" v-model="score.content" placeholder="请详细描述申请说明(选填)"
-						class="form-textarea" :maxlength="maxLength"></textarea>
-					<view class="char-count">
-						您还可以输入{{ remainingChars }} 字
-					</view>
-				</view>
-			</view>
-
-			<!-- 上传凭证 -->
-			<view class="form-item">
-				<view class="form-label">上传图片/视频(可选)</view>
-				<view class=" flex-items">
-					<view>
-						<uni-file-picker @delete="delFile" v-model="imageValue" fileMediatype="image" mode="grid"
-							@select="select">
-							<view class="videoUpload flex-items-plus">
-								<view class="text-align">
-									<uni-icons type="image" size="30"></uni-icons>
-									<view>
-										添加图片
-									</view>
-								</view>
-							</view>
-						</uni-file-picker>
-					</view>
-
-					<view>
-						<uni-file-picker @delete="delFile" v-model="imageValue" fileMediatype="video" mode="grid"
-							@select="select">
-							<view class="videoUpload flex-items-plus">
-								<view class="text-align">
-									<uni-icons type="videocam" size="30"></uni-icons>
-									<view>
-										添加短视频
-									</view>
-								</view>
-							</view>
-						</uni-file-picker>
-					</view>
-				</view>
-			</view>
-		</view>
-
-		<!-- 提交按钮 -->
-		<button class="submit-button" @click="submitForm('customForm')">提交评价</button>
-	</view>
-</template>
-
-<script>
-	import {
-		UPLOAD_URL
-	} from '../../common/config.js';
-	import {
-		saveScore
-	} from '../../config/api.js';
-
-	export default {
-
-		data() {
-			return {
-				score: {
-					imgList: [],
-					score: 5,
-					content: ""
-				},
-				token: '',
-				imageValue: [],
-				fileList: [],
-				images: [],
-				orderId: "",
-				maxLength: 200, // 最大字数
-			};
-		},
-		computed: {
-			// 计算剩余字数
-			remainingChars() {
-				return this.maxLength - this.score.content.length;
-			}
-		},
-		onLoad(op) {
-			this.orderId = op.orderId;
-			this.token = uni.getStorageSync('access_token');
-		},
-		methods: {
-			delFile(e) {
-				this.score.imgList.splice(e.index, 1); // 删除对应 index 的附件
-			},
-			// 获取选择的文件
-			async select(e) {
-				console.log(e)
-				let list = [].concat(e.tempFiles);
-				// for (let i = 0; i < list.length; i++) {
-				// 	const result = await this.uploadFilePromise(list[i].url);
-				// 	this.score.imgList.push(result.data.link);
-				// }
-			},
-			uploadFilePromise(url) {
-				return new Promise((resolve, reject) => {
-					uni.uploadFile({
-						url: UPLOAD_URL,
-						filePath: url,
-						header: {
-							"Blade-Auth": this.token
-						},
-						name: 'file',
-						formData: {
-							user: 'test'
-						},
-						success: (res) => {
-							resolve(JSON.parse(res.data));
-						}
-					});
-				});
-			},
-			// 提交表单
-			submitForm() {
-				this.score.images = this.score.imgList.join(',');
-				this.score.orderId = this.orderId
-				saveScore(this.score).then((res) => {
-					if (res.code == 200) {
-						uni.showToast({
-							title: '评价成功',
-							icon: 'success'
-						});
-						setTimeout(() => {
-							uni.navigateBack({
-								delta: 1
-							})
-						}, 1000)
-					}
-				})
-
-			}
-		}
-	}
-</script>
-
-<style scoped>
-	.page-title {
-		font-size: 36rpx;
-		font-weight: bold;
-		text-align: center;
-		padding: 20rpx 0;
-		color: #333;
-	}
-
-	.form-container {
-		padding: 20rpx;
-	}
-
-	.form-item {
-
-		margin-bottom: 20rpx;
-	}
-
-	.form-label {
-		font-size: 28rpx;
-		color: #666;
-		margin-bottom: 10rpx;
-	}
-
-	.textarea-container {
-		position: relative;
-	}
-
-	.form-textarea {
-		border: 1px solid #ccc;
-		border-radius: 5rpx;
-		padding: 10rpx;
-		font-size: 28rpx;
-		height: 150rpx;
-		resize: none;
-	}
-
-	.char-count {
-		position: absolute;
-		bottom: 10rpx;
-		right: 10rpx;
-		font-size: 24rpx;
-		color: #999;
-	}
-
-	.upload-container {
-		margin-top: 10rpx;
-	}
-
-	.submit-button {
-		background-color: #F95B5B;
-		color: #fff;
-		font-size: 32rpx;
-		padding: 5rpx;
-		border-radius: 10rpx;
-		margin-left: 30rpx;
-		margin-right: 30rpx;
-		text-align: center;
-		margin-top: 30rpx;
-	}
-
-	.videoUpload {
-		border: 1rpx solid #999;
-
-		height: 200rpx;
-		width: 200rpx;
-	}
-</style>

+ 0 - 166
pages/order/search.vue

@@ -1,166 +0,0 @@
-<template>
-	<view :style="{ paddingTop: statusBarHeight + 'px' }">
-		<view class="flex-items pad-t-20">
-			<view class="mar-r-20">
-				<uni-icons @tap="back" type="left" color="#545454" size="30"></uni-icons>
-			</view>
-			<view class="search-box">
-				<input confirm-type="search" class="search-input" focus type="text" placeholder="请输入搜索内容"
-					v-model="historySearch.name" />
-				<uni-icons @tap="clear" v-if="historySearch.name" type="closeempty" color="#545454" size="20"
-					class="mar-r-20"></uni-icons>
-				<button class="search-button" @click="onSearchClick">搜索</button>
-			</view>
-		</view>
-		<view class="flex-items-between pad-32">
-			<view class="font28 font-bold">
-				历史搜索
-			</view>
-			<uni-icons @tap="delSearch" type="trash" size="26"></uni-icons>
-		</view>
-		<view class="pad-lr-32">
-			<view class="search-container">
-				<view v-for="(item, index) in historySearchList" :key="index" class="search-item">
-					<view class="searchBg mar-b-16" @tap="onHistorySearch(item.name)">
-						{{ item.name }}
-					</view>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	import {
-		delHistorySearch,
-		submitHistorySearch,
-		getHistorySearchList
-	} from '../../config/api.js';
-	import {
-		MAIN_COLOR
-	} from '../../common/config.js'
-
-	export default {
-		data() {
-			return {
-				bgColor: 'transparent',
-				statusBarHeight: 0, // 状态栏高度
-				historySearch: {
-					name: "",
-					type: ""
-				},
-				historySearchList: [],
-			}
-		},
-		onLoad(op) {
-			console.log(op.searchKey)
-			this.historySearch.type = op.type
-			if (op.searchKey) {
-				console.log(op.searchKey)
-				this.historySearch.name = op.searchKey
-			}
-			// 获取设备信息,包括状态栏高度
-			const systemInfo = uni.getSystemInfoSync();
-			this.statusBarHeight = systemInfo.statusBarHeight;
-			this.getSearch();
-		},
-		methods: {
-			clear() {
-				this.historySearch.name = ""
-			},
-			onHistorySearch(name) {
-				this.historySearch.name = name
-				if (this.historySearch.type == 2) {
-					this.$route('/pages/order/list?serachKey=' + this.historySearch.name)
-				}
-				if (this.historySearch.type == 1) {
-					this.$route('/pages/shop/product-type-list?serachKey=' + this.historySearch.name)
-				}
-			},
-			back() {
-				uni.navigateBack({
-					delta: 1
-				})
-			},
-			getSearch() {
-				getHistorySearchList({
-					type: this.historySearch.type
-				}).then((res) => {
-					this.historySearchList = res.data
-				})
-			},
-			delSearch() {
-				delHistorySearch().then((res) => {
-					this.getSearch()
-				})
-			},
-			onSearchClick() {
-				console.log(this.historySearch.type)
-				// 执行搜索操作
-				submitHistorySearch(this.historySearch)
-				if (this.historySearch.type == 2) {
-					this.$route('/pages/order/list?serachKey=' + this.historySearch.name)
-				}
-				if (this.historySearch.type == 1) {
-					this.$route('/pages/shop/product-type-list?serachKey=' + this.historySearch.name)
-				}
-			}
-		}
-	}
-</script>
-
-<style>
-	.search-container {
-		display: flex;
-		flex-wrap: wrap;
-	}
-
-	.search-item {
-		margin-right: 10rpx;
-		margin-bottom: 10rpx;
-	}
-
-	.searchBg {
-		background-color: #d8d8d8;
-		padding: 8rpx 12rpx;
-		border-radius: 10rpx;
-		font-size: 14px;
-		color: #333;
-	}
-
-	.search-box {
-		display: flex;
-		align-items: center;
-		border-radius: 20rpx;
-		background-color: #f0f0f0;
-		padding: 10rpx 20rpx;
-		width: 100%;
-		/* Ensure it takes full width */
-	}
-
-	.search-input {
-		flex: 1;
-		border: none;
-		outline: none;
-		font-size: 14px;
-		color: #999;
-		background-color: #f0f0f0;
-		border-radius: 20rpx;
-		padding: 8rpx 12rpx;
-		width: 100%;
-	}
-
-	.search-button {
-		background-color: #f27c22;
-		/* 橘色背景 */
-		color: white;
-		border: none;
-		padding: 0rpx 30rpx 0rpx 30rpx;
-		border-radius: 20rpx;
-		margin-left: 10rpx;
-		font-size: 14px;
-		cursor: pointer;
-		white-space: nowrap;
-		/* Prevent text overflow */
-	}
-</style>

+ 0 - 145
pages/order/update-address.vue

@@ -1,145 +0,0 @@
-<template>
-	<view>
-		<CustomToast ref="customToast" />
-		<view class="region mar-t-10 pad-24">
-			<view class="font36 font-bold mar-b-20">
-				原地址
-			</view>
-			<view>
-				<view class="font-bold">
-					{{order.province}}{{order.city}}{{order.area}}{{order.address}}
-				</view>
-				<view class="mar-t-10 ">
-					{{order.name}} {{order.mobile}}
-				</view>
-			</view>
-		</view>
-		<view class="region mar-t-10 pad-24 height-vh">
-			<view class="font36 font-bold mar-b-20">
-				选择新的收货地址
-			</view>
-			<view>
-				<view class="mar-t-30">
-					<view v-if="list.length>0">
-						<view v-for="(item,index) in list" :key="index" class=" mar-b-50 ">
-							<view class="flex-items flex-sp-between" @tap="customRadioChange(item)">
-								<view class="width90 flex-items flex-sp-between">
-									<view>
-										<view>
-											<text class="font28">
-												{{item.province}}{{item.city}}{{item.area}}{{item.address}}</text>
-										</view>
-										<view>
-											<text class="font28">{{item.name}} {{item.mobile}}</text>
-										</view>
-									</view>
-								</view>
-								<view class="width10">
-									<radio-group>
-										<radio :value="item.id" :checked="templateSelect === item.id" />
-									</radio-group>
-								</view>
-							</view>
-							<view class="line"></view>
-						</view>
-					</view>
-					<view v-else>
-						<view class="flex-items-plus">
-							<image src="../../static/images/empty.png" class="empty "></image>
-						</view>
-						<view class="font28 font-gray flex-items-plus">
-							暂无数据
-						</view>
-					</view>
-				</view>
-			</view>
-		</view>
-		<!-- 提交按钮 -->
-		<button class="submit-button" @click="submit()">确认修改</button>
-	</view>
-</template>
-
-<script>
-	import {
-		addressList,
-		orderDetail,
-		updateAddress
-	} from '../../config/api.js';
-	import CustomToast from '../../components/CustomToast.vue';
-	export default {
-		components: {
-			CustomToast,
-		},
-		data() {
-			return {
-				templateSelect: "",
-				orderId: "",
-				order: {},
-				list: []
-			}
-		},
-		methods: {
-			submit() {
-				updateAddress(this.order).then((res) => {
-					if (res.code == 200) {
-						this.$refs.customToast.showToast('操作成功');
-						setTimeout(() => {
-							uni.navigateBack({
-								delta: 1
-							})
-						}, 1000)
-					}
-				})
-			},
-			getOrderDetail() {
-				orderDetail({
-					id: this.orderId
-				}).then((res) => {
-					this.order = res.data;
-				});
-			},
-			getAddressList() {
-				addressList().then((res) => {
-					this.list = res.data
-				})
-			},
-			customRadioChange(item) {
-				this.templateSelect = item.id;
-				this.order.province = item.province
-				this.order.city = item.city
-				this.order.area = item.area
-				this.order.address = item.address
-				this.order.name = item.name
-				this.order.mobile = item.mobile
-			},
-		},
-		onLoad(op) {
-			this.orderId = op.orderId;
-			this.getOrderDetail();
-			this.getAddressList()
-		},
-	}
-</script>
-
-<style>
-	.navigation {
-
-		border: solid 2rpx #f2f2f2;
-		background-color: #ffffff;
-		padding: 16rpx 0;
-	}
-
-	.submit-button {
-		position: fixed;
-		bottom: 0;
-		width: 100%;
-		background-color: #F95B5B;
-		color: #fff;
-		font-size: 32rpx;
-		padding: 5rpx;
-		border-radius: 10rpx;
-		margin-right: 30rpx;
-		text-align: center;
-		margin-top: 30rpx;
-	}
-</style>

+ 0 - 505
pages/search/index.vue

@@ -1,505 +0,0 @@
-<template>
-	<view class="search-page">
-		<!-- 状态栏占位 -->
-		<view class="status-bar"></view>
-		
-		<!-- 搜索框 -->
-		<view class="search-header">
-			<view class="search-input-wrap">
-				<input class="search-input" type="text" v-model="keyword" placeholder="搜索商品" confirm-type="search" @confirm="handleSearch" />
-				<text class="clear-btn" v-if="keyword" @tap="clearKeyword">×</text>
-			</view>
-			<text class="cancel-btn" @tap="goBack">取消</text>
-		</view>
-
-		<!-- 搜索历史和热门搜索 -->
-		<view v-if="!showProductList" class="search-content">
-			<!-- 搜索历史 -->
-			<view class="search-history" v-if="historyList.length > 0">
-				<view class="section-header">
-					<text class="section-title">历史记录</text>
-					<text class="clear-history" @tap="clearHistory">清空历史</text>
-				</view>
-				<view class="tag-list">
-					<view class="tag-item" v-for="(item, index) in historyList" :key="index" @tap="handleTagClick(item)">
-						{{item}}
-					</view>
-				</view>
-			</view>
-
-			<!-- 热门搜索 -->
-			<view class="hot-search">
-				<view class="section-header">
-					<text class="section-title">大家都在搜</text>
-				</view>
-				<view class="tag-list">
-					<view class="tag-item" v-for="(item, index) in hotList" :key="index" @tap="handleTagClick(item)">
-						{{item}}
-					</view>
-				</view>
-			</view>
-		</view>
-
-		<!-- 商品列表 -->
-		<view v-else class="product-section">
-			<!-- 排序栏 -->
-			<view class="sort-bar">
-				<view class="sort-item" :class="{ active: !params.sort }" @tap="handleSort(0)">
-					综合
-				</view>
-				<view class="sort-item" :class="{ active: params.sort === 1 }" @tap="handleSort(1)">
-					价格
-					<text class="sort-arrow" :class="{ up: params.sort === 1 && params.arrow === 1, down: params.sort === 1 && params.arrow === 2 }">
-						⇅
-					</text>
-				</view>
-				<view class="sort-item" :class="{ active: params.sort === 2 }" @tap="handleSort(2)">
-					销量
-					<text class="sort-arrow" :class="{ up: params.sort === 2 && params.arrow === 1, down: params.sort === 2 && params.arrow === 2 }">
-						⇅
-					</text>
-				</view>
-			</view>
-
-			<!-- 商品列表 -->
-			<scroll-view 
-				class="product-list" 
-				scroll-y 
-				@scrolltolower="loadMore"
-				:refresher-enabled="true"
-				:refresher-triggered="isRefreshing"
-				@refresherrefresh="onRefresh"
-			>
-				<view class="product-item" v-for="item in productList" :key="item.id" @tap="goDetail(item.id)">
-					<image class="product-image" :src="item.images" mode="aspectFill"></image>
-					<view class="product-info">
-						<view class="product-name">{{item.name}}</view>
-						<view class="product-price">
-							<text class="current-price">¥{{item.price}}</text>
-							<text class="original-price" v-if="item.originalPrice">¥{{item.originalPrice}}</text>
-						</view>
-						<view class="product-meta">
-							<text class="sales">已售{{item.salesTotal}}件</text>
-							<text class="rating" v-if="item.productAvg">评分:{{item.productAvg}}</text>
-						</view>
-					</view>
-				</view>
-				
-				<!-- 加载状态 -->
-				<view class="loading-more" v-if="productList.length > 0">
-					{{ hasMore ? '加载中...' : '没有更多了' }}
-				</view>
-				<view class="empty-state" v-if="productList.length === 0 && !isLoading">
-					暂无相关商品
-				</view>
-			</scroll-view>
-		</view>
-	</view>
-</template>
-
-<script>
-import { productSearch } from '@/config/api.js';
-
-export default {
-	data() {
-		return {
-			keyword: '',
-			historyList: [],
-			hotList: ['鸡蛋', '大蒜', '蔬菜', '王守义十三香', '西瓜', '包菜'],
-			showProductList: false,
-			productList: [],
-			params: {
-				current: 1,
-				size: 10,
-				name: '',
-				sort: 0,
-				arrow: 1
-			},
-			isLoading: false,
-			hasMore: true,
-			isRefreshing: false
-		}
-	},
-	onLoad(options) {
-		// 从本地存储获取搜索历史
-		const history = uni.getStorageSync('searchHistory');
-		if (history) {
-			this.historyList = JSON.parse(history);
-		}
-		
-		// 如果有关键词参数,直接搜索
-		if (options.keyword) {
-			this.keyword = decodeURIComponent(options.keyword);
-			this.handleSearch();
-		}
-	},
-	methods: {
-		// 处理搜索
-		handleSearch() {
-			if (!this.keyword.trim()) return;
-			
-			// 保存到历史记录
-			this.saveHistory(this.keyword);
-			
-			// 重置参数并搜索
-			this.params.current = 1;
-			this.params.name = this.keyword;
-			this.productList = [];
-			this.hasMore = true;
-			this.showProductList = true;
-			this.searchProducts();
-		},
-		
-		// 搜索商品
-		async searchProducts() {
-			if (this.isLoading || !this.hasMore) return;
-			
-			this.isLoading = true;
-			uni.showLoading({
-				title: '加载中...'
-			});
-			
-			try {
-				const res = await productSearch(this.params);
-				
-				if (res.code === 200) {
-					const { records, total } = res.data;
-					
-					// 过滤上架商品
-					const validProducts = records.filter(item => item.shelfLife === 1);
-					
-					if (this.params.current === 1) {
-						this.productList = validProducts;
-					} else {
-						this.productList = [...this.productList, ...validProducts];
-					}
-					
-					this.hasMore = this.productList.length < total;
-					
-					if (this.hasMore) {
-						this.params.current++;
-					}
-				} else {
-					uni.showToast({
-						title: res.msg || '获取商品列表失败',
-						icon: 'none'
-					});
-				}
-			} catch (err) {
-				console.error('搜索商品失败:', err);
-				uni.showToast({
-					title: '搜索失败,请重试',
-					icon: 'none'
-				});
-			} finally {
-				uni.hideLoading();
-				this.isLoading = false;
-				this.isRefreshing = false;
-			}
-		},
-		
-		// 处理排序
-		handleSort(sortType) {
-			if (sortType === 0) {
-				this.params.sort = 0;
-				this.params.arrow = 1;
-			} else {
-				if (this.params.sort === sortType) {
-					this.params.arrow = this.params.arrow === 1 ? 2 : 1;
-				} else {
-					this.params.sort = sortType;
-					this.params.arrow = 1;
-				}
-			}
-			
-			this.params.current = 1;
-			this.productList = [];
-			this.hasMore = true;
-			this.searchProducts();
-		},
-		
-		// 加载更多
-		loadMore() {
-			if (!this.isLoading && this.hasMore) {
-				this.searchProducts();
-			}
-		},
-		
-		// 下拉刷新
-		async onRefresh() {
-			this.isRefreshing = true;
-			this.params.current = 1;
-			this.hasMore = true;
-			await this.searchProducts();
-		},
-		
-		// 保存搜索历史
-		saveHistory(keyword) {
-			let history = this.historyList;
-			// 去重
-			const index = history.indexOf(keyword);
-			if (index !== -1) {
-				history.splice(index, 1);
-			}
-			// 最多保存10条
-			if (history.length >= 10) {
-				history.pop();
-			}
-			history.unshift(keyword);
-			this.historyList = history;
-			uni.setStorageSync('searchHistory', JSON.stringify(history));
-		},
-		
-		// 清空历史记录
-		clearHistory() {
-			uni.showModal({
-				title: '提示',
-				content: '确定要清空搜索历史吗?',
-				success: (res) => {
-					if (res.confirm) {
-						this.historyList = [];
-						uni.removeStorageSync('searchHistory');
-					}
-				}
-			});
-		},
-		
-		// 点击标签
-		handleTagClick(keyword) {
-			this.keyword = keyword;
-			this.handleSearch();
-		},
-		
-		// 清除输入
-		clearKeyword() {
-			this.keyword = '';
-			if (this.showProductList) {
-				this.showProductList = false;
-				this.productList = [];
-			}
-		},
-		
-		// 返回
-		goBack() {
-			if (this.showProductList) {
-				this.showProductList = false;
-				this.productList = [];
-				this.keyword = '';
-			} else {
-				uni.navigateBack();
-			}
-		},
-		
-		// 跳转到商品详情
-		goDetail(id) {
-			uni.navigateTo({
-				url: '/packageShop/pages/detail/index?id=' + id
-			});
-		}
-	}
-}
-</script>
-
-<style lang="scss" scoped>
-	.search-page {
-		min-height: 100vh;
-		background: #fff;
-		padding-bottom: env(safe-area-inset-bottom);
-	}
-
-	.status-bar {
-		height: var(--status-bar-height);
-		width: 100%;
-		background: #fff;
-	}
-
-	.search-header {
-		display: flex;
-		align-items: center;
-		padding: 20rpx 30rpx;
-		background: #fff;
-		position: sticky;
-		top: var(--status-bar-height);
-		z-index: 100;
-		border-bottom: 1rpx solid #f5f5f5;
-	}
-
-	.search-content {
-		padding-top: 20rpx;
-	}
-
-	.search-input-wrap {
-		flex: 1;
-		height: 72rpx;
-		background: #F5F5F5;
-		border-radius: 36rpx;
-		display: flex;
-		align-items: center;
-		padding: 0 30rpx;
-		margin-right: 20rpx;
-		position: relative;
-	}
-
-	.search-input {
-		flex: 1;
-		height: 100%;
-		font-size: 28rpx;
-	}
-
-	.clear-btn {
-		position: absolute;
-		right: 20rpx;
-		font-size: 40rpx;
-		color: #999;
-		padding: 10rpx;
-	}
-
-	.cancel-btn {
-		font-size: 28rpx;
-		color: #333;
-	}
-
-	.section-header {
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-		margin: 40rpx 0 20rpx;
-		padding: 0 30rpx;
-	}
-
-	.section-title {
-		font-size: 28rpx;
-		color: #333;
-		font-weight: bold;
-	}
-
-	.clear-history {
-		font-size: 24rpx;
-		color: #999;
-	}
-
-	.tag-list {
-		display: flex;
-		flex-wrap: wrap;
-		padding: 0 30rpx;
-	}
-
-	.tag-item {
-		padding: 12rpx 30rpx;
-		background: #F5F5F5;
-		border-radius: 30rpx;
-		font-size: 24rpx;
-		color: #666;
-		margin: 0 20rpx 20rpx 0;
-	}
-
-	.product-section {
-		display: flex;
-		flex-direction: column;
-		height: calc(100vh - var(--status-bar-height) - 112rpx);
-	}
-
-	.sort-bar {
-		display: flex;
-		align-items: center;
-		height: 88rpx;
-		background: #fff;
-		border-bottom: 1rpx solid #f5f5f5;
-	}
-
-	.sort-item {
-		flex: 1;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		font-size: 28rpx;
-		color: #666;
-		position: relative;
-		
-		&.active {
-			color: #D93025;
-		}
-		
-		.sort-arrow {
-			margin-left: 4rpx;
-			font-size: 24rpx;
-			
-			&.up {
-				transform: scaleY(-1);
-			}
-			
-			&.down {
-				transform: scaleY(1);
-			}
-		}
-	}
-
-	.product-list {
-		flex: 1;
-		background: #f5f5f5;
-	}
-
-	.product-item {
-		margin: 20rpx;
-		background: #fff;
-		border-radius: 12rpx;
-		overflow: hidden;
-	}
-
-	.product-image {
-		width: 100%;
-		height: 360rpx;
-	}
-
-	.product-info {
-		padding: 20rpx;
-	}
-
-	.product-name {
-		font-size: 28rpx;
-		color: #333;
-		margin-bottom: 16rpx;
-	}
-
-	.product-price {
-		margin-bottom: 12rpx;
-		
-		.current-price {
-			font-size: 32rpx;
-			color: #D93025;
-			font-weight: bold;
-		}
-		
-		.original-price {
-			font-size: 24rpx;
-			color: #999;
-			text-decoration: line-through;
-			margin-left: 12rpx;
-		}
-	}
-
-	.product-meta {
-		display: flex;
-		align-items: center;
-		font-size: 24rpx;
-		color: #999;
-		
-		.rating {
-			margin-left: 20rpx;
-		}
-	}
-
-	.loading-more {
-		text-align: center;
-		font-size: 24rpx;
-		color: #999;
-		padding: 20rpx 0;
-	}
-
-	.empty-state {
-		text-align: center;
-		font-size: 28rpx;
-		color: #999;
-		padding: 100rpx 0;
-	}
-</style> 

+ 0 - 958
pages/shop/product-type-list.vue

@@ -1,958 +0,0 @@
-<template>
-	<view class="container">
-		<view class="page-container">
-
-
-			<!-- 主要内容区域 -->
-			<view class="main-content">
-				<!-- 左侧分类栏 -->
-				<view class="category-list">
-					<view class="category-item" v-for="(category, index) in categories" :key="index"
-						:class="{ 'active': activeCategoryId === category.id }" @click="switchCategory(category.id)">
-						<view class="category-icon">
-							<image v-if="category.image" class="category-image" :src="category.image" mode="aspectFill">
-							</image>
-							<text v-else class="icon-symbol">☸</text>
-						</view>
-						<text class="category-name">{{ category.name }}</text>
-						<view class="active-indicator" v-if="activeCategoryId === category.id"></view>
-						<view class="category-glow" v-if="activeCategoryId === category.id"></view>
-					</view>
-				</view>
-
-				<!-- 右侧商品列表 -->
-				<view class="product-list">
-					<!-- 筛选栏 -->
-					<view class="filter-bar">
-						<view class="filter-item" :class="{ 'active': activeFilter === 'all' }"
-							@click="switchFilter('all')">
-							<text class="filter-text">全部商品</text>
-						</view>
-						<view class="filter-item" :class="{ 'active': activeFilter.includes('price') }"
-							@click="toggleSort('price')">
-							<text class="filter-text">价格排序</text>
-							<view class="arrow-container">
-								<text class="arrow up" :class="{ 'active': activeFilter === 'price_asc' }">▲</text>
-								<text class="arrow down" :class="{ 'active': activeFilter === 'price_desc' }">▼</text>
-							</view>
-						</view>
-						<view class="filter-item" :class="{ 'active': activeFilter.includes('sales') }"
-							@click="toggleSort('sales')">
-							<text class="filter-text">销量排序</text>
-							<view class="arrow-container">
-								<text class="arrow up" :class="{ 'active': activeFilter === 'sales_asc' }">▲</text>
-								<text class="arrow down" :class="{ 'active': activeFilter === 'sales_desc' }">▼</text>
-							</view>
-						</view>
-					</view>
-
-					<scroll-view :scroll-top="scrollTop" scroll-y="true" class="scroll-Y" @scrolltolower="lower"
-						:lower-threshold="100">
-						<view v-if="goodsList.length > 0" class="goods-container">
-							<view v-for="(product, index) in goodsList" :key="index" class="product-card"
-								@click="detail(product.id)">
-								<view class="product-image-container">
-									<image class="product-image" :src="product.images" mode="aspectFill"></image>
-									<view class="product-badge" v-if="product.salesTotal > 100">热销</view>
-								</view>
-								<view class="product-content">
-									<view class="product-name">{{ product.name }}</view>
-									<view class="product-meta">
-										<view class="meta-info">
-											<view class="rating" v-if="product.productAvg">
-												<text class="rating-star">★</text>
-												<text class="rating-value">{{ product.productAvg }}</text>
-											</view>
-										</view>
-										<view class="sales-info">
-											<text class="sales-count">已售 {{ product.salesTotal }} 件</text>
-										</view>
-									</view>
-									<view class="product-footer">
-										<view class="price-section">
-											<text class="price-symbol">¥</text>
-											<text class="price-value">{{ product.price }}</text>
-											<text class="original-price"
-												v-if="product.originalPrice">¥{{ product.originalPrice }}</text>
-										</view>
-										<view class="buy-btn" @click.stop="detail(product.id)">
-											<text class="buy-text">立即购买</text>
-										</view>
-									</view>
-								</view>
-							</view>
-						</view>
-						<view v-else class="empty-state">
-							<view class="empty-icon">☸</view>
-							<text class="empty-text">暂无商品</text>
-							<text class="empty-subtext">敬请期待更多精美唐卡</text>
-						</view>
-						<!-- 加载状态 -->
-						<view v-if="isLoading" class="loading-tip">
-							<view class="loading-icon">☸</view>
-							<text class="loading-text">加载中...</text>
-						</view>
-						<view v-if="!isLoading && noMoreData" class="no-more-tip">
-							<view class="no-more-decoration">
-								<view class="decoration-line"></view>
-								<text class="decoration-text">—— 已加载全部商品 ——</text>
-								<view class="decoration-line"></view>
-							</view>
-						</view>
-
-						<!-- 测试按钮 - 用于手动触发分页 -->
-						<view v-if="!noMoreData && !isLoading" class="load-more-btn" @click="loadGoods">
-							<text class="load-more-text">点击加载更多</text>
-						</view>
-					</scroll-view>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	import {
-		productList,
-		categoriesList
-	} from '@/config/api.js';
-	import {
-		shareImg
-	} from '@/common/config.js'
-	export default {
-		data() {
-			return {
-				scrollTop: 0,
-				goodsList: [],
-				isLoading: false, // 是否正在加载
-				noMoreData: false, // 是否没有更多数据
-				params: {
-					current: 1,
-					size: 5,
-					categoriesId: "",
-					name: "",
-					sort: "",
-					arrow: "",
-				}, //请求参数
-				categories: [],
-				activeCategoryId: '',
-				activeFilter: 'all'
-			};
-		},
-		// 微信小程序分享配置
-		onShareAppMessage() {
-			return {
-				title: `邀请您加入宏匠唐卡`,
-				path: `/pages/index/indexNew`,
-				imageUrl: shareImg // 分享图片,需要添加
-			}
-		},
-		onShareTimeline(res) {
-			let that = this;
-			let shareInfo = store.state.vuex_shareInfo;
-			let query = shareInfo.query;
-			//携带当前页面资源ID参数
-			let currentPage = getCurrentPages()[getCurrentPages().length - 1];
-			let options = currentPage.options;
-			if (JSON.stringify(options) != '{}' && options.id) {
-				query += `&id=${options.id}`;
-			}
-
-			return {
-				title: shareInfo.title,
-				query: query,
-				imageUrl: shareImg,
-				success(res) {
-					uni.showToast({
-						title: '分享成功'
-					})
-				},
-				fail(res) {
-					uni.showToast({
-						title: '分享失败',
-						icon: 'none'
-					})
-				},
-				complete() {}
-			}
-		},
-		onLoad() {
-			this.init()
-		},
-		methods: {
-			detail(id) {
-				uni.navigateTo({
-					url: '/packageShop/pages/detail/index?id=' + id
-				});
-			},
-			lower() {
-				console.log('触发滚动到底部:', {
-					isLoading: this.isLoading,
-					noMoreData: this.noMoreData,
-					currentPage: this.params.current,
-					goodsCount: this.goodsList.length
-				});
-
-				if (!this.isLoading && !this.noMoreData) {
-					console.log('开始加载下一页数据');
-					this.loadGoods();
-				} else {
-					console.log('无法加载数据,原因:', {
-						isLoading: this.isLoading ? '正在加载中' : null,
-						noMoreData: this.noMoreData ? '没有更多数据' : null
-					});
-				}
-			},
-			async loadGoods() {
-				this.isLoading = true;
-				try {
-					this.params.categoriesId = this.activeCategoryId;
-					console.log('请求参数:', this.params);
-
-					const response = await productList(this.params);
-					console.log('API响应:', response.data);
-
-					uni.hideLoading();
-
-					// 过滤并处理商品数据
-					const newGoods = response.data.records.filter(item => item.shelfLife === 1).map(item => ({
-						...item,
-						productAvg: item.productAvg || 5.0
-					}));
-
-					console.log('新商品数据:', {
-						newGoodsLength: newGoods.length,
-						pageSize: this.params.size,
-						currentPage: this.params.current,
-						totalRecords: response.data.total,
-						totalPages: response.data.pages
-					});
-
-					// 使用后端返回的分页信息判断是否还有更多数据
-					const totalPages = response.data.pages || 0;
-					const currentPage = this.params.current;
-
-					if (newGoods.length === 0 && this.params.current === 1) {
-						// 第一页没有数据,显示空状态
-						this.goodsList = [];
-						this.noMoreData = true;
-						console.log('第一页无数据');
-					} else if (newGoods.length === 0 && this.params.current > 1) {
-						// 后续页面没有数据,说明已经加载完
-						this.noMoreData = true;
-						console.log('数据加载完毕');
-					} else {
-						// 有数据,进行拼接或替换
-						if (this.params.current === 1) {
-							this.goodsList = newGoods;
-							console.log('替换商品列表');
-						} else {
-							this.goodsList = [...this.goodsList, ...newGoods];
-							console.log('追加商品列表');
-						}
-						this.params.current++;
-
-						// 根据总页数判断是否还有更多数据
-						this.noMoreData = currentPage >= totalPages;
-
-						console.log('状态更新:', {
-							currentPage: this.params.current,
-							totalPages: totalPages,
-							totalGoods: this.goodsList.length,
-							noMoreData: this.noMoreData
-						});
-					}
-				} catch (error) {
-					console.error('加载商品数据失败:', error);
-					uni.showToast({
-						title: '加载失败,请重试',
-						icon: 'none'
-					});
-				} finally {
-					this.isLoading = false;
-				}
-			},
-			init() {
-				this.getCategories()
-			},
-			getCategories() {
-				console.log("12")
-				categoriesList().then((res) => {
-					this.categories = res.data
-					this.activeCategoryId = this.categories[0].id
-					this.loadGoods()
-				})
-			},
-			switchCategory(categoryId) {
-				this.activeCategoryId = categoryId;
-				this.resetPagination();
-				this.loadGoods();
-			},
-
-			switchFilter(filter) {
-				this.activeFilter = filter;
-				this.resetParams();
-				this.loadGoods();
-			},
-			resetParams() {
-				this.params.arrow = "";
-				this.params.current = 1;
-				this.params.sort = "";
-				this.resetPagination();
-			},
-			resetPagination() {
-				this.goodsList = [];
-				this.params.current = 1;
-				this.noMoreData = false;
-				this.isLoading = false;
-			},
-			toggleSort(filter) {
-				this.resetParams();
-				if (this.activeFilter === `${filter}_asc`) {
-					if (filter == "price") {
-						this.params.sort = 1;
-					} else {
-						this.params.sort = 2;
-					}
-					this.params.arrow = 2;
-					this.activeFilter = `${filter}_desc`;
-				} else {
-					this.activeFilter = `${filter}_asc`;
-					if (filter == "price") {
-						this.params.sort = 1;
-					} else {
-						this.params.sort = 2;
-					}
-					this.params.arrow = 1;
-				}
-				this.loadGoods();
-			}
-		}
-	};
-</script>
-
-<style lang="scss" scoped>
-	.container {
-		min-height: 100vh;
-		background: linear-gradient(135deg, #F5E6D3 0%, #E2D1C3 100%);
-		position: relative;
-	}
-
-	.container::before {
-		content: '';
-		position: fixed;
-		top: 0;
-		left: 0;
-		right: 0;
-		bottom: 0;
-		background-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><defs><pattern id="tibetan" width="20" height="20" patternUnits="userSpaceOnUse"><path d="M0 0h20v20H0z" fill="none"/><path d="M10 2a2 2 0 110 4 2 2 0 010-4zm8 8a2 2 0 110 4 2 2 0 010-4zm-16 0a2 2 0 110 4 2 2 0 010-4zm8 8a2 2 0 110 4 2 2 0 010-4z" fill="%23A67C52" opacity="0.1"/></pattern></defs><rect width="100" height="100" fill="url(%23tibetan)"/></svg>');
-		opacity: 0.15;
-		pointer-events: none;
-		z-index: 0;
-	}
-
-	.page-container {
-		position: relative;
-		z-index: 1;
-		height: 100vh;
-		display: flex;
-		flex-direction: column;
-	}
-
-	/* 页面标题 */
-	.page-header {
-		background: linear-gradient(135deg, #8B4513 0%, #654321 100%);
-		padding: 40rpx 30rpx 30rpx;
-		position: relative;
-		overflow: hidden;
-	}
-
-	.page-header::before {
-		content: '';
-		position: absolute;
-		top: 0;
-		left: 0;
-		right: 0;
-		bottom: 0;
-		background: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><defs><pattern id="endless-knot" width="50" height="50" patternUnits="userSpaceOnUse"><path d="M25 10 L40 10 L40 40 L10 40 L10 25 L25 25 Z" fill="none" stroke="rgba(255,255,255,0.1)" stroke-width="2"/></pattern></defs><rect width="100" height="100" fill="url(%23endless-knot)"/></svg>');
-		opacity: 0.2;
-	}
-
-	.header-content {
-		position: relative;
-		z-index: 1;
-		text-align: center;
-	}
-
-	.title-section {
-		margin-bottom: 16rpx;
-	}
-
-	.page-title {
-		font-size: 48rpx;
-		font-weight: 700;
-		color: #FFD700;
-		text-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.3);
-		letter-spacing: 4rpx;
-	}
-
-	.title-decoration {
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		margin-top: 16rpx;
-		gap: 20rpx;
-	}
-
-	.decoration-line {
-		width: 60rpx;
-		height: 2rpx;
-		background: linear-gradient(90deg, #FFD700, #FFA500);
-	}
-
-	.decoration-symbol {
-		color: #FFD700;
-		font-size: 28rpx;
-		opacity: 0.8;
-	}
-
-	.subtitle {
-		font-size: 26rpx;
-		color: rgba(255, 215, 0, 0.8);
-		font-weight: 300;
-		letter-spacing: 1rpx;
-	}
-
-	/* 主要内容区域 */
-	.main-content {
-		flex: 1;
-		display: flex;
-		background: rgba(255, 248, 231, 0.3);
-		height: calc(100vh - 80rpx);
-		/* 确保有固定高度 */
-		overflow: hidden;
-	}
-
-	/* 左侧分类栏 */
-	.category-list {
-		width: 200rpx;
-		background: rgba(255, 248, 231, 0.95);
-		border-right: 2rpx solid rgba(139, 69, 19, 0.1);
-		backdrop-filter: blur(10rpx);
-	}
-
-	.category-item {
-		display: flex;
-		flex-direction: column;
-		align-items: center;
-		padding: 30rpx 20rpx;
-		position: relative;
-		transition: all 0.3s ease;
-		border-bottom: 1rpx solid rgba(139, 69, 19, 0.05);
-
-		&:active {
-			transform: scale(0.95);
-		}
-
-		&.active {
-			background: linear-gradient(135deg, rgba(139, 69, 19, 0.1) 0%, rgba(101, 67, 33, 0.1) 100%);
-			border-right: 4rpx solid #8B4513;
-
-			.category-name {
-				color: #8B4513;
-				font-weight: 600;
-			}
-
-			.category-icon {
-				background: linear-gradient(135deg, #8B4513 0%, #654321 100%);
-				border-color: #FFD700;
-				box-shadow: 0 4rpx 12rpx rgba(139, 69, 19, 0.3);
-			}
-
-			.category-image {
-				transform: scale(1.1);
-				filter: brightness(1.1) contrast(1.1);
-			}
-
-			.icon-symbol {
-				color: #FFD700;
-			}
-		}
-	}
-
-	.category-icon {
-		width: 80rpx;
-		height: 80rpx;
-		background: rgba(139, 69, 19, 0.1);
-		border: 2rpx solid rgba(139, 69, 19, 0.2);
-		border-radius: 50%;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		margin-bottom: 16rpx;
-		transition: all 0.3s ease;
-		position: relative;
-		overflow: hidden;
-	}
-
-	.category-image {
-		width: 100%;
-		height: 100%;
-		border-radius: 50%;
-		transition: all 0.3s ease;
-	}
-
-	.icon-symbol {
-		font-size: 32rpx;
-		color: #8B4513;
-		transition: all 0.3s ease;
-	}
-
-	.category-name {
-		font-size: 26rpx;
-		color: #A67C52;
-		font-weight: 500;
-		text-align: center;
-		line-height: 1.3;
-		transition: all 0.3s ease;
-	}
-
-	.active-indicator {
-		position: absolute;
-		right: 0;
-		top: 50%;
-		transform: translateY(-50%);
-		width: 6rpx;
-		height: 40rpx;
-		background: linear-gradient(135deg, #8B4513 0%, #654321 100%);
-		border-radius: 4rpx 0 0 4rpx;
-		box-shadow: 0 0 8rpx rgba(139, 69, 19, 0.4);
-	}
-
-	.category-glow {
-		position: absolute;
-		top: 0;
-		left: 0;
-		right: 0;
-		bottom: 0;
-		background: linear-gradient(135deg, rgba(255, 215, 0, 0.1) 0%, rgba(255, 165, 0, 0.1) 100%);
-		border-radius: 12rpx;
-		pointer-events: none;
-		animation: glowPulse 2s ease-in-out infinite;
-	}
-
-	@keyframes glowPulse {
-		0% {
-			opacity: 0.3;
-			transform: scale(1);
-		}
-
-		50% {
-			opacity: 0.6;
-			transform: scale(1.02);
-		}
-
-		100% {
-			opacity: 0.3;
-			transform: scale(1);
-		}
-	}
-
-	/* 右侧商品列表 */
-	.product-list {
-		flex: 1;
-		display: flex;
-		flex-direction: column;
-		background: rgba(255, 248, 231, 0.2);
-		height: 100%;
-		overflow: hidden;
-	}
-
-	/* 筛选栏 */
-	.filter-bar {
-		padding: 24rpx 20rpx;
-		background: rgba(255, 248, 231, 0.95);
-		display: flex;
-		justify-content: space-around;
-		border-bottom: 2rpx solid rgba(139, 69, 19, 0.1);
-		backdrop-filter: blur(10rpx);
-	}
-
-	.filter-item {
-		display: flex;
-		align-items: center;
-		padding: 12rpx 20rpx;
-		border-radius: 20rpx;
-		transition: all 0.3s ease;
-		position: relative;
-
-		&:active {
-			transform: scale(0.95);
-		}
-
-		&.active {
-			background: linear-gradient(135deg, #8B4513 0%, #654321 100%);
-			box-shadow: 0 4rpx 12rpx rgba(139, 69, 19, 0.3);
-
-			.filter-text {
-				color: #FFD700;
-				font-weight: 600;
-			}
-
-			.arrow {
-				color: #FFD700;
-			}
-		}
-	}
-
-	.filter-text {
-		font-size: 26rpx;
-		color: #8B4513;
-		font-weight: 500;
-		transition: all 0.3s ease;
-	}
-
-	.arrow-container {
-		display: flex;
-		flex-direction: column;
-		margin-left: 8rpx;
-	}
-
-	.arrow {
-		font-size: 18rpx;
-		line-height: 1;
-		color: #A67C52;
-		transition: all 0.3s ease;
-
-		&.active {
-			color: #FFD700;
-		}
-	}
-
-	/* 商品列表 */
-	.scroll-Y {
-		flex: 1;
-		height: calc(100% - 100rpx);
-		/* 减去筛选栏高度 */
-		overflow-y: auto;
-	}
-
-	.goods-container {
-		padding: 20rpx;
-	}
-
-	.product-card {
-		background: rgba(255, 248, 231, 0.95);
-		border: 1rpx solid rgba(139, 69, 19, 0.1);
-		border-radius: 20rpx;
-		margin-bottom: 20rpx;
-		overflow: hidden;
-		box-shadow: 0 8rpx 32rpx rgba(139, 69, 19, 0.08);
-		backdrop-filter: blur(10rpx);
-		transition: all 0.3s ease;
-		position: relative;
-	}
-
-	.product-card::before {
-		content: '';
-		position: absolute;
-		top: 10rpx;
-		left: 10rpx;
-		right: 10rpx;
-		bottom: 10rpx;
-		border: 1rpx solid rgba(139, 69, 19, 0.1);
-		border-radius: 16rpx;
-		pointer-events: none;
-		z-index: 1;
-	}
-
-	.product-card:active {
-		transform: translateY(-4rpx);
-		box-shadow: 0 12rpx 40rpx rgba(139, 69, 19, 0.12);
-	}
-
-	.product-image-container {
-		position: relative;
-		width: 100%;
-		height: 400rpx;
-		overflow: hidden;
-	}
-
-	.product-image {
-		width: 100%;
-		height: 100%;
-		transition: transform 0.3s ease;
-	}
-
-	.product-card:active .product-image {
-		transform: scale(1.05);
-	}
-
-	.product-badge {
-		position: absolute;
-		top: 16rpx;
-		right: 16rpx;
-		background: linear-gradient(135deg, #8B4513 0%, #654321 100%);
-		border: 1rpx solid #FFD700;
-		color: #FFD700;
-		font-size: 22rpx;
-		padding: 6rpx 12rpx;
-		border-radius: 12rpx;
-		font-weight: 500;
-		z-index: 2;
-	}
-
-	.product-content {
-		padding: 24rpx;
-		position: relative;
-		z-index: 2;
-	}
-
-	.product-name {
-		font-size: 30rpx;
-		color: #8B4513;
-		font-weight: 600;
-		line-height: 1.4;
-		margin-bottom: 12rpx;
-		display: -webkit-box;
-		-webkit-line-clamp: 2;
-		-webkit-box-orient: vertical;
-		overflow: hidden;
-	}
-
-	.product-desc {
-		font-size: 24rpx;
-		color: #A67C52;
-		margin-bottom: 16rpx;
-		display: -webkit-box;
-		-webkit-line-clamp: 2;
-		-webkit-box-orient: vertical;
-		overflow: hidden;
-		line-height: 1.4;
-	}
-
-	.product-meta {
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-		margin-bottom: 20rpx;
-	}
-
-	.meta-info {
-		display: flex;
-		align-items: center;
-		gap: 16rpx;
-	}
-
-	.update-time {
-		font-size: 22rpx;
-		color: #999;
-	}
-
-	.rating {
-		display: flex;
-		align-items: center;
-		gap: 4rpx;
-	}
-
-	.rating-star {
-		color: #FFD700;
-		font-size: 20rpx;
-	}
-
-	.rating-value {
-		font-size: 22rpx;
-		color: #8B4513;
-		font-weight: 500;
-	}
-
-	.sales-info {
-		text-align: right;
-	}
-
-	.sales-count {
-		font-size: 22rpx;
-		color: #999;
-	}
-
-	.product-footer {
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-	}
-
-	.price-section {
-		display: flex;
-		align-items: baseline;
-		gap: 4rpx;
-	}
-
-	.price-symbol {
-		font-size: 24rpx;
-		color: #8B4513;
-		font-weight: 600;
-	}
-
-	.price-value {
-		font-size: 36rpx;
-		color: #8B4513;
-		font-weight: 700;
-	}
-
-	.original-price {
-		font-size: 24rpx;
-		color: #999;
-		text-decoration: line-through;
-		margin-left: 8rpx;
-	}
-
-	.buy-btn {
-		background: linear-gradient(135deg, #8B4513 0%, #654321 100%);
-		padding: 12rpx 24rpx;
-		border-radius: 20rpx;
-		border: 1rpx solid #FFD700;
-		box-shadow: 0 4rpx 12rpx rgba(139, 69, 19, 0.3);
-		transition: all 0.3s ease;
-	}
-
-	.buy-btn:active {
-		transform: scale(0.95);
-		box-shadow: 0 2rpx 8rpx rgba(139, 69, 19, 0.4);
-	}
-
-	.buy-text {
-		font-size: 24rpx;
-		color: #FFD700;
-		font-weight: 500;
-	}
-
-	/* 空状态 */
-	.empty-state {
-		display: flex;
-		flex-direction: column;
-		align-items: center;
-		padding: 120rpx 40rpx;
-		text-align: center;
-	}
-
-	.empty-icon {
-		font-size: 120rpx;
-		color: rgba(139, 69, 19, 0.3);
-		margin-bottom: 24rpx;
-	}
-
-	.empty-text {
-		font-size: 32rpx;
-		color: #8B4513;
-		font-weight: 600;
-		margin-bottom: 12rpx;
-	}
-
-	.empty-subtext {
-		font-size: 26rpx;
-		color: #A67C52;
-	}
-
-	/* 加载状态 */
-	.loading-tip {
-		display: flex;
-		flex-direction: column;
-		align-items: center;
-		padding: 60rpx 40rpx;
-	}
-
-	.loading-icon {
-		font-size: 48rpx;
-		color: #8B4513;
-		margin-bottom: 16rpx;
-		animation: rotate 2s linear infinite;
-	}
-
-	@keyframes rotate {
-		from {
-			transform: rotate(0deg);
-		}
-
-		to {
-			transform: rotate(360deg);
-		}
-	}
-
-	.loading-text {
-		font-size: 26rpx;
-		color: #8B4513;
-	}
-
-	.no-more-tip {
-		padding: 40rpx;
-	}
-
-	.no-more-decoration {
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		gap: 20rpx;
-	}
-
-	.decoration-line {
-		width: 80rpx;
-		height: 1rpx;
-		background: linear-gradient(90deg, transparent, #8B4513, transparent);
-	}
-
-	.decoration-text {
-		font-size: 24rpx;
-		color: #A67C52;
-	}
-
-	/* 手动加载更多按钮 */
-	.load-more-btn {
-		padding: 30rpx;
-		text-align: center;
-		background: linear-gradient(135deg, #8B4513 0%, #654321 100%);
-		margin: 20rpx;
-		border-radius: 20rpx;
-		border: 1rpx solid #FFD700;
-		transition: all 0.3s ease;
-	}
-
-	.load-more-btn:active {
-		transform: scale(0.98);
-		opacity: 0.8;
-	}
-
-	.load-more-text {
-		color: #FFD700;
-		font-size: 28rpx;
-		font-weight: 600;
-	}
-
-	/* 响应式设计 */
-	@media (max-width: 750rpx) {
-		.category-list {
-			width: 160rpx;
-		}
-
-		.category-item {
-			padding: 24rpx 16rpx;
-		}
-
-		.category-icon {
-			width: 60rpx;
-			height: 60rpx;
-		}
-
-		.category-image {
-			width: 100%;
-			height: 100%;
-		}
-
-		.icon-symbol {
-			font-size: 24rpx;
-		}
-
-		.category-name {
-			font-size: 22rpx;
-		}
-	}
-</style>

+ 119 - 1685
pages/tabbar/my.vue

@@ -1,123 +1,49 @@
 <template>
-	<view class="bg-index-image">
-		<!-- 头像模块 -->
-		<view class="profile-section">
-			<view class="user-login flex-items" @click="goLogin">
-				<view class="profile-content">
-					<view class="avatar-container">
-						<!-- 显示头像的图片元素 -->
-						<image class="avatar" :src="user.avatar||'../../static/images/avatar.png'" mode="aspectFill">
-						</image>
-						<!-- 美化后的代理徽章 -->
-						<view v-if="isLogin && user.level > 0" class="member-badge" :class="'level-' + user.level">
-							<view class="badge-content">
-								<!-- S级代理 - 单颗钻石 -->
-								<text v-if="user.level == '1'" class="member-icon diamond">💎</text>
-								<!-- SS级代理 - 双钻石 -->
-								<view v-else-if="user.level == '2'" class="member-icons">
-									<text class="member-icon diamond">💎</text>
-									<text class="member-icon diamond">💎</text>
-								</view>
-								<!-- SSS级代理 - 皇冠 -->
-								<text v-else-if="user.level == '3'" class="member-icon crown">👑</text>
-							</view>
-						</view>
+	<view class="page-container">
+		<!-- 背景图片 -->
+
+		<image class="bg-image " src="@/static/images/bg.png" mode="aspectFill"></image>
+		<!-- 内容区域 -->
+		<view class="content-area">
+			<!-- 访客信息表单 -->
+			<view class="visitor-form" @tap="goLogin">
+				<view v-if="isLogin">
+					<view class="form-item">
+						<text class="label">姓名</text>
+						<text class="value">{{user.account || '-'}}</text>
 					</view>
-					<view class="user-info">
-						<view v-if="isLogin">
-							<view class="username font44 font-def font-bold omit-text">
-								{{user.account}}
-							</view>
-							<view class="member-level-container">
-								<!-- 会员等级显示 -->
-								<view class="member-level" :class="'level-text-' + user.level">
-									<text v-if="user.level == '0'">普通会员</text>
-									<text v-else-if="user.level == '1'">S级会员</text>
-									<text v-else-if="user.level == '2'">SS级会员</text>
-									<text v-else-if="user.level == '3'">SSS级会员</text>
-								</view>
-								<!-- 代理等级显示 -->
-								<view v-if="user.agent == 2 || user.agent == 3" class="agent-level"
-									:class="'agent-text-' + user.agent">
-									<text v-if="user.agent == 2">荣耀代理</text>
-									<text v-else-if="user.agent == 3">超凡代理</text>
-								</view>
-								<!-- 成为代理按钮 -->
-								<view v-if="user.agent != 2 && user.agent != 3" class="upgrade-btn"
-									@click.stop="goUpgrade">
-									<text class="upgrade-text">成为代理</text>
-									<uni-icons color="#FFD700" type="right" size="12"></uni-icons>
-								</view>
-							</view>
-							<!-- 代理到期时间显示 -->
-							<view v-if="user.agent == 2 || user.agent == 3" class="agent-expiration">
-								<text
-									class="expiration-text">代理到期:{{ formatExpirationTime(user.agentExpirationTime) }}</text>
-							</view>
-						</view>
-						<view v-else>
-							<view class="username font44 font-bold">
-								点击登录
-							</view>
-							<view class="slogan">
-								传承千年唐卡文化
-							</view>
-						</view>
+					<view class="form-item">
+						<text class="label">手机号</text>
+						<text class="value">{{user.phone || '-'}}</text>
 					</view>
-				</view>
-				<view class="profile-arrow" v-if="isLogin">
-					<uni-icons color="#463a26" type="gear-filled" size="30"></uni-icons>
-				</view>
-			</view>
-		</view>
-
-		<!-- 订单模块 -->
-		<view class="order">
-			<view class="flex pad-t-16" @tap="goOrder(0)">
-				<view class="font28 font-bold font-def mar-l-25">
-					我的订单
-				</view>
-				<view class="mar-l-auto mar-r-30">
-					<view class="font-gray flex-center">
-						<view>
-							全部
-						</view>
-						<view>
-							<uni-icons color="#a8a8a8" type="right" size="15"></uni-icons>
-						</view>
+					<view class="form-item">
+						<text class="label">公司名称</text>
+						<text class="value">{{user.company || '-'}}</text>
 					</view>
-				</view>
-			</view>
-			<view class="flex flex-sp-between mar-t-24 mar-l-25 ">
-				<view v-for="(item,index) in orderList" :key="index" @tap="goOrder(item.status)">
-					<view class="flex-col-center mar-r-20">
-						<view class="badge-container">
-							<image class="order-avatar" :src="item.img" mode="aspectFill"></image>
-							<view class="badge" v-if="getBadgeCount(item.status) > 0">
-								<text>{{getBadgeCount(item.status)}}</text>
-							</view>
-						</view>
-						<view class="font28 font-def">{{item.name}}</view>
+					<view class="form-item">
+						<text class="label">部门</text>
+						<text class="value">{{user.department || '-'}}</text>
 					</view>
 				</view>
-			</view>
-		</view>
-		<view class="setting">
-			<view class="menu-grid">
-				<view v-for="(item,index) in menuList" :key="index"
-					:class="['menu-item', {'menu-item-customer-service': item.name === '七指堂客服'}]"
-					@click="item.name !== '七指堂客服' ? goPath(item) : null">
-					<button v-if="item.name === '七指堂客服'" class="contact-btn menu-content" open-type="contact">
-						<image class="menu-avatar" :src="item.img" mode="aspectFill"></image>
-						<text class="menu-text">{{item.name}}</text>
-					</button>
-					<view v-else class="menu-content">
-						<image class="menu-avatar" :src="item.img" mode="aspectFill"></image>
-						<text class="menu-text">{{item.name}}</text>
+				<view v-else class="login-container">
+					<view class="login-prompt">
+						<text class="login-title">欢迎使用知己访客</text>
+						<text class="login-subtitle">登录后可使用更多功能</text>
+					</view>
+					<view class="login-button" @tap="goLogin">
+						<text class="login-text">点击登录</text>
+						<text class="login-arrow">></text>
 					</view>
 				</view>
 			</view>
+			<view v-if="isLogin" class="edit-button" @tap="goUserDetail">
+				<text class="edit-text">编辑</text>
+			</view>
+
+			<!-- 功能菜单 -->
+
 		</view>
+
 		<uni-popup ref="checkLoginDialog" type="dialog">
 			<uni-popup-dialog type="warn" cancelText="继续浏览" confirmText="确认" title="提示" content="体验更多功能,请先登录"
 				@confirm="goLogin()"></uni-popup-dialog>
@@ -131,7 +57,6 @@
 		memberPetList,
 		carouselQueryAll,
 		getOrderStatusCounts,
-		wxLogin
 	} from '../../config/api';
 	import {
 		mapMutations,
@@ -146,79 +71,6 @@
 	export default {
 		data() {
 			return {
-				statusBarHeight: 0, // 状态栏高度
-				petList: [
-
-				],
-				statusCounts: {
-					pendingPayment: 0,
-					pendingShipment: 0,
-					pendingReceipt: 0,
-					pendingEvaluation: 0,
-					afterSale: 0
-				},
-				menuList: [{
-						img: '../../static/images/shouye.png',
-						name: "个人主页",
-						path: "/packageUser/pages/user-info/index"
-					},
-					{
-						img: '../../static/images/dengji.png',
-						name: "等级中心",
-						path: "/packageUser/pages/level/index",
-					},
-					{
-						img: '../../static/images/team.png',
-						name: "我的团队",
-						path: "/packageUser/pages/team/index"
-					},
-					{
-						img: '../../static/images/fenxiang.png',
-						name: "邀请好友",
-						path: "/packageUser/pages/share/index"
-					},
-					{
-						img: '../../static/images/dizhi.png',
-						name: "收货地址",
-						path: ""
-					},
-					{
-						img: '../../static/images/shoucang1.png',
-						name: "商品收藏",
-						path: "/packageUser/pages/collect/index",
-					},
-					{
-						img: '../../static/images/cart1.png',
-						name: "购物车",
-						path: "/packageShop/pages/cart/index",
-					}
-
-
-
-				],
-				orderList: [{
-						img: '../../static/images/dfk1.png',
-						name: "待付款",
-						status: 1
-					},
-					{
-						img: '../../static/images/dfh1.png',
-						name: "待发货",
-						status: 2
-					},
-					{
-						img: '../../static/images/dsh2.png',
-						name: "待收货",
-						status: 3
-					},
-					{
-						img: '../../static/images/pj1.png',
-						name: "待评价",
-						status: 6
-					},
-
-				],
-
 				user: {}
 			}
 		},
@@ -226,33 +78,16 @@
 			...mapGetters(['isLogin', 'userInfo', 'access_token', 'refresh_token'])
 		},
 		onLoad() {
-			console.log("121212")
-			console.log('当前用户登陆信息')
-			console.log(this.userInfo)
-			// 获取状态栏高度
-			this.getStatusBarHeight();
-			// this.getShufflingList();
-			// var that = this
-			// uni.onTabBarMidButtonTap(function(e){
-			// 	console.log('点击按钮')
-			//    that.$Router.push({path: '/pages/tabbar/licai'})
-			// })
+
 		},
 		onShow() {
-
-
-			// 不管是否登录都获取系统状态栏高度
-			if (this.isLogin) {
-				this.detail(),
-					this.getOrderStatusCounts()
-
-			}
+			this.detail()
 		},
 		// 微信小程序分享配置
 		onShareAppMessage() {
 			return {
-				title: `邀请您加入宏匠唐卡`,
-				path: `/pages/index/indexNew`,
+				title: `邀请您加入知己访客`,
+				path: `/pages/index/index`,
 				imageUrl: shareImg // 分享图片,需要添加
 			}
 		},
@@ -288,1563 +123,162 @@
 		methods: {
 			...mapActions(['logout', 'setToken', 'setUserInfo']),
 
-			// 获取状态栏高度
-			getStatusBarHeight() {
-				const systemInfo = uni.getSystemInfoSync();
-				this.statusBarHeight = systemInfo.statusBarHeight || 0;
-			},
-
-			// 成为代理
-			goUpgrade() {
-				uni.showModal({
-					title: '成为代理',
-					content: '购买代理套餐即可升为代理,立即前往?',
-					success: (res) => {
-						if (res.confirm) {
-							// 这里可以跳转到代理升级页面
-							this.$route('/packageShop/pages/search/product-list?serachKey=' + "代理")
-						}
-					}
-				});
-			},
-
-			/**
-			 * 格式化代理到期时间
-			 * @param {String} timeStr - 时间字符串
-			 * @returns {String} 格式化后的时间字符串
-			 */
-			formatExpirationTime(timeStr) {
-				if (!timeStr) {
-					return '永久有效';
-				}
-
-				try {
-					const date = new Date(timeStr);
-					if (isNaN(date.getTime())) {
-						return '时间格式错误';
-					}
-
-					const year = date.getFullYear();
-					const month = String(date.getMonth() + 1).padStart(2, '0');
-					const day = String(date.getDate()).padStart(2, '0');
-
-					return `${year}-${month}-${day}`;
-				} catch (error) {
-					console.error('格式化时间错误:', error);
-					return '时间格式错误';
+			async detail() {
+				const data = await memberDetail()
+				if (data.code == 200) {
+					this.user = data.data
+					uni.setStorageSync('user', this.user)
 				}
 			},
 
-			// 获取订单状态数量
-			getOrderStatusCounts() {
-				getOrderStatusCounts().then(res => {
-					if (res.code === 200) {
-						this.statusCounts = res.data;
-					}
-				})
-			},
 
-			// 获取用户详情
-			detail() {
-				memberDetail().then(res => {
-					this.user = res.data;
-					uni.setStorageSync('user', this.user);
-					if (res.data.isShielding == '1') {
-						this.handlerLogout();
-					}
-				})
-			},
 
 			// 登录处理
 			goLogin() {
 				if (!this.isLogin) {
-					this.$refs.checkLoginDialog.close()
 					uni.navigateTo({
-						url: '/packageUser/pages/login/index'
+						url: '/pagesA/public/login'
 					});
-
 				} else {
 					this.$route('/packageUser/pages/user-info/index');
 				}
 			},
-			goOrder(status) {
-				if (!this.isLogin) {
-					return this.$refs.checkLoginDialog.open()
-				}
-				if (status === 5) {
-					this.$route('/packageOrder/pages/list/index?isAfter=1')
-				} else if (status === 6) {
-					this.$route('/packageOrder/pages/list/index?isEvaluate=0')
-				} else {
-					this.$route('/packageOrder/pages/list/index?status=' + status)
-				}
-			},
-			getShufflingList() {
-				carouselQueryAll().then(res => {
-					this.bannerList = res.data
-					console.log('输出结果')
-					console.log(this.bannerList)
+			// 跳转用户信息
+			goUserDetail() {
+				uni.navigateTo({
+					url: '/pagesA/user/index'
 				});
 			},
+
 			handlerLogout() {
 				this.logout()
 			},
-			goPath(item) {
-				if (!this.isLogin) {
-					return this.$refs.checkLoginDialog.open()
-				}
-				if (item.path) {
-					this.$route(item.path)
-				} else if (item.name === '收货地址') {
-					console.log("12")
-					uni.chooseAddress({
-						success: (res) => {
-							this.address = res;
-						},
-						fail: (err) => {
-							console.error('获取收货地址失败:', err);
-							if (err.errMsg.includes('auth deny')) {
-								uni.showModal({
-									title: '提示',
-									content: '需要您的授权才能获取收货地址,是否前往设置?',
-									success: (res) => {
-										if (res.confirm) {
-											uni.openSetting();
-										}
-									}
-								});
-							} else {}
-						}
-					});
-				}
-			},
-			getPet() {
-				memberPetList().then((res) => {
-					this.petList = res.data
-				})
-			},
-			getBadgeCount(status) {
-				switch (status) {
-					case 1: // 待付款
-						return this.statusCounts.pendingPayment || 0;
-					case 2: // 待发货
-						return this.statusCounts.pendingShipment || 0;
-					case 3: // 待收货
-						return this.statusCounts.pendingReceipt || 0;
-					case 6: // 待评价
-						return this.statusCounts.pendingEvaluation || 0;
-					case 5: // 退款/售后
-						return this.statusCounts.afterSale || 0;
-					default:
-						return 0;
-				}
-			}
+
+
+
 		},
 	}
 </script>
 
 <style>
-	.bg-index-image {
+	/* 页面容器 */
+	.page-container {
 		min-height: 100vh;
-		padding: 0 24rpx;
-		background:
-			linear-gradient(135deg, #f7f3e8 0%, #f0ebe0 30%, #ede5d8 70%, #e8dcc6 100%);
-		position: relative;
-		overflow: hidden;
-	}
-
-	/* 禅意背景纹理层 */
-	.bg-index-image::before {
-		content: '';
-		position: fixed;
-		top: 0;
-		left: 0;
-		right: 0;
-		bottom: 0;
-		background-image:
-			/* 主要禅意纹理 */
-			radial-gradient(circle at 20% 20%, rgba(139, 69, 19, 0.03) 0%, transparent 60%),
-			radial-gradient(circle at 80% 60%, rgba(165, 42, 42, 0.02) 0%, transparent 50%),
-			radial-gradient(circle at 40% 80%, rgba(160, 82, 45, 0.03) 0%, transparent 55%),
-			/* 细腻纹理 */
-			repeating-radial-gradient(circle at 60% 30%,
-				rgba(218, 165, 32, 0.01) 0%,
-				rgba(218, 165, 32, 0.01) 2px,
-				transparent 2px,
-				transparent 12px),
-			/* 禅意波纹 */
-			repeating-conic-gradient(from 45deg at 70% 70%,
-				transparent 0deg,
-				rgba(139, 69, 19, 0.005) 45deg,
-				transparent 90deg,
-				rgba(160, 82, 45, 0.005) 135deg,
-				transparent 180deg);
-		background-size:
-			900rpx 900rpx,
-			700rpx 700rpx,
-			800rpx 800rpx,
-			60rpx 60rpx,
-			200rpx 200rpx;
-		z-index: -1;
-		pointer-events: none;
-		animation: zenBreath 25s ease-in-out infinite;
+		background-color: #F5F5F5;
 	}
 
-	/* 禅意装饰层 */
-	.bg-index-image::after {
-		content: '';
-		position: fixed;
+	/* 背景图片 */
+	.bg-image {
 		top: 0;
 		left: 0;
-		right: 0;
-		bottom: 0;
-		background-image:
-			/* 金色微光 */
-			radial-gradient(ellipse at 30% 20%, rgba(218, 165, 32, 0.02) 0%, transparent 70%),
-			radial-gradient(ellipse at 70% 80%, rgba(218, 165, 32, 0.015) 0%, transparent 60%),
-			/* 禅意圆环 */
-			repeating-radial-gradient(circle at 85% 15%,
-				transparent 0px,
-				transparent 20px,
-				rgba(218, 165, 32, 0.008) 20px,
-				rgba(218, 165, 32, 0.008) 22px,
-				transparent 22px,
-				transparent 40px);
-		background-size: 600rpx 400rpx, 500rpx 350rpx, 300rpx 300rpx;
-		z-index: -1;
-		pointer-events: none;
-		animation: goldenMist 30s ease-in-out infinite reverse;
-	}
-
-	/* 禅意呼吸动效 */
-	@keyframes zenBreath {
-
-		0%,
-		100% {
-			opacity: 0.4;
-			transform: scale(1) rotate(0deg);
-		}
-
-		33% {
-			opacity: 0.6;
-			transform: scale(1.01) rotate(0.5deg);
-		}
-
-		66% {
-			opacity: 0.5;
-			transform: scale(1.02) rotate(-0.3deg);
-		}
-	}
-
-	/* 金色薄雾动效 */
-	@keyframes goldenMist {
-
-		0%,
-		100% {
-			opacity: 0.2;
-			transform: translateX(0) translateY(0) scale(1);
-		}
-
-		25% {
-			opacity: 0.3;
-			transform: translateX(10rpx) translateY(-5rpx) scale(1.01);
-		}
-
-		50% {
-			opacity: 0.25;
-			transform: translateX(5rpx) translateY(10rpx) scale(1.02);
-		}
-
-		75% {
-			opacity: 0.35;
-			transform: translateX(-8rpx) translateY(3rpx) scale(0.99);
-		}
+		width: 100%;
+		height: 300rpx;
+		z-index: 0;
 	}
 
-	.user-login {
-		background:
-			linear-gradient(135deg, rgba(255, 253, 245, 0.98) 0%, rgba(252, 248, 240, 0.95) 50%, rgba(250, 245, 235, 0.97) 100%);
-		backdrop-filter: blur(15px) saturate(1.2);
-		box-shadow:
-			0 12rpx 48rpx rgba(139, 69, 19, 0.12),
-			0 4rpx 16rpx rgba(160, 82, 45, 0.08),
-			0 1rpx 4rpx rgba(218, 165, 32, 0.1),
-			inset 0 1rpx 0 rgba(255, 255, 255, 0.9),
-			inset 0 -1rpx 0 rgba(218, 165, 32, 0.05);
-		padding: 52rpx 36rpx;
-		margin: 36rpx -24rpx;
-		border-radius: 28rpx;
-		border: 2rpx solid rgba(218, 165, 32, 0.18);
+	/* 内容区域 */
+	.content-area {
 		position: relative;
-		transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
-		overflow: hidden;
+		z-index: 1;
+		padding: 32rpx;
 	}
 
-	/* 禅意装饰边框 */
-	.user-login::before {
-		content: '';
-		position: absolute;
-		top: 12rpx;
-		left: 12rpx;
-		right: 12rpx;
-		bottom: 12rpx;
-		border: 1rpx solid rgba(218, 165, 32, 0.12);
+	/* 访客信息表单 */
+	.visitor-form {
+		background: #FFFFFF;
 		border-radius: 24rpx;
-		background:
-			/* 禅意纹理 */
-			repeating-linear-gradient(45deg,
-				transparent 0rpx,
-				transparent 6rpx,
-				rgba(218, 165, 32, 0.02) 6rpx,
-				rgba(218, 165, 32, 0.02) 12rpx),
-			repeating-linear-gradient(-45deg,
-				transparent 0rpx,
-				transparent 6rpx,
-				rgba(160, 82, 45, 0.015) 6rpx,
-				rgba(160, 82, 45, 0.015) 12rpx),
-			/* 内部光晕 */
-			radial-gradient(ellipse at 30% 30%, rgba(218, 165, 32, 0.03) 0%, transparent 70%),
-			radial-gradient(ellipse at 70% 70%, rgba(160, 82, 45, 0.02) 0%, transparent 60%);
-		pointer-events: none;
-		animation: zenPattern 15s ease-in-out infinite;
-	}
-
-	/* 温润光泽效果 */
-	.user-login::after {
-		content: '';
-		position: absolute;
-		top: 0;
-		left: -60%;
-		width: 60%;
-		height: 100%;
-		background: linear-gradient(90deg,
-				transparent,
-				rgba(255, 255, 255, 0.08),
-				rgba(218, 165, 32, 0.03),
-				rgba(255, 255, 255, 0.12),
-				transparent);
-		transform: skewX(-20deg);
-		animation: gentleShine 12s ease-in-out infinite;
-	}
-
-	@keyframes gentleShine {
-		0% {
-			left: -60%;
-			opacity: 0;
-		}
-
-		10% {
-			opacity: 1;
-		}
-
-		90% {
-			opacity: 1;
-		}
-
-		100% {
-			left: 160%;
-			opacity: 0;
-		}
-	}
-
-	@keyframes zenPattern {
-
-		0%,
-		100% {
-			opacity: 0.6;
-			transform: scale(1) rotate(0deg);
-		}
-
-		50% {
-			opacity: 0.8;
-			transform: scale(1.002) rotate(0.2deg);
-		}
-	}
-
-	.user-login:active {
-		transform: scale(0.98);
-		box-shadow:
-			0 4rpx 16rpx rgba(139, 69, 19, 0.12),
-			0 1rpx 4rpx rgba(160, 82, 45, 0.08);
+		padding: 0 32rpx;
+		box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.05);
 	}
 
-
-
-	.profile-content {
+	.form-item {
 		display: flex;
 		align-items: center;
+		min-height: 120rpx;
+		border-bottom: 1rpx solid #F5F5F5;
 	}
 
-	.profile-arrow {
-		margin-left: auto;
-		padding: 16rpx;
-	}
-
-	.pet {
-		border-radius: 20rpx;
-		width: 700rpx;
-		height: auto;
-		padding-bottom: 30rpx;
-		background-color: white;
-		margin-top: 30rpx;
-		margin-left: 25rpx;
-	}
-
-	.order {
-		background: linear-gradient(135deg, rgba(255, 253, 245, 0.95) 0%, rgba(252, 248, 240, 0.92) 100%);
-		backdrop-filter: blur(10px);
-		box-shadow:
-			0 8rpx 32rpx rgba(139, 69, 19, 0.08),
-			0 2rpx 8rpx rgba(160, 82, 45, 0.04),
-			inset 0 1rpx 0 rgba(255, 255, 255, 0.8);
-		padding: 40rpx 32rpx;
-		margin: 24rpx -24rpx 32rpx;
-		border-radius: 24rpx;
-		border: 1rpx solid rgba(218, 165, 32, 0.15);
-		position: relative;
-		overflow: hidden;
-	}
-
-	/* 订单模块禅意装饰 */
-	.order::before {
-		content: '';
-		position: absolute;
-		top: 12rpx;
-		left: 12rpx;
-		right: 12rpx;
-		bottom: 12rpx;
-		border: 1rpx solid rgba(218, 165, 32, 0.08);
-		border-radius: 20rpx;
-		background:
-			radial-gradient(circle at 30% 30%, rgba(218, 165, 32, 0.02) 0%, transparent 70%),
-			radial-gradient(circle at 70% 70%, rgba(160, 82, 45, 0.02) 0%, transparent 70%);
-		pointer-events: none;
-	}
-
-
-
-	.setting {
-		background: linear-gradient(135deg, rgba(255, 253, 245, 0.95) 0%, rgba(252, 248, 240, 0.92) 100%);
-		backdrop-filter: blur(10px);
-		box-shadow:
-			0 8rpx 32rpx rgba(139, 69, 19, 0.08),
-			0 2rpx 8rpx rgba(160, 82, 45, 0.04),
-			inset 0 1rpx 0 rgba(255, 255, 255, 0.8);
-		padding: 40rpx 32rpx;
-		margin: 24rpx -24rpx;
-		border-radius: 24rpx;
-		border: 1rpx solid rgba(218, 165, 32, 0.15);
-		position: relative;
-		overflow: hidden;
-	}
-
-	/* 设置模块禅意装饰 */
-	.setting::before {
-		content: '';
-		position: absolute;
-		top: 16rpx;
-		left: 16rpx;
-		right: 16rpx;
-		bottom: 16rpx;
-		border: 1rpx solid rgba(218, 165, 32, 0.08);
-		border-radius: 20rpx;
-		background-image:
-			radial-gradient(circle at 20% 80%, rgba(218, 165, 32, 0.03) 0%, transparent 50%),
-			radial-gradient(circle at 80% 20%, rgba(160, 82, 45, 0.03) 0%, transparent 50%),
-			repeating-linear-gradient(45deg,
-				transparent 0rpx,
-				transparent 20rpx,
-				rgba(218, 165, 32, 0.01) 20rpx,
-				rgba(218, 165, 32, 0.01) 40rpx);
-		pointer-events: none;
-	}
-
-	.menu-grid {
-		display: grid;
-		grid-template-columns: repeat(4, 1fr);
-		gap: 20rpx;
-		width: 100%;
-	}
-
-	.menu-item {
-		aspect-ratio: 1;
-		border-radius: 20rpx;
-		background: linear-gradient(135deg, rgba(255, 253, 245, 0.85) 0%, rgba(252, 248, 240, 0.8) 50%, rgba(250, 245, 235, 0.82) 100%);
-		backdrop-filter: blur(8px) saturate(1.1);
-		border: 1.5rpx solid rgba(218, 165, 32, 0.15);
-		box-shadow:
-			0 6rpx 24rpx rgba(139, 69, 19, 0.06),
-			0 2rpx 8rpx rgba(160, 82, 45, 0.04),
-			inset 0 1rpx 0 rgba(255, 255, 255, 0.7),
-			inset 0 -1rpx 0 rgba(218, 165, 32, 0.03);
-		transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
-		position: relative;
-		overflow: hidden;
-		cursor: pointer;
-	}
-
-	/* 菜单项禅意装饰 */
-	.menu-item::before {
-		content: '';
-		position: absolute;
-		top: 6rpx;
-		left: 6rpx;
-		right: 6rpx;
-		bottom: 6rpx;
-		border: 1rpx solid rgba(218, 165, 32, 0.08);
-		border-radius: 16rpx;
-		background:
-			radial-gradient(circle at 30% 30%, rgba(218, 165, 32, 0.025) 0%, transparent 70%),
-			radial-gradient(circle at 70% 70%, rgba(160, 82, 45, 0.02) 0%, transparent 60%),
-			repeating-radial-gradient(circle at center,
-				transparent 0%,
-				transparent 8px,
-				rgba(218, 165, 32, 0.008) 8px,
-				rgba(218, 165, 32, 0.008) 10px);
-		pointer-events: none;
-		transition: all 0.4s ease;
-		opacity: 0.6;
-	}
-
-	/* 悬浮光晕效果 */
-	.menu-item::after {
-		content: '';
-		position: absolute;
-		top: 0;
-		left: 0;
-		right: 0;
-		bottom: 0;
-		border-radius: 20rpx;
-		background:
-			radial-gradient(circle at var(--mouse-x, 50%) var(--mouse-y, 50%),
-				rgba(218, 165, 32, 0.08) 0%,
-				rgba(218, 165, 32, 0.04) 30%,
-				transparent 70%);
-		opacity: 0;
-		transition: all 0.3s ease;
-		pointer-events: none;
-	}
-
-	.menu-item:hover {
-		transform: translateY(-2rpx);
-		box-shadow:
-			0 12rpx 32rpx rgba(139, 69, 19, 0.1),
-			0 4rpx 12rpx rgba(160, 82, 45, 0.08),
-			inset 0 1rpx 0 rgba(255, 255, 255, 0.8);
-		border-color: rgba(218, 165, 32, 0.2);
-	}
-
-	.menu-item:hover::before {
-		opacity: 1;
-		transform: scale(1.02);
+	.form-item:last-child {
+		border-bottom: none;
 	}
 
-	.menu-item:hover::after {
-		opacity: 1;
-	}
-
-	.menu-item:active {
-		transform: scale(0.96) translateY(1rpx);
-		background: linear-gradient(135deg, rgba(252, 248, 240, 0.95) 0%, rgba(245, 240, 230, 0.9) 50%, rgba(248, 243, 233, 0.92) 100%);
-		box-shadow:
-			0 3rpx 12rpx rgba(139, 69, 19, 0.12),
-			0 1rpx 4rpx rgba(160, 82, 45, 0.08),
-			inset 0 2rpx 4rpx rgba(218, 165, 32, 0.06);
+	.label {
+		width: 140rpx;
+		font-size: 28rpx;
+		color: #999999;
 	}
 
-	.menu-item:active::before {
-		opacity: 1;
-		transform: scale(0.98);
-		background:
-			radial-gradient(circle at center, rgba(218, 165, 32, 0.06) 0%, transparent 60%);
+	.value {
+		flex: 1;
+		font-size: 28rpx;
+		color: #333333;
 	}
 
-	.menu-content {
-		width: 100%;
-		height: 100%;
+	/* 未登录状态样式 */
+	.login-container {
+		padding: 40rpx 0;
 		display: flex;
 		flex-direction: column;
 		align-items: center;
 		justify-content: center;
-		gap: 16rpx;
-		padding: 16rpx;
-	}
-
-	.menu-text {
-		font-size: 24rpx;
-		color: #8b4513;
-		font-weight: 500;
-		text-align: center;
-		line-height: 1.2;
-		text-shadow: 0 1rpx 2rpx rgba(218, 165, 32, 0.08);
-		letter-spacing: 0.5rpx;
-	}
-
-	/* 客服按钮重置样式 */
-	.contact-btn.menu-content {
-		background: none;
-		border: none;
-		padding: 16rpx;
-		margin: 0;
-		line-height: normal;
+		gap: 40rpx;
 	}
 
-	.contact-btn.menu-content::after {
-		display: none;
-	}
-
-	.profile-section {
-		margin-bottom: 36rpx;
-		width: 100%;
-		position: relative;
-	}
-
-	/* 添加禅意装饰元素 */
-	.profile-section::before {
-		content: '◦';
-		position: absolute;
-		top: -20rpx;
-		left: 50%;
-		transform: translateX(-50%);
-		font-size: 32rpx;
-		color: rgba(218, 165, 32, 0.3);
-		text-shadow: 0 2rpx 4rpx rgba(218, 165, 32, 0.1);
-		animation: zenSymbol 8s ease-in-out infinite;
-	}
-
-	@keyframes zenSymbol {
-
-		0%,
-		100% {
-			opacity: 0.3;
-			transform: translateX(-50%) scale(1);
-		}
-
-		50% {
-			opacity: 0.6;
-			transform: translateX(-50%) scale(1.1);
-		}
-	}
-
-	.avatar-container {
-		position: relative;
-		margin-right: 40rpx;
-	}
-
-	.avatar {
-		width: 160rpx;
-		height: 160rpx;
-		border-radius: 50%;
-		border: 4rpx solid rgba(218, 165, 32, 0.25);
-		overflow: hidden;
-		box-shadow:
-			0 12rpx 32rpx rgba(139, 69, 19, 0.15),
-			0 4rpx 12rpx rgba(160, 82, 45, 0.12),
-			0 1rpx 4rpx rgba(218, 165, 32, 0.1),
-			inset 0 0 0 3rpx rgba(255, 255, 255, 0.9),
-			inset 0 0 0 6rpx rgba(218, 165, 32, 0.05);
-		transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
-		position: relative;
-	}
-
-	/* 头像禅意光环 */
-	.avatar::before {
-		content: '';
-		position: absolute;
-		top: -12rpx;
-		left: -12rpx;
-		right: -12rpx;
-		bottom: -12rpx;
-		border-radius: 50%;
-		background:
-			conic-gradient(from 0deg,
-				transparent 0deg,
-				rgba(218, 165, 32, 0.08) 60deg,
-				rgba(218, 165, 32, 0.15) 120deg,
-				rgba(218, 165, 32, 0.2) 180deg,
-				rgba(218, 165, 32, 0.15) 240deg,
-				rgba(218, 165, 32, 0.08) 300deg,
-				transparent 360deg);
-		animation: avatarHalo 12s linear infinite;
-		z-index: -1;
-	}
-
-	/* 头像内光环 */
-	.avatar::after {
-		content: '';
-		position: absolute;
-		top: -8rpx;
-		left: -8rpx;
-		right: -8rpx;
-		bottom: -8rpx;
-		border-radius: 50%;
-		background:
-			conic-gradient(from 180deg,
-				transparent 0deg,
-				rgba(160, 82, 45, 0.06) 90deg,
-				rgba(139, 69, 19, 0.08) 180deg,
-				rgba(160, 82, 45, 0.06) 270deg,
-				transparent 360deg);
-		animation: avatarHalo 15s linear infinite reverse;
-		z-index: -1;
-	}
-
-	@keyframes avatarHalo {
-		0% {
-			transform: rotate(0deg);
-		}
-
-		100% {
-			transform: rotate(360deg);
-		}
-	}
-
-	.avatar:active {
-		transform: scale(0.98);
-		box-shadow:
-			0 4rpx 12rpx rgba(139, 69, 19, 0.16),
-			0 1rpx 4rpx rgba(160, 82, 45, 0.12);
-	}
-
-	/* 美化后的代理徽章 */
-	.member-badge {
-		position: absolute;
-		bottom: -8rpx;
-		right: -8rpx;
-		border-radius: 20rpx;
-		padding: 8rpx 12rpx;
-		display: flex;
-		align-items: center;
-		border: 2rpx solid rgba(255, 255, 255, 0.9);
-		backdrop-filter: blur(10px);
-		animation: badgeGlow 2s ease-in-out infinite alternate;
-	}
-
-	.badge-content {
-		display: flex;
-		align-items: center;
-		justify-content: center;
-	}
-
-	.member-icons {
+	.login-prompt {
 		display: flex;
+		flex-direction: column;
 		align-items: center;
-		gap: 2rpx;
-	}
-
-	.member-icon {
-		font-size: 24rpx;
-		filter: drop-shadow(0 2rpx 4rpx rgba(0, 0, 0, 0.3));
-		animation: iconFloat 2s ease-in-out infinite;
-	}
-
-	.member-icon.diamond {
-		animation: diamondSparkle 1.5s ease-in-out infinite;
-	}
-
-	.member-icon.crown {
-		animation: crownGlow 2s ease-in-out infinite;
-	}
-
-	/* S级代理 - 金色钻石徽章 */
-	.level-1 {
-		background: linear-gradient(135deg, #FFD700 0%, #FFA500 50%, #FF8C00 100%);
-		box-shadow: 0 4rpx 16rpx rgba(255, 215, 0, 0.4), inset 0 1rpx 0 rgba(255, 255, 255, 0.3);
-	}
-
-	.level-1 .member-icon {
-		filter: drop-shadow(0 2rpx 4rpx rgba(255, 215, 0, 0.5));
-	}
-
-	/* SS级代理 - 红宝石双钻石徽章 */
-	.level-2 {
-		background: linear-gradient(135deg, #FF6B6B 0%, #FF8E53 50%, #FF4757 100%);
-		box-shadow: 0 4rpx 16rpx rgba(255, 107, 107, 0.4), inset 0 1rpx 0 rgba(255, 255, 255, 0.3);
-	}
-
-	.level-2 .member-icon {
-		filter: drop-shadow(0 2rpx 4rpx rgba(255, 107, 107, 0.5));
-	}
-
-	.level-2 .member-icon:nth-child(2) {
-		animation-delay: 0.5s;
-	}
-
-	/* SSS级代理 - 紫金皇冠徽章 */
-	.level-3 {
-		background: linear-gradient(135deg, #9B59B6 0%, #8E44AD 50%, #6C5CE7 100%);
-		box-shadow: 0 6rpx 20rpx rgba(155, 89, 182, 0.5), inset 0 1rpx 0 rgba(255, 255, 255, 0.4);
-	}
-
-	.level-3 .member-icon {
-		filter: drop-shadow(0 3rpx 6rpx rgba(155, 89, 182, 0.6));
-	}
-
-	@keyframes badgeGlow {
-		0% {
-			transform: scale(1);
-		}
-
-		100% {
-			transform: scale(1.05);
-		}
-	}
-
-	@keyframes iconFloat {
-
-		0%,
-		100% {
-			transform: translateY(0);
-		}
-
-		50% {
-			transform: translateY(-2rpx);
-		}
-	}
-
-	@keyframes diamondSparkle {
-
-		0%,
-		100% {
-			opacity: 1;
-			transform: scale(1) rotate(0deg);
-		}
-
-		25% {
-			opacity: 0.8;
-			transform: scale(1.1) rotate(5deg);
-		}
-
-		50% {
-			opacity: 1;
-			transform: scale(1) rotate(0deg);
-		}
-
-		75% {
-			opacity: 0.9;
-			transform: scale(1.05) rotate(-3deg);
-		}
-	}
-
-	@keyframes crownGlow {
-
-		0%,
-		100% {
-			opacity: 1;
-			transform: scale(1);
-			filter: drop-shadow(0 3rpx 6rpx rgba(155, 89, 182, 0.6)) brightness(1);
-		}
-
-		50% {
-			opacity: 0.9;
-			transform: scale(1.1);
-			filter: drop-shadow(0 4rpx 8rpx rgba(155, 89, 182, 0.8)) brightness(1.2);
-		}
-	}
-
-	.user-info {
-		flex: 1;
+		gap: 16rpx;
 	}
 
-	.username {
-		font-size: 48rpx;
-		margin-bottom: 12rpx;
-		color: #8b4513;
+	.login-title {
+		font-size: 36rpx;
+		color: #333333;
 		font-weight: 600;
-		text-shadow: 0 1rpx 2rpx rgba(218, 165, 32, 0.1);
-		letter-spacing: 1rpx;
 	}
 
-	/* 代理等级容器 */
-	.member-level-container {
-		display: flex;
-		align-items: center;
-		gap: 20rpx;
-		flex-wrap: wrap;
-	}
-
-	.member-level {
+	.login-subtitle {
 		font-size: 28rpx;
-		font-weight: 500;
-		letter-spacing: 0.5rpx;
-		text-shadow: 0 1rpx 2rpx rgba(139, 69, 19, 0.1);
+		color: #999999;
 	}
 
-	.level-text-0 {
-		color: #a0522d;
-		background: linear-gradient(135deg, rgba(218, 165, 32, 0.1) 0%, rgba(160, 82, 45, 0.1) 100%);
-		padding: 6rpx 16rpx;
-		border-radius: 20rpx;
-		border: 1rpx solid rgba(218, 165, 32, 0.2);
-	}
-
-	/* S级代理标签特效 */
-	.level-text-1 {
-		position: relative;
-		display: inline-block;
-		padding: 4rpx 12rpx;
-		color: #FFF;
-		background: linear-gradient(135deg, #FFD700, #FFA500, #FFD700);
-		background-size: 200% 100%;
-		border-radius: 12rpx;
-		font-size: 24rpx;
-		font-weight: 700;
-		text-shadow: 0 1rpx 2rpx rgba(0, 0, 0, 0.3);
-		box-shadow:
-			0 4rpx 12rpx rgba(255, 215, 0, 0.4),
-			inset 0 1rpx 0 rgba(255, 255, 255, 0.3),
-			0 0 15rpx rgba(255, 215, 0, 0.6);
-		border: 1rpx solid rgba(255, 255, 255, 0.4);
-		animation: goldBadgeShimmer 2s ease-in-out infinite;
-		overflow: hidden;
-	}
-
-	/* S级标签闪光效果 */
-	.level-text-1::before {
-		content: '';
-		position: absolute;
-		top: 0;
-		left: -100%;
-		width: 50%;
-		height: 100%;
-		background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.4), transparent);
-		transform: skewX(-25deg);
-		animation: goldShine 2s infinite;
-	}
-
-	/* SS级代理标签特效 */
-	.level-text-2 {
-		position: relative;
-		display: inline-block;
-		padding: 4rpx 12rpx;
-		color: #FFF;
-		background: linear-gradient(135deg, #FF6B6B, #FF8E53, #FF4757, #FF6B6B);
-		background-size: 300% 100%;
-		border-radius: 12rpx;
-		font-size: 24rpx;
-		font-weight: 700;
-		text-shadow: 0 1rpx 2rpx rgba(0, 0, 0, 0.3);
-		box-shadow:
-			0 4rpx 12rpx rgba(255, 107, 107, 0.4),
-			inset 0 1rpx 0 rgba(255, 255, 255, 0.3),
-			0 0 15rpx rgba(255, 107, 107, 0.6);
-		border: 1rpx solid rgba(255, 255, 255, 0.4);
-		animation: rubyBadgeFlow 3s ease-in-out infinite;
-		overflow: hidden;
-	}
-
-	/* SS级标签流光效果 */
-	.level-text-2::before {
-		content: '';
-		position: absolute;
-		top: 0;
-		left: -100%;
-		width: 40%;
-		height: 100%;
-		background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.5), transparent);
-		transform: skewX(-20deg);
-		animation: rubyShine 3s infinite;
-	}
-
-	/* SSS级代理标签特效 */
-	.level-text-3 {
-		position: relative;
-		display: inline-block;
-		padding: 4rpx 12rpx;
-		color: #FFF;
-		background: linear-gradient(135deg, #9B59B6, #8E44AD, #6C5CE7, #A569BD, #9B59B6);
-		background-size: 400% 100%;
-		border-radius: 12rpx;
-		font-size: 24rpx;
-		font-weight: 700;
-		text-shadow: 0 1rpx 2rpx rgba(0, 0, 0, 0.4);
-		box-shadow:
-			0 6rpx 16rpx rgba(155, 89, 182, 0.5),
-			inset 0 1rpx 0 rgba(255, 255, 255, 0.4),
-			0 0 20rpx rgba(155, 89, 182, 0.8);
-		border: 1rpx solid rgba(255, 255, 255, 0.5);
-		animation: crownBadgeGlory 4s ease-in-out infinite;
-		overflow: hidden;
-	}
-
-	/* SSS级标签皇冠光效 */
-	.level-text-3::before {
-		content: '';
-		position: absolute;
-		top: 0;
-		left: -100%;
-		width: 30%;
-		height: 100%;
-		background: linear-gradient(90deg,
-				transparent,
-				rgba(255, 255, 255, 0.6),
-				rgba(255, 215, 0, 0.3),
-				rgba(255, 255, 255, 0.6),
-				transparent);
-		transform: skewX(-15deg);
-		animation: crownShine 4s infinite;
-	}
-
-	.level-text-3::after {
-		content: '';
-		position: absolute;
-		top: -2rpx;
-		left: -2rpx;
-		right: -2rpx;
-		bottom: -2rpx;
-		background: linear-gradient(45deg,
-				rgba(155, 89, 182, 0.3),
-				rgba(108, 92, 231, 0.3),
-				rgba(142, 68, 173, 0.3));
-		border-radius: 14rpx;
-		z-index: -1;
-		animation: crownAura 4s ease-in-out infinite;
-	}
-
-	/* S级徽章动画 */
-	@keyframes goldBadgeShimmer {
-
-		0%,
-		100% {
-			background-position: 0% 50%;
-		}
-
-		50% {
-			background-position: 100% 50%;
-		}
-	}
-
-	@keyframes goldShine {
-		0% {
-			left: -100%;
-		}
-
-		20% {
-			left: 100%;
-		}
-
-		100% {
-			left: 100%;
-		}
-	}
-
-	/* SS级徽章动画 */
-	@keyframes rubyBadgeFlow {
-
-		0%,
-		100% {
-			background-position: 0% 50%;
-		}
-
-		33% {
-			background-position: 50% 50%;
-		}
-
-		66% {
-			background-position: 100% 50%;
-		}
-	}
-
-	@keyframes rubyShine {
-		0% {
-			left: -100%;
-		}
-
-		30% {
-			left: 100%;
-		}
-
-		100% {
-			left: 100%;
-		}
-	}
-
-	/* SSS级徽章动画 */
-	@keyframes crownBadgeGlory {
-
-		0%,
-		100% {
-			background-position: 0% 50%;
-		}
-
-		25% {
-			background-position: 25% 50%;
-		}
-
-		50% {
-			background-position: 50% 50%;
-		}
-
-		75% {
-			background-position: 75% 50%;
-		}
-	}
-
-	@keyframes crownShine {
-		0% {
-			left: -100%;
-		}
-
-		40% {
-			left: 100%;
-		}
-
-		100% {
-			left: 100%;
-		}
-	}
-
-	@keyframes crownAura {
-
-		0%,
-		100% {
-			opacity: 0.3;
-		}
-
-		50% {
-			opacity: 0.6;
-		}
-	}
-
-	/* 成为代理按钮 */
-	.upgrade-btn {
-		display: flex;
-		align-items: center;
-		gap: 12rpx;
-		background: linear-gradient(135deg, #DAA520 0%, #FFD700 50%, #FFA500 100%);
-		border-radius: 32rpx;
-		padding: 12rpx 24rpx;
-		box-shadow:
-			0 6rpx 20rpx rgba(218, 165, 32, 0.4),
-			0 2rpx 8rpx rgba(255, 215, 0, 0.3),
-			inset 0 1rpx 0 rgba(255, 255, 255, 0.8);
-		border: 2rpx solid rgba(255, 255, 255, 0.9);
-		transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
-		position: relative;
-		overflow: hidden;
-		animation: upgradePulse 3s ease-in-out infinite;
-	}
-
-	/* 按钮光泽效果 */
-	.upgrade-btn::before {
-		content: '';
-		position: absolute;
-		top: 0;
-		left: -100%;
+	.login-button {
 		width: 100%;
-		height: 100%;
-		background: linear-gradient(90deg,
-				transparent,
-				rgba(255, 255, 255, 0.3),
-				transparent);
-		transform: skewX(-25deg);
-		animation: buttonShine 4s ease-in-out infinite;
-	}
-
-	.upgrade-btn:active {
-		transform: scale(0.96);
-		box-shadow:
-			0 3rpx 12rpx rgba(218, 165, 32, 0.5),
-			0 1rpx 4rpx rgba(255, 215, 0, 0.4),
-			inset 0 2rpx 4rpx rgba(218, 165, 32, 0.2);
-	}
-
-	.upgrade-text {
-		color: #FFFFFF;
-		font-size: 26rpx;
-		font-weight: 700;
-		text-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.3);
-		letter-spacing: 0.5rpx;
-		position: relative;
-		z-index: 1;
-	}
-
-	@keyframes upgradePulse {
-
-		0%,
-		100% {
-			transform: scale(1);
-			box-shadow:
-				0 6rpx 20rpx rgba(218, 165, 32, 0.4),
-				0 2rpx 8rpx rgba(255, 215, 0, 0.3),
-				inset 0 1rpx 0 rgba(255, 255, 255, 0.8);
-		}
-
-		50% {
-			transform: scale(1.02);
-			box-shadow:
-				0 8rpx 28rpx rgba(218, 165, 32, 0.5),
-				0 3rpx 12rpx rgba(255, 215, 0, 0.4),
-				inset 0 1rpx 0 rgba(255, 255, 255, 0.9);
-		}
-	}
-
-	@keyframes buttonShine {
-		0% {
-			left: -100%;
-		}
-
-		50% {
-			left: 100%;
-		}
-
-		100% {
-			left: 100%;
-		}
-	}
-
-	/* 代理等级样式 */
-	.agent-level {
-		font-size: 26rpx;
-		font-weight: 600;
-		letter-spacing: 0.5rpx;
-		text-shadow: 0 1rpx 2rpx rgba(0, 0, 0, 0.1);
-		padding: 4rpx 12rpx;
-		border-radius: 12rpx;
-		position: relative;
-		overflow: hidden;
-	}
-
-	/* 荣耀代理样式 */
-	.agent-text-2 {
-		color: #FFF;
-		background: linear-gradient(135deg, #FF6B35 0%, #F7931E 50%, #FFD23F 100%);
-		box-shadow:
-			0 4rpx 12rpx rgba(255, 107, 53, 0.4),
-			inset 0 1rpx 0 rgba(255, 255, 255, 0.3),
-			0 0 15rpx rgba(255, 107, 53, 0.6);
-		border: 1rpx solid rgba(255, 255, 255, 0.4);
-		animation: gloryShimmer 3s ease-in-out infinite;
-	}
-
-	/* 超凡代理样式 */
-	.agent-text-3 {
-		color: #FFF;
-		background: linear-gradient(135deg, #667eea 0%, #764ba2 50%, #f093fb 100%);
-		box-shadow:
-			0 6rpx 16rpx rgba(102, 126, 234, 0.5),
-			inset 0 1rpx 0 rgba(255, 255, 255, 0.4),
-			0 0 20rpx rgba(102, 126, 234, 0.8);
-		border: 1rpx solid rgba(255, 255, 255, 0.5);
-		animation: transcendentGlow 4s ease-in-out infinite;
-	}
-
-	/* 代理到期时间容器 */
-	.agent-expiration {
-		margin-top: 8rpx;
-		padding: 6rpx 12rpx;
-		background: rgba(139, 69, 19, 0.05);
-		border-radius: 8rpx;
-		border: 1rpx solid rgba(218, 165, 32, 0.2);
-	}
-
-	.expiration-text {
-		font-size: 24rpx;
-		color: #8b4513;
-		font-weight: 500;
-		letter-spacing: 0.5rpx;
-	}
-
-	/* 荣耀代理动画 */
-	@keyframes gloryShimmer {
-
-		0%,
-		100% {
-			background-position: 0% 50%;
-		}
-
-		50% {
-			background-position: 100% 50%;
-		}
-	}
-
-	/* 超凡代理动画 */
-	@keyframes transcendentGlow {
-
-		0%,
-		100% {
-			background-position: 0% 50%;
-			box-shadow:
-				0 6rpx 16rpx rgba(102, 126, 234, 0.5),
-				inset 0 1rpx 0 rgba(255, 255, 255, 0.4),
-				0 0 20rpx rgba(102, 126, 234, 0.8);
-		}
-
-		50% {
-			background-position: 100% 50%;
-			box-shadow:
-				0 8rpx 20rpx rgba(102, 126, 234, 0.6),
-				inset 0 1rpx 0 rgba(255, 255, 255, 0.5),
-				0 0 25rpx rgba(102, 126, 234, 0.9);
-		}
-	}
-
-	.slogan {
-		color: #a0522d;
-		font-size: 26rpx;
-		font-style: italic;
-		text-shadow: 0 1rpx 2rpx rgba(218, 165, 32, 0.08);
-		letter-spacing: 0.5rpx;
-	}
-
-	.font44 {
-		font-size: 40rpx;
-		color: #8b4513;
-		font-weight: 600;
-		text-shadow: 0 1rpx 2rpx rgba(218, 165, 32, 0.1);
-	}
-
-	.font-gray {
-		color: #a0522d;
-		font-size: 26rpx;
-		text-shadow: 0 1rpx 2rpx rgba(139, 69, 19, 0.08);
-	}
-
-	/* 宠物头像样式 */
-	.pet-avatar {
-		width: 80rpx;
-		height: 80rpx;
-		border-radius: 50%;
-		overflow: hidden;
-	}
-
-	/* 订单图标样式 */
-	.order-avatar {
-		width: 64rpx;
-		height: 64rpx;
-		border-radius: 16rpx;
-		padding: 12rpx;
-		background: linear-gradient(135deg, rgba(255, 253, 245, 0.9) 0%, rgba(252, 248, 240, 0.8) 100%);
-		border: 1rpx solid rgba(218, 165, 32, 0.15);
-		box-shadow:
-			0 4rpx 12rpx rgba(139, 69, 19, 0.06),
-			inset 0 1rpx 0 rgba(255, 255, 255, 0.7);
-		transition: all 0.3s ease;
-	}
-
-	.menu-avatar {
-		width: 64rpx;
-		height: 64rpx;
-		border-radius: 16rpx;
-		padding: 12rpx;
-		background: linear-gradient(135deg, rgba(255, 253, 245, 0.9) 0%, rgba(252, 248, 240, 0.8) 100%);
-		border: 1rpx solid rgba(218, 165, 32, 0.15);
-		box-shadow:
-			0 4rpx 12rpx rgba(139, 69, 19, 0.06),
-			inset 0 1rpx 0 rgba(255, 255, 255, 0.7);
-		transition: all 0.3s ease;
-	}
-
-	/* 徽标样式 */
-	.badge-container {
-		position: relative;
-	}
-
-	.badge {
-		position: absolute;
-		top: -8rpx;
-		right: -8rpx;
-		background: linear-gradient(135deg, #dc3545 0%, #c82333 100%);
-		color: #ffffff;
-		border-radius: 16rpx;
-		min-width: 28rpx;
-		height: 28rpx;
-		padding: 0 8rpx;
-		font-size: 20rpx;
+		height: 88rpx;
+		background: linear-gradient(90deg, #FF5B05 0%, #FF8E3C 100%);
+		border-radius: 44rpx;
 		display: flex;
 		align-items: center;
 		justify-content: center;
-		line-height: 1;
-		font-weight: 600;
-		box-shadow:
-			0 4rpx 12rpx rgba(220, 53, 69, 0.3),
-			0 2rpx 4rpx rgba(220, 53, 69, 0.2);
-		border: 2rpx solid rgba(255, 255, 255, 0.9);
-		animation: badgePulse 2s ease-in-out infinite;
-	}
-
-	@keyframes badgePulse {
-
-		0%,
-		100% {
-			transform: scale(1);
-			box-shadow:
-				0 4rpx 12rpx rgba(220, 53, 69, 0.3),
-				0 2rpx 4rpx rgba(220, 53, 69, 0.2);
-		}
-
-		50% {
-			transform: scale(1.05);
-			box-shadow:
-				0 6rpx 16rpx rgba(220, 53, 69, 0.4),
-				0 3rpx 6rpx rgba(220, 53, 69, 0.3);
-		}
+		gap: 8rpx;
+		box-shadow: 0 4rpx 16rpx rgba(255, 91, 5, 0.2);
 	}
 
-	/* 客服按钮样式 */
-	.contact-btn {
-		background: none;
-		width: 100%;
-		border: none;
-		padding: 0;
-		margin: 0;
-		line-height: 1;
-		display: flex;
-		align-items: center;
-		text-align: left;
-		font-weight: normal;
-		font-size: inherit;
-	}
-
-	.contact-btn::after {
-		border: none;
-	}
-
-	.flex-items {
-		display: flex;
-		align-items: center;
-	}
-
-	/* 订单标题样式 */
-	.font28 {
-		font-size: 28rpx;
-		color: #8b4513;
+	.login-text {
+		color: #FFFFFF;
+		font-size: 32rpx;
 		font-weight: 500;
-		text-shadow: 0 1rpx 2rpx rgba(218, 165, 32, 0.08);
-		letter-spacing: 0.5rpx;
 	}
 
-	/* 订单项目容器 */
-	.flex-sp-between {
-		display: flex;
-		justify-content: space-between;
-		margin-top: 24rpx;
+	.login-arrow {
+		color: #FFFFFF;
+		font-size: 32rpx;
+		font-weight: 500;
+		margin-left: 8rpx;
 	}
 
-	/* 订单项目美化 */
-	.flex-col-center {
+	.edit-button {
+		margin: 80rpx 32rpx 0;
+		height: 88rpx;
 		display: flex;
-		flex-direction: column;
 		align-items: center;
-		margin-right: 16rpx;
-		transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
-		padding: 20rpx 16rpx;
-		border-radius: 16rpx;
-		position: relative;
-		cursor: pointer;
-	}
-
-	.flex-col-center:hover {
-		transform: translateY(-3rpx) scale(1.02);
-		background: rgba(218, 165, 32, 0.03);
-	}
-
-	.flex-col-center:active {
-		transform: scale(0.96) translateY(1rpx);
-		background: rgba(218, 165, 32, 0.08);
-	}
-
-	/* 订单项目悬浮效果 */
-	.flex-col-center::before {
-		content: '';
-		position: absolute;
-		top: 0;
-		left: 0;
-		right: 0;
-		bottom: 0;
-		border-radius: 16rpx;
-		background:
-			radial-gradient(circle at center, rgba(218, 165, 32, 0.04) 0%, transparent 80%);
-		opacity: 0;
-		transition: all 0.4s ease;
-		transform: scale(0.8);
-	}
-
-	.flex-col-center:hover::before {
-		opacity: 1;
-		transform: scale(1);
-	}
-
-	.flex-col-center:active::before {
-		opacity: 1;
-		transform: scale(0.95);
-		background:
-			radial-gradient(circle at center, rgba(218, 165, 32, 0.08) 0%, transparent 70%);
-	}
-
-	/* 添加订单项目呼吸动效 */
-	.flex-col-center::after {
-		content: '';
-		position: absolute;
-		top: 50%;
-		left: 50%;
-		width: 4rpx;
-		height: 4rpx;
-		background: rgba(218, 165, 32, 0.2);
-		border-radius: 50%;
-		transform: translate(-50%, -50%);
-		animation: orderBreath 4s ease-in-out infinite;
-	}
-
-	@keyframes orderBreath {
-
-		0%,
-		100% {
-			opacity: 0.2;
-			transform: translate(-50%, -50%) scale(1);
-		}
-
-		50% {
-			opacity: 0.4;
-			transform: translate(-50%, -50%) scale(1.5);
-		}
-	}
-
-	/* 订单图标容器美化 */
-	.badge-container {
-		position: relative;
-		transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
-	}
-
-	.badge-container:hover {
-		transform: scale(1.05) rotate(2deg);
-	}
-
-	.badge-container:active {
-		transform: scale(0.95) rotate(-1deg);
-	}
-
-	/* 图标光环效果 */
-	.badge-container::before {
-		content: '';
-		position: absolute;
-		top: -8rpx;
-		left: -8rpx;
-		right: -8rpx;
-		bottom: -8rpx;
-		border-radius: 50%;
-		background:
-			conic-gradient(from 0deg,
-				transparent 0deg,
-				rgba(218, 165, 32, 0.1) 120deg,
-				transparent 240deg,
-				rgba(218, 165, 32, 0.05) 360deg);
-		opacity: 0;
-		animation: iconHalo 6s linear infinite;
-		transition: opacity 0.3s ease;
-	}
-
-	.badge-container:hover::before {
-		opacity: 1;
+		justify-content: center;
+		border: 2rpx solid #FF5B05;
+		border-radius: 44rpx;
 	}
 
-	@keyframes iconHalo {
-		0% {
-			transform: rotate(0deg);
-		}
-
-		100% {
-			transform: rotate(360deg);
-		}
+	.edit-text {
+		color: #FF5B05;
+		font-size: 32rpx;
 	}
 </style>

+ 0 - 23
pages/tabbar/social.vue

@@ -1,23 +0,0 @@
-<template>
-	<view>
-		<u-empty>
-		</u-empty>
-	</view>
-</template>
-
-<script>
-	export default {
-		data() {
-			return {
-
-			}
-		},
-		methods: {
-
-		}
-	}
-</script>
-
-<style>
-
-</style>

+ 0 - 0
pages/tabbar/shop.vue → pages/tabbar/visitor.vue


+ 0 - 94
pages/user/about-us.vue

@@ -1,94 +0,0 @@
-<template>
-	<view class="page-container">
-		<view class="font40 font-bold text-align   pad-t-40 mar-b-50">
-			昵称
-		</view>
-		<view class="inputBg ">
-			<input class="" v-model="user.account" placeholder="请输入昵称" />
-			<view class="clear-button" @click="clearInput" v-if=" user.account.length> 0">
-				×
-			</view>
-		</view>
-		<button class="saveBtn" style="background-color: #3C86F7;" type="primary" @click="save">保存</button>
-	</view>
-</template>
-
-<script>
-	import {
-		memberUpdate,
-		memberDetail
-	} from '@/config/api.js';
-	export default {
-		data() {
-			return {
-				user: {
-					account: ""
-				}
-			}
-		},
-		methods: {
-			clearInput() {
-				this.user.account = ""
-			},
-			save() {
-				memberUpdate(this.user).then((res) => {
-					if (res.code == 200) {
-						uni.$u.toast("操作成功")
-						uni.navigateBack({
-							delta: 1 // delta 表示返回的页面数,1 表示返回上一页
-						});
-					}
-				})
-			},
-			async detail() {
-				const data = await memberDetail()
-				if (data.code == 200) {
-					this.user = data.data
-				}
-			},
-		},
-		onLoad(op) {
-			console.log(op, "op")
-			this.user = op
-			this.detail()
-		}
-	}
-</script>
-
-<style>
-	.page-container {
-
-		background-color: #FFFFFF;
-		/* 设置页面背景色为白色 */
-		min-height: 100vh;
-		/* 确保背景色覆盖整个可视区域 */
-	}
-
-	.inputBg {
-		background-color: #f3f3f3;
-		width: 700rpx;
-		margin-left: 25rpx;
-		border-radius: 40rpx;
-		font-size: 38rpx;
-		padding: 20rpx;
-		position: relative;
-	}
-
-	.saveBtn {
-		margin-top: 50rpx;
-		width: 700rpx;
-		margin-left: 25rpx;
-		border-radius: 10rpx;
-	}
-
-	.clear-button {
-		position: absolute;
-		right: 10px;
-		top: 50%;
-		transform: translateY(-50%);
-		font-size: 20px;
-		margin-right: 10rpx;
-		color: #999;
-		cursor: pointer;
-	}
-</style>

+ 0 - 94
pages/user/account-change.vue

@@ -1,94 +0,0 @@
-<template>
-	<view class="page-container">
-		<view class="font40 font-bold text-align   pad-t-40 mar-b-50">
-			昵称
-		</view>
-		<view class="inputBg ">
-			<input v-model="user.account" placeholder="请输入昵称" />
-			<view class="clear-button" @click="clearInput" v-if=" user.account.length> 0">
-				×
-			</view>
-		</view>
-		<button class="saveBtn" style="background-color: #F2D0A2;" type="primary" @click="save">保存</button>
-	</view>
-</template>
-
-<script>
-	import {
-		memberUpdate,
-		memberDetail
-	} from '@/config/api.js';
-	export default {
-		data() {
-			return {
-				user: {
-					account: ""
-				}
-			}
-		},
-		methods: {
-			clearInput() {
-				this.user.account = ""
-			},
-			save() {
-				memberUpdate(this.user).then((res) => {
-					if (res.code == 200) {
-						uni.$u.toast("操作成功")
-						uni.navigateBack({
-							delta: 1 // delta 表示返回的页面数,1 表示返回上一页
-						});
-					}
-				})
-			},
-			async detail() {
-				const data = await memberDetail()
-				if (data.code == 200) {
-					this.user = data.data
-				}
-			},
-		},
-		onLoad(op) {
-			console.log(op, "op")
-			this.user = op
-			this.detail()
-		}
-	}
-</script>
-
-<style>
-	.page-container {
-
-		background-color: #FFFFFF;
-		/* 设置页面背景色为白色 */
-		min-height: 100vh;
-		/* 确保背景色覆盖整个可视区域 */
-	}
-
-	.inputBg {
-		background-color: #f3f3f3;
-		width: 700rpx;
-		margin-left: 25rpx;
-		border-radius: 40rpx;
-		font-size: 38rpx;
-		padding: 20rpx;
-		position: relative;
-	}
-
-	.saveBtn {
-		margin-top: 50rpx;
-		width: 700rpx;
-		margin-left: 25rpx;
-		border-radius: 10rpx;
-	}
-
-	.clear-button {
-		position: absolute;
-		right: 10px;
-		top: 50%;
-		transform: translateY(-50%);
-		font-size: 20px;
-		margin-right: 10rpx;
-		color: #999;
-		cursor: pointer;
-	}
-</style>

+ 0 - 181
pages/user/birthday-change.vue

@@ -1,181 +0,0 @@
-<template>
-	<view class="Date">
-		<view class="content">
-			<!-- 顶部标题 -->
-			<view class="top-title">出生日期</view>
-			<picker-view :value="value" :indicator-style="indicatorStyle" @change="bindChange" class="picker-view">
-				<picker-view-column>
-					<view class="item" v-for="(item,index) in years" :key="index">{{item}}年</view>
-				</picker-view-column>
-				<picker-view-column>
-					<view class="item" v-for="(item,index) in months" :key="index">{{item}}月</view>
-				</picker-view-column>
-				<picker-view-column>
-					<view class="item" v-for="(item,index) in days" :key="index">{{item}}日</view>
-				</picker-view-column>
-			</picker-view>
-			<!-- 底部保存按钮 -->
-			<button class="save-button" @click="ack">保存</button>
-		</view>
-	</view>
-</template>
-
-<script>
-	import {
-		memberUpdate,
-		memberDetail
-	} from '@/config/api.js';
-	export default {
-		props: {
-			selectedDate: {
-				type: String,
-				default: "",
-			},
-		},
-		data() {
-			return {
-				user: {},
-				years: [],
-				year: '',
-				months: [],
-				month: '',
-				days: [],
-				day: '',
-				value: [],
-				indicatorStyle: 'height: 50px;'
-			}
-		},
-		mounted() {
-			const date = new Date();
-			const year = date.getFullYear();
-			const month = date.getMonth() + 1;
-			const day = date.getDate();
-			const selectedYear = new Date(this.selectedDate).getFullYear() || year;
-			const selectedMonth = new Date(this.selectedDate).getMonth() + 1 || month;
-			const selectedDay = new Date(this.selectedDate).getDate() || day;
-			setTimeout(() => {
-				this.value = [this.years.indexOf(selectedYear), selectedMonth - 1, selectedDay - 1];
-				this.year = selectedYear;
-				this.month = selectedMonth < 10 ? `0${selectedMonth}` : selectedMonth;
-				this.day = selectedDay < 10 ? `0${selectedDay}` : selectedDay;
-			}, 0);
-		},
-		created() {
-			this.init();
-		},
-		onLoad(op) {
-			this.detail();
-		},
-		methods: {
-			async detail() {
-				const data = await memberDetail();
-				if (data.code == 200) {
-					this.user = data.data;
-				}
-			},
-			init() {
-				const date = new Date();
-				const year = date.getFullYear();
-				const month = date.getMonth() + 1;
-				const day = date.getDate();
-
-				// 生成年份范围(例如从 1900 年到当前年份)
-				const years = [];
-				const startYear = 1900; // 你可以根据需要调整起始年份
-				for (let i = startYear; i <= year; i++) {
-					years.push(i);
-				}
-
-				// 生成月份范围(1 到 12)
-				const months = [];
-				for (let i = 1; i <= 12; i++) {
-					months.push(i);
-				}
-
-				// 更新数据
-				this.years = years;
-				this.months = months;
-				this.getDays(year, month);
-			},
-			getDays(year, month) {
-				const day = new Date(year, month, 0).getDate();
-				const days = [];
-				for (let i = 1; i <= day; i++) {
-					days.push(i);
-				}
-				this.days = days;
-			},
-			bindChange: function(e) {
-				const val = e.detail.value;
-				this.year = this.years[val[0]];
-				this.month = this.months[val[1]];
-				this.day = this.days[val[2]];
-
-				// 切换年份或月份时,更新天数
-				this.getDays(this.year, this.month);
-			},
-			esc() {
-				this.$emit('popType', false);
-			},
-			ack() {
-				const date = new Date(this.year, this.month - 1, this.day);
-				const formattedDate = `${this.year}-${this.month}-${this.day}`; // 手动格式化日期
-				console.log(formattedDate);
-				this.user.birthday = formattedDate;
-				memberUpdate(this.user).then((res) => {
-					if (res.code == 200) {
-						uni.$u.toast("操作成功");
-						uni.navigateBack({
-							delta: 1 // delta 表示返回的页面数,1 表示返回上一页
-						});
-					}
-				});
-			},
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	.Date {
-		background-color: white;
-		min-height: 100vh;
-
-		.content {
-			width: 100%;
-			/* 内容区域宽度 */
-			background: #FFFFFF;
-			padding: 20px;
-			display: flex;
-			flex-direction: column;
-
-			.top-title {
-				text-align: center;
-				font-size: 40rpx;
-				font-weight: bold;
-				margin-bottom: 20px;
-			}
-
-			.picker-view {
-				width: 100%;
-				height: 200px;
-				/* 选择器高度 */
-				margin-bottom: 20px;
-			}
-
-			.item {
-				line-height: 30px;
-				font-size: 32rpx;
-				text-align: center;
-			}
-
-			.save-button {
-				background-color: #007aff;
-				color: white;
-				border: none;
-				border-radius: 10rpx;
-				padding: 10rpx;
-				font-size: 16px;
-			}
-		}
-	}
-</style>

+ 0 - 952
pages/user/feedback.vue

@@ -1,952 +0,0 @@
-<template>
-	<view class="feedback-container">
-		<!-- 顶部选项卡 -->
-		<view class="tab-nav">
-			<view class="tab-item" :class="{ active: currentTab === 'publish' }" @click="switchTab('publish')">
-				发布
-			</view>
-			<view class="tab-item" :class="{ active: currentTab === 'my' }" @click="switchTab('my')">
-				我的
-			</view>
-		</view>
-
-		<!-- 发布反馈表单 -->
-		<view v-if="currentTab === 'publish'" class="content">
-			<view class="category-selector" @click="openPopup">
-				<text class="category-text">{{ getCategoryText(feedback.type) || '请选择问题分类' }}</text>
-				<uni-icons @tap="selectUserPopup" color="#a8aeb4" type="right" size="20"></uni-icons>
-			</view>
-			<!-- 文本输入区域 -->
-			<textarea class="feedback-input" placeholder="如果在使用中遇到问题,请在这里向我们反馈..." v-model="feedback.content"
-				maxlength="500" @input="handleInput"></textarea>
-			<view class="word-count">{{feedback.content.length}}/500</view>
-
-			<!-- 图片上传区域 -->
-			<view class="upload-section">
-				<view class="form-label mar-b-20">上传凭证(可选)</view>
-				<uni-file-picker @delete="delFile" v-model="imageValue" fileMediatype="image" mode="grid"
-					@select="select" />
-			</view>
-
-			<!-- 表单区域 -->
-			<view class="form-section">
-				<view class="form-item">
-					<view class="label">
-						电话号码(选填)
-					</view>
-					<input type="text" placeholder="请填写电话号码" v-model="feedback.phone" />
-				</view>
-				<view class="form-item">
-					<view class="label">邮箱(选填)</view>
-					<input type="text" placeholder="请填写邮箱" v-model="feedback.email" />
-				</view>
-			</view>
-		</view>
-
-		<!-- 我的反馈列表 -->
-		<view v-else class="my-feedback">
-			<view class="user-info">
-				<image class="avatar" :src="feedback.avatar"></image>
-				<text class="username">{{feedback.account}}</text>
-			</view>
-			<view class="feedback-stats">
-				<view class="stat-item" @click="switchSubTab('feedback')"
-					:class="{ active: currentSubTab === 'feedback' }">
-					<text class="stat-value">{{feedback.totalFeedbackCount}}</text>
-					<text class="stat-label">反馈</text>
-				</view>
-				<view class="stat-item" @click="switchSubTab('reply')" :class="{ active: currentSubTab === 'reply' }">
-					<text class="stat-value">{{feedback.repliedFeedbackCount}}</text>
-					<text class="stat-label">回复</text>
-				</view>
-			</view>
-
-			<!-- 反馈列表 -->
-			<view v-if="currentSubTab === 'feedback'" class="feedback-list">
-				<view>
-					<view v-if="list && list.length > 0" class="pad-lr-20 info">
-						<view v-for="(item, index) in list" :key="index" class="feedback-item">
-							<view class="feedback-content">
-								<view class="feedback-type">
-									<text class="type-tag"
-										:class="{'type-error': item.type === 1, 'type-suggest': item.type === 2}">
-										{{ item.type === 1 ? '功能异常' : '产品建议' }}
-									</text>
-								</view>
-								<view class="main-content">{{ item.content }}</view>
-								<!-- 图片展示区域 -->
-								<view class="images-container" v-if="item.images">
-									<image v-for="(img, imgIndex) in item.images.split(',')" :key="imgIndex" :src="img"
-										mode="aspectFill" class="feedback-image"
-										@click="previewImage(img, item.images.split(','))"></image>
-								</view>
-								<!-- 联系信息 -->
-								<view class="contact-info" v-if="item.phone || item.email">
-									<text v-if="item.phone" class="contact-item">电话:{{ item.phone }}</text>
-									<text v-if="item.email" class="contact-item">邮箱:{{ item.email }}</text>
-								</view>
-								<!-- 回复内容 -->
-								<view class="reply-content" v-if="item.replyContent">
-									<view class="reply-title">官方回复:</view>
-									<view class="reply-text">{{ item.replyContent }}</view>
-								</view>
-							</view>
-						</view>
-						<!-- 加载提示 -->
-						<view v-if="isLoading" class="loading-tip">加载中...</view>
-						<!-- 没有更多数据提示 -->
-						<view v-if="!isLoading && noMoreData" class="no-more-tip">——没有更多数据了——</view>
-					</view>
-					<view v-else class="empty-state">
-						<view class="flex-items-plus">
-							<image src="../../static/images/empty.png" class="empty"></image>
-						</view>
-						<view class="font28 font-gray flex-items-plus">
-							暂无反馈数据
-						</view>
-					</view>
-				</view>
-			</view>
-
-			<!-- 回复列表 -->
-			<view v-else class="reply-list">
-				<view>
-					<view v-if="list && list.length > 0" class="pad-lr-20 info">
-						<view v-for="(item, index) in list" :key="index" class="feedback-item">
-							<view class="feedback-content">
-								<view class="feedback-type">
-									<text class="type-tag"
-										:class="{'type-error': item.type === 1, 'type-suggest': item.type === 2}">
-										{{ item.type === 1 ? '功能异常' : '产品建议' }}
-									</text>
-								</view>
-								<view class="main-content">{{ item.content }}</view>
-								<!-- 图片展示区域 -->
-								<view class="images-container" v-if="item.images">
-									<image v-for="(img, imgIndex) in item.images.split(',')" :key="imgIndex" :src="img"
-										mode="aspectFill" class="feedback-image"
-										@click="previewImage(img, item.images.split(','))"></image>
-								</view>
-								<!-- 联系信息 -->
-								<view class="contact-info" v-if="item.phone || item.email">
-									<text v-if="item.phone" class="contact-item">电话:{{ item.phone }}</text>
-									<text v-if="item.email" class="contact-item">邮箱:{{ item.email }}</text>
-								</view>
-								<!-- 回复内容 -->
-								<view class="reply-content" v-if="item.replyContent">
-									<view class="reply-title">官方回复:</view>
-									<view class="reply-text">{{ item.replyContent }}</view>
-								</view>
-							</view>
-						</view>
-						<!-- 加载提示 -->
-						<view v-if="isLoading" class="loading-tip">加载中...</view>
-						<!-- 没有更多数据提示 -->
-						<view v-if="!isLoading && noMoreData" class="no-more-tip">——没有更多数据了——</view>
-					</view>
-					<view v-else class="empty-state">
-						<view class="flex-items-plus">
-							<image src="../../static/images/empty.png" class="empty"></image>
-						</view>
-						<view class="font28 font-gray flex-items-plus">
-							暂无回复数据
-						</view>
-					</view>
-				</view>
-			</view>
-
-
-		</view>
-
-		<!-- 提交按钮 -->
-		<button class="fixed-button" @click="save" v-if="currentTab === 'publish'">提交反馈</button>
-		<!-- 分类选择弹窗 -->
-		<uni-popup ref="popup" type="bottom">
-			<view class="popup-content">
-				<view class="popup-header">
-					<text>问题分类</text>
-					<text class="close-btn" @click="closePopup">✕</text>
-				</view>
-				<view class="category-list">
-					<view class="category-item" v-for="(item, index) in categories" :key="index"
-						@click="selectCategory(item)" :class="{'active': getCategoryText(feedback.type) === item}">
-						{{ item }}
-					</view>
-				</view>
-			</view>
-		</uni-popup>
-
-		<CustomToast ref="customToast" />
-	</view>
-</template>
-
-<script>
-	import CustomToast from '../../components/CustomToast.vue';
-	import {
-		UPLOAD_URL
-	} from '../../common/config.js';
-	import {
-		feedbackSave,
-		feedbackList,
-		getFeedback
-	} from '../../config/api.js';
-	export default {
-		components: {
-			CustomToast,
-		},
-		data() {
-			return {
-				list: [],
-				isLoading: false, // 是否正在加载
-				noMoreData: false, // 是否没有更多数据
-				imageValue: [],
-				currentTab: 'publish',
-				currentSubTab: 'feedback',
-				token: "",
-				params: {
-					current: 1,
-					type: "",
-					size: 10,
-				},
-				feedback: {
-					content: "",
-					type: "",
-					images: "",
-					phone: "",
-					email: "",
-					imgList: [],
-				},
-				categories: ['功能异常或闪退', '产品功能体验与建议']
-			}
-		},
-		onReachBottom() {
-			if (!this.isLoading && !this.noMoreData) {
-				this.getList();
-			}
-		},
-		onLoad() {
-			this.token = uni.getStorageSync('access_token');
-			this.getDetail()
-		},
-		methods: {
-			getDetail() {
-				getFeedback().then((res) => {
-					this.feedback = res.data
-				})
-			},
-			getList() {
-				uni.showLoading({
-					title: '加载中...',
-					mask: true
-				});
-				this.isLoading = true;
-				feedbackList(this.params).then((res) => {
-					if (res.data.records.length === 0) {
-						this.noMoreData = true;
-					} else {
-						this.list = this.list.concat(res.data.records);
-						this.params.current++;
-					}
-					uni.hideLoading()
-					this.isLoading = false;
-				})
-			},
-			switchTab(tab) {
-				this.currentTab = tab;
-				if (tab === 'my') {
-					// 切换到"我的"时重置列表相关数据
-					this.list = [];
-					this.params.current = 1;
-					this.noMoreData = false;
-					this.getList();
-				}
-			},
-			switchSubTab(tab) {
-				this.currentSubTab = tab;
-				// 重置列表相关数据
-				this.list = [];
-				this.params.current = 1;
-				this.noMoreData = false;
-				// 设置type并获取列表
-				this.params.type = tab === 'reply' ? '1' : '';
-				this.getList();
-			},
-			handleInput(e) {
-				if (this.feedback.content.length >= 500) {
-					this.feedback.content = this.feedback.content.slice(0, 500);
-				}
-			},
-			openPopup() {
-				this.$refs.popup.open();
-			},
-			closePopup() {
-				this.$refs.popup.close();
-			},
-			selectCategory(category) {
-				this.feedback.type = category === '功能异常或闪退' ? '1' : '2';
-				this.closePopup();
-			},
-			getCategoryText(type) {
-				return type === '1' ? '功能异常或闪退' : type === '2' ? '产品功能体验与建议' : '';
-			},
-			// 获取选择的文件
-			async select(e) {
-				let list = [].concat(e.tempFiles);
-				for (let i = 0; i < list.length; i++) {
-					const result = await this.uploadFilePromise(list[i].url);
-					this.feedback.imgList.push(result.data.link);
-				}
-			},
-			uploadFilePromise(url) {
-				return new Promise((resolve, reject) => {
-					uni.uploadFile({
-						url: UPLOAD_URL,
-						filePath: url,
-						header: {
-							"Blade-Auth": this.token
-						},
-						name: 'file',
-						formData: {
-							user: 'test'
-						},
-						success: (res) => {
-							resolve(JSON.parse(res.data));
-						}
-					});
-				});
-			},
-			delFile(e) {
-				this.feedback.imgList.splice(e.index, 1); // 删除对应 index 的附件
-			},
-
-			// 提交反馈
-			save() {
-				// 校验问题分类
-				if (!this.feedback.type) {
-					uni.showToast({
-						title: "请选择问题分类",
-						icon: "none"
-					})
-					return;
-				}
-
-				// 校验反馈内容
-				if (!this.feedback.content.trim()) {
-					uni.showToast({
-						title: "请填写反馈内容",
-						icon: "none"
-					})
-					return;
-				}
-				this.feedback.images = this.feedback.imgList.join(',');
-				feedbackSave(this.feedback).then((res) => {
-					if (res.code == 200) {
-						this.$refs.customToast.showToast('提交成功');
-						this.feedback = {
-							imgList: [],
-							content: "",
-							type: "",
-							images: "",
-							phone: "",
-							email: "",
-						}
-						this.imageValue = []
-					}
-				})
-			},
-			// 预览图片
-			previewImage(current, urls) {
-				uni.previewImage({
-					current,
-					urls
-				});
-			},
-		}
-	}
-</script>
-
-<style lang="scss">
-	.aite {
-		height: 50rpx;
-		width: 50rpx;
-		margin-right: 20rpx;
-		margin-left: 10rpx;
-	}
-
-	.category-selector {
-		background-color: #fff;
-		padding: 30rpx;
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-		margin-bottom: 20rpx;
-		border-radius: 16rpx;
-		box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.03);
-		border: 1rpx solid #f0f0f0;
-
-		.category-text {
-			font-size: 28rpx;
-			color: #333;
-			font-weight: 500;
-		}
-
-		.arrow-down {
-			font-size: 24rpx;
-			color: #999;
-		}
-	}
-
-	.popup-content {
-		background-color: #fff;
-		border-radius: 24rpx 24rpx 0 0;
-		padding-bottom: env(safe-area-inset-bottom);
-
-		.popup-header {
-			padding: 32rpx;
-			display: flex;
-			justify-content: space-between;
-			align-items: center;
-			border-bottom: 1rpx solid #f5f5f5;
-
-			text {
-				font-size: 32rpx;
-				color: #333;
-				font-weight: 600;
-			}
-
-			.close-btn {
-				color: #909399;
-				font-size: 40rpx;
-				padding: 10rpx;
-			}
-		}
-
-		.category-list {
-			padding: 20rpx 32rpx;
-
-			.category-item {
-				padding: 32rpx 24rpx;
-				font-size: 28rpx;
-				color: #333;
-				border-bottom: 1rpx solid #f5f5f5;
-				transition: all 0.3s;
-
-				&.active {
-					color: #007AFF;
-					background-color: #f0f7ff;
-					border-radius: 8rpx;
-				}
-
-				&:last-child {
-					border-bottom: none;
-				}
-			}
-		}
-	}
-
-	.fixed-button {
-		position: fixed;
-		bottom: 0;
-		left: 0;
-		width: 100%;
-		padding: 15rpx;
-		background-color: #3C86F7;
-		color: white;
-		border: none;
-		font-size: 32rpx;
-		font-weight: 600;
-	}
-
-	.feedback-container {
-		min-height: 100vh;
-		background-color: #f5f5f5;
-		padding-bottom: 120rpx;
-
-		.nav-bar {
-			height: 44px;
-			background-color: #fff;
-			display: flex;
-			align-items: center;
-			padding: 0 15px;
-			position: relative;
-
-			.back-icon {
-				font-size: 20px;
-			}
-
-			.title {
-				position: absolute;
-				left: 50%;
-				transform: translateX(-50%);
-				font-size: 16px;
-				font-weight: 500;
-			}
-		}
-
-		.tabs {
-			display: flex;
-			background-color: #fff;
-			padding: 10px 15px;
-
-			.tab-item {
-				padding: 8px 20px;
-				margin-right: 15px;
-				border-radius: 20px;
-				font-size: 14px;
-
-				&.active {
-					background-color: #f0f0f0;
-				}
-			}
-		}
-
-		.content {
-			padding: 30rpx;
-
-			.feedback-input {
-				width: 100%;
-				height: 300rpx;
-				background-color: #fff;
-				border-radius: 16rpx;
-				padding: 24rpx;
-				font-size: 28rpx;
-				margin-bottom: 8rpx;
-				box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.03);
-				border: 1rpx solid #f0f0f0;
-			}
-
-			.word-count {
-				text-align: right;
-				font-size: 24rpx;
-				color: #909399;
-				padding: 8rpx 16rpx;
-				margin-bottom: 20rpx;
-			}
-
-			.upload-section {
-				background-color: #fff;
-				border-radius: 16rpx;
-				padding: 24rpx;
-				margin-bottom: 20rpx;
-				box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.03);
-				border: 1rpx solid #f0f0f0;
-
-				.form-label {
-					font-size: 28rpx;
-					color: #333;
-					font-weight: 500;
-					margin-bottom: 24rpx;
-				}
-			}
-
-			.form-section {
-				background-color: #fff;
-				border-radius: 16rpx;
-				padding: 0 24rpx;
-				box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.03);
-				border: 1rpx solid #f0f0f0;
-
-				.form-item {
-					padding: 24rpx 0;
-					border-bottom: 1rpx solid #f5f5f5;
-
-					&:last-child {
-						border-bottom: none;
-					}
-
-					.label {
-						margin-bottom: 16rpx;
-						font-size: 28rpx;
-						color: #333;
-						font-weight: 500;
-					}
-
-					input {
-						width: 100%;
-						height: 80rpx;
-						background-color: #f5f7fa;
-						border-radius: 8rpx;
-						padding: 0 24rpx;
-						font-size: 28rpx;
-						color: #333;
-
-						&::placeholder {
-							color: #909399;
-						}
-					}
-				}
-			}
-		}
-
-		.tech-support {
-			display: flex;
-			align-items: center;
-			justify-content: center;
-			padding: 20px 0;
-
-			image {
-				width: 20px;
-				height: 20px;
-				margin-right: 5px;
-			}
-
-			text {
-				font-size: 12px;
-				color: #999;
-			}
-		}
-
-		.tab-bar {
-			position: fixed;
-			bottom: 0;
-			left: 0;
-			right: 0;
-			height: 50px;
-			background-color: #fff;
-			display: flex;
-			border-top: 1px solid #f0f0f0;
-
-			.tab-bar-item {
-				flex: 1;
-				display: flex;
-				flex-direction: column;
-				align-items: center;
-				justify-content: center;
-				font-size: 12px;
-				color: #666;
-
-				&.active {
-					color: #007AFF;
-				}
-
-				.iconfont {
-					font-size: 20px;
-					margin-bottom: 2px;
-				}
-			}
-		}
-
-		.tab-nav {
-			display: flex;
-			background-color: #fff;
-			padding: 20rpx 40rpx;
-			margin-bottom: 20rpx;
-			box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.05);
-			position: sticky;
-			top: 0;
-			z-index: 100;
-
-			.tab-item {
-				flex: 1;
-				text-align: center;
-				font-size: 32rpx;
-				color: #666;
-				position: relative;
-				padding: 20rpx 0;
-				transition: all 0.3s;
-
-				&.active {
-					color: #007AFF;
-					font-weight: 600;
-
-					&::after {
-						content: '';
-						position: absolute;
-						bottom: 0;
-						left: 50%;
-						transform: translateX(-50%);
-						width: 48rpx;
-						height: 6rpx;
-						background-color: #007AFF;
-						border-radius: 4rpx;
-						transition: all 0.3s;
-					}
-				}
-			}
-		}
-
-		.my-feedback {
-			background-color: #fff;
-			margin: 20rpx;
-			border-radius: 16rpx;
-			box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.05);
-
-			.user-info {
-				padding: 40rpx;
-				text-align: center;
-				border-bottom: 1rpx solid #f5f5f5;
-
-				.avatar {
-					width: 120rpx;
-					height: 120rpx;
-					border-radius: 50%;
-					margin-bottom: 20rpx;
-					box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.1);
-				}
-
-				.username {
-					display: block;
-					font-size: 32rpx;
-					color: #333;
-					margin-bottom: 12rpx;
-					font-weight: 600;
-				}
-
-				.coins {
-					font-size: 24rpx;
-					color: #909399;
-					background-color: #f5f7fa;
-					padding: 4rpx 16rpx;
-					border-radius: 20rpx;
-					display: inline-block;
-				}
-			}
-
-			.feedback-stats {
-				display: flex;
-				padding: 30rpx 0;
-				border-bottom: 1rpx solid #f5f5f5;
-				background: linear-gradient(to bottom, #fff, #f9f9f9);
-
-				.stat-item {
-					flex: 1;
-					text-align: center;
-					position: relative;
-					cursor: pointer;
-
-					.stat-value {
-						display: block;
-						font-size: 36rpx;
-						color: #333;
-						margin-bottom: 12rpx;
-						font-weight: 600;
-					}
-
-					.stat-label {
-						font-size: 26rpx;
-						color: #909399;
-					}
-
-					&.active {
-						.stat-value {
-							color: #007AFF;
-							transform: scale(1.05);
-							transition: all 0.3s;
-						}
-
-						.stat-label {
-							color: #007AFF;
-						}
-
-						&::after {
-							content: '';
-							position: absolute;
-							bottom: -30rpx;
-							left: 50%;
-							transform: translateX(-50%);
-							width: 48rpx;
-							height: 6rpx;
-							background-color: #007AFF;
-							border-radius: 4rpx;
-						}
-					}
-				}
-			}
-
-			.feedback-list,
-			.reply-list {
-				min-height: 300rpx;
-			}
-
-			.no-feedback {
-				padding: 100rpx 0;
-				text-align: center;
-				color: #999;
-				font-size: 28rpx;
-			}
-
-			.tech-support {
-				padding: 40rpx;
-				text-align: center;
-
-				image {
-					width: 40rpx;
-					height: 40rpx;
-					vertical-align: middle;
-					margin-right: 10rpx;
-				}
-
-				text {
-					font-size: 24rpx;
-					color: #999;
-					vertical-align: middle;
-				}
-			}
-		}
-	}
-
-	.loading-tip,
-	.no-more-tip {
-		text-align: center;
-		font-size: 24rpx;
-		color: #909399;
-		padding: 30rpx 0;
-		background: transparent;
-	}
-
-	.pad-lr-20 {
-		background-color: #f5f5f5;
-		min-height: 100vh;
-		padding: 20rpx;
-	}
-
-	.feedback-item {
-		background-color: #fff;
-		border-radius: 16rpx;
-		padding: 30rpx;
-		margin-bottom: 20rpx;
-		box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.05);
-		border: 1rpx solid #f0f0f0;
-		transition: all 0.3s;
-
-		&:hover {
-			transform: translateY(-2rpx);
-			box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.08);
-		}
-
-		.feedback-type {
-			margin-bottom: 24rpx;
-			display: flex;
-			align-items: center;
-			justify-content: space-between;
-
-			.type-tag {
-				display: inline-block;
-				padding: 8rpx 24rpx;
-				border-radius: 8rpx;
-				font-size: 24rpx;
-				font-weight: 500;
-
-				&.type-error {
-					background-color: #FEF0F0;
-					color: #F56C6C;
-					border: 1rpx solid rgba(245, 108, 108, 0.2);
-				}
-
-				&.type-suggest {
-					background-color: #F0F9EB;
-					color: #67C23A;
-					border: 1rpx solid rgba(103, 194, 58, 0.2);
-				}
-			}
-		}
-
-		.main-content {
-			font-size: 28rpx;
-			color: #333;
-			line-height: 1.6;
-			margin-bottom: 24rpx;
-			padding: 0 4rpx;
-		}
-
-		.images-container {
-			display: flex;
-			flex-wrap: wrap;
-			gap: 16rpx;
-			margin-bottom: 24rpx;
-			padding: 0 4rpx;
-
-			.feedback-image {
-				width: 180rpx;
-				height: 180rpx;
-				border-radius: 12rpx;
-				box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1);
-				transition: all 0.3s;
-
-				&:active {
-					transform: scale(0.98);
-				}
-			}
-		}
-
-		.contact-info {
-			font-size: 24rpx;
-			color: #909399;
-			margin-bottom: 24rpx;
-			padding: 16rpx 24rpx;
-			background-color: #f5f7fa;
-			border-radius: 12rpx;
-
-			.contact-item {
-				margin-right: 30rpx;
-				display: inline-flex;
-				align-items: center;
-
-				&:before {
-					content: '';
-					display: inline-block;
-					width: 6rpx;
-					height: 6rpx;
-					border-radius: 50%;
-					background-color: #909399;
-					margin-right: 8rpx;
-				}
-			}
-		}
-
-		.reply-content {
-			background-color: #f0f7ff;
-			padding: 24rpx;
-			border-radius: 12rpx;
-			margin-top: 16rpx;
-			border-left: 6rpx solid #007AFF;
-
-			.reply-title {
-				font-size: 26rpx;
-				color: #333;
-				margin-bottom: 12rpx;
-				font-weight: 600;
-				display: flex;
-				align-items: center;
-
-				&:before {
-					content: '';
-					display: inline-block;
-					width: 6rpx;
-					height: 6rpx;
-					border-radius: 50%;
-					background-color: #007AFF;
-					margin-right: 8rpx;
-				}
-			}
-
-			.reply-text {
-				font-size: 26rpx;
-				color: #606266;
-				line-height: 1.6;
-				padding-left: 16rpx;
-			}
-		}
-	}
-
-	.empty-state {
-		padding: 120rpx 0;
-		text-align: center;
-		background: #fff;
-		margin: 20rpx;
-		border-radius: 16rpx;
-		box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.05);
-
-		.empty {
-			width: 240rpx;
-			height: 240rpx;
-			margin-bottom: 30rpx;
-			opacity: 0.8;
-		}
-
-		.font28 {
-			color: #909399;
-			font-size: 28rpx;
-		}
-	}
-</style>

+ 0 - 194
pages/user/forget-password.vue

@@ -1,194 +0,0 @@
-<template>
-	<view :class="{dark: pattern=='dark'}">
-		<view class="width100 flex-column-plus pad-32">
-			<view class="flex-items mar-l-40 mar-t-20">
-				<!-- <image class="logo" src="../../static/images/image5@3x.png" mode=""></image> -->
-			</view>
-			<view class="mar-t-50 pad-32 radius-16">
-				<view class="input-container flex-items">
-					<!-- <image class="login_icon mar-l-20 mar-r-20" src="../../static/images/login_email_icon@2x.png"> -->
-					<!-- </image> -->
-					<input class="mar-l-10 uni-input" v-model="user.mail" :placeholder="$t('login').r_email" />
-					<view class="clear-btn" @click="clearInput('mail')" v-if="user.mail">x</view>
-				</view>
-				<view class="input-container mar-t-16 flex-row flex-items flex-sp-between">
-					<input class="mar-l-10 uni-input" v-model="user.code" :placeholder="$t('login').code" />
-					<view class="clear-btn" @click="clearInput('code')" v-if="user.code">x</view>
-					<button type="primary" size="mini" :plain="true" @click="getCode">{{ text }}</button>
-				</view>
-				<view class="input-container mar-t-16 flex-items">
-					<!-- <image class="login_icon mar-l-20 mar-r-20" src="../../static/images/Frame@2x.png"></image> -->
-					<input class="mar-l-10 uni-input" type="password" v-model="user.password"
-						:placeholder="$t('login').r_password" />
-					<view class="clear-btn" @click="clearInput('password')" v-if="user.password">x</view>
-				</view>
-				<view class="input-container mar-t-16 flex-items">
-					<!-- <image class="login_icon mar-l-20 mar-r-20" src="../../static/images/Frame@2x.png"></image> -->
-					<input class="mar-l-10 uni-input" type="password" v-model="user.repassword"
-						:placeholder="$t('login').r_repassword" />
-					<view class="clear-btn" @click="clearInput('repassword')" v-if="user.repassword">x</view>
-				</view>
-				<button class="mar-t-32 font32" style="background-color: #3C86F7;" type="primary" :loading="loading"
-					@click="resetPWD">{{$t('login').reset_pwd}}</button>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	import {
-		getCode,
-		forgetPassword
-	} from '@/config/api.js';
-	const seconds = 60 // 60秒倒计时
-	export default {
-		data() {
-			return {
-				user: {
-					mail: '',
-					code: '',
-					password: '',
-					repassword: ''
-				},
-				code: '',
-				loading: false,
-				timer: null,
-				seconds: seconds,
-				status: false,
-				text: ''
-			}
-		},
-		onLoad() {
-			uni.setNavigationBarTitle({
-				title: this.$t('login').reset_pwd
-			})
-			this.text = this.$t('login').getcode
-		},
-		onShow() {},
-		onUnload() {
-			this.timer && this.clearTimer();
-		},
-		methods: {
-			async getCode() {
-				if (this.status) return
-
-				let reg = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/
-				if (!reg.test(this.user.mail)) return uni.$u.toast(this.$t('login').test_email)
-
-				// 请求获取验证码
-				const res = await getCode({
-					mail: this.user.mail
-				})
-				if (res.code !== 200) return uni.$u.toast(res.msg)
-
-				this.status = true
-				this.countdown()
-
-				this.timer = setInterval(() => {
-					if (this.seconds === 0) {
-						this.timer && this.clearTimer()
-						this.status = false
-						this.text = this.$t('login').getcode
-						this.seconds = seconds
-					} else {
-						this.countdown()
-					}
-				}, 1000)
-
-				uni.$u.toast(this.$t('login').send_code)
-			},
-			countdown() {
-				this.seconds--
-				this.text = this.seconds + 's'
-			},
-			clearTimer() {
-				console.log('注销定时器')
-				clearInterval(this.timer)
-				this.timer = null
-			},
-			async resetPWD() {
-				// 邮箱
-				if (this.user.mail == '') {
-					uni.$u.toast(this.$t('login').email)
-					return
-				}
-				if (this.user.password == '') {
-					uni.$u.toast(this.$t('login').password)
-					return
-				}
-				if (this.user.password != this.user.repassword) {
-					uni.$u.toast(this.$t('login').r_password_msg)
-					return
-				}
-				const data = await forgetPassword(this.user)
-				if (data.code == 200) {
-					uni.showToast({
-						title: this.$t('global').reset_psd_success_msg,
-						duration: 2000,
-						mask: true,
-						complete: res => {
-							this.$Router.replace({
-								path: '/pages/user/login'
-							})
-						}
-					});
-				}
-			},
-			clearInput(field) {
-				this.user[field] = '';
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-	page {
-		background-color: white;
-	}
-
-	.logo {
-		width: 170rpx;
-		height: 47rpx;
-	}
-
-	.uni-input {
-		height: 80rpx;
-		line-height: 80rpx;
-		border: none;
-		outline: none;
-		flex: 1;
-		padding: 0;
-	}
-
-	.input-container {
-		display: flex;
-		align-items: center;
-		border-bottom: 1px solid #ccc;
-		padding-bottom: 5rpx;
-		margin-bottom: 16rpx;
-	}
-
-	.login_icon {
-		width: 45rpx;
-		height: 45rpx;
-	}
-
-	button {
-		white-space: nowrap;
-		margin-right: 10rpx;
-	}
-
-	.clear-btn {
-		cursor: pointer;
-		padding: 0 10rpx;
-		color: #999;
-		font-size: 30rpx;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-	}
-
-	.clear-btn:hover {
-		color: #333;
-	}
-</style>

+ 0 - 135
pages/user/language.vue

@@ -1,135 +0,0 @@
-<template>
-	<view class="gender-selection-page">
-		<!-- 页面标题 -->
-		<view class="title">请选择语言</view>
-		<!-- 语言选项 -->
-		<view class="language-options">
-			<radio-group :value="selectedGender" @change="onLanguageChange">
-				<label class="language-option mar-b-16" v-for="(language, index) in languages" :key="index">
-					<span class="language-text">{{ language.name }}</span>
-					<radio :value="index" />
-				</label>
-			</radio-group>
-		</view>
-		<!-- 确认按钮 -->
-		<button class="save-button" @click="ack">确认</button>
-	</view>
-</template>
-
-<script>
-	import {
-		memberUpdate,
-		memberDetail
-	} from '@/config/api.js';
-	export default {
-		data() {
-			return {
-				// 存储选中的语言,初始值为空
-				selectedGender: '',
-				user: {},
-				languages: [{
-						name: '简体中文',
-						value: 1
-					},
-					{
-						name: 'English',
-						value: 0
-					},
-					{
-						name: '日本語',
-						value: 2
-					}
-				]
-			};
-		},
-		onLoad(op) {
-			this.detail()
-		},
-		methods: {
-			async detail() {
-				const data = await memberDetail()
-				if (data.code == 200) {
-					this.user = data.data
-					this.selectedGender = this.user.sex
-				}
-			},
-			onLanguageChange(e) {
-				this.selectedGender = e.detail.value;
-			},
-			// 确认选择
-			ack() {
-				uni.navigateBack({
-					delta: 1 // delta 表示返回的页面数,1 表示返回上一页
-				});
-				// memberUpdate(this.user).then((res) => {
-				// 	if (res.code == 200) {
-				// 		uni.$u.toast("操作成功")
-
-				// 	}
-				// })
-			},
-		}
-	};
-</script>
-
-<style scoped>
-	.gender-selection-page {
-		padding: 30px;
-		background-color: white;
-		min-height: 100vh;
-		/* 去掉 text-align: center; 避免整体内容居中 */
-	}
-
-	.title {
-		text-align: center;
-		font-size: 20px;
-		font-weight: bold;
-		margin-bottom: 20px;
-	}
-
-	.language-options {
-		display: flex;
-		flex-direction: column;
-		width: 100%;
-		/* 让语言选项部分占满父容器宽度 */
-		max-width: 600px;
-		/* 可根据需要设置最大宽度 */
-		margin: 0 auto;
-		/* 水平居中 */
-	}
-
-	.language-option {
-		padding: 10px 20px;
-		cursor: pointer;
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-		border-bottom: 1px solid #dedede;
-		/* 添加底部浅灰色线条 */
-	}
-
-	.language-option:last-child {
-		border-bottom: none;
-		/* 最后一个选项去掉底部线条 */
-	}
-
-	.language-text {
-		margin-right: auto;
-		/* 文字靠左 */
-	}
-
-	.save-button {
-		background-color: #007aff;
-		color: white;
-		border: none;
-		border-radius: 10rpx;
-		padding: 10rpx;
-		font-size: 16px;
-		width: 100%;
-		/* 让按钮占满父容器宽度 */
-		max-width: 600px;
-		/* 可根据需要设置最大宽度 */
-		margin: 50rpx auto 0;
-		/* 水平居中并设置顶部间距 */
-	}
-</style>

+ 0 - 200
pages/user/register.vue

@@ -1,200 +0,0 @@
-<template>
-	<view class="bg-white height-vh">
-		<view class="width100 flex-column-plus pad-32">
-			<view class="flex-items mar-l-40 mar-t-20">
-				<!-- <image class="logo" src="../../static/images/image5@3x.png" mode=""></image> -->
-			</view>
-			<view class=" mar-t-50 pad-32 radius-16">
-				<view class="input-container">
-					<input class="uni-input" v-model="user.email" placeholder="请输入邮箱" />
-					<view class="clear-btn" @click="clearInput('email')" v-if="user.email">x</view>
-				</view>
-				<view class="input-container mar-t-16">
-					<input class="uni-input" type="password" v-model="user.password" placeholder="请输入密码" />
-					<view class="clear-btn" @click="clearInput('password')" v-if="user.password">x</view>
-				</view>
-				<view class="input-container mar-t-16">
-					<input class="uni-input" type="password" v-model="user.repassword" placeholder="再次确认密码" />
-					<view class="clear-btn" @click="clearInput('repassword')" v-if="user.repassword">x</view>
-				</view>
-				<view class="input-container mar-t-16 flex-row flex-items flex-sp-between input-code-container">
-					<input class="uni-input input-code" v-model="user.code" placeholder="邮箱验证码" />
-					<view class="clear-btn" @click="clearInput('code')" v-if="user.code">x</view>
-					<button type="primary" size="mini" :plain="true" @click="getCode">{{ text }}</button>
-				</view>
-
-				<button class="mar-t-32 font32" style="background-color: #3C86F7;" type="primary" :loading="loading"
-					@click="register">注册</button>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	import {
-		getCode,
-		register
-	} from '@/config/api.js';
-	const seconds = 60 // 60秒倒计时
-	export default {
-		data() {
-			return {
-				user: {
-					email: '',
-					password: '',
-					repassword: '',
-					code: '',
-					memberCode: '',
-					payPwd: ''
-				},
-				loading: false,
-				timer: null,
-				seconds: seconds,
-				status: false,
-				text: ''
-			}
-		},
-		onLoad() {
-
-			this.text = "获取验证码"
-		},
-		onShow() {},
-		onUnload() {
-			this.timer && this.clearTimer();
-		},
-		methods: {
-			async getCode() {
-				if (this.status) return
-				//校验验邮箱
-				// console.log("jiaoyan", this.$utils.checkmail(this.user.email))
-				// if (!this.$utils.checkmail(this.user.email)) {
-				// 	return uni.$u.toast(this.$t('login').test_email)
-				// }
-
-				const res = await getCode({
-					mail: this.user.email
-				})
-				if (res.code !== 200) return uni.$u.toast(res.msg)
-
-				this.status = true
-				this.countdown()
-
-				this.timer = setInterval(() => {
-					if (this.seconds === 0) {
-						this.timer && this.clearTimer()
-						this.status = false
-						this.text = "获取验证码"
-						this.seconds = seconds
-					} else {
-						this.countdown()
-					}
-				}, 1000)
-
-				uni.$u.toast("验证码已发送")
-			},
-			countdown() {
-				this.seconds--
-				this.text = this.seconds + 's'
-			},
-			clearTimer() {
-				console.log('注销定时器')
-				clearInterval(this.timer)
-				this.timer = null
-			},
-			register() {
-				// 检查密码和长度
-				// let reg = /^[a-zA-Z0-9]\w{5,14}$/
-				// if (!reg.test(this.user.password)) return uni.$u.toast(this.$t('login').r_password)
-
-				// // 检查确认密码
-				// if (this.user.repassword !== this.user.password) return uni.$u.toast(this.$t('login').r_password_msg)
-
-				// // 请输入验证码
-				// if (!this.user.code || this.user.code.length !== 6) return uni.$u.toast(this.$t('login').code_len)
-
-				// 请求注册
-				register({
-					mail: this.user.email,
-					password: this.user.password,
-					memberCode: this.user.memberCode,
-					code: this.user.code,
-					payPwd: this.user.payPwd
-				}).then(res => {
-					console.log(res)
-					if (res.code === 400) return uni.$u.toast(res.msg)
-					uni.showToast({
-						title: "注册成功",
-						duration: 2000,
-						mask: true,
-						complete: res => {
-							this.$route('/pages/user/login');
-
-						}
-					});
-				})
-			},
-			clearInput(field) {
-				this.user[field] = '';
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-	page {
-		background-color: white;
-	}
-
-	.logo {
-		width: 170rpx;
-		height: 47rpx;
-	}
-
-	.uni-input {
-		height: 80rpx;
-		line-height: 80rpx;
-		border: none; // 去掉输入框边框
-		outline: none; // 去掉输入框聚焦时的外边框
-		flex: 1;
-		padding: 0;
-	}
-
-	.input-container {
-		display: flex;
-		align-items: center;
-		border-bottom: 1px solid #ccc; // 添加底部浅灰色线条
-		padding-bottom: 5rpx;
-		margin-bottom: 16rpx;
-	}
-
-	.input-code-container {
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-		box-sizing: border-box;
-	}
-
-	.input-code {
-		margin-left: 0;
-		box-sizing: border-box;
-	}
-
-	button {
-		white-space: nowrap;
-		margin-right: 10rpx;
-	}
-
-	.clear-btn {
-		cursor: pointer;
-		padding: 0 10rpx;
-		color: #999;
-		font-size: 30rpx;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-	}
-
-	.clear-btn:hover {
-		color: #333;
-	}
-</style>

+ 0 - 37
pages/user/set-avatar.vue

@@ -1,37 +0,0 @@
-<template>
-	<view :class="{dark: pattern=='dark'}">
-		<view class="flex-center mar-t-100" @click="handlerChange">
-			<u-avatar :src="avatar" size="200"></u-avatar>
-		</view>
-	</view>
-</template>
-
-<script>
-	export default {
-		data() {
-			return {
-				avatar: ''
-			}
-		},
-		onShow() {},
-		methods: {
-			handlerChange() {
-				uni.chooseImage({
-					count: 1, //默认9
-					// sizeType: ['compressed'], //可以指定是原图还是压缩图,默认二者都有
-					crop: {
-						width: 1,
-						height: 1
-					},
-					success: function(res) {
-						console.log(JSON.stringify(res.tempFilePaths));
-					}
-				});
-			}
-		}
-	}
-</script>
-
-<style>
-
-</style>

+ 0 - 118
pages/user/sex-change.vue

@@ -1,118 +0,0 @@
-<template>
-	<view class="gender-selection-page">
-		<!-- 页面标题 -->
-		<view class="title">请选择您的性别</view>
-		<!-- 性别选项 -->
-		<view class="gender-options">
-			<view class="gender-option" :class="{ 'selected': selectedGender === 1}" @click="selectGender(1)">
-				男性
-			</view>
-			<view class="gender-option" :class="{ 'selected': selectedGender ===0 }" @click="selectGender(0)">
-				女性
-			</view>
-			<view class="gender-option" :class="{ 'selected': selectedGender === 2 }" @click="selectGender(2)">
-				其他
-			</view>
-		</view>
-		<!-- 确认按钮 -->
-		<button class="save-button" @click="ack">保存</button>
-	</view>
-</template>
-
-<script>
-	import {
-		memberUpdate,
-		memberDetail
-	} from '@/config/api.js';
-	export default {
-		data() {
-			return {
-				// 存储选中的性别,初始值为空
-				selectedGender: '',
-				user: {}
-			};
-		},
-		onLoad(op) {
-			this.detail()
-
-		},
-		methods: {
-			async detail() {
-				const data = await memberDetail()
-				if (data.code == 200) {
-					this.user = data.data
-					this.selectedGender = this.user.sex
-				}
-			},
-			// 选择性别
-			selectGender(gender) {
-				this.selectedGender = gender;
-			},
-			ack() {
-				this.user.sex = this.selectedGender
-				memberUpdate(this.user).then((res) => {
-					if (res.code == 200) {
-						uni.$u.toast("操作成功")
-						uni.navigateBack({
-							delta: 1 // delta 表示返回的页面数,1 表示返回上一页
-						});
-					}
-				})
-			},
-
-		}
-	};
-</script>
-
-<style scoped>
-	.gender-selection-page {
-		padding: 30px;
-		background-color: white;
-		min-height: 100vh;
-		text-align: center;
-	}
-
-	.title {
-		font-size: 20px;
-		font-weight: bold;
-		margin-bottom: 20px;
-	}
-
-	.gender-options {
-		display: flex;
-		justify-content: center;
-		margin-bottom: 20px;
-		flex-wrap: nowrap;
-	}
-
-	.gender-option {
-		width: 100px;
-		padding: 10px 20px;
-		border: 1px solid #ccc;
-		margin: 0 10px;
-		cursor: pointer;
-		border-radius: 5px;
-		box-sizing: border-box;
-		/* 明确设置高度 */
-		height: 40px;
-		line-height: 20px;
-		/* 使文字垂直居中 */
-	}
-
-	.gender-option.selected {
-		background-color: #007aff;
-		color: white;
-		border-color: #007aff;
-		/* 确保边框颜色与背景颜色一致 */
-	}
-
-	.save-button {
-		background-color: #007aff;
-		color: white;
-		margin-top: 50rpx;
-		border: none;
-		border-radius: 10rpx;
-		padding: 10rpx;
-		font-size: 16px;
-	}
-</style>

+ 0 - 203
pages/user/sign.vue

@@ -1,203 +0,0 @@
-<template>
-	<view class="h100 pos-r" :class="{dark: pattern=='dark'}">
-		<u-navbar :title="$t('page_title.sign')" bgColor="transparent" :titleStyle="{color:'#FFFFFF'}"
-			leftIconColor="#FFFFFF" autoBack>
-		</u-navbar>
-		<image class="bg" src="/static/images/6c46bb7f7c1eaa4c7ff1dd66c9b3f82.jpg" style=""></image>
-		<view class="content-box pad-tb-32 pad-lr-48 bg-main2 flex-col-center">
-			<!-- <view class="font36 font-bold">
-				已连续签到
-				<text class="font-red font36">3</text>
-				天
-			</view>
-			<view class="font-999 mar-t-24">连续签到7天即可享受奖励翻倍</view> -->
-			<!-- 进度条 -->
-			<!-- <view class="progress">
-				<view class="active" :style="'width:'+percentage+'%'"></view>
-				<view class="flex-row-plus mar-t-32 flex-sp-between pad-l-32" style="color: #BABABA;">
-					<view class="pos-r">1天</view>
-					<view class="pos-r">2天</view>
-					<view class="pos-r">3天
-						<view class="brand flex-center">
-							<text class="u-line-1">20积分</text>
-						</view>
-						<view class="triangle"></view>
-					</view>
-					<view class="pos-r">4天</view>
-					<view class="pos-r">5天
-						<view class="brand flex-center">
-							<text class="u-line-1">66积分</text>
-						</view>
-						<view class="triangle"></view>
-					</view>
-					<view class="pos-r">6天</view>
-					<view class="pos-r">7天
-						<view class="brand flex-center">
-							<text class="u-line-1">88积分</text>
-						</view>
-						<view class="triangle"></view>
-					</view>
-				</view>
-			</view> -->
-			<view class="flex-column-plus flex-items mar-t-36">
-				<view class="btn flex-center text-align" :class="[sign?'bg-CCC-sign active':'bg-red-sign']"
-					@click="onSign">
-					<text class="font-bold font28">{{ text }}</text>
-				</view>
-			</view>
-			<!-- <view class="integral">已经获得<text class="font-red">99</text>积分</view> -->
-		</view>
-	</view>
-</template>
-
-<script>
-	import {
-		sign,
-		signDetail
-	} from "@/config/api.js"
-	export default {
-		data() {
-			return {
-				sign: false,
-				text: this.$t('user').sign_go,
-				signDay: 3
-			}
-		},
-		computed: {
-			percentage() {
-				let day = this.signDay
-				let percentage = 0
-				if (typeof day == 'string') {
-					day = parseInt(day)
-				}
-				percentage = 100 / 7 * this.signDay - (day == 7 ? 0 : 1)
-				return percentage
-			}
-		},
-		onLoad() {
-			this.getSign()
-		},
-		onShow() {
-
-		},
-		methods: {
-			getSign() {
-				signDetail().then(res => {
-					console.log(res)
-					const status = res.data
-					this.sign = status === 0 ? false : true
-					this.text = status === 0 ? this.$t('user').sign_go : this.$t('user').sign_jintian
-				})
-			},
-			onSign() {
-				if (this.sign) return
-				sign().then(res => {
-					uni.showModal({
-						content: this.$t('user').sign_success_msg,
-						showCancel: false,
-						confirmText: this.$t('global').know
-					})
-					this.sign = true,
-						this.text = this.$t('user').sign_jintian
-				})
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-	.top {
-		height: 300rpx;
-	}
-
-	.btn {
-		width: 203rpx;
-		height: 63rpx;
-		border-radius: 40rpx;
-		color: #FFFFFF;
-		box-shadow: 0px 8rpx 8rpx 0rpx rgba(245, 62, 15, 0.3200);
-
-		&.active {
-			color: #666666;
-			box-shadow: none;
-		}
-	}
-
-	.h100 {
-		height: 100vh;
-	}
-
-	.bg {
-		position: absolute;
-		top: 0;
-		left: 0;
-		right: 0;
-		bottom: 0;
-		width: 100%;
-		height: 100vh;
-		z-index: 1;
-	}
-
-	.content-box {
-		position: absolute;
-		bottom: 91rpx;
-		left: 30rpx;
-		right: 30rpx;
-		z-index: 100;
-		border-radius: 37rpx;
-
-		.integral {
-			position: absolute;
-			bottom: 30rpx;
-			right: 24rpx;
-			color: #BABABA;
-		}
-	}
-
-	.progress {
-		width: 100%;
-		height: 18rpx;
-		background: #FFC8C6;
-		position: relative;
-		border-radius: 30rpx;
-		margin-top: 78rpx;
-		margin-bottom: 88rpx;
-
-		.active {
-			position: absolute;
-			left: 0;
-			top: 0;
-			z-index: 10;
-			height: 100%;
-			background: linear-gradient(90deg, #FF7373 0%, #FC451B 100%);
-			border-radius: 18rpx;
-		}
-
-		.brand {
-			width: 110rpx;
-			height: 37rpx;
-			background: linear-gradient(90deg, #FFC296 0%, #FB9E8C 100%);
-			border-radius: 37rpx;
-			color: #ffffff;
-			position: absolute;
-			top: -78rpx;
-			left: -38rpx;
-			z-index: 2;
-		}
-
-		.triangle {
-			width: 0;
-			height: 0;
-			border-width: 12rpx;
-			border-style: solid;
-			border-left-color: transparent;
-			border-top-color: #FB9E8C;
-			border-right-color: transparent;
-			border-bottom-color: transparent;
-			position: absolute;
-			top: -44rpx;
-			left: 6rpx;
-			z-index: 1;
-		}
-	}
-</style>

+ 0 - 258
pages/user/userInfo-change.vue

@@ -1,258 +0,0 @@
-<template>
-	<view class="container">
-		<view>
-			<!-- 头部标题和副标题 -->
-			<view class="header">
-				<view class="mar-b-16">
-					<text class="title">请补全个人资料</text>
-				</view>
-
-			</view>
-
-
-
-
-		</view>
-		<!-- 头像与昵称 -->
-		<view>
-			<!-- <u-upload :fileList="fileList" @afterRead="afterRead" @delete="deletePic" name="1" :maxCount="1"> -->
-			<button open-type="chooseAvatar" @chooseavatar="onChooseAvatar" class="avatarButton">
-				<image class="avatar" :src="user.avatar||'../../static/images/avatar-upload.png'" mode="aspectFill">
-				</image>
-				<view class="font28">
-					点击授权头像
-				</view>
-			</button>
-
-			<!-- </u-upload> -->
-		</view>
-		<view class=" inputBg ">
-			<input class="" v-model="user.name" type="nickname" placeholder="请填写名称(建议用真实名字)" />
-
-		</view>
-		<view class=" inputBg ">
-			<input class="" v-model="user.phone" placeholder="请填写手机号" />
-		</view>
-		<view class=" inputBg ">
-			<view class="flex-items flex-sp-between" @click="change">
-				<view>
-
-					<text class="font30" v-if="user.deptName">
-						{{user.deptName}}
-					</text>
-					<text class="font30 font-gray2" v-else>
-						请选择部门
-					</text>
-				</view>
-				<view>
-					<uni-icons @click="change" color="#8f9499" type="right" size="20"></uni-icons>
-				</view>
-			</view>
-			<u-picker :show="show" :columns="deptList" @cancel="cancel" @confirm="confirm"
-				keyName="deptName"></u-picker>
-
-		</view>
-		<button class="saveBtn" :class="user.name&&user.phone!=''&&user.deptId!=''?'btnColorSelect':'btnColor'"
-			type="primary" @click="next">保存</button>
-
-	</view>
-</template>
-
-<script>
-	import {
-		memberDetail
-	} from '../../config/api';
-	import store from "@/store";
-	import {
-		UPLOAD_URL
-	} from '../../common/config.js'
-	export default {
-
-		data() {
-			return {
-				show: false,
-
-				deptList: [
-
-				],
-				user: {
-					name: "",
-					phone: "",
-					avatar: "",
-				},
-				fileList: [],
-				token: "",
-			};
-		},
-		created() {
-			this.token = store.state.vuex_user.access_token
-			this.user = store.state.vuex_user
-			this.user.deptId = ""
-			console.log(this.user)
-
-
-		},
-		onLoad() {
-			// this.getList()
-		},
-		methods: {
-			confirm(item) {
-				console.log(item)
-				this.user.deptId = item.value[0].id
-				this.user.deptName = item.value[0].deptName
-				this.show = false
-			},
-			cancel() {
-				this.show = false
-			},
-			change() {
-				this.show = true
-			},
-			onChooseAvatar(e) {
-				console.log(e)
-				this.uploadFilePromise(e.detail.avatarUrl).then((res) => {
-					console.log(res)
-					this.user.avatar = res.data.link
-				})
-				this.$forceUpdate()
-			},
-
-			getUserDetail() {
-				this.bladeUserGetUserDetail().then((res) => {
-					this.user = res.data
-				})
-			},
-			getList() {
-				getDeptList().then((res) => {
-					let list = []
-					list = res.data
-					this.deptList.push(list)
-					console.log(this.deptList)
-				})
-			},
-			async afterRead(event) {
-				// 当设置 mutiple 为 true 时, file 为数组格式,否则为对象格式
-				let lists = [].concat(event.file)
-				let fileListLen = this.fileList.length
-				for (let i = 0; i < lists.length; i++) {
-					const result = await this.uploadFilePromise(lists[i].thumb)
-					this.user.avatar = result.data.link
-				}
-			},
-			uploadFilePromise(url) {
-				return new Promise((resolve, reject) => {
-					let a = uni.uploadFile({
-						url: UPLOAD_URL,
-						filePath: url,
-						header: {
-							"Blade-Auth": this.token
-						},
-						name: 'file',
-						formData: {
-							user: 'test'
-						},
-						success: (res) => {
-							resolve(JSON.parse(res.data))
-						}
-					});
-				})
-			},
-			// 删除图片
-			deletePic(event) {
-				this.fileList.splice(event.index, 1)
-			},
-			next() {
-				console.log(this.user)
-				if (this.user.name == "") {
-					return uni.$u.toast('请填写名称');
-				}
-				if (this.user.phone == "") {
-					return uni.$u.toast('请填写手机号码');
-				}
-				if (this.user.deptId == "") {
-					return uni.$u.toast('请选择部门');
-				}
-				updateUser(this.user).then((res) => {
-					this.$Router.replaceAll({
-						name: 'my'
-					});
-				})
-
-			},
-
-		}
-	};
-</script>
-
-<style scoped>
-	.saveBtn {
-		margin-top: 50rpx;
-		width: 700rpx;
-		margin-left: 25rpx;
-		border-radius: 10rpx;
-		background-color: #659bf2;
-	}
-
-	button::after {
-		border: none;
-	}
-
-	.btnColorSelect {
-		background-color: #659bf2;
-	}
-
-	.btnColor {
-		background-color: #e5e5e5;
-	}
-
-	.inputBg {
-		background-color: #f3f3f3;
-		width: 700rpx;
-		margin-left: 25rpx;
-		margin-top: 50rpx;
-		border-radius: 20rpx;
-		border: none;
-		font-size: 30rpx;
-		padding: 20rpx;
-		position: relative;
-	}
-
-	.container {
-		min-height: 100vh;
-		background-color: #FFFFFF;
-	}
-
-	.header {
-		text-align: center;
-		margin-bottom: 20px;
-		padding-top: 30rpx;
-	}
-
-	.title {
-		font-size: 24px;
-		font-weight: bold;
-	}
-
-	.subtitle {
-		font-size: 16px;
-		color: #666;
-	}
-
-
-	.avatarButton {
-		background: transparent;
-		border: none;
-	}
-
-	.avatar {
-		width: 150rpx;
-		height: 150rpx;
-		border-radius: 50%;
-
-		/* border: 1px solid #ababab; */
-	}
-
-	button::after {
-		border: none;
-	}
-</style>

+ 143 - 140
packageUser/pages/login/index.vue → pagesA/public/login.vue

@@ -3,11 +3,11 @@
 		<!-- 状态栏占位 -->
 		<view class="status-bar"></view>
 
-		<!-- 水墨背景 -->
-		<view class="ink-bg">
-			<view class="ink-wash ink-1"></view>
-			<view class="ink-wash ink-2"></view>
-			<view class="ink-wash ink-3"></view>
+		<!-- 现代化背景 -->
+		<view class="modern-bg">
+			<view class="bg-shape shape-1"></view>
+			<view class="bg-shape shape-2"></view>
+			<view class="bg-shape shape-3"></view>
 		</view>
 
 		<!-- 返回按钮 -->
@@ -21,37 +21,43 @@
 		<view class="header">
 			<view class="logo-container">
 				<view class="logo-circle">
-					<image class="logo"
-						src="https://ndtk.tos-cn-guangzhou.volces.com/uploads/156adea827104e38ae0e25ec4701ecfe.jpg"
-						mode="aspectFit"></image>
+					<image class="logo" src="/static/images/logo.png" mode="aspectFit"></image>
 				</view>
 				<view class="logo-shadow"></view>
 			</view>
 			<view class="title-section">
-				<text class="title">宏匠</text>
-				<view class="title-brush"></view>
+				<text class="title">知己</text>
+				<view class="title-underline"></view>
 			</view>
-			<text class="subtitle">唐卡世界,一键开启</text>
+			<text class="subtitle">访客记录软件</text>
 		</view>
 
 		<!-- 登录按钮 -->
 		<view class="login-section">
 			<view class="btn-container">
 				<button class="wechat-btn" @tap="handleWxLogin" :class="{ 'btn-loading': isLoading }">
-					<view class="btn-ink"></view>
-					<text class="font32">一键快捷登录</text>
+					<u-icon name="weixin-fill" size="20" color="#fff" style="margin-right: 12rpx;"></u-icon>
+					<text>授权快捷登录</text>
 				</button>
 			</view>
 
-			<view class="zen-divider">
-				<view class="zen-dot"></view>
-				<view class="zen-line"></view>
-				<view class="zen-dot"></view>
+			<view class="divider">
+				<view class="divider-line"></view>
+				<text class="divider-text">或</text>
+				<view class="divider-line"></view>
+			</view>
+
+			<view class="btn-container">
+				<button class="phone-btn" @tap="handlePhoneLogin">
+					<u-icon name="phone" size="20" color="#e28669" style="margin-right: 12rpx;"></u-icon>
+					<text>手机号登录</text>
+
+				</button>
 			</view>
 
 			<view class="btn-container">
 				<button class="browse-btn" @tap="handleBrowse">
-					<text>暂不登录,先去逛逛</text>
+					<text>暂不登录,先去看看</text>
 				</button>
 			</view>
 
@@ -72,9 +78,9 @@
 
 		<!-- 底部装饰 -->
 		<view class="bottom-decoration">
-			<view class="zen-mountain">
-				<view class="mountain-peak"></view>
-				<view class="mountain-base"></view>
+			<view class="company-info">
+				<text class="company-name">知己访客记录系统</text>
+				<text class="version">v1.0.0</text>
 			</view>
 		</view>
 
@@ -268,21 +274,28 @@
 			// 跳转到隐私政策
 			goToPrivacy() {
 				uni.navigateTo({
-					url: '/packageUser/pages/richtext/index'
+					url: '/pagesA/public/richtext'
 				});
 			},
 
 			// 跳转到服务协议
 			goToService() {
 				uni.navigateTo({
-					url: '/packageUser/pages/richtext/index'
+					url: '/pagesA/public/richtext'
 				});
 			},
 
 			handleBrowse() {
 				// 直接返回首页
 				uni.switchTab({
-					url: '/pages/index/indexNew'
+					url: '/pages/index/index'
+				});
+			},
+
+			// 跳转到手机登录页面
+			handlePhoneLogin() {
+				uni.navigateTo({
+					url: '/pagesA/public/phone-login'
 				});
 			},
 
@@ -314,11 +327,11 @@
 							console.log('登录成功,发现待处理邀请,跳转到首页');
 							// 使用 reLaunch 确保首页能重新加载并检查邀请
 							uni.reLaunch({
-								url: '/pages/index/indexNew'
+								url: '/pages/index/index'
 							});
 						} else {
 							uni.switchTab({
-								url: '/pages/index/indexNew'
+								url: '/pages/index/index'
 							});
 						}
 					}
@@ -460,7 +473,7 @@
 <style lang="scss" scoped>
 	.login-page {
 		min-height: 100vh;
-		background: linear-gradient(135deg, #f8f6f0 0%, #e8e4d8 50%, #d4cfc0 100%);
+		background: #F5F5F5;
 		position: relative;
 		overflow: hidden;
 	}
@@ -470,8 +483,8 @@
 		width: 100%;
 	}
 
-	// 水墨背景
-	.ink-bg {
+	// 现代化背景
+	.modern-bg {
 		position: absolute;
 		top: 0;
 		left: 0;
@@ -480,33 +493,32 @@
 		pointer-events: none;
 		z-index: 1;
 
-		.ink-wash {
+		.bg-shape {
 			position: absolute;
 			border-radius: 50%;
-			background: radial-gradient(circle, rgba(0, 0, 0, 0.03) 0%, transparent 70%);
-
-			&.ink-1 {
-				width: 400rpx;
-				height: 400rpx;
-				top: 10%;
-				right: -100rpx;
-				transform: rotate(15deg);
-			}
 
-			&.ink-2 {
+			&.shape-1 {
 				width: 300rpx;
 				height: 300rpx;
-				top: 40%;
-				left: -50rpx;
-				transform: rotate(-20deg);
+				top: 15%;
+				right: -80rpx;
+				background: linear-gradient(135deg, rgba(255, 91, 5, 0.1) 0%, transparent 70%);
 			}
 
-			&.ink-3 {
+			&.shape-2 {
 				width: 200rpx;
 				height: 200rpx;
-				bottom: 20%;
-				right: 20%;
-				transform: rotate(45deg);
+				top: 50%;
+				left: -60rpx;
+				background: linear-gradient(135deg, rgba(41, 44, 53, 0.08) 0%, transparent 70%);
+			}
+
+			&.shape-3 {
+				width: 150rpx;
+				height: 150rpx;
+				bottom: 25%;
+				right: 15%;
+				background: linear-gradient(135deg, rgba(255, 91, 5, 0.06) 0%, transparent 70%);
 			}
 		}
 	}
@@ -520,25 +532,25 @@
 		.back-btn {
 			width: 80rpx;
 			height: 80rpx;
-			background: rgba(255, 255, 255, 0.8);
-			border: 1rpx solid rgba(0, 0, 0, 0.1);
+			background: #FFFFFF;
+			border: 1rpx solid rgba(255, 91, 5, 0.2);
 			border-radius: 50%;
 			display: flex;
 			align-items: center;
 			justify-content: center;
 			transition: all 0.3s ease;
-			box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.1);
+			box-shadow: 0 4rpx 16rpx rgba(41, 44, 53, 0.1);
 
 			&:active {
 				transform: scale(0.95);
-				box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.15);
+				background: rgba(255, 91, 5, 0.1);
 			}
 		}
 
 		.back-icon {
 			font-family: "iconfont";
 			font-size: 36rpx;
-			color: #333;
+			color: #292C35;
 		}
 	}
 
@@ -557,18 +569,18 @@
 			.logo-circle {
 				width: 200rpx;
 				height: 200rpx;
-				border-radius: 50%;
-				background: linear-gradient(135deg, #fff 0%, #f5f5f5 100%);
+				border-radius: 20rpx;
+				background: #FFFFFF;
 				display: flex;
 				align-items: center;
 				justify-content: center;
-				box-shadow: 0 8rpx 24rpx rgba(0, 0, 0, 0.1);
-				border: 2rpx solid rgba(0, 0, 0, 0.05);
+				box-shadow: 0 8rpx 24rpx rgba(41, 44, 53, 0.1);
+				border: 2rpx solid rgba(255, 91, 5, 0.2);
 
 				.logo {
 					width: 160rpx;
 					height: 160rpx;
-					border-radius: 50%;
+					border-radius: 16rpx;
 				}
 			}
 
@@ -579,7 +591,7 @@
 				transform: translateX(-50%);
 				width: 160rpx;
 				height: 20rpx;
-				background: radial-gradient(ellipse, rgba(0, 0, 0, 0.1) 0%, transparent 70%);
+				background: radial-gradient(ellipse, rgba(255, 91, 5, 0.1) 0%, transparent 70%);
 				border-radius: 50%;
 			}
 		}
@@ -591,31 +603,30 @@
 
 			.title {
 				font-size: 64rpx;
-				font-weight: normal;
-				color: #2c3e50;
-				letter-spacing: 12rpx;
-				font-family: 'KaiTi', '楷体', serif;
-				text-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.1);
+				font-weight: 600;
+				color: #292C35;
+				letter-spacing: 8rpx;
+				font-family: 'PingFang SC', 'Helvetica Neue', Arial, sans-serif;
+				text-shadow: 0 2rpx 8rpx rgba(41, 44, 53, 0.1);
 			}
 
-			.title-brush {
+			.title-underline {
 				position: absolute;
 				bottom: -10rpx;
 				left: 50%;
 				transform: translateX(-50%);
-				width: 120rpx;
+				width: 80rpx;
 				height: 4rpx;
-				background: linear-gradient(90deg, transparent, #2c3e50, transparent);
+				background: linear-gradient(90deg, transparent, #FF5B05, transparent);
 				border-radius: 2rpx;
 			}
 		}
 
 		.subtitle {
 			font-size: 28rpx;
-			color: rgba(44, 62, 80, 0.7);
+			color: rgba(41, 44, 53, 0.7);
 			font-weight: 300;
 			letter-spacing: 4rpx;
-			font-style: italic;
 			font-family: inherit;
 		}
 	}
@@ -636,61 +647,63 @@
 			justify-content: center;
 			width: 100%;
 			height: 96rpx;
-			background: linear-gradient(135deg, #fff 0%, #f8f9fa 100%);
-			border: 2rpx solid rgba(0, 0, 0, 0.08);
+			background: linear-gradient(135deg, #FF5B05 0%, #FF8E3C 100%);
+			border: none;
 			border-radius: 48rpx;
-			color: #2c3e50;
+			color: #fff;
 			font-size: 32rpx;
-			font-weight: normal;
+			font-weight: 500;
 			transition: all 0.3s ease;
-			box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.08);
-			overflow: hidden;
+			box-shadow: 0 4rpx 16rpx rgba(255, 91, 5, 0.3);
 
 			&:active {
 				transform: translateY(2rpx);
-				box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.12);
+				box-shadow: 0 2rpx 8rpx rgba(255, 91, 5, 0.4);
 			}
 
 			&.btn-loading {
-				background: linear-gradient(135deg, #f5f5f5 0%, #e8e8e8 100%);
-				color: rgba(44, 62, 80, 0.5);
+				background: linear-gradient(135deg, #FFB088 0%, #FFA573 100%);
+				color: rgba(255, 255, 255, 0.8);
 			}
+		}
 
-			.btn-ink {
-				position: absolute;
-				top: 0;
-				left: 0;
-				width: 100%;
-				height: 100%;
-				background: linear-gradient(135deg, rgba(0, 0, 0, 0.02) 0%, transparent 50%);
-				pointer-events: none;
-			}
+		.phone-btn {
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			width: 100%;
+			height: 96rpx;
+			background: #FFFFFF;
+			border: 2rpx solid #FF5B05;
+			border-radius: 48rpx;
+			color: #FF5B05;
+			font-size: 32rpx;
+			font-weight: 500;
+			transition: all 0.3s ease;
+			box-shadow: 0 4rpx 16rpx rgba(41, 44, 53, 0.1);
 
-			.wechat-icon {
-				width: 44rpx;
-				height: 44rpx;
-				margin-right: 16rpx;
+			&:active {
+				transform: translateY(2rpx);
+				background: rgba(255, 91, 5, 0.05);
 			}
 		}
 
-		.zen-divider {
+		.divider {
 			display: flex;
 			align-items: center;
 			justify-content: center;
-			margin: 50rpx 0;
+			margin: 40rpx 0;
 
-			.zen-dot {
-				width: 8rpx;
-				height: 8rpx;
-				border-radius: 50%;
-				background: rgba(44, 62, 80, 0.3);
+			.divider-line {
+				flex: 1;
+				height: 1rpx;
+				background: linear-gradient(90deg, transparent, rgba(41, 44, 53, 0.1), transparent);
 			}
 
-			.zen-line {
-				width: 100rpx;
-				height: 1rpx;
-				background: linear-gradient(90deg, transparent, rgba(44, 62, 80, 0.2), transparent);
-				margin: 0 20rpx;
+			.divider-text {
+				margin: 0 30rpx;
+				font-size: 26rpx;
+				color: rgba(41, 44, 53, 0.5);
 			}
 		}
 
@@ -701,14 +714,14 @@
 			width: 100%;
 			height: 88rpx;
 			background: transparent;
-			border: 1rpx solid rgba(44, 62, 80, 0.15);
+			border: 1rpx solid rgba(41, 44, 53, 0.2);
 			border-radius: 44rpx;
-			color: rgba(44, 62, 80, 0.7);
+			color: #292C35;
 			font-size: 28rpx;
 			transition: all 0.3s ease;
 
 			&:active {
-				background: rgba(44, 62, 80, 0.05);
+				background: rgba(41, 44, 53, 0.05);
 				transform: translateY(1rpx);
 			}
 		}
@@ -726,17 +739,17 @@
 			.zen-checkbox {
 				width: 36rpx;
 				height: 36rpx;
-				border: 2rpx solid rgba(44, 62, 80, 0.3);
-				border-radius: 50%;
+				border: 2rpx solid rgba(255, 91, 5, 0.4);
+				border-radius: 18rpx;
 				display: flex;
 				align-items: center;
 				justify-content: center;
 				transition: all 0.3s ease;
-				background: rgba(255, 255, 255, 0.8);
+				background: rgba(255, 255, 255, 0.9);
 
 				&.checked {
-					background: #2c3e50;
-					border-color: #2c3e50;
+					background: #FF5B05;
+					border-color: #FF5B05;
 				}
 
 				.zen-circle-inner {
@@ -749,12 +762,12 @@
 
 			.agreement-text {
 				font-size: 24rpx;
-				color: rgba(44, 62, 80, 0.6);
+				color: rgba(41, 44, 53, 0.6);
 				line-height: 1.5;
 
 				.link {
-					color: #2c3e50;
-					text-decoration: underline;
+					color: #FF5B05;
+					text-decoration: none;
 				}
 			}
 		}
@@ -768,31 +781,21 @@
 		transform: translateX(-50%);
 		z-index: 1;
 
-		.zen-mountain {
-			position: relative;
-			width: 200rpx;
-			height: 120rpx;
+		.company-info {
+			text-align: center;
 
-			.mountain-peak {
-				position: absolute;
-				top: 0;
-				left: 50%;
-				transform: translateX(-50%);
-				width: 0;
-				height: 0;
-				border-left: 60rpx solid transparent;
-				border-right: 60rpx solid transparent;
-				border-bottom: 80rpx solid rgba(44, 62, 80, 0.1);
+			.company-name {
+				display: block;
+				font-size: 24rpx;
+				color: rgba(41, 44, 53, 0.6);
+				margin-bottom: 8rpx;
+				font-weight: 400;
 			}
 
-			.mountain-base {
-				position: absolute;
-				bottom: 0;
-				left: 0;
-				width: 100%;
-				height: 40rpx;
-				background: linear-gradient(90deg, transparent, rgba(44, 62, 80, 0.05), transparent);
-				border-radius: 50%;
+			.version {
+				font-size: 20rpx;
+				color: rgba(41, 44, 53, 0.4);
+				font-weight: 300;
 			}
 		}
 	}
@@ -807,7 +810,7 @@
 		.modal-header {
 			text-align: center;
 			padding: 60rpx 40rpx 40rpx;
-			background: linear-gradient(135deg, #f8f6f0 0%, #e8e4d8 100%);
+			background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
 
 			.modal-title {
 				display: block;
@@ -862,7 +865,7 @@
 					height: 160rpx;
 					border-radius: 50%;
 					overflow: hidden;
-					border: 3rpx solid #e8e4d8;
+					border: 3rpx solid #4A90E2;
 
 					.avatar-preview {
 						width: 100%;
@@ -900,9 +903,9 @@
 			.confirm-btn {
 				width: 100%;
 				height: 80rpx;
-				background: linear-gradient(135deg, #2c3e50 0%, #34495e 100%);
+				background: linear-gradient(135deg, #4A90E2 0%, #357ABD 100%);
 				color: #fff;
-				border-radius: 40rpx;
+				border-radius: 12rpx;
 				font-size: 32rpx;
 				font-weight: 500;
 				border: none;
@@ -915,7 +918,7 @@
 
 				&:not(:disabled):active {
 					transform: translateY(2rpx);
-					box-shadow: 0 2rpx 8rpx rgba(44, 62, 80, 0.3);
+					box-shadow: 0 2rpx 8rpx rgba(74, 144, 226, 0.3);
 				}
 			}
 		}

+ 132 - 0
pagesA/public/phone-login.vue

@@ -0,0 +1,132 @@
+<template>
+	<view class="page-container">
+		<!-- 顶部标题区域 -->
+		<image class="bg-image " src="@/static/images/bg.png" mode="aspectFill"></image>
+		<!-- 登录表单区域 -->
+		<view class="login-form">
+			<!-- 账号输入框 -->
+			<view class="input-group">
+				<text class="input-label">账号</text>
+				<u-input v-model="account" placeholder="请输入手机号码" :border="false" class="input-field" type="number"
+					maxlength="11"></u-input>
+			</view>
+
+			<!-- 密码输入框 -->
+			<view class="input-group">
+				<text class="input-label">密码</text>
+				<u-input v-model="password" placeholder="请输入密码" :border="false" class="input-field" type="password"
+					:password-icon="true"></u-input>
+			</view>
+
+			<!-- 登录按钮 -->
+			<button class="login-btn" @tap="handleLogin">
+				<text>确定</text>
+			</button>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		wxLogin,
+	} from '@/config/api.js';
+	export default {
+		data() {
+			return {
+				account: '',
+				password: ''
+			}
+		},
+		methods: {
+			// 处理登录
+			handleLogin() {
+				if (!this.account) {
+					uni.showToast({
+						title: '请输入账号',
+						icon: 'none'
+					});
+					return;
+				}
+				if (!this.password) {
+					uni.showToast({
+						title: '请输入密码',
+						icon: 'none'
+					});
+					return;
+				}
+
+				// TODO: 实现登录逻辑
+				console.log('登录信息:', {
+					account: this.account,
+					password: this.password
+				});
+			}
+		}
+	}
+</script>
+
+<style>
+	.page-container {
+		min-height: 100vh;
+		background: #F5F5F5;
+	}
+
+	/* 背景图片 */
+	.bg-image {
+		top: 0;
+		left: 0;
+		width: 100%;
+		height: 300rpx;
+		z-index: 0;
+	}
+
+
+
+	.login-form {
+		background: #FFFFFF;
+		border-radius: 24rpx;
+		padding: 32rpx;
+		margin: 32rpx;
+		box-shadow: 0 4rpx 16rpx rgba(41, 44, 53, 0.1);
+
+		.input-group {
+			margin-bottom: 32rpx;
+
+			.input-label {
+				display: block;
+				font-size: 28rpx;
+				color: #292C35;
+				margin-bottom: 16rpx;
+			}
+
+			.input-field {
+				background: #F5F5F5;
+				border-radius: 12rpx;
+				height: 88rpx;
+				padding: 0 24rpx;
+				font-size: 28rpx;
+			}
+		}
+
+		.login-btn {
+			width: 100%;
+			height: 88rpx;
+			background: linear-gradient(135deg, #FF5B05 0%, #FF8E3C 100%);
+			border-radius: 44rpx;
+			color: #FFFFFF;
+			font-size: 32rpx;
+			font-weight: 500;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			margin-top: 48rpx;
+			border: none;
+			box-shadow: 0 4rpx 16rpx rgba(255, 91, 5, 0.3);
+
+			&:active {
+				transform: translateY(2rpx);
+				box-shadow: 0 2rpx 8rpx rgba(255, 91, 5, 0.4);
+			}
+		}
+	}
+</style>

+ 4 - 4
packageUser/pages/richtext/index.vue → pagesA/public/richtext.vue

@@ -2,11 +2,11 @@
 <template>
 	<view class="bg-FFF pad-24">
 		<text>
-			宏匠唐卡用户协议​
-			欢迎您使用清远市宏匠贸易有限公司(以下简称 “我们”)提供的 “宏匠唐卡” 小程序(以下简称 “本服务”)。为了保障您的合法权益,请您仔细阅读并同意本《用户协议》(以下简称 “本协议”)。​
+			知己访客用户协议​
+			欢迎您使用清远市宏匠贸易有限公司(以下简称 “我们”)提供的 “知己访客” 小程序(以下简称 “本服务”)。为了保障您的合法权益,请您仔细阅读并同意本《用户协议》(以下简称 “本协议”)。​
 			一、定义​
 			用户:指同意本协议并使用本服务的个人或组织。​
-			服务:指我们通过 “宏匠唐卡” 小程序向用户提供的各项功能及服务。​
+			服务:指我们通过 “知己访客” 小程序向用户提供的各项功能及服务。​
 			二、服务内容与使用规则​
 			服务内容:我们为用户提供项目管理相关的功能,包括但不限于项目创建、任务分配、进度跟踪、文档管理等。具体服务内容以小程序实际提供的为准。​
 			使用规则​
@@ -27,7 +27,7 @@
 			终止:用户可随时停止使用本服务。我们有权在用户违反本协议或法律法规时,终止向用户提供服务。​
 			七、争议解决​
 			本协议的签订、履行、解释及争议解决均适用中华人民共和国法律。如双方发生争议,应首先友好协商解决;协商不成的,任何一方均有权向有管辖权的人民法院提起诉讼。​
-			宏匠唐卡隐私协议​
+			知己访客隐私协议​
 			我们深知用户隐私保护的重要性,特制定本《隐私协议》(以下简称 “本协议”),向您说明我们如何收集、使用、存储和保护您的个人信息。​
 			一、信息收集​
 			注册信息:当您注册账号时,我们会收集您的姓名、手机号码、电子邮箱等信息,用于账号注册及身份验证。​

+ 136 - 75
pages/user/user-info.vue → pagesA/user/index.vue

@@ -7,9 +7,10 @@
 					头像
 				</view>
 				<view class="mar-l-auto mar-r-20">
-					<u-upload :fileList="fileList" @afterRead="afterRead" @delete="deletePic" name="1" :maxCount="1">
+					<u-upload :fileList="fileList" @afterRead="afterRead" name="1" :maxCount="1">
 						<view class="flex-items">
-							<image class="avatar" :src="user.avatar||'../../static/images/login.png'" mode="aspectFill">
+							<image class="avatar" :src="user.avatar||'../../static/images/avatar.png'"
+								mode="aspectFill">
 							</image>
 							<uni-icons color="#d0d7df" type="right" size="30"></uni-icons>
 						</view>
@@ -24,69 +25,54 @@
 			</view>
 			<view class="flex-items mar-b-50">
 				<view class="font32 mar-l-20">
-					昵称
+					姓名
 				</view>
-				<view class="mar-l-auto mar-r-20" @click="changeAccount">
+				<view class="mar-l-auto mar-r-20">
 					<view class="flex-items">
-						<view class="font32 font-gray">
-							{{user.account}}
-						</view>
-						<view>
-							<uni-icons color="#d0d7df" type="right" size="20"></uni-icons>
-						</view>
+						<u-input v-model="user.account" :border="false" placeholder="请输入姓名"></u-input>
 					</view>
 				</view>
 			</view>
 			<view class="flex-items mar-b-50">
 				<view class="font32 mar-l-20 ">
-					生日
+					手机号码
 				</view>
-				<view class="mar-l-auto mar-r-20" @click="changeBirthday">
+				<view class="mar-l-auto mar-r-20">
 					<view class="flex-items">
-						<view class="font32 font-gray">
-							{{user.birthday}}
-						</view>
-						<uni-icons color="#d0d7df" type="right" size="20"></uni-icons>
+						<u-input v-model="user.phone" :border="false" placeholder="请输入手机号码" type="number"></u-input>
 					</view>
 				</view>
 			</view>
-			<view class="flex-items ">
+			<view class="flex-items mar-b-50">
 				<view class="font32 mar-l-20 ">
-					性别
+					公司名称
 				</view>
-				<view class="mar-l-auto mar-r-20" @click="changeSex">
+				<view class="mar-l-auto mar-r-20 select-container">
 					<view class="flex-items">
-						<view class="font32 font-gray" v-if="user.sex==0">
-							女
-						</view>
-						<view class="font32  font-gray" v-if="user.sex==1">
-							男
-						</view>
-						<view class="font32 font-gray " v-if="user.sex==2">
-							其他
-						</view>
-						<uni-icons color="#d0d7df" type="right" size="20"></uni-icons>
+						<uni-data-select v-model="user.companyId" :localdata="companyOptions" :clear="false"
+							class="custom-select"></uni-data-select>
 					</view>
 				</view>
 			</view>
-			<!-- <view class="flex-items mar-b-20">
+			<view class="flex-items mar-b-50">
 				<view class="font32 mar-l-20 ">
-					国家/地区
+					部门
 				</view>
-				<view class="mar-l-auto mar-r-20">
+				<view class="mar-l-auto mar-r-20 select-container">
 					<view class="flex-items">
-						<view class="font32 font-gray">
-							{{user.nation}}
-						</view>
-						<uni-icons color="#d0d7df" type="right" size="20"></uni-icons>
+						<uni-data-select v-model="user.departmentId" :localdata="departmentOptions" :clear="false"
+							class="custom-select"></uni-data-select>
 					</view>
 				</view>
-			</view> -->
+			</view>
+
+
 
 		</view>
-		<view class=" flex-center">
-			<!-- <button class="loginBtn" style="background-color: #3C86F7;" type="primary"
-				@click="handlerLogout">退出登录</button> -->
+		<view class="button-container">
+			<button @click="handleSave" class="save-button">
+				保存
+			</button>
 			<button @click="handlerLogout" class="logout-button">
 				退出登录
 			</button>
@@ -99,7 +85,7 @@
 	import {
 		memberDetail,
 		memberUpdate
-	} from '../../config/api';
+	} from '@/config/api';
 
 	import {
 		mapMutations,
@@ -108,13 +94,43 @@
 	} from 'vuex';
 	import {
 		UPLOAD_URL
-	} from '../../common/config.js'
+	} from '@/common/config.js'
 	export default {
 		data() {
 			return {
 				fileList: [],
 				user: {},
 				token: "",
+				companyOptions: [{
+						value: 1,
+						text: '科技有限公司'
+					},
+					{
+						value: 2,
+						text: '网络科技公司'
+					},
+					{
+						value: 3,
+						text: '软件开发公司'
+					}
+				],
+				departmentOptions: [{
+						value: 1,
+						text: '技术部'
+					},
+					{
+						value: 2,
+						text: '产品部'
+					},
+					{
+						value: 3,
+						text: '运营部'
+					},
+					{
+						value: 4,
+						text: '市场部'
+					}
+				]
 			};
 		},
 		computed: {
@@ -130,6 +146,7 @@
 
 		methods: {
 			...mapActions(['logout']),
+
 			handlerLogout() {
 				this.logout()
 				uni.$u.toast("退出登录")
@@ -137,21 +154,7 @@
 					delta: 1 // delta 表示返回的页面数,1 表示返回上一页
 				});
 			},
-			changeSex() {
-				this.$route('/packageUser/pages/user-info/sex-change?id=' + this.user.sex + '&id=' + this.user.id)
-			},
 
-			changeAccount() {
-				this.$route('/packageUser/pages/user-info/account-change?id=' + this.user.account + '&id=' + this.user.id)
-			},
-			changeBirthday() {
-				this.$route('/packageUser/pages/user-info/birthday-change?account=' + this.user.birthdat + '&id=' + this
-					.user.id)
-			},
-			// 删除图片
-			deletePic(event) {
-				this.fileList.splice(event.index, 1)
-			},
 			// 新增图片
 			async afterRead(event) {
 				// 当设置 mutiple 为 true 时, file 为数组格式,否则为对象格式
@@ -190,25 +193,46 @@
 					uni.setStorageSync('user', this.user)
 				}
 			},
-			goPage() {
-				// this.$Router.push({ path: '/pages/user/set-avatar' });
-			}
+
+
+
+			async handleSave() {
+				try {
+					const result = await memberUpdate(this.user)
+					console.log(result, "12")
+					if (result.code === 200) {
+						console.log("12")
+
+						// 重新获取最新数据
+						await this.detail()
+						uni.showToast({
+							title: '保存成功',
+							icon: 'success',
+							duration: 2000
+						});
+					} else {
+						uni.showToast({
+							title: '保存失败',
+							icon: 'success',
+							duration: 2000
+						});
+					}
+				} catch (error) {
+					uni.showToast({
+						title: '保存失败',
+						icon: 'success',
+						duration: 2000
+					});
+					console.error('Save error:', error)
+				}
+			},
+
 		},
 
 	};
 </script>
 
 <style>
-	.arrow {
-		width: 32rpx;
-		height: 32rpx;
-		margin-top: 13rpx;
-	}
-
-	.h28 {
-		height: 56rpx;
-	}
-
 	.avatar-region {
 		box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
 		border-radius: 40rpx;
@@ -235,10 +259,6 @@
 		margin-left: 25rpx;
 	}
 
-	.avatar-container {
-		margin-left: 50rpx;
-		margin-right: 50rpx;
-	}
 
 	.avatar {
 		width: 130rpx;
@@ -247,13 +267,54 @@
 		overflow: hidden;
 	}
 
+	.button-container {
+		padding: 0 32rpx;
+		margin-top: 60rpx;
+	}
+
+	.save-button {
+		width: 100%;
+		height: 88rpx;
+		background: #2979ff;
+		border-radius: 44rpx;
+		font-size: 32rpx;
+		color: #FFFFFF;
+		margin-bottom: 30rpx;
+	}
+
 	.logout-button {
-		width: 686rpx;
+		width: 100%;
 		height: 88rpx;
 		background: #FF4748;
 		border-radius: 44rpx;
 		font-size: 32rpx;
 		color: #FFFFFF;
-		margin-top: 100rpx;
+	}
+
+	.select-container {
+		width: 400rpx;
+	}
+
+	/* 自定义下拉框样式 */
+	.custom-select {
+		width: 100% !important;
+	}
+
+	/* 确保下拉框内容可以完整显示 */
+	:deep(.uni-select) {
+		width: 100% !important;
+	}
+
+	:deep(.uni-select__input-box) {
+		width: 100% !important;
+		padding-right: 30rpx !important;
+	}
+
+	:deep(.uni-select__input-text) {
+		flex: 1;
+	}
+
+	:deep(.uni-select__selector) {
+		width: 100% !important;
 	}
 </style>

BIN
static/images/apply.png


BIN
static/images/behalf.png


BIN
static/images/bg.png


BIN
static/images/bluetooth.png


BIN
static/images/cart1.png


BIN
static/images/dengji.png


BIN
static/images/dfh1.png


BIN
static/images/dfk1.png


BIN
static/images/dizhi.png


BIN
static/images/dsh2.png


BIN
static/images/empty.png


BIN
static/images/fenxiang.png


BIN
static/images/fh.png


BIN
static/images/gift.png


BIN
static/images/gouwuche.png


BIN
static/images/hot.png


BIN
static/images/img.png


BIN
static/images/level.png


BIN
static/images/level1.png


BIN
static/images/level2.png


BIN
static/images/level3.png


BIN
static/images/login.png


BIN
static/images/logo.png


BIN
static/images/order/daifahuo.png


BIN
static/images/order/daifukuan.png


BIN
static/images/order/daipingjia.png


BIN
static/images/order/daishouhuo.png


BIN
static/images/order/wuliu.png


BIN
static/images/order/yiwancheng.png


BIN
static/images/pet.png


BIN
static/images/pj1.png


BIN
static/images/ruzhu.png


BIN
static/images/search.png


BIN
static/images/sh1.png


Alguns ficheiros não foram mostrados porque muitos ficheiros mudaram neste diff