index.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  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(
  27. createSubscribe({
  28. /* 分页逻辑 */
  29. async onReachBottom() {
  30. const { loading, isLastPage } = this.data;
  31. if (loading || isLastPage) return;
  32. this.pageIndex = this.pageIndex + 1;
  33. await this.updateData({
  34. loading: true,
  35. });
  36. await this.onSplitPage();
  37. },
  38. })({
  39. props: {
  40. componentData: {},
  41. },
  42. data: {
  43. date: "",
  44. loading: true,
  45. dateList: [],
  46. /* 原始的列表 */
  47. nativeList: [],
  48. /* 是否为最后一页 */
  49. isLastPage: false,
  50. dataSource: copy(defaultSource),
  51. headerHeight: utils.getHeaderHeight(),
  52. },
  53. async didMount() {
  54. await this.onRefresh();
  55. await this.fetchDateRemainList();
  56. },
  57. methods: {
  58. getQuery() {
  59. const { $routeConfig } = this.$page;
  60. return $routeConfig.query;
  61. },
  62. updateData(data) {
  63. return new Promise((resolve) => this.setData(data, resolve));
  64. },
  65. async onChange(date) {
  66. await this.onRefresh(date);
  67. },
  68. /* 获取日期列表 */
  69. async fetchDateRemainList() {
  70. /* 获取日期列表 */
  71. const { departmentId, depCode } = this.getQuery();
  72. const list = await getDepOrderSourceRemain({
  73. depId: departmentId,
  74. depCode,
  75. });
  76. /* 处理数据 */
  77. const dateList = list.map((item) => {
  78. const { date } = item;
  79. const _date = date.replace(/-/g, "/");
  80. const today = isToday(_date);
  81. const day = new Date(_date).getDate();
  82. const week = utils.getWeek(_date);
  83. return { ...item, date: _date, showDay: day, today, week };
  84. });
  85. await this.updateData({
  86. dateList,
  87. });
  88. },
  89. /* 数据处理 */
  90. formatData(list = []) {
  91. const { dataSource } = this.data;
  92. list.forEach((item) => {
  93. const { items } = dataSource[item.type];
  94. if (items) items.push(item);
  95. });
  96. return { ...dataSource };
  97. },
  98. /* 分页显示医生列表 */
  99. async onSplitPage() {
  100. let total = 0;
  101. let dataList = [];
  102. let success = true;
  103. const { date, isLastPage } = this.data;
  104. let { date: curDate = "" } = date || {};
  105. if (curDate) {
  106. const reg = new RegExp("/", "gm");
  107. curDate = curDate.replace(reg, "-");
  108. }
  109. const { departmentId, depCode } = this.getQuery();
  110. const params = {
  111. date: curDate,
  112. pageSize: 10,
  113. depId: departmentId,
  114. depCode,
  115. pageIndex: this.pageIndex,
  116. };
  117. if (!isLastPage) {
  118. try {
  119. const { list = [], pagination = {} } = await getDepDoctorList(
  120. params
  121. );
  122. dataList = list;
  123. total = pagination.total || 0;
  124. } catch (e) {
  125. success = false;
  126. }
  127. }
  128. let state = {
  129. loading: false,
  130. };
  131. if (success) {
  132. const { nativeList } = this.data;
  133. const _list = [...nativeList, ...dataList];
  134. state = {
  135. ...state,
  136. nativeList: _list,
  137. isLastPage: _list.length >= total,
  138. dataSource: this.formatData(dataList),
  139. };
  140. }
  141. await this.updateData(state);
  142. },
  143. /* 刷新数据 */
  144. async onRefresh(curDate = "") {
  145. /* 初始化数据 */
  146. this.pageIndex = 1;
  147. await this.updateData({
  148. date: curDate,
  149. loading: true,
  150. nativeList: [],
  151. isLastPage: false,
  152. dataSource: copy(defaultSource),
  153. });
  154. await this.onSplitPage();
  155. },
  156. },
  157. })
  158. );