calendar.js 3.4 KB

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