Parcourir la source

merge from 'dev'

zhangxc il y a 6 ans
Parent
commit
c2bccce8a4
36 fichiers modifiés avec 3074 ajouts et 520 suppressions
  1. 18 4
      src/api/config.js
  2. 51 3
      src/api/icss.js
  3. 42 9
      src/api/utils.js
  4. 25 18
      src/components/admin/Console.vue
  5. 3 3
      src/components/common/Crumbs.vue
  6. 15 5
      src/components/common/HomePage.vue
  7. 1 1
      src/components/icss/AddDeptInfo.vue
  8. 1 1
      src/components/icss/AddIndeptLabel.vue
  9. 213 0
      src/components/icss/AddMedicalName.vue
  10. 151 0
      src/components/icss/AddMedicalRelation.vue
  11. 237 0
      src/components/icss/AddMedicinePrompt.vue
  12. 141 83
      src/components/icss/AddPromptInfo.vue
  13. 41 15
      src/components/icss/AddSimilarName.vue
  14. 137 0
      src/components/icss/AddVersion.vue
  15. 254 126
      src/components/icss/CommonTemplate.vue
  16. 20 15
      src/components/icss/IndeptLabel.vue
  17. 104 0
      src/components/icss/InfoParagraph.vue
  18. 1 1
      src/components/icss/LabelGroup.vue
  19. 212 0
      src/components/icss/MedicalName.vue
  20. 240 0
      src/components/icss/MedicalRelation.vue
  21. 187 0
      src/components/icss/MedicinePrompt.vue
  22. 116 0
      src/components/icss/PromptDetail.vue
  23. 11 23
      src/components/icss/PromptInfo.vue
  24. 26 27
      src/components/icss/PromptTagPool.vue
  25. 103 38
      src/components/icss/PubTagPartDetail.vue
  26. 19 56
      src/components/icss/PubTemplateGroup.vue
  27. 2 5
      src/components/icss/SimilarName.vue
  28. 7 7
      src/components/icss/SingleSelect.vue
  29. 22 32
      src/components/icss/TemplateMaintenance.vue
  30. 36 47
      src/components/icss/TemplateMaintenanceWrap.vue
  31. 282 0
      src/components/icss/VersionDesc.vue
  32. 58 0
      src/components/icss/VersionDetail.vue
  33. 148 0
      src/components/icss/VersionInfo.vue
  34. 125 0
      src/js/Convert_Pinyin.js
  35. 4 0
      src/less/admin.less
  36. 21 1
      src/routes.js

+ 18 - 4
src/api/config.js

