<template>
|
|
<el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :title="$t(title)" @close="onCancel" :visible.sync="visible" append-to-body width="80%">
|
|
<SelectTable ref="selectSjRef" :columns="columns"
|
|
:selectedId="selectedId"
|
|
:searchForm="searchForm"
|
|
:studyFormId = "studyFormId"
|
|
:listApi="listApi"
|
|
:selectedCode="selectedCode"
|
|
@radioSelect="handleSelect"/>
|
|
|
|
<div class="other-reagent">
|
|
<el-checkbox v-model="otherChecked" @change="handleOtherChange">其他</el-checkbox>
|
|
<el-input class="other-reagent-input" v-model="otherReagent"></el-input>
|
|
</div>
|
|
|
|
<template slot="footer" class="dialog-footer">
|
|
<el-button @click="onCancel">{{$t('form.cancel')}}</el-button>
|
|
<el-button :disabled="isDisabled" type="primary" @click="onSubmit">{{$t('form.saveConfirm')}}</el-button>
|
|
</template>
|
|
</el-dialog>
|
|
</template>
|
|
|
|
<script>
|
|
import SelectTable from '@/components/Template/SelectTable.vue';
|
|
import SelectDept from "@/views/business/comps/select/SelectDept";
|
|
import { public_yqList } from '@/api/business/public/public';
|
|
import { EventBus } from "@/utils/eventBus";
|
|
export default {
|
|
components: {
|
|
SelectTable,
|
|
SelectDept
|
|
},
|
|
props: {
|
|
type: {
|
|
type: String,
|
|
default: "",
|
|
},
|
|
title: {
|
|
type: String,
|
|
default: "选择仪器",
|
|
},
|
|
selectedCode: {
|
|
type: String,
|
|
default: "bh",
|
|
},
|
|
listApi: {
|
|
type: Function,
|
|
default: public_yqList,
|
|
},
|
|
searchForm: {
|
|
type: Object,
|
|
default: () => {
|
|
return {
|
|
mc: {
|
|
label:'仪器名称',
|
|
},
|
|
bh: {
|
|
label:'仪器编号',
|
|
},
|
|
ly: {
|
|
label:'来源',
|
|
},
|
|
}
|
|
},
|
|
},
|
|
columns: {
|
|
type: Array,
|
|
default: () => [
|
|
{
|
|
prop: 'mc',
|
|
label: '仪器名称',
|
|
},
|
|
{
|
|
prop: 'bh',
|
|
label: '仪器编号',
|
|
},
|
|
{
|
|
prop: 'ly',
|
|
label: '来源(厂家)',
|
|
},
|
|
{
|
|
prop: 'jzrq',
|
|
label: '下次校准时间',
|
|
},
|
|
],
|
|
},
|
|
},
|
|
data() {
|
|
return {
|
|
visible:false,
|
|
selectedId: "",
|
|
currentRow: {},
|
|
studyFormId:'',//有个studyFormId需要从外面动态传过来
|
|
uuid:'',//为了标识eventBus的事件id,
|
|
|
|
otherChecked: false,
|
|
otherReagent: "",//其他试剂
|
|
}
|
|
},
|
|
computed: {
|
|
isDisabled() {
|
|
if (this.otherChecked && this.otherReagent) {//如果选中了其他,那么就不校验是否选择了试剂
|
|
return false;
|
|
}else if(this.checkType === "checkbox"){
|
|
console.log(this.currentRow,"this.currentRow")
|
|
return !this.currentRow || this.currentRow.length === 0;
|
|
}
|
|
return !this.selectedId;
|
|
}
|
|
},
|
|
methods: {
|
|
show(studyFormId,data){
|
|
if(data && data.uuid) {//为了标识eventBus的事件id
|
|
this.uuid = data.uuid
|
|
}
|
|
this.selectedId = "";
|
|
this.visible = true
|
|
setTimeout(() => {
|
|
if(this.$refs.selectSjRef){
|
|
this.$refs.selectSjRef.show()
|
|
}
|
|
}, 10);
|
|
this.studyFormId = studyFormId
|
|
|
|
this.otherChecked = false;
|
|
this.otherReagent = "";
|
|
},
|
|
onCancel() {
|
|
this.visible = false
|
|
this.$emit('cancel');
|
|
},
|
|
onSubmit() {
|
|
let row = this.otherChecked ? {bh: this.otherReagent}:this.currentRow;
|
|
const selectedValue = this.otherChecked ? this.otherReagent : this.selectedId;
|
|
|
|
this.$emit('submit', selectedValue,row);
|
|
const selectInfo = this.otherChecked ?{
|
|
mc: "",
|
|
bh: row.bh,
|
|
xh: "",
|
|
jzrq: "",
|
|
}: {
|
|
mc: row.mc,
|
|
bh: row.bh,
|
|
xh: row.xh,
|
|
jzrq: row.jzrq,
|
|
}
|
|
// 触发eventBus事件
|
|
EventBus.$emit("onInstrumentSubmit",{selectInfo,uuid:this.uuid,selectedId:selectedValue,row,type:"yq"});
|
|
this.visible = false;
|
|
},
|
|
handleSelect(code,row) {
|
|
this.selectedId = code;
|
|
this.currentRow = row;
|
|
},
|
|
handleOtherChange(val) {
|
|
this.otherChecked = val;
|
|
if (val) {//如果选中了其他,那么就清空选中的id
|
|
this.selectedId = "";
|
|
this.currentRow = null;
|
|
}
|
|
},
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
.header-row{
|
|
display: flex;
|
|
align-items: center;
|
|
padding: 20px 0;
|
|
}
|
|
.other-reagent {
|
|
display: flex;
|
|
align-items: center;
|
|
padding: 20px 0;
|
|
}
|
|
|
|
.other-reagent-input {
|
|
width: 200px;
|
|
margin-left: 5px;
|
|
}
|
|
</style>
|