feat(IPQC): 新增报废单和转用单功能并优化物料选择
refactor(物料管理): 重构物料选择组件为下拉选择器 feat(报废记录): 添加创建报废单、转用单及审批功能 style(报废记录): 调整表格列宽和操作按钮布局
This commit is contained in:
@@ -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'
|
||||
})
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
@@ -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 2、edit 3、view
|
||||
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>
|
||||
|
||||
Reference in New Issue
Block a user