DiagTreat.vue 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. <template>
  2. <div class="treat-wrap treatper">
  3. <div class="content">
  4. <div v-for="(it,i) in dtoList"
  5. v-if="dtoList"
  6. :key="it.id"
  7. class="label">
  8. <p class="quest">{{i + 1 +'.' + (it.description||it.name)}}</p>
  9. <img class="questionImg" :src="it.url.replace('{imageUrlPrefix}',imgUrl)" v-if="it.url">
  10. <Label v-if="it.controlType==0"
  11. :item="it"
  12. :indx="i"
  13. :ppId="it.id"
  14. :moduleType="datas.type"
  15. dom=".treatper"
  16. @commitShowLabel="commitShowLabel"
  17. @setDetail="setDetail"/>
  18. <!-- 上传图片 -->
  19. <UploadImg v-if="it.controlType==4"
  20. :item="it"
  21. :moduleType="datas.type"
  22. :imgList="imgs"/>
  23. <!-- 输入框 -->
  24. <Input v-if="it.controlType==6 || it.controlType==7"
  25. :item="it"
  26. :key="it.id"
  27. @updata="updataData($event,it.id)"/>
  28. <!-- 文本域 -->
  29. <ComTextArea v-if="it.controlType == 5"
  30. :item="it"
  31. @updata="updataData($event,it.id)"/>
  32. <Radio v-if="it.controlType==1"
  33. :item="it"
  34. :key="it.id"
  35. @updata="updataData($event,it.id)"/>
  36. <CheckBox v-if="it.controlType==2"
  37. :item="it"
  38. :key="it.id"
  39. @updata="updataData($event,it.id)"/>
  40. <!-- 多行输入-->
  41. <template
  42. v-if="it.controlType == 3"
  43. v-for="(part,index) in it.questionDetailList"
  44. >
  45. <MultiLineInput
  46. :msg="part.name"
  47. :part="part"
  48. @updata="updataData($event,it.id,index)"
  49. ></MultiLineInput>
  50. </template>
  51. </div>
  52. <div class="result" v-if="checkText.length>0">
  53. <p class="title">{{datas.name}}</p>
  54. <!-- <p v-for="(v,i) in checkText">{{v.text}}</p> -->
  55. <p>{{getText()}}</p>
  56. </div>
  57. </div>
  58. <div class="foot" v-if="modluesLen==2">
  59. <span class="back" @click="beBack">{{'返回'+ preName}}</span>
  60. <span class="next" @click="toNext">{{'预览并提交病历'}}</span>
  61. </div>
  62. <div class="foot" v-else>
  63. <span class="back" @click="beBack">{{'返回'+ preName}}</span>
  64. <span class="next" @click="toNext">{{'进入'+ nextName}}</span>
  65. </div>
  66. <div class="detail" v-if="show">
  67. <DetailBox @close="closeDetal"
  68. :data="labelDetail"
  69. :moduleType="datas.type"
  70. :ppId="ppId"
  71. v-if="labelDetail.questionMapping&&labelDetail.questionMapping.length>0"
  72. @pComplete="complete"/>
  73. </div>
  74. </div>
  75. </template>
  76. <script type="text/javascript">
  77. import UploadImg from '../common/UploadImg.vue';
  78. import Label from '../common/Label.vue';
  79. import DetailBox from './DetailBox.vue';
  80. import Input from '../common/Input.vue';
  81. import ComTextArea from '../common/ComTextArea.vue';
  82. import {moduleCP,patt,imageUrlPrefix,setScroll} from '@utils/tools';
  83. import Radio from '../common/Radio.vue';
  84. import CheckBox from '../common/CheckBox.vue';
  85. import BScroll from 'better-scroll';
  86. import MultiLineInput from '../common/MultiLineInput.vue';
  87. export default {
  88. name:'DiagTreat',
  89. data(){
  90. let {origin,text,datas} = this.$store.state.diagnose;
  91. return{
  92. msg:"诊疗情况",
  93. imgs:this.$store.state.diagnose.imgSrc,
  94. // dtoList:origin, //模板数据
  95. dtoList:datas, //模板数据
  96. labelDetail:{}, //标签明细
  97. checkText:text, //选中的文字-Arr
  98. show:false,
  99. ppId:null,
  100. imgUrl:imageUrlPrefix,
  101. }
  102. },
  103. props:['datas','preName','nextName','modluesLen'],
  104. mounted(){
  105. let scroll = setScroll(BScroll,true,'.treatper')
  106. this.scroll = scroll
  107. scroll.on('scroll', this.onScroll)
  108. },
  109. methods:{
  110. onScroll(pos) {
  111. document.activeElement.scrollIntoViewIfNeeded(true);
  112. },
  113. commitShowLabel(flg){
  114. this.scroll = setScroll(BScroll,flg,'.treatper')
  115. },
  116. beBack(){
  117. this.$emit('back');
  118. },
  119. toNext(){
  120. if(this.modluesLen==2){
  121. this.$emit('next','preview')
  122. }else{
  123. this.$emit('next');
  124. }
  125. },
  126. setDetail(obj){
  127. this.labelDetail = obj.detail;
  128. this.ppId = obj.ppId;
  129. this.show = true;
  130. this.scroll = setScroll(BScroll,false,'.treatper')
  131. },
  132. complete(){
  133. this.show = false;
  134. this.labelDetail = {};
  135. this.ppId = null;
  136. // 处理明细选中的值
  137. this.scroll = setScroll(BScroll,true,'.treatper')
  138. },
  139. closeDetal(){
  140. this.show = false;
  141. this.labelDetail = {};
  142. this.ppId = null;
  143. this.scroll = setScroll(BScroll,true,'.treatper')
  144. },
  145. getText(){
  146. let textArr = this.checkText;
  147. let msg = "";
  148. for(let k in textArr){
  149. if(textArr[k].textP){
  150. msg += textArr[k].textP + ';'
  151. }
  152. }
  153. return msg;
  154. },
  155. updataData(data,id,index){//输入框存值
  156. let list = this.dtoList;
  157. for(let i in list){
  158. // if(list[i].id==data.id){
  159. if(list[i].id==id){
  160. if(list[i].controlType == 3){//多行输入
  161. let detailList = list[i].questionDetailList;
  162. detailList.splice(index,1,data);
  163. }else{
  164. list.splice(i,1,data)
  165. }
  166. }
  167. }
  168. this.$store.commit('setDatas',{type:moduleCP['diagT'],data:data,pId:data.id,ppId:id});
  169. this.$store.commit('setText',{type:moduleCP['diagT'],text:data.value.replace(patt,'').replace(/\#\{/g,'').replace(/\}/g,''),textP:data.valueP.replace(patt,'').replace(/\#\{/g,'').replace(/\}/g,''),pId:data.id,flag:true});
  170. }
  171. },
  172. components:{
  173. UploadImg,
  174. Label,
  175. DetailBox,
  176. Input,
  177. ComTextArea,
  178. Radio,
  179. CheckBox,
  180. MultiLineInput
  181. },
  182. /*watch:{
  183. dtoList:{
  184. handler(newVal,oldVal){
  185. },
  186. deep:true
  187. }
  188. },*/
  189. }
  190. </script>
  191. <style lang="less" scoped>
  192. @import '../less/base.less';
  193. .treat-wrap{
  194. font-size: .3rem;
  195. .btscroll;
  196. .quest{
  197. color: #000;
  198. margin-bottom: .36rem;
  199. font-weight: 700;
  200. }
  201. .label{
  202. .label;
  203. /* img{
  204. width:.56rem;
  205. height: .74rem;
  206. vertical-align: top;
  207. } */
  208. }
  209. .result{
  210. .result;
  211. }
  212. }
  213. .foot{
  214. .dbfooter;
  215. }
  216. .detail{
  217. // .mask;
  218. // z-index: 66;
  219. }
  220. .footer{
  221. .footer;
  222. }
  223. .questionImg {
  224. width: 96%;
  225. }
  226. </style>