xuexiuyun 2 săptămâni în urmă
părinte
comite
12d3c47103
23 a modificat fișierele cu 925 adăugiri și 312 ștergeri
  1. 177 72
      pages/order/order.uvue
  2. 585 115
      pages/order/orderDetail.uvue
  3. 0 0
      static/icons/customerservice.svg
  4. BIN
      unpackage/cache/.app-android/class/ktClasss.ser
  5. BIN
      unpackage/cache/.app-android/class/uni/UNI9F955ED/BillItem.class
  6. BIN
      unpackage/cache/.app-android/class/uni/UNI9F955ED/BillItemReactiveObject.class
  7. BIN
      unpackage/cache/.app-android/class/uni/UNI9F955ED/CoachInfo.class
  8. BIN
      unpackage/cache/.app-android/class/uni/UNI9F955ED/CoachInfoReactiveObject.class
  9. BIN
      unpackage/cache/.app-android/class/uni/UNI9F955ED/GenApp$Companion.class
  10. BIN
      unpackage/cache/.app-android/class/uni/UNI9F955ED/GenApp.class
  11. BIN
      unpackage/cache/.app-android/class/uni/UNI9F955ED/GenUniApp.class
  12. BIN
      unpackage/cache/.app-android/class/uni/UNI9F955ED/IndexKt.class
  13. BIN
      unpackage/cache/.app-android/class/uni/UNI9F955ED/ToolItem.class
  14. BIN
      unpackage/cache/.app-android/class/uni/UNI9F955ED/ToolItemReactiveObject.class
  15. BIN
      unpackage/cache/.app-android/class/uni/UNI9F955ED/UniAppConfig.class
  16. BIN
      unpackage/cache/.app-android/class/uni/UNI9F955ED/UserInfo.class
  17. BIN
      unpackage/cache/.app-android/class/uni/UNI9F955ED/UserInfoReactiveObject.class
  18. 0 0
      unpackage/cache/.app-android/sourcemap/index.kt.map
  19. 0 96
      unpackage/cache/.app-android/src/.manifest.json
  20. 143 7
      unpackage/cache/.app-android/src/index.kt
  21. 0 0
      unpackage/cache/.app-android/tsc/app-android/.tsbuildInfo
  22. BIN
      unpackage/dist/dev/app-android/index/classes.dex
  23. 20 22
      utils/api/order.uts

+ 177 - 72
pages/order/order.uvue

@@ -2,25 +2,24 @@
 	<view class="page-container">
 
 		<!-- 1. 顶部标签栏 (Scroll View) -->
-		<scroll-view scroll-x class="tab-scroll" show-scrollbar="false" :enable-flex="true">
+		<scroll-view direction="horizontal" class="tab-scroll" show-scrollbar="false" :enable-flex="true">
 			<view class="tab-wrapper">
-				<view v-for="(tab, index) in tabs" :key="index"
-					:class="['tab-item', currentTab === index ? 'active' : '']" @click="currentTab = index">
+				<view v-for="(tab, index) in tabs" :key="tab.value"
+				:class="['tab-item', currentTab === tab.value ? 'active' : '']" @click="handleTabClick(tab.value)">
 					<text>
-						{{ tab }}
+						{{ tab.label }}
 					</text>
 					<!-- 激活下的黄色短线 -->
-					<view v-if="currentTab === index" class="tab-indicator">
+					<view v-if="currentTab === tab.value" class="tab-indicator">
 					</view>
 				</view>
 			</view>
 		</scroll-view>
 
 		<!-- 2. 订单列表 -->
-		<scroll-view style="flex:1">
+		<scroll-view style="flex:1" v-if="orderList.length > 0" direction="vertical" @scrolltolower="loadMore">
 			<view class="order-list">
-				<view v-for="(item, index) in orderList" :key="item.id" class="order-card"
-					@click="orderDetail(item.id as number)">
+				<view v-for="(item, index) in orderList" :key="item.id" class="order-card">
 
 					<!-- Card Header: 时间 & 状态 -->
 					<view class="card-header">
@@ -33,10 +32,10 @@
 					</view>
 
 					<!-- Card Body: 服务信息 (左图右文) -->
-					<view class="service-section">
+					<view class="service-section" @click="orderDetail(item.id as number)">
 						<image
-							:src="(((((item.project as UTSJSONObject).cover_urls ) as UTSArray<UTSJSONObject>)[0]) as UTSJSONObject).medium_url"
-							class=" service-image" mode="aspectFill" />
+						:src="(((((item.project as UTSJSONObject).cover_urls ) as UTSArray<UTSJSONObject>)[0]) as UTSJSONObject).medium_url"
+						class=" service-image" mode="aspectFill" />
 						<view class="service-details">
 							<view class="service-title-row">
 								<text class="service-name">
@@ -83,9 +82,26 @@
 					</view>
 
 					<!-- Card Actions: 按钮组 -->
-					<view class="action-section" v-if="currentTab==0">
+					<view class="action-section" v-if="currentTab==1">
 						<view class="btn btn-nav"
-							@click.stop="onNavigate((item.address as UTSJSONObject)?.address as String) ">
+						@click.stop="onNavigate((item.address as UTSJSONObject)?.address as String) ">
+							<u-icon name="navigation" :size="18" />
+							<text style="font-size:28rpx">
+								地址导航
+							</text>
+						</view>
+						<view style="flex-direction:row">
+							<button class="btn btn-transfer" @click="onTransfer(item.id as number)">
+								我要转单
+							</button>
+							<button class="btn btn-confirm" @click="onConfirm(item.id as number)">
+								确认接单
+							</button>
+						</view>
+					</view>
+					<view class="action-section" v-else="currentTab==2">
+						<view class="btn btn-nav"
+						@click.stop="onNavigate((item.address as UTSJSONObject)?.address as String) ">
 							<u-icon name="navigation" :size="18" />
 							<text style="font-size:28rpx">
 								地址导航
@@ -101,9 +117,33 @@
 						</view>
 					</view>
 				</view>
+
+			</view>
+
+			<!-- 加载状态 -->
+			<view v-if="loading" class="loading">
+				<loading style="border-width: 6rpx; border-color:#FFDA59" />
+			</view>
+			<view v-if="!hasMore && orderList.length > 0" class="no-more">
+				<text style="font-size: 28rpx;
+				color: #999999;
+				text-align: center;">
+					没有更多数据了...
+				</text>
 			</view>
+
+
 		</scroll-view>
-	</view>
+		<!-- 空状态 -->
+		<view v-else class="ss-flex-2" style="align-items: center;margin-top: 200rpx;">
+
+			<image src="/static/other/order-k.png" class="wh">
+			</image>
+			<text style="font-size: 30rpx;color: #999999;letter-spacing: 2rpx;text-align: center;font-weight: 600;">
+				暂无订单</text>
+
+				</view>
+			</view>
 </template>
 
 <script setup lang="ts">
@@ -111,12 +151,29 @@
 	import { getOrderList, transferOrder, acceptOrder } from '@/utils/api/order';
 
 	// --- 数据 ---
