index.vue 3.7 KB

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