Browse Source

Merge branch 'master' of http://git.ringzle.com:3000/htcwl/hotelHomestayWx

2912631854@qq.com 9 months ago
parent
commit
08aca0ae22

+ 6 - 1
App.vue

@@ -66,7 +66,8 @@
 
 <style lang="scss">
 	/* 注意要写在第一行,同时给style标签加入lang="scss"属性 */
-	@import "@/uni_modules/uview-ui/index.scss";
+	@import "@/uni_modules/uview-ui/index.scss";
+	@import "@/static/iconfont.css";
 
 	.visibleItemCount {
 		z-index: 99999999999 !important;
@@ -85,5 +86,9 @@
 		font-size: 24rpx;
 		width: 100%;
 		height: 100%;
+	}
+	
+	::v-deep .u-icon__icon{
+		
 	}
 </style>

+ 2 - 2
components/uNavBar1/index.vue

@@ -79,9 +79,9 @@
 <style lang="scss" scoped>
 	::v-deep .u-nav-slot {
 		display: flex;
-		padding: 8rpx 16rpx;
+		padding: 8rpx 16rpx 8rpx 0;
 		width: 150rpx;
-		background-color: rgba(0, 0, 0, 0.2);
+		// background-color: rgba(0, 0, 0, 0.2);
 		border-radius: 30rpx;
 		color: #fff;
 	}

+ 17 - 1
manifest.json

@@ -1,6 +1,6 @@
 {
     "name" : "嵊泗商户端",
-    "appid" : "__UNI__3A1C8AF",
+    "appid" : "__UNI__40A92BD",
     "description" : "",
     "versionName" : "1.0.0",
     "versionCode" : "100",
@@ -89,6 +89,22 @@
                     }
                 }
             }
+        },
+        "nativePlugins" : {
+            "LcReader" : {
+                "__plugin_info__" : {
+                    "name" : "LcReader",
+                    "description" : "身份证插件",
+                    "platforms" : "Android",
+                    "url" : "",
+                    "android_package_name" : "",
+                    "ios_bundle_id" : "",
+                    "isCloud" : false,
+                    "bought" : -1,
+                    "pid" : "",
+                    "parameters" : {}
+                }
+            }
         }
     },
     /* 快应用特有相关 */

BIN
nativeplugins/LcReader/android/libs/arm64-v8a/libwlt2bmp.so


BIN
nativeplugins/LcReader/android/libs/arm64-v8a/libzkserialport.so


BIN
nativeplugins/LcReader/android/libs/arm64-v8a/libzkwltdecode.so


BIN
nativeplugins/LcReader/android/libs/armeabi-v7a/libwlt2bmp.so


BIN
nativeplugins/LcReader/android/libs/armeabi-v7a/libzkserialport.so


BIN
nativeplugins/LcReader/android/libs/armeabi-v7a/libzkwltdecode.so


BIN
nativeplugins/LcReader/android/res/raw/success.wav


BIN
nativeplugins/LcReader/android/unireaderplugin_module.aar


+ 24 - 0
nativeplugins/LcReader/package.json

@@ -0,0 +1,24 @@
+{
+	"name": "LcReader",
+	"id": "LcReader",
+	"version": "1.0.0",
+	"description": "身份证插件",
+	"_dp_type":"nativeplugin",
+	"_dp_nativeplugin":{
+		"android": {
+			"plugins": [
+				{
+					"type": "module",
+					"name": "LcReader",
+					"class": "uni.dcloud.io.uniplugin_reader.IdModule"
+				}
+			],
+			 "abis": [
+			     "armeabi-v7a",
+				 "arm64-v8a"
+			 ],
+			"integrateType": "aar",
+			"minSdkVersion" : 15
+		}
+	}
+}

+ 8 - 0
pages.json

@@ -223,6 +223,14 @@
 						"navigationStyle": "custom"
 					}
 				},
+				{
+					"path": "Verification/checkApp",
+					"style": {
+						"navigationBarTitleText": "核销选择",
+						"enablePullDownRefresh": false,
+						"navigationStyle": "custom"
+					}
+				},
 				{
 					"path": "Verification/record",
 					"style": {

+ 2 - 2
pages/HotelMerchandise/addCommodity.vue

@@ -150,7 +150,7 @@
 							this.$showToast('保存成功');
 
 							setTimeout(() => {
-								uni.redirectTo({
+								uni.navigateTo({
 									url: '/pages/HotelMerchandise/index'
 								})
 								// uni.navigateBack(1)
@@ -160,7 +160,7 @@
 							this.$showToast('上架成功');
 
 							setTimeout(() => {
-								uni.redirectTo({
+								uni.navigateTo({
 									url: '/pages/HotelMerchandise/index'
 								})
 								// uni.navigateBack(1)

+ 2 - 2
pages/home/index.vue

@@ -210,7 +210,7 @@
 		methods: {
 			// 跳转
 			toHref(url) {
-				uni.redirectTo({
+				uni.navigateTo({
 					url: url
 				})
 			},
@@ -417,7 +417,7 @@
 			//办理入住
 			checkIn(orderStatus, item) {
 				this.orderInfo = item;
-				uni.redirectTo({
+				uni.navigateTo({
 					url: "/pages/house/createOrder?id=" + this.orderInfo.id + '&orderStatus=' + orderStatus
 				})
 			},

+ 1 - 1
pages/house/createOrder.vue

@@ -489,7 +489,7 @@
 					if (res.data.code == 0) {
 						this.$showToast('操作成功');
 						setTimeout(() => {
-							uni.redirectTo({
+							uni.navigateTo({
 								url: '/pagesMy/orderList/orderList'
 							})
 						}, 1500)

+ 2 - 2
pages/house/orderInfo.vue

@@ -251,13 +251,13 @@
 			},
 			//办理入住
 			checkIn(orderStatus) {
-				uni.redirectTo({
+				uni.navigateTo({
 					url: "/pages/house/createOrder?id=" + this.orderInfo.id + '&orderStatus=' + orderStatus
 				})
 			},
 			// 编辑
 			edit() {
-				uni.redirectTo({
+				uni.navigateTo({
 					url: "/pages/house/createOrder?id=" + this.orderInfo.id
 				})
 			},

+ 9 - 9
pages/login/index.vue

@@ -1,16 +1,16 @@
 <template>
 	<view class="page" :style="{'min-height':h+'px'}">
 		<view class="box">
-			<image src="https://i.ringzle.com/file/20240109/d6c4691423cf40c2bdf9210d389cdd1e.png"></image>
-			<view class="text">您好!欢迎使用<br>游嵊泗商家服务平台</view>
+		<!-- 	<image src="https://i.ringzle.com/file/20240109/d6c4691423cf40c2bdf9210d389cdd1e.png"></image>
+			<view class="text">您好!欢迎使用<br>游嵊泗商家服务平台</view> -->
 			<!-- <view class="" @click="aa()">核销</view> -->
 			<view class="login">
-				<button open-type="getPhoneNumber" @getphonenumber="decryptPhoneNumber">登录</button>
+				<button open-type="getPhoneNumber" @getphonenumber="decryptPhoneNumber">授权手机号登录</button>
 			</view>
 		</view>
 	</view>
 </template>
-
+ 
 <script>
 	export default {
 		data() {
@@ -68,7 +68,7 @@
 
 <style scoped lang="less">
 	.page{
-		background: url(https://i.ringzle.com/file/20240109/472b6b7b9ea44652b85e73c796876378.png) no-repeat;
+		background: url(https://i.ringzle.com/file/20240523/474a7a2656cb499d851cf7665f9d7d6a.png) no-repeat;
 		background-size: 100% 100%;
 		display: flex;
 		align-items: center;
@@ -91,20 +91,20 @@
 				line-height: 96rpx;
 			}
 			.login{
-				margin-top: 80rpx;
+				margin-top: 780rpx;
 				width: 100%;
 				height: 96rpx;
 				button{
 					width: 100%;
 					height: 100%;
-					background: #FFFFFF;
+					background: #1372FF;
 					border-radius: 48rpx 48rpx 48rpx 48rpx;
 					line-height: 96rpx;
 					text-align: center;
-					font-size: 34rpx;
+					font-size: 32rpx;
 					font-family: PingFang SC, PingFang SC;
 					font-weight: 400;
-					color: #145EE6;
+					color: #FFFFFF;
 				}
 			}
 		}

+ 4 - 7
pagesHouse/Mine/index.vue

@@ -19,7 +19,7 @@
 		<view class="orders box">
 			<view class="o_title">
 				<text>我的订单</text>
-				<view class="ot_all" @tap="toTurn('/pagesHouse/Mine/ordersList/index?type=',true)">
+				<view class="ot_all" @tap="toTurn('/pagesHouse/Mine/ordersList/index?type=&index=-1',true)">
 					<!-- <view class="ot_all" @tap="toToast"> -->
 					<text>全部订单</text>
 					<!-- <image src="../../static/index/steamerTicket/icon_yjt.png"></image> -->
@@ -27,7 +27,7 @@
 			</view>
 			<view class="o_menus">
 				<view v-for="(item,index) in orderMenus" :key="index"
-					@tap="toTurn('/pagesHouse/Mine/ordersList/index?type='+item.type,true)">
+					@tap="toTurn('/pagesHouse/Mine/ordersList/index?type='+item.type+'&index='+index,true)">
 					<!-- <view v-for="(item,index) in orderMenus" :key="index" @tap="toToast"> -->
 					<image :src="item.img"></image>
 					<text>{{item.text}}</text>
@@ -96,13 +96,13 @@
 				h: uni.getSystemInfoSync().windowHeight,
 				w: uni.getSystemInfoSync().windowWidth,
 				mt: uni.getSystemInfoSync().statusBarHeight + 44,
-				avatar: 'https://i.ringzle.com/file/20240129/5b4a757190334fa7ae8616620c770bc4.png',
+				avatar: 'https://i.ringzle.com/file/20240129/5b4a757190334fa7ae8616620c770bc4.png', 
 				name: '游客',
 				orderMenus: [ //type:1 待付款、2 待使用、3 待评价、4 退款/售后
 					{
 						type: 0,
 						img: 'https://i.ringzle.com/file/20240129/818fa751cf8d4772ac1cf818522a7f54.png',
-						text: '待付'
+						text: '待付'
 					},
 					{
 						type: 4,
@@ -132,7 +132,6 @@
 		methods: {
 			toTurn(url, login) { //login 是否需要验证登录跳转
 				if (!url) return this.$showToast('正在开发中...')
-				console.log(url);
 				uni.navigateTo({
 					url
 				});
@@ -140,7 +139,6 @@
 			},
 			getInfo() {
 				this.$api.get('/api/merchant/food/merchant/' + uni.getStorageSync('merchantId')).then(res => {
-					console.log(res)
 					if (res.data.code == 0) {
 						this.dto = res.data.data;
 						if (!res.data.data.shopSign) {
@@ -148,7 +146,6 @@
 								'https://i.ringzle.com/file/20240225/26feb8cc8f744123a980211ebdfb8d40.png';
 						}
 						//this.shopImgs = res.data.data.split(',');
-						console.log(this.shopImgs)
 					}
 				})
 			},

+ 7 - 14
pagesHouse/Mine/ordersList/details/details.vue

@@ -11,23 +11,14 @@
 				</view>
 			</view>
 			<view class="ticketInfo">
-				<!-- <view class="hander-titles">
-					<view class="names">
-						{{list.fishermanName}}
-					</view>
-					<view class="rights">
-						<u-icon name="arrow-right"></u-icon>
-					</view>
-				</view> -->
 				<view v-if="merchantType==10" class="dateAndType">
 					<u-icon name="calendar" size="40" color="#272636" style="display: flex;align-items: center;"></u-icon>
 					<text>{{infoMation.playDate}} {{infoMation.playTime}}出发/{{infoMation.orderType==3?'拼船':'包船'}}</text>
 				</view>
 				<view class="ticketInfo-hander">
 					<view class="image">
-						<image :src="infoMation.isFisheringGoodsDTO.coverImg" mode="aspectFill" v-if="merchantType==10"></image>
+						<image :src="isFisheringGoodsDTOCoverImg" mode="aspectFill" v-if="merchantType==10&&isFisheringGoodsDTOCoverImg"></image>
 						<image :src="infoMation.productImg&&infoMation.productImg.split(',')[0]" mode="aspectFill" v-else></image>
-						
 					</view>
 					<view class="right">
 						<view class="name">
@@ -198,7 +189,8 @@
 				},
 				list: {},
 				infoMation: {},
-				orderCode: '',
+				orderCode: '',
+				isFisheringGoodsDTOCoverImg:''
 			}
 		},
 		onLoad(opt) {
@@ -213,7 +205,6 @@
 			delNotice(val){
 				if (val) {
 					return JSON.parse(val)[0].notice
-					
 				}
 			},
 			delArr(val) {
@@ -236,7 +227,8 @@
 				this.$api.get('/api/fishering/personCenterOrderDetail/' + this.orderCode).then(res => {
 					console.log(res)
 					if (res.data.code == 0) {
-						this.infoMation = res.data.data;
+						this.infoMation = res.data.data;
+						this.isFisheringGoodsDTOCoverImg = this.infoMation.isFisheringGoodsDTO.coverImg||'';
 					}
 				})
 			},
@@ -246,7 +238,8 @@
 					orderCode: this.orderCode
 				}).then(res => {
 					if (res.data.code == 0) {
-						this.infoMation = res.data.data;
+						this.infoMation = res.data.data;
+						this.isFisheringGoodsDTOCoverImg = this.infoMation.isFisheringGoodsDTO.coverImg||'';
 						this.infoMation.productsDetail = JSON.parse(res.data.data.productsDetail);
 					}
 				})

+ 29 - 15
pagesHouse/Mine/ordersList/index.vue

@@ -4,7 +4,7 @@
 		<view class="tb">
 			<view class="tabs">
 				<view v-for="(item,index) in tabList" :key="index" @tap="changeStatus(index)">
-					<text :class="index==current?'active':''">{{item.name}}</text>
+					<text :class="index===current?'active':''">{{item.name}}</text>
 				</view>
 			</view>
 		</view>
@@ -158,7 +158,21 @@
 			}
 		},
 		onLoad(option) {
-			if (option.typeTxt) {
+			if (option.index>=0) {
+				const index = option.index;
+				//其他页面入参
+				if (index == 0) {
+					this.changeStatus(1)
+				} else if (index == 1) {
+					this.changeStatus(2) 
+				} else if (index == 2) {
+					this.changeStatus(3)
+				} else if (index == 3) {
+					this.changeStatus(4) 
+				}else {
+					this.changeStatus(0)
+				}
+			}else if (option.typeTxt) {
 				const typeTxt = option.typeTxt;
 				//其他页面入参
 				if (typeTxt =='待付款') {
@@ -237,20 +251,20 @@
 				}
 			},
 			changeStatus(index) {
-				this.current=index;
+				this.current=index;
 				if(this.merchantType==10){
-				if (index === 0) this.status = '';
-				else if (index === 1) this.status = '0'
-				else if (index === 2) this.status = '1';
-				else if (index === 3) this.status = '3,7';
-				else if (index === 4) this.status = '4,5';
-			}else{
-				if (index === 0) this.state = '';
-				else if (index === 1) this.state = '0'
-				else if (index === 2) this.state = '4';
-				else if (index === 3) this.state = '3';
-				else if (index === 4) this.state = '-3';
-			}
+					if (index === 0) this.status = '';
+					else if (index === 1) this.status = '0'
+					else if (index === 2) this.status = '1';
+					else if (index === 3) this.status = '3,7';
+					else if (index === 4) this.status = '4,5';
+				}else{
+					if (index === 0) this.state = '';
+					else if (index === 1) this.state = '0'
+					else if (index === 2) this.state = '4';
+					else if (index === 3) this.state = '3';
+					else if (index === 4) this.state = '-3';
+				}
 				this.init();
 			},
 			//渔家乐订单

+ 1 - 1
pagesHouse/Mine/ordersList/outcome.vue

@@ -31,7 +31,7 @@
 		},
 		methods: {
 			toDetails() {
-				uni.redirectTo({
+				uni.navigateTo({
 					url: '/pagesHouse/home/bill'
 				})
 			},

+ 24 - 33
pagesHouse/Verification/check.vue

@@ -34,7 +34,7 @@
 						身份证 {{i.touristCode|handle(3)}}
 					</view>
 				</view>
-				<u-icon name="minus-circle" size="36" color="#FEA400" @tap="jian(item)"
+				<u-icon name="minus-circle" size="36" color="#FEA400" @tap="jian(index)"
 					v-if="i.remark!='book'"></u-icon>
 			</view>
 		</view>
@@ -84,13 +84,10 @@
 			this.boatNo = opt.boatNo || '';
 			this.getOrderInfo();
 			this.getTypes();
-			console.log(tuomin())
-			//获取上次核销缓存
-
 		},
 		filters: {
 			handle(val, type) {
-				return tuomin(decrypt(val), type)
+				return tuomin(val, type);
 			}
 		},
 		methods: {
@@ -113,7 +110,6 @@
 					merchantId: this.merchantId,
 					boatNo: this.boatNo
 				}).then(res => {
-					console.log(res.data)
 					if (res.data.code == 0) {
 						this.orderInfo = res.data.data;
 						this.keyName = this.orderInfo.playDate + this.orderInfo.playTime + this.boatNo;
@@ -123,13 +119,13 @@
 					}
 				})
 			},
-			scanCode(type) {
+			scanCode(type) {
 				uni.scanCode({
 					onlyFromCamera: true,
 					success: (res) => {
 						console.log('扫码结果:' + res.result);
 						// 扫码成功后的操作,例如:
-						that.handleScanResult(res.result, type);
+						that.handleScanResult(res.result, type, '');
 					},
 					fail: (err) => {
 						console.error('扫码失败:' + err);
@@ -137,7 +133,7 @@
 				});
 			},
 			// 处理扫码结果的函数,可以根据实际需求进行扩展
-			handleScanResult(result, type) {
+			handleScanResult(result, type, name) {
 				// 例如:导航到某个页面,或者处理其他业务逻辑
 				let sendData = {};
 				sendData.playDate = this.orderInfo.playDate;
@@ -146,33 +142,20 @@
 				sendData.merchantId = this.orderInfo.merchantId;
 				sendData.orderType = this.orderInfo.orderType;
 				sendData.type = type;
-				sendData.writeOffCode = result;
-				console.log(sendData)
-
+				sendData.boatNo = this.boatNo;
+				if(type==0) sendData.writeOffCode = result;
+				else if(type==1){
+					sendData.touristCode = encrypt(result);
+					sendData.touristName = encrypt(name);
+				} 
 				this.$api.post('/scenic/api/order/scanCode', sendData).then(res => {
-					console.log(res.data)
 					if (res.data.code == 0) {
 						if (this.data.findIndex((item) => {
 								return item.touristCode == res.data.data.touristCode
 							}) > -1) {
 							this.$showToast('该核验码已扫')
 						} else {
-							// "id": 0,
-							// 		"orderCode": "",
-							// 		"remark": "",
-							// 		"touristCode": "",
-							// 		"touristName": ""
-
-							res.data.data.touristCode = encrypt(res.data.data.touristCode);
-							res.data.data.touristName = encrypt(res.data.data.touristName)
-							let json = {
-								id: res.data.data.id,
-								orderCode:res.data.data.orderCode,
-								remark:res.data.data.remark,
-								touristCode:res.data.data.touristCode,
-								touristName: res.data.data.touristName
-							}
-							this.data.push(json)
+							this.data.push(res.data.data);
 						}
 					} else {
 						this.$showToast(res.data.msg)
@@ -191,23 +174,31 @@
 				if (this.typeIndex == null) {
 					return this.$showToast('请选择渔船')
 				}
-				let boatCode = this.types[this.typeIndex].boatNo;
+				let boatCode = this.types[this.typeIndex].boatNo;
+				let newData = JSON.parse(JSON.stringify(this.data));
+				newData.forEach(d=>{
+					d.touristCode = encrypt(d.touristCode);
+					d.touristName = encrypt(d.touristName);
+				})
 				this.$api.post('/scenic/api/order/sailWriteOff', {
 					playDate:this.orderInfo.playDate,
 					playTime:this.orderInfo.playTime,
 					playLength:this.orderInfo.playLength,
 					orderType: this.orderInfo.orderType,
-					touristList: this.data,
+					touristList: newData,
 					boatCode: boatCode
 				}).then(res => {
 					if (res.data.code == 0) {
-						uni.redirectTo({
+						uni.navigateTo({
 							url: "/pagesHouse/Verification/success?boatNo=" + this.boatNo + '&price=' +
 								this.orderInfo.realPrice
 						})
-					}
+					}else this.$showToast(res.data.msg)
 				})
 				uni.removeStorageSync(this.keyName);
+			},
+			jian(index){
+				if(this.data.length>index) this.data.splice(index,1);
 			}
 		}
 	}

+ 466 - 0
pagesHouse/Verification/checkApp.vue

@@ -0,0 +1,466 @@
+<template>
+	<view class="page" :style="{'min-height':(h)+'px','padding-top':mt+'px'}">
+		<c-nav-bar title="核销" @goBack="back()"></c-nav-bar>
+		<view class="types">
+			<view class="item bg2" @tap="scanCode(0)">
+				<view class="n">扫码核销</view>
+				<u-icon name="arrow-right" color="#fff" size="26" label="点击扫描" label-color="#fff" label-size="28" cu
+					label-pos="left"></u-icon>
+			</view>
+			<view class="item bg1" @tap="scanCode(1)">
+				<view class="n">扫身份证</view>
+				<u-icon name="arrow-right" color="#fff" size="26" label="点击扫描" label-color="#fff" label-size="28"
+					label-pos="left"></u-icon>
+			</view>
+		</view>
+		<view class="orderInfo">
+			<view class="tit">
+				订单详情
+			</view>
+			<view class="time">{{orderInfo.playDate}} {{orderInfo.playTime}}出发</view>
+			<view class="bottom">
+				<text>{{orderInfo.num}}人</text>
+				<text>出游·{{orderInfo.playLength||0}}小时</text>
+				<text>¥{{orderInfo.realPrice}}</text>
+			</view>
+		</view>
+		<view class="list">
+			<view class="tit">{{boatNo}} 共({{data.length}})人</view>
+			<view class="item" v-for="(i,index) in data" :key="index">
+				<text class="type" :class="i.remark=='book'?'t1':'t2'">{{i.remark=='book'?'预订单':'现场单'}}</text>
+				<view class="personInfo">
+					<view class="name">{{i.touristName|handle(1)}}</view>
+					<view class="code">
+						身份证 {{i.touristCode|handle(3)}}
+					</view>
+				</view>
+				<u-icon name="minus-circle" size="36" color="#FEA400" @tap="jian(index)"
+					v-if="i.remark!='book'"></u-icon>
+			</view>
+		</view>
+		<view class="list">
+			<view class="tit">选择渔船</view>
+			<view class="typeItem">
+				<view class="txt" v-for="(t,i) in types" :key="i" @click="typeIndex=i" :class="typeIndex==i?'on':''">
+					{{t.boatNo}}
+					<image v-if="typeIndex==i"
+						src="https://i.ringzle.com/file/20240320/b458b03f8f654a51a921656b8aa955de.png"></image>
+				</view>
+
+			</view>
+		</view>
+		<view class="btn">
+			<text @click="hexiao">开始发船</text>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		encrypt,
+		decrypt,
+		tuomin
+	} from '../../utils/aes.js'
+	var that;
+	const lcReader = uni.requireNativePlugin('LcReader');
+	const modal = uni.requireNativePlugin('modal');
+	var globalEvent = uni.requireNativePlugin('globalEvent');
+	
+	// 依赖引入
+	const Intent = plus.android.importClass('android.content.Intent')
+	const IntentFilter = plus.android.importClass('android.content.IntentFilter')
+	const main = plus.android.runtimeMainActivity()
+	// pda广播名称
+	const SCANACTION = "scan.rcv.message"//扫描名称
+	export default {
+		data() {
+			return {
+				typeIndex: null,
+				types: [],
+				date: new Date().Format('yyyy-MM-dd'),
+				show: false,
+				data: [],
+				merchantId: uni.getStorageSync('merchantId'),
+				playTime: '',
+				boatNo: '',
+				type: '',
+				orderInfo: {},
+				keyName: ''
+			}
+		},
+		onLoad(opt) {
+			that = this;
+			this.playTime = opt.playTime || '';
+			this.boatNo = opt.boatNo || '';
+			this.getOrderInfo();
+			this.getTypes();
+
+			this.initSDK();
+			globalEvent.addEventListener('readInfo', function(e) {
+				if(e.Id&&e.Name) that.handleScanResult(e.Id,1,e.Name);
+			});
+		},
+		filters: {
+			handle(val, type) {
+				return tuomin(val, type);
+			}
+		},
+		destroyed() {
+			this.keyName = this.orderInfo.playDate + this.orderInfo.playTime + this.boatNo;
+			uni.setStorageSync(this.keyName, JSON.stringify(this.data));
+		},
+		methods: {
+			initSDK() {
+				// 调用异步方法
+				lcReader.initSDK({
+					'name': 'unimp',
+					'age': 1
+				});
+			},
+			getTypes() {
+				this.$api.get('/scenic/api/boat/page', {
+					page: -1
+				}).then(res => {
+					if (res.data.code == 0) {
+						this.types = res.data.data.list;
+					}
+				})
+			},
+			getOrderInfo() {
+				this.$api.post('/scenic/api/order/queryStartOrderInfo', {
+					merchantId: this.merchantId,
+					boatNo: this.boatNo
+				}).then(res => {
+					if (res.data.code == 0) {
+						this.orderInfo = res.data.data;
+						this.keyName = this.orderInfo.playDate + this.orderInfo.playTime + this.boatNo;
+						if (uni.getStorageSync(this.keyName)) {
+							this.data = JSON.parse(uni.getStorageSync(this.keyName)) || [];
+						}
+					}
+				})
+			},
+			scanCode(type) {
+				let mg = '请按下按钮进行二维码扫描';
+				if(type==1) mg = '请放置身份证进行读取';
+				this.$showToast(mg);
+				if(type==0) this.scanCodeByEwm();
+				else if(type==1){
+					// lcReader.sigleRead();//单次读卡
+					lcReader.cycleReadCard();//循环读卡
+				}
+			},
+			//扫二维码或条形码
+			scanCodeByEwm(){
+				var filter = new IntentFilter();
+				filter.addAction(SCANACTION);
+				
+				// 接收
+				let that = this;
+				var receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {
+				    onReceive: (context, intent)=>{
+						if (intent.getAction() === SCANACTION) {
+						    // 扫描信息处理
+							let scanCode = intent.getStringExtra("barcodeData");
+							// 接收信息处理
+							if(scanCode) that.handleScanResult(scanCode,0,'');
+						}
+					}
+				})
+				main.registerReceiver(receiver, filter);
+			},
+			// 处理扫码结果的函数,可以根据实际需求进行扩展
+			handleScanResult(result, type, name) {
+				// 例如:导航到某个页面,或者处理其他业务逻辑
+				let sendData = {};
+				sendData.playDate = this.orderInfo.playDate;
+				sendData.playTime = this.orderInfo.playTime;
+				sendData.playLength = this.orderInfo.playLength || 1;
+				sendData.merchantId = this.orderInfo.merchantId;
+				sendData.orderType = this.orderInfo.orderType;
+				sendData.type = type;
+				sendData.boatNo = this.boatNo;
+				if(type==0) sendData.writeOffCode = result;
+				else if(type==1){
+					sendData.touristCode = encrypt(result);
+					sendData.touristName = encrypt(name);
+				} 
+
+				this.$api.post('/scenic/api/order/scanCode', sendData).then(res => {
+					if (res.data.code == 0) {
+						if (this.data.findIndex((item) => {
+								return item.touristCode == res.data.data.touristCode
+							}) > -1) {
+								let mg = '该核验码已扫';
+								if(type==1) mg = '该身份证已扫';
+							this.$showToast(mg);
+						} else {
+							this.data.push(res.data.data);
+						}
+						if(type==1) lcReader.cancelCycle();//关闭循环读卡
+					} else {
+						this.$showToast(res.data.msg)
+						if(type==1) lcReader.cancelCycle();//关闭循环读卡
+					}
+				})
+			},
+			check() {
+				uni.navigateTo({
+					url: '/pagesHouse/Verification/check'
+				})
+			},
+			hexiao() {
+				if (this.data.length == 0) {
+					return this.$showToast('请选择核销人')
+				}
+				if (this.typeIndex == null) {
+					return this.$showToast('请选择渔船')
+				}
+				let boatCode = this.types[this.typeIndex].boatNo;
+				let newData = JSON.parse(JSON.stringify(this.data));
+				newData.forEach(d=>{
+					d.touristCode = encrypt(d.touristCode);
+					d.touristName = encrypt(d.touristName);
+				})
+				this.$api.post('/scenic/api/order/sailWriteOff', {
+					playDate:this.orderInfo.playDate,
+					playTime:this.orderInfo.playTime,
+					playLength:this.orderInfo.playLength,
+					orderType: this.orderInfo.orderType,
+					touristList: newData,
+					boatCode: boatCode
+				}).then(res => {
+					if (res.data.code == 0) {
+						uni.navigateTo({
+							url: "/pagesHouse/Verification/success?boatNo=" + this.boatNo + '&price=' +
+								this.orderInfo.realPrice
+						})
+					}else this.$showToast(res.data.msg)
+				})
+				uni.removeStorageSync(this.keyName);
+			},
+			jian(index){
+				if(this.data.length>index) this.data.splice(index,1);
+			}
+		}
+	}
+</script>
+
+<style lang="less" scoped>
+	/deep/.u-icon {
+		justify-content: flex-end;
+	}
+
+	.btn {
+		position: fixed;
+		bottom: 0;
+		left: 0;
+		z-index: 1;
+		padding: 16rpx 30rpx 36rpx 30rpx;
+		width: 100%;
+		box-sizing: border-box;
+		background: #fff;
+
+		text {
+			display: block;
+			background-color: #007A69;
+			color: #007A69;
+			color: #fff;
+			height: 88rpx;
+			line-height: 88rpx;
+			border-radius: 44rpx;
+			text-align: center;
+			font-size: 32rp;
+			font-weight: bold;
+			box-sizing: border-box;
+
+
+		}
+
+	}
+
+	.page {
+		background: #F5F8FA;
+		padding: 20rpx 24rpx 160rpx;
+		box-sizing: border-box;
+
+		.types {
+			display: flex;
+			gap: 36rpx;
+			justify-content: space-between;
+
+
+			.n {
+				margin-bottom: 20rpx;
+				color: #fff;
+			}
+
+			.item {
+				width: 330rpx;
+				height: 156rpx;
+				padding: 34rpx 24rpx;
+				font-size: 36rpx;
+				font-weight: bold;
+				box-sizing: border-box;
+			}
+
+			.bg2 {
+				background: url('https://i.ringzle.com/file/20240316/3fc9f6a78557492e98caa50392411e3a.png') no-repeat center;
+				background-size: 100%;
+			}
+
+			.bg1 {
+				background: url('https://i.ringzle.com/file/20240316/8a927d5d4da84728b6bb0896541baccf.png') no-repeat center;
+				background-size: 100%;
+			}
+		}
+
+		.orderInfo {
+			background-color: #fff;
+			color: #333;
+			padding: 0 24rpx 36rpx;
+			margin: 20rpx 0 0;
+			background: #fff;
+			border-radius: 16rpx;
+
+			.tit {
+				padding: 32rpx 0 24rpx;
+				font-size: 32rpx;
+			}
+
+			.time {
+				font-size: 36rpx;
+				font-weight: bold;
+				margin-bottom: 32rpx;
+			}
+
+			.bottom {
+				display: flex;
+				align-items: center;
+
+				text {
+					&:first-child {
+						width: 88rpx;
+						height: 54rpx;
+						background-color: #007A69;
+						color: #fff;
+						font-size: 34rpx;
+						font-weight: bold;
+						margin-right: 10rpx;
+						text-align: center;
+						border-radius: 12rpx;
+					}
+
+					&:nth-child(2) {
+						width: 200rpx;
+						flex: 1;
+					}
+
+					&:last-child {
+						font-size: 30rpx;
+						font-weight: bold;
+					}
+				}
+			}
+		}
+
+	}
+
+	.list {
+		box-sizing: border-box;
+		padding: 0 24rpx 0;
+		border-radius: 16rpx;
+		background-color: #fff;
+		margin-top: 20rpx;
+
+		.tit {
+			font-size: 36rpx;
+			font-weight: bold;
+			color: #111;
+			padding: 36rpx 0 17rpx;
+		}
+
+		.typeItem {
+			display: flex;
+			justify-content: space-between;
+			flex-wrap: wrap;
+			gap: 20rpx 0;
+			padding-bottom: 50rpx;
+
+			.txt {
+				display: inline-block;
+				width: 316rpx;
+				height: 80rpx;
+				background: #fff;
+				border-radius: 16rpx;
+				text-align: center;
+				line-height: 80rpx;
+				border: 2rpx solid #EFEFEF;
+				color: #333;
+				position: relative;
+
+				&.on {
+					color: #007A69;
+					background: rgba(0, 122, 105, 0.06);
+					border: 2rpx solid #007A69;
+
+					image {
+						position: absolute;
+						bottom: 0;
+						right: 0;
+						width: 34rpx;
+						height: 26rpx;
+						z-index: 11;
+					}
+				}
+
+			}
+		}
+
+		.item {
+			display: flex;
+			justify-content: space-between;
+			padding: 24rpx 0;
+			align-items: center;
+
+			.type {
+				width: 110rpx;
+				height: 48rpx;
+				text-align: center;
+				display: inline-block;
+				line-height: 48rpx;
+				border-radius: 11rpx;
+				font-size: 26rpx;
+				font-weight: bold;
+				color: #111;
+				margin-right: 16rpx;
+			}
+
+			.t1 {
+				background-color: #F0F8F6;
+				color: #007A69;
+			}
+
+			.t2 {
+				background-color: #E8EFFD;
+				color: #326EE0;
+			}
+
+			.personInfo {
+				flex: 1;
+
+				.name {
+					font-size: 30rpx;
+					color: #111;
+					margin-bottom: 16rpx;
+				}
+
+				.code {
+					color: #666;
+					font-size: 28rpx;
+				}
+			}
+
+		}
+	}
+</style>

+ 11 - 4
pagesHouse/Verification/index.vue

@@ -42,10 +42,17 @@
 					}
 				})
 			},
-			check(item) {
-				uni.navigateTo({
-					url: '/pagesHouse/Verification/check?=&boatNo='+item.BOAT_NO
-				})
+			check(item) {
+				// #ifdef APP-PLUS
+					uni.navigateTo({
+						url: '/pagesHouse/Verification/checkApp?=&boatNo='+item.BOAT_NO
+					})
+				// #endif
+				// #ifdef MP-WEIXIN
+					uni.navigateTo({
+						url: '/pagesHouse/Verification/check?=&boatNo='+item.BOAT_NO
+					})
+				// #endif
 			}
 		}
 	}

+ 11 - 9
pagesHouse/Verification/recordDetails.vue

@@ -1,22 +1,22 @@
 <template>
 	<view class="page" :style="{'min-height':h+'px','padding-top':mt+'px'}">
 		<c-nav-bar title="核销记录"></c-nav-bar>
-		<view class="box ship_time">
+		<view class="box ship_time" v-if="itemorderEntity">
 			<view class="hx_title">
-				发船信息:{{item.orderEntity.playDate}} {{item.orderEntity.playTime}}/{{orderType[item.orderEntity.orderType]}}/{{item.orderEntity.boatNo}}
+				发船信息:{{itemorderEntity.playDate}} {{itemorderEntity.playTime}}/{{orderType[itemorderEntity.orderType]}}/{{itemorderEntity.boatNo}}
 			</view>
 			<view class="st_info">
-				<text>订单编号:{{item.orderEntity.orderCode}}</text>
-				<view class="sti_xq" @tap="toOrderDetails(item.orderEntity.orderCode)">详情</view>
+				<text>订单编号:{{itemorderEntity.orderCode}}</text>
+				<view class="sti_xq" @tap="toOrderDetails(itemorderEntity.orderCode)">详情</view>
 			</view>
 			<view class="st_info">
-				<text>出游时间:{{item.orderEntity.playLength}}小时</text>
+				<text>出游时间:{{itemorderEntity.playLength}}小时</text>
 			</view>
 			<view class="st_info">
-				<text>联系号码:{{item.orderEntity.linkPhone}}</text>
+				<text>联系号码:{{itemorderEntity.linkPhone}}</text>
 			</view>
 			<view class="st_info">
-				<text>渔船号:{{item.orderEntity.boatCode}}</text>
+				<text>渔船号:{{itemorderEntity.boatCode}}</text>
 			</view>
 		</view>
 		<view class="box person_info">
@@ -54,7 +54,8 @@
 					3:'拼船'
 				},
 				orderCode:'',
-				item:null
+				item:null,
+				itemorderEntity:''
 			}
 		},
 		onLoad(option) {
@@ -65,7 +66,8 @@
 			getDetails(){
 				this.$api.get('/scenic/api/order/writeOffRecordInfo/'+this.orderCode).then(res=>{
 					if(res.data.code===0){
-						this.item = res.data.data;
+						this.item = res.data.data;
+						this.itemorderEntity = this.item.orderEntity;
 						this.item.bookList.forEach(l=>{
 							l.touristCode = l.touristCode.replace(/^(.{6})(?:\d+)(.{4})$/, '\$1******\$2');
 						})

+ 28 - 7
pagesHouse/home/bill.vue

@@ -24,7 +24,7 @@
 				</view>
 			</view>
 			<template v-if="merchantType==10">
-				<view class="li" v-for="(item,index) in info.pageData.list" :key="index" @click="detail(item)">
+				<view class="li" v-for="(item,index) in pageDataList" :key="index" @click="detail(item)">
 					<view class="left">
 						<text>{{item.playDate}}
 							{{item.playTime}}出发/{{item.orderType==2?'包船':'拼船'}}/{{item.boatNo||'拼团中'}}</text>
@@ -37,7 +37,7 @@
 				</view>
 			</template>
 			<template v-if="merchantType==4">
-				<view class="li" v-for="(item,index) in info.merchantOrderDTOS" :key="index" @click="detail(item)">
+				<view class="li" v-for="(item,index) in merchantOrderDTOSList" :key="index" @click="detail(item)">
 					<view class="left">
 						<text>{{item.productName}}</text>
 						<text>{{item.orderTime}}</text>
@@ -75,7 +75,12 @@
 
 				},
 				merchantId: uni.getStorageSync('merchantId'),
-				merchantType: uni.getStorageSync('merchantType'),
+				merchantType: uni.getStorageSync('merchantType'),
+				pageDataList:[],
+				merchantOrderDTOSList:[],
+				page:1,
+				limit:10,
+				isOver:false,
 			}
 		},
 		onLoad() {
@@ -84,6 +89,14 @@
 			} else {
 				this.getList2()
 			}
+		},
+		onReachBottom() {
+			if (this.isOver) return;
+			if (this.merchantType == 10) {
+				this.getList()
+			} else {
+				this.getList2()
+			}
 		},
 		methods: {
 			confirmDate(e) {
@@ -110,11 +123,17 @@
 					startDate: this.date,
 					endDate: '',
 					dateType: '1',
-					merchantId: uni.getStorageSync('merchantId')
+					merchantId: uni.getStorageSync('merchantId'),
+					page:this.page,
+					limit:this.limit
 				}).then(res => {
-					console.log(res.data)
 					if (res.data.code === 0) {
-						this.info = res.data.data;
+						this.info = res.data.data;
+						this.page++;
+						let { list, total } = res.data.data.pageData;
+						if (this.pageDataList.length + list.length > total || list.length == 0) return this.isOver = true;
+						this.pageDataList = [...this.pageDataList, ...list];
+						this.merchantOrderDTOSList = this.info.merchantOrderDTOS;
 					} else {
 						this.info = {
 							pageData: {
@@ -124,7 +143,9 @@
 							paymentCount: 0,
 							refundAmount: 0,
 							refundCount: 0,
-						}
+						};
+						this.pageDataList = [];
+						this.merchantOrderDTOSList = [];
 					}
 				})
 			},

+ 2 - 2
pagesHouse/home/index.vue

@@ -36,7 +36,7 @@
 			<view class="numberData">
 				<view @click="toHref('/pagesHouse/Mine/ordersList/index?typeTxt=待付款')">
 					<text>{{merchantType==10?info.unPayNum:info.todayObligationOrders}}</text>
-					<text>待付</text>
+					<text>待付</text>
 				</view>
 				<view @click="toHref('/pagesHouse/Mine/ordersList/index?typeTxt=待使用')">
 					<text>{{merchantType==10?info.unUseNum:info.todayPendingOrders||0}}</text>
@@ -225,7 +225,7 @@
 				})
 			},
 			toHref(url) {
-				uni.redirectTo({
+				uni.navigateTo({
 					url: url
 				})
 			},

File diff suppressed because it is too large
+ 857 - 0
static/iconfont.css


+ 1 - 1
uni_modules/uview-ui/components/u-icon/u-icon.vue

@@ -17,7 +17,7 @@
 		    :class="uClasses"
 		    :style="[iconStyle, $u.addStyle(customStyle)]"
 		    :hover-class="hoverClass"
-		>{{icon}}</text>
+		></text>
 		<!-- 这里进行空字符串判断,如果仅仅是v-if="label",可能会出现传递0的时候,结果也无法显示 -->
 		<text
 		    v-if="label !== ''"