| | |
| | | //定义表头数据 |
| | | const titleUploadData = ref({ |
| | | //流程卡号 |
| | | processId: 'NG24030501A01/1', |
| | | processId: 'NG24030501A01/2', |
| | | //销售单号 |
| | | orderId: '', |
| | | //生产单号 |
| | |
| | | //设备类型 |
| | | deviceName: '', |
| | | //班组名称 |
| | | teamsgroupsName: '', |
| | | teamsGroupsName: '', |
| | | //生产日期 |
| | | reportingWorkTime: '', |
| | | //报工工序 |
| | |
| | | }, |
| | | { |
| | | field: 'breakageQuantity', title: '次破数量', |
| | | |
| | | }, |
| | | // {field: 'available', width: 80, title: '可利用', editRender: {name: 'input', attrs: {placeholder: ''}}}, |
| | | // {field: 'returnProcess', width: 100, title: '退回工序', editRender: {name: 'input', attrs: {placeholder: ''}}}, |
| | | // { |
| | | // field: 'reasonType', width: 100, title: '次破类型', |
| | | // editRender: {name: 'input', attrs: {placeholder: '', type: 'selected'}} |
| | | // }, |
| | | // { |
| | | // field: 'reasonDamage', width: 100, title: '次破原因', |
| | | // editRender: {name: 'input', attrs: {placeholder: ''}} |
| | | // }, |
| | | // { |
| | | // field: 'responsibleProcess', width: 100, title: '责任工序', |
| | | // editRender: {}, |
| | | // slots: {default: 'reportingWordSort_default', edit: 'reportingWordSort'} |
| | | // //editRender: {name: 'input', attrs: {placeholder: '',type: 'selected'}}, |
| | | // |
| | | // }, |
| | | // { |
| | | // field: 'responsibleEquipment', |
| | | // width: 100, |
| | | // title: '责任设备', |
| | | // editRender: {}, |
| | | // slots: {default: 'reportingDeviceSort_default', edit: 'reportingDeviceSort'} |
| | | // // editRender: {name: 'input', attrs: {placeholder: ''}} |
| | | // }, |
| | | // |
| | | // { |
| | | // field: 'responsibleTeam', width: 100, title: '责任班组', |
| | | // editRender: {name: 'input', attrs: {placeholder: ''}} |
| | | // }, |
| | | // { |
| | | // field: 'responsibilityPersonnel', |
| | | // width: 100, |
| | | // title: '责任人员', |
| | | // editRender: {name: 'input', attrs: {placeholder: ''}} |
| | | // |
| | | // }, |
| | | {field: 'completed', width: 90, title: '已完工',}, |
| | | {field: 'onceBroken', width: 90, title: '已次破',}, |
| | | |
| | | ], |
| | | //表单验证 |
| | | editRules: {}, |
| | | editRules: { |
| | | completedQuantity: [ |
| | | { |
| | | validator ({ row }) { |
| | | const regex = /^[0-9]\d*$/ |
| | | const brokenNum = |
| | | (row.breakageQuantity === undefined || row.breakageQuantity===null) ? 0 : row.breakageQuantity |
| | | |
| | | if (row.completedQuantity && !regex.test(row.completedQuantity)) { |
| | | return new Error('请输入整数,并且大于-1') |
| | | }else if(row.completedQuantity+brokenNum>row.quantity){ |
| | | return new Error((`${row.completedQuantity}+$(brokenNum)>${row.quantity}`)) |
| | | } |
| | | |
| | | } |
| | | } |
| | | ] |
| | | }, |
| | | toolbarConfig: {//表头按钮 |
| | | buttons: [ |
| | | // {code: 'empty', name: '清空报工数量'}, |
| | |
| | | custom: true |
| | | }, |
| | | //脚部求和 |
| | | // footerMethod({columns, data}) {//页脚函数 |
| | | // let footList = ['', '', '', '', ''] |
| | | // return [ |
| | | // columns.map((column, columnIndex) => { |
| | | // if (columnIndex === 0) { |
| | | // return '合计:' |
| | | // } |
| | | // if (footList.includes(column.field)) { |
| | | // return sumNum(data, column.field) |
| | | // } |
| | | // return '' |
| | | // }) |
| | | // ] |
| | | // } |
| | | footerMethod({columns, data}) {//页脚函数 |
| | | let footList = ['', '', '', '', ''] |
| | | return [ |
| | | columns.map((column, columnIndex) => { |
| | | if (columnIndex === 0) { |
| | | return '合计:' |
| | | } |
| | | return '' |
| | | }) |
| | | ] |
| | | } |
| | | |
| | | }) |
| | | |
| | | let brokenRow = ref() |
| | | const gridEvents = { |
| | | toolbarButtonClick({code}) { |
| | | async toolbarButtonClick({code}) { |
| | | const $grid = xGrid.value |
| | | if ($grid) { |
| | | switch (code) { |
| | | case 'saveReportingWork': { |
| | | if($grid.getTableData().fullData.length===0){ |
| | | ElMessage.warning(`请选择流程卡数据`) |
| | | return false |
| | | } |
| | | const device = titleUploadData.value.deviceName |
| | | if(device === null || device === undefined || device === ''){ |
| | | ElMessage.error('请选择报工设备!') |
| | | return |
| | | } |
| | | const teamsGroupsName = titleUploadData.value.teamsGroupsName |
| | | if(teamsGroupsName === null || teamsGroupsName === undefined || teamsGroupsName === ''){ |
| | | ElMessage.error('请选择报工设备!') |
| | | return |
| | | } |
| | | const errMap = await $grid.validate(true) |
| | | if (errMap) { |
| | | ElMessage.error(`校验不通过!`) |
| | | return |
| | | } |
| | | saveReportingWork() |
| | | break |
| | | } |
| | |
| | | slots: {default: 'returnProcess_default', edit: 'returnProcess'} |
| | | }, |
| | | { |
| | | field: 'reasonType', title: '次破类型', |
| | | field: 'breakageType', title: '次破类型', |
| | | editRender: {}, |
| | | slots: {default: 'reasonType_default', edit: 'reasonType'} |
| | | slots: {default: 'breakageType_default', edit: 'breakageType'} |
| | | }, |
| | | { |
| | | field: 'reasonDamage', title: '次破原因', |
| | | field: 'breakageReason', title: '次破原因', |
| | | editRender: {}, |
| | | slots: {default: 'reasonDamage_default', edit: 'reasonDamage'} |
| | | slots: {default: 'breakageReason_default', edit: 'breakageReason'} |
| | | }, |
| | | { |
| | | field: 'responsibleProcess', title: '责任工序', |
| | |
| | | slots: {default: 'responsibleTeam_default', edit: 'responsibleTeam'} |
| | | }, |
| | | { |
| | | field: 'responsibilityPersonnel', |
| | | field: 'responsiblePersonnel', |
| | | title: '责任人员', |
| | | editRender: {name: 'input', attrs: {placeholder: ''}} |
| | | |
| | |
| | | } |
| | | } |
| | | ], |
| | | reasonType: [ |
| | | breakageType: [ |
| | | { required: true, message: '请选择次破类型' } |
| | | ], |
| | | reasonDamage: [ |
| | | breakageReason: [ |
| | | { required: true, message: '请选择次破原因' } |
| | | ], |
| | | responsibleProcess: [ |
| | |
| | | }) |
| | | |
| | | const saveReportingWork = () => { |
| | | |
| | | titleUploadData.value.creator = user.user.userName |
| | | titleUploadData.value.creatorId = user.user.id |
| | | titleUploadData.value.creatorId = user.user.userId |
| | | const requestDetailData = xGrid.value.getTableData().fullData.filter((row) => { |
| | | const a = (row.completedQuantity !== undefined && row.completedQuantity !== null && row.completedQuantity !== '') |
| | | const b = (row.breakageQuantity !== undefined && row.breakageQuantity !== null && row.breakageQuantity !== '') |
| | | return (a || b) |
| | | }) |
| | | if(requestDetailData.length === 0){ |
| | | ElMessage.warning('请填写至少一条损耗数和完工数') |
| | | return false |
| | | } |
| | | |
| | | const requestData = { |
| | | title:titleUploadData.value, |
| | | detail:xGrid.value.getTableData().fullData |
| | |
| | | request.post(`/reportingWork/saveReportingWork`,requestData).then(res =>{ |
| | | if (res.code == 200){ |
| | | ElMessage.success("报工成功") |
| | | router.push({path:'/main/reportingWorks/AddReportingWork',query:{random:Math.random()}}) |
| | | } |
| | | }).catch(err =>{ |
| | | ElMessage.error(err.message) |
| | | }) |
| | | } |
| | | |
| | |
| | | titleSelectJson.value.breakageType = res.data.breakageType |
| | | //次破原因 |
| | | titleSelectJson.value.breakageReason = res.data.breakageReason |
| | | console.log(res.data) |
| | | |
| | | //console.log(res.data) |
| | | titleUploadData.value.classes='早班' |
| | | |
| | | |
| | | titleUploadData.value.reportingWorkTime = formatCurrentTime() |
| | |
| | | let hours = dateObj.getHours().toString().padStart(2, '0'); // 小时 |
| | | let minutes = dateObj.getMinutes().toString().padStart(2, '0'); // 分钟 |
| | | let seconds = dateObj.getSeconds().toString().padStart(2, '0'); // 秒数 |
| | | |
| | | if(parseInt(hours)>=17)titleUploadData.value.classes='晚班' |
| | | return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; // 返回格式化后的时间字符串 |
| | | } |
| | | |
| | |
| | | <el-text>报工班组:</el-text> |
| | | </el-col> |
| | | <el-col :span="3"> |
| | | <el-select v-model="titleUploadData.teamsgroupsName" clearable placeholder="请选择班组"> |
| | | <el-select v-model="titleUploadData.teamsGroupsName" clearable placeholder="请选择班组"> |
| | | <el-option |
| | | v-for="item in titleSelectJson['teamsType']" |
| | | :key="item.id" |
| | |
| | | v-bind="gridOptions" |
| | | v-on="gridEvents" |
| | | @filter-change="filterChanged" |
| | | @edit-closed="verifyNum" |
| | | |
| | | > |
| | | |
| | |
| | | <template #responsibleProcess_default="{ row }"> |
| | | <span>{{ row.responsibleProcess }}</span> |
| | | </template> |
| | | <!-- 刺破类型reasonType --> |
| | | <template #reasonType="{ row }"> |
| | | <vxe-select v-model="row.reasonType " |
| | | <!-- 刺破类型breakageType --> |
| | | <template #breakageType="{ row }"> |
| | | <vxe-select v-model="row.breakageType " |
| | | filterable |
| | | clearable |
| | | placeholder=""> |
| | | <vxe-option v-for="item in titleSelectJson.breakageType" :key="item.id" :label="item.basic_name" :value="item.basic_name"/> |
| | | </vxe-select> |
| | | </template> |
| | | <template #reasonType_default="{ row }"> |
| | | <span>{{ row.reasonType }}</span> |
| | | <template #breakageType_default="{ row }"> |
| | | <span>{{ row.breakageType }}</span> |
| | | </template> |
| | | |
| | | <!--次破原因--> |
| | | <template #reasonDamage="{ row }"> |
| | | <vxe-select v-model="row.reasonDamage " |
| | | <template #breakageReason="{ row }"> |
| | | <vxe-select v-model="row.breakageReason " |
| | | filterable |
| | | clearable |
| | | placeholder=""> |
| | | <vxe-option v-for="item in titleSelectJson.breakageReason" :key="item.id" :label="item.basic_name" :value="item.basic_name"/> |
| | | </vxe-select> |
| | | </template> |
| | | <template #reasonDamage_default="{ row }"> |
| | | <span>{{ row.reasonDamage }}</span> |
| | | <template #breakageReason_default="{ row }"> |
| | | <span>{{ row.breakageReason }}</span> |
| | | </template> |
| | | |
| | | |