Ver código fonte

Merge remote-tracking branch 'origin/new1.1.1'

zhouna 5 anos atrás
pai
commit
9a5ca3c8e5

+ 4 - 1
src/App.vue

@@ -13,9 +13,12 @@
       (/iphone|ipod|ipad/i.test(navigator.appVersion)) && document.addEventListener('blur', (e) => {
         // 这里加了个类型判断,因为a等元素也会触发blur事件
         if(['input', 'textarea'].includes(e.target.localName)) {
+        // if(MobileDevice.getModels().join(' or ').indexOf('6') == -1){
+        //   document.activeElement.scrollIntoView({behavior: "smooth",block:'end'})
+        // }
           setTimeout(()=> {
             document.scrollingElement.scrollTo(0, document.scrollingElement.scrollTop);
-          }, 200);
+          }, 100);
         }
       }, true)
     },

+ 5 - 4
src/common/CheckBox.vue

@@ -1,5 +1,5 @@
 <template>
-  <div class="check-wrap bgques" v-if="item" :style="getStyle(detail,slide)">
+  <div class="check-wrap bgques clearfix" v-if="item" :style="getStyle(detail,slide)">
       <p v-for="(it,index) in datas.questionDetailList" 
           :key="it.id" 
           :class="['list',{'block':((it.description||it.name).indexOf('${'))!=-1}]" >
@@ -185,11 +185,12 @@ import OptionInp from '../common/OptionInp.vue';
     }
     .list{
       color: #colors[text];
-      margin:0 .1rem .07rem 0;
-      padding: .1rem .1rem .1rem 0;
+      margin:0 .05rem;
+      padding: .05rem;
       display: inline-block;
       white-space: nowrap;
-      overflow-x: hidden;
+      // overflow-x: hidden;
+      float: left;
       img{
         width: .38rem;
         vertical-align: middle;

+ 8 - 12
src/common/ComTextArea.vue

@@ -55,26 +55,20 @@ export default {
       }
     },
     changeVal(){
-          // $(".btscroll").css({'position':'fixed'})
       this.$emit('changeAreaVal',this.txt)
       const newData = Object.assign({},this.item,{value:this.txt,valueP:this.txt});
       this.$emit("updata",newData);
     },
     blur(){
-      if(MobileDevice.getModels().join(' or ').indexOf('6') == -1){
-        document.activeElement.scrollIntoView({behavior: "smooth",block:'end'})
-      }
-      $(".foot").css({'display':'block'})
-      // document.activeElement.scrollIntoViewIfNeeded(true);
-      // $(".foot").css({'display':'block'})
-      // setTimeout(()=>{
-      //   document.activeElement.scrollIntoViewIfNeeded(true);
-      // },300)
+      setTimeout(()=>{
+        $(".foot").css({'display':'block'})
+      },150)
     },
     focus(){
       if(isIos()){
-          // $(".btscroll").css({'position':'absolute'})
-        $(".foot").css({'display':'none'})
+        setTimeout(() => {
+          $(".foot").css({'display':'none'})
+        }, 150);
       }
     }
   },
