You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

488 lines
21 KiB

11 months ago
<template>
<div class="content">
<el-tabs
v-model="editableTabsValue"
editable
class="demo-tabs"
@edit="handleTabsEdit"
type="border-card"
tab-position="left"
:stretch="false"
>
<el-tab-pane
v-for="item in data.process"
:key="item.name"
:label="item.description"
:name="item.name"
>
<el-form :model="item" label-width="auto" :rules="qualityBatchRules" ref="qualityBatchFormRef">
<el-row :gutter="20">
11 months ago
<el-col :span="12">
<el-form-item label="质量通知单号" prop="qualityNoticeNumber">
<el-input v-model="item.qualityNoticeNumber" placeholder="请输入质量通知单号" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="顺序号" prop="sequenceCode">
<el-input v-model="item.sequenceCode" placeholder="请输入顺序号" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="物料代码" prop="itemCode">
<el-input v-model="item.itemCode" placeholder="请输入物料代码" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="批次" prop="batch">
<el-input v-model="item.batch" placeholder="请输入批次" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="检验批次" prop="inspectionBatch">
<el-input v-model="item.inspectionBatch" placeholder="请输入检验批次" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="物料描述" prop="itemDesc">
<el-input v-model="item.itemDesc" placeholder="请输入物料描述" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="总数量" prop="totalAmount">
<el-input v-model="item.totalAmount" placeholder="请输入总数量" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="计量单位" prop="uom">
<el-input v-model="item.uom" placeholder="请输入计量单位" />
11 months ago
</el-form-item>
</el-col>
</el-row>
</el-form>
11 months ago
<div class="title-btn">
<div class="title">质量通知包装</div>
<el-button type="primary" plain @click="handleAdd('package')">添加包装</el-button>
</div>
<el-table :data="tableData" style="width: 100%" border>
<el-table-column prop="qualityNoticeNumber" label="质量通知单号" align="center"/>
<el-table-column prop="packageCode" label="包装编码" align="center"/>
<el-table-column prop="sequenceCode" label="顺序号" align="center"/>
<el-table-column prop="amount" label="数量" align="center"/>
<el-table-column prop="uom" label="计量单位" align="center"/>
<el-table-column prop="packUnit" label="包装规格" align="center"/>
</el-table>
<div class="title-btn">
<div class="title">质量通知任务</div>
<el-button type="primary" plain @click="handleAdd('task')">添加任务</el-button>
</div>
<el-table :data="tableData" style="width: 100%" border>
<el-table-column prop="qualityNoticeNumber" label="质量通知单号" align="center" width="150"/>
<el-table-column prop="code" label="编码" align="center" width="150"/>
<el-table-column prop="sequenceCode" label="顺序号" align="center" width="150"/>
<el-table-column prop="status" label="状态" align="center" width="150"/>
<el-table-column prop="type" label="类型" align="center" width="150"/>
<el-table-column prop="taskGroupCode" label="任务代码组" align="center" width="150"/>
<el-table-column prop="taskCode" label="任务代码" align="center" width="150"/>
<el-table-column prop="taskDesc" label="任务描述" align="center" width="150"/>
<el-table-column prop="taskDetail" label="任务详情" align="center" width="150"/>
<el-table-column prop="leaderType" label="负责人类型" align="center" width="150"/>
<el-table-column prop="leader" label="负责人" align="center"/>
<el-table-column prop="planStartTime" label="计划开始时间" align="center" width="150"/>
<el-table-column prop="planEndTime" label="计划结束时间" align="center" width="150"/>
<el-table-column prop="finishTime" label="完成时间" align="center" width="150"/>
<el-table-column prop="finishNumber" label="完成单据号" align="center" width="150"/>
</el-table>
<div class="title-btn">
<div class="title">质量通知缺陷</div>
<el-button type="primary" plain @click="handleAdd('defect')">添加缺陷</el-button>
</div>
<el-table :data="tableData" style="width: 100%" border>
<el-table-column prop="qualityNoticeNumber" label="质量通知单号" align="center" width="150"/>
<el-table-column prop="sequenceCode" label="顺序号" align="center" width="150"/>
<el-table-column prop="defectLocationCodeGroup" label="缺陷位置代码组" align="center" width="150"/>
<el-table-column prop="defectLocationCode" label="缺陷位置代码" align="center" width="150"/>
<el-table-column prop="defecTypeCodeGroup" label="缺陷类型代码组" align="center" width="150"/>
<el-table-column prop="defectTypeCode" label="缺陷类型代码" align="center" width="150"/>
<el-table-column prop="defectDesc" label="缺陷描述" align="center" width="150"/>
<el-table-column prop="defectSonItemCode" label="缺陷子物料代码" align="center" width="150"/>
<el-table-column prop="defectCount" label="缺陷数量" align="center" width="150"/>
<el-table-column prop="defectLevel" label="缺陷级别" align="center" width="150"/>
<el-table-column prop="sampleNumber" label="样本编号" align="center" width="150"/>
<el-table-column prop="inspectionRecordNumber" label="检验记录编号" align="center" width="150"/>
<el-table-column prop="reasonCodeGroup" label="原因代码组" align="center" width="150"/>
<el-table-column prop="reasonCode" label="原因代码" align="center" width="150"/>
<el-table-column prop="reasonDesc" label="原因描述" align="center" width="150"/>
</el-table>
11 months ago
</el-tab-pane>
</el-tabs>
<Dialog
11 months ago
:title="dialogTitle"
v-model="dialogVisible"
width="800px"
11 months ago
:close-on-click-modal="false"
>
<div style="padding: 0px 20px">
11 months ago
<!-- 包装弹窗 -->
<el-form ref="packageFormRef" label-width="100px" :model="packageForm" :rules="packageRules" v-if="source == 'package'">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="qualityNoticeNumber" label="质量通知单号" >
<el-input v-model="packageForm.qualityNoticeNumber" placeholder="请输入包装编码" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="packageCode" label="包装编码" >
<el-input v-model="packageForm.packageCode" placeholder="请输入包装编码" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="sequenceCode" label="顺序号" >
<el-input v-model="packageForm.sequenceCode" placeholder="请输入包装编码" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="amount" label="数量" >
<el-input v-model="packageForm.amount" placeholder="请输入包装编码" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="uom" label="计量单位" >
<el-input v-model="packageForm.uom" placeholder="请输入包装编码" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="packUnit" label="包装规格" >
<el-input v-model="packageForm.packUnit" placeholder="请输入包装编码" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<!-- 任务弹窗 -->
<el-form ref="taskFormRef" label-width="100px" :model="taskForm" :rules="taskRules" v-else-if="source == 'task'">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="qualityNoticeNumber" label="质量通知单号" >
<el-input v-model="taskFormRef.qualityNoticeNumber" placeholder="请输入包装编码" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="code" label="编码" >
<el-input v-model="taskFormRef.code" placeholder="请输入包装编码" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="sequenceCode" label="顺序号" >
<el-input v-model="taskFormRef.sequenceCode" placeholder="请输入顺序号" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="status" label="状态" >
<el-input v-model="taskFormRef.status" placeholder="请输入状态" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="type" label="类型" >
<el-input v-model="taskFormRef.type" placeholder="请输入类型" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="taskGroupCode" label="任务代码组" >
<el-input v-model="taskFormRef.taskGroupCode" placeholder="请输入任务代码组" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="taskCode" label="任务代码" >
<el-input v-model="taskFormRef.taskCode" placeholder="请输入任务代码" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="taskDesc" label="任务描述" >
<el-input v-model="taskFormRef.taskDesc" placeholder="请输入任务描述" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="taskDetail" label="任务详情" >
<el-input v-model="taskFormRef.taskDetail" placeholder="请输入任务详情" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="leaderType" label="负责人类型" >
<el-input v-model="taskFormRef.leaderType" placeholder="请输入负责人类型" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="leader" label="负责人" >
<el-input v-model="taskFormRef.leader" placeholder="请输入负责人" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="planStartTime" label="计划开始时间" >
<el-input v-model="taskFormRef.planStartTime" placeholder="请选择计划开始时间" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="planEndTime" label="计划结束时间" >
<el-input v-model="taskFormRef.planEndTime" placeholder="请选择计划结束时间" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="finishTime" label="完成时间" >
<el-input v-model="taskFormRef.finishTime" placeholder="请输入完成时间" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="finishNumber" label="完成单据号" >
<el-input v-model="taskFormRef.finishNumber" placeholder="请输入完成单据号" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<!-- 缺陷弹窗 -->
<el-form ref="defectFormRef" label-width="100px" :model="defectForm" :rules="defectRules" v-else-if="source == 'defect'">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="qualityNoticeNumber" label="质量通知单号" >
<el-input v-model="defectFormRef.qualityNoticeNumber" placeholder="请输入包装编码" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="sequenceCode" label="顺序号" >
<el-input v-model="defectFormRef.sequenceCode" placeholder="请输入顺序号" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="defectLocationCodeGroup" label="缺陷位置代码组" >
<el-input v-model="defectFormRef.defectLocationCodeGroup" placeholder="请输入缺陷位置代码组" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="defectLocationCode" label="缺陷位置代码" >
<el-input v-model="defectFormRef.defectLocationCode" placeholder="请输入缺陷位置代码" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="defecTypeCodeGroup" label="缺陷类型代码组" >
<el-input v-model="defectFormRef.defecTypeCodeGroup" placeholder="请输入缺陷类型代码组" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="defectDesc" label="缺陷描述" >
<el-input v-model="defectFormRef.defectDesc" placeholder="请输入缺陷描述" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="defectSonItemCode" label="缺陷子物料代码" >
<el-input v-model="defectFormRef.defectSonItemCode" placeholder="请输入缺陷子物料代码" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="defectCount" label="缺陷数量" >
<el-input v-model="defectFormRef.defectCount" placeholder="请输入缺陷数量" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="defectLevel" label="缺陷级别" >
<el-input v-model="defectFormRef.defectLevel" placeholder="请输入缺陷级别" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="sampleNumber" label="样本编号" >
<el-input v-model="defectFormRef.sampleNumber" placeholder="请输入样本编号" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="inspectionRecordNumber" label="检验记录编号" >
<el-input v-model="defectFormRef.inspectionRecordNumber" placeholder="请输入检验记录编号" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="reasonCodeGroup" label="原因代码组" >
<el-input v-model="defectFormRef.reasonCodeGroup" placeholder="请输入原因代码组" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="reasonCodeGroup" label="原因代码" >
<el-input v-model="defectFormRef.reasonCodeGroup" placeholder="请输入原因代码" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="reasonDesc" label="原因描述" >
<el-input v-model="defectFormRef.reasonDesc" placeholder="请输入原因描述" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-form ref="nameRef" :model="nameForm" v-else>
<el-form-item :rules="[{ required: true, message: '请输入名称', trigger: 'blur' }]" prop="name">
11 months ago
<el-input v-model="nameForm.name" style="width: 240px" placeholder="请输入名称" />
</el-form-item>
</el-form>
</div>
<template #footer>
<ButtonBase :Butttondata="Butttondata" @button-base-click="buttonBaseClick1" />
</template>
</Dialog>
11 months ago
11 months ago
</div>
</template>
<script setup lang="ts">
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
import * as defaultButtons from '@/utils/disposition/defaultButtons'
const editableTabsValue = ref('1')
11 months ago
const dialogVisible = ref(false)//弹窗
const dialogTitle = ref('')//弹窗名称
11 months ago
const nameRef = ref(false)
11 months ago
//质量物料表单
const qualityBatchFormRef = ref()
const qualityBatchRules = ref({})
11 months ago
const nameForm = ref({
name: ''
11 months ago
})//物料批次名字
11 months ago
const data = ref({
process:[]
})
11 months ago
//质量包装表单
const packageFormRef = ref()
const packageRules = ref({})
const packageForm = ref({
packageCode:''
})
//质量任务表单
const taskFormRef = ref()
const taskRules = ref({})
const taskForm = ref()
//质量缺陷表单
const defectFormRef = ref()
const defectRules = ref({})
const defectForm = ref()
const source = ref('')//点击新增来源
const tableData = ref([])
11 months ago
/** 弹窗按钮 */
let Butttondata: any = []
Butttondata = [
11 months ago
defaultButtons.formSaveBtn(null), // 保存
defaultButtons.formCloseBtn(null) // 关闭
]
// 添加移除物料批次
11 months ago
const handleTabsEdit = (targetName: TabPaneName | undefined, action: 'remove' | 'add') => {
if (action === 'add') {
nameForm.value.name = ''
11 months ago
dialogVisible.value = true
dialogTitle.value = '添加物料批次名称'
11 months ago
} else if (action === 'remove') {
const tabs = data.value.process
let activeName = editableTabsValue.value
if (activeName === targetName) {
tabs.forEach((tab, index) => {
if (tab.name === targetName) {
const nextTab = tabs[index + 1] || tabs[index - 1]
if (nextTab) {
activeName = nextTab.name
}
}
})
}
editableTabsValue.value = activeName
data.value.process = tabs.filter((tab) => tab.name !== targetName)
}
}
11 months ago
// 添加包装任务缺陷按钮
const handleAdd=(sourceArg)=>{
source.value = sourceArg
if(sourceArg == 'package'){
dialogTitle.value = '添加包装'
}else if(sourceArg == 'task'){
dialogTitle.value = '添加任务'
}else if(sourceArg == 'defec'){
dialogTitle.value = '添加缺陷'
}
dialogVisible.value = true
}
11 months ago
/** 修改名称时间 */
let tabIndex = 1
const buttonBaseClick1 = (val) => {
// 保存
if (val == 'save') {
if (!nameRef.value) return
nameRef.value.validate((valid, fields) => {
if (valid) {
const newTabName = `${++tabIndex}`
data.value.process.push({
description: nameForm.value.name,
name: newTabName,
inspectionCode: '',
dynamicUpdateCode:'',
sequenceCode: '',
inspectionCharCode: '',
inspectionCharacteristicsBaseVO: {
describe: '',
inspectionMethodCode: '',
samplingProcessCode: '',
isCanUpdate: '',
isDestructionInspection: '',
resultEntryMethod: '',
featureType: '',
quantifyIsCapping: false,
quantifyIsLowlimit: false,
quantifyIsTarget: false,
quantifyTarget: '',
quantifyCapping: '',
quantifyLowlimit: '',
quantifyUom: '',
quantifyDecimal: '',
quantifyQuantifyCode: ''
}
})
editableTabsValue.value = newTabName
11 months ago
dialogVisible.value = false
11 months ago
} else {
console.log('error submit!')
return false
}
})
}
// 关闭
else if (val == 'close') {
11 months ago
dialogVisible.value = false
11 months ago
}
}
</script>
<style scoped lang="scss">
.content {
padding: 20px;
.type {
padding: 0px 20px 20px;
}
}
11 months ago
.title-btn{
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 10px;
margin-top: 10px;
}
.title{
font-weight: bold;
font-size: 16px;
position: relative;
padding-left: 12px;
line-height: 16px;
&::after{
content:'';
position: absolute;
left: 0px;
width: 4px;
height: 16px;
top: 50%;
transform: translateY(-50%);
background: #409eff;
}
}
11 months ago
</style>