贾宇博 1 miesiąc temu
rodzic
commit
d2afca5549

+ 11 - 0
api/userList.js

@@ -0,0 +1,11 @@
+import request from '../utils/request'
+
+//用户订单列表
+export function userMainOrderList(data) {
+    return request({
+        url: `/core/users/orders/mainOrderList`,
+        method: 'get',
+        params: data
+    })
+}
+

+ 1 - 1
config.js

@@ -3,7 +3,7 @@ const config = {
 	// baseUrl: 'https://vue.ruoyi.vip/prod-api',
 	//cloud后台网关地址
 	// baseUrl: 'http://192.168.10.3:8080',
-	baseUrl: 'http://192.168.100.85:9527',
+	baseUrl: 'http://192.168.100.89:9527',
 	// 应用信息
 	appInfo: {
 		// 应用名称

+ 11 - 0
pages.json

@@ -139,6 +139,17 @@
 				}
 			]
 		},
+		{
+			"root": "pages_orderuser/pages",
+			"pages": [
+				{
+					"path": "order/orderdetails",
+					"style": {
+						"navigationBarTitleText": "消息"
+					}
+				}
+			]
+		},
 		{
 			"root": "pages_mine/pages",
 			"pages": [{

+ 175 - 156
pages/Client/new_file.vue

@@ -3,7 +3,7 @@
 		<!-- 服务选择 -->
 		<template v-if="userType == 1">
 			<view class="Wrapper-grid">
-				<up-grid :border="false" col="3" @click="handleGridClick">
+				<up-grid :border="false" col="4" @click="handleGridClick">
 					<up-grid-item v-for="(item, index) in serviceList1" :key="index"
 						:custom-style="{ padding: '20rpx' }">
 						<!-- 图标 -->
@@ -17,7 +17,7 @@
 				<up-toast ref="uToastRef" />
 			</view>
 		</template>
-	
+
 		<template v-else-if="userType == 2">
 			<view class="Wrapper-grid">
 				<up-grid :border="false" col="4" @click="handleGridClick">
@@ -36,8 +36,8 @@
 		</template>
 
 		<Calendar ref="calendar" class="uni-calendar--hook" :clear-date="false" :date="info.date" :insert="info.insert"
-			:lunar="info.lunar" :range="info.range" @change="change" :clearDate="true"
-			@confirm="confirm" :selected="selected" @delete="onDelete"/>
+			:lunar="info.lunar" :range="info.range" @change="change" :clearDate="true" @confirm="confirm"
+			:selected="selected" @delete="onDelete" />
 
 
 	</view>
@@ -54,7 +54,10 @@
 	// import {
 	// 	typeOptionSelect
 	// } from "@/api/volunteerDetailsApi/details.js"
-	import { workDate,getDataTime } from '@/api/volunteer.js'
+	import {
+		workDate,
+		getDataTime
+	} from '@/api/volunteer.js'
 	import Calendar from '../../components/uni-calendar/components/uni-calendar/uni-calendar.vue'
 
 
@@ -74,191 +77,208 @@
 
 
 
-	 // 普通用户
-	 const serviceList1 = ref([
-		 {
-	 		icon: '/static/img/统一知识平台-营运@1x.png',
-	 		name: '家庭辅导'
-	 	},
-	 	{
-	 		icon: '/static/img/编组.png',
-	 		name: '陪伴陪聊'
-	 	},
-	 	{
-	 		icon: '/static/img/清空.png',
-	 		name: '家庭助理'
-	 	},
-	 	{
-	 		icon: '/static/img/构建.png',
-	 		name: '健康管理'
-	 	},
-	 	{
-	 		icon: '/static/img/报事报修@6x.png',
-	 		name: '家庭清洁'
-	 	},
-	 	{
-	 		icon: '/static/img/报事报修@6x.png',
-	 		name: '家务帮手'
-	 	},
-	 ]);
-	 //志愿者
-	 const serviceList2 = ref([{
-	 		icon: '/static/img/统一知识平台-营运@1x.png',
-	 		name: '家庭辅导注册',
-			key:2,
-	 	},
-	 	{
-	 		icon: '/static/img/编组.png',
-	 		name: '陪伴陪聊注册',
+	// 普通用户
+	const serviceList1 = ref([{
+			icon: '/static/img/统一知识平台-营运@1x.png',
+			name: '家庭辅导',
 			key:1,
-	 	},
-	 	{
-	 		icon: '/static/img/清空.png',
-	 		name: '家庭助理注册',
+		},
+		{
+			icon: '/static/img/编组.png',
+			name: '陪伴陪聊',
+			key:2,
+		},
+		{
+			icon: '/static/img/清空.png',
+			name: '家庭助理',
 			key:3,
-	 	},
-	 	{
-	 		icon: '/static/img/构建.png',
-	 		name: '健康管理注册',
-			key:4
-	 	},
-	 	{
-	 		icon: '/static/img/报事报修@6x.png',
-	 		name: '家庭清洁注册',
-			key:5
-	 	},
-	 	{
-	 		icon: '/static/img/报事报修@6x.png',
-	 		name: '家务帮手注册',
-			key:6
-	 	},
-	 	{
-	 		icon: '/static/img/清空.png',
-	 		name: '排班管理',
-			key:7
-	 	},
-	 ]);
-	 
-	
-// 宫格点击事件
-const handleGridClick = async (index) => {
-	console.log('userType', userType);
+		},
+		{
+			icon: '/static/img/构建.png',
+			name: '健康管理',
+			key:4,
+		},
+		{
+			icon: '/static/img/报事报修@6x.png',
+			name: '家庭清洁',
+			key:5,
+		},
+		{
+			icon: '/static/img/报事报修@6x.png',
+			name: '家务帮手',
+			key:6,
+		},
+		{
+			icon: '/static/img/报事报修@6x.png',
+			name: '资讯与服务',
+			key:7,
+		},
+	]);
+	//志愿者
+	const serviceList2 = ref([{
+			icon: '/static/img/统一知识平台-营运@1x.png',
+			name: '家庭辅导注册',
+			key: 2,
+		},
+		{
+			icon: '/static/img/编组.png',
+			name: '陪伴陪聊注册',
+			key: 1,
+		},
+		{
+			icon: '/static/img/清空.png',
+			name: '家庭助理注册',
+			key: 3,
+		},
+		{
+			icon: '/static/img/构建.png',
+			name: '健康管理注册',
+			key: 4
+		},
+		{
+			icon: '/static/img/报事报修@6x.png',
+			name: '家庭清洁注册',
+			key: 5
+		},
+		{
+			icon: '/static/img/报事报修@6x.png',
+			name: '家务帮手注册',
+			key: 6
+		},
+		{
+			icon: '/static/img/清空.png',
+			name: '排班管理',
+			key: 7
+		},
+	]);
 
-	if (userType == 1) {
-		// const res = await typeOptionSelect()
-		// console.log((res, '获取健值成功'))
-		uni.navigateTo({
-			url: '/pages_home/pages/client/details'
-		});
-		return
-	}
-	if (uToastRef.value) {
-		const data = serviceList2.value[index]
-		if (data.key !== 7 ) {
-			data.key === 1 || data.key === 2 ? uni.navigateTo({
-				url: `/pages/register/register?data=${encodeURIComponent(JSON.stringify(data))}`
-			}): uni.showToast({
+
+	// 宫格点击事件
+	const handleGridClick = async (index) => {
+		 const service = serviceList1.value[index]; // 获取点击的服务条目
+		// 用户
+		if (userType == 1) {
+			// 只有第一条和第二条可以跳转
+			if (index === 0 || index === 1) {
+				uni.navigateTo({
+					url: `/pages_home/pages/client/details?name=${encodeURIComponent(service.name)}`
+				});
+			} else {
+				// 其他条目提示“敬请期待”
+				uni.showToast({
+					title: '敬请期待',
+					icon: 'none'
+				});
+			}
+		}
+		// 志愿者
+		if (userType == 2 && uToastRef.value) {
+			const data = serviceList2.value[index]
+			if (data.key !== 7) {
+				data.key === 1 || data.key === 2 ? uni.navigateTo({
+					url: `/pages/register/register?data=${encodeURIComponent(JSON.stringify(data))}`
+				}) : uni.showToast({
 					title: '敬请期待',
 					icon: 'none'
 				})
-			return;
+				return;
+			}
+			calendar.value.open();
+		}
+	};
+
+
+	const change = (e) => {
+		console.log('change', e);
+		let dates = [{
+			date: e.fulldate,
+			info: `${e.time.startTime}~${e.time.endTime}`,
+			time: e.time
+		}]
+		if (e.range.before && e.range.after) {
+			dates = e.range.data.map(item => {
+				return {
+					date: item,
+					info: `${e.time.startTime}~${e.time.endTime}`,
+					time: e.time
+				}
+			})
 		}
-		calendar.value.open();
+		selected.value = [...selected.value, ...dates]
 	}
-};
 
+	const onDelete = (e) => {
+		selected.value = selected.value.filter(item => {
+			console.log('item.fulldate !== e.date', item.date, e.fulldate);
 
-const change = (e) => {
-	console.log('change', e);
-	let dates = [{
-		date: e.fulldate,
-		info: `${e.time.startTime}~${e.time.endTime}`,
-		time: e.time
-	}]
-	if (e.range.before && e.range.after) {
-		dates = e.range.data.map(item => {
+			return item.date !== e.fulldate
+		})
+		console.log(e, selected.value);
+	}
+	const confirm = (e) => {
+		const parmas = selected.value.map(item => {
 			return {
-				date: item,
-				info: `${e.time.startTime}~${e.time.endTime}`,
-				time: e.time
+				workDate: item.date,
+				workStartTime: item.time.startTime,
+				workEndTime: item.time.endTime
 			}
 		})
-	}
-	selected.value = [...selected.value, ...dates]
-}
-
-const onDelete = (e) =>{
-	selected.value = selected.value.filter(item => {
-		console.log('item.fulldate !== e.date',item.date , e.fulldate);
-		
-		return item.date !== e.fulldate
-	})
-	console.log(e,selected.value);	
-}
-const confirm = (e) => {
-	const parmas = selected.value.map(item => {
-		return {
-			workDate: item.date,
-			workStartTime: item.time.startTime,
-			workEndTime: item.time.endTime
-		}
-	})
-	console.log('确定', parmas);
-	workDate(parmas).then(res => {
-		if (res.code == 200) {
+		console.log('确定', parmas);
+		workDate(parmas).then(res => {
+			if (res.code == 200) {
+				uni.showToast({
+					title: '修改成功',
+					icon: 'none'
+				})
+				close();
+				return;
+			}
 			uni.showToast({
-				title: '修改成功',
+				title: res.msg,
 				icon: 'none'
 			})
-			close();
-			return;
-		}
-		uni.showToast({
-			title: res.msg,
-			icon: 'none'
 		})
-	})
-};
-const close = () => {
-	calendar.value.close();
-}
+	};
+	const close = () => {
+		calendar.value.close();
+	}
 
-const init = () => {
-	getDataTime().then(res => {
-		console.log('res', res);
-		selected.value = res.data.map(item =>{
-			return {
-				date: item.workDate,
-				info: `${item.workStartTime}~${item.workEndTime}`,
-				time: {
-					startTime: item.workStartTime,
-					endTime: item.workEndTime
+	const init = () => {
+		getDataTime().then(res => {
+			console.log('res', res);
+			selected.value = res.data.map(item => {
+				return {
+					date: item.workDate,
+					info: `${item.workStartTime}~${item.workEndTime}`,
+					time: {
+						startTime: item.workStartTime,
+						endTime: item.workEndTime
+					}
 				}
-			}
-		})
+			})
 
-	})
-}
+		})
+	}
 
 
 
-onMounted(() => {
-	init();
-});
+	onMounted(() => {
+		init();
+	});
 </script>
 
 <style scoped>
 	.Wrapper-grid {
 		margin-top: 170rpx;
 	}
-	
+
 	/* 图标样式 */
 	.service-img {
 		width: 80rpx;
 		height: 80rpx;
 		margin-bottom: 15rpx;
 	}
-	
+
 	/* 文本样式 */
 	.grid-text {
 		font-size: 24rpx;
@@ -266,5 +286,4 @@ onMounted(() => {
 		text-align: center;
 		margin-top: 10rpx;
 	}
-	
 </style>

+ 73 - 180
pages/Volunteerside/Side_index.vue

@@ -1,80 +1,46 @@
 <template>
 	<view v-if="userType == '1'">
-			<up-waterfall v-model="flowList">
-				<template #left :listData="listData">
-					<view class="demo-warter" v-for="(item, index) in listData" :key="index" @click="goToDetail(item)">
-						<up-lazy-load threshold="-450" border-radius="10" :image="item.image"
-							:index="index"></up-lazy-load>
-						<view class="demo-title">
-							{{item.skillDescribe}}
+		<up-waterfall v-model="flowList">
+			<template #left :listData="listData">
+				<view class="demo-warter" v-for="(item, index) in listData" :key="index" @click="goToDetail(item)">
+					<up-lazy-load threshold="-450" border-radius="10" :image="item.image" :index="index"></up-lazy-load>
+					<view class="demo-title">
+						{{item.skillDescribe}}
+					</view>
+					<view class="demo-PriceDome">
+						<view class="demo-price">
+							<image src="../../static/用户.png" class="name-image"></image>
+							{{item.name}}
 						</view>
-						<view class="demo-PriceDome">
-							<view class="demo-price">
-								<image src="../../static/用户.png" class="name-image"></image>
-								{{item.name}}
-							</view>
-							<view class="dome-Like">
-								<text style="font-size: 25rpx; color: red;" >¥</text>
-								<text style="font-size: 35rpx; color: red;">1.4w</text>
-							</view>
+						<view class="dome-Like">
+							<text style="font-size: 25rpx; color: red;">¥</text>
+							<text style="font-size: 35rpx; color: red;">1.4w</text>
 						</view>
-	
 					</view>
-				</template>
-				<template #right :rightList="rightList">
-					<view class="demo-warter" v-for="(item, index) in rightList" :key="index" @click="goToDetail(item)">
-						<up-lazy-load threshold="-450" border-radius="10" :image="item.image"
-							:index="index"></up-lazy-load>
-						<view class="demo-title">
-							{{item.skillDescribe}}
+				</view>
+			</template>
+			<template #right :rightList="rightList">
+				<view class="demo-warter" v-for="(item, index) in rightList" :key="index" @click="goToDetail(item)">
+					<up-lazy-load threshold="-450" border-radius="10" :image="item.image" :index="index"></up-lazy-load>
+					<view class="demo-title">
+						{{item.skillDescribe}}
+					</view>
+					<view class="demo-PriceDome">
+						<view class="demo-price">
+							<image src="../../static/用户.png" class="name-image"></image>
+							{{item.name}}
 						</view>
-						<view class="demo-PriceDome">
-							<view class="demo-price">
-								<image src="../../static/用户.png" class="name-image"></image>
-								{{item.name}}
-							</view>
-							<view class="dome-Like">
-								<text style="font-size: 25rpx; color: red;" >¥</text>
-								<text style="font-size: 35rpx; color: red;">1.4w</text>
-							</view>
+						<view class="dome-Like">
+							<text style="font-size: 25rpx; color: red;">¥</text>
+							<text style="font-size: 35rpx; color: red;">1.4w</text>
 						</view>
 					</view>
-				</template>
-			</up-waterfall>
-			
-			<!-- <up-loadmore bg-color="rgb(240, 240, 240)" :status="loadStatus" @loadmore="addRandomData"></up-loadmore> -->
-		</view>
-	
-	<!-- 志愿者 -->
-		<view class="container" v-else-if="userType == '2'">
-			<view v-for="(item, index) in list" :key="index" class="item">
-	
-				<!-- 左侧:图片 -->
-				<view class="Wrap-img">
-					<image :src="item.image" mode="aspectFit" class="image"></image>
 				</view>
-	
-				<!-- 中间:姓名、分类、技能介绍 -->
-				<view class="middle">
-					<view class="name">姓名:{{ item.name }}</view>
-					<view class="category">类别:{{ item.category }}</view>
-					<view class="title">技能介绍:{{ item.title }}</view>
-				</view>
-	
-				<!-- 右侧:评分 + 按钮 -->
-				<view class="right">
-					<view class="score">评分:{{ item.score }}</view>
-					<up-button type="error" text="购买" size="mini" custom-style="
-			                 width: 120rpx;
-			                 height: 50rpx;
-			                 font-size: 24rpx;
-			                 border-radius: 25rpx;
-			                 margin-left: 40rpx;
-			               "></up-button>
-				</view>
-			</view>
-		</view>
-		
+			</template>
+		</up-waterfall>
+	</view>
+
+
 </template>
 
 
@@ -87,76 +53,77 @@
 	import {
 		onShow
 	} from '@dcloudio/uni-app'
-	import {volunteerinfolist,getDetailsvolunteerId} from "@/api/volunteerDetailsApi/details.js"
+	import {
+		volunteerinfolist,
+		getDetailsvolunteerId
+	} from "@/api/volunteerDetailsApi/details.js"
+
 
-	
 	const flowList = ref([]); //list数据
 	const loadStatus = ref('loadmore');
 	const userType = uni.getStorageSync('userType') //读取本地存储
-	
+
 	// 用户/志愿者 识别标识
 	const userOrWorker = uni.getStorageSync('storage_data').vuex_userOrWorker //读取本地存储
-	
+
 
 	const listData = ref([])
 	const rightList = ref([])
-	
-	
-	const getList = async() =>{
+
+
+	const getList = async () => {
 		const res = await volunteerinfolist()
-		console.log(res,'>>>>>222')
-		
+		console.log(res, '>>>>>222')
+
 		// 处理左右数据展示
 		let leftArr = []
 		let rightArr = []
-		
+
 		console.log(res.data, '>>>res.data');
-		
+
 		(res.data || []).forEach((item, index) => {
-			index%2 != 0 ? leftArr.push(item) : rightArr.push(item)
+			index % 2 != 0 ? leftArr.push(item) : rightArr.push(item)
 		})
-		
+
 		listData.value = leftArr
 		rightList.value = rightArr
 	}
 
-	
-	const goToDetail = async(item) => {
-		console.log("11111")
-		   const volunteerId = item.volunteerId; // 获取具体的 volunteerId
+
+	const goToDetail = async (item) => {
+		const volunteerId = item.volunteerId; // 获取具体的 volunteerId
 		uni.navigateTo({
-			 url: `/pages/goodsDetails/goodsDetails?volunteerId=${volunteerId}`
+			url: `/pages/goodsDetails/goodsDetails?volunteerId=${volunteerId}`
 		});
 	}
-	
 
-	
-	
+
+
+
 	onShow(() => {
 		getList()
 	})
 </script>
 
 <style scoped>
-	
 	.demo-warter {
 		border-radius: 8px;
 		margin: 5px;
 		background-color: #ffffff;
 		padding: 5px;
 	}
-	
+
 	.u-close {
 		position: absolute;
 		top: 32rpx;
 		right: 32rpx;
 	}
-	
+
 	.demo-image {
 		width: 100%;
 		border-radius: 4px;
 	}
-	
+
 	.demo-title {
 		font-size: 30rpx;
 		margin-top: 5px;
@@ -164,115 +131,41 @@
 		margin-left: 15rpx;
 		display: -webkit-box;
 		-webkit-box-orient: vertical;
-		-webkit-line-clamp: 2;
-		/* 限制显示两行 */
+		-webkit-line-clamp: 3;
 		overflow: hidden;
 		text-overflow: ellipsis;
-		/* 超出部分显示省略号 */
 		word-break: break-all;
 	}
-	
-	
-	
+
+
+
 	.demo-img {
 		width: 40rpx;
 		height: 40rpx;
 		border-radius: 50%;
-	
+
 	}
-	
+
 	.demo-PriceDome {
 		display: flex;
 		font-size: 30rpx;
 		color: $up-type-error;
-		/* margin-top: 5px; */
 		margin-top: 20rpx;
 	}
-	.demo-price{
+
+	.demo-price {
 		display: flex;
 	}
-	.name-image{
+
+	.name-image {
 		width: 40rpx;
 		height: 40rpx;
 	}
-	
+
 	.dome-Like {
-		margin-left: 120rpx;
+		margin-left: 140rpx;
 		display: flex;
-		justify-content: center;
+		justify-content: space-between;
 		align-items: center;
 	}
-	
-	/* 志愿者列表 */
-	/* 容器样式 */
-	.container {
-		padding: 20rpx;
-	}
-	
-	/* 每个 item 使用 Flex 布局 */
-	.item {
-		display: flex;
-		align-items: flex-start;
-		margin-bottom: 30rpx;
-		padding: 20rpx;
-		border: 1rpx solid #eee;
-		border-radius: 16rpx;
-	}
-	
-	/* 图片固定宽度 */
-	.image {
-		width: 230rpx;
-		height: 180rpx;
-		border-radius: 8rpx;
-		margin-right: 20rpx;
-	}
-	
-	/* 中间部分:自动填充剩余空间 */
-	.middle {
-		flex: 1;
-		margin-right: 20rpx;
-	}
-	
-	/* 姓名样式 */
-	.name {
-		font-weight: bold;
-		font-size: 32rpx;
-		margin-bottom: 8rpx;
-	}
-	
-	/* 分类样式 */
-	.category {
-		color: #666;
-		font-size: 28rpx;
-		margin-bottom: 8rpx;
-	}
-	
-	.title {
-		font-size: 28rpx;
-		color: #888;
-		line-height: 1.4;
-		display: -webkit-box;
-		-webkit-box-orient: vertical;
-		-webkit-line-clamp: 2;
-		overflow: hidden;
-		text-overflow: ellipsis;
-		word-break: break-all;
-		/* 可选:长单词强制换行 */
-	}
-	
-	/* 右侧:评分和按钮 */
-	.right {
-		display: flex;
-		flex-direction: column;
-		align-items: flex-end;
-		min-width: 160rpx;
-	}
-	
-	/* 评分样式 */
-	.score {
-		color: orange;
-		font-size: 28rpx;
-		margin-bottom: 10rpx;
-		height: 120rpx;
-	}
 </style>

+ 171 - 107
pages/classify.vue

@@ -1,141 +1,205 @@
 <template>
-	<view class="classify-main">
+	<!-- 志愿者 -->
+	<view class="classify-main" v-if="userType == '2'">
 		<up-tabs :list="column" :scrollable="false" @change="onChange" :activeStyle="{
 			color: 'rgba(255, 87, 4, 1)',
 			fontWeight: 'bold',
 			transform: 'scale(1.05)'
-		}" lineColor="rgba(255, 87, 4, 1)" :current="tabKey" >
+		}" lineColor="rgba(255, 87, 4, 1)" :current="tabKey">
 		</up-tabs>
 		<view class="list">
 			<List :data="data" v-if="data.length > 0" />
-
 			<view v-else class="empty-null">
 				<img src="/static/empty/订单为空.png" alt="">
 			</view>
 		</view>
-
+	</view>
+	<!-- 用户 -->
+	<!-- <view class="classify-main" v-if="userType == '1'">
+		<up-tabs :list="column2" :scrollable="false" @change="onChange" :activeStyle="{
+			color: 'rgba(255, 87, 4, 1)',
+			fontWeight: 'bold',
+			transform: 'scale(1.05)'
+		}" lineColor="rgba(255, 87, 4, 1)" :current="tabKey">
+		</up-tabs>
+		<view class="list">
+			<OrderList :dataList="dataList" v-if="dataList.length > 0" />
+			<view v-else class="empty-null">
+				<img src="/static/empty/订单为空.png" alt="">
+			</view>
+		</view>
+	</view> -->
+	<view v-if="userType == '1'">
+		<OrderList :dataList="dataList" v-if="dataList.length > 0"/>
 	</view>
 </template>
 
 <script setup>
-import { ref } from 'vue';
-import List from './order/list/index.vue';
-import { provide } from 'vue';
-import { getVolunteerOrderList } from '@/api/volunteer.js'
-import { onMounted } from 'vue';
-import {useDict} from '@/utils/dict.js';
-import { onLoad, onShow } from '@dcloudio/uni-app';
-
-const { order_status } = useDict('order_status');
-
-provide('order_status', order_status);//订单/服务状态
-
-
-const tab = ref('');
-const tabKey = ref(0);
-
-const data = ref([]);
-
-/**
- * 	0待支付 1已支付 2支付超时或取消 3进行中 4已完成 5申请退款中 6已退款 7部分退款 8 待确认
- */
-const column = [
-	{
-		name: "全部",
-		value: "",
-	},
-	{
-		name: "待服务",
-		value: "1",
-	},
-	{
-		name: "进行中",
-		value: "3",
-	},
-	{
-		name: "已完成",
-		value: "4",
-	},
-	{
-		name: "已取消",
-		value: "2",
-	}
-]
-
-
-async function getList() {
-	try {
-		uni.hideLoading();
-		uni.showLoading({
-			title: '数据加载中...'
-		});
-		const res = await getVolunteerOrderList({ orderStatus: tab.value });
-		data.value = res.data;
-	} catch (error) {
-		console.log('error', error);
-		uni.showToast({
-			title: error.msg,
-			icon: 'error',
-		})
-	} finally {
-		uni.hideLoading();
+	import {
+		ref
+	} from 'vue';
+	import List from './order/list/index.vue';
+	import OrderList from '@/pages_orderuser/pages/order/orderlist.vue';
+	import {
+		provide
+	} from 'vue';
+	import {
+		getVolunteerOrderList
+	} from '@/api/volunteer.js'
+	import {
+		onMounted
+	} from 'vue';
+	import {
+		useDict
+	} from '@/utils/dict.js';
+	import {
+		onLoad,
+		onShow
+	} from '@dcloudio/uni-app';
+
+	const {
+		order_status
+	} = useDict('order_status');
+
+	provide('order_status', order_status); //订单/服务状态
+
+	const userType = uni.getStorageSync('userType') //读取本地存储
+
+	// 用户/志愿者 识别标识
+	const userOrWorker = uni.getStorageSync('storage_data').vuex_userOrWorker //读取本地存储
+
+	const tab = ref('');
+	const tabKey = ref(0);
+
+	const data = ref([]); //志愿者
+	const dataList = ref([]); //用户
+
+	/**
+	 * 	0待支付 1已支付 2支付超时或取消 3进行中 4已完成 5申请退款中 6已退款 7部分退款 8 待确认
+	 */
+	const column = [{
+			name: "全部",
+			value: "",
+		},
+		{
+			name: "待服务",
+			value: "1",
+		},
+		{
+			name: "进行中",
+			value: "3",
+		},
+		{
+			name: "已完成",
+			value: "4",
+		},
+		{
+			name: "已取消",
+			value: "2",
+		}
+	]
+
+	const column2 = [{
+			name: "全部",
+			value: "",
+		},
+		{
+			name: "待支付",
+			value: "1",
+		},
+		{
+			name: "待服务",
+			value: "2",
+		},
+		{
+			name: "进行中",
+			value: "3",
+		},
+		{
+			name: "已完成",
+			value: "4",
+		},
+		{
+			name: "已取消",
+			value: "5",
+		}
+	]
+
+
+	async function getList() {
+		try {
+			uni.hideLoading();
+			uni.showLoading({
+				title: '数据加载中...'
+			});
+			const res = await getVolunteerOrderList({
+				orderStatus: tab.value
+			});
+			data.value = res.data;
+		} catch (error) {
+			console.log('error', error);
+			uni.showToast({
+				title: error.msg,
+				icon: 'error',
+			})
+		} finally {
+			uni.hideLoading();
+		}
 	}
-}
-
-/**
- * 1: 查看
- * 2:沟通
- * 3:上传照片
- */
-function btnClick(row,type) {
-	console.log('btnClick', type, row);
-	if (type === 1) {
+	/**
+	 * 1: 查看
+	 * 2:沟通
+	 * 3:上传照片
+	 */
+	function btnClick(row, type) {
+		console.log('btnClick', type, row);
+		if (type === 1) {
+			uni.navigateTo({
+				url: `/pages/order/order?orderId=${row.secondOrderId}`
+			});
+			return
+		}
 		uni.navigateTo({
-			url: `/pages/order/order?orderId=${row.secondOrderId}`
-		});
-		return
-	}
-	uni.navigateTo({
 			url: `/pages/order/handle?orderId=${row.secondOrderId}`
 		});
 
-}
-provide('onClick', btnClick);
+	}
+	provide('onClick', btnClick);
 
 
-function onChange(tabItem) {
-	tab.value = tabItem.value;
-	getList();
-	console.log('change', tabItem, tab.value);
-}
+	function onChange(tabItem) {
+		tab.value = tabItem.value;
+		getList();
+		console.log('change', tabItem, tab.value);
+	}
 
 
 
-onMounted(getList)
+	onMounted(getList)
 
 
-onShow(() => {
-	const params = getApp().globalData.switchTabParams; 
-	if(!params.tabKey) return;
-	tabKey.value = params.tabKey;
-	console.log(params);  // { id: 123, type: "test" }
-	onChange(column[tabKey.value])
-	// 使用后建议清除参数,避免重复读取 
-	getApp().globalData.switchTabParams  = null;
+	onShow(() => {
+		const params = getApp().globalData.switchTabParams || {};
+		if (!params.tabKey) return;
+		tabKey.value = params.tabKey;
+		console.log(params); // { id: 123, type: "test" }
+		onChange(column[tabKey.value])
+		// 使用后建议清除参数,避免重复读取 
+		getApp().globalData.switchTabParams = null;
 
-})
+	})
 </script>
 
 <style lang="scss" scoped>
-.classify-main {
-	height: 100vh;
-
-	.list {
-		position: fixed;
-		top: 50px;
-		bottom: 0px;
-		left: 0px;
-		right: 0px;
+	.classify-main {
+		height: 100vh;
+
+		.list {
+			position: fixed;
+			top: 50px;
+			bottom: 0px;
+			left: 0px;
+			right: 0px;
+		}
 	}
-}
 </style>

+ 0 - 1
pages/goodsDetails/goodsDetails.vue

@@ -1,7 +1,6 @@
 <template>
 	<view>
 		<view>
-
 			<up-card title="志愿者介绍" :head-style="{ height: '80rpx', padding: '20rpx',}">
 				<template #body>
 					<view class="card-container">

+ 280 - 217
pages/mine.vue

@@ -10,7 +10,7 @@
 					<view class="user-name">战三</view>
 				</view>
 				<up-divider></up-divider>
-				<view class="service-list">
+				<view class="service-list" v-if="userType == '2'">
 					<up-grid :border="false" col="4">
 						<up-grid-item v-for="(listItem, listIndex) in serviceList" :key="listIndex"
 							@click="onClick(listItem)">
@@ -23,9 +23,22 @@
 						</up-grid-item>
 					</up-grid>
 				</view>
+				<view class="service-list" v-if="userType == '1'">
+					<up-grid :border="false" col="4">
+						<up-grid-item v-for="(listItem, listIndex) in serviceList2" :key="listIndex"
+							@click="onClick(listItem)">
+							<view class="grid-box">
+								<!-- <up-badge :isDot="true" type="success" class="item-badge"></up-badge> -->
+								<up-icon :customStyle="{ paddingTop: 20 + 'rpx' }" :name="listItem.iconName"
+									:size="22"></up-icon>
+								<text class="grid-text">{{ listItem.name }}</text>
+							</view>
+						</up-grid-item>
+					</up-grid>
+				</view>
 			</view>
 
-			<view class="mine-card price-box">
+			<view class="mine-card price-box" v-if="userType == '2'">
 				<view class="price-item" v-for="item in priceList" :key="item.key">
 					<view class="price-name flex-center"> {{ item.name }} </view>
 					<view class="price-data flex-center">
@@ -34,7 +47,7 @@
 				</view>
 			</view>
 
-			<view class="mine-card">
+			<view class="mine-card" v-if="userType == '2'">
 				<up-grid :border="false" col="4">
 					<up-grid-item v-for="(listItem, listIndex) in orderList" :key="listIndex">
 						<view class="grid-box">
@@ -45,14 +58,14 @@
 				</up-grid>
 			</view>
 
-			<view class="mine-card rate-box">
+			<view class="mine-card rate-box" v-if="userType == '2'">
 				<view class="rate-left">
 					<label>好评率:</label>
 					<up-rate v-model="rateValue" active-color="rgba(255, 87, 4, 1)" inactive-color="#b2b2b2" gutter="20"
 						readonly></up-rate>
 				</view>
 
-				<view class="rate-rigth">
+				<view class="rate-rigth" v-if="userType == '2'">
 					<label class="rate-count">{{ rateValue }}</label>
 				</view>
@@ -64,256 +77,306 @@
 </template>
 
 <script setup>
-import { ref } from 'vue';
-const serviceList = ref([
-	{
-		name: '待服务',
-		iconName: 'clock',
-		page: '/pages/classify',
-		value:1
-	},
-
-	{
-		name: '进行中',
-		iconName: 'car',
-		page: '/pages/classify',
-		value:2
-	},
-	{
-		name: '已完成',
-		iconName: 'car-fill',
-		page: '/pages/classify',
-		value:3
-	},
-	{
-		name: '差评申述',
-		iconName: 'edit-pen',
-		// page: '/pages/myCenter/bad'
-	},
-	{
-		name: '钱包',
-		iconName: 'rmb-circle',
-		page: '/pages/myCenter/withdrawal'
-	},
-	{
-		name: '帮助与客服',
-		iconName: 'kefu-ermai',
-	},
-]);
-
-const priceList = [
-	{
-		name: '余额',
-		key: 'balance',
-		decimals: 2
-	},
-	{
-		name: '订单总数',
-		key: 'orderCount',
-		decimals: 0
-	}
-]
-const orderList = ref([
-	{
-		name: '预约单',
-		key: 'orderCount'
-	},
-
-	{
-		name: '进行单',
-		key: 'orderCount'
-
-	},
-	{
-		name: '完成单',
-		key: 'orderCount'
-
-	},
-	{
-		name: '取消单',
-		key: 'orderCount'
+	import {
+		ref
+	} from 'vue';
+	const userType = uni.getStorageSync('userType') //读取本地存储
+
+	// 用户/志愿者 识别标识
+	const userOrWorker = uni.getStorageSync('storage_data').vuex_userOrWorker //读取本地存储
+
+
+
+	const serviceList = ref([{
+			name: '待服务',
+			iconName: 'clock',
+			page: '/pages/classify',
+			value: 1
+		},
+
+		{
+			name: '进行中',
+			iconName: 'car',
+			page: '/pages/classify',
+			value: 2
+		},
+		{
+			name: '已完成',
+			iconName: 'car-fill',
+			page: '/pages/classify',
+			value: 3
+		},
+		{
+			name: '差评申述',
+			iconName: 'edit-pen',
+			// page: '/pages/myCenter/bad'
+		},
+		{
+			name: '钱包',
+			iconName: 'rmb-circle',
+			page: '/pages/myCenter/withdrawal'
+		},
+		{
+			name: '帮助与客服',
+			iconName: 'kefu-ermai',
+		},
+	]);
+	
+	const serviceList2 = ref([{
+			name: '待服务',
+			iconName: 'clock',
+			page: '/pages/classify',
+			value: 1
+		},
+
+		{
+			name: '进行中',
+			iconName: 'car',
+			page: '/pages/classify',
+			value: 2
+		},
+		{
+			name: '已完成',
+			iconName: 'car-fill',
+			page: '/pages/classify',
+			value: 3
+		},
+		{
+			name: '评论',
+			iconName: 'edit-pen',
+			// page: '/pages/myCenter/bad'
+		},
+		{
+			name: '钱包',
+			iconName: 'rmb-circle',
+			page: '/pages/myCenter/withdrawal'
+		},
+		{
+			name: '帮助与客服',
+			iconName: 'kefu-ermai',
+		},
+		{
+			name: '浏览记录',
+			iconName: 'eye',
+			page: '/pages/myCenter/withdrawal'
+		},
+		{
+			name: '收藏',
+			iconName: 'star',
+		},
+	]);
+
+	const priceList = [{
+			name: '余额',
+			key: 'balance',
+			decimals: 2
+		},
+		{
+			name: '订单总数',
+			key: 'orderCount',
+			decimals: 0
+		}
+	]
+	const orderList = ref([{
+			name: '预约单',
+			key: 'orderCount'
+		},
+
+		{
+			name: '进行单',
+			key: 'orderCount'
+
+		},
+		{
+			name: '完成单',
+			key: 'orderCount'
+
+		},
+		{
+			name: '取消单',
+			key: 'orderCount'
 
+		}
+	]);
+
+	const avatarSrc = ref('/static/my/客服.png');
+	const data = ref({
+		balance: 0.0,
+		orderCount: 0,
+	});
+	const rateValue = ref(3);
+	const onClick = (record) => {
+		console.log('record', record, record.page);
+		if (record.page && record.value) {
+			const app = getApp();
+			app.globalData.switchTabParams = {
+				tabKey: record.value
+			};
+			// JS跳转 
+			uni.switchTab({
+				url: record.page
+			});
+			return;
+		}
+		if (record.page) {
+			uni.navigateTo({
+				url: record.page
+			});
+		}
 	}
-]);
-
-const avatarSrc = ref('/static/my/客服.png');
-const data = ref({
-	balance: 0.0,
-	orderCount: 0,
-});
-const rateValue = ref(3);
-const onClick = (record) => {
-	console.log('record', record, record.page);
-	if (record.page && record.value) {
-		const app = getApp();
-		app.globalData.switchTabParams  = { tabKey: record.value };
-		// JS跳转 
-		uni.switchTab({
-			url: record.page
-		});
-		return;
-	}
-	if(record.page){
-		uni.navigateTo({
-			url: record.page
-		});
-	}
-}
-
-
 </script>
 
 <style lang="scss" scoped>
-.mine-card {
-	border-radius: 8px;
-	background: rgba(255, 255, 255, 1);
-	padding: 12px;
-	margin-bottom: 12px;
-}
-
-.mine-container {
-	position: fixed;
-	top: 0px;
-	left: 0px;
-	right: 0px;
-	bottom: 0px;
-	background: rgba(245, 245, 245, 1);
-
-	.mine-top-bgc {
-		height: 120px;
-		background: linear-gradient(180deg, rgba(255, 219, 171, 1) 0%, rgba(242, 151, 99, 1) 100%);
-
+	.mine-card {
+		border-radius: 8px;
+		background: rgba(255, 255, 255, 1);
+		padding: 12px;
+		margin-bottom: 12px;
 	}
 
-	.mine-box {
-		position: absolute;
-		top: 40px;
-		left: 12px;
-		right: 12px;
+	.mine-container {
+		position: fixed;
+		top: 0px;
+		left: 0px;
+		right: 0px;
 		bottom: 0px;
-		overflow-y: auto;
+		background: rgba(245, 245, 245, 1);
 
+		.mine-top-bgc {
+			height: 120px;
+			background: linear-gradient(180deg, rgba(255, 219, 171, 1) 0%, rgba(242, 151, 99, 1) 100%);
 
-		.mine-user {
-			border-radius: 8px;
-			background: rgba(255, 255, 255, 1);
-			margin-bottom: 12px;
+		}
 
-			.user-name-box {
-				display: flex;
-				align-items: center;
-				padding: 12px 12px 0;
+		.mine-box {
+			position: absolute;
+			top: 40px;
+			left: 12px;
+			right: 12px;
+			bottom: 0px;
+			overflow-y: auto;
 
-				.user-avatar {}
 
-				.user-name {
-					font-size: 18px;
-					font-weight: 700;
-					line-height: 21.09px;
-					color: rgba(51, 51, 51, 1);
-					margin-left: 12px;
+			.mine-user {
+				border-radius: 8px;
+				background: rgba(255, 255, 255, 1);
+				margin-bottom: 12px;
+
+				.user-name-box {
+					display: flex;
+					align-items: center;
+					padding: 12px 12px 0;
+
+					.user-avatar {}
+
+					.user-name {
+						font-size: 18px;
+						font-weight: 700;
+						line-height: 21.09px;
+						color: rgba(51, 51, 51, 1);
+						margin-left: 12px;
+					}
 				}
 			}
 		}
-	}
-
-	.service-img {
-		width: 60rpx;
-		height: 60rpx;
-		margin-bottom: 10rpx;
-	}
-
-	.service-list {
-		padding-bottom: 12px;
-	}
 
-	.grid-text {
-		font-size: 14px;
-		color: #909399;
-		padding: 10rpx 0 20rpx 0rpx;
-		/* #ifndef APP-PLUS */
-		box-sizing: border-box;
-		/* #endif */
-	}
+		.service-img {
+			width: 60rpx;
+			height: 60rpx;
+			margin-bottom: 10rpx;
+		}
 
-	.grid-box {
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		flex-direction: column;
-		position: relative;
+		.service-list {
+			padding-bottom: 12px;
+		}
 
-		.item-badge {
-			position: absolute;
+		.grid-text {
+			font-size: 14px;
+			color: #909399;
+			padding: 10rpx 0 20rpx 0rpx;
+			/* #ifndef APP-PLUS */
+			box-sizing: border-box;
+			/* #endif */
 		}
-	}
 
-	.price-box {
-		display: flex;
-		align-content: center;
-		justify-content: space-between;
-		// padding: 12px;
-
-		.price-item {
-			width: 50%;
-			padding: 12px;
-
-			.price-name {
-				font-size: 16px;
-				font-weight: 700;
-				line-height: 23.17px;
-				color: rgba(51, 51, 51, 1);
-				margin-bottom: 12px;
-			}
+		.grid-box {
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			flex-direction: column;
+			position: relative;
 
-			.price-data {
-				font-size: 20px;
-				font-weight: 700;
-				line-height: 23.44px;
-				color: rgba(51, 51, 51, 1);
+			.item-badge {
+				position: absolute;
 			}
 		}
 
-		.price-item:first-child {
-			border-right: 1px solid #dcdfe6;
+		.price-box {
+			display: flex;
+			align-content: center;
+			justify-content: space-between;
+			// padding: 12px;
 
-		}
+			.price-item {
+				width: 50%;
+				padding: 12px;
 
-	}
+				.price-name {
+					font-size: 16px;
+					font-weight: 700;
+					line-height: 23.17px;
+					color: rgba(51, 51, 51, 1);
+					margin-bottom: 12px;
+				}
 
+				.price-data {
+					font-size: 20px;
+					font-weight: 700;
+					line-height: 23.44px;
+					color: rgba(51, 51, 51, 1);
+				}
+			}
 
-	.rate-box {
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
+			.price-item:first-child {
+				border-right: 1px solid #dcdfe6;
 
-		.rate-left {
-			font-size: 14px;
-			font-weight: 500;
-			letter-spacing: 0px;
-			line-height: 20.27px;
-			color: rgba(0, 0, 0, 1);
+			}
 
+		}
+
+
+		.rate-box {
 			display: flex;
 			align-items: center;
-			justify-content: left;
+			justify-content: space-between;
 
-			flex: 1;
-		}
+			.rate-left {
+				font-size: 14px;
+				font-weight: 500;
+				letter-spacing: 0px;
+				line-height: 20.27px;
+				color: rgba(0, 0, 0, 1);
 
-		.rate-rigth {
-			font-size: 14px;
-			font-weight: 500;
-			letter-spacing: 0px;
-			line-height: 20.27px;
-			color: rgba(0, 0, 0, 1);
+				display: flex;
+				align-items: center;
+				justify-content: left;
+
+				flex: 1;
+			}
 
-			.rate-count {
-				color: rgba(237, 123, 47, 1);
+			.rate-rigth {
+				font-size: 14px;
+				font-weight: 500;
+				letter-spacing: 0px;
+				line-height: 20.27px;
+				color: rgba(0, 0, 0, 1);
+
+				.rate-count {
+					color: rgba(237, 123, 47, 1);
+				}
 			}
 		}
-	}
 
 
-}
+	}
 </style>

+ 1 - 1
pages/order/list/index.vue

@@ -19,8 +19,8 @@
 					status="nomore"
 				></up-loadmore>
         </up-list>
-      
     </view>
+	
 </template>
 
 <script setup>

+ 0 - 9
pages_classify/pages/test/index.vue

@@ -1,9 +0,0 @@
-<template>
-	<view>99</view>
-</template>
-
-<script>
-</script>
-
-<style>
-</style>

+ 20 - 6
pages_home/pages/client/details.vue

@@ -1,4 +1,6 @@
 <template>
+	{{serviceName }}
+	111
 	<view style="padding-top: 20rpx; width: 100vw; height: 100vh; overflow: hidden">
 		<view style="width: 100%; height: 100%; overflow:scroll">
 			<view class="Wrapper">
@@ -71,8 +73,6 @@
 						</view>
 					</template>
 				</up-waterfall>
-
-				<!-- <up-loadmore bg-color="rgb(240, 240, 240)" :status="loadStatus" @loadmore="addRandomData"></up-loadmore> -->
 			</view>
 
 		</view>
@@ -94,6 +94,9 @@
 		dictListlrRstudy,
 		dictListlrData
 	} from "@/api/volunteerDetailsApi/details.js"
+	import {
+		useRoute
+	} from 'vue-router';
 
 	const value1 = ref(1)
 	const value2 = ref(2)
@@ -107,7 +110,12 @@
 		dictValue: 1
 	});
 
-	
+	// 获取当前路由对象
+	const route = useRoute();
+
+	// 存储服务名称
+	const serviceName = ref('');
+
 	const showDropdown = ref(false)
 
 	function toggleDropdown() {
@@ -154,10 +162,10 @@
 			console.log('获取失败')
 		}
 	}
-	
+
 	const getListData3 = async () => {
 		try {
-	
+
 			const params = {
 				dictType: 'lrr_study',
 			}
@@ -212,10 +220,16 @@
 	}
 
 	onMounted(() => {
+		if (route && route.query && route.query.name) {
+			serviceName.value = decodeURIComponent(route.query.name); // 解码参数
+			 console.log(serviceName.value, '111112333');
+		}
+
 		getListData()
 		getListData2()
 		getListData3()
 		handlTabs(defaultTab.value)
+
 	})
 </script>
 
@@ -342,7 +356,7 @@
 	}
 
 	.dome-Like {
-		margin-left: 120rpx;
+		margin-left: 140rpx;
 		display: flex;
 		justify-content: center;
 		align-items: center;

+ 104 - 0
pages_orderuser/pages/order/orderItem.vue

@@ -0,0 +1,104 @@
+<template>
+	<view>
+		<up-list @scrolltolower="scrolltolower">
+			<up-list-item v-for="(item, index) in dataList" :key="index">
+				<view class="list-item">
+					<!-- 左侧图片 -->
+					<image src="../../static/img/dd.png" mode="aspectFill" class="item-image"></image>
+
+					<!-- 中间信息 -->
+					<view class="item-info">
+						<view class="info-line">姓名:王麻子</view>
+						<view class="info-line">类别:刨土豆</view>
+						<view class="info-line">技能介绍:{{ item.remark }}</view>
+					</view>
+
+					<!-- 右侧信息 -->
+					<view class="item-right">
+						<view class="rating">评分:9.5</view>
+						<up-tag text="标签" plain size="mini" class="tag"></up-tag>
+						<up-button type="primary" text="沟通" size="small" class="action-btn"
+							@click="handlClick"></up-button>
+					</view>
+				</view>
+			</up-list-item>
+		</up-list>
+	</view>
+</template>
+
+<script setup>
+	import {
+		userMainOrderList
+	} from '@/api/userList.js'
+	import {
+		onMounted
+	} from "vue";
+	
+	const props = defineProps({
+		dataList: {
+			typeof: Array,
+			default: () => [],
+		}
+	})
+
+
+	const handlClick = (item) => {
+		// const orderId = item.orderId; // 获取详情id
+		// uni.navigateTo({
+		// 	url: '/pages_orderuser/pages/order/orderdetails'
+		// });
+	}
+</script>
+
+<style scoped>
+	.list-item {
+		display: flex;
+		padding: 24rpx;
+		align-items: flex-start;
+		gap: 24rpx;
+	}
+
+	.item-image {
+		width: 160rpx;
+		height: 180rpx;
+		border-radius: 16rpx;
+		object-fit: cover;
+	}
+
+	.item-info {
+		flex: 1;
+		display: flex;
+		flex-direction: column;
+		gap: 14rpx;
+	}
+
+	.info-line {
+		font-size: 28rpx;
+		color: #333;
+		line-height: 1.6;
+	}
+
+	.item-right {
+		display: flex;
+		flex-direction: column;
+		align-items: flex-end;
+		gap: 16rpx;
+		min-width: 160rpx;
+	}
+
+	.rating {
+		font-size: 28rpx;
+		color: #f39c12;
+		font-weight: bold;
+	}
+
+	.tag {
+		transform: scale(0.9);
+		/* 缩小标签尺寸 */
+	}
+
+	.action-btn {
+		margin-top: 18rpx;
+		width: 100%;
+	}
+</style>

+ 1 - 1
pages/search/index.vue

@@ -1,5 +1,5 @@
 <template>
-	搜索詳情頁
+	<view>详情</view>
 </template>
 
 <script>

+ 119 - 0
pages_orderuser/pages/order/orderlist.vue

@@ -0,0 +1,119 @@
+<template>
+	<!-- 用户 -->
+	<view class="classify-main" v-if="userType == '1'">
+		<up-tabs :list="column2" :scrollable="false" @change="onChange" :activeStyle="{
+			color: 'rgba(255, 87, 4, 1)',
+			fontWeight: 'bold',
+			transform: 'scale(1.05)'
+		}" lineColor="rgba(255, 87, 4, 1)" :current="tabKey">
+		</up-tabs>
+		<view class="list">
+			<OrderList :dataList="dataList" v-if="dataList.length > 0" />
+			<view v-else class="empty-null">
+				<img src="/static/empty/订单为空.png" alt="">
+			</view>
+		</view>
+	</view>
+	
+	
+	
+</template>
+
+<script setup>
+	import {
+		userMainOrderList
+	} from '@/api/userList.js'
+	const column2 = [{
+			name: "全部",
+			value: "",
+		},
+		{
+			name: "待支付",
+			value: "1",
+		},
+		{
+			name: "待服务",
+			value: "2",
+		},
+		{
+			name: "进行中",
+			value: "3",
+		},
+		{
+			name: "已完成",
+			value: "4",
+		},
+		{
+			name: "已取消",
+			value: "5",
+		}
+	]
+	const getList = async() =>{
+		const res = await userMainOrderList({
+		  orderStatus: tab.value
+		});
+	}
+
+	function onChange(tabItem) {
+		tab.value = tabItem.value;
+		getList();
+		console.log('change', tabItem, tab.value);
+	}
+	
+	onMounted(()=>{
+		getList()
+	})
+</script>
+
+<style scoped>
+	.list-item {
+		display: flex;
+		padding: 24rpx;
+		align-items: flex-start;
+		gap: 24rpx;
+	}
+
+	.item-image {
+		width: 160rpx;
+		height: 180rpx;
+		border-radius: 16rpx;
+		object-fit: cover;
+	}
+
+	.item-info {
+		flex: 1;
+		display: flex;
+		flex-direction: column;
+		gap: 14rpx;
+	}
+
+	.info-line {
+		font-size: 28rpx;
+		color: #333;
+		line-height: 1.6;
+	}
+
+	.item-right {
+		display: flex;
+		flex-direction: column;
+		align-items: flex-end;
+		gap: 16rpx;
+		min-width: 160rpx;
+	}
+
+	.rating {
+		font-size: 28rpx;
+		color: #f39c12;
+		font-weight: bold;
+	}
+
+	.tag {
+		transform: scale(0.9);
+		/* 缩小标签尺寸 */
+	}
+
+	.action-btn {
+		margin-top: 18rpx;
+		width: 100%;
+	}
+</style>

BIN
static/img/咨询服务.png