DiagTreat.vue 6.4 KB

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