-	const tabs = ['新订单',
-		'进行中',
-		'取消/售后',
-		'已完成',
-		'全部'];
-	const currentTab = ref(0);
+	const tabs = ref([
+			{
+				label: '新订单',
+				value: 1
+			},
+			{
+				label: '进行中',
+				value: 2
+			},
+			{
+				label: '取消/售后',
+				value: 5
+			},
+			{
+				label: '已完成',
+				value: 3
+			},
+			{
+				label: '全部',
+				value: 0
+			},
+		])
+	const currentTab = ref(1);
 
 	type OrderTag = {
 		text : string;
@@ -126,6 +183,10 @@
 
 
 	const orderList = ref<UTSJSONObject[]>([]);
+	const pageNo = ref(1);
+	const pageSize = ref(5);
+	const hasMore = ref(true);
+	const loading = ref(false);
 
 	// --- 方法 ---
 
@@ -142,7 +203,12 @@
 		let project_amount = (Number(item?.project_amount) ?? 0) * (item?.num - 0 ?? 1);      // 项目金额
 		const traffic_amount = Number(item?.traffic_amount) ?? 0;      // 路费
 		// 星级系数表(1-5星)
-		const starArr = [0, 0.45, 0.48, 0.5, 0.55, 0.58];
+		const starArr = [0,
+			0.45,
+			0.48,
+			0.5,
+			0.55,
+		0.58];
 
 		let maneyInfo = 0;
 		//是否是vip订单
@@ -179,22 +245,54 @@
 		// 保留两位小数
 		return maneyInfo.toFixed(2);
 	};
-	const httpGetOrderList = async () => {
+
+
+	// 加载订单列表
+	const httpGetOrderList = async (isLoadMore : boolean) => {
+		if (!hasMore.value || loading.value) return;
+
+		loading.value = true;
 		try {
 			const response = await getOrderList({
-				type: currentTab.value,
-				page: 1,
-				per_page: 5
-			}) as UTSJSONObject;
-			uni.hideLoading();
+					type: currentTab.value,
+					page: pageNo.value,
+					per_page: pageSize.value
+				}) as UTSJSONObject;
 			const code = response["code"] as number;
 			if (code !== 200) return;
-			orderList.value = (response.data as UTSJSONObject)["items"] as UTSArray<UTSJSONObject>
+
+			const items = (response.data as UTSJSONObject)["items"] as UTSArray<UTSJSONObject>;
+			if (isLoadMore) {
+				orderList.value.push(...items);
+			} else {
+				orderList.value = items;
+			}
+
+			// 判断是否还有更多数据
+			if (items.length < pageSize.value) {
+				hasMore.value = false;
+			} else {
+				pageNo.value++;
+			}
 		} catch (err : any) {
 			console.error('获取订单列表接口异常', err);
-			uni.hideLoading();
+		} finally {
+			loading.value = false;
 		}
