calendar.vue 6.5 KB

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