中航光电热表web
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.
 
 
 
 

617 lines
31 KiB

<template>
<el-dialog title="新增" append-to-body :modelValue="openShow" width="70%" @close="closeDialog">
<el-form ref="form" :model="form" label-width="150px" :rules="rules">
<el-row :gutter="24">
<el-col :span="8">
<el-form-item label="作业中心:" prop="workCenterId">
<el-select v-model="form.workCenterId" :disabled="type == 'view'" placeholder="请选择" @change="changeWorkCenter">
<el-option v-for="item in workList" :key="item.id" :label="item.wcName" :value="item.id" />
<!-- <el-option label="作业中心2" value="2" /> -->
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="作业槽:" prop="workTankId">
<el-select v-model="form.workTankId" :disabled="type == 'view'" placeholder="请选择" filterable
clearable>
<el-option v-for="item in tankList" :key="item.id" :label="item.workTankCode" :value="item.id" />
<!-- <el-option label="作业槽2" value="2" /> -->
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="分析项目:" prop="testElement">
<el-input v-model="form.testElement" :disabled="type == 'view'" placeholder="请输入" />
</el-form-item>
</el-col>
<el-col :span="8">
<!-- <el-form-item label="工艺含量:" prop="gongyihanliang">
<el-input v-model="input" placeholder="请输入" />
</el-form-item> -->
<el-form-item label="规范上下限(g/L):" prop="standardLimit">
<div style="display: flex;">
<el-input v-model="form.normValueMin" :disabled="type == 'view'" placeholder="请输入" />
~<el-input v-model="form.normValueMax" :disabled="type == 'view'" placeholder="请输入" />
</div>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="目标上下限:">
<div style="display: flex;">
<el-input v-model="form.targetValueMin" :disabled="type == 'view'" placeholder="请输入" />
~<el-input v-model="form.targetValueMax" :disabled="type == 'view'" placeholder="请输入" />
</div>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="目标值:" prop="targetValue">
<el-input v-model="form.targetValue" :disabled="type == 'view'" placeholder="请输入" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="添加点:">
<el-input v-model="form.fillingLocation" :disabled="type == 'view'" placeholder="请输入" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="体积:">
<el-input v-model="form.volume" :disabled="type == 'view'" placeholder="请输入" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="测量值单位:" prop="testUnit">
<el-input v-model="form.testUnit" :disabled="type == 'view'" placeholder="请输入" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="添加值单位:" prop="addUnit">
<el-input v-model="form.addUnit" :disabled="type == 'view'" placeholder="请输入" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="加药量计算公式:" prop="addDrugFormulaId" label-width="150px">
<el-select v-model="form.addDrugFormulaId" :disabled="type == 'view'" placeholder="请选择" filterable
clearable>
<el-option v-for="item in drugList" :key="item.id" :label="item.name" :value="item.id" />
<!-- <el-option label="计算公式2" value="2" /> -->
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="添加后理论值公式:" prop="afterTheoryFormulaId" label-width="150px">
<el-select v-model="form.afterTheoryFormulaId" :disabled="type == 'view'" placeholder="请选择" filterable
clearable>
<el-option v-for="item in afterTheoryList" :key="item.id" :label="item.name" :value="item.id" />
<!-- <el-option label="计算公式2" value="2" /> -->
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="温度范围:">
<div style="display: flex;">
<el-radio-group v-model="form.temperatureType" :disabled="type == 'view'">
<el-radio :value="1">无温度</el-radio>
<el-radio :value="2">室内温度</el-radio>
<el-radio :value="3">环境温度</el-radio>
<el-radio :value="4">温度范围</el-radio>
</el-radio-group>
</div>
<div style="margin-left: 32px;display: flex;" v-if="form.temperatureType == 2">
<el-input v-model="form.temperatureInRoom" :disabled="type == 'view'" placeholder="请输入" />
</div>
<div style="margin-left: 32px;display: flex;" v-if="form.temperatureType == 3">
<el-input v-model="form.temperatureEnv" :disabled="type == 'view'" placeholder="请输入" />
</div>
<div style="margin-left: 32px;display: flex;" v-if="form.temperatureType == 4">
<el-input v-model="form.temperatureRangeLeft" :disabled="type == 'view'" placeholder="请输入" />
~<el-input v-model="form.temperatureRangeRight" :disabled="type == 'view'" placeholder="请输入" />
</div>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="PH值范围:">
<div style="display: flex;">
<el-radio-group v-model="form.phType" :disabled="type == 'view'">
<el-radio :value="1">无PH值</el-radio>
<el-radio :value="2">PH值范围</el-radio>
</el-radio-group>
<div style="margin-left: 32px;display: flex;" v-if="form.phType == 2">
<el-input v-model="form.phRangeLeft" :disabled="type == 'view'" placeholder="请输入" />
~<el-input v-model="form.phRangeRight" :disabled="type == 'view'" placeholder="请输入" />
</div>
</div>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="药品名称:">
<el-input v-model="form.drugName" :disabled="type == 'view'" placeholder="请输入" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="药品物料号:" prop="drugMaterialId">
<el-select v-model="form.drugMaterialId" :disabled="type == 'view'" placeholder="请选择" @change="changeGoods" filterable
clearable>
<el-option v-for="item in drugMaterialOptions" :key="item.id" :label="item.goodsCode" :value="item.id" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="药品物料名称:" prop="drugMaterialName">
<el-input v-model="form.drugMaterialName" placeholder="请输入" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="测试周期(天):" prop="analysisCycle" >
<el-input-number v-model="form.analysisCycle" :disabled="type == 'view'" :min="1" controls-position="right" @change="handleChange" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="化验人:" prop="testUserId">
<el-select v-model="form.testUserId" :disabled="type == 'view'" placeholder="请选择" filterable
clearable>
<el-option v-for="item in personList" :key="item.id" :label="item.realName" :value="item.id" />
<!-- <el-option label="化验人2" value="2" /> -->
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="主管工艺:" prop="processUserId">
<el-select v-model="form.processUserId" :disabled="type == 'view'" placeholder="请选择" filterable
clearable>
<el-option v-for="item in managerList" :key="item.id" :label="item.realName" :value="item.id" />
<!-- <el-option label="工艺2" value="2" /> -->
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="班组:" prop="teamId">
<el-select v-model="form.teamId" :disabled="type == 'view'" placeholder="请选择" filterable
clearable>
<el-option v-for="item in teamList" :key="item.id" :label="item.tsName" :value="item.id" />
<!-- <el-option label="班组2" value="2" /> -->
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="分析周期:" prop="jobType">
<el-select placeholder="请选择试验周期" :disabled="type == 'view'" v-model="form.jobType" @change="changeCycle" filterable
clearable>
<el-option label="每周" :value="1"></el-option>
<el-option label="每月" :value="2"></el-option>
<el-option label="每年" :value="3"></el-option>
</el-select>
</el-form-item>
<div style="margin-left: 100px;" v-if="form.jobType == 1">
<el-checkbox-group v-model="form.weekList" :disabled="type == 'view'">
<el-checkbox style="margin-right:25px !important;" label="周一" value="1" />
<el-checkbox style="margin-right:25px !important;" label="周二" value="2"></el-checkbox>
<el-checkbox style="margin-right:25px !important;" label="周三" value="3"></el-checkbox>
<el-checkbox style="margin-right:25px !important;" label="周四" value="4"></el-checkbox>
<el-checkbox style="margin-right:25px !important;" label="周五" value="5"></el-checkbox>
<el-checkbox style="margin-right:25px !important;" label="周六" value="6"></el-checkbox>
<el-checkbox style="margin-right:25px !important;" label="周日" value="7"></el-checkbox>
</el-checkbox-group>
</div>
<div style="margin-left: 100px;" v-if="form.jobType == 2">
<div style="display: flex;align-items: center;" v-if="type != 'view'">
<span>时间:每月</span>
<el-select v-model="form.monthValue" :disabled="type == 'view'" style="width: 100px;margin: 0 5px;" filterable
clearable>
<el-option v-for="item in 31" :key="item" :label="item" :value="item"></el-option>
</el-select>
<span>日</span>
<el-button style="margin-left: 10px;" type="primary" circle @click="addMonth"><el-icon>
<Plus />
</el-icon></el-button>
</div>
<div style="display: flex;flex-wrap: wrap;margin-top: 10px;">
<el-tag v-for="tag in monthTags" :key="tag" closable type="info"
style="width: 62px;margin-right: 5px;margin-top: 10px;"
@close="closeMonthTag(tag, index)">
{{ tag }}
</el-tag>
</div>
<div>
<el-checkbox :disabled="type == 'view'" v-model="form.isPutOff" label="任务若遇周末或当月无该日期,顺延至下周一" />
</div>
</div>
<div style="margin-left: 100px;" v-if="form.jobType == 3">
<div style="display: flex;align-items: center;">
<span>时间</span>
<el-select v-model="form.yearMonth" style="width: 60px;margin: 0 5px;" filterable
clearable>
<el-option v-for="item in 12" :key="item" :label="item" :value="item"></el-option>
</el-select>
<span>月</span>
<el-select v-model="form.yearDays" style="width: 60px;margin: 0 5px;" filterable
clearable>
<el-option v-for="item in 31" :key="item" :label="item" :value="item"></el-option>
</el-select>
<span>日</span>
<el-button style="margin-left: 10px;" type="primary" circle @click="addYears"><el-icon>
<Plus />
</el-icon></el-button>
</div>
<div style="display: flex;flex-wrap: wrap;margin-top: 10px;">
<el-tag v-for="(tag, index) in yearTags" :key="tag" closable type="info"
style="width: 86px;margin-right: 5px;margin-top: 10px;"
@close="closeYearsTag(tag, index)">
{{ tag }}
</el-tag>
</div>
<div>
<el-checkbox :disabled="type == 'view'" v-model="form.isPutOff" label="任务若遇周末或当月无该日期,顺延至下周一" />
</div>
</div>
</el-col>
<!-- <el-col :span="8">
<el-form-item label="有效期:" prop="validDate">
<el-date-picker :disabled="type == 'view'" v-model="form.validDate" type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD" placeholder="请选择" style="width: 100%;" />
</el-form-item>
</el-col> -->
</el-row>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="closeDialog(false)">取 消</el-button>
<el-button type="primary" v-if="type != 'view'" @click="submit"> </el-button>
</span>
</template>
</el-dialog>
</template>
<script>
import {getFormula,getTank,getWorkCenter,getPerson,getManager,getTeam,addInfo,getDetail,editInfo,getSelectMaterial} from '@/api/tankSolutionSystem/info'
export default {
props: {
showDialog: {
type: Boolean,
default: false
},
rowId:{
type:String,
default:''
},
type:{
type:String,
default:'add'
}
},
data() {
var checkStandard = (rule, value, callback) => {
if(!this.form.normValueMin || !this.form.normValueMax){
return callback(new Error('规范上下限不能为空'));
}
if(!/^-?\d+(\.\d+)?$/.test(this.form.normValueMin) || !/^-?\d+(\.\d+)?$/.test(this.form.normValueMax)){
return callback(new Error('请输入数字值'));
}
if(Number(this.form.normValueMin) > Number(this.form.normValueMax)){
callback(new Error('上限需比下限大'));
}else{
callback()
}
};
return {
openShow: false,
form: {},
drugMaterialOptions:[],
rules: {
workCenterId: [
{ required: true, message: '请选择作业中心', trigger: 'blur' },
],
workTankId: [
{ required: true, message: '请选择作业槽', trigger: 'blur' },
],
testElement: [
{ required: true, message: '请输入分析项目', trigger: 'blur' },
],
standardLimit: [
// { required: true, message: '请选择', trigger: 'blur' },
{required: true,validator: checkStandard, trigger: 'blur'}
],
targetValue: [
{ required: true, message: '请输入目标值', trigger: 'blur' },
],
addDrugFormulaId: [
{ required: true, message: '请选择加药量计算公式', trigger: 'blur' },
],
afterTheoryFormulaId: [
{ required: true, message: '请选择添加后理论值公式', trigger: 'blur' },
],
testUserId: [
{ required: true, message: '请选择化验人', trigger: 'blur' },
],
processUserId: [
{ required: true, message: '请选择主管工艺', trigger: 'blur' },
],
// validDate: [
// { required: true, message: '请选择有效期', trigger: 'blur' },
// ],
analysisCycle: [
{ required: true, message: '请选择测试周期', trigger: 'blur' },
],
jobType: [
{ required: true, message: '请选择分析周期', trigger: 'blur' },
],
// drugMaterialId: [
// { required: true, message: '请选择', trigger: 'blur' },
// ],
// drugMaterialName: [
// { required: true, message: '请输入', trigger: 'blur' },
// ],
teamId: [
{ required: true, message: '请选择班组', trigger: 'blur' },
],
testUnit:[
{ required: true, message: '请输入测量值单位', trigger: 'blur' },
],
addUnit:[
{ required: true, message: '请输入添加值单位', trigger: 'blur' },
],
},
workList:[],
monthTags: [],
yearTags: [],
drugList:[],
afterTheoryList:[],
tankList:[],
personList:[],
managerList:[],
teamList:[]
}
},
mounted() {
this.openShow = this.showDialog
this.getFormulaList()
this.getWorkCenterList()
this.getTankList()
this.getPersonList()
this.getManagerList()
this.getTeamList()
this.getGoods()
if(this.rowId){
this.getInfoDetail()
}
},
methods: {
getGoods(){
getSelectMaterial().then(res =>{
this.drugMaterialOptions = res.data.data
})
},
changeGoods(val){
let tmp = this.drugMaterialOptions.find(item => item.id == val)
this.form.drugMaterialName = tmp.goodsName
},
// 获取详情
getInfoDetail(){
getDetail({id:this.rowId}).then(res =>{
this.form = {
...res.data.data,
isPutOff:res.data.data.isPutOff == 1 ? true : false,
teamId:res.data.data.teamId + '',
drugMaterialId:res.data.data.drugMaterialId + '',
workCenterId:res.data.data.workCenterId + '',
testUserId:res.data.data.testUserId + '',
processUserId:res.data.data.processUserId + '',
}
if(this.form.jobType == 1){
this.form = {
...this.form,
weekList:res.data.data.jobTypeWeekValue.split(','),
}
}else if(this.form.jobType == 2){
this.monthTags = res.data.data.jobTypeMonthValue.split(',').map(str => {
const num = parseInt(str, 10); // 转为数字,自动去除前导零
return num + '日';
})
}else if(this.form.jobType == 3){
this.yearTags = res.data.data.jobTypeYearValue.split(',').map(str => {
const month = parseInt(str.substring(0, 2), 10); // 取前两位作为月
const day = parseInt(str.substring(2, 4), 10); // 取后两位作为日
return `${month}${day}`;
});
}
})
},
// 作业中心下拉
getWorkCenterList(){
getWorkCenter().then(res =>{
this.workList = res.data.data
})
},
// 主管工艺下拉
getManagerList(){
getManager().then(res =>{
this.managerList = res.data.data
})
},
// 班组下拉
getTeamList(){
getTeam().then(res =>{
this.teamList = res.data.data
})
},
// 获取添加量计算公式
getFormulaList(){
getFormula({formulaType:1}).then(res =>{
this.drugList = res.data.data
})
getFormula({formulaType:2}).then(res =>{
this.afterTheoryList = res.data.data
})
},
// 查询作业槽下拉列表
getTankList(val){
getTank({workstationId:val ? val : ''}).then(res =>{
this.tankList = res.data.data
})
},
// 化验人下拉
getPersonList(){
getPerson().then(res =>{
res.data.data.map(item =>{
item.id = item.id + ''
})
this.personList = res.data.data
})
},
// 切换作业中心
changeWorkCenter(){
this.form.workTankId = ''
this.getTankList(this.form.workCenterId)
},
// 切换周期
changeCycle() {
this.form.monthValue = ''
this.form.weekList = []
this.monthTags = []
this.form.yearMonth = ''
this.form.yearDays = ''
this.yearTags = []
},
// 添加月份日期
addMonth() {
if(this.type == 'view'){
return
}
if(!this.form.monthValue) return
let value = this.form.monthValue + '日'
if (this.monthTags.find(item => item == value)) return
this.monthTags.push(this.form.monthValue + '日')
},
// 添加年份日期
addYears() {
let value = this.form.yearMonth + '月' + this.form.yearDays + '日'
if (this.yearTags.find(item => item == value)) return
if (this.form.yearMonth == '' || this.form.yearDays == '') return
this.yearTags.push(this.form.yearMonth + '月' + this.form.yearDays + '日')
},
// 删除月份日期
closeMonthTag(item, index) {
if(this.type == 'view'){
return
}
this.monthTags = this.monthTags.filter(tags => tags != item)
},
// 删除年份日期
closeYearsTag(item, index) {
this.yearTags = this.yearTags.filter(tags => tags != item)
},
// 点击确定按钮
submit(){
this.$refs.form.validate(valid =>{
if(valid){
console.log('form---------------',this.form)
let monthArr = []
let yearArr = []
if(this.form.jobType == 2){
if(this.monthTags.length == 0){
this.$message.error('请选择日期')
return
}
monthArr = this.monthTags.map(str => {
// 提取数字部分(匹配连续的数字)
const num = str.match(/\d+/)?.[0] || '0';
// 补零到两位
return num.padStart(2, '0');
});
}
if(this.form.jobType == 1){
if(this.form.weekList.length == 0){
this.$message.error('请选择日期')
return
}
}
if(this.form.jobType == 3){
if(this.yearTags.length == 0){
this.$message.error('请选择日期')
return
}
yearArr = this.yearTags.map(str => {
// 使用正则匹配“数字 + 月 + 数字 + 日”结构
const match = str.match(/(\d+)月(\d+)日/);
if (!match) return '0000'; // 防御性处理:格式不符时返回默认值
const month = match[1].padStart(2, '0');
const day = match[2].padStart(2, '0');
return month + day;
});
}
let params = {
workCenterId:this.form.workCenterId,
workTankId:this.form.workTankId,
testElement:this.form.testElement,
normValueMin:this.form.normValueMin,
normValueMax:this.form.normValueMax,
targetValueMin:this.form.targetValueMin ? this.form.targetValueMin : '',
targetValueMax:this.form.targetValueMax ? this.form.targetValueMax : '',
targetValue:this.form.targetValue,
fillingLocation:this.form.fillingLocation ? this.form.fillingLocation : '',
volume:this.form.volume ? this.form.volume : '',
testUnit:this.form.testUnit,
addUnit:this.form.addUnit,
addDrugFormulaId:this.form.addDrugFormulaId,
afterTheoryFormulaId:this.form.afterTheoryFormulaId,
temperatureType:this.form.temperatureType ? this.form.temperatureType : '',
temperatureInRoom:this.form.temperatureInRoom ? this.form.temperatureInRoom : '',
temperatureEnv:this.form.temperatureEnv ? this.form.temperatureEnv : '',
temperatureRangeLeft:this.form.temperatureRangeLeft ? this.form.temperatureRangeLeft : '',
temperatureRangeRight:this.form.temperatureRangeRight ? this.form.temperatureRangeRight : '',
phType:this.form.phType ? this.form.phType : '',
phRangeLeft:this.form.phRangeLeft ? this.form.phRangeLeft : '',
phRangeRight:this.form.phRangeRight ? this.form.phRangeRight : '',
drugName:this.form.drugName ? this.form.drugName : '',
drugMaterialId:this.form.drugMaterialId ? this.form.drugMaterialId : '',
drugMaterialName:this.form.drugMaterialName ? this.form.drugMaterialName : '',
testUserId:this.form.testUserId,
processUserId:this.form.processUserId,
teamId:this.form.teamId,
jobType:this.form.jobType,
jobTypeWeekValue:this.form.jobType == 1 ? this.form.weekList.join(',') : '',
jobTypeMonthValue:this.form.jobType == 2 ? monthArr.join(',') : '',
jobTypeYearValue:this.form.jobType == 3 ? yearArr.join(',') : '',
isPutOff:this.form.isPutOff ? 1 : 0,
// validDate:this.form.validDate,
analysisCycle:this.form.analysisCycle
}
console.log('params----------------',params)
if(this.type == 'add'){
addInfo(params).then(res =>{
if(res.data.code == 200){
this.$message.success('新增成功')
this.closeDialog(true)
}
})
}else{
editInfo({...params,id:this.rowId}).then(res =>{
if(res.data.code == 200){
this.$message.success('修改成功')
this.closeDialog(true)
}
})
}
}
})
},
closeDialog(val) {
this.openShow = false
this.$emit('closeDialog',val);
}
}
}
</script>
<style lang="scss" scoped></style>