baijunde преди 1 година
родител
ревизия
c88157e21d

+ 49 - 1
common/router/modules/routes.js

@@ -151,6 +151,46 @@ const routes = [{
 			title: '订单详情',
 		},
 	},
+	{
+		//注意:path必须跟pages.json中的地址对应,最前面别忘了加'/'哦
+		path: '/pages/order/serviceOrder/orderDetail',
+		name: 'orderDetail',
+		meta: {
+			title: '订单详情',
+		},
+	},
+	{
+		//注意:path必须跟pages.json中的地址对应,最前面别忘了加'/'哦
+		path: '/pages/order/serviceOrder/live',
+		name: 'live',
+		meta: {
+			title: '记录实况',
+		},
+	},
+	{
+		//注意:path必须跟pages.json中的地址对应,最前面别忘了加'/'哦
+		path: '/pages/order/serviceOrder/photo',
+		name: 'photo',
+		meta: {
+			title: '车辆照片',
+		},
+	},
+	{
+		//注意:path必须跟pages.json中的地址对应,最前面别忘了加'/'哦
+		path: '/pages/order/serviceOrder/project',
+		name: 'project',
+		meta: {
+			title: '服务项目',
+		},
+	},
+	{
+		//注意:path必须跟pages.json中的地址对应,最前面别忘了加'/'哦
+		path: '/pages/order/serviceOrder/webview',
+		name: 'webview',
+		meta: {
+			title: '网页版',
+		},
+	},
 	{
 		//注意:path必须跟pages.json中的地址对应,最前面别忘了加'/'哦
 		path: '/pages/order/record',
@@ -465,12 +505,20 @@ const routes = [{
 		meta: {
 			title: '积分账单',
 		},
-	},{
+	},
+	{
 		path: '/pages/product/creatStandard',
 		name: 'creatStandard',
 		meta: {
 			title: '添加品牌标品',
 		},
+	},
+	{
+		path: '/pages/product/checkMap',
+		name: 'checkMap',
+		meta: {
+			title: '添加检测站',
+		},
 	}
 	
 ]

+ 2 - 2
common/service/config.service.js

@@ -2,9 +2,9 @@ let BASE_URL = ''
 
 
 if (process.env.NODE_ENV == 'development') {
-	BASE_URL = 'https://test.baoxianzhanggui.com/locallive-java' // 测试环境
+	// BASE_URL = 'https://test.baoxianzhanggui.com/locallive-java' // 测试环境
 	// BASE_URL = 'http://192.168.0.36:8080/jeecg-boot' // 开发环境
-    // BASE_URL = 'http://192.168.0.52:8081/jeecg-boot' // 开发环境
+    BASE_URL = 'http://192.168.0.52:8081/jeecg-boot' // 开发环境
 
 } else {
 	BASE_URL = 'https://test.baoxianzhanggui.com/locallive-java' // 测试环境

+ 34 - 1
manifest.json

@@ -57,7 +57,8 @@
                     "LocationAlways" : true
                 },
                 "privacyDescription" : {
-                    "NSCameraUsageDescription" : "用于扫码功能"
+                    "NSCameraUsageDescription" : "用于扫码功能",
+                    "NSPhotoLibraryUsageDescription" : "用于上传图片"
                 },
                 "dSYMs" : false
             },
@@ -86,6 +87,38 @@
                 "push" : {
                     "unipush" : {}
                 }
+            },
+            "icons" : {
+                "android" : {
+                    "hdpi" : "unpackage/res/icons/72x72.png",
+                    "xhdpi" : "unpackage/res/icons/96x96.png",
+                    "xxhdpi" : "unpackage/res/icons/144x144.png",
+                    "xxxhdpi" : "unpackage/res/icons/192x192.png"
+                },
+                "ios" : {
+                    "appstore" : "unpackage/res/icons/1024x1024.png",
+                    "ipad" : {
+                        "app" : "unpackage/res/icons/76x76.png",
+                        "app@2x" : "unpackage/res/icons/152x152.png",
+                        "notification" : "unpackage/res/icons/20x20.png",
+                        "notification@2x" : "unpackage/res/icons/40x40.png",
+                        "proapp@2x" : "unpackage/res/icons/167x167.png",
+                        "settings" : "unpackage/res/icons/29x29.png",
+                        "settings@2x" : "unpackage/res/icons/58x58.png",
+                        "spotlight" : "unpackage/res/icons/40x40.png",
+                        "spotlight@2x" : "unpackage/res/icons/80x80.png"
+                    },
+                    "iphone" : {
+                        "app@2x" : "unpackage/res/icons/120x120.png",
+                        "app@3x" : "unpackage/res/icons/180x180.png",
+                        "notification@2x" : "unpackage/res/icons/40x40.png",
+                        "notification@3x" : "unpackage/res/icons/60x60.png",
+                        "settings@2x" : "unpackage/res/icons/58x58.png",
+                        "settings@3x" : "unpackage/res/icons/87x87.png",
+                        "spotlight@2x" : "unpackage/res/icons/80x80.png",
+                        "spotlight@3x" : "unpackage/res/icons/120x120.png"
+                    }
+                }
             }
         }
     },

+ 1 - 1
node_modules/uview-ui/components/u-select/u-select.vue

