Browse Source

试试better-scroll

luolei 6 years ago
parent
commit
0da0a7adea

+ 5 - 0
package-lock.json

@@ -7216,6 +7216,11 @@
         "find-up": "^2.1.0"
       }
     },
+    "portal-vue": {
+      "version": "2.1.6",
+      "resolved": "https://registry.npmjs.org/portal-vue/-/portal-vue-2.1.6.tgz",
+      "integrity": "sha512-lvCF85D4e8whd0nN32D8FqKwwkk7nYUI3Ku8UAEx4Z1reomu75dv5evRUTZNaj1EalxxWNXiNl0EHRq36fG8WA=="
+    },
     "portfinder": {
       "version": "1.0.20",
       "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.20.tgz",

+ 1 - 0
package.json

@@ -18,6 +18,7 @@
     "less": "^3.8.1",
     "less-loader": "^4.1.0",
     "lib-flexible": "^0.3.2",
+    "portal-vue": "^2.1.6",
     "vue": "^2.5.2",
     "vue-photo-preview": "^1.1.3",
     "vue-router": "^3.0.1",

+ 1 - 0
src/App.vue

@@ -1,6 +1,7 @@
 <template>
     <div id="app">
         <router-view/>
+        <portal-target name="notification-outlet"></portal-target>
     </div>
 </template>
 <script>

+ 2 - 0
src/common/Label.vue

@@ -76,6 +76,7 @@ import {moduleCP} from '@utils/tools';
           return
         }
         this.showToast = true;
+        this.$emit("commitShowLabel",false)
       },
       comfirnDel(){
         const temp = this.tempItem;
@@ -118,6 +119,7 @@ import {moduleCP} from '@utils/tools';
       cancelDel(){
         this.showToast = false;
         this.tempItem = {};
+        this.$emit("commitShowLabel",true)
       }
     }
   }

+ 16 - 12
src/common/Toast.vue

@@ -1,18 +1,21 @@
 <template>
-  <div class="toast-wrap" v-if="show">
-    <div class="content">
-      <div class="text" v-html="message||msg">
-        <!-- {{message||msg}} -->
+    <portal to="notification-outlet">
+      <div class="toast-wrap" v-if="show">
+            <div class="content">
+              <div class="text" v-html="message||msg">
+                <!-- {{message||msg}} -->
+              </div>
+              <div class="btn">
+                <span @click="comfirn">确定</span>
+                <span @click="cancel">取消</span>
+              </div>
+            </div>
+            <div class="mask"></div>
       </div>
-      <div class="btn">
-        <span @click="comfirn">确定</span>
-        <span @click="cancel">取消</span>
-      </div>
-    </div>
-    <div class="mask"></div>
-  </div>
+    </portal>
 </template>
 <script type="text/javascript">
+
   export default {
     name:'Toast',
     data(){
@@ -28,7 +31,7 @@
       cancel(){
         this.$emit("cancel")
       },
-    }
+    },
   }
 </script>
 <style lang="less" scoped>
@@ -53,6 +56,7 @@
         height: 1.25rem;
         overflow-y: auto;
         padding-top: .2rem;
