数量相等自动生产完成 app及pc 功能

dev
qiuhongwu 4 months ago
parent 275f7f86f1
commit bed048e3cc

@ -54,7 +54,7 @@ export const gettaskreport = async (params) => {
return await request.get({ url: `/biz/task-report/page`, params }) return await request.get({ url: `/biz/task-report/page`, params })
} }
// 获得派工工序报工分页接口 // 新增派工工序报工分页接口
export const createtaskreport = async (data) => { export const createtaskreport = async (data) => {
return await request.post({ url: `/biz/task-report/create-batch`, data }) return await request.post({ url: `/biz/task-report/create-batch`, data })
} }

@ -1,5 +1,5 @@
<template> <template>
<Dialog :title="dialogTitle" v-model="dialogVisible" width="1000px"> <Dialog :title="dialogTitle" v-model="dialogVisible" width="900px">
<el-form <el-form
ref="formRef" ref="formRef"
:model="formData" :model="formData"
@ -45,9 +45,9 @@
label-width="0" label-width="0"
> >
<el-table :data="list" class="hl-table"> <el-table :data="list" class="hl-table">
<el-table-column fixed label="序号" align="center" type="index" width="70" /> <el-table-column fixed label="序号" align="center" type="index" min-width="70" />
<el-table-column label="开始生产时间" align="center" min-width="170"> <el-table-column label="开始生产时间" align="center" width="160">
<template #header> <span style="color: red">*</span>开始生产时间 </template> <template #header> <span style="color: red">*</span>开始生产时间 </template>
<template #default="{ row }"> <template #default="{ row }">
@ -63,7 +63,7 @@
</el-form-item> </el-form-item>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="结束生产时间" align="center" min-width="165"> <el-table-column label="结束生产时间" align="center" width="160">
<template #header> <span style="color: red">*</span>结束生产时间 </template> <template #header> <span style="color: red">*</span>结束生产时间 </template>
<template #default="{ row }"> <template #default="{ row }">
@ -79,7 +79,7 @@
</el-form-item> </el-form-item>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="本次报工工时" align="center" prop="workTime" width="160"> <el-table-column label="本次报工工时" align="center" prop="workTime" width="210">
<template #header> <span style="color: red">*</span>本次报工工时 </template> <template #header> <span style="color: red">*</span>本次报工工时 </template>
<template #default="{ row, $index }"> <template #default="{ row, $index }">
<el-form-item <el-form-item
@ -98,7 +98,7 @@
</el-form-item> </el-form-item>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="本次报工数量" align="center" prop="amount" width="180"> <el-table-column label="本次报工数量" align="center" prop="amount" width="210">
<template #header> <span style="color: red">*</span>本次报工数量 </template> <template #header> <span style="color: red">*</span>本次报工数量 </template>
<template #default="{ row, $index }"> <template #default="{ row, $index }">
<el-form-item <el-form-item
@ -119,7 +119,7 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column fixed="right" label="操作" align="center" min-width="220"> <!-- <el-table-column fixed="right" label="操作" align="center" min-width="220">
<template #default="scope"> <template #default="scope">
<el-button <el-button
:disabled="scope.row.startTime !== undefined" :disabled="scope.row.startTime !== undefined"
@ -140,7 +140,7 @@
结束生产 结束生产
</el-button> </el-button>
</template> </template>
</el-table-column> </el-table-column> -->
</el-table> </el-table>
</el-form> </el-form>
</el-card> </el-card>
@ -150,12 +150,8 @@
<template #footer> <template #footer>
<el-button @click="dialogVisible = false"> </el-button> <el-button @click="dialogVisible = false"> </el-button>
<el-button @click="submitForm(1)" type="primary" :disabled="formLoading" <el-button @click="submitForm(1)" type="primary" :disabled="formLoading"> </el-button>
> </el-button <el-button @click="submitForms(2)" type="primary" :disabled="formLoading">生产完成</el-button>
>
<el-button @click="submitForm(2)" type="primary" :disabled="formLoading"
>生产完成</el-button
>
</template> </template>
</Dialog> </Dialog>
</template> </template>
@ -166,6 +162,7 @@ import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
import { getWorkshopPage } from '@/api/biz/workshop' import { getWorkshopPage } from '@/api/biz/workshop'
import { any } from 'vue-types' import { any } from 'vue-types'
import { get } from '@vueuse/core'
const { t } = useI18n() // const { t } = useI18n() //
const message = useMessage() // const message = useMessage() //
const list = ref([{}]) // const list = ref([{}]) //
@ -179,7 +176,8 @@ const formData = ref({
totalReportAmount: undefined, totalReportAmount: undefined,
totalWorkTime: undefined, totalWorkTime: undefined,
amount: undefined, amount: undefined,
workTime: undefined workTime: undefined,
overTask: undefined
}) })
const subFormRules = reactive({ const subFormRules = reactive({
startTime: [{ required: true, message: '开始生产时间不能为空', trigger: 'blur' }], startTime: [{ required: true, message: '开始生产时间不能为空', trigger: 'blur' }],
@ -194,29 +192,55 @@ const queryParams = reactive({
pageSize: 99, pageSize: 99,
dispatchDetailId: undefined dispatchDetailId: undefined
}) })
const queryParamsd = reactive({
pageNo: 1,
pageSize: 10,
dispatchCode: undefined,
projectCode: undefined,
materialNameOrCode: undefined,
spec: undefined,
workshopId: undefined,
procedureName: undefined,
ownerName: undefined
})
/** 打开弹窗 */ /** 打开弹窗 */
const open = async (id?: number, val?: any) => { const open = async (id?: number, val?: any) => {
resetForm() resetForm()
queryParams.dispatchDetailId = id queryParams.dispatchDetailId = id
// console.log(id, val) // console.log(id, val)
formData.value = val // formData.value=val
queryParamsd.dispatchCode = val.dispatchCode
queryParamsd.procedureName = val.procedureName
queryParamsd.ownerName = val.ownerName
dialogVisible.value = true dialogVisible.value = true
dialogTitle.value = '新增报工' dialogTitle.value = '新增报工'
// //
formLoading.value = true formLoading.value = true
try { try {
if (id) { if (id) {
const data = await TaskReportApi.gettaskreport(queryParams) getDatalist()
// console.log(data);
list.value = data.list
total.value = data.total
} }
} finally { } finally {
formLoading.value = false formLoading.value = false
} }
} }
defineExpose({ open }) // open defineExpose({ open }) // open
const getDatalist = async () => {
//
const datas = await TaskReportApi.gettaskreport(queryParams)
list.value = datas.list
total.value = datas.total
//
const data = await TaskReportApi.getTaskDispatchProcedureDetailPages(queryParamsd)
formData.value = data.list[0]
//
if (formData.value.overTask == 0 && formData.value.amount == formData.value.totalReportAmount) {
submitForms(2)
}
}
/** 提交表单 */ /** 提交表单 */
const emit = defineEmits(['success']) // success const emit = defineEmits(['success']) // success
@ -224,79 +248,77 @@ const submitForm = async (val) => {
// //
await subFormRef.value.validate() await subFormRef.value.validate()
// //
if(list.value.length==0){ if (list.value.length == 0) {
message.warning(t('至少有一条报工')) message.warning(t('至少有一条报工'))
return return
} }
const totalAmount = ref(0);
if(list.value.length > 0&&formData.value.overTask==0){
list.value.forEach((item) => {
totalAmount.value += item.amount;
})
totalAmount.value> formData.value.totalReportAmount
message.warning(t('该车间不允许超额报工!'))
return
}
formLoading.value = true formLoading.value = true
try { try {
list.value.forEach(item => { list.value.forEach((item) => {
item.procedureStatus=val item.procedureStatus = val
item.reportTime=Date.now() item.reportTime = Date.now()
}) })
// console.log(list.value);
const data = list.value const data = list.value
await TaskReportApi.createtaskreport(data) await TaskReportApi.createtaskreport(data)
getDatalist()
message.success(t('操作成功')) message.success(t('操作成功'))
} finally {
formLoading.value = false
}
}
const submitForms = async (val) => {
//
await subFormRef.value.validate()
//
if (list.value.length == 0) {
message.warning(t('至少有一条报工'))
return
}
formLoading.value = true
try {
list.value.forEach((item) => {
item.procedureStatus = val
item.reportTime = Date.now()
})
const data = list.value
await TaskReportApi.createtaskreport(data)
message.success(t('生产完成'))
dialogVisible.value = false dialogVisible.value = false
//
emit('success') emit('success')
} finally { } finally {
formLoading.value = false formLoading.value = false
} }
} }
//
const onAddItem = ref(() => { const onAddItem = ref(() => {
const row = { const row = {
id:0, id: 0,
dispatchDetailId: undefined, dispatchDetailId: undefined,
procedureStatus: undefined, procedureStatus: undefined,
startTime: undefined, startTime: Date.now(),
endTime: undefined, endTime: Date.now(),
amount: undefined, amount: undefined,
workTime: undefined, workTime: undefined,
owner:undefined, owner: undefined,
hasReport:1, hasReport: 1,
status:1, status: 1,
reportTime:undefined, reportTime: undefined,
type:'PRODUCTION', type: 'PRODUCTION'
} }
row.dispatchDetailId = formData.value.id row.dispatchDetailId = formData.value.id
row.owner = formData.value.owner row.owner = formData.value.owner
list.value.push(row) list.value.push(row)
}) })
const setStartTime = (index: number) => {
if (index >= 0 && index < list.value.length) {
// yyyy-MM-dd HH:mm
const currentTime = Date.now() // "YYYY-MM-DD HH:mm"
//
list.value[index].startTime = currentTime
}
}
const setEndTime = (index: number) => {
if (index >= 0 && index < list.value.length) {
// yyyy-MM-dd HH:mm
const currentTime = Date.now() // "YYYY-MM-DD HH:mm"
//
list.value[index].endTime = currentTime
}
//
if (list.value[index].startTime) {
//
const timeDiff = list.value[index].endTime - list.value[index].startTime
//
const workHours = timeDiff / (1000 * 60 * 60) //
//
list.value[index].workTime = workHours.toFixed(2) //
} else {
console.warn('startTimeStr 未定义,请确保开始生产时间已设置')
}
}
/** 重置表单 */ /** 重置表单 */
const resetForm = () => { const resetForm = () => {
formData.value = { formData.value = {
@ -304,7 +326,8 @@ const resetForm = () => {
totalReportAmount: undefined, totalReportAmount: undefined,
totalWorkTime: undefined, totalWorkTime: undefined,
amount: undefined, amount: undefined,
workTime: undefined workTime: undefined,
overTask: undefined
} }
subFormRef.value?.resetFields() subFormRef.value?.resetFields()
} }

@ -62,7 +62,7 @@ const getData = async () => {
formObj.value = data.list[0] formObj.value = data.list[0]
const time = formObj.value.endTime - formObj.value.startTime // const time = formObj.value.endTime - formObj.value.startTime //
const leave1 = time % (24 * 3600 * 1000) // const leave1 = time % (24 * 3600 * 1000) //
workTime.value = Math.floor(leave1 / (3600 * 1000)) // workTime.value = Math.floor(leave1 / (3600 * 1000))
} }
historyList.value = data.list historyList.value = data.list
isLoading.value = false isLoading.value = false
@ -128,6 +128,15 @@ const handleOk = async (active) => {
if (isLoading.value) { if (isLoading.value) {
return return
} }
if (amount.value == '' || workTime.value == '') {
// console.log('');
uni.showToast({
title: '请输入数量和工时',
icon: 'error',
duration: 2000
})
return
}
isLoading.value = true isLoading.value = true
const params = { const params = {
@ -139,7 +148,7 @@ const handleOk = async (active) => {
try { try {
const data = await postOperateAPI(params) const data = await postOperateAPI(params)
const datadetail:any =await getTaskDetailAPI(params) const datadetail: any = await getTaskDetailAPI(params)
isLoading.value = false isLoading.value = false
// console.log(datadetail.overTask, datadetail.amount,datadetail.totalReportAmount) // console.log(datadetail.overTask, datadetail.amount,datadetail.totalReportAmount)
if (datadetail.overTask == 0 && datadetail.amount == datadetail.totalReportAmount) { if (datadetail.overTask == 0 && datadetail.amount == datadetail.totalReportAmount) {
@ -174,34 +183,42 @@ const handleStart = async () => {
return return
} }
isLoading.value = true isLoading.value = true
const params = {
id: detailInfo.value.id, // isLoading.value = false
active: 'START' // const url = `/pages/productionReport/productionReport-detail?id=${detailInfo.value.id}`
} // uni.redirectTo({
const data = await postOperateAPI(params) // url
isLoading.value = false // })
const url = `/pages/productionReport/productionReport-detail?id=${detailInfo.value.id}`
uni.redirectTo({
url
})
} }
// //
const handleStop = async () => { const handleStop = async () => {
if (isLoading.value) { if (isLoading.value) {
return return
} }
isLoading.value = true if (isShowStart.value) {
const params = { const STARTparams = {
id: detailInfo.value?.id, id: detailInfo.value.id,
active: 'END' active: 'START'
}
const data = await postOperateAPI(STARTparams)
} }
const data = await postOperateAPI(params)
isLoading.value = false // handleStart()
const url = `/pages/productionReport/productionReport-detail?id=${detailInfo.value.id}` //
uni.redirectTo({ setTimeout(async () => {
url // isLoading.value = true
}) const params = {
popup.value?.open() id: detailInfo.value?.id,
active: 'END'
}
const data = await postOperateAPI(params)
// isLoading.value = false
const url = `/pages/productionReport/productionReport-detail?id=${detailInfo.value.id}`
uni.redirectTo({
url
})
}, 1000)
// popup.value?.open()
} }
</script> </script>
<template> <template>
@ -277,8 +294,8 @@ const handleStop = async () => {
</view> </view>
</view> </view>
<view class="action" v-if="detailInfo.procedureStatus !== 2"> <view class="action" v-if="detailInfo.procedureStatus !== 2">
<view class="action-item start" v-if="isShowStart" @click="handleStart"></view> <!-- <view class="action-item start" v-if="isShowStart" @click="handleStart"></view> -->
<view class="action-item stop" v-if="isShowEnd" @click="handleStop"></view> <view class="action-item stop" @click="handleStop"></view>
</view> </view>
</template> </template>
<view class="loading-text" v-else>..</view> <view class="loading-text" v-else>..</view>

Loading…
Cancel
Save