Sfoglia il codice sorgente

合并development分支

liucf 6 anni fa
parent
commit
bf08847a4f

+ 1 - 1
build/utils.js

@@ -48,7 +48,7 @@ exports.cssLoaders = function (options) {
       return ExtractTextPlugin.extract({
         use: loaders,
         fallback: 'vue-style-loader',
-        publicPath:'../'             //配置背景图片地址
+        publicPath:'../../'             //配置背景图片地址
       })
     } else {
       return ['vue-style-loader'].concat(loaders)

+ 2 - 2
build/webpack.base.conf.js

@@ -37,10 +37,10 @@ module.exports = {
         loader: 'vue-loader',
         options: vueLoaderConfig
       },
-      {
+      /*{
         test: /\.less$/,
         loader: "style-loader!css-loader!less-loader",
-      },
+      },*/
       {
         test: /\.js$/,
         loader: 'babel-loader',

+ 3 - 6
config/index.js

@@ -3,11 +3,8 @@
 // see http://vuejs-templates.github.io/webpack for documentation.
 
 const path = require('path')
-const proxy_path = 'http://192.168.2.236:80';
-// const proxy_path = 'http://192.168.2.241:80';
-// const proxy_path = 'http://192.168.3.100:5050';
-// const proxy_path = 'http://192.168.3.117:5050';
-// const proxy_path = 'http://192.168.3.115:5050';
+// const proxy_path = 'http://192.168.2.236:80';
+const proxy_path = 'http://192.168.2.236:5050';
 
 module.exports = {
   dev: {
@@ -54,7 +51,7 @@ module.exports = {
     // Paths
     assetsRoot: path.resolve(__dirname, '../dist'),
     assetsSubDirectory: 'static',
-    assetsPublicPath: '/',
+    assetsPublicPath: './',
 
     /**
      * Source Maps

File diff suppressed because it is too large
+ 9314 - 0
package-lock.json


+ 0 - 6
src/common/CheckBox.vue

@@ -1,6 +1,5 @@
 <template>
   <div class="check-wrap" v-if="item">
-    <p class="quest">{{indx + '.' + datas.name}}</p>
     <img :src="datas.url.replace('{imageUrlPrefix}',imgUrl)" v-if="datas.url">
     <p v-for="(it,index) in datas.questionDetailList" :key="it.id" class="list" @click="handleClick(it,index)">
       <img :src="it.select==1?check:defaultPic">
@@ -48,11 +47,6 @@ import checkIcon from '../images/check.png'
 </script>
 <style lang="less" scoped>
   .check-wrap{
-    font-size: .3rem;
-    .quest{
-      color:#000;
-      margin-bottom: .2rem;
-    }
     img{
       width:100%;
     }

+ 17 - 2
src/common/ComTextArea.vue

@@ -1,6 +1,10 @@
 <template>
   <div class="comArea">
-    <textarea @input="changeVal" :style={width:width,height:height} v-model="txt" placeholder="请输入"></textarea>
+    <textarea @input="changeVal" 
+            :style="{width:width,height:height}" 
+            v-model="txt" 
+            placeholder="请输入"
+            @blur="blur"></textarea>
   </div>
 </template>
 
@@ -16,15 +20,24 @@ export default {
       default: '2rem',
       type: String
     },
+    item:{
+      type:Object,
+      require: true
+    }
   },
   data() {
     return {
-      txt:''
+      txt:this.item.value || '' //回读用
+      // txt:'' 
     }
   },
   methods:{
     changeVal(){
       this.$emit('changeAreaVal',this.txt)
+    },
+    blur(){
+      const newData = Object.assign({},this.item,{value:this.txt});
+      this.$emit("updata",newData);
     }
   }
 }
@@ -32,6 +45,7 @@ export default {
 <style lang="less" scoped>
   .comArea {
     textarea {
+      color: #4F50FF;
       resize: none;
       box-shadow: none;
       font-size: 0.3rem;
@@ -40,6 +54,7 @@ export default {
       border-radius: .08rem /* 8/100 */;
       -webkit-appearance: none;
       padding: .16rem /* 16/100 */ .3rem /* 30/100 */;
+      margin-bottom: .3rem;
     }
   }
 </style>

+ 46 - 0
src/common/Input.vue

@@ -0,0 +1,46 @@
+<template>
+  <div class="inp-wrap">
+    <input :type="item.controlType==6?'text':'number'" 
+          :class="{'change':borColor}" 
+          v-model="val" 
+          @input="changeVal" 
+          @blur="blur">
+  </div>
+</template>
+<script type="text/javascript">
+  export default {
+    name:'Input',
+    data(){
+      return{
+        msg:"输入框",
+        val:this.item.value || '',
+        borColor:false,
+      }
+    },
+    props:['item'],
+    methods:{
+      changeVal(){
+        this.borColor = true;
+      },
+      blur(){
+        this.borColor = false;
+        const newData = Object.assign({},this.item,{value:this.val});
+        this.$emit("updata",newData);
+      }
+    }
+  }
+</script>
+<style lang="less" scoped>
+  .inp-wrap{
+    input{
+      width: 100%;
+      color: #4F50FF;
+      font-size: .3rem;
+      border-bottom: 1px solid #7C828E;
+      margin-bottom: .3rem;
+    }
+    .change{
+      border-color:  #4F50FF;
+    }
+  }
+</style>

+ 109 - 0
src/common/Label.vue

@@ -0,0 +1,109 @@
+<template>
+  <div class="label-wrap" v-if="item">
+    <p class="quest">{{datas.name}}</p>
+    <span v-for="(it,index) in datas.questionMapping" :key="it.id" :class="['symp',{'check':it.select==1}]" @click="handleClick(it,index)">
+      <i>{{it.name}}</i>
+      <i v-if="it.select==1" @click="deletSymp($event,it,index)"><img src="../images/delete.png" alt=""></i>
+    </span>
+    <Toast :message="delText" 
+          :show="showToast"
+          @comfirn="comfirnDel" 
+          @cancel="cancelDel"/>
+  </div>
+</template>
+<script type="text/javascript">
+import Toast from '../common/Toast.vue';
+  export default{
+    name:'Label',
+    data(){
+      return{
+        datas:{},
+        checkTxt:[],
+        showToast:false,
+        delText:"是否取消当前选中内容?",
+        tempItem:{}
+      }
+    },
+    props:['item','indx','moduleType','ppId'],
+    created(){
+      this.datas = JSON.parse(JSON.stringify(this.item));
+    },
+    components:{
+      Toast
+    },
+    methods:{
+      handleClick(it,index){
+        // store更新数据
+        // this.$emit('updateOrig');
+        const newItem = Object.assign({},it,{select:1});
+        const origMapping = this.item.questionMapping;
+        let mapping = this.datas.questionMapping;
+        for(let i in origMapping){
+          if(origMapping[i].id==it.id){
+            mapping.splice(i,1,newItem)
+          }
+        }
+        // 存值到store
+        this.$store.commit('setOrigin',{type:this.moduleType,data:newItem,pId:this.datas.id});
+        this.$store.commit('setText',{type:this.moduleType,text:it.name,pId:it.id});
+        if(it.questionMapping&&it.questionMapping.length>0){//有明细
+          this.$emit("setDetail",{detail:it,ppId:this.ppId})
+        }
+      },
+      deletSymp(e,it,index){
+        e.stopPropagation();
+        this.showToast = true;
+        this.tempItem = it;
+      },
+      comfirnDel(){
+        const temp = this.tempItem;
+        const newItem = Object.assign({},temp,{select:0});
+        const origMapping = this.item.questionMapping;
+        let mapping = this.datas.questionMapping;
+        for(let i in origMapping){
+          if(origMapping[i].id==temp.id){
+            mapping.splice(i,1,newItem)
+          }
+        }
+        this.$store.commit('setOrigin',{type:this.moduleType,data:newItem,pId:this.datas.id});
+        this.$store.commit('delText',{type:this.moduleType,pId:temp.id});
+        this.cancelDel();
+      },
+      cancelDel(){
+        this.showToast = false;
+        this.tempItem = {};
+      }
+    }
+  }
+</script>
+<style lang="less" scoped>
+  .label-wrap{
+    font-size: .3rem;
+    .quest{
+      color: #000;
+      margin-bottom: .36rem;
+      font-weight: 700;
+    }
+    img{
+      width:.56rem;
+      height: .70rem;
+      vertical-align: top;
+      z-index: 22;
+    }
+    i{
+      display: inline-block;
+      vertical-align: top;
+    }
+    i:first-child{
+      min-width:1.34rem;
+      height: .72rem;
+      line-height: .72rem;
+      text-align: center;
+    }
+    .check{
+      color: #fff;
+      background: linear-gradient(-270deg, #4F4FFF, #4F8BFF);
+      box-shadow: 0 .08rem .16rem 0 rgba(79,129,255,0.40);
+    }
+  }
+</style>

+ 0 - 6
src/common/Radio.vue

@@ -1,6 +1,5 @@
 <template>
   <div class="radio-wrap" v-if="item">
-    <p class="quest">{{indx + '.' + datas.name}}</p>
     <img :src="datas.url.replace('{imageUrlPrefix}',imgUrl)" v-if="datas.url">
     <p v-for="(it,index) in datas.questionDetailList" :key="it.id" class="list" @click="handleClick(it,index)">
       <img :src="it.select==1?check:defaultPic">
@@ -45,11 +44,6 @@ import {deepClone} from '@utils/tools.js'
 </script>
 <style lang="less" scoped>
   .radio-wrap{
-    font-size: .3rem;
-    .quest{
-      color:#000;
-      margin-bottom: .2rem;
-    }
     img{
       width:100%;
     }

+ 4 - 3
src/common/Toast.vue

@@ -1,8 +1,8 @@
 <template>
   <div class="toast-wrap" v-if="show">
     <div class="content">
-      <div class="text">
-        {{message||msg}}
+      <div class="text" v-html="message||msg">
+        <!-- {{message||msg}} -->
       </div>
       <div class="btn">
         <span @click="comfirn">确定</span>
@@ -49,8 +49,9 @@
       .text{
         color:#000;
         text-align: center;
-        height: 1.45rem;
+        height: 1.25rem;
         overflow-y: auto;
+        padding-top: .2rem;
       }
       .btn{
         margin-top: .20rem;

+ 1 - 0
src/components/AddContent.vue

@@ -6,6 +6,7 @@
           <p class="question">{{idx+1 + '. ' +item.name}}</p>
           <ComTextArea
             v-if="item.controlType == 6"
+            :item="item"
             @changeAreaVal="changeAreaVal($event,idx)"
           ></ComTextArea>
           <template

+ 23 - 17
src/components/Detail.vue

@@ -2,6 +2,7 @@
   <div class="detail-wrap">
     <!-- <div v-for="(item,index) in datas"> -->
     <div v-for="(item,index) in checkDatas.questionMapping">
+      <p class="quest">{{index + 1 +'.' + item.name}}</p>
       <Radio v-if="item.controlType==1" 
             :item="item" 
             :indx="index+1"
@@ -12,17 +13,23 @@
             :indx="index+1"
             :key="item.id"
             @updata="updataData"/>
+      <!-- 文本域 -->
+      <ComTextArea v-if="item.controlType == 5"
+            :item="item"
+            @updata="updataData"/>
       <!-- 输入框 -->
-      <div class="inp" v-if="item.controlType==6">
-        <p class="name">{{index+1+'.'+item.name}}</p>
-        <input type="" name="">
-      </div>
+      <Input v-if="item.controlType==6 || item.controlType==7"
+            :item="item"
+            :key="item.id"
+            @updata="updataData"/>
     </div>
   </div>
 </template>
 <script type="text/javascript">
 import Radio from '../common/Radio.vue';
 import CheckBox from '../common/CheckBox.vue';
+import Input from '../common/Input.vue';
+import ComTextArea from '../common/ComTextArea.vue';
 // 将获取到的数据源转换成私有数据,处理选择事件。点击完成后统一存到store中,便于回读
   export default {
     name:'Detail',
@@ -31,13 +38,15 @@ import CheckBox from '../common/CheckBox.vue';
         checkDatas:{}
       }
     },
-    props:['datas'],
+    props:['datas','type','ppId'],
     created(){
       this.checkDatas = JSON.parse(JSON.stringify(this.datas));
     },
     components:{
       Radio,
-      CheckBox
+      CheckBox,
+      Input,
+      ComTextArea
     },
     methods:{
       updataData(data){
@@ -57,23 +66,20 @@ import CheckBox from '../common/CheckBox.vue';
             text += datas[i].value+',';
           }
         }
-        let msg = this.checkDatas.name+ ',' + text;
-        this.$store.commit('setDatas',{data:this.checkDatas,pId:this.checkDatas.id,type:"1"});
-        this.$store.commit('setText',{text:msg,pId:this.checkDatas.id,type:"1"});
+        let msg = this.checkDatas.name+ ',' + text;console.log("完成:",this.checkDatas)
+        this.$store.commit('setDatas',{data:this.checkDatas,pId:this.checkDatas.id,type:this.type,ppId:this.ppId});
+        this.$store.commit('setText',{text:msg,pId:this.checkDatas.id,type:this.type});
       }
     },
-    /*watch:{
-      checkDatas:{
-        handler(newVal,oldVal){
-          console.log("详情数据更新:",newVal,oldVal); 
-        },
-        deep:true
-      }
-    },*/
   }
 </script>
 <style lang="less" scoped>
   .detail-wrap{
     padding: .3rem .5rem .3rem .6rem;
+    font-size: .3rem;
+    .quest{
+      color:#000;
+      margin-bottom: .2rem;
+    }
   }
 </style>

+ 2 - 2
src/components/DetailBox.vue

@@ -8,7 +8,7 @@
       <span>清空</span>
     </div>
     <div class="main">
-      <Detail :datas="privateData" ref="detail"/>
+      <Detail :datas="privateData" ref="detail" :type="moduleType" :ppId="ppId"/>
     </div>
     <div class="foot" @click="complete">完成</div>
   </div>
@@ -41,7 +41,7 @@
         this.$emit("pComplete");
       }
     },
-    props:['data'],
+    props:['data','moduleType','ppId'],
     components:{
       Detail
     }

+ 53 - 34
src/components/DiagTreat.vue

@@ -4,11 +4,12 @@
         v-if="dtoList"
         :key="it.id">
       <div class="label" v-if="it.controlType==0">
-        <p class="quest">{{it.name}}</p>
-        <span v-for="(item,indx) in it.questionMapping" class="symp" @click="handleClick(item,indx,i)">
-          {{item.name}}
-          <i v-if="item.select==1" @click="deletSymp(item,indx)"><img src="../images/delete.png" alt=""></i>
-        </span>
+        <Label :item="it" 
+              :indx="i" 
+              :ppId="it.id" 
+              :moduleType="datas.type" 
+              @setDetail="setDetail"
+              @updateOrig="updateOrig"/>
       </div>
       <UploadImg v-if="it.controlType==4" 
             :item="it" 
@@ -16,46 +17,53 @@
             :imgList="imgs"
             />
     </div>
-    <div class="result">
+    <div class="result" v-if="checkText.length>0">
       <p class="title">治疗情况</p>
-      <p>经典款了估计的结果</p>
+      <p v-for="(v,i) in checkText">{{v.text}}</p>
     </div>
     <div class="foot">
       <span class="back" @click="beBack">{{'返回'+ preName}}</span>
       <span class="next" @click="toNext">{{'进入'+ nextName}}</span>
     </div>
-    <!-- <div class="detail" v-if="show">
+    <div class="detail" v-if="show">
       <DetailBox @close="closeDetal" 
               :data="labelDetail" 
+              :moduleType="datas.type"
+              :ppId="ppId"
               v-if="labelDetail.questionMapping&&labelDetail.questionMapping.length>0"
               @pComplete="complete"/>
     </div>
-    <Toast :message="delText" 
+    <!-- <Toast :message="delText" 
           :show="showToast"
           @comfirn="comfirnDel" 
           @cancel="cancelDel"/> -->
   </div>
 </template>
 <script type="text/javascript">
-  import UploadImg from '../common/UploadImg.vue'
+  import UploadImg from '../common/UploadImg.vue';
+  import Label from '../common/Label.vue';
+  import DetailBox from './DetailBox.vue';
+  import Toast from '../common/Toast.vue';
   export default {
     name:'DiagTreat',
     data(){
+      let {origin,text} = this.$store.state.diagnose;console.log("诊疗:",origin)
       return{
         msg:"诊疗情况",
-        chooseSymp:[{name:'未治疗'}],
         imgs:this.$store.state.diagnose.imgSrc,
-        dtoList:[], //选项
-        details:[], //明细
-        chooseTxt:{} //选中的文字
+        dtoList:origin, //模板数据
+        labelDetail:{}, //标签明细
+        checkText:text, //选中的文字
+        show:false,
+        ppId:null
       }
     },
     props:['datas','preName','nextName'],
     created(){
-      let dataArr = this.datas&&this.datas.moduleDetailDTOList;
+      /*let dataArr = this.datas&&this.datas.moduleDetailDTOList;
       if(dataArr){
         this.dtoList = JSON.parse(JSON.stringify(dataArr));
-      }
+      }*/
     },
     methods:{
       beBack(){
@@ -63,26 +71,38 @@
       },
       toNext(){
         this.$emit('next');
+        // console.log("模板数据:",this.datas,"诊疗数据:",this.dtoList)
+      },
+      setDetail(obj){
+        this.labelDetail = obj.detail;
+        this.ppId = obj.ppId;
+        this.show = true;
+      },
+      complete(){
+        this.show = false;
+        this.labelDetail = {};
+        this.ppId = null;
+        // 处理明细选中的值
       },
-      handleClick(item,index,pIndex){ 
-        // 存值到store并实现及时更新
-        let value = item.name;
-        let currMapping = JSON.parse(JSON.stringify(this.dtoList[pIndex].questionMapping));
-        currMapping[index].select = 1
-        this.dtoList[pIndex] = Object.assign({},this.dtoList[pIndex],{questionMapping:currMapping},{value:value})
-         console.log(222,this.dtoList[pIndex],currMapping)
+      closeDetal(){
+        this.show = false;
+        this.labelDetail = {};
+        this.ppId = null;
       },
-      deletSymp(item,index){
-        console.log(456,item)
+      updateOrig(){
+        let origin = this.$store.state.diagnose.origin;
+        // this.dtoList = origin;console.log("更新:",origin)
       }
     },
     components:{
-      UploadImg
+      UploadImg,
+      Label,
+      DetailBox
     },
     watch:{
       dtoList:{
         handler(newVal,oldVal){
-          console.log("诊疗数据更新:",newVal,oldVal); 
+          // console.log("诊疗数据更新:",newVal,oldVal); 
         },
         deep:true
       }
@@ -100,11 +120,11 @@
     }
     .label{
       .label;
-      img{
+      /* img{
         width:.56rem;
         height: .74rem;
         vertical-align: top;
-      }
+      } */
     }
     .result{
       .title{
@@ -119,14 +139,13 @@
         line-height: .44rem;
       }
     }
-    .choose{
-      color:#fff;
-      background: linear-gradient(-270deg, #4F4FFF, #4F8BFF);
-      box-shadow: 0 .08rem .16rem 0 rgba(79,129,255,0.40);
-    }
   }
   .foot{
     .dbfooter;
   }
+  .detail{
+    .mask;
+    z-index: 66;
+  }
   
 </style>

+ 1 - 1
src/components/PathInfo.vue

@@ -215,7 +215,7 @@
           font-size: .32rem;
           margin-top: .20rem;
           background: -webkit-gradient(linear, right top, left top, from(#4F8BFF), to(#4F4FFF));
-          background: linear-gradient(right, #4F8BFF, #4F4FFF);
+          background: -webkit-linear-gradient(right, #4F8BFF, #4F4FFF);
           box-shadow: 0 .12rem .24rem 0 rgba(79,129,255,0.40);
           border-radius: .44rem;
           position: absolute;

+ 13 - 11
src/components/Symptom.vue

@@ -14,14 +14,15 @@
       :key="it.conceptId"
       @click="showDetil(it)">{{it.name}}</span>
     </div>
-    <div class="result" v-if="JSON.stringify(checkText) !== '{}'">
+    <div class="result" v-if="checkText.length>0">
       <p class="title">症状情况</p>
-      <p v-for="(value,key,index) in checkText">{{value}}</p>
+      <p v-for="(value,index) in checkText">{{value.text}}</p>
     </div>
     <div :class="['footer',{'nofoot':chooseSymp.length==0}]" @click="toNext">下一步</div>
     <div class="detail" v-if="show">
       <DetailBox @close="closeDetal" 
               :data="labelDetail" 
+              :moduleType="1"
               v-if="labelDetail.questionMapping&&labelDetail.questionMapping.length>0"
               @pComplete="complete"/>
     </div>
@@ -53,7 +54,7 @@ import Toast from '../common/Toast.vue';
         labelDetail:{}, //明细
         checkText:text, //症状情况文字
         questId:null, //id
-        delText:"是否删除该信息? (已填内容将清除)",
+        delText:"是否删除该信息?<br/> (已填内容将清除)",
         delIndex:null,
         showToast:false,
         finished:false,   //是否填写了明细
@@ -83,10 +84,10 @@ import Toast from '../common/Toast.vue';
         })
       },
       toNext(){
-        // 把1切换成完成图标,且2高亮
-        // if(this.chooseSymp.length==0){return}
+        // 把1切换成完成图标,且2高亮--判断有几个模块显示,1个--提交预览;1个以上--下一步
+        if(this.chooseSymp.length==0){return}
         this.$emit('next');
-        // 把症状情况的数据存起-已选、详情、拼好的文字
+        // 把症状情况的数据存起-已选
         this.$store.commit('setChoose',{choose:this.chooseSymp,type:"1"});
 
       },
@@ -116,7 +117,7 @@ import Toast from '../common/Toast.vue';
         }else{//没有questionId或id 就没有详情,则直接调推送
           const sympText = this.getSympText();
           this.getPush(sympText);
-          this.checkText = this.$store.state.symptom.text;console.log(1111,this.checkText)
+          this.checkText = this.$store.state.symptom.text;
         }
         
       },
@@ -124,7 +125,7 @@ import Toast from '../common/Toast.vue';
         const text = this.$store.state.symptom.text;
         let msg = "";
         for(let i in text){
-          msg += text[i];
+          msg += text[i].text;
         }
         return msg;
       },
@@ -146,7 +147,6 @@ import Toast from '../common/Toast.vue';
         // 推理 
         const sympText = this.getSympText();
         this.getPush(sympText);
-        // this.getPush("胸痛");
         this.show = false;
         this.questId = null;
       },
@@ -160,7 +160,9 @@ import Toast from '../common/Toast.vue';
       },
       comfirnDel(){
         this.chooseSymp.splice(this.delIndex,1);
-        delete(this.checkText[this.questId]);
+        // delete(this.checkText[this.questId]);
+        this.checkText.splice(this.delIndex,1);
+        this.$store.commit('delText',{type:"1",pId:this.questId})
         // 删除完-常见;其他-推送
         if(this.chooseSymp.length>0){
           const sympText = this.getSympText();
@@ -174,7 +176,7 @@ import Toast from '../common/Toast.vue';
         this.showToast = false;
         this.delIndex = null;
         this.questId = null;
-        this.delText = "是否删除该信息? (已填内容将清除)";
+        this.delText = "是否删除该信息?<br/> (已填内容将清除)";
       },
       complete(){//明细填写完成
         this.checkText = this.$store.state.symptom.text;

+ 3 - 15
src/components/TabPage.vue

@@ -152,23 +152,11 @@ export default {
       background: #e5ecfc;
       border-radius: 25px;
     }
-  }
+}
   .content {
     font-size: 0.3rem;
-    padding: 0.45rem 0.6rem;
+    // padding: 0.45rem 0.6rem;
+    padding: 0.45rem 0.3rem 0.45rem 0.6rem;
   }
-  /* .footer{
-      width:100%;
-      height: .88rem;
-      line-height: .88rem;
-      color:#fff;
-      font-size: .32rem;
-      text-align: center;
-      // background: linear-gradient(-270deg, #4F8BFF 0%, #4F4FFF 100%);
-      background: linear-gradient(-270deg, #4F4FFF,#4F8BFF);
-      position: fixed;
-      bottom: 0;
-      left: 0;
-    } */
 }
 </style>