@@ -98,7 +98,7 @@ export default {
     'getPromptList':'api/icssman/introduceInfo/getIntroducePage',//提示信息列表
     'addPromptInfo':'api/icssman/introduceInfo/saveIntroduce',//新增提示信息
     'delPromptInfo':'api/icssman/introduceInfo/deleteRecord',//删除提示信息
-    'PromptInfoDetail':'api/icssman/introduceDetail/getByIntroduceId',//提示信息详情
+    'PromptInfoDetail':'api/icssman/introduceInfo/getIntroduceById',//提示信息详情
     'getIcssEnumsData':'api/icssman/getIcssEnumsData',//icss枚举
 	  'similarName': 'api/icssman/retrieval/retrievalList', //别名维护
     'delSimilarName': 'api/icssman/retrieval/delRetrievalsByQuesId', //别名维护-删除
@@ -118,16 +118,30 @@ export default {
     'delDiscInformation': 'api/icssman/disclaimerInformation/cancelDisclaimerInformations', //免责声明-删除
     'closeInformation': 'api/icssman/disclaimerInformation/endDisclaimerInformations', //免责声明-停用
     'openInformation': 'api/icssman/disclaimerInformation/startDisclaimerInformations', //免责声明-启用
-    'updateModuleInfo': 'api/icssman/moduleInfo/updateModuleInfo', //模板维护系统修改保存
+    'getQuestionInfos': 'api/icssman/moduleInfo/getQuestionInfos', //模板维护标签池数据获取
+    'saveModuleInfo': 'api/icssman/moduleInfo/saveModuleInfo', //模板维护新增
+    'updateModuleInfo': 'api/icssman/moduleInfo/updateModuleInfo', //模板维护修改
     'getModuleInfoList': 'api/icssman/moduleInfo/getModuleInfoList', //模板维护系统列表
-    'getModuleInfoOne': 'api/icssman/moduleInfo/getModuleInfoOne', //模板维护系统修改获取单个模板信息
+    'getModuleInfoSub': 'api/icssman/moduleInfo/getModuleInfo', //获取子模板列表
+    'getModuleInfoOne': 'api/icssman/moduleInfo/getModuleInfoOne', //模板维护系统修改获取单个模板信息上部分信息
+    'getModuleDetailInfo': 'api/icssman/moduleInfo/getModuleDetailInfo', //模板维护系统修改获取单个模板右侧信息
     'delTemplate': 'api/icssman/moduleInfo/delete', //模板维护系统删除单个模板信息
     'getPhysicalExamTempList': 'api/icssman/deptVital/getDeptVitalPage', //查体模板列表
     'getPhysicalExamTempDepartList':'api/icssman/deptVital/getDeptShortList_create' , //查体模板科室列表--新增
     'getPhysicalExamTempByDepId':'api/icssman/deptVital/getModuleByDeptId', //通过科室id获取查体模板
     'savePhysicalExamTemp':'api/icssman/deptVital/saveDeptVitals',//保存查体模板
     'delPhysicalExamTemp':'api/icssman/deptVital/delAllDeptVitalList',//删除查体模板
-
+    'getConceptKnowledge':'/api/knowledgeman/Knowledge/getConceptKnowledge', //  术语静态知识列表
+    'getConceptInfo':'/api/knowledgeman/concept/getConceptInfo', //  搜索术语
+    'saveConceptInfo':'/api/knowledgeman/concept/getConceptInfo',   //保存术语静态知识
+    'getAllConcept':'/api/knowledgeman/concept/getAllConcept', //  术语列表
+    'versionInfo': 'api/icssman/versionInfo/getVersionInfoAlls', //版本信息
+    'addVersInfo': 'api/icssman/versionInfo/saveVersionInfoAlls', //版本信息-添加
+    'updateVersInfo': 'api/icssman/versionInfo/updateVersionInfoAlls', //版本信息-修改
+    'delVersionInfo': 'api/icssman/versionDetail/cancelVersionDetails', //版本信息-删除版本说明
+    'addVersionInfo': 'api/icssman/versionDetail/addVersionDetails', //版本信息-添加版本说明
+    'modiVersionInfo': 'api/icssman/versionDetail/updateVersionDetails', //版本信息-修改版本说明
+    'getVersionDetlInfo': 'api/icssman/versionDetail/getDetailById', //版本信息-版本说明列表获取
 	},
 	menuIconList: { //菜单对应图标
 		'YH-KZT': 'el-icon-menu',

+ 51 - 3
src/api/icss.js

@@ -22,6 +22,18 @@ export default {
     PromptInfoDetail(param){
         return axios.post(urls.PromptInfoDetail,param)
     },
+    getPrompDetail(param){
+      return axios.post(urls.PromptInfoDetail,param);
+    },
+    getTremList(param){
+      return axios.post(urls.getConceptKnowledge,param);
+    },
+    getConceptInfo(param){
+      return axios.post(urls.getConceptInfo,param);
+    },
+    saveTermPrompts(param){
+      return axios.post(urls.saveConceptInfo,param);
+    },
     getTagList(param) {
         return axios.post(urls.getTagList, param)
     },
@@ -53,7 +65,10 @@ export default {
         return axios.post(urls.modifDeptInfo, param)
     },
     saveOrUpdate(param) {
-        return axios.post(urls.saveOrUpdate, param)
+        return axios.post(urls.saveOrUpdate, param);
+    },
+    savePrompts(param){
+      return axios.post(urls.addPromptInfo, param);
     },
     deleteTagGroup(param) {
         return axios.post(urls.deleteTagGroup, param)
@@ -129,15 +144,27 @@ export default {
     openInformation(param) {//免责声明-停用
         return axios.post(urls.openInformation, param)
     },
-    updateModuleInfo(param) {//模板维护系统修改保存
+    updateModuleInfo(param) {//模板维护系统修改
         return axios.post(urls.updateModuleInfo, param)
     },
+    saveModuleInfo(param) {//模板维护系统新增
+        return axios.post(urls.saveModuleInfo, param)
+    },
     getModuleInfoList(param) {//模板维护系统列表
         return axios.post(urls.getModuleInfoList, param)
     },
-    getModuleInfoOne(param) {//模板维护系统修改获取单个模板信息
+    getModuleInfoSub(param) {//获取子模板列表
+        return axios.post(urls.getModuleInfoSub, param)
+    },
+    getQuestionInfos(param) {//获取模板维护标签池数据
+        return axios.post(urls.getQuestionInfos, param)
+    },
+    getModuleInfoOne(param) {//模板维护系统修改获取单个模板信息顶部信息
         return axios.post(urls.getModuleInfoOne, param)
     },
+    getModuleDetailInfo(param) {//模板维护系统修改获取单个模板信息右侧信息
+        return axios.post(urls.getModuleDetailInfo, param)
+    },
     delTemplate(param) {//模板维护系统删除单个模板信息
         return axios.post(urls.delTemplate, param)
     },
@@ -156,4 +183,25 @@ export default {
     delPhysicalExamTemp(param) {
         return axios.post(urls.delPhysicalExamTemp, param)
     },
+    versionInfo(param) {//版本信息
+      return axios.post(urls.versionInfo, param)
+    },
+    addVersInfo(param) {//版本信息-添加
+      return axios.post(urls.addVersInfo, param)
+    },
+    updateVersInfo(param) {//版本信息-修改
+      return axios.post(urls.updateVersInfo, param)
+    },
+    delVersionInfo(param) {//版本信息-删除说明
+      return axios.post(urls.delVersionInfo, param)
+    },
+    addVersionInfo(param) {//版本信息-添加说明
+      return axios.post(urls.addVersionInfo, param)
+    },
+    modiVersionInfo(param) {//版本信息-修改说明
+      return axios.post(urls.modiVersionInfo, param)
+    },
+    getVersionDetlInfo(param) {//版本信息-版本说明列表
+      return axios.post(urls.getVersionDetlInfo, param)
+    },
 }

+ 42 - 9
src/api/utils.js

@@ -64,12 +64,12 @@ export default {
   filterArr(arr,val,type,des){  //数组剔除指定元素 
     if(type == 1){
       if(des){
-        return arr.filter(item => item.id != val)
+        return arr.filter(item => item.id != val)  //判断id
       }else{
-        return arr.filter(item => item != val)
+        return arr.filter(item => item != val)    //判断值
       }
     }else{
-      let tmp = arr.filter(item => JSON.stringify(item) == JSON.stringify(val))
+      let tmp = arr.filter(item => JSON.stringify(item) == JSON.stringify(val))   //判读是否存在
       if(JSON.stringify(tmp) == '[]'){
         return false;
       }else{
@@ -87,6 +87,7 @@ export default {
     // console.log(dataArr,type)
     let tmpArr = [];
     for(let i = 0;i < dataArr.length;i++){
+      let tmpData = dataArr[i];
       let mapping = {
         "sonQuestion": "",
         "position": 0,               //默认值,传0
@@ -99,7 +100,6 @@ export default {
           "id": "",
           "questionMappings": []
       }
-      let tmpData = dataArr[i];
   
       if(type == 6 && tmpData.length > 0){//既往史
         let sonMappingArr=[]; 
@@ -108,15 +108,20 @@ export default {
           if(i == 0){
             mapping.formPosition = 1;
             mapping.exclusionType = 1;
+            mapping.sonQuestion = tmpData[j];
+          }else if(i == 1){
+            mapping.formPosition = 0;
+            mapping.exclusionType = 0;
+            mapping.sonQuestion = tmpData[j];
           }else{
             mapping.formPosition = 0;
             mapping.exclusionType = 0;
+            sonMappingObj.sonQuestion = tmpData[j];    //{sonQuestion:18}
+            sonQuestionMap.questionMappings = sonMappingArr;    //{id:"",[{sonQuestion:18},{sonQuestion:18}]}
+            mapping.questionMappingSon = sonQuestionMap;
           }
-          sonMappingObj.sonQuestion = tmpData[j];    //{sonQuestion:18}
           sonMappingArr.push(sonMappingObj);         //[{sonQuestion:18},{sonQuestion:19}]
           
-          sonQuestionMap.questionMappings = sonMappingArr;    //{id:"",[{sonQuestion:18},{sonQuestion:18}]}
-          mapping.questionMappingSon = sonQuestionMap;
         }
         tmpArr.push(mapping)
       }else if(type == 2 && tmpData.length > 0){//杂音
@@ -153,7 +158,8 @@ export default {
    * 单选数据转换提交
    * **/
   simpleOptionData(data){
-    let arr = data.map((it,i)=>{
+    let arr = [];
+    data.map((it,i)=>{
       let code = '';
       let abnormal = 0
       if(it.isError){
@@ -165,7 +171,9 @@ export default {
       if(it.isBan){
         code = '1';
       }
-      return {name:it.name,defaultSelect:it.defaultSelect?'1':'0',code,abnormal,remark:'单选项-'+it.name}
+      if(it.name){
+        arr.push({name:it.name,defaultSelect:it.defaultSelect?'1':'0',code,abnormal,remark:'单选项-'+it.name});
+      }
     });
     return arr;
   },
@@ -202,6 +210,31 @@ export default {
       obj[maps[it]] = typeof data[it]=='number'?data[it]+'':data[it];
     }
     return obj;
+  },
+  /**
+   * 模板数据提交转化函数
+   */
+  orderTemplateData(data){
+    let tmpArr = [];
+    for(let i =0;i<data.length;i++){
+      let obj={
+        "flag": '',
+        "questionId": '',
+        "relationModule": '',
+        "text": ""
+      };
+      if(data[i].type == 'sub'){      //这是子模板
+        obj.relationModule = parseInt(data[i].id)
+      }else if(data[i].type == 'input'){     //这个是输入框文字
+        if(data[i].text){   //去掉空输入框
+          obj.text = data[i].text
+        }
+      }else{    //这个是标签
+        obj.questionId = data[i].id
+      }
+      tmpArr.push(obj)
+    }
+    return tmpArr;
   }
 }
 

+ 25 - 18
src/components/admin/Console.vue

@@ -1,7 +1,7 @@
 <template>
     <div>
         <crumbs title="控制台"></crumbs>
-        <div class="console">
+        <div class="console" v-if="hasConcole">
             <h2>平台数据</h2>
             <el-row :gutter="20">
                 <el-col :span="6">
@@ -36,31 +36,38 @@
 
   export default {
     name: 'admin-console',
+    props:['hasConcole'],
     data: function () {
       return {
         orderCount: '...',
         authCount: '...'
       }
     },
-    created() {
-      api.getOrderNum().then((res) => {
-        const result = res.data;
-        if (result.code == '0') {
-          this.orderCount = result.data.count;
+    beforeRouteEnter(to,form,next){
+      next(vm=>{
+        if(!vm.hasConcole){
+          vm.$emit('redirect-page');
+          return;
         }
-      }).catch((error) => {
-        console.log(error)
+        //获取控制台默认显示数字
+        api.getOrderNum().then((res) => {
+          const result = res.data;
+          if (result.code == '0') {
+            vm.orderCount = result.data.count;
+          }
+        }).catch((error) => {
+          console.log(error)
+        });
+        api.getAuthNum().then((res) => {
+          const result = res.data;
+          if (result.code == '0') {
+            vm.authCount = result.data.count;
+          }
+        }).catch((error) => {
+          console.log(error)
+        });
       });
-      api.getAuthNum().then((res) => {
-        const result = res.data;
-        if (result.code == '0') {
-          this.authCount = result.data.count;
-        }
-      }).catch((error) => {
-        console.log(error)
-      });
-
-    }
+    },
   }
 </script>
 

+ 3 - 3
src/components/common/Crumbs.vue

@@ -1,5 +1,5 @@
 <template>
-    <div class="container clearfix">
+    <div class="container clearfix" :style="{'minWidth':minWidth?minWidth:'980px'}">
         <img v-if="linkTo" class="return-btn fl" src="../../images/return.png" alt="返回按钮" @click="goBack">
         <h4 class="fl">{{title}}</h4>
         <div class="contents fr">
@@ -11,7 +11,7 @@
 <script>
   export default {
     name: 'crumbs',
-    props: ['title','linkTo'],
+    props: ['title','linkTo','minWidth'],//minWidth-有些头部选项比较多,最小宽度需要调整
     data: function () {
       return {}
     },
@@ -38,7 +38,7 @@
         line-height: 40px;
         position: absolute;
         z-index: 5;
-        min-width: 980px;
+        // min-width: 980px;
     }
 
     .return-btn{

+ 15 - 5
src/components/common/HomePage.vue

@@ -23,7 +23,7 @@
                 </div>
             </el-header>
             <el-main>
-              <router-view v-on:status-change="changeStatus"></router-view>
+              <router-view v-if="ok" v-on:status-change="changeStatus" v-on:redirect-page="redirectPage" :hasConcole="hasConcole"></router-view>
             </el-main>
         </el-container>
     </el-container>
@@ -41,7 +41,7 @@
     components: {
       'lt-badge': LtBadge,
       'lt-menu': LtMenu,
-			'console': Console
+      'console': Console
     },
     data: function () {
       return {
@@ -49,7 +49,9 @@
         organization: null,
         userLoginDTO: null,
         authStatus: null,
-        authStatusName:''
+        authStatusName:'',
+        ok:false,           //是否已获取到菜单
+        hasConcole:true         //是否有控制台权限,登录后跳转用
       }
     },
     computed: {
@@ -57,11 +59,16 @@
         return this.userLoginDTO && this.userLoginDTO.type == '0' ? 'user' : 'admin';
       }
     },
-    created() {
+    created () {
       //获取菜单
       api.getAccessdMenu().then((res) => {
         if (res.data.code == '0') {
           const data = res.data.data;
+            this.ok = true;
+            const hasConcole=data.menuWrappers.findIndex((it)=>{
+              return it.code == 'LT-KZT'
+            });
+          this.hasConcole = hasConcole!=-1;
           this.menuWrappers = data.menuWrappers;
           this.organization = data.organization;
           this.userLoginDTO = data.userLoginDTO;
@@ -70,9 +77,12 @@
       }).catch((error) => {
         console.log(error);
       });
-
     },
     methods: {
+      redirectPage(){
+        const url = this.getRole=='user'?'/user':'/admin';
+        this.$router.push({path:url});
+      },
       changeStatus(text){       //账号信息中提交认证后修改状态
         this.authStatus = 2;
         this.authStatusName = text;

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

@@ -6,7 +6,7 @@
         <div class="contents">
             <el-form ref="form" :label-position="labelPosition" :model="form" :rules="rules" label-width="100px" class="add-admin-form">
                 <el-form-item label="科室名称:" prop="name">
-                    <el-input v-model="form.name" placeholder="请输入科室名称"></el-input>
+                    <el-input v-model="form.name" placeholder="请输入科室名称" maxlength="30"></el-input>
                 </el-form-item>
                 <el-form-item label="描述:" prop="remark">
                     <el-input type="textarea" :rows="3" placeholder="请输入科室描述" v-model="form.remark" maxlength="1024"></el-input>

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

@@ -13,7 +13,7 @@
                 ref="submitForm"
         ></PubIndeptTag>
         <div class="main">
-            <p class="title" v-if="dataPub.region2==1||dataPub.region2==2||dataPub.region2==99"> <i>*</i> 标签明细:</p>
+            <p class="title" v-if="dataPub.region2==1||dataPub.region2==2"> <i>*</i> 标签明细:</p>
             <SingleSelect v-if="dataPub.region2==1 || dataPub.region2==2" :ascription="dataPub.region1" :sexType="dataPub.region7" :type="dataPub.region2" @pushValues="pushValues" :options="editData.questionDetailList"></SingleSelect>
             <div class="btn">
                 <el-button

+ 213 - 0
src/components/icss/AddMedicalName.vue

@@ -0,0 +1,213 @@
+<template>
+  <div>
+    <crumbs :title="minTitle" linkTo="/admin/LT-YXSYKWH-YXSYMMWH"></crumbs>
+    <div class="contents">
+      <div class="content">
+        <h3>添加术语:</h3>
+        <p class="titl">标准术语:</p>
+        <table class="deptbox">
+          <tr>
+            <td class="ind">序号</td>
+            <td>标准词</td>
+            <td>类型</td>
+            <td class="desc">说明</td>
+          </tr>
+          <tr>
+            <td class="ind">1</td>
+            <td>
+              <el-input v-model="data.name" placeholder="请输入术语" maxlength="30"></el-input>
+            </td>
+            <td>
+              <el-select v-model="data.type" clearable placeholder="请选择">
+                <el-option
+                  v-for="item in data.typeList"
+                  :key="item.key"
+                  :label="item.name"
+                  :value="item.key">
+                </el-option>
+              </el-select>
+            </td>
+            <td class="desc">
+              <el-input v-model="data.mark" placeholder="请输入术语说明" maxlength="120"></el-input>
+            </td>
+          </tr>
+        </table>
+        <p class="titl">同义词:</p>
+        <table class="deptbox">
+          <tr>
+            <td class="ind">序号</td>
+            <td>术语</td>
+            <td>类型</td>
+            <td class="desc">说明</td>
+            <td v-if="id">操作</td>
+          </tr>
+          <tr v-for="(item,index) in synonymous">
+            <td class="ind">{{index+1}}</td>
+            <td>
+              <el-input v-model="item.term" placeholder="请输入术语" maxlength="30"></el-input>
+            </td>
+            <td>
+              <el-select v-model="item.type" clearable placeholder="请选择">
+                <el-option
+                  v-for="item in data.typeList"
+                  :key="item.key"
+                  :label="item.name"
+                  :value="item.key">
+                </el-option>
+              </el-select>
+            </td>
+            <td class="desc">
+              <el-input v-model="item.mark" placeholder="请输入术语说明" maxlength="120"></el-input>
+            </td>
+            <td v-if="id">
+              <span @click="deleLine(index)">删除</span>
+            </td>
+          </tr>
+          <tr @click="addSpan">
+            <td :colspan="colspan" class="addSpan">+</td>
+          </tr>
+        </table>
+        <div class="btn">
+          <el-button
+            type="primary"
+            @click="comfirn"
+          >确 定</el-button>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+<script type="text/javascript">
+  export default {
+    name:'AddMedicalName',
+    data(){
+      return{
+        minTitle:'医学术语命名维护-添加',
+        data:{
+          name:'',
+          type:'',
+          mark:'', 
+          type:'',
+          typeList:[
+            {
+              name:'类型1',
+              id:1,
+              key:1
+            },
+            {
+              name:'类型2',
+              id:2,
+              key:2
+            },
+            {
+              name:'类型3',
+              id:3,
+              key:3
+            },
+          ]
+        },
+        id:null,
+        synonymous:[//同义词
+            {
+              term:'',
+              id:1,
+              type:'',
+              mark:''
+            },
+            {
+              term:'',
+              id:2,
+              type:'',
+              mark:''
+            },
+            {
+              term:'',
+              id:3,
+              type:'',
+              mark:''
+            },
+          ],
+        colspan:4
+      }
+    },
+    created(){
+      const info = this.$route.params.info;
+      if(info){
+        this.minTitle = '医学术语命名维护-修改';
+        this.id = info.id;
+        this.colspan = 5;
+      }
+    },
+    methods:{
+      handleInput(){//限制输入类型
+
+      },
+      addSpan(){
+        // let index = this.synIndex;
+        // index++
+        let singleSpan = {
+          // index:index,
+          term:'',
+          id:null,
+          type:'',
+          mark:''
+        }
+        this.synonymous.push(singleSpan);
+        // this.synIndex = index;
+      },
+      deleLine(index){
+        this.synonymous.splice(index,1);
+        console.log(123,index,this.synonymous);
+      },
+      comfirn(){
+
+      }
+    }
+  }
+</script>
+<style lang="less" scoped>
+   @import "../../less/admin.less";
+  .content{
+    background: #fff;
+    padding: 20px 20px 30px;
+    color: #545455;
+  }
+  .titl{
+    margin: 25px 0 10px;
+  }
+  .deptbox{
+    // width: 100%;
+    background: #fff;
+    padding: 20px 10px 30px;
+    font-size: 14px;
+    text-align: left;
+    border-collapse: collapse;
+    >tr{
+      height: 30px;
+      text-align: center;
+      td{
+        width: 135px;
+        border: 1px solid #666;
+        padding:5px;
+      }
+      input{
+        border:none;
+        width: 100%;
+      }
+      .ind{
+        width: 55px;
+      }
+      .desc{
+        width: 280px;
+      }
+    }
+    .addSpan{
+      text-align: center;
+      cursor: pointer;
+    } 
+  }
+  .btn {
+    text-align: right;
+    margin-top: 20px;
+  }
+</style>

+ 151 - 0
src/components/icss/AddMedicalRelation.vue

@@ -0,0 +1,151 @@
+<template>
+  <div>
+    <crumbs title="医学术语关系-添加" linkTo="/admin/LT-YXSYKWH-YXSYGXWH"></crumbs>
+    <div class="contents">
+      <div class="content">
+        <p>明细</p>
+        <div class="search">
+          <span>起始术语搜索:</span>
+          <el-input size="small" v-model="firstInput" placeholder="输入术语"></el-input>
+        </div>
+        <div class="search">
+          <span>终点术语搜索:</span>
+          <el-input size="small" v-model="endInput" placeholder="输入术语"></el-input>
+        </div>
+        <table class="deptbox">
+          <tr>
+            <td>起始术语</td>
+            <td>类型</td>
+            <td>关系</td>
+            <td>终点术语</td>
+            <td>类型</td>
+          </tr>
+          <tr>
+            <td>
+              <span>起始术语</span>
+            </td>
+            <td>
+              <el-select v-model="data.firstType" clearable placeholder="请选择" size="mini">
+                <el-option
+                  v-for="item in data.typeList"
+                  :key="item.key"
+                  :label="item.name"
+                  :value="item.key">
+                </el-option>
+              </el-select>
+            </td>
+            <td>
+              <el-select v-model="data.relation" clearable placeholder="请选择" size="mini">
+                <el-option
+                  v-for="item in data.typeList"
+                  :key="item.key"
+                  :label="item.name"
+                  :value="item.key">
+                </el-option>
+              </el-select>
+            </td>
+            <td>
+              <span>终点术语</span>
+            </td>
+            <td>
+              <el-select v-model="data.endType" clearable placeholder="请选择" size="mini">
+                <el-option
+                  v-for="item in data.typeList"
+                  :key="item.key"
+                  :label="item.name"
+                  :value="item.key">
+                </el-option>
+              </el-select>
+            </td>
+          </tr>
+        </table>
+        <div class="btn">
+          <el-button
+            type="primary"
+            @click="comfirn"
+          >确 定</el-button>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+<script type="text/javascript">
+  export default {
+    name:'AddMedicalRelation',
+    data(){
+      return{
+        data:{
+          type:'',
+          typeList:[
+            {
+              name:'类型1',
+              id:1,
+              key:1
+            },
+            {
+              name:'类型2',
+              id:2,
+              key:2
+            },
+            {
+              name:'类型3',
+              id:3,
+              key:3
+            },
+          ]
+        },
+        firstInput:'',
+        endInput:'',
+        relation:'',
+        firstType:'',
+        endType:''
+      }
+    },
+    methods:{
+      comfirn(){
+
+      }
+    }
+  }
+</script>
+<style lang="less" scoped>
+  @import "../../less/admin.less";
+  .content{
+    background: #fff;
+    padding: 20px 20px 30px;
+    color: #545455;
+    .search{
+      width: 185px;
+      display: inline-block;
+      margin: 20px 255px 25px 0;
+      .el-input--small{
+        margin-top: 8px;
+      }
+    }
+  }
+  .deptbox{
+    // width: 100%;
+    background: #fff;
+    padding: 20px 10px 30px;
+    font-size: 14px;
+    text-align: left;
+    border-collapse: collapse;
+    >tr{
+      height: 30px;
+      text-align: center;
+      td{
+        width: 135px;
+        border: 1px solid #666;
+        padding:5px;
+      }
+      input{
+        border:none;
+        width: 100%;
+      }
+    } 
+  }
+  .btn {
+    text-align: right;
+    margin-top: 20px;
+  }
+</style>

+ 237 - 0
src/components/icss/AddMedicinePrompt.vue

@@ -0,0 +1,237 @@
+<template>
+    <div class="NoiseTemplateWrapper TemplateWrapper">
+        <div class="groupTitle"><i
+                class="el-icon-back"
+                @click="back"
+        ></i> 医学静态知识--{{isEdit?'修改':'添加'}}</div>
+        <div class="info-container">
+            <el-form :rules="rules"
+                     :model="form"
+                     label-width="130px"
+                     ref="groups">
+                <el-form-item label="选择术语标签:" prop="selectedTerm">
+                    <el-select v-model="form.selectedTerm"
+                               :disabled="isEdit"
+                               filterable
+                               remote
+                               clearable
+                               value-key="libId"
+                               ref="termName"
+                               placeholder="搜索术语"
+                               :remote-method="searchTerms">
+                        <el-option v-for="term in terms" :key="term.libId" :label="term.name" :value="term" ></el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="已选择术语标签:">
+                    {{form.selectedTermName}}
+                </el-form-item>
+                <el-form-item label="添加静态知识">
+                </el-form-item>
+                <InfoParagraph v-for="(f,i) in form.prags"
+                               :data="f"
+                               :index="i"
+                               :isEdit = "isEdit"
+                               @change="getPgValues"
+                               @add="addParagraph"
+                               @del="delParagraph" ref="subForm"></InfoParagraph>
+            </el-form>
+            <div class="btn">
+                <el-button
+                        type="primary"
+                        @click="submitForm"
+                >确 定</el-button>
+            </div>
+        </div>
+    </div>
+</template>
+<script>
+  /**
+   *
+   */
+  import api from '@api/icss.js';
+  import InfoParagraph from './InfoParagraph';
+
+  export default {
+    name: 'AddMedicinePrompt',
+    components: {
+      InfoParagraph
+    },
+    data() {
+      return {
+        isEdit:false,
+        terms:[],              //术语列表
+        editData:{
+          selectedTerm:'',
+          prags:[]
+        },
+        form:{
+          selectedTerm:'',            //术语标签
+          selectedTermName:'',
+          prags:[{              //单个段落相关
+            title:'',
+            content:'',
+            isReason:0,
+            orderNo:0,
+            position:[],
+            text:''}]
+        },
+        rules: {
+          selectedTerm: [
+            { required: true, message: '请选择术语标签', trigger: 'change' }
+          ]
+        }
+      }
+    },
+    watch:{
+      'form.selectedTerm':function(newVal){
+        const name = newVal.name;
+        this.form.selectedTermName = name;
+      }
+    },
+    created:function(){
+      const {isEdit,data} = this.$route.params;
+      if(isEdit){
+        this.isEdit = isEdit;
+      }
+    },
+    methods: {
+      back() { this.$router.go(-1) },
+      searchTerms(query){
+        //搜索术语列表
+        api.getConceptInfo({term:query,type:''}).then((res) =>{
+          if(res.data.code === '0') {
+            this.terms = res.data.data;
+          }else{
+            this.warning("数据获取失败");
+          }
+        })
+      },
+      mapStringToNum(str){
+        return str.split(",").map((it)=>{
+          return +it;
+        })
+      },
+      parseData(info){
+        let detail = [];
+        info.details.forEach((it)=>{
+          detail.push(Object.assign({},it,{position:this.mapStringToNum(it.position)}));
+        });
+        return {
+          name:info.name,
+          tagFor:info.questionList[0].type+'',
+          selectedTags:info.questionList,
+          prags:detail
+        };
+      },
+      addParagraph(){
+        this.form.prags.push({title:'',
+          content:'',
+          isReason:0,
+          orderNo:0,
+          position:[],
+          text:''});
+      },
+      delParagraph(i){
+        if(this.form.prags.length==1){
+          this.warning('只剩一个段落,不能再删啦!');
+          return;
+        }
+        this.showConfirmDialog('确定要删除该段落?', () => {
+          this.form.prags.splice(i,1);
+        });
+      },
+      getPgValues(i,data){
+        this.form.prags[i] = data;
+        //console.log(data,this.form.prags);
+      },
+      submitForm() {
+        //验证外层表单
+        let goOn=true,it=null;
+        this.$refs.groups.validate((valid) =>{
+          if(!valid){
+            goOn = false;
+            return false;
+          }
+        });
+        //验证段落表单
+        for(let i=0;i<this.$refs.subForm.length;i++){
+          it=this.$refs.subForm[i];
+          it.$refs.form.validate((valid) =>{
+            if(!valid){
+              goOn = false;
+            }
+          });
+        };
+
+        if(!goOn){
+          return;
+        }
+        //通过必填验证,提交保存
+        const param = {
+          name:this.form.selectedTerm.libId,
+          detailVOList:Object.assign(this.form.prags)
+        };
+        console.log(param);
+        this.showSaveDialog(param);
+      },
+      showSaveDialog(param) {
+        this.showConfirmDialog('是否保存该静态知识?', () => {
+          api.saveTermPrompts(param).then((res) => {
+            if (res.data.code === '0') {
+              this.warning(res.data.msg || '保存成功', 'success');
+              this.$router.push("/admin/LT-YXSYKWH-YXSYJTZSWH");
+            } else {
+              this.warning(res.data.msg)
+            }
+          }).catch((err) => {
+            this.warning(err);
+          })
+        });
+      },
+      showConfirmDialog(msg, resolve) {
+        this.$alert(msg, '提示', {
+          confirmButtonText: '确定',
+          type: 'warning'
+        }).then(() => {
+          resolve();
+        }).catch(() => {});
+      },
+      warning(msg, type) {
+        this.$message({
+          showClose: true,
+          message: msg,
+          type: type || 'warning'
+        })
+      },
+    }
+  }
+</script>
+<style lang="less">
+    @import "../../less/common.less";
+    .info-container{
+        background: #fff;
+        padding: 20px;
+        margin: 20px 20px -20px 20px;
+    .el-input__inner{
+        width: 200px;
+    }
+    .el-form-item__label{
+        text-align: left;
+    }
+    .add-prg .el-form-item{
+        margin-bottom: 20px;
+    }
+    }
+    .line{
+        border-top:1px #dcdfe6 solid;
+        margin-bottom: 25px;
+
+    }
+    .NoiseTemplateWrapper .info-container .el-input__inner{
+       width: 250px;
+    }
+    .NoiseTemplateWrapper .el-select .el-input .el-icon-circle-close{
+        display: inherit!important;
+    }
+</style>
+

+ 141 - 83
src/components/icss/AddPromptInfo.vue

@@ -3,44 +3,34 @@
         <div class="groupTitle"><i
                 class="el-icon-back"
                 @click="back"
-        ></i> 提示信息维护--添加</div>
+        ></i> 提示信息维护--{{isEdit?'修改':'添加'}}</div>
         <div class="info-container">
             <el-form :rules="rules"
                      :model="form"
                      label-width="130px"
                      ref="groups">
                 <el-form-item label="静态知识名称:" prop="name">
-                    <el-input v-model="form.name"></el-input>
+                    <el-input v-model="form.name" :disabled="isEdit"></el-input>
                 </el-form-item>
+                <InfoParagraph v-for="(f,i) in form.prags"
+                               :data="f"
+                               :index="i"
+                               :isEdit = "isEdit"
+                               @change="getPgValues"
+                               @add="addParagraph"
+                               @del="delParagraph" ref="subForm"></InfoParagraph>
                 <p class="line"></p>
-                <el-form-item label="是否属于诊断:" prop="isReason">
-                    <el-select v-model="form.isReason" placeholder="请选择">
-                        <el-option label="否" value="0"></el-option>
-                        <el-option label="是" value="1"></el-option>
-                    </el-select>
+                <el-form-item label="关联标签:" prop="tags">
+                    <el-form-item label="标签归属:">
+                        <el-select placeholder="标签归属" v-model="form.tagFor" clearable>
+                            <el-option v-for="item in Adscriptions" :label="item.name" :value="item.val" :key="item.id" ></el-option>
+                        </el-select>
+                    </el-form-item>
+                    <TagPool :pool="tagPool"
+                             :type="form.tagFor"
+                             :selected="editData.selectedTags"
+                             @changeActionData="changeActionData"></TagPool>
                 </el-form-item>
-                <el-form-item label="显示位置:" prop="position">
-                    <el-checkbox-group v-model="form.position">
-                        <el-checkbox v-for="it in positions" :key="it.key" :label="it.name" :value="it.key" name="position"></el-checkbox>
-                    </el-checkbox-group>
-                </el-form-item>
-                <el-form-item label="添加段落:" prop="addPrg">
-                    <div class="add-prg">
-                        <el-form-item label="标题" prop="title" label-width="80px">
-                            <el-input v-model="form.title"></el-input>
-                        </el-form-item>
-                        <el-form-item label="内容" prop="desc" label-width="80px">
-                            <InfoUeditor v-model="msg" :config="config"></InfoUeditor>
-                        </el-form-item>
-                    </div>
-                </el-form-item>
-                <el-form-item>
-                    <el-button>添加段落</el-button >
-                </el-form-item>
-                <p class="line"></p>
-                <TagPool :pool="tagPool"
-                         :sexType="sexType"
-                         @changeActionData="changeActionData"></TagPool>
                 </el-form>
                 <div class="btn">
                     <el-button
@@ -58,92 +48,160 @@
   import api from '@api/icss.js';
   import utils from '@api/utils.js';
   import TagPool from './PromptTagPool';
-  import InfoUeditor from 'vue-ueditor-wrap';
+  import schema from 'async-validator';
+  import InfoParagraph from './InfoParagraph';
+
   export default {
     name: 'AddPromptInfo',
     components: {
       TagPool,
-      InfoUeditor
+      InfoParagraph
     },
     data() {
+      const validateTags = (rule,value,callback)=>{
+        if(this.form.selectedTags.length==0){
+          this.warning('请选择关联标签!');
+          return;
+        }
+        callback();
+      };
       return {
-        msg:'',
-        config:{
-          initialFrameWidth: null,
-          initialFrameHeight: 350,
-          imageUrlPrefix:"http://192.168.2.236:82",
-          serverUrl: '/api/icssman/file/uploadImage',
-          UEDITOR_HOME_URL: '/UEditor/',        //静态文件路径
-          toolbars:[['source','undo','redo','bold','italic','underline','fontborder','strikethrough','superscript','subscript','removeformat','formatmatch','autotypeset','blockquote',
-            'pasteplain','forecolor','backcolor','insertorderedlist','insertunorderedlist','selectall',
-            'cleardoc','rowspacingtop','rowspacingbottom','lineheight','customstyle','paragraph',
-            'fontfamily','fontsize','directionalityltr','directionalityrtl','indent','justifyleft',
-            'justifycenter','justifyright','justifyjustify','touppercase','tolowercase','link','simpleupload','insertimage','horizontal',
-            'date','time','spechars','fullscreen']]      //自定义工具
+        isEdit:false,
+        tagPool:[],                 //标签池数据
+        Adscriptions:[],            //归属列表
+        editData:{
+          tagFor:'',
+          selectedTags:[],
+          prags:[]
         },
-        tagPool:[],
-        sexType:'1',
-        positions:[],
         form:{
           name:'',
-          isReason:'0',
-          position:[]
+          tagFor:'',
+          selectedTags:[],            //关联标签
+          prags:[{              //单个段落相关
+            title:'',
+            content:'',
+            isReason:0,
+            orderNo:0,
+            position:[],
+            text:''}]
         },
         rules: {
           name: [
             { required: true, message: '静态知识名称不能为空', trigger: 'change' }
           ],
-          isReason: [
-            { required: true, message: '请选择是否属于诊断', trigger: 'change' }
-          ],
-          position: [
-            { required: true, message: '请选择显示位置', trigger: 'change' }
-          ],
+          tags:[
+            { required: true, validator: validateTags, trigger: 'submit' }
+          ]
         }
       }
     },
     created:function(){
       const {isEdit,data} = this.$route.params;
-      //显示位置枚举列表
-      const pos = localStorage.getItem("icssEnumsData");
-      this.positions = JSON.parse(pos)&&JSON.parse(pos).introducePositionEnum;
+      this.getDropList();           //标签归属列表获取
       if(isEdit){
-        this.editData = data;
+        this.isEdit = isEdit;
+        const id = data.id;
+        api.getPrompDetail({id}).then((res) =>{
+          if(res.data.code === '0') {
+            this.form = this.parseData(res.data.data);
+            this.editData = Object.assign({},this.form);
+          }else{
+            this.warning("数据获取失败");
+          }
+        })
       }
     },
     methods: {
       back() { this.$router.go(-1) },
-      submitForm() {      // 调用子组件的方法验证公用部分
-        this.$refs.groups.validate((valid) => {
-          if (valid) {
-            //this.$emit('validatePass', this.form, false)
-          } else {
-            console.log('error submit!!');
-            return false;
-          }
-        });;
+      mapStringToNum(str){
+        return str.split(",").map((it)=>{
+          return +it;
+        })
       },
-      changeActionData(){
-
+      parseData(info){
+        let detail = [];
+        info.details.forEach((it)=>{
+          detail.push(Object.assign({},it,{position:this.mapStringToNum(it.position)}));
+        });
+        return {
+          name:info.name,
+          tagFor:info.questionList[0].type+'',
+          selectedTags:info.questionList,
+          prags:detail
+        };
       },
-      validatePass() {      //验证成功回调,调取接口
-        //仍需验证标签明细是否选择
-        /*if (this.itemsTypes.includes(+this.dataPub.region2)&&this.options.length==0) {
-          this.$message({
-            message: '至少填一个选项',
-            type: 'warning'
-          });
+      addParagraph(){
+        this.form.prags.push({title:'',
+          content:'',
+          isReason:0,
+          orderNo:0,
+          position:[],
+          text:''});
+      },
+      delParagraph(i){
+        if(this.form.prags.length==1){
+          this.warning('只剩一个段落,不能再删啦!');
           return;
-        }*/
-        const {isEdit,data} = this.$route.params;
-        let param = {
+        }
+        this.showConfirmDialog('确定要删除该段落?', () => {
+            this.form.prags.splice(i,1);
+        });
+      },
+      getPgValues(i,data){
+        this.form.prags[i] = data;
+        //console.log(data,this.form.prags);
+      },
+      getDropList() {
+        return api.getDropList().then((res) =>{
+          if(res.data.code === '0') {
+            this.Adscriptions = res.data.data[1];
+          }
+        })
+      },
+      submitForm() {
+        //验证外层表单
+        let goOn=true,it=null;
+        this.$refs.groups.validate((valid) =>{
+          if(!valid){
+            goOn = false;
+            return false;
+          }
+        });
+        //验证段落表单
+        for(let i=0;i<this.$refs.subForm.length;i++){
+          it=this.$refs.subForm[i];
+          it.$refs.form.validate((valid) =>{
+            if(!valid){
+              goOn = false;
+            }
+          });
+        };
 
+        if(!goOn){
+          return;
+        }
+        //通过必填验证,提交保存
+       const param = {
+          name:this.form.name,
+          detailVOList:Object.assign(this.form.prags),
+          mapVOList:Object.assign(this.form.selectedTags)
         };
-        this.showSaveDialog(param);
+        //console.log(param);
+         this.showSaveDialog(param);
+      },
+      parseTagsForSubmit(data){
+        return data.map((it)=>{
+          return {questionId:it.id,introduceId:'',type:it.type};
+        });
+      },
+      changeActionData(selectedTags){
+        this.form.selectedTags = this.parseTagsForSubmit(selectedTags);
+        //console.log(selectedTags)
       },
       showSaveDialog(param) {
-        this.showConfirmDialog('是否保存该标签?', () => {
-          api.saveOrUpdate(param).then((res) => {
+        this.showConfirmDialog('是否保存该静态知识?', () => {
+          api.savePrompts(param).then((res) => {
             if (res.data.code === '0') {
               this.warning(res.data.msg || '保存成功', 'success');
               this.$router.push("/admin/LT-YXSJWH-TSXXWH");

+ 41 - 15
src/components/icss/AddSimilarName.vue

@@ -21,14 +21,21 @@
             <td>拼音</td>
           </tr>
           <tr v-if="flag" v-for="item in selfName">
-           <!--  <td class="desc">{{item.retrievalName}}</td>
-            <td>{{item.retrievalSpell}}</td> -->
-            <td><input type="text" name="" v-model="item.retrievalName"></td>
-            <td><input type="text" name="" v-model="item.retrievalSpell"></td>
+           <!-- 本体名字不能修改 3-15 -->
+            <td>
+              <!-- <input type="text" name="" v-model="item.retrievalName" maxlength="30" @input="handleInput"> -->
+              <p>{{item.retrievalName}}</p>
+            </td>
+            <td>
+              <input type="text" name="" v-model="item.retrievalSpell" maxlength="30" @input="handlePinyin">
+            </td>
           </tr>
           <tr v-if="!flag" v-for="(i,index) in selfEmpty">
-            <td><input type="text" name="" v-model="selfEmpty[index].retrievalName"></td>
-            <td><input type="text" name="" v-model="selfEmpty[index].retrievalSpell"></td>
+            <td>
+              <!-- <input type="text" name="" v-model="selfEmpty[index].retrievalName" maxlength="30" @input="handleInput"> -->
+              <p>{{i.retrievalName}}</p>
+            </td>
+            <td><input type="text" name="" v-model="i.retrievalSpell" maxlength="30" @input="handlePinyin"></td>
           </tr>
         </table>
         <p class="subtitle">别名添加:</p>
@@ -38,12 +45,12 @@
             <td>拼音</td>
           </tr>
           <tr v-if="retrievalNames.length>0" v-for="it in retrievalNames">
-            <td><input type="text" name="" v-model="it.retrievalName"></td>
-            <td><input type="text" name="" v-model="it.retrievalSpell"></td>
+            <td><input type="text" name="" v-model="it.retrievalName" maxlength="30" @input="handleInput"></td>
+            <td><input type="text" name="" v-model="it.retrievalSpell" maxlength="30" @input="handlePinyin"></td>
           </tr>
           <tr v-for="(i,index) in retrievalEmpty">
-            <td><input type="text" name="" v-model="retrievalEmpty[index].retrievalName"></td>
-            <td><input type="text" name="" v-model="retrievalEmpty[index].retrievalSpell"></td>
+            <td><input type="text" name="" v-model="retrievalEmpty[index].retrievalName" maxlength="30" @input="handleInput" @blur="handleBlur(index,2)"></td>
+            <td><input type="text" name="" v-model="retrievalEmpty[index].retrievalSpell" maxlength="30" @input="handlePinyin"></td>
           </tr>
           <tr @click="addSpan(2)">
             <td colspan="2" class="addSpan">+</td>
@@ -56,12 +63,12 @@
             <td>拼音</td>
           </tr>
           <tr v-if="retrievalSonNames.length>0" v-for="v in retrievalSonNames">
-            <td><input type="text" name="" v-model="v.retrievalName"></td>
-            <td><input type="text" name="" v-model="v.retrievalSpell"></td>
+            <td><input type="text" name="" v-model="v.retrievalName" maxlength="30" @input="handleInput"></td>
+            <td><input type="text" name="" v-model="v.retrievalSpell" maxlength="30" @input="handlePinyin"></td>
           </tr>
           <tr v-for="(k,index) in sonEmpty">
-            <td><input type="text" name="" v-model="sonEmpty[index].retrievalName"></td>
-            <td><input type="text" name="" v-model="sonEmpty[index].retrievalSpell"></td>
+            <td><input type="text" name="" v-model="sonEmpty[index].retrievalName" maxlength="30" @input="handleInput" @blur="handleBlur(index,3)"></td>
+            <td><input type="text" name="" v-model="sonEmpty[index].retrievalSpell" maxlength="30" @input="handlePinyin"></td>
           </tr>
           <tr @click="addSpan(3)">
             <td colspan="2" class="addSpan">+</td>
@@ -79,6 +86,7 @@
 </template>
 <script type="text/javascript">
   import api from '@api/icss.js';
+  import pinyin from '../../js/Convert_Pinyin.js'
   export default{
     name:'AddSimilarName',
     data(){
@@ -212,7 +220,7 @@
         }
         api.searchLable(param).then((res)=>{
           const result = res.data;
-          console.log(123,result);
+          // console.log(123,result);
           if(result.code==0){
             this.searchDatas = result.data;
             if(result.data.length>0){
@@ -229,10 +237,28 @@
         this.id = item.id;
         this.showFlag = false;
         this.searchStr = "";
+        this.selfEmpty[0].retrievalName = this.name;
+        this.selfEmpty[0].retrievalSpell = pinyin.getCamelChars(this.name);
+        // console.log("标签拼音:",pinyin.getCamelChars(this.name));
       },
       close(){
         this.showFlag = false;
         this.searchStr = "";
+      },
+      handleInput(e){//名字只能输入中文、英文和数字
+        e.target.value = e.target.value.replace(/[^0-9a-zA-Z\u4e00-\u9fa5]/g,'');
+      },
+      handlePinyin(e){//只能输入英文
+        e.target.value = e.target.value.replace(/[^a-zA-Z]/g,'');
+      },
+      handleBlur(index,flag){
+        if(flag==2){//别名
+          let current = this.retrievalEmpty[index];
+          current.retrievalSpell = pinyin.getCamelChars(current.retrievalName);
+        }else if(flag==3){//子项
+          let sonCurrent = this.sonEmpty[index];
+          sonCurrent.retrievalSpell = pinyin.getCamelChars(sonCurrent.retrievalName);
+        }  
       }
     },
     watch:{

+ 137 - 0
src/components/icss/AddVersion.vue

@@ -0,0 +1,137 @@
+<template>
+  <div>
+    <crumbs :title="title" linkTo="/admin/LT-YXSJWH-BBXXWH"></crumbs>
+    <div class="contents">
+      <div class="content">
+        <el-form ref="form" :label-position="labelPosition" label-width="95px" class="add-admin-form" :model="form" :rules="rules">
+          <el-form-item label="版本号:" prop="name">
+              <el-input v-model="form.name" placeholder="请输入版本号" maxlength="120"></el-input>
+          </el-form-item>
+          <el-form-item label="版本时间:" prop="refreshTime">
+            <el-date-picker
+              v-model="form.refreshTime"
+              type="date"
+              placeholder="选择日期"
+              :picker-options="pickerOptions1"
+              value-format="yyyy-MM-dd"
+              :clearable='false'>
+            </el-date-picker>
+          </el-form-item>
+          <el-form-item label="版本备注:" prop="remark" class="discDesc">
+              <el-input type="textarea" :rows="3" placeholder="请输入版本备注" v-model="form.remark" maxlength="120"></el-input>
+          </el-form-item>
+          <el-form-item label="版本说明:" v-if="list.length>0">
+          </el-form-item>
+        </el-form>
+        <VersionDesc v-if="id" :detail="list" :versionId="id" :isFirst="isFirst"/>
+        <el-button class="disclButn" size="small" type="primary" @click="comfirn">确定</el-button>
+      </div>    
+    </div>
+  </div>
+</template>
+<script type="text/javascript">
+  import api from '@api/icss.js';
+  import VersionDesc from './VersionDesc.vue';
+  export default {
+    name:'AddVersion',
+    data(){
+      return{
+        // data:{},
+        list:[],
+        labelPosition:'left',
+        isFirst:false,
+        title:'版本信息维护-添加版本信息',
+        form:{
+          name:'',
+          refreshTime:'',
+          remark:''
+        },
+        id:null,
+        rules:{
+          name:{ required: true, message: '请输入版本号', trigger: ['blur', 'change'] },
+          refreshTime:{ required: true, message: '请选择时间', trigger: ['blur', 'change'] }
+        },
+        pickerOptions1:{
+          disabledDate(time) {
+            return time.getTime() < Date.now();
+          },
+        }
+      }
+    },
+    created(){
+      let info = this.$route.params.info;
+      if(info){
+        this.id = info.id;
+        this.form.name = info.name;
+        this.form.refreshTime = info.refreshTime;
+        this.form.remark = info.remark;
+        this.title = "版本信息维护-修改版本信息";
+        this.isFirst = true;
+        this.getList();
+      }
+    },
+    methods:{
+      getList(){
+        api.getVersionDetlInfo({id:this.id}).then((res)=>{
+          const result = res.data;
+          if(result.code==0){
+            this.list = result.data;
+          }else{
+            this.$message.error(result.msg);
+          }
+        })
+      },
+      comfirn(){
+        if(this.id){//修改
+          const param = Object.assign({},this.form,{id:this.id})
+          api.updateVersInfo(param).then((res)=>{
+            if(res.data.code==0){
+              this.$message({
+                message:"修改成功",
+                type:'success'
+              })
+              this.$router.push({path: 'LT-YXSJWH-BBXXWH'});
+            }else{
+              this.$message.error(res.data.msg);
+            }
+          })
+        }else{//添加
+          api.addVersInfo(this.form).then((res)=>{
+            if(res.data.code==0){
+              this.$message({
+                message:"添加成功",
+                type:'success'
+              })
+              this.$router.push({path: 'LT-YXSJWH-BBXXWH'});
+            }else{
+              this.$message.error(res.data.msg);
+            }
+          })
+        }
+      },
+    },
+    components:{
+      VersionDesc
+    }
+  }
+</script>
+<style lang="less" scoped>
+  @import "../../less/admin.less";
+  .content{
+    background: #fff;
+    // padding: 20px 20px 30px;
+    padding: 20px 20px 50px;
+    color: #545455;
+    min-width: 980px;
+    position: relative;
+    .discDesc{
+      margin-bottom: 20px;
+    }
+    .disclButn{
+      position: absolute;
+      right: 80px;
+      bottom: 0px;
+    }
+  }
+
+</style>

+ 254 - 126
src/components/icss/CommonTemplate.vue

@@ -38,53 +38,64 @@
     </div>
     <div class="bottomPartRight bottomPartRightTemplate">
       <p class="poolTitle">模板内容:</p>
-      <el-form
-        class="subTemplate"
-        ref="groups"
-        :model="form"
-      >
-        <el-form-item
-          label="选择归属:"
-          prop="region"
-          size="mini"
-        >
-          <el-select
-            v-model="form.region"
-            placeholder="请选择模板归属"
+      <div class="arrowWrap" style="float:right;marginRight:10px" v-if="type != 1 && type != 2">
+        <i class="el-icon-arrow-left arrowWrapPub" @click="moveTag(0)"></i>
+        <i class="el-icon-arrow-right arrowWrapPub" @click="moveTag(1)"></i>
+      </div>
+      <div class="formWrap" v-if="type == 1 || type == 2">
+          <el-form
+            class="subTemplate"
+            :model="form"
           >
-            <el-option
-              v-for="item in Adscriptions"
-              :label="item.name"
-              :value="item.val"
-              :key="item.id"
-            ></el-option>
-          </el-select>
-          <el-button size="mini">添加</el-button>
-          <el-button size="mini">删除子模板</el-button>
-          <el-button size="mini">插入输入栏</el-button>
-
-          <el-button icon="el-icon-arrow-left" class="changeOrder changeOrderPub"></el-button>
-          <el-button icon="el-icon-arrow-right" class="changeOrderPub"></el-button>
-        </el-form-item>
-      </el-form>
+            <el-form-item
+              label="添加子模板:"
+              prop="region"
+              size="mini"
+            >
+              <el-select
+                v-model="form.region"
+                placeholder="请选择子模板"
+              >
+                <el-option
+                  v-for="item in Adscriptions"
+                  :label="item.name"
+                  :value="item.id"
+                  :key="item.id"
+                ></el-option>
+              </el-select>
+              <el-button size="mini" @click="addDomTemplate(0,'submitForm')">添加</el-button>
+              <el-button size="mini" @click="delSubTemplate">删除子模板</el-button>
+              <el-button size="mini" @click="addDomTemplate(1)">插入输入栏</el-button>
+            </el-form-item>
+          </el-form>
+        <div class="arrowWrap">
+          <i class="el-icon-arrow-left arrowWrapPub" @click="moveTag(0)"></i>
+          <i class="el-icon-arrow-right arrowWrapPub" @click="moveTag(1)"></i>
+        </div>
+      </div>
       <ul class="tagList operationPool templateTagLists">
         <li
           class="tagItem operationItem"
-          v-for="(item) in rightTagsList2"
-          :key='item.id'
+          v-for="(item,idx) in rightTagsList"
+          :key='item.name'
+          @click='selectRightTag(item,idx)'
           :style="getStyle2(item)?styles:null"
-          @click='selectRightTag(item)'
         >
-          <div class="inputBox">
-            <el-input
-              v-if="item.type === 'input'"
-              placeholder=""
-              v-model="item.text"
-            >
-            </el-input>
+          <div class="inputBox" v-if="item.type === 'input'">
+              <el-input
+                placeholder=""
+                v-model="item.text"
+                @change="updataData"
+              >
+              </el-input>
           </div>
           <p
-            v-if="item.tagName"
+            v-if="item.type === 'sub'"
+            class="tagName  ellipsis"
+            :title="'[ '+item.tagName+' ]'"
+          >{{item.tagName}}</p>
+          <p
+            v-if="item.type !== 'input' && item.type !== 'sub'"
             class="tagName  ellipsis"
             :title="'[ '+item.tagName+' ]'"
           >{{item.tagName}} </p>
@@ -107,61 +118,80 @@ export default {
       default: '',
       type: String
     },
-    sexType: {
-      default: '',
-      type: String
-    },
     options: {
-      default: () => [],
-      type: Array
+      default: () => {},
+      type: Object
     },
   },
   data() {
     return {
-      Adscriptions: [
-        { name: '添加病情变化', val: '1', id: '001' },
-        { name: '病程变化', val: '2', id: '002' },
-        { name: '添加其他症状', val: '3', id: '003' },
-      ],
-      form: {
-        region: '1',    //归属
+      Adscriptions: [],     //子模板列表
+      form: {region: ''},    //当前子模板
+      addTag:{
+        text:'',              //输入框内容为空
+        id:'',                //id可以用index做id
+        type:'input',        //sub 子模板
       },
+      subTmpList:[],     //子模板的id用于去重
       leftTagsList: [],
       selectLeftTagsList: [],
       rightTagsList: [],
-      rightTagsList2: [],
       selectRightTagsList: [],
+      selectRightTagsListIndex: [],
       searchVal: '',
       styles: {
         background: '#eae7e7'
       },
     }
   },
+  destroyed: function () {
+    this.searchVal = ''
+  },
   mounted() {
-    this.rightTagsList2 = this.options
-    let newArr = []
-    for (let i = 0; i < this.rightTagsList2.length; i++) {
-      if (this.rightTagsList2[i].tagType == 8) {
-        newArr.push({ text: this.rightTagsList2[i].tagName, type: 'input', id: i + ',,,' })
-      } else {
-        if (i === 0) {
-          newArr.push({ text: '', type: 'input', id: i + ',,,' })
-        }
-        newArr.push(this.rightTagsList2[i])
-        if (!this.rightTagsList2[i + 1] || this.rightTagsList2[i + 1] && this.rightTagsList2[i + 1].tagType != 8) {
-          newArr.push({ text: '', type: 'input', id: i + ',,,,' })
+    this.$nextTick(()=>{
+      if(this.options.id){
+        if(this.options && this.options.data && this.options.data.length>0){
+          let reviewList = this.options.data
+          let tmpSubTmpList = this.subTmpList.slice(0)
+          for(let m = 0;m < reviewList.length;m++){
+            if(reviewList[m].relationModule != null){      //这是子模板,修改有子模板需要记录去重
+              reviewList[m].id = reviewList[m].relationModule + 'sub'
+              reviewList[m].tagName = reviewList[m].relationModuleName
+              reviewList[m].type = 'sub'
+              tmpSubTmpList.push(reviewList[m].relationModule)     
+              this.subTmpList = tmpSubTmpList
+            }else if(reviewList[m].tagType == 8){     //这个是输入框文字
+              reviewList[m].id = m+'1001001001'
+              reviewList[m].type = 'input'
+              reviewList[m].text = reviewList[m].tagName
+            }else{    //这个是标签
+              reviewList[m].id = reviewList[m].questionId
+            }
+          }
+          this.rightTagsList = reviewList
         }
+        this.$emit('changeActionData', this.rightTagsList, false);
+        this.getSubTemplate()
+      }else{
+        this.getSubTemplate()
       }
-    }
-    this.rightTagsList2 = newArr
-    this.$emit('changeActionData', this.rightTagsList2, false);
-    this.searchTagList()
-    // this.leftTagsList = this.pool
-    // console.log('TAGPOOL', this.pool)
+      this.searchTagList()
+    })
   },
   watch: {
-    pool(newVal, preVal) {
-      this.leftTagsList = newVal
+    type(newVal, preVal) {
+      this.searchTagList()       //重新获取标签池数据
+      if(newVal != preVal){
+        this.form = {region: ''}  
+        this.subTmpList = []     //子模板的id用于去重
+        this.leftTagsList = []
+        this.selectLeftTagsList = []
+        this.rightTagsList = []
+        this.selectRightTagsList = []
+        this.selectRightTagsListIndex = []
+        this.searchVal = ''
+        this.getSubTemplate()      //重新获取子模板
+      }
     },
     searchVal(newVal, preVal) {
       if (newVal.trim() == '') {
@@ -172,6 +202,92 @@ export default {
     },
   },
   methods: {
+    updataData(){
+      this.$emit('changeActionData', this.rightTagsList, false);
+    },
+    addDomTemplate(sign,dom){
+      let tmpArr1 = this.rightTagsList.slice(0);
+      let tmpArr2 = this.selectRightTagsListIndex.slice(0);
+      let tmpArr3 = this.subTmpList.slice(0),tmpRegion = this.form.region;
+      let tmpArr4 = this.Adscriptions.filter(item => item.id == tmpRegion);
+      let tmpTag = Object.assign({},this.addTag);     //深度复制obj
+      if(sign == 0){         //添加子模板
+        if(tmpArr4.length == 0){
+          this.$message({
+            message:'请选择子模板',
+            type:'warning'
+          })
+          return false;
+        }
+        tmpTag.type = 'sub'
+        tmpArr3.push(tmpRegion)
+        tmpTag.tagName = tmpArr4[0].name
+        tmpTag.id = tmpArr4[0].id + 'sub'
+        this.subTmpList = tmpArr3  //记录子模板id 
+        this.form.region = ''
+        this.getSubTemplate()
+      }else{     //添加输入框
+        tmpTag.type = 'input'
+      }
+      tmpArr1.push(tmpTag);
+      for(let i =0; i < tmpArr1.length; i++){    //循环右侧所有数据
+        if(tmpArr1[i].type == 'input'){
+          tmpArr1[i].id = i + '1001001001'     //给添加的子模板或者输入框加上id
+        }
+      }
+      this.rightTagsList = tmpArr1;
+      this.$emit('changeActionData', this.rightTagsList, false);
+    },
+    moveTag(dir){
+      let tmpArr1 = this.rightTagsList.slice(0);
+      let tmpArr2 = this.selectRightTagsListIndex.slice(0);
+      let tmpArr3 = this.selectRightTagsList.slice(0);
+      if(dir == 0){     //往左
+        for(let i = 0;i < tmpArr3.length;i++){     //删除选中的元素
+          let tmpId = tmpArr3[i].id
+          tmpArr1 = tmpArr1.filter(item => item.id !== tmpId)
+        }
+        let tmpArr = tmpArr1.slice(0)
+        for(let k = 0;k < tmpArr2.length;k++){     //选中元素的index
+          let tmpIdx = tmpArr2[k]-1
+          tmpArr.splice(tmpIdx,0,tmpArr3[k])
+          if(tmpArr2[k] == 0){
+            return
+          }
+          tmpArr2[k] = (tmpArr2[k]-1)
+        }
+        this.selectRightTagsListIndex = tmpArr2
+        this.rightTagsList = tmpArr
+      }else{     //往右
+        for(let i = 0;i < tmpArr3.length;i++){     //删除选中的元素
+          let tmpId = tmpArr3[i].id
+          tmpArr1 = tmpArr1.filter(item => item.id !== tmpId)
+        }
+        let tmpArr = tmpArr1.slice(0)
+        for(let k = 0;k < tmpArr2.length;k++){     //选中元素的index
+          let tmpIdx = tmpArr2[k]+1
+          tmpArr.splice(tmpIdx,0,tmpArr3[k])
+          if(tmpArr2[k] == tmpArr1.length){
+            return
+          }
+          tmpArr2[k] = (tmpArr2[k]+1)
+        }
+        this.selectRightTagsListIndex = tmpArr2
+        this.rightTagsList = tmpArr
+      }
+      this.$emit('changeActionData', this.rightTagsList, false);
+    },
+    delSubTemplate(){   //删除子模板
+      if (this.selectRightTagsList.length>0 && this.selectRightTagsList[0].type === 'sub') {    //删除子模板,输入框或者标签就不变
+        this.rightTagsList = this.rightTagsList.filter(item => item.id !== this.selectRightTagsList[0].id)
+        this.subTmpList = this.subTmpList.filter(item => item.id !== this.selectRightTagsList[0].id)  //选中的子模板id去掉
+      }
+      this.selectLeftTagsList = []
+      this.selectRightTagsList = []
+      this.selectRightTagsListIndex = []
+      this.$emit('changeActionData', this.rightTagsList, false);
+      this.getSubTemplate()
+    },
     selectLeftTag(tag, index, e) {
       const hasTag = this.isHasTag(tag, this.selectLeftTagsList)
       if (hasTag) {
@@ -180,12 +296,19 @@ export default {
         this.selectLeftTagsList.push(tag);
       }
     },
-    selectRightTag(tag) {
-      const hasTag = this.isHasTag(tag, this.selectRightTagsList)
+    selectRightTag(tag,idx) {
+      const hasTag = this.isHasTag(tag, this.selectRightTagsList);
+      let tmpArr = this.selectRightTagsListIndex;
+      let tmpArr1 = this.selectRightTagsList.slice(0);
       if (hasTag) {
-        this.selectRightTagsList = this.selectRightTagsList.filter(item => item.id !== tag.id)
+        this.selectRightTagsList = this.selectRightTagsList.filter(item => item.tagName !== tag.name)
+        tmpArr = tmpArr.filter(item => item !== idx)
+        this.selectRightTagsListIndex = tmpArr
       } else {
-        this.selectRightTagsList.push(tag);
+        tmpArr1[0] = tag;
+        tmpArr[0]=idx;
+        this.selectRightTagsList = tmpArr1;
+        this.selectRightTagsListIndex = tmpArr;
       }
     },
     isHasTag(item, arr) {
@@ -203,70 +326,58 @@ export default {
       return this.isHasTag(item, this.selectRightTagsList)
     },
     toLeftList() {
-      for (let i = 0; i < this.selectRightTagsList.length; i++) {
-        this.rightTagsList = this.rightTagsList.filter(item => item.id !== this.selectRightTagsList[i].id)
-      }
-      for (let i = 0; i < this.selectRightTagsList.length; i++) {//每次往回移时同时删掉下面输入框
-        if (this.selectRightTagsList[i].type !== 'input') {
-          for (let j = 0; j < this.rightTagsList2.length; j++) {
-            if (this.selectRightTagsList[i].id === this.rightTagsList2[j].id) {
-              if (this.rightTagsList2.length === 3) {
-                this.rightTagsList2 = []
-              } else {
-                this.rightTagsList2.splice(j, 2)
-              }
-            }
-          }
+      if (this.selectRightTagsList.length>0 && this.selectRightTagsList[0].type !== 'sub') {    //往左的是子模板不变或者输入框,是输入框或者标签就删除
+        for (let i = 0; i < this.selectRightTagsList.length; i++) {
+          this.rightTagsList = this.rightTagsList.filter(item => item.id !== this.selectRightTagsList[0].id)
         }
+        this.searchTagList()
+        this.$emit('changeActionData', this.rightTagsList, false);
       }
       this.selectLeftTagsList = []
       this.selectRightTagsList = []
-      this.searchTagList()
-      this.$emit('changeActionData', this.rightTagsList2, false);
+      this.selectRightTagsListIndex = []
     },
     toRightList() {
       this.rightTagsList.push(...this.selectLeftTagsList);
-      let textItem = { text: '', type: 'input' }
-      for (let i = 0; i < this.selectLeftTagsList.length; i++) { //选中标签每个前后加入输入框
-        if (this.rightTagsList2.length === 0) {
-          let textItem1 = JSON.parse(JSON.stringify(textItem))
-          textItem1.id = this.selectLeftTagsList[i].id + ',,'
-          this.rightTagsList2.push(textItem1)
-        }
-        this.rightTagsList2.push(this.selectLeftTagsList[i]);
-        let textItem2 = JSON.parse(JSON.stringify(textItem))
-        textItem2.id = this.selectLeftTagsList[i].id + ','
-        this.rightTagsList2.push(JSON.parse(JSON.stringify(textItem2)))
-      }
-
       for (let i = 0; i < this.rightTagsList.length; i++) {
         this.leftTagsList = this.leftTagsList.filter(item => item.id !== this.rightTagsList[i].id)
       }
       this.selectLeftTagsList = []
       this.selectRightTagsList = []
-      this.$emit('changeActionData', this.rightTagsList2, false);
+      this.selectRightTagsListIndex = []
+      this.$emit('changeActionData', this.rightTagsList, false);
     },
     searchTagList() {
       let notIds = []
-      for (let i = 0; i < this.rightTagsList.length; i++) {
-        if (typeof this.rightTagsList2[i].id === 'number') {
-          notIds.push(this.rightTagsList2[i].id)
+      let tmpArr = this.rightTagsList.slice();
+      for (let i = 0; i < tmpArr.length; i++) {
+        if(tmpArr[i].type != 'sub' && tmpArr[i].type != 'input'){
+          notIds.push(tmpArr[i].id)
         }
       }
       let param = {
         "tagName": this.searchVal,
-        "type": this.type || '',
-        "notIds": notIds,
+        "type": this.type == 4?3:1,
+        "noIds": notIds,
       }
-      api.searchTagList(param).then((res) => {
+      api.getQuestionInfos(param).then((res) => {
         if (res.data.code === '0') {
           this.leftTagsList = res.data.data
           this.selectLeftTagsList = []
           this.selectRightTagsList = []
         }
       })
-    }
-
+    },
+    getSubTemplate() {
+      let param = {
+        noIds:this.subTmpList
+      }
+      api.getModuleInfoSub(param).then((res) => {
+        if (res.data.code === '0') {
+          this.Adscriptions = res.data.data
+        }
+      })
+    },
   }
 }
 </script>
@@ -281,6 +392,7 @@ export default {
   .poolTitle {
     box-sizing: border-box;
     margin-bottom: 20px;
+    display: inline-block;
   }
   .inputBox {
     width: 100px;
@@ -337,15 +449,36 @@ export default {
   .bottomPartRight {
     float: left;
     width: 60%;
-    .changeOrder {
-      margin-left: 20px;
+      .arrowWrap {
+        float: right;
+        background-color: #fff;
+        padding-top: 1px;
+        margin-right: 10px;
+        .arrowWrapPub[data-v-2db8be7a] {
+          border: 1px solid @adminBase;
+          height: 23px;
+          width: 40px;
+          text-align: center;
+          background: #fff;
+          line-height: 23px;
+          border-radius: 3px;
+          margin-left: 10px;
+        }
+      }
+    .formWrap {
+      position: relative;
+      height: 30px;
+      .subTemplate {
+        width: 470px;
+        float: left;
+      }
     }
   }
   .templateTagList {
     height: 450px;
   }
   .templateTagLists {
-    height: 468px;
+    height: 462px;
     width: 98%;
   }
   button {
@@ -357,6 +490,7 @@ export default {
     margin: 0 5px 10px 0;
     text-align: center;
     float: left;
+    height: 40px;
     p {
       padding: 5px 0;
     }
@@ -369,13 +503,10 @@ export default {
 <style lang="less">
 @import "../../less/common.less";
 .bottomPartRightTemplate {
-  .subTemplate {
-    // display: inline-block;
-  }
   .el-form-item__content {
     .el-input__inner {
-      height: 30px;
-      line-height:30px;
+      height: 28px;
+      line-height:28px;
       border-radius:5px;
       font-size: 14px;
     }
@@ -385,9 +516,6 @@ export default {
     .el-button--mini[data-v-2db8be7a], .el-button--mini.is-round[data-v-2db8be7a] {
       padding: 5px 8px 4px;
     }
-    .el-button--mini[data-v-2db8be7a].changeOrderPub, .el-button--mini.is-round[data-v-2db8be7a].changeOrderPub {
-      padding: 5px 12px;
-    }
     .el-button:hover {
         color: @adminBase;
         border-color: @adminBase;

+ 20 - 15
src/components/icss/IndeptLabel.vue

@@ -1,6 +1,6 @@
 <template>
     <div>
-        <crumbs title="独立标签维护" style="min-width: 980px">
+        <crumbs title="独立标签维护">
             <el-form :inline="true" class="demo-form-inline">
                 <!--<el-form-item label="标签类型:">
                     <el-select size="mini" v-model="filter.tagType[0]" placeholder="标签类型" clearable>
@@ -9,7 +9,7 @@
                 </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-option v-if="item.val!=6&&item.val!=7&&item.val!=8&&item.val!=9" 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="标签系统名称:">
@@ -46,7 +46,7 @@
                 </el-table-column>
                 <el-table-column
                         :resizable = "false"
-                        prop="controlTypeCn"
+                        prop="tagTypeCn"
                         label="标签类型">
                 </el-table-column>
                 <el-table-column
@@ -78,7 +78,7 @@
                         :total="total">
             </el-pagination>
         </div>
-        <!-- <div class="pagination"> 
+        <!-- <div class="pagination">
             <el-pagination v-if="total>pageSize"
                         :current-page.sync="currentPage"
                         @current-change="currentChange"
@@ -88,7 +88,7 @@
                         :total="total">
             </el-pagination>
         </div> -->
-        
+
     </div>
 </template>
 
@@ -102,7 +102,6 @@
         list: [],
         tagTypes: [],
         Adscriptions: [],
-        tagTypesList: [],
         filter: {
           tagType: [], //标签类型
           tagAdscription: '', //标签归属
@@ -129,29 +128,29 @@
           if(res.data.code === '0') {
             this.Adscriptions = res.data.data[1];
             this.tagTypes =  res.data.data[6];
-            for (var i = 0; i < this.tagTypes.length; i++) {
-              this.tagTypesList.push(this.tagTypes[i].val)
-            }
           }
 
         })
       },
       getDataList() {
         const param = this.getFilterItems();
-        console.log('param', param)
         api.getTagList(param).then((res) => {
-          const list = res.data.data.records
+          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) {
+                list[i].tagTypeCn = this.tagTypes[j].name;
+              }
+            }
+            //后台数据typeCn转换为筛选中对应的字段名称
             for (var z =  0; z < this.Adscriptions.length; z++) {
               if(list[i].type == this.Adscriptions[z].val) {
-                list[i].typeCn = this.Adscriptions[z].name
+                list[i].typeCn = this.Adscriptions[z].name;
               }
             }
-
           }
           this.list = list;
           this.total = res.data.data.total;
-          console.log('tagGroup',res)
         })
       },
       filterDatas() {
@@ -238,9 +237,15 @@
 <style lang="less">
   @import "../../less/admin.less";
     .delete{
-        color: red;
+        color: red
     }
     .delete:hover {
         color: red;
     }
+    .el-select .el-input .el-icon-arrow-up{
+        display: inline-block!important;
+    }
+    .el-select .el-input .el-icon-circle-close{
+        float:left;
+    }
 </style>

+ 104 - 0
src/components/icss/InfoParagraph.vue

@@ -0,0 +1,104 @@
+<template>
+    <el-form :rules="rules" :model="data" ref="form" class="sub-form">
+            <p class="line"></p>
+            <el-input v-model="data.orderNo" :value="index" type="hidden"></el-input>
+            <el-form-item label="是否属于诊断:" prop="isReason" @change="emitVal">
+                <el-select v-model="data.isReason" placeholder="请选择" :disabled="isEdit">
+                    <el-option label="否" :value="0"></el-option>
+                    <el-option label="是" :value="1"></el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item label="显示位置:" prop="position" label-width="130px">
+                <el-checkbox-group v-model="data.position" @change="emitVal" :disabled="isEdit">
+                    <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="title" label-width="130px">
+                <el-input v-model="data.title" @change="emitVal"></el-input>
+            </el-form-item>
+            <el-form-item label="内容" prop="content" label-width="130px">
+                <InfoUeditor v-model="data.content" :config="config"></InfoUeditor>
+            </el-form-item>
+            <el-form-item label-width="130px">
+                <el-button @click="addEmit">添加段落</el-button >
+                <el-button @click="delEmit" type="info">删除本段落</el-button>
+            </el-form-item>
+    </el-form>
+</template>
+
+<script>
+  import InfoUeditor from 'vue-ueditor-wrap';
+  export default{
+    props:['data','index','isEdit'],
+    name:'InfoParagraph',
+    components:{
+      InfoUeditor
+    },
+    data(){
+        return {
+          config:{
+            initialFrameWidth: null,
+            initialFrameHeight: 350,
+            imageUrlPrefix:"http://192.168.2.236:82",
+            serverUrl: '/api/icssman/file/uploadImage',
+            UEDITOR_HOME_URL: '/UEditor/',        //静态文件路径
+            toolbars:[['source','undo','redo','bold','italic','underline','fontborder','strikethrough','superscript','subscript','removeformat','formatmatch','autotypeset','blockquote',
+              'pasteplain','forecolor','backcolor','insertorderedlist','insertunorderedlist','selectall',
+              'cleardoc','rowspacingtop','rowspacingbottom','lineheight','customstyle','paragraph',
+              'fontfamily','fontsize','directionalityltr','directionalityrtl','indent','justifyleft',
+              'justifycenter','justifyright','justifyjustify','touppercase','tolowercase','link','simpleupload','insertimage','horizontal',
+              'date','time','spechars','fullscreen']]      //自定义工具
+          },
+          form:{},
+          positions:[],               //位置列表
+          rules:{
+            isReason: [
+              { required: true, message: '请选择是否属于诊断', trigger: 'change' }
+            ],
+            position: [
+              { required: true, message: '请选择显示位置', trigger: 'change' }
+            ],
+            title: [
+              { required: true, message: '请输入段落标题', trigger: 'change' }
+            ],
+            content: [
+              { required: true, message: '请输入段落内容', trigger: 'change' }
+            ],
+          }
+        }
+    },
+    watch:{
+      'data.content':{          //content改变时传值
+        handler(newVal,oldVal){
+          this.emitVal();
+        }
+      }
+    },
+    created(){
+      //显示位置枚举列表
+      const pos = localStorage.getItem("icssEnumsData");
+      this.positions = JSON.parse(pos)&&JSON.parse(pos).introducePositionEnum;
+      this.form = this.data;console.log(this.isEdit)
+    },
+    methods:{
+      addEmit(){
+        this.$emit("add");
+      },
+      delEmit(){
+        this.$emit("del",this.index);
+      },
+      emitVal(){
+        let data = Object.assign({},this.data);
+        data =   Object.assign({},data,{position:this.data.position?this.data.position.join(","):''});
+        this.$emit("change",this.index,data);
+      }
+    }
+  }
+</script>
+
+<style lang="less">
+   .is-error .el-form-item__error{
+        top:auto;
+    }
+
+</style>

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

@@ -172,7 +172,7 @@ export default {
                 const {code,data,msg} = res.data;
                 if(code=='0'){
                     const item = Object.assign({},row,data);
-                    console.log('item', item)
+                    // console.log('item', item)
                     this.$router.push({name:'AddLabelGroup',params:{isEdit:true,data:item}});
                 }else{
                     this.$message({

+ 212 - 0
src/components/icss/MedicalName.vue

@@ -0,0 +1,212 @@
+<template>
+    <div>
+        <crumbs title="医学术语命名维护">
+            <el-form :inline="true" class="demo-form-inline">
+                <el-form-item label="术语:">
+                    <el-input size="mini" v-model="filter.proName" placeholder="输入术语"></el-input>
+                </el-form-item>
+                <el-form-item>
+                    <el-button size="mini" @click="filterDatas">确认</el-button>
+                    <el-button size="mini" @click="uploadClick">导入</el-button>
+                    <input type="file" name="uploadfile " id="upFile" @change="uploadFile($event)" accept=".csv, application/vnd.ms-excel, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet">
+                    <router-link to="/admin/LT-YXSYKWH-TJYXSY" style="margin:0 10px">
+                        <el-button size="mini" type="warning">添加术语</el-button>
+                    </router-link>
+                </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="gmtOperate"
+                        label="操作时间"
+                        :show-overflow-tooltip="true">
+                </el-table-column>
+                <el-table-column
+                        prop="questionName"
+                        label="医学标准术语"
+                        show-overflow-tooltip>
+                </el-table-column>
+                <el-table-column
+                        prop="retrievalSelfName"
+                        label="其他术语"
+                        show-overflow-tooltip>
+                </el-table-column>
+                <el-table-column
+                        prop="operatorName"
+                        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="delete" @click="showDelDialog(scope.row.questionId)">删除</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/icss.js';
+  export default {
+    name: 'MedicalName',
+    data: function () {
+      return {
+        list: [],
+        cacheData: {},
+        currentPage: 1,
+        pageSize: 10,
+        total: 0,
+        filter: {
+          proName: ''
+        }
+      }
+    },
+    created() {
+      this.getDataList();
+    },
+    methods: {
+      toEditProduct(row){
+        // this.$router.push({
+        //   name:'AddSimilarName',
+        //   params: {id:row.questionId,name:row.questionName}
+        // })
+      },
+      filterDatas(){
+        this.currentPage = 1;
+        this.getDataList();
+      },
+      getDataList() {
+        const param = this.getFilterItems();
+        /*api.similarName(param).then((res) => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.list = data.records;
+            this.cacheData[param.current] = data.records;
+            this.total = data.total;
+          }
+        }).catch((error) => {
+          console.log(error);
+        });*/
+      },
+      getDetailList(id) {
+        const param = {'id': id,};
+        // this.$router.push({name:'DeptInfoDetail', params:{id: id}})
+      },
+      getFilterItems() {
+        const param = {
+          questionName: this.filter.proName,
+          current: this.currentPage,
+          size: this.pageSize
+        };
+        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();
+        }
+      },
+      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(id){
+        this.showConfirmDialog('删除该标准词,可能造成相关联的医学信息、术语关系、医学静态知识等信息全部删除,是否删除?',()=>{
+          api.delSimilarName({questionId:id}).then((res)=>{
+            if(res.data.code=='0'){
+              this.warning(res.data.msg||'操作成功','success');
+              this.getDataList();
+            }else{
+              this.warning(res.data.msg);
+            }
+          }).catch((error)=>{
+            this.warning(error);
+          })
+        });
+      },
+      uploadClick(){
+        let inp = document.getElementById("upFile");
+        inp.click();
+      },
+      uploadFile(e){
+        let fileInfo = e.target.files[0];
+        e.preventDefault();
+        let formData = new FormData();
+        formData.append('uploadfile', fileInfo);
+        console.log(123,fileInfo,formData);
+        const header = {
+          headers:{
+            'Content-Type': 'multipart/form-data'
+          }
+        }
+        api.uploadFile(formData,header).then((res)=>{
+          if(res.data.code==0){
+            this.$message({
+              message: '上传成功',
+              type: 'success',
+            });
+          }else{
+            this.$message.error(res.data.msg);
+          }
+        })
+        this.getDataList();
+        /*//解决上传相同文件不触发change
+        let inp = document.getElementById("upFile");
+        inp.value = "";
+        */
+      }
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+    @import "../../less/admin.less";
+    .delete{
+        color: red;
+    }
+    .el-table .cell{
+      overflow: hidden;
+      white-space: nowrap;
+    }
+    #upFile{
+      display: none !important;
+    }
+</style>

+ 240 - 0
src/components/icss/MedicalRelation.vue

@@ -0,0 +1,240 @@
+<template>
+    <div>
+        <crumbs title="医学术语关系维护" :minWidth="titleWidth">
+            <el-form :inline="true" class="demo-form-inline">
+              <el-form-item label="术语总条数:">
+                  <span>{{total}}条</span>
+              </el-form-item>
+              <el-form-item label="术语关系:">
+                <el-select v-model="type" clearable placeholder="请选择" size="mini">
+                  <el-option
+                    v-for="item in typeList"
+                    :key="item.key"
+                    :label="item.name"
+                    :value="item.key">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+              <el-form-item label="起始术语:">
+                  <el-input size="mini" v-model="filter.proName" placeholder="输入术语"></el-input>
+              </el-form-item>
+              <el-form-item label="终点术语:">
+                  <el-input size="mini" v-model="filter.proName" placeholder="输入术语"></el-input>
+              </el-form-item>
+              <el-form-item>
+                  <el-button size="mini" @click="filterDatas">确认</el-button>
+                  <el-button size="mini" @click="uploadClick">导入</el-button>
+                  <input type="file" name="uploadfile " id="upFile" @change="uploadFile($event)" accept=".csv, application/vnd.ms-excel, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet">
+                  <router-link to="/admin/LT-YXSYKWH-TJYXSYGX" style="margin:0 10px">
+                      <el-button size="mini" type="warning">添加关系</el-button>
+                  </router-link>
+              </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="gmtOperate"
+                        label="操作时间"
+                        :show-overflow-tooltip="true">
+                </el-table-column>
+                <el-table-column
+                        prop="questionName"
+                        label="关系明细"
+                        show-overflow-tooltip>
+                </el-table-column>
+                <el-table-column
+                        prop="operatorName"
+                        label="操作人">
+                </el-table-column>
+                
+                <el-table-column
+                        label="操作" width="160">
+                    <template slot-scope="scope">
+                        <el-button type="text" size="small" class="delete" @click="showDelDialog(scope.row.questionId)">删除</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/icss.js';
+  export default {
+    name: 'MedicalRelation',
+    data: function () {
+      return {
+        list: [],
+        cacheData: {},
+        currentPage: 1,
+        pageSize: 10,
+        total: 0,
+        filter: {
+          proName: ''
+        },
+        type:'',
+        typeList:[
+          {
+            name:'类型1',
+            id:1,
+            key:1
+          },
+          {
+            name:'类型2',
+            id:2,
+            key:2
+          },
+          {
+            name:'类型3',
+            id:3,
+            key:3
+          },
+        ],
+        titleWidth:'1060px' //头部最小宽度
+      }
+    },
+    created() {
+      this.getDataList();
+    },
+    methods: {
+      toEditProduct(row){
+        // this.$router.push({
+        //   name:'AddSimilarName',
+        //   params: {id:row.questionId,name:row.questionName}
+        // })
+      },
+      filterDatas(){
+        this.currentPage = 1;
+        this.getDataList();
+      },
+      getDataList() {
+        const param = this.getFilterItems();
+        /*api.similarName(param).then((res) => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.list = data.records;
+            this.cacheData[param.current] = data.records;
+            this.total = data.total;
+          }
+        }).catch((error) => {
+          console.log(error);
+        });*/
+      },
+      getDetailList(id) {
+        const param = {'id': id,};
+        // this.$router.push({name:'DeptInfoDetail', params:{id: id}})
+      },
+      getFilterItems() {
+        const param = {
+          questionName: this.filter.proName,
+          current: this.currentPage,
+          size: this.pageSize
+        };
+        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();
+        }
+      },
+      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(id){
+        this.showConfirmDialog('是否删除该关系?可能对现有系统造成影响',()=>{
+          api.delSimilarName({questionId:id}).then((res)=>{
+            if(res.data.code=='0'){
+              this.warning(res.data.msg||'操作成功','success');
+              this.getDataList();
+            }else{
+              this.warning(res.data.msg);
+            }
+          }).catch((error)=>{
+            this.warning(error);
+          })
+        });
+      },
+      uploadClick(){
+        let inp = document.getElementById("upFile");
+        inp.click();
+      },
+      uploadFile(e){
+        let fileInfo = e.target.files[0];
+        e.preventDefault();
+        let formData = new FormData();
+        formData.append('uploadfile', fileInfo);
+        console.log(123,fileInfo,formData);
+        const header = {
+          headers:{
+            'Content-Type': 'multipart/form-data'
+          }
+        }
+        /*api.uploadFile(formData,header).then((res)=>{
+          if(res.data.code==0){
+            this.$message({
+              message: '上传成功',
+              type: 'success',
+            });
+          }else{
+            this.$message.error(res.data.msg);
+          }
+        })
+        this.getDataList();*/
+        /*//解决上传相同文件不触发change
+        let inp = document.getElementById("upFile");
+        inp.value = "";
+        */
+      }
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+    @import "../../less/admin.less";
+    .delete{
+        color: red;
+    }
+    .el-table .cell{
+      overflow: hidden;
+      white-space: nowrap;
+    }
+    #upFile{
+      display: none !important;
+    }
+</style>

+ 187 - 0
src/components/icss/MedicinePrompt.vue

@@ -0,0 +1,187 @@
+<template>
+    <div>
+        <crumbs title="医学术语静态知识维护">
+            <el-form :inline="true" class="demo-form-inline">
+                <el-form-item label="静态知识名称:">
+                    <el-input size="mini" v-model="filter.name" placeholder="静态知识名称" clearable></el-input>
+                </el-form-item>
+                <el-form-item label="标签系统名称:">
+                    <el-input size="mini" v-model="filter.tagName" placeholder="标签系统名称" clearable></el-input>
+                </el-form-item>
+                <el-form-item>
+                    <el-button size="mini" @click="filterDatas">确认</el-button>
+                    <router-link to="/admin/LT-YXSYKWH-TJYXSYJTZS" style="margin:0 10px">
+                        <el-button size="mini" type="warning">添加静态知识</el-button>
+                    </router-link>
+                </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="gmtOperate"
+                        label="操作时间"
+                        width="180"
+                        :show-overflow-tooltip="true">
+                </el-table-column>
+                <el-table-column
+                        prop="name"
+                        label="静态知识名称">
+                </el-table-column>
+                <el-table-column
+                        prop="tagName"
+                        label="关联标签"
+                        width="240">
+                </el-table-column>
+                <el-table-column
+                        prop="operatorName"
+                        label="操作人"
+                        width="80">
+                </el-table-column>
+
+                <el-table-column
+                        label="操作" width="120">
+                    <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" @click="showDelDialog(scope.row.id)">删除</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/icss.js';
+  import utils from '@api/utils.js';
+
+  export default {
+    name: 'prompt-info',
+    data: function () {
+      return {
+        list: [],
+        cacheData: {},
+        currentPage: 1,
+        pageSize: 10,
+        total: 0,
+        linkIn:[],
+        pays:[],
+        filter: {
+          name: '',
+          tagName:''
+        }
+      }
+    },
+    created() {
+      this.getDataList();
+    },
+    methods: {
+      toEditProduct(row){
+        this.$router.push({
+          name:'AddPromptInfo',
+          params: {data:row,isEdit:true}
+        })
+      },
+      filterDatas(){
+        this.currentPage = 1;
+        this.getDataList();
+      },
+      getDataList() {
+        const param = this.getFilterItems();
+        // const param = {
+        //   'name':''
+        // };
+        api.getTremList(param).then((res) => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.list = data.records;
+            this.cacheData[param.current] = data.records;
+            this.total = data.total;
+          }
+        }).catch((error) => {
+          console.log(error);
+        });
+      },
+      getDetailList(id) {
+        const param = {'id': id,};
+        this.$router.push({name:'PromptDetail', params:{id: id}})
+      },
+      getFilterItems() {
+        const param = {
+          name:this.filter.name,
+          tagName:this.filter.tagName,
+          current: this.currentPage,
+          size: this.pageSize
+        };
+        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();
+        }
+      },
+      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(id){
+        this.showConfirmDialog('是否删除该静态知识?',()=>{
+          api.delPromptInfo({id}).then((res)=>{
+            if(res.data.code=='0'){
+              this.warning(res.data.msg||'操作成功','success');
+              this.getDataList();
+            }else{
+              this.warning(res.data.msg);
+            }
+          }).catch((error)=>{
+            this.warning(error);
+          })
+        });
+      }
+    }
+  }
+</script>
+
+<style lang="less">
+    @import "../../less/admin.less";
+    .status-span{
+        font-size: 12px;
+        margin-right:10px;
+        color: unset;
+    }
+</style>

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

@@ -0,0 +1,116 @@
+<template>
+    <div class="NoiseTemplateWrapper TemplateWrapper">
+        <div class="groupTitle"><i
+                class="el-icon-back"
+                @click="back"
+        ></i> 提示信息维护--详情</div>
+        <div class="info-container">
+            <el-form label-width="130px"
+                     ref="groups">
+                <el-form-item label="静态知识名称:">
+                    {{editData.name}}
+                </el-form-item>
+                <p class="line"></p>
+                <div class="add-prg" v-for="prg in editData.details">
+                    <el-form-item label="是否属于诊断:">
+                        {{prg.isReason?'是':'否'}}
+                    </el-form-item>
+                    <el-form-item label="显示位置:">
+                        {{parsePosition(prg.position)}}
+                    </el-form-item>
+                    <el-form-item label="标题:">
+                        {{prg.title}}
+                    </el-form-item>
+                    <el-form-item label="内容:">
+                        <div v-html="prg.content"></div>
+                    </el-form-item>
+                </div>
+                <p class="line"></p>
+                <el-form-item label="关联标签:">
+                    <span class="tag" v-for="it in editData.questionList">
+                        {{it.name}}
+                    </span>
+                </el-form-item>
+            </el-form>
+        </div>
+    </div>
+</template>
+<script>
+  /**
+   *
+   */
+  import api from '@api/icss.js';
+
+  export default {
+    name: 'PromptDetail',
+    data() {
+      return {
+        editData:{},
+        positions:[],
+        position:''
+      }
+    },
+    created:function(){
+      const {id} = this.$route.params;
+      const pos = localStorage.getItem("icssEnumsData");
+      this.positions = JSON.parse(pos)&&JSON.parse(pos).introducePositionEnum;
+
+      api.getPrompDetail({id}).then((res) =>{
+        if(res.data.code === '0') {
+          this.editData = res.data.data;
+        }else{
+          this.warning("数据获取失败");
+        }
+      })
+    },
+    methods: {
+      back() { this.$router.go(-1) },
+      parsePosition(item){
+        const sit = item||[];
+        let text = '';
+        this.positions.forEach((it)=>{
+          if(sit.split(",").includes(it.key+'')){
+            text+=it.name+',';
+          }
+        });
+        return text.replace(/,$/,'');
+      },
+      warning(msg, type) {
+        this.$message({
+          showClose: true,
+          message: msg,
+          type: type || 'warning'
+        })
+      },
+    }
+  }
+</script>
+<style lang="less">
+    @import "../../less/common.less";
+    .info-container{
+        background: #fff;
+        padding: 20px;
+        margin: 20px 20px -20px 20px;
+    .el-input__inner{
+        width: 200px;
+    }
+    .el-form-item__label{
+        text-align: left;
+    }
+    .add-prg .el-form-item{
+        margin-bottom: 20px;
+    }
+    }
+    .line{
+        border-top:1px #dcdfe6 solid;
+        margin-bottom: 25px;
+    }
+    .tag:before{
+        content:'['
+    }
+    .tag:after{
+        content: ']';
+        margin-right: 10px;
+    }
+</style>
+

+ 11 - 23
src/components/icss/PromptInfo.vue

@@ -3,10 +3,10 @@
         <crumbs title="提示信息维护">
             <el-form :inline="true" class="demo-form-inline">
                 <el-form-item label="静态知识名称:">
-                    <el-input size="mini" v-model="filter.proName" placeholder="静态知识名称"></el-input>
+                    <el-input size="mini" v-model="filter.name" placeholder="静态知识名称" clearable></el-input>
                 </el-form-item>
                 <el-form-item label="标签系统名称:">
-                    <el-input size="mini" v-model="filter.proName" placeholder="标签系统名称"></el-input>
+                    <el-input size="mini" v-model="filter.tagName" placeholder="标签系统名称" clearable></el-input>
                 </el-form-item>
                 <el-form-item>
                     <el-button size="mini" @click="filterDatas">确认</el-button>
@@ -41,7 +41,7 @@
                 </el-table-column>
                 <el-table-column
                         :resizable = "false"
-                        prop="questionList"
+                        prop="tagName"
                         label="关联标签"
                         width="240">
                 </el-table-column>
@@ -98,7 +98,8 @@
         linkIn:[],
         pays:[],
         filter: {
-          proName: ''
+          name: '',
+          tagName:''
         }
       }
     },
@@ -109,7 +110,7 @@
       toEditProduct(row){
         this.$router.push({
           name:'AddPromptInfo',
-          params: {info:row}
+          params: {data:row,isEdit:true}
         })
       },
       filterDatas(){
@@ -134,25 +135,12 @@
       },
       getDetailList(id) {
         const param = {'id': id,};
-        this.$router.push({name:'DeptInfoDetail', params:{id: id}})
-        /*api.getDeptInfoDetials(param).then((res) => {
-          if (res.data.code == '0') {
-            this.$router.push({name:'DeptInfoDetail', params:{id: id}})
-            // console.log("详情接口调用成功");
-          } else {
-            this.$message({
-              showClose: true,
-              message:res.data.msg,
-              type:'warning'
-            });
-            this.getDataList()  //刷新列表
-          }
-        }).catch((error) => {
-          console.log(error);
-        });*/
+        this.$router.push({name:'PromptDetail', params:{id: id}})
       },
       getFilterItems() {
         const param = {
+          name:this.filter.name,
+          tagName:this.filter.tagName,
           current: this.currentPage,
           size: this.pageSize
         };
@@ -185,8 +173,8 @@
         }).catch(() => {});
       },
       showDelDialog(id){
-        this.showConfirmDialog('是否删除该科室?',()=>{
-          api.deleteDeptInfo({id}).then((res)=>{
+        this.showConfirmDialog('是否删除该静态知识?',()=>{
+          api.delPromptInfo({id}).then((res)=>{
             if(res.data.code=='0'){
               this.warning(res.data.msg||'操作成功','success');
               this.getDataList();

+ 26 - 27
src/components/icss/PromptTagPool.vue

@@ -4,7 +4,7 @@
       <p class="poolTitle">标签池:</p>
       <div class="pool">
         <el-input placeholder="请输入搜索内容"
-                v-model="searchVal">
+                v-model="searchVal" clearable>
           <i slot="prefix"
              class="el-input__icon el-icon-search"
           ></i>
@@ -27,7 +27,7 @@
       <p><span class="el-icon-arrow-left" @click="toLeftList"></span></p>
     </div>
     <div class="bottomPartRight ">
-      <p class="poolTitle">操作界面:</p>
+      <p class="poolTitle">已选标签:</p>
       <ul class="tagList operationPool">
         <li class = "tagItem operationItem"
             v-for="(item) in rightTagsList"
@@ -56,10 +56,10 @@
         default: '',
         type: String
       },
-      sexType: {
-        default: '',
-        type: String
-      },
+      selected:{
+        default:[],
+        type:Array
+      }
     },
     data() {
       return {
@@ -72,9 +72,6 @@
           background:'#eae7e7'
         },
       }
-    },
-    mounted() {
-
     },
     watch: {
       pool(newVal, preVal) {
@@ -82,27 +79,31 @@
           this.leftTagsList = newVal
         }
       },
-      searchVal(newVal, preVal){
-        if(newVal.trim() == ''){
-          this.searchTagList()
-        }else if(newVal.trim() != preVal.trim()){
-          this.searchTagList()
+      selected(newVal, preVal) {
+        if (JSON.stringify(newVal) != JSON.stringify(preVal)) {console.log(newVal)
+          this.rightTagsList = newVal
         }
       },
-      sexType(newVal, preVal) {
-        if (newVal != preVal) {
-          if (JSON.stringify(newVal) != JSON.stringify(preVal)) {
+      searchVal(newVal, preVal){
+        if(newVal.trim() == ''){
+          if(this.type==''){    //清空搜索时清空或回到原始
             this.leftTagsList = [];
-            this.selectLeftTagsList = [];
-            this.rightTagsList = [];
-            this.selectRightTagsList = [];
-            this.searchVal = '';
+          }else{
             this.searchTagList();
           }
+        }else if(newVal.trim() != preVal.trim()){
+          this.searchTagList()
         }
       },
-
-
+      type(newVal, preVal) {
+        if(newVal.trim()==''&&this.searchVal.trim()==''){
+          this.leftTagsList = [];
+          return ;
+        }
+        if(this.searchVal.trim()!=''||newVal != preVal){
+          this.searchTagList()
+        }
+      }
     },
     methods: {
       selectLeftTag(tag, index, e) {
@@ -133,8 +134,6 @@
         return false;
       },
       getStyle(item){       //左侧选中状态
-        // console.log('selected',utils.filterArr(this.leftTagsList,item,2))
-        // return utils.filterArr(this.selectLeftTagsList,item,2)
         return this.isHasTag(item, this.selectLeftTagsList)
       },
       getStyle2(item) {
@@ -157,7 +156,7 @@
           this.leftTagsList = this.leftTagsList.filter(item => item.id !== this.rightTagsList[i].id)
         }
         this.selectLeftTagsList = []
-        this.selectRightTagsList = []
+        this.selectRightTagsList = [];
         this.$emit('changeActionData',this.rightTagsList, false);
       },
       searchTagList() {
@@ -174,7 +173,7 @@
           "controlType": [],
           "type": this.type || '',
           "notIds": notIds,
-          "sexType": this.sexType,
+          "sexType": 3,
 
         }
         api.searchTagList(param).then((res) => {

+ 103 - 38
src/components/icss/PubTagPartDetail.vue

@@ -46,7 +46,7 @@
           @click="selectPart(0)"
           v-else
         >
-          <span class="hzx ellipsis" v-for="item in poolDetailList[0]" :title="'[ '+item.name+' ]'" v-show="choose == 'multiple'" :key="item.id">{{item.name}}</span>
+          <span class="hzx ellipsis" v-for="item in poolDetailList[0][0].questionDetailList" :title="'[ '+item.name+' ]'" v-show="choose == 'multiple'" :key="item.id">{{item.name}}</span>
         </div>
         <div class="onlyBottom pubList">
           <ul class="clearfix">
@@ -65,11 +65,16 @@
                 </template>
               </ul>
               <ul v-else>
-                <template>
-                  <li class="partDetail ellipsis" v-for="item in poolDetailList[n]" :style="getStyleR(item.id)?styleR:null" :title="'[ '+item.name+' ]'" :key="item.id" @click="selectTagOne($event,item.id,n)">
+                <template v-if="n == 1">
+                  <li class="partDetail ellipsis" v-for="item in poolDetailList[n][0].questionDetailList" :style="getStyleR(item.id)?styleR:null" :title="'[ '+item.name+' ]'" :key="item.name">
                     [ {{item.name}} ]
                   </li>
                 </template>
+                <template  v-if="n == 2 || n == 3 || n == 4 || n == 5">
+                  <li class="partDetail ellipsis" 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}} ]
+                  </li>
+                </template>
               </ul>
             </li>
           </ul>
@@ -78,13 +83,14 @@
       <div class="partWaring">
         <ul>
           <li v-for="i in 5" :key="i">
-            <template v-for="item in poolDetailListTips[i]" v-show="poolDetailListTips[i].length > 0">
-              <p class="partDetail tipsWrap" :key="item.type">
+            <template v-for="item in poolDetailListTips[i]" v-if="poolDetailListTips[i].length > 0">
+              <p class="partDetail tipsWrap" :key="item.type" v-if="currentTipLis.length>0">
                 <template v-for="section in currentTipLis">
                   <span v-if="item.type == section.val" :title="section.name" :key="section.val">{{section.name}}</span>         
                 </template>
               </p>        
-              <p class="partDetail tipsWrap" :title="item.name" :key="item.type+'--'">{{item.name}}</p> 
+              <p class="partDetail tipsWrap" :title="item.join" :key="item.join+'--'" v-if="!!item.join">标签之间链接{{item.join}}</p> 
+              <p class="partDetail tipsWrap" :title="item.name" :key="item.type+'--'" v-if="!!item.name">{{item.name}}</p> 
             </template>
           </li>
         </ul> 
@@ -128,9 +134,13 @@ export default {
         type: Array
     }
   },
+
+  destroyed:function(){
+    this.searchVal = ''
+  },
   data() {
     return {
-      poolDetailList: [[],[],[],[],[],[]],     //默认6个部分
+      poolDetailList: [[{questionDetailList:[]}],[{questionDetailList:[]}],[],[],[],[]],     //默认6个部分
       poolDetailListTips: [[],[],[],[],[],[]],     //6个部分对应的提示
       poolDetailListIds: [[],[],[],[],[],[]],     //6个部分对应的id
       poolDetailListAll:[],    //默认6个部分转化为一维数组
@@ -152,27 +162,70 @@ export default {
   mounted(){
     this.$nextTick(()=>{
       let tagList = this.options;
+      this.currentTipLis = this.tipLis
       if(tagList.length > 0){
         let tmpArr = [[],[],[],[],[],[]];
         this.tmpNum = 1
-        if(tagList[0].formPosition == 1){
-          tagList.map((val,idx)=>{
-            if(this.sign == 2) {     //杂音修改
-                tmpArr[idx].push(val)
-            }else{       //既往史修改
-              tmpArr[idx] = val.questionMapping
-            }
-          })
-        }else{
-          tagList.map((val,idx)=>{
-            if(this.sign == 2) {     //杂音修改
-                tmpArr[idx+1].push(val)
-            }else{       //既往史修改
-              tmpArr[idx+1] = val.questionMapping
+        if(this.sign == 2){//杂音修改
+          if(tagList[0].formPosition == 1){
+            tagList.map((val,idx)=>{
+              tmpArr[idx].push(val)
+            })
+          }else{
+            tagList.map((val,idx)=>{
+              tmpArr[idx+1].push(val)
+            })
+          }
+        }else{       //既往史修改
+            let sticArr = [{questionDetailList:[]}];
+            if(tagList.length > 1){     //至少两条数据
+              if(tagList[0].formPosition == 1 && tagList[1].tagType != 1){  //第一条为互斥项,第二条不是伴无  13...
+                tagList.map((val,idx)=>{
+                  if(idx == 0){
+                    tmpArr[idx].push(val)
+                  }else {
+                    tmpArr[1].push(sticArr)
+                    tmpArr[idx+1] = val.questionMapping
+                  }
+                })
+              }else if(tagList[0].formPosition == 1 && tagList[1].tagType == 1){   //第一条为互斥项,第二条是伴无  12...
+                tagList.map((val,idx)=>{
+                    if(idx < 2){
+                      tmpArr[idx].push(val)
+                    }else{
+                      tmpArr[idx] = val.questionMapping
+                    }
+                })
+              }else if(tagList[0].formPosition != 1 && tagList[0].tagType == 1){   //第一条是伴无  2...
+                tagList.map((val,idx)=>{
+                    if(idx == 0){
+                      tmpArr[0].push(sticArr)
+                      tmpArr[1].push(val)
+                    }else if(idx > 0){
+                      tmpArr[idx+1] = val.questionMapping
+                    }
+                })
+              }else{  //第一条不是互斥项,第二条不是伴无  3...
+                tagList.map((val,idx)=>{
+                  if(idx > 1){
+                    tmpArr[idx] = val.questionMapping
+                  }
+                })
+              }
+            }else{       //有且只有一条
+              if(tagList[0].formPosition == 1){  //第一条为互斥项
+                tmpArr[0].push(tagList[0])
+                tmpArr[1].push(sticArr)
+              }else if(tagList[0].formPosition != 1 && tagList[0].tagType == 1){   //第一条是伴无 
+                tmpArr[0].push(sticArr)
+                tmpArr[1].push(tagList[0])
+              }else{     //既不是互斥也不是伴无
+                tmpArr[0].push(sticArr)
+                tmpArr[1].push(sticArr)
+                tmpArr[2] = tagList[0].questionMapping
+              }
             }
-          })
-        }
-        
+          }
         this.poolDetailList = tmpArr
         this.poolDetailListAll = Array.prototype.concat.apply([],this.poolDetailList);     //二维转一维
         this.searchTagList()
@@ -184,11 +237,6 @@ export default {
     pool(newVal, preVal) {
       this.currentPool = newVal
     },
-    tipLis(newVal, preVal) {
-      if (JSON.stringify(newVal) != JSON.stringify(preVal)) {
-        this.currentTipLis = newVal
-      }
-    },
     sexType(newVal, preVal) {
       if (newVal != preVal) {
         if (JSON.stringify(newVal) != JSON.stringify(preVal) && this.tmpNum != 1) {
@@ -196,6 +244,11 @@ export default {
         }
       }
     },
+    tipLis(newVal, preVal) {
+      if (newVal != preVal) {
+        this.currentTipLis = newVal
+      }
+    },
     sign(newVal, preVal) {
       if (JSON.stringify(newVal) != JSON.stringify(preVal) && this.tmpNum != 1) {
         this.clearData()
@@ -274,7 +327,11 @@ export default {
       }else if((this.choose == 'multiple') && (utils.filterArr(this.selectArr,true,2) && this.poolDetailList[this.activePart].length > 0) || (this.multipleItem.length > 0)){
         if(this.activePart != -1){
           let tmparr = this.poolDetailList;
-          tmparr[this.activePart] = []
+          if(this.activePart == 0 || this.activePart == 1){
+            tmparr[this.activePart] = [{questionDetailList:[]}]
+          }else{
+            tmparr[this.activePart] = []
+          }
           this.poolDetailList = tmparr;
           this.poolDetailListAll = Array.prototype.concat.apply([],this.poolDetailList);     //二维转一维
           this.searchTagList();
@@ -306,9 +363,14 @@ export default {
             if(!utils.filterArr(poolDetailListTips[i],tmpLi.controlType,2)){
               objTmp.type = tmpLi.controlType
               objTmp.name = tmpLi.name
-              poolDetailListTips[i].push(objTmp)
+              objTmp.join = tmpLi.joint
+              if(tmpLi.controlType){
+                poolDetailListTips[i].push(objTmp)
+              }
+            }
+            if(tmpLi.id){
+              poolDetailListIds[i].push(tmpLi.id)
             }
-            poolDetailListIds[i].push(tmpLi.id)
           }
         }
       }
@@ -330,7 +392,7 @@ export default {
       let ids = [];
       this.currentLis = []
       this.poolDetailListAll.map((value)=>{
-        ids.push(value.id)
+        if(value.id){ids.push(value.id)}
       })
       this.notIds = ids;
       
@@ -417,9 +479,7 @@ export default {
     getRightListDes(){
       let idStr = this.currentLis.join(',');
       let param = {
-        // "age": 0,
         "ids": idStr,
-        // "sexType": 3
       }
       api.detailsTagList(param).then((res) => {        //右侧展开内容
         if (res.data.code === '0') {
@@ -446,7 +506,7 @@ export default {
                 if(num == 6){
                   for(let i = 1;i < this.poolDetailList.length;i++){
                     let ids = [];
-                    if(this.poolDetailList[i].length == 0){      //判断part里面是不是有数据,没有直接添加
+                    if(this.poolDetailList[i].length == 0 || (this.poolDetailList[i].length > 0 && !this.poolDetailList[i].id)){      //判断part里面是不是有数据,没有直接添加
                       this.poolDetailList[i] = tmpArr;
                       this.poolDetailListAll = Array.prototype.concat.apply([],this.poolDetailList);
                       this.searchTagList();
@@ -464,16 +524,21 @@ export default {
             this.currentLis.map((id)=>{
               tmpArr.push(res.data.data[id]);
             })
+            // console.log(tmpArr,'多选既往史')
             this.selectArr.map((flg,idx)=>{         //判断右侧有没有选中
               if(flg){    //有选中
-                this.poolDetailList[idx] = (this.poolDetailList[idx]).concat(tmpArr);
+                if(idx == 0 || idx == 1){
+                  this.poolDetailList[idx] = tmpArr;
+                }else{
+                  this.poolDetailList[idx] = (this.poolDetailList[idx]).concat(tmpArr);
+                }
                 this.poolDetailListAll = Array.prototype.concat.apply([],this.poolDetailList);     //二维转一维
                 this.searchTagList();
                 this.getPoolDetailListTips();
               }else{
                 ++num;
                 if(num == 6){
-                  for(let i = 1;i < this.poolDetailList.length;i++){
+                  for(let i = 2;i < this.poolDetailList.length;i++){
                     let ids = [];
                     if(this.poolDetailList[i].length == 0){      //判断part里面是不是有数据,没有直接添加
                       this.poolDetailList[i] = tmpArr;

+ 19 - 56
src/components/icss/PubTemplateGroup.vue

@@ -12,17 +12,17 @@
         prop="region1"
       >
         <span class="changeTips">改变归属后,模板明细将会恢复到默认状态</span>
-          <!-- :disabled="!!editData.id" -->
         <el-select
+          :disabled="!!editData.id"
           v-model="form.region1"
           placeholder="请选择模板归属"
-          @change="readyChangeSelect"
+          @change="sendData"
         >
           <el-option
             v-for="item in Adscriptions"
             :label="item.name"
-            :value="item.val"
-            :key="item.id"
+            :value="item.key+''"
+            :key="item.key"
           ></el-option>
         </el-select>
       </el-form-item>
@@ -32,10 +32,9 @@
       >
         <el-input
           v-model="form.region2"
-          :disabled="!form.region1"
+          :disabled="!!editData.id"
           maxLength="120"
           placeholder="请输入模板名称"
-          @change="sendData"
         ></el-input>
       </el-form-item>
     </el-form>
@@ -43,6 +42,7 @@
 </template>
 <script>
 import api from '@api/icss.js';
+import utils from '@api/utils.js';
 
 /**
  * 归属type
@@ -53,26 +53,12 @@ import api from '@api/icss.js';
 export default {
   props:['editData'],
   data() {
-    var validatePass2 = (rule, value, callback) => {
-        const editData = this.$props.editData;
-        if(editData.id && value == editData.tagName){ //修改系统名称没变就不再校验
-          callback();    
-        }else{
-          this.validateSystomName(value,callback)
-        }
-    };
     return {
-      Adscriptions:[
-        {name:'主诉模板',val:'1',id:'1001'},
-        {name:'现病史模板',val:'2',id:'1002'},
-        {name:'现病史空模板',val:'3',id:'1003'},
-        {name:'其他史模板',val:'4',id:'1004'},
-        {name:'嵌套模板',val:'5',id:'1005'},
-        {name:'慢病模板',val:'6',id:'1006'},
-      ],
+      Adscriptions:[],
       form: {
-        region1: '1',    //归属
+        region1: '',    //归属
         region2: '',     //模板名称
+        tagPool:[],      //标签池
       },
       rules: {
         region1: [
@@ -80,52 +66,29 @@ export default {
         ],
         region2: [
           { required: true, message: '请输入模板名称', trigger: 'change' },
-          { validator: validatePass2, trigger: 'blur' },
+          // { validator: validatePass2, trigger: 'blur' },
         ],
       },
     }
   },
-  computed: {
-    newType() {
-      return this.form.region1;
-    },
+  beforeMount:function(){
+    let templateOwn = localStorage.getItem('icssEnumsData') ? JSON.parse(localStorage.getItem('icssEnumsData')).moduleTypeEnum : []
+    this.Adscriptions = templateOwn;
   },
   mounted() {
     const editData = this.$props.editData;
     if(editData.id){      //修改
-      const trans = utils.transformKeys(editData,2);
-      this.form = Object.assign({},this.form,trans);
+      // const trans = utils.transformKeys(editData,2);
+      this.form = Object.assign({},this.form,editData);
+      this.form.region1 = (editData.type+'')
+      this.form.region2 = editData.name
     }
     this.$emit('changeVal', this.form, false)
-  },
-  watch: {
-    newType(nextVal, prevVal) {
-      
-    },
+    // this.searchTagList()
   },
   methods:{
     sendData(val){
-      console.log(val)
-    },
-    readyChangeSelect(val){
-      console.log(val)
-    },
-    validateSystomName(name,callback) {         //判断模板名称是否存在
-      if(this.form.region2.trim() == ''){ return }
-      let param = {
-        "existName": this.form.region2,     
-        "type": this.form.region1,
-        "notTagType":[8],        //去掉文字标签查重
-      }
-      api.validateSystomName(param).then((res) => {
-        if (res.data.code === '0') {
-          if(res.data.data && res.data.data.length != 0){
-            callback(new Error('该系统名称已存在'));
-          }else{
-            callback();
-          }
-        }
-      })
+      this.$emit('changeVal', this.form, false)
     },
     submitForm(formName) {
       this.$refs[formName].validate((valid) => {

+ 2 - 5
src/components/icss/SimilarName.vue

@@ -3,7 +3,7 @@
         <crumbs title="别名维护系统">
             <el-form :inline="true" class="demo-form-inline">
                 <el-form-item label="标签名称:">
-                    <el-input size="mini" v-model="filter.proName" placeholder="标签名称"></el-input>
+                    <el-input size="mini" v-model="filter.proName" placeholder="标签名称" clearable></el-input>
                 </el-form-item>
                 <el-form-item>
                     <el-button size="mini" @click="filterDatas">确认</el-button>
@@ -93,8 +93,6 @@
 
 <script>
   import api from '@api/icss.js';
-  import utils from '@api/utils.js';
-  import axios from 'axios';
   export default {
     name: 'SimilarName',
     data: function () {
@@ -231,10 +229,9 @@
           }
         })
         this.getDataList();
-        /*//解决上传相同文件不触发change
+        //解决上传相同文件不触发change
         let inp = document.getElementById("upFile");
         inp.value = "";
-        */
       }
     }
   }

+ 7 - 7
src/components/icss/SingleSelect.vue

@@ -2,17 +2,17 @@
     <div class="single-container">
         <el-form>
             <div class="operation-row">
-                <el-checkbox-group size="small" v-for="(it,i) in rows" v-if="focusOn==i||(focusOn==-1&&i==0)" :key="1+i" v-model="rows[i].defaultSelect" @change="emitValues(i,'hasDefault',rows[i].defaultSelect)">
-                    <el-checkbox-button  v-if=" !(ascription == 5 && type == 1 || type == 2)" :label="i" :disabled="hasNone==i||hasBan==i|| hasError==i || (hasDefault!=-1&&hasDefault!=i)">默认选中</el-checkbox-button>
+                <el-checkbox-group size="small" v-for="(it,i) in rows" v-if="type!=2&&(focusOn==i||(focusOn==-1&&i==0))" :key="1+i" v-model="rows[i].defaultSelect" @change="emitValues(i,'hasDefault',rows[i].defaultSelect)">
+                    <el-checkbox-button  v-if=" !(ascription == 5 && type == 1 || type == 2)" :label="i" :disabled="hasNone==i||hasBan==i|| hasError==i || (hasDefault!=-1&&hasDefault!=i)||focusOn==-1">默认选中</el-checkbox-button>
                 </el-checkbox-group>
-                <el-checkbox-group size="small" v-for="(it,i) in rows" v-if="focusOn==i||(focusOn==-1&&i==0)" :key="2+i" v-model="rows[i].isNone" @change="emitValues(i,'hasNone',rows[i].isNone)">
-                    <el-checkbox-button  v-if=" !(ascription == 5 && type == 1)" :label="i" :disabled="hasDefault==i||hasBan==i || hasError==i ||(hasNone!=-1&&hasNone!=i)">同“无”类型</el-checkbox-button>
+                <el-checkbox-group size="small" v-for="(it,i) in rows" v-if="type!=1&&(focusOn==i||(focusOn==-1&&i==0))" :key="2+i" v-model="rows[i].isNone" @change="emitValues(i,'hasNone',rows[i].isNone)">
+                    <el-checkbox-button  v-if=" !(ascription == 5 && type == 1)" :label="i" :disabled="hasBan==i || hasError==i ||focusOn==-1">同“无”类型</el-checkbox-button>
                 </el-checkbox-group>
-                <el-checkbox-group size="small" v-for="(it,i) in rows" v-if="focusOn==i||(focusOn==-1&&i==0)" :key="3+i" v-model="rows[i].isBan" @change="emitValues(i,'hasBan',rows[i].isBan)">
-                    <el-checkbox-button v-if=" !(ascription == 5 && type == 1)" :label="i" :disabled="hasDefault==i||hasNone==i || hasError==i||(hasBan!=-1&&hasBan!=i)">同“伴”类型</el-checkbox-button>
+                <el-checkbox-group size="small" v-for="(it,i) in rows" v-if="type!=1&&(focusOn==i||(focusOn==-1&&i==0))" :key="3+i" v-model="rows[i].isBan" @change="emitValues(i,'hasBan',rows[i].isBan)">
+                    <el-checkbox-button v-if=" !(ascription == 5 && type == 1)" :label="i" :disabled="hasNone==i || hasError==i||focusOn==-1">同“伴”类型</el-checkbox-button>
                 </el-checkbox-group>
                 <el-checkbox-group size="small" v-for="(it,i) in rows" v-if="focusOn==i||(focusOn==-1&&i==0)" :key="4+i" v-model="rows[i].isError" @change="emitValues(i,'hasError',rows[i].isError)">
-                    <el-checkbox-button v-if="ascription==5  && type == 1" :label="i" :disabled="hasDefault==i||hasBan==i ||hasNone==i ||(hasError!=-1&&hasError==i)">标记异常选项</el-checkbox-button>
+                    <el-checkbox-button v-if="ascription==5  && type == 1" :label="i" :disabled="hasDefault==i||hasBan==i ||hasNone==i ||(hasError!=-1&&hasError==i)||focusOn==-1">标记异常选项</el-checkbox-button>
                 </el-checkbox-group>
                 <el-button type="danger" size="small" class="del" @click="delRow">删除</el-button>
             </div>

+ 22 - 32
src/components/icss/TemplateMaintenance.vue

@@ -3,8 +3,8 @@
         <crumbs title="模板维护" style="min-width: 980px">
             <el-form :inline="true" class="demo-form-inline">
                 <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 size="mini" v-model="filter.tagAdscription" placeholder="模板归属" clearable>
+                        <el-option v-for="item in Adscriptions" :label="item.name" :value="item.key" :key="item.key" ></el-option>
                     </el-select>
                 </el-form-item>
                 <el-form-item>
@@ -43,7 +43,7 @@
                 </el-table-column>
                 <el-table-column
                         :resizable = "false"
-                        prop="modifier"
+                        prop="userName"
                         label="操作人">
                 </el-table-column>
                 <el-table-column
@@ -100,20 +100,16 @@
 
     },
     methods: {
-      getValue(val) {
-        console.log('changeVal', val, this.filter.tagAdscription)
-      },
       getDropList() {
+        let templateOwn = localStorage.getItem('icssEnumsData') ? JSON.parse(localStorage.getItem('icssEnumsData')).moduleTypeEnum : []
+        this.Adscriptions = templateOwn;
         return api.getDropList().then((res) =>{
-          console.log('dropList-标签归属列表', res)
           if(res.data.code === '0') {
-            this.Adscriptions = res.data.data[1];
             this.tagTypes =  res.data.data[6];
             for (var i = 0; i < this.tagTypes.length; i++) {
               this.tagTypesList.push(this.tagTypes[i].val)
             }
           }
-
         })
       },
       getDataList() {
@@ -131,11 +127,9 @@
                 list[i].typeCn = this.Adscriptions[z].name
               }
             }
-
           }
           this.list = list;
           this.total = res.data.data.total;
-          console.log('tagGroup-列表',res)
         })
       },
       filterDatas() {
@@ -146,36 +140,32 @@
         this.$router.push({path:'LT-YXSJWH-TJMBWH'})
       },
       modifyIndeptTag(row) {
-        // api.detailsTag({id:row.id,sexType:row.sexType,age:row.age}).then((res)=>{
-        //   const {code,data,msg} = res.data;
-        //   if(code=='0'){
-        //     const item = Object.assign({},row,data);
-        //     this.$router.push({name:'AddIndeptLabel',params:{isEdit:true,data:item}});
-        //   }else{
-        //     this.$message({
-        //       message: msg,
-        //       type: 'warning'
-        //     });
-        //   }
-        // });
-        console.log(row)
+        Promise.all([
+          api.getModuleInfoOne({moduleId:row.id}),
+          api.getModuleDetailInfo({moduleId:row.id})
+        ]).then((data)=>{
+          let data0 = data[0].data;
+          let data1 = data[1].data;
+          let allData = {},topMsg={},rightMsg={};
+          if(data0.code == 0){
+            topMsg = Object.assign({},data0.data);
+          }
+          if(data1.code == 0){
+            rightMsg = Object.assign({},data1);
+          }
+          allData = Object.assign({},topMsg,rightMsg)
+          this.$router.push({name:'TemplateMaintenanceWrap',params:{isEdit:true,data:allData}});
+        })
       },
       currentChange(next) {
         this.currentPage = next;
         this.getDataList();
-        // if (this.cacheData[next]) {       //如果已请求过该页数据,则使用缓存不重复请求
-        //     this.list = this.cacheData[next];
-        // } else {
-        //     this.getDataList();
-        // }
       },
       getFilterItems() {
         const param = {
-          // tagTypeList: [1],
           current: this.currentPage,
           size: this.pageSize,
           type: this.filter.tagAdscription,
-          // tagName: this.filter.tagSysName
         };
         return param;
       },
@@ -199,7 +189,7 @@
       },
       showDelDialog(id){
         this.showConfirmDialog('是否删除该标签?',()=>{
-          api.deleteTagGroup({ids:id}).then((res)=>{
+          api.delTemplate({ids:id}).then((res)=>{
             if(res.data.code=='0'){
               this.getDataList();
               this.warning(res.data.msg || '操作成功','success');

+ 36 - 47
src/components/icss/TemplateMaintenanceWrap.vue

@@ -7,16 +7,15 @@
     <PubTemplateGroup
       :editData="editData"
       @changeVal="changeVal"
-      @changeType="changeType"
       @validatePass="validatePass"
       ref="submitForm"
     ></PubTemplateGroup>
     <div class="main">
       <CommonTemplate
-        v-if="dataPub.region1 == 1" 
+        v-if="dataPub.region1"
         :pool="dataPub.tagPool"
         :type="dataPub.region1"
-        :options="editData.questionMapping"
+        :options="editData"
          @changeActionData="changeActionData"
       >
       </CommonTemplate>
@@ -45,15 +44,7 @@ export default {
       txt:'模板维护--添加模板',
       dataPub: {},                    //公用组件传的值都在这
       editData:{},                    //编辑数据
-      form: {
-        currentOrder: '0',            //标签成文顺序
-      },
-      rules: {
-        currentOrder: [
-          { required: true, message: '选择标签成文顺序', trigger: 'change' }
-        ]
-      },
-      sendIds: [[], [], [], [], [], []],           //标签明细右侧操作数据
+      sendIds: [],           //标签明细右侧操作数据
     }
   },
   beforeMount:function(){
@@ -67,14 +58,7 @@ export default {
   methods: {
     back() { this.$router.go(-1) },
     changeVal(val) {    //子组件数据改变传递到父组件
-      this.dataPub = val
-      // console.log('公用组件传的值都在这', val)
-    },
-    changeSex(sex) {       //性别改变,清空标签明细
-      // console.log(sex)
-    },
-    changeType(type) {        //填写单类型改变,标签明细左侧更新,右侧清空
-      // console.log(type)
+      this.dataPub = val    // console.log('公用组件传的值都在这', val)
     },
     changeActionData(arr) {          //标签明细右侧数据id
       this.sendIds = arr
@@ -84,47 +68,50 @@ export default {
     },
     validatePass() {      //验证成功回调,调取接口
       //仍需验证标签明细是否选择
-      let type = this.dataPub.region1;
-      if (JSON.stringify(this.sendIds) == '[[],[],[],[],[],[]]' && type != 6 && type != 7 && type != 8) {
+      let type = this.dataPub.region1,name=this.dataPub.region2;
+      let detailLis = utils.orderTemplateData(this.sendIds)
+      console.log(detailLis)
+      if (JSON.stringify(this.sendIds) == '[]' || !detailLis) {
         this.$message({
-          message: '请选择标签明细',
+          message: '请选择模板内容',
           type: 'warning'
         });
         return;
       }
-      let detailLis = utils.dataRecombination(this.sendIds, this.dataPub.region2)
       let param = {
-        "questionWrapper": {
-          "controlType": 0,                            //控件类型(0:默认值 1:下拉单选 2:下拉多选 6:文本框 7:数字键盘文本框 99:联合推送)
-          "id": this.editData.id || '',                //新增id空
-          "type": this.dataPub.region1,                //标签归属
-          // "itemType":0,                                //0:是症状,1:不是症状
-          "tagType": this.dataPub.region2,             //标签类型
-          "tagName": this.dataPub.region3,             //系统名称
-          "name": this.dataPub.region4,                //界面名称
-          "joint": this.dataPub.region5,               //标签间的连接符
-          "subType": this.dataPub.region6,   	         //0:可以,1:不可以(当项目检索)
-          "sexType": this.dataPub.region7,             //1:男,2:女,3:通用
-          "ageBegin": this.dataPub.region8,       		 //最小年龄
-          "ageEnd": this.dataPub.region9,              //最大年龄
-          "textGenerate": this.form.currentOrder,      //成文顺序 默认0
-          "copyType": this.dataPub.region10,           //是否复制
-          "showAdd": this.dataPub.region11,            //是否显示加号血压
-          "showInfo": 0,
-          "questionDetails": [],
-          "questionMappings": detailLis       //映射关系,
-        }
+        "modelDetils": detailLis,
+        "name": name,
+        "type": type,
+        "textType": type,
+        "id":this.editData.id || ''
       }
+      // console.log(param,'保存模板的参数')
       this.showDelDialog(param)
     },
     showDelDialog(param) {
-      this.showConfirmDialog('是否保存该标签组?', () => {
-        api.saveOrUpdate(param).then((res) => {
+      this.showConfirmDialog('是否保存该模板?', () => {
+        if(this.editData.id){
+          api.updateModuleInfo(param).then((res) => {
+            if (res.data.code === '0') {
+              this.warning(res.data.msg || '修改成功', 'success','1000')
+              setTimeout(() => {
+                this.$router.push({
+                  path:'/admin/LT-YXSJWH-MBWH'
+                })
+              }, 1000);
+            } else {
+              this.warning(res.data.msg)
+            }
+          }).catch((err) => {
+            this.warning(err);
+          })
+        }else{
+          api.saveModuleInfo(param).then((res) => {
           if (res.data.code === '0') {
             this.warning(res.data.msg || '保存成功', 'success','1000')
             setTimeout(() => {
               this.$router.push({
-                path:'/admin/LT-YXSJWH-BQZWH'
+                path:'/admin/LT-YXSJWH-MBWH'
               })
             }, 1000);
           } else {
@@ -133,6 +120,8 @@ export default {
         }).catch((err) => {
           this.warning(err);
         })
+        }
+        
       });
     },
     showConfirmDialog(msg, resolve) {

+ 282 - 0
src/components/icss/VersionDesc.vue

@@ -0,0 +1,282 @@
+<template>
+  <div class="version-desc">
+    <el-table v-if="list.length>0" 
+              :data="list"
+              border
+              style="width: 100%">
+        <el-table-column
+                type="index"
+                :index="indexMethod"
+                label="编号"
+                width="60">
+        </el-table-column>
+        <el-table-column
+                prop="gmtCreate"
+                label="建立时间"
+                :show-overflow-tooltip="true">
+        </el-table-column>
+        <el-table-column
+                prop="modifierid"
+                label="操作人">
+        </el-table-column>
+        <el-table-column v-if="isFirst"
+                label="操作">
+            <template slot-scope="scope">
+                <el-button type="text" size="small" @click="toEditDesc(scope.row)">修改</el-button>
+                <span style="margin:0 3px;">|</span>
+                <el-button type="text" size="small" class="delete" @click="showDelDialog(scope.row.id)">删除</el-button>
+            </template>
+        </el-table-column>
+        <el-table-column
+                label="详情">
+            <template slot-scope="scope">
+                <el-button type="text" size="small" @click="getDetail(scope.row)">明细</el-button>
+            </template>
+        </el-table-column>
+    </el-table>
+    <el-button v-if="isFirst" class="disclButn" size="small" type="primary" @click="addDesc">+ 添加说明</el-button>
+    <div class="boxMark" v-if="showBox">
+        <el-form ref="form" :model="form" :rules="showDesc?{}:rules" label-width="65px" class="add-desc-form">
+          <p class="top">
+            {{minTitle}}
+            <img src="../../images/close.png" height="12" width="12" @click="cancel">
+          </p>
+          <el-form-item label="标题:" prop="title">
+            <p v-if="showDesc" class="cont">{{form.title}}</p>
+            <el-input v-else v-model="form.title" placeholder="请输入标题" maxlength="30"></el-input>
+          </el-form-item>
+          <el-form-item label="内容:" prop="description" class="discDesc">
+            <p v-if="showDesc" v-html="form.description" class="cont">{{form.description}}</p>
+            <el-input v-else type="textarea" :rows="3" placeholder="请输入内容" v-model="form.description" maxlength="1024"></el-input>
+          </el-form-item>
+          <el-button class="disclButn" size="small" type="primary" @click="comfirn">确定</el-button>
+          <!-- <el-button class="disclButn can" size="small" type="primary" @click="cancel">取消</el-button> -->
+      </el-form>
+    </div>
+  </div>
+</template>
+<script type="text/javascript">
+  import api from '@api/icss.js';
+  export default {
+    name:'VersionDesc',
+    data(){
+      const titleVaild = (rule, value, callback) => {
+        if (!value) {
+          return callback(new Error('请输入标题'));
+        }
+        if (value.length > 30) {
+           this.form.name = value.substr(0, 120);
+           this.$message({
+             showClose: true,
+             type: 'warning',
+             message: '已超过最大字数限制'
+           })
+        }
+        callback();
+      };
+      return{
+        list:[],//版本说明列表
+        form:{
+          title:'',
+          description:''
+        },
+        rules: {
+          title:[
+            { required: true, validator: titleVaild, trigger: ['blur', 'change'] },
+            { required: true, message: '请输入标题', trigger: ['blur', 'change'] }
+          ],
+          description:[
+            { required: true, message: '请输入内容', trigger: ['blur', 'change'] }
+          ]
+        },
+        minTitle:'',
+        showBox:false,
+        modiId:null,
+        showDesc:false
+      }
+    },
+    created(){
+      if(this.versionId){
+        this.getList();
+      }
+    },
+    props:['detail','versionId','isFirst'],
+    methods:{
+      getList(){
+        api.getVersionDetlInfo({id:this.versionId}).then((res)=>{
+          const result = res.data;
+          if(result.code==0){
+            this.list = result.data;
+          }else{
+            this.$message.error(result.msg);
+          }
+        })
+      },
+      indexMethod(index) {
+        // return ((1 - 1) * 10) + index + 1;
+        return index + 1;
+      },
+      toEditDesc(item){//修改备注
+        console.log(124,item);
+        this.minTitle='修改说明';
+        this.showBox = true;
+        this.form.title = item.title;
+        this.form.description = item.description;
+        this.modiId = item.id;
+      },
+      addDesc(){//添加备注
+        this.minTitle='添加说明';
+        this.showBox = true;
+      },
+      comfirn(){//记得清空modiId
+        if(this.modiId){//修改
+          const param = {
+            title:this.form.title,
+            description:this.form.description,
+            detailId:this.modiId
+          }
+          api.modiVersionInfo(param).then((res)=>{
+            if(res.data.code==0){
+              this.$message({
+                message:"添加成功",
+                type:'success'
+              })
+              this.getList();
+            }else{
+              this.$message.error(res.data.msg);
+            }
+          })
+        }else if(this.showDesc){//明细
+
+        }else{//添加
+          const params = {
+            versionDetail: [
+              {
+                description: this.form.description,
+                title: this.form.title,
+              }
+            ],
+            versionInfoId: this.versionId
+          }
+          api.addVersionInfo(params).then((res)=>{
+            if(res.data.code==0){
+              this.$message({
+                message:"添加成功",
+                type:'success'
+              })
+              this.getList();
+            }else{
+              this.$message.error(res.data.msg);
+            }
+          })
+        }
+        this.reset();
+      },
+      reset(){//关闭弹窗复原数据
+        this.showBox = false;
+        this.showDesc = false;
+        this.form.title = "";
+        this.form.description = "";
+        this.modiId = null;
+        this.minTitle= "";
+      },
+      cancel(){
+        this.reset();
+      },
+      getDetail(item){//明细
+        this.minTitle='说明明细';
+        this.showDesc = true;
+        this.showBox = true;
+        this.form.title = item.title;
+        this.form.description = item.description;
+      },
+      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(id){
+        this.showConfirmDialog('是否删除该版本说明?',()=>{
+          api.delVersionInfo({id}).then((res)=>{
+            if(res.data.code=='0'){
+              this.warning(res.data.msg||'操作成功','success');
+              this.getList();
+            }else{
+              this.warning(res.data.msg);
+            }
+          }).catch((error)=>{
+            this.warning(error);
+          })
+        });
+      },
+    }
+  }
+</script>
+<style lang="less" >
+  @import "../../less/admin.less";
+  .disclButn{
+    margin: 30px 0 10px;
+  }
+  .boxMark{
+    position: fixed;
+    top: 0;
+    bottom: 0;
+    left: 0;
+    right: 0;
+    text-align: center;
+    // background: #808080;
+    background-color:rgba(0,0,0,0.3);
+    z-index: 1001;
+  }
+  // .el-form{
+  .add-desc-form{
+    width: 680px;
+    position: absolute;
+    top: 15%;
+    left: 50%;
+    // margin-top: -143px;
+    margin-left: -340px;
+    background: #fff;
+    padding: 20px;
+    max-height: 660px;
+    overflow-y: auto;
+  }
+  .top{
+    font-size: 15px;
+    font-weight: bold;
+    color: #545455;
+    text-align: left;
+    // padding-bottom: 10px;
+    margin-bottom: 15px;
+    // border-bottom: 1px solid #C9C9C9;
+    position: relative;
+    img{
+      position: absolute;
+      right: 5px;
+    }
+  }
+  .can,.can:hover{
+    background: #9B9B9B;
+    border-color: #9B9B9B;
+  }
+  .cont{
+    text-align: left;
+  }
+  .version-desc .el-table__body-wrapper{
+    max-height: 340px;
+    overflow-y: auto;
+  }
+  .version-desc .el-table th{
+    padding: 0px;
+  }
+</style>

+ 58 - 0
src/components/icss/VersionDetail.vue

@@ -0,0 +1,58 @@
+<template>
+  <div>
+    <crumbs title="版本信息维护-明细" linkTo="/admin/LT-YXSJWH-BBXXWH"></crumbs>
+    <div class="contents">
+      <div class="content">
+        <el-form ref="form" :label-position="labelPosition" label-width="85px" class="add-admin-form">
+          <el-form-item label="版本号:">
+              <p>{{data.name}}</p>
+          </el-form-item>
+          <el-form-item label="版本时间:">
+              <p>{{data.refreshTime}}</p>
+          </el-form-item>
+          <el-form-item label="版本备注:">
+              <p>{{data.remark}}</p>
+          </el-form-item>
+          <el-form-item label="版本说明:" v-if="list.length>0">
+              <!-- <p>{{data.remark}}</p> -->
+          </el-form-item>
+        </el-form>
+        <!-- 只有第一条可修改,内部的说明也是 -->
+        <VersionDesc :detail="list" :versionId="data.id" :isFirst="isFirst"/>
+      </div>    
+    </div>
+  </div>
+</template>
+<script type="text/javascript">
+  import api from '@api/icss.js';
+  import VersionDesc from './VersionDesc.vue';
+  export default {
+    name:'VersionDetail',
+    data(){
+      return{
+        data:{},
+        list:[],
+        labelPosition:'left',
+        isFirst:null
+      }
+    },
+    created(){
+      const info = this.$route.params.info;
+      this.data = info;
+      this.list = info.detail?info.detail:[];
+      this.isFirst = this.$route.params.isFirst;
+    },
+    components:{
+      VersionDesc
+    }
+  }
+</script>
+<style lang="less" scoped>
+  @import "../../less/admin.less";
+  .content{
+    background: #fff;
+    padding: 20px 20px 30px;
+    color: #545455;
+    min-width: 980px;
+  }
+</style>

+ 148 - 0
src/components/icss/VersionInfo.vue

@@ -0,0 +1,148 @@
+<template>
+    <div>
+        <crumbs title="版本信息维护">
+            <el-form :inline="true" class="demo-form-inline">
+                <el-form-item label="查询版本号:">
+                    <el-input size="mini" v-model="filter.name" placeholder="输入版本号"></el-input>
+                </el-form-item>
+                <el-form-item>
+                    <el-button size="mini" @click="filterDatas">确认</el-button>
+                    <router-link to="/admin/LT-YXSJWH-TJBBXX" style="margin:0 10px">
+                        <el-button size="mini" type="warning">添加版本信息</el-button>
+                    </router-link>
+                </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="gmtCreate"
+                        label="操作时间"
+                        :show-overflow-tooltip="true">
+                </el-table-column>
+                <el-table-column
+                        prop="name"
+                        label="版本号">
+                </el-table-column>
+                <el-table-column
+                        prop="refreshTime"
+                        label="版本时间">
+                </el-table-column>
+                <el-table-column
+                        prop="modifierid"
+                        label="操作人">
+                </el-table-column>
+                <el-table-column
+                        label="操作">
+                    <template slot-scope="scope">
+                        <el-button type="text" size="small" :class="{forbid:scope.row.id !=list[0].id}" @click="scope.row.id ==list[0].id?toEditVersion(scope.row):''">修改</el-button>
+                    </template>
+                </el-table-column>
+                <el-table-column
+                        label="详情">
+                    <template slot-scope="scope">
+                        <el-button type="text" size="small" @click="getDetail(scope.row)">详情</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/icss.js';
+
+  export default {
+    name: 'VersionInfo',
+    data: function () {
+      return {
+        list: [],
+        cacheData: {},
+        currentPage: 1,
+        pageSize: 10,
+        total: 0,
+        filter: {
+          name: ''
+        }
+      }
+    },
+    created() {
+      this.getDataList();
+    },
+    methods: {
+      toEditVersion(row){
+        this.$router.push({
+          name:'AddVersion',
+          params: {info:row}
+        })
+      },
+      filterDatas(){
+        this.currentPage = 1;
+        this.getDataList();
+      },
+      getDataList() {
+        const param = this.getFilterItems();
+        api.versionInfo(param).then((res) => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.list = data.records;
+            this.cacheData[param.current] = data.records;
+            this.total = data.total;
+          }
+        }).catch((error) => {
+          console.log(error);
+        });
+      },
+      getDetail(item) {
+        let isFirst = item.id==this.list[0].id?true:false;
+        this.$router.push({name:'VersionDetail', params:{info:item,isFirst}});
+      },
+      getFilterItems() {
+        const param = {
+          name: this.filter.name,
+          current: this.currentPage,
+          size: this.pageSize
+        };
+        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();
+        }
+      }
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+    @import "../../less/admin.less";
+    .delete{
+      color: red !important;
+    }
+    .forbid{
+      color: #BFBFBF !important;
+    }
+</style>

Fichier diff supprimé car celui-ci est trop grand
+ 125 - 0
src/js/Convert_Pinyin.js


+ 4 - 0
src/less/admin.less

@@ -163,4 +163,8 @@
 }
 .el-pagination{
   min-width: 980px;
+}
+.el-tooltip__popper {
+  max-width: 900px;
+  line-height: 180%;
 }

+ 21 - 1
src/routes.js

@@ -42,6 +42,9 @@ import SimilarName from '@components/icss/SimilarName.vue'//别名维护
 import AddSimilarName from '@components/icss/AddSimilarName.vue'//别名维护-详情
 import CommonSymptom from '@components/icss/CommonSymptom.vue' //常见科室症状
 import AddCommonSymptom from '@components/icss/AddCommonSymptom' //常见科室症状--添加
+import PromptDetail from '@components/icss/PromptDetail.vue'//提示信息详情
+import MedicinePrompt from '@components/icss/MedicinePrompt.vue'   //医学术语静态知识
+import AddMedicinePrompt from '@components/icss/AddMedicinePrompt.vue'   //医学术语静态知识
 
 import DisclaimerInformation from '@components/icss/DisclaimerInformation.vue'//免责声明
 import DiscInfoDetail from '@components/icss/DiscInfoDetail.vue'//免责声明-详情
@@ -51,6 +54,13 @@ import AddPhysicalExamTemp from '@components/icss/AddPhysicalExamTemp.vue'  //
 
 import TemplateMaintenance from '@components/icss/TemplateMaintenance.vue'//模板维护列表
 import TemplateMaintenanceWrap from '@components/icss/TemplateMaintenanceWrap.vue'//模板维护添加修改
+import VersionInfo from '@components/icss/VersionInfo.vue'//版本信息
+import VersionDetail from '@components/icss/VersionDetail.vue'//版本信息-详情
+import AddVersion from '@components/icss/AddVersion.vue'//版本信息-添加/修改
+import MedicalName from '@components/icss/MedicalName.vue'//医学术语维护-命名维护
+import AddMedicalName from '@components/icss/AddMedicalName.vue'//医学术语维护-命名维护/添加修改
+import MedicalRelation from '@components/icss/MedicalRelation.vue'//医学术语维护-关系维护
+import AddMedicalRelation from '@components/icss/AddMedicalRelation.vue'//医学术语维护-关系维护-添加
 export default [
   {
     path: '/',
@@ -158,7 +168,6 @@ export default [
       {path:'LT-YXSJWH-TSXXWH',component:PromptInfo,name:'PromptInfo'},         //提示信息维护
       {path:'LT-YXSJWH-TJTSXX',component:AddPromptInfo,name:'AddPromptInfo'},         //提示信息维护
 	    {path:'LT-YXSJWH-BMWH',component:SimilarName,name:'SimilarName'},     //别名维护
-      {path:'LT-YXSJWH-TJBM',component:AddSimilarName,name:'AddSimilarName'},     //别名维护-详情
       {path:'LT-YXSJWH-CJZZWH',component:CommonSymptom,name:'CommonSymptom'},  //常见症状维护
       {path:'LT-YXSJWH-TJCJZZ',component:AddCommonSymptom,name:'AddCommonSymptom'},  //常见症状维护--添加
       {path:'LT-YXSJWH-TJBM',component:AddSimilarName,name:'AddSimilarName'},     //别名维护-添加/修改
@@ -169,6 +178,17 @@ export default [
       {path:'LT-YXSJWH-CTBQWH',component:PhysicalExamTemplate,name:'PhysicalExamTemplate'},     //查体模板维护
       {path:'LT-YXSJWH-TJCTMB',component:AddPhysicalExamTemp,name:'AddPhysicalExamTemp'},     //查体模板维护
       {path:'LT-YXSJWH-TJMBWH',component:TemplateMaintenanceWrap,name:'TemplateMaintenanceWrap'},     //模板维护-添加修改
+      {path:'LT-YXSJWH-TSXXXQ',component:PromptDetail,name:'PromptDetail'},         //提示信息维护详情
+      {path:'LT-YXSYKWH-YXSYJTZSWH',component:MedicinePrompt,name:'MedicinePrompt'},         //医学术语提示信息维护
+      {path:'LT-YXSYKWH-TJYXSYJTZS',component:AddMedicinePrompt,name:'AddMedicinePrompt'},         //医学术语提示信息维护添加
+	    {path:'LT-YXSJWH-BBXXWH',component:VersionInfo,name:'VersionInfo'},     //版本信息
+      {path:'LT-YXSJWH-BBXXXQ',component:VersionDetail,name:'VersionDetail'},     //版本信息-详情
+      {path:'LT-YXSJWH-TJBBXX',component:AddVersion,name:'AddVersion'},     //版本信息-添加/修改
+      {path:'LT-YXSYKWH-YXSYMMWH',component:MedicalName,name:'MedicalName'},     //医学术语--命名维护
+      {path:'LT-YXSYKWH-TJYXSY',component:AddMedicalName,name:'AddMedicalName'},     //医学术语--命名维护
+      {path:'LT-YXSYKWH-YXSYGXWH',component:MedicalRelation,name:'MedicalRelation'},     //医学术语--关系维护
+      {path:'LT-YXSYKWH-TJYXSYGX',component:AddMedicalRelation,name:'AddMedicalRelation'},     //医学术语--关系维护-添加
+
     ]
   }
 ]