index.js 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815
  1. // import FlexNetwork from '@Network/views/flex-network'
  2. // import ReservedIpList from '@Network/views/reserved-ip'
  3. // import DNS from '@Network/views/dns'
  4. // import LoadbalancerclusterList from '@Network/views/ssh-service'
  5. import Layout from '@/layouts/RouterView'
  6. import { hasSetupKey } from '@/utils/auth'
  7. import i18n from '@/locales'
  8. import store from '@/store'
  9. import { isScopedPolicyMenuHidden } from '@/utils/scopedPolicy'
  10. const AgentList = () => import(/* webpackChunkName: "network" */ /* webpackPrefetch: true */ '@Network/views/agent')
  11. const AgentForm = () => import(/* webpackChunkName: "network" */ /* webpackPrefetch: true */ '@Network/views/agent/form')
  12. const Cloudregion = () => import(/* webpackChunkName: "network" */ /* webpackPrefetch: true */ '@Cloudenv/views/cloudregion')
  13. const Zone = () => import(/* webpackChunkName: "network" */ /* webpackPrefetch: true */ '@Cloudenv/views/zone')
  14. const CdnList = () => import(/* webpackChunkName: "network" */ /* webpackPrefetch: true */ '@Network/views/cdn')
  15. const CdnCreate = () => import(/* webpackChunkName: "network" */ /* webpackPrefetch: true */ '@Network/views/cdn/create')
  16. const SslCertificateList = () => import(/* webpackChunkName: "network" */ /* webpackPrefetch: true */ '@Network/views/ssl-certificate')
  17. const VpcPeerConnectCreate = () => import(/* webpackChunkName: "network" */ /* webpackPrefetch: true */ '@Network/views/vpc-peer-connect/create')
  18. const Ipv6Gateway = () => import(/* webpackChunkName: "network" */ /* webpackPrefetch: true */ '@Network/views/ipv6-gateway')
  19. const DnsZone = () => import(/* webpackChunkName: "network" */ /* webpackPrefetch: true */ '@Network/views/dns-zone')
  20. const DnsZoneCreate = () => import(/* webpackChunkName: "network" */ /* webpackPrefetch: true */ '@Network/views/dns-zone/create')
  21. const EipCreate = () => import(/* webpackChunkName: "network" */ /* webpackPrefetch: true */ '@Network/views/eip/create')
  22. const Wire = () => import(/* webpackChunkName: "network" */ /* webpackPrefetch: true */ '@Network/views/wire')
  23. const Network = () => import(/* webpackChunkName: "network" */ /* webpackPrefetch: true */ '@Network/views/network')
  24. const NetworkCreate = () => import(/* webpackChunkName: "network" */ /* webpackPrefetch: true */ '@Network/views/network/Create')
  25. const EditAttributes = () => import(/* webpackChunkName: "network" */ /* webpackPrefetch: true */ '@Network/views/network/EditAttributes')
  26. const BatchEditAttributes = () => import(/* webpackChunkName: "network" */ /* webpackPrefetch: true */ '@Network/views/network/BatchEditAttributes')
  27. const Eip = () => import(/* webpackChunkName: "network" */ /* webpackPrefetch: true */ '@Network/views/eip')
  28. const Waf = () => import(/* webpackChunkName: "network" */ /* webpackPrefetch: true */ '@Network/views/waf')
  29. const GlobalVpc = () => import(/* webpackChunkName: "network" */ /* webpackPrefetch: true */ '@Network/views/global-vpc')
  30. const GlobalVpcCreate = () => import(/* webpackChunkName: "network" */ /* webpackPrefetch: true */ '@Network/views/global-vpc/create')
  31. const RouteTableList = () => import(/* webpackChunkName: "network" */ /* webpackPrefetch: true */ '@Network/views/route-table')
  32. const NatList = () => import(/* webpackChunkName: "network" */ /* webpackPrefetch: true */ '@Network/views/nats')
  33. const NatCreate = () => import(/* webpackChunkName: "network" */ /* webpackPrefetch: true */ '@Network/views/nats/create/index')
  34. const VPC = () => import(/* webpackChunkName: "network" */ /* webpackPrefetch: true */ '@Network/views/vpc')
  35. const VpcNetwork = () => import(/* webpackChunkName: "network" */ /* webpackPrefetch: true */ '@Network/views/vpc-network')
  36. const VpcPeerConnect = () => import(/* webpackChunkName: "network" */ /* webpackPrefetch: true */ '@Network/views/vpc-peer-connect')
  37. const VPCCreate = () => import(/* webpackChunkName: "network" */ /* webpackPrefetch: true */ '@Network/views/vpc/create')
  38. const LbList = () => import(/* webpackChunkName: "network" */ /* webpackPrefetch: true */ '@Network/views/lb')
  39. const LBCreate = () => import(/* webpackChunkName: "network" */ /* webpackPrefetch: true */ '@Network/views/lb/create/index')
  40. const LbListenerCreate = () => import(/* webpackChunkName: "network" */ /* webpackPrefetch: true */ '@Network/views/loadbalancerlistener/create')
  41. const HealthCheck = () => import(/* webpackChunkName: "network" */ /* webpackPrefetch: true */ '@Network/views/health-check')
  42. const LbaclsList = () => import(/* webpackChunkName: "network" */ /* webpackPrefetch: true */ '@Network/views/lbacls')
  43. const LbcertsList = () => import(/* webpackChunkName: "network" */ /* webpackPrefetch: true */ '@Network/views/lbcerts')
  44. const LoadbalancerclusterList = () => import(/* webpackChunkName: "network" */ /* webpackPrefetch: true */ '@Network/views/loadbalancercluster')
  45. const LBClusterUpdate = () => import(/* webpackChunkName: "network" */ /* webpackPrefetch: true */ '@Network/views/loadbalancercluster/update')
  46. const SshProxyList = () => import(/* webpackChunkName: "network" */ /* webpackPrefetch: true */ '@Network/views/ssh-proxy')
  47. const SshProxyCreate = () => import(/* webpackChunkName: "network" */ /* webpackPrefetch: true */ '@Network/views/ssh-proxy/form')
  48. const SshAgentList = () => import(/* webpackChunkName: "network" */ /* webpackPrefetch: true */ '@Network/views/ssh-agent')
  49. const WebApp = () => import(/* webpackChunkName: "compute" */ /* webpackPrefetch: true */ '@Compute/views/webapp')
  50. export default {
  51. index: 40,
  52. meta: {
  53. label: i18n.t('network.text_16'),
  54. icon: 'menu-network',
  55. },
  56. menus: [
  57. {
  58. meta: {
  59. label: i18n.t('cloudenv.text_9'),
  60. },
  61. submenus: [
  62. {
  63. path: '/cloudregion',
  64. meta: {
  65. label: i18n.t('cloudenv.text_10'),
  66. permission: 'areas_list',
  67. hidden: () => {
  68. if (isScopedPolicyMenuHidden('sub_hidden_menus.cloudregion')) {
  69. return true
  70. }
  71. return !hasSetupKey(['onestack', 'private', 'vmware', 'baremetal'])
  72. },
  73. },
  74. component: Layout,
  75. children: [
  76. {
  77. name: 'Cloudregion',
  78. path: '',
  79. component: Cloudregion,
  80. },
  81. ],
  82. },
  83. {
  84. path: '/zone',
  85. meta: {
  86. label: i18n.t('cloudenv.text_11'),
  87. permission: 'zones_list',
  88. hidden: () => {
  89. if (isScopedPolicyMenuHidden('sub_hidden_menus.zone')) {
  90. return true
  91. }
  92. return !hasSetupKey(['onestack', 'private', 'vmware', 'baremetal'])
  93. },
  94. },
  95. component: Layout,
  96. children: [
  97. {
  98. name: 'Zone',
  99. path: '',
  100. component: Zone,
  101. },
  102. ],
  103. },
  104. ],
  105. },
  106. /**
  107. * 基础网络
  108. */
  109. {
  110. meta: {
  111. label: i18n.t('network.text_711'),
  112. },
  113. submenus: [
  114. {
  115. path: '/vpc-network',
  116. meta: {
  117. permission: 'inter_vpc_networks_list',
  118. label: i18n.t('dictionary.vpc_network'),
  119. t: 'dictionary.vpc_network',
  120. hidden: () => {
  121. if (store.getters.isProjectMode || isScopedPolicyMenuHidden('sub_hidden_menus.vpc_network')) return true
  122. return !hasSetupKey(['aliyun', 'qcloud'])
  123. },
  124. },
  125. component: Layout,
  126. children: [
  127. {
  128. name: 'VpcNetwork',
  129. path: '',
  130. component: VpcNetwork,
  131. },
  132. ],
  133. },
  134. {
  135. path: '/vpc-peerconnect',
  136. meta: {
  137. label: i18n.t('dictionary.vpc_peer_connect'),
  138. permission: 'vpc_peering_connections_list',
  139. t: 'dictionary.vpc_peer_connect',
  140. hidden: () => {
  141. if (store.getters.isProjectMode || isScopedPolicyMenuHidden('sub_hidden_menus.vpc_peerconnect')) return true
  142. return !hasSetupKey(['qcloud', 'huawei', 'aws', 'hcs'])
  143. },
  144. },
  145. component: Layout,
  146. children: [
  147. {
  148. name: 'VpcPeerConnect',
  149. path: '',
  150. component: VpcPeerConnect,
  151. },
  152. {
  153. name: 'VpcPeerConnectCreate',
  154. path: 'create',
  155. component: VpcPeerConnectCreate,
  156. },
  157. ],
  158. },
  159. {
  160. path: '/globalvpc',
  161. meta: {
  162. label: i18n.t('dictionary.globalvpc'),
  163. permission: 'network_globalvpcs_list',
  164. t: 'dictionary.globalvpc',
  165. hidden: () => {
  166. if (isScopedPolicyMenuHidden('sub_hidden_menus.globalvpc')) {
  167. return true
  168. }
  169. return !hasSetupKey('google')
  170. },
  171. },
  172. component: Layout,
  173. children: [
  174. {
  175. name: 'GlobalVPC',
  176. path: '',
  177. component: GlobalVpc,
  178. },
  179. {
  180. name: 'GlobalVpcCreate',
  181. path: 'create',
  182. component: GlobalVpcCreate,
  183. },
  184. ],
  185. },
  186. {
  187. path: '/vpc',
  188. meta: {
  189. label: i18n.t('dictionary.vpc'),
  190. permission: 'vpcs_list',
  191. t: 'dictionary.vpc',
  192. hidden: () => {
  193. if (isScopedPolicyMenuHidden('sub_hidden_menus.vpc')) {
  194. return true
  195. }
  196. return !hasSetupKey(['openstack', 'onestack', 'zstack', 'dstack', 'public', 'baremetal', 'apsara', 'hcso', 'hcs', 'bingocloud'])
  197. },
  198. },
  199. component: Layout,
  200. children: [
  201. {
  202. name: 'VPC',
  203. path: '',
  204. component: VPC,
  205. },
  206. {
  207. name: 'VPCCreate',
  208. path: 'create',
  209. component: VPCCreate,
  210. },
  211. ],
  212. },
  213. {
  214. path: '/routetable',
  215. meta: {
  216. label: i18n.t('dictionary.route_table'),
  217. permission: 'route_tables_list',
  218. hidden: () => {
  219. if (isScopedPolicyMenuHidden('sub_hidden_menus.routetable')) {
  220. return true
  221. }
  222. if (store.getters.isProjectMode) return true
  223. return !hasSetupKey(['aliyun', 'qcloud', 'huawei', 'aws', 'hcs'])
  224. },
  225. },
  226. component: Layout,
  227. children: [
  228. {
  229. name: 'RouteTable',
  230. path: '',
  231. component: RouteTableList,
  232. },
  233. ],
  234. },
  235. {
  236. path: '/wire',
  237. meta: {
  238. label: i18n.t('dictionary.wire'),
  239. permission: 'wires_list',
  240. t: 'dictionary.wire',
  241. hidden: () => {
  242. if (isScopedPolicyMenuHidden('sub_hidden_menus.wire')) {
  243. return true
  244. }
  245. return !hasSetupKey(['onestack', 'vmware', 'zstack', 'dstack', 'nutanix', 'baremetal'])
  246. },
  247. // hidden: () => !hasServices(['esxiagent', 'hostagent', 'bmagent']) && !hasBrands('ZStack'),
  248. },
  249. component: Layout,
  250. children: [
  251. {
  252. name: 'WireList',
  253. path: '',
  254. component: Wire,
  255. },
  256. ],
  257. },
  258. // {
  259. // path: '/flexnetwork',
  260. // meta: {
  261. // label: '弹性网卡',
  262. // permission: 'networkcard_list',
  263. // },
  264. // component: Layout,
  265. // children: [
  266. // {
  267. // name: 'NetworkcardList',
  268. // path: '',
  269. // component: FlexNetwork,
  270. // },
  271. // ],
  272. // },
  273. {
  274. path: '/network',
  275. meta: {
  276. label: i18n.t('dictionary.network'),
  277. permission: 'networks_list',
  278. t: 'dictionary.network',
  279. hidden: () => {
  280. if (isScopedPolicyMenuHidden('sub_hidden_menus.network')) {
  281. return true
  282. }
  283. return !hasSetupKey(['onestack', 'private', 'public', 'baremetal', 'vmware'])
  284. },
  285. },
  286. component: Layout,
  287. children: [
  288. {
  289. name: 'NetworkIndex',
  290. path: '',
  291. component: Network,
  292. meta: {
  293. key: '/network',
  294. keepAlive: true,
  295. keepAliveViews: ['NetworkUpdate', 'NetworkBatchUpdate'],
  296. },
  297. },
  298. {
  299. name: 'NetworkCreate',
  300. path: 'create',
  301. component: NetworkCreate,
  302. },
  303. {
  304. name: 'NetworkUpdate',
  305. path: 'edit',
  306. component: EditAttributes,
  307. },
  308. {
  309. name: 'NetworkBatchUpdate',
  310. path: 'batch-edit',
  311. component: BatchEditAttributes,
  312. },
  313. ],
  314. },
  315. // {
  316. // path: '/reservedip',
  317. // meta: {
  318. // label: '预留IP',
  319. // permission: 'reservedips_list',
  320. // },
  321. // component: Layout,
  322. // children: [
  323. // {
  324. // name: 'ReservedIP',
  325. // path: '',
  326. // component: ReservedIpList,
  327. // },
  328. // ],
  329. // },
  330. ],
  331. },
  332. /**
  333. * 网络服务
  334. */
  335. {
  336. meta: {
  337. label: i18n.t('network.text_712'),
  338. },
  339. submenus: [
  340. {
  341. path: '/eip',
  342. meta: {
  343. label: i18n.t('dictionary.eip'),
  344. permission: 'eips_list',
  345. t: 'dictionary.eip',
  346. hidden: () => {
  347. if (isScopedPolicyMenuHidden('sub_hidden_menus.eip')) {
  348. return true
  349. }
  350. return !hasSetupKey(['onestack', 'private', 'public'])
  351. },
  352. },
  353. component: Layout,
  354. children: [
  355. {
  356. name: 'EipList',
  357. path: '',
  358. component: Eip,
  359. },
  360. {
  361. name: 'EipCreate',
  362. path: 'create',
  363. component: EipCreate,
  364. },
  365. ],
  366. },
  367. {
  368. path: '/nat',
  369. meta: {
  370. label: i18n.t('dictionary.nat'),
  371. permission: 'natgateways_list',
  372. t: 'dictionary.nat',
  373. hidden: () => {
  374. if (isScopedPolicyMenuHidden('sub_hidden_menus.nat')) {
  375. return true
  376. }
  377. return !hasSetupKey(['aliyun', 'huawei', 'hcso', 'hcs'])
  378. },
  379. },
  380. component: Layout,
  381. children: [
  382. {
  383. name: 'Nat',
  384. path: '',
  385. component: NatList,
  386. },
  387. {
  388. name: 'NatCreate',
  389. path: 'create',
  390. component: NatCreate,
  391. },
  392. ],
  393. },
  394. // {
  395. // path: '/dns',
  396. // meta: {
  397. // label: i18n.t('dictionary.dns'),
  398. // permission: 'dnsrecords_list',
  399. // t: 'dictionary.dns',
  400. // // hidden: () => true,
  401. // },
  402. // component: Layout,
  403. // children: [
  404. // {
  405. // name: 'DNS',
  406. // path: '',
  407. // component: DNS,
  408. // },
  409. // ],
  410. // },
  411. {
  412. path: '/dns-zone',
  413. meta: {
  414. label: i18n.t('dictionary.dns_zone'),
  415. permission: 'dns_zones_list',
  416. hidden: () => {
  417. if (isScopedPolicyMenuHidden('sub_hidden_menus.dns_zone')) {
  418. return true
  419. }
  420. return !hasSetupKey(['onecloud', 'aws', 'qcloud', 'aliyun', 'cloudflare'])
  421. },
  422. },
  423. component: Layout,
  424. children: [
  425. {
  426. name: 'DnsZone',
  427. path: '',
  428. component: DnsZone,
  429. },
  430. {
  431. name: 'DnsZoneCreate',
  432. path: 'create',
  433. component: DnsZoneCreate,
  434. },
  435. ],
  436. },
  437. {
  438. path: '/ipv6-gateway',
  439. meta: {
  440. label: i18n.t('dictionary.ipv6_gateway'),
  441. permission: 'ipv6_gateways_list',
  442. hidden: () => {
  443. if (isScopedPolicyMenuHidden('sub_hidden_menus.ipv6_gateway')) {
  444. return true
  445. }
  446. return !hasSetupKey(['apsara', 'aliyun'])
  447. },
  448. },
  449. component: Layout,
  450. children: [
  451. {
  452. name: 'IPv6Gateway',
  453. path: '',
  454. component: Ipv6Gateway,
  455. },
  456. ],
  457. },
  458. ],
  459. },
  460. /**
  461. * 网络安全
  462. */
  463. {
  464. meta: {
  465. label: i18n.t('network.text_756'),
  466. },
  467. submenus: [
  468. {
  469. path: '/waf',
  470. meta: {
  471. label: i18n.t('dictionary.waf_instance'),
  472. permission: 'waf_instances_list',
  473. t: 'dictionary.waf_instance',
  474. hidden: () => {
  475. if (isScopedPolicyMenuHidden('sub_hidden_menus.waf')) return true
  476. if (!(store.getters.isDomainMode || store.getters.isAdminMode)) return true
  477. return !hasSetupKey(['aws', 'azure', 'aliyun', 'qcloud', 'cloudflare'])
  478. },
  479. },
  480. component: Layout,
  481. children: [
  482. {
  483. name: 'WafList',
  484. path: '',
  485. component: Waf,
  486. },
  487. ],
  488. },
  489. {
  490. path: '/webapp',
  491. meta: {
  492. label: i18n.t('compute.webapp'),
  493. permission: 'webapps_list',
  494. hidden: () => {
  495. if (isScopedPolicyMenuHidden('sub_hidden_menus.webapp')) {
  496. return true
  497. }
  498. return !hasSetupKey(['azure'])
  499. },
  500. },
  501. component: Layout,
  502. children: [
  503. {
  504. name: 'WebApp',
  505. path: '',
  506. component: WebApp,
  507. },
  508. ],
  509. },
  510. ],
  511. },
  512. /**
  513. * SSH代理
  514. */
  515. {
  516. meta: {
  517. label: i18n.t('network.ssh-proxy.title'),
  518. hidden: () => (store.getters.isProjectMode || !hasSetupKey(['private', 'vmware', 'public'])),
  519. },
  520. submenus: [
  521. {
  522. path: '/ssh-proxy',
  523. meta: {
  524. label: i18n.t('network.ssh-proxy.endpoints'),
  525. permission: 'sshproxy_node_list',
  526. hidden: () => {
  527. if (isScopedPolicyMenuHidden('sub_hidden_menus.ssh_proxy')) {
  528. return true
  529. }
  530. return !hasSetupKey(['private', 'vmware', 'public'])
  531. },
  532. },
  533. component: Layout,
  534. children: [
  535. {
  536. name: 'SshProxyList',
  537. path: '',
  538. component: SshProxyList,
  539. },
  540. {
  541. name: 'SshProxyCreate',
  542. path: 'create',
  543. component: SshProxyCreate,
  544. },
  545. ],
  546. },
  547. {
  548. path: '/ssh-agent',
  549. meta: {
  550. label: i18n.t('network.ssh-proxy.proxyservice'),
  551. permission: 'sshproxy_service_list',
  552. hidden: () => {
  553. if (isScopedPolicyMenuHidden('sub_hidden_menus.ssh_agent')) {
  554. return true
  555. }
  556. return store.getters.isDomainMode || !hasSetupKey(['private', 'vmware', 'public'])
  557. },
  558. },
  559. component: Layout,
  560. children: [
  561. {
  562. name: 'SshAgentList',
  563. path: '',
  564. component: SshAgentList,
  565. },
  566. ],
  567. },
  568. ],
  569. },
  570. /**
  571. * 负载均衡
  572. */
  573. {
  574. meta: {
  575. label: i18n.t('network.text_713'),
  576. labelAlias: '网络负载均衡',
  577. // hidden: () => !hasServices('lbagent') && !hasHypervisors(['aliyun', 'qcloud', 'huawei', 'aws']),
  578. },
  579. submenus: [
  580. {
  581. path: '/lb',
  582. meta: {
  583. label: i18n.t('network.text_714'),
  584. permission: 'lb_loadbalancers_list',
  585. hidden: () => {
  586. if (isScopedPolicyMenuHidden('sub_hidden_menus.lb')) {
  587. return true
  588. }
  589. return !hasSetupKey(['lb', 'aliyun', 'huawei', 'qcloud', 'aws', 'k8s', 'apsara', 'hcso', 'hcs', 'azure', 'google'])
  590. },
  591. },
  592. component: Layout,
  593. children: [
  594. {
  595. name: 'LBList',
  596. path: '',
  597. component: LbList,
  598. },
  599. {
  600. name: 'LBCreate',
  601. path: 'create',
  602. component: LBCreate,
  603. },
  604. {
  605. name: 'LBSDetailListenerCreate',
  606. path: ':id/listener-create',
  607. component: LbListenerCreate,
  608. },
  609. {
  610. name: 'LBSDetailListenerUpdate',
  611. path: ':id/listener-update',
  612. component: LbListenerCreate,
  613. },
  614. ],
  615. },
  616. {
  617. path: '/lbacl',
  618. meta: {
  619. label: i18n.t('network.text_715'),
  620. permission: 'lb_loadbalanceracls_list',
  621. hidden: () => {
  622. if (isScopedPolicyMenuHidden('sub_hidden_menus.lbacl')) {
  623. return true
  624. }
  625. return !hasSetupKey(['lb', 'aliyun', 'huawei', 'qcloud', 'aws', 'k8s', 'hcso', 'hcs', 'azure', 'google'])
  626. },
  627. },
  628. component: Layout,
  629. children: [
  630. {
  631. name: 'LbaclList',
  632. path: '',
  633. component: LbaclsList,
  634. },
  635. ],
  636. },
  637. {
  638. path: '/lbcert',
  639. meta: {
  640. label: i18n.t('network.text_716'),
  641. permission: 'lb_loadbalancercertificates_list',
  642. hidden: () => {
  643. if (isScopedPolicyMenuHidden('sub_hidden_menus.lbcert')) {
  644. return true
  645. }
  646. return !hasSetupKey(['lb', 'aliyun', 'huawei', 'qcloud', 'aws', 'k8s', 'apsara', 'hcso', 'hcs', 'azure', 'google'])
  647. },
  648. },
  649. component: Layout,
  650. children: [
  651. {
  652. name: 'LbcertList',
  653. path: '',
  654. component: LbcertsList,
  655. },
  656. ],
  657. },
  658. {
  659. path: '/health-check',
  660. meta: {
  661. label: i18n.t('network.health_check'),
  662. permission: 'loadbalancer_health_checks_list',
  663. t: 'network.health_check',
  664. hidden: () => {
  665. if (isScopedPolicyMenuHidden('sub_hidden_menus.health_check')) {
  666. return true
  667. }
  668. return !hasSetupKey(['lb', 'aliyun', 'huawei', 'qcloud', 'aws', 'k8s', 'apsara', 'hcso', 'hcs', 'azure', 'google'])
  669. },
  670. },
  671. component: Layout,
  672. children: [
  673. {
  674. name: 'HealthCheckList',
  675. path: '',
  676. component: HealthCheck,
  677. },
  678. ],
  679. },
  680. ],
  681. },
  682. /**
  683. * 负载均衡集群
  684. */
  685. {
  686. meta: {
  687. label: i18n.t('network.text_17'),
  688. labelAlias: i18n.t('network.text_18'),
  689. },
  690. submenus: [
  691. {
  692. path: '/cluster',
  693. meta: {
  694. label: i18n.t('network.text_19'),
  695. permission: 'lb_loadbalancerclusters_list',
  696. hidden: () => {
  697. if (isScopedPolicyMenuHidden('sub_hidden_menus.cluster')) {
  698. return true
  699. }
  700. return !hasSetupKey(['lb', 'k8s'])
  701. },
  702. },
  703. component: Layout,
  704. children: [
  705. {
  706. name: 'LoadbalancerclusterIndex',
  707. path: '',
  708. component: LoadbalancerclusterList,
  709. meta: {
  710. key: '/cluster',
  711. keepAlive: true,
  712. keepAliveViews: ['LBClusterUpdate'],
  713. },
  714. },
  715. {
  716. name: 'LBClusterUpdate',
  717. path: 'update',
  718. component: LBClusterUpdate,
  719. },
  720. ],
  721. },
  722. {
  723. path: '/lbagent',
  724. meta: {
  725. label: i18n.t('network.text_20'),
  726. permission: 'lb_loadbalanceragents_list',
  727. hidden: () => {
  728. if (isScopedPolicyMenuHidden('sub_hidden_menus.lbagent')) {
  729. return true
  730. }
  731. return !hasSetupKey(['lb', 'k8s'])
  732. },
  733. },
  734. component: Layout,
  735. children: [
  736. {
  737. name: 'AgentIndex',
  738. path: '',
  739. component: AgentList,
  740. meta: {
  741. key: '/lbagent',
  742. keepAlive: true,
  743. keepAliveViews: ['AgentForm'],
  744. },
  745. },
  746. {
  747. name: 'AgentForm',
  748. path: 'form',
  749. component: AgentForm,
  750. },
  751. ],
  752. },
  753. ],
  754. },
  755. {
  756. meta: {
  757. label: i18n.t('dictionary.cdn'),
  758. },
  759. submenus: [
  760. {
  761. path: '/cdn',
  762. meta: {
  763. label: i18n.t('dictionary.cdn_domain'),
  764. permission: 'cdn_domains_list',
  765. t: 'dictionary.cdn_domain',
  766. hidden: () => {
  767. if (isScopedPolicyMenuHidden('sub_hidden_menus.cdn')) {
  768. return true
  769. }
  770. return !hasSetupKey(['aliyun', 'qcloud', 'cloudflare'])
  771. },
  772. },
  773. component: Layout,
  774. children: [
  775. {
  776. name: 'CdnList',
  777. path: '',
  778. component: CdnList,
  779. },
  780. {
  781. name: 'CdnCreate',
  782. path: 'create',
  783. component: CdnCreate,
  784. },
  785. ],
  786. },
  787. {
  788. path: '/ssl-certificate',
  789. meta: {
  790. label: i18n.t('network.ssl_certificate'),
  791. permission: 'ssl_certificates_list',
  792. t: 'network.ssl_certificate',
  793. hidden: () => {
  794. if (isScopedPolicyMenuHidden('sub_hidden_menus.ssl_certificate')) {
  795. return true
  796. }
  797. return !hasSetupKey(['cloudflare'])
  798. },
  799. },
  800. component: Layout,
  801. children: [
  802. {
  803. name: 'SslCertificateList',
  804. path: '',
  805. component: SslCertificateList,
  806. },
  807. ],
  808. },
  809. ],
  810. },
  811. ],
  812. }