ysy 2 éve
szülő
commit
4d822ed8b6

+ 12 - 0
api/pda/workOrder.js

@@ -371,6 +371,18 @@ export async function listPDAToWarehouse(params) {
 	return Promise.reject(data.message);
 }
 
+// 根据工单工序查委外信息
+export async function checkOutsource(param) {
+	const data = await get(
+		Vue.prototype.apiUrl + `/mes/applyoutsource/checkOutsource`, param
+	);
+
+	if (data.code == 0) {
+		return data.data;
+	}
+	return Promise.reject(data.message);
+}
+
 
 
 

+ 138 - 9
pages/pda/components/bottomOperate.vue

@@ -24,19 +24,74 @@
 			<view class="btn">暂停</view>
 			<view class="btn">终止</view>
 			<view class="btn">转派</view>
-			<view class="btn">工单交接</view>
+			<view class="btn" @click="handOutsource()">委外</view>
 		</view>
+
+		<SearchPopup mode="center" v-if="outsourceShow">
+			<template v-slot:list>
+				<view class="popup_list">
+					<view class="title">【{{taskObj.currentTaskName}}】是否委外</view>
+
+
+					<u-form labelPosition="left" :model="outsourceForm" labelWidth="180" labelAlign="left" class="">
+						<u-form-item label="委外数量:" borderBottom prop="num">
+							<input class="uni-input" v-model="outsourceForm.formedNumLast" type='number'
+								disabled></input>
+						</u-form-item>
+
+						<u-form-item label="完成时间:" borderBottom prop="time">
+
+
+							<picker mode="date" :value="outsourceForm.date" @change="onDateChange">
+								<view class="uni-input">{{ outsourceForm.date ||  '选择日期'    }}</view>
+							</picker>
+
+
+						</u-form-item>
+
+
+
+					</u-form>
+
+				</view>
+			</template>
+
+			<template v-slot:operate>
+				<view class="operate_box rx-bc">
+					<u-button size="small" class="u-reset-button" @click="outCancel">
+						取消
+					</u-button>
+
+
+					<u-button type="success" size="small" class="u-reset-button" @click="outsourceOk">
+						确定
+					</u-button>
+
+				</view>
+			</template>
+		</SearchPopup>
+
 	</view>
 </template>
 
 <script>
 	import {
 		getTwoTreeByPid,
-
+		checkOutsource
 	} from '@/api/pda/workOrder.js'
+
+	import SearchPopup from './searchPopup.vue'
+
+
+
 	export default {
+		components: {
+			SearchPopup
+		},
+
 		props: {
 			state: String | Number,
+			taskObj: Object
 
 		},
 
@@ -56,6 +111,14 @@
 				handler(newVal) {
 					this.btnState = newVal
 				}
+			},
+
+			taskObj: {
+				immediate: true,
+				deep: true,
+				handler(newVal) {
+					this.newTaskObj = newVal
+				}
 			}
 		},
 
@@ -99,7 +162,7 @@
 						name: '报工',
 						type: 'inspection'
 					}, ],
-					
+
 					4: [{
 							name: '领料',
 							type: 'picking'
@@ -112,18 +175,23 @@
 							name: '报工',
 							type: 'jobBooking'
 						},
-			
-					
+
+
 					],
-					
+
 					5: [{
 							name: '入库',
 							type: 'warehousing'
 						},
-					
+
 					],
-					
-				}
+
+				},
+
+				newTaskObj: {},
+				outsourceShow: false,
+
+				outsourceForm: {}
 			}
 		},
 
@@ -161,6 +229,43 @@
 			operate(type, item) {
 				this.$emit('operate', type, item)
 			},
+
+
+			handOutsource() {
+				let param = {
+					taskId: this.newTaskObj.currentTaskId,
+					workOrderId: this.newTaskObj.workOrderId
+				}
+				checkOutsource(param).then(res => {
+
+					this.outsourceForm.formedNumLast = res.formedNumLast
+				
+					if (res.outsource) {
+						this.outsourceShow = true
+					} else {
+						uni.showToast({
+							title: '此工序不能委外',
+							icon: 'none'
+						})
+					}
+				})
+
+			},
+
+			outCancel() {
+				this.outsourceShow = false
+			},
+
+			onDateChange: function(e) {
+
+				this.outsourceForm.date = e.detail.value;
+				this.$forceUpdate()
+			},
+
+
+			outsourceOk() {},
+
+
 		}
 	}
 </script>
@@ -249,4 +354,28 @@
 
 		}
 	}
+
+
+	.operate_box {
+		padding: 10rpx 60rpx;
+
+		/deep/ .u-button {
+			width: 160rpx;
+		}
+	}
+
+	.popup_list {
+		width: 65vw;
+		min-height: 300rpx;
+		padding: 0 32rpx;
+
+		.title {
+			color: #333;
+			font-size: 28rpx;
+			text-align: center;
+			padding: 30rpx;
+
+
+		}
+	}
 </style>

+ 235 - 0
pages/pda/feeding/components/palletBom.vue

