columns.js 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. import * as R from 'ramda'
  2. import { BLOCKED_RESOURCES_MAP } from '@Cloudenv/constants'
  3. import i18n from '@/locales'
  4. import { getCopyWithContentTableColumn } from '@/utils/common/tableColumn'
  5. import store from '@/store'
  6. export const getAccessUrlTableColumn = () => {
  7. return {
  8. field: 'access_url',
  9. title: i18n.t('cloudenv.text_96'),
  10. minWidth: 100,
  11. showOverflow: 'ellipsis',
  12. slots: {
  13. default: ({ row }, h) => {
  14. if (!row.access_url || row.brand === 'Huawei') return '-'
  15. let txt
  16. Object.keys(i18n.t('cloudAccountAccessType')).forEach(k => {
  17. if (row.access_url.indexOf(k) > -1) {
  18. let _k = k
  19. if (row.brand !== 'Aliyun' && k === 'InternationalCloud') {
  20. _k = 'Internation'
  21. }
  22. txt = i18n.t('cloudAccountAccessType')[_k]
  23. }
  24. })
  25. return txt ||
  26. [
  27. <a class="link-color" target="_blank" href={ row.access_url }>{ row.access_url }</a>,
  28. ]
  29. },
  30. },
  31. }
  32. }
  33. export const getBalanceTableColumn = () => {
  34. return {
  35. field: 'balance',
  36. title: i18n.t('cloudenv.text_100'),
  37. minWidth: 70,
  38. showOverflow: 'ellipsis',
  39. formatter: ({ row }) => {
  40. if (R.isNil(row.balance)) {
  41. return '-'
  42. }
  43. return row.balance
  44. },
  45. }
  46. }
  47. export const getLastSyncCostTableColumn = () => {
  48. return {
  49. field: 'last_sync_cost',
  50. title: i18n.t('cloudenv.last_sync_cost'),
  51. minWidth: 70,
  52. showOverflow: 'ellipsis',
  53. formatter: ({ row }) => {
  54. if (R.isNil(row.last_sync_cost)) {
  55. return '-'
  56. }
  57. return row.last_sync_cost
  58. },
  59. }
  60. }
  61. export const getGuestCountTableColumn = () => {
  62. return {
  63. field: 'guest_count',
  64. title: i18n.t('cloudenv.text_99'),
  65. width: 60,
  66. }
  67. }
  68. export const getHostCountTableColumn = () => {
  69. return {
  70. field: 'host_count',
  71. title: i18n.t('cloudenv.text_101'),
  72. minWidth: 70,
  73. }
  74. }
  75. export const getPublicScopeTableColumn = ({
  76. vm,
  77. } = {}) => {
  78. return {
  79. field: 'public_scope',
  80. title: i18n.t('cloudenv.text_282'),
  81. width: 110,
  82. showOverflow: 'title',
  83. hidden: () => {
  84. return !store.getters.l3PermissionEnable && (store.getters.scopeResource && store.getters.scopeResource.domain.includes('cloudaccounts'))
  85. },
  86. slots: {
  87. default: ({ row }, h) => {
  88. if (!row.is_public) return i18n.t('cloudAccountShareDesc.none')
  89. const { share_mode: shareMode, public_scope: publicScope, shared_domains: sharedDomains } = row
  90. if (publicScope === 'domain') {
  91. if (shareMode === 'provider_domain' && sharedDomains && sharedDomains.length > 0) {
  92. return [
  93. <a onClick={() => {
  94. vm.createDialog('CommonDialog', {
  95. hiddenCancel: true,
  96. header: i18n.t('cloudenv.text_282'),
  97. body: () => {
  98. return (
  99. <dialog-table
  100. vxeGridProps={{ showOverflow: 'title' }}
  101. data={ sharedDomains }
  102. columns={
  103. [
  104. getCopyWithContentTableColumn({
  105. field: 'id',
  106. title: 'ID',
  107. minWidth: 140,
  108. }),
  109. getCopyWithContentTableColumn({
  110. field: 'name',
  111. title: i18n.t('cloudenv.text_95'),
  112. }),
  113. ]
  114. } />
  115. )
  116. },
  117. })
  118. }}>{ i18n.t('cloudAccountShareDesc.provider') }</a>,
  119. ]
  120. }
  121. if (shareMode === 'system' && sharedDomains && sharedDomains.length > 0) {
  122. return [
  123. <a onClick={() => {
  124. vm.createDialog('CommonDialog', {
  125. hiddenCancel: true,
  126. header: i18n.t('cloudenv.text_282'),
  127. body: () => {
  128. return (
  129. <dialog-table
  130. vxeGridProps={{ showOverflow: 'title' }}
  131. data={ sharedDomains }
  132. columns={
  133. [
  134. getCopyWithContentTableColumn({
  135. field: 'id',
  136. title: 'ID',
  137. minWidth: 140,
  138. }),
  139. getCopyWithContentTableColumn({
  140. field: 'name',
  141. title: i18n.t('cloudenv.text_95'),
  142. }),
  143. ]
  144. } />
  145. )
  146. },
  147. })
  148. }}>{ i18n.t('cloudAccountShareDesc.account') }</a>,
  149. ]
  150. }
  151. }
  152. if (publicScope === 'system') {
  153. if (shareMode === 'provider_domain') {
  154. return i18n.t('cloudAccountShareDesc.providerAll')
  155. }
  156. if (shareMode === 'system') {
  157. return i18n.t('cloudAccountShareDesc.accountAll')
  158. }
  159. }
  160. return '-'
  161. },
  162. },
  163. }
  164. }
  165. export const getResourceMatchProjectTableColumn = ({ isEdit = false, editCallback } = {}) => {
  166. return {
  167. field: 'resource_tenant',
  168. title: i18n.t('cloudenv.resource_map_type'),
  169. minWidth: 120,
  170. showOverflow: 'title',
  171. slots: {
  172. default: ({ row }, h) => {
  173. const ret = []
  174. const resourceMapType = []
  175. const { auto_create_project, auto_create_project_for_provider, project_mapping, tenant } = row
  176. if (project_mapping) resourceMapType.push('project_mapping')
  177. if (auto_create_project) resourceMapType.push('external_project')
  178. if (auto_create_project_for_provider) resourceMapType.push('cloudprovider')
  179. if (resourceMapType.length) {
  180. let tooltip = ''
  181. if (resourceMapType.length === 1) {
  182. tooltip = i18n.t(`cloudenv.resource_map_type.${resourceMapType[0]}`)
  183. } else if (resourceMapType.length === 2) {
  184. tooltip = i18n.t(`cloudenv.resource_map_type.${resourceMapType[0]}_and_${resourceMapType[1]}`)
  185. } else {
  186. tooltip = i18n.t('cloudenv.resource_map_type.all')
  187. }
  188. if (tenant) {
  189. tooltip = tooltip + '<div>' + (i18n.t('cloudenv.default_project') + ': ' + tenant) + '</div>'
  190. }
  191. ret.push(<list-body-cell-wrap field='text' row={{ text: i18n.t('cloudenv.text_493') }} edit={isEdit} customEdit={!!editCallback} customEditCallback={editCallback}><help-tooltip text={tooltip} class="ml-2 mr-1" /></list-body-cell-wrap>)
  192. if (project_mapping) {
  193. let label = ''
  194. if (row.enable_resource_sync) {
  195. label = i18n.t('cloudenv.resource_project_mapping')
  196. } else if (row.enable_project_sync) {
  197. label = i18n.t('cloudenv.project_project_mapping')
  198. }
  199. ret.push(<list-body-cell-wrap copy edit={isEdit} field='project_mapping' row={row} hideField customEdit={!!editCallback} customEditCallback={editCallback}><span class="text-color-secondary">{label || i18n.t('cloudenv.text_580')}:{project_mapping}</span></list-body-cell-wrap>)
  200. }
  201. } else {
  202. ret.push(<list-body-cell-wrap copy edit={isEdit} field='tenant' row={row} hideField customEdit={!!editCallback} customEditCallback={editCallback}><span>{i18n.t('cloudenv.target_project')}:{tenant}</span></list-body-cell-wrap>)
  203. }
  204. return ret
  205. },
  206. },
  207. formatter: ({ row }) => {
  208. const ret = []
  209. const resourceMapType = []
  210. const { auto_create_project, auto_create_project_for_provider, project_mapping, tenant } = row
  211. if (project_mapping) resourceMapType.push('project_mapping')
  212. if (auto_create_project) resourceMapType.push('external_project')
  213. if (auto_create_project_for_provider) resourceMapType.push('cloudprovider')
  214. if (resourceMapType.length) {
  215. if (project_mapping) {
  216. let label = ''
  217. if (row.enable_resource_sync) {
  218. label = i18n.t('cloudenv.resource_project_mapping')
  219. } else if (row.enable_project_sync) {
  220. label = i18n.t('cloudenv.project_project_mapping')
  221. }
  222. ret.push(`${label || i18n.t('cloudenv.text_580')}:${project_mapping}`)
  223. }
  224. if (tenant) {
  225. ret.push(i18n.t('cloudenv.default_project') + ': ' + tenant)
  226. }
  227. } else {
  228. ret.push(`${i18n.t('cloudenv.target_project')}:${tenant}`)
  229. }
  230. return ret.join(',')
  231. },
  232. }
  233. }
  234. export const getBlockResourceTableColumn = () => {
  235. return {
  236. field: 'skip_sync_resources',
  237. title: i18n.t('cloudenv.block_resources_type'),
  238. minWidth: 120,
  239. showOverflow: 'title',
  240. slots: {
  241. default: ({ row }, h) => {
  242. if (!row.skip_sync_resources) return '-'
  243. const skip_sync_resources = row.skip_sync_resources || []
  244. return skip_sync_resources.map(item => {
  245. return <a-tag>{BLOCKED_RESOURCES_MAP[item]?.label || item }</a-tag>
  246. })
  247. },
  248. },
  249. formatter: ({ row }) => {
  250. const skip_sync_resources = row.skip_sync_resources || []
  251. return skip_sync_resources.map(item => {
  252. return BLOCKED_RESOURCES_MAP[item]?.label || item
  253. })
  254. },
  255. }
  256. }