TabPage.vue 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  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. @click="clickTab(it,index)">
  9. <span :class="{current:index==number,comp:finish[it.type]}" v-if="type[it.type]==1">
  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==moduleCP['symp']&&item.type==moduleCP['symp']&&moduleShow"
  20. @next="toNext"
  21. :nameStr="item.name"
  22. :modluesLen="modluesLen"
  23. />
  24. <DiagTreat
  25. v-if="flag==moduleCP['diagT']&&item.type==moduleCP['diagT']&&moduleShow"
  26. :datas="item"
  27. :preName="modlues[0]&&modlues[0].name"
  28. :modluesLen="modluesLen"
  29. :nextName="modlues[2]&&modlues[2].name"
  30. @next="toNext"
  31. @back="beBack"
  32. />
  33. <Others
  34. v-if="flag==moduleCP['other']&&item.type==moduleCP['other']&&moduleShow"
  35. :modluesLen="modluesLen"
  36. :datas="item"
  37. :preName="modlues[idx-1]&&modlues[idx-1].name"
  38. :nextName="modlues[idx+1]&&modlues[idx+1].name"
  39. @next="toNext"
  40. @back="beBack"
  41. />
  42. <AddContent
  43. v-if="flag == moduleCP['suplement']&&item.type==moduleCP['suplement']&&moduleShow"
  44. :modluesLen="modluesLen"
  45. :allMoudles="item"
  46. :preName="modlues[idx-1]&&modlues[idx-1].name"
  47. @toggleModule="toggleModule"
  48. @next="toNext"
  49. @back="beBack"
  50. />
  51. </template>
  52. <Preview v-if="!moduleShow"
  53. :preName="getPreviewName()"
  54. :loadingShow="this.$store.state.loadingShow"
  55. :showLis="type"
  56. @back="beBack"
  57. />
  58. </div>
  59. <!-- 详情页 -->
  60. <div class="detail" v-if="this.$store.state.detailShow">
  61. <DetailBox />
  62. </div>
  63. </div>
  64. </template>
  65. <script type="text/javascript">
  66. import Symptom from './Symptom.vue';
  67. import AddContent from './AddContent.vue';
  68. import DiagTreat from './DiagTreat.vue';
  69. import Others from './Others.vue';
  70. import Preview from './Preview.vue';
  71. import {moduleConfig,moduleCP} from '../utils/tools.js';
  72. import $ from 'jquery';
  73. import DetailBox from './DetailBox.vue';
  74. export default {
  75. name: 'TabPage',
  76. data() {
  77. let sysConfig = this.$store.state.sysConfig;
  78. let tmpAllMoudles = this.$store.state.allMoudles;
  79. let allMoudles = moduleConfig(sysConfig,tmpAllMoudles);
  80. const { choose} = this.$store.state.symptom;
  81. return {
  82. config: sysConfig,
  83. modlues: allMoudles.data,
  84. modluesLen: allMoudles.len,
  85. type: {
  86. "1": sysConfig.length > 0 && sysConfig.filter(item => item.code == "symptoms_show")[0].value,
  87. "51": sysConfig.length > 0 && sysConfig.filter(item => item.code == "diagnosis_show")[0].value,
  88. "3": sysConfig.length > 0 && sysConfig.filter(item => item.code == "omhistory_show")[0].value,
  89. "52": sysConfig.length > 0 && sysConfig.filter(item => item.code == "replenish_show")[0].value,
  90. },
  91. flag: allMoudles.order,
  92. moduleShow:true,
  93. finish:{ //标识已填
  94. '1':true,
  95. '51':false,
  96. '3':false,
  97. '52':false
  98. },
  99. number:0,
  100. moduleCP:moduleCP,
  101. symChoose:choose
  102. }
  103. },
  104. created() {
  105. if (this.config.length == 0) {//登录进去返回到列表页,扫码返回到开始页
  106. let scan = localStorage.getItem('scan');
  107. let params = JSON.parse(localStorage.getItem('infoParam'));
  108. let param = JSON.parse(localStorage.getItem('loginParam'));
  109. let data = JSON.parse(localStorage.getItem('loginData'));
  110. if(!scan){
  111. if(data.length>1){
  112. this.$router.replace({path:'/department'});
  113. }else{
  114. this.$router.replace({path:'/home',query:param});
  115. }
  116. }else{
  117. this.$router.replace({path:'/home',query:Object.assign({}, params,{scan:true})});
  118. }
  119. }
  120. },
  121. methods: {
  122. // 症状情况有内容后才可以点击tab栏
  123. clickTab(item,index){
  124. if(this.symChoose.length>0){
  125. this.number = index;
  126. this.flag = item.type;
  127. this.finish[parseInt(item.type)] = true;
  128. }
  129. },
  130. getPreviewName(){
  131. let len = this.modluesLen,tmpModule = this.modlues;
  132. let preName = '';
  133. if(len == 1){
  134. preName=tmpModule[0].name
  135. }else if(len == 2){
  136. preName=tmpModule[1].name
  137. }else if(len == 3){
  138. preName=tmpModule[2].name
  139. }else if(len == 4){
  140. preName=tmpModule[3].name
  141. }
  142. return preName
  143. },
  144. getNames(type){
  145. let len = this.modluesLen,tmpModule = this.modlues;
  146. let nextName = '';
  147. if(len == 1){
  148. preName=tmpModule[0].name
  149. }else if(len == 2){
  150. preName=tmpModule[1].name
  151. }else if(len == 3){
  152. preName=tmpModule[2].name
  153. }else if(len == 4){
  154. preName=tmpModule[3].name
  155. }
  156. return preName
  157. },
  158. toNext(preview) {
  159. if(preview === 'preview'){
  160. this.moduleShow=false
  161. return
  162. }
  163. let flag = parseInt(this.flag),num=this.number;
  164. this.number = ++num;
  165. for(let i = 0;i < this.modlues.length;i++){
  166. let part = this.modlues[i];
  167. if(part.type == flag){
  168. if(i < (this.modlues.length-1)){
  169. this.flag = this.modlues[i+1].type
  170. }
  171. }
  172. }
  173. for(let j in this.finish){
  174. if(j == this.flag){
  175. this.finish[j] = true
  176. }
  177. }
  178. },
  179. beBack(preview) {
  180. if(preview === 'preview'){
  181. this.moduleShow=true
  182. return
  183. }
  184. let flag = parseInt(this.flag),num=this.number;
  185. this.number = --num;
  186. for(let i = 0;i < this.modlues.length;i++){
  187. let part = this.modlues[i];
  188. if(part.type == flag){
  189. this.flag = this.modlues[i-1].type
  190. }
  191. }
  192. for(let j in this.finish){
  193. if(j == this.flag){
  194. this.finish[j] = true
  195. }
  196. }
  197. },
  198. toggleModule(flg){
  199. this.moduleShow = flg
  200. },
  201. },
  202. components: {
  203. Symptom,
  204. DiagTreat,
  205. Others,
  206. AddContent,
  207. Preview,
  208. DetailBox
  209. }
  210. }
  211. </script>
  212. <style lang="less" scoped>
  213. @import '../less/base.less';
  214. .tab-wrap {
  215. width: 100%;
  216. height: 100%;
  217. padding-bottom: 0.88rem;
  218. padding-top: 0.82rem;
  219. .tab {
  220. position: fixed;
  221. top: 0;
  222. left: 0;
  223. width: 100%;
  224. background: #fff;
  225. z-index: 101;
  226. height: 0.82rem;
  227. line-height: 0.82rem;
  228. border-bottom: 1px solid #ededed;
  229. box-sizing: border-box;
  230. padding-top: 0.16rem;
  231. p {
  232. display: inline-block;
  233. padding: 0 0.2rem;
  234. box-sizing: border-box;
  235. }
  236. span {
  237. font-size: 0.24rem;
  238. display: inline-block;
  239. vertical-align: top;
  240. width: 100%;
  241. height: 0.5rem;
  242. line-height: 0.5rem;
  243. color: #7c828e;
  244. text-align: center;
  245. }
  246. .current {
  247. color: #0043e8;
  248. background: #e5ecfc;
  249. border-radius: 25px;
  250. }
  251. .comp{
  252. color: #0043e8;
  253. }
  254. }
  255. .content {
  256. font-size: 0.3rem;
  257. padding: 0.45rem 0 0.45rem 0.3rem;
  258. }
  259. }
  260. </style>