ysy 2 vuotta sitten
vanhempi
commit
2eed0fd932

+ 13 - 0
api/pda/workOrder.js

@@ -169,3 +169,16 @@ export async function getWarehouseList() {
 	return Promise.reject(data.message);
 }
 
+
+
+//  pda查询周转车
+export async function getVehicle(params) {
+	const data = await postJ(
+		Vue.prototype.apiUrl + `/pda/mes/workreport/getVehicle`, params, true,
+	);
+
+	if (data.code == 0) {
+		return data.data;
+	}
+	return Promise.reject(data.message);
+}

+ 9 - 2
pages.json

@@ -1434,7 +1434,7 @@
 			}
 		},
 
-	
+
 		{
 			"path": "pages/pda/feeding/bill/index",
 			"style": {
@@ -1442,13 +1442,20 @@
 				"navigationBarTextStyle": "white"
 			}
 		},
-		
+
 		{
 			"path": "pages/pda/jobBooking/index/index",
 			"style": {
 				"navigationStyle": "custom",
 				"navigationBarTextStyle": "white"
 			}
+		},
+		{
+			"path": "pages/pda/turnover/index/index",
+			"style": {
+				"navigationStyle": "custom",
+				"navigationBarTextStyle": "white"
+			}
 		}
 
 

+ 36 - 11
pages/pda/components/bottomOperate.vue

@@ -5,13 +5,21 @@
 			<image class="open_icon" :class="{open_icon_reversal : isOperate}" src="~@/static/pda/open.svg"></image>
 		</view>
 
-
+         
 		<view class="operate_list" v-show="isOperate">
 			<view v-for="(item, index) in btnList[state]" :key="index" class="list rx-bc" @click="operate(item.type)">
 				<view class="round">{{index + 1}}</view>
 				<view class="name">{{item.name}}</view>
 				<image class="arrow_right" src="~@/static/pda/arrow_right.svg"></image>
 			</view>
+			
+			
+
+			<view v-for="(item, idx) in btnsList" :key="idx+ 'btns'" class="list rx-bc" @click="operate(item.type)">
+				<view class="round">{{idx + 1}}</view>
+				<view class="name">{{item.name}}</view>
+				<image class="arrow_right" src="~@/static/pda/arrow_right.svg"></image>
+			</view>
 		</view>
 
 
@@ -27,16 +35,32 @@
 <script>
 	export default {
 		props: {
-			state: String
+			state: String,
+
+			btns: {
+				type: Array,
+				default: () => []
+			}
 		},
+
+	  watch: {
+		btns: {
+			immediate: true,
+			deep: true,
+			handler(newVal) {
+				this.btnsList = []
+			  this.btnsList = newVal
+			}
+		},  
+	  },
+
 		data() {
 			return {
 				isOperate: false,
 
-
+                btnsList: [],
 				btnList: {
-					'1': [
-						{
+					'1': [{
 							name: '领料',
 							type: 'picking'
 						},
@@ -48,7 +72,7 @@
 							name: '报工',
 							type: 'jobBooking'
 						},
-						
+
 
 					]
 				}
@@ -59,7 +83,7 @@
 			open() {
 				this.isOperate = !this.isOperate
 			},
-			
+
 			operate(type) {
 				this.$emit('operate', type)
 			},
@@ -81,10 +105,11 @@
 			width: 48rpx;
 			height: 48rpx;
 		}
-		
-		.open_icon_reversal{
-			 transform: scaleY(-1); /* 垂直翻转 */
-			
+
+		.open_icon_reversal {
+			transform: scaleY(-1);
+			/* 垂直翻转 */
+
 		}
 	}
 

+ 1 - 1
pages/pda/components/workCard.vue

@@ -2,7 +2,7 @@
 
 	<view class="card_box" @click="handleDetail">
 		<view class="item_box rx-sc">
-			<view class="round">{{item.index}}</view>
+			<view class="round" v-if='item.index'>{{item.index}}</view>
 			<view class="orderId">{{item.code}}  </view>
 		</view>
 

+ 10 - 24
pages/pda/feeding/components/aridRegion.vue

@@ -26,13 +26,13 @@
 							<view v-if='!isType' :style="{ color:  item.status == 0 ? '#157A2C' :'#FFA929' }">
 								{{ item.status == 0 ? '空闲' : item.status == 1 ? '占用' : ''}}</view>
 						
-								<view v-if='isType && item.aridRegionList[0].remainingTime == 0 ' style=" color:  #157A2C">
-							    {{  item.aridRegionList[0].remainingTime }}
+								<view v-if='isType && remainingTime == 0 ' style=" color:  #157A2C">
+							    {{  remainingTime }}
 								</view>
 								
-								<view v-if='isType && item.aridRegionList[0].remainingTime != 0 ' style="color:  #FFA929">
+								<view v-if='isType && remainingTime != 0 ' style="color:  #FFA929">
 									
-								<u-count-down v-if='item.aridRegionList[0].remainingTime > 0' :time="Number(item.aridRegionList[0].remainingTime)" format="HH:mm:ss"></u-count-down>
+								<u-count-down v-if='remainingTime > 0' :time="Number(remainingTime)" format="HH:mm:ss"></u-count-down>
 								</view>
 								
 						</view>
@@ -62,23 +62,11 @@
 
 		</view>
 
-		<view class="title_box rx-bc" v-if='!isType'>
-			<view class="name">干燥时间</view>
-		</view>
-		<view class="material " v-if='!isType'>
 
 
-			<view class="content_table" >
-				<view class="item">
-					<view class="lable rx-cc">周期</view>
-					<view class="content content_num rx-bc">
-						<input class="uni-input" v-model="occupationTime" @input="timeInp" type="digit"></input>
-						<text>小时</text>
-					</view>
-				</view>
 
 
-			</view>
+	
 		</view>
 	</view>
 </template>
@@ -97,6 +85,11 @@
 			isType: {
 				type: Boolean,
 				default: false,
+			},
+			
+			remainingTime: {
+				type: Number,
+				default: 0,
 			}
 
 		},
@@ -124,13 +117,6 @@
 				this.list.splice(index, 1)
 			},
 
-			timeInp() {
-				this.list.forEach(e => {
-					e.occupationTime = this.occupationTime
-				})
-
-
-			}
 		}
 	}
 </script>

