浏览代码

修改bug

Alex 9 月之前
父节点
当前提交
340c631f2a
共有 100 个文件被更改,包括 914 次插入304 次删除
  1. 2 1
      App.vue
  2. 0 1
      note.md
  3. 151 127
      pages-home/components/BookItem.vue
  4. 1 1
      pages-mine/components/return-notice.vue
  5. 11 0
      pages-mine/pages/apply.vue
  6. 11 3
      pages-mine/pages/order-detail.vue
  7. 1 1
      pages-mine/pages/partner/order-detail.vue
  8. 7 6
      pages-mine/pages/partner/partner-apply.vue
  9. 209 164
      pages/home/components/BookItem.vue
  10. 1 0
      pages/home/index.vue
  11. 255 0
      pages/mine/components/withdrawal-progress.vue
  12. 264 0
      pages/mine/index.vue
  13. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/common/main.js.map
  14. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/common/runtime.js.map
  15. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/common/vendor.js.map
  16. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/common-dialog.js.map
  17. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/loadmore.js.map
  18. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/no-data.js.map
  19. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/pageScroll/index.js.map
  20. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/title-operate.js.map
  21. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/withdrawal-progress.js.map
  22. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-home/components/BookItem.js.map
  23. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-home/components/BookListItem.js.map
  24. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-home/components/OrderSuccessPopup.js.map
  25. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-home/components/PickupTimePicker.js.map
  26. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-home/components/SubmitConfirm.js.map
  27. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-home/pages/about-us.js.map
  28. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-home/pages/book-order.js.map
  29. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-home/pages/order-success.js.map
  30. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-home/pages/scaned-book.js.map
  31. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-home/pages/user-agreement.js.map
  32. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/components/address-card.js.map
  33. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/components/book-list.js.map
  34. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/components/category-popup.js.map
  35. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/components/city-picker.js.map
  36. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/components/detail-book-item.js.map
  37. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/components/order-actions.js.map
  38. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/components/order-item.js.map
  39. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/components/order-return-actions.js.map
  40. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/components/order-return-item.js.map
  41. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/components/order-timeline.js.map
  42. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/components/partner-order-item.js.map
  43. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/components/return-notice.js.map
  44. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/components/select-book-item.js.map
  45. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/address/add-or-update.js.map
  46. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/address/list.js.map
  47. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/apply-return.js.map
  48. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/apply.js.map
  49. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/cashier-desk.js.map
  50. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/complaint.js.map
  51. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/feedback.js.map
  52. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/notice.js.map
  53. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/order-detail.js.map
  54. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/order-page.js.map
  55. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/partner/income-detail.js.map
  56. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/partner/order-detail.js.map
  57. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/partner/partner-apply.js.map
  58. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/partner/partner-home.js.map
  59. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/partner/partner-rule.js.map
  60. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/partner/partner-status.js.map
  61. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/pay-success.js.map
  62. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/return-detail.js.map
  63. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/return-select.js.map
  64. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/rules-for-sellbooks.js.map
  65. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/setting.js.map
  66. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/wallet.js.map
  67. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/withdraw-detail.js.map
  68. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/withdraw.js.map
  69. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/home/components/BookItem.js.map
  70. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/home/components/ConfirmBooks.js.map
  71. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/home/components/FirstOrderFreePopup.js.map
  72. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/home/components/InputIsbn.js.map
  73. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/home/components/KindReminder.js.map
  74. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/home/components/ScanBookList.js.map
  75. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/home/components/ServiceGuarantee.js.map
  76. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/home/components/ServiceInfo.js.map
  77. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/home/components/notScanned.js.map
  78. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/home/index.js.map
  79. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/login/index.js.map
  80. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/mine/components/withdrawal-progress.js.map
  81. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/mine/index.js.map
  82. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.js.map
  83. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.js.map
  84. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-icons/components/uni-icons/uni-icons.js.map
  85. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.js.map
  86. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uview-ui/components/u-action-sheet/u-action-sheet.js.map
  87. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uview-ui/components/u-avatar/u-avatar.js.map
  88. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uview-ui/components/u-badge/u-badge.js.map
  89. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uview-ui/components/u-button/u-button.js.map
  90. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uview-ui/components/u-cell-group/u-cell-group.js.map
  91. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uview-ui/components/u-cell-item/u-cell-item.js.map
  92. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uview-ui/components/u-checkbox/u-checkbox.js.map
  93. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uview-ui/components/u-collapse-item/u-collapse-item.js.map
  94. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uview-ui/components/u-collapse/u-collapse.js.map
  95. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uview-ui/components/u-count-down/u-count-down.js.map
  96. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uview-ui/components/u-divider/u-divider.js.map
  97. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uview-ui/components/u-empty/u-empty.js.map
  98. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uview-ui/components/u-form-item/u-form-item.js.map
  99. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uview-ui/components/u-form/u-form.js.map
  100. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uview-ui/components/u-icon/u-icon.js.map

+ 2 - 1
App.vue

@@ -47,7 +47,8 @@ export default {
             systemInfo.windowHeight -
             (that.globalData.navBarHeight + that.globalData.menuTop + that.globalData.menuBotton);
 
-        const inviteCode = options.inviteCode || "";
+        const scene = options.query.scene ? decodeURIComponent(options.query.scene) : "";
+        const inviteCode = scene ? scene.split("=")[1] : "";
         console.log(inviteCode, options, "inviteCode");
         this.slientLogin(inviteCode);
     },

+ 0 - 1
note.md

@@ -1 +0,0 @@
-https://www.cnblogs.com/lovejielive/p/17669140.html

+ 151 - 127
pages-home/components/BookItem.vue

@@ -1,134 +1,158 @@
 <template>