@@ -0,0 +1,235 @@
+<template>
+
+	<view>
+
+		<view class="title_box rx-bc">
+			<view class="name">舟皿</view>
+		</view>
+
+
+		<view class="material ">
+
+
+			<view class='content_table' v-for="(item,index) in palletList" :key='index'>
+				<view class="item">
+					<view class="lable rx-cc">舟皿code</view>
+					<view class="content ">
+					 {{item.code}}
+					</view>
+				</view>
+
+
+
+
+				<view class="item">
+					<view class="lable rx-cc">舟皿名称</view>
+					<view class="content ">
+						 {{item.name}}
+					</view>
+				</view>
+
+				<view class="item">
+					<view class="lable rx-cc">舟皿型号</view>
+					<view class="content">
+						{{item.modelType}}
+					</view>
+				</view>
+				
+				<view class="item">
+					<view class="lable rx-cc">出库仓库</view>
+					<view class="content">
+						{{item.pathName}}
+					</view>
+				</view>
+
+				<view class="item">
+					<view class="lable rx-cc">舟皿数量</view>
+					<view class="content content_num">
+						<input class="uni-input" v-model="item.feedQuantity" type='digit' ></input>
+					</view>
+				</view>
+
+			</view>
+
+		</view>
+
+	
+
+	</view>
+</template>
+
+<script>
+
+
+
+	export default {
+		props: {
+			palletList: {
+				type: Array,
+				default: () => []
+			}
+		},
+
+		data() {
+			return {
+	
+			}
+		},
+		
+		created() {
+
+	
+		},
+		
+		methods: {
+	
+			
+	
+			
+			
+			
+			
+	
+			
+			
+			
+			
+		},
+	}
+</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;
+			}
+
+
+		}
+
+
+
+	}
+
+
+	.material {
+		margin-top: 10rpx;
+
+
+
+		.content_table {
+			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;
+				}
+
+				.lable220 {
+					width: 220rpx !important;
+					font-size: 24rpx;
+				}
+
+				.lable150 {
+					width: 156rpx !important;
+					font-size: 24rpx;
+				}
+
+				.ww80 {
+					width: 80rpx;
+				}
+
+				.content {
+					width: 518rpx;
+					min-height: 64rpx;
+					font-size: 28rpx;
+					line-height: 28rpx;
+					font-style: normal;
+					font-weight: 400;
+					padding: 18rpx 8rpx;
+					box-sizing: border-box;
+					word-wrap: break-word;
+					flex-grow: 1 !important;
+
+
+					.unit {
+						padding: 0 4rpx;
+						font-size: 24rpx;
+						color: #404446;
+					}
+
+					.penalize {
+						width: 160rpx;
+						line-height: 60rpx;
+						background: $theme-color;
+						font-size: 24rpx;
+						text-align: center;
+						color: #fff;
+					}
+
+				}
+
+				.content_num {
+					display: flex;
+					align-items: center;
+					padding: 0 4rpx;
+
+					/deep/ .uni-input-input {
+						border: 2rpx solid #F0F8F2;
+						background: #F0F8F2;
+						color: $theme-color;
+					}
+
+
+				}
+
+				.pd4 {
+					padding: 4rpx 8rpx;
+				}
+
+
+
+				&:last-child {
+					border-bottom: none;
+				}
+			}
+
+			.ww55 {
+				width: 55%;
+			}
+
+			.ww45 {
+				width: 45%;
+			}
+		}
+	}
+</style>

+ 228 - 0
pages/pda/feeding/components/revolvingDiskBom.vue

@@ -0,0 +1,228 @@
+<template>
+
+	<view>
+
+		<view class="title_box rx-bc">
+			<view class="name">周转盘</view>
+		</view>
+
+
+		<view class="material ">
+
+
+			<view class='content_table' v-for="(item,index) in palletList" :key='index'>
+				<view class="item">
+					<view class="lable rx-cc">周转盘code</view>
+					<view class="content ">
+					 {{item.code}}
+					</view>
+				</view>
+
+
+
+
+				<view class="item">
+					<view class="lable rx-cc">周转盘名称</view>
+					<view class="content ">
+						 {{item.name}}
+					</view>
+				</view>
+
+				<view class="item">
+					<view class="lable rx-cc">周转盘型号</view>
+					<view class="content">
+						{{item.modelType}}
+					</view>
+				</view>
+				
+				<view class="item">
+					<view class="lable rx-cc">周转盘仓库</view>
+					<view class="content">
+						{{item.pathName}}
+					</view>
+				</view>
+
+				<view class="item">
+					<view class="lable rx-cc">周转盘数量</view>
+					<view class="content content_num">
+						<input class="uni-input" v-model="item.feedQuantity" type='digit' ></input>
+					</view>
+				</view>
+
+			</view>
+
+		</view>
+
+	
+
+	</view>
+</template>
+
+<script>
+
+
+
+	export default {
+		props: {
+			revolvingDiskList: {
+				type: Array,
+				default: () => []
+			}
+		},
+
+		data() {
+			return {
+	
+			}
+		},
+		
+		created() {
+
+	
+		},
+		
+		methods: {
+	
+			
+			
+			
+			
+		},
+	}
+</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;
+			}
+
+
+		}
+
+
+
+	}
+
+
+	.material {
+		margin-top: 10rpx;
+
+
+
+		.content_table {
+			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;
+				}
+
+				.lable220 {
+					width: 220rpx !important;
+					font-size: 24rpx;
+				}
+
+				.lable150 {
+					width: 156rpx !important;
+					font-size: 24rpx;
+				}
+
+				.ww80 {
+					width: 80rpx;
+				}
+
+				.content {
+					width: 518rpx;
+					min-height: 64rpx;
+					font-size: 28rpx;
+					line-height: 28rpx;
+					font-style: normal;
+					font-weight: 400;
+					padding: 18rpx 8rpx;
+					box-sizing: border-box;
+					word-wrap: break-word;
+					flex-grow: 1 !important;
+
+
+					.unit {
+						padding: 0 4rpx;
+						font-size: 24rpx;
+						color: #404446;
+					}
+
+					.penalize {
+						width: 160rpx;
+						line-height: 60rpx;
+						background: $theme-color;
+						font-size: 24rpx;
+						text-align: center;
+						color: #fff;
+					}
+
+				}
+
+				.content_num {
+					display: flex;
+					align-items: center;
+					padding: 0 4rpx;
+
+					/deep/ .uni-input-input {
+						border: 2rpx solid #F0F8F2;
+						background: #F0F8F2;
+						color: $theme-color;
+					}
+
+
+				}
+
+				.pd4 {
+					padding: 4rpx 8rpx;
+				}
+
+
+
+				&:last-child {
+					border-bottom: none;
+				}
+			}
+
+			.ww55 {
+				width: 55%;
+			}
+
+			.ww45 {
+				width: 45%;
+			}
+		}
+	}
+</style>

