<template>
|
<el-dialog
|
title="评审"
|
:close-on-click-modal="false"
|
:visible.sync="visible"
|
top="0vh"
|
>
|
<el-tabs type="card">
|
<el-tab-pane label="主要信息">
|
<el-card class="operation-capacity" header="不合格处理">
|
<el-form
|
:model="dataForm"
|
:rules="dataRule"
|
ref="dataForm"
|
label-width="120px"
|
class="l-mes"
|
disabled
|
>
|
<el-row>
|
<el-col :span="8">
|
<el-form-item label="编号" prop="processNo">
|
<el-input
|
v-model="dataForm.processNo"
|
placeholder=""
|
></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="8">
|
<el-form-item label="申请人" prop="initiatingOrganization">
|
<el-input
|
v-model="dataForm.initiatingOrganization"
|
placeholder=""
|
></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="8">
|
<el-form-item label="种类" prop="type">
|
<el-select
|
v-model="dataForm.type"
|
placeholder="种类"
|
style="width: 100%"
|
>
|
<el-option
|
v-for="item in typeOptions"
|
:key="item.id"
|
:label="item.label"
|
:value="item.value"
|
/>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="8">
|
<el-form-item label="不合格类别" prop="unqualifiedType">
|
<el-select
|
v-model="dataForm.unqualifiedType"
|
placeholder="不合格类别"
|
style="width: 100%"
|
>
|
<el-option
|
v-for="item in unqualifiedTypeOptions"
|
:key="item.id"
|
:label="item.label"
|
:value="item.value"
|
/>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
<el-col :span="8">
|
<el-form-item label="原因类型" prop="causeType">
|
<el-select
|
v-model="dataForm.causeType"
|
placeholder="原因类型"
|
filterable
|
style="width: 100%"
|
>
|
<el-option
|
v-for="item in causeTypeOptions"
|
:key="item.id"
|
:label="item.label"
|
:value="item.value"
|
/>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
<el-col :span="8">
|
<el-form-item label="原因" prop="reason">
|
<el-input
|
type="textarea"
|
:rows="1"
|
placeholder=""
|
v-model="dataForm.reason"
|
></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="12">
|
<el-form-item label="不合格处理描述" prop="unqualifiedDesc">
|
<el-input
|
:maxlength="200"
|
v-model="dataForm.unqualifiedDesc"
|
type="textarea"
|
:rows="2"
|
placeholder=""
|
></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="整改措施" prop="correctiveMeasures">
|
<el-input
|
v-model="dataForm.correctiveMeasures"
|
type="textarea"
|
:rows="2"
|
placeholder=""
|
></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
</el-form>
|
</el-card>
|
<el-card class="operation-capacity">
|
<div slot="header" class="clearfix">
|
<span>不合格零件</span>
|
</div>
|
<el-row>
|
<el-col :span="24">
|
<el-table
|
stripe
|
ref="applyPartList"
|
:data="applyPartList"
|
height="160px"
|
:row-style="{ height: '26px' }"
|
>
|
<el-table-column
|
label="系统编号"
|
prop="systemNo"
|
align="center"
|
min-width="75px"
|
:show-overflow-tooltip="true"
|
/>
|
<el-table-column
|
label="零件批号"
|
prop="lotBatchNo"
|
align="center"
|
min-width="75px"
|
:show-overflow-tooltip="true"
|
/>
|
<el-table-column
|
label="零件编号"
|
prop="partNo"
|
align="center"
|
min-width="75px"
|
:show-overflow-tooltip="true"
|
/>
|
<el-table-column
|
label="零件名称"
|
prop="partDesc"
|
align="center"
|
min-width="75px"
|
:show-overflow-tooltip="true"
|
/>
|
<el-table-column
|
label="不合格数量"
|
prop="unqualifiedArrived"
|
align="center"
|
min-width="75px"
|
:show-overflow-tooltip="true"
|
/>
|
<el-table-column
|
label="备注"
|
prop="remark"
|
align="center"
|
min-width="75px"
|
:show-overflow-tooltip="true"
|
/>
|
</el-table>
|
</el-col>
|
</el-row>
|
</el-card>
|
<el-card class="operation-capacity" header="不合格评审">
|
<el-form
|
:model="dataForm"
|
:rules="dataRule"
|
ref="dataForm"
|
label-width="120px"
|
class="l-mes"
|
>
|
<el-row>
|
<el-col :span="8">
|
<el-form-item label="处理方式" prop="processMode">
|
<el-select
|
v-model="dataForm.processMode"
|
placeholder=""
|
style="width: 100%"
|
>
|
<el-option
|
v-for="item in processModeOptions"
|
:key="item.id"
|
:label="item.label"
|
:value="item.value"
|
/>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
<el-col :span="8">
|
<el-form-item label="评审结果" prop="processResult">
|
<el-select
|
v-model="dataForm.processResult"
|
placeholder=""
|
style="width: 100%"
|
>
|
<el-option
|
v-for="item in processResultOptions"
|
:key="item.value"
|
:label="item.label"
|
:value="item.value"
|
/>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="12">
|
<el-form-item label="评审意见" prop="examineIdea">
|
<el-input
|
v-model="dataForm.examineIdea"
|
type="textarea"
|
:rows="2"
|
placeholder=""
|
></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
</el-form>
|
</el-card>
|
</el-tab-pane>
|
<el-tab-pane v-if="!dataForm.id" label="附件">
|
<div style="height:516px;">
|
<el-upload
|
drag
|
ref="upload"
|
action="/mes/unqualifiedProcess/upload"
|
:headers="headers"
|
:auto-upload="true"
|
:before-upload="submitUpload"
|
:on-success="uploadSuccess"
|
:data="paramData"
|
:file-list="fileList"
|
list-type="text"
|
:on-preview="handlePreview"
|
:with-credentials="true"
|
>
|
<i class="el-icon-upload"></i>
|
<div class="el-upload__text">
|
将文件拖到此处,或<em>点击上传</em>
|
</div>
|
<div slot="file" slot-scope="{ file }">
|
<span class="el-upload-list__item-actions">
|
<span>{{ file.name }}</span>
|
<span
|
style="position: absolute;right: 54px;font-size: 16px;color: #67c23a;cursor: pointer;"
|
>
|
<el-image
|
style="width: 16px; height: 16px;vertical-align:middle;"
|
src="/img/zoom.png"
|
:preview-src-list="[file.url]"
|
>
|
</el-image>
|
</span>
|
<span
|
style="position: absolute;right: 32px;font-size: 16px;color: #409eff;cursor: pointer;"
|
@click="handleDownload(file)"
|
>
|
<i class="el-icon-download" style="line-height:28px;"></i>
|
</span>
|
<span
|
style="position: absolute;right: 10px;font-size: 16px;color: #f56c6c;cursor: pointer;"
|
@click="handleDelete(file)"
|
>
|
<i class="el-icon-delete" style="line-height:28px;"></i>
|
</span>
|
</span>
|
</div>
|
</el-upload>
|
</div>
|
</el-tab-pane>
|
</el-tabs>
|
<span slot="footer" class="dialog-footer">
|
<el-button @click="visible = false">取消</el-button>
|
<el-button
|
type="primary"
|
:disabled="isSubmit"
|
v-thinclick="`dataFormSubmit`"
|
>确定</el-button
|
>
|
</span>
|
</el-dialog>
|
</template>
|
|
<script>
|
import {
|
getUnqualifiedProcess,
|
addUnqualifiedProcess,
|
putUnqualifiedProcess,
|
getUnqualifiedProcessAttachment,
|
delUnqualifiedProcessAttachment,
|
updateProcessResult,
|
examineApprove
|
} from '@/api/quality/unqualifiedprocess'
|
import { remote } from '@/api/admin/dict'
|
import { getStore } from '@/util/store.js'
|
import { mapGetters } from 'vuex'
|
|
export default {
|
data() {
|
return {
|
headers: {
|
Authorization: 'Bearer ' + getStore({ name: 'access_token' })
|
},
|
paramData: { mainProcessNo: null },
|
fileList: [],
|
visible: false,
|
dataForm: {
|
id: 0,
|
processNo: '',
|
reason: '',
|
processMode: '',
|
initiatingOrganization: null,
|
receiver: null,
|
correctiveMeasures: null,
|
causeType: null,
|
mainProcessNo: null,
|
unqualifiedDesc: null,
|
type: null,
|
unqualifiedType: null,
|
processResult: null,
|
state: null,
|
examineIdea: null,
|
workShop: null
|
},
|
dataRule: {
|
type: [
|
{ required: true, message: '产品种类不能为空', trigger: 'blur' }
|
],
|
unqualifiedType: [
|
{ required: true, message: '不合格类别不能为空', trigger: 'blur' }
|
],
|
causeType: [
|
{ required: true, message: '原因类型不能为空', trigger: 'blur' }
|
],
|
unqualifiedDesc: [
|
{ required: true, message: '不合格处理描述', trigger: 'blur' }
|
],
|
processMode: [
|
{ required: true, message: '处理方式不能为空', trigger: 'blur' }
|
],
|
processResult: [
|
{ required: true, message: '评审结果不能为空', trigger: 'blur' }
|
],
|
examineIdea: [
|
{ required: true, message: '评审意见不能为空', trigger: 'blur' }
|
]
|
},
|
applyPartList: [],
|
isSubmit: false,
|
paramObj: {},
|
paramSelArr: [],
|
paramSelCol: 'id',
|
causeTypeOptions: [],
|
processModeOptions: [],
|
typeOptions: [],
|
unqualifiedTypeOptions: [],
|
processResultOptions: [
|
{ value: '01pass', label: '通过' },
|
{ value: '02reject', label: '退回' }
|
]
|
}
|
},
|
computed: {
|
...mapGetters(['userInfo'])
|
},
|
methods: {
|
getCauseType() {
|
remote('unqualified_reason_type').then((response) => {
|
if (response.data.code === 0) {
|
this.causeTypeOptions = response.data.data
|
}
|
})
|
},
|
getProcessMode() {
|
remote('unqualified_process_mode').then((response) => {
|
if (response.data.code === 0) {
|
this.processModeOptions = response.data.data
|
}
|
})
|
},
|
getType() {
|
remote('unqualified_handle_type').then((response) => {
|
if (response.data.code === 0) {
|
this.typeOptions = response.data.data
|
}
|
})
|
},
|
getUnqualifiedType() {
|
remote('unqualified_handle_category').then((response) => {
|
if (response.data.code === 0) {
|
this.unqualifiedTypeOptions = response.data.data
|
}
|
})
|
},
|
init(row) {
|
console.log(row)
|
this.getCauseType()
|
this.getProcessMode()
|
this.getType()
|
this.getUnqualifiedType()
|
this.dataForm.id = row[0].id
|
this.applyPartList = []
|
this.visible = true
|
this.dataForm.state = null
|
this.$nextTick(() => {
|
this.$refs.dataForm.resetFields()
|
if (this.dataForm.id) {
|
getUnqualifiedProcess(this.dataForm.id).then((response) => {
|
const resData = response.data.data
|
console.log(resData)
|
this.dataForm.id = resData.id
|
this.dataForm.processNo = resData.processNo
|
this.dataForm.reason = resData.reason
|
this.dataForm.processMode = resData.processMode
|
this.dataForm.initiatingOrganization =
|
resData.initiatingOrganization
|
this.dataForm.receiver = resData.receiver
|
this.dataForm.correctiveMeasures = resData.correctiveMeasures
|
this.dataForm.causeType = resData.causeType
|
this.dataForm.mainProcessNo = resData.mainProcessNo
|
this.dataForm.unqualifiedDesc = resData.unqualifiedDesc
|
this.dataForm.type = resData.type
|
this.dataForm.unqualifiedType = resData.unqualifiedType
|
this.dataForm.processResult = resData.processResult
|
this.dataForm.state = resData.state
|
this.dataForm.examineIdea = resData.examineIdea
|
this.dataForm.workShop = resData.workShop
|
|
const applyPart = {
|
applyPartId: resData.applyPartId,
|
systemNo: resData.systemNo,
|
lotBatchNo: resData.lotBatchNo,
|
partNo: resData.partNo,
|
partDesc: resData.partDesc,
|
unqualifiedArrived: resData.unqualifiedArrived,
|
remark: resData.remark
|
}
|
this.applyPartList.push(applyPart)
|
this.getFileList()
|
})
|
} else {
|
this.dataForm.initiatingOrganization = this.userInfo.staffName
|
}
|
})
|
},
|
|
// 表单提交
|
dataFormSubmit() {
|
if (this.dataForm.state == null || this.dataForm.state === '01draft') {
|
this.isSubmit = true
|
this.$refs.dataForm.validate((valid) => {
|
if (valid) {
|
const qualityUnqualifiedProcess = {
|
processMode: this.dataForm.processMode,
|
processResult: this.dataForm.processResult,
|
examineIdea: this.dataForm.examineIdea,
|
workShop: this.dataForm.workShop,
|
state: this.dataForm.state,
|
type: this.dataForm.type,
|
id: this.dataForm.id
|
}
|
examineApprove(qualityUnqualifiedProcess)
|
.then((data) => {
|
this.$message.success('保存成功!')
|
this.visible = false
|
this.isSubmit = false
|
this.$emit('refreshDataList')
|
})
|
.catch(() => {
|
this.isSubmit = false
|
})
|
} else {
|
this.isSubmit = false
|
}
|
})
|
} else {
|
this.$message.warning('当前状态下,不能进行保存!')
|
}
|
},
|
getFileList() {
|
this.fileList = []
|
getUnqualifiedProcessAttachment(this.dataForm.mainProcessNo).then(
|
(response) => {
|
var attachments = response.data.data
|
// 渲染附件
|
if (attachments != null && attachments.length > 0) {
|
var attachment
|
var fileEl
|
for (var i = 0; i < attachments.length; i++) {
|
attachment = attachments[i]
|
fileEl = {}
|
fileEl.name = attachment.original
|
fileEl.url = attachment.path
|
fileEl.id = attachment.id
|
fileEl.fileName = attachment.fileName
|
this.fileList.push(fileEl)
|
}
|
}
|
}
|
)
|
},
|
// 附件上传
|
submitUpload() {
|
this.paramData.mainProcessNo = this.dataForm.mainProcessNo
|
},
|
uploadSuccess(response, file, fileList) {
|
this.getFileList()
|
},
|
handlePreview(file) {
|
window.open(file.url)
|
},
|
// 附件下载
|
handleDownload(file) {
|
window.open(file.url)
|
},
|
// 删除附件
|
handleDelete(file) {
|
delUnqualifiedProcessAttachment(file.id).then((response) => {
|
this.getFileList()
|
})
|
},
|
changeResult() {
|
const changeResultParam = {
|
id: this.dataForm.id,
|
processResult: this.dataForm.processResult
|
}
|
updateProcessResult(changeResultParam)
|
.then((response) => {
|
const resData = response.data
|
if (resData.code === 0) {
|
this.$message.success('处理成功')
|
this.$emit('refreshDataList')
|
} else {
|
this.$message.error('处理失败')
|
}
|
})
|
.catch(() => {})
|
}
|
}
|
}
|
</script>
|
<style lang="scss" scoped>
|
.red-but {
|
color: red;
|
}
|
</style>
|