Ver Fonte

删除冗余代码---demo、points

MS-IOHQJGHXZHQD\Administrator há 1 semana atrás
pai
commit
ec5cee498e
32 ficheiros alterados com 1 adições e 11694 exclusões
  1. 1 164
      src/pages.json
  2. 0 284
      src/pages/address/address-edit.vue
  3. 0 292
      src/pages/address/index.vue
  4. 0 310
      src/pages/address/virtual.vue
  5. 0 435
      src/pages/demo/apply.vue
  6. 0 149
      src/pages/demo/certificate.vue
  7. 0 229
      src/pages/demo/coupon.vue
  8. 0 598
      src/pages/demo/index.vue
  9. 0 562
      src/pages/demo/order-detail.vue
  10. 0 607
      src/pages/demo/rec.vue
  11. 0 231
      src/pages/demo/recharge.vue
  12. 0 203
      src/pages/demo/record-fen.vue
  13. 0 179
      src/pages/demo/stats-level.vue
  14. 0 379
      src/pages/demo/tc.vue
  15. 0 474
      src/pages/demo/therapist-detail.vue
  16. 0 445
      src/points/components/product-list/product-list.vue
  17. 0 178
      src/points/components/sign-in/sign-in.vue
  18. 0 309
      src/points/components/task-list/task-list.vue
  19. 0 327
      src/points/home/index.vue
  20. 0 21
      src/points/home/pointRule.vue
  21. 0 824
      src/points/order/orderDetails.vue
  22. 0 229
      src/points/order/orderList.vue
  23. 0 357
      src/points/pointInfo/billPage.vue
  24. 0 433
      src/points/pointInfo/taskList.vue
  25. 0 242
      src/points/productDetails/addressManagement.vue
  26. 0 354
      src/points/productDetails/applyExchange.vue
  27. 0 513
      src/points/productDetails/applyRefund.vue
  28. 0 82
      src/points/productDetails/components/redemptionRules.vue
  29. 0 459
      src/points/productDetails/components/selectProduct.vue
  30. 0 749
      src/points/productDetails/index.vue
  31. 0 275
      src/points/productDetails/paymentSuccessful.vue
  32. 0 801
      src/points/productDetails/pendingPayment.vue

+ 1 - 164
src/pages.json

@@ -210,27 +210,6 @@
 				}
 			}
 		},
-		{
-			"path": "pages/address/index",
-			"style": {
-				"navigationBarTitleText": "我的地址",
-				"navigationStyle": "custom"
-			}
-		},
-		{
-			"path": "pages/address/address-edit",
-			"style": {
-				"navigationBarTitleText": "编辑地址",
-				"navigationStyle": "custom"
-			}
-		},
-		{
-			"path": "pages/address/virtual",
-			"style": {
-				"navigationBarTitleText": "虚拟地址",
-				"navigationStyle": "custom"
-			}
-		},
 		{
 			"path": "pages/moments/index",
 			"style": {
@@ -519,149 +498,7 @@
 				}
 			]
 		},
-		{
-			"root": "points",
-            "pages": [
-				{
-					"path": "home/index",
-					"style": {
-						"navigationBarTitleText": "我的积分",
-						"navigationBarBackgroundColor": "#2cb8d4",
-						"navigationBarTextStyle": "white",
-						"app-plus": {
-							"softinputNavBar": "none",
-							"titleNView": false
-						}
-					}
-				},
-				{
-					"path": "home/pointRule",
-					"style": {
-						"navigationBarTitleText": "",
-						"app-plus": {
-							"softinputNavBar": "none",
-							"titleNView": false
-						}
-					}
-				},
-				{
-					"path": "pointInfo/billPage",
-					"style": {
-						"navigationBarTitleText": "积分明细",
-						"navigationBarBackgroundColor": "#2cb8d4",
-						"navigationBarTextStyle": "white",
-						"app-plus": {
-							"softinputNavBar": "none",
-							"titleNView": false
-						}
-					}
-				},
-				{
-					"path": "pointInfo/taskList",
-					"style": {
-						"navigationBarTitleText": "任务中心",
-						"navigationBarBackgroundColor": "#2cb8d4",
-						"navigationBarTextStyle": "white",
-						"app-plus": {
-							"softinputNavBar": "none",
-							"titleNView": false
-						}
-					}
-				},
-				{
-					"path": "order/orderList",
-					"style": {
-						"navigationBarTitleText": "积分订单",
-						"navigationBarBackgroundColor": "#2cb8d4",
-						"navigationBarTextStyle": "white",
-						"app-plus": {
-							"softinputNavBar": "none",
-							"titleNView": false
-						}
-					}
-				},
-				{
-					"path": "order/orderDetails",
-					"style": {
-						"navigationBarTitleText": "订单详情",
-						"navigationBarBackgroundColor": "#2cb8d4",
-						"navigationBarTextStyle": "white",
-						"app-plus": {
-							"softinputNavBar": "none",
-							"titleNView": false
-						}
-					}
-
-				},{
-					"path": "productDetails/index",
-					"style": {
-						"navigationBarTitleText": "商品详情",
-						"navigationBarBackgroundColor": "#2cb8d4",
-						"navigationBarTextStyle": "white",
-						"app-plus": {
-							"softinputNavBar": "none",
-							"titleNView": false
-						}
-					}
-				},{
-					"path": "productDetails/addressManagement",
-					"style": {
-						"navigationBarTitleText": "地址管理",
-						"navigationBarBackgroundColor": "#2cb8d4",
-						"navigationBarTextStyle": "white",
-						"app-plus": {
-							"softinputNavBar": "none",
-							"titleNView": false
-						}
-
-					}
-				},{
-					"path": "productDetails/paymentSuccessful",
-					"style": {
-						"navigationBarTitleText": "兑换成功",
-						"navigationBarBackgroundColor": "#2cb8d4",
-						"navigationBarTextStyle": "white",
-						"app-plus": {
-							"softinputNavBar": "none",
-							"titleNView": false
-						}
-					}
-				},{
-					"path": "productDetails/pendingPayment",
-					"style": {
-						"navigationBarTitleText": "待支付",
-						"navigationBarBackgroundColor": "#2cb8d4",
-						"navigationBarTextStyle": "white",
-						"app-plus": {
-							"softinputNavBar": "none",
-							"titleNView": false
-						}
-					}
-				},{
-					"path": "productDetails/applyRefund",
-					"style": {
-						"navigationBarTitleText": "申请退款",
-						"navigationBarBackgroundColor": "#2cb8d4",
-						"navigationBarTextStyle": "white",
-						"app-plus": {
-							"softinputNavBar": "none",
-							"titleNView": false
-						}
-					}
-				},{
-					"path": "productDetails/applyExchange",
-					"style": {
-						"navigationBarTitleText": "申请换货",
-						"navigationBarBackgroundColor": "#2cb8d4",
-						"navigationBarTextStyle": "white",
-						"app-plus": {
-							"softinputNavBar": "none",
-							"titleNView": false
-						}
-					}
-				}
-			]
-		},
+		
 		{
 			"root": "workbench",
 			"pages": [

+ 0 - 284
src/pages/address/address-edit.vue

@@ -1,284 +0,0 @@
-<template>
-    <view class="page-container">
-        <!-- <u-navbar title="编辑地址" :autoBack="true" placeholder border></u-navbar> -->
-
-        <view class="content-body">
-            <view class="header-row">
-                <text class="section-title">地址信息</text>
-                <view class="default-switch" @click="isDefault = !isDefault">
-                    <view class="radio-circle" :class="{ active: isDefault }">
-                        <u-icon v-if="isDefault" name="checkmark" color="#fff" size="12"></u-icon>
-                    </view>
-                    <text class="switch-text">默认地址</text>
-                </view>
-            </view>
-
-            <u--form ref="uForm" 
-                labelWidth="140rpx" 
-				:model="form" :rules="rules"
-			>
-                <view v-if="!form.address" class="location-box empty-state" @click="chooseLocation">
-                    <text>选择地址</text>
-                    <u-icon name="arrow-right" color="#00e0b5" size="14" style="margin-left: 6rpx;"></u-icon>
-                </view>
-
-                <view v-else class="location-box filled-state">
-                    <view class="addr-info">
-                        <view class="addr-name">{{ form.name }}</view>
-                        <view class="addr-detail">{{ form.address }}</view>
-                    </view>
-                    <view class="edit-btn" @click="chooseLocation">
-                        修改地址
-                    </view>
-                </view>
-
-                <view class="form-section">
-                    <!-- 隐藏的表单项,用于校验 -->
-                    <u-form-item prop="address" style="display: none;"></u-form-item>
-
-                    <u-form-item label="详细地址" prop="atlasAdd">
-                        <view class="input-wrapper">
-                            <u-input v-model="form.atlasAdd" placeholder="小区、写字楼、门牌号等" border="none"
-                                fontSize="14px"></u-input>
-                        </view>
-                    </u-form-item>
-                    
-                    <u-form-item label="姓名" prop="userName">
-                        <view class="input-wrapper">
-                            <u-input v-model="form.userName" placeholder="输入您的姓名" border="none" fontSize="14px"></u-input>
-                        </view>
-                    </u-form-item>
-
-                    <u-form-item label="手机号" prop="phone">
-                        <view class="input-wrapper">
-                            <u-input v-model="form.phone" placeholder="手机号" type="number" border="none"
-                                fontSize="14px"></u-input>
-                        </view>
-                    </u-form-item>
-                </view>
-            </u--form>
-        </view>
-
-        <view class="footer-bar">
-            <u-button text="保存地址" color="#00e0b5" shape="circle"
-                customStyle=""
-                @click="onSubmit"
-            ></u-button>
-        </view>
-    </view>
-</template>
-
-<script>
-import {
-    getAddrById,
-    netAddressAdd,
-    netAddressUpdate,
-} from '@/api/address';
-export default {
-    data() {
-        return {
-            query: {},
-            isDefault: false, // 是否默认地址
-            form: {
-                phone: '',
-                userName: '',
-                atlasAdd: '',
-            },
-            rules: {
-				phone: [
-					{
-						required: true,
-						message: '请输入手机号',
-						trigger: ['blur', 'change']
-					},
-                    {
-                        pattern: /^1([3589]\d|4[01456879]|6[0-9]|7[0-8])\d{8}$/, 
-                        message: '请输入正确的手机号格式', 
-                        trigger: ['blur', 'change']
-					}
-				],
-				userName: [
-					{
-						required: true,
-						message: '请输入姓名',
-						trigger: ['blur', 'change']
-					}
-				],
-				// 针对隐藏表单项的校验规则
-				address: [{ required: true, message: '请选择地址信息', trigger: ['change'] }],
-            }
-        };
-    },
-    onLoad(query) {
-        this.query = query;
-        if (query.id) this.getData(); else this.isDefault = true;
-    },
-	onReady() {
-		// 页面加载完成后为表单设置规则
-		this.$refs.uForm.setRules(this.rules);
-	},
-    methods: {
-        getData() {
-            getAddrById({
-                id: this.query.id
-            }).then(res => {
-                this.form = res.data.data;
-                this.isDefault = this.form.type == 1;
-            });
-        },
-        // 选择地图定位
-        chooseLocation() {
-            uni.chooseLocation({
-                success: (res) => {
-                    // form赋值
-                    this.form = {
-                        ...this.form,
-                        name: res.name,
-                        address: res.address || res.name,
-                        latitude: res.latitude,
-                        longitude: res.longitude,
-                    }
-                }
-            });
-        },
-        onSubmit() {
-            this.$refs.uForm.validate().then(res => {
-                let api = netAddressAdd;
-                let params = {
-                    ...this.form,
-                    type: this.isDefault ? 1: 0,
-                    openid: uni.getStorageSync('wx_copenid'),
-                };
-                // console.log('保存', params);
-                if (this.query.id) api = netAddressUpdate;
-                api(params).then(res => {
-                    uni.$u.toast(res.data.msg);
-                    if (res.data.code == 200) {
-                        setTimeout(() => {
-                            uni.navigateBack();
-                        }, 500);
-                    }
-                });
-			}).catch(errors => {
-                // console.log(errors)
-                let f = errors.some(item => ['address'].indexOf(item.field) !== -1);
-				if (f) uni.$u.toast(errors[0].message);
-			})
-        }
-    }
-};
-</script>
-
-<style lang="scss" scoped>
-.page-container {
-    min-height: 100vh;
-    padding-bottom: 130rpx;
-    background-color: #fff;
-
-    .content-body {
-        padding: 30rpx 40rpx;
-    }
-
-    .header-row {
-        display: flex;
-        justify-content: space-between;
-        align-items: center;
-        margin-bottom: 24rpx;
-
-        .section-title {
-            font-size: 32rpx;
-            font-weight: bold;
-            color: #333;
-        }
-
-        .default-switch {
-            display: flex;
-            align-items: center;
-            cursor: pointer;
-
-            .radio-circle {
-                width: 32rpx;
-                height: 32rpx;
-                border: 2rpx solid #ccc;
-                border-radius: 50%;
-                margin-right: 10rpx;
-                display: flex;
-                align-items: center;
-                justify-content: center;
-                transition: all 0.2s;
-
-                &.active {
-                    background-color: #00e0b5; // 选中青色
-                    border-color: #00e0b5;
-                }
-            }
-
-            .switch-text {
-                font-size: 26rpx;
-                color: #666;
-            }
-        }
-    }
-
-    .location-box {
-        padding: 30rpx;
-        margin-bottom: 20rpx;
-        border-radius: 16rpx;
-
-        background-color: #eefdfa;
-        border: 2rpx solid #ccf5ee; 
-
-        &.empty-state {
-            display: flex;
-            align-items: center;
-            justify-content: center;
-            height: 100rpx;
-            color: #00e0b5;
-            font-size: 30rpx;
-            font-weight: 500;
-        }
-
-        &.filled-state {
-            display: flex;
-            align-items: center;
-            justify-content: space-between;
-
-            .addr-info {
-                flex: 1;
-                margin-right: 20rpx;
-
-                .addr-name {
-                    font-size: 30rpx;
-                    font-weight: bold;
-                    color: #333;
-                    margin-bottom: 8rpx;
-                }
-
-                .addr-detail {
-                    font-size: 24rpx;
-                    color: #666;
-                }
-            }
-
-            .edit-btn {
-                color: #fff;
-                font-size: 24rpx;
-                padding: 10rpx 24rpx;
-                border-radius: 30rpx;
-                flex-shrink: 0;
-                background-color: #00e0b5;
-            }
-        }
-    }
-
-    .form-section {
-        .input-wrapper {
-            flex: 1;
-            border: 1px solid #eee; // 独立边框
-            border-radius: 8rpx;
-            padding: 4rpx 16rpx;
-            background-color: #fff;
-        }
-    }
-}
-</style>

+ 0 - 292
src/pages/address/index.vue

@@ -1,292 +0,0 @@
-<template>
-	<view class="page-container">
-		<!-- 自定义导航栏 -->
-		<!-- <u-navbar title="我的地址" :autoBack="true" :placeholder="true"></u-navbar> -->
-
-		<z-paging ref="paging" bg-color="#f8f8f8" v-model="dataList" @query="queryList">
-			<view class="main-list">
-				<u-radio-group v-model="selected" placement="column" activeColor="#0879FF" @change="onChange">
-					<template v-for="(item, i) in dataList">
-						<view class="mitem" :key="i" v-if="item.type != 2" @click="selectedAddressFun(item)"
-							:style="{ border: selectedAddressId == item.id ? '1px solid rgba(3, 193, 184, 1)' : 'none' }">
-							<view class="info-box" @click="onClick(item)">
-								<view class="item-line atext">
-									<text class="name">{{ item.userName }}</text>
-									<text>{{ item.phone }}</text>
-									<template v-if="query.orderNo && item.type == 1">
-										<view class="default">默认</view>
-									</template>
-								</view>
-								<view class="btext" v-if="!!item.address">
-									<text>{{ item.name }} - </text>
-									<text>{{ item.address }}</text>
-									<text>{{ item.atlasAdd }}</text>
-								</view>
-							</view>
-							<u-line length="100%" color="#eee" margin="14rpx 0 18rpx"></u-line>
-							<view class="actions">
-								<template v-if="!query.orderNo">
-									<u-radio :name="item.id" shape="square" label="设为常用地址" labelSize="26rpx"></u-radio>
-								</template>
-								<view class="right">
-									<text @click.stop="onEdit(item)">编辑</text>
-									<text @click.stop="onDel(item)">删除</text>
-									<!-- <image src="/static/identify/edit.png" />
-									<image src="/static/identify/delete.png" /> -->
-								</view>
-							</view>
-						</view>
-					</template>
-				</u-radio-group>
-			</view>
-
-			<!-- 底部操作栏 -->
-			<view class="footer-bar" slot="bottom">
-				<u-button text="新增地址信息" @click="onAdd"></u-button>
-			</view>
-		</z-paging>
-	</view>
-</template>
-
-<script>
-import {
-	getAddrList,
-	defaultAddr,
-	netAddressDel,
-} from '@/api/address';
-import { updateOrder } from '@/api/index';
-export default {
-	data() {
-		return {
-			query: {},
-			dataList: [],
-			selected: '',
-			selectedAddressId: null,
-			productId: null
-		}
-	},
-	computed: {
-
-	},
-	onLoad(query) {
-		this.query = query;
-		//商品详情页传过来的id
-		if (query.selectedAddressId) {
-			this.selectedAddressId = query.selectedAddressId
-		}
-		if (query.productId) this.productId = query.productId
-	},
-	onShow() {
-		this.canReset && this.$refs.paging.reload();
-		this.canReset = true;
-	},
-	methods: {
-		//选择地址
-		selectedAddressFun(item) {
-			this.selectedAddressId = item.id
-			let pages = getCurrentPages();
-			let prevPage = pages.length >= 2 ? pages[pages.length - 2] : null;
-			// 传参
-			if (prevPage) {
-				// 赋值
-				prevPage.$vm.selectedAddressId = this.selectedAddressId;
-			}
-			if (this.productId) {
-				uni.navigateTo({
-					url: `/points/productDetails/index?id=${this.productId}&selectedAddressId=${this.selectedAddressId}`
-				});
-			}
-
-		},
-		// 获取数据
-		queryList(pageNo, pageSize) {
-			let params = {
-				current: pageNo,
-				size: pageSize,
-				openId: uni.getStorageSync('wx_copenid'),
-			}
-			getAddrList(params).then(res => {
-				if (res.data.code === 200) {
-					this.selected = res.data.data.find(item => item.type == 1)?.id;
-					if (this.selectedAddressId) {
-						let flag = res.data.data.some(element => {
-							return this.selectedAddressId == element.id
-						});
-						let pages = getCurrentPages();
-						let prevPage = pages.length >= 2 ? pages[pages.length - 2] : null;
-						if (!flag) {
-							// 传参
-							if (prevPage) {
-								// 赋值
-								prevPage.$vm.selectedAddressId = null;
-							}
-						} else {
-							if (prevPage) {
-								// 赋值
-								prevPage.$vm.selectedAddressId = this.selectedAddressId;
-							}
-						}
-					}
-					this.$refs.paging.complete(res.data.data);
-				} else {
-					this.$refs.paging.complete(false);
-				}
-			});
-		},
-		// 设置默认
-		onChange(e) {
-			defaultAddr({
-				id: e,
-				openId: uni.getStorageSync('wx_copenid'),
-			}).then(res => {
-				if (res.data.code === 200) {
-					this.$refs.paging.reload();
-				} else {
-					uni.$u.toast(res.data.msg);
-				}
-			});
-		},
-		// 编辑
-		onEdit(item) {
-			let params = {
-				id: item.id,
-			};
-			let str = uni.$u.queryParams(params);
-			uni.navigateTo({
-				url: `/pages/address/address-edit${str}`
-			});
-		},
-		// 删除
-		onDel(item) {
-			uni.showModal({
-				title: '确认删除',
-				content: `确定要删除该条数据吗?`,
-				success: (res) => {
-					if (res.confirm) {
-						netAddressDel({ idList: item.id }).then(res => {
-							uni.$u.toast(res.data.msg);
-							if (res.data.code == 200) {
-								this.$refs.paging.reload();
-							}
-						});
-					}
-				}
-			});
-		},
-		// 添加
-		onAdd() {
-			uni.navigateTo({
-				url: `/pages/address/address-edit`
-			});
-		},
-		// 点选
-		onClick(item) {
-			if (this.query.name === '支付订单' && this.query.orderNo) {
-				let params = {
-					cId: this.query.orderNo,
-					cName: item.userName,
-					cPhone: item.phone,
-					name: item.name,
-					address: item.address,
-					atlasAdd: item.atlasAdd,
-					latitude: item.latitude,
-					longitude: item.longitude,
-				}
-				updateOrder(params).then(res => {
-					if (res.data.code == 200) {
-						uni.navigateBack();
-					} else {
-						uni.$u.toast(res.data.msg);
-					}
-				});
-			}
-		},
-	}
-}
-</script>
-
-<style scoped lang="scss">
-.page-container {
-	height: 100vh;
-	display: flex;
-	flex-direction: column;
-}
-
-.main-list {
-	flex: 1;
-	padding: 24rpx;
-
-	.mitem {
-		padding: 20rpx;
-		margin-bottom: 24rpx;
-		background: #FFFFFF;
-		box-shadow: 0 4rpx 16rpx 0 rgba(176, 176, 176, 0.05);
-		;
-		border-radius: 12rpx;
-
-		.item-line {
-			display: flex;
-			align-items: center;
-		}
-
-		.info-box {
-			flex: 1;
-
-			.atext {
-				font-weight: 400;
-				font-size: 30rpx;
-				color: #333;
-			}
-
-			.btext {
-				font-weight: 400;
-				font-size: 28rpx;
-				color: #2F3437;
-				margin-top: 12rpx;
-			}
-
-			.name {
-				font-weight: 500;
-				margin-right: 10rpx;
-			}
-		}
-
-		.actions {
-			font-weight: 400;
-			font-size: 28rpx;
-			color: var(--theme-color);
-			display: flex;
-			align-items: center;
-			justify-content: space-between;
-
-			.right {
-				gap: 24rpx;
-				display: flex;
-				align-items: center;
-			}
-		}
-
-		.default {
-			font-weight: 400;
-			font-size: 28rpx;
-			color: #F35031;
-			margin-left: 20rpx;
-			padding: 2rpx 12rpx;
-			background: rgba(243, 80, 49, 0.1);
-			border-radius: 8rpx;
-		}
-	}
-}
-
-.footer-bar {
-	::v-deep .u-button {
-		height: 76rpx;
-		font-weight: 500;
-		font-size: 28rpx;
-		color: #FFFFFF;
-		margin: 0;
-		background: var(--theme-color);
-		border-radius: 8rpx;
-	}
-}
-</style>

+ 0 - 310
src/pages/address/virtual.vue

@@ -1,310 +0,0 @@
-<template>
-	<view class="page-container">
-		<view class="location-card" @click="chooseLocation">
-			<view class="left-content">
-				<u-icon name="map-fill" color="#1ecbc3" size="24"></u-icon>
-				<view class="info">
-					<text class="label">我的位置</text>
-					<text class="value">{{ currentLocation }}</text>
-				</view>
-			</view>
-			<u-icon name="arrow-right" color="#999" size="16"></u-icon>
-		</view>
-
-		<view class="list-title">
-			<text>虚拟地址</text>
-			<text class="more" @click="goToAdd">新增虚拟地址</text>
-		</view>
-		
-		<view class="address-list">
-			<u-radio-group v-model="selected" placement="column" activeColor="#0879FF" @change="onChange">
-				<view 
-					class="address-item" 
-					v-for="(item, index) in addressList" 
-					:key="item.id"
-				>
-					<view class="check-icon">
-						<u-radio :name="item.id" />
-					</view>
-
-					<view class="address-info">
-						<view class="name">{{ item.name }}</view>
-						<view class="detail">{{ item.address }}</view>
-					</view>
-
-					<view class="delete-btn" @click.stop="onDelete(item)">
-						<u-icon name="trash" color="#999" size="22"></u-icon>
-					</view>
-				</view>
-			</u-radio-group>
-		</view>
-
-		<u-gap height="100"></u-gap>
-
-		<view class="footer-bar">
-			<u-button 
-				text="保存" 
-				color="#1ecbc3" 
-				shape="circle" 
-				size="large"
-				customStyle="height: 48px; font-size: 16px;"
-				@click="onSave"
-			></u-button>
-		</view>
-
-		<u-modal 
-			:show="isShow" 
-			title="" 
-			content="确定要删除该地址吗?" 
-			showCancelButton
-			confirmColor="#1ecbc3"
-			@confirm="onDelete"
-			@cancel="isShow = false"
-		></u-modal>
-	</view>
-</template>
-
-<script>
-import {
-	getInfo,
-	getJsLocation,
-} from '@/api/index';
-import {
-	netVirtualAddrAdd,
-	netVirtualAddrDel,
-	getVirtualAddrByPhone
-} from '@/api/address';
-export default {
-	data() {
-		return {
-			query: {},
-			selected: '',
-			currentLocation: '信达国际金融中心',
-			isShow: false,
-			// 数据
-			addressList: [
-				{
-					id: 1,
-					name: '信达国际金融中心',
-					address: '山西省太原市万柏林区迎泽西大街86号',
-				},
-				{
-					id: 2,
-					name: '信达国际金融中心',
-					address: '山西省太原市万柏林区迎泽西大街86号',
-				},
-				{
-					id: 3,
-					name: '信达国际金融中心',
-					address: '山西省太原市万柏林区迎泽西大街86号',
-				}
-			]
-		}
-	},
-	onLoad(query) {
-		this.query = query;
-	},
-	onShow() {
-		let sl = uni.getStorageSync('staffLocation');
-		if (sl) {
-			this.selected = sl.addrId;
-			this.currentLocation = sl.address + sl.name;
-		}
-		this.getData();
-	},
-	methods: {
-		getData() {
-			getVirtualAddrByPhone({ phone: this.query.phone }).then(res => {
-				if (res.data.code === 200) {
-					this.addressList = res.data.data;
-				}
-			});
-		},
-		// 选择地址(单选逻辑)
-		onChange(e) {
-			// console.log(e)
-		},
-		// 点击我的位置
-		chooseLocation() {
-			console.log('点击我的位置');
-		},			
-		// 删除确认
-		onDelete(item) {
-			uni.showModal({
-				title: '提示',
-				content: '确定要删除该地址吗?',
-				success: (res) => {
-					if (res.confirm) {
-						netVirtualAddrDel({ id: item.id }).then(res => {
-							uni.$u.toast(res.data.msg);
-							if (res.data.code === 200) {
-								this.getData();
-							}
-						});
-					}
-				}
-			});
-			// this.isShow = true;
-		},
-		// 点击保存
-		onSave() {
-			const selected = this.addressList.find(item => item.id === this.selected);
-			if(selected) {
-				console.log('保存选中的地址:', selected);
-				let params = {
-					id: this.query.id,
-					cPhone: this.query.phone,
-					name: selected.name,
-					address: selected.address,
-					latitude: selected.latitude,
-					longitude: selected.longitude,
-					cOpenId: uni.getStorageSync('wx_copenid')
-				}
-				// 更新商户的位置
-				getJsLocation(params).then(res => {
-                    uni.setStorageSync('staffLocation', {
-						addrId: selected.id,
-						name: selected.name,
-						address: selected.address,
-						latitude: selected.latitude,
-						longitude: selected.longitude,
-					});
-					if (res.data.code === 200) {
-						uni.navigateBack();
-					}
-				});
-			} else {
-				uni.$u.toast('请选择一个地址');
-			}
-		},
-		// 跳转新增
-		goToAdd() {
-			uni.chooseLocation({
-				success: res => {
-					console.log(res)
-					// address: "融创长风壹号东门北120米"
-					// distance: 57
-					// errMsg: "chooseLocation:ok"
-					// latitude: 37.826281
-					// longitude: 112.516064
-					// name: "中国电信融创长风壹号营业厅"
-					let params = {
-						name: res.name,
-						address: res.address,
-						atlasAdd: res.atlasAdd,
-						latitude: res.latitude,
-						longitude: res.longitude,
-						type: 2,
-						userType: 2,
-						// user
-						openid: uni.getStorageSync('wx_copenid'),
-						phone: this.query.phone,
-						userName: this.query.name,
-					}
-					// 更新数据
-					netVirtualAddrAdd(params).then(res => {
-						this.getData();
-					});
-				}
-			});
-		}
-	}
-}
-</script>
-
-<style lang="scss" scoped>
-.page-container {
-	min-height: 100vh;
-	padding: 20rpx;
-	padding-bottom: 120rpx; 
-	background-color: #F6F7F9;
-
-	.location-card {
-		background-color: #fff;
-		border-radius: 16rpx;
-		padding: 30rpx;
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-		margin-bottom: 30rpx;
-		box-shadow: 0 2rpx 10rpx rgba(0,0,0,0.02);
-
-		.left-content {
-			display: flex;
-			align-items: center;
-			
-			.info {
-				margin-left: 20rpx;
-				display: flex;
-				flex-direction: column;
-				
-				.label {
-					font-size: 24rpx;
-					color: #999;
-					margin-bottom: 8rpx;
-				}
-				.value {
-					font-size: 30rpx;
-					font-weight: bold;
-					color: #333;
-				}
-			}
-		}
-	}
-
-	.list-title {
-		font-size: 26rpx;
-		color: #999;
-		padding: 0 10rpx;
-		margin-bottom: 20rpx;
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-
-		.more {
-			color: #1ecbc3;
-		}
-	}
-
-	.address-item {
-		background-color: #fff;
-		border-radius: 16rpx;
-		padding: 30rpx;
-		margin-bottom: 20rpx;
-		display: flex;
-		align-items: center;
-		box-shadow: 0 2rpx 10rpx rgba(0,0,0,0.02);
-		transition: opacity 0.2s;
-
-		.check-icon {
-			margin-right: 20rpx;
-		}
-
-		.address-info {
-			flex: 1;
-			display: flex;
-			flex-direction: column;
-			margin-right: 20rpx;
-
-			.name {
-				font-size: 32rpx;
-				font-weight: bold;
-				color: #333;
-				margin-bottom: 10rpx;
-			}
-			
-			.detail {
-				font-size: 26rpx;
-				color: #666;
-				line-height: 1.4;
-			}
-		}
-
-		.delete-btn {
-			padding: 10rpx;
-			display: flex;
-			align-items: center;
-		}
-	}
-}
-</style>

+ 0 - 435
src/pages/demo/apply.vue

@@ -1,435 +0,0 @@
-<template>
-    <view class="page-container">
-        <u-navbar title="提交资料" :autoBack="true" placeholder border></u-navbar>
-
-        <view class="form-content">
-            <u--form ref="uForm" 
-                labelWidth="auto" labelPosition="top" 
-                :labelStyle="{ color: '#333', fontWeight: 500, marginBottom: '10rpx' }"
-				:model="form" :rules="rules"
-			>
-                <view class="section-title">基本信息</view>
-                <view class="card-box">
-                    <u-form-item label="真实姓名" prop="cName">
-                        <u-input v-model="form.cName" placeholder="请输入真实姓名" border="none" class="custom-input"></u-input>
-                    </u-form-item>
-                    <u-form-item label="性别" prop="nSex">
-                        <u-radio-group v-model="form.nSex" activeColor="#00cba3">
-                            <u-radio label="男" :name="1" customStyle="margin-right: 30px"></u-radio>
-                            <u-radio label="女" :name="0"></u-radio>
-                        </u-radio-group>
-                    </u-form-item>
-                    <u-form-item label="手机号" prop="cPhone">
-                        <u-input v-model="form.cPhone" placeholder="请输入手机号" border="none" class="custom-input"></u-input>
-                    </u-form-item>
-                    <u-form-item label="入驻城市" prop="city" @click="show = true">
-                        <u-input v-model="form.city" readonly placeholder="请选择城市" border="none"
-                            class="custom-input"></u-input>
-                    </u-form-item>
-                    <u-form-item label="近期生活照" prop="cImgList">
-                        <Upload
-                            @fileList="onUpload($event, 'cImgList')"
-                        />
-                    </u-form-item>
-                </view>
-
-                <view class="section-title">详细信息</view>
-                <view class="card-box">
-                    <u-form-item label="昵称" prop="cNickName">
-                        <u-input v-model="form.cNickName" placeholder="请输入昵称" border="none"
-                            class="custom-input"></u-input>
-                    </u-form-item>
-                    <u-form-item label="头像" prop="cPortrait">
-                        <Upload
-                            :maxCount="1"
-                            @fileList="onUpload($event, 'cPortrait')"
-                        />
-                    </u-form-item>
-                    <u-form-item label="所在位置" prop="address" @click="onSelAddr">
-                        <u-input v-model="address" readonly placeholder="请选择工作所在位置" border="none" class="custom-input"></u-input>
-                    </u-form-item>
-                    <u-form-item label="个人简介" prop="cJianjie">
-                        <u--textarea v-model="form.cJianjie" placeholder="请输入个人简介" border="none"
-                            class="custom-input"></u--textarea>
-                    </u-form-item>
-                </view>
-
-                <view class="section-title">上传身份证正反面 <text class="sub-tip">*最多3张</text></view>
-                <view class="card-box">
-                    <Upload
-                        :maxCount="3"
-                        @fileList="onUpload($event, 'cSfzImg')"
-                    />
-
-                    <template v-if="0">
-                        <view class="id-upload-row">
-                            <Upload
-                                name="idCardFront"
-                                width="auto"
-                                height="220rpx"
-                                :maxCount="1"
-                                @fileList="onUpload($event, 'idCardFront')"
-                            >
-                                <view class="upload-block" slot="content">
-                                    <view class="icon-bg"><u-icon name="camera-fill" color="#fff" size="20"></u-icon></view>
-                                    <text class="up-text">身份证人像面</text>
-                                </view>
-                            </Upload>
-                            <Upload
-                                name="idCardBack"
-                                width="auto"
-                                height="220rpx"
-                                :maxCount="1"
-                                @fileList="onUpload($event, 'idCardBack')"
-                            >
-                                <view class="upload-block" slot="content">
-                                    <view class="icon-bg"><u-icon name="camera-fill" color="#fff" size="20"></u-icon></view>
-                                    <text class="up-text">身份证国徽面</text>
-                                </view>
-                            </Upload>
-                        </view>
-                        <Upload
-                            name="idCardHand"
-                            width="auto"
-                            height="220rpx"
-                            :maxCount="1"
-                            @fileList="onUpload($event, 'idCardHand')"
-                        >
-                            <view class="upload-block full-width" slot="content">
-                                <view class="icon-bg"><u-icon name="camera-fill" color="#fff" size="20"></u-icon></view>
-                                <text class="up-text">手持身份证照片</text>
-                            </view>
-                        </Upload>
-                    </template>
-
-                    <!-- 隐藏的表单项,用于校验图片 -->
-                    <u-form-item prop="cSfzImg" style="display: none;"></u-form-item>
-                </view>
-
-                <view class="section-title">
-                    上传资格证书 
-                </view>
-                <view class="card-box">
-                    <Upload
-                        :maxCount="1"
-                        @fileList="onUpload($event, 'certification')"
-                    />
-                    <!-- 隐藏的表单项,用于校验图片 -->
-                    <u-form-item prop="certification" style="display: none;"></u-form-item>
-                </view>
-
-                <view class="section-title">上传营业执照</view>
-                <view class="card-box">
-                    <Upload
-                        :maxCount="1"
-                        @fileList="onUpload($event, 'businessLicense')"
-                    />
-                    <!-- 隐藏的表单项,用于校验图片 -->
-                    <u-form-item prop="businessLicense" style="display: none;"></u-form-item>
-                </view>
-
-                <view class="section-title">上传无犯罪证明</view>
-                <view class="card-box">
-                    <Upload
-                        :maxCount="1"
-                        @fileList="onUpload($event, 'noCrime')"
-                    />
-                    <!-- 隐藏的表单项,用于校验图片 -->
-                    <u-form-item prop="noCrime" style="display: none;"></u-form-item>
-                </view>
-
-                <view class="section-title">上传承诺书信息</view>
-                <view class="card-box">
-                    <u-form-item label="承诺书" prop="commitment">
-                        <Upload
-                            accept="file"
-                            :maxSize="10240"
-                            :maxCount="2"
-                            @fileList="onUpload($event, 'commitment')"
-                        />
-                    </u-form-item>
-                    <u-form-item label="承诺录音" prop="recording">
-                        <Upload
-                            accept="file"
-                            :maxSize="10240"
-                            :maxCount="2"
-                            @fileList="onUpload($event, 'recording')"
-                        />
-                    </u-form-item>
-                    <u-form-item label="承诺录像" prop="videoRecording">
-                        <Upload
-                            accept="file"
-                            :maxSize="51200"
-                            :maxCount="2"
-                            @fileList="onUpload($event, 'videoRecording')"
-                        />
-                    </u-form-item>
-                </view>
-            </u--form>
-
-            <view class="footer-bar">
-                <u-button text="提交" color="#1BD6CD" shape="circle"
-                    customStyle=""
-                    @click="onSubmit"
-                ></u-button>
-            </view>
-        </view>
-
-        <!-- 城市选择 -->
-        <u-picker :show="show" :columns="[cityList]" keyName="label" 
-            @cancel="show = false" @confirm="onSelect"
-        ></u-picker>
-    </view>
-</template>
-
-<script>
-import {
-    getCityList,
-    getProjectList,
-    getMerchantData,
-} from '@/api/index';
-import Upload from '@/components/upload/index.vue';
-export default {
-    components: {
-        Upload
-    },
-    data() {
-        return {
-            form: {
-                cName: '',
-                nSex: 0,
-            },
-            rules: {
-				city: [
-					{
-						required: true,
-						message: '请选择城市',
-						trigger: ['blur', 'change']
-					}
-				],
-				cName: [
-					{
-						required: true,
-						message: '请输入您的姓名',
-						trigger: ['blur', 'change']
-					}
-				],
-				cNickName: [
-					{
-						required: true,
-						message: '请输入您的昵称',
-						trigger: ['blur', 'change']
-					}
-				],
-				cPhone: [
-					{
-						required: true,
-						message: '请输入手机号',
-						trigger: ['blur', 'change']
-					},
-                    {
-                        pattern: /^1([3589]\d|4[01456879]|6[0-9]|7[0-8])\d{8}$/, 
-                        message: '请输入正确的手机号格式', 
-                        trigger: ['blur', 'change']
-					}
-				],
-				address: [
-					{
-						required: true,
-						message: '请选择位置',
-						trigger: ['blur', 'change']
-					}
-				],
-				cJianjie: [
-					{
-						required: true,
-						message: '请填写您的简介',
-						trigger: ['blur', 'change']
-					}
-				],
-                cSfzImg: [{ required: true, message: '请上传身份证', trigger: ['change'] }],
-                cImgList: [{ required: true, message: '最少上传一张生活照片', trigger: ['change'] }],
-                cPortrait: [{ required: true, message: '请上传头像', trigger: ['change'] }],
-				// 针对隐藏表单项的校验规则
-				// idCardBack: [{ required: true, message: '请上传身份证国徽面', trigger: ['change'] }],
-            },
-            query: {},
-            // 城市选择
-            show: false,
-            cityList: [],
-        };
-    },
-    computed: {
-        address() {
-            return (this.form.address || '') + (this.form.name || '');
-        }
-    },
-    onLoad(query) {
-        this.query = query;
-        if (query.id) this.getData();
-        this.getCity();
-    },
-	onReady() {
-		// 页面加载完成后为表单设置规则
-		this.$refs.uForm.setRules(this.rules);
-	},
-    methods: {
-        getData() {
-            let params = {
-                cOpenId: uni.getStorageSync('wx_copenid')
-            }
-            getMerchantData(params).then(res => {
-                let data = res.data.data;
-                this.form = data;
-            });
-        },
-        getCity() {
-            getCityList().then(res => {
-                this.cityList = res.data.data.map(({
-                    deptId,
-                    deptName
-                }) => ({
-                    value: deptId,
-                    label: deptName
-                }))
-            });
-        },
-        onSelAddr() {
-            uni.chooseLocation({
-                success: res => {
-                    this.form.name = res.name;
-                    this.form.address = res.address || res.name;
-                    this.form.latitude = res.latitude;
-                    this.form.longitude = res.longitude;
-                }
-            });
-        },
-        onSelect(e) {
-            this.form = {
-                ...this.form,
-                city: e.value[0].label,
-                deptId: e.value[0].value,
-            }
-            this.show = false;
-        },
-        // upload事件
-        onUpload(e, t) {
-            this.form[t] = e.map(item => item.url);
-        },
-        onSubmit() {
-			this.$refs.uForm.validate().then(res => {
-                let api = netStaffAdd;
-                if (this.query.id) api = netStaffUpdate;
-                api().then(ares => {
-                    uni.$u.toast(ares.data.msg);
-                    if (ares.data.code == 200) {
-                        setTimeout(() => {
-                            uni.navigateBack();
-                        }, 1000);
-                    }
-                });
-			}).catch(errors => {
-                console.log(errors)
-                let f = errors.some(item => ['cSfzImg', 'certification', 'businessLicense', 'noCrime'].indexOf(item.field) !== -1);
-				if (f) uni.$u.toast(errors[0].message);
-			})
-		}
-    }
-};
-</script>
-
-<style lang="scss" scoped>
-.page-container {
-    min-height: 100vh;
-    padding-bottom: 130rpx;
-    background-color: #f8f8f8;
-
-    .form-content {
-        padding: 24rpx;
-
-        .section-title {
-            font-size: 30rpx;
-            font-weight: bold;
-            margin: 30rpx 0 20rpx;
-            display: flex;
-            align-items: center;
-            position: relative;
-            padding-left: 20rpx;
-
-            &::before {
-                content: '';
-                position: absolute;
-                left: 0;
-                top: 6rpx;
-                bottom: 6rpx;
-                width: 6rpx;
-                background-color: #00cba3;
-                border-radius: 4rpx;
-            }
-
-            .sub-tip {
-                font-size: 24rpx;
-                color: #ff5e5e;
-                font-weight: normal;
-                margin-left: 10rpx;
-            }
-        }
-
-        .card-box {
-            background: #fff;
-            border-radius: 16rpx;
-            padding: 20rpx;
-            margin-bottom: 20rpx;
-        }
-
-        .custom-input {
-            background-color: #f5f6f8;
-            border-radius: 8rpx;
-            padding: 6rpx 20rpx !important;
-        }
-    }
-}
-
-/* 身份证上传样式 */
-.id-upload-row {
-    gap: 10rpx;
-    display: flex;
-    justify-content: space-between;
-    margin-bottom: 20rpx;
-}
-
-.upload-block {
-    // width: 100%;
-    height: 220rpx;
-    background-color: #f9f9f9;
-    border-radius: 12rpx;
-    border: 1rpx dashed #eee;
-    display: flex;
-    align-items: center;
-    flex-direction: column;
-    justify-content: center;
-    position: relative;
-    overflow: hidden;
-
-    &.full-width {
-        width: 100%;
-        height: 240rpx;
-    }
-
-    .icon-bg {
-        width: 60rpx;
-        height: 60rpx;
-        background-color: #00cba3;
-        border-radius: 50%;
-        display: flex;
-        align-items: center;
-        justify-content: center;
-        margin-bottom: 16rpx;
-    }
-
-    .up-text {
-        font-size: 24rpx;
-        color: #666;
-    }
-}
-</style>

+ 0 - 149
src/pages/demo/certificate.vue

@@ -1,149 +0,0 @@
-<template>
-    <view class="page-container">
-        <u-navbar title="资格证书" :autoBack="true" placeholder border></u-navbar>
-
-        <view class="content">
-            <view class="status-card blue-theme">
-                <u-icon name="checkmark-circle-fill" color="#03C8BE" size="20" style="margin-right: 10rpx;"></u-icon>
-                <view class="info">
-                    <view class="title">签约商户</view>
-                    <view class="desc">xxx健康咨询部(个体工商户)</view>
-                </view>
-            </view>
-
-            <view class="status-card blue-theme">
-                <u-icon name="checkmark-circle-fill" color="#03C8BE" size="20" style="margin-right: 10rpx;"></u-icon>
-                <view class="info">
-                    <view class="title">店长实名认证通过</view>
-                    <view class="sub">身份证 1**********</view>
-                    <view class="desc">所有理疗师签约入驻平台时,身份证均已通过核验</view>
-                </view>
-            </view>
-
-            <view class="status-card blue-theme">
-                <u-icon name="checkmark-circle-fill" color="#03C8BE" size="20" style="margin-right: 10rpx;"></u-icon>
-                <view class="info">
-                    <view class="row-between">
-                        <view class="title">健康证认证</view>
-                        <view class="date">有效期2020.01.01-2021.01.01</view>
-                    </view>
-                    <view class="desc">该理疗师健康体验合格,并在平台已认证通过</view>
-                </view>
-            </view>
-
-            <view class="status-card blue-theme">
-                <u-icon name="checkmark-circle-fill" color="#03C8BE" size="20" style="margin-right: 10rpx;"></u-icon>
-                <view class="info">
-                    <view class="title">该店铺已在平台完成免市场主体登记认证</view>
-                    <view class="desc">个人进行零星小额交易活动,依法不需要办理市场主体登记</view>
-                </view>
-            </view>
-
-            <view class="status-card img-section">
-                <view class="title">所属商家资质</view>
-                <image src="https://via.placeholder.com/600x400?text=Business+License" mode="widthFix" class="cert-img">
-                </image>
-            </view>
-
-            <view class="status-card img-section">
-                <view class="title">从业资格证书</view>
-                <image src="https://via.placeholder.com/600x400?text=Vocational+Certificate" mode="widthFix"
-                    class="cert-img"></image>
-            </view>
-        </view>
-    </view>
-</template>
-
-<script>
-export default {
-    data() {
-        return {
-            
-        };
-    },
-    methods: {
-        
-    }
-};
-</script>
-
-<style lang="scss" scoped>
-.page-container {
-    min-height: 100vh;
-    background-color: #f8f8f8;
-}
-
-.content {
-    padding: 24rpx;
-}
-
-.status-card {
-    padding: 24rpx;
-    margin-bottom: 24rpx;
-    border-radius: 12rpx;
-    background: #fff;
-    display: flex;
-    align-items: flex-start;
-
-    /* 颜色主题 */
-    &.blue-theme {
-        background: linear-gradient(180deg, #E6FFFE 0%, #FFFFFF 100%);;
-
-        .desc {
-            color: #03C8BE;
-        }
-    }
-
-    .info {
-        flex: 1;
-        margin-left: 10rpx;
-
-        .title {
-            font-size: 30rpx;
-            color: #333;
-            margin-bottom: 8rpx;
-        }
-
-        .sub {
-            font-size: 22rpx;
-            color: #999;
-            margin-bottom: 8rpx;
-        }
-
-        .desc {
-            font-size: 24rpx;
-            line-height: 1.4;
-        }
-
-        .date {
-            font-size: 24rpx;
-            color: #333;
-        }
-    }
-
-    .row-between {
-        margin-bottom: 8rpx;
-        display: flex;
-        align-items: center;
-        justify-content: space-between;
-
-        .title {
-            margin-bottom: 0;
-        }
-    }
-}
-
-.img-section {
-    flex-direction: column;
-
-    .title {
-        margin-bottom: 24rpx;
-    }
-
-    .cert-img {
-        width: 100%;
-        border-radius: 10rpx;
-        border: 1px solid #eee;
-    }
-}
-</style>

+ 0 - 229
src/pages/demo/coupon.vue

@@ -1,229 +0,0 @@
-<template>
-    <view class="page-container">
-        <!-- <u-navbar title="我的卡券" :autoBack="true" placeholder border></u-navbar> -->
-        <view class="tabs-box">
-            <u-tabs :list="tabList" @click="tabChange" lineColor="#03C8BE"
-                activeStyle="color: #03C8BE; font-weight: bold;"
-                itemStyle="width: 25%; height: 90rpx;"
-            ></u-tabs>
-        </view>
-
-        <view class="list-container">
-            <view v-for="(item, index) in filteredList" :key="index"
-                :class="['coupon-card', { 'is-disabled': item.status !== 'unused' }]">
-                <view class="left-content">
-                    <view class="coupon-title">{{ item.title }}</view>
-                    <view class="coupon-time">
-                        <view v-if="item.discountType == 3">满{{ item.thresholdAmount }}减{{ item.discountValue }}</view>
-                        <view v-else>满{{ item.thresholdAmount }}可用</view>
-                        <view>有效期至{{ item.expirationTimeString }}</view>
-                    </view>
-                    <view class="coupon-type">
-                        <text>现金券*1</text>
-                        <view class="detail-link" @click.stop="toggleDetail(index)">
-                            详细信息 <u-icon :name="item.showDetail ? 'arrow-up-fill' : 'arrow-down-fill'" size="20rpx" color="#999"></u-icon>
-                        </view>
-                    </view>
-                </view>
-
-                <view class="right-action">
-                    <view class="amount-box" v-if="item.discountType == 3">
-                        <text class="unit">¥</text>
-                        <text class="val">{{ item.discountValue }}</text>
-                    </view>
-                    <view class="amount-box" v-else>
-                        <text class="val">{{ item.rebValue }}</text>
-                        <text class="unit">折</text>
-                    </view>
-
-                    <view v-if="item.status === 'unused'" class="action-btn active">立即使用</view>
-                    <view v-else-if="item.status === 'used'" class="action-btn disabled">已使用</view>
-                    <view v-else class="action-btn disabled">已失效</view>
-                </view>
-
-                <view v-if="item.showDetail" class="detail-info">
-                    <view>限项目:仅可购买服务项目(不含秒杀,升级,续购项目和车费)</view>
-                    <view>限手机:仅登录手机号为{{ item.phone }}使用</view>
-                </view>
-            </view>
-
-            <u-empty v-if="filteredList.length === 0" mode="coupon" marginTop="100"></u-empty>
-        </view>
-    </view>
-</template>
-
-<script>
-import {
-    getCoupon
-} from '@/api/index';
-export default {
-    data() {
-        return {
-            currentTab: 0,
-            tabList: [
-                { name: '全部', value: 'all' },
-                { name: '待使用', value: 'unused' },
-                { name: '已使用', value: 'used' },
-                { name: '已失效', value: 'expired' }
-            ],
-            // 模拟卡券数据
-            couponList: [
-                { id: 1, title: '仅项目费用满498可使用', rebValue: '40', expirationTimeString: '2026-01-24 23:59:59', status: 'unused', phone: '180****9382', showDetail: false },
-                { id: 2, title: '仅项目费用满398可使用', rebValue: '30', expirationTimeString: '2026-01-24 23:59:59', status: 'used', phone: '180****9382', showDetail: false },
-                { id: 3, title: '仅项目费用满298可使用', rebValue: '20', expirationTimeString: '2026-01-24 23:59:59', status: 'expired', phone: '180****9382', showDetail: false },
-                { id: 4, title: '仅项目费用满198可使用', rebValue: '10', expirationTimeString: '2026-01-24 23:59:59', status: 'unused', phone: '180****9382', showDetail: false }
-            ]
-        };
-    },
-    computed: {
-        // 根据Tab过滤列表
-        filteredList() {
-            const tabValue = this.tabList[this.currentTab].value;
-            if (tabValue === 'all') return this.couponList;
-            return this.couponList.filter(item => item.status === tabValue);
-        }
-    },
-    onShow() {
-        // this.getData();
-    },
-    methods: {
-        getData() {
-            let params = {
-                openid: uni.getStorageSync('wx_copenid')
-            }
-            getCoupon(params).then(res => {
-                if (res.data.code == 200) {
-                    this.couponList = res.data.data;
-                }
-            });
-        },
-        tabChange(item) {
-            this.currentTab = item.index;
-        },
-        toggleDetail(index) {
-            this.filteredList[index].showDetail = !this.filteredList[index].showDetail;
-        }
-    }
-};
-</script>
-
-<style lang="scss" scoped>
-.page-container {
-    min-height: 100vh;
-    background-color: #f8f8f8;
-
-    .tabs-box {
-        background-color: #fff;
-        padding-bottom: 10rpx;
-    }
-
-    .list-container {
-        padding: 20rpx 24rpx;
-    }
-}
-
-.coupon-card {
-    margin-bottom: 24rpx;
-    position: relative;
-    border-radius: 16rpx;
-    background-color: #fff;
-    display: flex;
-    flex-wrap: wrap;
-    overflow: hidden;
-    transition: opacity 0.3s;
-
-    &.is-disabled {
-        opacity: 0.65; 
-        filter: grayscale(20%); 
-    }
-
-    .left-content {
-        flex: 1;
-        padding: 30rpx;
-        border-right: 2rpx dashed #eee;
-
-        .coupon-title {
-            font-size: 30rpx;
-            font-weight: bold;
-            color: #333;
-            margin-bottom: 10rpx;
-        }
-
-        .coupon-time {
-            font-size: 22rpx;
-            color: #999;
-            margin-bottom: 20rpx;
-        }
-
-        .coupon-type {
-            font-size: 26rpx;
-            color: #333;
-            display: flex;
-            align-items: center;
-
-            .detail-link {
-                color: #999;
-                margin-left: auto;
-                display: flex;
-                align-items: center;
-            }
-        }
-    }
-
-    .right-action {
-        width: 220rpx;
-        padding: 20rpx;
-        display: flex;
-        align-items: center;
-        flex-direction: column;
-        justify-content: center;
-        background-color: #E8FBFA; 
-
-        .amount-box {
-            color: #03C8BE;
-            margin-bottom: 16rpx;
-
-            .unit {
-                font-size: 24rpx;
-                margin-right: 4rpx;
-            }
-
-            .val {
-                font-size: 50rpx;
-                font-weight: bold;
-            }
-        }
-
-        .action-btn {
-            width: 140rpx;
-            height: 54rpx;
-            border-radius: 40rpx;
-            font-size: 24rpx;
-            display: flex;
-            align-items: center;
-            justify-content: center;
-
-            &.active {
-                background-color: #03C8BE;
-                color: #fff;
-            }
-
-            &.disabled {
-                background-color: transparent;
-                border: 2rpx solid #03C8BE;
-                color: #03C8BE;
-            }
-        }
-    }
-
-    .detail-info {
-        width: 100%;
-        font-size: 22rpx;
-        color: #999;
-        line-height: 1.6;
-        padding: 24rpx;
-        background-color: #fafafa;
-        border-top: 1rpx solid #eee;
-    }
-}
-</style>

+ 0 - 598
src/pages/demo/index.vue

@@ -1,598 +0,0 @@
-<template>
-    <view class="page-container">
-        <view class="header-section">
-            <view class="greeting-area">
-                <view class="bubble-box">
-                    <view class="bubble-text">尊敬的顾客,欢迎您来到广誉源!</view>
-                    <view class="sub-text">你好,我是小源</view>
-                </view>
-                <view class="avatar-box">
-                    <u-avatar src="https://cdn.uviewui.com/uview/album/1.jpg" size="70" shape="circle"></u-avatar>
-                </view>
-            </view>
-
-            <view class="header-actions">
-                <u-grid :border="false" col="4">
-                    <u-grid-item v-for="(item, index) in headerActions" :key="index">
-                        <view class="icon-box">
-                            <u-icon :name="item.icon" color="#fff" size="56rpx"></u-icon>
-                        </view>
-                        <text class="grid-text">{{ item.title }}</text>
-                    </u-grid-item>
-                </u-grid>
-            </view>
-        </view>
-
-        <view class="content">
-            <view class="category-section">
-                <u-grid :border="false" col="4">
-                    <u-grid-item v-for="(item, index) in categories" :key="index">
-                        <u-avatar :src="item.img" size="112rpx" shape="circle" bgColor="#e0f2f1"></u-avatar>
-                        <text class="grid-text">{{ item.title }}</text>
-                    </u-grid-item>
-                </u-grid>
-            </view>
-
-            <view class="rights-section">
-                <view class="card-header">
-                    <view class="header-left">
-                        <u-icon name="gift-fill" color="#ff5e5e" size="64rpx"></u-icon>
-                        <text class="text">权益礼包</text>
-                    </view>
-                    <u-button color="linear-gradient( 180deg, #FD7355 0%, #FDA790 100%)" 
-                        shape="circle" text="去使用"
-                        :customStyle="{ width: 'auto', height: '50rpx', margin: 0, padding: '0 36rpx' }"
-                    ></u-button>
-                </view>
-                <view class="coupon-row">
-                    <view class="coupon-item" v-for="(ticket, index) in tickets" :key="index">
-                        <text class="price">{{ ticket }}元</text>
-                    </view>
-                </view>
-            </view>
-
-            <u-row gutter="10" customStyle="margin-bottom: 30rpx;">
-                <u-col span="5">
-                    <view class="content-card left-card">
-                        <view>
-                            <view class="card-title">
-                                <text class="mtitle">项目推荐</text>
-                                <text class="stitle">全部</text>
-                            </view>
-                            <u-image src="https://via.placeholder.com/60" width="100%" height="200rpx" radius="2rpx" mode="aspectFill"></u-image>
-                        </view>
-                        <view>
-                            <view class="project-name">新中式香薰</view>
-                            <view class="project-desc">放松身心,缓解疲劳</view>
-                            <view class="project-price">
-                                <text class="price">¥ <text class="big">198</text></text>
-                                <text class="sales">近期已售 50+</text>
-                            </view>
-                        </view>
-                    </view>
-                </u-col>
-
-                <u-col span="7">
-                    <view class="content-card right-card">
-                        <view class="card-title">
-                            <text class="mtitle">新人上线</text>
-                            <text class="stitle">更多</text>
-                        </view>
-                        <view class="card-list">
-                            <view class="avatar-item" v-for="(p, i) in newComers" :key="i">
-                                <u-avatar :src="p.avatar" size="80rpx" shape="circle"></u-avatar>
-                                <text class="name">{{ p.name }}</text>
-                            </view>
-                        </view>
-                    </view>
-                    <view class="content-card right-card">
-                        <view class="card-title">
-                            <text class="mtitle">极速达</text>
-                            <text class="stitle">更多</text>
-                        </view>
-                        <view class="card-list">
-                            <view class="avatar-item" v-for="(p, i) in speedyList" :key="i + 's'">
-                                <u-avatar :src="p.avatar" size="80rpx" shape="circle"></u-avatar>
-                                <text class="name">{{ p.name }}</text>
-                            </view>
-                        </view>
-                    </view>
-                </u-col>
-            </u-row>
-
-            <view class="mlist-section">
-                <view class="section-header">
-                    <text class="title">推荐商户</text>
-                    <text class="more">更多</text>
-                </view>
-                <view class="merchant-card" v-for="(item, index) in merchantList" :key="index">
-                    <view class="left-avatar">
-                        <view class="badge">HOT</view>
-                        <u-avatar :src="item.avatar" size="136rpx" shape="circle"></u-avatar>
-                        <view class="status-pill green-bg">{{ item.status }}</view>
-                    </view>
-                    <view class="right-content">
-                        <view>
-                            <view class="row-header">
-                                <text class="name">{{ item.name }}</text>
-                                <text class="avail-time">最早可约: <text class="highlight">{{ item.earliestTime }}</text></text>
-                            </view>
-                            <view class="row-info flex">
-                                <text class="score">{{ item.score }}分</text>
-                                <u-line direction="col" length="18rpx" margin="0 16rpx"></u-line>
-                                <text class="shop-name">{{ item.shopName }}</text>
-                                <u-line direction="col" length="18rpx" margin="0 16rpx"></u-line>
-                                <text>服务 {{ item.serviceCount }} 单</text>
-                            </view>
-                        </view>
-                        <view>
-                            <view class="row-tags">
-                                <u-icon name="heart-fill" color="#ff6b81" size="14"></u-icon> 
-                                <text class="tag-text">{{ item.likes }}</text>
-                                <u-line direction="col" length="18rpx" margin="0 16rpx"></u-line>
-                                <u-icon name="rmb-circle-fill" color="#f1c40f" size="14"></u-icon> 
-                                <text class="tag-text">{{ item.coins }}</text>
-                                <u-line direction="col" length="18rpx" margin="0 16rpx"></u-line>
-                                <view class="text-tag" v-if="item.freeTravel">免出行费</view>
-                            </view>
-                            <view class="action-btn">
-                                <u-button text="去下单" color="#00cba3" shape="circle" size="small"
-                                    :customStyle="{ width: '138rpx', height: '56rpx', fontSize: '30rpx' }"
-                                ></u-button>
-                            </view>
-                        </view>
-                    </view>
-                </view>
-            </view>
-
-        </view>
-    </view>
-</template>
-
-<script>
-import {
-    windows,
-    ranking,
-    project,
-    getBannerList,
-    brightSpot,
-    couponReceive,
-    getAccessToken,
-} from '@/api/index';
-export default {
-    data() {
-        return {
-            query: {},
-            headerActions: [
-                { title: '充值卡包', icon: 'coupon-fill' },
-                { title: '商户入驻', icon: 'home-fill' },
-                { title: '收藏商户', icon: 'star-fill' },
-                { title: '我浏览过', icon: 'account-fill' }
-            ],
-            categories: [
-                { title: '资深', img: 'https://cdn.uviewui.com/uview/album/1.jpg' },
-                { title: '专家', img: 'https://cdn.uviewui.com/uview/album/2.jpg' },
-                { title: '保健', img: 'https://cdn.uviewui.com/uview/album/3.jpg' },
-                { title: '全部', img: 'https://cdn.uviewui.com/uview/album/4.jpg' }
-            ],
-            tickets: ['40', '30', '20', '10'],
-            newComers: [
-                { name: '赵青青', avatar: 'https://cdn.uviewui.com/uview/album/5.jpg' },
-                { name: '都眉', avatar: 'https://cdn.uviewui.com/uview/album/6.jpg' },
-                { name: '杨丽', avatar: 'https://cdn.uviewui.com/uview/album/7.jpg' }
-            ],
-            speedyList: [
-                { name: '赵青青', avatar: 'https://cdn.uviewui.com/uview/album/5.jpg' },
-                { name: '都眉', avatar: 'https://cdn.uviewui.com/uview/album/6.jpg' },
-                { name: '杨丽', avatar: 'https://cdn.uviewui.com/uview/album/7.jpg' }
-            ],
-            merchantList: [
-                { name: '赵青青', avatar: 'https://cdn.uviewui.com/uview/album/1.jpg', status: '可预约', score: '5.0', shopName: '小雨养生', serviceCount: 32, likes: 29, coins: 12, freeTravel: true, earliestTime: '今15:30' },
-                { name: '赵青青', avatar: 'https://cdn.uviewui.com/uview/album/2.jpg', status: '可服务', score: '5.0', shopName: '小雨养生', serviceCount: 32, likes: 29, coins: 12, freeTravel: true, earliestTime: '今15:30' }
-            ]
-        };
-    },
-    onLoad(query) {
-        this.query = query;
-        // 静默登录
-        if (query.code) this.onLogin();
-    },
-    onShow() {
-        // 获取城市
-        this.getCity();
-        // 获取banner
-		this.getBanner();
-    },
-    methods: {
-        // 静默登录
-		onLogin() {
-			let params = {
-				code: this.query.code
-			}
-            getAccessToken(params).then(res => {
-                if (res.data.code == 200) {
-                    uni.setStorageSync('wx_copenid', res.data.data.copenid);
-                    uni.setStorageSync('access-token', res.data.data.token);
-                }
-            });
-		},
-        // 获取城市
-        getCity() {
-            uni.request({
-                url: 'https://restapi.amap.com/v3/ip',
-                data: {
-                    key: '5457092e6c62b83c1b2e45dbe973d858'
-                },
-                success: (res) => {
-                    uni.setStorageSync('selectCity', res.data.city.slice(0, 2));
-                    if (res.data.status == 1 && res.data.rectangle) {
-                        const parts = res.data.rectangle.split(';');
-                        const [lon1, lat1] = parts[0].split(',').map(Number); // 转为数字
-                        const [lon2, lat2] = parts[1].split(',').map(Number); // 转为数字
-                        
-                        // 计算中心点
-                        const centerLon = (lon1 + lon2) / 2;
-                        const centerLat = (lat1 + lat2) / 2;
-
-                        console.log(`所在城市: ${res.data.province} ${res.data.city}`);
-                        console.log(`计算出的中心坐标: [${centerLon}, ${centerLat}]`);
-                    }
-                }
-            });
-        },
-        // 获取banner
-        getBanner() {
-            getBannerList({
-				current: 1,
-				size: 10,
-			}).then(res => {
-                if (res.data.code == 200) {
-                    this.list = res.data.data.map(item => this.$globalData.publicUrl + item.cImgUrl);
-                }
-			});
-        },
-    }
-};
-</script>
-
-<style lang="scss" scoped>
-.page-container {
-    min-height: 100vh;
-    background-color: #f8f8f8;
-
-    .header-section {
-        overflow: hidden; 
-        /* 使用椭圆裁剪出弧形 */
-        clip-path: ellipse(120% 100% at 50% 0);
-        background: linear-gradient(to right, #4ecdc4, #2bb9a9);
-
-        .greeting-area {
-            padding: 20rpx 40rpx;
-            display: flex;
-            align-items: center;
-            justify-content: space-between;
-
-            .bubble-box {
-                padding: 16rpx 24rpx;
-
-                .bubble-text {
-                    font-size: 26rpx;
-                    font-weight: 500;
-                    color: #0D9F97;
-                    padding: 6rpx 24rpx;
-                    margin-bottom: 16rpx;
-                    background: linear-gradient(90deg, #E8FDFD 0%, #AAEEE2 100%);
-                    border-radius: 40rpx;
-                }
-
-                .sub-text {
-                    font-size: 24rpx;
-                    color: #fff;
-                    opacity: 0.9;
-                    padding: 0 24rpx;
-                }
-            }
-        }
-
-        .header-actions {
-            margin: 0 32rpx;
-            padding: 20rpx 0 40rpx;
-            border-radius: 32rpx;
-            background: linear-gradient(182deg, #26C3BC 0%, #0BBBC1 100%);
-
-            .icon-box {
-                margin-bottom: 10rpx;
-            }
-
-            .grid-text {
-                color: #fff;
-                font-size: 24rpx;
-            }
-        }
-    }
-
-    .content {
-        padding: 30rpx;
-        position: relative;
-        z-index: 10;
-    }
-
-    .category-section {
-        margin-bottom: 30rpx;
-
-        .grid-text {
-            font-weight: 500;
-            font-size: 24rpx;
-            color: #333333;
-            margin-top: 16rpx;
-        }
-    }
-
-    .rights-section {
-        padding: 24rpx;
-        margin-bottom: 30rpx;
-        background: #FBECE7;
-        border-radius: 20rpx;
-
-        .card-header {
-            margin-bottom: 20rpx;
-            display: flex;
-            align-items: center;
-            justify-content: space-between;
-
-            .header-left {
-                display: flex;
-                align-items: center;
-            }
-
-            .text {
-                font-size: 30rpx;
-                font-weight: bold;
-                color: #333;
-                margin-left: 10rpx;
-            }
-        }
-
-        .coupon-row {
-            display: flex;
-            justify-content: space-between;
-
-            .coupon-item {
-                width: 22%;
-                color: #FA5039;
-                font-weight: bold;
-                font-size: 32rpx;
-                text-align: center;
-                padding: 20rpx 0;
-                border-radius: 12rpx;
-                background-color: #fff;
-                box-shadow: 0 4rpx 12rpx rgba(255, 94, 94, 0.1);
-            }
-        }
-    }
-
-    .content-card {
-        height: 450rpx;
-        padding: 24rpx;
-        border-radius: 20rpx;
-        background-color: #fff;
-
-        .card-title {
-            margin-bottom: 10rpx;
-            display: flex;
-            align-items: baseline;
-            justify-content: space-between;
-
-            .mtitle {
-                font-size: 30rpx;
-                font-weight: bold;
-                color: #000;
-            }
-
-            .stitle {
-                font-size: 24rpx;
-                color: #999;
-            }
-        }
-
-        &.left-card {
-            display: flex;
-            flex-direction: column;
-            justify-content: space-between;
-
-            .project-name {
-                font-size: 28rpx;
-                font-weight: bold;
-                color: #333;
-            }
-
-            .project-desc {
-                font-size: 20rpx;
-                color: #999;
-                margin: 2rpx 0 10rpx;
-            }
-
-            .project-price {
-                display: flex;
-                align-items: baseline;
-                justify-content: space-between;
-
-                .price {
-                    color: #ff5e5e;
-                    font-size: 24rpx;
-
-                    .big {
-                        font-size: 36rpx;
-                        font-weight: bold;
-                    }
-                }
-
-                .sales {
-                    font-size: 20rpx;
-                    color: #ccc;
-                }
-            }
-        }
-
-        &.right-card {
-            height: 220rpx;
-            margin-bottom: 12rpx;
-            display: flex;
-            flex-direction: column;
-            justify-content: space-between;
-
-            &:last-child {
-                margin-bottom: 0;
-            }
-
-            .card-list {
-                display: flex;
-                justify-content: space-between;
-
-                .avatar-item {
-                    display: flex;
-                    align-items: center;
-                    flex-direction: column;
-
-                    .name {
-                        font-size: 22rpx;
-                        color: #333;
-                        margin-top: 8rpx;
-                    }
-                }
-            }
-        }
-    }
-
-    .mlist-section {
-        .section-header {
-            padding: 0 6rpx;
-            margin-bottom: 16rpx;
-            display: flex;
-            align-items: center;
-            justify-content: space-between;
-
-            .title {
-                font-size: 32rpx;
-                font-weight: bold;
-                color: #333;
-            }
-
-            .more {
-                font-size: 24rpx;
-                color: #999;
-            }
-        }
-    }
-}
-
-.merchant-card {
-    padding: 24rpx 32rpx;
-    margin-bottom: 20rpx;
-    border-radius: 20rpx;
-    background-color: #fff;
-    display: flex;
-    position: relative;
-
-    .left-avatar {
-        width: 120rpx;
-        margin-right: 24rpx;
-        display: flex;
-        align-items: center;
-        flex-direction: column;
-
-        .badge {
-            color: #fff;
-            font-size: 22rpx;
-            position: absolute;
-            top: 0;
-            left: 0;
-            padding: 4rpx 16rpx;
-            border-radius: 8rpx 0 8rpx 0;
-            background: linear-gradient(to right, #ff5e5e, #ff8a8a);
-            z-index: 10;
-        }
-
-        .status-pill {
-            font-size: 24rpx;
-            color: #fff;
-            margin-top: 8rpx;
-            padding: 4rpx 24rpx;
-            z-index: 5;
-            border-radius: 20rpx;
-
-            &.green-bg {
-                background-color: #00cba3;
-            }
-        }
-    }
-
-    .right-content {
-        flex: 1;
-        display: flex;
-        flex-direction: column;
-        justify-content: space-between;
-
-        .row-header {
-            display: flex;
-            justify-content: space-between;
-            align-items: center;
-            margin-bottom: 8rpx;
-
-            .name {
-                font-size: 32rpx;
-                font-weight: 500;
-                color: #333;
-            }
-
-            .avail-time {
-                font-size: 22rpx;
-                color: #00cba3;
-                padding: 6rpx 32rpx;
-                background: linear-gradient(90deg, rgba(27, 214, 205, 0.1) 0%, rgba(27, 214, 205, 0.3) 100%);
-
-                .highlight {
-                    margin-left: 6rpx;
-                }
-            }
-        }
-
-        .row-info {
-            font-size: 24rpx;
-            color: #666;
-            margin-bottom: 12rpx;
-
-            .score {
-                color: #ff6b81;
-                font-weight: bold;
-            }
-
-            .shop-name {
-                
-            }
-        }
-
-        .row-tags {
-            font-size: 24rpx;
-            color: #666;
-            padding: 4rpx 0;
-            display: flex;
-            align-items: center;
-
-            .tag-text {
-                margin-left: 6rpx;
-            }
-
-            .text-tag {
-                color: #F35031;
-            }
-        }
-
-        .action-btn {
-            position: absolute;
-            right: 20rpx;
-            bottom: 24rpx;
-        }
-    }
-}
-</style>

+ 0 - 562
src/pages/demo/order-detail.vue

@@ -1,562 +0,0 @@
-<template>
-	<view class="order-container">
-		<view class="status-header">
-			<view class="status-title">
-				<text>请在 <text class="highlight">02:31</text> 内支付</text>
-			</view>
-			<view class="status-desc">超时未支付将自动取消</view>
-		</view>
-
-		<view class="card-box info-card">
-			<view class="address-section">
-				<view class="address-content">
-					<view class="address-detail">山西省太原市万柏林区千峰北路移村小区11号楼4单元502</view>
-					<view class="user-info">郭丽丽 187****0987</view>
-				</view>
-				<view class="edit-text flex">
-					<text>修改</text>
-					<u-icon name="arrow-right" size="12" color="#03C1B8"></u-icon>
-				</view>
-			</view>
-
-			<view class="item-row">
-				<text class="label">服务商家</text>
-				<text class="value bold">郭丽丽</text>
-			</view>
-			<view class="item-row">
-				<text class="label">商家标签</text>
-				<view class="tags">
-					<view class="tag-item">非常有耐心</view>
-					<view class="tag-item">干净卫生</view>
-					<view class="tag-item">服务细心周到</view>
-				</view>
-			</view>
-			<view class="item-row">
-				<text class="label">服务时间</text>
-				<view class="value-group">
-					<text class="value">2025-09-14 17:21:55</text>
-					<view class="edit-text flex">
-						<text>修改</text>
-						<u-icon name="arrow-right" size="12" color="#03C1B8"></u-icon>
-					</view>
-				</view>
-			</view>
-
-			<view class="action-icons">
-				<view class="icon-item">
-					<u-icon name="order" size="26" color="#333"></u-icon>
-					<text>取消订单</text>
-				</view>
-				<view class="icon-item primary" @click="showPayPopup = true">
-					<u-icon name="red-packet" size="26" color="#03C1B8"></u-icon>
-					<text>去支付</text>
-				</view>
-			</view>
-		</view>
-
-		<view class="card-box detail-card">
-			<view class="service-main">
-				<u-image src="https://via.placeholder.com/60" width="120rpx" height="120rpx" radius="12rpx" mode="aspectFill"></u-image>
-				<view class="service-info">
-					<view class="service-title">泰式 · 王室古法SPA</view>
-					<view class="service-sub">服务时长:60分钟</view>
-					<view class="service-sub">数量:1</view>
-				</view>
-				<view class="service-price">¥493.4</view>
-			</view>
-
-			<view class="item-row">
-				<text class="label">出行方式</text>
-				<text class="value">滴滴</text>
-			</view>
-			<view class="item-row">
-				<text class="label">预估车费</text>
-				<text class="value">0.00</text>
-			</view>
-			<view class="item-row">
-				<text class="label">优惠券</text>
-				<text class="value discount">-10.00</text>
-			</view>
-
-			<view class="total-row">
-				合计:<text class="symbol">¥</text><text class="amount">483.4</text>
-			</view>
-		</view>
-
-		<view class="card-box memo-card">
-			<view class="item-row">
-				<text class="label">订单备注</text>
-				<view class="edit-text flex">
-					<text>修改</text>
-					<u-icon name="arrow-right" size="12" color="#03C1B8"></u-icon>
-				</view>
-			</view>
-			<view class="item-row">
-				<text class="label">订单编号</text>
-				<view class="value">246453782748937746</view>
-			</view>
-			<view class="item-row">
-				<text class="label">下单时间</text>
-				<view class="value">2025-09-14 17:21:55</view>
-			</view>
-		</view>
-
-		<u-popup :show="showPayPopup" mode="bottom" @close="showPayPopup = false" round="20">
-			<view class="pay-popup">
-				<view class="worker-header">
-					<u-avatar src="https://via.placeholder.com/100" size="60"></u-avatar>
-					<view class="worker-detail">
-						<view class="name-row">
-							<text class="name">赵青青</text>
-							<text class="level-tag">资深</text>
-						</view>
-						<view class="intro">我擅长中式按摩,泰式拉伸,精油spa...</view>
-						<view class="auth-row">
-							<text class="auth-item"><u-icon name="checkmark-circle-fill" color="#03C1B8"
-									size="14"></u-icon> 实名认证</text>
-							<text class="auth-item"><u-icon name="checkmark-circle-fill" color="#03C1B8"
-									size="14"></u-icon> 爽约包赔</text>
-							<text class="auth-item"><u-icon name="checkmark-circle-fill" color="#03C1B8"
-									size="14"></u-icon> 商户认证</text>
-						</view>
-					</view>
-					<view class="score-badge">4.9分</view>
-				</view>
-
-				<view class="selected-project-box">
-					<view class="proj-main">
-						<image class="proj-img" src="https://via.placeholder.com/80" mode="aspectFill"></image>
-						<view class="proj-info">
-							<view class="p-price">¥483.4 <text class="p-old">原价1200.00</text></view>
-							<view class="p-detail">已选:中式按摩 | 120分钟</view>
-						</view>
-						<text class="detail-link">项目详情</text>
-					</view>
-
-					<view class="recommend-title">推荐项目</view>
-					<view class="tag-group">
-						<view class="tag-active">古韵舒筋</view>
-						<view class="tag-normal">泰式唤醒</view>
-						<view class="tag-normal">养生spa</view>
-						<view class="tag-normal">欧式奢华</view>
-						<view class="tag-normal">新中式香薰</view>
-					</view>
-
-					<view class="number-row">
-						<text class="label">购买数量</text>
-						<u-number-box v-model="buyNum" :min="1" :max="99" integer></u-number-box>
-					</view>
-				</view>
-
-				<view class="pop-footer">
-					<view class="footer-total">
-						合计:<text class="f-symbol">¥</text><text class="f-amount">{{ (483.4 * buyNum).toFixed(1)
-							}}</text>
-					</view>
-					<view class="submit-btn" @click="handleConfirm">确认续购</view>
-				</view>
-			</view>
-		</u-popup>
-	</view>
-</template>
-
-<script>
-export default {
-	data() {
-		return {
-			showPayPopup: false,
-			buyNum: 1
-		};
-	},
-	methods: {
-		handleConfirm() {
-			uni.showToast({ title: '发起支付...', icon: 'none' });
-			this.showPayPopup = false;
-		}
-	}
-};
-</script>
-
-<style lang="scss" scoped>
-.order-container {
-	min-height: 100vh;
-	padding: 24rpx;
-	background: linear-gradient(180deg, #d8f5ef 0%, #f7f9fc 100%);
-
-	.status-header {
-		padding: 32rpx 10rpx;
-
-		.status-title {
-			font-weight: 500;
-			font-size: 38rpx;
-			color: #2F3437;
-			margin-bottom: 10rpx;
-
-			.highlight {
-				color: #ff5e5e;
-				margin: 0 8rpx;
-			}
-		}
-
-		.status-desc {
-			font-size: 26rpx;
-			color: #999;
-		}
-	}
-
-	.card-box  {
-		padding: 24rpx;
-		margin-bottom: 24rpx;
-		background: #fff;
-		border-radius: 16rpx;
-		box-shadow: 0rpx 4rpx 12rpx 0rpx rgba(212,212,212,0.1);
-
-		.edit-text {
-			font-size: 24rpx;
-			color: #03C1B8;
-			margin-left: 20rpx;
-		}
-		
-		.item-row {
-			margin-bottom: 16rpx;
-			display: flex;
-			justify-content: space-between;
-
-			.label {
-				font-size: 26rpx;
-				color: #666;
-			}
-
-			.value {
-				font-size: 28rpx;
-				color: #333;
-			}
-		}
-	}
-}
-
-.info-card {
-	.address-section {
-		padding: 12rpx 18rpx;
-		margin-bottom: 20rpx;
-		border: 1rpx solid rgba(32,203,194,0.1);
-		border-radius: 10rpx;
-		background: #f8f8f8;
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-
-		.address-content {
-			flex: 1;
-		}
-
-		.address-detail {
-			font-size: 28rpx;
-			color: #333;
-			font-weight: bold;
-			line-height: 1.4;
-		}
-
-		.user-info {
-			font-size: 24rpx;
-			color: #999;
-			margin-top: 10rpx;
-		}
-	}
-
-	.item-row {
-		justify-content: flex-start;
-
-		.value {
-			&.bold {
-				font-weight: bold;
-			}
-		}
-
-		.tags {
-			display: flex;
-			flex-wrap: wrap;
-			gap: 10rpx;
-
-			.tag-item {
-				color: #03C1B8;
-				font-size: 20rpx;
-				padding: 4rpx 12rpx;
-				border-radius: 4rpx;
-				background: #eefaf8;
-			}
-		}
-
-		.value-group {
-			display: flex;
-			justify-content: space-between;
-		}
-	}
-
-	.action-icons {
-		margin-top: 20rpx;
-		padding-top: 20rpx;
-		display: flex;
-		justify-content: space-around;
-		border-top: 1rpx solid #f5f5f5;
-
-		.icon-item {
-			display: flex;
-			flex-direction: column;
-			align-items: center;
-			font-size: 24rpx;
-			color: #666;
-
-			text {
-				margin-top: 10rpx;
-			}
-
-			&.primary {
-				color: #03C1B8;
-			}
-		}
-	}
-}
-
-.detail-card {
-	.service-main {
-		display: flex;
-		margin-bottom: 30rpx;
-
-		.service-info {
-			flex: 1;
-			margin-left: 20rpx;
-		}
-
-		.service-title {
-			font-size: 28rpx;
-			font-weight: bold;
-			color: #333;
-		}
-
-		.service-sub {
-			font-size: 22rpx;
-			color: #999;
-			margin-top: 6rpx;
-		}
-
-		.service-price {
-			font-size: 28rpx;
-			color: #333;
-			font-weight: bold;
-		}
-	}
-
-	.item-row {
-		.value {
-			&.discount {
-				color: #ff5e5e;
-			}
-		}
-	}
-
-	.total-row {
-		font-size: 26rpx;
-		color: #333;
-		text-align: right;
-		margin-top: 20rpx;
-		border-top: 1rpx solid #f5f5f5;
-
-		.symbol {
-			color: #ff5e5e;
-			font-size: 24rpx;
-		}
-
-		.amount {
-			color: #ff5e5e;
-			font-size: 36rpx;
-			font-weight: bold;
-		}
-	}
-}
-
-.pay-popup {
-	padding: 30rpx;
-	background: #fff;
-
-	.worker-header {
-		display: flex;
-		position: relative;
-		margin-bottom: 30rpx;
-
-		.worker-detail {
-			margin-left: 20rpx;
-			flex: 1;
-
-			.name-row {
-				display: flex;
-				align-items: center;
-
-				.name {
-					font-size: 32rpx;
-					font-weight: bold;
-				}
-
-				.level-tag {
-					background: #5c7fa9;
-					color: #fff;
-					font-size: 18rpx;
-					padding: 2rpx 10rpx;
-					border-radius: 100rpx;
-					margin-left: 10rpx;
-				}
-			}
-
-			.intro {
-				font-size: 24rpx;
-				color: #999;
-				margin: 8rpx 0;
-			}
-
-			.auth-row {
-				display: flex;
-
-				.auth-item {
-					font-size: 20rpx;
-					color: #03C1B8;
-					margin-right: 15rpx;
-					display: flex;
-					align-items: center;
-				}
-			}
-		}
-
-		.score-badge {
-			position: absolute;
-			left: 0;
-			bottom: -10rpx;
-			background: #fff;
-			border: 2rpx solid #ff5e5e;
-			color: #ff5e5e;
-			font-size: 20rpx;
-			padding: 0 10rpx;
-			border-radius: 100rpx;
-		}
-	}
-
-	.selected-project-box {
-		background: #f8f9fb;
-		border-radius: 16rpx;
-		padding: 24rpx;
-
-		.proj-main {
-			display: flex;
-			align-items: center;
-
-			.proj-img {
-				width: 100rpx;
-				height: 100rpx;
-				border-radius: 12rpx;
-			}
-
-			.proj-info {
-				flex: 1;
-				margin-left: 20rpx;
-
-				.p-price {
-					font-size: 32rpx;
-					color: #ff5e5e;
-					font-weight: bold;
-
-					.p-old {
-						font-size: 22rpx;
-						color: #ccc;
-						text-decoration: line-through;
-						font-weight: normal;
-						margin-left: 10rpx;
-					}
-				}
-
-				.p-detail {
-					font-size: 24rpx;
-					color: #666;
-					margin-top: 6rpx;
-				}
-			}
-
-			.detail-link {
-				font-size: 24rpx;
-				color: #666;
-			}
-		}
-
-		.recommend-title {
-			font-size: 28rpx;
-			font-weight: bold;
-			margin: 30rpx 0 20rpx;
-		}
-
-		.tag-group {
-			display: flex;
-			flex-wrap: wrap;
-
-			.tag-active {
-				border: 2rpx solid #03C1B8;
-				color: #03C1B8;
-				background: #fff;
-				padding: 8rpx 20rpx;
-				border-radius: 8rpx;
-				font-size: 24rpx;
-				margin: 0 16rpx 16rpx 0;
-			}
-
-			.tag-normal {
-				background: #eeeeee;
-				color: #333;
-				padding: 10rpx 20rpx;
-				border-radius: 8rpx;
-				font-size: 24rpx;
-				margin: 0 16rpx 16rpx 0;
-			}
-		}
-
-		.number-row {
-			display: flex;
-			justify-content: space-between;
-			align-items: center;
-			margin-top: 20rpx;
-
-			.label {
-				font-size: 26rpx;
-				font-weight: bold;
-			}
-		}
-	}
-
-	.pop-footer {
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-		margin-top: 40rpx;
-		padding-bottom: env(safe-area-inset-bottom);
-
-		.footer-total {
-			font-size: 28rpx;
-			color: #333;
-
-			.f-symbol {
-				color: #ff5e5e;
-			}
-
-			.f-amount {
-				color: #ff5e5e;
-				font-size: 40rpx;
-				font-weight: bold;
-			}
-		}
-
-		.submit-btn {
-			background: #00e0b5;
-			color: #fff;
-			padding: 20rpx 80rpx;
-			border-radius: 100rpx;
-			font-weight: bold;
-		}
-	}
-}
-</style>

+ 0 - 607
src/pages/demo/rec.vue

@@ -1,607 +0,0 @@
-<template>
-    <view class="page-container">
-		<z-paging ref="paging" v-model="dataList" @query="getList">
-            <template #top>
-                <view class="header-section">
-                    <view class="search-wrapper flex">
-                        <view class="location flex">
-                            <text>太原市</text>
-                            <u-icon name="arrow-down" size="24rpx" color="#333" style="margin-left: 4px;"></u-icon>
-                        </view>
-                        <view class="search-box">
-                            <u-search placeholder="请输入名称搜索" :show-action="false" bgColor="#fff"
-                                v-model="params.cNickName" 
-                                @search="onSearch" 
-                                @custom="onSearch" 
-                            ></u-search>
-                        </view>
-                    </view>
-
-                    <view class="filter-tags">
-                        <view class="tag-item total">
-                            <text>热门推荐</text>
-                        </view>
-                        <view :class="{'tag-item': true, 'active': index === tabCurrent}" 
-                            v-for="(item, index) in tabList" :key="index"
-                            @click="onTabChange">
-                            <text>{{ item }}</text>
-                        </view>
-                    </view>
-                </view>
-
-                <view class="banner-box">
-                    <u-image src="/static/identify/bg0.png" width="100%" height="120rpx" radius="0" mode="widthFix"></u-image>
-                    <view class="call-box" @click="$utils.makePhoneCall(servicePhone)">
-                        <image class="icon" src="/static/identify/call.png"></image>
-                        <text>客服电话:{{ servicePhone }}</text>
-                    </view>
-                </view>
-            </template>
-
-            <view class="list-section">
-                <view class="list-item" v-for="(item, index) in dataList" :key="index">
-                    <view class="left-avatar" @click="goToDetails(item)">
-                        <!-- hot or recommend -->
-                        <view class="badge" :class="{ hot: true }">hot</view>
-
-                        <u-avatar :src="$globalData.publicUrl + item.cPortrait" size="136rpx" shape="circle" mode="aspectFill"></u-avatar>
-
-                        <view class="status-pill" 
-                            :class="{'green-bg': item.nStatus === 0}"
-                            v-if="item.nStatus === 0">
-                            可预约
-                        </view>
-                    </view>
-
-                    <view class="right-content" @click="goToDetails(item)">
-                        <view class="row-header">
-                            <text class="name">{{ item.cNickName }}</text>
-                            <!-- <text class="avail-time">最早可约: <text class="highlight">{{ item.earliestTime }}</text></text> -->
-                        </view>
-
-                        <view class="row-info two-line-text" v-if="item.cJianjie">{{ item.cJianjie }}</view>
-                        <view class="row-info">
-                            <text class="score">{{ item.nStar }}分</text>
-                            <u-line color="#dadada" direction="col" length="18rpx" margin="0 12rpx"></u-line>
-                            <!-- <text class="shop-name">{{ item.nZan }}</text>
-                            <u-line color="#dadada" direction="col" length="18rpx" margin="0 12rpx"></u-line> -->
-                            <text class="service-count">服务 {{ item.nNum }} 单</text>
-                        </view>
-
-                        <view class="row-tags">
-                            <view class="icon-tag">
-                                <u-icon name="heart-fill" color="#ff6b81" size="14"></u-icon>
-                                <text>{{ item.nZan || 0 }}</text>
-                            </view>
-                            <view class="icon-tag">
-                                <u-icon name="map-fill" color="#00cba3" size="14"></u-icon>
-                                <text>{{ item.distance }} km</text>
-                            </view>
-                            <view class="text-tag" v-if="item.freeTravel">免出行费</view>
-                        </view>
-                    </view>
-
-                    <view class="action-btn">
-                        <button 
-                            size="mini"
-                            :class="{
-                                'btn': true,
-                                'disabled': item.nStatus !== 0
-                            }"
-                            :disabled="item.nStatus !== 0"
-                            @click.stop="onSubmit(item)"
-                        >{{ item.nStatus == 0 ? '立即预约' : '不可预约' }}</button>
-                    </view>
-                </view>
-            </view>
-        </z-paging>
-
-        <!-- 商品选择 -->
-        <Popup ref="orderPopup" :round="10" mode="bottom">
-            <view class="popup-box">
-				<view class="list">
-					<view class="item" v-for="(item,index) in projects" :key="index">
-						<view class="imgs">
-							<image :src="$globalData.publicUrl + item.cCover" mode="" />
-						</view>
-						<view class="right">
-							<view class="list_title">
-								<view class="title">{{item.cTitle}}</view>
-								<!-- <view class="time">{{item.nMinute}}分钟</view> -->
-								<view class="price">
-									<span>¥</span>{{item.dPrice}}
-								</view>
-							</view>
-							<view class="num">
-								{{item.cLdList}}
-								<span>超{{item.nSaleNumber}}选择</span>
-							</view>
-							<view class="time">
-								<view class="money">{{item.nMinute}}分钟</view>
-								<view class="counter">
-                                    <u-number-box v-model="item.number">
-                                        <view slot="minus" class="minus">
-                                            <u-icon name="minus-circle-fill" color="#999" size="36rpx"></u-icon>
-                                        </view>
-                                        <text
-                                            class="input" slot="input"
-                                            style="width: 50rpx; text-align: center;"
-                                        >{{ item.number }}</text>
-                                        <view slot="plus" class="plus">
-                                            <u-icon name="plus-circle-fill" color="#11C7BF" size="36rpx"></u-icon>
-                                        </view>
-                                    </u-number-box>
-								</view>
-							</view>
-						</view>
-					</view>
-				</view>
-				<view class="btns" @click="nowYuyue">
-                    <text>立即预约</text>
-                </view>
-			</view>
-        </Popup>
-    </view>
-</template>
-
-<script>
-import {
-    addOrder,
-    getCityList,
-    engineer,
-    engineerDetails,
-} from '@/api/index';
-import {
-    getAddrList,
-} from '@/api/address';
-import Popup from '@/components/popup/index.vue';
-export default {
-    components: {
-        Popup,
-    },
-    data() {
-        return {
-            params: {
-                nB2: '',
-                free: '',
-                nStatus: '',
-                cNickName: '',
-            },
-            tabList: ['全部', '可服务', '新商家'],
-            tabCurrent: 0,
-            dataList: [],
-            projects: [],
-            servicePhone: '19935577015'
-        };
-    },
-    onShow() {
-        this.city = uni.getStorageSync('selectCity')
-    },
-    methods: {
-        getList(pageNo, pageSize) {
-            let params = {
-                current: pageNo,
-				size: pageSize,
-                ...this.params,
-
-                nTong: 1,
-                nStatus2: 0,
-                // jsGrade: '',
-                city: this.city,
-                
-                latitude: uni.getStorageSync('latitude'),
-                longitude: uni.getStorageSync('longitude'),
-                projectId: uni.getStorageSync('projectId'),
-            }
-
-            engineer(params).then(res => {
-                if (res.data.code === 200) {
-					this.$refs.paging.complete(res.data.data.records);
-				} else {
-					this.$refs.paging.complete(false);
-				}
-            }).catch(() => {
-                
-            });
-        },
-        // 搜索
-        onSearch() {
-            this.$refs.paging.reload();
-        },
-        // tab事件
-        onTabChange(e) {
-            this.tabCurrent = e;
-            let params = {
-                nB2: '',
-                free: '',
-                nStatus: '',
-            };
-            // 可服务
-            if (e == 1) {
-                params.nStatus = 0;
-            }
-            // 新商家
-            else if (e == 2) {
-                params.nB2 = 1;
-            }
-            // 免出行费
-            else if (e == 3) {
-                params.free = 1;
-            }
-            this.params = {
-                ...this.params,
-                ...params
-            };
-            // api
-            this.$refs.paging.reload();
-        },
-        // 下单
-        onSubmit(e) {
-			if (!this.$utils.checkLogin({ type: 'modal' })) return;
-            let params = {
-                id: e.id
-            }
-            engineerDetails(params).then(res => {
-                res.data.data.projects.forEach(element => {
-                    element.number = 0
-                });
-                this.details = res.data.data;
-                this.projects = res.data.data.projects;
-                this.$refs.orderPopup.open();
-            });
-        },
-        goToDetails(e) {
-			if (!this.$utils.checkLogin({ type: 'modal' })) return;
-            let str = uni.$u.queryParams({
-                id: e.id
-            });
-            uni.navigateTo({
-                url: `/pages/identify/details${str}`
-            });
-        },
-    }
-};
-</script>
-
-<style lang="scss" scoped>
-.page-container {
-    min-height: 100vh;
-	background: linear-gradient(180deg, rgba(247, 248, 250, 0) 10%, #F7F8FA 45%),
-	linear-gradient(181deg, #CDF8ED 0%, #D1F8DD 100%);
-
-    .header-section {
-        padding: 24rpx;
-        // sticky的效果,根据需求开启
-        // position: sticky; 
-        // top: 0;
-        // z-index: 100;
-
-        .search-wrapper {
-            margin-bottom: 20rpx;
-            padding: 4rpx 10rpx;
-            background-color: #fff;
-            border: 1px solid #00cba3; 
-            border-radius: 60rpx;
-
-            .location {
-                font-size: 28rpx;
-                font-weight: bold;
-                color: #333;
-                padding: 0 24rpx;
-                border-right: 2rpx solid #9DDBE0;
-            }
-
-            .search-box {
-                flex: 1;
-            }
-        }
-
-        .filter-tags {
-            gap: 24rpx;
-            display: flex;
-            align-items: center;
-
-            .tag-item {
-                height: 48rpx;
-                line-height: 48rpx;
-                font-size: 26rpx;
-                color: #333;
-                padding: 0rpx 24rpx;
-                border-radius: 12rpx;
-                background-color: #fff;
-
-                &.total {
-                    color: #ff6b81;
-                    font-weight: bold;
-                    background: linear-gradient(90deg, #FDF4E9 0%, #FFEFEF 100%);
-                    border: 1rpx solid;
-                }
-
-                &.active {
-                    background: linear-gradient(270deg, #80D5E9 0%, #8DFBF7 100%);
-
-                    text {
-                        font-weight: 500;
-                    }
-                }
-            }
-        }
-    }
-
-    .list-section {
-        padding: 24rpx 30rpx;
-    }
-
-    .banner-box {
-        position: relative;
-
-        .call-box {
-            font-weight: 500;
-            font-size: 34rpx;
-            color: #FFFFFF;
-            padding: 0 24rpx;
-            display: flex;
-            align-items: center;
-            position: absolute;
-            bottom: 24rpx;
-            z-index: 1;
-
-            .icon {
-                width: 36rpx; 
-                height: 36rpx;
-                margin-right: 6rpx;
-            }
-        }
-    }
-}
-
-.list-item {
-    padding: 30rpx 20rpx;
-    margin-bottom: 24rpx;
-    border-radius: 20rpx;
-    background-color: #fff;
-    display: flex;
-    position: relative;
-
-    .badge {
-        position: absolute;
-        top: 0rpx;
-        left: 0rpx;
-        padding: 4rpx 12rpx;
-        border-radius: 8rpx 0 8rpx 0;
-        color: #fff;
-        font-size: 20rpx;
-        z-index: 10;
-
-        &.hot {
-            background: linear-gradient(to right, #ff5e5e, #ff8a8a);
-        }
-
-        &.recommend {
-            background: linear-gradient(to right, #f39c12, #f1c40f);
-        }
-    }
-
-    .left-avatar {
-        margin-right: 24rpx;
-        display: flex;
-        flex-direction: column;
-        align-items: center;
-        width: 120rpx;
-
-        .status-pill {
-            margin-top: -16rpx; 
-            z-index: 5;
-            font-size: 20rpx;
-            padding: 2rpx 16rpx;
-            border-radius: 20rpx;
-            color: #fff;
-
-            &.green-bg {
-                background-color: #00cba3;
-            }
-        }
-    }
-
-    .right-content {
-        flex: 1;
-        display: flex;
-        flex-direction: column;
-        justify-content: space-between;
-
-        .row-header {
-            display: flex;
-            justify-content: space-between;
-            align-items: center;
-            margin-bottom: 8rpx;
-
-            .name {
-                font-size: 32rpx;
-                font-weight: bold;
-                color: #333;
-            }
-
-            .avail-time {
-                font-size: 22rpx;
-                color: #00cba3;
-
-                .highlight {
-                    margin-left: 6rpx;
-                }
-            }
-        }
-
-        .row-info {
-            display: flex;
-            align-items: center;
-            font-size: 24rpx;
-            color: #666;
-            margin-bottom: 6rpx;
-
-            .score {
-                color: #EB5137;
-                font-weight: bold;
-            }
-        }
-
-        .row-tags {
-            display: flex;
-            align-items: center;
-
-            .icon-tag {
-                font-size: 24rpx;
-                color: #666;
-                margin-right: 16rpx;
-                display: flex;
-                align-items: center;
-
-                text {
-                    margin-left: 4rpx;
-                }
-            }
-
-            .text-tag {
-                font-size: 24rpx;
-                color: #F35031;
-            }
-        }
-    }
-
-    .action-btn {
-        position: absolute;
-        right: 20rpx;
-        bottom: 20rpx;
-
-        .btn {
-            width: auto; 
-            height: 56rpx;
-            color: #fff;
-            padding: 0 24rpx;
-            background: linear-gradient(131deg, #00DAAB 0%, #07CDC4 100%);
-            border-radius: 56rpx;
-
-            &.disabled {
-                opacity: 0.5;
-            }
-        }
-    }
-}
-
-
-.popup-box {
-    height: 50vh;
-    padding: 30rpx 24rpx 24rpx;
-    border-top-left-radius: 20rpx;
-    border-top-right-radius: 20rpx;
-    background: #F3F3F3;
-    display: flex;
-    flex-direction: column;
-
-    .list {
-        // height: 90%;
-        padding: 0 4rpx;
-        overflow-y: auto;
-
-        .item {
-            margin-bottom: 20rpx;
-            padding: 24rpx 32rpx;
-            border-radius: 24rpx;
-            background-color: #fff;
-            display: flex;
-            justify-content: space-between;
-
-            &:last-child {
-                margin-bottom: 0;
-            }
-
-            .imgs {
-                width: 160rpx;
-                height: 160rpx;
-                border-radius: 16rpx;
-                overflow: hidden;
-
-                image {
-                    width: 100%;
-                    height: 100%;
-                }
-            }
-
-            .right {
-                flex: 1;
-                padding-left: 30rpx;
-                display: flex;
-                flex-direction: column;
-                justify-content: space-between;
-
-                .list_title {
-                    display: flex;
-                    align-items: start;
-                    justify-content: space-between;
-
-                    .title {
-                        width: 280rpx;
-                        font-size: 34rpx;
-                        overflow: hidden;
-                        white-space: nowrap;
-                        text-overflow: ellipsis;
-                    }
-                    
-                    .price {
-                        font-size: 48rpx;
-                        color: #F53E54;
-                        padding: 0;
-                        display: flex;
-                        align-items: center;
-
-                        span {
-                            font-size: 24rpx
-                        }
-                    }
-                }
-
-                .num {
-                    font-size: 24rpx;
-                    color: #888888;
-                    display: flex;
-                    align-items: center;
-                    justify-content: space-between;
-                }
-
-                .time {
-                    display: flex;
-                    align-items: center;
-                    justify-content: space-between;
-
-                    .money {
-                        font-size: 26rpx;
-                        color: #666666;
-                        font-weight: bold;
-                    }
-
-                    .counter {
-                        .input {
-                            width: 50rpx;
-                            text-align: center;
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-    .btns {
-        padding-top: 24rpx;
-
-        text {
-            width: 100%;
-            height: 80rpx;
-            color: #fff;
-            line-height: 80rpx;
-            text-align: center;
-            background: linear-gradient(90deg, #1AD7CE 0%, #21C9C1 100%);
-            border-radius: 106rpx;
-            display: inline-block;
-        }
-    }
-}
-</style>

+ 0 - 231
src/pages/demo/recharge.vue

@@ -1,231 +0,0 @@
-<template>
-    <view class="page-container">
-        <u-navbar title="充值" :autoBack="true" placeholder border></u-navbar>
-
-        <view class="balance-section">
-            <view class="card-content">
-                <view class="label">当前余额 (元)</view>
-                <view class="amount">1999.00</view>
-            </view>
-            <view class="record-btn">
-                <text>余额记录</text>
-            </view>
-        </view>
-
-        <view class="list-section">
-            <view class="section-title">可用卡</view>
-
-            <view class="recharge-item" v-for="(item, index) in cardList" :key="index"
-                :class="{ 'active-item': selectedIndex === index }" @click="selectCard(index)">
-                <view class="discount-tag">
-                    <text>{{ item.tag }}</text>
-                </view>
-
-                <view class="item-body">
-                    <view class="left-info">
-                        <view class="activity-name">{{ item.name }}</view>
-                        <view class="rule-list">
-                            <view class="rule-text" v-for="(rule, rIndex) in item.rules" :key="rIndex">
-                                {{ rule }}
-                            </view>
-                        </view>
-                    </view>
-
-                    <view class="right-price">
-                        <text class="symbol">¥</text>
-                        <text class="num">{{ item.price }}</text>
-                    </view>
-                </view>
-            </view>
-        </view>
-
-        <view class="footer-bar">
-            <u-button :text="`同意并支付 ¥${currentPrice}`" shape="circle"
-                customStyle="height: 76rpx; font-size: 36rpx; color: #fff; background: var(--theme-color-gradient);" 
-                @click="handlePay"
-            ></u-button>
-        </view>
-    </view>
-</template>
-
-<script>
-export default {
-    data() {
-        return {
-            selectedIndex: 0, // 默认选中第一个
-            cardList: [
-                {
-                    id: 1,
-                    tag: '享9.3折优惠',
-                    name: '活动名称',
-                    price: '1000',
-                    rules: [
-                        '1.1张面值为1000元的9.3折会员权益',
-                        '2.不记名,不挂失,不计息,不支持回兑',
-                        '3.卡使用有效期一年,购卡如有疑问可联系客服'
-                    ]
-                },
-                {
-                    id: 2,
-                    tag: '享9.0折优惠',
-                    name: '活动名称',
-                    price: '3000',
-                    rules: [
-                        '1.1张面值为3000元的9.0折会员权益',
-                        '2.不记名,不挂失,不计息,不支持回兑',
-                        '3.卡使用有效期一年,购卡如有疑问可联系客服'
-                    ]
-                },
-                {
-                    id: 3,
-                    tag: '享8.7折优惠',
-                    name: '活动名称',
-                    price: '5000',
-                    rules: [
-                        '1.1张面值为5000元的8.7折会员权益',
-                        '2.不记名,不挂失,不计息,不支持回兑',
-                        '3.卡使用有效期一年,购卡如有疑问可联系客服'
-                    ]
-                }
-            ]
-        };
-    },
-    computed: {
-        currentPrice() {
-            return this.cardList[this.selectedIndex].price;
-        }
-    },
-    methods: {
-        selectCard(index) {
-            this.selectedIndex = index;
-        },
-        handlePay() {
-            uni.showToast({
-                title: `发起支付 ${this.currentPrice}元`,
-                icon: 'none'
-            });
-        }
-    }
-};
-</script>
-
-<style lang="scss" scoped>
-.page-container {
-    min-height: 100vh;
-    padding: 30rpx;
-    padding-bottom: 120rpx; 
-    background-color: #fff;
-
-    .balance-section {
-        color: #fff;
-        border-radius: 24rpx;
-        padding: 40rpx 30rpx;
-        margin-bottom: 32rpx;
-        position: relative;
-        box-shadow: 0 8rpx 20rpx rgba(0, 224, 181, 0.2);
-        background: linear-gradient(131deg, #35DCCE 0%, #2BF8CB 100%);
-
-        .label {
-            font-size: 32rpx;
-            margin-bottom: 20rpx;
-        }
-
-        .amount {
-            font-size: 56rpx;
-            font-weight: bold;
-        }
-
-        .record-btn {
-            font-size: 28rpx;
-            padding: 10rpx 24rpx;
-            background: #2DC5B3;
-            border-radius: 26rpx 0rpx 0rpx 26rpx;
-            position: absolute;
-            bottom: 50rpx;
-            right: 0;
-        }
-    }
-
-    .list-section {
-        .section-title {
-            font-size: 32rpx;
-            font-weight: 500;
-            color: #333;
-            margin-bottom: 30rpx;
-        }
-    }
-}
-
-.recharge-item {
-    padding: 40rpx 30rpx 30rpx; 
-    margin-bottom: 20rpx;
-    position: relative;
-    background-color: #fcfefe; 
-    border: 4rpx solid #e0fbf7; 
-    border-radius: 16rpx;
-    transition: all 0.2s;
-    overflow: hidden;
-
-    &.active-item {
-        border-color: #1BD6CD;
-        background-color: #f0fdfa;
-        box-shadow: 0 0 10rpx rgba(0, 224, 181, 0.1);
-    }
-
-    .discount-tag {
-        color: #fff;
-        font-size: 22rpx;
-        padding: 6rpx 20rpx;
-        border-bottom-right-radius: 20rpx;
-        background-color: #00e0b5;
-        position: absolute;
-        top: 0;
-        left: 0;
-        z-index: 5;
-    }
-
-    .item-body {
-        display: flex;
-        justify-content: space-between;
-        align-items: center;
-
-        .left-info {
-            flex: 1;
-            margin-right: 20rpx;
-
-            .activity-name {
-                font-size: 30rpx;
-                font-weight: bold;
-                color: #00e0b5;
-                margin: 16rpx 0 10rpx; 
-            }
-
-            .rule-list {
-                .rule-text {
-                    font-size: 20rpx;
-                    color: #17cbb3; 
-                    line-height: 1.5;
-                    margin-bottom: 4rpx;
-                }
-            }
-        }
-
-        .right-price {
-            color: #00e0b5;
-            text-align: right;
-
-            .symbol {
-                font-size: 40rpx;
-                font-weight: 500;
-            }
-
-            .num {
-                font-size: 60rpx;
-                font-weight: 500;
-                font-family: fantasy;
-                line-height: 1;
-            }
-        }
-    }
-}
-</style>

+ 0 - 203
src/pages/demo/record-fen.vue

@@ -1,203 +0,0 @@
-<template>
-	<view class="page-container">
-		<z-paging ref="paging" v-model="dataList" @query="queryList">
-			<template #top>
-				<view class="header">
-					<view class="search-bar">
-						<view class="filter-dropdown" @click="showPicker = true">
-							<text>{{ dateText }}</text>
-							<u-icon name="arrow-down-fill" size="24rpx" color="#666" top="1"></u-icon>
-						</view>
-						<u-search 
-							actionText="搜索" 
-							:animation="true"
-							bgColor="#f2f2f2"
-							placeholder="订单号搜索" 
-							v-model="keyword" 
-						></u-search>
-					</view>
-				</view>
-			</template>
-			<view class="list-content">
-				<view v-for="(item, index) in dataList" :key="index" class="record-card flex">
-					<view class="card-left">
-						<u-avatar :src="item.avatar" size="68rpx" default-url="/static/common/avatar.png"></u-avatar>
-					</view>
-					<view class="card-body">
-						<view class="left flex">
-							<view class="order">
-								<text class="label">订单号:</text>
-								<text class="value">{{ item.orderNo }}</text>
-							</view>
-						</view>
-						<view class="right flex">
-							<view class="time">
-								<text class="label">时间:</text>
-								<text class="value">{{ item.time }}</text>
-							</view>
-							<view class="other">
-								<text class="symbol">¥</text>
-								<text class="amount">{{ item.amount }}</text>
-							</view>
-						</view>
-					</view>
-				</view>
-			</view>
-		</z-paging>
-
-		<u-datetime-picker
-			mode="year-month"
-			:show="showPicker"
-			v-model="currentDate"
-			@confirm="confirmDate"
-			@cancel="showPicker = false"
-		></u-datetime-picker>
-	</view>
-</template>
-
-<script>
-export default {
-	data() {
-		return {
-			keyword: '',
-			dateText: '全部日期',
-			showPicker: false,
-			currentDate: Number(new Date()),
-			dataList: []
-		};
-	},
-	methods: {
-		confirmDate(e) {
-			this.dateText = new Date(e.value).Format('YYYY-MM');
-			this.showPicker = false;
-			// 此处触发搜索逻辑
-		},
-		queryList(pageNo, pageSize) {
-			console.log(pageNo, pageSize)
-			// 这里的pageNo和pageSize会自动计算好,直接传给服务器即可
-			// 这里的请求只是演示,请替换成自己的项目的网络请求,并在网络请求回调中通过this.$refs.paging.complete(请求回来的数组)将请求结果传给z-paging
-			// this.$request.queryList({ pageNo,pageSize }).then(res => {
-			// 	// 请勿在网络请求回调中给dataList赋值!!只需要调用complete就可以了
-				let res = {
-					data: {
-						list: [
-							{ orderNo: '32025050702041853308351', time: '2025-09-14 12:08', amount: '493.4' },
-							{ orderNo: '32025050702041853308351', time: '2025-09-14 12:08', amount: '493.4' },
-							{ orderNo: '32025050702041853308351', time: '2025-09-14 12:08', amount: '493.4' },
-							{ orderNo: '32025050702041853308351', time: '2025-09-14 12:08', amount: '493.4' },
-						]
-					}
-				}
-				this.$refs.paging.complete(res.data.list);
-			// }).catch(res => {
-			// 	// 如果请求失败写this.$refs.paging.complete(false),会自动展示错误页面
-			// 	// 注意,每次都需要在catch中写这句话很麻烦,z-paging提供了方案可以全局统一处理
-			// 	// 在底层的网络请求抛出异常时,写uni.$emit('z-paging-error-emit');即可
-			// 	this.$refs.paging.complete(false);
-			// })
-		}
-	}
-};
-</script>
-
-<style lang="scss" scoped>
-.page-container {
-	min-height: 100vh;
-	background: linear-gradient(152deg, #DCFFF8 0%, #F1FEFF 100%);
-
-	.header {
-		padding: 20rpx 24rpx;
-		background-color: #ffffff;
-
-		.search-bar {
-			display: flex;
-			align-items: center;
-			
-			.filter-dropdown {
-				height: 66rpx;
-				padding: 0rpx 24rpx;
-				margin-right: 24rpx;
-				border-radius: 134rpx;
-				white-space: nowrap;
-				background-color: #f2f2f2;
-				display: flex;
-				align-items: center;
-				
-				text {
-					width: 105rpx;
-					font-size: 26rpx;
-					color: #333333;
-					margin-right: 6rpx;
-				}
-			}
-		}
-	}
-
-	.list-content {
-		padding: 24rpx;
-	}
-
-	.record-card {
-		padding: 24rpx;
-		margin-bottom: 20rpx;
-		border-radius: 12rpx;
-		background-color: #ffffff;
-		box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.05);
-
-		&:last-child {
-			margin-bottom: 0;
-		}
-
-		.card-left {
-			margin-right: 20rpx;
-		}
-
-		.card-body {
-			flex: 1;
-
-			.left {
-				margin-bottom: 8rpx;
-			}
-
-			.right {
-				align-items: baseline;
-				justify-content: space-between;
-			}
-		}
-			
-		.order {
-			font-weight: 500;
-			font-size: 28rpx;
-			color: #333333;
-
-			.value {
-				word-break: break-all;
-			}
-		}
-		
-		.time {
-			font-weight: 400;
-			font-size: 26rpx;
-			color: #333333;
-		}
-
-		.other {
-			display: flex;
-			align-items: baseline;
-			
-			.symbol {
-				font-size: 20rpx;
-				color: #F53E54;
-				font-weight: bold;
-			}
-			
-			.amount {
-				font-size: 32rpx;
-				color: #F53E54;
-				font-weight: bold;
-				margin-left: 4rpx;
-			}
-		}
-	}
-}
-</style>

+ 0 - 179
src/pages/demo/stats-level.vue

@@ -1,179 +0,0 @@
-<template>
-	<view class="page-container">
-		<view class="header-section flex">
-			<view class="tabs-box flex">
-				<view 
-					:class="['tab-item', activeTab === 0 ? 'tab-active' : 'tab-inactive']" 
-					@click="activeTab = 0"
-				>本期</view>
-				<view 
-					:class="['tab-item', activeTab === 1 ? 'tab-active' : 'tab-inactive']" 
-					@click="activeTab = 1"
-				>上期</view>
-			</view>
-			<view class="date-text">10月1日~10月15日</view>
-		</view>
-
-		<view class="stat-section flex">
-			<view class="stat-item">
-				<view class="stat-value">9096</view>
-				<view class="stat-label flex">
-					总营业分 <text class="detail-link" @click="goToPage('yyf')">查看明细</text>
-					<u-icon name="arrow-right" size="12" color="#19be6b"></u-icon>
-				</view>
-			</view>
-			<u-line color="#eee" direction="col" margin="0 24rpx"></u-line>
-			<view class="stat-item">
-				<view class="stat-value">4046</view>
-				<view class="stat-label flex">
-					总成长值 <text class="detail-link" @click="goToPage('czz')">查看明细</text>
-					<u-icon name="arrow-right" size="12" color="#19be6b"></u-icon>
-				</view>
-			</view>
-		</view>
-
-		<view class="table-section">
-			<view class="table-header flex">
-				<text class="cell">日期</text>
-				<text class="cell">营业分</text>
-				<text class="cell">成长值</text>
-			</view>
-			<view class="table-body">
-				<view 
-					v-for="(item, index) in tableData" 
-					:key="index" 
-					class="table-row flex"
-					:class="{'row-stripe': index % 2 !== 0}"
-				>
-					<text class="cell">{{ item.date }}</text>
-					<text class="cell">{{ item.score }}</text>
-					<text class="cell">{{ item.growth }}</text>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-export default {
-	data() {
-		return {
-			activeTab: 0,
-			tableData: [
-				{ date: '10-15', score: '2520', growth: '1356' },
-				{ date: '10-14', score: '1236', growth: '1423' },
-				{ date: '10-13', score: '0', growth: '0' },
-				{ date: '10-12', score: '1236', growth: '1423' },
-				{ date: '10-11', score: '2520', growth: '1356' },
-				{ date: '10-10', score: '1236', growth: '1423' },
-				{ date: '10-09', score: '2520', growth: '1356' },
-				{ date: '10-08', score: '1236', growth: '1423' },
-				{ date: '10-09', score: '2520', growth: '1356' },
-				{ date: '10-07', score: '1236', growth: '1423' },
-			]
-		};
-	},
-	methods: {
-		goToPage(type) {
-			console.log('跳转明细:', type);
-		}
-	}
-};
-</script>
-
-<style lang="scss" scoped>
-.page-container {
-	min-height: 100vh;
-	padding: 24rpx;
-	background: #f8f8f8;
-}
-
-.header-section {
-	margin-bottom: 24rpx;
-	justify-content: space-between;
-	.date-text {
-		font-size: 28rpx;
-		color: #333;
-	}
-
-	.tabs-box {
-		.tab-item {
-			font-size: 24rpx;
-			padding: 6rpx 20rpx;
-			margin-right: 20rpx;
-			border-radius: 8rpx;
-			border: 1rpx solid var(--theme-color);
-		}
-		.tab-active {
-			color: #fff;
-			background-color: var(--theme-color);
-		}
-		.tab-inactive {
-			color: var(--theme-color);
-			background-color: #fff;
-		}
-	}
-}
-
-.stat-section {
-	padding: 24rpx;
-	margin-bottom: 24rpx;
-	border-radius: 16rpx;
-	background-color: #fff;
-	
-	.stat-item {
-		flex: 1;
-		text-align: left;
-		
-		.stat-value {
-			font-size: 48rpx;
-			font-weight: bold;
-			color: #333;
-			margin-bottom: 12rpx;
-		}
-		.stat-label {
-			font-size: 24rpx;
-			color: #999;
-			.detail-link {
-				color: var(--theme-color);
-				margin-left: 10rpx;
-				margin-right: 4rpx;
-			}
-		}
-	}
-}
-
-.table-section {
-	padding: 24rpx;
-	border-radius: 16rpx;
-	background-color: #fff;
-	
-	.table-header {
-		color: #666;
-		font-size: 24rpx;
-		padding: 20rpx 0;
-		background-color: #F9F9F9;
-		justify-content: space-around;
-		.cell {
-			font-weight: 400;
-			color: #666;
-		}
-	}
-	
-	.table-row {
-		padding: 24rpx 0;
-		justify-content: space-around;
-		&.row-stripe {
-			background-color: #DCF3F6; 
-		}
-	}
-
-	.cell {
-		flex: 1;
-		font-weight: 500;
-		font-size: 28rpx;
-		color: #333;
-		text-align: center;
-	}
-}
-</style>

+ 0 - 379
src/pages/demo/tc.vue

@@ -1,379 +0,0 @@
-<template>
-	<view class="page-container">
-		<view class="top-bg-gradient"></view>
-
-		<u-navbar 
-			title="技师中心" 
-			:placeholder="true" 
-			bgColor="transparent" 
-			leftIconColor="#000" 
-			titleStyle="font-weight:bold;"
-		>
-			<view slot="right">
-				<u-icon name="more-dot-fill" size="24" color="#000"></u-icon>
-			</view>
-		</u-navbar>
-
-		<view class="header-content">
-			<view class="card profile-card">
-				<view class="profile-left">
-					<u-avatar :src="userInfo.avatar" size="50"></u-avatar>
-					<view class="info">
-						<view class="name-row">
-							<text class="name">{{ userInfo.name }}</text>
-							<u-icon name="map-fill" color="#1ecbc3" size="14"></u-icon>
-						</view>
-						<view class="address">{{ userInfo.address }}</view>
-					</view>
-				</view>
-				<u-button 
-					text="更换位置" 
-					color="#1ecbc3" 
-					shape="circle" 
-					size="small" 
-					customStyle="height: 28px; font-size: 12px; padding: 0 15px;"
-				></u-button>
-			</view>
-
-			<view class="card stats-card">
-				<view class="stats-row">
-					<view class="stat-item">
-						<view class="label">本月订单数</view>
-						<view class="value-box">
-							<text class="value green">{{ stats.orderCount }}</text> <text class="unit">单</text>
-						</view>
-					</view>
-					<view class="stat-item">
-						<view class="label">本月在线时长</view>
-						<view class="value-box">
-							<text class="value green">{{ stats.onlineHours }}</text> <text class="unit">时</text>
-						</view>
-					</view>
-					<view class="stat-item">
-						<view class="label">本月营业额</view>
-						<view class="value-box">
-							<text class="value green">{{ stats.revenue }}</text> <text class="unit">元</text>
-						</view>
-					</view>
-				</view>
-				<u-line margin="20rpx 0" dashed color="#eee"></u-line>
-				<view class="stats-row bottom-row">
-					<view class="stat-item">
-						<view class="label">余额</view>
-						<view class="value-box">
-							<text class="value orange">{{ stats.balance }}</text> <text class="unit">元</text>
-						</view>
-					</view>
-					<view class="stat-item">
-						<view class="label">可提现</view>
-						<view class="value-box">
-							<text class="value orange">{{ stats.withdrawable }}</text> <text class="unit">元</text>
-						</view>
-					</view>
-					<view class="stat-btn">
-						<u-button text="申请提现" color="#ff9900" shape="circle" size="small"></u-button>
-					</view>
-				</view>
-			</view>
-
-			<view class="card status-card">
-				<view class="status-header">
-					<view class="status-text">
-						<u-icon name="empty-data" size="20" color="#999"></u-icon>
-						<text style="margin-left: 10rpx;">休息中</text>
-					</view>
-					<u-button text="上线" color="#1ecbc3" shape="circle" size="small" customStyle="width: 80px;"></u-button>
-				</view>
-				<view style="margin-top: 20rpx;">
-					<u-button text="报警/求助" color="#f56c6c" shape="circle"></u-button>
-				</view>
-			</view>
-
-			<view class="card function-card">
-				<u-grid :border="false" col="5">
-					<u-grid-item v-for="(item, index) in functionList" :key="index" customStyle="padding: 20rpx 0;">
-						<u-icon :name="item.icon" :size="28" color="#333"></u-icon>
-						<text class="grid-text">{{ item.title }}</text>
-					</u-grid-item>
-				</u-grid>
-			</view>
-		</view>
-
-		<u-sticky bgColor="#F6F7F9" offset-top="0">
-			<view class="tabs-container">
-				<u-tabs 
-					:list="tabList" 
-					:current="currentTab" 
-					lineColor="#1ecbc3" 
-					activeColor="#1ecbc3"
-					:scrollable="false"
-					itemStyle="padding-left: 10px; padding-right: 10px; height: 44px;"
-					@click="changeTab"
-				></u-tabs>
-			</view>
-		</u-sticky>
-
-		<view class="list-container">
-			<z-paging 
-				ref="paging" 
-				v-model="dataList" 
-				@query="queryList" 
-                :fixed="false"
-				:use-page-scroll="true"
-				:refresher-enabled="false" 
-			>
-				<view class="order-item" v-for="(item, index) in dataList" :key="index">
-					<view class="order-header">
-						<text class="time">上门时间:{{ item.serviceDate }}</text>
-						<text class="status" :class="getStatusClass(item.status)">{{ item.statusText }}</text>
-					</view>
-					
-					<view class="order-content">
-						<view class="row">
-							<text class="label">客户姓名:</text>
-							<text class="val">{{ item.customerName }}</text>
-						</view>
-						<view class="row">
-							<text class="label">项目名称:</text>
-							<text class="val">{{ item.projectName }}</text>
-						</view>
-						<view class="row">
-							<text class="label">下单时间:</text>
-							<text class="val">{{ item.createTime }}</text>
-						</view>
-					</view>
-
-					<view class="order-footer">
-						<view class="price">¥ {{ item.price }}</view>
-						<view class="actions">
-							<template v-if="item.status === 1">
-								<u-button text="取消订单" size="mini" shape="circle" plain customStyle="margin-right: 10rpx;"></u-button>
-								<u-button text="转单" size="mini" shape="circle" color="#f56c6c"></u-button>
-							</template>
-							<template v-else-if="item.status === 3">
-								<u-button text="拒绝退款" size="mini" shape="circle" color="#f56c6c" customStyle="margin-right: 10rpx;"></u-button>
-								<u-button text="同意退款" size="mini" shape="circle" color="#1ecbc3"></u-button>
-							</template>
-						</view>
-					</view>
-				</view>
-				
-			</z-paging>
-		</view>
-	</view>
-</template>
-
-<script>
-	export default {
-		data() {
-			return {
-				// 模拟数据
-				userInfo: {
-					name: '郭丽丽',
-					avatar: 'https://cdn.uviewui.com/uview/album/1.jpg',
-					address: '山西省太原市古交市东曲街道...'
-				},
-				stats: {
-					orderCount: 12,
-					onlineHours: 3.55,
-					revenue: '21893.98',
-					balance: '3324.9',
-					withdrawable: '8127.43'
-				},
-				functionList: [
-					{ title: '订单', icon: 'order' },
-					{ title: '设置免车费', icon: 'car' },
-					{ title: '编辑资料', icon: 'edit-pen' },
-					{ title: '我的分销码', icon: 'scan' },
-					{ title: '合同签订', icon: 'file-text' }
-				],
-				tabList: [
-					{ name: '全部' }, { name: '进行中' }, { name: '已完成' }, 
-					{ name: '待付款' }, { name: '已取消' }, { name: '售后' }
-				],
-				currentTab: 0,
-				dataList: []
-			}
-		},
-		// 必须监听:页面滚动和触底,传递给 z-paging
-		onPageScroll(e) {
-			// 如果你的 z-paging 版本较新,且开启了 use-page-scroll,通常它会自动监听
-			// 但显式调用更安全,用于处理回到顶部等功能
-			this.$refs.paging && this.$refs.paging.updatePageScroll(e);
-		},
-		onReachBottom() {
-			// 页面触底时,通知 z-paging 加载更多
-			this.$refs.paging && this.$refs.paging.pageReachBottom();
-		},
-		methods: {
-			changeTab(item) {
-				this.currentTab = item.index;
-				this.$refs.paging.reload();
-			},
-			queryList(pageNo, pageSize) {
-				// 模拟请求
-				setTimeout(() => {
-					const list = [];
-					for(let i = 0; i < 5; i++) {
-						const statusType = (i % 3) + 1;
-						list.push({
-							id: i,
-							serviceDate: '今天10:00-11:00',
-							status: statusType,
-							statusText: ['待接单', '已接单', '退款申请中'][statusType-1],
-							customerName: '陈思成',
-							projectName: '泰式 · 王室古法SPA',
-							createTime: '2025-09-14 12:08',
-							price: '493.4'
-						});
-					}
-					this.$refs.paging.complete(list);
-				}, 1000);
-			},
-			getStatusClass(status) {
-				return 'text-blue';
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	.page-container {
-		min-height: 100vh;
-		background-color: #F6F7F9;
-		position: relative;
-		/* 防止外边距塌陷 */
-		padding-top: 1rpx; 
-		padding-bottom: 40rpx;
-	}
-
-	/* 背景渐变 - 固定在最底层 */
-	.top-bg-gradient {
-		position: absolute;
-		top: 0;
-		left: 0;
-		width: 100%;
-		height: 400rpx;
-		background: linear-gradient(to bottom, #dffbf9 0%, #F6F7F9 100%);
-		z-index: 0;
-	}
-
-	/* 头部内容 - 相对定位,层级高于背景 */
-	.header-content {
-		position: relative;
-		z-index: 1;
-		padding: 0 20rpx;
-	}
-
-	.card {
-		background: #fff;
-		border-radius: 20rpx;
-		margin-bottom: 20rpx;
-		box-shadow: 0 4rpx 16rpx rgba(0,0,0,0.02);
-		padding: 30rpx;
-	}
-
-	/* 个人信息 */
-	.profile-card {
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-		margin-top: 10rpx;
-		.profile-left {
-			display: flex;
-			align-items: center;
-			.info {
-				margin-left: 20rpx;
-				.name { font-size: 32rpx; font-weight: bold; margin-right: 10rpx; }
-				.address { font-size: 24rpx; color: #999; }
-			}
-		}
-	}
-
-	/* 数据统计 */
-	.stats-card {
-		padding: 30rpx 20rpx;
-		.stats-row {
-			display: flex;
-			justify-content: space-between;
-			.stat-item {
-				flex: 1;
-				text-align: center;
-				.label { font-size: 24rpx; color: #666; margin-bottom: 8rpx; }
-				.value { font-size: 32rpx; font-weight: bold; }
-				.unit { font-size: 22rpx; color: #999; margin-left: 4rpx; }
-				.green { color: #1ecbc3; }
-				.orange { color: #ff9900; }
-			}
-		}
-		.bottom-row {
-			align-items: center;
-			.stat-btn { flex: 1; display: flex; justify-content: flex-end; }
-		}
-	}
-
-	/* 状态栏 */
-	.status-card {
-		.status-header {
-			display: flex;
-			justify-content: space-between;
-			align-items: center;
-			color: #999;
-		}
-	}
-
-	/* 功能宫格 */
-	.function-card {
-		padding: 10rpx 0;
-		.grid-text { font-size: 24rpx; color: #666; margin-top: 14rpx; }
-	}
-
-	/* Tabs */
-	.tabs-container {
-		background-color: #F6F7F9;
-		padding-bottom: 10rpx;
-		z-index: 99; /* 保证吸顶时在列表上方 */
-	}
-
-	/* 列表区域 */
-	.list-container {
-		position: relative;
-		z-index: 1;
-		padding: 0 20rpx;
-	}
-
-	.order-item {
-		background: #fff;
-		border-radius: 20rpx;
-		padding: 30rpx;
-		margin-bottom: 20rpx;
-		
-		.order-header {
-			display: flex;
-			justify-content: space-between;
-			margin-bottom: 20rpx;
-			font-size: 30rpx;
-			font-weight: bold;
-			.text-blue { color: #5ac8fa; font-weight: normal; font-size: 28rpx;}
-		}
-		.order-content {
-			margin-bottom: 20rpx;
-			.row {
-				display: flex;
-				margin-bottom: 10rpx;
-				font-size: 26rpx;
-				.label { color: #999; width: 150rpx; }
-				.val { color: #666; }
-			}
-		}
-		.order-footer {
-			display: flex;
-			justify-content: space-between;
-			align-items: center;
-			border-top: 1rpx solid #f5f5f5;
-			padding-top: 20rpx;
-			.price { color: #fa3534; font-size: 36rpx; font-weight: bold; }
-			.actions { display: flex; }
-		}
-	}
-</style>

+ 0 - 474
src/pages/demo/therapist-detail.vue

@@ -1,474 +0,0 @@
-<template>
-	<view class="page-container">
-		<view class="banner-section">
-			<image class="main-img" src="https://pic.3gbizhi.com/uploadmark/20251230/38976dd1110e4374e3d4aa5c319b65e4.webp" mode="aspectFill"></image>
-			<view class="back-icon">
-				<u-icon name="arrow-left" color="#333" size="20"></u-icon>
-			</view>
-		</view>
-
-		<view class="info-section">
-			<view class="header-row">
-				<u-avatar src="https://via.placeholder.com/100" size="128rpx"></u-avatar>
-				<view class="base-info">
-					<view class="flex">
-						<view>
-							<view class="name-row">
-								<text class="name">赵青青</text>
-								<text class="level-tag">资深</text>
-							</view>
-							<view class="stats-row flex">
-								<text class="score">5.0分</text>
-								<u-line color="#000" direction="col" length="18rpx" margin="0 12rpx"></u-line>
-								<text>服务 32 单</text>
-								<u-line color="#000" direction="col" length="18rpx" margin="0 12rpx"></u-line>
-								<text>收藏量 56</text>
-							</view>
-						</view>
-						<view class="collect-btn" :class="{ active: isCollect }">
-							<u-icon :name="isCollect ? 'heart-fill' : 'heart'" 
-								:color="isCollect ? '#F53E54' : '#999'"
-								size="48rpx"
-							></u-icon>
-							<text class="c-text">{{ isCollect ? '已收藏' : '点击收藏' }}</text>
-						</view>
-					</view>
-					<view class="tags-row">
-						<view class="tag-item shop"><u-icon name="home" size="14"></u-icon> 小雨养生</view>
-						<view class="tag-item time">最早可约今 19:00</view>
-						<text class="dist">距您 348m</text>
-					</view>
-				</view>
-			</view>
-			<view class="intro-text">
-				我擅长中式按摩,泰式拉伸,精油spa,头疗等项目,按摩让疲惫的心灵找到港湾,让您沉浸在spa的温柔乡里感受身心的舒缓与释放。
-			</view>
-			<view class="service-guard">
-				<view class="g-title flex">
-					<u-icon name="checkmark-circle" color="#00cba3" top="1"></u-icon>
-					<text>服务保障</text>
-				</view>
-				<text class="g-item">实名认证</text>
-				<text class="g-item">爽约包赔</text>
-				<text class="g-item">商户认证</text>
-			</view>
-		</view>
-
-		<u-sticky bgColor="#fff">
-			<u-tabs :list="tabs" :current="currentTab" lineColor="#00cba3"
-				activeStyle="color: #00cba3;" 
-				@change="tabChange"></u-tabs>
-		</u-sticky>
-
-		<view class="main-section">
-			<view v-if="currentTab === 0" class="project-list">
-				<view class="project-item" v-for="(item, index) in projects" :key="index">
-					<u-image :src="item.image" width="160rpx" height="160rpx" radius="12rpx" mode="aspectFit"></u-image>
-					<view class="p-info">
-						<view class="p-name">{{ item.name }}</view>
-						<view class="p-desc">{{ item.time }}分钟 | 释放压力,舒缓疲劳</view>
-						<view class="p-price">
-							<text class="now">¥{{ item.price }}</text>
-							<text class="old">¥{{ item.oldPrice }}</text>
-						</view>
-					</view>
-					<u-button text="去下单" color="#00cba3" size="mini" shape="circle"
-						customStyle="width: 140rpx;"
-					></u-button>
-				</view>
-			</view>
-
-			<view v-if="currentTab === 1" class="comment-list">
-				<view class="comment-item" v-for="(comment, index) in comments" :key="index">
-					<view class="u-info">
-						<u-avatar :src="comment.avatar" size="35"></u-avatar>
-						<view class="u-name-date">
-							<view class="top">
-								<text class="u-name">{{ comment.userName }}</text>
-								<u-rate :count="5" v-model="comment.rate" readonly size="12"
-									activeColor="#ffca28"></u-rate>
-							</view>
-							<text class="c-date">{{ comment.date }}</text>
-						</view>
-					</view>
-
-					<view class="comment-text">{{ comment.content }}</view>
-
-					<view class="comment-imgs" v-if="comment.imgs && comment.imgs.length">
-						<image v-for="(img, idx) in comment.imgs" :key="idx" :src="img" mode="aspectFill"
-							@click="previewImg(img, comment.imgs)"></image>
-					</view>
-
-					<view class="reply-box" v-if="comment.reply">
-						<view class="reply-header">
-							<text class="reply-title">商户回复:</text>
-							<text class="reply-date">{{ comment.replyDate }}</text>
-						</view>
-						<view class="reply-content">{{ comment.reply }}</view>
-					</view>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-export default {
-	data() {
-		return {
-			isCollect: false,
-			currentTab: 0,
-			tabs: [{ name: '推荐项目' }, { name: '客户评价(4.9分)' }],
-			projects: [
-				{ name: '古韵舒经', time: 120, price: 598, oldPrice: 1200, image: 'https://via.placeholder.com/150' },
-				{ name: '泰式唤醒', time: 120, price: 598, oldPrice: 1200, image: 'https://via.placeholder.com/150' },
-				{ name: '养生SPA', time: 120, price: 598, oldPrice: 1200, image: 'https://via.placeholder.com/150' }
-			],
-			comments: [
-				{
-					userName: '匿名客户',
-					avatar: 'https://cdn.uviewui.com/uview/album/1.jpg',
-					rate: 5,
-					date: '2025-12-17 08:23:43',
-					content: '服务过程十分有耐心,非常有礼貌,热情开朗,手法也非常专业,按完之后感觉整个人都轻松了,很值得推荐!',
-					imgs: ['https://via.placeholder.com/200'],
-					reply: '感谢您的好评!您的认可就是我们最大的动力,欢迎下次光临,祝您生活愉快~',
-					replyDate: '2025-12-17 10:00:00'
-				},
-				{
-					userName: '张**',
-					avatar: 'https://cdn.uviewui.com/uview/album/2.jpg',
-					rate: 5,
-					date: '2025-12-16 15:40:12',
-					content: '环境不错,技师赵老师手法很地道,力度控制得刚刚好。',
-					reply: '谢谢您的信任,我们会继续努力提供更优质的服务!',
-					replyDate: '2025-12-16 18:20:00'
-				}
-			]
-		};
-	},
-	methods: {
-		tabChange(e) {
-			this.currentTab = e.index;
-		},
-		previewImg(current, list) {
-			uni.previewImage({ current, urls: list });
-		}
-	}
-};
-</script>
-
-<style lang="scss" scoped>
-.page-container {
-	min-height: 100vh;
-	background-color: #f8f8f8;
-
-	.banner-section {
-		position: relative;
-
-		.main-img {
-			width: 100%;
-			height: 700rpx;
-		}
-
-		.back-icon {
-			width: 70rpx;
-			height: 70rpx;
-			position: absolute;
-			top: 30rpx;
-			left: 30rpx;
-			background: rgba(255, 255, 255, 0.8);
-			border-radius: 50%;
-			display: flex;
-			align-items: center;
-			justify-content: center;
-		}
-	}
-
-	.info-section {
-		margin: -60rpx 24rpx 24rpx;
-		padding: 30rpx;
-		background: #fff;
-		border-radius: 24rpx;
-		position: relative;
-		z-index: 10;
-		box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.05);
-
-		.header-row {
-			display: flex;
-
-			.base-info {
-				flex: 1;
-				margin-left: 20rpx;
-
-				.name-row {
-					display: flex;
-					align-items: center;
-					margin-bottom: 10rpx;
-
-					.name {
-						font-size: 36rpx;
-						font-weight: 500;
-						color: #333;
-					}
-
-					.level-tag {
-						color: #fff;
-						font-size: 22rpx;
-						padding: 6rpx 16rpx;
-						margin-left: 20rpx;
-						background: linear-gradient(111deg, #5590B8 0%, #3D5695 100%);;
-						border-radius: 100rpx;
-					}
-				}
-
-				.collect-btn {
-					width: 100rpx;
-					height: 100rpx;
-					margin-left: auto;
-					background: #F9F9F9;
-					border: 2rpx solid #D8D8D8;
-					border-radius: 24rpx;
-					display: flex;
-					flex-direction: column;
-					align-items: center;
-					justify-content: center;
-
-					.c-text {
-						font-size: 20rpx;
-						color: #999;
-						margin-top: 4rpx;
-					}
-
-					&.active {
-						background: linear-gradient(180deg, #FEEAEA 0%, #FFFFFF 100%);
-						border: 2rpx solid #FFD7D7;
-
-						.c-text {
-							color: #F64E63;
-						}
-					}
-				}
-
-				.stats-row {
-					font-size: 24rpx;
-					color: #666;
-					line-height: 1;
-
-					.score {
-						color: #EB5137;
-						font-weight: bold;
-					}
-				}
-
-				.tags-row {
-					font-size: 22rpx;
-					margin-top: 12rpx;
-					display: flex;
-					align-items: center;
-
-					.tag-item {
-						padding: 4rpx 10rpx;
-						margin-right: 16rpx;
-						border-radius: 8rpx;
-					}
-
-					.shop {
-						background: #f0f4ff;
-						color: #5c7fa9;
-						display: flex;
-						align-items: center;
-					}
-
-					.time {
-						background: #eefaf8;
-						color: #00cba3;
-					}
-
-					.dist {
-						margin-left: auto;
-						color: #999;
-					}
-				}
-			}
-		}
-
-		.intro-text {
-			font-size: 26rpx;
-			color: #606D6E;
-			line-height: 1.6;
-			margin: 24rpx 0;
-			background: #f9f9f9;
-			padding: 8rpx 14rpx;
-			border-radius: 12rpx;
-		}
-
-		.service-guard {
-			padding: 20rpx;
-			line-height: 1;
-			gap: 20rpx;
-			display: flex;
-			align-items: center;
-			background: linear-gradient(0deg, #F6FFFD 0%, #DEF5F0 100%);
-
-			.g-title {
-				font-weight: bold;
-				font-size: 32rpx;
-				color: #333;
-
-				text {
-					margin-left: 12rpx;
-				}
-			}
-
-			.g-item {
-				font-size: 24rpx;
-				color: #0A726A;
-				display: flex;
-				align-items: center;
-			}
-		}
-	}
-
-	.main-section {
-		padding: 0 30rpx;
-		background: #fff;
-	}
-}
-
-/* 推荐项目样式 */
-.project-item {
-	display: flex;
-	align-items: center;
-	padding: 30rpx 0;
-	border-bottom: 1rpx solid #f5f5f5;
-
-	.p-info {
-		flex: 1;
-		margin-left: 24rpx;
-
-		.p-name {
-			font-size: 30rpx;
-			font-weight: bold;
-			color: #333;
-		}
-
-		.p-desc {
-			font-size: 22rpx;
-			color: #999;
-			margin: 8rpx 0;
-		}
-
-		.p-price {
-			.now {
-				color: #ff5e5e;
-				font-size: 32rpx;
-				font-weight: bold;
-			}
-
-			.old {
-				color: #ccc;
-				font-size: 22rpx;
-				text-decoration: line-through;
-				margin-left: 10rpx;
-			}
-		}
-	}
-}
-
-/* 客户评价样式 */
-.comment-item {
-	padding: 30rpx 0;
-	border-bottom: 1rpx solid #f5f5f5;
-
-	.u-info {
-		display: flex;
-		align-items: center;
-		margin-bottom: 20rpx;
-
-		.u-name-date {
-			flex: 1;
-			margin-left: 20rpx;
-
-			.top {
-				display: flex;
-				justify-content: space-between;
-				align-items: center;
-
-				.u-name {
-					font-size: 28rpx;
-					color: #333;
-					font-weight: 500;
-				}
-			}
-
-			.c-date {
-				font-size: 22rpx;
-				color: #bbb;
-				margin-top: 4rpx;
-			}
-		}
-	}
-
-	.comment-text {
-		font-size: 27rpx;
-		color: #444;
-		line-height: 1.6;
-		margin: 15rpx 0;
-	}
-
-	.comment-imgs {
-		display: flex;
-		margin-bottom: 20rpx;
-
-		image {
-			width: 160rpx;
-			height: 160rpx;
-			border-radius: 8rpx;
-			margin-right: 10rpx;
-		}
-	}
-
-	/* 商户回复盒子样式 */
-	.reply-box {
-		background: #f4f6f8;
-		border-radius: 12rpx;
-		padding: 20rpx;
-		position: relative;
-
-		&::before {
-			/* 气泡小箭头效果 */
-			content: '';
-			position: absolute;
-			top: -16rpx;
-			left: 30rpx;
-			border: 10rpx solid transparent;
-			border-bottom-color: #f4f6f8;
-		}
-
-		.reply-header {
-			display: flex;
-			justify-content: space-between;
-			align-items: center;
-			margin-bottom: 10rpx;
-
-			.reply-title {
-				font-size: 24rpx;
-				color: #333;
-				font-weight: bold;
-			}
-
-			.reply-date {
-				font-size: 20rpx;
-				color: #aaa;
-			}
-		}
-
-		.reply-content {
-			font-size: 24rpx;
-			color: #666;
-			line-height: 1.5;
-		}
-	}
-}
-</style>

+ 0 - 445
src/points/components/product-list/product-list.vue

@@ -1,445 +0,0 @@
-<template>
-  <view class="product-list-container">
-    <u-sticky bgColor="#ffffff">
-      <!-- 商品列表头部 -->
-      <view class="product-header">
-        <view class="title-text" :class="{ 'hide': isSticky }"><text>精选好物</text>兑换</view>
-        <u-search placeholder="搜索" v-model="keyword" :showAction="false" :class="{ 'expand': isSticky }" @search="loadData"></u-search>
-      </view>
-    
-      <!-- 分类标签 -->
-      <u-tabs
-        :list="categories"
-        :current="activeCategoryIndex"
-        @change="handleCategoryChange"
-        lineWidth="30"
-        :scrollable="categories.length > 5 ? true : false"
-        lineColor="#20CAC2"
-        :activeStyle="{
-              color: '#303133',
-              fontWeight: 'bold',
-              transform: 'scale(1.05)'
-          }"
-        :inactiveStyle="{
-              color: '#606266',
-              transform: 'scale(1)'
-          }"
-        itemStyle="padding:0 43rpx; height: 72rpx;font-size:28rpx"
-        class="category-tabs"
-      ></u-tabs>
-    
-      <!-- 排序选项 -->
-      <view class="sort-options">
-        <view
-          v-for="(sort, index) in sortOptions"
-          :key="index"
-          class="sort-option"
-          @click="switchSort(sort.key)"
-        >
-          <text :class="['sort-text', { active: activeSort === sort.key }]">{{ sort.name }}</text>
-          <view v-if="['price','sales'].includes(sort.key)" style="margin-top: -8rpx;">
-            <ImageItem src="/static/points/arrow-up.png" v-if="activeSort === sort.key && sortDirection === 'asc'"></ImageItem>
-            <ImageItem src="/static/points/arrow-down.png" v-else-if="activeSort === sort.key && sortDirection === 'desc'"></ImageItem>
-            <ImageItem src="/static/points/details.png" v-else></ImageItem>
-          </view>
-        </view>
-      </view>
-    </u-sticky>
-    <!-- 商品列表 -->
-    <u-loading-icon text="加载中" textSize="18" v-if="status === 'loading' && products.length <= 0" style="margin-top: 200rpx;"/>
-    <view class="product-grid" v-else-if="products.length > 0">
-      <view class="product-item" v-for="(product, index) in products" :key="index" @click="handleExchange(product)">
-        <view class="product-image">
-          <view v-if="!imageErrorMap[product.id]" class="product-image">
-            <ImageItem 
-              :src="getImageUrl(product.productMainImage)"
-              @image-error="handleImageError(product.id)"
-            />
-          </view>
-          <view v-else style="display: flex; flex-direction: column; align-items: center; justify-content: center; height: 248rpx; background-color: #f5f5f5; border-radius: 8rpx;">
-            <uni-icons type="image" size="64rpx" color="#999" @click="resetImageError(product.id)"></uni-icons>
-            <text style="font-size: 24rpx; color: #999; margin-top: 16rpx;">加载失败</text>
-          </view>
-        </view>
-        <view class="product-info">
-          <u--text class="product-name" :lines="1" :text="product.name"></u--text>
-          <text class="product-price" v-if="product.paymentType == 1">{{ product.pricePoint }}积分</text>
-          <text class="product-price" v-if="product.paymentType == 2">¥{{ product.priceMoney }}</text>
-          <text class="product-price" v-if="product.paymentType == 3">¥{{ product.priceMoney }}+{{ product.pricePoint }}积分</text>
-          <view class="product-details">
-            <view class="product-detail">
-              <text class="product-value">价值{{ product.originalPrice }}元</text>
-              <text class="product-sales">销量{{ product.sales }}</text>
-            </view>
-            <button class="exchange-btn" @click="handleExchange(product)">
-              兑换
-            </button>
-          </view>
-        </view>
-      </view>
-    </view>
-    <u-loadmore :status="status" loading-text="努力加载中" nomore-text="没有更多了" lineColor="#E6E8EB" v-if="products.length > 0"/>
-    <u-empty
-        style="margin-top:100rpx"
-        v-if="products.length <= 0 && status !== 'loading'"
-        icon="car-fill"
-        text="暂无积分商品"
-    >
-    </u-empty>
-  </view>
-</template>
-
-<script>
-import ImageItem from "@/components/swiper/components/image.vue";
-import {getShopType,getPointShopList} from "@/api/shop";
-export default {
-  components: {ImageItem},
-  props: {
-    // 从父组件传递的滚动距离
-    scrollTop: {
-      type: Number,
-      default: 0
-    }
-  },
-  data() {
-    return {
-      // 搜索关键词
-      keyword: '',
-      // 分类数据
-      activeCategory: '',
-      categories: [],
-      // 排序选项
-      sortOptions: [
-        { key: 'comprehensive', name: '综合' },
-        { key: 'price', name: '价格' },
-        { key: 'sales', name: '销量' }
-      ],
-      activeSort: 'comprehensive',
-      sortDirection: '',
-      // 商品数据
-      products:[],
-      // 分页数据
-      page: 1,
-      pageSize: 10,
-      status:'more',
-      hasMore: true,
-      // 吸顶状态
-      isSticky: false,
-      // 吸顶元素的初始位置
-      stickyTop: 0,
-      // 图片加载状态
-      imageErrorMap: {}
-    }
-  },
-  mounted() {
-    this.getTypeShop();
-    this.loadData()
-    // 延迟获取吸顶元素的初始位置,确保DOM已经渲染完成
-    this.$nextTick(() => {
-      this.getStickyTop()
-    })
-  },
-  watch: {
-    // 监听滚动距离的变化
-    scrollTop(newVal) {
-      // 判断是否进入吸顶状态
-      this.isSticky = newVal >= this.stickyTop
-    }
-  },
-  methods: {
-    //获取分类
-    async getTypeShop() {
-      const res = await getShopType();
-      const {data} = res.data;
-      this.categories = [
-        { key: '', name: '全部' },
-        ...(Array.isArray(data) ? data.map(item => {
-          return {
-            name: item.childName,
-            key: item.childId
-          }
-        }) : [])
-      ]
-    },
-    // 获取吸顶元素的初始位置
-    getStickyTop() {
-      const query = uni.createSelectorQuery().in(this)
-      query.select('.product-header').boundingClientRect(data => {
-        if (data) {
-          this.stickyTop = data.top
-        }
-      }).exec()
-    },
-    // 加载商品数据
-    fetchProducts(page) {
-      return getPointShopList({
-        current: page,
-        size: this.pageSize,
-        name:this.keyword,
-        categoryId: this.activeCategory,
-        sortField: this.activeSort,
-        sortOrder: this.sortDirection
-      })
-    },
-    // 加载初始数据
-    loadData() {
-      this.status = 'loading'
-      this.fetchProducts(1).then(res => {
-        const {data} = res;
-        console.log(res)
-        if (data.code === 200) {
-          this.products = data.data.records
-          this.hasMore = data.data.records.length === this.pageSize
-          this.status = this.hasMore ? 'more' : 'nomore'
-        } else {
-          this.status = 'error'
-        }
-      }).catch(err => {
-        console.error('加载商品列表失败:', err)
-        this.status = 'error'
-      })
-    },
-    // 处理分类切换
-    handleCategoryChange(data) {
-      this.activeCategory = data.key
-      //重置页码
-      this.page = 1
-      // 等待DOM更新后再加载数据
-      this.$nextTick(() => {
-        this.loadData()
-      })
-    },
-    // 切换排序
-    switchSort(sort) {
-      if (this.activeSort === sort) {
-        // 如果点击的是当前排序,切换排序方向
-        this.sortDirection = this.sortDirection === 'asc' ? 'desc' : 'asc'
-      } else {
-        // 如果点击的是新排序,设置默认排序方向
-        this.activeSort = sort
-        // 价格和销量默认排序方向为asc
-        if (['price', 'sales'].includes(sort)) {
-          this.sortDirection = 'asc'
-        } else {
-          this.sortDirection = ''
-        }
-      }
-      // 重置页码
-      this.page = 1
-      // 等待DOM更新后再加载数据
-      this.$nextTick(() => {
-        this.loadData()
-      })
-    },
-    // 处理兑换
-    handleExchange(product) {
-      uni.navigateTo({
-        url: `/points/productDetails/index?id=${product.id}`
-      });
-      console.log('兑换商品:', product)
-    },
-    // 加载更多
-    loadMore() {
-      if (this.status === 'loading' || !this.hasMore) return
-      this.status = 'loading'
-      this.page++
-      this.fetchProducts(this.page).then(res => {
-        const {data} = res;
-        if (data.code === 200) {
-          const newProducts = data.data.records
-          this.products = [...this.products, ...newProducts]
-          this.hasMore = newProducts.length === this.pageSize
-          this.status = this.hasMore ? 'more' : 'nomore'
-        } else {
-          this.status = 'error'
-        }
-      }).catch(err => {
-        console.error('加载更多商品失败:', err)
-        this.status = 'error'
-      })
-    },
-    // 获取图片 URL
-    getImageUrl(imagePath) {
-      if (!imagePath) return '';
-      const publicUrl = this.$globalData?.publicUrl || '';
-      return publicUrl + imagePath;
-    },
-    // 处理图片加载失败
-    handleImageError(productId) {
-      this.$set(this.imageErrorMap, productId, true);
-    },
-    // 重置图片加载状态
-    resetImageError(productId) {
-      this.$set(this.imageErrorMap, productId, false);
-    },
-  },
-  computed: {
-    activeCategoryIndex() {
-      return this.categories.findIndex(item => item.key === this.activeCategory)
-    }
-  },
-}
-</script>
-
-<style lang="scss" scoped>
-.product-list-container {
-  width: 750rpx;
-  background: #FFFFFF;
-  border-radius: 20rpx 20rpx 0 0;
-  padding-bottom: 32rpx;
-  margin-top: -20rpx;
-  overflow: clip;
-  .product-header {
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-    padding: 24rpx 32rpx 0 32rpx;
-    background-color: #fff;
-    transition: all 0.3s ease;
-    height: 90rpx;
-    .title-text {
-      font-size: 32rpx;
-      font-weight: 600;
-      color: #333;
-      margin-right: 22rpx;
-      text{
-        color: #20CAC2;
-        margin-right: 4rpx;
-      }
-      transition: all 0.3s ease;
-      &.hide {
-        opacity: 0;
-        transform: translateX(-20rpx);
-        width: 0;
-        margin-right: 0;
-        overflow: hidden;
-      }
-    }
-    
-    .search-icon {
-      margin-right: 8rpx;
-    }
-    
-    :deep(.u-search) {
-      flex: 1;
-      max-width: 300rpx;
-      transition: all 0.3s ease;
-      &.expand {
-        max-width: 100%;
-      }
-    }
-  }
-  
-  .category-tabs {
-    background-color: #fff;
-    border-bottom: 1rpx solid #f0f0f0;
-  }
-  
-  .sort-options {
-    display: flex;
-    justify-content: space-around;
-    padding: 16rpx 32rpx;
-    background-color: #fff;
-    border-bottom: 1rpx solid #F5F5F5;
-    
-    .sort-option {
-      display: flex;
-      align-items: center;
-      justify-content: center;
-      flex: 1;
-      
-      .sort-text {
-        font-size: 28rpx;
-        color: #666;
-        
-        &.active {
-          color: #03C8BE;
-        }
-      }
-      
-      image {
-        margin-left: 4rpx;
-        width: 20rpx;
-        height: 20rpx;
-      }
-    }
-  }
-  
-  .product-grid {
-    display: grid;
-    grid-template-columns: repeat(2, 1fr);
-    grid-gap: 24rpx;
-    padding: 24rpx 32rpx;
-    .product-item {
-      width: 324rpx;
-      background-color: #fff;
-      border-radius: 12rpx;
-      overflow: hidden;
-      box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.08);
-      
-      .product-image {
-        width: 100%;
-        height: 248rpx;
-        overflow: hidden;
-        
-        image {
-          width: 100%;
-          height: 100%;
-        }
-      }
-      
-      .product-info {
-        padding: 14rpx 16rpx;
-        .product-name {
-          font-family: PingFang SC, PingFang SC;
-          font-weight: 500;
-          font-size: 28rpx;
-          color: #333333;
-          display: block;
-          margin-bottom: 16rpx!important;
-        }
-        
-        .product-price {
-          font-family: PingFang SC, PingFang SC;
-          font-weight: 500;
-          font-size: 32rpx;
-          color: #F53E54;
-          display: block;
-          margin-bottom: 16rpx;
-        }
-        .product-details{
-          display: flex;
-          justify-content: space-between;
-          align-items: center;
-          .product-detail{
-            .product-value {
-              display: block;
-              font-size: 24rpx;
-              color: #999999;
-              margin-bottom: 18rpx;
-            }
-
-            .product-sales {
-              display: block;
-              font-size: 24rpx;
-              color: #999999;
-            }
-          }
-          .exchange-btn {
-            width: 120rpx;
-            height: 48rpx;
-            background: linear-gradient( 78deg, #1AD8CF 0%, #21C8C0 100%);
-            border-radius: 98rpx;
-            font-size: 28rpx;
-            color: #FFFFFF;
-            text-align: center;
-            line-height: 48rpx;
-            margin: 20rpx 0 0 0;
-            padding: 0;
-          }
-        }
-      }
-    }
-  }
-}
-</style>

+ 0 - 178
src/points/components/sign-in/sign-in.vue

@@ -1,178 +0,0 @@
-<template>
-  <view class="sign-in-container">
-    <view class="sign-in-header">
-      <text class="sign-in-title">签到领积分</text>
-    </view>
-    <!-- 加载状态 -->
-    <view v-if="loading" class="sign-in-loading">
-      <u-loading-icon text="加载中..." mode="circle"></u-loading-icon>
-    </view>
-    <!-- 签到数据 -->
-    <view v-else-if="signData && signData.length > 0" class="sign-in-days">
-      <view 
-        v-for="(day, index) in signData"
-        :key="index"
-        class="sign-day"
-        @click="handleSign(day, index)"
-      >
-        <view class="sign-day-circle" :class="getSignCircleClass(day)">
-          <ImageItem src="/static/points/Signed.png" v-if="day.status == '1' || day.status == '4'"/>
-          <ImageItem src="/static/points/notSigned.png" v-else/>
-          <text class="sign-day-number" v-if="[0,2].includes(day.status)">+{{ day.points }}</text>
-        </view>
-        <text :class="day.status == '1' || day.status == '4' ? 'sign-day-text' : 'day-text'">{{ getSignText(day) }}</text>
-      </view>
-    </view>
-    <!-- 空状态 -->
-    <view class="sign-in-empty" v-else>
-    暂无签到活动
-    </view>
-  </view>
-</template>
-
-<script>
-import ImageItem from "@/components/swiper/components/image.vue";
-
-export default {
-  components: {ImageItem},
-  props: {
-    signData: {
-      type: Array,
-      default: () => []
-    },
-    loading: {
-      type: Boolean,
-      default: false
-    }
-  },
-  data() {
-    return {
-
-    }
-  },
-  methods: {
-    getSignCircleClass(day) {
-      return {
-        'signed-circle': day.status == '1' || day.status == '4',
-        'select-circle': day.status == '2',
-      }
-    },
-    getSignText(day) {
-      if (day.status == '1') return '已签到'
-      if (day.status == '3') return '未签到'
-      if (day.status == '4') {
-        const currentDate = new Date();
-        const dayDate = new Date(day.date);
-        // 比较日期,忽略时间部分
-        const currentDateOnly = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate());
-        const dayDateOnly = new Date(dayDate.getFullYear(), dayDate.getMonth(), dayDate.getDate());
-        if (dayDateOnly < currentDateOnly) {
-          return '未开始';
-        } else {
-          return '已结束';
-        }
-      }
-      return day.date
-    },
-    //0:未签, 1:已签, 2:今天未签到 , 3:断签,4:已过期
-    handleSign(day, index) {
-      if (day.status == '2') {
-        // 处理签到逻辑
-        this.$emit('sign', index)
-      }
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.sign-in-container {
-  background-color: #fff;
-  border-radius: 20rpx;
-  padding: 24rpx;
-  margin-bottom: 24rpx;
-  box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.08);
-  
-  .sign-in-header {
-    margin-bottom: 26rpx;
-    
-    .sign-in-title {
-      font-size: 32rpx;
-      font-weight: 600;
-      color: #333;
-    }
-  }
-  
-  .sign-in-loading {
-    display: flex;
-    justify-content: center;
-    align-items: center;
-    height: 146rpx;
-  }
-  
-  .sign-in-days {
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-    
-    .sign-day {
-      display: flex;
-      flex-direction: column;
-      align-items: center;
-      
-      .sign-day-circle {
-        width: 80rpx;
-        height: 96rpx;
-        background: #FBF2E1;
-        border-radius: 12rpx;
-        display: flex;
-        justify-content: center;
-        align-items: center;
-        margin-bottom: 16rpx;
-        position: relative;
-      .image{
-          width: 60rpx;
-          height: 74rpx;
-        }
-        
-        &.signed-circle {
-          background: #F5F5F5;
-        }
-        
-        &.select-circle {
-          background: #FFEBC7;
-        }
-
-        .sign-day-number {
-          font-size: 14rpx;
-          color: #282100;
-          position: absolute;
-          top: 34rpx;
-        }
-      }
-      .sign-day-text{
-        font-family: PingFang SC, PingFang SC;
-        font-weight: 500;
-        font-size: 24rpx;
-        color:#999999;
-      }
-
-      .day-text {
-        font-family: PingFang SC, PingFang SC;
-        font-weight: 500;
-        font-size: 24rpx;
-        color: #333333;
-      }
-    }
-  }
-  
-  .sign-in-empty {
-    display: flex;
-    justify-content: center;
-    align-items: center;
-    height: 146rpx;
-    color: #8f9ca2;
-    font-size: 28rpx;
-  }
-}
-</style>

+ 0 - 309
src/points/components/task-list/task-list.vue

@@ -1,309 +0,0 @@
-<template>
-  <view class="task-list-container">
-    <view class="task-list-header">
-      <text class="task-list-title">做任务赚积分</text>
-    </view>
-    <!-- 加载状态 -->
-    <view v-if="loading" class="task-list-loading">
-      <u-loading-icon text="加载中..." mode="circle"></u-loading-icon>
-    </view>
-    <!-- 任务数据 -->
-    <view v-else-if="taskData && taskData.length > 0">
-      <view class="task-list">
-        <view 
-          v-for="(task,index) in taskData"
-          :key="index"
-          class="task-item">
-          <view class="task-item-left">
-            <view class="task-icon">
-              <ImageItem :src="getTaskIcon(task.taskName)" />
-            </view>
-            <view class="task-info">
-              <view class="task-name">{{ task.taskName }}</view>
-              <view class="task-reward">
-                <ImageItem src="/static/points/point.png"/>
-                <text>+{{ task.rewardPoints }}</text>
-              </view>
-            </view>
-          </view>
-          <view class="task-item-right">
-            <text class="progress-text">{{ task.completedCount }}/{{ task.triggerValue }}</text>
-            <button 
-              :class="Number(task.completedCount) >= Number(task.triggerValue) ? 'task-btn' : 'no-task-btn'"
-              @click.stop="handleTask(task)"
-              :disabled="Number(task.completedCount) >= Number(task.triggerValue)">
-              {{Number(task.completedCount) >= Number(task.triggerValue) ? '已完成' : '去完成' }}
-            </button>
-          </view>
-        </view>
-      </view>
-      <view class="more-tasks" @click="handleMoreTasks">赚更多积分 ></view>
-    </view>
-    <!-- 空状态 -->
-    <view v-else class="task-list-empty">暂无任务活动</view>
-  </view>
-</template>
-
-<script>
-import ImageItem from "@/components/swiper/components/image.vue";
-import { handleServiceShare } from '@/utils/share'
-import {goComplete} from "@/api/points"
-export default {
-  components: { ImageItem },
-  props: {
-    taskData: {
-      type: Array,
-      default: () => []
-    },
-    loading: {
-      type: Boolean,
-      default: false
-    }
-  },
-  data() {
-    return {
-      // 任务类型配置
-      taskConfig: {
-        order: {
-          icon: '/static/points/task_order.png',
-          action: this.handleOrderTask
-        },
-        merchant: {
-          icon: '/static/points/task_shop.png',
-          action: this.handleMerchantTask
-        },
-        dynamic: {
-          icon: '/static/points/task_trend.png',
-          action: this.handleDynamicTask
-        },
-        service: {
-          icon: '/static/points/task_wx.png',
-          action: this.handleServiceTask
-        },
-        recharge: {
-          icon: '/static/points/task_account.png',
-          action: this.handleRechargeTask
-        }
-      }
-    }
-  },
-  methods: {
-    // 获取任务图标
-    getTaskIcon(taskName) {
-      if (taskName.includes('订单')) return this.taskConfig.order.icon;
-      if (taskName.includes('商户')) return this.taskConfig.merchant.icon;
-      if (taskName.includes('动态')) return this.taskConfig.dynamic.icon;
-      if (taskName.includes('服务号')) return this.taskConfig.service.icon;
-      if (taskName.includes('充值')) return this.taskConfig.recharge.icon;
-      return '';
-    },
-
-    // 处理任务点击
-    handleTask(task) {
-      if (task.completedStatus === 1) return;
-      if (task.taskName.includes('订单')) {
-        this.taskConfig.order.action();
-      } else if (task.taskName.includes('商户')) {
-        this.taskConfig.merchant.action();
-      } else if (task.taskName.includes('动态')) {
-        this.taskConfig.dynamic.action();
-      } else if (task.taskName.includes('服务号')) {
-        this.taskConfig.service.action();
-      } else if (task.taskName.includes('充值')) {
-        this.taskConfig.recharge.action();
-      }
-      this.handleCompleteTask(task);
-    },
-
-    // 任务去完成
-    handleCompleteTask(task) {
-      const res = goComplete({
-        taskId:task?.taskId
-      })
-    },
-
-    // 处理订单任务
-    handleOrderTask() {
-      uni.switchTab({
-        url: '/pages/index/index'
-      });
-    },
-
-    // 处理商户任务
-    handleMerchantTask() {
-      uni.switchTab({
-        url: '/pages/identify/identify'
-      });
-    },
-
-    // 处理动态任务
-    handleDynamicTask() {
-      uni.switchTab({
-        url: '/pages/discover/discover'
-      });
-    },
-
-    // 处理服务号任务
-    handleServiceTask() {
-      // 调用微信服务号分享功能
-      handleServiceShare({
-        title: '广誉远 - 关注服务号123123',
-        desc: '关注广誉远服务号,获取更多积分和优惠123123123',
-        link: window.location.href,
-        imgUrl: '/static/points/task_wx.png'
-      });
-    },
-
-    // 处理账号充值任务
-    handleRechargeTask() {
-      uni.navigateTo({
-        url: '/pages/my/pay'
-      });
-    },
-
-    // 处理查看更多任务
-    handleMoreTasks() {
-      uni.navigateTo({
-        url: '/points/pointInfo/taskList'
-      });
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.task-list-container {
-  background-color: #fff;
-  border-radius: 20rpx;
-  padding: 24rpx;
-  height: 360rpx;
-  box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.08);
-  
-  .task-list-header {
-    margin-bottom: 26rpx;
-    
-    .task-list-title {
-      font-size: 32rpx;
-      font-weight: 600;
-      color: #333;
-    }
-  }
-  
-  .task-list-loading {
-    display: flex;
-    justify-content: center;
-    align-items: center;
-    min-height: 230rpx;
-  }
-  
-  .task-list {
-    .task-item {
-      display: flex;
-      justify-content: space-between;
-      align-items: center;
-      margin-bottom: 20rpx;
-      
-      .task-item-left {
-        display: flex;
-        align-items: center;
-        
-        .task-icon {
-          width: 72rpx;
-          height: 72rpx;
-          margin-right: 18rpx;
-          
-          image {
-            width: 72rpx;
-            height: 72rpx;
-          }
-        }
-        
-        .task-info {
-          .task-name {
-            font-family: PingFang SC, PingFang SC;
-            font-weight: 400;
-            font-size: 28rpx;
-            color: #333333;
-            line-height: 28rpx;
-            margin-bottom: 12rpx;
-          }
-          
-          .task-reward {
-            display: inline-flex;
-            height: 32rpx;
-            background: #FBF2E1;
-            border-radius: 22rpx;
-            padding-right: 12rpx;
-            
-            image {
-              width: 32rpx;
-              height: 32rpx;
-              margin-right: 4rpx;
-            }
-            
-            text {
-              font-family: PingFang SC, PingFang SC;
-              font-weight: 500;
-              font-size: 24rpx;
-              color: #FF9F00;
-              line-height: 32rpx;
-            }
-          }
-        }
-      }
-      
-      .task-item-right {
-        display: flex;
-        flex-direction: row;
-        .progress-text{
-          font-family: PingFang SC, PingFang SC;
-          font-weight: 500;
-          font-size: 28rpx;
-          color: #999999;
-          line-height: 28rpx;
-          margin-right: 8rpx;
-          margin-top: 10rpx;
-        }
-        .task-btn {
-          height: 48rpx;
-          background: #EEEEEE;
-          border-radius: 98rpx;
-          font-family: PingFang SC, PingFang SC;
-          font-weight: 500;
-          font-size: 26rpx;
-          color: #999999;
-          line-height: 48rpx;
-          border: 1px solid #EEEEEE;
-        }
-        
-        .no-task-btn {
-          height: 48rpx;
-          background: #03C1B8;
-          border-radius: 98rpx;
-          font-family: PingFang SC, PingFang SC;
-          font-weight: 500;
-          font-size: 26rpx;
-          color: #FFFFFF;
-          line-height: 48rpx;
-        }
-      }
-    }
-  }
-  
-  .more-tasks {
-    text-align: center;
-    font-weight: 500;
-    font-size: 28rpx;
-    color: #999999;
-  }
-  
-  .task-list-empty {
-    display: flex;
-    justify-content: center;
-    align-items: center;
-    min-height: 230rpx;
-    color: #8f9ca2;
-    font-size: 28rpx;
-  }
-}
-</style>

+ 0 - 327
src/points/home/index.vue

@@ -1,327 +0,0 @@
-<script>
-import SignIn from '../components/sign-in/sign-in.vue'
-import TaskList from '../components/task-list/task-list.vue'
-import ProductList from '../components/product-list/product-list.vue'
-import ImageItem from "@/components/swiper/components/image.vue";
-import { mapState, mapActions } from 'vuex';
-import { getSignPoint, signPoint, getHomeTask } from '@/api/points'
-
-export default {
-  name: 'PointsHome',
-  components: {
-    ImageItem,
-    SignIn,
-    TaskList,
-    ProductList
-  },
-  computed: {
-    ...mapState({
-      myPoint: state => state.points.myPoint
-    }),
-    // 总积分
-    totalPoints() {
-      return this.myPoint && this.myPoint.totalPoints || 0;
-    },
-    // 本月新获取积分
-    monthlyPoints() {
-      return this.myPoint && this.myPoint.earnedPoints || 0;
-    }
-  },
-  data() {
-    return {
-      // 滚动距离
-      scrollTop: 0,
-      // 签到数据
-      signData: [],
-      // 任务数据
-      taskData: [],
-      // 加载状态
-      loading: {
-        points: false,
-        sign: false,
-        task: false
-      }
-    }
-  },
-  onLoad(options) {
-
-  },
-  onReady() {
-
-  },
-  onShow(){
-    // 初始化数据
-    this.initData();
-    // 绑定滚动事件
-    this.bindScrollEvent();
-  },
-  onUnload() {
-    // 解绑滚动事件
-    this.unbindScrollEvent();
-  },
-  methods: {
-    ...mapActions([
-      'getPointsInfo'
-    ]),
-    // 跳转到积分规则界面
-    goPointRule(){
-      uni.navigateTo({
-        url:'/points/home/pointRule'
-      })
-    },
-    // 初始化数据
-    async initData() {
-      try {
-        // 并行获取数据,提高加载速度
-        await Promise.all([
-          this.fetchPointsInfo(),
-          this.fetchSignList(),
-          this.fetchTaskList()
-        ]);
-      } catch (error) {
-        console.error('初始化数据失败:', error);
-      }
-    },
-    // 获取积分信息
-    async fetchPointsInfo() {
-      this.loading.points = true;
-      try {
-        await this.getPointsInfo();
-      } catch (error) {
-        console.error('获取积分信息失败:', error);
-      } finally {
-        this.loading.points = false;
-      }
-    },
-    // 获取签到数据
-    async fetchSignList() {
-      this.loading.sign = true;
-      try {
-        const res = await getSignPoint({
-          cityCode: uni.getStorageSync('selectCitycode')
-        });
-        if (res.data.code === 200) {
-          this.signData = res.data.data;
-        }
-      } catch (error) {
-        console.error('获取签到数据失败:', error);
-      } finally {
-        this.loading.sign = false;
-      }
-    },
-    // 获取任务数据
-    async fetchTaskList() {
-      this.loading.task = true;
-      try {
-        const res = await getHomeTask({
-          cityCode: uni.getStorageSync('selectCitycode'),
-        });
-        if (res.data.code === 200) {
-          this.taskData = res.data.data;
-        }
-      } catch (error) {
-        console.error('获取任务数据失败:', error);
-      } finally {
-        this.loading.task = false;
-      }
-    },
-    // 绑定滚动事件
-    bindScrollEvent() {
-      if (process.env.UNI_PLATFORM === 'h5') {
-        // 在H5端添加滚动事件监听器
-        const homeEl = this.$el;
-        if (homeEl && typeof homeEl.addEventListener === 'function') {
-          homeEl.addEventListener('scroll', this.handleScroll);
-        }
-      } else {
-        // 在非H5端监听页面滚动事件
-        uni.onPageScroll(this.handlePageScroll);
-      }
-    },
-    // 解绑滚动事件
-    unbindScrollEvent() {
-      if (process.env.UNI_PLATFORM === 'h5') {
-        const homeEl = this.$el;
-        if (homeEl && typeof homeEl.removeEventListener === 'function') {
-          homeEl.removeEventListener('scroll', this.handleScroll);
-        }
-      } else {
-        // 移除页面滚动事件监听
-        uni.offPageScroll(this.handlePageScroll);
-      }
-    },
-    // 处理滚动事件(H5端)
-    handleScroll() {
-      const homeEl = this.$el;
-      if (homeEl) {
-        const scrollTop = homeEl.scrollTop;
-        // 更新滚动距离
-        this.updateScrollTop(scrollTop);
-        // 检查是否触底
-        this.checkReachBottom(homeEl, scrollTop);
-      }
-    },
-    // 处理页面滚动事件(非H5端)
-    handlePageScroll(e) {
-      const scrollTop = e.scrollTop;
-      // 更新滚动距离
-      this.updateScrollTop(scrollTop);
-      // 检查是否触底
-      const homeEl = this.$el;
-      if (homeEl) {
-        this.checkReachBottom(homeEl, scrollTop);
-      }
-    },
-    // 更新滚动距离
-    updateScrollTop(scrollTop) {
-      this.scrollTop = scrollTop;
-    },
-    // 检查是否触底
-    checkReachBottom(element, scrollTop) {
-      const scrollHeight = element.scrollHeight;
-      const clientHeight = element.clientHeight;
-      // 当滚动到距离底部50px以内时,触发加载更多
-      if (scrollTop + clientHeight >= scrollHeight - 50) {
-        this.reachBottom();
-      }
-    },
-    // 触底加载更多
-    reachBottom() {
-      if (this.$refs.productRef) {
-        this.$refs.productRef.loadMore();
-      }
-    },
-    // 处理签到
-    handleSign(index) {
-      var _this = this;
-      signPoint({
-        cityCode: uni.getStorageSync('selectCitycode'),
-      }).then(res => {
-        if (res.data.code === 200) {
-          _this.signData[index].status = 1;
-          _this.$refs.uNotify.show({
-            top: 1,
-            type: 'success',
-            message: '今日签到成功,继续加油哦!!!',
-            duration: 1000 * 3,
-            fontSize: 14,
-            safeAreaInsetTop:true
-          })
-          _this.fetchPointsInfo();
-        }
-      }).catch(error => {
-        console.error('签到失败:', error);
-      });
-    },
-    // 跳转到积分明细页面
-    goBillPage() {
-      uni.navigateTo({
-        url: '/points/pointInfo/billPage'
-      });
-    },
-    // 跳转到订单列表页面
-    orderGo() {
-      uni.navigateTo({
-        url: '/points/order/orderList'
-      });
-    },
-  }
-}
-</script>
-
-<template>
-  <view class="points-home" ref="homeRef">
-    <u-notify ref="uNotify" message=""></u-notify>
-    <view class="points-task">
-      <!-- 积分头部 -->
-      <view class="points-header" @click="goBillPage">
-        <view class="points-total">
-          <text class="total">{{ totalPoints }}</text>
-          <ImageItem src="/static/points/goBill.png" class="billImage"/>
-        </view>
-        <view class="monthly-points">本月新获取{{ monthlyPoints }}积分</view>
-      </view>
-      <!-- 规则按钮 -->
-      <view class="rule-btn" @click="goPointRule">规则</view>
-      <!-- 签到组件 -->
-      <SignIn @sign="handleSign" :signData="signData" :loading="loading.sign"/>
-      <!-- 任务组件 -->
-      <TaskList :taskData="taskData" :loading="loading.task"/>
-    </view>
-    <!-- 商品列表组件 -->
-    <ProductList ref="productRef" :scrollTop="scrollTop" />
-    <!-- 积分订单跳转 -->
-    <view @click="orderGo" class="orderIcons">
-      <ImageItem src="/static/points/orderGo.png"/>
-    </view>
-  </view>
-</template>
-
-<style lang="scss" scoped>
-.points-home{
-  height: 100vh;
-  overflow-y: auto;
-  -webkit-overflow-scrolling: touch;
-  position: relative;
-  .orderIcons{
-    width: 80rpx;
-    height: 80rpx;
-    position: fixed;
-    right: 6rpx;
-    bottom: calc(8vh + 10rpx);
-    z-index: 99;
-  }
-}
-.points-task {
-  background-image: url("@/static/points/homeBg.png");
-  background-size: 100%;
-  width: 750rpx;
-  height: 890rpx;
-  position: relative;
-  padding: 52rpx 32rpx 0 32rpx;
-  .points-header {
-    width: 100%;
-    padding: 0 12rpx;
-    margin-bottom: 34rpx;
-    .points-total{
-      width: 100%;
-      display: inline-flex;
-      .total {
-        font-family: DIN, DIN;
-        font-weight: 500;
-        font-size: 80rpx;
-        color: #FFFFFF;
-        line-height: 80rpx;
-      }
-      .billImage{
-        width: 32rpx;
-        height: 32rpx;
-        margin: 28rpx 0 28rpx 8rpx;
-      }
-    }
-    .monthly-points {
-      font-family: PingFang SC, PingFang SC;
-      font-weight: 500;
-      font-size: 28rpx;
-      color: #FFFFFF;
-      line-height: 28rpx;
-      margin: 10rpx 0 0 0;
-    }
-  }
-  .rule-btn {
-    position: absolute;
-    top: 52rpx;
-    right: 0;
-    width: 88rpx;
-    height: 40rpx;
-    background: #FFFFFF;
-    border-radius: 26rpx 0 0 26rpx;
-    font-family: PingFang SC, PingFang SC;
-    font-weight: 500;
-    font-size: 28rpx;
-    color: #00B6C8;
-    line-height: 40rpx;
-    text-align: center;
-  }
-}
-</style>

+ 0 - 21
src/points/home/pointRule.vue

@@ -1,21 +0,0 @@
-<template>
-  <view class="pointRule">
-    (一)积分获取规则:<br/>
-    服务订单奖励;服务订单消费会按照下单金额的一定比例获得积分,或积分任务中达到消费订单次数获得相应的积分,具体比例以订单页面显示的提示为准;<br/>
-    用户充值奖励;在平台进行现金充值会按照充值金额的一定比例获得积分;<br/>
-    新手任务奖励;完成新手任务可以获得固定的积分奖励。<br/>
-    签到任务奖励;用户完成每日签到活动可以获得积分,连续签到可以获得更高奖励。<br/>
-    (二)积分使用的场景:<br/>
-    用积分可以兑换积分商城商品,使用积分或抵扣金额后,对应数量的积分会实时扣除,若兑换失败,扣除的积分会自动退回账户;售后退款:若积分商城订单发生退货退款,当该订单发生售后退款且退款成功时,会退回对应积分到账户中。
-    </view>
-</template>
-
-<script>
-</script>
-
-<style lang="scss" scoped>
-.pointRule{
-  padding: 10px;
-  line-height: 50rpx;
-}
-</style>

+ 0 - 824
src/points/order/orderDetails.vue

@@ -1,824 +0,0 @@
-<script>
-import { getPointOrderInfo, confirmReceipt, cancelReturn, orderLogisticsNo } from '@/api/pointOrder'
-import ImageItem from "@/components/swiper/components/image.vue";
-export default {
-  name: "orderDetails",
-  components: { ImageItem },
-  data() {
-    return {
-      orderInfo: {},
-      afterSaleInfo: {},
-      productInfo: {},
-      refundType: '',
-      // 图片加载状态
-      imageErrorMap: {},
-      // 设备信息
-      deviceInfo: uni.getSystemInfoSync(),
-      show: false,
-      title: '',
-      content: '',
-      // 物流单号弹窗
-      showLogistics: false,
-      logisticsNumber: '',
-      // 售后弹窗
-      afterSalesShow: false,
-      receiptStatus: 'received', // 收货状态:notReceived(未收到货), received(已收到货)
-      afterSalesType: 'exchange' // 售后类型:refund(退货), exchange(换货)
-    }
-  },
-  onLoad(options) {
-    this.orderNo = options.orderNo;
-    this.getOrderInfo();
-  },
-  onReady() {
-    // 初始获取数据
-    // 这里可以添加获取订单详情的逻辑
-  },
-  computed: {
-    // 判断是否为有底部安全区域的设备
-    hasSafeArea() {
-      const safeArea = this.deviceInfo.safeArea
-      return safeArea && safeArea.bottom < this.deviceInfo.screenHeight
-    }
-  },
-  methods: {
-    getImageUrl(imagePath) {
-      if (!imagePath) return '';
-      const publicUrl = this.$globalData?.publicUrl || '';
-      return publicUrl + imagePath;
-    },
-    // 处理图片加载失败
-    handleImageError(productId) {
-      this.$set(this.imageErrorMap, productId, true);
-    },
-    // 重置图片加载状态
-    resetImageError(productId) {
-      this.$set(this.imageErrorMap, productId, false);
-    },
-    //获取订单详情
-    async getOrderInfo() {
-      const res = await getPointOrderInfo({
-        orderNo: this.orderNo,
-        //openId: uni.getStorageSync('wx_copenid')
-      })
-      let { afterSaleInfo, orderInfo, productInfo } = res.data.data;
-
-      let skuspecStr = '';
-      try {
-        const skuspec = productInfo?.skuSpec;
-        if (skuspec && skuspec !== 'undefined' && skuspec !== 'null') {
-          const parsedSpec = JSON.parse(skuspec);
-          if (Array.isArray(parsedSpec)) {
-            skuspecStr = parsedSpec.map(t => t?.specValue).filter(Boolean).toString();
-          }
-        }
-      } catch (error) {
-        console.error('解析 skuspec 失败:', error);
-      }
-      this.productInfo = {
-        ...productInfo,
-        skuSpec: skuspecStr
-      };
-      this.afterSaleInfo = afterSaleInfo;
-      this.orderInfo = orderInfo;
-    },
-    orderTitle(info) {
-      let orderTitleName = ''
-      if (this.orderInfo.orderStatus == 4) {
-        orderTitleName = this.afterSaleInfo?.afterSaleStatusName
-      } else {
-        orderTitleName = this.orderInfo.orderStatusName
-      }
-      return orderTitleName
-    },
-    // 处理退货操作
-    handleRefund(val) {
-      this.refundType = val;
-      if (val === 'receipt') {
-        this.title = '确认收货';
-        this.content = '为了保障您的权益,请收到商品确认无误后再确认收货'
-      }
-      if (val === 'cancel') {
-        this.title = '取消申请';
-        this.content = '您确认取消发出的申请么'
-      }
-      this.show = true;
-    },
-    // 确认收货 取消申请接口对接
-    confirmReceive() {
-      var _this = this;
-      let apiUrl = this.refundType === 'receipt' ? confirmReceipt : this.refundType === 'cancel' ? cancelReturn : '';
-      apiUrl({
-        orderId: _this.orderInfo.id
-      }).then(res => {
-        if (res.data.code == 200) {
-          _this.show = false;
-          _this.getOrderInfo();
-        }
-      })
-    },
-    // 提交物流单号
-    submitLogistics() {
-      var _this = this;
-      orderLogisticsNo({
-        orderId: _this.orderInfo.id,
-        logisticsNo: _this.logisticsNumber
-      }).then(res => {
-        if (res.data.code == 200) {
-          _this.showLogistics = false;
-          _this.logisticsNumber = '';
-          _this.getOrderInfo();
-        }
-      })
-    },
-    // 填写物流单号
-    handleLogistics() {
-      this.showLogistics = true;
-    },
-    // 打开售后弹窗
-    handleAfterSales() {
-      this.afterSalesShow = true;
-    },
-    // 售后下一步
-    nextStep() {
-      console.log('售后下一步:', {
-        receiptStatus: this.receiptStatus,
-        afterSalesType: this.afterSalesType
-      });
-      // 这里可以调用售后API
-
-      //订单状态(0:待付款 1:待发货 2:待收货 3:已收货 4:售后中  11:取消订单)
-      if (this.receiptStatus == "received" && this.afterSalesType == "exchange") {
-        uni.navigateTo({
-          url: `/points/productDetails/applyExchange?afterSalesType=${this.afterSalesType}&receiptStatus=${this.receiptStatus}&orderNo=${this.orderInfo.orderNo}&orderId=${this.orderInfo.id}&orderStatus=${this.orderInfo.orderStatus}`
-        });
-        this.afterSalesShow = false
-        return
-      }
-      uni.navigateTo({
-        url: `/points/productDetails/applyRefund?afterSalesType=${this.afterSalesType}&receiptStatus=${this.receiptStatus}&orderNo=${this.orderInfo.orderNo}&orderId=${this.orderInfo.id}&orderStatus=${this.orderInfo.orderStatus}&servicePromise=${this.productInfo.servicePromise}`
-      });
-      this.afterSalesShow = false
-    },
-    //获取售后时间
-    getafterTime() {
-      let date = new Date("2026-04-22 09:38:54");
-      date.setDate(date.getDate() + 10); // 直接在“日期”上加10
-      return this.formatDate(date);
-    },
-    formatDate(date) {
-      const y = date.getFullYear();
-      const m = (date.getMonth() + 1).toString().padStart(2, '0');
-      const d = date.getDate().toString().padStart(2, '0');
-      return `${y}-${m}-${d}`;
-    },
-  }
-}
-</script>
-
-<template>
-  <view class="order-details">
-    <!-- 顶部标题 -->
-    <view class="header">
-      <text class="header-title">{{ orderTitle() }}</text>
-    </view>
-    <!-- 商品信息 -->
-    <view class="product-info">
-      <view class="product-image">
-        <view v-if="!imageErrorMap[productInfo.productId]" class="product-image">
-          <ImageItem :src="getImageUrl(productInfo.skuImage)" @image-error="handleImageError(productInfo.productId)" />
-        </view>
-        <view v-else
-          style="display: flex; flex-direction: column; align-items: center; justify-content: center; height: 120rpx; background-color: #f5f5f5; border-radius: 8rpx;">
-          <uni-icons type="image" size="54rpx" color="#999" @click="resetImageError(productInfo.productId)"></uni-icons>
-          <text style="font-size: 20rpx; color: #999; margin-top: 13rpx;">加载失败</text>
-        </view>
-      </view>
-      <view class="product-details">
-        <text class="product-name">{{ productInfo.productName }}</text>
-        <text class="product-spec">已选 {{ productInfo.skuSpec }}</text>
-        <text class="product-price" v-if="productInfo.paymentType == 1">{{ orderInfo.pointsUsed }}积分</text>
-        <text class="product-price" v-if="productInfo.paymentType == 2">¥{{ orderInfo.totalAmount }}</text>
-        <text class="product-price" v-if="productInfo.paymentType == 3">¥{{ orderInfo.totalAmount }}+{{
-          orderInfo.pointsUsed }}积分</text>
-      </view>
-    </view>
-
-    <!-- 订单信息 -->
-    <view class="order-info">
-      <view class="info-item">
-        <text class="info-label">下单时间</text>
-        <text class="info-value">{{ orderInfo.createTime || '--' }}</text>
-      </view>
-      <view class="info-item">
-        <text class="info-label">发货时间</text>
-        <text class="info-value">{{ orderInfo.deliveryTime || '--' }}</text>
-      </view>
-      <view class="info-item">
-        <text class="info-label">订单号</text>
-        <text class="info-value">{{ orderInfo.orderNo || '--' }}</text>
-      </view>
-      <view class="info-item">
-        <text class="info-label">物流单号</text>
-        <text class="info-value">{{ orderInfo.logisticsNo || '--' }}</text>
-      </view>
-      <view class="info-item">
-        <text class="info-label">收件人</text>
-        <text class="info-value">{{ orderInfo.receiverName || '--' }}</text>
-      </view>
-      <view class="info-item">
-        <text class="info-label">联系电话</text>
-        <text class="info-value">{{ orderInfo.receiverPhone || '--' }}</text>
-      </view>
-      <view class="info-item">
-        <text class="info-label">收件地址</text>
-        <text class="info-value">{{ orderInfo.addressName || '--' }}</text>
-      </view>
-    </view>
-
-    <!-- 退货信息 -->
-    <view class="refund-info" v-if="afterSaleInfo !== null && afterSaleInfo.afterSaleType == 1">
-      <view class="info-item">
-        <text class="info-label">退货原因</text>
-        <text class="info-value">{{ afterSaleInfo.applyReason }}</text>
-      </view>
-      <view class="info-item" v-if="[0, 2, 3].includes(afterSaleInfo.afterSaleStatus)">
-        <text class="info-label">申请时间</text>
-        <text class="info-value">{{ afterSaleInfo.createTime }}</text>
-      </view>
-
-      <view class="info-item" v-if="afterSaleInfo.afterSaleStatus == 1">
-        <text class="info-label">退款时间</text>
-        <text class="info-value">{{ afterSaleInfo.refund_time }}</text>
-      </view>
-
-      <view class="info-item" v-if="[1, 3].includes(afterSaleInfo.afterSaleStatus)">
-        <text class="info-label">物流单号</text>
-        <text class="info-value">{{ afterSaleInfo.logisticsNo }}</text>
-      </view>
-
-      <view class="info-item" v-if="afterSaleInfo.afterSaleStatus == 1">
-        <text class="info-label">退款成功</text>
-        <text class="info-value" v-if="productInfo.paymentType == 1">{{ orderInfo.pointsUsed }}积分</text>
-        <text class="info-value" v-if="productInfo.paymentType == 2">¥{{ orderInfo.totalAmount }}</text>
-        <text class="info-value" v-if="productInfo.paymentType == 3">¥{{ orderInfo.totalAmount }}+{{
-          orderInfo.pointsUsed }}积分</text>
-      </view>
-    </view>
-
-    <!-- 换货信息 -->
-    <view class="refund-info" v-if="afterSaleInfo !== null && afterSaleInfo.afterSaleType == 2">
-      <view class="info-item">
-        <text class="info-label">退货原因</text>
-        <text class="info-value">{{ afterSaleInfo.applyReason }}</text>
-      </view>
-      <view class="info-item" v-if="[0, 2, 3, 4].includes(afterSaleInfo.afterSaleStatus)">
-        <text class="info-label">申请时间</text>
-        <text class="info-value">{{ afterSaleInfo.createTime }}</text>
-      </view>
-
-      <view class="info-item" v-if="[3].includes(afterSaleInfo.afterSaleStatus)">
-        <text class="info-label">物流单号</text>
-        <text class="info-value">{{ afterSaleInfo.logisticsNo }}</text>
-      </view>
-    </view>
-
-    <!-- 未收到货 -->
-    <view class="refund-info" v-if="afterSaleInfo !== null && afterSaleInfo.afterSaleType == 3">
-      <view class="info-item">
-        <text class="info-label">退货原因</text>
-        <text class="info-value">{{ afterSaleInfo.applyReason }}</text>
-      </view>
-      <view class="info-item" v-if="afterSaleInfo.afterSaleStatus == 0">
-        <text class="info-label">申请时间</text>
-        <text class="info-value">{{ afterSaleInfo.createTime }}</text>
-      </view>
-
-      <view class="info-item" v-if="afterSaleInfo.afterSaleStatus == 1">
-        <text class="info-label">退款时间</text>
-        <text class="info-value">{{ afterSaleInfo.refund_time }}</text>
-      </view>
-
-      <view class="info-item" v-if="afterSaleInfo.afterSaleStatus == 1">
-        <text class="info-label">退款成功</text>
-        <text class="info-value" v-if="productInfo.paymentType == 1">{{ orderInfo.pointsUsed }}积分</text>
-        <text class="info-value" v-if="productInfo.paymentType == 2">¥{{ orderInfo.totalAmount }}</text>
-        <text class="info-value" v-if="productInfo.paymentType == 3">¥{{ orderInfo.totalAmount }}+{{
-          orderInfo.pointsUsed }}积分</text>
-      </view>
-    </view>
-
-    <!-- 操作按钮 -->
-    <view class="action-buttons" :class="{ 'safe-area': hasSafeArea }" v-if="orderInfo.orderStatus == 2">
-      <button class="detail-button" @click="handleAfterSales" v-if="afterSaleInfo == null">退款\售后</button>
-      <button class="action-button" @click="handleRefund('receipt')">确认收货</button>
-    </view>
-    <view class="action-buttons" :class="{ 'safe-area': hasSafeArea }"
-      v-if="orderInfo.orderStatus == 4 && afterSaleInfo !== null && ([0, 2].includes(afterSaleInfo.afterSaleStatus))">
-      <button class="action-button" @click="handleRefund('cancel')">取消申请</button>
-      <button class="action-button" @click="handleLogistics" v-if="afterSaleInfo.afterSaleStatus == 2">填写物流单号</button>
-    </view>
-    <!-- 弹出层 -->
-    <u-modal :show="show" :title="title" :content='content' :show-cancel="false">
-      <view slot="default" class="modal-content">
-        <text class="modal-text">{{ content }}</text>
-      </view>
-      <view slot="confirmButton" class="modal-footer">
-        <button class="modal-cancel" @click="show = false">取消</button>
-        <button class="modal-confirm" @click="confirmReceive">确认收货</button>
-      </view>
-    </u-modal>
-    <!-- 填写物流单号 -->
-    <u-popup :show="showLogistics" mode="bottom" @close="showLogistics = false" round="20rpx">
-      <view class="logistics-popup">
-        <!-- 标题 -->
-        <view class="popup-header">
-          <text class="popup-title">填写物流单号</text>
-          <text class="popup-close" @click="showLogistics = false">取消</text>
-        </view>
-
-        <!-- 输入框 -->
-        <view class="popup-content">
-          <u--textarea v-model="logisticsNumber" placeholder="请输入物流单号" border="surround" :border-radius="10"
-            class="logistics-input"></u--textarea>
-        </view>
-
-        <!-- 提交按钮 -->
-        <view class="popup-footer">
-          <button class="submit-button" @click="submitLogistics">提交</button>
-        </view>
-      </view>
-    </u-popup>
-    <!-- 售后 -->
-    <u-popup :show="afterSalesShow" mode="bottom" @close="afterSalesShow = false" round="20rpx">
-      <view class="after-sales-popup">
-        <!-- 标题 -->
-        <view class="popup-header">
-          <text class="popup-title">请选择售后商品</text>
-          <text class="popup-close" @click="afterSalesShow = false">×</text>
-        </view>
-
-        <!-- 收货状态选择 -->
-        <view class="popup-section">
-          <text class="section-title">请选择收货状态</text>
-          <view class="option-group">
-            <button class="option-button" :class="{ active: receiptStatus === 'notReceived' }"
-              @click="receiptStatus = 'notReceived'">未收到货</button>
-            <button class="option-button" :class="{ active: receiptStatus === 'received' }"
-              @click="receiptStatus = 'received'">已收到货</button>
-          </view>
-        </view>
-
-        <!-- 售后类型选择 -->
-        <view class="popup-section" v-if="receiptStatus === 'received'">
-          <text class="section-title">请选择售后类型</text>
-          <view class="option-group">
-            <button class="option-button" :class="{ active: afterSalesType === 'refund' }"
-              @click="afterSalesType = 'refund'">退货</button>
-            <button class="option-button" :class="{ active: afterSalesType === 'exchange' }"
-              @click="afterSalesType = 'exchange'">换货</button>
-          </view>
-        </view>
-
-        <!-- 商品选择 -->
-        <view class="popup-section">
-          <text class="section-title">
-            请选择商品
-            <text v-if="receiptStatus === 'received'" class="time-limit">({{ getafterTime() }} 24时之前可申请)</text>
-          </text>
-          <view class="product-item">
-            <view class="product-image">
-              <view v-if="!imageErrorMap[productInfo.productId]" class="product-image">
-                <ImageItem :src="getImageUrl(productInfo.skuImage)"
-                  @image-error="handleImageError(productInfo.productId)" />
-              </view>
-              <view v-else
-                style="display: flex; flex-direction: column; align-items: center; justify-content: center; height: 100rpx; background-color: #f5f5f5; border-radius: 8rpx;">
-                <uni-icons type="image" size="44rpx" color="#999"
-                  @click="resetImageError(productInfo.productId)"></uni-icons>
-                <text style="font-size: 20rpx; color: #999; margin-top: 3rpx;">加载失败</text>
-              </view>
-            </view>
-            <view class="product-details">
-              <text class="product-name">{{ productInfo.productName }}</text>
-              <text class="product-spec">已选: {{ productInfo.skuSpec }}</text>
-            </view>
-          </view>
-        </view>
-
-        <!-- 下一步按钮 -->
-        <view class="popup-footer">
-          <button class="next-button" @click="nextStep">下一步</button>
-        </view>
-      </view>
-    </u-popup>
-  </view>
-</template>
-
-<style scoped lang="scss">
-.order-details {
-  width: 750rpx;
-  min-height: 100vh;
-  background-image: url("@/static/points/orderBg.png");
-  background-size: 100%;
-  background-repeat: no-repeat;
-  background-color: #F5F8F8;
-  padding-top: 54rpx;
-
-  ::v-deep .u-modal {
-    .u-modal__title {
-      background: #E8FFFD;
-      height: 92rpx;
-      padding: 0;
-      font-family: PingFang SC, PingFang SC;
-      font-weight: bold;
-      font-size: 32rpx;
-      color: #000000;
-      line-height: 92rpx;
-    }
-
-    .u-modal__content,
-    .u-modal__button-group--confirm-button {
-      padding: 0;
-    }
-  }
-
-  // 模态框样式
-  .modal-content {
-    padding: 40rpx 32rpx;
-    text-align: center;
-
-    .modal-text {
-      font-family: PingFang SC, PingFang SC;
-      font-weight: 500;
-      font-size: 28rpx;
-      color: #333333;
-      line-height: 39rpx;
-    }
-  }
-
-  .modal-footer {
-    border-top: 1rpx solid #EEEEEE;
-    display: flex;
-    justify-content: center;
-    padding: 24rpx 58rpx;
-
-    button {
-      width: 225rpx;
-      height: 68rpx;
-      border-radius: 60rpx;
-      font-size: 28rpx;
-      text-align: center;
-      line-height: 68rpx;
-      margin: 0 20rpx;
-      padding: 0;
-    }
-
-    .modal-cancel {
-      border: 1rpx solid #999999;
-      color: #333333;
-    }
-
-    .modal-confirm {
-      background: linear-gradient(78deg, #1AD8CF 0%, #21C8C0 100%);
-      color: #FFFFFF;
-    }
-  }
-
-  .header {
-    width: 100%;
-    margin-bottom: 38rpx;
-    text-align: center;
-
-    .header-title {
-      font-family: PingFang SC, PingFang SC;
-      font-weight: 500;
-      font-size: 36rpx;
-      color: #FFFFFF;
-      line-height: 40rpx;
-    }
-  }
-
-  .product-info {
-    width: 686rpx;
-    height: 168rpx;
-    background: #FFFFFF;
-    border-radius: 16rpx;
-    margin: 0 auto 24rpx;
-    padding: 24rpx;
-    display: flex;
-
-    .product-image {
-      width: 120rpx;
-      height: 120rpx;
-      margin-right: 24rpx;
-
-      image {
-        width: 100%;
-        height: 100%;
-      }
-    }
-
-    .product-details {
-      flex: 1;
-
-      .product-name {
-        font-family: PingFang SC, PingFang SC;
-        font-weight: bold;
-        font-size: 28rpx;
-        line-height: 28rpx;
-        color: #333333;
-        margin-bottom: 24rpx;
-        display: block;
-      }
-
-      .product-spec {
-        font-family: PingFang SC, PingFang SC;
-        font-size: 26rpx;
-        line-height: 26rpx;
-        color: #999999;
-        margin-bottom: 2rpx;
-        display: block;
-      }
-
-      .product-price {
-        font-family: PingFang SC, PingFang SC;
-        font-weight: bold;
-        line-height: 26rpx;
-        font-size: 26rpx;
-        color: #333333;
-      }
-    }
-  }
-
-  .order-info,
-  .refund-info {
-    width: 686rpx;
-    background-color: #FFFFFF;
-    border-radius: 16rpx;
-    margin: 0 auto 24rpx;
-    padding: 26rpx 24rpx;
-
-    .info-item {
-      display: flex;
-      justify-content: space-between;
-      align-items: flex-start;
-      margin-bottom: 22rpx;
-
-      &:last-child {
-        margin-bottom: 0;
-      }
-
-      .info-label {
-        font-family: PingFang SC, PingFang SC;
-        font-weight: 400;
-        font-size: 26rpx;
-        color: #666666;
-      }
-
-      .info-value {
-        flex: 1;
-        font-family: PingFang SC, PingFang SC;
-        font-weight: 400;
-        font-size: 26rpx;
-        color: #2F3437;
-        text-align: right;
-      }
-    }
-  }
-
-  .action-buttons {
-    width: 750rpx;
-    background: #FFFFFF;
-    position: fixed;
-    bottom: 0;
-    left: 0;
-    padding: 20rpx 32rpx;
-    display: flex;
-    justify-content: flex-end;
-    // 正常手机的高度
-    height: auto;
-    min-height: 100rpx;
-
-    // 有安全区域的设备的高度
-    &.safe-area {
-      height: 164rpx;
-    }
-
-    .detail-button {
-      padding: 0 30rpx;
-      height: 56rpx;
-      border-radius: 98rpx;
-      font-size: 26rpx;
-      color: #999999;
-      text-align: center;
-      line-height: 53rpx;
-      border: 2rpx solid #999999;
-      margin: 0;
-    }
-
-    .action-button {
-      padding: 0 30rpx;
-      height: 56rpx;
-      background: #03C1B8;
-      border-radius: 98rpx;
-      font-size: 26rpx;
-      color: #FFFFFF;
-      text-align: center;
-      line-height: 56rpx;
-      margin: 0 0 0 20rpx;
-    }
-  }
-
-  // 物流单号弹出框样式
-  .logistics-popup {
-    width: 100%;
-    padding: 40rpx;
-    background: #F5F8F8;
-    border-radius: 32rpx 32rpx 0 0;
-
-    .popup-header {
-      display: flex;
-      justify-content: space-between;
-      align-items: center;
-      margin-bottom: 32rpx;
-
-      .popup-title {
-        font-size: 40rpx;
-        font-weight: bold;
-        color: #333333;
-        background-image: url("@/static/points/logisticspopu.png");
-        background-repeat: no-repeat;
-        background-position: 20rpx 40rpx;
-      }
-
-      .popup-close {
-        font-size: 28rpx;
-        color: #999999;
-      }
-    }
-
-    .popup-content {
-      margin-bottom: 32rpx;
-
-      .logistics-input {
-        width: 100%;
-        height: 180rpx;
-        padding: 20rpx;
-        font-size: 28rpx;
-        background: #F8F8F8;
-        border-radius: 16rpx;
-        border: 1rpx solid #DCDCDC;
-      }
-    }
-
-    .popup-footer {
-      .submit-button {
-        width: 100%;
-        height: 80rpx;
-        background: linear-gradient(78deg, #1AD8CF 0%, #21C8C0 100%);
-        border-radius: 40rpx;
-        font-size: 32rpx;
-        color: #FFFFFF;
-        text-align: center;
-        line-height: 80rpx;
-        margin: 0;
-        padding: 0;
-      }
-    }
-  }
-
-  // 售后弹出框样式
-  .after-sales-popup {
-    width: 100%;
-    background: #F8F8F8;
-    border-radius: 32rpx 32rpx 0 0;
-
-    .popup-header {
-      display: flex;
-      justify-content: space-between;
-      align-items: center;
-      height: 92rpx;
-      padding: 0 32rpx;
-
-      .popup-title {
-        width: 100%;
-        text-align: center;
-        font-size: 32rpx;
-        font-weight: bold;
-        color: #333333;
-      }
-
-      .popup-close {
-        font-size: 32rpx;
-        color: #999999;
-      }
-    }
-
-    .popup-section {
-      width: 686rpx;
-      min-height: 202rpx;
-      background: #FFFFFF;
-      border-radius: 16rpx;
-      margin: 0 auto 24rpx;
-      padding: 24rpx;
-
-      .section-title {
-        font-family: PingFang SC, PingFang SC;
-        font-weight: bold;
-        font-size: 28rpx;
-        color: #333333;
-        display: block;
-        margin-bottom: 24rpx;
-
-        .time-limit {
-          font-size: 24rpx;
-          color: #f53e54;
-          font-weight: normal;
-        }
-      }
-
-      .option-group {
-        display: flex;
-        justify-content: space-between;
-
-        .option-button {
-          flex: 1;
-          height: 72rpx;
-          border-radius: 38rpx;
-          font-size: 28rpx;
-          color: #333333;
-          background: #F0F0F0;
-          border-color: #F0F0F0;
-          text-align: center;
-          line-height: 72rpx;
-          margin: 0 10rpx;
-          padding: 0;
-
-          &.active {
-            background: #1AD8CF;
-            border-color: #1AD8CF;
-            color: #FFFFFF;
-          }
-        }
-      }
-
-      .product-item {
-        display: flex;
-        padding: 20rpx;
-        background-color: #F5F8F8;
-        border-radius: 10rpx;
-
-        .product-image {
-          width: 100rpx;
-          height: 100rpx;
-          margin-right: 20rpx;
-
-          image {
-            width: 100%;
-            height: 100%;
-            border-radius: 10rpx;
-          }
-        }
-
-        .product-details {
-          flex: 1;
-
-          .product-name {
-            font-size: 28rpx;
-            color: #333333;
-            margin-bottom: 10rpx;
-            display: block;
-          }
-
-          .product-spec {
-            font-size: 24rpx;
-            color: #999999;
-            display: block;
-          }
-        }
-      }
-    }
-
-    .popup-footer {
-      width: 750rpx;
-      height: 124rpx;
-      background: #FFFFFF;
-      padding: 20rpx 40rpx;
-
-      .next-button {
-        width: 100%;
-        height: 80rpx;
-        background: linear-gradient(78deg, #1AD8CF 0%, #21C8C0 100%);
-        border-radius: 40rpx;
-        font-size: 32rpx;
-        color: #FFFFFF;
-        text-align: center;
-        line-height: 80rpx;
-        margin: 0;
-        padding: 0;
-      }
-    }
-  }
-}
-</style>

+ 0 - 229
src/points/order/orderList.vue

@@ -1,229 +0,0 @@
-<script>
-import {getPointOrderList} from '@/api/pointOrder'
-import webviewPoint from "@/components/webviewPoint.vue";
-import {getIsLottery} from '@/api/index'
-export default {
-  components: { webviewPoint },
-  name: "orderList",
-  data(){
-    return {
-      orderList: [],
-      // 加载状态
-      loading: false,
-      // 是否有更多数据
-      hasMore: true,
-      // 分页数据
-      page: 1,
-      pageSize: 10
-    }
-  },
-  onReady() {
-    this.getListOrder();
-  },
-  mounted(){
-    getIsLottery({types:[2]}).then(res=>{
-      if(res.data.data?.isLottery === 1){
-        this.$refs.webviewRef?.getRow(res.data.data);
-      }
-    })
-  },
-  methods:{
-    async getListOrder(isLoadMore = false) {
-      this.loading = true
-      try {
-        const res = await getPointOrderList({
-          current: this.page,
-          size: this.pageSize,
-          openId: uni.getStorageSync('wx_copenid')
-        })
-        const {data} = res;
-        if (data.code === 200) {
-          // 初始加载数据
-          data.data.records = data.data.records.map(item=>{
-            let skuspecStr = '';
-            try {
-              const skuspec = item?.skuSpec;
-              if (skuspec && skuspec !== 'undefined' && skuspec !== 'null') {
-                const parsedSpec = JSON.parse(skuspec);
-                if (Array.isArray(parsedSpec)) {
-                  skuspecStr = parsedSpec.map(t=>t?.specValue).filter(Boolean).toString();
-                }
-              }
-            } catch (error) {
-              console.error('解析 skuspec 失败:', error);
-            }
-            return{
-              ...item,
-              skuspec: skuspecStr
-            }
-          })
-          if (isLoadMore) {
-            this.orderList = [...this.orderList, ...data.data.records]
-          } else {
-            this.orderList = data.data.records;
-          }
-          this.hasMore = this.orderList.length < data.data.total
-        }
-      } catch (error) {
-        console.error('获取积分订单失败:', error)
-      } finally {
-        this.loading = false
-      }
-    },
-    loadMore(){
-      if (this.loading || !this.hasMore) return
-      this.loading = true
-      this.page++
-      this.getListOrder(true)
-    },
-    viewDetail(order) {
-      //payStatus": 0 未支付, 1已支付
-      //订单状态(0:待付款 1:待发货 2:待收货 3:已收货 4:售后中  11:取消订单)
-      if (order.orderStatus==0 || order.orderStatus==11) { //0:待付款 11:已取消----跳转到待支付页面
-        uni.navigateTo({
-          url: `/points/productDetails/pendingPayment?orderNo=${order.orderNo}`
-        });
-        return
-      }
-      uni.navigateTo({
-        url: '/points/order/orderDetails?orderNo=' + order.orderNo,
-      });
-    }
-  }
-}
-</script>
-
-<template>
-  <view class="order-box">
-    <webviewPoint ref="webviewRef"/>
-    <u-list @scrolltolower="loadMore" style="height:calc(100vh - 100rpx)">
-      <u-list-item v-for="(item, index) in orderList" :key="`${item.id}-${index}`" class="order-item">
-        <view class="order-header">
-          <text class="order-time">下单时间: {{ item.createTime }}</text>
-          <text class="order-status" :class="item.status">{{ item.orderStatusName }}</text>
-        </view>
-        <view class="order-body">
-          <view class="product-info">
-            <text class="product-name">{{ item.productName }}</text>
-            <text class="product-spec">{{ item.skuspec }}</text>
-            <text class="product-price" v-if="item.paymentType == 1">{{ item.pointsUsed }}积分</text>
-            <text class="product-price" v-if="item.paymentType == 2">¥{{ item.totalAmount }}</text>
-            <text class="product-price" v-if="item.paymentType == 3">¥{{ item.totalAmount }}+{{ item.pointsUsed }}积分</text>
-          </view>
-          <button class="detail-button" @click="viewDetail(item)">查看详情</button>
-        </view>
-      </u-list-item>
-      <!-- 空数据状态 -->
-      <u-empty
-          class="emptytop"
-        v-if="orderList.length === 0"
-        icon="order"
-        text="暂无订单"
-        mode="page"
-      >
-      </u-empty>
-      <!-- 加载更多 -->
-      <u-loadmore
-        v-if="orderList.length > 0"
-        :status="loading ? 'loading' : (hasMore ? 'more' : 'nomore')"
-        loading-text="加载中..."
-        nomore-text="没有更多订单了"
-        @loadmore="loadMore"
-      >
-      </u-loadmore>
-    </u-list>
-  </view>
-</template>
-
-<style scoped lang="scss">
-.order-box {
-  width: 750rpx;
-  min-height: 100vh;
-  background: #F5F8F8;
-  padding: 32rpx;
-  .u-empty{
-    margin-top: 30vh!important;
-  }
-  .order-item{
-    width: 686rpx;
-    height: 256rpx;
-    background: #FFFFFF;
-    border-radius: 24rpx;
-    padding: 24rpx 32rpx;
-    margin-bottom: 28rpx;
-    .order-header{
-      display: flex;
-      justify-content: space-between;
-      align-items: center;
-      border-bottom: 1rpx solid #EEEEEE;
-      padding-bottom: 20rpx;
-      .order-time{
-        font-family: PingFang SC, PingFang SC;
-        font-weight: bold;
-        font-size: 28rpx;
-        color: #333333;
-        line-height: 24rpx;
-      }
-      .order-status{
-        font-family: PingFang SC, PingFang SC;
-        font-weight: bold;
-        font-size: 28rpx;
-        line-height: 24rpx;
-        &.pending{
-          color: #34c7c2;
-        }
-        &.shipped{
-          color: #34c7c2;
-        }
-        &.delivered{
-          color: #999999;
-        }
-      }
-    }
-    .order-body{
-      display: flex;
-      justify-content: space-between;
-      align-items: flex-start;
-      padding-top: 20rpx;
-      .product-info{
-        flex: 1;
-        .product-name{
-          font-family: PingFang SC, PingFang SC;
-          font-weight: 500;
-          font-size: 32rpx;
-          color: #333333;
-          line-height: 32rpx;
-          margin-bottom: 20rpx;
-          display: block;
-        }
-        .product-spec{
-          font-family: PingFang SC, PingFang SC;
-          font-size: 24rpx;
-          color: #666666;
-          line-height: 24rpx;
-          margin-bottom:32rpx;
-          display: block;
-        }
-        .product-price{
-          font-family: PingFang SC, PingFang SC;
-          font-size: 32rpx;
-          color: #F53E54;
-          font-weight: 500;
-          line-height: 24rpx;
-        }
-      }
-      .detail-button{
-        height: 48rpx;
-        border-radius: 98rpx 98rpx 98rpx 98rpx;
-        border: 2rpx solid #BBBBBB;
-        font-family: PingFang SC, PingFang SC;
-        font-size: 26rpx;
-        color: #999999;
-        line-height: 43rpx;
-        text-align: center;
-        margin-top: 100rpx;
-      }
-    }
-  }
-}
-</style>

+ 0 - 357
src/points/pointInfo/billPage.vue

@@ -1,357 +0,0 @@
-<template>
-  <view class="bill-page">
-    <!-- 顶部积分信息 -->
-    <view class="points-header">
-      <view class="points-item">
-        <text class="points-label">当前可用积分</text>
-        <text class="points-value">{{ totalPoints }}</text>
-      </view>
-      <view class="points-item">
-        <text class="points-label">本月获得积分</text>
-        <text class="points-value">{{ earnedPoints }}</text>
-      </view>
-      <view class="points-item">
-        <text class="points-label">本月即将到期积分</text>
-        <text class="points-value">{{ expirePoints }}</text>
-      </view>
-    </view>
-
-    <view class="container">
-      <!-- 标签切换 -->
-      <u-tabs
-          :list="tabs"
-          :current="opType"
-          @change="handleTabChange"
-          lineWidth="60"
-          lineColor="#20CAC2"
-          :activeStyle="{
-            color: '#303133',
-            fontWeight: 'bold',
-            transform: 'scale(1.05)'
-        }"
-          :inactiveStyle="{
-            color: '#606266',
-            transform: 'scale(1)'
-        }"
-          itemStyle="padding:0 85rpx; height: 72rpx;font-size:28rpx"
-          class="tabs-container"
-      ></u-tabs>
-
-      <!-- 积分记录列表 -->
-      <view class="records-container">
-        <u-list @scrolltolower="loadMore" ref="list" style="height:calc(75vh - 60rpx)">
-          <u-list-item v-for="(item, index) in filteredRecords" :key="index" class="record-item">
-            <view class="record-info">
-              <text class="record-description">{{ item.activityName }}</text>
-              <text class="record-date">{{ item.createTime }}</text>
-            </view>
-            <text class="record-amount" :class="{ income: item.opType == 2, expense: item.opType == 1 }">
-              {{ item.opType == 1 ? '+' : '-' }}{{ item.points }}
-            </text>
-          </u-list-item>
-          <!-- 空数据状态 -->
-          <u-empty
-            v-if="filteredRecords.length === 0 && !loading"
-            text="暂无积分记录"
-            mode="list"
-          ></u-empty>
-          <!-- 加载中状态 -->
-          <view v-if="loading && filteredRecords.length === 0" class="loading-container">
-            <u-loading-icon text="加载中..."></u-loading-icon>
-          </view>
-          <!-- 加载更多 -->
-          <u-loadmore
-            v-if="filteredRecords.length > 0"
-            :status="loading ? 'loading' : (hasMore ? 'more' : 'nomore')"
-            loading-text="加载中..."
-            nomore-text="没有更多记录了"
-            @loadmore="loadMore"
-          ></u-loadmore>
-        </u-list>
-      </view>
-    </view>
-  </view>
-</template>
-
-<script>
-import {mapState} from "vuex";
-import { getPointDetails } from '@/api/points';
-import {queryBind, useBind, uuidLogin,pointDraw} from "@/api/index";
-import webView from '@/utils/uni.webview.1.5.6.js';
-export default {
-  name: "billPage",
-  data() {
-    return {
-      // 标签数据
-      tabs: [
-        { key: '', name: '明细' },
-        { key: '1', name: '收入' },
-        { key: '2', name: '支出' }
-      ],
-      // 当前选中的标签
-      activeTab: '',
-      // 积分记录数据
-      pointRecords: [],
-      // 分页数据
-      pageNum: 1,
-      pageSize: 10,
-      hasMore: true,
-      loading: false,
-      currentUser:'',
-      currentPlatform:'',
-      nowPlatform:'gyy-aB4cD6eF8gH0iJ2kL4',
-      uuId:'',
-    }
-  },
-  computed: {
-    ...mapState({
-      myPoint: state => state.points.myPoint
-    }),
-    totalPoints() {
-      return this.myPoint && this.myPoint.totalPoints || 0;
-    },
-    earnedPoints() {
-      return this.myPoint && this.myPoint.earnedPoints || 0;
-    },
-    expirePoints() {
-      return this.myPoint && this.myPoint.expirePoints || 0;
-    },
-    opType() {
-      return this.tabs.findIndex(item => item.key === this.activeTab)
-    },
-    // 积分记录(直接使用原始数据,因为已经通过接口参数过滤)
-    filteredRecords() {
-      return this.pointRecords
-    }
-  },
-  onLoad(options) {
-    // #ifdef H5
-    window.addEventListener('popstate', this.__h5BackRefresh);
-    // #endif
-    if(options.currentPlatform && options.currentUser){
-      this.currentPlatform = options.currentPlatform;
-      this.currentUser = options.currentUser;
-      this.verificationAccount();
-    }else{
-      this.fetchPointDetails()
-    }
-  },
-  onUnload() {
-    // #ifdef H5
-    window.removeEventListener('popstate', this.__h5BackRefresh);
-    // #endif
-  },
-  mounted() {
-    // 初始获取数据
-    //this.fetchPointDetails()
-  },
-  methods: {
-    // 切换标签
-    handleTabChange(data) {
-      this.activeTab = data.key
-      // 重置分页数据
-      this.pageNum = 1
-      this.hasMore = true
-      // 清空数据
-      this.pointRecords = []
-      // 重新获取数据
-      this.fetchPointDetails();
-    },
-    // 加载更多数据
-    loadMore() {
-      if (this.loading || !this.hasMore) return
-      this.pageNum++
-      this.fetchPointDetails(true)
-    },
-    // 获取积分明细数据
-    async fetchPointDetails(isLoadMore = false) {
-      this.loading = true
-      try {
-        const res = await getPointDetails({
-          pageNum: this.pageNum,
-          pageSize: this.pageSize,
-          opType: this.activeTab
-        })
-        const {data} = res;
-        if (data.code === 200) {
-          if (isLoadMore) {
-            // 加载更多数据
-            this.pointRecords = [...this.pointRecords, ...data.data.records]
-          } else {
-            // 初始加载数据
-            this.pointRecords = data.data.records
-          }
-          // 判断是否还有更多数据
-          this.hasMore = this.pointRecords.length < data.data.total
-        }
-      } catch (error) {
-        console.error('获取积分明细失败:', error)
-      } finally {
-        this.loading = false
-      }
-    },
-    // H5 返回强制刷新
-    __h5BackRefresh() {
-      console.log('返回强制刷新---广誉源')
-      if(this.currentPlatform && this.currentUser && uni.getStorageSync('access-token')){
-        this.bindAccount();//若没有登录。登录后获取绑定信息
-      }
-    },
-    verificationAccount(){
-      // jzg-7kP9xL2mN5vQ8zR1jW  ,晋掌柜
-      // gyy-aB4cD6eF8gH0iJ2kL4  ,广誉源
-      // bdsh-X9yZ1wV3uT5sR7qP9o  ,本地生活
-      // https://test.baoxianzhanggui.com/lxl-api/usercenter
-      // 用户ID    userId
-      // 平台ID   clientId
-      // 租户ID (晋掌柜用)   tenantId
-      // source 自己的平台
-      // target 要绑的平台
-      var _this = this;
-      queryBind({
-        userId : _this.currentUser,
-        clientId :_this.currentPlatform
-      }).then(res => {
-        if(res.data.code == 200){
-          _this.uuId = res.data.data.filter(item=> item.clientId === 'gyy-aB4cD6eF8gH0iJ2kL4')[0]?.uuid;
-          if(!uni.getStorageSync('access-token')){
-            if(_this.uuId){
-              _this.uuLogin();
-            }else{
-              if (!_this.$utils.checkLogin({ type: 'navigate-webview' })) return;
-            }
-          }else{
-            _this.fetchPointDetails()
-          }
-        }else{
-          if (!_this.$utils.checkLogin({ type: 'navigate-webview' })) return;
-        }
-      })
-    },
-    bindAccount(){
-      var _this = this;
-      useBind({
-        sourceUserId: _this.currentUser,       //a项目的id
-        sourceClientId: _this.currentPlatform, //a项目的来源平台
-        targetUserId: uni.getStorageSync('userId'),            //b项目的id
-        targetClientId: _this.nowPlatform,     //b项目的来源平台
-        userPhone:uni.getStorageSync('wx_phone')
-      }).then(async res => {
-        await pointDraw();
-        await _this.fetchPointDetails()
-      })
-    },
-    uuLogin(){
-      // 广誉源uuid登录
-      var _this = this;
-      uuidLogin({
-        uuid: _this.uuId,
-      }).then(res => {
-        if(res.data.code == 200){
-          uni.setStorageSync('wx_copenid', res.data.data.copenid || '')
-          uni.setStorageSync('access-token', res.data.data.token)
-          uni.setStorageSync('wx_phone', res.data.data.cphone)
-          uni.setStorageSync('userId', res.data.data.id)
-          _this.fetchPointDetails()
-        }
-      })
-    },
-  }
-}
-</script>
-
-<style scoped lang="scss">
-.bill-page{
-  width: 750rpx;
-  height: 100vh;
-  background-image: url("@/static/points/pointBg.png");
-  background-size: 100%;
-  background-repeat: no-repeat;
-  background-color: #ffe5ca;
-  padding-top: 62rpx;
-}
-
-.points-header{
-  display: flex;
-  justify-content: space-around;
-  margin-bottom: 42rpx;
-  .points-item{
-    display: flex;
-    flex-direction: column;
-    align-items: center;
-    .points-label{
-      font-family: PingFang SC, PingFang SC;
-      font-weight: 500;
-      font-size: 24rpx;
-      color: #FFFFFF;
-      margin-bottom: 24rpx;
-    }
-    .points-value{
-      font-weight: 500;
-      font-size: 40rpx;
-      color: #FFFFFF;
-      line-height: 32rpx;
-    }
-  }
-}
-.container{
-  width: 686rpx;
-  height: 83vh;
-  background: #FFFFFF;
-  border-radius: 20rpx;
-  margin: 0 auto;
-  padding: 10rpx 0;
-  .tabs-container{
-    display: flex;
-    overflow: hidden;
-    margin-bottom: 32rpx;
-  }
-}
-
-.records-container{
-  .record-item{
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-    padding: 16rpx 32rpx;
-    flex-direction: row;
-    .record-info{
-      .record-description{
-        font-family: PingFang SC, PingFang SC;
-        font-weight: 500;
-        font-size: 28rpx;
-        color: #333333;
-        line-height: 28rpx;
-        display: block;
-        margin-bottom: 12rpx;
-      }
-      .record-date{
-        font-family: PingFang SC, PingFang SC;
-        font-size: 24rpx;
-        color: #999999;
-        line-height: 28rpx;
-      }
-    }
-    .record-amount{
-      font-family: PingFang SC, PingFang SC;
-      font-weight: 500;
-      font-size: 28rpx;
-      line-height: 28rpx;
-      &.income{
-        color: #34c7c2;
-      }
-      &.expense{
-        color: #f53e54;
-      }
-    }
-  }
-  .u-empty{
-    margin-top: 20vh!important;
-  }
-
-  /* 加载中容器 */
-  .loading-container {
-    margin-top: 20vh!important;
-  }
-}
-</style>

+ 0 - 433
src/points/pointInfo/taskList.vue

@@ -1,433 +0,0 @@
-<template>
-  <view class="task-page">
-    <!-- 顶部积分信息 -->
-    <view class="points-header">
-      <view class="points-item">
-        <view class="img">
-          <u-avatar :src="cIcon" size="96rpx" default-url="/static/common/avatar.png" />
-        </view>
-      </view>
-      <view class="points-item">
-        <text class="points-value">{{ totalPoints }}</text>
-        <text class="points-label">我的积分</text>
-      </view>
-      <view class="points-item">
-        <text class="points-value">{{ completedTask }}</text>
-        <text class="points-label">已完成任务</text>
-      </view>
-      <view class="points-item" @click="handleServiceTask">
-        <text class="points-value">{{ pendingTasks }}</text>
-        <text class="points-label">待完成任务</text>
-      </view>
-    </view>
-
-    <view class="container">
-      <!-- 标签切换 -->
-      <u-tabs
-          :list="tabs"
-          :current="type"
-          @change="handleTabChange"
-          lineWidth="60"
-          lineColor="#20CAC2"
-          :activeStyle="{
-            color: '#303133',
-            fontWeight: 'bold',
-            transform: 'scale(1.05)'
-        }"
-          :inactiveStyle="{
-            color: '#606266',
-            transform: 'scale(1)'
-        }"
-          itemStyle="padding:0 55rpx; height: 72rpx;font-size:28rpx"
-          class="tabs-container"
-      ></u-tabs>
-
-      <!-- 任务列表 -->
-      <view class="tasks-container">
-        <u-list 
-          ref="taskList"
-          @scrolltolower="loadMore" 
-          style="height:calc(75vh - 60rpx)"
-        >
-          <u-list-item v-for="(task, index) in tasks" :key="index" class="task-item">
-            <view class="task-icon">
-              <image :src="getTaskIcon(task.taskName)" mode="aspectFill"></image>
-            </view>
-            <view class="task-info">
-              <text class="task-name">{{ task.taskName }}</text>
-              <view class="task-reward">
-                <ImageItem src="/static/points/point.png"/>
-                <text>+{{ task.rewardPoints }}</text>
-              </view>
-            </view>
-            <view class="task-progress">
-              <text class="progress-text">{{ task.completedCount }}/{{ task.triggerValue }}</text>
-              <button 
-                :class="Number(task.completedCount) >= Number(task.triggerValue) ? 'task-btn' : 'no-task-btn'"
-                @click.stop="handleTask(task)"
-                :disabled="Number(task.completedCount) >= Number(task.triggerValue)"
-              >
-                {{ Number(task.completedCount) >= Number(task.triggerValue) ? '已完成' : '去完成' }}
-              </button>
-            </view>
-          </u-list-item>
-          <!-- 空数据状态 -->
-          <u-empty
-              v-if="tasks.length === 0 && !loading"
-              icon="document"
-              text="暂无任务"
-              mode="page"
-          ></u-empty>
-          <!-- 加载中状态 -->
-          <view v-if="loading && tasks.length === 0" class="loading-container">
-            <u-loading-icon text="加载中..."></u-loading-icon>
-          </view>
-          <!-- 加载更多 -->
-          <u-loadmore 
-            v-if="tasks.length > 0"
-            :status="loading ? 'loading' : (hasMore ? 'more' : 'nomore')"
-            loading-text="加载中..."
-            nomore-text="没有更多任务了"
-            @loadmore="loadMore"
-          ></u-loadmore>
-        </u-list>
-      </view>
-    </view>
-  </view>
-</template>
-
-<script>
-import ImageItem from "@/components/swiper/components/image.vue";
-import { mapState } from 'vuex';
-import {getPointTaskList, goComplete} from '@/api/points'
-import { handleServiceShare } from '@/utils/share'
-export default {
-  name: "taskList",
-  components: {ImageItem},
-  computed: {
-    ...mapState({
-      myPoint: state => state.points.myPoint
-    }),
-    totalPoints() {
-      return this.myPoint && this.myPoint.totalPoints || 0;
-    },
-    completedTask() {
-      return this.myPoint && this.myPoint.completedTask || 0;
-    },
-    pendingTasks() {
-      return this.myPoint && this.myPoint.pendingTasks || 0;
-    },
-    type() {
-      return this.tabs.findIndex(item => item.key === this.activeTab)
-    },
-
-  },
-  data() {
-    return {
-      cIcon: uni.getStorageSync('wx_cIcon'),
-      // 标签数据
-      tabs: [
-        { key: '1', name: '新手任务' },
-        { key: '2', name: '每日任务' },
-        { key: '3', name: '每月任务' }
-      ],
-      // 当前选中的标签
-      activeTab: '1',
-      // 任务数据
-      tasks: [],
-      // 分页数据
-      pageNum: 1,
-      pageSize: 10,
-      hasMore: true,
-      loading: false,
-      // 任务类型配置
-      taskConfig: {
-        order: {
-          icon: '/static/points/task_order.png',
-          action: this.handleOrderTask
-        },
-        merchant: {
-          icon: '/static/points/task_shop.png',
-          action: this.handleMerchantTask
-        },
-        dynamic: {
-          icon: '/static/points/task_trend.png',
-          action: this.handleDynamicTask
-        },
-        service: {
-          icon: '/static/points/task_wx.png',
-          action: this.handleServiceTask
-        },
-        recharge: {
-          icon: '/static/points/task_account.png',
-          action: this.handleRechargeTask
-        }
-      }
-    }
-  },
-  onReady() {
-    // 初始获取数据
-    this.fetchTaskList()
-  },
-  methods: {
-    // 切换标签
-    handleTabChange(data) {
-      this.activeTab = data.key
-      // 重置分页数据
-      this.pageNum = 1
-      this.hasMore = true
-      // 清空数据
-      this.tasks = []
-      // 重新获取数据
-      this.fetchTaskList()
-    },
-    // 处理任务
-    handleTask(task) {
-      if (task.completedCount >= task.triggerValue) return;
-      if (task.taskName.includes('订单')) {
-        this.taskConfig.order.action();
-      } else if (task.taskName.includes('商户')) {
-        this.taskConfig.merchant.action();
-      } else if (task.taskName.includes('动态')) {
-        this.taskConfig.dynamic.action();
-      } else if (task.taskName.includes('服务号')) {
-        this.taskConfig.service.action();
-      } else if (task.taskName.includes('充值')) {
-        this.taskConfig.recharge.action();
-      }
-      this.handleCompleteTask(task)
-    },
-    // 任务去完成
-    handleCompleteTask(task) {
-      const res = goComplete({
-        taskId:task?.taskId
-      })
-    },
-    // 处理订单任务
-    handleOrderTask() {
-      uni.switchTab({
-        url: '/pages/index/index'
-      });
-    },
-    // 处理商户任务
-    handleMerchantTask() {
-      uni.switchTab({
-        url: '/pages/identify/identify'
-      });
-    },
-    // 处理动态任务
-    handleDynamicTask() {
-      uni.switchTab({
-        url: '/pages/discover/discover'
-      });
-    },
-    // 处理服务号任务
-    handleServiceTask() {
-      // 调用微信服务号分享功能
-      handleServiceShare({
-        title: '广誉远 - 关注服务号',
-        desc: '关注广誉远服务号,获取更多积分和优惠',
-        link: window.location.href,
-        imgUrl: '/static/points/task_wx.png'
-      });
-    },
-    // 处理账号充值任务
-    handleRechargeTask() {
-      uni.navigateTo({
-        url: '/pages/my/pay'
-      });
-    },
-    // 加载更多数据
-    loadMore() {
-      if (this.loading || !this.hasMore) return
-      
-      this.pageNum++
-      this.fetchTaskList(true)
-    },
-    // 获取任务列表数据
-    async fetchTaskList(isLoadMore = false) {
-      this.loading = true
-      try {
-        const res = await getPointTaskList({
-          pageNum: this.pageNum,
-          pageSize: this.pageSize,
-          type: this.activeTab,
-          cityCode: uni.getStorageSync('selectCitycode'),
-        })
-        const {data} = res;
-        if (data.code === 200) {
-          if (isLoadMore) {
-            this.tasks = [...this.tasks, ...data.data.records]
-          } else {
-            this.tasks = data.data.records
-          }
-          this.hasMore = this.tasks.length < data.data.total
-        }
-        this.loading = false
-
-      } catch (error) {
-        console.error('获取任务列表失败:', error)
-        this.loading = false
-      }
-    },
-    // 根据任务名称获取图标
-    getTaskIcon(taskName) {
-      if (taskName.includes('订单')) return this.taskConfig.order.icon;
-      if (taskName.includes('商户')) return this.taskConfig.merchant.icon;
-      if (taskName.includes('动态')) return this.taskConfig.dynamic.icon;
-      if (taskName.includes('服务号')) return this.taskConfig.service.icon;
-      if (taskName.includes('充值')) return this.taskConfig.recharge.icon;
-      return ''
-    }
-  }
-}
-</script>
-
-<style scoped lang="scss">
-.task-page{
-  width: 750rpx;
-  min-height: 100vh;
-  background-image: url("@/static/points/pointBg.png");
-  background-size: 100%;
-  background-repeat: no-repeat;
-  background-color: #ffe5ca;
-  padding-top: 48rpx;
-}
-
-.points-header{
-  display: flex;
-  justify-content: space-around;
-  margin-bottom: 42rpx;
-  padding: 0 36rpx;
-  .points-item{
-    display: flex;
-    flex-direction: column;
-    align-items: center;
-    justify-content: center;
-    .points-label{
-      font-family: PingFang SC, PingFang SC;
-      font-weight: 500;
-      font-size: 24rpx;
-      color: #FFFFFF;
-      line-height: 24rpx;
-    }
-    .points-value{
-      font-family: DIN, DIN;
-      font-weight: 500;
-      font-size: 40rpx;
-      color: #FFFFFF;
-      line-height: 32rpx;
-      margin-bottom: 16rpx;
-      display: block;
-    }
-  }
-}
-.container{
-  width: 686rpx;
-  height: 83vh;
-  background: #FFFFFF;
-  border-radius: 20rpx;
-  margin: 0 auto;
-  padding: 10rpx 0;
-  .tabs-container{
-    display: flex;
-    overflow: hidden;
-    margin-bottom: 32rpx;
-  }
-}
-
-.tasks-container{
-  .task-item{
-    display: flex;
-    align-items: center;
-    padding: 24rpx 32rpx;
-    flex-direction: row;
-    .task-icon{
-      width: 80rpx;
-      height: 80rpx;
-      margin-right: 24rpx;
-      image{
-        width: 100%;
-        height: 100%;
-      }
-    }
-    .task-info{
-      flex: 1;
-      .task-name{
-        font-family: PingFang SC, PingFang SC;
-        font-weight: 500;
-        font-size: 28rpx;
-        color: #333333;
-        line-height: 28rpx;
-        display: block;
-        margin-bottom: 12rpx;
-      }
-      .task-reward {
-        display: inline-flex;
-        height: 32rpx;
-        background: #FBF2E1;
-        border-radius: 22rpx;
-        padding-right: 12rpx;
-        image{
-          width: 32rpx;
-          height: 32rpx;
-          margin-right: 4rpx;
-        }
-        text{
-          font-family: PingFang SC, PingFang SC;
-          font-weight: 500;
-          font-size: 24rpx;
-          color: #FF9F00;
-          line-height: 32rpx;
-        }
-      }
-    }
-    .task-progress{
-      display: flex;
-      flex-direction: row;
-      .progress-text{
-        font-family: PingFang SC, PingFang SC;
-        font-weight: 500;
-        font-size: 28rpx;
-        color: #999999;
-        line-height: 28rpx;
-        margin-right: 8rpx;
-        margin-top: 10rpx;
-      }
-      .task-btn {
-        height: 48rpx;
-        background: #EEEEEE;
-        border-radius: 98rpx;
-        font-family: PingFang SC, PingFang SC;
-        font-weight: 500;
-        font-size: 26rpx;
-        color: #999999;
-        line-height: 48rpx;
-        border: 1px solid #EEEEEE;
-        margin: 0;
-        padding: 0 20rpx;
-      }
-      .no-task-btn {
-        height: 48rpx;
-        background: #03C1B8;
-        border-radius: 98rpx;
-        font-family: PingFang SC, PingFang SC;
-        font-weight: 500;
-        font-size: 26rpx;
-        color: #FFFFFF;
-        line-height: 48rpx;
-        margin: 0;
-        padding: 0 20rpx;
-      }
-    }
-  }
-  .u-empty{
-    margin-top: 20vh!important;
-  }
-
-  /* 加载中容器 */
-  .loading-container {
-    margin-top: 20vh!important;
-  }
-}
-</style>

+ 0 - 242
src/points/productDetails/addressManagement.vue

@@ -1,242 +0,0 @@
-<template>
-    <view>
-        <scroll-view :scroll-y="true" @scroll="handleContentScroll">
-            <!-- 导航栏  :leftIconColor="!isTop ? '#fff' : '#000'"-->
-            <u-navbar :placeholder="true" autoBack @click="autoBackFun">
-                <view slot="center">
-                    <view class="center" style="background-color: #fff;">我的地址</view>
-                </view>
-            </u-navbar>
-
-            <view class="content">
-                <view class="item" v-for="(item,index) in list" :key="index">
-                    <view class="addressName">{{ item.addressName }}</view>
-                    <view style="display: flex;justify-content: space-between;align-items: center;">
-                        <view style="display: flex;align-items: center;">
-                            <text class="userName"> {{ item.userName }}</text>
-                            <text class="userPhone">{{ item.userPhone }}</text>
-                            <text v-if=item.defaultAddress class="defaultAddress">{{ item.defaultAddress }}</text>
-                        </view>
-                        <view style="display: flex;align-items: center;">
-                            <image style="width: 40rpx;height: 40rpx;" src="@/static/points/editIcon.png" mode="" @click="goEditAddress">
-                            </image>
-                            <image style="width: 40rpx;height: 40rpx;margin-left: 20rpx;"
-                                src="@/static/points/deleteIcon.png" mode="">
-                            </image>
-
-                        </view>
-                    </view>
-
-
-                </view>
-            </view>
-
-
-
-
-            <view class="footer-bar">
-                <u-button :customStyle="{
-                    color: '#fff',
-                    background: '#03C1B8'
-                }" @click="redeemNowFun">新增地址</u-button>
-            </view>
-
-
-            <u-popup :show="selectProductShowPopup" mode="bottom" round="10">
-                <!-- <SelectProduct ref="selectProductRef" @closeSelectProduct="closeSelectProduct"></SelectProduct> -->
-            </u-popup>
-
-        </scroll-view>
-
-    </view>
-</template>
-
-<script>
-
-export default {
-    components: {},
-    data() {
-        return {
-            isTop: 0,
-            redemptionRulesShowPopup: false,
-            selectProductShowPopup: false,
-            list: [
-                {
-                    addressName: '迎泽西大街86号信达国际金融中心',
-                    userName: '郭丽丽',
-                    userPhone: '16635680981',
-                    defaultAddress: '默认',
-                }, {
-                    addressName: '迎泽西大街86号信达国际金融中心',
-                    userName: '郭丽丽',
-                    userPhone: '16635680981',
-                }, {
-                    addressName: '迎泽西大街86号信达国际金融中心',
-                    userName: '郭丽丽',
-                    userPhone: '16635680981',
-                }, {
-                    addressName: '迎泽西大街86号信达国际金融中心',
-                    userName: '郭丽丽',
-                    userPhone: '16635680981',
-                }, {
-                    addressName: '迎泽西大街86号信达国际金融中心',
-                    userName: '郭丽丽',
-                    userPhone: '16635680981',
-                },
-            ]
-
-
-        }
-    },
-    onLoad(data) {
-
-    },
-    onShow() {
-
-    },
-    onPageScroll(e) {
-        //console.log("滚动距离为:" + e.scrollTop);
-        this.isTop = e.scrollTop;
-    },
-
-    methods: {
-        handleContentScroll(e) {
-            this.isTop = e.detail.scrollTop > 0
-        },
-        clichFun() {
-
-        },
-        //立即兑换
-        redeemNowFun() {
-
-        },
-        //返回上一页
-        autoBackFun(){
-            uni.navigateBack();
-        },
-        //去编辑地址
-        goEditAddress() {
-            uni.navigateTo({
-                url: '/pages/address/address-edit'
-            });
-            // /let str = uni.$u.queryParams(params);
-            // uni.navigateTo({
-            // 	url: `/packageA/pages/shop/coupon/couponDetail${str}`
-            // });
-        },
-
-    }
-}
-</script>
-
-<style></style>
-<style lang="scss" scoped>
-.footer-bar {
-    .u-button {
-        width: 670rpx;
-        height: 84rpx;
-        border-radius: 98rpx 98rpx 98rpx 98rpx;
-        margin: 20rpx 40rpx;
-        background: '#000';
-        font-weight: 500;
-        font-size: 32rpx;
-        color: #FFFFFF;
-        line-height: 36rpx;
-        text-align: center;
-        font-style: normal;
-        text-transform: none;
-
-
-    }
-}
-
-.content {
-    background-color: #F8F8F8;
-    padding: 32rpx;
-    font-family: PingFang SC, PingFang SC;
-
-    .item {
-        background: #FFFFFF;
-        box-shadow: 0rpx 4rpx 12rpx 0rpx rgba(88, 209, 187, 0.05);
-        border-radius: 20rpx 20rpx 20rpx 20rpx;
-        padding: 32rpx 24rpx;
-        margin-bottom: 24rpx;
-    }
-
-    .addressName {
-        font-weight: 500;
-        font-size: 32rpx;
-        color: #2F3437;
-        text-align: left;
-        font-style: normal;
-        text-transform: none;
-        margin-bottom: 16rpx;
-    }
-
-    .userName {
-        font-weight: 400;
-        font-size: 26rpx;
-        color: #333333;
-        line-height: 24rpx;
-        text-align: left;
-        font-style: normal;
-        text-transform: none;
-    }
-
-    .userPhone {
-        font-weight: 400;
-        font-size: 26rpx;
-        color: #999999;
-        text-align: left;
-        font-style: normal;
-        text-transform: none;
-        margin-left: 20rpx;
-    }
-
-    .defaultAddress {
-        font-weight: 400;
-        font-size: 24rpx;
-        color: #F35031;
-        text-align: center;
-        font-style: normal;
-        text-transform: none;
-        width: 72rpx;
-        height: 40rpx;
-        background: rgba(243, 80, 49, 0.1);
-        border-radius: 8rpx 8rpx 8rpx 8rpx;
-        margin-left: 20rpx;
-    }
-
-
-}
-
-.popupClass {
-    background-color: #F5F8F8;
-    padding: 24rpx 32rpx 0 32rpx;
-    font-family: PingFang SC, PingFang SC;
-
-    .niticeClass {
-        background: #FFFFFF;
-        border-radius: 20rpx 20rpx 20rpx 20rpx;
-        margin-top: 24rpx;
-        padding: 24rpx;
-        position: relative;
-
-        .title {
-            font-weight: 800;
-            font-size: 28rpx;
-            color: #333333;
-            line-height: 28rpx;
-            text-align: left;
-            font-style: normal;
-            text-transform: none;
-            width: 686rpx;
-            margin: 24rpx 0;
-        }
-
-        .text {
-            color: #999999;
-        }
-    }
-}
-</style>

+ 0 - 354
src/points/productDetails/applyExchange.vue

@@ -1,354 +0,0 @@
-<!-- 申请换货 -->
-<template>
-    <view>
-        <scroll-view :scroll-y="true" @scroll="handleContentScroll">
-            <!-- 导航栏  :leftIconColor="!isTop ? '#fff' : '#000'"-->
-            <!-- <u-navbar :placeholder="true" autoBack @click="autoBackFun">
-                <view slot="center">
-                    <view class="centerTitle" style="background-color: #fff;">{{ title }}</view>
-                </view>
-            </u-navbar> -->
-
-            <view class="content">
-                <view class="productPrice">
-                    <view style="display:flex;" v-if="orderInfo">
-                        <view>
-                            <image style="width: 120rpx;height: 120rpx;"
-                                :src="$globalData.publicUrl + productInfo.skuImage" mode="">
-                            </image>
-                        </view>
-                        <view
-                            style="margin-left: 24rpx;display: flex;flex-direction: column;justify-content: space-between;">
-                            <view class="name">实付价{{ productInfo.paymentType == 1 ? orderInfo.pointsUsed + '积分' :
-                                productInfo.paymentType == 2 ? '¥' + orderInfo.payAmount + '元' :
-                                    productInfo.paymentType == 3 ? '¥' + orderInfo.payAmount + '元' + '+' +
-                                        orderInfo.pointsUsed + '积分' : null }} </view>
-                            <view class="spec">已选:{{ skuSpecFun(productInfo.skuSpec) }} </view>
-
-                        </view>
-                    </view>
-                </view>
-                <view class="mustInput">
-                    <u--form>
-                        <u-form-item required label="申请原因" label-width="120rpx" prop="selectReasonValue">
-                            <view class="tip" @click="selectApplyReasonFun('1')">
-                                <view :style="{ color: selectReasonValue ? '#333' : '#999' }">{{
-                                    selectReasonValue !== null ? selectReasonValue : '请选择申请原因' }}</view>
-                                <image style="width: 35rpx;height: 35rpx;margin-left: 8rpx;"
-                                    src="@/static/points/Keyboard_arrow_rifht.png" mode=""></image>
-                            </view>
-                        </u-form-item>
-
-                        <u-form-item required label="问题描述/凭证" label-width="181rpx" prop="selectReasonValue">
-                            <view class="tip" @click="selectApplyReasonFun('2')">
-                                <view :style="{ color: questionOrDiscribeValue ? '#333' : '#999' }"
-                                    class="questionOrDiscribeValue">
-                                    {{ questionOrDiscribeValue ? questionOrDiscribeValue : '请您务必上传描述和凭证' }}</view>
-                                <image style="width: 35rpx;height: 35rpx;margin-left: 8rpx;"
-                                    src="@/static/points/Keyboard_arrow_rifht.png" mode=""></image>
-                            </view>
-                        </u-form-item>
-
-                    </u--form>
-                    <view v-if="fileList.length > 0"
-                        style="display: flex;flex-direction: row;flex-wrap: wrap;gap: 24rpx;">
-                        <view v-for="(value,index) in fileList"
-                              :key="index"
-                            style="position: relative;width: calc(25% - 20rpx);margin-top: 20rpx;display: flex;">
-                            <image style="width: 144rpx;height: 144rpx;" :src="value.url" mode="">
-                            </image>
-                        </view>
-                    </view>
-
-
-                </view>
-                <view class="returnMath">
-                    <text>返回方式</text>
-                    <text>自主邮寄</text>
-                </view>
-            </view>
-            <view class="buttonClass">
-                <u-button :customStyle="{
-                    color: '#fff',
-                    background: '#03C1B8'
-                }" @click="goSubmit">提交</u-button>
-
-            </view>
-
-
-        </scroll-view>
-
-    </view>
-</template>
-
-<script>
-import { afterSaleOrder, getPointOrderInfo } from '@/api/pointOrder'
-export default {
-    components: {},
-    data() {
-        return {
-            orderNo: null,
-            orderId: null,
-            orderStatus: null,
-            afterSalesType: null,
-            receiptStatus: null,
-            fileList: [],
-            questionOrDiscribeValue: null,
-            selectReasonValue: null,
-            isTop: 0,
-            redemptionRulesShowPopup: false,
-            selectProductShowPopup: false,
-            orderInfo: null,
-            productInfo: null,
-
-
-        }
-    },
-    onLoad(data) {
-        if (data) {
-            console.log(data, '66666666')
-            //decodeURIComponent (data)
-            if (data.orderId) this.orderId = data.orderId
-            if (data.orderNo) this.orderNo = data.orderNo
-            this.getOrderInfo();
-            if (data.orderStatus) this.orderStatus = data.orderStatus
-            if (data.receiptStatus) this.receiptStatus = data.receiptStatus
-            if (data.afterSalesType) this.afterSalesType = data.afterSalesType
-
-            if (data.questionOrDiscribeValue && data.questionOrDiscribeValue !== "null" && data.questionOrDiscribeValue !== "") {
-                this.questionOrDiscribeValue = data.questionOrDiscribeValue
-            }
-
-            if (data.fileList && data.fileList !== "[]") {
-                this.fileList = JSON.parse(data.fileList)
-            }
-            if (data.selectReasonValue && data.selectReasonValue !== "null") {
-                this.selectReasonValue = data.selectReasonValue
-            }
-        }
-    },
-    onShow() {
-
-    },
-    onPageScroll(e) {
-        //console.log("滚动距离为:" + e.scrollTop);
-        this.isTop = e.scrollTop;
-    },
-
-    methods: {
-        //规则组装
-        skuSpecFun(skuSpec) {
-            if (!skuSpec) return ''
-            return JSON.parse(skuSpec).map(e => e.specValue).join(',')
-
-        },
-        async getOrderInfo() {
-            const res = await getPointOrderInfo({
-                orderNo: this.orderNo,
-                //openId: uni.getStorageSync('wx_copenid')
-            })
-            this.orderInfo = res.data.data.orderInfo
-            this.productInfo = res.data.data.productInfo
-        },
-        //提交
-        async goSubmit() {
-            if (!this.selectReasonValue || !this.questionOrDiscribeValue || this.fileList.length === 0) {
-                uni.$u.toast('请选择申请原因\n或\n请上传描述/凭证')
-                return
-            }
-            afterSaleOrder({ //换货
-                orderId: this.orderId,
-                orderNo: this.orderNo,
-                applyReason: this.selectReasonValue,
-                afterSaleType: 2,//1:退货 2:换  3:未收到货
-                applyDesc: this.questionOrDiscribeValue,
-                applyImages: this.fileList.map(m => m.url).join(','),
-            }).then(res => {
-                if (res.data.code == 200) {
-                    uni.redirectTo({
-                        url: '/points/order/orderDetails?orderNo=' + this.orderNo,
-                    });
-                } else {
-                    uni.$u.toast(res.data.msg)
-                }
-
-            })
-
-
-        },
-
-        handleContentScroll(e) {
-            this.isTop = e.detail.scrollTop > 0
-        },
-        //选择申请原因--换货
-        selectApplyReasonFun(tab) {
-            uni.navigateTo({
-                url: `/points/productDetails/applyRefund?afterSalesType=${this.afterSalesType}&receiptStatus=${this.receiptStatus}&tab=${tab}&selectReasonValue=${encodeURIComponent(this.selectReasonValue)}&questionOrDiscribeValue=${encodeURIComponent(this.questionOrDiscribeValue)}&fileList=${JSON.stringify(this.fileList)}&orderNo=${this.orderNo}&orderId=${this.orderId}&orderStatus=${this.orderStatus}`
-            })
-
-        },
-        //返回上一页
-        autoBackFun() {
-            uni.navigateBack();
-        },
-
-    }
-}
-</script>
-
-<style></style>
-<style lang="scss" scoped>
-::v-deep .u-form-item__body__left__content__required {
-    position: absolute;
-    right: 0;
-    left: auto;
-    /* 去掉 left 定位 */
-}
-
-.centerTitle {
-    font-family: PingFang SC, PingFang SC;
-    font-weight: 500;
-    font-size: 34rpx;
-    color: #060606;
-    text-align: center;
-    font-style: normal;
-    text-transform: none;
-}
-
-.buttonClass {
-    position: fixed;
-    bottom: 0;
-    width: 100%;
-    padding: 32rpx;
-    font-family: PingFang SC, PingFang SC;
-
-    button {
-        border-radius: 98rpx 98rpx 98rpx 98rpx;
-        border: 2rpx solid #03C1B8;
-    }
-
-}
-
-.content {
-    background-color: #F8F8F8;
-    padding: 32rpx;
-    font-family: PingFang SC, PingFang SC;
-    //height: 658rpx;
-    border-radius: 20rpx 20rpx 20rpx 20rpx;
-
-    .productPrice {
-        background-color: #fff;
-        padding: 24rpx;
-        border-radius: 20rpx 20rpx 20rpx 20rpx;
-
-        .name {
-            font-weight: bold;
-            font-size: 28rpx;
-            color: #333333;
-            text-align: left;
-            font-style: normal;
-            text-transform: none;
-        }
-
-        .spec {
-            font-weight: 500;
-            font-size: 26rpx;
-            color: #999999;
-            text-align: left;
-            font-style: normal;
-            text-transform: none;
-
-        }
-    }
-
-    ::v-deep .mustInput {
-        background: #FFFFFF;
-        border-radius: 16rpx 16rpx 16rpx 16rpx;
-        padding: 2rpx 24rpx 26rpx 24rpx;
-        margin-top: 24rpx;
-
-        .u-form-item__body__left__content__label {
-            display: flex;
-            flex-direction: row;
-            align-items: center;
-            flex: 1;
-            font-weight: 400;
-            font-size: 26rpx;
-            color: #666666;
-        }
-
-        .u-form-item__body {
-            justify-content: space-between;
-            margin-top: 24rpx;
-            padding: 0;
-        }
-
-        .u-form-item__body__right {
-            flex: none;
-        }
-
-        .questionOrDiscribeValue {
-            width: 400rpx;
-            white-space: nowrap;
-            overflow: hidden;
-            text-overflow: ellipsis;
-            text-align: right;
-
-        }
-
-        .title {
-            font-weight: 400;
-            font-size: 26rpx;
-            color: #666666;
-            text-align: left;
-            font-style: normal;
-            text-transform: none;
-        }
-
-        .tip {
-            font-weight: 400;
-            font-size: 28rpx;
-            color: #999999;
-            text-align: left;
-            font-style: normal;
-            text-transform: none;
-            display: flex;
-            align-items: center;
-        }
-
-        .row {
-            display: flex;
-            margin-top: 24rpx;
-            justify-content: space-between;
-
-        }
-
-
-    }
-
-    .returnMath {
-        margin-top: 24rpx;
-        background: #FFFFFF;
-        border-radius: 16rpx 16rpx 16rpx 16rpx;
-        font-weight: 400;
-        font-size: 26rpx;
-        color: #666666;
-        display: flex;
-        justify-content: space-between;
-        font-style: normal;
-        text-transform: none;
-        padding: 26rpx 24rpx;
-
-        text:last-of-type {
-            font-size: 28rpx;
-            color: #333333;
-        }
-    }
-
-
-
-
-
-
-}
-</style>

+ 0 - 513
src/points/productDetails/applyRefund.vue

@@ -1,513 +0,0 @@
-<!-- 申请退款页面 -->
-
-<template>
-    <view>
-        <scroll-view :scroll-y="true" @scroll="handleContentScroll">
-            <!-- 导航栏  :leftIconColor="!isTop ? '#fff' : '#000'"-->
-            <!-- <u-navbar :placeholder="true" autoBack @click="autoBackFun">
-                <view slot="center">
-                    <view class="centerTitle" style="background-color: #fff;">
-                        {{ receivedStatus == '1' || receivedStatus == '2' ? '申请退款' : '申请换货' }}</view>
-                </view>
-            </u-navbar> -->
-
-            <view class="content">
-                <view>
-                    <view class="contentDetail" v-if="tab == 1">
-                        <view class="tip">请选择取消订单的原因(必选):</view>
-                        <u-radio-group v-model="selectReason" @change="groupChange">
-                            <view style="width: 100%;">
-                                <!-- //1 未收到,申请退款 list;  2.已收到货,申请退款 list2     3.已收货-换货申请 list3-->
-                                <view class="item" v-for="(item,index) in filteredList" :key="index">
-                                    <view v-if="item.title" class="title">{{ item.title }}:</view>
-                                    <view class="obj" v-if="obj.show" v-for="(obj,i) in item.data" :key="i" style="width: 100%;"
-                                        @click="groupChange(obj.value)">
-                                        <view class="radioBox">
-                                            <u-radio activeColor="#03C1B8 " :name=obj.value></u-radio>{{ obj.text }}
-                                        </view>
-                                    </view>
-                                </view>
-                            </view>
-                        </u-radio-group>
-                    </view>
-                    <view class="tip2" v-if="orderStatus == 1">
-                        <view class="title">温馨提示:</view>
-                        <view class="textClass">
-                            1.订单一旦取消,无法恢复<br>
-                            2.用户因个人原因申请退货,包邮商品需承担返回运费,非包邮商品需承担送返两程运费<br>
-                            3.如有其他问题,请及时与平台联系,联系电话:****-*******<br>
-                        </view>
-                    </view>
-                </view>
-                <view v-if="receiptStatus == 'received' && afterSalesType == 'exchange' && tab == 2">
-                    <view class="Box">
-                        <view class="questionOrDiscribe">
-                            <view>问题与描述:</view>
-                            <u--textarea v-model="questionOrDiscribeValue" placeholder="请输入问题描述" :maxlength="100"
-                                count></u--textarea>
-
-                        </view>
-                        <view class="pictures">
-                            <view>上传凭证图片:</view>
-                            <view style="margin-top: 16rpx;" class="pictureClass">
-                                <!-- <view v-for="value in 3" style="position: relative;width: calc(25% - 22rpx)">
-                                    <image style="width: 144rpx;height: 144rpx;" src="@/static/points/closeIcon.png"
-                                        mode="">
-                                    </image>
-                                    <image style="width: 36rpx;height: 36rpx;position: absolute;right : 0;top:0"
-                                        src="@/static/points/pictureIcon.png" mode="" @click="deletePictureFun">
-                                    </image>
-                                </view> -->
-                                <Upload style="" :maxCount="6" :customImg="true" :width="'70'" :height="'70'"
-                                    :src="'/static/points/picture2.png'" @fileList="onUpload" :fileList="fileList" />
-
-
-
-                            </view>
-
-                        </view>
-                    </view>
-                </view>
-            </view>
-            <view class="buttonClass">
-                <u-button :customStyle="{
-                    color: '#fff',
-                    background: '#03C1B8'
-                }" @click="goSubmit">{{ (receiptStatus == 'received' && afterSalesType == 'exchange') ? '确认' : '提交' }}</u-button>
-
-            </view>
-
-        </scroll-view>
-
-    </view>
-</template>
-
-<script>
-import { afterSaleOrder } from '@/api/pointOrder'
-import Upload from '@/components/upload/index.vue';
-export default {
-    components: { Upload },
-    data() {
-        return {
-            tab: '1',//1 申请换货-申请原因选择  2申请换货-描述、凭证
-            orderNo: null,
-            orderId: null,
-            orderStatus: null,
-            afterSalesType: null,
-            receiptStatus: null,
-            fileList: [],
-            headPhotoImg: [],
-            questionOrDiscribeValue: '',
-            selectReason: '',
-            selectReasonValue: null,
-            isTop: 0,
-            list: [],
-            servicePromise: [],
-            //未收到,申请退款
-            list1: [
-                {
-                    title: '平台原因',
-                    data: [
-                        { value: '1', text: '商家无货联系我取消订单', show: true },
-                        { value: '2', text: '商家无法按承诺时效送达', show: true },
-                        { value: '3', text: '商家其他原因联系我取消订单', show: true },
-                    ]
-                }, {
-                    title: '个人原因',
-                    data: [
-                        { value: '4', text: '不想要', show: true },
-                        { value: '5', text: '商品错选 / 多选', show: true },
-                        { value: '6', text: '地址信息填写错误', show: true },
-                        { value: '7', text: '7天无理由退货', show: true },
-                    ]
-                }
-            ],
-            //已收到货,申请退款
-            list2: [
-                {
-                    title: '',
-                    data: [
-                        { value: '1', text: '买错/买多/不想要', show: true },
-                        { value: '2', text: '商品质量问题', show: true },
-                        { value: '3', text: '商品与页面描述不符', show: true },
-                        { value: '4', text: '商品/包装破损', show: true },
-                        { value: '5', text: '发错货', show: true },
-                        { value: '6', text: '少件/未收到货', show: true },
-                        { value: '7', text: '7天无理由退货', show: true },
-                    ]
-                }
-            ],
-            //已收货-换货申请
-            list3: [
-                {
-                    title: '',
-                    data: [
-                        { value: '1', text: '商品质量问题', show: true },
-                        { value: '2', text: '商品与页面描述不符', show: true },
-                        { value: '3', text: '商品/包装破损', show: true },
-                        { value: '4', text: '发错货', show: true },
-                        { value: '5', text: '少件/未收到货' , show: true},
-                        { value: '6', text: '商品大小不合适' , show: true},
-                    ]
-                },
-            ],
-
-
-        }
-    },
-    computed: {
-        filteredList() {
-
-            // 未收货 → 退款原因 list1
-            if (this.receiptStatus === 'notReceived') {
-                return this.list1
-            }
-
-            // 已收货 + 退款 → list2
-            if (this.receiptStatus === 'received' && this.afterSalesType === 'refund') {
-                return this.list2
-            }
-
-            // 已收货 + 换货 → list3
-            if (this.receiptStatus === 'received' && this.afterSalesType === 'exchange') {
-                return this.list3
-            }
-
-            // 兜底:防止空白
-            return []
-        }
-    },
-    onLoad(data) {
-        //订单状态(0:待付款 1:待发货 2:待收货 3:已收货 4:售后中  11:取消订单)
-        console.log(data, 'onLoad-applyRefund')
-        if (data) {
-            if (data.tab) this.tab = data.tab
-            if (data.orderId) this.orderId = data.orderId
-            if (data.orderNo) this.orderNo = data.orderNo
-            if (data.orderStatus) this.orderStatus = data.orderStatus
-            if (data.receiptStatus) this.receiptStatus = data.receiptStatus
-            if (data.afterSalesType) this.afterSalesType = data.afterSalesType
-            if (data.servicePromise) this.servicePromise = data.servicePromise
-            if (data.questionOrDiscribeValue && data.questionOrDiscribeValue !== "null") {
-                this.questionOrDiscribeValue = data.questionOrDiscribeValue
-            }
-
-            if (data.fileList && data.fileList !== "[]") {
-                this.fileList = JSON.parse(data.fileList)
-            }
-            if (data.selectReasonValue && data.selectReasonValue !== "null") {
-                this.selectReasonValue = data.selectReasonValue
-                this.filteredList.map(m => {
-                    m.data.forEach(e => {
-                        if (this.selectReasonValue == e.text) {
-                            this.selectReason = e.value
-                        }
-                    })
-
-                })
-            }
-        }
-
-
-    },
-    onReady() {
-        // 页面渲染完成后再设置标题
-        if (this.receiptStatus == 'notReceived' || (this.receiptStatus == "received" && this.afterSalesType == "refund")) {
-            uni.setNavigationBarTitle({
-                title: '申请退款'
-            });
-        } else if (this.receiptStatus && this.afterSalesType == "exchange") {
-            uni.setNavigationBarTitle({
-                title: '申请换货'
-            });
-        }
-    },
-    onShow(data) {
-        let flag = this.servicePromise.indexOf('7天无理由退') !== -1
-        if (!flag) {
-            this.list2.map(m => {
-                m.data.forEach(e => {
-                    e.show = true
-                    if (e.text.indexOf('7天无理由退') !== -1) {
-                        e.show = false
-                    }
-
-                })
-            })
-            this.list1.map(m => {
-                m.data.forEach(e => {
-                    e.show = true
-                    if (e.text.indexOf('7天无理由退') !== -1) {
-                        e.show = false
-                    }
-
-                })
-            })
-        }
-
-
-    },
-    onPageScroll(e) {
-        //console.log("滚动距离为:" + e.scrollTop);
-        this.isTop = e.scrollTop;
-    },
-
-    methods: {
-        // upload事件
-        onUpload(e) {
-            this.fileList = e
-        },
-        handleContentScroll(e) {
-            this.isTop = e.detail.scrollTop > 0
-        },
-        clichFun() {
-
-        },
-        //点击单选按钮
-        groupChange(val) {
-            this.selectReason = val
-            this.filteredList.map(m => {
-                m.data.forEach(item => {
-                    if (item.value == val) {
-                        this.selectReasonValue = item.text
-                    }
-
-                });
-            })
-
-        },
-        //提交
-        goSubmit() {
-            if (this.receiptStatus == 'notReceived' || (this.receiptStatus == "received" && this.afterSalesType == "refund")) {
-                afterSaleOrder({ // 未收到-申请退款,已收到货-申请退款
-                    orderId: this.orderId,
-                    orderNo: this.orderNo,
-                    applyReason: this.selectReasonValue,
-                    afterSaleType: this.receiptStatus == 'notReceived' ? 3 : 1, // afterSaleType  1:退货 2:换  3:未收到货
-                    //applyDesc:'',
-                    //applyImages:'',
-                }).then(res => {
-                    if (res.data.code == 200) {
-                        uni.redirectTo({
-                            url: '/points/order/orderDetails?orderNo=' + this.orderNo,
-                        });
-                    } else {
-                        uni.$u.toast(res.data.msg)
-                    }
-
-                })
-            }
-
-            if (this.receiptStatus == "received" && this.afterSalesType == "exchange") {
-                uni.navigateTo({
-                    url: `/points/productDetails/applyExchange?afterSalesType=${this.afterSalesType}&receiptStatus=${this.receiptStatus}&selectReasonValue=${encodeURIComponent(this.selectReasonValue)}&questionOrDiscribeValue=${encodeURIComponent(this.questionOrDiscribeValue)}&fileList=${JSON.stringify(this.fileList)}&orderNo=${this.orderNo}&orderId=${this.orderId}&orderStatus=${this.orderStatus}`
-                });
-            }
-
-
-        },
-        //返回上一页
-        autoBackFun() {
-            uni.navigateBack();
-        },
-
-    }
-}
-</script>
-
-<style></style>
-<style lang="scss" scoped>
-.centerTitle {
-    font-family: PingFang SC, PingFang SC;
-    font-weight: 500;
-    font-size: 34rpx;
-    color: #060606;
-    text-align: center;
-    font-style: normal;
-    text-transform: none;
-}
-
-.buttonClass {
-    position: fixed;
-    padding: 32rpx;
-    bottom: 0;
-    width: 100%;
-    font-family: PingFang SC, PingFang SC;
-
-    button {
-        height: 84rpx;
-        border-radius: 98rpx 98rpx 98rpx 98rpx;
-        border: 2rpx solid #03C1B8;
-    }
-
-}
-
-.content {
-    background-color: #F8F8F8;
-    padding: 32rpx;
-    font-family: PingFang SC, PingFang SC;
-    //height: 658rpx;
-    border-radius: 20rpx 20rpx 20rpx 20rpx;
-
-
-    ::v-deep .Box {
-        background: #FFFFFF;
-        border-radius: 20rpx 20rpx 20rpx 20rpx;
-        padding: 18rpx 22rpx 22rpx 22rpx;
-
-        .questionOrDiscribe {
-            font-weight: 500;
-            font-size: 28rpx;
-            color: #333333;
-            text-align: left;
-            font-style: normal;
-            text-transform: none;
-
-            .u-textarea {
-                margin-top: 16rpx;
-                height: 206rpx;
-                background: #F8F8F8;
-                border-radius: 16rpx 16rpx 16rpx 16rpx;
-                border: 1rpx solid #DCDCDC;
-
-                .uni-textarea-placeholder {
-                    font-weight: 400;
-                    font-size: 24rpx;
-                    color: #999999;
-                    text-align: left;
-                    font-style: normal;
-                    text-transform: none;
-                }
-
-                .uni-textarea-wrapper {
-                    font-weight: 400;
-                    font-size: 24rpx;
-                    color: #333;
-                    text-align: left;
-                    font-style: normal;
-                    text-transform: none;
-                }
-
-
-            }
-        }
-
-        .pictures {
-            margin-top: 16rpx;
-            font-weight: 500;
-            font-size: 28rpx;
-            color: #333333;
-            text-align: left;
-            font-style: normal;
-            text-transform: none;
-        }
-
-        .pictureClass {
-
-            .u-upload {
-                .u-upload__wrap {
-                    /* display: inline-block; */
-                    flex-direction: row;
-                    /* justify-content: space-between; */
-                    flex-wrap: wrap;
-                    /* flex: 1; */
-                    gap: 24rpx;
-
-                    .u-upload__wrap__preview {
-                        position: relative;
-                        width: calc(25% - 20rpx);
-                    }
-
-                }
-            }
-
-            .u-upload__wrap__preview {
-                margin: 0;
-                width: calc(25% - 22rpx)
-            }
-
-
-        }
-    }
-
-    .contentDetail {
-        background: #FFFFFF;
-        border-radius: 20rpx 20rpx 20rpx 20rpx;
-        padding: 0 20rpx 24rpx 20rpx;
-
-        .tip {
-            font-weight: bold;
-            font-size: 28rpx;
-            color: #333333;
-            text-align: left;
-            font-style: normal;
-            text-transform: none;
-            padding-top: 18rpx;
-        }
-
-        .item {
-            width: 100%;
-            margin-top: 24rpx;
-        }
-
-        .title {
-            font-weight: 400;
-            font-size: 26rpx;
-            color: #333333;
-            text-align: left;
-            font-style: normal;
-            text-transform: none;
-        }
-
-        .obj {
-            margin-top: 24rpx;
-            font-weight: 400;
-            font-size: 26rpx;
-            color: #999999;
-            text-align: left;
-            font-style: normal;
-            text-transform: none;
-            display: flex;
-        }
-
-        .radioBox {
-            display: flex;
-        }
-
-
-
-    }
-
-    .tip2 {
-        margin-top: 24rpx;
-
-        .title {
-            font-weight: bold;
-            font-size: 28rpx;
-            color: #333333;
-            text-align: left;
-            font-style: normal;
-            text-transform: none;
-        }
-
-        .textClass {
-            margin-top: 24rpx;
-            font-weight: 400;
-            font-size: 26rpx;
-            color: #999;
-            text-align: left;
-            font-style: normal;
-            text-transform: none;
-            display: flex;
-        }
-
-
-    }
-
-
-
-
-
-
-}
-</style>

+ 0 - 82
src/points/productDetails/components/redemptionRules.vue

@@ -1,82 +0,0 @@
-<template>
-    <view>
-        <view class="popupClass">
-                <view class="niticeClass">
-                    <view class="title">
-                        兑换须知
-                    </view>
-                    <view class="text">
-                        1、会员可凭上述积分兑换“广誉源会员定制玻璃杯”一个; <br>
-                        2、双层曲线杯身在隔热防烫的同时,让您的手掌体验一次美妙的抓握感; <br>
-                        3、积分兑换商品不支持质量问题外的退换货服务,请您先确认后签收;<br>
-                        4、积分商城仅支持中国大陆地区的兑换邮寄服务,我们将在10个工作日内寄出;<br>
-                    </view>
-
-                    <view class="title">平台说明 </view>
-                    <view class="text">
-                        价格说明:划线价格:商品的专柜价、吊牌价、正品零售价、厂商指导价,并非原价,仅供参考未划线价格:商品的实时标价,不因表述的差异改变性质。具体成交价格根据商品参加活动、或会员优惠、积分等发生变化,最终以订单结算页价格为准。
-                    </view>
-                </view>
-            </view>
-    </view>
-
-</template>
-
-<script>
-
-export default {
-    components: {},
-    data() {
-        return {
-            showPopup: false
-
-
-        }
-    },
-    onLoad(data) {
-
-    },
-    onShow() {
-
-    },
-    onPageScroll() {
-    },
-
-    methods: {
-
-
-    }
-}
-</script>
-
-<style lang="scss" scoped>
-.popupClass {
-    background-color: #F5F8F8;
-    padding: 24rpx 32rpx 0 32rpx;
-    font-family: PingFang SC, PingFang SC;
-
-    .niticeClass {
-        background: #FFFFFF;
-        border-radius: 20rpx 20rpx 20rpx 20rpx;
-        margin-top: 24rpx;
-        padding: 24rpx;
-        position: relative;
-
-        .title {
-            font-weight: 800;
-            font-size: 28rpx;
-            color: #333333;
-            line-height: 28rpx;
-            text-align: left;
-            font-style: normal;
-            text-transform: none;
-            width: 686rpx;
-            margin: 24rpx 0;
-        }
-
-        .text {
-            color: #999999;
-        }
-    }
-}
-</style>

+ 0 - 459
src/points/productDetails/components/selectProduct.vue

@@ -1,459 +0,0 @@
-<template>
-    <view class="content">
-        <image style="width: 35rpx;height: 35rpx;position: absolute;right: 40rpx;top:40rpx" @click="closeSelectProduct"
-            src="@/static/points/closeIcon.png" mode=""></image>
-        <view class="addressBox">
-            <image style="width: 40rpx;height: 40rpx;" src="@/static/points/addressIcon.png" mode=""></image>
-
-            <view class="name" v-if="defaultAddress">{{ defaultAddress.userName }}</view>
-            <view style="width: 60%;display: flex;" @click="addressSelectFun">
-                <text class="address" v-if="defaultAddress">{{ defaultAddress.address + defaultAddress.atlasAdd
-                    }}</text>
-                <text class="addAddress" style="color: #999;position: absolute;right: 35rpx;top:0"
-                    v-if='!defaultAddress'>添加收货地址</text>
-                <image style="width: 35rpx;height: 35rpx;position: absolute;right: 0;top: 5rpx;"
-                    @click="addressSelectFun" src="@/static/points/Keyboard_arrow_rifht.png" mode=""></image>
-            </view>
-
-
-
-
-
-        </view>
-        <view class="productPrice">
-            <view style="display:flex;justify-content: space-between;">
-                <view style="display:flex;">
-                    <view style="display: flex;align-items: center;">
-                        <image v-if="selectedObj" style="height: 120rpx;"
-                            :src="$globalData.publicUrl + selectedObj.image" mode="heightFix">
-                        </image>
-                    </view>
-                    <view
-                        style="margin-left: 24rpx;display: flex;flex-direction: column;justify-content: space-between;">
-                        <view class="price" v-if="selectedObj">实付价
-                            {{ params.paymentType == 1 ? selectedObj.pricePoint + '积分' :
-                                params.paymentType == 2 ? '¥' + selectedObj.priceMoney + '元' :
-                                    params.paymentType == 3 ? '¥' + selectedObj.priceMoney + '元' + '+' +
-                                        selectedObj.pricePoint + '积分' : null }}
-                        </view>
-                        <view class="price" v-else>实付价
-                            {{ params.paymentType == 1 ? params.pricePoint + '积分' :
-                                params.paymentType == 2 ? '¥' + params.priceMoney + '元' :
-                                    params.paymentType == 3 ? '¥' + params.priceMoney + '元' + '+' +
-                                        params.pricePoint + '积分' : null }}
-                        </view>
-                        <view class="spec" v-if="selectedObj">已选:{{ selectedObj.specValueText }} </view>
-                    </view>
-
-                </view>
-                <view class="deletePrice" v-if="selectedObj">{{ selectedObj.originPrice }}元</view>
-            </view>
-        </view>
-        <!--选择规格 -->
-        <view class="specClass">
-            <view v-for="(arr,index) in specList" :key="index">
-                <view class="title">{{ arr[0] }} ({{ Array.from(arr[1]).length }})</view>
-                <view class="specWrap">
-                    <view class="specCombination" @click="selectedSpecFun(value, arr[0])"
-                        :class="selectedObj ? selectedObj.specValueText.indexOf(value) != -1 ? 'active' : '' : ''"
-                        v-for="(value,i) in Array.from(arr[1])" :key="i">
-                        {{ value }}
-                    </view>
-                </view>
-            </view>
-        </view>
-        <!--运费 -->
-        <view class="yunFeiClass">
-            <view class="text">运费</view>
-            <view class="text" :style="{ color: params.freight == 0 ? '#666' : '#333' }" v-if="params">{{ params.freight
-                == 0 ?
-                '免运费' : '¥' +params.freight }}</view>
-
-        </view>
-        <!--订单备注 -->
-        <view class="nodeClass">
-            <view class="text">订单备注</view>
-            <input type="text" maxlength="200" v-model="orderRemarks" placeholder="选填,请填写您的备注信息,限200字" />
-
-
-        </view>
-        <!--支付方式 -->
-        <view v-if="params">
-            <u-radio-group v-if="selectPayMeth && (params.paymentType !== 1 || params.freight > 0)" class="nodeClass"
-                v-model="selectPayMeth">
-                <view style="width: 100%;">
-                    <view style="display: flex;justify-content: space-between;width: 100%;">
-                        <view style="display: flex;">
-                            <image style="width: 40rpx;height: 40rpx;" src="@/static/points/weiXin.png" mode="">
-                            </image>
-                            <view class="text" style="color: #333;margin-left: 16rpx;">微信支付</view>
-                        </view>
-                        <view>
-                            <u-radio activeColor="#03C1B8 " name='1' style="margin: 0;"></u-radio>
-                        </view>
-
-                    </view>
-                    <view style="display: flex;justify-content: space-between;width: 100%;margin-top: 24rpx;">
-                        <view style="display: flex;">
-                            <image style="width: 40rpx;height: 40rpx;" src="@/static/points/yue.png" mode="">
-                            </image>
-                            <view class="text" style="color: #333;margin-left: 16rpx;">余额支付</view>
-                        </view>
-                        <u-radio activeColor="#03C1B8 " name='2'></u-radio>
-                    </view>
-                </view>
-            </u-radio-group>
-        </view>
-
-
-        <view class="footer-bar"  v-if="params">
-
-            <u-button v-if="!selectedObj" :customStyle="{
-                color: '#fff',
-                background: '#03C1B8'
-            }">请选择</u-button>
-            <u-button v-else-if="selectedObj.stock === 0" :customStyle="{
-                color: '#999999 ',
-                background: '#eee'
-            }">库存不足</u-button>
-            <u-button :disabled="redeemNowBtnDisable" v-else :customStyle="{
-                color: '#fff',
-                background: '#03C1B8'
-            }" @click="redeemNowFun">{{ params.paymentType == 1 ? '立即兑换' : '实付价' }} {{ params.paymentType == 1 ?
-                selectedObj.pricePoint + '积分' :
-                params.paymentType == 2 ? '¥' + selectedObj.priceMoney + '元' :
-                    params.paymentType == 3 ? '¥' + selectedObj.priceMoney + '元' + '+' +
-                        selectedObj.pricePoint + '积分' : null }}</u-button>
-        </view>
-    </view>
-
-</template>
-
-<script>
-
-export default {
-    components: {},
-    props: {
-        params: {
-            type: Object,
-            default: {}
-        },
-        defaultAddress: {
-            type: Object,
-            default: null
-        },
-        redeemNowBtnDisable: {
-            type: Boolean,
-            default: false
-        },
-
-    },
-    data() {
-        return {
-            orderRemarks: '',
-            selectPayMeth: '1',
-            reasonRefusal: '',
-            showPopup: false,
-            specValueText: '',
-            specValuePrice: '',
-            specList: [],
-            selectedObj: null,
-
-        }
-    },
-    onLoad(data) {
-    },
-    onShow() {
-        this.$emit('getAddrListFun')
-
-    },
-    onPageScroll() {
-    },
-    create() {
-    },
-    computed: {
-        // specValuePrice() {
-        //     return ;
-        // }
-    },
-
-    methods: {
-        //
-        onShowFun(selectedObj, orderRemarks, selectPayMeth) {
-            if (orderRemarks) this.orderRemarks = orderRemarks
-            if (selectPayMeth) this.selectPayMeth = selectPayMeth
-            if (selectedObj) {
-                this.selectedObj = JSON.parse(JSON.stringify(selectedObj))
-            } else {
-                this.selectedObj = this.params.specComboVOList[0]
-            }
-            const map = new Map();
-            this.params.specComboVOList.forEach(item => {
-                item.specNameValueList.forEach(spec => {
-                    const key = spec.specName;
-                    if (!map.has(key)) {
-                        map.set(key, new Set());
-                    }
-                    map.get(key).add(spec.specValue);
-                });
-            })
-            this.specList = Array.from(map)
-        },
-        //立即兑换
-        redeemNowFun() {
-            this.$emit('redeemNowFun', this.selectedObj ? JSON.parse(JSON.stringify(this.selectedObj)) : null, this.selectPayMeth, this.orderRemarks, true)
-        },
-        //点击选规则
-        selectedSpecFun(specValue, specName) {
-            if (this.selectedObj) {
-                let selectedObj = JSON.parse(JSON.stringify(this.selectedObj))
-                let specValueT
-                selectedObj.specNameValueList.forEach((e, i) => {
-                    if (e.specName == specName) {
-                        specValueT = e.specValue
-                    }
-                })
-                selectedObj.specValues.forEach((r, n) => {
-                    if (r == specValueT) {
-                        selectedObj.specValues.splice(n, 1)
-                    }
-                })
-                this.params.specComboVOList.forEach((item, index) => {
-                    if (item.specValueText.indexOf(specValue) != -1 && item.specValueText.indexOf(selectedObj.specValues.toString()) != -1) {
-                        this.selectedObj = item
-                    }
-
-                })
-            }
-
-            //console.log(this.selectedObj, 'this.selectedObj')
-            //console.log(specValue, specName, 'value,specName')
-
-        },
-        //关闭选择商品页
-        closeSelectProduct() {
-            this.$emit('closeSelectProduct', this.selectedObj ? JSON.parse(JSON.stringify(this.selectedObj)) : null, this.selectPayMeth, this.orderRemarks)
-        },
-        //去我的地址页面
-        addressSelectFun() {
-            uni.navigateTo({
-                url: `/pages/address/index?selectedAddressId=${this.defaultAddress ? this.defaultAddress.id : null}&productId=${this.params.id}`
-            });
-        }
-
-    }
-}
-</script>
-
-<style lang="scss" scoped>
-.content {
-    background-color: #F5F8F8;
-    padding: 24rpx 32rpx 32rpx 32rpx;
-    font-family: PingFang SC, PingFang SC;
-    height: 1000rpx;
-    border-radius: 20rpx 20rpx 0 0;
-    overflow-y: auto;
-    position: relative;
-
-    .addressBox {
-        position: relative;
-        margin-top: 70rpx;
-        display: flex;
-        align-items: center;
-        border-radius: 20rpx 20rpx 20rpx 20rpx;
-
-        .name {
-            min-width: 30rpx;
-            max-width: 140rpx;
-            margin: 0 24rpx;
-            font-weight: 500;
-            font-size: 32rpx;
-            color: #333333;
-            line-height: 40rpx;
-            text-align: left;
-            font-style: normal;
-            text-transform: none;
-            white-space: nowrap;
-            overflow: hidden;
-            text-overflow: ellipsis;
-        }
-
-        .addAddress {
-            font-weight: 500;
-            font-size: 28rpx;
-            color: #333333;
-            text-align: left;
-            font-style: normal;
-            text-transform: none;
-        }
-
-        .address {
-            font-weight: 500;
-            font-size: 28rpx;
-            color: #333333;
-            text-align: left;
-            font-style: normal;
-            text-transform: none;
-            width: 520rpx;
-            white-space: nowrap;
-            overflow: hidden;
-            text-overflow: ellipsis;
-        }
-    }
-
-    .productPrice {
-        background-color: #fff;
-        margin-top: 24rpx;
-        padding: 24rpx;
-        border-radius: 20rpx 20rpx 20rpx 20rpx;
-
-        .price {
-            font-weight: bold;
-            font-size: 28rpx;
-            color: #03C1B8;
-            text-align: left;
-            font-style: normal;
-            text-transform: none;
-        }
-
-        .spec {
-            font-weight: 500;
-            font-size: 26rpx;
-            color: #999999;
-            text-align: left;
-            font-style: normal;
-            text-transform: none;
-
-        }
-
-        .deletePrice {
-            font-weight: 500;
-            font-size: 32rpx;
-            color: #666666;
-            text-align: left;
-            font-style: normal;
-            text-decoration-line: line-through;
-            text-transform: none;
-        }
-    }
-
-    .specClass {
-        background-color: #fff;
-        margin-top: 24rpx;
-        padding: 0 24rpx 24rpx 24rpx;
-        border-radius: 20rpx 20rpx 20rpx 20rpx;
-
-        .title {
-            padding-top: 24rpx;
-            font-weight: bold;
-            font-size: 28rpx;
-            color: #333333;
-            text-align: left;
-            font-style: normal;
-            text-transform: none;
-        }
-
-        .specWrap {
-            display: flex;
-            flex-wrap: wrap;
-            gap: 16rpx;
-        }
-
-        .specCombination {
-            font-weight: 500;
-            font-size: 24rpx;
-            color: #666666;
-            text-align: left;
-            font-style: normal;
-            text-transform: none;
-            height: 56rpx;
-            line-height: 56rpx;
-            background: #F0F0F0;
-            border-radius: 38rpx 38rpx 38rpx 38rpx;
-            white-space: nowrap;
-            /* 文字不换行 */
-            //margin-right: 16rpx;
-            padding: 0 16rpx;
-            margin-top: 24rpx;
-        }
-
-        .active {
-            background: #03C1B8;
-            border-radius: 38rpx 38rpx 38rpx 38rpx;
-            color: #fff;
-        }
-
-
-    }
-
-    .yunFeiClass {
-        display: flex;
-        justify-content: space-between;
-        height: 92rpx;
-        background: #FFFFFF;
-        border-radius: 20rpx 20rpx 20rpx 20rpx;
-        margin-top: 24rpx;
-        align-items: center;
-        padding: 24rpx;
-
-        .text {
-            font-weight: 500;
-            font-size: 28rpx;
-            color: #666666;
-            line-height: 40rpx;
-            text-align: left;
-            font-style: normal;
-            text-transform: none;
-        }
-    }
-
-    ::v-deep .nodeClass {
-        margin-top: 24rpx;
-        padding: 24rpx;
-        background: #FFFFFF;
-        border-radius: 20rpx 20rpx 20rpx 20rpx;
-        display: flex;
-        align-items: center;
-        justify-content: space-between;
-        margin-bottom: 30rpx;
-
-        .u-radio__icon-wrap {
-            margin: 0;
-        }
-
-        .text {
-            width: 115rpx;
-            font-weight: 500;
-            font-size: 28rpx;
-            color: #666666;
-            line-height: 40rpx;
-            text-align: left;
-
-        }
-
-        input {
-            font-weight: 500;
-            font-size: 26rpx;
-            color: #999999;
-            line-height: 40rpx;
-            text-align: right;
-            font-style: normal;
-            text-transform: none;
-            width: 490rpx;
-        }
-    }
-}
-
-
-
-.footer-bar {
-    .u-button {
-        width: 670rpx;
-        height: 84rpx;
-        border-radius: 98rpx 98rpx 98rpx 98rpx;
-        margin: 20rpx 40rpx;
-        background: '#000';
-
-    }
-}
-</style>

+ 0 - 749
src/points/productDetails/index.vue

@@ -1,749 +0,0 @@
-<template>
-  <view class="member-content">
-    <scroll-view class="sheet-content" :scroll-y="true" @scroll="handleContentScroll">
-      <!-- 导航栏  :leftIconColor="!isTop ? '#fff' : '#000'"-->
-      <!-- <u-navbar :placeholder="true" autoBack>
-        <view slot="center">
-          <view class="center navbar-title" style="background-color: #fff;">商品详情</view>
-        </view>
-      </u-navbar> -->
-      <!-- 主图 -->
-      <view class="mainImame">
-        <ImageItem :src="$globalData.publicUrl + params.productMainImage" />
-      </view>
-      <view class="content">
-        <!-- 第一行text -->
-        <view class="firstRow">
-          <text v-if="selectedObj" class="priceClass">
-            {{ params.paymentType == 1 ? selectedObj.pricePoint + '积分' :
-              params.paymentType == 2 ? selectedObj.priceMoney + '元' :
-                params.paymentType == 3 ? selectedObj.priceMoney + '元' + '+' +
-                  selectedObj.pricePoint + '积分' : null }}
-          </text>
-          <text v-else class="priceClass">
-            {{ params.paymentType == 1 ? params.pricePoint + '积分' :
-              params.paymentType == 2 ? params.priceMoney + '元' :
-                params.paymentType == 3 ? params.priceMoney + '元' + '+' +
-                  params.pricePoint + '积分' : null }}
-          </text>
-          <text class="deletePriceClass">{{ selectedObj ? selectedObj.originPrice : params.specComboVOList ?
-            params.specComboVOList[0].originPrice : null }}元</text>
-          <view class="productName"> {{ params.name }}</view>
-          <view class="discribeClass">{{ params.summary }}</view>
-          <view class="serviceClass">
-            <view v-for="(item,index) in servicePromiseArr" :key="index">
-              <view style="display: flex;align-items: center;" v-if="item.isShow">
-                <ImageItem style="width: 24rpx;height: 24rpx;margin-right: 4rpx;" :src="item.icon" />
-                <view style="margin-right: 24rpx;">{{ item.name }}</view>
-              </view>
-            </view>
-          </view>
-
-        </view>
-        <!-- 第二行text -->
-        <view class="seconedRow">
-          <view class="specClass">
-            <view style="display: flex;align-items: center;justify-content: space-between;width: 100%;">
-              <view style="display: flex;align-items: center;">
-                <text style="color: #666666;">规格</text>
-                <image v-if="selectedObj" class="imgClass" :src="$globalData.publicUrl + selectedObj.image"
-                  mode="heightFix">
-                </image>
-              </view>
-              <view style="display: flex;align-items: center;position: relative;" @click="selectProductShowFun">
-                <text v-if="selectedObj" style="color: #666666;margin-right: 35rpx;">
-                  已选:{{ selectedObj.specValueText }}</text>
-                <text v-else style="color: #999;margin-right: 35rpx;">选择商品</text>
-                <span style="position: absolute;right: 0;top: -5rpx;">
-                  <image style="height: 35rpx;width: 35rpx;" src="@/static/points/Keyboard_arrow_rifht.png" mode="">
-                  </image>
-                </span>
-              </view>
-            </view>
-
-          </view>
-          <view class="arriveAddressClass">
-            <text style="color: #666666;margin-right: 24rpx;">送至</text>
-            <view style="width: 80%; white-space:nowrap; overflow: hidden; text-overflow: ellipsis;"
-              @click="addressSelectFun">
-              <text v-if="defaultAddress">
-                {{ defaultAddress.address + defaultAddress.atlasAdd }}</text>
-
-              <text v-else style="color: #999;position: absolute;right: 35rpx;top:0">添加收货地址</text>
-              <span style="position: absolute;right: 0;top: -5rpx;">
-                <image style="width: 35rpx;height: 35rpx;" src="@/static/points/Keyboard_arrow_rifht.png" mode="">
-                </image>
-              </span>
-            </view>
-
-          </view>
-          <view class="seedAddressClass">
-            <text style="color: #666666;margin-right: 24rpx;">发货</text>
-            <text>山西省太原市小店区
-              <text v-if="params.freight != undefined"> | {{ params.freight == 0 ? '免运费' : '运费' + params.freight + '元'
-              }}</text>
-            </text>
-          </view>
-          <view class="promiseSeedTime" style="margin-left: 80rpx;">
-            下单后{{ params.deliveryTime }}小时内发货
-          </view>
-
-        </view>
-        <!-- 第三行商品详情 -->
-        <view class="produceDateil">
-          <view style="font-weight: 800;font-size: 32rpx;color: #333333;">商品详情</view>
-          <view v-for="(img,index) in params.productImage" :key="index" style="margin-top: 20rpx;">
-            <image style="width: 100%;" :src="$globalData.publicUrl + img" mode="widthFix"></image>
-          </view>
-
-        </view>
-        <!-- 兑换须知 -->
-        <view class="niticeClass">
-          <view class="title">
-            兑换须知
-            <span style="position: absolute;right: 24rpx;">
-              <!-- <image style="width: 28rpx;height: 28rpx;" @click="clichFun"
-                src="@/static/points/Keyboard_arrow_rifht.png" mode=""></image> -->
-            </span>
-          </view>
-          <view class="text" style="-webkit-line-clamp: 8;">
-            1、会员可凭上述积分兑换“广誉源会员定制玻璃杯”一个; <br>
-            2、双层曲线杯身在隔热防烫的同时,让您的手掌体验一次美妙的抓握感; <br>
-            3、积分兑换商品不支持质量问题外的退换货服务,请您先确认后签收;<br>
-            4、积分商城仅支持中国大陆地区的兑换邮寄服务,我们将在10个工作日内寄出;<br>
-          </view>
-        </view>
-        <!-- 平台须知 -->
-        <view class="niticeClass" style="margin-bottom: 30rpx;">
-          <view class="title">平台说明
-
-            <span style="position: absolute;right: 24rpx;">
-              <!-- <image style="width: 28rpx;height: 28rpx;" @click="clichFun"
-                src="@/static/points/Keyboard_arrow_rifht.png" mode=""></image> -->
-            </span>
-
-          </view>
-          <view class="text">
-            价格说明:划线价格:商品的专柜价、吊牌价、正品零售价、厂商指导价,并非原价,仅供参考未划线价格:商品的实时标价,不因表述的差异改变性质。具体成交价格根据商品参加活动、或会员优惠、积分等发生变化,最终以订单结算页价格为准。
-          </view>
-        </view>
-      </view>
-
-      <view class="footer-bar">
-        <u-button :disabled="redeemNowBtnDisable" v-if="selectedObj ? selectedObj.stock : params.stock" :customStyle="{
-          color: '#fff',
-          background: '#03C1B8'
-        }" @click="selectProductShowFun">{{ redeemNowBtnDisable ? '支付中...' : '立即兑换' }}</u-button>
-        <u-button v-else :customStyle="{
-          color: '#999999 ',
-          background: '#eee'
-        }">库存不足</u-button>
-      </view>
-
-      <u-popup :show="redemptionRulesShowPopup" mode="bottom" @close="redemptionRulesShowPopup = false" round="20">
-        <RedemptionRules ref="redemptionRulesRef"></RedemptionRules>
-      </u-popup>
-      <u-popup :z-index="999" :show="selectProductShowPopup" mode="bottom" round="10">
-        <SelectProduct :redeemNowBtnDisable="redeemNowBtnDisable" :params="params" ref="selectProductRef"
-          :defaultAddress="defaultAddress" @redeemNowFun="redeemNowFun" @getAddrListFun="getAddrListFun"
-          @closeSelectProduct="closeSelectProduct">
-        </SelectProduct>
-      </u-popup>
-
-    </scroll-view>
-
-
-
-
-  </view>
-</template>
-
-<script>
-import wx from 'weixin-js-sdk';
-import { h5Url } from '@/common/config.js';
-import ImageItem from "@/components/swiper/components/image.vue";
-import RedemptionRules from "./components/redemptionRules.vue";
-import SelectProduct from "./components/selectProduct.vue";
-import { productGetById } from '@/api/points'
-import { productOrderCreate, productOrderPay } from '@/api/pointOrder'
-import { getAddrList, } from '@/api/address';
-import { getInfo, getSignature } from '@/api/index.js';
-//paymentType 商品的付款类型 付款类型(1:积分 2:金额 3:积分+金额)
-
-//订单状态(0:待付款 1:待发货 2:待收货 3:已收货 4:售后中  11:取消订单)
-
-//售后状态(0:待审核 1:退款完成 2:等待用户寄回  3:等待商家收货 4:等待商家寄出  5:订单完成 6:取消售后)
-
-export default {
-  components: { ImageItem, RedemptionRules, SelectProduct },
-  data() {
-    return {
-      redeemNowBtnDisable: false,
-      isTop: 0,
-      redemptionRulesShowPopup: false,
-      selectProductShowPopup: false,
-      params: {},
-      servicePromiseArr: [
-        { name: '放心购', icon: '/static/points/Group4.png', isShow: false },
-        { name: '假一赔三', icon: '/static/points/Group6.png', isShow: false },
-        { name: '7天无理由退换', icon: '/static/points/Group2.png', isShow: false },
-        { name: '破损包退换', icon: '/static/points/return7.png', isShow: false },
-      ],
-      selectedObj: null,
-      defaultAddress: null,
-      selectPayMeth: null, //1 微信支付 2 余额
-      orderRemarks: null,
-      addressList: [],
-      dBalance: 0.00,
-      wxconfig: {},
-      orderNo: null,
-      isGetAddrListFunLoaded: false,
-
-
-    }
-  },
-  onLoad(data) {
-    console.log(data, 'onLoad66666')
-    if (data.selectedAddressId) this.selectedAddressId = data.selectedAddressId
-    if (data.id) {
-      this.productGetByIdFun(data.id)
-      this.getAddrListFun()
-      this.isGetAddrListFunLoaded = true
-      this.getinfo()
-    }
-
-  },
-  onShow(onShow) {
-    console.log(onShow, this.isGetAddrListFunLoaded, 'onShow55555')
-    if (!this.isGetAddrListFunLoaded) {
-      this.getAddrListFun()
-    } else {
-      this.isGetAddrListFunLoaded = false
-    }
-
-
-  },
-  onPageScroll(e) {
-    //console.log("滚动距离为:" + e.scrollTop);
-    this.isTop = e.scrollTop;
-  },
-
-  methods: {
-    handleContentScroll(e) {
-      this.isTop = e.detail.scrollTop > 0
-    },
-
-    //账户余额
-    getinfo() {
-      getInfo().then(res => {
-        if (res.data.code == 200) {
-          this.dBalance = res.data.data.dBalance.toFixed(2)
-        }
-      })
-    },
-    //查询默认地址
-    getAddrListFun() {
-      let params = {
-        current: 1,
-        size: 100,
-        openId: uni.getStorageSync('wx_copenid'),
-      }
-      getAddrList(params).then(res => {
-        if (res.data.code === 200) {
-          if (!res.data.data.length) {
-            this.defaultAddress = null
-            return
-          }
-
-          if (this.selectedAddressId) {
-            let flag = res.data.data.some(item => {
-              return item.id == this.selectedAddressId
-            });
-            if (flag) {
-              let defaultAddress = res.data.data.find(item => {
-                if (item.id == this.selectedAddressId)
-                  return item
-              });
-              this.$set(this, 'defaultAddress', defaultAddress);
-            } else {
-              this.defaultAddress = res.data.data[0]
-            }
-            return
-          }
-          if (!this.selectedAddressId || !this.defaultAddress) {
-            let flag = res.data.data.some(item => {
-              return item.type == 1
-            });
-            if (flag) {
-              this.defaultAddress = res.data.data.find(item => {
-                if (item.type == 1)
-                  return item
-              });
-            } else {
-              this.defaultAddress = res.data.data[0]
-            }
-          }
-        }
-      });
-    },
-
-    //查询商品详情
-    productGetByIdFun(id) {
-      productGetById({ id: id }).then(res => {
-        if (res.data.code === 200) {
-          this.params = Object.assign({}, res.data.data)
-          //this.selectedObj = this.params.specComboVOList[0]
-          this.servicePromiseArr.forEach(element => {
-            this.params.servicePromise.map(m => {
-              if (m == element.name) {
-                element.isShow = true
-              }
-            })
-
-          });
-
-        }
-
-      })
-
-    },
-    //兑换须知页面
-    clichFun() {
-      this.redemptionRulesShowPopup = true
-    },
-    //立即兑换
-    redeemNowFun(selectedObj, selectPayMeth, orderRemarks, redeemNowBtnDisable) {
-      if (selectedObj) this.selectedObj = selectedObj
-      if (selectPayMeth) this.selectPayMeth = selectPayMeth
-      if (orderRemarks) this.orderRemarks = orderRemarks
-
-      if (!this.defaultAddress) {
-        uni.showToast({
-          title: '请选择添加地址',
-          icon: 'none'
-        })
-        return
-      }
-      if (this.selectPayMeth == null && (params.paymentType !== 1 || this.params.freight > 0)) {
-        uni.showToast({
-          title: '请选择支付方式',
-          icon: 'none'
-        })
-        return
-      }
-
-      this.selectProductShowPopup = true
-      this.$nextTick(() => {
-        this.$refs.selectProductRef.onShowFun(this.selectedObj, this.orderRemarks, this.selectPayMeth)
-      });
-
-      this.redeemNowBtnDisable = redeemNowBtnDisable ? redeemNowBtnDisable : true
-      let params = {}
-      //params.openId = uni.getStorageSync('wx_copenid');//用户openId
-      params.userPhone = this.defaultAddress.phone;//用户手机号
-      params.userName = this.defaultAddress.userName;//用户名
-      params.userAddress = this.defaultAddress.address + this.defaultAddress.atlasAdd;//地图地址+详细地址
-      //params.addressId = this.defaultAddress.id;//地址ID
-      params.productId = this.params.id;
-      params.name = this.params.name;
-      params.productMainImage = this.params.productMainImage;
-      params.skuId = this.selectedObj.skuId; //选中的SKU ID
-      params.specNameValueList = this.selectedObj.specNameValueList; // SKU列表(规格组合明细)
-      params.quantity = 1; //购买数量
-      params.payType = this.params.paymentType == 1 ? 3 : Number(this.selectPayMeth);//支付方式:1微信支付 2账户余额
-      params.freightAmount = this.params.freight; //运费
-      params.totalAmount = (this.selectedObj.priceMoney + (this.params.freight > 0 ? this.params.freight : 0));// 支付金额+运费=总金额
-      params.payAmount = this.selectedObj.priceMoney;// 支付金额
-      params.pointsUsed = this.selectedObj.pricePoint;// 使用的积分
-      params.buyerRemark = this.orderRemarks;//买家备注信息
-      if (this.params.paymentType == 1 && this.params.freight == 0) {//只有积分兑换
-        this.productOrderCreateFun(params)
-        return
-      }
-      if (this.selectPayMeth == 1) {
-        //微信支付
-        this.weixinPay(params)
-      } else if (this.selectPayMeth == 2) {
-        //余额支付
-        this.nowYuyue(params)
-      }
-
-    },
-    //微信支付
-    async weixinPay(params) {
-      let data = await this.productOrderCreateFun(params)
-      if (!data) return
-      let payConfig = JSON.parse(data.data)
-      getSignature(h5Url).then(res => {
-        this.wxconfig = res.data
-        wx.config({
-          beta: true,
-          debug: false,
-          appId: this.wxconfig.appId, // 公众号ID
-          // appId: uni.getAppBaseInfo().host.appId, // 公众号ID
-          timestamp: this.wxconfig.timestamp, // 时间戳,自1970年以来的秒数
-          nonceStr: this.wxconfig.nonceStr, // 随机串
-          signature: this.wxconfig.signature, // 微信签名方式
-          jsApiList: ['getBrandWCPayRequest']
-        });
-        var vm = this
-        wx.invoke('getBrandWCPayRequest',
-          // 下面参数内容都是后台返回的
-          {
-            'appId': payConfig.appId, // 公众号名称,由商户传入
-            'timeStamp': payConfig.timeStamp, // 时间戳
-            'nonceStr': payConfig.nonceStr, // 随机串
-            'package': payConfig.package, // 预支付id
-            'signType': payConfig.signType, // 微信签名方式
-            'paySign': payConfig.paySign, // 微信签名
-          },
-          function (res) {
-            console.log(res, '---------------付款')
-            vm.redeemNowBtnDisable = false
-            // 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
-
-            // JSON.stringify(res);
-            if (res.err_msg == "get_brand_wcpay_request:ok") {
-              uni.navigateTo({
-                url: '/points/productDetails/paymentSuccessful?orderNo=' + vm.orderNo
-              });
-            } else if (res.err_msg == "get_brand_wcpay_request:cancel") {
-              uni.showToast({
-                title: '已取消支付',
-                icon: 'none'
-              })
-              uni.navigateTo({
-                url: '/points/productDetails/pendingPayment?orderNo=' + vm.orderNo
-              });
-
-
-            } else {
-              vm.redeemNowBtnDisable = false
-              alert('付款失败');
-            }
-          }
-        )
-
-      }).catch(err => {
-        this.redeemNowBtnDisable = false
-        uni.showToast({
-          title: err,
-          icon: 'none'
-        })
-
-      })
-    },
-    //账号余额支付
-    async nowYuyue(params) {
-      if (parseFloat(this.dBalance) < parseFloat(this.selectedObj.priceMoney)) {
-        this.redeemNowBtnDisable = false
-        uni.showModal({
-          title: '账户余额不足',
-          content: '请充值',
-          success: function (res) {
-            if (res.confirm) {
-              uni.navigateTo({
-                url: '../../pages/my/pay?name=充值'
-              })
-            } else if (res.cancel) { }
-          }
-        });
-      } else {
-        let data = await this.productOrderCreateFun(params)
-        if (!data) return
-        this.redeemNowBtnDisable = false
-        uni.navigateTo({
-          url: '/points/productDetails/paymentSuccessful?orderNo=' + this.orderNo
-        });
-
-      }
-    },
-    //支付api
-    async productOrderCreateFun(params) {
-      let res = await productOrderCreate(params)
-      if (res.data.code == 200) {
-        this.orderNo = res.data.data
-        let res1 = await productOrderPay({
-          orderNo: res.data.data, //订单编号
-          payType: params.payType, //支付方式:1微信支付 2:余额支付
-          totalPrice: params.totalAmount //订单总金额,单位:元
-        })
-        if (res1.data.code == 200) {
-          return res1.data
-        } else {
-          this.redeemNowBtnDisable = false
-          uni.showToast({
-            title: res1.data.msg,
-            icon: 'none'
-          })
-        }
-
-      } else {
-        this.redeemNowBtnDisable = false
-        uni.showToast({
-          title: res.data.msg,
-          icon: 'none'
-        })
-      }
-
-
-
-    },
-
-    //打开选择商品页
-    selectProductShowFun() {
-      this.selectProductShowPopup = true
-      this.$nextTick(() => {
-        this.$refs.selectProductRef.onShowFun(this.selectedObj, this.orderRemarks, this.selectPayMeth)
-      });
-    },
-    //关闭选择商品页
-    closeSelectProduct(selectedObj, selectPayMeth, orderRemarks) {
-      if (selectedObj) this.selectedObj = selectedObj
-      if (selectPayMeth) this.selectPayMeth = selectPayMeth
-      if (orderRemarks) this.orderRemarks = orderRemarks
-      this.selectProductShowPopup = false
-    },
-    //去我的地址页面 /points/productDetails/addressManagement
-    addressSelectFun() {
-      uni.navigateTo({
-        url: `/pages/address/index?selectedAddressId=${this.defaultAddress ? this.defaultAddress.id : null}&productId=${this.params.id}`
-      });
-    },
-
-  }
-}
-</script>
-
-<style></style>
-<style lang="scss" scoped>
-.mainImame {
-  height: 456rpx;
-}
-
-::v-deep .u-popup {
-
-  .u-transition,
-  .u-fade-enter-to,
-  .u-fade-enter-active {
-    z-index: 999 !important;
-  }
-}
-
-.footer-bar {
-  .u-button {
-    height: 84rpx;
-    border-radius: 98rpx 98rpx 98rpx 98rpx;
-    margin: 20rpx 40rpx;
-    font-weight: bold;
-    font-size: 32rpx;
-    line-height: 36rpx;
-    text-align: center;
-    font-style: normal;
-    text-transform: none;
-
-  }
-}
-
-.content {
-  background-color: #F5F8F8;
-  padding: 24rpx 32rpx 0 32rpx;
-  font-family: PingFang SC, PingFang SC;
-  margin-bottom: 150rpx;
-  border: 1px solid rgb(255, 255, 255);
-
-  .firstRow {
-    background-color: #fff;
-    border-radius: 20rpx 20rpx 20rpx 20rpx;
-    padding: 26rpx 24rpx 24rpx 24rpx;
-
-    .priceClass {
-      font-weight: 500;
-      font-size: 40rpx;
-      color: #F53E54;
-      line-height: 40rpx;
-      text-align: left;
-      font-style: normal;
-      text-transform: none
-    }
-
-    .deletePriceClass {
-      margin-left: 24rpx;
-      width: 90rpx;
-      height: 32rpx;
-      font-weight: 500;
-      font-size: 32rpx;
-      color: #999999;
-      line-height: 32rpx;
-      text-align: left;
-      font-style: normal;
-      text-decoration-line: line-through;
-      text-transform: none;
-    }
-
-    .productName {
-      margin-top: 22rpx;
-      width: 638rpx;
-      font-weight: bold;
-      font-size: 36rpx;
-      color: #333333;
-      line-height: 44rpx;
-      text-align: left;
-      font-style: normal;
-      text-transform: none;
-    }
-
-    .discribeClass {
-      margin-top: 12rpx;
-      line-height: 28rpx;
-      font-weight: 500;
-      font-size: 28rpx;
-      color: #999999;
-      line-height: 32rpx;
-      text-align: left;
-      font-style: normal;
-      text-transform: none;
-    }
-
-    .serviceClass {
-      margin-top: 24rpx;
-      height: 24rpx;
-      font-weight: 500;
-      font-size: 24rpx;
-      color: #666666;
-      line-height: 24rpx;
-      text-align: left;
-      font-style: normal;
-      text-transform: none;
-      display: flex;
-      align-items: center;
-    }
-
-
-  }
-
-  .seconedRow {
-    background: #FFFFFF;
-    border-radius: 20rpx 20rpx 20rpx 20rpx;
-    margin-top: 24rpx;
-    padding: 24rpx;
-    font-weight: 500;
-    font-size: 28rpx;
-    color: #333333;
-    line-height: 28rpx;
-    text-align: left;
-    font-style: normal;
-    text-transform: none;
-
-    .specClass {
-      display: flex;
-      align-items: center;
-      justify-content: space-between;
-      position: relative;
-
-      .imgClass {
-        width: 64rpx;
-        height: 64rpx;
-        background: #D9D9D9;
-        border-radius: 8rpx 8rpx 8rpx 8rpx;
-        margin-left: 24rpx;
-
-      }
-    }
-
-    .arriveAddressClass {
-      margin-top: 32rpx;
-      position: relative;
-      display: flex;
-      align-items: center;
-    }
-
-    .addressTextClass {
-      margin-top: 32rpx;
-    }
-
-    .seedAddressClass {
-      margin-top: 32rpx;
-    }
-
-    .promiseSeedTime {
-      margin-top: 24rpx;
-    }
-  }
-
-  .produceDateil {
-    background: #FFFFFF;
-    border-radius: 20rpx 20rpx 20rpx 20rpx;
-    margin-top: 24rpx;
-    padding: 24rpx;
-  }
-
-  .niticeClass {
-    background: #FFFFFF;
-    border-radius: 20rpx 20rpx 20rpx 20rpx;
-    margin-top: 24rpx;
-    padding: 24rpx;
-    position: relative;
-
-    .title {
-      font-weight: 800;
-      font-size: 32rpx;
-      color: #333333;
-      line-height: 32rpx;
-      text-align: left;
-      font-style: normal;
-      text-transform: none;
-      width: 686rpx;
-
-    }
-
-    .text {
-      margin-top: 24rpx;
-      font-weight: 500;
-      font-size: 28rpx;
-      color: #999999;
-      line-height: 36rpx;
-      text-align: left;
-      overflow: hidden;
-      text-overflow: ellipsis;
-      display: -webkit-box;
-      -webkit-line-clamp: 5;
-      /* 这里控制显示几行 */
-      -webkit-box-orient: vertical;
-      word-break: break-all;
-      /* 长数字/英文自动换行 */
-
-    }
-  }
-}
-
-.popupClass {
-  background-color: #F5F8F8;
-  padding: 24rpx 32rpx 0 32rpx;
-  font-family: PingFang SC, PingFang SC;
-
-  .niticeClass {
-    background: #FFFFFF;
-    border-radius: 20rpx 20rpx 20rpx 20rpx;
-    margin-top: 24rpx;
-    padding: 24rpx;
-    position: relative;
-
-    .title {
-      font-weight: 800;
-      font-size: 28rpx;
-      color: #333333;
-      line-height: 28rpx;
-      text-align: left;
-      font-style: normal;
-      text-transform: none;
-      width: 686rpx;
-      margin: 24rpx 0;
-    }
-
-    .text {
-      color: #999999;
-    }
-  }
-}
-</style>

+ 0 - 275
src/points/productDetails/paymentSuccessful.vue

@@ -1,275 +0,0 @@
-<template>
-    <view>
-        <scroll-view :scroll-y="true" @scroll="handleContentScroll">
-            <!-- 导航栏  :leftIconColor="!isTop ? '#fff' : '#000'"-->
-            <!-- <u-navbar :placeholder="true" autoBack @click="autoBackFun">
-                <view slot="center">
-                    <view class="centerTitle" style="background-color: #fff;">{{ title }}</view>
-                </view>
-            </u-navbar> -->
-
-            <view class="content" v-if=orderInfo>
-                <view class="contentBox">
-                    <view class="successClass">
-                        <view style="margin-top: 36rpx;">
-                            <image style="width: 320rpx;height: 172rpx;" @click="selectProductShowFun"
-                                src="@/static/points/successIcon.png" mode=""></image>
-                        </view>
-                        <view class="payStatus"> 商品支付成功</view>
-                        <view class="promiseSeedTime">我们将在{{productInfo.deliveryTime}}个小时内寄出 </view>
-                    </view>
-                    <view style="height: 2rpx;background-color: #f0f0f0;margin-top: 40rpx;"> </view>
-
-                    <view class="address">
-                        <view class="shxx">收货信息</view>
-                        <view class="addressBox">
-                            <image style="width: 45rpx;height: 40rpx;" @click="addressSelectFun"
-                                src="@/static/points/addressIcon.png" mode=""></image>
-                            <view style="margin-left: 16rpx;">
-                                <view class="name">
-                                    {{orderInfo.receiverName}} <text>
-                                        {{orderInfo.receiverPhone}}</text>
-                                </view>
-                                <view class="address">
-                                    {{orderInfo.addressName}}
-                                </view>
-                            </view>
-
-                        </view>
-
-                    </view>
-                </view>
-
-            </view>
-            <view class="buttonClass">
-                <u-button :customStyle="{
-                    color: '#fff',
-                    background: '#03C1B8'
-                }" @click="goHome">返回首页</u-button>
-
-                <u-button :customStyle="{
-                    color: '#03C1B8 ',
-                    background: ''
-                }" @click="checkOrder">查看订单</u-button>
-
-            </view>
-
-        </scroll-view>
-
-    </view>
-</template>
-
-<script>
-import { getPointOrderInfo, } from '@/api/pointOrder'
-export default {
-    components: {},
-    data() {
-        return {
-            title: '兑换成功',
-            isTop: 0,
-            redemptionRulesShowPopup: false,
-            selectProductShowPopup: false,
-            orderNo: null,
-            orderInfo: null,
-            productInfo: null,
-
-        }
-    },
-    onLoad(data) {
-        if (data.orderNo) {
-            this.orderNo = data.orderNo
-            this.getOrderInfo();
-        }
-    },
-    onShow() {
-
-    },
-    onPageScroll(e) {
-        //console.log("滚动距离为:" + e.scrollTop);
-        this.isTop = e.scrollTop;
-    },
-
-    methods: {
-        async getOrderInfo() {
-            const res = await getPointOrderInfo({
-                orderNo: this.orderNo,
-               // openId: uni.getStorageSync('wx_copenid')
-            })
-            this.orderInfo = res.data.data.orderInfo
-            this.productInfo = res.data.data.productInfo
-        },
-        handleContentScroll(e) {
-            this.isTop = e.detail.scrollTop > 0
-        },
-        //返回首页
-        goHome() {
-            uni.switchTab({
-                url: '/pages/index/index'
-            });
-        },
-        //查看订单 //url: '/points/productDetails/pendingPayment'
-        checkOrder() {
-            uni.navigateTo({
-                url: '/points/order/orderList'
-            });
-        },
-        //返回上一页
-        autoBackFun() {
-            uni.navigateBack();
-        },
-        //去编辑地址
-        goEditAddress() {
-            uni.navigateTo({
-                url: '/pages/address/address-edit'
-            });
-            // /let str = uni.$u.queryParams(params);
-            // uni.navigateTo({
-            // 	url: `/packageA/pages/shop/coupon/couponDetail${str}`
-            // });
-        },
-
-    }
-}
-</script>
-
-<style></style>
-<style lang="scss" scoped>
-.footer-bar {
-    .u-button {
-        width: 670rpx;
-        height: 84rpx;
-        border-radius: 98rpx 98rpx 98rpx 98rpx;
-        margin: 20rpx 40rpx;
-        background: '#000';
-        font-weight: 500;
-        font-size: 32rpx;
-        color: #FFFFFF;
-        line-height: 36rpx;
-        text-align: center;
-        font-style: normal;
-        text-transform: none;
-
-
-    }
-}
-
-.centerTitle {
-    font-family: PingFang SC, PingFang SC;
-    font-weight: 500;
-    font-size: 34rpx;
-    color: #060606;
-    text-align: center;
-    font-style: normal;
-    text-transform: none;
-}
-
-.buttonClass {
-    display: flex;
-    padding: 32rpx;
-    font-family: PingFang SC, PingFang SC;
-
-    button {
-        width: 288rpx;
-        height: 84rpx;
-        border-radius: 98rpx 98rpx 98rpx 98rpx;
-        border: 2rpx solid #03C1B8;
-    }
-
-}
-
-.content {
-    background-color: #F8F8F8;
-    padding: 32rpx;
-    font-family: PingFang SC, PingFang SC;
-    //height: 658rpx;
-    border-radius: 20rpx 20rpx 20rpx 20rpx;
-
-
-    .contentBox {
-        padding: 32rpx;
-        width: 686rpx;
-        height: 658rpx;
-        background: #FFFFFF;
-        border-radius: 20rpx 20rpx 20rpx 20rpx;
-    }
-
-    .successClass {
-        display: flex;
-        flex-direction: column;
-        align-items: center;
-        background: #FFFFFF;
-        border-radius: 20rpx 20rpx 20rpx 20rpx;
-
-    }
-
-    .payStatus {
-        font-weight: bold;
-        font-size: 36rpx;
-        color: #333333;
-        line-height: 36rpx;
-        text-align: left;
-        font-style: normal;
-        text-transform: none;
-        margin-top: 32rpx;
-    }
-
-    .promiseSeedTime {
-        font-weight: 500;
-        font-size: 28rpx;
-        color: #999999;
-        line-height: 40rpx;
-        text-align: left;
-        font-style: normal;
-        text-transform: none;
-        margin-top: 24rpx;
-    }
-
-    .address {
-        .shxx {
-            margin-top: 20rpx;
-            font-weight: bold;
-            font-size: 28rpx;
-            color: #333333;
-            line-height: 40rpx;
-            text-align: left;
-            font-style: normal;
-            text-transform: none;
-        }
-
-        .addressBox {
-            margin-top: 24rpx;
-            display: flex;
-            align-items: flex-start;
-
-            .name {
-                font-weight: 500;
-                font-size: 32rpx;
-                color: #333333;
-                line-height: 40rpx;
-                text-align: left;
-                font-style: normal;
-                text-transform: none;
-
-            }
-
-            .address {
-                margin-top: 8rpx;
-                font-weight: 500;
-                font-size: 28rpx;
-                color: #666666;
-                line-height: 40rpx;
-                text-align: left;
-                font-style: normal;
-                text-transform: none;
-            }
-
-        }
-
-
-    }
-
-
-
-
-}
-</style>

+ 0 - 801
src/points/productDetails/pendingPayment.vue

@@ -1,801 +0,0 @@
-<template>
-    <view v-if="orderInfo">
-        <scroll-view :scroll-y="true" @scroll="handleContentScroll">
-            <!-- <u-navbar :placeholder="true" autoBack @click="autoBackFun">
-                <view slot="center">
-                    <view class="centerTitle" style="background-color: #fff;">{{ title }}</view>
-                </view>
-            </u-navbar> -->
-
-            <view class="contentBox">
-                <view class="remainingTime">
-                    {{ orderStatus }}
-                    <text v-if="orderInfo.orderStatus == 0 && countdownText != '00:00'">{{ countdownText }}</text>
-                </view>
-                <view class="content">
-                    <view class="addressBox">
-                        <image style="width: 40rpx;height: 40rpx;" src="@/static/points/addressIcon.png" mode="">
-                        </image>
-                        <view style="margin-left: 16rpx;">
-                            <view class="name">
-                                {{ orderInfo.receiverName }} <text>{{ orderInfo.receiverPhone }}</text>
-                            </view>
-                            <view class="address">
-                                {{ orderInfo.addressName }}
-                            </view>
-                        </view>
-
-                    </view>
-
-                    <view class="productPrice">
-                        <view style="display:flex;">
-                            <view>
-                                <image style="width: 120rpx;height: 120rpx;"
-                                    :src="$globalData.publicUrl + productInfo.skuImage" mode="">
-                                </image>
-                            </view>
-                            <view
-                                style="margin-left: 24rpx;display: flex;flex-direction: column;justify-content: space-between;">
-                                <view class="productName">{{ productInfo.productName }} </view>
-                                <view class="spec">已选:{{ skuSpecFun(productInfo.skuSpec) }} </view>
-                                <view class="price">{{ productInfo.paymentType == 1 ? orderInfo.pointsUsed + '积分' :
-                                    productInfo.paymentType == 2 ? '¥' + orderInfo.payAmount + '元' :
-                                        productInfo.paymentType == 3 ? '¥' + orderInfo.payAmount + '元' + '+' +
-                                            orderInfo.pointsUsed + '积分' : null }}</view>
-
-                            </view>
-                        </view>
-                        <view class="productPrice1">
-                            <view class="text">商品金额</view>
-                            <view class="price">{{ productInfo.paymentType == 1 ? orderInfo.pointsUsed + '积分' :
-                                productInfo.paymentType == 2 ? '¥' + orderInfo.payAmount + '元' :
-                                    productInfo.paymentType == 3 ? '¥' + orderInfo.payAmount + '元' + '+' +
-                                        orderInfo.pointsUsed + '积分' : null }}</view>
-                        </view>
-                        <view class="shippingFee">
-                            <view class="text">运费</view>
-                            <view class="text">¥{{ orderInfo.freightAmount }}</view>
-                        </view>
-                        <view style="height: 2rpx;background-color: #f0f0f0;margin-top: 20rpx;"> </view>
-                        <view class="total">
-                            <text class="text">合计:</text>
-                            <text class="price">¥ {{
-                                (orderInfo.payAmount + (orderInfo.freightAmount > 0 ? orderInfo.freightAmount : 0))
-                                }}</text>
-                        </view>
-                    </view>
-                    <view class="weiChect" v-if="productInfo.paymentType !== 1 || orderInfo.freightAmount>0">
-                        <view style="display: flex;">
-                            <image v-if="orderInfo.payType == '1'" style="width: 40rpx;height: 40rpx;"
-                                src="@/static/points/weiXin.png" mode="">
-                            </image>
-                            <image v-if="orderInfo.payType == '2'" style="width: 40rpx;height: 40rpx;"
-                                src="@/static/points/yue.png" mode="">
-                            </image>
-                            <view class="text" style="color: #333;margin-left: 16rpx;">{{ orderInfo.payType == '1' ?
-                                '微信支付' :
-                                '余额支付' }}
-                            </view>
-
-                        </view>
-                        <view>
-                            <u-radio-group v-model="orderInfo.payType">
-                                <u-radio activeColor="#03C1B8 " :name=orderInfo.payType style="margin: 0;"></u-radio>
-                            </u-radio-group>
-                        </view>
-                    </view>
-                    <view class="orderInfo">
-                        <view class="item">
-                            <view class="text">订单编号</view>
-                            <view class="text1">{{ orderInfo.orderNo }}</view>
-                        </view>
-                        <view class="item">
-                            <view class="text">下单时间</view>
-                            <view class="text1">{{ orderInfo.createTime }}</view>
-                        </view>
-                        <view class="item">
-                            <view class="text">支付方式</view>
-                            <view class="text1">{{ orderInfo.payType == 1 ? '微信' : '余额' }}</view>
-                        </view>
-                        <view class="item">
-                            <view class="text">订单备注</view>
-                            <view class="text1">{{ orderInfo.buyerRemark ? orderInfo.buyerRemark : '无' }}</view>
-                        </view>
-
-                    </view>
-
-
-                </view>
-            </view>
-            <view class="buttonClass">
-
-                <u-button v-if="orderInfo.orderStatus == 0" :customStyle="{
-                    color: '#999',
-                    background: '',
-                    height:'52rpx',
-                    lineHeight: '52rpx',
-                    border: '2rpx solid rgba(153, 153, 153, 1)'
-                }" @click="cancelOrderFun">取消支付</u-button>
-
-                <u-button :disabled="goPayBtnDisable" v-if="orderInfo.orderStatus == 0" :customStyle="{
-                    color: '#fff ',
-                    background: '#03C1B8'
-                }" @click="goPay">去付款</u-button>
-                <u-button v-if="orderInfo.orderStatus == 11" :customStyle="{
-                    color: '#fff ',
-                    background: '#03C1B8'
-                }" @click="buyAgain">再次购买</u-button>
-
-
-            </view>
-
-        </scroll-view>
-
-
-        <!-- 取消订单 <u-line></u-line>-->
-        <u-popup :show="cancelOrderShowPopup" mode="bottom" round="10">
-            <view class="popup-con">
-                <!-- 标题 -->
-                <view class="popup-text">
-                    <text class="title">取消订单</text>
-                    <text @click="cancelOrderShowPopup = false">取消</text>
-                </view>
-                <!-- 项目列表 -->
-                <view class="refund-items">
-                    <view class="reason">请选择退款原因</view>
-                    <u-radio-group v-model="selectReason">
-                        <view style="padding: 0 20rpx 24rpx 20rpx;width: 100%;">
-                            <view class="radioBox" v-for="(item,index) in selectReasonList" :key="index" @click="groupChange(item.value)">
-                                <u-radio activeColor="#03C1B8 " :name=item.value></u-radio>{{ item.text }}
-                            </view>
-                        </view>
-                    </u-radio-group>
-
-                </view>
-                <view class="popupButtonClass">
-                    <u-button :customStyle="{
-                        color: selectReason ? '#fff' : '#999',
-                        background: selectReason ? '#03C1B8' : '#eee'
-                    }" @click="cancelOrderSubmit">{{ selectReason ? '提交' : '请先选择原因' }}</u-button>
-
-                </view>
-            </view>
-
-
-
-        </u-popup>
-
-    </view>
-
-</template>
-
-<script>
-import wx from 'weixin-js-sdk';
-import { h5Url } from '@/common/config.js';
-import { getPointOrderInfo, productOrderCancel, productOrderPay } from '@/api/pointOrder'
-import { getInfo, getSignature } from '@/api/index.js';
-
-//paymentType 商品的付款类型 付款类型(1:积分 2:金额 3:积分+金额)
-
-//订单状态(0:待付款 1:待发货 2:待收货 3:已收货 4:售后中  11:取消订单)
-
-//售后状态(0:待审核 1:退款完成 2:等待用户寄回  3:等待商家收货 4:等待商家寄出  5:订单完成 6:取消售后)
-
-export default {
-    components: {},
-    data() {
-        return {
-            selectReason: '',
-            selectReasonValue: '',
-            cancelOrderShowPopup: false,
-            countdownText: '',
-            orderStatus: '', //超时未支付
-            selectReasonList: [
-                { value: '1', text: '买错了/不想要' },
-                { value: '2', text: '商品无货' },
-                { value: '3', text: '商品信息填写错误' },
-                { value: '4', text: '地址信息填写错误' },
-                { value: '5', text: '其他原因' },
-            ],
-            dBalance: 0.00,
-            timer: null, // 定时器
-            orderNo: '',
-            orderInfo: null,
-            productInfo: null,
-            wxconfig: {},
-            goPayBtnDisable: false
-        }
-    },
-    onLoad(data) {
-        if (data.orderNo) {
-            this.orderNo = data.orderNo
-        }
-    },
-    onShow() {
-        this.getOrderInfo();
-    },
-    onPageScroll() {
-    },
-    async mounted() {
-
-    },
-
-    methods: {
-        //规则组装
-        skuSpecFun(skuSpec) {
-            if (!skuSpec) return ''
-            return JSON.parse(skuSpec).map(e => e.specValue).join(',')
-
-        },
-        //获取订单详情
-        async getOrderInfo() {
-            const res = await getPointOrderInfo({
-                orderNo: this.orderNo,
-                //openId: uni.getStorageSync('wx_copenid')
-            })
-            this.orderInfo = res.data.data.orderInfo
-            this.productInfo = res.data.data.productInfo
-            //this.orderInfo.remainSeconds = 30
-            if (this.orderInfo.remainSeconds > 0 && this.orderInfo.orderStatus == 0) {
-                this.orderCountdownFun(this.orderInfo.remainSeconds)
-                this.orderStatus = '剩余时间'
-                uni.setNavigationBarTitle({
-                    title: '待支付'
-                });
-            } else if (this.orderInfo.remainSeconds < 0 && this.orderInfo.orderStatus == 0) {
-                this.orderStatus = '超时未支付'
-                uni.setNavigationBarTitle({
-                    title: '订单取消'
-                });
-            } else if (this.orderInfo.orderStatus == 11) {
-                this.orderStatus = '您已取消支付'
-                uni.setNavigationBarTitle({
-                    title: '订单取消'
-                });
-            }
-
-        },
-        //订单倒计时
-        orderCountdownFun(remain) {
-            this.timer = setInterval(() => {
-                remain--;
-                this.countdownText = this.formatTime(remain);
-                if (remain <= 0) {
-                    clearInterval(this.timer);
-                    this.getOrderInfo()
-                    this.cancelOrderShowPopup = false
-                }
-            }, 1000);
-        },
-        // 时间格式化:秒 → mm:ss(00:00)
-        formatTime(seconds) {
-            if (seconds <= 0) return '00:00';
-            const m = Math.floor(seconds / 60).toString().padStart(2, '0');
-            const s = (seconds % 60).toString().padStart(2, '0');
-            return `${m}:${s}`;
-        },
-
-        //去付款
-        goPay() {
-            this.goPayBtnDisable = true
-            if (this.productInfo.paymentType == 1 && this.orderInfo.freightAmount==0) {//只有积分兑换
-                this.productOrderCreateFun()
-                return
-            }
-            if (this.orderInfo.payType == 1) {
-                //微信支付
-                this.weixinPay()
-            } else if (this.orderInfo.payType == 2) {
-                //余额支付
-                this.nowYuyue()
-            }
-
-        },
-        //支付api
-        async productOrderPayFun() {
-            let res1 = await productOrderPay({
-                orderNo: this.orderInfo.orderNo, //订单编号
-                payType: this.productInfo.paymentType == 1 ? 3 : this.orderInfo.payType, //支付方式:1微信支付 2:余额支付
-                totalPrice: this.orderInfo.totalAmount //订单总金额,单位:元
-            })
-            if (res1.data.code == 200) {
-                return res1.data
-            } else {
-                this.goPayBtnDisable = false
-                uni.showToast({
-                    title: res1.data.msg,
-                    icon: 'none'
-                })
-            }
-
-        },
-        //微信支付
-        async weixinPay() {
-            let data = await this.productOrderPayFun()
-            if (!data) return
-            let payConfig = JSON.parse(data.data)
-            getSignature(h5Url).then(res => {
-                this.wxconfig = res.data
-                wx.config({
-                    beta: true,
-                    debug: false,
-                    appId: this.wxconfig.appId, // 公众号ID
-                    // appId: uni.getAppBaseInfo().host.appId, // 公众号ID
-                    timestamp: this.wxconfig.timestamp, // 时间戳,自1970年以来的秒数
-                    nonceStr: this.wxconfig.nonceStr, // 随机串
-                    signature: this.wxconfig.signature, // 微信签名方式
-                    jsApiList: ['getBrandWCPayRequest']
-                });
-                var vm = this
-                wx.invoke('getBrandWCPayRequest',
-                    // 下面参数内容都是后台返回的
-                    {
-                        'appId': payConfig.appId, // 公众号名称,由商户传入
-                        'timeStamp': payConfig.timeStamp, // 时间戳
-                        'nonceStr': payConfig.nonceStr, // 随机串
-                        'package': payConfig.package, // 预支付id
-                        'signType': payConfig.signType, // 微信签名方式
-                        'paySign': payConfig.paySign, // 微信签名
-                    },
-                    function (res) {
-                        // 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
-                        vm.goPayBtnDisable = false
-                        // JSON.stringify(res);
-                        if (res.err_msg == "get_brand_wcpay_request:ok") {
-
-                            uni.navigateTo({
-                                url: '/points/productDetails/paymentSuccessful?orderNo=' + vm.orderNo
-                            });
-                        } else if (res.err_msg == "get_brand_wcpay_request:cancel") {
-                            uni.showToast({
-                                title: '已取消支付',
-                                icon: 'none'
-                            })
-
-                        } else {
-                            alert('付款失败');
-                        }
-                    }
-                )
-
-            }).catch(err => {
-                this.goPayBtnDisable = false
-                uni.showToast({
-                    title: err,
-                    icon: 'none'
-                })
-            })
-        },
-        //账号余额支付
-        async nowYuyue() {
-            if (parseFloat(this.dBalance) < parseFloat(this.orderInfo.totalAmount)) {
-                uni.showModal({
-                    title: '账户余额不足',
-                    content: '请充值',
-                    success: function (res) {
-                        if (res.confirm) {
-                            uni.navigateTo({
-                                url: '../../pages/my/pay?name=充值'
-                            })
-                        } else if (res.cancel) { }
-                    }
-                });
-                this.goPayBtnDisable = false
-            } else {
-                let data = await this.productOrderPayFun()
-                if (!data) return
-                this.goPayBtnDisable = false
-                uni.navigateTo({
-                    url: '/points/productDetails/paymentSuccessful?orderNo=' + this.orderNo
-                });
-
-            }
-        },
-        //查询账户余额
-        getinfo() {
-            getInfo().then(res => {
-                if (res.data.code == 200) {
-                    this.dBalance = res.data.data.dBalance.toFixed(2)
-                }
-            })
-        },
-        //取消订单提交按钮
-        cancelOrderSubmit() {
-            let params = {
-                //openId: uni.getStorageSync('wx_copenid'),
-                orderNo: this.orderNo,
-                cancelReason: this.selectReasonValue,
-            }
-            productOrderCancel(params).then(res => {
-                if (res.data.code == 200) {
-                    clearInterval(this.timer);
-                    this.cancelOrderShowPopup = false
-                    this.getOrderInfo();
-                } else {
-                    //alert(res.data.msg)
-                    uni.showToast({
-                        title: res.data.msg,
-                        icon: 'none'
-                    })
-                }
-
-            })
-        },
-        //点击单选按钮
-        groupChange(val) {
-            this.selectReason = val
-            this.selectReasonList.forEach(item => {
-                if (item.value == val) {
-                    this.selectReasonValue = item.text
-                }
-
-            });
-        },
-        //关闭取消订单选择页
-        closeCancelOrderFun() {
-            this.cancelOrderShowPopup = false
-        },
-        //取消订单按钮
-        cancelOrderFun() {
-            this.cancelOrderShowPopup = true
-        },
-        //再次购买
-        buyAgain() {
-            uni.navigateTo({
-                url: `/points/productDetails/index?id=${this.productInfo.productId}`
-            });
-        }
-
-    }
-}
-</script>
-
-<style lang="scss" scoped>
-.centerTitle {
-    font-family: PingFang SC, PingFang SC;
-    font-weight: 500;
-    font-size: 34rpx;
-    color: #060606;
-    text-align: center;
-    font-style: normal;
-    text-transform: none;
-}
-
-
-
-.buttonClass {
-    display: flex;
-    align-items: center;
-    justify-content: flex-end;
-    font-family: PingFang SC, PingFang SC;
-    margin-top: 20rpx;
-
-    button {
-        width: 168rpx;
-        display: flex;
-        align-items: center;
-        height: 56rpx;
-        line-height: 56rpx;
-        border-radius: 98rpx 98rpx 98rpx 98rpx;
-        font-size: 26rpx;
-        //padding: 5rpx 0 5rpx 0;
-        margin: 0 32rpx 0 0;
-    }
-}
-
-.contentBox {
-    background-image: url("@/static/points/orderBg.png");
-    background-size: 100%;
-    background-repeat: no-repeat;
-    background-color: #F5F8F8;
-    padding-top: 54rpx;
-
-    .remainingTime {
-        font-weight: 500;
-        font-size: 32rpx;
-        color: #FFFFFF;
-        line-height: 40rpx;
-        text-align: left;
-        font-style: normal;
-        text-transform: none;
-        text-align: center;
-    }
-
-}
-
-.content {
-    padding: 24rpx 32rpx 30rpx 32rpx;
-    font-family: PingFang SC, PingFang SC;
-    border-radius: 20rpx 20rpx 0 0;
-
-    .addressBox {
-        margin-top: 30rpx;
-        padding: 24rpx 32rpx;
-        display: flex;
-        align-items: flex-start;
-        background: #FFFFFF;
-        border-radius: 20rpx 20rpx 20rpx 20rpx;
-
-        .name {
-            font-weight: 500;
-            font-size: 32rpx;
-            color: #333333;
-            line-height: 40rpx;
-            text-align: left;
-            font-style: normal;
-            text-transform: none;
-
-        }
-
-        .address {
-            margin-top: 8rpx;
-            font-weight: 500;
-            font-size: 28rpx;
-            color: #666666;
-            line-height: 40rpx;
-            text-align: left;
-            font-style: normal;
-            text-transform: none;
-        }
-
-    }
-
-    .productPrice {
-        background-color: #fff;
-        margin-top: 24rpx;
-        padding: 24rpx;
-        border-radius: 20rpx 20rpx 20rpx 20rpx;
-
-        .productName {
-            font-weight: bold;
-            font-size: 28rpx;
-            color: #333333;
-            text-align: left;
-            font-style: normal;
-            text-transform: none;
-        }
-
-        .price {
-            font-weight: bold;
-            font-size: 26rpx;
-            color: #333333;
-            text-align: left;
-            font-style: normal;
-            text-transform: none;
-        }
-
-        .spec {
-            font-weight: 500;
-            font-size: 26rpx;
-            color: #999999;
-            text-align: left;
-            font-style: normal;
-            text-transform: none;
-
-        }
-
-        .shippingFee {
-            margin-top: 22rpx;
-            display: flex;
-            justify-content: space-between;
-
-            .text {
-                font-weight: 500;
-                font-size: 26rpx;
-                color: #666666;
-                text-align: left;
-                font-style: normal;
-                text-transform: none;
-
-            }
-
-            .price {
-                font-weight: 500;
-                font-size: 28rpx;
-                color: #03C1B8;
-                text-align: left;
-                font-style: normal;
-                text-transform: none;
-            }
-        }
-
-        .productPrice1 {
-            margin-top: 16rpx;
-            display: flex;
-            justify-content: space-between;
-
-            .text {
-                font-weight: 500;
-                font-size: 26rpx;
-                color: #666666;
-                text-align: left;
-                font-style: normal;
-                text-transform: none;
-
-            }
-
-            .price {
-                font-weight: 500;
-                font-size: 28rpx;
-                color: #03C1B8;
-                text-align: left;
-                font-style: normal;
-                text-transform: none;
-            }
-        }
-
-        .total {
-            text-align: right;
-
-            .text {
-                font-weight: 400;
-                font-size: 28rpx;
-                color: #2F3437;
-                text-align: left;
-                font-style: normal;
-                text-transform: none;
-
-            }
-
-            .price {
-                font-weight: 800;
-                font-size: 28rpx;
-                color: #03C1B8;
-                text-align: left;
-                font-style: normal;
-                text-transform: none;
-            }
-
-        }
-    }
-
-    .weiChect {
-        height: 94rpx;
-        background: #FFFFFF;
-        border-radius: 20rpx 20rpx 20rpx 20rpx;
-        display: flex;
-        justify-content: space-between;
-        align-items: center;
-        font-weight: 500;
-        font-size: 28rpx;
-        color: #333333;
-        line-height: 40rpx;
-        text-align: left;
-        font-style: normal;
-        text-transform: none;
-        margin: 24rpx 0;
-        padding: 0 24rpx;
-
-    }
-
-    .orderInfo {
-        height: 268rpx;
-        background: #FFFFFF;
-        border-radius: 16rpx 16rpx 16rpx 16rpx;
-        padding: 26rpx 24rpx 0 24rpx;
-
-        .item {
-            display: flex;
-            justify-content: space-between;
-            margin-bottom: 24rpx;
-        }
-
-        .text {
-            font-weight: 400;
-            font-size: 26rpx;
-            color: #666666;
-            text-align: left;
-            font-style: normal;
-            text-transform: none;
-
-        }
-
-        .text1 {
-            font-weight: 500;
-            font-size: 28rpx;
-            color: #2F3437;
-            text-align: left;
-            font-style: normal;
-            text-transform: none;
-
-        }
-
-    }
-
-
-}
-
-.popup-con {
-    font-size: 27rpx;
-    color: #666666;
-    background: #F5F8F8;
-    padding: 40rpx;
-    border-radius: 20rpx 20rpx 0 0;
-
-    .popup-text {
-        font-weight: bold;
-        font-size: 40rpx;
-        color: #333333;
-        text-align: center;
-        font-style: normal;
-        text-transform: none;
-        display: flex;
-        justify-content: space-between;
-        position: relative;
-
-        .title {
-            padding-bottom: 10rpx;
-            background-image: url("@/static/points/cancelOrderBg.png");
-            background-size: 100%;
-            background-repeat: no-repeat;
-            background-position: center bottom;
-            /* 水平居中、垂直靠下 */
-        }
-
-        text:last-of-type {
-            font-weight: 400;
-            font-size: 28rpx;
-            color: #999999;
-            text-align: center;
-            font-style: normal;
-            text-transform: none;
-            // width: 38rpx;
-            // height: 38rpx;
-            // text-align: center;
-            // line-height: 38rpx;
-            // color: #6D728B;
-            // background: #DEDEDE;
-            // border-radius: 50%;
-            // position: absolute;
-            // right: 24rpx;
-            // font-size: 28rpx;
-        }
-    }
-
-    .refund-items {
-        margin-top: 32rpx;
-        font-size: 26rpx;
-        color: #333333;
-        padding-bottom: 70rpx;
-        background: #FFFFFF;
-        border-radius: 20rpx 20rpx 20rpx 20rpx;
-
-        height: 400rpx;
-        background: #FFFFFF;
-        border-radius: 20rpx 20rpx 20rpx 20rpx;
-
-        .reason {
-            background: #E8FFFD;
-            border-radius: 20rpx 20rpx 0rpx 0rpx;
-            font-weight: bold;
-            font-size: 28rpx;
-            color: #333333;
-            text-align: left;
-            font-style: normal;
-            text-transform: none;
-            padding: 16rpx 20rpx;
-        }
-
-        .radioBox {
-            display: flex;
-            width: 100%;
-            margin-top: 24rpx;
-        }
-
-
-    }
-
-    .popupButtonClass {
-        margin-top: 32rpx;
-        height: 84rpx;
-        border-radius: 98rpx 98rpx 98rpx 98rpx;
-
-        button {
-            align-items: center;
-            border-radius: 98rpx 98rpx 98rpx 98rpx;
-            font-size: 32rpx;
-            font-weight: 500;
-        }
-    }
-}
-</style>