-	<view class="book-item">
-		<view class="book-info">
-			<image class="book-cover" :src="book.cover" mode="aspectFill" />
-			<view class="book-detail">
-				<view class="top-info">
-					<view class="book-title">{{ book.bookName }}</view>
-					<view class="book-tags">
-						<text class="tzs tag-text" v-if="book.suit==1">套装书</text>
-						<text class="kmdb tag-text" v-if="book.maxNum>1">可卖多本</text>
-					</view>
-				</view>
-
-				<view class="flex flex-j-b flex-a-c">
-					<view class="book-price">预估价: ¥{{ book.recycleMoney }}</view>
-				</view>
-			</view>
-			<view class="delete-btn">
-				<text>×{{book.num}}</text>
-			</view>
-		</view>
-
-		<common-dialog ref="deleteDialog" title="温馨提示" @confirm="confirmDelete">
-			<text>确定删除这本图书吗?</text>
-		</common-dialog>
-	</view>
+    <view class="book-item" :class="{ disabled: book.status != 1 }">
+        <view class="book-info">
+            <view class="book-image-container">
+                <image class="book-cover" :src="book.cover" mode="aspectFill" />
+                <view class="no-recycle" v-if="book.status != 1">
+                    <text>已收满</text>
+                </view>
+            </view>
+            <view class="book-detail">
+                <view class="top-info">
+                    <view class="book-title">{{ book.bookName }}</view>
+                    <view class="book-tags">
+                        <text class="tzs tag-text" v-if="book.suit == 1">套装书</text>
+                        <text class="kmdb tag-text" v-if="book.maxNum > 1">可卖多本</text>
+                    </view>
+                </view>
+
+                <view class="flex flex-j-b flex-a-c">
+                    <view class="book-price">预估价: ¥{{ book.recycleMoney }}</view>
+                </view>
+            </view>
+            <view class="delete-btn">
+                <text>×{{ book.num }}</text>
+            </view>
+        </view>
+
+        <common-dialog ref="deleteDialog" title="温馨提示" @confirm="confirmDelete">
+            <text>确定删除这本图书吗?</text>
+        </common-dialog>
+    </view>
 </template>
 
 <script>
-	import commonDialog from '@/components/common-dialog.vue';
-	export default {
-		components: {
-			commonDialog
-		},
-		props: {
-			book: {
-				type: Object,
-				required: true
-			}
-		},
-		data() {
-			return {}
-		},
-		methods: {
-
-		}
-	}
+import commonDialog from "@/components/common-dialog.vue";
+export default {
+    components: {
+        commonDialog,
+    },
+    props: {
+        book: {
+            type: Object,
+            required: true,
+        },
+    },
+    data() {
+        return {};
+    },
+    methods: {},
+};
 </script>
 
 <style lang="scss" scoped>
