From d53f8346128633356e0b0996a78d2a039c97f4d7 Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期一, 20 一月 2025 18:39:53 +0800
Subject: [PATCH] Merge branch '2.0.1' of http://139.186.142.91:10010/r/productDev/funingyunwei into 2.0.1

---
 h5/pages.json                         |   28 +
 h5/static/side/btn_jian@3x.png        |    0 
 h5/pages/polling/detail.vue           |   15 
 h5/pages/inventory/detail.vue         |  665 +++++++++++++++++++++++++++
 h5/static/side/btn_jian_grey@2x.png   |    0 
 h5/static/ic_paysuccess@2x.png        |    0 
 h5/pages/operation/device.vue         |   13 
 h5/static/side/ic_pandian@2x.png      |    0 
 h5/static/side/ic_pandian_grey@2x.png |    0 
 h5/api/yw.js                          |   48 ++
 h5/pages/workOrder/detail.vue         |    2 
 h5/pages/polling/point.vue            |   89 +++
 h5/pages/workOrder/problemEdit.vue    |  313 +++++++++++++
 h5/pages/workOrder/result.vue         |   39 +
 h5/pages/inventory/index.vue          |  213 ++++++++
 h5/static/side/btn_jia@3x.png         |    0 
 16 files changed, 1,407 insertions(+), 18 deletions(-)

diff --git a/h5/api/yw.js b/h5/api/yw.js
index 5e211b0..5fb57ba 100644
--- a/h5/api/yw.js
+++ b/h5/api/yw.js
@@ -28,6 +28,12 @@
     data
   })
 }
+export const ywProblemCreate = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/business/ywProblem/create',
+    data
+  })
+}
 // 椤圭洰鍒楄〃
 export const ywProjectPost = (data) => {
   return http({
@@ -134,4 +140,46 @@
     url: 'visitsAdmin/cloudService/business/ywPatrolTaskRecord/getPointRecordByCode',
     data
   })
+}
+export const getFindByCode = (code) => {
+  return http({
+    url: 'visitsAdmin/cloudService/business/ywDevice/findByCode?deviceCode=' + code,
+		method: 'get',
+  })
+}
+export const getYwStocktaking = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/business/ywStocktaking/page',
+    data
+  })
+}
+export const ywStocktakingDetail = (id) => {
+  return http({
+    url: 'visitsAdmin/cloudService/business/ywStocktaking/' + id,
+		method: 'get'
+  })
+}
+export const ywStocktakingBegin = (id) => {
+  return http({
+    url: 'visitsAdmin/cloudService/business/ywStocktaking/beginById?id=' + id,
+		method: 'get'
+  })
+}
+export const ywStocktaFinishById = (id) => {
+  return http({
+    url: 'visitsAdmin/cloudService/business/ywStocktaking/finishById?id=' + id,
+		method: 'get'
+  })
+}
+export const getYwStocktakingRecord = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/business/ywStocktakingRecord/page',
+		data
+  })
+}
+export const takingDataOpen = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/business/ywStocktakingRecord/takingData',
+		data
+  })
 }
\ No newline at end of file
diff --git a/h5/pages.json b/h5/pages.json
index d255e6d..0e89470 100644
--- a/h5/pages.json
+++ b/h5/pages.json
@@ -83,6 +83,34 @@
 			{
 				"navigationBarTitleText" : "閫夋嫨浜哄憳"
 			}
