index.js 33 KB

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