-	}
+	};
+	// 处理tab点击事件
+	const handleTabClick = (index : number) => {
+		currentTab.value = index;
+		// 切换标签时重置分页状态
+		pageNo.value = 1;
+		hasMore.value = true;
+		orderList.value = [];
+		httpGetOrderList(false);
+	};
+	// 滚动到底部加载更多
+	const loadMore = () => {
+		httpGetOrderList(true);
+	};
 
 	// 客户接单接口
 	const onConfirmOrder = async (orderId : number) => {
@@ -202,99 +300,100 @@
 		try {
 
 			const res = await acceptOrder({
-				order_id: orderId
-			}) as UTSJSONObject;
+					order_id: orderId
+				}) as UTSJSONObject;
 			// const code = response["code"] as number
 			uni.hideLoading();
 			if (res?.code === 200) {
 				uni.showToast({ title: '接单成功', icon: 'success' });
 				// 可选: 自动刷新订单列表或做其他操作
-				await httpGetOrderList();
+				await httpGetOrderList(false);
 			} else {
 				uni.showToast({
-					title: (res?.msg) as String ?? '接单失败',
-					icon: 'none'
-				});
+						title: (res?.msg) as String ?? '接单失败',
+						icon: 'none'
+					});
 			}
 		} catch (err) {
 			uni.hideLoading();
 			console.error('接单异常', err);
 			uni.showToast({
-				title: '接单失败,请重试',
-				icon: 'none'
-			});
+					title: '接单失败,请重试',
+					icon: 'none'
+				});
 		}
 	};
 	const onConfirm = (orderId : number) => {
 		uni.showModal({
-			title: '接单确认',
-			content: '确定要接受该订单吗?',
-			success: (res) => { onConfirmOrder(orderId) }
-		});
+				title: '接单确认',
+				content: '确定要接受该订单吗?',
+				success: (res) => { onConfirmOrder(orderId) }
+			});
 	};
 	// 商户转单
 	const httptransferOrder = async (orderId : number,) => {
 		try {
 			const res = await transferOrder({
-				order_id: orderId,
-			}) as UTSJSONObject;
+					order_id: orderId,
+				}) as UTSJSONObject;
 			if (res?.code === 200) {
 				uni.showToast({ title: '转单成功', icon: 'success' });
-				await httpGetOrderList();
+				await httpGetOrderList(false);
 			} else {
 				uni.showToast({
-					title: (res?.msg) as String ?? '转单失败',
-					icon: 'none'
-				});
+						title: (res?.msg) as String ?? '转单失败',
+						icon: 'none'
+					});
 			}
 		} catch (err) {
 			console.error('转单异常', err);
 			uni.showToast({
-				title: '转单失败,请重试',
-				icon: 'none'
-			});
+					title: '转单失败,请重试',
+					icon: 'none'
+				});
 		}
 	};
 	const onTransfer = (id : number) => {
 		uni.showModal({
-			title: '转单确认',
-			content: '确定将此订单转给其他技师吗?',
-			success: (res) => {
-				httptransferOrder(id);
-			}
-		});
+				title: '转单确认',
+				content: '确定将此订单转给其他技师吗?',
+				success: (res) => {
+					httptransferOrder(id);
+				}
+			});
 
 	};
 	const orderDetail = (orderId : number) => {
 		uni.navigateTo({
-			url: `/pages/order/orderDetail?orderId=${orderId}`
-		});
+				url: `/pages/order/orderDetail?orderId=${orderId}`
+			});
 	};
 	const onNavigate = (addr : string) => {
 		uni.showToast({ title: '启动导航', icon: 'none' });
 		uni.navigateTo({
-			url: '/pages/map/map'
-		});
+				url: '/pages/map/map'
+			});
 	};
 
 	onLoad(() => {
-		// httpGetOrderList();
-	})
+			// httpGetOrderList();
+		})
 	onReady(() => {
-		httpGetOrderList();
-	})
+			httpGetOrderList(false);
+		})
 </script>
 
 <style scoped>
 	.page-container {
 		background-color: #f5f6f8;
-		min-height: 1000rpx;
 		box-sizing: border-box;
+		height: 100%;
 	}
 
 	.tab-scroll {
 		background-color: #ffffff;
 		height: 88rpx;
+		width: 100%;
 	}
 
 	.tab-wrapper {
@@ -302,7 +401,6 @@
 		align-items: center;
 		height: 88rpx;
 		padding: 0 20rpx;
-		white-space: nowrap;
 	}
 
 	.tab-item {
@@ -313,6 +411,7 @@
 		justify-content: center;
 		font-size: 30rpx;
 		color: #666666;
+		flex-shrink: 0
 	}
 
 	.tab-item.active {
@@ -413,6 +512,7 @@
 		border-width: 1rpx;
 		border-style: solid;
 		line-height: 1.2;
+		margin-right: 10rpx;
 	}
 
 	.tag-pill.orange {
@@ -502,16 +602,15 @@
 	.btn {
 		height: 72rpx;
 		border-radius: 36rpx;
-		flex-direction: row;
-		justify-content: center;
-		align-items: center;
 		width: 170rpx;
 		padding: 0 10rpx;
 	}
 
 	.btn-nav {
 		background-color: #FFFBEF;
-		color: #333333;
+		flex-direction: row;
+		justify-content: center;
+		align-items: center;
 	}
 
 	.btn-transfer {
@@ -526,4 +625,10 @@
 		font-size: 28rpx;
 		margin-left: 20rpx
 	}
+
+	.loading {
+		text-align: center;
+		justify-content: center;
+		align-items: center;
+	}
 </style>

+ 585 - 115
pages/order/orderDetail.uvue

@@ -1,66 +1,196 @@
 <template>
 	<!-- #ifdef APP -->
 	<scroll-view class="page-scroll">
-	<!-- #endif -->
+		<!-- #endif -->
 		<view class="page">
 			<view class="header-card">
-				<text class="header-title">{{ detail.stateText }}</text>
-				<text class="header-subtitle">订单编号:{{ detail.orderNo }}</text>
+				<view class="header-status">
+					<u-icon name="customerservice" :size="24" />
+					<text class="header-status-text">
+						{{ detail.stateText }}
+					</text>
+				</view>
 			</view>
 
-			<view class="summary-row">
-				<view class="summary-chip">
-					<text class="summary-chip-label">项目金额</text>
-					<text class="summary-chip-value">{{ detail.projectAmount }}</text>
+			<view class="section-card">
+				<view class="address-section">
+					<text class="address-label">
+						服务地址
+					</text>
+					<text class="address-text">
+						{{ detail.address }}
+					</text>
+					<text class="phone-text">
+						{{ detail.customerPhone }}
+					</text>
 				</view>
-				<view class="summary-chip">
-					<text class="summary-chip-label">实付金额</text>
-					<text class="summary-chip-value">{{ detail.payAmount }}</text>
+				<view class="time-section">
+					<text class="time-label">
+						预约服务时间
+					</text>
+					<text class="time-value">
+						{{ detail.serviceTime }}
+					</text>
 				</view>
 			</view>
 
 			<view class="section-card">
-				<text class="section-title">服务信息</text>
-				<text class="section-line">服务地址:{{ detail.address }}</text>
-				<text class="section-line">客户信息:{{ detail.customer }}</text>
-				<text class="section-line">预约时间:{{ detail.serviceTime }}</text>
+				<view class="project-section">
+					<image class="project-image"
+					:src="detail.projectImage"
+					mode="aspectFill">
+					</image>
+					<view class="project-info">
+						<text class="project-title">
+							{{ detail.projectTitle }}
+						</text>
+						<text class="project-duration">
+							服务时长: {{ detail.durationText }}
+						</text>
+					</view>
+					<text class="project-price">
+						{{ detail.projectAmount }}
+					</text>
+				</view>
 			</view>
 
 			<view class="section-card">
-				<text class="section-title">项目收入</text>
-				<text class="section-line">项目名称:{{ detail.projectTitle }}</text>
-				<text class="section-line">项目时长:{{ detail.durationText }}</text>
-				<text class="section-line">项目金额:{{ detail.projectAmount }}</text>
-				<text class="section-line">配送费用:{{ detail.deliveryFee }}</text>
-				<text class="section-line">实付金额:{{ detail.payAmount }}</text>
+				<text class="section-title">
+					预估收入
+				</text>
+				<view class="income-row">
+					<text class="income-label">
+						项目分成
+					</text>
+					<text class="income-value">
+						{{ detail.projectShare }}
+					</text>
+				</view>
+				<view class="income-row">
+					<text class="income-label">
+						路费
+					</text>
+					<text class="income-value">
+						{{ detail.roadFee }}
+					</text>
+				</view>
+				<view class="income-total">
+					<text class="income-total-label">
+						总收入
+					</text>
+					<text class="income-total-value">
+						{{ detail.totalIncome }}
+					</text>
+				</view>
+			</view>
+
+			<view class="section-card">
+				<view class="order-info-row">
+					<text class="order-info-label">
+						订单编号
+					</text>
+					<view class="order-info-value">
+						<text>
+							{{ detail.orderNo }}
+						</text>
+						<text class="copy-button" @click="copyOrderNo">
+							复制
+						</text>
+					</view>
+				</view>
+				<view class="order-info-row">
+					<text class="order-info-label">
+						下单时间
+					</text>
+					<text class="order-info-value">
+						{{ detail.createdAt }}
+					</text>
+				</view>
+				<view class="order-info-row">
+					<text class="order-info-label">
+						支付金额
+					</text>
+					<text class="order-info-value">
+						{{ detail.payAmount }}
+					</text>
+				</view>
+				<view class="order-info-row">
+					<text class="order-info-label">
+						出行车费
+					</text>
+					<text class="order-info-value">
+						{{ detail.deliveryFee }}
+					</text>
+				</view>
+				<view class="order-info-row">
+					<text class="order-info-label">
+						支付时间
+					</text>
+					<text class="order-info-value">
+						{{ detail.paymentTime }}
+					</text>
+				</view>
+				<view class="order-info-row">
+					<text class="order-info-label">
+						备注
+					</text>
+					<text class="order-info-value">
+						{{ detail.remark }}
+					</text>
+				</view>
 			</view>
 
 			<view class="section-card">
-				<text class="section-title">订单时间</text>
-				<text class="section-line">下单时间:{{ detail.createdAt }}</text>
-				<text class="section-line">支付时间:{{ detail.paymentTime }}</text>
-				<text class="section-line">备注信息:{{ detail.remark }}</text>
+				<view v-for="(item, index) in detail.statusList" :key="index"
+				:class="['progress-item', item.active ? 'active' : '']">
+					<view class="progress-dot">
+					</view>
+					<view v-if="index < detail.statusList.length - 1"
+					:class="['progress-line', item.active ? 'active' : '']">
+					</view>
+					<view class="progress-content">
+						<text :class="['progress-text', item.active ? 'active' : '']">
+							{{ item.status }}
+						</text>
+						<text class="progress-time">
+							{{ item.time }}
+						</text>
+					</view>
+				</view>
 			</view>
 
 			<view class="button-row">
-				<view class="secondary-button" @click="callCustomer">
-					<text class="secondary-button-text">联系客户</text>
+				<view v-if="showSecondaryButton" class="secondary-button"
+				@click="detail.state == 2 ? handleTransfer : callCustomer">
+					<u-icon name="customerservice" :size="24" />
+					<text class="secondary-button-text">
+						{{ secondaryActionText }}
+					</text>
 				</view>
-				<view class="primary-button" @click="handleAction">
-					<text class="primary-button-text">{{ actionText }}</text>
+				<view v-if="showPrimaryButton" :class="['primary-button', { 'full-width': !showSecondaryButton }]"
+				@click="detail.state == 8 || detail.state == 9 ? contactService : handleAction">
+					<text class="primary-button-text">
+						{{ actionText }}
+					</text>
 				</view>
 			</view>
 		</view>
-	<!-- #ifdef APP -->
+		<!-- #ifdef APP -->
 	</scroll-view>
 	<!-- #endif -->
 </template>
 
 <script setup lang="uts">
-	import { computed, reactive, ref } from 'vue'
+	import { computed, reactive } from 'vue'
 	import { getCurrentLocation } from '@/utils/api/location.uts'
 	import { navigateToMobile } from '@/utils/api/tool.uts'
-	import { getOrderDetaile, acceptOrder, departOrder, arriveOrder, leaveOrder } from '@/utils/api/order.uts'
+	import { getOrderDetaile, acceptOrder, departOrder, arriveOrder, leaveOrder, transferOrder } from '@/utils/api/order.uts'
+
+	type StatusItem = {
+		status : string
+		time : string
+		active : boolean
+	}
 
 	type DetailState = {
 		orderId : string
@@ -72,6 +202,7 @@
 		customerPhone : string
 		serviceTime : string
 		projectTitle : string
+		projectImage : string
 		durationText : string
 		projectAmount : string
 		deliveryFee : string
@@ -79,42 +210,80 @@
 		createdAt : string
 		paymentTime : string
 		remark : string
+		projectShare : string
+		roadFee : string
+		totalIncome : string
+		statusList : Array<StatusItem>
 	}
 
 	const detail = reactive<DetailState>({
-		orderId: '',
-		orderNo: '',
-		state: 0,
-		stateText: '订单详情',
-		address: '',
-		customer: '',
-		customerPhone: '',
-		serviceTime: '',
-		projectTitle: '',
-		durationText: '',
-		projectAmount: '0',
-		deliveryFee: '0',
-		payAmount: '0',
-		createdAt: '',
-		paymentTime: '',
-		remark: '',
-	})
+			orderId: '',
+			orderNo: '',
+			state: 0,
+			stateText: '订单详情',
+			address: '',
+			customer: '',
+			customerPhone: '',
+			serviceTime: '',
+			projectTitle: '',
+			projectImage: '',
+			durationText: '',
+			projectAmount: '0',
+			deliveryFee: '0',
+			payAmount: '0',
+			createdAt: '',
+			paymentTime: '',
+			remark: '',
+			projectShare: '0',
+			roadFee: '0',
+			totalIncome: '0',
+			statusList: [
+				{ status: '已接单', time: '', active: false },
+				{ status: '已出发', time: '', active: false },
+				{ status: '到达', time: '', active: false },
+				{ status: '开始服务', time: '', active: false },
+			{ status: '服务完成', time: '', active: false }]
+		})
 
 	const actionText = computed(() : string => {
-		if (detail.state == 2) {
-			return '确认接单'
-		}
-		if (detail.state == 4) {
-			return '确认出发'
-		}
-		if (detail.state == 5) {
-			return '确认到达'
-		}
-		if (detail.state == 10) {
-			return '确认撤离'
-		}
-		return '刷新详情'
-	})
+			if (detail.state == 2) { // 已支付
+				return '确认接单'
+			}
+			if (detail.state == 4) { // 已接单
+				return '已出发'
+			}
+			if (detail.state == 8 || detail.state == 9) { // 已退款或已取消
+				return '联系客服'
+			}
+			if (detail.state == 5) {
+				return '确认到达'
+			}
+			if (detail.state == 10) {
+				return '确认撤离'
+			}
+			return '刷新详情'
+		})
+
+	const secondaryActionText = computed(() : string => {
+			if (detail.state == 2) { // 已支付
+				return '我要转单'
+			}
+			if (detail.state == 4) { // 已接单
+				return '拨打电话'
+			}
+			if (detail.state == 8 || detail.state == 9) { // 已退款或已取消
+				return ''
+			}
+			return '拨打电话'
+		})
+
+	const showSecondaryButton = computed(() : boolean => {
+			return detail.state == 2 || detail.state == 4
+		})
+
+	const showPrimaryButton = computed(() : boolean => {
+			return detail.state == 2 || detail.state == 4 || detail.state == 8 || detail.state == 9
+		})
 
 	const toNumber = (value : any | null) : number => {
 		const numberValue = value as number | null
@@ -130,8 +299,8 @@
 
 	const getLocationPayload = async () : Promise<UTSJSONObject | null> => {
 		const response = await getCurrentLocation()
-		const data = (response['data'] as UTSJSONObject | null)
-		const location = (data?.['location'] as UTSJSONObject | null)
+		const data = response['data'] as UTSJSONObject | null
+		const location = data?.['location'] as UTSJSONObject | null
 		if (location == null) {
 			return null
 		}
@@ -141,6 +310,24 @@
 		} as UTSJSONObject
 	}
 