+ 37 - 6
pages/pda/feeding/details.vue

@@ -24,7 +24,8 @@
 					</modelBom>
 
 					<instanceBom v-if='item.instanceList.length != 0' :workOrderId='item.workOrderId'
-						:list='item.instanceList' :equipmentList="item.equipmentList" :currentTaskDiagram="item.currentTaskDiagram"></instanceBom>
+						:list='item.instanceList' :equipmentList="item.equipmentList"
+						:currentTaskDiagram="item.currentTaskDiagram"></instanceBom>
 
 
 					<turnoverBom v-if='item.turnover.length != 0' :list='item.turnover' :wordItem='item' pattern='feed'
@@ -32,8 +33,14 @@
 
 					<aridRegion v-if='item.aridRegionList.length != 0' :list='item.aridRegionList'
 						@handleScan='handleScan'></aridRegion>
+						
+						
+					<palletBom v-if='item.palletList.length != 0' :palletList='item.palletList'></palletBom>
+					<revolvingDiskBom v-if="item.revolvingDiskList.length != 0" :revolvingDiskList="item.revolvingDiskList"></revolvingDiskBom>
 
 					<packingBom v-if='item.packingList.length != 0' :list='item.packingList'></packingBom>
+					
+			
 
 
 					<view class='flex_btn' @click="openDetails(item.workOrderId)">出库单</view>
@@ -41,8 +48,6 @@
 
 
 					<view class="operate_box rx-sc">
-
-
 						<u-button size="small" class="u-reset-button" type="success"
 							@click="handAdd(item.workOrderId)">手动添加</u-button>
 						<u-button size="small" class="u-reset-button" type="success"
@@ -72,6 +77,9 @@
 	import turnoverBom from '../jobBooking/components/turnoverBom.vue'
 	import packingBom from './components/packingBom.vue'
 	import productsBom from './components/productsBom.vue'
+	import palletBom from './components/palletBom'
+	import revolvingDiskBom from './components/revolvingDiskBom'
+
 
 	import {
 		workorderList,
@@ -96,7 +104,10 @@
 			paramBom,
 			turnoverBom,
 			packingBom,
-			productsBom
+			productsBom,
+			palletBom,
+			revolvingDiskBom,
+			
 		},
 		data() {
 			return {
@@ -106,8 +117,8 @@
 				taskId: null,
 
 				clientEnvironmentId: null,
-				
-			
+
+
 
 
 			}
@@ -138,6 +149,8 @@
 						let instanceList = [] // 投料
 						let aridRegionList = [] // 干燥区
 						let equipmentList = [] // 生产设备
+						let palletList = [] // 舟皿
+						let revolvingDiskList = [] // 周转盘
 
 
 						selectList.forEach(f => {
@@ -153,8 +166,14 @@
 
 							} else if (f.rootCategoryLevelId == 11) {
 								aridRegionList = aridRegionList.concat(f)
+							} else if (f.rootCategoryLevelId == 8) {
+								palletList = palletList.concat(f)
+							} else if(f.rootCategoryLevelId == 26) {
+								revolvingDiskList = revolvingDiskList.concat(f)
 							}
 
+
+
 						})
 
 
@@ -162,6 +181,10 @@
 						this.$set(m, 'instanceList', instanceList)
 						this.$set(m, 'aridRegionList', aridRegionList)
 						this.$set(m, 'equipmentList', equipmentList)
+						this.$set(m, 'palletList', palletList)
+						this.$set(m, 'revolvingDiskList', revolvingDiskList)
+						
+
 
 
 					}
@@ -233,6 +256,8 @@
 						m.modelList = [] // 模具
 						m.aridRegionList = [] // 干燥区
 						m.packingList = [] // 包装
+						m.palletList = [] // 舟皿
+						m.revolvingDiskList = []   // 周转盘
 
 						if (m.pickOutInList.length > 0) {
 							m.pickOutInList.forEach(f => {
@@ -246,7 +271,13 @@
 									m.aridRegionList.push(f)
 								} else if (f.rootCategoryLevelId == 13) {
 									m.packingList.push(f)
+								} else if (f.rootCategoryLevelId == 8) {
+									m.palletList.push(f)
+								} else if (f.rootCategoryLevelId == 26) {
+									m.revolvingDiskList.push(f)
 								}
+								
+									
 							})
 						}
 