+		},
+		{
+			"path" : "pages/inventory/index",
+			"style" : 
+			{
+				"navigationBarTitleText" : "搴撳瓨鐩樼偣"
+			}
+		},
+		{
+			"path" : "pages/inventory/detail",
+			"style" : 
+			{
+				"navigationBarTitleText" : "鐩樼偣鍗�"
+			}
+		},
+		{
+			"path" : "pages/workOrder/problemEdit",
+			"style" : 
+			{
+				"navigationBarTitleText" : "闂涓婃姤"
+			}
+		},
+		{
+			"path" : "pages/workOrder/result",
+			"style" : 
+			{
+				"navigationBarTitleText" : "闂涓婃姤"
+			}
 		}
 	],
 	"globalStyle": {
diff --git a/h5/pages/inventory/detail.vue b/h5/pages/inventory/detail.vue
new file mode 100644
index 0000000..02fec9f
--- /dev/null
+++ b/h5/pages/inventory/detail.vue
@@ -0,0 +1,665 @@
+<template>
+	<view class="main_app">
+		<view class="main_head">
+			<view class="tabs">
+				<view class="tab" :class="{active: activeTab == 0}" @click="tabsClick(0)">
+					<text>鏈洏({{info.unFinishAmount || 0}})</text>
+					<text class="border"></text>
+				</view>
+				<view class="tab" :class="{active: activeTab == 1}" @click="tabsClick(1)">
+					<text>宸茬洏({{info.finishAmount || 0}})</text>
+					<text class="border"></text>
+				</view>
+			</view>
+			<view class="head_wrap">
+				<view class="search_wrap">
+					<image class="mr12 search" src="@/static/home/ic_search@2x.png" mode="widthFix"></image>
+					<input v-model="param.materialCode" @confirm="handleQuery" type="text" placeholder="鎼滅储璧勪骇缂栫爜/璧勪骇鍚嶇О"
+						placeholder-class="placeholder9" />
+				</view>
+			</view>
+			<!--  -->
+			<scroll-view scroll-y="true" class="scroll_Y" @scrolltolower="scrolltolower">
+				<view class="list">
+					<view class="item" v-for="item in list">
+						<view class="line">
+							<view class="title">{{item.materialName}}</view>
+							<view class="status red" v-if="item.type == 1">鐩樹簭</view>
+							<view class="status primaryColor" v-if="item.type == 2">鐩樼泩</view>
+						</view>
+						<view class="line">璧勪骇缂栫爜锛歿{item.materialCode}}</view>
+						<view class="line">鏉$爜锛歿{item.materialQrcode}}</view>
+						<view class="line">瑙勬牸鍨嬪彿锛歿{item.materialAttr}}</view>
+						<view class="line">
+							<view class="">璐﹂潰鏁伴噺锛歿{item.stock}}{{item.materialUnitName}}</view>
+							<view v-if="item.status == 0" @click="openEheck(item)" class="btn">鎵ц鐩樼偣</view>
+						</view>
+						<view class="static" v-if="item.status == 1">
+							<view class="ite">
+								<view class="la">璐﹂潰鏁伴噺锛�</view>
+								<view class="val">{{item.stock}}</view>
+							</view>
+							<view class="spi"></view>
+							<view class="ite">
+								<view class="la">瀹為檯鏁伴噺锛�</view>
+								<view class="val" :class="{
+									primaryColor: item.type == 2,
+									red: item.type == 1,
+								}">{{item.actStock}}</view>
+							</view>
+						</view>
+					</view>
+				</view>
+			</scroll-view>
+			<view class="footer_btn">
+				<view @click="openQrcode" v-if="activeTab== 0" class="sweep">
+					<image src="@/static/side/ic_saoma@2x.png" mode=""></image>
+					<view class="">鎵爜鐩樼偣</view>
+				</view>
+				<view @click="showTip = true" v-if="activeTab== 1" class="sweep sub_result">
+					<view class="">鎻愪氦鐩樼偣缁撴灉</view>
+				</view>
+			</view>
+			<!--  -->
+			<u-popup :show="showModal" :round="10" @close="showModal = false" closeOnClickOverlay>
+				<view class="modal_wrap">
+					<view class="modal_title">鎵ц鐩樼偣</view>
+					<view class="title">{{modalForm.materialName}}</view>
+					<view class="item">璧勪骇缂栫爜锛歿{modalForm.materialCode}}</view>
+					<view class="item">鏉$爜锛歿{modalForm.materialQrcode}}</view>
+					<view class="item">鍝佺墝锛歿{modalForm.materialBrand}}</view>
+					<view class="item">瑙勬牸鍨嬪彿锛歿{modalForm.materialAttr}}</view>
+					<view class="item">鎵�鍦ㄤ粨搴擄細{{modalForm.warehouseName}}</view>
+					<view class="content">
+						<view class="line">
+							<view class="la">璐﹂潰鏁伴噺锛�</view>
+							<view class="val">
+								<view class="wrap">{{modalForm.stock}}</view>
+								<view class="unit">{{modalForm.materialUnitName}}</view>
+							</view>
+						</view>
+						<view class="line">
+							<view class="la">鐩樼偣鏁伴噺锛�</view>
+							<view class="val">
+								<view class="wrap">
+									<image v-if="!modalForm.actStock" src="@/static/side/btn_jian_grey@2x.png" mode=""></image>
+									<image v-else @click="changeAct(-1)" src="@/static/side/btn_jian@3x.png" mode=""></image>
+									<input type="number" v-model="modalForm.actStock"></input>
+									<image @click="changeAct(1)" src="@/static/side/btn_jia@3x.png" mode=""></image>
+								</view>
+								<view class="unit">{{modalForm.materialUnitName}}</view>
+							</view>
+						</view>
+					</view>
+					<view class="remark">
+						<view class="la">澶囨敞锛�</view>
+						<textarea v-model="modalForm.remark" placeholder="璇峰~鍐欏娉�" :maxlength="-1" placeholder-class="placeholder9"
+							cols="30" rows="10"></textarea>
+					</view>
+					<view class="btns">
+						<view class="btn" @click="showModal = false">鍙栨秷</view>
+						<view class="btn sub" @click="onSubmit">鎻愪氦</view>
+					</view>
+				</view>
+			</u-popup>
+			<!--  -->
+			<u-popup :show="showTip" mode="center" :round="10" @close="showTip = false" closeOnClickOverlay>
+				<view class="modal_t">
+					<view class="h1">娓╅Θ鎻愮ず</view>
+					<view class="content">
+						<view v-if="info.unFinishAmount > 0">杩樻湁<text class="red">{{ info.unFinishAmount }}</text>椤圭墿鏂欐湭鐩樼偣</view>
+						<view>鎻愪氦鍚庡皢鏃犳硶淇敼</view>
+					</view>
+					<view class="btns">
+						<view class="btn" @click="showTip = false">鍙栨秷</view>
+						<view class="btn sub" @click="tipSub">纭鎻愪氦</view>
+					</view>
+				</view>
+			</u-popup>
+		</view>
+		<!--  -->
+		<view class="reader-box" @click="stopScan" v-if="isScaning">
+			<view class="reader" id="reader"></view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		ywStocktakingDetail,
+		getYwStocktakingRecord,
+		takingDataOpen,
+		ywStocktaFinishById
+	} from '@/api'
+	import {
+		Html5Qrcode
+	} from 'html5-qrcode';
+	export default {
+		data() {
+			return {
+				param: {},
+				info: {},
+				id: '',
+				activeTab: 0,
+
+				list: [],
+				page: 0,
+				total: 0,
+
+				showModal: false,
+				showTip: false,
+				modalForm: {},
+
+				html5Qrcode: null,
+				isScaning: false,
+
+			};
+		},
+		onLoad(op) {
+			this.id = op.id
+			this.getDetail()
+			this.getList()
+		},
+		methods: {
+			checkSub() {
+				const {
+					modalForm
+				} = this
+				// let str = modalForm.unFinishAmount > 0 ? '杩樻湁涓夐」鐗╂枡'
+			},
+			getDetail() {
+				const {
+					id
+				} = this
+				ywStocktakingDetail(id).then(res => {
+					this.info = res.data
+
+				})
+			},
+			handleQuery() {
+				this.list = []
+				this.page = 1
+				this.getList()
+			},
+			getList() {
+				const {
+					page,
+					activeTab,
+					id,
+					param
+				} = this
+				getYwStocktakingRecord({
+					capacity: 20,
+					page,
+					model: {
+						status: activeTab,
+						stocktakingId: id,
+						...param
+					}
+				}).then(res => {
+					this.list = [...this.list, ...res.data.records]
+					this.total = res.data.total
+					if(this.param.materialQrcode && this.list.length == 1){
+						this.openEheck(this.list[0])
+						this.$set(this.param, 'materialQrcode', null)
+					}
+					
+					
+				})
+			},
+			scrolltolower() {
+				const {
+					total,
+					list
+				} = this
+				if (list.length < total) {
+					this.page = this.page + 1
+					this.getList()
+				} else {
+					this.showToast('鏆傛棤鏇村鏁版嵁')
+				}
+			},
+			openEheck(item) {
+				this.modalForm = {
+					...item
+				}
+				this.showModal = true
+			},
+			onSubmit() {
+				const {
+					modalForm
+				} = this
+				if (!modalForm.actStock) return this.showToast('璇疯緭鍏ユ纭殑鐩樼偣鏁伴噺')
+				takingDataOpen({
+					...modalForm
+				}).then(res => {
+					if (res.code == 200) {
+						this.showToast('鎻愪氦鎴愬姛')
+						this.handleQuery()
+						this.getDetail()
+						this.showModal = false
+					}
+				})
+			},
+			changeAct(val) {
+				const actStock = this.modalForm.actStock || 0
+				this.$set(this.modalForm, 'actStock', actStock + val)
+			},
+			tabsClick(val) {
+				this.activeTab = val
+				this.page = 0
+				this.list = []
+				this.getList()
+			},
+			tipSub() {
+				const { info } = this
+				ywStocktaFinishById(info.id).then(res => {
+					this.showTip = false
+					uni.navigateBack()
+				})
+				
+			},
+			openQrcode() {
+				this.isScaning = true;
+				Html5Qrcode.getCameras().then((devices) => {
+					if (devices && devices.length) {
+						this.html5Qrcode = new Html5Qrcode('reader');
+						this.html5Qrcode.start({
+								facingMode: 'environment'
+							}, {
+								focusMode: 'continuous', //璁剧疆杩炵画鑱氱劍妯″紡
+								fps: 5, //璁剧疆鎵爜璇嗗埆閫熷害
+								qrbox: 280 //璁剧疆浜岀淮鐮佹壂鎻忔澶у皬
+							},
+							(decodeText, decodeResult) => {
+								if (decodeText) { //杩欓噷decodeText灏辨槸閫氳繃鎵弿浜岀淮鐮佸緱鍒扮殑鍐呭
+									this.stopScan()
+									this.$set(this.param, 'materialQrcode', decodeText)
+									this.handleQuery()
+								}
+							},
+							(err) => {
+								// console.log(err);  //閿欒淇℃伅
+							}
+						);
+					}
+				});
+			},
+
+			stopScan() {
+				console.log('鍋滄鎵爜')
+				this.isScaning = false;
+				if (this.html5Qrcode) {
+					this.html5Qrcode.stop();
+				}
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.main_app {
+		padding: 0 30rpx;
+		overflow: hidden;
+	}
+
+	.tabs {
+		display: flex;
+		width: 750rpx;
+		margin: 12rpx -30rpx 20rpx;
+		border-bottom: 1rpx solid #E5E5E5;
+
+		.tab {
+			font-size: 30rpx;
+			color: #666666;
+			flex: 1;
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			justify-content: flex-end;
+			height: 72rpx;
+
+			.name {
+				display: flex;
+				align-items: center;
+			}
+
+			.border {
+				width: 54rpx;
+				height: 6rpx;
+				background-color: #fff;
+				border-radius: 3rpx;
+				margin-top: 12rpx;
+			}
+		}
+
+		.active {
+			font-weight: 600;
+			font-size: 32rpx;
+			color: #222222;
+
+			.border {
+				background-color: $primaryColor;
+			}
+
+		}
+
+	}
+
+	.head_wrap {
+		display: flex;
+		align-items: center;
+		margin-bottom: 36rpx;
+
+		.search_wrap {
+			display: flex;
+			align-items: center;
+			width: 100%;
+			height: 76rpx;
+			background: #F7F7F7;
+			border-radius: 38rpx;
+			padding-left: 30rpx;
+
+			input {
+				flex: 1;
+			}
+
+			.search {
+				width: 28rpx;
+				height: 28rpx;
+			}
+		}
+
+	}
+
+	.scroll_Y {
+		height: calc(100vh - 350rpx);
+	}
+
+	.list {
+
+		.item {
+			border-bottom: 1rpx solid #E5E5E5;
+			padding-bottom: 24rpx;
+			margin-bottom: 16rpx;
+
+			.title {
+				font-weight: 600;
+				font-size: 34rpx;
+				color: #222222;
+				margin-bottom: 10rpx;
+			}
+
+			.line {
+				height: 60rpx;
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				color: #666666;
+
+				.btn {
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					height: 60rpx;
+					padding: 0 20rpx;
+					background: #0068FF;
+					box-shadow: 0rpx 4rpx 12rpx 0rpx rgba(0, 104, 255, 0.3);
+					border-radius: 30rpx;
+					font-size: 26rpx;
+					color: #FFFFFF;
+				}
+			}
+
+			.static {
+				display: flex;
+				height: 84rpx;
+				background: #F7F7F7;
+				font-size: 30rpx;
+				margin-top: 12rpx;
+				padding: 16rpx 0;
+
+				.spi {
+					border: 1rpx solid #E5E5E5;
+				}
+
+				.ite {
+					flex: 1;
+					display: flex;
+					align-items: center;
+					justify-content: center;
+
+					.val {
+						font-weight: 500;
+					}
+				}
+			}
+		}
+	}
+
+	.footer_btn {
+		padding: 20rpx 40rpx 0;
+		border-top: 1px solid #e5e5e5;
+		width: 750rpx;
+		margin: 0 -30rpx;
+
+		.sweep {
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			font-size: 32rpx;
+			font-weight: 500;
+			width: 670rpx;
+			height: 88rpx;
+			background: #0068FF;
+			box-shadow: 0rpx 8rpx 20rpx 0rpx rgba(0, 104, 255, 0.3);
+			border-radius: 44rpx;
+			color: #FFFFFF;
+		}
+
+		.sub_result {
+			background-color: #fff;
+			color: #FF0000;
+			border: 1rpx solid #FF0000;
+			box-shadow: none
+		}
+
+		image {
+			width: 32rpx;
+			height: 32rpx;
+			margin-right: 6rpx;
+		}
+	}
+
+	.modal_wrap {
+		padding: 36rpx 30rpx;
+
+		.modal_title {
+			font-weight: 500;
+			font-size: 32rpx;
+			color: #222222;
+			margin-bottom: 40rpx;
+			text-align: center;
+		}
+
+		.title {
+			font-weight: 600;
+			font-size: 34rpx;
+			color: #222222;
+		}
+
+		.item {
+			font-size: 28rpx;
+			color: #666666;
+			height: 56rpx;
+			display: flex;
+			align-items: center;
+		}
+
+		.content {
+			border-top: 1rpx solid #E5E5E5;
+			margin-top: 16rpx;
+
+			.line {
+				height: 84rpx;
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+
+				.la {
+					font-weight: 500;
+					font-size: 32rpx;
+					color: #222222;
+				}
+
+				.val {
+					display: flex;
+					justify-content: flex-end;
+					align-items: center;
+					flex: 1;
+
+					.wrap {
+						display: flex;
+						align-items: center;
+
+						input {
+							width: 120rpx;
+							height: 72rpx;
+							border-radius: 8rpx;
+							border: 2rpx solid #0068FF;
+							margin: 0 16rpx;
+							padding: 0 10rpx;
+							text-align: center;
+						}
+					}
+
+					.unit {
+						font-size: 30rpx;
+						color: #666666;
+						margin-left: 20rpx;
+					}
+				}
+
+				image {
+					width: 72rpx;
+					height: 72rpx;
+				}
+			}
+		}
+
+		.remark {
+			margin-top: 16rpx;
+
+			.la {
+				font-size: 30rpx;
+				color: #222222;
+				margin-bottom: 16rpx;
+			}
+
+			textarea {
+				width: 690rpx;
+				height: 240rpx;
+				background: #F7F7F7;
+				border-radius: 12rpx;
+				padding: 10rpx 20rpx;
+			}
+		}
+
+		.btns {
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			margin-top: 80rpx;
+
+			.btn {
+				width: 336rpx;
+				height: 88rpx;
+				border-radius: 44rpx;
+				border: 2rpx solid $primaryColor;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				font-size: 32rpx;
+				color: $primaryColor;
+			}
+
+			.sub {
+				background-color: $primaryColor;
+				color: #fff;
+			}
+		}
+	}
+
+
+	.modal_t {
+		width: 520rpx;
+		text-align: center;
+		display: flex;
+		flex-direction: column;
+
+		.h1 {
+			height: 86rpx;
+			font-weight: 500;
+			font-size: 32rpx;
+			color: #333333;
+			display: flex;
+			align-items: flex-end;
+			justify-content: center;
+		}
+
+		.content {
+			flex: 1;
+			display: flex;
+			flex-direction: column;
+			justify-content: center;
+			align-items: center;
+			padding: 30rpx 0;
+		}
+
+		.btns {
+			height: 102rpx;
+			display: flex;
+			align-items: center;
+			border-top: 1rpx solid #E5E5E5;
+
+			.btn {
+				height: 102rpx;
+				flex: 1;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				border-right: 1rpx solid #E5E5E5;
+				font-weight: 400;
+				font-size: 32rpx;
+				color: #999999;
+
+				&:nth-last-child(1) {
+					border-right: none;
+				}
+			}
+
+			.sub {
+				color: $primaryColor;
+			}
+		}
+	}
+
+	.reader-box {
+		position: fixed;
+		top: 0;
+		bottom: 0;
+		left: 0;
+		right: 0;
+		background-color: rgba(0, 0, 0, 0.5);
+	}
+
+	.reader {
+		width: 100%;
+		// width: 540rpx;
+		// height: 540rpx;
+		position: absolute;
+		top: 50%;
+		left: 50%;
+		transform: translate(-50%, -50%);
+	}
+</style>
\ No newline at end of file
diff --git a/h5/pages/inventory/index.vue b/h5/pages/inventory/index.vue
new file mode 100644
index 0000000..140a4e9
--- /dev/null
+++ b/h5/pages/inventory/index.vue
@@ -0,0 +1,213 @@
+<template>
+	<view class="main_app">
+		<view class="head_wrap">
+			<view class="search_wrap">
+				<image class="mr12 search" src="@/static/home/ic_search@2x.png" mode="widthFix"></image>
+				<input v-model="param.name" @confirm="handleQuery" type="text" placeholder="鎼滅储鐩樼偣鍗曞悕绉�"
+					placeholder-class="placeholder9" />
+			</view>
+		</view>
+		<!--  -->
+		<view class="list">
+			<view class="item" @click="itemClick(item)" v-for="item in list">
+				<image v-if="item.status == 0 || item.status == 1" class="img" src="@/static/side/ic_pandian@2x.png" mode="">
+				</image>
+				<image v-else class="img" src="@/static/side/ic_pandian_grey@2x.png" mode=""></image>
+				<view class="content">
+					<view class="head">
+						<view class="title">{{item.name}}</view>
+						<view class="status" v-if="item.status == 0">鏈紑濮�</view>
+						<view class="status green" v-if="item.status == 1">鐩樼偣涓�</view>
+						<view class="status gray" v-if="item.status == 2">宸插畬鎴�</view>
+						<view class="status gray" v-if="item.status == 3">宸插彇娑�</view>
+					</view>
+					<view class="line">鐩樼偣鏃ユ湡锛歿{item.planDate}}</view>
+					<view class="line">鐩樼偣浠撳簱锛歿{item.warehouseName}}</view>
+					<view class="line">
+						<view class="">鐩樼偣浜哄憳锛歿{item.userName}}</view>
+						<view class="btn" v-if="item.status == 0" @click="startHandle(item)">寮�濮嬬洏鐐�</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		getYwStocktaking,
+		ywStocktakingBegin
+	} from '@/api'
+	export default {
+		data() {
+			return {
+				param: {},
+				list: [],
+				page: 0,
+				total: 0,
+			};
+		},
+		onShow() {
+			this.handleQuery()
+		},
+		methods: {
+			getList() {
+				const {
+					page,
+					param
+				} = this
+				getYwStocktaking({
+					capacity: 20,
+					page,
+					model: {
+						...param
+					}
+				}).then(res => {
+					this.list = [...this.list, ...res.data.records]
+					this.total = res.data.total
+				})
+			},
+			itemClick(item) {
+				if(item.status == 1){
+					uni.navigateTo({
+						url: '/pages/inventory/detail?id=' + item.id
+					})
+				}
+			},
+			startHandle(item) {
+				uni.showModal({
+					content: '鐩樼偣鏈熼棿涓嶅彲杩涜鍑哄叆搴撴搷浣�',
+					success: (res) => {
+						if (res.confirm) {
+							ywStocktakingBegin(item.id).then(() => {
+								uni.navigateTo({
+									url: '/pages/inventory/detail?id=' + item.id
+								})
+							})
+							
+						} 
+					}
+				})
+				
+			},
+			handleQuery() {
+				this.list = []
+				this.page = 1
+				this.getList()
+			},
+			scrolltolower() {
+				const {
+					total,
+					list
+				} = this
+				if (list.length < total) {
+					this.page = this.page + 1
+					this.getList()
+				} else {
+					this.showToast('鏆傛棤鏇村鏁版嵁')
+				}
+			},
+		}
+	}
+</script>
+
+<style lang="scss">
+	.main_app {
+		padding: 10rpx 30rpx 0;
+		font-size: 28rpx;
+	}
+
+	.head_wrap {
+		display: flex;
+		align-items: center;
+		margin-bottom: 40rpx;
+
+		.search_wrap {
+			display: flex;
+			align-items: center;
+			width: 100%;
+			height: 76rpx;
+			background: #F7F7F7;
+			border-radius: 38rpx;
+			padding-left: 30rpx;
+
+			input {
+				flex: 1;
+			}
+
+			.search {
+				width: 28rpx;
+				height: 28rpx;
+			}
+		}
+
+	}
+
+	.list {
+		height: calc(100vh - 136rpx);
+
+		.item {
+			display: flex;
+			border-bottom: 1rpx solid #E5E5E5;
+			padding-bottom: 28rpx;
+			margin-bottom: 20rpx;
+			.img {
+				width: 80rpx;
+				height: 80rpx;
+				background: rgba(0, 104, 255, 0.08);
+				border-radius: 12rpx;
+				margin-right: 24rpx;
+			}
+
+			.content {
+				flex: 1;
+
+				.head {
+					display: flex;
+					align-items: center;
+					justify-content: space-between;
+					margin-bottom: 12rpx;
+
+					.title {
+						font-weight: 600;
+						font-size: 34rpx;
+						color: #222222;
+					}
+
+					.status {
+						color: $primaryColor;
+					}
+
+					.green {
+						color: #0ADE79;
+					}
+
+					.gray {
+						color: #AAAAAA;
+					}
+				}
+
+				.line {
+					display: flex;
+					justify-content: space-between;
+					align-items: center;
+					color: #666666;
+					height: 60rpx;
+
+					.btn {
+						width: 144rpx;
+						height: 60rpx;
+						background: $primaryColor;
+						box-shadow: 0rpx 4rpx 12rpx 0rpx rgba(0, 104, 255, 0.3);
+						border-radius: 30rpx;
+						color: #fff;
+						display: flex;
+						align-items: center;
+						justify-content: center;
+						font-size: 26rpx;
+					}
+				}
+			}
+		}
+	}
+</style>
\ No newline at end of file
diff --git a/h5/pages/operation/device.vue b/h5/pages/operation/device.vue
index 414be7b..25d7921 100644
--- a/h5/pages/operation/device.vue
+++ b/h5/pages/operation/device.vue
@@ -84,7 +84,7 @@
 		uploadUrl,
 		ywDevicePost,
 		ywDeviceCreate,