+	const getActiveStatusIndex = (state : number) : number => {
+		switch (state) {
+			case 2: // 待接单
+			return 0
+			case 4: // 已接单
+			return 1
+			case 5: // 已出发
+			return 2
+			case 6: // 已到达
+			return 3
+			case 7: // 服务中
+			case 8: // 服务完成
+			return 4
+			default:
+			return 0
+		}
+	}
+
 	const applyDetail = (data : UTSJSONObject) : void => {
 		const address = data['address'] as UTSJSONObject | null
 		const project = data['project'] as UTSJSONObject | null
@@ -148,22 +335,64 @@
 		const num = (data['num'] as number | null) ?? 1
 		detail.orderNo = (data['order_no'] as string | null) ?? ''
 		detail.state = state
-		detail.stateText = (data['state_text'] as string | null) ?? '订单详情'
-		detail.address = (address?.['location'] as string | null) ?? ''
+		detail.stateText = (data['state_text'] as string | null) ?? '已支付'
+
+		// 拼接完整地址
+		const province = (address?.['province'] as string | null) ?? ''
+		const city = (address?.['city'] as string | null) ?? ''
+		const district = (address?.['district'] as string | null) ?? ''
+		const detailAddr = (address?.['detail'] as string | null) ?? ''
+		detail.address = `${province}${city}${district}${detailAddr}`
+
 		const customerName = (address?.['name'] as string | null) ?? ''
 		const customerPhone = (address?.['phone'] as string | null) ?? ''
 		detail.customer = `${customerName} ${customerPhone}`
 		detail.customerPhone = customerPhone
-		detail.serviceTime = (data['service_start_time'] as string | null) ?? ((data['service_time'] as string | null) ?? '')
+		detail.serviceTime = (data['service_time'] as string | null) ?? ''
 		detail.projectTitle = (project?.['title'] as string | null) ?? '服务项目'
+
+		// 获取项目图片
+		const coverUrls = project?.['cover_urls'] as Array<UTSJSONObject> | null
+		if (coverUrls != null && coverUrls.length > 0) {
+			detail.projectImage = (coverUrls[0]['medium_url'] as string | null) ?? ''
+		} else {
+			detail.projectImage = ''
+		}
+
 		const duration = (project?.['duration'] as number | null) ?? 0
 		detail.durationText = `${duration * num}分钟`
-		detail.projectAmount = `${toNumber(data['project_amount']).toFixed(2)}元`
-		detail.deliveryFee = `${toNumber(data['delivery_fee']).toFixed(2)}元`
-		detail.payAmount = `${(toNumber(data['pay_amount']) + toNumber(data['balance_amount'])).toFixed(2)}元`
+		detail.projectAmount = `¥${toNumber(data['project_amount']).toFixed(2)}`
+		detail.deliveryFee = `¥${toNumber(data['delivery_fee']).toFixed(2)}`
+		detail.payAmount = `¥${(toNumber(data['pay_amount']) + toNumber(data['balance_amount'])).toFixed(2)}`
 		detail.createdAt = (data['created_at'] as string | null) ?? ''
 		detail.paymentTime = (data['payment_time'] as string | null) ?? ''
 		detail.remark = (data['remark'] as string | null) ?? '无'
+
+		// 预估收入相关字段(根据接口数据计算)
+		const commissionAmount = toNumber(data['commission_amount'])
+		const deliveryFee = toNumber(data['delivery_fee'])
+		detail.projectShare = `¥${commissionAmount.toFixed(2)}`
+		detail.roadFee = `¥${deliveryFee.toFixed(2)}`
+		detail.totalIncome = `¥${(commissionAmount + deliveryFee).toFixed(2)}`
+
+		// 更新状态列表
+		const statusList = data['status_list'] as Array<UTSJSONObject> | null
+		if (statusList != null && statusList.length > 0) {
+			for (let i = 0; i < statusList.length; i++) {
+				const item = statusList[i]
+				if (i < detail.statusList.length) {
+					detail.statusList[i].status = (item['status'] as string | null) ?? detail.statusList[i].status
+					detail.statusList[i].time = (item['time'] as string | null) ?? ''
+					detail.statusList[i].active = (item['active'] as boolean | null) ?? false
+				}
+			}
+		} else {
+			// 根据订单状态设置默认激活状态
+			for (let i = 0; i < detail.statusList.length; i++) {
+				detail.statusList[i].active = i < getActiveStatusIndex(state)
+				detail.statusList[i].time = detail.createdAt
+			}
+		}
 	}
 
 	const loadDetail = async () : Promise<void> => {
@@ -193,6 +422,72 @@
 		navigateToMobile(detail.customerPhone)
 	}
 
