9 changed files with 1355 additions and 502 deletions
@ -0,0 +1,334 @@ |
|||
<template> |
|||
<!-- 详情 --> |
|||
<view class="detail-container"> |
|||
<view class="info"> |
|||
<view class="title"> |
|||
<view>当前工序:{{saveData.processCode}}</view> |
|||
</view> |
|||
<!-- 主数据 --> |
|||
<view class="dec"> |
|||
<view class="dec-item"> |
|||
<view>生产人员:</view> |
|||
<view><u-input v-model="saveData.personSelectedItem" type="select" @click="showWorker = true" placeholder="请选择生产人员"/></view> |
|||
</view> |
|||
<view class="dec-item"> |
|||
<view>质检人员:</view> |
|||
<view><u-input v-model="saveData.checkPerson" type="text" placeholder="请输入质检人员"/></view> |
|||
</view> |
|||
<view class="dec-item"> |
|||
<view>合格数量:</view> |
|||
<view><u-input v-model="saveData.qualified" type="number" placeholder="请输入合格数量" /></view> |
|||
</view> |
|||
<view class="dec-item"> |
|||
<view>不合格数量:</view> |
|||
<view><u-input v-model="saveData.unqualified" type="number" placeholder="请输入不合格数量" /></view> |
|||
</view> |
|||
<view class="dec-item"> |
|||
<view>不合格原因:</view> |
|||
<view><u-input v-model="saveData.remark" type="text" placeholder="请输入原因" /></view> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
<view class="footer"> |
|||
<view class="btns"> |
|||
<button class="sure" @click="handleSubmit" :loading='loading' :disabled='loading'>提交处理</button> |
|||
</view> |
|||
<view style="height: constant(safe-area-inset-bottom); height: env(safe-area-inset-bottom);"></view> |
|||
</view> |
|||
<view style="height: constant(safe-area-inset-bottom); height: env(safe-area-inset-bottom);"></view> |
|||
</view> |
|||
<u-popup v-model="showWorker" mode="bottom" border-radius="14" length="30%"> |
|||
<view> |
|||
<u-select v-model="showWorker" mode="mutil-column-auto" :list="workerList" @confirm="confirmSelectWorker"></u-select> |
|||
</view> |
|||
</u-popup> |
|||
<u-popup v-model="showType" mode="bottom" border-radius="14" length="30%"> |
|||
<view> |
|||
<u-select v-model="showType" :list="typeList" @confirm="confirmSelectType"></u-select> |
|||
</view> |
|||
</u-popup> |
|||
</template> |
|||
|
|||
<script setup lang="ts"> |
|||
import { |
|||
onLoad, |
|||
onShow |
|||
} from '@dcloudio/uni-app' |
|||
import { |
|||
ref, |
|||
getCurrentInstance |
|||
} from 'vue' |
|||
import * as workSchedulingListApi from '@/api/mes/workScheduling/index.ts' |
|||
const { proxy } = getCurrentInstance() |
|||
const paramData = ref() |
|||
const showWorker = ref(false) |
|||
const showType = ref(false) |
|||
const workerList = ref([]) |
|||
const typeList = ref([{label:'是',value: '1'},{label:'否',value: '2'}]) |
|||
const nodeInfo = ref({ |
|||
planDayCode:'PO20240430-0011', |
|||
processCode:'QD_CY_01' |
|||
}) |
|||
const saveData = ref({ |
|||
id:'0', |
|||
planDayCode:'', |
|||
processCode:'', |
|||
qualified:'', |
|||
unqualified:'', |
|||
personSelected:[], |
|||
personSelectedItem:'', |
|||
remark:"", |
|||
checkPerson:"" |
|||
}) |
|||
|
|||
//提交接口 |
|||
function submitData(){ |
|||
proxy.$modal.loading('加载中') |
|||
console.log(saveData.value) |
|||
workSchedulingListApi.qualityByProcess(saveData.value).then((res) => { |
|||
proxy.$modal.closeLoading() |
|||
if (res.data) { |
|||
proxy.$modal.showToast('成功') |
|||
setTimeout(() => { |
|||
proxy.$tab.navigateBack() |
|||
}, 1000) |
|||
} else { |
|||
proxy.$modal.showToast('失败') |
|||
} |
|||
}).catch(() => { |
|||
proxy.$modal.closeLoading() |
|||
}) |
|||
} |
|||
|
|||
// 选择人员回调函数 |
|||
function confirmSelectWorker(val){ |
|||
if(!saveData.value.personSelected.includes(val[0].value)){ |
|||
saveData.value.personSelected.push(val[0].value) |
|||
if(saveData.value.personSelectedItem == ''){ |
|||
saveData.value.personSelectedItem = val[0].label |
|||
} |
|||
else{ |
|||
saveData.value.personSelectedItem = saveData.value.personSelectedItem + ',' + val[0].label |
|||
} |
|||
} |
|||
|
|||
} |
|||
|
|||
// 提交处理请求函数 |
|||
function handleSubmit(){ |
|||
proxy.$modal.confirm('确定提交处理吗').then(() => { |
|||
submitData() |
|||
}) |
|||
} |
|||
onLoad((option) => { |
|||
if (option.obj) { |
|||
paramData.value = JSON.parse(decodeURIComponent(option.obj)); // 将字符串转换为对象并存入paramData |
|||
nodeInfo.value.planDayCode = paramData.value.planNoDay |
|||
nodeInfo.value.processCode = paramData.value.nodeCode |
|||
saveData.value.processCode = paramData.value.nodeCode |
|||
saveData.value.planDayCode = paramData.value.planNoDay |
|||
} |
|||
}) |
|||
onShow(() => { |
|||
getPageChildren() |
|||
}) |
|||
// 获取选择人员函数 |
|||
function getPageChildren(){ |
|||
workSchedulingListApi.getWorkerList(nodeInfo.value).then((res) => { |
|||
if (res.data) { |
|||
workerList.value = transList(res.data) |
|||
} else { |
|||
} |
|||
}).catch(() => { |
|||
}) |
|||
} |
|||
//数据转换 |
|||
function transList(data) { |
|||
console.log(data) |
|||
const list = data.map(item => { |
|||
return { |
|||
"label": item.workerName, |
|||
"value": item.workerCode |
|||
}; |
|||
}); |
|||
return list; |
|||
} |
|||
|
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.detail-container { |
|||
min-height: 100vh; |
|||
background: white; |
|||
} |
|||
|
|||
.line { |
|||
background: #f5f5f5; |
|||
height: 20rpx; |
|||
} |
|||
|
|||
.info { |
|||
background: white; |
|||
} |
|||
|
|||
|
|||
.tab { |
|||
border-bottom: 1px solid #e4e4e4; |
|||
|
|||
} |
|||
|
|||
.title { |
|||
display: flex; |
|||
align-items: center; |
|||
padding: 20rpx 30rpx; |
|||
border-bottom: 1px solid #e4e4e4; |
|||
|
|||
view { |
|||
&:nth-child(1) { |
|||
flex: 1; |
|||
border-left: 10rpx solid #409eff; |
|||
padding-left: 20rpx; |
|||
font-weight: bold; |
|||
} |
|||
} |
|||
} |
|||
|
|||
.dec { |
|||
padding: 30rpx; |
|||
|
|||
.dec-item { |
|||
padding-bottom: 30rpx; |
|||
display: flex; |
|||
|
|||
view { |
|||
&:nth-child(1) { |
|||
width: 180rpx; |
|||
} |
|||
|
|||
&:nth-child(2) { |
|||
color: #888888; |
|||
flex: 1; |
|||
width: 0px; |
|||
word-wrap: break-word; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
.dec2 { |
|||
padding: 10rpx 30rpx; |
|||
display: flex; |
|||
|
|||
view { |
|||
&:nth-child(1) { |
|||
width: 180rpx; |
|||
} |
|||
|
|||
&:nth-child(2) { |
|||
color: #888888; |
|||
flex: 1; |
|||
width: 0px; |
|||
word-wrap: break-word; |
|||
} |
|||
} |
|||
|
|||
|
|||
} |
|||
|
|||
.items { |
|||
border-radius: 12rpx; |
|||
background: #F5F5F5; |
|||
padding-bottom: 20rpx; |
|||
|
|||
.items-name { |
|||
padding: 20rpx; |
|||
border-bottom: 1px solid #dedede; |
|||
} |
|||
|
|||
.items-dec { |
|||
padding: 0px 20rpx; |
|||
margin-top: 20rpx; |
|||
} |
|||
} |
|||
|
|||
|
|||
.list { |
|||
padding: 20rpx; |
|||
|
|||
.item { |
|||
display: flex; |
|||
margin-bottom: 20rpx; |
|||
|
|||
.item-box { |
|||
border-radius: 12rpx; |
|||
border: 1px solid #dedede; |
|||
border-radius: 12rpx; |
|||
|
|||
flex: 1; |
|||
width: 0rpx; |
|||
} |
|||
|
|||
.spare-title { |
|||
padding: 20rpx 30rpx; |
|||
border-bottom: 1px solid #e4e4e4; |
|||
display: flex; |
|||
|
|||
.title-txt { |
|||
color: #409eff; |
|||
font-size: 30rpx; |
|||
font-weight: bold; |
|||
flex: 1; |
|||
} |
|||
} |
|||
|
|||
.dec { |
|||
color: #9c9c9c; |
|||
padding: 0rpx 30rpx 20rpx; |
|||
} |
|||
|
|||
} |
|||
} |
|||
|
|||
.add-btn { |
|||
display: flex; |
|||
justify-content: flex-start; |
|||
align-items: center; |
|||
} |
|||
|
|||
.footer { |
|||
position: fixed; |
|||
bottom: 0px; |
|||
left: 0px; |
|||
width: 100%; |
|||
z-index: 22; |
|||
} |
|||
|
|||
.btns { |
|||
display: flex; |
|||
|
|||
|
|||
button { |
|||
flex: 1; |
|||
} |
|||
|
|||
.sure { |
|||
background: #409eff; |
|||
color: white; |
|||
border-radius: 0px; |
|||
|
|||
&::after { |
|||
border: 1px solid #409eff; |
|||
border-radius: 0px; |
|||
} |
|||
} |
|||
|
|||
.reset { |
|||
background: #ff7a45; |
|||
border-radius: 0px; |
|||
|
|||
&::after { |
|||
border-radius: 0px; |
|||
} |
|||
} |
|||
} |
|||
</style> |
@ -0,0 +1,384 @@ |
|||
<template> |
|||
<!-- 详情 --> |
|||
<view class="detail-container"> |
|||
<view class="info"> |
|||
<view class="title"> |
|||
<view>当前工序:{{saveData.processCode}}</view> |
|||
</view> |
|||
<!-- 主数据 --> |
|||
<view class="dec"> |
|||
<view class="dec-item"> |
|||
<view>报工人员:</view> |
|||
<view><u-input v-model="formData.reportPersonName" type="select" @click="showWorker = true" placeholder="请选择人员"/></view> |
|||
</view> |
|||
<view class="dec-item"> |
|||
<view>报工数量:</view> |
|||
<view><u-input v-model="formData.reportCount" type="number" @update:modelValue="calculatePass()" placeholder="请输入数量" /></view> |
|||
</view> |
|||
<view class="dec-item"> |
|||
<view>报工工时:</view> |
|||
<view><u-input v-model="formData.workTerm" type="number" placeholder="请输入工时" /></view> |
|||
</view> |
|||
<view class="dec-item"> |
|||
<view>是否质检:</view> |
|||
<view> |
|||
<u-switch v-model="formData.checkFlag" style="width:47px" @change="changeStatus()"></u-switch> |
|||
</view> |
|||
</view> |
|||
<view class="dec-item"> |
|||
<view>合格数量:</view> |
|||
<view><u-input :disabled="!formData.checkFlag" v-model="formData.qualified" type="number" placeholder="请输入合格数量" @update:modelValue="calculatePass()" /></view> |
|||
</view> |
|||
<view class="dec-item"> |
|||
<view>不合格数量:</view> |
|||
<view><u-input v-model="formData.unqualified" type="number" disabled="true"/></view> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
<view class="footer"> |
|||
<view class="btns"> |
|||
<button class="sure" @click="handleSubmit" :loading='loading' :disabled='loading'>提交处理</button> |
|||
</view> |
|||
<view style="height: constant(safe-area-inset-bottom); height: env(safe-area-inset-bottom);"></view> |
|||
</view> |
|||
<view style="height: constant(safe-area-inset-bottom); height: env(safe-area-inset-bottom);"></view> |
|||
</view> |
|||
<u-popup v-model="showWorker" mode="bottom" border-radius="14" length="30%"> |
|||
<view> |
|||
<u-select v-model="showWorker" mode="mutil-column-auto" :list="workerList" @confirm="confirmSelectWorker"></u-select> |
|||
</view> |
|||
</u-popup> |
|||
<u-popup v-model="showType" mode="bottom" border-radius="14" length="30%"> |
|||
<view> |
|||
<u-select v-model="showType" :list="typeList" @confirm="confirmSelectType"></u-select> |
|||
</view> |
|||
</u-popup> |
|||
</template> |
|||
|
|||
<script setup lang="ts"> |
|||
import { |
|||
onLoad, |
|||
onShow |
|||
} from '@dcloudio/uni-app' |
|||
import { |
|||
ref, |
|||
getCurrentInstance |
|||
} from 'vue' |
|||
import * as workSchedulingListApi from '@/api/mes/workScheduling/index.ts' |
|||
const { proxy } = getCurrentInstance() |
|||
const paramData = ref() |
|||
const showWorker = ref(false) |
|||
const showType = ref(false) |
|||
const workerList = ref([]) |
|||
const typeList = ref([{label:'是',value: '1'},{label:'否',value: '2'}]) |
|||
const nodeInfo = ref({ |
|||
planDayCode:'PO20240430-0011', |
|||
processCode:'QD_CY_01' |
|||
}) |
|||
const reportPersonList = ref([]) |
|||
const formData = ref({ |
|||
checkFlag:false, |
|||
reportCount:'', |
|||
qualified:'', |
|||
unqualified:'', |
|||
reportPerson:'', |
|||
reportPersonName:'', |
|||
workTerm:'' |
|||
}) |
|||
const saveData = ref({ |
|||
processCode:'', |
|||
reportDate:'', |
|||
schedulingCode:'', |
|||
list:[] |
|||
}) |
|||
|
|||
function changeStatus(){ |
|||
if(formData.value.checkFlag){ |
|||
} |
|||
else |
|||
{ |
|||
formData.value.qualified = '' |
|||
formData.value.unqualified = '' |
|||
} |
|||
} |
|||
function calculatePass(){ |
|||
if(formData.value.checkFlag){ |
|||
formData.value.unqualified = formData.value.reportCount - formData.value.qualified |
|||
} |
|||
} |
|||
|
|||
//提交接口 |
|||
function submitData(){ |
|||
handleData() |
|||
workSchedulingListApi.reportByProcess(saveData.value).then((res) => { |
|||
proxy.$modal.closeLoading() |
|||
if (res.code == 0) { |
|||
proxy.$modal.showToast('成功') |
|||
setTimeout(() => { |
|||
proxy.$tab.navigateBack() |
|||
}, 1500) |
|||
} else { |
|||
proxy.$modal.showToast('失败') |
|||
} |
|||
}).catch(() => { |
|||
proxy.$modal.closeLoading() |
|||
}) |
|||
} |
|||
|
|||
function handleData(){ |
|||
saveData.value.list = [] |
|||
reportPersonList.value.forEach(person => { |
|||
const save = { |
|||
checkFlag:formData.value.checkFlag, |
|||
reportCount:formData.value.reportCount, |
|||
qualified:formData.value.qualified, |
|||
unqualified:formData.value.unqualified, |
|||
reportPerson:person.reportPerson, |
|||
workTerm:formData.value.workTerm |
|||
} |
|||
saveData.value.list.push(save) |
|||
}); |
|||
// 获取当前日期和时间并格式化 |
|||
const currentDate = new Date(); |
|||
const formattedDate = currentDate.toISOString().split('T')[0]; // YYYY-MM-DD |
|||
const formattedTime = currentDate.toTimeString().split(' ')[0]; // HH:mm:ss |
|||
// 设置 reportDate 为当前日期和时间 |
|||
saveData.value.reportDate = `${formattedDate} ${formattedTime}`; |
|||
console.log(saveData.value) |
|||
} |
|||
|
|||
|
|||
// 选择人员回调函数 |
|||
function confirmSelectWorker(val){ |
|||
const data = { |
|||
reportPerson:val[0].value |
|||
} |
|||
const exists = reportPersonList.value.some(person => person.reportPerson === data.reportPerson); |
|||
if (!exists){ |
|||
reportPersonList.value.push(data); |
|||
if(formData.value.reportPersonName == ''){ |
|||
formData.value.reportPersonName = val[0].label |
|||
}else{ |
|||
formData.value.reportPersonName = formData.value.reportPersonName + ","+ val[0].label |
|||
} |
|||
} |
|||
} |
|||
|
|||
// 提交处理请求函数 |
|||
function handleSubmit(){ |
|||
proxy.$modal.confirm('确定提交处理吗').then(() => { |
|||
submitData() |
|||
}) |
|||
} |
|||
onLoad((option) => { |
|||
if (option.obj) { |
|||
paramData.value = JSON.parse(decodeURIComponent(option.obj)); // 将字符串转换为对象并存入paramData |
|||
nodeInfo.value.planDayCode = paramData.value.planNoDay |
|||
nodeInfo.value.processCode = paramData.value.nodeCode |
|||
saveData.value.processCode = paramData.value.nodeCode |
|||
saveData.value.schedulingCode = paramData.value.schedulingCode |
|||
} |
|||
}) |
|||
onShow(() => { |
|||
getPageChildren() |
|||
}) |
|||
// 获取选择人员函数 |
|||
function getPageChildren(){ |
|||
workSchedulingListApi.getWorkerList(nodeInfo.value).then((res) => { |
|||
if (res.data) { |
|||
workerList.value = transList(res.data) |
|||
} else { |
|||
} |
|||
}).catch(() => { |
|||
}) |
|||
} |
|||
//数据转换 |
|||
function transList(data) { |
|||
console.log(data) |
|||
const list = data.map(item => { |
|||
return { |
|||
"label": item.workerName, |
|||
"value": item.workerCode |
|||
}; |
|||
}); |
|||
return list; |
|||
} |
|||
|
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.detail-container { |
|||
min-height: 100vh; |
|||
background: white; |
|||
} |
|||
|
|||
.line { |
|||
background: #f5f5f5; |
|||
height: 20rpx; |
|||
} |
|||
|
|||
.info { |
|||
background: white; |
|||
} |
|||
|
|||
|
|||
.tab { |
|||
border-bottom: 1px solid #e4e4e4; |
|||
|
|||
} |
|||
|
|||
.title { |
|||
display: flex; |
|||
align-items: center; |
|||
padding: 20rpx 30rpx; |
|||
border-bottom: 1px solid #e4e4e4; |
|||
|
|||
view { |
|||
&:nth-child(1) { |
|||
flex: 1; |
|||
border-left: 10rpx solid #409eff; |
|||
padding-left: 20rpx; |
|||
font-weight: bold; |
|||
} |
|||
} |
|||
} |
|||
|
|||
.dec { |
|||
padding: 30rpx; |
|||
|
|||
.dec-item { |
|||
padding-bottom: 30rpx; |
|||
display: flex; |
|||
|
|||
view { |
|||
&:nth-child(1) { |
|||
width: 180rpx; |
|||
} |
|||
|
|||
&:nth-child(2) { |
|||
color: #888888; |
|||
flex: 1; |
|||
width: 0px; |
|||
word-wrap: break-word; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
.dec2 { |
|||
padding: 10rpx 30rpx; |
|||
display: flex; |
|||
|
|||
view { |
|||
&:nth-child(1) { |
|||
width: 180rpx; |
|||
} |
|||
|
|||
&:nth-child(2) { |
|||
color: #888888; |
|||
flex: 1; |
|||
width: 0px; |
|||
word-wrap: break-word; |
|||
} |
|||
} |
|||
|
|||
|
|||
} |
|||
|
|||
.items { |
|||
border-radius: 12rpx; |
|||
background: #F5F5F5; |
|||
padding-bottom: 20rpx; |
|||
|
|||
.items-name { |
|||
padding: 20rpx; |
|||
border-bottom: 1px solid #dedede; |
|||
} |
|||
|
|||
.items-dec { |
|||
padding: 0px 20rpx; |
|||
margin-top: 20rpx; |
|||
} |
|||
} |
|||
|
|||
|
|||
.list { |
|||
padding: 20rpx; |
|||
|
|||
.item { |
|||
display: flex; |
|||
margin-bottom: 20rpx; |
|||
|
|||
.item-box { |
|||
border-radius: 12rpx; |
|||
border: 1px solid #dedede; |
|||
border-radius: 12rpx; |
|||
|
|||
flex: 1; |
|||
width: 0rpx; |
|||
} |
|||
|
|||
.spare-title { |
|||
padding: 20rpx 30rpx; |
|||
border-bottom: 1px solid #e4e4e4; |
|||
display: flex; |
|||
|
|||
.title-txt { |
|||
color: #409eff; |
|||
font-size: 30rpx; |
|||
font-weight: bold; |
|||
flex: 1; |
|||
} |
|||
} |
|||
|
|||
.dec { |
|||
color: #9c9c9c; |
|||
padding: 0rpx 30rpx 20rpx; |
|||
} |
|||
|
|||
} |
|||
} |
|||
|
|||
.add-btn { |
|||
display: flex; |
|||
justify-content: flex-start; |
|||
align-items: center; |
|||
} |
|||
|
|||
.footer { |
|||
position: fixed; |
|||
bottom: 0px; |
|||
left: 0px; |
|||
width: 100%; |
|||
z-index: 22; |
|||
} |
|||
|
|||
.btns { |
|||
display: flex; |
|||
|
|||
|
|||
button { |
|||
flex: 1; |
|||
} |
|||
|
|||
.sure { |
|||
background: #409eff; |
|||
color: white; |
|||
border-radius: 0px; |
|||
|
|||
&::after { |
|||
border: 1px solid #409eff; |
|||
border-radius: 0px; |
|||
} |
|||
} |
|||
|
|||
.reset { |
|||
background: #ff7a45; |
|||
border-radius: 0px; |
|||
|
|||
&::after { |
|||
border-radius: 0px; |
|||
} |
|||
} |
|||
} |
|||
</style> |
File diff suppressed because it is too large
Loading…
Reference in new issue