+ 104 - 9
src/store.js

@@ -17,15 +17,22 @@ const store = new Vuex.Store({
       choose:[],
       origin:{},
       datas:{},
-      text:{}
+      text:[]
     },
     diagnose:{ //诊疗
-      origin:{},
+      origin:[], //模板数据
+      datas:{},
+      text:[],
+      imgFile:[],
+      imgSrc:{}
+    },
+    others:{ //其他情况
+      origin:[], //模板数据
       datas:{},
-      text:"",
+      text:[],
       imgFile:[],
       imgSrc:{}
-    }
+    },
   },
   mutations:{
     savePathInfo(state,param){
@@ -36,6 +43,13 @@ const store = new Vuex.Store({
     },
     saveAll(state,param){
       state.allMoudles = param;
+      for(let k in param){
+        if(param[k].type == 2){
+          state.diagnose.origin = param[k].moduleDetailDTOList
+        }else if(param[k].type == 3){
+          state.others.origin = param[k].moduleDetailDTOList
+        }
+      }
     },
     setOrigin(state,param){
       const type = parseInt(param.type);
@@ -45,7 +59,17 @@ const store = new Vuex.Store({
           state.symptom.origin = Object.assign({},state.symptom.origin,{[data.id]:data});
           break;
         case 2: //诊疗情况
-          
+          let diagData = state.diagnose.origin;
+          for(let i in diagData){
+            if(diagData[i].id == param.pId){
+              let questionMapping = diagData[i].questionMapping;
+              for(let k in questionMapping){
+                if(questionMapping[k].id == data.id){
+                  questionMapping.splice(k,1,data);
+                }
+              }
+            }
+          }
           break;
         case 3:
 
@@ -58,12 +82,26 @@ const store = new Vuex.Store({
       }
     },
     setDatas(state,param){
-      const type = parseInt(param.type);
+      // ppId--每一道题的id;pId--每个选项的id
+      const type = parseInt(param.type);//console.log("存值:",param)
+      const data = param.data;
       switch(type){
         case 1:
-          state.symptom.datas = Object.assign({},state.symptom.datas,{[param.pId]:param.data});
+          state.symptom.datas = Object.assign({},state.symptom.datas,{[param.pId]:data});
           break;
         case 2: //诊疗情况
+          const ppId = param.ppId;
+          let diagData = state.diagnose.origin;
+          for(let i in diagData){
+            if(diagData[i].id == ppId){
+              let questionMapping = diagData[i].questionMapping;
+              for(let k in questionMapping){
+                if(questionMapping[k].id == data.id){
+                  questionMapping[k].questionMapping = data.questionMapping;
+                }
+              }
+            }
+          }
           break;
         case 3:
 
@@ -80,10 +118,67 @@ const store = new Vuex.Store({
       const type = parseInt(param.type);
       switch(type){
         case 1:
-          state.symptom.text = Object.assign({},state.symptom.text,{[param.pId]:param.text});
+          // 对象易更新但顺序无法控制
+          // state.symptom.text = Object.assign({},state.symptom.text,{[param.pId]:param.text}); 
+          let text = state.symptom.text;
+          if(text.length > 0){
+            for(let i in text){
+              if(text[i].pId==param.pId){
+                text.splice(i,1,param);
+                return
+              }
+              /*else{
+                text.push(param);
+                break
+              }*/
+            }
+            text.push(param);
+          }else{
+            text.push(param);
+          }   
+          break;
+        case 2: //诊疗情况
+          let diaText = state.diagnose.text;
+          if(diaText.length > 0){
+            for(let i in diaText){
+              if(diaText[i].pId==param.pId){
+                diaText.splice(i,1,param);
+                return
+              }
+            }
+            diaText.push(param);
+          }else{
+            diaText.push(param);
+          }
+          break;
+        case 3:
+
+          break;
+        case 4:
+
+          break;
+        default:
+          break;
+      }
+    },
+    delText(state,param){
+      const type = parseInt(param.type);
+      switch(type){
+        case 1:
+          let text = state.symptom.text;
+          for(let i in text){
+            if(text[i].pId==param.pId){
+              text.splice(i,1)
+            }
+          }
           break;
         case 2: //诊疗情况
-          
+          let diaText = state.diagnose.text;
+          for(let i in diaText){
+            if(diaText[i].pId==param.pId){
+              diaText.splice(i,1)
+            }
+          }
           break;
         case 3: