Browse Source

merge from 'luolei'

zhangxc 6 years ago
parent
commit
855284f34a

+ 1 - 2
src/api/config.js

@@ -90,6 +90,7 @@ export default {
     'getDeptInfo': 'api/icssman/deptInfo/getDeptInfo', //科室维护
     'getDeptInfoDetials': 'api/icssman/deptInfo/getDeptInfoDetials', //科室维护-详情
     'deleteDeptInfo': 'api/icssman/deptInfo/deleteDeptInfo', //科室维护-删除
+    'saveOrUpdate': 'api/icssman/questionInfo/saveOrUpdate', //添加标签保存
 	},
 	menuIconList: { //菜单对应图标
 		'YH-KZT': 'el-icon-menu',
@@ -100,7 +101,5 @@ export default {
 		'LT-DDXT': 'el-icon-setting',
 		'LT-CPXGL': 'el-icon-upload',
 		'LT-GRZX': 'el-icon-news'
-  },
-  controlType:{
   }
 }

+ 3 - 0
src/api/icss.js

@@ -27,4 +27,7 @@ export default {
     deleteDeptInfo(param) {//科室维护-详情
         return axios.post(urls.deleteDeptInfo, param)
     },
+    saveOrUpdate(param) {
+        return axios.post(urls.saveOrUpdate, param)
+    },
 }

+ 57 - 0
src/api/utils.js

