calendar.vue 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. <template>
  2. <drawer-tabs-container>
  3. <div class="todo-calendar">
  4. <FullCalendar :events="lists" :loading="loadIng>0" @eventClick="clickEvent" lang="zh" @change="changeDateRange"></FullCalendar>
  5. </div>
  6. </drawer-tabs-container>
  7. </template>
  8. <style lang="scss" scoped>
  9. .todo-calendar {
  10. }
  11. </style>
  12. <script>
  13. import DrawerTabsContainer from "../../DrawerTabsContainer";
  14. import FullCalendar from "../../FullCalendar/FullCalendar";
  15. export default {
  16. name: 'TodoCalendar',
  17. components: {FullCalendar, DrawerTabsContainer},
  18. props: {
  19. },
  20. data () {
  21. return {
  22. loadIng: 0,
  23. lists: [],
  24. startdate: '',
  25. enddate: '',
  26. }
  27. },
  28. created() {
  29. },
  30. mounted() {
  31. $A.setOnTaskInfoListener('components/project/todo/calendar',(act, detail) => {
  32. detail = this.formatTaskData(detail);
  33. this.lists.some((task, i) => {
  34. if (task.id == detail.id) {
  35. this.lists.splice(i, 1, detail);
  36. return true;
  37. }
  38. });
  39. //
  40. switch (act) {
  41. case "username": // 负责人
  42. case "delete": // 删除任务
  43. case "archived": // 归档
  44. this.lists.some((task, i) => {
  45. if (task.id == detail.id) {
  46. this.lists.splice(i, 1);
  47. return true;
  48. }
  49. });
  50. break;
  51. case "unarchived": // 取消归档
  52. let has = false;
  53. this.lists.some((task) => {
  54. if (task.id == detail.id) {
  55. return has = true;
  56. }
  57. });
  58. if (!has) {
  59. this.lists.unshift(detail);
  60. }
  61. break;
  62. }
  63. });
  64. },
  65. methods: {
  66. clickEvent(event){
  67. this.taskDetail(event.id);
  68. },
  69. changeDateRange(startdate, enddate){
  70. this.startdate = startdate;
  71. this.enddate = enddate;
  72. this.getLists(1);
  73. },
  74. getLists(page) {
  75. this.lists = [];
  76. this.loadIng++;
  77. $A.aAjax({
  78. url: 'project/task/lists',
  79. data: {
  80. startdate: this.startdate,
  81. enddate: this.enddate,
  82. page: page,
  83. pagesize: 100
  84. },
  85. complete: () => {
  86. this.loadIng--;
  87. },
  88. success: (res) => {
  89. if (res.ret === 1) {
  90. let inLists,
  91. data;
  92. res.data.lists.forEach((temp) => {
  93. data = this.formatTaskData(temp);
  94. inLists = false;
  95. this.lists.some((item, i) => {
  96. if (item.id == data.id) {
  97. this.lists.splice(i, 1, data);
  98. return inLists = true;
  99. }
  100. });
  101. if (!inLists) {
  102. this.lists.push(data);
  103. }
  104. });
  105. if (res.data.hasMorePages === true) {
  106. this.getLists(res.data.currentPage + 1)
  107. }
  108. }
  109. }
  110. });
  111. },
  112. formatTaskData(taskData) {
  113. let title = taskData.title;
  114. let startdate = taskData.startdate || taskData.indate;
  115. let enddate = taskData.enddate || taskData.indate;
  116. if (startdate != enddate) {
  117. let ymd1 = $A.formatDate('Y-m-d', startdate)
  118. let ymd2 = $A.formatDate('Y-m-d', enddate)
  119. let time = ymd1 + "~" + ymd2;
  120. if (ymd1 == ymd2) {
  121. time = $A.formatDate('H:i', startdate) + "~" + $A.formatDate('H:i', enddate);
  122. } else if (ymd1.substring(0, 4) == ymd2.substring(0, 4)) {
  123. time = $A.formatDate('m-d', startdate) + "~" + $A.formatDate('m-d', enddate);
  124. }
  125. title = time + " " + title;
  126. } else {
  127. title = $A.formatDate('H:i', startdate) + " " + title;
  128. }
  129. //
  130. if (taskData.complete) {
  131. title = '<span style="text-decoration:line-through">' + title + '</span>';
  132. }
  133. let color = '#D8F8F2';
  134. if (taskData.level === 1) {
  135. color = 'rgba(248, 14, 21, 0.6)';
  136. }else if (taskData.level === 2) {
  137. color = 'rgba(236, 196, 2, 0.5)';
  138. }else if (taskData.level === 3) {
  139. color = 'rgba(0, 159, 227, 0.7)';
  140. }else if (taskData.level === 4) {
  141. color = 'rgba(121, 170, 28, 0.7)';
  142. }
  143. return {
  144. "id": taskData.id,
  145. "start": $A.formatDate('Y-m-d H:i:s', startdate),
  146. "end": $A.formatDate('Y-m-d H:i:s', enddate),
  147. "title": title,
  148. "color": color,
  149. "avatar": taskData.userimg,
  150. "name": taskData.nickname || taskData.username
  151. };
  152. }
  153. }
  154. }
  155. </script>