calendar.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. import { Message } from 'element-ui'
  2. import request, { tenantRequest } from '@/utils/request'
  3. import {
  4. add,
  5. del,
  6. submit,
  7. resolve,
  8. reject,
  9. send,
  10. messageSend,
  11. addStatusScope,
  12. addOrg,
  13. canDel
  14. } from './base'
  15. import {
  16. State,
  17. ScheduleType
  18. } from '@/constant'
  19. export function getSchedules (query) {
  20. const { pageNum: pageIndex, pageSize, ...params } = query
  21. return tenantRequest({
  22. url: '/content/calendar/page',
  23. method: 'POST',
  24. data: addStatusScope({
  25. pageIndex, pageSize,
  26. ...params
  27. })
  28. }).then(({ data, totalCount }) => {
  29. data.forEach(schedule => {
  30. schedule.del = canDel(schedule)
  31. })
  32. return { data, totalCount }
  33. })
  34. }
  35. export function getSchedule (id, options) {
  36. return request({
  37. url: `/content/programCalendar/${id}`,
  38. method: 'GET',
  39. ...options
  40. }).then(({ data }) => {
  41. if (data) {
  42. const { eventDetail, ...schedule } = data
  43. return { events: JSON.parse(eventDetail) || [], ...schedule }
  44. }
  45. return null
  46. })
  47. }
  48. export function addSchedule (data) {
  49. return add({
  50. url: '/content/calendar',
  51. method: 'POST',
  52. data: addOrg(data)
  53. }, tenantRequest)
  54. }
  55. export function deleteSchedule ({ id, name }) {
  56. return del({
  57. url: `/content/calendar/${id}`,
  58. method: 'DELETE'
  59. }, name)
  60. }
  61. export function saveScheduleEvents (schedule, events) {
  62. const { id } = schedule
  63. return messageSend({
  64. url: `/content/calendar/${id}/eventList`,
  65. method: 'POST',
  66. data: {
  67. eventAddCmdList: events,
  68. status: events.length ? State.READY : State.DRAFT
  69. }
  70. }, '保存')
  71. }
  72. function checkSchedule (type, events) {
  73. if (!events.length) {
  74. Message({
  75. type: 'warning',
  76. message: '请先添加节目'
  77. })
  78. return false
  79. }
  80. switch (type) {
  81. case ScheduleType.RECUR:
  82. if (events.length < 2) {
  83. Message({
  84. type: 'warning',
  85. message: '请至少添加两个节目'
  86. })
  87. return false
  88. }
  89. break
  90. case ScheduleType.COMPLEX:
  91. if (type === ScheduleType.COMPLEX) {
  92. const now = Date.now()
  93. if (!events.some(({ until }) => !until || new Date(until) > now)) {
  94. Message({
  95. type: 'warning',
  96. message: '无有效节目,请添加节目'
  97. })
  98. return false
  99. }
  100. }
  101. break
  102. default:
  103. Message({
  104. type: 'warning',
  105. message: '不支持的类型'
  106. })
  107. return false
  108. }
  109. return true
  110. }
  111. export function submitSchedule ({ id, type, name }, events) {
  112. return new Promise((resolve, reject) => {
  113. if (events) {
  114. resolve(events)
  115. } else {
  116. send({
  117. url: `/content/programCalendar/${id}`,
  118. method: 'GET'
  119. }).then(({ data }) => {
  120. resolve(JSON.parse(data.eventDetail))
  121. }, reject)
  122. }
  123. }).then(events => {
  124. if (checkSchedule(type, events)) {
  125. return submit({
  126. url: `/content/calendar/${id}/submit`,
  127. method: 'POST'
  128. }, name)
  129. }
  130. return Promise.reject()
  131. })
  132. }
  133. export function resolveSchedule ({ id, name }) {
  134. return resolve({
  135. url: `/content/calendar/${id}/approval`,
  136. method: 'POST',
  137. data: { remark: '' }
  138. }, name)
  139. }
  140. export function rejectSchedule ({ id, name }, remark) {
  141. return reject({
  142. url: `/content/calendar/${id}/reject`,
  143. method: 'POST',
  144. data: { remark }
  145. }, name)
  146. }
  147. export function copySchedule ({ id }, name) {
  148. return messageSend({
  149. url: '/content/calendar/copy',
  150. method: 'POST',
  151. data: addOrg({ id, name })
  152. }, '复制')
  153. }