feat(IPQC): 新增报废单和转用单功能并优化物料选择

refactor(物料管理): 重构物料选择组件为下拉选择器
feat(报废记录): 添加创建报废单、转用单及审批功能
style(报废记录): 调整表格列宽和操作按钮布局
This commit is contained in:
2026-01-26 17:56:17 +08:00
parent 5303c33bd0
commit d4f8c52a41
3 changed files with 626 additions and 71 deletions

View File

@@ -55,3 +55,51 @@ export function delQcScrapRecords(pid) {
method: 'POST'
})
}
/**
* 创建报废单
* @param {报废单数据} data
*/
export function createScrapOrder(data) {
return request({
url: 'mes/qualityManagement/IPQC/QcScrapRecords/scrap-order',
method: 'post',
data: data
})
}
/**
* 创建转用单
* @param {转用单数据} data
*/
export function createTransferOrder(data) {
return request({
url: 'mes/qualityManagement/IPQC/QcScrapRecords/transfer-order',
method: 'post',
data: data
})
}
/**
* 审批报废记录
* @param {报废记录ID} id
* @param {审批信息} data
*/
export function approveScrapRecord(id, data) {
return request({
url: 'mes/qualityManagement/IPQC/QcScrapRecords/approve/' + id,
method: 'put',
data: data
})
}
/**
* 撤销报废记录
* @param {报废记录ID} id
*/
export function revokeScrapRecord(id) {
return request({
url: 'mes/qualityManagement/IPQC/QcScrapRecords/revoke/' + id,
method: 'put'
})
}

View File

@@ -8,14 +8,14 @@
<el-form :model="queryParams" label-position="right" inline ref="queryRef" v-show="showSearch" @submit.prevent>
<!-- 库存查询功能按物料编码仓库名称 -->
<el-form-item label="物料名称" prop="materialCode">
<el-select v-model="queryParams.materialCode" filterable placeholder="请选择">
<el-select v-model="selectedMaterial" value-key="id" @change="handleSearchMaterialChange" filterable placeholder="请选择">
<el-option label="全部" value=""> </el-option>
<el-option
v-for="(item, index) in options"
value-key="id"
:key="item.id"
:label="`${item.type || ''} ${item.materialCode} ${item.materialName} [${item.supplierName || ''}]`"
:value="item.materialCode">
:value="item">
<span style="float: left">{{ item.type || '' }} {{ item.materialCode }} {{ item.materialName }} [{{ item.supplierName || '' }}]</span>
</el-option>
</el-select>
@@ -707,6 +707,7 @@ const userStore = useUserStore()
const ids = ref([])
const loading = ref(false)
const showSearch = ref(true)
const selectedMaterial = ref(null)
const queryParams = reactive({
pageNum: 1,
pageSize: 10,
@@ -770,8 +771,20 @@ function handleQuery() {
getList()
}
// 搜索物料选择变化处理
function handleSearchMaterialChange(val) {
if (val) {
queryParams.materialCode = val.materialCode
queryParams.supplierCode = val.supplierCode || ''
} else {
queryParams.materialCode = ''
queryParams.supplierCode = ''
}
}
// 重置查询操作
function resetQuery() {
selectedMaterial.value = null
proxy.resetForm('queryRef')
handleQuery()
}

View File

@@ -7,24 +7,35 @@
<div>
<el-form :model="queryParams" label-position="right" inline ref="queryRef" v-show="showSearch" @submit.prevent>
<el-form-item label="物料编码" prop="materialCode">
<el-input v-model="queryParams.materialCode" placeholder="请输入物料编码" />
<el-select v-model="selectedMaterial" value-key="id" @change="handleSearchMaterialChange" filterable placeholder="请选择">
<el-option label="全部" value=""> </el-option>
<el-option
v-for="(item, index) in options.materialOptions"
value-key="id"
:key="item.id"
:label="`${item.type || ''} ${item.materialCode} ${item.materialName} [${item.supplierName || ''}]`"
:value="item">
<span style="float: left">{{ item.type || '' }} {{ item.materialCode }} {{ item.materialName }} [{{ item.supplierName || '' }}]</span>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="产品编号" prop="productCode">
<el-input v-model="queryParams.productCode" placeholder="请输入产品编号" />
</el-form-item>
<el-form-item label="批次号" prop="batchNo">
<el-input v-model="queryParams.batchNo" placeholder="请输入批次号" />
<el-form-item label="原材料批次号" prop="batchNo">
<el-input v-model="queryParams.batchNo" placeholder="请输入原材料批次号" />
</el-form-item>
<el-form-item label="不良品单号" prop="scrapOrderNo">
<el-input v-model="queryParams.scrapOrderNo" placeholder="请输入不良品单号" />
</el-form-item>
<el-form-item label="不良品原因" prop="scrapReason">
<el-select v-model="queryParams.scrapReason" placeholder="请选择不良品原因" filterable>
<el-option v-for="item in options.scrapReasonOptions" :key="item" :label="item" :value="item" />
<el-form-item label="不良品类型" prop="scrapType">
<el-select v-model="queryParams.scrapType" placeholder="请选择不良品类型" filterable>
<el-option v-for="item in options.scrapTypeOptions" :key="item.dictValue" :label="item.dictLabel" :value="item.dictValue" />
</el-select>
</el-form-item>
<el-form-item label="线别" prop="lineCode">
<el-select v-model="queryParams.lineCode" placeholder="请选择线别" filterable>
<el-option label="全部" value=""> </el-option>
<el-option v-for="item in options.lineCodeOptions" :key="item" :label="item" :value="item" />
</el-select>
</el-form-item>
@@ -35,10 +46,17 @@
</el-form>
<!-- 工具区域 -->
<el-row :gutter="15" class="mb10">
<el-col :span="1.5">
<el-button type="primary" v-hasPermi="['qcscraprecords:add']" plain icon="plus" @click="handleAdd">
{{ $t('btn.add') }}
</el-button>
<el-col :span="3">
<el-button type="success" plain icon="document" @click="handleCreateScrapOrder"> 填写原材料报废单 </el-button>
</el-col>
<el-col :span="3">
<el-button type="success" plain icon="document" @click="handleCreateScrapOrder"> 填写成品报废单 </el-button>
</el-col>
<el-col :span="3">
<el-button type="success" plain icon="document" @click="handleCreateScrapOrder"> 填写退货单 </el-button>
</el-col>
<el-col :span="3">
<el-button type="success" plain icon="document" @click="handleCreateTransferOrder"> 填写工单转用单 </el-button>
</el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
</el-row>
@@ -57,7 +75,7 @@
<el-table-column prop="materialName" label="物料名称" align="center" v-if="columns.showColumn('materialName')" />
<el-table-column prop="productCode" label="产品编号" align="center" v-if="columns.showColumn('productCode')" />
<el-table-column prop="productName" label="产品名称" align="center" v-if="columns.showColumn('productName')" />
<el-table-column prop="batchNo" label="批次号" align="center" v-if="columns.showColumn('batchNo')" />
<el-table-column prop="batchNo" label="原材料批次号" align="center" v-if="columns.showColumn('batchNo')" />
<el-table-column prop="scrapType" label="不良品类型" align="center" v-if="columns.showColumn('scrapType')">
<template #default="scope">
<dict-tag :options="options.scrapTypeOptions" :value="scope.row.scrapType" />
@@ -91,22 +109,28 @@
<el-table-column prop="updatedBy" label="更新人ID" align="center" v-if="columns.showColumn('updatedBy')" />
<el-table-column prop="createdBy" label="创建人ID" align="center" v-if="columns.showColumn('createdBy')" />
<el-table-column prop="id" label="主键ID" align="center" v-if="columns.showColumn('id')" />
<el-table-column label="操作" width="160">
<el-table-column label="操作" width="180" fixed="right">
<template #default="scope">
<el-button
type="success"
size="small"
icon="edit"
title="编辑"
v-hasPermi="['qcscraprecords:edit']"
@click="handleUpdate(scope.row)"></el-button>
<el-button
type="danger"
size="small"
icon="delete"
title="删除"
v-hasPermi="['qcscraprecords:delete']"
@click="handleDelete(scope.row)"></el-button>
<div>
<el-button
type="warning"
size="small"
icon="check"
v-hasPermi="['qcscraprecords:approve']"
v-if="scope.row.status === '待审批'"
@click="handleApprove(scope.row)"
>审批</el-button
>
<el-button
type="info"
size="small"
icon="undo"
v-hasPermi="['qcscraprecords:revoke']"
v-if="scope.row.status === '已批准'"
@click="handleRevoke(scope.row)"
>撤销</el-button
>
</div>
</template>
</el-table-column>
</el-table>
@@ -262,8 +286,8 @@
</el-col>
<el-col :lg="12">
<el-form-item label="批次号" prop="batchNo">
<el-input v-model="form.batchNo" placeholder="请输入批次号" />
<el-form-item label="原材料批次号" prop="batchNo">
<el-input v-model="form.batchNo" placeholder="请输入原材料批次号" />
</el-form-item>
</el-col>
@@ -321,17 +345,225 @@
<el-button type="primary" @click="submitForm">{{ $t('btn.submit') }}</el-button>
</template>
</el-dialog>
<!-- 创建报废单对话框 -->
<el-dialog title="创建报废单" :lock-scroll="false" v-model="scrapOrderOpen">
<el-form ref="scrapOrderFormRef" :model="scrapOrderForm" :rules="scrapOrderRules" label-width="100px">
<el-row :gutter="20">
<el-col :lg="12">
<el-form-item label="物料编码" prop="materialCode">
<el-select
value-key="id"
@change="(val) => handleMaterialChange(val, 'scrap')"
v-model="selectedScrapMaterial"
filterable
placeholder="请选择">
<el-option
v-for="(item, index) in options.materialOptions"
:key="item.id"
:label="`${item.type || ''} ${item.materialCode} ${item.materialName} [${item.supplierName || ''}]`"
:value="item">
<span style="float: left"
>{{ item.type || '' }} {{ item.materialCode }} {{ item.materialName }} [{{ item.supplierName || '' }}]</span
>
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :lg="12">
<el-form-item label="物料名称" prop="materialName">
<el-input v-model="scrapOrderForm.materialName" placeholder="请输入物料名称" disabled />
</el-form-item>
</el-col>
<el-col :lg="12">
<el-form-item label="原材料批次号" prop="batchNo">
<el-input v-model="scrapOrderForm.batchNo" placeholder="请输入原材料批次号" />
</el-form-item>
</el-col>
<el-col :lg="12">
<el-form-item label="不良品数量" prop="scrapQuantity">
<el-input v-model="scrapOrderForm.scrapQuantity" placeholder="请输入不良品数量" />
</el-form-item>
</el-col>
<el-col :lg="12">
<el-form-item label="不良品类型" prop="scrapType">
<el-select v-model="scrapOrderForm.scrapType" placeholder="请选择不良品类型" disabled>
<el-option label="报废" value="报废"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :lg="12">
<el-form-item label="不良品原因" prop="scrapReason">
<el-input v-model="scrapOrderForm.scrapReason" placeholder="请输入不良品原因" />
</el-form-item>
</el-col>
<el-col :lg="12">
<el-form-item label="处置方式" prop="disposalMethod">
<el-input v-model="scrapOrderForm.disposalMethod" placeholder="请输入处置方式" />
</el-form-item>
</el-col>
<el-col :lg="12">
<el-form-item label="操作员" prop="operator">
<el-input v-model="scrapOrderForm.operator" placeholder="请输入操作员" />
</el-form-item>
</el-col>
<el-col :lg="12">
<el-form-item label="质检员" prop="qualityInspector">
<el-input v-model="scrapOrderForm.qualityInspector" placeholder="请输入质检员" />
</el-form-item>
</el-col>
<el-col :lg="12">
<el-form-item label="报废日期" prop="scrapDate">
<el-date-picker v-model="scrapOrderForm.scrapDate" type="datetime" placeholder="选择日期时间" value-format="YYYY-MM-DD HH:mm:ss">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :lg="24">
<el-form-item label="备注" prop="remark">
<el-input v-model="scrapOrderForm.remark" placeholder="请输入备注" type="textarea" :rows="3" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<el-button text @click="cancelScrapOrder">{{ $t('btn.cancel') }}</el-button>
<el-button type="primary" @click="submitScrapOrder">{{ $t('btn.submit') }}</el-button>
</template>
</el-dialog>
<!-- 创建转用单对话框 -->
<el-dialog title="创建转用单" :lock-scroll="false" v-model="transferOrderOpen">
<el-form ref="transferOrderFormRef" :model="transferOrderForm" :rules="transferOrderRules" label-width="100px">
<el-row :gutter="20">
<el-col :lg="12">
<el-form-item label="物料编码" prop="materialCode">
<el-select
value-key="id"
@change="(val) => handleMaterialChange(val, 'transfer')"
v-model="selectedTransferMaterial"
filterable
placeholder="请选择">
<el-option
v-for="(item, index) in options.materialOptions"
:key="item.id"
:label="`${item.type || ''} ${item.materialCode} ${item.materialName} [${item.supplierName || ''}]`"
:value="item">
<span style="float: left"
>{{ item.type || '' }} {{ item.materialCode }} {{ item.materialName }} [{{ item.supplierName || '' }}]</span
>
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :lg="12">
<el-form-item label="物料名称" prop="materialName">
<el-input v-model="transferOrderForm.materialName" placeholder="请输入物料名称" disabled />
</el-form-item>
</el-col>
<el-col :lg="12">
<el-form-item label="工单号" prop="workorder">
<el-input v-model="transferOrderForm.workorder" placeholder="请输入工单号" />
</el-form-item>
</el-col>
<el-col :lg="12">
<el-form-item label="不良品数量" prop="scrapQuantity">
<el-input v-model="transferOrderForm.scrapQuantity" placeholder="请输入不良品数量" />
</el-form-item>
</el-col>
<el-col :lg="12">
<el-form-item label="不良品类型" prop="scrapType">
<el-select v-model="transferOrderForm.scrapType" placeholder="请选择不良品类型" disabled>
<el-option label="转用" value="转用"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :lg="12">
<el-form-item label="不良品原因" prop="scrapReason">
<el-input v-model="transferOrderForm.scrapReason" placeholder="请输入不良品原因" />
</el-form-item>
</el-col>
<el-col :lg="12">
<el-form-item label="处置方式" prop="disposalMethod">
<el-input v-model="transferOrderForm.disposalMethod" placeholder="请输入处置方式" />
</el-form-item>
</el-col>
<el-col :lg="12">
<el-form-item label="操作员" prop="operator">
<el-input v-model="transferOrderForm.operator" placeholder="请输入操作员" />
</el-form-item>
</el-col>
<el-col :lg="12">
<el-form-item label="质检员" prop="qualityInspector">
<el-input v-model="transferOrderForm.qualityInspector" placeholder="请输入质检员" />
</el-form-item>
</el-col>
<el-col :lg="12">
<el-form-item label="报废日期" prop="scrapDate">
<el-date-picker v-model="transferOrderForm.scrapDate" type="datetime" placeholder="选择日期时间" value-format="YYYY-MM-DD HH:mm:ss">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :lg="24">
<el-form-item label="备注" prop="remark">
<el-input v-model="transferOrderForm.remark" placeholder="请输入备注" type="textarea" :rows="3" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<el-button text @click="cancelTransferOrder">{{ $t('btn.cancel') }}</el-button>
<el-button type="primary" @click="submitTransferOrder">{{ $t('btn.submit') }}</el-button>
</template>
</el-dialog>
<!-- 审批报废记录对话框 -->
<el-dialog title="审批报废记录" :lock-scroll="false" v-model="approveOpen">
<el-form ref="approveFormRef" :model="approveForm" :rules="approveRules" label-width="100px">
<el-row :gutter="20">
<el-col :lg="12">
<el-form-item label="审批结果" prop="isApproved">
<el-radio-group v-model="approveForm.isApproved">
<el-radio :value="true">批准</el-radio>
<el-radio :value="false">拒绝</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :lg="12">
<el-form-item label="审批人" prop="approver">
<el-input v-model="approveForm.approver" placeholder="请输入审批人姓名" />
</el-form-item>
</el-col>
<el-col :lg="24">
<el-form-item label="审批备注" prop="remark">
<el-input v-model="approveForm.remark" placeholder="请输入审批备注" type="textarea" :rows="3" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<el-button text @click="cancelApprove">{{ $t('btn.cancel') }}</el-button>
<el-button type="primary" @click="submitApprove">{{ $t('btn.submit') }}</el-button>
</template>
</el-dialog>
</div>
</template>
<script setup name="qcscraprecords">
<script setup name="QcScrapRecords">
import { ref, reactive, toRefs, getCurrentInstance } from 'vue'
import {
listQcScrapRecords,
addQcScrapRecords,
delQcScrapRecords,
updateQcScrapRecords,
getQcScrapRecords
getQcScrapRecords,
createScrapOrder,
createTransferOrder,
approveScrapRecord,
revokeScrapRecord
} from '@/api/qualityManagement/IPQC/qcscraprecords.js'
import { getMaterialOption } from '@/api/materialManagement/productionMaterial/mminventory.js'
// 获取组件实例
const { proxy } = getCurrentInstance()
const ids = ref([])
const loading = ref(false)
@@ -345,9 +577,12 @@ const queryParams = reactive({
productCode: '',
batchNo: '',
scrapOrderNo: '',
scrapReason: '',
scrapType: '',
lineCode: ''
})
const selectedMaterial = ref(null)
const selectedScrapMaterial = ref(null)
const selectedTransferMaterial = ref(null)
const columns = ref([
{ visible: true, align: 'center', type: '', prop: 'scrapOrderNo', label: '不良品单号', showOverflowTooltip: true },
{ visible: true, align: 'center', type: '', prop: 'workorder', label: '工单号', showOverflowTooltip: true },
@@ -355,7 +590,7 @@ const columns = ref([
{ visible: true, align: 'center', type: '', prop: 'materialName', label: '物料名称', showOverflowTooltip: true },
{ visible: true, align: 'center', type: '', prop: 'productCode', label: '产品编号', showOverflowTooltip: true },
{ visible: true, align: 'center', type: '', prop: 'productName', label: '产品名称', showOverflowTooltip: true },
{ visible: true, align: 'center', type: '', prop: 'batchNo', label: '批次号', showOverflowTooltip: true },
{ visible: true, align: 'center', type: '', prop: 'batchNo', label: '原材料批次号', showOverflowTooltip: true },
{ visible: true, align: 'center', type: 'dict', prop: 'scrapType', label: '不良品类型', showOverflowTooltip: true },
{ visible: true, align: 'center', type: '', prop: 'scrapReason', label: '不良品原因', showOverflowTooltip: true },
{ visible: true, align: 'center', type: '', prop: 'scrapQuantity', label: '不良品数量' },
@@ -392,14 +627,18 @@ var dictParams = []
function getList() {
loading.value = true
listQcScrapRecords(queryParams).then((res) => {
const { code, data } = res
if (code == 200) {
dataList.value = data.result
total.value = data.totalNum
listQcScrapRecords(queryParams)
.then((res) => {
const { code, data } = res
if (code === 200) {
dataList.value = data.result
total.value = data.totalNum
}
loading.value = false
}
})
})
.catch(() => {
loading.value = false
})
}
// 查询
@@ -411,14 +650,15 @@ function handleQuery() {
// 重置查询操作
function resetQuery() {
proxy.resetForm('queryRef')
selectedMaterial.value = null
handleQuery()
}
// 自定义排序
// 处理排序
function sortChange(column) {
var sort = undefined
var sortType = undefined
let sort = undefined
let sortType = undefined
if (column.prop != null && column.order != null) {
if (column.prop !== null && column.order !== null) {
sort = column.prop
sortType = column.order
}
@@ -427,16 +667,72 @@ function sortChange(column) {
handleQuery()
}
// 获取物料列表
function getMaterialCodeList() {
try {
getMaterialOption('materialCode').then((res) => {
const { code, data } = res
if (code === 200) {
options.value.materialOptions = data
}
})
} catch (error) {
proxy.$modal.msgError(error.message)
}
}
// 物料选择器改变事件
function handleSearchMaterialChange(val) {
if (val) {
queryParams.materialCode = val.materialCode
} else {
queryParams.materialCode = ''
}
}
// 处理物料选择改变(表单用)
function handleMaterialChange(val, formType) {
if (!val) return
if (formType === 'scrap') {
scrapOrderForm.value.materialCode = val.materialCode
scrapOrderForm.value.materialName = val.materialName
scrapOrderForm.value.supplierName = val.supplierName || ''
} else if (formType === 'transfer') {
transferOrderForm.value.materialCode = val.materialCode
transferOrderForm.value.materialName = val.materialName
transferOrderForm.value.supplierName = val.supplierName || ''
}
}
/*************** form操作 ***************/
const formRef = ref()
const scrapOrderFormRef = ref()
const transferOrderFormRef = ref()
const approveFormRef = ref()
const title = ref('')
// 操作类型 1、add 2edit 3view
const opertype = ref(0)
// 操作类型1=add, 2=edit, 3=view
const operType = ref(0)
const open = ref(false)
// 新增对话框状态
const scrapOrderOpen = ref(false)
const transferOrderOpen = ref(false)
const approveOpen = ref(false)
// 选中的记录ID
const selectedId = ref(null)
const state = reactive({
single: true,
multiple: true,
form: {},
scrapOrderForm: {},
transferOrderForm: {},
approveForm: {
isApproved: true,
approver: ''
},
rules: {
updatedTime: [{ required: true, message: '更新时间不能为空', trigger: 'blur' }],
createdTime: [{ required: true, message: '创建时间不能为空', trigger: 'blur' }],
@@ -445,17 +741,54 @@ const state = reactive({
scrapQuantity: [{ required: true, message: '不良品数量不能为空', trigger: 'blur' }],
scrapOrderNo: [{ required: true, message: '不良品单号不能为空', trigger: 'blur' }]
},
scrapOrderRules: {
materialCode: [{ required: true, message: '物料编码不能为空', trigger: 'blur' }],
scrapReason: [{ required: true, message: '不良品原因不能为空', trigger: 'blur' }],
scrapQuantity: [{ required: true, message: '不良品数量不能为空', trigger: 'blur' }],
batchNo: [{ required: true, message: '原材料批次号不能为空', trigger: 'blur' }],
disposalMethod: [{ required: true, message: '处置方式不能为空', trigger: 'blur' }],
operator: [{ required: true, message: '操作员不能为空', trigger: 'blur' }],
qualityInspector: [{ required: true, message: '质检员不能为空', trigger: 'blur' }],
scrapDate: [{ required: true, message: '报废日期不能为空', trigger: 'blur' }]
},
transferOrderRules: {
materialCode: [{ required: true, message: '物料编码不能为空', trigger: 'blur' }],
workorder: [{ required: true, message: '工单号不能为空', trigger: 'blur' }],
scrapReason: [{ required: true, message: '不良品原因不能为空', trigger: 'blur' }],
scrapQuantity: [{ required: true, message: '不良品数量不能为空', trigger: 'blur' }],
disposalMethod: [{ required: true, message: '处置方式不能为空', trigger: 'blur' }],
operator: [{ required: true, message: '操作员不能为空', trigger: 'blur' }],
qualityInspector: [{ required: true, message: '质检员不能为空', trigger: 'blur' }],
scrapDate: [{ required: true, message: '报废日期不能为空', trigger: 'blur' }]
},
approveRules: {
isApproved: [{ required: true, message: '请选择是否批准', trigger: 'change' }],
approver: [{ required: true, message: '审批人不能为空', trigger: 'blur' }]
},
options: {
// 状态:草稿,待审批,已批准,已拒绝 选项列表 格式 eg:{ dictLabel: '标签', dictValue: '0'}
statusOptions: [],
// 不良品原因选项列表
scrapReasonOptions: [],
statusOptions: [
{ dictLabel: '草稿', dictValue: '草稿' },
{ dictLabel: '待审批', dictValue: '待审批' },
{ dictLabel: '已批准', dictValue: '已批准' },
{ dictLabel: '已拒绝', dictValue: '已拒绝' }
],
// 不良品类型选项列表
scrapTypeOptions: [
{ dictLabel: '报废', dictValue: '报废' },
{ dictLabel: '转用', dictValue: '转用' },
{ dictLabel: '退货', dictValue: '退货' },
{ dictLabel: '其他', dictValue: '其他' }
],
// 线别选项列表
lineCodeOptions: []
lineCodeOptions: [],
// 物料选项列表
materialOptions: []
}
})
const { form, rules, options, single, multiple } = toRefs(state)
const { form, rules, scrapOrderForm, scrapOrderRules, transferOrderForm, transferOrderRules, approveForm, approveRules, options, single, multiple } =
toRefs(state)
// 关闭dialog
function cancel() {
@@ -501,12 +834,60 @@ function reset() {
proxy.resetForm('formRef')
}
// 重置报废单表单
function resetScrapOrderForm() {
scrapOrderForm.value = {
materialCode: null,
materialName: null,
batchNo: null,
scrapQuantity: null,
scrapType: '报废',
scrapReason: null,
disposalMethod: null,
operator: null,
qualityInspector: null,
scrapDate: null,
remark: null
}
selectedScrapMaterial.value = null
proxy.resetForm('scrapOrderFormRef')
}
// 重置转用单表单
function resetTransferOrderForm() {
transferOrderForm.value = {
materialCode: null,
materialName: null,
workorder: null,
scrapQuantity: null,
scrapType: '转用',
scrapReason: null,
disposalMethod: null,
operator: null,
qualityInspector: null,
scrapDate: null,
remark: null
}
selectedTransferMaterial.value = null
proxy.resetForm('transferOrderFormRef')
}
// 重置审批表单
function resetApproveForm() {
approveForm.value = {
isApproved: true,
approver: '',
remark: null
}
proxy.resetForm('approveFormRef')
}
// 添加按钮操作
function handleAdd() {
reset()
open.value = true
title.value = '添加不良品记录表'
opertype.value = 1
operType.value = 1
}
// 修改按钮操作
function handleUpdate(row) {
@@ -517,7 +898,7 @@ function handleUpdate(row) {
if (code == 200) {
open.value = true
title.value = '修改不良品记录表'
opertype.value = 2
operType.value = 2
form.value = {
...data
@@ -526,39 +907,40 @@ function handleUpdate(row) {
})
}
// 添加&修改 表单提交
// 提交表单
function submitForm() {
proxy.$refs['formRef'].validate((valid) => {
if (valid) {
if (form.value.id != undefined && opertype.value === 2) {
updateQcScrapRecords(form.value).then((res) => {
proxy.$modal.msgSuccess('修改成功')
const request = form.value.id !== undefined && operType.value === 2 ? updateQcScrapRecords(form.value) : addQcScrapRecords(form.value)
request.then((res) => {
if (res.code === 200) {
proxy.$modal.msgSuccess(operType.value === 2 ? '修改成功' : '新增成功')
open.value = false
getList()
})
} else {
addQcScrapRecords(form.value).then((res) => {
proxy.$modal.msgSuccess('新增成功')
open.value = false
getList()
})
}
}
})
}
})
}
// 删除按钮操作
// 处理删除
function handleDelete(row) {
const Ids = row.id || ids.value
const idsToDelete = row.id || ids.value
if (!idsToDelete) {
proxy.$modal.msgWarning('请选择要删除的记录')
return
}
proxy
.$confirm('是否确认删除参数编号为"' + Ids + '"的数据项?', '警告', {
.$confirm(`是否确认删除参数编号为"${idsToDelete}"的数据项?`, '警告', {
confirmButtonText: proxy.$t('common.ok'),
cancelButtonText: proxy.$t('common.cancel'),
type: 'warning'
})
.then(function () {
return delQcScrapRecords(Ids)
.then(() => {
return delQcScrapRecords(idsToDelete)
})
.then(() => {
getList()
@@ -566,5 +948,117 @@ function handleDelete(row) {
})
}
// 打开创建报废单对话框
function handleCreateScrapOrder() {
resetScrapOrderForm()
scrapOrderOpen.value = true
}
// 关闭创建报废单对话框
function cancelScrapOrder() {
scrapOrderOpen.value = false
resetScrapOrderForm()
}
// 提交报废单
function submitScrapOrder() {
proxy.$refs['scrapOrderFormRef'].validate((valid) => {
if (valid) {
createScrapOrder(scrapOrderForm.value).then((res) => {
if (res.code === 200) {
proxy.$modal.msgSuccess('创建报废单成功')
scrapOrderOpen.value = false
getList()
}
})
}
})
}
// 打开创建转用单对话框
function handleCreateTransferOrder() {
resetTransferOrderForm()
transferOrderOpen.value = true
}
// 关闭创建转用单对话框
function cancelTransferOrder() {
transferOrderOpen.value = false
resetTransferOrderForm()
}
// 提交转用单
function submitTransferOrder() {
proxy.$refs['transferOrderFormRef'].validate((valid) => {
if (valid) {
createTransferOrder(transferOrderForm.value).then((res) => {
if (res.code === 200) {
proxy.$modal.msgSuccess('创建转用单成功')
transferOrderOpen.value = false
getList()
}
})
}
})
}
// 打开审批报废记录对话框
function handleApprove(row) {
selectedId.value = row?.id || ids.value
if (!selectedId.value) {
proxy.$modal.msgWarning('请选择要审批的记录')
return
}
resetApproveForm()
approveOpen.value = true
}
// 关闭审批报废记录对话框
function cancelApprove() {
approveOpen.value = false
resetApproveForm()
selectedId.value = null
}
// 提交审批
function submitApprove() {
proxy.$refs['approveFormRef'].validate((valid) => {
if (valid) {
approveScrapRecord(selectedId.value, approveForm.value).then((res) => {
if (res.code === 200) {
proxy.$modal.msgSuccess('审批成功')
approveOpen.value = false
getList()
selectedId.value = null
}
})
}
})
}
// 处理撤销
function handleRevoke(row) {
const id = row?.id || ids.value
if (!id) {
proxy.$modal.msgWarning('请选择要撤销的记录')
return
}
proxy
.$confirm('是否确认撤销该报废记录?', '警告', {
confirmButtonText: proxy.$t('common.ok'),
cancelButtonText: proxy.$t('common.cancel'),
type: 'warning'
})
.then(() => {
return revokeScrapRecord(id)
})
.then(() => {
getList()
proxy.$modal.msgSuccess('撤销成功')
})
}
handleQuery()
getMaterialCodeList()
</script>