+	const copyOrderNo = () : void => {
+		if (detail.orderNo.length == 0) {
+			return
+		}
+		uni.setClipboardData({
+				data: detail.orderNo,
+				success: function () {
+					uni.showToast({ title: '复制成功', icon: 'success' })
+				}
+			})
+	}
+	// 商户转单
+	const httptransferOrder = async (orderId : number,) => {
+		try {
+			const res = await transferOrder({
+					order_id: orderId,
+				}) as UTSJSONObject;
+			if (res?.code === 200) {
+				uni.showToast({ title: '转单成功', icon: 'success' });
+				// await httpGetOrderList();
+			} else {
+				uni.showToast({
+						title: (res?.msg) as String ?? '转单失败',
+						icon: 'none'
+					});
+			}
+		} catch (err) {
+			console.error('转单异常', err);
+			uni.showToast({
+					title: '转单失败,请重试',
+					icon: 'none'
+				});
+		}
+	};
+	const handleTransfer = () : void => {
+		// 转单逻辑
+		uni.showModal({
+				title: '转单确认',
+				content: '确定要将此订单转单吗?',
+				confirmText: '确定',
+				cancelText: '取消',
+				success: function (res) {
+					if (res.confirm) {
+						// 调用转单接口
+						httptransferOrder(toNumber(detail.orderId))
+					}
+				}
+			})
+	}
+
+	const contactService = () : void => {
+		// 联系客服逻辑
+		uni.showModal({
+				title: '联系客服',
+				content: '客服电话:400-123-4567',
+				confirmText: '拨打电话',
+				cancelText: '取消',
+				success: function (res) {
+					if (res.confirm) {
+						// 拨打电话
+						navigateToMobile('4001234567')
+					}
+				}
+			})
+	}
+
 	const handleAction = async () : Promise<void> => {
 		if (detail.orderId.length == 0) {
 			return
@@ -208,7 +503,11 @@
 		}
 		try {
 			if (detail.state == 2) {
-				await acceptOrder({ order_id: detail.orderId, latitude: locationPayload['latitude'], longitude: locationPayload['longitude'] } as UTSJSONObject)
+				await acceptOrder({
+						order_id: detail.orderId,
+						latitude: locationPayload['latitude'],
+						longitude: locationPayload['longitude']
+					} as UTSJSONObject)
 			} else if (detail.state == 4) {
 				await departOrder(detail.orderId, locationPayload)
 			} else if (detail.state == 5) {
@@ -224,9 +523,9 @@
 	}
 
 	onLoad((option : UTSJSONObject) => {
-		detail.orderId = (option['order_id'] as string | null) ?? ''
-		loadDetail()
-	})
+			detail.orderId = (option['orderId'] as string | null) ?? ''
+			loadDetail()
+		})
 </script>
 
 <style>
@@ -236,83 +535,249 @@
 
 	.page {
 		min-height: 1000rpx;
-		padding: 24rpx;
+		padding: 0;
 		box-sizing: border-box;
-		background-color: #f5f2ea;
+		background-color: #f5f5f5;
 		flex-direction: column;
 	}
 
 	.header-card {
-		padding: 28rpx;
-		border-radius: 24rpx;
+		padding: 36rpx;
 		background-color: #ffdb5a;
 		flex-direction: column;
+		align-items: center;
+	}
+
+	.header-status {
+		flex-direction: row;
+		align-items: center;
+	}
+
+	.header-status-icon {
+		font-size: 24rpx;
+		color: #3a3330;
+		margin-right: 8rpx;
 	}
 
