ソースを参照

Merge branch 'master' of http://39.101.143.165:8090/hxl13994548489/LocalLivingServicesUniapp

baijunde 3 ヶ月 前
コミット
2293729df3

+ 4 - 0
api/account.js

@@ -43,6 +43,10 @@ const apiService = {
 	//团餐订单结算详情
 	groupOrderClearDetail(id,settleStatus){
 		return http.get(`/merchant/account/groupOrderClearDetail?orderId=${id}&settleStatus=${settleStatus}`);
+	},
+	//服务订单结算详情
+	groupSeverDetail(id,settleStatus){
+		return http.get(`/merchant/account/tsMainorderClearDetail?orderId=${id}&settleStatus=${settleStatus}`);
 	}
 	
 };

+ 17 - 10
common/router/modules/routes.js

@@ -706,70 +706,77 @@ const routes = [{
 		name: 'details',
 		meta: {},
 	},
-  {
+	{
 		path: '/pages/finance/index',
 		name: 'Finance',
 		meta: {
 			title: '财务',
 		},
 	},
-  {
+	{
 		path: '/pages/finance/balance',
 		name: 'Balance',
 		meta: {
 			title: '账户余额',
 		},
 	},
-  {
+	{
 		path: '/pages/finance/withdrawal',
 		name: 'Withdrawal',
 		meta: {
 			title: '提现',
 		},
 	},
-  {
+	{
 		path: '/pages/finance/submitted',
 		name: 'Submitted',
 		meta: {
 			title: '已提交',
 		},
 	},
-  {
+	{
 		path: '/pages/finance/accountRecord',
 		name: 'AccountRecord',
 		meta: {
 			title: '账户明细',
 		},
 	},
-  {
+	{
 		path: '/pages/finance/accountRecord',
 		name: 'AccountRecord',
 		meta: {
 			title: '账户明细',
 		},
 	},
-  {
+	{
 		path: '/pages/finance/settlementDetails',
 		name: 'SettlementDetails',
 		meta: {
 			title: '结算详情',
 		},
 	},
-  {
+	{
+		path: '/pages/finance/SeverDetails',
+		name: 'SettlementDetails',
+		meta: {
+			title: '结算详情',
+		},
+	},
+	{
 		path: '/pages/finance/groupMealDetails',
 		name: 'GroupMealDetails',
 		meta: {
 			title: '团餐结算详情',
 		},
 	},
-  {
+	{
 		path: '/pages/finance/orderDetails',
 		name: 'OrderDetails',
 		meta: {
 			title: '订单详情',
 		},
 	},
-  {
+	{
 		path: '/pages/finance/withdrawalDetails',
 		name: 'WithdrawalDetails',
 		meta: {

+ 7 - 0
pages.json

@@ -116,6 +116,13 @@
 				"navigationStyle": "custom"
 			}
 		},
+		{
+				"path": "pages/finance/SeverDetails",
+				"style": {
+					"navigationBarTitleText": "结算详情",
+					"navigationStyle": "custom"
+				}
+			},
     {
 			"path": "pages/finance/groupMealDetails",
 			"style": {

+ 1 - 1
pages/coupon/coupon.vue

@@ -7,7 +7,7 @@
 					<span class="cuIcon-back" @click="back"></span>
 				</view>
 				<span class="center">商家优惠券</span>
-				<view class="head_right">
+				<view class="head_right" v-if='currentTab'>
 					<!-- <span class="cuIcon-search" @click="goSearch"></span> -->
 					<view class="manage" @click="manage">
 						添加

+ 227 - 0
pages/finance/SeverDetails.vue

@@ -0,0 +1,227 @@
+<template>
+	<view class="settle">
+		<view class="fix">
+			<view class="top"></view>
+			<view class="head">
+				<span class="cuIcon-back" @click="back"></span>
+				<view class="case"> 结算详情 </view>
+			</view>
+		</view>
+
+		<view class="settle-card">
+			<view class="settle-header">
+				<view class="amount">¥{{ settlementInfo.amountPayable }}</view>
+			</view>
+			<view class="settle-info">
+				<view class="info">
+					<view class="label">结算单号</view>
+					<view class="value">{{ settlementInfo.statementNumber }}</view>
+				</view>
+
+				<view class="info">
+					<view class="label">结算时间</view>
+					<view class="value">{{ settlementInfo.settlementTime }}</view>
+				</view>
+
+				<view class="info">
+					<view class="label">结算金额</view>
+					<view class="value">¥{{ settlementInfo.amountPayable }}</view>
+				</view>
+
+				<view class="info">
+					<view class="label">结算明细范围</view>
+					<view class="value">{{ settlementInfo.settlementScopeStartTime }} -
+						{{ settlementInfo.settlementScopeEndTime }}</view>
+				</view>
+
+				<view class="info">
+					<view class="label">操作人</view>
+					<view class="value">{{ settlementInfo.operator }}</view>
+				</view>
+
+				<view class="info">
+					<view class="label">结算状态</view>
+					<view class="value">{{ settlementInfo.settleStatusName }}</view>
+				</view>
+
+				<view class="info">
+					<view class="label">结算单据</view>
+					<view class="value">{{ settlementInfo.settlementDocument }}</view>
+				</view>
+			</view>
+		</view>
+
+		<!-- 订单列表 -->
+		<view class="list-card">
+			<OrderList :list="orderList" :jumpType="jumpType" :orderType="orderType"></OrderList>
+		</view>
+	</view>
+</template>
+
+<script>
+	import api from '@/api/account';
+	import OrderList from './components/order-list.vue';
+
+	export default {
+		name: 'SettlementDetails',
+		components: {
+			OrderList,
+		},
+		data() {
+			return {
+				bizId: '',
+				jumpType: '',
+				// 结算信息
+				settlementInfo: {},
+				// 订单列表
+				orderList: [],
+				orderType: ''
+			};
+		},
+		onLoad(options) {
+			if (options.id) {
+				this.bizId = options.id;
+				this.jumpType = options.jumpType;
+				this.orderType = options.orderType
+			}
+		},
+		onShow() {
+			this.getDetails(this.bizId, this.jumpType);
+		},
+		methods: {
+			getDetails(id, jumpType) {
+				api
+					.settlementDetail({
+						settlementId: id,
+						jumpType
+					})
+					.then((res) => {
+						if (res.data.code === 200) {
+							this.settlementInfo = res.data.result;
+							this.orderList = res.data.result.orderList || [];
+						} else {
+							uni.showToast({
+								title: res.data.msg || '获取结算详情失败',
+								icon: 'none',
+							});
+						}
+					})
+					.catch(() => {
+						uni.showToast({
+							title: '获取结算详情失败',
+							icon: 'none',
+						});
+					});
+			},
+			back() {
+				uni.navigateBack({
+					delta: 1,
+				});
+			},
+		},
+	};
+</script>
+
+<style lang="scss" scoped>
+	.settle {
+		background: #f7f8fc;
+		min-height: 100vh;
+		font-family: Source Han Sans SC;
+		padding-bottom: 100rpx;
+
+		.fix {
+			position: sticky;
+			top: 0;
+
+			/*#ifdef APP-PLUS*/
+			.top {
+				width: 100%;
+				height: var(--status-bar-height);
+				background: #fff;
+			}
+
+			/*#endif*/
+
+			.head {
+				width: 100%;
+				height: 112rpx;
+				padding: 20rpx;
+				display: flex;
+				align-items: center;
+				background: #fff;
+				position: relative;
+				border-bottom: 1rpx solid #eeeeee;
+
+				.cuIcon-back {
+					font-size: 40rpx;
+					margin-right: 40rpx;
+				}
+
+				.case {
+					position: absolute;
+					left: 50%;
+					transform: translateX(-50%);
+					font-weight: 500;
+					font-size: 38rpx;
+					color: #333333;
+				}
+			}
+		}
+
+		.settle-card {
+			background-color: #fff;
+			padding: 30rpx 31rpx 10rpx;
+		}
+	}
+
+	.settle-header {
+		display: flex;
+		flex-direction: column;
+		justify-content: center;
+		align-items: center;
+		font-weight: 500;
+
+		.amount {
+			font-weight: 500;
+			font-size: 63rpx;
+			color: #1f1f1f;
+			margin-bottom: 41rpx;
+		}
+	}
+
+	.settle-info {
+		background-color: #fff;
+		margin-bottom: 20rpx;
+	}
+
+	.info {
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		padding-bottom: 21rpx;
+
+		&:last-child {
+			border-bottom: none;
+		}
+
+		.label {
+			font-weight: 400;
+			font-size: 31rpx;
+			color: #666666;
+		}
+
+		.value {
+			font-weight: 500;
+			font-size: 31rpx;
+			color: #333333;
+		}
+	}
+
+	.list-card {
+		height: 100%;
+		flex: 1;
+		overflow: hidden;
+		margin: 21rpx 31rpx;
+		background-color: #fff;
+	}
+</style>

+ 5 - 2
pages/finance/components/account-list.vue

@@ -28,7 +28,7 @@ export default {
     goDetails(item) {
       let pathName = '';
       switch (item.jumpType) {
-        case 'SETTLE_NORMAL':
+        case 'SETTLE_NORMAL'://普通订单
           pathName = 'settlementDetails';
           break;
         case 'PENDING_SETTLE':
@@ -37,9 +37,12 @@ export default {
         case 'WITHDRAW':
           pathName = 'withdrawalDetails';
           break;
-        case 'SETTLE_GROUP_MEAL':
+        case 'SETTLE_GROUP_MEAL'://团餐订单
           pathName = 'settlementDetails';
           break;
+		case 'SETTLE_TSMAIN'://服务订单
+		  pathName = 'SeverDetails';
+		  break;
       }
       uni.navigateTo({
         url: `/pages/finance/${pathName}?id=${item.bizId}&orderType=${item.orderType}&jumpType=${item.jumpType}`,

+ 1 - 1
pages/finance/components/order-list.vue

@@ -6,7 +6,7 @@
         <view class="value">{{ item.buyTime }}</view>
       </view>
       <view class="right">
-        <view>+{{ item.orderPrice }}</view>
+        <view>+{{ jumpType == 'SETTLE_TSMAIN' ?  item.payableToMerchant : item.orderPrice}}</view>
       </view>
     </view>
   </view>

+ 57 - 0
pages/finance/dictionary.js

@@ -126,4 +126,61 @@ export const groupMealFields = [
     isShowTip: true,
     key: 'newUser',
   }
+]
+
+export const serveMealFields = [
+  {
+    title: '订单编号',
+    valueField: 'orderId',
+    isShowTip: false,
+  },
+  {
+    title: '商品名称',
+    valueField: 'productName',
+    isShowTip: false,
+  },
+  {
+    title: '下单时间',
+    valueField: 'buyTime',
+    isShowTip: false,
+  },
+  {
+    title: '核销时间',
+    valueField: 'writeOffTime',
+    isShowTip: false,
+  },
+  {
+    title: '订单总金额',
+    valueField: 'sumAmount',
+    isShowTip: false,
+  },
+  {
+    title: '用户实付总金额',
+    valueField: 'actualPayAmount',
+    isShowTip: false,
+  },
+  {
+    title: '商家应收金额',
+    valueField: 'payableToMerchant',
+    isShowTip: false,
+  },
+  {
+    title: '平台优惠券成本',
+    valueField: 'couponPlatformCost',
+    rateField: 'couponMerchantRate',
+    isShowTip: true,
+    key: 'couponMerchantRate',
+  },
+  {
+    title: '金豆抵扣成本',
+    valueField: 'costGoldMerchant',
+    rateField: 'goldMerchantRate',
+    isShowTip: true,
+    key: 'goldMerchantRate',
+  },
+  {
+    title: '权益券抵扣金额',
+    valueField: 'rightsExchangeMoney',
+    isShowTip: false,
+  },
 ]

+ 331 - 234
pages/finance/orderDetails.vue

@@ -1,262 +1,359 @@
 <template>
-  <view class="order">
-    <view class="fix">
-      <view class="top"></view>
-      <view class="head">
-        <span class="cuIcon-back" @click="back"></span>
-        <view class="case"> 结算详情 </view>
-      </view>
-    </view>
+	<view class="order">
+		<view class="fix">
+			<view class="top"></view>
+			<view class="head">
+				<span class="cuIcon-back" @click="back"></span>
+				<view class="case"> 结算详情 </view>
+			</view>
+		</view>
 
-    <view class="order-card">
-      <view class="order-header">
-        <view class="amount">{{ orderInfo.payableToMerchant }}</view>
-        <view class="title">应收金额</view>
-      </view>
-      <view class="order-info">
-        <view v-for="(item, index) in orderFields" :key="index" class="info">
-          <view class="label">
-            {{ item.title }}
-            <image
-              v-if="item.isShowTip"
-              src="/static/finance/status/icon-remind.png"
-              mode="aspectFit"
-              style="width: 33rpx; height: 33rpx; margin-left: 8rpx"
-              @click.stop="toggleTooltip(item.key)"
-            ></image>
-            <view class="tooltip" v-show="showTooltip === item.key"> 商户占比{{ orderInfo[item.rateField] }}% </view>
-          </view>
-          <view class="value">{{ orderInfo[item.valueField] }}</view>
-        </view>
-      </view>
-
-      <!-- 备注说明 -->
-      <view class="remark">
-        注:应收金额=订单金额*商品分佣占比-邀新分佣成本-优惠券成本-会员折扣成本-金豆抵扣成本-推广分佣成本</view
-      >
-    </view>
-  </view>
+		<view class="order-card">
+			<view class="order-header">
+				<view class="amount">{{ orderInfo.payableToMerchant }}</view>
+				<view class="title">应收金额</view>
+			</view>
+			<block v-if="jumpType == 'SETTLE_TSMAIN'">
+				<view class="order-info">
+					<view v-for="(item, index) in serveMealFields" :key="index" class="info">
+						<view class="label">
+							{{ item.title }}
+							<image v-if="item.isShowTip" src="/static/finance/status/icon-remind.png" mode="aspectFit"
+								style="width: 33rpx; height: 33rpx; margin-left: 8rpx"
+								@click.stop="toggleTooltip(item.key)"></image>
+							<view class="tooltip" v-show="showTooltip === item.key"> 商户占比{{ orderInfo[item.rateField] }}%
+							</view>
+						</view>
+						<view class="value">{{ orderInfo[item.valueField] }}</view>
+					</view>
+				</view>
+				<!-- 备注说明 -->
+				<view class="remark line">注:应收金额=订单金额*商品分佣占比-平台优惠券成本-金豆成本</view>
+				<!-- 表格 -->
+				<uni-table
+					class="service-table"
+					border
+					:empty-text="'暂无数据'"
+					v-if="orderInfo.merchantServiceOrderDetailVoList && orderInfo.merchantServiceOrderDetailVoList.length"
+				>
+					<uni-tr>
+						<uni-th align="center">服务名称/数量</uni-th>
+						<uni-th align="center">实付总价</uni-th>
+					</uni-tr>
+					<uni-tr
+						v-for="(item, index) in orderInfo.merchantServiceOrderDetailVoList"
+						:key="item.serviceOrderSubNo || index"
+					>
+						<uni-td align="center">
+							<text class="service-name">{{ item.serviceName }}</text>
+						</uni-td>
+						<uni-td align="center">{{ formatOrderMoney(item.orderMoney) }}</uni-td>
+					</uni-tr>
+				</uni-table>
+			</block>
+			<block v-else>
+				<view class="order-info">
+					<view v-for="(item, index) in orderFields" :key="index" class="info">
+						<view class="label">
+							{{ item.title }}
+							<image v-if="item.isShowTip" src="/static/finance/status/icon-remind.png" mode="aspectFit"
+								style="width: 33rpx; height: 33rpx; margin-left: 8rpx"
+								@click.stop="toggleTooltip(item.key)"></image>
+							<view class="tooltip" v-show="showTooltip === item.key"> 商户占比{{ orderInfo[item.rateField] }}%
+							</view>
+						</view>
+						<view class="value">{{ orderInfo[item.valueField] }}</view>
+					</view>
+				</view>
+				<!-- 备注说明 -->
+				<view class="remark">注:应收金额=订单金额*商品分佣占比-邀新分佣成本-优惠券成本-会员折扣成本-金豆抵扣成本-推广分佣成本</view>
+			</block>
+		
+		</view>
+	</view>
 </template>
 
 <script>
-import api from '@/api/account';
-import {orderFields} from './dictionary';
+	import api from '@/api/account';
+	import {
+		orderFields,
+		serveMealFields
+	} from './dictionary';
 
-export default {
-  name: 'OrderDetails',
-  data() {
-    return {
-      orderId: '',
-      orderInfo: {},
-      showTooltip: null,
-      tooltipTimer: null,
-      orderFields,
-			orderType:''
-    };
-  },
-  mounted() {
-    // 点击其他区域隐藏提示
-    document.addEventListener('click', this.handleClickOutside);
-  },
-  beforeUnmount() {
-    // 移除事件监听
-    document.removeEventListener('click', this.handleClickOutside);
-    // 清除定时器
-    if (this.tooltipTimer) {
-      clearTimeout(this.tooltipTimer);
-    }
-  },
-  onLoad(options) {
-    if (options.id) {
-      this.orderId = options.id;
-    }
-		if (options.orderType) {
-		  this.orderType = options.orderType;
-		}
-  },
-  onShow() {
-    this.getOrderDetails(this.orderId,this.orderType);
-  },
-  methods: {
-    getOrderDetails(id,orderType) {
-      api.orderClearDetail(id,orderType).then((res) => {
-        if (res.data.code === 200) {
-          this.orderInfo = res.data.result;
-        }
-      });
-    },
-    back() {
-      uni.navigateBack({
-        delta: 1,
-      });
-    },
-    // 处理点击事件,显示提示并设置10秒自动隐藏
-    toggleTooltip(key) {
-      // 清除之前的定时器
-      if (this.tooltipTimer) {
-        clearTimeout(this.tooltipTimer);
-      }
-      // 显示当前提示,隐藏其他提示
-      this.showTooltip = this.showTooltip === key ? null : key;
+	export default {
+		name: 'OrderDetails',
+		data() {
+			return {
+				orderId: '',
+				orderInfo: {},
+				showTooltip: null,
+				tooltipTimer: null,
+				orderFields,
+				serveMealFields,
+				orderType: '',
+				jumpType: ''
+			};
+		},
+		mounted() {
+			// 点击其他区域隐藏提示
+			document.addEventListener('click', this.handleClickOutside);
+		},
+		beforeUnmount() {
+			// 移除事件监听
+			document.removeEventListener('click', this.handleClickOutside);
+			// 清除定时器
+			if (this.tooltipTimer) {
+				clearTimeout(this.tooltipTimer);
+			}
+		},
+		onLoad(options) {
+			console.log('options', options)
+			if (options.jumpType) {
+				this.jumpType = options.jumpType;
+			}
+			if (options.id) {
+				this.orderId = options.id;
+			}
+			if (options.orderType) {
+				this.orderType = options.orderType;
+			}
+		},
+		onShow() {
+			this.getOrderDetails(this.orderId, this.orderType);
+		},
+		methods: {
+			getOrderDetails(id, orderType) {
+				if (this.jumpType == 'SETTLE_TSMAIN') {
+					api.groupSeverDetail(id, orderType).then((res) => {
+						if (res.data.code === 200) {
+							this.orderInfo = res.data.result;
+						}
+					});
+				} else {
+					api.orderClearDetail(id, orderType).then((res) => {
+						if (res.data.code === 200) {
+							this.orderInfo = res.data.result;
+						}
+					});
+				}
 
-      // 如果是显示状态,设置10秒后自动隐藏
-      if (this.showTooltip) {
-        this.tooltipTimer = setTimeout(() => {
-          this.showTooltip = null;
-        }, 10000); // 10秒自动隐藏
-      }
-    },
-    // 点击其他区域隐藏提示
-    handleClickOutside(event) {
-      // 检查点击目标是否在提示或图片上
-      const tooltipElements = document.querySelectorAll('.tooltip, image[src*="icon-remind.png"]');
-      let isClickOnTooltip = false;
+			},
+			back() {
+				uni.navigateBack({
+					delta: 1,
+				});
+			},
+			// 处理点击事件,显示提示并设置10秒自动隐藏
+			toggleTooltip(key) {
+				// 清除之前的定时器
+				if (this.tooltipTimer) {
+					clearTimeout(this.tooltipTimer);
+				}
+				// 显示当前提示,隐藏其他提示
+				this.showTooltip = this.showTooltip === key ? null : key;
 
-      tooltipElements.forEach((element) => {
-        if (element.contains(event.target)) {
-          isClickOnTooltip = true;
-        }
-      });
+				// 如果是显示状态,设置10秒后自动隐藏
+				if (this.showTooltip) {
+					this.tooltipTimer = setTimeout(() => {
+						this.showTooltip = null;
+					}, 10000); // 10秒自动隐藏
+				}
+			},
+			formatOrderMoney(money) {
+				if (money === null || money === undefined || money === '') {
+					return '--';
+				}
+				const num = Number(money);
+				if (Number.isNaN(num)) {
+					return '--';
+				}
+				return `¥ ${num.toFixed(2)}`;
+			},
+			// 点击其他区域隐藏提示
+			handleClickOutside(event) {
+				// 检查点击目标是否在提示或图片上
+				const tooltipElements = document.querySelectorAll('.tooltip, image[src*="icon-remind.png"]');
+				let isClickOnTooltip = false;
 
-      // 如果点击的不是提示或图片,隐藏所有提示
-      if (!isClickOnTooltip) {
-        this.showTooltip = null;
-        // 清除定时器
-        if (this.tooltipTimer) {
-          clearTimeout(this.tooltipTimer);
-        }
-      }
-    },
-  },
-};
+				tooltipElements.forEach((element) => {
+					if (element.contains(event.target)) {
+						isClickOnTooltip = true;
+					}
+				});
+
+				// 如果点击的不是提示或图片,隐藏所有提示
+				if (!isClickOnTooltip) {
+					this.showTooltip = null;
+					// 清除定时器
+					if (this.tooltipTimer) {
+						clearTimeout(this.tooltipTimer);
+					}
+				}
+			},
+		},
+	};
 </script>
 
 <style lang="scss" scoped>
-.order {
-  background: #f7f8fc;
-  min-height: 100vh;
-  font-family: Source Han Sans SC;
-  font-weight: 500;
+	.order {
+		background: #f7f8fc;
+		min-height: 100vh;
+		font-family: Source Han Sans SC;
+		font-weight: 500;
 
-  .fix {
-    position: sticky;
-    top: 0;
+		.fix {
+			position: sticky;
+			top: 0;
 
-    /*#ifdef APP-PLUS*/
-    .top {
-      width: 100%;
-      height: var(--status-bar-height);
-      background: #fff;
-    }
+			/*#ifdef APP-PLUS*/
+			.top {
+				width: 100%;
+				height: var(--status-bar-height);
+				background: #fff;
+			}
 
-    /*#endif*/
+			/*#endif*/
 
-    .head {
-      width: 100%;
-      height: 112rpx;
-      padding: 20rpx;
-      display: flex;
-      align-items: center;
-      background: #fff;
-      position: relative;
-      border-bottom: 1rpx solid #eeeeee;
+			.head {
+				width: 100%;
+				height: 112rpx;
+				padding: 20rpx;
+				display: flex;
+				align-items: center;
+				background: #fff;
+				position: relative;
+				border-bottom: 1rpx solid #eeeeee;
 
-      .cuIcon-back {
-        font-size: 40rpx;
-        margin-right: 40rpx;
-      }
+				.cuIcon-back {
+					font-size: 40rpx;
+					margin-right: 40rpx;
+				}
 
-      .case {
-        position: absolute;
-        left: 50%;
-        transform: translateX(-50%);
-        font-weight: 500;
-        font-size: 38rpx;
-        color: #333333;
-      }
-    }
-  }
+				.case {
+					position: absolute;
+					left: 50%;
+					transform: translateX(-50%);
+					font-weight: 500;
+					font-size: 38rpx;
+					color: #333333;
+				}
+			}
+		}
 
-  .order-card {
-    padding: 42rpx 31rpx 85rpx;
-    overflow: hidden;
-    background: #ffffff;
-    height: 95vh;
-  }
-}
+		.order-card {
+			padding: 42rpx 31rpx 85rpx;
+			overflow: hidden;
+			background: #ffffff;
+			height: 95vh;
+		}
+	}
 
-.order-header {
-  display: flex;
-  flex-direction: column;
-  align-items: center;
+	.order-header {
+		display: flex;
+		flex-direction: column;
+		align-items: center;
 
-  .amount {
-    font-size: 63rpx;
-    color: #1f1f1f;
-  }
+		.amount {
+			font-size: 63rpx;
+			color: #1f1f1f;
+		}
 
-  .title {
-    font-size: 28rpx;
-    color: #666666;
-    margin: 11rpx 0 42rpx;
-  }
-}
+		.title {
+			font-size: 28rpx;
+			color: #666666;
+			margin: 11rpx 0 42rpx;
+		}
+	}
 
-.order-info {
-  .info {
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-    padding-bottom: 21rpx;
+	.order-info {
+		.info {
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			padding-bottom: 21rpx;
 
-    .label {
-      display: flex;
-      align-items: center;
-      font-weight: 400;
-      font-size: 31rpx;
-      color: #666666;
-      position: relative;
+			.label {
+				display: flex;
+				align-items: center;
+				font-weight: 400;
+				font-size: 31rpx;
+				color: #666666;
+				position: relative;
 
-      .tooltip {
-        display: flex;
-        align-items: center;
-        justify-content: center;
-        width: 158rpx;
-        height: 42rpx;
-        background: rgba(0, 0, 0, 0.6);
-        border-radius: 4rpx 4rpx 4rpx 4rpx;
-        font-family: PingFang SC;
-        font-weight: 400;
-        font-size: 23rpx;
-        color: #ffffff;
-        margin-left: 10rpx;
+				.tooltip {
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					width: 158rpx;
+					height: 42rpx;
+					background: rgba(0, 0, 0, 0.6);
+					border-radius: 4rpx 4rpx 4rpx 4rpx;
+					font-family: PingFang SC;
+					font-weight: 400;
+					font-size: 23rpx;
+					color: #ffffff;
+					margin-left: 10rpx;
 
-        &::after {
-          content: '';
-          position: absolute;
-          right: 158rpx;
-          bottom: 14rpx;
-          width: 0;
-          height: 0;
-          border-bottom: 10rpx solid transparent;
-          border-right: 10rpx solid rgba(0, 0, 0, 0.6);
-          border-top: 10rpx solid transparent;
-          border-left: 0;
-        }
-      }
-    }
+					&::after {
+						content: '';
+						position: absolute;
+						right: 158rpx;
+						bottom: 14rpx;
+						width: 0;
+						height: 0;
+						border-bottom: 10rpx solid transparent;
+						border-right: 10rpx solid rgba(0, 0, 0, 0.6);
+						border-top: 10rpx solid transparent;
+						border-left: 0;
+					}
+				}
+			}
 
-    .value {
-      font-size: 31rpx;
-      color: #333333;
-    }
-  }
-}
+			.value {
+				font-size: 31rpx;
+				color: #333333;
+			}
+		}
+	}
 
-.remark {
-  font-weight: 400;
-  font-size: 25rpx;
-  color: #666666;
-  margin-top: 10rpx;
-}
-</style>
+	.remark {
+		font-weight: 400;
+		font-size: 25rpx;
+		color: #666666;
+		margin-top: 10rpx;
+	}
+	.line{
+		color: #449AFF;
+	}
+
+	.service-table {
+		margin-top: 31rpx;
+		border-radius: 8rpx;
+		overflow: hidden;
+		font-family: PingFang SC;
+		font-weight: 400;
+
+		.service-name {
+			font-size: 27rpx;
+			color: #666666;
+		}
+	}
+
+	::v-deep .service-table {
+		.uni-table-th {
+			height: 67rpx !important;
+			background: #f5f7fa;
+			font-size: 29rpx;
+			color: #333333;
+		}
+		.uni-table-td {
+			height: 54rpx !important;
+			text-align: center !important;
+			font-size: 27rpx !important;
+			color: #666666 !important;
+		}
+		.table--border {
+			border-color: #ebeef5 !important;
+		}
+	}
+</style>