From d07500fef337fc0366d5c51723ddb3ba2071f33d Mon Sep 17 00:00:00 2001
From: 小小儁爺 <1694218219@qq.com>
Date: 星期五, 01 八月 2025 10:33:37 +0800
Subject: [PATCH] 1.计时工资功能开发

---
 pages/mjgl/mjdj.vue |  469 +++++++++++++++++++++++++---------------------------------
 1 files changed, 202 insertions(+), 267 deletions(-)

diff --git a/pages/mjgl/mjdj.vue b/pages/mjgl/mjdj.vue
index 523aa51..55e9599 100644
--- a/pages/mjgl/mjdj.vue
+++ b/pages/mjgl/mjdj.vue
@@ -1,180 +1,69 @@
 <template>
 	<view>
 		<page-nav title="妯″叿鐐规"></page-nav>
-		<view v-show="topContent.length===0">
-			<div class="sacnBody">
-				<div class="scanImg" @click="topScanClick"></div>
-				<div class="scanText">鎵弿妯″叿缂栧彿浜岀淮鐮�</div>
-			</div>
-		</view>
-		<view v-show="topContent.length!==0">
-			<view class="mainContent">
-				<view>
-					<u-gap height="10" bgColor="#eff0f1"></u-gap>
-					<view class="head">
-						<view class="head_block">
-							<view class="head_left">
-								<view class="head_bar"></view>
-								<view class="head_title">
-									妯″叿淇℃伅
-								</view>
-							</view>
 
-							<view class="marginRight20">
-								<u-icon name="scan" @click="topScanClick" color="red" size="24"></u-icon>
-							</view>
 
-						</view>
-						<view class=" flex_column" style="max-height: 180rpx;overflow:auto;padding: 20rpx;">
+		<!-- <view v-if="purchorderArrAll.length>0"> -->
 
-							<view class="flex_between" v-for="item in topContent" :key="item.code">
+
+		<u-input prefixIcon="search" prefixIconStyle="font-size: 22px;color: #909399" placeholder="鎵弿妯″叿缂栫爜/杈撳叆妯″叿淇℃伅"
+			clearable border="surround" @clear='inputBoxValueClear' v-model="inputBoxValue"
+			@change="changeInputBoxValue">
+			<template slot="suffix">
+				<u-icon name="scan" color="#909399" size="24" @click="topScanClick"></u-icon>
+			</template>
+		</u-input>
+
+
+
+		<u-alert :title="'妯″叿鏁帮紙鍏�'+title+'涓級'" type="primary"></u-alert>
+
+
+
+		<scroll-view class="container" scroll-y="true" @scroll="scroll">
+			<!-- 铏氭嫙鍒楄〃鎬婚珮搴� -->
+			<view :style="{'height': `${totalHeight}rpx`, 'position': 'relative'}">
+				<!-- 鍙娓叉煋鍖� -->
+				<view :style="{'top': `${top}px`}" style="width: 100%;position:absolute">
+					<!--鍦ㄨ繖閲岃嚜瀹氫箟浣犳暟鎹殑灞曠ず缁撴瀯鍜屾牱寮�,itemHeight涓鸿繖閲岀殑鎬婚珮搴�-->
+
+					<view class="radioGroupClass">
+						<view v-for="(item,index) in purchorderArr" :key="item.code" class="item">
+							<view @click="highlightClick(item.code)" :style="{color:selectedCode===item.code?'#fff':'#000',
+										background:selectedCode===item.code?'#3c9cff':'#fff'
+								}">
+
 								<view style="display: flex;">
-									<view class="flex_column titleFont">
-										<view>妯″叿缂栫爜锛�</view>
-										<view>妯″叿鍚嶇О锛�</view>
-										<view>瑙勬牸鍨嬪彿锛�</view>
+									<view style="text-align: center;margin-right: 20rpx;">{{item.code}}
 									</view>
-									<view class="flex_column contentFont">
-										<view>{{item.code}}</view>
-										<view>{{item.name}}</view>
-										<view>{{item.spec?item.spec:'/'}}</view>
-									</view>
-								</view>
-							</view>
+									<view style="">{{item.name}}</view>
+									<view style="margin-left: 20rpx;">{{item.spec}}</view>
 
