Detail.vue 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. <template>
  2. <detail
  3. :data="data"
  4. :onManager="onManager"
  5. :base-info="baseInfo"
  6. :extra-info="extraInfo"
  7. status-module="waf" />
  8. </template>
  9. <script>
  10. import _ from 'lodash'
  11. import i18n from '@/locales'
  12. import WindowsMixin from '@/mixins/windows'
  13. import {
  14. getBrandTableColumn,
  15. getRegionTableColumn,
  16. } from '@/utils/common/tableColumn'
  17. import {
  18. getUserTagColumn,
  19. getExtTagColumn,
  20. } from '@/utils/common/detailColumn'
  21. export default {
  22. name: 'WafInstanceDetail',
  23. mixins: [WindowsMixin],
  24. props: {
  25. data: {
  26. type: Object,
  27. required: true,
  28. },
  29. onManager: {
  30. type: Function,
  31. required: true,
  32. },
  33. },
  34. data () {
  35. return {
  36. baseInfo: [
  37. getUserTagColumn({ onManager: this.onManager, resource: 'waf_instance', columns: () => this.columns, tipName: this.$t('network.waf') }),
  38. getExtTagColumn({ onManager: this.onManager, resource: 'waf_instance', columns: () => this.columns, tipName: this.$t('network.waf') }),
  39. {
  40. field: 'type',
  41. title: i18n.t('network.waf.type'),
  42. slots: {
  43. default: ({ row }) => {
  44. const ret = []
  45. const type = this.$getI18n(`network.waf.type.${row.type}`, row.type)
  46. ret.push(<div>{type}</div>)
  47. if (row.brand === 'Qcloud') {
  48. ret.push(<list-body-cell-wrap hide-field copy field="cname" row={row}>
  49. <span class='text-weak'>{row.cname}</span>
  50. </list-body-cell-wrap>)
  51. }
  52. return ret
  53. },
  54. },
  55. },
  56. {
  57. field: 'action',
  58. title: i18n.t('network.waf.action_default'),
  59. formatter: ({ row }) => {
  60. const action = _.get(row, ['action', 'action']) || _.get(this.data, 'default_action.action')
  61. if (action) return i18n.t(`network.waf.rule_action_${action}`)
  62. return '-'
  63. },
  64. },
  65. getBrandTableColumn(),
  66. getRegionTableColumn(),
  67. {
  68. title: i18n.t('network.text_196'),
  69. field: 'account',
  70. slots: {
  71. default: ({ row }) => {
  72. return <list-body-cell-wrap hide-field copy field={'account'} row={row}>
  73. <side-page-trigger permission='cloudaccounts_get' name='CloudaccountSidePage' id={row.account_id} vm={this}>{ row.account }</side-page-trigger>
  74. </list-body-cell-wrap>
  75. },
  76. },
  77. },
  78. {
  79. title: i18n.t('network.waf.manager'),
  80. field: 'manager',
  81. slots: {
  82. default: ({ row }) => {
  83. return <list-body-cell-wrap hide-field copy field={'manager'} row={row}>
  84. <side-page-trigger permission='cloudproviders_get' name='CloudproviderSidePage' id={row.manager_id} vm={this}>{ row.account }</side-page-trigger>
  85. </list-body-cell-wrap>
  86. },
  87. },
  88. },
  89. ],
  90. extraInfo: [
  91. {
  92. title: this.$t('network.domain_info'),
  93. items: [
  94. {
  95. field: 'port',
  96. title: this.$t('network.protocol_port'),
  97. slots: {
  98. default: ({ row }) => {
  99. const ret = []
  100. if (row.http_ports && row.http_ports.length) {
  101. ret.push(<div class="mb-2"><a-tag color='blue'>HTTP: { row.http_ports.join('、') }</a-tag></div>)
  102. }
  103. if (row.https_ports && row.https_ports.length) {
  104. ret.push(<div><a-tag color='blue'>HTTPS: { row.https_ports.join('、') }</a-tag></div>)
  105. }
  106. return ret.length ? ret : '-'
  107. },
  108. },
  109. },
  110. {
  111. field: 'source_ips',
  112. title: this.$t('network.source_ips'),
  113. slots: {
  114. default: ({ row }) => {
  115. if (row.source_ips && row.source_ips.length) {
  116. const ret = []
  117. row.source_ips.map(item => {
  118. ret.push(<list-body-cell-wrap hide-field copy field="ip" row={{ ip: item }}>
  119. <span>{item}</span>
  120. </list-body-cell-wrap>)
  121. })
  122. return ret
  123. }
  124. return '-'
  125. },
  126. },
  127. },
  128. {
  129. field: 'upstream_scheme',
  130. title: this.$t('network.upstream_scheme'),
  131. formatter: ({ row }) => {
  132. return row.upstream_scheme || '-'
  133. },
  134. },
  135. {
  136. field: 'upstream_port',
  137. title: this.$t('network.upstream_port'),
  138. formatter: ({ row }) => {
  139. return row.upstream_port || '-'
  140. },
  141. },
  142. {
  143. field: 'cc_list',
  144. title: this.$t('network.waf.source_site_address'),
  145. slots: {
  146. default: ({ row }) => {
  147. if (row.cc_list && row.cc_list.length) {
  148. const ret = []
  149. row.cc_list.map(item => {
  150. ret.push(<list-body-cell-wrap hide-field copy field="ip" row={{ ip: item }}>
  151. <span>{item}</span>
  152. </list-body-cell-wrap>)
  153. })
  154. return ret
  155. }
  156. return '-'
  157. },
  158. },
  159. },
  160. {
  161. field: 'cert_name',
  162. title: this.$t('network.text_317'),
  163. formatter: ({ row }) => {
  164. return row.cert_name || '-'
  165. },
  166. },
  167. {
  168. field: 'cert_id',
  169. title: this.$t('network.cert_id'),
  170. formatter: ({ row }) => {
  171. return row.cert_id || '-'
  172. },
  173. },
  174. ],
  175. },
  176. ],
  177. }
  178. },
  179. computed: {
  180. },
  181. }
  182. </script>