+        font-size: .3rem;
       }
       .btn{
         margin-top: .20rem;

+ 59 - 47
src/components/AddContent.vue

@@ -1,49 +1,51 @@
 <template>
-  <div class="symp-wrap">
-    <div class="choose">
-      <ul class="addPart">
-        <li v-for="(item,idx) in dataTrd">
-          <p class="question">{{idx+1 + '. ' +(item.description||item.name)}}</p>
-          <img class="questionImg" :src="item.url.replace('{imageUrlPrefix}',imgUrl)" v-if="item.url">
-          <Radio v-if="item.controlType==1" 
-            :item="item"
-            :key="item.id"
-            @updata="updataData($event,idx,item)"/>
-          <CheckBox v-if="item.controlType==2" 
-            :item="item"
-            :key="item.id"
-            @updata="updataData($event,idx,item)"/>
-          <ComTextArea
-            v-if="item.controlType == 5"
-            :item="item"
-            @updata="updataData($event,idx,item)"
-            @changeAreaVal="changeAreaVal($event,idx)"
-          ></ComTextArea>
-          <Input v-if="item.controlType==6 || item.controlType==7"
-            :item="item"
-            :key="item.id"
-            @updata="updataData($event,idx,item)"/>
-          <template
-            v-if="item.controlType == 3"
-            v-for="(part,index) in item.questionDetailList"
-          >
-            <MultiLineInput
+  <div class="symp-wrap addper">
+    <div class="content">
+        <div class="choose">
+        <ul class="addPart">
+          <li v-for="(item,idx) in dataTrd">
+            <p class="question">{{idx+1 + '. ' +(item.description||item.name)}}</p>
+            <img class="questionImg" :src="item.url.replace('{imageUrlPrefix}',imgUrl)" v-if="item.url">
+            <Radio v-if="item.controlType==1" 
+              :item="item"
+              :key="item.id"
+              @updata="updataData($event,idx,item)"/>
+            <CheckBox v-if="item.controlType==2" 
+              :item="item"
+              :key="item.id"
+              @updata="updataData($event,idx,item)"/>
+            <ComTextArea
+              v-if="item.controlType == 5"
+              :item="item"
+              @updata="updataData($event,idx,item)"
+              @changeAreaVal="changeAreaVal($event,idx)"
+            ></ComTextArea>
+            <Input v-if="item.controlType==6 || item.controlType==7"
+              :item="item"
+              :key="item.id"
+              @updata="updataData($event,idx,item)"/>
+            <template
               v-if="item.controlType == 3"
-              :msg="part.description||part.name"
-              :part="part"
-              @updata="updataData($event,index,item)"
-            ></MultiLineInput>
-          </template>
-        </li>
-      </ul>
-      <div class="result" v-if="allStr">
-        <p class="title">{{allMoudles.name}}</p>
-        <p>{{allStr}}</p>
-      </div>
-      <div class="thanks">
-        <p>感谢您的回答,您的病历已经自动生成。</p>
-        <p>您可以点击预览并提交病历按钮预览病历。</p>
-        <p>如果没有需要修改的内容,请点击提交,医生便能看到您的病历。</p>
+              v-for="(part,index) in item.questionDetailList"
+            >
+              <MultiLineInput
+                v-if="item.controlType == 3"
+                :msg="part.description||part.name"
+                :part="part"
+                @updata="updataData($event,index,item)"
+              ></MultiLineInput>
+            </template>
+          </li>
+        </ul>
+        <div class="result" v-if="allStr">
+          <p class="title">{{allMoudles.name}}</p>
+          <p>{{allStr}}</p>
+        </div>
+        <div class="thanks">
+          <p>感谢您的回答,您的病历已经自动生成。</p>
+          <p>您可以点击预览并提交病历按钮预览病历。</p>
+          <p>如果没有需要修改的内容,请点击提交,医生便能看到您的病历。</p>
+        </div>
       </div>
     </div>
     <div class="foot">
@@ -58,7 +60,8 @@ import MultiLineInput from '../common/MultiLineInput.vue';
 import Input from '../common/Input.vue';
 import Radio from '../common/Radio.vue';
 import CheckBox from '../common/CheckBox.vue';
-import {imageUrlPrefix,getAllStr} from '@utils/tools.js';
+import {imageUrlPrefix,getAllStr,setScroll} from '@utils/tools.js';
+  import BScroll from 'better-scroll';
 export default {
   name: 'AddContent',
   props: ['allMoudles','preName'],
@@ -70,9 +73,15 @@ export default {
       allStr:''
     }
   },
-  mounted() {
+  created(){
     this.dataTrd = this.allMoudles && this.allMoudles.moduleDetailDTOList
   },
+  mounted() {
+    this.$nextTick(()=>{
+      let scroll = setScroll(BScroll,true,'.addper')
+      this.scroll = scroll
+    })
+  },
   methods: {
     back() {
       this.$emit("back");
@@ -131,7 +140,10 @@ export default {
 }
 .symp-wrap {
   font-size: 0.3rem;
-  padding-right: .3rem;
+  .content {
+    padding-right: .3rem;
+  }
+  .btscroll;  
   h3 {
     color: #000;
     margin-bottom: 0.36rem;

+ 56 - 40
src/components/DiagTreat.vue

@@ -1,45 +1,49 @@
 <template>
-  <div class="treat-wrap">
-    <div v-for="(it,i) in dtoList" 
-        v-if="dtoList"
-        :key="it.id"
-        class="label">
-      <p class="quest">{{i + 1 +'.' + (it.description||it.name)}}</p>
-      <img class="questionImg" :src="it.url.replace('{imageUrlPrefix}',imgUrl)" v-if="it.url">
-        <Label v-if="it.controlType==0" 
+  <div class="treat-wrap treatper">
+    <div class="content">
+      <div v-for="(it,i) in dtoList" 
+          v-if="dtoList"
+          :key="it.id"
+          class="label">
+        <p class="quest">{{i + 1 +'.' + (it.description||it.name)}}</p>
+        <img class="questionImg" :src="it.url.replace('{imageUrlPrefix}',imgUrl)" v-if="it.url">
+          <Label v-if="it.controlType==0" 
+                :item="it" 
+                :indx="i" 
+                :ppId="it.id"
+                :moduleType="datas.type"
+                dom=".treatper"
+                @commitShowLabel="commitShowLabel"
+                @setDetail="setDetail"/>
+          <!-- 上传图片 -->
+          <UploadImg v-if="it.controlType==4" 
               :item="it" 
-              :indx="i" 
-              :ppId="it.id"
               :moduleType="datas.type"
-              @setDetail="setDetail"/>
-        <!-- 上传图片 -->
-        <UploadImg v-if="it.controlType==4" 
-            :item="it" 
-            :moduleType="datas.type"
-            :imgList="imgs"
-            />
-        <!-- 输入框 -->
-        <Input v-if="it.controlType==6 || it.controlType==7"
-            :item="it"
-            :key="it.id"
-            @updata="updataData($event,it.id)"/>
-        <!-- 文本域 -->
-        <ComTextArea v-if="it.controlType == 5"
-            :item="it"
-            @updata="updataData($event,it.id)"/>
-        <Radio v-if="it.controlType==1" 
-            :item="it"
-            :key="it.id"
-            @updata="updataData($event,it.id)"/>
-        <CheckBox v-if="it.controlType==2" 
-            :item="it"
-            :key="it.id"
-            @updata="updataData($event,it.id)"/>
-    </div>
-    <div class="result" v-if="checkText.length>0">
-      <p class="title">{{datas.name}}</p>
-      <!-- <p v-for="(v,i) in checkText">{{v.text}}</p> -->
-      <p>{{getText()}}</p>
+              :imgList="imgs"
+              />
+          <!-- 输入框 -->
+          <Input v-if="it.controlType==6 || it.controlType==7"
+              :item="it"
+              :key="it.id"
+              @updata="updataData($event,it.id)"/>
+          <!-- 文本域 -->
+          <ComTextArea v-if="it.controlType == 5"
+              :item="it"
+              @updata="updataData($event,it.id)"/>
+          <Radio v-if="it.controlType==1" 
+              :item="it"
+              :key="it.id"
+              @updata="updataData($event,it.id)"/>
+          <CheckBox v-if="it.controlType==2" 
+              :item="it"
+              :key="it.id"
+              @updata="updataData($event,it.id)"/>
+      </div>
+      <div class="result" v-if="checkText.length>0">
+        <p class="title">{{datas.name}}</p>
+        <!-- <p v-for="(v,i) in checkText">{{v.text}}</p> -->
+        <p>{{getText()}}</p>
+      </div>
     </div>
 
     <div class="foot" v-if="modluesLen==2">
@@ -66,9 +70,10 @@
   import DetailBox from './DetailBox.vue';
   import Input from '../common/Input.vue';
   import ComTextArea from '../common/ComTextArea.vue';
-  import {moduleCP,patt,imageUrlPrefix} from '@utils/tools';
+  import {moduleCP,patt,imageUrlPrefix,setScroll} from '@utils/tools';
   import Radio from '../common/Radio.vue';
   import CheckBox from '../common/CheckBox.vue';
+  import BScroll from 'better-scroll';
   export default {
     name:'DiagTreat',
     data(){
@@ -86,7 +91,14 @@
       }
     },
     props:['datas','preName','nextName','modluesLen'],
+    mounted(){
+      let scroll = setScroll(BScroll,true,'.treatper')
+      this.scroll = scroll
+    },
     methods:{
+      commitShowLabel(flg){
+        this.scroll = setScroll(BScroll,flg,'.treatper')
+      },
       beBack(){
         this.$emit('back');
       },
@@ -101,17 +113,20 @@
         this.labelDetail = obj.detail;
         this.ppId = obj.ppId;
         this.show = true;
+        this.scroll = setScroll(BScroll,false,'.treatper')
       },
       complete(){
         this.show = false;
         this.labelDetail = {};
         this.ppId = null;
         // 处理明细选中的值
+        this.scroll = setScroll(BScroll,true,'.treatper')
       },
       closeDetal(){
         this.show = false;
         this.labelDetail = {};
         this.ppId = null;
+        this.scroll = setScroll(BScroll,true,'.treatper')
       },
       getText(){
         let textArr = this.checkText;
@@ -156,6 +171,7 @@
 @import '../less/base.less';
   .treat-wrap{
     font-size: .3rem;
+    .btscroll;    
     .quest{
       color: #000;
       margin-bottom: .36rem;

+ 8 - 12
src/components/Others.vue

@@ -1,5 +1,5 @@
 <template>
-  <div class="other-wrap wrapper">
+  <div class="other-wrap otherper">
     <div class="content">
       <div v-for="(it,i) in dtoList" 
           v-if="dtoList"
@@ -74,7 +74,7 @@
   import Toast from '../common/Toast.vue';
   import Input from '../common/Input.vue';
   import ComTextArea from '../common/ComTextArea.vue';
-  import {moduleCP,patt,imageUrlPrefix} from '@utils/tools';
+  import {moduleCP,patt,imageUrlPrefix,setScroll} from '@utils/tools';
   import Radio from '../common/Radio.vue';
   import CheckBox from '../common/CheckBox.vue';
   import MultiLineInput from '../common/MultiLineInput.vue';
@@ -99,10 +99,7 @@
     props:['datas','preName','nextName','modluesLen'],
     created(){},
     mounted(){
-      let scroll = new BScroll('.wrapper',{
-          scrollY: false,
-          click: true
-      })
+      let scroll = setScroll(BScroll,true,'.otherper')
       this.scroll = scroll
     },
     methods:{
@@ -120,20 +117,21 @@
         this.labelDetail = obj.detail;
         this.ppId = obj.ppId;
         this.show = true;
-        let tmpSc = this.scroll
-        tmpSc.scrollY = false
-        this.scroll = tmpSc
+        
+        this.scroll = setScroll(BScroll,false,'.otherper')
       },
       complete(){
         this.show = false;
         this.labelDetail = {};
         this.ppId = null;
         // 处理明细选中的值
+        this.scroll = setScroll(BScroll,true,'.otherper')
       },
       closeDetal(){
         this.show = false;
         this.labelDetail = {};
         this.ppId = null;
+        this.scroll = setScroll(BScroll,true,'.otherper')
       },
       updataData(data,id){//输入框存值
         let list = this.dtoList;
@@ -182,9 +180,7 @@
 @import '../less/base.less';
   .other-wrap{
     font-size: .3rem;
-    position: fixed;
-    height: 100%;
-    width: 100%;
+    .btscroll;
     .quest{
       color: #000;
       margin-bottom: .36rem;

+ 65 - 61
src/components/Preview.vue

@@ -1,58 +1,61 @@
 <template>
-  <div class="preview" ref="preview">
-    <div class="personMsg">
-      <p class="baseMsg">{{pathInfo.patientName}}&nbsp;&nbsp;&nbsp;&nbsp;{{pathInfo.patientSex}}&nbsp;&nbsp;&nbsp;&nbsp;{{pathInfo.patientAge}}岁</p>
-      <table>
-        <tr>
-          <td colspan="2">挂号科室:{{pathInfo.selfDeptName}}</td>
-        </tr>
-        <tr>
-          <td>门诊号:{{pathInfo.recordId}}</td>
-          <td>预约医生:{{pathInfo.doctorName}}</td>
-        </tr>
-        <tr>
-          <td colspan="2">就诊时间:{{pathInfo.systemTime}}</td>
-        </tr>
-      </table>
-      <div class="line"></div>
-      <p>采集时间:{{pathInfo.systemTime}}</p>
-    </div>
-    <div class="personMsg personMsg2">
-      <ul class="previewParts">
-        <!-- <li v-if="symptom.choose.length>0"> -->
-        <li>
-          <h4><i :style="{'background': '#FF9A9A'}"></i> 主诉:</h4>
-          <p>
-            <span v-for="(item,idx) in symptom.choose" :key="item.name+idx">{{item.name+(idx == symptom.choose.length-1?'':'、')}}</span>
-          </p>
-        </li>
-        <!-- <li v-if="diagnose.text.length>0||symptom.choose.length>0"> -->
-        <li>
-          <h4><i :style="{'background': '#3D69D9'}"></i> 现病史:</h4>
-          <p>
-            <span v-for="(item,idx) in symptom.text" :key="item.text+idx">{{item.textP+(idx == symptom.choose.length-1?'。':';')}}</span>
-          </p>
-          <p>
-            <span v-for="(item,idx) in diagnose.text" :key="item.text+idx">{{item.textP+(idx == diagnose.text.length-1?'。':';')}}</span>
-          </p>
-        </li>
-        <li v-if="showLis[moduleCP['other']]==1">
-          <h4><i></i> 其他史:</h4>
-          <p>
-            <span v-for="(item,idx) in others.text" :key="item.text+idx">{{item.textP+(idx == others.text.length-1?'。':';')}}</span>
-          </p>
-        </li>
-        <li v-if="showLis[moduleCP['suplement']]==1">
-          <h4><i></i> 补充内容:</h4>
-          <p>{{addContent.txt}}</p>
-        </li>
-        <li v-if="JSON.stringify(diagnose.imgSrc) !='{}'" class="imgLis">
-          <h4 class="imgTitle"><i></i> 最近一次治疗报告:</h4>
-          <div v-for="(value,key,idx) in diagnose.imgSrc" class="imgView">
-            <img :src="value" alt="">
-          </div>
-        </li>
-      </ul>
+  <div class="preview previewper">
+    <div class="content">
+      <div class="personMsg">
+        <p class="baseMsg">{{pathInfo.patientName}}&nbsp;&nbsp;&nbsp;&nbsp;{{pathInfo.patientSex}}&nbsp;&nbsp;&nbsp;&nbsp;{{pathInfo.patientAge}}岁</p>
+        <table>
+          <tr>
+            <td colspan="2">挂号科室:{{pathInfo.selfDeptName}}</td>
+          </tr>
+          <tr>
+            <td>门诊号:{{pathInfo.recordId}}</td>
+            <td>预约医生:{{pathInfo.doctorName}}</td>
+          </tr>
+          <tr>
+            <td colspan="2">就诊时间:{{pathInfo.systemTime}}</td>
+          </tr>
+        </table>
+        <div class="line"></div>
+        <p>采集时间:{{pathInfo.systemTime}}</p>
+      </div>
+      <div class="personMsg personMsg2">
+        <ul class="previewParts">
+          <!-- <li v-if="symptom.choose.length>0"> -->
+          <li>
+            <h4><i :style="{'background': '#FF9A9A'}"></i> 主诉:</h4>
+            <p>
+              <span v-for="(item,idx) in symptom.choose" :key="item.name+idx">{{item.name+(idx == symptom.choose.length-1?'':'、')}}</span>
+            </p>
+          </li>
+          <!-- <li v-if="diagnose.text.length>0||symptom.choose.length>0"> -->
+          <li>
+            <h4><i :style="{'background': '#3D69D9'}"></i> 现病史:</h4>
+            <p>
+              <span v-for="(item,idx) in symptom.text" :key="item.text+idx">{{item.textP+(idx == symptom.choose.length-1?'。':';')}}</span>
+            </p>
+            <p>
+              <span v-for="(item,idx) in diagnose.text" :key="item.text+idx">{{item.textP+(idx == diagnose.text.length-1?'。':';')}}</span>
+            </p>
+          </li>
+          <li v-if="showLis[moduleCP['other']]==1">
+            <h4><i></i> 其他史:</h4>
+            <p>
+              <span v-for="(item,idx) in others.text" :key="item.text+idx">{{item.textP+(idx == others.text.length-1?'。':';')}}</span>
+            </p>
+          </li>
+          <li v-if="showLis[moduleCP['suplement']]==1">
+            <h4><i></i> 补充内容:</h4>
+            <p>{{addContent.txt}}</p>
+          </li>
+          <li v-if="JSON.stringify(diagnose.imgSrc) !='{}'" class="imgLis">
+            <h4 class="imgTitle"><i></i> 最近一次治疗报告:</h4>
+            <div v-for="(value,key,idx) in diagnose.imgSrc" class="imgView">
+              <img :src="value" alt="">
+            </div>
+          </li>
+        </ul>
+      </div>
+      <div class="doctorData" @click="handleClick(true)">医生端数据展示</div>
     </div>
     <div class="foot">
       <span
@@ -70,7 +73,6 @@
       @showSubmit="showSubmit"
     ></Submit>
     <Loading v-if="loadingShow"></Loading>
-    <div class="doctorData" @click="handleClick(true)">医生端数据展示</div>
     <div class="personMsgDoc" v-if="showDoc">
       <div class="personMsgDocModal" @click.prevent="handleClick(false)"></div>
       <div class="personMsgDocDetail">
@@ -120,7 +122,8 @@
 import api from '@utils/api.js';
 import Submit from '../common/Submit';
 import Loading from '../common/Loading';
-import {moduleCP} from '@utils/tools.js'
+import {moduleCP,setScroll} from '@utils/tools.js'
+import BScroll from 'better-scroll';
 export default {
   props: ['preName','showLis','loadingShow'],
   data() {
@@ -145,14 +148,14 @@ export default {
       showDoc:false
     }
   },
+  mounted() {
+    let scroll = setScroll(BScroll,true,'.previewper')
+    this.scroll = scroll
+  },
   methods: {
     handleClick(flg){
-      if(flg){
-        this.$refs.preview.style.overflow = 'hidden'
-      }else{
-        this.$refs.preview.style.overflow = 'auto'
-      }
       this.showDoc = flg
+      this.scroll = setScroll(BScroll,!flg,'.previewper')
     },
     showSubmit(flg) {
       this.submit = flg
@@ -327,6 +330,7 @@ export default {
   padding: 0.3rem 0.4rem 1rem .4rem;
   overflow: auto;
   -webkit-overflow-scrolling:touch;
+  .btscroll;  
 }
 .imgView {
   width: 1.86rem;

+ 44 - 40
src/components/Search.vue

@@ -1,44 +1,46 @@
 <template>
-  <div class="searchWrap">
-    <div class="searchTop">
-      <div class="iptWrap">
-        <img
-          class="searchImg"
-          src="../images/searchB.png"
-          alt=""
-        >
-        <input
-          type="text"
-          autofocus
-          placeholder="请搜索"
-          v-model="searchVal"
-        >
+    <!-- <portal to="notification-outlet"> -->
+      <div class="searchWrap">
+        <div class="searchTop">
+          <div class="iptWrap">
+            <img
+              class="searchImg"
+              src="../images/searchB.png"
+              alt=""
+            >
+            <input
+              type="text"
+              autofocus
+              placeholder="请搜索"
+              v-model="searchVal"
+            >
+          </div>
+          <span @click="search">取消</span>
+        </div>
+        <div class="searchList">
+          <p
+            class="waring"
+            v-if="!searchVal&&!hasMore&&searchLis.length==0"
+          >请输入搜索内容</p>
+          <p
+            class="waring"
+            v-if="hasMore&&searchVal"
+          >暂无搜索结果</p>
+          <ul>
+            <li
+              v-for="(item,idx) in searchLis"
+              :key="item.conceptId+idx"
+              @click="showDetil(item)"
+              :style="{'borderBottom':(idx==searchLis.length-1)?'0':'1px solid #a8a8a8'}"
+            ><img
+                class="searchImgLis"
+                src="../images/search.png"
+                alt=""
+              >{{item.name}}</li>
+          </ul>
+        </div>
       </div>
-      <span @click="search">取消</span>
-    </div>
-    <div class="searchList">
-      <p
-        class="waring"
-        v-if="!searchVal&&!hasMore&&searchLis.length==0"
-      >请输入搜索内容</p>
-      <p
-        class="waring"
-        v-if="hasMore&&searchVal"
-      >暂无搜索结果</p>
-      <ul>
-        <li
-          v-for="(item,idx) in searchLis"
-          :key="item.conceptId+idx"
-          @click="showDetil(item)"
-          :style="{'borderBottom':(idx==searchLis.length-1)?'0':'1px solid #a8a8a8'}"
-        ><img
-            class="searchImgLis"
-            src="../images/search.png"
-            alt=""
-          >{{item.name}}</li>
-      </ul>
-    </div>
-  </div>
+    <!-- </portal> -->
 </template>
 <script>
 import api from '@utils/api.js';
@@ -57,6 +59,7 @@ export default {
       if (curVal.trim() == "") {
         this.searchVal = "";
         this.searchLis = [];
+        this.hasMore = false
         return;
       }
       if (curVal != "" && curVal != oldVal) {
@@ -113,8 +116,9 @@ export default {
   width: 100%;
   top: 0;
   left: 0;
-  z-index: 55;
+  z-index: 102;
   background-color: #ededed;
+  font-size: .3rem;
 }
 .searchTop {
   padding: 0.15rem 0.4rem;

+ 54 - 38
src/components/Symptom.vue

@@ -1,41 +1,43 @@
 <template>
-  <div class="symp-wrap">
-    <div
-      class="choose"
-      v-if="chooseSymp.length>0"
-    >
-      <p class="quest">已选症状</p>
-      <p
-        class="choo-symp"
-        v-for="(v,i) in chooseSymp"
+  <div class="symp-wrap symper">
+    <div class="content">
+      <div
+        class="choose"
+        v-if="chooseSymp.length>0"
       >
-        <span @click="showChecked(v)">{{v.name}}</span>
-        <span @click="deletSymp(v,i)"><img
-            src="../images/del.png"
+        <p class="quest">已选症状</p>
+        <p
+          class="choo-symp"
+          v-for="(v,i) in chooseSymp"
+        >
+          <span @click="showChecked(v)">{{v.name}}</span>
+          <span @click="deletSymp(v,i)"><img
+              src="../images/del.png"
+              alt=""
+            ></span>
+        </p>
+      </div>
+      <div class="label">
+        <p class="quest">请问您有哪些不适?<img
+            @click="search(true)"
+            class="searchImg"
+            src="../images/search.png"
             alt=""
-          ></span>
-      </p>
-    </div>
-    <div class="label">
-      <p class="quest">请问您有哪些不适?<img
-          @click="search(true)"
-          class="searchImg"
-          src="../images/search.png"
-          alt=""
-        ></p>
-      <span
-        class="symp"
-        v-for="(it,ind) in symp"
-        :key="it.conceptId"
-        @click="showDetil(it)"
-      >{{it.name}}</span>
-    </div>
-    <div
-      class="result"
-      v-if="checkText.length>0"
-    >
-      <p class="title">{{nameStr}}</p>
-      <p v-for="(value,index) in checkText">{{value.textP}}</p>
+          ></p>
+        <span
+          class="symp"
+          v-for="(it,ind) in symp"
+          :key="it.conceptId"
+          @click="showDetil(it)"
+        >{{it.name}}</span>
+      </div>
+      <div
+        class="result"
+        v-if="checkText.length>0"
+      >
+        <p class="title">{{nameStr}}</p>
+        <p v-for="(value,index) in checkText">{{value.textP}}</p>
+      </div>
     </div>
     <div v-if="modluesLen>1"
       :class="['footer',{'nofoot':chooseSymp.length==0}]"
@@ -79,7 +81,8 @@ import api from '@utils/api.js';
 import DetailBox from './DetailBox.vue';
 import Toast from '../common/Toast.vue';
 import Search from './Search.vue';
-import {moduleCP} from '@utils/tools'
+import {moduleCP,setScroll} from '@utils/tools'
+import BScroll from 'better-scroll';
 export default {
   name: 'Symptom',
   props:['modluesLen','nameStr'],
@@ -102,7 +105,8 @@ export default {
       showToast: false,
       searchShow: false,//显示搜索界面
       tmpItem:{},//检索的症状
-      isSearch:false
+      isSearch:false,
+      scroll:null
     }
   },
   created() {
@@ -114,6 +118,10 @@ export default {
       this.getSympList(); //常见
     }
   },
+  mounted(){
+    let scroll = setScroll(BScroll,true,'.symper')
+    this.scroll = scroll
+  },
   methods: {
     searchVal(val) {
       console.log(val)
@@ -168,6 +176,7 @@ export default {
             this.$store.commit('setOrigin', { type: moduleCP['symp'], data: result.data });
             if (mapping && mapping.length > 0) {
               this.show = true;
+              this.scroll = setScroll(BScroll,false,'.symper')
               if(flg){
                 return
               }
@@ -217,6 +226,7 @@ export default {
       this.getPush(sympText);
       this.show = false;
       this.questId = null;
+      this.scroll = setScroll(BScroll,true,'.symper')
     },
     deletSymp(item, index) {
       this.delIndex = index;
@@ -225,6 +235,7 @@ export default {
         this.delText = "是否删除该信息?<br/>删除后将重新填写预问诊流程 <br/>(已填内容将清除)"
       }
       this.showToast = true;
+      this.scroll = setScroll(BScroll,false,'.symper')
     },
     comfirnDel() {
       this.chooseSymp.splice(this.delIndex, 1);
@@ -249,11 +260,13 @@ export default {
       this.delIndex = null;
       this.questId = null;
       this.delText = "是否删除该信息?<br/>(已填内容将清除)";
+      this.scroll = setScroll(BScroll,true,'.symper')
     },
     complete() {//明细填写完成
       this.searchShow = false;
       this.checkText = this.$store.state.symptom.text;
       this.show = false;
+      this.scroll = setScroll(BScroll,true,'.symper')
       this.questId = null;
       // 推理 
       const sympText = this.getSympText();
@@ -266,6 +279,7 @@ export default {
       if (data.questionMapping && data.questionMapping.length > 0) {
         this.labelDetail = data;
         this.show = true;
+        this.scroll = setScroll(BScroll,true,'.symper')        
       }
     },
     reload(id) {//清空重新赋值
@@ -283,13 +297,15 @@ export default {
 </script>
 <style lang="less" scoped>
 @import "../less/base.less";
+
 .symp-wrap {
   font-size: 0.3rem;
+  .btscroll;
   .quest {
     color: #000;
     margin-bottom: 0.36rem;
     font-weight: 700;
-    padding-right: .3rem;
+    // padding-right: .2rem;
     .searchImg {
       width: 0.44rem;
       height: 0.44rem;

+ 2 - 2
src/components/TabPage.vue

@@ -42,7 +42,7 @@
           @back="beBack"
         />
         <AddContent
-          v-show="flag == moduleCP['suplement']&&item.type==moduleCP['suplement']&&moduleShow"
+          v-if="flag == moduleCP['suplement']&&item.type==moduleCP['suplement']&&moduleShow"
           :modluesLen="modluesLen"
           :allMoudles="item"
           :preName="modlues[idx-1]&&modlues[idx-1].name"
@@ -197,7 +197,7 @@ export default {
     left: 0;
     width: 100%;
     background: #fff;
-    z-index: 50;
+    z-index: 101;
     height: 0.82rem;
     line-height: 0.82rem;
     border-bottom: 1px solid #ededed;

+ 19 - 0
src/less/base.less

@@ -94,4 +94,23 @@
     color: #666;
     line-height: .44rem;
   }
+}
+
+.btscroll {
+  position: fixed;
+  height: 100%;
+  width: 100%;
+  left: 0;
+  padding-left: .3rem;
+  padding-right: .3rem;
+  z-index: 99;
+  box-sizing: border-box;
+  .content {
+    padding-bottom: 2.3rem;
+    box-sizing: border-box;
+  }
+}
+
+.toastWrapper {
+  background-color: #000;
 }

+ 2 - 0
src/main.js

@@ -4,6 +4,8 @@ import store from './store.js';
 import App from './App.vue';
 import preview from 'vue-photo-preview';
 import 'vue-photo-preview/dist/skin.css';
+import PortalVue from 'portal-vue';
+Vue.use(PortalVue);
 Vue.use(preview);
 Vue.config.productionTip = false;
 

+ 8 - 1
src/utils/tools.js

@@ -253,6 +253,12 @@ function concatVal(data){
   return {value:value?value.substring(0,value.length-1):'',valueP:valueP?valueP.substring(0,valueP.length-1):''};
 }
 
+function setScroll(scroll,flg,wrapper){
+  return new scroll(wrapper?wrapper:'.wrapper',{
+      scrollY: flg,
+      click: true
+  })
+}
 module.exports =  {
   imageUrlPrefix,
   getUrlArgObject,
@@ -267,7 +273,8 @@ module.exports =  {
   scrollToV,
   isIos,
   trimDots,
-  concatVal
+  concatVal,
+  setScroll
 }