index.js 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972
  1. // import AnsibleTemplate from '@Compute/views/ansible-template'
  2. // import AnsibleTemplateCreate from '@Compute/views/ansible-template/create'
  3. // import AnsiblePlaybook from '@Compute/views/ansible-playbook'
  4. import store from '@/store'
  5. import Layout from '@/layouts/RouterView'
  6. import i18n from '@/locales'
  7. import { hasSetupKey } from '@/utils/auth'
  8. import { isScopedPolicyMenuHidden } from '@/utils/scopedPolicy'
  9. const ScalingGroup = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Compute/views/scaling-group')
  10. const ScalingGroupCreate = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Compute/views/scaling-group/create')
  11. const Schedtag = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Cloudenv/views/schedtag')
  12. const Schedpolicy = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Cloudenv/views/schedpolicy')
  13. const Dynamicschedtag = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Cloudenv/views/dynamicschedtag')
  14. const TapService = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Compute/views/tap-service')
  15. const TapServiceCreate = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Compute/views/tap-service/create')
  16. const HostImage = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Compute/views/host-image')
  17. const VMInstanceCreate = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Compute/views/vminstance/create/index')
  18. const VMInstanceAdjustConfig = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Compute/views/vminstance/adjustConfig')
  19. const Network = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Network/views/network')
  20. const NetworkCreate = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Network/views/network/Create')
  21. const EditAttributes = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Network/views/network/EditAttributes')
  22. const Eip = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Network/views/eip')
  23. const EipCreate = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Network/views/eip/create')
  24. const Host = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Compute/views/host')
  25. const Physicalmachine = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Compute/views/physicalmachine')
  26. const PhysicalmachineAdd = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Compute/views/physicalmachine/add')
  27. const ServerRecovery = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Compute/views/server-recovery')
  28. const DiskRecovery = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Compute/views/disk-recovery')
  29. const ImageRecovery = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Compute/views/image-recovery')
  30. const InstanceGroup = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Compute/views/instance-group')
  31. const SKU = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Compute/views/sku')
  32. const Keypair = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Compute/views/keypair')
  33. const Disk = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Compute/views/disk')
  34. const DiskBackup = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Compute/views/disk-backup')
  35. const GPU = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Compute/views/gpu')
  36. const Secgroup = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Compute/views/secgroup')
  37. const SecgroupCreate = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Compute/views/secgroup/Create')
  38. const Servertemplate = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Compute/views/servertemplate')
  39. const ServertemplateCreateServer = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Compute/views/servertemplate/CreateServer')
  40. const DiskSnapshot = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Compute/views/snapshot')
  41. const InstanceSnapshot = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Compute/views/snapshot-instance')
  42. const SnapshotPolicy = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Compute/views/snapshotpolicy')
  43. const ImageImport = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Compute/views/image/image-import/index')
  44. const ImageImportCe = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Compute/views/image/image-import-ce/index')
  45. const ImageRepos = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@K8S/views/repos')
  46. const AppPackage = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Compute/views/app-package')
  47. const InstanceBackup = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Compute/views/instance-backup')
  48. const DiskCreate = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Compute/views/disk/create/index')
  49. const VMInstance = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Compute/views/vminstance')
  50. const Baremetal = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Compute/views/baremetal')
  51. const BaremetalCreate = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Compute/views/baremetal/create/index')
  52. const Image = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Compute/views/image')
  53. const VMContainerInstance = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Compute/views/vminstance-container')
  54. const VMContainerInstanceCreate = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Compute/views/vminstance-container/create/index')
  55. const VMContainerInstanceAdjustConfig = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Compute/views/vminstance-container/adjustConfig')
  56. export default {
  57. index: 20,
  58. meta: {
  59. label: i18n.t('scope.text_811'),
  60. icon: 'menu-compute',
  61. },
  62. menus: [
  63. {
  64. meta: {
  65. label: i18n.t('compute.text_90'),
  66. },
  67. submenus: [
  68. {
  69. path: '/vminstance',
  70. meta: {
  71. label: i18n.t('compute.text_91'),
  72. permission: 'servers_list',
  73. hidden: () => {
  74. if (isScopedPolicyMenuHidden('sub_hidden_menus.vminstance')) {
  75. return true
  76. }
  77. return !hasSetupKey(['onestack', 'private', 'public', 'vmware'])
  78. },
  79. },
  80. component: Layout,
  81. children: [
  82. {
  83. name: 'VMInstanceIndex',
  84. path: '',
  85. component: VMInstance,
  86. meta: {
  87. keepAlive: true,
  88. keepAliveViews: ['VMInstanceAdjustConfig'],
  89. },
  90. },
  91. {
  92. name: 'VMInstanceCreate',
  93. path: 'create',
  94. component: VMInstanceCreate,
  95. },
  96. {
  97. name: 'VMInstanceAdjustConfig',
  98. path: 'adjust-config',
  99. component: VMInstanceAdjustConfig,
  100. },
  101. ],
  102. },
  103. {
  104. path: '/vminstance-container',
  105. meta: {
  106. label: i18n.t('compute.vminstance-container'),
  107. permission: 'servers_list',
  108. hidden: () => {
  109. if (isScopedPolicyMenuHidden('sub_hidden_menus.vminstance_container')) {
  110. return true
  111. }
  112. return !hasSetupKey(['pod'])
  113. },
  114. },
  115. component: Layout,
  116. children: [
  117. {
  118. name: 'VMContainerInstance',
  119. path: '',
  120. component: VMContainerInstance,
  121. },
  122. {
  123. name: 'VMContainerInstanceCreate',
  124. path: 'create',
  125. component: VMContainerInstanceCreate,
  126. },
  127. {
  128. name: 'VMContainerInstanceAdjustConfig',
  129. path: 'container-adjust-config',
  130. component: VMContainerInstanceAdjustConfig,
  131. },
  132. ],
  133. },
  134. {
  135. path: '/baremetal',
  136. meta: {
  137. label: i18n.t('compute.text_92'),
  138. permission: 'servers_list',
  139. hidden: () => {
  140. if (isScopedPolicyMenuHidden('sub_hidden_menus.baremetal')) {
  141. return true
  142. }
  143. return !hasSetupKey(['baremetal'])
  144. },
  145. },
  146. component: Layout,
  147. children: [
  148. {
  149. name: 'Baremetal',
  150. path: '',
  151. component: Baremetal,
  152. },
  153. {
  154. name: 'BaremetalCreate',
  155. path: 'create',
  156. component: BaremetalCreate,
  157. },
  158. ],
  159. },
  160. {
  161. path: '/instancegroup',
  162. meta: {
  163. label: i18n.t('compute.text_93'),
  164. permission: 'instancegroups_list',
  165. t: 'dictionary.instancegroup',
  166. hidden: () => {
  167. if (isScopedPolicyMenuHidden('sub_hidden_menus.instancegroup')) {
  168. return true
  169. }
  170. return !hasSetupKey(['onestack'])
  171. },
  172. },
  173. component: Layout,
  174. children: [
  175. {
  176. name: 'InstanceGroup',
  177. path: '',
  178. meta: {},
  179. component: InstanceGroup,
  180. },
  181. ],
  182. },
  183. {
  184. path: '/servertemplate',
  185. meta: {
  186. label: i18n.t('compute.text_94'),
  187. permission: 'servertemplates_list',
  188. hidden: () => {
  189. if (isScopedPolicyMenuHidden('sub_hidden_menus.servertemplate')) {
  190. return true
  191. }
  192. return !hasSetupKey(['onestack', 'azure'])
  193. },
  194. },
  195. component: Layout,
  196. children: [
  197. {
  198. name: 'Servertemplate',
  199. path: '',
  200. meta: {},
  201. component: Servertemplate,
  202. },
  203. {
  204. name: 'ServertemplateCreate',
  205. path: 'create',
  206. meta: {},
  207. component: VMInstanceCreate,
  208. },
  209. {
  210. name: 'ServertemplateCreateServer',
  211. path: 'create-server',
  212. meta: {},
  213. component: ServertemplateCreateServer,
  214. },
  215. ],
  216. },
  217. {
  218. path: '/scalinggroup',
  219. meta: {
  220. label: i18n.t('compute.text_95'),
  221. permission: 'scalinggroups_list',
  222. hidden: () => {
  223. if (isScopedPolicyMenuHidden('sub_hidden_menus.scalinggroup')) {
  224. return true
  225. }
  226. return !hasSetupKey(['onestack', 'azure'])
  227. },
  228. },
  229. component: Layout,
  230. children: [
  231. {
  232. name: 'ScalingGroup',
  233. path: '',
  234. meta: {},
  235. component: ScalingGroup,
  236. },
  237. {
  238. name: 'ScalingGroupCreate',
  239. path: 'create',
  240. meta: {},
  241. component: ScalingGroupCreate,
  242. },
  243. ],
  244. },
  245. ],
  246. },
  247. {
  248. meta: {
  249. label: i18n.t('compute.text_96'),
  250. },
  251. submenus: [
  252. {
  253. path: '/image',
  254. meta: {
  255. label: i18n.t('compute.text_97'),
  256. permission: 'images_list',
  257. hidden: () => {
  258. if (isScopedPolicyMenuHidden('sub_hidden_menus.image')) {
  259. return true
  260. }
  261. return !hasSetupKey(['onestack', 'private', 'public', 'baremetal', 'vmware'])
  262. },
  263. },
  264. component: Layout,
  265. children: [
  266. {
  267. name: 'Image',
  268. path: '',
  269. component: Image,
  270. },
  271. {
  272. name: 'ImageImport',
  273. path: 'import',
  274. component: ImageImport,
  275. },
  276. {
  277. name: 'ImageImportCe',
  278. path: 'market',
  279. component: ImageImportCe,
  280. },
  281. ],
  282. },
  283. {
  284. path: '/host_image',
  285. meta: {
  286. label: i18n.t('compute.text_98'),
  287. permission: 'guestimages_list',
  288. hidden: () => {
  289. if (isScopedPolicyMenuHidden('sub_hidden_menus.host_image')) {
  290. return true
  291. }
  292. return !hasSetupKey(['onestack'])
  293. },
  294. },
  295. component: Layout,
  296. children: [
  297. {
  298. name: 'HostImage',
  299. path: '',
  300. component: HostImage,
  301. },
  302. ],
  303. },
  304. {
  305. path: '/app-package',
  306. meta: {
  307. label: i18n.t('dictionary.app_package'),
  308. permission: 'images_list',
  309. hidden: () => {
  310. if (isScopedPolicyMenuHidden('sub_hidden_menus.image')) {
  311. return true
  312. }
  313. return !hasSetupKey(['onestack', 'private', 'public', 'baremetal', 'vmware'])
  314. },
  315. },
  316. component: Layout,
  317. children: [
  318. {
  319. name: 'AppPackage',
  320. path: '',
  321. component: AppPackage,
  322. },
  323. ],
  324. },
  325. {
  326. path: '/image-repos',
  327. meta: {
  328. label: i18n.t('k8s.text_158'),
  329. permission: 'k8s_container_registries_list',
  330. hidden: () => {
  331. if (isScopedPolicyMenuHidden('sub_hidden_menus.k8s_service')) {
  332. return true
  333. }
  334. if (!store.getters.isAdminMode) return true
  335. return !hasSetupKey(['pod', 'k8s'])
  336. },
  337. },
  338. component: Layout,
  339. children: [
  340. {
  341. name: 'ImageRepos',
  342. path: '',
  343. component: ImageRepos,
  344. },
  345. ],
  346. },
  347. ],
  348. },
  349. {
  350. meta: {
  351. label: i18n.t('compute.text_99'),
  352. },
  353. submenus: [
  354. {
  355. path: '/disk',
  356. meta: {
  357. label: i18n.t('compute.text_100'),
  358. permission: 'disks_list',
  359. hidden: () => {
  360. if (isScopedPolicyMenuHidden('sub_hidden_menus.disk')) {
  361. return true
  362. }
  363. return !hasSetupKey(['onestack', 'private', 'public', 'baremetal', 'vmware'])
  364. },
  365. },
  366. component: Layout,
  367. children: [
  368. {
  369. name: 'Disk',
  370. path: '',
  371. component: Disk,
  372. },
  373. {
  374. name: 'DiskCreate',
  375. path: 'create',
  376. component: DiskCreate,
  377. },
  378. ],
  379. },
  380. {
  381. path: '/disk-snapshot',
  382. meta: {
  383. label: i18n.t('compute.text_101'),
  384. t: 'compute.text_101',
  385. permission: 'snapshots_list',
  386. hidden: () => {
  387. if (isScopedPolicyMenuHidden('sub_hidden_menus.disk_snapshot')) {
  388. return true
  389. }
  390. return !hasSetupKey(['onestack', 'private', 'public'])
  391. },
  392. },
  393. component: Layout,
  394. children: [
  395. {
  396. name: 'DiskSnapshot',
  397. path: '',
  398. component: DiskSnapshot,
  399. },
  400. ],
  401. },
  402. {
  403. path: '/instance-snapshot',
  404. meta: {
  405. label: i18n.t('compute.text_102'),
  406. t: 'compute.text_102',
  407. permission: 'instance_snapshots_list',
  408. hidden: () => {
  409. if (isScopedPolicyMenuHidden('sub_hidden_menus.instance_snapshot')) {
  410. return true
  411. }
  412. return !hasSetupKey(['onestack', 'vmware'])
  413. },
  414. },
  415. component: Layout,
  416. children: [
  417. {
  418. name: 'InstanceSnapshot',
  419. path: '',
  420. component: InstanceSnapshot,
  421. },
  422. ],
  423. },
  424. {
  425. path: '/snapshotpolicy',
  426. meta: {
  427. label: i18n.t('compute.text_103'),
  428. t: 'compute.text_103',
  429. permission: 'snapshotpolicy_list',
  430. hidden: () => {
  431. if (isScopedPolicyMenuHidden('sub_hidden_menus.snapshotpolicy')) {
  432. return true
  433. }
  434. return !hasSetupKey(['onestack', 'aliyun', 'qcloud'])
  435. },
  436. },
  437. component: Layout,
  438. children: [
  439. {
  440. name: 'SnapshotPolicy',
  441. path: '',
  442. component: SnapshotPolicy,
  443. },
  444. ],
  445. },
  446. ],
  447. },
  448. {
  449. meta: {
  450. label: i18n.t('common.backup'),
  451. },
  452. submenus: [
  453. {
  454. path: '/disk-backup',
  455. meta: {
  456. label: i18n.t('compute.disk_backup'),
  457. permission: 'diskbackups_list',
  458. hidden: () => {
  459. if (isScopedPolicyMenuHidden('sub_hidden_menus.disk_backup')) {
  460. return true
  461. }
  462. return !hasSetupKey(['onestack'])
  463. },
  464. },
  465. component: Layout,
  466. children: [
  467. {
  468. name: 'DiskBackup',
  469. path: '',
  470. component: DiskBackup,
  471. },
  472. ],
  473. },
  474. {
  475. path: '/instance-backup',
  476. meta: {
  477. label: i18n.t('compute.instance_backup'),
  478. permission: 'instancebackups_list',
  479. hidden: () => {
  480. if (isScopedPolicyMenuHidden('sub_hidden_menus.instance_backup')) {
  481. return true
  482. }
  483. return !hasSetupKey(['onestack'])
  484. },
  485. },
  486. component: Layout,
  487. children: [
  488. {
  489. name: 'InstanceBackup',
  490. path: '',
  491. component: InstanceBackup,
  492. },
  493. ],
  494. },
  495. ],
  496. },
  497. {
  498. meta: {
  499. label: i18n.t('compute.text_104'),
  500. },
  501. submenus: [
  502. {
  503. path: '/secgroup',
  504. meta: {
  505. label: i18n.t('compute.text_105'),
  506. permission: 'secgroups_list',
  507. hidden: () => {
  508. if (isScopedPolicyMenuHidden('sub_hidden_menus.secgroup')) {
  509. return true
  510. }
  511. return !hasSetupKey(['onestack', 'public', 'private'])
  512. },
  513. },
  514. component: Layout,
  515. children: [
  516. {
  517. name: 'Secgroup',
  518. path: '',
  519. component: Secgroup,
  520. },
  521. {
  522. name: 'SecgroupCreate',
  523. path: 'create',
  524. component: SecgroupCreate,
  525. },
  526. ],
  527. },
  528. {
  529. path: '/network2',
  530. meta: {
  531. label: i18n.t('compute.text_106'),
  532. permission: 'networks_list',
  533. hidden: () => {
  534. if (isScopedPolicyMenuHidden('sub_hidden_menus.network2')) {
  535. return true
  536. }
  537. return !hasSetupKey(['onestack', 'public', 'private', 'baremetal', 'vmware'])
  538. },
  539. },
  540. component: Layout,
  541. children: [
  542. {
  543. name: 'Network2',
  544. path: '',
  545. component: Network,
  546. },
  547. {
  548. name: 'NetworkCreate2',
  549. path: 'create',
  550. component: NetworkCreate,
  551. },
  552. {
  553. name: 'NetworkUpdate2',
  554. path: 'edit',
  555. component: EditAttributes,
  556. },
  557. ],
  558. },
  559. {
  560. path: '/eip2',
  561. meta: {
  562. label: i18n.t('compute.text_107'),
  563. permission: 'eips_list',
  564. hidden: () => {
  565. if (isScopedPolicyMenuHidden('sub_hidden_menus.eip2')) {
  566. return true
  567. }
  568. return !hasSetupKey(['onestack', 'public', 'private'])
  569. },
  570. },
  571. component: Layout,
  572. children: [
  573. {
  574. name: 'Eip2',
  575. path: '',
  576. component: Eip,
  577. },
  578. {
  579. name: 'EipCreate2',
  580. path: 'create',
  581. component: EipCreate,
  582. },
  583. ],
  584. },
  585. {
  586. path: '/tap-service',
  587. meta: {
  588. label: i18n.t('dictionary.tap_service'),
  589. permission: 'tapservices_list',
  590. hidden: () => {
  591. if (isScopedPolicyMenuHidden('sub_hidden_menus.tap_service')) {
  592. return true
  593. }
  594. return !(hasSetupKey(['onestack']) && store.getters.isAdminMode)
  595. },
  596. },
  597. component: Layout,
  598. children: [
  599. {
  600. name: 'TapService',
  601. path: '',
  602. component: TapService,
  603. },
  604. {
  605. name: 'TapServiceCreate',
  606. path: 'create',
  607. component: TapServiceCreate,
  608. },
  609. ],
  610. },
  611. ],
  612. },
  613. {
  614. meta: {
  615. label: i18n.t('compute.text_108'),
  616. },
  617. submenus: [
  618. {
  619. path: '/keypair',
  620. meta: {
  621. label: i18n.t('compute.text_108'),
  622. permission: 'keypairs_list',
  623. hidden: () => {
  624. if (isScopedPolicyMenuHidden('sub_hidden_menus.keypair')) {
  625. return true
  626. }
  627. return !hasSetupKey(['onestack', 'public', 'private', 'baremetal', 'vmware'])
  628. },
  629. },
  630. component: Layout,
  631. children: [
  632. {
  633. name: 'Keypair',
  634. path: '',
  635. meta: {},
  636. component: Keypair,
  637. },
  638. ],
  639. },
  640. ],
  641. },
  642. {
  643. meta: {
  644. label: i18n.t('compute.text_109'),
  645. },
  646. submenus: [
  647. {
  648. path: '/sku',
  649. meta: {
  650. label: i18n.t('compute.text_109'),
  651. permission: 'serverskus_list',
  652. hidden: () => {
  653. if (isScopedPolicyMenuHidden('sub_hidden_menus.sku')) {
  654. return true
  655. }
  656. return !hasSetupKey(['onestack', 'private', 'vmware', 'public'])
  657. },
  658. },
  659. component: Layout,
  660. children: [
  661. {
  662. name: 'Sku',
  663. path: '',
  664. meta: {},
  665. component: SKU,
  666. },
  667. ],
  668. },
  669. ],
  670. },
  671. {
  672. meta: {
  673. label: i18n.t('compute.text_110'),
  674. },
  675. submenus: [
  676. {
  677. path: '/host',
  678. meta: {
  679. label: i18n.t('compute.text_111'),
  680. permission: 'hosts_list',
  681. hidden: () => {
  682. if (isScopedPolicyMenuHidden('sub_hidden_menus.host')) {
  683. return true
  684. }
  685. return !hasSetupKey(['onestack', 'openstack', 'dstack', 'zstack', 'vmware'])
  686. },
  687. // hidden: () => {
  688. // const hasBMAgent = hasServices('bmagent')
  689. // const hasHostAgent = hasServices('hostagent')
  690. // if (!hasBMAgent && !hasHostAgent) {
  691. // return true
  692. // }
  693. // return false
  694. // },
  695. },
  696. component: Layout,
  697. children: [
  698. {
  699. name: 'Host',
  700. path: '',
  701. component: Host,
  702. },
  703. ],
  704. },
  705. {
  706. path: '/physicalmachine',
  707. meta: {
  708. label: i18n.t('compute.text_112'),
  709. permission: 'hosts_list',
  710. hidden: () => {
  711. if (isScopedPolicyMenuHidden('sub_hidden_menus.physicalmachine')) {
  712. return true
  713. }
  714. return !hasSetupKey(['baremetal'])
  715. },
  716. // hidden: () => {
  717. // const hasBMAgent = hasServices('bmagent')
  718. // if (!hasBMAgent) {
  719. // return true
  720. // }
  721. // return false
  722. // },
  723. },
  724. component: Layout,
  725. children: [
  726. {
  727. name: 'Physicalmachine',
  728. path: '',
  729. component: Physicalmachine,
  730. },
  731. {
  732. name: 'PhysicalmachineAdd',
  733. path: 'add',
  734. component: PhysicalmachineAdd,
  735. },
  736. ],
  737. },
  738. {
  739. path: '/gpu',
  740. meta: {
  741. label: i18n.t('compute.text_113'),
  742. permission: 'isolated_devices_list',
  743. hidden: () => {
  744. if (isScopedPolicyMenuHidden('sub_hidden_menus.gpu')) {
  745. return true
  746. }
  747. if (!(store.getters.isAdminMode || store.getters.isDomainMode)) {
  748. return true
  749. }
  750. return !hasSetupKey(['onestack'])
  751. },
  752. // hidden: () => {
  753. // const hasBMAgent = hasServices('bmagent')
  754. // const hasHostAgent = hasServices('hostagent')
  755. // if (!hasBMAgent && !hasHostAgent) {
  756. // return true
  757. // }
  758. // return false
  759. // },
  760. },
  761. component: Layout,
  762. children: [
  763. {
  764. name: 'GPU',
  765. path: '',
  766. component: GPU,
  767. },
  768. ],
  769. },
  770. ],
  771. },
  772. // {
  773. // meta: {
  774. // label: '运维工具',
  775. // },
  776. // submenus: [
  777. // {
  778. // path: '/ansibletemplate',
  779. // meta: {
  780. // label: '模板',
  781. // permission: 'ansible_devtool_templates_list',
  782. // },
  783. // component: Layout,
  784. // children: [
  785. // {
  786. // name: 'AnsibleTemplate',
  787. // path: '',
  788. // component: AnsibleTemplate,
  789. // },
  790. // {
  791. // name: 'AnsibleTemplateCreate',
  792. // path: 'create',
  793. // component: AnsibleTemplateCreate,
  794. // },
  795. // ],
  796. // },
  797. // {
  798. // path: '/ansibleplaybook',
  799. // meta: {
  800. // label: '任务',
  801. // permission: 'ansible_ansibleplaybooks_list',
  802. // },
  803. // component: Layout,
  804. // children: [
  805. // {
  806. // name: 'AnsiblePlaybook',
  807. // path: '',
  808. // component: AnsiblePlaybook,
  809. // },
  810. // ],
  811. // },
  812. // ],
  813. // },
  814. {
  815. meta: {
  816. label: i18n.t('cloudenv.text_17'),
  817. },
  818. submenus: [
  819. {
  820. path: '/schedtag',
  821. meta: {
  822. label: i18n.t('dictionary.schedtag'),
  823. permission: 'schedtags_list',
  824. t: 'dictionary.schedtag',
  825. hidden: () => {
  826. if (isScopedPolicyMenuHidden('sub_hidden_menus.schedtag')) {
  827. return true
  828. }
  829. return !hasSetupKey(['onestack', 'openstack', 'dstack', 'zstack', 'vmware', 'public', 'private', 'baremetal'])
  830. },
  831. },
  832. component: Layout,
  833. children: [
  834. {
  835. name: 'Schedtag',
  836. path: '',
  837. component: Schedtag,
  838. },
  839. ],
  840. },
  841. {
  842. path: '/schedpolicy',
  843. meta: {
  844. label: i18n.t('cloudenv.text_19'),
  845. permission: 'schedpolicies_list',
  846. hidden: () => {
  847. if (isScopedPolicyMenuHidden('sub_hidden_menus.schedpolicy')) {
  848. return true
  849. }
  850. return !hasSetupKey(['onestack', 'openstack', 'dstack', 'zstack', 'vmware', 'public', 'private', 'baremetal'])
  851. },
  852. },
  853. component: Layout,
  854. children: [
  855. {
  856. name: 'Schedpolicy',
  857. path: '',
  858. component: Schedpolicy,
  859. },
  860. ],
  861. },
  862. {
  863. path: '/dynamicschedtag',
  864. meta: {
  865. label: i18n.t('cloudenv.text_20'),
  866. permission: 'dynamicschedtags_list',
  867. hidden: () => {
  868. if (isScopedPolicyMenuHidden('sub_hidden_menus.dynamicschedtag')) {
  869. return true
  870. }
  871. return !hasSetupKey(['onestack', 'openstack', 'dstack', 'zstack', 'vmware', 'public', 'private', 'baremetal'])
  872. },
  873. },
  874. component: Layout,
  875. children: [
  876. {
  877. name: 'Dynamicschedtag',
  878. path: '',
  879. component: Dynamicschedtag,
  880. },
  881. ],
  882. },
  883. ],
  884. },
  885. {
  886. meta: {
  887. label: i18n.t('compute.text_114'),
  888. permission: 'recyclebins_list',
  889. },
  890. submenus: [
  891. {
  892. path: '/serverrecovery',
  893. meta: {
  894. label: i18n.t('compute.text_90'),
  895. permission: 'servers_list',
  896. hidden: () => {
  897. if (isScopedPolicyMenuHidden('sub_hidden_menus.serverrecovery')) {
  898. return true
  899. }
  900. if (!store.state.common.computeV2GlobalConfig.enable_pending_delete) {
  901. return true
  902. }
  903. return !hasSetupKey(['onestack', 'public', 'private', 'vmware', 'baremetal'])
  904. },
  905. },
  906. component: Layout,
  907. children: [
  908. {
  909. name: 'ServerRecovery',
  910. path: '',
  911. component: ServerRecovery,
  912. },
  913. ],
  914. },
  915. {
  916. path: '/diskrecovery',
  917. meta: {
  918. label: i18n.t('compute.text_100'),
  919. permission: 'disks_list',
  920. hidden: () => {
  921. if (isScopedPolicyMenuHidden('sub_hidden_menus.diskrecovery')) {
  922. return true
  923. }
  924. if (!store.state.common.computeV2GlobalConfig.enable_pending_delete) {
  925. return true
  926. }
  927. return !hasSetupKey(['onestack', 'public', 'private', 'vmware', 'baremetal'])
  928. },
  929. },
  930. component: Layout,
  931. children: [
  932. {
  933. name: 'DiskRecovery',
  934. path: '',
  935. component: DiskRecovery,
  936. hidden: () => !hasSetupKey(['onestack', 'public', 'private', 'vmware']),
  937. },
  938. ],
  939. },
  940. {
  941. path: '/imagerecovery',
  942. meta: {
  943. label: i18n.t('compute.text_96'),
  944. permission: 'images_list',
  945. hidden: () => {
  946. if (isScopedPolicyMenuHidden('sub_hidden_menus.imagerecovery')) {
  947. return true
  948. }
  949. if (!store.state.common.imageGlobalConfig.enable_pending_delete) {
  950. return true
  951. }
  952. return !hasSetupKey(['onestack', 'public', 'private', 'vmware', 'baremetal'])
  953. },
  954. },
  955. component: Layout,
  956. children: [
  957. {
  958. name: 'ImageRecovery',
  959. path: '',
  960. component: ImageRecovery,
  961. },
  962. ],
  963. },
  964. ],
  965. },
  966. ],
  967. }