|
@@ -4,25 +4,24 @@
|
|
|
</crumbs>
|
|
|
<div class="contentWrapper">
|
|
|
<div class="content">
|
|
|
- <el-form :model="form" ref="ruleForm" class="selectHospital">
|
|
|
- <el-form-item label="模板名称:" prop="name" class="formItem">
|
|
|
+ <el-form :model="form" :rules="rules" ref="form" class="selectHospital">
|
|
|
+ <el-form-item label="模板名称:" prop="tempName" class="formItem">
|
|
|
<el-input v-model="form.tempName" placeholder="请输入模板名称"></el-input>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="所属医院:" prop="hospitalName" class="formItem">
|
|
|
+ <el-form-item label="所属医院:" prop="hospital" class="formItem">
|
|
|
<el-select v-model="form.hospital" placeholder="请选择医院" class="selectHospital">
|
|
|
- <el-option v-for="item in hospitalList" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
|
|
+ <el-option v-for="item in hospitalList" :key="item.id" :label="item.name" :value="item.val"></el-option>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="选择模块:" prop="module" class="formItem">
|
|
|
- <el-select v-model="form.module" placeholder="请选择模块" class="selectModule">
|
|
|
- <el-option v-for="item in moduleList" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
|
|
+ <el-form-item label="选择模块:" prop="moduleName" class="formItem">
|
|
|
+ <el-select v-model="form.moduleName" placeholder="请选择模块" class="selectModule">
|
|
|
+ <el-option v-for="item in moduleList" :key="item.id" :label="item.name" :value="item.val"></el-option>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="添加模块内容:" prop="moduleInfo" class="formItem">
|
|
|
<div class="moduleInfoItem" v-for="(item,index) in moduleInfoList">
|
|
|
<div class="searchBox">
|
|
|
<el-input v-model.trim="item.searchName" placeholder="搜索字段单元" @input="searchFiled(index)">
|
|
|
-
|
|
|
</el-input>
|
|
|
<ul v-if="searchIndex == index && item.searchResult.length > 0" class="searchResultBox">
|
|
|
<li class="searchItem"
|
|
@@ -36,93 +35,115 @@
|
|
|
</div>
|
|
|
<div>
|
|
|
<p>已选择字段:</p>
|
|
|
- <div class="selectFiled" v-for="(it,ii) in item.selectFiled">
|
|
|
- <div class="orderBox">
|
|
|
- <span v-if="ii !=0" class="el-icon-top order" :class="{lastItem:ii ==item.selectFiled.length}" @click="upFiled(ii,index)"></span>
|
|
|
- <span v-if="ii !=item.selectFiled.length-1" class="el-icon-bottom order" :class="{firstItem:ii == 0}" @click="downFiled(ii,index)"></span>
|
|
|
+ <div class="selectFiledBox">
|
|
|
+ <div class="orderBox">
|
|
|
+ <span class="el-icon-arrow-up order" @click="upFiled(index)"></span>
|
|
|
+ <span class="el-icon-arrow-down order" @click="downFiled(index)"></span>
|
|
|
+ </div>
|
|
|
+ <div class="selectFiled" v-for="(it,ii) in item.selectFiled">
|
|
|
+ <span class="filedName" :class="{activeFiledName: item.activeIndex == ii}" @click="setActiveIndex(index,ii)">{{it.name}}
|
|
|
+ <span class="el-icon-circle-close delFiled" @click="delSelected(ii,index)"></span>
|
|
|
+ </span>
|
|
|
+
|
|
|
</div>
|
|
|
- <span class="filedName">{{it.name}}
|
|
|
- <span class="el-icon-circle-close delFiled" @click="delSelected(ii,index)"></span>
|
|
|
- </span>
|
|
|
-
|
|
|
</div>
|
|
|
+
|
|
|
</div>
|
|
|
<span class="el-icon-circle-close delUnit" @click="delUnit(index)"></span>
|
|
|
</div>
|
|
|
- <span class="addUnit" @click="addUnit">+单元组</span>
|
|
|
+ <span class="addUnit" @click="addUnit">+单元组</span>
|
|
|
</el-form-item>
|
|
|
</el-form>
|
|
|
+ <el-button class="disclButn" size="small" type="primary" :disabled = 'saveDisable' @click="confirm('form')">确定</el-button>
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
</template>
|
|
|
<script>
|
|
|
-// import api from '@api/safeControl.js';
|
|
|
+import api from '@api/qualityControl.js';
|
|
|
export default {
|
|
|
name:"AddQualityControlTemp",
|
|
|
data: function(){
|
|
|
return {
|
|
|
title: "模板维护-添加",
|
|
|
+ isEdit:false,
|
|
|
+ isCopy: false,
|
|
|
+ saveDisable: false,
|
|
|
form:{
|
|
|
tempName: "",
|
|
|
hospital:"",
|
|
|
module:"",
|
|
|
},
|
|
|
+ rules:{
|
|
|
+ tempName:{ required: true, message: '请输入模块名称', trigger: ['blur', 'change']},
|
|
|
+ hospital:{ required: true, message: '请选择医院', trigger: ['blur', 'change']},
|
|
|
+ moduleName:{ required: true, message: '请输入选择模块', trigger: ['blur', 'change']},
|
|
|
+ /*name:[{ required: true, message: '请输入显示名称',trigger: ['blur', 'change'] }],*/
|
|
|
+ },
|
|
|
searchIndex: -1,
|
|
|
- hospitalList:[
|
|
|
- {
|
|
|
- id: 1,
|
|
|
- name:"台州"
|
|
|
- },
|
|
|
- {
|
|
|
- id: 2,
|
|
|
- name:"长兴"
|
|
|
- }
|
|
|
- ],
|
|
|
- moduleList:[
|
|
|
- {
|
|
|
- id: 1,
|
|
|
- name:"入院记录"
|
|
|
- },
|
|
|
- {
|
|
|
- id: 2,
|
|
|
- name:"出院小结"
|
|
|
- }
|
|
|
- ],
|
|
|
- moduleInfoList:[
|
|
|
- {
|
|
|
- searchName:"",
|
|
|
- searchResult:[
|
|
|
- // {
|
|
|
- // name: "4姓名"
|
|
|
- // },
|
|
|
- // {
|
|
|
- // name: "5职业"
|
|
|
- // },
|
|
|
- // {
|
|
|
- // name: "6年龄"
|
|
|
- // }
|
|
|
- ],
|
|
|
- selectFiled:[
|
|
|
- {
|
|
|
- name: "姓名"
|
|
|
- },
|
|
|
- {
|
|
|
- name: "职业"
|
|
|
- },
|
|
|
- {
|
|
|
- name: "年龄"
|
|
|
- }
|
|
|
- ]
|
|
|
- }
|
|
|
- ]
|
|
|
+
|
|
|
+ hospitalList:[],
|
|
|
+ moduleList:[ ],
|
|
|
+ moduleInfoList:[
|
|
|
+ {
|
|
|
+ searchName:"",
|
|
|
+ activeIndex: -1,
|
|
|
+ searchResult:[
|
|
|
+ // {
|
|
|
+ // name: "4姓名"
|
|
|
+ // },
|
|
|
+ // {
|
|
|
+ // name: "5职业"
|
|
|
+ // },
|
|
|
+ // {
|
|
|
+ // name: "6年龄"
|
|
|
+ // }
|
|
|
+ ],
|
|
|
+ selectFiled:[
|
|
|
+
|
|
|
+ ]
|
|
|
+ }
|
|
|
+ ]
|
|
|
}
|
|
|
},
|
|
|
+ created(){
|
|
|
+ this.getAllTypes();
|
|
|
+ // if(isEdit){
|
|
|
+ // // this.id =
|
|
|
+ // }
|
|
|
+ },
|
|
|
methods:{
|
|
|
+ getAllTypes(){
|
|
|
+ if(localStorage.getItem("qcModuleTypes")){
|
|
|
+ this.hospitalList = JSON.parse(localStorage.getItem("qcHospitalTypes"));
|
|
|
+ this.moduleList = JSON.parse(localStorage.getItem("qcModuleTypes"));
|
|
|
+ return ;
|
|
|
+ }
|
|
|
+ //获取枚举信息
|
|
|
+ api.getQcTypes().then((res)=>{
|
|
|
+ if(res.data.code==="0"){
|
|
|
+ const data = res.data.data;
|
|
|
+ localStorage.setItem("qcFieldTypes",JSON.stringify(data[11]));
|
|
|
+ localStorage.setItem("qcModuleTypes",JSON.stringify(data[12]));
|
|
|
+ localStorage.setItem("qcHospitalTypes",JSON.stringify(data[13]));
|
|
|
+ }else{
|
|
|
+ this.warning("获取枚举信息失败");
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
addUnit(){
|
|
|
+ if(!this.form.hospital){
|
|
|
+ this.warning("请先选择所属医院")
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if(!this.form.modeId){
|
|
|
+ this.warning("请先选择模块")
|
|
|
+ return
|
|
|
+ }
|
|
|
this.moduleInfoList.push({
|
|
|
searchName:"",
|
|
|
+ activeIndex: -1,
|
|
|
searchResult:[
|
|
|
|
|
|
],
|
|
@@ -140,54 +161,60 @@ export default {
|
|
|
})
|
|
|
},
|
|
|
searchFiled(index){
|
|
|
- console.log(index)
|
|
|
this.searchIndex = index
|
|
|
const searchName = this.moduleInfoList[index].searchName
|
|
|
- // api.searchFiled(param).then(res =>{
|
|
|
- // if(res.data.code == '0'){
|
|
|
- // this.moduleInfoList[index].searchResult = []
|
|
|
- // this.moduleInfoList[index].searchResult.push(res.data.data)
|
|
|
- // }
|
|
|
- // }).catch(e =>{
|
|
|
- // console.log(e)
|
|
|
- // })
|
|
|
- if(this.moduleInfoList[index].searchName){
|
|
|
- this.moduleInfoList[index].searchResult = []
|
|
|
- this.moduleInfoList[index].searchResult.push([
|
|
|
- {
|
|
|
- name: "4姓名"
|
|
|
- },
|
|
|
- {
|
|
|
- name: "5职业"
|
|
|
- },
|
|
|
- {
|
|
|
- name: "6年龄"
|
|
|
- }
|
|
|
- ])
|
|
|
+ if(!searchName){
|
|
|
+ return
|
|
|
+ }
|
|
|
+ const param = {
|
|
|
+ tagName: searchName,
|
|
|
+ hospitalId: this.form.hospital,
|
|
|
+ modeId: [this.form.moduleName],
|
|
|
}
|
|
|
+ api.getQCName(param).then(res =>{
|
|
|
+ if(res.data.code == '0'){
|
|
|
+ this.moduleInfoList[index].searchResult = []
|
|
|
+ this.moduleInfoList[index].searchResult.push(...res.data.data)
|
|
|
+ }
|
|
|
+ }).catch(e =>{
|
|
|
+ console.log(e)
|
|
|
+ })
|
|
|
+
|
|
|
},
|
|
|
selectSearchFiled(searchItem,index){
|
|
|
this.moduleInfoList[index].selectFiled.push(searchItem)
|
|
|
this.searchIndex = -1
|
|
|
this.moduleInfoList[index].searchName=""
|
|
|
this.moduleInfoList[index].searchResult = []
|
|
|
- console.log(searchItem)
|
|
|
},
|
|
|
- upFiled(ii,index){
|
|
|
- if(ii == 0){
|
|
|
+ setActiveIndex(index, ii){
|
|
|
+ let activeIndex = this.moduleInfoList[index].activeIndex
|
|
|
+ if( ii === activeIndex) {
|
|
|
+ this.moduleInfoList[index].activeIndex = -1
|
|
|
+ } else {
|
|
|
+ this.moduleInfoList[index].activeIndex = ii
|
|
|
+ }
|
|
|
+
|
|
|
+ },
|
|
|
+ upFiled(index){
|
|
|
+ let activeIndex = this.moduleInfoList[index].activeIndex
|
|
|
+ if(activeIndex == 0 || activeIndex == -1){
|
|
|
return
|
|
|
}
|
|
|
- const current = this.moduleInfoList[index].selectFiled[ii]
|
|
|
- const currentPre = this.moduleInfoList[index].selectFiled[ii-1]
|
|
|
- this.moduleInfoList[index].selectFiled.splice(ii-1,2,current,currentPre)
|
|
|
+ const current = this.moduleInfoList[index].selectFiled[activeIndex]
|
|
|
+ const currentPre = this.moduleInfoList[index].selectFiled[activeIndex-1]
|
|
|
+ this.moduleInfoList[index].selectFiled.splice(activeIndex-1,2,current,currentPre)
|
|
|
+ this.moduleInfoList[index].activeIndex--
|
|
|
},
|
|
|
- downFiled(ii,index){
|
|
|
- if(ii == this.moduleInfoList[index].selectFiled.length -1){
|
|
|
+ downFiled(index){
|
|
|
+ let activeIndex = this.moduleInfoList[index].activeIndex
|
|
|
+ if(activeIndex == this.moduleInfoList[index].selectFiled.length -1 || activeIndex == -1){
|
|
|
return
|
|
|
}
|
|
|
- const current = this.moduleInfoList[index].selectFiled[ii]
|
|
|
- const currentNext = this.moduleInfoList[index].selectFiled[ii+1]
|
|
|
- this.moduleInfoList[index].selectFiled.splice(ii,2,currentNext,current)
|
|
|
+ const current = this.moduleInfoList[index].selectFiled[activeIndex]
|
|
|
+ const currentNext = this.moduleInfoList[index].selectFiled[activeIndex+1]
|
|
|
+ this.moduleInfoList[index].selectFiled.splice(activeIndex,2,currentNext,current)
|
|
|
+ this.moduleInfoList[index].activeIndex++
|
|
|
|
|
|
},
|
|
|
delSelected(ii,index){
|
|
@@ -197,6 +224,76 @@ export default {
|
|
|
delUnit(index){
|
|
|
this.moduleInfoList.splice(index,1)
|
|
|
},
|
|
|
+ confirm(form){
|
|
|
+ this.$refs[form].validate((valid) => {
|
|
|
+ if (valid) {
|
|
|
+ const {tempName,hospital,moduleName} = this.form
|
|
|
+ let moduleDetail = [], moduleInfoList = this.moduleInfoList
|
|
|
+ for(let i = 0; i < moduleInfoList.length; i++){
|
|
|
+ for(let j = 0; j < moduleInfoList[i].selectFiled.length; j++){
|
|
|
+ let item ={
|
|
|
+ groupId: i,
|
|
|
+ questionId: moduleInfoList[i].selectFiled[j].id
|
|
|
+ }
|
|
|
+ moduleDetail.push(item)
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ let param = {
|
|
|
+ name: tempName,
|
|
|
+ modeId: moduleName,
|
|
|
+ hospitalId: hospital,
|
|
|
+ moduleDetail: moduleDetail,
|
|
|
+ remark:''
|
|
|
+ }
|
|
|
+ if(this.isEdit){
|
|
|
+ param = Object.assign({}, param, {id: this.id})
|
|
|
+ }
|
|
|
+ if(this.id && !this.isCopy){//修改
|
|
|
+
|
|
|
+ this.saveDisable = true //提交保存按钮不可点击,返回结果时才可点击,防止频繁发送请求
|
|
|
+ api.saveOrUpdateQCTemp(param).then((res)=>{
|
|
|
+ if(res.data.code==0){
|
|
|
+ this.$message({
|
|
|
+ message:"修改成功",
|
|
|
+ type:'success'
|
|
|
+ });
|
|
|
+ //返回带搜索条件的首页
|
|
|
+ this.$router.push({
|
|
|
+ name: 'QualityControlTemp',
|
|
|
+ params: Object.assign({}, this.$route.params, {currentPage: 1})
|
|
|
+ });
|
|
|
+ }else{
|
|
|
+ this.$message({
|
|
|
+ message:res.data.msg,
|
|
|
+ type:'warning'
|
|
|
+ });
|
|
|
+ }
|
|
|
+ this.saveDisable = false
|
|
|
+ })
|
|
|
+ }else{//添加
|
|
|
+ this.saveDisable = true; //提交保存按钮不可点击,返回结果时才可点击,防止频繁发送请求
|
|
|
+ api.saveOrUpdateQCTemp(param).then((res)=>{
|
|
|
+ if(res.data.code==0){
|
|
|
+ this.$message({
|
|
|
+ message:"添加成功",
|
|
|
+ type:'success'
|
|
|
+ })
|
|
|
+ this.$router.push({name: 'QualityControlTemp'});
|
|
|
+ }else{
|
|
|
+ this.$message({
|
|
|
+ message:res.data.msg,
|
|
|
+ type:'warning'
|
|
|
+ });
|
|
|
+ }
|
|
|
+ this.saveDisable = false
|
|
|
+ })
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
warning(msg, type,time) {
|
|
|
this.$message({
|
|
|
showClose: true,
|
|
@@ -258,20 +355,25 @@ export default {
|
|
|
}
|
|
|
.searchResultBox{
|
|
|
position: absolute;
|
|
|
- width: 100%;
|
|
|
- padding: 0 20px;
|
|
|
+ width: 200px;
|
|
|
+ box-sizing: border-box;
|
|
|
+ max-height: 200px;
|
|
|
+ overflow-y: auto;
|
|
|
background: #fff;
|
|
|
+ z-index: 2;
|
|
|
+ border: 1px solid #dcdfe6;
|
|
|
}
|
|
|
.searchItem{
|
|
|
height: 40px;
|
|
|
line-height: 40px;
|
|
|
+ padding: 0 20px;
|
|
|
cursor: pointer;
|
|
|
overflow: hidden;
|
|
|
white-space: nowrap;
|
|
|
text-overflow: ellipsis;
|
|
|
}
|
|
|
.searchItem:hover{
|
|
|
- background-color: #abcdef;
|
|
|
+ background-color: #F5F7FA;
|
|
|
}
|
|
|
.selectFiled{
|
|
|
position: relative;
|
|
@@ -279,19 +381,24 @@ export default {
|
|
|
.orderBox{
|
|
|
position: absolute;
|
|
|
left: -50px;
|
|
|
+ top: 50%;
|
|
|
+ width: 50px;
|
|
|
+ height: 84px;
|
|
|
+ margin-top: -42px;
|
|
|
+}
|
|
|
+.selectFiledBox{
|
|
|
+ position: relative;
|
|
|
+ min-height: 120px;
|
|
|
}
|
|
|
.order{
|
|
|
display: inline-block;
|
|
|
- width: 16px;
|
|
|
- height: 16px;
|
|
|
- font-size: 16px;
|
|
|
+ width: 30px;
|
|
|
+ height: 30px;
|
|
|
+ font-size: 30px;
|
|
|
margin-left: 5px;
|
|
|
border: 1px solid #dcdfe6;
|
|
|
cursor: pointer;
|
|
|
- i{
|
|
|
- width: 15px;
|
|
|
- height: 15px;
|
|
|
- }
|
|
|
+
|
|
|
}
|
|
|
.firstItem{
|
|
|
margin-left: 28px;
|
|
@@ -308,5 +415,11 @@ export default {
|
|
|
}
|
|
|
.filedName{
|
|
|
position: relative;
|
|
|
+ border: 1px solid #dcdfe6;
|
|
|
+ border-radius: 4px;
|
|
|
+ padding: 5px 10px;
|
|
|
+}
|
|
|
+.activeFiledName{
|
|
|
+ border: 1px solid #48C5D7;
|
|
|
}
|
|
|
</style>
|