DiagTreat.vue 6.2 KB

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