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