index.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. import { createSubscribe } from 'applet-page-component';
  2. import * as utils from './../../utils';
  3. import { getDepDoctorList, getDepOrderSourceRemain } from './service';
  4. /* 判断日期是不是今天 */
  5. const isToday = date => {
  6. const _date = new Date();
  7. const year = _date.getFullYear();
  8. const month = _date.getMonth() + 1;
  9. const day = _date.getDate();
  10. const check = val => `${val}`.length <= 1 ? `0${val}` : val;
  11. return date === [year, check(month), check(day)].join('/');
  12. };
  13. const copy = obj => JSON.parse(JSON.stringify(obj));
  14. const defaultSource = {
  15. normal: {
  16. items: [],
  17. type: 'normal',
  18. name: '普通号'
  19. },
  20. expert: {
  21. items: [],
  22. name: '专家号',
  23. type: 'expert'
  24. }
  25. };
  26. Component(createSubscribe({
  27. /* 分页逻辑 */
  28. async onReachBottom() {
  29. const {
  30. loading,
  31. isLastPage
  32. } = this.data;
  33. if (loading || isLastPage) return;
  34. this.pageIndex = this.pageIndex + 1;
  35. await this.updateData({
  36. loading: true
  37. });
  38. await this.onSplitPage();
  39. }
  40. })({
  41. props: {
  42. componentData: {}
  43. },
  44. data: {
  45. date: '',
  46. loading: true,
  47. dateList: [],
  48. /* 原始的列表 */
  49. nativeList: [],
  50. /* 是否为最后一页 */
  51. isLastPage: false,
  52. dataSource: copy(defaultSource),
  53. headerHeight: utils.getHeaderHeight()
  54. },
  55. async didMount() {
  56. await this.onRefresh();
  57. await this.fetchDateRemainList();
  58. },
  59. methods: {
  60. getQuery() {
  61. const {
  62. $routeConfig
  63. } = this.$page;
  64. return $routeConfig.query;
  65. },
  66. updateData(data) {
  67. return new Promise(resolve => this.setData(data, resolve));
  68. },
  69. async onChange(date) {
  70. await this.onRefresh(date);
  71. },
  72. /* 获取日期列表 */
  73. async fetchDateRemainList() {
  74. /* 获取日期列表 */
  75. const {
  76. departmentId
  77. } = this.getQuery();
  78. const list = await getDepOrderSourceRemain({
  79. depId: departmentId
  80. });
  81. /* 处理数据 */
  82. const dateList = list.map(item => {
  83. const {
  84. date
  85. } = item;
  86. const _date = date.replace(/-/g, '/');
  87. const today = isToday(_date);
  88. const day = new Date(_date).getDate();
  89. const week = utils.getWeek(_date);
  90. return { ...item,
  91. date: _date,
  92. showDay: day,
  93. today,
  94. week
  95. };
  96. });
  97. await this.updateData({
  98. dateList
  99. });
  100. },
  101. /* 数据处理 */
  102. formatData(list = []) {
  103. const {
  104. dataSource
  105. } = this.data;
  106. list.forEach(item => {
  107. const {
  108. items
  109. } = dataSource[item.type];
  110. if (items) items.push(item);
  111. });
  112. return { ...dataSource
  113. };
  114. },
  115. /* 分页显示医生列表 */
  116. async onSplitPage() {
  117. let total = 0;
  118. let dataList = [];
  119. let success = true;
  120. const {
  121. date,
  122. isLastPage
  123. } = this.data;
  124. let {
  125. date: curDate = ''
  126. } = date || {};
  127. if (curDate) {
  128. const reg = new RegExp('/', 'gm');
  129. curDate = curDate.replace(reg, '-');
  130. }
  131. const {
  132. departmentId
  133. } = this.getQuery();
  134. const params = {
  135. date: curDate,
  136. pageSize: 10,
  137. depId: departmentId,
  138. pageIndex: this.pageIndex
  139. };
  140. if (!isLastPage) {
  141. try {
  142. const {
  143. list = [],
  144. pagination = {}
  145. } = await getDepDoctorList(params);
  146. dataList = list;
  147. total = pagination.total || 0;
  148. } catch (e) {
  149. success = false;
  150. }
  151. }
  152. let state = {
  153. loading: false
  154. };
  155. if (success) {
  156. const {
  157. nativeList
  158. } = this.data;
  159. const _list = [...nativeList, ...dataList];
  160. state = { ...state,
  161. nativeList: _list,
  162. isLastPage: _list.length >= total,
  163. dataSource: this.formatData(dataList)
  164. };
  165. }
  166. await this.updateData(state);
  167. },
  168. /* 刷新数据 */
  169. async onRefresh(curDate = '') {
  170. /* 初始化数据 */
  171. this.pageIndex = 1;
  172. await this.updateData({
  173. date: curDate,
  174. loading: true,
  175. nativeList: [],
  176. isLastPage: false,
  177. dataSource: copy(defaultSource)
  178. });
  179. await this.onSplitPage();
  180. }
  181. }
  182. }));