@@ -58,6 +58,8 @@ export default {
    * @param {arr} 被操作的数组 
    * @param {val} 需要剔除或者判断的值 
    * @param {type} 是剔除(1)还是判断(2)是否存在,不存在返回[]
+   * @param {des} 1数組元素是对象
+   * 
    */
   filterArr(arr,val,type,des){  //数组剔除指定元素 
     if(type == 1){
@@ -74,5 +76,60 @@ export default {
         return true;
       }
     }
+  },
+
+  /**
+   * 
+   * @param {dataArr} 右侧选中的数据二维数组 
+   * @param {type} 填写单类型 
+   */
+  dataRecombination(dataArr,type){
+    console.log(type,dataArr)
+    let tmpArr = [];
+    for(let i = 0;i < dataArr.length;i++){
+      let mapping = {
+        "sonQuestion": "",
+        "position": 0,              //默认值,传0
+        "formPosition": 1,          // 填写单显示位置(0:左, 1:上)
+        "exclusionType": 1,         //互斥:1
+        "text": "",                  //如果有文本内容,上面的值都置空
+      }
+      let sonQuestionMap = {     //目前只在既往史中用到,同层数据置空
+          "id": "",
+          "questionMappings": []
+      }
+      let tmpData = dataArr[i];
+  
+      if(type == 6 && tmpData.length > 0){//既往史
+        let sonMappingArr=[]; 
+        for(let j = 0; j < tmpData.length;j++){        //多个标签
+          let sonMappingObj = {};
+          if(i == 0){
+            mapping.formPosition = 1;
+            mapping.exclusionType = 1;
+          }else{
+            mapping.formPosition = 0;
+            mapping.exclusionType = 0;
+          }
+          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){//杂音
+        if(i == 0){
+          mapping.formPosition = 1;
+          mapping.exclusionType = 1;
+        }else{
+          mapping.formPosition = 0;
+          mapping.exclusionType = 0;
+        }
+        mapping.sonQuestion = tmpData[0];    //{sonQuestion:18}
+        tmpArr.push(mapping)
+      }
+    }
+    return tmpArr;
   }
 }

+ 111 - 3
src/components/icss/NoiseTemplate.vue

@@ -17,10 +17,42 @@
         :pool="dataPub.tagPool"
         :type="dataPub.region1"
         :sign="dataPub.region2"
+        :order="dataPub.order"
+        :tipLis="dataPub.tipLis"
         :choose="dataPub.region2 == 6?'multiple':'single'"
         v-show="dataPub.region2 == 2 || dataPub.region2 == 6"
+        @changeActionData="changeActionData"
       ></PubTagPartDetail>
-     <SymptomTagGroup v-if="dataPub.region2 == 4" :pool="dataPub.tagPool" :type="dataPub.region1"></SymptomTagGroup>
+      <SymptomTagGroup 
+        v-if="dataPub.region2 == 4" 
+        :pool="dataPub.tagPool" 
+        :type="dataPub.region1">
+
+      </SymptomTagGroup>
+      <el-form
+        v-if="dataPub.region2 == 2"
+        class="order"
+        :rules="rules"
+        :model="form"
+        label-width="150px"
+      >
+        <el-form-item
+          label="选择标签成文顺序:"
+          prop="currentOrder"
+        >
+          <el-select
+            v-model="form.currentOrder"
+            placeholder="选择标签成文顺序"
+          >
+            <el-option
+              v-for="item in dataPub.order"
+              :label="item.name"
+              :value="item.val"
+              :key="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+      </el-form>
       <div class="btn">
         <el-button
           type="primary"
@@ -37,14 +69,37 @@
 import PubTagGroup from './PubTagGroup';
 import PubTagPartDetail from './PubTagPartDetail';
 import SymptomTagGroup from './SymptomTagGroup';
+import api from '@api/icss.js';
+import utils from '@api/utils.js';
+
 export default {
   name: 'NoiseTemplateWrapper',
   data() {
     return {
       dataPub: {},      //公用组件传的值都在这
+      form: {
+        currentOrder: '0',     //标签成文顺序
+      },
+      rules: {
+        currentOrder: [
+          { required: true, message: '选择标签成文顺序', trigger: 'change' }
+        ]
+      },
+      sendIds: [[], [], [], [], [], []],           //标签明细右侧操作数据
     }
   },
-
+  computed: {
+    newSign() {
+      return this.dataPub.region2;
+    },
+  },
+  watch: {
+    newSign(nextVal, prevVal) {
+      if (nextVal != prevVal) {
+        this.form.currentOrder = '0'
+      }
+    },
+  },
   methods: {
     back() { this.$router.go(-1) },
     changeVal(val) {    //子组件数据改变传递到父组件
@@ -57,12 +112,58 @@ export default {
     changeType(type) {        //填写单类型改变,标签明细左侧更新,右侧清空
       console.log(type)
     },
+    changeActionData(arr) {          //标签明细右侧数据id
+      this.sendIds = arr
+    },
     submitForm() {       // 调用子组件的方法验证公用部分
       this.$refs.submitForm.submitForm('groups');
     },
     validatePass() {      //验证成功回调,调取接口
       //仍需验证标签明细是否选择
-
+      if (JSON.stringify(this.sendIds) == '[[],[],[],[],[],[]]') {
+        this.$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": "",                                    //新增id置空
+          "type": this.dataPub.region1,                //标签归属
+          "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.region2 == 6 ? this.dataPub.region10 : (this.dataPub.region2 == 3 ? this.dataPub.region11 : ''),                               //是否复制
+          "showAdd": 0,                                //是否显示加号血压
+          "showInfo": 0,
+          "questionDetails": [],
+          "questionMappings": detailLis       //映射关系,
+        }
+      }
+      console.log(param)
+      // return api.saveOrUpdate(param).then((res) => {
+      //   if (res.data.code === '0') {
+      //     this.$message({
+      //       message: res.data.msg,
+      //       type: 'success'
+      //     });
+      //   }else{
+      //     this.$message({
+      //       message: res.data.msg,
+      //       type: 'error'
+      //     });
+      //   }
+      // })
     },
   },
   components: {
@@ -99,6 +200,13 @@ export default {
   .btn {
     text-align: right;
   }
+  .order {
+    margin-bottom: 20px;
+    .el-input__inner {
+      line-height: 30px;
+      height: 30px;
+    }
+  }
 }
 </style>
 

+ 30 - 37
src/components/icss/PubTagGroup.vue

@@ -84,11 +84,11 @@
         >
           <el-option
             label="不可以"
-            value="不可以"
+            value="1"
           ></el-option>
           <el-option
             label="可以"
-            value="可以"
+            value="0"
           ></el-option>
         </el-select>
       </el-form-item>
@@ -102,15 +102,15 @@
         >
           <el-option
             label="通用"
-            value="通用"
+            value="3"
           ></el-option>
           <el-option
             label="男"
-            value=""
+            value="1"
           ></el-option>
           <el-option
             label="女"
-            value=""
+            value="2"
           ></el-option>
         </el-select>
       </el-form-item>
@@ -130,19 +130,18 @@
           @input="sendData"
         ></el-input>
       </el-form-item>
-      <!-- 暂时不用 -->
-      <!-- <el-form-item label="选择子项时是否复制主项标签:" prop="region10">
+      <el-form-item label="选择子项时是否复制主项标签:" prop="region10" v-if="form.region2 == 6">
         <el-select v-model="form.region10">
-          <el-option label="不可以" value="不可以"></el-option>
-          <el-option label="可以" value="可以"></el-option>
+          <el-option label="不可以" value="1"></el-option>
+          <el-option label="可以" value="0"></el-option>
         </el-select>
       </el-form-item>
-      <el-form-item label="是否复制当前模块:" prop="region11">
+      <el-form-item label="是否复制当前模块:" prop="region11" v-if="form.region2 == 3">
         <el-select v-model="form.region11">
-          <el-option label="不可以" value="不可以"></el-option>
-          <el-option label="可以" value="可以"></el-option>
+          <el-option label="不可以" value="1"></el-option>
+          <el-option label="可以" value="0"></el-option>
         </el-select>
-      </el-form-item> -->
+      </el-form-item>
     </el-form>
   </div>
 </template>
@@ -164,29 +163,21 @@ export default {
         this.validateSystomName(value,callback)
     };
     return {
-      status2: [
-        { name: '症状标签', key: '8' },
-        { name: '单选自由填写项', key: '9' },
-        { name: '多选项、预设结构选择', key: '10' },
-        { name: '预设结构选择', key: '11' },
-        { name: '伴/无结构类型', key: '12' },
-        { name: '推送症状类型', key: '13' },
-        { name: '诊断/药品/辅检', key: '14' },
-        { name: '血压类型', key: '15' },
-      ],
       form: {
-        region1: '3',    //归属
+        region1: '4',    //归属
         region2: '2',     //填写单类型
         region3: '',      //系统名称
         region4: '',      //界面名称
         region5: '',      //选项之间的链接
-        region6: '不可以',      //是否可以检索
-        region7: '通用',       //性别
+        region6: '1',      //是否可以检索
+        region7: '3',       //性别
         region8: '0',          //最小年龄
         region9: '200',         //最大年龄
-        // region10: '可以',        //是否复制主标签
-        // region11: '不可以',       //是否复制当前模块
+        region10: '0',        //是否复制主标签
+        region11: '1',       //是否复制当前模块
         tagPool:[],          //标签池数据
+        order:[],            //排序方式
+        tipLis:[],           //提示列表
       },
       rules: {
         region1: [
@@ -214,12 +205,12 @@ export default {
         region9: [
           { required: true, message: '请输入最大年龄', trigger: 'change' }
         ],
-        // region10: [
-        //   { required: true, message: '选择子项时是否复制主项标签', trigger: 'change' }
-        // ],
-        // region11: [
-        //   { required: true, message: '是否复制当前模块', trigger: 'change' }
-        // ],
+        region10: [
+          { required: true, message: '选择子项时是否复制主项标签', trigger: 'change' }
+        ],
+        region11: [
+          { required: true, message: '是否复制当前模块', trigger: 'change' }
+        ],
       },
       tmpSex: '通用',
       Adscriptions: [],
@@ -228,7 +219,6 @@ export default {
       tagTypes: [],        //标签池数据
       type:'',
       systom:null,      //标签系统名称存在与否
-      order:[],
     }
   },
   computed: {
@@ -270,7 +260,8 @@ export default {
         if (res.data.code === '0') {
           this.Adscriptions = res.data.data[1];
           this.labelTypes = res.data.data[2];
-          this.order = res.data.data[5];
+          this.form.order = res.data.data[5];
+          this.form.tipLis = res.data.data[6];
         }
       })
     },
@@ -317,10 +308,12 @@ export default {
         region3: '',
         region4: '',
         region5: '',
-        region6: '不可以',
+        region6: '1',
         region7: sex,
         region8: '0',
         region9: '200',
+        region10: '0',
+        region11: '1',
         tagPool:[]
       }
       this.$emit('changeVal', this.form, false)

+ 33 - 35
src/components/icss/PubTagPartDetail.vue

@@ -78,40 +78,24 @@
       <div class="partWaring">
         <ul>
           <li v-for="i in 5" :key="i">
-            <p v-for="item in poolDetailListTips[i]" class="partDetail tipsWrap" v-show="1||2||3||4||5||6||7||8||9" :key="item">
-              <span class="tips" v-if="item == 1">1111</span>
-              <span class="tips" v-if="item == 2">2222</span>
-              <span class="tips" v-if="item == 3">3333</span>
-              <span class="tips" v-if="item == 4">4444</span>
-              <span class="tips" v-if="item == 5">5555</span>
-              <span class="tips" v-if="item == 6">6666</span>
-              <span class="tips" v-if="item == 7">7777</span>
-              <span class="tips" v-if="item == 8">8888</span>
-              <span class="tips" v-if="item == 9">9999</span>
-              <span class="tips" v-if="item == 10">1010</span>
+            <p v-for="item in poolDetailListTips[i]" class="partDetail tipsWrap" v-show="poolDetailListTips[i].length > 0" :key="item">
+              <span class="tips" v-if="item == 0">{{currentTipLis[item].name}}</span>
+              <span class="tips" v-if="item == 1">{{currentTipLis[item].name}}</span>
+              <span class="tips" v-if="item == 2">{{currentTipLis[item].name}}</span>
+              <span class="tips" v-if="item == 3">{{currentTipLis[item].name}}</span>
+              <span class="tips" v-if="item == 4">{{currentTipLis[item].name}}</span>
+              <span class="tips" v-if="item == 5">{{currentTipLis[item].name}}</span>
+              <span class="tips" v-if="item == 6">{{currentTipLis[item].name}}</span>
+              <!-- <span class="tips" v-if="item == 7">{{currentTipLis[item].name}}</span>
+              <span class="tips" v-if="item == 8">{{currentTipLis[item].name}}</span>
+              <span class="tips" v-if="item == 9">{{currentTipLis[item].name}}</span>
+              <span class="tips" v-if="item == 10">{{currentTipLis[item].name}}</span> -->
             </p>
           </li>
         </ul>
       </div>
     </div>
     <span class="mutex">互斥项</span>
-    <!-- <el-form-item
-      label="选择标签成文顺序:"
-      prop="order"
-    >
-      <el-select
-        v-model="form.order"
-        placeholder="选择标签成文顺序"
-        @change="changeType"
-      >
-        <el-option
-          v-for="item in labelTypes"
-          :label="item.name"
-          :value="item.val"
-          :key="item.id"
-        ></el-option>
-      </el-select>
-    </el-form-item> -->
   </div>
 </template>
 <script>
@@ -124,6 +108,10 @@ export default {
       default: () => [],
       type: Array
     },
+    tipLis: {
+      default: () => [],
+      type: Array
+    },
     type: {
       default: '',
       type: String
@@ -141,14 +129,12 @@ export default {
     return {
       poolDetailList: [[],[],[],[],[],[]],     //默认6个部分
       poolDetailListTips: [[],[],[],[],[],[]],     //6个部分对应的提示
+      poolDetailListIds: [[],[],[],[],[],[]],     //6个部分对应的id
       poolDetailListAll:[],    //默认6个部分转化为一维数组
       activePart: '-1',        //选中part第几个
       activePartSon:'-1',      //选中第几个part中的元素了
       selectArr: [false, false, false, false, false, false],   //右侧选中part状态
-      form:{
-        order:'',     //标签成文顺序
-      },
-      
+
       styles:{background:'#eae7e7'},                       //选中单条样式
       styleR:{color:'red !important'},
       searchVal: '',           //搜索值
@@ -156,6 +142,7 @@ export default {
       currentLis:[],           //选中单条ID组合(多选)
       notIds:[],               //去重IDs
       multipleItem:[],         //右侧选中的单条标签
+      currentTipLis:[],         //右侧选中的标签提示
     }
   },
   watch: {
@@ -164,19 +151,25 @@ export default {
         this.currentPool = newVal
       }
     },
+    tipLis(newVal, preVal) {
+      if (JSON.stringify(newVal) != JSON.stringify(preVal)) {
+        this.currentTipLis = newVal
+      }
+    },
     sign(newVal, preVal) {
       if (JSON.stringify(newVal) != JSON.stringify(preVal)) {
         this.poolDetailList = [[],[],[],[],[],[]]
         this.poolDetailListTips = [[],[],[],[],[],[]]
+        this.poolDetailListIds = [[],[],[],[],[],[]]
         this.poolDetailListAll=[]
         this.activePart='-1'
         this.activePartSon='-1'
         this.selectArr = [false, false, false, false, false, false]
-        this.searchVal= ''          
+        this.searchVal= ''
         this.currentPool= []        
         this.currentLis=[]           
         this.notIds=[]               
-        this.multipleItem=[]       
+        this.multipleItem=[]
       }
     },
     searchVal(newVal, preVal){
@@ -252,6 +245,7 @@ export default {
     getPoolDetailListTips(){
       let list = this.poolDetailList;
       let poolDetailListTips = [[],[],[],[],[],[]];
+      let poolDetailListIds = [[],[],[],[],[],[]];
       for(let i = 0;i < list.length;i++){
         let tmpLis = list[i];
         if(tmpLis.length > 0){
@@ -260,10 +254,13 @@ export default {
             if(!utils.filterArr(poolDetailListTips[i],tmpLi.controlType,2)){
               poolDetailListTips[i].push(tmpLi.controlType)
             }
+            poolDetailListIds[i].push(tmpLi.id)
           }
         }
       }
+      this.$emit('changeActionData',poolDetailListIds, false);
       this.poolDetailListTips = poolDetailListTips
+      this.poolDetailListIds = poolDetailListIds
     },
     getStyle(id){       //左侧选中状态
       return utils.filterArr(this.currentLis,id,2)
@@ -273,6 +270,7 @@ export default {
     },
     searchTagList() {
       let ids = [];
+      this.currentLis = []
       this.poolDetailListAll.map((value)=>{
         ids.push(value.id)
       })
@@ -432,7 +430,7 @@ export default {
   box-sizing: border-box;
   padding-right: 100px;
   position: relative;
-  padding-bottom: 500px;
+  padding-bottom: 10px;
   .desTitle {
     padding-bottom: 10px;
   }