<template>
|
|
<el-dialog :title="$t(title)" @close="onCancel" :visible.sync="visible" append-to-body width="80%">
|
|
<!-- 麻醉/精神药品配制/领取申请单 -->
|
|
<div v-if="type === 'MJYLQSQD'" class="header-row">
|
|
<el-radio-group v-model="radio" @input="changeRadio">
|
|
<el-radio :label="1">试验</el-radio>
|
|
<el-radio :label="2">
|
|
部门
|
|
</el-radio>
|
|
</el-radio-group>
|
|
<select-dept v-if="radio==2" v-model="depart" style="width:200px;margin-left:10px" />
|
|
</div>
|
|
|
|
<SelectTable v-if = "isShowTable" ref="selectSjRef" :columns="columns"
|
|
:selectedId="selectedId"
|
|
:searchForm="searchForm"
|
|
:listApi="listApi"
|
|
:selectedCode="selectedCode"
|
|
@radioSelect="handleSelect"/>
|
|
<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_bzList } from '@/api/business/public/public';
|
|
|
|
export default {
|
|
components: {
|
|
SelectTable,
|
|
SelectDept
|
|
},
|
|
props: {
|
|
type: {
|
|
type: String,
|
|
default: "",
|
|
},
|
|
title: {
|
|
type: String,
|
|
default: "page.business.resource.sj.xzsj",
|
|
},
|
|
selectedCode: {
|
|
type: String,
|
|
default: "bh",
|
|
},
|
|
listApi: {
|
|
type: Function,
|
|
default: public_sjList,
|
|
},
|
|
searchForm: {
|
|
type: Object,
|
|
default: () => {
|
|
return {
|
|
mc: {
|
|
label:'page.business.resource.sj.sjmc',
|
|
},
|
|
bh: {
|
|
label:'page.business.resource.sj.sjbh',
|
|
},
|
|
studyName: {
|
|
label:'page.business.resource.sj.sssy',
|
|
},
|
|
}
|
|
},
|
|
},
|
|
columns: {
|
|
type: Array,
|
|
default: () => [
|
|
{
|
|
prop: 'mc',
|
|
label: 'page.business.resource.sj.sjmc',
|
|
},
|
|
{
|
|
prop: 'bh',
|
|
label: 'page.business.resource.sj.sjbh',
|
|
},
|
|
{
|
|
prop: 'nd',
|
|
label: 'page.business.resource.sj.sjnd',
|
|
},
|
|
{
|
|
prop: 'nddw',
|
|
label: 'page.business.resource.gsp.nddw',
|
|
},
|
|
{
|
|
prop: 'sxr',
|
|
label: 'page.business.resource.sj.sxr',
|
|
},
|
|
{
|
|
prop: 'studyName',
|
|
label: 'page.business.resource.sj.sssy',
|
|
},
|
|
],
|
|
},
|
|
},
|
|
data() {
|
|
return {
|
|
visible:false,
|
|
selectedId: "",
|
|
currentRow: {},
|
|
radio:1,
|
|
|
|
bzList:[],
|
|
depart:"",
|
|
}
|
|
},
|
|
computed: {
|
|
isShowTable() {
|
|
if(this.type === 'MJYLQSQD') {
|
|
return this.radio === 1;
|
|
}
|
|
return true;
|
|
},
|
|
isDisabled() {
|
|
if(this.type === 'MJYLQSQD') {
|
|
if(this.radio === 1) {//选择试验的时候必须要选中一项才能点击确定
|
|
return !this.selectedId;
|
|
}else{
|
|
return !this.depart;
|
|
}
|
|
}
|
|
return !this.selectedId;
|
|
}
|
|
},
|
|
methods: {
|
|
show(){
|
|
this.visible = true
|
|
this.showTableData()
|
|
if(this.type === 'MJYLQSQD'){
|
|
this.getBzList()
|
|
}
|
|
},
|
|
getBzList(){
|
|
public_bzList(this.searchForm).then(response => {
|
|
this.bzList = response.data
|
|
});
|
|
},
|
|
showTableData(){
|
|
if(this.$refs.selectSjRef){
|
|
this.$refs.selectSjRef.show()
|
|
}else{
|
|
setTimeout(() => {
|
|
this.showTableData()
|
|
}, 100);
|
|
}
|
|
},
|
|
onCancel() {
|
|
this.visible = false
|
|
this.$emit('cancel');
|
|
},
|
|
onSubmit() {
|
|
let row = this.currentRow;
|
|
if(this.type === 'MJYLQSQD') {
|
|
if(this.radio === 1) {
|
|
row = row;
|
|
row.type=this.radio
|
|
}else{
|
|
const o = this.bzList.find(item => item.deptId == this.depart);
|
|
if(o){
|
|
row = o;
|
|
row.type=this.radio
|
|
}else{
|
|
this.$message.error(`该部门没有设置部长!`)
|
|
return
|
|
}
|
|
}
|
|
}
|
|
this.$emit('submit', this.selectedId,row);
|
|
},
|
|
handleSelect(code,row) {
|
|
this.selectedId = code;
|
|
this.currentRow = row;
|
|
},
|
|
changeRadio(val){
|
|
if(val==1){
|
|
this.showTableData()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
.header-row{
|
|
display: flex;
|
|
align-items: center;
|
|
padding: 20px 0;
|
|
}
|
|
</style>
|