ysy před 2 roky
rodič
revize
478529fa3e

+ 22 - 22
pages/pda/feeding/components/feedBom.js

@@ -129,28 +129,28 @@ export const tableHeader = selectEquiType => {
 
 		case 14:
 			return []
-			
-			case 23:
-				return [
-					
-									{
-										label: '名称',
-										prop: 'name'
-									},
-					
-									{
-										label: '型号',
-										prop: 'modelType'
-									},
-									{
-										label: '规格',
-										prop: 'specification'
-									},
-									{
-										label: '牌号',
-										prop: 'brandNum'
-									}
-				]
+
+		case 23:
+			return [
+
+				{
+					label: '名称',
+					prop: 'name'
+				},
+
+				{
+					label: '型号',
+					prop: 'modelType'
+				},
+				{
+					label: '规格',
+					prop: 'specification'
+				},
+				{
+					label: '牌号',
+					prop: 'brandNum'
+				}
+			]
 
 	}
 

+ 828 - 0
pages/pda/jobBooking/components/semiProductJobBom.vue

@@ -0,0 +1,828 @@
+<template>
+	<view>
+		<view class="title_box rx-bc">
+			<view class="name">半成品 - 报工信息: ({{list.length || 0}})个</view>
+		</view>
+
+
+		<view class="material " v-for="(it, idx) in list" :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 v-if='isDetails'>{{it.extInfo.position }}</view>
+							<input class="uni-input" v-else v-model="it.extInfo.position"></input>
+						</view>
+					</view>
+
+				</view>
+
+
+
+			</view>
+
+
+
+			<view class="content_table2">
+				<view class="head row rx-sc">
+					<view class="item ww25">{{isFirstTask == 1 ? '物料重量' : '工序重量'}} {{it.extInfo.weightUnit}}</view>
+					<view class="item ww25">报工重量{{it.extInfo.weightUnit}}</view>
+					<view class="item ww25" v-if="isFirstTask == 1">质检结果
+					</view>
+					<view class="item ww25" :class="[  isFirstTask == 1 ? 'ww25' : 'ww50' ]">处置
+					</view>
+
+				</view>
+
+				<view class="table">
+
+					<view class="tr row rx-sc">
+						<view class="item ww25">{{isFirstTask == 1 ? it.extInfo.weight :   it.extInfo.newWeight }}
+						</view>
+						<view class="item ww25 content_num">
+							<view v-if='isDetails'>{{it.extInfo.reportWeight }}</view>
+							<input class="uni-input" v-else v-model="it.extInfo.reportWeight"></input>
+						</view>
+						<view class="item ww25" @click="openNumerate(it, idx)" v-if="isFirstTask == 1">
+							<view class="numerate">点击计算</view>
+						</view>
+
+
+
+
+						<view class="item" v-if='isDetails' :class="[ isFirstTask == 1 ? 'ww25' : 'ww50' ]">
+							{{it.extInfo.taskName}}
+						</view>
+
+						<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   @change=" e => it.extInfo.taskName = e.taskTypeName" 
+								:clear='false'></zxz-uni-data-select>
+
+						</view>
+
+
+					</view>
+
+				</view>
+
+			</view>
+
+
+
+		</view>
+
+
+
+		<u-popup :show="show" mode='center' v-if='show' :closeOnClickOverlay='false'>
+			<view class="popup_box">
+
+				<view class="title_box rx-bc">
+					<view class="name">工序计算列表</view>
+					<view class="btn_box rx-ec">
+						<view class="btn" @click="handAddParam">新增</view>
+
+
+					</view>
+
+				</view>
+
+				<view class="content_table2">
+					<view class="head row rx-sc">
+						<view class="item ww30">工序名称</view>
+						<view class="item ww20">坯体密度</view>
+						<view class="item ww20">密度系数</view>
+						<view class="item ww20">重量</view>
+
+
+
+
+						<view class="item ww10">操作</view>
+
+					</view>
+
+					<view class="table">
+
+						<view class="tr row rx-sc" v-for="(it, idx) in paramList" :key='idx'>
+							<view class="item  rx-bc ww30">
+								<zxz-uni-data-select :localdata="stepsList" v-model="it.taskId" dataValue='taskId'
+									format='{taskTypeName}' dataKey="taskId" filterable
+									@change=" e => it.taskName = e.taskTypeName" :clear='false'></zxz-uni-data-select>
+							</view>
+
+
+							<view class="item ww20 content_num">
+								<input class="uni-input" v-model="it.billet" type="digit"
+									@input="changeInp(it, idx)"></input>
+							</view>
+
+
+							<view class="item ww20 content_num">
+								<input class="uni-input" v-model="it.density" type="digit"
+									@input="changeInp(it, idx)"></input>
+							</view>
+
+
+
+							<view class="item ww20" v-if=" (idx == 0 || idx != paramList.length - 1)">
+								< {{it.CVIWeight}} </view>
+
+									<view class="item ww20" v-if=" paramList.length > 1 && idx == paramList.length - 1">
+										≥ {{it.CVIWeight }}
+									</view>
+
+							</view>
+
+
+
+
+
+
+						</view>
+
+						<view class="formula_box">计算公式: 物料重量/坯体密度*密度系数 </view>
+
+
+						<view class="rx-cc">
+							<u-button size="small" class="u-reset-button" style="width: 300rpx;margin: 20rpx;"
+								type="success" @click="paramSave">工序列表保存</u-button>
+						</view>
+
+						<view class="reportWeight rx-sc">
+							物料重量: {{weight}} ;
+							报工重量: {{reportWeight}}
+
+						</view>
+
+
+
+					</view>
+
+
+					<view class="operate_box rx-sc">
+						<u-button size="small" class="u-reset-button" @click="cancel">取消</u-button>
+						<u-button size="small" class="u-reset-button" type="success" @click="save">确定</u-button>
+					</view>
+				</view>
+
+
+		</u-popup>
+
+
+
+	</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: {
+
+		},
+
+
+		data() {
+			return {
+				taskTypeName: null,
+				isFirstTask: null,
+
+				stepsList: [],
+
+
+
+				show: false,
+
+
+
+				rowIt: [],
+
+				paramList: [],
+				paramObj: {},
+
+
+				weight: 0,
+				reportWeight: 0,
+
+				resultObj: {},
+				resultIdx: 0,
+
+
+
+
+
+			}
+		},
+		created() {
+			this.taskTypeName = this.item.currentTaskDiagram.taskTypeName
+			this.isFirstTask = this.item.currentTaskDiagram.isFirstTask
+			this.getSteps()
+			this.getCompute()
+
+		},
+		methods: {
+
+
+
+
+			getSteps() {
+
+				getTaskInstanceList(this.item.workOrderId).then(res => {
+					this.stepsList = res
+				})
+			},
+
+			getCompute() {
+				getComputeParam(this.item.workOrderId, this.item.currentTaskDiagram.taskId).then(res => {
+					this.paramList = []
+					this.paramList = res.paramList
+					this.paramObj = res
+				})
+			},
+
+
+			handAddParam() {
+				// billet: null,
+				// density: null,
+				// result: null,
+
+				// PIPDensity: null,
+				// volume: null,
+				// coefficient: null
+
+				if (this.isFirstTask == 1) {
+					this.paramList.push({
+						taskId: null,
+						taskName: null,
+
+					})
+				}
+
+
+			},
+
+			getDelete(idx) {
+				this.paramList.splice(idx, 1)
+			},
+
+			changeInp(item, index) {
+				if (Number(item.billet) && Number(item.density)) {
+					this.paramList[index].CVIWeight = (Number(this.weight) / item.billet * item.density).toFixed(2)
+
+				}
+
+			},
+
+
+			paramSave() {
+
+
+				if (this.isFirstTask == 1 && this.paramList.length > 0) {
+					let bol
+					let _i
+					bol = this.paramList.every((e, i) => {
+						_i = i + 1
+						return e.taskId && e.billet && e.density
+					})
+
+					if (!bol) {
+						uni.showToast({
+							title: `请完善第${_i}计算数据`,
+							icon: 'none'
+						})
+						return false
+					}
+
+					if (this.paramList.length < 1) {
+						uni.showToast({
+							title: `请输入二个以上计算数据`,
+							icon: 'none'
+						})
+
+						return false
+					}
+
+
+				}
+				let param = {}
+
+				if (!this.paramObj.hasOwnProperty('id')) {
+
+					param = {
+						paramList: this.paramList,
+						workOrderId: this.item.workOrderId,
+						taskId: this.item.currentTaskDiagram.taskId
+					}
+
+				} else {
+
+					this.paramObj.paramList = this.paramList
+					param = this.paramObj
+				}
+
+
+
+
+				saveParam(param).then(res => {
+					uni.showToast({
+						icon: 'none',
+						title: '操作成功'
+					})
+					this.getCompute()
+
+
+
+				})
+
+			},
+
+			openNumerate(row, idx) {
+				if (!row.extInfo.reportWeight) {
+					uni.showToast({
+						icon: 'none',
+						title: '请先输入报工重量'
+					})
+					return false
+				}
+				this.weight = row.extInfo.weight
+				this.reportWeight = row.extInfo.reportWeight
+				this.resultIdx = idx
+
+
+
+				this.show = true
+			},
+
+
+
+			cancel() {
+				this.show = false
+				this.reportWeight = 0
+				this.weight = 0
+			},
+
+			taskChange(e) {
+				console.log(e)
+			},
+
+			save() {
+
+
+				if (this.isFirstTask == 1) {
+
+					this.resultObj = {}
+
+
+					if (Number(this.reportWeight) < this.paramList[0].CVIWeight) {
+						this.resultObj = this.paramList[0]
+						this.setDataSave()
+						return false
+					}
+
+
+					if (Number(this.reportWeight) >= this.paramList[this.paramList.length - 1].CVIWeight) {
+						this.resultObj = this.paramList[this.paramList.length - 1]
+						this.setDataSave()
+						return false
+					}
+
+					for (let i = 1; i < this.paramList.length; i++) {
+						if (Number(this.paramList[i - 1].CVIWeight) < Number(this.reportWeight) <= Number(this.paramList[i]
+								.CVIWeight)) {
+							this.resultObj = this.paramList[i]
+							break;
+						}
+					}
+
+					this.setDataSave()
+
+
+
+
+				}
+
+			},
+
+			setDataSave() {
+
+				this.$set(this.list[this.resultIdx].extInfo, 'taskId', this.resultObj.taskId)
+				this.$set(this.list[this.resultIdx].extInfo, 'density', this.resultObj.density)
+				this.$set(this.list[this.resultIdx].extInfo, 'billet', this.resultObj.billet)
+				this.$set(this.list[this.resultIdx].extInfo, 'taskName', this.resultObj.taskName)
+
+
+				this.cancel()
+			},
+
+
+
+		}
+	}
+</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>

