|
|
@ -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) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
|
|
|
|
|
|
|
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>
|