timeRange.js 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. import {
  2. formatTime
  3. } from "../../utils/getTime.js"
  4. Component({
  5. options: {
  6. addGlobalClass: true
  7. },
  8. properties: {
  9. dateTypes: {
  10. type: Array,
  11. value: ["全部", "本年", "本季", "本月"]
  12. },
  13. dateType: {
  14. type: String,
  15. value: "本年"
  16. },
  17. onChange: {
  18. type: Function,
  19. },
  20. grading: {
  21. type: String,
  22. value: "year-month"
  23. }
  24. },
  25. lifetimes: {
  26. attached: function () {
  27. getApp().globalData.Language.getLanguagePackage(this)
  28. this.setData({
  29. actions: this.data.dateTypes.map(item => {
  30. return {
  31. name: getApp().globalData.Language.getMapText(item),
  32. value: item,
  33. color: item == this.data.dateType ? "#3874F6" : ""
  34. }
  35. }),
  36. "whereType.begdate": formatTime(new Date(), "-").split(' ')[0].slice(0, this.data.grading === "year-month" ? 7 : 10),
  37. })
  38. this.setRange();
  39. }
  40. },
  41. data: {
  42. actionShow: false,
  43. whereType: {
  44. value: "begdate",
  45. enddate: "",
  46. begTimestamp: new Date().getTime(),
  47. endTimestamp: "",
  48. },
  49. begdate: "",
  50. enddate: "",
  51. showTimePicker: false,
  52. },
  53. methods: {
  54. openActionSheet() {
  55. this.setData({
  56. actionShow: true
  57. })
  58. },
  59. confirmTimePicker() {
  60. let whereType = this.data.whereType,
  61. begdate = whereType.begdate,
  62. enddate = whereType.enddate;
  63. if (whereType.enddate == "") {
  64. whereType.value = "enddate";
  65. this.setData({
  66. whereType
  67. })
  68. wx.showToast({
  69. title: getApp().globalData.Language.getMapText("请选择结束时间"),
  70. icon: "none"
  71. })
  72. } else {
  73. this.setData({
  74. showTimePicker: false,
  75. begdate,
  76. enddate,
  77. actions: this.data.actions.map(item => {
  78. item.color = ""
  79. return item
  80. })
  81. })
  82. this.triggerEvent("onChange", {
  83. dateType: '',
  84. isAll: 99,
  85. begdate,
  86. enddate
  87. })
  88. }
  89. },
  90. openTimePicker() {
  91. this.setData({
  92. showTimePicker: true
  93. })
  94. },
  95. cancelWhereType() {
  96. this.setData({
  97. showTimePicker: false
  98. })
  99. },
  100. /* 日期选择器 */
  101. datetimeOnInput(event) {
  102. let type = event.currentTarget.dataset.name,
  103. whereType = this.data.whereType,
  104. grading = this.data.grading || "year-month"; // 获取粒度,默认值为 "year-month"
  105. if (type == "begdate") {
  106. whereType.begTimestamp = event.detail;
  107. whereType.begdate = formatTime(new Date(event.detail), "-").split(' ')[0].slice(0, grading === "year-month" ? 7 : 10);
  108. if (whereType.begTimestamp > whereType.endTimestamp) {
  109. whereType.endTimestamp = whereType.begTimestamp;
  110. whereType.enddate = '';
  111. }
  112. } else {
  113. whereType.endTimestamp = event.detail;
  114. whereType.enddate = formatTime(new Date(event.detail), "-").split(' ')[0].slice(0, grading === "year-month" ? 7 : 10);
  115. }
  116. this.setData({
  117. whereType
  118. });
  119. },
  120. //切换日期类型
  121. changeDateType(e) {
  122. const {
  123. name
  124. } = e.target.dataset;
  125. this.setData({
  126. "whereType.value": name
  127. })
  128. },
  129. /* 周期选择器 */
  130. onSelect(event) {
  131. const {
  132. value
  133. } = event.detail;
  134. if (this.data.dateType == value) return this.onCancel();
  135. this.setData({
  136. dateType: value,
  137. actions: this.data.actions.map(item => {
  138. item.color = item.value == value ? "#3874F6" : "";
  139. item.loading = item.value == value ? true : false;
  140. return item
  141. })
  142. })
  143. this.setRange();
  144. this.triggerEvent("onChange", {
  145. dateType: value,
  146. isAll: this.data.dateType == "全部" ? 1 : 0,
  147. begdate: "",
  148. enddate: ""
  149. })
  150. },
  151. onCancel() {
  152. this.setData({
  153. actionShow: false,
  154. actions: this.data.actions.map(item => {
  155. item.loading = false;
  156. return item
  157. })
  158. })
  159. },
  160. setRange() {
  161. let dateType = this.data.dateType,
  162. grading = this.data.grading, // 获取粒度
  163. whereType = {
  164. value: "begdate",
  165. begdate: formatTime(new Date(), "-").split(' ')[0].slice(0, grading === "year-month" ? 7 : 10),
  166. enddate: "",
  167. begTimestamp: new Date().getTime(),
  168. endTimestamp: "",
  169. },
  170. begdate = "",
  171. enddate = "";
  172. const currentMonth = new Date().getMonth() + 1;
  173. switch (dateType) {
  174. case '本年':
  175. begdate = formatTime(new Date(), "-").split(' ')[0].slice(0, 4) + (grading === "year-month" ? "-01" : "-01-01");
  176. enddate = formatTime(new Date(), "-").split(' ')[0].slice(0, 4) + (grading === "year-month" ? "-12" : "-12-31");
  177. whereType.begdate = begdate;
  178. whereType.enddate = enddate;
  179. break;
  180. case '本月':
  181. begdate = formatTime(new Date(), "-").split(' ')[0].slice(0, grading === "year-month" ? 7 : 10);
  182. enddate = formatTime(new Date(), "-").split(' ')[0].slice(0, grading === "year-month" ? 7 : 10);
  183. whereType.begdate = begdate;
  184. whereType.enddate = enddate;
  185. break;
  186. case '本季':
  187. begdate = formatTime(new Date(), "-").split(' ')[0].slice(0, 4) + "-" + (Math.floor((new Date().getMonth() + 1) / 3) * 3 - 2) + (grading === "year-month" ? "" : "-01");
  188. enddate = formatTime(new Date(), "-").split(' ')[0].slice(0, 4) + "-" + (Math.floor((new Date().getMonth() + 1) / 3) * 3) + (grading === "year-month" ? "" : "-30");
  189. whereType.begdate = begdate;
  190. whereType.enddate = enddate;
  191. break;
  192. case '去年':
  193. begdate = (new Date().getFullYear() - 1) + (grading === "year-month" ? "-01" : "-01-01");
  194. enddate = (new Date().getFullYear() - 1) + (grading === "year-month" ? "-12" : "-12-31");
  195. whereType.begdate = begdate;
  196. whereType.enddate = enddate;
  197. break;
  198. case '上月':
  199. const lastMonth = new Date();
  200. lastMonth.setMonth(lastMonth.getMonth() - 1);
  201. begdate = formatTime(lastMonth, "-").split(' ')[0].slice(0, grading === "year-month" ? 7 : 10);
  202. enddate = formatTime(lastMonth, "-").split(' ')[0].slice(0, grading === "year-month" ? 7 : 10);
  203. whereType.begdate = begdate;
  204. whereType.enddate = enddate;
  205. break;
  206. case '近一年':
  207. begdate = formatTime(new Date(new Date().setFullYear(new Date().getFullYear() - 1)), "-").split(' ')[0].slice(0, grading === "year-month" ? 7 : 10);
  208. enddate = formatTime(new Date(), "-").split(' ')[0].slice(0, grading === "year-month" ? 7 : 10);
  209. whereType.begdate = begdate;
  210. whereType.enddate = enddate;
  211. break;
  212. case '近三个月':
  213. begdate = formatTime(new Date(new Date().setMonth(new Date().getMonth() - 3)), "-").split(' ')[0].slice(0, grading === "year-month" ? 7 : 10);
  214. enddate = formatTime(new Date(), "-").split(' ')[0].slice(0, grading === "year-month" ? 7 : 10);
  215. whereType.begdate = begdate;
  216. whereType.enddate = enddate;
  217. break;
  218. case '近九个月':
  219. begdate = formatTime(new Date(new Date().setMonth(new Date().getMonth() - 9)), "-").split(' ')[0].slice(0, grading === "year-month" ? 7 : 10);
  220. enddate = formatTime(new Date(), "-").split(' ')[0].slice(0, grading === "year-month" ? 7 : 10);
  221. whereType.begdate = begdate;
  222. whereType.enddate = enddate;
  223. break;
  224. case '近六个月':
  225. begdate = formatTime(new Date(new Date().setMonth(new Date().getMonth() - 6)), "-").split(' ')[0].slice(0, grading === "year-month" ? 7 : 10);
  226. enddate = formatTime(new Date(), "-").split(' ')[0].slice(0, grading === "year-month" ? 7 : 10);
  227. whereType.begdate = begdate;
  228. whereType.enddate = enddate;
  229. break;
  230. default:
  231. break;
  232. }
  233. if (dateType != "全部") {
  234. whereType.begTimestamp = new Date(begdate + (grading === "year-month" ? '-01' : '')).getTime();
  235. whereType.endTimestamp = new Date(enddate + (grading === "year-month" ? '-30' : '')).getTime();
  236. }
  237. this.setData({
  238. whereType,
  239. begdate,
  240. enddate
  241. });
  242. }
  243. }
  244. })