@@ -92,6 +86,8 @@ export default {
 @import '../less/base.less';
   .comArea {
     .bgques;
+    padding-top: 0;
+    padding-bottom: 0;
     textarea {
       color: #4F50FF;
       resize: none;

+ 6 - 12
src/common/Input.vue

@@ -50,29 +50,23 @@
         if(this.item.controlType==7){//数字键盘
             this.val = e.target.value=e.target.value.replace(/^\.$/,'').slice(0,10)
         }
-        // document.activeElement.scrollIntoViewIfNeeded(true);
         this.borColor = false;
         const newData = Object.assign({},this.item,{value:this.val,valueP:this.val});
         this.$emit("updata",newData);
       },
       blur(){
-        // $(".btscroll").css({'position':'fixed'})
-        $(".foot").css({'display':'block'})
-        if(MobileDevice.getModels().join(' or ').indexOf('6') == -1){
-          document.activeElement.scrollIntoView({behavior: "smooth",block:'end'})
-        }
-        // document.activeElement.scrollIntoViewIfNeeded(true);
-        // setTimeout(()=>{
-        //   document.activeElement.scrollIntoViewIfNeeded(true);
-        // },300)
+        setTimeout(()=>{
+          $(".foot").css({'display':'block'})
+        },150)
         // this.borColor = false;
         // const newData = Object.assign({},this.item,{value:this.val,valueP:this.val});
         // this.$emit("updata",newData);
       },
       focus(e){
         if(isIos()){
-          // $(".btscroll").css({'position':'absolute'})
-          $(".foot").css({'display':'none'})
+          setTimeout(() => {
+            $(".foot").css({'display':'none'})
+          }, 150);
         }
       }
     },

+ 7 - 16
src/common/MultiLineInput.vue

@@ -1,5 +1,5 @@
 <template>
-  <div :style="{'margin-bottom':isLast?'0':'.3rem'}" :class="['multipIpt',{'border':border,'inline':inline,'check':select}]">
+  <div :style="{'margin-bottom':isLast?'0':'.2rem'}" :class="['multipIpt',{'border':border,'inline':inline,'check':select}]">
     <span class="prefix" v-if="content.prefix">{{content.prefix}}</span>
     <div class="sticP" :style="{paddingRight:content.suffix?'1rem':'0'}">
         <div class="iptWrap">
@@ -74,7 +74,6 @@ export default {
   methods:{
     changeVal(e,num,type){
       let tmpTxt = '',arr=this.tmpArr
-      // document.activeElement.scrollIntoViewIfNeeded(true);
       if(type == 'number'){
           e.currentTarget.value = e.currentTarget.value.replace(/^\.$/,'').slice(0,10)
       }
@@ -90,27 +89,19 @@ export default {
       this.$emit('handleInp',this.txt);
     },
     blur(){
-      // 如果该项未选中,则不存值
-      // $(".btscroll").css({'position':'fixed'})
-      $(".foot").css({'display':'block'})
-      
-      if(MobileDevice.getModels().join(' or ').indexOf('6') == -1){
-        document.activeElement.scrollIntoView({behavior: "smooth",block:'end'})
-      }
-      // document.activeElement.scrollIntoViewIfNeeded(true);
-      // setTimeout(()=>{
-      //   document.activeElement.scrollIntoViewIfNeeded(true);
-      // },300)
+      setTimeout(()=>{
+        $(".foot").css({'display':'block'})
+      },150)
     },
     focus(){
       if(isIos()){
-          // $(".btscroll").css({'position':'absolute'})
-        $(".foot").css({'display':'none'})
+        setTimeout(() => {
+          $(".foot").css({'display':'none'})
+        }, 150);
       }
     },
     handleClick(e){
       // 点击输入框时不选中该项
-      // document.activeElement.scrollIntoViewIfNeeded(true);
       e.stopPropagation();
     }
   },

+ 10 - 14
src/common/OptionInp.vue

@@ -48,16 +48,9 @@ import $ from 'jquery';
         this.$emit('handleSelec');
       },
       handleBlur(){
-          // $(".btscroll").css({'position':'fixed'})
-        $(".foot").css({'display':'block'})
-        
-        if(MobileDevice.getModels().join(' or ').indexOf('6') == -1){
-          document.activeElement.scrollIntoView({behavior: "smooth",block:'end'})
-        }
-        // document.activeElement.scrollIntoViewIfNeeded(true);
-        // setTimeout(()=>{
-        //   document.activeElement.scrollIntoViewIfNeeded(true);
-        // },300)
+        setTimeout(()=>{
+          $(".foot").css({'display':'block'})
+        },150)
           // 如果该项未选中,则不存值
         // const select = this.item.select;
         // if(!select){return}
@@ -67,8 +60,9 @@ import $ from 'jquery';
       },
       focus(){
         if(isIos()){
-          // $(".btscroll").css({'position':'absolute'})
-          $(".foot").css({'display':'none'})
+          setTimeout(() => {
+            $(".foot").css({'display':'none'})
+          }, 150);
         }
       },
       preClick(e){
@@ -103,6 +97,7 @@ import $ from 'jquery';
     vertical-align: middle;
     height: .42rem;
     line-height: .42rem;
+    margin-bottom:.08rem;
     .prefix,.suffix{
       display: inline-block;
       vertical-align: middle;
@@ -118,14 +113,15 @@ import $ from 'jquery';
       height: .42rem;
       color: #4F50FF;
       font-size: .3rem;
-      border-bottom: 1px solid #DFE0E4 !important;
+      border-bottom: 1px solid #CCCCCC !important;
       border-radius: 0;
       padding-left: .05rem;
       background-color: transparent;
       height: 0.38rem;
       line-height: 0.38rem;
       position: relative;
-      top: 2px;
+      top: 1px;
+      box-sizing: border-box;
     }
     .check{//选中
       color: #colors[theme];

+ 10 - 9
src/common/Radio.vue

@@ -1,17 +1,17 @@
 <template>
-  <div v-if="item" class="radio-wrap bgques" :style="getStyle(detail,slide)">
+  <div v-if="item" class="radio-wrap bgques clearfix" :style="getStyle(detail,slide)">
     <!-- <p v-for="(it,index) in datas.questionDetailList" :key="it.id" class="list" @click="handleClick(it,index,true)"> -->
-    <p v-for="(it,index) in datas.questionDetailList" :key="it.id" :class="['list',{'block':((it.description||it.name).indexOf('${'))!=-1}]">
+    <div v-for="(it,index) in datas.questionDetailList" :key="it.id" :class="['list',{'block':((it.description||it.name).indexOf('${'))!=-1}]">
       <!-- <img :src="it.select==1?check:defaultPic"> -->
       <span v-if="((it.description||it.name).indexOf('${'))==-1" :class="['radioCheck',{'check':it.select==1}]" @click="handleClick(it,index,true)">{{it.description||it.name}}</span>
       <OptionInp v-else :item="it" @handleInp="inpVal($event,index)" @handleSelec="handleClick(it,index,false,true)"/>
-    </p>
+    </div>
   </div>
 </template>
 <script type="text/javascript">
-import icon from '../images/radio-default.png'
-import checkIcon from '../images/radio-check.png'
-import {patt,imageUrlPrefix,concatVal} from '@utils/tools.js'
+import icon from '../images/radio-default.png';
+import checkIcon from '../images/radio-check.png';
+import {patt,imageUrlPrefix,concatVal} from '@utils/tools.js';
 import MultiLineInput from '../common/MultiLineInput.vue';
 import OptionInp from '../common/OptionInp.vue';
   export default{
@@ -122,11 +122,12 @@ import OptionInp from '../common/OptionInp.vue';
     }
     .list{
       color: #colors[text];
-      margin:0 .1rem .07rem 0;
-      padding: .1rem .1rem .1rem 0;
+      margin:0 .05rem;
+      padding: .05rem;
       display: inline-block;
       white-space: nowrap;
-      overflow-x: hidden;
+      // overflow-x: hidden;
+      float: left;
       // -webkit-white-space: nowrap;
       // -webkit-box-orient: vertical;
       img{

+ 10 - 2
src/components/Detail.vue

@@ -85,7 +85,7 @@ import ComTextArea from '../common/ComTextArea.vue';
 import RadioSelect from '../common/RadioSelect.vue';
 import MultiLineInput from '../common/MultiLineInput.vue';
 import PickTime from '../common/PickTime.vue';
-import {patt,trimDots,imageUrlPrefix,setScroll} from '@utils/tools.js';
+import {patt,trimDots,imageUrlPrefix,setScroll,configer} from '@utils/tools.js';
 import $ from 'jquery';
 // 将获取到的数据源转换成私有数据,处理选择事件。点击完成后统一存到store中,便于回读
   export default {
@@ -103,6 +103,14 @@ import $ from 'jquery';
     props:['datas','data','checkF','tips','sex','flags'],
     created(){
       let tmpData = JSON.parse(JSON.stringify(this.datas));
+      if(tmpData.questionMapping&&tmpData.questionMapping.length>0){
+        for(let i = 0;i < tmpData.questionMapping.length;i++){
+          let tmpMap = tmpData.questionMapping[i]
+          if(configer.slide){
+            tmpMap.slide = 1
+          }
+        }
+      }
       this.checkDatas = tmpData
     },
     mounted(){
@@ -418,7 +426,7 @@ import $ from 'jquery';
         display: inline-block;
         position: absolute;
         left: 0.22rem;
-        top: 0.55rem;
+        top: 0.38rem;
         width: 0.14rem;
         height: .14rem;
         border-radius: 50%;

+ 6 - 6
src/components/DetailBox.vue

@@ -99,15 +99,15 @@
         $(".foot").css({'display':'block'})
         if(type == moduleCP['symp'] && !select){//只处理主诉症状
           const list = this.privateData.questionMapping;
-          if(list){
-            for(let i in list){
+          // if(list){
+            // for(let i in list){
               // if(list[i].required==1 && !list[i].value){
-              if(list[i].required==1){
+              // if(list[i].required==1){
                 // this.$store.commit('delChoose', {id: this.privateData.id })
                 // this.$store.commit('delText', { type: moduleCP['symp'], pId: this.privateData.id })
-              }
-            }
-          }
+              // }
+            // }
+          // }
         }
         this.$store.commit('setDetail',{detail:{}})
       },

+ 2 - 1
src/components/Login.vue

@@ -373,9 +373,10 @@ export default {
   height: 100%;
   width: 100%;
   position: absolute;
-  background: #colors[btn];
   padding: 0rem 0.6rem;
   box-sizing: border-box;
+  overflow: auto;
+  background: #colors[btn];
   .top {
     .img {
       width: 1.6rem;

+ 1 - 2
src/components/Symptom.vue

@@ -285,7 +285,6 @@ export default {
               let signNum = 1;//第一个打标的,保存为伴随
               for(let i = 0;i < mapping.length;i++){
                 let tmpMap = mapping[i]
-                tmpMap.slide = 1
                 if(tmpMap.flag == 3 && signNum == 1){
                   ++signNum
                   for(let j = 0;j < tmpMap.questionDetailList.length;j++){
@@ -413,7 +412,7 @@ export default {
         // 全部删除完 重新走问诊流程
         // this.$router.push("/")
         // this.$router.replace({path:'/'})
-        // 停留在当前页 8-19
+        // 停留在当前页 8-19   
         this.quesText = "请问您这次哪里最不舒服?";
         this.getSympList();
       }

+ 2 - 2
src/less/base.less

@@ -158,13 +158,13 @@
   background-color: #colors[quest];
 }
 .bgques {//问题内容
-  padding: .24rem .3rem .2rem .3rem;
+  padding: .12rem .3rem .12rem .3rem;
   // display: none;
 }
 .pubques {//问题题目
   font-size: .32rem;
   // font-weight: 800;
-  padding: .4rem 0.5rem .4rem .3rem;
+  padding: .24rem 0.5rem .24rem .3rem;
   word-break: break-all;
   background-color: #fff;
   box-shadow:0px 2px 8px 0px rgba(0,0,0,0.07);

+ 8 - 1
src/utils/tools.js

@@ -5,6 +5,10 @@ const $ = require('jquery');
 const imageUrlPrefix = 'http://192.168.2.121:82' //后台图片地址
 // const imageUrlPrefix = 'http://192.168.2.236:82' //后台图片地址
 
+const configer = {
+  slide:true,//true展开false折叠
+}
+
 const getUrlArgObject = (parm) => {
     let query = window.location.search;
     let args = qs.parse(query.substr(1));
@@ -119,6 +123,7 @@ const phoneTest = /^[1]([3-9])[0-9]{9}$/;
  * \d{2}[0-9Xx]                顺序码两位,一位校验码最后一位数字或者大小写X
  */
 /**18位
+ * 
  *
  *
  * [1-9]\d{5}                 前六位地区,非0打头
@@ -327,6 +332,7 @@ function setScroll(scroll,flg,wrapper){
       scrollY: flg,
       click: true,
       tap: true,
+      autoBlur:isIos()?true:false,
       probeType:3,
       bounceTime:800,
       momentumLimitTime:300,//只有在屏幕上快速滑动的时间小于 momentumLimitTime,才能开启 momentum 动画。
@@ -404,7 +410,8 @@ module.exports =  {
   dateParser,
   name,
   isQQ,
-  getNum
+  getNum,
+  configer
 }