Others.vue 6.7 KB

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