index.vue 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. <template>
  2. <wrapper
  3. fill
  4. margin
  5. background
  6. >
  7. <el-tabs
  8. v-model="active"
  9. class="c-tabs"
  10. >
  11. <el-tab-pane
  12. label="媒资审核"
  13. name="ReviewAsset"
  14. />
  15. <el-tab-pane
  16. label="节目审核"
  17. name="ReviewProgram"
  18. />
  19. <el-tab-pane
  20. label="轮播审核"
  21. name="ReviewProgramRecur"
  22. />
  23. <el-tab-pane
  24. label="排期审核"
  25. name="ReviewSchedule"
  26. />
  27. <el-tab-pane
  28. label="发布审核"
  29. name="ReviewPublish"
  30. />
  31. </el-tabs>
  32. <component
  33. :is="active"
  34. ref="component"
  35. @reject="onReject"
  36. />
  37. <confirm-dialog
  38. ref="rejectDialog"
  39. title="驳回"
  40. @confirm="onConfirmReject"
  41. >
  42. <div class="c-grid-form u-flex-self--center">
  43. <span class="c-grid-form__label">审核意见:</span>
  44. <el-select
  45. v-model="review.type"
  46. placeholder="请选择"
  47. >
  48. <el-option
  49. v-for="option in reviewOptions"
  50. :key="option.label"
  51. :label="option.label"
  52. :value="option.value"
  53. />
  54. </el-select>
  55. <template v-if="review.type === 'reject'">
  56. <span class="c-grid-form__label required">原因:</span>
  57. <el-input
  58. v-model.trim="review.reason"
  59. maxlength="50"
  60. show-word-limit
  61. />
  62. </template>
  63. </div>
  64. </confirm-dialog>
  65. </wrapper>
  66. </template>
  67. <script>
  68. import { rejectAsset } from '@/api/asset'
  69. import { rejectProgram } from '@/api/program'
  70. import { rejectSchedule } from '@/api/calendar'
  71. import { rejectPublish } from '@/api/publish'
  72. import { cancelRequest } from '@/utils/request'
  73. import ReviewAsset from './components/ReviewAsset'
  74. import ReviewProgram from './components/ReviewProgram'
  75. import ReviewProgramRecur from './components/ReviewProgramRecur'
  76. import ReviewSchedule from './components/ReviewSchedule'
  77. import ReviewPublish from './components/ReviewPublish'
  78. export default {
  79. name: 'Review',
  80. components: {
  81. ReviewAsset,
  82. ReviewProgram,
  83. ReviewProgramRecur,
  84. ReviewSchedule,
  85. ReviewPublish
  86. },
  87. data () {
  88. return {
  89. active: 'ReviewAsset',
  90. reviewOptions: [
  91. { value: 'reject', label: '驳回' },
  92. { value: '图文不符' },
  93. { value: '内容不合规' }
  94. ],
  95. review: {
  96. type: '',
  97. reason: ''
  98. }
  99. }
  100. },
  101. computed: {
  102. reject () {
  103. switch (this.active) {
  104. case 'asset':
  105. return rejectAsset
  106. case 'program':
  107. return rejectProgram
  108. case 'recur':
  109. case 'schedule':
  110. return rejectSchedule
  111. case 'release':
  112. return rejectPublish
  113. default:
  114. return Promise.reject
  115. }
  116. }
  117. },
  118. watch: {
  119. active () {
  120. cancelRequest()
  121. }
  122. },
  123. methods: {
  124. onReject (item) {
  125. this.$item = item
  126. this.review = {
  127. type: 'reject',
  128. reason: ''
  129. }
  130. this.$refs.rejectDialog.show()
  131. },
  132. onConfirmReject (done) {
  133. const reason = this.review.type === 'reject' ? this.review.reason : this.review.type
  134. if (!reason) {
  135. this.$message({
  136. type: 'warning',
  137. message: '请选择或填写驳回原因'
  138. })
  139. return
  140. }
  141. this.reject(this.$item, reason).then(() => {
  142. this.$refs.component.refresh()
  143. done()
  144. })
  145. }
  146. }
  147. }
  148. </script>
  149. <style lang="scss" scoped>
  150. </style>