+ 8 - 0
pages/pda/jobBooking/index/index.vue

@@ -32,6 +32,12 @@
 						v-if='objData.instanceList &&  objData.instanceList.length != 0 && taskType != 4 && taskType != 6'
 						:item='objData' :list='objData.instanceList'>
 					</oneJobBom>
+					
+					
+					<semiProductJobBom 	v-if='objData.semiProductList &&  objData.semiProductList.length != 0 && taskType != 4 && taskType != 6' 
+					:item='objData' :list='objData.semiProductList'
+					></semiProductJobBom>
+					
 
 
 
@@ -133,6 +139,7 @@
 	import jobBom from '../components/jobBom.vue'
 	import palletBom from '../components/palletBom.vue'
 	import oneJobBom from '../components/oneJobBom.vue'
+	import semiProductJobBom from '../components/semiProductJobBom.vue'
 	import byProductBom from '../components/byProductBom'
 	import turnoverBom from '../components/turnoverBom.vue'
 	import aridRegion from '../../feeding/components/aridRegion.vue'
@@ -154,6 +161,7 @@
 			jobBom,
 			palletBom,
 			oneJobBom,
+			semiProductJobBom,
 			byProductBom,
 			turnoverBom,
 			aridRegion,

+ 12 - 4
pages/pda/workOrder/index/details.vue