-						</view>
-
-					</view>
-					<u-gap height="10" bgColor="#eff0f1"></u-gap>
-
-					<view class="head" style="height: 80rpx;justify-content: center;">
-						<view class="head_block">
-							<view class="head_left" style="margin-bottom: 10rpx;">
-								<view class="head_bar"></view>
-								<view class="head_title" style="margin-right: 50rpx;">
-									鐐规鏍囧噯
 								</view>
 
-
-								<view>
-									{{selectValue}}
-								</view>
-
-							</view>
-
-
-
-							<view class="marginRight20 marginBottom10" v-if='standardArr.length>0'>
-								<u-button @click="show = true" type='primary' size="small" plain
-									shape='circle'>璇烽�夋嫨</u-button>
-							</view>
-
-							<view class="marginRight20 marginBottom10" v-if='standardArr.length===0'>
-								鏆傛棤鍏宠仈鏍囧噯,璇峰厛鍏宠仈
-							</view>
-
-						</view>
-
-
-					</view>
-					<u-gap height="10" bgColor="#eff0f1"></u-gap>
-
-					<view class="head" style="" v-show='centerContent.length!==0'>
-						<view class="head_block">
-							<view class="head_left">
-								<view class="head_bar"></view>
-								<view class="head_title">
-									鐐规椤圭洰鍐呭
-								</view>
-							</view>
-						</view>
-
-						<view :style="{maxHeight:'700rpx',overflow: 'scroll'}">
-
-							<view class="center_border flex_column" style="margin: 10rpx;" v-for="item in centerContent"
-								:key="item.code">
-
-								<view class="flex_between marginBottom10">
-									<view class="center_title">{{item.name}}</view>
-									<!-- <view class="marginRight20" v-if="item.isscan==='Y'">
-										<u-icon name="scan" @click="centerScanClick(item.code)" color="red" size="56">
-										</u-icon>
-									</view> -->
-								</view>
-								<view class="flex_between marginBottom10">
-									<view class='inputClass marginTop10'>
-										<u--input placeholder="璇疯緭鍏�" border="surround"
-											v-model="item.inputValue"></u--input>
-									</view>
-
-
-									<view class="flex_center " style="margin-right:8rpx;">
-										<u-button type="primary" :plain="item.isOK!=='OK'" shape='circle' size="small"
-											text="姝e父" style="margin-right:5rpx;" @click="bwClick(item,'OK')">
-										</u-button>
-										<u-button type="warning" :plain="item.isOK!=='NG'" shape='circle' size="small"
-											text="寮傚父" @click="bwClick(item,'NG')">
-										</u-button>
-									</view>
-								</view>
-								<view class="titleFont">
-									{{item.chkdesc}}
-								</view>
-							</view>
-						</view>
-
-					</view>
-
-					<u-gap height="10" bgColor="#eff0f1"></u-gap>
-
-
-					<view class="head" v-show='centerContent.length!==0'>
-						<view class="head_block" style="align-items: center;height: 80rpx;">
-							<view class="head_left" style="margin-bottom: 10rpx;">
-								<view class="head_bar"></view>
-								<view class="head_title">
-									鐐规缁撴灉
-								</view>
-							</view>
-
-							<view class="flex_center marginBottom10" style="margin-right:8rpx;">
-								<u-button type="primary" :plain="resultValue!=='OK'" shape='circle' size="small"
-									text="姝e父"
-									:disabled="centerContent.filter(i=>i.isOK==='OK'||i.isOK==='NG').length!==centerContent.length"
-									style="margin-right:5rpx;" @click="resultClick('OK')"></u-button>
-								<u-button type="warning" :plain="resultValue!=='NG'" shape='circle' size="small"
-									text="寮傚父"
-									:disabled="centerContent.filter(i=>i.isOK==='OK'||i.isOK==='NG').length!==centerContent.length"
-									@click="resultClick('NG')"></u-button>
 							</view>
 						</view>
 					</view>
-
 
 
 				</view>
-
-
-
-
-
 			</view>