+ 4 - 3
pages/pda/feeding/single.js

@@ -75,9 +75,10 @@ export const tableHeader = selectEquiType => {
 					prop: 'modelType'
 				},
 				{
-					label: '槽数',
-					prop: 'slotNum'
-				},
+					label: '数量',
+					prop: 'feedQuantity'
+				}
+		
 
 
 

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

@@ -73,8 +73,8 @@
 
 						<view class="lable lable150 rx-cc ">不合格数量</view>
 						<view class="content content_num">
-							<input class="uni-input" v-model="not.notFormedNum" type="digit" @blur="blurNum"
-								:disabled="isDetails" @input="notForme"></input>
+							<input class="uni-input" v-model="not.notFormedNum" type="digit" 
+								:disabled="isDetails" @input="changeNum"></input>
 							<view class="unit">{{item.unit}}</view>
 						</view>
 					</view>
@@ -250,6 +250,11 @@
 				this.$forceUpdate()
 
 			},
+			
+			changeNum() {
+				this.notForme()
+				this.blurNum()
+			},
 		}
 	}
 </script>

+ 1 - 1
pages/pda/jobBooking/components/oneJobBom.vue

@@ -122,7 +122,7 @@
 
 						<view class="item " v-else :class="[ isFirstTask == 1 ? 'ww25' : 'ww50' ]">
 							<zxz-uni-data-select :localdata="stepsList" v-model="it.extInfo.taskId" dataValue='taskId'
-								format='{taskTypeName}' dataKey="taskId" filterable
+								format='{taskTypeName}' dataKey="taskId" filterable   @change=" e => it.extInfo.taskName = e.taskTypeName" 
 								:clear='false'></zxz-uni-data-select>
 
 						</view>

+ 523 - 0
pages/pda/jobBooking/components/packingTgBom.vue