-		getPointRecordByCode
+		getFindByCode
 	} from '@/api'
 	import dayjs from 'dayjs';
 	import {
@@ -285,15 +285,14 @@
 								qrbox: 280 //璁剧疆浜岀淮鐮佹壂鎻忔澶у皬
 							},
 							(decodeText, decodeResult) => {
-								if (decodeText) { //杩欓噷decodeText灏辨槸閫氳繃鎵弿浜岀淮鐮佸緱鍒扮殑鍐呭
-									this.$set(this.param, 'deviceCode', decodeText)
+								if (decodeText) { //杩欓噷decodeText灏辨槸閫氳繃鎵弿浜岀淮鐮佸緱鍒扮殑鍐呭
 									this.stopScan(); //鍏抽棴鎵爜鍔熻兘
-									getPointRecordByCode({
-										// taskId: this.id,
-										pointCode: decodeText
-									}).then(ress => {
+									getFindByCode(decodeText).then(ress => {
 										if (ress.data) {
 											console.log('ress', ress.data);
+											this.$set(this.param, 'deviceCode', ress.data.code)
+											this.$set(this.param, 'deviceId', ress.data.id)
+											this.$set(this.param, 'deviceName', ress.data.name)
 										} else {
 											this.showToast('鏈尮閰嶅埌宸℃鐐�,璇烽噸鏂版壂鎻�')
 										}
diff --git a/h5/pages/polling/detail.vue b/h5/pages/polling/detail.vue
index 45ad7fb..2218e35 100644
--- a/h5/pages/polling/detail.vue
+++ b/h5/pages/polling/detail.vue
@@ -48,7 +48,7 @@
 							<view class="la">宸℃鏃堕棿锛�</view>
 							<view class="val">
 								<text>{{item.dealDate}}</text>
-								<text v-if="item.status == 1" class="detail">鏌ョ湅璇︽儏</text>
+								<text @click="detailClick(item)" v-if="item.status == 1" class="detail">鏌ョ湅璇︽儏</text>
 							</view>
 						</view>
 					</template>
@@ -60,6 +60,7 @@
 			<view class="sub_btn">鎵爜宸℃</view>
 		</view>
 		<!--  -->
+	
 		<view class="reader-box" @click="stopScan" v-if="isScaning">
 			<view class="reader" id="reader"></view>
 		</view>
@@ -101,7 +102,9 @@
 					},
 				],
 				html5Qrcode: null,
-				isScaning: false,
+				isScaning: false,
+				
+				
 			};
 		},
 		onLoad(option) {
@@ -155,12 +158,18 @@
 				if (this.html5Qrcode) {
 					this.html5Qrcode.stop();
 				}
-			},
+			},
+			
 			itemClick(item) {
 				if (!this.flag) return
 				uni.navigateTo({
 					url: '/pages/polling/point?id=' + item.id
 				})
+			},
+			detailClick(item) {
+				uni.navigateTo({
+					url: '/pages/polling/point?id=' + item.id
+				})
 			},
 			getDetail() {
 				const {
diff --git a/h5/pages/polling/point.vue b/h5/pages/polling/point.vue
index 1288d07..122737b 100644
--- a/h5/pages/polling/point.vue
+++ b/h5/pages/polling/point.vue
@@ -28,7 +28,12 @@
 			<view class="files">
 				<view class="adduser_list_item_ipt1_upload" v-for="(item, i) in info.multifileList" :key="i">
 					<image v-if="item.type == 0" :src="item.fileurlFull" mode="widthFix"></image>
-					<video v-if="item.type == 1" :src="item.fileurlFull" :controls="false"></video>
+					<!-- <video v-if="item.type == 1" :src="item.fileurlFull" :controls="false"></video> -->
+					<view v-if="item.type == 1" @click="videoClick(item)" class="video_wrap">
+						<video :src="item.fileurlFull" initial-time="0.01" :show-center-play-btn="false" :controls="false"
+							class="video" :enable-progress-gesture="false" muted />
+						<image src="@/static/play.png" class="play" mode=""></image>
+					</view>
 				</view>
 			</view>
 			<view v-if="info.dealInfo" class="desc">{{ info.dealInfo }}</view>
@@ -96,7 +101,13 @@
 			@cancel="isShowHandleDate = false" mode="datetime"></u-datetime-picker>
 		<u-picker :show="isShowRes" keyName="name" @cancel="isShowRes = false" @confirm='confirmRes'
 			:columns="columns"></u-picker>
-
+			<!--  -->
+			<view v-if="videoPlay" class="video_app">
+				<video controls autoplay muted x5-video-player-type="h5" x5-video-player-fullscreen="true" id="myvideo"
+					:src="videoUrl" @fullscreenchange="screenChange"></video>
+				<view class="bg" @click="closeVideo"></view>
+			</view>
+			<!--  -->
 	</view>
 </template>
 
@@ -135,7 +146,11 @@
 							name: '璺宠繃'
 						},
 					]
-				],
+				],
+				
+				videoPlay: false,
+				videoContext: null,
+				videoUrl: ''
 			};
 		},
 		onLoad(option) {
@@ -204,6 +219,26 @@
 				this.$set(this.handleParam, 'dealStatus', e.value[0].id)
 				this.$set(this.handleParam, 'dealName', e.value[0].name)
 				this.isShowRes = false
+			},
+			videoClick(item) {
+				this.videoPlay = true;
+				this.videoContext = uni.createVideoContext("myvideo", this); // this杩欎釜鏄疄渚嬪璞� 蹇呬紶
+				this.videoUrl = item.fileurlFull;
+				this.videoContext.requestFullScreen();
+				this.$nextTick(() => {
+					this.videoContext.play();
+				})
+			},
+			screenChange(e) {
+				let fullScreen = e.detail.fullScreen // 鍊紅rue涓鸿繘鍏ュ叏灞忥紝false涓洪��鍑哄叏灞�
+				if (!fullScreen) {
+					//閫�鍑哄叏灞�
+					this.videoPlay = false // 闅愯棌鎾斁鐩掑瓙
+				}
+			},
+			closeVideo() {
+				this.videoPlay = false
+				this.videoContext = null
 			},
 			fileDel(str, i) {
 				this[str].splice(i, 1);
@@ -470,11 +505,51 @@
 		image {
 			width: 100%;
 			height: 100%;
+		}
+		video {
+			width: 100%;
+			height: 100%;
 		}
-
-		video {
-			width: 100%;
-			height: 100%;
+		.video_wrap {
+			position: relative;
+			border: 1px solid;
+			width: 156rpx;
+			height: 156rpx;
+			border-radius: 4rpx;
+		
+			.play {
+				width: 60rpx !important;
+				height: 60rpx !important;
+				position: absolute;
+				top: 50%;
+				left: 50%;
+				transform: translate(-50%, -50%);
+			}
 		}
+	}
+	
+	.video_app {
+		overflow: hidden;
+		position: fixed;
+		left: 0;
+		top: 0;
+		width: 100vw;
+		height: 100vh;
+		display: flex;
+		align-items: center;
+		z-index: 9990;
+	
+		.bg {
+			background-color: rgba(0, 0, 0, .6);
+			position: absolute;
+			width: 100%;
+			height: 100%;
+			z-index: -1;
+		}
+	
+		video {
+			width: 100%;
+			height: 42vh;
+		}
 	}
 </style>
\ No newline at end of file
diff --git a/h5/pages/workOrder/detail.vue b/h5/pages/workOrder/detail.vue
index c112a22..1a4b1a1 100644
--- a/h5/pages/workOrder/detail.vue
+++ b/h5/pages/workOrder/detail.vue
@@ -14,7 +14,7 @@
 					<!-- <video v-if="item.type == 1" :src="item.fileurlFull" :controls="false"></video> -->
 					<view v-if="item.type == 1" @click="videoClick(item)" class="video_wrap">
 						<video :src="item.fileurlFull" initial-time="0.01" :show-center-play-btn="false" :controls="false"
-							class="video" :enable-progress-gesture="false" autoplay muted />
+							class="video" :enable-progress-gesture="false" muted />
 						<image src="@/static/play.png" class="play" mode=""></image>
 					</view>
 				</view>
diff --git a/h5/pages/workOrder/problemEdit.vue b/h5/pages/workOrder/problemEdit.vue
new file mode 100644
index 0000000..0cf8f09
--- /dev/null
+++ b/h5/pages/workOrder/problemEdit.vue
@@ -0,0 +1,313 @@
+<template>
+	<view class="main_app">
+		<view class="list">
+			<view class="item">
+				<view class="la">浣嶇疆</view>
+				<view class="line input_wrap">
+					<input type="text" v-model="param.position" :maxlength="50" placeholder="璇疯緭鍏ュ彂鐜伴棶棰樼殑璇︾粏浣嶇疆" placeholder-class="placeholder9" />
+				</view>
+			</view>
+			<view class="item">
+				<view class="la"><text class="red">*</text>鎻忚堪</view>
+				<view class="line">
+					<textarea :maxlength="300" v-model="param.content" placeholder="璇疯缁嗘弿杩扮幇鍦烘儏鍐�,渚夸簬宸ヤ綔浜哄憳鍙婃椂澶勭悊" placeholder-class="placeholder9" />
+				</view>
+			</view>
+			<view class="item">
+				<view class="la">鐜板満鐓х墖</view>
+				<view class="upload_wrap">
+					<view class="upload_file" @click="showUpload = true">
+						<u-icon name="plus" color="rgb(153, 153, 153)" size="28"></u-icon>
+						<view class="mt6">鍥剧墖/瑙嗛</view>
+					</view>
+					<view class="upload_file" v-for="(item, i) in fileList" :key="i">
+						<u-icon class="close" size="20" name="close-circle-fill" color="red"
+							@click="fileDel('fileList', i)"></u-icon>
+						<image v-if="item.type == 0" :src="item.fileurlFull" mode="widthFix"></image>
+						<video v-if="item.type == 1" :show-center-play-btn="false" :src="item.fileurlFull" :controls="false"></video>
+					</view>
+				</view>
+			</view>
+			<view class="item">
+				<view class="la"><text class="red">*</text>涓婃姤浜�</view>
+				<view class="line input_wrap">
+					<input v-model="param.name" type="text" :maxlength="10" placeholder="璇疯緭鍏�" placeholder-class="placeholder9" />
+				</view>
+			</view>
+			<view class="item">
+				<view class="la"><text class="red">*</text>涓婃姤浜虹數璇�</view>
+				<view class="line input_wrap">
+					<input v-model="param.phone" type="tel" :maxlength="18" placeholder="璇疯緭鍏�" placeholder-class="placeholder9" />
+				</view>
+			</view>
+		</view>
+		<view class="sub_btn" @click="onSubmit">鎻愪氦</view>
+		<!--  -->
+		<u-popup :show="showUpload" @close="showUpload = false" closeOnClickOverlay>
+			<view class="sel_upload_wrap">
+				<view class="btn" @click="uploadImage">閫夋嫨鍥剧墖</view>
+				<view class="btn" @click="uploadVideo">閫夋嫨瑙嗛</view>
+			</view>
+		</u-popup>
+		<!--  -->
+
+	</view>
+</template>
+
+<script>
+	import {
+		uploadUrl,
+		ywProblemCreate,
+	} from '@/api'
+	import dayjs from 'dayjs';
+	export default {
+		data() {
+			return {
+				param: {},
+				showUpload: false,
+				fileList: [],
+
+			};
+		},
+		onLoad() {
+		},
+		methods: {
+			onSubmit() {
+				const {
+					param,
+					fileList
+				} = this
+				if (!param.content) return this.showToast('璇疯緭鍏ョ幇鍦烘儏鍐垫弿杩�')
+				if (!param.name) return this.showToast('璇疯緭鍏ヤ笂鎶ヤ汉濮撳悕')
+				if (!param.phone) return this.showToast('璇疯緭鍏ヤ笂鎶ヤ汉鐢佃瘽')
+				ywProblemCreate({
+					...param,
+					fileList
+				}).then(res => {
+					this.showToast('鎻愪氦鎴愬姛')
+					this.param = {}
+					uni.navigateTo({
+						url: '/pages/workOrder/result'
+					})
+				})
+			},
+			fileDel(str, i) {
+				this[str].splice(i, 1);
+			},
+			uploadImage() {
+				this.showUpload = false;
+				let token = uni.getStorageSync('token') || '';
+				uni.chooseImage({
+					count: 6,
+					success: chooseImageRes => {
+						uni.showLoading({
+							title: '涓婁紶涓�',
+							mask: true
+						});
+						const tempFilePaths = chooseImageRes.tempFilePaths;
+						let imgs = tempFilePaths.map((value, index) => {
+							return {
+								name: 'file',
+								uri: value
+							};
+						});
+						uni.uploadFile({
+							url: `${uploadUrl}`,
+							files: imgs,
+							name: 'file',
+							formData: {
+								folder: 'YW_WORKORDER_FILE'
+							},
+							header: {
+								Dm_user_token: token
+							},
+							success: uploadFileRes => {
+								let res = JSON.parse(uploadFileRes.data);
+								if (res.data && res.data.length > 0) {
+									res.data.forEach(i => {
+										i.type = 0;
+										i.fileurl = i.imgaddr;
+										i.fileurlFull = i.url;
+										if(this.fileList.length < 9){
+											this.fileList.push(i);
+										}
+									});
+								}
+							},
+							fail(err) {
+								console.log('err', err);
+							},
+							complete() {
+								uni.hideLoading();
+								// if (i === chooseImageRes.tempFilePaths.length - 1) {
+								//   uni.hideLoading()
+								// }
+							}
+						});
+					}
+				});
+			},
+			uploadVideo() {
+				this.showUpload = false;
+				let token = uni.getStorageSync('token') || '';
+				uni.chooseVideo({
+					success: chooseImageRes => {
+						uni.showLoading({
+							title: '涓婁紶涓�',
+							mask: true
+						});
+						uni.uploadFile({
+							url: `${uploadUrl}`,
+							filePath: chooseImageRes.tempFilePath,
+							header: {
+								Dm_user_token: token
+							},
+							name: 'file',
+							formData: {
+								folder: 'YW_WORKORDER_FILE'
+							},
+							success: uploadFileRes => {
+								let res = JSON.parse(uploadFileRes.data);
+								if (res.data && res.data.length > 0) {
+									res.data.forEach(i => {
+										i.type = 1;
+										i.fileurl = i.imgaddr;
+										i.fileurlFull = i.url;
+										if(this.fileList.length < 9){
+											this.fileList.push(i);
+										}
+									});
+								}
+							},
+							complete() {
+								uni.hideLoading();
+							}
+						});
+					}
+				});
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.list {
+
+		.item {
+			.la {
+				margin-top: 30rpx;
+			}
+
+			.line {
+
+				textarea {
+					box-sizing: border-box;
+					width: 690rpx;
+					height: 200rpx;
+					background-color: #f7f7f7;
+					font-size: 28rpx;
+					color: #333333;
+					padding: 24rpx;
+					border-radius: 8rpx;
+					margin-bottom: 30rpx;
+					margin-top: 20rpx;
+				}
+			}
+
+			.sel_wrap {
+				height: 90rpx;
+				display: flex;
+				justify-content: space-between;
+				align-items: center;
+				border-bottom: 1rpx solid #E5E5E5;
+			}
+			.input_wrap{
+				width: 100%;
+				height: 90rpx;
+				display: flex;
+				align-items: center;
+				border-bottom: 1rpx solid #e5e5e5;
+				input{
+					width: 100%;
+				}
+			}
+
+			.upload_wrap {
+				display: flex;
+				flex-wrap: wrap;
+				margin-bottom: 30rpx;
+			}
+
+			.upload_file {
+				margin-top: 24rpx;
+				width: 156rpx;
+				height: 156rpx;
+				margin-right: 20rpx;
+				border: 2rpx solid #e5e5e5;
+				background: #f7f7f7;
+				color: #666666;
+				font-size: 22rpx;
+				display: flex;
+				flex-direction: column;
+				align-items: center;
+				justify-content: center;
+				position: relative;
+
+				&:nth-of-type(4n) {
+					margin-right: 0;
+				}
+
+				.close {
+					position: absolute;
+					right: -20rpx;
+					top: -20rpx;
+					z-index: 9999;
+					background-color: #fff;
+					border-radius: 50%;
+					overflow: hidden;
+				}
+
+				image {
+					width: 100%;
+					height: 100%;
+				}
+
+				video {
+					width: 100%;
+					height: 100%;
+				}
+			}
+
+		}
+	}
+
+	.sub_btn {
+		// position: fixed;
+		// bottom: 68rpx;
+		// left: 40rpx;
+		width: 670rpx;
+		height: 88rpx;
+		margin-top: 80rpx;
+		background: $primaryColor;
+		box-shadow: 0rpx 8rpx 20rpx 0rpx rgba(0, 104, 255, 0.3);
+		border-radius: 44rpx;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		font-weight: 500;
+		font-size: 32rpx;
+		color: #FFFFFF;
+	}
+
+	.sel_upload_wrap {
+		width: 100%;
+		border-top: 1px solid #666666;
+		box-shadow: 0 1 1 #333333;
+
+		.btn {
+			height: 90rpx;
+			line-height: 90rpx;
+			text-align: center;
+		}
+	}
+</style>
\ No newline at end of file
diff --git a/h5/pages/workOrder/result.vue b/h5/pages/workOrder/result.vue
new file mode 100644
index 0000000..d0d3859
--- /dev/null
+++ b/h5/pages/workOrder/result.vue
@@ -0,0 +1,39 @@
+<template>
+	<view class="main_app">
+		<image class="logo" src="/static/ic_paysuccess@2x.png" mode=""></image>
+		<view class="title">鎻愪氦鎴愬姛</view>
+		<view class="">鎰熻阿鎮ㄧ殑涓婃姤锛屾垜浠皢灏藉揩鏍稿疄澶勭悊</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				
+			};
+		}
+	}
+</script>
+
+<style lang="scss">
+.main_app{
+	display: flex;
+	flex-direction: column;
+	align-items: center;
+	padding-top: 200rpx;
+	font-size: 26rpx;
+	color: #999999;
+	.title{
+		font-weight: 500;
+		font-size: 36rpx;
+		color: #333333;
+		margin-bottom: 26rpx;
+	}
+	.logo{
+		width: 180rpx;
+		height: 180rpx;
+		margin-bottom: 40rpx;
+	}
+}
+</style>
diff --git a/h5/static/ic_paysuccess@2x.png b/h5/static/ic_paysuccess@2x.png
new file mode 100644
index 0000000..737e03d
--- /dev/null
+++ b/h5/static/ic_paysuccess@2x.png
Binary files differ
diff --git a/h5/static/side/btn_jia@3x.png b/h5/static/side/btn_jia@3x.png
new file mode 100644
index 0000000..986666c
--- /dev/null
+++ b/h5/static/side/btn_jia@3x.png
Binary files differ
diff --git a/h5/static/side/btn_jian@3x.png b/h5/static/side/btn_jian@3x.png
new file mode 100644
index 0000000..6949c9f
--- /dev/null
+++ b/h5/static/side/btn_jian@3x.png
Binary files differ
diff --git a/h5/static/side/btn_jian_grey@2x.png b/h5/static/side/btn_jian_grey@2x.png
new file mode 100644
index 0000000..274b96c
--- /dev/null
+++ b/h5/static/side/btn_jian_grey@2x.png
Binary files differ
diff --git a/h5/static/side/ic_pandian@2x.png b/h5/static/side/ic_pandian@2x.png
new file mode 100644
index 0000000..e8f8717
--- /dev/null
+++ b/h5/static/side/ic_pandian@2x.png
Binary files differ
diff --git a/h5/static/side/ic_pandian_grey@2x.png b/h5/static/side/ic_pandian_grey@2x.png
new file mode 100644
index 0000000..3917fb3
--- /dev/null
+++ b/h5/static/side/ic_pandian_grey@2x.png
Binary files differ

--
Gitblit v1.9.3