singleActions.js 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. import { mapGetters } from 'vuex'
  2. import { changeToArr } from '@/utils/utils'
  3. import { getEnabledSwitchActions } from '@/utils/common/tableActions'
  4. import expectStatus from '@/constants/expectStatus'
  5. import { typeClouds } from '@/utils/common/hypervisor'
  6. import i18n from '@/locales'
  7. const steadyStatus = Object.values(expectStatus.cloudaccount).flat()
  8. const brandMap = typeClouds.getBrand()
  9. export default {
  10. computed: {
  11. ...mapGetters(['l3PermissionEnable']),
  12. },
  13. created () {
  14. const ownerDomain = obj => this.$store.getters.isAdminMode || obj.domain_id === this.$store.getters.userInfo.projectDomainId
  15. const isAccountDomain = data => data.share_mode === 'account_domain'
  16. this.singleActions = [
  17. {
  18. label: this.$t('cloudenv.text_294', [this.$t('dictionary.project')]),
  19. permission: 'cloudproviders_perform_change_project',
  20. action: obj => {
  21. if (isAccountDomain(this.data)) {
  22. this.createDialog('ChangeProjectDialog', {
  23. name: this.$t('dictionary.cloudprovider'),
  24. data: [obj],
  25. columns: this.columns,
  26. onManager: this.onManager,
  27. projectLabel: this.$t('cloudenv.text_294', [this.$t('dictionary.project')]),
  28. formItemLayout: {
  29. wrapperCol: {
  30. span: 19,
  31. },
  32. labelCol: {
  33. span: 5,
  34. },
  35. },
  36. })
  37. } else {
  38. this.createDialog('ChangeOwenrDialog', {
  39. name: this.$t('dictionary.cloudprovider'),
  40. data: [obj],
  41. columns: this.columns,
  42. onManager: this.onManager,
  43. action: 'change-project',
  44. projectLabel: this.$t('cloudenv.text_294', [this.$t('dictionary.project')]),
  45. alertMessage: this.$t('cloudenv.text_336', [this.$t('dictionary.project'), this.$t('dictionary.domain'), this.$t('dictionary.domain')]),
  46. formItemLayout: {
  47. wrapperCol: {
  48. span: 19,
  49. },
  50. labelCol: {
  51. span: 5,
  52. },
  53. },
  54. resource: 'cloudproviders',
  55. })
  56. }
  57. },
  58. meta: obj => {
  59. let tooltip
  60. if (!obj.enabled) tooltip = i18n.t('cloudenv.text_357')
  61. return {
  62. validate: obj.enabled && ownerDomain(obj),
  63. tooltip,
  64. }
  65. },
  66. },
  67. {
  68. label: i18n.t('common.sync_resource'),
  69. permission: 'cloudproviders_perform_sync',
  70. action: obj => {
  71. this.createDialog('FullSyncResourceDialog', {
  72. title: this.$t('common.sync_resource'),
  73. name: this.$t('common_711'),
  74. action: this.$t('common.sync_resource'),
  75. steadyStatus: {
  76. status: steadyStatus,
  77. sync_status: ['idle'],
  78. },
  79. data: [obj],
  80. columns: this.columns,
  81. onManager: this.onManager,
  82. callback: () => {
  83. // 订阅同步后,云账号也要同步
  84. this.cloudaccountListRefresh && this.cloudaccountListRefresh()
  85. },
  86. })
  87. },
  88. meta: obj => {
  89. let tooltip
  90. let validate = true
  91. if (!ownerDomain(obj)) {
  92. tooltip = i18n.t('cloudenv.text_358')
  93. validate = false
  94. }
  95. if (!obj.enabled) {
  96. tooltip = i18n.t('cloudenv.text_357')
  97. validate = false
  98. }
  99. if (obj.sync_status !== 'idle') {
  100. tooltip = i18n.t('cloudenv.text_313')
  101. validate = false
  102. }
  103. return {
  104. tooltip,
  105. validate,
  106. }
  107. },
  108. },
  109. {
  110. label: i18n.t('cloudenv.text_311'),
  111. actions: obj => {
  112. return [
  113. {
  114. label: this.$t('cloudenv.set_project_mapping'),
  115. permission: 'cloudproviders_perform_project_mapping',
  116. action: () => {
  117. this.createDialog('CloudproviderSetPojectmappingDialog', {
  118. data: [obj],
  119. columns: this.columns,
  120. onManager: this.onManager,
  121. })
  122. },
  123. },
  124. ...getEnabledSwitchActions(this, obj, ['cloudproviders_perform_enable', 'cloudproviders_perform_disable'], {
  125. actions: [
  126. async (obj) => {
  127. await this.onManager('batchPerformAction', {
  128. id: [obj.id],
  129. managerArgs: {
  130. action: 'enable',
  131. },
  132. })
  133. },
  134. async (obj) => {
  135. await this.onManager('batchPerformAction', {
  136. id: [obj.id],
  137. managerArgs: {
  138. action: 'disable',
  139. },
  140. })
  141. },
  142. ],
  143. metas: [
  144. () => {
  145. return {
  146. validate: !obj.enabled && ownerDomain(obj),
  147. }
  148. },
  149. () => {
  150. return {
  151. validate: obj.enabled && ownerDomain(obj),
  152. }
  153. },
  154. ],
  155. }),
  156. {
  157. label: i18n.t('cloudenv.text_108'),
  158. permission: 'cloudproviders_delete',
  159. action: () => {
  160. this.createDialog('DeleteResDialog', {
  161. vm: this,
  162. data: [obj],
  163. columns: this.columns,
  164. title: i18n.t('cloudenv.text_108'),
  165. onManager: this.onManager,
  166. name: this.$t('cloudenv.text_318'),
  167. alert: i18n.t('cloudenv.cloudprovider.delete_tip'),
  168. })
  169. },
  170. meta: () => {
  171. let tooltip
  172. let validate = obj.can_delete
  173. if (obj.sync_status === 'syncing') {
  174. tooltip = i18n.t('cloudenv.cloudprovider.sync_delete')
  175. validate = false
  176. }
  177. if (obj.enabled) {
  178. tooltip = i18n.t('network.text_310')
  179. validate = false
  180. }
  181. if (!ownerDomain(obj)) {
  182. tooltip = i18n.t('cloudenv.text_358')
  183. validate = false
  184. }
  185. if (obj.brand !== 'Azure') {
  186. const opt = brandMap[obj.brand]
  187. const brand = (opt && opt.label) || obj.brand
  188. tooltip = i18n.t('cloudenv.text_605', [brand])
  189. validate = false
  190. }
  191. return {
  192. tooltip,
  193. validate,
  194. }
  195. },
  196. },
  197. ]
  198. },
  199. },
  200. ]
  201. },
  202. methods: {
  203. syncPolicy (item, ownerDomain) {
  204. let tooltip
  205. const items = changeToArr(item)
  206. if (!items.length) return { validate: false }
  207. const enabledValid = items.every(obj => {
  208. if (!obj.enabled) {
  209. tooltip = i18n.t('cloudenv.text_312')
  210. return false
  211. }
  212. return true
  213. })
  214. const autoSyncValid = items.every(obj => {
  215. if (obj.enable_auto_sync && obj.sync_status !== 'idle') {
  216. tooltip = i18n.t('cloudenv.text_313')
  217. return false
  218. }
  219. return true
  220. })
  221. return {
  222. validate: enabledValid && autoSyncValid && ownerDomain,
  223. tooltip,
  224. }
  225. },
  226. setAutoSyncPolicy (item, ownerDomain) {
  227. let tooltip
  228. const items = changeToArr(item)
  229. if (!items.length) return { validate: false }
  230. const enabledValid = items.every(obj => {
  231. if (!obj.enabled) {
  232. tooltip = i18n.t('cloudenv.text_312')
  233. return false
  234. }
  235. return true
  236. })
  237. return {
  238. validate: enabledValid && ownerDomain,
  239. tooltip,
  240. }
  241. },
  242. },
  243. }