calendar.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  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: 'POST',
  21. data: 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. if (data) {
  39. const { eventDetail, ...schedule } = data
  40. return { events: JSON.parse(eventDetail) || [], ...schedule }
  41. }
  42. return null
  43. })
  44. }
  45. export function addSchedule (data) {
  46. return add({
  47. url: '/content/calendar',
  48. method: 'POST',
  49. data: addOrg(data)
  50. }, tenantRequest)
  51. }
  52. export function deleteSchedule ({ id, name }) {
  53. return del({
  54. url: `/content/calendar/${id}`,
  55. method: 'DELETE'
  56. }, name)
  57. }
  58. export function saveScheduleEvents (schedule, events) {
  59. const { id } = schedule
  60. return messageSend({
  61. url: `/content/calendar/${id}/eventList`,
  62. method: 'POST',
  63. data: events
  64. }, '保存')
  65. }
  66. function checkSchedule (type, events) {
  67. if (!events.length) {
  68. Message({
  69. type: 'warning',
  70. message: '请先添加节目'
  71. })
  72. return false
  73. }
  74. switch (type) {
  75. case ScheduleType.RECUR:
  76. if (events.length < 2) {
  77. Message({
  78. type: 'warning',
  79. message: '请至少添加两个节目'
  80. })
  81. return false
  82. }
  83. break
  84. case ScheduleType.COMPLEX:
  85. if (type === ScheduleType.COMPLEX) {
  86. const now = Date.now()
  87. if (!events.some(({ until }) => !until || new Date(until) > now)) {
  88. Message({
  89. type: 'warning',
  90. message: '无有效节目,请添加节目'
  91. })
  92. return false
  93. }
  94. }
  95. break
  96. default:
  97. Message({
  98. type: 'warning',
  99. message: '不支持的类型'
  100. })
  101. return false
  102. }
  103. return true
  104. }
  105. export function submitSchedule ({ id, type, name }, events) {
  106. return new Promise((resolve, reject) => {
  107. if (events) {
  108. resolve(events)
  109. } else {
  110. send({
  111. url: `/content/programCalendar/${id}`,
  112. method: 'GET'
  113. }).then(({ data }) => {
  114. resolve(JSON.parse(data.eventDetail))
  115. }, reject)
  116. }
  117. }).then(events => {
  118. if (checkSchedule(type, events)) {
  119. return submit({
  120. url: `/content/calendar/${id}/submit`,
  121. method: 'POST'
  122. }, name)
  123. }
  124. return Promise.reject()
  125. })
  126. }
  127. export function resolveSchedule ({ id, name }) {
  128. return resolve({
  129. url: `/content/calendar/${id}/approval`,
  130. method: 'POST',
  131. data: { remark: '' }
  132. }, name)
  133. }
  134. export function rejectSchedule ({ id, name }, remark) {
  135. return reject({
  136. url: `/content/calendar/${id}/reject`,
  137. method: 'POST',
  138. data: { remark }
  139. }, name)
  140. }
  141. export function copySchedule ({ id }, name) {
  142. return messageSend({
  143. url: '/content/calendar/copy',
  144. method: 'POST',
  145. data: addOrg({ id, name })
  146. }, '复制')
  147. }