You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

421 lines
9.5 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<view class="detail">
<view class="base-info module">
<view class="title">派工单编号 #{{code}}</view>
<view class="cont">
<view class="item">
<view class="label">产品状态</view>
<view class="val yjd">{{statusMap[detailInfo.status]}}</view>
</view>
<view class="item">
<view class="label">产品名称</view>
<view class="val">{{detailInfo.productName}}</view>
</view>
<view class="item">
<view class="label">派工工序</view>
<view class="val">{{detailInfo.procedureName}}</view>
</view>
<view class="item">
<view class="label">任务编号</view>
<view class="val">{{detailInfo.code}}</view>
</view>
<view class="item">
<view class="label">完成时限</view>
<view class="val" v-if="detailInfo.startWorkTime">
{{detailInfo.startWorkTime | formatDate}} {{detailInfo.endWorkTime | formatDate}}
</view>
</view>
<view class="item">
<view class="label">派工数量:</view>
<view class="val">{{detailInfo.processingProductAmount}}</view>
</view>
<view class="item">
<view class="label">预计工时:</view>
<view class="val">{{detailInfo.predictWorkTime}}</view>
</view>
<view class="item">
<view class="label">总报工产量:</view>
<view class="val">{{detailInfo.reportAmount}}</view>
</view>
<view class="item">
<view class="label">总实际工时:</view>
<view class="val">{{detailInfo.workTime}}</view>
</view>
</view>
</view>
<view class="pg-info module" v-if="isQC">
<view class="cont">
<view class="item">
<view class="label">合格数量</view>
<view class="val">
{{ detailInfo.qualifiedAmount || 0 }}
</view>
</view>
<view class="item">
<view class="label">不合格数量</view>
<view class="val">
{{ detailInfo.unqualifiedAmount || 0 }}
</view>
</view>
<view class="item">
<view class="label">报废数量</view>
<view class="val">
{{ detailInfo.scrapAmount || 0 }}
</view>
</view>
<view class="item">
<view class="label">返修数量</view>
<view class="val">
{{ detailInfo.repairAmount || 0 }}
</view>
</view>
</view>
</view>
<view class="module" v-if="detailInfo.reportList && detailInfo.reportList.length">
<view class="title">历史报工明细</view>
<view class="cont" v-for="item in detailInfo.reportList" :key="item.id">
<view class="item">
<view class="label">生产开始时间:</view>
<view class="val">{{item.startTime | formatDate}}</view>
</view>
<view class="item">
<view class="label">生产结束时间:</view>
<view class="val">{{item.endTime | formatDate}}</view>
</view>
<view class="item">
<view class="label">报工产量:</view>
<view class="val">{{item.reportAmount}}</view>
</view>
<view class="item">
<view class="label">实际工时:</view>
<view class="val">{{item.realWorkTime}}</view>
</view>
<block v-if="isQC">
<view class="item">
<view class="label">合格数量:</view>
<view class="val">0</view>
</view>
<view class="item">
<view class="label">不合格数量:</view>
<view class="val">1</view>
</view>
<view class="item">
<view class="label">报废数量:</view>
<view class="val">2</view>
</view>
<view class="item">
<view class="label">返修数量:</view>
<view class="val">3</view>
</view>
</block>
</view>
</view>
<block v-if="status !=='FINISHED'">
<block v-if="isStaff">
<good-drawer @close="closeDrawer" @submit="handleLQSubmit" ref="drawer" :detailList="detailList">
</good-drawer>
<view class="action">
<view class="llsq item" @click="handleSQ"></view>
<view class="next item" @click="handleNext"></view>
</view>
</block>
<block v-else>
<view class="action">
<view class="next item" @click="handleNext"></view>
</view>
</block>
</block>
</view>
</template>
<script>
import goodDrawer from '@/components/good-drawer/good-drawer.vue'
import {
getToken
} from '@/utils/auth'
import {
produceDetailApi,
produceOperateApi,
produceReportApi,
produceRecieveApi
} from '@/api/task-detail'
export default {
components: {
goodDrawer
},
data() {
return {
id: '',
code: 0,
status: '',
detailInfo: {},
detailList: [],
statusText: '已开工'
};
},
computed: {
isLogin() {
return !!getToken()
},
statusMap() {
return this.$store.state.user.statusMap || {};
},
isStaff() {
const produceGroupType = this.$store.state.user.userInfo.produceGroupType || '';
return produceGroupType == 'PROCESS'
},
isQC() {
const produceGroupType = this.$store.state.user.userInfo.produceGroupType || '';
return produceGroupType == 'QC'
},
produceGroupType() {
const produceGroupType = this.$store.state.user.userInfo.produceGroupType || '';
return produceGroupType
}
},
onShow() {
if (!this.isLogin) {
uni.navigateTo({
url: '/pages/login'
})
}
},
onLoad(option) {
this.status = option.status
this.id = option.id
this.code = option.code
this.statusText = this.statusMap[this.status] || '已开工',
this.initData()
},
//时间戳的处理
filters: {
formatDate: function(value) {
var date = new Date();
date.setTime(value);
var month = date.getMonth() + 1;
var hours = date.getHours();
if (hours < 10)
hours = "0" + hours;
var minutes = date.getMinutes();
if (minutes < 10)
minutes = "0" + minutes;
var time = date.getFullYear() + "-" + month + "-" + date.getDate() +
" " + hours + ":" + minutes;
return time;
}
},
methods: {
handleSQ() {
this.$refs.drawer.$refs.showLeft.open()
},
handleLQSubmit(detailList) {
const params = {
taskId: this.id,
detailList
}
produceRecieveApi(params).then(res => {
const {
code,
data,
msg
} = res
this.$refs.drawer.$refs.showLeft.close()
})
},
closeDrawer() {
this.$refs.drawer.$refs.showLeft.close()
},
handleNext() {
uni.navigateTo({
url: `/pages/bg-detail/index?id=${this.id}&status=${this.status}`
});
},
initData() {
const taskType = this.$store.state.user.userInfo.produceGroupType
const params = {
id: this.id,
taskType
}
produceDetailApi(params).then(res => {
const {
code,
data,
msg
} = res
this.detailInfo = data
const dataList = data.detailList
this.detailList = dataList.map(e => {
const obj = {
id: e.id,
productId: e.productId,
productName: e.productName,
spec: e.spec,
receiveAmount: e.receiveAmount,
amount: 1
}
return obj
})
})
}
}
}
</script>
<style lang="scss" scoped>
.detail {
width: 100%;
height: 100%;
background: #fff;
.module {
margin: 20rpx;
padding: 20rpx;
background: #fff;
border-radius: 20rpx;
box-shadow: 0px 0px 8px 0px rgba(161, 161, 177, 0.12);
.title {
font-size: 28rpx;
font-weight: 600;
padding-bottom: 8px;
color: #0D0D26;
border-bottom: 1px solid #eaeef1;
}
.cont {
background: #FAFAFD;
padding: 20rpx;
margin: 20rpx 0 10rpx;
.item {
margin: 20rpx 0;
display: flex;
// justify-content: space-between;
.label {
color: #95969D;
margin-right: 20rpx;
font-size: 28rpx;
&.name {
color: #356899;
font-size: 36rpx;
}
}
.val {
color: #0D0D26;
font-size: 28rpx;
&.yjd {
background: #E8FFEA;
color: #356899;
font-size: 24rpx;
padding: 6rpx 10rpx;
}
}
}
}
&.bgInfo {
display: flex;
justify-content: space-around;
.item {
flex: 1;
text-align: center;
.label {
font-size: 24rpx;
color: #95969D;
}
.val {
font-size: 32rpx;
color: #0D0D26;
margin-top: 4rpx;
}
}
}
}
.pg-info {
.cont {
display: flex;
.item {
flex: 1;
display: flex;
justify-content: center;
flex-direction: column;
align-items: center;
.val {
margin-top: 20rpx;
}
}
}
}
.popup {
.table {
width: 400rpx;
}
}
.action {
border-top: 1px solid #95969D;
padding: 20rpx 0;
width: 100%;
margin: 40rpx auto;
display: flex;
justify-content: space-between;
align-items: center;
.item {
flex: 1;
color: #fff;
margin: 0 40rpx;
padding: 10px 0;
font-weight: 600;
border-radius: 20rpx;
font-size: 32rpx;
text-align: center;
display: flex;
align-items: center;
justify-content: center;
&.bg {
background-color: #409eff;
}
&.llsq {
background-color: #FF7D00;
}
&.next {
background-color: #356899;
}
&.start {
background-color: #FF7D00;
}
&.end {
background-color: #356899;
}
&.tjbg {
background-color: #409eff;
}
}
}
}
</style>