@@ -225,7 +225,7 @@ export default {
 				let num = 1;
 				let column = this.list;
 				// 只要有元素并且第一个元素有children属性,继续历遍
-				while(column[0][this.childName]) {
+				while(column[0][this.childName] && column[0][this.childName].length>0) {
 					column = column[0] ? column[0][this.childName] : {};
 					num ++;
 				}

+ 25 - 0
pages.json

@@ -42,10 +42,31 @@
 			"path": "pages/order/details",
 			"style": {}
 		},
+		{
+			"path": "pages/order/serviceOrder/orderDetail",
+			"style": {}
+		},
+		{
+			"path": "pages/order/serviceOrder/live",
+			"style": {}
+		},
+		{
+			"path": "pages/order/serviceOrder/photo",
+			"style": {}
+		},
+		{
+			"path": "pages/order/serviceOrder/project",
+			"style": {}
+		},
+		{
+			"path": "pages/order/serviceOrder/webview",
+			"style": {}
+		},
 		{
 			"path": "pages/order/record",
 			"style": {}
 		},
+		
 		{
 			"path": "pages/index/full",
 			"style": {}
@@ -82,6 +103,10 @@
 			"path": "pages/product/rule",
 			"style": {}
 		},
+		{
+			"path": "pages/product/checkMap",
+			"style": {}
+		},
 		{
 			"path": "pages/evaluate/evaluate",
 			"style": {

+ 173 - 0
pages/order/components/evaluate.vue

@@ -0,0 +1,173 @@
+<template>
+	<view class="evaluate">
+		<view class="content">
+			<view class="title">
+				对客户做出评价
+				<image src="/static/store/detele.png" mode="" @click="cut"></image>
+			</view>
+			<view class="rate">
+				综合评价:<u-rate :count="count" v-model="evaluateGrade" active-icon="heart-fill" inactive-icon="heart" size="56"></u-rate>
+			</view>
+			<view class="tag">
+				<view class="item_tag" :class="item.check?'active':''" v-for="item in tagList" :key="item.id" @click="select(item)">
+					{{item.labelContent}}
+				</view>
+			</view>
+			<view class="btn">
+				<view class="sub" @click="submit">
+					确定
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default{
+		name:'evaluate',
+		props:{
+			userId:{
+				type:String,
+				default:''
+			},
+			taskId:{
+				type:String,
+				default:''
+			}
+		},
+		data(){
+			return{
+				count: 5,
+				evaluateGrade: 0,
+				tagList:[]
+			}
+		},
+		methods:{
+			getTag(){
+				this.$http.get("/ts/merchant/selectLabel?serviceType="+'1909434886438043649').then(res => {
+					console.log(res)
+					if (res.data.code == 200) {
+						res.data.result.forEach(item => {
+							item.check = false
+						})
+						this.tagList = res.data.result
+					}
+				})
+			},
+			select(item){
+				item.check = !item.check
+			},
+			cut(){
+				this.$emit('cut')
+			},
+			submit(){
+				let data = {
+					merchantId: uni.getStorageSync('login_user_info').merchantId,
+					merchantName: uni.getStorageSync('login_user_info').merchantName,
+					merchantUserId:uni.getStorageSync('login_user_info').id,
+					merchantUserName:uni.getStorageSync('login_user_info').name,
+					localTsMerchantEvaluateUserLinkLabel:[],
+					evaluateGrade:this.evaluateGrade,
+					userId:this.userId,
+					taskId:this.taskId
+				}
+				this.tagList.forEach(item => {
+					if(item.check){
+						data.localTsMerchantEvaluateUserLinkLabel.push({
+							labelId:item.id,
+							labelName:item.labelContent
+						})
+					}
+				})
+				this.$http.post("/ts/merchant/commentUser",data).then(res => {
+					console.log(res)
+					if (res.data.code == 200) {
+						uni.showToast({
+							icon:'none',
+							title:'评论成功'
+						})
+						this.cut()
+					}
+				})
+			}
+		},
+		mounted() {
+			this.getTag()
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.evaluate{
+		position: fixed;
+		top: 0;
+		left: 0;
+		background: rgba(0, 0, 0, 0.7);
+		width: 100%;
+		// height: calc(100vh - 100rpx);
+		height: 100vh;
+		display: flex;
+		align-items: end;
+		z-index: 999;
+		.content{
+			width: 100%;
+			background-color: #fff;
+			padding: 20rpx 25rpx;
+			border-radius: 20rpx;
+			.title{
+				text-align: center;
+				border-bottom: 1px solid #EEEEEE;
+				padding-bottom: 20rpx;
+				margin-bottom: 44rpx;
+				image{
+					width:37rpx ;
+					height: 37rpx;
+					float: right;
+				}
+			}
+			.rate{
+				font-weight: 600;
+				font-size: 30rpx;
+				margin-bottom: 48rpx;
+				display: flex;
+				align-items: center;
+			}
+			.tag{
+				padding-bottom: 42rpx;
+				border-bottom: 1px solid #EEEEEE;
+				.item_tag{
+					width: 140rpx;
+					height: 52rpx;
+					border-radius: 4rpx;
+					border: 1px solid #C2C2C2;
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					font-size: 26rpx;
+				}
+				.active{
+					background: rgba(68,154,255,0.1);
+					border-radius: 4rpx;
+					border: 1px solid #449AFF;
+					color: #2983EC;
+				}
+			}
+			.btn{
+				width: 100%;
+				height:112rpx ;
+				padding: 16rpx 24rpx;
+				.sub{
+					width: 100%;
+					height:100%;
+					background: linear-gradient( 90deg, #77B6FF 0%, #449AFF 100%);
+					border-radius: 53px;
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					font-size: 28rpx;
+					color: #FFFFFF;
+				}
+			}
+		}
+	}
+</style>

+ 118 - 0
pages/order/components/receiveOrder.vue

@@ -0,0 +1,118 @@
+<template>
+	<view class="container">
+		<!-- 触发按钮(实际使用时可以去掉) -->
+
+		<!-- 接单成功弹窗 -->
+		<view class="popup">
+			<view class="modal-content">
+				<view class="modal-header">
+					<text class="modal-title">接单成功</text>
+				</view>
+
+				<view class="modal-body">
+					<text class="tip-text">特别提示:</text>
+					<text class="tip-content">请在接车时,车辆检测时,检测结束后分别拍照留存,完成服务时上传</text>
+				</view>
+
+				<view class="modal-footer">
+					<button class="confirm-btn" @click="confirm">确定</button>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		name: 'receive',
+		data() {
+			return {
+			}
+		},
+		methods: {
+			confirm() {
+				// 这里可以添加确定后的逻辑
+			
+				this.$emit('cut')
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	/* 整体容器样式 */
+	.container {
+		padding: 20px;
+		position: fixed;
+		top: 0;
+		left: 0;
+		background: rgba(0, 0, 0, 0.7);
+		width: 100%;
+		height: 100%;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		z-index: 99;
+	}
+
+	/* 弹窗内容样式 */
+	.modal-content {
+		width: 80vw;
+		background-color: #fff;
+		border-radius: 12px;
+		overflow: hidden;
+		box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
+	}
+
+	/* 弹窗头部样式 */
+	.modal-header {
+		padding: 20px 15px 10px;
+		text-align: center;
+		border-bottom: 1px solid #f5f5f5;
+	}
+
+	.modal-title {
+		font-size: 18px;
+		font-weight: bold;
+		color: #333;
+	}
+
+	/* 弹窗主体内容样式 */
+	.modal-body {
+		padding: 20px 15px;
+	}
+
+	.tip-text {
+		font-size: 15px;
+		font-weight: bold;
+		display: block;
+		margin-bottom: 8px;
+	}
+
+	.tip-content {
+		font-size: 14px;
+		color: #666;
+		line-height: 1.5;
+	}
+
+	/* 弹窗底部样式 */
+	.modal-footer {
+		padding: 10px 15px 20px;
+		display: flex;
+		justify-content: center;
+	}
+
+	.confirm-btn {
+		width: 522rpx;
+		height: 68rpx;
+		background: #449AFF;
+		border-radius: 66rpx;
+		color: #fff;
+		font-size: 28rpx;
+		border: none;
+	}
+
+	.confirm-btn:active {
+		background-color: #3a8ee6;
+	}
+</style>

+ 170 - 0
pages/order/components/serviceDetail.vue

@@ -0,0 +1,170 @@
+<template>
+	<view class="service-detail-container">
+		<view class="popup">
+			<view class="header">
+				服务明细
+			</view>
+			<view class="detail-list">
+				<view class="item" v-for="(item,index) in form.serviceDetails" :key="index">
+					<view class="item_name">
+						{{item.itemName}}
+					</view>
+					<view class="item_center">
+						<span>{{item.itemContent}}</span>
+						<span class="item_price"><text>¥</text>{{item.itemMoney}}</span>
+					</view>
+				</view>
+			</view>
+			<view class="total-section">
+				<text class="total-text">服务总计:</text>
+				<text class="total-price">¥{{form.amount}}</text>
+			</view>
+			<button class="confirm-btn" @click="confirm">确定</button>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		name: 'serviceDetail',
+		props:{
+			subOrderId:{
+				type:String,
+				default:''
+			}
+		},
+		data(){
+			return{
+				form:{},
+			}
+		},
+		methods: {
+			confirm() {
+				this.$emit('cut')
+				
+			},
+			getDetail(){
+				this.$http.get("/ts/merchant/servicesDetails?subOrderId="+this.subOrderId+'&delFlag='+0).then(res => {
+					console.log(res)
+					if (res.data.code == 200) {
+						this.form = res.data.result
+					}
+				})
+			}
+		},
+		mounted() {
+			this.getDetail() 
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	/* 页面整体样式 */
+	.service-detail-container {
+		position: fixed;
+		top: 0;
+		left: 0;
+		background: rgba(0, 0, 0, 0.7);
+		width: 100%;
+		// height: calc(100vh - 100rpx);
+		height: 100vh;
+		display: flex;
+		align-items: end;
+		z-index: 999;
+	}
+
+	.popup {
+		width: 100%;
+		background-color: #fff;
+		padding: 24rpx 26rpx;
+		border-radius: 20rpx 20rpx 0px 0px;
+	}
+
+	/* 头部标题 */
+	.header {
+		margin-bottom: 20rpx;
+			font-size: 28rpx;
+			font-weight: bold;
+			color: #333;
+			text-align: center;
+			border-bottom: 1px solid #eeeeee;
+			padding-bottom: 20rpx;
+	}
+
+
+
+	/* 明细列表样式 */
+	.detail-list {
+		background-color: #fff;
+		border-radius: 10px;
+		padding: 0 15px;
+		margin-bottom: 15px;
+		.item{
+			width: 100%;
+			background: #F7F8FC;
+			border-radius: 12rpx;
+			padding: 12rpx 24rpx;
+			margin-bottom: 16rpx;
+			.item_name{
+				font-size: 26rpx;
+				color: #333333;
+				font-weight: 600;
+			}
+			.item_center{
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				span{
+					font-size: 24rpx;
+					color: #888888;
+				}
+				.item_price{
+					font-size: 24rpx;
+					font-weight: 600;
+					color: #000;
+					margin-left: 46rpx;
+					text{
+						font-size: 20rpx;
+					}
+					
+				}
+			}
+		}
+	}
+
+	/* 总计部分 */
+	.total-section {
+		display: flex;
+		justify-content: space-between;
+		background-color: #fff;
+		padding: 15px;
+		border-radius: 10px;
+	}
+
+	.total-text {
+		font-size: 30rpx;
+		color: #333;
+		font-weight: 600;
+	}
+
+	.total-price {
+		font-size: 16px;
+		color: #f56c6c;
+		font-weight: bold;
+	}
+
+	/* 确认按钮 */
+	.confirm-btn {
+		background-color: #409eff;
+		color: #fff;
+		border-radius: 6px;
+		font-size: 16px;
+		border: none;
+		height: 44px;
+		line-height: 44px;
+	}
+
+	.confirm-btn:active {
+		background-color: #3a8ee6;
+	}
+</style>

+ 276 - 0
pages/order/components/upload.vue

@@ -0,0 +1,276 @@
+<template>
+	<view class="upload">
+		<view class="content">
+			<view class="title">
+				请上传照片
+				<image src="/static/store/detele.png" mode="" @click="cut"></image>
+			</view>
+			<view class="center">
+				<view class="item" v-for="(item,index) in upList" :key="index">
+					<u-upload :action="action" style="width: 100%;height: 100%;"
+						@on-success="(res) => handleSuccess(res, index)"
+						@on-remove="(file) => handleRemove(file, index)"></u-upload>
+					<span>{{item.name}}</span>
+				</view>
+				
+			</view>
+			<view class="btn_box">
+				<view class="btn" @click="cut">
+					稍后再传
+				</view>
+				<view class="sub" @click="submit">
+					确认上传
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import configService from '../../../common/service/config.service'
+	export default {
+		name: 'upload',
+		props: {
+			type: {
+				type: Number,
+				default: 0, // 默认值
+			},
+			taskId:{
+				type:String,
+				default:''
+			}
+		},
+		data() {
+			return {
+				getCar: [{
+						name: '正前方',
+						imgUrl: '',
+						imgType: '1'
+					},
+					{
+						name: '车辆后侧',
+						imgUrl: '',
+						imgType: '4'
+					},
+					{
+						name: '车辆左侧',
+						imgUrl: '',
+						imgType: '2'
+					},
+					{
+						name: '车辆右侧',
+						imgUrl: '',
+						imgType: '3'
+					},
+					{
+						name: '驾驶室',
+						imgUrl: '',
+						imgType: '6'
+					},
+					{
+						name: '后排座',
+						imgUrl: '',
+						imgType: '7'
+					},
+					{
+						name: '左前方45度全车照',
+						imgUrl: '',
+						imgType: '5'
+					},
+				],
+				servive:[
+						{
+							name: '服务前',
+							imgUrl: '',
+							imgType: '8'
+						},
+						{
+							name: '服务中',
+							imgUrl: '',
+							imgType: '9'
+						},
+						{
+							name: '服务后',
+							imgUrl: '',
+							imgType: '10'
+						},
+				],
+				upList:[],
+				action: configService.apiUrl + '/sys/common/upload',
+				imgUrl: [],
+				imageHttp: configService.apiUrl + '/', //上传图片前缀+
+			}
+		},
+		methods: {
+			// 上传封面图成功回调
+			handleSuccess(res, index) {
+				const newUrl = this.imageHttp + res.message;
+
+				// 获取当前 imgUrl 字符串
+				let currentimgUrl = this.upList[index].imgUrl;
+				// 如果是第一个文件,直接赋值;否则用逗号拼接
+				currentimgUrl = currentimgUrl ?
+					`${currentimgUrl},${newUrl}` :
+					newUrl;
+				// 更新数据(确保响应式)
+				this.$set(this.upList[index], 'imgUrl', currentimgUrl);
+				console.log(this.upList)
+			},
+			// 移除封面图文件回调
+			handleRemove(index, lists) {
+				this.imgUrl = lists
+			},
+			//上传图片
+			submit(){
+				let data = []
+				this.upList.forEach(item => {
+					if(item.imgUrl == ''){
+						uni.showToast({
+							icon:'none',
+							title:'请上传全部图片'
+						})
+						return
+					}else{
+						item.merchantId = uni.getStorageSync('login_user_info').merchantId,
+						item.merchantName = uni.getStorageSync('login_user_info').merchantName,
+						item.merchantUserId = uni.getStorageSync('login_user_info').id
+						item.businessType = this.type
+						item.taskId = this.taskId
+					}
+				})
+				this.$http.post("/ts/merchant/addImg", this.upList).then(res => {
+					console.log(res)
+					if (res.data.code == 200) {
+						uni.showToast({
+							icon:'none',
+							title:'上传成功'
+						})
+						this.$emit('upSuccess')
+					}
+				})
+			},
+			cut(){
+				this.$emit('cut')
+			}
+		},
+		mounted() {
+			console.log(this.type)
+			this.type=='2' ||this.type=='1' ?this.upList = this.getCar:this.upList = this.servive
+		},
+		onShow() {
+
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.upload {
+		padding: 20px;
+		position: fixed;
+		top: 0;
+		left: 0;
+		background: rgba(0, 0, 0, 0.7);
+		width: 100%;
+		height: 100vh;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		z-index: 9999 !important;
+
+		.content {
+			width: 570rpx;
+			background-color: #fff;
+			border-radius: 12px;
+			overflow: hidden;
+			display: flex;
+			flex-direction: column;
+			padding: 0 24rpx;
+
+			.title {
+				width: 100%;
+				height: 86rpx;
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				font-weight: 600;
+				font-size: 32rpx;
+
+				// background: url('/static/order/upload_bgi.png') no-repeat;
+				// background-size: contain; 
+				image {
+					width: 37rpx;
+					height: 37rpx;
+				}
+			}
+
+			.center {
+				flex: 1;
+				display: flex;
+				flex-wrap: wrap;
+				justify-content: space-between;
+				overflow-y: auto;
+
+				.item {
+					width: 248rpx;
+					height: 150rpx;
+					border-radius: 4rpx;
+					overflow: hidden;
+					position: relative;
+					margin-bottom: 33rpx;
+
+					span {
+						position: absolute;
+						top: 0;
+						left: 0;
+						display: flex;
+						padding: 2px 4px;
+						background: #2D88F4;
+						border-radius: 0px 4px 4px 0px;
+						font-size: 16rpx;
+						color: #FFFFFF;
+						font-weight: normal;
+					}
+				}
+			}
+
+			.btn_box {
+				width: 100%;
+				height: 100rpx;
+				border-top: 1px solid #eeeeee;
+				display: flex;
+				align-items: center;
+				justify-content: space-around;
+
+				.btn {
+					width: 241rpx;
+					height: 68rpx;
+					border-radius: 54rpx;
+					border: 1px solid #CCCCCC;
+					font-size: 28rpx;
+					color: #999999;
+					display: flex;
+					align-items: center;
+					justify-content: space-around;
+				}
+
+				.sub {
+					width: 241rpx;
+					height: 68rpx;
+					background: #449AFF;
+					border-radius: 66rpx;
+					font-size: 28rpx;
+					color: #FFFFFF;
+					display: flex;
+					align-items: center;
+					justify-content: space-around;
+				}
+			}
+		}
+	}
+
+	::v-deep .u-add-wrap {
+		width: 248rpx !important;
+		height: 150rpx !important;
+		margin: 0;
+	}
+</style>

+ 679 - 50
pages/order/index.vue

@@ -6,17 +6,26 @@
 			<view class="head">
 				<!-- <span class="cuIcon-back" @click="back"></span> -->
 				<view class="case">
-					订单
+					<view class="select_type">
+						<div class="tab-item" :class="tabIndex == 0?'active':''"
+							@click="tabIndex=0;productName='';productStatus=0;">普通订单</div>
+						<div class="tab-item" :class="tabIndex == 1?'active':''"
+							@click="tabIndex=1;productName='';productStatus=0;">服务订单</div>
+					</view>
+				</view>
+
+			</view>
+			<view class="manage">
+				<view class="search">
+					<image src="/static/index/search.png" mode=""></image>
+					<u-input type="text" v-model="merchantUserInfo" placeholder="请输入关键词" />
+					<span @click="searchList">搜索</span>
 				</view>
 				<view class="action " @click="selectTime">
 					<view class="cuIcon-filter"></view>
 				</view>
 			</view>
-			<view class="search">
-				<image src="/static/index/search.png" mode=""></image>
-				<u-input type="text" v-model="merchantUserInfo" placeholder="请输入关键词" />
-				<span @click="searchList">搜索</span>
-			</view>
+
 			<view class="select">
 				<view class="type" :class="currentIndex == index?'active':''" v-for="(item,index) in typeList" :key="index"
 					@click="selectType(item,index)">
@@ -24,8 +33,8 @@
 				</view>
 			</view>
 		</view>
-		<mescroll-uni class="list" :fixed="false" ref="mescrollRef" @up="getList" @init="mescrollInit" :use="false">
-			<!-- <view class="order_list"> -->
+		<mescroll-uni class="list" :fixed="false" ref="mescrollRef" @up="getList" @init="mescrollInit" :use="false"
+			v-show="tabIndex ==0">
 			<view class="order_item" v-for="(item,index) in orderList" :key="item.id" @click="geDetail(item)">
 				<view class="order_id">
 					<view class="id_left">
@@ -63,18 +72,130 @@
 					</view>
 				</view>
 			</view>
-			<!-- </view> -->
 		</mescroll-uni>
-			<rangTime ref="rangTime" :mode="mode" :isYear="true" @onSubmit="onEndTimeChange" @cut="cutPopup"/>
+		<!-- 服务订单 -->
+		<mescroll-uni class="list" :fixed="false" ref="mescrollRef" @up="getserviceList" @init="mescrollInit" :use="false"
+			v-show="tabIndex == 1">
+			<view class="service_order" v-for="item in serviceList" :key="item.orderNo" @click="goDetail(item)">
+				<view class="item_title">
+					<span>订单编号:{{item.orderNo}}</span>
+					<span>{{item.status}}</span>
+				</view>
+				<view class="car_id">
+					{{item.licenseNo}}
+					<span>{{item.checkType==0?'上门取车':'送车到站'}}</span>
+				</view>
+				<view class="name">
+					{{item.productName}}
+					<span @click.stop="goGetCar(item)">取车地点</span>
+				</view>
+				<view class="time">
+					<span>{{item.date}}</span>
+					<span> <text>¥</text> {{item.price}}</span>
+				</view>
+				<view class="btn_box">
+					<view class="btn">
+						实况记录
+					</view>
+					<view class="btn" style="margin-left: 16rpx;">
+						联系客服
+					</view>
+					<view class="btn border">
+						联系客户
+					</view>
+					<view class="btn join" @click.stop="receive(item)" v-if="item.statusCode ==2">
+						接单
+					</view>
+					<!-- 送车到站按钮区域开始item.checkType==1 -->
+					<view class="" v-if="item.checkType==1" style="flex:1;display: flex;justify-content: space-around;">
+						<view class="btn join" @click.stop="collect(item)" v-if="item.statusCode ==3">
+							确认收车
+						</view>
+						<view class="btn join" @click.stop="finish(item)" v-if="item.statusCode ==4">
+							检测完成
+						</view>
+						<view class="btn join" @click.stop="takeCar(item)" v-if="item.statusCode ==5 && item.flowStatus =='12'">
+							确认取车
+						</view>
+						<view class="btn join" @click.stop="evaluate(item)" v-if="item.statusCode ==5 && item.flowStatus =='17'">
+							去评价
+						</view>
+					</view>
+					<!-- 送车到站按钮区域结束-->
+					<!-- 上门取车按钮区域开始item.checkType==0 -->
+					<view class="" v-if="item.checkType == 0" style="flex:1;display: flex;justify-content: space-around;">
+						<view class="btn join" @click.stop="goGetCar(item)" v-if="item.statusCode ==5 && item.flowStatus == 4">
+							去取车
+						</view>
+						<view class="btn join" @click.stop="collect(item)" v-if="item.statusCode ==5 && item.flowStatus == 5">
+							确认取车
+						</view>
+						<view class="btn join" @click.stop="finish(item)" v-if="item.statusCode ==4 && item.flowStatus==7">
+							检测完成
+						</view>
+						<view class="btn join" @click.stop="goAlso(item)" v-if="item.statusCode ==3 && item.flowStatus==12">
+							去送车
+						</view>
+						<view class="btn join" @click.stop="delivered(item)" v-if="item.statusCode ==3&& item.flowStatus==13">
+							车已送达
+						</view>
+						<view class="btn join" @click.stop="evaluate(item)" v-if="item.statusCode ==5 && item.flowStatus =='17'">
+							去评价
+						</view>
+					</view>
+					<!-- 上门取车按钮区域结束-->
+				</view>
+				<view class="add_service" @click.stop="addService(item)" v-if="item.statusCode==4 ||item.statusCode==3 ">
+					<span>添加收费服务</span>
+				</view>
+				<view class="child_order">
+					<view class="row" v-for="row in item.children" :key="row.orderNo">
+						<view class="row_title">
+							<span>订单编号:{{row.orderNo}}</span>
+							<span class="row_status">{{row.status}}</span>
+						</view>
+						<view class="row_name">
+							{{row.productName}}
+						</view>
+						<view class="row_price">
+							<span><text>¥</text>{{row.price}}</span>
+							<view class="row_detail" @click.stop="lookDetail(row)">
+								服务明细
+							</view>
+						</view>
+						<view class="row_time">
+							{{row.date}}
+						</view>
+						<view class="row_btn" @click.stop="editProject(row)"
+							v-if="row.statusCode == '0' || row.statusCode == '11' ">
+							<span>修改收费服务</span>
+						</view>
+					</view>
+				</view>
+			</view>
+		</mescroll-uni>
+		<rangTime ref="rangTime" :mode="mode" :isYear="true" @onSubmit="onEndTimeChange" @cut="cutPopup" />
+		<receive @cut="isReceive =false" v-if="isReceive" />
+		<serviceDetail :subOrderId="subOrderId" @cut="cutsubOrderId" v-if="isServiceDeatil" />
+		<upload :type="uptype" :taskId="taskId" v-if="isUpload" @cut="isUpload = false" @upSuccess="upSuccess" />
+		<evaluate :userId="userId" :taskId="taskId" v-if="iseEvaluate" @cut="cutEvaluate" />
 	</view>
 
 </template>
 
 <script>
+	import receive from '../order/components/receiveOrder.vue'
+	import upload from '../order/components/upload.vue'
+	import evaluate from '../order/components/evaluate.vue'
+	import serviceDetail from '../order/components/serviceDetail.vue'
 	import rangTime from '../../components/dengrq-datetime-picker/dateSelector/index.vue'
 	export default {
 		components: {
 			rangTime,
+			receive,
+			serviceDetail,
+			upload,
+			evaluate
 		},
 		data() {
 			return {
@@ -82,8 +203,8 @@
 				mode: 1,
 				currentIndex: 0,
 				merchantId: '',
-				buyStartTime:'',
-				buyEndTime:'',
+				buyStartTime: '',
+				buyEndTime: '',
 				typeList: [{
 						type: '',
 						name: '全部'
@@ -102,7 +223,7 @@
 					},
 					{
 						type: 4,
-						name: '退款/售后'
+						name: '售后'
 					}
 				],
 				orderList: [],
@@ -118,6 +239,19 @@
 						tip: '暂无相关数据'
 					}
 				},
+				tabIndex: 1,
+				serviceList: [],
+				isReceive: false, //接单成功弹窗
+				isServiceDeatil: false, //服务明细弹窗
+				isUpload: false, //上传图片弹窗显隐
+				uptype: '', //上传图片类型
+				taskId: '', //上传图片传值
+				checkType: '', //上传图片修改状态用
+				subOrderId: '', //服务明细传递数据
+				paramState: '', //上传完图片修改状态
+				serveType: '', //服务类型
+				iseEvaluate: false, //评价弹窗显隐
+				userId: '' //评论用户id
 			}
 		},
 		methods: {
@@ -135,7 +269,7 @@
 				}
 				this.getList(page)
 			},
-			cutPopup(){
+			cutPopup() {
 				this.isYear = false
 				uni.showTabBar()
 			},
@@ -149,7 +283,7 @@
 				this.currentIndex = index
 				this.state = item.type
 				this.orderList = []
-				this.mescroll.resetUpScroll(); 
+				this.mescroll.resetUpScroll();
 				// let page = {
 				// 	num: 1,
 				// 	size: 10
@@ -168,7 +302,13 @@
 			goRecord(item) {
 				console.log(item)
 				uni.navigateTo({
-					url: '/pages/order/record?orderId='+item.orderId
+					url: '/pages/order/record?orderId=' + item.orderId
+				})
+			},
+			//跳转至服务订单详情页
+			goDetail(item) {
+				uni.navigateTo({
+					url: '/pages/order/serviceOrder/orderDetail?taskId=' + item.taskId + '&checkType=' + item.checkType
 				})
 			},
 			getList(page) {
@@ -178,18 +318,18 @@
 					pageNo: page.num,
 					state: this.state,
 					merchantUserInfo: this.merchantUserInfo,
-					buyStartTime:this.buyStartTime,
-					buyEndTime:this.buyEndTime
+					buyStartTime: this.buyStartTime,
+					buyEndTime: this.buyEndTime
 				}
 				this.$http.post("/app/order/locaOrder/list", data).then(res => {
+					console.log(res)
 					if (res.data.code == 200) {
 						this.orderList = this.orderList.concat(res.data.result.records)
 						this.mescroll.endSuccess(res.data.result.records.length, res.data.result.total);
 						uni.showTabBar()
-					}
-					else {
-						this.orderList = []
+					} else {
 						this.mescroll.endErr()
+						this.orderList = []
 					}
 				}).catch(() => {
 					this.mescroll.endErr()
@@ -200,6 +340,231 @@
 					url: '/pages/order/details?orderId=' + item.orderId
 				})
 			},
+			getserviceList(page) {
+				let data = {
+					merchantId: this.merchantId,
+					pageSize: page.size,
+					pageNo: page.num,
+				}
+				this.$http.post("/ts/merchant/serviceOrder", data).then(res => {
+						if (res.data.code == 200) {
+							this.serviceList = res.data.result.records
+							this.mescroll.endSuccess(res.data.result.records.length, res.data.result.total);
+						}
+					})
+					.catch(() => {
+						this.mescroll.endErr()
+					})
+
+			},
+			// 接单
+			receive(item) {
+				console.log(item)
+				let data = {
+					taskId: item.taskId,
+					checkType: item.checkType,
+					paramState: '04', //商户接单成功
+					serveType: '01'
+				}
+				this.$http.post("/ts/merchant/update/Serve", data).then(res => {
+					if (res.data.code == 200) {
+						this.isReceive = true
+					}
+				})
+			},
+			//收车上传照片
+			collect(item) {
+				console.log(item)
+				this.taskId = item.taskId
+				this.checkType = item.checkType
+				//0 取车,1送车
+				if (item.checkType == 0) {
+					if (item.statusCode == 5) {
+						this.uptype = 1
+					}
+				} else if (item.checkType == 1) {
+					//客户送车,商户收车
+					if (item.statusCode == 3) {
+						this.uptype = 2
+					}
+				}
+				this.isUpload = true
+				// this.upSuccess('07','01')
+				this.paramState = '07'
+				this.serveType = '01'
+			},
+			//送车到站————检测完成
+			upSuccess() {
+
+				let data = {
+					taskId: this.taskId,
+					checkType: this.checkType,
+					paramState: this.paramState, //商户上传图片成功
+					serveType: this.serveType
+				}
+				this.$http.post("/ts/merchant/update/Serve", data).then(res => {
+					if (res.data.code == 200) {
+						this.isUpload = false
+						let page = {
+							num: 1,
+							size: 10
+						}
+						this.getserviceList(page)
+					}
+				})
+			},
+			//检测完成上传检测图片
+			finish(item) {
+				console.log(item)
+				this.taskId = item.taskId
+				this.checkType = item.checkType
+				//0 取车,1送车
+				if (item.checkType == 0) {
+					if (item.statusCode == 5) {
+						this.uptype = 1
+					}
+
+				} else if (item.checkType == 1) {
+					//客户送车,商户收车
+					if (item.statusCode == 4) {
+						this.uptype = 3
+
+					}
+				}
+				this.isUpload = true
+				this.paramState = '12'
+				this.serveType = '01'
+			},
+			//送车到站--确认取车
+			takeCar(item) {
+				console.log(item)
+				let data = {
+					taskId: item.taskId,
+					checkType: item.checkType,
+					paramState: '14', //
+					serveType: '01'
+				}
+				this.$http.post("/ts/merchant/update/Serve", data).then(res => {
+					if (res.data.code == 200) {
+						this.isUpload = false
+						let page = {
+							num: 1,
+							size: 10
+						}
+						this.getserviceList(page)
+					}
+				})
+			},
+			//评价弹窗显示
+			evaluate(item) {
+				this.iseEvaluate = true
+				this.taskId = item.evaluate
+				this.userId = item.userId
+				uni.hideTabBar()
+			},
+			//评价弹窗隐藏
+			cutEvaluate() {
+				this.iseEvaluate = false
+				uni.showTabBar()
+			},
+			//查看收费服务明细
+			lookDetail(item) {
+				this.subOrderId = item.orderNo
+				this.isServiceDeatil = true
+				uni.hideTabBar()
+			},
+			//修改服务明细
+			editProject(row) {
+				console.log(row)
+				uni.navigateTo({
+					url: '/pages/order/serviceOrder/project?orderNo=' + row.orderNo + '&checkType=' + row.checkType +
+						'&taskId=' + row.taskId + '&productName=' + row.productName +
+						'&type=' + 0
+				})
+			},
+			cutsubOrderId() {
+				this.isServiceDeatil = false
+				uni.showTabBar()
+			},
+			//商户去取车
+			goGetCar(item) {
+				console.log(item)
+				let data = {
+					taskId: item.taskId,
+					checkType: item.checkType,
+					paramState: '05', //商户接单成功
+					serveType: '01'
+				}
+				let that = this
+				// uni.navigateTo({
+				// 		url: (window.location.href = `https://uri.amap.com/navigation?to=${item.userLongitude},${item.userLatitude},${item.carAddress}&mode=car&policy=1&src=https://gawl.gazhcs.com/wap/index.html&callnative=0`)
+				// })
+				uni.openLocation({
+					longitude: Number(item.userLongitude),
+					latitude: Number(item.userLatitude),
+					name: item.carAddres, // 位置名称
+					// address: e.F_Address, // 位置地点
+					success: function(res) {
+						console.log('打开系统位置地图成功')
+						that.$http.post("/ts/merchant/update/Serve", data).then(res => {
+							if (res.data.code == 200) {
+								// this.isReceive = true
+								let page = {
+									num: 1,
+									size: 10
+								}
+								that.getserviceList(page)
+							}
+						})
+					},
+					fail: function(error) {
+						console.log(error)
+					},
+				})
+			},
+			//添加收费服务
+			addService(item) {
+				uni.navigateTo({
+					url: '/pages/order/serviceOrder/project?checkType=' + item.checkType + '&taskId=' + item.taskId +
+						'&orderNo=' + item.orderNo + '&productName=' + item.productName + '&type=' + 1
+				})
+			},
+			//去送车修改状态
+			goAlso(item){
+				let data = {
+					taskId: item.taskId,
+					checkType: item.checkType,
+					paramState: '13', //商户点击去送车
+					serveType: '01'
+				}
+				this.$http.post("/ts/merchant/update/Serve", data).then(res => {
+					if (res.data.code == 200) {
+						let page = {
+							num: 1,
+							size: 10
+						}
+						this.getserviceList(page)
+					}
+				})
+			},
+			//商户点击车已送达
+			delivered(item){
+				let data = {
+					taskId: item.taskId,
+					checkType: item.checkType,
+					paramState: '14', //商户点击车已送达
+					serveType: '01'
+				}
+				this.$http.post("/ts/merchant/update/Serve", data).then(res => {
+					if (res.data.code == 200) {
+						let page = {
+							num: 1,
+							size: 10
+						}
+						this.getserviceList(page)
+					}
+				})
+			}
 		},
 		mounted() {
 			this.mescroll.optDown.use = false
@@ -220,7 +585,7 @@
 <style lang="scss" scoped>
 	.order {
 		width: 100%;
-		height:100vh;
+		height: 100vh;
 		background: #F7F8FC;
 		display: flex;
 		flex-direction: column;
@@ -229,15 +594,16 @@
 		.fix {
 			width: 100%;
 			height: auto;
-			background: #F7F8FC;
+			background: #ffffff;
 			position: sticky;
 			top: 0px;
+			border-bottom: 1px solid #EEEEEE;
 
 			/*#ifdef APP-PLUS*/
 			.top {
 				width: 100%;
 				height: var(--status-bar-height);
-				background: linear-gradient(87deg, #E2F4F8 0%, #A3CDFF 100%), linear-gradient(to bottom, #FFFFFF, #FFFFFF);
+				background: #FFFFFF;
 			}
 
 			/*#endif*/
@@ -249,7 +615,7 @@
 				align-items: center;
 				background: #fff;
 				position: relative;
-				background: linear-gradient(87deg, #E2F4F8 0%, #A3CDFF 100%), linear-gradient(to bottom, #FFFFFF, #FFFFFF);
+				background: #FFFFFF;
 
 				.cuIcon-back {
 					font-size: 40rpx;
@@ -257,53 +623,94 @@
 				}
 
 				.case {
+					width: 100%;
 					position: absolute;
 					left: 50%;
 					transform: translateX(-50%);
 					font-size: 36rpx;
 					font-weight: 600;
-				}
 
-				.action {
-					position: absolute;
-					right: 24rpx;
+					.select_type {
+						display: flex;
+						justify-content: space-around;
+
+						.tab-item {
+							position: relative;
+							padding: 18rpx 0;
+							cursor: pointer;
+							color: #333;
+							font-weight: 400;
+							font-size: 28rpx;
+						}
+
+						.tab-item.active {
+							color: #449AFF;
+							font-weight: 600;
+						}
+
+						.tab-item.active::after {
+							content: '';
+							position: absolute;
+							bottom: -28px;
+							left: 35%;
+							width: 38rpx;
+							height: 100%;
+							background: url(/static/product/tab-act.png) no-repeat;
+							background-size: contain;
+						}
+					}
+
 				}
+
+				// .action {
+				// 	position: absolute;
+				// 	right: 24rpx;
+				// }
 			}
 
-			.search {
-				width: 93%;
-				height: 55rpx;
-				background: #F7F8FC;
-				border-radius: 12rpx;
-				padding: 0rpx 24rpx;
+			.manage {
 				display: flex;
 				align-items: center;
-				justify-content: space-between;
-				margin: 16rpx auto 0px;
+				width: 100%;
+				padding: 0 24rpx;
 
-				image {
-					width: 36rpx;
-					height: 36rpx;
-				}
+				.search {
+					width: 93%;
+					height: 55rpx;
+					background: #F7F8FC;
+					border-radius: 12rpx;
+					padding: 0rpx 24rpx;
+					display: flex;
+					align-items: center;
+					justify-content: space-between;
+					margin-right: 20rpx;
+					// margin: 16rpx auto 0px;
 
-				input {
-					// height: 36rpx;
-					font-size: 26rpx;
-				}
+					image {
+						width: 36rpx;
+						height: 36rpx;
+					}
 
-				span {
-					font-size: 26rpx;
-					color: #333333;
+					input {
+						// height: 36rpx;
+						font-size: 26rpx;
+					}
+
+					span {
+						font-size: 26rpx;
+						color: #333333;
+					}
 				}
 			}
 
 			.select {
 				width: 100%;
-				height: 78rpx;
+				height: 85rpx;
 				display: flex;
 				align-items: center;
 				justify-content: space-between;
 				padding: 0px 24rpx;
+				background-color: #FFFFFF;
 
 				.type {
 					height: 54rpx;
@@ -322,9 +729,9 @@
 		.list {
 			flex: 1;
 			width: 100%;
-			margin-top: 20rpx;
 			overflow-y: auto;
 			padding-bottom: var(--window-bottom);
+
 			.order_item {
 				width: 100%;
 				background-color: #fff;
@@ -409,6 +816,228 @@
 				}
 			}
 
+			.service_order {
+				background: #FFFFFF;
+				padding: 22rpx 32rpx;
+				margin-bottom: 20rpx;
+
+				.item_title {
+					width: 100%;
+					display: flex;
+					justify-content: space-between;
+					margin-bottom: 22rpx;
+
+					span {
+						font-size: 26rpx;
+						color: #8B91A4;
+					}
+				}
+
+				.car_id {
+					font-size: 30rpx;
+					color: #333333;
+					font-weight: 600;
+					display: flex;
+					align-items: center;
+					margin-bottom: 8rpx;
+
+					span {
+						width: 120rpx;
+						height: 40rpx;
+						background: #FDF6F2;
+						border-radius: 8rpx;
+						font-size: 24rpx;
+						line-height: 40rpx;
+						color: #FD4912;
+						text-align: center;
+						margin-left: 16rpx;
+					}
+				}
+
+				.name {
+					width: 100%;
+					height: 62rpx;
+					background: linear-gradient(90deg, #F8F9FB 0%, #FBFCFD 100%);
+					border-radius: 12rpx;
+					padding: 12rpx;
+					font-size: 26rpx;
+					color: #333333;
+					font-weight: 600;
+					margin-bottom: 8rpx;
+					display: flex;
+					justify-content: space-between;
+					align-items: center;
+					span{
+						display: inline-block;
+						width: 152rpx;
+						height: 50rpx;
+						background: rgba(240,118,29,0.05);
+						border-radius: 35rpx;
+						border: 1px solid #F0761D;
+						font-size: 26rpx;
+						color: #F0761D;
+						text-align: center;
+						line-height: 50rpx;
+					}
+				}
+
+				.time {
+					display: flex;
+					align-items: center;
+					justify-content: space-between;
+					font-size: 24rpx;
+					color: #8A91A8;
+
+					span {
+						text {
+							font-size: 16rpx;
+						}
+
+						color: #FD4912;
+					}
+				}
+
+				.btn_box {
+					display: flex;
+					align-items: center;
+					justify-content: end;
+					margin-top: 20rpx;
+
+					.btn {
+						height: 51rpx;
+						padding: 6rpx 24rpx;
+						border-radius: 61rpx;
+						font-size: 26rpx;
+						border: 1px solid #CCCCCC;
+						display: flex;
+						align-items: center;
+					}
+
+					.border {
+						border: 1px solid #2D88F4;
+						color: #2D88F4;
+						margin-left: 16rpx;
+					}
+
+					.join {
+						background: #2D88F4;
+						color: #FFFFFF;
+						border: none;
+					}
+				}
+
+				.add_service {
+					width: 100%;
+					height: 100rpx;
+					background: linear-gradient(180deg, #EEF7FF 0%, #F6FBFF 100%);
+					border-radius: 12rpx;
+					margin-top: 20rpx;
+					display: flex;
+					align-items: center;
+					justify-content: center;
+
+					span {
+						width: 204rpx;
+						height: 50rpx;
+						background: linear-gradient(90deg, #53A2FF 0%, #2589FF 100%);
+						border-radius: 49rpx;
+						font-size: 26rpx;
+						color: #FFFFFF;
+						display: flex;
+						align-items: center;
+						justify-content: center;
+					}
+				}
+
+				.child_order {
+					width: 100%;
+
+					border-radius: 12rpx;
+
+					margin: 20rpx 0px;
+
+					.row {
+						margin-bottom: 20rpx;
+						background: linear-gradient(180deg, #EEF7FF 0%, #F6FBFF 100%);
+						padding: 10rpx 12rpx;
+
+						.row_title {
+							width: 100%;
+							display: flex;
+							align-items: center;
+							justify-content: space-between;
+							font-size: 26rpx;
+							color: #8B91A4;
+							margin-bottom: 20rpx;
+
+							.row_status {
+								font-size: 28rpx;
+								color: #FF9900;
+							}
+						}
+
+						.row_name {
+							font-size: 26rpx;
+							color: #333333;
+							margin-bottom: 7rpx;
+							font-weight: 600;
+						}
+
+						.row_price {
+							display: flex;
+							align-items: center;
+							justify-content: space-between;
+							margin-bottom: 7rpx;
+
+							span {
+								font-size: 26rpx;
+								color: #FD4912;
+								font-weight: 600;
+
+								text {
+									font-size: 16rpx;
+								}
+							}
+
+							.row_detail {
+								padding: 6rpx 24rpx;
+								background: #FFFFFF;
+								border-radius: 61rpx;
+								border: 1px solid #2D88F4;
+								font-size: 24rpx;
+								color: #2D88F4;
+								display: flex;
+								align-items: center;
+								justify-content: space-between;
+							}
+						}
+
+						.row_time {
+							font-size: 22rpx;
+							color: #888888;
+							margin-bottom: 16rpx;
+						}
+
+						.row_btn {
+							display: flex;
+							align-items: center;
+							justify-content: end;
+
+							span {
+								width: 204rpx;
+								height: 50rpx;
+								background: #2D88F4;
+								border-radius: 8rpx;
+								display: flex;
+								align-items: center;
+								justify-content: center;
+								font-size: 26rpx;
+								color: #FFFFFF;
+							}
+						}
+					}
+				}
+			}
 		}
 	}
 </style>

+ 247 - 0
pages/order/serviceOrder/live.vue

@@ -0,0 +1,247 @@
+<template>
+	<view class="live">
+		<view class="top">
+		</view>
+		<view class="head">
+			<span class="cuIcon-back" @click="back"></span>
+			<view class="case">
+				实况记录
+			</view>
+		</view>
+		<view class="list">
+			<view class="car_data">
+				<view class="fat" v-for="item in form" :key="item.id">
+					<view class="fat_title">{{item.name}}</view>
+					<view class="sun" v-for="row in item.categoryList" :key="row.id">
+						{{row.name}}
+						<span>{{row.names}}</span>
+					</view>
+				</view>
+			</view>
+		<!-- 备注信息 -->
+			<view class="car_data">
+				<view class="fat">
+					<view class="fat_title">备注信息</view>
+					<view class="message" v-for="item in historyList" :key="item.id">
+						<view class="top">
+							<view class="left">
+								<view class="img">
+									<image :src="item.logo" mode=""></image>
+								</view>
+								<view class="name">
+									{{item.merchantName}}<br/>
+									<span>{{item.createTime}}</span>
+								</view>
+							</view>
+							<view class="play">
+								<image src="/static/play.png" mode=""></image><br/>
+								12.03
+							</view>
+						</view>
+						<view class="content">
+							{{item.msgContent}}
+						</view>
+					</view>
+				</view>
+				
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				taskId: 1,
+				form: [],
+				historyList: [{
+					time: '2025.2.12 13:22:30',
+					url: 'https://pic.rmb.bdstatic.com/bjh/news/9e4e3aca4eb384cf0ad43e26cae97135.jpeg',
+					name: '用户昵称',
+					content: '额外强制消费',
+					type: 1,
+				}, ],
+			}
+		},
+		methods: {
+			//返回
+			back() {
+				uni.navigateBack({
+					delta: 1
+				});
+			},
+			getLive() {
+				console.log(this.taskId)
+				this.$http.get("/merchant/localTsCustomerServiceDict/list?taskId=" + this.taskId + '&source=' + '1').then(
+					res => {
+						if (res.data.code == 200) {
+							this.form = res.data.result
+							console.log(this.form)
+							this.form.forEach(item => {
+								item.categoryList.forEach(row => {
+									const idSet = new Set(row.idList);
+
+									// Find the names that match the ids in idList
+									const matchedNames = row.itemList
+										.filter(item => idSet.has(item.id)) // Filter items where the id matches
+										.map(item => item.name) // Extract the name from the matching items
+										.join(','); // Join names with commas
+
+									// Assign the concatenated names to the row
+									row.names = matchedNames;
+								})
+							})
+						}
+					})
+			},
+			getHistroyList() {
+				let data = {
+					taskId: this.taskId
+				}
+				this.$http.post('/merchant/localTsCustomerServiceTaskMsg/queryList',data).then((res) => {
+						console.log(res);
+						this.historyList = res.data.result
+				})
+			},
+		},
+		onLoad(options) {
+			this.taskId = options.taskId
+		},
+		mounted() {
+			this.getLive()
+			this.getHistroyList()
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.live {
+		width: 100vw;
+		height: 100vh;
+		background: #F8F8FA;
+		display: flex;
+		flex-direction: column;
+		// overflow-y: auto;
+
+		/*#ifdef APP-PLUS*/
+		.top {
+			width: 100%;
+			height: var(--status-bar-height);
+			background: #FFFFFF;
+		}
+
+		/*#endif*/
+		.head {
+			width: 100%;
+			height: 112rpx;
+			padding: 20rpx;
+			display: flex;
+			align-items: center;
+			background: #FFFFFF;
+			position: relative;
+
+			.cuIcon-back {
+				font-size: 40rpx;
+				margin-right: 40rpx;
+			}
+
+			.case {
+				position: absolute;
+				left: 50%;
+				transform: translateX(-50%);
+				font-size: 36rpx;
+				font-weight: 600;
+			}
+		}
+
+		.list {
+			flex: 1;
+			overflow-y: auto;
+			background: #F7F7F7;
+			padding: 24rpx 30rpx;
+
+			.car_data {
+				width: 100%;
+				
+
+				.fat {
+					background: #FFFFFF;
+					padding: 20rpx;
+					margin-bottom: 20rpx;
+					border-radius: 10rpx;
+
+					.fat_title {
+						font-weight: 600;
+						font-size: 30rpx;
+						color: #333333;
+						margin-bottom: 20rpx;
+					}
+
+					.sun {
+						width: 100%;
+						height: 73rpx;
+						border-bottom: 1px solid #eee;
+						display: flex;
+						align-items: center;
+						justify-content: space-between;
+						font-size: 28rpx;
+						color: #666666;
+
+						span {
+							color: #181818;
+						}
+					}
+					.message{
+						border-bottom: 1px solid #eee;
+						padding-bottom: 16rpx;
+						margin-bottom: 16rpx;
+						.top{
+							width: 100%;
+							display: flex;
+							align-items: center;
+							justify-content: space-between;
+							margin-bottom: 12rpx;
+							.left{
+								display: flex;
+								align-items: center;
+								.img{
+									width: 68rpx;
+									height: 68rpx;
+									border-radius: 8rpx;
+									overflow: hidden;
+									margin-right: 12rpx;
+									image{
+										width: 100%;
+										height: 100%;
+									}
+								}
+								.name{
+									font-size: 28rpx;
+									color: #000000;
+									span{
+										font-size: 24rpx;
+										color: #999999
+									}
+								}
+							}
+						
+							.play{
+								font-size: 24rpx;
+								color: #000000;
+								text-align: center;
+								image{
+									width: 40rpx;
+									height: 40rpx;
+								}
+							}
+						}
+						.content{
+							font-size: 26rpx;
+						}
+					}
+				}
+			}
+		}
+	}
+</style>

+ 797 - 0
pages/order/serviceOrder/orderDetail.vue

@@ -0,0 +1,797 @@
+<template>
+	<view class="order_detail">
+		<view class="top">
+		</view>
+		<view class="head">
+			<span class="cuIcon-back" @click="back"></span>
+			<view class="case">
+				订单详情
+			</view>
+		</view>
+		<view class="over">
+			<view class="status_box">
+				<view class="status">
+					{{form.status}}
+				</view>
+				<span>{{form.flowRecordList[0].content?form.flowRecordList[0].content:''}}</span>
+			</view>
+			<!-- 送车到站显示信息开始 -->
+			<view class="car_data" v-if="form.checkType == 1">
+				<view class="car_id">
+					{{form.licenseNo}}
+					<span>{{form.carType?form.carType:'小型轿车'}}</span>
+				</view>
+				<view class="model">
+					{{form.brandModel}}
+				</view>
+				<view class="car_name">
+					<span>用户姓名:{{form.contactsName}}</span>
+					<view class="call">
+						<image src="/static/order/call.png" mode=""></image>
+						联系客户
+					</view>
+				</view>
+			</view>
+			<!-- 送车到站显示信息结束 -->
+			<!-- 上门取车显示信息开始 -->
+			<view class="car_data" v-if="form.checkType == 0">
+				<view class="car_id user_name">
+					<span>用户姓名:{{form.contactsName}}</span>
+					<span class="call">
+						<image src="/static/order/call.png" mode=""></image> 联系客户
+					</span>
+				</view>
+				<view class="car_address">
+					<view class="address">
+						送/取车地址:{{form.carAddress}}
+						<image src="/static/order/address.png" mode=""></image>
+					</view>
+					<view class="car_license">
+						车牌号:{{form.licenseNo}}
+					</view>
+				</view>
+			</view>
+			<!-- 上门取车显示信息结束 -->
+			<view class="product">
+				<view class="fat_product">
+					<view class="product_img">
+						<image src="/static/login3.png" mode=""></image>
+					</view>
+					<view class="product_name">
+						{{form.productName}}
+						<span><text>¥</text>{{form.price}}</span>
+					</view>
+				</view>
+				<view class="sun_product">
+					<view class="item" v-for="item in form.childrenOrder" :key="item.orderNo">
+						<view class="sun_name">
+							{{item.productName}}
+						</view>
+						<view class="sun_price">
+							<span><text>¥</text>{{item.price}}</span>
+							<view class="look" @click="lookDetail(item)">
+								服务明细
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+			<!-- 时间轴区域 -->
+			<view class="time_line">
+				<u-time-line>
+					<u-time-line-item node-top="2" v-for="(item,index) in form.flowRecordList" :key="index">
+						<template v-slot:content>
+							<view class="center">
+								<view class="left_title">
+									<view :class="index == 0?'title':''">
+										{{item.content}}
+									</view>
+									<span>{{item.time}}</span>
+								</view>
+								<view class="button">
+									<u-button size="mini" shape="square" v-if="index+1 == form.flowRecordList.length"
+										@click="goLive">实况记录</u-button>
+									<u-button size="mini" shape="square" v-if="item.content=='商户确认收车'" @click="goPhoto(2)">车辆交接照片</u-button>
+									<u-button size="mini" shape="square" v-if="item.content=='检测完毕,等待用户取车'" @click="goPhoto(3)">服务照片</u-button>
+								</view>
+							</view>
+						</template>
+					</u-time-line-item>
+				</u-time-line>
+			</view>
+			<!-- 订单信息区域 -->
+			<view class="order_data">
+				<view class="order_item">
+					<view class="item_title">
+						车辆信息
+					</view>
+					<view class="item_child">
+						<span>车牌号:</span>
+						<view class="center">
+							{{form.licenseNo}}
+						</view>
+
+					</view>
+					<view class="item_child">
+						<span>车辆信息:</span>
+						<view class="center">
+							{{form.carType?form.carType:'小型轿车'}}
+						</view>
+					</view>
+					<view class="item_child">
+						<span>品牌型号:</span>
+						<view class="center">
+							{{form.brandModel}}
+						</view>
+					</view>
+				</view>
+				<view class="order_item">
+					<view class="item_title">
+						用户信息
+					</view>
+					<view class="item_child">
+						<span>姓名:</span>
+						<view class="center">
+							{{form.contactsName}}
+						</view>
+					</view>
+					<view class="item_child">
+						<span>联系方式:</span>
+						<view class="center">
+							{{form.contactsMerPhone}}
+						</view>
+					</view>
+				</view>
+				<view class="order_item">
+					<view class="item_title">
+						站点信息
+					</view>
+					<view class="item_child">
+						<span>站点名称:</span>
+						<view class="center">
+							{{form.contactsName}}
+						</view>
+					</view>
+					<view class="item_child">
+						<span>站点地址:</span>
+						<view class="center">
+							{{form.contactsMerPhone}}
+						</view>
+					</view>
+				</view>
+				<view class="order_item">
+					<view class="item_title">
+						订单信息
+					</view>
+					<view class="item_child">
+						<span>订单号:</span>
+						<view class="center">
+							{{form.orderNo}}
+						</view>
+					</view>
+					<view class="item_child">
+						<span>下单时间:</span>
+						<view class="center">
+							{{form.orderTime}}
+						</view>
+					</view>
+				</view>
+				<view class="order_item" v-for="item in form.childrenOrder" :key="item.orderNo">
+					<view class="item_title">
+						附订单信息
+					</view>
+					<view class="item_child" >
+						<span>订单号:</span>
+						<view class="center">
+							{{item.orderNo}}
+						</view>
+					</view>
+					<view class="item_child">
+						<span>下单时间:</span>
+						<view class="center">
+							{{item.orderTime}}
+						</view>
+					</view>
+				</view>
+			</view>
+
+		</view>
+		<view class="btn">
+			<view class="customer">
+				联系客服
+			</view>
+			<view class="accept" @click="receive" v-if="form.statusCode == 2">
+				接单
+			</view>
+			<view class="func" v-if="form.checkType == 1">
+				<view class="accept" @click="collect" v-if="form.statusCode ==3">
+					确认收车
+				</view>
+				<view class="accept" @click="goProject" v-if=" form.statusCode ==4">
+					添加收费服务
+				</view>
+				<view class="accept" @click="finish" v-if="form.statusCode ==4">
+					检测完成
+				</view>
+				<view class="accept" @click="takeCar" v-if="form.flowStatus =='12'&& form.statusCode ==5">
+					确认取车
+				</view>
+				<view class="accept" @click="evaluate" v-if="form.flowStatus =='14'&& form.statusCode ==5">
+					去评价
+				</view>
+			</view>
+			
+		</view>
+		<receive v-if="isSuccess" @cut="refresh" />
+		<upload :type="uptype" :taskId="taskId" v-if="isUpload" @cut="isUpload = false" @upSuccess="upSuccess" />
+		<serviceDetail :subOrderId="subOrderId" @cut="isServiceDeatil =false" v-if="isServiceDeatil" />
+		<evaluate :userId="userId" :taskId="taskId" v-if="iseEvaluate" @cut="cutEvaluate"/>
+	</view>
+</template>
+
+<script>
+	import receive from '../../order/components/receiveOrder.vue'
+	import upload from '../../order/components/upload.vue'
+	import evaluate from '../../order/components/evaluate.vue'
+	import serviceDetail from '../../order/components/serviceDetail.vue'
+	export default {
+		components: {
+			receive,
+			upload,
+			serviceDetail,
+			evaluate
+		},
+		data() {
+			return {
+				taskId: '',
+				checkType: '',
+				form: {},
+				list: [],
+				isSuccess: false,
+				isUpload: false, //上传图片弹窗显隐
+				uptype: '', //上传图片类型
+				checkType: '', //上传图片修改状态用
+				isServiceDeatil: false,
+				subOrderId: '',
+				iseEvaluate:false,//评论弹窗显隐
+				userId:''//传值给评论弹窗
+
+			}
+		},
+		methods: {
+			//返回
+			back() {
+				uni.navigateBack({
+					delta: 1
+				});
+			},
+			refresh() {
+				this.isSuccess = false
+				this.getDeatil()
+			},
+			//获取详情
+			getDeatil() {
+				this.$http.get("/ts/merchant/details?taskId=" + this.taskId).then(res => {
+					if (res.data.code == 200) {
+						this.form = res.data.result
+						console.log(this.form)
+					}
+				})
+			},
+			// 查看实况记录
+			goLive() {
+				uni.navigateTo({
+					url: '/pages/order/serviceOrder/live?taskId=' + this.taskId
+				})
+			},
+			// 查看图片
+			goPhoto(type) {
+				uni.navigateTo({
+					url: '/pages/order/serviceOrder/photo?taskId='+this.taskId+'&businessType='+type
+				})
+			},
+			// 接单
+			receive() {
+				let data = {
+					taskId: this.taskId,
+					checkType: this.checkType,
+					paramState: '04',
+					serveType: '01'
+				}
+				this.$http.post("/ts/merchant/update/Serve", data).then(res => {
+					console.log(res)
+					if (res.data.code == 200) {
+						this.isSuccess = true
+					}
+				})
+			},
+			//收车上传照片
+			collect() {
+				this.taskId = this.form.taskId
+				this.checkType = this.form.checkType
+				//0 取车,1送车
+				if (this.form.checkType == 0) {
+
+				} else if (this.form.checkType == 1) {
+					//客户送车,商户收车
+					if (this.form.statusCode == 3) {
+						this.uptype = 2
+
+					}
+				}
+				this.isUpload = true
+			},
+			//送车到站————收车上传图片后修改状态
+			upSuccess(){
+				let data = {
+					taskId: this.taskId,
+					checkType: this.checkType,
+					paramState: '07',//商户上传图片成功
+					serveType: '01'
+				}
+				this.$http.post("/ts/merchant/update/Serve", data).then(res => {
+					if (res.data.code == 200) {
+						this.isUpload = false
+						this.getDeatil()
+					}
+				})
+			},
+			//检测完成上传检测图片
+			finish(item){
+				// this.taskId = item.taskId
+				// this.checkType = item.checkType
+				//0 取车,1送车
+				if (item.checkType == 0) {
+					
+				}else if(item.checkType == 1 ){
+					//客户送车,商户收车
+					if (item.statusCode == 4) {
+						this.uptype=3
+						
+					}
+				}
+				this.isUpload = true
+				// this.paramState = '12'
+				// this.serveType = '01'
+				this.getDeatil()
+			},
+			//送车到站--确认取车
+			takeCar(item){
+				let data = {
+					taskId: this.form.taskId,
+					checkType: this.form.checkType,
+					paramState: '14',//
+					serveType: '01'
+				}
+				this.$http.post("/ts/merchant/update/Serve", data).then(res => {
+					if (res.data.code == 200) {
+						this.isUpload = false
+						let page = {
+							num: 1,
+							size: 10
+						}
+						this.getDeatil(page)
+					}
+				})
+			},
+			//跳转至服务项目页面
+			goProject() {
+				console.log(this.form)
+				uni.navigateTo({
+					url: '/pages/order/serviceOrder/project?checkType=' + this.form.checkType + '&taskId=' + this.form.taskId +
+						'&orderNo=' + this.form.orderNo + '&productName=' + this.form.productName + '&type=' + 1
+				})
+			},
+			//查看收费服务明细
+			lookDetail(item) {
+				this.subOrderId = item.orderNo
+				this.isServiceDeatil = true
+			},
+			//评价弹窗显示
+			evaluate(){
+				this.iseEvaluate = true
+				this.userId =this.form.userId
+			},
+			cutEvaluate(){
+				this.iseEvaluate = false
+				this.getDeatil()
+			}
+		},
+		mounted() {
+			this.getDeatil()
+		},
+		onLoad(options) {
+			this.taskId = options.taskId
+			this.checkType = options.checkType
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.order_detail {
+		width: 100vw;
+		height: 100vh;
+		background: #F8F8FA;
+		display: flex;
+		flex-direction: column;
+		// overflow-y: auto;
+
+		/*#ifdef APP-PLUS*/
+		.top {
+			width: 100%;
+			height: var(--status-bar-height);
+			background: #FFFFFF;
+		}
+
+		/*#endif*/
+		.head {
+			width: 100%;
+			height: 112rpx;
+			padding: 20rpx;
+			display: flex;
+			align-items: center;
+			background: #FFFFFF;
+			position: relative;
+
+			.cuIcon-back {
+				font-size: 40rpx;
+				margin-right: 40rpx;
+			}
+
+			.case {
+				position: absolute;
+				left: 50%;
+				transform: translateX(-50%);
+				font-size: 36rpx;
+				font-weight: 600;
+			}
+		}
+
+		.over {
+			padding: 0 24rpx;
+			overflow-y: auto;
+			flex: 1;
+
+			.status_box {
+				width: 100%;
+				font-size: 36rpx;
+				font-weight: 600;
+				line-height: 42rpx;
+				margin: 20rpx 0;
+
+				span {
+					font-size: 24rpx;
+					color: #999999;
+					line-height: 28rpx;
+				}
+			}
+
+			.car_data {
+				width: 100%;
+				padding: 20RPX;
+				background: #FFFFFF;
+				border-radius: 12rpx;
+
+				.car_id {
+					font-size: 30rpx;
+					font-weight: 600;
+
+					span {
+						display: inline-block;
+						width: 120rpx;
+						height: 40rpx;
+						background: #F3F3F3;
+						border-radius: 8rpx;
+						font-weight: 400;
+						font-size: 24rpx;
+						color: #8D92A2;
+						text-align: center;
+						line-height: 40rpx;
+						margin-left: 20rpx;
+					}
+				}
+
+				.user_name {
+					display: flex;
+					align-items: center;
+					justify-content: space-between;
+
+					span {
+						width: auto;
+						display: flex;
+						align-items: center;
+						justify-content: center;
+						font-weight: 600;
+						font-size: 30rpx;
+						color: #333333;
+						background: none;
+						margin: 0;
+					}
+
+					.call {
+						background: #F4F9FE;
+						border-radius: 8rpx;
+						padding: 6rpx 12rpx;
+						font-size: 24rpx;
+						color: #2D88F4;
+
+						image {
+							width: 28rpx;
+							height: 28rpx;
+							margin-right: 8rpx;
+						}
+					}
+				}
+
+				.model {
+					font-size: 26rpx;
+					color: #666666;
+					margin-top: 12rpx;
+				}
+
+				.car_name {
+					border-top: 1px solid #eeeeee;
+					padding-top: 16rpx;
+					margin-top: 12rpx;
+					font-size: 26rpx;
+					font-weight: 600;
+					color: #333333;
+					display: flex;
+					align-items: center;
+					justify-content: space-between;
+
+					.call {
+						background: #F4F9FE;
+						border-radius: 8rpx;
+						padding: 6rpx 12rpx;
+						display: flex;
+						align-items: center;
+						justify-content: center;
+
+						image {
+							width: 28rpx;
+							height: 28rpx;
+							margin-right: 8rpx;
+						}
+					}
+
+				}
+
+				.car_address {
+					.address {
+						width: 100%;
+						display: flex;
+						align-items: center;
+						justify-content: space-between;
+
+						image {
+							width: 44rpx;
+							height: 44rpx;
+							margin-left: 18rpx;
+						}
+					}
+
+					.car_license {
+						font-weight: 600;
+						font-size: 26rpx;
+						color: #333333;
+						margin-top: 12rpx;
+					}
+				}
+			}
+
+			.product {
+				width: 100%;
+				background-color: #fff;
+				margin-top: 16rpx;
+				padding: 20rpx 32rpx;
+				margin-bottom: 16rpx;
+
+				.fat_product {
+					width: 100%;
+					display: flex;
+					align-items: center;
+
+					.product_img {
+						width: 132rpx;
+						height: 132rpx;
+						border-radius: 12rpx;
+						overflow: hidden;
+						margin-right: 16rpx;
+
+						image {
+							width: 100%;
+							height: 100%;
+						}
+					}
+
+					.product_name {
+						height: 132rpx;
+						font-size: 28rpx;
+						color: #333333;
+						display: flex;
+						flex-direction: column;
+						justify-content: space-between;
+
+						span {
+							color: #FD4912;
+							font-weight: 600;
+							font-size: 28rpx;
+
+							text {
+								font-size: 22rpx;
+							}
+						}
+					}
+				}
+
+				.sun_product {
+					width: 100%;
+					// height: 126rpx;
+					
+				
+					border-radius: 12rpx;
+					margin-top: 20rpx;
+					.item{
+						margin-bottom: 20rpx;
+						padding: 12rpx 16rpx;
+						background: linear-gradient(180deg, #EEF7FF 0%, #F6FBFF 100%);
+					}
+
+					.sun_name {
+						font-weight: 600;
+						font-size: 26rpx;
+					}
+
+					.sun_price {
+						display: flex;
+						align-items: center;
+						justify-content: space-between;
+
+						span {
+							font-weight: 600;
+							font-size: 22rpx;
+							color: #FD4912;
+
+							tetx {
+								font-size: 18rpx;
+							}
+						}
+
+						.look {
+							width: 144rpx;
+							height: 48rpx;
+							background: #FFFFFF;
+							border-radius: 61rpx;
+							border: 1px solid #2D88F4;
+							font-size: 24rpx;
+							color: #2D88F4;
+							text-align: center;
+							line-height: 48rpx;
+						}
+					}
+				}
+
+
+			}
+
+			.time_line {
+				background: #FFFFFF;
+				border-radius: 16px;
+				padding: 16rpx 32rpx;
+
+				.center {
+					display: flex;
+					align-items: center;
+					justify-content: space-between;
+
+					.left_title {
+						font-weight: 600;
+
+						.title {
+							font-size: 28rpx;
+							color: #2D88F4;
+						}
+
+						span {
+							font-size: 24rpx;
+							color: #666666;
+						}
+					}
+				}
+			}
+
+			.order_data {
+				background-color: #FFFFFF;
+				padding: 16rpx 32rpx;
+				border-radius: 16rpx;
+				margin-top: 16rpx;
+
+				.order_item {
+					border-bottom: 1px solid #EEEEEE;
+					padding-bottom: 12rpx;
+					margin-bottom: 16rpx;
+
+					.item_title {
+						font-weight: 600;
+						font-size: 26rpx;
+						color: #333333;
+
+					}
+
+					.item_child {
+						margin-top: 12rpx;
+						margin-right: 16rpx;
+						display: flex;
+						align-items: center;
+
+						span {
+							width: 130rpx;
+							font-size: 26rpx;
+							color: #666666;
+						}
+
+						.center {
+							flex: 1;
+						}
+					}
+				}
+			}
+		}
+
+		.btn {
+			width: 100%;
+			height: 109rpx;
+			background: #FFFFFF;
+			display: flex;
+			align-items: center;
+			justify-content: end;
+			margin-top: 10rpx;
+			font-size: 28rpx;
+			padding-right: 24rpx;
+			.customer {
+				border-radius: 49rpx;
+				border: 1px solid #2D88F4;
+				padding: 14rpx 32rpx;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				color: #2D88F4;
+			}
+
+			.accept {
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				padding: 14rpx 32rpx;
+				background: linear-gradient(90deg, #77B6FF 0%, #449AFF 100%);
+				border-radius: 49rpx;
+				margin: 0 24rpx;
+				color: #FFFFFF;
+			}
+			.func{
+				// flex: 1;
+				display: flex;
+				align-items: center;
+				justify-content: end;
+				.accept {
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					padding: 14rpx 22rpx;
+					background: linear-gradient(90deg, #77B6FF 0%, #449AFF 100%);
+					border-radius: 49rpx;
+					// margin: 0 24rpx;
+					color: #FFFFFF;
+				}
+			}
+		}
+
+
+
+		::v-deep .u-dot {
+			background-color: #2D88F4;
+		}
+
+	}
+</style>

+ 201 - 0
pages/order/serviceOrder/photo.vue

@@ -0,0 +1,201 @@
+<template>
+	<view class="photo">
+		<view class="top">
+		</view>
+		<view class="head">
+			<span class="cuIcon-back" @click="back"></span>
+			<view class="case">
+				车辆照片
+			</view>
+		</view>
+		<view class="content">
+			<view class="img" v-for="(item,index) in imgList" :key="index">
+				<image :src="item.imgUrl" mode=""></image>
+				<span v-if="item.imgType == 1">正前方</span>
+				<span v-if="item.imgType == 4">车辆后侧</span>
+				<span v-if="item.imgType == 2">车辆左侧</span>
+				<span v-if="item.imgType == 3">车辆右侧</span>
+				<span v-if="item.imgType == 6">驾驶室</span>
+				<span v-if="item.imgType == 5">左前方45度全车照</span>
+				<span v-if="item.imgType == 7">后排座</span>
+				<span v-if="item.imgType == 8">服务前</span>
+				<span v-if="item.imgType == 9">服务中</span>
+				<span v-if="item.imgType == 10">服务后</span>
+			</view>
+		</view>
+		<view class="btn">
+			<view class="back" @click="back">
+				返回
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default{
+		data(){
+			return{
+				taskId:'',
+				businessType:'',
+				imgList:[
+					{
+						url:'/static/blue.png',
+						address:'正前方'
+					},
+					{
+						url:'/static/blue.png',
+						address:'车辆后侧'
+					},
+					{
+						url:'/static/blue.png',
+						address:'车辆左侧'
+					},
+					{
+						url:'/static/blue.png',
+						address:'正前方'
+					},
+					{
+						url:'/static/blue.png',
+						address:'正前方'
+					},
+					{
+						url:'/static/blue.png',
+						address:'正前方'
+					},
+					{
+						url:'/static/blue.png',
+						address:'正前方'
+					}
+				]
+			}
+		},
+		methods:{
+			//返回
+			back() {
+				uni.navigateBack({
+					delta: 1
+				});
+			},
+			//查看照片
+			getImg(){
+				let data = {
+					taskId : this.taskId,
+					businessType : Number(this.businessType)
+				}
+				this.$http.get("/ts/merchant/selectImg?taskId="+this.taskId+'&businessType='+Number(this.businessType)).then(res => {
+					console.log(res)
+					if (res.data.code == 200) {
+						// this.isSuccess = true
+						this.imgList = res.data.result
+						
+					}
+				})
+			}
+		},
+		onLoad(options) {
+			this.taskId = options.taskId
+			this.businessType = options.businessType
+		},
+		onShow() {
+			this.getImg()
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.photo{
+		width: 100vw;
+		height: 100vh;
+		background: #F8F8FA;
+		display: flex;
+		flex-direction: column;
+		// justify-content: space-between;
+		// overflow-y: auto;
+
+		/*#ifdef APP-PLUS*/
+		.top {
+			width: 100%;
+			height: var(--status-bar-height);
+			background: #FFFFFF;
+		}
+
+		/*#endif*/
+		.head {
+			width: 100%;
+			height: 112rpx;
+			padding: 20rpx;
+			display: flex;
+			align-items: center;
+			background: #FFFFFF;
+			position: relative;
+
+			.cuIcon-back {
+				font-size: 40rpx;
+				margin-right: 40rpx;
+			}
+
+			.case {
+				position: absolute;
+				left: 50%;
+				transform: translateX(-50%);
+				font-size: 36rpx;
+				font-weight: 600;
+			}
+		}
+		.content{
+			flex: 1;
+			overflow-y: auto;
+			padding: 24rpx 28rpx;
+			display: flex;
+			justify-content: space-between;
+			flex-wrap: wrap;
+			 // gap: 24rpx;
+			.img{
+				width: 320rpx;
+				height: 194rpx;
+				border-radius: 4rpx;
+				overflow: hidden;
+				position: relative;
+				margin-bottom: 33rpx;
+				display: flex;
+				image{
+					width: 100%;
+					height: 100%;
+				}
+				span{
+					position: absolute;
+					display: block;
+					padding: 2px 4px;
+					height: 34rpx;
+					background: #2D88F4;
+					border-radius: 0px 4rpx 4rpx 0px;
+					font-size: 20rpx;
+					color: #FFFFFF;
+					z-index: 999999;
+				}
+			}
+		}
+		.btn{
+			width: 100%;
+			height: 112rpx;
+			background: #FFFFFF;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			margin-top: 10rpx;
+			font-size: 28rpx;
+			padding: 24rpx 16rpx;
+			.back{
+				width: 100%;
+				height: 100%;
+				background: linear-gradient( 90deg, #77B6FF 0%, #449AFF 100%);
+				border-radius: 53rpx;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				font-size: 28rpx;
+				color: #FFFFFF;
+			}
+		}
+	}
+</style>

+ 324 - 0
pages/order/serviceOrder/project.vue

@@ -0,0 +1,324 @@
+<template>
+	<view class="project">
+		<view class="top">
+		</view>
+		<view class="head">
+			<span class="cuIcon-back" @click="back"></span>
+			<view class="case">
+				<!-- 选择服务项目 -->
+				{{type==0?'修改服务项目':'选择服务项目'}}
+			</view>
+		</view>
+		<view class="content">
+			<view class="option" v-for="(item,index) in projectList" :key="index">
+				<view class="name">
+					<span>{{item.itemName}}</span>
+					<u-switch v-model="item.checked" size="50rpx" @change="change(item)"></u-switch>
+				</view>
+				<view class="price" v-if="item.checked">
+					<span>服务价格</span>
+					<span><u-input v-model="item.itemMoney" type="number"
+							style="width: 260rpx;height: 62rpx;background-color: #f7f8fc;padding: 0rpx 20rpx;margin-right: 16rpx;" />元</span>
+				</view>
+				<view class="explain" v-if="item.checked">
+					<span>服务说明</span>
+					<view class="text">
+						<textarea v-model="item.itemContent" placeholder="请简要说明收费项目内容" maxlength="100" cols="30" rows="10"
+							style="width: 100%;height: 100%;padding: 12rpx 16rpx;font-size: 26rpx;"></textarea>
+						<span>{{item.itemContent.length}}/100</span>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="btn_box">
+			<view class="customer" @click="back">
+				取消
+			</view>
+			<view class="accept" @click="submit">
+				确定
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				checkType: '',
+				taskId: '',
+				orderNo: '',
+				productName: '',
+				subOrderId: '', //修改用
+				projectList: [{
+						itemName: '车辆维修费',
+						checked: false,
+						delFlag: '',
+						itemMoney: '',
+						itemContent: ''
+					},
+					{
+						itemName: '喷漆费',
+						checked: false,
+						delFlag: '',
+						itemMoney: '',
+						itemContent: ''
+					},
+					{
+						itemName: '零配件',
+						checked: false,
+						delFlag: '',
+						itemMoney: '',
+						itemContent: ''
+					},
+					{
+						itemName: '车辆清洁费',
+						checked: false,
+						delFlag: '',
+						itemMoney: '',
+						itemContent: ''
+					},
+					{
+						itemName: '其他费用',
+						checked: false,
+						delFlag: '',
+						itemMoney: '',
+						itemContent: ''
+					}
+				],
+				type: '',
+				editId:''
+			}
+		},
+		methods: {
+			//返回
+			back() {
+				uni.navigateBack({
+					delta: 1
+				});
+			},
+			//关闭时置空
+			change(item) {
+				console.log(item)
+				if (!item.checked) {
+					item.itemContent = ''
+					item.itemMoney = ''
+				}
+			},
+			submit() {
+				console.log(this.checkType)
+				let list = []
+				this.projectList.forEach(item => {
+					if (item.checked) {
+						item.delFlag = 0
+					} else {
+						item.delFlag = 1
+						item.itemMoney = 0
+					}
+					list.push({
+						delFlag: item.delFlag,
+						itemContent: item.itemContent,
+						itemMoney: item.itemMoney,
+						itemName: item.itemName
+					})
+				})
+				let data = {
+					checkType: this.checkType,
+					taskId: this.taskId,
+					orderNo: this.orderNo,
+					orderName: this.productName,
+					merchantId: uni.getStorageSync('login_user_info').merchantId,
+					id : this.editId,
+					// id : uni.getStorageSync('login_user_info').id,
+					addMerchantServiceVoList: list
+				}
+				this.$http.post("/ts/merchant/addPaidService", data).then(res => {
+					console.log(res)
+					if (res.data.code == 200) {
+						// this.$emit('upSuccess')
+						uni.showToast({
+							icon: 'none',
+							title: '添加成功'
+						})
+						this.back()
+					}
+				})
+			},
+			//回显
+			getChange() {
+				this.$http.get("/ts/merchant/servicesDetails?subOrderId="+ this.orderNo).then(res => {
+					if (res.data.code == 200) {
+						
+						this.editId = res.data.result.id
+						res.data.result.serviceDetails.forEach(item=> {
+							item.delFlag == 0?item.checked = true:item.checked = false
+						})
+						this.projectList = res.data.result.serviceDetails
+					}
+				})
+			}
+		},
+		onLoad(options) {
+			console.log(options)
+			this.checkType = options.checkType
+			this.taskId = options.taskId
+			this.orderNo = options.orderNo
+			this.productName = options.productName
+			this.type = options.type
+			if (this.type == 0) {
+				this.getChange()
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.project {
+		width: 100vw;
+		height: 100vh;
+		background: #F8F8FA;
+		display: flex;
+		flex-direction: column;
+		// overflow-y: auto;
+
+		/*#ifdef APP-PLUS*/
+		.top {
+			width: 100%;
+			height: var(--status-bar-height);
+			background: #FFFFFF;
+		}
+
+		/*#endif*/
+		.head {
+			width: 100%;
+			height: 112rpx;
+			padding: 20rpx;
+			display: flex;
+			align-items: center;
+			background: #FFFFFF;
+			position: relative;
+			border-bottom: 1px solid #F0F3F5;
+
+			.cuIcon-back {
+				font-size: 40rpx;
+				margin-right: 40rpx;
+			}
+
+			.case {
+				position: absolute;
+				left: 50%;
+				transform: translateX(-50%);
+				font-size: 36rpx;
+				font-weight: 600;
+			}
+		}
+
+		.content {
+			padding: 0 24rpx;
+			overflow-y: auto;
+			flex: 1;
+
+			.option {
+				width: 100%;
+				// height: 86rpx;
+				padding: 20rpx 32rpx;
+
+				background: #FFFFFF;
+				box-shadow: 0px 2rpx 8rpx 0px rgba(214, 225, 237, 0.1);
+				border-radius: 16rpx;
+				margin-bottom: 16rpx;
+
+				.name {
+					width: 100%;
+					display: flex;
+					align-items: center;
+					justify-content: space-between;
+					margin-bottom: 16rpx;
+				}
+
+				.price {
+					width: 100%;
+					height: 78rpx;
+					border-bottom: 1px solid #eeeeee;
+					display: flex;
+					align-items: start;
+					justify-content: space-between;
+
+					span {
+						display: flex;
+						align-items: center;
+					}
+				}
+
+				.explain {
+					margin-top: 16rpx;
+
+					.text {
+						width: 100%;
+						height: 164rpx;
+						background-color: #f7f8fc;
+						margin-top: 12rpx;
+						position: relative;
+
+						span {
+							position: absolute;
+							bottom: 12rpx;
+							right: 16rpx;
+							font-size: 24rpx;
+							color: #999999;
+						}
+					}
+
+				}
+			}
+		}
+
+		.btn_box {
+			width: 100%;
+			height: 109rpx;
+			background: #FFFFFF;
+			display: flex;
+			align-items: center;
+			justify-content: space-around;
+			margin-top: 10rpx;
+			font-size: 28rpx;
+
+			.customer {
+				border-radius: 49rpx;
+				border: 1px solid #2D88F4;
+				width: 324rpx;
+				height: 76rpx;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				color: #2D88F4;
+			}
+
+			.accept {
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				width: 324rpx;
+				height: 76rpx;
+				background: linear-gradient(90deg, #77B6FF 0%, #449AFF 100%);
+				border-radius: 49rpx;
+				color: #FFFFFF;
+			}
+		}
+	}
+
+	::v-deep .custom-switch {
+		width: 52rpx;
+		/* 自定义宽度 */
+		height: 27rpx;
+		/* 自定义高度 */
+
+	}
+
+	::v-deep .u-switch__node .node-class {
+		width: 25rpx !important;
+		/* 自定义按钮大小 */
+		height: 25rpx !important;
+		/* 自定义按钮大小 */
+	}
+</style>

+ 8 - 0
pages/order/serviceOrder/webview.vue

@@ -0,0 +1,8 @@
+<template>
+</template>
+
+<script>
+</script>
+
+<style>
+</style>

+ 409 - 0
pages/product/checkMap.vue

@@ -0,0 +1,409 @@
+<template>
+	<view class="map">
+		<view class="head">
+			<view class="top"></view>
+			<view class="title">
+				<span class="cuIcon-back" @click="back"></span>
+				<span class="text">选择检测站</span>
+				<span class="sub" @click="submit">确定</span>
+			</view>
+		</view>
+		<view class="search">
+			<view class="left" @click="show = true">
+				<image src="/static/index/address.png" mode=""></image>
+				<span>{{city}}</span>
+				<u-icon size="24" name="arrow-down-fill"></u-icon>
+			</view>
+			<view class="right">
+				<u-icon size="24" name="search" style="margin-right: 10rpx;"></u-icon>
+				<u-input v-model="searchWords" @confirm="searchFn" />
+			</view>
+		</view>
+		<!-- <u-select v-model="show" mode="mutil-column-auto" :list="cityList" label-name="areaCname" value-name="id" child-name="child" @confirm="confirm">	</u-select> -->
+		<u-select v-model="show" mode="mutil-column-auto" :list="cityList" label-name="areaCname" value-name="id"
+			child-name="child" @confirm="confirm"></u-select>
+		<view id="amap" class="amap" style="width: 100%; height: 40vh;" :pointList="pointList"
+			:change:pointList="ModuleMap.setParkList">
+
+		</view>
+		<view class="list">
+			<view class="tip" v-for="(item,index) in dataTips" :key="index" @click="select(item)">
+				<view class="left">
+					<span><text v-show="item.updateTime">已选</text>{{item.inspectionStationName}}</span>
+					<span>{{item.detailedAddress}}</span>
+				</view>
+				<view class="right">
+					<image src="/static/coupon/danxuan.png" mode="" v-if="item.check"></image>
+					<image src="/static/product/round.png" mode="" v-else></image>
+				</view>
+			</view>
+		</view>
+
+	</view>
+</template>
+
+<script>
+	var amapFile = require('@/static/map/amap-wx.130.js'); //如:..­/..­/libs/amap-wx.js
+	// 创建地图
+	var myAmapFun = new amapFile.AMapWX({
+		key: '915d1d1ed40dc41450eda1d930ea1b2d'
+	});
+	export default {
+		data() {
+			return {
+				city: '太原',
+				searchWords: '',
+				show: false,
+				cityList: [],
+				pointList: null,
+				dataTips: [],
+				selectList: [], //已选择监测站
+			}
+		},
+		methods: {
+			//返回
+			back() {
+				uni.navigateBack({
+					delta: 1
+				});
+			},
+			//城市列表
+			getCityList() {
+				this.$http.post("/sys/area/queryTreeSecondLevel").then(res => {
+					if (res.data.code == 200) {
+						this.cityList = res.data.result
+						console.log(this.cityList)
+					}
+				})
+			},
+			confirm(e) {
+				console.log(e)
+			},
+			// 根据内容进行检索
+			searchFn() {
+				this.getShopList()
+				console.log("根据地址检索", this.searchWords);
+				myAmapFun.getInputtips({
+					keywords: this.searchWords,
+					location: '',
+					success: (data) => {
+
+						if (data && data.tips) {
+							console.log(data.tips)
+							data.tips.forEach(item => {
+								item.check = false,
+									item.detailedAddress = item.address,
+									item.inspectionStationName = item.name,
+									item.locality = item.district
+								this.dataTips.push(item);
+							})
+
+							console.log(111, this.dataTips);
+						}
+					},
+					fail: data => {
+						console.log(222, data);
+					}
+				})
+			},
+			//选中地址
+			select(item) {
+				console.log(item)
+				item.check = !item.check
+			},
+			//保存勾选检车站
+			submit() {
+				let localTsMerchantLinkInspection = []
+				this.dataTips.forEach(item => {
+					if (item.check) {
+						const locationParts = item.location ? item.location.split(",") : [];
+						localTsMerchantLinkInspection.push({
+							country: item.adcode,
+							detailedAddress: item.detailedAddress,
+							inspectionStationName: item.inspectionStationName,
+							locality: item.locality,
+
+							inspectionStationLongitude: item.inspectionStationLongitude || (locationParts[0] || null),
+							inspectionStationLatitude: item.inspectionStationLatitude || (locationParts[1] || null),
+							// inspectionStationLongitude: item.location.split(",")[0] || item.inspectionStationLongitude,
+
+							// inspectionStationLatitude: item.location.split(",")[1] || item.inspectionStationLatitude,
+							merchantId: uni.getStorageSync('login_user_info').merchantId
+
+						})
+					}
+
+				})
+				this.$http.post("/ts/localTsMerchantLinkInspection/add", localTsMerchantLinkInspection).then(res => {
+					console.log(res)
+					if (res.data.code == 200) {
+						uni.showToast({
+							icon: 'none',
+							title: '添加成功'
+						})
+						this.back()
+					}
+				})
+			},
+			//获取已选择收费站
+			getShopList() {
+				let merchantId = uni.getStorageSync('login_user_info').merchantId
+				this.$http.get("/ts/localTsMerchantLinkInspection/list?merchantId=" + merchantId, ).then(res => {
+					console.log(res)
+					if (res.data.code == 200) {
+						res.data.result.forEach(item => {
+							item.check = true
+						})
+						this.dataTips = res.data.result
+					}
+				})
+			}
+		},
+		mounted() {
+			this.getCityList()
+			this.getShopList()
+		}
+	}
+</script>
+<script module="ModuleMap" lang="renderjs">
+	export default {
+		data() {
+			return {
+				map: null,
+				layer: null,
+				markers: '',
+				isExistImplement: false,
+				markerId: '',
+				parkList: [],
+			}
+		},
+		watch: {
+			//监听位置数据的变化,并初始化地图(有位置数据则默认给个标点)
+			parkList(v) {
+				setTimeout(() => {
+					if (window.AMap) {
+						this.initAmap(v);
+					} else {
+						const script = document.createElement('script');
+						script.src =
+							'https://webapi.amap.com/maps?v=1.4.15&key=220880dab49e4a565afbf0bd989af006'; //这里是自己申请的高德的key
+						script.onload = () => {
+							this.initAmap(v);
+						}
+						document.head.appendChild(script);
+					}
+				});
+			}
+		},
+		mounted() {
+
+		},
+		methods: {
+
+			initAmap(marker) {
+				this.map = new AMap.Map('amap', {
+					resizeEnable: true,
+					center: [112.557429, 37.90923], //中心点坐标
+					zoom: 10, //显示的缩放级别
+					// zooms: [6, 30], //地图显示的缩放级别范围
+				})
+				//地图创建完成 标注点
+				this.map.on("complete", () => {
+					if (marker && marker.length) {
+						this.markers = new AMap.Marker({
+							// icon: new AMap.Icon({
+							// 	image: 'static/img/map.png',
+							// 	size: new AMap.Size(30, 34), //图标所处区域大小
+							// 	imageSize: new AMap.Size(30, 34) //图标大小
+							// }),
+							position: [marker[0], marker[1]],
+							offset: new AMap.Pixel(-15, -30)
+						});
+						this.markers.setMap(this.map);
+						this.map.setCenter(marker)
+					}
+				})
+				//点击事件
+				this.map.on("click", (e) => {
+					if (this.markers) {
+						this.markers.setMap(null);
+						this.markers = null;
+					}
+					if (!this.markers) {
+						this.markers = new AMap.Marker({
+							// icon: new AMap.Icon({
+							// 	image: 'static/img/map.png',
+							// 	size: new AMap.Size(30, 34), //图标所处区域大小
+							// 	imageSize: new AMap.Size(30, 34) //图标大小
+							// }),
+							position: [e.lnglat.lng, e.lnglat.lat],
+							offset: new AMap.Pixel(-15, -30)
+						});
+						this.markers.setMap(this.map);
+						let str = e.lnglat.lng + ':' + e.lnglat.lat
+						//地图点击事件 将位置信息传到上面的markerClick函数中
+						this.$ownerInstance.callMethod('markerClick', str)
+					}
+					// this.createLabelsLayer();
+				})
+			},
+			//接收传入的位置数据
+			setParkList(newValue, oldValue, ownerInstance, instance) {
+				this.parkList = newValue;
+			},
+		}
+	}
+</script>
+<style lang="scss" scoped>
+	.map {
+		width: 100vw;
+		height: 100vh;
+		display: flex;
+		flex-direction: column;
+
+		.head {
+			background: linear-gradient(87deg, #FFFFFF 0%, #A3CDFF 100%), linear-gradient(360deg, #FFFFFF 0%, rgba(255, 255, 255, 0) 100%);
+
+			/*#ifdef APP-PLUS*/
+			.top {
+				width: 100%;
+				height: var(--status-bar-height);
+			}
+
+			/*#endif*/
+			.title {
+				width: 100%;
+				height: 112rpx;
+				padding: 20rpx;
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				position: relative;
+
+				.text {
+					font-weight: 600;
+					font-size: 36rpx;
+				}
+
+				.sub {
+					display: flex;
+					width: 104rpx;
+					height: 49rpx;
+					background: #2D88F4;
+					border-radius: 8rpx;
+					align-items: center;
+					justify-content: center;
+					font-size: 28rpx;
+					color: #FFFFFF;
+				}
+
+				.cuIcon-back {
+					font-size: 40rpx;
+					margin-right: 40rpx;
+				}
+
+				.case {
+					position: absolute;
+					left: 50%;
+					transform: translateX(-50%);
+					font-size: 36rpx;
+					font-weight: 600;
+				}
+			}
+		}
+
+		.search {
+			width: 100%;
+			height: 80rpx;
+			background: #FFFFFF;
+			border-radius: 8rpx;
+			border: 1px solid rgba(255, 255, 255, 0.1);
+			padding: 20rpx 24rpx;
+			display: flex;
+			align-items: center;
+
+			.left {
+				display: flex;
+				align-items: center;
+
+				image {
+					width: 40rpx;
+					height: 40rpx;
+				}
+
+				span {
+					font-weight: 600;
+					font-size: 28rpx;
+					color: #181818;
+					margin: 0 10rpx;
+				}
+			}
+
+			.right {
+				flex: 1;
+				height: 58rpx;
+				margin-left: 20rpx;
+				background: #F6F7F9;
+				border-radius: 33rpx;
+				display: flex;
+				align-items: center;
+				padding: 12rpx 20rpx;
+
+			}
+		}
+
+		.list {
+			width: 98%;
+			margin: 0 auto;
+			flex: 1;
+			overflow-y: auto;
+			background-color: #ffffff;
+			padding: 8rpx 20rpx;
+
+			.tip {
+				width: 100%;
+				height: 124rpx;
+				border-bottom: 1px solid #848484;
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+
+				.left {
+					font-weight: 500;
+					font-size: 28rpx;
+					display: flex;
+					flex-direction: column;
+					
+					span {
+						font-weight: 500;
+						font-size: 24rpx;
+						color: #666666;
+						display: flex;
+						align-items: center;
+						text{
+							display: flex;
+							align-items: center;
+							justify-content: center;
+							width: 80rpx;
+							height: 43rpx;
+							background: rgba(253,73,18,0.05);
+							border-radius: 4rpx ;
+							font-size: 24rpx;
+							color: #FD4912;
+							margin-right: 12rpx;
+						}
+					}
+				}
+
+				.right {
+					image {
+						width: 40rpx;
+						height: 40rpx;
+					}
+				}
+			}
+		}
+
+
+	}
+</style>

+ 23 - 1
pages/product/index.vue

@@ -81,10 +81,14 @@
 					<view class="delist" @click.stop="sell(item)" v-if="item.productStatus==0">
 						上架
 					</view>
+					<view class="delist select" @click.stop="goSelect(item)" >
+						选择检测站
+					</view>
 					<view class="delist" @click.stop="delist(item)" v-if="item.productStatus==1">
 						下架
 					</view>
-					<view class="edit delist" @click.stop="edit(item)">
+					<!-- 年审代办 商品不能编辑 categoryId==‘1909434886438043649’ -->
+					<view class="edit delist" @click.stop="edit(item)" v-if="item.categoryId !== '1909434886438043649'">
 						编辑
 					</view>
 				</view>
@@ -401,6 +405,12 @@
 					}
 				});
 			},
+			//跳转至选择检测站
+			goSelect(item){
+				uni.navigateTo({
+					url:'/pages/product/checkMap'
+				})
+			},
 			getStatus() {
 				this.$http.get("/app/product/statusCount?merchantId=" + this.merchantId+'&isPlatform='+this.tabIndex ).then(res => {
 					if (res.data.code == 200) {
@@ -761,6 +771,18 @@
 						font-size: 26rpx;
 						color: #666666;
 					}
+					.select{
+						width: 178rpx;
+						height: 50rpx;
+						background: rgba(68,154,255,0.05);
+						border-radius: 8rpx;
+						border: 1px solid #449AFF;
+						font-size: 26rpx;
+						color: #449AFF;
+						text-align: center;
+						line-height: 50rpx;
+						margin-right: 20rpx;
+					}
 
 					.edit {
 						margin-left: 20rpx;

BIN
static/desktop.png


BIN
static/order/address.png


BIN
static/order/call.png


BIN
static/order/upload_bgi.png


BIN
static/pause.png


BIN
static/play.png