生产任务派工单

dev
qiuhongwu 4 months ago
parent fb2e2d0d97
commit 1ef02caa7c

@ -64,3 +64,16 @@ export async function operateTaskDispatch(data: TaskDispatchVO) {
export const getTaskDispatchDetailPage = async (params) => {
return await request.get({ url: `/biz/task-dispatch/task-dispatch-detail/page`, params })
}
//========================派工单新增2个接口①批量保存/提交派工单明细
export const SaveSubmissionWorkOrderDetails = async (data: TaskDispatchVO) => {
return await request.post({ url: `/biz/task-dispatch/update-taskdispach-detail-batch`, data })
}
//==================== ②批量取消派工单明细 /biz/task-dispatch/cancel-taskdispach-detail-batch
export const CancellationWorkOrderDetails = async (data: TaskDispatchVO) => {
return await request.post({ url: `/biz/task-dispatch/update-taskdispach-detail-batch`, data })
}
// 请求参数结构参照:{'dispatchIds':[派工单id1,派工单id2,...],'active':'1','dispatchStatus':2}

@ -0,0 +1,273 @@
<template>
<Dialog v-model="dialogVisible" :title="dialogTitle" style="width:1200px">
<!-- 表格类信息 -->
<el-card class="hl-card-info">
<!-- <template #header>
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">派工明细</span>
</template> -->
<el-row>
<el-col v-if="active != 'detail' && !detailDisabled">
<!-- <el-button type="primary" size="large" @click="onAddItem">线</el-button> -->
<el-button type="primary" size="large" @click="onAddItem"></el-button>
</el-col>
<el-col>
<el-card class="hl-incard">
<el-form ref="subFormRef" :model="formData.taskDispatchDetails" :rules="subFormRules" v-loading="subFormLoading" label-width="0">
<el-table :data="formData.taskDispatchDetails" class="hl-table">
<el-table-column fixed label="序号" align="center" type="index" width="80" />
<el-table-column fixed label="工序名称" align="center" prop="procedureId" width="140">
<template #header> <span class="hl-table_header">*</span>工序名称</template>
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.procedureId`" :rules="subFormRules.procedureId" class="mb-0px!">
<ProcedureSelect :disabled="detailDisabled || row.procedureStatus != 0" v-model="row.procedureId" @update:newValue="(val) => { handleSelectedProcedure(row, val);}" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="工序编号" prop="procedureCode" width="120" />
<el-table-column label="是否需要报工" prop="isReport" width="120">
<template #default="scope">
{{getDictLabel(DICT_TYPE.BIZ_COMMON_IS_OR_NOT, scope.row.isReport)}}
</template>
</el-table-column>
<el-table-column label="顺序号" align="center" prop="sort" width="140">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.sort`" :rules="subFormRules.sort" class="mb-0px!">
<el-input-number min="0" :precision="0" class="!w-240px" :disabled="detailDisabled || row.procedureStatus != 0" v-model="row.sort" placeholder="顺序号" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="负责人" align="center" prop="owner" min-width="240">
<template #header> <span class="hl-table_header">*</span>负责人</template>
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.owner`" :rules="subFormRules.owners" class="mb-0px!">
<!-- <UserSelect v-model="row.owner" :disabled="detailDisabled || row.procedureStatus != 0" @update:newValue="handleSelectedUser($index,$event)" /> -->
<el-input class="!w-265px" placeholder="负责人" v-model="row.ownerNames" readonly @click.prevent="handleClick($index)">
<template #append><el-button :icon="Search" @click="openuserDialog($index)" /></template>
</el-input>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="生产设备" min-width="180" align="center">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.deviceModel`" :rules="subFormRules.deviceModel" class="mb-0px!">
<EquipmentSelect v-model="row.deviceModel" @update:newValue="handleSelectedequip($index, $event)" :anotherProp="formData.workshopId" :disabled="detailDisabled || row.procedureStatus != 0" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="预计开始日期" min-width="180">
<template #header> <span class="hl-table_header">*</span>预计开始日期</template>
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.startTime`" :rules="subFormRules.startTime" class="mb-0px!">
<el-date-picker :disabled="detailDisabled" v-model="row.startTime" type="date" value-format="x" placeholder="选择预计开始日期" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="预计结束日期" min-width="180">
<template #header> <span class="hl-table_header">*</span>预计结束日期</template>
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.endTime`" :rules="subFormRules.endTime" class="mb-0px!">
<el-date-picker :disabled="detailDisabled" v-model="row.endTime" type="date" value-format="x" placeholder="选择预计结束日期" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="预计工时" align="center" prop="workTime" width="180">
<template #header> <span class="hl-table_header">*</span>预计工时</template>
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.workTime`" :rules="subFormRules.workTime" class="mb-0px!">
<el-input-number min="0" :precision="2" class="!w-240px" :disabled="detailDisabled" v-model="row.workTime" placeholder="请输入预计工时" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="派工数量" align="center" prop="amount" width="180">
<template #header> <span class="hl-table_header">*</span>派工数量</template>
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.amount`" :rules="subFormRules.amount" class="mb-0px!">
<el-input-number min="0" :max="formData.amount" :precision="0" class="!w-240px" :disabled="detailDisabled" v-model="row.amount" placeholder="请输入派工数量" />
</el-form-item>
</template>
</el-table-column>
<!-- <el-table-column label="单位" align="center" prop="unit" width="120">
<template #default>
{{getDictLabel(DICT_TYPE.BIZ_MATERIAL_UNIT, formData.unit)}}
</template>
</el-table-column> -->
<el-table-column label="工序要点" prop="summary" min-width="160">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.summary`" class="mb-0px!">
<el-input :disabled="detailDisabled || row.procedureStatus != 0" v-model="row.summary" placeholder="请输入工序要点" />
</el-form-item>
</template>
</el-table-column>
<el-table-column fixed="right" label="操作" align="center" min-width="100">
<template #default="scope">
<el-button v-if="'detail' != active && scope.row.procedureStatus == 0" link type="danger" size="small" @click.prevent="onDeleteItem(scope.$index)">
删除
</el-button>
</template>
</el-table-column>
</el-table>
</el-form>
</el-card>
</el-col>
</el-row>
</el-card>
<template #footer>
<el-button type="primary" @click="submitForm('SAVE')"> </el-button>
<el-button type="success" @click="submitForm('SUBMIT')"> </el-button>
</template>
</Dialog>
<UserDialog ref="userDialogref" @success="handleuserClick" />
</template>
<script lang="ts" setup>
import { getIntDictOptions, getStrDictOptions, DICT_TYPE, getDictLabel } from '@/utils/dict'
import * as TaskDispatchApi from '@/api/biz/taskdispatch'
import { CommonStatusEnum } from '@/utils/constants'
import { FormRules } from 'element-plus'
import ProcedureSelect from '@/views/biz/hlvuestyle/procedureSelect.vue'
import UserSelect from '@/views/biz/hlvuestyle/userSelect.vue'
import EquipSelect from '@/views/biz/hlvuestyle/equipSelect.vue'
import EquipmentSelect from '@/views/biz/hlvuestyle/equipmentSelect.vue'
import UserDialog from './userselect.vue'
import { Search } from '@element-plus/icons-vue'
defineOptions({ name: 'SystemDeptForm' })
const { t } = useI18n() //
const message = useMessage() //
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
const formData = ref({
dispatchIds:[],
active:undefined,
dispatchStatus:1,
taskDispatchDetails:[
// {'procedureId':id,'sort':1,'owner':id,'deviceModel':id,'workTime':2.5,'startTime':'2024-06-12','endTime':'2024-06-12','amount':100,'summary':'','procedure_status':0,'status':1}
]
})
const subFormRef = ref() // Ref
const deptTree = ref() //
const subFormRules = reactive({
procedureId: [{ required: true, message: '工序不能为空', trigger: 'blur' }],
owner: [{ required: true, message: '负责人不能为空', trigger: 'blur' }],
workTime: [{ required: true, message: '预计工时不能为空', trigger: 'blur' }],
amount: [{ required: true, message: '派工数量不能为空', trigger: 'blur' }],
startTime: [{ required: true, message: '预计开始日期不能为空', trigger: 'blur' }],
endTime: [{ required: true, message: '预计结束日期不能为空', trigger: 'blur' }]
})
/** 打开弹窗 */
const open = async (id: []) => {
resetForm()
console.log(id);
formData.value.dispatchIds=id
dialogVisible.value = true
dialogTitle.value = t('生产派工')
}
defineExpose({ open }) // open
/** 提交表单 */
const emit = defineEmits(['success']) // success
const submitForm = async (operate) => {
formData.value.active = operate
if(operate=='SAVE'){
formData.value.dispatchStatus=1
}else if(operate=='SUBMIT'){
formData.value.dispatchStatus=2
}
//
await subFormRef.value.validate()
//
formLoading.value = true
try {
const data = formData.value as unknown as TaskDispatchApi.TaskDispatchVO
// console.log(data);
await TaskDispatchApi.SaveSubmissionWorkOrderDetails(data)
// message.success(t('common.operationSuccess'))
//
emit('success')
} finally {
formLoading.value = false
}
}
/** 重置表单 */
const resetForm = () => {
formData.value = {
dispatchIds:[],
active:undefined,
dispatchStatus:1,
taskDispatchDetails:[]
}
subFormRef.value?.resetFields()
}
/** 新增按钮操作 */
const onAddItem = () => {
const row = {
id: undefined,
procedureId: undefined,
sort: undefined,
owner: undefined,
workTime: undefined,
amount: undefined,
summary: undefined,
status: 1,
procedureStatus: 0,
}
formData.value.taskDispatchDetails.push(row)
}
/** 删除子项操作 */
const onDeleteItem = async (index) => {
formData.value.taskDispatchDetails.splice(index, 1)
}
//
const handleClick = (index) => {
openuserDialog(index)
}
const userDialogref=ref()
const openuserDialog = (index) => {
userDialogref.value.open(index)
}
const ownerIds =ref([])
const ownerNames =ref([])
const handleuserClick=(val,index)=>{
val?.filter(item=>{
ownerIds.value.push(item.id)
ownerNames.value.push(item.nickname)
})
formData.value.taskDispatchDetails[index].owners=ownerIds?.value
formData.value.taskDispatchDetails[index].ownerNames=ownerNames?.value
// console.log(formData.value.taskDispatchDetails[index].owners);
// console.log(formData.value.taskDispatchDetails[index].ownerNames);
}
const handleSelectedProcedure = async (row: any, newValue: any) => {
if (newValue) {
row.procedureId = newValue.id
row.procedureCode = newValue.code
row.isReport = newValue.isReport
} else {
row.procedureId = undefined
row.procedureCode = undefined
row.isReport = undefined
}
}
const handleSelectedUser = (currentIndex, newValue: any) => {
formData.value.taskDispatchDetails[currentIndex].owner = newValue?.id
}
const handleSelectedequip = (currentIndex: number, newValue: any) => {
formData.value.taskDispatchDetails[currentIndex].deviceModel = newValue?.id
}
</script>

@ -62,7 +62,12 @@
</el-form-item>
<!-- 新增生产车间 -->
<el-form-item label="生产车间" prop="workshopId">
<WorkshopSelect v-model="queryParams.workshopId" class="!w-240px" @update:newValue="handleSelectedWorkshop" @keyup.enter="handleQuery"/>
<WorkshopSelect
v-model="queryParams.workshopId"
class="!w-240px"
@update:newValue="handleSelectedWorkshop"
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="任务负责人" prop="ownerName">
@ -96,13 +101,24 @@
<el-button @click="resetQuery">
<Icon icon="ep:refresh" class="mr-5px" /> 重置
</el-button>
<el-button @click="openDispatching"> </el-button>
<el-button @click="outDispatching"> </el-button>
</el-form-item>
</el-form>
</ContentWrap>
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" class="hl-table">
<el-table
v-loading="loading"
:data="list"
:stripe="true"
class="hl-table"
@selection-change="handleSelectionChange"
@row-click="clickRow"
ref="multipleTable"
>
<el-table-column fixed type="selection" width="40" />
<el-table-column fixed type="index" min-width="70" label="序号" align="center" />
<el-table-column fixed label="生产派工单号" align="center" prop="code" min-width="170">
<template #default="scope">
@ -114,7 +130,13 @@
<!-- 新增产品编码 -->
<el-table-column label="产品编码" align="center" prop="projectSubCode" min-width="140" />
<!-- 项目名称修改为产品名称 -->
<el-table-column label="产品名称" fixed align="center" prop="projectSubName" min-width="240" />
<el-table-column
label="产品名称"
fixed
align="center"
prop="projectSubName"
min-width="240"
/>
<el-table-column label="规格型号" fixed align="center" prop="spec" min-width="160" />
<el-table-column label="数量" fixed align="center" prop="amount" min-width="90" />
<el-table-column label="单位" align="center" prop="unit" min-width="80">
@ -124,13 +146,7 @@
</el-table-column>
<!-- 生产任务单号修改为生产计划单号 -->
<el-table-column
label="生产计划单号"
align="center"
prop="planCode"
min-width="180"
/>
<el-table-column label="生产计划单号" align="center" prop="planCode" min-width="180" />
<!-- 项目编号修改为生产订单号 -->
<el-table-column label="生产订单号" align="center" prop="projectCode" min-width="220" />
<el-table-column label="客户名称" align="center" prop="customerName" min-width="240" />
@ -145,12 +161,7 @@
min-width="210"
/>
<el-table-column label="备注" align="center" prop="remark" min-width="160" />
<el-table-column
label="任务负责人"
align="center"
prop="ownerName"
min-width="120"
/>
<el-table-column label="任务负责人" align="center" prop="ownerName" min-width="120" />
<!-- 要求完成时间修改为预计完成日期 -->
<el-table-column
fixed="right"
@ -188,7 +199,8 @@
<el-button link type="success" @click="handlePrint(scope.row)">
打印包装条码
</el-button>
<select v-if="selectedRow === scope.row.code"
<select
v-if="selectedRow === scope.row.code"
style="position: absolute; right: 0; width: 100px !important"
@change="handleChangeRange(scope.row.code)"
v-model="rangeval"
@ -210,6 +222,7 @@
</ContentWrap>
</el-card>
<ProductProcessPrint ref="printref" />
<Dispatchdialog ref="Dispatchingref" @success="getList" />
</template>
<script setup lang="ts">
@ -220,9 +233,10 @@ import * as TaskDispatchApi from '@/api/biz/taskdispatch'
import { useCommonStore } from '@/store/modules/common'
import { useUserStore } from '@/store/modules/user'
import ProductProcessPrint from './ProductProcessPrint.vue'
import Dispatchdialog from './Dispatchdialog.vue'
import { ElTable } from 'element-plus'
import WorkshopSelect from '@/views/biz/hlvuestyle/workshopSelect.vue'
import { ElMessage, ElMessageBox } from 'element-plus'
defineOptions({ name: 'TaskDispatch' })
const message = useMessage() //
@ -280,12 +294,81 @@ const resetQuery = () => {
handleQuery()
}
//
const selectedRow = ref<string | null>(null); //
//
const multipleTable = ref<InstanceType<typeof ElTable>>()
const multipleSelection = ref([])
const handleSelectionChange = (val: []) => {
multipleSelection.value = val
}
const clickRow = (row: any) => {
if (row) {
multipleTable.value!.toggleRowSelection(row, undefined)
} else {
multipleTable.value!.clearSelection()
}
}
const Dispatchingref = ref()
const fuid = ref([])
const openDispatching = () => {
if (multipleSelection.value.length === 0) {
message.warning('请至少选择一条数据')
return
}
fuid.value = []
multipleSelection.value.filter((item) => {
fuid.value.push(item.id)
})
// console.log(fuid.value);
Dispatchingref.value.open(fuid.value)
}
const formData = ref({
dispatchIds: [],
active: 'SAVE',
dispatchStatus: 1
})
//
const outDispatching = () => {
if (multipleSelection.value.length === 0) {
message.warning('请至少选择一条数据')
return
}
ElMessageBox.confirm('是否批量取消派工?', '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning'
})
.then(async () => {
formData.value.dispatchIds = []
multipleSelection.value.filter((item) => {
formData.value.dispatchIds.push(item.id)
})
const data = formData.value as unknown as TaskDispatchApi.TaskDispatchVO
console.log(data)
await TaskDispatchApi.CancellationWorkOrderDetails(data)
ElMessage({
type: 'success',
message: 'Delete completed'
})
})
.catch(() => {
// ElMessage({
// type: 'info',
// message: '',
// })
})
}
//
const selectedRow = ref<string | null>(null) //
const ranges = ref([])
const printref = ref<ProductProcessPrint>()
const handlePrint = (val) => {
selectedRow.value = val.code;
selectedRow.value = val.code
let start = 1
ranges.value = []
while (start <= val.amount) {
@ -298,8 +381,7 @@ const handlePrint = (val) => {
const rangeval = ref()
const handleChangeRange = (code) => {
printref.value.open(code, rangeval.value)
selectedRow.value = null;
selectedRow.value = null
}
/** 添加/修改操作 */
@ -337,7 +419,7 @@ const handleExport = async () => {
}
const openDetail = (type: string, id?: number) => {
selectedRow.value = null;
selectedRow.value = null
commonStore.setStore('active', type)
commonStore.setStore('id', id)
commonStore.setStore('dispatchType', dispatchType)
@ -354,7 +436,7 @@ const handleSelectedWorkshop = (newValue: any) => {
}
/** 初始化 **/
onMounted(() => {
selectedRow.value = null;
selectedRow.value = null
getList()
})
</script>

Loading…
Cancel
Save