-	.book-item {
-		background: #FFFFFF;
-		padding: 20rpx;
-		margin-top: 20rpx;
-		border-radius: 10rpx;
-
-		.tag-text {
-			font-family: Source Han Sans CN;
-			font-weight: 400;
-			font-size: 24rpx;
-			color: #FFFFFF;
-		}
-
-		.tzs {
-			width: 91rpx;
-			height: 30rpx;
-			background: linear-gradient(263deg, #98E05F, #0DE3AC);
-			border-radius: 2rpx;
-			padding: 4rpx 10rpx;
-			margin-right: 10rpx;
-		}
-
-		.kmdb {
-			width: 117rpx;
-			height: 30rpx;
-			background: linear-gradient(263deg, #F7CB6B, #FBA980);
-			border-radius: 2rpx;
-			padding: 4rpx 10rpx;
-			margin-right: 10rpx;
-		}
-
-		.book-info {
-			display: flex;
-			position: relative;
-
-			.book-cover {
-				width: 140rpx;
-				height: 196rpx;
-				border-radius: 8rpx;
-			}
-
-			.book-detail {
-				flex: 1;
-				margin-left: 20rpx;
-				display: flex;
-				flex-direction: column;
-				justify-content: space-between;
-
-				:v-deep .u-number-input {
-					background: #F9F9F9 !important;
-					border-radius: 6rpx;
-				}
-
-				.book-title {
-					max-width: 400rpx;
-					font-size: 28rpx;
-					color: #333;
-					line-height: 1.4;
-					margin-bottom: 20rpx;
-					display: -webkit-box;
-					-webkit-box-orient: vertical;
-					-webkit-line-clamp: 2;
-					overflow: hidden;
-					font-family: Source Han Sans CN;
-					font-weight: 400;
-				}
-
-				.book-price {
-					font-family: Source Han Sans CN;
-					font-weight: 400;
-					font-size: 24rpx;
-					color: #999999;
-				}
-			}
-
-			.delete-btn {
-				position: absolute;
-				right: 0;
-				top: -10rpx;
-				padding: 10rpx;
-			}
-		}
-	}
-</style>
+.book-item {
+    background: #ffffff;
+    padding: 20rpx;
+    margin-top: 20rpx;
+    border-radius: 10rpx;
+    &.disabled {
+        background: #f9ccc9;
+    }
+
+    .tag-text {
+        font-family: Source Han Sans CN;
+        font-weight: 400;
+        font-size: 24rpx;
+        color: #ffffff;
+    }
+
+    .tzs {
+        width: 91rpx;
+        height: 30rpx;
+        background: linear-gradient(263deg, #98e05f, #0de3ac);
+        border-radius: 2rpx;
+        padding: 4rpx 10rpx;
+        margin-right: 10rpx;
+    }
+
+    .kmdb {
+        width: 117rpx;
+        height: 30rpx;
+        background: linear-gradient(263deg, #f7cb6b, #fba980);
+        border-radius: 2rpx;
+        padding: 4rpx 10rpx;
+        margin-right: 10rpx;
+    }
+
+    .book-info {
+        display: flex;
+        position: relative;
+
+        .book-image-container {
+            position: relative;
+
+            .book-cover {
+                width: 140rpx;
+                height: 196rpx;
+                border-radius: 8rpx;
+            }
+
+            .no-recycle {
+                position: absolute;
+                bottom: 0;
+                left: 50%;
+                transform: translateX(-50%);
+                background-color: #ff5252;
+                color: #ffffff;
+                padding: 4rpx 10rpx;
+                border-radius: 4rpx 4rpx 0 0;
+                font-size: 24rpx;
+                text-align: center;
+                width: 100%;
+            }
+        }
+
+        .book-detail {
+            flex: 1;
+            margin-left: 20rpx;
+            display: flex;
+            flex-direction: column;
+            justify-content: space-between;
+
+            :v-deep .u-number-input {
+                background: #f9f9f9 !important;
+                border-radius: 6rpx;
+            }
+
+            .book-title {
+                max-width: 400rpx;
+                font-size: 28rpx;
+                color: #333;
+                line-height: 1.4;
+                margin-bottom: 20rpx;
+                display: -webkit-box;
+                -webkit-box-orient: vertical;
+                -webkit-line-clamp: 2;
+                overflow: hidden;
+                font-family: Source Han Sans CN;
+                font-weight: 400;
+            }
+
+            .book-price {
+                font-family: Source Han Sans CN;
+                font-weight: 400;
+                font-size: 24rpx;
+                color: #999999;
+            }
+        }
+
+        .delete-btn {
+            position: absolute;
+            right: 0;
+            top: -10rpx;
+            padding: 10rpx;
+        }
+    }
+}
+</style>

+ 1 - 1
pages-mine/components/return-notice.vue

@@ -4,7 +4,7 @@
         <view class="notice-content">
             <view class="title-row">
                 <text class="title">退回不通过书籍</text>
-                <text class="tag">首次免费退</text>
+                <text class="tag" v-if="orderInfo.firstOrder == 1">首次免费退</text>
             </view>
             <view class="countdown">
                 您需要在

+ 11 - 0
pages-mine/pages/apply.vue

@@ -151,6 +151,10 @@ export default {
             this.$refs.returnDialog?.openPopup();
         },
 
+        closeDialog() {
+            this.$refs.returnDialog?.closePopup()
+        },
+
         //我要取回 - 提交退回申请
         handleApplyBack() {
             // 构建请求参数
@@ -178,6 +182,7 @@ export default {
                             this.dialogContent = '提交成功'
                             this.$refs.commonDialog.openPopup()
                             uni.removeStorageSync('selectAddr')
+                            this.closeDialog()
                         } else {
                             //跳转去付款页面
                             uni.navigateTo({
@@ -199,6 +204,7 @@ export default {
         //仓库循环处理
         handleRecycleWare() {
             this.$refs.recycleWare?.openPopup()
+            this.closeDialog()
         },
 
         //仓库循环处理确认
@@ -209,6 +215,8 @@ export default {
                 if (res.code === 200) {
                     uni.$u.toast(`已补贴 ${this.orderInfo.basicRecycleMoney || 0} 到余额`)
                     uni.navigateBack()
+                } else {
+                    uni.$u.toast(res.msg || '仓库循环处理失败')
                 }
             })
         },
@@ -216,6 +224,7 @@ export default {
         //纸价回收
         handleRecycle() {
             this.$refs.recycleDialog?.openPopup()
+            this.closeDialog()
         },
 
         //纸价回收确认
@@ -226,6 +235,8 @@ export default {
                 if (res.code === 200) {
                     uni.$u.toast('纸价回收成功')
                     uni.navigateBack()
+                } else {
+                    uni.$u.toast(res.msg || '纸价回收失败')
                 }
             })
         },

+ 11 - 3
pages-mine/pages/order-detail.vue

@@ -3,7 +3,7 @@
         <!-- 时间轴组件 -->
         <order-timeline :logVoList="orderInfo.logVoList" :trackingVoList="orderInfo.trackingVoList"></order-timeline>
 
-        <!-- orderInfo.firstOrder == 1 &&  -->
+        <!--   -->
         <return-notice :orderInfo="orderInfo" v-if="orderInfo.restTime" @close="handleReturn"></return-notice>
         <!-- 书籍列表组件 -->
         <book-list :books="bookList" :totalNum="orderInfo.totalNum"></book-list>
@@ -76,7 +76,7 @@
         <u-action-sheet v-model="showReportSheet" :list="actionList" @close="showReportSheet = false"
             @click="handleReportSelect" cancelText="取消" :mask-close-able="false" :safe-area-inset-bottom="true" />
 
-        <CommonDialog ref="returnDialog" title="退回不通过书籍" :showFooter="false" @confirm="handleReturnConfirm" width="88%">
+        <CommonDialog ref="returnDialog" title="退回不通过书籍" :showFooter="false" @confirm="handleRecycleConfirm" width="88%">
             <view class="flex-a flex-j-b">
                 <button class="confirm-btn plain" @click="handleApplyBack">我要取回</button>
                 <button class="confirm-btn plain" @click="handleRecycleWare">仓库循环处理</button>
@@ -87,7 +87,7 @@
             </view>
         </CommonDialog>
 
-        <CommonDialog ref="recycleDialog" title="是否按纸价回收" @confirm="handleReturnConfirm">
+        <CommonDialog ref="recycleDialog" title="是否按纸价回收" @confirm="handleRecycleConfirm">
             补贴 ¥{{ orderInfo.basicRecycleMoney || 0 }} 到余额
         </CommonDialog>
         <CommonDialog ref="recycleWare" title="是否仓库循环处理" @confirm="handleRecycleWareConfirm">
@@ -166,6 +166,7 @@ export default {
         },
         //仓库循环处理
         handleRecycleWare() {
+            this.closeDialog()
             this.$refs.recycleWare?.openPopup()
         },
         //仓库循环处理确认
@@ -175,6 +176,7 @@ export default {
                 orderId: this.orderInfo.orderId
             }).then(res => {
                 if (res.code === 200) {
+                    this.$refs.recycleDialog?.closePopup()
                     uni.$u.toast(`已补贴 ${this.orderInfo.basicRecycleMoney || 0} 到余额`)
                     this.getOrderInfo(this.orderInfo.orderId)
                 }
@@ -182,6 +184,7 @@ export default {
         },
         //纸价回收
         handleRecycle() {
+            this.closeDialog()
             this.$refs.recycleDialog?.openPopup()
         },
         //纸价回收确认
@@ -190,17 +193,22 @@ export default {
                 orderId: this.orderInfo.orderId
             }).then(res => {
                 if (res.code === 200) {
+                    this.$refs.recycleDialog?.closePopup()
                     uni.$u.toast('纸价回收成功')
                     this.getOrderInfo(this.orderInfo.orderId)
                 }
             })
         },
+        closeDialog() {
+            this.$refs.returnDialog?.closePopup()
+        },
         //我要取回
         handleApplyBack() {
             console.log(this.orderInfo, 'xxxxx')
             uni.navigateTo({
                 url: `/pages-mine/pages/apply?orderId=${this.orderInfo.orderId}`
             })
+            this.closeDialog()
         }
     }
 }

+ 1 - 1
pages-mine/pages/partner/order-detail.vue

@@ -29,7 +29,7 @@ export default {
         return {
             tabList: [{
                 name: '全部',
-                status: "NULL"
+                status: ""
             },
             {
                 name: '未结算',

+ 7 - 6
pages-mine/pages/partner/partner-apply.vue

@@ -18,28 +18,28 @@
 
             <!-- 基本信息区域 -->
             <view class="form-section">
-                <u-form-item label="姓名" prop="name">
+                <u-form-item label="姓名" prop="name" required>
                     <u-input v-model="form.name" placeholder="请输入真实姓名" />
                 </u-form-item>
 
-                <u-form-item label="地址选择" prop="address">
+                <u-form-item label="地址选择" prop="address" required>
                     <uni-data-picker v-model="selAddressCodes" :localdata="dataList" placeholder="请选择所在区县"
                         popup-title="请选择所在区县" @change="cityChange"></uni-data-picker>
                 </u-form-item>
 
-                <u-form-item label="学校" prop="school">
+                <u-form-item label="学校" prop="school" required>
                     <u-input v-model="form.school" placeholder="请输入学校" />
                 </u-form-item>
 
-                <u-form-item label="院系" prop="faculties">
+                <u-form-item label="院系" prop="faculties" required>
                     <u-input v-model="form.faculties" placeholder="请输入院系" />
                 </u-form-item>
 
-                <u-form-item label="专业" prop="specialty">
+                <u-form-item label="专业" prop="specialty" required>
                     <u-input v-model="form.specialty" placeholder="请输入专业" />
                 </u-form-item>
 
-                <u-form-item label="年级" prop="grade">
+                <u-form-item label="年级" prop="grade" required>
                     <u-input v-model="form.grade" placeholder="请输入年级" />
                 </u-form-item>
             </view>
@@ -83,6 +83,7 @@ export default {
                 faculties: [{ required: true, message: "请输入院系" }],
                 specialty: [{ required: true, message: "请输入专业" }],
                 provinceId: [{ required: true, message: "请选择所在区县" }],
+                grade: [{ required: true, message: "请输入年级" }],
             },
             // 省市区相关数据
             selAddressCodes: [],

+ 209 - 164
pages/home/components/BookItem.vue

@@ -1,171 +1,216 @@
 <template>
-	<view class="book-item">
-		<view class="book-info">
-			<u-image width="160rpx" height="160rpx" :src="book.cover" mode="aspectFill" />
-			<view class="book-detail">
-				<view class="top-info">
-					<view class="book-title">{{ book.bookName }}</view>
-					<view class="book-tags">
-						<text class="tzs tag-text" v-if="book.suit==1">套装书</text>
-						<text class="kmdb tag-text" v-if="book.maxNum>1">可卖多本</text>
-					</view>
-				</view>
-
-				<view class="flex flex-j-b flex-a-c">
-					<view class="book-price">回收价 <text style="font-weight: 600;color: #FF0000;margin-left: 8rpx;"> ¥{{ recycleMoney }}</text></view>
-					<u-number-box class="number-box" bg-color="#38c148" color="#ffffff" v-model="book.num" :min="1"
-						:max="book.maxNum||40" @blur="onQuantityChange" @minus="addReduceNum(-1)"
-						@plus="addReduceNum(1)"></u-number-box>
-				</view>
-			</view>
-			<view class="delete-btn" @tap="onDelete">
-				<u-icon name="close" size="26" color="#999"></u-icon>
-			</view>
-		</view>
-
-		<common-dialog ref="deleteDialog" title="温馨提示" @confirm="confirmDelete">
-			<text>确定删除这本图书吗?</text>
-		</common-dialog>
-	</view>
+    <view class="book-item" :class="{ disabled: book.status != 1 }">
+        <view class="book-info">
+            <view class="book-image-container">
+                <u-image width="160rpx" height="160rpx" :src="book.cover" mode="aspectFill" />
+                <view class="no-recycle" v-if="book.status != 1">
+                    <text>已收满</text>
+                </view>
+            </view>
+            <view class="book-detail">
+                <view class="top-info">
+                    <view class="book-title">{{ book.bookName }}</view>
+
+                    <view class="book-tags">
+                        <text class="tzs tag-text" v-if="book.suit == 1">套装书</text>
+                        <text class="kmdb tag-text" v-if="book.maxNum > 1">可卖多本</text>
+                    </view>
+                </view>
+
+                <view class="flex flex-j-b flex-a-c">
+                    <view class="book-price"
+                        >回收价
+                        <text style="font-weight: 600; color: #ff0000; margin-left: 8rpx">
+                            ¥{{ recycleMoney }}</text
+                        ></view
+                    >
+                    <u-number-box
+                        class="number-box"
+                        bg-color="#38c148"
+                        color="#ffffff"
+                        v-model="book.num"
+                        :min="1"
+                        :max="book.maxNum || 40"
+                        @blur="onQuantityChange"
+                        @minus="addReduceNum(-1)"
+                        @plus="addReduceNum(1)"
+                        :disabled="book.status != 1"
+                    ></u-number-box>
+                </view>
+            </view>
+            <view class="delete-btn" @tap="onDelete">
+                <u-icon name="close" size="26" color="#999"></u-icon>
+            </view>
+        </view>
+
+        <common-dialog ref="deleteDialog" title="温馨提示" @confirm="confirmDelete">
+            <text>确定删除这本图书吗?</text>
+        </common-dialog>
+    </view>
 </template>
 
 <script>
-	import commonDialog from '@/components/common-dialog.vue';
-	export default {
-		components: {
-			commonDialog
-		},
-		props: {
-			book: {
-				type: Object,
-				required: true
-			}
-		},
-		data() {
-			return {}
-		},
-		computed: {
-		    recycleMoney() {
-		        return  (this.book.recyclePrice * (this.book.num || 1)).toFixed(2)
-		    }
-		},
-		methods: {
-			onDelete() {
-				this.$refs.deleteDialog.openPopup()
-			},
-			confirmDelete() {
-				this.$emit('delete', this.book)
-			},
-			// /api/token/order/addReduceNum
-			addReduceNum(changeNum) {
-				uni.$u.http.post('/token/order/addReduceNum', {
-					orderId: this.book.orderId,
-					isbn: this.book.isbn,
-					changeNum
-				}).then(res => {
-					if (res.data == 1) {
-						this.$emit('quantity-change', this.book)
-					}
-				})
-			},
-			onQuantityChange(data) {
-				uni.$u.http.post('/token/order/changeNum', {
-					orderId: this.book.orderId,
-					isbn: this.book.isbn,
-					afterNum: data.value
-				}).then(res => {
-					if (res.data == 1) {
-						this.$emit('quantity-change', this.book)
-					}
-				})
-			}
-		}
-	}
+import commonDialog from "@/components/common-dialog.vue";
+export default {
+    components: {
+        commonDialog,
+    },
+    props: {
+        book: {
+            type: Object,
+            required: true,
+        },
+    },
+    data() {
+        return {};
+    },
+    computed: {
+        recycleMoney() {
+            return (this.book.recyclePrice * (this.book.num || 1)).toFixed(2);
+        },
+    },
+    methods: {
+        onDelete() {
+            this.$refs.deleteDialog.openPopup();
+        },
+        confirmDelete() {
+            this.$emit("delete", this.book);
+        },
+        // /api/token/order/addReduceNum
+        addReduceNum(changeNum) {
+            uni.$u.http
+                .post("/token/order/addReduceNum", {
+                    orderId: this.book.orderId,
+                    isbn: this.book.isbn,
+                    changeNum,
+                })
+                .then((res) => {
+                    if (res.data == 1) {
+                        this.$emit("quantity-change", this.book);
+                    }
+                });
+        },
+        onQuantityChange(data) {
+            uni.$u.http
+                .post("/token/order/changeNum", {
+                    orderId: this.book.orderId,
+                    isbn: this.book.isbn,
+                    afterNum: data.value,
+                })
+                .then((res) => {
+                    if (res.data == 1) {
+                        this.$emit("quantity-change", this.book);
+                    }
+                });
+        },
+    },
+};
 </script>
 
 <style lang="scss" scoped>
-	.book-item {
-		background: #FFFFFF;
-		padding: 20rpx;
-		margin-top: 20rpx;
-		border-radius: 10rpx;
-
-		.book-info {
-			display: flex;
-            align-items: center;
-			position: relative;
-
-			.book-cover {
-				width: 140rpx;
-				height: 196rpx;
-				border-radius: 8rpx;
-			}
-
-			.tag-text {
-				font-family: Source Han Sans CN;
-				font-weight: 400;
-				font-size: 24rpx;
-				color: #FFFFFF;
-			}
-
-			.tzs {
-				width: 91rpx;
-				height: 30rpx;
-				background: linear-gradient(263deg, #98E05F, #0DE3AC);
-				border-radius: 2rpx;
-				padding: 4rpx 10rpx;
-				margin-right: 10rpx;
-			}
-
-			.kmdb {
-				width: 117rpx;
-				height: 30rpx;
-				background: linear-gradient(263deg, #F7CB6B, #FBA980);
-				border-radius: 2rpx;
-				padding: 4rpx 10rpx;
-				margin-right: 10rpx;
-			}
-
-			.book-detail {
-				flex: 1;
-				margin-left: 20rpx;
-				display: flex;
-				flex-direction: column;
-				justify-content: space-between;
-
-				:v-deep .u-number-input {
-					background: #F9F9F9 !important;
-					border-radius: 6rpx;
-				}
-
-				.book-title {
-					max-width: 400rpx;
-					font-size: 28rpx;
-					color: #333;
-					line-height: 1.4;
-					margin-bottom: 20rpx;
-					display: -webkit-box;
-					-webkit-box-orient: vertical;
-					-webkit-line-clamp: 2;
-					overflow: hidden;
-					font-family: Source Han Sans CN;
-					font-weight: bold;
-				}
-
-				.book-price {
-					font-family: Source Han Sans CN;
-					font-weight: 400;
-					font-size: 24rpx;
-					color: #999999;
-				}
-			}
-
-			.delete-btn {
-				position: absolute;
-				right: 0;
-				top: -10rpx;
-				padding: 10rpx;
-			}
-		}
-	}
-</style>
+.book-item {
+    background: #ffffff;
+    padding: 20rpx;
+    margin-top: 20rpx;
+    border-radius: 10rpx;
+    &.disabled {
+        background: #f9ccc9;
+    }
+
+    .book-info {
+        display: flex;
+        align-items: center;
+        position: relative;
+
+        .book-image-container {
+            position: relative;
+            
+            .no-recycle {
+                position: absolute;
+                bottom: 0;
+                left: 50%;
+                transform: translateX(-50%);
+                background-color: #ff5252;
+                color: #ffffff;
+                padding: 4rpx 10rpx;
+                border-radius: 4rpx 4rpx 0 0;
+                font-size: 24rpx;
+                text-align: center;
+                width: 100%;
+            }
+        }
+
+        .book-cover {
+            width: 140rpx;
+            height: 196rpx;
+            border-radius: 8rpx;
+        }
+
+        .tag-text {
+            font-family: Source Han Sans CN;
+            font-weight: 400;
+            font-size: 24rpx;
+            color: #ffffff;
+        }
+
+        .tzs {
+            width: 91rpx;
+            height: 30rpx;
+            background: linear-gradient(263deg, #98e05f, #0de3ac);
+            border-radius: 2rpx;
+            padding: 4rpx 10rpx;
+            margin-right: 10rpx;
+        }
+
+        .kmdb {
+            width: 117rpx;
+            height: 30rpx;
+            background: linear-gradient(263deg, #f7cb6b, #fba980);
+            border-radius: 2rpx;
+            padding: 4rpx 10rpx;
+            margin-right: 10rpx;
+        }
+
+        .book-detail {
+            flex: 1;
+            margin-left: 20rpx;
+            display: flex;
+            flex-direction: column;
+            justify-content: space-between;
+
+            :v-deep .u-number-input {
+                background: #f9f9f9 !important;
+                border-radius: 6rpx;
+            }
+
+            .book-title {
+                max-width: 400rpx;
+                font-size: 28rpx;
+                color: #333;
+                line-height: 1.4;
+                margin-bottom: 20rpx;
+                display: -webkit-box;
+                -webkit-box-orient: vertical;
+                -webkit-line-clamp: 2;
+                overflow: hidden;
+                font-family: Source Han Sans CN;
+                font-weight: bold;
+            }
+
+            .book-price {
+                font-family: Source Han Sans CN;
+                font-weight: 400;
+                font-size: 24rpx;
+                color: #999999;
+            }
+        }
+
+        .delete-btn {
+            position: absolute;
+            right: 0;
+            top: -10rpx;
+            padding: 10rpx;
+        }
+    }
+}
+</style>

+ 1 - 0
pages/home/index.vue

@@ -350,6 +350,7 @@ export default {
                     let code = res.data.code;
                     if (code == 1) {
                         res.data.num = 1;
+                        res.data.status = 1;
                         res.data.recyclePrice = res.data.recycleMoney;
                         this.currentBook = res.data;
                         this.bookList.push(res.data);

+ 255 - 0
pages/mine/components/withdrawal-progress.vue

@@ -0,0 +1,255 @@
+<template>
+    <u-popup
+        v-model="popupShow"
+        mode="center"
+        border-radius="30"
+        :mask-close-able="true"
+        @close="handleClose"
+        width="86%"
+    >
+        <view class="modal-content">
+            <view class="container-form">
+                <!-- Header with progress title -->
+                <view class="icon-wrapper">
+                    <image src="/static/tabbar/home2.png" class="tip-icon"></image>
+                    <text class="tip-text">提现进度</text>
+                </view>
+
+                <!-- Progress steps -->
+                <view class="progress-steps">
+                    <!-- Step 1: 申请提现 -->
+                    <view class="step-item completed">
+                        <u-icon class="step-icon yuan-icon" name="red-packet" color="#ffffff" size="40"></u-icon>
+                        <view class="step-label">申请提现</view>
+                    </view>
+
+                    <!-- Arrow 1 -->
+                    <view class="step-arrow">
+                        <text class="arrow-text">→</text>
+                    </view>
+
+                    <!-- Step 2: 后台审核 -->
+                    <view
+                        class="step-item"
+                        :class="{ completed: orderInfo.status > 1, current: orderInfo.status == 1 }"
+                    >
+                        <u-icon class="step-icon yuan-icon" name="account" color="#ffffff" size="40"></u-icon>
+                        <view class="step-label">后台审核</view>
+                    </view>
+
+                    <!-- Arrow 2 -->
+                    <view class="step-arrow">
+                        <text class="arrow-text">→</text>
+                    </view>
+
+                    <!-- Step 3: 申请人确认 -->
+                    <view
+                        class="step-item"
+                        :class="{ completed: orderInfo.status > 2, current: orderInfo.status == 2 }"
+                    >
+                        <u-icon class="step-icon yuan-icon" name="checkmark-circle" color="#ffffff" size="40"></u-icon>
+                        <view class="step-label">申请人确认</view>
+                    </view>
+                </view>
+
+                <!-- Action button - based on status -->
+                <view class="action-button" @click="handleAction">
+                    <!-- Status 1: 知道了 button -->
+                    <text v-if="orderInfo.status == 1">知道了</text>
+                    <!-- Status 2: 确认立即到账 button -->
+                    <text v-else-if="orderInfo.status == 2">确认立即到账</text>
+                </view>
+            </view>
+        </view>
+    </u-popup>
+</template>
+
+<script>
+export default {
+    name: "WithdrawalProgress",
+    props: {
+        orderInfo: {
+            type: Object,
+            default: () => ({
+                status: 1,
+                orderNo: "",
+            }),
+        },
+    },
+    data() {
+        return {
+            popupShow: false,
+        };
+    },
+    methods: {
+        // Open modal
+        openModal() {
+            this.popupShow = true;
+        },
+        // Close modal
+        handleClose() {
+            this.popupShow = false;
+        },
+
+        // Handle button action based on status
+        handleAction() {
+            if (this.orderInfo.status == 1) {
+                // For status 1: Close the modal for "知道了" button
+                this.popupShow = false;
+            } else if (this.orderInfo.status == 2) {
+                // For status 2: Emit confirm event for "确认立即到账" button
+                this.$emit("confirm", this.orderInfo);
+            }
+        },
+    },
+};
+</script>
+
+<style lang="scss" scoped>
+.modal-content {
+    background: linear-gradient(-90deg, #98e05f, #0de3ac);
+    border-radius: 26rpx;
+    overflow: hidden;
+    padding: 16rpx;
+
+    .container-form {
+        background: #effcf3;
+        border-radius: 26rpx;
+        padding: 30rpx;
+        padding-bottom: 40rpx;
+        display: flex;
+        flex-direction: column;
+        align-items: center;
+    }
+}
+
+.icon-wrapper {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    margin-bottom: 60rpx;
+
+    .tip-icon {
+        width: 48rpx;
+        height: 48rpx;
+        margin-right: 10rpx;
+    }
+
+    .tip-text {
+        font-family: Source Han Sans CN;
+        font-weight: bold;
+        font-size: 36rpx;
+        color: #37c148;
+    }
+}
+
+.progress-steps {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    width: 100%;
+    margin-bottom: 50rpx;
+    padding: 0 20rpx;
+
+    .step-item {
+        display: flex;
+        flex-direction: column;
+        align-items: center;
+        position: relative;
+        width: 25%;
+
+        .step-icon {
+            width: 80rpx;
+            height: 80rpx;
+            border-radius: 50%;
+            background-color: #cccccc;
+            display: flex;
+            align-items: center;
+            justify-content: center;
+            font-size: 32rpx;
+            color: #ffffff;
+            margin-bottom: 20rpx;
+            transition: all 0.3s ease;
+
+            &.yuan-icon {
+                font-size: 40rpx;
+                font-weight: bold;
+            }
+
+            .icon-text {
+                font-size: 36rpx;
+                font-weight: 500;
+                color: #ffffff;
+            }
+        }
+
+        .step-label {
+            font-size: 26rpx;
+            color: #999999;
+            text-align: center;
+            transition: all 0.3s ease;
+        }
+
+        &.completed {
+            .step-icon {
+                background-color: #37c148;
+            }
+
+            .step-label {
+                color: #37c148;
+                font-weight: 500;
+            }
+        }
+
+        // &.current {
+        //     .step-icon {
+        //         background-color: #37c148;
+        //         box-shadow: 0 0 10rpx rgba(55, 193, 72, 0.5);
+        //         transform: scale(1.05);
+        //     }
+
+        //     .step-label {
+        //         color: #37c148;
+        //         font-weight: bold;
+        //         transform: scale(1.05);
+        //     }
+        // }
+    }
+
+    .step-arrow {
+        width: 12.5%;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+
+        .arrow-text {
+            font-size: 36rpx;
+            color: #dddddd;
+        }
+    }
+}
+
+.action-button {
+    width: 90%;
+    height: 90rpx;
+    background-color: #37c148;
+    border-radius: 45rpx;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    margin-top: 20rpx;
+    box-shadow: 0 6rpx 10rpx rgba(55, 193, 72, 0.2);
+    transition: all 0.2s ease;
+
+    &:active {
+        transform: scale(0.98);
+        opacity: 0.9;
+    }
+
+    text {
+        color: #fff;
+        font-size: 32rpx;
+        font-weight: 500;
+    }
+}
+</style>

+ 264 - 0
pages/mine/index.vue

@@ -88,11 +88,43 @@
                 </view>
             </view>
         </view>
+
+        <!-- 悬浮提现确认按钮 -->
+        <view
+            class="withdrawal-confirm"
+            :style="{
+                left: buttonPosition.left + 'px',
+                right: buttonPosition.right + 'px',
+                bottom: buttonPosition.bottom + 'px',
+            }"
+            @touchstart="touchStart"
+            @touchmove="touchMove"
+            @touchend="touchEnd"
+            @click="navigateToWithdrawal"
+            v-if="withdrawalOrder && withdrawalOrder.length > 0"
+        >
+            <view class="confirm-btn">
+                <text>提现</text>
+                <text>确认</text>
+            </view>
+        </view>
+
+        <!-- 提现进度弹窗 -->
+        <withdrawal-progress
+            :orderInfo="currentWithdrawalOrder"
+            @confirm="confirmWithdrawal"
+            ref="withdrawalRef"
+        />
     </view>
 </template>
 
 <script>
+import WithdrawalProgress from "./components/withdrawal-progress.vue";
+
 export default {
+    components: {
+        WithdrawalProgress,
+    },
     data() {
         return {
             userInfo: {
@@ -203,9 +235,40 @@ export default {
                     path: "/pages-mine/pages/setting",
                 },
             ],
+            // 悬浮按钮位置
+            buttonPosition: {
+                left: "auto",
+                right: 0,
+                bottom: "20%",
+            },
+            // 触摸开始位置
+            startX: 0,
+            startY: 0,
+            // 屏幕宽度和高度
+            screenWidth: 0,
+            screenHeight: 0,
+            // 初始位置记录,用于计算拖动
+            initialLeft: 0,
+            initialBottom: 0,
+            // 是否正在更新位置,用于防止频繁更新
+            isUpdatingPosition: false,
+            withdrawalOrder: [],
+            // 提现进度弹窗相关
+            showWithdrawalModal: false,
+            currentWithdrawalOrder: {},
         };
     },
     methods: {
+        //获取是否存在待确认提现的订单
+        getWithdrawalOrder() {
+            uni.$u.http.get("/token/user/withdrawWindows").then((res) => {
+                console.log(res);
+                if (res.code == 200) {
+                    this.withdrawalOrder = res.data;
+                }
+            });
+        },
+
         //用户信息
         handleUpdateUserInfo() {
             uni.navigateTo({
@@ -240,6 +303,19 @@ export default {
                 });
             }
         },
+        // 导航到提现确认页面
+        navigateToWithdrawal() {
+            if (this.withdrawalOrder && this.withdrawalOrder.length > 0) {
+                // 显示提现进度弹窗,使用第一个提现订单
+                this.currentWithdrawalOrder = this.withdrawalOrder[0];
+                this.$refs.withdrawalRef.openModal();
+            } else {
+                // 如果没有待确认的提现订单,直接跳转到钱包页面
+                uni.navigateTo({
+                    url: "/pages-mine/pages/wallet",
+                });
+            }
+        },
         //获取用户信息
         getUserInfo() {
             uni.$u.http.get("/token/user/detail").then((res) => {
@@ -276,11 +352,167 @@ export default {
                 });
             });
         },
+        // 触摸开始
+        touchStart(e) {
+            const touch = e.touches[0];
+            this.startX = touch.clientX;
+            this.startY = touch.clientY;
+
+            // 记录初始位置,用于计算移动距离
+            if (this.buttonPosition.right !== "auto") {
+                // 如果是靠右定位,记录当前位置但不立即改变显示位置
+                this.initialLeft = this.screenWidth - 120;
+            } else {
+                this.initialLeft = parseFloat(this.buttonPosition.left);
+            }
+
+            // 如果bottom是百分比,转换为具体像素值
+            if (typeof this.buttonPosition.bottom === "string" && this.buttonPosition.bottom.includes("%")) {
+                const percentage = parseFloat(this.buttonPosition.bottom) / 100;
+                this.initialBottom = this.screenHeight * percentage;
+            } else {
+                this.initialBottom = parseFloat(this.buttonPosition.bottom);
+            }
+        },
+
+        // 触摸移动
+        touchMove(e) {
+            // 阻止默认行为,防止页面滚动
+            e.preventDefault && e.preventDefault();
+            e.stopPropagation && e.stopPropagation();
+
+            const touch = e.touches[0];
+
+            // 计算移动距离
+            const deltaX = touch.clientX - this.startX;
+            const deltaY = touch.clientY - this.startY;
+
+            // 使用初始位置计算新位置,避免累积误差
+            let newLeft = this.initialLeft + deltaX;
+            let newBottom = this.initialBottom - deltaY; // 注意:y轴方向是相反的
+
+            // 确保按钮不超出屏幕边界
+            if (newLeft < 0) {
+                newLeft = 0;
+            } else if (newLeft > this.screenWidth - 120) {
+                newLeft = this.screenWidth - 120;
+            }
+
+            // 确保按钮不超出屏幕垂直边界
+            if (newBottom < 20) {
+                newBottom = 20;
+            } else if (newBottom > this.screenHeight - 120) {
+                newBottom = this.screenHeight - 120;
+            }
+
+            // 使用节流方式更新位置,避免过于频繁的更新
+            if (!this.isUpdatingPosition) {
+                this.isUpdatingPosition = true;
+
+                // 更新位置 - 第一次移动时才真正改变right为auto
+                this.buttonPosition = {
+                    left: newLeft,
+                    right: "auto",
+                    bottom: newBottom,
+                };
+
+                // 使用setTimeout代替requestAnimationFrame,在微信小程序中更兼容
+                setTimeout(() => {
+                    this.isUpdatingPosition = false;
+                }, 16); // 约等于60fps的刷新率
+            }
+        },
+
+        // 触摸结束,实现吸附效果
+        touchEnd() {
+            // 确保不再有待处理的更新
+            this.isUpdatingPosition = false;
+
+            const buttonCenter = this.buttonPosition.left + 60; // 按钮中心位置
+            const halfScreen = this.screenWidth / 2;
+
+            // 判断是吸附到左边还是右边
+            if (buttonCenter < halfScreen) {
+                // 吸附到左边
+                this.buttonPosition = {
+                    left: 0,
+                    right: "auto",
+                    bottom: this.buttonPosition.bottom,
+                };
+            } else {
+                // 吸附到右边
+                this.buttonPosition = {
+                    left: "auto",
+                    right: 0,
+                    bottom: this.buttonPosition.bottom,
+                };
+            }
+        },
+        // 关闭提现进度弹窗
+        closeWithdrawalModal() {
+            this.$refs.withdrawalRef.handleClose();
+        },
+
+        confirmWithdrawal(item) {
+            uni.$u.http
+                .post("/token/user/withdrawConfirm", {
+                    orderNo: item.orderNo,
+                })
+                .then((res) => {
+                    if (res.code === 200) {
+                        this.handleConfirmReceipt(res.data);
+                    }
+                })
+                .catch((err) => {
+                    uni.showToast({
+                        title: err.message || "确认失败",
+                        icon: "none",
+                    });
+                });
+        },
+        //执行微信确认收款操作
+        handleConfirmReceipt(data) {
+            if (wx.canIUse("requestMerchantTransfer")) {
+                wx.requestMerchantTransfer({
+                    mchId: data.mchId,
+                    appId: data.appId,
+                    package: data.packageStr,
+                    success: (res) => {
+                        // res.err_msg将在页面展示成功后返回应用时返回ok,并不代表付款成功
+                        uni.showToast({
+                            title: "确认收款成功",
+                            icon: "none",
+                        });
+                        this.closeWithdrawalModal();
+                        // 刷新列表
+                        this.getWithdrawalOrder();
+                    },
+                    fail: (res) => {
+                        console.log("fail:", res);
+                    },
+                });
+            } else {
+                wx.showModal({
+                    content: "你的微信版本过低,请更新至最新版本。",
+                    showCancel: false,
+                });
+            }
+        },
+    },
+    onReady() {
+        // 获取屏幕宽度和高度
+        uni.getSystemInfo({
+            success: (res) => {
+                this.screenWidth = res.windowWidth;
+                this.screenHeight = res.windowHeight;
+            },
+        });
     },
     onShow() {
         let token = uni.getStorageSync("token");
         if (token) {
             this.getUserInfo();
+            this.getWithdrawalOrder();
         }
     },
 };
@@ -494,5 +726,37 @@ export default {
             }
         }
     }
+
+    // 悬浮提现确认按钮样式
+    .withdrawal-confirm {
+        position: fixed;
+        bottom: 10%;
+        z-index: 999;
+        width: 120rpx;
+        height: 120rpx;
+        transition: all 0.3s ease;
+
+        .confirm-btn {
+            width: 100%;
+            height: 100%;
+            background-color: #4cd964;
+            border-radius: 50%;
+            display: flex;
+            flex-direction: column;
+            align-items: center;
+            justify-content: center;
+            border: 4rpx solid #fff;
+            box-shadow: 0 0 10rpx rgba(0, 0, 0, 0.2);
+
+            text {
+                color: #ffffff;
+                font-size: 34rpx;
+                text-align: center;
+                font-weight: 500;
+                padding: 0 10rpx;
+                line-height: 1.2;
+            }
+        }
+    }
 }
 </style>

文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/common/main.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/common/runtime.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/common/vendor.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/common-dialog.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/loadmore.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/no-data.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/pageScroll/index.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/title-operate.js.map


+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/withdrawal-progress.js.map

@@ -0,0 +1 @@
+{"version":3,"sources":[],"names":[],"mappings":"","file":"components/withdrawal-progress.js","sourceRoot":""}

文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-home/components/BookItem.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-home/components/BookListItem.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-home/components/OrderSuccessPopup.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-home/components/PickupTimePicker.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-home/components/SubmitConfirm.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-home/pages/about-us.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-home/pages/book-order.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-home/pages/order-success.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-home/pages/scaned-book.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-home/pages/user-agreement.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/components/address-card.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/components/book-list.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/components/category-popup.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/components/city-picker.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/components/detail-book-item.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/components/order-actions.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/components/order-item.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/components/order-return-actions.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/components/order-return-item.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/components/order-timeline.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/components/partner-order-item.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/components/return-notice.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/components/select-book-item.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/address/add-or-update.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/address/list.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/apply-return.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/apply.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/cashier-desk.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/complaint.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/feedback.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/notice.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/order-detail.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/order-page.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/partner/income-detail.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/partner/order-detail.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/partner/partner-apply.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/partner/partner-home.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/partner/partner-rule.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/partner/partner-status.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/pay-success.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/return-detail.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/return-select.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/rules-for-sellbooks.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/setting.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/wallet.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/withdraw-detail.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages-mine/pages/withdraw.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/home/components/BookItem.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/home/components/ConfirmBooks.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/home/components/FirstOrderFreePopup.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/home/components/InputIsbn.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/home/components/KindReminder.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/home/components/ScanBookList.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/home/components/ServiceGuarantee.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/home/components/ServiceInfo.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/home/components/notScanned.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/home/index.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/login/index.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/mine/components/withdrawal-progress.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/mine/index.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-icons/components/uni-icons/uni-icons.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uview-ui/components/u-action-sheet/u-action-sheet.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uview-ui/components/u-avatar/u-avatar.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uview-ui/components/u-badge/u-badge.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uview-ui/components/u-button/u-button.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uview-ui/components/u-cell-group/u-cell-group.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uview-ui/components/u-cell-item/u-cell-item.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uview-ui/components/u-checkbox/u-checkbox.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uview-ui/components/u-collapse-item/u-collapse-item.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uview-ui/components/u-collapse/u-collapse.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uview-ui/components/u-count-down/u-count-down.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uview-ui/components/u-divider/u-divider.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uview-ui/components/u-empty/u-empty.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uview-ui/components/u-form-item/u-form-item.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uview-ui/components/u-form/u-form.js.map


文件差异内容过多而无法显示
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uview-ui/components/u-icon/u-icon.js.map


部分文件因为文件数量过多而无法显示