Detail.vue 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. <template>
  2. <detail
  3. :on-manager="onManager"
  4. :data="data"
  5. resource="cdn_domains"
  6. :base-info="baseInfo"
  7. :extra-info="extraInfo"
  8. statusModule="cdnDomain" />
  9. </template>
  10. <script>
  11. import { mapGetters } from 'vuex'
  12. import i18n from '@/locales'
  13. import {
  14. getUserTagColumn,
  15. } from '@/utils/common/detailColumn'
  16. import {
  17. getPublicScopeTableColumn,
  18. getBrandTableColumn,
  19. getSwitchTableColumn,
  20. } from '@/utils/common/tableColumn'
  21. import WindowsMixin from '@/mixins/windows'
  22. import { getAreaColumn, getServiceTypeColumn, getCnameTableColumn, getDomainTableColumn } from '../mixins/columns'
  23. import { BROWSER_CACHE_TTL } from '../constants'
  24. const emptyTableColumn = {
  25. field: '',
  26. title: ' ',
  27. slots: {
  28. default: () => {
  29. return ' '
  30. },
  31. },
  32. }
  33. const getTypeTableColumn = (item) => {
  34. return {
  35. field: 'type',
  36. title: i18n.t('network.cdn.source_type'),
  37. slots: {
  38. default: () => {
  39. if (item.type) {
  40. return i18n.te(`network.cdn.origin_type.${item.type}`) ? i18n.t(`network.cdn.origin_type.${item.type}`) : item.type
  41. }
  42. return '-'
  43. },
  44. },
  45. }
  46. }
  47. const getOriginTableColumn = (item) => {
  48. return {
  49. field: 'origin',
  50. title: i18n.t('network.cdn.source_origin'),
  51. slots: {
  52. default: () => {
  53. return item.origin || '-'
  54. },
  55. },
  56. }
  57. }
  58. const getProtocolTableColumn = (item) => {
  59. return {
  60. field: 'protocol',
  61. title: i18n.t('network.cdn.source_protocol'),
  62. slots: {
  63. default: () => {
  64. return item.protocol || '-'
  65. },
  66. },
  67. }
  68. }
  69. const getServerNameTableColumn = (item) => {
  70. return {
  71. field: 'server_name',
  72. title: i18n.t('network.cdn.source_server_name'),
  73. slots: {
  74. default: () => {
  75. return item.server_name || '-'
  76. },
  77. },
  78. }
  79. }
  80. export default {
  81. name: 'CdnDetail',
  82. mixins: [WindowsMixin],
  83. props: {
  84. data: {
  85. type: Object,
  86. required: true,
  87. },
  88. onManager: {
  89. type: Function,
  90. required: true,
  91. },
  92. },
  93. data () {
  94. return {
  95. baseInfo: [
  96. getUserTagColumn({ onManager: this.onManager, resource: 'cdn_domains', columns: () => this.columns, tipName: this.$t('dictionary.cdn_domain') }),
  97. getPublicScopeTableColumn({ vm: this, resource: 'cdn_domains' }),
  98. getBrandTableColumn(),
  99. ],
  100. }
  101. },
  102. computed: {
  103. ...mapGetters(['isAdminMode', 'isDomainMode', 'userInfo']),
  104. originItem () {
  105. const originItem = {
  106. title: this.$t('network.cdn.source_station'),
  107. items: [],
  108. }
  109. const { origins = [] } = this.data
  110. if (!origins.length) return []
  111. origins.map(item => {
  112. originItem.items.push(getTypeTableColumn(item))
  113. originItem.items.push(getProtocolTableColumn(item))
  114. originItem.items.push(getOriginTableColumn(item))
  115. originItem.items.push(getServerNameTableColumn(item))
  116. originItem.items.push(emptyTableColumn)
  117. })
  118. return [originItem]
  119. },
  120. extraInfo () {
  121. const ret = [
  122. {
  123. title: this.$t('network.text_308'),
  124. items: [
  125. getAreaColumn(),
  126. getServiceTypeColumn(),
  127. getCnameTableColumn({}),
  128. getDomainTableColumn({}),
  129. ],
  130. },
  131. ...this.originItem,
  132. {
  133. title: this.$t('network.text_38'),
  134. items: [
  135. getSwitchTableColumn({
  136. field: 'disable_delete',
  137. title: this.$t('common.text00076'),
  138. disabled: !this.isOwner(this.data),
  139. change: val => {
  140. this.onManager('update', {
  141. id: this.data.id,
  142. managerArgs: {
  143. data: { disable_delete: val },
  144. },
  145. })
  146. },
  147. }),
  148. ],
  149. },
  150. ]
  151. if (this.data.provider === 'Cloudflare') {
  152. ret[0].items.push({
  153. field: 'ssl_setting',
  154. title: this.$t('network.cdn.ssl_setting'),
  155. slots: {
  156. default: ({ row }) => {
  157. return row.ssl_setting ? this.$t(`network.cdn.ssl_setting.${row.ssl_setting}`) : '-'
  158. },
  159. },
  160. },
  161. {
  162. field: 'https_enabled',
  163. title: this.$t('network.cdn.https_enabled'),
  164. slots: {
  165. default: ({ row }) => {
  166. return row.https?.enabled ? this.$t('network.text_189') : this.$t('network.text_190')
  167. },
  168. },
  169. },
  170. {
  171. field: 'https_rewrites',
  172. title: this.$t('network.cdn.https_rewrites'),
  173. slots: {
  174. default: ({ row }) => {
  175. return row.https_rewrites ? this.$t('network.text_189') : this.$t('network.text_190')
  176. },
  177. },
  178. },
  179. {
  180. field: 'cache_level',
  181. title: this.$t('network.cdn.cache_level'),
  182. slots: {
  183. default: ({ row }) => {
  184. return row.cache_level ? this.$t(`network.cdn.cache_level.${row.cache_level}`) : '-'
  185. },
  186. },
  187. },
  188. {
  189. field: 'browser_cache_ttl',
  190. title: this.$t('network.cdn.browser_cache_ttl'),
  191. slots: {
  192. default: ({ row }) => {
  193. const target = BROWSER_CACHE_TTL.filter(item => item.key === row.browser_cache_ttl)
  194. return target.length ? target[0].label : '-'
  195. },
  196. },
  197. },
  198. {
  199. field: 'dnssec_enabled',
  200. title: this.$t('network.cdn.dnssec_enabled'),
  201. slots: {
  202. default: ({ row }) => {
  203. return row.dnssec_enabled ? this.$t('network.text_189') : this.$t('network.text_190')
  204. },
  205. },
  206. })
  207. }
  208. return ret
  209. },
  210. },
  211. methods: {
  212. isOwner (obj) {
  213. if (this.isAdminMode) return true
  214. if (this.isDomainMode) return obj.domain_id === this.userInfo.projectDomainId
  215. return false
  216. },
  217. },
  218. }
  219. </script>