华西海圻ELN前端工程
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.
 
 
 
 

213 lines
7.2 KiB

<!-- 试剂/供试品/给药制剂弹窗 -->
<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%">
<el-radio-group v-show="mixType" v-model="selectType" @change="handleShowTableInfo" class="mt-20 mb-20">
<el-radio-button label="1">试剂列表</el-radio-button>
<el-radio-button label="7">供试品列表</el-radio-button>
<el-radio-button label="3">给药制剂列表</el-radio-button>
</el-radio-group>
<SelectTable ref="selectSjRef" :columns="columns" :selectedId="selectedId" :searchForm="searchForm"
:studyFormId="studyFormId" :studyId="studyId" :listApi="listApi" :selectedCode="selectedCode" @radioSelect="handleSelect" />
<!-- 只有步骤才会又这个选项 -->
<div v-if="sourceFrom === 'step'" 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_sjList, public_gyzjList, public_gspList, public_xbList,public_jcbList,public_qxFormFillList } from '@/api/business/public/public';
import { getSjSearchForm, getSjColumns, getGyzjSearchForm, getGyzjColumns, getGspSearchForm, getGspColumns, getXbSearchForm, getXbColumns,getJcbSearchForm,getJcbColumns,getQxbdSearchForm,getQxbdColumns } from '@/views/business/comps/template/formConfig/formConfig.js';
import { EventBus } from "@/utils/eventBus";
const typeMap = {
'1': {
searchForm: getSjSearchForm(),
columns: getSjColumns(),
listApi: public_sjList,
title:"选择试剂"
},
'7': {
searchForm: getGspSearchForm(),
columns: getGspColumns(),
listApi: public_gspList,
title:"选择供试品"
},
"11": {
searchForm: getXbSearchForm(),
columns: getXbColumns(),
listApi: public_xbList,
title:"选择细胞"
},
"3": {
searchForm: getGyzjSearchForm(),
columns: getGyzjColumns(),
listApi: public_gyzjList,
title:"选择给药制剂"
},
"13": {
searchForm: getJcbSearchForm(),
columns: getJcbColumns(),
listApi: public_jcbList,
title:"请选择检测板"
},
"15": {
searchForm: getQxbdSearchForm(),
columns: getQxbdColumns(),
listApi: public_qxFormFillList,
title:"请选择前序表单"
},
}
export default {
components: {
SelectTable,
SelectDept
},
props: {
type: {
type: String,
default: "",
},
},
data() {
return {
visible: false,
otherChecked: false,
selectedId: "",
selectedCode: "bh",
currentRow: {},
radio: 1,
bzList: [],
depart: "",
studyFormId: '',//有个studyFormId需要从外面动态传过来
studyId:'',//有个studyId需要从外面动态传过来
uuid: '',//为了标识eventBus的事件id,
selectType: '1',//默认选择试剂列表
listApi: public_sjList,
searchForm: getSjSearchForm(),
columns: getSjColumns(),
sourceFrom: "step",//来源
otherReagent: "",//其他试剂
mixType: false,//是否是混合试剂
title:"选择试剂",
currentType: '1',//当前选择的类型
}
},
computed: {
isDisabled() {
if (this.otherChecked && this.otherReagent) {//如果选中了其他,那么就不校验是否选择了试剂
return false;
}
return !this.selectedId;
}
},
methods: {
show(studyFormId, data,studyId) {
if (data && data.uuid) {//为了标识eventBus的事件id
this.uuid = data.uuid
}
//type:sj(试剂列表)gsp(供试品列表)gyzj(给药制剂列表)
const { type, sourceFrom = "step", mixType = false } = data;
this.currentType = type;
if(type==15){
this.selectedCode = 'id'
}
this.mixType = mixType;
this.sourceFrom = sourceFrom;
this.studyFormId = studyFormId;
this.studyId = studyId || '';
this.visible = true;
this.handleShowTableInfo(type);
},
hide() {
this.visible = false;
},
handleOtherChange(val) {
this.otherChecked = val;
if (val) {//如果选中了其他,那么就清空选中的id
this.selectedId = "";
this.currentRow = {};
}
},
handleShowTableInfo(type) {
this.selectType = type;
this.searchForm = typeMap[type].searchForm;
this.columns = typeMap[type].columns;
this.listApi = typeMap[type].listApi;
this.listApi = typeMap[type].listApi || this.listApi;
this.title = typeMap[type].title || this.title;
setTimeout(() => {
if (this.$refs.selectSjRef) {
this.$refs.selectSjRef.show()
}
}, 10);
},
onCancel() {
this.visible = false
this.$emit('cancel');
},
onSubmit() {
let row = this.currentRow;
const selectedValue = this.otherChecked ? this.otherReagent : this.selectedId;
const selectInfo = {
mc: row.mc,
bh: row.bh,
nd: row.nd,
ly: row.ly,
nddw: row.nddw,
sxrq: row.sxr,
ndz: (row.nd||"")+(row.nddw||""),
type: Number(this.selectType),
}
this.$emit('submit', selectedValue, row);
// 触发eventBus事件
EventBus.$emit("onMixReagentSubmit", { selectInfo, uuid: this.uuid, selectedId: selectedValue, row,selectType:this.selectType });
// this.visible = false;
},
// 选择试剂时处理
handleSelect(code, row) {
this.selectedId = code;
if(this.currentType==15){//如果是前序表单,那么选中的id是bdmc
this.selectedId = row.bdmc+'('+row.bdbh+')'
}
this.currentRow = row;
},
}
}
</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;
}
.mt-20 {
margin-top: 20px;
}
.mb-20 {
margin-bottom: 20px;
}
</style>