+		</scroll-view>
 
 
-			<view class="footer" v-show='centerContent.length!==0'>
-				<u-button size="large" :loading="isDisabledSubmitButton" loadingText="姝e湪鎻愪氦,璇风◢绛�..." type="primary"
-					:disabled="centerContent.filter(i=>i.isOK==='OK'||i.isOK==='NG').length!==centerContent.length"
-					@click="submit" text="纭鎻愪氦">
-				</u-button>
-			</view>
 
-
+		<view class="footer" style="min-height:62rpx;">
+			<u-button type="primary" size='large' :hairline="true" @click="navigateTo" text="涓嬩竴姝�"></u-button>
 		</view>
+		<!-- </view> -->
 
 
-		<u-action-sheet :actions="standardArr" @select="selectClick" round='20' :closeOnClickOverlay='true'
-			@close="show=false" :closeOnClickAction="true" :safeAreaInsetBottom='true' :show="show"></u-action-sheet>
-
+		<!-- 	<view v-if="purchorderArrAll.length===0">
+			<div class="sacnBody">
+				<div class="boxImg"></div>
+				<div class="scanText">鏆傛棤妯″叿淇℃伅</div>
+			</div>
+		</view> -->
 
 	</view>
 </template>
@@ -182,15 +71,10 @@
 
 <script>
 	import {
-		CheckScanMouldQrCodeData,
-		CheckScanMouldTemp,
-		SelectScanMouldQrCodeItem,
-		MouldCheckSave
+		ScanMouldQrCodeMessageData,
+		ScanMouldQrCodeMessageSubData
 	} from '../../config/api.js';
 	export default {
-		onLoad(option) {
-
-		},
 
 		onPullDownRefresh() {
 			setTimeout(() => {
@@ -202,13 +86,37 @@
 
 		data() {
 			return {
-				isDisabledSubmitButton: false,
-				topContent: [],
-				standardArr: [], //鐐规鏍囧噯
-				show: false,
-				selectValue: '',
-				centerContent: [],
-				resultValue: ''
+
+				inputBoxValue: '', //杈撳叆妗嗗��
+
+				title: 0,
+
+				purchorderArr: [],
+
+				purchorderArrAll: [],
+
+				allList: [], //鍘熷鏁版嵁鍒楄〃
+				//铏氭嫙鍒楄〃
+				showList: [], //鍙鍖哄煙鏄剧ず鐨勬暟鎹�
+				itemHeight: 100, //姣忔潯鏁版嵁鎵�鍗犻珮搴�
+				showNum: 0, //鍙鍖哄煙鏄剧ず鐨勬渶澶ф潯鏁�
+				top: 0, //鍋忕Щ閲�
+				scrollTop: 0, //鍗疯捣鐨勯珮搴�
+				startIndex: 0, //鍙鍖哄煙绗竴鏉℃暟鎹殑绱㈠紩
+				endIndex: 0, //鍙鍖哄煙鏈�鍚庝竴鏉℃暟鎹殑绱㈠紩+1锛�
+
+				selectedCode: ''
+
+			}
+		},
+
+		onShow() {
+			//绗竴娆℃椂璋冪敤涓�涓�,涓攗ni.createSelectorQuery()闇�瑕佸湪鐢熷懡鍛ㄦ湡mounted涔嬪悗浣跨敤
+			// this.scroll()
+		},
+		computed: {
+			totalHeight() {
+				return this.allList.length * this.itemHeight * 2 //鍥犱负rpx鍜宲x鐨勫叧绯�
 			}
 		},
 		created() {
@@ -216,48 +124,63 @@
 		},
 		mounted() {
 			this.init()
+
+			this.getScanMouldQrCodeMessageData()
 		},
 		methods: {
+
+			//铏氭嫙鍒楄〃
+			getShowList() {
+				//鍙鍖哄煙鑳藉嚭鐜扮殑鏁版嵁鏉℃暟
+				this.showNum = Math.ceil(this.contentHeight / this.itemHeight);
+				// console.log('鍙鏁伴噺', this.showNum)
+
+				//鍙鍖哄煙绗竴鏉℃暟鎹殑绱㈠紩
+				this.startIndex = Math.floor(this.scrollTop / this.itemHeight);
+				// console.log('鍒濆绱㈠紩',this.startIndex)
+
+				//鍙鍖哄煙鏈�鍚庝竴鏉℃暟鎹殑涓嬩竴鏉℃暟鎹�
+				this.endIndex = this.startIndex + this.showNum;
+
+				//鍙鍖烘暟鎹紝浼氭瘮瀹為檯鍙澶氭覆鏌撲竴鏉�		
+				this.showList = this.allList.slice(this.startIndex, this.endIndex)
+				// console.log(this.showList)
+
+				//淇濊瘉婊戝姩鏃剁涓�鏉℃暟鎹畬鏁村睍绀�
+				let offsetY = this.scrollTop - (this.scrollTop % this.itemHeight);
+
+				this.top = offsetY;
+			},
+			scroll() {
+				// 鍒╃敤uniapp鎻愪緵鐨勬帴鍙h幏鍙栧彲瑙嗗尯鍩熺殑楂樺害鍜屾粴鍔ㄩ珮搴�
+				let query = uni.createSelectorQuery()
+				let container = query.select('.container');
+				container.fields({
+					// rect:true,   //鏄惁杩斿洖鑺傜偣甯冨眬浣嶇疆淇℃伅{left,top,right,bottom}
+					size: true, //鏄惁杩斿洖鑺傜偣灏哄淇℃伅{width锛宧eight}
+					scrollOffset: true //鏄惁杩斿洖鑺傜偣婊氬姩淇℃伅{scrollLeft,scrollTop}
+				}, (res) => {
+					// console.log(res)
+					this.scrollTop = res.scrollTop
+					this.contentHeight = res.height
+					this.getShowList(); //鍥犱负鎵�鍦ㄥ嚱鏁版槸寮傛
+				}).exec()
+			},
+			highlightClick(code) {
+				this.selectedCode = code
+			},
+
+
 			init() {
 				uni.stopPullDownRefresh();
-
-				// this.getCheckScanMouldQrCodeData('001') 
-				// this.getCheckScanMouldTemp('001')
-				// this.getSelectScanMouldQrCodeItem('001', '001')
 			},
-			async getCheckScanMouldQrCodeData(mouldcode) {
-				const {
-					data: res
-				} = await CheckScanMouldQrCodeData({
-					mouldcode: mouldcode
-				})
-				this.topContent = res
-			},
-			async getCheckScanMouldTemp(mouldcode) {
-				const {
-					data: res
-				} = await CheckScanMouldTemp({
-					mouldcode: mouldcode
-				})
-				this.standardArr = res
-
-				this.centerContent = []
-				this.resultValue = ''
-				this.selectValue = ''
-			},
-			async getSelectScanMouldQrCodeItem(mouldcode, checktempcode) {
-				const {
-					data: res
-				} = await SelectScanMouldQrCodeItem({
-					mouldcode: mouldcode,
-					checktempcode: checktempcode
-				})
-
-				this.centerContent = res
-			},
+			// 鎵爜宸ヤ綅  鐨勬壂鐮佹鐐瑰嚮
 			topScanClick() {
-				let that = this;
+				// if (this.topContent.length > 0) {
+				// 	return uni.$u.toast('璇峰厛鎻愪氦姝ょ淮淇敵璇凤紒')
+				// }
 
+				let that = this;
 				uni.scanCode({
 					onlyFromCamera: true,
 					// scanType: ['barCode', 'qrCode'],
@@ -266,19 +189,11 @@
 						console.log('鏉$爜绫诲瀷锛�' + res.scanType);
 						console.log('鏉$爜鍐呭锛�' + res.result);
 						that.scanContent = res.result;
-						let flag = false
-						that.topContent.forEach(item => {
-							if (item.code === res.result) {
-								flag = true
-							}
-						})
-						if (flag) {
-							that.$u.toast('姝ゆ潯鐮佸凡鎵弿锛屽凡鍦ㄥ垪琛ㄤ腑锛�')
-						} else {
-							//澶勭悊鎵爜浜嬩欢
-							that.getCheckScanMouldQrCodeData(that.scanContent);
-							that.getCheckScanMouldTemp(that.scanContent);
-						}
+						that.inputBoxValue = res.result;
+
+						//澶勭悊鎵爜浜嬩欢
+						that.changeInputBoxValue(that.scanContent);
+
 					},
 					complete: function(res) {
 
@@ -290,60 +205,34 @@
 
 				});
 			},
-			selectClick(val) {
-				this.resultValue = ''
-				this.selectValue = val.name
-				this.getSelectScanMouldQrCodeItem(this.topContent[0].code, val.code)
-
-			},
-			bwClick(item, val) {
-				item.isOK = val
-				if (this.centerContent.every(item => item.isOK !== '')) {
-					if (this.centerContent.every(item => item.isOK === 'OK')) {
-						this.resultValue = 'OK'
-					} else if (this.centerContent.some(item => item.isOK === 'NG')) {
-						this.resultValue = 'NG'
-					}
-				}
-				this.$forceUpdate() //寮哄埗瑙嗗浘鏇存柊
-			},
-			resultClick(val) {
-				this.resultValue = val
-				this.$forceUpdate() //寮哄埗瑙嗗浘鏇存柊
-			},
-			async submit() {
-
-				const children = []
-				this.centerContent.forEach((i, index) => {
-					children.push({
-						seq: index + 1,
-						itemcode: i.code,
-						cycle: '',
-						value: i.inputValue,
-						result: i.isOK
-					})
+			changeInputBoxValue(val) {
+				this.purchorderArr = this.purchorderArrAll.filter((p) => {
+					return p.code.indexOf(val) !== -1 || p.name.indexOf(val) !== -1 || p.spec.indexOf(val) !== -1
 				})
-
-				const data = {
-					code: this.topContent[0].code,
-					name: this.topContent[0].name,
-					standcode: this.selectValue,
-					result: this.resultValue,
-					children
-				}
-
-				// console.log(JSON.stringify(data))
-				this.isDisabledSubmitButton = true
-				const res = await MouldCheckSave('2051', data)
-				if (res.code === '200') {
-					uni.$u.toast('鎻愪氦鎴愬姛锛�')
-					this.isDisabledSubmitButton = false
-					this.topContent = []
-					this.selectValue = ''
-					this.centerContent = []
-					this.resultValue = ''
-				}
+				this.selectedCode = this.purchorderArr[0].code
+				this.$forceUpdate()
 			},
+			inputBoxValueClear() {
+				this.inputBoxValue = ''
+			},
+
+			navigateTo() {
+				uni.navigateTo({
+					url: './mjdj2?code=' + this.selectedCode
+				});
+			},
+			async getScanMouldQrCodeMessageData() {
+				const res = await ScanMouldQrCodeMessageData()
+
+				this.purchorderArrAll = res.data
+
+				this.purchorderArr = res.data
+
+				this.title = res.data.length
+
+				this.selectedCode = res.data[0].code
+
+			}
 		}
 	}
 </script>
@@ -351,7 +240,53 @@
 <style lang="scss" scoped>
 	@import url('@/style/global.css');
 
+	.container {
+		width: 100%;
+		height: 70vh;
+		/*鍘熺敓涓�瀹氬緱鏈夎繖涓猳verflow鐨刪idden鏁堟灉,姝ゅ鐢ㄤ簡scroll-view鎵�浠ヤ笉闇�瑕�*/
+		/*overflow:auto;*/
+	}
+
+	.item {
+		/* 鎸夌収瀹為檯闇�姹傚啓css */
+		width: 100%;
+		height: 200rpx;
+		line-height: 90rpx;
+		/* 瑕佸搴斾笂itemHeight */
+		border: 1px solid #c8c8c8;
+	}
+
 	::v-deep .uicon-arrow-left>span {
 		display: block;
 	}
+
+	.u-input--square {
+		margin: 20rpx 10rpx;
+		border-radius: 40rpx;
+		background-color: #fff;
+		border: 1px solid #c8c8c8;
+	}
+
+	::v-deep .u-alert__text--primary--light {
+		margin-bottom: 0;
+		font-size: 32rpx !important;
+	}
+
+	.radioGroupClass {
+		display: flex;
+		flex-direction: column;
+		background-color: #fff;
+
+		overflow-y: auto;
+		max-height: 1100rpx;
+		margin-top: 20rpx;
+	}
+
+	::v-deep .u-radio-label--right {
+		height: 90rpx;
+		line-height: 90rpx;
+		width: 92%;
+		margin-left: 4%;
+		// padding: 0 50rpx;
+	}
 </style>
\ No newline at end of file

--
Gitblit v1.9.3