@@ -36,8 +36,14 @@
 
 					<oneJobBom v-if='objData.instanceList &&  objData.instanceList.length != 0 & taskType != 6'
 						:list='objData.instanceList' :item='objData' :isDetails='true'> </oneJobBom>
-						
-						<oneJobQualityBom v-if='objData.instanceList &&  objData.instanceList.length != 0 & taskType == 6'
+
+					<semiProductJobBom
+						v-if='objData.semiProductList &&  objData.semiProductList.length != 0 & taskType != 6'
+						:list='objData.semiProductList' :item='objData' :isDetails='true'> </semiProductJobBom>
+
+
+
+					<oneJobQualityBom v-if='objData.instanceList &&  objData.instanceList.length != 0 & taskType == 6'
 						:list='objData.instanceList' :item='objData' :isDetails='true'></oneJobQualityBom>
 
 
@@ -112,8 +118,9 @@
 	import modelBom from '../../feeding/components/modelBom.vue'
 	import jobBom from '../../jobBooking/components/jobBom.vue'
 	import oneJobBom from '../../jobBooking/components/oneJobBom.vue'
+	import semiProductJobBom from '../../jobBooking/components/oneJobBom.vue'
 	import oneJobQualityBom from '../../jobBooking/components/oneJobQualityBom.vue'
-	
+
 	import byProductBom from '../../jobBooking/components/byProductBom'
 	import turnoverBom from '../../jobBooking/components/turnoverBom.vue'
 	import aridRegion from '../../feeding/components/aridRegion.vue'
@@ -140,6 +147,7 @@
 			modelBom,
 			jobBom,
 			oneJobBom,
+			semiProductJobBom,
 			oneJobQualityBom,
 			byProductBom,
 			turnoverBom,
@@ -185,7 +193,7 @@
 				let URL = this.taskType == 5 ? listApplystorage : listWorkReport
 				URL(param).then(res => {
 					this.list = res
-				
+
 
 				})
 			},