@@ -0,0 +1,523 @@
+<template>
+	<view>
+		<view class="title_box rx-bc">
+			<view class="name">打包信息: ({{item.packInfo.pickOutInList.length || 0}})个</view>
+		</view>
+
+
+		<view class="material " v-for="(it, idx) in item.packInfo.pickOutInList" :key="idx">
+
+
+			<view class="content_table">
+
+				<view class="item rx-sc">
+					<view class="rx">
+						<view class="lable lable190 rx-cc ">
+
+							<view class="round">{{idx + 1}}</view>物料编码
+						</view>
+						<view class="content rx-sc">
+							<view>{{it.code}}</view>
+						</view>
+					</view>
+				</view>
+
+				<view class="item rx-sc">
+					<view class="rx">
+						<view class="lable lable150 rx-cc ">名称</view>
+						<view class="content rx-sc">
+							<view>{{it.name}}</view>
+						</view>
+					</view>
+				</view>
+
+				<view class="item rx-sc">
+					<view class="rx">
+						<view class="lable lable150 rx-cc ">型号</view>
+						<view class="content rx-sc">
+							<view>{{it.modelType}}</view>
+						</view>
+					</view>
+				</view>
+
+
+
+				<view class="item rx-sc">
+					<view class="rx ww50 ">
+						<view class="lable lable150 rx-cc ">物料代号</view>
+						<view class="content content_num">
+							<view v-if='isDetails'>{{it.extInfo.materielCode }}</view>
+							<input class="uni-input" v-else v-model="it.extInfo.materielCode"></input>
+
+						</view>
+					</view>
+
+					<view class="rx ww50">
+						<view class="lable lable150 rx-cc ">客户代号</view>
+						<view class="content content_num">
+							<view v-if='isDetails'>{{it.extInfo.clientCode }}</view>
+							<input class="uni-input" v-else v-model="it.extInfo.clientCode"></input>
+						</view>
+					</view>
+
+				</view>
+
+
+				<view class="item rx-sc">
+					<view class="rx ww50 ">
+						<view class="lable lable150 rx-cc ">刻码</view>
+						<view class="content content_num ">
+							<view v-if='isDetails'>{{it.extInfo.engrave }}</view>
+							<input class="uni-input" v-else v-model="it.extInfo.engrave"></input>
+
+						</view>
+					</view>
+
+					<view class="rx ww50">
+						<view class="lable lable150 rx-cc ">位置</view>
+						<view class="content content_num">
+							<view >{{it.extInfo.position }}</view>
+						
+						</view>
+					</view>
+
+				</view>
+
+
+
+			</view>
+
+
+
+			<view class="content_table2">
+				<view class="head row rx-sc">
+					<view class="item ww25">工序重量{{it.extInfo.weightUnit}}</view>
+					<view class="item ww25">处置kg</view>
+
+					<view class="item ww50">
+						发货(包装)码
+					</view>
+
+				</view>
+
+				<view class="table">
+
+					<view class="tr row rx-sc">
+						<view class="item ww25">{{it.extInfo.newWeight    }}
+						</view>
+						<view class="item ww25 content_num">
+							入库
+						</view>
+
+
+						<view class="item  ww50">
+							<input class="uni-input content_num"  v-model="it.sendCode"></input>
+						</view>
+
+
+
+
+					</view>
+
+				</view>
+
+			</view>
+
+
+
+		</view>
+
+
+
+
+
+	</view>
+</template>
+
+<script>
+	import {
+		getTaskInstanceList
+	} from '@/api/pda/workOrder.js'
+
+	import {
+		saveParam,
+		getComputeParam
+	} from '@/api/pda/tangu.js'
+	export default {
+		props: {
+			item: {
+				type: Object,
+				default: () => {}
+			},
+
+			list: {
+				type: Array,
+				default: () => []
+			},
+
+			isDetails: {
+				type: Boolean,
+				default: false
+
+			}
+
+
+
+
+		},
+
+		watch: {
+            list: {
+			immediate: true,
+			deep: true,
+			handler(newVal) {
+				this.item['packInfo'] = {}
+				this.item['packInfo'].pickOutInList = newVal
+				
+			}	
+			}
+		},
+
+
+		data() {
+			return {
+				taskTypeName: null,
+				isFirstTask: null,
+
+
+
+			}
+		},
+		created() {
+			this.taskTypeName = this.item.currentTaskDiagram.taskTypeName
+			this.isFirstTask = this.item.currentTaskDiagram.isFirstTask
+			
+			
+
+		},
+		methods: {
+
+
+
+
+
+
+
+
+
+		}
+	}
+</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;
+			}
+
+
+		}
+
+		.btn_box {
+
+			.btn {
+				padding: 0 18rpx;
+				height: 50rpx;
+				line-height: 50rpx;
+				background: $theme-color;
+				font-size: 26rpx;
+				font-style: normal;
+				font-weight: 400;
+				font-size: 24rpx;
+				color: #fff;
+				border-radius: 4rpx;
+				margin-left: 24rpx;
+			}
+		}
+
+
+
+	}
+
+
+	.material {
+		margin-top: 10rpx;
+
+
+
+		.content_table {
+			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;
+				}
+
+				.lable150 {
+					width: 156rpx !important;
+					font-size: 24rpx;
+				}
+
+				.lable190 {
+					width: 190rpx !important;
+					font-size: 24rpx;
+				}
+
+				.ww80 {
+					width: 80rpx;
+				}
+
+				.content {
+					width: 518rpx;
+					min-height: 64rpx;
+					font-size: 28rpx;
+					line-height: 28rpx;
+					font-style: normal;
+					font-weight: 400;
+					padding: 18rpx 8rpx;
+					box-sizing: border-box;
+					word-wrap: break-word;
+					flex-grow: 1 !important;
+
+
+					.unit {
+						padding: 0 4rpx;
+						font-size: 24rpx;
+						color: #404446;
+					}
+
+					.penalize {
+						width: 160rpx;
+						line-height: 60rpx;
+						background: $theme-color;
+						font-size: 24rpx;
+						text-align: center;
+						color: #fff;
+					}
+
+				}
+
+
+
+				.content_H {
+					min-height: 92rpx;
+				}
+
+				.pd4 {
+					padding: 4rpx 8rpx;
+				}
+
+
+
+				&:last-child {
+					border-bottom: none;
+				}
+			}
+
+			.ww55 {
+				width: 55%;
+			}
+
+			.ww50 {
+				width: 50%;
+			}
+
+			.ww45 {
+				width: 45%;
+			}
+		}
+	}
+
+
+
+
+	.content_table2 {
+		width: 100%;
+		margin-top: 16rpx;
+
+
+		.row {
+			width: 100%;
+
+
+			.item {
+
+				color: #404446;
+				font-size: 28rpx;
+				padding-left: 12rpx;
+
+			}
+
+			.color157 {
+				color: $theme-color;
+			}
+
+
+			.ww30 {
+				width: 30%;
+			}
+
+			.ww20 {
+				width: 20%;
+			}
+
+			.ww15 {
+				width: 15%;
+			}
+
+			.ww25 {
+				width: 25%;
+			}
+
+			.ww50 {
+				width: 50%;
+			}
+
+			.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;
+				font-size: 22rpx;
+			}
+		}
+
+
+
+		.tr {
+			border-top: 2rpx solid #E3E5E5;
+			border-left: 2rpx solid #E3E5E5;
+
+
+			.item {
+				font-size: 24rpx;
+				min-height: 74rpx;
+				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;
+
+			}
+
+			.numerate {
+				font-size: 22rpx;
+				color: $theme-color;
+			}
+		}
+	}
+
+	.content_num {
+		display: flex;
+		align-items: center;
+		padding: 0 4rpx;
+
+		/deep/ .uni-input-input {
+			border: 2rpx solid #F0F8F2;
+			background: #F0F8F2;
+			color: $theme-color;
+		}
+
+
+	}
+
+	.round {
+		width: 32rpx;
+		height: 32rpx;
+		line-height: 32rpx;
+		text-align: center;
+		border-radius: 50%;
+		background: $theme-color;
+		font-size: 24rpx;
+		font-style: normal;
+		font-weight: 400;
+		color: #fff;
+		margin-right: 18rpx;
+	}
+
+
+	.popup_box {
+		width: 94vw;
+		padding: 16rpx 12rpx;
+		box-sizing: border-box;
+
+	}
+
+
+
+	.operate_box {
+		margin-top: 32rpx;
+		padding: 10rpx 100rpx;
+
+		/deep/ .u-button {
+			width: 160rpx;
+		}
+	}
+
+
+	.formula_box {
+		font-size: 24rpx;
+		font-style: normal;
+		font-weight: 400;
+		margin-top: 12rpx;
+	}
+
+	.reportWeight {
+		font-size: 24rpx;
+		font-style: normal;
+		font-weight: 400;
+		margin-top: 30rpx;
+
+		text {
+			color: $theme-color;
+		}
+	}
+</style>