+ 217 - 0
pages/pda/feeding/components/paramBom.vue

@@ -0,0 +1,217 @@
+<template>
+	<view>
+		<view class="title_box rx-bc">
+			<view class="name">工艺参数</view>
+		</view>
+
+		<view>
+
+
+
+			<view class="content_table2">
+				<view class="head row rx-sc">
+					<view class="item ww40">参数名</view>
+					<view class="item ww40">参数值</view>
+					<view class="item ww20">单位</view>
+				</view>
+
+				<view class="table">
+					<view class="tr row rx-sc" v-for="(it, idx) in newList" :key='idx'>
+
+						<view class="item ww40">
+							{{ it.name }}
+						</view>
+						<view class="item ww40" v-if='it.textType != 3'>
+							{{ it.defaultValue}}
+						</view>
+
+						<view class="item ww40" v-if='it.textType == 3'>
+							{{ it.minValue}} - {{item.maxValue}}
+						</view>
+						<view class="item ww20 ">
+							{{ it.unitName }}
+						</view>
+					</view>
+
+
+
+
+
+
+				</view>
+
+
+			</view>
+
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		props: {
+			list: {
+				type: Array,
+				default: () => []
+			},
+			wordItem: {
+				type: Object,
+				default: () => {}
+			}
+		},
+
+
+		watch: {
+
+			list: {
+				immediate: true,
+				deep: true,
+				handler(newVal) {
+					this.newList = newVal
+
+				}
+			}
+		},
+
+		data() {
+			return {
+				recycleQuantity: '',
+				newList: []
+			}
+		},
+
+		methods: {
+
+			quantInt(index, idx, it) {
+				if (it.quantity >= 1) {
+					this.$set(this.newList[index].extInfo.positionList[idx], 'workOrderCode', this.wordItem.code)
+					this.$set(this.newList[index].extInfo.positionList[idx], 'categoryCode', this.wordItem.productCode)
+
+				} else {
+					this.$set(this.newList[index].extInfo.positionList[idx], 'workOrderCode', '')
+					this.$set(this.newList[index].extInfo.positionList[idx], 'categoryCode', '')
+					this.$set(this.newList[index].extInfo.positionList[idx], 'quantity', 0)
+				}
+
+
+			},
+
+			handleScan(index) {
+				this.$emit('handleScan', index, 'turnover')
+			},
+
+			getDelete(index) {
+				this.list.splice(index, 1)
+
+
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.title_box {
+		margin-top: 20rpx;
+
+		.name {
+			font-size: 28rpx;
+			font-style: normal;
+			font-weight: 400;
+			color: $theme-color;
+			padding-left: 20rpx;
+
+			position: relative;
+
+			&:before {
+				position: absolute;
+				content: '';
+				left: 0rpx;
+				top: 0rpx;
+				bottom: 0rpx;
+				width: 4rpx;
+				height: 28rpx;
+				background: $theme-color;
+				margin: auto;
+			}
+
+
+		}
+
+	}
+
+
+
+	.content_table2 {
+		width: 100%;
+		margin-top: 10rpx;
+
+
+
+		.row {
+			width: 100%;
+
+
+			.item {
+
+				color: #404446;
+				font-size: 28rpx;
+				padding-left: 12rpx;
+
+			}
+
+			.color157 {
+				color: $theme-color;
+			}
+
+
+
+			.ww40 {
+				width: 40%;
+
+			}
+
+			.ww20 {
+				width: 20%;
+			}
+		}
+
+		.head {
+			height: 64rpx;
+			background: #F7F9FA;
+			border-top: 2rpx solid #E3E5E5;
+			border-left: 2rpx solid #E3E5E5;
+
+			.item {
+				height: 64rpx;
+				line-height: 64rpx;
+				border-right: 2rpx solid #E3E5E5;
+				box-sizing: border-box;
+			}
+		}
+
+
+
+		.tr {
+			border-top: 2rpx solid #E3E5E5;
+			border-left: 2rpx solid #E3E5E5;
+
+
+			.item {
+				font-size: 24rpx;
+				min-height: 64rpx;
+				display: flex;
+				align-items: center;
+				border-right: 2rpx solid #E3E5E5;
+				box-sizing: border-box;
+				white-space: normal;
+				word-break: break-all;
+
+			}
+
+			&:last-child {
+				border-bottom: 2rpx solid #E3E5E5;
+
+			}
+		}
+	}
+</style>

+ 44 - 66
pages/pda/feeding/details.vue

@@ -8,6 +8,9 @@
 				<view v-for="(item,index) in List" :key="index" class="card_box">
 					<workOrderBom :item='item' @handleScan='handleScan'></workOrderBom>
 
+
+					<paramBom v-if='item.paramDetailList.length != 0' :list='item.paramDetailList'></paramBom>
+
 					<deviceBom v-if='item.equipmentList.length != 0' :workOrderId='item.workOrderId'
 						:list='item.equipmentList' @scanIt='scanIt'></deviceBom>
 
@@ -18,7 +21,8 @@
 					<instanceBom v-if='item.instanceList.length != 0' :workOrderId='item.workOrderId'
 						:list='item.instanceList'></instanceBom>
 
-					<turnoverBom v-if='item.turnover.length != 0' :list='item.turnover' :wordItem='item'
+
+					<turnoverBom v-if='item.turnover.length != 0' :list='item.turnover' :wordItem='item' pattern='feed'
 						@handleScan='handleScan' @handleDel='handleDel'></turnoverBom>
 
 					<aridRegion v-if='item.aridRegionList.length != 0' :list='item.aridRegionList'
@@ -53,7 +57,9 @@
 	import modelBom from './components/modelBom.vue'
 	import instanceBom from './components/instanceBom.vue'
 	import aridRegion from './components/aridRegion'
+	import paramBom from './components/paramBom.vue'
 	import turnoverBom from '../jobBooking/components/turnoverBom.vue'
+
 	import {
 		workorderList,
 		getByCode,
@@ -74,6 +80,7 @@
 			modelBom,
 			instanceBom,
 			aridRegion,
+			paramBom,
 			turnoverBom
 		},
 		data() {
@@ -108,7 +115,7 @@
 						let modelList = [] // 模具
 						let instanceList = [] // 投料
 						let aridRegionList = [] // 干燥区
-						let turnover = [] // 周转车
+
 
 						selectList.forEach(f => {
 							if (f.rootCategoryLevelId == 5) {
@@ -117,10 +124,7 @@
 							} else if (f.rootCategoryLevelId == 1) {
 								instanceList = instanceList.concat(f)
 
-							} else if (f.rootCategoryLevelId == 7) {
-							 	turnover = turnover.concat(f)
-							 
-							 }else if (f.rootCategoryLevelId == 11) {
+							} else if (f.rootCategoryLevelId == 11) {
 								aridRegionList = aridRegionList.concat(f)
 							}
 
@@ -129,7 +133,6 @@
 
 						this.$set(m, 'modelList', modelList)
 						this.$set(m, 'instanceList', instanceList)
-						this.$set(m, 'turnover', turnover)
 						this.$set(m, 'aridRegionList', aridRegionList)
 
 
@@ -151,27 +154,6 @@
 
 			save() {
 
-				let bol
-				this.List.forEach(e => {
-					if (e.aridRegionList && e.aridRegionList.length > 0) {
-						bol = e.aridRegionList.every(v => v.occupationTime)
-					} else {
-						bol = true
-					}
-				})
-
-				if (!bol) {
-					uni.showToast({
-						title: '请输入干燥时间',
-						icon: 'none'
-					})
-					return false
-				}
-
-
-
-
-
 
 
 				batchSave(this.List).then(res => {
@@ -184,14 +166,30 @@
 			},
 
 			getList() {
-				workorderList(this.idsList).then(res => {
+				workorderList({
+					ids: this.idsList,
+					taskId: this.taskId
+				}).then(res => {
 					this.List = res.map(m => {
 						m.workOrderId = m.id
-						m.equipmentList = [] // 设备
-						m.modelList = [] // 模具
-						m.instanceList = [] // 投料
-						m.turnover = [] // 周转车
-						m.aridRegionList = [] // 干燥区
+
+						if (!m.hasOwnProperty('equipmentList')) {
+							m.equipmentList = [] // 设备
+						}
+						
+						if (!m.hasOwnProperty('modelList')) {
+							m.modelList = [] // 模具
+						}
+						
+						if (!m.hasOwnProperty('instanceList')) {
+							m.instanceList = [] // 投料
+						}
+						if (!m.hasOwnProperty('aridRegionList')) {
+							m.aridRegionList = [] // 干燥区
+						}
+
+
+					
 
 						delete m.id
 						if (this.taskId) {
@@ -262,8 +260,8 @@
 				//  S310000552731 物料
 				//               干燥区 
 				// w0300000003140004 周转车
-				this.scanItData('w0300000003140004', id)
-				return false
+				// this.scanItData('w0300000003140004', id)
+				// return false
 
 				let _this = this
 				uni.scanCode({
@@ -343,25 +341,14 @@
 
 						this.$forceUpdate()
 					} else if (res.length >= 1 && res[0].rootCategoryLevelId == 7) { // 周转车
-						_arr = this.List
-						_arr.forEach((e, index) => {
-							if (e.workOrderId == id) {
-								console.log(res)
-								let isFals = _arr[index].turnover.some(m => m.code == res[0].code)
-								if (isFals) {
-									uni.showToast({
-										title: '周转车已存在',
-										icon: 'none'
-									})
-									return false
-								}
-								_arr[index].turnover = _arr[index].turnover.concat(res)
-
-							}
-						})
-						this.List = _arr
-
-						this.$forceUpdate()
+						let isFals = _arr[index].turnover.some(m => m.code == res[0].code)
+						if (isFals) {
+							uni.showToast({
+								title: '周转车已存在',
+								icon: 'none'
+							})
+							return false
+						}
 					}
 
 
@@ -376,10 +363,10 @@
 				// CX-EQ-YLSJL-008	  设备
 				// M001 M002 模具 
 				//  S310000552731 物料
-	            // w0300000003140004 周转车
+				// w0300000003140004 周转车
 				// this.scanItAllData('w0300000003140004')
 				// return false
-	
+
 
 				let _this = this
 				uni.scanCode({
@@ -423,16 +410,7 @@
 
 						this.$forceUpdate()
 
-					} else if (res.length >= 1 && res[0].rootCategoryLevelId == 7) { // 周转车
-						_arr = this.List
-						_arr.forEach((e, index) => {
-							e.turnover = e.turnover.concat(res)
-						})
-						this.List = _arr
-						this.$forceUpdate()
-
 					}
-
 				})
 
 			},

+ 7 - 2
pages/pda/jobBooking/components/turnoverBom.vue

@@ -9,7 +9,7 @@
 				<view class="left rx-ss" @click="getDelete(index)">
 					<uni-icons custom-prefix="iconfont" type="icon-shanchu" size="20" color="#fa3534"></uni-icons>
 				</view>
-				<view class="btn_box rx-bc" @click="handleScan(index)">
+				<view class="btn_box rx-bc" @click="handleScan(index)" v-if="pattern == 'job'">
 					<image class="scan" src="@/static/pda/ScanIt.svg"></image>
 					更换周转车
 				</view>
@@ -54,7 +54,7 @@
 						</view>
 						<view class="item ww20  content_num">
 							<input class="uni-input" v-if='it.isFull == 0' @input="quantInt(index, idx, it)"
-								v-model="it.quantity" type="digit"></input>
+								v-model="it.quantity" type="digit" :disabled="pattern != 'job'"></input>
 							<text v-else>{{it.quantity}}</text>
 						</view>
 					</view>
@@ -83,6 +83,11 @@
 			wordItem: {
 				type: Object,
 				default: () => {}
+			},
+			
+			pattern: {
+				type: String,
+				default: ''
 			}
 		},
 

+ 25 - 4
pages/pda/jobBooking/index/index.vue

@@ -9,6 +9,8 @@
 
 				<view class="card_box">
 					<workOrderBom :item='objData' v-if='objData' @handleScan='handleScan'></workOrderBom>
+					
+					<paramBom v-if='paramDetailList.length != 0' :list='paramDetailList' ></paramBom>
 
 					<deviceBom v-if='objData.equipmentList.length != 0' :list='objData.equipmentList'></deviceBom>
 
@@ -24,13 +26,13 @@
 						@penalize='penalize'>
 					</byProductBom>
 
-					<turnoverBom v-if='objData.turnover.length != 0' :list='objData.turnover' :wordItem='objData'
+					<turnoverBom v-if='objData.turnover.length != 0' :list='objData.turnover' :wordItem='objData' pattern='job'
 						@handleScan='handleScan'>
 					</turnoverBom>
 
 
 
-					<aridRegion v-if='objData.aridRegionList.length != 0' :list='objData.aridRegionList'
+					<aridRegion v-if='objData.aridRegionList.length != 0' :list='objData.aridRegionList' :remainingTime='remainingTime'
 						@handleScan='handleScan' :isType='true'></aridRegion>
 
 					<view class="operate_box rx-sc">
@@ -107,6 +109,7 @@
 	import byProductBom from '../components/byProductBom'
 	import turnoverBom from '../components/turnoverBom.vue'
 	import aridRegion from '../../feeding/components/aridRegion.vue'
+	import paramBom from '../../feeding/components/paramBom.vue'
 	import SearchPopup from '../../components/searchPopup.vue'
 
 	export default {
@@ -119,6 +122,7 @@
 			byProductBom,
 			turnoverBom,
 			aridRegion,
+			paramBom,
 			SearchPopup
 		},
 		data() {
@@ -148,6 +152,9 @@
 				penalizeIndex: null,
 
 
+                paramDetailList: [],
+				remainingTime: 0,
+				
 
 
 				id: null,
@@ -197,8 +204,8 @@
 				// CX-EQ-YLSJL-008	  设备
 				// M001 M002 模具 
 				// 周转车 w0300000003140004
-				this.scanItAllData('M002')
-				return false
+				// this.scanItAllData('M002')
+				// return false
 
 				let _this = this
 				uni.scanCode({
@@ -356,6 +363,20 @@
 					this.objData.workReportInfo.unit = res.unit
 					this.objData.workReportInfo.weightUnit = res.weightUnit
 					this.objData.workReportInfo.workOrderId = res.workOrderId
+					
+					this.paramDetailList = []
+					
+					this.paramDetailList = res.paramDetailList.map(m => {
+						if(m.extInfo.textType == 5) {
+							this.remainingTime = m.extInfo.remainingTime
+						}
+						 return {
+							 ...m.extInfo
+						 }
+					})
+					
+				
+					
 
 				})
 			},

+ 1 - 1
pages/pda/picking/details.vue

@@ -167,7 +167,7 @@
 			},
 
 			getList() {
-				workorderList(this.idsList).then(res => {
+				workorderList({ids: this.idsList, taskId:this.taskId}).then(res => {
 					
 					this.List = res.map(m => {
 						 m.workOrderId = m.id

+ 335 - 0
pages/pda/turnover/components/turnoverBom.vue

@@ -0,0 +1,335 @@
+<template>
+	<view>
+		<view class="title_box rx-bc">
+			<view class="name">周转车</view>
+		</view>
+
+		<view v-for="(item, index) in newList" :key='index'>
+			<view class="title_box rx-bc">
+				<view class="left rx-ss" @click="getDelete(index)" v-if="pattern == 'new'">
+					<uni-icons custom-prefix="iconfont" type="icon-shanchu" size="20" color="#fa3534"></uni-icons>
+				</view>
+				<view class="btn_box rx-bc" @click="handleTrade(index)" v-if="pattern == 'old'" >
+					工单换周转车
+				</view>
+			</view>
+
+			<view class="content_table">
+				<view class="item rx-sc">
+					<view class="rx ww50 ">
+						<view class="lable ww80 rx-cc ">编号</view>
+						<view class="content rx-sc">
+							<view>{{item.code}}</view>
+						</view>
+					</view>
+
+					<view class="rx ww50">
+						<view class="lable rx-cc ww80">名称</view>
+						<view class="content rx-sc">
+							<view>{{item.name}}</view>
+						</view>
+					</view>
+
+				</view>
+			</view>
+
+
+			<view class="content_table2">
+				<view class="head row rx-sc">
+					<view class="item ww10">货位</view>
+					<view class="item ww35">工单编号</view>
+					<view class="item ww35">产品编码</view>
+					<view class="item ww20">数量(PCS)</view>
+				</view>
+
+				<view class="table">
+					<view class="tr row rx-sc" v-for="(it, idx) in item.extInfo.positionList" :key='idx'>
+						<view class="item ww10">{{it.code}}</view>
+						<view class="item ww35" :class="{'color157': it.workOrderCode === wordItem.code}">
+							{{ it.workOrderCode }}
+						</view>
+						<view class="item ww35" :class="{'color157': it.categoryCode === wordItem.productCode}">
+							{{it.categoryCode}}
+						</view>
+						<view class="item ww20  content_num">
+							<input class="uni-input" v-if='it.isFull == 0' @input="quantInt(index, idx, it)"
+								v-model="it.quantity" type="digit" :disabled="pattern != 'job'"></input>
+							<text v-else>{{it.quantity}}</text>
+						</view>
+					</view>
+
+
+
+
+
+
+				</view>
+
+
+			</view>
+
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		props: {
+			list: {
+				type: Array,
+				default: () => []
+			},
+			wordItem: {
+				type: Object,
+				default: () => {}
+			},
+			
+			pattern: {
+				type: String,
+				default: ''
+			}
+		},
+
+
+		watch: {
+
+			list: {
+				immediate: true,
+				deep: true,
+				handler(newVal) {
+					this.newList = newVal
+				
+				}
+			}
+		},
+
+		data() {
+			return {
+				recycleQuantity: '',
+				newList: []
+			}
+		},
+
+		methods: {
+
+			quantInt(index, idx, it) {
+				if (it.quantity >= 1) {
+					this.$set(this.newList[index].extInfo.positionList[idx], 'workOrderCode', this.wordItem.code)
+					this.$set(this.newList[index].extInfo.positionList[idx], 'categoryCode', this.wordItem.productCode)
+
+				} else {
+					this.$set(this.newList[index].extInfo.positionList[idx], 'workOrderCode', '')
+					this.$set(this.newList[index].extInfo.positionList[idx], 'categoryCode', '')
+					this.$set(this.newList[index].extInfo.positionList[idx], 'quantity', 0)
+				}
+
+
+			},
+
+	  handleTrade(index) {},
+
+			getDelete(index) {
+				this.list.splice(index,1)
+
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.title_box {
+		margin-top: 20rpx;
+
+		.name {
+			font-size: 28rpx;
+			font-style: normal;
+			font-weight: 400;
+			color: $theme-color;
+			padding-left: 20rpx;
+
+			position: relative;
+
+			&:before {
+				position: absolute;
+				content: '';
+				left: 0rpx;
+				top: 0rpx;
+				bottom: 0rpx;
+				width: 4rpx;
+				height: 28rpx;
+				background: $theme-color;
+				margin: auto;
+			}
+
+
+		}
+
+		.left {
+			width: 40rpx;
+		}
+
+		.btn_box {
+			padding: 0 18rpx;
+			height: 60rpx;
+			background: $theme-color;
+			font-size: 26rpx;
+			font-style: normal;
+			font-weight: 400;
+			font-size: 24rpx;
+			color: #fff;
+			border-radius: 4rpx;
+
+			.scan {
+				width: 34rpx;
+				height: 34rpx;
+				margin-right: 12rpx;
+
+			}
+
+		}
+
+	}
+
+
+	.content_table {
+		margin-top: 8rpx;
+		width: 100%;
+		border: 2rpx solid $border-color;
+
+		.item {
+			display: flex;
+			border-bottom: 2rpx solid $border-color;
+
+			.lable {
+				width: 132rpx;
+				text-align: center;
+				background-color: #F7F9FA;
+				font-size: 26rpx;
+				border-right: 2rpx solid $border-color;
+				flex-shrink: 0;
+			}
+
+
+
+			.ww80 {
+				width: 80rpx;
+			}
+
+			.ww50 {
+				width: 50%;
+			}
+
+			.content {
+				width: 518rpx;
+				min-height: 64rpx;
+				font-size: 28rpx;
+				line-height: 28rpx;
+				font-style: normal;
+				font-weight: 400;
+				padding: 2rpx 8rpx;
+				box-sizing: border-box;
+				word-wrap: break-word;
+				flex-grow: 1 !important;
+				font-size: 24rpx;
+
+			}
+
+
+			&:last-child {
+				border-bottom: none;
+			}
+		}
+
+
+	}
+
+
+
+	.content_table2 {
+		width: 100%;
+
+
+		.row {
+			width: 100%;
+
+
+			.item {
+
+				color: #404446;
+				font-size: 28rpx;
+				padding-left: 12rpx;
+
+			}
+
+			.color157 {
+				color: $theme-color;
+			}
+
+			.ww20 {
+				width: 20%;
+			}
+
+			.ww35 {
+				width: 35%;
+
+			}
+
+			.ww10 {
+				width: 10%;
+			}
+		}
+
+		.head {
+			height: 64rpx;
+			background: #F7F9FA;
+			border-top: 2rpx solid #E3E5E5;
+			border-left: 2rpx solid #E3E5E5;
+
+			.item {
+				height: 64rpx;
+				line-height: 64rpx;
+				border-right: 2rpx solid #E3E5E5;
+				box-sizing: border-box;
+			}
+		}
+
+
+
+		.tr {
+			border-top: 2rpx solid #E3E5E5;
+			border-left: 2rpx solid #E3E5E5;
+
+
+			.item {
+				font-size: 24rpx;
+				min-height: 64rpx;
+				display: flex;
+				align-items: center;
+				border-right: 2rpx solid #E3E5E5;
+				box-sizing: border-box;
+				white-space: normal;
+				word-break: break-all;
+
+			}
+
+			&:last-child {
+				border-bottom: 2rpx solid #E3E5E5;
+
+			}
+		}
+	}
+
+
+	.content_num {
+		display: flex;
+		align-items: center;
+		padding: 0 4rpx;
+
+		/deep/ .uni-input-input {
+			border: 2rpx solid #F0F8F2;
+			background: #F0F8F2;
+			color: $theme-color;
+		}
+
+	}
+</style>

+ 190 - 0
pages/pda/turnover/index/index.vue

@@ -0,0 +1,190 @@
+<template>
+	<view class="content-box">
+		<uni-nav-bar fixed="true" statusBar="true" left-icon="back" :title="title" background-color="#F7F9FA"
+			color="#000" @clickLeft="back"></uni-nav-bar>
+
+		<view class="list_box">
+			<u-list @scrolltolower="scrolltolower">
+				<view v-for="(item,index) in List" :key="index" class="card_box">
+					<workOrderBom :item='item' @handleScan='handleWordScan'></workOrderBom>
+
+
+					<turnoverBom v-if='item.turnover.length != 0' :list='item.turnover' :wordItem='item' pattern='old'
+						@handleScan='handleScan'></turnoverBom>
+
+
+
+
+
+					<view class="operate_box rx-sc">
+						<u-button size="small" class="u-reset-button" type="success" @click="">手动添加</u-button>
+						<u-button size="small" class="u-reset-button" type="success" @click="">扫一扫</u-button>
+					</view>
+				</view>
+			</u-list>
+
+		</view>
+
+		<view class="bottom-wrapper">
+			<view class="btn_box" @click="save">更换周转车</view>
+
+		</view>
+
+
+
+	</view>
+</template>
+
+<script>
+	import workOrderBom from '../../feeding/components/workOrderBom.vue'
+	import turnoverBom from '../components/turnoverBom.vue'
+
+	import {
+		getVehicle,
+
+	} from '@/api/pda/workOrder.js'
+
+	import {
+		batchSave
+	} from '@/api/pda/feeding.js'
+
+
+
+	export default {
+		components: {
+			workOrderBom,
+			turnoverBom
+		},
+		data() {
+			return {
+				title: '',
+				workOrderId: null,
+				List: [],
+				taskId: null
+
+
+			}
+		},
+		onLoad(options) {
+			this.title = options.taskName ? options.taskName + '-更换周转车' : '更换周转车'
+			this.workOrderId = options.workOrderId;
+			this.taskId = options.taskId
+			this.taskName = options.taskName
+
+			this.getList()
+
+		},
+
+
+		methods: {
+			scrolltolower() {},
+
+			save() {
+
+
+				batchSave(this.List).then(res => {
+
+
+
+				})
+			},
+
+			getList() {
+				getVehicle({
+					workOrderId: this.workOrderId,
+					taskId: this.taskId
+				}).then(res => {
+					this.List = []
+					this.List.push(res)
+				})
+			},
+
+
+
+
+			handleWordScan(id, type) {
+				uni.showToast({
+					icon: 'none',
+					title: '不支持更换工单'
+				})
+
+
+			},
+
+
+			handleScan(id, type) {
+				console.log(id)
+				console.log(type)
+
+				// this.scanData('SCJHGD20240117002', type, id)
+				// return false
+
+				let _this = this
+				uni.scanCode({
+					success: function(res) {
+						_this.scanData(res.result, type, id)
+					}
+				})
+
+
+			},
+
+
+
+
+
+
+		},
+
+	}
+</script>
+
+<style lang="scss" scoped>
+	.content-box {
+		height: 100vh;
+		overflow: hidden;
+		display: flex;
+		flex-direction: column;
+
+	}
+
+	.list_box {
+		flex: 1;
+		overflow: hidden;
+		padding: 4rpx 0;
+
+		.u-list {
+			height: 100% !important;
+		}
+
+		.card_box {
+			padding: 16rpx 24rpx;
+		}
+
+
+
+	}
+
+	.bottom-wrapper {
+		.btn_box {
+			width: 750rpx;
+			height: 88rpx;
+			line-height: 88rpx;
+			background: $theme-color;
+			text-align: center;
+			font-size: 36rpx;
+			font-style: normal;
+			font-weight: 400;
+			color: #fff;
+		}
+	}
+
+
+	.operate_box {
+		padding: 10rpx 160rpx;
+
+		/deep/ .u-button {
+			width: 160rpx;
+		}
+	}
+</style>

+ 26 - 2
pages/pda/workOrder/extrusionMolding/index.vue

@@ -134,7 +134,7 @@
 		</view>
 
 		<view class="bottom-wrapper">
-			<bottomOperate state='1' @operate='operate'></bottomOperate>
+			<bottomOperate state='1' @operate='operate' :btns='btns'></bottomOperate>
 		</view>
 
 	</view>
@@ -173,7 +173,9 @@
 				feedAllow: true,
 				
 				currentTaskId: null,
-				currentTaskName: null
+				currentTaskName: null,
+				
+				btns: []
 			}
 		},
 
@@ -199,6 +201,9 @@
 		methods: {
 			scrolltolower() {},
 
+
+
+
 			handTab(type) {
 				if (type != this.tabType) {
 					this.tabType = type
@@ -207,8 +212,16 @@
 
 			getSteps() {
 				getTaskInstanceList(this.id).then(res => {
+					
+				for(let i = 0; i < res.length; i++) {
+					if(res[i].taskTypeName == '自然干燥' ||res[i].taskTypeName == '升温干燥') {
+						res[i - 1].btns = [ { name: '更换周转车', type: 'turnover'}]
+					}
+				}
 					this.stepsList = res
 					
+				
+					
 				})
 			},
 
@@ -235,6 +248,8 @@
 			selectStep(item) {
 				this.currentTaskId = item.taskId
 				this.currentTaskName  = item.taskTypeName
+				this.btns = item?.btns || []
+				console.log(this.btns)
 				this.feedStatus()
 			},
 
@@ -278,6 +293,15 @@
 						})
 					}
 			
+				} else if (type == 'turnover') {
+					
+					url = '/pages/pda/turnover/index/index'
+					url += `?workOrderId=${this.info.id}&taskId=${taskId }&taskName=${taskName}`
+					uni.navigateTo({
+						url
+					})
+			
+			
 				}
 
 			},

+ 3 - 13
pages/pda/workOrder/search/index.vue

@@ -55,12 +55,7 @@
 								</view>
 								
 								
-								<view class="items" v-if='item.rootCategoryLevelId == 11'>
-									<view class="time rx-sc"  >
-										剩余时间:<u-count-down :time="Number(item.remainingTime)" format="HH:mm:ss"></u-count-down>
-									</view>
-								</view>
-								
+							
 	
 						
 								<view class="items" v-if='item.rootCategoryLevelId == 11'>
@@ -244,7 +239,7 @@
 			getTreeList() {
 				let params = {}
 				if (this.isType == 'feed') {
-					params.ids = [1, 5, 7, 8, 10, 11, 14]
+					params.ids = [1, 5,  8, 10, 11, 14]
 				} else if (this.isType == 'pick') {
 					params.ids = [1, 5, 7, 8, 10, 14]
 				} else if (this.isType == 'job') {
@@ -471,12 +466,7 @@
 				width: 50%;
 				margin-top: 8rpx;
 			}
-			.time{
-				color: #FFA929;
-				/deep/ .u-count-down__text{
-					color: #FFA929;
-				}
-			}
+		
 		}
 	}
 </style>

BIN
static/u5.png


BIN
static/u5_c.png