Sfoglia il codice sorgente

Merge branch 'test' of http://192.168.2.236:10080/zhouna/platformFront into test

luolei 5 anni fa
parent
commit
3c9672cfff
61 ha cambiato i file con 4933 aggiunte e 638 eliminazioni
  1. 1 0
      package.json
  2. 28 3
      src/api/config.js
  3. 9 0
      src/api/diagBase.js
  4. 3 0
      src/api/icss.js
  5. 9 0
      src/api/medicalStatistics.js
  6. 30 0
      src/api/medicalTerm.js
  7. 23 0
      src/api/safeControl.js
  8. 133 1
      src/api/utils.js
  9. 603 260
      src/components/diagBase/AddDiagBase.vue
  10. 42 22
      src/components/diagBase/DiagBase.vue
  11. 435 0
      src/components/diagBase/DisFeatureItem.vue
  12. 340 0
      src/components/diagBase/DisFormulaItem.vue
  13. 28 7
      src/components/diagBase/QuestionWords.vue
  14. 52 0
      src/components/diagBase/Textarea.vue
  15. 39 37
      src/components/icss/AddChemicalAndCommonMapping.vue
  16. 10 7
      src/components/icss/AddConceptRelation.vue
  17. 1 1
      src/components/icss/AddDisAndScaleRelation.vue
  18. 1 0
      src/components/icss/AddIndeptLabel.vue
  19. 23 8
      src/components/icss/AddMedicalMultRelation.vue
  20. 102 5
      src/components/icss/AddMedicalName.vue
  21. 12 6
      src/components/icss/AddMedicinePrompt.vue
  22. 1 1
      src/components/icss/AddPhysicalExamTemp.vue
  23. 34 8
      src/components/icss/AssaySon.vue
  24. 47 28
      src/components/icss/ChemicalAndCommonMapping.vue
  25. 34 20
      src/components/icss/ChronicAndIndexRelation.vue
  26. 34 8
      src/components/icss/ChronicDiseaseStructureList.vue
  27. 52 14
      src/components/icss/ConceptRelation.vue
  28. 2 3
      src/components/icss/DiagnosisList.vue
  29. 14 2
      src/components/icss/DisclaimerInformation.vue
  30. 40 23
      src/components/icss/IndeptLabel.vue
  31. 32 19
      src/components/icss/LabelGroup.vue
  32. 36 9
      src/components/icss/MedicalMultRelation.vue
  33. 36 10
      src/components/icss/MedicalName.vue
  34. 32 8
      src/components/icss/MedicalRelation.vue
  35. 10 10
      src/components/icss/MedicineInfoPg.vue
  36. 37 9
      src/components/icss/MedicinePrompt.vue
  37. 1 0
      src/components/icss/NoiseTemplate.vue
  38. 29 6
      src/components/icss/PhysicalExamTemplate.vue
  39. 9 8
      src/components/icss/PubIndeptTag.vue
  40. 9 5
      src/components/icss/PubTagGroup.vue
  41. 2 2
      src/components/icss/PubTagPartDetail.vue
  42. 116 0
      src/components/icss/SimilarListDrag.vue
  43. 1 1
      src/components/icss/SymptomTagGroup.vue
  44. 31 6
      src/components/icss/TemplateMaintenance.vue
  45. 39 11
      src/components/icss/VersionInfo.vue
  46. 146 0
      src/components/medicalStatistics/MedicalStatistics.vue
  47. 433 0
      src/components/medicalTerm/AddAssistCheckMultRelation.vue
  48. 368 0
      src/components/medicalTerm/AddAssistCheckSon.vue
  49. 275 0
      src/components/medicalTerm/AssistCheckMultRelation.vue
  50. 273 0
      src/components/medicalTerm/AssistCheckSon.vue
  51. 1 7
      src/components/preTreat/AddSimpleQuestion.vue
  52. 35 9
      src/components/preTreat/CombinQuestion.vue
  53. 30 18
      src/components/preTreat/PubIndeptQa.vue
  54. 36 8
      src/components/preTreat/PubSelect.vue
  55. 34 8
      src/components/preTreat/QuestionModules.vue
  56. 5 5
      src/components/preTreat/QuestionTagGroup.vue
  57. 39 11
      src/components/preTreat/SimpleQuestion.vue
  58. 286 0
      src/components/safeControl/AddToken.vue
  59. 346 0
      src/components/safeControl/TokenControl.vue
  60. 21 1
      src/routes.js
  61. 3 3
      vue.config.js

+ 1 - 0
package.json

@@ -26,6 +26,7 @@
     "@vue/eslint-config-standard": "^3.0.4",
     "axios": "^0.18.0",
     "element-ui": "^2.4.7",
+    "jquery": "^3.4.1",
     "js-md5": "^0.7.3",
     "less": "^3.8.1",
     "less-loader": "^4.1.0",

+ 28 - 3
src/api/config.js