+ 4 - 2
pages/pda/jobBooking/components/palletBom.vue

@@ -68,9 +68,7 @@
 	
 	import {
 		treeByPid,
-	
 		assetPage,
-	
 	} from '@/api/pda/workOrder.js'
 
 	export default {
@@ -78,6 +76,10 @@
 			palletList: {
 				type: Array,
 				default: () => []
+			},
+			isDetails: {
+				type: Boolean,
+				default: false
 			}
 		},
 

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

@@ -20,13 +20,13 @@
 
 
 
-					<jobBom v-if='isLoad' :item='objData'
-						:notFormed='objData.notFormedList' @penalize='penalize' @modeNum='modeNum'></jobBom>
-						
-						<palletBom  :palletList='objData.palletList'></palletBom>
+					<jobBom v-if='isLoad' :item='objData' :notFormed='objData.notFormedList' @penalize='penalize'
+						@modeNum='modeNum'></jobBom>
+
+					<palletBom :palletList='objData.palletList'></palletBom>
 
-					<oneJobBom v-if='objData.instanceList &&  objData.instanceList.length != 0 && taskType != 4' :item='objData'
-						:list='objData.instanceList'>
+					<oneJobBom v-if='objData.instanceList &&  objData.instanceList.length != 0 && taskType != 4'
+						:item='objData' :list='objData.instanceList'>
 					</oneJobBom>
 
 					<byProductBom v-if='objData.productRecycleList.length != 0 ' :list='objData.productRecycleList'
@@ -43,7 +43,12 @@
 						:remainingTime='remainingTime' @handleScan='handleScan' :isType='true'></aridRegion>
 
 					<packingBom :taskId='taskId' :workOrderId='id' :objData='objData' ref="packRef"
-						v-if='taskType == 4 && objData'></packingBom>
+						v-if='taskType == 4 && clientEnvironmentId != 3  && objData'></packingBom>
+						
+						<packingTgBom  v-if='objData.instanceList &&  objData.instanceList.length != 0 && taskType == 4 && clientEnvironmentId == 3' 
+						:item='objData' :list='objData.instanceList'></packingTgBom>
+
+
 
 					<view class="operate_box rx-sc">
 						<u-button size="small" class="u-reset-button" type="success" @click="handAdd">手动添加</u-button>
@@ -123,6 +128,7 @@
 	import aridRegion from '../../feeding/components/aridRegion.vue'
 	import paramBom from '../../feeding/components/paramBom.vue'
 	import packingBom from '../components/packingBom.vue'
+	import packingTgBom from '../components/packingTgBom'
 	import SearchPopup from '../../components/searchPopup.vue'
 
 
@@ -140,6 +146,7 @@
 			aridRegion,
 			paramBom,
 			packingBom,
