Ver código fonte

质控类型维护-其他质控类型关联;医院列表缓存取消

zhouna 4 anos atrás
pai
commit
fb4a197b31

+ 17 - 15
src/api/config.js

@@ -260,7 +260,7 @@ export default {
     'diagBaseDelete': '/api/knowledgeman/diagnose/delete', //诊断依据--删除
     'diagBaseGetDetail': '/api/knowledgeman/diagnose/getDetail', //诊断依据--获取详情
     'diagBaseIndex': '/api/knowledgeman/diagnose/index', //诊断依据--诊断检索
-    'diagBasePage': '/api/knowledgeman/diagnose/page', //诊断依据--分页
+    'diagBasePage': testUrl + '/api/knowledgeman/diagnose/page', //诊断依据--分页
     'diagBaseUpdateNeo': '/api/knowledgeman/diagnose/updateNeo', //诊断依据--更新图谱
     'diagBaseVerifyAllData': '/api/knowledgeman/diagnose/verifyAllData', //诊断依据--校验所有数据
     'diagBaseVerifyData': '/api/knowledgeman/diagnose/verifyData', //诊断依据--校验数据
@@ -289,15 +289,15 @@ export default {
     'getRecordDetail': '/api/mrman/arRechome/getBABLContent',//病历管理--病历详情
     'saveRecord': '/api/mrman/arRechome/saveBABLContent',  //保存病例
     'getTypes': '/api/mrman/getMrEnumsData',//枚举类型
-    'getFieldList': "/api/mrman/qc/qcQuestionInfo/page",    //获取字段映射列表
+    'getFieldList': testUrl + "/api/mrman/qc/qcQuestionInfo/page",    //获取字段映射列表
     'getFieldDetail': '/api/mrman/qc/qcQuestionInfo/getById',//获取标签详情
     'addFieldMatch': "/api/mrman/qc/qcQuestionInfo/saveOrUpdate",    //添加字段映射
-    'getQcTypes': "/api/mrman/qc/dictionaryInfo/getList",    //添加字段映射
+    'getQcTypes': testUrl + "/api/mrman/qc/dictionaryInfo/getList",    //添加字段映射
     'delFieldMatch': "/api/mrman/qc/qcQuestionInfo/delete",    //删除字段映射  
-    'getQCTemplist': '/api/mrman/qc/qcModuleInfo/page', // 获取模板列表
+    'getQCTemplist': testUrl + '/api/mrman/qc/qcModuleInfo/page', // 获取模板列表
     'saveOrUpdateQCTemp': '/api/mrman/qc/qcModuleInfo/saveOrUpdateModuleInfo', //新增或修改模板
     'delQCTemp': '/api/mrman/qc/qcModuleInfo/delete', //删除模板
-    'getQCTempDetail': '/api/mrman/qc/qcModuleInfo/getById', //获取模板详情
+    'getQCTempDetail':testUrl +  '/api/mrman/qc/qcModuleInfo/getById', //获取模板详情
     'getQCName': '/api/mrman/qc/qcQuestionInfo/index', //获取字段名称
     'getQcFlawList': '/api/mrman/qcCasesEntry/indexCaseEntry',   //获取缺陷列表
     'getModuleTypeList': '/api/mrman/qc/qcModuleInfo/index', //获取模块类型列表
@@ -307,8 +307,8 @@ export default {
     'getRecordInpModule': '/api/mrman/qcCases/getAll', //获取全部模块及条目
     'getRecordInpModuleByHospital': '/api/mrman/qcCases/getAllByHospital', //获取全部模块及条目根据医院名称
     'getRecordHopitalList': '/api/mrman/qcHospitalInfo/getHospitalInfoAll',//获取医院信息 
-    'getRecordCases': '/api/mrman/qcCases/getCases', //获取全部模块
-    'getRecordIremList': '/api/mrman/qcCasesEntry/getAll', //获取病例条目列表
+    'getRecordCases': testUrl + '/api/mrman/qcCases/getCases', //获取全部模块
+    'getRecordIremList': testUrl + '/api/mrman/qcCasesEntry/getAll', //获取病例条目列表
     'addRecordItem': '/api/mrman/casesEntryHospital/insertByHospital', //添加病例条目
     'getRecordByHospital': '/api/mrman/casesEntryHospital/getAllByHospital', //获取指定医院的病例条目 
     'updateRecordByHospital': '/api/mrman/casesEntryHospital/updateByHospital', //更新指定医院的病例条目 
@@ -316,15 +316,17 @@ export default {
     'getRecordItemDetail': '/api/mrman/qcCasesEntry/getUpdateInfo', //获取病例详情
     'getInputcasesDetial': '/api/mrman/qcInputcases/getInputcasesDetial', //获取标注病例详情
     'gethospitalModuleList': '/api/mrman/qcMode/getModes', //获取医院数据模块
-    'getQcTypeList': '/api/mrman/qc/qcType/page', //获取质控类型列表
-    'addQcType': '/api/mrman/qc/qcType/saveOrUpdate', //新增质控类型
+    'getQcTypeList': testUrl + '/api/mrman/qc/qcType/page', //获取质控类型列表
+    'addQcType': testUrl + '/api/mrman/qc/qcType/saveOrUpdate', //新增质控类型
     'delQcType': '/api/mrman/qc/qcType/delete', //删除质控类型
-    'getQcTypeItem': '/api/mrman/qc/qcType/getEntryByHospital', //获取质控条目
-    'getQcTypeDetail': '/api/mrman/qc/qcType/getById', //获取质控类型明细
-    'getQcEntryTypeList': '/api/mrman/qc/qcEntryType/page', //质控条目与质控类型关系--分页列表
-    'getQcEntryTypeDetail': '/api/mrman/qc/qcEntryType/getById', //质控条目与质控类型关系--根据entryId和医院id返回内容
-    'getQcEntryTypeByHospital': '/api/mrman/qc/qcEntryType/getTypeByHospital', //质控条目与质控类型关系--根据医院获取质控类型列表
-    'getQcEntryTypeIndex': '/api/mrman/qc/qcEntryType/index', //质控条目与质控类型关系--根据医院和条目检索未被选择的质控类型
+    'getQcTypeItem': testUrl + '/api/mrman/qc/qcType/getEntryByHospital', //获取质控条目
+    'getQcTypeDetail': testUrl + '/api/mrman/qc/qcType/getById', //获取质控类型明细
+    'getQcEntryTypeList': testUrl + '/api/mrman/qc/qcEntryType/page', //质控条目与质控类型关系--分页列表
+    'getQcEntryTypeDetail': testUrl + '/api/mrman/qc/qcEntryType/getById', //质控条目与质控类型关系--根据entryId和医院id返回内容
+    'getQcEntryTypeByHospital': testUrl + '/api/mrman/qc/qcEntryType/getTypeByHospital', //质控条目与质控类型关系--根据医院获取质控类型列表
+    'getQcEntryTypeIndex': testUrl + '/api/mrman/qc/qcEntryType/index', //质控条目与质控类型关系--根据医院和条目检索未被选择的质控类型
+    'ifNeedUnbind':testUrl + '/api/mrman/qc/qcType/getOrCancel',   //判断质控类型是否已被绑定、解除绑定
+    'qcTypeList':testUrl + '/api/mrman/qc/qcType/indexData',    //其他质控类型列表
     'saveQcEntryType': '/api/mrman/qc/qcEntryType/saveOrUpdate', //质控条目与质控类型关系--保存
     'getStdList': '/api/mrman/stdBehospitalInfo/getSthospitalInfoPage',//标准病例列表
     'delStdRecord': '/api/mrman/stdBehospitalInfo/clearSthospitalInfo',//删除标准病例

+ 6 - 0
src/api/qualityControl.js

@@ -129,4 +129,10 @@ export default {
   ControModuleInfo(param){
     return axios.post(urls.ControModuleInfo,param);
   },
+  ifNeedUnbind(param){
+    return axios.post(urls.ifNeedUnbind,param);
+  },
+  qcTypeList(param){
+    return axios.post(urls.qcTypeList,param);
+  },
 }

+ 6 - 4
src/components/qualityControl/AddCombineFeild.vue

@@ -157,18 +157,20 @@
     },
     methods:{
       getAllTypes(){
-        if(localStorage.getItem("qcModuleTypes")){
+        /*if(localStorage.getItem("qcModuleTypes")){
           this.hisTypes = JSON.parse(localStorage.getItem("qcHospitalTypes"));
           this.fieldTypes = 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("qcFieldTypes",JSON.stringify(data[11]));
             localStorage.setItem("qcModuleTypes",JSON.stringify(data[12]));
-            localStorage.setItem("qcHospitalTypes",JSON.stringify(data[13]));
+            localStorage.setItem("qcHospitalTypes",JSON.stringify(data[13]));*/
+            this.hisTypes = data[13];
+            this.fieldTypes =data[12];
           }else{
             this.warning("获取枚举信息失败");
           }

+ 50 - 70
src/components/qualityControl/AddQcType.vue

@@ -14,7 +14,7 @@
                                     v-for="item in hisTypes"
                                     :key="item.val"
                                     :label="item.name"
-                                    :value="Number(item.val)">
+                                    :value="item.val">
                             </el-option>
                         </el-select>
                     </el-form-item>
@@ -34,7 +34,7 @@
                       <span class="showInfo">{{form.defaultModule==1?'是':'否'}}</span>
                     </el-form-item> -->
 
-                    <el-form-item label="质控条目:" prop="qcItem">
+                    <el-form-item label="质控条目:" prop="qcItem" :class="spread?'qcitem-list':'qcitem-list-up'">
                         <el-collapse>
                             <el-collapse-item v-for="(item,i) in qcItemList" :title="i" :name="i">
                                 <el-table
@@ -70,6 +70,14 @@
                             </el-collapse-item>
                         </el-collapse>
                     </el-form-item>
+                    <img v-if="spread" src="../../images/up.png" class="spread-icon" @click="toggleSpread" title="收起" alt="收起"/>
+                    <img v-if="!spread" src="../../images/spread.png" class="spread-icon" @click="toggleSpread" title="展开" alt="展开"/>
+                    <el-form-item label="其他质控类型:" prop="typeIdList" class="formItem widthLarge">
+                    </el-form-item>
+                    <OtherQcTypePour :hospital="3"
+                                            :noModuleName="true"
+                                            :moduleName="form.entryId"
+                                            @changeActionData="moduleTypeChange" :selectedTag="form.qcTypeSimpDTOList"></OtherQcTypePour>
                     <el-button class="disclButn" size="small" type="primary" :disabled = 'saveDisable' @click="comfirn('form')">确定</el-button>
                 </el-form>
             </div>
@@ -78,6 +86,7 @@
 </template>
 <script type="text/javascript">
   import api from '@api/qualityControl.js';
+  import OtherQcTypePour from './OtherQcTypePour.vue';
   export default {
     name:'AddQcType',
     data(){
@@ -86,11 +95,16 @@
         list:[],
         labelPosition:'left',
         title:'质控类型维护-添加质控类型',
+        spread:false,
+        hisTypes:[],
         form:{
           id:'',
-          hospitalId:"",
+          hospitalId:'',
           name:'',
           qcTypeCasesEntryVOList:[],
+          qcTypeSimpDTOList:[],
+          entryId:'',     //兼容
+          typeIdList:[],//其他质控类型id
           // defaultModule: 0
         },
         rules:{
@@ -112,6 +126,9 @@
         qcItemList:{},
       }
     },
+    components:{
+      OtherQcTypePour
+    },
     created(){
       this.getAllTypes();
       let {isCopy,info} = this.$route.params;
@@ -122,16 +139,20 @@
         this.qcItemList=infoCopy.entryMap;
         this.form = {
           id:isCopy?"":infoCopy.id,
-          hospitalId:infoCopy.hospitalId,
+          hospitalId:''+infoCopy.hospitalId,
           name:infoCopy.name,
           qcTypeCasesEntryVOList:[],
+          qcTypeSimpDTOList:infoCopy.qcTypeSimpDTOList,
           // defaultModule:+infoCopy.defaultModule
         };
         //this.getQcTypeItem({hospitalId:info.hospitalId});
       }else{
-        let hospitalId = localStorage.getItem("qcSelectHospital")||this.hisTypes[0].val;
-        this.form.hospitalId = +hospitalId;
-        this.getQcTypeItem({hospitalId:hospitalId});
+        const that = this;
+        setTimeout(()=>{
+          let hospitalId = that.hisTypes[0].val;
+          that.form.hospitalId = hospitalId;
+          that.getQcTypeItem({hospitalId:hospitalId});
+        },100)
       }
     },
     watch:{
@@ -152,6 +173,12 @@
     },
     methods:{
       handleTemChange() {},
+      toggleSpread(){
+        this.spread=!this.spread;
+      },
+      moduleTypeChange(list){
+        this.form.typeIdList=[...list];
+      },
       changeHospital(val){
         localStorage.setItem("qcSelectHospital",val);
         this.getQcTypeItem({hospitalId:val});
@@ -172,17 +199,18 @@
         });
       },
       getAllTypes(){
-        if(localStorage.getItem("qcHospitalTypes")){
+        /*if(localStorage.getItem("qcHospitalTypes")){
           this.hisTypes = JSON.parse(localStorage.getItem("qcHospitalTypes"));
           return ;
-        }
+        }*/
         //获取枚举信息
         api.getQcTypes().then((res)=>{
           if(res.data.code==="0"){
             const data = res.data.data;
-            localStorage.setItem("qcFieldTypes",JSON.stringify(data[11]));
+            this.hisTypes =data[13];
+            /*localStorage.setItem("qcFieldTypes",JSON.stringify(data[11]));
             localStorage.setItem("qcModuleTypes",JSON.stringify(data[12]));
-            localStorage.setItem("qcHospitalTypes",JSON.stringify(data[13]));
+            localStorage.setItem("qcHospitalTypes",JSON.stringify(data[13]));*/
           }else{
             this.warning("获取枚举信息失败");
           }
@@ -192,39 +220,10 @@
         this.$refs[form].validate((valid) => {
           if (valid) {
             if(this.form.id){//修改
-              let param = Object.assign({},this.form);
+              let param = Object.assign({},this.form,{qcTypeSimpDTOList:undefined});
               param.name=param.name.trim();
               this.saveDisable = true;  //提交保存按钮不可点击,返回结果时才可点击,防止频繁发送请求
               api.addQcType(param).then((res)=>{
-                // if (res.data.code === '-1') {
-                //   // 默认标准类型存在,是否替换
-                //   this.$alert('默认标准类型已存在,是否替换?', '提示', {
-                //     confirmButtonText: '确定',
-                //     type: 'warning'
-                //   })
-                //     .then(() => {
-                //       param = { ...param, defineType: 1 };
-                //       api.addQcType(param).then(res => {
-                //         if (res.data.code == 0) {
-                //           this.$message({
-                //             message: '修改成功',
-                //             type: 'success'
-                //           });
-                //           //返回带搜索条件的首页
-                //           this.$router.push({
-                //             name: 'QCTypeMang',
-                //             params: Object.assign({}, this.$route.params, {currentPage: 1})
-                //           });
-                //         } else {
-                //           this.$message({
-                //             message: res.data.msg,
-                //             type: 'warning'
-                //           });
-                //         }
-                //       });
-                //     })
-                //     .catch(() => {});
-                // } else 
                 if(res.data.code==0){
                   this.$message({
                     message:"修改成功",
@@ -248,35 +247,6 @@
               params.name=params.name.trim();
               this.saveDisable = true;  //提交保存按钮不可点击,返回结果时才可点击,防止频繁发送请求
               api.addQcType(params).then((res)=>{
-                // if (res.data.code === '-1') {
-                //   // 默认标准类型存在,是否替换
-                //   this.$alert('默认标准类型已存在,是否替换?', '提示', {
-                //     confirmButtonText: '确定',
-                //     type: 'warning'
-                //   })
-                //     .then(() => {
-                //       params = { ...params, defineType: 1 };
-                //       api.addQcType(params).then(res => {
-                //         if (res.data.code == 0) {
-                //           this.$message({
-                //             message: '修改成功',
-                //             type: 'success'
-                //           });
-                //           //返回带搜索条件的首页
-                //           this.$router.push({
-                //             name: 'QCTypeMang',
-                //             params: Object.assign({}, this.$route.params, {currentPage: 1})
-                //           });
-                //         } else {
-                //           this.$message({
-                //             message: res.data.msg,
-                //             type: 'warning'
-                //           });
-                //         }
-                //       });
-                //     })
-                //     .catch(() => {});
-                // } else 
                 if(res.data.code==0){
                   this.$message({
                     message:"添加成功",
@@ -337,4 +307,14 @@
     .showInfo {
       margin-left: 16px;
     }
+    .qcitem-list-up{
+        max-height: 150px;
+        overflow-y: hidden;
+    }
+    .spread-icon{
+        width: 20px;
+        height: 20px;
+        cursor: pointer;
+        margin-left: 448px;
+    }
 </style>

+ 6 - 8
src/components/qualityControl/AddQualityControlTemp.vue

@@ -232,24 +232,22 @@ export default {
       }
     },
     getAllTypes() {
-      if (localStorage.getItem('qcModuleTypes')) {
+      /*if (localStorage.getItem('qcModuleTypes')) {
         this.hospitalList = JSON.parse(localStorage.getItem('qcHospitalTypes'));
         this.moduleList = JSON.parse(localStorage.getItem('qcModuleTypes'));
         return new Promise(function(resolve, reject) {
           resolve();
         });
-      }
+      }*/
       //获取枚举信息
       return api.getQcTypes().then(res => {
         if (res.data.code === '0') {
           const data = res.data.data;
-          localStorage.setItem('qcFieldTypes', JSON.stringify(data[11]));
+          /*localStorage.setItem('qcFieldTypes', JSON.stringify(data[11]));
           localStorage.setItem('qcModuleTypes', JSON.stringify(data[12]));
-          localStorage.setItem('qcHospitalTypes', JSON.stringify(data[13]));
-          this.hospitalList = JSON.parse(
-            localStorage.getItem('qcHospitalTypes')
-          );
-          this.moduleList = JSON.parse(localStorage.getItem('qcModuleTypes'));
+          localStorage.setItem('qcHospitalTypes', JSON.stringify(data[13]));*/
+          this.hospitalList = data[13];
+          this.moduleList = data[12];
         } else {
           this.warning('获取枚举信息失败');
         }

+ 4 - 4
src/components/qualityControl/BaseFieldList.vue

@@ -152,18 +152,18 @@
         return field[0]?field[0].name:'';
       },
       getAllTypes(){
-        if(localStorage.getItem("qcModuleTypes")){
+        /*if(localStorage.getItem("qcModuleTypes")){
           this.hisTypes = JSON.parse(localStorage.getItem("qcHospitalTypes"));
           this.fieldTypes = JSON.parse(localStorage.getItem("qcModuleTypes"));
           this.getDataList();
           return ;
-        }
+        }*/
         //获取枚举信息
         api.getQcTypes().then((res)=>{
           if(res.data.code==="0"){
             const data = res.data.data;
-            localStorage.setItem("qcModuleTypes",JSON.stringify(data[12]));
-            localStorage.setItem("qcHospitalTypes",JSON.stringify(data[13]));
+            //localStorage.setItem("qcModuleTypes",JSON.stringify(data[12]));
+            //localStorage.setItem("qcHospitalTypes",JSON.stringify(data[13]));
             this.hisTypes =data[13];
             this.fieldTypes =data[12];
             this.getDataList();

+ 4 - 4
src/components/qualityControl/CombineFeildList.vue

@@ -133,18 +133,18 @@
         return field[0]?field[0].name:'';
       },
       getAllTypes(){
-        if(localStorage.getItem("qcModuleTypes")){
+        /*if(localStorage.getItem("qcModuleTypes")){
           this.hisTypes = JSON.parse(localStorage.getItem("qcHospitalTypes"));
           this.fieldTypes = JSON.parse(localStorage.getItem("qcModuleTypes"));
           this.getDataList();
           return ;
-        }
+        }*/
         //获取枚举信息
         api.getQcTypes().then((res)=>{
           if(res.data.code==="0"){
             const data = res.data.data;
-            localStorage.setItem("qcModuleTypes",JSON.stringify(data[12]));
-            localStorage.setItem("qcHospitalTypes",JSON.stringify(data[13]));
+            //localStorage.setItem("qcModuleTypes",JSON.stringify(data[12]));
+            //localStorage.setItem("qcHospitalTypes",JSON.stringify(data[13]));
             this.hisTypes =data[13];
             this.fieldTypes =data[12];
             this.getDataList();

+ 6 - 4
src/components/qualityControl/FieldMatch.vue

@@ -212,18 +212,20 @@
         });
       },
       getAllTypes(){
-        if(localStorage.getItem("qcModuleTypes")){
+        /*if(localStorage.getItem("qcModuleTypes")){
           this.hisTypes = JSON.parse(localStorage.getItem("qcHospitalTypes"));
           this.fieldTypes = 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]));
+            this.hisTypes =data[13];
+            this.fieldTypes=data[12];
+            /*localStorage.setItem("qcFieldTypes",JSON.stringify(data[11]));
             localStorage.setItem("qcModuleTypes",JSON.stringify(data[12]));
-            localStorage.setItem("qcHospitalTypes",JSON.stringify(data[13]));
+            localStorage.setItem("qcHospitalTypes",JSON.stringify(data[13]));*/
           }else{
             this.warning("获取枚举信息失败");
           }

+ 5 - 4
src/components/qualityControl/ItemDataType.vue

@@ -161,20 +161,21 @@
         return it?it.name:'';
       },
       getAllTypes(){
-          if(localStorage.getItem("qcModuleTypes")){
+          /*if(localStorage.getItem("qcModuleTypes")){
               this.hospitalList = JSON.parse(localStorage.getItem("qcHospitalTypes"));
               return new Promise(function(resolve, reject){
                   resolve()
               });
-          }
+          }*/
           //获取枚举信息
           return api.getQcTypes().then((res)=>{
               if(res.data.code==="0"){
                   const data = res.data.data;
-                  localStorage.setItem("qcFieldTypes",JSON.stringify(data[11]));
+                    this.hospitalList =data[13];
+                  /*localStorage.setItem("qcFieldTypes",JSON.stringify(data[11]));
                   localStorage.setItem("qcModuleTypes",JSON.stringify(data[12]));
                   localStorage.setItem("qcHospitalTypes",JSON.stringify(data[13]));
-                  this.hospitalList = JSON.parse(localStorage.getItem("qcHospitalTypes"));
+                  this.hospitalList = JSON.parse(localStorage.getItem("qcHospitalTypes"));*/
               }else{
                   this.warning("获取枚举信息失败");
               }

+ 6 - 4
src/components/qualityControl/ItemDataTypeRelation.vue

@@ -175,22 +175,24 @@ export default {
             
         },
         getAllTypes(){
-            if(localStorage.getItem("qcModuleTypes")){
+            /*if(localStorage.getItem("qcModuleTypes")){
                 this.hospitalList = JSON.parse(localStorage.getItem("qcHospitalTypes"));
                 this.moduleList = JSON.parse(localStorage.getItem("qcModuleTypes"));
                 return new Promise(function(resolve, reject){
                     resolve()
                 });
-            }
+            }*/
             //获取枚举信息
             return api.getQcTypes().then((res)=>{
                 if(res.data.code==="0"){
                     const data = res.data.data;
-                    localStorage.setItem("qcFieldTypes",JSON.stringify(data[11]));
+                  this.hospitalList =data[13];
+                  this.moduleList = data[12];
+                    /*localStorage.setItem("qcFieldTypes",JSON.stringify(data[11]));
                     localStorage.setItem("qcModuleTypes",JSON.stringify(data[12]));
                     localStorage.setItem("qcHospitalTypes",JSON.stringify(data[13]));
                     this.hospitalList = JSON.parse(localStorage.getItem("qcHospitalTypes"));
-                    this.moduleList = JSON.parse(localStorage.getItem("qcModuleTypes"));
+                    this.moduleList = JSON.parse(localStorage.getItem("qcModuleTypes"));*/
                 }else{
                     this.warning("获取枚举信息失败");
                 }

+ 455 - 0
src/components/qualityControl/OtherQcTypePour.vue

@@ -0,0 +1,455 @@
+<template>
+    <div class="qcTypeWrapper commomSymptom clearfix">
+        <QCTipPop :name="curName" :example="curEmp" :show="showPop" :top="popTop" :left="popLeft" @close="closePop"></QCTipPop>
+        <div class="bottomPartLeft">
+            <p style="height: 26px;"> </p>
+          <div class="pool">
+            <ul class="tagList tagPool">
+                <li v-for="(item, index) in leftTagsList"
+                    class = "tagItem"
+                    :key='item.id'
+                    :style="getStyle(item)?styles:null"
+                    @click='selectLeftTag(item, index, $event)'
+                >
+                    <p class="ellipsis" @click="closePop">
+                        <span class="tagName">{{item.name}}</span>
+                        <!-- <span :class="activeId==item.id?'tip-icon active':'tip-icon'" @click.stop="showTipPop(item,$event)"></span> -->
+                    </p>
+                </li>
+            </ul>
+          </div>
+        </div>
+        <div class="bottomPartMid fl">
+            <p><span class="el-icon-arrow-right" @click="toRightList"></span></p>
+            <p><span class="el-icon-arrow-left" @click="toLeftList"></span></p>
+        </div>
+        <div class="bottomPartRight ">
+          <p class="poolTitle">已选质控类型:</p>
+          <ul class="tagList operationPool operationPools">
+                <li class = "tagItem"
+                    v-for="(item) in rightTagsList"
+                    :key='item.id'
+                    :style="getStyle2(item)?styles:null"
+                    @click='selectRightTag(item)'
+                >
+                    <p class="ellipsis" @click="closePop">
+                        <span class="tagName">{{item.name}}</span>
+                        <!-- <span :class="activeId==item.id?'tip-icon active':'tip-icon'" @click.stop="showTipPop(item,$event)"></span> -->
+                    </p>
+                </li>
+            </ul>
+        </div>
+    <!--<div class="buttonBox" :class="(qaType==2)?'rightMore':''">
+        <div class="bottomPartMid bottomPartMidss fl bottomPartMids" >
+            <p><span class="el-icon-arrow-up" @click="toggleTopDownList(1)"></span></p>
+            <p><span class="el-icon-arrow-down" @click="toggleTopDownList(2)"></span></p>
+        </div>
+    </div>-->
+  </div>
+</template>
+<script>
+import api from '@api/qualityControl.js';
+import QCTipPop from './QCTipPop.vue';
+import $ from 'jquery'
+
+export default {
+    name: "OtherQcTypePour",
+    props: ['hospital','moduleName','selectedTag'],
+    data() {
+        return {
+            checkedExc:false,
+            leftTagsList: [],
+            selectLeftTagsList: [],
+            rightTagsList: [],
+            selectRightTagsList: [],
+            showPop:false,
+            activeId:'',
+            curName:"",
+            curEmp:"",
+            popTop:'',
+            popLeft:'',
+            styles:{
+                background:'#eae7e7'
+            },
+        }
+    },
+    mounted() {
+      //编辑
+        if(this.hospital){
+          const that = this;
+          setTimeout(function(){            //等watch执行后赋值tags,否则这里先执行,会被watch里清空
+            console.log(44,that.selectedTag)
+            that.rightTagsList = [...that.selectedTag];
+            that.getModuleTypeList();
+            that.$emit('changeActionData',that.getModuleTypeIds());
+          },100);
+        }
+    },
+    watch: {
+      hospital(){
+            this.rightTagsList=[];
+          this.getModuleTypeList();
+        },
+      moduleName(){
+            this.rightTagsList=[];
+          this.getModuleTypeList();
+        },
+      /*'selectRightTagsList':{
+          handler:function(newVal){
+          },
+          deep:true
+        }*/
+    },
+    methods: {
+        closePop(){
+          this.activeId = '';
+          this.curName = '';
+          this.curEmp = '';
+          this.popTop = 0;
+          this.popLeft=0;
+          this.showPop=false;
+        },
+        showTipPop(item,e){
+          if(this.showPop&&this.activeId===item.id){
+            this.closePop();
+            return;
+          }
+          const t=$(".el-main").scrollTop();
+          this.activeId = item.id;
+          this.curName = item.name;
+          this.curEmp = item.behospitalCodes;
+          this.popTop = t+e.clientY;
+          this.popLeft=e.clientX;
+          this.showPop = true;
+        },
+        handleExclu(){
+            if(!this.selectRightTagsList||this.selectRightTagsList.length==0){
+              this.$message({
+                showClose: true,
+                message: '请先选择要操作的标签',
+                type: 'warning'
+              });
+              return ;
+            }
+            const arr = this.rightTagsList.map((it)=>{
+              if(it.id==this.selectRightTagsList[0].id){
+                if(it.exclusionType===1){
+                  it.exclusionType = 0
+                }else{
+                  it.exclusionType=1;
+                }
+              }else{
+                it.exclusionType=0;
+              }
+              return it;
+            });
+            this.rightTagsList=arr;
+            this.$emit('changeActionData',this.getModuleTypeIds());
+        },
+        transOptions(opt){
+          return opt&&opt.map((it)=>{
+            return Object.assign({},it,{id:it.questionId||it.id});      //模板是questionId,组合是id
+          });
+        },
+        ifReflashTagList(newVal='', preVal=''){
+          if(newVal.trim() == ''){
+            this.searchVal = '';
+            this.rightTagsList=[];
+            this.getModuleTypeList();
+          }else if(newVal.trim() != preVal.trim()){
+            this.searchVal = '';
+            this.rightTagsList=[];
+            this.getModuleTypeList();
+          }
+        },
+        selectLeftTag(tag) {
+            const hasTag = this.isHasTag(tag, this.selectLeftTagsList);
+            if (hasTag) {
+                this.selectLeftTagsList = this.selectLeftTagsList.filter(item => item.id !== tag.id)
+            } else {
+                this.selectLeftTagsList.push(tag);
+            }
+        },
+        selectRightTag(tag) {
+            /*let tmpArr = [];
+            tmpArr.push(tag);
+            if (this.selectRightTagsList.length > 0 && tag.id == this.selectRightTagsList[0].id) {
+              this.selectRightTagsList = this.selectRightTagsList.filter(item => item.id !== tag.id)
+            }else{
+              this.selectRightTagsList = tmpArr;
+            }*/
+          const hasTag = this.isHasTag(tag, this.selectRightTagsList);
+          if (hasTag) {
+            this.selectRightTagsList = this.selectRightTagsList.filter(item => item.id !== tag.id)
+          } else {
+            this.selectRightTagsList.push(tag);
+          }
+        },
+        isHasTag(item, arr) {
+            for ( let i = 0; i <arr.length; i++) {
+                if(arr[i].id === item.id) {
+                    return true;
+                }
+            }
+            return false;
+        },
+        getStyle(item){       //左侧选中状态
+            return this.isHasTag(item, this.selectLeftTagsList)
+        },
+        getStyle2(item) {
+            return this.isHasTag(item, this.selectRightTagsList);
+        },
+        toggleTopDownList(type){
+          if(this.selectRightTagsList.length == 0 || this.rightTagsList.length == 0){
+            return;
+          }
+          const tmpRightSelect = JSON.parse(JSON.stringify(this.selectRightTagsList));
+          const tmpRightLis = JSON.parse(JSON.stringify(this.rightTagsList));
+          const numLen = tmpRightLis.length;
+          const numId = tmpRightSelect[0].id;
+          if(type == 1){
+            for(let i = 0;i < tmpRightLis.length;i++){
+              if(numId === tmpRightLis[i].id){//选中的是第几个
+                if(i == 0){//第一个不能往上移动
+                  return;
+                }else{//先把这个元素和后面的输入框从数组中删除,再添加到数组里
+                  let tmp1 = tmpRightLis[i];
+                  tmpRightLis.splice(i,1);
+                  tmpRightLis.splice(i-1,0,tmp1);
+                  this.rightTagsList = [...tmpRightLis];
+                  this.$emit('changeActionData',this.getModuleTypeIds(), false);
+                  return
+                }
+              }
+            }
+          }else if(type == 2){
+            for(let i = 0;i < tmpRightLis.length;i++){
+              if(numId === tmpRightLis[i].id){
+                if(i == numLen-1){
+                  return;
+                }else{
+                  let tmp1 = tmpRightLis[i];
+                  tmpRightLis.splice(i,1);
+                  tmpRightLis.splice(i+1,0,tmp1);
+                  this.rightTagsList = [...tmpRightLis];
+                  this.$emit('changeActionData',this.getModuleTypeIds(), false);
+                  return;
+                }
+              }
+            }
+          }
+        },
+        toLeftList() {console.log(this.rightTagsList)
+            this.leftTagsList.push(...this.selectRightTagsList);
+            for (let i = 0; i < this.selectRightTagsList.length; i++) {
+                this.rightTagsList = this.rightTagsList.filter(item => item.id !== this.selectRightTagsList[i].id);
+            }
+            for (let i = 0; i < this.selectRightTagsList.length; i++) {
+                for (let j = 0; j < this.rightTagsList.length; j++) {
+                    if(this.selectRightTagsList[i].id === this.rightTagsList[j].id) {
+                        if(this.rightTagsList.length === 1) {
+                            this.rightTagsList = [];
+                        } else {
+                            this.rightTagsList.splice(j, 1);
+                        }
+                    }
+                }
+            }
+            this.selectLeftTagsList = [];
+            this.selectRightTagsList = [];
+            //this.getModuleTypeList();
+            this.$emit('changeActionData',this.getModuleTypeIds(), false);
+        },
+        toRightList() {
+            this.rightTagsList.push(...this.selectLeftTagsList);
+            for (let i = 0; i < this.rightTagsList.length; i++) {
+                this.leftTagsList = this.leftTagsList.filter(item => item.id !== this.rightTagsList[i].id)
+            }
+            this.selectLeftTagsList = [];
+            this.selectRightTagsList = [];
+            //this.getModuleTypeList();
+            this.$emit('changeActionData',this.getModuleTypeIds(), false);
+        },
+        getModuleTypeList() {
+          this.leftTagsList = []
+          if(this.hospital === ""){
+            return
+          }
+          return api.qcTypeList({hospitalId: ""+this.hospital, notIdList:this.getModuleTypeIds()||[]}).then((res) =>{
+            if(res.data.code==="0"){
+              const data = res.data.data;
+              this.leftTagsList = data;
+              this.selectLeftTagsList = [];
+              this.selectRightTagsList = [];
+            }else{
+              this.leftTagsList=[];
+              this.selectLeftTagsList = [];
+              this.selectRightTagsList = [];
+              this.warning("获取质控类型失败");
+            }
+          })
+        },
+      getModuleTypeIds(){
+          const list=this.rightTagsList;
+          return list.map((it)=>it.id);
+      },
+      warning(msg, type,time) {
+            this.$message({
+                showClose: true,
+                message: msg,
+                type: type || 'warning',
+                duration:time || '3000'
+            })
+        },
+    },
+    components:{
+      QCTipPop
+    }
+}
+</script>
+
+<style lang="less" scoped>
+@import '../../less/common.less';
+.operation-row{
+    text-align: right;
+}
+.exclu{
+    position: absolute;
+    right: -54px;
+    top: 5px;
+}
+.rightMore{
+    margin-left: 48px;
+}
+.commomSymptom {
+  .tagList.operationPools {
+    width: 100%;
+  }
+  div.bottomPartMids {
+    margin-left: 20px;
+  }
+  div.bottomPartMidss {
+    margin-top: 30px;
+  }
+}
+.qcTypeWrapper {
+    padding-left: 60px;
+    margin:-20px 0 20px;
+    position: relative;
+    .bottomPartLeft {
+        width: 40%;
+        box-sizing: border-box;
+        float: left;
+    }
+    .poolTitle {
+        // border-bottom: 1px solid @icssBorder;
+        box-sizing: border-box;
+        margin-bottom: 10px;
+        font-size: 12px;
+    }
+    .pool {
+        // border:1px solid @icssBorder;
+    
+    }
+    .search {
+        width: 100%;
+        border-bottom: 1px solid @icssBorder;
+        box-sizing: border-box;
+        height: 30px;
+    }
+    .tagList {
+        border: 1px solid @icssBorder;
+    }
+    .ellipsis{
+        .tip-icon{
+            display:inline-block;
+            width:16px;
+            height: 16px;
+            vertical-align: middle;
+            background-image:url("../../images/tip.png");
+            background-size:16px;
+            background-repeat:no-repeat;
+            &:hover,&.active{
+                 background-image:url("../../images/tip1.png");
+            }
+        }
+
+    }
+    /*.pop{
+        display: none;
+        position: absolute;
+        top:-30px;
+        right: -10px;
+        padding: 5px 10px;
+        background: #fff;
+        border:1px #ccc solid;
+        border-radius: 3px;
+        line-height: 20px;
+        font-size: 12px;
+        width: 300px;
+        word-break: break-all;
+        z-index: 1;
+    }*/
+    .tagPool {
+        height: 320px;
+        overflow-y: auto;
+
+    }
+    .tagItem {
+        position: relative;
+        line-height: 30px;
+        cursor: pointer;
+        padding: 0 10px;
+        /*z-index:0;*/
+    }
+    .operationPool {
+        position: relative;
+        width: 60%;
+        height: 300px;
+        padding: 10px 0;
+        overflow: auto;
+    }
+    .tagName{
+        margin-right: 10px;
+        font-size: 14px;
+        vertical-align: middle;
+    }
+    .bottomPartMid {
+        width: 8%;
+        margin-top: 60px;
+        p {
+        width: 100%;
+        text-align: center;
+        span {
+            cursor: pointer;
+            display: inline-block;
+            width: 30px;
+            height: 40px;
+            line-height: 40px;
+            margin: 0 auto;
+            border: 1px solid @icssBorder;
+            margin-bottom: 15px;
+            font-size: 18px;
+        }
+        }
+    }
+    .bottomPartRight {
+        float: left;
+        width: 40%;
+    }
+    .buttonBox {
+        width: 10%;
+        float: left;
+        margin-top: 30px;
+    }
+    .inputBox {
+        width: 120px;
+        .el-input {
+            .el-input__inner {
+                height: 30px;
+                background: rgb(234, 231, 231);
+            }
+        }
+    }
+}
+</style>

+ 49 - 8
src/components/qualityControl/QCTypeMang.vue

@@ -56,11 +56,11 @@
                 <el-table-column
                         label="操作" width="150">
                     <template slot-scope="scope">
-                        <el-button type="text" size="small" @click="toEditField(scope.row, 'modify')">修改</el-button>
+                        <el-button type="text" size="small" @click="ifUnbindDialog(scope.row, 'modify')">修改</el-button>
                         <span style="margin:0 3px;">|</span>
                         <el-button type="text" size="small" @click="toEditField(scope.row, 'copy')">复制</el-button>
                         <span style="margin:0 3px;">|</span>
-                        <el-button type="text" size="small" class="delete" @click="showDelDialog(scope.row.id)">删除</el-button>
+                        <el-button type="text" size="small" class="delete" @click="ifUnbindDialog(scope.row)">删除</el-button>
                     </template>
                 </el-table-column>
             </el-table>
@@ -160,16 +160,16 @@
         return field[0]?field[0].name:'';
       },
       getAllTypes(){
-        if(localStorage.getItem("qcHospitalTypes")){
+        /*if(localStorage.getItem("qcHospitalTypes")){
           this.hisTypes = JSON.parse(localStorage.getItem("qcHospitalTypes"));
           this.getDataList();
           return ;
-        }
+        }*/
         //获取枚举信息
         api.getQcTypes().then((res)=>{
           if(res.data.code==="0"){
             const data = res.data.data;
-            localStorage.setItem("qcHospitalTypes",JSON.stringify(data[13]));
+            //localStorage.setItem("qcHospitalTypes",JSON.stringify(data[13]));
             this.hisTypes =data[13];
             this.getDataList();
           }else{
@@ -251,16 +251,51 @@
         })
       },
       showConfirmDialog(msg,resolve){
-        this.$alert(msg, '提示', {
+        this.$confirm(msg, '提示', {
           confirmButtonText: '确定',
+          cancelButtonText: '取消',
           type: 'warning'
         }).then(() => {
           resolve();
         }).catch(() => {});
       },
-      showDelDialog(id){
+      ifUnbindDialog(data,type){
+        api.ifNeedUnbind({id:data.id,hospitalId:data.hospitalId,cancel:null}).then((res)=>{
+        const {code,msg} = res.data;
+          if(code==='00000005'){
+            this.showConfirmDialog(msg,()=>{
+              this.unbindQcType(data,type);
+            });
+          }else{
+            if(type==='modify'){
+              this.toEditField(data,type);     //编辑
+            }else{
+              this.showDelDialog(data);     //删除
+            }
+          }
+        }).catch((error)=>{
+          this.warning(error);
+        })
+      },
+      unbindQcType(data,type){
+        api.ifNeedUnbind({id:data.id,hospitalId:data.hospitalId,cancel:1}).then((res)=>{
+          if(res.data.code=='00000005'){
+            this.warning(res.data.msg||'解绑成功','success');
+            if(type==='modify'){
+              this.toEditField(data,type);     //编辑
+            }else{
+              this.showDelDialog(data);     //删除
+            }
+          }else{
+            this.warning(res.data.msg);
+          }
+        }).catch((error)=>{
+          this.warning(error);
+        })
+      },
+      showDelDialog(row){
         this.showConfirmDialog('是否删除该质控类型?',()=>{
-          api.delQcType({ids:[id]}).then((res)=>{
+          api.delQcType({ids:[row.id]}).then((res)=>{
             if(res.data.code=='0'){
               this.warning(res.data.msg||'操作成功','success');
               this.getDataList();
@@ -281,4 +316,10 @@
     .delete{
         color: red !important;
     }
+    .el-message-box__btns .el-button--default span{
+        color: @adminBase;
+    }
+    .el-message-box__btns .el-button--primary span{
+        color: #fff;
+    }
 </style>

+ 6 - 8
src/components/qualityControl/QualityControlTemp.vue

@@ -196,24 +196,22 @@ export default {
       return it ? it.name : '';
     },
     getAllTypes() {
-      if (localStorage.getItem('qcModuleTypes')) {
+      /*if (localStorage.getItem('qcModuleTypes')) {
         this.hospitalList = JSON.parse(localStorage.getItem('qcHospitalTypes'));
         this.moduleList = JSON.parse(localStorage.getItem('qcModuleTypes'));
         return new Promise(function(resolve, reject) {
           resolve();
         });
-      }
+      }*/
       //获取枚举信息
       return api.getQcTypes().then(res => {
         if (res.data.code === '0') {
           const data = res.data.data;
-          localStorage.setItem('qcFieldTypes', JSON.stringify(data[11]));
+          /*localStorage.setItem('qcFieldTypes', JSON.stringify(data[11]));
           localStorage.setItem('qcModuleTypes', JSON.stringify(data[12]));
-          localStorage.setItem('qcHospitalTypes', JSON.stringify(data[13]));
-          this.hospitalList = JSON.parse(
-            localStorage.getItem('qcHospitalTypes')
-          );
-          this.moduleList = JSON.parse(localStorage.getItem('qcModuleTypes'));
+          localStorage.setItem('qcHospitalTypes', JSON.stringify(data[13]));*/
+          this.hospitalList = data[13];
+          this.moduleList = data[12];
         } else {
           this.warning('获取枚举信息失败');
         }

BIN
src/images/spread.png


BIN
src/images/up.png