TabPage.vue 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. <template>
  2. <div class="tab-wrap">
  3. <div class="tab"
  4. v-if="modlues&&modlues.length>0 && moduleShow">
  5. <p v-for="(it,index) in modlues"
  6. :style="{'width':1/modlues.length*100+'%'}"
  7. :key="it.id">
  8. <span :class="{current:index==number,comp:finish[it.type]}" v-if="type[it.type]==1">
  9. <!-- <i>{{it.type}}</i> -->
  10. <i>{{index+1}}</i>
  11. {{it.name}}
  12. </span>
  13. </p>
  14. </div>
  15. <!-- 内容 -->
  16. <div class="content">
  17. <template v-for="(item,idx) in modlues">
  18. <Symptom
  19. v-if="flag==1&&item.type==1&&moduleShow"
  20. @next="toNext"
  21. :modluesLen="modluesLen"
  22. />
  23. <DiagTreat
  24. v-if="flag==51&&item.type==51&&moduleShow"
  25. :datas="item"
  26. :preName="modlues[0]&&modlues[0].name"
  27. :modluesLen="modluesLen"
  28. :nextName="modlues[2]&&modlues[2].name"
  29. @next="toNext"
  30. @back="beBack"
  31. />
  32. <Others
  33. v-if="flag==3&&item.type==3&&moduleShow"
  34. :modluesLen="modluesLen"
  35. :datas="item"
  36. :preName="modlues[idx-1]&&modlues[idx-1].name"
  37. :nextName="modlues[idx+1]&&modlues[idx+1].name"
  38. @next="toNext"
  39. @back="beBack"
  40. />
  41. <AddContent
  42. v-show="flag == 52&&item.type==52&&moduleShow"
  43. :modluesLen="modluesLen"
  44. :allMoudles="item"
  45. :preName="modlues[idx-1]&&modlues[idx-1].name"
  46. @toggleModule="toggleModule"
  47. @next="toNext"
  48. @back="beBack"
  49. />
  50. </template>
  51. <Preview v-show="!moduleShow"
  52. :preName="getPreviewName()"
  53. @back="beBack"
  54. />
  55. </div>
  56. </div>
  57. </template>
  58. <script type="text/javascript">
  59. import Symptom from './Symptom.vue';
  60. import AddContent from './AddContent.vue';
  61. import DiagTreat from './DiagTreat.vue';
  62. import Others from './Others.vue';
  63. import Preview from './Preview.vue';
  64. import {moduleConfig} from '../utils/tools.js';
  65. export default {
  66. name: 'TabPage',
  67. data() {
  68. let sysConfig = this.$store.state.sysConfig;
  69. let tmpAllMoudles = this.$store.state.allMoudles;
  70. let allMoudles = moduleConfig(sysConfig,tmpAllMoudles);
  71. return {
  72. config: sysConfig,
  73. modlues: allMoudles.data,
  74. modluesLen: allMoudles.len,
  75. type: {
  76. "1": sysConfig.length > 0 && sysConfig.filter(item => item.code == "symptoms_show")[0].value,
  77. "51": sysConfig.length > 0 && sysConfig.filter(item => item.code == "diagnosis_show")[0].value,
  78. "3": sysConfig.length > 0 && sysConfig.filter(item => item.code == "omhistory_show")[0].value,
  79. "52": sysConfig.length > 0 && sysConfig.filter(item => item.code == "replenish_show")[0].value,
  80. },
  81. flag: allMoudles.order,
  82. moduleShow:true,
  83. finish:{ //标识已填
  84. "1":true,
  85. "51":false,
  86. "3":false,
  87. "52":false
  88. },
  89. number:0
  90. }
  91. },
  92. created() {
  93. if (this.config.length == 0) {
  94. this.$router.go(-1)
  95. }
  96. },
  97. methods: {
  98. getPreviewName(){
  99. let len = this.modluesLen,tmpModule = this.modlues;
  100. let preName = '';
  101. if(len == 1){
  102. preName=tmpModule[0].name
  103. }else if(len == 2){
  104. preName=tmpModule[1].name
  105. }else if(len == 3){
  106. preName=tmpModule[2].name
  107. }else if(len == 4){
  108. preName=tmpModule[3].name
  109. }
  110. return preName
  111. },
  112. getNames(type){
  113. let len = this.modluesLen,tmpModule = this.modlues;
  114. let nextName = '';
  115. if(len == 1){
  116. preName=tmpModule[0].name
  117. }else if(len == 2){
  118. preName=tmpModule[1].name
  119. }else if(len == 3){
  120. preName=tmpModule[2].name
  121. }else if(len == 4){
  122. preName=tmpModule[3].name
  123. }
  124. return preName
  125. },
  126. toNext(preview) {
  127. if(preview === 'preview'){
  128. this.moduleShow=false
  129. return
  130. }
  131. let flag = parseInt(this.flag),num=this.number;
  132. this.number = ++num;
  133. for(let j in this.finish){
  134. if(j <= flag){
  135. this.finish[j] = true
  136. }
  137. }
  138. for(let i = 0;i < this.modlues.length;i++){
  139. let part = this.modlues[i];
  140. if(part.type == flag){
  141. if(i < (this.modlues.length-1)){
  142. this.flag = this.modlues[i+1].type
  143. }
  144. }
  145. }
  146. },
  147. beBack(preview) {
  148. if(preview === 'preview'){
  149. this.moduleShow=true
  150. return
  151. }
  152. let flag = parseInt(this.flag),num=this.number;
  153. this.number = --num;
  154. for(let j in this.finish){
  155. if(j <= flag){
  156. this.finish[j] = true
  157. }
  158. }
  159. for(let i = 0;i < this.modlues.length;i++){
  160. let part = this.modlues[i];
  161. if(part.type == flag){
  162. this.flag = this.modlues[i-1].type
  163. }
  164. }
  165. },
  166. toggleModule(flg){
  167. this.moduleShow = flg
  168. },
  169. },
  170. components: {
  171. Symptom,
  172. DiagTreat,
  173. Others,
  174. AddContent,
  175. Preview
  176. }
  177. }
  178. </script>
  179. <style lang="less" scoped>
  180. .tab-wrap {
  181. width: 100%;
  182. height: 100%;
  183. padding-bottom: 0.88rem;
  184. padding-top: 0.82rem;
  185. .tab {
  186. position: fixed;
  187. top: 0;
  188. left: 0;
  189. width: 100%;
  190. background: #fff;
  191. z-index: 50;
  192. height: 0.82rem;
  193. line-height: 0.82rem;
  194. border-bottom: 1px solid #ededed;
  195. box-sizing: border-box;
  196. padding-top: 0.16rem;
  197. p {
  198. display: inline-block;
  199. padding: 0 0.2rem;
  200. box-sizing: border-box;
  201. }
  202. span {
  203. font-size: 0.24rem;
  204. display: inline-block;
  205. vertical-align: top;
  206. width: 100%;
  207. height: 0.5rem;
  208. line-height: 0.5rem;
  209. color: #7c828e;
  210. text-align: center;
  211. // margin-left: 0.2rem;
  212. // margin-right: 0.19rem;
  213. }
  214. .current {
  215. color: #0043e8;
  216. background: #e5ecfc;
  217. border-radius: 25px;
  218. }
  219. .comp{
  220. color: #0043e8;
  221. }
  222. }
  223. .content {
  224. font-size: 0.3rem;
  225. // padding: 0.45rem 0.6rem;
  226. padding: 0.45rem 0.3rem 0.45rem 0.6rem;
  227. }
  228. }
  229. </style>