血透系统pad前端

dialysisContent.vue 6.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. <!-- 透析室 -->
  2. <template>
  3. <div>
  4. <div class="navigation">
  5. <ul class="ul">
  6. <li class="list" @click="showZonePicker">
  7. <span>{{selected_zone[0].text}}</span>
  8. <span class="iconfont">&#xe60c;</span>
  9. </li>
  10. <li class="list" @click="showSchedualTypePicker">
  11. <span>{{selected_schedual_type[0].text}}</span>
  12. <span class="iconfont">&#xe60c;</span>
  13. </li>
  14. <li class="list" @click="openPicker">
  15. <span>{{selected_date_str}}</span>
  16. <span class="iconfont">&#xe60c;</span>
  17. </li>
  18. </ul>
  19. <vue-pickers :show="show_zone_picker" :columns="1" :defaultData="selected_zone" :selectData="zones" @cancel="hideZonePicker" @confirm="didSelectZone">
  20. </vue-pickers>
  21. <vue-pickers :show="show_schedual_type_picker" :columns="1" :defaultData="selected_schedual_type" :selectData="schedual_types" @cancel="hideSchedualTypePicker" @confirm="didSelectSchedualType">
  22. </vue-pickers>
  23. <mt-datetime-picker ref="datePicker" type="date" v-model="selected_date" :endDate="new Date()" @confirm="didSelectDate">
  24. </mt-datetime-picker>
  25. </div>
  26. <div class="dataList">
  27. <div v-for="(scheduals, index) in filtedScheduals" :key="index" class="cell clearfix">
  28. <h2 class="title">{{scheduals.zone_name}}</h2>
  29. <data-list :scheduals="scheduals.scheduals"></data-list>
  30. </div>
  31. </div>
  32. </div>
  33. </template>
  34. <script>
  35. import DataList from "./data_list"
  36. import vuePickers from "vue-pickers"
  37. import { parseTime } from "@/utils/index"
  38. import { getDialysisScheduals } from "@/api/dialysis"
  39. export default {
  40. name: "DialysisContent",
  41. components: {
  42. DataList,
  43. vuePickers
  44. },
  45. data() {
  46. return {
  47. show_schedual_type_picker: false,
  48. selected_schedual_type: [{ value: 0, text: "全部班" }],
  49. schedual_types: {
  50. data1: [
  51. { value: 0, text: "全部班" },
  52. { value: 1, text: "上午" },
  53. { value: 2, text: "下午" },
  54. { value: 3, text: "晚上" },
  55. ]
  56. },
  57. show_zone_picker: false,
  58. selected_zone: [{ value: 0, text: "全部分区" }],
  59. zones: {
  60. data1: [
  61. { value: 0, text: "全部分区" }
  62. ]
  63. },
  64. selected_date: new Date(),
  65. dialysis_scheduals: [],
  66. };
  67. },
  68. computed: {
  69. selected_date_str: function() {
  70. return parseTime(this.selected_date, "{y}-{m}-{d}")
  71. },
  72. filtedScheduals: function() {
  73. if (this.selected_zone[0].value == 0) {
  74. return this.dialysis_scheduals
  75. } else {
  76. var zone_name = this.selected_zone[0].text
  77. for (let index = 0; index < this.dialysis_scheduals.length; index++) {
  78. const dialysis_scheduals = this.dialysis_scheduals[index];
  79. if (dialysis_scheduals.zone_name == zone_name) {
  80. return [{zone_name: zone_name, scheduals: dialysis_scheduals.scheduals}]
  81. }
  82. }
  83. }
  84. }
  85. },
  86. created() {
  87. this.requestDialysisScheduals()
  88. },
  89. methods: {
  90. openPicker() {
  91. this.$refs.datePicker.open();
  92. },
  93. didSelectDate: function(date) {
  94. this.requestDialysisScheduals()
  95. },
  96. showZonePicker() {
  97. this.show_zone_picker = true
  98. },
  99. hideZonePicker() {
  100. this.show_zone_picker = false
  101. },
  102. didSelectZone(val) {
  103. this.show_zone_picker = false
  104. this.selected_zone = [val.select1];
  105. },
  106. showSchedualTypePicker() {
  107. this.show_schedual_type_picker = true
  108. },
  109. hideSchedualTypePicker() {
  110. this.show_schedual_type_picker = false
  111. },
  112. didSelectSchedualType(val) {
  113. this.show_schedual_type_picker = false;
  114. this.selected_schedual_type = [val.select1];
  115. this.requestDialysisScheduals()
  116. },
  117. requestDialysisScheduals() {
  118. var type = this.selected_schedual_type[0].value
  119. // var date = (Date.parse(new Date(this.selected_date_str)) / 1000) - 28800
  120. getDialysisScheduals({type: type, date: this.selected_date_str}).then(rs => {
  121. var resp = rs.data
  122. if (resp.state == 1) {
  123. console.log(resp.data)
  124. var scheduals = resp.data.scheduals
  125. var zoneMap = {}
  126. var schedualMap = {}
  127. for (let index = 0; index < scheduals.length; index++) {
  128. const schedual = scheduals[index]
  129. if (schedual.dialysis_order == null) {
  130. continue
  131. }
  132. if (schedualMap[schedual.device_zone.name] == null) {
  133. schedualMap[schedual.device_zone.name] = []
  134. }
  135. schedualMap[schedual.device_zone.name].push(schedual)
  136. if (zoneMap[schedual.device_zone.name] == null) {
  137. zoneMap[schedual.device_zone.name] = schedual.device_zone
  138. }
  139. }
  140. var zones = []
  141. zones.push({ value: 0, text: "全部分区" })
  142. for (var zoneName in zoneMap) {
  143. zones.push({ value: zoneMap[zoneName].id, text: zoneName })
  144. }
  145. zones = zones.sort(function(a, b) {
  146. return a.value > b.value
  147. })
  148. this.zones.data1 = zones
  149. var dialysis_scheduals = []
  150. for (let index = 0; index < zones.length; index++) {
  151. const zone = zones[index]
  152. var scheduals = schedualMap[zone.text]
  153. if (scheduals == null) {
  154. continue
  155. }
  156. dialysis_scheduals.push({zone_name: zone.text, scheduals: scheduals})
  157. }
  158. this.dialysis_scheduals = dialysis_scheduals
  159. } else {
  160. this.$toast({
  161. message: resp.msg,
  162. })
  163. }
  164. }).catch(v=>{})
  165. }
  166. },
  167. };
  168. </script>
  169. <style rel="stylesheet/scss" lang="scss" scoped>
  170. .navigation {
  171. padding: 0.17rem 0 0.28rem 0;
  172. background: $main-color;
  173. .ul {
  174. @include box-sizing;
  175. @include display-flex;
  176. @include justify-content-center;
  177. @include text-align;
  178. /*overflow-y:scroll;*/
  179. width: 60%;
  180. margin: 0 auto;
  181. .list {
  182. color: $text-color;
  183. display: inline-block;
  184. font-size: 0.3rem;
  185. @include flex;
  186. span {
  187. &.iconfont {
  188. font-size: 0.3rem;
  189. }
  190. }
  191. }
  192. }
  193. }
  194. .dataList {
  195. @include box-sizing;
  196. margin: 0 0 1.425rem 0;
  197. .cell {
  198. padding: 0.28rem 0.28rem 0 0;
  199. margin-top: 0.3rem;
  200. background: $white-bg;
  201. .title {
  202. font-size: 0.36rem;
  203. padding: 0.27rem 0.4rem;
  204. color: $pgh-color;
  205. font-weight: 700;
  206. }
  207. }
  208. }
  209. </style>