@@ -1,6 +1,7 @@
 export default {
   host:'http://192.168.2.241:5050',
   imgHost:'http://192.168.2.241:82',      //富文本编辑器图片回传地址
+  delayTime: 500,
   urls: {
     /* 登录注册相关接口 */
     'getImgVerification': '/api/user/userver/getImgVerification',
@@ -149,7 +150,7 @@ export default {
     'getVersionDetlInfo': 'api/knowledgeman/versionDetail/getDetailById', //版本信息-版本说明列表获取
     'promptServer':'/api/knowledgeman/file/uploadImage',    //静态知识富文本图片上传
     /**************医学术语维护****************/
-    'getKnowledgeEnums':'api/knowledgeman/getKlmEnumsData', //术语库枚举
+    'getKnowledgeEnums':'/api/knowledgeman/getKlmEnumsData', //术语库枚举
 	  'saveConceptInfo':'/api/knowledgeman/conceptDetail/insertOrUpdate',   //保存术语静态知识
     'delConceptInfo':'/api/knowledgeman/conceptDetail/delete',   //删除术语静态知识
     'knowledgeName': 'api/knowledgeman/concept/getAllInformation', //医学术语-命名维护
@@ -157,6 +158,7 @@ export default {
     'allKnowledgeType': 'api/knowledgeman/lexicon/getAllLexicon', //医学术语-类型列表
     'deletMedicalName': 'api/knowledgeman/concept/removeConceptInfo', //医学术语-命名维护-删除
     'getMedicalDetail': 'api/knowledgeman/concept/getConceptInfoDetail', //医学术语-命名维护-详情
+    'getSimilarList': 'api/knowledgeman/similar/getSimilarList', //医学术语-命名维护-相似词
     'addMedicalName': 'api/knowledgeman/concept/addConceptInfo', //医学术语-命名维护-添加修改
     'knowledgeRelation': 'api/knowledgeman/relation/getRelationInfoList', //医学术语-关系维护
     'delKnowledgeRelation': 'api/knowledgeman/relation/removeRelationInfo', //医学术语-关系维护-删除
@@ -218,6 +220,16 @@ export default {
     'addMultRelation': 'api/knowledgeman/multContact/addRelation', //知识库标准化-医学术语多层关联维护-添加或者编辑
     'reloadLib': 'api/knowledgeman/reload/createFile', //术语命名-加载词库
     'getDeptList': '/api/knowledgeman/concept/getConceptListByType', //术语命名-诊断-科室
+    'assistCheckMultContactList': '/api/knowledgeman/pacsMultContact/multContactList',   //医学术语维护-辅检层级维护列表
+    'assistCheckAddMultRelation': '/api/knowledgeman/pacsMultContact/addRelation',   //医学术语维护-辅检层级维护-添加关联
+    'assistCheckMultRelationDetail': '/api/knowledgeman/pacsMultContact/relationContactDetail',   //医学术语维护-辅检层级维护-详情
+    'assistCheckRemoveMultRelation': '/api/knowledgeman/pacsMultContact/removeRelationContact',   //医学术语维护-辅检层级维护-删除或恢复
+    'assistCheckPacsSonContactList': '/api/knowledgeman/pacsSonContact/pacsSonContactList', //医学术语维护-辅检子项维护列表
+    'assistCheckPacsAddPacsRelation': '/api/knowledgeman/pacsSonContact/addPacsRelation', //医学术语维护-辅检子项维护-添加或编辑
+    'assistCheckGetPacsContactDetail': '/api/knowledgeman/pacsSonContact/getPacsContactDetail', //医学术语维护-辅检子项维护-详情
+    'assistCheckRemoveRelationPacs': '/api/knowledgeman/pacsSonContact/removeRelationPacs', //医学术语维护-辅检子项维护-删除或恢复
+    
+
 	  /*********预问诊相关接口**********/
 	  'questionList':'/api/precman/questionInfo_prec/page',     //预问诊-填写单列表
     'questionAdd':'/api/precman/questionInfo_prec/saveOrUpdate',      //预问诊-填写单添加
@@ -245,7 +257,17 @@ export default {
      'diagBaseUpdateNeo': '/api/knowledgeman/diagnose/updateNeo', //诊断依据--更新图谱
      'diagBaseVerifyAllData': '/api/knowledgeman/diagnose/verifyAllData', //诊断依据--校验所有数据
      'diagBaseVerifyData': '/api/knowledgeman/diagnose/verifyData', //诊断依据--校验数据
-
+     'tempSaveOrUpate':'/api/knowledgeman/diagnose/tempSaveOrUpate', //诊断依据-临时保存
+     'diagBaseSearch':'/api/knowledgeman/diagnose/search', //诊断依据-搜索标准词或者关联词
+     'getUniqueNameWithList': '/api/knowledgeman/lisMapping/getUniqueNameWithList', //医学数据-查找化验公表名
+      /*********数据统计  *********/
+      'statisticsCount': '/api/bi/statistics/count', //诊断依据--校验数据
+      /*********安全管理  *********/
+      'tokenList': '/api/mrqcman/mrqcToken/list',  // 令牌列表
+      'tokenSaveOrUpdate': '/api/mrqcman/mrqcToken/saveOrUpdate', // 令牌新增或修改
+      'tokenDetails': '/api/mrqcman/mrqcToken/getById', // 令牌明细
+      'tokenDelete': '/api/mrqcman/mrqcToken/delete', // 令牌删除
+      'tokenAnalysis': '/api/mrqcman/mrqcToken/analysis' //解析
   },
 	menuIconList: { //菜单对应图标
 		'YH-KZT': 'el-icon-menu',
@@ -276,5 +298,8 @@ export default {
   ],
   msg:{
     imgTip:'无法上传图片,图片大小不可超过2M'
-  }
+  },
+  pageSizeArr:[10,50,100,500,1000,5000],         //分页每页显示条数选项
+  pageSize:10,      //初始每页显示条数
+  pageLayout:"total,sizes,prev, pager, next, jumper",        //分页组件成分
 }

+ 9 - 0
src/api/diagBase.js

@@ -53,5 +53,14 @@ export default {
     },
     diagBaseVerifyData(param){ //诊断依据--校验数据
         return axios.post(urls.diagBaseVerifyData, param)
+    },
+    getUniqueNameWithList(param) { //诊断依据--获取公表项
+        return axios.post(urls.getUniqueNameWithList, param)
+    },
+    tempSaveOrUpate(param) { //诊断依据-临时保存
+        return axios.post(urls.tempSaveOrUpate, param)
+    },
+    diagBaseSearch(param) { //诊断依据-临时保存
+        return axios.post(urls.diagBaseSearch, param)
     }
 }

+ 3 - 0
src/api/icss.js

@@ -253,6 +253,9 @@ export default {
     addMedicalName(param) {//命名维护--新增、修改
         return axios.post(urls.addMedicalName, param)
     },
+    getSimilarList(param) { //命名维护--相似词
+        return axios.post(urls.getSimilarList, param)
+    },
     knowledgeRelation(param) {//关系维护
         return axios.post(urls.knowledgeRelation, param)
     },

+ 9 - 0
src/api/medicalStatistics.js

@@ -0,0 +1,9 @@
+import axios from 'axios';
+import config from './config.js';
+const urls = config.urls;
+
+export default {
+    statisticsCount() {
+        return axios.post(urls.statisticsCount)
+    }
+}

+ 30 - 0
src/api/medicalTerm.js

@@ -0,0 +1,30 @@
+import axios from 'axios';
+import config from './config.js';
+const urls = config.urls;
+
+export default {
+    assistCheckMultContactList(param) {   //医学术语维护-辅检层级维护列表
+        return axios.post(urls.assistCheckMultContactList, param)
+    },
+    assistCheckAddMultRelation(param) {   //医学术语维护-辅检层级维护-添加关联
+        return axios.post(urls.assistCheckAddMultRelation, param)
+    },
+    assistCheckMultRelationDetail(param) {   //医学术语维护-辅检层级维护-详情
+        return axios.post(urls.assistCheckMultRelationDetail, param)
+    },
+    assistCheckRemoveMultRelation(param) {   //医学术语维护-辅检层级维护-删除或恢复
+        return axios.post(urls.assistCheckRemoveMultRelation, param)
+    },
+    assistCheckPacsSonContactList(param) { //医学术语维护-辅检子项维护列表
+        return axios.post(urls.assistCheckPacsSonContactList, param)
+    },
+    assistCheckPacsAddPacsRelation(param) { //医学术语维护-辅检子项维护-添加或编辑
+        return axios.post(urls.assistCheckPacsAddPacsRelation, param)
+    },
+    assistCheckGetPacsContactDetail(param) { //医学术语维护-辅检子项维护-详情
+        return axios.post(urls.assistCheckGetPacsContactDetail, param)
+    },
+    assistCheckRemoveRelationPacs(param) {  //医学术语维护-辅检子项维护-删除或恢复
+        return axios.post(urls.assistCheckRemoveRelationPacs, param)
+    },
+}

+ 23 - 0
src/api/safeControl.js

@@ -0,0 +1,23 @@
+import axios from 'axios';
+import config from '@api/config.js';
+
+const urls = config.urls;
+export default {
+    tokenList(param){  // 令牌列表
+        return axios.post(urls.tokenList, param)
+    },
+    tokenSaveOrUpdate(param){   // 令牌新增或修改
+        return axios.post(urls.tokenSaveOrUpdate, param)
+    },
+    tokenDetails(param){  // 令牌明细
+        return axios.post(urls.tokenDetails, param)
+    },
+    tokenDelete(param){  //令牌删除
+        return axios.post(urls.tokenDelete, param)
+    },
+    tokenAnalysis(param) { //解析
+        return axios.post(urls.tokenAnalysis, param) 
+    }
+  
+
+}

+ 133 - 1
src/api/utils.js

@@ -1,3 +1,102 @@
+import $ from 'jquery';
+
+function getWindowInnerHeight(){
+  if(window.innerHeight!=undefined){
+    return window.innerHeight;
+  }else{
+    let by = document.body, ele = document.documentElement;
+    return Math.min(by.clientHeight,ele.clientHeight);
+  }
+};
+function getWindowInnerWidth(){
+  let width = window.innerWidth || document.body.clientWidth || document.documentElement.clientWidth
+  return width
+};
+function getPageCoordinate(event,stic){//获取鼠标点击的位置
+  let e = event || window.event;
+  var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
+  var scrollY = document.documentElement.scrollTop || document.body.scrollTop;
+  var x = e.pageX || (e.clientX + scrollX);
+  var y = (e.pageY+(stic?25:0)) || (e.clientY + scrollY + (stic?25:0));//弹窗位置偏下25
+  let obj = {
+    boxLeft : x ,
+    boxTop : y+18
+  }
+  return obj;
+}
+
+ /**
+ * @param {拖动元素/清除拖动事件监听} type add:添加事件监听  del:移除事件监听
+ * @param {展开元素id} addDom 
+ */
+let width = '',//屏幕宽度
+  height = '', //屏幕高度
+  dragWrapper = '',//拖拽元素
+  mouseX = 0,//鼠标距离页面左侧
+  mouseY = 0,//鼠标距离页面上部
+  dragX = 0,//鼠标可拖拽到左边的最大距离(元素定位左侧距离)
+  dragY = 0,//鼠标可拖拽到上边的最大距离(元素定位上边距离)
+  isDrag = false,//元素是否处于拖拽中
+  addPart = null;//展开区域,这个展开的宽度应当是固定宽度了
+/**
+ * 
+ * @param {事件对象} event 
+ * @param {被拖动的元素} dragModalWrap
+ * @param {可拖动的区域} dragModalTitle 
+ */
+function handleMove(event) {
+  let wrap = $("#"+dragWrapper); //被拖拽的元素
+  let dragDes = $("#"+addPart); //展開区域
+  let page = getPageCoordinate(event, '0');//获取鼠标位置
+  let maxDragX = 0,dragDesWidth = 0;
+  let wrapHeight = wrap[0].offsetHeight;//直接用.height()获取的高度不准确
+  let wrapWidth = wrap[0].offsetWidth;
+  let maxDragY = height - wrapHeight; //最大可拖拽y方向距离
+  if (dragDes[0]) { //存在就有类似治疗方案的弹窗,最大可推拽x方向距离
+    dragDesWidth = dragDes[0].offsetWidth//展开元素的宽度
+    maxDragX = width - wrapWidth - dragDesWidth
+  } else {
+    maxDragX = width - wrapWidth
+  }
+  if (isDrag) {
+    dragX = page.boxLeft - mouseX //鼠标可拖拽到左边的最大距离
+    dragY = page.boxTop - mouseY //鼠标可拖拽到上边的最大距离
+    if (dragX < 300) { //不能超出左边界
+      dragX = 300
+    }
+    if (dragY < 100) { //不能超出上边界
+      dragY = 100
+    }
+    if (dragDes[0]) {
+      if (width - dragX - dragDesWidth < wrapWidth) { //不能超出右边界
+        dragX = maxDragX
+      }
+    } else {
+      if (width - dragX < wrapWidth) { //不能超出右边界
+        dragX = maxDragX
+      }
+    }
+    if (height - dragY < wrapHeight) { //不能超出下边界
+      dragY = maxDragY
+    }
+    // isMove = true
+    wrap.css({
+      left: dragX + 'px',
+      marginLeft: 0 + 'px',
+      marginTop: 0 + 'px',
+      top: dragY + 'px',
+      bottom:'auto',
+      right:'inherit',
+    })
+  }
+}
+/**
+ * 鼠标弹起弹窗不在跟随鼠标移动
+ */
+function handleUp(){
+  isDrag = false;
+  return
+}
 export default {
   //判断字符串是否能转成json
   isJsonStr(str) {
@@ -206,7 +305,8 @@ export default {
       "labelSuffix":'suffix',                                 //后缀
       "maxValue":'maxNormalVal',                                 //前缀
       "minValue":'minNormalVal',                                 //后缀
-      "specFlag": 'specFlag' //标记状态(0:没有标记,1:主诉高亮,2:诱因记录)
+      "specFlag": 'specFlag', //标记状态(0:没有标记,1:主诉高亮,2:诱因记录)
+      "selFlag":'selFlag',
     };
     if (tagFlag == 2) {
       maps["tagType"] = 'region2'
@@ -278,6 +378,7 @@ export default {
       specFlag:'specFlag',
       required: 'required',
       explains:'explains',
+      flag:'flag'
     };
     isDpt?maps.controlType = 'region2':maps.tagType = 'region2';
     let obj = {};
@@ -292,5 +393,36 @@ export default {
   getImgName(url){
     const arr = url.split("/");
     return arr[arr.length-1];
+  },
+ 
+  dragBox(dragWrap,dragTop,type,addDom,img) {
+    let drag = $("#"+dragTop); //拖拽区域
+    let wrap = $("#"+dragWrap); //被拖拽的元素
+    width = getWindowInnerWidth(); 
+    height = getWindowInnerHeight();
+    addPart = addDom||null;
+    dragWrapper = dragWrap;
+    if (type === 'del') {
+      $(document).off('mousemove', handleMove)
+      $(document).off('mouseup', handleUp)
+    } else {
+      drag.on('mousedown', function (event) {
+        let lenHeight = wrap.height()
+        if(img){
+          $("#preImg").css("height",(lenHeight)+'px')
+          $("#dragModalWrap").css("height",(lenHeight)+'px')
+        }
+        let page = getPageCoordinate(event, '0');
+        mouseX = page.boxLeft - wrap.offset().left; //鼠标到拖拽元素的左边界的距离
+        mouseY = page.boxTop - wrap.offset().top; //鼠标到拖拽元素的上边界的距离
+        isDrag = true
+      })
+      $(document).on('mousemove', handleMove)
+      $(document).on('mouseup', handleUp)
+    }
+  },
+  getCurrentPage(currentChange, total, pageSize) {
+    const currentPage =  currentChange > Math.ceil(total/pageSize) ? Math.ceil(total/pageSize) : currentChange
+    return currentPage;
   }
 }

File diff suppressed because it is too large
+ 603 - 260
src/components/diagBase/AddDiagBase.vue


+ 42 - 22
src/components/diagBase/DiagBase.vue

@@ -47,8 +47,8 @@
                     :resizable = "false"
                     label="校验数据">
                     <template slot-scope="scope" >
-                        <span :class="scope.row.hasQuestion == '0' ? '': 'hsaQuestion'">
-                            {{scope.row.hasQuestion == '0' ? "无问题词" : "有问题词"}}
+                        <span :class="scope.row.hasQuestion == '0' ? '': scope.row.hasQuestion == '1'? 'hsaQuestion' :scope.row.hasQuestion == '2'?'hasTemp':''">
+                            {{scope.row.hasQuestion == "0" ? "无问题词" : scope.row.hasQuestion == "1"? "有问题词":scope.row.hasQuestion == "2"?"暂存数据":""}}
                         </span>
                     </template>
                 </el-table-column>
@@ -69,40 +69,33 @@
                     <template slot-scope="scope">
                         <el-button  @click="modifyDiagBase(scope.row, 'modify')" type="text" size="small">修改</el-button>
                         <span style="margin:0 3px;">|</span>
+                        <el-button  @click="modifyDiagBase(scope.row,'copy')" type="text" size="small">复制</el-button>
+                        <span style="margin:0 3px;">|</span>
                         <el-button @click="showDelDialog(scope.row.id)" class="delete" type="text" size="small">删除</el-button>
                         
                     </template>
                 </el-table-column>
             </el-table>
         <div class="pagination">
-            <el-pagination v-if="total>pageSize"
-                       :current-page.sync="currentPage"
+            <el-pagination :current-page.sync="currentPage"
                        @current-change="currentChange"
                        background
                        :page-size="pageSize"
-                       layout="total,prev, pager, next, jumper"
+                       :page-sizes="pageSizeArr"
+                       @size-change="handleSizeChange"
+                       :layout="pageLayout"
                        :total="total">
             </el-pagination>
         </div>
-        
         </div>
-       <!--  <div class="pagination">
-           <el-pagination v-if="total>pageSize"
-                      :current-page.sync="currentPage"
-                      @current-change="currentChange"
-                      background
-                      :page-size="pageSize"
-                      layout="total,prev, pager, next, jumper"
-                      :total="total">
-           </el-pagination>
-       </div> -->
-        
     </div>
 </template>
 
 <script>
 import api from '@api/diagBase.js';
 import apis from '@api/icss.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
 
 export default {
     name: 'diagBase',
@@ -117,7 +110,9 @@ export default {
                 hasQuestion: '', //有无问题词
             },
             currentPage: 1,
-            pageSize: 10,
+          pageSize: config.pageSize,
+          pageSizeArr:config.pageSizeArr,
+          pageLayout:config.pageLayout,
             total: 0,
             modifier: '',
         }
@@ -143,9 +138,15 @@ export default {
   beforeRouteEnter(to, from, next) {
     next(vm => {
       Object.assign(vm, to.params);
+      vm.inCurrentPage=to.params.currentPage;
     })
   },
     methods: {
+      handleSizeChange(val){
+        this.pageSize = val;
+        this.currentPage = utils.getCurrentPage(this.currentPage, this.total, this.pageSize);
+        this.getDataList();
+      },
         getDropList() {
           return apis.getKnowledgeEnums().then((res) =>{
               if(res.data.code === '0') {
@@ -159,9 +160,20 @@ export default {
             setTimeout(()=>{
               this.searched = true;
             },0)
+            const loading = this.$loading({
+                lock: true,
+                text: 'Loading',
+                spinner: 'el-icon-loading',
+                background: 'rgba(0, 0, 0, 0.7)'
+            });
             api.diagBasePage(param).then((res) => {
+                loading.close()
                 this.list = res.data.data.records
                 this.total = res.data.data.total;
+              if(this.inCurrentPage!==undefined){
+                this.currentPage=this.inCurrentPage;
+                this.inCurrentPage = undefined;
+              }
             })
         },
         filterDatas() {
@@ -171,8 +183,10 @@ export default {
         addDiagBase() {
           const pam = this.searched ? {
             currentPage: this.currentPage,
+            pageSize:this.pageSize,
             filter: this.filter
-          } : {currentPage: this.currentPage};
+          } : {currentPage: this.currentPage,
+            pageSize:this.pageSize};
           this.$router.push({name: 'AddDiagBase', params: pam});
         },
         verifyAllData() {
@@ -186,6 +200,7 @@ export default {
             loading.close();
             const {code,data,msg} = res.data;
             if(code === '0') {
+              this.warning('校验完成','success')
               this.currentPage = 1;
                this.pageSize = 10,
                this.filter.disName = '',
@@ -205,8 +220,10 @@ export default {
                     const item = Object.assign({},row,data);
                     const pam = this.searched ? {
                       currentPage: this.currentPage,
+                      pageSize:this.pageSize,
                       filter: this.filter
-                    } : {currentPage: this.currentPage};
+                    } : {currentPage: this.currentPage,
+                      pageSize:this.pageSize};
                     if(type == 'modify') {
                       this.$router.push({
                         name: 'AddDiagBase',
@@ -242,9 +259,9 @@ export default {
               this.clearFilter();
             };
             const param = {
-                current: this.currentPage,
+                current: this.inCurrentPage||this.currentPage,
                 size: this.pageSize,
-                disName: this.filter.disName,
+                disName: this.filter.disName.trim(),
                 modifier: this.filter.modifier, //操作人
                 hasQuestion: this.filter.hasQuestion, //有无问题词
             };
@@ -319,4 +336,7 @@ export default {
     .hsaQuestion {
         color: red;
     }
+    .hasTemp{
+      color: blue;
+    }
 </style>

+ 435 - 0
src/components/diagBase/DisFeatureItem.vue

@@ -0,0 +1,435 @@
+<template>
+    <tr> 
+                    <td class="FeatureSort" >{{index+1}}</td>
+                    <td class="FeatureType" >
+                        <el-select size="mini" :class="{selectType: item.typeNull}" v-model.trim="item.type" placeholder="标签类型" @change="clickItem(index,'FeatureType')">
+                            <el-option v-for="item in featureTypeList" :label="item.name" :value="item.key" :key="item.key"></el-option>
+                        </el-select>
+                    </td>
+                    <td class="FeatureNumber" :class="{borderRed:item.verifyCode||item.codeNull}"  @click.self="clickItemBox" >
+                        <el-tooltip :disabled="!item.verifyCode&&!item.codeNull&&!item.codeError" class="item" effect="dark" :content="item.verifyCode||item.codeNull||item.codeError" placement="top">
+                            <el-input class="groupTextarea" 
+                                ref="textarea"
+                                type="textarea"  
+                                :autosize="{ minRows: 1}"
+                                :class="{colorRed: item.codeError}" 
+                                :title="item.code" 
+                                v-model.trim="item.code"
+                                 @input="handleInp(index,$event,'FeatureNumber')"  
+                                 @focus="clickItem(index,'FeatureNumber')">
+                            </el-input>
+                        </el-tooltip>
+                    </td>
+                    <td class="FeatureStand" :class="{borderRed:item.verifyStandard||item.standardNull}"    @click.self="clickItemBox">
+                        <el-tooltip  :disabled="!item.verifyStandard&&!item.standardNull" class="item" effect="dark" :content="item.verifyStandard||item.standardNull" placement="top">
+                            <el-input class="groupTextarea" 
+                                ref="textarea" 
+                                type="textarea"
+                                :autosize="{ minRows: 1}"
+                                :title="item.standard" 
+                                v-model.trim="item.standard" 
+                                @input="handleInp(index,$event,'FeatureStand',item.type)"   
+                                @focus="clickItem(index,'FeatureStand')">
+                            </el-input>
+                        </el-tooltip>    
+                        <div  class="searchItemBox">
+                            <ul 
+                                class="searchItemList"
+                                v-if="showDiagList&&index === searchIndex && searchFiled ==='FeatureStand' && searchResultList.length > 0"
+                            >
+                                <li v-for="(item, ind) in searchResultList" 
+                                    class="diagItem ellipsis"
+                                    :key="ind"
+                                    :title="item"
+                                    @click="selectSearchItem(index,item,'FeatureStand')"
+                                > 
+                                    {{item}}
+                                </li>
+
+                            </ul>  
+                        </div> 
+                          
+                    </td>
+                    <td class="FeatureRelate"  :class="{borderRed:item.verifyRelation|| item.relationNull}"  @click.self="clickItemBox">
+                        <el-tooltip :disabled="!item.verifyRelation&&!item.relationNull"  class="item" effect="dark" :content="item.verifyRelation||item.relationNull" placement="top">
+                            <el-input class="groupTextarea" 
+                                ref="textarea"
+                                type="textarea"
+                                :autosize="{ minRows: 1}"
+                                :title="item.relation" 
+                                v-model.trim="item.relation" 
+                                @input="handleInp(index,$event,'FeatureRelate',item.type)"  
+                                @focus="clickItem(index,'FeatureRelate')">
+                            </el-input>
+                           
+                        </el-tooltip> 
+                        <div class="searchItemBox">
+                             <ul 
+                                class="searchItemList"
+                                v-if="showDiagList&&index === searchIndex && searchFiled ==='FeatureRelate' && searchResultList.length > 0"
+                            >  
+                                <li v-for="(item, ind) in searchResultList" 
+                                    class="diagItem ellipsis"  
+                                    :key="ind"
+                                    :title="item"
+                                    @click="selectSearchItem(index,item,'FeatureRelate')"
+                                > 
+                                    {{item}}
+                                </li>
+
+                            </ul>
+                        </div>
+                        
+                    </td>
+                     <td class="FeatureuniqueName inpDisabled"  :class="{borderRed:item.uniqueName===null ||item.verifyUnique}" >
+                        <el-tooltip :disabled="!item.verifyUnique"  class="item" effect="dark" :content="item.verifyUnique" placement="top">
+                            <el-input class="groupTextarea inpDisabled"  
+                                ref="textarea"
+                                type="textarea"
+                                :readonly = true
+                                :autosize="{ minRows: 1}"
+                                :title="item.uniqueName" 
+                                v-model.trim="item.uniqueName" 
+                                >
+                            </el-input>
+                            
+                        </el-tooltip> 
+                    </td>
+                    <td class="FeatureResult" :class="{inpDisabled:item.type!=3,borderRed:item.verifyResult,}" @click.self="clickItemBox">
+                        <el-tooltip :disabled="!item.verifyResult"  class="item" effect="dark" :content="item.verifyResult" placement="top">
+                            <el-input class="groupTextarea"
+                                ref="textarea"
+                                type="textarea"  
+                                :autosize="{ minRows: 1}"
+                                :readonly="item.type!=3"  
+                                :class="{inpDisabled:item.type!=3}"  
+                                :title="item.midResult" 
+                                v-model.trim="item.midResult" 
+                                @input="handleInp(index,$event,'FeatureResult')"
+                                @focus="clickItem(index,'FeatureResult')">
+                            </el-input>
+                        </el-tooltip> 
+                    </td>
+                    <td class="FeatureOpera">
+                        <el-button type="text" size="small" class="delete" @click="addItem(index, 1)"><div class="btnOpera">+</div></el-button>
+                        <el-button v-if="index !=0" type="text" size="small" class="delete" @click="delItem(index, 1)"><div class="btnOpera">-</div></el-button>
+                    </td>
+                </tr>
+</template>
+<script>
+import config from '@api/config.js';
+export default {
+    props:['item', 'index','featureTypeList','showDiagList','searchIndex',
+            'searchFiled', 'searchResultList'],
+    data() {
+        return {
+            timer: undefined
+        }
+    },
+    mounted(){
+        this.$nextTick(()=>{
+            if(Array.isArray(this.$refs.textarea)) {
+                for(let i=0; i <this.$refs.textarea.length; i++) {
+                    this.$refs.textarea[i].resizeTextarea()
+                } 
+            }else {
+                this.$refs.textarea&&this.$refs.textarea.resizeTextarea()
+            }
+            
+        })
+       
+   },
+    methods: {
+        handleInp(index,e,type,itemType) {
+            clearTimeout(this.timer)
+            let timer = setTimeout(()=>{
+                clearTimeout(this.timer);
+                this.$emit('handleInp',{index,e,type,itemType})
+            }, config.delayTime)
+            this.timer = timer
+        },
+        clickItem(index, type) {
+             this.$emit('clickItem',{index, type})
+        },
+        addItem(index, type) {
+          this.$emit('addItem',{index, type}) 
+        },
+        delItem(index, type) {
+          this.$emit('delItem',{index, type}) 
+        },
+        selectSearchItem(index, item, searchType) {
+            this.$emit('selectSearchItem',{index, item, searchType}) 
+        },
+        clickItemBox(e) {
+            e.target.children[0].focus()
+        },
+    }
+}
+</script>
+<style lang="less" scoped>
+    @import '../../less/common.less';
+        table,tr,td {
+            list-style: none;
+        }
+        .topBack {
+            top: 0;
+        }
+        .groupTitle {
+            background-color: #fff;
+            height: 40px;
+            line-height: 40px;
+            padding-left: 20px;
+        }
+        .searchInput, .searchName {
+            display: inline-block;
+            height: 32px;
+            line-height: 32px;
+            border: 1px solid #a9a9a9;
+            margin: 0px 0 0 0;
+            padding: 0 5px;
+            float: left;
+            margin-top: 4px;
+        }
+        .isRequired .el-form-item__label::before {
+            content: '*';
+            color: red;
+        }
+        .searchName {
+            border-left: none;
+            cursor: pointer;
+            font-size: 16px;
+            padding: 0 14px;
+        }
+        .itemList {
+            position: absolute;
+            background: #fff;
+            width: 162px;
+            max-height: 150px;
+            border: 1px solid #a9a9a9;
+            left: 138px;
+            top: 37px;
+            z-index: 2;
+            overflow-y: auto;
+        }
+        .diagItem {
+            padding: 0 5px;
+            height: 30px;
+            line-height: 30px;
+            font-size: 14px;
+            cursor: pointer;
+        }
+        .diagItem:hover {
+            background: #f5f7fa;
+        }
+        .addDepartForm {
+            position: relative;
+            background-color: #fff;
+            padding: 20px;
+            margin: 70px 20px 0px 20px;
+        }
+        .addDiagName {
+            position: relative;
+        }
+        .symptomList {
+            position: relative;
+            background-color: #fff;
+             padding: 0px 20px 100px 20px;
+             margin: 0px 20px 40px 20px;
+             min-height: 400px;
+        }
+        
+        .diagTable {
+            width: 100%;
+            border-collapse: collapse;
+            margin-bottom: 20px;
+            tr {
+                td {
+                    /deep/textarea::-webkit-scrollbar{
+                        display: none;
+                    }
+                    position: relative;
+                    border: 1px solid #a9a9a9;
+                    text-align: center;
+                }
+                .FormulaOpera, .FeatureOpera{
+                    background: #fff;
+                    border: none;
+                    text-align: left;
+                    padding-left: 30px;
+                }
+                /deep/.el-textarea__inner {
+                    width: 100%;
+                    line-height: 20px;
+                    resize:none;
+                    border: none;
+                    border-radius: 0;
+                    text-align: center;
+                }
+            }
+            .selectedContent {
+                width: 25%;
+            }
+            .selectedContentGroup {
+                width: 55%;
+            }
+            .selectedContentOpera {
+                width: 20%;
+            }
+        }
+        .groupInput {
+            text-align: center;
+            color: #606266;
+            width: 80%;
+        }
+        .groupTextarea {
+             text-align: center;
+            color: #606266;
+            width: 100%;
+        }
+        .btn {
+            position: absolute;
+            background-color: #fff;
+            width: 100%;
+            margin: 20px 0;
+            height: 40px;
+            bottom: 0px;
+            right: 0px;
+            .btnBox {
+                position: absolute;
+                right: 0px;
+                
+            }
+            .el-button {
+                margin-right: 20px;
+               
+            }
+        }
+        .tableTitle{
+            background: rgba(239,243,249,1);
+            height: 40px;
+        }
+        .require::after{
+            content:"*";
+            color: red;
+        }
+        .borderRed {
+            border: 3px solid red !important;
+            box-sizing: border-box !important;
+        }
+        .colorRed {
+            color: red;
+        }
+        .FeatureSort {
+            width: 5%;
+        }
+        .FeatureType {
+            width: 7%;
+            padding: 0 5px;
+        }
+        .FeatureNumber {
+            width: 8%;
+        }
+        .FeatureStand {
+            width: 20%;
+        }
+        .FeatureRelate {
+            width: 30%;
+        }
+        .FeatureuniqueName {
+            width: 10%;
+        }
+        .FeatureResult {
+            width: 10%;
+        } 
+        .FeatureOpera{
+            width: 10%;
+        } 
+        .FormulaSort{
+            width: 5%;
+        } 
+        .FormulaType{
+            width: 7%;
+            padding: 0 5px;
+        } 
+        .FormulaNumber{
+            width: 78%;
+        } 
+        .FormulaOpera{
+            width: 10%;
+        }
+        .btnOpera {
+            width:16px;
+            height:16px;
+            background:rgba(176,190,197,1);
+            border-radius: 50%;
+            color: #fff;
+            line-height: 16px;
+            text-align: center;
+        }
+        /deep/.el-input--mini .el-input__inner {
+            width: 80px;
+        }
+        /deep/ .is-disabled {
+                    background: #ECECEC;
+                    color: #AAAAAA;
+                    border: none;
+                }
+        .selectType {
+            input {
+                border: 3px solid red;
+            }
+            input:hover {
+                border: 3px solid red;
+            }
+        }
+        .moduleTitle {
+            margin: 0 0 10px 0;
+            font-weight: 600;
+        }
+        .inpDisabled{
+            background: #ECECEC;
+            cursor: not-allowed;
+            textarea {
+                background: #ECECEC;
+                color: #AAAAAA;
+                border: none;
+                cursor: not-allowed;
+                height: 100%;
+            }
+            
+        }
+        .inpTips {
+            font-size: 14px;
+            color: red;
+            margin-bottom: 10px;
+        }
+        #upFile{
+            display: none
+        }
+        .disableDiv {
+            background: rgb(236, 236, 236);
+            box-sizing: border-box;
+            cursor: not-allowed;
+            font-size: 14px;
+            line-height: 20px;
+            padding: 5px 0;
+            min-height: 30px;
+        }
+        .searchItemBox{
+            position: relative;
+            bottom: 0px;
+        }
+        .searchItemList {
+            position: absolute;
+            border: 1px solid #a9a9a9;
+            box-sizing: border-box;
+            top: 4px;
+            z-index: 2;
+            width: 100%;
+            max-height: 150px;
+            overflow: auto; 
+            background: #fff;
+            margin: 0 0 20px 0;
+        }   
+    
+</style>

+ 340 - 0
src/components/diagBase/DisFormulaItem.vue

@@ -0,0 +1,340 @@
+<template>
+    <tr> 
+                    <td class="FormulaSort">{{index +1}}</td>
+                    <td class="FormulaType">
+                        <el-select size="mini" :class="{selectType: item.verifyType}" v-model.trim="item.type" placeholder="标签类型"  @change="clickItem(index,'FormulaType')">
+                            <el-option v-for="item in formulaTypeList" :label="item.name" :value="item.key" :key="item.key"></el-option>
+                        </el-select>
+                    </td>
+                    <td class="FormulaNumber" :class="{borderRed:item.verifyFormula}">
+                        <el-tooltip :disabled="!item.verifyFormula"  class="item" effect="dark" :content="item.verifyFormula" placement="top">
+                            <el-input class="groupTextarea"
+                                ref="textarea"
+                                type="textarea"  
+                                :readonly="!item.type"
+                                :autosize="{ minRows: 1}"
+                                :class="{borderRed:item.verifyFormula,inpDisabled:!item.type}"
+                                :title="item.formula" 
+                                v-model.trim="item.formula" 
+                                @input="handleInp(index,$event,'FormulaNumber',item.type)"
+                                @focus="clickItem(index,'FormulaNumber')">
+                            </el-input>
+                        </el-tooltip> 
+                    </td>
+                   <td class="FeatureOpera">
+                        <el-button type="text" size="small" class="delete" @click="addItem(index, 2)"><div class="btnOpera">+</div></el-button>
+                        <el-button v-if="index !=0" type="text" size="small" class="delete" @click="delItem(index, 2)"><div class="btnOpera">-</div></el-button>
+                    </td>
+                </tr>
+</template>
+<script>
+import config from '@api/config.js';
+export default {
+    props:['item', 'index','formulaTypeList'],
+    data() {
+        return {
+            timer: undefined
+        }
+    },
+    mounted(){
+        this.$nextTick(()=>{
+            if(Array.isArray(this.$refs.textarea)) {
+                for(let i=0; i <this.$refs.textarea.length; i++) {
+                    this.$refs.textarea[i].resizeTextarea()
+                } 
+            }else {
+                this.$refs.textarea&&this.$refs.textarea.resizeTextarea()
+            }
+            
+        })
+       
+   },
+    methods: {
+        handleInp(index,e,type,itemType) {
+             clearTimeout(this.timer)
+            let timer = setTimeout(()=>{
+                clearTimeout(this.timer);
+                this.$emit('handleInp',{index,e,type,itemType})
+            }, config.delayTime)
+            this.timer = timer
+        },
+        clickItem(index, type) {
+             this.$emit('clickItem',{index, type})
+        },
+        addItem(index, type) {
+          this.$emit('addItem',{index, type}) 
+        },
+        delItem(index, type) {
+          this.$emit('delItem',{index, type}) 
+        }
+        
+    }
+}
+</script>
+<style lang="less" scoped>
+    @import '../../less/common.less';
+        table,tr,td {
+            list-style: none;
+        }
+        .topBack {
+            top: 0;
+        }
+        .groupTitle {
+            background-color: #fff;
+            height: 40px;
+            line-height: 40px;
+            padding-left: 20px;
+        }
+        .searchInput, .searchName {
+            display: inline-block;
+            height: 32px;
+            line-height: 32px;
+            border: 1px solid #a9a9a9;
+            margin: 0px 0 0 0;
+            padding: 0 5px;
+            float: left;
+            margin-top: 4px;
+        }
+        .isRequired .el-form-item__label::before {
+            content: '*';
+            color: red;
+        }
+        .searchName {
+            border-left: none;
+            cursor: pointer;
+            font-size: 16px;
+            padding: 0 14px;
+        }
+        .itemList {
+            position: absolute;
+            background: #fff;
+            width: 162px;
+            max-height: 150px;
+            border: 1px solid #a9a9a9;
+            left: 138px;
+            top: 37px;
+            z-index: 2;
+            overflow-y: auto;
+        }
+        .diagItem {
+            padding: 0 5px;
+            height: 30px;
+            line-height: 30px;
+            font-size: 14px;
+            cursor: pointer;
+        }
+        .diagItem:hover {
+            background: #f5f7fa;
+        }
+        .addDepartForm {
+            position: relative;
+            background-color: #fff;
+            padding: 20px;
+            margin: 70px 20px 0px 20px;
+        }
+        .addDiagName {
+            position: relative;
+        }
+        .symptomList {
+            position: relative;
+            background-color: #fff;
+             padding: 0px 20px 100px 20px;
+             margin: 0px 20px 40px 20px;
+             min-height: 400px;
+        }
+        
+        .diagTable {
+            width: 100%;
+            border-collapse: collapse;
+            margin-bottom: 20px;
+            tr {
+                td {
+                    /deep/textarea::-webkit-scrollbar{
+                        display: none;
+                    }
+                    position: relative;
+                    border: 1px solid #a9a9a9;
+                    text-align: center;
+                }
+                .FormulaOpera, .FeatureOpera{
+                    background: #fff;
+                    border: none;
+                    text-align: left;
+                    padding-left: 30px;
+                }
+                /deep/.el-textarea__inner {
+                    width: 100%;
+                    line-height: 20px;
+                    resize:none;
+                    border: none;
+                    border-radius: 0;
+                    text-align: center;
+                }
+            }
+            .selectedContent {
+                width: 25%;
+            }
+            .selectedContentGroup {
+                width: 55%;
+            }
+            .selectedContentOpera {
+                width: 20%;
+            }
+        }
+        .groupInput {
+            text-align: center;
+            color: #606266;
+            width: 80%;
+        }
+        .groupTextarea {
+             text-align: center;
+            color: #606266;
+            width: 100%;
+        }
+        .btn {
+            position: absolute;
+            background-color: #fff;
+            width: 100%;
+            margin: 20px 0;
+            height: 40px;
+            bottom: 0px;
+            right: 0px;
+            .btnBox {
+                position: absolute;
+                right: 0px;
+                
+            }
+            .el-button {
+                margin-right: 20px;
+               
+            }
+        }
+        .tableTitle{
+            background: rgba(239,243,249,1);
+            height: 40px;
+        }
+        .require::after{
+            content:"*";
+            color: red;
+        }
+        .borderRed {
+            border: 3px solid red !important;
+            box-sizing: border-box !important;
+        }
+        .colorRed {
+            color: red;
+        }
+        .FeatureSort {
+            width: 5%;
+        }
+        .FeatureType {
+            width: 7%;
+            padding: 0 5px;
+        }
+        .FeatureNumber {
+            width: 8%;
+        }
+        .FeatureStand {
+            width: 20%;
+        }
+        .FeatureRelate {
+            width: 30%;
+        }
+        .FeatureuniqueName {
+            width: 10%;
+        }
+        .FeatureResult {
+            width: 10%;
+        } 
+        .FeatureOpera{
+            width: 10%;
+        } 
+        .FormulaSort{
+            width: 5%;
+        } 
+        .FormulaType{
+            width: 7%;
+            padding: 0 5px;
+        } 
+        .FormulaNumber{
+            width: 78%;
+        } 
+        .FormulaOpera{
+            width: 10%;
+        }
+        .btnOpera {
+            width:16px;
+            height:16px;
+            background:rgba(176,190,197,1);
+            border-radius: 50%;
+            color: #fff;
+            line-height: 16px;
+            text-align: center;
+        }
+        /deep/.el-input--mini .el-input__inner {
+            width: 80px;
+        }
+        /deep/ .is-disabled {
+                    background: #ECECEC;
+                    color: #AAAAAA;
+                    border: none;
+                }
+        .selectType {
+            input {
+                border: 3px solid red;
+            }
+            input:hover {
+                border: 3px solid red;
+            }
+        }
+        .moduleTitle {
+            margin: 0 0 10px 0;
+            font-weight: 600;
+        }
+        .inpDisabled{
+            background: #ECECEC;
+            cursor: not-allowed;
+            textarea {
+                background: #ECECEC;
+                color: #AAAAAA;
+                border: none;
+                cursor: not-allowed;
+                height: 100%;
+            }
+            
+        }
+        .inpTips {
+            font-size: 14px;
+            color: red;
+            margin-bottom: 10px;
+        }
+        #upFile{
+            display: none
+        }
+        .disableDiv {
+            background: rgb(236, 236, 236);
+            box-sizing: border-box;
+            cursor: not-allowed;
+            font-size: 14px;
+            line-height: 20px;
+            padding: 5px 0;
+            min-height: 30px;
+        }
+        .searchItemBox{
+            position: relative;
+            bottom: 0px;
+        }
+        .searchItemList {
+            position: absolute;
+            border: 1px solid #a9a9a9;
+            box-sizing: border-box;
+            top: 4px;
+            z-index: 2;
+            width: 100%;
+            max-height: 150px;
+            overflow: auto; 
+            background: #fff;
+            margin: 0 0 20px 0;
+        }   
+    
+</style>

+ 28 - 7
src/components/diagBase/QuestionWords.vue

@@ -64,12 +64,13 @@
                 </el-table-column>
             </el-table>
         <div class="pagination">
-            <el-pagination v-if="total>pageSize"
-                       :current-page.sync="currentPage"
+            <el-pagination :current-page.sync="currentPage"
                        @current-change="currentChange"
                        background
                        :page-size="pageSize"
-                       layout="total,prev, pager, next, jumper"
+                       :page-sizes="pageSizeArr"
+                       @size-change="handleSizeChange"
+                       :layout="pageLayout"
                        :total="total">
             </el-pagination>
         </div>
@@ -82,6 +83,7 @@
 import api from '@api/diagBase.js';
 import apis from '@api/icss.js';
 import utils from '@api/utils.js';
+import config from '@api/config.js';
 
 export default {
     name: 'QuestionWords',
@@ -100,7 +102,9 @@ export default {
                 type:""
             },
             currentPage: 1,
-            pageSize: 10,
+            pageSize: config.pageSize,
+            pageSizeArr:config.pageSizeArr,
+            pageLayout:config.pageLayout,
             total: 0,
         }
     },
@@ -122,9 +126,15 @@ export default {
     next(vm => {
       //const pm = to.param;
       Object.assign(vm, to.params);
+      vm.inCurrentPage=to.params.currentPage;
     })
   },
     methods: {
+      handleSizeChange(val){
+        this.pageSize = val;
+        this.currentPage = utils.getCurrentPage(this.currentPage, this.total, this.pageSize);
+        this.getDataList();
+      },
         getValue(val) {
             // console.log('changeVal', val, this.filter.tagAdscription)
         },
@@ -146,7 +156,14 @@ export default {
         getDataList() {
             const param = this.getFilterItems();
             this.searched = true;
+            const loading = this.$loading({
+                lock: true,
+                text: 'Loading',
+                spinner: 'el-icon-loading',
+                background: 'rgba(0, 0, 0, 0.7)'
+            });
             api.queryQuestionPage(param).then((res) => {
+                loading.close()
                 const list = res.data.data.records
                 for (var i = 0; i < list.length; i++) {
                     for (var z =  0; z < this.Adscriptions.length; z++) {
@@ -162,6 +179,10 @@ export default {
                 }
                 this.list = list;
                 this.total = res.data.data.total;
+              if(this.inCurrentPage!==undefined){
+                this.currentPage=this.inCurrentPage;
+                this.inCurrentPage = undefined;
+              }
             })
         },
         filterDatas() {
@@ -184,10 +205,10 @@ export default {
         },
         getFilterItems() {
             const param = {
-                current: this.currentPage,
+                current: this.inCurrentPage||this.currentPage,
                 size: this.pageSize,
-                disName: this.filter.disName,
-                questionCode: this.filter.questionName,
+                disName: this.filter.disName.trim(),
+                questionCode: this.filter.questionName.trim(),
                 type: this.filter.type
             };
             return param;

+ 52 - 0
src/components/diagBase/Textarea.vue

@@ -0,0 +1,52 @@
+<template>
+    <div 
+        :contenteditable="readonly"
+        :title="value"
+        class="textarea"
+        :class="{borderRed: borderRed, disableDiv:!readonly}"
+        @input="handInput"
+        @blur="handleBlur"
+    >   
+        {{value}}
+    </div>
+</template>
+<script>
+export default {
+    name: 'Textarea',
+    props: ['readonly','value','borderRed'],
+    data() {
+        return {
+
+        }
+    },
+    methods: {
+        handInput(e) {
+           this.$emit("handleInp",e.target.innerText.replace(/\s+/g,""))
+        },
+        handleFocus() {
+
+        },
+        handleBlur() {
+            console.log('blur')
+        }
+    }
+}
+</script>
+<style scoped lang='less'>
+    .textarea{
+        outline: none;
+    }
+    .borderRed {
+        border: 3px solid red ;
+        box-sizing: border-box;
+    }
+    .disableDiv {
+        background: rgb(236, 236, 236);
+        box-sizing: border-box;
+        cursor: not-allowed;
+        font-size: 14px;
+        line-height: 20px;
+        padding: 5px 0;
+        min-height: 30px;
+    }
+</style>

+ 39 - 37
src/components/icss/AddChemicalAndCommonMapping.vue

@@ -12,40 +12,13 @@
         ></crumbs>
         <div class="AddChemicalAndCommonMappingBox clearfix">
             <div class="titleBox clearfix">
-                <p class="title">关联公表项</p>
                 <p class="title">关联化验项</p>
+                <p class="title">关联公表项</p>
             </div>
-            <div class="rightBox">
-                <div class="itemLabel">
-                    <label  class="itemLabelName">选择公表项:</label>
-                    <input class="searchInput"  @focus="focuInput" type="text" v-model = "uniqueText">
-                    <span class="searchName" @click="searchMealItem(3)">搜索</span>
-                    <ul
-                            v-if="showUniqueNameList&&uniqueNameList.length >0"
-                            class="itemList uniqueNameList"
-                            ref="uniqueNameList"
-                    >
-                        <li
-                                v-for="item in uniqueNameList"
-                                class="mealNameItem ellipsis"
-                                :title="item.conceptName"
-                                @click="selectUniqueName(item)"
-                                :key="item.conceptName">
-                            {{item.conceptName}}
-                        </li>
-                    </ul>
-                </div>
-                <div class="itemLabel">
-                    <label  class="itemLabelName isRequired">已选择公表项:</label>
-                    <span class="selectItemName">{{form.uniqueName}}</span>
-                </div>
-            </div>
+           
 
-            <div class="midBox">
-                <img class="midLogo" src="../../images/relation.png" alt="">
-                <p class="midTitle">相互关联</p>
-            </div>
-            <div class="leftBox clearfix" >
+
+              <div class="leftBox clearfix" >
 
                 <div class="itemLabel clearfix">
                     <label class="itemLabelName">选择化验大项:</label>
@@ -95,6 +68,35 @@
                     <span class="selectItemName">{{form.itemName}}</span>
                 </div>
             </div>
+            <div class="midBox">
+                <img class="midLogo" src="../../images/relation.png" alt="">
+                <p class="midTitle">相互关联</p>
+            </div>
+             <div class="rightBox">
+                <div class="itemLabel">
+                    <label  class="itemLabelName">选择公表项:</label>
+                    <input class="searchInput"  @focus="focuInput" type="text" v-model = "uniqueText">
+                    <span class="searchName" @click="searchMealItem(3)">搜索</span>
+                    <ul
+                            v-if="showUniqueNameList&&uniqueNameList.length >0"
+                            class="itemList uniqueNameList"
+                            ref="uniqueNameList"
+                    >
+                        <li
+                                v-for="item in uniqueNameList"
+                                class="mealNameItem ellipsis"
+                                :title="item.conceptName"
+                                @click="selectUniqueName(item)"
+                                :key="item.conceptName">
+                            {{item.conceptName}}
+                        </li>
+                    </ul>
+                </div>
+                <div class="itemLabel">
+                    <label  class="itemLabelName isRequired">已选择公表项:</label>
+                    <span class="selectItemName">{{form.uniqueName}}</span>
+                </div>
+            </div>
         </div>
         <div class="btn">
             <!-- <span class="sumbit" @click="submitForm">建立关联</span> -->
@@ -166,10 +168,10 @@
           relationPosition: 3
         }
         if (type == 1) {
-          param.name = this.mealText
+          param.name = this.mealText.trim();
           param.typeId = 12
         } else if (type == 2) {
-          param.name = this.itemText
+          param.name = this.itemText.trim();
           param.typeId = 13
         }
         if(!param.name) {
@@ -178,11 +180,11 @@
         api.getConceptInfoAssay(param).then((res) => {
           if (res.data.code === '0') {
             if (type == 1) {
-              this.mealNameList = res.data.data
+              this.mealNameList = res.data.data;
               this.showSearchList('showMealNameList')
             } else if (type == 2) {
 
-              this.itemNameList = res.data.data
+              this.itemNameList = res.data.data;
               this.showSearchList('showItemNameList')
             }
           }
@@ -357,7 +359,7 @@
     .leftBox , .midBox, .rightBox{
         width: 40%;
         float: left;
-        height: 200px;
+        min-height: 200px;
         font-size: 14px;
     }
     .midBox {
@@ -378,7 +380,7 @@
     }
     .itemLabel {
         width: 100%;
-        height: 50px;
+        min-height: 50px;
         line-height: 50px;
         position: relative;
     }

+ 10 - 7
src/components/icss/AddConceptRelation.vue

@@ -129,14 +129,16 @@ export default {
       nodeList:[],
       saveDisable: false,  //保存按钮禁止点击
       conceptType:'',
-      searchType:''
+      searchType:'',
+      relationId: ''
     }
   },
         created(){
-          const { isEdit, data , filter} = this.$route.params;
+          const { isEdit, data , filter,relationId} = this.$route.params;
           const typeL = filter.type.toString().split('101');
           this.conceptType = typeL[0];
           this.searchType = typeL[1];
+          this.relationId = relationId;
           if(isEdit) {
             this.titleText = '修改';
             this.isEdit = isEdit;
@@ -144,6 +146,7 @@ export default {
             this.form.conceptId =data.conceptId;
             this.form.conceptName =data.conceptName;
             this.form.conceptNameType =data.conceptNameType;
+            
           }
           let typeList = JSON.parse(localStorage.getItem("knowledgeEnumsData"));
           // this.typeList = typeList.lexiconTypeEnum;
@@ -172,7 +175,7 @@ export default {
           searchDiag() {
             const param = {
               "name": this.searchDiagVal,
-              "relationId": 17,
+              "relationId":  this.relationId,
               "relationPosition": 1,
               "typeId":this.conceptType,
               "relationTypeId":this.searchType //9-19新增
@@ -197,8 +200,8 @@ export default {
           const notIds = this.selectedTags();
           //2019-8-15 需求修改:搜索结果与类型关联bug2045
           let param = {
-              "name": this.searchTagVal,
-              "relationId": 17,
+              "name": this.searchTagVal.trim(),
+              "relationId":  this.relationId,
               "relationPosition": 2,
               // "typeId": this.type, //选中类型的id
               "typeId": this.searchType, //选中类型的id
@@ -324,13 +327,13 @@ export default {
         for (let i = 0; i < rightTagsList.length; i++) {
           let item = {};
           item.conceptId = rightTagsList[i].conceptId;
-          item.relationId = 17;
+          item.relationId = this.relationId;
           this.nodeList.push(item);
         }
         const param ={
           "conceptId": this.form.conceptId,
           "nodeList": this.nodeList,
-          "sonRelationId": 17,
+          "sonRelationId": this.relationId,
           "sonTypeId":this.searchType //9-20新增
         }
         this.showConfirmDialog('是否建立该关联?', () => {

+ 1 - 1
src/components/icss/AddDisAndScaleRelation.vue

@@ -182,7 +182,7 @@
         getTagList() {
             const notIds = this.selectedTags()
             const param = {
-                "tagName": this.searchTagVal,
+                "tagName": this.searchTagVal.trim(),
                 "type": '21',
                 "notIds": notIds,
                 "sexType": this.sexType,

+ 1 - 0
src/components/icss/AddIndeptLabel.vue

@@ -174,6 +174,7 @@
             "minValue": this.dataPub.minNormalVal,        //化验最小正常值
             "maxValue": this.dataPub.maxNormalVal,         //化验最大正常值
             "specFlag": this.dataPub.specFlag,  //标记状态(0:没有标记,1:主诉高亮,2:诱因记录, 4:生命体征)
+            "selFlag": this.dataPub.selFlag,
             "questionDetails": this.options,
             "questionMappings": [],      //映射关系,
             "formulaCode": isEdit?data.formulaCode : ''

+ 23 - 8
src/components/icss/AddMedicalMultRelation.vue

@@ -30,12 +30,14 @@
             :data="list"
             :props="defaultProps"
             node-key="conceptId"
-            default-expand-all
             draggable
             :allow-drag="allowDrag"
             :allow-drop="allowDrop"
-            :expand-on-click-node="false">
-            <span class="custom-tree-node" slot-scope="{ node, data }">
+            :expand-on-click-node="true"
+            :default-expanded-keys="defaultExpandedArr"
+            @node-click = "handleNodeClick"
+          >
+            <span class="custom-tree-node" slot-scope="{ node, data }" >
                 <span class="custom-tree-node-name ellipsis" :class="{colorGray: data.isDeletedConcept == 'Y'}" :title="node.label">{{ node.label }}</span>
                 <span class="btn-box">
                   <el-button
@@ -130,7 +132,8 @@ import api from '@api/icss.js';
         isEdit: false,  //是否为修改
         relationConceptId: '', //关联父类ID
         level: 0, //层级(修改时只能显示三级)
-        saveDisable: false  //保存按钮禁止点击
+        saveDisable: false,  //保存按钮禁止点击
+        defaultExpandedArr: []
       }
     },
     created(){
@@ -141,6 +144,7 @@ import api from '@api/icss.js';
           this.minTitle = '分诊人体图数据维护-修改'
           const item = JSON.parse(JSON.stringify(data))
           item.level = 0
+          item.isExpanded = false
           item.nodeList = this.IteraNodeList(item.nodeList, [], 1)
           this.list[0] = item
       }
@@ -157,7 +161,7 @@ import api from '@api/icss.js';
     },
     methods:{
        allowDrop(draggingNode, dropNode, type) {
-        if(draggingNode.data.parentConceptName !== dropNode.data.parentConceptName){
+        if(draggingNode.parent.data.conceptName !== dropNode.parent.data.conceptName){
           return false
         }else{
           return type !== 'inner'
@@ -166,6 +170,17 @@ import api from '@api/icss.js';
       allowDrag(draggingNode) {
         return draggingNode.data.level != 0;//一级不可拖动
       },
+      handleNodeClick(data) {
+          if(data.nodeList.length > 0) {
+            if(!data.isExpanded) {
+              this.defaultExpandedArr.push(data.conceptId)
+            } else {
+              this.defaultExpandedArr = this.defaultExpandedArr.filter(item => item !== data.conceptId)
+            }
+            this.$set(data, 'isExpanded', !data.isExpanded);
+          }
+      
+      },
       addConcept(e) {
         this.addLevel = 0;
         this.openSearch(e);
@@ -187,7 +202,7 @@ import api from '@api/icss.js';
         api.addMultRelation(param).then((res) => {
           const { data } = res
           if(data.code == '0') {
-            this.message(res.data.msg||'术语建立成功','success');
+            this.message(res.data.msg||'术语关系建立成功','success');
             setTimeout(() => {
               //返回带搜索条件的首页
               this.$router.push({name:'MedicalMultRelation',params:Object.assign({},this.$route.params,{currentPage:1})});
@@ -203,10 +218,10 @@ import api from '@api/icss.js';
         for(let i = 0; i <nodeList.length; i++) {
           let newChild;
           if(type == '0') { //添加的时候保存所有的id列表
-            newChild = {conceptId: nodeList[i].conceptId, relationId: 17,nodeList:[],sonRelationId: 17}
+            newChild = {conceptId: nodeList[i].conceptId, relationId: 17,nodeList:[],sonRelationId: 17, isExpanded:false}
           } else if(type == '1') {  //修改的时候添加层级
             const item = JSON.parse(JSON.stringify(nodeList[i]))
-            newChild = Object.assign(item, {level:  level, nodeList: [],sonRelationId: 17})
+            newChild = Object.assign(item, {level:  level, nodeList: [],sonRelationId: 17, isExpanded:false})
           } else if(type == '2') { //移除节点的时候同时移除节点(搜索时排除的id列表)
             newChild = nodeList[i].conceptId
           }

+ 102 - 5
src/components/icss/AddMedicalName.vue

@@ -5,6 +5,7 @@
             linkTo="MedicalName"></crumbs>
     <div class="contents">
       <div class="content">
+        
         <h3>添加术语:</h3>
         <p class="titl">医学标准术语:</p>
         <table class="deptbox" v-if="id == ''">
@@ -22,6 +23,13 @@
               <p v-if="id">{{data.name}}</p>
               <!-- 4-18 需求变更 -->
               <input v-else type="text" v-model="data.name" placeholder="请输入术语" maxlength="50" @blur="handleBlur(1)">
+             <SimilarListDrag 
+                :searchType='searchType'
+                :similarList = 'similarList'
+                isShow = "true"
+                @closeTable = "closeTable"
+             >
+             </SimilarListDrag>
             </td>
             <td>
               <input type="text" v-model="data.spell" placeholder="请输入拼音" maxlength="50"  @input="handlePinyin($event,1)">
@@ -52,7 +60,7 @@
               <span v-else>{{data.type}}</span>
             </td>
             <td class="desc">
-              <input v-model="data.remark" placeholder="请输入术语说明" maxlength="120"></input>
+              <input v-model="data.remark" placeholder="请输入术语说明" maxlength="120"/>
             </td>
           </tr>
         </table>
@@ -72,7 +80,14 @@
               <td :title="item.name&&item.name.length>9?item.name:''">
                 <!-- 使用原生input,输入限制 -->
                 <!-- <el-input v-model="item.name" placeholder="请输入术语" maxlength="30" size="small" @input.native="handleInput(2,index)"></el-input> -->
-                <input type="text" v-model="item.name" :title="item.name" placeholder="请输入术语" maxlength="50" @blur="handleBlur(2,index,99)" >
+                <input type="text" v-model="item.name" :title="item.name" placeholder="请输入术语" maxlength="50" @blur="handleBlur(2,index,99)" />
+                <SimilarListDrag 
+                    :searchType='searchType'
+                    :similarList = 'similarList'
+                    :isShow = "index ===searchIndex"
+                    @closeTable = "closeTable"
+                >
+                </SimilarListDrag>
               </td>
               <!-- <td v-if="!item.isEdit">
                 {{item.spell}}
@@ -100,7 +115,7 @@
                 <span v-else>{{data.type}}</span>
               </td>
               <td class="desc">
-                <input v-model="item.remark" placeholder="请输入术语说明" maxlength="120"></input>
+                <input v-model="item.remark" placeholder="请输入术语说明" maxlength="120" />
               </td>
               <td class="desc">
                 {{item.isConcept == 1?"标准词":"同义词"}}
@@ -143,6 +158,13 @@
               <!-- 使用原生input,输入限制 -->
               <!-- <el-input v-model="item.name" placeholder="请输入术语" maxlength="30" size="small" @input.native="handleInput(2,index)"></el-input> -->
               <input type="text" v-model="item.name" placeholder="请输入术语" maxlength="50" @blur="handleBlur(2,index)">
+              <SimilarListDrag 
+                :searchType='searchType'
+                :similarList = 'similarList'
+                :isShow = "index ===searchIndex"
+                @closeTable = "closeTable"
+              >
+              </SimilarListDrag>
             </td>
             <td>
               <input type="text" v-model="item.spell" placeholder="请输入拼音" maxlength="50"  @input="handlePinyin($event,3,index)">
@@ -151,7 +173,7 @@
               {{data.type}}
             </td>
             <td class="desc">
-              <input v-model="item.remark" placeholder="请输入术语说明" maxlength="120"></input>
+              <input v-model="item.remark" placeholder="请输入术语说明" maxlength="120" />
             </td>
             <td v-if="id">
               <span @click="deleLine(index)" class="delete">删除</span>
@@ -184,7 +206,17 @@
             </el-form-item>
             <el-form-item label="科室:" v-if="dioType" class="marT">
                 <el-select v-model="dept">
-                    <el-option v-for="(it,i) in deptList" :label="it.name" :value="it.name"></el-option>
+                    <!-- <el-option v-for="(it,i) in deptList" :label="it.name" :value="it.name"></el-option> -->
+                    <el-option-group
+                    v-for="group in deptListArr"
+                    :key="group.label">
+                    <el-option
+                      v-for="item in group.deptList"
+                      :key="item.id"
+                      :label="item.name"
+                      :value="item.name">
+                    </el-option>
+                  </el-option-group>
                 </el-select>
             </el-form-item>
             <el-form-item label="归属类型:" v-if="dioType" class="marT">
@@ -208,6 +240,8 @@
 <script type="text/javascript">
 import api from '@api/icss.js';
 import pinyin from '../../js/Convert_Pinyin.js';
+import utils from '@api/utils.js';
+import SimilarListDrag from './SimilarListDrag'
   export default {
     name:'AddMedicalName',
     data(){
@@ -257,7 +291,11 @@ import pinyin from '../../js/Convert_Pinyin.js';
         dioTypeList:[],//更多信息-类型
         dioType:'', //默认展示一类
         deptList:[], //更多信息-科室
+        deptListArr:[], //科室信息分组
         dept:'',  //默认展示全科
+        similarList: [], //相似词列表
+        searchIndex: -1, //展示哪个的同义词
+        searchType: ''
       }
     },
     created(){
@@ -280,6 +318,17 @@ import pinyin from '../../js/Convert_Pinyin.js';
       },
     },
     methods:{
+      dragAdd(ev){
+        utils.dragBox('dragModalWrap','dragModalTitle','add')
+      },
+      dragDel(){
+          utils.dragBox('dragModalWrap','dragModalTitle','del')
+      },
+      closeTable(){
+        this.searchType = ''
+        this.similarList = []
+      
+      },
       // 诊断类型下--更多信息-类型
       getDioType(flag){
         api.getknowledgeList().then((res)=>{
@@ -300,6 +349,7 @@ import pinyin from '../../js/Convert_Pinyin.js';
           if(data.code==0){
             this.deptList = data.data;
             if(!conptId){
+              console.log('this.deptListArr')
               this.dept = "全科"; //默认展示全科
             }else{
               // 科室id转成name显示
@@ -309,6 +359,23 @@ import pinyin from '../../js/Convert_Pinyin.js';
                 }
               })
             }
+            const total = this.deptList.length;
+              const average = parseInt(total/3);
+              const mod = total%3; //余数
+              const firstGroup = this.deptList.slice(0,average);
+              let secGroup = [];
+              let thirdGroup = [];
+              let tempArr = []
+              if(mod == 2){
+                secGroup = this.deptList.slice(average,average*2+1);
+                thirdGroup = this.deptList.slice(average*2+1,total);
+              }else{
+                secGroup = this.deptList.slice(average,average*2);
+                thirdGroup = this.deptList.slice(average*2,total);
+              }
+              tempArr.push({label:1,deptList:firstGroup},{label:2,deptList:secGroup},{label:3,deptList:thirdGroup});
+              this.deptListArr = tempArr
+            
           }
         })
       },
@@ -429,7 +496,11 @@ import pinyin from '../../js/Convert_Pinyin.js';
             let data = this.data;
             data.spell = pinyin.getCamelChars(data.name);
             this.unfit = false;
+            this.searchType = 'standard'
+            this.getSimilarList(this.data.name)
+
           }
+
         }else if(type==2){
           // 修改时术语名称、拼音和类型均不能修改
           if(flg == 99){
@@ -441,11 +512,15 @@ import pinyin from '../../js/Convert_Pinyin.js';
               });
               // this.synonymous[index-1].name = '';
               this.unfit = true;
+      
             }else{
               // let current = this.synonymous[index-1];
               let current = this.allwords[index];
               current.spell = pinyin.getCamelChars(current.name);
               this.unfit = false;
+              this.searchType = 'standard';
+              this.searchIndex = index;
+              this.getSimilarList(this.allwords[index].name)
             }
           }else{
             if(this.synonymous[index].name && !pattern.test(this.synonymous[index].name)){
@@ -459,6 +534,9 @@ import pinyin from '../../js/Convert_Pinyin.js';
               let current = this.synonymous[index];
               current.spell = pinyin.getCamelChars(current.name);
               this.unfit = false;
+              this.searchType = 'similar';
+              this.searchIndex = index;
+              this.getSimilarList(this.synonymous[index].name)
             }
           }
         }
@@ -475,6 +553,18 @@ import pinyin from '../../js/Convert_Pinyin.js';
         }
         // e.target.value = e.target.value.replace(/[^a-zA-Z]/g,'');
       },
+      getSimilarList(name){
+        if(!name){
+          this.closeTable()
+          return
+        }
+        const param = {
+          inputStr: name
+        }
+        api.getSimilarList(param).then((res) =>{
+          this.similarList = res.data.data
+        })
+      },
       addSpan(type){
         let singleSpan = {
           name:'',
@@ -675,11 +765,17 @@ import pinyin from '../../js/Convert_Pinyin.js';
           this.dept = '';
         } 
       }
+    },
+    components: {
+      SimilarListDrag
     }
   }
 </script>
 <style lang="less" scoped>
    @import "../../less/admin.less";
+   table,tr,td {
+     list-style: none;
+   }
    /deep/ .radioWrap .el-radio {
      display: block;
      height: 41px;
@@ -733,6 +829,7 @@ import pinyin from '../../js/Convert_Pinyin.js';
         width: 135px;
         border: 1px solid #666;
         padding:5px;
+        position: relative;
       }
       input{
         border:none;

+ 12 - 6
src/components/icss/AddMedicinePrompt.vue

@@ -145,9 +145,9 @@
             return ;
           }
           temp = Object.assign(this.form.prags[i-1]);
-          temp.orderNo = temp.orderNo+1;
+          //temp.orderNo = temp.orderNo+1;
           it = Object.assign(this.form.prags[i]);
-          it.orderNo = it.orderNo-1;
+          //it.orderNo = it.orderNo-1;
           this.form.prags.splice(i-1,2,it,temp);
         }else{
           if(i===this.form.prags.length-1){
@@ -155,9 +155,9 @@
             return ;
           }
           temp = Object.assign(this.form.prags[i+1]);
-          temp.orderNo = temp.orderNo-1;
+          //temp.orderNo = temp.orderNo-1;
           it = Object.assign(this.form.prags[i]);
-          it.orderNo = it.orderNo+1;
+          //it.orderNo = it.orderNo+1;
           this.form.prags.splice(i,2,temp,it);
         }
       },
@@ -166,9 +166,13 @@
           title:'',
           content:'',
           isReason:0,
-          orderNo:i+1,
           position:[],
           text:''});
+        //添加段落光标自动落到新增的段落中
+        setTimeout(()=>{
+          //console.log(this.$refs.subForm[i+1].$el.getElementsByClassName("el-input__inner")[0]);
+          this.$refs.subForm[i+1].$el.getElementsByClassName("el-input__inner")[0].focus()
+        })
         /*this.form.prags.push({
           title:'',
           content:'',
@@ -231,10 +235,11 @@
         }
         //通过必填验证,提交保存
         const item=this.form.prags;
-        const param =item.map((it)=>{
+        const param =item.map((it,i)=>{
           return Object.assign({},it,{
                                         position:typeof it.position=='string'?it.position:it.position.join(","),
                                         conceptId:this.form.conceptId,
+                                        orderNo:i,
                                         content:it.content.replace(new RegExp(config.imgHost,'g'),'{imageUrlPrefix}')});
         });
         this.showSaveDialog(param,'是否保存该静态知识?');
@@ -252,6 +257,7 @@
             }
             this.saveDisable = false
           }).catch((err) => {
+            this.saveDisable = false
             this.warning(err);
           })
         });

+ 1 - 1
src/components/icss/AddPhysicalExamTemp.vue

@@ -149,7 +149,7 @@
         getTagList() {
                 const notIds = this.getRightTagListIds()
                 let param = {
-                "tagName": this.searchVal,
+                "tagName": this.searchVal.trim(),
                 "type": 4,
                 "notIds": notIds,
                 "notTagType": [8],

+ 34 - 8
src/components/icss/AssaySon.vue

@@ -67,12 +67,13 @@
                 </el-table-column>
             </el-table>
         <div class="pagination">
-            <el-pagination v-if="total>pageSize"
-                       :current-page.sync="currentPage"
+            <el-pagination :current-page.sync="currentPage"
                        @current-change="currentChange"
                        background
                        :page-size="pageSize"
-                       layout="total,prev, pager, next, jumper"
+                       :page-sizes="pageSizeArr"
+                       @size-change="handleSizeChange"
+                       :layout="pageLayout"
                        :total="total">
             </el-pagination>
         </div>       
@@ -82,6 +83,8 @@
 
 <script>
   import api from '@api/icss.js';
+  import config from '@api/config.js';
+  import utils from '@api/utils.js';
 
   export default {
     name: 'AssaySon',   //慢病指标值关联维护
@@ -93,7 +96,9 @@
               conceptName:'',
             },
             currentPage: 1,
-            pageSize: 10,
+          pageSize: config.pageSize,
+          pageSizeArr:config.pageSizeArr,
+          pageLayout:config.pageLayout,
             total: 0,
         }
     },
@@ -116,16 +121,33 @@
     next(vm => {
       //const pm = to.param;
       Object.assign(vm, to.params);
+      vm.inCurrentPage=to.params.currentPage;
     })
   },
     methods: {
+      handleSizeChange(val){
+        this.pageSize = val;
+        this.currentPage = utils.getCurrentPage(this.currentPage, this.total, this.pageSize);
+        this.getDataList();
+      },
         getDataList(isTurnPage) {
             const param = this.getFilterItems(isTurnPage);
             this.searched = true;
+            const loading = this.$loading({
+                lock: true,
+                text: 'Loading',
+                spinner: 'el-icon-loading',
+                background: 'rgba(0, 0, 0, 0.7)'
+            });
             api.getAssaySon(param).then((res) => {
+                loading.close()
                 if(res.data.code == '0') {
                     this.list = res.data.data.records;
                     this.total = res.data.data.total;
+                  if(this.inCurrentPage!==undefined){
+                    this.currentPage=this.inCurrentPage;
+                    this.inCurrentPage = undefined;
+                  }
                 }
             })
         },
@@ -136,8 +158,10 @@
         addRelation() {
           const pam = this.searched ? {
             currentPage: this.currentPage,
+            pageSize:this.pageSize,
             filter: this.filter
-          } : {currentPage: this.currentPage};
+          } : {currentPage: this.currentPage,
+            pageSize:this.pageSize};
             this.$router.push({name:'AddAssaySon', params: pam})
         },
         modifyRelation(row) {
@@ -151,8 +175,10 @@
                 if(res.data.code == '0') {
                   const pam = this.searched ? {
                     currentPage: this.currentPage,
+                    pageSize:this.pageSize,
                     filter: this.filter
-                  } : {currentPage: this.currentPage};
+                  } : {currentPage: this.currentPage,
+                    pageSize:this.pageSize};
                     // const item = Object.assign({},row,{data: res.data.data});
                     const item = res.data.data;
                     this.$router.push({name:'AddAssaySon',params:Object.assign(pam, {isEdit:true,data:item})});
@@ -169,9 +195,9 @@
             this.filter.conceptName='';
           };
             const param = {
-                current: this.currentPage,
+                current: this.inCurrentPage||this.currentPage,
                 size: this.pageSize,
-                name:this.filter.conceptName
+                name:this.filter.conceptName.trim()
             };
             return param;
         },

+ 47 - 28
src/components/icss/ChemicalAndCommonMapping.vue

@@ -70,33 +70,25 @@
                 </el-table-column>
             </el-table>
         <div class="pagination">
-            <el-pagination v-if="total>pageSize"
-                       :current-page.sync="currentPage"
+            <el-pagination :current-page.sync="currentPage"
                        @current-change="currentChange"
                        background
                        :page-size="pageSize"
-                       layout="total,prev, pager, next, jumper"
+                       :page-sizes="pageSizeArr"
+                       @size-change="handleSizeChange"
+                       :layout="pageLayout"
                        :total="total">
             </el-pagination>
         </div>
-        
         </div>
-       <!--  <div class="pagination">
-           <el-pagination v-if="total>pageSize"
-                      :current-page.sync="currentPage"
-                      @current-change="currentChange"
-                      background
-                      :page-size="pageSize"
-                      layout="total,prev, pager, next, jumper"
-                      :total="total">
-           </el-pagination>
-       </div> -->
         
     </div>
 </template>
 
 <script>
 import api from '@api/icss.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
 
 export default {
     name: 'ChemicalAndCommonMapping',   //化验大小项和公表维护
@@ -110,12 +102,18 @@ export default {
                 uniqueName:''
             },
             currentPage: 1,
-            pageSize: 10,
+          pageSize: config.pageSize,
+          pageSizeArr:config.pageSizeArr,
+          pageLayout:config.pageLayout,
             total: 0,
         }
     },
     created() {
-        this.getDataList()
+      const that = this;
+      //返回时避免参数未赋值就获取列表
+      setTimeout(function() {
+        that.getDataList();
+      });
         
     },
   watch: {
@@ -130,18 +128,35 @@ export default {
     next(vm => {
       //const pm = to.param;
       Object.assign(vm, to.params);
+      vm.inCurrentPage=to.params.currentPage;
     })
   },
     methods: {
+      handleSizeChange(val){
+        this.pageSize = val;
+        this.currentPage = utils.getCurrentPage(this.currentPage, this.total, this.pageSize);
+        this.getDataList();
+      },
         getDataList(isTurnPage) {
             const param = this.getFilterItems(isTurnPage);
           this.searched = true;
-            api.getLisMappingPage(param).then((res) => {
-                if(res.data.code == '0') {
-                    this.list = res.data.data.records
-                }
-                this.total = res.data.data.total;
-            })
+          const loading = this.$loading({
+            lock: true,
+            text: 'Loading',
+            spinner: 'el-icon-loading',
+            background: 'rgba(0, 0, 0, 0.7)'
+          });
+          api.getLisMappingPage(param).then((res) => {
+            loading.close()
+            if(res.data.code == '0') {
+                this.list = res.data.data.records
+            }
+            this.total = res.data.data.total;
+            if(this.inCurrentPage!==undefined){
+              this.currentPage=this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          })
         },
         filterDatas() {
             this.currentPage = 1;
@@ -150,16 +165,20 @@ export default {
         addRelation() {
           const pam = this.searched ? {
             currentPage: this.currentPage,
+            pageSize:this.pageSize,
             filter: this.filter
-          } : {currentPage: this.currentPage};
+          } : {currentPage: this.currentPage,
+            pageSize:this.pageSize};
           this.$router.push({name: 'AddChemicalAndCommonMapping', params: pam})
         },
         modifyRelation(row) {
             const item = Object.assign({},row);
           const pam = this.searched ? {
             currentPage: this.currentPage,
+            pageSize:this.pageSize,
             filter: this.filter
-          } : {currentPage: this.currentPage};
+          } : {currentPage: this.currentPage,
+            pageSize:this.pageSize};
           this.$router.push({
             name: 'AddChemicalAndCommonMapping',
             params: Object.assign(pam, {isEdit: true, data: item})
@@ -187,11 +206,11 @@ export default {
             this.clearFilter();
           };
             const param = {
-                current: this.currentPage,
+                current: this.inCurrentPage||this.currentPage,
                 size: this.pageSize,
-                mealName:this.filter.mealName,
-                itemName:this.filter.itemName,
-                uniqueName:this.filter.uniqueName
+                mealName:this.filter.mealName.trim(),
+                itemName:this.filter.itemName.trim(),
+                uniqueName:this.filter.uniqueName.trim()
             };
             return param;
         },

+ 34 - 20
src/components/icss/ChronicAndIndexRelation.vue

@@ -62,33 +62,24 @@
                 </el-table-column>
             </el-table>
         <div class="pagination">
-            <el-pagination v-if="total>pageSize"
-                       :current-page.sync="currentPage"
+            <el-pagination :current-page.sync="currentPage"
                        @current-change="currentChange"
                        background
                        :page-size="pageSize"
-                       layout="total,prev, pager, next, jumper"
+                       :page-sizes="pageSizeArr"
+                       @size-change="handleSizeChange"
+                       :layout="pageLayout"
                        :total="total">
             </el-pagination>
         </div>
-        
         </div>
-       <!--  <div class="pagination">
-           <el-pagination v-if="total>pageSize"
-                      :current-page.sync="currentPage"
-                      @current-change="currentChange"
-                      background
-                      :page-size="pageSize"
-                      layout="total,prev, pager, next, jumper"
-                      :total="total">
-           </el-pagination>
-       </div> -->
-        
     </div>
 </template>
 
 <script>
   import api from '@api/icss.js';
+  import config from '@api/config.js';
+  import utils from '@api/utils.js';
 
   export default {
     name: 'ChronicAndIndexRelation',   //慢病指标值关联维护
@@ -100,7 +91,9 @@
                 diseaseName: ''
             },
             currentPage: 1,
-            pageSize: 10,
+          pageSize: config.pageSize,
+          pageSizeArr:config.pageSizeArr,
+          pageLayout:config.pageLayout,
             total: 0,
         }
     },
@@ -122,16 +115,33 @@
     next(vm => {
       //const pm = to.param;
       Object.assign(vm, to.params);
+      vm.inCurrentPage=to.params.currentPage;
     })
   },
     methods: {
+      handleSizeChange(val){
+        this.pageSize = val;
+        this.currentPage = utils.getCurrentPage(this.currentPage, this.total, this.pageSize);
+        this.getDataList();
+      },
         getDataList(isTurnPage) {
             const param = this.getFilterItems(isTurnPage);
             this.searched = true;
+            const loading = this.$loading({
+                lock: true,
+                text: 'Loading',
+                spinner: 'el-icon-loading',
+                background: 'rgba(0, 0, 0, 0.7)'
+            });
             api.queryIndexConfigPages(param).then((res) => {
+                 loading.close()
                 if(res.data.code == '0') {
                     this.list = res.data.data.records;
                     this.total = res.data.data.total;
+                  if(this.inCurrentPage!==undefined){
+                    this.currentPage=this.inCurrentPage;
+                    this.inCurrentPage = undefined;
+                  }
                 }
             })
         },
@@ -142,8 +152,10 @@
         addRelation() {
           const pam = this.searched ? {
             currentPage: this.currentPage,
+            pageSize:this.pageSize,
             filter: this.filter
-          } : {currentPage: this.currentPage};
+          } : {currentPage: this.currentPage,
+            pageSize:this.pageSize};
             this.$router.push({name:'AddChronicAndIndexRelation', params: pam})
         },
         modifyRelation(row) {
@@ -154,8 +166,10 @@
                 if(res.data.code == '0') {
                     const pam = this.searched ? {
                         currentPage: this.currentPage,
+                      pageSize:this.pageSize,
                         filter: this.filter
-                      } : {currentPage: this.currentPage};
+                      } : {currentPage: this.currentPage,
+                      pageSize:this.pageSize};
                     const item = Object.assign({},row,{data: res.data.data});
                     this.$router.push({name:'AddChronicAndIndexRelation',params:Object.assign(pam, {isEdit:true,data:item})});
                 }
@@ -176,9 +190,9 @@
             this.filter.diseaseName='';
           };
             const param = {
-                current: this.currentPage,
+                current: this.inCurrentPage||this.currentPage,
                 size: this.pageSize,
-                diseaseName:this.filter.diseaseName,
+                diseaseName:this.filter.diseaseName.trim(),
             };
             return param;
         },

+ 34 - 8
src/components/icss/ChronicDiseaseStructureList.vue

@@ -70,12 +70,13 @@
 
         </div>
         <div class="pagination">
-            <el-pagination v-if="total>pageSize"
-                        :current-page.sync="currentPage"
+            <el-pagination :current-page.sync="currentPage"
                         @current-change="currentChange"
                         background
                         :page-size="pageSize"
-                        layout="total,prev, pager, next, jumper"
+                        :page-sizes="pageSizeArr"
+                        @size-change="handleSizeChange"
+                        :layout="pageLayout"
                         :total="total">
             </el-pagination>
         </div>
@@ -85,6 +86,8 @@
 
 <script>
   import api from '@api/icss.js';
+  import config from '@api/config.js';
+  import utils from '@api/utils.js';
 
   export default {
     name: 'TemplateMaintenance',
@@ -107,7 +110,9 @@
           tagSysName: '', //标签系统名称
         },
         currentPage: 1,
-        pageSize: 10,
+        pageSize: config.pageSize,
+        pageSizeArr:config.pageSizeArr,
+        pageLayout:config.pageLayout,
         total: 0,
       }
     },
@@ -128,9 +133,15 @@
       next(vm => {
         //const pm = to.param;
         Object.assign(vm, to.params);
+        vm.inCurrentPage=to.params.currentPage;
       })
     },
     methods: {
+      handleSizeChange(val){
+        this.pageSize = val;
+        this.currentPage = utils.getCurrentPage(this.currentPage, this.total, this.pageSize);
+        this.getDataList();
+      },
       getDropList() {
         let templateType = localStorage.getItem('icssEnumsData') ? JSON.parse(localStorage.getItem('icssEnumsData')).moduleInfoTypeEnum : []
         this.AdscriptionsType = templateType;
@@ -147,7 +158,14 @@
       getDataList(isTurnPage) {
         const param = this.getFilterItems(isTurnPage);
         this.searched = true;
+        const loading = this.$loading({
+            lock: true,
+            text: 'Loading',
+            spinner: 'el-icon-loading',
+            background: 'rgba(0, 0, 0, 0.7)'
+        });
         api.scaleContentStructure(param).then((res) => {
+          loading.close()
           const list = res.data.data.records;
           // for (var i = 0; i < list.length; i++) {
           //   for (var j =  0; j < this.tagTypes.length; j++) {
@@ -158,6 +176,10 @@
           // }
           this.list = list;
           this.total = res.data.data.total;
+          if(this.inCurrentPage!==undefined){
+            this.currentPage=this.inCurrentPage;
+            this.inCurrentPage = undefined;
+          }
         })
       },
       filterDatas() {
@@ -167,8 +189,10 @@
       addIndeptTag() {
         const pam = this.searched ? {
           currentPage: this.currentPage,
+          pageSize:this.pageSize,
           filter: this.filter
-        } : {currentPage: this.currentPage};
+        } : {currentPage: this.currentPage,
+          pageSize:this.pageSize};
         this.$router.push({name:'ChronicDiseaseAdd', params: pam})
       },
       modifyIndeptTag(row) {
@@ -177,8 +201,10 @@
             if(code=='0'){
               const pam = this.searched ? {
                 currentPage: this.currentPage,
+                pageSize:this.pageSize,
                 filter: this.filter
-              } : {currentPage: this.currentPage};
+              } : {currentPage: this.currentPage,
+                pageSize:this.pageSize};
               this.$router.push({name:'ChronicDiseaseAdd',params:Object.assign(pam, {isEdit:true,data:data,row:row})});
             }else{
               this.$message({
@@ -198,9 +224,9 @@
           this.clearFilter();
         };
         const param = {
-          current: this.currentPage,
+          current: this.inCurrentPage||this.currentPage,
           size: this.pageSize,
-          name: this.filter.tagSysName,
+          name: this.filter.tagSysName.trim(),
           status:this.filter.isState
         };
         return param;

+ 52 - 14
src/components/icss/ConceptRelation.vue

@@ -74,12 +74,13 @@
                 </el-table-column>
             </el-table>
         <div class="pagination">
-            <el-pagination v-if="total>pageSize"
-               :current-page.sync="currentPage"
+            <el-pagination :current-page.sync="currentPage"
                @current-change="currentChange"
                background
                :page-size="pageSize"
-               layout="total,prev, pager, next, jumper"
+               :page-sizes="pageSizeArr"
+               @size-change="handleSizeChange"
+               :layout="pageLayout"
                :total="total">
             </el-pagination>
         </div>
@@ -89,6 +90,8 @@
 
 <script>
 import api from '@api/icss.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
 
 export default {
     name: 'ConceptRelation',   //诊断量表关联维护
@@ -101,9 +104,12 @@ export default {
             type:'' 
           },
           currentPage: 1,
-          pageSize: 10,
+          pageSize: config.pageSize,
+          pageSizeArr:config.pageSizeArr,
+          pageLayout:config.pageLayout,
           total: 0,
-          typeList:[]
+          typeList:[],
+          relationId: 17
         }
     },
     created() {
@@ -128,23 +134,46 @@ export default {
     next(vm => {
       //const pm = to.param;
       Object.assign(vm, to.params);
+      vm.inCurrentPage=to.params.currentPage;
+      vm.relationId=to.params.relationId || 17;
     })
   },
     methods: {
+      handleSizeChange(val){
+        this.pageSize = val;
+        this.currentPage = utils.getCurrentPage(this.currentPage, this.total, this.pageSize);
+        this.getDataList();
+      },
         toggTab(item){
           // bug2348 搜索后切换tab时清空搜索条件
           this.filter.conceptName = '';
           this.filter.type = item.key;
           this.currentPage = 1;
+          if(item.key === 181011) {
+            this.relationId = 4
+          } else {
+             this.relationId = 17
+          }
           this.getDataList();
         },
         getDataList(isTurnPage) {
             const param = this.getFilterItems(isTurnPage);
             this.searched = true;
+            const loading = this.$loading({
+                lock: true,
+                text: 'Loading',
+                spinner: 'el-icon-loading',
+                background: 'rgba(0, 0, 0, 0.7)'
+            });
             api.getConceptRelation(param).then((res) => {
+              loading.close()
               if(res.data.code == '0') {
                 this.list = res.data.data.records
                 this.total = res.data.data.total;
+                if(this.inCurrentPage!==undefined){
+                  this.currentPage=this.inCurrentPage;
+                  this.inCurrentPage = undefined;
+                }
               }
             })
         },
@@ -155,28 +184,35 @@ export default {
         addRelation() {
           const pam = this.searched ? {
             currentPage: this.currentPage,
-            filter: this.filter
-          } : {currentPage: this.currentPage,filter:Object.assign(this.filter,{conceptName:''})};
+            pageSize:this.pageSize,
+            filter: this.filter,
+            relationId: this.relationId
+          } : {currentPage: this.currentPage,
+            pageSize:this.pageSize,relationId: this.relationId,filter:Object.assign(this.filter,{conceptName:''})};
           this.$router.push({name:'AddConceptRelation',params:pam})
         },
         modifyRelation(row) {
           const typeL = this.filter.type.toString().split('101');
           const typeId = [];
+          const relationIds = []
+          relationIds.push(this.relationId)
           typeId[0] = +typeL[1];
             const param = {
               "conceptId": row.conceptId,
               // "relationId":17
-              "relationIds":[17],//9-20新增
+              "relationIds":relationIds,//9-20新增
               "typeIds":typeId
             }
           const pam = this.searched ? {
             currentPage: this.currentPage,
+            pageSize:this.pageSize,
             filter: this.filter
-          } : {currentPage: this.currentPage,filter:Object.assign(this.filter,{conceptName:''})};
+          } : {currentPage: this.currentPage,
+            pageSize:this.pageSize,filter:Object.assign(this.filter,{conceptName:''})};
             api.getConceptRelationDet(param).then((res) => {
               if(res.data.code=='0'){
                 const { data } = res.data;
-                this.$router.push({name:'AddConceptRelation',params:Object.assign(pam, {isEdit: true, data: data})});
+                this.$router.push({name:'AddConceptRelation',params:Object.assign(pam, {isEdit: true, relationId: this.relationId,data: data})});
               } else {
                 this.warning(res.data.msg);
               }
@@ -195,10 +231,10 @@ export default {
             this.filter.conceptName='';
           };
             const param = {
-                current: this.currentPage,
+                current: this.inCurrentPage||this.currentPage,
                 size: this.pageSize,
-                name:this.filter.conceptName,
-                relationId:17,
+                name:this.filter.conceptName.trim(),
+                relationId:this.relationId,
                 relationModelTypeCode:this.filter.type
             };
             return param;
@@ -229,10 +265,12 @@ export default {
             const typeL = this.filter.type.toString().split('101');
             const typeId = [];
             typeId[0] = +typeL[1];
+            const relationIds = []
+            relationIds.push(this.relationId)
             const param = {
               "conceptId": row.conceptId,
               // "isDeleted": row.isDeleted=== 'N'?'Y':'N',
-              "relationIds":[17],//9-20新增
+              "relationIds":relationIds,//9-20新增
               "typeIds":typeId
             }
             api.delConceptRelation(param).then((res)=>{

+ 2 - 3
src/components/icss/DiagnosisList.vue

@@ -143,8 +143,7 @@ export default {
         getDataList() {
             const param = this.getFilterItems();
             api.getTagList(param).then((res) => {
-                const list = res.data.data.records
-                console.log(res,1111111111)
+                const list = res.data.data.records;
                 for (var i = 0; i < list.length; i++) {
                     for (var j =  0; j < this.tagTypes.length; j++) {
                         if(list[i].tagType == this.tagTypes[j].val) {
@@ -200,7 +199,7 @@ export default {
                 size: this.pageSize,
                 type: '7',
                 disType:this.filter.tagAdscription,
-                tagName: this.filter.tagSysName,
+                tagName: this.filter.tagSysName.trim(),
             };
             return param;
         },

+ 14 - 2
src/components/icss/DisclaimerInformation.vue

@@ -114,6 +114,7 @@
       next(vm => {
         //const pm = to.param;
         Object.assign(vm, to.params);
+        vm.inCurrentPage=to.params.currentPage;
       })
     },
     methods: {
@@ -141,12 +142,23 @@
       getDataList(isTurnPage) {
         const param = this.getFilterItems(isTurnPage);
         this.searched = true;
+        const loading = this.$loading({
+            lock: true,
+            text: 'Loading',
+            spinner: 'el-icon-loading',
+            background: 'rgba(0, 0, 0, 0.7)'
+        });
         api.discInformation(param).then((res) => {
+          loading.close()
           if (res.data.code == '0') {
             const data = res.data.data;
             this.list = data.records;
             this.cacheData[param.current] = data.records;
             this.total = data.total;
+            if(this.inCurrentPage!==undefined){
+              this.currentPage=this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
           }
         }).catch((error) => {
           console.log(error);
@@ -161,8 +173,8 @@
           this.filter.title='';
         };
         const param = {
-          title: this.filter.title,
-          current: this.currentPage,
+          title: this.filter.title.trim(),
+          current: this.inCurrentPage||this.currentPage,
           size: this.pageSize
         };
         return param;

+ 40 - 23
src/components/icss/IndeptLabel.vue

@@ -84,32 +84,22 @@
                     </template>
                 </el-table-column>
             </el-table>
-          <el-pagination v-if="total>pageSize"
-                        :current-page.sync="currentPage"
-                        @current-change="currentChange"
-                        background
-                        :page-size="pageSize"
-                        layout="total,prev, pager, next, jumper"
-                        :total="total">
+          <el-pagination  :current-page.sync="currentPage"
+                          @current-change="currentChange"
+                          background
+                          :page-size.sync="pageSize"
+                          :page-sizes="pageSizeArr"
+                           @size-change="handleSizeChange"
+                          :layout="pageLayout"
+                          :total="total">
             </el-pagination>
         </div>
-        <!-- <div class="pagination">
-            <el-pagination v-if="total>pageSize"
-                        :current-page.sync="currentPage"
-                        @current-change="currentChange"
-                        background
-                        :page-size="pageSize"
-                        layout="total,prev, pager, next, jumper"
-                        :total="total">
-            </el-pagination>
-        </div> -->
-
     </div>
 </template>
 
 <script>
   import api from '@api/icss.js';
-
+  import config from '@api/config.js';
   export default {
     name: 'tag-group',
     data: function() {
@@ -126,7 +116,9 @@
           tagSysName: '', //标签系统名称
         },
         currentPage: 1,
-        pageSize: 10,
+        pageSize: config.pageSize,
+        pageSizeArr:config.pageSizeArr,
+        pageLayout:config.pageLayout,
         total: 0,
       }
     },
@@ -148,9 +140,15 @@
       next(vm => {
         //const pm = to.param;
         Object.assign(vm, to.params);
+        vm.inCurrentPage=to.params.currentPage;
       })
     },
     methods: {
+      handleSizeChange(val){
+        this.pageSize = val;
+        this.currentPage = utils.getCurrentPage(this.currentPage, this.total, this.pageSize);
+        this.getDataList();
+      },
       getValue(val) {
         console.log('changeVal', val, this.filter.tagAdscription)
       },
@@ -168,7 +166,14 @@
       getDataList(isTurnPage) {
         const param = this.getFilterItems(isTurnPage);
         this.searched = true;
+        const loading = this.$loading({
+            lock: true,
+            text: 'Loading',
+            spinner: 'el-icon-loading',
+            background: 'rgba(0, 0, 0, 0.7)'
+        });
         api.getTagList(param).then((res) => {
+          loading.close()
           const list = [...res.data.data.records];
           for (var i = 0; i < list.length; i++) {
             for (var j =  0; j < this.tagTypes.length; j++) {
@@ -185,6 +190,10 @@
           }
           this.list = list;
           this.total = res.data.data.total;
+          if(this.inCurrentPage!==undefined){
+            this.currentPage=this.inCurrentPage;
+            this.inCurrentPage = undefined;
+          }
         })
       },
       filterDatas() {
@@ -194,8 +203,9 @@
       addIndeptTag() {
         const pam = this.searched ? {
           currentPage: this.currentPage,
+          pageSize:this.pageSize,
           filter: this.filter
-        } : {currentPage: this.currentPage};
+        } : {currentPage: this.currentPage,pageSize:this.pageSize};
         this.$router.push({
           name: 'AddIndeptLabel',
           params: pam
@@ -250,10 +260,10 @@
         };
         const param = {
           tagTypeList: [1],
-          current: this.currentPage,
+          current: this.inCurrentPage||this.currentPage,
           size: this.pageSize,
           type: this.filter.tagAdscription,
-          tagName: this.filter.tagSysName,
+          tagName: this.filter.tagSysName.trim(),
           controlTypeList: this.filter.controlType[0] ? this.filter.controlType: []
         };
         return param;
@@ -325,4 +335,11 @@
     .el-select .el-input .el-icon-circle-close{
         float:left;
     }
+  .el-pagination__sizes{
+      margin-right: 20px;
+    .el-input .el-input__inner{
+        height: 28px;
+        line-height: 28px;
+    }
+  }
 </style>

+ 32 - 19
src/components/icss/LabelGroup.vue

@@ -83,33 +83,25 @@
                 </el-table-column>
             </el-table>
         <div class="pagination">
-            <el-pagination v-if="total>pageSize"
-                       :current-page.sync="currentPage"
+            <el-pagination :current-page.sync="currentPage"
                        @current-change="currentChange"
                        background
                        :page-size="pageSize"
-                       layout="total,prev, pager, next, jumper"
+                        :page-sizes="pageSizeArr"
+                        @size-change="handleSizeChange"
+                        :layout="pageLayout"
                        :total="total">
             </el-pagination>
         </div>
-        
         </div>
-       <!--  <div class="pagination">
-           <el-pagination v-if="total>pageSize"
-                      :current-page.sync="currentPage"
-                      @current-change="currentChange"
-                      background
-                      :page-size="pageSize"
-                      layout="total,prev, pager, next, jumper"
-                      :total="total">
-           </el-pagination>
-       </div> -->
         
     </div>
 </template>
 
 <script>
 import api from '@api/icss.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
 
 export default {
     name: 'tag-group',
@@ -126,7 +118,9 @@ export default {
                 tagSysName: '', //标签系统名称
             },
             currentPage: 1,
-            pageSize: 10,
+            pageSize: config.pageSize,
+            pageSizeArr:config.pageSizeArr,
+            pageLayout:config.pageLayout,
             total: 0,
         }
     },
@@ -148,9 +142,15 @@ export default {
     next(vm => {
       //const pm = to.param;
       Object.assign(vm, to.params);
+      vm.inCurrentPage=to.params.currentPage;
     })
   },
     methods: {
+      handleSizeChange(val){
+        this.pageSize = val;
+        this.currentPage = utils.getCurrentPage(this.currentPage, this.total, this.pageSize);
+        this.getDataList();
+      },
         getValue(val) {
             // console.log('changeVal', val, this.filter.tagAdscription)
         },
@@ -173,7 +173,14 @@ export default {
         getDataList(isTurnPage) {
             const param = this.getFilterItems(isTurnPage);
           this.searched = true;
-            api.getTagList(param).then((res) => {
+          const loading = this.$loading({
+              lock: true,
+              text: 'Loading',
+              spinner: 'el-icon-loading',
+              background: 'rgba(0, 0, 0, 0.7)'
+          });
+            api.getTagList(param).then((res) => { 
+                 loading.close()
                 const list = res.data.data.records
                 for (var i = 0; i < list.length; i++) {
                     for (var j =  0; j < this.tagTypes.length; j++) {
@@ -190,6 +197,10 @@ export default {
                 }
                 this.list = list;
                 this.total = res.data.data.total;
+                if(this.inCurrentPage!==undefined){
+                  this.currentPage=this.inCurrentPage;
+                  this.inCurrentPage = undefined;
+                }
             })
         },
         filterDatas() {
@@ -199,8 +210,10 @@ export default {
         addTagGroup() {
           const pam = this.searched ? {
             currentPage: this.currentPage,
+            pageSize:this.pageSize,
             filter: this.filter
-          } : {currentPage: this.currentPage};
+          } : {currentPage: this.currentPage,
+            pageSize:this.pageSize};
           this.$router.push({name: 'AddLabelGroup', params: pam});
         },
         modifyTagGroup(row, type) {
@@ -250,10 +263,10 @@ export default {
           };
             const param = {
                 tagTypeList: this.filter.tagType[0] && this.filter.tagType|| this.tagTypesList,
-                current: this.currentPage,
+                current: this.inCurrentPage||this.currentPage,
                 size: this.pageSize,
                 type: this.filter.tagAdscription,
-                tagName: this.filter.tagSysName,
+                tagName: this.filter.tagSysName.trim(),
                 notTypeList: [7]
             };
             return param;

+ 36 - 9
src/components/icss/MedicalMultRelation.vue

@@ -52,18 +52,19 @@
                 <el-table-column
                         label="操作" width="160">
                     <template slot-scope="scope">
-                        <el-button type="text" size="small" :disabled="scope.row.isDeleted != 'N'" @click="toEditProduct(scope.row)">修改</el-button>
+                        <el-button type="text" size="small" @click="toEditProduct(scope.row)">修改</el-button>
                         <!-- <span style="margin:0 3px;">|</span>
                         <el-button type="text" size="small" :class="scope.row.isDeleted == 'N'?'delete':'review'" @click="showDelDialog(scope.row)">{{scope.row.isDeleted == 'N'?'删除':'恢复'}}</el-button> -->
                     </template>
                 </el-table-column>
             </el-table>
-            <el-pagination v-if="total>pageSize"
-                           :current-page.sync="currentPage"
+            <el-pagination :current-page.sync="currentPage"
                            @current-change="currentChange"
                            background
                            :page-size="pageSize"
-                           layout="total,prev, pager, next, jumper"
+                           :page-sizes="pageSizeArr"
+                           @size-change="handleSizeChange"
+                           :layout="pageLayout"
                            :total="total">
             </el-pagination>
         </div>
@@ -73,6 +74,9 @@
 
 <script>
   import api from '@api/icss.js';
+  import config from '@api/config.js';
+  import utils from '@api/utils.js';
+  
   export default {
     name: 'MedicalName',
     data: function () {
@@ -85,7 +89,9 @@
         isState:'',
         cacheData: {},
         currentPage: 1,
-        pageSize: 10,
+        pageSize: config.pageSize,
+        pageSizeArr:config.pageSizeArr,
+        pageLayout:config.pageLayout,
         total: 0,
         searched: false,
         filter: {
@@ -115,14 +121,22 @@
       next(vm => {
         //const pm = to.param;
         Object.assign(vm,to.params);
+        vm.inCurrentPage=to.params.currentPage;
       })
     },
     methods: {
+      handleSizeChange(val){
+        this.pageSize = val;
+        this.currentPage = utils.getCurrentPage(this.currentPage, this.total, this.pageSize);
+        this.getDataList();
+      },
       addMedicalMultR(){
         const pam = this.searched ? {
           currentPage: this.currentPage,
+          pageSize:this.pageSize,
           filter: this.filter
-        } : {currentPage: this.currentPage};
+        } : {currentPage: this.currentPage,
+          pageSize:this.pageSize};
         this.$router.push({name:'AddMedicalMultRelation',
           params:pam});
       },
@@ -134,8 +148,10 @@
         };
         const pam = this.searched ? {
           currentPage: this.currentPage,
+          pageSize:this.pageSize,
           filter: this.filter
-        } : {currentPage: this.currentPage};
+        } : {currentPage: this.currentPage,
+          pageSize:this.pageSize};
         api.relationContactDetail(param).then((res) => {
           const {code,data,msg} = res.data;
           if(code=='0'){
@@ -156,12 +172,23 @@
       getDataList(isTurnPage) {
         const param = this.getFilterItems(isTurnPage);
         this.searched = true;
+        const loading = this.$loading({
+            lock: true,
+            text: 'Loading',
+            spinner: 'el-icon-loading',
+            background: 'rgba(0, 0, 0, 0.7)'
+        }); 
         api.multContactList(param).then((res) => {
+          loading.close()
           if (res.data.code == '0') {
             const data = res.data.data;
             this.list = data.records;
             this.cacheData[param.current] = data.records;
             this.total = data.total;
+            if(this.inCurrentPage!==undefined){
+              this.currentPage=this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
           }
         }).catch((error) => {
           console.log(error);
@@ -188,8 +215,8 @@
           this.clearFilter();
         };
         const param = {
-          name: this.filter.term,
-          current: this.currentPage,
+          name: this.filter.term.trim(),
+          current: this.inCurrentPage||this.currentPage,
           size: this.pageSize,
           type: this.filter.type,
           isDeleted: this.isState,

+ 36 - 10
src/components/icss/MedicalName.vue

@@ -103,12 +103,13 @@
                     </template>
                 </el-table-column>
             </el-table>
-            <el-pagination v-if="total>pageSize"
-                           :current-page.sync="currentPage"
+            <el-pagination :current-page.sync="currentPage"
                            @current-change="currentChange"
                            background
                            :page-size="pageSize"
-                           layout="total,prev, pager, next, jumper"
+                           :page-sizes="pageSizeArr"
+                           @size-change="handleSizeChange"
+                           :layout="pageLayout"
                            :total="total">
             </el-pagination>
         </div>
@@ -118,7 +119,9 @@
 
 <script>
   import api from '@api/icss.js';
-
+  import config from '@api/config.js';
+  import utils from '@api/utils.js';
+  
   export default {
     name: 'MedicalName',
     data: function () {
@@ -131,7 +134,9 @@
         // isState:'',
         cacheData: {}, //因为删除和恢复要及时更新,所以不做缓存
         currentPage: 1,
-        pageSize: 10,
+        pageSize: config.pageSize,
+        pageSizeArr:config.pageSizeArr,
+        pageLayout:config.pageLayout,
         total: 0,
         searched:false,
         filter: {
@@ -165,9 +170,15 @@
       next(vm => {
         //const pm = to.param;
         Object.assign(vm,to.params);
+        vm.inCurrentPage=to.params.currentPage;
       })
     },
     methods: {
+      handleSizeChange(val){
+        this.pageSize = val;
+        this.currentPage = utils.getCurrentPage(this.currentPage, this.total, this.pageSize);
+        this.getDataList();
+      },
       reloadLib(){
         if(this.reloadFlag){
           this.reloadFlag = false;
@@ -180,13 +191,17 @@
       },
       addMedicalName(){
         const pam = this.searched?{currentPage:this.currentPage,
-          filter:this.filter}:{currentPage:this.currentPage};
+          pageSize:this.pageSize,
+          filter:this.filter}:{currentPage:this.currentPage,
+          pageSize:this.pageSize};
         this.$router.push({name:'AddMedicalName',
           params:pam});
       },
       toEditProduct(row,copy){
         const pam = this.searched?{currentPage:this.currentPage,
-          filter:this.filter}:{currentPage:this.currentPage};
+          pageSize:this.pageSize,
+          filter:this.filter}:{currentPage:this.currentPage,
+          pageSize:this.pageSize};
         this.$router.push({
           name:'AddMedicalName',
           // params: {info:row}
@@ -200,12 +215,23 @@
       getDataList(isTurnPage) {
         const param = this.getFilterItems(isTurnPage);
         this.searched = true;
+        const loading = this.$loading({
+            lock: true,
+            text: 'Loading',
+            spinner: 'el-icon-loading',
+            background: 'rgba(0, 0, 0, 0.7)'
+        });
         api.knowledgeName(param).then((res) => {
+          loading.close()
           if (res.data.code == '0') {
             const data = res.data.data;
             this.list = data.records;
             // this.cacheData[param.current] = data.records;
             this.total = data.total;
+            if(this.inCurrentPage!==undefined){
+              this.currentPage=this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
           }
         }).catch((error) => {
           console.log(error);
@@ -232,11 +258,11 @@
           this.clearFilter();
         };
         const param = {
-          name: this.filter.term,
-          current: this.currentPage,
+          name: this.filter.term.trim(),
+          current: this.inCurrentPage||this.currentPage,
           size: this.pageSize,
           type:this.filter.type,
-          libName:this.filter.libName,
+          libName:this.filter.libName.trim(),
           isDeleted:this.filter.isState
         };
         return param;

+ 32 - 8
src/components/icss/MedicalRelation.vue

@@ -104,12 +104,13 @@
                     </template>
                 </el-table-column>
             </el-table>
-            <el-pagination v-if="total>pageSize"
-                           :current-page.sync="currentPage"
+            <el-pagination :current-page.sync="currentPage"
                            @current-change="currentChange"
                            background
                            :page-size="pageSize"
-                           layout="total,prev, pager, next, jumper"
+                           :page-sizes="pageSizeArr"
+                           @size-change="handleSizeChange"
+                           :layout="pageLayout"
                            :total="total">
             </el-pagination>
         </div>
@@ -119,6 +120,8 @@
 
 <script>
   import api from '@api/icss.js';
+  import config from '@api/config.js';
+  import utils from '@api/utils.js';
 
   export default {
     name: 'MedicalRelation',
@@ -138,7 +141,9 @@
         },
         cacheData: {},
         currentPage: 1,
-        pageSize: 10,
+        pageSize: config.pageSize,
+        pageSizeArr:config.pageSizeArr,
+        pageLayout:config.pageLayout,
         total: 0,
         typeList:[],
         titleWidth:'1070px' //头部最小宽度
@@ -168,14 +173,22 @@
       next(vm => {
         //const pm = to.param;
         Object.assign(vm, to.params);
+        vm.inCurrentPage=to.params.currentPage;
       })
     },
     methods: {
+      handleSizeChange(val){
+        this.pageSize = val;
+        this.currentPage = utils.getCurrentPage(this.currentPage, this.total, this.pageSize);
+        this.getDataList();
+      },
       addMedicalR(){
         const pam = this.searched ? {
           currentPage: this.currentPage,
+          pageSize:this.pageSize,
           filter: this.filter
-        } : {currentPage: this.currentPage};
+        } : {currentPage: this.currentPage,
+          pageSize:this.pageSize};
         this.$router.push({name: 'AddMedicalRelation', params: pam});
       },
       filterDatas(){
@@ -185,7 +198,14 @@
       getDataList(flag,isTurnPage) {
         const params = this.getFilterItems(isTurnPage);
         this.searched = true;
+        const loading = this.$loading({
+            lock: true,
+            text: 'Loading',
+            spinner: 'el-icon-loading',
+            background: 'rgba(0, 0, 0, 0.7)'
+        });
         api.knowledgeRelation(params).then((res) => {
+          loading.close()
           if (res.data.code == '0') {
             const data = res.data.data;
             for(let j = 0;j < data.records.length;j++){
@@ -198,6 +218,10 @@
               this.cacheData = {}
             }
             this.total = data.total;
+            if(this.inCurrentPage!==undefined){
+              this.currentPage=this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
           }
         }).catch((error) => {
           console.log(error);
@@ -226,11 +250,11 @@
           this.clearFilter();
         };
         const param = {
-          current: this.currentPage,
+          current: this.inCurrentPage||this.currentPage,
           size: this.pageSize,
           relationId: this.filter.type,
-          startName: this.filter.startName,
-          endName: this.filter.endName,
+          startName: this.filter.startName.trim(),
+          endName: this.filter.endName.trim(),
           isDeleted:this.filter.isState
         };
         return param;

+ 10 - 10
src/components/icss/MedicineInfoPg.vue

@@ -1,11 +1,6 @@
 <template>
     <el-form :rules="rules" :model="data" ref="form" class="sub-form">
         <!--<el-input v-model="form.orderNo" :value="index" type="hidden"></el-input>-->
-        <el-form-item label="显示位置:" prop="position" label-width="160px">
-            <el-checkbox-group v-model="data.position">
-                <el-checkbox v-for="it in positions" :key="it.key" :label="it.key">{{it.name}}</el-checkbox>
-            </el-checkbox-group>
-        </el-form-item>
         <!-- <el-form-item label="是否属于诊断依据:" prop="isReason" label-width="160px">
             <el-select v-model="data.isReason" placeholder="请选择">
                 <el-option label="否" :value="0"></el-option>
@@ -15,6 +10,11 @@
         <el-form-item label="标题名称:" prop="title" label-width="160px">
             <el-input v-model="data.title"></el-input>
         </el-form-item>
+        <el-form-item label="显示位置:" prop="position" label-width="160px">
+            <el-checkbox-group v-model="data.position">
+                <el-checkbox v-for="it in positions" :key="it.key" :label="it.key">{{it.name}}</el-checkbox>
+            </el-checkbox-group>
+        </el-form-item>
         <el-form-item label="内容" prop="content" label-width="160px">
             <quillEditor v-model="data.content"
                          :options="editorOption"
@@ -22,8 +22,8 @@
                          ref="quillEditor"></quillEditor>
         </el-form-item>
         <div class="order-btn">
-            <a v-if="index!==0" class="order-up" @click="reOrder(1)">上升</a>
-            <a v-if="index!==total-1" class="order-down" @click="reOrder(0)">下降</a>
+            <a v-if="index!==0" :class="index===total-1?'order-spc':'order-up'" @click="reOrder(1)">上升</a>
+            <a v-if="index!==total-1" :class="index===0?'order-spc':'order-down'" @click="reOrder(0)">下降</a>
         </div>
         <el-form-item label-width="130px">
             <el-button @click="addEmit">添加段落</el-button>
@@ -169,7 +169,7 @@
     }
     .order-btn{
         position:absolute;
-        top:40px;
+        top:-22px;
         right:50px;
         a{
             display: block;
@@ -181,8 +181,8 @@
             cursor: pointer;
             font-size: 12px;
         }
-        .order-up{
-
+        .order-spc{
+            margin-top: 28px;
         }
     }
     /**富文本编辑器样式修改***/

+ 37 - 9
src/components/icss/MedicinePrompt.vue

@@ -77,12 +77,13 @@
                     </template>
                 </el-table-column>
             </el-table>
-            <el-pagination v-if="total>pageSize"
-                           :current-page.sync="currentPage"
+            <el-pagination :current-page.sync="currentPage"
                            @current-change="currentChange"
                            background
                            :page-size="pageSize"
-                           layout="total,prev, pager, next, jumper"
+                           :page-sizes="pageSizeArr"
+                           @size-change="handleSizeChange"
+                           :layout="pageLayout"
                            :total="total">
             </el-pagination>
         </div>
@@ -92,6 +93,8 @@
 
 <script>
   import api from '@api/icss.js';
+  import config from '@api/config.js';
+  import utils from '@api/utils.js';
 
   export default {
     name: 'MedicinePrompt',
@@ -100,7 +103,9 @@
         list: [],
         cacheData: {},
         currentPage: 1,
-        pageSize: 10,
+        pageSize: config.pageSize,
+        pageSizeArr:config.pageSizeArr,
+        pageLayout:config.pageLayout,
         total: 0,
         linkIn:[],
         pays:[],
@@ -139,22 +144,32 @@
       next(vm => {
         //const pm = to.param;
         Object.assign(vm,to.params);
+        vm.inCurrentPage=to.params.currentPage;
       })
     },
     methods: {
+      handleSizeChange(val){
+        this.pageSize = val;
+        this.currentPage = utils.getCurrentPage(this.currentPage, this.total, this.pageSize);
+        this.getDataList();
+      },
       addMedicalPrompt(){
         const pam = this.searched ? {
           currentPage: this.currentPage,
+          pageSize:this.pageSize,
           filter: this.filter
-        } : {currentPage: this.currentPage};
+        } : {currentPage: this.currentPage,
+          pageSize:this.pageSize};
         this.$router.push({name:'AddMedicinePrompt',
           params:pam});
       },
       toEditProduct(row){
         const pam = this.searched ? {
           currentPage: this.currentPage,
+          pageSize:this.pageSize,
           filter: this.filter
-        } : {currentPage: this.currentPage};
+        } : {currentPage: this.currentPage,
+          pageSize:this.pageSize};
         this.$router.push({
           name:'AddMedicinePrompt',
           params: Object.assign(pam, {data:row,isEdit:true})
@@ -163,8 +178,10 @@
       toCopyProduct(row){
         const pam = this.searched ? {
           currentPage: this.currentPage,
+          pageSize:this.pageSize,
           filter: this.filter
-        } : {currentPage: this.currentPage};
+        } : {currentPage: this.currentPage,
+          pageSize:this.pageSize};
         this.$router.push({
           name:'AddMedicinePrompt',
           params: Object.assign(pam, {data:row,isCopy:true})
@@ -177,12 +194,23 @@
       getDataList(isTurnPage) {
         const param = this.getFilterItems(isTurnPage);
         this.searched = true;
+        const loading = this.$loading({
+            lock: true,
+            text: 'Loading',
+            spinner: 'el-icon-loading',
+            background: 'rgba(0, 0, 0, 0.7)'
+        });
         api.getConceptKnowledgeList(param).then((res) => {
+          loading.close()
           if (res.data.code == '0') {
             const data = res.data.data;
             this.list = data.records;
             this.cacheData[param.current] = data.records;
             this.total = data.total;
+            if(this.inCurrentPage!==undefined){
+              this.currentPage=this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
           }
         }).catch((error) => {
           console.log(error);
@@ -202,9 +230,9 @@
           this.clearFilter();
         };
         const param = {
-          conceptName:this.filter.term,
+          conceptName:this.filter.term.trim(),
           title:this.filter.title,
-          current: this.currentPage,
+          current: this.inCurrentPage||this.currentPage,
           size: this.pageSize,
           status:this.filter.status,
           libType:this.filter.libType,

+ 1 - 0
src/components/icss/NoiseTemplate.vue

@@ -236,6 +236,7 @@ export default {
           // "subType": this.dataPub.region6,   	         //0:可以,1:不可以(当项目检索)
           "sexType": this.dataPub.region7,             //1:男,2:女,3:通用
           "specFlag": this.dataPub.specFlag,           //生命体征
+          "selFlag": this.dataPub.selFlag,           //一般情况/其他史标记
           "ageBegin": this.dataPub.region8,       		 //最小年龄
           "ageEnd": this.dataPub.region9,              //最大年龄
           "textGenerate": this.form.currentOrder,      //成文顺序 默认0

+ 29 - 6
src/components/icss/PhysicalExamTemplate.vue

@@ -64,12 +64,13 @@
                     </template>
                 </el-table-column>
             </el-table>
-            <el-pagination v-if="total>pageSize"
-                           :current-page.sync="currentPage"
+            <el-pagination :current-page.sync="currentPage"
                            @current-change="currentChange"
                            background
                            :page-size="pageSize"
-                           layout="total,prev, pager, next, jumper"
+                           :page-sizes="pageSizeArr"
+                           @size-change="handleSizeChange"
+                           :layout="pageLayout"
                            :total="total">
             </el-pagination>
         </div>
@@ -79,6 +80,7 @@
 
 <script>
   import api from '@api/icss.js';
+  import config from '@api/config.js';
   import utils from '@api/utils.js';
 
   export default {
@@ -89,7 +91,9 @@
         cacheData: {},
         deptList: [], //科室下拉列表
         currentPage: 1,
-        pageSize: 10,
+        pageSize: config.pageSize,
+        pageSizeArr:config.pageSizeArr,
+        pageLayout:config.pageLayout,
         total: 0,
         linkIn:[],
         pays:[],
@@ -118,14 +122,22 @@
       next(vm => {
         //const pm = to.param;
         Object.assign(vm, to.params);
+        vm.inCurrentPage=to.params.currentPage;
       })
     },
     methods: {
+      handleSizeChange(val){
+        this.pageSize = val;
+        this.currentPage = utils.getCurrentPage(this.currentPage, this.total, this.pageSize);
+        this.getDataList();
+      },
       addModule() {
         const pam = this.searched ? {
           currentPage: this.currentPage,
+          pageSize:this.pageSize,
           filter: this.filter
-        } : {currentPage: this.currentPage};
+        } : {currentPage: this.currentPage,
+          pageSize:this.pageSize};
         this.$router.push({name: 'AddPhysicalExamTemp', params: pam});
       },
       toEditProduct(row){
@@ -166,11 +178,22 @@
       getDataList(isTurnPage) {
         const param = this.getFilterItems(isTurnPage);
         this.searched = true;
+        const loading = this.$loading({
+            lock: true,
+            text: 'Loading',
+            spinner: 'el-icon-loading',
+            background: 'rgba(0, 0, 0, 0.7)'
+        });
         api.getPhysicalExamTempList(param).then((res) => {
+           loading.close()
           if (res.data.code == '0') {
             const data = res.data.data;
             this.list = data.records;
             this.total = data.total;
+            if(this.inCurrentPage!==undefined){
+              this.currentPage=this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
           }
         }).catch((error) => {
           console.log(error);
@@ -186,7 +209,7 @@
         };
         const param = {
           deptId: this.filter.deptId,
-          current: this.currentPage,
+          current: this.inCurrentPage||this.currentPage,
           size: this.pageSize
         };
         return param;

+ 9 - 8
src/components/icss/PubIndeptTag.vue

@@ -304,12 +304,10 @@
               ></el-input>
             </el-form-item>
           </div>
-           <el-form-item v-if="form.region1 == 4">
-            <span>
-                <el-checkbox v-model="form.specFlag"  label="是否为生命体征" true-label="4" false-label="0"  @change="sendData"></el-checkbox>
-            </span>
-                
-          </el-form-item>
+           <el-form-item>
+               <el-checkbox v-if="form.region1 == 4" v-model="form.specFlag"  label="是否为生命体征" true-label="4" false-label="0"  @change="sendData"></el-checkbox>
+               <el-checkbox v-if="form.region1 == 1&&form.region2 == 1" v-model="form.selFlag"  label="一般情况类型" true-label=1 false-label=0  @change="sendData"></el-checkbox>
+           </el-form-item>
           
         </el-form>
     </div>
@@ -367,6 +365,7 @@
           region12: '0',        //是否为查体推送   
           region13:'',
           specFlag :'0',        //标记状态(0:没有标记,1:主诉高亮,2:诱因记录)
+          selFlag :0,
           prefix:'',            //前缀
           suffix:'',            //后缀
           tipLis:[],           //提示列表
@@ -450,7 +449,6 @@
       }
     },
     mounted() {
-      
       this.getDropList();
       //编辑时赋值
       const editData = this.$props.editData;
@@ -477,6 +475,9 @@
       },
       newSign(nextVal, prevVal) {
         const editData = this.$props.editData;
+        if(!editData.id){   //编辑时类型不可换
+          this.form.selFlag = 0;      //切换填写单类型,标记清空
+        }
         if(!this.isEditOrCopy) {
           this.initForm()
         }
@@ -500,7 +501,7 @@
             this.labelTypesList = res.data.data[6];
             this.form.tipLis = res.data.data[6];
             if(this.isEditOrCopy && (this.form.region2=='1'||this.form.region2=='2')) {
-              this.labelTypes = this.labelTypesList.filter(item => (item.val=='1'||item.val=='2'));
+              this.labelTypes = this.labelTypesList.filter(item => this.labelTypesMaps[this.form.region1].indexOf(item.val) > -1).filter(item => (item.val=='1'||item.val=='2'));
             } else {
               this.labelTypes = this.labelTypesList;
             }

+ 9 - 5
src/components/icss/PubTagGroup.vue

@@ -258,10 +258,10 @@
           ></el-option>
         </el-select>
       </el-form-item>
-      <el-form-item v-if="form.region1 == 4">
-          <span>
-              <el-checkbox v-model="form.specFlag"  label="是否为生命体征" true-label="4" false-label="0"  @change="sendData"></el-checkbox>
-          </span>
+      <el-form-item>
+          <el-checkbox v-if="form.region1 == 4" v-model="form.specFlag"  label="是否为生命体征" true-label="4" false-label="0"  @change="sendData"></el-checkbox>
+          <el-checkbox v-if="form.region1 == 3&&(form.region2 == 2||form.region2 == 6)" v-model="form.selFlag"  label="默认选中(选中互斥项)" true-label=1 false-label='0'  @change="sendData"></el-checkbox>
+          <el-checkbox v-if="form.region1 == 1&&form.region2 == 2" v-model="form.selFlag"  label="一般情况类型" true-label=1 false-label='0'  @change="sendData"></el-checkbox>
       </el-form-item>
     </el-form>
   </div>
@@ -322,7 +322,8 @@ export default {
         tagPool: [],          //标签池数据
         order: [],            //排序方式
         tipLis: [],           //提示列表
-        specFlag: '0'       //生命体征
+        specFlag: '0',       //生命体征
+        selFlag:0,        //一般情况或其他史标记
       },
       labelTypesMaps: {       //// 归属和填写单类型限制
         '1': ['2', '3', '4'],  //推送类型暂时不用
@@ -430,6 +431,9 @@ export default {
     },
     newSign(nextVal, prevVal) {
       this.tmpType = prevVal;
+      if(!this.editData.id){   //编辑时类型不可换
+        this.form.selFlag = 0;      //切换填写单类型,标记清空
+      }
      if(!this.isEditOrCopy) {
         this.initForm()
       }

+ 2 - 2
src/components/icss/PubTagPartDetail.vue

@@ -67,12 +67,12 @@
               <ul v-else>
                 <template v-if="n == 1">
                   <li :class="['partDetail','ellipsis',{'redWordTip':isRed(poolDetailList[n][0].sexType)}]" v-for="item in poolDetailList[n][0].questionDetailList" :style="getStyleR(item.id)?styleR:null" :title="'[ '+item.name+' ]'" :key="item.id">
-                    [ {{item.name}}{{poolDetailList[n][0].sexType}} ]
+                    [ {{item.name}} ]
                   </li>
                 </template>
                 <template  v-if="n == 2 || n == 3 || n == 4 || n == 5">
                   <li :class="['partDetail','ellipsis',{'redWordTip':isRed(item.sexType)}]" v-for="item in poolDetailList[n]" :style="getStyleR(item.id)?styleR:null" :title="'[ '+item.tagName+' ]'" :key="item.tagName" @click="selectTagOne($event,item.id,n)">
-                    [ {{item.tagName}}{{item.sexType}} ]
+                    [ {{item.tagName}} ]
                   </li>
                 </template>
               </ul>

+ 116 - 0
src/components/icss/SimilarListDrag.vue

@@ -0,0 +1,116 @@
+<template>
+    <div  
+    v-if="searchType ==='standard'&& similarList.length > 0&&isShow" 
+    class="similarBox clearfix"
+        id="dragModalWrap"
+    > 
+        <div class="tabTitle"  id="dragModalTitle" @mousedown="dragAdd($event)" @mouseup="dragDel">
+            相似词数据
+        </div>
+    
+        <div class="tableBox">
+            
+            <table class="similarTable">
+            <tr>
+                <td>序号</td>
+                <td>术语</td>
+                <td>归属</td>
+            </tr>
+            <tr v-for="(item,index) in similarList" :key="item.conceptId">
+                <td>{{index+1}}</td>
+                <td>{{item.name}}</td>
+                <td>({{item.libType}}){{item.isConceptRemark}}</td>
+            </tr>
+            </table>
+        </div>
+        <div class="closeTableBox"
+        >
+            <span class="closeTable"  @click="closeTable">关闭</span>
+        </div>
+    </div>
+</template>
+<script>
+import utils from '@api/utils.js';
+export default {
+    name: "SimilarListDrag",
+    props: ["searchType","similarList","isShow"],
+    data() {
+        return{
+
+        }
+    },
+    methods: {
+        dragAdd(ev){
+            utils.dragBox('dragModalWrap','dragModalTitle','add')
+        },
+        dragDel(){
+            utils.dragBox('dragModalWrap','dragModalTitle','del')
+        },
+        closeTable(){
+            this.$emit("closeTable")
+        },
+    }
+}
+</script>
+<style lang="less" scoped>
+.similarBox {
+    position: fixed;
+    background: #fff;
+    width: 400px;
+    max-height: 280px;
+    top: 350px;
+    // border: 1px solid #000;
+   
+     z-index: 10;
+     left: 660px;
+    //  top: 0;
+     box-shadow:0 0 12px #ccc;
+  }
+  .tabTitle {
+    width: 100%;
+    height: 40px;
+    line-height: 40px;
+    font-size: 16px;
+    font-weight: bold;
+    cursor: move;
+  }
+  .closeTableBox{
+    position: relative;
+    height: 35px;
+  }
+  .closeTable {
+    position: absolute;
+    display: inline-block;
+    width: 40px;
+    height: 24px;
+    line-height: 24px;
+    border-radius: 5px;
+    cursor: pointer;
+    border: 1px solid #000;
+    box-sizing: border-box;
+    right: 30px;
+    top: 5px;
+  }
+  .tableBox {
+    max-height: 200px;
+    overflow: auto;
+    padding: 0 30px;
+  }
+  .similarTable{
+          
+    width: 100%;
+    border-collapse: collapse;
+   
+    >tr{
+        height: 30px;
+    text-align: center;
+       border: 1px solid #000;
+      td{
+        border: 1px solid #000;
+        width: 135px;
+        position: relative;
+      }
+    }
+    
+  }
+</style>

+ 1 - 1
src/components/icss/SymptomTagGroup.vue

@@ -381,7 +381,7 @@ export default {
         closeTagAttribute(tag) {
             this.rightTagsList2 = this.rightTagsList2.filter((item) =>{
                     if(item.id === tag.id) {
-                        item.symptomType = 3
+                        item.symptomType = 0
                     }
                     return item
                 })

+ 31 - 6
src/components/icss/TemplateMaintenance.vue

@@ -85,12 +85,13 @@
 
         </div>
         <div class="pagination">
-            <el-pagination v-if="total>pageSize"
-                        :current-page.sync="currentPage"
+            <el-pagination :current-page.sync="currentPage"
                         @current-change="currentChange"
                         background
                         :page-size="pageSize"
-                        layout="total,prev, pager, next, jumper"
+                        :page-sizes="pageSizeArr"
+                        @size-change="handleSizeChange"
+                        :layout="pageLayout"
                         :total="total">
             </el-pagination>
         </div>
@@ -100,6 +101,8 @@
 
 <script>
   import api from '@api/icss.js';
+  import config from '@api/config.js';
+  import utils from '@api/utils.js';
 
   export default {
     name: 'TemplateMaintenance',
@@ -117,7 +120,9 @@
           tagAdscription: '', //标签归属
         },
         currentPage: 1,
-        pageSize: 10,
+        pageSize: config.pageSize,
+        pageSizeArr:config.pageSizeArr,
+        pageLayout:config.pageLayout,
         total: 0,
         deptAndDisInfo:{},
       }
@@ -178,6 +183,7 @@
         //const pm = to.param;
         const flt = to.params.filter;
         vm.currentPage = to.params.currentPage||1;
+        vm.pageSize = to.params.pageSize || config.pageSize;
         vm.deptAndDisInfo = JSON.parse(localStorage.getItem('deptDis')||null);
         if(flt){
           vm.filter.templateType = flt.templateType;
@@ -186,9 +192,15 @@
               vm.filter.ownTo = flt.ownTo;
             });
         }
+        vm.inCurrentPage=to.params.currentPage;
       })
     },
     methods: {
+      handleSizeChange(val){
+        this.pageSize = val;
+        this.currentPage = utils.getCurrentPage(this.currentPage, this.total, this.pageSize);
+        this.getDataList();
+      },
       getSubTemplate() {
         api.getAllDeptAndDisInfo({}).then((res) => {
           if (res.data.code === '0') {//获取科室和疾病所有信息
@@ -212,7 +224,14 @@
       getDataList(isTurnPage) {
         const param = this.getFilterItems(isTurnPage);
         this.searched = true;
+        const loading = this.$loading({
+            lock: true,
+            text: 'Loading',
+            spinner: 'el-icon-loading',
+            background: 'rgba(0, 0, 0, 0.7)'
+        });
         api.getModuleInfoList(param).then((res) => {
+           loading.close()
           if(res.data.code == 0){
             const list = res.data.data.records;
             for (var i = 0; i < list.length; i++) {
@@ -224,6 +243,10 @@
             }
             this.list = list;
             this.total = res.data.data.total;
+            if(this.inCurrentPage!==undefined){
+              this.currentPage=this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
           }
         })
       },
@@ -234,8 +257,10 @@
       addIndeptTag() {
         const pam = this.searched ? {
           currentPage: this.currentPage,
+          pageSize:this.pageSize,
           filter: this.filter
-        } : {currentPage: this.currentPage};
+        } : {currentPage: this.currentPage,
+          pageSize:this.pageSize};
         this.$router.push({name: 'TemplateMaintenanceWrap', params: pam})
       },
       modifyIndeptTag(row) {
@@ -283,7 +308,7 @@
           };
         };
         const param = {
-          current: this.currentPage,
+          current: this.inCurrentPage||this.currentPage,
           size: this.pageSize,
           type: this.filter.tagAdscription,
           moduleType:this.filter.templateType,

+ 39 - 11
src/components/icss/VersionInfo.vue

@@ -74,12 +74,13 @@
                     </template>
                 </el-table-column>
             </el-table>
-            <el-pagination v-if="total>pageSize"
-                           :current-page.sync="currentPage"
+            <el-pagination :current-page.sync="currentPage"
                            @current-change="currentChange"
                            background
                            :page-size="pageSize"
-                           layout="total,prev, pager, next, jumper"
+                           :page-sizes="pageSizeArr"
+                           @size-change="handleSizeChange"
+                           :layout="pageLayout"
                            :total="total">
             </el-pagination>
         </div>
@@ -89,6 +90,8 @@
 
 <script>
   import api from '@api/icss.js';
+  import config from '@api/config.js';
+  import utils from '@api/utils.js';
 
   export default {
     name: 'VersionInfo',
@@ -97,7 +100,9 @@
         list: [],
         cacheData: {},
         currentPage: 1,
-        pageSize: 10,
+        pageSize: config.pageSize,
+        pageSizeArr:config.pageSizeArr,
+        pageLayout:config.pageLayout,
         total: 0,
         searched: false,
         filter: {
@@ -110,9 +115,11 @@
       }
     },
     created() {
-      this.getDataList();
-      let typeList = JSON.parse(localStorage.getItem("knowledgeEnumsData"));
-      this.typeList = typeList.productTypeEnum;
+      this.$nextTick(()=>{
+        this.getDataList();
+        let typeList = JSON.parse(localStorage.getItem("knowledgeEnumsData"));
+        this.typeList = typeList.productTypeEnum;
+    })
     },
     watch: {
       'filter': {
@@ -126,9 +133,15 @@
       next(vm => {
         //const pm = to.param;
         Object.assign(vm, to.params);
+        vm.inCurrentPage=to.params.currentPage;
       })
     },
     methods: {
+      handleSizeChange(val){
+        this.pageSize = val;
+        this.currentPage = utils.getCurrentPage(this.currentPage, this.total, this.pageSize);
+        this.getDataList();
+      },
       getProdType(item){
         let name = "";
         let type = item.productType;
@@ -143,8 +156,10 @@
         // 添加版本信息
         const pam = this.searched ? {
           currentPage: this.currentPage,
+          pageSize:this.pageSize,
           filter: this.filter
-        } : {currentPage: this.currentPage};
+        } : {currentPage: this.currentPage,
+          pageSize:this.pageSize};
         this.$router.push({
           name:'AddVersion',
           params: pam
@@ -153,8 +168,10 @@
       toEditVersion(row,flag){
         const pam = this.searched ? {
           currentPage: this.currentPage,
+          pageSize:this.pageSize,
           filter: this.filter
-        } : {currentPage: this.currentPage};
+        } : {currentPage: this.currentPage,
+          pageSize:this.pageSize};
         this.$router.push({
           name:'AddVersion',
           params: Object.assign(pam, {info: row, copy: flag})
@@ -167,7 +184,14 @@
       getDataList(isTurnPage) {
         const param = this.getFilterItems(isTurnPage);
         this.searched = true;
+        const loading = this.$loading({
+            lock: true,
+            text: 'Loading',
+            spinner: 'el-icon-loading',
+            background: 'rgba(0, 0, 0, 0.7)'
+        });
         api.versionInfo(param).then((res) => {
+          loading.close()
           if (res.data.code == '0') {
             const data = res.data.data;
             this.list = data.records;
@@ -177,6 +201,10 @@
               this.canModiId = this.list[0].id;
             }
             this.flag = false;
+            if(this.inCurrentPage!==undefined){
+              this.currentPage=this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
           }
         }).catch((error) => {
           console.log(error);
@@ -194,8 +222,8 @@
           this.filter.type = null;
         };
         const param = {
-          name: this.filter.name,
-          current: this.currentPage,
+          name: this.filter.name.trim(),
+          current: this.inCurrentPage||this.currentPage,
           size: this.pageSize,
           productType:this.filter.type?this.filter.type:0
         };

+ 146 - 0
src/components/medicalStatistics/MedicalStatistics.vue

@@ -0,0 +1,146 @@
+<template>
+    <div>
+        <crumbs title="数据统计" style="min-width: 980px">
+        </crumbs>
+        <div class="contents">
+            <div class="contentBox">
+                <div class="headerBox">
+                    <span v-show="updateTime">当前数据更新时间:{{updateTime}}</span>
+                    <el-button
+                        class="btn"
+                        size="mini"
+                        type="warning"
+                        @click="updateData">
+                        更新数据
+                    </el-button>
+                </div>
+                
+                <el-table
+                :data="list"
+                :span-method="objectSpanMethod"
+                border
+                style="width: 100%">
+              
+                   
+                    <el-table-column
+                        :resizable = "false"
+                        prop="moduleName"
+                        width="180">
+                        
+                    </el-table-column>
+                    <el-table-column
+                        :resizable = "false"
+                        label="朗通医疗医学数据"
+                        prop="itemName"
+                        >
+                    </el-table-column>
+                
+                    <el-table-column
+                        :resizable = "false"
+                        prop="count"
+                        label="数量">
+                    </el-table-column>
+                </el-table>
+
+            </div>
+            
+        </div>
+    </div>
+</template>
+<script>
+import api from '@api/medicalStatistics.js';
+export default {
+    name: 'MedicalStatistics',
+    data() {
+        return {
+           list: [],
+           updateTime: undefined
+        }
+    },
+    created() {
+        this.getStatisticsCount()
+    },
+    methods: {
+        objectSpanMethod({ row, column, rowIndex, columnIndex }) {
+            if (columnIndex === 0) {
+                if (row.flag) {
+                    return {
+                    rowspan: row.rowspan,
+                    colspan: 1
+                    };
+                } else {
+                    return {
+                    rowspan: 0,
+                    colspan: 0
+                    };
+                }
+            }
+            
+        },
+        updateData() {
+            this.getStatisticsCount()
+        },
+        getStatisticsCount(){
+           
+            return api.statisticsCount().then((res)=>{
+                
+                if(+res.data.code === 0) {
+                    const data = res.data.data
+                     this.list = []
+                    for(let dataItem in data) {
+                        if(data[dataItem].items) {
+                            data[dataItem].items[0].flag = true
+                            data[dataItem].items[0].rowspan =   data[dataItem].items.length
+                            this.list = [...this.list, ...data[dataItem].items]
+                        }
+                        
+                    }
+                    this.updateTime = data.gmtOperate
+                } else {
+                    this.warning(res.data.msg)
+                }
+                })
+        },
+        warning(msg,type){
+            this.$message({
+                showClose: true,
+                message:msg,
+                type:type||'warning'
+            })
+        }
+    }
+}
+</script>
+<style scoped lang="less">
+/deep/.el-table_1_column_1_column_2.is-leaf{
+    display: none;
+}
+/deep/.el-table_1_column_1_column_3.is-leaf{
+    display: none;
+}
+/deep/.el-table {
+    min-width: 500px;
+}
+/deep/.el-table th {
+    background: rgba(239,243,249,1);
+}
+.contentBox {
+    background: #fff;
+    padding: 80px 70px 30px;
+    position: relative;
+}
+.headerBox {
+    position: absolute;
+    text-align: right;
+    height: 50px;
+    line-height: 50px;
+    top: 0;
+    right: 0;
+    width: 100%;
+}
+.btn {
+    margin: 0 50px;
+    height: 40px;
+}
+
+</style>

+ 433 - 0
src/components/medicalTerm/AddAssistCheckMultRelation.vue

@@ -0,0 +1,433 @@
+<template>
+  <div class="addMedicalMultRelationWrapper">
+    <crumbs :title="minTitle" :param="$route.params" linkTo="AssistCheckMultRelation"></crumbs>
+    <div class="contents">
+      <div class="content">
+        <div class="addBtn" v-if="list.length == 0">
+          <el-button
+            @click="addConcept"
+          >+ 新 增</el-button>
+        </div>
+
+        <div class="conceptSearch" ref="conceptSearch" v-show="showSearch">
+          <h4  class="conceptTitle">术语(概念ID)搜索</h4>
+          <img class="closeSearch" src="../../images/close-icon.png" @click="closeSearch" alt="">
+          <input v-model.trim="conceptText" type="text" ref="conceptInput" class="searchText" placeholder="请输入关键词搜索">
+          <!-- <span class="searchName" @click="searchConcept">搜索</span> -->
+          <ul class="conceptList" ref="conceptList">
+            <li 
+              v-for="item in conceptList" 
+              class="conceptItem ellipsis"
+              :title="item.conceptNameType"
+              @click="selectConcept(item)"
+              :key="item.conceptId">
+              {{item.conceptNameType}}
+            </li>
+          </ul>
+        </div>
+        <div class="tree">
+          <el-tree
+            :data="list"
+            :props="defaultProps"
+            node-key="conceptId"
+            draggable
+            :allow-drag="allowDrag"
+            :allow-drop="allowDrop"
+            :expand-on-click-node="true"
+            :default-expanded-keys="defaultExpandedArr"
+            @node-click = "handleNodeClick"
+          >
+            <span class="custom-tree-node" slot-scope="{ node, data }">
+                <span class="custom-tree-node-name ellipsis" :class="{colorGray: data.isDeletedConcept == 'Y'}" :title="node.label">{{ node.label }}</span>
+                <span class="btn-box">
+                  <el-button
+                      class="btn-add fl"
+                      v-if="data.level < 3"
+                      type="text"
+                      size="mini"
+                      @click="(e) => append(data, e)">
+                      + 增加
+                  </el-button>
+                  <el-button
+                      class="btn-del fr"
+                      v-if="!isEdit|| isEdit&&data.level != 0"
+                      type="text"
+                      size="mini"
+                      @click="() => remove(node, data)">
+                      删除
+                  </el-button>
+                </span>
+            </span>
+          </el-tree>
+        </div>
+        
+        <div class="btn">
+          <el-button
+            type="primary"
+            :disabled = 'saveDisable'
+            @click="confirm"
+          >确 定</el-button>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+<script type="text/javascript">
+import api from '@api/icss.js';
+import apis from '@api/medicalTerm.js';
+import config from '@api/config.js';
+  export default {
+    name:'AddAssistCheckMultRelation',
+    data(){
+      const data = [
+        // {
+        //   id: 1,
+        //   label: '一级 1',
+        //   children: [{
+        //     id: 4,
+        //     label: '二级 1-1',
+        //     children: [{
+        //       id: 9,
+        //       label: '三级 1-1-1'
+        //     }, {
+        //       id: 10,
+        //       label: '三级 1-1-2'
+        //     }]
+        //   }]
+        // }, 
+        // {
+        //   id: 2,
+        //   label: '一级 2',
+        //   children: [{
+        //     id: 5,
+        //     label: '二级 2-1'
+        //   }, {
+        //     id: 6,
+        //     label: '二级 2-2'
+        //   }]
+        // }, 
+        // {
+        //   id: 3,
+        //   label: '一级 3',
+        //   children: [{
+        //     id: 7,
+        //     label: '二级 3-1'
+        //   }, {
+        //     id: 8,
+        //     label: '二级 3-2'
+        //   }]
+        // }
+      ];
+
+      return{
+        minTitle:'辅检层级关联维护-添加',
+        list: JSON.parse(JSON.stringify(data)),
+        defaultProps: {
+          children: 'nodeList',
+          label: 'conceptNameType'
+        },
+        conceptText: '',
+        conceptList: [], //概念列表
+        addLevel: 0,  //添加级别
+        excludedConceptIds:[],
+        operaList: [],
+        isEdit: false,  //是否为修改
+        relationConceptId: '', //关联父类ID
+        level: 0, //层级(修改时只能显示三级)
+        saveDisable: false,  //保存按钮禁止点击
+        showSearch: false,
+        defaultExpandedArr: [],
+        timer: undefined
+      }
+    },
+    created(){
+      const { isEdit, data } = this.$route.params
+      if(isEdit) {
+          // console.log('dataa', data)
+          this.isEdit = isEdit
+          this.minTitle = '辅检层级关联维护-修改'
+          const item = JSON.parse(JSON.stringify(data))
+          item.level = 0
+          item.isExpanded = false
+          item.nodeList = this.IteraNodeList(item.nodeList, [], 1)
+          this.list[0] = item
+      }
+    },
+    watch:{
+      conceptText(nextVal, prevVal) {
+        if(!nextVal.trim()) {
+          this.conceptList = []
+        }
+        if(nextVal.trim() &&nextVal != prevVal) {
+          clearTimeout(this.timer)
+          let timer = setTimeout(()=>{
+                clearTimeout(this.timer);
+                this.searchConcept()
+            }, config.delayTime)
+            this.timer = timer
+
+          
+        }
+      }
+    },
+    methods:{
+       allowDrop(draggingNode, dropNode, type) {
+        if(draggingNode.parent.data.conceptName !== dropNode.parent.data.conceptName){
+          return false
+        }else{
+          return type !== 'inner'
+        }
+      },
+      allowDrag(draggingNode) {
+        return draggingNode.data.level != 0;//一级不可拖动
+      },
+      handleNodeClick(data) {
+          if(data.nodeList.length > 0) {
+            if(!data.isExpanded) {
+              this.defaultExpandedArr.push(data.conceptId)
+            } else {
+              this.defaultExpandedArr = this.defaultExpandedArr.filter(item => item !== data.conceptId)
+            }
+            this.$set(data, 'isExpanded', !data.isExpanded);
+          }
+      
+      },
+      addConcept(e) {
+        this.addLevel = 0;
+        this.openSearch(e);
+      },
+      confirm() { 
+        if(!this.list[0] || this.list[0].nodeList.length == 0) {
+          this.message('请输入数据信息');
+          return
+        }
+        const param = {
+          conceptId: this.list[0].conceptId,
+          sonRelationId: 17,
+          isOrderBy: 1
+        }
+        const nodeListResult = []
+        this.IteraNodeList(this.list[0].nodeList, nodeListResult, 0)
+        param.nodeList = nodeListResult
+        this.saveDisable = true  //提交保存按钮不可点击,返回结果时才可点击,防止频繁发送请求
+        apis.assistCheckAddMultRelation(param).then((res) => {
+          const { data } = res
+          if(data.code == '0') {
+            this.message(res.data.msg||'术语建立成功','success');
+            setTimeout(() => {
+              //返回带搜索条件的首页
+              this.$router.push({name:'AssistCheckMultRelation',params:Object.assign({},this.$route.params,{currentPage:1})});
+            }, 2000);
+          } else {
+            this.message(data.msg);
+          }
+          this.saveDisable = false;
+        })
+      },
+      IteraNodeList(nodeList,  nodeListResult, type, level = 1) {
+        this.level= level + 1
+        for(let i = 0; i <nodeList.length; i++) {
+          let newChild;
+          if(type == '0') { //添加的时候保存所有的id列表
+            newChild = {conceptId: nodeList[i].conceptId, relationId: 17,nodeList:[],sonRelationId: 17,isExpanded:false}
+          } else if(type == '1') {  //修改的时候添加层级
+            const item = JSON.parse(JSON.stringify(nodeList[i]))
+            newChild = Object.assign(item, {level:  level, nodeList: [],sonRelationId: 17,isExpanded:false})
+          } else if(type == '2') { //移除节点的时候同时移除节点(搜索时排除的id列表)
+            newChild = nodeList[i].conceptId
+          }
+          
+          if(nodeList[i].nodeList &&nodeList[i].nodeList.length > 0&&level < 3) {
+            if(type == '0' || type =='1') {
+              this.IteraNodeList(nodeList[i].nodeList,  newChild.nodeList, type, level+1)
+            } else if(type == '2') {
+              this.IteraNodeList(nodeList[i].nodeList,  nodeListResult, type, level+1)
+            }
+            
+          }
+          nodeListResult.push(newChild)
+        }
+        return nodeListResult
+      },
+      searchConcept() {
+        if(!this.conceptText.trim()) {
+          return
+        }
+        let  excludedConceptIds = [];
+        if(this.list[0]) {
+          excludedConceptIds.push(this.list[0].conceptId)
+          this.excludedConceptIds = this.IteraNodeList(this.list[0].nodeList,excludedConceptIds, 2)
+        }
+        const param = {
+          "name": this.conceptText,
+          "excludedConceptIds": this.excludedConceptIds,
+          "relationId": 17,
+          "relationPosition": 1,
+          "typeId": this.addLevel === 0 ? 71 : 16
+        }
+        if(this.addLevel === 0) {
+          param.relationTypeId = 16
+        } 
+        if(this.addLevel > 0) {
+          param.relationPosition = 0
+          param.relationTypeIdSupplement = [16,71]
+        }
+        
+        api.getConceptInfoAssay(param).then((res) => {
+          const { data } = res
+          if(data.code == '0') {
+            if(this.conceptText.trim()) {
+              this.conceptList = data.data
+            }
+          }
+        })
+      },
+      selectConcept(item) {
+        if(this.addLevel == 0) {
+          this.list.push(Object.assign({}, item,  {nodeList: [], level: 0, conceptId: item.conceptId, conceptNameType: item.conceptNameType, sonRelationId: 17}))
+          this.list = JSON.parse(JSON.stringify(this.list))
+        }else {
+          const data = this.operaList
+          const newChild = Object.assign({}, item,  {nodeList: [], level: data.level+1, conceptId: item.conceptId, conceptNameType: item.conceptNameType, relationId: 17,sonRelationId: 17});
+          // const newChild = { id: id++, label: 'nodeList', level: data.level+1, children: [] };
+          if (!data.nodeList) {
+          this.$set(data, 'nodeList', []);
+          }
+          data.nodeList.push(newChild);
+        }
+        this.conceptList = [];
+        this.closeSearch();
+      },
+      openSearch(e) {
+        this.showSearch = true
+        this.$refs['conceptSearch'].style.top=  e.pageY - 120 + 'px';
+        this.$refs['conceptInput'].focus();
+      },
+      closeSearch() {
+        this.conceptText = ''
+        this.showSearch = false
+      },
+      append(data, e) {
+          e.stopPropagation()
+          if(!data.isExpanded) {
+            data.isExpanded = true
+            this.defaultExpandedArr.push(data.conceptId)
+          }
+          this.addLevel = data.level+1;
+          this.relationConceptId = data.conceptId
+          this.operaList = data;
+          this.openSearch(e);
+
+          // const newChild = { id: id++, label: 'testtest', level: data.level+1, nodeList: [] };
+          // if (!data.nodeList) {
+          // this.$set(data, 'nodeList', []);
+          // }
+          // data.nodeList.push(newChild);
+      },
+
+      remove(node, data) {
+          const parent = node.parent;
+          const nodeList = parent.data.nodeList || parent.data;
+          const index = nodeList.findIndex(d => d.conceptId === data.conceptId);
+          nodeList.splice(index, 1);
+      },
+      message(msg,type){
+        this.$message({
+          showClose: true,
+          message:msg,
+          type:type||'warning'
+        })
+      },
+      
+    }
+  }
+</script>
+<style lang="less" scoped>
+@import "../../less/admin.less";
+.addMedicalMultRelationWrapper {
+  height: calc(100% - 70px);
+}
+.tree {
+  margin-bottom: 230px;
+}
+.contents {
+  height: 100%;
+}
+.btn-box {
+  position: absolute;
+  left: 350px;
+}
+.btn-del {
+  color: #8F8F8F;
+}
+.addBtn {
+  width: 66px;
+  order: 1px solid #21CBC7;
+  border-radius: 2px;
+}
+.conceptSearch {
+  position: absolute;
+  left: 560px;
+  width: 301px;
+  height: 300px;
+  background: #fff;
+  border: 1px solid #ccc;
+  text-align: center;
+  z-index: 2;
+}
+.conceptTitle {
+  width: 100%;
+  text-align: center;
+  padding: 20px 0;
+}
+.searchText {
+  padding: 0 15px;
+  width: 191px;
+  height: 34px;
+}
+.conceptList {
+  width: 221px;
+  height: 170px;
+  margin: -2px auto 0;
+  border: 2px solid #E1DFDF;
+  overflow: hidden;
+  overflow-y: auto;
+}
+.conceptItem {
+  height: 34px;
+  line-height: 34px;
+  text-align: left;
+  padding: 0 15px;
+  cursor: pointer;
+}
+.conceptItem:hover {
+  background: #f5f7fa;
+}
+.closeSearch {
+  position: absolute;
+  width: 30px;
+  right: 0;
+  top: 0;
+}
+.delete {
+  cursor: pointer;
+}
+.content{
+  background: #fff;
+  padding: 20px 20px 30px;
+  color: #545455;
+ 
+}
+
+.btn {
+  text-align: right;
+  margin-top: 20px;
+}
+.custom-tree-node-name {
+  display: inline-block;
+  width: 270px;
+}
+.colorGray {
+  color: #c1c1c1;
+} 
+</style>

+ 368 - 0
src/components/medicalTerm/AddAssistCheckSon.vue

@@ -0,0 +1,368 @@
+<template>
+    <div class="assayBox" @click="close">
+        <crumbs
+          :title="'辅检子项维护-'+titleText"
+          class="topBack"
+          :param="$route.params"
+          linkTo="AssistCheckSon"
+        ></crumbs>
+        <el-form :model="form" ref="ruleForm"  class="addDepartForm">
+            <p class="assayTitle">添加辅检标准术语</p>
+            <el-form-item  class="addDepartFormItem"  v-if="!isEdit" label="添加:" prop="department">
+                <input class="searchInput"  @focus="focuInput" type="text" v-model.trim = "searchConcept"> 
+                <span class="searchName" @click="searchDiag">搜索</span>
+                <ul class="itemList" v-show="conceptList.length>0">
+                    <li 
+                    v-for="item in conceptList" 
+                    class="diagItem ellipsis"
+                    :title="item.conceptName"
+                    @click="selectDiag(item)"
+                    :key="item.conceptId">
+                    {{item.conceptNameType||item.conceptName}}
+                    </li>
+                </ul>
+            </el-form-item>
+             <el-form-item class="isRequired" label="已选择辅检标准术语:" prop="type">
+                {{form.conceptNameType||form.conceptName}}
+            </el-form-item>
+        </el-form>
+        <div class="symptomList">
+            <div class="screenIndex clearfix">
+                    <p class="assayTitle">辅检子项添加</p>
+                    <label class="screenIndexLabel">添加:</label>
+                    <input class="searchInput"  @focus="focuInput" type="text" v-model.trim = "searchIndexVal"> 
+                    <span class="searchName" @click="searchIndex">搜索</span>
+                    <ul class="itemList indexList" v-show="indexList.length>0">
+                        <li 
+                        v-for="item in indexList" 
+                        class="diagItem ellipsis"
+                        :title="item.conceptName"
+                        @click="selectIndex(item)"
+                        :key="item.conceptName">
+                        {{item.conceptNameType||item.conceptName}}
+                        </li>
+                    </ul>
+            </div>
+            <table class="indexTab">
+                
+                <tr>
+                    <td class="selectedContent">已选择内容</td>
+                    <td class="selectedContentOpera">操作</td>
+                </tr>
+                <tr v-for="(item, index) in selectedIndexList" :key="item.conceptId"> 
+                    <!-- <td class="selectedContent ">{{item.parentConceptName?item.conceptName+'('+item.parentConceptName+')':item.conceptName}}</td> -->
+                    <td class="selectedContent ">{{item.conceptNameType||item.conceptName}}</td>
+                    <td class="selectedContentOpera"><el-button type="text" size="small" class="delete" @click="delSelectedIndex(item, index)">删除</el-button></td>
+                </tr>
+            </table>
+        </div>
+        <div class="btn">
+            <el-button
+            type="primary"
+            :disabled = 'saveDisable'
+            @click="submitForm('ruleForm')"
+            >确 定</el-button>
+        </div>
+    </div>
+    
+</template>
+
+<script>
+  import api from '@api/icss.js';
+  import apis from '@api/medicalTerm.js';
+  export default {
+    name: 'AddAssistCheckSon',
+    data() {
+      return{   
+        form: {
+            conceptId: '', 
+            conceptName:'' ,
+            conceptNameType:''
+        },
+        titleText: '添加辅检子项',
+        conceptList: [],
+        indexList: [],
+        selectedIndexList: [],  //选择的同义词
+        searchConcept: '',
+        searchIndexVal: '',
+        isEdit: false,
+        nodeList:[], //辅检子项列表
+        saveDisable: false 
+      }
+    },
+    created(){
+        const { isEdit, data } = this.$route.params;
+        if(isEdit) {
+          this.isEdit = isEdit;
+          this.titleText = '修改辅检子项';
+          this.form.conceptId = data.conceptId;
+          this.form.conceptName = data.conceptName;
+          this.form.conceptNameType = data.conceptNameType;
+          this.selectedIndexList = data.nodeList;
+        }
+    },
+    methods: {
+        close() {
+            this.conceptList = [];
+            this.indexList = [];
+        },
+        back(){
+            this.$router.go(-1);
+        },
+        searchDiag() {
+            const param = {
+              "name": this.searchConcept,
+              "relationId": 18,
+              "relationPosition": 0,
+              "relationTypeId": 16,
+              "typeId": 16
+            }
+            api.getConceptInfoAssay(param).then((res)=>{
+               if(res.data.code === '0') {
+                   this.conceptList = res.data.data
+                }
+            })
+        },
+        selectDiag(item) {
+            this.form.conceptId = item.conceptId;
+            this.form.conceptName = item.conceptName;
+            this.form.conceptNameType = item.conceptNameType;
+            this.searchConcept = '';
+            this.conceptList=[];
+        },
+        focuInput() {
+            // 聚焦时清空搜索结果?   
+        },
+        selectedTags() {//已选项ids
+          let selectedTags = []
+          for (let i =0; i < this.selectedIndexList.length; i++) {
+            selectedTags.push(this.selectedIndexList[i].conceptId)
+          }
+          return selectedTags
+        },
+        searchIndex() {
+           const notIds =[this.form.conceptId ,...this.selectedTags()];
+           const param = {
+            "name": this.searchIndexVal,
+            "relationId": 18,
+            "relationPosition": 0,
+            "typeId": 16,
+            // "relationConceptId":this.form.conceptId,
+            "excludedConceptIds":notIds
+          }
+          
+          api.getConceptInfoAssay(param).then((res)=>{
+             if(res.data.code === '0') {
+                 this.indexList = res.data.data;
+              }
+          })
+        },
+        selectIndex(item) {
+          this.selectedIndexList.push(item);
+          this.indexList = [];
+        },
+        delSelectedIndex(selectedItem, index) {
+            this.selectedIndexList.splice(index, 1)
+            this.nodeList.splice(index, 1)
+        },
+        submitForm(formName) {
+            if(!this.form.conceptId) {
+                this.warning('请选择辅检标准术语')
+                return
+            }
+            if(this.selectedIndexList.length === 0) {
+                this.warning('请添加辅检子项')
+                return
+            }
+            this.showDelDialog();
+        },
+        showDelDialog() {
+          const selected = this.selectedIndexList;
+          for (let i = 0; i < selected.length; i++) {
+            let item = {};
+            item.conceptId = selected[i].conceptId;
+            item.relationId = 18;
+            this.nodeList.push(item);
+          }
+          const param ={
+            "conceptId": this.form.conceptId,
+            "nodeList": this.nodeList,
+            "sonRelationId": 18
+          }
+          this.showConfirmDialog('是否建立该关联?', () => {
+              this.saveDisable = true  //提交保存按钮不可点击,返回结果时才可点击,防止频繁发送请求
+              apis.assistCheckPacsAddPacsRelation(param).then((res) => {
+              if (res.data.code  === '0') {
+                  this.warning(res.data.msg || '关联成功', 'success','1000')
+                  setTimeout(() => {
+                    //返回带搜索条件的首页
+                  this.$router.push({
+                      name:'AssistCheckSon',
+                    params: Object.assign({}, this.$route.params, {currentPage: 1})
+                  })
+                  }, 1000);
+              } else {
+                  this.warning(res.data.msg)
+              }
+              this.saveDisable = false
+              }).catch((err) => {
+                  this.warning(err);
+              })
+          });
+        },
+        showConfirmDialog(msg, resolve) {
+            this.$alert(msg, '提示', {
+                confirmButtonText: '确定',
+                type: 'warning'
+            }).then(() => {
+                resolve();
+            }).catch(() => {});
+        },
+        warning(msg, type,time) {
+            this.$message({
+                showClose: true,
+                message: msg,
+                type: type || 'warning',
+                duration:time || '3000'
+            })
+        },
+    }
+  }
+</script>
+
+<style lang="less">
+    @import '../../less/common.less';
+    .assayBox {
+        color: #606266;
+        min-width: 980px;
+        .topBack {
+            top: 0;
+        }
+        .assayTitle{
+            font-weight: bold;
+            margin-bottom: 20px;
+        }
+        .groupTitle {
+            background-color: #fff;
+            height: 40px;
+            line-height: 40px;
+            padding-left: 20px;
+        }
+        
+        .searchInput, .searchName {
+            display: inline-block;
+            height: 32px;
+            line-height: 32px;
+            border: 1px solid #a9a9a9;
+            margin: 0px 0 0 0;
+            padding: 0 5px;
+            float: left;
+            margin-top: 4px;
+        }
+        .isRequired .el-form-item__label::before {
+            content: '*';
+            color: red;
+        }
+        .searchName {
+            border-left: none;
+            cursor: pointer;
+            font-size: 16px;
+            padding: 0 14px;
+        }
+        .itemList {
+            position: absolute;
+            // display: none;
+            background: #fff;
+            width: 162px;
+            max-height: 150px;
+            border: 1px solid #a9a9a9;
+            left: 54px;
+            top: 37px;
+            z-index: 2;
+            overflow-y: auto;
+        }
+        .diagItem {
+            padding: 0 5px;
+            height: 30px;
+            line-height: 30px;
+            font-size: 14px;
+            cursor: pointer;
+        }
+        .diagItem:hover {
+            background: #f5f7fa;
+        }
+        .addDepartForm {
+            position: relative;
+            background-color: #fff;
+            padding: 20px;
+            margin: 70px 20px 0px 20px;
+            border-bottom: 1px solid #c0c4cc;
+        }
+        .addDepartFormItem {
+            position: relative;
+        }
+        .symptomList {
+            background-color: #fff;
+             padding: 20px;
+             margin: 0px 20px 0px 20px;
+             min-height: 400px;
+        }
+        .screenIndexLabel {
+            float: left;
+            height: 40px;
+            line-height: 40px;
+            font-size: 14px;
+        }
+        .indexTab {
+            // width: 100%;
+            width: 600px;
+            border-collapse: collapse;
+            tr {
+                td {
+                    padding: 5px 10px;
+                    border-bottom: 1px solid #a9a9a9;
+                    text-align: center;
+                }
+            }
+            .selectedContent {
+                width: 25%;
+            }
+            .selectedContentGrop {
+                width: 55%;
+            }
+            .selectedContentOpera {
+                width: 20%;
+            }
+        }
+        .screenIndex {
+            width: 100%;
+            margin-bottom: 30px;
+            position: relative;
+        }
+        .indexList {
+            left: 42px;
+            top: 78px;
+        }
+        .groupInput {
+            text-align: center;
+            height: 28px;
+            color: #606266;
+            width: 60%;
+        }
+        .btn {
+            position: relative;
+            background-color: #fff;
+            margin: 0px 20px;
+            height: 40px;
+            padding: 20px;
+            .el-button {
+                position: absolute;
+                right: 20px;
+            }
+        }
+        .selectDepart {
+            
+        }
+    }
+    
+</style>

+ 275 - 0
src/components/medicalTerm/AssistCheckMultRelation.vue

@@ -0,0 +1,275 @@
+<template>
+    <div>
+        <crumbs title="辅检层级关联维护" minWidth="995px">
+            <el-form :inline="true" class="demo-form-inline">
+                <el-form-item label="医学标准术语:">
+                    <el-input size="mini" v-model.trim="filter.term" placeholder="输入术语"></el-input>
+                </el-form-item>
+                <el-form-item>
+                    <el-button size="mini" @click="filterDatas">确认</el-button>
+                    <el-button size="mini" type="warning" style="margin:0 10px"  @click="addMedicalMultR">添加</el-button>
+                </el-form-item>
+            </el-form>
+        </crumbs>
+        <div class="contents">
+            <el-table :data="list"
+                      border
+                      style="width: 100%">
+                <el-table-column
+                        type="index"
+                        :index="indexMethod"
+                        label="编号"
+                        width="60">
+                </el-table-column>
+                <el-table-column
+                        prop="operTime"
+                        label="操作时间"
+                        :show-overflow-tooltip="true">
+                </el-table-column>
+                <el-table-column
+                        prop="libNameType"
+                        label="医学标准术语"
+                        show-overflow-tooltip>
+                </el-table-column>
+                <el-table-column
+                        prop="otherNames"
+                        label="一级关联标准术语"
+                        show-overflow-tooltip>
+                </el-table-column>
+                <!-- <el-table-column
+                        label="状态">
+                        <template slot-scope="scope">
+                          <span :class="scope.row.isDeleted == 'N'?'':'delete'">
+                            {{scope.row.isDeleted == 'N'?'启用中':'已删除'}}
+                          </span>
+                        </template>
+                </el-table-column> -->
+                <el-table-column
+                        prop="operName"
+                        label="操作人">
+                </el-table-column>
+                
+                <el-table-column
+                        label="操作" width="160">
+                    <template slot-scope="scope">
+                        <el-button type="text" size="small" @click="toEditProduct(scope.row)">修改</el-button>
+                        <span style="margin:0 3px;">|</span>
+                        <el-button type="text" size="small" :class="scope.row.isDeleted == 'N'?'delete':'review'" @click="showDelDialog(scope.row)">{{scope.row.isDeleted == 'N'?'删除':'恢复'}}</el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+            <el-pagination v-if="total>pageSize"
+                           :current-page.sync="currentPage"
+                           @current-change="currentChange"
+                           background
+                           :page-size="pageSize"
+                           layout="total,prev, pager, next, jumper"
+                           :total="total">
+            </el-pagination>
+        </div>
+
+    </div>
+</template>
+
+<script>
+  import api from '@api/medicalTerm.js';
+  export default {
+    name: 'AssistCheckMultRelation',
+    data: function () {
+      return {
+        list: [],
+        stateSelect:[
+          {id:'N',name:'启用中'},
+          {id:'Y',name:'已删除'},
+        ],
+        isState:'',
+        cacheData: {},
+        currentPage: 1,
+        pageSize: 10,
+        total: 0,
+        searched: false,
+        filter: {
+          term:'',
+        },
+      }
+    },
+    created() {
+      const that = this;
+      //返回时避免参数未赋值就获取列表
+      setTimeout(function(){
+        that.getDataList();
+      });
+    },
+    watch: {
+      'filter': {
+        handler: function () {
+          this.searched = false;
+        },
+        deep: true
+      }
+    },
+    beforeRouteEnter(to, from, next){
+      next(vm => {
+        //const pm = to.param;
+        Object.assign(vm,to.params);
+        vm.inCurrentPage=to.params.currentPage;
+      })
+    },
+    methods: {
+      addMedicalMultR(){
+        const pam = this.searched ? {
+          currentPage: this.currentPage,
+          filter: this.filter
+        } : {currentPage: this.currentPage};
+        this.$router.push({name:'AddAssistCheckMultRelation',
+          params:pam});
+      },
+      toEditProduct(row){
+        const param = {
+          conceptId: row.conceptId,
+          relationIds: [17,17,17],
+          typeIds: [16,16,16]
+        };
+        const pam = this.searched ? {
+          currentPage: this.currentPage,
+          filter: this.filter
+        } : {currentPage: this.currentPage};
+        api.assistCheckMultRelationDetail(param).then((res) => {
+          const {code,data,msg} = res.data;
+          if(code=='0'){
+              const item = Object.assign({},row,data);
+              this.$router.push({name:'AddAssistCheckMultRelation',params:Object.assign(pam, {isEdit: true, data: item})});
+          }else{
+              this.$message({
+              message: msg,
+              type: 'warning'
+              });
+          }
+        })
+      },
+      filterDatas(){
+        this.currentPage = 1;
+        this.getDataList();
+      },
+      getDataList(isTurnPage) {
+        const param = this.getFilterItems(isTurnPage);
+        this.searched = true;
+        const loading = this.$loading({
+            lock: true,
+            text: 'Loading',
+            spinner: 'el-icon-loading',
+            background: 'rgba(0, 0, 0, 0.7)'
+        }); 
+        api.assistCheckMultContactList(param).then((res) => {
+          loading.close()
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.list = data.records;
+            this.cacheData[param.current] = data.records;
+            this.total = data.total;
+            if(this.inCurrentPage!==undefined){
+              this.currentPage=this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          }
+        }).catch((error) => {
+          console.log(error);
+        });
+      },
+      getFilterItems(isTurnPage) {
+        //翻页时筛选条件没点确定则清空
+        if(isTurnPage&&!this.searched){
+          this.clearFilter();
+        };
+        const param = {
+          name: this.filter.term,
+          current: this.inCurrentPage||this.currentPage,
+          size: this.pageSize,
+          relationId: 17,
+          startTypeIds: [71],
+          isOnlyHasRoot: 0
+        };
+        return param;
+      },
+      indexMethod(index) {
+        return ((this.currentPage - 1) * this.pageSize) + index + 1;
+      },
+      currentChange(next) {
+        this.currentPage = next;
+        if (this.cacheData[next]) {       //如果已请求过该页数据,则使用缓存不重复请求
+          this.list = this.cacheData[next];
+        } else {
+          this.getDataList(true);
+        }
+      },
+      warning(msg,type){
+        this.$message({
+          showClose: true,
+          message:msg,
+          type:type||'warning'
+        })
+      },
+      showConfirmDialog(msg,resolve){
+        this.$alert(msg, '提示', {
+          confirmButtonText: '确定',
+          type: 'warning'
+        }).then(() => {
+          resolve();
+        }).catch(() => {});
+      },
+      showDelDialog(item){
+        /*const param = {
+          term:item.term,
+          type:item.type,
+          id:item.id
+        }*/
+        const param = {
+          conceptId:item.conceptId,
+          // isDeleted:item.isDeleted === 'N'?'Y':'N',
+          relationIds: [17,17,17],
+          typeIds: [16,16,16]
+        }
+        let waringTxt = '是否删除该关系,可能对现有系统造成影响'
+        this.showConfirmDialog(waringTxt,()=>{
+          api.assistCheckRemoveMultRelation(param).then((res)=>{
+            if(res.data.code=='0'){
+              if(!this.searched){
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if(this.list.length==1){
+                //当前在最后一页且只有一条数据时,删除后跳到前一页
+                this.currentPage = this.currentPage===1?1:this.currentPage-1;
+              }
+              this.warning(res.data.msg||'操作成功','success');
+              this.getDataList();
+            }else{
+              this.warning(res.data.msg);
+            }
+          }).catch((error)=>{
+            this.warning(error);
+          })
+        });
+      },
+      clearFilter(){
+        this.filter={
+          term:'',
+        };
+      },
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+    @import "../../less/admin.less";
+    .delete{
+        color: red;
+    }
+    .review{
+      color: #22ccc8;
+    }
+    .el-table .cell{
+      overflow: hidden;
+      white-space: nowrap;
+    }
+</style>

+ 273 - 0
src/components/medicalTerm/AssistCheckSon.vue

@@ -0,0 +1,273 @@
+<template>
+    <div>
+        <crumbs title="辅检子项维护" style="min-width: 980px">
+            <el-form :inline="true" class="demo-form-inline">
+                <el-form-item label="标准术语:">
+                    <el-input size="mini" v-model.trim="filter.conceptName" placeholder="术语名称" clearable></el-input>
+                </el-form-item>
+                <el-form-item>
+                    <el-button size="mini" @click="filterDatas">确认</el-button>
+                    <el-button size="mini" type="warning" @click="addRelation">添加辅检子项</el-button>
+                </el-form-item>
+            </el-form>
+        </crumbs>
+        <div class="contents">
+            <el-table
+                :data="list"
+                border
+                style="width: 100%">
+                <el-table-column
+                    :resizable = "false"
+                    type="index"
+                    :index = 'indexMethod'
+                    label="编号"
+                    width="60">
+                </el-table-column>
+                <el-table-column
+                    :resizable = "false"
+                    prop="operTime"
+                    label="操作时间"
+                    width="180">
+                </el-table-column>
+                <el-table-column
+                    :resizable = "false"
+                    prop="libName"
+                    label="标准术语"
+                    show-overflow-tooltip>
+                </el-table-column>
+                <el-table-column
+                    :resizable = "false"
+                    prop="otherNames"
+                    label="子项"
+                    show-overflow-tooltip>
+                </el-table-column>
+                <el-table-column
+                    label="状态"
+                    show-overflow-tooltip>
+                    <template slot-scope="scope">
+                      <span :class="scope.row.isDeleted == 'N'?'':'delete'">
+                        {{scope.row.isDeleted == 'N'?'启用中':'已删除'}}
+                      </span>
+                    </template>
+                </el-table-column>
+                <el-table-column
+                    :resizable = "false"
+                    prop="operName"
+                    label="操作人">
+                </el-table-column>
+                <el-table-column
+                    :resizable = "false"
+                    prop="operate"
+                    label="操作">
+                    <template slot-scope="scope">
+                        <el-button  @click="modifyRelation(scope.row)" type="text" size="small" :disabled="scope.row.isDeleted != 'N'">修改</el-button>
+                        <span style="margin:0 3px;">|</span>
+                        <el-button @click="showDelDialog(scope.row)" :class="scope.row.isDeleted == 'N'?'delete':'review'" type="text" size="small">{{scope.row.isDeleted == 'N'?'删除':'恢复'}}</el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+        <div class="pagination">
+            <el-pagination :current-page.sync="currentPage"
+                       @current-change="currentChange"
+                       background
+                       :page-size="pageSize"
+                       :page-sizes="pageSizeArr"
+                       @size-change="handleSizeChange"
+                       :layout="pageLayout"
+                       :total="total">
+            </el-pagination>
+        </div>       
+        </div>      
+    </div>
+</template>
+
+<script>
+  import api from '@api/medicalTerm.js';
+  import config from '@api/config.js';
+  import utils from '@api/utils.js';
+
+  export default {
+    name: 'AssistCheckSon',   //慢病指标值关联维护
+    data: function() {
+        return {
+            list: [],
+            searched: false,
+            filter:{
+              conceptName:'',
+            },
+            currentPage: 1,
+          pageSize: config.pageSize,
+          pageSizeArr:config.pageSizeArr,
+          pageLayout:config.pageLayout,
+            total: 0,
+        }
+    },
+    created() {
+      const that = this;
+      //返回时避免参数未赋值就获取列表
+      setTimeout(function(){
+        that.getDataList();
+      });
+    },
+  watch: {
+    'filter': {
+      handler: function () {
+        this.searched = false;
+      },
+      deep: true
+    }
+  },
+  beforeRouteEnter(to, from, next) {
+    next(vm => {
+      //const pm = to.param;
+      Object.assign(vm, to.params);
+      vm.inCurrentPage=to.params.currentPage;
+    })
+  },
+    methods: {
+      handleSizeChange(val){
+        this.pageSize = val;
+        this.currentPage = utils.getCurrentPage(this.currentPage, this.total, this.pageSize);
+        this.getDataList();
+      },
+        getDataList(isTurnPage) {
+            const param = this.getFilterItems(isTurnPage);
+            this.searched = true;
+            const loading = this.$loading({
+              lock: true,
+              text: 'Loading',
+              spinner: 'el-icon-loading',
+              background: 'rgba(0, 0, 0, 0.7)'
+            });
+            api.assistCheckPacsSonContactList(param).then((res) => {
+                loading.close()
+                if(res.data.code == '0') {
+                    this.list = res.data.data.records;
+                    this.total = res.data.data.total;
+                  if(this.inCurrentPage!==undefined){
+                    this.currentPage=this.inCurrentPage;
+                    this.inCurrentPage = undefined;
+                  }
+                }
+            })
+        },
+        filterDatas() {
+            this.currentPage = 1;
+            this.getDataList();
+        },
+        addRelation() {
+          const pam = this.searched ? {
+            currentPage: this.currentPage,
+            pageSize:this.pageSize,
+            filter: this.filter
+          } : {currentPage: this.currentPage,
+            pageSize:this.pageSize};
+            this.$router.push({name:'AddAssistCheckSon', params: pam})
+        },
+        modifyRelation(row) {
+            const param = {
+                conceptId: row.conceptId,
+                // relationId:18
+                relationIds:[18], //9-23后台修改
+                typeIds:[16]
+            }
+            api.assistCheckGetPacsContactDetail(param).then((res) => {
+                if(res.data.code == '0') {
+                  const pam = this.searched ? {
+                    currentPage: this.currentPage,
+                    pageSize:this.pageSize,
+                    filter: this.filter
+                  } : {currentPage: this.currentPage,
+                    pageSize:this.pageSize};
+                    // const item = Object.assign({},row,{data: res.data.data});
+                    const item = res.data.data;
+                    this.$router.push({name:'AddAssistCheckSon',params:Object.assign(pam, {isEdit:true,data:item})});
+                }
+            })
+        },
+        currentChange(next) {
+            this.currentPage = next;
+            this.getDataList(true);
+        },
+        getFilterItems(isTurnPage) {
+          //翻页时筛选条件没点确定则清空
+          if(isTurnPage&&!this.searched){
+            this.filter.conceptName='';
+          };
+            const param = {
+                current: this.inCurrentPage||this.currentPage,
+                size: this.pageSize,
+                name:this.filter.conceptName
+            };
+            return param;
+        },
+        indexMethod(index) {
+            return ((this.currentPage - 1) * this.pageSize) + index + 1;
+        },
+        getTagType(val) {
+            return val
+        },
+        warning(msg,type){
+          this.$message({
+            showClose: true,
+            message:msg,
+            type:type||'warning'
+          })
+        },
+        showConfirmDialog(msg,resolve){
+          this.$alert(msg, '提示', {
+            confirmButtonText: '确定',
+            type: 'warning'
+          }).then(() => {
+            resolve();
+          }).catch(() => {});
+        },
+        showDelDialog(row){
+          const param = {
+            "conceptId": row.conceptId,
+            "isDeleted": row.isDeleted=== 'N'?'Y':'N',
+            "relationId": 18
+          };
+          const txt = row.isDeleted=== 'N'?'是否删除该关联?':'是否重新启用该关联?';
+          this.showConfirmDialog(txt,()=>{
+            api.assistCheckRemoveRelationPacs(param).then((res)=>{
+              if(res.data.code=='0'){
+                if(!this.searched){
+                  //未点确认时清空搜索条件
+                  this.filter={
+                    conceptName:'',
+                  };
+                }
+                if(row.isDeleted !== 'N'){       //恢复成功后跳转到筛选条件的首页
+                  this.currentPage = 1;
+                }
+                this.getDataList();
+                this.warning(res.data.msg || '操作成功','success');
+              }else{
+                this.warning(res.data.msg);
+              }
+            }).catch((error)=>{
+              this.warning(error);
+            })
+          });
+        }
+    }
+}
+</script>
+
+
+<style lang="less">
+    @import "../../less/admin.less";
+    .delete{
+       color: red;
+    }
+    .delete:hover {
+        color: red;
+    } 
+    .review{
+      color: #22ccc8;
+    }
+    .pagination {
+        min-width: 1010px;
+    }
+</style>

+ 1 - 7
src/components/preTreat/AddSimpleQuestion.vue

@@ -66,13 +66,6 @@
     methods: {
       changeVal(val) {   //子组件数据改变传递到父组件
         this.dataPub = val;
-        //console.log('公用组件传的值都在这', val);
-      },
-      changeSex() {       //性别改变,清空填写单明细
-        this.changeType();
-      },
-      changeType() {      //填写单类型改变,标签明细左侧更新,右侧清空
-        this.options = [];
       },
       pushValues(its){
         this.options = its;
@@ -141,6 +134,7 @@
             "itemType" :this.dataPub.region12,           //是否为主要内容
             "url":this.dataPub.region13,                  //上传图片
             "specFlag": this.dataPub.specFlag,            //是否拼接到主诉
+            "flag": this.dataPub.flag,            //是否拼接到主诉
             "required": this.dataPub.required,             //必填
             "questionDetails": this.options,                //明细项
             //"questionMappings": [],      //映射关系,

+ 35 - 9
src/components/preTreat/CombinQuestion.vue

@@ -83,12 +83,13 @@
                     </template>
                 </el-table-column>
             </el-table>
-            <el-pagination v-if="total>pageSize"
-                           :current-page.sync="currentPage"
+            <el-pagination :current-page.sync="currentPage"
                            @current-change="currentChange"
                            background
                            :page-size="pageSize"
-                           layout="total,prev, pager, next, jumper"
+                           :page-sizes="pageSizeArr"
+                           @size-change="handleSizeChange"
+                           :layout="pageLayout"
                            :total="total">
             </el-pagination>
         </div>
@@ -97,6 +98,8 @@
 
 <script>
   import api from '@api/preTreat.js';
+  import config from '@api/config.js';
+  import utils from '@api/utils.js';
 
   export default {
     name: 'combinQuestion',
@@ -114,7 +117,9 @@
           name:'',          //界面名称
         },
         currentPage: 1,
-        pageSize: 10,
+        pageSize: config.pageSize,
+        pageSizeArr:config.pageSizeArr,
+        pageLayout:config.pageLayout,
         total: 0,
       }
     },
@@ -133,9 +138,15 @@
       next(vm => {
         //const pm = to.param;
         Object.assign(vm,to.params);
+        vm.inCurrentPage=to.params.currentPage;
       })
     },
     methods: {
+      handleSizeChange(val){
+        this.pageSize = val;
+        this.currentPage = utils.getCurrentPage(this.currentPage, this.total, this.pageSize);
+        this.getDataList();
+      },
       getDropList() {
         api.getPreTypeList().then((res) =>{
           this.getDataList();
@@ -151,7 +162,14 @@
       getDataList(isTurnPage) {
         const param = this.getFilterItems(isTurnPage);
         this.searched = true;
+        const loading = this.$loading({
+            lock: true,
+            text: 'Loading',
+            spinner: 'el-icon-loading',
+            background: 'rgba(0, 0, 0, 0.7)'
+        });
         api.getQuestionList(param).then((res) => {
+          loading.close()
           const list = [...res.data.data.records];
           for (var i = 0; i < list.length; i++) {
             for (var j =  0; j < this.tagTypes.length; j++) {
@@ -168,6 +186,10 @@
           }
           this.list = list;
           this.total = res.data.data.total;
+          if(this.inCurrentPage!==undefined){
+            this.currentPage=this.inCurrentPage;
+            this.inCurrentPage = undefined;
+          }
         })
       },
       filterDatas() {
@@ -176,7 +198,9 @@
       },
       addIndeptTag() {
         const pam = this.searched?{currentPage:this.currentPage,
-          filter:this.filter}:{currentPage:this.currentPage};
+          pageSize:this.pageSize,
+          filter:this.filter}:{currentPage:this.currentPage,
+          pageSize:this.pageSize};
         this.$router.push({name:'AddCombinQuestion',
           params:pam});
       },
@@ -186,7 +210,9 @@
           if(code=='0'){
             const infos = Object.assign({},row,data);
             const pam = this.searched?{currentPage:this.currentPage,
-              filter:this.filter}:{currentPage:this.currentPage};
+              pageSize:this.pageSize,
+              filter:this.filter}:{currentPage:this.currentPage,
+              pageSize:this.pageSize};
             this.$router.push({name:'AddCombinQuestion',params:Object.assign(pam,{[isCopy?'isCopy':'isEdit']:true,data:infos})});
           }else{
             this.$message({
@@ -207,12 +233,12 @@
         };
         let param = {
           tagTypeList: this.filter.tagType[0] ? this.filter.tagType: [4,6],
-          current: this.currentPage,
+          current: this.inCurrentPage||this.currentPage,
           callType:2,
           size: this.pageSize,
           type: this.filter.tagAdscription,
-          tagName: this.filter.tagSysName,
-          name:this.filter.name,          //界面名称
+          tagName: this.filter.tagSysName.trim(),
+          name:this.filter.name.trim(),          //界面名称
         };
         return param;
       },

+ 30 - 18
src/components/preTreat/PubIndeptQa.vue

@@ -35,7 +35,7 @@
                 <el-select
                         v-model="form.region2"
                         placeholder="请选择类型"
-                        :disabled="!!editData.id  || !form.region1"
+                        :disabled="(!!editData.id&&editData.controlType!='1'&&editData.controlType!='2')  || !form.region1"
                         @change="readyChangeSelect(2)"
                 >
                     <el-option
@@ -85,7 +85,7 @@
                             @click="pushSystemName(item.name)">{{item.name}}</li>
                     </ul>
                 </div>
-                <span class="changeTips changeTipsName">
+                <span class="changeTips changeTipsName" v-if="qaType !=='1'">
                     当为症状时,填写单系统名称需要与医学标准术语内容相对应,如果没有可以先在医学标准术语中建立相关信息!未建立相关信息可能会影响系统使用!
                 </span>
             </el-form-item>
@@ -94,24 +94,18 @@
                     prop="region4"
             >
                 <el-input
-                        :disabled="!form.region1"
+                        :disabled="!form.region1||(qaType==2&&form.region1==1)"
                         v-model="form.region4"
                         :placeholder="qaType==2?'请输入填写单医生界面展示标准内容':'请输入填写单界面描述名称'"
                         @change="sendData"
                 ></el-input>
             </el-form-item>
-          <el-form-item  v-if="qaType =='1'&& form.region1 == '1' && form.region2 != '4'">
-            <span
-                  v-if="qaType =='1' && form.region1 == '1'  && form.region2 != '4'"
-                >
-                   <el-checkbox v-model="form.required"  label="必填" true-label="1" false-label="0"  @change="sendData"></el-checkbox>
-                </span>
-                <span
-                 class = "flagBox"
-                  v-if="qaType =='1' &&form.region1=='1'&&form.region2=='9'"
-                >
-                   <el-checkbox v-model="form.specFlag" label="拼接到主诉" true-label="1" false-label="0"  @change="sendData"></el-checkbox>
-                </span>
+          <el-form-item class="flag-box"  v-if="qaType =='1'&& form.region1 == '1' && form.region2 != '4'">
+              <el-checkbox v-model="form.required"  label="必填" true-label="1" false-label="0"  @change="sendData"></el-checkbox>
+              <!--<el-checkbox v-if="form.region2=='9'" v-model="form.specFlag" label="拼接到主诉" true-label="1" false-label="0"  @change="sendData"></el-checkbox>-->
+              <el-checkbox v-if="form.region2=='1'||form.region2=='9'" :disabled="form.flag==='2'" v-model="form.flag" label="时间类型" true-label="1" false-label=""  @change="sendData"></el-checkbox>
+              <el-checkbox v-if="form.region2=='1'||form.region2=='2'" :disabled="form.flag==='1'" v-model="form.flag" label="诱因类型" true-label="2" false-label=""  @change="sendData"></el-checkbox>
+              <el-checkbox v-if="form.region2=='8'" v-model="form.flag" label="伴随类型" true-label="3" false-label=""  @change="sendData"></el-checkbox>
           </el-form-item>
             <el-form-item
                     v-if="qaType==2"
@@ -298,6 +292,7 @@
           region13:'',          //上传图片
           specFlag:'0',         //拼接到主诉
           required: '0',        //必填
+          flag:'',          //控件类型:时间类型1、诱因类型2、伴随类型3
         },
         //isNeedSearch: false, //是否需要查询(系统名称)
         imgList:[],
@@ -418,7 +413,15 @@
           if (res.data.code === '0') {
             this.Adscriptions = res.data.data[1];
             this.labelTypesList = this.qaType==1?res.data.data[2]:res.data.data[3];
-            this.labelTypes = this.labelTypesList;
+            const editData = this.$props.editData;
+            //编辑时,单选、多选可互相切换
+            if(editData.controlType=='1'||editData.controlType=='2'){
+              this.labelTypes = this.labelTypesList.filter((it)=>{
+                return it.val==='1'||it.val==='2';
+              })
+            }else{
+              this.labelTypes = this.labelTypesList;
+            }
           }
         })
       },
@@ -459,6 +462,7 @@
           this.labelTypes = this.labelTypesList.filter(item => maps[this.form.region1].includes(item.val));
         }
         //if(type === 2||type === 3) {
+        this.form.flag = '';
           this.sendData();
         //}
       },
@@ -498,6 +502,9 @@
       },
       pushSystemName(val) {
         this.form.region3 = val;
+        if(this.qaType==2&&this.form.region1==1){
+          this.form.region4 = val;
+        }
         this.systemNameShow = false;
         this.sendData();
       },
@@ -604,8 +611,13 @@
     .upload-hide .el-upload--picture{
         display: none;
     }
-    .flagBox {
-      margin-left: 20px;
+    .PubTagGroupWrapper .groups .flag-box {
+     .el-form-item__content{
+         width:100%;
+     }
+        label:not(:first-child){
+            margin-left: 20px;
+        }
     }
 </style>
 

+ 36 - 8
src/components/preTreat/PubSelect.vue

@@ -38,8 +38,12 @@
                     <el-tag v-if="it.exclusion" type="info" size="mini">互斥项</el-tag>
                 </el-col>
                 <el-button @click="addRow">+</el-button>
+                <div class="bottomPartMid bottomPartMidss">
+                    <p><span class="el-icon-arrow-up" @click="orderUpDown(-1)"></span></p>
+                    <p><span class="el-icon-arrow-down" @click="orderUpDown(1)"></span></p>
+                </div>
             </div>
-            <div class="main-area" v-if="type==3">
+            <div class="main-area sigle-row" v-if="type==3">
                 <el-col v-for="(it,i) in rows" :key="i">
                     <div class="inps">
                         <el-input v-model="rows[i].name"
@@ -52,6 +56,10 @@
                     <el-tag v-if="it.exclusion" type="info" size="mini">互斥项</el-tag>
                 </el-col>
                 <el-button @click="addRow" class="little">+</el-button>
+                <div class="bottomPartMid bottomPartMidss">
+                    <p><span class="el-icon-arrow-up" @click="orderUpDown(-1)"></span></p>
+                    <p><span class="el-icon-arrow-down" @click="orderUpDown(1)"></span></p>
+                </div>
             </div>
         </el-form>
     </div>
@@ -60,6 +68,11 @@
     @import "../../less/common.less";
     .main-area{
         position: relative;
+        .bottomPartMid{
+            position: absolute;
+            top:29px;
+            right: 0px;
+        }
     }
     .main-area .static-tip{
         border:1px solid #dcdfe6;
@@ -109,7 +122,15 @@
     .main-area{
         width: 80%;
         min-width: 400px;
-        margin:20px 150px;
+        margin:20px 150px 20px 140px;
+        &.sigle-row{
+             width: 60%;
+             margin:20px 150px 20px 30%;
+             .bottomPartMid{
+                 top: 0;
+                 right: 40%;
+             }
+         }
     .inps{
         display: inline-block;
         width: calc(100% - 60px);
@@ -184,15 +205,12 @@
       }
     },
     watch: {
-      /*ascription(newVal, preVal) {        //永远检测不到,因为归属修改时类型被清空,本组件被销毁
-        this.rows = [...utils.getInitRow(initRow,4)];
-      },*/
       focusOn(newVal){
         this.checkedExc = this.rows[newVal].exclusion===1;
       },
-      type() {
+      /*type() {
         this.initData();
-      },
+      },*/
       sexType() {
         this.initData();
       },
@@ -214,6 +232,16 @@
         }
         this.disableBtn = false;
       },
+      orderUpDown(i){
+        const item = this.rows[this.focusOn];       //要调整位置的行
+        const inx = this.focusOn;
+        if(inx===-1||(inx===0&&i===-1)||(inx===this.rows.length-1&&i===1)){
+          return ;
+        }
+        this.focusOn = inx+i;
+        this.rows.splice(inx,1);
+        this.rows.splice(inx+i,0,item);
+      },
       handlePlaceholder(type){          //占位符类型,type=0文本输入框,type=1数字输入框
         const i = this.focusOn;
         clearTimeout(this.msgTimer);
@@ -225,7 +253,7 @@
           });
           return ;
         }
-        const maps = {0:'${input_输入}',1:'${number_输入}'};
+        const maps = {0:'${input_其他(点击输入}',1:'${number_其他(点击输入}'};
         const key = this.focusName;
         this.noHolder = this.noHolder.replace(','+i,'');
         this.rows[i].name = this.rows[i].name+maps[type];

+ 34 - 8
src/components/preTreat/QuestionModules.vue

@@ -83,12 +83,13 @@
                     </template>
                 </el-table-column>
             </el-table>
-            <el-pagination v-if="total>pageSize"
-                           :current-page.sync="currentPage"
+            <el-pagination :current-page.sync="currentPage"
                            @current-change="currentChange"
                            background
                            :page-size="pageSize"
-                           layout="total,prev, pager, next, jumper"
+                           :page-sizes="pageSizeArr"
+                           @size-change="handleSizeChange"
+                           :layout="pageLayout"
                            :total="total">
             </el-pagination>
         </div>
@@ -97,6 +98,8 @@
 
 <script>
   import api from '@api/preTreat.js';
+  import config from '@api/config.js';
+  import utils from '@api/utils.js';
 
   export default {
     name: 'QuestionModules',
@@ -114,7 +117,9 @@
           relationId:'',  //归属科室
         },
         currentPage: 1,
-        pageSize: 10,
+        pageSize: config.pageSize,
+        pageSizeArr:config.pageSizeArr,
+        pageLayout:config.pageLayout,
         total: 0,
       }
     },
@@ -133,9 +138,15 @@
       next(vm => {
         //const pm = to.param;
         Object.assign(vm,to.params);
+        vm.inCurrentPage=to.params.currentPage;
       })
     },
     methods: {
+      handleSizeChange(val){
+        this.pageSize = val;
+        this.currentPage = utils.getCurrentPage(this.currentPage, this.total, this.pageSize);
+        this.getDataList();
+      },
       getDropList() {
         api.getPreTypeList().then((res) =>{
           this.getDataList();
@@ -163,7 +174,14 @@
       getDataList(isTurnPage) {
         const param = this.getFilterItems(isTurnPage);
         this.searched = true;
+        const loading = this.$loading({
+            lock: true,
+            text: 'Loading',
+            spinner: 'el-icon-loading',
+            background: 'rgba(0, 0, 0, 0.7)'
+        }); 
         api.getModuleList(param).then((res) => {
+           loading.close()
           if (res.data.code === '0') {
             const list = res.data.data&&res.data.data.records?[...res.data.data.records]:[];
             for (var i = 0; i < list.length; i++) {
@@ -181,6 +199,10 @@
             }
             this.list = list;
             this.total = res.data.data.total;
+            if(this.inCurrentPage!==undefined){
+              this.currentPage=this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
           }else{
             this.$message({
               message: res.data.msg,
@@ -196,7 +218,9 @@
       },
       addModule() {
         const pam = this.searched?{currentPage:this.currentPage,
-          filter:this.filter}:{currentPage:this.currentPage};
+          pageSize:this.pageSize,
+          filter:this.filter}:{currentPage:this.currentPage,
+          pageSize:this.pageSize};
         this.$router.push({name:'AddQuestionModules',
           params:pam});
       },
@@ -206,7 +230,9 @@
           if(code=='0'){
             const item = Object.assign({},row,data);
             const pam = this.searched?{currentPage:this.currentPage,
-              filter:this.filter}:{currentPage:this.currentPage};
+              pageSize:this.pageSize,
+              filter:this.filter}:{currentPage:this.currentPage,
+              pageSize:this.pageSize};
             this.$router.push({name:'AddQuestionModules',params:Object.assign(pam,{isEdit:true,data:item})});
           }else{
             this.$message({
@@ -231,11 +257,11 @@
           }
         };
         const param = {
-          name: this.filter.name,
+          name: this.filter.name.trim(),
           type:this.filter.type,
           moduleType: this.filter.moduleType,
           relationId: this.filter.moduleType==1?this.filter.relationId:'',
-          current: this.currentPage,
+          current: this.inCurrentPage||this.currentPage,
           size: this.pageSize,
         };
         return param;

+ 5 - 5
src/components/preTreat/QuestionTagGroup.vue

@@ -21,13 +21,13 @@
             <li v-for="(item, index) in leftTagsList"
                 class = "tagItem"
                 :key='item.id'
-                :title="'[ '+item.tagName+' ]('+sex[item.sexType]+(item.required?'、必':'')+(item.specFlag?'、跟主':'')+')'"
+                :title="'[ '+item.tagName+' ]('+sex[item.sexType]+(item.required?'、必':'')+')'"
                 :style="getStyle(item)?styles:null"
                 @click='selectLeftTag(item, index, $event)'
             >
                 <p class="ellipsis" >
                     <span class="tagName">{{item.tagName}}</span>
-                    <span>({{sex[item.sexType]}}{{item.required?'、必':''}}{{item.specFlag?'、跟主':''}})</span>
+                    <span>({{sex[item.sexType]}}{{item.required?'、必':''}}{{item.flag==1?'、时间':''}}{{item.flag==2?'、诱因':''}}{{item.flag==3?'、伴随':''}})</span>
                 </p>
             </li>
         </ul>
@@ -46,9 +46,9 @@
                 :style="getStyle2(item)?styles:null"
                 @click='selectRightTag(item)'
             >
-                <p class="ellipsis" :title="'[ '+item.tagName+' ]('+sex[item.sexType]+(item.required?'、必':'')+(item.specFlag?'、跟主':'')+')'">
+                <p class="ellipsis" :title="'[ '+item.tagName+' ]('+sex[item.sexType]+(item.required?'、必':'')+')'">
                     <span class="tagName">{{item.tagName}}</span>
-                    <span>({{sex[item.sexType]}}{{item.required?'、必':''}}{{item.specFlag?'、跟主':''}})</span>
+                    <span>({{sex[item.sexType]}}{{item.required?'、必':''}}{{item.flag==1?'、时间':''}}{{item.flag==2?'、诱因':''}}{{item.flag==3?'、伴随':''}})</span>
                 </p>
                 <el-tag class="exclu" v-if="item.exclusionType==1" type="info" size="mini">互斥项</el-tag>
             </li>
@@ -295,7 +295,7 @@ export default {
               '6':['4']             //混合组合只能添加独立组合填写单
             };
             let param = {
-                "tagName": this.searchVal,
+                "tagName": this.searchVal.trim(),
                 "type": this.ascription,
                 "notIds": notIds,
                 "notControlType":this.qaType==2||this.ascription!='51'?['4']:[],             //组合填写单或非诊疗情况模版不能添加图片上传

+ 39 - 11
src/components/preTreat/SimpleQuestion.vue

@@ -91,12 +91,13 @@
                     </template>
                 </el-table-column>
             </el-table>
-            <el-pagination v-if="total>pageSize"
-                           :current-page.sync="currentPage"
+            <el-pagination :current-page.sync="currentPage"
                            @current-change="currentChange"
                            background
                            :page-size="pageSize"
-                           layout="total,prev, pager, next, jumper"
+                           :page-sizes="pageSizeArr"
+                           @size-change="handleSizeChange"
+                           :layout="pageLayout"
                            :total="total">
             </el-pagination>
         </div>
@@ -105,6 +106,8 @@
 
 <script>
   import api from '@api/preTreat.js';
+  import config from '@api/config.js';
+  import utils from '@api/utils.js';
 
   export default {
     name: 'simpleQuestion',
@@ -124,7 +127,9 @@
           name:'',      //填写单界面名称
         },
         currentPage: 1,
-        pageSize: 10,
+        pageSize: config.pageSize,
+        pageSizeArr:config.pageSizeArr,
+        pageLayout:config.pageLayout,
         total: 0,
       }
     },
@@ -143,9 +148,15 @@
       next(vm => {
         //const pm = to.param;
         Object.assign(vm,to.params);
+        vm.inCurrentPage=to.params.currentPage;
       })
     },
     methods: {
+      handleSizeChange(val){
+        this.pageSize = val;
+        this.currentPage = utils.getCurrentPage(this.currentPage, this.total, this.pageSize);
+        this.getDataList();
+      },
       getDropList() {
         api.getPreTypeList().then((res) =>{
           this.getDataList();
@@ -161,7 +172,14 @@
       getDataList(isTurnPage) {
         const param = this.getFilterItems(isTurnPage);
         this.searched = true;
+        const loading = this.$loading({
+            lock: true,
+            text: 'Loading',
+            spinner: 'el-icon-loading',
+            background: 'rgba(0, 0, 0, 0.7)'
+        });
         api.getQuestionList(param).then((res) => {
+          loading.close()
           const list = [...res.data.data.records];
           for (var i = 0; i < list.length; i++) {
             for (var j =  0; j < this.tagTypes.length; j++) {
@@ -178,6 +196,10 @@
           }
           this.list = list;
           this.total = res.data.data.total;
+          if(this.inCurrentPage!==undefined){
+            this.currentPage=this.inCurrentPage;
+            this.inCurrentPage = undefined;
+          }
         })
       },
       filterDatas() {
@@ -186,7 +208,9 @@
       },
       addIndeptTag() {
         const pam = this.searched?{currentPage:this.currentPage,
-            filter:this.filter}:{currentPage:this.currentPage};
+          pageSize:this.pageSize,
+            filter:this.filter}:{currentPage:this.currentPage,
+          pageSize:this.pageSize};
         this.$router.push({name:'AddSimpleQuestion',
                             params:pam})
       },
@@ -196,7 +220,9 @@
           if(code=='0'){
             const item = Object.assign({},row,data);
             const pam = this.searched?{currentPage:this.currentPage,
-              filter:this.filter}:{currentPage:this.currentPage};
+              pageSize:this.pageSize,
+              filter:this.filter}:{currentPage:this.currentPage,
+              pageSize:this.pageSize};
             this.$router.push({name:'AddSimpleQuestion',params:Object.assign(pam,{isCopy:true,data:item})});
           }else{
             this.$message({
@@ -212,7 +238,9 @@
           if(code=='0'){
             const item = Object.assign({},row,data);
             const pam = this.searched?{currentPage:this.currentPage,
-              filter:this.filter}:{currentPage:this.currentPage};
+              pageSize:this.pageSize,
+              filter:this.filter}:{currentPage:this.currentPage,
+              pageSize:this.pageSize};
             this.$router.push({name:'AddSimpleQuestion',params:Object.assign(pam,{isEdit:true,data:item})});
           }else{
             this.$message({
@@ -250,12 +278,12 @@
         const param = {
           tagTypeList: [1],
           callType:1,
-          current: this.currentPage,
+          current: this.inCurrentPage||this.currentPage,
           size: this.pageSize,
           type: this.filter.tagAdscription,
-          tagName: this.filter.tagSysName,
-          combinationName:this.filter.combinationName,
-          name:this.filter.name,
+          tagName: this.filter.tagSysName.trim(),
+          combinationName:this.filter.combinationName.trim(),
+          name:this.filter.name.trim(),
           controlTypeList: this.filter.controlType[0] ? this.filter.controlType: []
         };
         return param;

+ 286 - 0
src/components/safeControl/AddToken.vue

@@ -0,0 +1,286 @@
+<!-- 添加常见科室症状  -->
+<template>
+    <div class="AddTokenWrapper">
+        <crumbs
+          :title="'license维护-'+titleText"
+          class="topBack"
+          :param="$route.params"
+          linkTo="TokenControl"
+        ></crumbs>
+        <el-form ref="ruleForm"  class="addDepartForm" label-width="190px">
+            <el-form-item  class="addDepartFormItem isRequired" label="服务器秘钥:">
+                <!-- <input class="searchInput" type="text" v-model = "equipNum">  -->
+               
+                <el-input
+                type="textarea"
+                :autosize ="{minRows: 2}"
+                placeholder="请输入内容"
+                @blur="tokenAnalysis"
+                v-model.trim="equipNum">
+                </el-input>
+                 <!-- <el-button
+                    type="primary"
+                    class="analysis"
+                    @click="tokenAnalysis"
+                    >解析</el-button> -->
+            </el-form-item>
+            <el-form-item class="isRequired" label="服务商:">
+                 <el-input v-model.trim="server" placeholder="请输服务商" maxlength="255"></el-input>
+            </el-form-item>
+             <el-form-item class="isRequired" label="医院:" >
+                <el-input v-model.trim="hospital" placeholder="请输医院" maxlength="255"></el-input>
+            </el-form-item>
+             
+             <el-form-item class="isRequired" label="cpu:" >
+                {{this.cpu}}
+            </el-form-item>
+            <el-form-item  label="ip:">
+                {{this.ip}}
+            </el-form-item>
+            <el-form-item  label="主板:">
+                {{this.mainboard}}
+            </el-form-item>
+            <el-form-item  label="硬盘:">
+                {{this.disk}}
+            </el-form-item>
+            <el-form-item class="isRequired" label="license使用天数(天):" >
+                <el-input v-model.trim="remainDay" onkeyup="value=value.replace(/[^\d]/g,'')" placeholder="请输入使用天数" type='text' min = '0' maxlength="255"></el-input>
+            </el-form-item>
+            <el-form-item class="isRequired" label="token有效时间(分钟):" >
+                <el-input v-model.trim="validTime" onkeyup="value=value.replace(/[^\d]/g,'')" placeholder="请输入有效时间" type='text' min = '0' maxlength="255"></el-input>
+            </el-form-item>
+            <el-form-item  label="登录Key:" v-if="isEdit" >
+                {{this.loginKey}}
+            </el-form-item>
+            <el-form-item label="备注:">
+                <el-input v-model.trim="remark" 
+                  type="textarea"
+                 :autosize ="{minRows: 2}"
+                placeholder="请输备注"
+                maxlength="255"></el-input>
+            </el-form-item>
+        </el-form>
+        <div class="btn">
+            <el-button
+            type="primary"
+            :disabled = 'saveDisable'
+            @click="submitForm"
+            >确 定</el-button>
+        </div>
+    </div>
+    
+</template>
+
+<script>
+  import api from '@api/safeControl.js';
+  export default {
+    name: 'AddToken',
+    data() {
+        return{
+            titleText: '添加license',
+            modifier: '', //操作人
+            id: '',
+            equipNum:'',
+            remainDay: '',
+            remark: '',
+            server: '',
+            hospital: '',
+            cpu: '',
+            mainboard: '',
+            validTime: 30,
+            disk: '',
+            ip: '',
+            loginKey: '',
+            isEdit: false,
+            saveDisable: false
+           
+        }
+    },
+    created(){
+        const { isEdit, data } = this.$route.params;
+        const userLoginDTO = JSON.parse(localStorage.getItem('userLoginDTO'))
+        this.modifier = userLoginDTO && userLoginDTO.linkman
+        if(isEdit) {
+            if(isEdit) {
+                this.isEdit = isEdit;
+                this.titleText = '修改license';
+                this.id = data.id
+                this.equipNum = data.content
+                this.remainDay = data.remainDay
+                this.remark = data.remark
+                this.server = data.server
+                this.hospital = data.hospital
+                this.cpu = data.cpu
+                this.mainboard = data.mainboard
+                this.validTime = data.validTime
+                this.disk = data.disk
+                this.ip = data.ip
+                this.loginKey = data.loginKey
+            } 
+        } else {
+            
+        }
+    },
+    watch: {
+       
+    },
+    methods: {
+       
+        back(){
+            this.$router.go(-1);
+        },
+      
+        submitForm() {
+             if(!this.equipNum || !this.hospital || !this.server || !this.cpu || !this.remainDay || !this.validTime) {
+                this.warning('请输入必填项!')
+                return
+            }
+            this.showDelDialog()
+        },
+        tokenAnalysis() {
+            const param = {
+                content: this.equipNum
+            }
+            api.tokenAnalysis(param).then(res =>{
+                if(res.data.code == '0') {
+                    const data = res.data.data
+                    this.mainboard = data['server.mainboard']
+                    this.cpu = data['server.cpu']
+                    this.disk = data['server.disk']
+                } else {
+                    this.warning(res.data.msg)
+                }
+            }).catch((err) => {
+                this.warning(err);
+            })
+        },
+        showDelDialog() {
+           
+            this.showConfirmDialog('是否生成该令牌?', () => {
+                const param = {
+                    id: this.id,
+                    creator: this.modifier,
+                    server: this.server,
+                    hospital: this.hospital,
+                    cpu: this.cpu,
+                    remainDay: this.remainDay,
+                    mainboard: this.mainboard,
+                    disk: this.disk,
+                    ip: this.ip,
+                    remark: this.remark,
+                    content: this.equipNum,
+                    validTime: this.validTime
+                }
+                if(this.id) {
+                    param.loginKey = this.loginKey
+                }
+                this.saveDisable = true  //提交保存按钮不可点击,返回结果时才可点击,防止频繁发送请求
+                api.tokenSaveOrUpdate(param).then((res) => {
+                if (res.data.code  === '0') {
+                    this.warning(res.data.msg || '生成成功', 'success','1000')
+                    setTimeout(() => {
+                      //返回带搜索条件的首页
+                    this.$router.push({
+                        name:'TokenControl',
+                      params: Object.assign({}, this.$route.params, {currentPage: 1})
+                    })
+                    }, 1000);
+                } else {
+                    this.warning(res.data.msg)
+                }
+                this.saveDisable = false
+                }).catch((err) => {
+                    this.warning(err);
+                })
+            });
+        },
+        showConfirmDialog(msg, resolve) {
+            this.$alert(msg, '提示', {
+                confirmButtonText: '确定',
+                type: 'warning'
+            }).then(() => {
+                resolve();
+            }).catch(() => {});
+        },
+        warning(msg, type,time) {
+            this.$message({
+                showClose: true,
+                dangerouslyUseHTMLString: true,
+                message: msg,
+                type: type || 'warning',
+                duration:time || '3000'
+            })
+        },
+        handleInp(e){ //分组不能输入负数
+            const value =  e;
+            this.remainDay = value.replace(/\./g,'');
+            // e = value.replace(/[^\d]/g,'');
+            // this.remainDay = value.replace(/[^\d]/g,'');
+        }
+    }
+  }
+</script>
+
+<style lang="less">
+    @import '../../less/common.less';
+    .AddTokenWrapper {
+        color: #606266;
+        .topBack {
+            top: 0;
+        }
+        .analysis{
+            margin-top: 20px;
+        }
+        .searchInput, .searchName {
+            display: inline-block;
+            height: 32px;
+            line-height: 32px;
+            border: 1px solid #a9a9a9;
+            margin: 0px 0 0 0;
+            padding: 0 5px;
+            float: left;
+            margin-top: 4px;
+        }
+        .isRequired .el-form-item__label::before {
+            content: '*';
+            color: red;
+        }
+        .searchName {
+            border-left: none;
+            cursor: pointer;
+            font-size: 16px;
+            padding: 0 14px;
+        }
+        .addDepartForm {
+            position: relative;
+            background-color: #fff;
+            padding: 20px;
+            margin: 70px 20px 0px 20px;
+            border-bottom: 1px solid #c0c4cc;
+        }
+        .addDepartFormItem {
+            position: relative;
+        }
+        .symptomList {
+            background-color: #fff;
+             padding: 20px;
+             margin: 0px 20px 0px 20px;
+             min-height: 400px;
+        }
+        .btn {
+            position: relative;
+            background-color: #fff;
+            margin: 0px 20px;
+            height: 40px;
+            padding: 20px;
+            .el-button {
+                position: absolute;
+                right: 20px;
+            }
+        }
+        .selectDepart {
+            
+        }
+    }
+    
+</style>

+ 346 - 0
src/components/safeControl/TokenControl.vue

@@ -0,0 +1,346 @@
+<template>
+    <div>
+        <crumbs title="license维护" style="min-width: 980px">
+            <el-form :inline="true" class="demo-form-inline">
+                <!-- <el-form-item label="标签类型:">
+                    <el-select size="mini" v-model="filter.tagType[0]" placeholder="标签类型" clearable>
+                        <el-option v-for="item in tagTypes" :label="item.name" :value="item.val" :key="item.id"></el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="标签归属:">
+                    <el-select size="mini" v-model="filter.tagAdscription" @change="getValue"  placeholder="标签归属" clearable>
+                        <el-option v-for="item in Adscriptions" :label="item.name" :value="item.val" :key="item.id" ></el-option>
+                    </el-select>
+                </el-form-item> -->
+                <el-form-item label="服务商:">
+                    <el-input size="mini" v-model.trim="filter.server" placeholder="标签系统名称"  maxlength="255" clearable></el-input>
+                </el-form-item>
+                <el-form-item label="医院:">
+                    <el-input size="mini" v-model.trim="filter.hospital" placeholder="标签系统名称" maxlength="255" clearable></el-input>
+                </el-form-item>
+                <el-form-item>
+                    <el-button size="mini" @click="filterDatas">确认</el-button>
+                    <el-button size="mini" type="warning" @click="addToken">新增license</el-button>
+                </el-form-item>
+            </el-form>
+        </crumbs>
+        <div class="contents">
+            <el-table
+                :data="list"
+                border
+                style="width: 100%">
+                <el-table-column
+                    :resizable = "false"
+                    type="index"
+                    :index = 'indexMethod'
+                    label="编号"
+                    width="60">
+                </el-table-column>
+                <el-table-column
+                    :resizable = "false"
+                    prop="gmtModified"
+                    label="操作时间"
+                    width="180">
+                </el-table-column>
+                <el-table-column
+                    :resizable = "false"
+                    prop="server"
+                    label="服务商">
+                </el-table-column>
+                <el-table-column
+                    :resizable = "false"
+                    prop="hospital"
+                    label="医院">
+                </el-table-column>
+                <el-table-column
+                    :resizable = "false"
+                    prop="remainDay"
+                    label="license有效天数">
+                </el-table-column>
+                 <el-table-column
+                    :resizable = "false"
+                    prop="validTime"
+                    label="token有效时间(分钟)">
+                </el-table-column>
+                <el-table-column
+                    :resizable = "false"
+                    prop="loginKey"
+                    label="loginKey">
+                </el-table-column>
+                <el-table-column
+                    :resizable = "false"
+                    prop="modifier"
+                    label="操作人">
+                </el-table-column>
+                <el-table-column
+                    :resizable = "false"
+                    prop="operate"
+                    label="操作">
+                    <template slot-scope="scope">
+                        <el-button  @click="modifyTagGroup(scope.row, 'modify')" type="text" size="small">修改</el-button>
+                        <span style="margin:0 3px;">|</span>
+                        <el-button @click="downLoadFile(scope.row)" type="text" size="small">下载</el-button>
+                        <span style="margin:0 3px;">|</span>
+                        <el-button @click="showDelDialog(scope.row.id)" class="delete" type="text" size="small">删除</el-button>
+                        
+                    </template>
+                </el-table-column>
+            </el-table>
+        <div class="pagination">
+            <el-pagination :current-page.sync="currentPage"
+                       @current-change="currentChange"
+                       background
+                       :page-size="pageSize"
+                        :page-sizes="pageSizeArr"
+                        @size-change="handleSizeChange"
+                        :layout="pageLayout"
+                       :total="total">
+            </el-pagination>
+        </div>
+        </div>
+        
+    </div>
+</template>
+
+<script>
+import api from '@api/safeControl.js';
+import config from '@api/config.js';
+import $ from 'jquery';
+
+export default {
+    name: 'TokenControl',
+    data: function() {
+        return {
+            list: [],
+            filter: {
+              hospital:'', 
+              server:''
+            },
+            currentPage: 1,
+            modifier: '',
+            pageSize: config.pageSize,
+            pageSizeArr:config.pageSizeArr,
+            pageLayout:config.pageLayout,
+            total: 0,
+        }
+    },
+    created() {
+        const userLoginDTO = JSON.parse(localStorage.getItem('userLoginDTO'))
+        this.modifier = userLoginDTO && userLoginDTO.linkman
+        this.getDataList()
+        
+    },
+    watch: {
+        'filter': {
+            handler: function () {
+            this.searched = false;
+            },
+            deep: true
+        }
+    },
+    beforeRouteEnter(to, from, next) {
+        next(vm => {
+        //const pm = to.param;
+        Object.assign(vm, to.params);
+        vm.inCurrentPage=to.params.currentPage;
+        })
+    },
+    methods: {
+        handleSizeChange(val){
+            this.pageSize = val;
+            this.currentPage = utils.getCurrentPage(this.currentPage, this.total, this.pageSize);
+            this.getDataList();
+        },
+        getDataList(isTurnPage) {
+            const param = this.getFilterItems(isTurnPage);
+            this.searched = true;
+            const loading = this.$loading({
+                lock: true,
+                text: 'Loading',
+                spinner: 'el-icon-loading',
+                background: 'rgba(0, 0, 0, 0.7)'
+            });
+            api.tokenList(param).then((res) => { 
+                    loading.close()
+                const list = res.data.data.records
+                
+                this.list = list;
+                this.total = res.data.data.total;
+                if(this.inCurrentPage!==undefined){
+                    this.currentPage=this.inCurrentPage;
+                    this.inCurrentPage = undefined;
+                }
+            })
+        },
+        filterDatas() {
+            this.currentPage = 1;
+            this.getDataList();
+        },
+        addToken() {
+            const pam = this.searched ? {
+            currentPage: this.currentPage,
+            pageSize:this.pageSize,
+            filter: this.filter
+            } : {currentPage: this.currentPage,
+            pageSize:this.pageSize};
+            this.$router.push({name: 'AddToken', params: pam});
+        },
+        modifyTagGroup(row, type) {
+            api.tokenDetails({id:row.id}).then((res)=>{
+                const {code,data,msg} = res.data;
+                if(code=='0'){
+                    const item = Object.assign({},row,data);
+                    const pam = this.searched ? {
+                    currentPage: this.currentPage,
+                    filter: this.filter
+                    } : {currentPage: this.currentPage};
+                    // console.log('item', item)
+                    if(type == 'modify') {
+                        this.$router.push({
+                        name: 'AddToken',
+                        params: Object.assign(pam, {isEdit: true, data: item})
+                        });
+                    } else {
+                        return
+                    }
+                }else{
+                    this.$message({
+                    message: msg,
+                    type: 'warning'
+                    });
+                }
+            });
+        },
+        downLoadFile(row) {
+            const url = row.url.replace(/{imageUrlPrefix}/g,config.imgHost) + '?download=1'
+            // var $form = $('<form method="GET"></form>');
+            // $form.attr('action', url);
+            // $form.appendTo($('body'));
+            // $form.submit();
+            this.download(url, 'license.properties')
+        //     const ele = document.createElement('a');
+        //     ele.setAttribute('download' , 'download');//用于设置下载文件的文件名
+
+        //     ele.setAttribute('href',url); //设置下载文件的url地址
+
+
+        //     ele.click();
+
+
+        },
+        getBlob(url,cb) {
+            var xhr = new XMLHttpRequest();
+            xhr.open('GET', url, true);
+            xhr.responseType = 'blob';
+            xhr.onload = function() {
+                    if (xhr.status === 200) {
+                        cb(xhr.response);
+                    }
+            };
+            xhr.send();
+        },
+        saveAs(blob, filename) {
+            if (window.navigator.msSaveOrOpenBlob) {
+                navigator.msSaveBlob(blob, filename);
+            } else {
+                var link = document.createElement('a');
+                var body = document.querySelector('body');
+
+                link.href = window.URL.createObjectURL(blob);
+                link.download = filename;
+
+                // fix Firefox
+                link.style.display = 'none';
+                body.appendChild(link);
+                
+                link.click();
+                body.removeChild(link);
+
+                window.URL.revokeObjectURL(link.href);
+            };
+        },
+        download(url, filename){
+            const that = this
+            that.getBlob(url, function(blob) {
+                that.saveAs(blob, filename);
+            });
+        },
+        currentChange(next) {
+            this.currentPage = next;
+            this.getDataList(true);
+        },
+        getFilterItems(isTurnPage) {
+            //翻页时筛选条件没点确定则清空
+            if(isTurnPage&&!this.searched){
+            this.clearFilter();
+            };
+            const param = {
+                current: this.inCurrentPage||this.currentPage,
+                size: this.pageSize,
+                hospital: this.filter.hospital,
+                server: this.filter.server
+            };
+            return param;
+        },
+        indexMethod(index) {
+            return ((this.currentPage - 1) * this.pageSize) + index + 1;
+        },
+        warning(msg,type){
+            this.$message({
+            showClose: true,
+            dangerouslyUseHTMLString: true,
+            message:'<p>'+msg+'</p>',
+            type:type||'warning'
+            })
+        },
+        showConfirmDialog(msg,resolve){
+            this.$alert(msg, '提示', {
+            confirmButtonText: '确定',
+            type: 'warning'
+            }).then(() => {
+            resolve();
+            }).catch(() => {});
+        },
+        clearFilter(){
+        
+        },
+        showDelDialog(id){
+            this.showConfirmDialog('是否删除该令牌?',()=>{
+            const param = {id:id,creator:this.modifier}
+            api.tokenDelete(param).then((res)=>{
+                if(res.data.code=='0'){
+                if(!this.searched){
+                    //未点确认时清空搜索条件
+                    this.clearFilter();
+                }
+                if(this.list.length==1){
+                    //当前在最后一页且只有一条数据时,删除后跳到前一页
+                    this.currentPage = this.currentPage===1?1:this.currentPage-1;
+                }
+                this.getDataList();
+                this.warning(res.data.msg || '操作成功','success');
+                }else{
+                this.warning(res.data.msg);
+                }
+            }).catch((error)=>{
+                this.warning(error);
+            })
+            });
+        }
+    }
+}
+</script>
+
+
+<style lang="less">
+    @import "../../less/admin.less";
+    .delete{
+       color: red;
+    }
+    .delete:hover {
+        color: red;
+    } 
+    .pagination {
+        min-width: 1010px;
+    }
+</style>

+ 21 - 1
src/routes.js

@@ -98,6 +98,19 @@ import AddDiagBase from '@components/diagBase/AddDiagBase.vue';  //诊断依据-
 
 import QuestionWords from '@components/diagBase/QuestionWords.vue';
 
+//医学数据统计
+import MedicalStatistics from '@components/medicalStatistics/MedicalStatistics.vue';
+
+//医学术语库维护
+import AssistCheckMultRelation from '@components/medicalTerm/AssistCheckMultRelation.vue';
+import AddAssistCheckMultRelation from '@components/medicalTerm/AddAssistCheckMultRelation.vue';
+import AssistCheckSon from '@components/medicalTerm/AssistCheckSon.vue';
+import AddAssistCheckSon from '@components/medicalTerm/AddAssistCheckSon.vue';
+
+//安全管理
+import TokenControl from '@components/safeControl/TokenControl.vue';
+import AddToken from '@components/safeControl/AddToken.vue';
+
 export default [
   {
     path: '/',
@@ -251,6 +264,11 @@ export default [
 
       {path:'LT-YXSYKWH-YXSYDCGLWH',component:MedicalMultRelation,name:'MedicalMultRelation'},   //医学术语--医学术语多层关联维护
       {path:'LT-YXSYKWH-TJYXSYDCGL',component:AddMedicalMultRelation,name:'AddMedicalMultRelation'},   //医学术语--添加医学术语多层关联
+      {path:'LT-YXSYKWH-FJCJGLWH',component:AssistCheckMultRelation,name:'AssistCheckMultRelation'},   //医学术语--辅检层级关联维护
+      {path:'LT-YXSYKWH-TJFJCJGL',component:AddAssistCheckMultRelation,name:'AddAssistCheckMultRelation'},   //医学术语--添加辅检层级关联
+      {path:'LT-YXSYKWH-FJZXWH',component:AssistCheckSon,name:'AssistCheckSon'},   //医学术语--辅检子项维护
+      {path:'LT-YXSYKWH-TJFJZX',component:AddAssistCheckSon,name:'AddAssistCheckSon'},   //医学术语--辅检子项维护
+       
 
       {path:'LT-YWZSJWH-DLTXDWH',component:SimpleQuestion,name:'SimpleQuestion'},  //预问诊-独立填写单
       {path:'LT-YWZSJWH-ZHTXDWH',component:CombinQuestion,name:'CombinQuestion'},  //预问诊-组合填写单
@@ -262,7 +280,9 @@ export default [
       {path:'LT-ZDYJWH-ZDYJSJWH',component:DiagBase,name:'DiagBase'},  //诊断依据-诊断依据维护
       {path:'LT-ZDYJWH-TJZDYJSJ',component:AddDiagBase,name:'AddDiagBase'},  //诊断依据-添加诊断依据
       {path:'LT-ZDYJWH-WTCSJWH',component:QuestionWords,name:'QuestionWords'},  //问题列表
-
+      {path:'LT-SJTJ-YXSJTJ',component:MedicalStatistics,name:'MedicalStatistics'},  //问题列表
+      {path:'LT-AQGL-LICENSEWH',component:TokenControl,name:'TokenControl'},  //安全管理--令牌列表
+      {path:'LT-AQGL-TJLICENSE',component:AddToken,name:'AddToken'},  //安全管理--发放令牌
     ]
   }
 ]

+ 3 - 3
vue.config.js

@@ -1,7 +1,7 @@
 const path = require('path');
 // const proxy_path = 'http://192.168.2.236:80';
-const proxy_path = 'http://192.168.2.241:88';
-// const proxy_path = 'http://192.168.2.236:88';
+// const proxy_path = 'http://192.168.2.241:88';
+const proxy_path = 'http://192.168.2.236:88';
 // const proxy_path = 'http://192.168.3.101:5050';
 // const proxy_path = 'http://192.168.3.117:5050';//周铁刚
 // const proxy_path = 'http://192.168.3.115:5050';
@@ -28,5 +28,5 @@ module.exports = {
                 '@api': path.resolve(__dirname,'./src/api/')
             }
         }
-    }
+    },
 };