+			packingTgBom,
 			SearchPopup
 		},
 		data() {
@@ -181,6 +188,9 @@
 				id: null,
 				taskId: null,
 
+				clientEnvironmentId: uni.getStorageSync("userInfo") && uni.getStorageSync("userInfo")
+					.clientEnvironmentId, // *1 主环境-601环境   2 soll-索尔环境    3 tg-碳谷环境
+
 			}
 		},
 		onLoad(options) {
@@ -247,8 +257,8 @@
 
 			scanItAllData(result) {
 				scanLedger(result).then(res => {
-					if ( res[0].rootCategoryLevelId == 4) { // 设备
-						
+					if (res[0].rootCategoryLevelId == 4) { // 设备
+
 						let isFals = this.objData.equipmentList.some(m => m.code == result)
 						if (isFals) {
 							uni.showToast({
@@ -259,7 +269,7 @@
 						}
 						this.objData.equipmentList.push(res[0])
 						this.$forceUpdate()
-						
+
 					}
 
 					if (res.length >= 1 && res[0].rootCategoryLevelId == 5) { // 磨具
@@ -278,9 +288,9 @@
 									icon: 'none'
 								})
 							}
-							
-							
-							
+
+
+
 						}
 					} else if (res.length == 1 && res[0].rootCategoryLevelId == 7) { // 周转车
 
@@ -529,14 +539,7 @@
 					let _i
 					bol = this.objData.instanceList.every((e, i) => {
 						_i = i + 1
-						
-						
-						
-						
-						
-						
-						
-						
+
 						return e.extInfo.hasOwnProperty('taskId') && e.extInfo.taskId
 					})
 
@@ -570,7 +573,7 @@
 
 
 
-				if (this.taskType == 4) {
+				if (this.taskType == 4 && this.clientEnvironmentId != 3) {
 					const isPack = await this.checkPack()
 
 					if (!isPack) {
@@ -585,7 +588,6 @@
 
 
 
-
 				if (this.objData.currentTaskDiagram.isFirstTask == 0) { // isFirstTask  1是  判断是否首工序
 
 					const isFirstTask = await this.checkFirstTask()

+ 1 - 1
pages/pda/picking/components/instanceBom.vue

@@ -20,7 +20,7 @@
 				</view>
 
 
-				<view class="item" v-for="(itm, index) in tableH(1)" v-if='itm.prop' :key="index">
+				<view class="item" v-for="(itm, index) in tableH(mate.rootCategoryLevelId)" v-if='itm.prop' :key="index">
 					<view class="lable rx-cc">{{ itm.label }}</view>
 					<view class="content">{{ mate[itm.prop] }}</view>
 

+ 2 - 0
pages/pda/picking/details.vue

@@ -167,6 +167,8 @@
 						let modelList2 = [] // 模具
 						let palletList2 = []
 						let packingList2 = [] // 包装
+					
+						
 
 
 						selectList.forEach(f => {

+ 17 - 12
pages/pda/warehousing/components/packingBom.vue

@@ -14,21 +14,22 @@
 				<view class="head row rx-sc">
 					<view class="item ww10">序号</view>
 					<view class="item ww30">数量</view>
-					<view class="item ww50">条码</view>
+					<view class="item ww50">发货条码</view>
 					<view class="item ww10 selectAll" @click="handOneCheck">{{ oneCheck ?   '取消' : '全选'}}</view>
 				</view>
 
 				<view class="table">
-					<view class="tr row rx-sc " v-for="(it, idx) in objData.packingReportList" :key='idx' @click="handleCheck(idx, it)">
+					<view class="tr row rx-sc " v-for="(it, idx) in objData.packingReportList" :key='idx'
+						@click="handleCheck(idx, it)">
 						<view class="item ww10 rx-cc ">{{ idx + 1 }}</view>
 						<view class="item ww30 content_num rx-sc">
-							{{it.packingNum}} / {{ it.unit }}  {{it.quantity}}/ {{ it.childList[0].unit }} 
+							{{it.packingNum}} / {{ it.unit }} {{it.quantity}}/ {{ it.childList[0].unit }}
 						</view>
 
 						<view class="item ww50">
 							{{ it.code }}
 						</view>
-						<view class="item ww10 rx-cc" >
+						<view class="item ww10 rx-cc">
 							<image class="check" v-if='it.check' src='@/static/check.png'>
 							</image>
 							<image class="check" v-if=' !it.check' src='@/static/check_no.png'>
@@ -60,13 +61,14 @@
 				<view class="head row rx-sc">
 					<view class="item ww10">序号</view>
 					<view class="item ww30">数量</view>
-					<view class="item ww50">条码</view>
-					<view class="item ww10 selectAll"  @click="handTwoCheck">{{ twoCheck ?   '取消' : '全选'}}</view>
+					<view class="item ww50">发货条码</view>
+					<view class="item ww10 selectAll" @click="handTwoCheck">{{ twoCheck ?   '取消' : '全选'}}</view>
 				</view>
 
 				<view class="table">
 					<u-list @scrolltolower="scrolltolower" class="z_list">
-						<view class="tr row rx-sc" v-for="(it, idx) in objData.packingReportMarginList" :key='idx' @click="handleCheckTwo(idx, it)">
+						<view class="tr row rx-sc" v-for="(it, idx) in objData.packingReportMarginList" :key='idx'
+							@click="handleCheckTwo(idx, it)">
 							<view class="item ww10 rx-cc ">{{ it.computeSize }}</view>
 							<view class="item ww30 content_num rx-sc">
 								<view>{{ it.quantity }}/ {{it.unit}} </view>
@@ -74,7 +76,7 @@
 							<view class="item ww50">
 								{{ it.code }}
 							</view>
-							<view class="item ww10 rx-cc" >
+							<view class="item ww10 rx-cc">
 								<image class="check" v-if='it.check' src='@/static/check.png'>
 								</image>
 								<image class="check" v-if=' !it.check' src='@/static/check_no.png'>
@@ -115,12 +117,15 @@
 				oneCheck: false,
 				twoCheck: false,
 
+				clientEnvironmentId: uni.getStorageSync("userInfo") && uni.getStorageSync("userInfo").clientEnvironmentId,  // *1 主环境-601环境   2 soll-索尔环境    3 tg-碳谷环境
+				
 
+				
 			}
 		},
 
 		created() {
-			
+
 
 		},
 
@@ -128,7 +133,7 @@
 
 
 			handOneCheck() {
-		
+
 				if (this.oneCheck) {
 					this.oneCheck = false
 					this.objData.packingReportList.forEach(e => {
@@ -147,8 +152,8 @@
 				this.$set(this.objData.packingReportList[idx], 'check', !it.check)
 				this.$forceUpdate()
 			},
-			
-			
+
+
 			handTwoCheck() {
 				if (this.twoCheck) {
 					this.twoCheck = false

+ 0 - 1
pages/pda/warehousing/index.vue

@@ -18,7 +18,6 @@
 					<view class="list_box" v-for="(item, index) in List" :key="index">
 						<view class="time">打包时间: {{item.createTime}}</view>
 						<packingBom :objData="item.extInfo"></packingBom>
-
 					</view>
 
 				</view>

+ 11 - 13
pages/pda/workOrder/extrusionMolding/index.vue

@@ -126,9 +126,7 @@
 
 					<view class="list rx-bc">
 						<view class="title rx-sc">
-
 							<image class="icon" src="~@/static/pda/target.svg"></image>
-
 							待投料数量
 						</view>
 
@@ -149,7 +147,9 @@
 		</view>
 
 		<view class="bottom-wrapper">
-			<bottomOperate @operate='operate' :state='currentType'></bottomOperate>
+			<bottomOperate @operate='operate'
+				:taskObj="{'currentTaskName': currentTaskName || info.taskName, 'currentTaskId': currentTaskId || info.taskId, 'workOrderId' : id }"
+				:state='currentType'></bottomOperate>
 		</view>
 
 	</view>
@@ -165,9 +165,7 @@
 		produceDetail,
 		checkStatus
 	} from '@/api/pda/workOrder.js'
-	import {
-		noop
-	} from 'lodash'
+
 	export default {
 		components: {
 			bottomOperate,
@@ -264,7 +262,7 @@
 					if (f.taskId == id) {
 						this.currentType = f.type
 					}
-					
+
 				})
 
 			},
@@ -279,10 +277,10 @@
 			selectStep(item) {
 				this.currentTaskId = item.taskId
 				this.currentTaskName = item.taskTypeName
-				
-				 	this.currentType = item.type
-			
-				
+
+				this.currentType = item.type
+
+
 				this.feedStatus()
 			},
 
@@ -361,8 +359,8 @@
 					uni.navigateTo({
 						url
 					})
-				} else if(type == 'warehousing') {
-		
+				} else if (type == 'warehousing') {
+
 					url = '/pages/pda/warehousing/index'
 					url += `?workOrderId=${this.info.id}&taskId=${taskId}`
 					uni.navigateTo({

+ 20 - 19
pages/pda/workOrder/index/details.vue

@@ -1,7 +1,7 @@
 <template>
 	<view class="content-box">
 		<uni-nav-bar fixed="true" statusBar="true" left-icon="back" :title="title" background-color="#F7F9FA"
-			color="#000" @clickLeft="back" >
+			color="#000" @clickLeft="back">
 		</uni-nav-bar>
 
 		<view class="list_box">
@@ -20,16 +20,17 @@
 					<modelBom v-if='objData.modelList.length != 0' :list='objData.modelList'>
 					</modelBom>
 
-	             <qualityStat :normalQuality='objData.normalQuality' v-if='objData  && taskType == 3'></qualityStat>
-	
-					<sampleBom :item='objData.quality' v-if='objData.quality && taskType == 2' :workReportInfo='objData.workReportInfo'
-						:isDetails='true'></sampleBom>
-						   
-					<jobBom :item='objData' v-if="objData.notFormedList" :palletList='objData.palletList' :notFormed='objData.notFormedList'
-						:isDetails='true'></jobBom>
-					
-					<oneJobBom  v-if='objData.instanceList &&  objData.instanceList.length != 0' :list='objData.instanceList' :item='objData' :isDetails='true'> </oneJobBom>
-						
+					<qualityStat :normalQuality='objData.normalQuality' v-if='objData  && taskType == 3'></qualityStat>
+
+					<sampleBom :item='objData.quality' v-if='objData.quality && taskType == 2'
+						:workReportInfo='objData.workReportInfo' :isDetails='true'></sampleBom>
+
+					<jobBom :item='objData' v-if="objData.notFormedList" :palletList='objData.palletList'
+						:notFormed='objData.notFormedList' :isDetails='true'></jobBom>
+
+					<oneJobBom v-if='objData.instanceList &&  objData.instanceList.length != 0'
+						:list='objData.instanceList' :item='objData' :isDetails='true'> </oneJobBom>
+
 
 					<byProductBom v-if='objData.productRecycleList.length != 0 ' :list='objData.productRecycleList'
 						:isDetails='true'>
@@ -42,11 +43,11 @@
 
 
 					<aridRegion v-if='objData.aridRegionList.length != 0' :list='objData.aridRegionList'
-						:remainingTime='0'  :isType='true'></aridRegion>
-						
-						
-					
-						
+						:remainingTime='0' :isType='true'></aridRegion>
+
+
+
+
 
 
 				</view>
@@ -75,7 +76,7 @@
 	import turnoverBom from '../../jobBooking/components/turnoverBom.vue'
 	import aridRegion from '../../feeding/components/aridRegion.vue'
 	import paramBom from '../../feeding/components/paramBom.vue'
-	
+
 	import qualityStat from '../../sample/components/qualityStat.vue'
 	import sampleBom from '../../sample/components/sampleBom.vue'
 	export default {
@@ -89,7 +90,7 @@
 			turnoverBom,
 			aridRegion,
 			paramBom,
-			
+
 			qualityStat,
 			sampleBom
 		},
@@ -116,7 +117,7 @@
 					taskId: this.taskId
 				}
 				listWorkReport(param).then(res => {
-					console.log(2,res)
+					console.log(2, res)
 					this.list = res
 				})
 			},

+ 2 - 2
pages/pda/workOrder/search/index.vue

@@ -314,9 +314,9 @@
 			getTreeList() {
 				let params = {}
 				if (this.isType == 'feed') {
-					params.ids = [1, 4, 5, 8, 10, 11,13, 14]
+					params.ids = [1, 4, 5, 8, 10, 11,13, 14, 26]
 				} else if (this.isType == 'pick') {
-					params.ids = [1, 5, 7, 8, 10, 13, 14]
+					params.ids = [1, 5, 7, 8, 10, 13, 14, 26]
 				} else if (this.isType == 'job') {
 					params['ids'] = [4, 7]
 				}