-	.header-title {
-		font-size: 38rpx;
+	.header-status-text {
+		font-size: 32rpx;
 		font-weight: 700;
 		color: #3a3330;
 	}
 
-	.header-subtitle {
-		margin-top: 10rpx;
+	.section-card {
+		margin-top: 12rpx;
+		padding: 24rpx;
+		background-color: #ffffff;
+		flex-direction: column;
+	}
+
+	.address-section {
+		margin-bottom: 20rpx;
+	}
+
+	.address-label {
 		font-size: 24rpx;
-		color: #5d5648;
+		color: #ff9500;
+		margin-bottom: 8rpx;
 	}
 
-	.summary-row {
-		margin-top: 18rpx;
+	.address-text {
+		font-size: 26rpx;
+		color: #333333;
+		line-height: 36rpx;
+	}
+
+	.phone-text {
+		font-size: 26rpx;
+		color: #333333;
+		margin-top: 8rpx;
+	}
+
+	.time-section {
 		flex-direction: row;
 		justify-content: space-between;
+		align-items: center;
+		padding-top: 16rpx;
+		border-top: 1rpx solid #f0f0f0;
 	}
 
-	.summary-chip {
-		width: 48%;
-		padding: 20rpx;
-		border-radius: 20rpx;
-		background-color: #ffffff;
-		flex-direction: column;
+	.time-label {
+		font-size: 26rpx;
+		color: #666666;
 	}
 
-	.summary-chip-label {
-		font-size: 22rpx;
-		color: #8b8376;
+	.time-value {
+		font-size: 26rpx;
+		color: #333333;
 	}
 
-	.summary-chip-value {
-		margin-top: 8rpx;
-		font-size: 30rpx;
-		font-weight: 700;
-		color: #3a3330;
+	.project-section {
+		flex-direction: row;
+		align-items: center;
 	}
 
-	.section-card {
-		margin-top: 18rpx;
-		padding: 24rpx;
-		border-radius: 20rpx;
-		background-color: #ffffff;
-		flex-direction: column;
-		border-width: 1px;
-		border-style: solid;
-		border-color: #efe6d9;
+	.project-image {
+		width: 120rpx;
+		height: 120rpx;
+		border-radius: 12rpx;
+		margin-right: 16rpx;
+	}
+
+	.project-info {
+		flex: 1;
+	}
+
+	.project-title {
+		font-size: 28rpx;
+		font-weight: 600;
+		color: #333333;
+		margin-bottom: 8rpx;
+	}
+
+	.project-duration {
+		font-size: 24rpx;
+		color: #999999;
+	}
+
+	.project-price {
+		font-size: 32rpx;
+		font-weight: 700;
+		color: #ff3b30;
 	}
 
 	.section-title {
+		font-size: 28rpx;
+		font-weight: 600;
+		color: #333333;
+		margin-bottom: 16rpx;
+	}
+
+	.income-row {
+		flex-direction: row;
+		justify-content: space-between;
+		margin-bottom: 12rpx;
+	}
+
+	.income-label {
+		font-size: 26rpx;
+		color: #666666;
+	}
+
+	.income-value {
+		font-size: 26rpx;
+		color: #333333;
+	}
+
+	.income-total {
+		flex-direction: row;
+		justify-content: space-between;
+		margin-top: 16rpx;
+		padding-top: 16rpx;
+		border-top: 1rpx solid #f0f0f0;
+	}
+
+	.income-total-label {
+		font-size: 26rpx;
+		font-weight: 600;
+		color: #333333;
+	}
+
+	.income-total-value {
 		font-size: 30rpx;
 		font-weight: 700;
-		color: #3a3330;
+		color: #ff3b30;
 	}
 
-	.section-line {
-		margin-top: 12rpx;
+	.order-info-row {
+		flex-direction: row;
+		justify-content: space-between;
+		margin-bottom: 16rpx;
+	}
+
+	.order-info-label {
 		font-size: 26rpx;
-		line-height: 38rpx;
 		color: #666666;
 	}
 
+	.order-info-value {
+		font-size: 26rpx;
+		color: #333333;
+		flex-direction: row;
+		align-items: center;
+	}
+
+	.copy-button {
+		margin-left: 16rpx;
+		font-size: 24rpx;
+		color: #007aff;
+		padding: 4rpx 12rpx;
+		border: 1rpx solid #e0e0e0;
+		border-radius: 16rpx;
+	}
+
+	.progress-item {
+		flex-direction: row;
+		position: relative;
+		padding-bottom: 32rpx;
+	}
+
+	.progress-item:last-child {
+		padding-bottom: 0;
+	}
+
+	.progress-dot {
+		width: 20rpx;
+		height: 20rpx;
+		border-radius: 50%;
+		background-color: #e0e0e0;
+		margin-right: 16rpx;
+		position: relative;
+		z-index: 2;
+	}
+
+	.progress-line {
+		position: absolute;
+		left: 9rpx;
+		top: 20rpx;
+		width: 2rpx;
+		height: 64rpx;
+		background-color: #e0e0e0;
+		z-index: 1;
+	}
+
+	.progress-item.active .progress-dot {
+		background-color: #ff9500;
+	}
+
+	.progress-item.active .progress-line {
+		background-color: #ff9500;
+	}
+
+	.progress-content {
+		flex: 1;
+	}
+
+	.progress-text {
+		font-size: 26rpx;
+		color: #999999;
+		margin-bottom: 4rpx;
+	}
+
+	.progress-text.active {
+		color: #333333;
+		font-weight: 600;
+	}
+
+	.progress-time {
+		font-size: 24rpx;
+		color: #999999;
+	}
+
 	.button-row {
-		margin-top: 24rpx;
+		margin-top: 32rpx;
+		margin-bottom: 32rpx;
+		padding: 0 24rpx;
 		flex-direction: row;
 		justify-content: space-between;
 	}
@@ -320,13 +785,14 @@
 	.secondary-button {
 		width: 48%;
 		height: 88rpx;
-		border-radius: 22rpx;
+		border-radius: 44rpx;
 		border-width: 2rpx;
 		border-style: solid;
 		border-color: #ffdb5a;
 		flex-direction: row;
 		justify-content: center;
 		align-items: center;
+		background-color: #ffffff;
 	}
 
 	.secondary-button-text {
@@ -337,7 +803,7 @@
 	.primary-button {
 		width: 48%;
 		height: 88rpx;
-		border-radius: 22rpx;
+		border-radius: 44rpx;
 		background-color: #ffdb5a;
 		flex-direction: row;
 		justify-content: center;
@@ -349,4 +815,8 @@
 		font-weight: 700;
 		color: #3a3330;
 	}
+
+	.primary-button.full-width {
+		width: 100%;
+	}
 </style>

Fișier diff suprimat deoarece este prea mare
+ 0 - 0
static/icons/customerservice.svg


BIN
unpackage/cache/.app-android/class/ktClasss.ser


BIN
unpackage/cache/.app-android/class/uni/UNI9F955ED/BillItem.class


BIN
unpackage/cache/.app-android/class/uni/UNI9F955ED/BillItemReactiveObject.class


BIN
unpackage/cache/.app-android/class/uni/UNI9F955ED/CoachInfo.class


BIN
unpackage/cache/.app-android/class/uni/UNI9F955ED/CoachInfoReactiveObject.class


BIN
unpackage/cache/.app-android/class/uni/UNI9F955ED/GenApp$Companion.class


BIN
unpackage/cache/.app-android/class/uni/UNI9F955ED/GenApp.class


BIN
unpackage/cache/.app-android/class/uni/UNI9F955ED/GenUniApp.class


BIN
unpackage/cache/.app-android/class/uni/UNI9F955ED/IndexKt.class


BIN
unpackage/cache/.app-android/class/uni/UNI9F955ED/ToolItem.class


BIN
unpackage/cache/.app-android/class/uni/UNI9F955ED/ToolItemReactiveObject.class


BIN
unpackage/cache/.app-android/class/uni/UNI9F955ED/UniAppConfig.class


BIN
unpackage/cache/.app-android/class/uni/UNI9F955ED/UserInfo.class


BIN
unpackage/cache/.app-android/class/uni/UNI9F955ED/UserInfoReactiveObject.class


Fișier diff suprimat deoarece este prea mare
+ 0 - 0
unpackage/cache/.app-android/sourcemap/index.kt.map


Fișier diff suprimat deoarece este prea mare
+ 0 - 96
unpackage/cache/.app-android/src/.manifest.json


+ 143 - 7
unpackage/cache/.app-android/src/index.kt

@@ -410,14 +410,14 @@ fun submitQualification(data: Any): UTSPromise<Any> {
     return request(RequestOptions__1(url = "" + BASE_URL + "/api/coach/v3/account/qualification", method = "POST", data = data))
 }
 val BASE_URL__1 = "https://dev.xiaodingyun.cn"
-fun getCommentList(params: Any): UTSPromise<Any> {
-    return request(RequestOptions__1(url = "" + BASE_URL__1 + "/api/coach/v3/ordercomments", method = "GET", params = params))
+fun getCommentList(data: UTSJSONObject): UTSPromise<Any> {
+    return request(RequestOptions__1(url = "" + BASE_URL__1 + "/api/coach/v3/ordercomments/" + (data?.get("id") ?: ""), method = "GET"))
 }
-fun getOrderList(params: Any): UTSPromise<Any> {
+fun getOrderList(params: UTSJSONObject): UTSPromise<Any> {
     return request(RequestOptions__1(url = "" + BASE_URL__1 + "/api/coach/v3/orders", method = "GET", params = params))
 }
-fun getOrderDetaile(params: Any): UTSPromise<Any> {
-    return request(RequestOptions__1(url = "" + BASE_URL__1 + "/api/coach/v3/orders", method = "GET", params = params))
+fun getOrderDetaile(data: UTSJSONObject): UTSPromise<Any> {
+    return request(RequestOptions__1(url = "" + BASE_URL__1 + "/api/coach/v3/orders/detail/" + (data?.get("id") ?: ""), method = "GET", params = data))
 }
 fun acceptOrder(data: UTSJSONObject): UTSPromise<Any> {
     return request(RequestOptions__1(url = "" + BASE_URL__1 + "/api/coach/v3/orders/accept/" + data["order_id"], method = "POST", data = data))
@@ -1923,6 +1923,72 @@ val cacheTools: UTSJSONObject = _uO("__\$originalPosition" to UTSSourceMapPositi
     }
 }
 )
+open class StatusItem (
+    @JsonNotNull
+    open var status: String,
+    @JsonNotNull
+    open var time: String,
+    @JsonNotNull
+    open var active: Boolean = false,
+) : UTSReactiveObject(), IUTSSourceMap {
+    override fun `__$getOriginalPosition`(): UTSSourceMapPosition? {
+        return UTSSourceMapPosition("StatusItem", "pages/order/orderDetail.uvue", 189, 7)
+    }
+    override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject {
+        return StatusItemReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip)
+    }
+}
+class StatusItemReactiveObject : StatusItem, IUTSReactive<StatusItem> {
+    override var __v_raw: StatusItem
+    override var __v_isReadonly: Boolean
+    override var __v_isShallow: Boolean
+    override var __v_skip: Boolean
+    constructor(__v_raw: StatusItem, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(status = __v_raw.status, time = __v_raw.time, active = __v_raw.active) {
+        this.__v_raw = __v_raw
+        this.__v_isReadonly = __v_isReadonly
+        this.__v_isShallow = __v_isShallow
+        this.__v_skip = __v_skip
+    }
+    override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): StatusItemReactiveObject {
+        return StatusItemReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip)
+    }
+    override var status: String
+        get() {
+            return _tRG(__v_raw, "status", __v_raw.status, __v_isReadonly, __v_isShallow)
+        }
+        set(value) {
+            if (!__v_canSet("status")) {
+                return
+            }
+            val oldValue = __v_raw.status
+            __v_raw.status = value
+            _tRS(__v_raw, "status", oldValue, value)
+        }
+    override var time: String
+        get() {
+            return _tRG(__v_raw, "time", __v_raw.time, __v_isReadonly, __v_isShallow)
+        }
+        set(value) {
+            if (!__v_canSet("time")) {
+                return
+            }
+            val oldValue = __v_raw.time
+            __v_raw.time = value
+            _tRS(__v_raw, "time", oldValue, value)
+        }
+    override var active: Boolean
+        get() {
+            return _tRG(__v_raw, "active", __v_raw.active, __v_isReadonly, __v_isShallow)
+        }
+        set(value) {
+            if (!__v_canSet("active")) {
+                return
+            }
+            val oldValue = __v_raw.active
+            __v_raw.active = value
+            _tRS(__v_raw, "active", oldValue, value)
+        }
+}
 open class DetailState (
     @JsonNotNull
     open var orderId: String,
@@ -1943,6 +2009,8 @@ open class DetailState (
     @JsonNotNull
     open var projectTitle: String,
     @JsonNotNull
+    open var projectImage: String,
+    @JsonNotNull
     open var durationText: String,
     @JsonNotNull
     open var projectAmount: String,
@@ -1956,9 +2024,17 @@ open class DetailState (
     open var paymentTime: String,
     @JsonNotNull
     open var remark: String,
+    @JsonNotNull
+    open var projectShare: String,
+    @JsonNotNull
+    open var roadFee: String,
+    @JsonNotNull
+    open var totalIncome: String,
+    @JsonNotNull
+    open var statusList: UTSArray<StatusItem>,
 ) : UTSReactiveObject(), IUTSSourceMap {
     override fun `__$getOriginalPosition`(): UTSSourceMapPosition? {
-        return UTSSourceMapPosition("DetailState", "pages/order/orderDetail.uvue", 65, 7)
+        return UTSSourceMapPosition("DetailState", "pages/order/orderDetail.uvue", 195, 7)
     }
     override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject {
         return DetailStateReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip)
@@ -1969,7 +2045,7 @@ class DetailStateReactiveObject : DetailState, IUTSReactive<DetailState> {
     override var __v_isReadonly: Boolean
     override var __v_isShallow: Boolean
     override var __v_skip: Boolean
-    constructor(__v_raw: DetailState, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(orderId = __v_raw.orderId, orderNo = __v_raw.orderNo, state = __v_raw.state, stateText = __v_raw.stateText, address = __v_raw.address, customer = __v_raw.customer, customerPhone = __v_raw.customerPhone, serviceTime = __v_raw.serviceTime, projectTitle = __v_raw.projectTitle, durationText = __v_raw.durationText, projectAmount = __v_raw.projectAmount, deliveryFee = __v_raw.deliveryFee, payAmount = __v_raw.payAmount, createdAt = __v_raw.createdAt, paymentTime = __v_raw.paymentTime, remark = __v_raw.remark) {
+    constructor(__v_raw: DetailState, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(orderId = __v_raw.orderId, orderNo = __v_raw.orderNo, state = __v_raw.state, stateText = __v_raw.stateText, address = __v_raw.address, customer = __v_raw.customer, customerPhone = __v_raw.customerPhone, serviceTime = __v_raw.serviceTime, projectTitle = __v_raw.projectTitle, projectImage = __v_raw.projectImage, durationText = __v_raw.durationText, projectAmount = __v_raw.projectAmount, deliveryFee = __v_raw.deliveryFee, payAmount = __v_raw.payAmount, createdAt = __v_raw.createdAt, paymentTime = __v_raw.paymentTime, remark = __v_raw.remark, projectShare = __v_raw.projectShare, roadFee = __v_raw.roadFee, totalIncome = __v_raw.totalIncome, statusList = __v_raw.statusList) {
         this.__v_raw = __v_raw
         this.__v_isReadonly = __v_isReadonly
         this.__v_isShallow = __v_isShallow
@@ -2086,6 +2162,18 @@ class DetailStateReactiveObject : DetailState, IUTSReactive<DetailState> {
             __v_raw.projectTitle = value
             _tRS(__v_raw, "projectTitle", oldValue, value)
         }
+    override var projectImage: String
+        get() {
+            return _tRG(__v_raw, "projectImage", __v_raw.projectImage, __v_isReadonly, __v_isShallow)
+        }
+        set(value) {
+            if (!__v_canSet("projectImage")) {
+                return
+            }
+            val oldValue = __v_raw.projectImage
+            __v_raw.projectImage = value
+            _tRS(__v_raw, "projectImage", oldValue, value)
+        }
     override var durationText: String
         get() {
             return _tRG(__v_raw, "durationText", __v_raw.durationText, __v_isReadonly, __v_isShallow)
@@ -2170,6 +2258,54 @@ class DetailStateReactiveObject : DetailState, IUTSReactive<DetailState> {
             __v_raw.remark = value
             _tRS(__v_raw, "remark", oldValue, value)
         }
+    override var projectShare: String
+        get() {
+            return _tRG(__v_raw, "projectShare", __v_raw.projectShare, __v_isReadonly, __v_isShallow)
+        }
+        set(value) {
+            if (!__v_canSet("projectShare")) {
+                return
+            }
+            val oldValue = __v_raw.projectShare
+            __v_raw.projectShare = value
+            _tRS(__v_raw, "projectShare", oldValue, value)
+        }
+    override var roadFee: String
+        get() {
+            return _tRG(__v_raw, "roadFee", __v_raw.roadFee, __v_isReadonly, __v_isShallow)
+        }
+        set(value) {
+            if (!__v_canSet("roadFee")) {
+                return
+            }
+            val oldValue = __v_raw.roadFee
+            __v_raw.roadFee = value
+            _tRS(__v_raw, "roadFee", oldValue, value)
+        }
+    override var totalIncome: String
+        get() {
+            return _tRG(__v_raw, "totalIncome", __v_raw.totalIncome, __v_isReadonly, __v_isShallow)
+        }
+        set(value) {
+            if (!__v_canSet("totalIncome")) {
+                return
+            }
+            val oldValue = __v_raw.totalIncome
+            __v_raw.totalIncome = value
+            _tRS(__v_raw, "totalIncome", oldValue, value)
+        }
+    override var statusList: UTSArray<StatusItem>
+        get() {
+            return _tRG(__v_raw, "statusList", __v_raw.statusList, __v_isReadonly, __v_isShallow)
+        }
+        set(value) {
+            if (!__v_canSet("statusList")) {
+                return
+            }
+            val oldValue = __v_raw.statusList
+            __v_raw.statusList = value
+            _tRS(__v_raw, "statusList", oldValue, value)
+        }
 }
 val GenPagesOrderOrderDetailClass = CreateVueComponent(GenPagesOrderOrderDetail::class.java, fun(): VueComponentOptions {
     return VueComponentOptions(type = "page", name = "", inheritAttrs = GenPagesOrderOrderDetail.inheritAttrs, inject = GenPagesOrderOrderDetail.inject, props = GenPagesOrderOrderDetail.props, propsNeedCastKeys = GenPagesOrderOrderDetail.propsNeedCastKeys, emits = GenPagesOrderOrderDetail.emits, components = GenPagesOrderOrderDetail.components, styles = GenPagesOrderOrderDetail.styles, setup = fun(props: ComponentPublicInstance): Any? {

Fișier diff suprimat deoarece este prea mare
+ 0 - 0
unpackage/cache/.app-android/tsc/app-android/.tsbuildInfo


BIN
unpackage/dist/dev/app-android/index/classes.dex


+ 20 - 22
utils/api/order.uts

@@ -23,31 +23,29 @@ const BASE_URL = 'https://dev.xiaodingyun.cn'
 /**
  * 获取商户评论列表
  */
-export function transRecords(params : any) : Promise<any> {
+export function transRecords(data : UTSJSONObject) : Promise<any> {
 	return request({
-		url: `${BASE_URL}/api/coach/v3/wallet/trans-records`,
-		method: "GET",
-		params: params
+		url: `${BASE_URL}/api/coach/v3/wallet/trans-records/${data?.id ?? ''}`,
+		method: "GET"
 	})
 }
 
 /**
  * 获取商户评论列表
  */
-export function getCommentList(params : any) : Promise<any> {
+export function getCommentList(data : UTSJSONObject) : Promise<any> {
 	return request({
-		url: `${BASE_URL}/api/coach/v3/ordercomments`,
-		method: "GET",
-		params: params
+		url: `${BASE_URL}/api/coach/v3/ordercomments/${data?.id ?? ''}`,
+		method: "GET"
 	})
 }
 
 /**
  * 获取商户评论统计数据
  */
-export function getCommentData() : Promise<any> {
+export function getCommentData(data : UTSJSONObject) : Promise<any> {
 	return request({
-		url: `${BASE_URL}/api/coach/v3/ordercomments/statistics`,
+		url: `${BASE_URL}/api/coach/v3/ordercomments/statistics/${data?.id ?? ''}`,
 		method: "GET"
 	})
 }
@@ -61,7 +59,7 @@ export function toggleProject(data : any) : Promise<any> {
 }
 
 // 获取订单列表
-export function getOrderList(params : any) : Promise<any> {
+export function getOrderList(params : UTSJSONObject) : Promise<any> {
 	return request({
 		url: `${BASE_URL}/api/coach/v3/orders`,
 		method: "GET",
@@ -70,11 +68,11 @@ export function getOrderList(params : any) : Promise<any> {
 }
 
 // 商户订单详情
-export function getOrderDetaile(params : any) : Promise<any> {
+export function getOrderDetaile(data : UTSJSONObject) : Promise<any> {
 	return request({
-		url: `${BASE_URL}/api/coach/v3/orders`,
+		url: `${BASE_URL}/api/coach/v3/orders/detail/${data?.id ?? ''}`,
 		method: "GET",
-		params
+		params: data
 	})
 }
 
@@ -172,25 +170,25 @@ export function transferOrder(orderId : any, data : any = {}) : Promise<any> {
 }
 
 // 获取商户订单详情
-export function getOrderDetailById(params : any) : Promise<any> {
+export function getOrderDetailById(data : any) : Promise<any> {
 	return request({
-		url: `${BASE_URL}/api/coach/v3/orders/detail/${params?.id}`,
+		url: `${BASE_URL}/api/coach/v3/orders/detail/${data?.id ?? ''}`,
 		method: "GET"
 	})
 }
 
 // 用户评价标签
-export function getCommentTag() : Promise<any> {
+export function getCommentTag(data : any) : Promise<any> {
 	return request({
-		url: `${BASE_URL}/api/coach/v3/orders/comment_tag`,
+		url: `${BASE_URL}/api/coach/v3/orders/comment_tag/${data?.id ?? ''}`,
 		method: "GET"
 	})
 }
 
 // 订单简单版详情
-export function getSimpleOrderDetaile(params : any) : Promise<any> {
+export function getSimpleOrderDetaile(data : any) : Promise<any> {
 	return request({
-		url: `${BASE_URL}/api/coach/v3/orders/comment_detail/${params?.id}`,
+		url: `${BASE_URL}/api/coach/v3/orders/comment_detail/${data?.id ?? ''}`,
 		method: "GET"
 	})
 }
@@ -205,9 +203,9 @@ export function rate(data : any) : Promise<any> {
 }
 
 // 对ta的印象
-export function getQuestion(id : any) : Promise<any> {
+export function getQuestion(data : any) : Promise<any> {
 	return request({
-		url: `${BASE_URL}/api/coach/v3/orders/commentStatistics/${id}`,
+		url: `${BASE_URL}/api/coach/v3/orders/commentStatistics/${data?.id ?? data ?? ''}`,
 		method: "GET"
 	})
 }

Unele fișiere nu au fost afișate deoarece prea multe fișiere au fost modificate în acest diff